@pixel-point/toolcraft 0.0.16 → 0.0.18

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.
Files changed (313) hide show
  1. package/package.json +1 -1
  2. package/src/generate-performance-iteration-execution.test.mjs +2 -2
  3. package/src/generate-test-demand-only-lifecycle.mjs +14 -3
  4. package/src/generate-test-dependency-sandbox.mjs +42 -5
  5. package/src/generate-test-doc-assertions.mjs +109 -69
  6. package/src/generate-test-doc-assertions.test.mjs +65 -0
  7. package/src/generate-test-doc-policy-assertions.mjs +92 -0
  8. package/src/generate-test-file-assertions.mjs +36 -118
  9. package/src/generate-test-output-assertions.mjs +95 -0
  10. package/src/generate-test-package-assertions.mjs +6 -0
  11. package/src/generate-test-performance-boundary-assertions.mjs +45 -0
  12. package/src/generate-test-product-fixture.mjs +1 -0
  13. package/src/generate-test-product-fixture.test.mjs +18 -0
  14. package/src/generate-test-product-iteration.mjs +1 -0
  15. package/src/generate-test-product-iteration.test.mjs +18 -0
  16. package/src/generate-test-runtime-boundary-assertions.mjs +158 -0
  17. package/src/generate-test-standalone-assertions.mjs +10 -0
  18. package/src/generate-test-standalone-delivery-stages.mjs +14 -6
  19. package/src/generate.test.mjs +14 -0
  20. package/templates/runtime/contracts/component-contracts.choices.test.ts +59 -12
  21. package/templates/runtime/contracts/component-contracts.choices.ts +58 -12
  22. package/templates/runtime/contracts/component-contracts.inputs.test.ts +6 -6
  23. package/templates/runtime/contracts/component-contracts.inputs.ts +6 -6
  24. package/templates/runtime/contracts/component-contracts.media-custom.test.ts +8 -2
  25. package/templates/runtime/contracts/component-contracts.media-custom.ts +8 -2
  26. package/templates/runtime/contracts/component-contracts.runtime-acceptance.test.ts +21 -6
  27. package/templates/runtime/contracts/component-contracts.runtime-labels.test.ts +7 -1
  28. package/templates/runtime/contracts/component-contracts.runtime-panels.test.ts +4 -1
  29. package/templates/runtime/contracts/component-contracts.runtime-shell.test.ts +4 -1
  30. package/templates/runtime/contracts/component-contracts.runtime.ts +15 -10
  31. package/templates/runtime/contracts/component-contracts.test.ts +2 -0
  32. package/templates/runtime/contracts/decision-contracts.test.ts +43 -4
  33. package/templates/runtime/contracts/decision-contracts.ts +10 -10
  34. package/templates/runtime/contracts/performance-verification-policy.test.ts +59 -6
  35. package/templates/runtime/contracts/performance-verification-policy.ts +5 -2
  36. package/templates/runtime/export/artifact-download.test.ts +71 -0
  37. package/templates/runtime/export/artifact-download.ts +80 -0
  38. package/templates/runtime/export/artifact-export-request.ts +23 -0
  39. package/templates/runtime/export/artifact-export-settings.test.ts +75 -0
  40. package/templates/runtime/export/artifact-export-settings.ts +96 -0
  41. package/templates/runtime/export/artifact-frame-renderer.test.ts +107 -0
  42. package/templates/runtime/export/artifact-frame-renderer.ts +96 -0
  43. package/templates/runtime/export/artifact-frame-state.test.ts +54 -0
  44. package/templates/runtime/export/artifact-frame-state.ts +44 -0
  45. package/templates/runtime/export/artifact-scene-frame.test.ts +84 -0
  46. package/templates/runtime/export/artifact-scene-frame.ts +118 -0
  47. package/templates/runtime/export/export-background.ts +46 -0
  48. package/templates/runtime/export/export-error.ts +43 -0
  49. package/templates/runtime/export/export.test.ts +49 -226
  50. package/templates/runtime/export/image-artifact-export.test.ts +111 -0
  51. package/templates/runtime/export/image-artifact-export.ts +145 -0
  52. package/templates/runtime/export/index.ts +44 -3
  53. package/templates/runtime/export/product-export-renderer.test.ts +77 -0
  54. package/templates/runtime/export/product-export-renderer.ts +63 -0
  55. package/templates/runtime/export/video-artifact-export.test.ts +166 -0
  56. package/templates/runtime/export/video-artifact-export.ts +164 -0
  57. package/templates/runtime/export/video-encoding-backend.ts +124 -0
  58. package/templates/runtime/export/video-encoding-policy.test.ts +68 -0
  59. package/templates/runtime/export/video-encoding-policy.ts +86 -0
  60. package/templates/runtime/export/video-frame-schedule.test.ts +58 -0
  61. package/templates/runtime/export/video-frame-schedule.ts +42 -0
  62. package/templates/runtime/index.ts +3 -0
  63. package/templates/runtime/model-import/model-import-limits.ts +15 -4
  64. package/templates/runtime/react/app-shell/runtime-public-api-runtime.test.tsx +291 -0
  65. package/templates/runtime/react/app-shell/runtime-public-api-test-support.ts +21 -0
  66. package/templates/runtime/react/app-shell/runtime-public-api.test.tsx +15 -304
  67. package/templates/runtime/react/app-shell/toolcraft-app.scene-export.test.tsx +41 -27
  68. package/templates/runtime/react/app-shell/toolcraft-app.tsx +39 -11
  69. package/templates/runtime/react/app-shell/toolcraft-source-asset-context.test.tsx +16 -57
  70. package/templates/runtime/react/app-shell/toolcraft-source-asset-context.tsx +75 -434
  71. package/templates/runtime/react/app-shell/toolcraft-source-asset-owner.test.ts +194 -0
  72. package/templates/runtime/react/app-shell/toolcraft-source-asset-owner.ts +227 -0
  73. package/templates/runtime/react/app-shell/toolcraft-source-asset-provider-ownership.test.tsx +243 -0
  74. package/templates/runtime/react/app-shell/toolcraft-source-asset-test-support.ts +51 -0
  75. package/templates/runtime/react/app-shell/toolcraft-unavailable-resource-proof.test.ts +138 -0
  76. package/templates/runtime/react/app-shell/toolcraft-unavailable-resource-proof.ts +378 -0
  77. package/templates/runtime/react/canvas/canvas-shell-rendering.test.tsx +76 -0
  78. package/templates/runtime/react/canvas/canvas-shell-test-utils.tsx +13 -1
  79. package/templates/runtime/react/canvas/canvas-shell.tsx +16 -1
  80. package/templates/runtime/react/canvas/product-scene-surface.test.tsx +195 -0
  81. package/templates/runtime/react/canvas/product-scene-surface.tsx +155 -0
  82. package/templates/runtime/react/canvas/runtime-scene-export.ts +1 -1
  83. package/templates/runtime/react/controls-panel/__tests__/control-conditions.test.ts +61 -0
  84. package/templates/runtime/react/controls-panel/__tests__/controls-panel.collection-actions.test.tsx +89 -0
  85. package/templates/runtime/react/controls-panel/__tests__/controls-panel.control-visibility.test.tsx +40 -19
  86. package/templates/runtime/react/controls-panel/__tests__/controls-panel.footer-actions.test.tsx +7 -12
  87. package/templates/runtime/react/controls-panel/__tests__/controls-panel.scene-export-actions.test.tsx +18 -84
  88. package/templates/runtime/react/controls-panel/__tests__/controls-panel.source-collection.test.tsx +62 -0
  89. package/templates/runtime/react/controls-panel/__tests__/controls-panel.source-color-bank.test.tsx +67 -0
  90. package/templates/runtime/react/controls-panel/actions/controls-panel-actions.ts +43 -87
  91. package/templates/runtime/react/controls-panel/actions/export-action-runner.ts +68 -0
  92. package/templates/runtime/react/controls-panel/conditions/control-conditions.ts +32 -119
  93. package/templates/runtime/react/controls-panel/layout/controls-panel-control-group.tsx +5 -2
  94. package/templates/runtime/react/controls-panel/layout/controls-panel-layout.tsx +10 -8
  95. package/templates/runtime/react/controls-panel/layout/controls-panel-section.tsx +3 -3
  96. package/templates/runtime/react/controls-panel/renderers/controls-panel-collection-item-fields.test.tsx +63 -0
  97. package/templates/runtime/react/controls-panel/renderers/controls-panel-collection-item-fields.tsx +138 -0
  98. package/templates/runtime/react/controls-panel/renderers/controls-panel-collection-items.tsx +104 -0
  99. package/templates/runtime/react/controls-panel/renderers/controls-panel-collection-renderer.tsx +115 -236
  100. package/templates/runtime/react/controls-panel/renderers/controls-panel-file-drop-item-controls.test.tsx +95 -0
  101. package/templates/runtime/react/controls-panel/renderers/controls-panel-file-drop-item-controls.tsx +82 -0
  102. package/templates/runtime/react/controls-panel/renderers/controls-panel-media-renderer.test.tsx +73 -1
  103. package/templates/runtime/react/controls-panel/renderers/controls-panel-media-renderer.tsx +50 -1
  104. package/templates/runtime/react/controls-panel/renderers/controls-panel-renderer-registry.test.ts +1 -1
  105. package/templates/runtime/react/controls-panel/renderers/controls-panel-renderer-registry.ts +2 -1
  106. package/templates/runtime/react/controls-panel/values/controls-panel-collection-values.ts +38 -6
  107. package/templates/runtime/react/controls-panel/values/controls-panel-value-labels.ts +1 -0
  108. package/templates/runtime/react/index.ts +4 -0
  109. package/templates/runtime/react/model-rendering/model-export.ts +1 -1
  110. package/templates/runtime/react/orientation-gizmo/orientation-gizmo-selection.ts +5 -5
  111. package/templates/runtime/react/orientation-gizmo/use-toolcraft-orientation-control-selection.ts +2 -2
  112. package/templates/runtime/react/panel-host/panel-host-runtime-placement.test.tsx +30 -0
  113. package/templates/runtime/react/panel-host/panel-host.tsx +4 -0
  114. package/templates/runtime/scene/scene-bounds.test.ts +23 -0
  115. package/templates/runtime/scene/scene-bounds.ts +32 -19
  116. package/templates/runtime/schema/app-capabilities.test.ts +4 -0
  117. package/templates/runtime/schema/canvas-render-scale.ts +62 -0
  118. package/templates/runtime/schema/collection-item-controls.ts +29 -0
  119. package/templates/runtime/schema/control-applicability.test.ts +127 -0
  120. package/templates/runtime/schema/control-applicability.ts +433 -0
  121. package/templates/runtime/schema/control-schema-normalization.ts +177 -11
  122. package/templates/runtime/schema/controls-panel-actions.ts +2 -2
  123. package/templates/runtime/schema/controls-panel-section-id.test.ts +1 -1
  124. package/templates/runtime/schema/controls-panel-section-layout.ts +14 -9
  125. package/templates/runtime/schema/controls-panel-section-roundtrip.test.ts +62 -3
  126. package/templates/runtime/schema/define-toolcraft.collection-actions-item-controls.test.ts +127 -0
  127. package/templates/runtime/schema/define-toolcraft.control-sections.test.ts +10 -4
  128. package/templates/runtime/schema/define-toolcraft.file-drop-item-controls.test.ts +98 -0
  129. package/templates/runtime/schema/define-toolcraft.file-drop-normalization.test.ts +27 -0
  130. package/templates/runtime/schema/define-toolcraft.segmented-control-fit.test.ts +20 -2
  131. package/templates/runtime/schema/define-toolcraft.setup-background.test.ts +1 -1
  132. package/templates/runtime/schema/define-toolcraft.setup-canvas.test.ts +16 -3
  133. package/templates/runtime/schema/define-toolcraft.setup-render-scale-timeline.test.ts +71 -3
  134. package/templates/runtime/schema/define-toolcraft.source-collection.test.ts +79 -0
  135. package/templates/runtime/schema/define-toolcraft.ts +1 -1
  136. package/templates/runtime/schema/runtime-setup-section.ts +24 -5
  137. package/templates/runtime/schema/schema-resolvers.ts +0 -56
  138. package/templates/runtime/schema/types.ts +72 -17
  139. package/templates/runtime/state/canvas-background-state.ts +6 -0
  140. package/templates/runtime/testing/performance-render-plan-integration.test.ts +64 -0
  141. package/templates/runtime/testing/performance-renderer-pipeline-validation.ts +18 -1
  142. package/templates/starter/AGENTS.md +18 -15
  143. package/templates/starter/NOTICE.md +6 -0
  144. package/templates/starter/docs/toolcraft/README.md +2 -1
  145. package/templates/starter/docs/toolcraft/acceptance-testing.md +23 -35
  146. package/templates/starter/docs/toolcraft/agent-worklog.md +18 -3
  147. package/templates/starter/docs/toolcraft/assembly-workflow.md +13 -5
  148. package/templates/starter/docs/toolcraft/component-rules.md +8 -6
  149. package/templates/starter/docs/toolcraft/core/control-selection.md +9 -3
  150. package/templates/starter/docs/toolcraft/core/layout.md +7 -7
  151. package/templates/starter/docs/toolcraft/core/media-upload.md +4 -2
  152. package/templates/starter/docs/toolcraft/core/performance.md +14 -3
  153. package/templates/starter/docs/toolcraft/core/runtime-boundary.md +16 -3
  154. package/templates/starter/docs/toolcraft/core/setup-export.md +49 -19
  155. package/templates/starter/docs/toolcraft/core/timeline-animation.md +4 -4
  156. package/templates/starter/docs/toolcraft/custom-controls.md +6 -4
  157. package/templates/starter/docs/toolcraft/decision-contract.md +3 -1
  158. package/templates/starter/docs/toolcraft/performance.md +20 -6
  159. package/templates/starter/docs/toolcraft/renderer-technique.md +5 -1
  160. package/templates/starter/docs/toolcraft/schema-reference.md +23 -25
  161. package/templates/starter/docs/toolcraft/workflow.md +7 -2
  162. package/templates/starter/e2e/app-browser-control-applicability-requirements.spec.ts +163 -0
  163. package/templates/starter/e2e/app-browser-control-coverage.spec.ts +33 -0
  164. package/templates/starter/e2e/app-browser-infinity-canvas-evidence.spec.ts +50 -3
  165. package/templates/starter/e2e/app-browser-orientation-evidence.spec.ts +174 -21
  166. package/templates/starter/e2e/app-browser-render-scale-evidence.spec.ts +60 -6
  167. package/templates/starter/e2e/app-browser-render-scale-requirements.spec.ts +77 -1
  168. package/templates/starter/e2e/app-browser-runtime-provenance.spec.ts +8 -0
  169. package/templates/starter/e2e/app-browser-runtime-reporter.spec.ts +35 -0
  170. package/templates/starter/e2e/app-browser-runtime-requirements.spec.ts +5 -34
  171. package/templates/starter/e2e/app-browser-semantic-evidence.spec.ts +61 -16
  172. package/templates/starter/e2e/app-browser-shell.spec.ts +13 -5
  173. package/templates/starter/e2e/app-performance-path-adapters.ts +8 -1
  174. package/templates/starter/e2e/app-performance.spec.ts +16 -9
  175. package/templates/starter/e2e/{browser-conditional-output-evidence-helpers.ts → browser-background-output-evidence.ts} +0 -68
  176. package/templates/starter/e2e/browser-control-applicability-evidence.ts +114 -0
  177. package/templates/starter/e2e/browser-infinity-canvas-evidence.ts +29 -341
  178. package/templates/starter/e2e/browser-infinity-canvas-unavailable-image-evidence.ts +370 -0
  179. package/templates/starter/e2e/browser-media-export-evidence.spec.ts +77 -0
  180. package/templates/starter/e2e/browser-media-export-evidence.ts +208 -0
  181. package/templates/starter/e2e/browser-orientation-gizmo-evidence-helpers.ts +4 -0
  182. package/templates/starter/e2e/browser-orientation-gizmo-live-preconditions.ts +86 -0
  183. package/templates/starter/e2e/browser-render-scale-evidence.ts +37 -29
  184. package/templates/starter/e2e/browser-runtime-applicability-requirements.ts +84 -0
  185. package/templates/starter/e2e/browser-runtime-evidence-reporter.ts +13 -3
  186. package/templates/starter/e2e/browser-runtime-evidence-requirements.ts +72 -35
  187. package/templates/starter/e2e/browser-semantic-evidence-test-helpers.ts +25 -0
  188. package/templates/starter/e2e/browser-standard-timeline-evidence.ts +106 -0
  189. package/templates/starter/e2e/decoded-pixel-observation.spec.ts +74 -0
  190. package/templates/starter/e2e/decoded-pixel-observation.ts +227 -0
  191. package/templates/starter/e2e/export-artifact-helpers.ts +206 -25
  192. package/templates/starter/e2e/image-artifact-inspection.spec.ts +41 -0
  193. package/templates/starter/e2e/image-artifact-inspection.ts +99 -0
  194. package/templates/starter/e2e/performance-canvas-helpers.ts +22 -21
  195. package/templates/starter/e2e/performance-canvas-quality-guard.spec.ts +312 -0
  196. package/templates/starter/e2e/performance-canvas-quality-guard.ts +196 -0
  197. package/templates/starter/e2e/performance-canvas-quality-observer.ts +351 -0
  198. package/templates/starter/e2e/performance-control-layout-helpers.ts +2 -2
  199. package/templates/starter/e2e/performance-path-adapter-contract.ts +4 -4
  200. package/templates/starter/e2e/performance-path-helpers.spec.ts +203 -70
  201. package/templates/starter/e2e/performance-path-helpers.ts +210 -91
  202. package/templates/starter/e2e/performance-pipeline-evidence-continuity.spec.ts +76 -0
  203. package/templates/starter/e2e/performance-pipeline-evidence-test-fixtures.ts +11 -2
  204. package/templates/starter/e2e/performance-pipeline-invariants.ts +47 -4
  205. package/templates/starter/e2e/performance-render-scale-runner.spec.ts +140 -38
  206. package/templates/starter/e2e/video-artifact-inspection.spec.ts +64 -0
  207. package/templates/starter/e2e/video-artifact-inspection.ts +281 -0
  208. package/templates/starter/gitignore +1 -0
  209. package/templates/starter/package.json +1 -0
  210. package/templates/starter/scripts/check-toolcraft-docs.mjs +17 -0
  211. package/templates/starter/scripts/toolcraft-contract-manifest.json +1 -0
  212. package/templates/starter/scripts/toolcraft-delivery-plan-authority.test.mjs +60 -0
  213. package/templates/starter/scripts/toolcraft-delivery-plan-errors.test.mjs +7 -2
  214. package/templates/starter/scripts/toolcraft-delivery-plan.mjs +7 -3
  215. package/templates/starter/scripts/toolcraft-product-boundary-ast.mjs +95 -103
  216. package/templates/starter/scripts/toolcraft-product-boundary-module-policy.mjs +101 -0
  217. package/templates/starter/scripts/toolcraft-product-boundary.mjs +12 -0
  218. package/templates/starter/scripts/toolcraft-product-boundary.test.mjs +0 -26
  219. package/templates/starter/scripts/toolcraft-product-control-bindings.mjs +182 -0
  220. package/templates/starter/scripts/toolcraft-product-control-boundary.mjs +146 -0
  221. package/templates/starter/scripts/toolcraft-product-control-boundary.test.mjs +186 -0
  222. package/templates/starter/scripts/toolcraft-product-evidence-boundary.test.mjs +85 -20
  223. package/templates/starter/scripts/toolcraft-product-evidence-import-policy.mjs +43 -0
  224. package/templates/starter/scripts/toolcraft-product-export-boundary.mjs +157 -0
  225. package/templates/starter/scripts/toolcraft-product-export-boundary.test.mjs +196 -0
  226. package/templates/starter/scripts/toolcraft-typescript-analysis.d.mts +73 -0
  227. package/templates/starter/scripts/toolcraft-typescript-source-evidence-structure.test.mjs +20 -0
  228. package/templates/starter/scripts/toolcraft-typescript-source-evidence.mjs +1 -0
  229. package/templates/starter/scripts/toolcraft-unavailable-resource-evidence-facade-test-helpers.mjs +318 -0
  230. package/templates/starter/scripts/toolcraft-unavailable-resource-evidence-facade.test.mjs +157 -206
  231. package/templates/starter/scripts/toolcraft-verification-inventory.mjs +1 -0
  232. package/templates/starter/scripts/toolcraft-verification-receipt.test.mjs +51 -0
  233. package/templates/starter/scripts/toolcraft-vite-env-activation.test.mjs +128 -59
  234. package/templates/starter/src/app/acceptance/artifact-export-intent.ts +130 -0
  235. package/templates/starter/src/app/acceptance/conditions.ts +1 -1
  236. package/templates/starter/src/app/acceptance/control-acceptance-context.ts +2 -2
  237. package/templates/starter/src/app/acceptance/control-acceptance-coverage.ts +6 -20
  238. package/templates/starter/src/app/acceptance/control-acceptance-kind-rules.ts +24 -5
  239. package/templates/starter/src/app/acceptance/control-acceptance-policy.ts +2 -13
  240. package/templates/starter/src/app/acceptance/control-applicability-cases.test.ts +321 -0
  241. package/templates/starter/src/app/acceptance/control-applicability-cases.ts +290 -0
  242. package/templates/starter/src/app/acceptance/control-applicability.ts +332 -0
  243. package/templates/starter/src/app/acceptance/control-layout-dependency-rules.ts +20 -9
  244. package/templates/starter/src/app/acceptance/control-layout-entity-rules.ts +4 -6
  245. package/templates/starter/src/app/acceptance/control-layout-model.ts +4 -4
  246. package/templates/starter/src/app/acceptance/control-layout-section-rules.ts +3 -10
  247. package/templates/starter/src/app/acceptance/control-parts.ts +8 -0
  248. package/templates/starter/src/app/acceptance/control-section-entity-cohesion.test.ts +215 -0
  249. package/templates/starter/src/app/acceptance/control-section-entity-cohesion.ts +132 -0
  250. package/templates/starter/src/app/acceptance/control-section-inventory.test.ts +87 -0
  251. package/templates/starter/src/app/acceptance/control-section-inventory.ts +74 -44
  252. package/templates/starter/src/app/acceptance/custom-controls.ts +11 -3
  253. package/templates/starter/src/app/acceptance/export-artifact-coverage.ts +113 -0
  254. package/templates/starter/src/app/acceptance/inline-layout.ts +64 -9
  255. package/templates/starter/src/app/acceptance/media-upload.ts +5 -1
  256. package/templates/starter/src/app/acceptance/orientation-gizmo.ts +18 -11
  257. package/templates/starter/src/app/acceptance/output-background-rules.ts +2 -2
  258. package/templates/starter/src/app/acceptance/output-export-layout-rules.ts +18 -10
  259. package/templates/starter/src/app/acceptance/output-export-model.ts +54 -11
  260. package/templates/starter/src/app/acceptance/output-export.ts +35 -12
  261. package/templates/starter/src/app/acceptance/output-video-export-rules.ts +99 -0
  262. package/templates/starter/src/app/acceptance/types.ts +30 -8
  263. package/templates/starter/src/app/acceptance/validate-coverage.ts +20 -2
  264. package/templates/starter/src/app/starter-acceptance.artifact-export-intent.test.ts +239 -0
  265. package/templates/starter/src/app/starter-acceptance.background-export.test.ts +33 -0
  266. package/templates/starter/src/app/starter-acceptance.canvas-sizing.test.ts +16 -1
  267. package/templates/starter/src/app/starter-acceptance.compound-part-coverage.test.ts +65 -0
  268. package/templates/starter/src/app/starter-acceptance.contract-fixtures.test.ts +41 -0
  269. package/templates/starter/src/app/starter-acceptance.contract-fixtures.ts +112 -16
  270. package/templates/starter/src/app/starter-acceptance.control-applicability.test.ts +224 -0
  271. package/templates/starter/src/app/starter-acceptance.control-order.test.ts +58 -3
  272. package/templates/starter/src/app/starter-acceptance.control-state.test.ts +0 -111
  273. package/templates/starter/src/app/starter-acceptance.custom-control-collections.test.ts +3 -1
  274. package/templates/starter/src/app/starter-acceptance.custom-control-valid.test.ts +1 -1
  275. package/templates/starter/src/app/starter-acceptance.export-artifact.test.ts +131 -0
  276. package/templates/starter/src/app/starter-acceptance.export-test-utils.ts +22 -0
  277. package/templates/starter/src/app/{starter-acceptance.image-video-export-settings.test.ts → starter-acceptance.image-export-settings.test.ts} +37 -9
  278. package/templates/starter/src/app/starter-acceptance.interaction-ownership.test.ts +12 -0
  279. package/templates/starter/src/app/starter-acceptance.keyframes.test.ts +14 -4
  280. package/templates/starter/src/app/starter-acceptance.media-upload.fixtures.ts +11 -1
  281. package/templates/starter/src/app/starter-acceptance.media-upload.test.ts +28 -0
  282. package/templates/starter/src/app/starter-acceptance.output-export-intent.test.ts +384 -0
  283. package/templates/starter/src/app/starter-acceptance.output-export-rules.test.ts +46 -1
  284. package/templates/starter/src/app/starter-acceptance.product-output-export.test.ts +112 -105
  285. package/templates/starter/src/app/starter-acceptance.product-readiness.test.ts +12 -0
  286. package/templates/starter/src/app/starter-acceptance.section-cohesion.test.ts +1 -1
  287. package/templates/starter/src/app/starter-acceptance.section-dependencies.test.ts +35 -24
  288. package/templates/starter/src/app/starter-acceptance.section-size.test.ts +72 -0
  289. package/templates/starter/src/app/starter-acceptance.ts +13 -2
  290. package/templates/starter/src/app/starter-acceptance.video-export-settings.test.ts +336 -0
  291. package/templates/starter/src/app/starter-acceptance.view-interaction.test.ts +8 -0
  292. package/templates/starter/src/app/starter-performance-test-utils.ts +103 -0
  293. package/templates/starter/src/app/starter-performance.gates.test.ts +231 -278
  294. package/templates/starter/src/app/starter-performance.lifecycle.test.ts +261 -0
  295. package/templates/starter/src/app/test-evidence/browser-runtime-contract.ts +4 -2
  296. package/templates/starter/src/routes/index.tsx +2 -0
  297. package/templates/ui/components/composites/tabs.tsx +2 -2
  298. package/templates/ui/components/controls/collection-actions/collection-item-groups.test.tsx +38 -0
  299. package/templates/ui/components/controls/collection-actions/collection-item-groups.tsx +36 -0
  300. package/templates/ui/components/controls/collection-actions/index.ts +2 -0
  301. package/templates/ui/components/controls/file-drop/file-drop-collection-control.tsx +137 -0
  302. package/templates/ui/components/controls/file-drop/file-drop-control.test.tsx +189 -0
  303. package/templates/ui/components/controls/file-drop/file-drop-control.tsx +81 -88
  304. package/templates/ui/components/controls/file-drop/file-drop-presentation.tsx +131 -9
  305. package/templates/ui/components/controls/file-drop/file-drop-types.ts +36 -22
  306. package/templates/ui/components/controls/file-drop/index.ts +1 -0
  307. package/templates/ui/components/controls/index.ts +3 -0
  308. package/templates/ui/components/controls/range-slider/range-slider-control.tsx +1 -1
  309. package/templates/ui/components/controls/range-slider/range-slider-value.test.ts +14 -0
  310. package/templates/ui/components/controls/range-slider/range-slider-value.ts +3 -2
  311. package/templates/runtime/export/export.ts +0 -166
  312. package/templates/starter/src/app/acceptance/condition-exclusivity.test.ts +0 -60
  313. package/templates/starter/src/app/acceptance/condition-exclusivity.ts +0 -221
