pmx-canvas 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/LICENSE +21 -0
  3. package/Readme.md +865 -0
  4. package/dist/canvas/global.css +3173 -0
  5. package/dist/canvas/index.js +183 -0
  6. package/dist/json-render/index.css +2 -0
  7. package/dist/json-render/index.js +389 -0
  8. package/dist/types/cli/agent.d.ts +13 -0
  9. package/dist/types/cli/index.d.ts +2 -0
  10. package/dist/types/cli/watch.d.ts +5 -0
  11. package/dist/types/client/App.d.ts +1 -0
  12. package/dist/types/client/canvas/AttentionHistory.d.ts +1 -0
  13. package/dist/types/client/canvas/AttentionToast.d.ts +1 -0
  14. package/dist/types/client/canvas/CanvasNode.d.ts +8 -0
  15. package/dist/types/client/canvas/CanvasViewport.d.ts +8 -0
  16. package/dist/types/client/canvas/CommandPalette.d.ts +4 -0
  17. package/dist/types/client/canvas/ContextMenu.d.ts +24 -0
  18. package/dist/types/client/canvas/ContextPinBar.d.ts +1 -0
  19. package/dist/types/client/canvas/ContextPinHud.d.ts +1 -0
  20. package/dist/types/client/canvas/DockedNode.d.ts +4 -0
  21. package/dist/types/client/canvas/EdgeLayer.d.ts +8 -0
  22. package/dist/types/client/canvas/ExpandedNodeOverlay.d.ts +1 -0
  23. package/dist/types/client/canvas/FocusFieldLayer.d.ts +1 -0
  24. package/dist/types/client/canvas/Minimap.d.ts +23 -0
  25. package/dist/types/client/canvas/SelectionBar.d.ts +1 -0
  26. package/dist/types/client/canvas/ShortcutOverlay.d.ts +3 -0
  27. package/dist/types/client/canvas/SnapshotPanel.d.ts +7 -0
  28. package/dist/types/client/canvas/snap-guides.d.ts +23 -0
  29. package/dist/types/client/canvas/use-node-drag.d.ts +15 -0
  30. package/dist/types/client/canvas/use-node-resize.d.ts +15 -0
  31. package/dist/types/client/canvas/use-pan-zoom.d.ts +16 -0
  32. package/dist/types/client/ext-app/bridge.d.ts +161 -0
  33. package/dist/types/client/icons.d.ts +70 -0
  34. package/dist/types/client/index.d.ts +1 -0
  35. package/dist/types/client/nodes/ContextNode.d.ts +34 -0
  36. package/dist/types/client/nodes/ExtAppFrame.d.ts +18 -0
  37. package/dist/types/client/nodes/FileNode.d.ts +5 -0
  38. package/dist/types/client/nodes/GroupNode.d.ts +6 -0
  39. package/dist/types/client/nodes/ImageNode.d.ts +10 -0
  40. package/dist/types/client/nodes/InlineFormatBar.d.ts +7 -0
  41. package/dist/types/client/nodes/InlineMarkdownEditor.d.ts +14 -0
  42. package/dist/types/client/nodes/LedgerNode.d.ts +4 -0
  43. package/dist/types/client/nodes/MarkdownNode.d.ts +6 -0
  44. package/dist/types/client/nodes/McpAppNode.d.ts +4 -0
  45. package/dist/types/client/nodes/MdFormatBar.d.ts +8 -0
  46. package/dist/types/client/nodes/PromptNode.d.ts +5 -0
  47. package/dist/types/client/nodes/ResponseNode.d.ts +5 -0
  48. package/dist/types/client/nodes/StatusNode.d.ts +4 -0
  49. package/dist/types/client/nodes/StatusSummary.d.ts +4 -0
  50. package/dist/types/client/nodes/TraceNode.d.ts +4 -0
  51. package/dist/types/client/nodes/WebpageNode.d.ts +5 -0
  52. package/dist/types/client/nodes/image-warnings.d.ts +6 -0
  53. package/dist/types/client/nodes/inline-editor-commands.d.ts +11 -0
  54. package/dist/types/client/nodes/md-format.d.ts +25 -0
  55. package/dist/types/client/state/attention-bridge.d.ts +3 -0
  56. package/dist/types/client/state/attention-store.d.ts +25 -0
  57. package/dist/types/client/state/canvas-store.d.ts +74 -0
  58. package/dist/types/client/state/intent-bridge.d.ts +158 -0
  59. package/dist/types/client/state/sse-bridge.d.ts +5 -0
  60. package/dist/types/client/theme/tokens.d.ts +27 -0
  61. package/dist/types/client/types.d.ts +40 -0
  62. package/dist/types/client/utils/ext-app-tool-result.d.ts +1 -0
  63. package/dist/types/client/utils/placement.d.ts +1 -0
  64. package/dist/types/client/utils/platform.d.ts +2 -0
  65. package/dist/types/json-render/catalog.d.ts +815 -0
  66. package/dist/types/json-render/charts/components.d.ts +54 -0
  67. package/dist/types/json-render/charts/definitions.d.ts +103 -0
  68. package/dist/types/json-render/charts/extra-components.d.ts +58 -0
  69. package/dist/types/json-render/charts/extra-definitions.d.ts +181 -0
  70. package/dist/types/json-render/renderer/index.d.ts +16 -0
  71. package/dist/types/json-render/schema.d.ts +46 -0
  72. package/dist/types/json-render/server.d.ts +55 -0
  73. package/dist/types/mcp/server.d.ts +22 -0
  74. package/dist/types/server/agent-context.d.ts +21 -0
  75. package/dist/types/server/artifact-paths.d.ts +3 -0
  76. package/dist/types/server/canvas-operations.d.ts +154 -0
  77. package/dist/types/server/canvas-provenance.d.ts +13 -0
  78. package/dist/types/server/canvas-schema.d.ts +49 -0
  79. package/dist/types/server/canvas-serialization.d.ts +25 -0
  80. package/dist/types/server/canvas-state.d.ts +174 -0
  81. package/dist/types/server/canvas-validation.d.ts +33 -0
  82. package/dist/types/server/chart-template.d.ts +29 -0
  83. package/dist/types/server/code-graph.d.ts +67 -0
  84. package/dist/types/server/context-cards.d.ts +24 -0
  85. package/dist/types/server/diagram-presets.d.ts +28 -0
  86. package/dist/types/server/ext-app-call-registry.d.ts +16 -0
  87. package/dist/types/server/ext-app-tool-result.d.ts +1 -0
  88. package/dist/types/server/file-watcher.d.ts +16 -0
  89. package/dist/types/server/index.d.ts +243 -0
  90. package/dist/types/server/mcp-app-candidate.d.ts +25 -0
  91. package/dist/types/server/mcp-app-host.d.ts +65 -0
  92. package/dist/types/server/mcp-app-runtime.d.ts +47 -0
  93. package/dist/types/server/mutation-history.d.ts +105 -0
  94. package/dist/types/server/placement.d.ts +37 -0
  95. package/dist/types/server/server.d.ts +103 -0
  96. package/dist/types/server/spatial-analysis.d.ts +87 -0
  97. package/dist/types/server/trace-manager.d.ts +48 -0
  98. package/dist/types/server/web-artifacts.d.ts +50 -0
  99. package/dist/types/server/webpage-node.d.ts +25 -0
  100. package/dist/types/shared/auto-arrange.d.ts +29 -0
  101. package/dist/types/shared/ext-app-tool-result.d.ts +9 -0
  102. package/dist/types/shared/placement.d.ts +26 -0
  103. package/dist/types/shared/semantic-attention.d.ts +97 -0
  104. package/package.json +109 -0
  105. package/skills/data-analysis/SKILL.md +324 -0
  106. package/skills/doc-coauthoring/SKILL.md +375 -0
  107. package/skills/frontend-design/SKILL.md +45 -0
  108. package/skills/json-render-codegen/SKILL.md +112 -0
  109. package/skills/json-render-core/SKILL.md +265 -0
  110. package/skills/json-render-ink/SKILL.md +273 -0
  111. package/skills/json-render-mcp/SKILL.md +132 -0
  112. package/skills/json-render-react/SKILL.md +264 -0
  113. package/skills/json-render-shadcn/SKILL.md +159 -0
  114. package/skills/playwright-cli/SKILL.md +67 -0
  115. package/skills/pmx-canvas/SKILL.md +668 -0
  116. package/skills/pmx-canvas/evals/evals.json +186 -0
  117. package/skills/pmx-canvas-testing/SKILL.md +78 -0
  118. package/skills/published-consumer-e2e/SKILL.md +43 -0
  119. package/skills/published-consumer-e2e/scripts/run-published-consumer-e2e.sh +241 -0
  120. package/skills/web-artifacts-builder/SKILL.md +80 -0
  121. package/skills/web-artifacts-builder/scripts/bundle-artifact.sh +167 -0
  122. package/skills/web-artifacts-builder/scripts/init-artifact.sh +425 -0
  123. package/skills/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  124. package/skills/web-design-guidelines/SKILL.md +39 -0
  125. package/src/cli/agent.ts +2144 -0
  126. package/src/cli/index.ts +622 -0
  127. package/src/cli/watch.ts +88 -0
  128. package/src/client/App.tsx +507 -0
  129. package/src/client/canvas/AttentionHistory.tsx +81 -0
  130. package/src/client/canvas/AttentionToast.tsx +19 -0
  131. package/src/client/canvas/CanvasNode.tsx +363 -0
  132. package/src/client/canvas/CanvasViewport.tsx +590 -0
  133. package/src/client/canvas/CommandPalette.tsx +302 -0
  134. package/src/client/canvas/ContextMenu.tsx +601 -0
  135. package/src/client/canvas/ContextPinBar.tsx +25 -0
  136. package/src/client/canvas/ContextPinHud.tsx +22 -0
  137. package/src/client/canvas/DockedNode.tsx +66 -0
  138. package/src/client/canvas/EdgeLayer.tsx +280 -0
  139. package/src/client/canvas/ExpandedNodeOverlay.tsx +260 -0
  140. package/src/client/canvas/FocusFieldLayer.tsx +107 -0
  141. package/src/client/canvas/Minimap.tsx +301 -0
  142. package/src/client/canvas/SelectionBar.tsx +69 -0
  143. package/src/client/canvas/ShortcutOverlay.tsx +69 -0
  144. package/src/client/canvas/SnapshotPanel.tsx +236 -0
  145. package/src/client/canvas/snap-guides.ts +170 -0
  146. package/src/client/canvas/use-node-drag.ts +51 -0
  147. package/src/client/canvas/use-node-resize.ts +59 -0
  148. package/src/client/canvas/use-pan-zoom.ts +191 -0
  149. package/src/client/ext-app/bridge.ts +542 -0
  150. package/src/client/icons.tsx +424 -0
  151. package/src/client/index.tsx +7 -0
  152. package/src/client/nodes/ContextNode.tsx +412 -0
  153. package/src/client/nodes/ExtAppFrame.tsx +509 -0
  154. package/src/client/nodes/FileNode.tsx +256 -0
  155. package/src/client/nodes/GroupNode.tsx +39 -0
  156. package/src/client/nodes/ImageNode.tsx +160 -0
  157. package/src/client/nodes/InlineFormatBar.tsx +169 -0
  158. package/src/client/nodes/InlineMarkdownEditor.tsx +123 -0
  159. package/src/client/nodes/LedgerNode.tsx +37 -0
  160. package/src/client/nodes/MarkdownNode.tsx +359 -0
  161. package/src/client/nodes/McpAppNode.tsx +85 -0
  162. package/src/client/nodes/MdFormatBar.tsx +109 -0
  163. package/src/client/nodes/PromptNode.tsx +597 -0
  164. package/src/client/nodes/ResponseNode.tsx +153 -0
  165. package/src/client/nodes/StatusNode.tsx +84 -0
  166. package/src/client/nodes/StatusSummary.tsx +38 -0
  167. package/src/client/nodes/TraceNode.tsx +120 -0
  168. package/src/client/nodes/WebpageNode.tsx +288 -0
  169. package/src/client/nodes/image-warnings.ts +95 -0
  170. package/src/client/nodes/inline-editor-commands.ts +37 -0
  171. package/src/client/nodes/md-format.ts +206 -0
  172. package/src/client/state/attention-bridge.ts +328 -0
  173. package/src/client/state/attention-store.ts +73 -0
  174. package/src/client/state/canvas-store.ts +631 -0
  175. package/src/client/state/intent-bridge.ts +315 -0
  176. package/src/client/state/sse-bridge.ts +965 -0
  177. package/src/client/theme/global.css +3173 -0
  178. package/src/client/theme/tokens.ts +72 -0
  179. package/src/client/types-shims.d.ts +5 -0
  180. package/src/client/types.ts +81 -0
  181. package/src/client/utils/ext-app-tool-result.ts +4 -0
  182. package/src/client/utils/placement.ts +4 -0
  183. package/src/client/utils/platform.ts +2 -0
  184. package/src/json-render/catalog.ts +256 -0
  185. package/src/json-render/charts/components.tsx +198 -0
  186. package/src/json-render/charts/definitions.ts +81 -0
  187. package/src/json-render/charts/extra-components.tsx +267 -0
  188. package/src/json-render/charts/extra-definitions.ts +145 -0
  189. package/src/json-render/renderer/index.css +174 -0
  190. package/src/json-render/renderer/index.tsx +86 -0
  191. package/src/json-render/schema.ts +62 -0
  192. package/src/json-render/server.ts +597 -0
  193. package/src/mcp/server.ts +1377 -0
  194. package/src/server/agent-context.ts +242 -0
  195. package/src/server/artifact-paths.ts +17 -0
  196. package/src/server/canvas-operations.ts +1279 -0
  197. package/src/server/canvas-provenance.ts +243 -0
  198. package/src/server/canvas-schema.ts +432 -0
  199. package/src/server/canvas-serialization.ts +95 -0
  200. package/src/server/canvas-state.ts +1134 -0
  201. package/src/server/canvas-validation.ts +114 -0
  202. package/src/server/chart-template.ts +449 -0
  203. package/src/server/code-graph.ts +370 -0
  204. package/src/server/context-cards.ts +31 -0
  205. package/src/server/diagram-presets.ts +71 -0
  206. package/src/server/ext-app-call-registry.ts +77 -0
  207. package/src/server/ext-app-tool-result.ts +4 -0
  208. package/src/server/file-watcher.ts +121 -0
  209. package/src/server/index.ts +647 -0
  210. package/src/server/mcp-app-candidate.ts +174 -0
  211. package/src/server/mcp-app-host.ts +814 -0
  212. package/src/server/mcp-app-runtime.ts +459 -0
  213. package/src/server/mutation-history.ts +350 -0
  214. package/src/server/placement.ts +125 -0
  215. package/src/server/server.ts +3846 -0
  216. package/src/server/spatial-analysis.ts +356 -0
  217. package/src/server/trace-manager.ts +333 -0
  218. package/src/server/web-artifacts/scripts/bundle-artifact.sh +167 -0
  219. package/src/server/web-artifacts/scripts/init-artifact.sh +426 -0
  220. package/src/server/web-artifacts/scripts/shadcn-components.tar.gz +0 -0
  221. package/src/server/web-artifacts.ts +442 -0
  222. package/src/server/webpage-node.ts +328 -0
  223. package/src/shared/auto-arrange.ts +439 -0
  224. package/src/shared/ext-app-tool-result.ts +76 -0
  225. package/src/shared/placement.ts +81 -0
  226. package/src/shared/semantic-attention.ts +598 -0
