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,307 @@
|
|
|
1
|
+
# Spreadsheet
|
|
2
|
+
|
|
3
|
+
A table you edit like Google Sheets or Airtable. Click a cell and type;
|
|
4
|
+
Enter edits, Tab and the arrows move, Shift extends a range, ⌘C / ⌘V copy
|
|
5
|
+
and paste ranges to and from Sheets and Excel, drag the small square at a
|
|
6
|
+
range's corner to fill down, ⌘Z undoes. Every column has a type — text,
|
|
7
|
+
number, currency, date, single select, multiple select, person, checkbox,
|
|
8
|
+
link, rating — and each type draws its own cell and opens its own editor
|
|
9
|
+
(a calendar for a date, a searchable list for a select or a person). Drag
|
|
10
|
+
a header to reorder, its edge to resize; its menu sorts, filters, renames,
|
|
11
|
+
changes the type, inserts, freezes, hides and deletes. The toolbar has
|
|
12
|
+
search, a filter panel, a sort panel, show/hide fields and "Add row"; the
|
|
13
|
+
line under the grid counts rows and sums the selected numbers.
|
|
14
|
+
|
|
15
|
+
It is virtualised in both directions (`@tanstack/react-virtual`): only the
|
|
16
|
+
cells in the window are drawn, so 10,000 rows scroll like ten. On a phone
|
|
17
|
+
the rows grow to 44px, the frozen column narrows, a tap selects and a
|
|
18
|
+
second tap edits; long-press opens the row menu.
|
|
19
|
+
|
|
20
|
+
```jsx
|
|
21
|
+
import { Spreadsheet } from "../components/blocks/spreadsheet"; // a Makersclaw app ("./blocks/spreadsheet" from components/)
|
|
22
|
+
import { Spreadsheet } from "@/components/makersclaw/blocks/spreadsheet"; // a shadcn project
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
It is a client component: render it from a `"use client"` component, and
|
|
26
|
+
load the rows in the server surface (README §4). `makersclaw add
|
|
27
|
+
spreadsheet` adds `@tanstack/react-virtual` (pinned, exact) to
|
|
28
|
+
package.json: run `npm install` after. The helpers (the type registry,
|
|
29
|
+
`processRows`, TSV) are plain functions and run on the server too.
|
|
30
|
+
Blocks built on this one (base-view, csv-import) import it, never the
|
|
31
|
+
virtualiser.
|
|
32
|
+
|
|
33
|
+
## The data
|
|
34
|
+
|
|
35
|
+
`rows` — plain objects with a unique `id`; each column reads one key.
|
|
36
|
+
`columns` — what each key is:
|
|
37
|
+
|
|
38
|
+
```js
|
|
39
|
+
const COLUMNS = [
|
|
40
|
+
{ key: "company", name: "Company", type: "text", width: 200, required: true },
|
|
41
|
+
{ key: "stage", name: "Stage", type: "select",
|
|
42
|
+
options: [{ value: "lead", label: "Lead", hue: 5 }, { value: "won", label: "Won", hue: 1 }] },
|
|
43
|
+
{ key: "value", name: "Deal value", type: "currency", currency: "USD", precision: 0 },
|
|
44
|
+
{ key: "owner", name: "Owner", type: "person" }, // ids from the `people` prop
|
|
45
|
+
{ key: "close", name: "Close date", type: "date" }, // "YYYY-MM-DD"
|
|
46
|
+
{ key: "segments", name: "Segments", type: "multi-select", options: [...] },
|
|
47
|
+
{ key: "fit", name: "Fit", type: "rating", max: 5 },
|
|
48
|
+
{ key: "contacted", name: "Contacted", type: "checkbox" },
|
|
49
|
+
{ key: "website", name: "Website", type: "url" },
|
|
50
|
+
];
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
A column: `key`, `name`, `type` (default `"text"`), and any of `width`
|
|
54
|
+
(px), `readOnly`, `required` (an empty cell is marked as a problem),
|
|
55
|
+
`options` (select types: `{ value, label, hue: 1–5 }` — the hue is a
|
|
56
|
+
chart token, never a colour), `allowNew: false` (a select that refuses
|
|
57
|
+
new options), `currency` + `precision` (currency, number), `max`
|
|
58
|
+
(rating, default 5), `multiple: true` (person: several people),
|
|
59
|
+
`dateOrder: "dmy"` (how `3/4/2026` is read; default month first). Any
|
|
60
|
+
other key is kept and ignored, so a block on top can carry its own.
|
|
61
|
+
|
|
62
|
+
What each type stores:
|
|
63
|
+
|
|
64
|
+
| type | value |
|
|
65
|
+
| --- | --- |
|
|
66
|
+
| `text`, `url` | a string |
|
|
67
|
+
| `number`, `currency` | a number, or `null` |
|
|
68
|
+
| `date` | `"YYYY-MM-DD"`, or `null` — a day, never a `Date` |
|
|
69
|
+
| `select` | an option's `value`, or `null` |
|
|
70
|
+
| `multi-select` | an array of option values |
|
|
71
|
+
| `person` | a person's `id` (an array with `multiple`) |
|
|
72
|
+
| `checkbox` | `true` / `false` |
|
|
73
|
+
| `rating` | a whole number, `0` = none |
|
|
74
|
+
|
|
75
|
+
## Props
|
|
76
|
+
|
|
77
|
+
Required first; the rest have the defaults shown.
|
|
78
|
+
|
|
79
|
+
- `rows` — the records, as above.
|
|
80
|
+
- `columns` — the fields, as above.
|
|
81
|
+
|
|
82
|
+
Saving. Every callback is async and answers `{ ok: true }` or
|
|
83
|
+
`{ ok: false, error }` (a throw counts as a failure; nothing returned
|
|
84
|
+
counts as ok). The grid applies the change at once and, on a failure,
|
|
85
|
+
puts it back and says so in a toast.
|
|
86
|
+
|
|
87
|
+
- `onChange(changes)` — cell edits, always a batch: one typed value, a
|
|
88
|
+
paste, a fill, a clear, an undo. `changes` is
|
|
89
|
+
`[{ rowId, key, value, prev }]`. Without it the grid still edits (in
|
|
90
|
+
memory).
|
|
91
|
+
- `onAddRows(rows, { index, restore })` — new rows (from "Add row", the
|
|
92
|
+
row menu's insert, a paste that runs past the end, or an Undo of a
|
|
93
|
+
delete when `restore` is true). `index` is where in `rows` they go
|
|
94
|
+
(absent: the end). A row's `id` is made here (`createRow` or a random
|
|
95
|
+
one); answer `{ ok: true, rows: [{ id }] }` to swap in the server's ids.
|
|
96
|
+
Without it there is no Add row.
|
|
97
|
+
- `onDeleteRows(ids)` — rows deleted from the row menu or the selection
|
|
98
|
+
line; a toast offers Undo (which calls `onAddRows` with `restore`).
|
|
99
|
+
Without it rows cannot be deleted.
|
|
100
|
+
- `onColumnsChange(columns, { reason })` — the whole new column list after
|
|
101
|
+
a rename, a type change, an added, deleted or restored field, or a
|
|
102
|
+
select option created while typing; `reason` is `"rename"`, `"type"`,
|
|
103
|
+
`"add"`, `"delete"`, `"restore"` or `"options"`. A type change also sends
|
|
104
|
+
the converted values through `onChange`. Without it the header menu
|
|
105
|
+
cannot change fields (options typed into a select are kept in memory).
|
|
106
|
+
- `createRow()` — a new row's starting values (`{ id, stage: "lead" }`).
|
|
107
|
+
Give each call a unique `id`.
|
|
108
|
+
|
|
109
|
+
The view — which fields show, in what order and width, what is frozen,
|
|
110
|
+
sorted and filtered. Plain JSON; store it per view (base-view keeps one
|
|
111
|
+
per tab):
|
|
112
|
+
|
|
113
|
+
```js
|
|
114
|
+
{ order: ["company", "stage", …], hidden: ["website"], widths: { company: 240 },
|
|
115
|
+
frozen: 1, sort: [{ key: "value", dir: "desc" }],
|
|
116
|
+
filters: [{ id: "f1", key: "stage", op: "any", value: ["won", "negotiation"] }] }
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
- `view` + `onViewChange(view)` — controlled; or `defaultView` and the
|
|
120
|
+
grid keeps it (still reporting through `onViewChange`). Keep it in state:
|
|
121
|
+
a new `sort` or `filters` array each render re-sorts each render.
|
|
122
|
+
- A filter's `op` is one of its type's conditions (`COLUMN_TYPES[type]
|
|
123
|
+
.filters[].id`, plus `empty` / `not-empty`); a blank `value` means "not
|
|
124
|
+
set yet" and passes every row.
|
|
125
|
+
- Edits do not re-sort: an edited row stays where it is (as in Airtable)
|
|
126
|
+
and the line under the grid offers "Sort again". New data from the
|
|
127
|
+
props re-runs the view.
|
|
128
|
+
|
|
129
|
+
Behaviour and look:
|
|
130
|
+
|
|
131
|
+
- `people` — `[{ id, name, email?, src? }]`, who a `person` cell can hold.
|
|
132
|
+
- `types` — your own column types, or overrides of the built-ins (see
|
|
133
|
+
below). Keep the object stable (a module constant).
|
|
134
|
+
- `validate(row, column)` — a message when a cell is wrong, else null. A
|
|
135
|
+
wrong cell gets a red corner and its message on hover and under the
|
|
136
|
+
grid; the line under the grid counts problems and jumps to the next.
|
|
137
|
+
- `readOnly` — nothing edits (select, copy, sort, filter still work).
|
|
138
|
+
Per column: `column.readOnly`.
|
|
139
|
+
- `lockFields` — the header menu cannot rename, retype, add or delete
|
|
140
|
+
fields, though `onColumnsChange` is given; select options typed into a
|
|
141
|
+
cell still arrive through it (reason `"options"`). csv-import's review
|
|
142
|
+
uses this.
|
|
143
|
+
- `onExpandRow(row)` — adds an open button to each row's number (and
|
|
144
|
+
Space / ⌘↵ / the row menu); draw the record yourself (a Sheet).
|
|
145
|
+
- `onSelectionChange({ active: { rowId, key }, rowIds, keys } | null)`.
|
|
146
|
+
- `loading` — skeleton rows.
|
|
147
|
+
- `label` — what a screen reader calls the grid (`"Table"`).
|
|
148
|
+
- `noun` — what a row is (`"deal"`): "Add deal", "10,000 deals". Plural
|
|
149
|
+
is noun + "s". Default `"row"`.
|
|
150
|
+
- `height` — the grid's height (`560`, or any CSS length); it scrolls
|
|
151
|
+
inside it.
|
|
152
|
+
- `toolbar` — `false` hides the toolbar (a parent draws its own and
|
|
153
|
+
drives the grid through the handle). `toolbarStart`, `toolbarEnd` —
|
|
154
|
+
nodes at the toolbar's ends (an "Import CSV" button).
|
|
155
|
+
- `empty` — a node for the empty table, instead of "No rows yet".
|
|
156
|
+
- `locale`, `currency` — for numbers, amounts and dates (the reader's
|
|
157
|
+
locale, `"USD"`). `today` — `"YYYY-MM-DD"` for the date picker (a demo
|
|
158
|
+
that must not change day to day).
|
|
159
|
+
- `ref` — the handle, below.
|
|
160
|
+
|
|
161
|
+
### The handle
|
|
162
|
+
|
|
163
|
+
`<Spreadsheet ref={grid} …>` then `grid.current`:
|
|
164
|
+
|
|
165
|
+
- `focus()` · `clearSelection()`
|
|
166
|
+
- `select({ rowId, key, toRowId?, toKey? })` → true when found; a range
|
|
167
|
+
when `to…` is given
|
|
168
|
+
- `getSelection()` → `{ active, rowIds, keys }` or null
|
|
169
|
+
- `scrollToRow(rowId)` · `edit(rowId, key)` — opens that cell's editor
|
|
170
|
+
- `addRow(values?)` — adds, selects and edits a row (through `onAddRows`)
|
|
171
|
+
- `deleteRows(ids)` · `undo()` · `redo()`
|
|
172
|
+
- `copy()` → the selection as TSV · `paste(text)` — TSV at the selection
|
|
173
|
+
- `visibleRows()` · `visibleColumns()` — after filter and sort, in order
|
|
174
|
+
- `resort()` — the "Sort again" button
|
|
175
|
+
|
|
176
|
+
### The column-type registry
|
|
177
|
+
|
|
178
|
+
`COLUMN_TYPES` holds the built-ins; `typeOf(column, types)` resolves one
|
|
179
|
+
(your `types` first, then the built-ins, unknown names read as text). A
|
|
180
|
+
type is plain data and functions — the logic runs on the server too:
|
|
181
|
+
|
|
182
|
+
```js
|
|
183
|
+
{
|
|
184
|
+
label: "Currency", icon: "dollar", // a kit glyph for the header
|
|
185
|
+
align: "end", width: 130, // default width, px
|
|
186
|
+
editor: "number", // the in-cell editor: text · number · date ·
|
|
187
|
+
// select · person · toggle · rating · url · none
|
|
188
|
+
multiple: false, // select editor: pick several
|
|
189
|
+
empty: (v) => v == null, // default: null, "" or []
|
|
190
|
+
parse: (text, column, ctx) => ({ value }) | ({ error }), // typed or pasted text in;
|
|
191
|
+
// a select may add `create: [{ value, label, hue }]`
|
|
192
|
+
toText: (v, column, ctx) => "1250.5", // what a copy puts on the clipboard, and an edit starts from
|
|
193
|
+
format: (v, column, ctx) => "$1,250.50",// what the cell shows (and search matches)
|
|
194
|
+
compare: (a, b, column, ctx) => a - b, // sort order; empties always sort last
|
|
195
|
+
filters: [{ id: "gt", label: ">", arg: "number", test: (v, arg, column, ctx) => v > arg }],
|
|
196
|
+
// arg: text · number · date · options · person · none
|
|
197
|
+
render: (v, column, ctx) => <node/>, // optional: draw the cell yourself
|
|
198
|
+
Editor: MyEditor, // optional: your own editor component
|
|
199
|
+
}
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
`ctx` is `{ people, locale, currency }`. A custom type may be small —
|
|
203
|
+
anything it leaves out comes from `text`:
|
|
204
|
+
|
|
205
|
+
```js
|
|
206
|
+
const TYPES = {
|
|
207
|
+
percent: {
|
|
208
|
+
label: "Percent", icon: "hash", align: "end", width: 100, editor: "number",
|
|
209
|
+
parse: (t) => { const n = parseNumberText(String(t).replace("%", "")); return Number.isNaN(n) ? { error: "Not a percent" } : { value: n == null ? null : n / 100 }; },
|
|
210
|
+
toText: (v) => (v == null ? "" : String(v * 100)),
|
|
211
|
+
format: (v) => (v == null ? "" : `${Math.round(v * 100)}%`),
|
|
212
|
+
compare: (a, b) => a - b,
|
|
213
|
+
},
|
|
214
|
+
};
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
A custom `Editor` gets `{ value, column, type, ctx, initial, today,
|
|
218
|
+
canCreate, onCommit(value, move, { create }?), onCancel() }` and draws
|
|
219
|
+
inside the cell (absolutely positioned over it). `initial` is the key
|
|
220
|
+
that opened it (a typed letter) or null; `move` is `"down"`, `"up"`,
|
|
221
|
+
`"right"`, `"left"` or null (stay). Float a panel beside the cell with
|
|
222
|
+
the exported `CellPanel` (`anchorRef`, `onDismiss`, `width`, `label`).
|
|
223
|
+
|
|
224
|
+
Other exports, for blocks on top: `CellValue` (a cell's display),
|
|
225
|
+
`OptionBadge`, `editorFor(type)`, `parseCell`, `convertValue(v, from,
|
|
226
|
+
to)`, `guessType(texts)` (csv-import's guess), `parseNumberText`,
|
|
227
|
+
`parseDateText`, `optionValue(label, taken)`, `emptyView`,
|
|
228
|
+
`normalizeView`, `orderedColumns`, `visibleColumns`, `processRows(rows,
|
|
229
|
+
columns, view, { search, ctx, custom })`, `passesFilters`, `parseTSV`,
|
|
230
|
+
`toTSV`, `pasteChanges`, `fillChanges`, `clearChanges`, `applyChanges`,
|
|
231
|
+
`invertChanges`, `TYPE_ORDER`, `sortWords(type)`.
|
|
232
|
+
|
|
233
|
+
## Keys
|
|
234
|
+
|
|
235
|
+
↑ ↓ ← → move (⌘ to the edge; Shift extends) · Tab / Shift+Tab · Home /
|
|
236
|
+
End · Page Up / Down · Enter or F2 edits · typing replaces · Esc cancels ·
|
|
237
|
+
Delete clears · ⌘C ⌘X ⌘V · ⌘D fills down · ⌘Z / ⇧⌘Z · ⌘A all · Shift+Space
|
|
238
|
+
the row · ⌘Space the column · Space ticks a box or opens the row ·
|
|
239
|
+
Shift+F10 the row menu.
|
|
240
|
+
|
|
241
|
+
## Example
|
|
242
|
+
|
|
243
|
+
```jsx
|
|
244
|
+
"use client";
|
|
245
|
+
import { useState } from "react";
|
|
246
|
+
import { updateRow, insertRow, deleteRow } from "../lib/actions";
|
|
247
|
+
import { Spreadsheet } from "./blocks/spreadsheet";
|
|
248
|
+
|
|
249
|
+
const COLUMNS = [
|
|
250
|
+
{ key: "name", name: "Name", type: "text", required: true },
|
|
251
|
+
{ key: "stage", name: "Stage", type: "select", options: [{ value: "lead", label: "Lead", hue: 2 }, { value: "won", label: "Won", hue: 1 }] },
|
|
252
|
+
{ key: "amount", name: "Amount", type: "currency", precision: 0 },
|
|
253
|
+
{ key: "close", name: "Close date", type: "date" },
|
|
254
|
+
];
|
|
255
|
+
|
|
256
|
+
export default function Deals({ deals, team }) {
|
|
257
|
+
const [view, setView] = useState({ sort: [{ key: "amount", dir: "desc" }] });
|
|
258
|
+
return (
|
|
259
|
+
<Spreadsheet
|
|
260
|
+
label="Deals"
|
|
261
|
+
noun="deal"
|
|
262
|
+
rows={deals}
|
|
263
|
+
columns={COLUMNS}
|
|
264
|
+
people={team}
|
|
265
|
+
view={view}
|
|
266
|
+
onViewChange={setView}
|
|
267
|
+
onChange={async (changes) => {
|
|
268
|
+
for (const c of changes) {
|
|
269
|
+
const r = await updateRow({ source: "public.deals", id: c.rowId, patch: { [c.key]: c.value } });
|
|
270
|
+
if (!r.ok) return r;
|
|
271
|
+
}
|
|
272
|
+
return { ok: true };
|
|
273
|
+
}}
|
|
274
|
+
onAddRows={async (rows) => {
|
|
275
|
+
const made = [];
|
|
276
|
+
for (const { id, ...values } of rows) {
|
|
277
|
+
const r = await insertRow({ source: "public.deals", values: { stage: "lead", ...values } });
|
|
278
|
+
if (!r.ok) return r;
|
|
279
|
+
made.push({ id: r.id }); // the database's id replaces the one the grid made up
|
|
280
|
+
}
|
|
281
|
+
return { ok: true, rows: made };
|
|
282
|
+
}}
|
|
283
|
+
onDeleteRows={async (ids) => {
|
|
284
|
+
for (const id of ids) {
|
|
285
|
+
const r = await deleteRow({ source: "public.deals", id });
|
|
286
|
+
if (!r.ok) return r;
|
|
287
|
+
}
|
|
288
|
+
return { ok: true };
|
|
289
|
+
}}
|
|
290
|
+
/>
|
|
291
|
+
);
|
|
292
|
+
}
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
## What it will not do
|
|
296
|
+
|
|
297
|
+
- No formulas. A value is what was typed; a derived column is computed by
|
|
298
|
+
you and passed in (mark it `readOnly`).
|
|
299
|
+
- No merged cells, no rich text in a cell, no row heights of their own:
|
|
300
|
+
every row is one height (that is what keeps 10,000 rows smooth).
|
|
301
|
+
- No grouping of rows under headings — that is a view on top (base-view).
|
|
302
|
+
- Search and filters run in the browser over `rows`. For a table too big
|
|
303
|
+
to send, filter on the server and pass the page.
|
|
304
|
+
- Sort and filter follow the view, not the edits: an edited row stays put
|
|
305
|
+
until "Sort again" (or new props).
|
|
306
|
+
- Paste reads plain text (TSV). Pasted images and HTML tables are read as
|
|
307
|
+
their text.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "spreadsheet",
|
|
3
|
+
"title": "Spreadsheet",
|
|
4
|
+
"description": "A table you edit like Google Sheets or Airtable, virtualised for 10,000+ rows: typed columns (text, number, currency, date, single and multiple select, person, checkbox, link, rating) each with its own in-cell editor, a cell cursor and range selection with the mouse and arrow keys, typing to edit, copy and paste ranges as TSV (to and from Sheets and Excel), drag-to-fill and ⌘D fill down, undo/redo, column resize, drag to reorder, hide, freeze, rename, change type and add fields, row insert and delete with Undo, sort and filter panels, search, a sum/average of the selection, validation marks, and a phone layout. Edits go out as async callbacks answering { ok }, applied at once and rolled back on failure. A column-type registry and an imperative handle for blocks built on it.",
|
|
5
|
+
"useWhen": "People need to enter or clean up many records in a grid, fast, with the keyboard: a lead list, an inventory, a budget, a content calendar, a table view over any collection, the grid under an Airtable-like base. Not for a read-mostly list to scan and act on row by row (data-table), records moving through stages (board), or a single record (record-form).",
|
|
6
|
+
"tags": ["spreadsheet", "grid", "table", "airtable", "google sheets", "excel", "editable", "cells", "inline edit", "virtualized", "10k rows", "copy paste", "tsv", "fill down", "columns", "sort", "filter", "select", "multi select", "person", "rating", "undo", "keyboard", "base"],
|
|
7
|
+
"exports": ["Spreadsheet", "CellValue", "CellPanel", "OptionBadge", "editorFor", "TYPE_ORDER", "sortWords", "COLUMN_TYPES", "typeOf", "parseCell", "convertValue", "guessType", "parseNumberText", "parseDateText", "optionValue", "isBlank", "emptyView", "normalizeView", "orderedColumns", "visibleColumns", "processRows", "passesFilters", "parseTSV", "toTSV", "pasteChanges", "fillChanges", "clearChanges", "applyChanges", "invertChanges"],
|
|
8
|
+
"files": ["index.js", "spreadsheet.jsx", "cells.jsx", "chrome.jsx", "types.js", "grid.js"],
|
|
9
|
+
"requires": [],
|
|
10
|
+
"dependencies": {
|
|
11
|
+
"@tanstack/react-virtual": "3.14.13"
|
|
12
|
+
}
|
|
13
|
+
}
|