makersclaw 0.7.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 +17 -4
- 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 +4 -4
- 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 +5 -5
- package/r/chat-pane.json +84 -0
- package/r/chat.json +3 -3
- 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 +18 -6
- 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 +3 -3
- package/r/flow-editor.json +79 -0
- package/r/footer.json +3 -3
- 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 +4 -4
- 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 +4 -4
- package/r/pace-bar.json +69 -0
- package/r/page-builder.json +3 -3
- package/r/payment-methods.json +2 -2
- package/r/pdf-document.json +2 -2
- package/r/pdf-viewer.json +3 -3
- 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 +4089 -1510
- 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 +3 -3
- package/r/signature-pad.json +2 -2
- package/r/sketch-canvas.json +3 -3
- 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 +4 -4
- 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/annotate/README.md +14 -11
- 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/chart/cartesian.jsx +1 -1
- package/registry/blocks/chart/core.jsx +33 -23
- package/registry/blocks/chart/pie.jsx +1 -1
- package/registry/blocks/chat/README.md +4 -1
- package/registry/blocks/chat/demo.jsx +2 -2
- 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-canvas/README.md +15 -8
- 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/footer/README.md +3 -2
- 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/mind-map/README.md +4 -2
- 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/org-chart/README.md +4 -2
- 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/page-builder/README.md +1 -1
- package/registry/blocks/page-builder/demo.jsx +3 -3
- package/registry/blocks/pdf-viewer/README.md +4 -1
- 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/sidebar/README.md +23 -13
- package/registry/blocks/sketch-canvas/README.md +15 -9
- 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/whiteboard/README.md +20 -14
- 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/cli.mjs +2 -2
- package/src/install.mjs +100 -22
- package/src/registry.mjs +37 -3
- package/templates/next/browser/lib/data.js +6 -1
- package/templates/next/files/README.md +909 -26
- package/templates/next/files/app/shell.jsx +54 -37
- 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 +1043 -12
- 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 +3 -1
- package/templates/next/files/components/ui/layout.jsx +382 -0
- 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 +244 -5
- package/templates/next/files/lib/door.js +92 -0
- package/templates/next/files/lib/hooks.js +1694 -6
- package/templates/next/files/lib/platform.js +611 -14
- package/templates/next/template.json +22 -3
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# StepSettings
|
|
2
|
+
|
|
3
|
+
The panel for one step of an automation, made for its kind, and the panel
|
|
4
|
+
for the automation as a whole. In a run the same panel is read-only and
|
|
5
|
+
adds how the step went.
|
|
6
|
+
|
|
7
|
+
**StepSettings** — a name; then what the kind needs, in a person's words:
|
|
8
|
+
|
|
9
|
+
- **App action** — picked from the app's declared actions (`actions`),
|
|
10
|
+
with what to give it; in a team automation, which app.
|
|
11
|
+
- **Connected tool** — the kind of account (mail, calendar, chat — never a
|
|
12
|
+
product), the tool, which account when there are several, what to give it.
|
|
13
|
+
- **Condition** — "Go the Yes way when …"; anything else goes No.
|
|
14
|
+
- **For each** — the list, at most how many, what to collect.
|
|
15
|
+
- **Ask the model** — what to ask, Quick or Careful, standing instructions.
|
|
16
|
+
- **Agent** — what it should do, and the most it may spend.
|
|
17
|
+
- **Buy paid data** (a Zero step) — the paid service, its address, how it is
|
|
18
|
+
called (Ask, Send, Replace, Change), what to give it, and the most one call
|
|
19
|
+
may cost in dollars. Plain code: no model, and the same call is never paid
|
|
20
|
+
for twice.
|
|
21
|
+
- **Set, Wait, Stop, Tell someone, Search, Another automation, Company
|
|
22
|
+
brain** — their own few fields.
|
|
23
|
+
|
|
24
|
+
Every text field takes data from earlier steps (`data-picker`). For every
|
|
25
|
+
step: **If it fails** (stop or carry on without it; how many tries) and a
|
|
26
|
+
plain **To fix** list of what is wrong with it. In a run (`readOnly` and a
|
|
27
|
+
`summary`): how it went, how many times, what it cost, what went in and
|
|
28
|
+
what came out (for those who may read it), and the agent's fix (`fix-note`).
|
|
29
|
+
|
|
30
|
+
**FlowSettings** — name; what it does; if it is still running when the next
|
|
31
|
+
is due (skip, queue, run both); only when something changed; what happens
|
|
32
|
+
when a step fails (retry, then the agent; the agent first; stop); the most
|
|
33
|
+
one run may spend; what a manual run asks for first; its versions.
|
|
34
|
+
|
|
35
|
+
```jsx
|
|
36
|
+
import { StepSettings, FlowSettings } from "../components/blocks/step-settings"; // a Makersclaw app
|
|
37
|
+
import { StepSettings, FlowSettings } from "@/components/makersclaw/blocks/step-settings"; // a shadcn project
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
`makersclaw add step-settings` lays `data-picker`, `fix-note` and
|
|
41
|
+
`automation-model` with it. Client components. Each is a panel (a head, a
|
|
42
|
+
scrolling body, a foot): place it beside or over the canvas.
|
|
43
|
+
|
|
44
|
+
## Props
|
|
45
|
+
|
|
46
|
+
### StepSettings
|
|
47
|
+
|
|
48
|
+
- `step` — the step shown.
|
|
49
|
+
- `available` — `availableBefore(def, step.id, stepTitle)`, plus
|
|
50
|
+
`inputs: [{ name, label }]` for a manual run's questions. `samples` —
|
|
51
|
+
`{ [stepId]: a real output }`, or null.
|
|
52
|
+
- `apps` — `[{ id, name }]`; `ownedByApp` — an app's own automation needs
|
|
53
|
+
no app on an action. `actions` — `[{ name, description }]`.
|
|
54
|
+
- `problems` — lines about this step (`issuesFor(issues, step.id)`).
|
|
55
|
+
- `readOnly`, `summary` (a run's `summarizeSteps(rows).get(step.id)`),
|
|
56
|
+
`dataVisible` (the member may read what went in and out), `onKeepFix()`,
|
|
57
|
+
`runActions` (a node drawn under how the step went: run-view puts its
|
|
58
|
+
"Retry from this step" there).
|
|
59
|
+
- `onChange(patch)` — fields to change, for `updateStep(def, id, patch)`.
|
|
60
|
+
`onRemove()` (asks first when the step holds others), `onDuplicate()`,
|
|
61
|
+
`onClose()`.
|
|
62
|
+
|
|
63
|
+
### FlowSettings
|
|
64
|
+
|
|
65
|
+
- `def`, `readOnly`, `versions` (`[{ version, kind, note, created_at }]`),
|
|
66
|
+
`liveVersion`, `onChange(def)`, `onClose`, `onReset` ("Reset to the app's
|
|
67
|
+
version", when it was edited from a shipped one).
|
|
68
|
+
|
|
69
|
+
### The rows
|
|
70
|
+
|
|
71
|
+
`TextField`, `NumberField`, `SelectField` and `SwitchField`: a labelled
|
|
72
|
+
control each, on the kit's parts.
|
|
73
|
+
|
|
74
|
+
## Never
|
|
75
|
+
|
|
76
|
+
- Never show the definition's own keys: a step's words are a person's.
|
|
77
|
+
(The step id is shown small, because a run's rows and an app update
|
|
78
|
+
match steps by it.)
|
|
79
|
+
- Never let the panel save: it only says what changed. The screen saves.
|
|
80
|
+
|
|
81
|
+
## Example
|
|
82
|
+
|
|
83
|
+
```jsx
|
|
84
|
+
"use client";
|
|
85
|
+
import { useState } from "react";
|
|
86
|
+
import { availableBefore, stepTitle, updateStep } from "../components/blocks/automation-model";
|
|
87
|
+
import { StepSettings } from "../components/blocks/step-settings";
|
|
88
|
+
|
|
89
|
+
const START = { format: 1, key: "t", name: "T", trigger: { type: "manual" }, inputs: {}, settings: {}, steps: [{ id: "tell", kind: "notify", message: "Hello" }] };
|
|
90
|
+
|
|
91
|
+
export default function Panel() {
|
|
92
|
+
const [def, setDef] = useState(START);
|
|
93
|
+
const step = def.steps[0];
|
|
94
|
+
return (
|
|
95
|
+
<div className="h-[520px] max-w-sm overflow-hidden rounded-lg border border-border">
|
|
96
|
+
<StepSettings step={step} available={availableBefore(def, step.id, stepTitle)} onChange={(patch) => setDef(updateStep(def, step.id, patch))} onClose={() => {}} />
|
|
97
|
+
</div>
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
```
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "step-settings",
|
|
3
|
+
"title": "StepSettings",
|
|
4
|
+
"description": "The panel for one step of an automation, made for its kind: a name; an app action picked from the app's declared actions with what to give it; a connected tool by kind of account; a condition; a for-each's list and limit; a model call's question and tier; an agent step's instructions and credit limit; a paid-data step's service, address and price ceiling; a wait; a stop; a note for the owner; and, for every step, what happens if it fails (stop or carry on, how many tries) and a plain list of what is wrong with it. Every text field takes data from earlier steps (data-picker). In a run the same panel is read-only and shows how the step went, what went in and what came out, and what the agent changed (fix-note). FlowSettings is the panel for the automation as a whole: name, what it does, overlap, what happens when a step fails, the most a run may spend, what a manual run asks first, and its versions.",
|
|
5
|
+
"useWhen": "A step or an automation is edited or read in your own screen. automation-editor and run-view place these for you.",
|
|
6
|
+
"tags": [
|
|
7
|
+
"automation",
|
|
8
|
+
"workflow",
|
|
9
|
+
"step",
|
|
10
|
+
"settings",
|
|
11
|
+
"form",
|
|
12
|
+
"panel",
|
|
13
|
+
"inspector",
|
|
14
|
+
"action",
|
|
15
|
+
"condition",
|
|
16
|
+
"loop",
|
|
17
|
+
"llm",
|
|
18
|
+
"agent",
|
|
19
|
+
"retry",
|
|
20
|
+
"failure",
|
|
21
|
+
"versions",
|
|
22
|
+
"n8n",
|
|
23
|
+
"make"
|
|
24
|
+
],
|
|
25
|
+
"exports": [
|
|
26
|
+
"FlowSettings",
|
|
27
|
+
"NumberField",
|
|
28
|
+
"SelectField",
|
|
29
|
+
"StepSettings",
|
|
30
|
+
"SwitchField",
|
|
31
|
+
"TextField"
|
|
32
|
+
],
|
|
33
|
+
"files": [
|
|
34
|
+
"index.js",
|
|
35
|
+
"step-settings.jsx",
|
|
36
|
+
"flow-settings.jsx",
|
|
37
|
+
"fields.jsx"
|
|
38
|
+
],
|
|
39
|
+
"requires": [
|
|
40
|
+
"automation-model",
|
|
41
|
+
"data-picker",
|
|
42
|
+
"fix-note"
|
|
43
|
+
]
|
|
44
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// StepSettings and FlowSettings — the gallery's and the smoke test's
|
|
4
|
+
// surface. Not installed into apps. A step of each kind to look at, the
|
|
5
|
+
// whole-automation panel, and a failed step in a run with the agent's fix.
|
|
6
|
+
import { useState } from "react";
|
|
7
|
+
import { Button, ButtonGroup } from "../components/ui";
|
|
8
|
+
import { StepSettings, FlowSettings } from "../components/blocks/step-settings";
|
|
9
|
+
import { availableBefore, blankAutomation, stepTitle, summarizeSteps, updateStep } from "../components/blocks/automation-model";
|
|
10
|
+
|
|
11
|
+
const DEF = {
|
|
12
|
+
...blankAutomation("Morning read", "morning-read", { type: "schedule", cron: "0 7 * * 1-5", tz: "team" }),
|
|
13
|
+
does: "Reads your mail and drafts the follow-ups that are owed.",
|
|
14
|
+
steps: [
|
|
15
|
+
{ id: "mail", kind: "tool", label: "Read the mail", needs: { category: "mail" }, tool: "list_messages", input: { since: "{{ trigger.at }}", limit: 200 } },
|
|
16
|
+
{ id: "touches", kind: "action", action: "record_touches", input: { touches: "{{ steps.mail.output.messages }}" } },
|
|
17
|
+
{ id: "check", kind: "condition", if: "{{ steps.touches.output.saved > 0 }}", then: [{ id: "tell", kind: "notify", message: "Saved some." }], else: [] },
|
|
18
|
+
{ id: "ask", kind: "llm", prompt: "Write one line about {{ steps.touches.output.saved }} people.", tier: "fast" },
|
|
19
|
+
{ id: "agent", kind: "agent", instructions: "Look at the list and say what looks wrong.", cap_credits: 40 },
|
|
20
|
+
],
|
|
21
|
+
};
|
|
22
|
+
const ACTIONS = [
|
|
23
|
+
{ name: "record_touches", description: "Save who wrote and who was met" },
|
|
24
|
+
{ name: "suggest", description: "Save a draft for a person" },
|
|
25
|
+
];
|
|
26
|
+
const OUTPUTS = { mail: { count: 12, messages: [{ from: "ana@x.com" }] } };
|
|
27
|
+
const FAILED = summarizeSteps([
|
|
28
|
+
{
|
|
29
|
+
path: "touches",
|
|
30
|
+
step_id: "touches",
|
|
31
|
+
attempt: 2,
|
|
32
|
+
status: "done",
|
|
33
|
+
started_at: "2026-10-12T07:00:01Z",
|
|
34
|
+
ended_at: "2026-10-12T07:00:04Z",
|
|
35
|
+
credits: 0.4,
|
|
36
|
+
error: null,
|
|
37
|
+
input: { touches: ["Ana@x.com "] },
|
|
38
|
+
output: { saved: 1 },
|
|
39
|
+
fix: { by: "agent", kind: "format", before: "Ana@x.com ", after: "ana@x.com", why: "The mail tool refuses spaces." },
|
|
40
|
+
},
|
|
41
|
+
]).get("touches");
|
|
42
|
+
|
|
43
|
+
export default function StepSettingsDemo() {
|
|
44
|
+
const [def, setDef] = useState(DEF);
|
|
45
|
+
const [id, setId] = useState("touches");
|
|
46
|
+
const [which, setWhich] = useState("step");
|
|
47
|
+
const step = def.steps.find((s) => s.id === id) ?? def.steps[0];
|
|
48
|
+
return (
|
|
49
|
+
<div className="grid gap-4 p-4">
|
|
50
|
+
<div className="flex flex-wrap gap-2">
|
|
51
|
+
<ButtonGroup aria-label="Which panel">
|
|
52
|
+
{["step", "run", "flow"].map((w) => (
|
|
53
|
+
<Button key={w} size="sm" variant={which === w ? "primary" : "secondary"} onClick={() => setWhich(w)}>
|
|
54
|
+
{w === "step" ? "A step" : w === "run" ? "A step in a run" : "The automation"}
|
|
55
|
+
</Button>
|
|
56
|
+
))}
|
|
57
|
+
</ButtonGroup>
|
|
58
|
+
{which !== "flow" ? (
|
|
59
|
+
<ButtonGroup aria-label="Which step">
|
|
60
|
+
{def.steps.map((s) => (
|
|
61
|
+
<Button key={s.id} size="sm" variant={s.id === step.id ? "primary" : "secondary"} onClick={() => setId(s.id)}>
|
|
62
|
+
{s.kind}
|
|
63
|
+
</Button>
|
|
64
|
+
))}
|
|
65
|
+
</ButtonGroup>
|
|
66
|
+
) : null}
|
|
67
|
+
</div>
|
|
68
|
+
<div className="h-[640px] w-full max-w-sm overflow-hidden rounded-lg border border-border">
|
|
69
|
+
{which === "flow" ? (
|
|
70
|
+
<FlowSettings def={def} versions={[{ version: 2, kind: "member", created_at: "2026-10-11T12:00:00Z", note: "Added the check" }, { version: 1, kind: "shipped", created_at: "2026-10-09T12:00:00Z" }]} liveVersion={2} onChange={setDef} onClose={() => {}} onReset={() => {}} />
|
|
71
|
+
) : (
|
|
72
|
+
<StepSettings
|
|
73
|
+
key={`${which}:${step.id}`}
|
|
74
|
+
step={step}
|
|
75
|
+
available={{ ...availableBefore(def, step.id, stepTitle), inputs: [] }}
|
|
76
|
+
samples={OUTPUTS}
|
|
77
|
+
actions={ACTIONS}
|
|
78
|
+
ownedByApp
|
|
79
|
+
problems={step.kind === "agent" ? ["Tell the agent what to do."] : []}
|
|
80
|
+
readOnly={which === "run"}
|
|
81
|
+
summary={which === "run" && step.id === "touches" ? FAILED : null}
|
|
82
|
+
dataVisible
|
|
83
|
+
onChange={(patch) => setDef(updateStep(def, step.id, patch))}
|
|
84
|
+
onRemove={() => setDef({ ...def, steps: def.steps.filter((s) => s.id !== step.id) })}
|
|
85
|
+
onDuplicate={() => {}}
|
|
86
|
+
onKeepFix={async () => ({ ok: true })}
|
|
87
|
+
onClose={() => {}}
|
|
88
|
+
/>
|
|
89
|
+
)}
|
|
90
|
+
</div>
|
|
91
|
+
</div>
|
|
92
|
+
);
|
|
93
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// The plain form rows the settings panels share, on the kit's parts: a
|
|
4
|
+
// labelled text, number, select or switch. Each is a real label over a
|
|
5
|
+
// real control, so it works by keyboard and with a screen reader.
|
|
6
|
+
|
|
7
|
+
import { useId } from "react";
|
|
8
|
+
import { Field, Input, Select, Switch, Textarea } from "../../ui";
|
|
9
|
+
|
|
10
|
+
export function TextField({ label, value, onChange, help, placeholder, mono = false, multiline = false, rows = 3, disabled = false }) {
|
|
11
|
+
const id = useId();
|
|
12
|
+
const common = { id, value, disabled, placeholder, className: mono ? "font-mono text-[13px]" : undefined, onChange: (e) => onChange(e.target.value) };
|
|
13
|
+
return (
|
|
14
|
+
<Field id={id} label={label} hint={help}>
|
|
15
|
+
{multiline ? <Textarea {...common} rows={rows} /> : <Input {...common} type="text" />}
|
|
16
|
+
</Field>
|
|
17
|
+
);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function NumberField({ label, value, onChange, min, max, step, help, placeholder, disabled = false }) {
|
|
21
|
+
const id = useId();
|
|
22
|
+
return (
|
|
23
|
+
<Field id={id} label={label} hint={help}>
|
|
24
|
+
<Input
|
|
25
|
+
id={id}
|
|
26
|
+
type="number"
|
|
27
|
+
inputMode={step !== undefined && step < 1 ? "decimal" : "numeric"}
|
|
28
|
+
className="font-mono text-[13px]"
|
|
29
|
+
min={min}
|
|
30
|
+
max={max}
|
|
31
|
+
step={step}
|
|
32
|
+
value={value ?? ""}
|
|
33
|
+
placeholder={placeholder}
|
|
34
|
+
disabled={disabled}
|
|
35
|
+
onChange={(e) => onChange(e.target.value === "" ? undefined : Number(e.target.value))}
|
|
36
|
+
/>
|
|
37
|
+
</Field>
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export function SelectField({ label, value, onChange, options, help, disabled = false }) {
|
|
42
|
+
const id = useId();
|
|
43
|
+
return (
|
|
44
|
+
<Field id={id} label={label} hint={help}>
|
|
45
|
+
<Select id={id} value={value} disabled={disabled} options={options} onChange={(e) => onChange(e.target.value)} />
|
|
46
|
+
</Field>
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export function SwitchField({ label, checked, onChange, help, disabled = false }) {
|
|
51
|
+
const id = useId();
|
|
52
|
+
return (
|
|
53
|
+
<div className="grid gap-0.5">
|
|
54
|
+
<Switch id={id} checked={checked} disabled={disabled} label={label} onChange={(e) => onChange(e.target.checked)} />
|
|
55
|
+
{help ? <p className="m-0 text-xs text-muted-foreground">{help}</p> : null}
|
|
56
|
+
</div>
|
|
57
|
+
);
|
|
58
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
// The panel for the automation as a whole: its name, what it does, what
|
|
4
|
+
// happens when a step fails, what one run may spend, what a manual run
|
|
5
|
+
// asks for first, and its versions. Props in; every change is
|
|
6
|
+
// `onChange(nextDefinition)`.
|
|
7
|
+
|
|
8
|
+
import { Button, Select, Input, cx } from "../../ui";
|
|
9
|
+
import { Chip, Glyph, PanelSection, SidePanel, agoWords } from "../automation-model";
|
|
10
|
+
import { NumberField, SelectField, SwitchField, TextField } from "./fields";
|
|
11
|
+
|
|
12
|
+
const OVERLAP = [
|
|
13
|
+
{ value: "skip", label: "Skip the new run" },
|
|
14
|
+
{ value: "queue", label: "Queue it behind" },
|
|
15
|
+
{ value: "allow", label: "Run both at once" },
|
|
16
|
+
];
|
|
17
|
+
const FAILURE = [
|
|
18
|
+
{ value: "retry_then_agent", label: "Retry, then ask the agent to fix it" },
|
|
19
|
+
{ value: "agent_first", label: "Ask the agent to fix it straight away" },
|
|
20
|
+
{ value: "stop", label: "Stop the run" },
|
|
21
|
+
];
|
|
22
|
+
const INPUT_TYPES = [
|
|
23
|
+
{ value: "string", label: "Text" },
|
|
24
|
+
{ value: "number", label: "Number" },
|
|
25
|
+
{ value: "boolean", label: "Yes or no" },
|
|
26
|
+
{ value: "date", label: "Date" },
|
|
27
|
+
];
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* def the automation: { name, does, settings, inputs, … }
|
|
31
|
+
* readOnly shown, not editable
|
|
32
|
+
* versions [{ version, kind: shipped|member|agent, note, created_at }]
|
|
33
|
+
* liveVersion the version that runs
|
|
34
|
+
* onChange(def)
|
|
35
|
+
* onClose draws the close button
|
|
36
|
+
* onReset draws "Reset to the app's version" when the automation
|
|
37
|
+
* was edited from a shipped one
|
|
38
|
+
*/
|
|
39
|
+
export function FlowSettings({ def, readOnly = false, versions = [], liveVersion = null, onChange, onClose, onReset }) {
|
|
40
|
+
const set = (patch) => onChange({ ...def, ...patch });
|
|
41
|
+
const setSettings = (patch) => onChange({ ...def, settings: { ...def.settings, ...patch } });
|
|
42
|
+
const inputs = Object.entries(def.inputs ?? {});
|
|
43
|
+
const setInputs = (next) => onChange({ ...def, inputs: Object.fromEntries(next) });
|
|
44
|
+
|
|
45
|
+
return (
|
|
46
|
+
<SidePanel glyph={<Glyph name="automation" size={20} />} title="This automation" subtitle="How it behaves as a whole" label="Flow settings" onClose={onClose}>
|
|
47
|
+
<TextField label="Name" value={def.name} disabled={readOnly} onChange={(v) => set({ name: v })} />
|
|
48
|
+
<TextField label="What it does" value={def.does ?? ""} multiline rows={3} disabled={readOnly} onChange={(v) => set({ does: v || undefined })} help="One sentence, for the list." />
|
|
49
|
+
|
|
50
|
+
<PanelSection title="When it runs">
|
|
51
|
+
<SelectField label="If it is still running when the next one is due" value={def.settings.overlap} options={OVERLAP} disabled={readOnly} onChange={(v) => setSettings({ overlap: v })} />
|
|
52
|
+
<SwitchField label="Only when something changed" checked={Boolean(def.settings.only_if_changed)} disabled={readOnly} onChange={(v) => setSettings({ only_if_changed: v })} help="Skip a scheduled run when nothing it reads has changed since the last one." />
|
|
53
|
+
</PanelSection>
|
|
54
|
+
|
|
55
|
+
<PanelSection title="When a step fails">
|
|
56
|
+
<SelectField label="What happens" value={def.settings.on_failure} options={FAILURE} disabled={readOnly} onChange={(v) => setSettings({ on_failure: v })} help="The agent changes only this run: a date format, a missing field. Never who gets what." />
|
|
57
|
+
<NumberField label="Most one run may spend" value={def.settings.run_cap_credits} min={1} disabled={readOnly} placeholder="No limit" onChange={(v) => setSettings({ run_cap_credits: v })} help="In credits. A run that reaches it stops." />
|
|
58
|
+
</PanelSection>
|
|
59
|
+
|
|
60
|
+
<PanelSection title="What a manual run asks for">
|
|
61
|
+
{inputs.length === 0 ? <p className="m-0 text-xs text-muted-foreground">Nothing. Add a question if a run needs an answer first.</p> : null}
|
|
62
|
+
{inputs.map(([name, spec], i) => (
|
|
63
|
+
<div key={i} className="flex min-w-0 items-center gap-1.5">
|
|
64
|
+
<Input
|
|
65
|
+
className="min-w-0 flex-1 font-mono text-[13px]"
|
|
66
|
+
aria-label={`Question name ${i + 1}`}
|
|
67
|
+
value={name}
|
|
68
|
+
disabled={readOnly}
|
|
69
|
+
onChange={(e) => setInputs(inputs.map((x, j) => (j === i ? [e.target.value.toLowerCase().replace(/[^a-z0-9_]/g, "_"), x[1]] : x)))}
|
|
70
|
+
/>
|
|
71
|
+
<span className="w-28 shrink-0">
|
|
72
|
+
<Select aria-label={`Question type ${i + 1}`} value={spec.type} disabled={readOnly} options={INPUT_TYPES} onChange={(e) => setInputs(inputs.map((x, j) => (j === i ? [x[0], { ...x[1], type: e.target.value }] : x)))} />
|
|
73
|
+
</span>
|
|
74
|
+
{!readOnly ? (
|
|
75
|
+
<button type="button" aria-label={`Remove ${name}`} onClick={() => setInputs(inputs.filter((_, j) => j !== i))} className="inline-flex size-9 shrink-0 items-center justify-center rounded-md text-muted-foreground hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring">
|
|
76
|
+
×
|
|
77
|
+
</button>
|
|
78
|
+
) : null}
|
|
79
|
+
</div>
|
|
80
|
+
))}
|
|
81
|
+
{!readOnly && inputs.length < 20 ? (
|
|
82
|
+
<Button size="sm" variant="secondary" className="justify-self-start" onClick={() => setInputs([...inputs, [`question_${inputs.length + 1}`, { type: "string", label: "" }]])}>
|
|
83
|
+
+ Add a question
|
|
84
|
+
</Button>
|
|
85
|
+
) : null}
|
|
86
|
+
</PanelSection>
|
|
87
|
+
|
|
88
|
+
{versions.length > 0 ? (
|
|
89
|
+
<PanelSection title="Versions">
|
|
90
|
+
<ol className="m-0 grid list-none gap-1.5 p-0">
|
|
91
|
+
{versions.map((v) => (
|
|
92
|
+
<li key={v.version} className={cx("grid gap-0.5 rounded-lg border px-2.5 py-1.5", v.version === liveVersion ? "border-success/50" : "border-border")}>
|
|
93
|
+
<span className="flex items-center gap-2">
|
|
94
|
+
<b className="text-[13px] font-semibold">Version {v.version}</b>
|
|
95
|
+
{v.version === liveVersion ? <Chip tone="green">Live</Chip> : null}
|
|
96
|
+
</span>
|
|
97
|
+
<span className="text-xs text-muted-foreground">
|
|
98
|
+
{v.kind === "shipped" ? "From the app" : v.kind === "agent" ? "By the agent" : "Edited"}
|
|
99
|
+
{" · "}
|
|
100
|
+
{agoWords(v.created_at) ?? ""}
|
|
101
|
+
</span>
|
|
102
|
+
{v.note ? <p className="m-0 text-xs">{v.note}</p> : null}
|
|
103
|
+
</li>
|
|
104
|
+
))}
|
|
105
|
+
</ol>
|
|
106
|
+
{onReset && !readOnly ? (
|
|
107
|
+
<Button size="sm" variant="secondary" className="justify-self-start" onClick={onReset}>
|
|
108
|
+
Reset to the app's version
|
|
109
|
+
</Button>
|
|
110
|
+
) : null}
|
|
111
|
+
</PanelSection>
|
|
112
|
+
) : null}
|
|
113
|
+
</SidePanel>
|
|
114
|
+
);
|
|
115
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
// The StepSettings block — `makersclaw add step-settings`. Fixed: compose
|
|
2
|
+
// it through its props (README.md beside this file).
|
|
3
|
+
export { FlowSettings } from "./flow-settings";
|
|
4
|
+
export { NumberField, SelectField, SwitchField, TextField } from "./fields";
|
|
5
|
+
export { StepSettings } from "./step-settings";
|