@@ -1,6 +1,6 @@
1
1
  import { describe, expect, it } from "vitest";
2
2
 
3
- import { schemaHasVideoExportPanelAction } from "./acceptance/output-export";
3
+ import { resolveToolcraftArtifactExportIntent } from "./acceptance/artifact-export-intent";
4
4
  import { starterProductReadiness } from "./starter-acceptance";
5
5
  import {
6
6
  textLooksLikePngExport,
@@ -14,38 +14,37 @@ import {
14
14
  getSchemaVideoExportSection,
15
15
  getSectionControlByTarget,
16
16
  getSectionControlIdByTarget,
17
- schemaHasProductSurface,
18
17
  } from "./starter-acceptance.schema-test-utils";
19
- import { starterSchema } from "./starter-schema";
20
18
 
21
19
  describe("Toolcraft output export acceptance contract", () => {
22
20
  it("requires product output apps to expose export actions in the sticky footer", () => {
23
- if (starterProductReadiness.mode !== "product" && !schemaHasProductSurface()) {
21
+ if (starterProductReadiness.mode === "starter") {
24
22
  return;
25
23
  }
26
24
 
25
+ const delivery = resolveToolcraftArtifactExportIntent(
26
+ starterProductReadiness.exportIntent,
27
+ );
27
28
  const panelActionTexts = getSchemaPanelActionSearchTexts();
28
29
  const backgroundColorTargets = getSchemaBackgroundControlTargets(new Set(["color"]));
29
30
  const backgroundToggleTargets = getSchemaBackgroundControlTargets(
30
31
  new Set(["checkbox", "select", "segmented", "switch"]),
31
32
  );
32
33
 
33
- expect(
34
- panelActionTexts.length,
35
- "Product apps must define panelActions in the controls panel sticky footer.",
36
- ).toBeGreaterThan(0);
37
- expect(
38
- panelActionTexts.some(textLooksLikePngExport),
39
- "Every product app must expose Export PNG or Download PNG through panelActions.",
40
- ).toBe(true);
41
- expect(
42
- backgroundColorTargets.length,
43
- "Every product app with Export PNG must expose a user-facing background color control.",
44
- ).toBeGreaterThan(0);
45
- expect(
46
- backgroundToggleTargets.length,
47
- 'Every product app with Export PNG must expose export.includeBackground in runtime Setup as a Switch labeled "Background".',
48
- ).toBeGreaterThan(0);
34
+ if (delivery.imageEnabled || delivery.videoEnabled) {
35
+ expect(
36
+ panelActionTexts.length,
37
+ "Product apps with artifact delivery must define panelActions in the controls panel sticky footer.",
38
+ ).toBeGreaterThan(0);
39
+ expect(
40
+ backgroundColorTargets.length,
41
+ "Product apps with artifact delivery must expose a user-facing background color control.",
42
+ ).toBeGreaterThan(0);
43
+ expect(
44
+ backgroundToggleTargets.length,
45
+ 'Product apps with artifact delivery must expose export.includeBackground in runtime Setup as a Switch labeled "Background".',
46
+ ).toBeGreaterThan(0);
47
+ }
49
48
 
50
49
  const imageExportSection = getSchemaImageExportSection();
51
50
  const imageFormatControl = getSectionControlByTarget(
@@ -78,47 +77,51 @@ describe("Toolcraft output export acceptance contract", () => {
78
77
  ) === true;
79
78
 
80
79
  expect(
81
- imageExportSection,
82
- 'Apps with Export PNG must expose image settings in a separate controls section titled "Image Export".',
83
- ).toBeDefined();
84
- expect(
85
- imageFormatControl,
86
- 'The separate "Image Export" section must include a format control with target "export.image.format".',
87
- ).toBeDefined();
88
- expect(
89
- imageFormatControl?.type,
90
- "Image Export format must use the same Select/dropdown structure as Video Export.",
91
- ).toBe("select");
92
- expect(
93
- imageFormatOptionValues,
94
- 'Image format options must include "png" and "jpg".',
95
- ).toEqual(expect.arrayContaining(["png", "jpg"]));
96
- expect(
97
- imageFormatControl?.defaultValue,
98
- 'Image format must default to "png".',
99
- ).toBe("png");
100
- expect(
101
- imageResolutionControl,
102
- 'The separate "Image Export" section must include a resolution control with target "export.image.resolution".',
103
- ).toBeDefined();
104
- expect(
105
- imageResolutionControl?.type,
106
- "Image Export resolution must use the same Select/dropdown structure as Video Export.",
107
- ).toBe("select");
108
- expect(
109
- imageResolutionOptionValues,
110
- 'Image resolution options must include "2k", "4k", and "8k".',
111
- ).toEqual(expect.arrayContaining(["2k", "4k", "8k"]));
112
- expect(
113
- imageResolutionControl?.defaultValue,
114
- 'Image resolution must default to "4k".',
115
- ).toBe("4k");
80
+ panelActionTexts.some(textLooksLikePngExport),
81
+ "Image export action presence must match resolved product export intent.",
82
+ ).toBe(delivery.imageEnabled);
116
83
  expect(
117
- imageExportHasInlinePair,
118
- "Image Export format and resolution must render as a compact inline pair.",
119
- ).toBe(true);
120
- if (!schemaHasVideoExportPanelAction(starterSchema)) {
121
- return;
84
+ imageExportSection !== undefined,
85
+ '"Image Export" section presence must match resolved product export intent.',
86
+ ).toBe(delivery.imageEnabled);
87
+
88
+ if (delivery.imageEnabled) {
89
+ expect(
90
+ imageFormatControl,
91
+ 'The separate "Image Export" section must include a format control with target "export.image.format".',
92
+ ).toBeDefined();
93
+ expect(
94
+ imageFormatControl?.type,
95
+ "Image Export format must use the same Select/dropdown structure as Video Export.",
96
+ ).toBe("select");
97
+ expect(
98
+ imageFormatOptionValues,
99
+ 'Image format options must include "png" and "jpg".',
100
+ ).toEqual(expect.arrayContaining(["png", "jpg"]));
101
+ expect(
102
+ imageFormatControl?.defaultValue,
103
+ 'Image format must default to "png".',
104
+ ).toBe("png");
105
+ expect(
106
+ imageResolutionControl,
107
+ 'The separate "Image Export" section must include a resolution control with target "export.image.resolution".',
108
+ ).toBeDefined();
109
+ expect(
110
+ imageResolutionControl?.type,
111
+ "Image Export resolution must use the same Select/dropdown structure as Video Export.",
112
+ ).toBe("select");
113
+ expect(
114
+ imageResolutionOptionValues,
115
+ 'Image resolution options must include "2k", "4k", and "8k".',
116
+ ).toEqual(expect.arrayContaining(["2k", "4k", "8k"]));
117
+ expect(
118
+ imageResolutionControl?.defaultValue,
119
+ 'Image resolution must default to "4k".',
120
+ ).toBe("4k");
121
+ expect(
122
+ imageExportHasInlinePair,
123
+ "Image Export format and resolution must render as a compact inline pair.",
124
+ ).toBe(true);
122
125
  }
123
126
 
124
127
  const videoExportSection = getSchemaVideoExportSection();
@@ -134,48 +137,12 @@ describe("Toolcraft output export acceptance contract", () => {
134
137
  const videoResolutionOptionValues = getControlOptionValues(videoResolutionControl);
135
138
  expect(
136
139
  panelActionTexts.some(textLooksLikeVideoExport),
137
- "Apps that declare video delivery must expose Export Video through panelActions.",
138
- ).toBe(true);
139
- expect(
140
- panelActionTexts.length,
141
- "Apps with image and video delivery need separate footer actions for Export Video and Export PNG.",
142
- ).toBeGreaterThanOrEqual(2);
143
- expect(
144
- videoExportSection,
145
- 'Apps with Export Video must expose video settings in a separate controls section titled "Video Export".',
146
- ).toBeDefined();
147
- expect(
148
- videoFormatControl,
149
- 'The separate "Video Export" section must include a format control with target "export.video.format".',
150
- ).toBeDefined();
151
- expect(
152
- ["select", "segmented"],
153
- "Video format must be a Select or Segmented control so the user chooses a supported container instead of typing a freeform value.",
154
- ).toContain(videoFormatControl?.type);
140
+ "Video export action presence must match resolved product export intent.",
141
+ ).toBe(delivery.videoEnabled);
155
142
  expect(
156
- videoFormatOptionValues,
157
- 'Video format options must include safe browser baseline choices: "webm" and "mp4".',
158
- ).toEqual(expect.arrayContaining(["webm", "mp4"]));
159
- expect(
160
- videoResolutionControl,
161
- 'The separate "Video Export" section must include a resolution control with target "export.video.resolution".',
162
- ).toBeDefined();
163
- expect(
164
- ["select"],
165
- "Video resolution must be a Select control with explicit output-size choices.",
166
- ).toContain(videoResolutionControl?.type);
167
- expect(
168
- videoResolutionOptionValues,
169
- 'Video resolution options must include "current" and "4k".',
170
- ).toEqual(expect.arrayContaining(["current", "4k"]));
171
- expect(
172
- videoResolutionControl?.defaultValue,
173
- 'Video resolution must default to "current".',
174
- ).toBe("current");
175
- expect(
176
- videoFormatControl?.defaultValue,
177
- 'Video format must default to "mp4".',
178
- ).toBe("mp4");
143
+ videoExportSection !== undefined,
144
+ '"Video Export" section presence must match resolved product export intent.',
145
+ ).toBe(delivery.videoEnabled);
179
146
  const videoFormatControlId = getSectionControlIdByTarget(
180
147
  videoExportSection,
181
148
  "export.video.format",
@@ -194,9 +161,49 @@ describe("Toolcraft output export acceptance contract", () => {
194
161
  group.controls.includes(videoResolutionControlId),
195
162
  ) === true;
196
163
 
197
- expect(
198
- videoExportHasInlinePair,
199
- "Video Export format and resolution must render as a compact inline pair unless a documented fit fallback is used.",
200
- ).toBe(true);
164
+ if (delivery.videoEnabled) {
165
+ if (delivery.imageEnabled) {
166
+ expect(
167
+ panelActionTexts.length,
168
+ "Apps with image and video delivery need separate footer actions for Export Video and Export PNG.",
169
+ ).toBeGreaterThanOrEqual(2);
170
+ }
171
+ expect(
172
+ videoFormatControl,
173
+ 'The separate "Video Export" section must include a format control with target "export.video.format".',
174
+ ).toBeDefined();
175
+ expect(
176
+ ["select", "segmented"],
177
+ "Video format must be a Select or Segmented control so the user chooses a supported container instead of typing a freeform value.",
178
+ ).toContain(videoFormatControl?.type);
179
+ expect(
180
+ videoFormatOptionValues,
181
+ 'Video format options must include safe browser baseline choices: "webm" and "mp4".',
182
+ ).toEqual(expect.arrayContaining(["webm", "mp4"]));
183
+ expect(
184
+ videoResolutionControl,
185
+ 'The separate "Video Export" section must include a resolution control with target "export.video.resolution".',
186
+ ).toBeDefined();
187
+ expect(
188
+ ["select"],
189
+ "Video resolution must be a Select control with explicit output-size choices.",
190
+ ).toContain(videoResolutionControl?.type);
191
+ expect(
192
+ videoResolutionOptionValues,
193
+ 'Video resolution options must include "current" and "4k".',
194
+ ).toEqual(expect.arrayContaining(["current", "4k"]));
195
+ expect(
196
+ videoResolutionControl?.defaultValue,
197
+ 'Video resolution must default to "current".',
198
+ ).toBe("current");
199
+ expect(
200
+ videoFormatControl?.defaultValue,
201
+ 'Video format must default to "mp4".',
202
+ ).toBe("mp4");
203
+ expect(
204
+ videoExportHasInlinePair,
205
+ "Video Export format and resolution must render as a compact inline pair unless a documented fit fallback is used.",
206
+ ).toBe(true);
207
+ }
201
208
  });
202
209
  });
@@ -4,6 +4,7 @@ import {
4
4
  starterProductReadiness,
5
5
  starterTransferMode,
6
6
  } from "./starter-acceptance";
7
+ import { schemaHasVideoExportPanelAction } from "./acceptance/output-export";
7
8
  import { isNeutralTemplateProject } from "./starter-acceptance.product-readiness-test-utils";
8
9
  import { schemaHasProductSurface } from "./starter-acceptance.schema-test-utils";
9
10
  import { starterSchema } from "./starter-schema";
@@ -22,6 +23,17 @@ describe("Toolcraft product readiness", () => {
22
23
 
23
24
  it("allows neutral readiness only for the source starter/template folder", () => {
24
25
  if (starterProductReadiness.mode === "product") {
26
+ expect(starterProductReadiness.exportIntent).toBeDefined();
27
+ if (starterProductReadiness.exportIntent.image.mode === "toolcraft-default") {
28
+ expect(starterProductReadiness.exportIntent.image).toEqual({
29
+ mode: "toolcraft-default",
30
+ });
31
+ }
32
+ expect(starterProductReadiness.exportIntent.video.mode).toBe(
33
+ schemaHasVideoExportPanelAction(starterSchema)
34
+ ? "user-requested"
35
+ : "not-requested",
36
+ );
25
37
  expect(starterProductReadiness.productName.trim()).not.toBe("");
26
38
  expect(starterProductReadiness.productSummary.trim()).not.toBe("");
27
39
  expect(starterProductReadiness.requestedBehavior.trim()).not.toBe("");
@@ -311,7 +311,7 @@ describe("starter acceptance section cohesion contract", () => {
311
311
  }),
312
312
  ).toEqual(
313
313
  expect.arrayContaining([
314
- 'Controls for product entity "squares.right" are split across sections: Square 1 (Right), Appearance. Keep controls for the same product entity in one semantic section unless the Control Section Inventory declares workflowStage and splitReason for every split section.',
314
+ 'Controls for target family "squares.right" are split across sections: Square 1 (Right), Appearance. Assign one shared entityId when the sections edit one logical entity; the entity cohesion validator decides whether that split is allowed.',
315
315
  ]),
316
316
  );
317
317
  });
@@ -58,6 +58,7 @@ describe("starter acceptance section dependency contract", () => {
58
58
  sectionInventory: [
59
59
  {
60
60
  entity: "Shape",
61
+ entityId: "shape",
61
62
  groupingReason: "Shape setup",
62
63
  id: "shape",
63
64
  targets: ["shape.kind"],
@@ -73,7 +74,7 @@ describe("starter acceptance section dependency contract", () => {
73
74
  );
74
75
  });
75
76
 
76
- it("allows explicit workflow split evidence for one target entity", () => {
77
+ it("rejects workflow splitting when one entity fits in one section", () => {
77
78
  const schemaWithWorkflowSplit = defineContractSchemaFixture({
78
79
  canvas: { enabled: true },
79
80
  panels: {
@@ -118,6 +119,33 @@ describe("starter acceptance section dependency contract", () => {
118
119
  },
119
120
  });
120
121
 
122
+ const workflowSplitInventory = [
123
+ {
124
+ entity: "Object shape",
125
+ entityId: "object-shape",
126
+ groupingReason:
127
+ "Structure controls tune the physical footprint of the object.",
128
+ id: "shape-structure",
129
+ splitReason:
130
+ "Structure and density are separate workflow stages in this editor.",
131
+ targets: ["object.shape.size"],
132
+ title: "Shape Structure",
133
+ workflowStage: "structure",
134
+ },
135
+ {
136
+ entity: "Object shape",
137
+ entityId: "object-shape",
138
+ groupingReason:
139
+ "Density controls tune how many objects appear after structure is set.",
140
+ id: "shape-density",
141
+ splitReason:
142
+ "Density is separated from structure because users set count after the shape footprint.",
143
+ targets: ["object.shape.count"],
144
+ title: "Shape Density",
145
+ workflowStage: "density",
146
+ },
147
+ ] as const;
148
+
121
149
  expect(
122
150
  validateContractAcceptance({
123
151
  schema: schemaWithWorkflowSplit,
@@ -126,28 +154,11 @@ describe("starter acceptance section dependency contract", () => {
126
154
  makeControlAcceptance("object.shape.count", "slider"),
127
155
  ],
128
156
  transferMode: contractTransferModeFixture,
129
- sectionInventory: [
130
- {
131
- entity: "Object shape",
132
- groupingReason: "Structure controls tune the physical footprint of the object.",
133
- id: "shape-structure",
134
- splitReason: "Structure and density are separate workflow stages in this editor.",
135
- targets: ["object.shape.size"],
136
- title: "Shape Structure",
137
- workflowStage: "structure",
138
- },
139
- {
140
- entity: "Object shape",
141
- groupingReason: "Density controls tune how many objects appear after structure is set.",
142
- id: "shape-density",
143
- splitReason: "Density is separated from structure because users set count after the shape footprint.",
144
- targets: ["object.shape.count"],
145
- title: "Shape Density",
146
- workflowStage: "density",
147
- },
148
- ],
157
+ sectionInventory: workflowSplitInventory,
149
158
  }),
150
- ).toEqual([]);
159
+ ).toContain(
160
+ 'Control Section Inventory entity "object-shape" owns 2 controls across 2 sections (Shape Structure, Shape Density). Entities with 10 or fewer controls must stay in one section.',
161
+ );
151
162
  });
152
163
 
153
164
  it("rejects mode-gated controls split away from their selector section", () => {
@@ -203,7 +214,7 @@ describe("starter acceptance section dependency contract", () => {
203
214
  }),
204
215
  ).toEqual(
205
216
  expect.arrayContaining([
206
- 'Image / sourceUpload is gated by visibleWhen target "source.mode" in Source, but it belongs to the same dependency group. Keep selectors and their dependent controls in one semantic section when they describe one product entity or branch; use visibleWhen for branch-specific controls inside that section instead of splitting branch controls into their own section. Do not use disabledWhen for product controls.',
217
+ 'Image / sourceUpload is gated by applicability target "source.mode" in Source, but it belongs to the same dependency group. Keep selectors and their dependent controls in one semantic section when they describe one product entity or branch; use conditional applicability for branch-specific controls inside that section instead of splitting branch controls into their own section. Do not use disabledWhen for product controls.',
207
218
  ]),
208
219
  );
209
220
  });
@@ -259,7 +270,7 @@ describe("starter acceptance section dependency contract", () => {
259
270
  }),
260
271
  ).toEqual(
261
272
  expect.arrayContaining([
262
- 'Library / libraryAsset is gated by visibleWhen target "shape.kind" in Shape, but it belongs to the same dependency group. Keep selectors and their dependent controls in one semantic section when they describe one product entity or branch; use visibleWhen for branch-specific controls inside that section instead of splitting branch controls into their own section. Do not use disabledWhen for product controls.',
273
+ 'Library / libraryAsset is gated by applicability target "shape.kind" in Shape, but it belongs to the same dependency group. Keep selectors and their dependent controls in one semantic section when they describe one product entity or branch; use conditional applicability for branch-specific controls inside that section instead of splitting branch controls into their own section. Do not use disabledWhen for product controls.',
263
274
  ]),
264
275
  );
265
276
  });
@@ -0,0 +1,72 @@
1
+ import { defineToolcraft } from "@repo/toolcraft-runtime";
2
+ import { describe, expect, it } from "vitest";
3
+
4
+ import { getToolcraftControlSectionInvariantErrors } from "./acceptance/control-layout";
5
+
6
+ function makeSliderControls(count: number, includeSemanticGroup: boolean) {
7
+ return Object.fromEntries(
8
+ Array.from({ length: count }, (_, index) => {
9
+ const control = {
10
+ defaultValue: 0,
11
+ label: `Value ${index + 1}`,
12
+ max: 1,
13
+ min: 0,
14
+ orderRole: "detail" as const,
15
+ target: `dense.value${index + 1}`,
16
+ type: "slider" as const,
17
+ variant: "continuous" as const,
18
+ };
19
+
20
+ return [
21
+ `value${index + 1}`,
22
+ includeSemanticGroup
23
+ ? { ...control, semanticGroup: "dense-entity" }
24
+ : control,
25
+ ];
26
+ }),
27
+ );
28
+ }
29
+
30
+ function makeDenseSchema(count: number, includeSemanticGroup = true) {
31
+ return defineToolcraft({
32
+ canvas: { enabled: true },
33
+ panels: {
34
+ controls: {
35
+ sections: [
36
+ {
37
+ controls: makeSliderControls(count, includeSemanticGroup),
38
+ id: "dense-entity",
39
+ title: "Dense Entity",
40
+ },
41
+ ],
42
+ title: "Controls",
43
+ },
44
+ },
45
+ });
46
+ }
47
+
48
+ describe("starter acceptance section size boundaries", () => {
49
+ it("does not require semanticGroup at seven controls", () => {
50
+ expect(
51
+ getToolcraftControlSectionInvariantErrors(makeDenseSchema(7, false)),
52
+ ).toEqual([]);
53
+ });
54
+
55
+ it("accepts ten grouped controls in one section", () => {
56
+ expect(
57
+ getToolcraftControlSectionInvariantErrors(makeDenseSchema(10)),
58
+ ).toEqual([]);
59
+ });
60
+
61
+ it("requires semanticGroup beginning at eight controls", () => {
62
+ expect(
63
+ getToolcraftControlSectionInvariantErrors(makeDenseSchema(8, false)),
64
+ ).toEqual(
65
+ expect.arrayContaining([
66
+ expect.stringContaining(
67
+ "has 8 controls and must declare semanticGroup for every control",
68
+ ),
69
+ ]),
70
+ );
71
+ });
72
+ });
@@ -4,6 +4,17 @@ import {
4
4
  } from "@repo/toolcraft-runtime";
5
5
 
6
6
  import { getRequiredToolcraftControlPartCoverage } from "./acceptance/control-parts";
7
+ export {
8
+ getToolcraftApplicabilitySelectorDomain,
9
+ getToolcraftControlApplicabilityErrors,
10
+ type ToolcraftApplicabilitySelectorDomain,
11
+ type ToolcraftApplicabilitySelectorValue,
12
+ } from "./acceptance/control-applicability";
13
+ export {
14
+ getToolcraftApplicabilityRequirementId,
15
+ getToolcraftControlApplicabilityCases,
16
+ type ToolcraftControlApplicabilityCase,
17
+ } from "./acceptance/control-applicability-cases";
7
18
  import {
8
19
  getToolcraftControlOrder as getToolcraftControlOrderForSchema,
9
20
  getToolcraftControlOrderTargets as getToolcraftControlOrderTargetsForSchema,
@@ -17,12 +28,12 @@ import type {
17
28
  ToolcraftBuiltInFitCheck,
18
29
  ToolcraftBackgroundOutputCoverage,
19
30
  ToolcraftCanvasSizingCoverage,
20
- ToolcraftConditionalVisibilityCoverage,
21
31
  ToolcraftComponentAcceptance,
22
32
  ToolcraftControlOrderItem,
23
33
  ToolcraftControlPartCoverage,
24
34
  ToolcraftControlSectionInventoryEntry,
25
35
  ToolcraftCustomControlCoverage,
36
+ ToolcraftExportArtifactCoverage,
26
37
  ToolcraftLayerCoverage,
27
38
  ToolcraftInteractionCapability,
28
39
  ToolcraftInteractionEvidenceSource,
@@ -90,12 +101,12 @@ export type {
90
101
  ToolcraftBuiltInFitCheck,
91
102
  ToolcraftBackgroundOutputCoverage,
92
103
  ToolcraftCanvasSizingCoverage,
93
- ToolcraftConditionalVisibilityCoverage,
94
104
  ToolcraftComponentAcceptance,
95
105
  ToolcraftControlOrderItem,
96
106
  ToolcraftControlPartCoverage,
97
107
  ToolcraftControlSectionInventoryEntry,
98
108
  ToolcraftCustomControlCoverage,
109
+ ToolcraftExportArtifactCoverage,
99
110
  ToolcraftLayerCoverage,
100
111
  ToolcraftInteractionCapability,
101
112
  ToolcraftInteractionEvidenceSource,