makersclaw 0.8.0 → 0.8.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/README.md +9 -3
- package/package.json +1 -1
- package/r/activity-log.json +52 -0
- package/r/agent-changes.json +51 -0
- package/r/agent-chat.json +53 -0
- package/r/agent-column.json +85 -0
- package/r/agent-dock.json +57 -0
- package/r/agent-kit.json +49 -0
- package/r/agent-marks.json +49 -0
- package/r/agent-pane.json +93 -0
- package/r/ai-action.json +56 -0
- package/r/annotate.json +3 -3
- package/r/approval-request.json +2 -2
- package/r/approval.json +54 -0
- package/r/ask-bar.json +50 -0
- package/r/audio-player.json +2 -2
- package/r/auth-form.json +2 -2
- package/r/automation-editor.json +66 -0
- package/r/automation-list.json +57 -0
- package/r/automation-model.json +118 -0
- package/r/automations-screen.json +71 -0
- package/r/board.json +2 -2
- package/r/calendar-view.json +3 -3
- package/r/cart.json +2 -2
- package/r/chart.json +2 -2
- package/r/chat-pane.json +84 -0
- package/r/chat.json +2 -2
- package/r/code-editor.json +2 -2
- package/r/comment-box.json +3 -3
- package/r/connect-card.json +51 -0
- package/r/contact-section.json +2 -2
- package/r/core.json +13 -7
- package/r/cost.json +51 -0
- package/r/csv-import.json +3 -3
- package/r/data-picker.json +60 -0
- package/r/data-table.json +2 -2
- package/r/diagram.json +2 -2
- package/r/doc-editor.json +2 -2
- package/r/doc-page.json +3 -3
- package/r/email-render.json +2 -2
- package/r/faq.json +2 -2
- package/r/file-upload.json +2 -2
- package/r/first-run.json +63 -0
- package/r/fix-note.json +57 -0
- package/r/flow-canvas.json +2 -2
- package/r/flow-editor.json +79 -0
- package/r/footer.json +2 -2
- package/r/gantt.json +3 -3
- package/r/job-panel.json +2 -2
- package/r/json-editor.json +3 -3
- package/r/library-shelf.json +56 -0
- package/r/map.json +2 -2
- package/r/margin-notes.json +67 -0
- package/r/menubar.json +2 -2
- package/r/mind-map.json +3 -3
- package/r/navigation-menu.json +2 -2
- package/r/needs-you.json +55 -0
- package/r/order-detail.json +2 -2
- package/r/org-chart.json +3 -3
- package/r/pace-bar.json +69 -0
- package/r/page-builder.json +2 -2
- package/r/payment-methods.json +2 -2
- package/r/pdf-document.json +2 -2
- package/r/pdf-viewer.json +2 -2
- package/r/product-detail.json +2 -2
- package/r/product-grid.json +3 -3
- package/r/record-form.json +2 -2
- package/r/record-grid.json +52 -0
- package/r/record-notes.json +4 -4
- package/r/registry.json +4086 -1512
- package/r/run-history.json +52 -0
- package/r/run-view.json +80 -0
- package/r/schedule-card.json +54 -0
- package/r/schedule-engine.json +79 -0
- package/r/schedule-gantt.json +83 -0
- package/r/schedule-ruler.json +64 -0
- package/r/search-dialog.json +2 -2
- package/r/settings-list.json +2 -2
- package/r/setup-checklist.json +2 -2
- package/r/share-dialog.json +2 -2
- package/r/sidebar.json +2 -2
- package/r/signature-pad.json +2 -2
- package/r/sketch-canvas.json +2 -2
- package/r/source-receipt.json +52 -0
- package/r/spreadsheet.json +3 -3
- package/r/stat-cards.json +3 -3
- package/r/step-picker.json +53 -0
- package/r/step-settings.json +72 -0
- package/r/suggestion.json +58 -0
- package/r/sum-bar.json +64 -0
- package/r/task-list.json +3 -3
- package/r/task-model.json +2 -2
- package/r/testimonials.json +2 -2
- package/r/tier-map.json +67 -0
- package/r/time-grid.json +73 -0
- package/r/time-strip.json +64 -0
- package/r/top-bar.json +66 -0
- package/r/transaction-list.json +2 -2
- package/r/trigger-picker.json +61 -0
- package/r/whiteboard.json +3 -3
- package/r/workflow-view.json +55 -0
- package/registry/blocks/activity-log/README.md +112 -0
- package/registry/blocks/activity-log/activity-log.jsx +351 -0
- package/registry/blocks/activity-log/block.json +33 -0
- package/registry/blocks/activity-log/demo.jsx +48 -0
- package/registry/blocks/activity-log/index.js +4 -0
- package/registry/blocks/agent-changes/README.md +94 -0
- package/registry/blocks/agent-changes/agent-changes.jsx +118 -0
- package/registry/blocks/agent-changes/block.json +28 -0
- package/registry/blocks/agent-changes/demo.jsx +39 -0
- package/registry/blocks/agent-changes/index.js +3 -0
- package/registry/blocks/agent-chat/README.md +145 -0
- package/registry/blocks/agent-chat/agent-chat.jsx +415 -0
- package/registry/blocks/agent-chat/block.json +30 -0
- package/registry/blocks/agent-chat/demo.jsx +165 -0
- package/registry/blocks/agent-chat/index.js +3 -0
- package/registry/blocks/agent-column/README.md +197 -0
- package/registry/blocks/agent-column/agent-column.jsx +492 -0
- package/registry/blocks/agent-column/block.json +67 -0
- package/registry/blocks/agent-column/column-picker.jsx +163 -0
- package/registry/blocks/agent-column/demo.jsx +50 -0
- package/registry/blocks/agent-column/index.js +7 -0
- package/registry/blocks/agent-column/model.js +164 -0
- package/registry/blocks/agent-column/receipt.jsx +483 -0
- package/registry/blocks/agent-column/spreadsheet-type.jsx +24 -0
- package/registry/blocks/agent-dock/README.md +210 -0
- package/registry/blocks/agent-dock/agent-dock.jsx +356 -0
- package/registry/blocks/agent-dock/block.json +47 -0
- package/registry/blocks/agent-dock/demo.jsx +153 -0
- package/registry/blocks/agent-dock/dock-model.js +118 -0
- package/registry/blocks/agent-dock/index.js +5 -0
- package/registry/blocks/agent-kit/README.md +73 -0
- package/registry/blocks/agent-kit/agent-kit.jsx +86 -0
- package/registry/blocks/agent-kit/block.json +10 -0
- package/registry/blocks/agent-kit/demo.jsx +35 -0
- package/registry/blocks/agent-kit/index.js +3 -0
- package/registry/blocks/agent-marks/README.md +80 -0
- package/registry/blocks/agent-marks/agent-marks.jsx +133 -0
- package/registry/blocks/agent-marks/block.json +27 -0
- package/registry/blocks/agent-marks/demo.jsx +49 -0
- package/registry/blocks/agent-marks/index.js +3 -0
- package/registry/blocks/agent-pane/README.md +225 -0
- package/registry/blocks/agent-pane/agent-pane.jsx +244 -0
- package/registry/blocks/agent-pane/block.json +41 -0
- package/registry/blocks/agent-pane/composer.jsx +6 -0
- package/registry/blocks/agent-pane/demo.jsx +233 -0
- package/registry/blocks/agent-pane/dock-context.js +10 -0
- package/registry/blocks/agent-pane/index.js +4 -0
- package/registry/blocks/agent-pane/prose.jsx +84 -0
- package/registry/blocks/agent-pane/questions.jsx +134 -0
- package/registry/blocks/agent-pane/transcript.jsx +268 -0
- package/registry/blocks/agent-pane/work.jsx +368 -0
- package/registry/blocks/ai-action/README.md +94 -0
- package/registry/blocks/ai-action/ai-action.jsx +188 -0
- package/registry/blocks/ai-action/block.json +34 -0
- package/registry/blocks/ai-action/demo.jsx +93 -0
- package/registry/blocks/ai-action/index.js +3 -0
- package/registry/blocks/approval/README.md +145 -0
- package/registry/blocks/approval/approval.jsx +163 -0
- package/registry/blocks/approval/block.json +31 -0
- package/registry/blocks/approval/demo.jsx +121 -0
- package/registry/blocks/approval/index.js +3 -0
- package/registry/blocks/ask-bar/README.md +105 -0
- package/registry/blocks/ask-bar/ask-bar.jsx +166 -0
- package/registry/blocks/ask-bar/block.json +26 -0
- package/registry/blocks/ask-bar/demo.jsx +78 -0
- package/registry/blocks/ask-bar/index.js +3 -0
- package/registry/blocks/automation-editor/README.md +291 -0
- package/registry/blocks/automation-editor/automation-editor.jsx +656 -0
- package/registry/blocks/automation-editor/block.json +39 -0
- package/registry/blocks/automation-editor/demo.jsx +284 -0
- package/registry/blocks/automation-editor/index.js +4 -0
- package/registry/blocks/automation-editor/run-inputs.jsx +82 -0
- package/registry/blocks/automation-list/README.md +129 -0
- package/registry/blocks/automation-list/automation-list.jsx +476 -0
- package/registry/blocks/automation-list/block.json +35 -0
- package/registry/blocks/automation-list/demo.jsx +67 -0
- package/registry/blocks/automation-list/index.js +3 -0
- package/registry/blocks/automation-model/README.md +109 -0
- package/registry/blocks/automation-model/block.json +135 -0
- package/registry/blocks/automation-model/catalog.js +256 -0
- package/registry/blocks/automation-model/check.js +161 -0
- package/registry/blocks/automation-model/demo.jsx +42 -0
- package/registry/blocks/automation-model/edit.js +262 -0
- package/registry/blocks/automation-model/fixes.js +287 -0
- package/registry/blocks/automation-model/glyph.jsx +13 -0
- package/registry/blocks/automation-model/graph.js +410 -0
- package/registry/blocks/automation-model/index.js +33 -0
- package/registry/blocks/automation-model/overlay.js +175 -0
- package/registry/blocks/automation-model/parts.jsx +94 -0
- package/registry/blocks/automation-model/schedule.js +53 -0
- package/registry/blocks/automation-model/templates.js +128 -0
- package/registry/blocks/automation-model/values.js +29 -0
- package/registry/blocks/automation-model/words.js +439 -0
- package/registry/blocks/automations-screen/README.md +207 -0
- package/registry/blocks/automations-screen/automations-screen.jsx +452 -0
- package/registry/blocks/automations-screen/block.json +47 -0
- package/registry/blocks/automations-screen/demo.jsx +364 -0
- package/registry/blocks/automations-screen/index.js +4 -0
- package/registry/blocks/automations-screen/screen-model.js +129 -0
- package/registry/blocks/chat-pane/README.md +143 -0
- package/registry/blocks/chat-pane/block.json +48 -0
- package/registry/blocks/chat-pane/chat-attach.js +166 -0
- package/registry/blocks/chat-pane/chat-composer.jsx +195 -0
- package/registry/blocks/chat-pane/chat-context.js +17 -0
- package/registry/blocks/chat-pane/chat-model.js +43 -0
- package/registry/blocks/chat-pane/chat-pane.jsx +398 -0
- package/registry/blocks/chat-pane/chats-list.jsx +52 -0
- package/registry/blocks/chat-pane/demo.jsx +103 -0
- package/registry/blocks/chat-pane/index.js +9 -0
- package/registry/blocks/connect-card/README.md +99 -0
- package/registry/blocks/connect-card/block.json +10 -0
- package/registry/blocks/connect-card/connect-card.jsx +103 -0
- package/registry/blocks/connect-card/demo.jsx +49 -0
- package/registry/blocks/connect-card/index.js +3 -0
- package/registry/blocks/cost/README.md +115 -0
- package/registry/blocks/cost/block.json +10 -0
- package/registry/blocks/cost/cost.jsx +176 -0
- package/registry/blocks/cost/demo.jsx +66 -0
- package/registry/blocks/cost/index.js +3 -0
- package/registry/blocks/data-picker/README.md +81 -0
- package/registry/blocks/data-picker/block.json +38 -0
- package/registry/blocks/data-picker/data-picker.jsx +210 -0
- package/registry/blocks/data-picker/demo.jsx +34 -0
- package/registry/blocks/data-picker/fields.js +89 -0
- package/registry/blocks/data-picker/index.js +4 -0
- package/registry/blocks/data-table/demo.jsx +1 -1
- package/registry/blocks/first-run/README.md +118 -0
- package/registry/blocks/first-run/block.json +11 -0
- package/registry/blocks/first-run/demo.jsx +88 -0
- package/registry/blocks/first-run/first-run-model.js +51 -0
- package/registry/blocks/first-run/first-run.jsx +156 -0
- package/registry/blocks/first-run/index.js +5 -0
- package/registry/blocks/first-run/probe-rules.js +26 -0
- package/registry/blocks/fix-note/README.md +79 -0
- package/registry/blocks/fix-note/block.json +35 -0
- package/registry/blocks/fix-note/demo.jsx +30 -0
- package/registry/blocks/fix-note/fix-note.jsx +235 -0
- package/registry/blocks/fix-note/index.js +3 -0
- package/registry/blocks/flow-editor/README.md +108 -0
- package/registry/blocks/flow-editor/block.json +44 -0
- package/registry/blocks/flow-editor/demo.jsx +115 -0
- package/registry/blocks/flow-editor/flow-canvas.jsx +568 -0
- package/registry/blocks/flow-editor/flow-editor.jsx +154 -0
- package/registry/blocks/flow-editor/index.js +6 -0
- package/registry/blocks/flow-editor/minimap.jsx +78 -0
- package/registry/blocks/flow-editor/outline.jsx +134 -0
- package/registry/blocks/library-shelf/README.md +117 -0
- package/registry/blocks/library-shelf/block.json +28 -0
- package/registry/blocks/library-shelf/demo.jsx +68 -0
- package/registry/blocks/library-shelf/index.js +3 -0
- package/registry/blocks/library-shelf/library-shelf.jsx +211 -0
- package/registry/blocks/library-shelf/probe-rules.js +15 -0
- package/registry/blocks/margin-notes/README.md +222 -0
- package/registry/blocks/margin-notes/block.json +10 -0
- package/registry/blocks/margin-notes/demo.jsx +144 -0
- package/registry/blocks/margin-notes/index.js +20 -0
- package/registry/blocks/margin-notes/margin-model.js +224 -0
- package/registry/blocks/margin-notes/margin-notes.jsx +465 -0
- package/registry/blocks/needs-you/README.md +177 -0
- package/registry/blocks/needs-you/block.json +34 -0
- package/registry/blocks/needs-you/demo.jsx +143 -0
- package/registry/blocks/needs-you/index.js +3 -0
- package/registry/blocks/needs-you/needs-you.jsx +441 -0
- package/registry/blocks/pace-bar/README.md +230 -0
- package/registry/blocks/pace-bar/block.json +10 -0
- package/registry/blocks/pace-bar/demo.jsx +255 -0
- package/registry/blocks/pace-bar/index.js +22 -0
- package/registry/blocks/pace-bar/pace-bar.jsx +461 -0
- package/registry/blocks/pace-bar/pace-model.js +288 -0
- package/registry/blocks/record-grid/README.md +100 -0
- package/registry/blocks/record-grid/block.json +28 -0
- package/registry/blocks/record-grid/demo.jsx +43 -0
- package/registry/blocks/record-grid/index.js +3 -0
- package/registry/blocks/record-grid/record-grid.jsx +251 -0
- package/registry/blocks/run-history/README.md +138 -0
- package/registry/blocks/run-history/block.json +10 -0
- package/registry/blocks/run-history/demo.jsx +74 -0
- package/registry/blocks/run-history/index.js +3 -0
- package/registry/blocks/run-history/run-history.jsx +218 -0
- package/registry/blocks/run-view/README.md +174 -0
- package/registry/blocks/run-view/block.json +50 -0
- package/registry/blocks/run-view/demo.jsx +286 -0
- package/registry/blocks/run-view/index.js +5 -0
- package/registry/blocks/run-view/run-controls.jsx +266 -0
- package/registry/blocks/run-view/run-view.jsx +236 -0
- package/registry/blocks/run-view/runs-list.jsx +99 -0
- package/registry/blocks/schedule-card/README.md +121 -0
- package/registry/blocks/schedule-card/block.json +10 -0
- package/registry/blocks/schedule-card/demo.jsx +82 -0
- package/registry/blocks/schedule-card/index.js +3 -0
- package/registry/blocks/schedule-card/schedule-card.jsx +136 -0
- package/registry/blocks/schedule-engine/README.md +137 -0
- package/registry/blocks/schedule-engine/block.json +10 -0
- package/registry/blocks/schedule-engine/demo.jsx +82 -0
- package/registry/blocks/schedule-engine/engine.js +769 -0
- package/registry/blocks/schedule-engine/index.js +9 -0
- package/registry/blocks/schedule-engine/ops.js +71 -0
- package/registry/blocks/schedule-engine/place.js +294 -0
- package/registry/blocks/schedule-engine/tree.js +79 -0
- package/registry/blocks/schedule-engine/waits.js +80 -0
- package/registry/blocks/schedule-gantt/README.md +159 -0
- package/registry/blocks/schedule-gantt/block.json +10 -0
- package/registry/blocks/schedule-gantt/demo.jsx +223 -0
- package/registry/blocks/schedule-gantt/gantt-model.js +219 -0
- package/registry/blocks/schedule-gantt/geometry.js +176 -0
- package/registry/blocks/schedule-gantt/index.js +26 -0
- package/registry/blocks/schedule-gantt/schedule-gantt.jsx +882 -0
- package/registry/blocks/schedule-gantt/sheet.jsx +372 -0
- package/registry/blocks/schedule-gantt/track.jsx +190 -0
- package/registry/blocks/schedule-ruler/README.md +148 -0
- package/registry/blocks/schedule-ruler/block.json +10 -0
- package/registry/blocks/schedule-ruler/demo.jsx +181 -0
- package/registry/blocks/schedule-ruler/index.js +21 -0
- package/registry/blocks/schedule-ruler/ruler-model.js +239 -0
- package/registry/blocks/schedule-ruler/schedule-ruler.jsx +548 -0
- package/registry/blocks/source-receipt/README.md +97 -0
- package/registry/blocks/source-receipt/block.json +30 -0
- package/registry/blocks/source-receipt/demo.jsx +71 -0
- package/registry/blocks/source-receipt/index.js +3 -0
- package/registry/blocks/source-receipt/source-receipt.jsx +107 -0
- package/registry/blocks/spreadsheet/spreadsheet.jsx +15 -1
- package/registry/blocks/step-picker/README.md +78 -0
- package/registry/blocks/step-picker/block.json +31 -0
- package/registry/blocks/step-picker/demo.jsx +23 -0
- package/registry/blocks/step-picker/index.js +3 -0
- package/registry/blocks/step-picker/step-picker.jsx +144 -0
- package/registry/blocks/step-settings/README.md +100 -0
- package/registry/blocks/step-settings/block.json +44 -0
- package/registry/blocks/step-settings/demo.jsx +93 -0
- package/registry/blocks/step-settings/fields.jsx +58 -0
- package/registry/blocks/step-settings/flow-settings.jsx +115 -0
- package/registry/blocks/step-settings/index.js +5 -0
- package/registry/blocks/step-settings/step-settings.jsx +290 -0
- package/registry/blocks/suggestion/README.md +171 -0
- package/registry/blocks/suggestion/block.json +40 -0
- package/registry/blocks/suggestion/demo.jsx +91 -0
- package/registry/blocks/suggestion/index.js +3 -0
- package/registry/blocks/suggestion/suggestion.jsx +436 -0
- package/registry/blocks/sum-bar/README.md +122 -0
- package/registry/blocks/sum-bar/block.json +10 -0
- package/registry/blocks/sum-bar/demo.jsx +110 -0
- package/registry/blocks/sum-bar/index.js +5 -0
- package/registry/blocks/sum-bar/sum-bar.jsx +209 -0
- package/registry/blocks/sum-bar/sum-model.js +126 -0
- package/registry/blocks/tier-map/README.md +217 -0
- package/registry/blocks/tier-map/block.json +10 -0
- package/registry/blocks/tier-map/demo.jsx +222 -0
- package/registry/blocks/tier-map/index.js +24 -0
- package/registry/blocks/tier-map/tier-map.jsx +574 -0
- package/registry/blocks/tier-map/tier-model.js +318 -0
- package/registry/blocks/time-grid/README.md +305 -0
- package/registry/blocks/time-grid/block.json +10 -0
- package/registry/blocks/time-grid/demo.jsx +279 -0
- package/registry/blocks/time-grid/grid-model.js +322 -0
- package/registry/blocks/time-grid/index.js +25 -0
- package/registry/blocks/time-grid/time-grid.jsx +1325 -0
- package/registry/blocks/time-strip/README.md +141 -0
- package/registry/blocks/time-strip/block.json +10 -0
- package/registry/blocks/time-strip/demo.jsx +129 -0
- package/registry/blocks/time-strip/index.js +19 -0
- package/registry/blocks/time-strip/strip-model.js +178 -0
- package/registry/blocks/time-strip/time-strip.jsx +260 -0
- package/registry/blocks/top-bar/README.md +149 -0
- package/registry/blocks/top-bar/block.json +35 -0
- package/registry/blocks/top-bar/demo.jsx +78 -0
- package/registry/blocks/top-bar/index.js +5 -0
- package/registry/blocks/top-bar/probe-rules.js +74 -0
- package/registry/blocks/top-bar/top-bar-model.js +152 -0
- package/registry/blocks/top-bar/top-bar.jsx +244 -0
- package/registry/blocks/trigger-picker/README.md +98 -0
- package/registry/blocks/trigger-picker/block.json +38 -0
- package/registry/blocks/trigger-picker/demo.jsx +59 -0
- package/registry/blocks/trigger-picker/index.js +3 -0
- package/registry/blocks/trigger-picker/trigger-picker.jsx +374 -0
- package/registry/blocks/workflow-view/README.md +123 -0
- package/registry/blocks/workflow-view/block.json +10 -0
- package/registry/blocks/workflow-view/demo.jsx +90 -0
- package/registry/blocks/workflow-view/index.js +3 -0
- package/registry/blocks/workflow-view/workflow-view.jsx +203 -0
- package/src/install.mjs +77 -16
- package/src/registry.mjs +3 -0
- package/templates/next/browser/lib/data.js +6 -1
- package/templates/next/files/README.md +627 -24
- package/templates/next/files/check/automation-format.ts +2103 -0
- package/templates/next/files/check/automation-package.ts +142 -0
- package/templates/next/files/check/run.mjs +968 -9
- package/templates/next/files/components/ui/field.jsx +17 -4
- package/templates/next/files/components/ui/icon.jsx +13 -0
- package/templates/next/files/components/ui/index.js +2 -1
- package/templates/next/files/components/ui/layout.jsx +77 -2
- package/templates/next/files/components/ui/notice.jsx +70 -0
- package/templates/next/files/components/ui/page.jsx +124 -0
- package/templates/next/files/components/ui/stat.jsx +22 -7
- package/templates/next/files/components/ui/toast.jsx +6 -3
- package/templates/next/files/lib/automations.js +660 -0
- package/templates/next/files/lib/claw.js +241 -5
- package/templates/next/files/lib/door.js +92 -0
- package/templates/next/files/lib/hooks.js +1627 -8
- package/templates/next/files/lib/platform.js +529 -21
- package/templates/next/template.json +13 -3
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
|
|
3
|
+
"name": "record-grid",
|
|
4
|
+
"type": "registry:block",
|
|
5
|
+
"title": "RecordGrid",
|
|
6
|
+
"description": "A dense grid for reading many records at once: a row number and a tick at the start of each row, the name column pinned beside them while the rest scrolls sideways, headers and cells you draw yourself (a column's live progress, its cost, its menu; an answer with its mark), whole-row marks (selected, highlighted, struck, dimmed), one active cell moved by the arrow keys and opened with Enter, and a line after the last row. Only the rows in the window are drawn, so 2,000 rows of 32px scroll smoothly. It scrolls itself inside a bounded parent.",
|
|
7
|
+
"registryDependencies": [
|
|
8
|
+
"https://cdn.jsdelivr.net/npm/makersclaw@0.8.1/r/core.json"
|
|
9
|
+
],
|
|
10
|
+
"dependencies": [],
|
|
11
|
+
"files": [
|
|
12
|
+
{
|
|
13
|
+
"path": "registry/blocks/record-grid/index.js",
|
|
14
|
+
"type": "registry:component",
|
|
15
|
+
"target": "@components/makersclaw/blocks/record-grid/index.js",
|
|
16
|
+
"content": "// The RecordGrid block — `makersclaw add record-grid`. Fixed: compose it\n// through its props (README.md beside this file).\nexport { RecordGrid } from \"./record-grid\";\n"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"path": "registry/blocks/record-grid/record-grid.jsx",
|
|
20
|
+
"type": "registry:component",
|
|
21
|
+
"target": "@components/makersclaw/blocks/record-grid/record-grid.jsx",
|
|
22
|
+
"content": "\"use client\";\n\n// RecordGrid — a dense grid for reading many records at once: a row\n// number and a tick at the start of every row, the name column pinned\n// beside them while the rest scrolls sideways, a header that is yours to\n// draw (a column's live progress, its cost, its menu), a cell that is\n// yours to draw, marks on whole rows (selected, highlighted, struck,\n// dimmed), one active cell, and the keyboard. Only the rows in the window\n// are drawn, so 2,000 rows scroll like twenty. It scrolls itself: give it\n// a bounded parent (h-full, flex-1 min-h-0).\n//\n// Props in, callbacks out; it never fetches and formats nothing. Tokens\n// only.\n\nimport { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from \"react\";\nimport { cx } from \"../../ui\";\n\nconst keyOf = (row, rowKey) => (typeof rowKey === \"function\" ? rowKey(row) : row?.[rowKey ?? \"id\"]);\n\n/**\n * rows the records, in order\n * columns [{ key, width (px), header (node), cell(row, index) (node),\n * className?, headerClassName?, label? (a screen reader's\n * name for the column when the header is not words) }]\n * lead [{ key, width, header, cell(row, index), className? }]:\n * the columns before the pinned ones (a row number, a tick)\n * pinned how many of `columns` stay put beside `lead` (default 1)\n * rowKey a key or (row) => key (default \"id\")\n * rowHeight px (default 32); headerHeight px (default 50)\n * rowMark(row) { selected, highlighted, struck, dimmed }\n * active { row: key, column: key } the active cell, or null\n * onActiveChange(next) the keyboard or a click moved it\n * onCellClick(row, columnKey) a click on a cell (open it)\n * onOpen(row, columnKey) Enter on the active cell\n * after a node in a row of its own after the last row\n * empty what an empty grid says\n * label what a screen reader calls the grid\n * className layout around it\n * ref { scrollToRow(key), scrollToEnd(), focus() }\n */\nexport const RecordGrid = forwardRef(function RecordGrid(\n {\n rows,\n columns,\n lead = [],\n pinned = 1,\n rowKey = \"id\",\n rowHeight = 32,\n headerHeight = 50,\n overscan = 8,\n rowMark,\n active,\n onActiveChange,\n onCellClick,\n onOpen,\n after,\n empty,\n label = \"Records\",\n className,\n },\n ref,\n) {\n const box = useRef(null);\n const [scroll, setScroll] = useState({ top: 0, left: 0, height: 600 });\n\n const all = useMemo(() => [...lead.map((c) => ({ ...c, lead: true })), ...columns], [lead, columns]);\n const stuck = lead.length + Math.max(0, Math.min(pinned, columns.length));\n const offsets = useMemo(() => {\n const out = [];\n let x = 0;\n for (const c of all) {\n out.push(x);\n x += Number(c.width) || 120;\n }\n return { at: out, width: x };\n }, [all]);\n\n const onScroll = useCallback(() => {\n const el = box.current;\n if (!el) return;\n setScroll((s) => (s.top === el.scrollTop && s.left === el.scrollLeft && s.height === el.clientHeight ? s : { top: el.scrollTop, left: el.scrollLeft, height: el.clientHeight }));\n }, []);\n\n useEffect(() => {\n const el = box.current;\n if (!el) return;\n onScroll();\n const ro = typeof ResizeObserver === \"function\" ? new ResizeObserver(onScroll) : null;\n ro?.observe(el);\n return () => ro?.disconnect();\n }, [onScroll]);\n\n const total = rows.length;\n const first = Math.max(0, Math.floor((scroll.top - headerHeight) / rowHeight) - overscan);\n const last = Math.min(total, Math.ceil((scroll.top + scroll.height) / rowHeight) + overscan);\n const shown = rows.slice(first, last);\n\n const indexOf = useCallback((key) => rows.findIndex((r) => keyOf(r, rowKey) === key), [rows, rowKey]);\n\n const scrollToIndex = useCallback(\n (i, block = \"nearest\") => {\n const el = box.current;\n if (!el || i < 0) return;\n const top = headerHeight + i * rowHeight;\n const view = el.clientHeight;\n if (block === \"end\") el.scrollTop = Math.max(0, top + rowHeight - view);\n else if (top < el.scrollTop + headerHeight) el.scrollTop = Math.max(0, top - headerHeight);\n else if (top + rowHeight > el.scrollTop + view) el.scrollTop = top + rowHeight - view;\n },\n [headerHeight, rowHeight],\n );\n\n useImperativeHandle(\n ref,\n () => ({\n scrollToRow: (key) => scrollToIndex(indexOf(key)),\n scrollToEnd: () => {\n const el = box.current;\n if (el) el.scrollTop = el.scrollHeight;\n },\n focus: () => box.current?.focus({ preventScroll: true }),\n }),\n [indexOf, scrollToIndex],\n );\n\n // The active cell stays in view.\n useEffect(() => {\n if (active?.row != null) scrollToIndex(indexOf(active.row));\n }, [active?.row, indexOf, scrollToIndex]);\n\n const keys = columns.map((c) => c.key);\n const onKeyDown = (e) => {\n if (!rows.length || !keys.length) return;\n const at = active ? indexOf(active.row) : -1;\n const col = active ? Math.max(0, keys.indexOf(active.column)) : 0;\n let next = null;\n if (e.key === \"ArrowDown\") next = { i: Math.min(total - 1, at + 1), c: col };\n else if (e.key === \"ArrowUp\") next = { i: Math.max(0, at < 0 ? 0 : at - 1), c: col };\n else if (e.key === \"ArrowRight\") next = { i: Math.max(0, at), c: Math.min(keys.length - 1, col + 1) };\n else if (e.key === \"ArrowLeft\") next = { i: Math.max(0, at), c: Math.max(0, col - 1) };\n else if (e.key === \"Home\") next = { i: e.metaKey || e.ctrlKey ? 0 : Math.max(0, at), c: 0 };\n else if (e.key === \"End\") next = { i: e.metaKey || e.ctrlKey ? total - 1 : Math.max(0, at), c: keys.length - 1 };\n else if (e.key === \"PageDown\") next = { i: Math.min(total - 1, at + Math.max(1, Math.floor(scroll.height / rowHeight) - 1)), c: col };\n else if (e.key === \"PageUp\") next = { i: Math.max(0, at - Math.max(1, Math.floor(scroll.height / rowHeight) - 1)), c: col };\n else if (e.key === \"Enter\" && active) {\n e.preventDefault();\n const row = rows[at];\n if (row) onOpen?.(row, active.column);\n return;\n }\n if (!next) return;\n e.preventDefault();\n const row = rows[next.i];\n if (row) onActiveChange?.({ row: keyOf(row, rowKey), column: keys[next.c] });\n };\n\n const stick = (i, head = false) => {\n if (i >= stuck) return null;\n return { position: \"sticky\", left: offsets.at[i], zIndex: head ? 3 : 1 };\n };\n const edge = (i) => i === stuck - 1 && scroll.left > 0;\n\n return (\n <div\n ref={box}\n role=\"grid\"\n aria-label={label}\n aria-rowcount={total + 1}\n aria-colcount={all.length}\n tabIndex={0}\n onScroll={onScroll}\n onKeyDown={onKeyDown}\n className={cx(\"relative h-full min-h-0 overflow-auto overscroll-contain outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring\", className)}\n >\n <div style={{ width: offsets.width, minWidth: \"100%\", height: headerHeight + total * rowHeight + (after ? 48 : 0) }} className=\"relative\">\n <div role=\"row\" aria-rowindex={1} className=\"sticky top-0 z-[2] flex bg-background\" style={{ height: headerHeight, width: offsets.width }}>\n {all.map((c, i) => (\n <div\n key={c.key}\n role=\"columnheader\"\n aria-label={c.label}\n className={cx(\n \"shrink-0 overflow-hidden border-b border-r border-border bg-background px-2 pb-1 pt-1.5 text-left align-top\",\n edge(i) && \"shadow-[6px_0_8px_-6px_var(--color-foreground)]\",\n c.headerClassName,\n )}\n style={{ width: Number(c.width) || 120, ...stick(i, true) }}\n >\n {c.header}\n </div>\n ))}\n </div>\n {total === 0 ? (\n <div className=\"px-3 py-6 text-sm text-muted-foreground\">{empty ?? \"Nothing here.\"}</div>\n ) : null}\n <div style={{ position: \"absolute\", top: headerHeight + first * rowHeight, left: 0, width: offsets.width }}>\n {shown.map((row, j) => {\n const index = first + j;\n const key = keyOf(row, rowKey);\n const mark = rowMark?.(row) ?? {};\n const tint = mark.selected ? \"bg-accent text-accent-foreground\" : \"bg-background\";\n return (\n <div\n key={key}\n role=\"row\"\n aria-rowindex={index + 2}\n aria-selected={mark.selected ? true : undefined}\n className={cx(\"flex\", mark.struck && \"text-muted-foreground\")}\n style={{ height: rowHeight }}\n >\n {all.map((c, i) => {\n const on = active && active.row === key && active.column === c.key;\n return (\n <div\n key={c.key}\n role=\"gridcell\"\n aria-selected={on ? true : undefined}\n onClick={c.lead ? undefined : () => {\n onActiveChange?.({ row: key, column: c.key });\n onCellClick?.(row, c.key);\n }}\n className={cx(\n \"flex shrink-0 items-center overflow-hidden whitespace-nowrap border-b border-r border-border px-2\",\n tint,\n !c.lead && onCellClick && \"cursor-pointer\",\n mark.dimmed && !c.lead && i >= stuck && \"opacity-55\",\n mark.struck && i === stuck - 1 && \"line-through decoration-muted-foreground\",\n mark.highlighted && i === 0 && \"border-l-2 border-l-primary\",\n edge(i) && \"shadow-[6px_0_8px_-6px_var(--color-foreground)]\",\n on && \"outline outline-2 -outline-offset-2 outline-ring\",\n c.className,\n )}\n style={{ width: Number(c.width) || 120, height: rowHeight, ...stick(i) }}\n >\n {c.cell ? c.cell(row, index) : row[c.key]}\n </div>\n );\n })}\n </div>\n );\n })}\n </div>\n {after && total ? (\n <div className=\"absolute left-0 flex items-center px-3 text-sm text-muted-foreground\" style={{ top: headerHeight + total * rowHeight, minHeight: 48, width: \"100%\" }}>\n <div className=\"sticky left-3\">{after}</div>\n </div>\n ) : null}\n </div>\n </div>\n );\n});\n"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"path": "registry/blocks/record-grid/README.md",
|
|
26
|
+
"type": "registry:file",
|
|
27
|
+
"target": "@components/makersclaw/blocks/record-grid/README.md",
|
|
28
|
+
"content": "# RecordGrid\n\nA dense grid for reading many records at once. Each row starts with what\nyou put in `lead` (a row number, a tick), then the pinned columns (the\nname), then the rest, which scroll sideways under a sticky header. Every\nheader and every cell is yours to draw: a column whose header carries its\nlive progress, its price and its own menu; a cell that draws an answer\nwith its mark. Whole rows take marks (selected, highlighted, struck,\ndimmed), one cell is active (an outline), the arrow keys move it, Enter\nopens it, a click opens it. Only the rows in the window are drawn, at a\nfixed height, so 2,000 rows scroll like twenty. It scrolls itself: put it\nin a bounded parent (`h-full`, `flex-1 min-h-0`, an AppLayout's content\nwith `contentMode=\"fill\"`) that can also shrink sideways: in a grid or\nflex row give that parent `min-w-0`, or the grid's columns widen the\nparent instead of scrolling inside it.\n\nBorn in Data Enrichment (0.5.0), moved into the template with the app kit: the list, with\neach agent column a job whose header says how far it got and what a row\ncosts, and the receipt of an answer opened beside it.\n\n```jsx\nimport { RecordGrid } from \"../components/blocks/record-grid\"; // a Makersclaw app (\"./blocks/record-grid\" from components/)\nimport { RecordGrid } from \"@/components/makersclaw/blocks/record-grid\"; // a shadcn project\n```\n\n## Props\n\n- `rows` — the records, in order. Each has a key (`rowKey`).\n- `columns` — `[{ key, width, header, cell(row, index), className?,\n headerClassName?, label? }]`. `width` in px (default 120). `header` is\n any node, drawn at the top of a `headerHeight` cell; `cell(row, index)`\n any node, in a one-line cell of `rowHeight` (it clips: truncate your\n text). `label` names the column for a screen reader when the header is\n not words.\n- `lead` — columns before the pinned ones, the same shape: a row number,\n a tick. They are pinned too, and a click on them is theirs (no active\n cell).\n- `pinned` — how many of `columns` stay put beside `lead` (default 1).\n When the grid has scrolled sideways the last pinned column casts an\n edge.\n- `rowKey` — a key or `(row) => key` (default `\"id\"`).\n- `rowHeight` (32) · `headerHeight` (50) · `overscan` (8 rows drawn past\n each end of the window).\n- `rowMark(row)` — `{ selected, highlighted, struck, dimmed }`: selected\n tints the row with `accent`; highlighted draws a bar in `primary` at\n its start (the rows a fill will work on); struck lines through the\n last pinned column and quiets the row (a skipped row); dimmed fades the\n unpinned cells.\n- `active` — `{ row, column }`, the cell with the outline, or null.\n- `onActiveChange(next)` — a click or a key moved it. Keep it in state.\n- `onCellClick(row, columnKey)` — a click on an unpinned or pinned\n (not `lead`) cell: open what it shows.\n- `onOpen(row, columnKey)` — Enter on the active cell.\n- `after` — a node in a row of its own after the last row (\"+ Add rows\").\n- `empty` — what an empty grid says.\n- `label` — what a screen reader calls the grid (`\"Records\"`).\n- `className` — layout around it. Never colour.\n- `ref` — `{ scrollToRow(key), scrollToEnd(), focus() }`.\n\nKeys, with the grid focused: ↑ ↓ ← → move the active cell · Home / End\nthe row's ends (⌘ for the grid's) · Page Up / Down · Enter opens. Your\nown keys (J and K for the next answer to check) go on a parent.\n\n## Example\n\n```jsx\n\"use client\";\nimport { useState } from \"react\";\nimport { RecordGrid } from \"./blocks/record-grid\";\n\nexport function Companies({ rows, open }) {\n const [active, setActive] = useState(null);\n return (\n <div className=\"h-full min-h-0\">\n <RecordGrid\n label=\"Companies\"\n rows={rows}\n lead={[{ key: \"n\", width: 44, header: \"#\", cell: (r, i) => i + 1 }]}\n columns={[\n { key: \"name\", width: 180, header: <b>Company</b>, cell: (r) => <span className=\"truncate\">{r.name}</span> },\n { key: \"headcount\", width: 120, header: <b>Headcount</b>, cell: (r) => r.headcount },\n ]}\n active={active}\n onActiveChange={setActive}\n onCellClick={(r, key) => open(r, key)}\n onOpen={(r, key) => open(r, key)}\n rowMark={(r) => ({ selected: active?.row === r.id })}\n />\n </div>\n );\n}\n```\n\n## What it will not do\n\n- Edit a cell, sort, filter or page: the rows come in as you want them\n shown, and your cells' buttons do the work.\n- Rows of their own heights: one height keeps 2,000 rows smooth.\n- Draw a phone layout: below 768px draw your own cards, or let it scroll\n sideways inside its box.\n"
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"categories": [
|
|
32
|
+
"grid",
|
|
33
|
+
"table",
|
|
34
|
+
"records",
|
|
35
|
+
"virtual",
|
|
36
|
+
"pinned column",
|
|
37
|
+
"header",
|
|
38
|
+
"dense",
|
|
39
|
+
"keyboard",
|
|
40
|
+
"rows",
|
|
41
|
+
"review",
|
|
42
|
+
"enrichment",
|
|
43
|
+
"list"
|
|
44
|
+
],
|
|
45
|
+
"docs": "Installed to components/makersclaw/blocks/record-grid. Import: import { RecordGrid } from \"@/components/makersclaw/blocks/record-grid\". Props and an example: components/makersclaw/blocks/record-grid/README.md. Makersclaw builds whole apps from these blocks: https://makersclaw.com",
|
|
46
|
+
"meta": {
|
|
47
|
+
"makersclaw": {
|
|
48
|
+
"version": "0.8.1",
|
|
49
|
+
"useWhen": "A list that is read and worked rather than typed into, where each column needs its own header (an agent's column with its progress and price, a column with a menu) and each cell its own drawing: a research list being enriched, a review queue across many records, a report of a long job's rows. Not for editing cells like a sheet (spreadsheet) or a few dozen rows with sort and filters built in (data-table)."
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
package/r/record-notes.json
CHANGED
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
"title": "RecordNotes",
|
|
6
6
|
"description": "Dated rich-text notes on one record (a deal, a contact, a company), to sit beside record-form: a composer with @mentions and Cmd/Ctrl+Enter adds a note; the notes follow newest first (or oldest), grouped by day, each with author avatar, name and relative time; your own notes edit in place and delete after a confirm. Every save is an async callback answering { ok }; a failure keeps the words and says why where it happened.",
|
|
7
7
|
"registryDependencies": [
|
|
8
|
-
"https://cdn.jsdelivr.net/npm/makersclaw@0.8.
|
|
9
|
-
"https://cdn.jsdelivr.net/npm/makersclaw@0.8.
|
|
10
|
-
"https://cdn.jsdelivr.net/npm/makersclaw@0.8.
|
|
8
|
+
"https://cdn.jsdelivr.net/npm/makersclaw@0.8.1/r/core.json",
|
|
9
|
+
"https://cdn.jsdelivr.net/npm/makersclaw@0.8.1/r/comment-box.json",
|
|
10
|
+
"https://cdn.jsdelivr.net/npm/makersclaw@0.8.1/r/doc-editor.json"
|
|
11
11
|
],
|
|
12
12
|
"dependencies": [],
|
|
13
13
|
"files": [
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"docs": "Installed to components/makersclaw/blocks/record-notes. Import: import { RecordNotes } from \"@/components/makersclaw/blocks/record-notes\". Props and an example: components/makersclaw/blocks/record-notes/README.md. Makersclaw builds whole apps from these blocks: https://makersclaw.com",
|
|
49
49
|
"meta": {
|
|
50
50
|
"makersclaw": {
|
|
51
|
-
"version": "0.8.
|
|
51
|
+
"version": "0.8.1",
|
|
52
52
|
"useWhen": "A record page keeps a running log of notes: call notes on a deal, context on a contact, a history on a customer or a candidate. Not a discussion thread without edit and delete (comment-box), not one long document per record (doc-editor or doc-page), not an automatic activity feed."
|
|
53
53
|
}
|
|
54
54
|
}
|