solid

द्वारा vercel

SolidJS रेंडरर json-render के लिए। @json-render/solid कैटलॉग/रजिस्ट्री बनाते समय, Renderer प्रदाताओं को वायर करते समय, बाइंडिंग/एक्शन लागू करते समय, या… उपयोग करें।

npx skills add https://github.com/vercel-labs/json-render --skill solid

@json-render/solid

@json-render/solid renders json-render specs into Solid component trees with fine-grained reactivity.

Quick Start

import { Renderer, JSONUIProvider } from "@json-render/solid";
import type { Spec } from "@json-render/solid";
import { registry } from "./registry";

export function App(props: { spec: Spec | null }) {
  return (
    <JSONUIProvider registry={registry} initialState={{}}>
      <Renderer spec={props.spec} registry={registry} />
    </JSONUIProvider>
  );
}

Create a Catalog

import { defineCatalog } from "@json-render/core";
import { schema } from "@json-render/solid/schema";
import { z } from "zod";

export const catalog = defineCatalog(schema, {
  components: {
    Button: {
      props: z.object({
        label: z.string(),
        variant: z.enum(["primary", "secondary"]).nullable(),
      }),
      description: "Clickable button",
    },
    Card: {
      props: z.object({ title: z.string() }),
      description: "Card container",
    },
  },
  actions: {
    submit: { description: "Submit data" },
  },
});

Define Components

Components receive ComponentRenderProps from the renderer:

interface ComponentRenderProps<P = Record<string, unknown>> {
  element: UIElement<string, P>;
  children?: JSX.Element;
  emit: (event: string) => void;
  on: (event: string) => EventHandle;
  bindings?: Record<string, string>;
  loading?: boolean;
}

Example:

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

export function Button(props: BaseComponentProps<{ label: string }>) {
  return (
    <button onClick={() => props.emit("press")}>{props.props.label}</button>
  );
}

Create a Registry

import { defineRegistry } from "@json-render/solid";
import { catalog } from "./catalog";
import { Card } from "./Card";
import { Button } from "./Button";

const { registry, handlers, executeAction } = defineRegistry(catalog, {
  components: {
    Card,
    Button,
  },
  actions: {
    submit: async (params, setState, state) => {
      // custom action logic
    },
  },
});

Spec Structure

{
  "root": "card1",
  "elements": {
    "card1": {
      "type": "Card",
      "props": { "title": "Hello" },
      "children": ["btn1"]
    },
    "btn1": {
      "type": "Button",
      "props": { "label": "Click me" },
      "on": {
        "press": { "action": "submit" }
      }
    }
  }
}

Providers

  • StateProvider: state model read/write and controlled mode via store
  • VisibilityProvider: evaluates visible conditions
  • ValidationProvider: field validation + validateForm integration
  • ActionProvider: runs built-in and custom actions
  • JSONUIProvider: combined provider wrapper

Hooks

  • useStateStore, useStateValue, useStateBinding
  • useVisibility, useIsVisible
  • useActions, useAction
  • useValidation, useOptionalValidation, useFieldValidation
  • useBoundProp
  • useUIStream, useChatUI

Built-in Actions

Handled automatically by ActionProvider:

  • setState
  • pushState
  • removeState
  • validateForm

Dynamic Props and Bindings

Nested lists can set repeat.statePath to { "$item": "field" } inside an enclosing repeat.

Supported expression forms include:

  • {"$state": "/path"}
  • {"$bindState": "/path"}
  • {"$bindItem": "field"}
  • {"$template": "Hi ${/user/name}"}
  • {"$computed": "fn", "args": {...}}
  • {"$cond": <condition>, "$then": <value>, "$else": <value>}

Use useBoundProp in components for writable bound values:

import { useBoundProp } from "@json-render/solid";

function Input(props: BaseComponentProps<{ value?: string }>) {
  const [value, setValue] = useBoundProp(
    props.props.value,
    props.bindings?.value,
  );
  return (
    <input
      value={String(value() ?? "")}
      onInput={(e) => setValue(e.currentTarget.value)}
    />
  );
}

useStateValue, useStateBinding, and the state / errors / isValid fields from useFieldValidation are reactive accessors in Solid. Call them as functions inside JSX, createMemo, or createEffect.

Solid Reactivity Rules

  • Do not destructure component props in function signatures when values need to stay reactive.
  • Keep changing reads inside JSX expressions, createMemo, or createEffect.
  • Context values are exposed through getter-based objects so consumers always observe live signals.

Streaming UI

import { useUIStream, Renderer } from "@json-render/solid";

const stream = useUIStream({ api: "/api/generate-ui" });
await stream.send("Create a support dashboard");

<Renderer
  spec={stream.spec}
  registry={registry}
  loading={stream.isStreaming}
/>;

Use useChatUI for chat + UI generation flows.

vercel की और Skills

vercel
vercel
स्थानीय विकास और परीक्षण के लिए अनुकरणित Vercel REST API। उपयोग तब करें जब उपयोगकर्ता को स्थानीय रूप से Vercel API एंडपॉइंट्स के साथ इंटरैक्ट करने, Vercel इंटीग्रेशन का परीक्षण करने की आवश्यकता हो,…
cron-jobs
vercel
Vercel Cron Jobs कॉन्फ़िगरेशन और सर्वोत्तम अभ्यास। vercel.json में शेड्यूल किए गए कार्यों को जोड़ने, संपादित करने या डीबग करने पर उपयोग करें।
codegen
vercel
json-render के लिए कोड जनरेशन उपयोगिताएँ। UI स्पेक्स से कोड जनरेट करते समय, कस्टम कोड एक्सपोर्टर बनाते समय, स्पेक्स को ट्रैवर्स करते समय, या प्रॉप्स को सीरियलाइज़ करते समय उपयोग करें…
next-best-practice
vercel
Next.js सर्वोत्तम अभ्यास - फ़ाइल परंपराएँ, RSC सीमाएँ, डेटा पैटर्न, async API, मेटाडेटा, त्रुटि प्रबंधन, रूट हैंडलर, इमेज/फ़ॉन्ट अनुकूलन,…
benchmark-sandbox
vercel
Vercel Sandboxes में vercel-plugin eval परिदृश्य चलाएँ, स्थानीय WezTerm पैनलों के बजाय। Claude Code + प्लगइन पूर्व-स्थापित के साथ अस्थायी microVMs प्रदान करता है,…
write-guide
vercel
एक तकनीकी गाइड तैयार करें जो प्रगतिशील उदाहरणों के माध्यम से एक वास्तविक दुनिया के उपयोग के मामले को सिखाता है। अवधारणाओं को केवल तब पेश किया जाता है जब पाठक को उनकी आवश्यकता होती है।
benchmark-testing
vercel
बेंचमार्क परीक्षण परियोजनाएँ बनाएँ और लॉन्च करें ताकि वास्तविक परिदृश्यों में vercel-plugin कौशल इंजेक्शन का परीक्षण किया जा सके। पृथक निर्देशिकाएँ सेट करता है, इंस्टॉल करता है…
ai-gateway
vercel
Vercel AI गेटवे विशेषज्ञ मार्गदर्शन। मॉडल रूटिंग, प्रदाता फेलओवर, लागत ट्रैकिंग, या एकीकृत माध्यम से कई AI प्रदाताओं के प्रबंधन को कॉन्फ़िगर करते समय उपयोग करें…