@salsita-ai/sdk 0.50.0-develop.a49722158a → 0.50.0-develop.a8cf9ffd01

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 (2183) hide show
  1. package/README.md +27 -16
  2. package/dist/admin/AdminShell.js +1 -1
  3. package/dist/admin/common/admin-interface.d.ts +3 -3
  4. package/dist/admin/default-admin-elements.d.ts +9 -0
  5. package/dist/admin/default-admin-elements.js +1 -0
  6. package/dist/admin/default-elements/built-in-entity-element.d.ts +10 -0
  7. package/dist/admin/default-elements/built-in-entity-element.js +1 -0
  8. package/dist/admin/default-elements/built-in-layout-element.d.ts +10 -0
  9. package/dist/admin/default-elements/built-in-layout-element.js +1 -0
  10. package/dist/admin/default-elements/index.d.ts +2 -0
  11. package/dist/admin/default-elements/index.js +1 -0
  12. package/dist/admin/index.d.ts +1 -0
  13. package/dist/admin/index.js +1 -1
  14. package/dist/admin/legacy-admin/Application.js +1 -1
  15. package/dist/application/index.d.ts +1 -0
  16. package/dist/application/index.js +1 -1
  17. package/dist/application/mount-application.d.ts +1 -1
  18. package/dist/application/mount-application.js +1 -1
  19. package/dist/application/mount-configurator.d.ts +19 -0
  20. package/dist/application/mount-configurator.js +1 -0
  21. package/dist/application/mounted-application-runtime.d.ts +4 -0
  22. package/dist/application/mounted-application-runtime.js +1 -0
  23. package/dist/application/register-web-component.d.ts +2 -0
  24. package/dist/application/register-web-component.js +1 -0
  25. package/dist/application-spec/caching/content-diff.js +1 -1
  26. package/dist/application-spec/caching/index.d.ts +6 -1
  27. package/dist/application-spec/caching/index.js +1 -1
  28. package/dist/application-spec/core/application-file.d.ts +0 -2
  29. package/dist/application-spec/core/application-file.js +1 -1
  30. package/dist/application-spec/core/enhanced-json-value.d.ts +2 -31
  31. package/dist/application-spec/core/enhanced-json-value.js +1 -1
  32. package/dist/application-spec/core/index.d.ts +1 -3
  33. package/dist/application-spec/core/index.js +1 -1
  34. package/dist/application-spec/core/json-schema.d.ts +2 -52
  35. package/dist/application-spec/core/markers/index.d.ts +1 -1
  36. package/dist/application-spec/core/markers/index.js +1 -1
  37. package/dist/application-spec/core/markers/msg-marker.d.ts +2 -28
  38. package/dist/application-spec/core/markers/msg-marker.js +1 -1
  39. package/dist/application-spec/core/markers/raw-eval-write-marker.d.ts +1 -1
  40. package/dist/application-spec/core/markers/raw-eval-write-marker.js +1 -1
  41. package/dist/application-spec/core/markers/raw-read-write-marker.js +1 -1
  42. package/dist/application-spec/errors/diagnostic-codes.d.ts +23 -1
  43. package/dist/application-spec/errors/diagnostic-codes.js +1 -1
  44. package/dist/application-spec/errors/diagnostic-messages.d.ts +31 -2
  45. package/dist/application-spec/errors/diagnostic-messages.js +1 -1
  46. package/dist/application-spec/generate-application/code/common/code-imports.js +1 -1
  47. package/dist/application-spec/generate-application/code/common/env-reader.js +2 -2
  48. package/dist/application-spec/generate-application/code/common/index.d.ts +1 -0
  49. package/dist/application-spec/generate-application/code/common/index.js +1 -1
  50. package/dist/application-spec/generate-application/code/common/single-quoted-string.d.ts +6 -0
  51. package/dist/application-spec/generate-application/code/common/single-quoted-string.js +1 -0
  52. package/dist/application-spec/generate-application/code/domain-runtime-files.d.ts +0 -19
  53. package/dist/application-spec/generate-application/code/domain-runtime-files.js +1 -1
  54. package/dist/application-spec/generate-application/code/generate-application-code.d.ts +3 -2
  55. package/dist/application-spec/generate-application/code/generate-application-code.js +1 -1
  56. package/dist/application-spec/generate-application/code/index.d.ts +1 -0
  57. package/dist/application-spec/generate-application/code/project-scaffolding.d.ts +15 -14
  58. package/dist/application-spec/generate-application/code/project-scaffolding.js +2 -2
  59. package/dist/application-spec/generate-application/code/standalone-app-files.d.ts +4 -3
  60. package/dist/application-spec/generate-application/code/standalone-app-files.js +1 -1
  61. package/dist/application-spec/generate-application/code/story-files.js +1 -1
  62. package/dist/application-spec/generate-application/code/templates/admin-config.js +3 -0
  63. package/dist/application-spec/generate-application/code/templates/application-types.js +6 -6
  64. package/dist/application-spec/generate-application/code/templates/common/doc-comment.d.ts +2 -0
  65. package/dist/application-spec/generate-application/code/templates/common/doc-comment.js +1 -0
  66. package/dist/application-spec/generate-application/code/templates/common/format-property-key.d.ts +7 -0
  67. package/dist/application-spec/generate-application/code/templates/common/format-property-key.js +1 -0
  68. package/dist/application-spec/generate-application/code/templates/common/schema-to-type-string.js +3 -3
  69. package/dist/application-spec/generate-application/code/templates/configurator-globals.d.ts +2 -1
  70. package/dist/application-spec/generate-application/code/templates/configurator-globals.js +19 -6
  71. package/dist/application-spec/generate-application/code/templates/domain-spec/factory-types/domain-factory-types.d.ts +36 -0
  72. package/dist/application-spec/generate-application/code/templates/domain-spec/factory-types/domain-factory-types.js +5 -0
  73. package/dist/application-spec/generate-application/code/templates/domain-spec/factory-types/index.d.ts +1 -0
  74. package/dist/application-spec/generate-application/code/templates/domain-spec/factory-types/index.js +1 -0
  75. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-base-configurator-builder.js +2 -1
  76. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-component-optics.d.ts +1 -1
  77. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-component-optics.js +6 -6
  78. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-domain-block.js +57 -61
  79. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-invariants.d.ts +8 -0
  80. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-invariants.js +1 -1
  81. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-locale.js +1 -1
  82. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-presets.js +1 -1
  83. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-resources.js +13 -13
  84. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-states.d.ts +1 -1
  85. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-states.js +2 -2
  86. package/dist/application-spec/generate-application/code/templates/domain-spec/index.d.ts +2 -1
  87. package/dist/application-spec/generate-application/code/templates/domain-spec/index.js +1 -1
  88. package/dist/application-spec/generate-application/code/templates/editor.d.ts +1 -1
  89. package/dist/application-spec/generate-application/code/templates/editor.js +16 -3
  90. package/dist/application-spec/generate-application/code/templates/eslint-config.d.ts +5 -0
  91. package/dist/application-spec/generate-application/code/templates/eslint-config.js +4 -5
  92. package/dist/application-spec/generate-application/code/templates/frontend-config.js +3 -5
  93. package/dist/application-spec/generate-application/code/templates/gitignore.js +2 -4
  94. package/dist/application-spec/generate-application/code/templates/global-definition/generate-action-types.js +7 -7
  95. package/dist/application-spec/generate-application/code/templates/global-definition/generate-assistant-form-element-types.d.ts +12 -0
  96. package/dist/application-spec/generate-application/code/templates/global-definition/generate-assistant-form-element-types.js +7 -0
  97. package/dist/application-spec/generate-application/code/templates/global-definition/generate-phx-types.d.ts +43 -0
  98. package/dist/application-spec/generate-application/code/templates/global-definition/generate-phx-types.js +33 -0
  99. package/dist/application-spec/generate-application/code/templates/global-definition/index.d.ts +2 -0
  100. package/dist/application-spec/generate-application/code/templates/global-definition/index.js +1 -1
  101. package/dist/application-spec/generate-application/code/templates/globals.js +24 -44
  102. package/dist/application-spec/generate-application/code/templates/html-index.d.ts +12 -1
  103. package/dist/application-spec/generate-application/code/templates/html-index.js +9 -10
  104. package/dist/application-spec/generate-application/code/templates/index.d.ts +6 -9
  105. package/dist/application-spec/generate-application/code/templates/index.js +1 -1
  106. package/dist/application-spec/generate-application/code/templates/lingui-rc.d.ts +5 -0
  107. package/dist/application-spec/generate-application/code/templates/lingui-rc.js +3 -2
  108. package/dist/application-spec/generate-application/code/templates/prettier-config.d.ts +5 -0
  109. package/dist/application-spec/generate-application/code/templates/prettier-config.js +4 -5
  110. package/dist/application-spec/generate-application/code/templates/root-tsconfig.d.ts +6 -0
  111. package/dist/application-spec/generate-application/code/templates/root-tsconfig.js +2 -0
  112. package/dist/application-spec/generate-application/code/templates/skills/core/cli.d.ts +2 -0
  113. package/dist/application-spec/generate-application/code/templates/skills/core/cli.js +1 -0
  114. package/dist/application-spec/generate-application/code/templates/skills/core/index.d.ts +3 -0
  115. package/dist/application-spec/generate-application/code/templates/skills/core/index.js +1 -0
  116. package/dist/application-spec/generate-application/code/templates/skills/core/sdk.d.ts +2 -0
  117. package/dist/application-spec/generate-application/code/templates/skills/core/sdk.js +89 -0
  118. package/dist/application-spec/generate-application/code/templates/skills/core/workflow.d.ts +2 -0
  119. package/dist/application-spec/generate-application/code/templates/skills/core/workflow.js +44 -0
  120. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/application-states.d.ts +3 -0
  121. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/application-states.js +3 -0
  122. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/index.d.ts +1 -0
  123. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/index.js +1 -0
  124. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/navigation.d.ts +3 -0
  125. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/navigation.js +48 -0
  126. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/presets.d.ts +3 -0
  127. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/presets.js +38 -0
  128. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/selection.d.ts +3 -0
  129. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/selection.js +35 -0
  130. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/views-and-tools.d.ts +3 -0
  131. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/views-and-tools.js +61 -0
  132. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/custom-layout.d.ts +3 -0
  133. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/custom-layout.js +7 -0
  134. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/finalization-actions.d.ts +3 -0
  135. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/finalization-actions.js +79 -0
  136. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/index.d.ts +1 -0
  137. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/index.js +1 -0
  138. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/messages.d.ts +3 -0
  139. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/messages.js +52 -0
  140. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/pages.d.ts +3 -0
  141. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/pages.js +49 -0
  142. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/scene-and-safe-area.d.ts +3 -0
  143. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/scene-and-safe-area.js +62 -0
  144. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/slots.d.ts +3 -0
  145. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/slots.js +40 -0
  146. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/tabs-and-steps.d.ts +3 -0
  147. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/tabs-and-steps.js +65 -0
  148. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/toolbar-actions.d.ts +3 -0
  149. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/toolbar-actions.js +58 -0
  150. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/view-mode.d.ts +3 -0
  151. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/view-mode.js +41 -0
  152. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/control-components.d.ts +3 -0
  153. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/control-components.js +24 -0
  154. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/control-hooks.d.ts +3 -0
  155. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/control-hooks.js +44 -0
  156. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/custom-controls.d.ts +3 -0
  157. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/custom-controls.js +74 -0
  158. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/domain-controls.d.ts +3 -0
  159. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/domain-controls.js +8 -0
  160. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/index.d.ts +1 -0
  161. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/index.js +1 -0
  162. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/scene-controls.d.ts +3 -0
  163. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/scene-controls.js +48 -0
  164. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/actions.d.ts +3 -0
  165. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/actions.js +64 -0
  166. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/components.d.ts +3 -0
  167. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/components.js +62 -0
  168. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/domain-model.d.ts +3 -0
  169. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/domain-model.js +1 -0
  170. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/entities-and-relations.d.ts +3 -0
  171. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/entities-and-relations.js +59 -0
  172. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/expressions.d.ts +3 -0
  173. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/expressions.js +46 -0
  174. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/index.d.ts +1 -0
  175. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/index.js +1 -0
  176. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/transformers.d.ts +3 -0
  177. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/transformers.js +43 -0
  178. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/validation-and-repair.d.ts +3 -0
  179. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/validation-and-repair.js +30 -0
  180. package/dist/application-spec/generate-application/code/templates/skills/features/features.d.ts +3 -0
  181. package/dist/application-spec/generate-application/code/templates/skills/features/features.js +1 -0
  182. package/dist/application-spec/generate-application/code/templates/skills/features/index.d.ts +1 -0
  183. package/dist/application-spec/generate-application/code/templates/skills/features/index.js +1 -0
  184. package/dist/application-spec/generate-application/code/templates/skills/features/inspection.d.ts +2 -0
  185. package/dist/application-spec/generate-application/code/templates/skills/features/inspection.js +1 -0
  186. package/dist/application-spec/generate-application/code/templates/skills/features/localization.d.ts +3 -0
  187. package/dist/application-spec/generate-application/code/templates/skills/features/localization.js +87 -0
  188. package/dist/application-spec/generate-application/code/templates/skills/features/scene-objects.d.ts +3 -0
  189. package/dist/application-spec/generate-application/code/templates/skills/features/scene-objects.js +43 -0
  190. package/dist/application-spec/generate-application/code/templates/skills/features/state/index.d.ts +1 -0
  191. package/dist/application-spec/generate-application/code/templates/skills/features/state/index.js +1 -0
  192. package/dist/application-spec/generate-application/code/templates/skills/features/state/slices.d.ts +3 -0
  193. package/dist/application-spec/generate-application/code/templates/skills/features/state/slices.js +48 -0
  194. package/dist/application-spec/generate-application/code/templates/skills/features/state/state.d.ts +3 -0
  195. package/dist/application-spec/generate-application/code/templates/skills/features/state/state.js +1 -0
  196. package/dist/application-spec/generate-application/code/templates/skills/features/state/updates.d.ts +3 -0
  197. package/dist/application-spec/generate-application/code/templates/skills/features/state/updates.js +39 -0
  198. package/dist/application-spec/generate-application/code/templates/skills/features/state/violations.d.ts +3 -0
  199. package/dist/application-spec/generate-application/code/templates/skills/features/state/violations.js +36 -0
  200. package/dist/application-spec/generate-application/code/templates/skills/features/variants.d.ts +2 -0
  201. package/dist/application-spec/generate-application/code/templates/skills/features/variants.js +1 -0
  202. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/assistant-setup.d.ts +3 -0
  203. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/assistant-setup.js +32 -0
  204. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/authentication.d.ts +3 -0
  205. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/authentication.js +42 -0
  206. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/backend-data.d.ts +3 -0
  207. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/backend-data.js +45 -0
  208. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/entry-and-environment.d.ts +3 -0
  209. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/entry-and-environment.js +38 -0
  210. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/finalization.d.ts +3 -0
  211. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/finalization.js +92 -0
  212. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/index.d.ts +1 -0
  213. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/index.js +1 -0
  214. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/publishing.d.ts +3 -0
  215. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/publishing.js +1 -0
  216. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/tasks/callback.d.ts +3 -0
  217. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/tasks/callback.js +26 -0
  218. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/tasks/documents.d.ts +3 -0
  219. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/tasks/documents.js +51 -0
  220. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/tasks/email.d.ts +3 -0
  221. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/tasks/email.js +38 -0
  222. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/tasks/index.d.ts +1 -0
  223. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/tasks/index.js +1 -0
  224. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/tasks/integrations.d.ts +3 -0
  225. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/tasks/integrations.js +88 -0
  226. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/tasks/links-and-images.d.ts +3 -0
  227. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/tasks/links-and-images.js +68 -0
  228. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/tasks/tasks.d.ts +3 -0
  229. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/tasks/tasks.js +1 -0
  230. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/webhooks.d.ts +3 -0
  231. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/webhooks.js +1 -0
  232. package/dist/application-spec/generate-application/code/templates/skills/guide.d.ts +68 -0
  233. package/dist/application-spec/generate-application/code/templates/skills/guide.js +18 -0
  234. package/dist/application-spec/generate-application/code/templates/skills/phoenix-skill-bundle.d.ts +10 -0
  235. package/dist/application-spec/generate-application/code/templates/skills/phoenix-skill-bundle.js +14 -0
  236. package/dist/application-spec/generate-application/code/templates/skills/phx-members-without-guide.d.ts +9 -0
  237. package/dist/application-spec/generate-application/code/templates/skills/phx-members-without-guide.js +1 -0
  238. package/dist/application-spec/generate-application/code/templates/skills/processes/asset-conversion.d.ts +2 -0
  239. package/dist/application-spec/generate-application/code/templates/skills/processes/asset-conversion.js +23 -0
  240. package/dist/application-spec/generate-application/code/templates/skills/processes/beta.d.ts +14 -0
  241. package/dist/application-spec/generate-application/code/templates/skills/processes/beta.js +4 -0
  242. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/evaluate.d.ts +2 -0
  243. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/evaluate.js +38 -0
  244. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/feedback.d.ts +3 -0
  245. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/feedback.js +1 -0
  246. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/index.d.ts +1 -0
  247. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/index.js +1 -0
  248. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/report.d.ts +2 -0
  249. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/report.js +7 -0
  250. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/send.d.ts +2 -0
  251. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/send.js +2 -0
  252. package/dist/application-spec/generate-application/code/templates/skills/processes/finalization.d.ts +2 -0
  253. package/dist/application-spec/generate-application/code/templates/skills/processes/finalization.js +2 -0
  254. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/build.d.ts +2 -0
  255. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/build.js +25 -0
  256. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/direction.d.ts +2 -0
  257. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/direction.js +35 -0
  258. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/first-draft.d.ts +3 -0
  259. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/first-draft.js +3 -0
  260. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/handoff.d.ts +2 -0
  261. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/handoff.js +9 -0
  262. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/index.d.ts +1 -0
  263. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/index.js +1 -0
  264. package/dist/application-spec/generate-application/code/templates/skills/processes/index.d.ts +8 -0
  265. package/dist/application-spec/generate-application/code/templates/skills/processes/index.js +1 -0
  266. package/dist/application-spec/generate-application/code/templates/skills/processes/model-migration.d.ts +2 -0
  267. package/dist/application-spec/generate-application/code/templates/skills/processes/model-migration.js +1 -0
  268. package/dist/application-spec/generate-application/code/templates/skills/processes/review/appearance.d.ts +2 -0
  269. package/dist/application-spec/generate-application/code/templates/skills/processes/review/appearance.js +46 -0
  270. package/dist/application-spec/generate-application/code/templates/skills/processes/review/code.d.ts +2 -0
  271. package/dist/application-spec/generate-application/code/templates/skills/processes/review/code.js +2 -0
  272. package/dist/application-spec/generate-application/code/templates/skills/processes/review/hand-over.d.ts +2 -0
  273. package/dist/application-spec/generate-application/code/templates/skills/processes/review/hand-over.js +6 -0
  274. package/dist/application-spec/generate-application/code/templates/skills/processes/review/index.d.ts +1 -0
  275. package/dist/application-spec/generate-application/code/templates/skills/processes/review/index.js +1 -0
  276. package/dist/application-spec/generate-application/code/templates/skills/processes/review/review.d.ts +3 -0
  277. package/dist/application-spec/generate-application/code/templates/skills/processes/review/review.js +1 -0
  278. package/dist/application-spec/generate-application/code/templates/skills/processes/review/visual-inspection.d.ts +2 -0
  279. package/dist/application-spec/generate-application/code/templates/skills/processes/review/visual-inspection.js +13 -0
  280. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/branding.d.ts +2 -0
  281. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/branding.js +20 -0
  282. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/catalog.d.ts +2 -0
  283. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/catalog.js +1 -0
  284. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/index.d.ts +1 -0
  285. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/index.js +1 -0
  286. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/product-definition.d.ts +2 -0
  287. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/product-definition.js +22 -0
  288. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/specification.d.ts +3 -0
  289. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/specification.js +1 -0
  290. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/ux-guidelines.d.ts +2 -0
  291. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/ux-guidelines.js +25 -0
  292. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.d.ts +49 -244
  293. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.js +3 -58
  294. package/dist/application-spec/generate-application/code/templates/skills/sdk-subpath-imports.d.ts +9 -0
  295. package/dist/application-spec/generate-application/code/templates/skills/sdk-subpath-imports.js +1 -0
  296. package/dist/application-spec/generate-application/code/templates/spec-code/collect-spec-code.d.ts +58 -0
  297. package/dist/application-spec/generate-application/code/templates/spec-code/collect-spec-code.js +1 -0
  298. package/dist/application-spec/generate-application/code/templates/spec-code/index.d.ts +2 -0
  299. package/dist/application-spec/generate-application/code/templates/spec-code/index.js +1 -0
  300. package/dist/application-spec/generate-application/code/templates/spec-code/spec-code.d.ts +18 -0
  301. package/dist/application-spec/generate-application/code/templates/spec-code/spec-code.js +41 -0
  302. package/dist/application-spec/generate-application/code/templates/spec-messages/index.d.ts +1 -0
  303. package/dist/application-spec/generate-application/code/templates/spec-messages/index.js +1 -0
  304. package/dist/application-spec/generate-application/code/templates/spec-messages/spec-messages.d.ts +20 -0
  305. package/dist/application-spec/generate-application/code/templates/spec-messages/spec-messages.js +6 -0
  306. package/dist/application-spec/generate-application/code/templates/story/phx-module.d.ts +8 -2
  307. package/dist/application-spec/generate-application/code/templates/story/phx-module.js +15 -3
  308. package/dist/application-spec/generate-application/code/templates/story/wrapper.d.ts +3 -0
  309. package/dist/application-spec/generate-application/code/templates/story/wrapper.js +4 -5
  310. package/dist/application-spec/generate-application/code/templates/tsconfig.d.ts +5 -0
  311. package/dist/application-spec/generate-application/code/templates/tsconfig.js +2 -1
  312. package/dist/application-spec/generate-application/code/templates/webhooks-config.js +2 -3
  313. package/dist/application-spec/generate-application/index.d.ts +1 -4
  314. package/dist/application-spec/generate-application/index.js +1 -1
  315. package/dist/application-spec/parse-application-files/categorize/categorize-files.d.ts +28 -0
  316. package/dist/application-spec/parse-application-files/categorize/categorize-files.js +1 -1
  317. package/dist/application-spec/parse-application-files/categorize/earlier-generated-editor-configs.d.ts +16 -0
  318. package/dist/application-spec/parse-application-files/categorize/earlier-generated-editor-configs.js +9 -0
  319. package/dist/application-spec/parse-application-files/categorize/earlier-generated-tsconfig.d.ts +9 -0
  320. package/dist/application-spec/parse-application-files/categorize/earlier-generated-tsconfig.js +1 -0
  321. package/dist/application-spec/parse-application-files/merge/merged-assistant.d.ts +13 -4
  322. package/dist/application-spec/parse-application-files/merge/merged-assistant.js +1 -1
  323. package/dist/application-spec/parse-application-files/merge/merged-infra.d.ts +4 -11
  324. package/dist/application-spec/parse-application-files/merge/merged-transformers.d.ts +2 -4
  325. package/dist/application-spec/parse-application-files/parse-application-files.js +1 -1
  326. package/dist/application-spec/parse-application-files/raw-spec/parse-yaml-spec-file.js +1 -1
  327. package/dist/application-spec/parse-application-files/raw-spec/raw-acl.d.ts +2 -2
  328. package/dist/application-spec/parse-application-files/raw-spec/raw-acl.js +1 -1
  329. package/dist/application-spec/parse-application-files/raw-spec/raw-admin-pages.d.ts +3 -24
  330. package/dist/application-spec/parse-application-files/raw-spec/raw-assistant.d.ts +58 -23
  331. package/dist/application-spec/parse-application-files/raw-spec/raw-assistant.js +1 -1
  332. package/dist/application-spec/parse-application-files/raw-spec/raw-expressions.d.ts +1 -1
  333. package/dist/application-spec/parse-application-files/raw-spec/raw-expressions.js +1 -1
  334. package/dist/application-spec/parse-application-files/raw-spec/raw-resources.d.ts +19 -64
  335. package/dist/application-spec/parse-application-files/spec/application/admin-spec/admin-pages.d.ts +3 -20
  336. package/dist/application-spec/parse-application-files/spec/application/admin-spec/admin-spec.js +1 -1
  337. package/dist/application-spec/parse-application-files/spec/application/admin-spec/states.d.ts +3 -5
  338. package/dist/application-spec/parse-application-files/spec/application/configurator-spec/configurator-spec.js +1 -1
  339. package/dist/application-spec/parse-application-files/spec/application/configurator-spec/states.d.ts +3 -8
  340. package/dist/application-spec/parse-application-files/spec/common/index.d.ts +1 -0
  341. package/dist/application-spec/parse-application-files/spec/common/index.js +1 -1
  342. package/dist/application-spec/parse-application-files/spec/common/value-type/format-value-type.d.ts +3 -0
  343. package/dist/application-spec/parse-application-files/spec/common/value-type/format-value-type.js +1 -0
  344. package/dist/application-spec/parse-application-files/spec/common/value-type/index.d.ts +5 -0
  345. package/dist/application-spec/parse-application-files/spec/common/value-type/index.js +1 -0
  346. package/dist/application-spec/parse-application-files/spec/common/value-type/intersect-value-types.d.ts +6 -0
  347. package/dist/application-spec/parse-application-files/spec/common/value-type/intersect-value-types.js +1 -0
  348. package/dist/application-spec/parse-application-files/spec/common/value-type/is-assignable-value-type.d.ts +8 -0
  349. package/dist/application-spec/parse-application-files/spec/common/value-type/is-assignable-value-type.js +1 -0
  350. package/dist/application-spec/parse-application-files/spec/common/value-type/value-type-at.d.ts +10 -0
  351. package/dist/application-spec/parse-application-files/spec/common/value-type/value-type-at.js +1 -0
  352. package/dist/application-spec/parse-application-files/spec/common/value-type/value-type.d.ts +98 -0
  353. package/dist/application-spec/parse-application-files/spec/common/value-type/value-type.js +1 -0
  354. package/dist/application-spec/parse-application-files/spec/components/bindings/component-path.d.ts +13 -0
  355. package/dist/application-spec/parse-application-files/spec/components/bindings/component-path.js +1 -0
  356. package/dist/application-spec/parse-application-files/spec/components/bindings/index.d.ts +2 -0
  357. package/dist/application-spec/parse-application-files/spec/components/bindings/index.js +1 -1
  358. package/dist/application-spec/parse-application-files/spec/components/bindings/read-binding-type.d.ts +24 -0
  359. package/dist/application-spec/parse-application-files/spec/components/bindings/read-binding-type.js +1 -0
  360. package/dist/application-spec/parse-application-files/spec/components/bindings/read-binding.d.ts +3 -13
  361. package/dist/application-spec/parse-application-files/spec/components/bindings/write-binding.d.ts +4 -32
  362. package/dist/application-spec/parse-application-files/spec/components/component-filter.d.ts +4 -10
  363. package/dist/application-spec/parse-application-files/spec/components/component-state-type.d.ts +8 -0
  364. package/dist/application-spec/parse-application-files/spec/components/component-state-type.js +1 -0
  365. package/dist/application-spec/parse-application-files/spec/components/components.d.ts +3 -4
  366. package/dist/application-spec/parse-application-files/spec/components/filter-criterion-types.d.ts +13 -0
  367. package/dist/application-spec/parse-application-files/spec/components/filter-criterion-types.js +1 -0
  368. package/dist/application-spec/parse-application-files/spec/components/index.d.ts +1 -2
  369. package/dist/application-spec/parse-application-files/spec/components/index.js +1 -1
  370. package/dist/application-spec/parse-application-files/spec/components/sdk-component-entry.d.ts +1 -1
  371. package/dist/application-spec/parse-application-files/spec/components/static-entity-id.d.ts +14 -0
  372. package/dist/application-spec/parse-application-files/spec/components/static-entity-id.js +1 -0
  373. package/dist/application-spec/parse-application-files/spec/components/user-component-entry.d.ts +8 -3
  374. package/dist/application-spec/parse-application-files/spec/components/user-component-entry.js +1 -1
  375. package/dist/application-spec/parse-application-files/spec/components/user-components.d.ts +9 -7
  376. package/dist/application-spec/parse-application-files/spec/components/user-components.js +1 -1
  377. package/dist/application-spec/parse-application-files/spec/expressions/expression-read-types.d.ts +24 -0
  378. package/dist/application-spec/parse-application-files/spec/expressions/expression-read-types.js +1 -0
  379. package/dist/application-spec/parse-application-files/spec/expressions/expression-read.d.ts +13 -0
  380. package/dist/application-spec/parse-application-files/spec/expressions/expression-value-type.d.ts +9 -0
  381. package/dist/application-spec/parse-application-files/spec/expressions/expression-value-type.js +1 -0
  382. package/dist/application-spec/parse-application-files/spec/expressions/expressions.d.ts +12 -30
  383. package/dist/application-spec/parse-application-files/spec/expressions/expressions.js +1 -1
  384. package/dist/application-spec/parse-application-files/spec/expressions/index.d.ts +0 -1
  385. package/dist/application-spec/parse-application-files/spec/expressions/memo-eval-plan.d.ts +4 -71
  386. package/dist/application-spec/parse-application-files/spec/expressions/memo-eval-plan.js +1 -1
  387. package/dist/application-spec/parse-application-files/spec/expressions/user-expressions.d.ts +5 -3
  388. package/dist/application-spec/parse-application-files/spec/expressions/user-expressions.js +1 -1
  389. package/dist/application-spec/parse-application-files/spec/invariants/invariant.d.ts +5 -21
  390. package/dist/application-spec/parse-application-files/spec/invariants/invariants.d.ts +6 -16
  391. package/dist/application-spec/parse-application-files/spec/invariants/invariants.js +1 -1
  392. package/dist/application-spec/parse-application-files/spec/model/aliases.d.ts +3 -9
  393. package/dist/application-spec/parse-application-files/spec/model/common-types.d.ts +6 -14
  394. package/dist/application-spec/parse-application-files/spec/model/defaults.d.ts +6 -31
  395. package/dist/application-spec/parse-application-files/spec/model/entity-types.d.ts +3 -8
  396. package/dist/application-spec/parse-application-files/spec/model/index.d.ts +1 -0
  397. package/dist/application-spec/parse-application-files/spec/model/index.js +1 -1
  398. package/dist/application-spec/parse-application-files/spec/model/model-type-resolution.d.ts +10 -0
  399. package/dist/application-spec/parse-application-files/spec/model/model-type-resolution.js +1 -0
  400. package/dist/application-spec/parse-application-files/spec/model/model-version-key.d.ts +3 -3
  401. package/dist/application-spec/parse-application-files/spec/model/names/action-name.d.ts +3 -7
  402. package/dist/application-spec/parse-application-files/spec/model/names/alias-name.d.ts +3 -7
  403. package/dist/application-spec/parse-application-files/spec/model/names/entity-or-alias-name.d.ts +3 -8
  404. package/dist/application-spec/parse-application-files/spec/model/names/entity-type-name.d.ts +3 -8
  405. package/dist/application-spec/parse-application-files/spec/model/names/expression-name.d.ts +3 -6
  406. package/dist/application-spec/parse-application-files/spec/model/names/instance-name.d.ts +3 -7
  407. package/dist/application-spec/parse-application-files/spec/model/names/invariant-name.d.ts +3 -3
  408. package/dist/application-spec/parse-application-files/spec/model/names/shape-property-name.d.ts +3 -11
  409. package/dist/application-spec/parse-application-files/spec/model/names/violation-type-name.d.ts +3 -3
  410. package/dist/application-spec/parse-application-files/spec/model/presets.d.ts +6 -29
  411. package/dist/application-spec/parse-application-files/spec/sections/actions.d.ts +6 -23
  412. package/dist/application-spec/parse-application-files/spec/sections/app-metadata.d.ts +3 -18
  413. package/dist/application-spec/parse-application-files/spec/sections/application-version.d.ts +3 -7
  414. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-form-elements.d.ts +9 -0
  415. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-form-elements.js +1 -0
  416. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-schema.d.ts +4 -1
  417. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-schema.js +1 -1
  418. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant.js +1 -1
  419. package/dist/application-spec/parse-application-files/spec/sections/data-spec/chunks.d.ts +6 -23
  420. package/dist/application-spec/parse-application-files/spec/sections/data-spec/custom-data-spec.d.ts +1 -16
  421. package/dist/application-spec/parse-application-files/spec/sections/data-spec/data-entry-key.d.ts +3 -9
  422. package/dist/application-spec/parse-application-files/spec/sections/data-spec/data-spec.d.ts +1 -10
  423. package/dist/application-spec/parse-application-files/spec/sections/data-spec/swatch-data-spec.d.ts +1 -14
  424. package/dist/application-spec/parse-application-files/spec/sections/state-value.d.ts +3 -7
  425. package/dist/application-spec/parse-application-files/spec/sections/theme.d.ts +3 -10
  426. package/dist/application-spec/parse-application-files/spec/sections/transformers.d.ts +4 -11
  427. package/dist/application-spec/parse-application-files/spec/sections/ui.d.ts +3 -12
  428. package/dist/client/authorized-client.d.ts +4 -2
  429. package/dist/client/authorized-client.js +1 -1
  430. package/dist/client/contract.d.ts +50 -5
  431. package/dist/client/contract.js +1 -1
  432. package/dist/client/index.d.ts +1 -1
  433. package/dist/client/local-authorized-client.d.ts +3 -1
  434. package/dist/client/local-authorized-client.js +1 -1
  435. package/dist/client/memory-authorized-client.d.ts +4 -1
  436. package/dist/client/memory-authorized-client.js +1 -1
  437. package/dist/client/phoenix-api.d.ts +1036 -18
  438. package/dist/configurator/ConfiguratorApp.js +1 -1
  439. package/dist/configurator/agent-at-work/AgentAtWorkFallback.d.ts +7 -0
  440. package/dist/configurator/agent-at-work/AgentAtWorkFallback.js +1 -0
  441. package/dist/configurator/agent-at-work/AgentAtWorkPage.d.ts +20 -0
  442. package/dist/configurator/agent-at-work/AgentAtWorkPage.js +1 -0
  443. package/dist/configurator/agent-at-work/AgentModeBadge.d.ts +11 -0
  444. package/dist/configurator/agent-at-work/AgentModeBadge.js +1 -0
  445. package/dist/configurator/agent-at-work/StudioMark.d.ts +8 -0
  446. package/dist/configurator/agent-at-work/StudioMark.js +1 -0
  447. package/dist/configurator/agent-at-work/agent-at-work-copy.d.ts +17 -0
  448. package/dist/configurator/agent-at-work/agent-at-work-copy.js +1 -0
  449. package/dist/configurator/agent-at-work/agent-at-work-styles.d.ts +23 -0
  450. package/dist/configurator/agent-at-work/agent-at-work-styles.js +374 -0
  451. package/dist/configurator/agent-at-work/index.d.ts +3 -0
  452. package/dist/configurator/agent-at-work/index.js +1 -0
  453. package/dist/configurator/app-loader-content/DefaultAppLoaderContent.d.ts +2 -0
  454. package/dist/configurator/app-loader-content/DefaultAppLoaderContent.js +5 -0
  455. package/dist/configurator/app-loader-content/index.d.ts +1 -0
  456. package/dist/configurator/app-loader-content/index.js +1 -0
  457. package/dist/configurator/application-runtime/extensions/selectors.js +1 -1
  458. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-annotation.d.ts +34 -0
  459. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-image-view.d.ts +18 -0
  460. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.d.ts +296 -26
  461. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.js +1 -1
  462. package/dist/configurator/application-runtime/extensions/systems/assistant-system/composer-attachments.d.ts +68 -0
  463. package/dist/configurator/application-runtime/extensions/systems/assistant-system/composer-attachments.js +1 -0
  464. package/dist/configurator/application-runtime/extensions/systems/assistant-system/graphql-tools.d.ts +58 -9
  465. package/dist/configurator/application-runtime/extensions/systems/assistant-system/graphql-tools.js +1 -1
  466. package/dist/configurator/application-runtime/extensions/systems/assistant-system/rasterize-image.d.ts +13 -0
  467. package/dist/configurator/application-runtime/extensions/systems/assistant-system/rasterize-image.js +1 -0
  468. package/dist/configurator/application-runtime/extensions/systems/camera-control-system/camera-control-system.d.ts +44 -1
  469. package/dist/configurator/application-runtime/extensions/systems/camera-control-system/camera-control-system.js +1 -1
  470. package/dist/configurator/application-runtime/extensions/systems/canvas-system.d.ts +8 -0
  471. package/dist/configurator/application-runtime/extensions/systems/canvas-system.js +1 -1
  472. package/dist/configurator/application-runtime/extensions/systems/export-system/export-busy-error.d.ts +8 -0
  473. package/dist/configurator/application-runtime/extensions/systems/export-system/export-busy-error.js +1 -0
  474. package/dist/configurator/application-runtime/extensions/systems/export-system/export-system.d.ts +26 -1
  475. package/dist/configurator/application-runtime/extensions/systems/export-system/export-system.js +1 -1
  476. package/dist/configurator/application-runtime/extensions/systems/graphql-system/close-unclosed-braces.d.ts +12 -0
  477. package/dist/configurator/application-runtime/extensions/systems/graphql-system/close-unclosed-braces.js +1 -0
  478. package/dist/configurator/application-runtime/extensions/systems/graphql-system/entity-meta.d.ts +82 -55
  479. package/dist/configurator/application-runtime/extensions/systems/graphql-system/entity-meta.js +1 -1
  480. package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.d.ts +80 -6
  481. package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.js +1 -1
  482. package/dist/configurator/application-runtime/extensions/systems/graphql-system/violations.d.ts +40 -0
  483. package/dist/configurator/application-runtime/extensions/systems/graphql-system/violations.js +1 -0
  484. package/dist/configurator/application-runtime/extensions/systems/image-rendering-system/capture-next-frame.d.ts +10 -0
  485. package/dist/configurator/application-runtime/extensions/systems/image-rendering-system/capture-next-frame.js +1 -0
  486. package/dist/configurator/application-runtime/extensions/systems/image-rendering-system/image-rendering-system.d.ts +22 -5
  487. package/dist/configurator/application-runtime/extensions/systems/image-rendering-system/image-rendering-system.js +1 -1
  488. package/dist/configurator/application-runtime/extensions/systems/index.d.ts +5 -2
  489. package/dist/configurator/application-runtime/extensions/systems/index.js +1 -1
  490. package/dist/configurator/application-runtime/extensions/systems/layout-system/layout-system.d.ts +11 -0
  491. package/dist/configurator/application-runtime/extensions/systems/layout-system/layout-system.js +1 -1
  492. package/dist/configurator/application-runtime/extensions/systems/sketching-system/sketching-system.d.ts +5 -5
  493. package/dist/configurator/common/configurator-interface.d.ts +145 -11
  494. package/dist/configurator/common/configurator-interface.js +1 -1
  495. package/dist/configurator/common/index.d.ts +3 -2
  496. package/dist/configurator/common/index.js +1 -1
  497. package/dist/configurator/common/use-reset-camera.d.ts +6 -0
  498. package/dist/configurator/common/use-reset-camera.js +1 -0
  499. package/dist/configurator/configuration-not-found-page/BuiltInConfigurationNotFoundPage.d.ts +5 -0
  500. package/dist/configurator/configuration-not-found-page/BuiltInConfigurationNotFoundPage.js +1 -0
  501. package/dist/configurator/configuration-not-found-page/ConfigurationNotFoundPageElement.d.ts +6 -0
  502. package/dist/configurator/configuration-not-found-page/ConfigurationNotFoundPageElement.js +1 -0
  503. package/dist/configurator/configuration-not-found-page/index.d.ts +2 -0
  504. package/dist/configurator/configuration-not-found-page/index.js +1 -0
  505. package/dist/configurator/configurator-context/PreviewContextProvider.js +1 -1
  506. package/dist/configurator/configurator-context/ViewportStateSync.d.ts +2 -2
  507. package/dist/configurator/configurator-context/ViewportStateSync.js +1 -1
  508. package/dist/configurator/configurator-context/configurator-hooks/index.d.ts +0 -1
  509. package/dist/configurator/configurator-context/configurator-hooks/index.js +1 -1
  510. package/dist/configurator/configurator-context/configurator-hooks/layout-hooks.d.ts +10 -0
  511. package/dist/configurator/configurator-context/configurator-hooks/layout-hooks.js +1 -1
  512. package/dist/configurator/configurator-context/index.d.ts +0 -5
  513. package/dist/configurator/configurator-context/index.js +1 -1
  514. package/dist/configurator/configurator-error-page/BuiltInConfiguratorErrorPage.d.ts +6 -0
  515. package/dist/configurator/configurator-error-page/BuiltInConfiguratorErrorPage.js +1 -0
  516. package/dist/configurator/configurator-error-page/ConfiguratorErrorPageElement.d.ts +7 -0
  517. package/dist/configurator/configurator-error-page/ConfiguratorErrorPageElement.js +1 -0
  518. package/dist/configurator/configurator-error-page/index.d.ts +2 -0
  519. package/dist/configurator/configurator-error-page/index.js +1 -0
  520. package/dist/configurator/index.d.ts +11 -0
  521. package/dist/configurator/index.js +1 -1
  522. package/dist/configurator/pages/ConfiguratorErrorPage.d.ts +0 -1
  523. package/dist/configurator/pages/ConfiguratorErrorPage.js +1 -1
  524. package/dist/configurator/pages/ConfiguratorNotFoundPage.js +1 -1
  525. package/dist/configurator/pages/DefaultConfiguratorLayout.d.ts +3 -2
  526. package/dist/configurator/pages/DefaultNotAuthenticatedPage.d.ts +8 -0
  527. package/dist/configurator/pages/DefaultNotAuthenticatedPage.js +1 -0
  528. package/dist/configurator/pages/DefaultPresetUi.d.ts +7 -0
  529. package/dist/configurator/pages/DefaultPresetUi.js +1 -0
  530. package/dist/configurator/pages/ExportingOverlay.d.ts +6 -0
  531. package/dist/configurator/pages/ExportingOverlay.js +1 -0
  532. package/dist/configurator/pages/InertRoot.d.ts +10 -0
  533. package/dist/configurator/pages/InertRoot.js +1 -0
  534. package/dist/configurator/pages/LoadedConfiguratorDetailPage.js +1 -1
  535. package/dist/configurator/pages/NewConfiguratorPage.js +1 -1
  536. package/dist/configurator/pages/PresetCreationErrorPage.d.ts +2 -2
  537. package/dist/configurator/pages/PresetCreationErrorPage.js +1 -1
  538. package/dist/configurator/pages/RootPage.js +1 -1
  539. package/dist/configurator/pages/default-configurator-elements.d.ts +11 -1
  540. package/dist/configurator/pages/default-configurator-elements.js +1 -1
  541. package/dist/configurator/pages/default-elements/built-in-entity-element.d.ts +10 -0
  542. package/dist/configurator/pages/default-elements/built-in-entity-element.js +1 -0
  543. package/dist/configurator/pages/default-elements/built-in-layout-element.d.ts +10 -0
  544. package/dist/configurator/pages/default-elements/built-in-layout-element.js +1 -0
  545. package/dist/configurator/pages/default-elements/domain-control-elements.d.ts +6 -0
  546. package/dist/configurator/pages/default-elements/domain-control-elements.js +1 -0
  547. package/dist/configurator/pages/default-elements/index.d.ts +5 -0
  548. package/dist/configurator/pages/default-elements/index.js +1 -0
  549. package/dist/configurator/pages/default-elements/recipe-panel-elements.d.ts +3 -0
  550. package/dist/configurator/pages/default-elements/recipe-panel-elements.js +1 -0
  551. package/dist/configurator/pages/default-elements/scene-controls/BuiltInAddEntityFab.d.ts +3 -0
  552. package/dist/configurator/pages/default-elements/scene-controls/BuiltInAddEntityFab.js +1 -0
  553. package/dist/configurator/pages/default-elements/scene-controls/BuiltInDeleteEntityFab.d.ts +3 -0
  554. package/dist/configurator/pages/default-elements/scene-controls/BuiltInDeleteEntityFab.js +1 -0
  555. package/dist/configurator/pages/default-elements/scene-controls/BuiltInNavigationHotspot.d.ts +3 -0
  556. package/dist/configurator/pages/default-elements/scene-controls/BuiltInNavigationHotspot.js +1 -0
  557. package/dist/configurator/pages/default-elements/scene-controls/BuiltInSelectionHotspot.d.ts +3 -0
  558. package/dist/configurator/pages/default-elements/scene-controls/BuiltInSelectionHotspot.js +1 -0
  559. package/dist/configurator/pages/default-elements/scene-controls/BuiltInToolMenuFab.d.ts +3 -0
  560. package/dist/configurator/pages/default-elements/scene-controls/BuiltInToolMenuFab.js +1 -0
  561. package/dist/configurator/pages/default-elements/scene-controls/index.d.ts +6 -0
  562. package/dist/configurator/pages/default-elements/scene-controls/index.js +1 -0
  563. package/dist/configurator/pages/default-elements/scene-controls/scene-control-elements.d.ts +6 -0
  564. package/dist/configurator/pages/default-elements/scene-controls/scene-control-elements.js +1 -0
  565. package/dist/configurator/pages/default-elements/sidebar-footer-elements.d.ts +7 -0
  566. package/dist/configurator/pages/default-elements/sidebar-footer-elements.js +1 -0
  567. package/dist/configurator/pages/default-elements/toolbar-elements.d.ts +7 -0
  568. package/dist/configurator/pages/default-elements/toolbar-elements.js +1 -0
  569. package/dist/configurator/pages/error-boundaries/AgentModeErrorFallback.d.ts +8 -0
  570. package/dist/configurator/pages/error-boundaries/AgentModeErrorFallback.js +1 -0
  571. package/dist/configurator/pages/error-boundaries/BuiltInGeneralErrorFallback.d.ts +5 -0
  572. package/dist/configurator/pages/error-boundaries/BuiltInGeneralErrorFallback.js +1 -0
  573. package/dist/configurator/pages/error-boundaries/DevContextFallback.d.ts +4 -2
  574. package/dist/configurator/pages/error-boundaries/DevContextFallback.js +1 -1
  575. package/dist/configurator/pages/error-boundaries/DevLoadingFallback.d.ts +6 -4
  576. package/dist/configurator/pages/error-boundaries/DevLoadingFallback.js +1 -1
  577. package/dist/configurator/pages/error-boundaries/GeneralErrorBoundary.js +1 -1
  578. package/dist/configurator/pages/error-boundaries/LoadingErrorBoundary.js +1 -1
  579. package/dist/configurator/pages/error-boundaries/index.d.ts +1 -0
  580. package/dist/configurator/pages/error-boundaries/index.js +1 -1
  581. package/dist/configurator/pages/provider-slots/ConfiguratorResponsiveProvider.d.ts +12 -0
  582. package/dist/configurator/pages/provider-slots/ConfiguratorResponsiveProvider.js +1 -0
  583. package/dist/configurator/pages/provider-slots/ContainerSlotProvider.d.ts +3 -0
  584. package/dist/configurator/pages/provider-slots/ContainerSlotProvider.js +1 -0
  585. package/dist/configurator/pages/provider-slots/LoaderSlotProvider.d.ts +3 -0
  586. package/dist/configurator/pages/provider-slots/LoaderSlotProvider.js +1 -0
  587. package/dist/configurator/pages/provider-slots/MessageHostSlotProvider.d.ts +3 -0
  588. package/dist/configurator/pages/provider-slots/MessageHostSlotProvider.js +1 -0
  589. package/dist/configurator/pages/provider-slots/SceneResourcesSlotProvider.d.ts +3 -0
  590. package/dist/configurator/pages/provider-slots/SceneResourcesSlotProvider.js +1 -0
  591. package/dist/configurator/pages/provider-slots/ThemeSlotProvider.d.ts +3 -0
  592. package/dist/configurator/pages/provider-slots/ThemeSlotProvider.js +1 -0
  593. package/dist/configurator/pages/provider-slots/configurator-provider-slot-elements.d.ts +3 -0
  594. package/dist/configurator/pages/provider-slots/configurator-provider-slot-elements.js +1 -0
  595. package/dist/configurator/pages/provider-slots/index.d.ts +6 -0
  596. package/dist/configurator/pages/provider-slots/index.js +1 -0
  597. package/dist/configurator/pages/ui-elements/BuiltInInvalidDeploymentReload.d.ts +2 -0
  598. package/dist/configurator/pages/ui-elements/BuiltInInvalidDeploymentReload.js +1 -0
  599. package/dist/configurator/pages/ui-elements/configurator-ui-elements.d.ts +3 -0
  600. package/dist/configurator/pages/ui-elements/configurator-ui-elements.js +1 -0
  601. package/dist/configurator/pages/ui-elements/index.d.ts +2 -0
  602. package/dist/configurator/pages/ui-elements/index.js +1 -0
  603. package/dist/configurator/preset-screen-elements/PresetDeviceNotSupportedElement.d.ts +4 -0
  604. package/dist/configurator/preset-screen-elements/PresetDeviceNotSupportedElement.js +1 -0
  605. package/dist/configurator/preset-screen-elements/PresetPageActionElement.d.ts +4 -0
  606. package/dist/configurator/preset-screen-elements/PresetPageActionElement.js +1 -0
  607. package/dist/configurator/preset-screen-elements/index.d.ts +2 -0
  608. package/dist/configurator/preset-screen-elements/index.js +1 -0
  609. package/dist/configurator/scene/cameras/CameraPadding.js +1 -1
  610. package/dist/configurator/scene/index.d.ts +1 -0
  611. package/dist/configurator/scene/index.js +1 -1
  612. package/dist/configurator/scene/scene-controls/DeleteEntityFab.js +1 -1
  613. package/dist/configurator/scene/scene-controls/SelectionHotspot.js +1 -1
  614. package/dist/configurator/scene/scene-controls/ToolFab.d.ts +4 -0
  615. package/dist/configurator/scene/scene-controls/ToolFab.js +1 -1
  616. package/dist/configurator/scene/scene-controls/use-scene-control-tooltip.d.ts +2 -1
  617. package/dist/configurator/scene/scene-entity/scene-controls/SceneEntityHtmlHotspots.js +1 -1
  618. package/dist/configurator/toolbar-actions/index.d.ts +3 -0
  619. package/dist/configurator/toolbar-actions/index.js +1 -0
  620. package/dist/configurator/toolbar-actions/use-assistant-panel.d.ts +18 -0
  621. package/dist/configurator/toolbar-actions/use-assistant-panel.js +1 -0
  622. package/dist/configurator/toolbar-actions/use-measurements.d.ts +35 -0
  623. package/dist/configurator/toolbar-actions/use-measurements.js +1 -0
  624. package/dist/configurator/toolbar-actions/use-toolbar-actions.d.ts +100 -0
  625. package/dist/configurator/toolbar-actions/use-toolbar-actions.js +1 -0
  626. package/dist/configurator/toolbar-actions/use-toolbar-help.d.ts +7 -0
  627. package/dist/configurator/toolbar-actions/use-toolbar-help.js +1 -0
  628. package/dist/configurator/ui/assistant/AssistantChips.d.ts +92 -3
  629. package/dist/configurator/ui/assistant/AssistantChips.js +1 -1
  630. package/dist/configurator/ui/assistant/AssistantComposer.d.ts +100 -1
  631. package/dist/configurator/ui/assistant/AssistantComposer.js +1 -1
  632. package/dist/configurator/ui/assistant/AssistantMarkdown.d.ts +41 -2
  633. package/dist/configurator/ui/assistant/AssistantMarkdown.js +1 -1
  634. package/dist/configurator/ui/assistant/AssistantPanel.d.ts +46 -1
  635. package/dist/configurator/ui/assistant/AssistantPanel.js +1 -1
  636. package/dist/configurator/ui/assistant/AssistantThread.d.ts +80 -4
  637. package/dist/configurator/ui/assistant/AssistantThread.js +1 -1
  638. package/dist/configurator/ui/assistant/AssistantThreadItemView.d.ts +103 -0
  639. package/dist/configurator/ui/assistant/AssistantThreadItemView.js +1 -0
  640. package/dist/configurator/ui/assistant/alert/AssistantAlert.d.ts +45 -0
  641. package/dist/configurator/ui/assistant/alert/AssistantAlert.js +1 -0
  642. package/dist/configurator/ui/assistant/alert/index.d.ts +2 -0
  643. package/dist/configurator/ui/assistant/alert/index.js +1 -0
  644. package/dist/configurator/ui/assistant/alert/remark-alerts.d.ts +10 -0
  645. package/dist/configurator/ui/assistant/alert/remark-alerts.js +1 -0
  646. package/dist/configurator/ui/assistant/annotation/AnnotationBadge.d.ts +43 -0
  647. package/dist/configurator/ui/assistant/annotation/AnnotationBadge.js +1 -0
  648. package/dist/configurator/ui/assistant/annotation/AnnotationOverlay.d.ts +5 -0
  649. package/dist/configurator/ui/assistant/annotation/AnnotationOverlay.js +1 -0
  650. package/dist/configurator/ui/assistant/annotation/AnnotationPin.d.ts +14 -0
  651. package/dist/configurator/ui/assistant/annotation/AnnotationPin.js +1 -0
  652. package/dist/configurator/ui/assistant/annotation/AnnotationViewer.d.ts +12 -0
  653. package/dist/configurator/ui/assistant/annotation/AnnotationViewer.js +1 -0
  654. package/dist/configurator/ui/assistant/annotation/MessageAnnotations.d.ts +11 -0
  655. package/dist/configurator/ui/assistant/annotation/MessageAnnotations.js +1 -0
  656. package/dist/configurator/ui/assistant/annotation/annotation-layout.d.ts +80 -0
  657. package/dist/configurator/ui/assistant/annotation/annotation-layout.js +1 -0
  658. package/dist/configurator/ui/assistant/annotation/editor/AnnotationComment.d.ts +49 -0
  659. package/dist/configurator/ui/assistant/annotation/editor/AnnotationComment.js +1 -0
  660. package/dist/configurator/ui/assistant/annotation/editor/AnnotationEditor.d.ts +18 -0
  661. package/dist/configurator/ui/assistant/annotation/editor/AnnotationEditor.js +1 -0
  662. package/dist/configurator/ui/assistant/annotation/editor/annotation-drawing.d.ts +22 -0
  663. package/dist/configurator/ui/assistant/annotation/editor/annotation-drawing.js +1 -0
  664. package/dist/configurator/ui/assistant/annotation/editor/annotation-pins.d.ts +22 -0
  665. package/dist/configurator/ui/assistant/annotation/editor/annotation-pins.js +1 -0
  666. package/dist/configurator/ui/assistant/annotation/editor/flatten-annotation.d.ts +17 -0
  667. package/dist/configurator/ui/assistant/annotation/editor/flatten-annotation.js +1 -0
  668. package/dist/configurator/ui/assistant/annotation/editor/index.d.ts +2 -0
  669. package/dist/configurator/ui/assistant/annotation/editor/index.js +1 -0
  670. package/dist/configurator/ui/assistant/annotation/index.d.ts +6 -0
  671. package/dist/configurator/ui/assistant/annotation/index.js +1 -0
  672. package/dist/configurator/ui/assistant/annotation/prefers-reduced-motion.d.ts +2 -0
  673. package/dist/configurator/ui/assistant/annotation/prefers-reduced-motion.js +1 -0
  674. package/dist/configurator/ui/assistant/annotation/use-end-on-unmount.d.ts +6 -0
  675. package/dist/configurator/ui/assistant/annotation/use-end-on-unmount.js +1 -0
  676. package/dist/configurator/ui/assistant/assistant-failure.d.ts +20 -7
  677. package/dist/configurator/ui/assistant/assistant-failure.js +1 -1
  678. package/dist/configurator/ui/assistant/attachments/MessageImages.d.ts +63 -0
  679. package/dist/configurator/ui/assistant/attachments/MessageImages.js +1 -0
  680. package/dist/configurator/ui/assistant/attachments/index.d.ts +2 -0
  681. package/dist/configurator/ui/assistant/attachments/index.js +1 -0
  682. package/dist/configurator/ui/assistant/attachments/prepare-image.d.ts +24 -0
  683. package/dist/configurator/ui/assistant/attachments/prepare-image.js +1 -0
  684. package/dist/configurator/ui/assistant/composer/composer-frame.d.ts +20 -0
  685. package/dist/configurator/ui/assistant/composer/composer-frame.js +1 -0
  686. package/dist/configurator/ui/assistant/composer/index.d.ts +1 -0
  687. package/dist/configurator/ui/assistant/composer/index.js +1 -0
  688. package/dist/configurator/ui/assistant/drawing/AssistantDrawing.d.ts +58 -0
  689. package/dist/configurator/ui/assistant/drawing/AssistantDrawing.js +1 -0
  690. package/dist/configurator/ui/assistant/drawing/index.d.ts +2 -0
  691. package/dist/configurator/ui/assistant/drawing/index.js +1 -0
  692. package/dist/configurator/ui/assistant/drawing/parse-drawing.d.ts +18 -0
  693. package/dist/configurator/ui/assistant/drawing/parse-drawing.js +1 -0
  694. package/dist/configurator/ui/assistant/drawing/use-drawing-url.d.ts +14 -0
  695. package/dist/configurator/ui/assistant/drawing/use-drawing-url.js +1 -0
  696. package/dist/configurator/ui/assistant/entity-link/AssistantEntityLink.d.ts +36 -2
  697. package/dist/configurator/ui/assistant/entity-link/AssistantEntityLink.js +1 -1
  698. package/dist/configurator/ui/assistant/entity-link/entity-link-state.d.ts +1 -1
  699. package/dist/configurator/ui/assistant/entity-link/index.d.ts +2 -3
  700. package/dist/configurator/ui/assistant/entity-link/index.js +1 -1
  701. package/dist/configurator/ui/assistant/form/AssistantForm.d.ts +76 -0
  702. package/dist/configurator/ui/assistant/form/AssistantForm.js +1 -0
  703. package/dist/configurator/ui/assistant/form/built-in-form-slots.d.ts +16 -0
  704. package/dist/configurator/ui/assistant/form/built-in-form-slots.js +1 -0
  705. package/dist/configurator/ui/assistant/form/compose-answer.d.ts +11 -0
  706. package/dist/configurator/ui/assistant/form/compose-answer.js +1 -0
  707. package/dist/configurator/ui/assistant/form/describe-build-errors.d.ts +6 -0
  708. package/dist/configurator/ui/assistant/form/describe-build-errors.js +1 -0
  709. package/dist/configurator/ui/assistant/form/form-model.d.ts +37 -0
  710. package/dist/configurator/ui/assistant/form/form-model.js +1 -0
  711. package/dist/configurator/ui/assistant/form/form-state.d.ts +4 -0
  712. package/dist/configurator/ui/assistant/form/form-state.js +1 -0
  713. package/dist/configurator/ui/assistant/form/index.d.ts +5 -0
  714. package/dist/configurator/ui/assistant/form/index.js +1 -0
  715. package/dist/configurator/ui/assistant/form/parse-form-block.d.ts +10 -0
  716. package/dist/configurator/ui/assistant/form/parse-form-block.js +1 -0
  717. package/dist/configurator/ui/assistant/form/read-form-attributes.d.ts +13 -0
  718. package/dist/configurator/ui/assistant/form/read-form-attributes.js +1 -0
  719. package/dist/configurator/ui/assistant/form/registry/built-in-form-elements.d.ts +29 -0
  720. package/dist/configurator/ui/assistant/form/registry/built-in-form-elements.js +1 -0
  721. package/dist/configurator/ui/assistant/form/registry/create-assistant-form-element.d.ts +31 -0
  722. package/dist/configurator/ui/assistant/form/registry/create-assistant-form-element.js +1 -0
  723. package/dist/configurator/ui/assistant/form/registry/form-element-definition.d.ts +16 -0
  724. package/dist/configurator/ui/assistant/form/registry/form-element-definition.js +1 -0
  725. package/dist/configurator/ui/assistant/form/registry/form-registry.d.ts +31 -0
  726. package/dist/configurator/ui/assistant/form/registry/form-registry.js +1 -0
  727. package/dist/configurator/ui/assistant/form/registry/index.d.ts +6 -0
  728. package/dist/configurator/ui/assistant/form/registry/index.js +1 -0
  729. package/dist/configurator/ui/assistant/form/registry/use-form-registry.d.ts +8 -0
  730. package/dist/configurator/ui/assistant/form/registry/use-form-registry.js +1 -0
  731. package/dist/configurator/ui/assistant/form-elements/FormCard.d.ts +68 -0
  732. package/dist/configurator/ui/assistant/form-elements/FormCard.js +1 -0
  733. package/dist/configurator/ui/assistant/form-elements/FormConfirm.d.ts +60 -0
  734. package/dist/configurator/ui/assistant/form-elements/FormConfirm.js +1 -0
  735. package/dist/configurator/ui/assistant/form-elements/FormGroup.d.ts +53 -0
  736. package/dist/configurator/ui/assistant/form-elements/FormGroup.js +1 -0
  737. package/dist/configurator/ui/assistant/form-elements/FormNumber.d.ts +52 -0
  738. package/dist/configurator/ui/assistant/form-elements/FormNumber.js +1 -0
  739. package/dist/configurator/ui/assistant/form-elements/FormOptions.d.ts +57 -0
  740. package/dist/configurator/ui/assistant/form-elements/FormOptions.js +1 -0
  741. package/dist/configurator/ui/assistant/form-elements/FormReply.d.ts +49 -0
  742. package/dist/configurator/ui/assistant/form-elements/FormReply.js +1 -0
  743. package/dist/configurator/ui/assistant/form-elements/FormSwatch.d.ts +61 -0
  744. package/dist/configurator/ui/assistant/form-elements/FormSwatch.js +1 -0
  745. package/dist/configurator/ui/assistant/form-elements/FormText.d.ts +53 -0
  746. package/dist/configurator/ui/assistant/form-elements/FormText.js +1 -0
  747. package/dist/configurator/ui/assistant/form-elements/clamp-form-number.d.ts +10 -0
  748. package/dist/configurator/ui/assistant/form-elements/clamp-form-number.js +1 -0
  749. package/dist/configurator/ui/assistant/form-elements/form-element-props.d.ts +38 -0
  750. package/dist/configurator/ui/assistant/form-elements/index.d.ts +9 -0
  751. package/dist/configurator/ui/assistant/form-elements/index.js +1 -0
  752. package/dist/configurator/ui/assistant/image-view/ImageView.d.ts +66 -0
  753. package/dist/configurator/ui/assistant/image-view/ImageView.js +1 -0
  754. package/dist/configurator/ui/assistant/image-view/index.d.ts +1 -0
  755. package/dist/configurator/ui/assistant/image-view/index.js +1 -0
  756. package/dist/configurator/ui/assistant/image-view/use-image-blob.d.ts +7 -0
  757. package/dist/configurator/ui/assistant/image-view/use-image-blob.js +1 -0
  758. package/dist/configurator/ui/assistant/index.d.ts +25 -1
  759. package/dist/configurator/ui/assistant/index.js +1 -1
  760. package/dist/configurator/ui/assistant/panel/AssistantPanelHeader.d.ts +49 -0
  761. package/dist/configurator/ui/assistant/panel/AssistantPanelHeader.js +1 -0
  762. package/dist/configurator/ui/assistant/panel/index.d.ts +1 -0
  763. package/dist/configurator/ui/assistant/panel/index.js +1 -0
  764. package/dist/configurator/ui/assistant/popover/AssistantPopover.d.ts +24 -0
  765. package/dist/configurator/ui/assistant/popover/AssistantPopover.js +1 -0
  766. package/dist/configurator/ui/assistant/popover/index.d.ts +1 -0
  767. package/dist/configurator/ui/assistant/popover/index.js +1 -0
  768. package/dist/configurator/ui/assistant/reference-link/AssistantReferenceLink.d.ts +58 -0
  769. package/dist/configurator/ui/assistant/reference-link/AssistantReferenceLink.js +1 -0
  770. package/dist/configurator/ui/assistant/reference-link/assistant-link-target.d.ts +34 -0
  771. package/dist/configurator/ui/assistant/reference-link/assistant-link-target.js +1 -0
  772. package/dist/configurator/ui/assistant/reference-link/assistant-reference-details.d.ts +25 -0
  773. package/dist/configurator/ui/assistant/reference-link/assistant-reference-details.js +1 -0
  774. package/dist/configurator/ui/assistant/reference-link/index.d.ts +3 -0
  775. package/dist/configurator/ui/assistant/reference-link/index.js +1 -0
  776. package/dist/configurator/ui/assistant/reference-link/reference-styles.d.ts +12 -0
  777. package/dist/configurator/ui/assistant/reference-link/reference-styles.js +1 -0
  778. package/dist/configurator/ui/assistant/reference-link/use-assistant-reference-details.d.ts +8 -0
  779. package/dist/configurator/ui/assistant/reference-link/use-assistant-reference-details.js +1 -0
  780. package/dist/configurator/ui/assistant/resource-image/AssistantImage.d.ts +56 -0
  781. package/dist/configurator/ui/assistant/resource-image/AssistantImage.js +1 -0
  782. package/dist/configurator/ui/assistant/resource-image/index.d.ts +3 -0
  783. package/dist/configurator/ui/assistant/resource-image/index.js +1 -0
  784. package/dist/configurator/ui/assistant/resource-image/resource-path.d.ts +2 -0
  785. package/dist/configurator/ui/assistant/resource-image/resource-path.js +1 -0
  786. package/dist/configurator/ui/assistant/resource-image/use-resource-image-url.d.ts +5 -0
  787. package/dist/configurator/ui/assistant/resource-image/use-resource-image-url.js +1 -0
  788. package/dist/configurator/ui/assistant/screenshots/ScreenshotThumbnails.d.ts +43 -0
  789. package/dist/configurator/ui/assistant/screenshots/ScreenshotThumbnails.js +1 -0
  790. package/dist/configurator/ui/assistant/screenshots/index.d.ts +3 -0
  791. package/dist/configurator/ui/assistant/screenshots/index.js +1 -0
  792. package/dist/configurator/ui/assistant/screenshots/tool-screenshots.d.ts +16 -0
  793. package/dist/configurator/ui/assistant/screenshots/tool-screenshots.js +1 -0
  794. package/dist/configurator/ui/assistant/screenshots/use-screenshot-src.d.ts +8 -0
  795. package/dist/configurator/ui/assistant/screenshots/use-screenshot-src.js +1 -0
  796. package/dist/configurator/ui/assistant/streamed-markdown.d.ts +15 -2
  797. package/dist/configurator/ui/assistant/streamed-markdown.js +2 -2
  798. package/dist/configurator/ui/assistant/thread-items.d.ts +21 -1
  799. package/dist/configurator/ui/assistant/thread-items.js +1 -1
  800. package/dist/configurator/ui/assistant/tool-chip.d.ts +19 -9
  801. package/dist/configurator/ui/assistant/tool-chip.js +1 -1
  802. package/dist/configurator/ui/assistant/use-assistant-composer.d.ts +88 -0
  803. package/dist/configurator/ui/assistant/use-assistant-composer.js +2 -0
  804. package/dist/configurator/ui/assistant/use-assistant-thread.d.ts +52 -0
  805. package/dist/configurator/ui/assistant/use-assistant-thread.js +1 -0
  806. package/dist/configurator/ui/assistant/use-follow-stream.js +1 -1
  807. package/dist/configurator/ui/assistant/use-load-older-on-top.d.ts +22 -0
  808. package/dist/configurator/ui/assistant/use-load-older-on-top.js +1 -0
  809. package/dist/configurator/ui/assistant/voice/RecordingBar.d.ts +20 -0
  810. package/dist/configurator/ui/assistant/voice/RecordingBar.js +1 -0
  811. package/dist/configurator/ui/assistant/voice/index.d.ts +3 -0
  812. package/dist/configurator/ui/assistant/voice/index.js +1 -0
  813. package/dist/configurator/ui/assistant/voice/use-voice-recording.d.ts +39 -0
  814. package/dist/configurator/ui/assistant/voice/use-voice-recording.js +1 -0
  815. package/dist/configurator/ui/assistant/voice/voice-capture.d.ts +22 -0
  816. package/dist/configurator/ui/assistant/voice/voice-capture.js +1 -0
  817. package/dist/configurator/ui/configurator-layout/slots/canvas/GPUAccelerationDisabled.js +1 -1
  818. package/dist/configurator/ui/configurator-layout/slots/canvas/LayoutCanvas.js +1 -1
  819. package/dist/configurator/ui/configurator-layout/slots/canvas/SharedCanvas.js +1 -1
  820. package/dist/configurator/ui/configurator-layout/slots/canvas/WebGLNotSupported.js +1 -1
  821. package/dist/configurator/ui/configurator-layout/slots/mobile-tabs/use-mobile-tabs.d.ts +1 -1
  822. package/dist/configurator/ui/configurator-layout/slots/mobile-tabs/use-mobile-tabs.js +1 -1
  823. package/dist/configurator/ui/configurator-layout/slots/readonly-banner/CloneToEditDialog.js +1 -1
  824. package/dist/configurator/ui/configurator-layout/slots/services/InvariantViolations.js +1 -1
  825. package/dist/configurator/ui/configurator-layout/slots/services/Services.js +1 -1
  826. package/dist/configurator/ui/configurator-layout/slots/sidebar-tabs/use-sidebar-tabs.d.ts +1 -1
  827. package/dist/configurator/ui/configurator-layout/slots/sidebar-tabs/use-sidebar-tabs.js +1 -1
  828. package/dist/configurator/ui/configurator-layout/universal/DesktopPreview.js +1 -1
  829. package/dist/configurator/ui/configurator-layout/universal/MobilePreview.js +1 -1
  830. package/dist/configurator/ui/configurator-layout/universal/use-layout-scene-safe-area.d.ts +1 -1
  831. package/dist/configurator/ui/configurator-layout/universal/use-layout-scene-safe-area.js +1 -1
  832. package/dist/configurator/ui/configurator-layout/universal/use-scene-safe-area.d.ts +1 -1
  833. package/dist/configurator/ui/index.d.ts +1 -0
  834. package/dist/configurator/ui/index.js +1 -1
  835. package/dist/configurator/ui/legacy/chat/MobileChat.js +1 -1
  836. package/dist/configurator/ui/legacy/layout/common/CommonFinalizeButton.js +1 -1
  837. package/dist/configurator/ui/legacy/layout/common/CommonSummaryButton.js +1 -1
  838. package/dist/configurator/ui/legacy/layout/common/CommonTopNavigation.js +1 -1
  839. package/dist/configurator/ui/legacy/layout/common/ReactiveInterfaceLayout.js +1 -1
  840. package/dist/configurator/ui/legacy/layout/common/ResponsiveFinalizeButton.js +1 -1
  841. package/dist/configurator/ui/legacy/layout/common/SummaryReadLayout.js +1 -1
  842. package/dist/configurator/ui/legacy/layout/simple/SimpleOwnerLayout.js +1 -1
  843. package/dist/configurator/ui/legacy/layout/simple/SimpleSidebar.js +1 -1
  844. package/dist/configurator/ui/legacy/layout/simple/SimpleTopNavigation.js +1 -1
  845. package/dist/configurator/ui/legacy/layout/steps/StepsNavigation.js +1 -1
  846. package/dist/configurator/ui/legacy/layout/steps/StepsOwnerLayout.js +1 -1
  847. package/dist/configurator/ui/legacy/layout/steps/StepsSideBar.js +1 -1
  848. package/dist/configurator/ui/legacy/layout/steps/StepsSidebarFooter.js +1 -1
  849. package/dist/configurator/ui/legacy/layout/tabs/TabsOwnerLayout.js +1 -1
  850. package/dist/configurator/ui/legacy/layout/tabs/TabsSidebar.js +1 -1
  851. package/dist/configurator/ui/legacy/toolbar/common/DimensionUnitSelector.js +1 -1
  852. package/dist/configurator/ui/legacy/toolbar/common/MeasurementsIndicatorsSwitch.js +1 -1
  853. package/dist/configurator/ui/legacy/toolbar/desktop-toolbar/FullscreenToolbarAction.js +1 -1
  854. package/dist/configurator/ui/legacy/toolbar/desktop-toolbar/HelpToolbarAction.js +1 -1
  855. package/dist/configurator/ui/legacy/toolbar/desktop-toolbar/MeasurementsToolbarAction.js +1 -1
  856. package/dist/configurator/ui/legacy/toolbar/desktop-toolbar/UndoRedoToolbarGroup.js +1 -1
  857. package/dist/configurator/ui/phoenix-layout-elements/AppLoader.d.ts +0 -7
  858. package/dist/configurator/ui/phoenix-layout-elements/AppLoader.js +2 -6
  859. package/dist/configurator/ui/phoenix-layout-elements/AssistantToolbarButton.js +1 -1
  860. package/dist/configurator/ui/phoenix-layout-elements/EnterFullscreenToolbarButton.js +1 -1
  861. package/dist/configurator/ui/phoenix-layout-elements/ExitFullscreenToolbarButton.js +1 -1
  862. package/dist/configurator/ui/phoenix-layout-elements/HelpToolbarButton.js +1 -1
  863. package/dist/configurator/ui/phoenix-layout-elements/LanguageMenuAction.js +1 -1
  864. package/dist/configurator/ui/phoenix-layout-elements/LanguageToolbarButton.js +1 -1
  865. package/dist/configurator/ui/phoenix-layout-elements/LayoutCustomOwnerUi.d.ts +1 -0
  866. package/dist/configurator/ui/phoenix-layout-elements/LayoutCustomOwnerUi.js +1 -1
  867. package/dist/configurator/ui/phoenix-layout-elements/LayoutCustomReadUi.d.ts +1 -0
  868. package/dist/configurator/ui/phoenix-layout-elements/LayoutCustomReadUi.js +1 -1
  869. package/dist/configurator/ui/phoenix-layout-elements/MeasurementsMenuAction.js +1 -1
  870. package/dist/configurator/ui/phoenix-layout-elements/MeasurementsToolbarButton.js +1 -1
  871. package/dist/configurator/ui/phoenix-layout-elements/RedoToolbarButton.js +1 -1
  872. package/dist/configurator/ui/phoenix-layout-elements/ShareToolbarButton.js +1 -1
  873. package/dist/configurator/ui/phoenix-layout-elements/UndoToolbarButton.js +1 -1
  874. package/dist/configurator/ui/phoenix-layout-elements/header/common/back-button/use-go-back-action.js +1 -1
  875. package/dist/configurator/ui/phoenix-layout-elements/header/common/horizontal-tabs/DesktopHorizontalTabs.js +1 -1
  876. package/dist/configurator/ui/phoenix-layout-elements/header/common/step-navigation/DesktopNavigationSteps.d.ts +1 -1
  877. package/dist/configurator/ui/phoenix-layout-elements/header/common/step-navigation/DesktopNavigationSteps.js +1 -1
  878. package/dist/configurator/ui/phoenix-layout-elements/header/common/step-navigation/StepsNavigation.d.ts +2 -8
  879. package/dist/configurator/ui/phoenix-layout-elements/header/common/step-navigation/StepsNavigation.js +1 -1
  880. package/dist/configurator/ui/phoenix-layout-elements/index.d.ts +8 -1
  881. package/dist/configurator/ui/phoenix-layout-elements/index.js +1 -1
  882. package/dist/configurator/ui/phoenix-layout-elements/measurements/DimensionUnitSelector.js +1 -1
  883. package/dist/configurator/ui/phoenix-layout-elements/measurements/MeasurementsIndicatorsSwitch.js +1 -1
  884. package/dist/configurator/ui/phoenix-layout-elements/share/ShareModal.js +1 -1
  885. package/dist/configurator/ui/phoenix-layout-elements/share/use-share.d.ts +7 -8
  886. package/dist/configurator/ui/phoenix-layout-elements/share/use-share.js +1 -1
  887. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/basic/BasicFinalizeButton.js +1 -1
  888. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/basic/use-basic-sidebar-footer.js +1 -1
  889. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/common/CustomFinalizeButton.js +1 -1
  890. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/common/EnterSummaryButton.js +1 -1
  891. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/common/FinalizeActions.js +1 -1
  892. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/common/NextStepButton.js +1 -1
  893. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/common/PreviousStepButton.js +1 -1
  894. package/dist/configurator/ui/preset-layout/CategoryPresetUi.js +1 -1
  895. package/dist/configurator/ui/preset-layout/PresetUi.d.ts +4 -2
  896. package/dist/configurator/ui/preset-layout/PresetUi.js +1 -1
  897. package/dist/configurator/ui/preset-layout/index.d.ts +6 -1
  898. package/dist/configurator/ui/preset-layout/index.js +1 -1
  899. package/dist/configurator/ui/save-message-snackbars/SaveMessageSnackbars.d.ts +10 -0
  900. package/dist/configurator/ui/save-message-snackbars/SaveMessageSnackbars.js +1 -0
  901. package/dist/configurator/ui/save-message-snackbars/index.d.ts +1 -0
  902. package/dist/configurator/ui/save-message-snackbars/index.js +1 -0
  903. package/dist/docs/3d-scene/animations-basic.mdx +0 -4
  904. package/dist/docs/3d-scene/camera-based-hiding.mdx +0 -2
  905. package/dist/docs/3d-scene/cameras/custom.mdx +4 -4
  906. package/dist/docs/3d-scene/cameras/fit-during-drag.mdx +0 -4
  907. package/dist/docs/3d-scene/cameras/locks.mdx +0 -4
  908. package/dist/docs/3d-scene/cameras/transitions.mdx +0 -2
  909. package/dist/docs/3d-scene/engraving.mdx +0 -4
  910. package/dist/docs/3d-scene/materials/custom.mdx +1 -2
  911. package/dist/docs/3d-scene/materials/inherit.mdx +0 -4
  912. package/dist/docs/3d-scene/materials/multilevel.mdx +0 -47
  913. package/dist/docs/3d-scene/materials/override.mdx +0 -4
  914. package/dist/docs/3d-scene/materials/simple.mdx +0 -4
  915. package/dist/docs/3d-scene/materials/transformer.mdx +0 -4
  916. package/dist/docs/3d-scene/materials/transition.mdx +0 -4
  917. package/dist/docs/3d-scene/materials/transmissive.mdx +0 -4
  918. package/dist/docs/3d-scene/postprocessing.mdx +0 -2
  919. package/dist/docs/3d-scene/rendering/basic.mdx +5 -9
  920. package/dist/docs/3d-scene/rendering/custom-entity.mdx +0 -6
  921. package/dist/docs/3d-scene/rendering/lights/ambient-light.mdx +0 -2
  922. package/dist/docs/3d-scene/rendering/lights/directional-light.mdx +0 -2
  923. package/dist/docs/3d-scene/rendering/lights/point-light.mdx +0 -2
  924. package/dist/docs/3d-scene/rendering/lights/rect-area-light.mdx +0 -2
  925. package/dist/docs/3d-scene/rendering/lights/spot-light.mdx +0 -2
  926. package/dist/docs/3d-scene/rendering/object-groups.mdx +0 -2
  927. package/dist/docs/3d-scene/rendering/objects.mdx +0 -4
  928. package/dist/docs/3d-scene/rendering/scene-entity-object.mdx +0 -43
  929. package/dist/docs/3d-scene/rendering/smma.mdx +0 -2
  930. package/dist/docs/3d-scene/rendering/soft-shadows.mdx +0 -2
  931. package/dist/docs/3d-scene/rendering/transformer.mdx +1 -3
  932. package/dist/docs/complex-use-cases/custom-ui-on-root-level.mdx +0 -1
  933. package/dist/docs/complex-use-cases/filtered-controls-with-fix-dialog.mdx +19 -19
  934. package/dist/docs/complex-use-cases/focus-mode.mdx +2 -0
  935. package/dist/docs/complex-use-cases/navigation-guard.mdx +81 -19
  936. package/dist/docs/complex-use-cases/navigation-reset-selection.mdx +28 -65
  937. package/dist/docs/complex-use-cases/navigation-reset-undo.mdx +16 -20
  938. package/dist/docs/complex-use-cases/sketching.mdx +2 -10
  939. package/dist/docs/controls/custom.mdx +88 -87
  940. package/dist/docs/controls/manage-child-entities/entitychildrenlist.mdx +0 -4
  941. package/dist/docs/controls/nullable-attributes.mdx +0 -2
  942. package/dist/docs/controls/scene/custom-controls.mdx +7 -8
  943. package/dist/docs/controls/scene/html-hotspots.mdx +0 -4
  944. package/dist/docs/controls/scene/object-html-hotspots.mdx +0 -4
  945. package/dist/docs/controls/select-attribute/cardselect.mdx +0 -4
  946. package/dist/docs/controls/select-attribute/listselect.mdx +0 -4
  947. package/dist/docs/controls/select-attribute/select.mdx +0 -4
  948. package/dist/docs/controls/select-attribute/swatchselect.mdx +0 -4
  949. package/dist/docs/controls/select-attribute/switchselect.mdx +0 -4
  950. package/dist/docs/controls/select-attribute/toggleselect.mdx +0 -4
  951. package/dist/docs/controls/select-child-entity/cardselect.mdx +3 -6
  952. package/dist/docs/controls/select-child-entity/listselect.mdx +5 -11
  953. package/dist/docs/controls/select-child-entity/toggleselect.mdx +4 -10
  954. package/dist/docs/controls/text-input.mdx +90 -19
  955. package/dist/docs/demos/glass.mdx +0 -4
  956. package/dist/docs/demos/heater.mdx +0 -10
  957. package/dist/docs/demos/office-chair.mdx +0 -8
  958. package/dist/docs/demos/office-desk.mdx +0 -8
  959. package/dist/docs/demos/ring.mdx +0 -9
  960. package/dist/docs/dimensions/3d-scene-integration/angle-indicators.mdx +0 -2
  961. package/dist/docs/dimensions/3d-scene-integration/editable-angle-indicator.mdx +0 -2
  962. package/dist/docs/dimensions/3d-scene-integration/editable-distance-dimension-indicator.mdx +0 -14
  963. package/dist/docs/dimensions/3d-scene-integration/editable-offset-indicator.mdx +0 -6
  964. package/dist/docs/dimensions/3d-scene-integration/editable-size-indicator.mdx +0 -4
  965. package/dist/docs/dimensions/3d-scene-integration/list-selector-dimension-indicator.mdx +0 -16
  966. package/dist/docs/dimensions/3d-scene-integration/offset-indicator.mdx +0 -6
  967. package/dist/docs/dimensions/3d-scene-integration/overlap-offset-demo.mdx +0 -6
  968. package/dist/docs/dimensions/basic-concepts/dimension-data-unit.mdx +0 -12
  969. package/dist/docs/dimensions/basic-concepts/dimension-unit-config.mdx +0 -12
  970. package/dist/docs/dimensions/input-controls/distance-input.mdx +0 -12
  971. package/dist/docs/dimensions/input-controls/distance-slider.mdx +6 -18
  972. package/dist/docs/dimensions/selection-controls/list-selector.mdx +0 -14
  973. package/dist/docs/dimensions/selection-controls/toggle-selector.mdx +0 -14
  974. package/dist/docs/drag-and-drop/drag-handle.mdx +0 -1
  975. package/dist/docs/drag-and-drop/hotspot-handle.mdx +0 -1
  976. package/dist/docs/drag-and-drop/no-selection.mdx +0 -1
  977. package/dist/docs/drag-and-drop/planes.mdx +0 -3
  978. package/dist/docs/drag-and-drop/room-planner.mdx +1 -7
  979. package/dist/docs/drag-and-drop/rotatable.mdx +0 -1
  980. package/dist/docs/drag-and-drop/snapping/auto-rotation-demo.mdx +0 -2
  981. package/dist/docs/drag-and-drop/snapping/label-matching-demo.mdx +0 -2
  982. package/dist/docs/drag-and-drop/snapping/multi-snap-composition-demo.mdx +0 -2
  983. package/dist/docs/drag-and-drop/snapping/nested-entity-demo.mdx +0 -2
  984. package/dist/docs/drag-and-drop/snapping/priority-demo.mdx +0 -2
  985. package/dist/docs/drag-and-drop/snapping/snap-axis-demo.mdx +0 -2
  986. package/dist/docs/drag-and-drop/snapping/snap-edge-demo.mdx +0 -2
  987. package/dist/docs/drag-and-drop/snapping/snap-plane-demo.mdx +0 -5
  988. package/dist/docs/drag-and-drop/snapping/snap-point-demo.mdx +0 -2
  989. package/dist/docs/drag-and-drop/spatial-constraints/collision-system.mdx +0 -2
  990. package/dist/docs/drag-and-drop/spatial-constraints/disjoint-and-within.mdx +0 -6
  991. package/dist/docs/drag-and-drop/spatial-constraints/geometry-override.mdx +0 -4
  992. package/dist/docs/drag-and-drop/spatial-constraints/multiple-collision-meshes.mdx +0 -4
  993. package/dist/docs/drag-and-drop/spatial-constraints/touches.mdx +0 -4
  994. package/dist/docs/drag-and-drop/swap.mdx +0 -4
  995. package/dist/docs/fabs/basic.mdx +12 -14
  996. package/dist/docs/fabs/layout.mdx +0 -7
  997. package/dist/docs/index.json +100 -6
  998. package/dist/docs/integrations/lifecycle-providers.mdx +0 -12
  999. package/dist/docs/integrations/onloadprovider.mdx +0 -3
  1000. package/dist/docs/integrations/webcomponent-api/basics.mdx +8 -2
  1001. package/dist/docs/integrations/webcomponent-api/preset-tags.mdx +4 -1
  1002. package/dist/docs/integrations/woocommerce/overview.mdx +4 -2
  1003. package/dist/docs/layouts/custom-layout.mdx +1458 -301
  1004. package/dist/docs/layouts/custom-price.mdx +0 -2
  1005. package/dist/docs/layouts/custom-theme-handler.mdx +0 -4
  1006. package/dist/docs/layouts/gallery/ardent-compressor.mdx +3485 -0
  1007. package/dist/docs/layouts/gallery/corvid-drone.mdx +3399 -0
  1008. package/dist/docs/layouts/gallery/fenwick-window.mdx +2778 -0
  1009. package/dist/docs/layouts/gallery/ferrule-bar-station.mdx +6540 -0
  1010. package/dist/docs/layouts/gallery/kestrel-kettle.mdx +1829 -0
  1011. package/dist/docs/layouts/gallery/nightjar-guitar.mdx +3665 -0
  1012. package/dist/docs/layouts/gallery/sunfold-solar.mdx +2657 -0
  1013. package/dist/docs/layouts/gallery/tidepool-aquascape.mdx +5157 -0
  1014. package/dist/docs/layouts/header/custom.mdx +0 -2
  1015. package/dist/docs/layouts/icon-sets.mdx +0 -6
  1016. package/dist/docs/layouts/phoenix-elements.mdx +0 -4
  1017. package/dist/docs/layouts/phoenix-handlers.mdx +19 -28
  1018. package/dist/docs/layouts/presets/action-and-overlay.mdx +0 -8
  1019. package/dist/docs/layouts/presets/custom.mdx +6 -13
  1020. package/dist/docs/layouts/preview/always-expand.mdx +4 -14
  1021. package/dist/docs/layouts/preview/always.mdx +4 -14
  1022. package/dist/docs/layouts/preview/auto-presets.mdx +4 -14
  1023. package/dist/docs/layouts/preview/auto.mdx +4 -14
  1024. package/dist/docs/layouts/preview/never.mdx +4 -14
  1025. package/dist/docs/layouts/sidebar/in-a-custom-layout.mdx +18 -13
  1026. package/dist/docs/layouts/sidebar/property-page-stack.mdx +0 -2
  1027. package/dist/docs/layouts/sidebar/property-page.mdx +0 -2
  1028. package/dist/docs/layouts/sidebar/tabs.mdx +0 -4
  1029. package/dist/docs/layouts/sidebar-footer/custom.mdx +0 -2
  1030. package/dist/docs/layouts/sidebar-footer/universal.mdx +0 -10
  1031. package/dist/docs/layouts/tool-controls.mdx +0 -1
  1032. package/dist/docs/layouts/toolbar.mdx +0 -4
  1033. package/dist/docs/layouts/universal.mdx +2 -22
  1034. package/dist/docs/other-features/client-side-rendering/camera-padding.mdx +0 -2
  1035. package/dist/docs/other-features/client-side-rendering/custom.mdx +0 -6
  1036. package/dist/docs/other-features/client-side-rendering/declarative.mdx +1 -5
  1037. package/dist/docs/other-features/client-side-rendering/postprocessing.mdx +0 -6
  1038. package/dist/docs/other-features/component-filters.mdx +0 -7
  1039. package/dist/docs/other-features/currency.mdx +5 -6
  1040. package/dist/docs/other-features/domain-actions.mdx +33 -7
  1041. package/dist/docs/other-features/dynamic-component-attachments.mdx +75 -46
  1042. package/dist/docs/other-features/error-5xx.mdx +1 -15
  1043. package/dist/docs/other-features/navigation-hotspot.mdx +2 -5
  1044. package/dist/docs/other-features/not-found-404.mdx +1 -15
  1045. package/dist/docs/other-features/projected-entities.mdx +0 -5
  1046. package/dist/docs/other-features/side-effects.mdx +0 -23
  1047. package/dist/docs/other-features/transformers.mdx +101 -96
  1048. package/dist/docs/other-features/violation-messages.mdx +0 -4
  1049. package/dist/docs/other-features/violation-severity.mdx +2 -3
  1050. package/dist/docs/performance/clone-highlight.mdx +0 -7
  1051. package/dist/docs/performance/dynamic-components.mdx +0 -6
  1052. package/dist/docs/performance/editable-dimension-stress-test.mdx +0 -2
  1053. package/dist/docs/performance/fast-highlight.mdx +0 -7
  1054. package/dist/docs/performance/general.mdx +0 -7
  1055. package/dist/docs/performance/render-isolation.mdx +0 -6
  1056. package/dist/docs/phoenix/admin.mdx +105 -134
  1057. package/dist/docs/phoenix/application-states.mdx +45 -27
  1058. package/dist/docs/phoenix/blender-rendering.mdx +3 -1
  1059. package/dist/docs/phoenix/clerk-sign-in.mdx +1 -1
  1060. package/dist/docs/phoenix/components.mdx +59 -46
  1061. package/dist/docs/phoenix/configurator-interface.mdx +484 -161
  1062. package/dist/docs/phoenix/data-sources.mdx +61 -37
  1063. package/dist/docs/phoenix/deployments.mdx +13 -7
  1064. package/dist/docs/phoenix/domain-model.mdx +26 -16
  1065. package/dist/docs/phoenix/expression-context.mdx +3 -29
  1066. package/dist/docs/phoenix/finalization.mdx +3 -2
  1067. package/dist/docs/phoenix/getting-started.mdx +6 -5
  1068. package/dist/docs/phoenix/integration/authentication-internal.mdx +2 -2
  1069. package/dist/docs/phoenix/integration/finalization-internal.mdx +1 -1
  1070. package/dist/docs/phoenix/layout-slots.mdx +46 -23
  1071. package/dist/docs/phoenix/localization.mdx +74 -59
  1072. package/dist/docs/phoenix/migration-guide.mdx +34 -22
  1073. package/dist/docs/phoenix/phoenix-cli.mdx +126 -35
  1074. package/dist/docs/phoenix/project-structure.mdx +105 -74
  1075. package/dist/docs/phoenix/quickstart.mdx +8 -10
  1076. package/dist/docs/phoenix/sdk-builder-workflow.mdx +18 -22
  1077. package/dist/docs/phoenix/sessions-and-access.mdx +54 -34
  1078. package/dist/docs/phoenix/sharing.mdx +1 -1
  1079. package/dist/docs/phoenix/state-management.mdx +18 -16
  1080. package/dist/docs/phoenix/testing.mdx +13 -0
  1081. package/dist/docs/phoenix/webhooks.mdx +377 -245
  1082. package/dist/docs/recipes-and-delete/delete-entity.mdx +3 -6
  1083. package/dist/docs/recipes-and-delete/dynamic-root-entity.mdx +0 -2
  1084. package/dist/docs/recipes-and-delete/grouped-button.mdx +0 -3
  1085. package/dist/docs/recipes-and-delete/grouped-panel.mdx +0 -3
  1086. package/dist/docs/recipes-and-delete/horizontal.mdx +3 -6
  1087. package/dist/docs/recipes-and-delete/recipe-hierarchy-lists.mdx +0 -3
  1088. package/dist/docs/recipes-and-delete/recipe-hierarchy-selection.mdx +0 -5
  1089. package/dist/docs/recipes-and-delete/replace-dropdown.mdx +3 -6
  1090. package/dist/docs/recipes-and-delete/replace-panel.mdx +0 -7
  1091. package/dist/docs/recipes-and-delete/simple.mdx +3 -6
  1092. package/dist/docs/recipes-and-delete/vertical.mdx +3 -6
  1093. package/dist/docs/relations/aliases.mdx +0 -2
  1094. package/dist/docs/relations/all-of-type.mdx +0 -4
  1095. package/dist/docs/relations/child-nullable.mdx +0 -4
  1096. package/dist/docs/relations/child-required.mdx +0 -2
  1097. package/dist/docs/relations/collection-direct.mdx +0 -4
  1098. package/dist/docs/relations/collection-indirect.mdx +0 -4
  1099. package/dist/docs/relations/collection-multiple.mdx +0 -2
  1100. package/dist/docs/relations/cross-reference.mdx +0 -2
  1101. package/dist/docs/relations/hierarchy.mdx +0 -2
  1102. package/dist/docs/selection-and-highlight/canvas.mdx +0 -1
  1103. package/dist/docs/selection-and-highlight/disable-highlight-per-object.mdx +0 -1
  1104. package/dist/docs/selection-and-highlight/disable-highlight.mdx +0 -1
  1105. package/dist/docs/selection-and-highlight/effects/outline.mdx +0 -3
  1106. package/dist/docs/selection-and-highlight/effects/overlay.mdx +0 -3
  1107. package/dist/docs/selection-and-highlight/fast-emissive-highlight.mdx +0 -3
  1108. package/dist/docs/selection-and-highlight/group-highlighting.mdx +0 -1
  1109. package/dist/docs/selection-and-highlight/hierarchy.mdx +100 -151
  1110. package/dist/docs/selection-and-highlight/hotspots.mdx +2 -1
  1111. package/dist/domain/admin-domain/index.d.ts +2 -2
  1112. package/dist/domain/application/GetApplicationWrapperHandler.d.ts +1 -1
  1113. package/dist/domain/application/GetThemeHandler.d.ts +1 -1
  1114. package/dist/domain/application/GetWebComponentOptions.d.ts +1 -1
  1115. package/dist/domain/application/application-config.d.ts +6 -26
  1116. package/dist/domain/application/assistant/assistant-fields.d.ts +1 -1
  1117. package/dist/domain/application/assistant/assistant-value-type.d.ts +1 -1
  1118. package/dist/domain/application/assistant/build-assistant-lenses.d.ts +1 -2
  1119. package/dist/domain/application/assistant/build-assistant-lenses.js +1 -1
  1120. package/dist/domain/application/assistant/build-assistant-manifest.d.ts +1 -2
  1121. package/dist/domain/application/assistant/build-assistant-manifest.js +1 -1
  1122. package/dist/domain/application/assistant/generate-assistant-prompt.d.ts +3 -1
  1123. package/dist/domain/application/assistant/generate-assistant-prompt.js +1 -1
  1124. package/dist/domain/application/assistant/index.d.ts +0 -3
  1125. package/dist/domain/application/assistant/index.js +1 -1
  1126. package/dist/domain/application/assistant/session-setup/AssistantSetupHandler.d.ts +1 -1
  1127. package/dist/domain/application/assistant/session-setup/apply-assistant-setup.d.ts +1 -1
  1128. package/dist/domain/application/assistant/session-setup/apply-assistant-setup.js +1 -1
  1129. package/dist/domain/application/assistant/session-setup/assistant-setup-manifest.d.ts +5 -5
  1130. package/dist/domain/application/assistant/session-setup/assistant-setup-manifest.js +1 -1
  1131. package/dist/domain/application/assistant/session-setup/create-session-assistant.d.ts +1 -2
  1132. package/dist/domain/application/assistant-field-options.d.ts +1 -1
  1133. package/dist/domain/application/assistant-mutations.d.ts +1 -1
  1134. package/dist/domain/application/assistant-mutations.js +1 -1
  1135. package/dist/domain/application/assistant-recipe-groups.d.ts +4 -2
  1136. package/dist/domain/application/configurator-builder.d.ts +44 -39
  1137. package/dist/domain/application/configurator-builder.js +1 -1
  1138. package/dist/domain/application/create-initial-published-data.d.ts +2 -1
  1139. package/dist/domain/application/index.d.ts +1 -1
  1140. package/dist/domain/application/index.js +1 -1
  1141. package/dist/domain/application/published-data/DataRowValidatorHandler.d.ts +1 -1
  1142. package/dist/domain/application/published-data/FilterPublishedChunksHandler.d.ts +1 -1
  1143. package/dist/domain/application/published-data/MapPublishedChunkedDataHandler.d.ts +1 -1
  1144. package/dist/domain/application/published-data/MapPublishedRevisionDataHandler.d.ts +1 -1
  1145. package/dist/domain/application/published-data/SheetValidatorHandler.d.ts +1 -1
  1146. package/dist/domain/application/standard-properties.js +1 -1
  1147. package/dist/domain/application/web-component-property.d.ts +3 -1
  1148. package/dist/domain/application/web-component-property.js +1 -1
  1149. package/dist/domain/available-system-components/available-system-components.d.ts +11 -0
  1150. package/dist/domain/available-system-components/available-system-components.js +1 -0
  1151. package/dist/domain/available-system-components/index.d.ts +1 -0
  1152. package/dist/domain/available-system-components/index.js +1 -0
  1153. package/dist/domain/core/action/index.d.ts +0 -1
  1154. package/dist/domain/core/action/index.js +1 -1
  1155. package/dist/domain/core/domain.js +1 -1
  1156. package/dist/domain/core/index.d.ts +1 -1
  1157. package/dist/domain/core/index.js +1 -1
  1158. package/dist/domain/core/invariant/violation.d.ts +3 -2
  1159. package/dist/domain/core/schema/extended-schema-validator.js +1 -1
  1160. package/dist/domain/domain-builder/domain-builder.d.ts +46 -0
  1161. package/dist/domain/domain-builder/domain-builder.js +1 -0
  1162. package/dist/domain/domain-builder/index.d.ts +1 -0
  1163. package/dist/domain/domain-builder/index.js +1 -0
  1164. package/dist/domain/domain-context/action-system/action-system.d.ts +32 -6
  1165. package/dist/domain/domain-context/action-system/action-system.js +1 -1
  1166. package/dist/domain/domain-context/domain-context-systems.d.ts +1 -1
  1167. package/dist/domain/domain-context/index.d.ts +1 -1
  1168. package/dist/domain/domain-context/store-system/store-system.d.ts +5 -0
  1169. package/dist/domain/domain-context/store-system/store-system.js +1 -1
  1170. package/dist/domain/domain-context/transformers/context.d.ts +4 -2
  1171. package/dist/domain/domain-context/transformers/when-builder.d.ts +2 -1
  1172. package/dist/domain/domain-context/undo-system.d.ts +28 -1
  1173. package/dist/domain/domain-context/undo-system.js +1 -1
  1174. package/dist/domain/domain-runtime/action-factory.d.ts +11 -0
  1175. package/dist/domain/domain-runtime/application.d.ts +39 -0
  1176. package/dist/domain/domain-runtime/application.js +1 -0
  1177. package/dist/domain/domain-runtime/domain-context/action-context.d.ts +5 -5
  1178. package/dist/domain/domain-runtime/domain-context/selectors.d.ts +3 -0
  1179. package/dist/domain/domain-runtime/domain-context/selectors.js +1 -1
  1180. package/dist/domain/domain-runtime/domain-runtime.d.ts +80 -28
  1181. package/dist/domain/domain-runtime/domain-runtime.js +1 -1
  1182. package/dist/domain/domain-runtime/environment/actions.d.ts +1 -0
  1183. package/dist/domain/domain-runtime/environment/actions.js +1 -1
  1184. package/dist/domain/domain-runtime/environment/initialize.d.ts +1 -1
  1185. package/dist/domain/domain-runtime/environment/initialize.js +1 -1
  1186. package/dist/domain/domain-runtime/environment/selectors.d.ts +2 -0
  1187. package/dist/domain/domain-runtime/environment/selectors.js +1 -1
  1188. package/dist/domain/domain-runtime/environment/types.d.ts +7 -1
  1189. package/dist/domain/domain-runtime/index.d.ts +2 -1
  1190. package/dist/domain/domain-runtime/index.js +1 -1
  1191. package/dist/domain/domain-runtime/spec/create-violation-expressions.d.ts +1 -1
  1192. package/dist/domain/domain-runtime/spec/create-violation-expressions.js +1 -1
  1193. package/dist/domain/domain-runtime/spec/index.d.ts +1 -1
  1194. package/dist/domain/domain-runtime/spec/index.js +1 -1
  1195. package/dist/domain/domain-runtime/spec/initialize.js +1 -1
  1196. package/dist/domain/domain-runtime/spec/resolve-imported-transformers.d.ts +22 -0
  1197. package/dist/domain/domain-runtime/spec/resolve-imported-transformers.js +1 -0
  1198. package/dist/domain/domain-runtime/spec/selectors.d.ts +8 -6
  1199. package/dist/domain/domain-runtime/spec/selectors.js +1 -1
  1200. package/dist/domain/domain-runtime/spec/types.d.ts +2 -2
  1201. package/dist/domain/domain-runtime/web-component/actions.d.ts +3 -0
  1202. package/dist/domain/domain-runtime/web-component/actions.js +1 -1
  1203. package/dist/domain/domain-runtime/web-component/initialize.d.ts +1 -0
  1204. package/dist/domain/domain-runtime/web-component/initialize.js +1 -1
  1205. package/dist/domain/domain-runtime/web-component/selectors.d.ts +2 -0
  1206. package/dist/domain/domain-runtime/web-component/selectors.js +1 -1
  1207. package/dist/domain/domain-runtime/web-component/types.d.ts +6 -3
  1208. package/dist/domain/extensions/export-images/agent-screenshot.d.ts +30 -0
  1209. package/dist/domain/extensions/export-images/agent-screenshot.js +1 -0
  1210. package/dist/domain/extensions/export-images/client-side-image.d.ts +14 -0
  1211. package/dist/domain/extensions/export-images/client-side-image.js +1 -0
  1212. package/dist/domain/extensions/export-images/index.d.ts +3 -0
  1213. package/dist/domain/extensions/export-images/index.js +1 -0
  1214. package/dist/domain/extensions/export-images/save-template-thumbnail.d.ts +14 -0
  1215. package/dist/domain/extensions/export-images/save-template-thumbnail.js +1 -0
  1216. package/dist/domain/extensions/index.d.ts +1 -2
  1217. package/dist/domain/extensions/index.js +1 -1
  1218. package/dist/domain/extensions/scene-entity-delete-fab.d.ts +1 -1
  1219. package/dist/domain/extensions/scene-entity-delete-fab.js +1 -1
  1220. package/dist/domain/index.d.ts +15 -2
  1221. package/dist/domain/index.js +1 -1
  1222. package/dist/domain/mocks/create-mock-domain-runtime.d.ts +14 -0
  1223. package/dist/domain/mocks/create-test-application-config.d.ts +1 -1
  1224. package/dist/domain/spec/application/admin-pages-section.d.ts +29 -0
  1225. package/dist/domain/spec/application/admin-pages-section.js +1 -0
  1226. package/dist/domain/spec/application/admin-pages.d.ts +26 -0
  1227. package/dist/domain/spec/application/admin-pages.js +1 -0
  1228. package/dist/domain/spec/application/admin-states.d.ts +5 -0
  1229. package/dist/domain/spec/application/admin-states.js +1 -0
  1230. package/dist/domain/spec/application/configurator-states.d.ts +8 -0
  1231. package/dist/domain/spec/application/configurator-states.js +1 -0
  1232. package/dist/domain/spec/application/index.d.ts +5 -0
  1233. package/dist/domain/spec/application/index.js +1 -0
  1234. package/dist/domain/spec/components/bindings/index.d.ts +2 -0
  1235. package/dist/domain/spec/components/bindings/index.js +1 -0
  1236. package/dist/domain/spec/components/bindings/read-binding.d.ts +13 -0
  1237. package/dist/domain/spec/components/bindings/read-binding.js +1 -0
  1238. package/dist/domain/spec/components/bindings/write-binding.d.ts +32 -0
  1239. package/dist/domain/spec/components/bindings/write-binding.js +1 -0
  1240. package/dist/domain/spec/components/component-entry.d.ts +90 -0
  1241. package/dist/domain/spec/components/component-entry.js +1 -0
  1242. package/dist/domain/spec/components/component-filter.d.ts +54 -0
  1243. package/dist/domain/spec/components/component-filters.d.ts +10 -0
  1244. package/dist/domain/spec/components/component-filters.js +1 -0
  1245. package/dist/domain/spec/components/components.d.ts +4 -0
  1246. package/dist/domain/spec/components/components.js +1 -0
  1247. package/dist/domain/spec/components/index.d.ts +6 -0
  1248. package/dist/domain/spec/enhanced-json/enhanced-json-value.d.ts +30 -0
  1249. package/dist/domain/spec/enhanced-json/enhanced-json-value.js +1 -0
  1250. package/dist/domain/spec/enhanced-json/index.d.ts +1 -0
  1251. package/dist/domain/spec/enhanced-json/index.js +1 -0
  1252. package/dist/domain/spec/errors/implementation-error-collector.d.ts +21 -0
  1253. package/dist/domain/spec/errors/implementation-error-collector.js +1 -0
  1254. package/dist/domain/spec/expressions/expression.d.ts +49 -0
  1255. package/dist/domain/spec/expressions/expression.js +1 -0
  1256. package/dist/domain/spec/expressions/expressions.d.ts +27 -0
  1257. package/dist/domain/spec/expressions/expressions.js +1 -0
  1258. package/dist/domain/spec/expressions/index.d.ts +5 -0
  1259. package/dist/domain/spec/expressions/memo-eval-plan.d.ts +70 -0
  1260. package/dist/domain/spec/expressions/memo-eval-plan.js +1 -0
  1261. package/dist/domain/spec/expressions/relation-expression-params.d.ts +11 -0
  1262. package/dist/domain/spec/expressions/relation-expression-params.js +1 -0
  1263. package/dist/domain/spec/index.d.ts +4 -0
  1264. package/dist/domain/spec/index.js +1 -0
  1265. package/dist/domain/spec/invariants/index.d.ts +2 -0
  1266. package/dist/domain/spec/invariants/index.js +1 -0
  1267. package/dist/domain/spec/invariants/invariant.d.ts +24 -0
  1268. package/dist/domain/spec/invariants/invariant.js +1 -0
  1269. package/dist/domain/spec/invariants/invariants.d.ts +14 -0
  1270. package/dist/domain/spec/invariants/invariants.js +1 -0
  1271. package/dist/domain/spec/json-schema.d.ts +52 -0
  1272. package/dist/domain/spec/json-schema.js +1 -0
  1273. package/dist/domain/spec/markers/index.d.ts +3 -0
  1274. package/dist/domain/spec/markers/index.js +1 -0
  1275. package/dist/domain/spec/markers/msg-marker.d.ts +28 -0
  1276. package/dist/domain/spec/markers/msg-marker.js +1 -0
  1277. package/dist/domain/spec/model/aliases.d.ts +9 -0
  1278. package/dist/domain/spec/model/aliases.js +1 -0
  1279. package/dist/domain/spec/model/common-types.d.ts +15 -0
  1280. package/dist/domain/spec/model/common-types.js +1 -0
  1281. package/dist/domain/spec/model/defaults.d.ts +33 -0
  1282. package/dist/domain/spec/model/defaults.js +1 -0
  1283. package/dist/domain/spec/model/entity-types.d.ts +8 -0
  1284. package/dist/domain/spec/model/entity-types.js +1 -0
  1285. package/dist/domain/spec/model/index.d.ts +7 -0
  1286. package/dist/domain/spec/model/index.js +1 -0
  1287. package/dist/domain/spec/model/model-version-key.d.ts +3 -0
  1288. package/dist/domain/spec/model/model-version-key.js +1 -0
  1289. package/dist/domain/spec/model/names/action-name.d.ts +7 -0
  1290. package/dist/domain/spec/model/names/action-name.js +1 -0
  1291. package/dist/domain/spec/model/names/alias-name.d.ts +7 -0
  1292. package/dist/domain/spec/model/names/alias-name.js +1 -0
  1293. package/dist/domain/spec/model/names/entity-or-alias-name.d.ts +8 -0
  1294. package/dist/domain/spec/model/names/entity-or-alias-name.js +1 -0
  1295. package/dist/domain/spec/model/names/entity-type-name.d.ts +8 -0
  1296. package/dist/domain/spec/model/names/entity-type-name.js +1 -0
  1297. package/dist/domain/spec/model/names/expression-name.d.ts +6 -0
  1298. package/dist/domain/spec/model/names/expression-name.js +1 -0
  1299. package/dist/domain/spec/model/names/index.d.ts +9 -0
  1300. package/dist/domain/spec/model/names/index.js +1 -0
  1301. package/dist/domain/spec/model/names/instance-name.d.ts +7 -0
  1302. package/dist/domain/spec/model/names/instance-name.js +1 -0
  1303. package/dist/domain/spec/model/names/invariant-name.d.ts +3 -0
  1304. package/dist/domain/spec/model/names/invariant-name.js +1 -0
  1305. package/dist/domain/spec/model/names/shape-property-name.d.ts +11 -0
  1306. package/dist/domain/spec/model/names/shape-property-name.js +1 -0
  1307. package/dist/domain/spec/model/names/violation-type-name.d.ts +3 -0
  1308. package/dist/domain/spec/model/names/violation-type-name.js +1 -0
  1309. package/dist/domain/spec/model/presets.d.ts +30 -0
  1310. package/dist/domain/spec/model/presets.js +1 -0
  1311. package/dist/domain/spec/modules/element-registration.d.ts +125 -0
  1312. package/dist/domain/spec/modules/element-registration.js +1 -0
  1313. package/dist/domain/spec/modules/find-assistant-form-element-errors.d.ts +12 -0
  1314. package/dist/domain/spec/modules/find-assistant-form-element-errors.js +1 -0
  1315. package/dist/domain/spec/modules/index.d.ts +9 -0
  1316. package/dist/domain/spec/modules/index.js +1 -0
  1317. package/dist/domain/spec/modules/merge-expression-modules.d.ts +23 -0
  1318. package/dist/domain/spec/modules/merge-expression-modules.js +1 -0
  1319. package/dist/domain/spec/modules/project-modules.d.ts +32 -0
  1320. package/dist/domain/spec/modules/project-modules.js +1 -0
  1321. package/dist/domain/spec/modules/resolve-action-modules.d.ts +4 -0
  1322. package/dist/domain/spec/modules/resolve-component-optic-modules.d.ts +4 -0
  1323. package/dist/domain/spec/modules/resolve-expression-modules.d.ts +14 -0
  1324. package/dist/domain/spec/modules/resolve-expression-modules.js +1 -0
  1325. package/dist/domain/spec/modules/resolve-invariant-modules.d.ts +6 -0
  1326. package/dist/domain/spec/phx/index.d.ts +1 -0
  1327. package/dist/domain/spec/phx/index.js +1 -0
  1328. package/dist/domain/spec/phx/phx-application-types.d.ts +25 -0
  1329. package/dist/domain/spec/phx/phx-application-types.js +1 -0
  1330. package/dist/domain/spec/phx/phx-domain.d.ts +36 -0
  1331. package/dist/domain/spec/phx/phx-domain.js +1 -0
  1332. package/dist/domain/spec/phx/phx-model.d.ts +24 -0
  1333. package/dist/domain/spec/phx/phx-model.js +1 -0
  1334. package/dist/domain/spec/phx/phx.d.ts +21 -0
  1335. package/dist/domain/spec/phx/phx.js +1 -0
  1336. package/dist/domain/spec/runtime/admin-runtime/admin-runtime.d.ts +32 -0
  1337. package/dist/domain/spec/runtime/admin-runtime/admin-runtime.js +1 -0
  1338. package/dist/domain/spec/runtime/admin-runtime/admin-spec-runtime.d.ts +16 -0
  1339. package/dist/domain/spec/runtime/admin-runtime/admin-spec-runtime.js +1 -0
  1340. package/dist/domain/spec/runtime/admin-runtime/index.d.ts +2 -0
  1341. package/dist/domain/spec/runtime/admin-runtime/index.js +1 -0
  1342. package/dist/domain/spec/runtime/admin-runtime/states-runtime.d.ts +8 -0
  1343. package/dist/domain/spec/runtime/application-runtime.d.ts +62 -0
  1344. package/dist/domain/spec/runtime/application-runtime.js +1 -0
  1345. package/dist/domain/spec/runtime/application-spec-slice.d.ts +73 -0
  1346. package/dist/domain/spec/runtime/application-spec-slice.js +1 -0
  1347. package/dist/domain/spec/runtime/configurator-runtime/configurator-runtime.d.ts +37 -0
  1348. package/dist/domain/spec/runtime/configurator-runtime/configurator-runtime.js +1 -0
  1349. package/dist/domain/spec/runtime/configurator-runtime/configurator-spec-runtime.d.ts +16 -0
  1350. package/dist/domain/spec/runtime/configurator-runtime/configurator-spec-runtime.js +1 -0
  1351. package/dist/domain/spec/runtime/configurator-runtime/index.d.ts +2 -0
  1352. package/dist/domain/spec/runtime/configurator-runtime/index.js +1 -0
  1353. package/dist/domain/spec/runtime/configurator-runtime/states-runtime.d.ts +11 -0
  1354. package/dist/domain/spec/runtime/create-application.d.ts +58 -0
  1355. package/dist/domain/spec/runtime/create-application.js +1 -0
  1356. package/dist/domain/spec/runtime/expressions/expression-runtime.d.ts +57 -0
  1357. package/dist/domain/spec/runtime/expressions/expression-runtime.js +1 -0
  1358. package/dist/domain/spec/runtime/expressions/generate-memo-eval-plan-runtime.d.ts +33 -0
  1359. package/dist/domain/spec/runtime/expressions/generate-memo-eval-plan-runtime.js +1 -0
  1360. package/dist/domain/spec/runtime/expressions/index.d.ts +3 -0
  1361. package/dist/domain/spec/runtime/expressions/index.js +1 -0
  1362. package/dist/domain/spec/runtime/expressions/reflection-constants-runtime.d.ts +11 -0
  1363. package/dist/domain/spec/runtime/expressions/reflection-constants-runtime.js +1 -0
  1364. package/dist/domain/spec/runtime/factory-data/factory-data-runtime.d.ts +44 -0
  1365. package/dist/domain/spec/runtime/factory-data/factory-data-runtime.js +1 -0
  1366. package/dist/domain/spec/runtime/factory-data/index.d.ts +3 -0
  1367. package/dist/domain/spec/runtime/factory-data/index.js +1 -0
  1368. package/dist/domain/spec/runtime/factory-data/recipe-defaults.d.ts +13 -0
  1369. package/dist/domain/spec/runtime/factory-data/recipe-defaults.js +1 -0
  1370. package/dist/domain/spec/runtime/factory-data/static-violations.d.ts +16 -0
  1371. package/dist/domain/spec/runtime/factory-data/static-violations.js +1 -0
  1372. package/dist/domain/spec/runtime/generate-runtime-instance.d.ts +2 -0
  1373. package/dist/domain/spec/runtime/generate-runtime-instance.js +1 -0
  1374. package/dist/domain/spec/runtime/index.d.ts +13 -0
  1375. package/dist/domain/spec/runtime/index.js +1 -0
  1376. package/dist/domain/spec/runtime/migrations/index.d.ts +1 -0
  1377. package/dist/domain/spec/runtime/migrations/index.js +1 -0
  1378. package/dist/domain/spec/runtime/migrations/migration-runtime.d.ts +53 -0
  1379. package/dist/domain/spec/runtime/migrations/migration-runtime.js +1 -0
  1380. package/dist/domain/spec/runtime/model/admin-model-runtime.d.ts +31 -0
  1381. package/dist/domain/spec/runtime/model/admin-model-runtime.js +1 -0
  1382. package/dist/domain/spec/runtime/model/configurator-model-runtime.d.ts +33 -0
  1383. package/dist/domain/spec/runtime/model/configurator-model-runtime.js +1 -0
  1384. package/dist/domain/spec/runtime/model/index.d.ts +2 -0
  1385. package/dist/domain/spec/runtime/model/index.js +1 -0
  1386. package/dist/domain/spec/runtime/optics/build-sdk-optic.d.ts +7 -0
  1387. package/dist/domain/spec/runtime/optics/build-sdk-optic.js +1 -0
  1388. package/dist/domain/spec/runtime/optics/build-user-bound-optic.d.ts +7 -0
  1389. package/dist/domain/spec/runtime/optics/build-user-bound-optic.js +1 -0
  1390. package/dist/domain/spec/runtime/optics/built-component-optic.d.ts +11 -0
  1391. package/dist/domain/spec/runtime/optics/built-component-optic.js +1 -0
  1392. package/dist/domain/spec/runtime/optics/component-optic.d.ts +26 -0
  1393. package/dist/domain/spec/runtime/optics/component-optic.js +1 -0
  1394. package/dist/domain/spec/runtime/optics/index.d.ts +2 -0
  1395. package/dist/domain/spec/runtime/optics/index.js +1 -0
  1396. package/dist/domain/spec/runtime/runtime-reference-store.d.ts +46 -0
  1397. package/dist/domain/spec/runtime/runtime-reference-store.js +1 -0
  1398. package/dist/domain/spec/runtime/sections/actions-runtime.d.ts +14 -0
  1399. package/dist/domain/spec/runtime/sections/assistant-runtime.d.ts +10 -0
  1400. package/dist/domain/spec/runtime/sections/data-runtime.d.ts +13 -0
  1401. package/dist/domain/spec/runtime/sections/index.d.ts +6 -0
  1402. package/dist/domain/spec/runtime/sections/index.js +1 -0
  1403. package/dist/domain/spec/runtime/sections/preset-runtime.d.ts +20 -0
  1404. package/dist/domain/spec/runtime/sections/theme-runtime.d.ts +10 -0
  1405. package/dist/domain/spec/runtime/sections/transformers-runtime.d.ts +19 -0
  1406. package/dist/domain/spec/runtime/spec-code/index.d.ts +2 -0
  1407. package/dist/domain/spec/runtime/spec-code/index.js +1 -0
  1408. package/dist/domain/spec/runtime/spec-code/resolve-spec-code.d.ts +18 -0
  1409. package/dist/domain/spec/runtime/spec-code/resolve-spec-code.js +1 -0
  1410. package/dist/domain/spec/runtime/spec-code/spec-code-module.d.ts +17 -0
  1411. package/dist/domain/spec/runtime/spec-code/spec-code-module.js +1 -0
  1412. package/dist/domain/spec/runtime/spec-runtime.d.ts +21 -0
  1413. package/dist/domain/spec/runtime/spec-runtime.js +1 -0
  1414. package/dist/domain/spec/runtime-spec/decode-runtime-spec.d.ts +9 -0
  1415. package/dist/domain/spec/runtime-spec/decode-runtime-spec.js +1 -0
  1416. package/dist/domain/spec/runtime-spec/encode-runtime-spec.d.ts +8 -0
  1417. package/dist/domain/spec/runtime-spec/encode-runtime-spec.js +1 -0
  1418. package/dist/domain/spec/runtime-spec/encoded-runtime-spec.d.ts +28 -0
  1419. package/dist/domain/spec/runtime-spec/encoded-runtime-spec.js +1 -0
  1420. package/dist/domain/spec/runtime-spec/index.d.ts +4 -0
  1421. package/dist/domain/spec/runtime-spec/index.js +1 -0
  1422. package/dist/domain/spec/runtime-spec/runtime-spec.d.ts +174 -0
  1423. package/dist/domain/spec/runtime-spec/runtime-spec.js +1 -0
  1424. package/dist/domain/spec/runtime-spec/spec-code-id.d.ts +40 -0
  1425. package/dist/domain/spec/runtime-spec/spec-code-id.js +1 -0
  1426. package/dist/domain/spec/sections/actions.d.ts +23 -0
  1427. package/dist/domain/spec/sections/actions.js +1 -0
  1428. package/dist/domain/spec/sections/app-metadata.d.ts +18 -0
  1429. package/dist/domain/spec/sections/app-metadata.js +1 -0
  1430. package/dist/domain/spec/sections/application-version.d.ts +7 -0
  1431. package/dist/domain/spec/sections/application-version.js +1 -0
  1432. package/dist/domain/spec/sections/assistant/assistant-manifest.d.ts +96 -0
  1433. package/dist/domain/spec/sections/assistant/assistant-resolved-manifest.d.ts +135 -0
  1434. package/dist/domain/spec/sections/assistant/assistant-resolved-manifest.js +1 -0
  1435. package/dist/domain/spec/sections/assistant/form/assistant-form-element-name.d.ts +11 -0
  1436. package/dist/domain/spec/sections/assistant/form/assistant-form-element-name.js +8 -0
  1437. package/dist/domain/spec/sections/assistant/form/assistant-form-elements.d.ts +174 -0
  1438. package/dist/domain/spec/sections/assistant/form/assistant-form-elements.js +1 -0
  1439. package/dist/domain/spec/sections/assistant/form/assistant-resource-path.d.ts +10 -0
  1440. package/dist/domain/spec/sections/assistant/form/assistant-resource-path.js +1 -0
  1441. package/dist/domain/spec/sections/assistant/form/index.d.ts +4 -0
  1442. package/dist/domain/spec/sections/assistant/form/index.js +1 -0
  1443. package/dist/domain/spec/sections/assistant/index.d.ts +4 -0
  1444. package/dist/domain/spec/sections/assistant/index.js +1 -0
  1445. package/dist/domain/spec/sections/data-spec/chunks.d.ts +23 -0
  1446. package/dist/domain/spec/sections/data-spec/chunks.js +1 -0
  1447. package/dist/domain/spec/sections/data-spec/custom-data-spec-entry.d.ts +16 -0
  1448. package/dist/domain/spec/sections/data-spec/custom-data-spec-entry.js +1 -0
  1449. package/dist/domain/spec/sections/data-spec/data-entry-key.d.ts +9 -0
  1450. package/dist/domain/spec/sections/data-spec/data-entry-key.js +1 -0
  1451. package/dist/domain/spec/sections/data-spec/index.d.ts +5 -0
  1452. package/dist/domain/spec/sections/data-spec/index.js +1 -0
  1453. package/dist/domain/spec/sections/data-spec/parsed-data-spec-entries.d.ts +10 -0
  1454. package/dist/domain/spec/sections/data-spec/parsed-data-spec-entries.js +1 -0
  1455. package/dist/domain/spec/sections/data-spec/swatch-data-spec-entry.d.ts +14 -0
  1456. package/dist/domain/spec/sections/data-spec/swatch-data-spec-entry.js +1 -0
  1457. package/dist/domain/spec/sections/index.d.ts +10 -0
  1458. package/dist/domain/spec/sections/index.js +1 -0
  1459. package/dist/domain/spec/sections/infra/acl.d.ts +12 -0
  1460. package/dist/domain/spec/sections/infra/acl.js +1 -0
  1461. package/dist/domain/spec/sections/infra/index.d.ts +3 -0
  1462. package/dist/domain/spec/sections/infra/index.js +1 -0
  1463. package/dist/domain/spec/sections/infra/resource-entry.d.ts +46 -0
  1464. package/dist/domain/spec/sections/infra/resource-entry.js +1 -0
  1465. package/dist/domain/spec/sections/infra/resources-config.d.ts +10 -0
  1466. package/dist/domain/spec/sections/infra/resources-config.js +1 -0
  1467. package/dist/domain/spec/sections/state-value.d.ts +7 -0
  1468. package/dist/domain/spec/sections/state-value.js +1 -0
  1469. package/dist/domain/spec/sections/theme.d.ts +10 -0
  1470. package/dist/domain/spec/sections/theme.js +1 -0
  1471. package/dist/domain/spec/sections/transformers.d.ts +15 -0
  1472. package/dist/domain/spec/sections/transformers.js +1 -0
  1473. package/dist/domain/spec/sections/ui.d.ts +12 -0
  1474. package/dist/domain/spec/sections/ui.js +1 -0
  1475. package/dist/domain/system-components/child-entity-selection.js +1 -1
  1476. package/dist/domain/system-components/common/scene-entity-control-schema.d.ts +3 -0
  1477. package/dist/domain/system-components/common/scene-entity-control-schema.js +1 -1
  1478. package/dist/domain/system-components/phoenix-entity-elements/child-entity-card-selector.d.ts +2 -3
  1479. package/dist/domain/system-components/phoenix-entity-elements/child-entity-list-selector.d.ts +2 -3
  1480. package/dist/domain/system-components/phoenix-entity-elements/child-entity-toggle-selector.d.ts +2 -3
  1481. package/dist/domain/system-definitions.js +1 -1
  1482. package/dist/domain/utils/index.d.ts +2 -0
  1483. package/dist/domain/utils/index.js +1 -0
  1484. package/dist/editor/Editor.d.ts +12 -0
  1485. package/dist/editor/Editor.js +1 -1
  1486. package/dist/editor/EditorMode.d.ts +2 -0
  1487. package/dist/editor/EditorMode.js +1 -1
  1488. package/dist/editor/agent-mode/AgentModeBridge.d.ts +10 -0
  1489. package/dist/editor/agent-mode/AgentModeBridge.js +1 -0
  1490. package/dist/editor/agent-mode/agent-at-work-fonts.d.ts +2 -0
  1491. package/dist/editor/agent-mode/agent-at-work-fonts.js +1 -0
  1492. package/dist/editor/console-reporter/BrowserConsoleReporter.js +1 -1
  1493. package/dist/editor/console-reporter/console-capture.d.ts +20 -0
  1494. package/dist/editor/console-reporter/console-capture.js +1 -0
  1495. package/dist/editor/domain-editors/DomainSpecContext.js +1 -1
  1496. package/dist/editor/domain-editors/apply-spec-update.d.ts +10 -2
  1497. package/dist/editor/domain-editors/apply-spec-update.js +1 -1
  1498. package/dist/editor/domain-editors/use-implementation-files.d.ts +6 -14
  1499. package/dist/editor/domain-editors/use-implementation-files.js +1 -1
  1500. package/dist/editor/graphql/GraphQLPanel.js +1 -1
  1501. package/dist/editor/index.d.ts +1 -0
  1502. package/dist/editor/index.js +1 -1
  1503. package/dist/editor/mocks/CreateMockYaml.js +2 -2
  1504. package/dist/editor/mocks/EditorMockContext.d.ts +2 -0
  1505. package/dist/editor/mocks/EditorMockContext.js +1 -1
  1506. package/dist/editor/screenshot/ScreenshotHandler.js +1 -1
  1507. package/dist/editor/variants/VariantAnswerFooter.d.ts +8 -1
  1508. package/dist/editor/variants/VariantAnswerFooter.js +1 -1
  1509. package/dist/editor/variants/VariantPageUnavailable.d.ts +5 -0
  1510. package/dist/editor/variants/VariantPageUnavailable.js +1 -0
  1511. package/dist/editor/variants/VariantPreviewHandler.js +1 -1
  1512. package/dist/editor/variants/variant-preview-fonts.d.ts +2 -0
  1513. package/dist/editor/variants/variant-preview-fonts.js +1 -0
  1514. package/dist/editor/variants/variant-preview-styles.d.ts +40 -48
  1515. package/dist/editor/variants/variant-preview-styles.js +493 -1
  1516. package/dist/globals/index.d.ts +2 -0
  1517. package/dist/i18n/locales/cs/messages.js +1 -1
  1518. package/dist/i18n/locales/da/messages.js +1 -1
  1519. package/dist/i18n/locales/de/messages.js +1 -1
  1520. package/dist/i18n/locales/de-AT/messages.js +1 -1
  1521. package/dist/i18n/locales/en/messages.js +1 -1
  1522. package/dist/i18n/locales/en-AU/messages.js +1 -1
  1523. package/dist/i18n/locales/en-GB/messages.js +1 -1
  1524. package/dist/i18n/locales/es/messages.js +1 -1
  1525. package/dist/i18n/locales/fr/messages.js +1 -1
  1526. package/dist/i18n/locales/hu/messages.js +1 -1
  1527. package/dist/i18n/locales/it/messages.js +1 -1
  1528. package/dist/i18n/locales/nl/messages.js +1 -1
  1529. package/dist/i18n/locales/pl/messages.js +1 -1
  1530. package/dist/i18n/locales/pt/messages.js +1 -1
  1531. package/dist/i18n/locales/ro/messages.js +1 -1
  1532. package/dist/i18n/locales/sk/messages.js +1 -1
  1533. package/dist/i18n/locales/tr/messages.js +1 -1
  1534. package/dist/i18n/merge-catalogs.d.ts +4 -1
  1535. package/dist/i18n/merge-catalogs.js +1 -1
  1536. package/dist/legacy/domain-cli/gen/configurator-builder.js +5 -4
  1537. package/dist/legacy/domain-cli/utils/cache.d.ts +1 -1
  1538. package/dist/legacy/domain-cli/utils/cache.js +1 -1
  1539. package/dist/legacy/domain-spec/__generated/domain-schema.d.ts +97 -80
  1540. package/dist/legacy/domain-spec/spec/domain-spec.js +1 -1
  1541. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/claude-md.d.ts +1 -1
  1542. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/cursor-rules.d.ts +1 -1
  1543. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/shared-sdk-content.d.ts +1 -1
  1544. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/shared-sdk-content.js +11 -5
  1545. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-admin.js +10 -11
  1546. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-embedded-admin.js +9 -10
  1547. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/i18n-index.js +3 -3
  1548. package/dist/legacy/phoenix-cli/services/webhook-service/transport.js +1 -1
  1549. package/dist/legacy/phoenix-cli/services/webhook-service/tunnel.d.ts +1 -0
  1550. package/dist/legacy/phoenix-cli/services/webhook-service/tunnel.js +1 -1
  1551. package/dist/legacy/webhook-cli/lambda-local/index.js +1 -1
  1552. package/dist/phoenix/application-spec/application-spec-builder.d.ts +2 -4
  1553. package/dist/phoenix/application-spec/application-spec-builder.js +1 -1
  1554. package/dist/phoenix/application-spec/generate-application-spec-project.d.ts +3 -3
  1555. package/dist/phoenix/application-spec/generate-application-spec-project.js +2 -2
  1556. package/dist/phoenix/application-spec/generate-application-spec-story.js +2 -2
  1557. package/dist/phoenix/application-spec/generate-project-files.d.ts +4 -4
  1558. package/dist/phoenix/application-spec/generate-project-files.js +1 -1
  1559. package/dist/phoenix/application-spec/index.d.ts +3 -0
  1560. package/dist/phoenix/application-spec/index.js +1 -1
  1561. package/dist/phoenix/application-spec/project-files.d.ts +8 -2
  1562. package/dist/phoenix/application-spec/project-files.js +1 -1
  1563. package/dist/phoenix/application-spec/read-spec-project.d.ts +1 -2
  1564. package/dist/phoenix/application-spec/read-spec-project.js +1 -1
  1565. package/dist/phoenix/application-spec/resolve-deployment-data.d.ts +11 -0
  1566. package/dist/phoenix/application-spec/resolve-deployment-data.js +2 -2
  1567. package/dist/phoenix/bin.d.ts +2 -0
  1568. package/dist/phoenix/bin.js +2 -0
  1569. package/dist/phoenix/check-configs/built-in-eslint-config.d.ts +9 -0
  1570. package/dist/phoenix/check-configs/built-in-eslint-config.js +1 -0
  1571. package/dist/phoenix/check-configs/eslint-config.d.ts +10 -0
  1572. package/dist/phoenix/check-configs/eslint-config.js +1 -0
  1573. package/dist/phoenix/check-configs/index.d.ts +8 -0
  1574. package/dist/phoenix/check-configs/index.js +1 -0
  1575. package/dist/phoenix/check-configs/typescript-project.d.ts +5 -0
  1576. package/dist/phoenix/check-configs/typescript-project.js +1 -0
  1577. package/dist/phoenix/cli.d.ts +0 -1
  1578. package/dist/phoenix/cli.js +1 -2
  1579. package/dist/phoenix/commands/activate-deployment.js +1 -1
  1580. package/dist/phoenix/commands/build.d.ts +2 -1
  1581. package/dist/phoenix/commands/build.js +1 -1
  1582. package/dist/phoenix/commands/changelog.js +1 -1
  1583. package/dist/phoenix/commands/check.js +1 -1
  1584. package/dist/phoenix/commands/clean.d.ts +2 -1
  1585. package/dist/phoenix/commands/clean.js +1 -1
  1586. package/dist/phoenix/commands/cleanup-environment.js +2 -2
  1587. package/dist/phoenix/commands/create-environment.js +1 -1
  1588. package/dist/phoenix/commands/data.js +1 -1
  1589. package/dist/phoenix/commands/deploy.js +3 -3
  1590. package/dist/phoenix/commands/deployment-build-envs-command.js +1 -1
  1591. package/dist/phoenix/commands/deps/deps.d.ts +73 -0
  1592. package/dist/phoenix/commands/deps/deps.js +3 -0
  1593. package/dist/phoenix/commands/deps/index.d.ts +1 -0
  1594. package/dist/phoenix/commands/deps/index.js +1 -0
  1595. package/dist/phoenix/commands/deps/sdk-manifest.d.ts +12 -0
  1596. package/dist/phoenix/commands/deps/sdk-manifest.js +1 -0
  1597. package/dist/phoenix/commands/dev.d.ts +2 -1
  1598. package/dist/phoenix/commands/dev.js +4 -5
  1599. package/dist/phoenix/commands/docs.js +1 -1
  1600. package/dist/phoenix/commands/finish-deployment-command.js +1 -1
  1601. package/dist/phoenix/commands/fix.js +1 -1
  1602. package/dist/phoenix/commands/index.d.ts +1 -0
  1603. package/dist/phoenix/commands/index.js +1 -1
  1604. package/dist/phoenix/commands/init.d.ts +17 -5
  1605. package/dist/phoenix/commands/init.js +1 -1
  1606. package/dist/phoenix/commands/inspect-assets.js +1 -1
  1607. package/dist/phoenix/commands/link.js +1 -1
  1608. package/dist/phoenix/commands/list-environments.js +1 -1
  1609. package/dist/phoenix/commands/login.d.ts +4 -1
  1610. package/dist/phoenix/commands/login.js +2 -2
  1611. package/dist/phoenix/commands/prepare-deployment-command.js +2 -2
  1612. package/dist/phoenix/commands/prettier.js +1 -1
  1613. package/dist/phoenix/commands/register-deployment.js +1 -1
  1614. package/dist/phoenix/commands/scene.js +1 -1
  1615. package/dist/phoenix/commands/screenshot.js +1 -1
  1616. package/dist/phoenix/commands/state.js +1 -1
  1617. package/dist/phoenix/commands/story-build.js +3 -3
  1618. package/dist/phoenix/commands/story-create.js +1 -1
  1619. package/dist/phoenix/commands/story-dev.js +2 -2
  1620. package/dist/phoenix/commands/sync.d.ts +2 -1
  1621. package/dist/phoenix/commands/sync.js +1 -1
  1622. package/dist/phoenix/commands/unlink.js +1 -1
  1623. package/dist/phoenix/commands/variants.js +1 -1
  1624. package/dist/phoenix/editor-server/commands-router.js +1 -1
  1625. package/dist/phoenix/editor-server/editor-server.d.ts +2 -13
  1626. package/dist/phoenix/editor-server/editor-server.js +1 -1
  1627. package/dist/phoenix/editor-server/spec-router.js +1 -1
  1628. package/dist/phoenix/editor-server/trpc.d.ts +2 -12
  1629. package/dist/phoenix/lingui/index.d.ts +1 -0
  1630. package/dist/phoenix/lingui/index.js +1 -0
  1631. package/dist/phoenix/lingui/lingui.d.ts +18 -0
  1632. package/dist/phoenix/lingui/lingui.js +1 -0
  1633. package/dist/phoenix/scripts/docs-utils.js +1 -1
  1634. package/dist/phoenix/services/application-spec-project-watcher.d.ts +16 -9
  1635. package/dist/phoenix/services/application-spec-project-watcher.js +2 -2
  1636. package/dist/phoenix/services/cli-credentials.d.ts +3 -0
  1637. package/dist/phoenix/services/cli-credentials.js +1 -1
  1638. package/dist/phoenix/services/cli-exit.d.ts +5 -0
  1639. package/dist/phoenix/services/cli-exit.js +1 -0
  1640. package/dist/phoenix/services/deployment/deployment-preparation-service.d.ts +28 -0
  1641. package/dist/phoenix/services/deployment/deployment-preparation-service.js +1 -0
  1642. package/dist/phoenix/services/deployment/generated-env-markers.d.ts +8 -0
  1643. package/dist/phoenix/services/deployment/generated-env-markers.js +1 -0
  1644. package/dist/phoenix/services/deployment/index.d.ts +2 -0
  1645. package/dist/phoenix/services/deployment/index.js +1 -0
  1646. package/dist/phoenix/services/dev-experience/dev-experience.d.ts +31 -0
  1647. package/dist/phoenix/services/dev-experience/dev-experience.js +1 -0
  1648. package/dist/phoenix/services/dev-experience/index.d.ts +3 -0
  1649. package/dist/phoenix/services/dev-experience/index.js +1 -0
  1650. package/dist/phoenix/services/dev-experience/read-explicit-editor-setting.d.ts +7 -0
  1651. package/dist/phoenix/services/dev-experience/read-explicit-editor-setting.js +1 -0
  1652. package/dist/phoenix/services/dev-experience/regenerated-page-experience.d.ts +24 -0
  1653. package/dist/phoenix/services/dev-experience/regenerated-page-experience.js +1 -0
  1654. package/dist/phoenix/services/index.d.ts +7 -2
  1655. package/dist/phoenix/services/index.js +1 -1
  1656. package/dist/phoenix/services/lingui-watcher.js +1 -1
  1657. package/dist/phoenix/services/phoenix-pubsub.d.ts +4 -0
  1658. package/dist/phoenix/services/phoenix-store.d.ts +3 -0
  1659. package/dist/phoenix/services/phoenix-store.js +1 -1
  1660. package/dist/phoenix/services/prepare-development-environment.js +1 -1
  1661. package/dist/phoenix/services/session/editor-server-handle.d.ts +5 -0
  1662. package/dist/phoenix/services/session/editor-server-handle.js +1 -0
  1663. package/dist/phoenix/services/session/index.d.ts +2 -0
  1664. package/dist/phoenix/services/session/index.js +1 -0
  1665. package/dist/phoenix/services/session/phoenix-application.d.ts +83 -0
  1666. package/dist/phoenix/services/session/phoenix-application.js +2 -0
  1667. package/dist/phoenix/services/source-archive.d.ts +2 -0
  1668. package/dist/phoenix/services/source-archive.js +1 -1
  1669. package/dist/phoenix/services/swc.d.ts +5 -4
  1670. package/dist/phoenix/services/swc.js +2 -2
  1671. package/dist/phoenix/services/telemetry/amplitude-telemetry-transport.d.ts +9 -0
  1672. package/dist/phoenix/services/telemetry/amplitude-telemetry-transport.js +1 -0
  1673. package/dist/phoenix/services/telemetry/index.d.ts +3 -0
  1674. package/dist/phoenix/services/telemetry/index.js +1 -0
  1675. package/dist/phoenix/services/telemetry/telemetry-client.d.ts +25 -0
  1676. package/dist/phoenix/services/telemetry/telemetry-client.js +1 -0
  1677. package/dist/phoenix/services/telemetry/telemetry-command.d.ts +2 -0
  1678. package/dist/phoenix/services/telemetry/telemetry-command.js +1 -0
  1679. package/dist/phoenix/services/telemetry/telemetry-event.d.ts +44 -0
  1680. package/dist/phoenix/services/telemetry/telemetry-event.js +1 -0
  1681. package/dist/phoenix/services/telemetry/telemetry-state.d.ts +25 -0
  1682. package/dist/phoenix/services/telemetry/telemetry-state.js +2 -0
  1683. package/dist/phoenix/services/vite-config.d.ts +2 -1
  1684. package/dist/phoenix/services/vite-config.js +1 -1
  1685. package/dist/phoenix/services/webhook-service/transport.js +1 -1
  1686. package/dist/phoenix/services/webhook-service/tunnel.d.ts +1 -0
  1687. package/dist/phoenix/services/webhook-service/tunnel.js +1 -1
  1688. package/dist/phoenix/utils/index.d.ts +4 -2
  1689. package/dist/phoenix/utils/index.js +1 -1
  1690. package/dist/phoenix/utils/node-version/index.d.ts +1 -0
  1691. package/dist/phoenix/utils/node-version/index.js +1 -0
  1692. package/dist/phoenix/utils/node-version/supported-node-version.d.ts +12 -0
  1693. package/dist/phoenix/utils/node-version/supported-node-version.js +4 -0
  1694. package/dist/phoenix/utils/package-info.d.ts +0 -9
  1695. package/dist/phoenix/utils/package-info.js +1 -1
  1696. package/dist/phoenix/utils/package-manager/index.d.ts +2 -0
  1697. package/dist/phoenix/utils/package-manager/index.js +1 -0
  1698. package/dist/phoenix/utils/package-manager/package-manager-commands.d.ts +19 -0
  1699. package/dist/phoenix/utils/package-manager/package-manager-commands.js +1 -0
  1700. package/dist/phoenix/utils/package-manager/pnpm-project.d.ts +9 -0
  1701. package/dist/phoenix/utils/package-manager/pnpm-project.js +1 -0
  1702. package/dist/phoenix/utils/run-command.d.ts +11 -0
  1703. package/dist/phoenix/utils/run-command.js +1 -1
  1704. package/dist/phoenix/utils/sdk-tool/index.d.ts +1 -0
  1705. package/dist/phoenix/utils/sdk-tool/index.js +1 -0
  1706. package/dist/phoenix/utils/sdk-tool/resolve-sdk-tool-bin.d.ts +15 -0
  1707. package/dist/phoenix/utils/sdk-tool/resolve-sdk-tool-bin.js +1 -0
  1708. package/dist/react-sdk/application-runtime/common-services/analytics/analytics-service.d.ts +1 -1
  1709. package/dist/react-sdk/application-runtime/common-services/analytics/frontend-analytics.d.ts +52 -0
  1710. package/dist/react-sdk/application-runtime/common-services/analytics/index.d.ts +1 -0
  1711. package/dist/react-sdk/application-runtime/common-services/analytics/index.js +1 -1
  1712. package/dist/react-sdk/application-runtime/common-services/initialize.d.ts +2 -2
  1713. package/dist/react-sdk/application-runtime/domain-application-context/chat-system.d.ts +1 -1
  1714. package/dist/react-sdk/application-runtime/hooks/index.d.ts +2 -0
  1715. package/dist/react-sdk/application-runtime/hooks/index.js +1 -1
  1716. package/dist/react-sdk/application-runtime/hooks/loading/index.d.ts +5 -0
  1717. package/dist/react-sdk/application-runtime/hooks/loading/index.js +1 -0
  1718. package/dist/react-sdk/application-runtime/hooks/loading/loader-host-context.d.ts +11 -0
  1719. package/dist/react-sdk/application-runtime/hooks/loading/loader-host-context.js +1 -0
  1720. package/dist/react-sdk/application-runtime/hooks/loading/use-is-awaiting-loading-phase.d.ts +8 -0
  1721. package/dist/react-sdk/application-runtime/hooks/loading/use-is-awaiting-loading-phase.js +1 -0
  1722. package/dist/react-sdk/application-runtime/hooks/loading/use-is-loader-hosted.d.ts +7 -0
  1723. package/dist/react-sdk/application-runtime/hooks/loading/use-is-loader-hosted.js +1 -0
  1724. package/dist/react-sdk/application-runtime/hooks/loading/use-loading-actions.d.ts +9 -0
  1725. package/dist/react-sdk/application-runtime/hooks/loading/use-loading-actions.js +1 -0
  1726. package/dist/react-sdk/application-runtime/hooks/loading/use-loading-application.d.ts +24 -0
  1727. package/dist/react-sdk/application-runtime/hooks/loading/use-loading-application.js +1 -0
  1728. package/dist/react-sdk/application-runtime/hooks/responsive/index.d.ts +3 -0
  1729. package/dist/react-sdk/application-runtime/hooks/responsive/index.js +1 -0
  1730. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-actions.d.ts +9 -0
  1731. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-actions.js +1 -0
  1732. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-application.d.ts +28 -0
  1733. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-application.js +1 -0
  1734. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-state.d.ts +10 -0
  1735. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-state.js +1 -0
  1736. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-store.d.ts +24 -0
  1737. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-store.js +1 -0
  1738. package/dist/react-sdk/application-runtime/hooks/use-access-service.d.ts +5 -0
  1739. package/dist/react-sdk/application-runtime/hooks/use-access-service.js +1 -1
  1740. package/dist/react-sdk/application-runtime/hooks/use-environment.d.ts +7 -0
  1741. package/dist/react-sdk/application-runtime/hooks/use-environment.js +1 -1
  1742. package/dist/react-sdk/application-runtime/hooks/use-phoenix-element-slots.d.ts +2 -1
  1743. package/dist/react-sdk/application-runtime/hooks/use-web-component-readonly-sync.d.ts +4 -11
  1744. package/dist/react-sdk/application-runtime/hooks/use-web-component-readonly-sync.js +1 -1
  1745. package/dist/react-sdk/application-runtime/hooks/use-web-component.d.ts +5 -0
  1746. package/dist/react-sdk/application-runtime/hooks/use-web-component.js +1 -1
  1747. package/dist/react-sdk/application-runtime/host-properties/actions.d.ts +15 -0
  1748. package/dist/react-sdk/application-runtime/host-properties/actions.js +1 -0
  1749. package/dist/react-sdk/application-runtime/host-properties/connect-host-properties.d.ts +30 -0
  1750. package/dist/react-sdk/application-runtime/host-properties/connect-host-properties.js +1 -0
  1751. package/dist/react-sdk/application-runtime/host-properties/domain-host-properties.d.ts +7 -0
  1752. package/dist/react-sdk/application-runtime/host-properties/domain-host-properties.js +1 -0
  1753. package/dist/react-sdk/application-runtime/host-properties/host-property-descriptors.d.ts +21 -0
  1754. package/dist/react-sdk/application-runtime/host-properties/host-property-descriptors.js +1 -0
  1755. package/dist/react-sdk/application-runtime/host-properties/host-property-scopes.d.ts +42 -0
  1756. package/dist/react-sdk/application-runtime/host-properties/host-property-scopes.js +1 -0
  1757. package/dist/react-sdk/application-runtime/host-properties/index.d.ts +8 -0
  1758. package/dist/react-sdk/application-runtime/host-properties/index.js +1 -0
  1759. package/dist/react-sdk/application-runtime/host-properties/initialize.d.ts +7 -0
  1760. package/dist/react-sdk/application-runtime/host-properties/initialize.js +1 -0
  1761. package/dist/react-sdk/application-runtime/host-properties/selectors.d.ts +54 -0
  1762. package/dist/react-sdk/application-runtime/host-properties/selectors.js +1 -0
  1763. package/dist/react-sdk/application-runtime/host-properties/types.d.ts +18 -0
  1764. package/dist/react-sdk/application-runtime/host-properties/types.js +1 -0
  1765. package/dist/react-sdk/application-runtime/index.d.ts +3 -0
  1766. package/dist/react-sdk/application-runtime/integration/initialize.d.ts +7 -6
  1767. package/dist/react-sdk/application-runtime/integration/initialize.js +1 -1
  1768. package/dist/react-sdk/application-runtime/integration/selectors.d.ts +11 -2
  1769. package/dist/react-sdk/application-runtime/integration/selectors.js +1 -1
  1770. package/dist/react-sdk/application-runtime/integration/types.d.ts +5 -2
  1771. package/dist/react-sdk/application-runtime/loading/actions.d.ts +45 -0
  1772. package/dist/react-sdk/application-runtime/loading/actions.js +1 -0
  1773. package/dist/react-sdk/application-runtime/loading/index.d.ts +4 -0
  1774. package/dist/react-sdk/application-runtime/loading/index.js +1 -0
  1775. package/dist/react-sdk/application-runtime/loading/initialize.d.ts +3 -0
  1776. package/dist/react-sdk/application-runtime/loading/initialize.js +1 -0
  1777. package/dist/react-sdk/application-runtime/loading/selectors.d.ts +18 -0
  1778. package/dist/react-sdk/application-runtime/loading/selectors.js +1 -0
  1779. package/dist/react-sdk/application-runtime/loading/types.d.ts +59 -0
  1780. package/dist/react-sdk/application-runtime/loading/types.js +1 -0
  1781. package/dist/react-sdk/application-runtime/mocks/create-mock-application-runtime.js +1 -1
  1782. package/dist/react-sdk/application-runtime/provider/ApplicationRuntime.d.ts +6 -0
  1783. package/dist/react-sdk/application-runtime/provider/ApplicationRuntime.js +1 -1
  1784. package/dist/react-sdk/application-runtime/provider/ApplicationType.d.ts +7 -0
  1785. package/dist/react-sdk/application-runtime/provider/ApplicationType.js +1 -1
  1786. package/dist/react-sdk/application-runtime/responsive/actions.d.ts +53 -0
  1787. package/dist/react-sdk/application-runtime/responsive/actions.js +1 -0
  1788. package/dist/react-sdk/application-runtime/responsive/index.d.ts +4 -0
  1789. package/dist/react-sdk/application-runtime/responsive/index.js +1 -0
  1790. package/dist/react-sdk/application-runtime/responsive/initialize.d.ts +3 -0
  1791. package/dist/react-sdk/application-runtime/responsive/initialize.js +1 -0
  1792. package/dist/react-sdk/application-runtime/responsive/selectors.d.ts +20 -0
  1793. package/dist/react-sdk/application-runtime/responsive/selectors.js +1 -0
  1794. package/dist/react-sdk/application-runtime/responsive/types.d.ts +113 -0
  1795. package/dist/react-sdk/application-runtime/responsive/types.js +1 -0
  1796. package/dist/react-sdk/application-runtime/routing/routing-service.d.ts +34 -2
  1797. package/dist/react-sdk/application-runtime/routing/routing-service.js +1 -1
  1798. package/dist/react-sdk/application-runtime/runtime/create-application-runtime.d.ts +331 -10
  1799. package/dist/react-sdk/application-runtime/runtime/create-application-runtime.js +1 -1
  1800. package/dist/react-sdk/configurator-routing/ConfiguratorRoutingProvider.d.ts +11 -0
  1801. package/dist/react-sdk/configurator-routing/ConfiguratorRoutingProvider.js +1 -0
  1802. package/dist/react-sdk/configurator-routing/OnGoToIndexHandler.d.ts +9 -0
  1803. package/dist/react-sdk/configurator-routing/OnGoToIndexHandler.js +1 -0
  1804. package/dist/react-sdk/configurator-routing/index.d.ts +3 -0
  1805. package/dist/react-sdk/configurator-routing/index.js +1 -0
  1806. package/dist/react-sdk/configurator-routing/use-power-routing-lifecycle.d.ts +11 -0
  1807. package/dist/react-sdk/configurator-routing/use-power-routing-lifecycle.js +1 -0
  1808. package/dist/react-sdk/configurator-ui-elements/ConfiguratorUiElementHost.d.ts +7 -0
  1809. package/dist/react-sdk/configurator-ui-elements/ConfiguratorUiElementHost.js +1 -0
  1810. package/dist/react-sdk/configurator-ui-elements/ErrorFallbackElement.d.ts +14 -0
  1811. package/dist/react-sdk/configurator-ui-elements/ErrorFallbackElement.js +1 -0
  1812. package/dist/react-sdk/configurator-ui-elements/ErrorFallbackPropsProvider.d.ts +18 -0
  1813. package/dist/react-sdk/configurator-ui-elements/ErrorFallbackPropsProvider.js +1 -0
  1814. package/dist/react-sdk/configurator-ui-elements/PlainErrorFallback.d.ts +5 -0
  1815. package/dist/react-sdk/configurator-ui-elements/PlainErrorFallback.js +1 -0
  1816. package/dist/react-sdk/configurator-ui-elements/configurator-ui-element.d.ts +17 -0
  1817. package/dist/react-sdk/configurator-ui-elements/configurator-ui-element.js +1 -0
  1818. package/dist/react-sdk/configurator-ui-elements/create-configurator-ui-element.d.ts +5 -0
  1819. package/dist/react-sdk/configurator-ui-elements/create-configurator-ui-element.js +1 -0
  1820. package/dist/react-sdk/configurator-ui-elements/index.d.ts +6 -0
  1821. package/dist/react-sdk/configurator-ui-elements/index.js +1 -0
  1822. package/dist/react-sdk/domain-application-context/BackendDataProvider.js +1 -1
  1823. package/dist/react-sdk/domain-application-context/ConfigurationPersistSystemFailureHandler.js +1 -1
  1824. package/dist/react-sdk/domain-application-context/DomainLifecycleBoundary.js +1 -1
  1825. package/dist/react-sdk/domain-application-context/FrontendDataProvider.js +1 -1
  1826. package/dist/react-sdk/domain-application-context/OnPresetLoadedHandler.js +1 -0
  1827. package/dist/react-sdk/domain-application-context/PublishedDataProvider.js +1 -1
  1828. package/dist/react-sdk/domain-application-context/chat-hooks.d.ts +4 -0
  1829. package/dist/react-sdk/domain-application-context/chat-hooks.js +1 -0
  1830. package/dist/react-sdk/domain-application-context/index.d.ts +2 -0
  1831. package/dist/react-sdk/domain-application-context/index.js +1 -1
  1832. package/dist/react-sdk/domain-context/common-hooks/index.d.ts +9 -0
  1833. package/dist/react-sdk/domain-context/common-hooks/index.js +1 -0
  1834. package/dist/react-sdk/domain-context/common-hooks/use-configuration-save-state.d.ts +23 -0
  1835. package/dist/react-sdk/domain-context/common-hooks/use-configuration-save-state.js +1 -0
  1836. package/dist/react-sdk/domain-context/common-hooks/use-configurator-messages.d.ts +15 -4
  1837. package/dist/react-sdk/domain-context/common-hooks/use-configurator-messages.js +1 -1
  1838. package/dist/react-sdk/domain-context/common-hooks/use-domain-context.d.ts +5 -3
  1839. package/dist/react-sdk/domain-context/common-hooks/use-state-validity.d.ts +6 -1
  1840. package/dist/react-sdk/domain-context/common-hooks/use-state-validity.js +1 -1
  1841. package/dist/react-sdk/domain-context/component-hooks/index.d.ts +1 -0
  1842. package/dist/react-sdk/domain-context/component-hooks/index.js +1 -0
  1843. package/dist/react-sdk/domain-context/component-hooks/use-component.js +1 -1
  1844. package/dist/react-sdk/domain-context/entity-hooks/use-domain-entity-state.js +1 -1
  1845. package/dist/react-sdk/domain-context/entity-hooks/use-entity-price.js +1 -1
  1846. package/dist/react-sdk/domain-context/entity-hooks/use-root-entity-id.js +1 -1
  1847. package/dist/react-sdk/domain-context/entity-hooks/use-root-entity-state.js +1 -1
  1848. package/dist/react-sdk/domain-context/index.d.ts +8 -1
  1849. package/dist/react-sdk/domain-context/index.js +1 -1
  1850. package/dist/react-sdk/domain-context/system-hooks/composition-hooks.js +1 -1
  1851. package/dist/react-sdk/domain-context/system-hooks/dimension-hooks.js +1 -1
  1852. package/dist/react-sdk/domain-context/system-hooks/generate-share-link-hooks.d.ts +8 -0
  1853. package/dist/react-sdk/domain-context/system-hooks/generate-share-link-hooks.js +1 -0
  1854. package/dist/react-sdk/domain-context/system-hooks/hover-hooks.d.ts +2 -2
  1855. package/dist/react-sdk/domain-context/system-hooks/hover-hooks.js +1 -1
  1856. package/dist/react-sdk/domain-context/system-hooks/locale-switch-hooks.d.ts +24 -0
  1857. package/dist/react-sdk/domain-context/system-hooks/locale-switch-hooks.js +1 -0
  1858. package/dist/react-sdk/domain-context/system-hooks/navigation-hooks.d.ts +5 -0
  1859. package/dist/react-sdk/domain-context/system-hooks/navigation-hooks.js +1 -1
  1860. package/dist/react-sdk/domain-context/system-hooks/selection-hooks.js +1 -1
  1861. package/dist/react-sdk/domain-context/system-hooks/share-links-hooks.d.ts +32 -0
  1862. package/dist/react-sdk/domain-context/system-hooks/share-links-hooks.js +1 -0
  1863. package/dist/react-sdk/domain-context/system-hooks/step-navigation-hooks.d.ts +57 -0
  1864. package/dist/react-sdk/domain-context/system-hooks/step-navigation-hooks.js +1 -0
  1865. package/dist/react-sdk/domain-context/system-hooks/tab-navigation-hooks.d.ts +61 -0
  1866. package/dist/react-sdk/domain-context/system-hooks/tab-navigation-hooks.js +1 -0
  1867. package/dist/react-sdk/domain-context/system-hooks/undo-redo-hooks.d.ts +20 -0
  1868. package/dist/react-sdk/domain-context/system-hooks/undo-redo-hooks.js +1 -0
  1869. package/dist/react-sdk/domain-controls/ChildEntityCardSelector.d.ts +2 -3
  1870. package/dist/react-sdk/domain-controls/ChildEntityListSelector.d.ts +2 -3
  1871. package/dist/react-sdk/domain-controls/ChildEntityToggleSelector.d.ts +2 -3
  1872. package/dist/react-sdk/domain-controls/hooks/use-cook-replace-recipes.d.ts +3 -3
  1873. package/dist/react-sdk/elements/PhoenixEntityElement.js +1 -1
  1874. package/dist/react-sdk/elements/PhoenixLayoutElement.js +1 -1
  1875. package/dist/react-sdk/handlers/FinalizeActionRunner.d.ts +13 -0
  1876. package/dist/react-sdk/handlers/FinalizeActionRunner.js +1 -0
  1877. package/dist/react-sdk/handlers/FinalizeActionsHost.d.ts +10 -0
  1878. package/dist/react-sdk/handlers/FinalizeActionsHost.js +1 -0
  1879. package/dist/react-sdk/handlers/FinalizeActionsProvider.d.ts +11 -0
  1880. package/dist/react-sdk/handlers/FinalizeActionsProvider.js +1 -0
  1881. package/dist/react-sdk/handlers/finalize-actions-context.d.ts +6 -0
  1882. package/dist/react-sdk/handlers/finalize-actions-context.js +1 -0
  1883. package/dist/react-sdk/handlers/finalize-actions-store.d.ts +23 -0
  1884. package/dist/react-sdk/handlers/finalize-actions-store.js +1 -0
  1885. package/dist/react-sdk/handlers/index.d.ts +6 -0
  1886. package/dist/react-sdk/handlers/index.js +1 -1
  1887. package/dist/react-sdk/handlers/use-finalize-action.d.ts +32 -0
  1888. package/dist/react-sdk/handlers/use-finalize-action.js +1 -0
  1889. package/dist/react-sdk/handlers/use-finalize-actions.d.ts +53 -0
  1890. package/dist/react-sdk/handlers/use-finalize-actions.js +1 -0
  1891. package/dist/react-sdk/index.d.ts +9 -0
  1892. package/dist/react-sdk/index.js +1 -1
  1893. package/dist/react-sdk/integration/IntegrationSubscription.js +1 -0
  1894. package/dist/react-sdk/integration/index.d.ts +1 -0
  1895. package/dist/react-sdk/integration/index.js +1 -0
  1896. package/dist/react-sdk/lifecycle-providers/ConfiguratorDataProvider.d.ts +8 -0
  1897. package/dist/react-sdk/lifecycle-providers/ConfiguratorDataProvider.js +1 -0
  1898. package/dist/react-sdk/lifecycle-providers/LifecycleProviders.js +1 -0
  1899. package/dist/react-sdk/lifecycle-providers/index.d.ts +2 -0
  1900. package/dist/react-sdk/lifecycle-providers/index.js +1 -0
  1901. package/dist/react-sdk/loading-state/LoaderHost.d.ts +20 -0
  1902. package/dist/react-sdk/loading-state/LoaderHost.js +1 -0
  1903. package/dist/react-sdk/loading-state/built-in-loading-phase.d.ts +9 -0
  1904. package/dist/react-sdk/loading-state/built-in-loading-phase.js +1 -0
  1905. package/dist/react-sdk/loading-state/create-app-loader.d.ts +18 -0
  1906. package/dist/react-sdk/loading-state/create-app-loader.js +1 -0
  1907. package/dist/react-sdk/loading-state/index.d.ts +4 -2
  1908. package/dist/react-sdk/loading-state/index.js +1 -1
  1909. package/dist/react-sdk/loading-state/loading-state-hooks.d.ts +22 -0
  1910. package/dist/react-sdk/loading-state/loading-state-hooks.js +1 -0
  1911. package/dist/react-sdk/notifications/index.d.ts +1 -0
  1912. package/dist/react-sdk/notifications/index.js +1 -0
  1913. package/dist/react-sdk/notifications/snackbar-action-button.d.ts +30 -0
  1914. package/dist/react-sdk/notifications/snackbar-action-button.js +1 -0
  1915. package/dist/react-sdk/page-elements/ConfigurationNotFoundPagePropsProvider.d.ts +17 -0
  1916. package/dist/react-sdk/page-elements/ConfigurationNotFoundPagePropsProvider.js +1 -0
  1917. package/dist/react-sdk/page-elements/ConfiguratorErrorPagePropsProvider.d.ts +17 -0
  1918. package/dist/react-sdk/page-elements/ConfiguratorErrorPagePropsProvider.js +1 -0
  1919. package/dist/react-sdk/page-elements/configurator-error-page-props.d.ts +20 -0
  1920. package/dist/react-sdk/page-elements/configurator-error-page-props.js +1 -0
  1921. package/dist/react-sdk/page-elements/create-configuration-not-found-page.d.ts +15 -0
  1922. package/dist/react-sdk/page-elements/create-configuration-not-found-page.js +1 -0
  1923. package/dist/react-sdk/page-elements/create-configurator-error-page.d.ts +14 -0
  1924. package/dist/react-sdk/page-elements/create-configurator-error-page.js +1 -0
  1925. package/dist/react-sdk/page-elements/create-preset-ui.d.ts +9 -0
  1926. package/dist/react-sdk/page-elements/create-preset-ui.js +1 -0
  1927. package/dist/react-sdk/page-elements/index.d.ts +6 -0
  1928. package/dist/react-sdk/page-elements/index.js +1 -0
  1929. package/dist/react-sdk/preset-selection/PresetSelectionProvider.js +1 -0
  1930. package/dist/react-sdk/preset-selection/index.d.ts +1 -0
  1931. package/dist/react-sdk/preset-selection/index.js +1 -0
  1932. package/dist/react-sdk/provider-slots/ConfiguratorProviderSlotHost.d.ts +11 -0
  1933. package/dist/react-sdk/provider-slots/ConfiguratorProviderSlotHost.js +1 -0
  1934. package/dist/react-sdk/provider-slots/configurator-provider-slot.d.ts +24 -0
  1935. package/dist/react-sdk/provider-slots/configurator-provider-slot.js +1 -0
  1936. package/dist/react-sdk/provider-slots/create-configurator-provider-slot.d.ts +5 -0
  1937. package/dist/react-sdk/provider-slots/create-configurator-provider-slot.js +1 -0
  1938. package/dist/react-sdk/provider-slots/index.d.ts +3 -0
  1939. package/dist/react-sdk/provider-slots/index.js +1 -0
  1940. package/dist/react-sdk/scene-control-elements/AddEntityFabElement.d.ts +36 -0
  1941. package/dist/react-sdk/scene-control-elements/AddEntityFabElement.js +1 -0
  1942. package/dist/react-sdk/scene-control-elements/DeleteEntityFabElement.d.ts +44 -0
  1943. package/dist/react-sdk/scene-control-elements/DeleteEntityFabElement.js +1 -0
  1944. package/dist/react-sdk/scene-control-elements/NavigationHotspotElement.d.ts +38 -0
  1945. package/dist/react-sdk/scene-control-elements/NavigationHotspotElement.js +1 -0
  1946. package/dist/react-sdk/scene-control-elements/SelectionHotspotElement.d.ts +30 -0
  1947. package/dist/react-sdk/scene-control-elements/SelectionHotspotElement.js +1 -0
  1948. package/dist/react-sdk/scene-control-elements/ToolMenuFabElement.d.ts +30 -0
  1949. package/dist/react-sdk/scene-control-elements/ToolMenuFabElement.js +1 -0
  1950. package/dist/react-sdk/scene-control-elements/create-add-entity-fab.d.ts +9 -0
  1951. package/dist/react-sdk/scene-control-elements/create-add-entity-fab.js +1 -0
  1952. package/dist/react-sdk/scene-control-elements/create-delete-entity-fab.d.ts +9 -0
  1953. package/dist/react-sdk/scene-control-elements/create-delete-entity-fab.js +1 -0
  1954. package/dist/react-sdk/scene-control-elements/create-navigation-hotspot.d.ts +10 -0
  1955. package/dist/react-sdk/scene-control-elements/create-navigation-hotspot.js +1 -0
  1956. package/dist/react-sdk/scene-control-elements/create-selection-hotspot.d.ts +9 -0
  1957. package/dist/react-sdk/scene-control-elements/create-selection-hotspot.js +1 -0
  1958. package/dist/react-sdk/scene-control-elements/create-tool-menu-fab.d.ts +9 -0
  1959. package/dist/react-sdk/scene-control-elements/create-tool-menu-fab.js +1 -0
  1960. package/dist/react-sdk/scene-control-elements/index.d.ts +11 -0
  1961. package/dist/react-sdk/scene-control-elements/index.js +1 -0
  1962. package/dist/react-sdk/scene-control-elements/scene-control-tooltip-visibility.d.ts +5 -0
  1963. package/dist/react-sdk/scene-control-elements/scene-control-tooltip-visibility.js +1 -0
  1964. package/dist/react-sdk/session/NotAuthenticatedPage.d.ts +4 -0
  1965. package/dist/react-sdk/session/NotAuthenticatedPage.js +1 -1
  1966. package/dist/react-sdk/session/SessionServiceProvider.d.ts +5 -0
  1967. package/dist/react-sdk/session/SessionServiceProvider.js +1 -1
  1968. package/dist/react-sdk/web-component/create-web-component.js +1 -1
  1969. package/dist/react-sdk/web-component/god-mode/god-mode-registry.d.ts +30 -0
  1970. package/dist/react-sdk/web-component/god-mode/god-mode-registry.js +1 -0
  1971. package/dist/react-sdk/web-component/god-mode/index.d.ts +1 -0
  1972. package/dist/react-sdk/web-component/god-mode/index.js +1 -0
  1973. package/dist/ui-sdk/components/numerical-input/InputField.d.ts +2 -0
  1974. package/dist/ui-sdk/components/numerical-input/InputField.js +1 -1
  1975. package/dist/ui-sdk/components/numerical-input/NumericalInput.d.ts +2 -2
  1976. package/dist/ui-sdk/components/numerical-input/Slider.d.ts +3 -1
  1977. package/dist/ui-sdk/components/numerical-input/Slider.js +1 -1
  1978. package/dist/ui-sdk/components/snackbar/Snackbar.d.ts +24 -3
  1979. package/dist/ui-sdk/components/snackbar/Snackbar.js +1 -1
  1980. package/dist/ui-sdk/icons/__generated/ChatCircleText.d.ts +3 -0
  1981. package/dist/ui-sdk/icons/__generated/ChatCircleText.js +1 -0
  1982. package/dist/ui-sdk/icons/__generated/Lightbulb.d.ts +3 -0
  1983. package/dist/ui-sdk/icons/__generated/Lightbulb.js +1 -0
  1984. package/dist/ui-sdk/icons/__generated/Microphone.d.ts +3 -0
  1985. package/dist/ui-sdk/icons/__generated/Microphone.js +1 -0
  1986. package/dist/ui-sdk/icons/__generated/MicrophoneSlash.d.ts +3 -0
  1987. package/dist/ui-sdk/icons/__generated/MicrophoneSlash.js +1 -0
  1988. package/dist/ui-sdk/icons/__generated/Paperclip.d.ts +3 -0
  1989. package/dist/ui-sdk/icons/__generated/Paperclip.js +1 -0
  1990. package/dist/ui-sdk/icons/__generated/PencilSimpleLine.d.ts +3 -0
  1991. package/dist/ui-sdk/icons/__generated/PencilSimpleLine.js +1 -0
  1992. package/dist/ui-sdk/icons/__generated/XCircle.d.ts +3 -0
  1993. package/dist/ui-sdk/icons/__generated/XCircle.js +1 -0
  1994. package/dist/ui-sdk/icons/__generated/index.d.ts +14 -0
  1995. package/dist/ui-sdk/icons/__generated/index.js +1 -1
  1996. package/dist/ui-sdk/icons/icons-registry.js +1 -1
  1997. package/dist/ui-sdk/responsive-application/ResponsiveApplicationProvider.d.ts +9 -0
  1998. package/dist/ui-sdk/responsive-application/ResponsiveApplicationProvider.js +1 -1
  1999. package/dist/ui-sdk/responsive-application/index.d.ts +1 -0
  2000. package/dist/ui-sdk/responsive-application/responsive-state-store.d.ts +59 -0
  2001. package/dist/ui-sdk/responsive-application/responsive-state-store.js +1 -0
  2002. package/dist/ui-sdk/responsive-application/use-store-responsive-info.d.ts +7 -0
  2003. package/dist/ui-sdk/responsive-application/use-store-responsive-info.js +1 -0
  2004. package/dist/ui-sdk/theme/types.d.ts +3 -3
  2005. package/dist/watch/glob-matcher.d.ts +4 -4
  2006. package/dist/watch/glob-matcher.js +1 -1
  2007. package/dist/watch/watch.d.ts +4 -4
  2008. package/dist/watch/watch.js +1 -1
  2009. package/dist/webhook/builders/common.d.ts +2 -2
  2010. package/package.json +61 -37
  2011. package/schema/domain-spec.json +310 -8
  2012. package/dist/application-spec/caching/runtime-reference-store.d.ts +0 -50
  2013. package/dist/application-spec/caching/runtime-reference-store.js +0 -1
  2014. package/dist/application-spec/core/components/component-filter.d.ts +0 -53
  2015. package/dist/application-spec/core/components/index.d.ts +0 -2
  2016. package/dist/application-spec/core/expressions/index.d.ts +0 -2
  2017. package/dist/application-spec/core/expressions/relation-expression-params.d.ts +0 -11
  2018. package/dist/application-spec/generate-application/code/templates/nvmrc.d.ts +0 -1
  2019. package/dist/application-spec/generate-application/code/templates/nvmrc.js +0 -2
  2020. package/dist/application-spec/generate-application/code/templates/package-json.d.ts +0 -10
  2021. package/dist/application-spec/generate-application/code/templates/package-json.js +0 -1
  2022. package/dist/application-spec/generate-application/code/templates/skills/phoenix-cli-skill.d.ts +0 -1
  2023. package/dist/application-spec/generate-application/code/templates/skills/phoenix-cli-skill.js +0 -1
  2024. package/dist/application-spec/generate-application/code/templates/skills/phoenix-create-configurator-skill.d.ts +0 -3
  2025. package/dist/application-spec/generate-application/code/templates/skills/phoenix-create-configurator-skill.js +0 -166
  2026. package/dist/application-spec/generate-application/code/templates/skills/phoenix-feedback-skill.d.ts +0 -1
  2027. package/dist/application-spec/generate-application/code/templates/skills/phoenix-feedback-skill.js +0 -54
  2028. package/dist/application-spec/generate-application/code/templates/skills/phoenix-review-skill.d.ts +0 -1
  2029. package/dist/application-spec/generate-application/code/templates/skills/phoenix-review-skill.js +0 -115
  2030. package/dist/application-spec/generate-application/code/templates/skills/phoenix-skill.d.ts +0 -13
  2031. package/dist/application-spec/generate-application/code/templates/skills/phoenix-skill.js +0 -1
  2032. package/dist/application-spec/generate-application/code/templates/skills/phoenix-variants-skill.d.ts +0 -1
  2033. package/dist/application-spec/generate-application/code/templates/skills/phoenix-variants-skill.js +0 -6
  2034. package/dist/application-spec/generate-application/runtime/admin-runtime/admin-model-runtime.d.ts +0 -28
  2035. package/dist/application-spec/generate-application/runtime/admin-runtime/admin-model-runtime.js +0 -1
  2036. package/dist/application-spec/generate-application/runtime/admin-runtime/admin-runtime.d.ts +0 -23
  2037. package/dist/application-spec/generate-application/runtime/admin-runtime/admin-runtime.js +0 -1
  2038. package/dist/application-spec/generate-application/runtime/admin-runtime/states-runtime.d.ts +0 -8
  2039. package/dist/application-spec/generate-application/runtime/application-runtime.d.ts +0 -33
  2040. package/dist/application-spec/generate-application/runtime/application-runtime.js +0 -1
  2041. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-model-runtime.d.ts +0 -30
  2042. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-model-runtime.js +0 -1
  2043. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-runtime.d.ts +0 -32
  2044. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-runtime.js +0 -1
  2045. package/dist/application-spec/generate-application/runtime/configurator-runtime/states-runtime.d.ts +0 -11
  2046. package/dist/application-spec/generate-application/runtime/generate-runtime-instance.d.ts +0 -2
  2047. package/dist/application-spec/generate-application/runtime/generate-runtime-instance.js +0 -1
  2048. package/dist/application-spec/generate-application/runtime/sections/actions-runtime.d.ts +0 -14
  2049. package/dist/application-spec/generate-application/runtime/sections/assistant-runtime.d.ts +0 -10
  2050. package/dist/application-spec/generate-application/runtime/sections/build-sdk-optic.d.ts +0 -7
  2051. package/dist/application-spec/generate-application/runtime/sections/build-sdk-optic.js +0 -1
  2052. package/dist/application-spec/generate-application/runtime/sections/build-user-bound-optic.d.ts +0 -7
  2053. package/dist/application-spec/generate-application/runtime/sections/build-user-bound-optic.js +0 -1
  2054. package/dist/application-spec/generate-application/runtime/sections/component-optic.d.ts +0 -33
  2055. package/dist/application-spec/generate-application/runtime/sections/component-optic.js +0 -1
  2056. package/dist/application-spec/generate-application/runtime/sections/data-runtime.d.ts +0 -13
  2057. package/dist/application-spec/generate-application/runtime/sections/expression-runtime.d.ts +0 -46
  2058. package/dist/application-spec/generate-application/runtime/sections/expression-runtime.js +0 -1
  2059. package/dist/application-spec/generate-application/runtime/sections/generate-memo-eval-plan-runtime.d.ts +0 -29
  2060. package/dist/application-spec/generate-application/runtime/sections/generate-memo-eval-plan-runtime.js +0 -1
  2061. package/dist/application-spec/generate-application/runtime/sections/index.d.ts +0 -10
  2062. package/dist/application-spec/generate-application/runtime/sections/index.js +0 -1
  2063. package/dist/application-spec/generate-application/runtime/sections/preset-runtime.d.ts +0 -20
  2064. package/dist/application-spec/generate-application/runtime/sections/reflection-constants-runtime.d.ts +0 -8
  2065. package/dist/application-spec/generate-application/runtime/sections/reflection-constants-runtime.js +0 -1
  2066. package/dist/application-spec/generate-application/runtime/sections/theme-runtime.d.ts +0 -10
  2067. package/dist/application-spec/generate-application/runtime/sections/transformers-runtime.d.ts +0 -19
  2068. package/dist/application-spec/parse-application-files/spec/components/component-entry.d.ts +0 -90
  2069. package/dist/application-spec/parse-application-files/spec/expressions/expression.d.ts +0 -43
  2070. package/dist/configurator/application-runtime/extensions/systems/assistant-system/browser-details.d.ts +0 -17
  2071. package/dist/configurator/application-runtime/extensions/systems/assistant-system/browser-details.js +0 -1
  2072. package/dist/configurator/common/frontend-analytics.d.ts +0 -48
  2073. package/dist/configurator/common/use-finalize-action.d.ts +0 -27
  2074. package/dist/configurator/common/use-finalize-action.js +0 -1
  2075. package/dist/configurator/configurator-context/ConfiguratorDataProvider.d.ts +0 -2
  2076. package/dist/configurator/configurator-context/ConfiguratorDataProvider.js +0 -1
  2077. package/dist/configurator/configurator-context/IntegrationSubscription.js +0 -1
  2078. package/dist/configurator/configurator-context/LifecycleProviders.js +0 -1
  2079. package/dist/configurator/configurator-context/OnPresetLoadedHandler.js +0 -1
  2080. package/dist/configurator/configurator-context/PresetSelectionProvider.js +0 -1
  2081. package/dist/configurator/configurator-context/configurator-hooks/chat-hooks.d.ts +0 -1
  2082. package/dist/configurator/configurator-context/configurator-hooks/chat-hooks.js +0 -1
  2083. package/dist/configurator/configurator-context/configurator-routing/ConfiguratorRoutingProvider.d.ts +0 -11
  2084. package/dist/configurator/configurator-context/configurator-routing/ConfiguratorRoutingProvider.js +0 -1
  2085. package/dist/configurator/configurator-context/configurator-routing/OnGoToIndexHandler.d.ts +0 -10
  2086. package/dist/configurator/configurator-context/configurator-routing/OnGoToIndexHandler.js +0 -1
  2087. package/dist/configurator/configurator-context/configurator-routing/index.d.ts +0 -2
  2088. package/dist/configurator/configurator-context/configurator-routing/index.js +0 -1
  2089. package/dist/configurator/configurator-context/configurator-routing/use-power-routing-lifecycle.d.ts +0 -9
  2090. package/dist/configurator/configurator-context/configurator-routing/use-power-routing-lifecycle.js +0 -1
  2091. package/dist/configurator/ui/assistant/entity-link/entity-link-target.d.ts +0 -5
  2092. package/dist/configurator/ui/assistant/entity-link/entity-link-target.js +0 -1
  2093. package/dist/configurator/ui/assistant/theme.d.ts +0 -2
  2094. package/dist/configurator/ui/assistant/theme.js +0 -1
  2095. package/dist/configurator/ui/phoenix-layout-elements/language/use-locale-options.d.ts +0 -4
  2096. package/dist/configurator/ui/phoenix-layout-elements/language/use-locale-options.js +0 -1
  2097. package/dist/configurator/ui/phoenix-layout-elements/measurements/use-measurements-visibility.d.ts +0 -4
  2098. package/dist/configurator/ui/phoenix-layout-elements/measurements/use-measurements-visibility.js +0 -1
  2099. package/dist/domain/application/assistant/assistant-manifest.d.ts +0 -71
  2100. package/dist/domain/application/assistant/assistant-resolved-manifest.d.ts +0 -131
  2101. package/dist/domain/available-system-components.d.ts +0 -11
  2102. package/dist/domain/available-system-components.js +0 -1
  2103. package/dist/domain/core/action/action-factory.d.ts +0 -11
  2104. package/dist/domain/domain-builder.d.ts +0 -40
  2105. package/dist/domain/domain-builder.js +0 -1
  2106. package/dist/domain/domain-runtime/errors/implementation-error-collector.d.ts +0 -19
  2107. package/dist/domain/domain-runtime/errors/implementation-error-collector.js +0 -1
  2108. package/dist/domain/domain-runtime/spec/module-checks/element-registration.d.ts +0 -110
  2109. package/dist/domain/domain-runtime/spec/module-checks/element-registration.js +0 -1
  2110. package/dist/domain/domain-runtime/spec/module-checks/index.d.ts +0 -8
  2111. package/dist/domain/domain-runtime/spec/module-checks/index.js +0 -1
  2112. package/dist/domain/domain-runtime/spec/module-checks/project-modules.d.ts +0 -32
  2113. package/dist/domain/domain-runtime/spec/module-checks/project-modules.js +0 -1
  2114. package/dist/domain/domain-runtime/spec/module-checks/resolve-action-modules.d.ts +0 -4
  2115. package/dist/domain/domain-runtime/spec/module-checks/resolve-component-optic-modules.d.ts +0 -4
  2116. package/dist/domain/domain-runtime/spec/module-checks/resolve-expression-modules.d.ts +0 -15
  2117. package/dist/domain/domain-runtime/spec/module-checks/resolve-expression-modules.js +0 -1
  2118. package/dist/domain/domain-runtime/spec/module-checks/resolve-imported-transformers.d.ts +0 -22
  2119. package/dist/domain/domain-runtime/spec/module-checks/resolve-imported-transformers.js +0 -1
  2120. package/dist/domain/domain-runtime/spec/module-checks/resolve-invariant-modules.d.ts +0 -6
  2121. package/dist/domain/extensions/client-side-image.d.ts +0 -14
  2122. package/dist/domain/extensions/client-side-image.js +0 -1
  2123. package/dist/domain/extensions/save-template-thumbnail.d.ts +0 -14
  2124. package/dist/domain/extensions/save-template-thumbnail.js +0 -1
  2125. package/dist/phoenix/commands/generate-project-files.d.ts +0 -6
  2126. package/dist/phoenix/commands/generate-project-files.js +0 -1
  2127. package/dist/phoenix/commands/generated-env-markers.d.ts +0 -7
  2128. package/dist/phoenix/commands/generated-env-markers.js +0 -1
  2129. package/dist/phoenix/services/lingui.d.ts +0 -7
  2130. package/dist/phoenix/services/lingui.js +0 -1
  2131. package/dist/phoenix/services/phoenix-application.d.ts +0 -21
  2132. package/dist/phoenix/services/phoenix-application.js +0 -1
  2133. package/dist/react-sdk/application-runtime/runtime/god-mode.d.ts +0 -19
  2134. package/dist/react-sdk/application-runtime/runtime/god-mode.js +0 -1
  2135. package/dist/react-sdk/loading-state/LoadingStateProvider.d.ts +0 -31
  2136. package/dist/react-sdk/loading-state/LoadingStateProvider.js +0 -1
  2137. package/dist/react-sdk/loading-state/loading-state-manager.d.ts +0 -32
  2138. package/dist/react-sdk/loading-state/loading-state-manager.js +0 -1
  2139. /package/dist/application-spec/{core/expressions/relation-expression-params.js → parse-application-files/spec/expressions/expression-read.js} +0 -0
  2140. /package/dist/{application-spec/parse-application-files/spec/components/component-entry.js → configurator/application-runtime/extensions/systems/assistant-system/assistant-annotation.js} +0 -0
  2141. /package/dist/{application-spec/parse-application-files/spec/expressions/expression.js → configurator/application-runtime/extensions/systems/assistant-system/assistant-image-view.js} +0 -0
  2142. /package/dist/{domain/application/assistant/assistant-manifest.js → configurator/ui/assistant/form-elements/form-element-props.js} +0 -0
  2143. /package/dist/domain/{core/action → domain-runtime}/action-factory.js +0 -0
  2144. /package/dist/{application-spec/core → domain/spec/application}/application-instance.d.ts +0 -0
  2145. /package/dist/{application-spec/core → domain/spec/application}/application-instance.js +0 -0
  2146. /package/dist/{application-spec/core → domain/spec}/components/component-filter.js +0 -0
  2147. /package/dist/{application-spec/core → domain/spec}/components/index.js +0 -0
  2148. /package/dist/{application-spec/core → domain/spec}/components/sdk-code-ref.d.ts +0 -0
  2149. /package/dist/{application-spec/core → domain/spec}/components/sdk-code-ref.js +0 -0
  2150. /package/dist/domain/{domain-runtime → spec}/errors/implementation-error.d.ts +0 -0
  2151. /package/dist/domain/{domain-runtime → spec}/errors/implementation-error.js +0 -0
  2152. /package/dist/domain/{domain-runtime → spec}/errors/implementation-errors.d.ts +0 -0
  2153. /package/dist/domain/{domain-runtime → spec}/errors/implementation-errors.js +0 -0
  2154. /package/dist/domain/{domain-runtime → spec}/errors/index.d.ts +0 -0
  2155. /package/dist/domain/{domain-runtime → spec}/errors/index.js +0 -0
  2156. /package/dist/domain/{domain-runtime → spec}/errors/to-implementation-errors.d.ts +0 -0
  2157. /package/dist/domain/{domain-runtime → spec}/errors/to-implementation-errors.js +0 -0
  2158. /package/dist/{application-spec/core → domain/spec}/expressions/index.js +0 -0
  2159. /package/dist/{application-spec/core → domain/spec}/expressions/sdk-expression-implementation.d.ts +0 -0
  2160. /package/dist/{application-spec/core → domain/spec}/expressions/sdk-expression-implementation.js +0 -0
  2161. /package/dist/{application-spec/parse-application-files/spec/components → domain/spec/markers}/component-prop-target.d.ts +0 -0
  2162. /package/dist/{application-spec/parse-application-files/spec/components → domain/spec/markers}/component-prop-target.js +0 -0
  2163. /package/dist/{application-spec/core → domain/spec}/markers/eval-marker.d.ts +0 -0
  2164. /package/dist/{application-spec/core → domain/spec}/markers/eval-marker.js +0 -0
  2165. /package/dist/domain/{domain-runtime/spec/module-checks → spec/modules}/handler-registration.d.ts +0 -0
  2166. /package/dist/domain/{domain-runtime/spec/module-checks → spec/modules}/handler-registration.js +0 -0
  2167. /package/dist/domain/{domain-runtime/spec/module-checks → spec/modules}/resolve-action-modules.js +0 -0
  2168. /package/dist/domain/{domain-runtime/spec/module-checks → spec/modules}/resolve-component-optic-modules.js +0 -0
  2169. /package/dist/domain/{domain-runtime/spec/module-checks → spec/modules}/resolve-invariant-modules.js +0 -0
  2170. /package/dist/{application-spec/generate-application → domain/spec}/runtime/admin-runtime/states-runtime.js +0 -0
  2171. /package/dist/{application-spec/generate-application → domain/spec}/runtime/configurator-runtime/states-runtime.js +0 -0
  2172. /package/dist/{application-spec/generate-application → domain/spec}/runtime/sections/actions-runtime.js +0 -0
  2173. /package/dist/{application-spec/generate-application → domain/spec}/runtime/sections/assistant-runtime.js +0 -0
  2174. /package/dist/{application-spec/generate-application → domain/spec}/runtime/sections/data-runtime.js +0 -0
  2175. /package/dist/{application-spec/generate-application → domain/spec}/runtime/sections/preset-runtime.js +0 -0
  2176. /package/dist/{application-spec/generate-application → domain/spec}/runtime/sections/theme-runtime.js +0 -0
  2177. /package/dist/{application-spec/generate-application → domain/spec}/runtime/sections/transformers-runtime.js +0 -0
  2178. /package/dist/domain/{application/assistant/assistant-resolved-manifest.js → spec/sections/assistant/assistant-manifest.js} +0 -0
  2179. /package/dist/{configurator/common → react-sdk/application-runtime/common-services/analytics}/frontend-analytics.js +0 -0
  2180. /package/dist/{configurator/configurator-context → react-sdk/domain-application-context}/OnPresetLoadedHandler.d.ts +0 -0
  2181. /package/dist/{configurator/configurator-context → react-sdk/integration}/IntegrationSubscription.d.ts +0 -0
  2182. /package/dist/{configurator/configurator-context → react-sdk/lifecycle-providers}/LifecycleProviders.d.ts +0 -0
  2183. /package/dist/{configurator/configurator-context → react-sdk/preset-selection}/PresetSelectionProvider.d.ts +0 -0
