makersclaw 0.2.0 → 0.3.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 (473) hide show
  1. package/THIRD-PARTY-NOTICES.md +180 -0
  2. package/package.json +3 -2
  3. package/r/annotate.json +62 -0
  4. package/r/approval-request.json +52 -0
  5. package/r/audio-player.json +74 -0
  6. package/r/auth-form.json +55 -0
  7. package/r/board.json +10 -6
  8. package/r/calendar-view.json +105 -0
  9. package/r/cart.json +62 -0
  10. package/r/chart.json +83 -0
  11. package/r/chat.json +95 -0
  12. package/r/code-editor.json +94 -0
  13. package/r/comment-box.json +64 -0
  14. package/r/contact-section.json +53 -0
  15. package/r/core.json +205 -8
  16. package/r/csv-import.json +63 -0
  17. package/r/data-table.json +69 -0
  18. package/r/diagram.json +74 -0
  19. package/r/doc-editor.json +82 -0
  20. package/r/doc-page.json +61 -0
  21. package/r/email-render.json +73 -0
  22. package/r/faq.json +50 -0
  23. package/r/file-upload.json +54 -0
  24. package/r/flow-canvas.json +93 -0
  25. package/r/footer.json +52 -0
  26. package/r/gantt.json +70 -0
  27. package/r/job-panel.json +12 -7
  28. package/r/json-editor.json +66 -0
  29. package/r/map.json +89 -0
  30. package/r/menubar.json +52 -0
  31. package/r/mind-map.json +67 -0
  32. package/r/navigation-menu.json +52 -0
  33. package/r/order-detail.json +54 -0
  34. package/r/org-chart.json +66 -0
  35. package/r/page-builder.json +105 -0
  36. package/r/payment-methods.json +51 -0
  37. package/r/pdf-document.json +79 -0
  38. package/r/pdf-viewer.json +88 -0
  39. package/r/product-detail.json +76 -0
  40. package/r/product-grid.json +65 -0
  41. package/r/record-form.json +67 -0
  42. package/r/record-notes.json +55 -0
  43. package/r/registry.json +3411 -29
  44. package/r/search-dialog.json +51 -0
  45. package/r/settings-list.json +66 -0
  46. package/r/setup-checklist.json +51 -0
  47. package/r/share-dialog.json +52 -0
  48. package/r/sidebar.json +69 -0
  49. package/r/signature-pad.json +72 -0
  50. package/r/sketch-canvas.json +99 -0
  51. package/r/spreadsheet.json +90 -0
  52. package/r/stat-cards.json +66 -0
  53. package/r/task-list.json +63 -0
  54. package/r/task-model.json +98 -0
  55. package/r/testimonials.json +52 -0
  56. package/r/transaction-list.json +53 -0
  57. package/r/whiteboard.json +66 -0
  58. package/registry/blocks/annotate/README.md +179 -0
  59. package/registry/blocks/annotate/annotate-data.js +250 -0
  60. package/registry/blocks/annotate/annotate.jsx +646 -0
  61. package/registry/blocks/annotate/block.json +10 -0
  62. package/registry/blocks/annotate/demo.jsx +135 -0
  63. package/registry/blocks/annotate/index.js +15 -0
  64. package/registry/blocks/approval-request/README.md +116 -0
  65. package/registry/blocks/approval-request/approval-request.jsx +386 -0
  66. package/registry/blocks/approval-request/block.json +10 -0
  67. package/registry/blocks/approval-request/demo.jsx +127 -0
  68. package/registry/blocks/approval-request/index.js +4 -0
  69. package/registry/blocks/audio-player/README.md +167 -0
  70. package/registry/blocks/audio-player/audio-player.jsx +623 -0
  71. package/registry/blocks/audio-player/block.json +14 -0
  72. package/registry/blocks/audio-player/colors.js +109 -0
  73. package/registry/blocks/audio-player/demo.jsx +209 -0
  74. package/registry/blocks/audio-player/index.js +6 -0
  75. package/registry/blocks/audio-player/time.js +67 -0
  76. package/registry/blocks/audio-player/wavesurfer.js +9 -0
  77. package/registry/blocks/auth-form/README.md +126 -0
  78. package/registry/blocks/auth-form/auth-form.jsx +568 -0
  79. package/registry/blocks/auth-form/block.json +10 -0
  80. package/registry/blocks/auth-form/demo.jsx +131 -0
  81. package/registry/blocks/auth-form/index.js +3 -0
  82. package/registry/blocks/board/README.md +55 -5
  83. package/registry/blocks/board/block.json +2 -2
  84. package/registry/blocks/board/board.jsx +230 -86
  85. package/registry/blocks/board/demo.jsx +103 -24
  86. package/registry/blocks/calendar-view/README.md +180 -0
  87. package/registry/blocks/calendar-view/agenda.jsx +147 -0
  88. package/registry/blocks/calendar-view/block.json +76 -0
  89. package/registry/blocks/calendar-view/calendar-model.js +442 -0
  90. package/registry/blocks/calendar-view/calendar.jsx +627 -0
  91. package/registry/blocks/calendar-view/demo.jsx +195 -0
  92. package/registry/blocks/calendar-view/draft.jsx +49 -0
  93. package/registry/blocks/calendar-view/index.js +39 -0
  94. package/registry/blocks/calendar-view/month.jsx +346 -0
  95. package/registry/blocks/calendar-view/paint.js +69 -0
  96. package/registry/blocks/calendar-view/time-grid.jsx +527 -0
  97. package/registry/blocks/calendar-view/tray.jsx +87 -0
  98. package/registry/blocks/cart/README.md +146 -0
  99. package/registry/blocks/cart/block.json +10 -0
  100. package/registry/blocks/cart/cart.jsx +597 -0
  101. package/registry/blocks/cart/demo.jsx +98 -0
  102. package/registry/blocks/cart/index.js +4 -0
  103. package/registry/blocks/cart/money.js +28 -0
  104. package/registry/blocks/chart/README.md +316 -0
  105. package/registry/blocks/chart/block.json +10 -0
  106. package/registry/blocks/chart/cartesian.jsx +642 -0
  107. package/registry/blocks/chart/core.jsx +262 -0
  108. package/registry/blocks/chart/demo.jsx +357 -0
  109. package/registry/blocks/chart/heatmap.jsx +336 -0
  110. package/registry/blocks/chart/index.js +8 -0
  111. package/registry/blocks/chart/pie.jsx +245 -0
  112. package/registry/blocks/chart/sparkline.jsx +88 -0
  113. package/registry/blocks/chat/README.md +273 -0
  114. package/registry/blocks/chat/attachment.jsx +95 -0
  115. package/registry/blocks/chat/block.json +10 -0
  116. package/registry/blocks/chat/chat.jsx +132 -0
  117. package/registry/blocks/chat/composer.jsx +364 -0
  118. package/registry/blocks/chat/demo.jsx +578 -0
  119. package/registry/blocks/chat/header.jsx +34 -0
  120. package/registry/blocks/chat/index.js +9 -0
  121. package/registry/blocks/chat/message.jsx +450 -0
  122. package/registry/blocks/chat/scroller.jsx +247 -0
  123. package/registry/blocks/chat/text.jsx +104 -0
  124. package/registry/blocks/code-editor/README.md +210 -0
  125. package/registry/blocks/code-editor/block.json +22 -0
  126. package/registry/blocks/code-editor/code-editor.jsx +534 -0
  127. package/registry/blocks/code-editor/codemirror.js +38 -0
  128. package/registry/blocks/code-editor/demo.jsx +205 -0
  129. package/registry/blocks/code-editor/index.js +8 -0
  130. package/registry/blocks/code-editor/json.js +317 -0
  131. package/registry/blocks/code-editor/sql.js +136 -0
  132. package/registry/blocks/code-editor/text.js +101 -0
  133. package/registry/blocks/code-editor/theme.js +186 -0
  134. package/registry/blocks/comment-box/README.md +123 -0
  135. package/registry/blocks/comment-box/block.json +10 -0
  136. package/registry/blocks/comment-box/comment-body.jsx +217 -0
  137. package/registry/blocks/comment-box/comment-box.jsx +198 -0
  138. package/registry/blocks/comment-box/comment-time.jsx +77 -0
  139. package/registry/blocks/comment-box/demo.jsx +141 -0
  140. package/registry/blocks/comment-box/index.js +8 -0
  141. package/registry/blocks/contact-section/README.md +152 -0
  142. package/registry/blocks/contact-section/block.json +11 -0
  143. package/registry/blocks/contact-section/contact-section.jsx +509 -0
  144. package/registry/blocks/contact-section/demo.jsx +93 -0
  145. package/registry/blocks/contact-section/index.js +4 -0
  146. package/registry/blocks/csv-import/README.md +133 -0
  147. package/registry/blocks/csv-import/block.json +13 -0
  148. package/registry/blocks/csv-import/csv-import.jsx +479 -0
  149. package/registry/blocks/csv-import/demo.jsx +106 -0
  150. package/registry/blocks/csv-import/import.js +200 -0
  151. package/registry/blocks/csv-import/index.js +7 -0
  152. package/registry/blocks/data-table/README.md +386 -0
  153. package/registry/blocks/data-table/block.json +10 -0
  154. package/registry/blocks/data-table/data-table.jsx +1164 -0
  155. package/registry/blocks/data-table/demo.jsx +588 -0
  156. package/registry/blocks/data-table/index.js +5 -0
  157. package/registry/blocks/data-table/model.js +169 -0
  158. package/registry/blocks/diagram/README.md +108 -0
  159. package/registry/blocks/diagram/block.json +13 -0
  160. package/registry/blocks/diagram/demo.jsx +113 -0
  161. package/registry/blocks/diagram/diagram.jsx +481 -0
  162. package/registry/blocks/diagram/index.js +7 -0
  163. package/registry/blocks/diagram/mermaid.js +52 -0
  164. package/registry/blocks/diagram/palette.js +313 -0
  165. package/registry/blocks/diagram/source.js +98 -0
  166. package/registry/blocks/doc-editor/README.md +215 -0
  167. package/registry/blocks/doc-editor/block.json +15 -0
  168. package/registry/blocks/doc-editor/demo.jsx +225 -0
  169. package/registry/blocks/doc-editor/doc-editor.jsx +291 -0
  170. package/registry/blocks/doc-editor/doc.js +309 -0
  171. package/registry/blocks/doc-editor/index.js +7 -0
  172. package/registry/blocks/doc-editor/schema.jsx +56 -0
  173. package/registry/blocks/doc-editor/shadcn-classes.js +110 -0
  174. package/registry/blocks/doc-editor/theme.js +82 -0
  175. package/registry/blocks/doc-page/README.md +119 -0
  176. package/registry/blocks/doc-page/autosave.js +104 -0
  177. package/registry/blocks/doc-page/block.json +10 -0
  178. package/registry/blocks/doc-page/demo.jsx +137 -0
  179. package/registry/blocks/doc-page/doc-page.jsx +276 -0
  180. package/registry/blocks/doc-page/index.js +4 -0
  181. package/registry/blocks/email-render/README.md +151 -0
  182. package/registry/blocks/email-render/block.json +14 -0
  183. package/registry/blocks/email-render/demo.jsx +153 -0
  184. package/registry/blocks/email-render/doc-email.jsx +210 -0
  185. package/registry/blocks/email-render/email.jsx +221 -0
  186. package/registry/blocks/email-render/index.js +10 -0
  187. package/registry/blocks/email-render/render.js +50 -0
  188. package/registry/blocks/email-render/theme.js +215 -0
  189. package/registry/blocks/faq/README.md +101 -0
  190. package/registry/blocks/faq/block.json +11 -0
  191. package/registry/blocks/faq/demo.jsx +89 -0
  192. package/registry/blocks/faq/faq.jsx +220 -0
  193. package/registry/blocks/faq/index.js +4 -0
  194. package/registry/blocks/file-upload/README.md +138 -0
  195. package/registry/blocks/file-upload/block.json +10 -0
  196. package/registry/blocks/file-upload/demo.jsx +204 -0
  197. package/registry/blocks/file-upload/file-upload.jsx +635 -0
  198. package/registry/blocks/file-upload/index.js +4 -0
  199. package/registry/blocks/flow-canvas/README.md +420 -0
  200. package/registry/blocks/flow-canvas/block.json +13 -0
  201. package/registry/blocks/flow-canvas/board.js +819 -0
  202. package/registry/blocks/flow-canvas/chrome.jsx +649 -0
  203. package/registry/blocks/flow-canvas/context.jsx +35 -0
  204. package/registry/blocks/flow-canvas/demo.jsx +249 -0
  205. package/registry/blocks/flow-canvas/edges.jsx +107 -0
  206. package/registry/blocks/flow-canvas/flow-canvas.jsx +1329 -0
  207. package/registry/blocks/flow-canvas/index.js +41 -0
  208. package/registry/blocks/flow-canvas/nodes.jsx +392 -0
  209. package/registry/blocks/flow-canvas/theme.js +174 -0
  210. package/registry/blocks/footer/README.md +133 -0
  211. package/registry/blocks/footer/block.json +11 -0
  212. package/registry/blocks/footer/demo.jsx +119 -0
  213. package/registry/blocks/footer/footer.jsx +406 -0
  214. package/registry/blocks/footer/index.js +4 -0
  215. package/registry/blocks/gantt/README.md +220 -0
  216. package/registry/blocks/gantt/block.json +10 -0
  217. package/registry/blocks/gantt/demo.jsx +148 -0
  218. package/registry/blocks/gantt/gantt.jsx +923 -0
  219. package/registry/blocks/gantt/index.js +7 -0
  220. package/registry/blocks/gantt/rows.jsx +468 -0
  221. package/registry/blocks/gantt/schedule.js +278 -0
  222. package/registry/blocks/job-panel/README.md +80 -0
  223. package/registry/blocks/job-panel/block.json +3 -3
  224. package/registry/blocks/job-panel/demo.jsx +230 -3
  225. package/registry/blocks/job-panel/job-panel.jsx +169 -3
  226. package/registry/blocks/json-editor/README.md +133 -0
  227. package/registry/blocks/json-editor/block.json +10 -0
  228. package/registry/blocks/json-editor/demo.jsx +92 -0
  229. package/registry/blocks/json-editor/index.js +7 -0
  230. package/registry/blocks/json-editor/json-editor.jsx +305 -0
  231. package/registry/blocks/json-editor/json-tree.jsx +393 -0
  232. package/registry/blocks/json-editor/tree.js +225 -0
  233. package/registry/blocks/map/README.md +221 -0
  234. package/registry/blocks/map/block.json +14 -0
  235. package/registry/blocks/map/demo.jsx +201 -0
  236. package/registry/blocks/map/geo.js +198 -0
  237. package/registry/blocks/map/index.js +8 -0
  238. package/registry/blocks/map/list.jsx +128 -0
  239. package/registry/blocks/map/map-view.jsx +715 -0
  240. package/registry/blocks/map/maplibre.js +30 -0
  241. package/registry/blocks/map/marks.jsx +146 -0
  242. package/registry/blocks/map/theme.js +142 -0
  243. package/registry/blocks/menubar/README.md +109 -0
  244. package/registry/blocks/menubar/block.json +10 -0
  245. package/registry/blocks/menubar/demo.jsx +128 -0
  246. package/registry/blocks/menubar/index.js +4 -0
  247. package/registry/blocks/menubar/menubar.jsx +199 -0
  248. package/registry/blocks/mind-map/README.md +206 -0
  249. package/registry/blocks/mind-map/block.json +10 -0
  250. package/registry/blocks/mind-map/demo.jsx +103 -0
  251. package/registry/blocks/mind-map/index.js +31 -0
  252. package/registry/blocks/mind-map/mind-map.jsx +1125 -0
  253. package/registry/blocks/mind-map/topic.jsx +143 -0
  254. package/registry/blocks/mind-map/tree.js +645 -0
  255. package/registry/blocks/navigation-menu/README.md +124 -0
  256. package/registry/blocks/navigation-menu/block.json +10 -0
  257. package/registry/blocks/navigation-menu/demo.jsx +84 -0
  258. package/registry/blocks/navigation-menu/index.js +4 -0
  259. package/registry/blocks/navigation-menu/navigation-menu.jsx +448 -0
  260. package/registry/blocks/order-detail/README.md +109 -0
  261. package/registry/blocks/order-detail/block.json +10 -0
  262. package/registry/blocks/order-detail/demo.jsx +88 -0
  263. package/registry/blocks/order-detail/index.js +4 -0
  264. package/registry/blocks/order-detail/order-detail.jsx +354 -0
  265. package/registry/blocks/org-chart/README.md +145 -0
  266. package/registry/blocks/org-chart/block.json +10 -0
  267. package/registry/blocks/org-chart/demo.jsx +94 -0
  268. package/registry/blocks/org-chart/index.js +7 -0
  269. package/registry/blocks/org-chart/org-chart.jsx +631 -0
  270. package/registry/blocks/org-chart/org.js +245 -0
  271. package/registry/blocks/org-chart/person.jsx +96 -0
  272. package/registry/blocks/page-builder/README.md +257 -0
  273. package/registry/blocks/page-builder/block.json +14 -0
  274. package/registry/blocks/page-builder/demo.jsx +145 -0
  275. package/registry/blocks/page-builder/grapes.js +18 -0
  276. package/registry/blocks/page-builder/index.js +11 -0
  277. package/registry/blocks/page-builder/page-builder.jsx +704 -0
  278. package/registry/blocks/page-builder/page-view.jsx +33 -0
  279. package/registry/blocks/page-builder/page.js +118 -0
  280. package/registry/blocks/page-builder/panels.jsx +588 -0
  281. package/registry/blocks/page-builder/sections.js +209 -0
  282. package/registry/blocks/page-builder/theme.js +87 -0
  283. package/registry/blocks/page-builder/thumbs.jsx +189 -0
  284. package/registry/blocks/page-builder/tokens.js +329 -0
  285. package/registry/blocks/payment-methods/README.md +104 -0
  286. package/registry/blocks/payment-methods/block.json +10 -0
  287. package/registry/blocks/payment-methods/demo.jsx +71 -0
  288. package/registry/blocks/payment-methods/index.js +4 -0
  289. package/registry/blocks/payment-methods/payment-methods.jsx +302 -0
  290. package/registry/blocks/pdf-document/README.md +213 -0
  291. package/registry/blocks/pdf-document/block.json +13 -0
  292. package/registry/blocks/pdf-document/demo.jsx +136 -0
  293. package/registry/blocks/pdf-document/index.js +33 -0
  294. package/registry/blocks/pdf-document/money.js +83 -0
  295. package/registry/blocks/pdf-document/pdf-document.jsx +144 -0
  296. package/registry/blocks/pdf-document/primitives.jsx +271 -0
  297. package/registry/blocks/pdf-document/quote.jsx +179 -0
  298. package/registry/blocks/pdf-document/theme.js +193 -0
  299. package/registry/blocks/pdf-viewer/README.md +191 -0
  300. package/registry/blocks/pdf-viewer/block.json +14 -0
  301. package/registry/blocks/pdf-viewer/demo.jsx +252 -0
  302. package/registry/blocks/pdf-viewer/helpers.js +270 -0
  303. package/registry/blocks/pdf-viewer/index.js +8 -0
  304. package/registry/blocks/pdf-viewer/notes.jsx +195 -0
  305. package/registry/blocks/pdf-viewer/pdf-viewer.jsx +1368 -0
  306. package/registry/blocks/pdf-viewer/pdfjs.js +37 -0
  307. package/registry/blocks/pdf-viewer/ssr-shim-end.js +6 -0
  308. package/registry/blocks/pdf-viewer/ssr-shim.js +44 -0
  309. package/registry/blocks/product-detail/README.md +217 -0
  310. package/registry/blocks/product-detail/block.json +10 -0
  311. package/registry/blocks/product-detail/demo.jsx +233 -0
  312. package/registry/blocks/product-detail/index.js +7 -0
  313. package/registry/blocks/product-detail/price.jsx +115 -0
  314. package/registry/blocks/product-detail/product-detail.jsx +348 -0
  315. package/registry/blocks/product-detail/product-media.jsx +102 -0
  316. package/registry/blocks/product-detail/product-options.jsx +144 -0
  317. package/registry/blocks/product-grid/README.md +162 -0
  318. package/registry/blocks/product-grid/block.json +10 -0
  319. package/registry/blocks/product-grid/demo.jsx +255 -0
  320. package/registry/blocks/product-grid/index.js +5 -0
  321. package/registry/blocks/product-grid/product-card.jsx +232 -0
  322. package/registry/blocks/product-grid/product-grid.jsx +235 -0
  323. package/registry/blocks/record-form/README.md +196 -0
  324. package/registry/blocks/record-form/block.json +10 -0
  325. package/registry/blocks/record-form/demo.jsx +525 -0
  326. package/registry/blocks/record-form/index.js +4 -0
  327. package/registry/blocks/record-form/record-fields.jsx +457 -0
  328. package/registry/blocks/record-form/record-form.jsx +415 -0
  329. package/registry/blocks/record-form/rules.js +81 -0
  330. package/registry/blocks/record-notes/README.md +139 -0
  331. package/registry/blocks/record-notes/block.json +10 -0
  332. package/registry/blocks/record-notes/demo.jsx +179 -0
  333. package/registry/blocks/record-notes/index.js +4 -0
  334. package/registry/blocks/record-notes/record-notes.jsx +266 -0
  335. package/registry/blocks/search-dialog/README.md +108 -0
  336. package/registry/blocks/search-dialog/block.json +10 -0
  337. package/registry/blocks/search-dialog/demo.jsx +116 -0
  338. package/registry/blocks/search-dialog/index.js +3 -0
  339. package/registry/blocks/search-dialog/search-dialog.jsx +235 -0
  340. package/registry/blocks/settings-list/README.md +171 -0
  341. package/registry/blocks/settings-list/block.json +10 -0
  342. package/registry/blocks/settings-list/demo.jsx +333 -0
  343. package/registry/blocks/settings-list/index.js +4 -0
  344. package/registry/blocks/settings-list/row-state.jsx +93 -0
  345. package/registry/blocks/settings-list/settings-list.jsx +349 -0
  346. package/registry/blocks/settings-list/settings-matrix.jsx +118 -0
  347. package/registry/blocks/setup-checklist/README.md +142 -0
  348. package/registry/blocks/setup-checklist/block.json +10 -0
  349. package/registry/blocks/setup-checklist/demo.jsx +159 -0
  350. package/registry/blocks/setup-checklist/index.js +4 -0
  351. package/registry/blocks/setup-checklist/setup-checklist.jsx +446 -0
  352. package/registry/blocks/share-dialog/README.md +113 -0
  353. package/registry/blocks/share-dialog/block.json +10 -0
  354. package/registry/blocks/share-dialog/demo.jsx +140 -0
  355. package/registry/blocks/share-dialog/index.js +3 -0
  356. package/registry/blocks/share-dialog/share-dialog.jsx +384 -0
  357. package/registry/blocks/sidebar/README.md +190 -0
  358. package/registry/blocks/sidebar/block.json +43 -0
  359. package/registry/blocks/sidebar/demo.jsx +577 -0
  360. package/registry/blocks/sidebar/index.js +4 -0
  361. package/registry/blocks/sidebar/sidebar-panel.jsx +149 -0
  362. package/registry/blocks/sidebar/sidebar.jsx +864 -0
  363. package/registry/blocks/signature-pad/README.md +137 -0
  364. package/registry/blocks/signature-pad/block.json +13 -0
  365. package/registry/blocks/signature-pad/colors.js +115 -0
  366. package/registry/blocks/signature-pad/demo.jsx +94 -0
  367. package/registry/blocks/signature-pad/index.js +6 -0
  368. package/registry/blocks/signature-pad/pad.js +7 -0
  369. package/registry/blocks/signature-pad/signature-pad.jsx +434 -0
  370. package/registry/blocks/signature-pad/signature.js +68 -0
  371. package/registry/blocks/sketch-canvas/README.md +280 -0
  372. package/registry/blocks/sketch-canvas/block.json +13 -0
  373. package/registry/blocks/sketch-canvas/demo.jsx +159 -0
  374. package/registry/blocks/sketch-canvas/excalidraw.js +40 -0
  375. package/registry/blocks/sketch-canvas/index.js +9 -0
  376. package/registry/blocks/sketch-canvas/palette.js +226 -0
  377. package/registry/blocks/sketch-canvas/sketch-canvas.jsx +1188 -0
  378. package/registry/blocks/sketch-canvas/sketch.js +179 -0
  379. package/registry/blocks/sketch-canvas/ssr-shim-end.js +6 -0
  380. package/registry/blocks/sketch-canvas/ssr-shim.js +45 -0
  381. package/registry/blocks/sketch-canvas/stamps.js +104 -0
  382. package/registry/blocks/sketch-canvas/theme.js +131 -0
  383. package/registry/blocks/spreadsheet/README.md +307 -0
  384. package/registry/blocks/spreadsheet/block.json +13 -0
  385. package/registry/blocks/spreadsheet/cells.jsx +455 -0
  386. package/registry/blocks/spreadsheet/chrome.jsx +325 -0
  387. package/registry/blocks/spreadsheet/demo.jsx +177 -0
  388. package/registry/blocks/spreadsheet/grid.js +387 -0
  389. package/registry/blocks/spreadsheet/index.js +34 -0
  390. package/registry/blocks/spreadsheet/spreadsheet.jsx +1732 -0
  391. package/registry/blocks/spreadsheet/types.js +473 -0
  392. package/registry/blocks/stat-cards/README.md +173 -0
  393. package/registry/blocks/stat-cards/block.json +10 -0
  394. package/registry/blocks/stat-cards/demo.jsx +257 -0
  395. package/registry/blocks/stat-cards/index.js +4 -0
  396. package/registry/blocks/stat-cards/stat-cards.jsx +307 -0
  397. package/registry/blocks/stat-cards/usage.jsx +243 -0
  398. package/registry/blocks/task-list/README.md +176 -0
  399. package/registry/blocks/task-list/block.json +10 -0
  400. package/registry/blocks/task-list/demo.jsx +134 -0
  401. package/registry/blocks/task-list/index.js +5 -0
  402. package/registry/blocks/task-list/task-list.jsx +907 -0
  403. package/registry/blocks/task-model/README.md +455 -0
  404. package/registry/blocks/task-model/block.json +167 -0
  405. package/registry/blocks/task-model/changes.js +89 -0
  406. package/registry/blocks/task-model/dates.js +371 -0
  407. package/registry/blocks/task-model/demo.jsx +215 -0
  408. package/registry/blocks/task-model/dnd.jsx +240 -0
  409. package/registry/blocks/task-model/index.js +97 -0
  410. package/registry/blocks/task-model/model.js +919 -0
  411. package/registry/blocks/task-model/parts.jsx +449 -0
  412. package/registry/blocks/task-model/toolbar.jsx +271 -0
  413. package/registry/blocks/testimonials/README.md +139 -0
  414. package/registry/blocks/testimonials/block.json +11 -0
  415. package/registry/blocks/testimonials/demo.jsx +137 -0
  416. package/registry/blocks/testimonials/index.js +4 -0
  417. package/registry/blocks/testimonials/testimonials.jsx +430 -0
  418. package/registry/blocks/transaction-list/README.md +126 -0
  419. package/registry/blocks/transaction-list/block.json +10 -0
  420. package/registry/blocks/transaction-list/demo.jsx +79 -0
  421. package/registry/blocks/transaction-list/index.js +4 -0
  422. package/registry/blocks/transaction-list/transaction-list.jsx +383 -0
  423. package/registry/blocks/whiteboard/README.md +179 -0
  424. package/registry/blocks/whiteboard/block.json +10 -0
  425. package/registry/blocks/whiteboard/demo.jsx +169 -0
  426. package/registry/blocks/whiteboard/index.js +6 -0
  427. package/registry/blocks/whiteboard/templates.js +150 -0
  428. package/registry/blocks/whiteboard/whiteboard.jsx +721 -0
  429. package/src/install.mjs +18 -0
  430. package/src/shadcn.mjs +8 -0
  431. package/templates/next/files/README.md +145 -11
  432. package/templates/next/files/app/globals.css +55 -4
  433. package/templates/next/files/check/run.mjs +3 -3
  434. package/templates/next/files/components/ui/avatar.jsx +141 -0
  435. package/templates/next/files/components/ui/breadcrumb.jsx +149 -0
  436. package/templates/next/files/components/ui/button-group.jsx +70 -0
  437. package/templates/next/files/components/ui/button.jsx +132 -12
  438. package/templates/next/files/components/ui/calendar.jsx +609 -0
  439. package/templates/next/files/components/ui/carousel.jsx +281 -0
  440. package/templates/next/files/components/ui/collapsible.jsx +208 -0
  441. package/templates/next/files/components/ui/combobox.jsx +608 -0
  442. package/templates/next/files/components/ui/command.jsx +577 -0
  443. package/templates/next/files/components/ui/context-menu.jsx +191 -0
  444. package/templates/next/files/components/ui/date-picker.jsx +360 -0
  445. package/templates/next/files/components/ui/distribution.jsx +117 -0
  446. package/templates/next/files/components/ui/feedback.jsx +143 -0
  447. package/templates/next/files/components/ui/field.jsx +115 -3
  448. package/templates/next/files/components/ui/file-input.jsx +234 -0
  449. package/templates/next/files/components/ui/icon.jsx +130 -8
  450. package/templates/next/files/components/ui/image.jsx +143 -0
  451. package/templates/next/files/components/ui/index.js +47 -2
  452. package/templates/next/files/components/ui/input-group.jsx +213 -0
  453. package/templates/next/files/components/ui/input-otp.jsx +170 -0
  454. package/templates/next/files/components/ui/item.jsx +206 -0
  455. package/templates/next/files/components/ui/menu.jsx +454 -82
  456. package/templates/next/files/components/ui/notice.jsx +126 -14
  457. package/templates/next/files/components/ui/pagination.jsx +156 -0
  458. package/templates/next/files/components/ui/popover.jsx +284 -0
  459. package/templates/next/files/components/ui/radio.jsx +193 -0
  460. package/templates/next/files/components/ui/rating.jsx +131 -0
  461. package/templates/next/files/components/ui/resizable.jsx +338 -0
  462. package/templates/next/files/components/ui/scroll-area.jsx +123 -0
  463. package/templates/next/files/components/ui/separator.jsx +119 -0
  464. package/templates/next/files/components/ui/sheet.jsx +96 -11
  465. package/templates/next/files/components/ui/slider.jsx +174 -0
  466. package/templates/next/files/components/ui/stat.jsx +574 -0
  467. package/templates/next/files/components/ui/steps.jsx +338 -0
  468. package/templates/next/files/components/ui/swatch.jsx +33 -0
  469. package/templates/next/files/components/ui/table.jsx +130 -0
  470. package/templates/next/files/components/ui/toast.jsx +440 -0
  471. package/templates/next/files/components/ui/toggle.jsx +195 -0
  472. package/templates/next/files/components/ui/tooltip.jsx +270 -0
  473. package/templates/next/template.json +264 -8
