@12ui/design 0.2.72 → 0.2.74
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 +242 -54
- package/SKILL.md +28 -33
- package/dist/cli-arguments.d.ts.map +1 -1
- package/dist/cli-arguments.js +3 -0
- package/dist/cli-arguments.js.map +1 -1
- package/dist/cli-branch-command.d.ts.map +1 -1
- package/dist/cli-branch-command.js +4 -0
- package/dist/cli-branch-command.js.map +1 -1
- package/dist/cli-capabilities.d.ts +26 -1
- package/dist/cli-capabilities.d.ts.map +1 -1
- package/dist/cli-capabilities.js +26 -1
- package/dist/cli-capabilities.js.map +1 -1
- package/dist/cli-corpus-command.d.ts +5 -4
- package/dist/cli-corpus-command.d.ts.map +1 -1
- package/dist/cli-corpus-command.js +17 -26
- package/dist/cli-corpus-command.js.map +1 -1
- package/dist/cli-corpus-run.js +1 -1
- package/dist/cli-corpus-run.js.map +1 -1
- package/dist/cli-draft-command.js +1 -1
- package/dist/cli-draft-command.js.map +1 -1
- package/dist/cli-help/design.d.ts +26 -6
- package/dist/cli-help/design.d.ts.map +1 -1
- package/dist/cli-help/design.js +39 -7
- package/dist/cli-help/design.js.map +1 -1
- package/dist/cli-help/index.d.ts +113 -7
- package/dist/cli-help/index.d.ts.map +1 -1
- package/dist/cli-help/index.js +2 -0
- package/dist/cli-help/index.js.map +1 -1
- package/dist/cli-help/meta.d.ts +1 -1
- package/dist/cli-help/meta.d.ts.map +1 -1
- package/dist/cli-help/meta.js +2 -1
- package/dist/cli-help/meta.js.map +1 -1
- package/dist/cli-help/workflow.d.ts +90 -0
- package/dist/cli-help/workflow.d.ts.map +1 -0
- package/dist/cli-help/workflow.js +89 -0
- package/dist/cli-help/workflow.js.map +1 -0
- package/dist/cli-open-browser.d.ts +7 -0
- package/dist/cli-open-browser.d.ts.map +1 -0
- package/dist/cli-open-browser.js +25 -0
- package/dist/cli-open-browser.js.map +1 -0
- package/dist/cli-prototype-command.d.ts +3 -1
- package/dist/cli-prototype-command.d.ts.map +1 -1
- package/dist/cli-prototype-command.js +33 -7
- package/dist/cli-prototype-command.js.map +1 -1
- package/dist/cli-review-command.d.ts.map +1 -1
- package/dist/cli-review-command.js +1 -16
- package/dist/cli-review-command.js.map +1 -1
- package/dist/cli-run.d.ts.map +1 -1
- package/dist/cli-run.js +35 -3
- package/dist/cli-run.js.map +1 -1
- package/dist/cli-usage.d.ts.map +1 -1
- package/dist/cli-usage.js +39 -5
- package/dist/cli-usage.js.map +1 -1
- package/dist/cli-workflow-command.d.ts +8 -0
- package/dist/cli-workflow-command.d.ts.map +1 -0
- package/dist/cli-workflow-command.js +97 -0
- package/dist/cli-workflow-command.js.map +1 -0
- package/dist/cli-workspace-command.d.ts +25 -0
- package/dist/cli-workspace-command.d.ts.map +1 -0
- package/dist/cli-workspace-command.js +95 -0
- package/dist/cli-workspace-command.js.map +1 -0
- package/dist/config.d.ts +6 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +12 -4
- package/dist/config.js.map +1 -1
- package/dist/corpus-access.d.ts +11 -0
- package/dist/corpus-access.d.ts.map +1 -0
- package/dist/corpus-access.js +18 -0
- package/dist/corpus-access.js.map +1 -0
- package/dist/corpus-client.d.ts +11 -11
- package/dist/corpus-client.d.ts.map +1 -1
- package/dist/corpus-client.js +17 -6
- package/dist/corpus-client.js.map +1 -1
- package/dist/corpus-inspiration-failure.d.ts +1 -1
- package/dist/corpus-inspiration-failure.js +2 -2
- package/dist/corpus-inspiration-failure.js.map +1 -1
- package/dist/corpus-reference-download-retry.d.ts.map +1 -1
- package/dist/corpus-reference-download-retry.js +11 -1
- package/dist/corpus-reference-download-retry.js.map +1 -1
- package/dist/corpus-request-error.d.ts +2 -0
- package/dist/corpus-request-error.d.ts.map +1 -1
- package/dist/corpus-request-error.js +2 -0
- package/dist/corpus-request-error.js.map +1 -1
- package/dist/corpus-retry-guidance.d.ts +5 -0
- package/dist/corpus-retry-guidance.d.ts.map +1 -0
- package/dist/corpus-retry-guidance.js +18 -0
- package/dist/corpus-retry-guidance.js.map +1 -0
- package/dist/improve-pricing-plan.d.ts.map +1 -1
- package/dist/improve-pricing-plan.js +2 -4
- package/dist/improve-pricing-plan.js.map +1 -1
- package/dist/index.d.ts +10 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/legacy-skill-catalog.d.ts.map +1 -1
- package/dist/legacy-skill-catalog.js +41 -0
- package/dist/legacy-skill-catalog.js.map +1 -1
- package/dist/mcp-slate-command.d.ts +31 -0
- package/dist/mcp-slate-command.d.ts.map +1 -0
- package/dist/mcp-slate-command.js +123 -0
- package/dist/mcp-slate-command.js.map +1 -0
- package/dist/mcp-slate-image.d.ts +22 -0
- package/dist/mcp-slate-image.d.ts.map +1 -0
- package/dist/mcp-slate-image.js +28 -0
- package/dist/mcp-slate-image.js.map +1 -0
- package/dist/mcp-slate-latest.d.ts +13 -0
- package/dist/mcp-slate-latest.d.ts.map +1 -0
- package/dist/mcp-slate-latest.js +34 -0
- package/dist/mcp-slate-latest.js.map +1 -0
- package/dist/mcp-slate-names.d.ts +25 -0
- package/dist/mcp-slate-names.d.ts.map +1 -0
- package/dist/mcp-slate-names.js +49 -0
- package/dist/mcp-slate-names.js.map +1 -0
- package/dist/mcp-slate-resource.d.ts +5 -0
- package/dist/mcp-slate-resource.d.ts.map +1 -0
- package/dist/mcp-slate-resource.js +37 -0
- package/dist/mcp-slate-resource.js.map +1 -0
- package/dist/mcp-slate-run.d.ts +41 -0
- package/dist/mcp-slate-run.d.ts.map +1 -0
- package/dist/mcp-slate-run.js +88 -0
- package/dist/mcp-slate-run.js.map +1 -0
- package/dist/mcp-slate-tool-defs.d.ts +61 -0
- package/dist/mcp-slate-tool-defs.d.ts.map +1 -0
- package/dist/mcp-slate-tool-defs.js +247 -0
- package/dist/mcp-slate-tool-defs.js.map +1 -0
- package/dist/mcp-slate-tools.d.ts +8 -0
- package/dist/mcp-slate-tools.d.ts.map +1 -0
- package/dist/mcp-slate-tools.js +45 -0
- package/dist/mcp-slate-tools.js.map +1 -0
- package/dist/mcp-slate-ui-copy.d.ts +145 -0
- package/dist/mcp-slate-ui-copy.d.ts.map +1 -0
- package/dist/mcp-slate-ui-copy.js +164 -0
- package/dist/mcp-slate-ui-copy.js.map +1 -0
- package/dist/mcp-slate-ui-script-bridge.d.ts +18 -0
- package/dist/mcp-slate-ui-script-bridge.d.ts.map +1 -0
- package/dist/mcp-slate-ui-script-bridge.js +137 -0
- package/dist/mcp-slate-ui-script-bridge.js.map +1 -0
- package/dist/mcp-slate-ui-script-browser.d.ts +12 -0
- package/dist/mcp-slate-ui-script-browser.d.ts.map +1 -0
- package/dist/mcp-slate-ui-script-browser.js +19 -0
- package/dist/mcp-slate-ui-script-browser.js.map +1 -0
- package/dist/mcp-slate-ui-script-dialog.d.ts +21 -0
- package/dist/mcp-slate-ui-script-dialog.d.ts.map +1 -0
- package/dist/mcp-slate-ui-script-dialog.js +321 -0
- package/dist/mcp-slate-ui-script-dialog.js.map +1 -0
- package/dist/mcp-slate-ui-script-inline.d.ts +10 -0
- package/dist/mcp-slate-ui-script-inline.d.ts.map +1 -0
- package/dist/mcp-slate-ui-script-inline.js +224 -0
- package/dist/mcp-slate-ui-script-inline.js.map +1 -0
- package/dist/mcp-slate-ui-script-inspiration.d.ts +13 -0
- package/dist/mcp-slate-ui-script-inspiration.d.ts.map +1 -0
- package/dist/mcp-slate-ui-script-inspiration.js +236 -0
- package/dist/mcp-slate-ui-script-inspiration.js.map +1 -0
- package/dist/mcp-slate-ui-script-more.d.ts +32 -0
- package/dist/mcp-slate-ui-script-more.d.ts.map +1 -0
- package/dist/mcp-slate-ui-script-more.js +289 -0
- package/dist/mcp-slate-ui-script-more.js.map +1 -0
- package/dist/mcp-slate-ui-script-progress.d.ts +7 -0
- package/dist/mcp-slate-ui-script-progress.d.ts.map +1 -0
- package/dist/mcp-slate-ui-script-progress.js +9 -0
- package/dist/mcp-slate-ui-script-progress.js.map +1 -0
- package/dist/mcp-slate-ui-script-remote.d.ts +28 -0
- package/dist/mcp-slate-ui-script-remote.d.ts.map +1 -0
- package/dist/mcp-slate-ui-script-remote.js +147 -0
- package/dist/mcp-slate-ui-script-remote.js.map +1 -0
- package/dist/mcp-slate-ui-script-scribble.d.ts +19 -0
- package/dist/mcp-slate-ui-script-scribble.d.ts.map +1 -0
- package/dist/mcp-slate-ui-script-scribble.js +114 -0
- package/dist/mcp-slate-ui-script-scribble.js.map +1 -0
- package/dist/mcp-slate-ui-script-select.d.ts +16 -0
- package/dist/mcp-slate-ui-script-select.d.ts.map +1 -0
- package/dist/mcp-slate-ui-script-select.js +73 -0
- package/dist/mcp-slate-ui-script-select.js.map +1 -0
- package/dist/mcp-slate-ui-script-stage.d.ts +12 -0
- package/dist/mcp-slate-ui-script-stage.d.ts.map +1 -0
- package/dist/mcp-slate-ui-script-stage.js +180 -0
- package/dist/mcp-slate-ui-script-stage.js.map +1 -0
- package/dist/mcp-slate-ui-script-state.d.ts +13 -0
- package/dist/mcp-slate-ui-script-state.d.ts.map +1 -0
- package/dist/mcp-slate-ui-script-state.js +306 -0
- package/dist/mcp-slate-ui-script-state.js.map +1 -0
- package/dist/mcp-slate-ui-script.d.ts +27 -0
- package/dist/mcp-slate-ui-script.d.ts.map +1 -0
- package/dist/mcp-slate-ui-script.js +60 -0
- package/dist/mcp-slate-ui-script.js.map +1 -0
- package/dist/mcp-slate-ui-styles-dialog.d.ts +20 -0
- package/dist/mcp-slate-ui-styles-dialog.d.ts.map +1 -0
- package/dist/mcp-slate-ui-styles-dialog.js +95 -0
- package/dist/mcp-slate-ui-styles-dialog.js.map +1 -0
- package/dist/mcp-slate-ui-styles-stage.d.ts +19 -0
- package/dist/mcp-slate-ui-styles-stage.d.ts.map +1 -0
- package/dist/mcp-slate-ui-styles-stage.js +67 -0
- package/dist/mcp-slate-ui-styles-stage.js.map +1 -0
- package/dist/mcp-slate-ui-styles.d.ts +18 -0
- package/dist/mcp-slate-ui-styles.d.ts.map +1 -0
- package/dist/mcp-slate-ui-styles.js +132 -0
- package/dist/mcp-slate-ui-styles.js.map +1 -0
- package/dist/mcp-slate-ui.d.ts +16 -0
- package/dist/mcp-slate-ui.d.ts.map +1 -0
- package/dist/mcp-slate-ui.js +59 -0
- package/dist/mcp-slate-ui.js.map +1 -0
- package/dist/mcp-slate-workspace-tools.d.ts +15 -0
- package/dist/mcp-slate-workspace-tools.d.ts.map +1 -0
- package/dist/mcp-slate-workspace-tools.js +155 -0
- package/dist/mcp-slate-workspace-tools.js.map +1 -0
- package/dist/mcp-tool-definitions.d.ts.map +1 -1
- package/dist/mcp-tool-definitions.js +9 -7
- package/dist/mcp-tool-definitions.js.map +1 -1
- package/dist/mcp-tool-handler.d.ts +8 -2
- package/dist/mcp-tool-handler.d.ts.map +1 -1
- package/dist/mcp-tool-handler.js +34 -13
- package/dist/mcp-tool-handler.js.map +1 -1
- package/dist/mcp-workflow-tools.d.ts +6 -0
- package/dist/mcp-workflow-tools.d.ts.map +1 -0
- package/dist/mcp-workflow-tools.js +108 -0
- package/dist/mcp-workflow-tools.js.map +1 -0
- package/dist/prototype-label-client.d.ts +5 -0
- package/dist/prototype-label-client.d.ts.map +1 -1
- package/dist/prototype-label-client.js.map +1 -1
- package/dist/prototype-poststep.d.ts +2 -2
- package/dist/prototype-poststep.d.ts.map +1 -1
- package/dist/prototype-poststep.js +3 -0
- package/dist/prototype-poststep.js.map +1 -1
- package/dist/prototype-run-record.d.ts +6 -2
- package/dist/prototype-run-record.d.ts.map +1 -1
- package/dist/prototype-run-record.js +6 -0
- package/dist/prototype-run-record.js.map +1 -1
- package/dist/prototype-runner.d.ts +2 -2
- package/dist/prototype-runner.d.ts.map +1 -1
- package/dist/prototype-runner.js +5 -2
- package/dist/prototype-runner.js.map +1 -1
- package/dist/prototype-workflow-contract.d.ts +13 -0
- package/dist/prototype-workflow-contract.d.ts.map +1 -0
- package/dist/prototype-workflow-contract.js +82 -0
- package/dist/prototype-workflow-contract.js.map +1 -0
- package/dist/prototype-workflow-labels.d.ts +29 -0
- package/dist/prototype-workflow-labels.d.ts.map +1 -0
- package/dist/prototype-workflow-labels.js +93 -0
- package/dist/prototype-workflow-labels.js.map +1 -0
- package/dist/run-journal-commands.d.ts.map +1 -1
- package/dist/run-journal-commands.js +18 -5
- package/dist/run-journal-commands.js.map +1 -1
- package/dist/server.d.ts +22 -2
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +44 -8
- package/dist/server.js.map +1 -1
- package/dist/slate-actions.d.ts +43 -0
- package/dist/slate-actions.d.ts.map +1 -0
- package/dist/slate-actions.js +108 -0
- package/dist/slate-actions.js.map +1 -0
- package/dist/slate-annotate.d.ts +36 -0
- package/dist/slate-annotate.d.ts.map +1 -0
- package/dist/slate-annotate.js +71 -0
- package/dist/slate-annotate.js.map +1 -0
- package/dist/slate-approvals.d.ts +61 -0
- package/dist/slate-approvals.d.ts.map +1 -0
- package/dist/slate-approvals.js +153 -0
- package/dist/slate-approvals.js.map +1 -0
- package/dist/slate-browser-decision.d.ts +30 -0
- package/dist/slate-browser-decision.d.ts.map +1 -0
- package/dist/slate-browser-decision.js +24 -0
- package/dist/slate-browser-decision.js.map +1 -0
- package/dist/slate-browser-host-script.d.ts +14 -0
- package/dist/slate-browser-host-script.d.ts.map +1 -0
- package/dist/slate-browser-host-script.js +125 -0
- package/dist/slate-browser-host-script.js.map +1 -0
- package/dist/slate-browser-host.d.ts +9 -0
- package/dist/slate-browser-host.d.ts.map +1 -0
- package/dist/slate-browser-host.js +37 -0
- package/dist/slate-browser-host.js.map +1 -0
- package/dist/slate-browser-server.d.ts +37 -0
- package/dist/slate-browser-server.d.ts.map +1 -0
- package/dist/slate-browser-server.js +186 -0
- package/dist/slate-browser-server.js.map +1 -0
- package/dist/slate-commit.d.ts +28 -0
- package/dist/slate-commit.d.ts.map +1 -0
- package/dist/slate-commit.js +218 -0
- package/dist/slate-commit.js.map +1 -0
- package/dist/slate-corpus.d.ts +14 -0
- package/dist/slate-corpus.d.ts.map +1 -0
- package/dist/slate-corpus.js +32 -0
- package/dist/slate-corpus.js.map +1 -0
- package/dist/slate-edit-prompt.d.ts +18 -0
- package/dist/slate-edit-prompt.d.ts.map +1 -0
- package/dist/slate-edit-prompt.js +41 -0
- package/dist/slate-edit-prompt.js.map +1 -0
- package/dist/slate-edit-runner.d.ts +4 -0
- package/dist/slate-edit-runner.d.ts.map +1 -0
- package/dist/slate-edit-runner.js +90 -0
- package/dist/slate-edit-runner.js.map +1 -0
- package/dist/slate-editability.d.ts +20 -0
- package/dist/slate-editability.d.ts.map +1 -0
- package/dist/slate-editability.js +19 -0
- package/dist/slate-editability.js.map +1 -0
- package/dist/slate-errors.d.ts +15 -0
- package/dist/slate-errors.d.ts.map +1 -0
- package/dist/slate-errors.js +21 -0
- package/dist/slate-errors.js.map +1 -0
- package/dist/slate-handoff-options.d.ts +40 -0
- package/dist/slate-handoff-options.d.ts.map +1 -0
- package/dist/slate-handoff-options.js +117 -0
- package/dist/slate-handoff-options.js.map +1 -0
- package/dist/slate-handoff.d.ts +11 -0
- package/dist/slate-handoff.d.ts.map +1 -0
- package/dist/slate-handoff.js +56 -0
- package/dist/slate-handoff.js.map +1 -0
- package/dist/slate-ids.d.ts +33 -0
- package/dist/slate-ids.d.ts.map +1 -0
- package/dist/slate-ids.js +47 -0
- package/dist/slate-ids.js.map +1 -0
- package/dist/slate-image-executor.d.ts +39 -0
- package/dist/slate-image-executor.d.ts.map +1 -0
- package/dist/slate-image-executor.js +52 -0
- package/dist/slate-image-executor.js.map +1 -0
- package/dist/slate-inspiration.d.ts +22 -0
- package/dist/slate-inspiration.d.ts.map +1 -0
- package/dist/slate-inspiration.js +112 -0
- package/dist/slate-inspiration.js.map +1 -0
- package/dist/slate-labels.d.ts +11 -0
- package/dist/slate-labels.d.ts.map +1 -0
- package/dist/slate-labels.js +32 -0
- package/dist/slate-labels.js.map +1 -0
- package/dist/slate-ledger.d.ts +29 -0
- package/dist/slate-ledger.d.ts.map +1 -0
- package/dist/slate-ledger.js +65 -0
- package/dist/slate-ledger.js.map +1 -0
- package/dist/slate-liveness.d.ts +26 -0
- package/dist/slate-liveness.d.ts.map +1 -0
- package/dist/slate-liveness.js +49 -0
- package/dist/slate-liveness.js.map +1 -0
- package/dist/slate-local-image.d.ts +19 -0
- package/dist/slate-local-image.d.ts.map +1 -0
- package/dist/slate-local-image.js +36 -0
- package/dist/slate-local-image.js.map +1 -0
- package/dist/slate-lock.d.ts +64 -0
- package/dist/slate-lock.d.ts.map +1 -0
- package/dist/slate-lock.js +178 -0
- package/dist/slate-lock.js.map +1 -0
- package/dist/slate-paths.d.ts +45 -0
- package/dist/slate-paths.d.ts.map +1 -0
- package/dist/slate-paths.js +132 -0
- package/dist/slate-paths.js.map +1 -0
- package/dist/slate-pick.d.ts +29 -0
- package/dist/slate-pick.d.ts.map +1 -0
- package/dist/slate-pick.js +55 -0
- package/dist/slate-pick.js.map +1 -0
- package/dist/slate-reference-ids.d.ts +6 -0
- package/dist/slate-reference-ids.d.ts.map +1 -0
- package/dist/slate-reference-ids.js +17 -0
- package/dist/slate-reference-ids.js.map +1 -0
- package/dist/slate-reference-store.d.ts +23 -0
- package/dist/slate-reference-store.d.ts.map +1 -0
- package/dist/slate-reference-store.js +46 -0
- package/dist/slate-reference-store.js.map +1 -0
- package/dist/slate-resume.d.ts +19 -0
- package/dist/slate-resume.d.ts.map +1 -0
- package/dist/slate-resume.js +94 -0
- package/dist/slate-resume.js.map +1 -0
- package/dist/slate-round-params.d.ts +20 -0
- package/dist/slate-round-params.d.ts.map +1 -0
- package/dist/slate-round-params.js +32 -0
- package/dist/slate-round-params.js.map +1 -0
- package/dist/slate-round-prompt.d.ts +18 -0
- package/dist/slate-round-prompt.d.ts.map +1 -0
- package/dist/slate-round-prompt.js +20 -0
- package/dist/slate-round-prompt.js.map +1 -0
- package/dist/slate-round-runner.d.ts +4 -0
- package/dist/slate-round-runner.d.ts.map +1 -0
- package/dist/slate-round-runner.js +125 -0
- package/dist/slate-round-runner.js.map +1 -0
- package/dist/slate-round-search.d.ts +7 -0
- package/dist/slate-round-search.d.ts.map +1 -0
- package/dist/slate-round-search.js +77 -0
- package/dist/slate-round-search.js.map +1 -0
- package/dist/slate-run-action.d.ts +14 -0
- package/dist/slate-run-action.d.ts.map +1 -0
- package/dist/slate-run-action.js +81 -0
- package/dist/slate-run-action.js.map +1 -0
- package/dist/slate-runner-context.d.ts +57 -0
- package/dist/slate-runner-context.d.ts.map +1 -0
- package/dist/slate-runner-context.js +79 -0
- package/dist/slate-runner-context.js.map +1 -0
- package/dist/slate-runner-failure.d.ts +8 -0
- package/dist/slate-runner-failure.d.ts.map +1 -0
- package/dist/slate-runner-failure.js +17 -0
- package/dist/slate-runner-failure.js.map +1 -0
- package/dist/slate-runner-flag.d.ts +3 -0
- package/dist/slate-runner-flag.d.ts.map +1 -0
- package/dist/slate-runner-flag.js +3 -0
- package/dist/slate-runner-flag.js.map +1 -0
- package/dist/slate-runner-main.d.ts +31 -0
- package/dist/slate-runner-main.d.ts.map +1 -0
- package/dist/slate-runner-main.js +132 -0
- package/dist/slate-runner-main.js.map +1 -0
- package/dist/slate-runner-spawn.d.ts +23 -0
- package/dist/slate-runner-spawn.d.ts.map +1 -0
- package/dist/slate-runner-spawn.js +27 -0
- package/dist/slate-runner-spawn.js.map +1 -0
- package/dist/slate-runtime.d.ts +38 -0
- package/dist/slate-runtime.d.ts.map +1 -0
- package/dist/slate-runtime.js +48 -0
- package/dist/slate-runtime.js.map +1 -0
- package/dist/slate-versions.d.ts +26 -0
- package/dist/slate-versions.d.ts.map +1 -0
- package/dist/slate-versions.js +110 -0
- package/dist/slate-versions.js.map +1 -0
- package/dist/slate-view-contract.d.ts +232 -0
- package/dist/slate-view-contract.d.ts.map +1 -0
- package/dist/slate-view-contract.js +17 -0
- package/dist/slate-view-contract.js.map +1 -0
- package/dist/slate-view-types.d.ts +2 -0
- package/dist/slate-view-types.d.ts.map +1 -0
- package/dist/slate-view-types.js +2 -0
- package/dist/slate-view-types.js.map +1 -0
- package/dist/slate-view.d.ts +19 -0
- package/dist/slate-view.d.ts.map +1 -0
- package/dist/slate-view.js +184 -0
- package/dist/slate-view.js.map +1 -0
- package/dist/slate-workspace-parse.d.ts +20 -0
- package/dist/slate-workspace-parse.d.ts.map +1 -0
- package/dist/slate-workspace-parse.js +442 -0
- package/dist/slate-workspace-parse.js.map +1 -0
- package/dist/slate-workspace-store.d.ts +44 -0
- package/dist/slate-workspace-store.d.ts.map +1 -0
- package/dist/slate-workspace-store.js +270 -0
- package/dist/slate-workspace-store.js.map +1 -0
- package/dist/slate-workspace-types.d.ts +176 -0
- package/dist/slate-workspace-types.d.ts.map +1 -0
- package/dist/slate-workspace-types.js +13 -0
- package/dist/slate-workspace-types.js.map +1 -0
- package/dist/workflow/adapter-12ui.d.ts +4 -0
- package/dist/workflow/adapter-12ui.d.ts.map +1 -0
- package/dist/workflow/adapter-12ui.js +147 -0
- package/dist/workflow/adapter-12ui.js.map +1 -0
- package/dist/workflow/adapter-layerdoc.d.ts +16 -0
- package/dist/workflow/adapter-layerdoc.d.ts.map +1 -0
- package/dist/workflow/adapter-layerdoc.js +116 -0
- package/dist/workflow/adapter-layerdoc.js.map +1 -0
- package/dist/workflow/adapter-openai.d.ts +4 -0
- package/dist/workflow/adapter-openai.d.ts.map +1 -0
- package/dist/workflow/adapter-openai.js +166 -0
- package/dist/workflow/adapter-openai.js.map +1 -0
- package/dist/workflow/adapter-process.d.ts +7 -0
- package/dist/workflow/adapter-process.d.ts.map +1 -0
- package/dist/workflow/adapter-process.js +174 -0
- package/dist/workflow/adapter-process.js.map +1 -0
- package/dist/workflow/adapter-prototype-labels.d.ts +15 -0
- package/dist/workflow/adapter-prototype-labels.d.ts.map +1 -0
- package/dist/workflow/adapter-prototype-labels.js +71 -0
- package/dist/workflow/adapter-prototype-labels.js.map +1 -0
- package/dist/workflow/adapter-types.d.ts +40 -0
- package/dist/workflow/adapter-types.d.ts.map +1 -0
- package/dist/workflow/adapter-types.js +2 -0
- package/dist/workflow/adapter-types.js.map +1 -0
- package/dist/workflow/adapter-utils.d.ts +11 -0
- package/dist/workflow/adapter-utils.d.ts.map +1 -0
- package/dist/workflow/adapter-utils.js +72 -0
- package/dist/workflow/adapter-utils.js.map +1 -0
- package/dist/workflow/adapters.d.ts +6 -0
- package/dist/workflow/adapters.d.ts.map +1 -0
- package/dist/workflow/adapters.js +25 -0
- package/dist/workflow/adapters.js.map +1 -0
- package/dist/workflow/artifact.d.ts +11 -0
- package/dist/workflow/artifact.d.ts.map +1 -0
- package/dist/workflow/artifact.js +94 -0
- package/dist/workflow/artifact.js.map +1 -0
- package/dist/workflow/bundle-collect.d.ts +8 -0
- package/dist/workflow/bundle-collect.d.ts.map +1 -0
- package/dist/workflow/bundle-collect.js +56 -0
- package/dist/workflow/bundle-collect.js.map +1 -0
- package/dist/workflow/bundle-export.d.ts +16 -0
- package/dist/workflow/bundle-export.d.ts.map +1 -0
- package/dist/workflow/bundle-export.js +174 -0
- package/dist/workflow/bundle-export.js.map +1 -0
- package/dist/workflow/bundle-paths.d.ts +7 -0
- package/dist/workflow/bundle-paths.d.ts.map +1 -0
- package/dist/workflow/bundle-paths.js +35 -0
- package/dist/workflow/bundle-paths.js.map +1 -0
- package/dist/workflow/bundle.d.ts +4 -0
- package/dist/workflow/bundle.d.ts.map +1 -0
- package/dist/workflow/bundle.js +4 -0
- package/dist/workflow/bundle.js.map +1 -0
- package/dist/workflow/capture.d.ts +36 -0
- package/dist/workflow/capture.d.ts.map +1 -0
- package/dist/workflow/capture.js +81 -0
- package/dist/workflow/capture.js.map +1 -0
- package/dist/workflow/continuation-branch.d.ts +15 -0
- package/dist/workflow/continuation-branch.d.ts.map +1 -0
- package/dist/workflow/continuation-branch.js +103 -0
- package/dist/workflow/continuation-branch.js.map +1 -0
- package/dist/workflow/continuation-plans.d.ts +38 -0
- package/dist/workflow/continuation-plans.d.ts.map +1 -0
- package/dist/workflow/continuation-plans.js +78 -0
- package/dist/workflow/continuation-plans.js.map +1 -0
- package/dist/workflow/continuation.d.ts +25 -0
- package/dist/workflow/continuation.d.ts.map +1 -0
- package/dist/workflow/continuation.js +89 -0
- package/dist/workflow/continuation.js.map +1 -0
- package/dist/workflow/layerdoc-reader.d.ts +27 -0
- package/dist/workflow/layerdoc-reader.d.ts.map +1 -0
- package/dist/workflow/layerdoc-reader.js +81 -0
- package/dist/workflow/layerdoc-reader.js.map +1 -0
- package/dist/workflow/project-evidence.d.ts +48 -0
- package/dist/workflow/project-evidence.d.ts.map +1 -0
- package/dist/workflow/project-evidence.js +200 -0
- package/dist/workflow/project-evidence.js.map +1 -0
- package/dist/workflow/providers.d.ts +35 -0
- package/dist/workflow/providers.d.ts.map +1 -0
- package/dist/workflow/providers.js +110 -0
- package/dist/workflow/providers.js.map +1 -0
- package/dist/workflow/recipes-layerdoc-validation.d.ts +4 -0
- package/dist/workflow/recipes-layerdoc-validation.d.ts.map +1 -0
- package/dist/workflow/recipes-layerdoc-validation.js +98 -0
- package/dist/workflow/recipes-layerdoc-validation.js.map +1 -0
- package/dist/workflow/recipes-result-validation.d.ts +6 -0
- package/dist/workflow/recipes-result-validation.d.ts.map +1 -0
- package/dist/workflow/recipes-result-validation.js +38 -0
- package/dist/workflow/recipes-result-validation.js.map +1 -0
- package/dist/workflow/recipes-schemas.d.ts +7 -0
- package/dist/workflow/recipes-schemas.d.ts.map +1 -0
- package/dist/workflow/recipes-schemas.js +67 -0
- package/dist/workflow/recipes-schemas.js.map +1 -0
- package/dist/workflow/recipes-validation.d.ts +14 -0
- package/dist/workflow/recipes-validation.d.ts.map +1 -0
- package/dist/workflow/recipes-validation.js +68 -0
- package/dist/workflow/recipes-validation.js.map +1 -0
- package/dist/workflow/recipes.d.ts +20 -0
- package/dist/workflow/recipes.d.ts.map +1 -0
- package/dist/workflow/recipes.js +167 -0
- package/dist/workflow/recipes.js.map +1 -0
- package/dist/workflow/routing.d.ts +4 -0
- package/dist/workflow/routing.d.ts.map +1 -0
- package/dist/workflow/routing.js +28 -0
- package/dist/workflow/routing.js.map +1 -0
- package/dist/workflow/schema.d.ts +5 -0
- package/dist/workflow/schema.d.ts.map +1 -0
- package/dist/workflow/schema.js +29 -0
- package/dist/workflow/schema.js.map +1 -0
- package/dist/workflow/service.d.ts +59 -0
- package/dist/workflow/service.d.ts.map +1 -0
- package/dist/workflow/service.js +170 -0
- package/dist/workflow/service.js.map +1 -0
- package/dist/workflow/store-json.d.ts +5 -0
- package/dist/workflow/store-json.d.ts.map +1 -0
- package/dist/workflow/store-json.js +35 -0
- package/dist/workflow/store-json.js.map +1 -0
- package/dist/workflow/store-lock.d.ts +3 -0
- package/dist/workflow/store-lock.d.ts.map +1 -0
- package/dist/workflow/store-lock.js +85 -0
- package/dist/workflow/store-lock.js.map +1 -0
- package/dist/workflow/store-paths.d.ts +17 -0
- package/dist/workflow/store-paths.d.ts.map +1 -0
- package/dist/workflow/store-paths.js +67 -0
- package/dist/workflow/store-paths.js.map +1 -0
- package/dist/workflow/store-validation.d.ts +7 -0
- package/dist/workflow/store-validation.d.ts.map +1 -0
- package/dist/workflow/store-validation.js +119 -0
- package/dist/workflow/store-validation.js.map +1 -0
- package/dist/workflow/store.d.ts +10 -0
- package/dist/workflow/store.d.ts.map +1 -0
- package/dist/workflow/store.js +193 -0
- package/dist/workflow/store.js.map +1 -0
- package/dist/workflow/types.d.ts +120 -0
- package/dist/workflow/types.d.ts.map +1 -0
- package/dist/workflow/types.js +15 -0
- package/dist/workflow/types.js.map +1 -0
- package/dist/workflow-transport.d.ts +28 -0
- package/dist/workflow-transport.d.ts.map +1 -0
- package/dist/workflow-transport.js +184 -0
- package/dist/workflow-transport.js.map +1 -0
- package/open-design.json +2 -2
- package/package.json +2 -1
- package/prototype-kit/tests/rules-check.mjs +9 -0
- package/runtime/codex-conversion/src/images/native-invoke.mjs +1 -1
- package/runtime/codex-conversion/src/images/native.mjs +8 -4
- package/runtime/layerdoc-validator.mjs +1860 -0
- package/skills/12ui-design/SKILL.md +17 -63
- package/skills/12ui-design/improve.md +5 -1
- package/skills/12ui-design/inspire.md +8 -5
- package/skills/12ui-design/outputs.md +23 -2
- package/skills/12ui-design/session.md +161 -0
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What only the hosted target does (TARGET is "remote"): the words it says to the
|
|
3
|
+
* agent, and the marked image an edit carries.
|
|
4
|
+
*
|
|
5
|
+
* The messages. The host wraps every app message as untrusted input, so each one
|
|
6
|
+
* names what happened and carries no command, flag, path, price or credit word;
|
|
7
|
+
* the agent confirms through the model-visible data tool, which returns the
|
|
8
|
+
* server's own trusted text. Six messages exist, one per click (spec v2 9.2):
|
|
9
|
+
* Generate more with new options, Generate more based on a design, Edit,
|
|
10
|
+
* Select, Branch and Convert. The user's own words (a steer note, an edit instruction, the Branch
|
|
11
|
+
* explanation) are never put in a message; the agent reads them from the data
|
|
12
|
+
* tool, quoted. `runDir` is named in each because the tools take it and a
|
|
13
|
+
* thread may hold several workspaces.
|
|
14
|
+
*
|
|
15
|
+
* The marked image. The hosted server does no image work, so the screen
|
|
16
|
+
* composites the strokes onto the parent itself and sends the result with the
|
|
17
|
+
* edit: the parent as shown (the display rendition), scaled so its long edge is
|
|
18
|
+
* at most 1280 px, the strokes in whichever of four colours is farthest from
|
|
19
|
+
* the image's mean colour (as the local server chooses), round caps, a width of
|
|
20
|
+
* 0.8 percent of the shorter side (at least 3 px), exported as a JPEG whose
|
|
21
|
+
* quality steps down until it fits in 300 KiB, and whose size steps down if no
|
|
22
|
+
* quality does. A canvas that cannot be read or exported is an error the dialog
|
|
23
|
+
* shows; the edit is not sent without the picture it asked for.
|
|
24
|
+
*
|
|
25
|
+
* Fragment of the view's script; String.raw, no backtick, no dollar-brace.
|
|
26
|
+
*/
|
|
27
|
+
export const SLATE_UI_REMOTE = String.raw `
|
|
28
|
+
// ---- the six messages ----
|
|
29
|
+
function remoteRunMessage(action, opId) {
|
|
30
|
+
var head;
|
|
31
|
+
if (action.kind === "edit") {
|
|
32
|
+
var parent = ver(action.versionId);
|
|
33
|
+
head = "I asked to edit " + (parent ? parent.label : "an option");
|
|
34
|
+
} else if (action.mode === "like") {
|
|
35
|
+
var from = ver(action.fromVersionId);
|
|
36
|
+
head = "I asked for more like " + (from ? from.label : "an option");
|
|
37
|
+
} else head = "I asked for new options";
|
|
38
|
+
return head + " in the Design workspace (request " + opId + ", runDir " + state.view.runDir + "). Please confirm it with " + TOOLS.data + ", then carry it out.";
|
|
39
|
+
}
|
|
40
|
+
function remoteSelectMessage(label) {
|
|
41
|
+
return "I selected " + label + " in the Design workspace (runDir " + state.view.runDir + "). Please confirm it with " + TOOLS.data + " and tell me its version id.";
|
|
42
|
+
}
|
|
43
|
+
function remoteHandoffMessage(kind, label, handoffId) {
|
|
44
|
+
return "I asked to " + (kind === "branch" ? "build from" : "convert") + " " + label + " in the Design workspace (request " + handoffId + ", runDir " + state.view.runDir + "). Please confirm it with " + TOOLS.data + ", then carry it out.";
|
|
45
|
+
}
|
|
46
|
+
// The run is recorded before the agent is told, and a host that refuses the message is shown, not thrown: the request
|
|
47
|
+
// is on the server and the person can ask their agent for it.
|
|
48
|
+
function remoteTellRun(action, opId) {
|
|
49
|
+
messageAgent(remoteRunMessage(action, opId)).then(function () {}, function (err) {
|
|
50
|
+
setStatus(tpl(COPY.sentRefused, { detail: errText(err) }), "err");
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// ---- the marked image ----
|
|
55
|
+
var MARK_COLORS = [
|
|
56
|
+
{ name: "magenta", hex: "#ff00ff", rgb: [255, 0, 255] },
|
|
57
|
+
{ name: "cyan", hex: "#00e5ff", rgb: [0, 229, 255] },
|
|
58
|
+
{ name: "red", hex: "#ff3b30", rgb: [255, 59, 48] },
|
|
59
|
+
{ name: "yellow", hex: "#ffee00", rgb: [255, 238, 0] }
|
|
60
|
+
];
|
|
61
|
+
var MARK_LONG_EDGE = 1280;
|
|
62
|
+
var MARK_MAX_BYTES = 300 * 1024;
|
|
63
|
+
var MARK_QUALITIES = [0.9, 0.82, 0.74, 0.66, 0.58, 0.5, 0.42, 0.34];
|
|
64
|
+
var MARK_SHRINK = 0.85;
|
|
65
|
+
var MARK_MIN_LONG_EDGE = 320;
|
|
66
|
+
|
|
67
|
+
function markPicture(src) {
|
|
68
|
+
return new Promise(function (resolve, reject) {
|
|
69
|
+
var img = document.createElement("img");
|
|
70
|
+
img.onload = function () { resolve(img); };
|
|
71
|
+
img.onerror = function () { reject(new Error("the image could not be read")); };
|
|
72
|
+
img.src = src;
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
function markCanvas(w, h) {
|
|
76
|
+
var canvas = document.createElement("canvas");
|
|
77
|
+
canvas.width = w;
|
|
78
|
+
canvas.height = h;
|
|
79
|
+
var ctx = canvas.getContext && canvas.getContext("2d");
|
|
80
|
+
if (!ctx) throw new Error("no canvas is available");
|
|
81
|
+
return { canvas: canvas, ctx: ctx };
|
|
82
|
+
}
|
|
83
|
+
// The colour farthest (in RGB) from the image's mean; the first listed wins a tie.
|
|
84
|
+
function markColorFor(img) {
|
|
85
|
+
var side = 16;
|
|
86
|
+
var small = markCanvas(side, side);
|
|
87
|
+
small.ctx.drawImage(img, 0, 0, side, side);
|
|
88
|
+
var data = small.ctx.getImageData(0, 0, side, side).data;
|
|
89
|
+
var sum = [0, 0, 0];
|
|
90
|
+
var n = data.length / 4;
|
|
91
|
+
for (var i = 0; i < data.length; i += 4) { sum[0] += data[i]; sum[1] += data[i + 1]; sum[2] += data[i + 2]; }
|
|
92
|
+
var mean = [sum[0] / n, sum[1] / n, sum[2] / n];
|
|
93
|
+
function far(c) { return Math.sqrt(Math.pow(c.rgb[0] - mean[0], 2) + Math.pow(c.rgb[1] - mean[1], 2) + Math.pow(c.rgb[2] - mean[2], 2)); }
|
|
94
|
+
return MARK_COLORS.reduce(function (best, c) { return far(c) > far(best) ? c : best; });
|
|
95
|
+
}
|
|
96
|
+
function markPaint(ctx, w, h, strokes, hex) {
|
|
97
|
+
var width = Math.max(3, Math.min(w, h) * 0.008);
|
|
98
|
+
ctx.lineCap = "round";
|
|
99
|
+
ctx.lineJoin = "round";
|
|
100
|
+
ctx.strokeStyle = hex;
|
|
101
|
+
ctx.fillStyle = hex;
|
|
102
|
+
ctx.lineWidth = width;
|
|
103
|
+
strokes.forEach(function (stroke) {
|
|
104
|
+
ctx.beginPath();
|
|
105
|
+
if (stroke.length === 1) {
|
|
106
|
+
ctx.arc(stroke[0][0] / 1000 * w, stroke[0][1] / 1000 * h, width / 2, 0, Math.PI * 2);
|
|
107
|
+
ctx.fill();
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
ctx.moveTo(stroke[0][0] / 1000 * w, stroke[0][1] / 1000 * h);
|
|
111
|
+
for (var i = 1; i < stroke.length; i++) ctx.lineTo(stroke[i][0] / 1000 * w, stroke[i][1] / 1000 * h);
|
|
112
|
+
ctx.stroke();
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
// Bytes of a base64 string.
|
|
116
|
+
function base64Bytes(text) {
|
|
117
|
+
var pad = text.charAt(text.length - 1) === "=" ? (text.charAt(text.length - 2) === "=" ? 2 : 1) : 0;
|
|
118
|
+
return text.length * 3 / 4 - pad;
|
|
119
|
+
}
|
|
120
|
+
// The picture with the strokes on it, as a JPEG within the caps: the first quality that fits, then a smaller picture.
|
|
121
|
+
function compositeMarked(version, strokes) {
|
|
122
|
+
return wantImage(version, "full", true).then(markPicture).then(function (img) {
|
|
123
|
+
var sw = img.naturalWidth || img.width;
|
|
124
|
+
var sh = img.naturalHeight || img.height;
|
|
125
|
+
if (!(sw > 0) || !(sh > 0)) throw new Error("the image has no size");
|
|
126
|
+
var color = markColorFor(img);
|
|
127
|
+
var scale = Math.min(1, MARK_LONG_EDGE / Math.max(sw, sh));
|
|
128
|
+
for (;;) {
|
|
129
|
+
var w = Math.max(1, Math.round(sw * scale));
|
|
130
|
+
var h = Math.max(1, Math.round(sh * scale));
|
|
131
|
+
var target = markCanvas(w, h);
|
|
132
|
+
target.ctx.drawImage(img, 0, 0, w, h);
|
|
133
|
+
markPaint(target.ctx, w, h, strokes, color.hex);
|
|
134
|
+
for (var q = 0; q < MARK_QUALITIES.length; q++) {
|
|
135
|
+
var url = target.canvas.toDataURL("image/jpeg", MARK_QUALITIES[q]);
|
|
136
|
+
var comma = url.indexOf(",");
|
|
137
|
+
if (url.indexOf("data:image/jpeg") !== 0 || comma < 0) throw new Error("the canvas could not export a JPEG");
|
|
138
|
+
var data = url.slice(comma + 1);
|
|
139
|
+
if (base64Bytes(data) <= MARK_MAX_BYTES) return { mimeType: "image/jpeg", data: data, color: color.name };
|
|
140
|
+
}
|
|
141
|
+
scale *= MARK_SHRINK;
|
|
142
|
+
if (Math.max(sw, sh) * scale < MARK_MIN_LONG_EDGE) throw new Error("the marked image would be too large");
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
`;
|
|
147
|
+
//# sourceMappingURL=mcp-slate-ui-script-remote.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui-script-remote.js","sourceRoot":"","sources":["../src/mcp-slate-ui-script-remote.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuHxC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The scribble layer of the Edit dialog: a canvas exactly over the image where
|
|
3
|
+
* a pointer draws freehand strokes, with Undo and Clear. A stroke is a
|
|
4
|
+
* polyline of integer permille points [x, y] (0 to 1000 of the displayed
|
|
5
|
+
* image's width and height), so it does not depend on the size it was drawn
|
|
6
|
+
* at; that is also what the edit run carries. The local server draws the
|
|
7
|
+
* annotated image itself, so nothing is exported here; the hosted target
|
|
8
|
+
* composites and exports its own (mcp-slate-ui-script-remote.ts).
|
|
9
|
+
*
|
|
10
|
+
* Limits (spec v3, section 2): at most 24 strokes, 400 points in a stroke and
|
|
11
|
+
* 3,000 points in all; points closer than 2 permille to the last one add
|
|
12
|
+
* nothing and are dropped. Past a limit the input is ignored, never truncated
|
|
13
|
+
* after the fact. A single click is a one-point stroke (a dot).
|
|
14
|
+
*
|
|
15
|
+
* Pointer only by design: the scribble is optional, and every other control
|
|
16
|
+
* of the dialog works by keyboard.
|
|
17
|
+
*/
|
|
18
|
+
export declare const SLATE_UI_SCRIBBLE: string;
|
|
19
|
+
//# sourceMappingURL=mcp-slate-ui-script-scribble.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui-script-scribble.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-script-scribble.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,iBAAiB,QA+F7B,CAAC"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The scribble layer of the Edit dialog: a canvas exactly over the image where
|
|
3
|
+
* a pointer draws freehand strokes, with Undo and Clear. A stroke is a
|
|
4
|
+
* polyline of integer permille points [x, y] (0 to 1000 of the displayed
|
|
5
|
+
* image's width and height), so it does not depend on the size it was drawn
|
|
6
|
+
* at; that is also what the edit run carries. The local server draws the
|
|
7
|
+
* annotated image itself, so nothing is exported here; the hosted target
|
|
8
|
+
* composites and exports its own (mcp-slate-ui-script-remote.ts).
|
|
9
|
+
*
|
|
10
|
+
* Limits (spec v3, section 2): at most 24 strokes, 400 points in a stroke and
|
|
11
|
+
* 3,000 points in all; points closer than 2 permille to the last one add
|
|
12
|
+
* nothing and are dropped. Past a limit the input is ignored, never truncated
|
|
13
|
+
* after the fact. A single click is a one-point stroke (a dot).
|
|
14
|
+
*
|
|
15
|
+
* Pointer only by design: the scribble is optional, and every other control
|
|
16
|
+
* of the dialog works by keyboard.
|
|
17
|
+
*/
|
|
18
|
+
export const SLATE_UI_SCRIBBLE = String.raw `
|
|
19
|
+
var SCRIBBLE_COLOR = "#ff2bd6";
|
|
20
|
+
var SCRIBBLE_MAX_STROKES = 24;
|
|
21
|
+
var SCRIBBLE_MAX_POINTS = 400;
|
|
22
|
+
var SCRIBBLE_MAX_TOTAL = 3000;
|
|
23
|
+
var SCRIBBLE_MIN_GAP = 2;
|
|
24
|
+
|
|
25
|
+
function scribbleTotal(d) { return d.strokes.reduce(function (n, s) { return n + s.length; }, 0); }
|
|
26
|
+
|
|
27
|
+
// Paint the strokes on the canvas: round caps, a width of 0.8 percent of the shorter side.
|
|
28
|
+
function scribblePaint(d) {
|
|
29
|
+
var canvas = d.canvas;
|
|
30
|
+
var ctx = canvas && canvas.getContext && canvas.getContext("2d");
|
|
31
|
+
if (!ctx) return;
|
|
32
|
+
var w = canvas.width;
|
|
33
|
+
var h = canvas.height;
|
|
34
|
+
ctx.clearRect(0, 0, w, h);
|
|
35
|
+
var width = Math.max(2, Math.min(w, h) * 0.008);
|
|
36
|
+
ctx.lineCap = "round";
|
|
37
|
+
ctx.lineJoin = "round";
|
|
38
|
+
ctx.strokeStyle = SCRIBBLE_COLOR;
|
|
39
|
+
ctx.fillStyle = SCRIBBLE_COLOR;
|
|
40
|
+
ctx.lineWidth = width;
|
|
41
|
+
d.strokes.forEach(function (stroke) {
|
|
42
|
+
ctx.beginPath();
|
|
43
|
+
if (stroke.length === 1) {
|
|
44
|
+
ctx.arc(stroke[0][0] / 1000 * w, stroke[0][1] / 1000 * h, width / 2, 0, Math.PI * 2);
|
|
45
|
+
ctx.fill();
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
ctx.moveTo(stroke[0][0] / 1000 * w, stroke[0][1] / 1000 * h);
|
|
49
|
+
for (var i = 1; i < stroke.length; i++) ctx.lineTo(stroke[i][0] / 1000 * w, stroke[i][1] / 1000 * h);
|
|
50
|
+
ctx.stroke();
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function scribbleUndo(d) {
|
|
55
|
+
if (d.committing || d.strokes.length === 0) return;
|
|
56
|
+
d.strokes.pop();
|
|
57
|
+
d.current = null;
|
|
58
|
+
scribblePaint(d);
|
|
59
|
+
updateDialogUi();
|
|
60
|
+
}
|
|
61
|
+
function scribbleClear(d) {
|
|
62
|
+
if (d.committing) return;
|
|
63
|
+
d.strokes = [];
|
|
64
|
+
d.current = null;
|
|
65
|
+
scribblePaint(d);
|
|
66
|
+
updateDialogUi();
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
function scribbleAttach(wrap, d) {
|
|
70
|
+
var canvas = document.createElement("canvas");
|
|
71
|
+
canvas.className = "scribble";
|
|
72
|
+
canvas.setAttribute("aria-label", COPY.scribbleHint);
|
|
73
|
+
d.canvas = canvas;
|
|
74
|
+
wrap.appendChild(canvas);
|
|
75
|
+
// The bitmap follows the size the image is shown at; the strokes repaint from their permille points.
|
|
76
|
+
function fit() {
|
|
77
|
+
var r = canvas.getBoundingClientRect();
|
|
78
|
+
var scale = window.devicePixelRatio || 1;
|
|
79
|
+
var w = Math.max(1, Math.round(r.width * scale));
|
|
80
|
+
var h = Math.max(1, Math.round(r.height * scale));
|
|
81
|
+
if (canvas.width !== w || canvas.height !== h) { canvas.width = w; canvas.height = h; }
|
|
82
|
+
scribblePaint(d);
|
|
83
|
+
}
|
|
84
|
+
new ResizeObserver(fit).observe(wrap);
|
|
85
|
+
function point(e) {
|
|
86
|
+
var r = canvas.getBoundingClientRect();
|
|
87
|
+
var x = Math.round((e.clientX - r.left) / (r.width || 1) * 1000);
|
|
88
|
+
var y = Math.round((e.clientY - r.top) / (r.height || 1) * 1000);
|
|
89
|
+
return [Math.max(0, Math.min(1000, x)), Math.max(0, Math.min(1000, y))];
|
|
90
|
+
}
|
|
91
|
+
canvas.addEventListener("pointerdown", function (e) {
|
|
92
|
+
if (d.committing || d.strokes.length >= SCRIBBLE_MAX_STROKES || scribbleTotal(d) >= SCRIBBLE_MAX_TOTAL) return;
|
|
93
|
+
d.current = [point(e)];
|
|
94
|
+
d.strokes.push(d.current);
|
|
95
|
+
if (canvas.setPointerCapture) { try { canvas.setPointerCapture(e.pointerId); } catch (err) { /* capture is best effort */ } }
|
|
96
|
+
if (e.preventDefault) e.preventDefault();
|
|
97
|
+
scribblePaint(d);
|
|
98
|
+
updateDialogUi();
|
|
99
|
+
});
|
|
100
|
+
canvas.addEventListener("pointermove", function (e) {
|
|
101
|
+
if (!d.current) return;
|
|
102
|
+
if (d.current.length >= SCRIBBLE_MAX_POINTS || scribbleTotal(d) >= SCRIBBLE_MAX_TOTAL) return;
|
|
103
|
+
var p = point(e);
|
|
104
|
+
var last = d.current[d.current.length - 1];
|
|
105
|
+
if (Math.sqrt((p[0] - last[0]) * (p[0] - last[0]) + (p[1] - last[1]) * (p[1] - last[1])) < SCRIBBLE_MIN_GAP) return;
|
|
106
|
+
d.current.push(p);
|
|
107
|
+
scribblePaint(d);
|
|
108
|
+
});
|
|
109
|
+
function finish() { d.current = null; updateDialogUi(); }
|
|
110
|
+
canvas.addEventListener("pointerup", finish);
|
|
111
|
+
canvas.addEventListener("pointercancel", finish);
|
|
112
|
+
}
|
|
113
|
+
`;
|
|
114
|
+
//# sourceMappingURL=mcp-slate-ui-script-scribble.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui-script-scribble.js","sourceRoot":"","sources":["../src/mcp-slate-ui-script-scribble.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+F1C,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Select and the two hand-offs. Select acts at once: no dialog, and no reason
|
|
3
|
+
* (the pick tool takes none from here). It records the pick and then tells the
|
|
4
|
+
* agent, best effort. Branch and Convert (dialogs, in
|
|
5
|
+
* mcp-slate-ui-script-dialog.ts) end here: they record the request with the
|
|
6
|
+
* hand-off tool, under an id minted when the dialog opened, and then tell the
|
|
7
|
+
* agent to read it.
|
|
8
|
+
*
|
|
9
|
+
* What the agent is told names what happened and carries no command, no flag
|
|
10
|
+
* and no backtick: the host wraps app messages as untrusted input, so the
|
|
11
|
+
* agent confirms with the model-visible data tool. The user's own words (the
|
|
12
|
+
* Branch explanation) are never put in a message; the agent reads them from
|
|
13
|
+
* the record.
|
|
14
|
+
*/
|
|
15
|
+
export declare const SLATE_UI_SELECT: string;
|
|
16
|
+
//# sourceMappingURL=mcp-slate-ui-script-select.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui-script-select.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-script-select.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,eAAe,QAyD3B,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Select and the two hand-offs. Select acts at once: no dialog, and no reason
|
|
3
|
+
* (the pick tool takes none from here). It records the pick and then tells the
|
|
4
|
+
* agent, best effort. Branch and Convert (dialogs, in
|
|
5
|
+
* mcp-slate-ui-script-dialog.ts) end here: they record the request with the
|
|
6
|
+
* hand-off tool, under an id minted when the dialog opened, and then tell the
|
|
7
|
+
* agent to read it.
|
|
8
|
+
*
|
|
9
|
+
* What the agent is told names what happened and carries no command, no flag
|
|
10
|
+
* and no backtick: the host wraps app messages as untrusted input, so the
|
|
11
|
+
* agent confirms with the model-visible data tool. The user's own words (the
|
|
12
|
+
* Branch explanation) are never put in a message; the agent reads them from
|
|
13
|
+
* the record.
|
|
14
|
+
*/
|
|
15
|
+
export const SLATE_UI_SELECT = String.raw `
|
|
16
|
+
function samePick(version) {
|
|
17
|
+
var p = state.view && state.view.pick;
|
|
18
|
+
// A pick whose durable copy is gone is not a pick to rest on: Select stays available to record it again.
|
|
19
|
+
return !!p && p.intact !== false && !!version && p.versionId === version.versionId;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// What the agent is told, one wording per target: the local plugin's asks the agent to confirm through its tools, the
|
|
23
|
+
// hosted one is spec v2 9.2, and the browser's is only a record (its decision reaches the agent as the command's result).
|
|
24
|
+
function selectMessage(label, rev) {
|
|
25
|
+
if (TARGET === "remote") return remoteSelectMessage(label);
|
|
26
|
+
if (TARGET === "browser") return browserSelectMessage(label);
|
|
27
|
+
return "I selected " + label + " in the Design workspace (rev " + rev + "). " +
|
|
28
|
+
"Please confirm it with " + TOOLS.data + " for runDir " + state.view.runDir + ", and tell me its version id, path and sha256.";
|
|
29
|
+
}
|
|
30
|
+
function handoffMessage(kind, label, handoffId, rev) {
|
|
31
|
+
if (TARGET === "remote") return remoteHandoffMessage(kind, label, handoffId);
|
|
32
|
+
if (TARGET === "browser") return browserHandoffMessage(kind, label, handoffId);
|
|
33
|
+
return "I asked to " + (kind === "branch" ? "build from" : "convert") + " " + label + " in the Design workspace (rev " + rev + ", request " + handoffId + "). " +
|
|
34
|
+
"Please confirm it with " + TOOLS.data + " for runDir " + state.view.runDir + ", then carry it out and ask me before anything that uses my 12ui credits.";
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function doSelect(version) {
|
|
38
|
+
// The button is disabled in these cases; the guard keeps a stray click (a script, a stale focus) from sending a second pick.
|
|
39
|
+
if (!version || state.busy || samePick(version) || !pickable(version)) return;
|
|
40
|
+
state.busy = true;
|
|
41
|
+
syncControls();
|
|
42
|
+
setStatus(COPY.recording);
|
|
43
|
+
callTool(TOOLS.pick, { runDir: state.view.runDir, versionId: version.versionId }).then(function (result) {
|
|
44
|
+
var sc = result.structuredContent || {};
|
|
45
|
+
if (sc.view) applyView(sc.view, true);
|
|
46
|
+
var label = sc.pick ? sc.pick.label : version.label;
|
|
47
|
+
var rev = sc.rev !== undefined ? sc.rev : state.view.rev;
|
|
48
|
+
return messageAgent(selectMessage(label, rev)).then(function () {
|
|
49
|
+
setStatus(tpl(COPY.selectedLine, { label: label }), "ok");
|
|
50
|
+
}, function (err) {
|
|
51
|
+
setStatus(tpl(COPY.selectedRefused, { label: label, detail: errText(err) }), "err");
|
|
52
|
+
});
|
|
53
|
+
}, function (err) {
|
|
54
|
+
setStatus(tpl(COPY.couldNotSelect, { detail: errText(err) }), "err");
|
|
55
|
+
}).then(function () { state.busy = false; syncControls(); });
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Record a Branch or Convert request for the shown version, then tell the agent. Resolves once the agent has been
|
|
59
|
+
// told (or the host refused, which is shown but not thrown); rejects on a recording error so the dialog can show it.
|
|
60
|
+
function sendHandoff(kind, version, handoffId, options) {
|
|
61
|
+
return callTool(TOOLS.handoff, { runDir: state.view.runDir, handoffId: handoffId, kind: kind, versionId: version.versionId, options: options }).then(function (result) {
|
|
62
|
+
var sc = result.structuredContent || {};
|
|
63
|
+
if (sc.view) applyView(sc.view, true);
|
|
64
|
+
var rev = sc.rev !== undefined ? sc.rev : state.view.rev;
|
|
65
|
+
return messageAgent(handoffMessage(kind, version.label, handoffId, rev)).then(function () {
|
|
66
|
+
setStatus(COPY.sent, "ok");
|
|
67
|
+
}, function (err) {
|
|
68
|
+
setStatus(tpl(COPY.sentRefused, { detail: errText(err) }), "err");
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
`;
|
|
73
|
+
//# sourceMappingURL=mcp-slate-ui-script-select.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui-script-select.js","sourceRoot":"","sources":["../src/mcp-slate-ui-script-select.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDxC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The fullscreen workspace: on the left the selection (compact thumbnails
|
|
3
|
+
* grouped by round, each option with its versions as chips), in the middle one
|
|
4
|
+
* large image, and under it one row of actions at the right: Edit, Branch and
|
|
5
|
+
* Convert, then Select (primary) at the far right. Nothing else shows until a
|
|
6
|
+
* button is clicked; the dialogs live
|
|
7
|
+
* in mcp-slate-ui-script-dialog.ts. One band above the image says what is
|
|
8
|
+
* running, stopped or failed, with Resume when the work can resume. Mounted
|
|
9
|
+
* only in fullscreen.
|
|
10
|
+
*/
|
|
11
|
+
export declare const SLATE_UI_STAGE: string;
|
|
12
|
+
//# sourceMappingURL=mcp-slate-ui-script-stage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui-script-stage.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-script-stage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,QAwK1B,CAAC"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The fullscreen workspace: on the left the selection (compact thumbnails
|
|
3
|
+
* grouped by round, each option with its versions as chips), in the middle one
|
|
4
|
+
* large image, and under it one row of actions at the right: Edit, Branch and
|
|
5
|
+
* Convert, then Select (primary) at the far right. Nothing else shows until a
|
|
6
|
+
* button is clicked; the dialogs live
|
|
7
|
+
* in mcp-slate-ui-script-dialog.ts. One band above the image says what is
|
|
8
|
+
* running, stopped or failed, with Resume when the work can resume. Mounted
|
|
9
|
+
* only in fullscreen.
|
|
10
|
+
*/
|
|
11
|
+
export const SLATE_UI_STAGE = String.raw `
|
|
12
|
+
var stageBuilt = false;
|
|
13
|
+
var stageEls = {};
|
|
14
|
+
|
|
15
|
+
var ICON_CLOSE = "M6 6l12 12M18 6L6 18";
|
|
16
|
+
function iconButton(label, path, onclick) {
|
|
17
|
+
var b = button("", "iconbtn", onclick);
|
|
18
|
+
b.setAttribute("aria-label", label);
|
|
19
|
+
b.title = label;
|
|
20
|
+
b.innerHTML = '<svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="' + path + '"/></svg>';
|
|
21
|
+
return b;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function buildStageSkeleton() {
|
|
25
|
+
var stage = $("stage");
|
|
26
|
+
stage.textContent = "";
|
|
27
|
+
var head = el("header", "stagehead");
|
|
28
|
+
head.appendChild(el("h1", "sr", COPY.title));
|
|
29
|
+
head.appendChild(buildTabs());
|
|
30
|
+
head.appendChild(el("span", "spacer"));
|
|
31
|
+
stageEls.close = iconButton(COPY.closeWorkspace, ICON_CLOSE, closeWorkspace);
|
|
32
|
+
head.appendChild(stageEls.close);
|
|
33
|
+
|
|
34
|
+
stageEls.body = el("div", "stagebody");
|
|
35
|
+
stageEls.rail = el("nav", "rail");
|
|
36
|
+
stageEls.rail.setAttribute("aria-label", COPY.tabDesigns);
|
|
37
|
+
var main = el("section", "main");
|
|
38
|
+
stageEls.band = el("div", "band hidden");
|
|
39
|
+
stageEls.band.setAttribute("role", "status");
|
|
40
|
+
stageEls.hero = el("div", "hero");
|
|
41
|
+
var row = el("div", "actionrow");
|
|
42
|
+
stageEls.edit = button(COPY.edit, "", function () { openDialog("edit", stageEls.edit); });
|
|
43
|
+
stageEls.branch = button(COPY.branch, "", function () { openDialog("branch", stageEls.branch); });
|
|
44
|
+
stageEls.convert = button(COPY.convert, "", function () { openDialog("convert", stageEls.convert); });
|
|
45
|
+
stageEls.select = button(COPY.select, "primary", function () { doSelect(selectedVersion()); });
|
|
46
|
+
stageEls.editWhy = el("span", "sr");
|
|
47
|
+
stageEls.editWhy.id = "edit-why";
|
|
48
|
+
// Select is last: the row is right-aligned, so it ends at the picture's right edge.
|
|
49
|
+
[stageEls.edit, stageEls.branch, stageEls.convert, stageEls.select, stageEls.editWhy].forEach(function (b) { row.appendChild(b); });
|
|
50
|
+
stageEls.status = el("p", "status");
|
|
51
|
+
stageEls.status.setAttribute("data-status", "");
|
|
52
|
+
stageEls.status.setAttribute("role", "status");
|
|
53
|
+
stageEls.status.setAttribute("aria-live", "polite");
|
|
54
|
+
// A line set before the workspace was built (the first view arrives first) still shows.
|
|
55
|
+
stageEls.status.textContent = state.status.text;
|
|
56
|
+
if (state.status.kind) stageEls.status.className = "status " + state.status.kind;
|
|
57
|
+
main.appendChild(stageEls.band);
|
|
58
|
+
main.appendChild(stageEls.hero);
|
|
59
|
+
main.appendChild(row);
|
|
60
|
+
main.appendChild(stageEls.status);
|
|
61
|
+
stageEls.more = el("div", "morehost");
|
|
62
|
+
var selection = el("div", "selection");
|
|
63
|
+
selection.appendChild(stageEls.rail);
|
|
64
|
+
selection.appendChild(stageEls.more);
|
|
65
|
+
stageEls.body.appendChild(selection);
|
|
66
|
+
stageEls.body.appendChild(main);
|
|
67
|
+
stageEls.inspiration = el("div", "inspiration hidden");
|
|
68
|
+
stageEls.dialog = el("div", "dialogmount");
|
|
69
|
+
|
|
70
|
+
stage.appendChild(head);
|
|
71
|
+
stage.appendChild(stageEls.body);
|
|
72
|
+
stage.appendChild(stageEls.inspiration);
|
|
73
|
+
stage.appendChild(stageEls.dialog);
|
|
74
|
+
stageBuilt = true;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// A chip is one version of an option; its title carries the words of the edit that made it.
|
|
78
|
+
function chipTitle(v) { return v.prompt ? v.label + ": " + v.prompt : v.label; }
|
|
79
|
+
|
|
80
|
+
function buildRail(rail) {
|
|
81
|
+
var v = state.view;
|
|
82
|
+
v.rounds.slice().sort(function (a, b) { return b.index - a.index; }).forEach(function (round) {
|
|
83
|
+
var section = el("div", "round");
|
|
84
|
+
var head = el("h2", "roundhead", COPY.roundPrefix + round.index);
|
|
85
|
+
var title = roundTitle(round);
|
|
86
|
+
if (title) head.title = title;
|
|
87
|
+
section.appendChild(head);
|
|
88
|
+
var list = el("ul", "options");
|
|
89
|
+
orderedCandidates().filter(function (c) { return c.roundId === round.roundId; }).sort(byLabel).forEach(function (c) {
|
|
90
|
+
var item = el("li", "option");
|
|
91
|
+
item.appendChild(thumbButton(c, "opt"));
|
|
92
|
+
var versions = versionsOf(c);
|
|
93
|
+
if (versions.length > 1) {
|
|
94
|
+
var chips = el("div", "chips");
|
|
95
|
+
versions.forEach(function (version) {
|
|
96
|
+
var on = state.sel.versionId === version.versionId;
|
|
97
|
+
var chip = button(version.label, "chip" + (on ? " selected" : ""), function () { selectCandidate(c.candidateId, version.versionId); });
|
|
98
|
+
chip.title = chipTitle(version);
|
|
99
|
+
chip.setAttribute("aria-label", COPY.versionPrefix + version.label);
|
|
100
|
+
chip.setAttribute("aria-pressed", on ? "true" : "false");
|
|
101
|
+
chips.appendChild(chip);
|
|
102
|
+
});
|
|
103
|
+
item.appendChild(chips);
|
|
104
|
+
}
|
|
105
|
+
list.appendChild(item);
|
|
106
|
+
});
|
|
107
|
+
section.appendChild(list);
|
|
108
|
+
rail.appendChild(section);
|
|
109
|
+
});
|
|
110
|
+
var slot = el("div", "moreslot");
|
|
111
|
+
slot.appendChild(moreTile());
|
|
112
|
+
rail.appendChild(slot);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// ---- the band: what is running, stopped or failed ----
|
|
116
|
+
function buildBand(node, band) {
|
|
117
|
+
node.appendChild(el("span", "bandtext" + (band.kind === "failed" ? " err" : ""), band.text));
|
|
118
|
+
if (band.op.resumable) {
|
|
119
|
+
var b = button(COPY.resume, "textbtn", function () { actResume(band.op, b); });
|
|
120
|
+
node.appendChild(b);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
function actResume(op, buttonEl) {
|
|
124
|
+
if (state.opBusy[op.opId]) return;
|
|
125
|
+
state.opBusy[op.opId] = true;
|
|
126
|
+
if (buttonEl) buttonEl.disabled = true;
|
|
127
|
+
callTool(TOOLS.resume, { runDir: state.view.runDir, opId: op.opId }).then(function (result) {
|
|
128
|
+
var sc = result.structuredContent || {};
|
|
129
|
+
if (sc.view) applyView(sc.view, true);
|
|
130
|
+
}, function (err) { setStatus(errText(err), "err"); }).then(function () { state.opBusy[op.opId] = false; if (buttonEl) buttonEl.disabled = false; });
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
function syncStageControls(selectLabel, selectDisabled) {
|
|
134
|
+
if (!stageBuilt || !isFullscreen()) return;
|
|
135
|
+
var v = selectedVersion();
|
|
136
|
+
if (selectLabel !== undefined) { stageEls.select.textContent = selectLabel; stageEls.select.disabled = selectDisabled; }
|
|
137
|
+
// Edit is off when the shown version cannot be edited; the reason is its accessible description, not a tooltip.
|
|
138
|
+
var blocked = !v || !v.editable;
|
|
139
|
+
stageEls.edit.disabled = blocked;
|
|
140
|
+
stageEls.editWhy.textContent = blocked && v && v.editBlockedReason ? v.editBlockedReason : "";
|
|
141
|
+
if (blocked && v && v.editBlockedReason) stageEls.edit.setAttribute("aria-describedby", "edit-why"); else stageEls.edit.removeAttribute("aria-describedby");
|
|
142
|
+
stageEls.branch.disabled = !v;
|
|
143
|
+
stageEls.convert.disabled = !v;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// ---- render ----
|
|
147
|
+
function renderStage() {
|
|
148
|
+
var v = state.view;
|
|
149
|
+
if (!stageBuilt) buildStageSkeleton();
|
|
150
|
+
stageEls.close.classList.toggle("hidden", !canInline());
|
|
151
|
+
syncTabs();
|
|
152
|
+
syncProgressLine(v);
|
|
153
|
+
var onDesigns = state.tab === "designs";
|
|
154
|
+
stageEls.body.classList.toggle("hidden", !onDesigns);
|
|
155
|
+
stageEls.inspiration.classList.toggle("hidden", onDesigns);
|
|
156
|
+
if (!onDesigns) { renderInspiration(stageEls.inspiration, "stage"); return; }
|
|
157
|
+
var c = selectedCandidate();
|
|
158
|
+
var sel = selectedVersion();
|
|
159
|
+
if (v.candidates.length === 0) {
|
|
160
|
+
stageEls.rail.textContent = "";
|
|
161
|
+
stageEls.rail.__sig = "";
|
|
162
|
+
stageEls.band.classList.add("hidden");
|
|
163
|
+
stageEls.hero.__sig = "";
|
|
164
|
+
stageEls.hero.textContent = "";
|
|
165
|
+
stageEls.hero.classList.add("note");
|
|
166
|
+
stageEls.hero.appendChild(el("div", "heronote", COPY.empty));
|
|
167
|
+
syncStageControls(COPY.select, true);
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
var railSig = JSON.stringify([state.sel, v.rounds.map(function (r) { return [r.roundId, r.index, r.kind, r.fromVersionId]; }),
|
|
171
|
+
orderedCandidates().map(function (x) { return thumbSignature(x).concat([x.versionIds]); })]);
|
|
172
|
+
setIfChanged(stageEls.rail, railSig, buildRail);
|
|
173
|
+
var band = activeBand(v);
|
|
174
|
+
stageEls.band.classList.toggle("hidden", !band);
|
|
175
|
+
setIfChanged(stageEls.band, band ? JSON.stringify([band.kind, band.text, band.op.opId, band.op.resumable]) : "", function (node) { if (band) buildBand(node, band); });
|
|
176
|
+
setIfChanged(stageEls.hero, heroSignature(c, sel), function (node) { heroInto(node, c, sel); });
|
|
177
|
+
syncControls();
|
|
178
|
+
}
|
|
179
|
+
`;
|
|
180
|
+
//# sourceMappingURL=mcp-slate-ui-script-stage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui-script-stage.js","sourceRoot":"","sources":["../src/mcp-slate-ui-script-stage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwKvC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* View state, the image loader queue and the status polling controller.
|
|
3
|
+
*
|
|
4
|
+
* Host limits, measured or derived (see the step-0 probe): about five
|
|
5
|
+
* concurrent app requests app-wide, so a view keeps at most three image loads
|
|
6
|
+
* in flight, version pictures and reference pictures together (leaving room
|
|
7
|
+
* for status and an action); it polls only while something is running and the
|
|
8
|
+
* document is visible, with backoff from two to ten seconds and a `since`
|
|
9
|
+
* stamp so an unchanged answer costs no re-render. A hidden view issues no
|
|
10
|
+
* calls at all.
|
|
11
|
+
*/
|
|
12
|
+
export declare const SLATE_UI_STATE: string;
|
|
13
|
+
//# sourceMappingURL=mcp-slate-ui-script-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui-script-state.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-script-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,cAAc,QAqS1B,CAAC"}
|