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,179 @@
1
+ // The sketch as data: what SketchCanvas takes and gives back, and the
2
+ // helpers that read it. Plain functions of plain JSON — they never import
3
+ // Excalidraw, so they run anywhere, the server included.
4
+ //
5
+ // A sketch is
6
+ // { type: "sketch", version: 1, elements: [...], files: {...}, appState: {...} }
7
+ // where `elements` are Excalidraw's own element objects (non-deleted),
8
+ // `files` holds the images they show (id → { id, mimeType, dataURL,
9
+ // created }), and `appState` keeps only what a sketch should remember
10
+ // ({ gridModeEnabled }). The locked background image (the `background`
11
+ // prop) is never in it: the block lays that from the prop.
12
+
13
+ export const SKETCH_VERSION = 1;
14
+
15
+ /** Excalidraw's system-font family ("Helvetica" in its list): drawn with
16
+ * the device's own sans (Helvetica, Arial…), never fetched. Every text the
17
+ * block makes uses it; see README "Fonts". */
18
+ export const SYSTEM_FONT = 2;
19
+
20
+ /** The role the background image carries in customData. */
21
+ export const BACKGROUND_ROLE = "background";
22
+
23
+ export function emptySketch() {
24
+ return { type: "sketch", version: SKETCH_VERSION, elements: [], files: {}, appState: {} };
25
+ }
26
+
27
+ /** Anything a caller may hand us → a sketch: a sketch, a bare element
28
+ * array, Excalidraw's own { elements, files, appState } export, or
29
+ * nothing. */
30
+ export function toSketch(value) {
31
+ if (!value) return emptySketch();
32
+ if (Array.isArray(value)) return { ...emptySketch(), elements: value };
33
+ if (typeof value !== "object") return emptySketch();
34
+ return {
35
+ type: "sketch",
36
+ version: SKETCH_VERSION,
37
+ elements: Array.isArray(value.elements) ? value.elements : [],
38
+ files: value.files && typeof value.files === "object" ? value.files : {},
39
+ appState: value.appState && typeof value.appState === "object" ? pickAppState(value.appState) : {},
40
+ };
41
+ }
42
+
43
+ /** The part of Excalidraw's appState a sketch keeps. */
44
+ export function pickAppState(appState) {
45
+ const out = {};
46
+ if (typeof appState?.gridModeEnabled === "boolean") out.gridModeEnabled = appState.gridModeEnabled;
47
+ return out;
48
+ }
49
+
50
+ export const isBackground = (el) => el?.customData?.role === BACKGROUND_ROLE;
51
+
52
+ /** The elements a reader cares about: not deleted, not the background. */
53
+ export function liveElements(sketch) {
54
+ return toSketch(sketch).elements.filter((el) => el && !el.isDeleted && !isBackground(el));
55
+ }
56
+
57
+ /** Nothing drawn (the background alone counts as empty). */
58
+ export function isSketchEmpty(sketch) {
59
+ return liveElements(sketch).length === 0;
60
+ }
61
+
62
+ /** The files the given elements show, and no others. */
63
+ export function filesFor(elements, files) {
64
+ const out = {};
65
+ for (const el of elements ?? []) {
66
+ if (el?.type === "image" && el.fileId && files?.[el.fileId]) out[el.fileId] = files[el.fileId];
67
+ }
68
+ return out;
69
+ }
70
+
71
+ const centre = (b) => ({ x: b.x + b.width / 2, y: b.y + b.height / 2 });
72
+ const union = (boxes) => {
73
+ const x1 = Math.min(...boxes.map((b) => b.x));
74
+ const y1 = Math.min(...boxes.map((b) => b.y));
75
+ const x2 = Math.max(...boxes.map((b) => b.x + b.width));
76
+ const y2 = Math.max(...boxes.map((b) => b.y + b.height));
77
+ return { x: x1, y: y1, width: x2 - x1, height: y2 - y1 };
78
+ };
79
+ const boxOf = (el) => ({ x: Math.min(el.x, el.x + el.width), y: Math.min(el.y, el.y + el.height), width: Math.abs(el.width), height: Math.abs(el.height) });
80
+ const textOf = (el) => String(el.originalText ?? el.text ?? "").replace(/\s+/g, " ").trim();
81
+
82
+ /** Reading order: rows top to bottom (items whose tops are within `band`
83
+ * px share a row), then left to right. */
84
+ export function readingOrder(items, band = 16) {
85
+ const sorted = [...items].sort((a, b) => a.y - b.y || a.x - b.x);
86
+ const rows = [];
87
+ for (const it of sorted) {
88
+ const row = rows.at(-1);
89
+ if (row && Math.abs(it.y - row[0].y) <= band) row.push(it);
90
+ else rows.push([it]);
91
+ }
92
+ return rows.flatMap((row) => row.sort((a, b) => a.x - b.x));
93
+ }
94
+
95
+ /**
96
+ * The sketch as a flat list of what it says, in reading order:
97
+ * { kind: "frame", id, name, x, y, width, height }
98
+ * { kind: "stamp", id, stamp: "button", text, frame, x, y, width, height }
99
+ * { kind: "text", id, text, container: "rectangle" | null, frame, x, y, width, height }
100
+ * { kind: "image", id, frame, x, y, width, height }
101
+ * A stamp is one item however many elements it is made of; its text is
102
+ * the words inside it. A text bound to a shape takes the shape's box.
103
+ * Shapes and lines with no words are left out; `frame` is the id of the
104
+ * frame the item sits in (or null). Frames come first, then the rest.
105
+ */
106
+ export function sketchItems(sketch) {
107
+ const els = liveElements(sketch);
108
+ const byId = new Map(els.map((el) => [el.id, el]));
109
+ const frameOf = (el) => el.frameId ?? (el.containerId ? byId.get(el.containerId)?.frameId : null) ?? null;
110
+ const stamps = new Map();
111
+ const loose = [];
112
+ for (const el of els) {
113
+ const cd = el.customData ?? {};
114
+ const container = el.containerId ? byId.get(el.containerId) : null;
115
+ const stampId = cd.stampId ?? container?.customData?.stampId;
116
+ if (stampId) {
117
+ const s = stamps.get(stampId) ?? { id: stampId, stamp: cd.stamp ?? container?.customData?.stamp ?? "stamp", els: [] };
118
+ s.els.push(el);
119
+ stamps.set(stampId, s);
120
+ continue;
121
+ }
122
+ if (el.type === "frame" || el.type === "magicframe") {
123
+ loose.push({ kind: "frame", id: el.id, name: String(el.name ?? "").trim() || "Frame", ...boxOf(el) });
124
+ } else if (el.type === "text") {
125
+ const t = textOf(el);
126
+ if (!t) continue;
127
+ const box = container ? boxOf(container) : boxOf(el);
128
+ loose.push({ kind: "text", id: el.id, text: t, container: container?.type ?? null, frame: frameOf(el), ...box });
129
+ } else if (el.type === "image") {
130
+ loose.push({ kind: "image", id: el.id, frame: frameOf(el), ...boxOf(el) });
131
+ }
132
+ }
133
+ const stampItems = [...stamps.values()].map((s) => {
134
+ const box = union(s.els.map(boxOf));
135
+ const words = readingOrder(s.els.filter((e) => e.type === "text").map((e) => ({ ...boxOf(e), t: textOf(e) })))
136
+ .map((w) => w.t)
137
+ .filter(Boolean);
138
+ return { kind: "stamp", id: s.id, stamp: s.stamp, text: words.join(" "), frame: s.els.map(frameOf).find(Boolean) ?? null, ...box };
139
+ });
140
+ const frames = readingOrder(loose.filter((i) => i.kind === "frame"));
141
+ const rest = readingOrder([...loose.filter((i) => i.kind !== "frame"), ...stampItems]);
142
+ // An item inside a frame's box with no frameId (dropped in before the
143
+ // frame was drawn round it) still belongs to it.
144
+ for (const it of rest) {
145
+ if (it.frame) continue;
146
+ const c = centre(it);
147
+ const f = frames.find((fr) => c.x >= fr.x && c.x <= fr.x + fr.width && c.y >= fr.y && c.y <= fr.y + fr.height);
148
+ it.frame = f ? f.id : null;
149
+ }
150
+ return [...frames, ...rest];
151
+ }
152
+
153
+ /**
154
+ * The sketch's words as plain text, for an agent or a screen reader: one
155
+ * line per item in reading order, grouped under "# <frame name>" for each
156
+ * frame; a stamp reads "[button] Sign up", an image "[image]". Items
157
+ * outside every frame come last (under "# Outside frames" when there are
158
+ * frames). An empty sketch gives "".
159
+ *
160
+ * stamps true (default): name the stamp kind in brackets
161
+ */
162
+ export function sketchToText(sketch, { stamps = true } = {}) {
163
+ const items = sketchItems(sketch);
164
+ const frames = items.filter((i) => i.kind === "frame");
165
+ const rest = items.filter((i) => i.kind !== "frame");
166
+ const line = (it) => {
167
+ if (it.kind === "stamp") return stamps ? `[${it.stamp}]${it.text ? ` ${it.text}` : ""}` : it.text;
168
+ if (it.kind === "image") return stamps ? "[image]" : "";
169
+ return it.text;
170
+ };
171
+ const lines = [];
172
+ for (const f of frames) {
173
+ const inside = rest.filter((i) => i.frame === f.id).map(line).filter(Boolean);
174
+ lines.push(`# ${f.name}`, ...inside, "");
175
+ }
176
+ const outside = rest.filter((i) => !i.frame || !frames.some((f) => f.id === i.frame)).map(line).filter(Boolean);
177
+ if (outside.length) lines.push(...(frames.length ? ["# Outside frames"] : []), ...outside);
178
+ return lines.join("\n").trim();
179
+ }
@@ -0,0 +1,6 @@
1
+ // Server only: removes the stand-ins ssr-shim.js laid, right after
2
+ // Excalidraw's modules have loaded (see ssr-shim.js). Does nothing in the
3
+ // browser.
4
+ import { removeShim } from "./ssr-shim";
5
+
6
+ removeShim();
@@ -0,0 +1,45 @@
1
+ // Server only: a stand-in for the few browser globals Excalidraw's modules
2
+ // read WHILE THEY LOAD. See excalidraw.js for why this exists.
3
+ //
4
+ // Excalidraw 0.18 runs browser code at module level (window.location,
5
+ // devicePixelRatio, document.createElement("img"), an Element.prototype
6
+ // polyfill), so evaluating it on the server throws "window is not defined"
7
+ // and the page fails to render — even though the component itself only
8
+ // ever renders in the browser (the mount guard). The app is one static
9
+ // bundle (no import(), no next/dynamic), so the module cannot be kept off
10
+ // the server; instead it is let load against these stand-ins.
11
+ //
12
+ // The stand-ins live only for that load: excalidraw.js imports this file,
13
+ // then @excalidraw/excalidraw, then ssr-shim-end.js, which removes them —
14
+ // module evaluation is synchronous, so no other code runs in between. If
15
+ // the load throws, the microtask below removes them anyway, so a global
16
+ // `window` can never outlive it and confuse the rest of the server. In
17
+ // the browser `window` exists and this file does nothing.
18
+ const G = globalThis;
19
+ const SET = [];
20
+
21
+ function stand(name, value) {
22
+ if (typeof G[name] !== "undefined") return;
23
+ G[name] = value;
24
+ SET.push(name);
25
+ }
26
+
27
+ if (typeof window === "undefined") {
28
+ const element = () => ({ style: {}, dataset: {}, setAttribute() {}, appendChild() {}, getContext: () => ({}) });
29
+ stand("window", { location: { origin: "", href: "" }, devicePixelRatio: 1 });
30
+ stand("document", { createElement: element, documentElement: element(), head: element(), body: element() });
31
+ stand("devicePixelRatio", 1);
32
+ stand("Element", function Element() {});
33
+ stand("navigator", { platform: "", userAgent: "" });
34
+ G.__sketchCanvasShim = SET;
35
+ queueMicrotask(() => {
36
+ if (G.__sketchCanvasShim === SET) removeShim();
37
+ });
38
+ }
39
+
40
+ export function removeShim() {
41
+ const set = G.__sketchCanvasShim;
42
+ if (!set) return;
43
+ for (const name of set) delete G[name];
44
+ delete G.__sketchCanvasShim;
45
+ }
@@ -0,0 +1,104 @@
1
+ // Stamps: tools that place a small ready-made drawing with one click. A
2
+ // stamp is { id, label, icon, create() }, where create() returns Excalidraw
3
+ // element skeletons (the input of its convertToExcalidrawElements) laid
4
+ // out from (0, 0). Colours are TOKEN names ("foreground", "primary:soft"),
5
+ // resolved when the stamp lands; text is the system font. SketchCanvas
6
+ // groups what a stamp places, so it moves as one, and marks every element
7
+ // with customData { stamp: id, stampId } — sketchToText reads a stamp as
8
+ // "[button] Sign up".
9
+ //
10
+ // WIREFRAME_STAMPS are the UI pieces a screen sketch is made of: button,
11
+ // input, card, nav bar, table and image placeholder.
12
+ import { SYSTEM_FONT } from "./sketch";
13
+
14
+ const T = (text, x, y, more = {}) => ({ type: "text", x, y, text, fontSize: 16, fontFamily: SYSTEM_FONT, strokeColor: "foreground", ...more });
15
+ const rect = (x, y, width, height, more = {}) => ({
16
+ type: "rectangle",
17
+ x,
18
+ y,
19
+ width,
20
+ height,
21
+ strokeColor: "foreground",
22
+ backgroundColor: "none",
23
+ fillStyle: "solid",
24
+ roundness: { type: 3 },
25
+ ...more,
26
+ });
27
+ const line = (x, y, dx, dy, more = {}) => ({
28
+ type: "line",
29
+ x,
30
+ y,
31
+ width: Math.abs(dx),
32
+ height: Math.abs(dy),
33
+ points: [
34
+ [0, 0],
35
+ [dx, dy],
36
+ ],
37
+ strokeColor: "muted-foreground",
38
+ ...more,
39
+ });
40
+ const label = (text, more = {}) => ({ text, fontSize: 16, fontFamily: SYSTEM_FONT, ...more });
41
+
42
+ export const WIREFRAME_STAMPS = [
43
+ {
44
+ id: "button",
45
+ label: "Button",
46
+ icon: "zap",
47
+ create: () => [rect(0, 0, 132, 44, { backgroundColor: "primary:soft", label: label("Button") })],
48
+ },
49
+ {
50
+ id: "input",
51
+ label: "Input",
52
+ icon: "type",
53
+ create: () => [
54
+ T("Label", 0, 0, { fontSize: 14, strokeColor: "muted-foreground" }),
55
+ rect(0, 24, 260, 44, { strokeColor: "muted-foreground", label: label("Placeholder", { textAlign: "left", strokeColor: "muted-foreground" }) }),
56
+ ],
57
+ },
58
+ {
59
+ id: "card",
60
+ label: "Card",
61
+ icon: "file",
62
+ create: () => [
63
+ rect(0, 0, 280, 190),
64
+ T("Card title", 20, 18, { fontSize: 20 }),
65
+ line(20, 64, 220, 0),
66
+ line(20, 90, 170, 0),
67
+ rect(20, 128, 104, 40, { backgroundColor: "primary:soft", label: label("Action") }),
68
+ ],
69
+ },
70
+ {
71
+ id: "nav",
72
+ label: "Nav bar",
73
+ icon: "menu",
74
+ create: () => [
75
+ rect(0, 0, 680, 60, { backgroundColor: "muted", roundness: null }),
76
+ T("Logo", 24, 17, { fontSize: 20 }),
77
+ T("Home", 400, 20),
78
+ T("Pricing", 478, 20),
79
+ T("About", 568, 20),
80
+ ],
81
+ },
82
+ {
83
+ id: "table",
84
+ label: "Table",
85
+ icon: "grid",
86
+ create: () => [
87
+ rect(0, 0, 450, 176, { roundness: null }),
88
+ rect(0, 0, 450, 44, { backgroundColor: "muted", roundness: null }),
89
+ T("Name", 14, 12),
90
+ T("Status", 164, 12),
91
+ T("Amount", 314, 12),
92
+ line(0, 88, 450, 0),
93
+ line(0, 132, 450, 0),
94
+ line(150, 0, 0, 176),
95
+ line(300, 0, 0, 176),
96
+ ],
97
+ },
98
+ {
99
+ id: "image",
100
+ label: "Image",
101
+ icon: "image",
102
+ create: () => [rect(0, 0, 240, 160, { strokeColor: "muted-foreground", roundness: null }), line(0, 0, 240, 160), line(0, 160, 240, -160)],
103
+ },
104
+ ];
@@ -0,0 +1,131 @@
1
+ // Excalidraw in the workspace theme, and trimmed — the one place its look
2
+ // is mapped. Like doc-editor's theme.js for BlockNote.
3
+ //
4
+ // Excalidraw paints its chrome (menus, dialogs, the context menu, the
5
+ // text editor) from CSS variables its stylesheet sets on `.excalidraw`
6
+ // with its own violet and greys. Each one is pointed at a token here, as
7
+ // Tailwind arbitrary properties aimed at that element from our wrapper.
8
+ // Every class ends in `!`: Excalidraw's stylesheet is unlayered, and an
9
+ // unlayered rule beats any Tailwind utility (those live in @layer
10
+ // utilities) whatever its specificity; `!important` inside a layer is the
11
+ // one thing that outranks it.
12
+ //
13
+ // Two of these carry more weight than the rest:
14
+ // --theme-filter: none Excalidraw's dark mode draws the canvas light
15
+ // and flips it with invert(93%) hue-rotate(180deg).
16
+ // Our colours are already the dark scheme's (they
17
+ // are resolved from the tokens in effect), so the
18
+ // filter would invert them back. Off.
19
+ // --color-selection read by Excalidraw's renderer for the selection
20
+ // box; the component sets --sketch-selection to
21
+ // the resolved primary (a canvas needs a concrete
22
+ // colour, not a var()).
23
+ //
24
+ // Name clash: Excalidraw ALSO names its own variables --color-primary and
25
+ // --color-muted, on `.excalidraw`, so var(--color-primary) read there is
26
+ // its violet (and setting it to itself is a cycle). ROOT_VARS copies our
27
+ // two onto the wrapper as --sketch-primary / --sketch-muted, and the
28
+ // mapping reads those. The other tokens it uses have no Excalidraw twin.
29
+ //
30
+ // The TRIM list hides the parts of Excalidraw's UI the block replaces
31
+ // or does not want: its tool bar (the rail is ours), its properties panel
32
+ // (the context toolbar is ours, with the theme's palette), its main menu,
33
+ // its library / share / collaboration corner, its zoom and undo footer
34
+ // (ours), its mobile bars, and every sidebar (library, search). The hint
35
+ // line under the old tool bar stays ("Click and drag…").
36
+ export const ROOT_VARS = "[--sketch-primary:var(--color-primary)] [--sketch-muted:var(--color-muted)]";
37
+
38
+ export const THEME = [
39
+ // surfaces and text
40
+ "[&_.excalidraw]:[--theme-filter:none]!",
41
+ "[&_.excalidraw]:[--color-selection:var(--sketch-selection)]!",
42
+ "[&_.excalidraw]:[--ui-font:var(--theme-font-sans)]!",
43
+ "[&_.excalidraw]:[--default-bg-color:var(--color-background)]!",
44
+ "[&_.excalidraw]:[--island-bg-color:var(--color-popover)]!",
45
+ "[&_.excalidraw]:[--popup-bg-color:var(--color-popover)]!",
46
+ "[&_.excalidraw]:[--popup-secondary-bg-color:var(--sketch-muted)]!",
47
+ "[&_.excalidraw]:[--popup-text-color:var(--color-popover-foreground)]!",
48
+ "[&_.excalidraw]:[--popup-text-inverted-color:var(--color-background)]!",
49
+ "[&_.excalidraw]:[--sidebar-bg-color:var(--color-popover)]!",
50
+ "[&_.excalidraw]:[--sidebar-border-color:var(--color-border)]!",
51
+ "[&_.excalidraw]:[--text-primary-color:var(--color-foreground)]!",
52
+ "[&_.excalidraw]:[--icon-fill-color:var(--color-foreground)]!",
53
+ "[&_.excalidraw]:[--keybinding-color:var(--color-muted-foreground)]!",
54
+ "[&_.excalidraw]:[--color-on-surface:var(--color-foreground)]!",
55
+ "[&_.excalidraw]:[--color-surface-lowest:var(--color-background)]!",
56
+ "[&_.excalidraw]:[--color-surface-low:var(--sketch-muted)]!",
57
+ "[&_.excalidraw]:[--color-surface-mid:var(--sketch-muted)]!",
58
+ "[&_.excalidraw]:[--color-surface-high:var(--color-accent)]!",
59
+ "[&_.excalidraw]:[--color-surface-primary-container:var(--color-accent)]!",
60
+ "[&_.excalidraw]:[--color-on-primary-container:var(--color-accent-foreground)]!",
61
+ "[&_.excalidraw]:[--color-muted:var(--sketch-muted)]!",
62
+ "[&_.excalidraw]:[--color-muted-darker:var(--color-muted-foreground)]!",
63
+ "[&_.excalidraw]:[--color-muted-darkest:var(--color-foreground)]!",
64
+ "[&_.excalidraw]:[--color-disabled:var(--color-muted-foreground)]!",
65
+ // the brand violet → primary
66
+ "[&_.excalidraw]:[--color-primary:var(--sketch-primary)]!",
67
+ "[&_.excalidraw]:[--color-primary-darker:var(--sketch-primary)]!",
68
+ "[&_.excalidraw]:[--color-primary-darkest:var(--sketch-primary)]!",
69
+ "[&_.excalidraw]:[--color-primary-hover:var(--sketch-primary)]!",
70
+ "[&_.excalidraw]:[--color-primary-light:var(--color-accent)]!",
71
+ "[&_.excalidraw]:[--color-primary-light-darker:var(--color-accent)]!",
72
+ "[&_.excalidraw]:[--color-brand-hover:var(--sketch-primary)]!",
73
+ "[&_.excalidraw]:[--color-brand-active:var(--sketch-primary)]!",
74
+ "[&_.excalidraw]:[--color-promo:var(--sketch-primary)]!",
75
+ "[&_.excalidraw]:[--link-color:var(--sketch-primary)]!",
76
+ "[&_.excalidraw]:[--select-highlight-color:var(--sketch-primary)]!",
77
+ "[&_.excalidraw]:[--focus-highlight-color:var(--color-ring)]!",
78
+ // lines, inputs, buttons
79
+ "[&_.excalidraw]:[--default-border-color:var(--color-border)]!",
80
+ "[&_.excalidraw]:[--dialog-border-color:var(--color-border)]!",
81
+ "[&_.excalidraw]:[--color-border-outline:var(--color-border)]!",
82
+ "[&_.excalidraw]:[--color-border-outline-variant:var(--color-border)]!",
83
+ "[&_.excalidraw]:[--input-bg-color:var(--color-background)]!",
84
+ "[&_.excalidraw]:[--input-border-color:var(--color-input)]!",
85
+ "[&_.excalidraw]:[--input-hover-bg-color:var(--color-accent)]!",
86
+ "[&_.excalidraw]:[--input-label-color:var(--color-muted-foreground)]!",
87
+ "[&_.excalidraw]:[--button-hover-bg:var(--color-accent)]!",
88
+ "[&_.excalidraw]:[--button-active-bg:var(--color-accent)]!",
89
+ "[&_.excalidraw]:[--button-active-border:var(--sketch-primary)]!",
90
+ "[&_.excalidraw]:[--scrollbar-thumb:var(--color-border)]!",
91
+ "[&_.excalidraw]:[--scrollbar-thumb-hover:var(--color-muted-foreground)]!",
92
+ // status
93
+ "[&_.excalidraw]:[--color-danger:var(--color-destructive)]!",
94
+ "[&_.excalidraw]:[--color-danger-darker:var(--color-destructive)]!",
95
+ "[&_.excalidraw]:[--color-danger-text:var(--color-destructive)]!",
96
+ "[&_.excalidraw]:[--button-destructive-color:var(--color-destructive)]!",
97
+ "[&_.excalidraw]:[--button-destructive-bg-color:var(--sketch-muted)]!",
98
+ // radius
99
+ "[&_.excalidraw]:[--border-radius-md:var(--theme-radius)]!",
100
+ "[&_.excalidraw]:[--border-radius-lg:var(--theme-radius)]!",
101
+ ].join(" ");
102
+
103
+ // Plain CSS, not Tailwind classes: Tailwind reads every `_` inside an
104
+ // arbitrary variant as a space, and Excalidraw's class names are full of
105
+ // them (layer-ui__wrapper__top-right, App-menu_top__left), so the class
106
+ // form silently matched nothing — its library button, zoom footer and a
107
+ // squeezed hint line all showed (seen in the pane, 2026-09-24). Rendered
108
+ // in a <style> by the block, scoped to its own wrapper.
109
+ const HIDE = [
110
+ // desktop: main menu + properties panel, the tool bar's own buttons, the
111
+ // library / share corner, the zoom + undo + help footer
112
+ ".App-menu_top__left",
113
+ ".App-toolbar > .Stack",
114
+ ".App-toolbar__extra-tools-trigger",
115
+ ".layer-ui__wrapper__top-right",
116
+ ".layer-ui__wrapper__footer-left",
117
+ ".layer-ui__wrapper__footer-right",
118
+ // its hint line: the tool bar it sat under is gone (our empty state and
119
+ // rail tooltips say the same)
120
+ ".HintViewer",
121
+ // phone layout: its top and bottom bars
122
+ ".App-top-bar",
123
+ ".App-bottom-bar",
124
+ // library, search and every other sidebar
125
+ ".sidebar",
126
+ ".default-sidebar",
127
+ ];
128
+ export const TRIM_CSS =
129
+ HIDE.map((sel) => `[data-sketch-canvas] ${sel}`).join(",\n") +
130
+ " { display: none !important; }\n" +
131
+ "[data-sketch-canvas] .App-toolbar { background: transparent !important; box-shadow: none !important; border: 0 !important; }";