@@ -0,0 +1,525 @@
1
+ "use client";
2
+
3
+ // RecordForm in each of its shapes — the gallery's and the smoke test's
4
+ // surface. Not installed into apps. Saves are pretend: pick whether they
5
+ // succeed, fail, or come back with a field refused.
6
+ import { useState } from "react";
7
+ import { Button, Field, Item, Select } from "../components/ui";
8
+ import { RecordForm } from "../components/blocks/record-form";
9
+
10
+ const wait = (ms) => new Promise((r) => setTimeout(r, ms));
11
+
12
+ const PROFESSIONS = [
13
+ { value: "design", label: "Product designer" },
14
+ { value: "frontend", label: "Frontend engineer" },
15
+ { value: "backend", label: "Backend engineer" },
16
+ { value: "pm", label: "Product manager" },
17
+ { value: "data", label: "Data analyst" },
18
+ ];
19
+
20
+ const LANGUAGES = ["English", "German", "French", "Spanish", "Portuguese", "Italian", "Dutch", "Japanese", "Hindi"].map((l) => ({
21
+ value: l.toLowerCase(),
22
+ label: l,
23
+ }));
24
+
25
+ const VARIANTS = {
26
+ sections: {
27
+ label: "Profile, in sections",
28
+ taken: "email",
29
+ props: {
30
+ title: "Personal details",
31
+ description: "What your teammates see on your profile and in mentions.",
32
+ values: {
33
+ firstName: "Priya",
34
+ lastName: "Raman",
35
+ gender: "female",
36
+ birthDate: "1991-04-18",
37
+ profession: "design",
38
+ email: "priya@larkspur.io",
39
+ confirmEmail: "priya@larkspur.io",
40
+ phone: "+44 20 7946 0321",
41
+ location: "Leeds, United Kingdom",
42
+ language: "english",
43
+ callFrom: "10:00",
44
+ },
45
+ sections: [
46
+ {
47
+ title: "Basic details",
48
+ fields: [
49
+ { name: "firstName", label: "First name", required: true, autoComplete: "given-name" },
50
+ { name: "lastName", label: "Last name", required: true, autoComplete: "family-name" },
51
+ {
52
+ name: "gender",
53
+ label: "Gender",
54
+ type: "select",
55
+ options: [
56
+ { value: "female", label: "Female" },
57
+ { value: "male", label: "Male" },
58
+ { value: "other", label: "Another gender" },
59
+ { value: "unsaid", label: "Rather not say" },
60
+ ],
61
+ },
62
+ { name: "birthDate", label: "Birth date", type: "date", captionLayout: "dropdown", max: "2010-12-31" },
63
+ { name: "profession", label: "Profession", type: "select", options: PROFESSIONS },
64
+ ],
65
+ },
66
+ {
67
+ title: "Contact",
68
+ description: "Only people in your workspace can see these.",
69
+ fields: [
70
+ { name: "email", label: "Email", type: "email", required: true, icon: "mail", autoComplete: "email" },
71
+ { name: "confirmEmail", label: "Confirm email", type: "email", required: true, matches: "email", matchMessage: "The two emails differ." },
72
+ { name: "phone", label: "Phone", type: "tel", icon: "phone", autoComplete: "tel" },
73
+ { name: "location", label: "Location", icon: "map", placeholder: "City, country" },
74
+ ],
75
+ },
76
+ {
77
+ title: "Preferences",
78
+ fields: [
79
+ { name: "language", label: "Preferred language", type: "combobox", options: LANGUAGES, placeholder: "Choose a language" },
80
+ { name: "callFrom", label: "Best time to call", type: "time", help: "In your own time zone." },
81
+ ],
82
+ },
83
+ ],
84
+ },
85
+ },
86
+ product: {
87
+ label: "Product, in a card",
88
+ taken: "name",
89
+ props: {
90
+ title: "Edit product",
91
+ description: "Price, category and details for the storefront.",
92
+ values: { name: "Waxed canvas field jacket", brand: "Northbound", price: "189", category: "outerwear", details: "Dry wax finish, corduroy collar, two bellow pockets. Re-wax once a season." },
93
+ fields: [
94
+ { name: "name", label: "Product name", required: true, placeholder: "e.g. Merino crew neck" },
95
+ { name: "brand", label: "Brand", placeholder: "e.g. Northbound" },
96
+ { name: "price", label: "Price", type: "number", prefix: "$", min: 0, step: "0.01", required: true },
97
+ {
98
+ name: "category",
99
+ label: "Category",
100
+ type: "select",
101
+ required: true,
102
+ placeholder: "Choose a category",
103
+ options: [
104
+ { value: "outerwear", label: "Outerwear" },
105
+ { value: "tops", label: "Tops" },
106
+ { value: "bottoms", label: "Bottoms" },
107
+ { value: "footwear", label: "Footwear" },
108
+ { value: "accessories", label: "Accessories" },
109
+ ],
110
+ },
111
+ { name: "details", label: "Details", type: "textarea", placeholder: "Material, fit, care…", maxLength: 600 },
112
+ ],
113
+ deleteLabel: "Remove product",
114
+ confirmDelete: { title: "Remove this product?", body: "It leaves the storefront and every open cart." },
115
+ },
116
+ },
117
+ compact: {
118
+ label: "Account, compact",
119
+ taken: "username",
120
+ props: {
121
+ title: "Sign-in details",
122
+ columns: 1,
123
+ values: { username: "tomas.k", email: "tomas@harbourline.co" },
124
+ fields: [
125
+ { name: "username", label: "Username", required: true, pattern: "[a-z0-9._-]{3,24}", patternMessage: "3–24 lowercase letters, digits, dots or dashes.", autoComplete: "username" },
126
+ { name: "email", label: "Email", type: "email", required: true, autoComplete: "email" },
127
+ { name: "password", label: "New password", type: "password", minLength: 10, help: "At least 10 characters. Leave empty to keep the current one." },
128
+ { name: "confirm", label: "Confirm new password", type: "password", matches: "password", matchMessage: "The passwords differ." },
129
+ ],
130
+ },
131
+ },
132
+ photo: {
133
+ label: "Member, with a photo",
134
+ taken: "email",
135
+ props: {
136
+ title: "Team member",
137
+ description: "Profile, role and what they can change.",
138
+ values: {
139
+ photo: null,
140
+ firstName: "Marco",
141
+ lastName: "Bellini",
142
+ email: "marco@studio-ferro.it",
143
+ role: "manager",
144
+ languages: ["italian", "english"],
145
+ jobTitle: "Store manager",
146
+ accountType: "pro",
147
+ permission: "operational",
148
+ verified: "Verified",
149
+ },
150
+ fields: [
151
+ { name: "photo", label: "Profile photo", type: "photo", help: "PNG or JPG, square works best.", nameFrom: (v) => `${v.firstName ?? ""} ${v.lastName ?? ""}` },
152
+ { name: "firstName", label: "First name", required: true },
153
+ { name: "lastName", label: "Last name", required: true },
154
+ { name: "email", label: "Contact email", type: "email", required: true },
155
+ {
156
+ name: "role",
157
+ label: "Role",
158
+ type: "select",
159
+ options: [
160
+ { value: "stylist", label: "Stylist" },
161
+ { value: "manager", label: "Store manager" },
162
+ { value: "lead", label: "Creative lead" },
163
+ ],
164
+ },
165
+ { name: "languages", label: "Languages", type: "tags", options: LANGUAGES, placeholder: "Add a language" },
166
+ { name: "jobTitle", label: "Job title" },
167
+ {
168
+ name: "accountType",
169
+ label: "Account type",
170
+ type: "select",
171
+ options: [
172
+ { value: "basic", label: "Basic" },
173
+ { value: "pro", label: "Pro" },
174
+ { value: "exec", label: "Executive" },
175
+ ],
176
+ },
177
+ {
178
+ name: "permission",
179
+ label: "Permission level",
180
+ type: "select",
181
+ options: [
182
+ { value: "admin", label: "Admin" },
183
+ { value: "operational", label: "Operational" },
184
+ { value: "viewer", label: "Viewer" },
185
+ ],
186
+ },
187
+ { name: "verified", label: "Email status", type: "static" },
188
+ ],
189
+ deleteLabel: "Delete member",
190
+ confirmDelete: { title: "Delete Marco Bellini?", body: "Their sign-in stops working at once.", requireText: "marco" },
191
+ },
192
+ },
193
+ dialog: {
194
+ label: "Profile, in a dialog",
195
+ taken: "name",
196
+ dialog: "Edit profile",
197
+ props: {
198
+ container: "dialog",
199
+ title: "Edit profile",
200
+ description: "Update how you appear to your team.",
201
+ submitLabel: "Update profile",
202
+ values: { name: "Ines Carvalho", profession: "frontend", stack: ["react", "tailwind"], notify: "email" },
203
+ fields: [
204
+ { name: "name", label: "Name", required: true },
205
+ { name: "profession", label: "I am a", type: "select", options: PROFESSIONS },
206
+ {
207
+ name: "stack",
208
+ label: "Technologies",
209
+ description: "Pick the ones you work in.",
210
+ type: "checkboxes",
211
+ orientation: "horizontal",
212
+ options: [
213
+ { value: "react", label: "React" },
214
+ { value: "next", label: "Next.js" },
215
+ { value: "tailwind", label: "Tailwind CSS" },
216
+ { value: "postgres", label: "Postgres" },
217
+ ],
218
+ },
219
+ {
220
+ name: "notify",
221
+ label: "Where to reach you",
222
+ type: "radio",
223
+ orientation: "horizontal",
224
+ options: [
225
+ { value: "email", label: "Email" },
226
+ { value: "sms", label: "Text message" },
227
+ { value: "push", label: "Push" },
228
+ ],
229
+ },
230
+ ],
231
+ },
232
+ },
233
+ images: {
234
+ label: "Product, in a dialog with images",
235
+ taken: "name",
236
+ dialog: "Edit product",
237
+ props: {
238
+ container: "dialog",
239
+ title: "Edit product",
240
+ description: "Photos, price and the words shoppers read.",
241
+ submitLabel: "Update product",
242
+ values: {
243
+ images: [],
244
+ name: "Ceramic pour-over set",
245
+ category: "kitchen",
246
+ price: "64",
247
+ rating: 4,
248
+ description: "Hand-thrown stoneware dripper with a matching carafe.",
249
+ tags: ["coffee", "gift"],
250
+ },
251
+ fields: [
252
+ { name: "images", label: "Photos", type: "images", maxItems: 4, help: "Up to four. The first one leads." },
253
+ { name: "name", label: "Product name", required: true },
254
+ {
255
+ name: "category",
256
+ label: "Category",
257
+ type: "select",
258
+ options: [
259
+ { value: "kitchen", label: "Kitchen" },
260
+ { value: "home", label: "Home" },
261
+ { value: "garden", label: "Garden" },
262
+ ],
263
+ },
264
+ { name: "price", label: "Price", type: "number", prefix: "$", min: 0, required: true },
265
+ { name: "rating", label: "Quality grade", type: "rating", help: "Shown on the product page." },
266
+ { name: "description", label: "Description", type: "textarea", rows: 3 },
267
+ {
268
+ name: "tags",
269
+ label: "Tags",
270
+ type: "tags",
271
+ maxItems: 10,
272
+ options: ["coffee", "tea", "gift", "handmade", "sale"].map((t) => ({ value: t, label: t })),
273
+ help: "Up to ten.",
274
+ },
275
+ ],
276
+ },
277
+ },
278
+ split: {
279
+ label: "Workspace, split sections",
280
+ taken: "workspace",
281
+ props: {
282
+ container: "page",
283
+ layout: "split",
284
+ title: "Workspace settings",
285
+ description: "Your details, the workspace's, and what you are told about.",
286
+ values: { firstName: "Hana", lastName: "Okafor", email: "hana@quillhouse.com", role: "Operations lead", workspace: "Quill House", visibility: "private", about: "", digest: ["weekly"], mentions: true },
287
+ sections: [
288
+ {
289
+ title: "Personal information",
290
+ description: "Used on invoices and in the members list.",
291
+ fields: [
292
+ { name: "firstName", label: "First name", required: true },
293
+ { name: "lastName", label: "Last name", required: true },
294
+ { name: "email", label: "Email", type: "email", required: true, width: "full" },
295
+ { name: "role", label: "Role", disabled: true, help: "Only an owner can change roles." },
296
+ ],
297
+ },
298
+ {
299
+ title: "Workspace",
300
+ description: "How the workspace is named and who can find it.",
301
+ fields: [
302
+ { name: "workspace", label: "Workspace name", required: true },
303
+ {
304
+ name: "visibility",
305
+ label: "Visibility",
306
+ type: "select",
307
+ options: [
308
+ { value: "private", label: "Private" },
309
+ { value: "public", label: "Public" },
310
+ ],
311
+ },
312
+ { name: "about", label: "Description", type: "textarea", help: "Not shown outside the workspace." },
313
+ ],
314
+ },
315
+ {
316
+ title: "Notifications",
317
+ description: "Email only; push is set on each device.",
318
+ fields: [
319
+ {
320
+ name: "digest",
321
+ label: "Digests",
322
+ type: "checkboxes",
323
+ options: [
324
+ { value: "daily", label: "Daily summary", description: "What changed in the last day, at 8:00." },
325
+ { value: "weekly", label: "Weekly report", description: "Numbers for the week, on Monday." },
326
+ ],
327
+ },
328
+ { name: "mentions", label: "Mentions", type: "switch", description: "Email me when someone mentions me." },
329
+ ],
330
+ },
331
+ ],
332
+ },
333
+ },
334
+ cards: {
335
+ label: "Early access, choice cards",
336
+ taken: "email",
337
+ props: {
338
+ title: "Apply for early access",
339
+ description: "Tell us about your team; we answer within two working days.",
340
+ requireChanges: false,
341
+ submitLabel: "Apply",
342
+ values: { plan: "starter" },
343
+ sections: [
344
+ {
345
+ fields: [
346
+ { name: "firstName", label: "First name", required: true, autoComplete: "given-name" },
347
+ { name: "lastName", label: "Last name", autoComplete: "family-name" },
348
+ { name: "email", label: "Work email", type: "email", required: true, autoComplete: "email" },
349
+ { name: "company", label: "Company", autoComplete: "organization" },
350
+ { name: "size", label: "Company size", type: "select", placeholder: "Choose a size", options: ["1–9", "10–49", "50–249", "250+"] },
351
+ ],
352
+ },
353
+ {
354
+ title: "Package",
355
+ fields: [
356
+ {
357
+ name: "plan",
358
+ label: "Choose a package",
359
+ type: "choice-cards",
360
+ required: true,
361
+ options: [
362
+ { value: "starter", label: "Starter", description: "Up to 10,000 requests a day.", price: "Free" },
363
+ { value: "growth", label: "Growth", description: "Up to 500,000 requests a day.", price: "$900", per: "/mo" },
364
+ { value: "custom", label: "Custom", description: "Sized to what you run.", price: "Let's talk" },
365
+ ],
366
+ },
367
+ { name: "terms", label: "I agree to the early-access terms", type: "checkbox", required: true },
368
+ ],
369
+ },
370
+ ],
371
+ },
372
+ },
373
+ plans: {
374
+ label: "New workspace, priced plans",
375
+ taken: "workspace",
376
+ props: {
377
+ title: "Create a workspace",
378
+ values: { org: "fenwick", workspace: "", region: "fra", plan: "team" },
379
+ requireChanges: false,
380
+ submitLabel: "Create workspace",
381
+ sections: [
382
+ {
383
+ fields: [
384
+ {
385
+ name: "org",
386
+ label: "Organisation",
387
+ type: "select",
388
+ options: [
389
+ { value: "fenwick", label: "Fenwick & Doyle" },
390
+ { value: "tidal", label: "Tidal Labs" },
391
+ ],
392
+ },
393
+ { name: "workspace", label: "Workspace name", required: true, minLength: 3 },
394
+ {
395
+ name: "region",
396
+ label: "Region",
397
+ type: "combobox",
398
+ required: true,
399
+ width: "full",
400
+ options: [
401
+ { value: "fra", label: "Frankfurt, Germany", description: "eu-central" },
402
+ { value: "lhr", label: "London, United Kingdom", description: "eu-west" },
403
+ { value: "iad", label: "Washington, D.C., USA", description: "us-east" },
404
+ { value: "sfo", label: "San Francisco, USA", description: "us-west" },
405
+ { value: "sin", label: "Singapore", description: "ap-southeast" },
406
+ ],
407
+ },
408
+ ],
409
+ },
410
+ {
411
+ title: "Plan",
412
+ fields: [
413
+ {
414
+ name: "plan",
415
+ label: "Plan",
416
+ type: "choice-cards",
417
+ options: [
418
+ { value: "solo", label: "Solo", description: "3 projects, 5 GB.", price: "$15", per: "/mo" },
419
+ { value: "team", label: "Team", description: "Unlimited projects, 50 GB.", price: "$49", per: "/mo", badge: "Popular" },
420
+ { value: "agency", label: "Agency", description: "Client portals, 250 GB.", price: "$99", per: "/mo" },
421
+ ],
422
+ },
423
+ ],
424
+ },
425
+ ],
426
+ },
427
+ },
428
+ };
429
+
430
+ export default function RecordFormDemo() {
431
+ const [variant, setVariant] = useState("sections");
432
+ const [outcome, setOutcome] = useState("ok");
433
+ const [state, setState] = useState("ready");
434
+ const [open, setOpen] = useState(false);
435
+ const [saved, setSaved] = useState({});
436
+ const v = VARIANTS[variant];
437
+ const values = saved[variant] ?? v.props.values;
438
+
439
+ async function onSave(next) {
440
+ await wait(700);
441
+ if (outcome === "fail") return { ok: false, error: "The server did not answer. Your changes are still here — try again." };
442
+ if (outcome === "fields") return { ok: false, errors: { [v.taken]: "That one is already taken." } };
443
+ setSaved((s) => ({ ...s, [variant]: next }));
444
+ return { ok: true };
445
+ }
446
+
447
+ async function onDelete() {
448
+ await wait(700);
449
+ return outcome === "ok" ? { ok: true } : { ok: false, error: "It could not be removed just now." };
450
+ }
451
+
452
+ const props = {
453
+ ...v.props,
454
+ values,
455
+ onSave,
456
+ onDelete: v.props.deleteLabel ? onDelete : undefined,
457
+ loading: state === "loading",
458
+ error: state === "error" ? "The record could not be read." : undefined,
459
+ onRetry: () => setState("ready"),
460
+ sections: state === "empty" ? [] : v.props.sections,
461
+ fields: state === "empty" ? [] : v.props.fields,
462
+ };
463
+
464
+ return (
465
+ <div className="grid max-w-3xl gap-4">
466
+ <div className="grid gap-3 sm:grid-cols-3">
467
+ <Field id="rf-variant" label="Shape">
468
+ <Select
469
+ id="rf-variant"
470
+ value={variant}
471
+ onChange={(e) => {
472
+ setVariant(e.target.value);
473
+ setOpen(false);
474
+ }}
475
+ options={Object.entries(VARIANTS).map(([value, x]) => ({ value, label: x.label }))}
476
+ />
477
+ </Field>
478
+ <Field id="rf-outcome" label="Saving">
479
+ <Select
480
+ id="rf-outcome"
481
+ value={outcome}
482
+ onChange={(e) => setOutcome(e.target.value)}
483
+ options={[
484
+ { value: "ok", label: "Succeeds" },
485
+ { value: "fields", label: "A field is refused" },
486
+ { value: "fail", label: "Fails" },
487
+ ]}
488
+ />
489
+ </Field>
490
+ <Field id="rf-state" label="State">
491
+ <Select
492
+ id="rf-state"
493
+ value={state}
494
+ onChange={(e) => setState(e.target.value)}
495
+ options={[
496
+ { value: "ready", label: "Loaded" },
497
+ { value: "loading", label: "Loading" },
498
+ { value: "error", label: "Load failed" },
499
+ { value: "empty", label: "No fields" },
500
+ ]}
501
+ />
502
+ </Field>
503
+ </div>
504
+
505
+ {v.dialog ? (
506
+ <div className="grid gap-3">
507
+ <Item
508
+ variant="outline"
509
+ icon={variant === "images" ? "package" : "user"}
510
+ title={values.name}
511
+ description={variant === "images" ? `$${values.price} · ${values.category}` : PROFESSIONS.find((p) => p.value === values.profession)?.label}
512
+ actions={
513
+ <Button icon="pencil" size="sm" onClick={() => setOpen(true)}>
514
+ {v.dialog}
515
+ </Button>
516
+ }
517
+ />
518
+ <RecordForm key={variant} {...props} open={open} onClose={() => setOpen(false)} />
519
+ </div>
520
+ ) : (
521
+ <RecordForm key={variant} {...props} onCancel={variant === "product" ? () => {} : undefined} />
522
+ )}
523
+ </div>
524
+ );
525
+ }
@@ -0,0 +1,4 @@
1
+ // The RecordForm block — `makersclaw add record-form`. Fixed: compose it
2
+ // through its props (README.md beside this file); a form it cannot be is
3
+ // your own component in components/, built from the kit's Field parts.
4
+ export { RecordForm } from "./record-form";