@@ -0,0 +1,2778 @@
1
+ # Fenwick Window
2
+
3
+ Show a made-to-measure product as the drawing a workshop would build it from. A joinery, Fenwick & Lowe, sells timber casement windows to order: the customer sets the overall size, the panes across, a top light, how the sashes open, the glass and the finish, and sees the window as a shop drawing that changes with every input. The drawing has the frame, the mullions and the transom, the sashes with their opening symbols and handles, chains of dimensions in millimetres and a title block with the window's thermal and weight figures. Where a canvas would usually be, the layout draws SVG from the configuration; the spec holds the geometry, the prices and the rules.
4
+
5
+ - [Try it](#try-it)
6
+ - [What the example demonstrates](#what-the-example-demonstrates)
7
+ - [The drawing is the main view](#the-drawing-is-the-main-view)
8
+ - [Geometry from the spec](#geometry-from-the-spec)
9
+ - [Drawing the elevation](#drawing-the-elevation)
10
+ - [Questions that depend on earlier answers](#questions-that-depend-on-earlier-answers)
11
+ - [Rules the drawing shows](#rules-the-drawing-shows)
12
+ - [Add to order](#add-to-order)
13
+ - [On a phone](#on-a-phone)
14
+ - [Test cases](#test-cases)
15
+ - [What this layout leaves out](#what-this-layout-leaves-out)
16
+ - [Related pages](#related-pages)
17
+ - [Complete Implementation](#complete-implementation)
18
+
19
+ ## Try it
20
+
21
+ The phone version is under [On a phone](#on-a-phone).
22
+
23
+ ## What the example demonstrates
24
+
25
+ | Piece | Where |
26
+ | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
27
+ | A `ConfiguratorLayout` whose main view is SVG instead of `LayoutSlots.SharedCanvas` | `DrawingSheet`, [The drawing is the main view](#the-drawing-is-the-main-view) |
28
+ | A geometry expression declared in `expressions:` and read with `phx.frontend.useRootEntityState()` | `$panes`, [Geometry from the spec](#geometry-from-the-spec) |
29
+ | Dimension lines, opening symbols and a title block drawn from the configuration | `ShopDrawing`, `DimensionLine`, `OpeningSymbol`, `TitleBlock` |
30
+ | `$filter.active` with `$eval` on a `genericDimension` and an `attributeSelection` | `MillimetreField`, `SegmentedField`, [Questions that depend on earlier answers](#questions-that-depend-on-earlier-answers) |
31
+ | `warning` invariants shown in the drawing and in the inputs | [Rules the drawing shows](#rules-the-drawing-shows) |
32
+ | `phx.frontend.useFinalizeActions()` for the spec's `order` action | `OrderPanel`, [Add to order](#add-to-order) |
33
+
34
+ ## The drawing is the main view
35
+
36
+ `src/elements/ConfiguratorLayout.tsx` mounts the services and a page, never `LayoutSlots.SharedCanvas`, so no scene loads and the app loader does not wait for one. On a desktop the inputs are a column on the left and the drawing sheet fills the rest; on a phone the sheet stays at the top and the inputs scroll below it.
37
+
38
+ ```tsx
39
+ import { Box } from '@mui/material'
40
+
41
+ import { LayoutSlots } from '@salsita-ai/sdk/configurator'
42
+
43
+ import { DesktopPage } from '../_shared/DesktopPage.js'
44
+ import { PhonePage } from '../_shared/PhonePage.js'
45
+ import { FENWICK } from '../_shared/tokens.js'
46
+
47
+ // A window configurator whose main view is a shop drawing instead of a scene. The layout never mounts
48
+ // `LayoutSlots.SharedCanvas`, so no 3D scene loads; the drawing is SVG that React renders from the configuration.
49
+ const ConfiguratorLayout = () => {
50
+ // `null` until the container has been measured
51
+ const viewports = phx.frontend.useActiveViewports()
52
+ const isDesktop = viewports?.includes('desktop') ?? false
53
+
54
+ return (
55
+ <Box component="div" sx={{ position: 'absolute', inset: 0, overflow: 'clip', bgcolor: FENWICK.paper }}>
56
+ <LayoutSlots.Services />
57
+ {viewports !== null && (isDesktop ? <DesktopPage /> : <PhonePage />)}
58
+ </Box>
59
+ )
60
+ }
61
+
62
+ export default phx.frontend.createCustomPhoenixLayoutElement('ConfiguratorLayout', ConfiguratorLayout)
63
+ ```
64
+
65
+ `DrawingSheet` is the paper: a grid, a ruled double border, the elevation, and the title block along the right edge, or as one row of figures along the bottom on a phone.
66
+
67
+ ```tsx
68
+ import { Box, Typography } from '@mui/material'
69
+
70
+ import { ShopDrawing } from './ShopDrawing.js'
71
+ import { TitleBlock } from './TitleBlock.js'
72
+ import { SHEET } from './sheet-style.js'
73
+
74
+ // The title column gives way to the drawing on a narrow screen
75
+ const TITLE_WIDTH = 'clamp(200px, 26%, 260px)'
76
+ const PHONE_TITLE_HEIGHT = 49
77
+
78
+ interface DrawingSheetProps {
79
+ readonly compact: boolean
80
+ }
81
+
82
+ // The sheet the elevation is drawn on: drafting paper with a grid and a ruled border, the drawing, and the title
83
+ // block, along the right edge on a desktop and as a row of figures along the bottom on a phone
84
+ export const DrawingSheet = ({ compact }: DrawingSheetProps) => {
85
+ const casement = phx.frontend.useRootEntityState()
86
+ const gutter = compact ? 10 : 24
87
+
88
+ return (
89
+ <Box
90
+ component="div"
91
+ sx={{
92
+ position: 'absolute',
93
+ inset: 0,
94
+ bgcolor: SHEET.paper,
95
+ backgroundImage: `linear-gradient(${SHEET.grid} 1px, transparent 1px), linear-gradient(90deg, ${SHEET.grid} 1px, transparent 1px)`,
96
+ backgroundSize: '20px 20px',
97
+ }}
98
+ >
99
+ <Box
100
+ component="div"
101
+ sx={{
102
+ position: 'absolute',
103
+ inset: `${gutter}px`,
104
+ display: 'grid',
105
+ gridTemplateColumns: compact ? 'minmax(0, 1fr)' : `minmax(0, 1fr) ${TITLE_WIDTH}`,
106
+ gridTemplateRows: compact ? `minmax(0, 1fr) ${PHONE_TITLE_HEIGHT}px` : 'minmax(0, 1fr)',
107
+ border: `1.5px solid ${SHEET.ink}`,
108
+ outline: `1px solid ${SHEET.ink}`,
109
+ outlineOffset: 3,
110
+ }}
111
+ >
112
+ <Box
113
+ component="div"
114
+ sx={{ display: 'flex', flexDirection: 'column', gap: 1, minBlockSize: 0, margin: compact ? 0.75 : 3 }}
115
+ >
116
+ {/* The view's name and the sections' face widths, above the drawing so they never crowd it */}
117
+ <Box
118
+ component="div"
119
+ sx={{
120
+ display: 'flex',
121
+ flexWrap: 'wrap',
122
+ justifyContent: 'space-between',
123
+ columnGap: 2,
124
+ fontFamily: SHEET.font,
125
+ }}
126
+ >
127
+ <Typography
128
+ sx={{
129
+ fontFamily: SHEET.font,
130
+ fontSize: compact ? 10 : 12,
131
+ fontWeight: 600,
132
+ letterSpacing: '0.16em',
133
+ color: SHEET.ink,
134
+ }}
135
+ >
136
+ ELEVATION · VIEWED FROM OUTSIDE
137
+ </Typography>
138
+ <Typography sx={{ fontFamily: SHEET.font, fontSize: compact ? 10 : 11, color: SHEET.inkSoft }}>
139
+ FRAME {casement.$frameWidth} · MULLION {casement.$mullionWidth}
140
+ </Typography>
141
+ </Box>
142
+ <Box component="div" sx={{ position: 'relative', flex: 1, minBlockSize: 0 }}>
143
+ <ShopDrawing />
144
+ </Box>
145
+ </Box>
146
+ <Box component="div" sx={compact ? { borderBlockStart: `1px solid ${SHEET.ink}` } : undefined}>
147
+ <TitleBlock compact={compact} />
148
+ </Box>
149
+ </Box>
150
+ </Box>
151
+ )
152
+ }
153
+ ```
154
+
155
+ ## Geometry from the spec
156
+
157
+ Where each pane sits is part of the product, not of the drawing, so it is an expression. `$panes` returns the clear openings inside the frame in millimetres, from the frame's top left corner as seen from outside, with how each pane opens and whether its sash is wider than its hinges carry. Declaring it in `expressions:` gives the layout its type.
158
+
159
+ ```yaml
160
+ expressions:
161
+ Window:
162
+ $panes:
163
+ type: array
164
+ items:
165
+ type: object
166
+ properties:
167
+ key:
168
+ type: string
169
+ x:
170
+ type: number
171
+ y:
172
+ type: number
173
+ width:
174
+ type: number
175
+ height:
176
+ type: number
177
+ opening:
178
+ enum:
179
+ - Fixed
180
+ - SideLeft
181
+ - SideRight
182
+ - TiltLeft
183
+ - TiltRight
184
+ - Top
185
+ oversize:
186
+ type: boolean
187
+ required:
188
+ - key
189
+ - x
190
+ - y
191
+ - width
192
+ - height
193
+ - opening
194
+ - oversize
195
+ additionalProperties: false
196
+ $frameWidth:
197
+ type: number
198
+ $mullionWidth:
199
+ type: number
200
+ $glassArea:
201
+ type: number
202
+ $uValue:
203
+ type: number
204
+ $weightKg:
205
+ type: number
206
+ $glassBuildUp:
207
+ type: string
208
+ $price:
209
+ type: number
210
+ ```
211
+
212
+ The same file computes what the title block and the price need from the panes: the glass area, the window's U-value by the area-weighted method, its weight and its price. A single sash follows the hinge choice, a pair is hung from the outer edges like French casements, and of three panes the outer two open and the middle one is fixed.
213
+
214
+ ```ts
215
+ // Face widths of the timber sections in millimetres, as the drawing shows them
216
+ const FRAME = 68
217
+ const MULLION = 76
218
+
219
+ const LIGHT_COUNT = { One: 1, Two: 2, Three: 3 }
220
+
221
+ // The widest sash each opening type can carry, in millimetres
222
+ const MAX_SASH_WIDTH = { Fixed: Infinity, SideHung: 900, TiltTurn: 1300, TopHung: 1600 }
223
+
224
+ const GLASS = {
225
+ Double: { buildUp: '4 / 16 Ar / 4 low-E', ug: 1.1, kgPerM2: 20, gbpPerM2: 95 },
226
+ Triple: { buildUp: '4 / 12 Ar / 4 / 12 Ar / 4, two low-E', ug: 0.6, kgPerM2: 30, gbpPerM2: 150 },
227
+ Acoustic: { buildUp: '6.8 lam / 16 Ar / 4 low-E', ug: 1.0, kgPerM2: 27, gbpPerM2: 170 },
228
+ }
229
+
230
+ const SASH_PRICE = { Fixed: 0, SideHung: 260, TiltTurn: 340, TopHung: 220 }
231
+ const FINISH_FACTOR = { Oak: 1.18, White: 1, Anthracite: 1.06 }
232
+ // Timber frame and spacer: U-value of the frame and linear loss along the glass edge
233
+ const FRAME_U = 1.3
234
+ const EDGE_PSI = 0.04
235
+
236
+ type PaneOpening = 'Fixed' | 'SideLeft' | 'SideRight' | 'TiltLeft' | 'TiltRight' | 'Top'
237
+
238
+ interface WindowChoices {
239
+ readonly lights: keyof typeof LIGHT_COUNT
240
+ readonly opening: keyof typeof MAX_SASH_WIDTH
241
+ readonly hinge: 'Left' | 'Right'
242
+ }
243
+
244
+ // How the pane at `index` of `count` opens: a single sash follows the hinge choice, a pair is hung from the outer
245
+ // edges like French casements, and of three the outer two open and the middle one is fixed
246
+ const paneOpening = (s: WindowChoices, index: number, count: number): PaneOpening => {
247
+ if (s.opening === 'Fixed') {
248
+ return 'Fixed'
249
+ }
250
+
251
+ if (s.opening === 'TopHung') {
252
+ return 'Top'
253
+ }
254
+
255
+ const prefix = s.opening === 'SideHung' ? 'Side' : 'Tilt'
256
+
257
+ if (count === 1) {
258
+ return s.hinge === 'Left' ? `${prefix}Left` : `${prefix}Right`
259
+ }
260
+
261
+ if (index === 0) {
262
+ return `${prefix}Left`
263
+ }
264
+
265
+ if (index === count - 1) {
266
+ return `${prefix}Right`
267
+ }
268
+
269
+ return 'Fixed'
270
+ }
271
+
272
+ export default phx.domain.implementCustomExpressions({
273
+ Window: {
274
+ $frameWidth: () => {
275
+ return FRAME
276
+ },
277
+ $mullionWidth: () => {
278
+ return MULLION
279
+ },
280
+ // The clear openings inside the frame, from the top left corner of the frame, viewed from outside
281
+ $panes: s => {
282
+ const count = LIGHT_COUNT[s.lights]
283
+ const innerWidth = s.width - 2 * FRAME
284
+ const topLightZone = s.topLight ? s.topLightHeight + MULLION : 0
285
+ const mainHeight = s.height - 2 * FRAME - topLightZone
286
+ const paneWidth = (innerWidth - (count - 1) * MULLION) / count
287
+ const panes = Array.from({ length: count }, (_, index) => {
288
+ const opening = paneOpening(s, index, count)
289
+
290
+ return {
291
+ key: `P${index + 1}`,
292
+ x: FRAME + index * (paneWidth + MULLION),
293
+ y: FRAME + topLightZone,
294
+ width: paneWidth,
295
+ height: mainHeight,
296
+ opening,
297
+ oversize: opening !== 'Fixed' && paneWidth > MAX_SASH_WIDTH[s.opening],
298
+ }
299
+ })
300
+
301
+ if (!s.topLight) {
302
+ return panes
303
+ }
304
+
305
+ // The top light is one fixed pane across the whole width, above the transom
306
+ return [
307
+ {
308
+ key: 'T1',
309
+ x: FRAME,
310
+ y: FRAME,
311
+ width: innerWidth,
312
+ height: s.topLightHeight,
313
+ opening: 'Fixed',
314
+ oversize: false,
315
+ },
316
+ ...panes,
317
+ ]
318
+ },
319
+ $glassArea: s => {
320
+ return s.$panes.reduce((area, pane) => area + (pane.width * pane.height) / 1e6, 0)
321
+ },
322
+ // Uw from the glass, the frame and the glass edge, by the area-weighted method of EN ISO 10077
323
+ $uValue: s => {
324
+ const total = (s.width * s.height) / 1e6
325
+ const frameArea = total - s.$glassArea
326
+ const edge = s.$panes.reduce((length, pane) => length + (2 * (pane.width + pane.height)) / 1000, 0)
327
+
328
+ return (s.$glassArea * GLASS[s.glazing].ug + frameArea * FRAME_U + edge * EDGE_PSI) / total
329
+ },
330
+ $weightKg: s => {
331
+ const frameMetres = (2 * (s.width + s.height)) / 1000
332
+
333
+ return s.$glassArea * GLASS[s.glazing].kgPerM2 + frameMetres * 4.5
334
+ },
335
+ $glassBuildUp: s => {
336
+ return GLASS[s.glazing].buildUp
337
+ },
338
+ $price: s => {
339
+ const frameMetres = (2 * (s.width + s.height)) / 1000
340
+ const sashes = s.$panes.filter(pane => pane.opening !== 'Fixed').length
341
+ const base =
342
+ 180 +
343
+ frameMetres * 85 +
344
+ s.$glassArea * GLASS[s.glazing].gbpPerM2 +
345
+ sashes * SASH_PRICE[s.opening] +
346
+ (s.topLight ? 120 : 0) +
347
+ (s.glazingBars ? 45 * s.$panes.length : 0)
348
+
349
+ return Math.round(base * FINISH_FACTOR[s.finish])
350
+ },
351
+ },
352
+ })
353
+ ```
354
+
355
+ ## Drawing the elevation
356
+
357
+ `ShopDrawing` reads the window with `phx.frontend.useRootEntityState()` and draws it in millimetres. It measures its box and fits the window with room for the dimension tiers, then sizes lines, ticks and lettering in screen pixels, so a 500 mm window and a 2,400 mm one read the same and the proportions follow the configuration.
358
+
359
+ - The frame is one rectangle in the finish's tone; the panes are drawn over it, so what is left between them is the frame, the mullions and the transom.
360
+ - A sash is drawn as a rectangle with its stiles and rails, the glass inset inside it; a fixed pane has only a glazing bead and the word "FIXED". Two short strokes in a corner are the drafting sign for glass, and glazing bars draw a cross.
361
+ - `OpeningSymbol` draws the opening symbol of an elevation viewed from outside: dashed lines whose apex points to the hinged side, a second pair pointing down for the tilt of a tilt-and-turn sash, and the handle on the side that opens.
362
+ - Below the window a chain of pane widths, measured to the mullions' centres, and the overall width; to the left the top light and the main panes, and the overall height.
363
+ - A sash that is too wide is outlined in red and labelled "SASH TOO WIDE".
364
+
365
+ ```tsx
366
+ import { Box } from '@mui/material'
367
+ import { useLayoutEffect, useRef, useState } from 'react'
368
+
369
+ import { DimensionLine } from './DimensionLine.js'
370
+ import { OpeningSymbol } from './OpeningSymbol.js'
371
+ import { SHEET } from './sheet-style.js'
372
+
373
+ // Sash stiles and rails, and the bead that holds a fixed pane, in millimetres
374
+ const SASH = 56
375
+ const BEAD = 14
376
+ const GLAZING_BAR = 26
377
+ // Room around the window for the dimension tiers, in screen pixels
378
+ const TIER = 34
379
+ const MARGIN = { top: 16, right: 16 }
380
+
381
+ interface Size {
382
+ readonly width: number
383
+ readonly height: number
384
+ }
385
+
386
+ // The element's size, measured again whenever it changes
387
+ const useSize = () => {
388
+ const ref = useRef<HTMLDivElement>(null)
389
+ const [size, setSize] = useState<Size | null>(null)
390
+
391
+ useLayoutEffect(() => {
392
+ const element = ref.current
393
+
394
+ if (element === null) {
395
+ return
396
+ }
397
+
398
+ const observer = new ResizeObserver(([entry]) => {
399
+ if (entry) {
400
+ setSize({ width: entry.contentRect.width, height: entry.contentRect.height })
401
+ }
402
+ })
403
+ observer.observe(element)
404
+
405
+ return () => observer.disconnect()
406
+ }, [])
407
+
408
+ return { ref, size }
409
+ }
410
+
411
+ // A rectangle moved in by `by` on every side. A size the spec allows can leave no room, for example three panes across
412
+ // a 500 mm window, so the size never drops below zero; what has no size is not drawn.
413
+ const inset = (rect: { x: number; y: number; width: number; height: number }, by: number) => {
414
+ return {
415
+ x: rect.x + by,
416
+ y: rect.y + by,
417
+ width: Math.max(0, rect.width - 2 * by),
418
+ height: Math.max(0, rect.height - 2 * by),
419
+ }
420
+ }
421
+
422
+ const hasSize = (rect: { width: number; height: number }) => {
423
+ return rect.width > 0 && rect.height > 0
424
+ }
425
+
426
+ // The elevation of the window as configured, drawn in millimetres from the spec's `$panes` expression. The drawing is
427
+ // fitted to its box: lines, ticks and lettering are sized in screen pixels, so a small window and a large one read
428
+ // the same, and its proportions follow the width and height.
429
+ export const ShopDrawing = () => {
430
+ const casement = phx.frontend.useRootEntityState()
431
+ const { ref, size } = useSize()
432
+ const { width: W, height: H, $panes: panes, $mullionWidth: mullion } = casement
433
+ const mainPanes = panes.filter(pane => pane.key.startsWith('P'))
434
+ const topLight = panes.find(pane => pane.key === 'T1')
435
+ const transom = topLight ? topLight.y + topLight.height + mullion / 2 : null
436
+ // A tall top light can leave the main panes no height. They are not drawn then, so neither is a height split
437
+ // over them nor the chain of their widths
438
+ const mainPanesDrawn = mainPanes.some(hasSize)
439
+ const split = mainPanesDrawn ? transom : null
440
+ const chained = mainPanesDrawn && mainPanes.length > 1
441
+ const left = (split !== null ? 2 : 1) * TIER + 18
442
+ const bottom = (chained ? 2 : 1) * TIER + 14
443
+ const timber = SHEET.timber[casement.finish]
444
+
445
+ // Pixels per millimetre: the window and its margins fill the box in its tighter direction
446
+ const scale =
447
+ size === null
448
+ ? 0
449
+ : Math.max(0.01, Math.min((size.width - left - MARGIN.right) / W, (size.height - MARGIN.top - bottom) / H))
450
+ const px = scale > 0 ? 1 / scale : 1
451
+ const viewBox = [-left * px, -MARGIN.top * px, W + (left + MARGIN.right) * px, H + (MARGIN.top + bottom) * px]
452
+ // The chain of pane widths along the bottom, measured to the centres of the mullions
453
+ const chain = [0, ...mainPanes.slice(0, -1).map(pane => pane.x + pane.width + mullion / 2), W]
454
+
455
+ return (
456
+ <Box component="div" ref={ref} sx={{ position: 'absolute', inset: 0 }}>
457
+ {size !== null && scale > 0 && (
458
+ <svg
459
+ viewBox={viewBox.join(' ')}
460
+ width={size.width}
461
+ height={size.height}
462
+ role="img"
463
+ aria-label={`Elevation of a ${W} by ${H} mm window`}
464
+ style={{ display: 'block' }}
465
+ >
466
+ {/* The frame; the openings drawn over it leave the frame, the mullions and the transom */}
467
+ <rect x={0} y={0} width={W} height={H} fill={timber} stroke={SHEET.ink} strokeWidth={2 * px} />
468
+
469
+ {panes.map(pane => {
470
+ const isSash = pane.opening !== 'Fixed'
471
+ const opening = inset(pane, 0)
472
+ const glass = inset(pane, isSash ? SASH : BEAD)
473
+ const outline = pane.oversize ? SHEET.attention : SHEET.ink
474
+
475
+ // A top light can leave the main panes no height at all; the spec's warning says so
476
+ if (!hasSize(opening)) {
477
+ return null
478
+ }
479
+
480
+ return (
481
+ <g key={pane.key}>
482
+ <rect {...opening} fill={isSash ? timber : SHEET.glass} stroke={SHEET.ink} strokeWidth={1.2 * px} />
483
+ {hasSize(glass) && (
484
+ <>
485
+ <rect {...glass} fill={SHEET.glass} stroke={SHEET.glassStroke} strokeWidth={px} />
486
+ {/* Two short strokes in a corner, the drafting sign for glass */}
487
+ <polyline
488
+ points={`${glass.x + glass.width * 0.1},${glass.y + glass.height * 0.28} ${glass.x + glass.width * 0.28},${glass.y + glass.height * 0.1}`}
489
+ stroke={SHEET.glassStroke}
490
+ strokeWidth={1.2 * px}
491
+ fill="none"
492
+ />
493
+ <polyline
494
+ points={`${glass.x + glass.width * 0.1},${glass.y + glass.height * 0.4} ${glass.x + glass.width * 0.4},${glass.y + glass.height * 0.1}`}
495
+ stroke={SHEET.glassStroke}
496
+ strokeWidth={1.2 * px}
497
+ fill="none"
498
+ />
499
+ {casement.glazingBars && (
500
+ <g fill={timber} stroke={SHEET.ink} strokeWidth={px}>
501
+ <rect
502
+ x={glass.x + glass.width / 2 - GLAZING_BAR / 2}
503
+ y={glass.y}
504
+ width={GLAZING_BAR}
505
+ height={glass.height}
506
+ />
507
+ <rect
508
+ x={glass.x}
509
+ y={glass.y + glass.height / 2 - GLAZING_BAR / 2}
510
+ width={glass.width}
511
+ height={GLAZING_BAR}
512
+ />
513
+ </g>
514
+ )}
515
+ <OpeningSymbol
516
+ opening={pane.opening}
517
+ glass={glass}
518
+ sash={opening}
519
+ stile={SASH}
520
+ px={px}
521
+ color={outline}
522
+ />
523
+ </>
524
+ )}
525
+ {pane.oversize && (
526
+ <>
527
+ <rect
528
+ {...inset(pane, -6 * px)}
529
+ fill="none"
530
+ stroke={SHEET.attention}
531
+ strokeWidth={2 * px}
532
+ strokeDasharray={`${6 * px} ${4 * px}`}
533
+ />
534
+ <text
535
+ x={pane.x + pane.width / 2}
536
+ y={pane.y + 30 * px}
537
+ textAnchor="middle"
538
+ fill={SHEET.attention}
539
+ fontFamily={SHEET.font}
540
+ fontSize={12 * px}
541
+ fontWeight={700}
542
+ letterSpacing={px}
543
+ >
544
+ SASH TOO WIDE
545
+ </text>
546
+ </>
547
+ )}
548
+ </g>
549
+ )
550
+ })}
551
+
552
+ {chained &&
553
+ chain
554
+ .slice(1)
555
+ .map((end, index) => (
556
+ <DimensionLine
557
+ key={`chain-${end}`}
558
+ from={chain[index] ?? 0}
559
+ to={end}
560
+ at={H + TIER * px}
561
+ origin={H}
562
+ axis="horizontal"
563
+ px={px}
564
+ />
565
+ ))}
566
+ <DimensionLine from={0} to={W} at={H + (chained ? 2 : 1) * TIER * px} origin={H} axis="horizontal" px={px} />
567
+
568
+ {split !== null && (
569
+ <>
570
+ <DimensionLine from={0} to={split} at={-TIER * px} origin={0} axis="vertical" px={px} />
571
+ <DimensionLine from={split} to={H} at={-TIER * px} origin={0} axis="vertical" px={px} />
572
+ </>
573
+ )}
574
+ <DimensionLine
575
+ from={0}
576
+ to={H}
577
+ at={-(split !== null ? 2 : 1) * TIER * px}
578
+ origin={0}
579
+ axis="vertical"
580
+ px={px}
581
+ />
582
+ </svg>
583
+ )}
584
+ </Box>
585
+ )
586
+ }
587
+ ```
588
+
589
+ `DimensionLine` draws one dimension the way a shop drawing does: extension lines that stop short of the object, a dimension line with an architectural tick at each end, and the length above the line.
590
+
591
+ ```tsx
592
+ import { SHEET } from './sheet-style.js'
593
+
594
+ interface DimensionLineProps {
595
+ // Along the measured axis, in millimetres
596
+ readonly from: number
597
+ readonly to: number
598
+ // Where the dimension line runs across the measured axis, in millimetres
599
+ readonly at: number
600
+ // Where the extension lines start, at the edge of the object, in millimetres
601
+ readonly origin: number
602
+ readonly axis: 'horizontal' | 'vertical'
603
+ // Millimetres per screen pixel, so ticks, gaps and text keep their size at any scale
604
+ readonly px: number
605
+ }
606
+
607
+ // A dimension as a shop drawing draws it: extension lines that stop short of the object, a dimension line between
608
+ // them with an architectural tick at each end, and the length in millimetres above the line
609
+ export const DimensionLine = ({ from, to, at, origin, axis, px }: DimensionLineProps) => {
610
+ const gap = 4 * px
611
+ const overshoot = 5 * px
612
+ const tick = 5 * px
613
+ const direction = at > origin ? 1 : -1
614
+ const label = String(Math.round(Math.abs(to - from)))
615
+ const middle = (from + to) / 2
616
+ // Maps (along, across) to SVG coordinates for the axis
617
+ const point = (along: number, across: number) => (axis === 'horizontal' ? `${along},${across}` : `${across},${along}`)
618
+
619
+ return (
620
+ <g stroke={SHEET.dimension} strokeWidth={px} fill="none">
621
+ <polyline points={`${point(from, origin + direction * gap)} ${point(from, at + direction * overshoot)}`} />
622
+ <polyline points={`${point(to, origin + direction * gap)} ${point(to, at + direction * overshoot)}`} />
623
+ <polyline points={`${point(from - overshoot, at)} ${point(to + overshoot, at)}`} />
624
+ {[from, to].map(end => (
625
+ <polyline
626
+ key={end}
627
+ strokeWidth={1.6 * px}
628
+ points={`${point(end - tick, at + tick)} ${point(end + tick, at - tick)}`}
629
+ />
630
+ ))}
631
+ <text
632
+ x={axis === 'horizontal' ? middle : at - 5 * px}
633
+ y={axis === 'horizontal' ? at - 5 * px : middle}
634
+ transform={axis === 'vertical' ? `rotate(-90 ${at - 5 * px} ${middle})` : undefined}
635
+ textAnchor="middle"
636
+ fill={SHEET.dimension}
637
+ stroke="none"
638
+ fontFamily={SHEET.font}
639
+ fontSize={13 * px}
640
+ fontWeight={500}
641
+ >
642
+ {label}
643
+ </text>
644
+ </g>
645
+ )
646
+ }
647
+ ```
648
+
649
+ ## Questions that depend on earlier answers
650
+
651
+ The hinge side matters only for a single sash that swings sideways, and the top light's height only when there is a top light. Both are spec components with a filter:
652
+
653
+ ```yaml
654
+ components:
655
+ Window:
656
+ genericDimension:
657
+ topLightHeight:
658
+ value:
659
+ $bind: topLightHeight
660
+ min: 250
661
+ max: 700
662
+ unit: mm
663
+ decimalPlaces: 0
664
+ $filter:
665
+ active:
666
+ $eval: self.topLight
667
+ attributeSelection:
668
+ hinge:
669
+ value:
670
+ $bind: hinge
671
+ options:
672
+ - label: Left
673
+ value: Left
674
+ - label: Right
675
+ value: Right
676
+ # A single sash that swings sideways needs a hinge side; paired sashes are hung from the outer edges
677
+ $filter:
678
+ active:
679
+ $eval: self.lights === 'One' && (self.opening === 'SideHung' || self.opening === 'TiltTurn')
680
+ ```
681
+
682
+ `MillimetreField` and `SegmentedField` ask `phx.frontend.useComponent()` for their component and render nothing while it is inactive, because the control hooks throw for an inactive component; [Ardent Compressor](?path=/docs/layouts-gallery-ardent-compressor--docs#questions-that-depend-on-earlier-answers) shows the pattern in full. `MillimetreField` stages each value while the slider moves, so the drawing follows the thumb, and commits it when the thumb is let go, when a typed value is entered or after a 10 mm step.
683
+
684
+ ## Rules the drawing shows
685
+
686
+ A sash wider than its hinges carry would sag, a sash narrower than its two stiles has no room for glass, and a top light can leave too little window below it. All three rules are `warning` invariants: the change is kept, so the drawing shows the problem, the inputs say how to fix it, and the window cannot be ordered until it is fixed. The drawing never draws a negative size: a sash with no room for glass is drawn without glass or symbol, and main panes with no height are left out.
687
+
688
+ ```yaml
689
+ invariants:
690
+ Window:
691
+ sashSize:
692
+ types:
693
+ - sashTooWide
694
+ - sashTooNarrow
695
+ topLightTooTall:
696
+ type: topLightTooTall
697
+ severity: warning
698
+ message: The top light leaves less than 500 mm for the main panes. Lower the top light or raise the window.
699
+ ```
700
+
701
+ ```ts
702
+ const MAX_SASH_WIDTH = { Fixed: Infinity, SideHung: 900, TiltTurn: 1300, TopHung: 1600 }
703
+ const OPENING_LABEL = { Fixed: 'fixed', SideHung: 'side-hung', TiltTurn: 'tilt and turn', TopHung: 'top-hung' }
704
+ const MIN_MAIN_HEIGHT = 500
705
+ // A sash's two stiles are 56 mm each, so a narrower opening leaves no room for glass
706
+ const MIN_SASH_WIDTH = 2 * 56
707
+
708
+ // Both rules are warnings: the drawing keeps the change and marks the problem, and the window cannot be ordered until
709
+ // it is resolved
710
+ export default phx.domain.implementCustomInvariants({
711
+ Window: {
712
+ // A sash wider than its hinges carry would sag, and one narrower than its two stiles has no room for glass; the
713
+ // messages name the limit
714
+ sashSize: s => {
715
+ const oversize = s.$panes.find(pane => pane.oversize)
716
+ const undersize = s.$panes.find(pane => pane.opening !== 'Fixed' && pane.width < MIN_SASH_WIDTH)
717
+
718
+ if (oversize !== undefined) {
719
+ return [
720
+ {
721
+ type: 'sashTooWide',
722
+ severity: 'warning',
723
+ message: `A ${OPENING_LABEL[s.opening]} sash can be at most ${MAX_SASH_WIDTH[s.opening].toLocaleString('en-GB')} mm wide, and these are ${Math.round(oversize.width).toLocaleString('en-GB')} mm. Add a pane across or make the window narrower.`,
724
+ },
725
+ ]
726
+ }
727
+
728
+ if (undersize !== undefined) {
729
+ return [
730
+ {
731
+ type: 'sashTooNarrow',
732
+ severity: 'warning',
733
+ message: `A sash needs at least ${MIN_SASH_WIDTH} mm for its stiles, and these are ${Math.round(undersize.width)} mm. Use fewer panes across or make the window wider.`,
734
+ },
735
+ ]
736
+ }
737
+
738
+ return []
739
+ },
740
+ topLightTooTall: s => {
741
+ return !s.topLight || s.height - 2 * s.$frameWidth - s.topLightHeight - s.$mullionWidth >= MIN_MAIN_HEIGHT
742
+ },
743
+ },
744
+ })
745
+ ```
746
+
747
+ The drawing marks the oversized sashes from `$panes`, whose `oversize` flag the same limit sets. `WindowInputs` shows each warning under the group of inputs that can resolve it, reading it from `phx.frontend.useFinalizeViolations()`, and `OrderPanel` disables **Add to order** with the warning as its hint.
748
+
749
+ ## Add to order
750
+
751
+ The spec declares one finalize action. Its handler, `src/handlers/order-window.ts`, stands in for the joinery's order service: it waits, then enters the `ordered` navigation state. In that state the panel confirms the order and the inputs are locked until **Draw another**. A viewer of a shared configuration sees the price and no button.
752
+
753
+ ```yaml
754
+ components:
755
+ Window:
756
+ price:
757
+ main:
758
+ price:
759
+ $read: $price
760
+ currency: GBP
761
+ finalizeAction:
762
+ order:
763
+ variant: primary
764
+ label: Add to order
765
+ title: Add the window as drawn to your order
766
+ icon: ShoppingBag
767
+ handler: orderWindow
768
+ ```
769
+
770
+ ```tsx
771
+ import { Alert, Box, Button, CircularProgress, Typography } from '@mui/material'
772
+
773
+ import { FENWICK } from './tokens.js'
774
+
775
+ interface OrderPanelProps {
776
+ // On a phone the panel is a bar: the price beside the button, without the figures
777
+ readonly compact: boolean
778
+ }
779
+
780
+ // The price and the spec's `order` finalize action. While a warning holds, the action is `disabled` and its `hints`
781
+ // say why. In the `ordered` navigation state the panel confirms the order instead; a viewer sees the price only.
782
+ export const OrderPanel = ({ compact }: OrderPanelProps) => {
783
+ const casement = phx.frontend.useRootEntityState()
784
+ const price = phx.frontend.useRootEntityPrice()
785
+ const { primary, hints } = phx.frontend.useFinalizeActions()
786
+ const navigationState = phx.frontend.useActiveNavigationState()
787
+ const navigate = phx.frontend.useNavigate()
788
+ const { accessInfo } = phx.frontend.useAccessService()
789
+ const isPending = primary?.isPending ?? false
790
+
791
+ if (navigationState === 'ordered') {
792
+ return (
793
+ <Box component="div" role="status" sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>
794
+ <Box component="div" sx={{ display: 'grid', flex: 1 }}>
795
+ <Typography sx={{ fontFamily: FENWICK.font, fontSize: 18, fontWeight: 600, color: FENWICK.green }}>
796
+ Added to your order
797
+ </Typography>
798
+ <Typography sx={{ fontFamily: FENWICK.font, fontSize: 14, color: FENWICK.muted }}>
799
+ {casement.width} × {casement.height} mm, {price}
800
+ </Typography>
801
+ </Box>
802
+ <Button
803
+ onClick={() => navigate('design')}
804
+ sx={{
805
+ fontFamily: FENWICK.font,
806
+ fontSize: 15,
807
+ color: FENWICK.ink,
808
+ textTransform: 'none',
809
+ textDecoration: 'underline',
810
+ }}
811
+ >
812
+ Draw another
813
+ </Button>
814
+ </Box>
815
+ )
816
+ }
817
+
818
+ const showButton = primary !== null && !accessInfo.viewMode
819
+
820
+ return (
821
+ <Box component="div" sx={{ display: 'grid', gap: 1.25 }}>
822
+ <Box component="div" sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: 2 }}>
823
+ <Box component="div" sx={{ display: 'grid' }}>
824
+ <Typography
825
+ sx={{ fontFamily: FENWICK.font, fontSize: compact ? 22 : 28, fontWeight: 700, color: FENWICK.ink }}
826
+ >
827
+ {price}
828
+ </Typography>
829
+ <Typography sx={{ fontFamily: FENWICK.font, fontSize: 13, color: FENWICK.muted, whiteSpace: 'nowrap' }}>
830
+ {compact
831
+ ? 'incl. VAT'
832
+ : `Uw ${casement.$uValue.toFixed(2)} W/m²K · ${Math.round(casement.$weightKg)} kg · incl. VAT`}
833
+ </Typography>
834
+ </Box>
835
+ {showButton && (
836
+ <Button
837
+ variant="contained"
838
+ disableElevation
839
+ disabled={primary.disabled || isPending}
840
+ onClick={() => void primary.run()}
841
+ title={primary.title}
842
+ startIcon={isPending ? <CircularProgress size={16} color="inherit" /> : undefined}
843
+ sx={{
844
+ minBlockSize: 48,
845
+ paddingInline: 3,
846
+ borderRadius: 1.5,
847
+ bgcolor: FENWICK.green,
848
+ fontFamily: FENWICK.font,
849
+ fontSize: 16,
850
+ fontWeight: 600,
851
+ textTransform: 'none',
852
+ '&:hover': { bgcolor: '#15302a' },
853
+ '&.Mui-disabled': { bgcolor: FENWICK.line, color: FENWICK.muted },
854
+ }}
855
+ >
856
+ {isPending ? 'Adding…' : primary.label}
857
+ </Button>
858
+ )}
859
+ </Box>
860
+ {!compact && showButton && primary.disabled && hints && (
861
+ <Typography sx={{ fontFamily: FENWICK.font, fontSize: 13, color: FENWICK.attention }}>
862
+ Resolve the drawing's warning to order: {hints}
863
+ </Typography>
864
+ )}
865
+ {primary?.error && <Alert severity="error">The window could not be added: {primary.error.message}</Alert>}
866
+ </Box>
867
+ )
868
+ }
869
+ ```
870
+
871
+ ## On a phone
872
+
873
+ The same layout in a frame 390 pixels wide: the drawing keeps the top of the screen with the size, the U-value and the weight below it, the inputs scroll underneath, and the price with **Add to order** is a bar at the bottom. Opened on its own from the sidebar, the **Phone** story sets Storybook's viewport to 390 × 844.
874
+
875
+ ## Test cases
876
+
877
+ - The page opens on a 1400 × 1250 mm two-light window with side-hung sashes hinged at the outer edges: two dashed symbols with their apexes at the outer sides, the handles on the meeting stiles, the pane widths 700 and 700 below, 1400 overall and 1250 at the side. The title block shows Uw 1.30 W/m²K and 50 kg, and the price is **£1,276.00**.
878
+ - A width of 2100 mm outlines both sashes in red with "SASH TOO WIDE", shows "A side-hung sash can be at most 900 mm wide, and these are 944 mm. …" under **Overall size**, and disables **Add to order**.
879
+ - Three panes across clear the warning: the middle pane reads "FIXED", the outer two open, and the chain reads 710, 680 and 710.
880
+ - Three panes across a 500 mm window show "A sash needs at least 112 mm for its stiles, and these are 71 mm. …" under **Overall size**; the outer sashes are drawn without glass or symbol.
881
+ - A 500 mm high window with the 400 mm top light shows the top light warning, and the drawing keeps the top light and leaves out the main panes.
882
+ - **Top light** adds a fixed pane above a transom, the **Top light height** input, and a second tier on the left with the two heights. A top light of 600 mm in a 1250 mm window shows the top light warning under **Panes**; 380 mm clears it.
883
+ - One pane with **Tilt and turn** shows the **Hinged on the** question; **Right** puts the symbol's apex on the right and the handle on the left, with a second pair of lines pointing down for the tilt.
884
+ - **Top-hung** removes the hinge question and points the symbol's apex to the top, with the handle on the bottom rail.
885
+ - An 800 × 1800 mm window draws tall and narrow, with its lettering at the same size as the wide one's.
886
+ - **Triple** glazing lowers the U-value in the title block and raises the price; **Glazing bars** draws a cross of bars in every pane; **Natural oak** tints the frame and changes the title block's finish.
887
+ - The **−** and **+** buttons change a size by 10 mm, a typed size is clamped to the input's range, and a size cleared and left empty gets its value back.
888
+ - **Add to order** shows a spinner and "Adding…", then "Added to your order" with the size and the price; the inputs are locked until **Draw another**.
889
+ - In the **Phone** story the drawing stays at the top while the inputs scroll, the same warning and drawing changes appear, and **Add to order** confirms the order in the bottom bar.
890
+ - The browser console shows no errors, the page has no `canvas` element, and no model or texture is requested.
891
+
892
+ ## What this layout leaves out
893
+
894
+ - **Read mode.** The inputs are inert and **Add to order** is hidden while `phx.frontend.useAccessService().accessInfo.viewMode` is set, but the example ships no read template; [Custom Layout → Serve read mode](?path=/docs/layouts-custom-layout--docs#serve-read-mode) shows one.
895
+ - **Sections and a drawing download.** The sheet shows the elevation only. A section through the frame, or a download of the SVG, is more of the same React code.
896
+ - **The built-in arrangement.** Header, sidebar, footer, tabs and the preview start screen are not mounted; [Layout Slots](?path=/docs/phoenix-layout-slots--docs) lists every slot a project layout can mount.
897
+
898
+ ## Related pages
899
+
900
+ - [Ardent Compressor](?path=/docs/layouts-gallery-ardent-compressor--docs) is a quote form with steps, and [Sunfold Solar](?path=/docs/layouts-gallery-sunfold-solar--docs) a dashboard; neither mounts a canvas either.
901
+ - [Custom Layout](?path=/docs/layouts-custom-layout--docs) explains a project layout step by step.
902
+ - [Configurator Interface → Hooks for a Project Layout](?path=/docs/phoenix-configurator-interface--docs#hooks-for-a-project-layout) lists the hooks used here.
903
+ - [Domain Model → Expressions](?path=/docs/phoenix-domain-model--docs#expressions) describes declared expressions.
904
+
905
+ ## Complete Implementation
906
+
907
+ {/* AUTO-GENERATED SECTION: This section is automatically updated by 'phoenix story build' */}
908
+
909
+ <details>
910
+ <summary>Click to view the complete implementation files</summary>
911
+
912
+ ### ./spec/domain.yaml
913
+
914
+ ```yaml
915
+ model:
916
+ latest:
917
+ entityTypes:
918
+ - Window
919
+ aliases:
920
+ RootEntity:
921
+ - Window
922
+ commonTypes:
923
+ Lights:
924
+ enum:
925
+ - One
926
+ - Two
927
+ - Three
928
+ Opening:
929
+ enum:
930
+ - Fixed
931
+ - SideHung
932
+ - TiltTurn
933
+ - TopHung
934
+ Hinge:
935
+ enum:
936
+ - Left
937
+ - Right
938
+ Glazing:
939
+ enum:
940
+ - Double
941
+ - Triple
942
+ - Acoustic
943
+ Finish:
944
+ enum:
945
+ - Oak
946
+ - White
947
+ - Anthracite
948
+ shapes:
949
+ Window:
950
+ width:
951
+ type: number
952
+ height:
953
+ type: number
954
+ lights:
955
+ $ref: '#/model/latest/commonTypes/Lights'
956
+ topLight:
957
+ type: boolean
958
+ topLightHeight:
959
+ type: number
960
+ opening:
961
+ $ref: '#/model/latest/commonTypes/Opening'
962
+ hinge:
963
+ $ref: '#/model/latest/commonTypes/Hinge'
964
+ glazing:
965
+ $ref: '#/model/latest/commonTypes/Glazing'
966
+ glazingBars:
967
+ type: boolean
968
+ finish:
969
+ $ref: '#/model/latest/commonTypes/Finish'
970
+
971
+ presets:
972
+ - rootEntityType: Window
973
+ initialDomainEntities:
974
+ - id: Window-1
975
+ type: Window
976
+ width: 1400
977
+ height: 1250
978
+ lights: Two
979
+ topLight: false
980
+ topLightHeight: 400
981
+ opening: SideHung
982
+ hinge: Left
983
+ glazing: Double
984
+ glazingBars: false
985
+ finish: White
986
+
987
+ navigationStates:
988
+ - design
989
+ - ordered
990
+
991
+ # The geometry the drawing shows and the figures in its title block: declared here, computed in
992
+ # src/expressions/window.ts from the size, the panes and the opening
993
+ expressions:
994
+ Window:
995
+ $panes:
996
+ type: array
997
+ items:
998
+ type: object
999
+ properties:
1000
+ key:
1001
+ type: string
1002
+ x:
1003
+ type: number
1004
+ y:
1005
+ type: number
1006
+ width:
1007
+ type: number
1008
+ height:
1009
+ type: number
1010
+ opening:
1011
+ enum:
1012
+ - Fixed
1013
+ - SideLeft
1014
+ - SideRight
1015
+ - TiltLeft
1016
+ - TiltRight
1017
+ - Top
1018
+ oversize:
1019
+ type: boolean
1020
+ required:
1021
+ - key
1022
+ - x
1023
+ - y
1024
+ - width
1025
+ - height
1026
+ - opening
1027
+ - oversize
1028
+ additionalProperties: false
1029
+ $frameWidth:
1030
+ type: number
1031
+ $mullionWidth:
1032
+ type: number
1033
+ $glassArea:
1034
+ type: number
1035
+ $uValue:
1036
+ type: number
1037
+ $weightKg:
1038
+ type: number
1039
+ $glassBuildUp:
1040
+ type: string
1041
+ $price:
1042
+ type: number
1043
+
1044
+ invariants:
1045
+ Window:
1046
+ sashSize:
1047
+ types:
1048
+ - sashTooWide
1049
+ - sashTooNarrow
1050
+ topLightTooTall:
1051
+ type: topLightTooTall
1052
+ severity: warning
1053
+ message: The top light leaves less than 500 mm for the main panes. Lower the top light or raise the window.
1054
+
1055
+ components:
1056
+ Window:
1057
+ price:
1058
+ main:
1059
+ price:
1060
+ $read: $price
1061
+ currency: GBP
1062
+ finalizeAction:
1063
+ order:
1064
+ variant: primary
1065
+ label: Add to order
1066
+ title: Add the window as drawn to your order
1067
+ icon: ShoppingBag
1068
+ handler: orderWindow
1069
+ genericDimension:
1070
+ width:
1071
+ value:
1072
+ $bind: width
1073
+ min: 500
1074
+ max: 2400
1075
+ unit: mm
1076
+ decimalPlaces: 0
1077
+ height:
1078
+ value:
1079
+ $bind: height
1080
+ min: 500
1081
+ max: 2200
1082
+ unit: mm
1083
+ decimalPlaces: 0
1084
+ topLightHeight:
1085
+ value:
1086
+ $bind: topLightHeight
1087
+ min: 250
1088
+ max: 700
1089
+ unit: mm
1090
+ decimalPlaces: 0
1091
+ $filter:
1092
+ active:
1093
+ $eval: self.topLight
1094
+ attributeSelection:
1095
+ lights:
1096
+ value:
1097
+ $bind: lights
1098
+ options:
1099
+ - label: '1'
1100
+ value: One
1101
+ - label: '2'
1102
+ value: Two
1103
+ - label: '3'
1104
+ value: Three
1105
+ opening:
1106
+ value:
1107
+ $bind: opening
1108
+ options:
1109
+ - label: Fixed
1110
+ description: Glazed into the frame, does not open
1111
+ value: Fixed
1112
+ - label: Side-hung
1113
+ description: Opens outwards like a door
1114
+ value: SideHung
1115
+ - label: Tilt and turn
1116
+ description: Tilts in to vent, turns in to clean
1117
+ value: TiltTurn
1118
+ - label: Top-hung
1119
+ description: Opens outwards from the top
1120
+ value: TopHung
1121
+ hinge:
1122
+ value:
1123
+ $bind: hinge
1124
+ options:
1125
+ - label: Left
1126
+ value: Left
1127
+ - label: Right
1128
+ value: Right
1129
+ # A single sash that swings sideways needs a hinge side; paired sashes are hung from the outer edges
1130
+ $filter:
1131
+ active:
1132
+ $eval: self.lights === 'One' && (self.opening === 'SideHung' || self.opening === 'TiltTurn')
1133
+ glazing:
1134
+ value:
1135
+ $bind: glazing
1136
+ options:
1137
+ - label: Double
1138
+ description: 4-16-4 argon, low-E
1139
+ value: Double
1140
+ - label: Triple
1141
+ description: 4-12-4-12-4 argon, two low-E
1142
+ value: Triple
1143
+ - label: Acoustic
1144
+ description: 6.8 laminated, 16 argon, 4
1145
+ value: Acoustic
1146
+ finish:
1147
+ value:
1148
+ $bind: finish
1149
+ options:
1150
+ - label: Natural oak
1151
+ value: Oak
1152
+ - label: Pure white
1153
+ description: RAL 9016
1154
+ value: White
1155
+ - label: Anthracite
1156
+ description: RAL 7016
1157
+ value: Anthracite
1158
+ attributeSwitch:
1159
+ topLight:
1160
+ value:
1161
+ $bind: topLight
1162
+ glazingBars:
1163
+ value:
1164
+ $bind: glazingBars
1165
+ ```
1166
+
1167
+ ### ./src/\_drawing/DimensionLine.tsx
1168
+
1169
+ ```tsx
1170
+ import { SHEET } from './sheet-style.js'
1171
+
1172
+ interface DimensionLineProps {
1173
+ // Along the measured axis, in millimetres
1174
+ readonly from: number
1175
+ readonly to: number
1176
+ // Where the dimension line runs across the measured axis, in millimetres
1177
+ readonly at: number
1178
+ // Where the extension lines start, at the edge of the object, in millimetres
1179
+ readonly origin: number
1180
+ readonly axis: 'horizontal' | 'vertical'
1181
+ // Millimetres per screen pixel, so ticks, gaps and text keep their size at any scale
1182
+ readonly px: number
1183
+ }
1184
+
1185
+ // A dimension as a shop drawing draws it: extension lines that stop short of the object, a dimension line between
1186
+ // them with an architectural tick at each end, and the length in millimetres above the line
1187
+ export const DimensionLine = ({ from, to, at, origin, axis, px }: DimensionLineProps) => {
1188
+ const gap = 4 * px
1189
+ const overshoot = 5 * px
1190
+ const tick = 5 * px
1191
+ const direction = at > origin ? 1 : -1
1192
+ const label = String(Math.round(Math.abs(to - from)))
1193
+ const middle = (from + to) / 2
1194
+ // Maps (along, across) to SVG coordinates for the axis
1195
+ const point = (along: number, across: number) => (axis === 'horizontal' ? `${along},${across}` : `${across},${along}`)
1196
+
1197
+ return (
1198
+ <g stroke={SHEET.dimension} strokeWidth={px} fill="none">
1199
+ <polyline points={`${point(from, origin + direction * gap)} ${point(from, at + direction * overshoot)}`} />
1200
+ <polyline points={`${point(to, origin + direction * gap)} ${point(to, at + direction * overshoot)}`} />
1201
+ <polyline points={`${point(from - overshoot, at)} ${point(to + overshoot, at)}`} />
1202
+ {[from, to].map(end => (
1203
+ <polyline
1204
+ key={end}
1205
+ strokeWidth={1.6 * px}
1206
+ points={`${point(end - tick, at + tick)} ${point(end + tick, at - tick)}`}
1207
+ />
1208
+ ))}
1209
+ <text
1210
+ x={axis === 'horizontal' ? middle : at - 5 * px}
1211
+ y={axis === 'horizontal' ? at - 5 * px : middle}
1212
+ transform={axis === 'vertical' ? `rotate(-90 ${at - 5 * px} ${middle})` : undefined}
1213
+ textAnchor="middle"
1214
+ fill={SHEET.dimension}
1215
+ stroke="none"
1216
+ fontFamily={SHEET.font}
1217
+ fontSize={13 * px}
1218
+ fontWeight={500}
1219
+ >
1220
+ {label}
1221
+ </text>
1222
+ </g>
1223
+ )
1224
+ }
1225
+ ```
1226
+
1227
+ ### ./src/\_drawing/DrawingSheet.tsx
1228
+
1229
+ ```tsx
1230
+ import { Box, Typography } from '@mui/material'
1231
+
1232
+ import { ShopDrawing } from './ShopDrawing.js'
1233
+ import { TitleBlock } from './TitleBlock.js'
1234
+ import { SHEET } from './sheet-style.js'
1235
+
1236
+ // The title column gives way to the drawing on a narrow screen
1237
+ const TITLE_WIDTH = 'clamp(200px, 26%, 260px)'
1238
+ const PHONE_TITLE_HEIGHT = 49
1239
+
1240
+ interface DrawingSheetProps {
1241
+ readonly compact: boolean
1242
+ }
1243
+
1244
+ // The sheet the elevation is drawn on: drafting paper with a grid and a ruled border, the drawing, and the title
1245
+ // block, along the right edge on a desktop and as a row of figures along the bottom on a phone
1246
+ export const DrawingSheet = ({ compact }: DrawingSheetProps) => {
1247
+ const casement = phx.frontend.useRootEntityState()
1248
+ const gutter = compact ? 10 : 24
1249
+
1250
+ return (
1251
+ <Box
1252
+ component="div"
1253
+ sx={{
1254
+ position: 'absolute',
1255
+ inset: 0,
1256
+ bgcolor: SHEET.paper,
1257
+ backgroundImage: `linear-gradient(${SHEET.grid} 1px, transparent 1px), linear-gradient(90deg, ${SHEET.grid} 1px, transparent 1px)`,
1258
+ backgroundSize: '20px 20px',
1259
+ }}
1260
+ >
1261
+ <Box
1262
+ component="div"
1263
+ sx={{
1264
+ position: 'absolute',
1265
+ inset: `${gutter}px`,
1266
+ display: 'grid',
1267
+ gridTemplateColumns: compact ? 'minmax(0, 1fr)' : `minmax(0, 1fr) ${TITLE_WIDTH}`,
1268
+ gridTemplateRows: compact ? `minmax(0, 1fr) ${PHONE_TITLE_HEIGHT}px` : 'minmax(0, 1fr)',
1269
+ border: `1.5px solid ${SHEET.ink}`,
1270
+ outline: `1px solid ${SHEET.ink}`,
1271
+ outlineOffset: 3,
1272
+ }}
1273
+ >
1274
+ <Box
1275
+ component="div"
1276
+ sx={{ display: 'flex', flexDirection: 'column', gap: 1, minBlockSize: 0, margin: compact ? 0.75 : 3 }}
1277
+ >
1278
+ {/* The view's name and the sections' face widths, above the drawing so they never crowd it */}
1279
+ <Box
1280
+ component="div"
1281
+ sx={{
1282
+ display: 'flex',
1283
+ flexWrap: 'wrap',
1284
+ justifyContent: 'space-between',
1285
+ columnGap: 2,
1286
+ fontFamily: SHEET.font,
1287
+ }}
1288
+ >
1289
+ <Typography
1290
+ sx={{
1291
+ fontFamily: SHEET.font,
1292
+ fontSize: compact ? 10 : 12,
1293
+ fontWeight: 600,
1294
+ letterSpacing: '0.16em',
1295
+ color: SHEET.ink,
1296
+ }}
1297
+ >
1298
+ ELEVATION · VIEWED FROM OUTSIDE
1299
+ </Typography>
1300
+ <Typography sx={{ fontFamily: SHEET.font, fontSize: compact ? 10 : 11, color: SHEET.inkSoft }}>
1301
+ FRAME {casement.$frameWidth} · MULLION {casement.$mullionWidth}
1302
+ </Typography>
1303
+ </Box>
1304
+ <Box component="div" sx={{ position: 'relative', flex: 1, minBlockSize: 0 }}>
1305
+ <ShopDrawing />
1306
+ </Box>
1307
+ </Box>
1308
+ <Box component="div" sx={compact ? { borderBlockStart: `1px solid ${SHEET.ink}` } : undefined}>
1309
+ <TitleBlock compact={compact} />
1310
+ </Box>
1311
+ </Box>
1312
+ </Box>
1313
+ )
1314
+ }
1315
+ ```
1316
+
1317
+ ### ./src/\_drawing/OpeningSymbol.tsx
1318
+
1319
+ ```tsx
1320
+ import { SHEET } from './sheet-style.js'
1321
+
1322
+ type PaneOpening = 'Fixed' | 'SideLeft' | 'SideRight' | 'TiltLeft' | 'TiltRight' | 'Top'
1323
+
1324
+ interface Rect {
1325
+ readonly x: number
1326
+ readonly y: number
1327
+ readonly width: number
1328
+ readonly height: number
1329
+ }
1330
+
1331
+ interface OpeningSymbolProps {
1332
+ readonly opening: PaneOpening
1333
+ // The glass the lines are drawn across, and the sash whose stile carries the handle, in millimetres
1334
+ readonly glass: Rect
1335
+ readonly sash: Rect
1336
+ // The width of the sash's stiles and rails
1337
+ readonly stile: number
1338
+ readonly px: number
1339
+ readonly color: string
1340
+ }
1341
+
1342
+ // The opening symbol of an elevation viewed from outside: dashed lines whose apex points to the hinged side, a second
1343
+ // pair pointing down for the tilt of a tilt-and-turn sash, and the handle on the side that opens. A fixed light is
1344
+ // marked "FIXED".
1345
+ export const OpeningSymbol = ({ opening, glass, sash, stile, px, color }: OpeningSymbolProps) => {
1346
+ const { x, y, width, height } = glass
1347
+ const right = x + width
1348
+ const bottom = y + height
1349
+ const midX = x + width / 2
1350
+ const midY = y + height / 2
1351
+ const dash = `${8 * px} ${5 * px}`
1352
+ const handleLength = Math.max(0, Math.min(120, height / 3))
1353
+ const handleWidth = Math.max(0, Math.min(16, stile / 2))
1354
+
1355
+ if (opening === 'Fixed') {
1356
+ return (
1357
+ <text
1358
+ x={midX}
1359
+ y={midY}
1360
+ textAnchor="middle"
1361
+ dominantBaseline="middle"
1362
+ fill={SHEET.inkSoft}
1363
+ fontFamily={SHEET.font}
1364
+ fontSize={11 * px}
1365
+ letterSpacing={2 * px}
1366
+ >
1367
+ FIXED
1368
+ </text>
1369
+ )
1370
+ }
1371
+
1372
+ const hingeLeft = opening === 'SideLeft' || opening === 'TiltLeft'
1373
+ const sideLines =
1374
+ opening === 'Top'
1375
+ ? `${x},${bottom} ${midX},${y} ${right},${bottom}`
1376
+ : hingeLeft
1377
+ ? `${right},${y} ${x},${midY} ${right},${bottom}`
1378
+ : `${x},${y} ${right},${midY} ${x},${bottom}`
1379
+ const tiltLines =
1380
+ opening === 'TiltLeft' || opening === 'TiltRight' ? `${x},${y} ${midX},${bottom} ${right},${y}` : null
1381
+ // The handle sits opposite the hinges: on the free side, or at the bottom of a top-hung sash
1382
+ const handle =
1383
+ opening === 'Top'
1384
+ ? {
1385
+ x: midX - handleLength / 2,
1386
+ y: sash.y + sash.height - (stile + handleWidth) / 2,
1387
+ width: handleLength,
1388
+ height: handleWidth,
1389
+ }
1390
+ : {
1391
+ x: hingeLeft ? sash.x + sash.width - (stile + handleWidth) / 2 : sash.x + (stile - handleWidth) / 2,
1392
+ y: midY - handleLength / 2,
1393
+ width: handleWidth,
1394
+ height: handleLength,
1395
+ }
1396
+
1397
+ return (
1398
+ <g>
1399
+ <polyline points={sideLines} fill="none" stroke={color} strokeWidth={1.2 * px} strokeDasharray={dash} />
1400
+ {tiltLines && (
1401
+ <polyline points={tiltLines} fill="none" stroke={color} strokeWidth={1.2 * px} strokeDasharray={dash} />
1402
+ )}
1403
+ {handleLength > 0 && (
1404
+ <rect {...handle} rx={handleWidth / 2} fill={SHEET.paper} stroke={SHEET.ink} strokeWidth={1.4 * px} />
1405
+ )}
1406
+ </g>
1407
+ )
1408
+ }
1409
+ ```
1410
+
1411
+ ### ./src/\_drawing/ShopDrawing.tsx
1412
+
1413
+ ```tsx
1414
+ import { Box } from '@mui/material'
1415
+ import { useLayoutEffect, useRef, useState } from 'react'
1416
+
1417
+ import { DimensionLine } from './DimensionLine.js'
1418
+ import { OpeningSymbol } from './OpeningSymbol.js'
1419
+ import { SHEET } from './sheet-style.js'
1420
+
1421
+ // Sash stiles and rails, and the bead that holds a fixed pane, in millimetres
1422
+ const SASH = 56
1423
+ const BEAD = 14
1424
+ const GLAZING_BAR = 26
1425
+ // Room around the window for the dimension tiers, in screen pixels
1426
+ const TIER = 34
1427
+ const MARGIN = { top: 16, right: 16 }
1428
+
1429
+ interface Size {
1430
+ readonly width: number
1431
+ readonly height: number
1432
+ }
1433
+
1434
+ // The element's size, measured again whenever it changes
1435
+ const useSize = () => {
1436
+ const ref = useRef<HTMLDivElement>(null)
1437
+ const [size, setSize] = useState<Size | null>(null)
1438
+
1439
+ useLayoutEffect(() => {
1440
+ const element = ref.current
1441
+
1442
+ if (element === null) {
1443
+ return
1444
+ }
1445
+
1446
+ const observer = new ResizeObserver(([entry]) => {
1447
+ if (entry) {
1448
+ setSize({ width: entry.contentRect.width, height: entry.contentRect.height })
1449
+ }
1450
+ })
1451
+ observer.observe(element)
1452
+
1453
+ return () => observer.disconnect()
1454
+ }, [])
1455
+
1456
+ return { ref, size }
1457
+ }
1458
+
1459
+ // A rectangle moved in by `by` on every side. A size the spec allows can leave no room, for example three panes across
1460
+ // a 500 mm window, so the size never drops below zero; what has no size is not drawn.
1461
+ const inset = (rect: { x: number; y: number; width: number; height: number }, by: number) => {
1462
+ return {
1463
+ x: rect.x + by,
1464
+ y: rect.y + by,
1465
+ width: Math.max(0, rect.width - 2 * by),
1466
+ height: Math.max(0, rect.height - 2 * by),
1467
+ }
1468
+ }
1469
+
1470
+ const hasSize = (rect: { width: number; height: number }) => {
1471
+ return rect.width > 0 && rect.height > 0
1472
+ }
1473
+
1474
+ // The elevation of the window as configured, drawn in millimetres from the spec's `$panes` expression. The drawing is
1475
+ // fitted to its box: lines, ticks and lettering are sized in screen pixels, so a small window and a large one read
1476
+ // the same, and its proportions follow the width and height.
1477
+ export const ShopDrawing = () => {
1478
+ const casement = phx.frontend.useRootEntityState()
1479
+ const { ref, size } = useSize()
1480
+ const { width: W, height: H, $panes: panes, $mullionWidth: mullion } = casement
1481
+ const mainPanes = panes.filter(pane => pane.key.startsWith('P'))
1482
+ const topLight = panes.find(pane => pane.key === 'T1')
1483
+ const transom = topLight ? topLight.y + topLight.height + mullion / 2 : null
1484
+ // A tall top light can leave the main panes no height. They are not drawn then, so neither is a height split
1485
+ // over them nor the chain of their widths
1486
+ const mainPanesDrawn = mainPanes.some(hasSize)
1487
+ const split = mainPanesDrawn ? transom : null
1488
+ const chained = mainPanesDrawn && mainPanes.length > 1
1489
+ const left = (split !== null ? 2 : 1) * TIER + 18
1490
+ const bottom = (chained ? 2 : 1) * TIER + 14
1491
+ const timber = SHEET.timber[casement.finish]
1492
+
1493
+ // Pixels per millimetre: the window and its margins fill the box in its tighter direction
1494
+ const scale =
1495
+ size === null
1496
+ ? 0
1497
+ : Math.max(0.01, Math.min((size.width - left - MARGIN.right) / W, (size.height - MARGIN.top - bottom) / H))
1498
+ const px = scale > 0 ? 1 / scale : 1
1499
+ const viewBox = [-left * px, -MARGIN.top * px, W + (left + MARGIN.right) * px, H + (MARGIN.top + bottom) * px]
1500
+ // The chain of pane widths along the bottom, measured to the centres of the mullions
1501
+ const chain = [0, ...mainPanes.slice(0, -1).map(pane => pane.x + pane.width + mullion / 2), W]
1502
+
1503
+ return (
1504
+ <Box component="div" ref={ref} sx={{ position: 'absolute', inset: 0 }}>
1505
+ {size !== null && scale > 0 && (
1506
+ <svg
1507
+ viewBox={viewBox.join(' ')}
1508
+ width={size.width}
1509
+ height={size.height}
1510
+ role="img"
1511
+ aria-label={`Elevation of a ${W} by ${H} mm window`}
1512
+ style={{ display: 'block' }}
1513
+ >
1514
+ {/* The frame; the openings drawn over it leave the frame, the mullions and the transom */}
1515
+ <rect x={0} y={0} width={W} height={H} fill={timber} stroke={SHEET.ink} strokeWidth={2 * px} />
1516
+
1517
+ {panes.map(pane => {
1518
+ const isSash = pane.opening !== 'Fixed'
1519
+ const opening = inset(pane, 0)
1520
+ const glass = inset(pane, isSash ? SASH : BEAD)
1521
+ const outline = pane.oversize ? SHEET.attention : SHEET.ink
1522
+
1523
+ // A top light can leave the main panes no height at all; the spec's warning says so
1524
+ if (!hasSize(opening)) {
1525
+ return null
1526
+ }
1527
+
1528
+ return (
1529
+ <g key={pane.key}>
1530
+ <rect {...opening} fill={isSash ? timber : SHEET.glass} stroke={SHEET.ink} strokeWidth={1.2 * px} />
1531
+ {hasSize(glass) && (
1532
+ <>
1533
+ <rect {...glass} fill={SHEET.glass} stroke={SHEET.glassStroke} strokeWidth={px} />
1534
+ {/* Two short strokes in a corner, the drafting sign for glass */}
1535
+ <polyline
1536
+ points={`${glass.x + glass.width * 0.1},${glass.y + glass.height * 0.28} ${glass.x + glass.width * 0.28},${glass.y + glass.height * 0.1}`}
1537
+ stroke={SHEET.glassStroke}
1538
+ strokeWidth={1.2 * px}
1539
+ fill="none"
1540
+ />
1541
+ <polyline
1542
+ points={`${glass.x + glass.width * 0.1},${glass.y + glass.height * 0.4} ${glass.x + glass.width * 0.4},${glass.y + glass.height * 0.1}`}
1543
+ stroke={SHEET.glassStroke}
1544
+ strokeWidth={1.2 * px}
1545
+ fill="none"
1546
+ />
1547
+ {casement.glazingBars && (
1548
+ <g fill={timber} stroke={SHEET.ink} strokeWidth={px}>
1549
+ <rect
1550
+ x={glass.x + glass.width / 2 - GLAZING_BAR / 2}
1551
+ y={glass.y}
1552
+ width={GLAZING_BAR}
1553
+ height={glass.height}
1554
+ />
1555
+ <rect
1556
+ x={glass.x}
1557
+ y={glass.y + glass.height / 2 - GLAZING_BAR / 2}
1558
+ width={glass.width}
1559
+ height={GLAZING_BAR}
1560
+ />
1561
+ </g>
1562
+ )}
1563
+ <OpeningSymbol
1564
+ opening={pane.opening}
1565
+ glass={glass}
1566
+ sash={opening}
1567
+ stile={SASH}
1568
+ px={px}
1569
+ color={outline}
1570
+ />
1571
+ </>
1572
+ )}
1573
+ {pane.oversize && (
1574
+ <>
1575
+ <rect
1576
+ {...inset(pane, -6 * px)}
1577
+ fill="none"
1578
+ stroke={SHEET.attention}
1579
+ strokeWidth={2 * px}
1580
+ strokeDasharray={`${6 * px} ${4 * px}`}
1581
+ />
1582
+ <text
1583
+ x={pane.x + pane.width / 2}
1584
+ y={pane.y + 30 * px}
1585
+ textAnchor="middle"
1586
+ fill={SHEET.attention}
1587
+ fontFamily={SHEET.font}
1588
+ fontSize={12 * px}
1589
+ fontWeight={700}
1590
+ letterSpacing={px}
1591
+ >
1592
+ SASH TOO WIDE
1593
+ </text>
1594
+ </>
1595
+ )}
1596
+ </g>
1597
+ )
1598
+ })}
1599
+
1600
+ {chained &&
1601
+ chain
1602
+ .slice(1)
1603
+ .map((end, index) => (
1604
+ <DimensionLine
1605
+ key={`chain-${end}`}
1606
+ from={chain[index] ?? 0}
1607
+ to={end}
1608
+ at={H + TIER * px}
1609
+ origin={H}
1610
+ axis="horizontal"
1611
+ px={px}
1612
+ />
1613
+ ))}
1614
+ <DimensionLine from={0} to={W} at={H + (chained ? 2 : 1) * TIER * px} origin={H} axis="horizontal" px={px} />
1615
+
1616
+ {split !== null && (
1617
+ <>
1618
+ <DimensionLine from={0} to={split} at={-TIER * px} origin={0} axis="vertical" px={px} />
1619
+ <DimensionLine from={split} to={H} at={-TIER * px} origin={0} axis="vertical" px={px} />
1620
+ </>
1621
+ )}
1622
+ <DimensionLine
1623
+ from={0}
1624
+ to={H}
1625
+ at={-(split !== null ? 2 : 1) * TIER * px}
1626
+ origin={0}
1627
+ axis="vertical"
1628
+ px={px}
1629
+ />
1630
+ </svg>
1631
+ )}
1632
+ </Box>
1633
+ )
1634
+ }
1635
+ ```
1636
+
1637
+ ### ./src/\_drawing/TitleBlock.tsx
1638
+
1639
+ ```tsx
1640
+ import { Box, Typography } from '@mui/material'
1641
+
1642
+ import { SHEET } from './sheet-style.js'
1643
+
1644
+ const FINISH_LABEL = { Oak: 'Natural oak, oiled', White: 'Pure white, RAL 9016', Anthracite: 'Anthracite, RAL 7016' }
1645
+ const LIGHTS_LABEL = { One: 'single', Two: 'two-light', Three: 'three-light' }
1646
+ const NOTES = [
1647
+ 'Dimensions in millimetres, overall frame size.',
1648
+ 'Opening symbols: the apex points to the hinges.',
1649
+ 'Do not scale; work to figured dimensions.',
1650
+ ]
1651
+
1652
+ const LABEL_SX = {
1653
+ fontFamily: SHEET.font,
1654
+ fontSize: 9,
1655
+ letterSpacing: '0.14em',
1656
+ textTransform: 'uppercase',
1657
+ color: SHEET.inkSoft,
1658
+ } as const
1659
+
1660
+ interface CellProps {
1661
+ readonly label: string
1662
+ readonly value: string
1663
+ readonly span?: number
1664
+ }
1665
+
1666
+ const Cell = ({ label, value, span = 1 }: CellProps) => {
1667
+ return (
1668
+ <Box
1669
+ component="div"
1670
+ sx={{
1671
+ display: 'grid',
1672
+ alignContent: 'start',
1673
+ gap: 0.25,
1674
+ gridColumn: `span ${span}`,
1675
+ paddingInline: 1,
1676
+ paddingBlock: 0.75,
1677
+ borderInlineStart: `1px solid ${SHEET.ink}`,
1678
+ borderBlockStart: `1px solid ${SHEET.ink}`,
1679
+ }}
1680
+ >
1681
+ <Typography sx={LABEL_SX}>{label}</Typography>
1682
+ <Typography
1683
+ sx={{
1684
+ fontFamily: SHEET.font,
1685
+ fontSize: 13,
1686
+ fontWeight: 500,
1687
+ color: SHEET.ink,
1688
+ fontVariantNumeric: 'tabular-nums',
1689
+ }}
1690
+ >
1691
+ {value}
1692
+ </Typography>
1693
+ </Box>
1694
+ )
1695
+ }
1696
+
1697
+ interface TitleBlockProps {
1698
+ readonly compact: boolean
1699
+ }
1700
+
1701
+ // The drawing's title block, filled from the configuration: the size, the glass build-up and the thermal and weight
1702
+ // figures that the spec's expressions compute. On a desktop it is a column along the sheet's right edge with the
1703
+ // notes at its foot; a compact block is one row of figures, for a phone.
1704
+ export const TitleBlock = ({ compact }: TitleBlockProps) => {
1705
+ const casement = phx.frontend.useRootEntityState()
1706
+ const configurationId = phx.frontend.useConfigurationId()
1707
+ const drawingNumber = `FL-${String(configurationId)
1708
+ .replace(/[^a-z0-9]/gi, '')
1709
+ .slice(-5)
1710
+ .toUpperCase()}`
1711
+ const figures = [
1712
+ { label: 'Size', value: `${casement.width} × ${casement.height} mm` },
1713
+ { label: 'Uw', value: `${casement.$uValue.toFixed(2)} W/m²K` },
1714
+ { label: 'Weight', value: `${Math.round(casement.$weightKg)} kg` },
1715
+ ]
1716
+
1717
+ if (compact) {
1718
+ return (
1719
+ <Box component="div" sx={{ display: 'grid', gridTemplateColumns: 'repeat(3, 1fr)', bgcolor: SHEET.paper }}>
1720
+ {figures.map(figure => (
1721
+ <Cell key={figure.label} label={figure.label} value={figure.value} />
1722
+ ))}
1723
+ </Box>
1724
+ )
1725
+ }
1726
+
1727
+ return (
1728
+ <Box
1729
+ component="div"
1730
+ sx={{
1731
+ display: 'grid',
1732
+ gridTemplateColumns: '1fr 1fr',
1733
+ // The notes take the rest of the column, so its ruled edge runs down to the border
1734
+ gridTemplateRows: 'repeat(8, auto) 1fr',
1735
+ blockSize: '100%',
1736
+ bgcolor: SHEET.paper,
1737
+ }}
1738
+ >
1739
+ <Box
1740
+ component="div"
1741
+ sx={{
1742
+ gridColumn: 'span 2',
1743
+ display: 'grid',
1744
+ gap: 0.25,
1745
+ padding: 1.25,
1746
+ borderInlineStart: `1px solid ${SHEET.ink}`,
1747
+ }}
1748
+ >
1749
+ <Typography
1750
+ sx={{ fontFamily: SHEET.font, fontSize: 17, fontWeight: 700, letterSpacing: '0.2em', color: SHEET.ink }}
1751
+ >
1752
+ FENWICK &amp; LOWE
1753
+ </Typography>
1754
+ <Typography sx={{ ...LABEL_SX, fontSize: 10 }}>Joinery · Frome, Somerset</Typography>
1755
+ </Box>
1756
+ <Cell label="Title" value={`Casement window, ${LIGHTS_LABEL[casement.lights]}`} span={2} />
1757
+ <Cell label="Drawing" value={drawingNumber} />
1758
+ <Cell label="Revision" value="A" />
1759
+ {figures.map(figure => (
1760
+ <Cell key={figure.label} label={figure.label} value={figure.value} span={figure.label === 'Size' ? 2 : 1} />
1761
+ ))}
1762
+ <Cell label="Glazing" value={casement.$glassBuildUp} span={2} />
1763
+ <Cell label="Finish" value={FINISH_LABEL[casement.finish]} span={2} />
1764
+ <Cell label="Scale" value="Not to scale" span={2} />
1765
+ <Box
1766
+ component="ol"
1767
+ sx={{
1768
+ gridColumn: 'span 2',
1769
+ display: 'grid',
1770
+ alignContent: 'start',
1771
+ gap: 0.5,
1772
+ margin: 0,
1773
+ padding: 1.25,
1774
+ paddingInlineStart: 3.5,
1775
+ borderInlineStart: `1px solid ${SHEET.ink}`,
1776
+ borderBlockStart: `1px solid ${SHEET.ink}`,
1777
+ }}
1778
+ >
1779
+ {NOTES.map(note => (
1780
+ <Typography
1781
+ component="li"
1782
+ key={note}
1783
+ sx={{ fontFamily: SHEET.font, fontSize: 12, lineHeight: 1.35, color: SHEET.inkSoft }}
1784
+ >
1785
+ {note}
1786
+ </Typography>
1787
+ ))}
1788
+ </Box>
1789
+ </Box>
1790
+ )
1791
+ }
1792
+ ```
1793
+
1794
+ ### ./src/\_drawing/sheet-style.ts
1795
+
1796
+ ```ts
1797
+ // The drawing's conventions: blue-black ink on drafting paper, a red for what needs attention, and the tones that
1798
+ // stand for the frame's finish and for glass
1799
+ export const SHEET = {
1800
+ paper: '#fbfaf6',
1801
+ grid: 'rgba(47, 93, 138, 0.07)',
1802
+ ink: '#1b2733',
1803
+ inkSoft: '#5d6b78',
1804
+ dimension: '#2f5d8a',
1805
+ attention: '#c0392b',
1806
+ glass: '#e3eef6',
1807
+ glassStroke: '#9db7cc',
1808
+ timber: { Oak: '#ead9bd', White: '#ffffff', Anthracite: '#c9cdd1' },
1809
+ font: "'Barlow', 'Helvetica Neue', Arial, sans-serif",
1810
+ } as const
1811
+ ```
1812
+
1813
+ ### ./src/\_shared/DesktopPage.tsx
1814
+
1815
+ ```tsx
1816
+ import { Box, Typography } from '@mui/material'
1817
+
1818
+ import { LayoutSlots } from '@salsita-ai/sdk/configurator'
1819
+
1820
+ import { DrawingSheet } from '../_drawing/index.js'
1821
+ import { OrderPanel } from './OrderPanel.js'
1822
+ import { WindowInputs } from './WindowInputs.js'
1823
+ import { FENWICK } from './tokens.js'
1824
+
1825
+ const PANEL_WIDTH = 380
1826
+
1827
+ // The desktop page: the brand bar, the inputs in a column on the left with the price and the order button at its
1828
+ // foot, and the shop drawing filling the rest, where a 3D configurator would show its scene
1829
+ export const DesktopPage = () => {
1830
+ const { accessInfo } = phx.frontend.useAccessService()
1831
+ const navigationState = phx.frontend.useActiveNavigationState()
1832
+ // An ordered window keeps its drawing until the customer starts another
1833
+ const readOnly = accessInfo.viewMode || navigationState === 'ordered'
1834
+
1835
+ return (
1836
+ <Box
1837
+ component="div"
1838
+ sx={{
1839
+ position: 'absolute',
1840
+ inset: 0,
1841
+ display: 'grid',
1842
+ gridTemplateRows: 'auto minmax(0, 1fr)',
1843
+ gridTemplateColumns: `${PANEL_WIDTH}px minmax(0, 1fr)`,
1844
+ bgcolor: FENWICK.paper,
1845
+ fontFamily: FENWICK.font,
1846
+ }}
1847
+ >
1848
+ <Box
1849
+ component="header"
1850
+ sx={{
1851
+ gridColumn: '1 / -1',
1852
+ display: 'flex',
1853
+ alignItems: 'baseline',
1854
+ gap: 2,
1855
+ paddingInline: 3,
1856
+ paddingBlock: 1.75,
1857
+ bgcolor: FENWICK.green,
1858
+ color: FENWICK.panel,
1859
+ }}
1860
+ >
1861
+ <Typography sx={{ fontFamily: FENWICK.font, fontSize: 20, fontWeight: 700, letterSpacing: '0.22em' }}>
1862
+ FENWICK &amp; LOWE
1863
+ </Typography>
1864
+ <Typography component="h1" sx={{ fontFamily: FENWICK.font, fontSize: 16, color: '#c8d6cf' }}>
1865
+ Made-to-measure casement window
1866
+ </Typography>
1867
+ </Box>
1868
+
1869
+ <Box
1870
+ component="aside"
1871
+ aria-label="Window"
1872
+ sx={{
1873
+ display: 'flex',
1874
+ flexDirection: 'column',
1875
+ minBlockSize: 0,
1876
+ bgcolor: FENWICK.panel,
1877
+ borderInlineEnd: `1px solid ${FENWICK.line}`,
1878
+ }}
1879
+ >
1880
+ <Box component="div" sx={{ flex: 1, minBlockSize: 0, overflowY: 'auto', paddingInline: 3 }}>
1881
+ <WindowInputs readOnly={readOnly} />
1882
+ </Box>
1883
+ <Box component="div" sx={{ padding: 3, borderBlockStart: `1px solid ${FENWICK.line}` }}>
1884
+ <OrderPanel compact={false} />
1885
+ </Box>
1886
+ </Box>
1887
+
1888
+ <Box component="main" aria-label="Shop drawing" sx={{ position: 'relative', minInlineSize: 0, minBlockSize: 0 }}>
1889
+ <DrawingSheet compact={false} />
1890
+ <Box component="div" sx={{ position: 'absolute', insetBlockStart: 40, insetInlineEnd: 40, inlineSize: 320 }}>
1891
+ <LayoutSlots.DesktopSnackbarsRoot />
1892
+ </Box>
1893
+ </Box>
1894
+ </Box>
1895
+ )
1896
+ }
1897
+ ```
1898
+
1899
+ ### ./src/\_shared/MillimetreField.tsx
1900
+
1901
+ ```tsx
1902
+ import { Box, IconButton, InputBase, Slider, Typography } from '@mui/material'
1903
+ import { useEffect, useState } from 'react'
1904
+
1905
+ import { genericDimensionComponent } from '@salsita-ai/sdk/domain'
1906
+
1907
+ import { FENWICK } from './tokens.js'
1908
+
1909
+ const STEP = 10
1910
+
1911
+ interface MillimetreFieldProps {
1912
+ readonly instanceName: string
1913
+ readonly label: string
1914
+ readonly readOnly: boolean
1915
+ }
1916
+
1917
+ const MillimetreInput = ({ instanceName, label, readOnly }: MillimetreFieldProps) => {
1918
+ const windowId = phx.frontend.useRootEntityId()
1919
+ const dimension = phx.frontend.useGenericDimension(windowId, instanceName)
1920
+ const [draft, setDraft] = useState(String(dimension.value))
1921
+ const min = dimension.min ?? 0
1922
+ const max = dimension.max ?? 3000
1923
+
1924
+ useEffect(() => {
1925
+ setDraft(String(dimension.value))
1926
+ }, [dimension.value])
1927
+
1928
+ // Kept inside the component's range, so a typed value can never leave it
1929
+ const commit = (value: number) => {
1930
+ dimension.update(Math.min(max, Math.max(min, Math.round(value))))
1931
+ dimension.resolve()
1932
+ }
1933
+
1934
+ const commitDraft = () => {
1935
+ const parsed = Number(draft)
1936
+
1937
+ // `Number('')` is 0, so a cleared field would become the minimum; it gets the stored value back instead
1938
+ if (draft.trim() !== '' && Number.isFinite(parsed)) {
1939
+ commit(parsed)
1940
+ } else {
1941
+ setDraft(String(dimension.value))
1942
+ }
1943
+ }
1944
+
1945
+ return (
1946
+ <Box component="div" sx={{ display: 'grid', gap: 0.5 }}>
1947
+ <Box component="div" sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>
1948
+ <Typography
1949
+ component="label"
1950
+ htmlFor={`fenwick-${instanceName}`}
1951
+ sx={{ flex: 1, fontFamily: FENWICK.font, fontSize: 15, fontWeight: 500, color: FENWICK.ink }}
1952
+ >
1953
+ {label}
1954
+ </Typography>
1955
+ <IconButton
1956
+ aria-label={`${label}, ${STEP} mm less`}
1957
+ disabled={readOnly || dimension.value <= min}
1958
+ onClick={() => commit(dimension.value - STEP)}
1959
+ sx={{ inlineSize: 32, blockSize: 32, border: `1px solid ${FENWICK.line}`, color: FENWICK.ink, fontSize: 18 }}
1960
+ >
1961
+ −
1962
+ </IconButton>
1963
+ <Box
1964
+ component="div"
1965
+ sx={{
1966
+ display: 'flex',
1967
+ alignItems: 'baseline',
1968
+ gap: 0.5,
1969
+ paddingInline: 1,
1970
+ paddingBlock: 0.25,
1971
+ borderRadius: 1,
1972
+ border: `1px solid ${FENWICK.line}`,
1973
+ bgcolor: FENWICK.panel,
1974
+ '&:focus-within': { borderColor: FENWICK.green },
1975
+ }}
1976
+ >
1977
+ <InputBase
1978
+ id={`fenwick-${instanceName}`}
1979
+ value={draft}
1980
+ disabled={readOnly}
1981
+ onChange={event => setDraft(event.target.value)}
1982
+ onBlur={commitDraft}
1983
+ onKeyDown={event => {
1984
+ if (event.key === 'Enter') {
1985
+ commitDraft()
1986
+ }
1987
+ }}
1988
+ inputProps={{ inputMode: 'numeric' }}
1989
+ sx={{
1990
+ inlineSize: 52,
1991
+ fontFamily: FENWICK.font,
1992
+ fontSize: 17,
1993
+ fontWeight: 600,
1994
+ color: FENWICK.ink,
1995
+ '& input': { padding: 0, textAlign: 'end', fontVariantNumeric: 'tabular-nums' },
1996
+ }}
1997
+ />
1998
+ <Typography component="span" sx={{ fontFamily: FENWICK.font, fontSize: 13, color: FENWICK.muted }}>
1999
+ mm
2000
+ </Typography>
2001
+ </Box>
2002
+ <IconButton
2003
+ aria-label={`${label}, ${STEP} mm more`}
2004
+ disabled={readOnly || dimension.value >= max}
2005
+ onClick={() => commit(dimension.value + STEP)}
2006
+ sx={{ inlineSize: 32, blockSize: 32, border: `1px solid ${FENWICK.line}`, color: FENWICK.ink, fontSize: 18 }}
2007
+ >
2008
+ +
2009
+ </IconButton>
2010
+ </Box>
2011
+ <Slider
2012
+ value={dimension.value}
2013
+ min={min}
2014
+ max={max}
2015
+ step={STEP}
2016
+ disabled={readOnly}
2017
+ onChange={(_, value) => dimension.update(Array.isArray(value) ? (value[0] ?? min) : value)}
2018
+ onChangeCommitted={() => dimension.resolve()}
2019
+ slotProps={{ input: { 'aria-label': `${label} slider` } }}
2020
+ sx={{
2021
+ color: FENWICK.green,
2022
+ paddingBlock: 1.5,
2023
+ '& .MuiSlider-rail': { bgcolor: FENWICK.line, opacity: 1 },
2024
+ '& .MuiSlider-thumb': { inlineSize: 16, blockSize: 16 },
2025
+ }}
2026
+ />
2027
+ </Box>
2028
+ )
2029
+ }
2030
+
2031
+ // One `genericDimension` of the spec in millimetres: a typed value with steps of 10 mm and a slider. Dragging stages
2032
+ // each value, so the drawing follows the thumb, and letting go commits it. The field exists only while the spec's
2033
+ // component is active.
2034
+ export const MillimetreField = (props: MillimetreFieldProps) => {
2035
+ const windowId = phx.frontend.useRootEntityId()
2036
+ const component = phx.frontend.useComponent({
2037
+ entityId: windowId,
2038
+ componentType: genericDimensionComponent,
2039
+ instanceName: props.instanceName,
2040
+ })
2041
+
2042
+ return component === null ? null : <MillimetreInput {...props} />
2043
+ }
2044
+ ```
2045
+
2046
+ ### ./src/\_shared/OrderPanel.tsx
2047
+
2048
+ ```tsx
2049
+ import { Alert, Box, Button, CircularProgress, Typography } from '@mui/material'
2050
+
2051
+ import { FENWICK } from './tokens.js'
2052
+
2053
+ interface OrderPanelProps {
2054
+ // On a phone the panel is a bar: the price beside the button, without the figures
2055
+ readonly compact: boolean
2056
+ }
2057
+
2058
+ // The price and the spec's `order` finalize action. While a warning holds, the action is `disabled` and its `hints`
2059
+ // say why. In the `ordered` navigation state the panel confirms the order instead; a viewer sees the price only.
2060
+ export const OrderPanel = ({ compact }: OrderPanelProps) => {
2061
+ const casement = phx.frontend.useRootEntityState()
2062
+ const price = phx.frontend.useRootEntityPrice()
2063
+ const { primary, hints } = phx.frontend.useFinalizeActions()
2064
+ const navigationState = phx.frontend.useActiveNavigationState()
2065
+ const navigate = phx.frontend.useNavigate()
2066
+ const { accessInfo } = phx.frontend.useAccessService()
2067
+ const isPending = primary?.isPending ?? false
2068
+
2069
+ if (navigationState === 'ordered') {
2070
+ return (
2071
+ <Box component="div" role="status" sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>
2072
+ <Box component="div" sx={{ display: 'grid', flex: 1 }}>
2073
+ <Typography sx={{ fontFamily: FENWICK.font, fontSize: 18, fontWeight: 600, color: FENWICK.green }}>
2074
+ Added to your order
2075
+ </Typography>
2076
+ <Typography sx={{ fontFamily: FENWICK.font, fontSize: 14, color: FENWICK.muted }}>
2077
+ {casement.width} × {casement.height} mm, {price}
2078
+ </Typography>
2079
+ </Box>
2080
+ <Button
2081
+ onClick={() => navigate('design')}
2082
+ sx={{
2083
+ fontFamily: FENWICK.font,
2084
+ fontSize: 15,
2085
+ color: FENWICK.ink,
2086
+ textTransform: 'none',
2087
+ textDecoration: 'underline',
2088
+ }}
2089
+ >
2090
+ Draw another
2091
+ </Button>
2092
+ </Box>
2093
+ )
2094
+ }
2095
+
2096
+ const showButton = primary !== null && !accessInfo.viewMode
2097
+
2098
+ return (
2099
+ <Box component="div" sx={{ display: 'grid', gap: 1.25 }}>
2100
+ <Box component="div" sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: 2 }}>
2101
+ <Box component="div" sx={{ display: 'grid' }}>
2102
+ <Typography
2103
+ sx={{ fontFamily: FENWICK.font, fontSize: compact ? 22 : 28, fontWeight: 700, color: FENWICK.ink }}
2104
+ >
2105
+ {price}
2106
+ </Typography>
2107
+ <Typography sx={{ fontFamily: FENWICK.font, fontSize: 13, color: FENWICK.muted, whiteSpace: 'nowrap' }}>
2108
+ {compact
2109
+ ? 'incl. VAT'
2110
+ : `Uw ${casement.$uValue.toFixed(2)} W/m²K · ${Math.round(casement.$weightKg)} kg · incl. VAT`}
2111
+ </Typography>
2112
+ </Box>
2113
+ {showButton && (
2114
+ <Button
2115
+ variant="contained"
2116
+ disableElevation
2117
+ disabled={primary.disabled || isPending}
2118
+ onClick={() => void primary.run()}
2119
+ title={primary.title}
2120
+ startIcon={isPending ? <CircularProgress size={16} color="inherit" /> : undefined}
2121
+ sx={{
2122
+ minBlockSize: 48,
2123
+ paddingInline: 3,
2124
+ borderRadius: 1.5,
2125
+ bgcolor: FENWICK.green,
2126
+ fontFamily: FENWICK.font,
2127
+ fontSize: 16,
2128
+ fontWeight: 600,
2129
+ textTransform: 'none',
2130
+ '&:hover': { bgcolor: '#15302a' },
2131
+ '&.Mui-disabled': { bgcolor: FENWICK.line, color: FENWICK.muted },
2132
+ }}
2133
+ >
2134
+ {isPending ? 'Adding…' : primary.label}
2135
+ </Button>
2136
+ )}
2137
+ </Box>
2138
+ {!compact && showButton && primary.disabled && hints && (
2139
+ <Typography sx={{ fontFamily: FENWICK.font, fontSize: 13, color: FENWICK.attention }}>
2140
+ Resolve the drawing's warning to order: {hints}
2141
+ </Typography>
2142
+ )}
2143
+ {primary?.error && <Alert severity="error">The window could not be added: {primary.error.message}</Alert>}
2144
+ </Box>
2145
+ )
2146
+ }
2147
+ ```
2148
+
2149
+ ### ./src/\_shared/PhonePage.tsx
2150
+
2151
+ ```tsx
2152
+ import { Box, Typography } from '@mui/material'
2153
+
2154
+ import { LayoutSlots } from '@salsita-ai/sdk/configurator'
2155
+
2156
+ import { DrawingSheet } from '../_drawing/index.js'
2157
+ import { OrderPanel } from './OrderPanel.js'
2158
+ import { WindowInputs } from './WindowInputs.js'
2159
+ import { FENWICK } from './tokens.js'
2160
+
2161
+ // The phone page: the drawing stays at the top while the inputs scroll below it, and the price with the order button
2162
+ // is a bar at the bottom
2163
+ export const PhonePage = () => {
2164
+ const { accessInfo } = phx.frontend.useAccessService()
2165
+ const navigationState = phx.frontend.useActiveNavigationState()
2166
+ const readOnly = accessInfo.viewMode || navigationState === 'ordered'
2167
+
2168
+ return (
2169
+ <Box
2170
+ component="div"
2171
+ sx={{
2172
+ position: 'absolute',
2173
+ inset: 0,
2174
+ display: 'grid',
2175
+ gridTemplateRows: 'auto minmax(260px, 46%) minmax(0, 1fr) auto',
2176
+ bgcolor: FENWICK.panel,
2177
+ fontFamily: FENWICK.font,
2178
+ }}
2179
+ >
2180
+ <Box
2181
+ component="header"
2182
+ sx={{
2183
+ display: 'flex',
2184
+ alignItems: 'baseline',
2185
+ gap: 1.5,
2186
+ paddingInline: 2,
2187
+ paddingBlock: 1.5,
2188
+ bgcolor: FENWICK.green,
2189
+ color: FENWICK.panel,
2190
+ }}
2191
+ >
2192
+ <Typography sx={{ fontFamily: FENWICK.font, fontSize: 16, fontWeight: 700, letterSpacing: '0.2em' }}>
2193
+ FENWICK &amp; LOWE
2194
+ </Typography>
2195
+ <Typography component="h1" sx={{ fontFamily: FENWICK.font, fontSize: 14, color: '#c8d6cf' }}>
2196
+ Casement window
2197
+ </Typography>
2198
+ </Box>
2199
+
2200
+ <Box
2201
+ component="div"
2202
+ aria-label="Shop drawing"
2203
+ sx={{ position: 'relative', borderBlockEnd: `1px solid ${FENWICK.line}` }}
2204
+ >
2205
+ <DrawingSheet compact />
2206
+ </Box>
2207
+
2208
+ <Box component="main" sx={{ minBlockSize: 0, overflowY: 'auto', paddingInline: 2 }}>
2209
+ <WindowInputs readOnly={readOnly} />
2210
+ </Box>
2211
+
2212
+ <Box
2213
+ component="footer"
2214
+ sx={{
2215
+ padding: 2,
2216
+ bgcolor: FENWICK.panel,
2217
+ borderBlockStart: `1px solid ${FENWICK.line}`,
2218
+ boxShadow: '0 -8px 24px rgba(27, 39, 51, 0.08)',
2219
+ }}
2220
+ >
2221
+ <OrderPanel compact />
2222
+ </Box>
2223
+
2224
+ <LayoutSlots.MobileSnackbarsRoot />
2225
+ </Box>
2226
+ )
2227
+ }
2228
+ ```
2229
+
2230
+ ### ./src/\_shared/SegmentedField.tsx
2231
+
2232
+ ```tsx
2233
+ import { Box, ButtonBase, Typography } from '@mui/material'
2234
+ import type { KeyboardEvent } from 'react'
2235
+
2236
+ import { attributeSelectionComponent } from '@salsita-ai/sdk/domain'
2237
+
2238
+ import { FENWICK } from './tokens.js'
2239
+
2240
+ // Arrow keys move the selection between the segments, as in a native radio group
2241
+ const ARROW_STEPS: Readonly<Record<string, number | undefined>> = {
2242
+ ArrowRight: 1,
2243
+ ArrowDown: 1,
2244
+ ArrowLeft: -1,
2245
+ ArrowUp: -1,
2246
+ }
2247
+
2248
+ interface SegmentedFieldProps {
2249
+ readonly instanceName: string
2250
+ readonly label: string
2251
+ readonly readOnly: boolean
2252
+ // A colour chip before each option's title, keyed by the spec's option values
2253
+ readonly chips?: Readonly<Record<string, string>>
2254
+ readonly columns?: number
2255
+ }
2256
+
2257
+ const Segments = ({ instanceName, label, readOnly, chips, columns }: SegmentedFieldProps) => {
2258
+ const resolve = phx.frontend.useResolveLocalizable()
2259
+ const windowId = phx.frontend.useRootEntityId()
2260
+ const { value, options } = phx.frontend.useAttributeSelection(windowId, instanceName)
2261
+ const selected = options.find(option => option.value === value)
2262
+ const labelId = `fenwick-${instanceName}-label`
2263
+
2264
+ const handleKeyDown = (event: KeyboardEvent<HTMLElement>, index: number) => {
2265
+ const step = ARROW_STEPS[event.key]
2266
+
2267
+ if (step === undefined) {
2268
+ return
2269
+ }
2270
+
2271
+ event.preventDefault()
2272
+ const next = (index + step + options.length) % options.length
2273
+ options[next]?.onSelect()
2274
+ event.currentTarget.parentElement?.querySelectorAll<HTMLElement>('[role="radio"]')[next]?.focus()
2275
+ }
2276
+
2277
+ return (
2278
+ <Box component="div" sx={{ display: 'grid', gap: 0.75 }}>
2279
+ <Typography id={labelId} sx={{ fontFamily: FENWICK.font, fontSize: 15, fontWeight: 500, color: FENWICK.ink }}>
2280
+ {label}
2281
+ </Typography>
2282
+ <Box
2283
+ component="div"
2284
+ role="radiogroup"
2285
+ aria-labelledby={labelId}
2286
+ sx={{
2287
+ display: 'grid',
2288
+ gridTemplateColumns: `repeat(${columns ?? options.length}, minmax(0, 1fr))`,
2289
+ gap: '1px',
2290
+ padding: '1px',
2291
+ borderRadius: 1.5,
2292
+ bgcolor: FENWICK.line,
2293
+ overflow: 'hidden',
2294
+ }}
2295
+ >
2296
+ {options.map((option, index) => {
2297
+ const isSelected = option.value === value
2298
+ const chip = chips?.[String(option.value)]
2299
+
2300
+ return (
2301
+ <ButtonBase
2302
+ key={String(option.value)}
2303
+ role="radio"
2304
+ aria-checked={isSelected}
2305
+ tabIndex={isSelected ? 0 : -1}
2306
+ disabled={readOnly && !isSelected}
2307
+ onClick={readOnly ? undefined : option.onSelect}
2308
+ onKeyDown={readOnly ? undefined : event => handleKeyDown(event, index)}
2309
+ sx={{
2310
+ display: 'flex',
2311
+ alignItems: 'center',
2312
+ justifyContent: 'center',
2313
+ gap: 0.75,
2314
+ minBlockSize: 40,
2315
+ paddingInline: 1,
2316
+ fontFamily: FENWICK.font,
2317
+ fontSize: 14,
2318
+ fontWeight: isSelected ? 600 : 500,
2319
+ color: isSelected ? FENWICK.panel : FENWICK.ink,
2320
+ bgcolor: isSelected ? FENWICK.green : FENWICK.panel,
2321
+ transition: 'background-color 120ms',
2322
+ '&:hover': { bgcolor: isSelected ? FENWICK.green : FENWICK.greenSoft },
2323
+ '&.Mui-focusVisible': { outline: `2px solid ${FENWICK.brass}`, outlineOffset: -3 },
2324
+ }}
2325
+ >
2326
+ {chip && (
2327
+ <Box
2328
+ component="span"
2329
+ aria-hidden
2330
+ sx={{
2331
+ inlineSize: 14,
2332
+ blockSize: 14,
2333
+ borderRadius: '50%',
2334
+ bgcolor: chip,
2335
+ border: `1px solid ${FENWICK.line}`,
2336
+ }}
2337
+ />
2338
+ )}
2339
+ {resolve(option.title)}
2340
+ </ButtonBase>
2341
+ )
2342
+ })}
2343
+ </Box>
2344
+ {selected?.description && (
2345
+ <Typography sx={{ fontFamily: FENWICK.font, fontSize: 13, color: FENWICK.muted }}>
2346
+ {resolve(selected.description)}
2347
+ </Typography>
2348
+ )}
2349
+ </Box>
2350
+ )
2351
+ }
2352
+
2353
+ // One `attributeSelection` of the spec as a segmented control, with the chosen option's description below it. The
2354
+ // field exists only while the spec's component is active, so a `$filter` in the spec decides when it is asked.
2355
+ export const SegmentedField = (props: SegmentedFieldProps) => {
2356
+ const windowId = phx.frontend.useRootEntityId()
2357
+ const component = phx.frontend.useComponent({
2358
+ entityId: windowId,
2359
+ componentType: attributeSelectionComponent,
2360
+ instanceName: props.instanceName,
2361
+ })
2362
+
2363
+ return component === null ? null : <Segments {...props} />
2364
+ }
2365
+ ```
2366
+
2367
+ ### ./src/\_shared/ToggleRow.tsx
2368
+
2369
+ ```tsx
2370
+ import { Box, Switch, Typography } from '@mui/material'
2371
+
2372
+ import { FENWICK } from './tokens.js'
2373
+
2374
+ interface ToggleRowProps {
2375
+ readonly instanceName: string
2376
+ readonly label: string
2377
+ readonly description: string
2378
+ readonly readOnly: boolean
2379
+ }
2380
+
2381
+ // One `attributeSwitch` of the spec as a labelled switch
2382
+ export const ToggleRow = ({ instanceName, label, description, readOnly }: ToggleRowProps) => {
2383
+ const windowId = phx.frontend.useRootEntityId()
2384
+ const toggle = phx.frontend.useAttributeSwitch(windowId, instanceName)
2385
+ const labelId = `fenwick-${instanceName}-label`
2386
+
2387
+ return (
2388
+ <Box component="div" sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: 2 }}>
2389
+ <Box component="div" sx={{ display: 'grid' }}>
2390
+ <Typography id={labelId} sx={{ fontFamily: FENWICK.font, fontSize: 15, fontWeight: 500, color: FENWICK.ink }}>
2391
+ {label}
2392
+ </Typography>
2393
+ <Typography sx={{ fontFamily: FENWICK.font, fontSize: 13, color: FENWICK.muted }}>{description}</Typography>
2394
+ </Box>
2395
+ <Switch
2396
+ checked={toggle.state.value}
2397
+ disabled={readOnly || toggle.disabled}
2398
+ onChange={toggle.onChange}
2399
+ inputProps={{ 'aria-labelledby': labelId }}
2400
+ sx={{
2401
+ '& .MuiSwitch-switchBase.Mui-checked': { color: FENWICK.panel },
2402
+ '& .MuiSwitch-switchBase.Mui-checked + .MuiSwitch-track': { bgcolor: FENWICK.green, opacity: 1 },
2403
+ }}
2404
+ />
2405
+ </Box>
2406
+ )
2407
+ }
2408
+ ```
2409
+
2410
+ ### ./src/\_shared/WindowInputs.tsx
2411
+
2412
+ ```tsx
2413
+ import { Box, Typography } from '@mui/material'
2414
+ import type { ReactNode } from 'react'
2415
+
2416
+ import { MillimetreField } from './MillimetreField.js'
2417
+ import { SegmentedField } from './SegmentedField.js'
2418
+ import { ToggleRow } from './ToggleRow.js'
2419
+ import { FENWICK, SECTION_SX } from './tokens.js'
2420
+
2421
+ const FINISH_CHIPS = { Oak: '#c9a46d', White: '#ffffff', Anthracite: '#3b4045' }
2422
+
2423
+ interface SectionProps {
2424
+ readonly title: string
2425
+ // The invariant types whose warning this section can resolve
2426
+ readonly warningTypes?: readonly string[]
2427
+ readonly children: ReactNode
2428
+ }
2429
+
2430
+ // A group of inputs, with the warning of an invariant the group can resolve below it. The warnings come from
2431
+ // `useFinalizeViolations`, which lists the committed configuration's violations.
2432
+ const Section = ({ title, warningTypes = [], children }: SectionProps) => {
2433
+ const { violations } = phx.frontend.useFinalizeViolations()
2434
+ const resolve = phx.frontend.useResolveLocalizable()
2435
+ const warning = violations?.find(({ violation }) => warningTypes.includes(violation.type))
2436
+
2437
+ return (
2438
+ <Box
2439
+ component="section"
2440
+ sx={{ display: 'grid', gap: 2, paddingBlock: 2.5, borderBlockEnd: `1px solid ${FENWICK.line}` }}
2441
+ >
2442
+ <Typography component="h3" sx={SECTION_SX}>
2443
+ {title}
2444
+ </Typography>
2445
+ {children}
2446
+ {warning && (
2447
+ <Typography
2448
+ role="alert"
2449
+ sx={{
2450
+ paddingInline: 1.5,
2451
+ paddingBlock: 1,
2452
+ borderRadius: 1,
2453
+ borderInlineStart: `3px solid ${FENWICK.attention}`,
2454
+ bgcolor: FENWICK.attentionTint,
2455
+ color: FENWICK.attention,
2456
+ fontFamily: FENWICK.font,
2457
+ fontSize: 14,
2458
+ lineHeight: 1.4,
2459
+ }}
2460
+ >
2461
+ {resolve(warning.violation.message)}
2462
+ </Typography>
2463
+ )}
2464
+ </Box>
2465
+ )
2466
+ }
2467
+
2468
+ interface WindowInputsProps {
2469
+ readonly readOnly: boolean
2470
+ }
2471
+
2472
+ // Every input of the window, grouped as a joiner asks for them. The hinge side and the top light's height are asked
2473
+ // only when the spec's `$filter` makes their component active.
2474
+ export const WindowInputs = ({ readOnly }: WindowInputsProps) => {
2475
+ return (
2476
+ <Box component="div" sx={{ display: 'grid' }}>
2477
+ <Section title="Overall size" warningTypes={['sashTooWide', 'sashTooNarrow']}>
2478
+ <MillimetreField instanceName="width" label="Width" readOnly={readOnly} />
2479
+ <MillimetreField instanceName="height" label="Height" readOnly={readOnly} />
2480
+ </Section>
2481
+ <Section title="Panes" warningTypes={['topLightTooTall']}>
2482
+ <SegmentedField instanceName="lights" label="Panes across" readOnly={readOnly} />
2483
+ <ToggleRow
2484
+ instanceName="topLight"
2485
+ label="Top light"
2486
+ description="A fixed pane above a transom"
2487
+ readOnly={readOnly}
2488
+ />
2489
+ <MillimetreField instanceName="topLightHeight" label="Top light height" readOnly={readOnly} />
2490
+ </Section>
2491
+ <Section title="Opening">
2492
+ <SegmentedField instanceName="opening" label="Sashes" readOnly={readOnly} columns={2} />
2493
+ <SegmentedField instanceName="hinge" label="Hinged on the" readOnly={readOnly} />
2494
+ </Section>
2495
+ <Section title="Glass and finish">
2496
+ <SegmentedField instanceName="glazing" label="Glazing" readOnly={readOnly} />
2497
+ <ToggleRow
2498
+ instanceName="glazingBars"
2499
+ label="Glazing bars"
2500
+ description="A cross of bars in every pane"
2501
+ readOnly={readOnly}
2502
+ />
2503
+ <SegmentedField instanceName="finish" label="Finish" readOnly={readOnly} chips={FINISH_CHIPS} columns={3} />
2504
+ </Section>
2505
+ </Box>
2506
+ )
2507
+ }
2508
+ ```
2509
+
2510
+ ### ./src/\_shared/tokens.ts
2511
+
2512
+ ```ts
2513
+ // Fenwick & Lowe's palette and type: a workshop green, brass and warm paper. Barlow is the brand's typeface; the
2514
+ // stack falls back to system fonts where it is not loaded.
2515
+ export const FENWICK = {
2516
+ paper: '#f3f0e8',
2517
+ panel: '#fffdf8',
2518
+ ink: '#1b2733',
2519
+ muted: '#5d6b78',
2520
+ line: '#ddd6c8',
2521
+ green: '#1f3d33',
2522
+ greenSoft: '#e4ece7',
2523
+ brass: '#a8844b',
2524
+ attention: '#b23a2b',
2525
+ attentionTint: '#fbecea',
2526
+ font: "'Barlow', 'Helvetica Neue', Arial, sans-serif",
2527
+ } as const
2528
+
2529
+ // Small capitals with wide tracking, for section labels
2530
+ export const SECTION_SX = {
2531
+ fontFamily: FENWICK.font,
2532
+ fontSize: 12,
2533
+ fontWeight: 600,
2534
+ letterSpacing: '0.16em',
2535
+ textTransform: 'uppercase',
2536
+ color: FENWICK.muted,
2537
+ } as const
2538
+ ```
2539
+
2540
+ ### ./src/elements/ConfiguratorLayout.tsx
2541
+
2542
+ ```tsx
2543
+ import { Box } from '@mui/material'
2544
+
2545
+ import { LayoutSlots } from '@salsita-ai/sdk/configurator'
2546
+
2547
+ import { DesktopPage } from '../_shared/DesktopPage.js'
2548
+ import { PhonePage } from '../_shared/PhonePage.js'
2549
+ import { FENWICK } from '../_shared/tokens.js'
2550
+
2551
+ // A window configurator whose main view is a shop drawing instead of a scene. The layout never mounts
2552
+ // `LayoutSlots.SharedCanvas`, so no 3D scene loads; the drawing is SVG that React renders from the configuration.
2553
+ const ConfiguratorLayout = () => {
2554
+ // `null` until the container has been measured
2555
+ const viewports = phx.frontend.useActiveViewports()
2556
+ const isDesktop = viewports?.includes('desktop') ?? false
2557
+
2558
+ return (
2559
+ <Box component="div" sx={{ position: 'absolute', inset: 0, overflow: 'clip', bgcolor: FENWICK.paper }}>
2560
+ <LayoutSlots.Services />
2561
+ {viewports !== null && (isDesktop ? <DesktopPage /> : <PhonePage />)}
2562
+ </Box>
2563
+ )
2564
+ }
2565
+
2566
+ export default phx.frontend.createCustomPhoenixLayoutElement('ConfiguratorLayout', ConfiguratorLayout)
2567
+ ```
2568
+
2569
+ ### ./src/expressions/window.ts
2570
+
2571
+ ```ts
2572
+ // Face widths of the timber sections in millimetres, as the drawing shows them
2573
+ const FRAME = 68
2574
+ const MULLION = 76
2575
+
2576
+ const LIGHT_COUNT = { One: 1, Two: 2, Three: 3 }
2577
+
2578
+ // The widest sash each opening type can carry, in millimetres
2579
+ const MAX_SASH_WIDTH = { Fixed: Infinity, SideHung: 900, TiltTurn: 1300, TopHung: 1600 }
2580
+
2581
+ const GLASS = {
2582
+ Double: { buildUp: '4 / 16 Ar / 4 low-E', ug: 1.1, kgPerM2: 20, gbpPerM2: 95 },
2583
+ Triple: { buildUp: '4 / 12 Ar / 4 / 12 Ar / 4, two low-E', ug: 0.6, kgPerM2: 30, gbpPerM2: 150 },
2584
+ Acoustic: { buildUp: '6.8 lam / 16 Ar / 4 low-E', ug: 1.0, kgPerM2: 27, gbpPerM2: 170 },
2585
+ }
2586
+
2587
+ const SASH_PRICE = { Fixed: 0, SideHung: 260, TiltTurn: 340, TopHung: 220 }
2588
+ const FINISH_FACTOR = { Oak: 1.18, White: 1, Anthracite: 1.06 }
2589
+ // Timber frame and spacer: U-value of the frame and linear loss along the glass edge
2590
+ const FRAME_U = 1.3
2591
+ const EDGE_PSI = 0.04
2592
+
2593
+ type PaneOpening = 'Fixed' | 'SideLeft' | 'SideRight' | 'TiltLeft' | 'TiltRight' | 'Top'
2594
+
2595
+ interface WindowChoices {
2596
+ readonly lights: keyof typeof LIGHT_COUNT
2597
+ readonly opening: keyof typeof MAX_SASH_WIDTH
2598
+ readonly hinge: 'Left' | 'Right'
2599
+ }
2600
+
2601
+ // How the pane at `index` of `count` opens: a single sash follows the hinge choice, a pair is hung from the outer
2602
+ // edges like French casements, and of three the outer two open and the middle one is fixed
2603
+ const paneOpening = (s: WindowChoices, index: number, count: number): PaneOpening => {
2604
+ if (s.opening === 'Fixed') {
2605
+ return 'Fixed'
2606
+ }
2607
+
2608
+ if (s.opening === 'TopHung') {
2609
+ return 'Top'
2610
+ }
2611
+
2612
+ const prefix = s.opening === 'SideHung' ? 'Side' : 'Tilt'
2613
+
2614
+ if (count === 1) {
2615
+ return s.hinge === 'Left' ? `${prefix}Left` : `${prefix}Right`
2616
+ }
2617
+
2618
+ if (index === 0) {
2619
+ return `${prefix}Left`
2620
+ }
2621
+
2622
+ if (index === count - 1) {
2623
+ return `${prefix}Right`
2624
+ }
2625
+
2626
+ return 'Fixed'
2627
+ }
2628
+
2629
+ export default phx.domain.implementCustomExpressions({
2630
+ Window: {
2631
+ $frameWidth: () => {
2632
+ return FRAME
2633
+ },
2634
+ $mullionWidth: () => {
2635
+ return MULLION
2636
+ },
2637
+ // The clear openings inside the frame, from the top left corner of the frame, viewed from outside
2638
+ $panes: s => {
2639
+ const count = LIGHT_COUNT[s.lights]
2640
+ const innerWidth = s.width - 2 * FRAME
2641
+ const topLightZone = s.topLight ? s.topLightHeight + MULLION : 0
2642
+ const mainHeight = s.height - 2 * FRAME - topLightZone
2643
+ const paneWidth = (innerWidth - (count - 1) * MULLION) / count
2644
+ const panes = Array.from({ length: count }, (_, index) => {
2645
+ const opening = paneOpening(s, index, count)
2646
+
2647
+ return {
2648
+ key: `P${index + 1}`,
2649
+ x: FRAME + index * (paneWidth + MULLION),
2650
+ y: FRAME + topLightZone,
2651
+ width: paneWidth,
2652
+ height: mainHeight,
2653
+ opening,
2654
+ oversize: opening !== 'Fixed' && paneWidth > MAX_SASH_WIDTH[s.opening],
2655
+ }
2656
+ })
2657
+
2658
+ if (!s.topLight) {
2659
+ return panes
2660
+ }
2661
+
2662
+ // The top light is one fixed pane across the whole width, above the transom
2663
+ return [
2664
+ {
2665
+ key: 'T1',
2666
+ x: FRAME,
2667
+ y: FRAME,
2668
+ width: innerWidth,
2669
+ height: s.topLightHeight,
2670
+ opening: 'Fixed',
2671
+ oversize: false,
2672
+ },
2673
+ ...panes,
2674
+ ]
2675
+ },
2676
+ $glassArea: s => {
2677
+ return s.$panes.reduce((area, pane) => area + (pane.width * pane.height) / 1e6, 0)
2678
+ },
2679
+ // Uw from the glass, the frame and the glass edge, by the area-weighted method of EN ISO 10077
2680
+ $uValue: s => {
2681
+ const total = (s.width * s.height) / 1e6
2682
+ const frameArea = total - s.$glassArea
2683
+ const edge = s.$panes.reduce((length, pane) => length + (2 * (pane.width + pane.height)) / 1000, 0)
2684
+
2685
+ return (s.$glassArea * GLASS[s.glazing].ug + frameArea * FRAME_U + edge * EDGE_PSI) / total
2686
+ },
2687
+ $weightKg: s => {
2688
+ const frameMetres = (2 * (s.width + s.height)) / 1000
2689
+
2690
+ return s.$glassArea * GLASS[s.glazing].kgPerM2 + frameMetres * 4.5
2691
+ },
2692
+ $glassBuildUp: s => {
2693
+ return GLASS[s.glazing].buildUp
2694
+ },
2695
+ $price: s => {
2696
+ const frameMetres = (2 * (s.width + s.height)) / 1000
2697
+ const sashes = s.$panes.filter(pane => pane.opening !== 'Fixed').length
2698
+ const base =
2699
+ 180 +
2700
+ frameMetres * 85 +
2701
+ s.$glassArea * GLASS[s.glazing].gbpPerM2 +
2702
+ sashes * SASH_PRICE[s.opening] +
2703
+ (s.topLight ? 120 : 0) +
2704
+ (s.glazingBars ? 45 * s.$panes.length : 0)
2705
+
2706
+ return Math.round(base * FINISH_FACTOR[s.finish])
2707
+ },
2708
+ },
2709
+ })
2710
+ ```
2711
+
2712
+ ### ./src/handlers/order-window.ts
2713
+
2714
+ ```ts
2715
+ import { useCallback } from 'react'
2716
+
2717
+ // Stands in for the joinery's order service: adding takes a moment, then the page shows the confirmation
2718
+ export default phx.frontend.createPhoenixHandler('orderWindow', () => {
2719
+ const navigate = phx.frontend.useNavigate()
2720
+
2721
+ return {
2722
+ handler: useCallback(async () => {
2723
+ await new Promise(resolve => setTimeout(resolve, 1200))
2724
+ navigate('ordered')
2725
+ }, [navigate]),
2726
+ }
2727
+ })
2728
+ ```
2729
+
2730
+ ### ./src/invariants/window.ts
2731
+
2732
+ ```ts
2733
+ const MAX_SASH_WIDTH = { Fixed: Infinity, SideHung: 900, TiltTurn: 1300, TopHung: 1600 }
2734
+ const OPENING_LABEL = { Fixed: 'fixed', SideHung: 'side-hung', TiltTurn: 'tilt and turn', TopHung: 'top-hung' }
2735
+ const MIN_MAIN_HEIGHT = 500
2736
+ // A sash's two stiles are 56 mm each, so a narrower opening leaves no room for glass
2737
+ const MIN_SASH_WIDTH = 2 * 56
2738
+
2739
+ // Both rules are warnings: the drawing keeps the change and marks the problem, and the window cannot be ordered until
2740
+ // it is resolved
2741
+ export default phx.domain.implementCustomInvariants({
2742
+ Window: {
2743
+ // A sash wider than its hinges carry would sag, and one narrower than its two stiles has no room for glass; the
2744
+ // messages name the limit
2745
+ sashSize: s => {
2746
+ const oversize = s.$panes.find(pane => pane.oversize)
2747
+ const undersize = s.$panes.find(pane => pane.opening !== 'Fixed' && pane.width < MIN_SASH_WIDTH)
2748
+
2749
+ if (oversize !== undefined) {
2750
+ return [
2751
+ {
2752
+ type: 'sashTooWide',
2753
+ severity: 'warning',
2754
+ message: `A ${OPENING_LABEL[s.opening]} sash can be at most ${MAX_SASH_WIDTH[s.opening].toLocaleString('en-GB')} mm wide, and these are ${Math.round(oversize.width).toLocaleString('en-GB')} mm. Add a pane across or make the window narrower.`,
2755
+ },
2756
+ ]
2757
+ }
2758
+
2759
+ if (undersize !== undefined) {
2760
+ return [
2761
+ {
2762
+ type: 'sashTooNarrow',
2763
+ severity: 'warning',
2764
+ message: `A sash needs at least ${MIN_SASH_WIDTH} mm for its stiles, and these are ${Math.round(undersize.width)} mm. Use fewer panes across or make the window wider.`,
2765
+ },
2766
+ ]
2767
+ }
2768
+
2769
+ return []
2770
+ },
2771
+ topLightTooTall: s => {
2772
+ return !s.topLight || s.height - 2 * s.$frameWidth - s.topLightHeight - s.$mullionWidth >= MIN_MAIN_HEIGHT
2773
+ },
2774
+ },
2775
+ })
2776
+ ```
2777
+
2778
+ </details>