@12ui/design 0.2.71 → 0.2.73
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 +248 -55
- 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 +35 -1
- package/dist/cli-capabilities.d.ts.map +1 -1
- package/dist/cli-capabilities.js +36 -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 +206 -7
- package/dist/cli-help/index.d.ts.map +1 -1
- package/dist/cli-help/index.js +4 -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/scene.d.ts +96 -0
- package/dist/cli-help/scene.d.ts.map +1 -0
- package/dist/cli-help/scene.js +162 -0
- package/dist/cli-help/scene.js.map +1 -0
- 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 +41 -3
- package/dist/cli-run.js.map +1 -1
- package/dist/cli-scene-command.d.ts +3 -0
- package/dist/cli-scene-command.d.ts.map +1 -0
- package/dist/cli-scene-command.js +292 -0
- package/dist/cli-scene-command.js.map +1 -0
- package/dist/cli-usage.d.ts +8 -0
- package/dist/cli-usage.d.ts.map +1 -1
- package/dist/cli-usage.js +65 -6
- 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 +52 -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 +118 -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 +134 -0
- package/dist/mcp-slate-ui-copy.d.ts.map +1 -0
- package/dist/mcp-slate-ui-copy.js +136 -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 +20 -0
- package/dist/mcp-slate-ui-script-dialog.d.ts.map +1 -0
- package/dist/mcp-slate-ui-script-dialog.js +332 -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 +221 -0
- package/dist/mcp-slate-ui-script-inline.js.map +1 -0
- package/dist/mcp-slate-ui-script-inspiration.d.ts +12 -0
- package/dist/mcp-slate-ui-script-inspiration.d.ts.map +1 -0
- package/dist/mcp-slate-ui-script-inspiration.js +216 -0
- package/dist/mcp-slate-ui-script-inspiration.js.map +1 -0
- package/dist/mcp-slate-ui-script-more.d.ts +30 -0
- package/dist/mcp-slate-ui-script-more.d.ts.map +1 -0
- package/dist/mcp-slate-ui-script-more.js +225 -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 +11 -0
- package/dist/mcp-slate-ui-script-stage.d.ts.map +1 -0
- package/dist/mcp-slate-ui-script-stage.js +181 -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-thumbtools.d.ts +23 -0
- package/dist/mcp-slate-ui-script-thumbtools.d.ts.map +1 -0
- package/dist/mcp-slate-ui-script-thumbtools.js +103 -0
- package/dist/mcp-slate-ui-script-thumbtools.js.map +1 -0
- package/dist/mcp-slate-ui-script.d.ts +28 -0
- package/dist/mcp-slate-ui-script.d.ts.map +1 -0
- package/dist/mcp-slate-ui-script.js +58 -0
- package/dist/mcp-slate-ui-script.js.map +1 -0
- package/dist/mcp-slate-ui-styles-dialog.d.ts +17 -0
- package/dist/mcp-slate-ui-styles-dialog.d.ts.map +1 -0
- package/dist/mcp-slate-ui-styles-dialog.js +73 -0
- package/dist/mcp-slate-ui-styles-dialog.js.map +1 -0
- package/dist/mcp-slate-ui-styles-stage.d.ts +12 -0
- package/dist/mcp-slate-ui-styles-stage.d.ts.map +1 -0
- package/dist/mcp-slate-ui-styles-stage.js +53 -0
- package/dist/mcp-slate-ui-styles-stage.js.map +1 -0
- package/dist/mcp-slate-ui-styles-thumbtools.d.ts +10 -0
- package/dist/mcp-slate-ui-styles-thumbtools.d.ts.map +1 -0
- package/dist/mcp-slate-ui-styles-thumbtools.js +25 -0
- package/dist/mcp-slate-ui-styles-thumbtools.js.map +1 -0
- package/dist/mcp-slate-ui-styles.d.ts +13 -0
- package/dist/mcp-slate-ui-styles.d.ts.map +1 -0
- package/dist/mcp-slate-ui-styles.js +117 -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 +58 -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-browsers.d.ts +8 -2
- package/dist/prototype-browsers.d.ts.map +1 -1
- package/dist/prototype-browsers.js +8 -3
- package/dist/prototype-browsers.js.map +1 -1
- 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-process.js +1 -1
- package/dist/prototype-process.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 +24 -5
- package/dist/run-journal-commands.js.map +1 -1
- package/dist/scene/camera-model.d.ts +48 -0
- package/dist/scene/camera-model.d.ts.map +1 -0
- package/dist/scene/camera-model.js +89 -0
- package/dist/scene/camera-model.js.map +1 -0
- package/dist/scene/camera-solve.d.ts +58 -0
- package/dist/scene/camera-solve.d.ts.map +1 -0
- package/dist/scene/camera-solve.js +288 -0
- package/dist/scene/camera-solve.js.map +1 -0
- package/dist/scene/capture-plan.d.ts +28 -0
- package/dist/scene/capture-plan.d.ts.map +1 -0
- package/dist/scene/capture-plan.js +79 -0
- package/dist/scene/capture-plan.js.map +1 -0
- package/dist/scene/capture.d.ts +21 -0
- package/dist/scene/capture.d.ts.map +1 -0
- package/dist/scene/capture.js +118 -0
- package/dist/scene/capture.js.map +1 -0
- package/dist/scene/image-colors.d.ts +25 -0
- package/dist/scene/image-colors.d.ts.map +1 -0
- package/dist/scene/image-colors.js +110 -0
- package/dist/scene/image-colors.js.map +1 -0
- package/dist/scene/image-rectify.d.ts +25 -0
- package/dist/scene/image-rectify.d.ts.map +1 -0
- package/dist/scene/image-rectify.js +82 -0
- package/dist/scene/image-rectify.js.map +1 -0
- package/dist/scene/image-sheet.d.ts +19 -0
- package/dist/scene/image-sheet.d.ts.map +1 -0
- package/dist/scene/image-sheet.js +118 -0
- package/dist/scene/image-sheet.js.map +1 -0
- package/dist/scene/least-squares.d.ts +31 -0
- package/dist/scene/least-squares.d.ts.map +1 -0
- package/dist/scene/least-squares.js +173 -0
- package/dist/scene/least-squares.js.map +1 -0
- package/dist/scene/numbers.d.ts +17 -0
- package/dist/scene/numbers.d.ts.map +1 -0
- package/dist/scene/numbers.js +39 -0
- package/dist/scene/numbers.js.map +1 -0
- package/dist/scene/placement.d.ts +43 -0
- package/dist/scene/placement.d.ts.map +1 -0
- package/dist/scene/placement.js +107 -0
- package/dist/scene/placement.js.map +1 -0
- package/dist/scene/raster.d.ts +18 -0
- package/dist/scene/raster.d.ts.map +1 -0
- package/dist/scene/raster.js +31 -0
- package/dist/scene/raster.js.map +1 -0
- package/dist/scene/scene-kit.d.ts +20 -0
- package/dist/scene/scene-kit.d.ts.map +1 -0
- package/dist/scene/scene-kit.js +74 -0
- package/dist/scene/scene-kit.js.map +1 -0
- package/dist/scene/scene-verbs.d.ts +4 -0
- package/dist/scene/scene-verbs.d.ts.map +1 -0
- package/dist/scene/scene-verbs.js +5 -0
- package/dist/scene/scene-verbs.js.map +1 -0
- package/dist/scene/seeded-random.d.ts +20 -0
- package/dist/scene/seeded-random.d.ts.map +1 -0
- package/dist/scene/seeded-random.js +42 -0
- package/dist/scene/seeded-random.js.map +1 -0
- package/dist/scene/spec-expression.d.ts +25 -0
- package/dist/scene/spec-expression.d.ts.map +1 -0
- package/dist/scene/spec-expression.js +234 -0
- package/dist/scene/spec-expression.js.map +1 -0
- package/dist/scene/static-server.d.ts +13 -0
- package/dist/scene/static-server.d.ts.map +1 -0
- package/dist/scene/static-server.js +99 -0
- package/dist/scene/static-server.js.map +1 -0
- 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 +38 -0
- package/dist/slate-actions.d.ts.map +1 -0
- package/dist/slate-actions.js +102 -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 +127 -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 +233 -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 +437 -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 +4 -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/scene-kit/starter/camera.js +10 -0
- package/scene-kit/starter/gobo.js +60 -0
- package/scene-kit/starter/index.html +23 -0
- package/scene-kit/starter/lib.js +84 -0
- package/scene-kit/starter/main.js +78 -0
- package/scene-kit/starter/scene.js +33 -0
- package/scene-kit/vendor/LICENSE +21 -0
- package/scene-kit/vendor/addons/geometries/RoundedBoxGeometry.js +216 -0
- package/scene-kit/vendor/addons/renderers/CSS3DRenderer.js +454 -0
- package/scene-kit/vendor/three.core.js +60586 -0
- package/scene-kit/vendor/three.module.js +19719 -0
- package/skills/12ui-design/SKILL.md +21 -61
- 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/scene.md +172 -0
- package/skills/12ui-design/session.md +161 -0
|
@@ -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,11 @@
|
|
|
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: Select, Design, Edit, Branch
|
|
5
|
+
* and Convert. Nothing else shows until a button is clicked; the dialogs live
|
|
6
|
+
* in mcp-slate-ui-script-dialog.ts. One band above the image says what is
|
|
7
|
+
* running, stopped or failed, with Resume when the work can resume. Mounted
|
|
8
|
+
* only in fullscreen.
|
|
9
|
+
*/
|
|
10
|
+
export declare const SLATE_UI_STAGE: string;
|
|
11
|
+
//# 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;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,QA0K1B,CAAC"}
|
|
@@ -0,0 +1,181 @@
|
|
|
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: Select, Design, Edit, Branch
|
|
5
|
+
* and Convert. Nothing else shows until a button is clicked; the dialogs live
|
|
6
|
+
* in mcp-slate-ui-script-dialog.ts. One band above the image says what is
|
|
7
|
+
* running, stopped or failed, with Resume when the work can resume. Mounted
|
|
8
|
+
* only in fullscreen.
|
|
9
|
+
*/
|
|
10
|
+
export const SLATE_UI_STAGE = String.raw `
|
|
11
|
+
var stageBuilt = false;
|
|
12
|
+
var stageEls = {};
|
|
13
|
+
|
|
14
|
+
var ICON_CLOSE = "M6 6l12 12M18 6L6 18";
|
|
15
|
+
function iconButton(label, path, onclick) {
|
|
16
|
+
var b = button("", "iconbtn", onclick);
|
|
17
|
+
b.setAttribute("aria-label", label);
|
|
18
|
+
b.title = label;
|
|
19
|
+
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>';
|
|
20
|
+
return b;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function buildStageSkeleton() {
|
|
24
|
+
var stage = $("stage");
|
|
25
|
+
stage.textContent = "";
|
|
26
|
+
var head = el("header", "stagehead");
|
|
27
|
+
head.appendChild(el("h1", "sr", COPY.title));
|
|
28
|
+
head.appendChild(buildTabs());
|
|
29
|
+
head.appendChild(el("span", "spacer"));
|
|
30
|
+
stageEls.close = iconButton(COPY.closeWorkspace, ICON_CLOSE, closeWorkspace);
|
|
31
|
+
head.appendChild(stageEls.close);
|
|
32
|
+
|
|
33
|
+
stageEls.body = el("div", "stagebody");
|
|
34
|
+
stageEls.rail = el("nav", "rail");
|
|
35
|
+
stageEls.rail.setAttribute("aria-label", COPY.tabDesigns);
|
|
36
|
+
var main = el("section", "main");
|
|
37
|
+
stageEls.band = el("div", "band hidden");
|
|
38
|
+
stageEls.band.setAttribute("role", "status");
|
|
39
|
+
stageEls.hero = el("div", "hero");
|
|
40
|
+
var row = el("div", "actionrow");
|
|
41
|
+
stageEls.select = button(COPY.select, "primary", function () { doSelect(selectedVersion()); });
|
|
42
|
+
stageEls.design = button(COPY.design, "", function () { openDialog("design", stageEls.design); });
|
|
43
|
+
stageEls.edit = button(COPY.edit, "", function () { openDialog("edit", stageEls.edit); });
|
|
44
|
+
stageEls.branch = button(COPY.branch, "", function () { openDialog("branch", stageEls.branch); });
|
|
45
|
+
stageEls.convert = button(COPY.convert, "", function () { openDialog("convert", stageEls.convert); });
|
|
46
|
+
stageEls.editWhy = el("span", "sr");
|
|
47
|
+
stageEls.editWhy.id = "edit-why";
|
|
48
|
+
[stageEls.select, stageEls.design, stageEls.edit, stageEls.branch, stageEls.convert, stageEls.editWhy].forEach(function (b) { row.appendChild(b); });
|
|
49
|
+
stageEls.status = el("p", "status");
|
|
50
|
+
stageEls.status.setAttribute("data-status", "");
|
|
51
|
+
stageEls.status.setAttribute("role", "status");
|
|
52
|
+
stageEls.status.setAttribute("aria-live", "polite");
|
|
53
|
+
// A line set before the workspace was built (the first view arrives first) still shows.
|
|
54
|
+
stageEls.status.textContent = state.status.text;
|
|
55
|
+
if (state.status.kind) stageEls.status.className = "status " + state.status.kind;
|
|
56
|
+
main.appendChild(stageEls.band);
|
|
57
|
+
main.appendChild(stageEls.hero);
|
|
58
|
+
main.appendChild(row);
|
|
59
|
+
main.appendChild(stageEls.status);
|
|
60
|
+
stageEls.more = el("div", "morehost");
|
|
61
|
+
var selection = el("div", "selection");
|
|
62
|
+
selection.appendChild(stageEls.rail);
|
|
63
|
+
selection.appendChild(stageEls.more);
|
|
64
|
+
stageEls.body.appendChild(selection);
|
|
65
|
+
stageEls.body.appendChild(main);
|
|
66
|
+
stageEls.inspiration = el("div", "inspiration hidden");
|
|
67
|
+
stageEls.dialog = el("div", "dialogmount");
|
|
68
|
+
|
|
69
|
+
stage.appendChild(head);
|
|
70
|
+
stage.appendChild(stageEls.body);
|
|
71
|
+
stage.appendChild(stageEls.inspiration);
|
|
72
|
+
stage.appendChild(stageEls.dialog);
|
|
73
|
+
stageBuilt = true;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// A chip is one version of an option; its title carries the words of the edit that made it.
|
|
77
|
+
function chipTitle(v) { return v.prompt ? v.label + ": " + v.prompt : v.label; }
|
|
78
|
+
|
|
79
|
+
function buildRail(rail) {
|
|
80
|
+
var v = state.view;
|
|
81
|
+
v.rounds.slice().sort(function (a, b) { return b.index - a.index; }).forEach(function (round) {
|
|
82
|
+
var section = el("div", "round");
|
|
83
|
+
var head = el("h2", "roundhead", COPY.roundPrefix + round.index);
|
|
84
|
+
var title = roundTitle(round);
|
|
85
|
+
if (title) head.title = title;
|
|
86
|
+
section.appendChild(head);
|
|
87
|
+
var list = el("ul", "options");
|
|
88
|
+
orderedCandidates().filter(function (c) { return c.roundId === round.roundId; }).sort(byLabel).forEach(function (c) {
|
|
89
|
+
var item = el("li", "option");
|
|
90
|
+
item.appendChild(thumbCell(c, "opt"));
|
|
91
|
+
var versions = versionsOf(c);
|
|
92
|
+
if (versions.length > 1) {
|
|
93
|
+
var chips = el("div", "chips");
|
|
94
|
+
versions.forEach(function (version) {
|
|
95
|
+
var on = state.sel.versionId === version.versionId;
|
|
96
|
+
var chip = button(version.label, "chip" + (on ? " selected" : ""), function () { selectCandidate(c.candidateId, version.versionId); });
|
|
97
|
+
chip.title = chipTitle(version);
|
|
98
|
+
chip.setAttribute("aria-label", COPY.versionPrefix + version.label);
|
|
99
|
+
chip.setAttribute("aria-pressed", on ? "true" : "false");
|
|
100
|
+
chips.appendChild(chip);
|
|
101
|
+
});
|
|
102
|
+
item.appendChild(chips);
|
|
103
|
+
}
|
|
104
|
+
list.appendChild(item);
|
|
105
|
+
});
|
|
106
|
+
section.appendChild(list);
|
|
107
|
+
rail.appendChild(section);
|
|
108
|
+
});
|
|
109
|
+
var slot = el("div", "moreslot");
|
|
110
|
+
slot.appendChild(moreTile());
|
|
111
|
+
rail.appendChild(slot);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// ---- the band: what is running, stopped or failed ----
|
|
115
|
+
function buildBand(node, band) {
|
|
116
|
+
node.appendChild(el("span", "bandtext" + (band.kind === "failed" ? " err" : ""), band.text));
|
|
117
|
+
if (band.op.resumable) {
|
|
118
|
+
var b = button(COPY.resume, "textbtn", function () { actResume(band.op, b); });
|
|
119
|
+
node.appendChild(b);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
function actResume(op, buttonEl) {
|
|
123
|
+
if (state.opBusy[op.opId]) return;
|
|
124
|
+
state.opBusy[op.opId] = true;
|
|
125
|
+
if (buttonEl) buttonEl.disabled = true;
|
|
126
|
+
callTool(TOOLS.resume, { runDir: state.view.runDir, opId: op.opId }).then(function (result) {
|
|
127
|
+
var sc = result.structuredContent || {};
|
|
128
|
+
if (sc.view) applyView(sc.view, true);
|
|
129
|
+
}, function (err) { setStatus(errText(err), "err"); }).then(function () { state.opBusy[op.opId] = false; if (buttonEl) buttonEl.disabled = false; });
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
function syncStageControls(selectLabel, selectDisabled) {
|
|
133
|
+
if (!stageBuilt || !isFullscreen()) return;
|
|
134
|
+
var v = selectedVersion();
|
|
135
|
+
var any = !!state.view && state.view.candidates.length > 0;
|
|
136
|
+
if (selectLabel !== undefined) { stageEls.select.textContent = selectLabel; stageEls.select.disabled = selectDisabled; }
|
|
137
|
+
stageEls.design.disabled = !any;
|
|
138
|
+
// Edit is off when the shown version cannot be edited; the reason is its accessible description, not a tooltip.
|
|
139
|
+
var blocked = !v || !v.editable;
|
|
140
|
+
stageEls.edit.disabled = blocked;
|
|
141
|
+
stageEls.editWhy.textContent = blocked && v && v.editBlockedReason ? v.editBlockedReason : "";
|
|
142
|
+
if (blocked && v && v.editBlockedReason) stageEls.edit.setAttribute("aria-describedby", "edit-why"); else stageEls.edit.removeAttribute("aria-describedby");
|
|
143
|
+
stageEls.branch.disabled = !v;
|
|
144
|
+
stageEls.convert.disabled = !v;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// ---- render ----
|
|
148
|
+
function renderStage() {
|
|
149
|
+
var v = state.view;
|
|
150
|
+
if (!stageBuilt) buildStageSkeleton();
|
|
151
|
+
stageEls.close.classList.toggle("hidden", !canInline());
|
|
152
|
+
syncTabs();
|
|
153
|
+
syncProgressLine(v);
|
|
154
|
+
var onDesigns = state.tab === "designs";
|
|
155
|
+
stageEls.body.classList.toggle("hidden", !onDesigns);
|
|
156
|
+
stageEls.inspiration.classList.toggle("hidden", onDesigns);
|
|
157
|
+
if (!onDesigns) { renderInspiration(stageEls.inspiration, "stage"); return; }
|
|
158
|
+
var c = selectedCandidate();
|
|
159
|
+
var sel = selectedVersion();
|
|
160
|
+
if (v.candidates.length === 0) {
|
|
161
|
+
stageEls.rail.textContent = "";
|
|
162
|
+
stageEls.rail.__sig = "";
|
|
163
|
+
stageEls.band.classList.add("hidden");
|
|
164
|
+
stageEls.hero.__sig = "";
|
|
165
|
+
stageEls.hero.textContent = "";
|
|
166
|
+
stageEls.hero.classList.add("note");
|
|
167
|
+
stageEls.hero.appendChild(el("div", "heronote", COPY.empty));
|
|
168
|
+
syncStageControls(COPY.select, true);
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
var railSig = JSON.stringify([state.sel, v.rounds.map(function (r) { return [r.roundId, r.index, r.kind, r.fromVersionId]; }),
|
|
172
|
+
orderedCandidates().map(function (x) { return thumbSignature(x).concat([x.versionIds]); })]);
|
|
173
|
+
setIfChanged(stageEls.rail, railSig, buildRail);
|
|
174
|
+
var band = activeBand(v);
|
|
175
|
+
stageEls.band.classList.toggle("hidden", !band);
|
|
176
|
+
setIfChanged(stageEls.band, band ? JSON.stringify([band.kind, band.text, band.op.opId, band.op.resumable]) : "", function (node) { if (band) buildBand(node, band); });
|
|
177
|
+
setIfChanged(stageEls.hero, heroSignature(c, sel), function (node) { heroInto(node, c, sel); });
|
|
178
|
+
syncControls();
|
|
179
|
+
}
|
|
180
|
+
`;
|
|
181
|
+
//# 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;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0KvC,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"}
|
|
@@ -0,0 +1,306 @@
|
|
|
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 const SLATE_UI_STATE = String.raw `
|
|
13
|
+
var state = {
|
|
14
|
+
host: {}, view: null,
|
|
15
|
+
sel: { candidateId: null, versionId: null, followLatest: true },
|
|
16
|
+
tab: "designs", query: "", dialog: null, more: null, wantEdit: null,
|
|
17
|
+
busy: false, status: { text: "", kind: "", source: "", phase: "" }, lastOpText: "", lastBandOp: "",
|
|
18
|
+
thumbs: {}, fulls: {}, refs: {}, lastOpStates: {}, opBusy: {}, awaitEdit: null,
|
|
19
|
+
insp: { local: null, writing: false, dirty: false, searching: false, waiters: [] }
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
// ---- small helpers ----
|
|
23
|
+
function el(tag, cls, text) {
|
|
24
|
+
var e = document.createElement(tag);
|
|
25
|
+
if (cls) e.className = cls;
|
|
26
|
+
if (text !== undefined) e.textContent = text;
|
|
27
|
+
return e;
|
|
28
|
+
}
|
|
29
|
+
function button(label, cls, onclick) {
|
|
30
|
+
var b = el("button", cls || "", label);
|
|
31
|
+
b.type = "button";
|
|
32
|
+
if (onclick) b.addEventListener("click", onclick);
|
|
33
|
+
return b;
|
|
34
|
+
}
|
|
35
|
+
function uuid4() {
|
|
36
|
+
var b = new Uint8Array(16);
|
|
37
|
+
if (typeof crypto !== "undefined" && crypto.getRandomValues) crypto.getRandomValues(b);
|
|
38
|
+
else for (var i = 0; i < 16; i++) b[i] = Math.floor(Math.random() * 256);
|
|
39
|
+
b[6] = (b[6] & 15) | 64;
|
|
40
|
+
b[8] = (b[8] & 63) | 128;
|
|
41
|
+
var h = Array.prototype.map.call(b, function (x) { return (x + 256).toString(16).slice(1); }).join("");
|
|
42
|
+
return h.slice(0, 8) + "-" + h.slice(8, 12) + "-" + h.slice(12, 16) + "-" + h.slice(16, 20) + "-" + h.slice(20);
|
|
43
|
+
}
|
|
44
|
+
function visible() { return document.visibilityState !== "hidden"; }
|
|
45
|
+
function errText(err) { return err && err.message ? err.message : String(err); }
|
|
46
|
+
// "source" is "op" for a line the screen derives from the ops' own state, "" for a message about a click.
|
|
47
|
+
function setStatus(text, kind, source, phase) {
|
|
48
|
+
state.status = { text: text || "", kind: kind || "", source: source || "", phase: phase || "" };
|
|
49
|
+
var nodes = document.querySelectorAll("[data-status]");
|
|
50
|
+
for (var i = 0; i < nodes.length; i++) {
|
|
51
|
+
nodes[i].textContent = state.status.text;
|
|
52
|
+
nodes[i].className = "status" + (kind ? " " + kind : "");
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// ---- lookups over the current view ----
|
|
57
|
+
function cand(id) { return state.view && state.view.candidates.find(function (c) { return c.candidateId === id; }); }
|
|
58
|
+
function ver(id) { return state.view && state.view.versions.find(function (v) { return v.versionId === id; }); }
|
|
59
|
+
function latestVersion(c) { return c && c.latestVersionId ? ver(c.latestVersionId) : undefined; }
|
|
60
|
+
function roundById(id) { return state.view && state.view.rounds.find(function (r) { return r.roundId === id; }); }
|
|
61
|
+
function byLabel(a, b) { return a.label.length - b.label.length || (a.label < b.label ? -1 : a.label > b.label ? 1 : 0); }
|
|
62
|
+
// Newest round first, then by letter: the order of the strip and of the selection.
|
|
63
|
+
function optionOrder(a, b) {
|
|
64
|
+
var ra = roundById(a.roundId);
|
|
65
|
+
var rb = roundById(b.roundId);
|
|
66
|
+
return ((rb ? rb.index : 0) - (ra ? ra.index : 0)) || byLabel(a, b);
|
|
67
|
+
}
|
|
68
|
+
function orderedCandidates() { return state.view.candidates.slice().sort(optionOrder); }
|
|
69
|
+
// The card's strip: the newest round only, plus the option the pick belongs to and the one being viewed when they are
|
|
70
|
+
// older, so the large image always has its thumbnail. The workspace still lists every round.
|
|
71
|
+
function inlineCandidates() {
|
|
72
|
+
var all = orderedCandidates();
|
|
73
|
+
if (all.length === 0) return all;
|
|
74
|
+
var newest = all[0].roundId;
|
|
75
|
+
var picked = state.view.pick && ver(state.view.pick.versionId);
|
|
76
|
+
var keep = {};
|
|
77
|
+
keep[newest] = true;
|
|
78
|
+
if (picked) keep[picked.candidateId] = true;
|
|
79
|
+
if (state.sel.candidateId) keep[state.sel.candidateId] = true;
|
|
80
|
+
return all.filter(function (c) { return c.roundId === newest || keep[c.candidateId]; });
|
|
81
|
+
}
|
|
82
|
+
function versionsOf(c) { return c.versionIds.map(ver).filter(Boolean); }
|
|
83
|
+
function runningOps() { return state.view.ops.filter(function (o) { return o.state === "starting" || o.state === "running"; }); }
|
|
84
|
+
function selectedCandidate() { return cand(state.sel.candidateId); }
|
|
85
|
+
function selectedVersion() { return ver(state.sel.versionId); }
|
|
86
|
+
function optionName(c) { return COPY.optionPrefix + c.label + (c.state === "failed" ? COPY.failedSuffix : ""); }
|
|
87
|
+
|
|
88
|
+
function ensureSelection() {
|
|
89
|
+
var v = state.view;
|
|
90
|
+
if (!v || v.candidates.length === 0) { state.sel = { candidateId: null, versionId: null, followLatest: true }; return; }
|
|
91
|
+
var c = cand(state.sel.candidateId);
|
|
92
|
+
if (!c) {
|
|
93
|
+
var picked = v.pick && ver(v.pick.versionId);
|
|
94
|
+
var ordered = orderedCandidates();
|
|
95
|
+
c = (picked && cand(picked.candidateId)) || ordered.find(function (x) { return x.state === "ready"; }) || ordered[0];
|
|
96
|
+
state.sel = { candidateId: c.candidateId, versionId: null, followLatest: true };
|
|
97
|
+
}
|
|
98
|
+
var current = state.sel.versionId && c.versionIds.indexOf(state.sel.versionId) >= 0 ? state.sel.versionId : null;
|
|
99
|
+
if (state.sel.followLatest || !current) { state.sel.versionId = c.latestVersionId; state.sel.followLatest = true; }
|
|
100
|
+
}
|
|
101
|
+
// Choosing the option that is already shown, at the version already shown, changes nothing.
|
|
102
|
+
function selectCandidate(id, versionId) {
|
|
103
|
+
var c = cand(id);
|
|
104
|
+
if (!c) return;
|
|
105
|
+
var target = versionId || c.latestVersionId;
|
|
106
|
+
if (state.sel.candidateId === id && state.sel.versionId === target) return;
|
|
107
|
+
state.awaitEdit = null;
|
|
108
|
+
state.sel.candidateId = id;
|
|
109
|
+
state.sel.versionId = target;
|
|
110
|
+
state.sel.followLatest = !versionId || versionId === c.latestVersionId;
|
|
111
|
+
renderAll();
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// ---- pictures through the app-only tools, at most three at a time; the workspace jumps the queue ----
|
|
115
|
+
var loader = { queue: [], active: 0, max: 3, inflight: {} };
|
|
116
|
+
function imageKey(version, size) { return size + ":" + version.versionId + ":" + version.sha256; }
|
|
117
|
+
function enqueue(key, cache, tool, args, urgent) {
|
|
118
|
+
if (cache[key]) return Promise.resolve(cache[key]);
|
|
119
|
+
if (loader.inflight[key]) {
|
|
120
|
+
if (urgent) {
|
|
121
|
+
var at = loader.queue.findIndex(function (j) { return j.key === key; });
|
|
122
|
+
if (at > 0) loader.queue.unshift(loader.queue.splice(at, 1)[0]);
|
|
123
|
+
}
|
|
124
|
+
return loader.inflight[key].promise;
|
|
125
|
+
}
|
|
126
|
+
var job = { key: key, cache: cache, tool: tool, args: args };
|
|
127
|
+
job.promise = new Promise(function (resolve, reject) { job.resolve = resolve; job.reject = reject; });
|
|
128
|
+
loader.inflight[key] = job;
|
|
129
|
+
if (urgent) loader.queue.unshift(job); else loader.queue.push(job);
|
|
130
|
+
pump();
|
|
131
|
+
return job.promise;
|
|
132
|
+
}
|
|
133
|
+
function wantImage(version, size, urgent) {
|
|
134
|
+
var cache = size === "full" ? state.fulls : state.thumbs;
|
|
135
|
+
return enqueue(imageKey(version, size), cache, TOOLS.image, { runDir: state.view.runDir, versionId: version.versionId, size: size }, urgent);
|
|
136
|
+
}
|
|
137
|
+
function wantReference(id, size, urgent) {
|
|
138
|
+
return enqueue("ref:" + size + ":" + id, state.refs, TOOLS.reference, { runDir: state.view.runDir, referenceId: id, size: size }, urgent);
|
|
139
|
+
}
|
|
140
|
+
function pump() {
|
|
141
|
+
while (visible() && loader.active < loader.max && loader.queue.length > 0) {
|
|
142
|
+
var job = loader.queue.shift();
|
|
143
|
+
loader.active++;
|
|
144
|
+
run(job);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
function run(job) {
|
|
148
|
+
callTool(job.tool, job.args).then(function (result) {
|
|
149
|
+
var block = (result.content || []).find(function (b) { return b.type === "image"; });
|
|
150
|
+
if (!block) throw new Error("no image block returned");
|
|
151
|
+
var src = "data:" + block.mimeType + ";base64," + block.data;
|
|
152
|
+
job.cache[job.key] = src;
|
|
153
|
+
job.resolve(src);
|
|
154
|
+
}).catch(function (err) { job.reject(err); }).then(function () {
|
|
155
|
+
delete loader.inflight[job.key];
|
|
156
|
+
loader.active--;
|
|
157
|
+
pump();
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
function fillImage(img, promise) {
|
|
161
|
+
promise.then(function (src) {
|
|
162
|
+
if (img.isConnected === false) return;
|
|
163
|
+
img.src = src;
|
|
164
|
+
img.classList.remove("empty");
|
|
165
|
+
}, function (err) {
|
|
166
|
+
// An error is shown in place of the picture, never thrown.
|
|
167
|
+
img.alt = errText(err);
|
|
168
|
+
img.setAttribute("data-error", errText(err));
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
function bindImage(img, version, size, urgent) { if (version) fillImage(img, wantImage(version, size, urgent)); }
|
|
172
|
+
function bindReference(img, id, size) { fillImage(img, wantReference(id, size, false)); }
|
|
173
|
+
|
|
174
|
+
// ---- status polling ----
|
|
175
|
+
var DELAYS = [2000, 3000, 5000, 8000, 10000];
|
|
176
|
+
var poll = { timer: null, step: 0, inFlight: false };
|
|
177
|
+
function wantsPolling() { return !!state.view && !!state.view.runDir && visible() && runningOps().length > 0; }
|
|
178
|
+
function clearPoll() { if (poll.timer !== null) { clearTimeout(poll.timer); poll.timer = null; } }
|
|
179
|
+
function schedulePoll() {
|
|
180
|
+
clearPoll();
|
|
181
|
+
if (!wantsPolling() || poll.inFlight) return;
|
|
182
|
+
poll.timer = setTimeout(runPoll, DELAYS[Math.min(poll.step, DELAYS.length - 1)]);
|
|
183
|
+
}
|
|
184
|
+
function runPoll() {
|
|
185
|
+
poll.timer = null;
|
|
186
|
+
if (!wantsPolling()) return;
|
|
187
|
+
poll.inFlight = true;
|
|
188
|
+
callTool(TOOLS.status, { runDir: state.view.runDir, since: state.view.stamp }).then(function (result) {
|
|
189
|
+
var sc = result.structuredContent || {};
|
|
190
|
+
if (sc.unchanged) poll.step++;
|
|
191
|
+
else if (sc.schema) { poll.step = 0; applyView(sc, true); }
|
|
192
|
+
}).catch(function () { poll.step++; }).then(function () { poll.inFlight = false; schedulePoll(); });
|
|
193
|
+
}
|
|
194
|
+
// One refresh when the view becomes visible again.
|
|
195
|
+
function refreshOnce() {
|
|
196
|
+
if (!state.view || !state.view.runDir || poll.inFlight) return;
|
|
197
|
+
poll.inFlight = true;
|
|
198
|
+
callTool(TOOLS.status, { runDir: state.view.runDir, since: state.view.stamp }).then(function (result) {
|
|
199
|
+
var sc = result.structuredContent || {};
|
|
200
|
+
if (sc.schema) applyView(sc, true);
|
|
201
|
+
}).catch(function () {}).then(function () { poll.inFlight = false; schedulePoll(); });
|
|
202
|
+
}
|
|
203
|
+
document.addEventListener("visibilitychange", function () {
|
|
204
|
+
if (visible()) { pump(); refreshOnce(); schedulePoll(); }
|
|
205
|
+
else clearPoll();
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
// ---- what the ops say: the band of the workspace, the status line of the card ----
|
|
209
|
+
function opLabel(op) {
|
|
210
|
+
var parent = op.edit && ver(op.edit.parentVersionId);
|
|
211
|
+
var c = parent && cand(parent.candidateId);
|
|
212
|
+
return c ? c.label : (op.target || "");
|
|
213
|
+
}
|
|
214
|
+
function roundOfOp(op) {
|
|
215
|
+
var rounds = state.view.rounds;
|
|
216
|
+
var named = rounds.filter(function (r) { return COPY.roundPrefix + r.index === op.target; })[0];
|
|
217
|
+
if (named) return named;
|
|
218
|
+
var running = rounds.filter(function (r) { return r.state === "running"; });
|
|
219
|
+
return running.length ? running[running.length - 1] : null;
|
|
220
|
+
}
|
|
221
|
+
function progressText(op) {
|
|
222
|
+
// The hosted server has no runner of its own: a running op is waiting for the person's agent to draw and upload.
|
|
223
|
+
if (TARGET === "remote" && op.phase === "agent") return COPY.waitingForAgent;
|
|
224
|
+
if (op.kind === "round") {
|
|
225
|
+
var r = roundOfOp(op);
|
|
226
|
+
return r ? tpl(COPY.designingProgress, { n: r.readyCount, m: r.count }) : COPY.designing;
|
|
227
|
+
}
|
|
228
|
+
return tpl(COPY.editing, { label: opLabel(op) });
|
|
229
|
+
}
|
|
230
|
+
// The newest op. The local plugin stamps every op with a time; the hosted server sends none (data minimization), so
|
|
231
|
+
// its ops are already oldest first and the last one is the newest.
|
|
232
|
+
function latestOp(view) {
|
|
233
|
+
if (TARGET === "remote") return view.ops[view.ops.length - 1];
|
|
234
|
+
return view.ops.slice().sort(function (a, b) { return Date.parse(a.startedAt) - Date.parse(b.startedAt); }).pop();
|
|
235
|
+
}
|
|
236
|
+
// The one thing worth a band: work that is running, else work that stopped or failed as the newest word.
|
|
237
|
+
function activeBand(view) {
|
|
238
|
+
var running = view.ops.filter(function (o) { return o.state === "starting" || o.state === "running"; });
|
|
239
|
+
if (running.length) { var op = running[running.length - 1]; return { kind: "run", op: op, text: progressText(op) }; }
|
|
240
|
+
var last = latestOp(view);
|
|
241
|
+
if (last && last.state === "interrupted") return { kind: "stopped", op: last, text: TARGET === "remote" && last.error && last.error.message ? last.error.message : COPY.interrupted };
|
|
242
|
+
if (last && last.state === "failed" && last.error) return { kind: "failed", op: last, text: last.error.message };
|
|
243
|
+
return null;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// The card has one status line, so it also carries the running, stopped and failed words; the workspace has a band.
|
|
247
|
+
function syncProgressLine(view) {
|
|
248
|
+
var band = activeBand(view);
|
|
249
|
+
// The workspace's band speaks for running work, so a line about an earlier click ("Selected E.") is stale the
|
|
250
|
+
// moment a new op starts; a refusal stays, because the person has not read it away.
|
|
251
|
+
var bandOp = band && band.kind === "run" ? band.op.opId : "";
|
|
252
|
+
if (bandOp && bandOp !== state.lastBandOp && isFullscreen() && state.status.kind !== "err") setStatus("", "");
|
|
253
|
+
state.lastBandOp = bandOp;
|
|
254
|
+
if (isFullscreen() || !band) {
|
|
255
|
+
state.lastOpText = "";
|
|
256
|
+
if (state.status.source === "op" && state.status.phase === "progress") setStatus("", "");
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
// A message about a click stays until these words themselves change.
|
|
260
|
+
if (band.text !== state.lastOpText) { state.lastOpText = band.text; setStatus(band.text, band.kind === "failed" ? "err" : "", "op", "progress"); }
|
|
261
|
+
}
|
|
262
|
+
// What a finished op produced. A failure is the band's to say in the workspace.
|
|
263
|
+
function syncDoneLine(prev, view) {
|
|
264
|
+
var was = {};
|
|
265
|
+
if (prev) prev.ops.forEach(function (o) { was[o.opId] = o.state; });
|
|
266
|
+
var finished = view.ops.filter(function (o) {
|
|
267
|
+
return (was[o.opId] === "starting" || was[o.opId] === "running") && (o.state === "succeeded" || o.state === "failed");
|
|
268
|
+
}).pop();
|
|
269
|
+
if (!finished) return;
|
|
270
|
+
if (finished.state === "failed") return;
|
|
271
|
+
var made = view.versions.filter(function (v) { return finished.resultVersionIds.indexOf(v.versionId) >= 0; });
|
|
272
|
+
if (finished.kind === "round") {
|
|
273
|
+
var n = made.length;
|
|
274
|
+
if (n === 0) return;
|
|
275
|
+
var round = roundOfOp(finished);
|
|
276
|
+
var failedCount = round ? view.candidates.filter(function (c) { return c.roundId === round.roundId && c.state === "failed"; }).length : 0;
|
|
277
|
+
var text = (n === 1 ? COPY.roundReadyOne : tpl(COPY.roundReadyMany, { n: n })) + (failedCount ? " " + tpl(COPY.roundFailed, { n: failedCount }) : "");
|
|
278
|
+
setStatus(text, failedCount ? "" : "ok", "op", "done");
|
|
279
|
+
} else {
|
|
280
|
+
setStatus(tpl(COPY.editReady, { label: made.length ? made[made.length - 1].label : opLabel(finished) }), "ok", "op", "done");
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
function syncOpStatus(prev, view) { syncProgressLine(view); syncDoneLine(prev, view); }
|
|
284
|
+
|
|
285
|
+
// ---- tell the agent, best effort, when work that was running has finished ----
|
|
286
|
+
function announceSettled(prev, next) {
|
|
287
|
+
next.ops.forEach(function (op) {
|
|
288
|
+
var was = state.lastOpStates[op.opId];
|
|
289
|
+
state.lastOpStates[op.opId] = op.state;
|
|
290
|
+
if (was !== "starting" && was !== "running") return;
|
|
291
|
+
if (op.state !== "succeeded" && op.state !== "failed") return;
|
|
292
|
+
var head = TARGET === "remote" ? "Design workspace: " : "Design workspace rev " + next.rev + ": ";
|
|
293
|
+
var text;
|
|
294
|
+
if (op.state === "failed") text = head + "the " + op.kind + " " + (op.target ? "for " + op.target + " " : "") + "failed" + (op.error ? " (" + op.error.code + ")" : "") + ".";
|
|
295
|
+
else if (op.kind === "round") {
|
|
296
|
+
var labels = next.candidates.filter(function (c) { return c.versionIds.some(function (id) { return op.resultVersionIds.indexOf(id) >= 0; }); }).map(function (c) { return c.label; });
|
|
297
|
+
text = head + (op.target || "the round") + " is ready" + (labels.length ? " (" + labels[0] + " to " + labels[labels.length - 1] + ")" : "") + ".";
|
|
298
|
+
} else {
|
|
299
|
+
var made = next.versions.find(function (v) { return op.resultVersionIds.indexOf(v.versionId) >= 0; });
|
|
300
|
+
text = head + (made ? made.label : opLabel(op)) + " was created.";
|
|
301
|
+
}
|
|
302
|
+
updateModelContext(text + " Confirm with " + TOOLS.data + ".");
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
`;
|
|
306
|
+
//# sourceMappingURL=mcp-slate-ui-script-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui-script-state.js","sourceRoot":"","sources":["../src/mcp-slate-ui-script-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqSvC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The two small controls on a design's thumbnail, in the card's strip and in
|
|
3
|
+
* the workspace's selection: a plus (More like this) and an edit pencil
|
|
4
|
+
* (Edit). They are siblings of the thumbnail button inside one cell (a button
|
|
5
|
+
* cannot hold buttons), revealed by CSS on hover and on keyboard focus within
|
|
6
|
+
* the cell, and on a device with no hover only on the selected thumbnail. A
|
|
7
|
+
* click on either never reaches the thumbnail, so it never swaps the large
|
|
8
|
+
* image by itself.
|
|
9
|
+
*
|
|
10
|
+
* The plus opens the Generate more panel for variations of that design
|
|
11
|
+
* (openMoreLike, in mcp-slate-ui-script-more.ts). Edit selects that design and
|
|
12
|
+
* opens the Edit dialog. The dialog lives in the workspace; the card has no
|
|
13
|
+
* room for the drawing surface, so in the card Edit opens the workspace and the
|
|
14
|
+
* dialog opens as soon as it shows (wantEdit). A host that cannot show the
|
|
15
|
+
* workspace has no place for the dialog, so there Edit is hidden in the card.
|
|
16
|
+
*
|
|
17
|
+
* Not on the Generate more tile, and not on an option that has no picture yet.
|
|
18
|
+
* Whether each control is on follows the view (syncThumbTools): the plus is off
|
|
19
|
+
* while a round runs (the tile's rule), Edit while that design has an edit in
|
|
20
|
+
* flight or its version cannot be edited.
|
|
21
|
+
*/
|
|
22
|
+
export declare const SLATE_UI_THUMBTOOLS: string;
|
|
23
|
+
//# sourceMappingURL=mcp-slate-ui-script-thumbtools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui-script-thumbtools.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-script-thumbtools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,mBAAmB,QAgF/B,CAAC"}
|