Labsco
vercel-labs logo

vue

15,600

by vercel · part of vercel-labs/json-render

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…

🔥🔥🔥✓ VerifiedFreeQuick setup
🧰 Not standalone. This skill ships with vercel-labs/json-render and only works together with that tool — install the tool first, then add this skill.

This is the playbook your agent receives when the skill activates — you don't need to read it to use the skill, but it's here to audit before installing.

by vercel

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… npx skills add https://github.com/vercel-labs/json-render --skill vue Download ZIPGitHub15.6k

@json-render/vue

Vue 3 renderer that converts JSON specs into Vue component trees with data binding, visibility, and actions.

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)

Pass a StateStore to StateProvider to wire json-render to Pinia, VueUse, or any state management:

import { createStateStore, type StateStore } from "@json-render/vue";

const store = createStateStore({ count: 0 });
 
 
 

Dynamic Prop Expressions

Props support $state, $bindState, $cond, $template, $computed. Use { "$bindState": "/path" } on the natural value prop for two-way binding.

Visibility Conditions

{ "$state": "/user/isAdmin" }
{ "$state": "/status", "eq": "active" }
{ "$state": "/maintenance", "not": true }
[ cond1, cond2 ] // implicit AND

Built-in Actions

setState, pushState, removeState, and validateForm are built into the Vue schema and handled by ActionProvider:

{
 "action": "setState",
 "params": { "statePath": "/activeTab", "value": "settings" }
}

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:

import type { BaseComponentProps } from "@json-render/vue";

const Card = ({ props, children }: BaseComponentProps ) =>
 h("div", null, [props.title, children]);

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