@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 @@
|
|
|
1
|
+
{"version":3,"file":"numbers.d.ts","sourceRoot":"","sources":["../../src/scene/numbers.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,OAAO,EAAE,MAAM;CAI5B;AAED,gFAAgF;AAChF,eAAO,MAAM,OAAO,GAAI,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAG,MAGvD,CAAC;AAEF,wDAAwD;AACxD,eAAO,MAAM,KAAK,GAAI,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAG,MAA+B,CAAC;AAEtF,sFAAsF;AACtF,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,EAAE,MAAM,MAAM,KAAG,MAAM,EAOlF,CAAC;AAEF,4FAA4F;AAC5F,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAGpF,CAAC;AAEF,2DAA2D;AAC3D,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,KAAG,MAAM,EAAgE,CAAC;AAEhH,wCAAwC;AACxC,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,KAAG,CAAC,MAAM,EAAE,MAAM,CAMrE,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/** A malformed scene argument: a refusal, raised before any work starts. */
|
|
2
|
+
export class SceneArgumentError extends Error {
|
|
3
|
+
constructor(message) {
|
|
4
|
+
super(message);
|
|
5
|
+
this.name = 'SceneArgumentError';
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
/** Round to `digits` decimals for JSON output (the Python helpers' `round`). */
|
|
9
|
+
export const roundTo = (value, digits) => {
|
|
10
|
+
const rounded = Number(value.toFixed(digits));
|
|
11
|
+
return Object.is(rounded, -0) ? 0 : rounded;
|
|
12
|
+
};
|
|
13
|
+
/** Fixed-point text, like Python's `f"{value:.Nf}"`. */
|
|
14
|
+
export const fixed = (value, digits) => value.toFixed(digits);
|
|
15
|
+
/** Parses "a,b" or "a,b,c" into numbers, naming the argument when it is malformed. */
|
|
16
|
+
export const parseNumberTuple = (text, count, what) => {
|
|
17
|
+
const parts = text.split(',').map((part) => part.trim());
|
|
18
|
+
const values = parts.map(Number);
|
|
19
|
+
if (parts.length !== count || parts.some((part) => part === '') || values.some((value) => !Number.isFinite(value))) {
|
|
20
|
+
throw new SceneArgumentError(`${what} must be ${count} comma-separated numbers, got "${text}"`);
|
|
21
|
+
}
|
|
22
|
+
return values;
|
|
23
|
+
};
|
|
24
|
+
/** Parses a box "x0,y0,x1,y1" into integers (fractions truncate, as Python's int() did). */
|
|
25
|
+
export const parseBox = (text, what) => {
|
|
26
|
+
const [x0, y0, x1, y1] = parseNumberTuple(text, 4, what).map(Math.trunc);
|
|
27
|
+
return [x0, y0, x1, y1];
|
|
28
|
+
};
|
|
29
|
+
/** Splits a `;`-separated list, dropping empty entries. */
|
|
30
|
+
export const splitList = (text) => text.split(';').map((part) => part.trim()).filter(Boolean);
|
|
31
|
+
/** "WxH" into two positive integers. */
|
|
32
|
+
export const parseSize = (text, what) => {
|
|
33
|
+
const match = /^(\d+)x(\d+)$/u.exec(text.trim());
|
|
34
|
+
if (!match || Number(match[1]) < 1 || Number(match[2]) < 1) {
|
|
35
|
+
throw new SceneArgumentError(`${what} must be <width>x<height> in pixels, got "${text}"`);
|
|
36
|
+
}
|
|
37
|
+
return [Number(match[1]), Number(match[2])];
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=numbers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"numbers.js","sourceRoot":"","sources":["../../src/scene/numbers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { type Camera, type ImageSize, type Vec3 } from './camera-model.js';
|
|
2
|
+
/**
|
|
3
|
+
* Placing objects through a solved camera: pixel rays onto a plane, world
|
|
4
|
+
* points back to pixels, and the pose of a rectangle from its four corners.
|
|
5
|
+
* Ports of `solve_camera.py ray|project|rect`, with the sized rectangle fixed:
|
|
6
|
+
* the Python helper crashed whenever both sides were known.
|
|
7
|
+
*/
|
|
8
|
+
export type RayLine = {
|
|
9
|
+
u: number;
|
|
10
|
+
v: number;
|
|
11
|
+
point: Vec3;
|
|
12
|
+
behind: boolean;
|
|
13
|
+
};
|
|
14
|
+
export declare const castRays: (camera: Camera, size: ImageSize, pixels: ReadonlyArray<[number, number]>, planeY: number) => RayLine[];
|
|
15
|
+
export declare const formatRayLine: (line: RayLine) => string;
|
|
16
|
+
export declare const formatProjectLine: (point: Vec3, u: number, v: number) => string;
|
|
17
|
+
export type RectPose = {
|
|
18
|
+
position: Vec3;
|
|
19
|
+
w: number;
|
|
20
|
+
h: number;
|
|
21
|
+
rotation: {
|
|
22
|
+
x: number;
|
|
23
|
+
y: number;
|
|
24
|
+
z: number;
|
|
25
|
+
order: 'YXZ';
|
|
26
|
+
};
|
|
27
|
+
rmsPx?: number;
|
|
28
|
+
note: string;
|
|
29
|
+
};
|
|
30
|
+
/** A rectangle lying flat on the plane y = planeY, any size. Corners TL;TR;BR;BL in pixels. */
|
|
31
|
+
export declare const rectOnPlane: (camera: Camera, size: ImageSize, corners: ReadonlyArray<[number, number]>, planeY: number) => {
|
|
32
|
+
pose: RectPose;
|
|
33
|
+
behind: boolean;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Free pose (position, lean, roll) of a rectangle whose width, height or both
|
|
37
|
+
* are known. With one side known the other is solved, less well determined.
|
|
38
|
+
*/
|
|
39
|
+
export declare const rectOfKnownSize: (camera: Camera, size: ImageSize, corners: ReadonlyArray<[number, number]>, known: {
|
|
40
|
+
width?: number;
|
|
41
|
+
height?: number;
|
|
42
|
+
}) => RectPose;
|
|
43
|
+
//# sourceMappingURL=placement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"placement.d.ts","sourceRoot":"","sources":["../../src/scene/placement.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,MAAM,EACX,KAAK,SAAS,EACd,KAAK,IAAI,EACV,MAAM,mBAAmB,CAAC;AAK3B;;;;;GAKG;AAEH,MAAM,MAAM,OAAO,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC;AAE7E,eAAO,MAAM,QAAQ,GACnB,QAAQ,MAAM,EACd,MAAM,SAAS,EACf,QAAQ,aAAa,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACvC,QAAQ,MAAM,KACb,OAAO,EAAiF,CAAC;AAE5F,eAAO,MAAM,aAAa,GAAI,MAAM,OAAO,KAAG,MAG7C,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,OAAO,IAAI,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,KAAG,MAErE,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,EAAE,IAAI,CAAC;IACf,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,QAAQ,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,CAAC;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAYF,+FAA+F;AAC/F,eAAO,MAAM,WAAW,GACtB,QAAQ,MAAM,EACd,MAAM,SAAS,EACf,SAAS,aAAa,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACxC,QAAQ,MAAM,KACb;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAoBnC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,GAC1B,QAAQ,MAAM,EACd,MAAM,SAAS,EACf,SAAS,aAAa,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACxC,OAAO;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,KACzC,QA+DF,CAAC"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { planeHit, pixelRay, projectPoints, rotationMatrix, } from './camera-model.js';
|
|
2
|
+
import { multistart } from './least-squares.js';
|
|
3
|
+
import { fixed, roundTo, SceneArgumentError } from './numbers.js';
|
|
4
|
+
import { seededRandom } from './seeded-random.js';
|
|
5
|
+
export const castRays = (camera, size, pixels, planeY) => pixels.map(([u, v]) => ({ u, v, ...planeHit(camera, size, u, v, planeY) }));
|
|
6
|
+
export const formatRayLine = (line) => (`${fixed(line.u, 0)},${fixed(line.v, 0)} -> x=${fixed(line.point[0], 4)}`
|
|
7
|
+
+ ` y=${fixed(line.point[1], 4)} z=${fixed(line.point[2], 4)}`);
|
|
8
|
+
export const formatProjectLine = (point, u, v) => (`${fixed(point[0], 4)},${fixed(point[1], 4)},${fixed(point[2], 4)} -> px ${fixed(u, 1)},${fixed(v, 1)}`);
|
|
9
|
+
const FLAT_NOTE = 'mesh face is local xy facing +z; rotation.x=-pi/2 lays it flat facing up,'
|
|
10
|
+
+ ' local +y points away from the camera';
|
|
11
|
+
const AMBIGUITY_NOTE = 'rectangles seen from one view are ambiguous in lean versus depth; if it lands inside'
|
|
12
|
+
+ ' another object, constrain it with what you know (rests on a surface, leans on a wall)';
|
|
13
|
+
const SOLVED_SIDE_NOTE = 'one dimension was solved, so lean, roll and that dimension trade against each other;'
|
|
14
|
+
+ ' prefer --plane-y for anything lying flat. ';
|
|
15
|
+
const subtract = (a, b) => [a[0] - b[0], a[1] - b[1], a[2] - b[2]];
|
|
16
|
+
const norm = (a) => Math.hypot(...a);
|
|
17
|
+
/** A rectangle lying flat on the plane y = planeY, any size. Corners TL;TR;BR;BL in pixels. */
|
|
18
|
+
export const rectOnPlane = (camera, size, corners, planeY) => {
|
|
19
|
+
const hits = corners.map(([u, v]) => planeHit(camera, size, u, v, planeY));
|
|
20
|
+
const P = hits.map((hit) => hit.point);
|
|
21
|
+
const centre = [0, 0, 0];
|
|
22
|
+
for (const point of P)
|
|
23
|
+
for (let axis = 0; axis < 3; axis += 1)
|
|
24
|
+
centre[axis] += point[axis] / P.length;
|
|
25
|
+
const top = subtract(P[1], P[0]);
|
|
26
|
+
const bottom = subtract(P[2], P[3]);
|
|
27
|
+
const width = (norm(top) + norm(bottom)) / 2;
|
|
28
|
+
const height = (norm(subtract(P[3], P[0])) + norm(subtract(P[2], P[1]))) / 2;
|
|
29
|
+
const yaw = Math.atan2(-(top[2] + bottom[2]), top[0] + bottom[0]);
|
|
30
|
+
return {
|
|
31
|
+
pose: {
|
|
32
|
+
position: [roundTo(centre[0], 4), roundTo(centre[1], 4), roundTo(centre[2], 4)],
|
|
33
|
+
w: roundTo(width, 4),
|
|
34
|
+
h: roundTo(height, 4),
|
|
35
|
+
rotation: { x: roundTo(-Math.PI / 2, 6), y: roundTo(yaw, 6), z: 0, order: 'YXZ' },
|
|
36
|
+
note: FLAT_NOTE,
|
|
37
|
+
},
|
|
38
|
+
behind: hits.some((hit) => hit.behind),
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Free pose (position, lean, roll) of a rectangle whose width, height or both
|
|
43
|
+
* are known. With one side known the other is solved, less well determined.
|
|
44
|
+
*/
|
|
45
|
+
export const rectOfKnownSize = (camera, size, corners, known) => {
|
|
46
|
+
const { width, height } = known;
|
|
47
|
+
if (width === undefined && height === undefined) {
|
|
48
|
+
throw new SceneArgumentError('rect needs --plane-y, or --width and/or --height');
|
|
49
|
+
}
|
|
50
|
+
const seed = Math.max(...[width, height].filter((value) => value !== undefined));
|
|
51
|
+
const solvedSide = width === undefined || height === undefined ? 1 : 0;
|
|
52
|
+
const centroid = corners.reduce((total, [u, v]) => [total[0] + u / corners.length, total[1] + v / corners.length], [0, 0]);
|
|
53
|
+
const ray = pixelRay(camera, size, centroid[0], centroid[1]);
|
|
54
|
+
const sides = (p) => [
|
|
55
|
+
width ?? p[6],
|
|
56
|
+
height ?? p[6],
|
|
57
|
+
];
|
|
58
|
+
const residuals = (p) => {
|
|
59
|
+
const [w, h] = sides(p);
|
|
60
|
+
const local = [[-w / 2, h / 2, 0], [w / 2, h / 2, 0], [w / 2, -h / 2, 0], [-w / 2, -h / 2, 0]];
|
|
61
|
+
// Euler YXZ with rotation.set(x = p[4], y = p[3], z = p[5]); lean is rotation.x.
|
|
62
|
+
const r = rotationMatrix(p[3], p[4], p[5]);
|
|
63
|
+
const world = local.map((point) => [
|
|
64
|
+
r[0][0] * point[0] + r[0][1] * point[1] + r[0][2] * point[2] + p[0],
|
|
65
|
+
r[1][0] * point[0] + r[1][1] * point[1] + r[1][2] * point[2] + p[1],
|
|
66
|
+
r[2][0] * point[0] + r[2][1] * point[1] + r[2][2] * point[2] + p[2],
|
|
67
|
+
]);
|
|
68
|
+
const projected = projectPoints(camera, world, size);
|
|
69
|
+
const out = new Float64Array(8);
|
|
70
|
+
projected.forEach((projection, index) => {
|
|
71
|
+
const penalty = Math.max(projection.depth + 0.01, 0) * 1e4;
|
|
72
|
+
out[2 * index] = projection.u - corners[index][0] + penalty;
|
|
73
|
+
out[2 * index + 1] = projection.v - corners[index][1] + penalty;
|
|
74
|
+
});
|
|
75
|
+
return out;
|
|
76
|
+
};
|
|
77
|
+
const random = seededRandom(2);
|
|
78
|
+
const starts = [];
|
|
79
|
+
for (let index = 0; index < 300; index += 1) {
|
|
80
|
+
const reach = random.uniform(0.2, 3) * seed * 3;
|
|
81
|
+
const start = [
|
|
82
|
+
camera.pos[0] + ray[0] * reach,
|
|
83
|
+
camera.pos[1] + ray[1] * reach,
|
|
84
|
+
camera.pos[2] + ray[2] * reach,
|
|
85
|
+
random.uniform(-1.2, 1.2),
|
|
86
|
+
random.uniform(-1.4, 1.4),
|
|
87
|
+
random.uniform(-0.6, 0.6),
|
|
88
|
+
];
|
|
89
|
+
if (solvedSide)
|
|
90
|
+
start.push(seed * random.uniform(0.5, 2));
|
|
91
|
+
starts.push(Float64Array.from(start));
|
|
92
|
+
}
|
|
93
|
+
const low = [-1e4, -1e4, -1e4, -4, -1.6, -3.2, ...(solvedSide ? [seed * 0.05] : [])];
|
|
94
|
+
const high = [1e4, 1e4, 1e4, 4, 1.6, 3.2, ...(solvedSide ? [seed * 20] : [])];
|
|
95
|
+
const best = multistart(residuals, starts, low, high);
|
|
96
|
+
const p = best.parameters;
|
|
97
|
+
const [w, h] = sides(p);
|
|
98
|
+
return {
|
|
99
|
+
position: [roundTo(p[0], 4), roundTo(p[1], 4), roundTo(p[2], 4)],
|
|
100
|
+
w: roundTo(w, 4),
|
|
101
|
+
h: roundTo(h, 4),
|
|
102
|
+
rotation: { x: roundTo(p[4], 6), y: roundTo(p[3], 6), z: roundTo(p[5], 6), order: 'YXZ' },
|
|
103
|
+
rmsPx: roundTo(Math.sqrt(best.cost / 8), 2),
|
|
104
|
+
note: (solvedSide ? SOLVED_SIDE_NOTE : '') + AMBIGUITY_NOTE,
|
|
105
|
+
};
|
|
106
|
+
};
|
|
107
|
+
//# sourceMappingURL=placement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"placement.js","sourceRoot":"","sources":["../../src/scene/placement.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 8-bit RGB pixels in memory: the one image shape every scene helper works on.
|
|
3
|
+
* Alpha is dropped without compositing, as the Python helpers' convert("RGB")
|
|
4
|
+
* did, and before any resize so a transparent edge never bleeds into colour.
|
|
5
|
+
*/
|
|
6
|
+
export type RgbImage = {
|
|
7
|
+
data: Buffer;
|
|
8
|
+
width: number;
|
|
9
|
+
height: number;
|
|
10
|
+
};
|
|
11
|
+
export declare const readRgb: (file: string) => Promise<RgbImage>;
|
|
12
|
+
/** Lanczos resize to an exact size; the same size is returned untouched. */
|
|
13
|
+
export declare const resizeRgb: (image: RgbImage, width: number, height: number) => Promise<RgbImage>;
|
|
14
|
+
export declare const readRgbAt: (file: string, width: number, height: number) => Promise<RgbImage>;
|
|
15
|
+
/** PNG bytes of an in-memory image. */
|
|
16
|
+
export declare const encodePng: (image: RgbImage) => Promise<Buffer>;
|
|
17
|
+
export declare const writePng: (image: RgbImage, file: string) => Promise<void>;
|
|
18
|
+
//# sourceMappingURL=raster.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"raster.d.ts","sourceRoot":"","sources":["../../src/scene/raster.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvE,eAAO,MAAM,OAAO,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,QAAQ,CAQ5D,CAAC;AAMF,4EAA4E;AAC5E,eAAO,MAAM,SAAS,GAAU,OAAO,QAAQ,EAAE,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAG,OAAO,CAAC,QAAQ,CAOhG,CAAC;AAEF,eAAO,MAAM,SAAS,GAAU,MAAM,MAAM,EAAE,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAG,OAAO,CAAC,QAAQ,CAE7F,CAAC;AAEF,uCAAuC;AACvC,eAAO,MAAM,SAAS,GAAU,OAAO,QAAQ,KAAG,OAAO,CAAC,MAAM,CAE/D,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAU,OAAO,QAAQ,EAAE,MAAM,MAAM,KAAG,OAAO,CAAC,IAAI,CAE1E,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import sharp from 'sharp';
|
|
2
|
+
export const readRgb = async (file) => {
|
|
3
|
+
const { data, info } = await sharp(file)
|
|
4
|
+
.removeAlpha()
|
|
5
|
+
.toColourspace('srgb')
|
|
6
|
+
.raw()
|
|
7
|
+
.toBuffer({ resolveWithObject: true });
|
|
8
|
+
if (info.channels !== 3)
|
|
9
|
+
throw new Error(`${file}: expected RGB pixels, decoded ${info.channels} channels`);
|
|
10
|
+
return { data, width: info.width, height: info.height };
|
|
11
|
+
};
|
|
12
|
+
const rawInput = (image) => ({
|
|
13
|
+
raw: { width: image.width, height: image.height, channels: 3 },
|
|
14
|
+
});
|
|
15
|
+
/** Lanczos resize to an exact size; the same size is returned untouched. */
|
|
16
|
+
export const resizeRgb = async (image, width, height) => {
|
|
17
|
+
if (image.width === width && image.height === height)
|
|
18
|
+
return image;
|
|
19
|
+
const { data, info } = await sharp(image.data, rawInput(image))
|
|
20
|
+
.resize(width, height, { fit: 'fill', kernel: 'lanczos3' })
|
|
21
|
+
.raw()
|
|
22
|
+
.toBuffer({ resolveWithObject: true });
|
|
23
|
+
return { data, width: info.width, height: info.height };
|
|
24
|
+
};
|
|
25
|
+
export const readRgbAt = async (file, width, height) => (resizeRgb(await readRgb(file), width, height));
|
|
26
|
+
/** PNG bytes of an in-memory image. */
|
|
27
|
+
export const encodePng = async (image) => (sharp(image.data, rawInput(image)).png().toBuffer());
|
|
28
|
+
export const writePng = async (image, file) => {
|
|
29
|
+
await sharp(image.data, rawInput(image)).png().toFile(file);
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=raster.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"raster.js","sourceRoot":"","sources":["../../src/scene/raster.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAS1B,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,EAAE,IAAY,EAAqB,EAAE;IAC/D,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC;SACrC,WAAW,EAAE;SACb,aAAa,CAAC,MAAM,CAAC;SACrB,GAAG,EAAE;SACL,QAAQ,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,kCAAkC,IAAI,CAAC,QAAQ,WAAW,CAAC,CAAC;IAC5G,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAC1D,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,KAAe,EAAE,EAAE,CAAC,CAAC;IACrC,GAAG,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAU,EAAE;CACxE,CAAC,CAAC;AAEH,4EAA4E;AAC5E,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAE,KAAe,EAAE,KAAa,EAAE,MAAc,EAAqB,EAAE;IACnG,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IACnE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;SAC5D,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;SAC1D,GAAG,EAAE;SACL,QAAQ,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAC1D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAE,IAAY,EAAE,KAAa,EAAE,MAAc,EAAqB,EAAE,CAAC,CACjG,SAAS,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAC9C,CAAC;AAEF,uCAAuC;AACvC,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAE,KAAe,EAAmB,EAAE,CAAC,CACnE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CACpD,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAAE,KAAe,EAAE,IAAY,EAAiB,EAAE;IAC7E,MAAM,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC9D,CAAC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The starter harness and the pinned three.js that ship inside the package
|
|
3
|
+
* (`scene-kit/`), and the one operation on them: copy both into a new scene
|
|
4
|
+
* folder. The payload is stored once in the package, never in agent homes, and
|
|
5
|
+
* nothing is fetched: three.js r186 and its MIT licence are bundled.
|
|
6
|
+
*/
|
|
7
|
+
export declare const sceneKitRoot: () => string;
|
|
8
|
+
/** Every file `init` writes, as [kit source, path inside the scene folder]. */
|
|
9
|
+
export declare const sceneKitFiles: (kitRoot?: string) => Promise<Array<[string, string]>>;
|
|
10
|
+
export declare class SceneInitConflict extends Error {
|
|
11
|
+
readonly conflicts: readonly string[];
|
|
12
|
+
constructor(directory: string, conflicts: readonly string[]);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Copies the starter and the vendored three.js into `directory`. Refuses before
|
|
16
|
+
* writing anything when any destination file already exists; the folder itself
|
|
17
|
+
* may exist (it usually holds the source image).
|
|
18
|
+
*/
|
|
19
|
+
export declare const initSceneFolder: (directory: string, kitRoot?: string) => Promise<string[]>;
|
|
20
|
+
//# sourceMappingURL=scene-kit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scene-kit.d.ts","sourceRoot":"","sources":["../../src/scene/scene-kit.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AAEH,eAAO,MAAM,YAAY,QAAO,MAAqE,CAAC;AAsBtG,+EAA+E;AAC/E,eAAO,MAAM,aAAa,GAAU,gBAAwB,KAAG,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAO7F,CAAC;AAEF,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;gBAE1B,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,MAAM,EAAE;CAS5D;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAC1B,WAAW,MAAM,EACjB,gBAAwB,KACvB,OAAO,CAAC,MAAM,EAAE,CAclB,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { constants } from 'node:fs';
|
|
2
|
+
import { copyFile, mkdir, readdir, stat } from 'node:fs/promises';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
/**
|
|
6
|
+
* The starter harness and the pinned three.js that ship inside the package
|
|
7
|
+
* (`scene-kit/`), and the one operation on them: copy both into a new scene
|
|
8
|
+
* folder. The payload is stored once in the package, never in agent homes, and
|
|
9
|
+
* nothing is fetched: three.js r186 and its MIT licence are bundled.
|
|
10
|
+
*/
|
|
11
|
+
export const sceneKitRoot = () => fileURLToPath(new URL('../../scene-kit/', import.meta.url));
|
|
12
|
+
const listFiles = async (root, relative = '') => {
|
|
13
|
+
const entries = await readdir(path.join(root, relative), { withFileTypes: true });
|
|
14
|
+
const nested = await Promise.all(entries.map(async (entry) => {
|
|
15
|
+
const child = path.join(relative, entry.name);
|
|
16
|
+
if (entry.isDirectory())
|
|
17
|
+
return listFiles(root, child);
|
|
18
|
+
return entry.isFile() ? [child] : [];
|
|
19
|
+
}));
|
|
20
|
+
return nested.flat().sort();
|
|
21
|
+
};
|
|
22
|
+
const exists = async (target) => {
|
|
23
|
+
try {
|
|
24
|
+
await stat(target);
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
if (error.code === 'ENOENT')
|
|
29
|
+
return false;
|
|
30
|
+
throw error;
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
/** Every file `init` writes, as [kit source, path inside the scene folder]. */
|
|
34
|
+
export const sceneKitFiles = async (kitRoot = sceneKitRoot()) => {
|
|
35
|
+
const starter = await listFiles(path.join(kitRoot, 'starter'));
|
|
36
|
+
const vendor = await listFiles(path.join(kitRoot, 'vendor'));
|
|
37
|
+
return [
|
|
38
|
+
...starter.map((file) => [path.join(kitRoot, 'starter', file), file]),
|
|
39
|
+
...vendor.map((file) => [path.join(kitRoot, 'vendor', file), path.join('vendor', file)]),
|
|
40
|
+
];
|
|
41
|
+
};
|
|
42
|
+
export class SceneInitConflict extends Error {
|
|
43
|
+
conflicts;
|
|
44
|
+
constructor(directory, conflicts) {
|
|
45
|
+
super(`${directory} already has ${conflicts.length === 1 ? 'a file' : 'files'} the starter would write:`
|
|
46
|
+
+ ` ${conflicts.slice(0, 8).join(', ')}${conflicts.length > 8 ? ', ...' : ''}.`
|
|
47
|
+
+ ' Nothing was written. Choose a new folder, or move those files away first.');
|
|
48
|
+
this.name = 'SceneInitConflict';
|
|
49
|
+
this.conflicts = conflicts;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Copies the starter and the vendored three.js into `directory`. Refuses before
|
|
54
|
+
* writing anything when any destination file already exists; the folder itself
|
|
55
|
+
* may exist (it usually holds the source image).
|
|
56
|
+
*/
|
|
57
|
+
export const initSceneFolder = async (directory, kitRoot = sceneKitRoot()) => {
|
|
58
|
+
const target = path.resolve(directory);
|
|
59
|
+
const files = await sceneKitFiles(kitRoot);
|
|
60
|
+
const conflicts = [];
|
|
61
|
+
for (const [, relative] of files) {
|
|
62
|
+
if (await exists(path.join(target, relative)))
|
|
63
|
+
conflicts.push(relative);
|
|
64
|
+
}
|
|
65
|
+
if (conflicts.length > 0)
|
|
66
|
+
throw new SceneInitConflict(target, conflicts);
|
|
67
|
+
for (const [source, relative] of files) {
|
|
68
|
+
const destination = path.join(target, relative);
|
|
69
|
+
await mkdir(path.dirname(destination), { recursive: true });
|
|
70
|
+
await copyFile(source, destination, constants.COPYFILE_EXCL);
|
|
71
|
+
}
|
|
72
|
+
return files.map(([, relative]) => relative);
|
|
73
|
+
};
|
|
74
|
+
//# sourceMappingURL=scene-kit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scene-kit.js","sourceRoot":"","sources":["../../src/scene/scene-kit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** The `12ui scene` verbs, named once for the dispatcher and the capability record. */
|
|
2
|
+
export declare const SCENE_VERBS: readonly ["init", "solve", "ray", "project", "rect", "serve", "capture", "sheet", "blend", "colors", "rectify"];
|
|
3
|
+
export type SceneVerb = typeof SCENE_VERBS[number];
|
|
4
|
+
//# sourceMappingURL=scene-verbs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scene-verbs.d.ts","sourceRoot":"","sources":["../../src/scene/scene-verbs.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,eAAO,MAAM,WAAW,iHAEd,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scene-verbs.js","sourceRoot":"","sources":["../../src/scene/scene-verbs.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS;CAC5F,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A small seeded PRNG for the scene solvers' multistart.
|
|
3
|
+
*
|
|
4
|
+
* The camera and rectangle solves draw hundreds of random starting points and
|
|
5
|
+
* keep the best local minimum. Their answer must not depend on the draw (the
|
|
6
|
+
* Python solver gave the identical camera for five different seeds), but a
|
|
7
|
+
* fixed seed keeps two runs of the same spec byte-identical, which is what
|
|
8
|
+
* makes a parity fixture meaningful. sfc32 is fast, has a 128-bit state and no
|
|
9
|
+
* short cycles for any seed.
|
|
10
|
+
*/
|
|
11
|
+
export type SeededRandom = {
|
|
12
|
+
/** Uniform in [0, 1). */
|
|
13
|
+
next: () => number;
|
|
14
|
+
/** Uniform in [low, high). */
|
|
15
|
+
uniform: (low: number, high: number) => number;
|
|
16
|
+
/** Standard normal (Box-Muller, the spare value is kept for the next call). */
|
|
17
|
+
normal: () => number;
|
|
18
|
+
};
|
|
19
|
+
export declare const seededRandom: (seed: number) => SeededRandom;
|
|
20
|
+
//# sourceMappingURL=seeded-random.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seeded-random.d.ts","sourceRoot":"","sources":["../../src/scene/seeded-random.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,yBAAyB;IACzB,IAAI,EAAE,MAAM,MAAM,CAAC;IACnB,8BAA8B;IAC9B,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/C,+EAA+E;IAC/E,MAAM,EAAE,MAAM,MAAM,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,YAmC3C,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export const seededRandom = (seed) => {
|
|
2
|
+
let a = 0x9e3779b9 ^ (seed >>> 0);
|
|
3
|
+
let b = 0x243f6a88 ^ Math.imul(seed >>> 0, 0x85ebca6b);
|
|
4
|
+
let c = 0xb7e15162;
|
|
5
|
+
let d = 1;
|
|
6
|
+
const next = () => {
|
|
7
|
+
a >>>= 0;
|
|
8
|
+
b >>>= 0;
|
|
9
|
+
c >>>= 0;
|
|
10
|
+
d >>>= 0;
|
|
11
|
+
const t = (a + b + d) >>> 0;
|
|
12
|
+
d = (d + 1) >>> 0;
|
|
13
|
+
a = b ^ (b >>> 9);
|
|
14
|
+
b = (c + (c << 3)) >>> 0;
|
|
15
|
+
c = (c << 21) | (c >>> 11);
|
|
16
|
+
c = (c + t) >>> 0;
|
|
17
|
+
return t / 4294967296;
|
|
18
|
+
};
|
|
19
|
+
// Discard the warm-up outputs so nearby seeds decorrelate.
|
|
20
|
+
for (let index = 0; index < 16; index += 1)
|
|
21
|
+
next();
|
|
22
|
+
let spare = null;
|
|
23
|
+
return {
|
|
24
|
+
next,
|
|
25
|
+
uniform: (low, high) => low + (high - low) * next(),
|
|
26
|
+
normal: () => {
|
|
27
|
+
if (spare !== null) {
|
|
28
|
+
const value = spare;
|
|
29
|
+
spare = null;
|
|
30
|
+
return value;
|
|
31
|
+
}
|
|
32
|
+
let u = 0;
|
|
33
|
+
while (u <= Number.EPSILON)
|
|
34
|
+
u = next();
|
|
35
|
+
const v = next();
|
|
36
|
+
const radius = Math.sqrt(-2 * Math.log(u));
|
|
37
|
+
spare = radius * Math.sin(2 * Math.PI * v);
|
|
38
|
+
return radius * Math.cos(2 * Math.PI * v);
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=seeded-random.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seeded-random.js","sourceRoot":"","sources":["../../src/scene/seeded-random.ts"],"names":[],"mappings":"AAmBA,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAY,EAAgB,EAAE;IACzD,IAAI,CAAC,GAAG,UAAU,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;IAClC,IAAI,CAAC,GAAG,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,UAAU,CAAC,CAAC;IACvD,IAAI,CAAC,GAAG,UAAU,CAAC;IACnB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,MAAM,IAAI,GAAG,GAAW,EAAE;QACxB,CAAC,MAAM,CAAC,CAAC;QAAC,CAAC,MAAM,CAAC,CAAC;QAAC,CAAC,MAAM,CAAC,CAAC;QAAC,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAClB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3B,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAClB,OAAO,CAAC,GAAG,UAAU,CAAC;IACxB,CAAC,CAAC;IACF,2DAA2D;IAC3D,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,KAAK,IAAI,CAAC;QAAE,IAAI,EAAE,CAAC;IACnD,IAAI,KAAK,GAAkB,IAAI,CAAC;IAChC,OAAO;QACL,IAAI;QACJ,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,EAAE;QACnD,MAAM,EAAE,GAAG,EAAE;YACX,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,MAAM,KAAK,GAAG,KAAK,CAAC;gBACpB,KAAK,GAAG,IAAI,CAAC;gBACb,OAAO,KAAK,CAAC;YACf,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO;gBAAE,CAAC,GAAG,IAAI,EAAE,CAAC;YACvC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC3C,OAAO,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC5C,CAAC;KACF,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A safe compiler for the maths a camera spec writes in its world coordinates.
|
|
3
|
+
*
|
|
4
|
+
* Specs written for the Python solver use Python expression syntax ("D/2",
|
|
5
|
+
* "-0.5*cos(t)+D/2*sin(t)", "W**2"), which Python evaluated with `eval`. This
|
|
6
|
+
* accepts exactly the arithmetic subset: numbers, the spec's free names, the
|
|
7
|
+
* constants pi e tau inf nan, `+ - * / // % **`, unary signs, parentheses, and
|
|
8
|
+
* calls to the math functions below. Anything else (attribute access, strings,
|
|
9
|
+
* subscripts, unknown names) is refused with the landmark and the offending
|
|
10
|
+
* token named, before any solve starts.
|
|
11
|
+
*/
|
|
12
|
+
export type CompiledExpression = (values: ArrayLike<number>) => number;
|
|
13
|
+
export declare class SpecExpressionError extends Error {
|
|
14
|
+
constructor(message: string);
|
|
15
|
+
}
|
|
16
|
+
export declare const SPEC_MATH_FUNCTIONS: readonly string[];
|
|
17
|
+
/**
|
|
18
|
+
* Compiles one coordinate expression. `names` are the spec's free names in the
|
|
19
|
+
* order the solver passes their values; a free name shadows a constant or
|
|
20
|
+
* function of the same spelling, as it did in the Python evaluator.
|
|
21
|
+
*/
|
|
22
|
+
export declare const compileSpecExpression: (source: string, names: readonly string[], where: string) => CompiledExpression;
|
|
23
|
+
/** A spec coordinate: a JSON number, or an expression string. */
|
|
24
|
+
export declare const compileSpecCoordinate: (value: unknown, names: readonly string[], where: string) => CompiledExpression;
|
|
25
|
+
//# sourceMappingURL=spec-expression.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-expression.d.ts","sourceRoot":"","sources":["../../src/scene/spec-expression.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC;AAEvE,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAqDD,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAAgC,CAAC;AA2ClF;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,GAChC,QAAQ,MAAM,EACd,OAAO,SAAS,MAAM,EAAE,EACxB,OAAO,MAAM,KACZ,kBAsHF,CAAC;AAEF,iEAAiE;AACjE,eAAO,MAAM,qBAAqB,GAChC,OAAO,OAAO,EACd,OAAO,SAAS,MAAM,EAAE,EACxB,OAAO,MAAM,KACZ,kBAIF,CAAC"}
|