@pixel-point/toolcraft 0.0.17 → 0.0.19
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/package.json +1 -1
- package/src/generate-demand-only-lifecycle.test.mjs +9 -1
- package/src/generate-performance-iteration-execution.test.mjs +3 -3
- package/src/generate-test-delivery-architecture-assertions.mjs +11 -73
- package/src/generate-test-demand-only-lifecycle.mjs +34 -36
- package/src/generate-test-dependency-sandbox.mjs +4 -1
- package/src/generate-test-doc-assertions.mjs +81 -89
- package/src/generate-test-doc-assertions.test.mjs +44 -1
- package/src/generate-test-doc-policy-assertions.mjs +92 -0
- package/src/generate-test-export-doc-assertions.mjs +53 -0
- package/src/generate-test-file-assertions.mjs +77 -83
- package/src/generate-test-integrity-assertions.mjs +5 -2
- package/src/generate-test-integrity-manifest-assertions.mjs +16 -5
- package/src/generate-test-integrity-ownership-assertions.mjs +36 -4
- package/src/generate-test-package-assertions.mjs +4 -0
- package/src/generate-test-product-fixture.mjs +1 -1
- package/src/generate-test-product-fixture.test.mjs +35 -38
- package/src/generate-test-product-iteration.mjs +0 -1
- package/src/generate-test-product-iteration.test.mjs +17 -1
- package/src/generate-test-runtime-boundary-assertions.mjs +178 -0
- package/src/generate-test-standalone-assertions.mjs +7 -13
- package/src/generate-test-standalone-delivery-stages.mjs +2 -86
- package/src/generate.test.mjs +4 -0
- package/src/generated-integrity-manifest.test.mjs +5 -2
- package/src/generated-source-policy.test.mjs +0 -4
- package/src/package-json.mjs +5 -0
- package/src/package-json.test.mjs +21 -0
- package/src/package-manager.mjs +2 -0
- package/src/package-manager.test.mjs +8 -0
- package/src/packaged-template-fallback-helpers.mjs +254 -0
- package/src/packaged-template-fallback.test.mjs +121 -46
- package/src/packaged-template-runtime-assertions.mjs +150 -0
- package/templates/runtime/contracts/component-contracts.choices.test.ts +64 -5
- package/templates/runtime/contracts/component-contracts.choices.ts +55 -5
- package/templates/runtime/contracts/component-contracts.inputs.test.ts +6 -6
- package/templates/runtime/contracts/component-contracts.inputs.ts +8 -7
- package/templates/runtime/contracts/component-contracts.media-custom.test.ts +8 -2
- package/templates/runtime/contracts/component-contracts.media-custom.ts +8 -2
- package/templates/runtime/contracts/component-contracts.runtime-acceptance.test.ts +22 -8
- package/templates/runtime/contracts/component-contracts.runtime-labels.test.ts +7 -1
- package/templates/runtime/contracts/component-contracts.runtime-panels.test.ts +3 -0
- package/templates/runtime/contracts/component-contracts.runtime-shell.test.ts +4 -1
- package/templates/runtime/contracts/component-contracts.runtime.ts +19 -12
- package/templates/runtime/contracts/component-contracts.test.ts +2 -0
- package/templates/runtime/contracts/component-contracts.visual.test.ts +20 -0
- package/templates/runtime/contracts/component-contracts.visual.ts +4 -0
- package/templates/runtime/contracts/decision-contracts.test.ts +35 -11
- package/templates/runtime/contracts/decision-contracts.ts +12 -12
- package/templates/runtime/contracts/performance-verification-policy.test.ts +12 -12
- package/templates/runtime/contracts/performance-verification-policy.ts +8 -8
- package/templates/runtime/export/artifact-download.ts +1 -0
- package/templates/runtime/export/artifact-frame-renderer.ts +2 -15
- package/templates/runtime/export/artifact-frame-state.ts +16 -0
- package/templates/runtime/export/artifact-scene-frame.test.ts +3 -3
- package/templates/runtime/export/artifact-scene-frame.ts +3 -3
- package/templates/runtime/export/export-background.ts +0 -19
- package/templates/runtime/export/export-error.ts +5 -0
- package/templates/runtime/export/export-renderer-coverage.ts +54 -0
- package/templates/runtime/export/export.test.ts +45 -42
- package/templates/runtime/export/image-artifact-export.ts +2 -2
- package/templates/runtime/export/index.ts +57 -16
- package/templates/runtime/export/product-export-renderer.test.ts +38 -4
- package/templates/runtime/export/product-export-renderer.ts +0 -41
- package/templates/runtime/export/product-svg-export-renderer.ts +21 -0
- package/templates/runtime/export/svg-artifact-export.test.ts +98 -0
- package/templates/runtime/export/svg-artifact-export.ts +120 -0
- package/templates/runtime/export/svg-document.test.ts +221 -0
- package/templates/runtime/export/svg-document.ts +400 -0
- package/templates/runtime/export/svg-policy.ts +47 -0
- package/templates/runtime/index.ts +3 -0
- package/templates/runtime/model-import/model-import-limits.ts +15 -4
- package/templates/runtime/react/app-shell/runtime-public-api.test.tsx +21 -1
- package/templates/runtime/react/app-shell/settings-transfer.test.ts +21 -0
- package/templates/runtime/react/app-shell/toolcraft-app.scene-export.test.tsx +75 -1
- package/templates/runtime/react/app-shell/toolcraft-app.tsx +24 -9
- package/templates/runtime/react/canvas/canvas-shell-interactions.test.tsx +30 -0
- package/templates/runtime/react/canvas/canvas-shell-pinch-interactions.test.tsx +155 -0
- package/templates/runtime/react/canvas/canvas-shell-rendering.test.tsx +77 -1
- package/templates/runtime/react/canvas/canvas-shell-test-utils.tsx +13 -1
- package/templates/runtime/react/canvas/canvas-shell.tsx +32 -6
- package/templates/runtime/react/canvas/canvas-viewport-geometry.ts +133 -0
- package/templates/runtime/react/canvas/product-scene-surface.test.tsx +195 -0
- package/templates/runtime/react/canvas/product-scene-surface.tsx +155 -0
- package/templates/runtime/react/canvas/runtime-scene-export.ts +1 -1
- package/templates/runtime/react/canvas/use-canvas-viewport-interactions.ts +285 -36
- package/templates/runtime/react/controls-panel/__tests__/control-conditions.test.ts +61 -0
- package/templates/runtime/react/controls-panel/__tests__/controls-panel.collection-actions.test.tsx +89 -0
- package/templates/runtime/react/controls-panel/__tests__/controls-panel.color-applicability-layout.test.tsx +134 -0
- package/templates/runtime/react/controls-panel/__tests__/controls-panel.color-layout.test.tsx +16 -1
- package/templates/runtime/react/controls-panel/__tests__/controls-panel.control-visibility.test.tsx +40 -19
- package/templates/runtime/react/controls-panel/__tests__/controls-panel.render-isolation.test.tsx +2 -0
- package/templates/runtime/react/controls-panel/__tests__/controls-panel.scene-export-actions.test.tsx +40 -1
- package/templates/runtime/react/controls-panel/__tests__/controls-panel.setup-controls.test.tsx +3 -3
- package/templates/runtime/react/controls-panel/__tests__/controls-panel.source-collection.test.tsx +59 -0
- package/templates/runtime/react/controls-panel/__tests__/controls-panel.source-color-bank.test.tsx +67 -0
- package/templates/runtime/react/controls-panel/__tests__/controls-panel.vector-interaction.test.tsx +6 -6
- package/templates/runtime/react/controls-panel/actions/controls-panel-actions.ts +4 -6
- package/templates/runtime/react/controls-panel/actions/export-action-runner.ts +41 -6
- package/templates/runtime/react/controls-panel/conditions/control-conditions.ts +32 -119
- package/templates/runtime/react/controls-panel/layout/controls-panel-control-group.tsx +5 -2
- package/templates/runtime/react/controls-panel/layout/controls-panel-layout.tsx +41 -10
- package/templates/runtime/react/controls-panel/layout/controls-panel-section.tsx +7 -4
- package/templates/runtime/react/controls-panel/renderers/controls-panel-action-renderer.tsx +2 -1
- package/templates/runtime/react/controls-panel/renderers/controls-panel-basic-renderers.tsx +2 -52
- package/templates/runtime/react/controls-panel/renderers/controls-panel-collection-item-fields.test.tsx +63 -0
- package/templates/runtime/react/controls-panel/renderers/controls-panel-collection-item-fields.tsx +138 -0
- package/templates/runtime/react/controls-panel/renderers/controls-panel-collection-items.tsx +104 -0
- package/templates/runtime/react/controls-panel/renderers/controls-panel-collection-renderer.tsx +115 -236
- package/templates/runtime/react/controls-panel/renderers/controls-panel-file-drop-item-controls.test.tsx +95 -0
- package/templates/runtime/react/controls-panel/renderers/controls-panel-file-drop-item-controls.tsx +82 -0
- package/templates/runtime/react/controls-panel/renderers/controls-panel-media-renderer.test.tsx +73 -1
- package/templates/runtime/react/controls-panel/renderers/controls-panel-media-renderer.tsx +50 -1
- package/templates/runtime/react/controls-panel/renderers/controls-panel-renderer-registry.test.ts +1 -1
- package/templates/runtime/react/controls-panel/renderers/controls-panel-renderer-registry.ts +2 -1
- package/templates/runtime/react/controls-panel/values/controls-panel-collection-values.ts +38 -6
- package/templates/runtime/react/controls-panel/values/controls-panel-color-values.ts +1 -9
- package/templates/runtime/react/controls-panel/values/controls-panel-spatial-values.ts +7 -2
- package/templates/runtime/react/controls-panel/values/controls-panel-value-labels.ts +1 -0
- package/templates/runtime/react/index.ts +4 -0
- package/templates/runtime/react/model-rendering/model-export.ts +1 -1
- package/templates/runtime/react/orientation-gizmo/orientation-gizmo-math.ts +9 -69
- package/templates/runtime/react/orientation-gizmo/orientation-gizmo-selection.ts +5 -5
- package/templates/runtime/react/orientation-gizmo/use-toolcraft-orientation-control-selection.ts +2 -2
- package/templates/runtime/scene/scene-bounds.test.ts +23 -0
- package/templates/runtime/scene/scene-bounds.ts +31 -17
- package/templates/runtime/schema/app-capabilities.test.ts +4 -0
- package/templates/runtime/schema/artifact-export-actions.test.ts +47 -0
- package/templates/runtime/schema/artifact-export-actions.ts +49 -0
- package/templates/runtime/schema/collection-item-controls.ts +29 -0
- package/templates/runtime/schema/control-applicability.test.ts +127 -0
- package/templates/runtime/schema/control-applicability.ts +433 -0
- package/templates/runtime/schema/control-schema-normalization.ts +177 -11
- package/templates/runtime/schema/controls-panel-actions.ts +2 -2
- package/templates/runtime/schema/controls-panel-section-layout.ts +14 -9
- package/templates/runtime/schema/controls-panel-section-roundtrip.test.ts +59 -0
- package/templates/runtime/schema/define-toolcraft.collection-actions-item-controls.test.ts +127 -0
- package/templates/runtime/schema/define-toolcraft.control-sections.test.ts +10 -4
- package/templates/runtime/schema/define-toolcraft.file-drop-item-controls.test.ts +98 -0
- package/templates/runtime/schema/define-toolcraft.file-drop-normalization.test.ts +27 -0
- package/templates/runtime/schema/define-toolcraft.segmented-control-fit.test.ts +20 -2
- package/templates/runtime/schema/define-toolcraft.setup-canvas.test.ts +16 -3
- package/templates/runtime/schema/define-toolcraft.source-collection.test.ts +79 -0
- package/templates/runtime/schema/runtime-setup-section.ts +24 -5
- package/templates/runtime/schema/types.ts +69 -13
- package/templates/runtime/state/canvas-background-state.ts +1 -16
- package/templates/runtime/state/canvas-state.ts +32 -20
- package/templates/runtime/state/control-value-codecs.test.ts +98 -0
- package/templates/runtime/state/control-value-codecs.ts +700 -0
- package/templates/runtime/state/control-value-normalization.test.ts +1 -1
- package/templates/runtime/state/control-value-normalization.ts +127 -135
- package/templates/runtime/state/controls-reducer.ts +26 -3
- package/templates/runtime/state/create-template-state.test.ts +30 -0
- package/templates/runtime/state/create-template-state.ts +52 -31
- package/templates/runtime/state/orientation-pose.ts +80 -0
- package/templates/runtime/state/persistence-control-values.test.ts +59 -0
- package/templates/runtime/state/reducer-controls.test.ts +45 -0
- package/templates/runtime/state/reducer-media-reset.test.ts +1 -1
- package/templates/runtime/state/reducer-timeline.test.ts +70 -0
- package/templates/runtime/state/timeline-reducer.ts +40 -2
- package/templates/runtime/testing/performance-schema-queries.ts +2 -2
- package/templates/starter/AGENTS.md +29 -28
- package/templates/starter/docs/toolcraft/README.md +6 -6
- package/templates/starter/docs/toolcraft/acceptance-testing.md +34 -48
- package/templates/starter/docs/toolcraft/agent-worklog.md +103 -1
- package/templates/starter/docs/toolcraft/assembly-workflow.md +16 -8
- package/templates/starter/docs/toolcraft/component-rules.md +9 -7
- package/templates/starter/docs/toolcraft/core/control-selection.md +9 -3
- package/templates/starter/docs/toolcraft/core/layout.md +13 -8
- package/templates/starter/docs/toolcraft/core/media-upload.md +3 -1
- package/templates/starter/docs/toolcraft/core/performance.md +8 -10
- package/templates/starter/docs/toolcraft/core/reference-study.md +80 -19
- package/templates/starter/docs/toolcraft/core/runtime-boundary.md +15 -3
- package/templates/starter/docs/toolcraft/core/setup-export.md +67 -11
- package/templates/starter/docs/toolcraft/custom-controls.md +6 -4
- package/templates/starter/docs/toolcraft/decision-contract.md +4 -2
- package/templates/starter/docs/toolcraft/performance.md +8 -10
- package/templates/starter/docs/toolcraft/renderer-technique.md +6 -2
- package/templates/starter/docs/toolcraft/schema-reference.md +24 -22
- package/templates/starter/docs/toolcraft/workflow.md +14 -14
- package/templates/starter/e2e/app-browser-control-applicability-requirements.spec.ts +163 -0
- package/templates/starter/e2e/app-browser-infinity-canvas-evidence.spec.ts +45 -2
- package/templates/starter/e2e/app-browser-motion-reference-requirements.spec.ts +411 -0
- package/templates/starter/e2e/app-browser-orientation-evidence.spec.ts +174 -21
- package/templates/starter/e2e/app-browser-proof-session.spec.ts +85 -0
- package/templates/starter/e2e/app-browser-runtime-requirements.spec.ts +63 -33
- package/templates/starter/e2e/app-browser-selection-scope-evidence.spec.ts +137 -0
- package/templates/starter/e2e/app-browser-semantic-evidence.spec.ts +61 -15
- package/templates/starter/e2e/{browser-conditional-output-evidence-helpers.ts → browser-background-output-evidence.ts} +0 -68
- package/templates/starter/e2e/browser-control-applicability-evidence.ts +114 -0
- package/templates/starter/e2e/browser-infinity-canvas-evidence.ts +20 -11
- package/templates/starter/e2e/browser-infinity-canvas-svg-evidence.ts +42 -0
- package/templates/starter/e2e/browser-layer-evidence-helpers.ts +15 -36
- package/templates/starter/e2e/browser-orientation-gizmo-evidence-helpers.ts +4 -0
- package/templates/starter/e2e/browser-orientation-gizmo-live-preconditions.ts +86 -0
- package/templates/starter/e2e/browser-product-raster-snapshot.ts +213 -0
- package/templates/starter/e2e/browser-proof-session.ts +43 -15
- package/templates/starter/e2e/browser-proof-surface-action.ts +79 -0
- package/templates/starter/e2e/browser-proof-types.ts +15 -0
- package/templates/starter/e2e/browser-runtime-applicability-requirements.ts +84 -0
- package/templates/starter/e2e/browser-runtime-evidence-reporter.ts +9 -2
- package/templates/starter/e2e/browser-runtime-evidence-requirements.ts +51 -32
- package/templates/starter/e2e/browser-selection-scope-evidence.ts +269 -0
- package/templates/starter/e2e/browser-semantic-evidence-test-helpers.ts +122 -0
- package/templates/starter/e2e/browser-svg-export-evidence.spec.ts +79 -0
- package/templates/starter/e2e/browser-svg-export-evidence.ts +152 -0
- package/templates/starter/e2e/export-artifact-helpers.ts +70 -0
- package/templates/starter/e2e/product-observable-helpers.ts +8 -129
- package/templates/starter/e2e/svg-artifact-inspection.spec.ts +136 -0
- package/templates/starter/e2e/svg-artifact-inspection.ts +331 -0
- package/templates/starter/e2e/svg-download-test-fixtures.ts +34 -0
- package/templates/starter/e2e/toolcraft-delivery-catalog-reporter.ts +198 -15
- package/templates/starter/e2e/toolcraft-feature-verification-reporter.spec.ts +149 -0
- package/templates/starter/e2e/toolcraft-feature-verification-reporter.ts +223 -0
- package/templates/starter/package.json +2 -0
- package/templates/starter/scripts/check-toolcraft-docs.mjs +1 -0
- package/templates/starter/scripts/create-toolcraft-motion-reference-study.mjs +233 -0
- package/templates/starter/scripts/create-toolcraft-motion-reference-study.test.mjs +459 -0
- package/templates/starter/scripts/playwright-test-title-selection.d.mts +45 -0
- package/templates/starter/scripts/run-browser-performance-test-helpers.mjs +0 -27
- package/templates/starter/scripts/run-browser-performance.mjs +0 -6
- package/templates/starter/scripts/run-browser-performance.test.mjs +5 -13
- package/templates/starter/scripts/run-delivery-verification-test-helpers.mjs +0 -34
- package/templates/starter/scripts/run-delivery-verification.test.mjs +135 -31
- package/templates/starter/scripts/run-feature-verification.mjs +212 -0
- package/templates/starter/scripts/run-feature-verification.test.mjs +226 -0
- package/templates/starter/scripts/toolcraft-checkpoint-delivery-state.mjs +21 -8
- package/templates/starter/scripts/toolcraft-checkpoint-delivery-state.test.mjs +32 -92
- package/templates/starter/scripts/toolcraft-checkpoint-transaction.mjs +28 -6
- package/templates/starter/scripts/toolcraft-checkpoint-transaction.test.mjs +8 -63
- package/templates/starter/scripts/toolcraft-contract-manifest.json +1 -0
- package/templates/starter/scripts/toolcraft-delivery-anchor.mjs +28 -8
- package/templates/starter/scripts/toolcraft-delivery-anchor.test.mjs +50 -61
- package/templates/starter/scripts/toolcraft-delivery-architecture-inventory.mjs +0 -4
- package/templates/starter/scripts/toolcraft-delivery-architecture-policy.mjs +0 -1
- package/templates/starter/scripts/toolcraft-delivery-evidence.test.mjs +2 -3
- package/templates/starter/scripts/toolcraft-delivery-executor.mjs +5 -1
- package/templates/starter/scripts/toolcraft-delivery-executor.test.mjs +5 -12
- package/templates/starter/scripts/toolcraft-delivery-functional-context.d.mts +1 -48
- package/templates/starter/scripts/toolcraft-delivery-functional-context.mjs +2 -30
- package/templates/starter/scripts/toolcraft-delivery-functional-context.test.mjs +4 -166
- package/templates/starter/scripts/toolcraft-delivery-functional-initial.test.mjs +4 -20
- package/templates/starter/scripts/toolcraft-delivery-lifecycle.mjs +43 -192
- package/templates/starter/scripts/toolcraft-delivery-performance-iteration-lifecycle.test.mjs +79 -440
- package/templates/starter/scripts/toolcraft-delivery-plan-authority.test.mjs +102 -297
- package/templates/starter/scripts/toolcraft-delivery-plan-construction.mjs +46 -97
- package/templates/starter/scripts/toolcraft-delivery-plan-test-helpers.mjs +125 -0
- package/templates/starter/scripts/toolcraft-delivery-plan-validation.test.mjs +58 -0
- package/templates/starter/scripts/toolcraft-delivery-plan.d.mts +19 -31
- package/templates/starter/scripts/toolcraft-delivery-plan.mjs +254 -252
- package/templates/starter/scripts/toolcraft-delivery-plan.test.mjs +29 -457
- package/templates/starter/scripts/toolcraft-delivery-receipt-performance.test.mjs +1 -1
- package/templates/starter/scripts/toolcraft-delivery-receipt-strictness.test.mjs +3 -72
- package/templates/starter/scripts/toolcraft-delivery-receipt-test-helpers.mjs +7 -36
- package/templates/starter/scripts/toolcraft-delivery-receipt.d.mts +3 -5
- package/templates/starter/scripts/toolcraft-delivery-receipt.mjs +15 -31
- package/templates/starter/scripts/toolcraft-delivery-receipt.test.mjs +28 -20
- package/templates/starter/scripts/toolcraft-delivery-receipt.types.test.mts +22 -30
- package/templates/starter/scripts/toolcraft-feature-verification-plan.d.mts +20 -0
- package/templates/starter/scripts/toolcraft-feature-verification-plan.mjs +146 -0
- package/templates/starter/scripts/toolcraft-feature-verification-plan.test.mjs +96 -0
- package/templates/starter/scripts/toolcraft-functional-proof-model.d.mts +3 -18
- package/templates/starter/scripts/toolcraft-functional-proof-model.mjs +39 -127
- package/templates/starter/scripts/toolcraft-functional-proof-model.test.mjs +25 -362
- package/templates/starter/scripts/toolcraft-functional-proof-model.types.test.mts +6 -83
- package/templates/starter/scripts/toolcraft-functional-proof-primitives.d.mts +11 -0
- package/templates/starter/scripts/toolcraft-functional-proof-primitives.mjs +61 -0
- package/templates/starter/scripts/toolcraft-functional-proof-primitives.test.mjs +43 -0
- package/templates/starter/scripts/toolcraft-integrity-policy.mjs +13 -0
- package/templates/starter/scripts/toolcraft-integrity-test-utils.mjs +1 -1
- package/templates/starter/scripts/toolcraft-layer-evidence-facade.test.mjs +58 -22
- package/templates/starter/scripts/toolcraft-motion-reference-analysis-protocol.mjs +111 -0
- package/templates/starter/scripts/toolcraft-motion-reference-analysis-protocol.test.mjs +116 -0
- package/templates/starter/scripts/toolcraft-motion-reference-artifacts.d.mts +37 -0
- package/templates/starter/scripts/toolcraft-motion-reference-artifacts.mjs +308 -0
- package/templates/starter/scripts/toolcraft-motion-reference-artifacts.test.mjs +420 -0
- package/templates/starter/scripts/toolcraft-motion-reference-artifacts.types.test.mts +50 -0
- package/templates/starter/scripts/toolcraft-motion-reference-command-options.mjs +195 -0
- package/templates/starter/scripts/toolcraft-motion-reference-command-options.test.mjs +224 -0
- package/templates/starter/scripts/toolcraft-motion-reference-contact-sheet.mjs +122 -0
- package/templates/starter/scripts/toolcraft-motion-reference-contact-sheet.test.mjs +153 -0
- package/templates/starter/scripts/toolcraft-motion-reference-evidence-assembly.mjs +270 -0
- package/templates/starter/scripts/toolcraft-motion-reference-evidence.test.mjs +432 -0
- package/templates/starter/scripts/toolcraft-motion-reference-ffmpeg-output.mjs +275 -0
- package/templates/starter/scripts/toolcraft-motion-reference-ffmpeg-output.test.mjs +294 -0
- package/templates/starter/scripts/toolcraft-motion-reference-group-inventory.mjs +148 -0
- package/templates/starter/scripts/toolcraft-motion-reference-image-filter-graph.mjs +101 -0
- package/templates/starter/scripts/toolcraft-motion-reference-image-filter-graph.test.mjs +124 -0
- package/templates/starter/scripts/toolcraft-motion-reference-image-source.mjs +259 -0
- package/templates/starter/scripts/toolcraft-motion-reference-image-source.test.mjs +338 -0
- package/templates/starter/scripts/toolcraft-motion-reference-image-timing.mjs +96 -0
- package/templates/starter/scripts/toolcraft-motion-reference-image-timing.test.mjs +81 -0
- package/templates/starter/scripts/toolcraft-motion-reference-lock-recovery.test.mjs +144 -0
- package/templates/starter/scripts/toolcraft-motion-reference-media-source.mjs +165 -0
- package/templates/starter/scripts/toolcraft-motion-reference-media-source.test.mjs +299 -0
- package/templates/starter/scripts/toolcraft-motion-reference-publication-discovery.test.mjs +142 -0
- package/templates/starter/scripts/toolcraft-motion-reference-publication-isolation.test.mjs +234 -0
- package/templates/starter/scripts/toolcraft-motion-reference-publication-journal-schema.mjs +122 -0
- package/templates/starter/scripts/toolcraft-motion-reference-publication-journal-store.mjs +89 -0
- package/templates/starter/scripts/toolcraft-motion-reference-publication-journal-store.test.mjs +74 -0
- package/templates/starter/scripts/toolcraft-motion-reference-publication-journal.mjs +264 -0
- package/templates/starter/scripts/toolcraft-motion-reference-publication-journal.test.mjs +377 -0
- package/templates/starter/scripts/toolcraft-motion-reference-publication-lease.mjs +254 -0
- package/templates/starter/scripts/toolcraft-motion-reference-publication-lease.test.mjs +130 -0
- package/templates/starter/scripts/toolcraft-motion-reference-publication-staging.mjs +128 -0
- package/templates/starter/scripts/toolcraft-motion-reference-publication-staging.test.mjs +209 -0
- package/templates/starter/scripts/toolcraft-motion-reference-publication.fixtures.mjs +88 -0
- package/templates/starter/scripts/toolcraft-motion-reference-publication.mjs +249 -0
- package/templates/starter/scripts/toolcraft-motion-reference-publication.test.mjs +433 -0
- package/templates/starter/scripts/toolcraft-motion-reference-review-output.mjs +38 -0
- package/templates/starter/scripts/toolcraft-motion-reference-review-output.test.mjs +29 -0
- package/templates/starter/scripts/toolcraft-motion-reference-root-safety.test.mjs +84 -0
- package/templates/starter/scripts/toolcraft-motion-reference-roots.mjs +83 -0
- package/templates/starter/scripts/toolcraft-motion-reference-sampling.mjs +283 -0
- package/templates/starter/scripts/toolcraft-motion-reference-sampling.test.mjs +480 -0
- package/templates/starter/scripts/toolcraft-motion-reference-stage-registry.mjs +39 -0
- package/templates/starter/scripts/toolcraft-motion-reference-stage-registry.test.mjs +59 -0
- package/templates/starter/scripts/toolcraft-motion-reference-stage.mjs +71 -0
- package/templates/starter/scripts/toolcraft-motion-reference-stage.test.mjs +61 -0
- package/templates/starter/scripts/toolcraft-motion-review-numeric.mjs +74 -0
- package/templates/starter/scripts/toolcraft-motion-review-numeric.test.mjs +65 -0
- package/templates/starter/scripts/toolcraft-motion-review-partitioning.mjs +268 -0
- package/templates/starter/scripts/toolcraft-motion-review-partitioning.test.mjs +329 -0
- package/templates/starter/scripts/toolcraft-motion-review-protected-units.mjs +120 -0
- package/templates/starter/scripts/toolcraft-motion-review-protected-units.test.mjs +111 -0
- package/templates/starter/scripts/toolcraft-performance-escalation-policy.test.mjs +77 -345
- package/templates/starter/scripts/toolcraft-performance-receipt-validation.test.mjs +19 -21
- package/templates/starter/scripts/toolcraft-product-boundary-ast.mjs +85 -115
- package/templates/starter/scripts/toolcraft-product-boundary-module-policy.mjs +101 -0
- package/templates/starter/scripts/toolcraft-product-boundary.test.mjs +0 -72
- package/templates/starter/scripts/toolcraft-product-control-bindings.mjs +182 -0
- package/templates/starter/scripts/toolcraft-product-control-boundary.mjs +146 -0
- package/templates/starter/scripts/toolcraft-product-control-boundary.test.mjs +186 -0
- package/templates/starter/scripts/toolcraft-product-export-boundary.mjs +16 -18
- package/templates/starter/scripts/toolcraft-product-export-boundary.test.mjs +200 -0
- package/templates/starter/scripts/toolcraft-product-observable-facade.test.mjs +46 -1
- package/templates/starter/scripts/toolcraft-receipt-boundary.test.mjs +0 -1
- package/templates/starter/scripts/toolcraft-source-inventory.d.mts +5 -0
- package/templates/starter/scripts/toolcraft-source-inventory.mjs +25 -14
- package/templates/starter/scripts/toolcraft-source-inventory.test.mjs +48 -0
- package/templates/starter/scripts/toolcraft-source-ownership.mjs +0 -1
- package/templates/starter/scripts/toolcraft-source-ownership.test.mjs +30 -5
- package/templates/starter/scripts/toolcraft-typescript-source-evidence-structure.test.mjs +20 -0
- package/templates/starter/scripts/toolcraft-typescript-source-evidence.mjs +1 -0
- package/templates/starter/scripts/toolcraft-unavailable-resource-evidence-facade.test.mjs +2 -0
- package/templates/starter/scripts/toolcraft-verification-receipt-test-helpers.mjs +5 -26
- package/templates/starter/scripts/toolcraft-verification-receipt.d.mts +0 -7
- package/templates/starter/scripts/toolcraft-verification-receipt.mjs +3 -47
- package/templates/starter/scripts/toolcraft-verification-receipt.test.mjs +6 -87
- package/templates/starter/scripts/toolcraft-vitest-runtime-contract.d.mts +19 -0
- package/templates/starter/scripts/toolcraft-vitest-runtime-contract.mjs +107 -0
- package/templates/starter/scripts/toolcraft-vitest-runtime-contract.test.mjs +114 -0
- package/templates/starter/scripts/toolcraft-vitest-runtime-evidence-reporter.mjs +13 -2
- package/templates/starter/scripts/toolcraft-vitest-runtime-evidence-reporter.test.mjs +110 -0
- package/templates/starter/src/app/acceptance/artifact-export-intent.ts +161 -0
- package/templates/starter/src/app/acceptance/canvas-coverage.ts +1 -0
- package/templates/starter/src/app/acceptance/color-bank-labels.ts +11 -15
- package/templates/starter/src/app/acceptance/color-row-grouping.ts +33 -0
- package/templates/starter/src/app/acceptance/conditions.ts +1 -1
- package/templates/starter/src/app/acceptance/control-acceptance-context.ts +2 -2
- package/templates/starter/src/app/acceptance/control-acceptance-coverage.ts +6 -31
- package/templates/starter/src/app/acceptance/control-acceptance-kind-rules.ts +24 -5
- package/templates/starter/src/app/acceptance/control-acceptance-policy.ts +4 -16
- package/templates/starter/src/app/acceptance/control-applicability-cases.test.ts +321 -0
- package/templates/starter/src/app/acceptance/control-applicability-cases.ts +290 -0
- package/templates/starter/src/app/acceptance/control-applicability.ts +332 -0
- package/templates/starter/src/app/acceptance/control-component-rules.ts +0 -10
- package/templates/starter/src/app/acceptance/control-labels.ts +30 -1
- package/templates/starter/src/app/acceptance/control-layout-dependency-rules.ts +20 -9
- package/templates/starter/src/app/acceptance/control-layout-entity-rules.ts +4 -6
- package/templates/starter/src/app/acceptance/control-layout-model.ts +4 -4
- package/templates/starter/src/app/acceptance/control-layout-section-rules.ts +21 -10
- package/templates/starter/src/app/acceptance/control-parts.ts +8 -0
- package/templates/starter/src/app/acceptance/control-section-entity-cohesion.test.ts +215 -0
- package/templates/starter/src/app/acceptance/control-section-entity-cohesion.ts +132 -0
- package/templates/starter/src/app/acceptance/control-section-inventory.test.ts +87 -0
- package/templates/starter/src/app/acceptance/control-section-inventory.ts +74 -44
- package/templates/starter/src/app/acceptance/custom-controls.ts +11 -3
- package/templates/starter/src/app/acceptance/export-artifact-coverage.ts +25 -17
- package/templates/starter/src/app/acceptance/feature-verification-selection.test.ts +295 -0
- package/templates/starter/src/app/acceptance/feature-verification-selection.ts +161 -0
- package/templates/starter/src/app/acceptance/infinity-canvas.ts +10 -0
- package/templates/starter/src/app/acceptance/inline-layout.ts +64 -9
- package/templates/starter/src/app/acceptance/interaction-ownership-intent.ts +19 -1
- package/templates/starter/src/app/acceptance/interaction-ownership.ts +18 -2
- package/templates/starter/src/app/acceptance/media-upload.ts +5 -1
- package/templates/starter/src/app/acceptance/motion-reference-evidence-validation.mjs +65 -0
- package/templates/starter/src/app/acceptance/motion-reference-evidence-windows.mjs +301 -0
- package/templates/starter/src/app/acceptance/motion-reference-evidence.d.mts +11 -0
- package/templates/starter/src/app/acceptance/motion-reference-evidence.mjs +145 -0
- package/templates/starter/src/app/acceptance/motion-reference-study-behaviors.ts +162 -0
- package/templates/starter/src/app/acceptance/motion-reference-study-coverage.ts +206 -0
- package/templates/starter/src/app/acceptance/motion-reference-study-identity.ts +129 -0
- package/templates/starter/src/app/acceptance/motion-reference-study-partitions.ts +186 -0
- package/templates/starter/src/app/acceptance/motion-reference-study.ts +90 -0
- package/templates/starter/src/app/acceptance/orientation-gizmo.ts +18 -11
- package/templates/starter/src/app/acceptance/output-background-rules.ts +2 -2
- package/templates/starter/src/app/acceptance/output-export-actions.test.ts +9 -1
- package/templates/starter/src/app/acceptance/output-export-actions.ts +14 -22
- package/templates/starter/src/app/acceptance/output-export-layout-rules.ts +22 -10
- package/templates/starter/src/app/acceptance/output-export-model.ts +58 -11
- package/templates/starter/src/app/acceptance/output-export.ts +25 -10
- package/templates/starter/src/app/acceptance/output-video-export-rules.ts +99 -0
- package/templates/starter/src/app/acceptance/reference-study-types.ts +167 -17
- package/templates/starter/src/app/acceptance/runtime-coverage.ts +6 -1
- package/templates/starter/src/app/acceptance/selection-scope.test.ts +200 -0
- package/templates/starter/src/app/acceptance/selection-scope.ts +151 -0
- package/templates/starter/src/app/acceptance/transfer-mode-types.ts +114 -0
- package/templates/starter/src/app/acceptance/types.ts +65 -125
- package/templates/starter/src/app/acceptance/validate-coverage.ts +33 -5
- package/templates/starter/src/app/starter-acceptance-data.ts +1 -0
- package/templates/starter/src/app/starter-acceptance.animation-intent.test.ts +3 -0
- package/templates/starter/src/app/starter-acceptance.artifact-export-intent.test.ts +312 -0
- package/templates/starter/src/app/starter-acceptance.background-export.test.ts +35 -0
- package/templates/starter/src/app/starter-acceptance.canvas-sizing.test.ts +18 -1
- package/templates/starter/src/app/starter-acceptance.color-row-grouping.test.ts +118 -0
- package/templates/starter/src/app/starter-acceptance.compound-part-coverage.test.ts +66 -1
- package/templates/starter/src/app/starter-acceptance.contract-fixtures.test.ts +41 -0
- package/templates/starter/src/app/starter-acceptance.contract-fixtures.ts +113 -16
- package/templates/starter/src/app/starter-acceptance.control-applicability.test.ts +225 -0
- package/templates/starter/src/app/starter-acceptance.control-label-context.test.ts +1 -0
- package/templates/starter/src/app/starter-acceptance.control-labels.test.ts +78 -3
- package/templates/starter/src/app/starter-acceptance.control-naming-rules.test.ts +77 -1
- package/templates/starter/src/app/starter-acceptance.control-order.test.ts +58 -3
- package/templates/starter/src/app/starter-acceptance.control-state.test.ts +0 -111
- package/templates/starter/src/app/starter-acceptance.custom-control-collections.test.ts +3 -1
- package/templates/starter/src/app/starter-acceptance.custom-control-fit-check.test.ts +1 -1
- package/templates/starter/src/app/starter-acceptance.custom-control-valid.test.ts +1 -1
- package/templates/starter/src/app/starter-acceptance.export-artifact.test.ts +74 -3
- package/templates/starter/src/app/starter-acceptance.export-test-utils.ts +26 -0
- package/templates/starter/src/app/{starter-acceptance.image-video-export-settings.test.ts → starter-acceptance.image-export-settings.test.ts} +39 -9
- package/templates/starter/src/app/starter-acceptance.interaction-ownership.test.ts +31 -3
- package/templates/starter/src/app/starter-acceptance.layers.test.ts +2 -1
- package/templates/starter/src/app/starter-acceptance.media-upload.fixtures.ts +11 -1
- package/templates/starter/src/app/starter-acceptance.media-upload.test.ts +56 -0
- package/templates/starter/src/app/starter-acceptance.motion-reference-evidence.test.ts +17 -0
- package/templates/starter/src/app/starter-acceptance.motion-reference-identity.test.ts +163 -0
- package/templates/starter/src/app/starter-acceptance.motion-reference-mapping.test.ts +133 -0
- package/templates/starter/src/app/starter-acceptance.motion-reference-ownership.test.ts +121 -0
- package/templates/starter/src/app/starter-acceptance.motion-reference-partitions.test.ts +210 -0
- package/templates/starter/src/app/starter-acceptance.motion-reference-test-utils.ts +313 -0
- package/templates/starter/src/app/starter-acceptance.output-export-intent.test.ts +458 -0
- package/templates/starter/src/app/starter-acceptance.output-export-rules.test.ts +4 -0
- package/templates/starter/src/app/starter-acceptance.product-output-export.test.ts +116 -104
- package/templates/starter/src/app/starter-acceptance.product-readiness.test.ts +29 -0
- package/templates/starter/src/app/starter-acceptance.product-worklog.test.ts +123 -2
- package/templates/starter/src/app/starter-acceptance.reference-custom-timeline.test.ts +2 -0
- package/templates/starter/src/app/starter-acceptance.reference-foundation.test.ts +8 -0
- package/templates/starter/src/app/starter-acceptance.reference-timeline.test.ts +7 -0
- package/templates/starter/src/app/starter-acceptance.section-cohesion.test.ts +3 -1
- package/templates/starter/src/app/starter-acceptance.section-dependencies.test.ts +35 -24
- package/templates/starter/src/app/starter-acceptance.section-size.test.ts +72 -0
- package/templates/starter/src/app/starter-acceptance.timeline-playback.test.ts +5 -0
- package/templates/starter/src/app/starter-acceptance.ts +45 -10
- package/templates/starter/src/app/starter-acceptance.video-export-settings.test.ts +338 -0
- package/templates/starter/src/app/starter-acceptance.video-reference-study.test.ts +34 -236
- package/templates/starter/src/app/starter-acceptance.view-interaction.test.ts +12 -0
- package/templates/starter/src/app/starter-acceptance.worklog-test-utils.ts +122 -6
- package/templates/starter/src/app/starter-acceptance.worklog.test.ts +152 -16
- package/templates/starter/src/app/starter-performance.gates.test.ts +20 -18
- package/templates/starter/src/app/starter-performance.lifecycle.test.ts +22 -6
- package/templates/starter/src/app/test-evidence/browser-runtime-contract.ts +5 -2
- package/templates/starter/src/routes/index.tsx +1 -0
- package/templates/starter/tsconfig.json +1 -0
- package/templates/ui/components/composites/tabs.tsx +2 -2
- package/templates/ui/components/controls/collection-actions/collection-item-groups.test.tsx +38 -0
- package/templates/ui/components/controls/collection-actions/collection-item-groups.tsx +36 -0
- package/templates/ui/components/controls/collection-actions/index.ts +2 -0
- package/templates/ui/components/controls/file-drop/file-drop-collection-control.tsx +137 -0
- package/templates/ui/components/controls/file-drop/file-drop-control.test.tsx +189 -0
- package/templates/ui/components/controls/file-drop/file-drop-control.tsx +81 -88
- package/templates/ui/components/controls/file-drop/file-drop-presentation.tsx +131 -9
- package/templates/ui/components/controls/file-drop/file-drop-types.ts +36 -22
- package/templates/ui/components/controls/file-drop/index.ts +1 -0
- package/templates/ui/components/controls/index.ts +3 -0
- package/templates/ui/components/controls/range-slider/range-slider-control.tsx +1 -1
- package/templates/ui/components/controls/range-slider/range-slider-value.test.ts +14 -0
- package/templates/ui/components/controls/range-slider/range-slider-value.ts +3 -2
- package/templates/starter/scripts/toolcraft-browser-impact-selection.mjs +0 -26
- package/templates/starter/scripts/toolcraft-delivery-framework-refresh.test.mjs +0 -141
- package/templates/starter/scripts/toolcraft-delivery-functional-changed.test.mjs +0 -468
- package/templates/starter/scripts/toolcraft-delivery-functional-model-lifecycle.test.mjs +0 -254
- package/templates/starter/scripts/toolcraft-delivery-functional-semantic-regression.test.mjs +0 -135
- package/templates/starter/scripts/toolcraft-delivery-performance-iteration-durability.test.mjs +0 -329
- package/templates/starter/scripts/toolcraft-delivery-plan-errors.test.mjs +0 -430
- package/templates/starter/scripts/toolcraft-delivery-plan-functional-model.test.mjs +0 -358
- package/templates/starter/scripts/toolcraft-functional-proof-regression-fixtures.mjs +0 -298
- package/templates/starter/scripts/toolcraft-verification-impact-inventory.d.mts +0 -62
- package/templates/starter/scripts/toolcraft-verification-impact-inventory.mjs +0 -344
- package/templates/starter/scripts/toolcraft-verification-impact-inventory.test.mjs +0 -204
- package/templates/starter/scripts/toolcraft-verification-impact-performance-candidates.test.mjs +0 -210
- package/templates/starter/scripts/toolcraft-verification-impact-resolution.mjs +0 -344
- package/templates/starter/scripts/toolcraft-verification-impact-resolution.test.mjs +0 -270
- package/templates/starter/scripts/toolcraft-verification-impact-semantic-resolution.test.mjs +0 -449
- package/templates/starter/scripts/toolcraft-verification-impact-support-resolution.test.mjs +0 -195
- package/templates/starter/scripts/toolcraft-verification-impact.d.mts +0 -132
- package/templates/starter/scripts/toolcraft-verification-impact.mjs +0 -169
- package/templates/starter/scripts/toolcraft-verification-impact.test.mjs +0 -300
- package/templates/starter/scripts/toolcraft-verification-input-roles.mjs +0 -197
- package/templates/starter/scripts/toolcraft-verification-input-roles.test.mjs +0 -225
- package/templates/starter/src/app/acceptance/condition-exclusivity.test.ts +0 -60
- package/templates/starter/src/app/acceptance/condition-exclusivity.ts +0 -221
- package/templates/starter/src/app/acceptance/video-reference-study.ts +0 -217
- package/templates/starter/src/app/starter-verification-impact.json +0 -15
|
@@ -160,115 +160,4 @@ describe("starter acceptance control state contract", () => {
|
|
|
160
160
|
);
|
|
161
161
|
});
|
|
162
162
|
|
|
163
|
-
it("requires visibleWhen controls to reference a real target and prove hidden behavior", () => {
|
|
164
|
-
const schemaWithVisibleDependency = defineContractSchemaFixture({
|
|
165
|
-
canvas: { enabled: true },
|
|
166
|
-
panels: {
|
|
167
|
-
controls: {
|
|
168
|
-
sections: [
|
|
169
|
-
{
|
|
170
|
-
controls: {
|
|
171
|
-
shadeCount: {
|
|
172
|
-
defaultValue: 2,
|
|
173
|
-
label: "Shades",
|
|
174
|
-
max: 5,
|
|
175
|
-
min: 1,
|
|
176
|
-
step: 1,
|
|
177
|
-
target: "shapes.shadeCount",
|
|
178
|
-
type: "slider",
|
|
179
|
-
variant: "discrete",
|
|
180
|
-
},
|
|
181
|
-
shade3: {
|
|
182
|
-
defaultValue: { hex: "#BBBBBB" },
|
|
183
|
-
label: "Shade 3",
|
|
184
|
-
target: "shapes.color3",
|
|
185
|
-
type: "color",
|
|
186
|
-
visibleWhen: {
|
|
187
|
-
greaterThanOrEqual: 3,
|
|
188
|
-
target: "shapes.count",
|
|
189
|
-
},
|
|
190
|
-
},
|
|
191
|
-
},
|
|
192
|
-
title: "Shapes",
|
|
193
|
-
},
|
|
194
|
-
],
|
|
195
|
-
title: "Controls",
|
|
196
|
-
},
|
|
197
|
-
},
|
|
198
|
-
});
|
|
199
|
-
|
|
200
|
-
expect(
|
|
201
|
-
validateContractAcceptance({
|
|
202
|
-
schema: schemaWithVisibleDependency,
|
|
203
|
-
acceptance: [
|
|
204
|
-
makeControlAcceptance("shapes.shadeCount", "slider"),
|
|
205
|
-
makeControlAcceptance("shapes.color3", "color"),
|
|
206
|
-
],
|
|
207
|
-
}),
|
|
208
|
-
).toEqual(
|
|
209
|
-
expect.arrayContaining([
|
|
210
|
-
expect.stringContaining(
|
|
211
|
-
"visibleWhen target shapes.count does not match another schema control target",
|
|
212
|
-
),
|
|
213
|
-
expect.stringContaining(
|
|
214
|
-
"uses visibleWhen and must declare visibilityCoverage",
|
|
215
|
-
),
|
|
216
|
-
]),
|
|
217
|
-
);
|
|
218
|
-
|
|
219
|
-
const schemaWithValidVisibleDependency = defineContractSchemaFixture({
|
|
220
|
-
canvas: { enabled: true },
|
|
221
|
-
panels: {
|
|
222
|
-
controls: {
|
|
223
|
-
sections: [
|
|
224
|
-
{
|
|
225
|
-
controls: {
|
|
226
|
-
shadeCount: {
|
|
227
|
-
defaultValue: 2,
|
|
228
|
-
label: "Shades",
|
|
229
|
-
max: 5,
|
|
230
|
-
min: 1,
|
|
231
|
-
step: 1,
|
|
232
|
-
target: "shapes.shadeCount",
|
|
233
|
-
type: "slider",
|
|
234
|
-
variant: "discrete",
|
|
235
|
-
},
|
|
236
|
-
shade3: {
|
|
237
|
-
defaultValue: { hex: "#BBBBBB" },
|
|
238
|
-
label: "Shade 3",
|
|
239
|
-
target: "shapes.color3",
|
|
240
|
-
type: "color",
|
|
241
|
-
visibleWhen: {
|
|
242
|
-
greaterThanOrEqual: 3,
|
|
243
|
-
target: "shapes.shadeCount",
|
|
244
|
-
},
|
|
245
|
-
},
|
|
246
|
-
},
|
|
247
|
-
title: "Shapes",
|
|
248
|
-
},
|
|
249
|
-
],
|
|
250
|
-
title: "Controls",
|
|
251
|
-
},
|
|
252
|
-
},
|
|
253
|
-
});
|
|
254
|
-
const errors = validateContractAcceptance({
|
|
255
|
-
schema: schemaWithValidVisibleDependency,
|
|
256
|
-
acceptance: [
|
|
257
|
-
makeControlAcceptance("shapes.shadeCount", "slider"),
|
|
258
|
-
{
|
|
259
|
-
...makeControlAcceptance("shapes.color3", "color"),
|
|
260
|
-
expectedObservable: "Третий цвет доступен только для соответствующего состояния продукта.",
|
|
261
|
-
userAction: "Переключить количество оттенков и проверить оба состояния.",
|
|
262
|
-
visibilityCoverage: ["hidden", "visible"],
|
|
263
|
-
},
|
|
264
|
-
],
|
|
265
|
-
});
|
|
266
|
-
|
|
267
|
-
expect(errors).not.toEqual(
|
|
268
|
-
expect.arrayContaining([
|
|
269
|
-
expect.stringContaining("visibleWhen target"),
|
|
270
|
-
expect.stringContaining("uses visibleWhen and must declare visibilityCoverage"),
|
|
271
|
-
]),
|
|
272
|
-
);
|
|
273
|
-
});
|
|
274
163
|
});
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
} from "./starter-acceptance.contract-fixtures";
|
|
7
7
|
|
|
8
8
|
describe("starter acceptance custom control collection contract", () => {
|
|
9
|
-
it("requires collection-like custom controls to compare
|
|
9
|
+
it("requires collection-like custom controls to compare both cardinality owners and actions", () => {
|
|
10
10
|
const schema = defineContractSchemaFixture({
|
|
11
11
|
canvas: { enabled: true },
|
|
12
12
|
panels: {
|
|
@@ -71,6 +71,7 @@ describe("starter acceptance custom control collection contract", () => {
|
|
|
71
71
|
],
|
|
72
72
|
}),
|
|
73
73
|
).toEqual([
|
|
74
|
+
"Masks / maskEditor (masks) builtInFitCheck.checkedBuiltIns must include sourceCollection when the custom control owns a repeated runtime item set whose cardinality could be source-owned.",
|
|
74
75
|
"Masks / maskEditor (masks) builtInFitCheck.checkedBuiltIns must include collectionActions when the custom control owns a growable, removable, selectable, or reorderable runtime item set.",
|
|
75
76
|
"Masks / maskEditor (masks) builtInFitCheck.checkedBuiltIns must include actions when the custom control exposes local command buttons such as add, remove, delete, duplicate, sort, normalize, or clear.",
|
|
76
77
|
]);
|
|
@@ -135,6 +136,7 @@ describe("starter acceptance custom control collection contract", () => {
|
|
|
135
136
|
],
|
|
136
137
|
}),
|
|
137
138
|
).toEqual([
|
|
139
|
+
"Pattern / patternSet (pattern.set) builtInFitCheck.checkedBuiltIns must include sourceCollection when the custom control owns a repeated runtime item set whose cardinality could be source-owned.",
|
|
138
140
|
"Pattern / patternSet (pattern.set) builtInFitCheck.checkedBuiltIns must include collectionActions when the custom control owns a growable, removable, selectable, or reorderable runtime item set.",
|
|
139
141
|
]);
|
|
140
142
|
});
|
|
@@ -48,7 +48,7 @@ describe("starter acceptance valid custom control contract", () => {
|
|
|
48
48
|
"reorder",
|
|
49
49
|
"selection",
|
|
50
50
|
],
|
|
51
|
-
checkedBuiltIns: ["actions", "collectionActions", "fileDrop", "imagePicker", "select"],
|
|
51
|
+
checkedBuiltIns: ["actions", "collectionActions", "fileDrop", "imagePicker", "select", "sourceCollection"],
|
|
52
52
|
closestBuiltIn: "fileDrop",
|
|
53
53
|
productObservable: "Ordering uploaded glyphs changes the rendered glyph ramp output.",
|
|
54
54
|
whyInsufficient: "FileDrop imports source files, but it does not provide density ordering, per-glyph preview, reorder, and remove behavior in one runtime value.",
|
|
@@ -4,7 +4,9 @@ import { describe, expect, it } from "vitest";
|
|
|
4
4
|
import { getToolcraftExportArtifactCoverageErrors } from "./acceptance/export-artifact-coverage";
|
|
5
5
|
import type { ToolcraftComponentAcceptance } from "./acceptance/types";
|
|
6
6
|
|
|
7
|
-
function createSchema(
|
|
7
|
+
function createSchema(
|
|
8
|
+
roles: readonly ("export-image" | "export-svg" | "export-video")[],
|
|
9
|
+
) {
|
|
8
10
|
return defineToolcraft({
|
|
9
11
|
canvas: { enabled: true },
|
|
10
12
|
panels: {
|
|
@@ -14,9 +16,19 @@ function createSchema(roles: readonly ("export-image" | "export-video")[]) {
|
|
|
14
16
|
controls: {
|
|
15
17
|
output: {
|
|
16
18
|
actions: roles.map((role) => ({
|
|
17
|
-
label:
|
|
19
|
+
label:
|
|
20
|
+
role === "export-image"
|
|
21
|
+
? "Export Image"
|
|
22
|
+
: role === "export-svg"
|
|
23
|
+
? "Export SVG"
|
|
24
|
+
: "Export Video",
|
|
18
25
|
role,
|
|
19
|
-
value:
|
|
26
|
+
value:
|
|
27
|
+
role === "export-image"
|
|
28
|
+
? "export.image"
|
|
29
|
+
: role === "export-svg"
|
|
30
|
+
? "export.svg"
|
|
31
|
+
: "export.video",
|
|
20
32
|
})),
|
|
21
33
|
target: "actions.output",
|
|
22
34
|
type: "panelActions",
|
|
@@ -92,6 +104,65 @@ describe("Toolcraft export artifact acceptance", () => {
|
|
|
92
104
|
]);
|
|
93
105
|
});
|
|
94
106
|
|
|
107
|
+
it("requires exact SVG exported-bytes coverage for a typed SVG action", () => {
|
|
108
|
+
const schema = createSchema(["export-svg"]);
|
|
109
|
+
|
|
110
|
+
expect(
|
|
111
|
+
getToolcraftExportArtifactCoverageErrors({
|
|
112
|
+
acceptance: [
|
|
113
|
+
createAcceptance({
|
|
114
|
+
actionCoverage: ["export.svg"],
|
|
115
|
+
exportArtifactCoverage: "all-required-svg-export-behavior",
|
|
116
|
+
}),
|
|
117
|
+
],
|
|
118
|
+
schema,
|
|
119
|
+
}),
|
|
120
|
+
).toEqual([]);
|
|
121
|
+
expect(
|
|
122
|
+
getToolcraftExportArtifactCoverageErrors({
|
|
123
|
+
acceptance: [
|
|
124
|
+
createAcceptance({
|
|
125
|
+
actionCoverage: ["export.svg"],
|
|
126
|
+
exportArtifactCoverage: "all-required-image-export-behavior",
|
|
127
|
+
}),
|
|
128
|
+
],
|
|
129
|
+
schema,
|
|
130
|
+
}),
|
|
131
|
+
).toEqual([
|
|
132
|
+
expect.stringContaining("without a matching typed export action"),
|
|
133
|
+
expect.stringContaining("all-required-svg-export-behavior"),
|
|
134
|
+
]);
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
it("rejects typed export roles outside sticky panelActions", () => {
|
|
138
|
+
const schema = defineToolcraft({
|
|
139
|
+
canvas: { enabled: true },
|
|
140
|
+
panels: {
|
|
141
|
+
controls: {
|
|
142
|
+
sections: [
|
|
143
|
+
{
|
|
144
|
+
controls: {
|
|
145
|
+
local: {
|
|
146
|
+
actions: [{ role: "export-svg", value: "export.svg" }],
|
|
147
|
+
target: "local.actions",
|
|
148
|
+
type: "actions",
|
|
149
|
+
},
|
|
150
|
+
},
|
|
151
|
+
id: "local",
|
|
152
|
+
},
|
|
153
|
+
],
|
|
154
|
+
title: "Controls",
|
|
155
|
+
},
|
|
156
|
+
},
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
expect(
|
|
160
|
+
getToolcraftExportArtifactCoverageErrors({ acceptance: [], schema }),
|
|
161
|
+
).toContain(
|
|
162
|
+
'Typed export-svg action "export.svg" must be declared in sticky panelActions.',
|
|
163
|
+
);
|
|
164
|
+
});
|
|
165
|
+
|
|
95
166
|
it("requires exported bytes plus automated browser proof", () => {
|
|
96
167
|
const errors = getToolcraftExportArtifactCoverageErrors({
|
|
97
168
|
acceptance: [
|
|
@@ -1,3 +1,25 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
ToolcraftArtifactExportIntent,
|
|
3
|
+
ToolcraftProductReadiness,
|
|
4
|
+
} from "./acceptance/types";
|
|
5
|
+
|
|
6
|
+
export function makeExportSettingsProductReadiness(
|
|
7
|
+
exportIntent: ToolcraftArtifactExportIntent,
|
|
8
|
+
): Extract<ToolcraftProductReadiness, { mode: "product" }> {
|
|
9
|
+
return {
|
|
10
|
+
exportIntent,
|
|
11
|
+
interactionOwnership: [],
|
|
12
|
+
mode: "product",
|
|
13
|
+
productName: "Export settings fixture",
|
|
14
|
+
productSummary: "A synthetic product for image, SVG, and video export settings.",
|
|
15
|
+
requestedBehavior: "Export the explicitly requested artifact types.",
|
|
16
|
+
viewInteraction: {
|
|
17
|
+
mode: "non-spatial",
|
|
18
|
+
reason: "The synthetic output is two-dimensional.",
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
|
|
1
23
|
export function makeBackgroundSection() {
|
|
2
24
|
return {
|
|
3
25
|
controls: {
|
|
@@ -105,3 +127,7 @@ export function textLooksLikePngExport(text: string): boolean {
|
|
|
105
127
|
export function textLooksLikeVideoExport(text: string): boolean {
|
|
106
128
|
return /\b(export|download)\b/i.test(text) && /\b(video|mp4|webm|mov)\b/i.test(text);
|
|
107
129
|
}
|
|
130
|
+
|
|
131
|
+
export function textLooksLikeSvgExport(text: string): boolean {
|
|
132
|
+
return /\b(export|download)\b/i.test(text) && /\bsvg\b|\bvector\b/i.test(text);
|
|
133
|
+
}
|
|
@@ -3,12 +3,28 @@ import { describe, expect, it } from "vitest";
|
|
|
3
3
|
import { defineContractSchemaFixture, validateContractAcceptance } from "./starter-acceptance.contract-fixtures";
|
|
4
4
|
import {
|
|
5
5
|
makeBackgroundSection,
|
|
6
|
+
makeExportSettingsProductReadiness,
|
|
6
7
|
makeImageExportSection,
|
|
7
8
|
makeVideoExportSection,
|
|
8
9
|
} from "./starter-acceptance.export-test-utils";
|
|
9
10
|
import { makeControlAcceptance } from "./starter-acceptance.test-utils";
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
const imageOnlyProductReadiness = makeExportSettingsProductReadiness({
|
|
13
|
+
image: { mode: "toolcraft-default" },
|
|
14
|
+
svg: { mode: "not-requested" },
|
|
15
|
+
video: { mode: "not-requested" },
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
const imageAndVideoProductReadiness = makeExportSettingsProductReadiness({
|
|
19
|
+
image: { mode: "toolcraft-default" },
|
|
20
|
+
svg: { mode: "not-requested" },
|
|
21
|
+
video: {
|
|
22
|
+
evidence: "The user explicitly requested video delivery.",
|
|
23
|
+
mode: "user-requested",
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
describe("Toolcraft image export settings acceptance contract", () => {
|
|
12
28
|
it("requires still-output apps to expose image export format and resolution settings", () => {
|
|
13
29
|
const schemaWithoutImageExportSettings = defineContractSchemaFixture({
|
|
14
30
|
canvas: {
|
|
@@ -58,13 +74,15 @@ describe("Toolcraft image and video export settings acceptance contract", () =>
|
|
|
58
74
|
componentType: "panelActions",
|
|
59
75
|
evidence: "exported-bytes",
|
|
60
76
|
expectedObservable: "Export PNG creates output bytes and reads image format, image resolution, background color, and include-background state.",
|
|
77
|
+
exportArtifactCoverage: "all-required-image-export-behavior",
|
|
61
78
|
fixture: "export fixture",
|
|
62
79
|
id: "actions.output",
|
|
63
80
|
kind: "control",
|
|
64
81
|
target: "actions.output",
|
|
65
|
-
userAction: "Toggle Include off, verify preview has no product background, export PNG with alpha, and verify
|
|
82
|
+
userAction: "Toggle Include off, verify preview has no product background, export PNG with alpha, and verify the image artifact preserves transparency.",
|
|
66
83
|
},
|
|
67
84
|
],
|
|
85
|
+
productReadiness: imageOnlyProductReadiness,
|
|
68
86
|
}),
|
|
69
87
|
).toEqual(
|
|
70
88
|
expect.arrayContaining([
|
|
@@ -142,6 +160,7 @@ describe("Toolcraft image and video export settings acceptance contract", () =>
|
|
|
142
160
|
componentType: "panelActions",
|
|
143
161
|
evidence: "exported-bytes",
|
|
144
162
|
expectedObservable: "Export PNG creates output bytes and reads image format, image resolution, background color, and include-background state. JPG changes file type; 8K changes exported pixel dimensions to an 8192px long edge.",
|
|
163
|
+
exportArtifactCoverage: "all-required-image-export-behavior",
|
|
145
164
|
fixture: "export fixture",
|
|
146
165
|
id: "actions.output",
|
|
147
166
|
kind: "control",
|
|
@@ -149,6 +168,7 @@ describe("Toolcraft image and video export settings acceptance contract", () =>
|
|
|
149
168
|
userAction: "Set format to JPG and resolution to 8K, then export and decode the output image to verify file type and long-edge dimensions.",
|
|
150
169
|
},
|
|
151
170
|
],
|
|
171
|
+
productReadiness: imageOnlyProductReadiness,
|
|
152
172
|
}),
|
|
153
173
|
).not.toEqual(
|
|
154
174
|
expect.arrayContaining([
|
|
@@ -159,7 +179,7 @@ describe("Toolcraft image and video export settings acceptance contract", () =>
|
|
|
159
179
|
);
|
|
160
180
|
});
|
|
161
181
|
|
|
162
|
-
it("requires
|
|
182
|
+
it("requires explicit image-plus-video delivery to expose Image Export before Video Export", () => {
|
|
163
183
|
const schemaWithoutImageSettings = defineContractSchemaFixture({
|
|
164
184
|
canvas: {
|
|
165
185
|
enabled: true,
|
|
@@ -211,19 +231,24 @@ describe("Toolcraft image and video export settings acceptance contract", () =>
|
|
|
211
231
|
{
|
|
212
232
|
actionCoverage: ["export.video", "export.png"],
|
|
213
233
|
automated: true,
|
|
214
|
-
automatedTestName: "exports
|
|
234
|
+
automatedTestName: "exports image and explicitly requested video output",
|
|
215
235
|
browser: true,
|
|
216
236
|
browserTestName: "browser: exports video and image output",
|
|
217
237
|
componentType: "panelActions",
|
|
218
238
|
evidence: "exported-bytes",
|
|
219
239
|
expectedObservable: "Export Video and Export PNG both create output bytes and read their runtime export settings.",
|
|
220
|
-
|
|
240
|
+
exportArtifactCoverage: [
|
|
241
|
+
"all-required-image-export-behavior",
|
|
242
|
+
"all-required-video-export-behavior",
|
|
243
|
+
],
|
|
244
|
+
fixture: "explicit image-plus-video export fixture",
|
|
221
245
|
id: "actions.output",
|
|
222
246
|
kind: "control",
|
|
223
247
|
target: "actions.output",
|
|
224
|
-
userAction: "Export video and PNG
|
|
248
|
+
userAction: "Export video and PNG with their configured settings, then verify both files exist.",
|
|
225
249
|
},
|
|
226
250
|
],
|
|
251
|
+
productReadiness: imageAndVideoProductReadiness,
|
|
227
252
|
}),
|
|
228
253
|
).toEqual(
|
|
229
254
|
expect.arrayContaining([
|
|
@@ -234,7 +259,7 @@ describe("Toolcraft image and video export settings acceptance contract", () =>
|
|
|
234
259
|
);
|
|
235
260
|
});
|
|
236
261
|
|
|
237
|
-
it("accepts
|
|
262
|
+
it("accepts explicit image-plus-video delivery with Image Export immediately before Video Export", () => {
|
|
238
263
|
const schemaWithDualExportSettings = defineContractSchemaFixture({
|
|
239
264
|
canvas: {
|
|
240
265
|
enabled: true,
|
|
@@ -303,19 +328,24 @@ describe("Toolcraft image and video export settings acceptance contract", () =>
|
|
|
303
328
|
{
|
|
304
329
|
actionCoverage: ["export.video", "export.png"],
|
|
305
330
|
automated: true,
|
|
306
|
-
automatedTestName: "exports
|
|
331
|
+
automatedTestName: "exports image and explicitly requested video output",
|
|
307
332
|
browser: true,
|
|
308
333
|
browserTestName: "browser: exports video and image output",
|
|
309
334
|
componentType: "panelActions",
|
|
310
335
|
evidence: "exported-bytes",
|
|
311
336
|
expectedObservable: "Export Video and Export PNG both create output bytes and read their runtime export settings.",
|
|
312
|
-
|
|
337
|
+
exportArtifactCoverage: [
|
|
338
|
+
"all-required-image-export-behavior",
|
|
339
|
+
"all-required-video-export-behavior",
|
|
340
|
+
],
|
|
341
|
+
fixture: "explicit image-plus-video export fixture",
|
|
313
342
|
id: "actions.output",
|
|
314
343
|
kind: "control",
|
|
315
344
|
target: "actions.output",
|
|
316
345
|
userAction: "Choose JPG and 8K, choose MP4 and Current, then export PNG and video and verify both outputs use their selected settings.",
|
|
317
346
|
},
|
|
318
347
|
],
|
|
348
|
+
productReadiness: imageAndVideoProductReadiness,
|
|
319
349
|
}),
|
|
320
350
|
).not.toEqual(
|
|
321
351
|
expect.arrayContaining([
|
|
@@ -70,15 +70,15 @@ function ownership({
|
|
|
70
70
|
source?: ToolcraftInteractionOwnershipEntry["evidence"]["source"];
|
|
71
71
|
surface: ToolcraftInteractionSurface;
|
|
72
72
|
}): ToolcraftInteractionOwnershipEntry {
|
|
73
|
-
|
|
73
|
+
const base = {
|
|
74
74
|
alternative: {
|
|
75
75
|
reason:
|
|
76
76
|
surface === "canvas"
|
|
77
77
|
? "A panel copy would separate the same operation from visible output without adding a useful capability."
|
|
78
78
|
: "A canvas copy would add output chrome without improving this non-spatial operation.",
|
|
79
|
-
surface: surface === "canvas" ? "panel" : "canvas"
|
|
79
|
+
surface: (surface === "canvas" ? "panel" : "canvas") as
|
|
80
|
+
ToolcraftInteractionSurface,
|
|
80
81
|
},
|
|
81
|
-
capability,
|
|
82
82
|
evidence: {
|
|
83
83
|
detail:
|
|
84
84
|
source === "reference"
|
|
@@ -94,12 +94,30 @@ function ownership({
|
|
|
94
94
|
surface,
|
|
95
95
|
target: "output.position",
|
|
96
96
|
};
|
|
97
|
+
|
|
98
|
+
if (
|
|
99
|
+
capability === "precise-value-entry" ||
|
|
100
|
+
capability === "property-edit"
|
|
101
|
+
) {
|
|
102
|
+
return {
|
|
103
|
+
...base,
|
|
104
|
+
capability,
|
|
105
|
+
selectionScope: { mode: "global" },
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return { ...base, capability };
|
|
97
110
|
}
|
|
98
111
|
|
|
99
112
|
function readiness(
|
|
100
113
|
interactionOwnership: readonly ToolcraftInteractionOwnershipEntry[],
|
|
101
114
|
): ToolcraftProductReadiness {
|
|
102
115
|
return {
|
|
116
|
+
exportIntent: {
|
|
117
|
+
image: { mode: "toolcraft-default" },
|
|
118
|
+
svg: { mode: "not-requested" },
|
|
119
|
+
video: { mode: "not-requested" },
|
|
120
|
+
},
|
|
103
121
|
interactionOwnership,
|
|
104
122
|
mode: "product",
|
|
105
123
|
productName: "Interaction fixture",
|
|
@@ -151,6 +169,11 @@ function acceptance({
|
|
|
151
169
|
describe("Toolcraft interaction surface ownership", () => {
|
|
152
170
|
it("runs ownership validation through the protected acceptance pipeline", () => {
|
|
153
171
|
const productReadiness = {
|
|
172
|
+
exportIntent: {
|
|
173
|
+
image: { mode: "toolcraft-default" },
|
|
174
|
+
svg: { mode: "not-requested" },
|
|
175
|
+
video: { mode: "not-requested" },
|
|
176
|
+
},
|
|
154
177
|
mode: "product",
|
|
155
178
|
productName: "Legacy fixture",
|
|
156
179
|
productSummary: "A product declaration created before interaction ownership.",
|
|
@@ -172,6 +195,11 @@ describe("Toolcraft interaction surface ownership", () => {
|
|
|
172
195
|
|
|
173
196
|
it("rejects product readiness that omits the ownership inventory", () => {
|
|
174
197
|
const productReadiness = {
|
|
198
|
+
exportIntent: {
|
|
199
|
+
image: { mode: "toolcraft-default" },
|
|
200
|
+
svg: { mode: "not-requested" },
|
|
201
|
+
video: { mode: "not-requested" },
|
|
202
|
+
},
|
|
175
203
|
mode: "product",
|
|
176
204
|
productName: "Legacy fixture",
|
|
177
205
|
productSummary: "A product declaration created before interaction ownership.",
|
|
@@ -196,7 +196,8 @@ describe("starter acceptance layers contract", () => {
|
|
|
196
196
|
}),
|
|
197
197
|
).toEqual(
|
|
198
198
|
expect.arrayContaining([
|
|
199
|
-
'
|
|
199
|
+
'selectedLayer.opacity must declare selectionScopeCoverage "two-entity-isolation" proving edits stay on the selected entity.',
|
|
200
|
+
'selectedLayer.opacity targets selectedLayer.* and must declare layerCoverage "selected-layer-controls" together with two-entity isolation.',
|
|
200
201
|
]),
|
|
201
202
|
);
|
|
202
203
|
});
|
|
@@ -60,7 +60,11 @@ export function createSingleFileDropSchema({
|
|
|
60
60
|
});
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
export function createMultipleFileDropSchema(
|
|
63
|
+
export function createMultipleFileDropSchema({
|
|
64
|
+
collectionActions = false,
|
|
65
|
+
}: {
|
|
66
|
+
collectionActions?: boolean;
|
|
67
|
+
} = {}) {
|
|
64
68
|
return defineContractSchemaFixture({
|
|
65
69
|
canvas: { enabled: true },
|
|
66
70
|
panels: {
|
|
@@ -69,6 +73,12 @@ export function createMultipleFileDropSchema() {
|
|
|
69
73
|
{
|
|
70
74
|
controls: {
|
|
71
75
|
sources: {
|
|
76
|
+
...(collectionActions
|
|
77
|
+
? {
|
|
78
|
+
assetKind: "file" as const,
|
|
79
|
+
variant: "collection-actions",
|
|
80
|
+
}
|
|
81
|
+
: {}),
|
|
72
82
|
defaultValue: [],
|
|
73
83
|
label: "Source images",
|
|
74
84
|
multiple: true,
|
|
@@ -15,6 +15,11 @@ import {
|
|
|
15
15
|
} from "./starter-acceptance.media-upload.fixtures";
|
|
16
16
|
|
|
17
17
|
const layeredMediaProductReadiness: ToolcraftProductReadiness = {
|
|
18
|
+
exportIntent: {
|
|
19
|
+
image: { mode: "toolcraft-default" },
|
|
20
|
+
svg: { mode: "not-requested" },
|
|
21
|
+
video: { mode: "not-requested" },
|
|
22
|
+
},
|
|
18
23
|
interactionOwnership: [
|
|
19
24
|
{
|
|
20
25
|
alternative: {
|
|
@@ -34,6 +39,28 @@ const layeredMediaProductReadiness: ToolcraftProductReadiness = {
|
|
|
34
39
|
surface: "panel",
|
|
35
40
|
target: "media.sources",
|
|
36
41
|
},
|
|
42
|
+
{
|
|
43
|
+
alternative: {
|
|
44
|
+
reason:
|
|
45
|
+
"Canvas transform buttons would duplicate precise actions already owned by Layers.",
|
|
46
|
+
surface: "canvas",
|
|
47
|
+
},
|
|
48
|
+
capability: "property-edit",
|
|
49
|
+
evidence: {
|
|
50
|
+
detail:
|
|
51
|
+
"The product requires transforms to apply only to the layer selected in Layers.",
|
|
52
|
+
source: "user-request",
|
|
53
|
+
},
|
|
54
|
+
id: "layers-selected-transform",
|
|
55
|
+
reason:
|
|
56
|
+
"The Layers property action remains bound to the explicitly selected image.",
|
|
57
|
+
selectionScope: {
|
|
58
|
+
mode: "selected-entity",
|
|
59
|
+
selectionInteractionId: "layers-media-management",
|
|
60
|
+
},
|
|
61
|
+
surface: "panel",
|
|
62
|
+
target: "selectedLayer.transform",
|
|
63
|
+
},
|
|
37
64
|
],
|
|
38
65
|
mode: "product",
|
|
39
66
|
productName: "Layered media fixture",
|
|
@@ -80,6 +107,10 @@ function createLayerAcceptance({
|
|
|
80
107
|
kind: "runtime",
|
|
81
108
|
layerCoverage,
|
|
82
109
|
mediaLifecycleCoverage,
|
|
110
|
+
selectionScopeCoverage:
|
|
111
|
+
layerCoverage === "selected-layer-controls"
|
|
112
|
+
? "two-entity-isolation"
|
|
113
|
+
: undefined,
|
|
83
114
|
target,
|
|
84
115
|
userAction: `Exercise ${id} through the runtime Layers panel.`,
|
|
85
116
|
};
|
|
@@ -127,6 +158,7 @@ function createLayeredMediaAcceptance({
|
|
|
127
158
|
? [
|
|
128
159
|
createLayerAcceptance({
|
|
129
160
|
id: "layers.selected-transform",
|
|
161
|
+
interactionId: "layers-selected-transform",
|
|
130
162
|
layerCoverage: "selected-layer-controls",
|
|
131
163
|
mediaLifecycleCoverage: [
|
|
132
164
|
"rotate",
|
|
@@ -284,6 +316,30 @@ describe("Toolcraft media upload acceptance coverage", () => {
|
|
|
284
316
|
).toEqual([]);
|
|
285
317
|
});
|
|
286
318
|
|
|
319
|
+
it("does not require reorder coverage from collection-actions upload slots", () => {
|
|
320
|
+
const schema = createMultipleFileDropSchema({ collectionActions: true });
|
|
321
|
+
|
|
322
|
+
const errors = validateContractAcceptance({
|
|
323
|
+
schema,
|
|
324
|
+
acceptance: [
|
|
325
|
+
createFileDropAcceptance({
|
|
326
|
+
automatedTestName: "source files add and remove slots",
|
|
327
|
+
browserTestName: "browser: source files add and remove slots",
|
|
328
|
+
expectedObservable:
|
|
329
|
+
"Compact plus adds an empty upload slot and compact minus removes the final slot or attached file.",
|
|
330
|
+
fixture: "source file fixture",
|
|
331
|
+
id: "media.sources",
|
|
332
|
+
mediaLifecycleCoverage: ["upload", "remove", "reset"],
|
|
333
|
+
target: "media.sources",
|
|
334
|
+
userAction:
|
|
335
|
+
"Add an upload slot, attach a file, remove the final slot, and reset.",
|
|
336
|
+
}),
|
|
337
|
+
],
|
|
338
|
+
});
|
|
339
|
+
|
|
340
|
+
expect(errors.filter((error) => error.includes("reorder"))).toEqual([]);
|
|
341
|
+
});
|
|
342
|
+
|
|
287
343
|
it("assigns reorder and selected image transform proof to Layers without duplicating fileDrop claims", () => {
|
|
288
344
|
const fileDropSchema = createMultipleFileDropSchema();
|
|
289
345
|
const layeredSchema = {
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
defineToolcraftMotionReferenceEvidence,
|
|
5
|
+
} from "./acceptance/motion-reference-evidence.mjs";
|
|
6
|
+
import type { ToolcraftMotionReferenceEvidence } from "./acceptance/reference-study-types";
|
|
7
|
+
|
|
8
|
+
describe("Toolcraft motion reference evidence decoder", () => {
|
|
9
|
+
it("exposes an exact checked TypeScript boundary without a cast", () => {
|
|
10
|
+
const defineEvidence: (
|
|
11
|
+
value: unknown,
|
|
12
|
+
) => ToolcraftMotionReferenceEvidence =
|
|
13
|
+
defineToolcraftMotionReferenceEvidence;
|
|
14
|
+
|
|
15
|
+
expect(() => defineEvidence({})).toThrow(/motion reference evidence/iu);
|
|
16
|
+
});
|
|
17
|
+
});
|