vue

Vue 3 renderer for json-render. Use when building Vue UIs from JSON specs, working with @json-render/vue, defining Vue component registries, or rendering AI-generated specs in Vue.

By vercel-labs · 1,183 installs

npx skills add vercel-labs/json-render --skill vue

Source repository · Upstream listing

@json render/vue Vue 3 renderer that converts JSON specs into Vue component trees with data binding, visibility, and actions. Installation Peer dependencies: vue ^3.5.0 and zod ^4.0.0 . Quick Start Create a Catalog Define Registry with h() Render Functions Named Slots Use children for the "default" slot. Use the element's top level slots object for other slot names declared by the catalog: Registry components receive Vue native slot functions. Render them with slots.header?.() , slots.footer?.() , and so on. slots.default?.() renders the spec's children ; the children context field is a convenience alias for that rendered result. In the JSON spec, keep default content in children rather than adding a default entry to slots . Render Specs Providers Provider Purpose StateProvider Share state across components (JSON Pointer paths). Accepts initialState or store for controlled mode. ActionProvider Handle actions dispatched via the event system VisibilityProvider Enable conditional rendering based on state ValidationProvider Form field validation Composables Composable Purpose useStateStore() Access state context ( state as ShallowRef , get , set , update ) useStateValue(path) Get single value from state useIsVisible(condition) Check if a visibility condition is met useActions() Access action context useAction(binding) Get a single action dispatch function useFieldValidation(path, config) Field validation state useBoundProp(propValue, bindingPath) Two way binding for $bindState / $bindItem Note: useStateStore().state returns a ShallowRef<StateModel — use state.value to access. External Store (StateStore) Nested lists can set repeat.statePath to { "$item": "field" } inside an enclosing repeat. Pass a StateStore to StateProvider to wire json render to Pinia, VueUse, or any state management: Dynamic Prop Expressions Props support $state , $bindState , $cond , $template , $computed . Use { "$bindState": "/path" } on the natural value prop for two way binding. Visibility Conditions Built in Actions setState , pushState , removeState , and validateForm are built into the Vue schema and handled by ActionProvider : Event System Components use emit(event) to fire events, or on(event) for metadata ( shouldPreventDefault , bound ). Streaming useUIStream and useChatUI return Vue Refs for streaming specs from an API. BaseComponentProps For catalog agnostic reusable components: Key Exports Export Purpose defineRegistry Create a type safe component registry from a catalog Renderer Render a spec using a registry schema Element tree schema (from @json render/vue/schema ) StateProvider , ActionProvider , VisibilityProvider , ValidationProvider Context providers useStateStore , useStateValue , useBoundProp State composables useActions , useAction Action composables useFieldValidation , useIsVisible Validation and visibility useUIStream , useChatUI Streaming composables createStateStore Create in memory StateStore BaseComponentProps Catalog agnostic component props type