makersclaw 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (478) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +41 -1
  3. package/THIRD-PARTY-NOTICES.md +180 -0
  4. package/package.json +15 -8
  5. package/r/annotate.json +62 -0
  6. package/r/approval-request.json +52 -0
  7. package/r/audio-player.json +74 -0
  8. package/r/auth-form.json +55 -0
  9. package/r/board.json +55 -0
  10. package/r/calendar-view.json +105 -0
  11. package/r/cart.json +62 -0
  12. package/r/chart.json +83 -0
  13. package/r/chat.json +95 -0
  14. package/r/code-editor.json +94 -0
  15. package/r/comment-box.json +64 -0
  16. package/r/contact-section.json +53 -0
  17. package/r/core.json +341 -0
  18. package/r/csv-import.json +63 -0
  19. package/r/data-table.json +69 -0
  20. package/r/diagram.json +74 -0
  21. package/r/doc-editor.json +82 -0
  22. package/r/doc-page.json +61 -0
  23. package/r/email-render.json +73 -0
  24. package/r/faq.json +50 -0
  25. package/r/file-upload.json +54 -0
  26. package/r/flow-canvas.json +93 -0
  27. package/r/footer.json +52 -0
  28. package/r/gantt.json +70 -0
  29. package/r/job-panel.json +56 -0
  30. package/r/json-editor.json +66 -0
  31. package/r/map.json +89 -0
  32. package/r/menubar.json +52 -0
  33. package/r/mind-map.json +67 -0
  34. package/r/navigation-menu.json +52 -0
  35. package/r/order-detail.json +54 -0
  36. package/r/org-chart.json +66 -0
  37. package/r/page-builder.json +105 -0
  38. package/r/payment-methods.json +51 -0
  39. package/r/pdf-document.json +79 -0
  40. package/r/pdf-viewer.json +88 -0
  41. package/r/product-detail.json +76 -0
  42. package/r/product-grid.json +65 -0
  43. package/r/record-form.json +67 -0
  44. package/r/record-notes.json +55 -0
  45. package/r/registry.json +3612 -0
  46. package/r/search-dialog.json +51 -0
  47. package/r/settings-list.json +66 -0
  48. package/r/setup-checklist.json +51 -0
  49. package/r/share-dialog.json +52 -0
  50. package/r/sidebar.json +69 -0
  51. package/r/signature-pad.json +72 -0
  52. package/r/sketch-canvas.json +99 -0
  53. package/r/spreadsheet.json +90 -0
  54. package/r/stat-cards.json +66 -0
  55. package/r/task-list.json +63 -0
  56. package/r/task-model.json +98 -0
  57. package/r/testimonials.json +52 -0
  58. package/r/transaction-list.json +53 -0
  59. package/r/whiteboard.json +66 -0
  60. package/registry/blocks/annotate/README.md +179 -0
  61. package/registry/blocks/annotate/annotate-data.js +250 -0
  62. package/registry/blocks/annotate/annotate.jsx +646 -0
  63. package/registry/blocks/annotate/block.json +10 -0
  64. package/registry/blocks/annotate/demo.jsx +135 -0
  65. package/registry/blocks/annotate/index.js +15 -0
  66. package/registry/blocks/approval-request/README.md +116 -0
  67. package/registry/blocks/approval-request/approval-request.jsx +386 -0
  68. package/registry/blocks/approval-request/block.json +10 -0
  69. package/registry/blocks/approval-request/demo.jsx +127 -0
  70. package/registry/blocks/approval-request/index.js +4 -0
  71. package/registry/blocks/audio-player/README.md +167 -0
  72. package/registry/blocks/audio-player/audio-player.jsx +623 -0
  73. package/registry/blocks/audio-player/block.json +14 -0
  74. package/registry/blocks/audio-player/colors.js +109 -0
  75. package/registry/blocks/audio-player/demo.jsx +209 -0
  76. package/registry/blocks/audio-player/index.js +6 -0
  77. package/registry/blocks/audio-player/time.js +67 -0
  78. package/registry/blocks/audio-player/wavesurfer.js +9 -0
  79. package/registry/blocks/auth-form/README.md +126 -0
  80. package/registry/blocks/auth-form/auth-form.jsx +568 -0
  81. package/registry/blocks/auth-form/block.json +10 -0
  82. package/registry/blocks/auth-form/demo.jsx +131 -0
  83. package/registry/blocks/auth-form/index.js +3 -0
  84. package/registry/blocks/board/README.md +64 -13
  85. package/registry/blocks/board/block.json +2 -2
  86. package/registry/blocks/board/board.jsx +237 -94
  87. package/registry/blocks/board/demo.jsx +103 -24
  88. package/registry/blocks/calendar-view/README.md +180 -0
  89. package/registry/blocks/calendar-view/agenda.jsx +147 -0
  90. package/registry/blocks/calendar-view/block.json +76 -0
  91. package/registry/blocks/calendar-view/calendar-model.js +442 -0
  92. package/registry/blocks/calendar-view/calendar.jsx +627 -0
  93. package/registry/blocks/calendar-view/demo.jsx +195 -0
  94. package/registry/blocks/calendar-view/draft.jsx +49 -0
  95. package/registry/blocks/calendar-view/index.js +39 -0
  96. package/registry/blocks/calendar-view/month.jsx +346 -0
  97. package/registry/blocks/calendar-view/paint.js +69 -0
  98. package/registry/blocks/calendar-view/time-grid.jsx +527 -0
  99. package/registry/blocks/calendar-view/tray.jsx +87 -0
  100. package/registry/blocks/cart/README.md +146 -0
  101. package/registry/blocks/cart/block.json +10 -0
  102. package/registry/blocks/cart/cart.jsx +597 -0
  103. package/registry/blocks/cart/demo.jsx +98 -0
  104. package/registry/blocks/cart/index.js +4 -0
  105. package/registry/blocks/cart/money.js +28 -0
  106. package/registry/blocks/chart/README.md +316 -0
  107. package/registry/blocks/chart/block.json +10 -0
  108. package/registry/blocks/chart/cartesian.jsx +642 -0
  109. package/registry/blocks/chart/core.jsx +262 -0
  110. package/registry/blocks/chart/demo.jsx +357 -0
  111. package/registry/blocks/chart/heatmap.jsx +336 -0
  112. package/registry/blocks/chart/index.js +8 -0
  113. package/registry/blocks/chart/pie.jsx +245 -0
  114. package/registry/blocks/chart/sparkline.jsx +88 -0
  115. package/registry/blocks/chat/README.md +273 -0
  116. package/registry/blocks/chat/attachment.jsx +95 -0
  117. package/registry/blocks/chat/block.json +10 -0
  118. package/registry/blocks/chat/chat.jsx +132 -0
  119. package/registry/blocks/chat/composer.jsx +364 -0
  120. package/registry/blocks/chat/demo.jsx +578 -0
  121. package/registry/blocks/chat/header.jsx +34 -0
  122. package/registry/blocks/chat/index.js +9 -0
  123. package/registry/blocks/chat/message.jsx +450 -0
  124. package/registry/blocks/chat/scroller.jsx +247 -0
  125. package/registry/blocks/chat/text.jsx +104 -0
  126. package/registry/blocks/code-editor/README.md +210 -0
  127. package/registry/blocks/code-editor/block.json +22 -0
  128. package/registry/blocks/code-editor/code-editor.jsx +534 -0
  129. package/registry/blocks/code-editor/codemirror.js +38 -0
  130. package/registry/blocks/code-editor/demo.jsx +205 -0
  131. package/registry/blocks/code-editor/index.js +8 -0
  132. package/registry/blocks/code-editor/json.js +317 -0
  133. package/registry/blocks/code-editor/sql.js +136 -0
  134. package/registry/blocks/code-editor/text.js +101 -0
  135. package/registry/blocks/code-editor/theme.js +186 -0
  136. package/registry/blocks/comment-box/README.md +123 -0
  137. package/registry/blocks/comment-box/block.json +10 -0
  138. package/registry/blocks/comment-box/comment-body.jsx +217 -0
  139. package/registry/blocks/comment-box/comment-box.jsx +198 -0
  140. package/registry/blocks/comment-box/comment-time.jsx +77 -0
  141. package/registry/blocks/comment-box/demo.jsx +141 -0
  142. package/registry/blocks/comment-box/index.js +8 -0
  143. package/registry/blocks/contact-section/README.md +152 -0
  144. package/registry/blocks/contact-section/block.json +11 -0
  145. package/registry/blocks/contact-section/contact-section.jsx +509 -0
  146. package/registry/blocks/contact-section/demo.jsx +93 -0
  147. package/registry/blocks/contact-section/index.js +4 -0
  148. package/registry/blocks/csv-import/README.md +133 -0
  149. package/registry/blocks/csv-import/block.json +13 -0
  150. package/registry/blocks/csv-import/csv-import.jsx +479 -0
  151. package/registry/blocks/csv-import/demo.jsx +106 -0
  152. package/registry/blocks/csv-import/import.js +200 -0
  153. package/registry/blocks/csv-import/index.js +7 -0
  154. package/registry/blocks/data-table/README.md +386 -0
  155. package/registry/blocks/data-table/block.json +10 -0
  156. package/registry/blocks/data-table/data-table.jsx +1164 -0
  157. package/registry/blocks/data-table/demo.jsx +588 -0
  158. package/registry/blocks/data-table/index.js +5 -0
  159. package/registry/blocks/data-table/model.js +169 -0
  160. package/registry/blocks/diagram/README.md +108 -0
  161. package/registry/blocks/diagram/block.json +13 -0
  162. package/registry/blocks/diagram/demo.jsx +113 -0
  163. package/registry/blocks/diagram/diagram.jsx +481 -0
  164. package/registry/blocks/diagram/index.js +7 -0
  165. package/registry/blocks/diagram/mermaid.js +52 -0
  166. package/registry/blocks/diagram/palette.js +313 -0
  167. package/registry/blocks/diagram/source.js +98 -0
  168. package/registry/blocks/doc-editor/README.md +215 -0
  169. package/registry/blocks/doc-editor/block.json +15 -0
  170. package/registry/blocks/doc-editor/demo.jsx +225 -0
  171. package/registry/blocks/doc-editor/doc-editor.jsx +291 -0
  172. package/registry/blocks/doc-editor/doc.js +309 -0
  173. package/registry/blocks/doc-editor/index.js +7 -0
  174. package/registry/blocks/doc-editor/schema.jsx +56 -0
  175. package/registry/blocks/doc-editor/shadcn-classes.js +110 -0
  176. package/registry/blocks/doc-editor/theme.js +82 -0
  177. package/registry/blocks/doc-page/README.md +119 -0
  178. package/registry/blocks/doc-page/autosave.js +104 -0
  179. package/registry/blocks/doc-page/block.json +10 -0
  180. package/registry/blocks/doc-page/demo.jsx +137 -0
  181. package/registry/blocks/doc-page/doc-page.jsx +276 -0
  182. package/registry/blocks/doc-page/index.js +4 -0
  183. package/registry/blocks/email-render/README.md +151 -0
  184. package/registry/blocks/email-render/block.json +14 -0
  185. package/registry/blocks/email-render/demo.jsx +153 -0
  186. package/registry/blocks/email-render/doc-email.jsx +210 -0
  187. package/registry/blocks/email-render/email.jsx +221 -0
  188. package/registry/blocks/email-render/index.js +10 -0
  189. package/registry/blocks/email-render/render.js +50 -0
  190. package/registry/blocks/email-render/theme.js +215 -0
  191. package/registry/blocks/faq/README.md +101 -0
  192. package/registry/blocks/faq/block.json +11 -0
  193. package/registry/blocks/faq/demo.jsx +89 -0
  194. package/registry/blocks/faq/faq.jsx +220 -0
  195. package/registry/blocks/faq/index.js +4 -0
  196. package/registry/blocks/file-upload/README.md +138 -0
  197. package/registry/blocks/file-upload/block.json +10 -0
  198. package/registry/blocks/file-upload/demo.jsx +204 -0
  199. package/registry/blocks/file-upload/file-upload.jsx +635 -0
  200. package/registry/blocks/file-upload/index.js +4 -0
  201. package/registry/blocks/flow-canvas/README.md +420 -0
  202. package/registry/blocks/flow-canvas/block.json +13 -0
  203. package/registry/blocks/flow-canvas/board.js +819 -0
  204. package/registry/blocks/flow-canvas/chrome.jsx +649 -0
  205. package/registry/blocks/flow-canvas/context.jsx +35 -0
  206. package/registry/blocks/flow-canvas/demo.jsx +249 -0
  207. package/registry/blocks/flow-canvas/edges.jsx +107 -0
  208. package/registry/blocks/flow-canvas/flow-canvas.jsx +1329 -0
  209. package/registry/blocks/flow-canvas/index.js +41 -0
  210. package/registry/blocks/flow-canvas/nodes.jsx +392 -0
  211. package/registry/blocks/flow-canvas/theme.js +174 -0
  212. package/registry/blocks/footer/README.md +133 -0
  213. package/registry/blocks/footer/block.json +11 -0
  214. package/registry/blocks/footer/demo.jsx +119 -0
  215. package/registry/blocks/footer/footer.jsx +406 -0
  216. package/registry/blocks/footer/index.js +4 -0
  217. package/registry/blocks/gantt/README.md +220 -0
  218. package/registry/blocks/gantt/block.json +10 -0
  219. package/registry/blocks/gantt/demo.jsx +148 -0
  220. package/registry/blocks/gantt/gantt.jsx +923 -0
  221. package/registry/blocks/gantt/index.js +7 -0
  222. package/registry/blocks/gantt/rows.jsx +468 -0
  223. package/registry/blocks/gantt/schedule.js +278 -0
  224. package/registry/blocks/job-panel/README.md +86 -2
  225. package/registry/blocks/job-panel/block.json +3 -3
  226. package/registry/blocks/job-panel/demo.jsx +230 -3
  227. package/registry/blocks/job-panel/job-panel.jsx +169 -3
  228. package/registry/blocks/json-editor/README.md +133 -0
  229. package/registry/blocks/json-editor/block.json +10 -0
  230. package/registry/blocks/json-editor/demo.jsx +92 -0
  231. package/registry/blocks/json-editor/index.js +7 -0
  232. package/registry/blocks/json-editor/json-editor.jsx +305 -0
  233. package/registry/blocks/json-editor/json-tree.jsx +393 -0
  234. package/registry/blocks/json-editor/tree.js +225 -0
  235. package/registry/blocks/map/README.md +221 -0
  236. package/registry/blocks/map/block.json +14 -0
  237. package/registry/blocks/map/demo.jsx +201 -0
  238. package/registry/blocks/map/geo.js +198 -0
  239. package/registry/blocks/map/index.js +8 -0
  240. package/registry/blocks/map/list.jsx +128 -0
  241. package/registry/blocks/map/map-view.jsx +715 -0
  242. package/registry/blocks/map/maplibre.js +30 -0
  243. package/registry/blocks/map/marks.jsx +146 -0
  244. package/registry/blocks/map/theme.js +142 -0
  245. package/registry/blocks/menubar/README.md +109 -0
  246. package/registry/blocks/menubar/block.json +10 -0
  247. package/registry/blocks/menubar/demo.jsx +128 -0
  248. package/registry/blocks/menubar/index.js +4 -0
  249. package/registry/blocks/menubar/menubar.jsx +199 -0
  250. package/registry/blocks/mind-map/README.md +206 -0
  251. package/registry/blocks/mind-map/block.json +10 -0
  252. package/registry/blocks/mind-map/demo.jsx +103 -0
  253. package/registry/blocks/mind-map/index.js +31 -0
  254. package/registry/blocks/mind-map/mind-map.jsx +1125 -0
  255. package/registry/blocks/mind-map/topic.jsx +143 -0
  256. package/registry/blocks/mind-map/tree.js +645 -0
  257. package/registry/blocks/navigation-menu/README.md +124 -0
  258. package/registry/blocks/navigation-menu/block.json +10 -0
  259. package/registry/blocks/navigation-menu/demo.jsx +84 -0
  260. package/registry/blocks/navigation-menu/index.js +4 -0
  261. package/registry/blocks/navigation-menu/navigation-menu.jsx +448 -0
  262. package/registry/blocks/order-detail/README.md +109 -0
  263. package/registry/blocks/order-detail/block.json +10 -0
  264. package/registry/blocks/order-detail/demo.jsx +88 -0
  265. package/registry/blocks/order-detail/index.js +4 -0
  266. package/registry/blocks/order-detail/order-detail.jsx +354 -0
  267. package/registry/blocks/org-chart/README.md +145 -0
  268. package/registry/blocks/org-chart/block.json +10 -0
  269. package/registry/blocks/org-chart/demo.jsx +94 -0
  270. package/registry/blocks/org-chart/index.js +7 -0
  271. package/registry/blocks/org-chart/org-chart.jsx +631 -0
  272. package/registry/blocks/org-chart/org.js +245 -0
  273. package/registry/blocks/org-chart/person.jsx +96 -0
  274. package/registry/blocks/page-builder/README.md +257 -0
  275. package/registry/blocks/page-builder/block.json +14 -0
  276. package/registry/blocks/page-builder/demo.jsx +145 -0
  277. package/registry/blocks/page-builder/grapes.js +18 -0
  278. package/registry/blocks/page-builder/index.js +11 -0
  279. package/registry/blocks/page-builder/page-builder.jsx +704 -0
  280. package/registry/blocks/page-builder/page-view.jsx +33 -0
  281. package/registry/blocks/page-builder/page.js +118 -0
  282. package/registry/blocks/page-builder/panels.jsx +588 -0
  283. package/registry/blocks/page-builder/sections.js +209 -0
  284. package/registry/blocks/page-builder/theme.js +87 -0
  285. package/registry/blocks/page-builder/thumbs.jsx +189 -0
  286. package/registry/blocks/page-builder/tokens.js +329 -0
  287. package/registry/blocks/payment-methods/README.md +104 -0
  288. package/registry/blocks/payment-methods/block.json +10 -0
  289. package/registry/blocks/payment-methods/demo.jsx +71 -0
  290. package/registry/blocks/payment-methods/index.js +4 -0
  291. package/registry/blocks/payment-methods/payment-methods.jsx +302 -0
  292. package/registry/blocks/pdf-document/README.md +213 -0
  293. package/registry/blocks/pdf-document/block.json +13 -0
  294. package/registry/blocks/pdf-document/demo.jsx +136 -0
  295. package/registry/blocks/pdf-document/index.js +33 -0
  296. package/registry/blocks/pdf-document/money.js +83 -0
  297. package/registry/blocks/pdf-document/pdf-document.jsx +144 -0
  298. package/registry/blocks/pdf-document/primitives.jsx +271 -0
  299. package/registry/blocks/pdf-document/quote.jsx +179 -0
  300. package/registry/blocks/pdf-document/theme.js +193 -0
  301. package/registry/blocks/pdf-viewer/README.md +191 -0
  302. package/registry/blocks/pdf-viewer/block.json +14 -0
  303. package/registry/blocks/pdf-viewer/demo.jsx +252 -0
  304. package/registry/blocks/pdf-viewer/helpers.js +270 -0
  305. package/registry/blocks/pdf-viewer/index.js +8 -0
  306. package/registry/blocks/pdf-viewer/notes.jsx +195 -0
  307. package/registry/blocks/pdf-viewer/pdf-viewer.jsx +1368 -0
  308. package/registry/blocks/pdf-viewer/pdfjs.js +37 -0
  309. package/registry/blocks/pdf-viewer/ssr-shim-end.js +6 -0
  310. package/registry/blocks/pdf-viewer/ssr-shim.js +44 -0
  311. package/registry/blocks/product-detail/README.md +217 -0
  312. package/registry/blocks/product-detail/block.json +10 -0
  313. package/registry/blocks/product-detail/demo.jsx +233 -0
  314. package/registry/blocks/product-detail/index.js +7 -0
  315. package/registry/blocks/product-detail/price.jsx +115 -0
  316. package/registry/blocks/product-detail/product-detail.jsx +348 -0
  317. package/registry/blocks/product-detail/product-media.jsx +102 -0
  318. package/registry/blocks/product-detail/product-options.jsx +144 -0
  319. package/registry/blocks/product-grid/README.md +162 -0
  320. package/registry/blocks/product-grid/block.json +10 -0
  321. package/registry/blocks/product-grid/demo.jsx +255 -0
  322. package/registry/blocks/product-grid/index.js +5 -0
  323. package/registry/blocks/product-grid/product-card.jsx +232 -0
  324. package/registry/blocks/product-grid/product-grid.jsx +235 -0
  325. package/registry/blocks/record-form/README.md +196 -0
  326. package/registry/blocks/record-form/block.json +10 -0
  327. package/registry/blocks/record-form/demo.jsx +525 -0
  328. package/registry/blocks/record-form/index.js +4 -0
  329. package/registry/blocks/record-form/record-fields.jsx +457 -0
  330. package/registry/blocks/record-form/record-form.jsx +415 -0
  331. package/registry/blocks/record-form/rules.js +81 -0
  332. package/registry/blocks/record-notes/README.md +139 -0
  333. package/registry/blocks/record-notes/block.json +10 -0
  334. package/registry/blocks/record-notes/demo.jsx +179 -0
  335. package/registry/blocks/record-notes/index.js +4 -0
  336. package/registry/blocks/record-notes/record-notes.jsx +266 -0
  337. package/registry/blocks/search-dialog/README.md +108 -0
  338. package/registry/blocks/search-dialog/block.json +10 -0
  339. package/registry/blocks/search-dialog/demo.jsx +116 -0
  340. package/registry/blocks/search-dialog/index.js +3 -0
  341. package/registry/blocks/search-dialog/search-dialog.jsx +235 -0
  342. package/registry/blocks/settings-list/README.md +171 -0
  343. package/registry/blocks/settings-list/block.json +10 -0
  344. package/registry/blocks/settings-list/demo.jsx +333 -0
  345. package/registry/blocks/settings-list/index.js +4 -0
  346. package/registry/blocks/settings-list/row-state.jsx +93 -0
  347. package/registry/blocks/settings-list/settings-list.jsx +349 -0
  348. package/registry/blocks/settings-list/settings-matrix.jsx +118 -0
  349. package/registry/blocks/setup-checklist/README.md +142 -0
  350. package/registry/blocks/setup-checklist/block.json +10 -0
  351. package/registry/blocks/setup-checklist/demo.jsx +159 -0
  352. package/registry/blocks/setup-checklist/index.js +4 -0
  353. package/registry/blocks/setup-checklist/setup-checklist.jsx +446 -0
  354. package/registry/blocks/share-dialog/README.md +113 -0
  355. package/registry/blocks/share-dialog/block.json +10 -0
  356. package/registry/blocks/share-dialog/demo.jsx +140 -0
  357. package/registry/blocks/share-dialog/index.js +3 -0
  358. package/registry/blocks/share-dialog/share-dialog.jsx +384 -0
  359. package/registry/blocks/sidebar/README.md +190 -0
  360. package/registry/blocks/sidebar/block.json +43 -0
  361. package/registry/blocks/sidebar/demo.jsx +577 -0
  362. package/registry/blocks/sidebar/index.js +4 -0
  363. package/registry/blocks/sidebar/sidebar-panel.jsx +149 -0
  364. package/registry/blocks/sidebar/sidebar.jsx +864 -0
  365. package/registry/blocks/signature-pad/README.md +137 -0
  366. package/registry/blocks/signature-pad/block.json +13 -0
  367. package/registry/blocks/signature-pad/colors.js +115 -0
  368. package/registry/blocks/signature-pad/demo.jsx +94 -0
  369. package/registry/blocks/signature-pad/index.js +6 -0
  370. package/registry/blocks/signature-pad/pad.js +7 -0
  371. package/registry/blocks/signature-pad/signature-pad.jsx +434 -0
  372. package/registry/blocks/signature-pad/signature.js +68 -0
  373. package/registry/blocks/sketch-canvas/README.md +280 -0
  374. package/registry/blocks/sketch-canvas/block.json +13 -0
  375. package/registry/blocks/sketch-canvas/demo.jsx +159 -0
  376. package/registry/blocks/sketch-canvas/excalidraw.js +40 -0
  377. package/registry/blocks/sketch-canvas/index.js +9 -0
  378. package/registry/blocks/sketch-canvas/palette.js +226 -0
  379. package/registry/blocks/sketch-canvas/sketch-canvas.jsx +1188 -0
  380. package/registry/blocks/sketch-canvas/sketch.js +179 -0
  381. package/registry/blocks/sketch-canvas/ssr-shim-end.js +6 -0
  382. package/registry/blocks/sketch-canvas/ssr-shim.js +45 -0
  383. package/registry/blocks/sketch-canvas/stamps.js +104 -0
  384. package/registry/blocks/sketch-canvas/theme.js +131 -0
  385. package/registry/blocks/spreadsheet/README.md +307 -0
  386. package/registry/blocks/spreadsheet/block.json +13 -0
  387. package/registry/blocks/spreadsheet/cells.jsx +455 -0
  388. package/registry/blocks/spreadsheet/chrome.jsx +325 -0
  389. package/registry/blocks/spreadsheet/demo.jsx +177 -0
  390. package/registry/blocks/spreadsheet/grid.js +387 -0
  391. package/registry/blocks/spreadsheet/index.js +34 -0
  392. package/registry/blocks/spreadsheet/spreadsheet.jsx +1732 -0
  393. package/registry/blocks/spreadsheet/types.js +473 -0
  394. package/registry/blocks/stat-cards/README.md +173 -0
  395. package/registry/blocks/stat-cards/block.json +10 -0
  396. package/registry/blocks/stat-cards/demo.jsx +257 -0
  397. package/registry/blocks/stat-cards/index.js +4 -0
  398. package/registry/blocks/stat-cards/stat-cards.jsx +307 -0
  399. package/registry/blocks/stat-cards/usage.jsx +243 -0
  400. package/registry/blocks/task-list/README.md +176 -0
  401. package/registry/blocks/task-list/block.json +10 -0
  402. package/registry/blocks/task-list/demo.jsx +134 -0
  403. package/registry/blocks/task-list/index.js +5 -0
  404. package/registry/blocks/task-list/task-list.jsx +907 -0
  405. package/registry/blocks/task-model/README.md +455 -0
  406. package/registry/blocks/task-model/block.json +167 -0
  407. package/registry/blocks/task-model/changes.js +89 -0
  408. package/registry/blocks/task-model/dates.js +371 -0
  409. package/registry/blocks/task-model/demo.jsx +215 -0
  410. package/registry/blocks/task-model/dnd.jsx +240 -0
  411. package/registry/blocks/task-model/index.js +97 -0
  412. package/registry/blocks/task-model/model.js +919 -0
  413. package/registry/blocks/task-model/parts.jsx +449 -0
  414. package/registry/blocks/task-model/toolbar.jsx +271 -0
  415. package/registry/blocks/testimonials/README.md +139 -0
  416. package/registry/blocks/testimonials/block.json +11 -0
  417. package/registry/blocks/testimonials/demo.jsx +137 -0
  418. package/registry/blocks/testimonials/index.js +4 -0
  419. package/registry/blocks/testimonials/testimonials.jsx +430 -0
  420. package/registry/blocks/transaction-list/README.md +126 -0
  421. package/registry/blocks/transaction-list/block.json +10 -0
  422. package/registry/blocks/transaction-list/demo.jsx +79 -0
  423. package/registry/blocks/transaction-list/index.js +4 -0
  424. package/registry/blocks/transaction-list/transaction-list.jsx +383 -0
  425. package/registry/blocks/whiteboard/README.md +179 -0
  426. package/registry/blocks/whiteboard/block.json +10 -0
  427. package/registry/blocks/whiteboard/demo.jsx +169 -0
  428. package/registry/blocks/whiteboard/index.js +6 -0
  429. package/registry/blocks/whiteboard/templates.js +150 -0
  430. package/registry/blocks/whiteboard/whiteboard.jsx +721 -0
  431. package/src/install.mjs +18 -0
  432. package/src/shadcn.mjs +171 -0
  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/parts/fixture.jsx +1 -1
  437. package/templates/next/files/components/parts/sample.js +15 -0
  438. package/templates/next/files/components/ui/avatar.jsx +141 -0
  439. package/templates/next/files/components/ui/breadcrumb.jsx +149 -0
  440. package/templates/next/files/components/ui/button-group.jsx +70 -0
  441. package/templates/next/files/components/ui/button.jsx +132 -12
  442. package/templates/next/files/components/ui/calendar.jsx +609 -0
  443. package/templates/next/files/components/ui/carousel.jsx +281 -0
  444. package/templates/next/files/components/ui/collapsible.jsx +208 -0
  445. package/templates/next/files/components/ui/combobox.jsx +608 -0
  446. package/templates/next/files/components/ui/command.jsx +577 -0
  447. package/templates/next/files/components/ui/context-menu.jsx +191 -0
  448. package/templates/next/files/components/ui/date-picker.jsx +360 -0
  449. package/templates/next/files/components/ui/distribution.jsx +117 -0
  450. package/templates/next/files/components/ui/feedback.jsx +143 -0
  451. package/templates/next/files/components/ui/field.jsx +115 -3
  452. package/templates/next/files/components/ui/file-input.jsx +234 -0
  453. package/templates/next/files/components/ui/icon.jsx +130 -8
  454. package/templates/next/files/components/ui/image.jsx +143 -0
  455. package/templates/next/files/components/ui/index.js +47 -2
  456. package/templates/next/files/components/ui/input-group.jsx +213 -0
  457. package/templates/next/files/components/ui/input-otp.jsx +170 -0
  458. package/templates/next/files/components/ui/item.jsx +206 -0
  459. package/templates/next/files/components/ui/menu.jsx +454 -82
  460. package/templates/next/files/components/ui/notice.jsx +126 -14
  461. package/templates/next/files/components/ui/pagination.jsx +156 -0
  462. package/templates/next/files/components/ui/popover.jsx +284 -0
  463. package/templates/next/files/components/ui/radio.jsx +193 -0
  464. package/templates/next/files/components/ui/rating.jsx +131 -0
  465. package/templates/next/files/components/ui/resizable.jsx +338 -0
  466. package/templates/next/files/components/ui/scroll-area.jsx +123 -0
  467. package/templates/next/files/components/ui/separator.jsx +119 -0
  468. package/templates/next/files/components/ui/sheet.jsx +96 -11
  469. package/templates/next/files/components/ui/slider.jsx +174 -0
  470. package/templates/next/files/components/ui/stat.jsx +574 -0
  471. package/templates/next/files/components/ui/steps.jsx +338 -0
  472. package/templates/next/files/components/ui/swatch.jsx +33 -0
  473. package/templates/next/files/components/ui/table.jsx +130 -0
  474. package/templates/next/files/components/ui/toast.jsx +440 -0
  475. package/templates/next/files/components/ui/toggle.jsx +195 -0
  476. package/templates/next/files/components/ui/tooltip.jsx +270 -0
  477. package/templates/next/files/lib/sample.js +4 -12
  478. package/templates/next/template.json +264 -8
