makersclaw 0.2.0 → 0.3.1

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 (475) 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/cli.mjs +19 -6
  430. package/src/install.mjs +18 -0
  431. package/src/registry.mjs +38 -4
  432. package/src/shadcn.mjs +14 -1
  433. package/templates/next/files/README.md +145 -11
  434. package/templates/next/files/app/globals.css +55 -4
  435. package/templates/next/files/check/run.mjs +3 -3
  436. package/templates/next/files/components/ui/avatar.jsx +141 -0
  437. package/templates/next/files/components/ui/breadcrumb.jsx +149 -0
  438. package/templates/next/files/components/ui/button-group.jsx +70 -0
  439. package/templates/next/files/components/ui/button.jsx +132 -12
  440. package/templates/next/files/components/ui/calendar.jsx +609 -0
  441. package/templates/next/files/components/ui/carousel.jsx +281 -0
  442. package/templates/next/files/components/ui/collapsible.jsx +208 -0
  443. package/templates/next/files/components/ui/combobox.jsx +608 -0
  444. package/templates/next/files/components/ui/command.jsx +577 -0
  445. package/templates/next/files/components/ui/context-menu.jsx +191 -0
  446. package/templates/next/files/components/ui/date-picker.jsx +360 -0
  447. package/templates/next/files/components/ui/distribution.jsx +117 -0
  448. package/templates/next/files/components/ui/feedback.jsx +143 -0
  449. package/templates/next/files/components/ui/field.jsx +115 -3
  450. package/templates/next/files/components/ui/file-input.jsx +234 -0
  451. package/templates/next/files/components/ui/icon.jsx +130 -8
  452. package/templates/next/files/components/ui/image.jsx +143 -0
  453. package/templates/next/files/components/ui/index.js +47 -2
  454. package/templates/next/files/components/ui/input-group.jsx +213 -0
  455. package/templates/next/files/components/ui/input-otp.jsx +170 -0
  456. package/templates/next/files/components/ui/item.jsx +206 -0
  457. package/templates/next/files/components/ui/menu.jsx +454 -82
  458. package/templates/next/files/components/ui/notice.jsx +126 -14
  459. package/templates/next/files/components/ui/pagination.jsx +156 -0
  460. package/templates/next/files/components/ui/popover.jsx +284 -0
  461. package/templates/next/files/components/ui/radio.jsx +193 -0
  462. package/templates/next/files/components/ui/rating.jsx +131 -0
  463. package/templates/next/files/components/ui/resizable.jsx +338 -0
  464. package/templates/next/files/components/ui/scroll-area.jsx +123 -0
  465. package/templates/next/files/components/ui/separator.jsx +119 -0
  466. package/templates/next/files/components/ui/sheet.jsx +96 -11
  467. package/templates/next/files/components/ui/slider.jsx +174 -0
  468. package/templates/next/files/components/ui/stat.jsx +574 -0
  469. package/templates/next/files/components/ui/steps.jsx +338 -0
  470. package/templates/next/files/components/ui/swatch.jsx +33 -0
  471. package/templates/next/files/components/ui/table.jsx +130 -0
  472. package/templates/next/files/components/ui/toast.jsx +440 -0
  473. package/templates/next/files/components/ui/toggle.jsx +195 -0
  474. package/templates/next/files/components/ui/tooltip.jsx +270 -0
  475. package/templates/next/template.json +264 -8
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
 
3
- import { useEffect, useRef } from "react";
4
- import { Button, Icon, cx } from "../../ui";
3
+ import { useEffect, useId, useRef, useState } from "react";
4
+ import { Button, Card, Empty, Field, Icon, Skeleton, Textarea, cx } from "../../ui";
5
5
 
6
6
  // JobPanel — the panel that follows work the founder asked the app's
7
7
  // agent for (useJob in lib/hooks.js, README §5 "Commissioning work"). It
@@ -13,6 +13,17 @@ import { Button, Icon, cx } from "../../ui";
13
13
  // const job = useJob();
14
14
  // <Button onClick={() => job.start("Draft a launch plan for Rowhouse")}>Generate a launch plan</Button>
15
15
  // <JobPanel job={job} title="Drafting the launch plan" doneTitle="Launch plan drafted" />
