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
@@ -0,0 +1,169 @@
1
+ "use client";
2
+
3
+ import { useCallback, useRef, useState } from "react";
4
+
5
+ // The table's arithmetic, apart from its drawing: controlled-or-not
6
+ // state, and the pure pipeline rows go through (search → facets → sort →
7
+ // page). Pure functions, so a block built on DataTable (report-table)
8
+ // reads the same answers the table draws.
9
+
10
+ /** One piece of state that is the caller's when `value` is given, else
11
+ * the block's own. `onChange` is called either way. */
12
+ export function useControllable(value, defaultValue, onChange) {
13
+ const controlled = value !== undefined;
14
+ const [own, setOwn] = useState(defaultValue);
15
+ const current = controlled ? value : own;
16
+ const latest = useRef(current);
17
+ latest.current = current;
18
+ const set = useCallback(
19
+ (next) => {
20
+ const v = typeof next === "function" ? next(latest.current) : next;
21
+ latest.current = v;
22
+ if (!controlled) setOwn(v);
23
+ onChange?.(v);
24
+ },
25
+ [controlled, onChange],
26
+ );
27
+ return [current, set];
28
+ }
29
+
30
+ const isBlank = (v) => v === null || v === undefined || v === "";
31
+
32
+ /** What a column holds for a row, for sorting. */
33
+ export function sortValueOf(column, row) {
34
+ return column.sortValue ? column.sortValue(row) : row?.[column.key];
35
+ }
36
+
37
+ /** What a column says for a row, for the search. */
38
+ export function searchTextOf(column, row) {
39
+ const v = column.searchValue ? column.searchValue(row) : sortValueOf(column, row);
40
+ if (isBlank(v)) return "";
41
+ if (v instanceof Date) return v.toISOString();
42
+ return typeof v === "object" ? "" : String(v);
43
+ }
44
+
45
+ /** The value a facet groups a row under (always a string key). */
46
+ export function facetValueOf(facet, row) {
47
+ const v = facet.value ? facet.value(row) : row?.[facet.key];
48
+ return isBlank(v) ? "" : String(v);
49
+ }
50
+
51
+ function compare(a, b) {
52
+ // Blanks sort last in either direction (the caller flips only non-blanks).
53
+ if (a instanceof Date) a = a.getTime();
54
+ if (b instanceof Date) b = b.getTime();
55
+ if (typeof a === "number" && typeof b === "number") return a - b;
56
+ if (typeof a === "boolean" && typeof b === "boolean") return Number(a) - Number(b);
57
+ return String(a).localeCompare(String(b), undefined, { numeric: true, sensitivity: "base" });
58
+ }
59
+
60
+ /** Rows ordered by `sort` ([{ key, dir: "asc" | "desc" }], first wins). */
61
+ export function sortRows(rows, sort, columns) {
62
+ const keys = (sort ?? []).map((s) => ({ ...s, column: columns.find((c) => c.key === s.key) })).filter((s) => s.column);
63
+ if (keys.length === 0) return rows;
64
+ return rows
65
+ .map((row, i) => ({ row, i }))
66
+ .sort((x, y) => {
67
+ for (const { column, dir } of keys) {
68
+ const a = sortValueOf(column, x.row);
69
+ const b = sortValueOf(column, y.row);
70
+ const ba = isBlank(a);
71
+ const bb = isBlank(b);
72
+ if (ba || bb) {
73
+ if (ba && bb) continue;
74
+ return ba ? 1 : -1;
75
+ }
76
+ const c = compare(a, b);
77
+ if (c !== 0) return dir === "desc" ? -c : c;
78
+ }
79
+ return x.i - y.i; // stable
80
+ })
81
+ .map((x) => x.row);
82
+ }
83
+
84
+ /** Rows whose searchable columns contain every word of `query`. */
85
+ export function searchRows(rows, query, columns) {
86
+ const words = String(query ?? "").trim().toLowerCase().split(/\s+/).filter(Boolean);
87
+ if (words.length === 0) return rows;
88
+ const searchable = columns.filter((c) => c.searchable !== false);
89
+ return rows.filter((row) => {
90
+ const text = searchable.map((c) => searchTextOf(c, row)).join(" \u0001 ").toLowerCase();
91
+ return words.every((w) => text.includes(w));
92
+ });
93
+ }
94
+
95
+ /** Rows that match every facet's chosen values (`filters`: { key: [v…] }).
96
+ * `except` leaves one facet out — its own counts are taken that way. */
97
+ export function filterRows(rows, filters, facets, except) {
98
+ const active = (facets ?? []).filter((f) => f.key !== except && (filters?.[f.key] ?? []).length > 0);
99
+ if (active.length === 0) return rows;
100
+ return rows.filter((row) => active.every((f) => filters[f.key].map(String).includes(facetValueOf(f, row))));
101
+ }
102
+
103
+ /** A facet's options with how many rows each would show, counted over
104
+ * the rows the search and the OTHER facets leave. */
105
+ export function facetOptions(facet, rows, filters, facets, query, columns) {
106
+ const pool = filterRows(searchRows(rows, query, columns), filters, facets, facet.key);
107
+ const counts = new Map();
108
+ for (const row of pool) {
109
+ const v = facetValueOf(facet, row);
110
+ counts.set(v, (counts.get(v) ?? 0) + 1);
111
+ }
112
+ const given = facet.options?.map((o) => (typeof o === "object" ? { ...o, value: String(o.value) } : { value: String(o), label: String(o) }));
113
+ const all = given ?? [...new Set(rows.map((r) => facetValueOf(facet, r)))].sort((a, b) => compare(a, b)).map((v) => ({ value: v, label: v || "None" }));
114
+ return all.map((o) => ({ ...o, count: o.count ?? counts.get(o.value) ?? 0 }));
115
+ }
116
+
117
+ /** Rows through search, facets and sort — the whole of client mode. */
118
+ export function processRows(rows, { query, filters, facets, sort, columns }) {
119
+ return sortRows(filterRows(searchRows(rows, query, columns), filters, facets), sort, columns);
120
+ }
121
+
122
+ /** The next sort after a press on `key`: plain press sorts by it alone
123
+ * (asc → desc → off); with `add` it joins or cycles within the list. */
124
+ export function nextSort(sort, key, add) {
125
+ const now = sort ?? [];
126
+ const at = now.find((s) => s.key === key);
127
+ const cycled = !at ? { key, dir: "asc" } : at.dir === "asc" ? { key, dir: "desc" } : null;
128
+ if (!add) return cycled ? [cycled] : [];
129
+ if (!at) return [...now, cycled];
130
+ return cycled ? now.map((s) => (s.key === key ? cycled : s)) : now.filter((s) => s.key !== key);
131
+ }
132
+
133
+ /** The value `groupBy` (a key or `(row) => value`) files a row under. */
134
+ export function groupValueOf(groupBy, row) {
135
+ const v = typeof groupBy === "function" ? groupBy(row) : row?.[groupBy];
136
+ return isBlank(v) ? "" : v;
137
+ }
138
+
139
+ /** The string a group is known by (its React key, its place in `order`). */
140
+ export function groupKeyOf(value) {
141
+ return value instanceof Date ? value.toISOString() : String(value ?? "");
142
+ }
143
+
144
+ /** Rows filed under `groupBy`: [{ key, value, rows }]. Rows keep their
145
+ * order inside a group (sort first, then group: a sort orders rows
146
+ * within their groups and never moves a group). `order` places the
147
+ * groups: an array of group values (those listed first, in that order;
148
+ * the rest by first appearance in `rows`) or a compare function over
149
+ * two group values. */
150
+ export function groupRows(rows, groupBy, order) {
151
+ if (groupBy === undefined || groupBy === null || groupBy === false) return null;
152
+ const map = new Map();
153
+ for (const row of rows ?? []) {
154
+ const value = groupValueOf(groupBy, row);
155
+ const key = groupKeyOf(value);
156
+ let g = map.get(key);
157
+ if (!g) map.set(key, (g = { key, value, rows: [] }));
158
+ g.rows.push(row);
159
+ }
160
+ const groups = [...map.values()];
161
+ if (typeof order === "function") return groups.sort((a, b) => order(a.value, b.value));
162
+ if (!Array.isArray(order)) return groups;
163
+ const rank = new Map();
164
+ for (const v of order) if (!rank.has(groupKeyOf(v))) rank.set(groupKeyOf(v), rank.size);
165
+ return groups
166
+ .map((g, i) => ({ g, i }))
167
+ .sort((x, y) => (rank.get(x.g.key) ?? rank.size + x.i) - (rank.get(y.g.key) ?? rank.size + y.i))
168
+ .map((x) => x.g);
169
+ }
@@ -0,0 +1,108 @@
1
+ # Diagram
2
+
3
+ Draws a diagram from [Mermaid](https://mermaid.js.org) text — flowcharts,
4
+ sequence diagrams, class and state diagrams, entity relationships, Gantt
5
+ charts, pies, mind maps, timelines, git graphs and the rest — in the
6
+ workspace theme. Nodes are soft tints of the primary and the chart hues on
7
+ the card, lines are muted, text is the theme's own face and ink, and it
8
+ follows light and dark.
9
+
10
+ It opens fitted to its frame. Zoom with the pill in the corner, with
11
+ Cmd/Ctrl+scroll (or a trackpad pinch) at the pointer, with two fingers on
12
+ a phone, or by double-clicking (Shift to zoom out); drag to move. A plain
13
+ scroll still scrolls the page. The Source tab shows the text with line
14
+ numbers; the ⋯ menu copies the source or the SVG and downloads the SVG.
15
+
16
+ A mistake says which line and what Mermaid expected, and shows the lines
17
+ around it. When an earlier version drew, that drawing stays up (dimmed)
18
+ under the message, so a diagram being written live never blanks out.
19
+
20
+ It is Mermaid (MIT) underneath. Mermaid needs concrete colours, so the
21
+ block reads each token from the page at run time (`--color-card`,
22
+ `--color-primary`, `--color-chart-1…5`, `--color-muted-foreground`…),
23
+ mixes the tints, and hands them to Mermaid as its theme; when the
24
+ workspace theme or light/dark changes it reads them again and redraws.
25
+
26
+ ```jsx
27
+ import { Diagram } from "../components/blocks/diagram"; // a Makersclaw app ("./blocks/diagram" from components/)
28
+ import { Diagram } from "@/components/makersclaw/blocks/diagram"; // a shadcn project
29
+ ```
30
+
31
+ `Diagram` is a client component: render it from a `"use client"`
32
+ component. `makersclaw add diagram` adds `mermaid` (pinned, exact) to
33
+ package.json: run `npm install` after. It loads with the page (no
34
+ `import()`); the drawing happens after the first render, and until then —
35
+ on the server — the frame shows the Mermaid text.
36
+
37
+ ## Props
38
+
39
+ - `source` — the Mermaid text. Required (an empty string shows "No
40
+ diagram yet"). Change it and the diagram redraws a moment after the
41
+ last change, so it can follow someone typing.
42
+ - `title` — the frame's heading. Without it: the diagram's own `title`
43
+ line, else its kind ("Flowchart", "Sequence diagram"…).
44
+ - `label` — what a screen reader calls the diagram (default: the title
45
+ and kind). Say what it shows: "Order flow from cart to delivery".
46
+ - `height` — a fixed canvas height (px number or CSS length). Without it
47
+ the canvas is as tall as the drawing at the frame's width, between
48
+ `minHeight` (160) and `maxHeight` (560).
49
+ - `look` — `"classic"` (default), `"neo"` (Mermaid's newer, lighter
50
+ shapes) or `"handDrawn"` (a sketchy line, for early ideas).
51
+ - `toolbar` — `true` (default): the heading, Diagram/Source and the ⋯
52
+ menu. `false` leaves the canvas and its zoom pill only.
53
+ - `onRender(result)` — after each drawing: `{ ok: true, svg }` or
54
+ `{ ok: false, error: { line, message, detail } }`. Pair it with a
55
+ `code-editor` to mark the line: `diagnostics={[{ line, message }]}`.
56
+ - `className` — the frame's classes.
57
+
58
+ ### Keys
59
+
60
+ On the focused canvas: `+` / `-` zoom · `0` fit · `1` actual size ·
61
+ arrows move (Shift for bigger steps).
62
+
63
+ ## The helpers
64
+
65
+ Plain functions, on the server too.
66
+
67
+ - `diagramKind(source)` → `"Flowchart"`, `"Gantt chart"`… or null.
68
+ - `diagramTitle(source)` → its `title`, or null.
69
+ - `describeError(error, source)` → `{ line, message, detail }` for a
70
+ Mermaid error.
71
+ - `mermaidTheme(palette, { fontFamily })` → Mermaid `themeVariables`
72
+ from `{ card, foreground, primary, "chart-1"…, … }` hex colours.
73
+
74
+ ## Example
75
+
76
+ ```jsx
77
+ "use client";
78
+ import { Diagram } from "../components/blocks/diagram";
79
+
80
+ const ONBOARDING = `flowchart LR
81
+ signup([Sign-up]) --> verify{Email verified?}
82
+ verify -- yes --> workspace[Create workspace]
83
+ verify -- no --> remind[Send reminder] --> verify
84
+ workspace --> invite[Invite team] --> done([First project])`;
85
+
86
+ export function OnboardingFlow() {
87
+ return <Diagram title="Onboarding" source={ONBOARDING} label="Onboarding flow from sign-up to first project" />;
88
+ }
89
+ ```
90
+
91
+ A live editor, with the mistake marked in the text:
92
+
93
+ ```jsx
94
+ const [text, setText] = useState(ONBOARDING);
95
+ const [problem, setProblem] = useState([]);
96
+ <CodeEditor value={text} onChange={setText} diagnostics={problem} />
97
+ <Diagram source={text} onRender={(r) => setProblem(r.ok || !r.error.line ? [] : [{ line: r.error.line, message: r.error.detail ?? r.error.message }])} />
98
+ ```
99
+
100
+ ## What it will not do
101
+
102
+ - It draws; it does not edit. People change a diagram by changing its
103
+ text (put a `code-editor` beside it).
104
+ - No clicks or links inside the drawing: Mermaid runs in its strict
105
+ mode, so `click` lines and HTML in labels are dropped.
106
+ - Colours in the text (`style`, `classDef … fill:#…`) are Mermaid's,
107
+ not the theme's; leave them out and the theme paints everything.
108
+ - PNG export is not built in; Download SVG is.
@@ -0,0 +1,13 @@
1
+ {
2
+ "name": "diagram",
3
+ "title": "Diagram",
4
+ "description": "Draws Mermaid text (flowcharts, sequence, class, state, ER, Gantt, pie, mind maps, timelines, git graphs…) in the workspace theme: the tokens are read from the page at run time and handed to Mermaid, so nodes, lines, text and chart colours are the theme's and follow light/dark. Zoom and pan (buttons, Cmd/Ctrl+scroll, pinch, drag, keys), fit to view, a Source tab with line numbers, copy the source or the SVG, download SVG. A mistake shows its line and Mermaid's words, and keeps the last drawing that worked. On the server the frame shows the Mermaid text.",
5
+ "useWhen": "A screen shows a diagram written as text: a process or decision flow an agent wrote, a sequence of API calls, a data model, a project timeline, an org or system sketch in docs, a mind map. Not for a board people arrange by hand (flow-canvas), freehand drawing (sketch-canvas), or charts of numbers (chart).",
6
+ "tags": ["diagram", "mermaid", "flowchart", "sequence diagram", "er diagram", "gantt", "mind map", "timeline", "state diagram", "class diagram", "svg", "zoom", "docs", "architecture"],
7
+ "exports": ["Diagram", "diagramKind", "diagramTitle", "describeError", "mermaidTheme"],
8
+ "files": ["index.js", "diagram.jsx", "mermaid.js", "palette.js", "source.js"],
9
+ "requires": [],
10
+ "dependencies": {
11
+ "mermaid": "12.0.0"
12
+ }
13
+ }
@@ -0,0 +1,113 @@
1
+ "use client";
2
+
3
+ // Diagram four ways — the gallery's and the smoke test's surface. Not
4
+ // installed into apps.
5
+ // Flow a lead-routing flowchart, fitted to its frame.
6
+ // Sequence a checkout's calls between services.
7
+ // Plan a launch plan as a Gantt chart.
8
+ // Live type Mermaid, watch it draw; break it to see the mistake
9
+ // marked while the last good drawing stays up.
10
+ import { useState } from "react";
11
+ import { Field, TabPanel, Tabs, Textarea } from "../components/ui";
12
+ import { Diagram } from "../components/blocks/diagram";
13
+
14
+ const LEAD_ROUTING = `flowchart LR
15
+ form([Demo request]) --> enrich[Enrich company]
16
+ enrich --> size{Employees}
17
+ size -- "under 50" --> self[Self-serve trial]
18
+ size -- "50 to 500" --> ae[Account executive]
19
+ size -- "over 500" --> ent[Enterprise team]
20
+ ae --> meeting[Book intro call]
21
+ ent --> meeting
22
+ self --> nurture[Nurture emails]
23
+ meeting --> crm[(CRM)]
24
+ nurture --> crm`;
25
+
26
+ const CHECKOUT = `sequenceDiagram
27
+ autonumber
28
+ actor Buyer
29
+ participant Shop as Storefront
30
+ participant Pay as Payments
31
+ participant Stock as Inventory
32
+ Buyer->>Shop: Place order
33
+ Shop->>Stock: Reserve items
34
+ Stock-->>Shop: Reserved
35
+ Shop->>Pay: Charge card
36
+ alt card accepted
37
+ Pay-->>Shop: Paid
38
+ Shop-->>Buyer: Order confirmed
39
+ else card declined
40
+ Pay-->>Shop: Declined
41
+ Shop->>Stock: Release items
42
+ Shop-->>Buyer: Try another card
43
+ end
44
+ Note over Shop,Stock: Reservations expire after 15 minutes`;
45
+
46
+ const LAUNCH = `gantt
47
+ title Spring launch
48
+ dateFormat YYYY-MM-DD
49
+ axisFormat %b %d
50
+ section Product
51
+ Beta feedback :done, beta, 2026-03-02, 10d
52
+ Pricing page :active, price, after beta, 6d
53
+ Release :milestone, rel, 2026-03-27, 0d
54
+ section Marketing
55
+ Launch post :post, 2026-03-16, 8d
56
+ Customer webinar :crit, web, 2026-03-24, 3d
57
+ section Sales
58
+ Enablement :enable, 2026-03-12, 7d`;
59
+
60
+ const STARTER = `flowchart TD
61
+ idea[Idea] --> spec[Write a one-pager]
62
+ spec --> review{Team agrees?}
63
+ review -- yes --> build[Build it]
64
+ review -- not yet --> spec`;
65
+
66
+ function LiveDemo() {
67
+ const [text, setText] = useState(STARTER);
68
+ const [status, setStatus] = useState(null);
69
+ return (
70
+ <div className="grid gap-4 lg:grid-cols-2">
71
+ <Field
72
+ id="diagram-live-text"
73
+ label="Mermaid"
74
+ hint="Try adding a line: build --> ship[Ship it]"
75
+ error={status && !status.ok ? `${status.error.message}. ${status.error.detail ?? ""}` : undefined}
76
+ >
77
+ <Textarea id="diagram-live-text" value={text} onChange={(e) => setText(e.target.value)} rows={10} invalid={status ? !status.ok : false} className="font-mono" spellCheck={false} />
78
+ </Field>
79
+ <Diagram source={text} title="Your diagram" onRender={setStatus} minHeight={240} />
80
+ </div>
81
+ );
82
+ }
83
+
84
+ export default function DiagramDemo() {
85
+ const [tab, setTab] = useState("flow");
86
+ return (
87
+ <div className="mx-auto w-full max-w-4xl">
88
+ <Tabs
89
+ aria-label="Examples"
90
+ tabs={[
91
+ { key: "flow", label: "Flow" },
92
+ { key: "sequence", label: "Sequence" },
93
+ { key: "plan", label: "Plan" },
94
+ { key: "live", label: "Live" },
95
+ ]}
96
+ value={tab}
97
+ onChange={setTab}
98
+ />
99
+ <TabPanel tab="flow" value={tab}>
100
+ <Diagram title="Lead routing" source={LEAD_ROUTING} label="Lead routing: demo requests routed by company size to self-serve, an account executive or the enterprise team" />
101
+ </TabPanel>
102
+ <TabPanel tab="sequence" value={tab}>
103
+ <Diagram title="Checkout" source={CHECKOUT} />
104
+ </TabPanel>
105
+ <TabPanel tab="plan" value={tab}>
106
+ <Diagram source={LAUNCH} />
107
+ </TabPanel>
108
+ <TabPanel tab="live" value={tab}>
109
+ <LiveDemo />
110
+ </TabPanel>
111
+ </div>
112
+ );
113
+ }