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.
- package/LICENSE +21 -0
- package/README.md +41 -1
- package/THIRD-PARTY-NOTICES.md +180 -0
- package/package.json +15 -8
- package/r/annotate.json +62 -0
- package/r/approval-request.json +52 -0
- package/r/audio-player.json +74 -0
- package/r/auth-form.json +55 -0
- package/r/board.json +55 -0
- package/r/calendar-view.json +105 -0
- package/r/cart.json +62 -0
- package/r/chart.json +83 -0
- package/r/chat.json +95 -0
- package/r/code-editor.json +94 -0
- package/r/comment-box.json +64 -0
- package/r/contact-section.json +53 -0
- package/r/core.json +341 -0
- package/r/csv-import.json +63 -0
- package/r/data-table.json +69 -0
- package/r/diagram.json +74 -0
- package/r/doc-editor.json +82 -0
- package/r/doc-page.json +61 -0
- package/r/email-render.json +73 -0
- package/r/faq.json +50 -0
- package/r/file-upload.json +54 -0
- package/r/flow-canvas.json +93 -0
- package/r/footer.json +52 -0
- package/r/gantt.json +70 -0
- package/r/job-panel.json +56 -0
- package/r/json-editor.json +66 -0
- package/r/map.json +89 -0
- package/r/menubar.json +52 -0
- package/r/mind-map.json +67 -0
- package/r/navigation-menu.json +52 -0
- package/r/order-detail.json +54 -0
- package/r/org-chart.json +66 -0
- package/r/page-builder.json +105 -0
- package/r/payment-methods.json +51 -0
- package/r/pdf-document.json +79 -0
- package/r/pdf-viewer.json +88 -0
- package/r/product-detail.json +76 -0
- package/r/product-grid.json +65 -0
- package/r/record-form.json +67 -0
- package/r/record-notes.json +55 -0
- package/r/registry.json +3612 -0
- package/r/search-dialog.json +51 -0
- package/r/settings-list.json +66 -0
- package/r/setup-checklist.json +51 -0
- package/r/share-dialog.json +52 -0
- package/r/sidebar.json +69 -0
- package/r/signature-pad.json +72 -0
- package/r/sketch-canvas.json +99 -0
- package/r/spreadsheet.json +90 -0
- package/r/stat-cards.json +66 -0
- package/r/task-list.json +63 -0
- package/r/task-model.json +98 -0
- package/r/testimonials.json +52 -0
- package/r/transaction-list.json +53 -0
- package/r/whiteboard.json +66 -0
- package/registry/blocks/annotate/README.md +179 -0
- package/registry/blocks/annotate/annotate-data.js +250 -0
- package/registry/blocks/annotate/annotate.jsx +646 -0
- package/registry/blocks/annotate/block.json +10 -0
- package/registry/blocks/annotate/demo.jsx +135 -0
- package/registry/blocks/annotate/index.js +15 -0
- package/registry/blocks/approval-request/README.md +116 -0
- package/registry/blocks/approval-request/approval-request.jsx +386 -0
- package/registry/blocks/approval-request/block.json +10 -0
- package/registry/blocks/approval-request/demo.jsx +127 -0
- package/registry/blocks/approval-request/index.js +4 -0
- package/registry/blocks/audio-player/README.md +167 -0
- package/registry/blocks/audio-player/audio-player.jsx +623 -0
- package/registry/blocks/audio-player/block.json +14 -0
- package/registry/blocks/audio-player/colors.js +109 -0
- package/registry/blocks/audio-player/demo.jsx +209 -0
- package/registry/blocks/audio-player/index.js +6 -0
- package/registry/blocks/audio-player/time.js +67 -0
- package/registry/blocks/audio-player/wavesurfer.js +9 -0
- package/registry/blocks/auth-form/README.md +126 -0
- package/registry/blocks/auth-form/auth-form.jsx +568 -0
- package/registry/blocks/auth-form/block.json +10 -0
- package/registry/blocks/auth-form/demo.jsx +131 -0
- package/registry/blocks/auth-form/index.js +3 -0
- package/registry/blocks/board/README.md +64 -13
- package/registry/blocks/board/block.json +2 -2
- package/registry/blocks/board/board.jsx +237 -94
- package/registry/blocks/board/demo.jsx +103 -24
- package/registry/blocks/calendar-view/README.md +180 -0
- package/registry/blocks/calendar-view/agenda.jsx +147 -0
- package/registry/blocks/calendar-view/block.json +76 -0
- package/registry/blocks/calendar-view/calendar-model.js +442 -0
- package/registry/blocks/calendar-view/calendar.jsx +627 -0
- package/registry/blocks/calendar-view/demo.jsx +195 -0
- package/registry/blocks/calendar-view/draft.jsx +49 -0
- package/registry/blocks/calendar-view/index.js +39 -0
- package/registry/blocks/calendar-view/month.jsx +346 -0
- package/registry/blocks/calendar-view/paint.js +69 -0
- package/registry/blocks/calendar-view/time-grid.jsx +527 -0
- package/registry/blocks/calendar-view/tray.jsx +87 -0
- package/registry/blocks/cart/README.md +146 -0
- package/registry/blocks/cart/block.json +10 -0
- package/registry/blocks/cart/cart.jsx +597 -0
- package/registry/blocks/cart/demo.jsx +98 -0
- package/registry/blocks/cart/index.js +4 -0
- package/registry/blocks/cart/money.js +28 -0
- package/registry/blocks/chart/README.md +316 -0
- package/registry/blocks/chart/block.json +10 -0
- package/registry/blocks/chart/cartesian.jsx +642 -0
- package/registry/blocks/chart/core.jsx +262 -0
- package/registry/blocks/chart/demo.jsx +357 -0
- package/registry/blocks/chart/heatmap.jsx +336 -0
- package/registry/blocks/chart/index.js +8 -0
- package/registry/blocks/chart/pie.jsx +245 -0
- package/registry/blocks/chart/sparkline.jsx +88 -0
- package/registry/blocks/chat/README.md +273 -0
- package/registry/blocks/chat/attachment.jsx +95 -0
- package/registry/blocks/chat/block.json +10 -0
- package/registry/blocks/chat/chat.jsx +132 -0
- package/registry/blocks/chat/composer.jsx +364 -0
- package/registry/blocks/chat/demo.jsx +578 -0
- package/registry/blocks/chat/header.jsx +34 -0
- package/registry/blocks/chat/index.js +9 -0
- package/registry/blocks/chat/message.jsx +450 -0
- package/registry/blocks/chat/scroller.jsx +247 -0
- package/registry/blocks/chat/text.jsx +104 -0
- package/registry/blocks/code-editor/README.md +210 -0
- package/registry/blocks/code-editor/block.json +22 -0
- package/registry/blocks/code-editor/code-editor.jsx +534 -0
- package/registry/blocks/code-editor/codemirror.js +38 -0
- package/registry/blocks/code-editor/demo.jsx +205 -0
- package/registry/blocks/code-editor/index.js +8 -0
- package/registry/blocks/code-editor/json.js +317 -0
- package/registry/blocks/code-editor/sql.js +136 -0
- package/registry/blocks/code-editor/text.js +101 -0
- package/registry/blocks/code-editor/theme.js +186 -0
- package/registry/blocks/comment-box/README.md +123 -0
- package/registry/blocks/comment-box/block.json +10 -0
- package/registry/blocks/comment-box/comment-body.jsx +217 -0
- package/registry/blocks/comment-box/comment-box.jsx +198 -0
- package/registry/blocks/comment-box/comment-time.jsx +77 -0
- package/registry/blocks/comment-box/demo.jsx +141 -0
- package/registry/blocks/comment-box/index.js +8 -0
- package/registry/blocks/contact-section/README.md +152 -0
- package/registry/blocks/contact-section/block.json +11 -0
- package/registry/blocks/contact-section/contact-section.jsx +509 -0
- package/registry/blocks/contact-section/demo.jsx +93 -0
- package/registry/blocks/contact-section/index.js +4 -0
- package/registry/blocks/csv-import/README.md +133 -0
- package/registry/blocks/csv-import/block.json +13 -0
- package/registry/blocks/csv-import/csv-import.jsx +479 -0
- package/registry/blocks/csv-import/demo.jsx +106 -0
- package/registry/blocks/csv-import/import.js +200 -0
- package/registry/blocks/csv-import/index.js +7 -0
- package/registry/blocks/data-table/README.md +386 -0
- package/registry/blocks/data-table/block.json +10 -0
- package/registry/blocks/data-table/data-table.jsx +1164 -0
- package/registry/blocks/data-table/demo.jsx +588 -0
- package/registry/blocks/data-table/index.js +5 -0
- package/registry/blocks/data-table/model.js +169 -0
- package/registry/blocks/diagram/README.md +108 -0
- package/registry/blocks/diagram/block.json +13 -0
- package/registry/blocks/diagram/demo.jsx +113 -0
- package/registry/blocks/diagram/diagram.jsx +481 -0
- package/registry/blocks/diagram/index.js +7 -0
- package/registry/blocks/diagram/mermaid.js +52 -0
- package/registry/blocks/diagram/palette.js +313 -0
- package/registry/blocks/diagram/source.js +98 -0
- package/registry/blocks/doc-editor/README.md +215 -0
- package/registry/blocks/doc-editor/block.json +15 -0
- package/registry/blocks/doc-editor/demo.jsx +225 -0
- package/registry/blocks/doc-editor/doc-editor.jsx +291 -0
- package/registry/blocks/doc-editor/doc.js +309 -0
- package/registry/blocks/doc-editor/index.js +7 -0
- package/registry/blocks/doc-editor/schema.jsx +56 -0
- package/registry/blocks/doc-editor/shadcn-classes.js +110 -0
- package/registry/blocks/doc-editor/theme.js +82 -0
- package/registry/blocks/doc-page/README.md +119 -0
- package/registry/blocks/doc-page/autosave.js +104 -0
- package/registry/blocks/doc-page/block.json +10 -0
- package/registry/blocks/doc-page/demo.jsx +137 -0
- package/registry/blocks/doc-page/doc-page.jsx +276 -0
- package/registry/blocks/doc-page/index.js +4 -0
- package/registry/blocks/email-render/README.md +151 -0
- package/registry/blocks/email-render/block.json +14 -0
- package/registry/blocks/email-render/demo.jsx +153 -0
- package/registry/blocks/email-render/doc-email.jsx +210 -0
- package/registry/blocks/email-render/email.jsx +221 -0
- package/registry/blocks/email-render/index.js +10 -0
- package/registry/blocks/email-render/render.js +50 -0
- package/registry/blocks/email-render/theme.js +215 -0
- package/registry/blocks/faq/README.md +101 -0
- package/registry/blocks/faq/block.json +11 -0
- package/registry/blocks/faq/demo.jsx +89 -0
- package/registry/blocks/faq/faq.jsx +220 -0
- package/registry/blocks/faq/index.js +4 -0
- package/registry/blocks/file-upload/README.md +138 -0
- package/registry/blocks/file-upload/block.json +10 -0
- package/registry/blocks/file-upload/demo.jsx +204 -0
- package/registry/blocks/file-upload/file-upload.jsx +635 -0
- package/registry/blocks/file-upload/index.js +4 -0
- package/registry/blocks/flow-canvas/README.md +420 -0
- package/registry/blocks/flow-canvas/block.json +13 -0
- package/registry/blocks/flow-canvas/board.js +819 -0
- package/registry/blocks/flow-canvas/chrome.jsx +649 -0
- package/registry/blocks/flow-canvas/context.jsx +35 -0
- package/registry/blocks/flow-canvas/demo.jsx +249 -0
- package/registry/blocks/flow-canvas/edges.jsx +107 -0
- package/registry/blocks/flow-canvas/flow-canvas.jsx +1329 -0
- package/registry/blocks/flow-canvas/index.js +41 -0
- package/registry/blocks/flow-canvas/nodes.jsx +392 -0
- package/registry/blocks/flow-canvas/theme.js +174 -0
- package/registry/blocks/footer/README.md +133 -0
- package/registry/blocks/footer/block.json +11 -0
- package/registry/blocks/footer/demo.jsx +119 -0
- package/registry/blocks/footer/footer.jsx +406 -0
- package/registry/blocks/footer/index.js +4 -0
- package/registry/blocks/gantt/README.md +220 -0
- package/registry/blocks/gantt/block.json +10 -0
- package/registry/blocks/gantt/demo.jsx +148 -0
- package/registry/blocks/gantt/gantt.jsx +923 -0
- package/registry/blocks/gantt/index.js +7 -0
- package/registry/blocks/gantt/rows.jsx +468 -0
- package/registry/blocks/gantt/schedule.js +278 -0
- package/registry/blocks/job-panel/README.md +86 -2
- package/registry/blocks/job-panel/block.json +3 -3
- package/registry/blocks/job-panel/demo.jsx +230 -3
- package/registry/blocks/job-panel/job-panel.jsx +169 -3
- package/registry/blocks/json-editor/README.md +133 -0
- package/registry/blocks/json-editor/block.json +10 -0
- package/registry/blocks/json-editor/demo.jsx +92 -0
- package/registry/blocks/json-editor/index.js +7 -0
- package/registry/blocks/json-editor/json-editor.jsx +305 -0
- package/registry/blocks/json-editor/json-tree.jsx +393 -0
- package/registry/blocks/json-editor/tree.js +225 -0
- package/registry/blocks/map/README.md +221 -0
- package/registry/blocks/map/block.json +14 -0
- package/registry/blocks/map/demo.jsx +201 -0
- package/registry/blocks/map/geo.js +198 -0
- package/registry/blocks/map/index.js +8 -0
- package/registry/blocks/map/list.jsx +128 -0
- package/registry/blocks/map/map-view.jsx +715 -0
- package/registry/blocks/map/maplibre.js +30 -0
- package/registry/blocks/map/marks.jsx +146 -0
- package/registry/blocks/map/theme.js +142 -0
- package/registry/blocks/menubar/README.md +109 -0
- package/registry/blocks/menubar/block.json +10 -0
- package/registry/blocks/menubar/demo.jsx +128 -0
- package/registry/blocks/menubar/index.js +4 -0
- package/registry/blocks/menubar/menubar.jsx +199 -0
- package/registry/blocks/mind-map/README.md +206 -0
- package/registry/blocks/mind-map/block.json +10 -0
- package/registry/blocks/mind-map/demo.jsx +103 -0
- package/registry/blocks/mind-map/index.js +31 -0
- package/registry/blocks/mind-map/mind-map.jsx +1125 -0
- package/registry/blocks/mind-map/topic.jsx +143 -0
- package/registry/blocks/mind-map/tree.js +645 -0
- package/registry/blocks/navigation-menu/README.md +124 -0
- package/registry/blocks/navigation-menu/block.json +10 -0
- package/registry/blocks/navigation-menu/demo.jsx +84 -0
- package/registry/blocks/navigation-menu/index.js +4 -0
- package/registry/blocks/navigation-menu/navigation-menu.jsx +448 -0
- package/registry/blocks/order-detail/README.md +109 -0
- package/registry/blocks/order-detail/block.json +10 -0
- package/registry/blocks/order-detail/demo.jsx +88 -0
- package/registry/blocks/order-detail/index.js +4 -0
- package/registry/blocks/order-detail/order-detail.jsx +354 -0
- package/registry/blocks/org-chart/README.md +145 -0
- package/registry/blocks/org-chart/block.json +10 -0
- package/registry/blocks/org-chart/demo.jsx +94 -0
- package/registry/blocks/org-chart/index.js +7 -0
- package/registry/blocks/org-chart/org-chart.jsx +631 -0
- package/registry/blocks/org-chart/org.js +245 -0
- package/registry/blocks/org-chart/person.jsx +96 -0
- package/registry/blocks/page-builder/README.md +257 -0
- package/registry/blocks/page-builder/block.json +14 -0
- package/registry/blocks/page-builder/demo.jsx +145 -0
- package/registry/blocks/page-builder/grapes.js +18 -0
- package/registry/blocks/page-builder/index.js +11 -0
- package/registry/blocks/page-builder/page-builder.jsx +704 -0
- package/registry/blocks/page-builder/page-view.jsx +33 -0
- package/registry/blocks/page-builder/page.js +118 -0
- package/registry/blocks/page-builder/panels.jsx +588 -0
- package/registry/blocks/page-builder/sections.js +209 -0
- package/registry/blocks/page-builder/theme.js +87 -0
- package/registry/blocks/page-builder/thumbs.jsx +189 -0
- package/registry/blocks/page-builder/tokens.js +329 -0
- package/registry/blocks/payment-methods/README.md +104 -0
- package/registry/blocks/payment-methods/block.json +10 -0
- package/registry/blocks/payment-methods/demo.jsx +71 -0
- package/registry/blocks/payment-methods/index.js +4 -0
- package/registry/blocks/payment-methods/payment-methods.jsx +302 -0
- package/registry/blocks/pdf-document/README.md +213 -0
- package/registry/blocks/pdf-document/block.json +13 -0
- package/registry/blocks/pdf-document/demo.jsx +136 -0
- package/registry/blocks/pdf-document/index.js +33 -0
- package/registry/blocks/pdf-document/money.js +83 -0
- package/registry/blocks/pdf-document/pdf-document.jsx +144 -0
- package/registry/blocks/pdf-document/primitives.jsx +271 -0
- package/registry/blocks/pdf-document/quote.jsx +179 -0
- package/registry/blocks/pdf-document/theme.js +193 -0
- package/registry/blocks/pdf-viewer/README.md +191 -0
- package/registry/blocks/pdf-viewer/block.json +14 -0
- package/registry/blocks/pdf-viewer/demo.jsx +252 -0
- package/registry/blocks/pdf-viewer/helpers.js +270 -0
- package/registry/blocks/pdf-viewer/index.js +8 -0
- package/registry/blocks/pdf-viewer/notes.jsx +195 -0
- package/registry/blocks/pdf-viewer/pdf-viewer.jsx +1368 -0
- package/registry/blocks/pdf-viewer/pdfjs.js +37 -0
- package/registry/blocks/pdf-viewer/ssr-shim-end.js +6 -0
- package/registry/blocks/pdf-viewer/ssr-shim.js +44 -0
- package/registry/blocks/product-detail/README.md +217 -0
- package/registry/blocks/product-detail/block.json +10 -0
- package/registry/blocks/product-detail/demo.jsx +233 -0
- package/registry/blocks/product-detail/index.js +7 -0
- package/registry/blocks/product-detail/price.jsx +115 -0
- package/registry/blocks/product-detail/product-detail.jsx +348 -0
- package/registry/blocks/product-detail/product-media.jsx +102 -0
- package/registry/blocks/product-detail/product-options.jsx +144 -0
- package/registry/blocks/product-grid/README.md +162 -0
- package/registry/blocks/product-grid/block.json +10 -0
- package/registry/blocks/product-grid/demo.jsx +255 -0
- package/registry/blocks/product-grid/index.js +5 -0
- package/registry/blocks/product-grid/product-card.jsx +232 -0
- package/registry/blocks/product-grid/product-grid.jsx +235 -0
- package/registry/blocks/record-form/README.md +196 -0
- package/registry/blocks/record-form/block.json +10 -0
- package/registry/blocks/record-form/demo.jsx +525 -0
- package/registry/blocks/record-form/index.js +4 -0
- package/registry/blocks/record-form/record-fields.jsx +457 -0
- package/registry/blocks/record-form/record-form.jsx +415 -0
- package/registry/blocks/record-form/rules.js +81 -0
- package/registry/blocks/record-notes/README.md +139 -0
- package/registry/blocks/record-notes/block.json +10 -0
- package/registry/blocks/record-notes/demo.jsx +179 -0
- package/registry/blocks/record-notes/index.js +4 -0
- package/registry/blocks/record-notes/record-notes.jsx +266 -0
- package/registry/blocks/search-dialog/README.md +108 -0
- package/registry/blocks/search-dialog/block.json +10 -0
- package/registry/blocks/search-dialog/demo.jsx +116 -0
- package/registry/blocks/search-dialog/index.js +3 -0
- package/registry/blocks/search-dialog/search-dialog.jsx +235 -0
- package/registry/blocks/settings-list/README.md +171 -0
- package/registry/blocks/settings-list/block.json +10 -0
- package/registry/blocks/settings-list/demo.jsx +333 -0
- package/registry/blocks/settings-list/index.js +4 -0
- package/registry/blocks/settings-list/row-state.jsx +93 -0
- package/registry/blocks/settings-list/settings-list.jsx +349 -0
- package/registry/blocks/settings-list/settings-matrix.jsx +118 -0
- package/registry/blocks/setup-checklist/README.md +142 -0
- package/registry/blocks/setup-checklist/block.json +10 -0
- package/registry/blocks/setup-checklist/demo.jsx +159 -0
- package/registry/blocks/setup-checklist/index.js +4 -0
- package/registry/blocks/setup-checklist/setup-checklist.jsx +446 -0
- package/registry/blocks/share-dialog/README.md +113 -0
- package/registry/blocks/share-dialog/block.json +10 -0
- package/registry/blocks/share-dialog/demo.jsx +140 -0
- package/registry/blocks/share-dialog/index.js +3 -0
- package/registry/blocks/share-dialog/share-dialog.jsx +384 -0
- package/registry/blocks/sidebar/README.md +190 -0
- package/registry/blocks/sidebar/block.json +43 -0
- package/registry/blocks/sidebar/demo.jsx +577 -0
- package/registry/blocks/sidebar/index.js +4 -0
- package/registry/blocks/sidebar/sidebar-panel.jsx +149 -0
- package/registry/blocks/sidebar/sidebar.jsx +864 -0
- package/registry/blocks/signature-pad/README.md +137 -0
- package/registry/blocks/signature-pad/block.json +13 -0
- package/registry/blocks/signature-pad/colors.js +115 -0
- package/registry/blocks/signature-pad/demo.jsx +94 -0
- package/registry/blocks/signature-pad/index.js +6 -0
- package/registry/blocks/signature-pad/pad.js +7 -0
- package/registry/blocks/signature-pad/signature-pad.jsx +434 -0
- package/registry/blocks/signature-pad/signature.js +68 -0
- package/registry/blocks/sketch-canvas/README.md +280 -0
- package/registry/blocks/sketch-canvas/block.json +13 -0
- package/registry/blocks/sketch-canvas/demo.jsx +159 -0
- package/registry/blocks/sketch-canvas/excalidraw.js +40 -0
- package/registry/blocks/sketch-canvas/index.js +9 -0
- package/registry/blocks/sketch-canvas/palette.js +226 -0
- package/registry/blocks/sketch-canvas/sketch-canvas.jsx +1188 -0
- package/registry/blocks/sketch-canvas/sketch.js +179 -0
- package/registry/blocks/sketch-canvas/ssr-shim-end.js +6 -0
- package/registry/blocks/sketch-canvas/ssr-shim.js +45 -0
- package/registry/blocks/sketch-canvas/stamps.js +104 -0
- package/registry/blocks/sketch-canvas/theme.js +131 -0
- package/registry/blocks/spreadsheet/README.md +307 -0
- package/registry/blocks/spreadsheet/block.json +13 -0
- package/registry/blocks/spreadsheet/cells.jsx +455 -0
- package/registry/blocks/spreadsheet/chrome.jsx +325 -0
- package/registry/blocks/spreadsheet/demo.jsx +177 -0
- package/registry/blocks/spreadsheet/grid.js +387 -0
- package/registry/blocks/spreadsheet/index.js +34 -0
- package/registry/blocks/spreadsheet/spreadsheet.jsx +1732 -0
- package/registry/blocks/spreadsheet/types.js +473 -0
- package/registry/blocks/stat-cards/README.md +173 -0
- package/registry/blocks/stat-cards/block.json +10 -0
- package/registry/blocks/stat-cards/demo.jsx +257 -0
- package/registry/blocks/stat-cards/index.js +4 -0
- package/registry/blocks/stat-cards/stat-cards.jsx +307 -0
- package/registry/blocks/stat-cards/usage.jsx +243 -0
- package/registry/blocks/task-list/README.md +176 -0
- package/registry/blocks/task-list/block.json +10 -0
- package/registry/blocks/task-list/demo.jsx +134 -0
- package/registry/blocks/task-list/index.js +5 -0
- package/registry/blocks/task-list/task-list.jsx +907 -0
- package/registry/blocks/task-model/README.md +455 -0
- package/registry/blocks/task-model/block.json +167 -0
- package/registry/blocks/task-model/changes.js +89 -0
- package/registry/blocks/task-model/dates.js +371 -0
- package/registry/blocks/task-model/demo.jsx +215 -0
- package/registry/blocks/task-model/dnd.jsx +240 -0
- package/registry/blocks/task-model/index.js +97 -0
- package/registry/blocks/task-model/model.js +919 -0
- package/registry/blocks/task-model/parts.jsx +449 -0
- package/registry/blocks/task-model/toolbar.jsx +271 -0
- package/registry/blocks/testimonials/README.md +139 -0
- package/registry/blocks/testimonials/block.json +11 -0
- package/registry/blocks/testimonials/demo.jsx +137 -0
- package/registry/blocks/testimonials/index.js +4 -0
- package/registry/blocks/testimonials/testimonials.jsx +430 -0
- package/registry/blocks/transaction-list/README.md +126 -0
- package/registry/blocks/transaction-list/block.json +10 -0
- package/registry/blocks/transaction-list/demo.jsx +79 -0
- package/registry/blocks/transaction-list/index.js +4 -0
- package/registry/blocks/transaction-list/transaction-list.jsx +383 -0
- package/registry/blocks/whiteboard/README.md +179 -0
- package/registry/blocks/whiteboard/block.json +10 -0
- package/registry/blocks/whiteboard/demo.jsx +169 -0
- package/registry/blocks/whiteboard/index.js +6 -0
- package/registry/blocks/whiteboard/templates.js +150 -0
- package/registry/blocks/whiteboard/whiteboard.jsx +721 -0
- package/src/install.mjs +18 -0
- package/src/shadcn.mjs +171 -0
- package/templates/next/files/README.md +145 -11
- package/templates/next/files/app/globals.css +55 -4
- package/templates/next/files/check/run.mjs +3 -3
- package/templates/next/files/components/parts/fixture.jsx +1 -1
- package/templates/next/files/components/parts/sample.js +15 -0
- package/templates/next/files/components/ui/avatar.jsx +141 -0
- package/templates/next/files/components/ui/breadcrumb.jsx +149 -0
- package/templates/next/files/components/ui/button-group.jsx +70 -0
- package/templates/next/files/components/ui/button.jsx +132 -12
- package/templates/next/files/components/ui/calendar.jsx +609 -0
- package/templates/next/files/components/ui/carousel.jsx +281 -0
- package/templates/next/files/components/ui/collapsible.jsx +208 -0
- package/templates/next/files/components/ui/combobox.jsx +608 -0
- package/templates/next/files/components/ui/command.jsx +577 -0
- package/templates/next/files/components/ui/context-menu.jsx +191 -0
- package/templates/next/files/components/ui/date-picker.jsx +360 -0
- package/templates/next/files/components/ui/distribution.jsx +117 -0
- package/templates/next/files/components/ui/feedback.jsx +143 -0
- package/templates/next/files/components/ui/field.jsx +115 -3
- package/templates/next/files/components/ui/file-input.jsx +234 -0
- package/templates/next/files/components/ui/icon.jsx +130 -8
- package/templates/next/files/components/ui/image.jsx +143 -0
- package/templates/next/files/components/ui/index.js +47 -2
- package/templates/next/files/components/ui/input-group.jsx +213 -0
- package/templates/next/files/components/ui/input-otp.jsx +170 -0
- package/templates/next/files/components/ui/item.jsx +206 -0
- package/templates/next/files/components/ui/menu.jsx +454 -82
- package/templates/next/files/components/ui/notice.jsx +126 -14
- package/templates/next/files/components/ui/pagination.jsx +156 -0
- package/templates/next/files/components/ui/popover.jsx +284 -0
- package/templates/next/files/components/ui/radio.jsx +193 -0
- package/templates/next/files/components/ui/rating.jsx +131 -0
- package/templates/next/files/components/ui/resizable.jsx +338 -0
- package/templates/next/files/components/ui/scroll-area.jsx +123 -0
- package/templates/next/files/components/ui/separator.jsx +119 -0
- package/templates/next/files/components/ui/sheet.jsx +96 -11
- package/templates/next/files/components/ui/slider.jsx +174 -0
- package/templates/next/files/components/ui/stat.jsx +574 -0
- package/templates/next/files/components/ui/steps.jsx +338 -0
- package/templates/next/files/components/ui/swatch.jsx +33 -0
- package/templates/next/files/components/ui/table.jsx +130 -0
- package/templates/next/files/components/ui/toast.jsx +440 -0
- package/templates/next/files/components/ui/toggle.jsx +195 -0
- package/templates/next/files/components/ui/tooltip.jsx +270 -0
- package/templates/next/files/lib/sample.js +4 -12
- package/templates/next/template.json +264 -8
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useCallback, useRef, useState } from "react";
|
|
4
|
+
|
|
5
|
+
// The table's arithmetic, apart from its drawing: controlled-or-not
|
|
6
|
+
// state, and the pure pipeline rows go through (search → facets → sort →
|
|
7
|
+
// page). Pure functions, so a block built on DataTable (report-table)
|
|
8
|
+
// reads the same answers the table draws.
|
|
9
|
+
|
|
10
|
+
/** One piece of state that is the caller's when `value` is given, else
|
|
11
|
+
* the block's own. `onChange` is called either way. */
|
|
12
|
+
export function useControllable(value, defaultValue, onChange) {
|
|
13
|
+
const controlled = value !== undefined;
|
|
14
|
+
const [own, setOwn] = useState(defaultValue);
|
|
15
|
+
const current = controlled ? value : own;
|
|
16
|
+
const latest = useRef(current);
|
|
17
|
+
latest.current = current;
|
|
18
|
+
const set = useCallback(
|
|
19
|
+
(next) => {
|
|
20
|
+
const v = typeof next === "function" ? next(latest.current) : next;
|
|
21
|
+
latest.current = v;
|
|
22
|
+
if (!controlled) setOwn(v);
|
|
23
|
+
onChange?.(v);
|
|
24
|
+
},
|
|
25
|
+
[controlled, onChange],
|
|
26
|
+
);
|
|
27
|
+
return [current, set];
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const isBlank = (v) => v === null || v === undefined || v === "";
|
|
31
|
+
|
|
32
|
+
/** What a column holds for a row, for sorting. */
|
|
33
|
+
export function sortValueOf(column, row) {
|
|
34
|
+
return column.sortValue ? column.sortValue(row) : row?.[column.key];
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/** What a column says for a row, for the search. */
|
|
38
|
+
export function searchTextOf(column, row) {
|
|
39
|
+
const v = column.searchValue ? column.searchValue(row) : sortValueOf(column, row);
|
|
40
|
+
if (isBlank(v)) return "";
|
|
41
|
+
if (v instanceof Date) return v.toISOString();
|
|
42
|
+
return typeof v === "object" ? "" : String(v);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** The value a facet groups a row under (always a string key). */
|
|
46
|
+
export function facetValueOf(facet, row) {
|
|
47
|
+
const v = facet.value ? facet.value(row) : row?.[facet.key];
|
|
48
|
+
return isBlank(v) ? "" : String(v);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function compare(a, b) {
|
|
52
|
+
// Blanks sort last in either direction (the caller flips only non-blanks).
|
|
53
|
+
if (a instanceof Date) a = a.getTime();
|
|
54
|
+
if (b instanceof Date) b = b.getTime();
|
|
55
|
+
if (typeof a === "number" && typeof b === "number") return a - b;
|
|
56
|
+
if (typeof a === "boolean" && typeof b === "boolean") return Number(a) - Number(b);
|
|
57
|
+
return String(a).localeCompare(String(b), undefined, { numeric: true, sensitivity: "base" });
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/** Rows ordered by `sort` ([{ key, dir: "asc" | "desc" }], first wins). */
|
|
61
|
+
export function sortRows(rows, sort, columns) {
|
|
62
|
+
const keys = (sort ?? []).map((s) => ({ ...s, column: columns.find((c) => c.key === s.key) })).filter((s) => s.column);
|
|
63
|
+
if (keys.length === 0) return rows;
|
|
64
|
+
return rows
|
|
65
|
+
.map((row, i) => ({ row, i }))
|
|
66
|
+
.sort((x, y) => {
|
|
67
|
+
for (const { column, dir } of keys) {
|
|
68
|
+
const a = sortValueOf(column, x.row);
|
|
69
|
+
const b = sortValueOf(column, y.row);
|
|
70
|
+
const ba = isBlank(a);
|
|
71
|
+
const bb = isBlank(b);
|
|
72
|
+
if (ba || bb) {
|
|
73
|
+
if (ba && bb) continue;
|
|
74
|
+
return ba ? 1 : -1;
|
|
75
|
+
}
|
|
76
|
+
const c = compare(a, b);
|
|
77
|
+
if (c !== 0) return dir === "desc" ? -c : c;
|
|
78
|
+
}
|
|
79
|
+
return x.i - y.i; // stable
|
|
80
|
+
})
|
|
81
|
+
.map((x) => x.row);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/** Rows whose searchable columns contain every word of `query`. */
|
|
85
|
+
export function searchRows(rows, query, columns) {
|
|
86
|
+
const words = String(query ?? "").trim().toLowerCase().split(/\s+/).filter(Boolean);
|
|
87
|
+
if (words.length === 0) return rows;
|
|
88
|
+
const searchable = columns.filter((c) => c.searchable !== false);
|
|
89
|
+
return rows.filter((row) => {
|
|
90
|
+
const text = searchable.map((c) => searchTextOf(c, row)).join(" \u0001 ").toLowerCase();
|
|
91
|
+
return words.every((w) => text.includes(w));
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/** Rows that match every facet's chosen values (`filters`: { key: [v…] }).
|
|
96
|
+
* `except` leaves one facet out — its own counts are taken that way. */
|
|
97
|
+
export function filterRows(rows, filters, facets, except) {
|
|
98
|
+
const active = (facets ?? []).filter((f) => f.key !== except && (filters?.[f.key] ?? []).length > 0);
|
|
99
|
+
if (active.length === 0) return rows;
|
|
100
|
+
return rows.filter((row) => active.every((f) => filters[f.key].map(String).includes(facetValueOf(f, row))));
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/** A facet's options with how many rows each would show, counted over
|
|
104
|
+
* the rows the search and the OTHER facets leave. */
|
|
105
|
+
export function facetOptions(facet, rows, filters, facets, query, columns) {
|
|
106
|
+
const pool = filterRows(searchRows(rows, query, columns), filters, facets, facet.key);
|
|
107
|
+
const counts = new Map();
|
|
108
|
+
for (const row of pool) {
|
|
109
|
+
const v = facetValueOf(facet, row);
|
|
110
|
+
counts.set(v, (counts.get(v) ?? 0) + 1);
|
|
111
|
+
}
|
|
112
|
+
const given = facet.options?.map((o) => (typeof o === "object" ? { ...o, value: String(o.value) } : { value: String(o), label: String(o) }));
|
|
113
|
+
const all = given ?? [...new Set(rows.map((r) => facetValueOf(facet, r)))].sort((a, b) => compare(a, b)).map((v) => ({ value: v, label: v || "None" }));
|
|
114
|
+
return all.map((o) => ({ ...o, count: o.count ?? counts.get(o.value) ?? 0 }));
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/** Rows through search, facets and sort — the whole of client mode. */
|
|
118
|
+
export function processRows(rows, { query, filters, facets, sort, columns }) {
|
|
119
|
+
return sortRows(filterRows(searchRows(rows, query, columns), filters, facets), sort, columns);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/** The next sort after a press on `key`: plain press sorts by it alone
|
|
123
|
+
* (asc → desc → off); with `add` it joins or cycles within the list. */
|
|
124
|
+
export function nextSort(sort, key, add) {
|
|
125
|
+
const now = sort ?? [];
|
|
126
|
+
const at = now.find((s) => s.key === key);
|
|
127
|
+
const cycled = !at ? { key, dir: "asc" } : at.dir === "asc" ? { key, dir: "desc" } : null;
|
|
128
|
+
if (!add) return cycled ? [cycled] : [];
|
|
129
|
+
if (!at) return [...now, cycled];
|
|
130
|
+
return cycled ? now.map((s) => (s.key === key ? cycled : s)) : now.filter((s) => s.key !== key);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/** The value `groupBy` (a key or `(row) => value`) files a row under. */
|
|
134
|
+
export function groupValueOf(groupBy, row) {
|
|
135
|
+
const v = typeof groupBy === "function" ? groupBy(row) : row?.[groupBy];
|
|
136
|
+
return isBlank(v) ? "" : v;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/** The string a group is known by (its React key, its place in `order`). */
|
|
140
|
+
export function groupKeyOf(value) {
|
|
141
|
+
return value instanceof Date ? value.toISOString() : String(value ?? "");
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/** Rows filed under `groupBy`: [{ key, value, rows }]. Rows keep their
|
|
145
|
+
* order inside a group (sort first, then group: a sort orders rows
|
|
146
|
+
* within their groups and never moves a group). `order` places the
|
|
147
|
+
* groups: an array of group values (those listed first, in that order;
|
|
148
|
+
* the rest by first appearance in `rows`) or a compare function over
|
|
149
|
+
* two group values. */
|
|
150
|
+
export function groupRows(rows, groupBy, order) {
|
|
151
|
+
if (groupBy === undefined || groupBy === null || groupBy === false) return null;
|
|
152
|
+
const map = new Map();
|
|
153
|
+
for (const row of rows ?? []) {
|
|
154
|
+
const value = groupValueOf(groupBy, row);
|
|
155
|
+
const key = groupKeyOf(value);
|
|
156
|
+
let g = map.get(key);
|
|
157
|
+
if (!g) map.set(key, (g = { key, value, rows: [] }));
|
|
158
|
+
g.rows.push(row);
|
|
159
|
+
}
|
|
160
|
+
const groups = [...map.values()];
|
|
161
|
+
if (typeof order === "function") return groups.sort((a, b) => order(a.value, b.value));
|
|
162
|
+
if (!Array.isArray(order)) return groups;
|
|
163
|
+
const rank = new Map();
|
|
164
|
+
for (const v of order) if (!rank.has(groupKeyOf(v))) rank.set(groupKeyOf(v), rank.size);
|
|
165
|
+
return groups
|
|
166
|
+
.map((g, i) => ({ g, i }))
|
|
167
|
+
.sort((x, y) => (rank.get(x.g.key) ?? rank.size + x.i) - (rank.get(y.g.key) ?? rank.size + y.i))
|
|
168
|
+
.map((x) => x.g);
|
|
169
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# Diagram
|
|
2
|
+
|
|
3
|
+
Draws a diagram from [Mermaid](https://mermaid.js.org) text — flowcharts,
|
|
4
|
+
sequence diagrams, class and state diagrams, entity relationships, Gantt
|
|
5
|
+
charts, pies, mind maps, timelines, git graphs and the rest — in the
|
|
6
|
+
workspace theme. Nodes are soft tints of the primary and the chart hues on
|
|
7
|
+
the card, lines are muted, text is the theme's own face and ink, and it
|
|
8
|
+
follows light and dark.
|
|
9
|
+
|
|
10
|
+
It opens fitted to its frame. Zoom with the pill in the corner, with
|
|
11
|
+
Cmd/Ctrl+scroll (or a trackpad pinch) at the pointer, with two fingers on
|
|
12
|
+
a phone, or by double-clicking (Shift to zoom out); drag to move. A plain
|
|
13
|
+
scroll still scrolls the page. The Source tab shows the text with line
|
|
14
|
+
numbers; the ⋯ menu copies the source or the SVG and downloads the SVG.
|
|
15
|
+
|
|
16
|
+
A mistake says which line and what Mermaid expected, and shows the lines
|
|
17
|
+
around it. When an earlier version drew, that drawing stays up (dimmed)
|
|
18
|
+
under the message, so a diagram being written live never blanks out.
|
|
19
|
+
|
|
20
|
+
It is Mermaid (MIT) underneath. Mermaid needs concrete colours, so the
|
|
21
|
+
block reads each token from the page at run time (`--color-card`,
|
|
22
|
+
`--color-primary`, `--color-chart-1…5`, `--color-muted-foreground`…),
|
|
23
|
+
mixes the tints, and hands them to Mermaid as its theme; when the
|
|
24
|
+
workspace theme or light/dark changes it reads them again and redraws.
|
|
25
|
+
|
|
26
|
+
```jsx
|
|
27
|
+
import { Diagram } from "../components/blocks/diagram"; // a Makersclaw app ("./blocks/diagram" from components/)
|
|
28
|
+
import { Diagram } from "@/components/makersclaw/blocks/diagram"; // a shadcn project
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
`Diagram` is a client component: render it from a `"use client"`
|
|
32
|
+
component. `makersclaw add diagram` adds `mermaid` (pinned, exact) to
|
|
33
|
+
package.json: run `npm install` after. It loads with the page (no
|
|
34
|
+
`import()`); the drawing happens after the first render, and until then —
|
|
35
|
+
on the server — the frame shows the Mermaid text.
|
|
36
|
+
|
|
37
|
+
## Props
|
|
38
|
+
|
|
39
|
+
- `source` — the Mermaid text. Required (an empty string shows "No
|
|
40
|
+
diagram yet"). Change it and the diagram redraws a moment after the
|
|
41
|
+
last change, so it can follow someone typing.
|
|
42
|
+
- `title` — the frame's heading. Without it: the diagram's own `title`
|
|
43
|
+
line, else its kind ("Flowchart", "Sequence diagram"…).
|
|
44
|
+
- `label` — what a screen reader calls the diagram (default: the title
|
|
45
|
+
and kind). Say what it shows: "Order flow from cart to delivery".
|
|
46
|
+
- `height` — a fixed canvas height (px number or CSS length). Without it
|
|
47
|
+
the canvas is as tall as the drawing at the frame's width, between
|
|
48
|
+
`minHeight` (160) and `maxHeight` (560).
|
|
49
|
+
- `look` — `"classic"` (default), `"neo"` (Mermaid's newer, lighter
|
|
50
|
+
shapes) or `"handDrawn"` (a sketchy line, for early ideas).
|
|
51
|
+
- `toolbar` — `true` (default): the heading, Diagram/Source and the ⋯
|
|
52
|
+
menu. `false` leaves the canvas and its zoom pill only.
|
|
53
|
+
- `onRender(result)` — after each drawing: `{ ok: true, svg }` or
|
|
54
|
+
`{ ok: false, error: { line, message, detail } }`. Pair it with a
|
|
55
|
+
`code-editor` to mark the line: `diagnostics={[{ line, message }]}`.
|
|
56
|
+
- `className` — the frame's classes.
|
|
57
|
+
|
|
58
|
+
### Keys
|
|
59
|
+
|
|
60
|
+
On the focused canvas: `+` / `-` zoom · `0` fit · `1` actual size ·
|
|
61
|
+
arrows move (Shift for bigger steps).
|
|
62
|
+
|
|
63
|
+
## The helpers
|
|
64
|
+
|
|
65
|
+
Plain functions, on the server too.
|
|
66
|
+
|
|
67
|
+
- `diagramKind(source)` → `"Flowchart"`, `"Gantt chart"`… or null.
|
|
68
|
+
- `diagramTitle(source)` → its `title`, or null.
|
|
69
|
+
- `describeError(error, source)` → `{ line, message, detail }` for a
|
|
70
|
+
Mermaid error.
|
|
71
|
+
- `mermaidTheme(palette, { fontFamily })` → Mermaid `themeVariables`
|
|
72
|
+
from `{ card, foreground, primary, "chart-1"…, … }` hex colours.
|
|
73
|
+
|
|
74
|
+
## Example
|
|
75
|
+
|
|
76
|
+
```jsx
|
|
77
|
+
"use client";
|
|
78
|
+
import { Diagram } from "../components/blocks/diagram";
|
|
79
|
+
|
|
80
|
+
const ONBOARDING = `flowchart LR
|
|
81
|
+
signup([Sign-up]) --> verify{Email verified?}
|
|
82
|
+
verify -- yes --> workspace[Create workspace]
|
|
83
|
+
verify -- no --> remind[Send reminder] --> verify
|
|
84
|
+
workspace --> invite[Invite team] --> done([First project])`;
|
|
85
|
+
|
|
86
|
+
export function OnboardingFlow() {
|
|
87
|
+
return <Diagram title="Onboarding" source={ONBOARDING} label="Onboarding flow from sign-up to first project" />;
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
A live editor, with the mistake marked in the text:
|
|
92
|
+
|
|
93
|
+
```jsx
|
|
94
|
+
const [text, setText] = useState(ONBOARDING);
|
|
95
|
+
const [problem, setProblem] = useState([]);
|
|
96
|
+
<CodeEditor value={text} onChange={setText} diagnostics={problem} />
|
|
97
|
+
<Diagram source={text} onRender={(r) => setProblem(r.ok || !r.error.line ? [] : [{ line: r.error.line, message: r.error.detail ?? r.error.message }])} />
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## What it will not do
|
|
101
|
+
|
|
102
|
+
- It draws; it does not edit. People change a diagram by changing its
|
|
103
|
+
text (put a `code-editor` beside it).
|
|
104
|
+
- No clicks or links inside the drawing: Mermaid runs in its strict
|
|
105
|
+
mode, so `click` lines and HTML in labels are dropped.
|
|
106
|
+
- Colours in the text (`style`, `classDef … fill:#…`) are Mermaid's,
|
|
107
|
+
not the theme's; leave them out and the theme paints everything.
|
|
108
|
+
- PNG export is not built in; Download SVG is.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "diagram",
|
|
3
|
+
"title": "Diagram",
|
|
4
|
+
"description": "Draws Mermaid text (flowcharts, sequence, class, state, ER, Gantt, pie, mind maps, timelines, git graphs…) in the workspace theme: the tokens are read from the page at run time and handed to Mermaid, so nodes, lines, text and chart colours are the theme's and follow light/dark. Zoom and pan (buttons, Cmd/Ctrl+scroll, pinch, drag, keys), fit to view, a Source tab with line numbers, copy the source or the SVG, download SVG. A mistake shows its line and Mermaid's words, and keeps the last drawing that worked. On the server the frame shows the Mermaid text.",
|
|
5
|
+
"useWhen": "A screen shows a diagram written as text: a process or decision flow an agent wrote, a sequence of API calls, a data model, a project timeline, an org or system sketch in docs, a mind map. Not for a board people arrange by hand (flow-canvas), freehand drawing (sketch-canvas), or charts of numbers (chart).",
|
|
6
|
+
"tags": ["diagram", "mermaid", "flowchart", "sequence diagram", "er diagram", "gantt", "mind map", "timeline", "state diagram", "class diagram", "svg", "zoom", "docs", "architecture"],
|
|
7
|
+
"exports": ["Diagram", "diagramKind", "diagramTitle", "describeError", "mermaidTheme"],
|
|
8
|
+
"files": ["index.js", "diagram.jsx", "mermaid.js", "palette.js", "source.js"],
|
|
9
|
+
"requires": [],
|
|
10
|
+
"dependencies": {
|
|
11
|
+
"mermaid": "12.0.0"
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// Diagram four ways — the gallery's and the smoke test's surface. Not
|
|
4
|
+
// installed into apps.
|
|
5
|
+
// Flow a lead-routing flowchart, fitted to its frame.
|
|
6
|
+
// Sequence a checkout's calls between services.
|
|
7
|
+
// Plan a launch plan as a Gantt chart.
|
|
8
|
+
// Live type Mermaid, watch it draw; break it to see the mistake
|
|
9
|
+
// marked while the last good drawing stays up.
|
|
10
|
+
import { useState } from "react";
|
|
11
|
+
import { Field, TabPanel, Tabs, Textarea } from "../components/ui";
|
|
12
|
+
import { Diagram } from "../components/blocks/diagram";
|
|
13
|
+
|
|
14
|
+
const LEAD_ROUTING = `flowchart LR
|
|
15
|
+
form([Demo request]) --> enrich[Enrich company]
|
|
16
|
+
enrich --> size{Employees}
|
|
17
|
+
size -- "under 50" --> self[Self-serve trial]
|
|
18
|
+
size -- "50 to 500" --> ae[Account executive]
|
|
19
|
+
size -- "over 500" --> ent[Enterprise team]
|
|
20
|
+
ae --> meeting[Book intro call]
|
|
21
|
+
ent --> meeting
|
|
22
|
+
self --> nurture[Nurture emails]
|
|
23
|
+
meeting --> crm[(CRM)]
|
|
24
|
+
nurture --> crm`;
|
|
25
|
+
|
|
26
|
+
const CHECKOUT = `sequenceDiagram
|
|
27
|
+
autonumber
|
|
28
|
+
actor Buyer
|
|
29
|
+
participant Shop as Storefront
|
|
30
|
+
participant Pay as Payments
|
|
31
|
+
participant Stock as Inventory
|
|
32
|
+
Buyer->>Shop: Place order
|
|
33
|
+
Shop->>Stock: Reserve items
|
|
34
|
+
Stock-->>Shop: Reserved
|
|
35
|
+
Shop->>Pay: Charge card
|
|
36
|
+
alt card accepted
|
|
37
|
+
Pay-->>Shop: Paid
|
|
38
|
+
Shop-->>Buyer: Order confirmed
|
|
39
|
+
else card declined
|
|
40
|
+
Pay-->>Shop: Declined
|
|
41
|
+
Shop->>Stock: Release items
|
|
42
|
+
Shop-->>Buyer: Try another card
|
|
43
|
+
end
|
|
44
|
+
Note over Shop,Stock: Reservations expire after 15 minutes`;
|
|
45
|
+
|
|
46
|
+
const LAUNCH = `gantt
|
|
47
|
+
title Spring launch
|
|
48
|
+
dateFormat YYYY-MM-DD
|
|
49
|
+
axisFormat %b %d
|
|
50
|
+
section Product
|
|
51
|
+
Beta feedback :done, beta, 2026-03-02, 10d
|
|
52
|
+
Pricing page :active, price, after beta, 6d
|
|
53
|
+
Release :milestone, rel, 2026-03-27, 0d
|
|
54
|
+
section Marketing
|
|
55
|
+
Launch post :post, 2026-03-16, 8d
|
|
56
|
+
Customer webinar :crit, web, 2026-03-24, 3d
|
|
57
|
+
section Sales
|
|
58
|
+
Enablement :enable, 2026-03-12, 7d`;
|
|
59
|
+
|
|
60
|
+
const STARTER = `flowchart TD
|
|
61
|
+
idea[Idea] --> spec[Write a one-pager]
|
|
62
|
+
spec --> review{Team agrees?}
|
|
63
|
+
review -- yes --> build[Build it]
|
|
64
|
+
review -- not yet --> spec`;
|
|
65
|
+
|
|
66
|
+
function LiveDemo() {
|
|
67
|
+
const [text, setText] = useState(STARTER);
|
|
68
|
+
const [status, setStatus] = useState(null);
|
|
69
|
+
return (
|
|
70
|
+
<div className="grid gap-4 lg:grid-cols-2">
|
|
71
|
+
<Field
|
|
72
|
+
id="diagram-live-text"
|
|
73
|
+
label="Mermaid"
|
|
74
|
+
hint="Try adding a line: build --> ship[Ship it]"
|
|
75
|
+
error={status && !status.ok ? `${status.error.message}. ${status.error.detail ?? ""}` : undefined}
|
|
76
|
+
>
|
|
77
|
+
<Textarea id="diagram-live-text" value={text} onChange={(e) => setText(e.target.value)} rows={10} invalid={status ? !status.ok : false} className="font-mono" spellCheck={false} />
|
|
78
|
+
</Field>
|
|
79
|
+
<Diagram source={text} title="Your diagram" onRender={setStatus} minHeight={240} />
|
|
80
|
+
</div>
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export default function DiagramDemo() {
|
|
85
|
+
const [tab, setTab] = useState("flow");
|
|
86
|
+
return (
|
|
87
|
+
<div className="mx-auto w-full max-w-4xl">
|
|
88
|
+
<Tabs
|
|
89
|
+
aria-label="Examples"
|
|
90
|
+
tabs={[
|
|
91
|
+
{ key: "flow", label: "Flow" },
|
|
92
|
+
{ key: "sequence", label: "Sequence" },
|
|
93
|
+
{ key: "plan", label: "Plan" },
|
|
94
|
+
{ key: "live", label: "Live" },
|
|
95
|
+
]}
|
|
96
|
+
value={tab}
|
|
97
|
+
onChange={setTab}
|
|
98
|
+
/>
|
|
99
|
+
<TabPanel tab="flow" value={tab}>
|
|
100
|
+
<Diagram title="Lead routing" source={LEAD_ROUTING} label="Lead routing: demo requests routed by company size to self-serve, an account executive or the enterprise team" />
|
|
101
|
+
</TabPanel>
|
|
102
|
+
<TabPanel tab="sequence" value={tab}>
|
|
103
|
+
<Diagram title="Checkout" source={CHECKOUT} />
|
|
104
|
+
</TabPanel>
|
|
105
|
+
<TabPanel tab="plan" value={tab}>
|
|
106
|
+
<Diagram source={LAUNCH} />
|
|
107
|
+
</TabPanel>
|
|
108
|
+
<TabPanel tab="live" value={tab}>
|
|
109
|
+
<LiveDemo />
|
|
110
|
+
</TabPanel>
|
|
111
|
+
</div>
|
|
112
|
+
);
|
|
113
|
+
}
|