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,209 @@
1
+ // The built-in blocks and starter templates, as plain data. Server-safe.
2
+ //
3
+ // Every block is an HTML string with `pb-` classes; BASE_CSS styles those
4
+ // classes with theme tokens only (var(--color-…), --theme-font-*,
5
+ // --theme-radius), so a page built from them repaints with the theme.
6
+ // `data-gjs-name` names a section in the Layers panel. A consumer adds its
7
+ // own blocks in the same shape (README: "Your own sections"); a block may
8
+ // carry its own `css`, which the editor adds once.
9
+ //
10
+ // `thumb` picks the small wireframe the Add panel draws for the block:
11
+ // hero · split · features · logos · quote · pricing · faq · cta · footer ·
12
+ // heading · text · button · image · columns · divider · spacer · list ·
13
+ // blank.
14
+
15
+ export const BASE_CSS = `
16
+ .pb-section{padding:88px 24px;background-color:var(--color-background);color:var(--color-foreground)}
17
+ .pb-container{max-width:1080px;margin-left:auto;margin-right:auto}
18
+ .pb-narrow{max-width:720px;margin-left:auto;margin-right:auto}
19
+ .pb-center{text-align:center}
20
+ .pb-kicker{display:inline-block;margin:0 0 16px;padding:4px 12px;border:1px solid var(--color-border);border-radius:9999px;font-size:0.8125rem;font-weight:500;color:var(--color-muted-foreground)}
21
+ .pb-display{margin:0 0 20px;font-family:var(--theme-font-display);font-size:3.25rem;line-height:1.05;font-weight:700;letter-spacing:-0.02em}
22
+ .pb-h2{margin:0 0 12px;font-family:var(--theme-font-display);font-size:2.25rem;line-height:1.15;font-weight:700;letter-spacing:-0.015em}
23
+ .pb-h3{margin:0 0 8px;font-size:1.125rem;line-height:1.4;font-weight:600}
24
+ .pb-lead{margin:0 0 32px;font-size:1.25rem;line-height:1.55;color:var(--color-muted-foreground)}
25
+ .pb-text{margin:0 0 16px;font-size:1rem;line-height:1.65}
26
+ .pb-muted{color:var(--color-muted-foreground)}
27
+ .pb-small{font-size:0.875rem;line-height:1.5}
28
+ .pb-actions{display:flex;flex-wrap:wrap;gap:12px;align-items:center}
29
+ .pb-center .pb-actions{justify-content:center}
30
+ .pb-button{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:10px 20px;border-radius:var(--theme-radius);background-color:var(--color-primary);color:var(--color-primary-foreground);font-weight:600;font-size:0.9375rem;text-decoration:none;border:1px solid transparent}
31
+ .pb-button-quiet{background-color:transparent;color:var(--color-foreground);border-color:var(--color-border)}
32
+ .pb-grid-2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:48px;align-items:center}
33
+ .pb-grid-3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:24px}
34
+ .pb-cols{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:32px;padding:16px 0;min-height:80px}
35
+ .pb-col{min-height:48px}
36
+ .pb-card{padding:28px;border:1px solid var(--color-border);border-radius:calc(var(--theme-radius) * 1.5);background-color:var(--color-card);color:var(--color-card-foreground)}
37
+ .pb-dot{width:36px;height:36px;margin-bottom:20px;border-radius:var(--theme-radius);background-color:var(--color-accent);border:1px solid var(--color-border)}
38
+ .pb-media{aspect-ratio:4/3;width:100%;border-radius:calc(var(--theme-radius) * 1.5);background-color:var(--color-muted);border:1px solid var(--color-border)}
39
+ .pb-img{display:block;max-width:100%;height:auto;border-radius:var(--theme-radius)}
40
+ .pb-head{margin-bottom:48px}
41
+ .pb-logos{display:flex;flex-wrap:wrap;justify-content:center;gap:16px 48px;margin-top:20px;font-family:var(--theme-font-display);font-size:1.25rem;font-weight:600;color:var(--color-muted-foreground)}
42
+ .pb-logos-section{padding:48px 24px;border-top:1px solid var(--color-border);border-bottom:1px solid var(--color-border)}
43
+ .pb-quote{margin:0 0 24px;font-family:var(--theme-font-display);font-size:1.75rem;line-height:1.35;font-weight:500;letter-spacing:-0.01em}
44
+ .pb-price{margin:8px 0 4px;font-family:var(--theme-font-display);font-size:2.5rem;font-weight:700;line-height:1.1}
45
+ .pb-plan-strong{border-color:var(--color-primary);box-shadow:0 0 0 1px var(--color-primary)}
46
+ .pb-list{margin:20px 0 28px;padding-left:20px;line-height:1.9}
47
+ .pb-faq{border-top:1px solid var(--color-border);padding:20px 0}
48
+ .pb-cta{padding:72px 24px;background-color:var(--color-primary);color:var(--color-primary-foreground)}
49
+ .pb-cta .pb-lead{color:var(--color-primary-foreground);opacity:0.85}
50
+ .pb-cta .pb-button{background-color:var(--color-primary-foreground);color:var(--color-primary)}
51
+ .pb-footer{padding:48px 24px;border-top:1px solid var(--color-border);background-color:var(--color-background);color:var(--color-muted-foreground);font-size:0.875rem}
52
+ .pb-footer-row{display:flex;flex-wrap:wrap;gap:16px 32px;align-items:center;justify-content:space-between}
53
+ .pb-footer-links{display:flex;flex-wrap:wrap;gap:8px 24px}
54
+ .pb-footer a{color:inherit;text-decoration:none}
55
+ .pb-brand{font-family:var(--theme-font-display);font-weight:700;font-size:1.125rem;color:var(--color-foreground)}
56
+ .pb-divider{height:1px;border:0;margin:32px 0;background-color:var(--color-border)}
57
+ .pb-spacer{height:64px}
58
+ @media (max-width: 768px){
59
+ .pb-section{padding:56px 20px}
60
+ .pb-display{font-size:2.25rem}
61
+ .pb-h2{font-size:1.75rem}
62
+ .pb-lead{font-size:1.0625rem}
63
+ .pb-quote{font-size:1.375rem}
64
+ .pb-grid-2,.pb-grid-3,.pb-cols{grid-template-columns:minmax(0,1fr);gap:24px}
65
+ .pb-cta{padding:56px 20px}
66
+ }
67
+ `.trim();
68
+
69
+ const hero = `<section class="pb-section pb-center" data-gjs-name="Hero">
70
+ <div class="pb-narrow">
71
+ <p class="pb-kicker">New · Early access is open</p>
72
+ <h1 class="pb-display">The calm way to run your week</h1>
73
+ <p class="pb-lead">Plan the work, share the plan, and see what moved — in one place your whole team will actually open.</p>
74
+ <div class="pb-actions">
75
+ <a class="pb-button" href="/signup">Start free</a>
76
+ <a class="pb-button pb-button-quiet" href="/tour">Take the tour</a>
77
+ </div>
78
+ </div>
79
+ </section>`;
80
+
81
+ const split = `<section class="pb-section" data-gjs-name="Hero, split">
82
+ <div class="pb-container pb-grid-2">
83
+ <div>
84
+ <h1 class="pb-display">Every customer, one clear picture</h1>
85
+ <p class="pb-lead">Notes, deals and conversations sit together, so the next step is always obvious.</p>
86
+ <div class="pb-actions">
87
+ <a class="pb-button" href="/signup">Get started</a>
88
+ <a class="pb-button pb-button-quiet" href="/demo">Book a demo</a>
89
+ </div>
90
+ </div>
91
+ <div class="pb-media" data-gjs-name="Picture"></div>
92
+ </div>
93
+ </section>`;
94
+
95
+ const features = `<section class="pb-section" data-gjs-name="Features">
96
+ <div class="pb-container">
97
+ <div class="pb-head pb-narrow pb-center">
98
+ <h2 class="pb-h2">Built for the way small teams work</h2>
99
+ <p class="pb-lead">Three things we obsess over, so you do not have to.</p>
100
+ </div>
101
+ <div class="pb-grid-3">
102
+ <div class="pb-card"><div class="pb-dot"></div><h3 class="pb-h3">Set up in minutes</h3><p class="pb-text pb-muted">Import what you have and start where you left off. No training day required.</p></div>
103
+ <div class="pb-card"><div class="pb-dot"></div><h3 class="pb-h3">Everyone on the same page</h3><p class="pb-text pb-muted">One shared view of priorities, owners and dates — updated the moment anything changes.</p></div>
104
+ <div class="pb-card"><div class="pb-dot"></div><h3 class="pb-h3">Private by default</h3><p class="pb-text pb-muted">Your data stays yours. Export everything, any time, in plain formats.</p></div>
105
+ </div>
106
+ </div>
107
+ </section>`;
108
+
109
+ const logos = `<section class="pb-logos-section pb-center" data-gjs-name="Logos">
110
+ <p class="pb-small pb-muted">Trusted by teams at</p>
111
+ <div class="pb-logos"><span>Northwind</span><span>Halcyon</span><span>Brightline</span><span>Tessellate</span><span>Oakridge</span></div>
112
+ </section>`;
113
+
114
+ const quote = `<section class="pb-section pb-center" data-gjs-name="Quote">
115
+ <div class="pb-narrow">
116
+ <p class="pb-quote">“We replaced three tools and a weekly status meeting. The team finally knows what matters this week.”</p>
117
+ <p class="pb-text"><strong>Maya Okafor</strong><br><span class="pb-muted pb-small">Head of Operations, Brightline</span></p>
118
+ </div>
119
+ </section>`;
120
+
121
+ const pricing = `<section class="pb-section" data-gjs-name="Pricing">
122
+ <div class="pb-container">
123
+ <div class="pb-head pb-narrow pb-center">
124
+ <h2 class="pb-h2">Simple pricing</h2>
125
+ <p class="pb-lead">Start free. Upgrade when your team grows.</p>
126
+ </div>
127
+ <div class="pb-grid-2" style="align-items:stretch">
128
+ <div class="pb-card"><h3 class="pb-h3">Starter</h3><p class="pb-price">Free</p><p class="pb-text pb-muted">For you and a teammate.</p><ul class="pb-list"><li>Up to 3 projects</li><li>Shared views</li><li>Email support</li></ul><a class="pb-button pb-button-quiet" href="/signup">Start free</a></div>
129
+ <div class="pb-card pb-plan-strong"><h3 class="pb-h3">Team</h3><p class="pb-price">$12</p><p class="pb-text pb-muted">Per person, per month.</p><ul class="pb-list"><li>Unlimited projects</li><li>Guests and permissions</li><li>Priority support</li></ul><a class="pb-button" href="/signup?plan=team">Try Team free</a></div>
130
+ </div>
131
+ </div>
132
+ </section>`;
133
+
134
+ const faq = `<section class="pb-section" data-gjs-name="Questions">
135
+ <div class="pb-narrow">
136
+ <h2 class="pb-h2">Questions, answered</h2>
137
+ <div class="pb-faq"><h3 class="pb-h3">Can I try it before I pay?</h3><p class="pb-text pb-muted">Yes. Every plan starts with a free trial, and the Starter plan is free for good.</p></div>
138
+ <div class="pb-faq"><h3 class="pb-h3">Can I bring my data with me?</h3><p class="pb-text pb-muted">Import a spreadsheet or connect the tools you already use. It takes a few clicks.</p></div>
139
+ <div class="pb-faq"><h3 class="pb-h3">What happens if I cancel?</h3><p class="pb-text pb-muted">You keep read access and can export everything. No questions, no hoops.</p></div>
140
+ </div>
141
+ </section>`;
142
+
143
+ const cta = `<section class="pb-cta pb-center" data-gjs-name="Call to action">
144
+ <div class="pb-narrow">
145
+ <h2 class="pb-h2">Ready when you are</h2>
146
+ <p class="pb-lead">Set up your first project in the next five minutes.</p>
147
+ <div class="pb-actions"><a class="pb-button" href="/signup">Start free</a></div>
148
+ </div>
149
+ </section>`;
150
+
151
+ const footer = `<footer class="pb-footer" data-gjs-name="Footer">
152
+ <div class="pb-container pb-footer-row">
153
+ <span class="pb-brand">Acme</span>
154
+ <nav class="pb-footer-links"><a href="/about">About</a><a href="/pricing">Pricing</a><a href="/blog">Blog</a><a href="/privacy">Privacy</a></nav>
155
+ <span>© 2026 Acme, Inc.</span>
156
+ </div>
157
+ </footer>`;
158
+
159
+ /** The built-in blocks. Sections first, then the basics. */
160
+ export const SECTION_BLOCKS = [
161
+ { id: "hero", label: "Hero", category: "Sections", thumb: "hero", description: "A headline, a line of detail and two buttons, centred.", html: hero },
162
+ { id: "hero-split", label: "Hero, split", category: "Sections", thumb: "split", description: "Headline and buttons beside a picture.", html: split },
163
+ { id: "features", label: "Features", category: "Sections", thumb: "features", description: "Three cards that each make one point.", html: features },
164
+ { id: "logos", label: "Logos", category: "Sections", thumb: "logos", description: "A quiet row of customer names.", html: logos },
165
+ { id: "quote", label: "Quote", category: "Sections", thumb: "quote", description: "One customer, in their own words.", html: quote },
166
+ { id: "pricing", label: "Pricing", category: "Sections", thumb: "pricing", description: "Two plans side by side.", html: pricing },
167
+ { id: "faq", label: "Questions", category: "Sections", thumb: "faq", description: "The questions people ask before they sign up.", html: faq },
168
+ { id: "cta", label: "Call to action", category: "Sections", thumb: "cta", description: "A bold band with one button.", html: cta },
169
+ { id: "footer", label: "Footer", category: "Sections", thumb: "footer", description: "Brand, links and the small print.", html: footer },
170
+ ];
171
+
172
+ export const BASIC_BLOCKS = [
173
+ { id: "heading", label: "Heading", category: "Basics", thumb: "heading", html: `<h2 class="pb-h2">A clear heading</h2>` },
174
+ { id: "text", label: "Text", category: "Basics", thumb: "text", html: `<p class="pb-text">Write a sentence or two that says what this part of the page is about.</p>` },
175
+ { id: "button", label: "Button", category: "Basics", thumb: "button", html: `<a class="pb-button" href="/signup">Get started</a>` },
176
+ { id: "image", label: "Image", category: "Basics", thumb: "image", content: { type: "image", classes: ["pb-img"], attributes: { alt: "" } } },
177
+ { id: "columns", label: "Two columns", category: "Basics", thumb: "columns", html: `<div class="pb-cols" data-gjs-name="Columns"><div class="pb-col" data-gjs-name="Column"></div><div class="pb-col" data-gjs-name="Column"></div></div>` },
178
+ { id: "list", label: "List", category: "Basics", thumb: "list", html: `<ul class="pb-list"><li>First point</li><li>Second point</li><li>Third point</li></ul>` },
179
+ { id: "divider", label: "Divider", category: "Basics", thumb: "divider", html: `<hr class="pb-divider">` },
180
+ { id: "spacer", label: "Space", category: "Basics", thumb: "spacer", html: `<div class="pb-spacer" data-gjs-name="Space"></div>` },
181
+ { id: "section", label: "Empty section", category: "Basics", thumb: "blank", html: `<section class="pb-section" data-gjs-name="Section"><div class="pb-container"><h2 class="pb-h2">New section</h2><p class="pb-text pb-muted">Drop blocks here.</p></div></section>` },
182
+ ];
183
+
184
+ const joinBlocks = (ids) => ids.map((id) => SECTION_BLOCKS.find((b) => b.id === id)?.html ?? "").join("\n");
185
+
186
+ /** The built-in starter templates. A template is a whole page. */
187
+ export const STARTER_TEMPLATES = [
188
+ {
189
+ id: "launch",
190
+ label: "Product launch",
191
+ description: "Hero, logos, features, a quote and a call to action.",
192
+ thumbs: ["hero", "logos", "features", "cta"],
193
+ html: joinBlocks(["hero", "logos", "features", "quote", "cta", "footer"]),
194
+ },
195
+ {
196
+ id: "sales",
197
+ label: "Sales page",
198
+ description: "A split hero, features, pricing and questions.",
199
+ thumbs: ["split", "features", "pricing", "faq"],
200
+ html: joinBlocks(["hero-split", "features", "pricing", "faq", "footer"]),
201
+ },
202
+ {
203
+ id: "simple",
204
+ label: "One-pager",
205
+ description: "Just a hero and a footer to build on.",
206
+ thumbs: ["hero", "footer"],
207
+ html: joinBlocks(["hero", "footer"]),
208
+ },
209
+ ];
@@ -0,0 +1,87 @@
1
+ // GrapesJS in the workspace theme — the one place its look is mapped. Like
2
+ // sketch-canvas's theme.js for Excalidraw.
3
+ //
4
+ // With <Canvas> (custom UI) GrapesJS draws no panels at all. What it still
5
+ // draws, around the iframe, is: the hover and selection outlines, the name
6
+ // badge, the small toolbar on the selected element (select parent, move,
7
+ // copy, delete), resize handles, the drop placeholder while dragging, and
8
+ // the rich-text toolbar while a text is edited. Its stylesheet paints them
9
+ // from --gjs-* variables set on :root; each is pointed at a token here,
10
+ // set on our wrapper (a nearer ancestor wins). The few colours it writes
11
+ // literally (white toolbar text, white resize handles) are overridden with
12
+ // `!` utilities: its stylesheet is unlayered, and !important inside a
13
+ // layer is the one thing that outranks it.
14
+ //
15
+ // --gjs-left-width / --gjs-canvas-top are the room its default panels
16
+ // would take; there are none, so the canvas fills the frame.
17
+ export const GJS_VARS = [
18
+ "[--gjs-color-blue:var(--color-primary)]",
19
+ "[--gjs-color-highlight:var(--color-primary)]",
20
+ "[--gjs-placeholder-background-color:var(--color-primary)]",
21
+ "[--gjs-color-yellow:var(--color-warning)]",
22
+ "[--gjs-color-warn:var(--color-warning)]",
23
+ "[--gjs-color-red:var(--color-destructive)]",
24
+ "[--gjs-color-green:var(--color-success)]",
25
+ "[--gjs-primary-color:var(--color-muted)]",
26
+ "[--gjs-secondary-color:var(--color-foreground)]",
27
+ "[--gjs-main-color:var(--color-popover)]",
28
+ "[--gjs-font-color:var(--color-popover-foreground)]",
29
+ "[--gjs-font-color-active:var(--color-foreground)]",
30
+ "[--gjs-main-dark-color:var(--color-border)]",
31
+ "[--gjs-main-light-color:var(--color-accent)]",
32
+ "[--gjs-soft-light-color:var(--color-accent)]",
33
+ "[--gjs-main-font:var(--theme-font-sans)]",
34
+ "[--gjs-font-size:0.8125rem]",
35
+ "[--gjs-left-width:0px]",
36
+ "[--gjs-canvas-top:0px]",
37
+ ].join(" ");
38
+
39
+ export const GJS_THEME = [
40
+ // the editor and the canvas behind the frame
41
+ "[&_.gjs-editor]:bg-muted!",
42
+ "[&_.gjs-cv-canvas]:bg-muted!",
43
+ "[&_.gjs-frame-wrapper]:transition-[width]",
44
+ "[&_.gjs-frame-wrapper]:motion-reduce:transition-none",
45
+ // the selected element's toolbar and the name badge
46
+ "[&_.gjs-toolbar]:text-primary-foreground!",
47
+ "[&_.gjs-toolbar]:rounded-md!",
48
+ "[&_.gjs-toolbar]:overflow-hidden",
49
+ "[&_.gjs-toolbar]:shadow-sm",
50
+ "[&_.gjs-toolbar-item]:w-7!",
51
+ "[&_.gjs-toolbar-item]:p-1.5!",
52
+ "[&_.gjs-toolbar-item:hover]:bg-primary-foreground/15",
53
+ "[&_.gjs-badge]:text-primary-foreground!",
54
+ "[&_.gjs-badge]:rounded-md!",
55
+ "[&_.gjs-badge]:px-2!",
56
+ "[&_.gjs-badge]:py-0.5!",
57
+ "[&_.gjs-badge]:text-xs!",
58
+ "[&_.gjs-badge]:font-medium!",
59
+ // resize handles
60
+ "[&_.gjs-resizer-h]:bg-background!",
61
+ "[&_.gjs-resizer-h]:rounded-full",
62
+ // the text toolbar
63
+ "[&_.gjs-rte-toolbar]:rounded-lg!",
64
+ "[&_.gjs-rte-toolbar]:border!",
65
+ "[&_.gjs-rte-toolbar]:border-border!",
66
+ "[&_.gjs-rte-toolbar]:shadow-md",
67
+ "[&_.gjs-rte-toolbar]:overflow-hidden",
68
+ "[&_.gjs-rte-toolbar-ui]:border-0!",
69
+ "[&_.gjs-rte-action]:w-8!",
70
+ "[&_.gjs-rte-action]:h-8!",
71
+ "[&_.gjs-rte-action]:text-popover-foreground!",
72
+ // the drop placeholder
73
+ "[&_.gjs-placeholder-int]:rounded-full",
74
+ ].join(" ");
75
+
76
+ /** The frame's own stylesheet (inside the iframe; never exported): the
77
+ * page's base on the theme, a calm dashed outline for empty boxes while
78
+ * editing, and a hint in an empty frame. The tokens it reads are written
79
+ * into the frame beside it (tokens.js tokenCss). */
80
+ export const FRAME_CSS =
81
+ "body{margin:0;min-height:100vh;background-color:var(--color-background);color:var(--color-foreground);" +
82
+ "font-family:var(--theme-font-sans);font-size:16px;line-height:1.55;-webkit-font-smoothing:antialiased}" +
83
+ "*,*::before,*::after{box-sizing:border-box}img{max-width:100%}" +
84
+ "a{color:inherit}" +
85
+ ".gjs-dashed *[data-gjs-highlightable]{outline:1px dashed var(--color-border)!important;outline-offset:-1px}" +
86
+ ".gjs-dashed .pb-col:empty,.gjs-dashed .pb-spacer{background-color:var(--color-muted)}" +
87
+ "::selection{background-color:var(--color-accent)}";
@@ -0,0 +1,189 @@
1
+ // Small wireframes of the blocks, for the Add panel and the template cards.
2
+ // Drawn from tokens with plain boxes (decoration, hidden from readers): a
3
+ // bar is a line of text, a filled bar a button, a tinted box a picture.
4
+ // Server-safe. A block names one with `thumb`; an unknown name draws
5
+ // "blank".
6
+ import { cx } from "../../ui";
7
+
8
+ const Bar = ({ w = "w-2/3", strong = false, className }) => (
9
+ <span className={cx("block h-1 rounded-full", strong ? "bg-foreground/70" : "bg-muted-foreground/35", w, className)} />
10
+ );
11
+ const Btn = ({ quiet = false, className }) => (
12
+ <span className={cx("block h-2 w-6 rounded-sm", quiet ? "border border-border" : "bg-primary", className)} />
13
+ );
14
+ const Pic = ({ className }) => <span className={cx("block rounded-sm border border-border bg-accent", className)} />;
15
+ const Card = ({ children }) => <span className="flex flex-1 flex-col gap-1 rounded-sm border border-border bg-card p-1">{children}</span>;
16
+
17
+ const THUMBS = {
18
+ hero: (
19
+ <span className="flex h-full flex-col items-center justify-center gap-1.5">
20
+ <Bar w="w-8" />
21
+ <Bar w="w-3/4" strong className="h-1.5" />
22
+ <Bar w="w-1/2" />
23
+ <span className="flex gap-1">
24
+ <Btn />
25
+ <Btn quiet />
26
+ </span>
27
+ </span>
28
+ ),
29
+ split: (
30
+ <span className="flex h-full items-center gap-2 px-1">
31
+ <span className="flex flex-1 flex-col gap-1.5">
32
+ <Bar w="w-full" strong className="h-1.5" />
33
+ <Bar w="w-3/4" />
34
+ <Btn />
35
+ </span>
36
+ <Pic className="h-10 flex-1" />
37
+ </span>
38
+ ),
39
+ features: (
40
+ <span className="flex h-full flex-col justify-center gap-1.5">
41
+ <Bar w="w-1/2" strong className="mx-auto" />
42
+ <span className="flex gap-1">
43
+ {[0, 1, 2].map((i) => (
44
+ <Card key={i}>
45
+ <Pic className="size-1.5" />
46
+ <Bar w="w-full" />
47
+ <Bar w="w-2/3" />
48
+ </Card>
49
+ ))}
50
+ </span>
51
+ </span>
52
+ ),
53
+ logos: (
54
+ <span className="flex h-full flex-col items-center justify-center gap-2">
55
+ <Bar w="w-1/3" />
56
+ <span className="flex w-full justify-center gap-1.5">
57
+ {[0, 1, 2, 3].map((i) => (
58
+ <Bar key={i} w="w-4" strong className="h-1.5" />
59
+ ))}
60
+ </span>
61
+ </span>
62
+ ),
63
+ quote: (
64
+ <span className="flex h-full flex-col items-center justify-center gap-1.5">
65
+ <Bar w="w-5/6" strong />
66
+ <Bar w="w-2/3" strong />
67
+ <Bar w="w-1/4" className="mt-1" />
68
+ </span>
69
+ ),
70
+ pricing: (
71
+ <span className="flex h-full items-center gap-1.5 px-2">
72
+ {[0, 1].map((i) => (
73
+ <Card key={i}>
74
+ <Bar w="w-1/2" />
75
+ <Bar w="w-1/3" strong className="h-1.5" />
76
+ <Bar w="w-full" />
77
+ <Btn quiet={i === 0} className="w-full" />
78
+ </Card>
79
+ ))}
80
+ </span>
81
+ ),
82
+ faq: (
83
+ <span className="flex h-full flex-col justify-center gap-1.5 px-3">
84
+ <Bar w="w-1/2" strong />
85
+ {[0, 1, 2].map((i) => (
86
+ <span key={i} className="flex flex-col gap-0.5 border-t border-border pt-1">
87
+ <Bar w="w-2/3" />
88
+ </span>
89
+ ))}
90
+ </span>
91
+ ),
92
+ cta: (
93
+ <span className="flex h-full flex-col items-center justify-center gap-1.5 rounded-sm bg-primary">
94
+ <span className="block h-1.5 w-1/2 rounded-full bg-primary-foreground/80" />
95
+ <span className="block h-2 w-6 rounded-sm bg-primary-foreground" />
96
+ </span>
97
+ ),
98
+ footer: (
99
+ <span className="flex h-full flex-col justify-end">
100
+ <span className="flex items-center justify-between gap-1 border-t border-border px-1 pt-2">
101
+ <Bar w="w-4" strong />
102
+ <span className="flex gap-1">
103
+ <Bar w="w-3" />
104
+ <Bar w="w-3" />
105
+ <Bar w="w-3" />
106
+ </span>
107
+ </span>
108
+ </span>
109
+ ),
110
+ heading: (
111
+ <span className="flex h-full items-center px-2">
112
+ <Bar w="w-3/4" strong className="h-2" />
113
+ </span>
114
+ ),
115
+ text: (
116
+ <span className="flex h-full flex-col justify-center gap-1 px-2">
117
+ <Bar w="w-full" />
118
+ <Bar w="w-full" />
119
+ <Bar w="w-2/3" />
120
+ </span>
121
+ ),
122
+ button: (
123
+ <span className="flex h-full items-center justify-center">
124
+ <span className="block h-3 w-10 rounded-sm bg-primary" />
125
+ </span>
126
+ ),
127
+ image: (
128
+ <span className="flex h-full items-center justify-center px-3 py-1.5">
129
+ <Pic className="h-full w-full" />
130
+ </span>
131
+ ),
132
+ columns: (
133
+ <span className="flex h-full items-stretch gap-1.5 p-1.5">
134
+ <span className="flex-1 rounded-sm border border-dashed border-border" />
135
+ <span className="flex-1 rounded-sm border border-dashed border-border" />
136
+ </span>
137
+ ),
138
+ list: (
139
+ <span className="flex h-full flex-col justify-center gap-1 px-3">
140
+ {[0, 1, 2].map((i) => (
141
+ <span key={i} className="flex items-center gap-1">
142
+ <span className="block size-1 rounded-full bg-muted-foreground/60" />
143
+ <Bar w="w-2/3" />
144
+ </span>
145
+ ))}
146
+ </span>
147
+ ),
148
+ divider: (
149
+ <span className="flex h-full items-center px-2">
150
+ <span className="block h-px w-full bg-border" />
151
+ </span>
152
+ ),
153
+ spacer: (
154
+ <span className="flex h-full flex-col items-center justify-center gap-0.5 text-muted-foreground/60">
155
+ <span className="block h-px w-6 bg-muted-foreground/40" />
156
+ <span className="block h-3 w-px bg-muted-foreground/40" />
157
+ <span className="block h-px w-6 bg-muted-foreground/40" />
158
+ </span>
159
+ ),
160
+ blank: (
161
+ <span className="flex h-full items-center justify-center p-1.5">
162
+ <span className="block h-full w-full rounded-sm border border-dashed border-border" />
163
+ </span>
164
+ ),
165
+ };
166
+
167
+ /** One block's wireframe, filling its box. */
168
+ export function BlockThumb({ name, className }) {
169
+ return (
170
+ <span aria-hidden="true" className={cx("block overflow-hidden rounded-md border border-border bg-background p-1.5", className)}>
171
+ {THUMBS[name] ?? THUMBS.blank}
172
+ </span>
173
+ );
174
+ }
175
+
176
+ /** A whole page's wireframe: its sections stacked, for a template card. */
177
+ export function PageThumb({ names = [], className }) {
178
+ return (
179
+ <span aria-hidden="true" className={cx("flex flex-col gap-1 overflow-hidden rounded-md border border-border bg-background p-1.5", className)}>
180
+ {(names.length ? names : ["blank"]).slice(0, 4).map((n, i) => (
181
+ <span key={i} className="block h-9 shrink-0">
182
+ {THUMBS[n] ?? THUMBS.blank}
183
+ </span>
184
+ ))}
185
+ </span>
186
+ );
187
+ }
188
+
189
+ export const THUMB_NAMES = Object.keys(THUMBS);