@@ -0,0 +1,815 @@
1
+ /**
2
+ * json-render catalog definition for PMX Canvas.
3
+ *
4
+ * Uses the shadcn component set from @json-render/shadcn/catalog plus local
5
+ * chart components. The catalog validates specs before they are stored in
6
+ * canvas node state or rendered in the browser viewer.
7
+ */
8
+ export declare const allComponentDefinitions: {
9
+ AreaChart: {
10
+ readonly props: import("zod").ZodObject<{
11
+ title: import("zod").ZodNullable<import("zod").ZodString>;
12
+ data: import("zod").ZodArray<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
13
+ xKey: import("zod").ZodString;
14
+ yKey: import("zod").ZodString;
15
+ aggregate: import("zod").ZodNullable<import("zod").ZodEnum<{
16
+ count: "count";
17
+ sum: "sum";
18
+ avg: "avg";
19
+ }>>;
20
+ color: import("zod").ZodNullable<import("zod").ZodString>;
21
+ height: import("zod").ZodNullable<import("zod").ZodNumber>;
22
+ }, import("zod/v4/core").$strip>;
23
+ readonly description: "Area chart for cumulative or trend data. Same shape as LineChart but draws a filled area under the line.";
24
+ readonly example: {
25
+ readonly title: "Daily signups";
26
+ readonly data: readonly [{
27
+ readonly day: "Mon";
28
+ readonly value: 12;
29
+ }, {
30
+ readonly day: "Tue";
31
+ readonly value: 24;
32
+ }, {
33
+ readonly day: "Wed";
34
+ readonly value: 19;
35
+ }, {
36
+ readonly day: "Thu";
37
+ readonly value: 31;
38
+ }];
39
+ readonly xKey: "day";
40
+ readonly yKey: "value";
41
+ readonly aggregate: null;
42
+ readonly color: null;
43
+ readonly height: null;
44
+ };
45
+ };
46
+ ScatterChart: {
47
+ readonly props: import("zod").ZodObject<{
48
+ title: import("zod").ZodNullable<import("zod").ZodString>;
49
+ data: import("zod").ZodArray<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
50
+ xKey: import("zod").ZodString;
51
+ yKey: import("zod").ZodString;
52
+ zKey: import("zod").ZodNullable<import("zod").ZodString>;
53
+ color: import("zod").ZodNullable<import("zod").ZodString>;
54
+ height: import("zod").ZodNullable<import("zod").ZodNumber>;
55
+ }, import("zod/v4/core").$strip>;
56
+ readonly description: "Scatter plot for correlation or distribution. Both axes are numeric; optional zKey scales point size.";
57
+ readonly example: {
58
+ readonly title: "Latency vs payload size";
59
+ readonly data: readonly [{
60
+ readonly size: 10;
61
+ readonly latency: 25;
62
+ }, {
63
+ readonly size: 40;
64
+ readonly latency: 80;
65
+ }, {
66
+ readonly size: 80;
67
+ readonly latency: 110;
68
+ }, {
69
+ readonly size: 120;
70
+ readonly latency: 180;
71
+ }];
72
+ readonly xKey: "size";
73
+ readonly yKey: "latency";
74
+ readonly zKey: null;
75
+ readonly color: null;
76
+ readonly height: null;
77
+ };
78
+ };
79
+ RadarChart: {
80
+ readonly props: import("zod").ZodObject<{
81
+ title: import("zod").ZodNullable<import("zod").ZodString>;
82
+ data: import("zod").ZodArray<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
83
+ axisKey: import("zod").ZodString;
84
+ metrics: import("zod").ZodArray<import("zod").ZodString>;
85
+ height: import("zod").ZodNullable<import("zod").ZodNumber>;
86
+ }, import("zod/v4/core").$strip>;
87
+ readonly description: "Radar chart for comparing multiple metrics across categories. Each metric in `metrics` is plotted as its own polygon.";
88
+ readonly example: {
89
+ readonly title: "Skill comparison";
90
+ readonly data: readonly [{
91
+ readonly skill: "Speed";
92
+ readonly alice: 80;
93
+ readonly bob: 60;
94
+ }, {
95
+ readonly skill: "Accuracy";
96
+ readonly alice: 70;
97
+ readonly bob: 90;
98
+ }, {
99
+ readonly skill: "Stamina";
100
+ readonly alice: 85;
101
+ readonly bob: 75;
102
+ }];
103
+ readonly axisKey: "skill";
104
+ readonly metrics: readonly ["alice", "bob"];
105
+ readonly height: null;
106
+ };
107
+ };
108
+ StackedBarChart: {
109
+ readonly props: import("zod").ZodObject<{
110
+ title: import("zod").ZodNullable<import("zod").ZodString>;
111
+ data: import("zod").ZodArray<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
112
+ xKey: import("zod").ZodString;
113
+ series: import("zod").ZodArray<import("zod").ZodString>;
114
+ aggregate: import("zod").ZodNullable<import("zod").ZodEnum<{
115
+ count: "count";
116
+ sum: "sum";
117
+ avg: "avg";
118
+ }>>;
119
+ height: import("zod").ZodNullable<import("zod").ZodNumber>;
120
+ }, import("zod/v4/core").$strip>;
121
+ readonly description: "Stacked bar chart for compositional data. Each entry in `series` is plotted as its own bar segment per x value.";
122
+ readonly example: {
123
+ readonly title: "Revenue by region";
124
+ readonly data: readonly [{
125
+ readonly quarter: "Q1";
126
+ readonly north: 30;
127
+ readonly south: 18;
128
+ readonly east: 22;
129
+ }, {
130
+ readonly quarter: "Q2";
131
+ readonly north: 42;
132
+ readonly south: 25;
133
+ readonly east: 28;
134
+ }, {
135
+ readonly quarter: "Q3";
136
+ readonly north: 38;
137
+ readonly south: 30;
138
+ readonly east: 26;
139
+ }];
140
+ readonly xKey: "quarter";
141
+ readonly series: readonly ["north", "south", "east"];
142
+ readonly aggregate: null;
143
+ readonly height: null;
144
+ };
145
+ };
146
+ ComposedChart: {
147
+ readonly props: import("zod").ZodObject<{
148
+ title: import("zod").ZodNullable<import("zod").ZodString>;
149
+ data: import("zod").ZodArray<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
150
+ xKey: import("zod").ZodString;
151
+ barKey: import("zod").ZodString;
152
+ lineKey: import("zod").ZodString;
153
+ barColor: import("zod").ZodNullable<import("zod").ZodString>;
154
+ lineColor: import("zod").ZodNullable<import("zod").ZodString>;
155
+ height: import("zod").ZodNullable<import("zod").ZodNumber>;
156
+ }, import("zod/v4/core").$strip>;
157
+ readonly description: "Combined bar + line chart for paired metrics (e.g. counts + a derived rate) on the same axis.";
158
+ readonly example: {
159
+ readonly title: "Visits and conversion";
160
+ readonly data: readonly [{
161
+ readonly day: "Mon";
162
+ readonly visits: 120;
163
+ readonly conversion: 4.2;
164
+ }, {
165
+ readonly day: "Tue";
166
+ readonly visits: 145;
167
+ readonly conversion: 3.8;
168
+ }, {
169
+ readonly day: "Wed";
170
+ readonly visits: 160;
171
+ readonly conversion: 5.1;
172
+ }];
173
+ readonly xKey: "day";
174
+ readonly barKey: "visits";
175
+ readonly lineKey: "conversion";
176
+ readonly barColor: null;
177
+ readonly lineColor: null;
178
+ readonly height: null;
179
+ };
180
+ };
181
+ LineChart: {
182
+ readonly props: import("zod").ZodObject<{
183
+ title: import("zod").ZodNullable<import("zod").ZodString>;
184
+ data: import("zod").ZodArray<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
185
+ xKey: import("zod").ZodString;
186
+ yKey: import("zod").ZodString;
187
+ aggregate: import("zod").ZodNullable<import("zod").ZodEnum<{
188
+ count: "count";
189
+ sum: "sum";
190
+ avg: "avg";
191
+ }>>;
192
+ color: import("zod").ZodNullable<import("zod").ZodString>;
193
+ height: import("zod").ZodNullable<import("zod").ZodNumber>;
194
+ }, import("zod/v4/core").$strip>;
195
+ readonly description: "Line chart for time-series or trend data. Provide data as an array of objects with xKey and yKey fields.";
196
+ readonly example: {
197
+ readonly title: "Weekly trend";
198
+ readonly data: readonly [{
199
+ readonly day: "Mon";
200
+ readonly value: 10;
201
+ }, {
202
+ readonly day: "Tue";
203
+ readonly value: 25;
204
+ }, {
205
+ readonly day: "Wed";
206
+ readonly value: 18;
207
+ }];
208
+ readonly xKey: "day";
209
+ readonly yKey: "value";
210
+ readonly aggregate: null;
211
+ readonly color: null;
212
+ readonly height: null;
213
+ };
214
+ };
215
+ BarChart: {
216
+ readonly props: import("zod").ZodObject<{
217
+ title: import("zod").ZodNullable<import("zod").ZodString>;
218
+ data: import("zod").ZodArray<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
219
+ xKey: import("zod").ZodString;
220
+ yKey: import("zod").ZodString;
221
+ aggregate: import("zod").ZodNullable<import("zod").ZodEnum<{
222
+ count: "count";
223
+ sum: "sum";
224
+ avg: "avg";
225
+ }>>;
226
+ color: import("zod").ZodNullable<import("zod").ZodString>;
227
+ height: import("zod").ZodNullable<import("zod").ZodNumber>;
228
+ }, import("zod/v4/core").$strip>;
229
+ readonly description: "Bar chart for comparing categories. Provide data as an array of objects with xKey and yKey fields.";
230
+ readonly example: {
231
+ readonly title: "Sales by region";
232
+ readonly data: readonly [{
233
+ readonly region: "North";
234
+ readonly sales: 120;
235
+ }, {
236
+ readonly region: "South";
237
+ readonly sales: 98;
238
+ }, {
239
+ readonly region: "East";
240
+ readonly sales: 150;
241
+ }];
242
+ readonly xKey: "region";
243
+ readonly yKey: "sales";
244
+ readonly aggregate: null;
245
+ readonly color: null;
246
+ readonly height: null;
247
+ };
248
+ };
249
+ PieChart: {
250
+ readonly props: import("zod").ZodObject<{
251
+ title: import("zod").ZodNullable<import("zod").ZodString>;
252
+ data: import("zod").ZodArray<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
253
+ nameKey: import("zod").ZodString;
254
+ valueKey: import("zod").ZodString;
255
+ height: import("zod").ZodNullable<import("zod").ZodNumber>;
256
+ }, import("zod/v4/core").$strip>;
257
+ readonly description: "Pie chart for showing proportions. Provide data as an array of objects with nameKey and valueKey fields.";
258
+ readonly example: {
259
+ readonly title: "Market share";
260
+ readonly data: readonly [{
261
+ readonly name: "Product A";
262
+ readonly share: 45;
263
+ }, {
264
+ readonly name: "Product B";
265
+ readonly share: 30;
266
+ }, {
267
+ readonly name: "Product C";
268
+ readonly share: 25;
269
+ }];
270
+ readonly nameKey: "name";
271
+ readonly valueKey: "share";
272
+ readonly height: null;
273
+ };
274
+ };
275
+ Card: {
276
+ props: import("zod").ZodObject<{
277
+ title: import("zod").ZodNullable<import("zod").ZodString>;
278
+ description: import("zod").ZodNullable<import("zod").ZodString>;
279
+ maxWidth: import("zod").ZodNullable<import("zod").ZodEnum<{
280
+ sm: "sm";
281
+ md: "md";
282
+ lg: "lg";
283
+ full: "full";
284
+ }>>;
285
+ centered: import("zod").ZodNullable<import("zod").ZodBoolean>;
286
+ }, import("zod/v4/core").$strip>;
287
+ slots: string[];
288
+ description: string;
289
+ example: {
290
+ title: string;
291
+ description: string;
292
+ };
293
+ };
294
+ Stack: {
295
+ props: import("zod").ZodObject<{
296
+ direction: import("zod").ZodNullable<import("zod").ZodEnum<{
297
+ horizontal: "horizontal";
298
+ vertical: "vertical";
299
+ }>>;
300
+ gap: import("zod").ZodNullable<import("zod").ZodEnum<{
301
+ sm: "sm";
302
+ md: "md";
303
+ lg: "lg";
304
+ none: "none";
305
+ }>>;
306
+ align: import("zod").ZodNullable<import("zod").ZodEnum<{
307
+ start: "start";
308
+ center: "center";
309
+ end: "end";
310
+ stretch: "stretch";
311
+ }>>;
312
+ justify: import("zod").ZodNullable<import("zod").ZodEnum<{
313
+ start: "start";
314
+ center: "center";
315
+ end: "end";
316
+ between: "between";
317
+ around: "around";
318
+ }>>;
319
+ }, import("zod/v4/core").$strip>;
320
+ slots: string[];
321
+ description: string;
322
+ example: {
323
+ direction: string;
324
+ gap: string;
325
+ };
326
+ };
327
+ Grid: {
328
+ props: import("zod").ZodObject<{
329
+ columns: import("zod").ZodNullable<import("zod").ZodNumber>;
330
+ gap: import("zod").ZodNullable<import("zod").ZodEnum<{
331
+ sm: "sm";
332
+ md: "md";
333
+ lg: "lg";
334
+ }>>;
335
+ }, import("zod/v4/core").$strip>;
336
+ slots: string[];
337
+ description: string;
338
+ example: {
339
+ columns: number;
340
+ gap: string;
341
+ };
342
+ };
343
+ Separator: {
344
+ props: import("zod").ZodObject<{
345
+ orientation: import("zod").ZodNullable<import("zod").ZodEnum<{
346
+ horizontal: "horizontal";
347
+ vertical: "vertical";
348
+ }>>;
349
+ }, import("zod/v4/core").$strip>;
350
+ description: string;
351
+ };
352
+ Tabs: {
353
+ props: import("zod").ZodObject<{
354
+ tabs: import("zod").ZodArray<import("zod").ZodObject<{
355
+ label: import("zod").ZodString;
356
+ value: import("zod").ZodString;
357
+ }, import("zod/v4/core").$strip>>;
358
+ defaultValue: import("zod").ZodNullable<import("zod").ZodString>;
359
+ value: import("zod").ZodNullable<import("zod").ZodString>;
360
+ }, import("zod/v4/core").$strip>;
361
+ slots: string[];
362
+ events: string[];
363
+ description: string;
364
+ };
365
+ Accordion: {
366
+ props: import("zod").ZodObject<{
367
+ items: import("zod").ZodArray<import("zod").ZodObject<{
368
+ title: import("zod").ZodString;
369
+ content: import("zod").ZodString;
370
+ }, import("zod/v4/core").$strip>>;
371
+ type: import("zod").ZodNullable<import("zod").ZodEnum<{
372
+ single: "single";
373
+ multiple: "multiple";
374
+ }>>;
375
+ }, import("zod/v4/core").$strip>;
376
+ description: string;
377
+ };
378
+ Collapsible: {
379
+ props: import("zod").ZodObject<{
380
+ title: import("zod").ZodString;
381
+ defaultOpen: import("zod").ZodNullable<import("zod").ZodBoolean>;
382
+ }, import("zod/v4/core").$strip>;
383
+ slots: string[];
384
+ description: string;
385
+ };
386
+ Dialog: {
387
+ props: import("zod").ZodObject<{
388
+ title: import("zod").ZodString;
389
+ description: import("zod").ZodNullable<import("zod").ZodString>;
390
+ openPath: import("zod").ZodString;
391
+ }, import("zod/v4/core").$strip>;
392
+ slots: string[];
393
+ description: string;
394
+ };
395
+ Drawer: {
396
+ props: import("zod").ZodObject<{
397
+ title: import("zod").ZodString;
398
+ description: import("zod").ZodNullable<import("zod").ZodString>;
399
+ openPath: import("zod").ZodString;
400
+ }, import("zod/v4/core").$strip>;
401
+ slots: string[];
402
+ description: string;
403
+ };
404
+ Carousel: {
405
+ props: import("zod").ZodObject<{
406
+ items: import("zod").ZodArray<import("zod").ZodObject<{
407
+ title: import("zod").ZodNullable<import("zod").ZodString>;
408
+ description: import("zod").ZodNullable<import("zod").ZodString>;
409
+ }, import("zod/v4/core").$strip>>;
410
+ }, import("zod/v4/core").$strip>;
411
+ description: string;
412
+ };
413
+ Table: {
414
+ props: import("zod").ZodObject<{
415
+ columns: import("zod").ZodArray<import("zod").ZodString>;
416
+ rows: import("zod").ZodArray<import("zod").ZodArray<import("zod").ZodString>>;
417
+ caption: import("zod").ZodNullable<import("zod").ZodString>;
418
+ }, import("zod/v4/core").$strip>;
419
+ description: string;
420
+ example: {
421
+ columns: string[];
422
+ rows: string[][];
423
+ };
424
+ };
425
+ Heading: {
426
+ props: import("zod").ZodObject<{
427
+ text: import("zod").ZodString;
428
+ level: import("zod").ZodNullable<import("zod").ZodEnum<{
429
+ h1: "h1";
430
+ h2: "h2";
431
+ h3: "h3";
432
+ h4: "h4";
433
+ }>>;
434
+ }, import("zod/v4/core").$strip>;
435
+ description: string;
436
+ example: {
437
+ text: string;
438
+ level: string;
439
+ };
440
+ };
441
+ Text: {
442
+ props: import("zod").ZodObject<{
443
+ text: import("zod").ZodString;
444
+ variant: import("zod").ZodNullable<import("zod").ZodEnum<{
445
+ caption: "caption";
446
+ body: "body";
447
+ muted: "muted";
448
+ lead: "lead";
449
+ code: "code";
450
+ }>>;
451
+ }, import("zod/v4/core").$strip>;
452
+ description: string;
453
+ example: {
454
+ text: string;
455
+ };
456
+ };
457
+ Image: {
458
+ props: import("zod").ZodObject<{
459
+ src: import("zod").ZodNullable<import("zod").ZodString>;
460
+ alt: import("zod").ZodString;
461
+ width: import("zod").ZodNullable<import("zod").ZodNumber>;
462
+ height: import("zod").ZodNullable<import("zod").ZodNumber>;
463
+ }, import("zod/v4/core").$strip>;
464
+ description: string;
465
+ };
466
+ Avatar: {
467
+ props: import("zod").ZodObject<{
468
+ src: import("zod").ZodNullable<import("zod").ZodString>;
469
+ name: import("zod").ZodString;
470
+ size: import("zod").ZodNullable<import("zod").ZodEnum<{
471
+ sm: "sm";
472
+ md: "md";
473
+ lg: "lg";
474
+ }>>;
475
+ }, import("zod/v4/core").$strip>;
476
+ description: string;
477
+ example: {
478
+ name: string;
479
+ size: string;
480
+ };
481
+ };
482
+ Badge: {
483
+ props: import("zod").ZodObject<{
484
+ text: import("zod").ZodString;
485
+ variant: import("zod").ZodNullable<import("zod").ZodEnum<{
486
+ default: "default";
487
+ secondary: "secondary";
488
+ destructive: "destructive";
489
+ outline: "outline";
490
+ }>>;
491
+ }, import("zod/v4/core").$strip>;
492
+ description: string;
493
+ example: {
494
+ text: string;
495
+ variant: string;
496
+ };
497
+ };
498
+ Alert: {
499
+ props: import("zod").ZodObject<{
500
+ title: import("zod").ZodString;
501
+ message: import("zod").ZodNullable<import("zod").ZodString>;
502
+ type: import("zod").ZodNullable<import("zod").ZodEnum<{
503
+ success: "success";
504
+ info: "info";
505
+ warning: "warning";
506
+ error: "error";
507
+ }>>;
508
+ }, import("zod/v4/core").$strip>;
509
+ description: string;
510
+ example: {
511
+ title: string;
512
+ message: string;
513
+ type: string;
514
+ };
515
+ };
516
+ Progress: {
517
+ props: import("zod").ZodObject<{
518
+ value: import("zod").ZodNumber;
519
+ max: import("zod").ZodNullable<import("zod").ZodNumber>;
520
+ label: import("zod").ZodNullable<import("zod").ZodString>;
521
+ }, import("zod/v4/core").$strip>;
522
+ description: string;
523
+ example: {
524
+ value: number;
525
+ max: number;
526
+ label: string;
527
+ };
528
+ };
529
+ Skeleton: {
530
+ props: import("zod").ZodObject<{
531
+ width: import("zod").ZodNullable<import("zod").ZodString>;
532
+ height: import("zod").ZodNullable<import("zod").ZodString>;
533
+ rounded: import("zod").ZodNullable<import("zod").ZodBoolean>;
534
+ }, import("zod/v4/core").$strip>;
535
+ description: string;
536
+ };
537
+ Spinner: {
538
+ props: import("zod").ZodObject<{
539
+ size: import("zod").ZodNullable<import("zod").ZodEnum<{
540
+ sm: "sm";
541
+ md: "md";
542
+ lg: "lg";
543
+ }>>;
544
+ label: import("zod").ZodNullable<import("zod").ZodString>;
545
+ }, import("zod/v4/core").$strip>;
546
+ description: string;
547
+ };
548
+ Tooltip: {
549
+ props: import("zod").ZodObject<{
550
+ content: import("zod").ZodString;
551
+ text: import("zod").ZodString;
552
+ }, import("zod/v4/core").$strip>;
553
+ description: string;
554
+ };
555
+ Popover: {
556
+ props: import("zod").ZodObject<{
557
+ trigger: import("zod").ZodString;
558
+ content: import("zod").ZodString;
559
+ }, import("zod/v4/core").$strip>;
560
+ description: string;
561
+ };
562
+ Input: {
563
+ props: import("zod").ZodObject<{
564
+ label: import("zod").ZodString;
565
+ name: import("zod").ZodString;
566
+ type: import("zod").ZodNullable<import("zod").ZodEnum<{
567
+ number: "number";
568
+ text: "text";
569
+ email: "email";
570
+ password: "password";
571
+ }>>;
572
+ placeholder: import("zod").ZodNullable<import("zod").ZodString>;
573
+ value: import("zod").ZodNullable<import("zod").ZodString>;
574
+ checks: import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodObject<{
575
+ type: import("zod").ZodString;
576
+ message: import("zod").ZodString;
577
+ args: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
578
+ }, import("zod/v4/core").$strip>>>;
579
+ validateOn: import("zod").ZodNullable<import("zod").ZodEnum<{
580
+ change: "change";
581
+ blur: "blur";
582
+ submit: "submit";
583
+ }>>;
584
+ }, import("zod/v4/core").$strip>;
585
+ events: string[];
586
+ description: string;
587
+ example: {
588
+ label: string;
589
+ name: string;
590
+ type: string;
591
+ placeholder: string;
592
+ };
593
+ };
594
+ Textarea: {
595
+ props: import("zod").ZodObject<{
596
+ label: import("zod").ZodString;
597
+ name: import("zod").ZodString;
598
+ placeholder: import("zod").ZodNullable<import("zod").ZodString>;
599
+ rows: import("zod").ZodNullable<import("zod").ZodNumber>;
600
+ value: import("zod").ZodNullable<import("zod").ZodString>;
601
+ checks: import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodObject<{
602
+ type: import("zod").ZodString;
603
+ message: import("zod").ZodString;
604
+ args: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
605
+ }, import("zod/v4/core").$strip>>>;
606
+ validateOn: import("zod").ZodNullable<import("zod").ZodEnum<{
607
+ change: "change";
608
+ blur: "blur";
609
+ submit: "submit";
610
+ }>>;
611
+ }, import("zod/v4/core").$strip>;
612
+ description: string;
613
+ };
614
+ Select: {
615
+ props: import("zod").ZodObject<{
616
+ label: import("zod").ZodString;
617
+ name: import("zod").ZodString;
618
+ options: import("zod").ZodArray<import("zod").ZodString>;
619
+ placeholder: import("zod").ZodNullable<import("zod").ZodString>;
620
+ value: import("zod").ZodNullable<import("zod").ZodString>;
621
+ checks: import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodObject<{
622
+ type: import("zod").ZodString;
623
+ message: import("zod").ZodString;
624
+ args: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
625
+ }, import("zod/v4/core").$strip>>>;
626
+ validateOn: import("zod").ZodNullable<import("zod").ZodEnum<{
627
+ change: "change";
628
+ blur: "blur";
629
+ submit: "submit";
630
+ }>>;
631
+ }, import("zod/v4/core").$strip>;
632
+ events: string[];
633
+ description: string;
634
+ };
635
+ Checkbox: {
636
+ props: import("zod").ZodObject<{
637
+ label: import("zod").ZodString;
638
+ name: import("zod").ZodString;
639
+ checked: import("zod").ZodNullable<import("zod").ZodBoolean>;
640
+ checks: import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodObject<{
641
+ type: import("zod").ZodString;
642
+ message: import("zod").ZodString;
643
+ args: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
644
+ }, import("zod/v4/core").$strip>>>;
645
+ validateOn: import("zod").ZodNullable<import("zod").ZodEnum<{
646
+ change: "change";
647
+ blur: "blur";
648
+ submit: "submit";
649
+ }>>;
650
+ }, import("zod/v4/core").$strip>;
651
+ events: string[];
652
+ description: string;
653
+ };
654
+ Radio: {
655
+ props: import("zod").ZodObject<{
656
+ label: import("zod").ZodString;
657
+ name: import("zod").ZodString;
658
+ options: import("zod").ZodArray<import("zod").ZodString>;
659
+ value: import("zod").ZodNullable<import("zod").ZodString>;
660
+ checks: import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodObject<{
661
+ type: import("zod").ZodString;
662
+ message: import("zod").ZodString;
663
+ args: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
664
+ }, import("zod/v4/core").$strip>>>;
665
+ validateOn: import("zod").ZodNullable<import("zod").ZodEnum<{
666
+ change: "change";
667
+ blur: "blur";
668
+ submit: "submit";
669
+ }>>;
670
+ }, import("zod/v4/core").$strip>;
671
+ events: string[];
672
+ description: string;
673
+ };
674
+ Switch: {
675
+ props: import("zod").ZodObject<{
676
+ label: import("zod").ZodString;
677
+ name: import("zod").ZodString;
678
+ checked: import("zod").ZodNullable<import("zod").ZodBoolean>;
679
+ checks: import("zod").ZodNullable<import("zod").ZodArray<import("zod").ZodObject<{
680
+ type: import("zod").ZodString;
681
+ message: import("zod").ZodString;
682
+ args: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
683
+ }, import("zod/v4/core").$strip>>>;
684
+ validateOn: import("zod").ZodNullable<import("zod").ZodEnum<{
685
+ change: "change";
686
+ blur: "blur";
687
+ submit: "submit";
688
+ }>>;
689
+ }, import("zod/v4/core").$strip>;
690
+ events: string[];
691
+ description: string;
692
+ };
693
+ Slider: {
694
+ props: import("zod").ZodObject<{
695
+ label: import("zod").ZodNullable<import("zod").ZodString>;
696
+ min: import("zod").ZodNullable<import("zod").ZodNumber>;
697
+ max: import("zod").ZodNullable<import("zod").ZodNumber>;
698
+ step: import("zod").ZodNullable<import("zod").ZodNumber>;
699
+ value: import("zod").ZodNullable<import("zod").ZodNumber>;
700
+ }, import("zod/v4/core").$strip>;
701
+ events: string[];
702
+ description: string;
703
+ };
704
+ Button: {
705
+ props: import("zod").ZodObject<{
706
+ label: import("zod").ZodString;
707
+ variant: import("zod").ZodNullable<import("zod").ZodEnum<{
708
+ secondary: "secondary";
709
+ primary: "primary";
710
+ danger: "danger";
711
+ }>>;
712
+ disabled: import("zod").ZodNullable<import("zod").ZodBoolean>;
713
+ }, import("zod/v4/core").$strip>;
714
+ events: string[];
715
+ description: string;
716
+ example: {
717
+ label: string;
718
+ variant: string;
719
+ };
720
+ };
721
+ Link: {
722
+ props: import("zod").ZodObject<{
723
+ label: import("zod").ZodString;
724
+ href: import("zod").ZodString;
725
+ }, import("zod/v4/core").$strip>;
726
+ events: string[];
727
+ description: string;
728
+ };
729
+ DropdownMenu: {
730
+ props: import("zod").ZodObject<{
731
+ label: import("zod").ZodString;
732
+ items: import("zod").ZodArray<import("zod").ZodObject<{
733
+ label: import("zod").ZodString;
734
+ value: import("zod").ZodString;
735
+ }, import("zod/v4/core").$strip>>;
736
+ value: import("zod").ZodNullable<import("zod").ZodString>;
737
+ }, import("zod/v4/core").$strip>;
738
+ events: string[];
739
+ description: string;
740
+ };
741
+ Toggle: {
742
+ props: import("zod").ZodObject<{
743
+ label: import("zod").ZodString;
744
+ pressed: import("zod").ZodNullable<import("zod").ZodBoolean>;
745
+ variant: import("zod").ZodNullable<import("zod").ZodEnum<{
746
+ default: "default";
747
+ outline: "outline";
748
+ }>>;
749
+ }, import("zod/v4/core").$strip>;
750
+ events: string[];
751
+ description: string;
752
+ };
753
+ ToggleGroup: {
754
+ props: import("zod").ZodObject<{
755
+ items: import("zod").ZodArray<import("zod").ZodObject<{
756
+ label: import("zod").ZodString;
757
+ value: import("zod").ZodString;
758
+ }, import("zod/v4/core").$strip>>;
759
+ type: import("zod").ZodNullable<import("zod").ZodEnum<{
760
+ single: "single";
761
+ multiple: "multiple";
762
+ }>>;
763
+ value: import("zod").ZodNullable<import("zod").ZodString>;
764
+ }, import("zod/v4/core").$strip>;
765
+ events: string[];
766
+ description: string;
767
+ };
768
+ ButtonGroup: {
769
+ props: import("zod").ZodObject<{
770
+ buttons: import("zod").ZodArray<import("zod").ZodObject<{
771
+ label: import("zod").ZodString;
772
+ value: import("zod").ZodString;
773
+ }, import("zod/v4/core").$strip>>;
774
+ selected: import("zod").ZodNullable<import("zod").ZodString>;
775
+ }, import("zod/v4/core").$strip>;
776
+ events: string[];
777
+ description: string;
778
+ };
779
+ Pagination: {
780
+ props: import("zod").ZodObject<{
781
+ totalPages: import("zod").ZodNumber;
782
+ page: import("zod").ZodNullable<import("zod").ZodNumber>;
783
+ }, import("zod/v4/core").$strip>;
784
+ events: string[];
785
+ description: string;
786
+ };
787
+ };
788
+ export declare const catalog: import("@json-render/core").Catalog<import("@json-render/core").SchemaDefinition<import("@json-render/core").SchemaType<string, unknown>, import("@json-render/core").SchemaType<string, unknown>>, never>;
789
+ export interface JsonRenderIssue {
790
+ path?: PropertyKey[];
791
+ message?: string;
792
+ }
793
+ export interface JsonRenderPropDescriptor {
794
+ name: string;
795
+ type: string;
796
+ required: boolean;
797
+ nullable: boolean;
798
+ }
799
+ export interface JsonRenderComponentDescriptor {
800
+ type: string;
801
+ description: string;
802
+ slots: string[];
803
+ example: unknown;
804
+ props: JsonRenderPropDescriptor[];
805
+ }
806
+ interface JsonRenderValidationResult {
807
+ success: boolean;
808
+ data?: unknown;
809
+ error?: {
810
+ issues?: JsonRenderIssue[];
811
+ };
812
+ }
813
+ export declare function describeJsonRenderCatalog(): JsonRenderComponentDescriptor[];
814
+ export declare function validateShadcnElementProps(spec: unknown): JsonRenderValidationResult;
815
+ export {};