@@ -0,0 +1,137 @@
1
+ # SignaturePad
2
+
3
+ A signature field in the workspace theme. The signer adds their full
4
+ name, then either **draws** on a paper box (smooth pen strokes that
5
+ follow speed and pressure; undo the last stroke; clear, with Undo in a
6
+ toast) or **types** — their name is set as a signature in the theme's
7
+ display face. "Sign" saves it and the field turns into the signed view:
8
+ the signature, the name and the time, with "Sign again". Nothing drawn,
9
+ no name, a dot: it says what is missing, next to where it is missing.
10
+
11
+ What comes out is a record: a PNG (transparent, cropped to the
12
+ signature, in dark ink so it reads on a document, a PDF or an email), the
13
+ typed name, how it was made and when.
14
+
15
+ **The pad is paper.** It is whichever of the theme's background and
16
+ foreground is lighter, inked with the other: on a light theme, the page
17
+ itself; on a dark theme, a light sheet with dark ink. So what the signer
18
+ sees is exactly what the PNG holds.
19
+
20
+ It is [signature_pad](https://github.com/szimek/signature_pad) (MIT)
21
+ underneath, for the drawing. The field, the modes, the states and the
22
+ record are ours, in the kit. The blocks built on this one —
23
+ `proposal-accept` — import it, never `signature_pad`.
24
+
25
+ ```jsx
26
+ import { SignaturePad, useSignaturePad } from "../components/blocks/signature-pad"; // a Makersclaw app ("./blocks/signature-pad" from components/)
27
+ import { SignaturePad, useSignaturePad } from "@/components/makersclaw/blocks/signature-pad"; // a shadcn project
28
+ ```
29
+
30
+ `SignaturePad` is a client component: render it from a `"use client"`
31
+ component. `signatureRecord` and `formatSignedAt` are plain functions.
32
+
33
+ `makersclaw add signature-pad` adds `signature_pad` (pinned, exact) to
34
+ package.json: run `npm install` after. It loads with the page (no
35
+ `import()`); the pad starts in the browser, and fades in once it has
36
+ read the theme's ink.
37
+
38
+ **It records an acceptance — it is not a certified e-signature.** There
39
+ is no identity check and no audit trail beyond what you store. Say so
40
+ where people sign (`note`), and store the record with who was signed in,
41
+ when, and what they were shown.
42
+
43
+ ## The data
44
+
45
+ The record `onSubmit` receives, `getSignature()` returns and `value`
46
+ shows:
47
+
48
+ ```js
49
+ {
50
+ png: "data:image/png;base64,…", // transparent, dark ink, cropped; a few KB
51
+ name: "Maya Chen", // the typed full name, trimmed
52
+ mode: "draw", // "draw" | "type"
53
+ signedAt: "2026-09-23T14:04:11.512Z",
54
+ }
55
+ ```
56
+
57
+ Store it as it is — one `jsonb` column holds the whole record (the PNG
58
+ is a few KB) — beside the signed-in user and the thing that was signed.
59
+
60
+ ## Props
61
+
62
+ - `onSubmit(record)` — shows the Sign button (`submitLabel`). It shows as
63
+ signed at once while you save; return `{ ok: true }`, or `{ ok: false,
64
+ error }` (or throw) and the pad comes back as it was, strokes and name
65
+ kept, with a notice that says why. Without it there is no button: read
66
+ the signature through the handle (a field inside your own form).
67
+ - `signer` — the name to start with ("Maya Chen"), default empty.
68
+ - `value` — a saved record: the field opens signed, showing it. "Sign
69
+ again" (unless `disabled`) goes back to an empty pad.
70
+ - `onChange({ mode, name, empty })` — after each stroke, undo, clear,
71
+ keystroke in the name and mode switch. No PNG (that is `toPNG()`).
72
+ - `label` — the field's label, default "Signature" ("Received by",
73
+ "Customer signature").
74
+ - `nameLabel` — the name field's label, default "Full name".
75
+ - `modes` — `["draw", "type"]` (the default), or one of them.
76
+ - `defaultMode` — the mode it opens in, default the first of `modes`.
77
+ - `requireName` — a name is needed to sign by drawing too. Default
78
+ `true`; typing always needs one.
79
+ - `submitLabel` — default "Sign" ("Accept and sign", "Approve").
80
+ - `note` — a line beside the button: what signing means.
81
+ - `disabled` — nothing can be drawn, typed or signed. Default `false`.
82
+ - `height` — the paper's height in px, default `176`.
83
+ - `bare` — no card around it (no border, background or padding), for a
84
+ field inside your own card or form. Default `false`.
85
+ - `padRef` — a ref from `useSignaturePad()` for the handle below.
86
+ - `className` — on the outer element.
87
+
88
+ ### The handle
89
+
90
+ ```jsx
91
+ const pad = useSignaturePad();
92
+ <SignaturePad padRef={pad} />;
93
+ const record = await pad.current?.getSignature(); // null when nothing is there
94
+ ```
95
+
96
+ `getSignature()` → the record or `null`; `toPNG()` → the PNG data URL
97
+ or `null`; `getName()`, `getMode()`, `isEmpty()`; `undo()`, `clear()`
98
+ (no toast); `submit()` (as the button, when `onSubmit` is given).
99
+
100
+ ### Keys and access
101
+
102
+ Drawing needs a pointer (mouse, pen, finger). **Type is the keyboard
103
+ path**: Tab to the Draw / Type switch, arrow to Type, and the name field
104
+ is the signature; Enter in it signs (when `onSubmit` is given). The hint
105
+ under the paper says so. Undo and clear are buttons with names.
106
+
107
+ ## Example
108
+
109
+ Accepting a quote in a Makersclaw app.
110
+
111
+ ```jsx
112
+ "use client";
113
+ import { updateRow } from "../lib/actions";
114
+ import { SignaturePad } from "./blocks/signature-pad";
115
+
116
+ export default function AcceptQuote({ quote, me }) {
117
+ return (
118
+ <SignaturePad
119
+ signer={me.name}
120
+ value={quote.signature ?? undefined}
121
+ submitLabel="Accept and sign"
122
+ note="Signing records that you accept this quote. It is not a certified e-signature."
123
+ onSubmit={(signature) =>
124
+ updateRow({ source: "public.quotes", id: quote.id, patch: { status: "accepted", signature, signed_by: me.email }, detail: "accepted" })
125
+ }
126
+ />
127
+ );
128
+ }
129
+ ```
130
+
131
+ ## What it will not do
132
+
133
+ - Verify who signed, send the document for signature, or keep an audit
134
+ trail: it is a field, not an e-signature service.
135
+ - Pick a colour or pen width: ink is the theme's, width follows speed.
136
+ - Upload the PNG: it returns a data URL; storing it is yours.
137
+ - Take an image of a signature to upload (use `file-upload`).
@@ -0,0 +1,13 @@
1
+ {
2
+ "name": "signature-pad",
3
+ "title": "SignaturePad",
4
+ "description": "A signature field (signature_pad) in the workspace theme: a full-name field, then draw on a paper box (smooth pen strokes, undo the last stroke, clear with Undo) or type the name set as a signature. Sign returns a record: a cropped transparent PNG in dark ink, the typed name, the mode and the time; the signed view shows it with Sign again. Works as a form field too, through a handle (toPNG, getSignature).",
5
+ "useWhen": "A screen needs someone to sign: accepting a proposal or a quote, a delivery or work-done sign-off, a waiver, a consent form, an approval on a record. The proposal-accept block is built on it. It records an acceptance with a picture of the signature — it is not a certified legal e-signature (no identity check, no audit trail beyond what you store).",
6
+ "tags": ["signature", "sign", "e-sign", "draw", "type", "accept", "approval", "consent", "waiver", "sign-off", "png", "form"],
7
+ "exports": ["SignaturePad", "useSignaturePad", "signatureRecord", "formatSignedAt"],
8
+ "files": ["index.js", "signature-pad.jsx", "pad.js", "colors.js", "signature.js"],
9
+ "requires": [],
10
+ "dependencies": {
11
+ "signature_pad": "5.1.4"
12
+ }
13
+ }
@@ -0,0 +1,115 @@
1
+ // The pad's colours are the workspace's tokens.
2
+ //
3
+ // signature_pad draws on a <canvas>, and a canvas needs a concrete colour —
4
+ // it cannot read var(--color-foreground). So the ink is read from the CSS
5
+ // variables in effect where the pad sits, at run time, and read again when
6
+ // the theme or the scheme changes (the pad watches for that). No colour
7
+ // value is written in this file: every one comes from the page. Same
8
+ // method as sketch-canvas's palette.js and audio-player's colors.js.
9
+ //
10
+ // The pad is PAPER: whichever of the theme's background and foreground is
11
+ // lighter, with the other one as ink. On a light theme that is the page
12
+ // itself; on a dark theme it is a light sheet with dark ink. Either way
13
+ // what you see is what the PNG holds — dark ink on a transparent ground,
14
+ // which reads on a document, a PDF, an email.
15
+ //
16
+ // Everything but readTokens() and watchTheme() is a plain function, so it
17
+ // runs in node.
18
+
19
+ const byte = (n) => Math.max(0, Math.min(255, Math.round(n))).toString(16).padStart(2, "0");
20
+
21
+ /** [r, g, b, a(0-255)] → "#rrggbb", or "#rrggbbaa" when not opaque. */
22
+ export function toHex([r, g, b, a = 255]) {
23
+ return "#" + byte(r) + byte(g) + byte(b) + (a >= 255 ? "" : byte(a));
24
+ }
25
+
26
+ /** Relative luminance (WCAG) of [r, g, b], 0 (black) to 1 (white). */
27
+ export function luminance([r, g, b]) {
28
+ const lin = (c) => {
29
+ const s = c / 255;
30
+ return s <= 0.04045 ? s / 12.92 : Math.pow((s + 0.055) / 1.055, 2.4);
31
+ };
32
+ return 0.2126 * lin(r) + 0.7152 * lin(g) + 0.0722 * lin(b);
33
+ }
34
+
35
+ /** Which token is the paper and which the ink, from the two read off the
36
+ * page. Unknown (the server, a missing slot): the page is the paper. */
37
+ export function paperAndInk(slots) {
38
+ const bg = slots?.background;
39
+ const fg = slots?.foreground;
40
+ if (!bg || !fg) return { paper: "background", ink: "foreground", inkColour: fg ? toHex(fg) : null };
41
+ return luminance(fg) > luminance(bg) ? { paper: "foreground", ink: "background", inkColour: toHex(bg) } : { paper: "background", ink: "foreground", inkColour: toHex(fg) };
42
+ }
43
+
44
+ // ---- the browser half -------------------------------------------------------
45
+
46
+ /** Read `slots` (token names: "primary", "muted-foreground"…) from the CSS
47
+ * variables in effect at `root`, as [r, g, b, a] bytes. A probe takes
48
+ * `color: var(--color-<slot>)`; the browser resolves var(), color-mix()
49
+ * and light-dark() into its computed colour, and a 1×1 canvas turns that
50
+ * into bytes whatever syntax it came back in. */
51
+ export function readTokens(root, slots) {
52
+ const out = {};
53
+ if (typeof document === "undefined" || !root) return out;
54
+ const probe = document.createElement("span");
55
+ probe.setAttribute("aria-hidden", "true");
56
+ probe.style.position = "absolute";
57
+ probe.style.visibility = "hidden";
58
+ probe.style.pointerEvents = "none";
59
+ root.appendChild(probe);
60
+ const canvas = document.createElement("canvas");
61
+ canvas.width = 1;
62
+ canvas.height = 1;
63
+ const ctx = canvas.getContext("2d", { willReadFrequently: true });
64
+ try {
65
+ for (const slot of slots) {
66
+ probe.style.color = "";
67
+ probe.style.color = `var(--color-${slot})`;
68
+ const computed = getComputedStyle(probe).color;
69
+ if (!computed || !ctx) continue;
70
+ ctx.clearRect(0, 0, 1, 1);
71
+ ctx.fillStyle = "transparent";
72
+ ctx.fillStyle = computed;
73
+ ctx.fillRect(0, 0, 1, 1);
74
+ const [r, g, b, a] = ctx.getImageData(0, 0, 1, 1).data;
75
+ if (a === 0) continue;
76
+ out[slot] = [r, g, b, a];
77
+ }
78
+ } finally {
79
+ probe.remove();
80
+ }
81
+ return out;
82
+ }
83
+
84
+ /** Call `fn` (soon, once) whenever something that sets the tokens may have
85
+ * changed: a data-theme / class / style on <html> or the nearest themed
86
+ * ancestor, a stylesheet added to <head>, the OS scheme. Returns the
87
+ * cleanup. */
88
+ export function watchTheme(root, fn) {
89
+ if (typeof document === "undefined") return () => {};
90
+ let t = 0;
91
+ const soon = () => {
92
+ clearTimeout(t);
93
+ t = setTimeout(fn, 30);
94
+ };
95
+ const obs = new MutationObserver((records) => {
96
+ for (const r of records) for (const n of r.addedNodes ?? []) if (n.tagName === "LINK") n.addEventListener("load", soon, { once: true });
97
+ soon();
98
+ });
99
+ const attrs = { attributes: true, attributeFilter: ["data-theme", "class", "style"] };
100
+ obs.observe(document.documentElement, attrs);
101
+ obs.observe(document.head, { childList: true });
102
+ const scoped = root?.closest?.("[data-theme]");
103
+ if (scoped && scoped !== document.documentElement) {
104
+ obs.observe(scoped, attrs);
105
+ obs.observe(scoped, { childList: true });
106
+ }
107
+ const mq = typeof matchMedia !== "undefined" ? matchMedia("(prefers-color-scheme: dark)") : null;
108
+ mq?.addEventListener("change", soon);
109
+ soon();
110
+ return () => {
111
+ clearTimeout(t);
112
+ obs.disconnect();
113
+ mq?.removeEventListener("change", soon);
114
+ };
115
+ }
@@ -0,0 +1,94 @@
1
+ "use client";
2
+
3
+ // SignaturePad two ways — the gallery's and the smoke test's surface. Not
4
+ // installed into apps.
5
+ // Accept a proposal the block with its own Sign button (onSubmit); a
6
+ // switch makes the save fail; what was saved is
7
+ // listed under it.
8
+ // Delivery sign-off the block as a field in a larger form: no Sign
9
+ // button, the form's own button reads the signature
10
+ // through the handle.
11
+ import { useState } from "react";
12
+ import { Button, Card, Notice, Switch } from "../components/ui";
13
+ import { SignaturePad, formatSignedAt, useSignaturePad } from "../components/blocks/signature-pad";
14
+
15
+ const wait = (ms) => new Promise((r) => setTimeout(r, ms));
16
+ const kb = (dataUrl) => `${Math.max(1, Math.round((dataUrl.length * 3) / 4 / 1024))} KB`;
17
+
18
+ function AcceptProposal() {
19
+ const [fail, setFail] = useState(false);
20
+ const [saved, setSaved] = useState(null);
21
+
22
+ async function accept(signature) {
23
+ await wait(700);
24
+ if (fail) return { ok: false, error: "The server didn't answer. Your signature is still here — try again." };
25
+ setSaved(signature);
26
+ return { ok: true };
27
+ }
28
+
29
+ return (
30
+ <div className="grid content-start gap-3">
31
+ <Card>
32
+ <p className="text-xs text-muted-foreground">Proposal · Q-1042</p>
33
+ <p className="mt-1 text-sm font-medium">Northwind Logistics — annual plan, 40 seats</p>
34
+ <p className="mt-1 text-sm text-muted-foreground tabular-nums">18,400 USD a year · starts Oct 1</p>
35
+ </Card>
36
+ <SignaturePad
37
+ signer="Maya Chen"
38
+ onSubmit={accept}
39
+ submitLabel="Accept and sign"
40
+ note="Signing records that you accept this proposal. It is an acceptance record, not a certified e-signature."
41
+ />
42
+ <Switch id="sign-fail" checked={fail} onChange={(e) => setFail(e.target.checked)} label="Make the save fail" />
43
+ {saved ? (
44
+ <p className="text-xs text-muted-foreground">
45
+ Saved: {saved.name}, {saved.mode === "type" ? "typed" : "drawn"}, {formatSignedAt(saved.signedAt)}, a {kb(saved.png)} PNG.
46
+ </p>
47
+ ) : null}
48
+ </div>
49
+ );
50
+ }
51
+
52
+ function DeliverySignOff() {
53
+ const pad = useSignaturePad();
54
+ const [result, setResult] = useState(null);
55
+ const [busy, setBusy] = useState(false);
56
+
57
+ async function confirm() {
58
+ setBusy(true);
59
+ const signature = await pad.current?.getSignature();
60
+ setBusy(false);
61
+ if (!signature || !signature.name) {
62
+ setResult({ ok: false, text: "Ask the recipient to add their name and sign before you confirm." });
63
+ return;
64
+ }
65
+ setResult({ ok: true, text: `Delivery confirmed — received by ${signature.name}.` });
66
+ }
67
+
68
+ return (
69
+ <Card className="grid content-start gap-4 sm:p-5">
70
+ <div>
71
+ <p className="text-sm font-medium">Delivery DL-2291 · 3 pallets</p>
72
+ <p className="mt-0.5 text-xs text-muted-foreground">Halden & Co, Unit 4, Riverside Park</p>
73
+ </div>
74
+ <SignaturePad label="Received by" padRef={pad} defaultMode="type" height={144} bare />
75
+ {result ? (
76
+ <Notice tone={result.ok ? "success" : "warning"} onDismiss={() => setResult(null)}>
77
+ {result.text}
78
+ </Notice>
79
+ ) : null}
80
+ <Button variant="primary" icon="check" loading={busy} onClick={confirm} className="w-full sm:w-auto sm:justify-self-end">
81
+ Confirm delivery
82
+ </Button>
83
+ </Card>
84
+ );
85
+ }
86
+
87
+ export default function SignaturePadDemo() {
88
+ return (
89
+ <div className="grid gap-6 lg:grid-cols-2">
90
+ <AcceptProposal />
91
+ <DeliverySignOff />
92
+ </div>
93
+ );
94
+ }
@@ -0,0 +1,6 @@
1
+ // The SignaturePad block — `makersclaw add signature-pad`. Fixed: compose
2
+ // it through its props (README.md beside this file). The blocks built on
3
+ // this one (proposal-accept…) import it, never signature_pad directly.
4
+ // The helpers are plain functions and work on the server.
5
+ export { SignaturePad, useSignaturePad } from "./signature-pad";
6
+ export { signatureRecord, formatSignedAt } from "./signature";
@@ -0,0 +1,7 @@
1
+ // The one door to signature_pad (MIT). Every file in this block reaches
2
+ // the library through here, and the blocks built on this one
3
+ // (proposal-accept…) reach it through SignaturePad — never the package.
4
+ //
5
+ // No shim is needed: the package loads on the server without touching
6
+ // `window` (checked in node); the pad is only created in an effect.
7
+ export { default as SignaturePadEngine } from "signature_pad";