16
+ //
17
+ // variant="generator" is the same panel inside a small studio: a prompt,
18
+ // the surface's own options, Generate, then the results the job made. The
19
+ // block never calls a model and takes no API key or provider: Generate
20
+ // hands the prompt to the app's agent (job.start, or `onGenerate`), and
21
+ // the results are the rows the job wrote, passed back in as `results`.
22
+ //
23
+ // <JobPanel variant="generator" job={job} promptLabel="Describe the photo"
24
+ // options={<Field …><Select …/></Field>}
25
+ // onGenerate={(prompt) => job.start(`Make a product photo: ${prompt}. Size ${size}.`)}
26
+ // results={photos.map((p) => <PhotoCard key={p.id} photo={p} />)} />
16
27
 
17
28
  function StepMark({ status }) {
18
29
  if (status === "done") return <Icon name="check" size={14} className="shrink-0 text-success" />;
@@ -20,7 +31,12 @@ function StepMark({ status }) {
20
31
  return <span aria-hidden="true" className="mx-[3px] size-2 shrink-0 animate-pulse rounded-full bg-primary" />;
21
32
  }
22
33
 
23
- export function JobPanel({
34
+ export function JobPanel({ variant = "panel", ...props }) {
35
+ if (variant === "generator") return <Generator {...props} />;
36
+ return <Panel {...props} />;
37
+ }
38
+
39
+ function Panel({
24
40
  job,
25
41
  title = "Working on it",
26
42
  doneTitle = "Done",
@@ -108,3 +124,153 @@ export function JobPanel({
108
124
  </section>
109
125
  );
110
126
  }
127
+
128
+ const isEmpty = (node) => node == null || node === false || node === "" || (Array.isArray(node) && node.filter(Boolean).length === 0);
129
+
130
+ // The generator: a form (prompt, options, Generate), the running job's
131
+ // panel under it, and the results. Stacked, or side by side from lg up.
132
+ function Generator({
133
+ job,
134
+ prompt: controlled,
135
+ defaultPrompt = "",
136
+ onPromptChange,
137
+ onGenerate,
138
+ heading,
139
+ description,
140
+ promptLabel = "What should it make?",
141
+ placeholder = "Describe what you want…",
142
+ promptHint,
143
+ promptRows = 4,
144
+ options,
145
+ generateLabel = "Generate",
146
+ generateIcon = "wand",
147
+ canGenerateEmpty = false,
148
+ disabled = false,
149
+ aside,
150
+ results,
151
+ resultsTitle = "Results",
152
+ resultsActions,
153
+ resultsColumns = 1,
154
+ placeholderResult,
155
+ emptyTitle = "Nothing made yet",
156
+ emptyBody = "Describe what you want and press Generate. What it makes lands here.",
157
+ emptyState,
158
+ layout = "stacked",
159
+ title = "Working on it",
160
+ doneTitle = "Done",
161
+ failedTitle = "It stopped",
162
+ onRetry,
163
+ autoClose = 6000,
164
+ maxSteps = 6,
165
+ showText = true,
166
+ className,
167
+ }) {
168
+ const id = useId();
169
+ const [own, setOwn] = useState(defaultPrompt);
170
+ const [error, setError] = useState(null);
171
+ const [starting, setStarting] = useState(false);
172
+ const lastPrompt = useRef("");
173
+ const value = controlled ?? own;
174
+ const setValue = (v) => {
175
+ if (controlled === undefined) setOwn(v);
176
+ onPromptChange?.(v);
177
+ };
178
+ const running = Boolean(job?.running);
179
+ const canGenerate = !disabled && !running && !starting && (canGenerateEmpty || value.trim().length > 0);
180
+
181
+ async function generate(text = value) {
182
+ if (disabled || running || starting || (!canGenerateEmpty && !text.trim())) return;
183
+ lastPrompt.current = text.trim();
184
+ setError(null);
185
+ setStarting(true);
186
+ let r;
187
+ try {
188
+ r = onGenerate ? await onGenerate(text.trim()) : await job?.start?.(text.trim());
189
+ } catch (e) {
190
+ r = { ok: false, error: e?.message ?? String(e) };
191
+ }
192
+ setStarting(false);
193
+ if (r && r.ok === false && !r.aborted) setError(r.error ?? "It did not start");
194
+ }
195
+ // useJob's start resolves when the job ends; a failure it reports is
196
+ // already the panel's error, so the field says only what the panel does not.
197
+ const fieldError = error && !job?.error ? error : null;
198
+
199
+ const cols = { 1: "grid-cols-1", 2: "grid-cols-1 sm:grid-cols-2", 3: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3", 4: "grid-cols-2 lg:grid-cols-4" };
200
+ const empty = isEmpty(results);
201
+ const split = layout === "split";
202
+
203
+ const form = (
204
+ <Card title={heading} description={description} className="min-w-0">
205
+ <div className="grid gap-4">
206
+ <Field id={id} label={promptLabel} hint={promptHint} error={fieldError ?? undefined}>
207
+ <Textarea
208
+ id={id}
209
+ rows={promptRows}
210
+ value={value}
211
+ placeholder={placeholder}
212
+ disabled={disabled}
213
+ invalid={Boolean(fieldError)}
214
+ aria-describedby={fieldError ? `${id}-error` : promptHint ? `${id}-hint` : undefined}
215
+ onChange={(e) => setValue(e.target.value)}
216
+ onKeyDown={(e) => {
217
+ // Cmd/Ctrl+Enter generates; Enter alone is a new line.
218
+ if (e.key === "Enter" && (e.metaKey || e.ctrlKey) && !e.nativeEvent.isComposing) {
219
+ e.preventDefault();
220
+ generate();
221
+ }
222
+ }}
223
+ />
224
+ </Field>
225
+ {options ? <div className="grid gap-4 sm:grid-cols-2">{options}</div> : null}
226
+ <div className="flex flex-wrap items-center gap-3">
227
+ <Button variant="primary" icon={running || starting ? undefined : generateIcon} loading={starting} disabled={!canGenerate} onClick={() => generate()}>
228
+ {running ? "Working…" : generateLabel}
229
+ </Button>
230
+ <p aria-hidden="true" className="hidden text-xs text-muted-foreground md:block">
231
+ ⌘/Ctrl + Enter
232
+ </p>
233
+ </div>
234
+ <Panel
235
+ job={job}
236
+ title={title}
237
+ doneTitle={doneTitle}
238
+ failedTitle={failedTitle}
239
+ onRetry={onRetry ?? (lastPrompt.current || canGenerateEmpty ? () => generate(lastPrompt.current) : undefined)}
240
+ autoClose={autoClose}
241
+ maxSteps={maxSteps}
242
+ showText={showText}
243
+ />
244
+ </div>
245
+ </Card>
246
+ );
247
+
248
+ const shelf = (
249
+ <section aria-label={resultsTitle} aria-busy={running || undefined} className="grid min-w-0 content-start gap-3">
250
+ <div className="flex min-h-9 items-center justify-between gap-3">
251
+ <h3 className="text-sm font-semibold">{resultsTitle}</h3>
252
+ {resultsActions ? <div className="flex shrink-0 items-center gap-2">{resultsActions}</div> : null}
253
+ </div>
254
+ {running ? (
255
+ <div className={cx("grid gap-3", cols[resultsColumns] ?? cols[1])}>
256
+ {placeholderResult ?? <Skeleton shape="rect" className="h-32 w-full" />}
257
+ </div>
258
+ ) : null}
259
+ {empty ? (
260
+ running ? null : emptyState ?? <Empty icon="sparkles" title={emptyTitle} body={emptyBody} className="rounded-lg border border-dashed border-border" />
261
+ ) : (
262
+ <div className={cx("grid gap-3", cols[resultsColumns] ?? cols[1])}>{results}</div>
263
+ )}
264
+ </section>
265
+ );
266
+
267
+ return (
268
+ <div className={cx("grid gap-4", split && "lg:grid-cols-[minmax(0,2fr)_minmax(0,3fr)] lg:items-start", className)}>
269
+ <div className="grid min-w-0 gap-4">
270
+ {form}
271
+ {aside}
272
+ </div>
273
+ {shelf}
274
+ </div>
275
+ );
276
+ }
@@ -0,0 +1,133 @@
1
+ # JsonEditor
2
+
3
+ A JSON editor with two views of one value. **Tree** shows it as folding
4
+ rows: double-click a value to edit it, double-click a key to rename it,
5
+ `+` adds a key or an item, and each row's ⋯ menu copies its path
6
+ (`deal.owner.email`) or value, changes its type, or deletes it — with Undo
7
+ in a toast. **Code** is the text, in the `code-editor` block's JSON mode.
8
+
9
+ It is checked as it changes. The status line under the title says
10
+ `Valid JSON · 5 keys`, or what is wrong in plain words and where —
11
+ `Line 4: A comma is missing before this` — and clicking it opens the Code
12
+ view at that spot. While the text does not parse the last valid value
13
+ stands and the Tree view waits. Format lays the text out again (keys,
14
+ order and numbers as written); the ⋯ menu copies it pretty or on one
15
+ line, and expands or collapses the tree. Empty, it offers a new object, a
16
+ new list, or a place to paste.
17
+
18
+ Built on `code-editor` (which `add` installs with it); it never imports
19
+ CodeMirror itself.
20
+
21
+ ```jsx
22
+ import { JsonEditor } from "../components/blocks/json-editor"; // a Makersclaw app ("./blocks/json-editor" from components/)
23
+ import { JsonEditor } from "@/components/makersclaw/blocks/json-editor"; // a shadcn project
24
+ ```
25
+
26
+ `JsonEditor` is a client component: render it from a `"use client"`
27
+ component. The tree helpers (`getAt`, `setAt`, `pathLabel`…) are plain
28
+ functions and work on the server too.
29
+
30
+ ## The data
31
+
32
+ A plain JSON value: an object, a list, text, a number, true/false or null
33
+ — what `JSON.parse` gives and a `jsonb` column stores. The editor hands
34
+ back a new value on every valid edit and never changes the one you gave
35
+ it.
36
+
37
+ Two things JavaScript does to any JSON value, here too: keys that look
38
+ like whole numbers (`"2"`) come first in an object, and numbers past 2^53
39
+ lose precision. The Code view's text keeps both as typed until it is
40
+ edited from the Tree.
41
+
42
+ ## Props
43
+
44
+ - `value` — the JSON value, controlled. A new `value` that is not what
45
+ the editor last sent through `onChange` is another record: it replaces
46
+ the text, the folds and the saved state.
47
+ - `defaultValue` — the starting value, uncontrolled. With neither, the
48
+ editor starts empty.
49
+ - `onChange(value)` — every valid edit, with the whole value. A keystroke
50
+ that leaves the text broken sends nothing.
51
+ - `onSave(value) → { ok, error? }` — optional, may be async. Shows a Save
52
+ button (and Cmd/Ctrl+S) that is live when there are valid unsaved
53
+ changes. It is optimistic: the status says Saved at once; `{ ok: false,
54
+ error }` (or a throw) puts "Unsaved changes" back and shows `error` in a
55
+ notice with Try again. Without `onSave`, save through `onChange`
56
+ yourself.
57
+ - `view` / `defaultView` — `"tree"` (default) or `"code"`, controlled or
58
+ not; `onViewChange(view)` hears the toggle.
59
+ - `readOnly` — `false` (default). `true`: the tree only folds and copies,
60
+ the text only selects and copies.
61
+ - `title` — a heading above the status line ("Webhook payload").
62
+ - `expandDepth` — how many levels the tree opens with, default `2`
63
+ (`0` shows only the top level).
64
+ - `height` — a fixed height (px number or CSS length) for both views.
65
+ Without it they grow to `maxHeight` (480), then scroll.
66
+ - `placeholder` — the empty Code view's hint.
67
+ - `label` — what a screen reader calls the tree and the editor (default:
68
+ `title`, else "JSON").
69
+ - `className` — the frame's classes.
70
+
71
+ ### Keys
72
+
73
+ In the tree (one Tab stop): ↑ ↓ move · → open, then into it · ← close,
74
+ then to the parent · Home / End · Enter or Space opens a folder or edits a
75
+ value · F2 renames a key · Delete removes the row (Undo in the toast).
76
+ Editing: Enter keeps it, Esc puts it back. Cmd/Ctrl+S saves (with
77
+ `onSave`); the Code view keeps every `code-editor` key (Shift+Alt+F
78
+ formats).
79
+
80
+ ### Editing a value
81
+
82
+ Text is edited bare (no quotes) and stays text. Anything else is read as
83
+ JSON: `42`, `true`, `null`, `[1, 2]`, `{"a": 1}`; what does not read stays
84
+ as text. To turn text into a number (or a list into an object…), use the
85
+ row's ⋯ → Change type, which keeps what it can.
86
+
87
+ ## The helpers
88
+
89
+ `typeOf(v)`, `pathLabel(path)` (`["deal", "tags", 0]` → `deal.tags[0]`),
90
+ `getAt(root, path)`, `setAt(root, path, v)`, `removeAt(root, path)` →
91
+ `{ root, removed, index }`, `insertAt(root, parentPath, { key?, index?,
92
+ value })`, `renameKey(root, path, to)` → `{ root }` or `{ error }`,
93
+ `flattenTree(value, openIds)`, `expandedTo(value, depth)`, `summary(v)`
94
+ ("3 keys"), `preview(v)`. Every edit returns a new root. `JsonTree` is the
95
+ tree on its own (`value`, `onEdit(next, { undo?, message? })`, `open`,
96
+ `setOpen`, `readOnly`) for a screen that wants rows without the frame.
97
+
98
+ ## Example
99
+
100
+ ```jsx
101
+ "use client";
102
+ import { useState } from "react";
103
+ import { JsonEditor } from "../components/blocks/json-editor";
104
+ import { saveIntegrationSettings } from "../lib/actions"; // your server action → { ok, error? }
105
+
106
+ export function WebhookSettings({ integration }) {
107
+ const [settings, setSettings] = useState(integration.settings);
108
+ return (
109
+ <JsonEditor
110
+ title="Webhook settings"
111
+ value={settings}
112
+ onChange={setSettings}
113
+ onSave={(v) => saveIntegrationSettings(integration.id, v)}
114
+ />
115
+ );
116
+ }
117
+ ```
118
+
119
+ Inspect a payload, read-only, as text first:
120
+
121
+ ```jsx
122
+ <JsonEditor title="Last delivery" value={delivery.body} readOnly defaultView="code" height={320} />
123
+ ```
124
+
125
+ ## What it will not do
126
+
127
+ - No JSON Schema: it checks that the text is JSON, not that it has the
128
+ keys your app needs. Check that in `onSave` and return `{ ok: false,
129
+ error: "…" }`.
130
+ - No drag to reorder rows; order changes in the Code view.
131
+ - It does not diff two values or merge edits from two people.
132
+ - Very large documents (tens of thousands of rows) are better read in the
133
+ Code view; the tree draws every open row.
@@ -0,0 +1,10 @@
1
+ {
2
+ "name": "json-editor",
3
+ "title": "JsonEditor",
4
+ "description": "A JSON editor in the workspace theme with two views of one value: a Tree of folding rows (edit a value or rename a key in place, add keys and items, change a type, copy a path, delete with Undo, arrow keys throughout) and Code (the code-editor block in JSON mode). Checked as it changes: the status line says what is wrong in plain words and which line, and clicking it goes there. A Format button, copy as pretty or one-line JSON, a friendly empty state with starters, and an optional Save that is optimistic and rolls back with a notice when it fails.",
5
+ "useWhen": "A screen edits or inspects a JSON value: an integration's settings, a webhook payload, a record's metadata or custom fields column (jsonb), an API response, feature flags. Not for editing SQL or other code (code-editor), a form of known fields (record-form), or a table of rows (data-table).",
6
+ "tags": ["json", "editor", "tree", "jsonb", "config", "settings", "payload", "webhook", "metadata", "validate", "format", "inspector", "key value"],
7
+ "exports": ["JsonEditor", "JsonTree", "typeOf", "pathLabel", "getAt", "setAt", "removeAt", "insertAt", "renameKey", "flattenTree", "expandedTo", "summary", "preview"],
8
+ "files": ["index.js", "json-editor.jsx", "json-tree.jsx", "tree.js"],
9
+ "requires": ["code-editor"]
10
+ }
@@ -0,0 +1,92 @@
1
+ "use client";
2
+
3
+ // JsonEditor three ways — the gallery's and the smoke test's surface. Not
4
+ // installed into apps.
5
+ // Settings an integration's settings, edited in the tree, saved through
6
+ // onSave (a switch makes the save fail, to show the rollback).
7
+ // Payload a webhook delivery, read-only, opened in the Code view.
8
+ // Empty nothing yet: the starters.
9
+ import { useState } from "react";
10
+ import { Switch, TabPanel, Tabs } from "../components/ui";
11
+ import { JsonEditor } from "../components/blocks/json-editor";
12
+
13
+ const HUBSPOT_SYNC = {
14
+ enabled: true,
15
+ direction: "two-way",
16
+ schedule: { every: 15, unit: "minutes", quiet_hours: ["22:00", "06:00"] },
17
+ objects: {
18
+ contacts: { match_on: "email", fields: ["first_name", "last_name", "title", "phone"] },
19
+ companies: { match_on: "domain", fields: ["name", "industry", "employees"] },
20
+ deals: { match_on: "external_id", stages: { qualified: "appointmentscheduled", proposal: "presentationscheduled", won: "closedwon" } },
21
+ },
22
+ owner_map: { "priya@acme-sales.co": 51023, "marcus@acme-sales.co": 51087 },
23
+ notify: { channel: "#revops", on: ["error", "conflict"] },
24
+ retry_limit: 3,
25
+ last_error: null,
26
+ };
27
+
28
+ const DELIVERY = {
29
+ id: "evt_2Qk81",
30
+ type: "invoice.paid",
31
+ created: "2026-09-21T09:14:52Z",
32
+ livemode: false,
33
+ data: {
34
+ invoice: {
35
+ number: "INV-2041",
36
+ customer: { name: "Northwind Traders", email: "billing@northwind.example" },
37
+ lines: [
38
+ { description: "Growth plan — annual", quantity: 1, amount: 4800 },
39
+ { description: "Extra seats", quantity: 6, amount: 540 },
40
+ ],
41
+ total: 5340,
42
+ currency: "usd",
43
+ paid: true,
44
+ },
45
+ },
46
+ };
47
+
48
+ function SettingsDemo() {
49
+ const [value, setValue] = useState(HUBSPOT_SYNC);
50
+ const [fail, setFail] = useState(false);
51
+ return (
52
+ <div className="grid gap-3">
53
+ <Switch id="json-fail" label="Make saves fail" checked={fail} onChange={(e) => setFail(e.target.checked)} />
54
+ <JsonEditor
55
+ title="HubSpot sync settings"
56
+ value={value}
57
+ onChange={setValue}
58
+ onSave={async () => {
59
+ await new Promise((r) => setTimeout(r, 600));
60
+ return fail ? { ok: false, error: "HubSpot rejected the owner map: 51087 is not a user in this portal." } : { ok: true };
61
+ }}
62
+ />
63
+ </div>
64
+ );
65
+ }
66
+
67
+ export default function JsonEditorDemo() {
68
+ const [tab, setTab] = useState("settings");
69
+ return (
70
+ <div className="mx-auto w-full max-w-3xl">
71
+ <Tabs
72
+ aria-label="Examples"
73
+ tabs={[
74
+ { key: "settings", label: "Settings" },
75
+ { key: "payload", label: "Payload" },
76
+ { key: "empty", label: "Empty" },
77
+ ]}
78
+ value={tab}
79
+ onChange={setTab}
80
+ />
81
+ <TabPanel tab="settings" value={tab}>
82
+ <SettingsDemo />
83
+ </TabPanel>
84
+ <TabPanel tab="payload" value={tab}>
85
+ <JsonEditor title="Last delivery · invoice.paid" defaultValue={DELIVERY} readOnly defaultView="code" height={360} />
86
+ </TabPanel>
87
+ <TabPanel tab="empty" value={tab}>
88
+ <JsonEditor title="Custom fields" />
89
+ </TabPanel>
90
+ </div>
91
+ );
92
+ }
@@ -0,0 +1,7 @@
1
+ // The JsonEditor block — `makersclaw add json-editor`. Fixed: compose it
2
+ // through its props (README.md beside this file). Built on code-editor:
3
+ // the Code view is a CodeEditor in JSON mode. The tree helpers are plain
4
+ // functions of plain values and run anywhere, the server included.
5
+ export { JsonEditor } from "./json-editor";
6
+ export { JsonTree } from "./json-tree";
7
+ export { typeOf, pathLabel, getAt, setAt, removeAt, insertAt, renameKey, flattenTree, expandedTo, summary, preview } from "./tree";