@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,103 @@
|
|
|
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 const SLATE_UI_THUMBTOOLS = String.raw `
|
|
23
|
+
var ICON_PENCIL = "M4 20l1-4L16.5 4.5a2.1 2.1 0 0 1 3 3L8 19l-4 1zM14 7l3 3";
|
|
24
|
+
|
|
25
|
+
function thumbToolButton(action, label, path, c, onclick) {
|
|
26
|
+
var b = button("", "thumbtool", function (e) {
|
|
27
|
+
if (e && e.stopPropagation) e.stopPropagation();
|
|
28
|
+
onclick(c.candidateId);
|
|
29
|
+
});
|
|
30
|
+
b.setAttribute("aria-label", label);
|
|
31
|
+
b.title = label;
|
|
32
|
+
b.setAttribute("data-action", action);
|
|
33
|
+
b.setAttribute("data-candidate", c.candidateId);
|
|
34
|
+
b.innerHTML = '<svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="' + path + '"/></svg>';
|
|
35
|
+
return b;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// One cell per option: the thumbnail button and, when there is a picture to work from, its two controls.
|
|
39
|
+
function thumbCell(c, cls) {
|
|
40
|
+
var cell = el("span", "thumbcell");
|
|
41
|
+
var thumb = thumbButton(c, cls);
|
|
42
|
+
if (thumb.classList.contains("selected")) cell.classList.add("selected");
|
|
43
|
+
cell.appendChild(thumb);
|
|
44
|
+
if (c.state === "ready" && latestVersion(c)) {
|
|
45
|
+
var tools = el("span", "thumbtools");
|
|
46
|
+
tools.appendChild(thumbToolButton("more", COPY.moreLikeThis, ICON_PLUS, c, openMoreLike));
|
|
47
|
+
tools.appendChild(thumbToolButton("edit", COPY.edit, ICON_PENCIL, c, editFromThumb));
|
|
48
|
+
cell.appendChild(tools);
|
|
49
|
+
}
|
|
50
|
+
return cell;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Whether Edit has a dialog to open in this host: the workspace itself, or a card that can open the workspace.
|
|
54
|
+
function canEditHere() { return isFullscreen() || canFullscreen(); }
|
|
55
|
+
|
|
56
|
+
function thumbToolNodes() { return Array.prototype.slice.call(document.querySelectorAll(".thumbtool")); }
|
|
57
|
+
function thumbToolFor(action, candidateId) {
|
|
58
|
+
return thumbToolNodes().filter(function (t) {
|
|
59
|
+
return t.getAttribute("data-action") === action && t.getAttribute("data-candidate") === candidateId && !t.disabled && !isHiddenNode(t);
|
|
60
|
+
})[0];
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function syncThumbTools() {
|
|
64
|
+
if (!state.view) return;
|
|
65
|
+
var busy = moreBusy();
|
|
66
|
+
var edit = canEditHere();
|
|
67
|
+
var likeId = state.more && state.more.mode === "like" ? state.more.fromCandidateId : null;
|
|
68
|
+
thumbToolNodes().forEach(function (t) {
|
|
69
|
+
var c = cand(t.getAttribute("data-candidate"));
|
|
70
|
+
var v = latestVersion(c);
|
|
71
|
+
if (t.getAttribute("data-action") === "more") {
|
|
72
|
+
t.disabled = busy || !pickable(v);
|
|
73
|
+
t.setAttribute("aria-expanded", likeId !== null && likeId === t.getAttribute("data-candidate") ? "true" : "false");
|
|
74
|
+
} else {
|
|
75
|
+
t.classList.toggle("hidden", !edit);
|
|
76
|
+
t.disabled = !v || !v.editable || !!(c && c.busy);
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// Edit: that design is selected, then the Edit dialog opens on it, exactly as the workspace's Edit button does.
|
|
82
|
+
function editFromThumb(candidateId) {
|
|
83
|
+
var c = cand(candidateId);
|
|
84
|
+
var v = latestVersion(c);
|
|
85
|
+
if (!c || !v || !v.editable || c.busy || state.dialog) return;
|
|
86
|
+
selectCandidate(candidateId);
|
|
87
|
+
if (isFullscreen()) { openDialog("edit", thumbToolFor("edit", candidateId) || stageEls.edit); return; }
|
|
88
|
+
if (!canFullscreen()) return;
|
|
89
|
+
state.wantEdit = v.versionId;
|
|
90
|
+
request("ui/request-display-mode", { mode: "fullscreen" }).then(function (result) {
|
|
91
|
+
if (result && result.mode && result.mode !== "fullscreen") state.wantEdit = null;
|
|
92
|
+
}, function () { state.wantEdit = null; });
|
|
93
|
+
}
|
|
94
|
+
// The workspace has just shown: the dialog that was asked for in the card opens now, on the version that was asked for.
|
|
95
|
+
function openWantedEdit() {
|
|
96
|
+
var want = state.wantEdit;
|
|
97
|
+
if (!want || !stageBuilt || state.dialog) return;
|
|
98
|
+
state.wantEdit = null;
|
|
99
|
+
var v = selectedVersion();
|
|
100
|
+
if (v && v.versionId === want && v.editable) openDialog("edit", stageEls.edit);
|
|
101
|
+
}
|
|
102
|
+
`;
|
|
103
|
+
//# sourceMappingURL=mcp-slate-ui-script-thumbtools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui-script-thumbtools.js","sourceRoot":"","sources":["../src/mcp-slate-ui-script-thumbtools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgF5C,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The workspace view's script, assembled from single-purpose fragments that
|
|
3
|
+
* share one scope: bridge (host protocol), state (view state, picture queue,
|
|
4
|
+
* polling, what the ops say), progress, inline (the card), select (Select and
|
|
5
|
+
* the hand-offs), inspiration (the tabs and the Inspiration tab), stage
|
|
6
|
+
* (fullscreen), dialog (Design, Edit, Branch and Convert), more (the Generate more tile and panel), thumbtools (the
|
|
7
|
+
* plus and the pencil on a thumbnail), scribble (the drawing layer of Edit), the hosted and browser targets' words, then the handshake, last, so every function and
|
|
8
|
+
* variable exists before the first message can arrive. The tool names come
|
|
9
|
+
* from the view contract (SLATE_UI_TOOLS), not from the server's own module.
|
|
10
|
+
*
|
|
11
|
+
* The fragments are String.raw, so escape sequences reach the browser
|
|
12
|
+
* unchanged; the assembled script must therefore contain no backtick and no
|
|
13
|
+
* dollar-brace (a test asserts it).
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Which host the screen is for: the local plugin's own tools, the hosted server (design.12ui.com), or a browser page
|
|
17
|
+
* opened by `12ui workspace open` when the plugin's tools are not available (the local plugin's tools, reached
|
|
18
|
+
* through a host shim in the page in place of an MCP Apps host).
|
|
19
|
+
*/
|
|
20
|
+
export type SlateUiTarget = 'local' | 'remote' | 'browser';
|
|
21
|
+
/**
|
|
22
|
+
* The script for one target. The fragments are the same for both; the target is a constant they read (`TARGET`), and
|
|
23
|
+
* only the places the two servers differ branch on it: what the agent is told, how a running op reads, which Convert
|
|
24
|
+
* outputs exist and what the edit carries.
|
|
25
|
+
*/
|
|
26
|
+
export declare const buildSlateUiScript: (target: SlateUiTarget) => string;
|
|
27
|
+
export declare const SLATE_UI_SCRIPT: string;
|
|
28
|
+
//# sourceMappingURL=mcp-slate-ui-script.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui-script.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-script.ts"],"names":[],"mappings":"AAgBA;;;;;;;;;;;;;GAaG;AAEH;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AAgB3D;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,QAAQ,aAAa,KAAG,MAsB/C,CAAC;AAEb,eAAO,MAAM,eAAe,QAA8B,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { SLATE_CONVERT_CHOICES, SLATE_CONVERT_MAX_WIDTH, SLATE_MORE_COUNTS, SLATE_REMOTE_CONVERT_CHOICES, SLATE_UI_COPY } from './mcp-slate-ui-copy.js';
|
|
2
|
+
import { SLATE_UI_TOOLS } from './slate-view-contract.js';
|
|
3
|
+
import { SLATE_UI_BRIDGE } from './mcp-slate-ui-script-bridge.js';
|
|
4
|
+
import { SLATE_UI_BROWSER } from './mcp-slate-ui-script-browser.js';
|
|
5
|
+
import { SLATE_UI_DIALOG } from './mcp-slate-ui-script-dialog.js';
|
|
6
|
+
import { SLATE_UI_INLINE } from './mcp-slate-ui-script-inline.js';
|
|
7
|
+
import { SLATE_UI_INSPIRATION } from './mcp-slate-ui-script-inspiration.js';
|
|
8
|
+
import { SLATE_UI_MORE } from './mcp-slate-ui-script-more.js';
|
|
9
|
+
import { SLATE_UI_PROGRESS } from './mcp-slate-ui-script-progress.js';
|
|
10
|
+
import { SLATE_UI_REMOTE } from './mcp-slate-ui-script-remote.js';
|
|
11
|
+
import { SLATE_UI_SCRIBBLE } from './mcp-slate-ui-script-scribble.js';
|
|
12
|
+
import { SLATE_UI_SELECT } from './mcp-slate-ui-script-select.js';
|
|
13
|
+
import { SLATE_UI_STAGE } from './mcp-slate-ui-script-stage.js';
|
|
14
|
+
import { SLATE_UI_STATE } from './mcp-slate-ui-script-state.js';
|
|
15
|
+
import { SLATE_UI_THUMBTOOLS } from './mcp-slate-ui-script-thumbtools.js';
|
|
16
|
+
const HANDSHAKE = String.raw `
|
|
17
|
+
// ---- connect: handlers are registered above, before the handshake ----
|
|
18
|
+
if (window.parent === window) {
|
|
19
|
+
fatal(COPY.needsHost);
|
|
20
|
+
} else {
|
|
21
|
+
request("ui/initialize", { appCapabilities: {}, appInfo: { name: "12ui-slate", version: "3.0.0" }, protocolVersion: PROTOCOL })
|
|
22
|
+
.then(function (init) {
|
|
23
|
+
applyHost((init && init.hostContext) || {});
|
|
24
|
+
notify("ui/notifications/initialized", {});
|
|
25
|
+
})
|
|
26
|
+
.catch(function (err) { fatal(COPY.noConnection + errText(err)); });
|
|
27
|
+
}
|
|
28
|
+
`;
|
|
29
|
+
/**
|
|
30
|
+
* The script for one target. The fragments are the same for both; the target is a constant they read (`TARGET`), and
|
|
31
|
+
* only the places the two servers differ branch on it: what the agent is told, how a running op reads, which Convert
|
|
32
|
+
* outputs exist and what the edit carries.
|
|
33
|
+
*/
|
|
34
|
+
export const buildSlateUiScript = (target) => [
|
|
35
|
+
'"use strict";',
|
|
36
|
+
'(function () {',
|
|
37
|
+
SLATE_UI_BRIDGE
|
|
38
|
+
.replace('__TOOLS__', () => JSON.stringify(SLATE_UI_TOOLS))
|
|
39
|
+
.replace('__COPY__', () => JSON.stringify(SLATE_UI_COPY))
|
|
40
|
+
.replace('__TARGET__', () => JSON.stringify(target))
|
|
41
|
+
.replace('__CONVERT__', () => JSON.stringify({ choices: target === 'remote' ? SLATE_REMOTE_CONVERT_CHOICES : SLATE_CONVERT_CHOICES, maxWidth: SLATE_CONVERT_MAX_WIDTH })),
|
|
42
|
+
SLATE_UI_STATE,
|
|
43
|
+
SLATE_UI_PROGRESS,
|
|
44
|
+
SLATE_UI_INLINE,
|
|
45
|
+
SLATE_UI_SELECT,
|
|
46
|
+
SLATE_UI_INSPIRATION,
|
|
47
|
+
SLATE_UI_STAGE,
|
|
48
|
+
SLATE_UI_DIALOG,
|
|
49
|
+
SLATE_UI_MORE.replace('__MORE__', () => JSON.stringify(SLATE_MORE_COUNTS)),
|
|
50
|
+
SLATE_UI_THUMBTOOLS,
|
|
51
|
+
SLATE_UI_SCRIBBLE,
|
|
52
|
+
SLATE_UI_REMOTE,
|
|
53
|
+
SLATE_UI_BROWSER,
|
|
54
|
+
HANDSHAKE,
|
|
55
|
+
'})();',
|
|
56
|
+
].join('\n');
|
|
57
|
+
export const SLATE_UI_SCRIPT = buildSlateUiScript('local');
|
|
58
|
+
//# sourceMappingURL=mcp-slate-ui-script.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui-script.js","sourceRoot":"","sources":["../src/mcp-slate-ui-script.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACxJ,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAwB1E,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;CAY3B,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAqB,EAAU,EAAE,CAAC;IACnE,eAAe;IACf,gBAAgB;IAChB,eAAe;SACZ,OAAO,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;SAC1D,OAAO,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;SACxD,OAAO,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;SACnD,OAAO,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,qBAAqB,EAAE,QAAQ,EAAE,uBAAuB,EAAE,CAAC,CAAC;IAC3K,cAAc;IACd,iBAAiB;IACjB,eAAe;IACf,eAAe;IACf,oBAAoB;IACpB,cAAc;IACd,eAAe;IACf,aAAa,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC1E,mBAAmB;IACnB,iBAAiB;IACjB,eAAe;IACf,gBAAgB;IAChB,SAAS;IACT,OAAO;CACR,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,MAAM,CAAC,MAAM,eAAe,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The dialogs (Design, Edit, Branch, Convert), the scribble layer of Edit and
|
|
3
|
+
* the Inspiration tab. A dialog is a centred box over a dimmed workspace; it
|
|
4
|
+
* scrolls inside itself when the window is short, and fills the width on a
|
|
5
|
+
* phone.
|
|
6
|
+
*/
|
|
7
|
+
export declare const SLATE_UI_DIALOG_STYLES: string;
|
|
8
|
+
/**
|
|
9
|
+
* The Generate more tile and its panel. The tile is deliberately quiet: a
|
|
10
|
+
* hairline dashed border, a muted plus, no fill, no words; it takes the size
|
|
11
|
+
* of the thumbnails around it (56 px in the card's strip, 72 px in the
|
|
12
|
+
* selection). The panel is one bordered block under the thumbnails. In the
|
|
13
|
+
* card, the script shortens the large image by the panel's height while it is
|
|
14
|
+
* open (an inline --cap), or folds it when too little would be left.
|
|
15
|
+
*/
|
|
16
|
+
export declare const SLATE_UI_MORE_STYLES: string;
|
|
17
|
+
//# sourceMappingURL=mcp-slate-ui-styles-dialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui-styles-dialog.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-styles-dialog.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,QAgClC,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,QAwBhC,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The dialogs (Design, Edit, Branch, Convert), the scribble layer of Edit and
|
|
3
|
+
* the Inspiration tab. A dialog is a centred box over a dimmed workspace; it
|
|
4
|
+
* scrolls inside itself when the window is short, and fills the width on a
|
|
5
|
+
* phone.
|
|
6
|
+
*/
|
|
7
|
+
export const SLATE_UI_DIALOG_STYLES = String.raw `
|
|
8
|
+
.modal { position: fixed; inset: 0; z-index: 20; display: grid; place-items: center; padding: 16px; background: rgba(0, 0, 0, .45); overflow: auto; }
|
|
9
|
+
.modalbox { display: flex; flex-direction: column; gap: 12px; width: min(520px, 100%); max-height: calc(100vh - 32px); min-width: 0; padding: 16px; overflow: auto; border: 1px solid var(--border); border-radius: calc(var(--radius) + 4px); background: var(--bg); color: var(--text); }
|
|
10
|
+
.modalbox.wide { width: min(880px, 100%); }
|
|
11
|
+
.modalbox h2 { margin: 0; font-size: 15px; }
|
|
12
|
+
.modalbox textarea { width: 100%; min-width: 0; padding: 8px 10px; font: inherit; color: var(--text); background: var(--bg); border: 1px solid var(--border); border-radius: var(--radius); resize: vertical; }
|
|
13
|
+
.modalbox textarea:focus-visible { outline: 2px solid var(--ring); outline-offset: 1px; }
|
|
14
|
+
.radios { display: flex; flex-wrap: wrap; gap: 6px 14px; }
|
|
15
|
+
.radio { display: inline-flex; align-items: center; gap: 6px; }
|
|
16
|
+
.refline { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; font-size: 12px; color: var(--text2); }
|
|
17
|
+
.refthumbs { display: flex; flex-wrap: wrap; gap: 4px; }
|
|
18
|
+
.refmini { display: block; width: 36px; height: 36px; border-radius: 4px; background: var(--bg3); object-fit: cover; object-position: top; }
|
|
19
|
+
.alert { margin: 0; color: var(--danger); font-size: 12px; overflow-wrap: anywhere; }
|
|
20
|
+
.dialogbtns, .dialogtools { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
|
|
21
|
+
.dialogbtns button, .dialogtools button { padding: 8px 12px; }
|
|
22
|
+
/* The image of Edit, sized to the picture itself (a height cap of 60 percent of the window), so the scribble layer over it is exactly over the picture. */
|
|
23
|
+
.imgwrap { position: relative; width: min(100%, calc(60vh * var(--ar, 1.5))); aspect-ratio: var(--ar, 1.5); margin: 0 auto; min-width: 0; border-radius: var(--radius); background: var(--bg3); overflow: hidden; touch-action: none; }
|
|
24
|
+
.stageimg { display: block; width: 100%; height: 100%; object-fit: fill; user-select: none; -webkit-user-drag: none; }
|
|
25
|
+
.scribble { position: absolute; inset: 0; width: 100%; height: 100%; cursor: crosshair; touch-action: none; }
|
|
26
|
+
.searchrow { display: flex; gap: 8px; min-width: 0; }
|
|
27
|
+
.searchrow .query { flex: 1 1 0; min-width: 0; }
|
|
28
|
+
.insp.card { --refsize: 96px; }
|
|
29
|
+
.insp.stage { --refsize: 128px; }
|
|
30
|
+
.results { display: flex; flex-direction: column; gap: 16px; margin-top: 12px; }
|
|
31
|
+
.refhead { margin: 0 0 6px; font-size: 13px; font-weight: 600; }
|
|
32
|
+
.refgrid { display: grid; grid-template-columns: repeat(auto-fill, var(--refsize)); gap: 8px; }
|
|
33
|
+
.refbtn { width: var(--refsize); height: var(--refsize); }
|
|
34
|
+
.refbtn .thumb { object-position: center; }
|
|
35
|
+
.refbtn[aria-pressed="true"] { box-shadow: 0 0 0 2px var(--text); }
|
|
36
|
+
.check { position: absolute; top: 6px; right: 6px; display: none; place-items: center; width: 20px; height: 20px; border-radius: 50%; background: var(--inverse); color: var(--inverse-text); }
|
|
37
|
+
.refbtn[aria-pressed="true"] .check { display: grid; }
|
|
38
|
+
.placeholder { display: grid; place-items: center; min-height: 160px; border: 1px dashed var(--border); border-radius: var(--radius); color: var(--text2); padding: 16px; text-align: center; }
|
|
39
|
+
`;
|
|
40
|
+
/**
|
|
41
|
+
* The Generate more tile and its panel. The tile is deliberately quiet: a
|
|
42
|
+
* hairline dashed border, a muted plus, no fill, no words; it takes the size
|
|
43
|
+
* of the thumbnails around it (56 px in the card's strip, 72 px in the
|
|
44
|
+
* selection). The panel is one bordered block under the thumbnails. In the
|
|
45
|
+
* card, the script shortens the large image by the panel's height while it is
|
|
46
|
+
* open (an inline --cap), or folds it when too little would be left.
|
|
47
|
+
*/
|
|
48
|
+
export const SLATE_UI_MORE_STYLES = String.raw `
|
|
49
|
+
button.moretile { display: grid; place-items: center; flex: none; padding: 0; border: 1px dashed var(--border); border-radius: 6px; background: none; color: var(--text2); opacity: .75; }
|
|
50
|
+
button.moretile:hover:not(:disabled), button.moretile[aria-expanded="true"] { opacity: 1; border-color: var(--text2); }
|
|
51
|
+
button.moretile:disabled { opacity: .35; }
|
|
52
|
+
.strip .moretile { width: 56px; height: 56px; }
|
|
53
|
+
.rail .moretile { width: 72px; height: 72px; }
|
|
54
|
+
.morepanel { display: flex; flex-direction: column; gap: 10px; min-width: 0; padding: 12px; border: 1px solid var(--border); border-radius: var(--radius); }
|
|
55
|
+
#more:not(:empty) { padding-top: 10px; }
|
|
56
|
+
#card .hero.folded { display: none; }
|
|
57
|
+
.morehead { margin: 0; font-size: 13px; font-weight: 600; }
|
|
58
|
+
.moreheadrow { display: flex; align-items: center; gap: 8px; min-width: 0; }
|
|
59
|
+
.morethumb { display: block; flex: none; width: 28px; height: 28px; border-radius: 4px; background: var(--bg3); object-fit: cover; object-position: top; }
|
|
60
|
+
.morepanel textarea { width: 100%; min-width: 0; padding: 8px 10px; font: inherit; color: var(--text); background: var(--bg); border: 1px solid var(--border); border-radius: var(--radius); resize: vertical; }
|
|
61
|
+
.morepanel textarea:focus-visible { outline: 2px solid var(--ring); outline-offset: 1px; }
|
|
62
|
+
.morerow { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; min-width: 0; }
|
|
63
|
+
.morebtns { display: flex; gap: 8px; margin-left: auto; }
|
|
64
|
+
.morerow button { padding: 8px 10px; }
|
|
65
|
+
.seg { display: inline-flex; flex: none; border: 1px solid var(--border); border-radius: var(--radius); overflow: hidden; }
|
|
66
|
+
.segopt { position: relative; display: block; }
|
|
67
|
+
.segopt input { position: absolute; inset: 0; width: 100%; height: 100%; margin: 0; opacity: 0; cursor: pointer; }
|
|
68
|
+
.segopt span { display: block; min-width: 30px; padding: 7px 8px; text-align: center; font-weight: 600; }
|
|
69
|
+
.segopt input:checked + span { background: var(--inverse); color: var(--inverse-text); }
|
|
70
|
+
.segopt input:focus-visible + span { outline: 2px solid var(--ring); outline-offset: -2px; }
|
|
71
|
+
.morepanel .alert { margin: 0; }
|
|
72
|
+
`;
|
|
73
|
+
//# sourceMappingURL=mcp-slate-ui-styles-dialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui-styles-dialog.js","sourceRoot":"","sources":["../src/mcp-slate-ui-styles-dialog.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgC/C,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;CAwB7C,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The fullscreen workspace: the selection on the left (220 px), one large
|
|
3
|
+
* image with its band and action row in the middle. The Generate more tile
|
|
4
|
+
* ends the selection and its panel opens under it. Fluid at any width
|
|
5
|
+
* (`min-width: 0` on every grid and flex parent). From 640px the selection
|
|
6
|
+
* stays on the left, 176 px wide until 900px so the image keeps its room in
|
|
7
|
+
* the desktop app's default 708 px tab. Below 640px the selection becomes one
|
|
8
|
+
* horizontal row above the image, scrolling inside itself, with each option's
|
|
9
|
+
* version chips under its thumbnail.
|
|
10
|
+
*/
|
|
11
|
+
export declare const SLATE_UI_STAGE_STYLES: string;
|
|
12
|
+
//# sourceMappingURL=mcp-slate-ui-styles-stage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui-styles-stage.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-styles-stage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,QAyCjC,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The fullscreen workspace: the selection on the left (220 px), one large
|
|
3
|
+
* image with its band and action row in the middle. The Generate more tile
|
|
4
|
+
* ends the selection and its panel opens under it. Fluid at any width
|
|
5
|
+
* (`min-width: 0` on every grid and flex parent). From 640px the selection
|
|
6
|
+
* stays on the left, 176 px wide until 900px so the image keeps its room in
|
|
7
|
+
* the desktop app's default 708 px tab. Below 640px the selection becomes one
|
|
8
|
+
* horizontal row above the image, scrolling inside itself, with each option's
|
|
9
|
+
* version chips under its thumbnail.
|
|
10
|
+
*/
|
|
11
|
+
export const SLATE_UI_STAGE_STYLES = String.raw `
|
|
12
|
+
#stage { min-width: 0; max-width: 1800px; margin: 0 auto; display: flex; flex-direction: column; gap: 12px; }
|
|
13
|
+
#stage.hidden { display: none !important; }
|
|
14
|
+
.stagehead { display: flex; align-items: center; gap: 12px; min-width: 0; }
|
|
15
|
+
.stagebody { display: grid; grid-template-columns: 220px minmax(0, 1fr); gap: 16px; min-width: 0; align-items: start; }
|
|
16
|
+
.selection { min-width: 0; display: flex; flex-direction: column; gap: 10px; max-height: calc(100vh - 96px); }
|
|
17
|
+
.rail { flex: 1 1 auto; min-height: 0; min-width: 0; display: flex; flex-direction: column; gap: 14px; overflow: auto; padding: 4px; }
|
|
18
|
+
.morehost:empty { display: none; }
|
|
19
|
+
.moreslot { position: sticky; bottom: 0; padding: 4px 0; background: var(--bg); }
|
|
20
|
+
.round { min-width: 0; }
|
|
21
|
+
.roundhead { font-size: 13px; font-weight: 600; margin: 0 0 6px; }
|
|
22
|
+
.options { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, 72px); gap: 10px 8px; }
|
|
23
|
+
.option { min-width: 0; width: 72px; }
|
|
24
|
+
.opt { display: block; width: 72px; height: 72px; }
|
|
25
|
+
.chips { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 4px; }
|
|
26
|
+
.chip { padding: 1px 7px; font-size: 11px; font-weight: 500; }
|
|
27
|
+
.chip.selected { background: var(--inverse); color: var(--inverse-text); border-color: var(--inverse); }
|
|
28
|
+
.main { min-width: 0; display: flex; flex-direction: column; gap: 10px; }
|
|
29
|
+
#stage .hero { --cap: max(240px, calc(100vh - 230px)); }
|
|
30
|
+
.band { display: flex; align-items: center; gap: 12px; min-height: 28px; min-width: 0; font-size: 13px; color: var(--text2); }
|
|
31
|
+
.bandtext { min-width: 0; overflow-wrap: anywhere; }
|
|
32
|
+
.textbtn { flex: none; padding: 2px 6px; border: 0; background: none; font-weight: 600; text-decoration: underline; }
|
|
33
|
+
.actionrow { display: flex; flex-wrap: wrap; gap: 8px; min-width: 0; }
|
|
34
|
+
.actionrow button { flex: none; }
|
|
35
|
+
.inspiration { min-width: 0; max-width: 960px; width: 100%; margin: 0 auto; }
|
|
36
|
+
@media (max-width: 480px) {
|
|
37
|
+
.actionrow { gap: 6px; }
|
|
38
|
+
.actionrow button { flex: 1 1 auto; padding: 8px 9px; }
|
|
39
|
+
}
|
|
40
|
+
@media (max-width: 899px) {
|
|
41
|
+
.stagebody { grid-template-columns: 176px minmax(0, 1fr); gap: 12px; }
|
|
42
|
+
}
|
|
43
|
+
@media (max-width: 639px) {
|
|
44
|
+
.stagebody { grid-template-columns: minmax(0, 1fr); }
|
|
45
|
+
.selection { max-height: none; }
|
|
46
|
+
.rail { flex: none; flex-direction: row; gap: 14px; overflow-x: auto; overflow-y: hidden; padding: 4px 4px 8px; }
|
|
47
|
+
.moreslot { position: static; flex: none; align-self: flex-start; padding: 0; background: none; }
|
|
48
|
+
.round { flex: none; }
|
|
49
|
+
.options { display: flex; }
|
|
50
|
+
#stage .hero { --cap: 60vh; }
|
|
51
|
+
}
|
|
52
|
+
`;
|
|
53
|
+
//# sourceMappingURL=mcp-slate-ui-styles-stage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui-styles-stage.js","sourceRoot":"","sources":["../src/mcp-slate-ui-styles-stage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyC9C,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The two controls on a design thumbnail (a plus and a pencil), and the cell
|
|
3
|
+
* that holds them beside the thumbnail button. They sit in the top right corner
|
|
4
|
+
* on a semi-opaque dark backdrop, so they stay legible over any picture, and
|
|
5
|
+
* are shown only on hover or while keyboard focus is inside the cell. A device
|
|
6
|
+
* with no hover shows them on the selected thumbnail only. A hidden control is
|
|
7
|
+
* not clickable but stays focusable, and focus reveals it.
|
|
8
|
+
*/
|
|
9
|
+
export declare const SLATE_UI_THUMBTOOLS_STYLES: string;
|
|
10
|
+
//# sourceMappingURL=mcp-slate-ui-styles-thumbtools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui-styles-thumbtools.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-styles-thumbtools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,QAetC,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The two controls on a design thumbnail (a plus and a pencil), and the cell
|
|
3
|
+
* that holds them beside the thumbnail button. They sit in the top right corner
|
|
4
|
+
* on a semi-opaque dark backdrop, so they stay legible over any picture, and
|
|
5
|
+
* are shown only on hover or while keyboard focus is inside the cell. A device
|
|
6
|
+
* with no hover shows them on the selected thumbnail only. A hidden control is
|
|
7
|
+
* not clickable but stays focusable, and focus reveals it.
|
|
8
|
+
*/
|
|
9
|
+
export const SLATE_UI_THUMBTOOLS_STYLES = String.raw `
|
|
10
|
+
.thumbcell { position: relative; flex: none; display: block; }
|
|
11
|
+
.strip .thumbcell { width: 56px; height: 56px; }
|
|
12
|
+
.option .thumbcell { width: 72px; height: 72px; }
|
|
13
|
+
.thumbtools { position: absolute; top: 3px; right: 3px; display: flex; gap: 2px; opacity: 0; pointer-events: none; transition: opacity .12s; }
|
|
14
|
+
.thumbcell:hover .thumbtools, .thumbcell:focus-within .thumbtools { opacity: 1; pointer-events: auto; }
|
|
15
|
+
button.thumbtool { display: grid; place-items: center; flex: none; width: 22px; height: 22px; padding: 0; border: 0; border-radius: 5px; background: rgba(20, 20, 20, .62); color: #fff; }
|
|
16
|
+
button.thumbtool:hover:not(:disabled) { background: rgba(20, 20, 20, .85); }
|
|
17
|
+
button.thumbtool:focus-visible { outline: 2px solid var(--ring); outline-offset: 0; }
|
|
18
|
+
button.thumbtool:disabled { opacity: .5; }
|
|
19
|
+
@media (hover: none) {
|
|
20
|
+
.thumbtools { display: none; }
|
|
21
|
+
.thumbcell.selected .thumbtools { display: flex; opacity: 1; pointer-events: auto; }
|
|
22
|
+
}
|
|
23
|
+
@media (prefers-reduced-motion: reduce) { .thumbtools { transition: none; } }
|
|
24
|
+
`;
|
|
25
|
+
//# sourceMappingURL=mcp-slate-ui-styles-thumbtools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui-styles-thumbtools.js","sourceRoot":"","sources":["../src/mcp-slate-ui-styles-thumbtools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;CAenD,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The workspace view's stylesheet: base and inline card (the fullscreen stage
|
|
3
|
+
* is in mcp-slate-ui-styles-stage.ts, the dialogs in
|
|
4
|
+
* mcp-slate-ui-styles-dialog.ts). Host variables win; the fallbacks keep the
|
|
5
|
+
* view usable when a host passes none. System fonts only, no external
|
|
6
|
+
* requests.
|
|
7
|
+
*
|
|
8
|
+
* The layout is fluid by construction: the view never asks the host for a
|
|
9
|
+
* width. Every flex/grid parent sets `min-width: 0` so no child can push the
|
|
10
|
+
* frame wider than its pane, and the strip of thumbnails scrolls inside itself.
|
|
11
|
+
*/
|
|
12
|
+
export declare const SLATE_UI_STYLES: string;
|
|
13
|
+
//# sourceMappingURL=mcp-slate-ui-styles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui-styles.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,eAAe,QAwG3B,CAAC"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The workspace view's stylesheet: base and inline card (the fullscreen stage
|
|
3
|
+
* is in mcp-slate-ui-styles-stage.ts, the dialogs in
|
|
4
|
+
* mcp-slate-ui-styles-dialog.ts). Host variables win; the fallbacks keep the
|
|
5
|
+
* view usable when a host passes none. System fonts only, no external
|
|
6
|
+
* requests.
|
|
7
|
+
*
|
|
8
|
+
* The layout is fluid by construction: the view never asks the host for a
|
|
9
|
+
* width. Every flex/grid parent sets `min-width: 0` so no child can push the
|
|
10
|
+
* frame wider than its pane, and the strip of thumbnails scrolls inside itself.
|
|
11
|
+
*/
|
|
12
|
+
export const SLATE_UI_STYLES = String.raw `
|
|
13
|
+
/* Host variables win; these fallbacks keep the view usable when a host passes none. System fonts only. */
|
|
14
|
+
:root {
|
|
15
|
+
color-scheme: light dark;
|
|
16
|
+
--f-bg: light-dark(#ffffff, #1c1c1c);
|
|
17
|
+
--f-bg2: light-dark(#f4f4f2, #2a2a2a);
|
|
18
|
+
--f-bg3: light-dark(#e8e8e4, #3a3a3a);
|
|
19
|
+
--f-text: light-dark(#1a1a1a, #f2f2f2);
|
|
20
|
+
--f-text2: light-dark(#5f5f5b, #a8a8a3);
|
|
21
|
+
--f-border: light-dark(#d9d9d3, #444440);
|
|
22
|
+
--f-inverse: light-dark(#1a1a1a, #f2f2f2);
|
|
23
|
+
--f-inverse-text: light-dark(#ffffff, #1a1a1a);
|
|
24
|
+
--f-ring: light-dark(#2f6fed, #7aa2ff);
|
|
25
|
+
--f-danger: light-dark(#b3261e, #ff8a80);
|
|
26
|
+
--f-ok: light-dark(#1d6b3a, #6fd08c);
|
|
27
|
+
--bg: var(--color-background-primary, var(--f-bg));
|
|
28
|
+
--bg2: var(--color-background-secondary, var(--f-bg2));
|
|
29
|
+
--bg3: var(--color-background-tertiary, var(--f-bg3));
|
|
30
|
+
--text: var(--color-text-primary, var(--f-text));
|
|
31
|
+
--text2: var(--color-text-secondary, var(--f-text2));
|
|
32
|
+
--border: var(--color-border-primary, var(--f-border));
|
|
33
|
+
--inverse: var(--color-background-inverse, var(--f-inverse));
|
|
34
|
+
--inverse-text: var(--color-text-inverse, var(--f-inverse-text));
|
|
35
|
+
--ring: var(--color-ring-primary, var(--f-ring));
|
|
36
|
+
--danger: var(--color-text-danger, var(--f-danger));
|
|
37
|
+
--ok: var(--color-text-success, var(--f-ok));
|
|
38
|
+
--radius: var(--border-radius-md, 8px);
|
|
39
|
+
--font: var(--font-sans, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif);
|
|
40
|
+
}
|
|
41
|
+
:root[data-theme="light"] { color-scheme: light; }
|
|
42
|
+
:root[data-theme="dark"] { color-scheme: dark; }
|
|
43
|
+
* { box-sizing: border-box; }
|
|
44
|
+
html, body { margin: 0; }
|
|
45
|
+
/* Fluid by construction: the app never asks the host for a width. The layout width is whatever the host gives
|
|
46
|
+
the view (fixed width or flexible maxWidth alike), so a host can never grow the frame past its pane. */
|
|
47
|
+
body {
|
|
48
|
+
background: var(--bg);
|
|
49
|
+
color: var(--text);
|
|
50
|
+
font: 14px/1.45 var(--font);
|
|
51
|
+
padding: 16px;
|
|
52
|
+
min-width: 0;
|
|
53
|
+
}
|
|
54
|
+
main { max-width: 960px; margin: 0 auto; min-width: 0; container-type: inline-size; }
|
|
55
|
+
.sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
|
|
56
|
+
h1 { font-size: 15px; font-weight: 600; margin: 0; }
|
|
57
|
+
.meta { color: var(--text2); font-size: 12px; }
|
|
58
|
+
.topbar { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 10px; min-width: 0; }
|
|
59
|
+
.tabs { display: flex; gap: 4px; min-width: 0; }
|
|
60
|
+
.tab { padding: 6px 12px; border-radius: 999px; border-color: transparent; background: transparent; color: var(--text2); font-weight: 500; }
|
|
61
|
+
.tab[aria-selected="true"] { background: var(--bg2); color: var(--text); border-color: var(--border); }
|
|
62
|
+
.iconbtn { display: inline-grid; place-items: center; flex: none; width: 34px; height: 34px; padding: 0; }
|
|
63
|
+
/* The large image. Its box has the image's own aspect ratio and a capped height, so the card never jumps when the
|
|
64
|
+
picture lands and the badge and hairline sit on the picture itself. The card caps the height at 60 percent of
|
|
65
|
+
its own width (a container unit, so the frame's height never feeds back into it); the workspace uses the window. */
|
|
66
|
+
.hero { position: relative; width: min(100%, calc(var(--cap, 60cqw) * var(--ar, 1.5))); aspect-ratio: var(--ar, 1.5); margin: 0 auto; min-width: 0; border-radius: var(--radius); background: var(--bg3); overflow: hidden; }
|
|
67
|
+
#card .hero { --cap: 60cqw; }
|
|
68
|
+
.hero.note { width: 100%; aspect-ratio: auto; background: var(--bg2); }
|
|
69
|
+
.heroimg { display: block; width: 100%; height: 100%; object-fit: fill; user-select: none; -webkit-user-drag: none; }
|
|
70
|
+
.heroimg.empty { background: var(--bg3); }
|
|
71
|
+
.heronote { padding: 32px 16px; color: var(--text2); text-align: center; overflow-wrap: anywhere; }
|
|
72
|
+
.hero .badge, .thumbbtn .code, .opt .code { position: absolute; left: 8px; bottom: 8px; padding: 0 8px; border-radius: 999px; background: var(--inverse); color: var(--inverse-text); font-size: 12px; font-weight: 600; line-height: 20px; }
|
|
73
|
+
.hero .hair { position: absolute; left: 0; right: 0; bottom: 0; }
|
|
74
|
+
.pickrow { display: flex; align-items: center; gap: 12px; margin-top: 10px; min-width: 0; }
|
|
75
|
+
.pickrow > button { flex: none; }
|
|
76
|
+
/* One row of small thumbnails; more than fit scroll sideways inside the strip, never the page, with a fade at the edge. */
|
|
77
|
+
.strip { flex: 1 1 0; display: flex; gap: 8px; min-width: 0; margin: 0; padding: 4px; overflow-x: auto; }
|
|
78
|
+
.strip.fade { -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 28px), transparent); mask-image: linear-gradient(to right, #000 calc(100% - 28px), transparent); }
|
|
79
|
+
.thumbbtn, .opt, .refbtn { position: relative; padding: 0; border: 0; border-radius: 6px; background: var(--bg2); overflow: hidden; }
|
|
80
|
+
.thumbbtn { flex: none; width: 56px; height: 56px; }
|
|
81
|
+
.thumb { display: block; width: 100%; height: 100%; background: var(--bg3); object-fit: cover; object-position: top; }
|
|
82
|
+
.thumbbtn .code, .opt .code { left: 3px; bottom: 3px; padding: 0 5px; font-size: 10px; line-height: 14px; }
|
|
83
|
+
.thumbbtn.selected, .opt.selected { box-shadow: 0 0 0 2px var(--text); }
|
|
84
|
+
.thumbbtn.failed, .opt.failed { opacity: .5; }
|
|
85
|
+
.shimmer { background: linear-gradient(100deg, var(--bg2) 30%, var(--bg3) 50%, var(--bg2) 70%); background-size: 200% 100%; animation: shimmer 1.4s linear infinite; }
|
|
86
|
+
@keyframes shimmer { from { background-position: 100% 0; } to { background-position: -100% 0; } }
|
|
87
|
+
.field { margin-top: 0; }
|
|
88
|
+
label.lbl, span.lbl { display: block; font-size: 12px; color: var(--text2); margin-bottom: 4px; }
|
|
89
|
+
input[type="text"], input[type="number"], select {
|
|
90
|
+
width: 100%; padding: 8px 10px; font: inherit; color: var(--text); background: var(--bg);
|
|
91
|
+
border: 1px solid var(--border); border-radius: var(--radius);
|
|
92
|
+
}
|
|
93
|
+
input[type="text"]:focus-visible, input[type="number"]:focus-visible, select:focus-visible { outline: 2px solid var(--ring); outline-offset: 1px; }
|
|
94
|
+
.spacer { flex: 1 1 0; min-width: 0; }
|
|
95
|
+
button {
|
|
96
|
+
font: inherit; font-weight: 600; padding: 8px 16px; border-radius: var(--radius);
|
|
97
|
+
border: 1px solid var(--border); background: var(--bg2); color: var(--text); cursor: pointer;
|
|
98
|
+
}
|
|
99
|
+
button.thumbbtn, button.opt, button.refbtn { padding: 0; border: 0; }
|
|
100
|
+
button.primary { background: var(--inverse); color: var(--inverse-text); border-color: var(--inverse); }
|
|
101
|
+
button:focus-visible { outline: 2px solid var(--ring); outline-offset: 2px; }
|
|
102
|
+
button:disabled { opacity: .45; cursor: default; }
|
|
103
|
+
.note { margin: 10px 0 0; font-size: 12px; color: var(--text2); }
|
|
104
|
+
.hair { display: block; height: 2px; background: var(--bg3); overflow: hidden; position: relative; min-width: 0; }
|
|
105
|
+
.hair.indeterminate::after { content: ""; position: absolute; inset: 0 auto 0 -30%; width: 30%; background: var(--text); animation: slide 1.4s ease-in-out infinite; }
|
|
106
|
+
@keyframes slide { from { left: -30%; } to { left: 100%; } }
|
|
107
|
+
@media (prefers-reduced-motion: reduce) {
|
|
108
|
+
.hair.indeterminate::after { animation: none; width: 100%; left: 0; opacity: .3; }
|
|
109
|
+
.shimmer { animation: none; }
|
|
110
|
+
}
|
|
111
|
+
.status { min-height: 18px; margin: 8px 0 0; font-size: 12px; overflow-wrap: anywhere; }
|
|
112
|
+
.status.ok { color: var(--ok); }
|
|
113
|
+
.status.err, .err { color: var(--danger); }
|
|
114
|
+
#fatal { padding: 16px; color: var(--danger); }
|
|
115
|
+
.hidden { display: none !important; }
|
|
116
|
+
`;
|
|
117
|
+
//# sourceMappingURL=mcp-slate-ui-styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui-styles.js","sourceRoot":"","sources":["../src/mcp-slate-ui-styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwGxC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type SlateUiTarget } from './mcp-slate-ui-script.js';
|
|
2
|
+
/**
|
|
3
|
+
* The workspace view for one target, as one self-contained HTML document: no external script,
|
|
4
|
+
* stylesheet, font, or URL, so it renders under the strictest host sandbox.
|
|
5
|
+
*
|
|
6
|
+
* The static markup is the inline card and nothing else: the tabs, one large
|
|
7
|
+
* image, one row with the strip of options and Select, one status line, and an
|
|
8
|
+
* icon-only control that opens the workspace. The fullscreen stage and its dialogs are built by the
|
|
9
|
+
* script into `#stage` only when the host puts the view in fullscreen.
|
|
10
|
+
*/
|
|
11
|
+
export declare const buildSlateUiHtml: ({ target }: {
|
|
12
|
+
target: SlateUiTarget;
|
|
13
|
+
}) => string;
|
|
14
|
+
/** The local plugin's screen: what `12ui mcp` serves. */
|
|
15
|
+
export declare const SLATE_UI_HTML: string;
|
|
16
|
+
//# sourceMappingURL=mcp-slate-ui.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAMlF;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,GAAI,YAAY;IAAE,MAAM,EAAE,aAAa,CAAA;CAAE,KAAG,MAuCxE,CAAC;AAEF,yDAAyD;AACzD,eAAO,MAAM,aAAa,QAAwC,CAAC"}
|