图像与设计
使用 @json-render/shadcn 为…
在基于 json-render 构建 Web UI、需要 Radix UI + Tailwind CSS 标准 shadcn/ui 组件目录与实现时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
使用 @json-render/shad特定
解决思路
- 从 `@json-render/shadcn/catalog` 导入 `shadcnComponentDefinitions`,用于生成 catalog schema;该入口不依赖 React,可安全用于服务端。
- 从 `@json-render/shadcn` 导入 `shadcnComponents`,用于 React 组件实现。
- 只从标准定义中挑选应用实际需要的组件,不要展开全部定义。
- 使用 `@json-render/core` 的 `defineCatalog` 和 `@json-render/react/schema` 的 `schema` 创建 catalog,在 `components` 中显式列出所选组件定义,并按需传入 `actions`。
- 使用 `@json-render/react` 的 `defineRegistry` 创建 registry,在 `components` 中为 catalog 里每个组件映射对应的 `shadcnComponents` 实现。
- 不要声明 `setState`、`pushState`、`removeState` 等状态 action;它们内建于 React schema,并由 `ActionProvider` 自动处理。
- 扩展自定义组件时,在 `defineCatalog(schema, ...)` 的 `components` 中,把自定义组件与标准组件并列添加;用 `z.object` 定义 props,并提供 `description`。
- 在 `defineRegistry(catalog, ...)` 的 `components` 中为自定义组件提供 React 实现函数,例如 `Metric: ({ props }) => <div>{props.label}: {props.value}</div>`。
- 按需选用布局组件:Card(带可选 title、description、maxWidth、centered)、Stack(direction、gap、align、justify)、Grid(columns、gap)、Separator(orientation)。
- 按需选用导航组件:Tabs(tabs、defaultValue、value)、Accordion(items、type single/multiple)、Collapsible(title)、Pagination(totalPages、page)。
- 按需选用浮层组件:Dialog(title、description、openPath)、Drawer(title、description、openPath)、Tooltip(content、text)、Popover(trigger、content)、DropdownMenu(label、items)。
- 按需选用内容组件:Heading(level h1-h4)、Text(variant body/caption/muted/lead/code)、Image(alt、width、height)、Avatar(src、name、size)、Badge(text、variant default/secondary/destructive/outline)、Alert(title、message、type success/warning/info/error)、Carousel(items)、Table(columns string[]、rows string[][])。
- 按需选用反馈组件:Progress(value、max、label)、Skeleton(width、height、rounded)、Spinner(size、label)。
- 按需选用输入组件:Button(label、variant primary/secondary/danger、disabled)、Link(label、href)、Input(label、name、type、placeholder、value、checks)、Textarea(label、name、placeholder、rows、value、checks)、Select(label、name、options string[]、value、checks)、Checkbox(label、name、checked、checks、validateOn)、Radio(label、name、options string[]、value、checks、validateOn)、Switch(label、name、checked、checks、validateOn)、Slider(label、min、max、step、value)、Toggle(label、pressed、variant)、ToggleGroup(items、type、value)、ButtonGroup(buttons、selected)。
- 使用内建于 `@json-render/react` 并由 `ActionProvider` 自动处理的 actions:`setState`(`{ statePath, value }`)、`pushState`(`{ statePath, value, clearStatePath? }`)、`removeState`(`{ statePath, index }`)、`validateForm`(`{ statePath? }`,把 `{ valid, errors }` 写入 state)。这些 action 无需在 catalog 中声明即可出现在 prompts 中。
- 对所有表单组件按需设置 `validateOn`:`change`(Select、Checkbox、Radio、Switch 的默认值)、`blur`(Input、Textarea 的默认值)、`submit`(仅在表单提交时验证)。
- 为所有表单输入使用 `checks`(type + message 对)做校验,并配合 `validateOn` 控制校验时机。
- 处理事件时:inputs 发出 `change`/`submit`/`focus`/`blur`;buttons 发出 `press`;selects 发出 `change`/`select`。
- 服务端生成 prompt 时只使用 `/catalog` 入口,不要在该场景引入 React 实现。
- 确保应用已配置 Tailwind CSS,因为组件使用 Tailwind CSS 类。
- 注意组件实现使用包内捆绑的 shadcn/ui primitives,而不是应用自己的 `components/ui/`。
适用边界 · 注意事项
- 未使用 @json-render 或 @json-render/shadcn 时,不要用本技能。
- 应用未配置 Tailwind CSS 时,组件样式不会正常生效。
- 需要直接使用或修改应用自身的 `components/ui/` shadcn/ui 实现时,不适用;本包使用捆绑的 shadcn/ui primitives。