makersclaw 0.2.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/THIRD-PARTY-NOTICES.md +180 -0
- package/package.json +3 -2
- 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 +10 -6
- 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 +205 -8
- 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 +12 -7
- 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 +3411 -29
- 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 +55 -5
- package/registry/blocks/board/block.json +2 -2
- package/registry/blocks/board/board.jsx +230 -86
- 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 +80 -0
- 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/cli.mjs +19 -6
- package/src/install.mjs +18 -0
- package/src/registry.mjs +38 -4
- package/src/shadcn.mjs +14 -1
- 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/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/template.json +264 -8
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useEffect, useRef } from "react";
|
|
4
|
-
import { Button, Icon, cx } from "../../ui";
|
|
3
|
+
import { useEffect, useId, useRef, useState } from "react";
|
|
4
|
+
import { Button, Card, Empty, Field, Icon, Skeleton, Textarea, cx } from "../../ui";
|
|
5
5
|
|
|
6
6
|
// JobPanel — the panel that follows work the founder asked the app's
|
|
7
7
|
// agent for (useJob in lib/hooks.js, README §5 "Commissioning work"). It
|
|
@@ -13,6 +13,17 @@ import { Button, Icon, cx } from "../../ui";
|
|
|
13
13
|
// const job = useJob();
|
|
14
14
|
// <Button onClick={() => job.start("Draft a launch plan for Rowhouse")}>Generate a launch plan</Button>
|
|
15
15
|
// <JobPanel job={job} title="Drafting the launch plan" doneTitle="Launch plan drafted" />
|
|
16
|
+
//
|
|
17
|
+
// variant="generator" is the same panel inside a small studio: a prompt,
|
|
18
|
+
// the surface's own options, Generate, then the results the job made. The
|
|
19
|
+
// block never calls a model and takes no API key or provider: Generate
|
|
20
|
+
// hands the prompt to the app's agent (job.start, or `onGenerate`), and
|
|
21
|
+
// the results are the rows the job wrote, passed back in as `results`.
|
|
22
|
+
//
|
|
23
|
+
// <JobPanel variant="generator" job={job} promptLabel="Describe the photo"
|
|
24
|
+
// options={<Field …><Select …/></Field>}
|
|
25
|
+
// onGenerate={(prompt) => job.start(`Make a product photo: ${prompt}. Size ${size}.`)}
|
|
26
|
+
// results={photos.map((p) => <PhotoCard key={p.id} photo={p} />)} />
|
|
16
27
|
|
|
17
28
|
function StepMark({ status }) {
|
|
18
29
|
if (status === "done") return <Icon name="check" size={14} className="shrink-0 text-success" />;
|
|
@@ -20,7 +31,12 @@ function StepMark({ status }) {
|
|
|
20
31
|
return <span aria-hidden="true" className="mx-[3px] size-2 shrink-0 animate-pulse rounded-full bg-primary" />;
|
|
21
32
|
}
|
|
22
33
|
|
|
23
|
-
export function JobPanel({
|
|
34
|
+
export function JobPanel({ variant = "panel", ...props }) {
|
|
35
|
+
if (variant === "generator") return <Generator {...props} />;
|
|
36
|
+
return <Panel {...props} />;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function Panel({
|
|
24
40
|
job,
|
|
25
41
|
title = "Working on it",
|
|
26
42
|
doneTitle = "Done",
|
|
@@ -108,3 +124,153 @@ export function JobPanel({
|
|
|
108
124
|
</section>
|
|
109
125
|
);
|
|
110
126
|
}
|
|
127
|
+
|
|
128
|
+
const isEmpty = (node) => node == null || node === false || node === "" || (Array.isArray(node) && node.filter(Boolean).length === 0);
|
|
129
|
+
|
|
130
|
+
// The generator: a form (prompt, options, Generate), the running job's
|
|
131
|
+
// panel under it, and the results. Stacked, or side by side from lg up.
|
|
132
|
+
function Generator({
|
|
133
|
+
job,
|
|
134
|
+
prompt: controlled,
|
|
135
|
+
defaultPrompt = "",
|
|
136
|
+
onPromptChange,
|
|
137
|
+
onGenerate,
|
|
138
|
+
heading,
|
|
139
|
+
description,
|
|
140
|
+
promptLabel = "What should it make?",
|
|
141
|
+
placeholder = "Describe what you want…",
|
|
142
|
+
promptHint,
|
|
143
|
+
promptRows = 4,
|
|
144
|
+
options,
|
|
145
|
+
generateLabel = "Generate",
|
|
146
|
+
generateIcon = "wand",
|
|
147
|
+
canGenerateEmpty = false,
|
|
148
|
+
disabled = false,
|
|
149
|
+
aside,
|
|
150
|
+
results,
|
|
151
|
+
resultsTitle = "Results",
|
|
152
|
+
resultsActions,
|
|
153
|
+
resultsColumns = 1,
|
|
154
|
+
placeholderResult,
|
|
155
|
+
emptyTitle = "Nothing made yet",
|
|
156
|
+
emptyBody = "Describe what you want and press Generate. What it makes lands here.",
|
|
157
|
+
emptyState,
|
|
158
|
+
layout = "stacked",
|
|
159
|
+
title = "Working on it",
|
|
160
|
+
doneTitle = "Done",
|
|
161
|
+
failedTitle = "It stopped",
|
|
162
|
+
onRetry,
|
|
163
|
+
autoClose = 6000,
|
|
164
|
+
maxSteps = 6,
|
|
165
|
+
showText = true,
|
|
166
|
+
className,
|
|
167
|
+
}) {
|
|
168
|
+
const id = useId();
|
|
169
|
+
const [own, setOwn] = useState(defaultPrompt);
|
|
170
|
+
const [error, setError] = useState(null);
|
|
171
|
+
const [starting, setStarting] = useState(false);
|
|
172
|
+
const lastPrompt = useRef("");
|
|
173
|
+
const value = controlled ?? own;
|
|
174
|
+
const setValue = (v) => {
|
|
175
|
+
if (controlled === undefined) setOwn(v);
|
|
176
|
+
onPromptChange?.(v);
|
|
177
|
+
};
|
|
178
|
+
const running = Boolean(job?.running);
|
|
179
|
+
const canGenerate = !disabled && !running && !starting && (canGenerateEmpty || value.trim().length > 0);
|
|
180
|
+
|
|
181
|
+
async function generate(text = value) {
|
|
182
|
+
if (disabled || running || starting || (!canGenerateEmpty && !text.trim())) return;
|
|
183
|
+
lastPrompt.current = text.trim();
|
|
184
|
+
setError(null);
|
|
185
|
+
setStarting(true);
|
|
186
|
+
let r;
|
|
187
|
+
try {
|
|
188
|
+
r = onGenerate ? await onGenerate(text.trim()) : await job?.start?.(text.trim());
|
|
189
|
+
} catch (e) {
|
|
190
|
+
r = { ok: false, error: e?.message ?? String(e) };
|
|
191
|
+
}
|
|
192
|
+
setStarting(false);
|
|
193
|
+
if (r && r.ok === false && !r.aborted) setError(r.error ?? "It did not start");
|
|
194
|
+
}
|
|
195
|
+
// useJob's start resolves when the job ends; a failure it reports is
|
|
196
|
+
// already the panel's error, so the field says only what the panel does not.
|
|
197
|
+
const fieldError = error && !job?.error ? error : null;
|
|
198
|
+
|
|
199
|
+
const cols = { 1: "grid-cols-1", 2: "grid-cols-1 sm:grid-cols-2", 3: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3", 4: "grid-cols-2 lg:grid-cols-4" };
|
|
200
|
+
const empty = isEmpty(results);
|
|
201
|
+
const split = layout === "split";
|
|
202
|
+
|
|
203
|
+
const form = (
|
|
204
|
+
<Card title={heading} description={description} className="min-w-0">
|
|
205
|
+
<div className="grid gap-4">
|
|
206
|
+
<Field id={id} label={promptLabel} hint={promptHint} error={fieldError ?? undefined}>
|
|
207
|
+
<Textarea
|
|
208
|
+
id={id}
|
|
209
|
+
rows={promptRows}
|
|
210
|
+
value={value}
|
|
211
|
+
placeholder={placeholder}
|
|
212
|
+
disabled={disabled}
|
|
213
|
+
invalid={Boolean(fieldError)}
|
|
214
|
+
aria-describedby={fieldError ? `${id}-error` : promptHint ? `${id}-hint` : undefined}
|
|
215
|
+
onChange={(e) => setValue(e.target.value)}
|
|
216
|
+
onKeyDown={(e) => {
|
|
217
|
+
// Cmd/Ctrl+Enter generates; Enter alone is a new line.
|
|
218
|
+
if (e.key === "Enter" && (e.metaKey || e.ctrlKey) && !e.nativeEvent.isComposing) {
|
|
219
|
+
e.preventDefault();
|
|
220
|
+
generate();
|
|
221
|
+
}
|
|
222
|
+
}}
|
|
223
|
+
/>
|
|
224
|
+
</Field>
|
|
225
|
+
{options ? <div className="grid gap-4 sm:grid-cols-2">{options}</div> : null}
|
|
226
|
+
<div className="flex flex-wrap items-center gap-3">
|
|
227
|
+
<Button variant="primary" icon={running || starting ? undefined : generateIcon} loading={starting} disabled={!canGenerate} onClick={() => generate()}>
|
|
228
|
+
{running ? "Working…" : generateLabel}
|
|
229
|
+
</Button>
|
|
230
|
+
<p aria-hidden="true" className="hidden text-xs text-muted-foreground md:block">
|
|
231
|
+
⌘/Ctrl + Enter
|
|
232
|
+
</p>
|
|
233
|
+
</div>
|
|
234
|
+
<Panel
|
|
235
|
+
job={job}
|
|
236
|
+
title={title}
|
|
237
|
+
doneTitle={doneTitle}
|
|
238
|
+
failedTitle={failedTitle}
|
|
239
|
+
onRetry={onRetry ?? (lastPrompt.current || canGenerateEmpty ? () => generate(lastPrompt.current) : undefined)}
|
|
240
|
+
autoClose={autoClose}
|
|
241
|
+
maxSteps={maxSteps}
|
|
242
|
+
showText={showText}
|
|
243
|
+
/>
|
|
244
|
+
</div>
|
|
245
|
+
</Card>
|
|
246
|
+
);
|
|
247
|
+
|
|
248
|
+
const shelf = (
|
|
249
|
+
<section aria-label={resultsTitle} aria-busy={running || undefined} className="grid min-w-0 content-start gap-3">
|
|
250
|
+
<div className="flex min-h-9 items-center justify-between gap-3">
|
|
251
|
+
<h3 className="text-sm font-semibold">{resultsTitle}</h3>
|
|
252
|
+
{resultsActions ? <div className="flex shrink-0 items-center gap-2">{resultsActions}</div> : null}
|
|
253
|
+
</div>
|
|
254
|
+
{running ? (
|
|
255
|
+
<div className={cx("grid gap-3", cols[resultsColumns] ?? cols[1])}>
|
|
256
|
+
{placeholderResult ?? <Skeleton shape="rect" className="h-32 w-full" />}
|
|
257
|
+
</div>
|
|
258
|
+
) : null}
|
|
259
|
+
{empty ? (
|
|
260
|
+
running ? null : emptyState ?? <Empty icon="sparkles" title={emptyTitle} body={emptyBody} className="rounded-lg border border-dashed border-border" />
|
|
261
|
+
) : (
|
|
262
|
+
<div className={cx("grid gap-3", cols[resultsColumns] ?? cols[1])}>{results}</div>
|
|
263
|
+
)}
|
|
264
|
+
</section>
|
|
265
|
+
);
|
|
266
|
+
|
|
267
|
+
return (
|
|
268
|
+
<div className={cx("grid gap-4", split && "lg:grid-cols-[minmax(0,2fr)_minmax(0,3fr)] lg:items-start", className)}>
|
|
269
|
+
<div className="grid min-w-0 gap-4">
|
|
270
|
+
{form}
|
|
271
|
+
{aside}
|
|
272
|
+
</div>
|
|
273
|
+
{shelf}
|
|
274
|
+
</div>
|
|
275
|
+
);
|
|
276
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# JsonEditor
|
|
2
|
+
|
|
3
|
+
A JSON editor with two views of one value. **Tree** shows it as folding
|
|
4
|
+
rows: double-click a value to edit it, double-click a key to rename it,
|
|
5
|
+
`+` adds a key or an item, and each row's ⋯ menu copies its path
|
|
6
|
+
(`deal.owner.email`) or value, changes its type, or deletes it — with Undo
|
|
7
|
+
in a toast. **Code** is the text, in the `code-editor` block's JSON mode.
|
|
8
|
+
|
|
9
|
+
It is checked as it changes. The status line under the title says
|
|
10
|
+
`Valid JSON · 5 keys`, or what is wrong in plain words and where —
|
|
11
|
+
`Line 4: A comma is missing before this` — and clicking it opens the Code
|
|
12
|
+
view at that spot. While the text does not parse the last valid value
|
|
13
|
+
stands and the Tree view waits. Format lays the text out again (keys,
|
|
14
|
+
order and numbers as written); the ⋯ menu copies it pretty or on one
|
|
15
|
+
line, and expands or collapses the tree. Empty, it offers a new object, a
|
|
16
|
+
new list, or a place to paste.
|
|
17
|
+
|
|
18
|
+
Built on `code-editor` (which `add` installs with it); it never imports
|
|
19
|
+
CodeMirror itself.
|
|
20
|
+
|
|
21
|
+
```jsx
|
|
22
|
+
import { JsonEditor } from "../components/blocks/json-editor"; // a Makersclaw app ("./blocks/json-editor" from components/)
|
|
23
|
+
import { JsonEditor } from "@/components/makersclaw/blocks/json-editor"; // a shadcn project
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
`JsonEditor` is a client component: render it from a `"use client"`
|
|
27
|
+
component. The tree helpers (`getAt`, `setAt`, `pathLabel`…) are plain
|
|
28
|
+
functions and work on the server too.
|
|
29
|
+
|
|
30
|
+
## The data
|
|
31
|
+
|
|
32
|
+
A plain JSON value: an object, a list, text, a number, true/false or null
|
|
33
|
+
— what `JSON.parse` gives and a `jsonb` column stores. The editor hands
|
|
34
|
+
back a new value on every valid edit and never changes the one you gave
|
|
35
|
+
it.
|
|
36
|
+
|
|
37
|
+
Two things JavaScript does to any JSON value, here too: keys that look
|
|
38
|
+
like whole numbers (`"2"`) come first in an object, and numbers past 2^53
|
|
39
|
+
lose precision. The Code view's text keeps both as typed until it is
|
|
40
|
+
edited from the Tree.
|
|
41
|
+
|
|
42
|
+
## Props
|
|
43
|
+
|
|
44
|
+
- `value` — the JSON value, controlled. A new `value` that is not what
|
|
45
|
+
the editor last sent through `onChange` is another record: it replaces
|
|
46
|
+
the text, the folds and the saved state.
|
|
47
|
+
- `defaultValue` — the starting value, uncontrolled. With neither, the
|
|
48
|
+
editor starts empty.
|
|
49
|
+
- `onChange(value)` — every valid edit, with the whole value. A keystroke
|
|
50
|
+
that leaves the text broken sends nothing.
|
|
51
|
+
- `onSave(value) → { ok, error? }` — optional, may be async. Shows a Save
|
|
52
|
+
button (and Cmd/Ctrl+S) that is live when there are valid unsaved
|
|
53
|
+
changes. It is optimistic: the status says Saved at once; `{ ok: false,
|
|
54
|
+
error }` (or a throw) puts "Unsaved changes" back and shows `error` in a
|
|
55
|
+
notice with Try again. Without `onSave`, save through `onChange`
|
|
56
|
+
yourself.
|
|
57
|
+
- `view` / `defaultView` — `"tree"` (default) or `"code"`, controlled or
|
|
58
|
+
not; `onViewChange(view)` hears the toggle.
|
|
59
|
+
- `readOnly` — `false` (default). `true`: the tree only folds and copies,
|
|
60
|
+
the text only selects and copies.
|
|
61
|
+
- `title` — a heading above the status line ("Webhook payload").
|
|
62
|
+
- `expandDepth` — how many levels the tree opens with, default `2`
|
|
63
|
+
(`0` shows only the top level).
|
|
64
|
+
- `height` — a fixed height (px number or CSS length) for both views.
|
|
65
|
+
Without it they grow to `maxHeight` (480), then scroll.
|
|
66
|
+
- `placeholder` — the empty Code view's hint.
|
|
67
|
+
- `label` — what a screen reader calls the tree and the editor (default:
|
|
68
|
+
`title`, else "JSON").
|
|
69
|
+
- `className` — the frame's classes.
|
|
70
|
+
|
|
71
|
+
### Keys
|
|
72
|
+
|
|
73
|
+
In the tree (one Tab stop): ↑ ↓ move · → open, then into it · ← close,
|
|
74
|
+
then to the parent · Home / End · Enter or Space opens a folder or edits a
|
|
75
|
+
value · F2 renames a key · Delete removes the row (Undo in the toast).
|
|
76
|
+
Editing: Enter keeps it, Esc puts it back. Cmd/Ctrl+S saves (with
|
|
77
|
+
`onSave`); the Code view keeps every `code-editor` key (Shift+Alt+F
|
|
78
|
+
formats).
|
|
79
|
+
|
|
80
|
+
### Editing a value
|
|
81
|
+
|
|
82
|
+
Text is edited bare (no quotes) and stays text. Anything else is read as
|
|
83
|
+
JSON: `42`, `true`, `null`, `[1, 2]`, `{"a": 1}`; what does not read stays
|
|
84
|
+
as text. To turn text into a number (or a list into an object…), use the
|
|
85
|
+
row's ⋯ → Change type, which keeps what it can.
|
|
86
|
+
|
|
87
|
+
## The helpers
|
|
88
|
+
|
|
89
|
+
`typeOf(v)`, `pathLabel(path)` (`["deal", "tags", 0]` → `deal.tags[0]`),
|
|
90
|
+
`getAt(root, path)`, `setAt(root, path, v)`, `removeAt(root, path)` →
|
|
91
|
+
`{ root, removed, index }`, `insertAt(root, parentPath, { key?, index?,
|
|
92
|
+
value })`, `renameKey(root, path, to)` → `{ root }` or `{ error }`,
|
|
93
|
+
`flattenTree(value, openIds)`, `expandedTo(value, depth)`, `summary(v)`
|
|
94
|
+
("3 keys"), `preview(v)`. Every edit returns a new root. `JsonTree` is the
|
|
95
|
+
tree on its own (`value`, `onEdit(next, { undo?, message? })`, `open`,
|
|
96
|
+
`setOpen`, `readOnly`) for a screen that wants rows without the frame.
|
|
97
|
+
|
|
98
|
+
## Example
|
|
99
|
+
|
|
100
|
+
```jsx
|
|
101
|
+
"use client";
|
|
102
|
+
import { useState } from "react";
|
|
103
|
+
import { JsonEditor } from "../components/blocks/json-editor";
|
|
104
|
+
import { saveIntegrationSettings } from "../lib/actions"; // your server action → { ok, error? }
|
|
105
|
+
|
|
106
|
+
export function WebhookSettings({ integration }) {
|
|
107
|
+
const [settings, setSettings] = useState(integration.settings);
|
|
108
|
+
return (
|
|
109
|
+
<JsonEditor
|
|
110
|
+
title="Webhook settings"
|
|
111
|
+
value={settings}
|
|
112
|
+
onChange={setSettings}
|
|
113
|
+
onSave={(v) => saveIntegrationSettings(integration.id, v)}
|
|
114
|
+
/>
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Inspect a payload, read-only, as text first:
|
|
120
|
+
|
|
121
|
+
```jsx
|
|
122
|
+
<JsonEditor title="Last delivery" value={delivery.body} readOnly defaultView="code" height={320} />
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## What it will not do
|
|
126
|
+
|
|
127
|
+
- No JSON Schema: it checks that the text is JSON, not that it has the
|
|
128
|
+
keys your app needs. Check that in `onSave` and return `{ ok: false,
|
|
129
|
+
error: "…" }`.
|
|
130
|
+
- No drag to reorder rows; order changes in the Code view.
|
|
131
|
+
- It does not diff two values or merge edits from two people.
|
|
132
|
+
- Very large documents (tens of thousands of rows) are better read in the
|
|
133
|
+
Code view; the tree draws every open row.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "json-editor",
|
|
3
|
+
"title": "JsonEditor",
|
|
4
|
+
"description": "A JSON editor in the workspace theme with two views of one value: a Tree of folding rows (edit a value or rename a key in place, add keys and items, change a type, copy a path, delete with Undo, arrow keys throughout) and Code (the code-editor block in JSON mode). Checked as it changes: the status line says what is wrong in plain words and which line, and clicking it goes there. A Format button, copy as pretty or one-line JSON, a friendly empty state with starters, and an optional Save that is optimistic and rolls back with a notice when it fails.",
|
|
5
|
+
"useWhen": "A screen edits or inspects a JSON value: an integration's settings, a webhook payload, a record's metadata or custom fields column (jsonb), an API response, feature flags. Not for editing SQL or other code (code-editor), a form of known fields (record-form), or a table of rows (data-table).",
|
|
6
|
+
"tags": ["json", "editor", "tree", "jsonb", "config", "settings", "payload", "webhook", "metadata", "validate", "format", "inspector", "key value"],
|
|
7
|
+
"exports": ["JsonEditor", "JsonTree", "typeOf", "pathLabel", "getAt", "setAt", "removeAt", "insertAt", "renameKey", "flattenTree", "expandedTo", "summary", "preview"],
|
|
8
|
+
"files": ["index.js", "json-editor.jsx", "json-tree.jsx", "tree.js"],
|
|
9
|
+
"requires": ["code-editor"]
|
|
10
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// JsonEditor three ways — the gallery's and the smoke test's surface. Not
|
|
4
|
+
// installed into apps.
|
|
5
|
+
// Settings an integration's settings, edited in the tree, saved through
|
|
6
|
+
// onSave (a switch makes the save fail, to show the rollback).
|
|
7
|
+
// Payload a webhook delivery, read-only, opened in the Code view.
|
|
8
|
+
// Empty nothing yet: the starters.
|
|
9
|
+
import { useState } from "react";
|
|
10
|
+
import { Switch, TabPanel, Tabs } from "../components/ui";
|
|
11
|
+
import { JsonEditor } from "../components/blocks/json-editor";
|
|
12
|
+
|
|
13
|
+
const HUBSPOT_SYNC = {
|
|
14
|
+
enabled: true,
|
|
15
|
+
direction: "two-way",
|
|
16
|
+
schedule: { every: 15, unit: "minutes", quiet_hours: ["22:00", "06:00"] },
|
|
17
|
+
objects: {
|
|
18
|
+
contacts: { match_on: "email", fields: ["first_name", "last_name", "title", "phone"] },
|
|
19
|
+
companies: { match_on: "domain", fields: ["name", "industry", "employees"] },
|
|
20
|
+
deals: { match_on: "external_id", stages: { qualified: "appointmentscheduled", proposal: "presentationscheduled", won: "closedwon" } },
|
|
21
|
+
},
|
|
22
|
+
owner_map: { "priya@acme-sales.co": 51023, "marcus@acme-sales.co": 51087 },
|
|
23
|
+
notify: { channel: "#revops", on: ["error", "conflict"] },
|
|
24
|
+
retry_limit: 3,
|
|
25
|
+
last_error: null,
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
const DELIVERY = {
|
|
29
|
+
id: "evt_2Qk81",
|
|
30
|
+
type: "invoice.paid",
|
|
31
|
+
created: "2026-09-21T09:14:52Z",
|
|
32
|
+
livemode: false,
|
|
33
|
+
data: {
|
|
34
|
+
invoice: {
|
|
35
|
+
number: "INV-2041",
|
|
36
|
+
customer: { name: "Northwind Traders", email: "billing@northwind.example" },
|
|
37
|
+
lines: [
|
|
38
|
+
{ description: "Growth plan — annual", quantity: 1, amount: 4800 },
|
|
39
|
+
{ description: "Extra seats", quantity: 6, amount: 540 },
|
|
40
|
+
],
|
|
41
|
+
total: 5340,
|
|
42
|
+
currency: "usd",
|
|
43
|
+
paid: true,
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
function SettingsDemo() {
|
|
49
|
+
const [value, setValue] = useState(HUBSPOT_SYNC);
|
|
50
|
+
const [fail, setFail] = useState(false);
|
|
51
|
+
return (
|
|
52
|
+
<div className="grid gap-3">
|
|
53
|
+
<Switch id="json-fail" label="Make saves fail" checked={fail} onChange={(e) => setFail(e.target.checked)} />
|
|
54
|
+
<JsonEditor
|
|
55
|
+
title="HubSpot sync settings"
|
|
56
|
+
value={value}
|
|
57
|
+
onChange={setValue}
|
|
58
|
+
onSave={async () => {
|
|
59
|
+
await new Promise((r) => setTimeout(r, 600));
|
|
60
|
+
return fail ? { ok: false, error: "HubSpot rejected the owner map: 51087 is not a user in this portal." } : { ok: true };
|
|
61
|
+
}}
|
|
62
|
+
/>
|
|
63
|
+
</div>
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export default function JsonEditorDemo() {
|
|
68
|
+
const [tab, setTab] = useState("settings");
|
|
69
|
+
return (
|
|
70
|
+
<div className="mx-auto w-full max-w-3xl">
|
|
71
|
+
<Tabs
|
|
72
|
+
aria-label="Examples"
|
|
73
|
+
tabs={[
|
|
74
|
+
{ key: "settings", label: "Settings" },
|
|
75
|
+
{ key: "payload", label: "Payload" },
|
|
76
|
+
{ key: "empty", label: "Empty" },
|
|
77
|
+
]}
|
|
78
|
+
value={tab}
|
|
79
|
+
onChange={setTab}
|
|
80
|
+
/>
|
|
81
|
+
<TabPanel tab="settings" value={tab}>
|
|
82
|
+
<SettingsDemo />
|
|
83
|
+
</TabPanel>
|
|
84
|
+
<TabPanel tab="payload" value={tab}>
|
|
85
|
+
<JsonEditor title="Last delivery · invoice.paid" defaultValue={DELIVERY} readOnly defaultView="code" height={360} />
|
|
86
|
+
</TabPanel>
|
|
87
|
+
<TabPanel tab="empty" value={tab}>
|
|
88
|
+
<JsonEditor title="Custom fields" />
|
|
89
|
+
</TabPanel>
|
|
90
|
+
</div>
|
|
91
|
+
);
|
|
92
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// The JsonEditor block — `makersclaw add json-editor`. Fixed: compose it
|
|
2
|
+
// through its props (README.md beside this file). Built on code-editor:
|
|
3
|
+
// the Code view is a CodeEditor in JSON mode. The tree helpers are plain
|
|
4
|
+
// functions of plain values and run anywhere, the server included.
|
|
5
|
+
export { JsonEditor } from "./json-editor";
|
|
6
|
+
export { JsonTree } from "./json-tree";
|
|
7
|
+
export { typeOf, pathLabel, getAt, setAt, removeAt, insertAt, renameKey, flattenTree, expandedTo, summary, preview } from "./tree";
|