@salsita-ai/sdk 0.50.0-develop.b5468d6828 → 0.50.0-develop.b5d443db78

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 (2011) hide show
  1. package/README.md +16 -6
  2. package/dist/admin/AdminShell.js +1 -1
  3. package/dist/admin/common/admin-interface.d.ts +1 -1
  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/project-scaffolding.d.ts +10 -14
  55. package/dist/application-spec/generate-application/code/project-scaffolding.js +2 -2
  56. package/dist/application-spec/generate-application/code/story-files.js +1 -1
  57. package/dist/application-spec/generate-application/code/templates/admin-config.js +3 -0
  58. package/dist/application-spec/generate-application/code/templates/application-types.js +6 -6
  59. package/dist/application-spec/generate-application/code/templates/common/doc-comment.d.ts +2 -0
  60. package/dist/application-spec/generate-application/code/templates/common/doc-comment.js +1 -0
  61. package/dist/application-spec/generate-application/code/templates/common/format-property-key.d.ts +7 -0
  62. package/dist/application-spec/generate-application/code/templates/common/format-property-key.js +1 -0
  63. package/dist/application-spec/generate-application/code/templates/common/schema-to-type-string.js +3 -3
  64. package/dist/application-spec/generate-application/code/templates/configurator-globals.d.ts +2 -1
  65. package/dist/application-spec/generate-application/code/templates/configurator-globals.js +19 -6
  66. package/dist/application-spec/generate-application/code/templates/domain-spec/factory-types/domain-factory-types.d.ts +35 -0
  67. package/dist/application-spec/generate-application/code/templates/domain-spec/factory-types/domain-factory-types.js +5 -0
  68. package/dist/application-spec/generate-application/code/templates/domain-spec/factory-types/index.d.ts +1 -0
  69. package/dist/application-spec/generate-application/code/templates/domain-spec/factory-types/index.js +1 -0
  70. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-component-optics.d.ts +1 -1
  71. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-component-optics.js +6 -6
  72. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-domain-block.js +59 -63
  73. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-invariants.d.ts +8 -0
  74. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-invariants.js +1 -1
  75. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-locale.js +1 -1
  76. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-presets.js +1 -1
  77. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-resources.js +13 -13
  78. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-states.d.ts +1 -1
  79. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-states.js +2 -2
  80. package/dist/application-spec/generate-application/code/templates/domain-spec/index.d.ts +2 -1
  81. package/dist/application-spec/generate-application/code/templates/domain-spec/index.js +1 -1
  82. package/dist/application-spec/generate-application/code/templates/eslint-config.d.ts +5 -0
  83. package/dist/application-spec/generate-application/code/templates/eslint-config.js +4 -5
  84. package/dist/application-spec/generate-application/code/templates/gitignore.js +3 -4
  85. package/dist/application-spec/generate-application/code/templates/global-definition/generate-action-types.js +7 -7
  86. package/dist/application-spec/generate-application/code/templates/global-definition/generate-assistant-form-element-types.d.ts +12 -0
  87. package/dist/application-spec/generate-application/code/templates/global-definition/generate-assistant-form-element-types.js +7 -0
  88. package/dist/application-spec/generate-application/code/templates/global-definition/generate-phx-types.d.ts +43 -0
  89. package/dist/application-spec/generate-application/code/templates/global-definition/generate-phx-types.js +33 -0
  90. package/dist/application-spec/generate-application/code/templates/global-definition/index.d.ts +2 -0
  91. package/dist/application-spec/generate-application/code/templates/global-definition/index.js +1 -1
  92. package/dist/application-spec/generate-application/code/templates/globals.js +24 -43
  93. package/dist/application-spec/generate-application/code/templates/index.d.ts +4 -8
  94. package/dist/application-spec/generate-application/code/templates/index.js +1 -1
  95. package/dist/application-spec/generate-application/code/templates/lingui-rc.d.ts +5 -0
  96. package/dist/application-spec/generate-application/code/templates/lingui-rc.js +3 -2
  97. package/dist/application-spec/generate-application/code/templates/prettier-config.d.ts +5 -0
  98. package/dist/application-spec/generate-application/code/templates/prettier-config.js +4 -5
  99. package/dist/application-spec/generate-application/code/templates/skills/core/cli.d.ts +2 -0
  100. package/dist/application-spec/generate-application/code/templates/skills/core/cli.js +1 -0
  101. package/dist/application-spec/generate-application/code/templates/skills/core/index.d.ts +3 -0
  102. package/dist/application-spec/generate-application/code/templates/skills/core/index.js +1 -0
  103. package/dist/application-spec/generate-application/code/templates/skills/core/sdk.d.ts +2 -0
  104. package/dist/application-spec/generate-application/code/templates/skills/core/sdk.js +118 -0
  105. package/dist/application-spec/generate-application/code/templates/skills/core/workflow.d.ts +2 -0
  106. package/dist/application-spec/generate-application/code/templates/skills/core/workflow.js +44 -0
  107. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/application-states.d.ts +3 -0
  108. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/application-states.js +3 -0
  109. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/index.d.ts +1 -0
  110. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/index.js +1 -0
  111. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/navigation.d.ts +3 -0
  112. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/navigation.js +48 -0
  113. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/presets.d.ts +3 -0
  114. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/presets.js +38 -0
  115. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/selection.d.ts +3 -0
  116. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/selection.js +35 -0
  117. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/views-and-tools.d.ts +3 -0
  118. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/views-and-tools.js +61 -0
  119. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/custom-layout.d.ts +3 -0
  120. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/custom-layout.js +7 -0
  121. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/finalization-actions.d.ts +3 -0
  122. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/finalization-actions.js +79 -0
  123. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/index.d.ts +1 -0
  124. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/index.js +1 -0
  125. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/messages.d.ts +3 -0
  126. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/messages.js +52 -0
  127. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/pages.d.ts +3 -0
  128. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/pages.js +49 -0
  129. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/scene-and-safe-area.d.ts +3 -0
  130. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/scene-and-safe-area.js +62 -0
  131. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/slots.d.ts +3 -0
  132. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/slots.js +40 -0
  133. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/tabs-and-steps.d.ts +3 -0
  134. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/tabs-and-steps.js +65 -0
  135. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/toolbar-actions.d.ts +3 -0
  136. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/toolbar-actions.js +58 -0
  137. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/view-mode.d.ts +3 -0
  138. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/view-mode.js +41 -0
  139. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/control-components.d.ts +3 -0
  140. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/control-components.js +24 -0
  141. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/control-hooks.d.ts +3 -0
  142. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/control-hooks.js +44 -0
  143. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/custom-controls.d.ts +3 -0
  144. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/custom-controls.js +74 -0
  145. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/domain-controls.d.ts +3 -0
  146. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/domain-controls.js +8 -0
  147. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/index.d.ts +1 -0
  148. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/index.js +1 -0
  149. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/scene-controls.d.ts +3 -0
  150. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/scene-controls.js +48 -0
  151. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/actions.d.ts +3 -0
  152. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/actions.js +64 -0
  153. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/components.d.ts +3 -0
  154. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/components.js +62 -0
  155. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/domain-model.d.ts +3 -0
  156. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/domain-model.js +1 -0
  157. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/entities-and-relations.d.ts +3 -0
  158. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/entities-and-relations.js +59 -0
  159. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/expressions.d.ts +3 -0
  160. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/expressions.js +46 -0
  161. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/index.d.ts +1 -0
  162. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/index.js +1 -0
  163. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/transformers.d.ts +3 -0
  164. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/transformers.js +43 -0
  165. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/validation-and-repair.d.ts +3 -0
  166. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/validation-and-repair.js +30 -0
  167. package/dist/application-spec/generate-application/code/templates/skills/features/features.d.ts +3 -0
  168. package/dist/application-spec/generate-application/code/templates/skills/features/features.js +1 -0
  169. package/dist/application-spec/generate-application/code/templates/skills/features/index.d.ts +1 -0
  170. package/dist/application-spec/generate-application/code/templates/skills/features/index.js +1 -0
  171. package/dist/application-spec/generate-application/code/templates/skills/features/inspection.d.ts +2 -0
  172. package/dist/application-spec/generate-application/code/templates/skills/features/inspection.js +1 -0
  173. package/dist/application-spec/generate-application/code/templates/skills/features/localization.d.ts +3 -0
  174. package/dist/application-spec/generate-application/code/templates/skills/features/localization.js +87 -0
  175. package/dist/application-spec/generate-application/code/templates/skills/features/scene-objects.d.ts +3 -0
  176. package/dist/application-spec/generate-application/code/templates/skills/features/scene-objects.js +43 -0
  177. package/dist/application-spec/generate-application/code/templates/skills/features/state/index.d.ts +1 -0
  178. package/dist/application-spec/generate-application/code/templates/skills/features/state/index.js +1 -0
  179. package/dist/application-spec/generate-application/code/templates/skills/features/state/slices.d.ts +3 -0
  180. package/dist/application-spec/generate-application/code/templates/skills/features/state/slices.js +48 -0
  181. package/dist/application-spec/generate-application/code/templates/skills/features/state/state.d.ts +3 -0
  182. package/dist/application-spec/generate-application/code/templates/skills/features/state/state.js +1 -0
  183. package/dist/application-spec/generate-application/code/templates/skills/features/state/updates.d.ts +3 -0
  184. package/dist/application-spec/generate-application/code/templates/skills/features/state/updates.js +39 -0
  185. package/dist/application-spec/generate-application/code/templates/skills/features/state/violations.d.ts +3 -0
  186. package/dist/application-spec/generate-application/code/templates/skills/features/state/violations.js +36 -0
  187. package/dist/application-spec/generate-application/code/templates/skills/features/variants.d.ts +2 -0
  188. package/dist/application-spec/generate-application/code/templates/skills/features/variants.js +1 -0
  189. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks.d.ts +2 -0
  190. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks.js +1 -0
  191. package/dist/application-spec/generate-application/code/templates/skills/guide.d.ts +68 -0
  192. package/dist/application-spec/generate-application/code/templates/skills/guide.js +18 -0
  193. package/dist/application-spec/generate-application/code/templates/skills/phoenix-skill-bundle.d.ts +10 -0
  194. package/dist/application-spec/generate-application/code/templates/skills/phoenix-skill-bundle.js +14 -0
  195. package/dist/application-spec/generate-application/code/templates/skills/phx-members-without-guide.d.ts +9 -0
  196. package/dist/application-spec/generate-application/code/templates/skills/phx-members-without-guide.js +1 -0
  197. package/dist/application-spec/generate-application/code/templates/skills/processes/asset-conversion.d.ts +2 -0
  198. package/dist/application-spec/generate-application/code/templates/skills/processes/asset-conversion.js +23 -0
  199. package/dist/application-spec/generate-application/code/templates/skills/processes/beta.d.ts +14 -0
  200. package/dist/application-spec/generate-application/code/templates/skills/processes/beta.js +4 -0
  201. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/evaluate.d.ts +2 -0
  202. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/evaluate.js +38 -0
  203. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/feedback.d.ts +3 -0
  204. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/feedback.js +1 -0
  205. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/index.d.ts +1 -0
  206. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/index.js +1 -0
  207. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/report.d.ts +2 -0
  208. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/report.js +7 -0
  209. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/send.d.ts +2 -0
  210. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/send.js +2 -0
  211. package/dist/application-spec/generate-application/code/templates/skills/processes/finalization.d.ts +2 -0
  212. package/dist/application-spec/generate-application/code/templates/skills/processes/finalization.js +2 -0
  213. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/build.d.ts +2 -0
  214. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/build.js +25 -0
  215. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/direction.d.ts +2 -0
  216. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/direction.js +35 -0
  217. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/first-draft.d.ts +3 -0
  218. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/first-draft.js +3 -0
  219. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/handoff.d.ts +2 -0
  220. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/handoff.js +9 -0
  221. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/index.d.ts +1 -0
  222. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/index.js +1 -0
  223. package/dist/application-spec/generate-application/code/templates/skills/processes/index.d.ts +8 -0
  224. package/dist/application-spec/generate-application/code/templates/skills/processes/index.js +1 -0
  225. package/dist/application-spec/generate-application/code/templates/skills/processes/model-migration.d.ts +2 -0
  226. package/dist/application-spec/generate-application/code/templates/skills/processes/model-migration.js +1 -0
  227. package/dist/application-spec/generate-application/code/templates/skills/processes/review/appearance.d.ts +2 -0
  228. package/dist/application-spec/generate-application/code/templates/skills/processes/review/appearance.js +46 -0
  229. package/dist/application-spec/generate-application/code/templates/skills/processes/review/code.d.ts +2 -0
  230. package/dist/application-spec/generate-application/code/templates/skills/processes/review/code.js +2 -0
  231. package/dist/application-spec/generate-application/code/templates/skills/processes/review/hand-over.d.ts +2 -0
  232. package/dist/application-spec/generate-application/code/templates/skills/processes/review/hand-over.js +6 -0
  233. package/dist/application-spec/generate-application/code/templates/skills/processes/review/index.d.ts +1 -0
  234. package/dist/application-spec/generate-application/code/templates/skills/processes/review/index.js +1 -0
  235. package/dist/application-spec/generate-application/code/templates/skills/processes/review/review.d.ts +3 -0
  236. package/dist/application-spec/generate-application/code/templates/skills/processes/review/review.js +1 -0
  237. package/dist/application-spec/generate-application/code/templates/skills/processes/review/visual-inspection.d.ts +2 -0
  238. package/dist/application-spec/generate-application/code/templates/skills/processes/review/visual-inspection.js +13 -0
  239. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/branding.d.ts +2 -0
  240. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/branding.js +20 -0
  241. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/catalog.d.ts +2 -0
  242. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/catalog.js +1 -0
  243. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/index.d.ts +1 -0
  244. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/index.js +1 -0
  245. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/product-definition.d.ts +2 -0
  246. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/product-definition.js +22 -0
  247. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/specification.d.ts +3 -0
  248. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/specification.js +1 -0
  249. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/ux-guidelines.d.ts +2 -0
  250. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/ux-guidelines.js +25 -0
  251. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.d.ts +51 -240
  252. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.js +3 -58
  253. package/dist/application-spec/generate-application/code/templates/skills/sdk-subpath-imports.d.ts +9 -0
  254. package/dist/application-spec/generate-application/code/templates/skills/sdk-subpath-imports.js +1 -0
  255. package/dist/application-spec/generate-application/code/templates/spec-code/collect-spec-code.d.ts +58 -0
  256. package/dist/application-spec/generate-application/code/templates/spec-code/collect-spec-code.js +1 -0
  257. package/dist/application-spec/generate-application/code/templates/spec-code/index.d.ts +2 -0
  258. package/dist/application-spec/generate-application/code/templates/spec-code/index.js +1 -0
  259. package/dist/application-spec/generate-application/code/templates/spec-code/spec-code.d.ts +18 -0
  260. package/dist/application-spec/generate-application/code/templates/spec-code/spec-code.js +41 -0
  261. package/dist/application-spec/generate-application/code/templates/spec-messages/index.d.ts +1 -0
  262. package/dist/application-spec/generate-application/code/templates/spec-messages/index.js +1 -0
  263. package/dist/application-spec/generate-application/code/templates/spec-messages/spec-messages.d.ts +20 -0
  264. package/dist/application-spec/generate-application/code/templates/spec-messages/spec-messages.js +6 -0
  265. package/dist/application-spec/generate-application/code/templates/story/phx-module.d.ts +8 -2
  266. package/dist/application-spec/generate-application/code/templates/story/phx-module.js +15 -3
  267. package/dist/application-spec/generate-application/code/templates/story/wrapper.d.ts +3 -0
  268. package/dist/application-spec/generate-application/code/templates/story/wrapper.js +4 -5
  269. package/dist/application-spec/generate-application/code/templates/tsconfig.js +2 -1
  270. package/dist/application-spec/generate-application/index.d.ts +1 -6
  271. package/dist/application-spec/generate-application/index.js +1 -1
  272. package/dist/application-spec/parse-application-files/categorize/categorize-files.d.ts +18 -0
  273. package/dist/application-spec/parse-application-files/categorize/categorize-files.js +1 -1
  274. package/dist/application-spec/parse-application-files/categorize/earlier-generated-editor-configs.d.ts +16 -0
  275. package/dist/application-spec/parse-application-files/categorize/earlier-generated-editor-configs.js +9 -0
  276. package/dist/application-spec/parse-application-files/merge/merged-assistant.d.ts +13 -4
  277. package/dist/application-spec/parse-application-files/merge/merged-assistant.js +1 -1
  278. package/dist/application-spec/parse-application-files/merge/merged-infra.d.ts +4 -11
  279. package/dist/application-spec/parse-application-files/merge/merged-transformers.d.ts +2 -4
  280. package/dist/application-spec/parse-application-files/parse-application-files.js +1 -1
  281. package/dist/application-spec/parse-application-files/raw-spec/parse-yaml-spec-file.js +1 -1
  282. package/dist/application-spec/parse-application-files/raw-spec/raw-acl.d.ts +2 -2
  283. package/dist/application-spec/parse-application-files/raw-spec/raw-acl.js +1 -1
  284. package/dist/application-spec/parse-application-files/raw-spec/raw-admin-pages.d.ts +3 -24
  285. package/dist/application-spec/parse-application-files/raw-spec/raw-assistant.d.ts +58 -23
  286. package/dist/application-spec/parse-application-files/raw-spec/raw-assistant.js +1 -1
  287. package/dist/application-spec/parse-application-files/raw-spec/raw-expressions.d.ts +1 -1
  288. package/dist/application-spec/parse-application-files/raw-spec/raw-expressions.js +1 -1
  289. package/dist/application-spec/parse-application-files/raw-spec/raw-resources.d.ts +19 -64
  290. package/dist/application-spec/parse-application-files/spec/application/admin-spec/admin-pages.d.ts +3 -20
  291. package/dist/application-spec/parse-application-files/spec/application/admin-spec/admin-spec.js +1 -1
  292. package/dist/application-spec/parse-application-files/spec/application/admin-spec/states.d.ts +3 -5
  293. package/dist/application-spec/parse-application-files/spec/application/configurator-spec/configurator-spec.js +1 -1
  294. package/dist/application-spec/parse-application-files/spec/application/configurator-spec/states.d.ts +3 -8
  295. package/dist/application-spec/parse-application-files/spec/common/index.d.ts +1 -0
  296. package/dist/application-spec/parse-application-files/spec/common/index.js +1 -1
  297. package/dist/application-spec/parse-application-files/spec/common/value-type/format-value-type.d.ts +3 -0
  298. package/dist/application-spec/parse-application-files/spec/common/value-type/format-value-type.js +1 -0
  299. package/dist/application-spec/parse-application-files/spec/common/value-type/index.d.ts +5 -0
  300. package/dist/application-spec/parse-application-files/spec/common/value-type/index.js +1 -0
  301. package/dist/application-spec/parse-application-files/spec/common/value-type/intersect-value-types.d.ts +6 -0
  302. package/dist/application-spec/parse-application-files/spec/common/value-type/intersect-value-types.js +1 -0
  303. package/dist/application-spec/parse-application-files/spec/common/value-type/is-assignable-value-type.d.ts +8 -0
  304. package/dist/application-spec/parse-application-files/spec/common/value-type/is-assignable-value-type.js +1 -0
  305. package/dist/application-spec/parse-application-files/spec/common/value-type/value-type-at.d.ts +10 -0
  306. package/dist/application-spec/parse-application-files/spec/common/value-type/value-type-at.js +1 -0
  307. package/dist/application-spec/parse-application-files/spec/common/value-type/value-type.d.ts +98 -0
  308. package/dist/application-spec/parse-application-files/spec/common/value-type/value-type.js +1 -0
  309. package/dist/application-spec/parse-application-files/spec/components/bindings/component-path.d.ts +13 -0
  310. package/dist/application-spec/parse-application-files/spec/components/bindings/component-path.js +1 -0
  311. package/dist/application-spec/parse-application-files/spec/components/bindings/index.d.ts +2 -0
  312. package/dist/application-spec/parse-application-files/spec/components/bindings/index.js +1 -1
  313. package/dist/application-spec/parse-application-files/spec/components/bindings/read-binding-type.d.ts +24 -0
  314. package/dist/application-spec/parse-application-files/spec/components/bindings/read-binding-type.js +1 -0
  315. package/dist/application-spec/parse-application-files/spec/components/bindings/read-binding.d.ts +3 -13
  316. package/dist/application-spec/parse-application-files/spec/components/bindings/write-binding.d.ts +4 -32
  317. package/dist/application-spec/parse-application-files/spec/components/component-filter.d.ts +4 -10
  318. package/dist/application-spec/parse-application-files/spec/components/component-state-type.d.ts +8 -0
  319. package/dist/application-spec/parse-application-files/spec/components/component-state-type.js +1 -0
  320. package/dist/application-spec/parse-application-files/spec/components/components.d.ts +3 -4
  321. package/dist/application-spec/parse-application-files/spec/components/filter-criterion-types.d.ts +13 -0
  322. package/dist/application-spec/parse-application-files/spec/components/filter-criterion-types.js +1 -0
  323. package/dist/application-spec/parse-application-files/spec/components/index.d.ts +1 -2
  324. package/dist/application-spec/parse-application-files/spec/components/index.js +1 -1
  325. package/dist/application-spec/parse-application-files/spec/components/sdk-component-entry.d.ts +1 -1
  326. package/dist/application-spec/parse-application-files/spec/components/static-entity-id.d.ts +14 -0
  327. package/dist/application-spec/parse-application-files/spec/components/static-entity-id.js +1 -0
  328. package/dist/application-spec/parse-application-files/spec/components/user-component-entry.d.ts +8 -3
  329. package/dist/application-spec/parse-application-files/spec/components/user-component-entry.js +1 -1
  330. package/dist/application-spec/parse-application-files/spec/components/user-components.d.ts +9 -7
  331. package/dist/application-spec/parse-application-files/spec/components/user-components.js +1 -1
  332. package/dist/application-spec/parse-application-files/spec/expressions/expression-read-types.d.ts +24 -0
  333. package/dist/application-spec/parse-application-files/spec/expressions/expression-read-types.js +1 -0
  334. package/dist/application-spec/parse-application-files/spec/expressions/expression-read.d.ts +13 -0
  335. package/dist/application-spec/parse-application-files/spec/expressions/expression-value-type.d.ts +9 -0
  336. package/dist/application-spec/parse-application-files/spec/expressions/expression-value-type.js +1 -0
  337. package/dist/application-spec/parse-application-files/spec/expressions/expressions.d.ts +12 -30
  338. package/dist/application-spec/parse-application-files/spec/expressions/expressions.js +1 -1
  339. package/dist/application-spec/parse-application-files/spec/expressions/index.d.ts +0 -1
  340. package/dist/application-spec/parse-application-files/spec/expressions/memo-eval-plan.d.ts +4 -71
  341. package/dist/application-spec/parse-application-files/spec/expressions/memo-eval-plan.js +1 -1
  342. package/dist/application-spec/parse-application-files/spec/expressions/user-expressions.d.ts +5 -3
  343. package/dist/application-spec/parse-application-files/spec/expressions/user-expressions.js +1 -1
  344. package/dist/application-spec/parse-application-files/spec/invariants/invariant.d.ts +5 -21
  345. package/dist/application-spec/parse-application-files/spec/invariants/invariants.d.ts +6 -16
  346. package/dist/application-spec/parse-application-files/spec/invariants/invariants.js +1 -1
  347. package/dist/application-spec/parse-application-files/spec/model/aliases.d.ts +3 -9
  348. package/dist/application-spec/parse-application-files/spec/model/common-types.d.ts +6 -14
  349. package/dist/application-spec/parse-application-files/spec/model/defaults.d.ts +6 -31
  350. package/dist/application-spec/parse-application-files/spec/model/entity-types.d.ts +3 -8
  351. package/dist/application-spec/parse-application-files/spec/model/index.d.ts +1 -0
  352. package/dist/application-spec/parse-application-files/spec/model/index.js +1 -1
  353. package/dist/application-spec/parse-application-files/spec/model/model-type-resolution.d.ts +10 -0
  354. package/dist/application-spec/parse-application-files/spec/model/model-type-resolution.js +1 -0
  355. package/dist/application-spec/parse-application-files/spec/model/model-version-key.d.ts +3 -3
  356. package/dist/application-spec/parse-application-files/spec/model/names/action-name.d.ts +3 -7
  357. package/dist/application-spec/parse-application-files/spec/model/names/alias-name.d.ts +3 -7
  358. package/dist/application-spec/parse-application-files/spec/model/names/entity-or-alias-name.d.ts +3 -8
  359. package/dist/application-spec/parse-application-files/spec/model/names/entity-type-name.d.ts +3 -8
  360. package/dist/application-spec/parse-application-files/spec/model/names/expression-name.d.ts +3 -6
  361. package/dist/application-spec/parse-application-files/spec/model/names/instance-name.d.ts +3 -7
  362. package/dist/application-spec/parse-application-files/spec/model/names/invariant-name.d.ts +3 -3
  363. package/dist/application-spec/parse-application-files/spec/model/names/shape-property-name.d.ts +3 -11
  364. package/dist/application-spec/parse-application-files/spec/model/names/violation-type-name.d.ts +3 -3
  365. package/dist/application-spec/parse-application-files/spec/model/presets.d.ts +6 -29
  366. package/dist/application-spec/parse-application-files/spec/sections/actions.d.ts +6 -23
  367. package/dist/application-spec/parse-application-files/spec/sections/app-metadata.d.ts +3 -18
  368. package/dist/application-spec/parse-application-files/spec/sections/application-version.d.ts +3 -7
  369. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-form-elements.d.ts +9 -0
  370. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-form-elements.js +1 -0
  371. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-schema.d.ts +4 -1
  372. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-schema.js +1 -1
  373. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant.js +1 -1
  374. package/dist/application-spec/parse-application-files/spec/sections/data-spec/chunks.d.ts +6 -23
  375. package/dist/application-spec/parse-application-files/spec/sections/data-spec/custom-data-spec.d.ts +1 -16
  376. package/dist/application-spec/parse-application-files/spec/sections/data-spec/data-entry-key.d.ts +3 -9
  377. package/dist/application-spec/parse-application-files/spec/sections/data-spec/data-spec.d.ts +1 -10
  378. package/dist/application-spec/parse-application-files/spec/sections/data-spec/swatch-data-spec.d.ts +1 -14
  379. package/dist/application-spec/parse-application-files/spec/sections/state-value.d.ts +3 -7
  380. package/dist/application-spec/parse-application-files/spec/sections/theme.d.ts +3 -10
  381. package/dist/application-spec/parse-application-files/spec/sections/transformers.d.ts +4 -11
  382. package/dist/application-spec/parse-application-files/spec/sections/ui.d.ts +3 -12
  383. package/dist/client/authorized-client.d.ts +4 -2
  384. package/dist/client/authorized-client.js +1 -1
  385. package/dist/client/contract.d.ts +46 -5
  386. package/dist/client/contract.js +1 -1
  387. package/dist/client/index.d.ts +1 -1
  388. package/dist/client/local-authorized-client.d.ts +3 -1
  389. package/dist/client/local-authorized-client.js +1 -1
  390. package/dist/client/memory-authorized-client.d.ts +4 -1
  391. package/dist/client/memory-authorized-client.js +1 -1
  392. package/dist/client/phoenix-api.d.ts +709 -65
  393. package/dist/configurator/ConfiguratorApp.js +1 -1
  394. package/dist/configurator/app-loader-content/DefaultAppLoaderContent.d.ts +2 -0
  395. package/dist/configurator/app-loader-content/DefaultAppLoaderContent.js +5 -0
  396. package/dist/configurator/app-loader-content/index.d.ts +1 -0
  397. package/dist/configurator/app-loader-content/index.js +1 -0
  398. package/dist/configurator/application-runtime/extensions/selectors.js +1 -1
  399. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-annotation.d.ts +31 -0
  400. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.d.ts +152 -27
  401. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.js +1 -1
  402. package/dist/configurator/application-runtime/extensions/systems/assistant-system/graphql-tools.d.ts +52 -9
  403. package/dist/configurator/application-runtime/extensions/systems/assistant-system/graphql-tools.js +1 -1
  404. package/dist/configurator/application-runtime/extensions/systems/camera-control-system/camera-control-system.d.ts +44 -1
  405. package/dist/configurator/application-runtime/extensions/systems/camera-control-system/camera-control-system.js +1 -1
  406. package/dist/configurator/application-runtime/extensions/systems/canvas-system.d.ts +8 -0
  407. package/dist/configurator/application-runtime/extensions/systems/canvas-system.js +1 -1
  408. package/dist/configurator/application-runtime/extensions/systems/export-system/export-busy-error.d.ts +8 -0
  409. package/dist/configurator/application-runtime/extensions/systems/export-system/export-busy-error.js +1 -0
  410. package/dist/configurator/application-runtime/extensions/systems/export-system/export-system.d.ts +23 -1
  411. package/dist/configurator/application-runtime/extensions/systems/export-system/export-system.js +1 -1
  412. package/dist/configurator/application-runtime/extensions/systems/graphql-system/close-unclosed-braces.d.ts +12 -0
  413. package/dist/configurator/application-runtime/extensions/systems/graphql-system/close-unclosed-braces.js +1 -0
  414. package/dist/configurator/application-runtime/extensions/systems/graphql-system/entity-meta.d.ts +82 -55
  415. package/dist/configurator/application-runtime/extensions/systems/graphql-system/entity-meta.js +1 -1
  416. package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.d.ts +74 -6
  417. package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.js +1 -1
  418. package/dist/configurator/application-runtime/extensions/systems/graphql-system/violations.d.ts +40 -0
  419. package/dist/configurator/application-runtime/extensions/systems/graphql-system/violations.js +1 -0
  420. package/dist/configurator/application-runtime/extensions/systems/image-rendering-system/capture-next-frame.d.ts +10 -0
  421. package/dist/configurator/application-runtime/extensions/systems/image-rendering-system/capture-next-frame.js +1 -0
  422. package/dist/configurator/application-runtime/extensions/systems/image-rendering-system/image-rendering-system.d.ts +22 -5
  423. package/dist/configurator/application-runtime/extensions/systems/image-rendering-system/image-rendering-system.js +1 -1
  424. package/dist/configurator/application-runtime/extensions/systems/index.d.ts +3 -2
  425. package/dist/configurator/application-runtime/extensions/systems/index.js +1 -1
  426. package/dist/configurator/common/configurator-interface.d.ts +132 -7
  427. package/dist/configurator/common/configurator-interface.js +1 -1
  428. package/dist/configurator/common/index.d.ts +2 -2
  429. package/dist/configurator/common/index.js +1 -1
  430. package/dist/configurator/configuration-not-found-page/BuiltInConfigurationNotFoundPage.d.ts +5 -0
  431. package/dist/configurator/configuration-not-found-page/BuiltInConfigurationNotFoundPage.js +1 -0
  432. package/dist/configurator/configuration-not-found-page/ConfigurationNotFoundPageElement.d.ts +6 -0
  433. package/dist/configurator/configuration-not-found-page/ConfigurationNotFoundPageElement.js +1 -0
  434. package/dist/configurator/configuration-not-found-page/index.d.ts +2 -0
  435. package/dist/configurator/configuration-not-found-page/index.js +1 -0
  436. package/dist/configurator/configurator-context/PreviewContextProvider.js +1 -1
  437. package/dist/configurator/configurator-context/ViewportStateSync.d.ts +2 -2
  438. package/dist/configurator/configurator-context/ViewportStateSync.js +1 -1
  439. package/dist/configurator/configurator-context/configurator-hooks/index.d.ts +0 -1
  440. package/dist/configurator/configurator-context/configurator-hooks/index.js +1 -1
  441. package/dist/configurator/configurator-context/configurator-hooks/layout-hooks.d.ts +10 -0
  442. package/dist/configurator/configurator-context/configurator-hooks/layout-hooks.js +1 -1
  443. package/dist/configurator/configurator-context/index.d.ts +0 -5
  444. package/dist/configurator/configurator-context/index.js +1 -1
  445. package/dist/configurator/configurator-error-page/BuiltInConfiguratorErrorPage.d.ts +6 -0
  446. package/dist/configurator/configurator-error-page/BuiltInConfiguratorErrorPage.js +1 -0
  447. package/dist/configurator/configurator-error-page/ConfiguratorErrorPageElement.d.ts +7 -0
  448. package/dist/configurator/configurator-error-page/ConfiguratorErrorPageElement.js +1 -0
  449. package/dist/configurator/configurator-error-page/index.d.ts +2 -0
  450. package/dist/configurator/configurator-error-page/index.js +1 -0
  451. package/dist/configurator/index.d.ts +10 -0
  452. package/dist/configurator/index.js +1 -1
  453. package/dist/configurator/pages/ConfiguratorErrorPage.d.ts +0 -1
  454. package/dist/configurator/pages/ConfiguratorErrorPage.js +1 -1
  455. package/dist/configurator/pages/ConfiguratorNotFoundPage.js +1 -1
  456. package/dist/configurator/pages/DefaultConfiguratorLayout.d.ts +3 -2
  457. package/dist/configurator/pages/DefaultNotAuthenticatedPage.d.ts +8 -0
  458. package/dist/configurator/pages/DefaultNotAuthenticatedPage.js +1 -0
  459. package/dist/configurator/pages/DefaultPresetUi.d.ts +7 -0
  460. package/dist/configurator/pages/DefaultPresetUi.js +1 -0
  461. package/dist/configurator/pages/LoadedConfiguratorDetailPage.js +1 -1
  462. package/dist/configurator/pages/NewConfiguratorPage.js +1 -1
  463. package/dist/configurator/pages/PresetCreationErrorPage.d.ts +1 -1
  464. package/dist/configurator/pages/PresetCreationErrorPage.js +1 -1
  465. package/dist/configurator/pages/RootPage.js +1 -1
  466. package/dist/configurator/pages/default-configurator-elements.d.ts +11 -1
  467. package/dist/configurator/pages/default-configurator-elements.js +1 -1
  468. package/dist/configurator/pages/default-elements/built-in-entity-element.d.ts +10 -0
  469. package/dist/configurator/pages/default-elements/built-in-entity-element.js +1 -0
  470. package/dist/configurator/pages/default-elements/built-in-layout-element.d.ts +10 -0
  471. package/dist/configurator/pages/default-elements/built-in-layout-element.js +1 -0
  472. package/dist/configurator/pages/default-elements/domain-control-elements.d.ts +6 -0
  473. package/dist/configurator/pages/default-elements/domain-control-elements.js +1 -0
  474. package/dist/configurator/pages/default-elements/index.d.ts +5 -0
  475. package/dist/configurator/pages/default-elements/index.js +1 -0
  476. package/dist/configurator/pages/default-elements/recipe-panel-elements.d.ts +3 -0
  477. package/dist/configurator/pages/default-elements/recipe-panel-elements.js +1 -0
  478. package/dist/configurator/pages/default-elements/scene-controls/BuiltInAddEntityFab.d.ts +3 -0
  479. package/dist/configurator/pages/default-elements/scene-controls/BuiltInAddEntityFab.js +1 -0
  480. package/dist/configurator/pages/default-elements/scene-controls/BuiltInDeleteEntityFab.d.ts +3 -0
  481. package/dist/configurator/pages/default-elements/scene-controls/BuiltInDeleteEntityFab.js +1 -0
  482. package/dist/configurator/pages/default-elements/scene-controls/BuiltInNavigationHotspot.d.ts +3 -0
  483. package/dist/configurator/pages/default-elements/scene-controls/BuiltInNavigationHotspot.js +1 -0
  484. package/dist/configurator/pages/default-elements/scene-controls/BuiltInSelectionHotspot.d.ts +3 -0
  485. package/dist/configurator/pages/default-elements/scene-controls/BuiltInSelectionHotspot.js +1 -0
  486. package/dist/configurator/pages/default-elements/scene-controls/BuiltInToolMenuFab.d.ts +3 -0
  487. package/dist/configurator/pages/default-elements/scene-controls/BuiltInToolMenuFab.js +1 -0
  488. package/dist/configurator/pages/default-elements/scene-controls/index.d.ts +6 -0
  489. package/dist/configurator/pages/default-elements/scene-controls/index.js +1 -0
  490. package/dist/configurator/pages/default-elements/scene-controls/scene-control-elements.d.ts +6 -0
  491. package/dist/configurator/pages/default-elements/scene-controls/scene-control-elements.js +1 -0
  492. package/dist/configurator/pages/default-elements/sidebar-footer-elements.d.ts +7 -0
  493. package/dist/configurator/pages/default-elements/sidebar-footer-elements.js +1 -0
  494. package/dist/configurator/pages/default-elements/toolbar-elements.d.ts +7 -0
  495. package/dist/configurator/pages/default-elements/toolbar-elements.js +1 -0
  496. package/dist/configurator/pages/error-boundaries/BuiltInGeneralErrorFallback.d.ts +5 -0
  497. package/dist/configurator/pages/error-boundaries/BuiltInGeneralErrorFallback.js +1 -0
  498. package/dist/configurator/pages/error-boundaries/DevContextFallback.js +1 -1
  499. package/dist/configurator/pages/error-boundaries/DevLoadingFallback.js +1 -1
  500. package/dist/configurator/pages/error-boundaries/GeneralErrorBoundary.js +1 -1
  501. package/dist/configurator/pages/error-boundaries/LoadingErrorBoundary.js +1 -1
  502. package/dist/configurator/pages/error-boundaries/index.d.ts +1 -0
  503. package/dist/configurator/pages/error-boundaries/index.js +1 -1
  504. package/dist/configurator/pages/provider-slots/ConfiguratorResponsiveProvider.d.ts +12 -0
  505. package/dist/configurator/pages/provider-slots/ConfiguratorResponsiveProvider.js +1 -0
  506. package/dist/configurator/pages/provider-slots/ContainerSlotProvider.d.ts +3 -0
  507. package/dist/configurator/pages/provider-slots/ContainerSlotProvider.js +1 -0
  508. package/dist/configurator/pages/provider-slots/LoaderSlotProvider.d.ts +3 -0
  509. package/dist/configurator/pages/provider-slots/LoaderSlotProvider.js +1 -0
  510. package/dist/configurator/pages/provider-slots/MessageHostSlotProvider.d.ts +3 -0
  511. package/dist/configurator/pages/provider-slots/MessageHostSlotProvider.js +1 -0
  512. package/dist/configurator/pages/provider-slots/SceneResourcesSlotProvider.d.ts +3 -0
  513. package/dist/configurator/pages/provider-slots/SceneResourcesSlotProvider.js +1 -0
  514. package/dist/configurator/pages/provider-slots/ThemeSlotProvider.d.ts +3 -0
  515. package/dist/configurator/pages/provider-slots/ThemeSlotProvider.js +1 -0
  516. package/dist/configurator/pages/provider-slots/configurator-provider-slot-elements.d.ts +3 -0
  517. package/dist/configurator/pages/provider-slots/configurator-provider-slot-elements.js +1 -0
  518. package/dist/configurator/pages/provider-slots/index.d.ts +6 -0
  519. package/dist/configurator/pages/provider-slots/index.js +1 -0
  520. package/dist/configurator/pages/ui-elements/BuiltInInvalidDeploymentReload.d.ts +2 -0
  521. package/dist/configurator/pages/ui-elements/BuiltInInvalidDeploymentReload.js +1 -0
  522. package/dist/configurator/pages/ui-elements/configurator-ui-elements.d.ts +3 -0
  523. package/dist/configurator/pages/ui-elements/configurator-ui-elements.js +1 -0
  524. package/dist/configurator/pages/ui-elements/index.d.ts +2 -0
  525. package/dist/configurator/pages/ui-elements/index.js +1 -0
  526. package/dist/configurator/preset-screen-elements/PresetDeviceNotSupportedElement.d.ts +4 -0
  527. package/dist/configurator/preset-screen-elements/PresetDeviceNotSupportedElement.js +1 -0
  528. package/dist/configurator/preset-screen-elements/PresetPageActionElement.d.ts +4 -0
  529. package/dist/configurator/preset-screen-elements/PresetPageActionElement.js +1 -0
  530. package/dist/configurator/preset-screen-elements/index.d.ts +2 -0
  531. package/dist/configurator/preset-screen-elements/index.js +1 -0
  532. package/dist/configurator/scene/cameras/CameraPadding.js +1 -1
  533. package/dist/configurator/scene/index.d.ts +1 -0
  534. package/dist/configurator/scene/index.js +1 -1
  535. package/dist/configurator/scene/scene-controls/DeleteEntityFab.js +1 -1
  536. package/dist/configurator/scene/scene-controls/SelectionHotspot.js +1 -1
  537. package/dist/configurator/scene/scene-controls/ToolFab.d.ts +4 -0
  538. package/dist/configurator/scene/scene-controls/ToolFab.js +1 -1
  539. package/dist/configurator/scene/scene-controls/use-scene-control-tooltip.d.ts +2 -1
  540. package/dist/configurator/scene/scene-entity/scene-controls/SceneEntityHtmlHotspots.js +1 -1
  541. package/dist/configurator/toolbar-actions/index.d.ts +3 -0
  542. package/dist/configurator/toolbar-actions/index.js +1 -0
  543. package/dist/configurator/toolbar-actions/use-assistant-panel.d.ts +18 -0
  544. package/dist/configurator/toolbar-actions/use-assistant-panel.js +1 -0
  545. package/dist/configurator/toolbar-actions/use-measurements.d.ts +35 -0
  546. package/dist/configurator/toolbar-actions/use-measurements.js +1 -0
  547. package/dist/configurator/toolbar-actions/use-toolbar-actions.d.ts +100 -0
  548. package/dist/configurator/toolbar-actions/use-toolbar-actions.js +1 -0
  549. package/dist/configurator/toolbar-actions/use-toolbar-help.d.ts +7 -0
  550. package/dist/configurator/toolbar-actions/use-toolbar-help.js +1 -0
  551. package/dist/configurator/ui/assistant/AssistantChips.d.ts +13 -2
  552. package/dist/configurator/ui/assistant/AssistantChips.js +1 -1
  553. package/dist/configurator/ui/assistant/AssistantComposer.d.ts +4 -0
  554. package/dist/configurator/ui/assistant/AssistantComposer.js +1 -1
  555. package/dist/configurator/ui/assistant/AssistantMarkdown.d.ts +7 -2
  556. package/dist/configurator/ui/assistant/AssistantMarkdown.js +1 -1
  557. package/dist/configurator/ui/assistant/AssistantPanel.js +1 -1
  558. package/dist/configurator/ui/assistant/AssistantThread.d.ts +4 -3
  559. package/dist/configurator/ui/assistant/AssistantThread.js +1 -1
  560. package/dist/configurator/ui/assistant/AssistantThreadItemView.d.ts +27 -0
  561. package/dist/configurator/ui/assistant/AssistantThreadItemView.js +1 -0
  562. package/dist/configurator/ui/assistant/alert/AssistantAlert.d.ts +11 -0
  563. package/dist/configurator/ui/assistant/alert/AssistantAlert.js +1 -0
  564. package/dist/configurator/ui/assistant/alert/index.d.ts +2 -0
  565. package/dist/configurator/ui/assistant/alert/index.js +1 -0
  566. package/dist/configurator/ui/assistant/alert/remark-alerts.d.ts +10 -0
  567. package/dist/configurator/ui/assistant/alert/remark-alerts.js +1 -0
  568. package/dist/configurator/ui/assistant/annotation/AnnotationBadge.d.ts +9 -0
  569. package/dist/configurator/ui/assistant/annotation/AnnotationBadge.js +1 -0
  570. package/dist/configurator/ui/assistant/annotation/AnnotationOverlay.d.ts +6 -0
  571. package/dist/configurator/ui/assistant/annotation/AnnotationOverlay.js +1 -0
  572. package/dist/configurator/ui/assistant/annotation/AnnotationPin.d.ts +14 -0
  573. package/dist/configurator/ui/assistant/annotation/AnnotationPin.js +1 -0
  574. package/dist/configurator/ui/assistant/annotation/AnnotationViewer.d.ts +12 -0
  575. package/dist/configurator/ui/assistant/annotation/AnnotationViewer.js +1 -0
  576. package/dist/configurator/ui/assistant/annotation/MessageAnnotations.d.ts +11 -0
  577. package/dist/configurator/ui/assistant/annotation/MessageAnnotations.js +1 -0
  578. package/dist/configurator/ui/assistant/annotation/annotation-host-context.d.ts +5 -0
  579. package/dist/configurator/ui/assistant/annotation/annotation-host-context.js +1 -0
  580. package/dist/configurator/ui/assistant/annotation/annotation-layout.d.ts +26 -0
  581. package/dist/configurator/ui/assistant/annotation/annotation-layout.js +1 -0
  582. package/dist/configurator/ui/assistant/annotation/editor/AnnotationComment.d.ts +15 -0
  583. package/dist/configurator/ui/assistant/annotation/editor/AnnotationComment.js +1 -0
  584. package/dist/configurator/ui/assistant/annotation/editor/AnnotationEditor.d.ts +18 -0
  585. package/dist/configurator/ui/assistant/annotation/editor/AnnotationEditor.js +1 -0
  586. package/dist/configurator/ui/assistant/annotation/editor/annotation-drawing.d.ts +22 -0
  587. package/dist/configurator/ui/assistant/annotation/editor/annotation-drawing.js +1 -0
  588. package/dist/configurator/ui/assistant/annotation/editor/annotation-pins.d.ts +22 -0
  589. package/dist/configurator/ui/assistant/annotation/editor/annotation-pins.js +1 -0
  590. package/dist/configurator/ui/assistant/annotation/editor/flatten-annotation.d.ts +17 -0
  591. package/dist/configurator/ui/assistant/annotation/editor/flatten-annotation.js +1 -0
  592. package/dist/configurator/ui/assistant/annotation/editor/index.d.ts +1 -0
  593. package/dist/configurator/ui/assistant/annotation/editor/index.js +1 -0
  594. package/dist/configurator/ui/assistant/annotation/index.d.ts +4 -0
  595. package/dist/configurator/ui/assistant/annotation/index.js +1 -0
  596. package/dist/configurator/ui/assistant/annotation/prefers-reduced-motion.d.ts +2 -0
  597. package/dist/configurator/ui/assistant/annotation/prefers-reduced-motion.js +1 -0
  598. package/dist/configurator/ui/assistant/annotation/use-end-on-unmount.d.ts +6 -0
  599. package/dist/configurator/ui/assistant/annotation/use-end-on-unmount.js +1 -0
  600. package/dist/configurator/ui/assistant/assistant-failure.d.ts +17 -7
  601. package/dist/configurator/ui/assistant/assistant-failure.js +1 -1
  602. package/dist/configurator/ui/assistant/attachments/MessageImages.d.ts +19 -0
  603. package/dist/configurator/ui/assistant/attachments/MessageImages.js +1 -0
  604. package/dist/configurator/ui/assistant/attachments/index.d.ts +2 -0
  605. package/dist/configurator/ui/assistant/attachments/index.js +1 -0
  606. package/dist/configurator/ui/assistant/attachments/prepare-image.d.ts +24 -0
  607. package/dist/configurator/ui/assistant/attachments/prepare-image.js +1 -0
  608. package/dist/configurator/ui/assistant/composer/composer-frame.d.ts +15 -0
  609. package/dist/configurator/ui/assistant/composer/composer-frame.js +1 -0
  610. package/dist/configurator/ui/assistant/composer/index.d.ts +1 -0
  611. package/dist/configurator/ui/assistant/composer/index.js +1 -0
  612. package/dist/configurator/ui/assistant/entity-link/AssistantEntityLink.d.ts +1 -1
  613. package/dist/configurator/ui/assistant/entity-link/AssistantEntityLink.js +1 -1
  614. package/dist/configurator/ui/assistant/entity-link/entity-link-state.d.ts +1 -1
  615. package/dist/configurator/ui/assistant/entity-link/index.d.ts +1 -2
  616. package/dist/configurator/ui/assistant/entity-link/index.js +1 -1
  617. package/dist/configurator/ui/assistant/form/AssistantForm.d.ts +19 -0
  618. package/dist/configurator/ui/assistant/form/AssistantForm.js +1 -0
  619. package/dist/configurator/ui/assistant/form/compose-answer.d.ts +11 -0
  620. package/dist/configurator/ui/assistant/form/compose-answer.js +1 -0
  621. package/dist/configurator/ui/assistant/form/describe-build-errors.d.ts +6 -0
  622. package/dist/configurator/ui/assistant/form/describe-build-errors.js +1 -0
  623. package/dist/configurator/ui/assistant/form/form-model.d.ts +37 -0
  624. package/dist/configurator/ui/assistant/form/form-state.d.ts +4 -0
  625. package/dist/configurator/ui/assistant/form/form-state.js +1 -0
  626. package/dist/configurator/ui/assistant/form/index.d.ts +4 -0
  627. package/dist/configurator/ui/assistant/form/index.js +1 -0
  628. package/dist/configurator/ui/assistant/form/parse-form-block.d.ts +10 -0
  629. package/dist/configurator/ui/assistant/form/parse-form-block.js +1 -0
  630. package/dist/configurator/ui/assistant/form/read-form-attributes.d.ts +13 -0
  631. package/dist/configurator/ui/assistant/form/read-form-attributes.js +1 -0
  632. package/dist/configurator/ui/assistant/form/registry/built-in-form-elements.d.ts +29 -0
  633. package/dist/configurator/ui/assistant/form/registry/built-in-form-elements.js +1 -0
  634. package/dist/configurator/ui/assistant/form/registry/create-assistant-form-element.d.ts +31 -0
  635. package/dist/configurator/ui/assistant/form/registry/create-assistant-form-element.js +1 -0
  636. package/dist/configurator/ui/assistant/form/registry/form-element-definition.d.ts +16 -0
  637. package/dist/configurator/ui/assistant/form/registry/form-element-definition.js +1 -0
  638. package/dist/configurator/ui/assistant/form/registry/form-registry.d.ts +31 -0
  639. package/dist/configurator/ui/assistant/form/registry/form-registry.js +1 -0
  640. package/dist/configurator/ui/assistant/form/registry/index.d.ts +6 -0
  641. package/dist/configurator/ui/assistant/form/registry/index.js +1 -0
  642. package/dist/configurator/ui/assistant/form/registry/use-form-registry.d.ts +8 -0
  643. package/dist/configurator/ui/assistant/form/registry/use-form-registry.js +1 -0
  644. package/dist/configurator/ui/assistant/form-elements/FormCard.d.ts +9 -0
  645. package/dist/configurator/ui/assistant/form-elements/FormCard.js +1 -0
  646. package/dist/configurator/ui/assistant/form-elements/FormConfirm.d.ts +9 -0
  647. package/dist/configurator/ui/assistant/form-elements/FormConfirm.js +1 -0
  648. package/dist/configurator/ui/assistant/form-elements/FormGroup.d.ts +6 -0
  649. package/dist/configurator/ui/assistant/form-elements/FormGroup.js +1 -0
  650. package/dist/configurator/ui/assistant/form-elements/FormNumber.d.ts +9 -0
  651. package/dist/configurator/ui/assistant/form-elements/FormNumber.js +1 -0
  652. package/dist/configurator/ui/assistant/form-elements/FormOptions.d.ts +6 -0
  653. package/dist/configurator/ui/assistant/form-elements/FormOptions.js +1 -0
  654. package/dist/configurator/ui/assistant/form-elements/FormReply.d.ts +6 -0
  655. package/dist/configurator/ui/assistant/form-elements/FormReply.js +1 -0
  656. package/dist/configurator/ui/assistant/form-elements/FormSwatch.d.ts +10 -0
  657. package/dist/configurator/ui/assistant/form-elements/FormSwatch.js +1 -0
  658. package/dist/configurator/ui/assistant/form-elements/FormText.d.ts +6 -0
  659. package/dist/configurator/ui/assistant/form-elements/FormText.js +1 -0
  660. package/dist/configurator/ui/assistant/form-elements/clamp-form-number.d.ts +10 -0
  661. package/dist/configurator/ui/assistant/form-elements/clamp-form-number.js +1 -0
  662. package/dist/configurator/ui/assistant/form-elements/form-element-props.d.ts +38 -0
  663. package/dist/configurator/ui/assistant/form-elements/index.d.ts +9 -0
  664. package/dist/configurator/ui/assistant/form-elements/index.js +1 -0
  665. package/dist/configurator/ui/assistant/index.d.ts +13 -0
  666. package/dist/configurator/ui/assistant/index.js +1 -1
  667. package/dist/configurator/ui/assistant/popover/AssistantPopover.d.ts +24 -0
  668. package/dist/configurator/ui/assistant/popover/AssistantPopover.js +1 -0
  669. package/dist/configurator/ui/assistant/popover/index.d.ts +1 -0
  670. package/dist/configurator/ui/assistant/popover/index.js +1 -0
  671. package/dist/configurator/ui/assistant/reference-link/AssistantReferenceLink.d.ts +16 -0
  672. package/dist/configurator/ui/assistant/reference-link/AssistantReferenceLink.js +1 -0
  673. package/dist/configurator/ui/assistant/reference-link/assistant-link-target.d.ts +34 -0
  674. package/dist/configurator/ui/assistant/reference-link/assistant-link-target.js +1 -0
  675. package/dist/configurator/ui/assistant/reference-link/assistant-reference-details.d.ts +25 -0
  676. package/dist/configurator/ui/assistant/reference-link/assistant-reference-details.js +1 -0
  677. package/dist/configurator/ui/assistant/reference-link/index.d.ts +3 -0
  678. package/dist/configurator/ui/assistant/reference-link/index.js +1 -0
  679. package/dist/configurator/ui/assistant/reference-link/reference-styles.d.ts +12 -0
  680. package/dist/configurator/ui/assistant/reference-link/reference-styles.js +1 -0
  681. package/dist/configurator/ui/assistant/reference-link/use-assistant-reference-details.d.ts +8 -0
  682. package/dist/configurator/ui/assistant/reference-link/use-assistant-reference-details.js +1 -0
  683. package/dist/configurator/ui/assistant/resource-image/AssistantImage.d.ts +9 -0
  684. package/dist/configurator/ui/assistant/resource-image/AssistantImage.js +1 -0
  685. package/dist/configurator/ui/assistant/resource-image/index.d.ts +3 -0
  686. package/dist/configurator/ui/assistant/resource-image/index.js +1 -0
  687. package/dist/configurator/ui/assistant/resource-image/resource-path.d.ts +2 -0
  688. package/dist/configurator/ui/assistant/resource-image/resource-path.js +1 -0
  689. package/dist/configurator/ui/assistant/resource-image/use-resource-image-url.d.ts +5 -0
  690. package/dist/configurator/ui/assistant/resource-image/use-resource-image-url.js +1 -0
  691. package/dist/configurator/ui/assistant/screenshots/ScreenshotThumbnails.d.ts +9 -0
  692. package/dist/configurator/ui/assistant/screenshots/ScreenshotThumbnails.js +1 -0
  693. package/dist/configurator/ui/assistant/screenshots/index.d.ts +3 -0
  694. package/dist/configurator/ui/assistant/screenshots/index.js +1 -0
  695. package/dist/configurator/ui/assistant/screenshots/tool-screenshots.d.ts +16 -0
  696. package/dist/configurator/ui/assistant/screenshots/tool-screenshots.js +1 -0
  697. package/dist/configurator/ui/assistant/screenshots/use-screenshot-src.d.ts +8 -0
  698. package/dist/configurator/ui/assistant/screenshots/use-screenshot-src.js +1 -0
  699. package/dist/configurator/ui/assistant/streamed-markdown.d.ts +15 -2
  700. package/dist/configurator/ui/assistant/streamed-markdown.js +2 -2
  701. package/dist/configurator/ui/assistant/thread-items.d.ts +13 -1
  702. package/dist/configurator/ui/assistant/thread-items.js +1 -1
  703. package/dist/configurator/ui/assistant/tool-chip.d.ts +19 -9
  704. package/dist/configurator/ui/assistant/tool-chip.js +1 -1
  705. package/dist/configurator/ui/assistant/use-assistant-composer.d.ts +69 -0
  706. package/dist/configurator/ui/assistant/use-assistant-composer.js +2 -0
  707. package/dist/configurator/ui/assistant/use-assistant-thread.d.ts +52 -0
  708. package/dist/configurator/ui/assistant/use-assistant-thread.js +1 -0
  709. package/dist/configurator/ui/assistant/use-follow-stream.js +1 -1
  710. package/dist/configurator/ui/assistant/use-load-older-on-top.d.ts +22 -0
  711. package/dist/configurator/ui/assistant/use-load-older-on-top.js +1 -0
  712. package/dist/configurator/ui/configurator-layout/slots/canvas/GPUAccelerationDisabled.js +1 -1
  713. package/dist/configurator/ui/configurator-layout/slots/canvas/LayoutCanvas.js +1 -1
  714. package/dist/configurator/ui/configurator-layout/slots/canvas/SharedCanvas.js +1 -1
  715. package/dist/configurator/ui/configurator-layout/slots/canvas/WebGLNotSupported.js +1 -1
  716. package/dist/configurator/ui/configurator-layout/slots/mobile-tabs/use-mobile-tabs.d.ts +1 -1
  717. package/dist/configurator/ui/configurator-layout/slots/mobile-tabs/use-mobile-tabs.js +1 -1
  718. package/dist/configurator/ui/configurator-layout/slots/readonly-banner/CloneToEditDialog.js +1 -1
  719. package/dist/configurator/ui/configurator-layout/slots/services/InvariantViolations.js +1 -1
  720. package/dist/configurator/ui/configurator-layout/slots/services/Services.js +1 -1
  721. package/dist/configurator/ui/configurator-layout/slots/sidebar-tabs/use-sidebar-tabs.d.ts +1 -1
  722. package/dist/configurator/ui/configurator-layout/slots/sidebar-tabs/use-sidebar-tabs.js +1 -1
  723. package/dist/configurator/ui/configurator-layout/universal/DesktopPreview.js +1 -1
  724. package/dist/configurator/ui/configurator-layout/universal/ExportingOverlay.d.ts +5 -0
  725. package/dist/configurator/ui/configurator-layout/universal/ExportingOverlay.js +1 -0
  726. package/dist/configurator/ui/configurator-layout/universal/Layout.js +1 -1
  727. package/dist/configurator/ui/configurator-layout/universal/MobilePreview.js +1 -1
  728. package/dist/configurator/ui/configurator-layout/universal/use-layout-scene-safe-area.d.ts +1 -1
  729. package/dist/configurator/ui/configurator-layout/universal/use-layout-scene-safe-area.js +1 -1
  730. package/dist/configurator/ui/configurator-layout/universal/use-scene-safe-area.d.ts +1 -1
  731. package/dist/configurator/ui/index.d.ts +1 -0
  732. package/dist/configurator/ui/index.js +1 -1
  733. package/dist/configurator/ui/legacy/chat/MobileChat.js +1 -1
  734. package/dist/configurator/ui/legacy/layout/common/CommonFinalizeButton.js +1 -1
  735. package/dist/configurator/ui/legacy/layout/common/CommonSummaryButton.js +1 -1
  736. package/dist/configurator/ui/legacy/layout/common/CommonTopNavigation.js +1 -1
  737. package/dist/configurator/ui/legacy/layout/common/ReactiveInterfaceLayout.js +1 -1
  738. package/dist/configurator/ui/legacy/layout/common/ResponsiveFinalizeButton.js +1 -1
  739. package/dist/configurator/ui/legacy/layout/common/SummaryReadLayout.js +1 -1
  740. package/dist/configurator/ui/legacy/layout/simple/SimpleOwnerLayout.js +1 -1
  741. package/dist/configurator/ui/legacy/layout/simple/SimpleSidebar.js +1 -1
  742. package/dist/configurator/ui/legacy/layout/simple/SimpleTopNavigation.js +1 -1
  743. package/dist/configurator/ui/legacy/layout/steps/StepsNavigation.js +1 -1
  744. package/dist/configurator/ui/legacy/layout/steps/StepsOwnerLayout.js +1 -1
  745. package/dist/configurator/ui/legacy/layout/steps/StepsSideBar.js +1 -1
  746. package/dist/configurator/ui/legacy/layout/steps/StepsSidebarFooter.js +1 -1
  747. package/dist/configurator/ui/legacy/layout/tabs/TabsOwnerLayout.js +1 -1
  748. package/dist/configurator/ui/legacy/layout/tabs/TabsSidebar.js +1 -1
  749. package/dist/configurator/ui/legacy/toolbar/common/DimensionUnitSelector.js +1 -1
  750. package/dist/configurator/ui/legacy/toolbar/common/MeasurementsIndicatorsSwitch.js +1 -1
  751. package/dist/configurator/ui/legacy/toolbar/desktop-toolbar/FullscreenToolbarAction.js +1 -1
  752. package/dist/configurator/ui/legacy/toolbar/desktop-toolbar/HelpToolbarAction.js +1 -1
  753. package/dist/configurator/ui/legacy/toolbar/desktop-toolbar/MeasurementsToolbarAction.js +1 -1
  754. package/dist/configurator/ui/legacy/toolbar/desktop-toolbar/UndoRedoToolbarGroup.js +1 -1
  755. package/dist/configurator/ui/phoenix-layout-elements/AppLoader.d.ts +0 -7
  756. package/dist/configurator/ui/phoenix-layout-elements/AppLoader.js +2 -6
  757. package/dist/configurator/ui/phoenix-layout-elements/AssistantToolbarButton.js +1 -1
  758. package/dist/configurator/ui/phoenix-layout-elements/EnterFullscreenToolbarButton.js +1 -1
  759. package/dist/configurator/ui/phoenix-layout-elements/ExitFullscreenToolbarButton.js +1 -1
  760. package/dist/configurator/ui/phoenix-layout-elements/HelpToolbarButton.js +1 -1
  761. package/dist/configurator/ui/phoenix-layout-elements/LanguageMenuAction.js +1 -1
  762. package/dist/configurator/ui/phoenix-layout-elements/LanguageToolbarButton.js +1 -1
  763. package/dist/configurator/ui/phoenix-layout-elements/LayoutCustomOwnerUi.d.ts +1 -0
  764. package/dist/configurator/ui/phoenix-layout-elements/LayoutCustomOwnerUi.js +1 -1
  765. package/dist/configurator/ui/phoenix-layout-elements/LayoutCustomReadUi.d.ts +1 -0
  766. package/dist/configurator/ui/phoenix-layout-elements/LayoutCustomReadUi.js +1 -1
  767. package/dist/configurator/ui/phoenix-layout-elements/MeasurementsMenuAction.js +1 -1
  768. package/dist/configurator/ui/phoenix-layout-elements/MeasurementsToolbarButton.js +1 -1
  769. package/dist/configurator/ui/phoenix-layout-elements/RedoToolbarButton.js +1 -1
  770. package/dist/configurator/ui/phoenix-layout-elements/ShareToolbarButton.js +1 -1
  771. package/dist/configurator/ui/phoenix-layout-elements/UndoToolbarButton.js +1 -1
  772. package/dist/configurator/ui/phoenix-layout-elements/header/common/back-button/use-go-back-action.js +1 -1
  773. package/dist/configurator/ui/phoenix-layout-elements/header/common/horizontal-tabs/DesktopHorizontalTabs.js +1 -1
  774. package/dist/configurator/ui/phoenix-layout-elements/header/common/step-navigation/DesktopNavigationSteps.d.ts +1 -1
  775. package/dist/configurator/ui/phoenix-layout-elements/header/common/step-navigation/DesktopNavigationSteps.js +1 -1
  776. package/dist/configurator/ui/phoenix-layout-elements/header/common/step-navigation/StepsNavigation.d.ts +2 -8
  777. package/dist/configurator/ui/phoenix-layout-elements/header/common/step-navigation/StepsNavigation.js +1 -1
  778. package/dist/configurator/ui/phoenix-layout-elements/index.d.ts +8 -1
  779. package/dist/configurator/ui/phoenix-layout-elements/index.js +1 -1
  780. package/dist/configurator/ui/phoenix-layout-elements/measurements/DimensionUnitSelector.js +1 -1
  781. package/dist/configurator/ui/phoenix-layout-elements/measurements/MeasurementsIndicatorsSwitch.js +1 -1
  782. package/dist/configurator/ui/phoenix-layout-elements/share/ShareModal.js +1 -1
  783. package/dist/configurator/ui/phoenix-layout-elements/share/use-share.d.ts +7 -8
  784. package/dist/configurator/ui/phoenix-layout-elements/share/use-share.js +1 -1
  785. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/basic/BasicFinalizeButton.js +1 -1
  786. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/basic/use-basic-sidebar-footer.js +1 -1
  787. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/common/CustomFinalizeButton.js +1 -1
  788. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/common/EnterSummaryButton.js +1 -1
  789. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/common/FinalizeActions.js +1 -1
  790. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/common/NextStepButton.js +1 -1
  791. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/common/PreviousStepButton.js +1 -1
  792. package/dist/configurator/ui/preset-layout/CategoryPresetUi.js +1 -1
  793. package/dist/configurator/ui/preset-layout/PresetUi.d.ts +4 -2
  794. package/dist/configurator/ui/preset-layout/PresetUi.js +1 -1
  795. package/dist/configurator/ui/preset-layout/index.d.ts +6 -1
  796. package/dist/configurator/ui/preset-layout/index.js +1 -1
  797. package/dist/configurator/ui/save-message-snackbars/SaveMessageSnackbars.d.ts +10 -0
  798. package/dist/configurator/ui/save-message-snackbars/SaveMessageSnackbars.js +1 -0
  799. package/dist/configurator/ui/save-message-snackbars/index.d.ts +1 -0
  800. package/dist/configurator/ui/save-message-snackbars/index.js +1 -0
  801. package/dist/docs/3d-scene/animations-basic.mdx +0 -4
  802. package/dist/docs/3d-scene/camera-based-hiding.mdx +0 -2
  803. package/dist/docs/3d-scene/cameras/custom.mdx +4 -4
  804. package/dist/docs/3d-scene/cameras/fit-during-drag.mdx +0 -4
  805. package/dist/docs/3d-scene/cameras/locks.mdx +0 -4
  806. package/dist/docs/3d-scene/cameras/transitions.mdx +0 -2
  807. package/dist/docs/3d-scene/engraving.mdx +0 -4
  808. package/dist/docs/3d-scene/materials/custom.mdx +1 -2
  809. package/dist/docs/3d-scene/materials/inherit.mdx +0 -4
  810. package/dist/docs/3d-scene/materials/multilevel.mdx +0 -47
  811. package/dist/docs/3d-scene/materials/override.mdx +0 -4
  812. package/dist/docs/3d-scene/materials/simple.mdx +0 -4
  813. package/dist/docs/3d-scene/materials/transformer.mdx +0 -4
  814. package/dist/docs/3d-scene/materials/transition.mdx +0 -4
  815. package/dist/docs/3d-scene/materials/transmissive.mdx +0 -4
  816. package/dist/docs/3d-scene/postprocessing.mdx +0 -2
  817. package/dist/docs/3d-scene/rendering/basic.mdx +5 -9
  818. package/dist/docs/3d-scene/rendering/custom-entity.mdx +0 -6
  819. package/dist/docs/3d-scene/rendering/lights/ambient-light.mdx +0 -2
  820. package/dist/docs/3d-scene/rendering/lights/directional-light.mdx +0 -2
  821. package/dist/docs/3d-scene/rendering/lights/point-light.mdx +0 -2
  822. package/dist/docs/3d-scene/rendering/lights/rect-area-light.mdx +0 -2
  823. package/dist/docs/3d-scene/rendering/lights/spot-light.mdx +0 -2
  824. package/dist/docs/3d-scene/rendering/object-groups.mdx +0 -2
  825. package/dist/docs/3d-scene/rendering/objects.mdx +0 -4
  826. package/dist/docs/3d-scene/rendering/scene-entity-object.mdx +0 -43
  827. package/dist/docs/3d-scene/rendering/smma.mdx +0 -2
  828. package/dist/docs/3d-scene/rendering/soft-shadows.mdx +0 -2
  829. package/dist/docs/3d-scene/rendering/transformer.mdx +1 -3
  830. package/dist/docs/complex-use-cases/custom-ui-on-root-level.mdx +0 -1
  831. package/dist/docs/complex-use-cases/filtered-controls-with-fix-dialog.mdx +19 -19
  832. package/dist/docs/complex-use-cases/focus-mode.mdx +2 -0
  833. package/dist/docs/complex-use-cases/navigation-guard.mdx +81 -19
  834. package/dist/docs/complex-use-cases/navigation-reset-selection.mdx +28 -65
  835. package/dist/docs/complex-use-cases/navigation-reset-undo.mdx +16 -20
  836. package/dist/docs/complex-use-cases/sketching.mdx +2 -10
  837. package/dist/docs/controls/custom.mdx +88 -87
  838. package/dist/docs/controls/manage-child-entities/entitychildrenlist.mdx +0 -4
  839. package/dist/docs/controls/nullable-attributes.mdx +0 -2
  840. package/dist/docs/controls/scene/custom-controls.mdx +7 -8
  841. package/dist/docs/controls/scene/html-hotspots.mdx +0 -4
  842. package/dist/docs/controls/scene/object-html-hotspots.mdx +0 -4
  843. package/dist/docs/controls/select-attribute/cardselect.mdx +0 -4
  844. package/dist/docs/controls/select-attribute/listselect.mdx +0 -4
  845. package/dist/docs/controls/select-attribute/select.mdx +0 -4
  846. package/dist/docs/controls/select-attribute/swatchselect.mdx +0 -4
  847. package/dist/docs/controls/select-attribute/switchselect.mdx +0 -4
  848. package/dist/docs/controls/select-attribute/toggleselect.mdx +0 -4
  849. package/dist/docs/controls/select-child-entity/cardselect.mdx +3 -6
  850. package/dist/docs/controls/select-child-entity/listselect.mdx +5 -11
  851. package/dist/docs/controls/select-child-entity/toggleselect.mdx +4 -10
  852. package/dist/docs/controls/text-input.mdx +90 -19
  853. package/dist/docs/demos/glass.mdx +0 -4
  854. package/dist/docs/demos/heater.mdx +0 -10
  855. package/dist/docs/demos/office-chair.mdx +0 -8
  856. package/dist/docs/demos/office-desk.mdx +0 -8
  857. package/dist/docs/demos/ring.mdx +0 -9
  858. package/dist/docs/dimensions/3d-scene-integration/angle-indicators.mdx +0 -2
  859. package/dist/docs/dimensions/3d-scene-integration/editable-angle-indicator.mdx +0 -2
  860. package/dist/docs/dimensions/3d-scene-integration/editable-distance-dimension-indicator.mdx +0 -14
  861. package/dist/docs/dimensions/3d-scene-integration/editable-offset-indicator.mdx +0 -6
  862. package/dist/docs/dimensions/3d-scene-integration/editable-size-indicator.mdx +0 -4
  863. package/dist/docs/dimensions/3d-scene-integration/list-selector-dimension-indicator.mdx +0 -16
  864. package/dist/docs/dimensions/3d-scene-integration/offset-indicator.mdx +0 -6
  865. package/dist/docs/dimensions/3d-scene-integration/overlap-offset-demo.mdx +0 -6
  866. package/dist/docs/dimensions/basic-concepts/dimension-data-unit.mdx +0 -12
  867. package/dist/docs/dimensions/basic-concepts/dimension-unit-config.mdx +0 -12
  868. package/dist/docs/dimensions/input-controls/distance-input.mdx +0 -12
  869. package/dist/docs/dimensions/input-controls/distance-slider.mdx +6 -18
  870. package/dist/docs/dimensions/selection-controls/list-selector.mdx +0 -14
  871. package/dist/docs/dimensions/selection-controls/toggle-selector.mdx +0 -14
  872. package/dist/docs/drag-and-drop/drag-handle.mdx +0 -1
  873. package/dist/docs/drag-and-drop/hotspot-handle.mdx +0 -1
  874. package/dist/docs/drag-and-drop/no-selection.mdx +0 -1
  875. package/dist/docs/drag-and-drop/planes.mdx +0 -3
  876. package/dist/docs/drag-and-drop/room-planner.mdx +1 -7
  877. package/dist/docs/drag-and-drop/rotatable.mdx +0 -1
  878. package/dist/docs/drag-and-drop/snapping/auto-rotation-demo.mdx +0 -2
  879. package/dist/docs/drag-and-drop/snapping/label-matching-demo.mdx +0 -2
  880. package/dist/docs/drag-and-drop/snapping/multi-snap-composition-demo.mdx +0 -2
  881. package/dist/docs/drag-and-drop/snapping/nested-entity-demo.mdx +0 -2
  882. package/dist/docs/drag-and-drop/snapping/priority-demo.mdx +0 -2
  883. package/dist/docs/drag-and-drop/snapping/snap-axis-demo.mdx +0 -2
  884. package/dist/docs/drag-and-drop/snapping/snap-edge-demo.mdx +0 -2
  885. package/dist/docs/drag-and-drop/snapping/snap-plane-demo.mdx +0 -5
  886. package/dist/docs/drag-and-drop/snapping/snap-point-demo.mdx +0 -2
  887. package/dist/docs/drag-and-drop/spatial-constraints/collision-system.mdx +0 -2
  888. package/dist/docs/drag-and-drop/spatial-constraints/disjoint-and-within.mdx +0 -6
  889. package/dist/docs/drag-and-drop/spatial-constraints/geometry-override.mdx +0 -4
  890. package/dist/docs/drag-and-drop/spatial-constraints/multiple-collision-meshes.mdx +0 -4
  891. package/dist/docs/drag-and-drop/spatial-constraints/touches.mdx +0 -4
  892. package/dist/docs/drag-and-drop/swap.mdx +0 -4
  893. package/dist/docs/fabs/basic.mdx +12 -14
  894. package/dist/docs/fabs/layout.mdx +0 -7
  895. package/dist/docs/index.json +98 -4
  896. package/dist/docs/integrations/lifecycle-providers.mdx +0 -12
  897. package/dist/docs/integrations/onloadprovider.mdx +0 -3
  898. package/dist/docs/integrations/webcomponent-api/basics.mdx +8 -2
  899. package/dist/docs/integrations/webcomponent-api/preset-tags.mdx +4 -1
  900. package/dist/docs/layouts/custom-layout.mdx +624 -192
  901. package/dist/docs/layouts/custom-price.mdx +0 -2
  902. package/dist/docs/layouts/custom-theme-handler.mdx +0 -4
  903. package/dist/docs/layouts/gallery/ardent-compressor.mdx +3485 -0
  904. package/dist/docs/layouts/gallery/corvid-drone.mdx +3399 -0
  905. package/dist/docs/layouts/gallery/fenwick-window.mdx +2778 -0
  906. package/dist/docs/layouts/gallery/ferrule-bar-station.mdx +6540 -0
  907. package/dist/docs/layouts/gallery/kestrel-kettle.mdx +1829 -0
  908. package/dist/docs/layouts/gallery/nightjar-guitar.mdx +3665 -0
  909. package/dist/docs/layouts/gallery/sunfold-solar.mdx +2657 -0
  910. package/dist/docs/layouts/gallery/tidepool-aquascape.mdx +5157 -0
  911. package/dist/docs/layouts/header/custom.mdx +0 -2
  912. package/dist/docs/layouts/icon-sets.mdx +0 -6
  913. package/dist/docs/layouts/phoenix-elements.mdx +0 -4
  914. package/dist/docs/layouts/phoenix-handlers.mdx +19 -28
  915. package/dist/docs/layouts/presets/action-and-overlay.mdx +0 -8
  916. package/dist/docs/layouts/presets/custom.mdx +6 -13
  917. package/dist/docs/layouts/preview/always-expand.mdx +4 -14
  918. package/dist/docs/layouts/preview/always.mdx +4 -14
  919. package/dist/docs/layouts/preview/auto-presets.mdx +4 -14
  920. package/dist/docs/layouts/preview/auto.mdx +4 -14
  921. package/dist/docs/layouts/preview/never.mdx +4 -14
  922. package/dist/docs/layouts/sidebar/in-a-custom-layout.mdx +18 -13
  923. package/dist/docs/layouts/sidebar/property-page-stack.mdx +0 -2
  924. package/dist/docs/layouts/sidebar/property-page.mdx +0 -2
  925. package/dist/docs/layouts/sidebar/tabs.mdx +0 -4
  926. package/dist/docs/layouts/sidebar-footer/custom.mdx +0 -2
  927. package/dist/docs/layouts/sidebar-footer/universal.mdx +0 -10
  928. package/dist/docs/layouts/tool-controls.mdx +0 -1
  929. package/dist/docs/layouts/toolbar.mdx +0 -4
  930. package/dist/docs/layouts/universal.mdx +2 -22
  931. package/dist/docs/other-features/client-side-rendering/camera-padding.mdx +0 -2
  932. package/dist/docs/other-features/client-side-rendering/custom.mdx +0 -6
  933. package/dist/docs/other-features/client-side-rendering/declarative.mdx +1 -5
  934. package/dist/docs/other-features/client-side-rendering/postprocessing.mdx +0 -6
  935. package/dist/docs/other-features/component-filters.mdx +0 -7
  936. package/dist/docs/other-features/currency.mdx +5 -6
  937. package/dist/docs/other-features/domain-actions.mdx +0 -5
  938. package/dist/docs/other-features/dynamic-component-attachments.mdx +75 -46
  939. package/dist/docs/other-features/error-5xx.mdx +1 -15
  940. package/dist/docs/other-features/navigation-hotspot.mdx +2 -5
  941. package/dist/docs/other-features/not-found-404.mdx +1 -15
  942. package/dist/docs/other-features/projected-entities.mdx +0 -5
  943. package/dist/docs/other-features/side-effects.mdx +0 -23
  944. package/dist/docs/other-features/transformers.mdx +101 -96
  945. package/dist/docs/other-features/violation-messages.mdx +0 -4
  946. package/dist/docs/other-features/violation-severity.mdx +2 -3
  947. package/dist/docs/performance/clone-highlight.mdx +0 -7
  948. package/dist/docs/performance/dynamic-components.mdx +0 -6
  949. package/dist/docs/performance/editable-dimension-stress-test.mdx +0 -2
  950. package/dist/docs/performance/fast-highlight.mdx +0 -7
  951. package/dist/docs/performance/general.mdx +0 -7
  952. package/dist/docs/performance/render-isolation.mdx +0 -6
  953. package/dist/docs/phoenix/admin.mdx +75 -100
  954. package/dist/docs/phoenix/application-states.mdx +45 -27
  955. package/dist/docs/phoenix/clerk-sign-in.mdx +1 -1
  956. package/dist/docs/phoenix/components.mdx +59 -46
  957. package/dist/docs/phoenix/configurator-interface.mdx +420 -165
  958. package/dist/docs/phoenix/deployments.mdx +11 -1
  959. package/dist/docs/phoenix/domain-model.mdx +26 -16
  960. package/dist/docs/phoenix/expression-context.mdx +3 -29
  961. package/dist/docs/phoenix/finalization.mdx +1 -1
  962. package/dist/docs/phoenix/getting-started.mdx +5 -5
  963. package/dist/docs/phoenix/layout-slots.mdx +44 -23
  964. package/dist/docs/phoenix/localization.mdx +68 -54
  965. package/dist/docs/phoenix/migration-guide.mdx +22 -21
  966. package/dist/docs/phoenix/phoenix-cli.mdx +84 -27
  967. package/dist/docs/phoenix/project-structure.mdx +85 -66
  968. package/dist/docs/phoenix/quickstart.mdx +8 -10
  969. package/dist/docs/phoenix/sdk-builder-workflow.mdx +13 -17
  970. package/dist/docs/phoenix/sessions-and-access.mdx +2 -0
  971. package/dist/docs/phoenix/state-management.mdx +18 -16
  972. package/dist/docs/phoenix/testing.mdx +13 -0
  973. package/dist/docs/phoenix/webhooks.mdx +9 -1
  974. package/dist/docs/recipes-and-delete/delete-entity.mdx +3 -6
  975. package/dist/docs/recipes-and-delete/dynamic-root-entity.mdx +0 -2
  976. package/dist/docs/recipes-and-delete/grouped-button.mdx +0 -3
  977. package/dist/docs/recipes-and-delete/grouped-panel.mdx +0 -3
  978. package/dist/docs/recipes-and-delete/horizontal.mdx +3 -6
  979. package/dist/docs/recipes-and-delete/recipe-hierarchy-lists.mdx +0 -3
  980. package/dist/docs/recipes-and-delete/recipe-hierarchy-selection.mdx +0 -5
  981. package/dist/docs/recipes-and-delete/replace-dropdown.mdx +3 -6
  982. package/dist/docs/recipes-and-delete/replace-panel.mdx +0 -7
  983. package/dist/docs/recipes-and-delete/simple.mdx +3 -6
  984. package/dist/docs/recipes-and-delete/vertical.mdx +3 -6
  985. package/dist/docs/relations/aliases.mdx +0 -2
  986. package/dist/docs/relations/all-of-type.mdx +0 -4
  987. package/dist/docs/relations/child-nullable.mdx +0 -4
  988. package/dist/docs/relations/child-required.mdx +0 -2
  989. package/dist/docs/relations/collection-direct.mdx +0 -4
  990. package/dist/docs/relations/collection-indirect.mdx +0 -4
  991. package/dist/docs/relations/collection-multiple.mdx +0 -2
  992. package/dist/docs/relations/cross-reference.mdx +0 -2
  993. package/dist/docs/relations/hierarchy.mdx +0 -2
  994. package/dist/docs/selection-and-highlight/canvas.mdx +0 -1
  995. package/dist/docs/selection-and-highlight/disable-highlight-per-object.mdx +0 -1
  996. package/dist/docs/selection-and-highlight/disable-highlight.mdx +0 -1
  997. package/dist/docs/selection-and-highlight/effects/outline.mdx +0 -3
  998. package/dist/docs/selection-and-highlight/effects/overlay.mdx +0 -3
  999. package/dist/docs/selection-and-highlight/fast-emissive-highlight.mdx +0 -3
  1000. package/dist/docs/selection-and-highlight/group-highlighting.mdx +0 -1
  1001. package/dist/docs/selection-and-highlight/hierarchy.mdx +100 -151
  1002. package/dist/docs/selection-and-highlight/hotspots.mdx +2 -1
  1003. package/dist/domain/application/GetApplicationWrapperHandler.d.ts +1 -1
  1004. package/dist/domain/application/GetThemeHandler.d.ts +1 -1
  1005. package/dist/domain/application/GetWebComponentOptions.d.ts +1 -1
  1006. package/dist/domain/application/application-config.d.ts +6 -26
  1007. package/dist/domain/application/assistant/assistant-fields.d.ts +1 -1
  1008. package/dist/domain/application/assistant/assistant-value-type.d.ts +1 -1
  1009. package/dist/domain/application/assistant/build-assistant-lenses.d.ts +1 -2
  1010. package/dist/domain/application/assistant/build-assistant-lenses.js +1 -1
  1011. package/dist/domain/application/assistant/build-assistant-manifest.d.ts +1 -2
  1012. package/dist/domain/application/assistant/build-assistant-manifest.js +1 -1
  1013. package/dist/domain/application/assistant/generate-assistant-prompt.d.ts +3 -1
  1014. package/dist/domain/application/assistant/generate-assistant-prompt.js +1 -1
  1015. package/dist/domain/application/assistant/index.d.ts +0 -3
  1016. package/dist/domain/application/assistant/index.js +1 -1
  1017. package/dist/domain/application/assistant/session-setup/AssistantSetupHandler.d.ts +1 -1
  1018. package/dist/domain/application/assistant/session-setup/apply-assistant-setup.d.ts +1 -1
  1019. package/dist/domain/application/assistant/session-setup/apply-assistant-setup.js +1 -1
  1020. package/dist/domain/application/assistant/session-setup/assistant-setup-manifest.d.ts +5 -5
  1021. package/dist/domain/application/assistant/session-setup/assistant-setup-manifest.js +1 -1
  1022. package/dist/domain/application/assistant/session-setup/create-session-assistant.d.ts +1 -2
  1023. package/dist/domain/application/assistant-field-options.d.ts +1 -1
  1024. package/dist/domain/application/assistant-mutations.d.ts +1 -1
  1025. package/dist/domain/application/assistant-mutations.js +1 -1
  1026. package/dist/domain/application/assistant-recipe-groups.d.ts +4 -2
  1027. package/dist/domain/application/configurator-builder.d.ts +7 -2
  1028. package/dist/domain/application/configurator-builder.js +1 -1
  1029. package/dist/domain/application/create-initial-published-data.d.ts +2 -1
  1030. package/dist/domain/application/index.d.ts +1 -1
  1031. package/dist/domain/application/index.js +1 -1
  1032. package/dist/domain/application/published-data/DataRowValidatorHandler.d.ts +1 -1
  1033. package/dist/domain/application/published-data/FilterPublishedChunksHandler.d.ts +1 -1
  1034. package/dist/domain/application/published-data/MapPublishedChunkedDataHandler.d.ts +1 -1
  1035. package/dist/domain/application/published-data/MapPublishedRevisionDataHandler.d.ts +1 -1
  1036. package/dist/domain/application/published-data/SheetValidatorHandler.d.ts +1 -1
  1037. package/dist/domain/application/standard-properties.js +1 -1
  1038. package/dist/domain/application/web-component-property.d.ts +3 -1
  1039. package/dist/domain/application/web-component-property.js +1 -1
  1040. package/dist/domain/available-system-components/available-system-components.d.ts +11 -0
  1041. package/dist/domain/available-system-components/available-system-components.js +1 -0
  1042. package/dist/domain/available-system-components/index.d.ts +1 -0
  1043. package/dist/domain/available-system-components/index.js +1 -0
  1044. package/dist/domain/core/domain.js +1 -1
  1045. package/dist/domain/core/invariant/violation.d.ts +3 -2
  1046. package/dist/domain/core/schema/extended-schema-validator.js +1 -1
  1047. package/dist/domain/domain-builder/domain-builder.d.ts +46 -0
  1048. package/dist/domain/domain-builder/domain-builder.js +1 -0
  1049. package/dist/domain/domain-builder/index.d.ts +1 -0
  1050. package/dist/domain/domain-builder/index.js +1 -0
  1051. package/dist/domain/domain-context/store-system/store-system.d.ts +5 -0
  1052. package/dist/domain/domain-context/store-system/store-system.js +1 -1
  1053. package/dist/domain/domain-context/transformers/context.d.ts +4 -2
  1054. package/dist/domain/domain-context/transformers/when-builder.d.ts +2 -1
  1055. package/dist/domain/domain-runtime/application.d.ts +39 -0
  1056. package/dist/domain/domain-runtime/application.js +1 -0
  1057. package/dist/domain/domain-runtime/domain-context/selectors.d.ts +1 -0
  1058. package/dist/domain/domain-runtime/domain-context/selectors.js +1 -1
  1059. package/dist/domain/domain-runtime/domain-runtime.d.ts +68 -28
  1060. package/dist/domain/domain-runtime/domain-runtime.js +1 -1
  1061. package/dist/domain/domain-runtime/environment/initialize.d.ts +1 -1
  1062. package/dist/domain/domain-runtime/environment/types.d.ts +1 -1
  1063. package/dist/domain/domain-runtime/index.d.ts +1 -1
  1064. package/dist/domain/domain-runtime/index.js +1 -1
  1065. package/dist/domain/domain-runtime/spec/create-violation-expressions.d.ts +1 -1
  1066. package/dist/domain/domain-runtime/spec/create-violation-expressions.js +1 -1
  1067. package/dist/domain/domain-runtime/spec/index.d.ts +1 -1
  1068. package/dist/domain/domain-runtime/spec/index.js +1 -1
  1069. package/dist/domain/domain-runtime/spec/initialize.js +1 -1
  1070. package/dist/domain/domain-runtime/spec/resolve-imported-transformers.d.ts +22 -0
  1071. package/dist/domain/domain-runtime/spec/resolve-imported-transformers.js +1 -0
  1072. package/dist/domain/domain-runtime/spec/selectors.d.ts +8 -6
  1073. package/dist/domain/domain-runtime/spec/selectors.js +1 -1
  1074. package/dist/domain/domain-runtime/spec/types.d.ts +2 -2
  1075. package/dist/domain/domain-runtime/web-component/actions.d.ts +3 -0
  1076. package/dist/domain/domain-runtime/web-component/actions.js +1 -1
  1077. package/dist/domain/domain-runtime/web-component/initialize.d.ts +1 -0
  1078. package/dist/domain/domain-runtime/web-component/initialize.js +1 -1
  1079. package/dist/domain/domain-runtime/web-component/selectors.d.ts +2 -0
  1080. package/dist/domain/domain-runtime/web-component/selectors.js +1 -1
  1081. package/dist/domain/domain-runtime/web-component/types.d.ts +6 -3
  1082. package/dist/domain/extensions/export-images/agent-screenshot.d.ts +30 -0
  1083. package/dist/domain/extensions/export-images/agent-screenshot.js +1 -0
  1084. package/dist/domain/extensions/export-images/client-side-image.d.ts +14 -0
  1085. package/dist/domain/extensions/export-images/client-side-image.js +1 -0
  1086. package/dist/domain/extensions/export-images/index.d.ts +3 -0
  1087. package/dist/domain/extensions/export-images/index.js +1 -0
  1088. package/dist/domain/extensions/export-images/save-template-thumbnail.d.ts +14 -0
  1089. package/dist/domain/extensions/export-images/save-template-thumbnail.js +1 -0
  1090. package/dist/domain/extensions/index.d.ts +1 -2
  1091. package/dist/domain/extensions/index.js +1 -1
  1092. package/dist/domain/extensions/scene-entity-delete-fab.d.ts +1 -1
  1093. package/dist/domain/extensions/scene-entity-delete-fab.js +1 -1
  1094. package/dist/domain/index.d.ts +15 -2
  1095. package/dist/domain/index.js +1 -1
  1096. package/dist/domain/mocks/create-mock-domain-runtime.d.ts +9 -0
  1097. package/dist/domain/mocks/create-test-application-config.d.ts +1 -1
  1098. package/dist/domain/spec/application/admin-pages-section.d.ts +29 -0
  1099. package/dist/domain/spec/application/admin-pages-section.js +1 -0
  1100. package/dist/domain/spec/application/admin-pages.d.ts +26 -0
  1101. package/dist/domain/spec/application/admin-pages.js +1 -0
  1102. package/dist/domain/spec/application/admin-states.d.ts +5 -0
  1103. package/dist/domain/spec/application/admin-states.js +1 -0
  1104. package/dist/domain/spec/application/configurator-states.d.ts +8 -0
  1105. package/dist/domain/spec/application/configurator-states.js +1 -0
  1106. package/dist/domain/spec/application/index.d.ts +5 -0
  1107. package/dist/domain/spec/application/index.js +1 -0
  1108. package/dist/domain/spec/components/bindings/index.d.ts +2 -0
  1109. package/dist/domain/spec/components/bindings/index.js +1 -0
  1110. package/dist/domain/spec/components/bindings/read-binding.d.ts +13 -0
  1111. package/dist/domain/spec/components/bindings/read-binding.js +1 -0
  1112. package/dist/domain/spec/components/bindings/write-binding.d.ts +32 -0
  1113. package/dist/domain/spec/components/bindings/write-binding.js +1 -0
  1114. package/dist/domain/spec/components/component-entry.d.ts +90 -0
  1115. package/dist/domain/spec/components/component-entry.js +1 -0
  1116. package/dist/domain/spec/components/component-filter.d.ts +54 -0
  1117. package/dist/domain/spec/components/component-filters.d.ts +10 -0
  1118. package/dist/domain/spec/components/component-filters.js +1 -0
  1119. package/dist/domain/spec/components/components.d.ts +4 -0
  1120. package/dist/domain/spec/components/components.js +1 -0
  1121. package/dist/domain/spec/components/index.d.ts +6 -0
  1122. package/dist/domain/spec/enhanced-json/enhanced-json-value.d.ts +30 -0
  1123. package/dist/domain/spec/enhanced-json/enhanced-json-value.js +1 -0
  1124. package/dist/domain/spec/enhanced-json/index.d.ts +1 -0
  1125. package/dist/domain/spec/enhanced-json/index.js +1 -0
  1126. package/dist/domain/spec/errors/implementation-error-collector.d.ts +21 -0
  1127. package/dist/domain/spec/errors/implementation-error-collector.js +1 -0
  1128. package/dist/domain/spec/expressions/expression.d.ts +49 -0
  1129. package/dist/domain/spec/expressions/expression.js +1 -0
  1130. package/dist/domain/spec/expressions/expressions.d.ts +27 -0
  1131. package/dist/domain/spec/expressions/expressions.js +1 -0
  1132. package/dist/domain/spec/expressions/index.d.ts +5 -0
  1133. package/dist/domain/spec/expressions/memo-eval-plan.d.ts +70 -0
  1134. package/dist/domain/spec/expressions/memo-eval-plan.js +1 -0
  1135. package/dist/domain/spec/expressions/relation-expression-params.js +1 -0
  1136. package/dist/domain/spec/index.d.ts +4 -0
  1137. package/dist/domain/spec/index.js +1 -0
  1138. package/dist/domain/spec/invariants/index.d.ts +2 -0
  1139. package/dist/domain/spec/invariants/index.js +1 -0
  1140. package/dist/domain/spec/invariants/invariant.d.ts +24 -0
  1141. package/dist/domain/spec/invariants/invariant.js +1 -0
  1142. package/dist/domain/spec/invariants/invariants.d.ts +14 -0
  1143. package/dist/domain/spec/invariants/invariants.js +1 -0
  1144. package/dist/domain/spec/json-schema.d.ts +52 -0
  1145. package/dist/domain/spec/json-schema.js +1 -0
  1146. package/dist/domain/spec/markers/index.d.ts +3 -0
  1147. package/dist/domain/spec/markers/index.js +1 -0
  1148. package/dist/domain/spec/markers/msg-marker.d.ts +28 -0
  1149. package/dist/domain/spec/markers/msg-marker.js +1 -0
  1150. package/dist/domain/spec/model/aliases.d.ts +9 -0
  1151. package/dist/domain/spec/model/aliases.js +1 -0
  1152. package/dist/domain/spec/model/common-types.d.ts +15 -0
  1153. package/dist/domain/spec/model/common-types.js +1 -0
  1154. package/dist/domain/spec/model/defaults.d.ts +33 -0
  1155. package/dist/domain/spec/model/defaults.js +1 -0
  1156. package/dist/domain/spec/model/entity-types.d.ts +8 -0
  1157. package/dist/domain/spec/model/entity-types.js +1 -0
  1158. package/dist/domain/spec/model/index.d.ts +7 -0
  1159. package/dist/domain/spec/model/index.js +1 -0
  1160. package/dist/domain/spec/model/model-version-key.d.ts +3 -0
  1161. package/dist/domain/spec/model/model-version-key.js +1 -0
  1162. package/dist/domain/spec/model/names/action-name.d.ts +7 -0
  1163. package/dist/domain/spec/model/names/action-name.js +1 -0
  1164. package/dist/domain/spec/model/names/alias-name.d.ts +7 -0
  1165. package/dist/domain/spec/model/names/alias-name.js +1 -0
  1166. package/dist/domain/spec/model/names/entity-or-alias-name.d.ts +8 -0
  1167. package/dist/domain/spec/model/names/entity-or-alias-name.js +1 -0
  1168. package/dist/domain/spec/model/names/entity-type-name.d.ts +8 -0
  1169. package/dist/domain/spec/model/names/entity-type-name.js +1 -0
  1170. package/dist/domain/spec/model/names/expression-name.d.ts +6 -0
  1171. package/dist/domain/spec/model/names/expression-name.js +1 -0
  1172. package/dist/domain/spec/model/names/index.d.ts +9 -0
  1173. package/dist/domain/spec/model/names/index.js +1 -0
  1174. package/dist/domain/spec/model/names/instance-name.d.ts +7 -0
  1175. package/dist/domain/spec/model/names/instance-name.js +1 -0
  1176. package/dist/domain/spec/model/names/invariant-name.d.ts +3 -0
  1177. package/dist/domain/spec/model/names/invariant-name.js +1 -0
  1178. package/dist/domain/spec/model/names/shape-property-name.d.ts +11 -0
  1179. package/dist/domain/spec/model/names/shape-property-name.js +1 -0
  1180. package/dist/domain/spec/model/names/violation-type-name.d.ts +3 -0
  1181. package/dist/domain/spec/model/names/violation-type-name.js +1 -0
  1182. package/dist/domain/spec/model/presets.d.ts +30 -0
  1183. package/dist/domain/spec/model/presets.js +1 -0
  1184. package/dist/domain/spec/modules/element-registration.d.ts +125 -0
  1185. package/dist/domain/spec/modules/element-registration.js +1 -0
  1186. package/dist/domain/spec/modules/find-assistant-form-element-errors.d.ts +12 -0
  1187. package/dist/domain/spec/modules/find-assistant-form-element-errors.js +1 -0
  1188. package/dist/domain/spec/modules/index.d.ts +9 -0
  1189. package/dist/domain/spec/modules/index.js +1 -0
  1190. package/dist/domain/spec/modules/merge-expression-modules.d.ts +23 -0
  1191. package/dist/domain/spec/modules/merge-expression-modules.js +1 -0
  1192. package/dist/domain/spec/modules/project-modules.d.ts +32 -0
  1193. package/dist/domain/spec/modules/project-modules.js +1 -0
  1194. package/dist/domain/spec/modules/resolve-action-modules.d.ts +4 -0
  1195. package/dist/domain/spec/modules/resolve-component-optic-modules.d.ts +4 -0
  1196. package/dist/domain/spec/modules/resolve-expression-modules.d.ts +14 -0
  1197. package/dist/domain/spec/modules/resolve-expression-modules.js +1 -0
  1198. package/dist/domain/spec/modules/resolve-invariant-modules.d.ts +6 -0
  1199. package/dist/domain/spec/phx/index.d.ts +1 -0
  1200. package/dist/domain/spec/phx/index.js +1 -0
  1201. package/dist/domain/spec/phx/phx-application-types.d.ts +25 -0
  1202. package/dist/domain/spec/phx/phx-application-types.js +1 -0
  1203. package/dist/domain/spec/phx/phx-domain.d.ts +36 -0
  1204. package/dist/domain/spec/phx/phx-domain.js +1 -0
  1205. package/dist/domain/spec/phx/phx-model.d.ts +24 -0
  1206. package/dist/domain/spec/phx/phx-model.js +1 -0
  1207. package/dist/domain/spec/phx/phx.d.ts +21 -0
  1208. package/dist/domain/spec/phx/phx.js +1 -0
  1209. package/dist/domain/spec/runtime/admin-runtime/admin-runtime.d.ts +32 -0
  1210. package/dist/domain/spec/runtime/admin-runtime/admin-runtime.js +1 -0
  1211. package/dist/domain/spec/runtime/admin-runtime/admin-spec-runtime.d.ts +16 -0
  1212. package/dist/domain/spec/runtime/admin-runtime/admin-spec-runtime.js +1 -0
  1213. package/dist/domain/spec/runtime/admin-runtime/index.d.ts +2 -0
  1214. package/dist/domain/spec/runtime/admin-runtime/index.js +1 -0
  1215. package/dist/domain/spec/runtime/admin-runtime/states-runtime.d.ts +8 -0
  1216. package/dist/domain/spec/runtime/application-runtime.d.ts +62 -0
  1217. package/dist/domain/spec/runtime/application-runtime.js +1 -0
  1218. package/dist/domain/spec/runtime/application-spec-slice.d.ts +73 -0
  1219. package/dist/domain/spec/runtime/application-spec-slice.js +1 -0
  1220. package/dist/domain/spec/runtime/configurator-runtime/configurator-runtime.d.ts +37 -0
  1221. package/dist/domain/spec/runtime/configurator-runtime/configurator-runtime.js +1 -0
  1222. package/dist/domain/spec/runtime/configurator-runtime/configurator-spec-runtime.d.ts +16 -0
  1223. package/dist/domain/spec/runtime/configurator-runtime/configurator-spec-runtime.js +1 -0
  1224. package/dist/domain/spec/runtime/configurator-runtime/index.d.ts +2 -0
  1225. package/dist/domain/spec/runtime/configurator-runtime/index.js +1 -0
  1226. package/dist/domain/spec/runtime/configurator-runtime/states-runtime.d.ts +11 -0
  1227. package/dist/domain/spec/runtime/create-application.d.ts +58 -0
  1228. package/dist/domain/spec/runtime/create-application.js +1 -0
  1229. package/dist/domain/spec/runtime/expressions/expression-runtime.d.ts +57 -0
  1230. package/dist/domain/spec/runtime/expressions/expression-runtime.js +1 -0
  1231. package/dist/domain/spec/runtime/expressions/generate-memo-eval-plan-runtime.d.ts +33 -0
  1232. package/dist/domain/spec/runtime/expressions/generate-memo-eval-plan-runtime.js +1 -0
  1233. package/dist/domain/spec/runtime/expressions/index.d.ts +3 -0
  1234. package/dist/domain/spec/runtime/expressions/index.js +1 -0
  1235. package/dist/domain/spec/runtime/expressions/reflection-constants-runtime.d.ts +11 -0
  1236. package/dist/domain/spec/runtime/expressions/reflection-constants-runtime.js +1 -0
  1237. package/dist/domain/spec/runtime/factory-data/factory-data-runtime.d.ts +44 -0
  1238. package/dist/domain/spec/runtime/factory-data/recipe-defaults.d.ts +13 -0
  1239. package/dist/domain/spec/runtime/factory-data/recipe-defaults.js +1 -0
  1240. package/dist/domain/spec/runtime/factory-data/static-violations.d.ts +16 -0
  1241. package/dist/domain/spec/runtime/factory-data/static-violations.js +1 -0
  1242. package/dist/domain/spec/runtime/generate-runtime-instance.d.ts +2 -0
  1243. package/dist/domain/spec/runtime/generate-runtime-instance.js +1 -0
  1244. package/dist/domain/spec/runtime/index.d.ts +13 -0
  1245. package/dist/domain/spec/runtime/index.js +1 -0
  1246. package/dist/domain/spec/runtime/migrations/migration-runtime.d.ts +53 -0
  1247. package/dist/domain/spec/runtime/migrations/migration-runtime.js +1 -0
  1248. package/dist/domain/spec/runtime/model/admin-model-runtime.d.ts +31 -0
  1249. package/dist/domain/spec/runtime/model/admin-model-runtime.js +1 -0
  1250. package/dist/domain/spec/runtime/model/configurator-model-runtime.d.ts +33 -0
  1251. package/dist/domain/spec/runtime/model/configurator-model-runtime.js +1 -0
  1252. package/dist/domain/spec/runtime/model/index.d.ts +2 -0
  1253. package/dist/domain/spec/runtime/model/index.js +1 -0
  1254. package/dist/domain/spec/runtime/optics/build-sdk-optic.d.ts +7 -0
  1255. package/dist/domain/spec/runtime/optics/build-sdk-optic.js +1 -0
  1256. package/dist/domain/spec/runtime/optics/build-user-bound-optic.d.ts +7 -0
  1257. package/dist/domain/spec/runtime/optics/build-user-bound-optic.js +1 -0
  1258. package/dist/domain/spec/runtime/optics/built-component-optic.d.ts +11 -0
  1259. package/dist/domain/spec/runtime/optics/built-component-optic.js +1 -0
  1260. package/dist/domain/spec/runtime/optics/component-optic.d.ts +26 -0
  1261. package/dist/domain/spec/runtime/optics/component-optic.js +1 -0
  1262. package/dist/domain/spec/runtime/optics/index.d.ts +2 -0
  1263. package/dist/domain/spec/runtime/optics/index.js +1 -0
  1264. package/dist/domain/spec/runtime/runtime-reference-store.d.ts +46 -0
  1265. package/dist/domain/spec/runtime/runtime-reference-store.js +1 -0
  1266. package/dist/domain/spec/runtime/sections/actions-runtime.d.ts +14 -0
  1267. package/dist/domain/spec/runtime/sections/assistant-runtime.d.ts +10 -0
  1268. package/dist/domain/spec/runtime/sections/data-runtime.d.ts +13 -0
  1269. package/dist/domain/spec/runtime/sections/index.d.ts +6 -0
  1270. package/dist/domain/spec/runtime/sections/index.js +1 -0
  1271. package/dist/domain/spec/runtime/sections/preset-runtime.d.ts +20 -0
  1272. package/dist/domain/spec/runtime/sections/theme-runtime.d.ts +10 -0
  1273. package/dist/domain/spec/runtime/sections/transformers-runtime.d.ts +19 -0
  1274. package/dist/domain/spec/runtime/spec-code/index.d.ts +2 -0
  1275. package/dist/domain/spec/runtime/spec-code/index.js +1 -0
  1276. package/dist/domain/spec/runtime/spec-code/resolve-spec-code.d.ts +18 -0
  1277. package/dist/domain/spec/runtime/spec-code/resolve-spec-code.js +1 -0
  1278. package/dist/domain/spec/runtime/spec-code/spec-code-module.d.ts +17 -0
  1279. package/dist/domain/spec/runtime/spec-code/spec-code-module.js +1 -0
  1280. package/dist/domain/spec/runtime/spec-runtime.d.ts +21 -0
  1281. package/dist/domain/spec/runtime/spec-runtime.js +1 -0
  1282. package/dist/domain/spec/runtime-spec/decode-runtime-spec.d.ts +9 -0
  1283. package/dist/domain/spec/runtime-spec/decode-runtime-spec.js +1 -0
  1284. package/dist/domain/spec/runtime-spec/encode-runtime-spec.d.ts +8 -0
  1285. package/dist/domain/spec/runtime-spec/encode-runtime-spec.js +1 -0
  1286. package/dist/domain/spec/runtime-spec/encoded-runtime-spec.d.ts +28 -0
  1287. package/dist/domain/spec/runtime-spec/encoded-runtime-spec.js +1 -0
  1288. package/dist/domain/spec/runtime-spec/index.d.ts +4 -0
  1289. package/dist/domain/spec/runtime-spec/index.js +1 -0
  1290. package/dist/domain/spec/runtime-spec/runtime-spec.d.ts +174 -0
  1291. package/dist/domain/spec/runtime-spec/runtime-spec.js +1 -0
  1292. package/dist/domain/spec/runtime-spec/spec-code-id.d.ts +40 -0
  1293. package/dist/domain/spec/runtime-spec/spec-code-id.js +1 -0
  1294. package/dist/domain/spec/sections/actions.d.ts +23 -0
  1295. package/dist/domain/spec/sections/actions.js +1 -0
  1296. package/dist/domain/spec/sections/app-metadata.d.ts +18 -0
  1297. package/dist/domain/spec/sections/app-metadata.js +1 -0
  1298. package/dist/domain/spec/sections/application-version.d.ts +7 -0
  1299. package/dist/domain/spec/sections/application-version.js +1 -0
  1300. package/dist/domain/spec/sections/assistant/assistant-manifest.d.ts +96 -0
  1301. package/dist/domain/spec/sections/assistant/assistant-resolved-manifest.d.ts +134 -0
  1302. package/dist/domain/spec/sections/assistant/assistant-resolved-manifest.js +1 -0
  1303. package/dist/domain/spec/sections/assistant/form/assistant-form-element-name.d.ts +11 -0
  1304. package/dist/domain/spec/sections/assistant/form/assistant-form-element-name.js +8 -0
  1305. package/dist/domain/spec/sections/assistant/form/assistant-form-elements.d.ts +174 -0
  1306. package/dist/domain/spec/sections/assistant/form/assistant-form-elements.js +1 -0
  1307. package/dist/domain/spec/sections/assistant/form/assistant-resource-path.d.ts +10 -0
  1308. package/dist/domain/spec/sections/assistant/form/assistant-resource-path.js +1 -0
  1309. package/dist/domain/spec/sections/assistant/form/index.d.ts +4 -0
  1310. package/dist/domain/spec/sections/assistant/form/index.js +1 -0
  1311. package/dist/domain/spec/sections/assistant/index.d.ts +4 -0
  1312. package/dist/domain/spec/sections/assistant/index.js +1 -0
  1313. package/dist/domain/spec/sections/data-spec/chunks.d.ts +23 -0
  1314. package/dist/domain/spec/sections/data-spec/chunks.js +1 -0
  1315. package/dist/domain/spec/sections/data-spec/custom-data-spec-entry.d.ts +16 -0
  1316. package/dist/domain/spec/sections/data-spec/custom-data-spec-entry.js +1 -0
  1317. package/dist/domain/spec/sections/data-spec/data-entry-key.d.ts +9 -0
  1318. package/dist/domain/spec/sections/data-spec/data-entry-key.js +1 -0
  1319. package/dist/domain/spec/sections/data-spec/index.d.ts +5 -0
  1320. package/dist/domain/spec/sections/data-spec/index.js +1 -0
  1321. package/dist/domain/spec/sections/data-spec/parsed-data-spec-entries.d.ts +10 -0
  1322. package/dist/domain/spec/sections/data-spec/parsed-data-spec-entries.js +1 -0
  1323. package/dist/domain/spec/sections/data-spec/swatch-data-spec-entry.d.ts +14 -0
  1324. package/dist/domain/spec/sections/data-spec/swatch-data-spec-entry.js +1 -0
  1325. package/dist/domain/spec/sections/index.d.ts +10 -0
  1326. package/dist/domain/spec/sections/index.js +1 -0
  1327. package/dist/domain/spec/sections/infra/acl.d.ts +12 -0
  1328. package/dist/domain/spec/sections/infra/acl.js +1 -0
  1329. package/dist/domain/spec/sections/infra/index.d.ts +3 -0
  1330. package/dist/domain/spec/sections/infra/index.js +1 -0
  1331. package/dist/domain/spec/sections/infra/resource-entry.d.ts +46 -0
  1332. package/dist/domain/spec/sections/infra/resource-entry.js +1 -0
  1333. package/dist/domain/spec/sections/infra/resources-config.d.ts +10 -0
  1334. package/dist/domain/spec/sections/infra/resources-config.js +1 -0
  1335. package/dist/domain/spec/sections/state-value.d.ts +7 -0
  1336. package/dist/domain/spec/sections/state-value.js +1 -0
  1337. package/dist/domain/spec/sections/theme.d.ts +10 -0
  1338. package/dist/domain/spec/sections/theme.js +1 -0
  1339. package/dist/domain/spec/sections/transformers.d.ts +15 -0
  1340. package/dist/domain/spec/sections/transformers.js +1 -0
  1341. package/dist/domain/spec/sections/ui.d.ts +12 -0
  1342. package/dist/domain/spec/sections/ui.js +1 -0
  1343. package/dist/domain/system-components/child-entity-selection.js +1 -1
  1344. package/dist/domain/system-components/common/scene-entity-control-schema.d.ts +3 -0
  1345. package/dist/domain/system-components/common/scene-entity-control-schema.js +1 -1
  1346. package/dist/domain/system-components/phoenix-entity-elements/child-entity-card-selector.d.ts +2 -3
  1347. package/dist/domain/system-components/phoenix-entity-elements/child-entity-list-selector.d.ts +2 -3
  1348. package/dist/domain/system-components/phoenix-entity-elements/child-entity-toggle-selector.d.ts +2 -3
  1349. package/dist/domain/system-definitions.js +1 -1
  1350. package/dist/domain/utils/index.d.ts +2 -0
  1351. package/dist/domain/utils/index.js +1 -0
  1352. package/dist/editor/Editor.d.ts +7 -0
  1353. package/dist/editor/Editor.js +1 -1
  1354. package/dist/editor/domain-editors/DomainSpecContext.js +1 -1
  1355. package/dist/editor/domain-editors/apply-spec-update.d.ts +10 -2
  1356. package/dist/editor/domain-editors/apply-spec-update.js +1 -1
  1357. package/dist/editor/domain-editors/use-implementation-files.d.ts +6 -14
  1358. package/dist/editor/domain-editors/use-implementation-files.js +1 -1
  1359. package/dist/editor/graphql/GraphQLPanel.js +1 -1
  1360. package/dist/editor/mocks/CreateMockYaml.js +2 -2
  1361. package/dist/editor/mocks/EditorMockContext.d.ts +2 -0
  1362. package/dist/editor/mocks/EditorMockContext.js +1 -1
  1363. package/dist/editor/screenshot/ScreenshotHandler.js +1 -1
  1364. package/dist/i18n/locales/cs/messages.js +1 -1
  1365. package/dist/i18n/locales/da/messages.js +1 -1
  1366. package/dist/i18n/locales/de/messages.js +1 -1
  1367. package/dist/i18n/locales/de-AT/messages.js +1 -1
  1368. package/dist/i18n/locales/en/messages.js +1 -1
  1369. package/dist/i18n/locales/en-AU/messages.js +1 -1
  1370. package/dist/i18n/locales/en-GB/messages.js +1 -1
  1371. package/dist/i18n/locales/es/messages.js +1 -1
  1372. package/dist/i18n/locales/fr/messages.js +1 -1
  1373. package/dist/i18n/locales/hu/messages.js +1 -1
  1374. package/dist/i18n/locales/it/messages.js +1 -1
  1375. package/dist/i18n/locales/nl/messages.js +1 -1
  1376. package/dist/i18n/locales/pl/messages.js +1 -1
  1377. package/dist/i18n/locales/pt/messages.js +1 -1
  1378. package/dist/i18n/locales/ro/messages.js +1 -1
  1379. package/dist/i18n/locales/sk/messages.js +1 -1
  1380. package/dist/i18n/locales/tr/messages.js +1 -1
  1381. package/dist/i18n/merge-catalogs.d.ts +4 -1
  1382. package/dist/i18n/merge-catalogs.js +1 -1
  1383. package/dist/legacy/domain-cli/utils/cache.d.ts +1 -1
  1384. package/dist/legacy/domain-cli/utils/cache.js +1 -1
  1385. package/dist/legacy/domain-spec/__generated/domain-schema.d.ts +97 -80
  1386. package/dist/legacy/domain-spec/spec/domain-spec.js +1 -1
  1387. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/claude-md.d.ts +1 -1
  1388. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/cursor-rules.d.ts +1 -1
  1389. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/shared-sdk-content.d.ts +1 -1
  1390. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/shared-sdk-content.js +11 -5
  1391. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-admin.js +10 -11
  1392. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-embedded-admin.js +9 -10
  1393. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/i18n-index.js +3 -3
  1394. package/dist/legacy/phoenix-cli/services/webhook-service/transport.js +1 -1
  1395. package/dist/legacy/phoenix-cli/services/webhook-service/tunnel.d.ts +1 -0
  1396. package/dist/legacy/phoenix-cli/services/webhook-service/tunnel.js +1 -1
  1397. package/dist/legacy/webhook-cli/lambda-local/index.js +1 -1
  1398. package/dist/phoenix/application-spec/application-spec-builder.d.ts +0 -2
  1399. package/dist/phoenix/application-spec/application-spec-builder.js +1 -1
  1400. package/dist/phoenix/application-spec/generate-application-spec-project.d.ts +1 -2
  1401. package/dist/phoenix/application-spec/generate-application-spec-project.js +2 -2
  1402. package/dist/phoenix/application-spec/generate-application-spec-story.js +2 -2
  1403. package/dist/phoenix/application-spec/generate-project-files.d.ts +1 -2
  1404. package/dist/phoenix/application-spec/index.d.ts +2 -0
  1405. package/dist/phoenix/application-spec/index.js +1 -1
  1406. package/dist/phoenix/application-spec/project-files.d.ts +8 -2
  1407. package/dist/phoenix/application-spec/project-files.js +1 -1
  1408. package/dist/phoenix/application-spec/resolve-deployment-data.d.ts +11 -0
  1409. package/dist/phoenix/application-spec/resolve-deployment-data.js +2 -2
  1410. package/dist/phoenix/bin.d.ts +2 -0
  1411. package/dist/phoenix/bin.js +2 -0
  1412. package/dist/phoenix/check-configs/built-in-eslint-config.d.ts +9 -0
  1413. package/dist/phoenix/check-configs/built-in-eslint-config.js +1 -0
  1414. package/dist/phoenix/check-configs/eslint-config.d.ts +10 -0
  1415. package/dist/phoenix/check-configs/eslint-config.js +1 -0
  1416. package/dist/phoenix/check-configs/index.d.ts +8 -0
  1417. package/dist/phoenix/check-configs/index.js +1 -0
  1418. package/dist/phoenix/check-configs/typescript-project.d.ts +5 -0
  1419. package/dist/phoenix/check-configs/typescript-project.js +1 -0
  1420. package/dist/phoenix/cli.d.ts +0 -1
  1421. package/dist/phoenix/cli.js +1 -2
  1422. package/dist/phoenix/commands/activate-deployment.js +1 -1
  1423. package/dist/phoenix/commands/build.js +1 -1
  1424. package/dist/phoenix/commands/changelog.js +1 -1
  1425. package/dist/phoenix/commands/check.js +1 -1
  1426. package/dist/phoenix/commands/clean.js +1 -1
  1427. package/dist/phoenix/commands/cleanup-environment.js +2 -2
  1428. package/dist/phoenix/commands/create-environment.js +1 -1
  1429. package/dist/phoenix/commands/data.js +1 -1
  1430. package/dist/phoenix/commands/deploy.js +3 -3
  1431. package/dist/phoenix/commands/deployment-build-envs-command.js +1 -1
  1432. package/dist/phoenix/commands/deps/deps.d.ts +22 -1
  1433. package/dist/phoenix/commands/deps/deps.js +2 -2
  1434. package/dist/phoenix/commands/deps/index.d.ts +1 -1
  1435. package/dist/phoenix/commands/deps/index.js +1 -1
  1436. package/dist/phoenix/commands/deps/sdk-manifest.js +1 -1
  1437. package/dist/phoenix/commands/dev.js +4 -5
  1438. package/dist/phoenix/commands/docs.js +1 -1
  1439. package/dist/phoenix/commands/finish-deployment-command.js +1 -1
  1440. package/dist/phoenix/commands/fix.js +1 -1
  1441. package/dist/phoenix/commands/index.d.ts +1 -1
  1442. package/dist/phoenix/commands/index.js +1 -1
  1443. package/dist/phoenix/commands/init.d.ts +17 -5
  1444. package/dist/phoenix/commands/init.js +1 -1
  1445. package/dist/phoenix/commands/inspect-assets.js +1 -1
  1446. package/dist/phoenix/commands/link.js +1 -1
  1447. package/dist/phoenix/commands/list-environments.js +1 -1
  1448. package/dist/phoenix/commands/login.d.ts +4 -1
  1449. package/dist/phoenix/commands/login.js +2 -2
  1450. package/dist/phoenix/commands/prepare-deployment-command.js +2 -2
  1451. package/dist/phoenix/commands/prettier.js +1 -1
  1452. package/dist/phoenix/commands/register-deployment.js +1 -1
  1453. package/dist/phoenix/commands/scene.js +1 -1
  1454. package/dist/phoenix/commands/screenshot.js +1 -1
  1455. package/dist/phoenix/commands/state.js +1 -1
  1456. package/dist/phoenix/commands/story-build.js +3 -3
  1457. package/dist/phoenix/commands/story-create.js +1 -1
  1458. package/dist/phoenix/commands/story-dev.js +2 -2
  1459. package/dist/phoenix/commands/sync.js +1 -1
  1460. package/dist/phoenix/commands/unlink.js +1 -1
  1461. package/dist/phoenix/commands/variants.js +1 -1
  1462. package/dist/phoenix/editor-server/commands-router.js +1 -1
  1463. package/dist/phoenix/editor-server/editor-server.d.ts +2 -13
  1464. package/dist/phoenix/editor-server/editor-server.js +1 -1
  1465. package/dist/phoenix/editor-server/spec-router.js +1 -1
  1466. package/dist/phoenix/editor-server/trpc.d.ts +2 -12
  1467. package/dist/phoenix/lingui/index.d.ts +1 -0
  1468. package/dist/phoenix/lingui/index.js +1 -0
  1469. package/dist/phoenix/lingui/lingui.d.ts +18 -0
  1470. package/dist/phoenix/lingui/lingui.js +1 -0
  1471. package/dist/phoenix/scripts/docs-utils.js +1 -1
  1472. package/dist/phoenix/services/application-spec-project-watcher.d.ts +11 -8
  1473. package/dist/phoenix/services/application-spec-project-watcher.js +2 -2
  1474. package/dist/phoenix/services/cli-credentials.d.ts +3 -0
  1475. package/dist/phoenix/services/cli-credentials.js +1 -1
  1476. package/dist/phoenix/services/cli-exit.d.ts +5 -0
  1477. package/dist/phoenix/services/cli-exit.js +1 -0
  1478. package/dist/phoenix/services/deployment/deployment-preparation-service.d.ts +28 -0
  1479. package/dist/phoenix/services/deployment/deployment-preparation-service.js +1 -0
  1480. package/dist/phoenix/services/deployment/generated-env-markers.d.ts +8 -0
  1481. package/dist/phoenix/services/deployment/generated-env-markers.js +1 -0
  1482. package/dist/phoenix/services/deployment/index.d.ts +2 -0
  1483. package/dist/phoenix/services/deployment/index.js +1 -0
  1484. package/dist/phoenix/services/index.d.ts +5 -1
  1485. package/dist/phoenix/services/index.js +1 -1
  1486. package/dist/phoenix/services/lingui-watcher.js +1 -1
  1487. package/dist/phoenix/services/phoenix-store.d.ts +3 -0
  1488. package/dist/phoenix/services/phoenix-store.js +1 -1
  1489. package/dist/phoenix/services/prepare-development-environment.js +1 -1
  1490. package/dist/phoenix/services/session/editor-server-handle.d.ts +5 -0
  1491. package/dist/phoenix/services/session/editor-server-handle.js +1 -0
  1492. package/dist/phoenix/services/session/index.d.ts +2 -0
  1493. package/dist/phoenix/services/session/index.js +1 -0
  1494. package/dist/phoenix/services/session/phoenix-application.d.ts +82 -0
  1495. package/dist/phoenix/services/session/phoenix-application.js +2 -0
  1496. package/dist/phoenix/services/source-archive.d.ts +2 -0
  1497. package/dist/phoenix/services/source-archive.js +1 -1
  1498. package/dist/phoenix/services/swc.d.ts +5 -4
  1499. package/dist/phoenix/services/swc.js +2 -2
  1500. package/dist/phoenix/services/telemetry/amplitude-telemetry-transport.d.ts +9 -0
  1501. package/dist/phoenix/services/telemetry/amplitude-telemetry-transport.js +1 -0
  1502. package/dist/phoenix/services/telemetry/index.d.ts +3 -0
  1503. package/dist/phoenix/services/telemetry/index.js +1 -0
  1504. package/dist/phoenix/services/telemetry/telemetry-client.d.ts +25 -0
  1505. package/dist/phoenix/services/telemetry/telemetry-client.js +1 -0
  1506. package/dist/phoenix/services/telemetry/telemetry-command.d.ts +2 -0
  1507. package/dist/phoenix/services/telemetry/telemetry-command.js +1 -0
  1508. package/dist/phoenix/services/telemetry/telemetry-event.d.ts +44 -0
  1509. package/dist/phoenix/services/telemetry/telemetry-event.js +1 -0
  1510. package/dist/phoenix/services/telemetry/telemetry-state.d.ts +25 -0
  1511. package/dist/phoenix/services/telemetry/telemetry-state.js +2 -0
  1512. package/dist/phoenix/services/vite-config.js +1 -1
  1513. package/dist/phoenix/services/webhook-service/transport.js +1 -1
  1514. package/dist/phoenix/services/webhook-service/tunnel.d.ts +1 -0
  1515. package/dist/phoenix/services/webhook-service/tunnel.js +1 -1
  1516. package/dist/phoenix/utils/index.d.ts +3 -2
  1517. package/dist/phoenix/utils/index.js +1 -1
  1518. package/dist/phoenix/utils/node-version/index.d.ts +1 -0
  1519. package/dist/phoenix/utils/node-version/index.js +1 -0
  1520. package/dist/phoenix/utils/node-version/supported-node-version.d.ts +12 -0
  1521. package/dist/phoenix/utils/node-version/supported-node-version.js +4 -0
  1522. package/dist/phoenix/utils/package-info.d.ts +0 -9
  1523. package/dist/phoenix/utils/package-info.js +1 -1
  1524. package/dist/phoenix/utils/package-manager/index.d.ts +2 -0
  1525. package/dist/phoenix/utils/package-manager/index.js +1 -0
  1526. package/dist/phoenix/utils/package-manager/package-manager-commands.d.ts +19 -0
  1527. package/dist/phoenix/utils/package-manager/package-manager-commands.js +1 -0
  1528. package/dist/phoenix/utils/package-manager/pnpm-project.d.ts +9 -0
  1529. package/dist/phoenix/utils/package-manager/pnpm-project.js +1 -0
  1530. package/dist/phoenix/utils/run-command.d.ts +11 -0
  1531. package/dist/phoenix/utils/run-command.js +1 -1
  1532. package/dist/phoenix/utils/sdk-tool/index.d.ts +1 -0
  1533. package/dist/phoenix/utils/sdk-tool/index.js +1 -0
  1534. package/dist/phoenix/utils/sdk-tool/resolve-sdk-tool-bin.d.ts +15 -0
  1535. package/dist/phoenix/utils/sdk-tool/resolve-sdk-tool-bin.js +1 -0
  1536. package/dist/react-sdk/application-runtime/common-services/analytics/analytics-service.d.ts +1 -1
  1537. package/dist/react-sdk/application-runtime/common-services/analytics/frontend-analytics.d.ts +52 -0
  1538. package/dist/react-sdk/application-runtime/common-services/analytics/index.d.ts +1 -0
  1539. package/dist/react-sdk/application-runtime/common-services/analytics/index.js +1 -1
  1540. package/dist/react-sdk/application-runtime/common-services/initialize.d.ts +2 -2
  1541. package/dist/react-sdk/application-runtime/domain-application-context/chat-system.d.ts +1 -1
  1542. package/dist/react-sdk/application-runtime/hooks/index.d.ts +2 -0
  1543. package/dist/react-sdk/application-runtime/hooks/index.js +1 -1
  1544. package/dist/react-sdk/application-runtime/hooks/loading/index.d.ts +5 -0
  1545. package/dist/react-sdk/application-runtime/hooks/loading/index.js +1 -0
  1546. package/dist/react-sdk/application-runtime/hooks/loading/loader-host-context.d.ts +11 -0
  1547. package/dist/react-sdk/application-runtime/hooks/loading/loader-host-context.js +1 -0
  1548. package/dist/react-sdk/application-runtime/hooks/loading/use-is-awaiting-loading-phase.d.ts +8 -0
  1549. package/dist/react-sdk/application-runtime/hooks/loading/use-is-awaiting-loading-phase.js +1 -0
  1550. package/dist/react-sdk/application-runtime/hooks/loading/use-is-loader-hosted.d.ts +7 -0
  1551. package/dist/react-sdk/application-runtime/hooks/loading/use-is-loader-hosted.js +1 -0
  1552. package/dist/react-sdk/application-runtime/hooks/loading/use-loading-actions.d.ts +9 -0
  1553. package/dist/react-sdk/application-runtime/hooks/loading/use-loading-actions.js +1 -0
  1554. package/dist/react-sdk/application-runtime/hooks/loading/use-loading-application.d.ts +24 -0
  1555. package/dist/react-sdk/application-runtime/hooks/loading/use-loading-application.js +1 -0
  1556. package/dist/react-sdk/application-runtime/hooks/responsive/index.d.ts +3 -0
  1557. package/dist/react-sdk/application-runtime/hooks/responsive/index.js +1 -0
  1558. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-actions.d.ts +9 -0
  1559. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-actions.js +1 -0
  1560. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-application.d.ts +26 -0
  1561. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-application.js +1 -0
  1562. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-state.d.ts +10 -0
  1563. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-state.js +1 -0
  1564. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-store.d.ts +24 -0
  1565. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-store.js +1 -0
  1566. package/dist/react-sdk/application-runtime/hooks/use-access-service.d.ts +5 -0
  1567. package/dist/react-sdk/application-runtime/hooks/use-access-service.js +1 -1
  1568. package/dist/react-sdk/application-runtime/hooks/use-phoenix-element-slots.d.ts +2 -1
  1569. package/dist/react-sdk/application-runtime/hooks/use-web-component-readonly-sync.d.ts +4 -11
  1570. package/dist/react-sdk/application-runtime/hooks/use-web-component-readonly-sync.js +1 -1
  1571. package/dist/react-sdk/application-runtime/hooks/use-web-component.d.ts +5 -0
  1572. package/dist/react-sdk/application-runtime/hooks/use-web-component.js +1 -1
  1573. package/dist/react-sdk/application-runtime/host-properties/actions.d.ts +15 -0
  1574. package/dist/react-sdk/application-runtime/host-properties/actions.js +1 -0
  1575. package/dist/react-sdk/application-runtime/host-properties/connect-host-properties.d.ts +30 -0
  1576. package/dist/react-sdk/application-runtime/host-properties/connect-host-properties.js +1 -0
  1577. package/dist/react-sdk/application-runtime/host-properties/domain-host-properties.d.ts +7 -0
  1578. package/dist/react-sdk/application-runtime/host-properties/domain-host-properties.js +1 -0
  1579. package/dist/react-sdk/application-runtime/host-properties/host-property-descriptors.d.ts +21 -0
  1580. package/dist/react-sdk/application-runtime/host-properties/host-property-descriptors.js +1 -0
  1581. package/dist/react-sdk/application-runtime/host-properties/host-property-scopes.d.ts +42 -0
  1582. package/dist/react-sdk/application-runtime/host-properties/host-property-scopes.js +1 -0
  1583. package/dist/react-sdk/application-runtime/host-properties/index.d.ts +8 -0
  1584. package/dist/react-sdk/application-runtime/host-properties/index.js +1 -0
  1585. package/dist/react-sdk/application-runtime/host-properties/initialize.d.ts +7 -0
  1586. package/dist/react-sdk/application-runtime/host-properties/initialize.js +1 -0
  1587. package/dist/react-sdk/application-runtime/host-properties/selectors.d.ts +54 -0
  1588. package/dist/react-sdk/application-runtime/host-properties/selectors.js +1 -0
  1589. package/dist/react-sdk/application-runtime/host-properties/types.d.ts +18 -0
  1590. package/dist/react-sdk/application-runtime/host-properties/types.js +1 -0
  1591. package/dist/react-sdk/application-runtime/index.d.ts +3 -0
  1592. package/dist/react-sdk/application-runtime/integration/initialize.d.ts +7 -6
  1593. package/dist/react-sdk/application-runtime/integration/initialize.js +1 -1
  1594. package/dist/react-sdk/application-runtime/integration/selectors.d.ts +11 -2
  1595. package/dist/react-sdk/application-runtime/integration/selectors.js +1 -1
  1596. package/dist/react-sdk/application-runtime/integration/types.d.ts +5 -2
  1597. package/dist/react-sdk/application-runtime/loading/actions.d.ts +45 -0
  1598. package/dist/react-sdk/application-runtime/loading/actions.js +1 -0
  1599. package/dist/react-sdk/application-runtime/loading/index.d.ts +4 -0
  1600. package/dist/react-sdk/application-runtime/loading/index.js +1 -0
  1601. package/dist/react-sdk/application-runtime/loading/initialize.d.ts +3 -0
  1602. package/dist/react-sdk/application-runtime/loading/initialize.js +1 -0
  1603. package/dist/react-sdk/application-runtime/loading/selectors.d.ts +18 -0
  1604. package/dist/react-sdk/application-runtime/loading/selectors.js +1 -0
  1605. package/dist/react-sdk/application-runtime/loading/types.d.ts +59 -0
  1606. package/dist/react-sdk/application-runtime/loading/types.js +1 -0
  1607. package/dist/react-sdk/application-runtime/mocks/create-mock-application-runtime.js +1 -1
  1608. package/dist/react-sdk/application-runtime/provider/ApplicationRuntime.d.ts +6 -0
  1609. package/dist/react-sdk/application-runtime/provider/ApplicationRuntime.js +1 -1
  1610. package/dist/react-sdk/application-runtime/provider/ApplicationType.d.ts +7 -0
  1611. package/dist/react-sdk/application-runtime/provider/ApplicationType.js +1 -1
  1612. package/dist/react-sdk/application-runtime/responsive/actions.d.ts +47 -0
  1613. package/dist/react-sdk/application-runtime/responsive/actions.js +1 -0
  1614. package/dist/react-sdk/application-runtime/responsive/index.d.ts +4 -0
  1615. package/dist/react-sdk/application-runtime/responsive/index.js +1 -0
  1616. package/dist/react-sdk/application-runtime/responsive/initialize.d.ts +3 -0
  1617. package/dist/react-sdk/application-runtime/responsive/initialize.js +1 -0
  1618. package/dist/react-sdk/application-runtime/responsive/selectors.d.ts +20 -0
  1619. package/dist/react-sdk/application-runtime/responsive/selectors.js +1 -0
  1620. package/dist/react-sdk/application-runtime/responsive/types.d.ts +104 -0
  1621. package/dist/react-sdk/application-runtime/responsive/types.js +1 -0
  1622. package/dist/react-sdk/application-runtime/routing/routing-service.d.ts +34 -2
  1623. package/dist/react-sdk/application-runtime/routing/routing-service.js +1 -1
  1624. package/dist/react-sdk/application-runtime/runtime/create-application-runtime.d.ts +313 -10
  1625. package/dist/react-sdk/application-runtime/runtime/create-application-runtime.js +1 -1
  1626. package/dist/react-sdk/configurator-routing/ConfiguratorRoutingProvider.d.ts +11 -0
  1627. package/dist/react-sdk/configurator-routing/ConfiguratorRoutingProvider.js +1 -0
  1628. package/dist/react-sdk/configurator-routing/OnGoToIndexHandler.d.ts +9 -0
  1629. package/dist/react-sdk/configurator-routing/OnGoToIndexHandler.js +1 -0
  1630. package/dist/react-sdk/configurator-routing/index.d.ts +3 -0
  1631. package/dist/react-sdk/configurator-routing/index.js +1 -0
  1632. package/dist/react-sdk/configurator-routing/use-power-routing-lifecycle.d.ts +11 -0
  1633. package/dist/react-sdk/configurator-routing/use-power-routing-lifecycle.js +1 -0
  1634. package/dist/react-sdk/configurator-ui-elements/ConfiguratorUiElementHost.d.ts +7 -0
  1635. package/dist/react-sdk/configurator-ui-elements/ConfiguratorUiElementHost.js +1 -0
  1636. package/dist/react-sdk/configurator-ui-elements/ErrorFallbackElement.d.ts +14 -0
  1637. package/dist/react-sdk/configurator-ui-elements/ErrorFallbackElement.js +1 -0
  1638. package/dist/react-sdk/configurator-ui-elements/ErrorFallbackPropsProvider.d.ts +18 -0
  1639. package/dist/react-sdk/configurator-ui-elements/ErrorFallbackPropsProvider.js +1 -0
  1640. package/dist/react-sdk/configurator-ui-elements/PlainErrorFallback.d.ts +5 -0
  1641. package/dist/react-sdk/configurator-ui-elements/PlainErrorFallback.js +1 -0
  1642. package/dist/react-sdk/configurator-ui-elements/configurator-ui-element.d.ts +17 -0
  1643. package/dist/react-sdk/configurator-ui-elements/configurator-ui-element.js +1 -0
  1644. package/dist/react-sdk/configurator-ui-elements/create-configurator-ui-element.d.ts +5 -0
  1645. package/dist/react-sdk/configurator-ui-elements/create-configurator-ui-element.js +1 -0
  1646. package/dist/react-sdk/configurator-ui-elements/index.d.ts +6 -0
  1647. package/dist/react-sdk/configurator-ui-elements/index.js +1 -0
  1648. package/dist/react-sdk/domain-application-context/BackendDataProvider.js +1 -1
  1649. package/dist/react-sdk/domain-application-context/ConfigurationPersistSystemFailureHandler.js +1 -1
  1650. package/dist/react-sdk/domain-application-context/DomainLifecycleBoundary.js +1 -1
  1651. package/dist/react-sdk/domain-application-context/FrontendDataProvider.js +1 -1
  1652. package/dist/react-sdk/domain-application-context/OnPresetLoadedHandler.js +1 -0
  1653. package/dist/react-sdk/domain-application-context/PublishedDataProvider.js +1 -1
  1654. package/dist/react-sdk/domain-application-context/chat-hooks.d.ts +4 -0
  1655. package/dist/react-sdk/domain-application-context/chat-hooks.js +1 -0
  1656. package/dist/react-sdk/domain-application-context/index.d.ts +2 -0
  1657. package/dist/react-sdk/domain-application-context/index.js +1 -1
  1658. package/dist/react-sdk/domain-context/common-hooks/index.d.ts +9 -0
  1659. package/dist/react-sdk/domain-context/common-hooks/index.js +1 -0
  1660. package/dist/react-sdk/domain-context/common-hooks/use-configuration-save-state.d.ts +23 -0
  1661. package/dist/react-sdk/domain-context/common-hooks/use-configuration-save-state.js +1 -0
  1662. package/dist/react-sdk/domain-context/common-hooks/use-configurator-messages.d.ts +15 -4
  1663. package/dist/react-sdk/domain-context/common-hooks/use-configurator-messages.js +1 -1
  1664. package/dist/react-sdk/domain-context/common-hooks/use-domain-context.d.ts +1 -0
  1665. package/dist/react-sdk/domain-context/common-hooks/use-state-validity.d.ts +6 -1
  1666. package/dist/react-sdk/domain-context/common-hooks/use-state-validity.js +1 -1
  1667. package/dist/react-sdk/domain-context/component-hooks/index.d.ts +1 -0
  1668. package/dist/react-sdk/domain-context/component-hooks/index.js +1 -0
  1669. package/dist/react-sdk/domain-context/component-hooks/use-component.js +1 -1
  1670. package/dist/react-sdk/domain-context/entity-hooks/use-domain-entity-state.js +1 -1
  1671. package/dist/react-sdk/domain-context/entity-hooks/use-entity-price.js +1 -1
  1672. package/dist/react-sdk/domain-context/entity-hooks/use-root-entity-id.js +1 -1
  1673. package/dist/react-sdk/domain-context/entity-hooks/use-root-entity-state.js +1 -1
  1674. package/dist/react-sdk/domain-context/index.d.ts +7 -0
  1675. package/dist/react-sdk/domain-context/index.js +1 -1
  1676. package/dist/react-sdk/domain-context/system-hooks/composition-hooks.js +1 -1
  1677. package/dist/react-sdk/domain-context/system-hooks/dimension-hooks.js +1 -1
  1678. package/dist/react-sdk/domain-context/system-hooks/generate-share-link-hooks.d.ts +8 -0
  1679. package/dist/react-sdk/domain-context/system-hooks/generate-share-link-hooks.js +1 -0
  1680. package/dist/react-sdk/domain-context/system-hooks/hover-hooks.d.ts +2 -2
  1681. package/dist/react-sdk/domain-context/system-hooks/hover-hooks.js +1 -1
  1682. package/dist/react-sdk/domain-context/system-hooks/locale-switch-hooks.d.ts +24 -0
  1683. package/dist/react-sdk/domain-context/system-hooks/locale-switch-hooks.js +1 -0
  1684. package/dist/react-sdk/domain-context/system-hooks/navigation-hooks.js +1 -1
  1685. package/dist/react-sdk/domain-context/system-hooks/selection-hooks.js +1 -1
  1686. package/dist/react-sdk/domain-context/system-hooks/share-links-hooks.d.ts +32 -0
  1687. package/dist/react-sdk/domain-context/system-hooks/share-links-hooks.js +1 -0
  1688. package/dist/react-sdk/domain-context/system-hooks/step-navigation-hooks.d.ts +57 -0
  1689. package/dist/react-sdk/domain-context/system-hooks/step-navigation-hooks.js +1 -0
  1690. package/dist/react-sdk/domain-context/system-hooks/tab-navigation-hooks.d.ts +61 -0
  1691. package/dist/react-sdk/domain-context/system-hooks/tab-navigation-hooks.js +1 -0
  1692. package/dist/react-sdk/domain-context/system-hooks/undo-redo-hooks.d.ts +20 -0
  1693. package/dist/react-sdk/domain-context/system-hooks/undo-redo-hooks.js +1 -0
  1694. package/dist/react-sdk/domain-controls/ChildEntityCardSelector.d.ts +2 -3
  1695. package/dist/react-sdk/domain-controls/ChildEntityListSelector.d.ts +2 -3
  1696. package/dist/react-sdk/domain-controls/ChildEntityToggleSelector.d.ts +2 -3
  1697. package/dist/react-sdk/domain-controls/hooks/use-cook-replace-recipes.d.ts +3 -3
  1698. package/dist/react-sdk/elements/PhoenixEntityElement.js +1 -1
  1699. package/dist/react-sdk/elements/PhoenixLayoutElement.js +1 -1
  1700. package/dist/react-sdk/handlers/FinalizeActionRunner.d.ts +13 -0
  1701. package/dist/react-sdk/handlers/FinalizeActionRunner.js +1 -0
  1702. package/dist/react-sdk/handlers/FinalizeActionsHost.d.ts +10 -0
  1703. package/dist/react-sdk/handlers/FinalizeActionsHost.js +1 -0
  1704. package/dist/react-sdk/handlers/FinalizeActionsProvider.d.ts +11 -0
  1705. package/dist/react-sdk/handlers/FinalizeActionsProvider.js +1 -0
  1706. package/dist/react-sdk/handlers/finalize-actions-context.d.ts +6 -0
  1707. package/dist/react-sdk/handlers/finalize-actions-context.js +1 -0
  1708. package/dist/react-sdk/handlers/finalize-actions-store.d.ts +23 -0
  1709. package/dist/react-sdk/handlers/finalize-actions-store.js +1 -0
  1710. package/dist/react-sdk/handlers/index.d.ts +6 -0
  1711. package/dist/react-sdk/handlers/index.js +1 -1
  1712. package/dist/react-sdk/handlers/use-finalize-action.d.ts +32 -0
  1713. package/dist/react-sdk/handlers/use-finalize-action.js +1 -0
  1714. package/dist/react-sdk/handlers/use-finalize-actions.d.ts +53 -0
  1715. package/dist/react-sdk/handlers/use-finalize-actions.js +1 -0
  1716. package/dist/react-sdk/index.d.ts +9 -0
  1717. package/dist/react-sdk/index.js +1 -1
  1718. package/dist/react-sdk/integration/IntegrationSubscription.js +1 -0
  1719. package/dist/react-sdk/integration/index.d.ts +1 -0
  1720. package/dist/react-sdk/integration/index.js +1 -0
  1721. package/dist/react-sdk/lifecycle-providers/ConfiguratorDataProvider.d.ts +8 -0
  1722. package/dist/react-sdk/lifecycle-providers/ConfiguratorDataProvider.js +1 -0
  1723. package/dist/react-sdk/lifecycle-providers/LifecycleProviders.js +1 -0
  1724. package/dist/react-sdk/lifecycle-providers/index.d.ts +2 -0
  1725. package/dist/react-sdk/lifecycle-providers/index.js +1 -0
  1726. package/dist/react-sdk/loading-state/LoaderHost.d.ts +20 -0
  1727. package/dist/react-sdk/loading-state/LoaderHost.js +1 -0
  1728. package/dist/react-sdk/loading-state/built-in-loading-phase.d.ts +9 -0
  1729. package/dist/react-sdk/loading-state/built-in-loading-phase.js +1 -0
  1730. package/dist/react-sdk/loading-state/create-app-loader.d.ts +18 -0
  1731. package/dist/react-sdk/loading-state/create-app-loader.js +1 -0
  1732. package/dist/react-sdk/loading-state/index.d.ts +4 -2
  1733. package/dist/react-sdk/loading-state/index.js +1 -1
  1734. package/dist/react-sdk/loading-state/loading-state-hooks.d.ts +22 -0
  1735. package/dist/react-sdk/loading-state/loading-state-hooks.js +1 -0
  1736. package/dist/react-sdk/notifications/index.d.ts +1 -0
  1737. package/dist/react-sdk/notifications/index.js +1 -0
  1738. package/dist/react-sdk/notifications/snackbar-action-button.d.ts +30 -0
  1739. package/dist/react-sdk/notifications/snackbar-action-button.js +1 -0
  1740. package/dist/react-sdk/page-elements/ConfigurationNotFoundPagePropsProvider.d.ts +17 -0
  1741. package/dist/react-sdk/page-elements/ConfigurationNotFoundPagePropsProvider.js +1 -0
  1742. package/dist/react-sdk/page-elements/ConfiguratorErrorPagePropsProvider.d.ts +17 -0
  1743. package/dist/react-sdk/page-elements/ConfiguratorErrorPagePropsProvider.js +1 -0
  1744. package/dist/react-sdk/page-elements/configurator-error-page-props.d.ts +20 -0
  1745. package/dist/react-sdk/page-elements/configurator-error-page-props.js +1 -0
  1746. package/dist/react-sdk/page-elements/create-configuration-not-found-page.d.ts +15 -0
  1747. package/dist/react-sdk/page-elements/create-configuration-not-found-page.js +1 -0
  1748. package/dist/react-sdk/page-elements/create-configurator-error-page.d.ts +14 -0
  1749. package/dist/react-sdk/page-elements/create-configurator-error-page.js +1 -0
  1750. package/dist/react-sdk/page-elements/create-preset-ui.d.ts +9 -0
  1751. package/dist/react-sdk/page-elements/create-preset-ui.js +1 -0
  1752. package/dist/react-sdk/page-elements/index.d.ts +6 -0
  1753. package/dist/react-sdk/page-elements/index.js +1 -0
  1754. package/dist/react-sdk/preset-selection/PresetSelectionProvider.js +1 -0
  1755. package/dist/react-sdk/preset-selection/index.d.ts +1 -0
  1756. package/dist/react-sdk/preset-selection/index.js +1 -0
  1757. package/dist/react-sdk/provider-slots/ConfiguratorProviderSlotHost.d.ts +11 -0
  1758. package/dist/react-sdk/provider-slots/ConfiguratorProviderSlotHost.js +1 -0
  1759. package/dist/react-sdk/provider-slots/configurator-provider-slot.d.ts +24 -0
  1760. package/dist/react-sdk/provider-slots/configurator-provider-slot.js +1 -0
  1761. package/dist/react-sdk/provider-slots/create-configurator-provider-slot.d.ts +5 -0
  1762. package/dist/react-sdk/provider-slots/create-configurator-provider-slot.js +1 -0
  1763. package/dist/react-sdk/provider-slots/index.d.ts +3 -0
  1764. package/dist/react-sdk/provider-slots/index.js +1 -0
  1765. package/dist/react-sdk/scene-control-elements/AddEntityFabElement.d.ts +36 -0
  1766. package/dist/react-sdk/scene-control-elements/AddEntityFabElement.js +1 -0
  1767. package/dist/react-sdk/scene-control-elements/DeleteEntityFabElement.d.ts +44 -0
  1768. package/dist/react-sdk/scene-control-elements/DeleteEntityFabElement.js +1 -0
  1769. package/dist/react-sdk/scene-control-elements/NavigationHotspotElement.d.ts +38 -0
  1770. package/dist/react-sdk/scene-control-elements/NavigationHotspotElement.js +1 -0
  1771. package/dist/react-sdk/scene-control-elements/SelectionHotspotElement.d.ts +30 -0
  1772. package/dist/react-sdk/scene-control-elements/SelectionHotspotElement.js +1 -0
  1773. package/dist/react-sdk/scene-control-elements/ToolMenuFabElement.d.ts +30 -0
  1774. package/dist/react-sdk/scene-control-elements/ToolMenuFabElement.js +1 -0
  1775. package/dist/react-sdk/scene-control-elements/create-add-entity-fab.d.ts +9 -0
  1776. package/dist/react-sdk/scene-control-elements/create-add-entity-fab.js +1 -0
  1777. package/dist/react-sdk/scene-control-elements/create-delete-entity-fab.d.ts +9 -0
  1778. package/dist/react-sdk/scene-control-elements/create-delete-entity-fab.js +1 -0
  1779. package/dist/react-sdk/scene-control-elements/create-navigation-hotspot.d.ts +10 -0
  1780. package/dist/react-sdk/scene-control-elements/create-navigation-hotspot.js +1 -0
  1781. package/dist/react-sdk/scene-control-elements/create-selection-hotspot.d.ts +9 -0
  1782. package/dist/react-sdk/scene-control-elements/create-selection-hotspot.js +1 -0
  1783. package/dist/react-sdk/scene-control-elements/create-tool-menu-fab.d.ts +9 -0
  1784. package/dist/react-sdk/scene-control-elements/create-tool-menu-fab.js +1 -0
  1785. package/dist/react-sdk/scene-control-elements/index.d.ts +11 -0
  1786. package/dist/react-sdk/scene-control-elements/index.js +1 -0
  1787. package/dist/react-sdk/scene-control-elements/scene-control-tooltip-visibility.d.ts +5 -0
  1788. package/dist/react-sdk/scene-control-elements/scene-control-tooltip-visibility.js +1 -0
  1789. package/dist/react-sdk/session/NotAuthenticatedPage.d.ts +4 -0
  1790. package/dist/react-sdk/session/NotAuthenticatedPage.js +1 -1
  1791. package/dist/react-sdk/session/SessionServiceProvider.d.ts +5 -0
  1792. package/dist/react-sdk/session/SessionServiceProvider.js +1 -1
  1793. package/dist/react-sdk/web-component/create-web-component.js +1 -1
  1794. package/dist/react-sdk/web-component/god-mode/god-mode-registry.d.ts +30 -0
  1795. package/dist/react-sdk/web-component/god-mode/god-mode-registry.js +1 -0
  1796. package/dist/react-sdk/web-component/god-mode/index.d.ts +1 -0
  1797. package/dist/react-sdk/web-component/god-mode/index.js +1 -0
  1798. package/dist/ui-sdk/components/numerical-input/InputField.d.ts +2 -0
  1799. package/dist/ui-sdk/components/numerical-input/InputField.js +1 -1
  1800. package/dist/ui-sdk/components/numerical-input/NumericalInput.d.ts +2 -2
  1801. package/dist/ui-sdk/components/numerical-input/Slider.d.ts +3 -1
  1802. package/dist/ui-sdk/components/numerical-input/Slider.js +1 -1
  1803. package/dist/ui-sdk/components/snackbar/Snackbar.d.ts +24 -3
  1804. package/dist/ui-sdk/components/snackbar/Snackbar.js +1 -1
  1805. package/dist/ui-sdk/icons/__generated/ChatCircleText.d.ts +3 -0
  1806. package/dist/ui-sdk/icons/__generated/ChatCircleText.js +1 -0
  1807. package/dist/ui-sdk/icons/__generated/Lightbulb.d.ts +3 -0
  1808. package/dist/ui-sdk/icons/__generated/Lightbulb.js +1 -0
  1809. package/dist/ui-sdk/icons/__generated/Paperclip.d.ts +3 -0
  1810. package/dist/ui-sdk/icons/__generated/Paperclip.js +1 -0
  1811. package/dist/ui-sdk/icons/__generated/PencilSimpleLine.d.ts +3 -0
  1812. package/dist/ui-sdk/icons/__generated/PencilSimpleLine.js +1 -0
  1813. package/dist/ui-sdk/icons/__generated/XCircle.d.ts +3 -0
  1814. package/dist/ui-sdk/icons/__generated/XCircle.js +1 -0
  1815. package/dist/ui-sdk/icons/__generated/index.d.ts +10 -0
  1816. package/dist/ui-sdk/icons/__generated/index.js +1 -1
  1817. package/dist/ui-sdk/icons/icons-registry.js +1 -1
  1818. package/dist/ui-sdk/responsive-application/ResponsiveApplicationProvider.d.ts +9 -0
  1819. package/dist/ui-sdk/responsive-application/ResponsiveApplicationProvider.js +1 -1
  1820. package/dist/ui-sdk/responsive-application/index.d.ts +1 -0
  1821. package/dist/ui-sdk/responsive-application/responsive-state-store.d.ts +59 -0
  1822. package/dist/ui-sdk/responsive-application/responsive-state-store.js +1 -0
  1823. package/dist/ui-sdk/responsive-application/use-store-responsive-info.d.ts +7 -0
  1824. package/dist/ui-sdk/responsive-application/use-store-responsive-info.js +1 -0
  1825. package/dist/ui-sdk/theme/types.d.ts +5 -1
  1826. package/dist/watch/glob-matcher.d.ts +4 -4
  1827. package/dist/watch/glob-matcher.js +1 -1
  1828. package/dist/watch/watch.d.ts +4 -4
  1829. package/dist/watch/watch.js +1 -1
  1830. package/package.json +29 -11
  1831. package/schema/domain-spec.json +310 -8
  1832. package/dist/application-spec/caching/runtime-reference-store.d.ts +0 -50
  1833. package/dist/application-spec/caching/runtime-reference-store.js +0 -1
  1834. package/dist/application-spec/core/components/component-filter.d.ts +0 -53
  1835. package/dist/application-spec/core/components/index.d.ts +0 -2
  1836. package/dist/application-spec/core/expressions/index.d.ts +0 -2
  1837. package/dist/application-spec/generate-application/code/templates/nvmrc.d.ts +0 -1
  1838. package/dist/application-spec/generate-application/code/templates/nvmrc.js +0 -2
  1839. package/dist/application-spec/generate-application/code/templates/package-json.d.ts +0 -10
  1840. package/dist/application-spec/generate-application/code/templates/package-json.js +0 -1
  1841. package/dist/application-spec/generate-application/code/templates/skills/phoenix-cli-skill.d.ts +0 -1
  1842. package/dist/application-spec/generate-application/code/templates/skills/phoenix-cli-skill.js +0 -1
  1843. package/dist/application-spec/generate-application/code/templates/skills/phoenix-create-configurator-skill.d.ts +0 -3
  1844. package/dist/application-spec/generate-application/code/templates/skills/phoenix-create-configurator-skill.js +0 -166
  1845. package/dist/application-spec/generate-application/code/templates/skills/phoenix-feedback-skill.d.ts +0 -1
  1846. package/dist/application-spec/generate-application/code/templates/skills/phoenix-feedback-skill.js +0 -54
  1847. package/dist/application-spec/generate-application/code/templates/skills/phoenix-review-skill.d.ts +0 -1
  1848. package/dist/application-spec/generate-application/code/templates/skills/phoenix-review-skill.js +0 -115
  1849. package/dist/application-spec/generate-application/code/templates/skills/phoenix-skill.d.ts +0 -13
  1850. package/dist/application-spec/generate-application/code/templates/skills/phoenix-skill.js +0 -1
  1851. package/dist/application-spec/generate-application/code/templates/skills/phoenix-variants-skill.d.ts +0 -1
  1852. package/dist/application-spec/generate-application/code/templates/skills/phoenix-variants-skill.js +0 -6
  1853. package/dist/application-spec/generate-application/runtime/admin-runtime/admin-model-runtime.d.ts +0 -28
  1854. package/dist/application-spec/generate-application/runtime/admin-runtime/admin-model-runtime.js +0 -1
  1855. package/dist/application-spec/generate-application/runtime/admin-runtime/admin-runtime.d.ts +0 -27
  1856. package/dist/application-spec/generate-application/runtime/admin-runtime/admin-runtime.js +0 -1
  1857. package/dist/application-spec/generate-application/runtime/admin-runtime/states-runtime.d.ts +0 -8
  1858. package/dist/application-spec/generate-application/runtime/application-runtime.d.ts +0 -40
  1859. package/dist/application-spec/generate-application/runtime/application-runtime.js +0 -1
  1860. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-model-runtime.d.ts +0 -30
  1861. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-model-runtime.js +0 -1
  1862. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-runtime.d.ts +0 -36
  1863. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-runtime.js +0 -1
  1864. package/dist/application-spec/generate-application/runtime/configurator-runtime/states-runtime.d.ts +0 -11
  1865. package/dist/application-spec/generate-application/runtime/factory-data/factory-data-runtime.d.ts +0 -43
  1866. package/dist/application-spec/generate-application/runtime/factory-data/recipe-defaults.d.ts +0 -13
  1867. package/dist/application-spec/generate-application/runtime/factory-data/recipe-defaults.js +0 -1
  1868. package/dist/application-spec/generate-application/runtime/factory-data/static-violations.d.ts +0 -16
  1869. package/dist/application-spec/generate-application/runtime/factory-data/static-violations.js +0 -1
  1870. package/dist/application-spec/generate-application/runtime/generate-runtime-instance.d.ts +0 -2
  1871. package/dist/application-spec/generate-application/runtime/generate-runtime-instance.js +0 -1
  1872. package/dist/application-spec/generate-application/runtime/migrations/migration-runtime.d.ts +0 -53
  1873. package/dist/application-spec/generate-application/runtime/migrations/migration-runtime.js +0 -1
  1874. package/dist/application-spec/generate-application/runtime/sections/actions-runtime.d.ts +0 -14
  1875. package/dist/application-spec/generate-application/runtime/sections/assistant-runtime.d.ts +0 -10
  1876. package/dist/application-spec/generate-application/runtime/sections/build-sdk-optic.d.ts +0 -7
  1877. package/dist/application-spec/generate-application/runtime/sections/build-sdk-optic.js +0 -1
  1878. package/dist/application-spec/generate-application/runtime/sections/build-user-bound-optic.d.ts +0 -7
  1879. package/dist/application-spec/generate-application/runtime/sections/build-user-bound-optic.js +0 -1
  1880. package/dist/application-spec/generate-application/runtime/sections/component-optic.d.ts +0 -33
  1881. package/dist/application-spec/generate-application/runtime/sections/component-optic.js +0 -1
  1882. package/dist/application-spec/generate-application/runtime/sections/data-runtime.d.ts +0 -13
  1883. package/dist/application-spec/generate-application/runtime/sections/expression-runtime.d.ts +0 -46
  1884. package/dist/application-spec/generate-application/runtime/sections/expression-runtime.js +0 -1
  1885. package/dist/application-spec/generate-application/runtime/sections/generate-memo-eval-plan-runtime.d.ts +0 -29
  1886. package/dist/application-spec/generate-application/runtime/sections/generate-memo-eval-plan-runtime.js +0 -1
  1887. package/dist/application-spec/generate-application/runtime/sections/index.d.ts +0 -10
  1888. package/dist/application-spec/generate-application/runtime/sections/index.js +0 -1
  1889. package/dist/application-spec/generate-application/runtime/sections/preset-runtime.d.ts +0 -20
  1890. package/dist/application-spec/generate-application/runtime/sections/reflection-constants-runtime.d.ts +0 -8
  1891. package/dist/application-spec/generate-application/runtime/sections/reflection-constants-runtime.js +0 -1
  1892. package/dist/application-spec/generate-application/runtime/sections/theme-runtime.d.ts +0 -10
  1893. package/dist/application-spec/generate-application/runtime/sections/transformers-runtime.d.ts +0 -19
  1894. package/dist/application-spec/parse-application-files/spec/components/component-entry.d.ts +0 -90
  1895. package/dist/application-spec/parse-application-files/spec/expressions/expression.d.ts +0 -43
  1896. package/dist/configurator/application-runtime/extensions/systems/assistant-system/browser-details.d.ts +0 -17
  1897. package/dist/configurator/application-runtime/extensions/systems/assistant-system/browser-details.js +0 -1
  1898. package/dist/configurator/common/frontend-analytics.d.ts +0 -48
  1899. package/dist/configurator/common/use-finalize-action.d.ts +0 -31
  1900. package/dist/configurator/common/use-finalize-action.js +0 -1
  1901. package/dist/configurator/configurator-context/ConfiguratorDataProvider.d.ts +0 -2
  1902. package/dist/configurator/configurator-context/ConfiguratorDataProvider.js +0 -1
  1903. package/dist/configurator/configurator-context/IntegrationSubscription.js +0 -1
  1904. package/dist/configurator/configurator-context/LifecycleProviders.js +0 -1
  1905. package/dist/configurator/configurator-context/OnPresetLoadedHandler.js +0 -1
  1906. package/dist/configurator/configurator-context/PresetSelectionProvider.js +0 -1
  1907. package/dist/configurator/configurator-context/configurator-hooks/chat-hooks.d.ts +0 -1
  1908. package/dist/configurator/configurator-context/configurator-hooks/chat-hooks.js +0 -1
  1909. package/dist/configurator/configurator-context/configurator-routing/ConfiguratorRoutingProvider.d.ts +0 -11
  1910. package/dist/configurator/configurator-context/configurator-routing/ConfiguratorRoutingProvider.js +0 -1
  1911. package/dist/configurator/configurator-context/configurator-routing/OnGoToIndexHandler.d.ts +0 -10
  1912. package/dist/configurator/configurator-context/configurator-routing/OnGoToIndexHandler.js +0 -1
  1913. package/dist/configurator/configurator-context/configurator-routing/index.d.ts +0 -2
  1914. package/dist/configurator/configurator-context/configurator-routing/index.js +0 -1
  1915. package/dist/configurator/configurator-context/configurator-routing/use-power-routing-lifecycle.d.ts +0 -9
  1916. package/dist/configurator/configurator-context/configurator-routing/use-power-routing-lifecycle.js +0 -1
  1917. package/dist/configurator/ui/assistant/entity-link/entity-link-target.d.ts +0 -5
  1918. package/dist/configurator/ui/assistant/entity-link/entity-link-target.js +0 -1
  1919. package/dist/configurator/ui/phoenix-layout-elements/language/use-locale-options.d.ts +0 -4
  1920. package/dist/configurator/ui/phoenix-layout-elements/language/use-locale-options.js +0 -1
  1921. package/dist/configurator/ui/phoenix-layout-elements/measurements/use-measurements-visibility.d.ts +0 -4
  1922. package/dist/configurator/ui/phoenix-layout-elements/measurements/use-measurements-visibility.js +0 -1
  1923. package/dist/domain/application/assistant/assistant-manifest.d.ts +0 -71
  1924. package/dist/domain/application/assistant/assistant-resolved-manifest.d.ts +0 -131
  1925. package/dist/domain/available-system-components.d.ts +0 -11
  1926. package/dist/domain/available-system-components.js +0 -1
  1927. package/dist/domain/domain-builder.d.ts +0 -40
  1928. package/dist/domain/domain-builder.js +0 -1
  1929. package/dist/domain/domain-runtime/errors/implementation-error-collector.d.ts +0 -19
  1930. package/dist/domain/domain-runtime/errors/implementation-error-collector.js +0 -1
  1931. package/dist/domain/domain-runtime/spec/module-checks/element-registration.d.ts +0 -110
  1932. package/dist/domain/domain-runtime/spec/module-checks/element-registration.js +0 -1
  1933. package/dist/domain/domain-runtime/spec/module-checks/index.d.ts +0 -8
  1934. package/dist/domain/domain-runtime/spec/module-checks/index.js +0 -1
  1935. package/dist/domain/domain-runtime/spec/module-checks/project-modules.d.ts +0 -32
  1936. package/dist/domain/domain-runtime/spec/module-checks/project-modules.js +0 -1
  1937. package/dist/domain/domain-runtime/spec/module-checks/resolve-action-modules.d.ts +0 -4
  1938. package/dist/domain/domain-runtime/spec/module-checks/resolve-component-optic-modules.d.ts +0 -4
  1939. package/dist/domain/domain-runtime/spec/module-checks/resolve-expression-modules.d.ts +0 -15
  1940. package/dist/domain/domain-runtime/spec/module-checks/resolve-expression-modules.js +0 -1
  1941. package/dist/domain/domain-runtime/spec/module-checks/resolve-imported-transformers.d.ts +0 -22
  1942. package/dist/domain/domain-runtime/spec/module-checks/resolve-imported-transformers.js +0 -1
  1943. package/dist/domain/domain-runtime/spec/module-checks/resolve-invariant-modules.d.ts +0 -6
  1944. package/dist/domain/extensions/client-side-image.d.ts +0 -14
  1945. package/dist/domain/extensions/client-side-image.js +0 -1
  1946. package/dist/domain/extensions/save-template-thumbnail.d.ts +0 -14
  1947. package/dist/domain/extensions/save-template-thumbnail.js +0 -1
  1948. package/dist/phoenix/commands/generate-project-files.d.ts +0 -6
  1949. package/dist/phoenix/commands/generate-project-files.js +0 -1
  1950. package/dist/phoenix/commands/generated-env-markers.d.ts +0 -7
  1951. package/dist/phoenix/commands/generated-env-markers.js +0 -1
  1952. package/dist/phoenix/services/lingui.d.ts +0 -7
  1953. package/dist/phoenix/services/lingui.js +0 -1
  1954. package/dist/phoenix/services/phoenix-application.d.ts +0 -21
  1955. package/dist/phoenix/services/phoenix-application.js +0 -1
  1956. package/dist/react-sdk/application-runtime/runtime/god-mode.d.ts +0 -19
  1957. package/dist/react-sdk/application-runtime/runtime/god-mode.js +0 -1
  1958. package/dist/react-sdk/loading-state/LoadingStateProvider.d.ts +0 -31
  1959. package/dist/react-sdk/loading-state/LoadingStateProvider.js +0 -1
  1960. package/dist/react-sdk/loading-state/loading-state-manager.d.ts +0 -32
  1961. package/dist/react-sdk/loading-state/loading-state-manager.js +0 -1
  1962. /package/dist/application-spec/{core/expressions/relation-expression-params.js → parse-application-files/spec/expressions/expression-read.js} +0 -0
  1963. /package/dist/{application-spec/parse-application-files/spec/components/component-entry.js → configurator/application-runtime/extensions/systems/assistant-system/assistant-annotation.js} +0 -0
  1964. /package/dist/{domain/application/assistant/assistant-manifest.js → configurator/ui/assistant/form/form-model.js} +0 -0
  1965. /package/dist/{application-spec/parse-application-files/spec/expressions/expression.js → configurator/ui/assistant/form-elements/form-element-props.js} +0 -0
  1966. /package/dist/{application-spec/core → domain/spec/application}/application-instance.d.ts +0 -0
  1967. /package/dist/{application-spec/core → domain/spec/application}/application-instance.js +0 -0
  1968. /package/dist/{application-spec/core → domain/spec}/components/component-filter.js +0 -0
  1969. /package/dist/{application-spec/core → domain/spec}/components/index.js +0 -0
  1970. /package/dist/{application-spec/core → domain/spec}/components/sdk-code-ref.d.ts +0 -0
  1971. /package/dist/{application-spec/core → domain/spec}/components/sdk-code-ref.js +0 -0
  1972. /package/dist/domain/{domain-runtime → spec}/errors/implementation-error.d.ts +0 -0
  1973. /package/dist/domain/{domain-runtime → spec}/errors/implementation-error.js +0 -0
  1974. /package/dist/domain/{domain-runtime → spec}/errors/implementation-errors.d.ts +0 -0
  1975. /package/dist/domain/{domain-runtime → spec}/errors/implementation-errors.js +0 -0
  1976. /package/dist/domain/{domain-runtime → spec}/errors/index.d.ts +0 -0
  1977. /package/dist/domain/{domain-runtime → spec}/errors/index.js +0 -0
  1978. /package/dist/domain/{domain-runtime → spec}/errors/to-implementation-errors.d.ts +0 -0
  1979. /package/dist/domain/{domain-runtime → spec}/errors/to-implementation-errors.js +0 -0
  1980. /package/dist/{application-spec/core → domain/spec}/expressions/index.js +0 -0
  1981. /package/dist/{application-spec/core → domain/spec}/expressions/relation-expression-params.d.ts +0 -0
  1982. /package/dist/{application-spec/core → domain/spec}/expressions/sdk-expression-implementation.d.ts +0 -0
  1983. /package/dist/{application-spec/core → domain/spec}/expressions/sdk-expression-implementation.js +0 -0
  1984. /package/dist/{application-spec/parse-application-files/spec/components → domain/spec/markers}/component-prop-target.d.ts +0 -0
  1985. /package/dist/{application-spec/parse-application-files/spec/components → domain/spec/markers}/component-prop-target.js +0 -0
  1986. /package/dist/{application-spec/core → domain/spec}/markers/eval-marker.d.ts +0 -0
  1987. /package/dist/{application-spec/core → domain/spec}/markers/eval-marker.js +0 -0
  1988. /package/dist/domain/{domain-runtime/spec/module-checks → spec/modules}/handler-registration.d.ts +0 -0
  1989. /package/dist/domain/{domain-runtime/spec/module-checks → spec/modules}/handler-registration.js +0 -0
  1990. /package/dist/domain/{domain-runtime/spec/module-checks → spec/modules}/resolve-action-modules.js +0 -0
  1991. /package/dist/domain/{domain-runtime/spec/module-checks → spec/modules}/resolve-component-optic-modules.js +0 -0
  1992. /package/dist/domain/{domain-runtime/spec/module-checks → spec/modules}/resolve-invariant-modules.js +0 -0
  1993. /package/dist/{application-spec/generate-application → domain/spec}/runtime/admin-runtime/states-runtime.js +0 -0
  1994. /package/dist/{application-spec/generate-application → domain/spec}/runtime/configurator-runtime/states-runtime.js +0 -0
  1995. /package/dist/{application-spec/generate-application → domain/spec}/runtime/factory-data/factory-data-runtime.js +0 -0
  1996. /package/dist/{application-spec/generate-application → domain/spec}/runtime/factory-data/index.d.ts +0 -0
  1997. /package/dist/{application-spec/generate-application → domain/spec}/runtime/factory-data/index.js +0 -0
  1998. /package/dist/{application-spec/generate-application → domain/spec}/runtime/migrations/index.d.ts +0 -0
  1999. /package/dist/{application-spec/generate-application → domain/spec}/runtime/migrations/index.js +0 -0
  2000. /package/dist/{application-spec/generate-application → domain/spec}/runtime/sections/actions-runtime.js +0 -0
  2001. /package/dist/{application-spec/generate-application → domain/spec}/runtime/sections/assistant-runtime.js +0 -0
  2002. /package/dist/{application-spec/generate-application → domain/spec}/runtime/sections/data-runtime.js +0 -0
  2003. /package/dist/{application-spec/generate-application → domain/spec}/runtime/sections/preset-runtime.js +0 -0
  2004. /package/dist/{application-spec/generate-application → domain/spec}/runtime/sections/theme-runtime.js +0 -0
  2005. /package/dist/{application-spec/generate-application → domain/spec}/runtime/sections/transformers-runtime.js +0 -0
  2006. /package/dist/domain/{application/assistant/assistant-resolved-manifest.js → spec/sections/assistant/assistant-manifest.js} +0 -0
  2007. /package/dist/{configurator/common → react-sdk/application-runtime/common-services/analytics}/frontend-analytics.js +0 -0
  2008. /package/dist/{configurator/configurator-context → react-sdk/domain-application-context}/OnPresetLoadedHandler.d.ts +0 -0
  2009. /package/dist/{configurator/configurator-context → react-sdk/integration}/IntegrationSubscription.d.ts +0 -0
  2010. /package/dist/{configurator/configurator-context → react-sdk/lifecycle-providers}/LifecycleProviders.d.ts +0 -0
  2011. /package/dist/{configurator/configurator-context → react-sdk/preset-selection}/PresetSelectionProvider.d.ts +0 -0
@@ -0,0 +1,1829 @@
1
+ # Kestrel Kettle
2
+
3
+ Sell a small product from one calm page that looks like the shop's own. A specialty-coffee shop, Aldermoor Coffee, sells its Kestrel pour-over kettle in three finishes, two handle woods and with or without a thermometer lid. The page reads like an editorial product page: the kettle on the left, a quiet column on the right with the name, the story, three rows of choices, the price and **Add to cart**, and the shop's promises in a thin strip at the bottom. On a phone the page opens on the shop's own start screen, "Make it yours", and then shows the kettle above one scrolling column. The project writes the page as one layout element; the spec holds the product, its prices, the rule between finish and wood, and the cart action.
4
+
5
+ - [Try it](#try-it)
6
+ - [What the example demonstrates](#what-the-example-demonstrates)
7
+ - [One page over the scene](#one-page-over-the-scene)
8
+ - [Choices from the spec](#choices-from-the-spec)
9
+ - [A rule between two choices](#a-rule-between-two-choices)
10
+ - [Add to cart](#add-to-cart)
11
+ - [The phone's start screen](#the-phones-start-screen)
12
+ - [The shop's footer and the Powered by mark](#the-shops-footer-and-the-powered-by-mark)
13
+ - [Texts from the spec](#texts-from-the-spec)
14
+ - [The stage and the model](#the-stage-and-the-model)
15
+ - [Test cases](#test-cases)
16
+ - [What this layout leaves out](#what-this-layout-leaves-out)
17
+ - [Related pages](#related-pages)
18
+ - [Complete Implementation](#complete-implementation)
19
+
20
+ ## Try it
21
+
22
+ The phone version is under [The phone's start screen](#the-phones-start-screen).
23
+
24
+ ## What the example demonstrates
25
+
26
+ [Custom Layout](?path=/docs/layouts-custom-layout--docs) explains how a project layout works: the element name, the scene, the safe area and the hooks. This page is a finished design built the same way, for a single-page product with no steps or tabs, and it shows the pieces Custom Layout does not use:
27
+
28
+ | Piece | Where |
29
+ | ------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------- |
30
+ | `phx.frontend.useAttributeSwitch()` for an on/off choice | `ThermometerRow`, [Choices from the spec](#choices-from-the-spec) |
31
+ | `LayoutSlots.Services` with the built-in snackbars in `DesktopSnackbarsRoot` and `MobileSnackbarsRoot` | [A rule between two choices](#a-rule-between-two-choices) |
32
+ | `phx.frontend.useFinalizeActions()` for the spec's `addToCart` action | `CartBlock`, [Add to cart](#add-to-cart) |
33
+ | `phx.frontend.usePreview()` with the layout's own start screen, and `phx.frontend.useCloseAction()` | `PhonePoster`, `PhonePage`, [The phone's start screen](#the-phones-start-screen) |
34
+ | `phx.frontend.createLayoutFooter` with `LayoutSlots.DesktopFooter` and `MobileFooter` | [The shop's footer](#the-shops-footer-and-the-powered-by-mark) |
35
+ | `LayoutSlots.DesktopPoweredBy` and `MobilePoweredBy` | the footer strip and the end of the phone's column |
36
+ | `phx.frontend.useLocalizable()` and `LocalizableMessage` | `ProductHeading`, [Texts from the spec](#texts-from-the-spec) |
37
+ | A `canvasCustomEnvironment` stage with procedural light and a contact shadow | `KettleStudio`, [The stage and the model](#the-stage-and-the-model) |
38
+
39
+ ## One page over the scene
40
+
41
+ `src/elements/ConfiguratorLayout.tsx` keeps the scene and the services mounted for as long as the configuration is open and chooses what lies over the scene: the start screen on a phone while `phx.frontend.usePreview().isPreview` is set, the phone page, or the desktop page. `phx.frontend.useActiveViewports()` tells desktop from phone by the width of the configurator's container, not the window.
42
+
43
+ ```tsx
44
+ import { Box } from '@mui/material'
45
+
46
+ import { LayoutSlots } from '@salsita-ai/sdk/configurator'
47
+
48
+ import { DesktopPage } from '../_shared/DesktopPage.js'
49
+ import { PhonePage } from '../_shared/PhonePage.js'
50
+ import { PhonePoster } from '../_shared/PhonePoster.js'
51
+ import { KESTREL } from '../_shared/tokens.js'
52
+
53
+ // One page, no steps or tabs. The canvas and the services stay mounted the whole time; what lies over the canvas is
54
+ // the phone's start screen, the phone page or the desktop page. Each calls `useSceneSafeArea` itself, so only the one
55
+ // on screen tells the camera where the kettle goes.
56
+ const ConfiguratorLayout = () => {
57
+ // `null` until the container has been measured; only the scene shows until then
58
+ const viewports = phx.frontend.useActiveViewports()
59
+ const { isPreview } = phx.frontend.usePreview()
60
+ const isDesktop = viewports?.includes('desktop') ?? false
61
+
62
+ return (
63
+ <Box component="div" sx={{ position: 'absolute', inset: 0, overflow: 'clip', bgcolor: KESTREL.oat }}>
64
+ <LayoutSlots.Services />
65
+ <LayoutSlots.SharedCanvas />
66
+ {viewports !== null && (isPreview ? <PhonePoster /> : isDesktop ? <DesktopPage /> : <PhonePage />)}
67
+ </Box>
68
+ )
69
+ }
70
+
71
+ export default phx.frontend.createCustomPhoenixLayoutElement('ConfiguratorLayout', ConfiguratorLayout)
72
+ ```
73
+
74
+ - **Each arrangement measures its own safe area.** `DesktopPage`, `PhonePage` and `PhonePoster` each call `phx.frontend.useSceneSafeArea()` and attach `safeAreaRef` to a box inside the free area, inset from its edges. The camera fits the kettle into that box, so the inset is the breathing room around the product. Only the arrangement on screen is mounted, so only one of them steers the camera.
75
+ - **The camera fits the product, it does not use a fixed distance.** Both `fitRootPerspectiveCamera` instances leave `distance` out and set `fitToBox: true`. A `distance` overrides the fit, and the kettle is then as large on a 390-pixel phone as on a desktop.
76
+ - **Fullscreen** removes the column and the footer, so the free area, and the kettle with it, takes the whole canvas. The button sets the flag with `phx.frontend.useSetFullscreen()`; the layout reads it with `phx.frontend.useIsFullscreenActive()`. Like the built-in fullscreen button, it records `FrontendAnalyticsFactory.FullScreenModeToggled()` from `@salsita-ai/sdk/configurator` through `phx.frontend.useAnalytics().push()`, on entering and on leaving.
77
+
78
+ ## Choices from the spec
79
+
80
+ The three choices are plain spec components on the root entity. The layout decides how they look: round swatches for the finish and the wood, a switch for the thermometer lid.
81
+
82
+ ```yaml
83
+ components:
84
+ Kettle:
85
+ attributeSelection:
86
+ bodyFinish:
87
+ value:
88
+ $bind: bodyFinish
89
+ options:
90
+ - label: Brushed steel
91
+ description: Satin stainless that hides fingerprints
92
+ value: BrushedSteel
93
+ - label: Matte black
94
+ description: A soft powder coat
95
+ value: MatteBlack
96
+ - label: Copper
97
+ description: Lacquered copper, warm in the light
98
+ value: Copper
99
+ handleWood:
100
+ value:
101
+ $bind: handleWood
102
+ options:
103
+ - label: Walnut
104
+ description: Dark and oiled
105
+ value: Walnut
106
+ - label: Oak
107
+ description: Pale and matte
108
+ value: Oak
109
+ attributeSwitch:
110
+ thermometer:
111
+ value:
112
+ $bind: thermometer
113
+ ```
114
+
115
+ `SwatchRow` draws one `attributeSelection` with `phx.frontend.useAttributeSelection(kettleId, instanceName)`: a `radiogroup` of round buttons, the chosen option's `title` beside the label and its `description` below. The colours of the swatches are the layout's, keyed by the option `value`; the spec's `attributeSelection` carries no label either, so "Body finish" and "Handle" are the layout's text too. The arrow keys move the selection within a row.
116
+
117
+ An `attributeSwitch` is a boolean. `phx.frontend.useAttributeSwitch(kettleId, 'thermometer')` returns `state.value` and `onChange()`, which writes the opposite value, so it fits a switch directly:
118
+
119
+ ```tsx
120
+ import { Box, Switch, Typography } from '@mui/material'
121
+
122
+ import { KESTREL, LABEL_SX } from './tokens.js'
123
+
124
+ interface ThermometerRowProps {
125
+ readonly readOnly: boolean
126
+ }
127
+
128
+ // The spec's `attributeSwitch` as a labelled switch: on, the lid carries a dial thermometer; off, a plain wooden knob
129
+ export const ThermometerRow = ({ readOnly }: ThermometerRowProps) => {
130
+ const kettleId = phx.frontend.useRootEntityId()
131
+ const thermometer = phx.frontend.useAttributeSwitch(kettleId, 'thermometer')
132
+ const isOn = thermometer.state.value
133
+
134
+ return (
135
+ <Box component="section" sx={{ display: 'grid', gap: 0.5, paddingBlock: 2 }}>
136
+ <Box component="div" sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: 2 }}>
137
+ <Typography component="h3" id="kestrel-thermometer-label" sx={LABEL_SX}>
138
+ Thermometer lid
139
+ </Typography>
140
+ <Switch
141
+ checked={isOn}
142
+ disabled={readOnly || thermometer.disabled}
143
+ onChange={thermometer.onChange}
144
+ inputProps={{ 'aria-labelledby': 'kestrel-thermometer-label' }}
145
+ sx={{
146
+ '& .MuiSwitch-switchBase.Mui-checked': { color: KESTREL.oat },
147
+ '& .MuiSwitch-switchBase.Mui-checked + .MuiSwitch-track': { bgcolor: KESTREL.copper, opacity: 1 },
148
+ '& .MuiSwitch-track': { bgcolor: KESTREL.hairline, opacity: 1 },
149
+ }}
150
+ />
151
+ </Box>
152
+ <Typography sx={{ fontSize: 13, color: KESTREL.muted }}>
153
+ {isOn ? 'A dial in the lid shows when the water is ready to pour.' : 'A plain lid with a wooden knob.'}
154
+ </Typography>
155
+ </Box>
156
+ )
157
+ }
158
+ ```
159
+
160
+ The choices change the scene through the spec, not through the layout. A material override recolours the `Body` material from expressions in `src/expressions/kettle.ts`, which also add each choice's surcharge to `$price`, and the switch shows the dial or the knob:
161
+
162
+ ```yaml
163
+ components:
164
+ Kettle:
165
+ sceneEntityObjectProperties:
166
+ knob:
167
+ visible:
168
+ $read: $plainKnob
169
+ thermometerDial:
170
+ visible:
171
+ $read: thermometer
172
+ sceneEntityLocalMaterialOverride:
173
+ body:
174
+ materialsToOverride: [Body]
175
+ materialType: physical
176
+ color:
177
+ $read: $bodyColor
178
+ metalness:
179
+ $read: $bodyMetalness
180
+ roughness:
181
+ $read: $bodyRoughness
182
+ clearcoat:
183
+ $read: $bodyClearcoat
184
+ clearcoatRoughness: 0.15
185
+ ```
186
+
187
+ ## A rule between two choices
188
+
189
+ The copper body is sold only with the walnut handle. The rule is an invariant: its message and severity are in the spec, its condition in `src/invariants/kettle.ts`.
190
+
191
+ ```yaml
192
+ invariants:
193
+ Kettle:
194
+ copperNeedsWalnut:
195
+ type: copperNeedsWalnut
196
+ severity: fixable
197
+ message: The copper body comes only with the walnut handle.
198
+ ```
199
+
200
+ ```ts
201
+ // The copper body is sold only with the walnut handle. The spec marks the violation `fixable`, so a change that breaks
202
+ // it is rejected and the built-in snackbar shows the spec's message.
203
+ export default phx.domain.implementCustomInvariants({
204
+ Kettle: {
205
+ copperNeedsWalnut: s => {
206
+ return s.bodyFinish !== 'Copper' || s.handleWood === 'Walnut'
207
+ },
208
+ },
209
+ })
210
+ ```
211
+
212
+ The customer sees the rule twice:
213
+
214
+ - **Before choosing.** While the handle is oak, the control hook marks the copper option `disabled` with `hint` set to the invariant's message. `SwatchRow` fades the swatch, sets `aria-disabled` and shows the hint below the row; while the body is copper, the oak swatch is faded the same way.
215
+ - **After choosing anyway.** The faded swatch stays clickable and calls the option's `onSelect()`. A `fixable` violation rejects the change, the kettle keeps its finish, and `LayoutSlots.Services` raises the built-in snackbar "Kettle-1: The copper body comes only with the walnut handle." The built-in snackbar puts the entity id before the message.
216
+
217
+ The snackbars render where the layout mounts a root. On a desktop `LayoutSlots.DesktopSnackbarsRoot` is a zero-height element at the bottom left of the free area, and the snackbars stack upwards from it. On a phone `LayoutSlots.MobileSnackbarsRoot` leaves them fixed to the viewport; `PhonePage` places them below its top bar by styling `notistackSnackbarClasses.container` from `@salsita-ai/sdk/ui`. Mount the snackbars or `phx.frontend.useConfiguratorMessages()`, not both, see [Custom Layout → Show messages](?path=/docs/layouts-custom-layout--docs#show-messages) for the other way.
218
+
219
+ Passing the violation type to the hook's third argument, `fixableViolations`, does not enable the option: it only drops the violation from `hint`. A layout that wants the option clickable calls `onSelect()` on the disabled option, as `SwatchRow` does.
220
+
221
+ ## Add to cart
222
+
223
+ The spec declares one finalize action. Its handler, `src/handlers/add-to-cart.ts`, stands in for the shop's cart: it waits, then enters the `added` navigation state.
224
+
225
+ ```yaml
226
+ navigationStates:
227
+ - configure
228
+ - added
229
+ ```
230
+
231
+ ```yaml
232
+ components:
233
+ Kettle:
234
+ finalizeAction:
235
+ addToCart:
236
+ variant: primary
237
+ label: Add to cart
238
+ title: Add the kettle as configured to the cart
239
+ icon: ShoppingBag
240
+ handler: addToCart
241
+ ```
242
+
243
+ ```ts
244
+ import { useCallback } from 'react'
245
+
246
+ // Stands in for the shop's cart: adding takes a moment, then the page shows the confirmation
247
+ export default phx.frontend.createPhoenixHandler('addToCart', () => {
248
+ const navigate = phx.frontend.useNavigate()
249
+
250
+ return {
251
+ handler: useCallback(async () => {
252
+ await new Promise(resolve => setTimeout(resolve, 1200))
253
+ navigate('added')
254
+ }, [navigate]),
255
+ }
256
+ })
257
+ ```
258
+
259
+ `CartBlock` shows the price from `phx.frontend.useRootEntityPrice()` and runs the action from `phx.frontend.useFinalizeActions().primary`. The hook runs the handler beside the layout, so the pending state survives the block unmounting, for example in fullscreen. In the `added` state the block confirms the purchase and **Make another** returns to `configure`; `KettleOptions` keeps the choices as they were added until then. A viewer of a shared configuration sees the price and no button, because neither hook checks read mode. `DesktopPage` keeps the block at the bottom of the column with `position: sticky`, so the button stays in view when a short window makes the column scroll.
260
+
261
+ ```tsx
262
+ import { Alert, Box, Button, CircularProgress, Typography } from '@mui/material'
263
+
264
+ import { KESTREL } from './tokens.js'
265
+
266
+ const CHECK_ICON = 'M5 12.5 10 17.5 19 7'
267
+
268
+ // The price and the spec's `addToCart` finalize action. `useFinalizeActions` runs the action's handler beside the
269
+ // layout, so its pending state survives this block unmounting, as it does in fullscreen. The handler moves to the
270
+ // `added` navigation state, where the block confirms the purchase instead. A viewer sees the price only.
271
+ export const CartBlock = () => {
272
+ const price = phx.frontend.useRootEntityPrice()
273
+ const { primary, hints } = phx.frontend.useFinalizeActions()
274
+ const navigationState = phx.frontend.useActiveNavigationState()
275
+ const navigate = phx.frontend.useNavigate()
276
+ const { accessInfo } = phx.frontend.useAccessService()
277
+ const isPending = primary?.isPending ?? false
278
+
279
+ if (navigationState === 'added') {
280
+ return (
281
+ <Box component="div" role="status" sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>
282
+ <Box
283
+ component="svg"
284
+ viewBox="0 0 24 24"
285
+ aria-hidden
286
+ sx={{ inlineSize: 40, blockSize: 40, flex: 'none', padding: 1, borderRadius: '50%', bgcolor: KESTREL.sage }}
287
+ >
288
+ <path d={CHECK_ICON} fill="none" stroke={KESTREL.oat} strokeWidth={2.4} strokeLinecap="round" />
289
+ </Box>
290
+ <Box component="div" sx={{ display: 'grid', flex: 1 }}>
291
+ <Typography sx={{ fontFamily: KESTREL.display, fontSize: 20, color: KESTREL.charcoal }}>
292
+ In your cart
293
+ </Typography>
294
+ <Typography sx={{ fontSize: 13, color: KESTREL.muted }}>Kestrel, {price}</Typography>
295
+ </Box>
296
+ <Button
297
+ onClick={() => navigate('configure')}
298
+ sx={{ textTransform: 'none', color: KESTREL.charcoal, textDecoration: 'underline', fontSize: 14 }}
299
+ >
300
+ Make another
301
+ </Button>
302
+ </Box>
303
+ )
304
+ }
305
+
306
+ const showButton = primary !== null && !accessInfo.viewMode
307
+
308
+ return (
309
+ <Box component="div" sx={{ display: 'grid', gap: 1.5 }}>
310
+ <Box component="div" sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: 2 }}>
311
+ <Box component="div" sx={{ display: 'grid' }}>
312
+ <Typography sx={{ fontFamily: KESTREL.display, fontSize: 30, lineHeight: 1.1, color: KESTREL.charcoal }}>
313
+ {price}
314
+ </Typography>
315
+ <Typography sx={{ fontSize: 12, color: KESTREL.muted, whiteSpace: 'nowrap' }}>Ships in two days</Typography>
316
+ </Box>
317
+ {showButton && (
318
+ <Button
319
+ variant="contained"
320
+ disableElevation
321
+ disabled={primary.disabled || isPending}
322
+ onClick={() => void primary.run()}
323
+ title={primary.title}
324
+ startIcon={isPending ? <CircularProgress size={16} color="inherit" /> : undefined}
325
+ sx={{
326
+ minBlockSize: 52,
327
+ paddingInline: 4.5,
328
+ borderRadius: 999,
329
+ bgcolor: KESTREL.charcoal,
330
+ color: KESTREL.oat,
331
+ fontFamily: KESTREL.body,
332
+ fontSize: 15,
333
+ letterSpacing: '0.02em',
334
+ textTransform: 'none',
335
+ '&:hover': { bgcolor: '#000000' },
336
+ '&.Mui-disabled': { bgcolor: KESTREL.charcoal, color: KESTREL.oat, opacity: 0.55 },
337
+ }}
338
+ >
339
+ {isPending ? 'Adding…' : primary.label}
340
+ </Button>
341
+ )}
342
+ </Box>
343
+ {showButton && primary.disabled && hints && (
344
+ <Typography sx={{ fontSize: 13, color: KESTREL.muted }}>{hints}</Typography>
345
+ )}
346
+ {primary?.error && <Alert severity="error">The kettle could not be added: {primary.error.message}</Alert>}
347
+ </Box>
348
+ )
349
+ }
350
+ ```
351
+
352
+ ## The phone's start screen
353
+
354
+ `preview: auto` at the top of the spec asks for a start screen when the configurator's container is phone-sized. The built-in layout shows `MobilePreview`; a project layout shows its own while `phx.frontend.usePreview().isPreview` is set, and calls `enter()` to open the page. The poster frames the kettle in the area above its text with its own `useSceneSafeArea()`.
355
+
356
+ ```yaml
357
+ preview: auto
358
+ ```
359
+
360
+ The same layout in a frame 390 pixels wide, as on a phone. It opens on the start screen; **Start designing** opens the page, and the close button at the top left returns to the start screen. Opened on its own from the sidebar, the **Phone** story sets Storybook's viewport to 390 × 844.
361
+
362
+ ```tsx
363
+ import { Box, Button, Typography } from '@mui/material'
364
+
365
+ import { KESTREL, LABEL_SX } from './tokens.js'
366
+
367
+ // The layout's own start screen, shown on a phone while `usePreview().isPreview` is set (the spec's `preview: auto`).
368
+ // It frames the kettle in the area above the text with its own safe area; `enter()` opens the page.
369
+ export const PhonePoster = () => {
370
+ const { containerRef, safeAreaRef } = phx.frontend.useSceneSafeArea()
371
+ const { enter } = phx.frontend.usePreview()
372
+ const price = phx.frontend.useRootEntityPrice()
373
+
374
+ return (
375
+ <Box
376
+ component="div"
377
+ ref={containerRef}
378
+ sx={{
379
+ position: 'absolute',
380
+ inset: 0,
381
+ display: 'flex',
382
+ flexDirection: 'column',
383
+ fontFamily: KESTREL.body,
384
+ pointerEvents: 'none',
385
+ }}
386
+ >
387
+ <Typography
388
+ sx={{
389
+ paddingBlockStart: 3,
390
+ textAlign: 'center',
391
+ fontFamily: KESTREL.display,
392
+ fontSize: 20,
393
+ color: KESTREL.charcoal,
394
+ }}
395
+ >
396
+ Aldermoor
397
+ </Typography>
398
+ <Box component="div" ref={safeAreaRef} sx={{ flex: '1 1 0', minBlockSize: 0, marginInline: 3 }} />
399
+ <Box component="div" sx={{ display: 'grid', gap: 2, padding: 3, paddingBlockEnd: 4, pointerEvents: 'auto' }}>
400
+ <Typography sx={{ ...LABEL_SX, color: KESTREL.copper }}>The Kestrel pour-over kettle</Typography>
401
+ <Typography
402
+ component="h1"
403
+ sx={{
404
+ fontFamily: KESTREL.display,
405
+ fontSize: 48,
406
+ lineHeight: 1,
407
+ letterSpacing: '-0.01em',
408
+ color: KESTREL.charcoal,
409
+ }}
410
+ >
411
+ Make it yours
412
+ </Typography>
413
+ <Typography sx={{ fontSize: 15, lineHeight: 1.6, color: KESTREL.muted }}>
414
+ Three finishes, two woods and a thermometer lid if you want one. As shown, {price}.
415
+ </Typography>
416
+ <Button
417
+ variant="contained"
418
+ disableElevation
419
+ onClick={enter}
420
+ sx={{
421
+ marginBlockStart: 1,
422
+ minBlockSize: 52,
423
+ borderRadius: 999,
424
+ bgcolor: KESTREL.charcoal,
425
+ color: KESTREL.oat,
426
+ fontFamily: KESTREL.body,
427
+ fontSize: 15,
428
+ textTransform: 'none',
429
+ '&:hover': { bgcolor: '#000000' },
430
+ }}
431
+ >
432
+ Start designing
433
+ </Button>
434
+ </Box>
435
+ </Box>
436
+ )
437
+ }
438
+ ```
439
+
440
+ On a phone, `enter()` also expands the configurator, which `usePreview().isExpanded` reports. `PhonePage` offers one close button at the top left: the host's close action from `phx.frontend.useCloseAction()` when the integration provides one, otherwise `usePreview().leave()`, which returns to the start screen. Storybook provides no close action, so here the button returns to the start screen; with neither, the button is not shown.
441
+
442
+ ## The shop's footer and the Powered by mark
443
+
444
+ `LayoutSlots.DesktopFooter` and `LayoutSlots.MobileFooter` render the project's `LayoutFooter` element, registered with `phx.frontend.createLayoutFooter`, and nothing when there is none. The desktop page mounts it in the footer strip, with `LayoutSlots.DesktopPoweredBy` at the strip's right end; the phone page mounts `MobileFooter` and `MobilePoweredBy` at the end of its column.
445
+
446
+ ```tsx
447
+ import { Box } from '@mui/material'
448
+
449
+ import { KESTREL } from '../_shared/tokens.js'
450
+
451
+ const PROMISES = ['Free delivery over $75', 'Two-year warranty', '30-day returns']
452
+
453
+ // The shop's promises. `createLayoutFooter` registers it as the `LayoutFooter` element, which the layout shows where it
454
+ // mounts `LayoutSlots.DesktopFooter` or `LayoutSlots.MobileFooter`.
455
+ const LayoutFooter = () => {
456
+ return (
457
+ <Box
458
+ component="ul"
459
+ sx={{
460
+ display: 'flex',
461
+ flexWrap: 'wrap',
462
+ columnGap: 3,
463
+ rowGap: 0.5,
464
+ margin: 0,
465
+ padding: 0,
466
+ listStyle: 'none',
467
+ fontSize: 12,
468
+ letterSpacing: '0.04em',
469
+ color: KESTREL.muted,
470
+ }}
471
+ >
472
+ {PROMISES.map(promise => (
473
+ <Box
474
+ component="li"
475
+ key={promise}
476
+ sx={{ display: 'flex', alignItems: 'center', gap: 1, '&::before': { content: '"·"', color: KESTREL.sage } }}
477
+ >
478
+ {promise}
479
+ </Box>
480
+ ))}
481
+ </Box>
482
+ )
483
+ }
484
+
485
+ export default phx.frontend.createLayoutFooter(LayoutFooter)
486
+ ```
487
+
488
+ ## Texts from the spec
489
+
490
+ The `detail` component holds the name, the subtitle and the story. Its fields are `Localizable`, not `string`. `ProductHeading` resolves the title and subtitle with `phx.frontend.useLocalizable()` and renders the description in place with `LocalizableMessage` from `@salsita-ai/sdk/react`; `SwatchRow` resolves a list of option titles with `phx.frontend.useResolveLocalizable()`. See [Localization](?path=/docs/phoenix-localization--docs).
491
+
492
+ ```yaml
493
+ components:
494
+ Kettle:
495
+ detail:
496
+ main:
497
+ title: Kestrel
498
+ subtitle: Pour-over kettle, 0.9 litres
499
+ ```
500
+
501
+ ```tsx
502
+ import { Box, Typography } from '@mui/material'
503
+
504
+ import { detailComponent } from '@salsita-ai/sdk/domain'
505
+ import { LocalizableMessage } from '@salsita-ai/sdk/react'
506
+
507
+ import { KESTREL, LABEL_SX } from './tokens.js'
508
+
509
+ interface ProductHeadingProps {
510
+ readonly size: 'large' | 'small'
511
+ }
512
+
513
+ // The overline, the name and the story from the spec's `detail` component. Its texts are `Localizable`:
514
+ // `useLocalizable` resolves one into a string and `LocalizableMessage` renders one in place.
515
+ export const ProductHeading = ({ size }: ProductHeadingProps) => {
516
+ const detail = phx.frontend.useFirstRootComponent(detailComponent)
517
+ const title = phx.frontend.useLocalizable(detail?.state.title)
518
+ const subtitle = phx.frontend.useLocalizable(detail?.state.subtitle)
519
+
520
+ return (
521
+ <Box component="header" sx={{ display: 'grid', gap: size === 'large' ? 2 : 1.5 }}>
522
+ <Typography sx={{ ...LABEL_SX, color: KESTREL.copper }}>Aldermoor Coffee</Typography>
523
+ <Box component="div" sx={{ display: 'grid', gap: 0.75 }}>
524
+ <Typography
525
+ component="h1"
526
+ sx={{
527
+ fontFamily: KESTREL.display,
528
+ fontSize: size === 'large' ? 60 : 40,
529
+ lineHeight: 1,
530
+ letterSpacing: '-0.01em',
531
+ color: KESTREL.charcoal,
532
+ }}
533
+ >
534
+ {title}
535
+ </Typography>
536
+ <Typography sx={{ fontFamily: KESTREL.body, fontSize: 15, color: KESTREL.muted }}>{subtitle}</Typography>
537
+ </Box>
538
+ <Typography sx={{ fontFamily: KESTREL.body, fontSize: 15, lineHeight: 1.65, color: KESTREL.charcoal }}>
539
+ <LocalizableMessage>{detail?.state.description}</LocalizableMessage>
540
+ </Typography>
541
+ </Box>
542
+ )
543
+ }
544
+ ```
545
+
546
+ ## The stage and the model
547
+
548
+ The spec's `canvasCustomEnvironment` names `KettleStudio`, a layout element rendered inside the scene. It paints the page's oat colour as the scene's background, so the scene and the column read as one surface, lights the kettle with drei's `Lightformer` panels, which show only in the reflections and need no image download, and grounds it with a `ContactShadows` plane just below its base. The scene is in millimetres.
549
+
550
+ ```tsx
551
+ import { ContactShadows, Environment, Lightformer } from '@react-three/drei'
552
+
553
+ import { KESTREL } from '../_shared/tokens.js'
554
+
555
+ // The stage named by the spec's `canvasCustomEnvironment`: a backdrop, a soft shadow under the kettle and a studio of
556
+ // light panels. The panels exist only in the reflections, so the metal finishes have something to mirror and no image
557
+ // has to be downloaded. The scene is in millimetres.
558
+ export default phx.frontend.createCustomPhoenixLayoutElement('KettleStudio', () => {
559
+ return (
560
+ <>
561
+ {/* The page's oat background, so the scene and the layout read as one surface */}
562
+ <color attach="background" args={[KESTREL.oat]} />
563
+ <ambientLight intensity={0.35} />
564
+ <directionalLight position={[400, 900, 600]} intensity={1.1} />
565
+
566
+ <Environment resolution={256} frames={1}>
567
+ <color attach="background" args={['#77706a']} />
568
+ {/* A softbox above, tall strips at the sides for the long highlights, a warm fill behind, a dim one in front */}
569
+ <Lightformer form="rect" intensity={2.4} position={[0, 6, 0]} rotation-x={Math.PI / 2} scale={[10, 6, 1]} />
570
+ <Lightformer form="rect" intensity={3} position={[-6, 1, 2]} rotation-y={Math.PI / 2} scale={[1.2, 8, 1]} />
571
+ <Lightformer form="rect" intensity={1.6} position={[6, 1, 3]} rotation-y={-Math.PI / 2} scale={[1.2, 8, 1]} />
572
+ <Lightformer form="rect" color="#f3d9c2" intensity={1} position={[0, 1, -8]} scale={[12, 4, 1]} />
573
+ <Lightformer form="rect" intensity={0.8} position={[0, 0, 8]} rotation-y={Math.PI} scale={[10, 3, 1]} />
574
+ </Environment>
575
+
576
+ <ContactShadows position={[0, -1, 0]} scale={520} far={60} blur={2.2} opacity={0.7} resolution={512} />
577
+ </>
578
+ )
579
+ })
580
+ ```
581
+
582
+ The kettle is `public/models/gallery/kettle.glb`, generated by `scripts/models/kettle.ts` in the Storybook package from three.js geometry: lathed body, lid, base ring and knob, a gooseneck spout and a flat handle swept along curves, and a dial with ticks and a needle. Each part is a named node the spec loads with `sceneEntityRemoteObject.<name>.objectName`; the parts that change with a choice carry the `Body` and `Handle` materials the overrides target. The script and its helper live in `scripts/models/`, outside the example's `src/`, because every file under `src/` is part of this page.
583
+
584
+ ## Test cases
585
+
586
+ - The kettle stands on the left of the page, centred in the free area beside the column, with a soft shadow below it. The column shows "Aldermoor Coffee", **Kestrel**, the subtitle, the story, the three choices, **$175.00** and **Add to cart**; the footer strip shows the three promises and the Powered by mark.
587
+ - **Matte black** turns the body, lid and spout black and the price to $185.00; **Copper** turns them copper at $220.00. The chosen swatch has a ring and its name and description change.
588
+ - **Oak** turns the handle and, without the thermometer, the knob pale. The price drops by $10.
589
+ - With **Oak** chosen, the **Copper** swatch is faded and "The copper body comes only with the walnut handle." is shown below the finishes. Clicking it keeps the finish and shows the snackbar "Kettle-1: The copper body comes only with the walnut handle." at the bottom left of the free area.
590
+ - With **Copper** chosen, the **Oak** swatch is faded and the same sentence is shown below the handles.
591
+ - Turning **Thermometer lid** off replaces the dial with a wooden knob and lowers the price by $20; turning it on brings the dial back.
592
+ - Tab reaches the chosen swatch of each row, and the arrow keys move the selection, skipping a faded swatch.
593
+ - **Add to cart** shows a spinner and "Adding…" for about a second, then "In your cart" with the price; the choices cannot be changed until **Make another**, which brings the button back.
594
+ - **Fullscreen** removes the column and the footer, and the kettle moves to the centre of the canvas; **Exit fullscreen** brings both back.
595
+ - Clicking **Fullscreen** and **Exit fullscreen** each pushes the `fullscreenButton` user-action event, as an `AnalyticsService.push` line in the browser console shows with its Verbose level enabled: without a Google Tag Manager id, Storybook's analytics log their events with `console.debug`.
596
+ - In a window too short for the column, the column scrolls and the price with **Add to cart** stays at its bottom edge.
597
+ - Dragging in the free area turns the kettle.
598
+ - In the **Phone** story the start screen shows the kettle above "Make it yours" and **Start designing**. **Start designing** opens the page: the kettle at the top, the column below it and the price with **Add to cart** in a bar at the bottom of the screen.
599
+ - On the phone, the column scrolls under the kettle and ends with the promises and the Powered by mark; the bar with the price stays.
600
+ - On the phone, the snackbar of the copper rule appears below the top bar.
601
+ - On the phone, the close button at the top left returns to the start screen.
602
+ - The browser console shows no errors.
603
+
604
+ ## What this layout leaves out
605
+
606
+ - **Undo and redo, sharing, measurements and the language switch.** The page has none of the toolbar's actions. A layout adds undo and redo with `phx.frontend.useUndoRedo()`, see [Configurator Interface → Hooks for a Project Layout](?path=/docs/phoenix-configurator-interface--docs#hooks-for-a-project-layout).
607
+ - **Read mode.** The layout hides **Add to cart** and makes the choices inert 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.
608
+ - **Messages in the layout's own UI.** The rejected change is a built-in snackbar; a layout that wants its own toast uses `phx.frontend.useConfiguratorMessages()` instead.
609
+ - **The built-in arrangement.** Header, sidebar, sidebar footer, tabs, tool controls, view controls and the built-in `DesktopPreview` and `MobilePreview` are not mounted; this page draws its own. [Layout Slots](?path=/docs/phoenix-layout-slots--docs) lists every slot a project layout can mount.
610
+
611
+ ## Related pages
612
+
613
+ - [Custom Layout](?path=/docs/layouts-custom-layout--docs) explains a project layout step by step.
614
+ - [Configurator Interface → Hooks for a Project Layout](?path=/docs/phoenix-configurator-interface--docs#hooks-for-a-project-layout) lists every hook used here.
615
+ - [Layout Slots](?path=/docs/phoenix-layout-slots--docs) describes `Services`, the snackbar roots, the footers and the Powered by mark.
616
+ - [Preview / Auto](?path=/docs/layouts-preview-auto--docs) shows the built-in start screen that `preview: auto` opens.
617
+
618
+ ## Complete Implementation
619
+
620
+ {/* AUTO-GENERATED SECTION: This section is automatically updated by 'phoenix story build' */}
621
+
622
+ <details>
623
+ <summary>Click to view the complete implementation files</summary>
624
+
625
+ ### ./spec/domain.yaml
626
+
627
+ ```yaml
628
+ preview: auto
629
+
630
+ model:
631
+ latest:
632
+ entityTypes:
633
+ - Kettle
634
+ aliases:
635
+ RootEntity:
636
+ - Kettle
637
+ commonTypes:
638
+ BodyFinish:
639
+ enum:
640
+ - BrushedSteel
641
+ - MatteBlack
642
+ - Copper
643
+ HandleWood:
644
+ enum:
645
+ - Walnut
646
+ - Oak
647
+ shapes:
648
+ Kettle:
649
+ bodyFinish:
650
+ $ref: '#/model/latest/commonTypes/BodyFinish'
651
+ handleWood:
652
+ $ref: '#/model/latest/commonTypes/HandleWood'
653
+ thermometer:
654
+ type: boolean
655
+
656
+ presets:
657
+ - rootEntityType: Kettle
658
+ initialDomainEntities:
659
+ - id: Kettle-1
660
+ type: Kettle
661
+ bodyFinish: BrushedSteel
662
+ handleWood: Walnut
663
+ thermometer: true
664
+
665
+ navigationStates:
666
+ - configure
667
+ - added
668
+
669
+ invariants:
670
+ Kettle:
671
+ copperNeedsWalnut:
672
+ type: copperNeedsWalnut
673
+ severity: fixable
674
+ message: The copper body comes only with the walnut handle.
675
+
676
+ components:
677
+ Kettle:
678
+ detail:
679
+ main:
680
+ title: Kestrel
681
+ subtitle: Pour-over kettle, 0.9 litres
682
+ description: A gooseneck kettle for slow, even pours. The spout narrows to a steady thread of water, and the dial in the lid tells you when it has cooled to brewing temperature.
683
+ price:
684
+ main:
685
+ price:
686
+ $read: $price
687
+ attributeSelection:
688
+ bodyFinish:
689
+ value:
690
+ $bind: bodyFinish
691
+ options:
692
+ - label: Brushed steel
693
+ description: Satin stainless that hides fingerprints
694
+ value: BrushedSteel
695
+ - label: Matte black
696
+ description: A soft powder coat
697
+ value: MatteBlack
698
+ - label: Copper
699
+ description: Lacquered copper, warm in the light
700
+ value: Copper
701
+ handleWood:
702
+ value:
703
+ $bind: handleWood
704
+ options:
705
+ - label: Walnut
706
+ description: Dark and oiled
707
+ value: Walnut
708
+ - label: Oak
709
+ description: Pale and matte
710
+ value: Oak
711
+ attributeSwitch:
712
+ thermometer:
713
+ value:
714
+ $bind: thermometer
715
+ finalizeAction:
716
+ addToCart:
717
+ variant: primary
718
+ label: Add to cart
719
+ title: Add the kettle as configured to the cart
720
+ icon: ShoppingBag
721
+ handler: addToCart
722
+
723
+ canvasConfig:
724
+ main:
725
+ highlightingDisabled: true
726
+ canvasCustomEnvironment:
727
+ main:
728
+ name: KettleStudio
729
+ fitRootPerspectiveCamera:
730
+ desktop:
731
+ priority: 2
732
+ fov: 30
733
+ near: 10
734
+ far: 5000
735
+ minDistance: 350
736
+ maxDistance: 1400
737
+ azimuthAngle: 0.35
738
+ polarAngle: 1.2
739
+ minPolarAngle: 0.5
740
+ maxPolarAngle: 1.5
741
+ fitToBox: true
742
+ fitMeshChanges: false
743
+ $filter:
744
+ viewports: [desktop]
745
+ phone:
746
+ priority: 1
747
+ fov: 30
748
+ near: 10
749
+ far: 5000
750
+ minDistance: 350
751
+ maxDistance: 1600
752
+ azimuthAngle: 0.35
753
+ polarAngle: 1.2
754
+ minPolarAngle: 0.5
755
+ maxPolarAngle: 1.5
756
+ fitToBox: true
757
+ fitMeshChanges: false
758
+ $filter:
759
+ viewports: [mobile]
760
+
761
+ sceneEntityRemoteObject:
762
+ body:
763
+ fileUrl: /models/gallery/kettle.glb
764
+ objectName: Body
765
+ dimensionUnit: m
766
+ lid:
767
+ fileUrl: /models/gallery/kettle.glb
768
+ objectName: Lid
769
+ dimensionUnit: m
770
+ spout:
771
+ fileUrl: /models/gallery/kettle.glb
772
+ objectName: Spout
773
+ dimensionUnit: m
774
+ baseRing:
775
+ fileUrl: /models/gallery/kettle.glb
776
+ objectName: BaseRing
777
+ dimensionUnit: m
778
+ handle:
779
+ fileUrl: /models/gallery/kettle.glb
780
+ objectName: Handle
781
+ dimensionUnit: m
782
+ handleCollars:
783
+ fileUrl: /models/gallery/kettle.glb
784
+ objectName: HandleCollars
785
+ dimensionUnit: m
786
+ knob:
787
+ fileUrl: /models/gallery/kettle.glb
788
+ objectName: Knob
789
+ dimensionUnit: m
790
+ thermometerDial:
791
+ fileUrl: /models/gallery/kettle.glb
792
+ objectName: ThermometerDial
793
+ dimensionUnit: m
794
+ dialFace:
795
+ fileUrl: /models/gallery/kettle.glb
796
+ objectName: DialFace
797
+ dimensionUnit: m
798
+ dialGlass:
799
+ fileUrl: /models/gallery/kettle.glb
800
+ objectName: DialGlass
801
+ dimensionUnit: m
802
+ sceneEntityObjectProperties:
803
+ knob:
804
+ visible:
805
+ $read: $plainKnob
806
+ thermometerDial:
807
+ visible:
808
+ $read: thermometer
809
+ dialFace:
810
+ visible:
811
+ $read: thermometer
812
+ dialGlass:
813
+ visible:
814
+ $read: thermometer
815
+ sceneEntityLocalMaterialOverride:
816
+ body:
817
+ materialsToOverride: [Body]
818
+ materialType: physical
819
+ color:
820
+ $read: $bodyColor
821
+ metalness:
822
+ $read: $bodyMetalness
823
+ roughness:
824
+ $read: $bodyRoughness
825
+ clearcoat:
826
+ $read: $bodyClearcoat
827
+ clearcoatRoughness: 0.15
828
+ handle:
829
+ materialsToOverride: [Handle]
830
+ color:
831
+ $read: $handleColor
832
+ metalness: 0
833
+ roughness: 0.58
834
+ glass:
835
+ materialsToOverride: [DialGlass]
836
+ materialType: physical
837
+ color: '#ffffff'
838
+ metalness: 0
839
+ roughness: 0.05
840
+ transparent: true
841
+ opacity: 0.18
842
+ ```
843
+
844
+ ### ./src/\_shared/CartBlock.tsx
845
+
846
+ ```tsx
847
+ import { Alert, Box, Button, CircularProgress, Typography } from '@mui/material'
848
+
849
+ import { KESTREL } from './tokens.js'
850
+
851
+ const CHECK_ICON = 'M5 12.5 10 17.5 19 7'
852
+
853
+ // The price and the spec's `addToCart` finalize action. `useFinalizeActions` runs the action's handler beside the
854
+ // layout, so its pending state survives this block unmounting, as it does in fullscreen. The handler moves to the
855
+ // `added` navigation state, where the block confirms the purchase instead. A viewer sees the price only.
856
+ export const CartBlock = () => {
857
+ const price = phx.frontend.useRootEntityPrice()
858
+ const { primary, hints } = phx.frontend.useFinalizeActions()
859
+ const navigationState = phx.frontend.useActiveNavigationState()
860
+ const navigate = phx.frontend.useNavigate()
861
+ const { accessInfo } = phx.frontend.useAccessService()
862
+ const isPending = primary?.isPending ?? false
863
+
864
+ if (navigationState === 'added') {
865
+ return (
866
+ <Box component="div" role="status" sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>
867
+ <Box
868
+ component="svg"
869
+ viewBox="0 0 24 24"
870
+ aria-hidden
871
+ sx={{ inlineSize: 40, blockSize: 40, flex: 'none', padding: 1, borderRadius: '50%', bgcolor: KESTREL.sage }}
872
+ >
873
+ <path d={CHECK_ICON} fill="none" stroke={KESTREL.oat} strokeWidth={2.4} strokeLinecap="round" />
874
+ </Box>
875
+ <Box component="div" sx={{ display: 'grid', flex: 1 }}>
876
+ <Typography sx={{ fontFamily: KESTREL.display, fontSize: 20, color: KESTREL.charcoal }}>
877
+ In your cart
878
+ </Typography>
879
+ <Typography sx={{ fontSize: 13, color: KESTREL.muted }}>Kestrel, {price}</Typography>
880
+ </Box>
881
+ <Button
882
+ onClick={() => navigate('configure')}
883
+ sx={{ textTransform: 'none', color: KESTREL.charcoal, textDecoration: 'underline', fontSize: 14 }}
884
+ >
885
+ Make another
886
+ </Button>
887
+ </Box>
888
+ )
889
+ }
890
+
891
+ const showButton = primary !== null && !accessInfo.viewMode
892
+
893
+ return (
894
+ <Box component="div" sx={{ display: 'grid', gap: 1.5 }}>
895
+ <Box component="div" sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: 2 }}>
896
+ <Box component="div" sx={{ display: 'grid' }}>
897
+ <Typography sx={{ fontFamily: KESTREL.display, fontSize: 30, lineHeight: 1.1, color: KESTREL.charcoal }}>
898
+ {price}
899
+ </Typography>
900
+ <Typography sx={{ fontSize: 12, color: KESTREL.muted, whiteSpace: 'nowrap' }}>Ships in two days</Typography>
901
+ </Box>
902
+ {showButton && (
903
+ <Button
904
+ variant="contained"
905
+ disableElevation
906
+ disabled={primary.disabled || isPending}
907
+ onClick={() => void primary.run()}
908
+ title={primary.title}
909
+ startIcon={isPending ? <CircularProgress size={16} color="inherit" /> : undefined}
910
+ sx={{
911
+ minBlockSize: 52,
912
+ paddingInline: 4.5,
913
+ borderRadius: 999,
914
+ bgcolor: KESTREL.charcoal,
915
+ color: KESTREL.oat,
916
+ fontFamily: KESTREL.body,
917
+ fontSize: 15,
918
+ letterSpacing: '0.02em',
919
+ textTransform: 'none',
920
+ '&:hover': { bgcolor: '#000000' },
921
+ '&.Mui-disabled': { bgcolor: KESTREL.charcoal, color: KESTREL.oat, opacity: 0.55 },
922
+ }}
923
+ >
924
+ {isPending ? 'Adding…' : primary.label}
925
+ </Button>
926
+ )}
927
+ </Box>
928
+ {showButton && primary.disabled && hints && (
929
+ <Typography sx={{ fontSize: 13, color: KESTREL.muted }}>{hints}</Typography>
930
+ )}
931
+ {primary?.error && <Alert severity="error">The kettle could not be added: {primary.error.message}</Alert>}
932
+ </Box>
933
+ )
934
+ }
935
+ ```
936
+
937
+ ### ./src/\_shared/DesktopPage.tsx
938
+
939
+ ```tsx
940
+ import { Box, Typography } from '@mui/material'
941
+
942
+ import { LayoutSlots } from '@salsita-ai/sdk/configurator'
943
+
944
+ import { CartBlock } from './CartBlock.js'
945
+ import { FullscreenButton } from './FullscreenButton.js'
946
+ import { KettleOptions } from './KettleOptions.js'
947
+ import { ProductHeading } from './ProductHeading.js'
948
+ import { KESTREL } from './tokens.js'
949
+
950
+ const COLUMN_WIDTH = 'clamp(380px, 38%, 520px)'
951
+ const FOOTER_HEIGHT = 52
952
+ const GUTTER = 32
953
+
954
+ // The desktop page: the kettle in the free area on the left, the product column on the right and the shop's footer
955
+ // strip below both. In fullscreen only the free area stays, so the camera frames the kettle in the whole canvas.
956
+ export const DesktopPage = () => {
957
+ const { containerRef, safeAreaRef } = phx.frontend.useSceneSafeArea()
958
+ const isFullscreen = phx.frontend.useIsFullscreenActive()
959
+ const { accessInfo } = phx.frontend.useAccessService()
960
+
961
+ return (
962
+ <Box
963
+ component="div"
964
+ ref={containerRef}
965
+ sx={{
966
+ position: 'absolute',
967
+ inset: 0,
968
+ display: 'grid',
969
+ gridTemplateColumns: isFullscreen ? 'minmax(0, 1fr)' : `minmax(0, 1fr) ${COLUMN_WIDTH}`,
970
+ gridTemplateRows: isFullscreen ? 'minmax(0, 1fr)' : `minmax(0, 1fr) ${FOOTER_HEIGHT}px`,
971
+ fontFamily: KESTREL.body,
972
+ // The free area lies over the canvas; only the controls in it take the pointer
973
+ pointerEvents: 'none',
974
+ }}
975
+ >
976
+ <Box component="div" sx={{ position: 'relative', minInlineSize: 0 }}>
977
+ {/* The camera fits the kettle into this box, so its inset is the breathing room around the kettle */}
978
+ <Box component="div" ref={safeAreaRef} sx={{ position: 'absolute', inset: '112px 72px 96px' }} />
979
+ <Box
980
+ component="div"
981
+ sx={{ position: 'absolute', insetBlockStart: GUTTER, insetInlineStart: GUTTER, display: 'grid' }}
982
+ >
983
+ <Typography sx={{ fontFamily: KESTREL.display, fontSize: 22, lineHeight: 1, color: KESTREL.charcoal }}>
984
+ Aldermoor
985
+ </Typography>
986
+ </Box>
987
+ <Box
988
+ component="div"
989
+ sx={{ position: 'absolute', insetBlockStart: GUTTER - 8, insetInlineEnd: GUTTER, pointerEvents: 'auto' }}
990
+ >
991
+ <FullscreenButton />
992
+ </Box>
993
+ <Typography
994
+ sx={{
995
+ position: 'absolute',
996
+ insetBlockEnd: GUTTER,
997
+ insetInline: 0,
998
+ textAlign: 'center',
999
+ fontSize: 12,
1000
+ letterSpacing: '0.08em',
1001
+ color: KESTREL.muted,
1002
+ }}
1003
+ >
1004
+ Drag to turn the kettle
1005
+ </Typography>
1006
+ {/* The built-in snackbars stack upwards from this zero-height root, so it sits where their bottom edge goes */}
1007
+ <Box
1008
+ component="div"
1009
+ sx={{
1010
+ position: 'absolute',
1011
+ insetBlockEnd: GUTTER,
1012
+ insetInlineStart: GUTTER,
1013
+ inlineSize: 340,
1014
+ pointerEvents: 'auto',
1015
+ }}
1016
+ >
1017
+ <LayoutSlots.DesktopSnackbarsRoot />
1018
+ </Box>
1019
+ </Box>
1020
+
1021
+ {!isFullscreen && (
1022
+ <>
1023
+ <Box
1024
+ component="aside"
1025
+ aria-label="Kestrel kettle"
1026
+ sx={{
1027
+ display: 'flex',
1028
+ flexDirection: 'column',
1029
+ overflowY: 'auto',
1030
+ bgcolor: KESTREL.oat,
1031
+ borderInlineStart: `1px solid ${KESTREL.hairline}`,
1032
+ pointerEvents: 'auto',
1033
+ }}
1034
+ >
1035
+ {/* Centred while it fits, scrolling from the top once it does not */}
1036
+ <Box
1037
+ component="div"
1038
+ sx={{ display: 'grid', gap: 3.5, marginBlock: 'auto', paddingInline: 7, paddingBlockStart: 5 }}
1039
+ >
1040
+ <ProductHeading size="large" />
1041
+ <KettleOptions readOnly={accessInfo.viewMode} />
1042
+ {/* Below the choices while the column fits; at the column's bottom edge while it scrolls */}
1043
+ <Box
1044
+ component="div"
1045
+ sx={{
1046
+ position: 'sticky',
1047
+ insetBlockEnd: 0,
1048
+ marginBlockStart: -3.5,
1049
+ paddingBlock: 3,
1050
+ bgcolor: KESTREL.oat,
1051
+ borderBlockStart: `1px solid ${KESTREL.hairline}`,
1052
+ }}
1053
+ >
1054
+ <CartBlock />
1055
+ </Box>
1056
+ </Box>
1057
+ </Box>
1058
+
1059
+ <Box
1060
+ component="footer"
1061
+ sx={{
1062
+ gridColumn: '1 / -1',
1063
+ display: 'flex',
1064
+ alignItems: 'center',
1065
+ justifyContent: 'space-between',
1066
+ gap: 3,
1067
+ paddingInline: `${GUTTER}px`,
1068
+ bgcolor: KESTREL.oat,
1069
+ borderBlockStart: `1px solid ${KESTREL.hairline}`,
1070
+ pointerEvents: 'auto',
1071
+ }}
1072
+ >
1073
+ <LayoutSlots.DesktopFooter />
1074
+ <LayoutSlots.DesktopPoweredBy />
1075
+ </Box>
1076
+ </>
1077
+ )}
1078
+ </Box>
1079
+ )
1080
+ }
1081
+ ```
1082
+
1083
+ ### ./src/\_shared/FullscreenButton.tsx
1084
+
1085
+ ```tsx
1086
+ import { IconButton, Tooltip } from '@mui/material'
1087
+
1088
+ import { FrontendAnalyticsFactory } from '@salsita-ai/sdk/configurator'
1089
+
1090
+ import { KESTREL } from './tokens.js'
1091
+
1092
+ const ENTER_ICON = 'M4 9V4h5M15 4h5v5M20 15v5h-5M9 20H4v-5'
1093
+ const EXIT_ICON = 'M9 4v5H4M15 4v5h5M15 20v-5h5M9 20v-5H4'
1094
+
1095
+ // Shows the kettle alone: the layout reads the flag and leaves out everything but the scene while it is set
1096
+ export const FullscreenButton = () => {
1097
+ const isFullscreen = phx.frontend.useIsFullscreenActive()
1098
+ const setFullscreen = phx.frontend.useSetFullscreen()
1099
+ const analytics = phx.frontend.useAnalytics()
1100
+ const label = isFullscreen ? 'Exit fullscreen' : 'Fullscreen'
1101
+
1102
+ // The same event the built-in fullscreen button records, for entering and for leaving
1103
+ const toggle = () => {
1104
+ analytics.push(FrontendAnalyticsFactory.FullScreenModeToggled())
1105
+ setFullscreen(!isFullscreen)
1106
+ }
1107
+
1108
+ return (
1109
+ <Tooltip title={label}>
1110
+ <IconButton
1111
+ aria-label={label}
1112
+ onClick={toggle}
1113
+ sx={{
1114
+ inlineSize: 44,
1115
+ blockSize: 44,
1116
+ color: KESTREL.charcoal,
1117
+ border: `1px solid ${KESTREL.hairline}`,
1118
+ bgcolor: 'rgba(244, 239, 232, 0.8)',
1119
+ '&:hover': { bgcolor: KESTREL.oat },
1120
+ }}
1121
+ >
1122
+ <svg viewBox="0 0 24 24" width={18} height={18} fill="none" stroke="currentColor" strokeWidth={1.6}>
1123
+ <path d={isFullscreen ? EXIT_ICON : ENTER_ICON} />
1124
+ </svg>
1125
+ </IconButton>
1126
+ </Tooltip>
1127
+ )
1128
+ }
1129
+ ```
1130
+
1131
+ ### ./src/\_shared/KettleOptions.tsx
1132
+
1133
+ ```tsx
1134
+ import { Box, Divider } from '@mui/material'
1135
+
1136
+ import { SwatchRow } from './SwatchRow.js'
1137
+ import { ThermometerRow } from './ThermometerRow.js'
1138
+ import { KESTREL } from './tokens.js'
1139
+
1140
+ // The swatches' look, keyed by the option values of the spec
1141
+ const FINISH_FILLS = {
1142
+ BrushedSteel: 'linear-gradient(135deg, #f1f2f4 0%, #a9aeb4 55%, #dcdfe2 100%)',
1143
+ MatteBlack: 'linear-gradient(135deg, #4a4744 0%, #1f1d1b 100%)',
1144
+ Copper: 'linear-gradient(135deg, #f0b48a 0%, #b8693d 55%, #8a4a28 100%)',
1145
+ }
1146
+
1147
+ const WOOD_FILLS = {
1148
+ Walnut: 'linear-gradient(135deg, #7a5238 0%, #4a2f1f 100%)',
1149
+ Oak: 'linear-gradient(135deg, #ead2ad 0%, #c49a6c 100%)',
1150
+ }
1151
+
1152
+ interface KettleOptionsProps {
1153
+ readonly readOnly: boolean
1154
+ }
1155
+
1156
+ // The three choices, in the order a buyer makes them. The spec's `attributeSelection` has no label, so the labels
1157
+ // are the layout's own. Once the kettle is in the cart the choices stay as they were added, until "Make another".
1158
+ export const KettleOptions = ({ readOnly }: KettleOptionsProps) => {
1159
+ const isAdded = phx.frontend.useActiveNavigationState() === 'added'
1160
+ const locked = readOnly || isAdded
1161
+
1162
+ return (
1163
+ <Box component="div" sx={{ display: 'grid' }}>
1164
+ <Divider sx={{ borderColor: KESTREL.hairline }} />
1165
+ <SwatchRow label="Body finish" instanceName="bodyFinish" fills={FINISH_FILLS} readOnly={locked} />
1166
+ <Divider sx={{ borderColor: KESTREL.hairline }} />
1167
+ <SwatchRow label="Handle" instanceName="handleWood" fills={WOOD_FILLS} readOnly={locked} />
1168
+ <Divider sx={{ borderColor: KESTREL.hairline }} />
1169
+ <ThermometerRow readOnly={locked} />
1170
+ </Box>
1171
+ )
1172
+ }
1173
+ ```
1174
+
1175
+ ### ./src/\_shared/PhonePage.tsx
1176
+
1177
+ ```tsx
1178
+ import { Box, IconButton, Tooltip, Typography } from '@mui/material'
1179
+
1180
+ import { LayoutSlots } from '@salsita-ai/sdk/configurator'
1181
+ import { notistackSnackbarClasses } from '@salsita-ai/sdk/ui'
1182
+
1183
+ import { CartBlock } from './CartBlock.js'
1184
+ import { FullscreenButton } from './FullscreenButton.js'
1185
+ import { KettleOptions } from './KettleOptions.js'
1186
+ import { ProductHeading } from './ProductHeading.js'
1187
+ import { KESTREL } from './tokens.js'
1188
+
1189
+ const CLOSE_ICON = 'M6 6l12 12M18 6 6 18'
1190
+ const GUTTER = 16
1191
+ const SCENE_HEIGHT = '44%'
1192
+
1193
+ // The phone page: the kettle at the top, then one column that scrolls below it, with the price and the button in a
1194
+ // bar that stays at the bottom. In fullscreen only the kettle stays.
1195
+ export const PhonePage = () => {
1196
+ const { containerRef, safeAreaRef } = phx.frontend.useSceneSafeArea()
1197
+ const isFullscreen = phx.frontend.useIsFullscreenActive()
1198
+ const { accessInfo } = phx.frontend.useAccessService()
1199
+ const closeAction = phx.frontend.useCloseAction()
1200
+ const { isExpanded, leave } = phx.frontend.usePreview()
1201
+ // The host's close action when it offers one; otherwise, once the start screen expanded the page, the way back to it
1202
+ const close = closeAction ? () => void closeAction() : isExpanded ? leave : null
1203
+
1204
+ return (
1205
+ <Box
1206
+ component="div"
1207
+ ref={containerRef}
1208
+ sx={{
1209
+ position: 'absolute',
1210
+ inset: 0,
1211
+ display: 'flex',
1212
+ flexDirection: 'column',
1213
+ fontFamily: KESTREL.body,
1214
+ pointerEvents: 'none',
1215
+ }}
1216
+ >
1217
+ <Box
1218
+ component="div"
1219
+ sx={{ position: 'relative', flex: isFullscreen ? '1 1 0' : `0 0 ${SCENE_HEIGHT}`, minBlockSize: 0 }}
1220
+ >
1221
+ {/* The camera fits the kettle into this box: below the top bar, clear of the screen's edges */}
1222
+ <Box
1223
+ component="div"
1224
+ ref={safeAreaRef}
1225
+ sx={{ position: 'absolute', inset: `${GUTTER + 52}px ${GUTTER}px ${GUTTER}px` }}
1226
+ />
1227
+ <Box
1228
+ component="div"
1229
+ sx={{
1230
+ position: 'absolute',
1231
+ insetBlockStart: GUTTER,
1232
+ insetInline: GUTTER,
1233
+ display: 'grid',
1234
+ gridTemplateColumns: '44px 1fr 44px',
1235
+ alignItems: 'center',
1236
+ }}
1237
+ >
1238
+ {close ? (
1239
+ <Tooltip title="Close">
1240
+ <IconButton aria-label="Close" onClick={close} sx={{ color: KESTREL.charcoal, pointerEvents: 'auto' }}>
1241
+ <svg viewBox="0 0 24 24" width={20} height={20} fill="none" stroke="currentColor" strokeWidth={1.6}>
1242
+ <path d={CLOSE_ICON} />
1243
+ </svg>
1244
+ </IconButton>
1245
+ </Tooltip>
1246
+ ) : (
1247
+ <span />
1248
+ )}
1249
+ <Typography sx={{ fontFamily: KESTREL.display, fontSize: 20, textAlign: 'center', color: KESTREL.charcoal }}>
1250
+ Aldermoor
1251
+ </Typography>
1252
+ <Box component="div" sx={{ pointerEvents: 'auto' }}>
1253
+ <FullscreenButton />
1254
+ </Box>
1255
+ </Box>
1256
+ {/* The phone root leaves the snackbars fixed to the viewport; here they drop in below the top bar instead */}
1257
+ <Box
1258
+ component="div"
1259
+ sx={{
1260
+ position: 'absolute',
1261
+ insetBlockStart: GUTTER + 56,
1262
+ insetInline: GUTTER,
1263
+ pointerEvents: 'auto',
1264
+ [`& .${notistackSnackbarClasses.container}`]: {
1265
+ position: 'absolute',
1266
+ inset: '0 0 auto 0',
1267
+ inlineSize: 'auto',
1268
+ transform: 'none',
1269
+ },
1270
+ }}
1271
+ >
1272
+ <LayoutSlots.MobileSnackbarsRoot />
1273
+ </Box>
1274
+ </Box>
1275
+
1276
+ {!isFullscreen && (
1277
+ <Box
1278
+ component="main"
1279
+ sx={{
1280
+ flex: '1 1 0',
1281
+ minBlockSize: 0,
1282
+ overflowY: 'auto',
1283
+ overscrollBehavior: 'contain',
1284
+ bgcolor: KESTREL.oat,
1285
+ borderBlockStart: `1px solid ${KESTREL.hairline}`,
1286
+ pointerEvents: 'auto',
1287
+ }}
1288
+ >
1289
+ <Box component="div" sx={{ display: 'grid', gap: 3, padding: 3, paddingBlockEnd: 4 }}>
1290
+ <ProductHeading size="small" />
1291
+ <KettleOptions readOnly={accessInfo.viewMode} />
1292
+ <Box
1293
+ component="div"
1294
+ sx={{
1295
+ display: 'grid',
1296
+ justifyItems: 'start',
1297
+ gap: 2,
1298
+ paddingBlockStart: 3,
1299
+ borderBlockStart: `1px solid ${KESTREL.hairline}`,
1300
+ }}
1301
+ >
1302
+ <LayoutSlots.MobileFooter />
1303
+ <LayoutSlots.MobilePoweredBy />
1304
+ </Box>
1305
+ </Box>
1306
+ <Box
1307
+ component="div"
1308
+ sx={{
1309
+ position: 'sticky',
1310
+ insetBlockEnd: 0,
1311
+ paddingInline: 3,
1312
+ paddingBlock: 2,
1313
+ bgcolor: KESTREL.oat,
1314
+ borderBlockStart: `1px solid ${KESTREL.hairline}`,
1315
+ }}
1316
+ >
1317
+ <CartBlock />
1318
+ </Box>
1319
+ </Box>
1320
+ )}
1321
+ </Box>
1322
+ )
1323
+ }
1324
+ ```
1325
+
1326
+ ### ./src/\_shared/PhonePoster.tsx
1327
+
1328
+ ```tsx
1329
+ import { Box, Button, Typography } from '@mui/material'
1330
+
1331
+ import { KESTREL, LABEL_SX } from './tokens.js'
1332
+
1333
+ // The layout's own start screen, shown on a phone while `usePreview().isPreview` is set (the spec's `preview: auto`).
1334
+ // It frames the kettle in the area above the text with its own safe area; `enter()` opens the page.
1335
+ export const PhonePoster = () => {
1336
+ const { containerRef, safeAreaRef } = phx.frontend.useSceneSafeArea()
1337
+ const { enter } = phx.frontend.usePreview()
1338
+ const price = phx.frontend.useRootEntityPrice()
1339
+
1340
+ return (
1341
+ <Box
1342
+ component="div"
1343
+ ref={containerRef}
1344
+ sx={{
1345
+ position: 'absolute',
1346
+ inset: 0,
1347
+ display: 'flex',
1348
+ flexDirection: 'column',
1349
+ fontFamily: KESTREL.body,
1350
+ pointerEvents: 'none',
1351
+ }}
1352
+ >
1353
+ <Typography
1354
+ sx={{
1355
+ paddingBlockStart: 3,
1356
+ textAlign: 'center',
1357
+ fontFamily: KESTREL.display,
1358
+ fontSize: 20,
1359
+ color: KESTREL.charcoal,
1360
+ }}
1361
+ >
1362
+ Aldermoor
1363
+ </Typography>
1364
+ <Box component="div" ref={safeAreaRef} sx={{ flex: '1 1 0', minBlockSize: 0, marginInline: 3 }} />
1365
+ <Box component="div" sx={{ display: 'grid', gap: 2, padding: 3, paddingBlockEnd: 4, pointerEvents: 'auto' }}>
1366
+ <Typography sx={{ ...LABEL_SX, color: KESTREL.copper }}>The Kestrel pour-over kettle</Typography>
1367
+ <Typography
1368
+ component="h1"
1369
+ sx={{
1370
+ fontFamily: KESTREL.display,
1371
+ fontSize: 48,
1372
+ lineHeight: 1,
1373
+ letterSpacing: '-0.01em',
1374
+ color: KESTREL.charcoal,
1375
+ }}
1376
+ >
1377
+ Make it yours
1378
+ </Typography>
1379
+ <Typography sx={{ fontSize: 15, lineHeight: 1.6, color: KESTREL.muted }}>
1380
+ Three finishes, two woods and a thermometer lid if you want one. As shown, {price}.
1381
+ </Typography>
1382
+ <Button
1383
+ variant="contained"
1384
+ disableElevation
1385
+ onClick={enter}
1386
+ sx={{
1387
+ marginBlockStart: 1,
1388
+ minBlockSize: 52,
1389
+ borderRadius: 999,
1390
+ bgcolor: KESTREL.charcoal,
1391
+ color: KESTREL.oat,
1392
+ fontFamily: KESTREL.body,
1393
+ fontSize: 15,
1394
+ textTransform: 'none',
1395
+ '&:hover': { bgcolor: '#000000' },
1396
+ }}
1397
+ >
1398
+ Start designing
1399
+ </Button>
1400
+ </Box>
1401
+ </Box>
1402
+ )
1403
+ }
1404
+ ```
1405
+
1406
+ ### ./src/\_shared/ProductHeading.tsx
1407
+
1408
+ ```tsx
1409
+ import { Box, Typography } from '@mui/material'
1410
+
1411
+ import { detailComponent } from '@salsita-ai/sdk/domain'
1412
+ import { LocalizableMessage } from '@salsita-ai/sdk/react'
1413
+
1414
+ import { KESTREL, LABEL_SX } from './tokens.js'
1415
+
1416
+ interface ProductHeadingProps {
1417
+ readonly size: 'large' | 'small'
1418
+ }
1419
+
1420
+ // The overline, the name and the story from the spec's `detail` component. Its texts are `Localizable`:
1421
+ // `useLocalizable` resolves one into a string and `LocalizableMessage` renders one in place.
1422
+ export const ProductHeading = ({ size }: ProductHeadingProps) => {
1423
+ const detail = phx.frontend.useFirstRootComponent(detailComponent)
1424
+ const title = phx.frontend.useLocalizable(detail?.state.title)
1425
+ const subtitle = phx.frontend.useLocalizable(detail?.state.subtitle)
1426
+
1427
+ return (
1428
+ <Box component="header" sx={{ display: 'grid', gap: size === 'large' ? 2 : 1.5 }}>
1429
+ <Typography sx={{ ...LABEL_SX, color: KESTREL.copper }}>Aldermoor Coffee</Typography>
1430
+ <Box component="div" sx={{ display: 'grid', gap: 0.75 }}>
1431
+ <Typography
1432
+ component="h1"
1433
+ sx={{
1434
+ fontFamily: KESTREL.display,
1435
+ fontSize: size === 'large' ? 60 : 40,
1436
+ lineHeight: 1,
1437
+ letterSpacing: '-0.01em',
1438
+ color: KESTREL.charcoal,
1439
+ }}
1440
+ >
1441
+ {title}
1442
+ </Typography>
1443
+ <Typography sx={{ fontFamily: KESTREL.body, fontSize: 15, color: KESTREL.muted }}>{subtitle}</Typography>
1444
+ </Box>
1445
+ <Typography sx={{ fontFamily: KESTREL.body, fontSize: 15, lineHeight: 1.65, color: KESTREL.charcoal }}>
1446
+ <LocalizableMessage>{detail?.state.description}</LocalizableMessage>
1447
+ </Typography>
1448
+ </Box>
1449
+ )
1450
+ }
1451
+ ```
1452
+
1453
+ ### ./src/\_shared/SwatchRow.tsx
1454
+
1455
+ ```tsx
1456
+ import { Box, ButtonBase, Typography } from '@mui/material'
1457
+ import type { KeyboardEvent } from 'react'
1458
+
1459
+ import { KESTREL, LABEL_SX } from './tokens.js'
1460
+
1461
+ // Arrow keys move the selection between the swatches, as in a native radio group
1462
+ const ARROW_STEPS: Readonly<Record<string, number | undefined>> = {
1463
+ ArrowRight: 1,
1464
+ ArrowDown: 1,
1465
+ ArrowLeft: -1,
1466
+ ArrowUp: -1,
1467
+ }
1468
+
1469
+ interface SwatchRowProps {
1470
+ readonly label: string
1471
+ readonly instanceName: string
1472
+ // How each option looks, keyed by the spec's option values: a CSS background
1473
+ readonly fills: Readonly<Record<string, string>>
1474
+ readonly readOnly: boolean
1475
+ }
1476
+
1477
+ // One `attributeSelection` of the spec as a row of round swatches, with the chosen option's name and description.
1478
+ // An option the spec's invariants rule out is `disabled`: it is drawn faded and its hint says why, but it can still be
1479
+ // clicked. Its `onSelect` then makes the change, which the invariant rejects, and the built-in snackbar repeats the
1480
+ // reason. The arrow keys skip it.
1481
+ export const SwatchRow = ({ label, instanceName, fills, readOnly }: SwatchRowProps) => {
1482
+ const resolve = phx.frontend.useResolveLocalizable()
1483
+ const kettleId = phx.frontend.useRootEntityId()
1484
+ const { value, options } = phx.frontend.useAttributeSelection(kettleId, instanceName)
1485
+ const selected = options.find(option => option.value === value)
1486
+ const hint = options.find(option => option.disabled && option.hint)?.hint
1487
+
1488
+ const handleKeyDown = (event: KeyboardEvent<HTMLElement>, index: number) => {
1489
+ const step = ARROW_STEPS[event.key]
1490
+
1491
+ if (step === undefined) {
1492
+ return
1493
+ }
1494
+
1495
+ event.preventDefault()
1496
+ // The next enabled option in the arrow's direction, wrapping around
1497
+ const count = options.length
1498
+ const next = Array.from(
1499
+ { length: count - 1 },
1500
+ (_, offset) => (((index + step * (offset + 1)) % count) + count) % count
1501
+ ).find(candidate => !options[candidate]?.disabled)
1502
+
1503
+ if (next === undefined) {
1504
+ return
1505
+ }
1506
+
1507
+ options[next]?.onSelect()
1508
+ event.currentTarget.parentElement?.querySelectorAll<HTMLElement>('[role="radio"]')[next]?.focus()
1509
+ }
1510
+
1511
+ return (
1512
+ <Box component="section" sx={{ display: 'grid', gap: 1.5, paddingBlock: 2 }}>
1513
+ <Box component="div" sx={{ display: 'flex', alignItems: 'baseline', justifyContent: 'space-between', gap: 2 }}>
1514
+ <Typography component="h3" sx={LABEL_SX}>
1515
+ {label}
1516
+ </Typography>
1517
+ <Typography sx={{ fontFamily: KESTREL.display, fontSize: 18, color: KESTREL.charcoal }}>
1518
+ {resolve(selected?.title)}
1519
+ </Typography>
1520
+ </Box>
1521
+
1522
+ <Box component="div" role="radiogroup" aria-label={label} sx={{ display: 'flex', gap: 1.5 }}>
1523
+ {options.map((option, index) => {
1524
+ const isSelected = option.value === value
1525
+ const title = resolve(option.title)
1526
+
1527
+ return (
1528
+ <ButtonBase
1529
+ key={String(option.value)}
1530
+ role="radio"
1531
+ aria-checked={isSelected}
1532
+ aria-label={title}
1533
+ title={option.hint ?? title}
1534
+ aria-disabled={option.disabled}
1535
+ tabIndex={isSelected ? 0 : -1}
1536
+ disabled={readOnly}
1537
+ onClick={option.onSelect}
1538
+ onKeyDown={event => handleKeyDown(event, index)}
1539
+ sx={{
1540
+ inlineSize: 40,
1541
+ blockSize: 40,
1542
+ borderRadius: '50%',
1543
+ background: fills[String(option.value)],
1544
+ // A ring of the page's colour between the swatch and the outline of the chosen one
1545
+ boxShadow: isSelected
1546
+ ? `0 0 0 3px ${KESTREL.oat}, 0 0 0 4px ${KESTREL.charcoal}`
1547
+ : `inset 0 0 0 1px ${KESTREL.hairline}`,
1548
+ transition: 'box-shadow 160ms, transform 160ms',
1549
+ opacity: option.disabled ? 0.3 : 1,
1550
+ '&:hover': { transform: isSelected || option.disabled ? 'none' : 'scale(1.06)' },
1551
+ '&.Mui-focusVisible': { outline: `2px solid ${KESTREL.copper}`, outlineOffset: 6 },
1552
+ // A viewer sees the chosen swatch only as chosen; the others fade
1553
+ '&.Mui-disabled': { opacity: isSelected ? 1 : 0.3 },
1554
+ }}
1555
+ />
1556
+ )
1557
+ })}
1558
+ </Box>
1559
+
1560
+ <Typography sx={{ fontSize: 13, color: KESTREL.muted }}>
1561
+ {hint && !readOnly ? hint : resolve(selected?.description)}
1562
+ </Typography>
1563
+ </Box>
1564
+ )
1565
+ }
1566
+ ```
1567
+
1568
+ ### ./src/\_shared/ThermometerRow.tsx
1569
+
1570
+ ```tsx
1571
+ import { Box, Switch, Typography } from '@mui/material'
1572
+
1573
+ import { KESTREL, LABEL_SX } from './tokens.js'
1574
+
1575
+ interface ThermometerRowProps {
1576
+ readonly readOnly: boolean
1577
+ }
1578
+
1579
+ // The spec's `attributeSwitch` as a labelled switch: on, the lid carries a dial thermometer; off, a plain wooden knob
1580
+ export const ThermometerRow = ({ readOnly }: ThermometerRowProps) => {
1581
+ const kettleId = phx.frontend.useRootEntityId()
1582
+ const thermometer = phx.frontend.useAttributeSwitch(kettleId, 'thermometer')
1583
+ const isOn = thermometer.state.value
1584
+
1585
+ return (
1586
+ <Box component="section" sx={{ display: 'grid', gap: 0.5, paddingBlock: 2 }}>
1587
+ <Box component="div" sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: 2 }}>
1588
+ <Typography component="h3" id="kestrel-thermometer-label" sx={LABEL_SX}>
1589
+ Thermometer lid
1590
+ </Typography>
1591
+ <Switch
1592
+ checked={isOn}
1593
+ disabled={readOnly || thermometer.disabled}
1594
+ onChange={thermometer.onChange}
1595
+ inputProps={{ 'aria-labelledby': 'kestrel-thermometer-label' }}
1596
+ sx={{
1597
+ '& .MuiSwitch-switchBase.Mui-checked': { color: KESTREL.oat },
1598
+ '& .MuiSwitch-switchBase.Mui-checked + .MuiSwitch-track': { bgcolor: KESTREL.copper, opacity: 1 },
1599
+ '& .MuiSwitch-track': { bgcolor: KESTREL.hairline, opacity: 1 },
1600
+ }}
1601
+ />
1602
+ </Box>
1603
+ <Typography sx={{ fontSize: 13, color: KESTREL.muted }}>
1604
+ {isOn ? 'A dial in the lid shows when the water is ready to pour.' : 'A plain lid with a wooden knob.'}
1605
+ </Typography>
1606
+ </Box>
1607
+ )
1608
+ }
1609
+ ```
1610
+
1611
+ ### ./src/\_shared/tokens.ts
1612
+
1613
+ ```ts
1614
+ // The brand's palette and type. Playfair Display and Circular Std are the fonts the brand ships; the stacks fall back
1615
+ // to system fonts where they are not loaded.
1616
+ export const KESTREL = {
1617
+ oat: '#f4efe8',
1618
+ charcoal: '#1f1d1b',
1619
+ copper: '#b8693d',
1620
+ sage: '#9daa94',
1621
+ muted: 'rgba(31, 29, 27, 0.62)',
1622
+ hairline: 'rgba(31, 29, 27, 0.12)',
1623
+ display: "'PlayfairDisplay-Regular', 'Playfair Display', Georgia, serif",
1624
+ body: "'Circular-Std-Book', 'Helvetica Neue', Arial, sans-serif",
1625
+ } as const
1626
+
1627
+ // Small capitals with wide tracking, for the overline and the option labels
1628
+ export const LABEL_SX = {
1629
+ fontFamily: KESTREL.body,
1630
+ fontSize: 11,
1631
+ letterSpacing: '0.18em',
1632
+ textTransform: 'uppercase',
1633
+ color: KESTREL.muted,
1634
+ } as const
1635
+ ```
1636
+
1637
+ ### ./src/elements/ConfiguratorLayout.tsx
1638
+
1639
+ ```tsx
1640
+ import { Box } from '@mui/material'
1641
+
1642
+ import { LayoutSlots } from '@salsita-ai/sdk/configurator'
1643
+
1644
+ import { DesktopPage } from '../_shared/DesktopPage.js'
1645
+ import { PhonePage } from '../_shared/PhonePage.js'
1646
+ import { PhonePoster } from '../_shared/PhonePoster.js'
1647
+ import { KESTREL } from '../_shared/tokens.js'
1648
+
1649
+ // One page, no steps or tabs. The canvas and the services stay mounted the whole time; what lies over the canvas is
1650
+ // the phone's start screen, the phone page or the desktop page. Each calls `useSceneSafeArea` itself, so only the one
1651
+ // on screen tells the camera where the kettle goes.
1652
+ const ConfiguratorLayout = () => {
1653
+ // `null` until the container has been measured; only the scene shows until then
1654
+ const viewports = phx.frontend.useActiveViewports()
1655
+ const { isPreview } = phx.frontend.usePreview()
1656
+ const isDesktop = viewports?.includes('desktop') ?? false
1657
+
1658
+ return (
1659
+ <Box component="div" sx={{ position: 'absolute', inset: 0, overflow: 'clip', bgcolor: KESTREL.oat }}>
1660
+ <LayoutSlots.Services />
1661
+ <LayoutSlots.SharedCanvas />
1662
+ {viewports !== null && (isPreview ? <PhonePoster /> : isDesktop ? <DesktopPage /> : <PhonePage />)}
1663
+ </Box>
1664
+ )
1665
+ }
1666
+
1667
+ export default phx.frontend.createCustomPhoenixLayoutElement('ConfiguratorLayout', ConfiguratorLayout)
1668
+ ```
1669
+
1670
+ ### ./src/elements/KettleStudio.tsx
1671
+
1672
+ ```tsx
1673
+ import { ContactShadows, Environment, Lightformer } from '@react-three/drei'
1674
+
1675
+ import { KESTREL } from '../_shared/tokens.js'
1676
+
1677
+ // The stage named by the spec's `canvasCustomEnvironment`: a backdrop, a soft shadow under the kettle and a studio of
1678
+ // light panels. The panels exist only in the reflections, so the metal finishes have something to mirror and no image
1679
+ // has to be downloaded. The scene is in millimetres.
1680
+ export default phx.frontend.createCustomPhoenixLayoutElement('KettleStudio', () => {
1681
+ return (
1682
+ <>
1683
+ {/* The page's oat background, so the scene and the layout read as one surface */}
1684
+ <color attach="background" args={[KESTREL.oat]} />
1685
+ <ambientLight intensity={0.35} />
1686
+ <directionalLight position={[400, 900, 600]} intensity={1.1} />
1687
+
1688
+ <Environment resolution={256} frames={1}>
1689
+ <color attach="background" args={['#77706a']} />
1690
+ {/* A softbox above, tall strips at the sides for the long highlights, a warm fill behind, a dim one in front */}
1691
+ <Lightformer form="rect" intensity={2.4} position={[0, 6, 0]} rotation-x={Math.PI / 2} scale={[10, 6, 1]} />
1692
+ <Lightformer form="rect" intensity={3} position={[-6, 1, 2]} rotation-y={Math.PI / 2} scale={[1.2, 8, 1]} />
1693
+ <Lightformer form="rect" intensity={1.6} position={[6, 1, 3]} rotation-y={-Math.PI / 2} scale={[1.2, 8, 1]} />
1694
+ <Lightformer form="rect" color="#f3d9c2" intensity={1} position={[0, 1, -8]} scale={[12, 4, 1]} />
1695
+ <Lightformer form="rect" intensity={0.8} position={[0, 0, 8]} rotation-y={Math.PI} scale={[10, 3, 1]} />
1696
+ </Environment>
1697
+
1698
+ <ContactShadows position={[0, -1, 0]} scale={520} far={60} blur={2.2} opacity={0.7} resolution={512} />
1699
+ </>
1700
+ )
1701
+ })
1702
+ ```
1703
+
1704
+ ### ./src/elements/LayoutFooter.tsx
1705
+
1706
+ ```tsx
1707
+ import { Box } from '@mui/material'
1708
+
1709
+ import { KESTREL } from '../_shared/tokens.js'
1710
+
1711
+ const PROMISES = ['Free delivery over $75', 'Two-year warranty', '30-day returns']
1712
+
1713
+ // The shop's promises. `createLayoutFooter` registers it as the `LayoutFooter` element, which the layout shows where it
1714
+ // mounts `LayoutSlots.DesktopFooter` or `LayoutSlots.MobileFooter`.
1715
+ const LayoutFooter = () => {
1716
+ return (
1717
+ <Box
1718
+ component="ul"
1719
+ sx={{
1720
+ display: 'flex',
1721
+ flexWrap: 'wrap',
1722
+ columnGap: 3,
1723
+ rowGap: 0.5,
1724
+ margin: 0,
1725
+ padding: 0,
1726
+ listStyle: 'none',
1727
+ fontSize: 12,
1728
+ letterSpacing: '0.04em',
1729
+ color: KESTREL.muted,
1730
+ }}
1731
+ >
1732
+ {PROMISES.map(promise => (
1733
+ <Box
1734
+ component="li"
1735
+ key={promise}
1736
+ sx={{ display: 'flex', alignItems: 'center', gap: 1, '&::before': { content: '"·"', color: KESTREL.sage } }}
1737
+ >
1738
+ {promise}
1739
+ </Box>
1740
+ ))}
1741
+ </Box>
1742
+ )
1743
+ }
1744
+
1745
+ export default phx.frontend.createLayoutFooter(LayoutFooter)
1746
+ ```
1747
+
1748
+ ### ./src/expressions/kettle.ts
1749
+
1750
+ ```ts
1751
+ const BASE_PRICE = 145
1752
+ const FINISH_SURCHARGE = { BrushedSteel: 0, MatteBlack: 10, Copper: 45 }
1753
+ const WOOD_SURCHARGE = { Walnut: 10, Oak: 0 }
1754
+ const THERMOMETER_SURCHARGE = 20
1755
+
1756
+ // How each finish renders: the spec's material override of the `Body` material reads these
1757
+ const FINISHES = {
1758
+ BrushedSteel: { color: '#c9ccd0', metalness: 1, roughness: 0.3, clearcoat: 0 },
1759
+ MatteBlack: { color: '#2b2927', metalness: 0.1, roughness: 0.55, clearcoat: 0 },
1760
+ Copper: { color: '#d08a5c', metalness: 1, roughness: 0.2, clearcoat: 0.6 },
1761
+ }
1762
+
1763
+ const WOODS = { Walnut: '#4a2f1f', Oak: '#c49a6c' }
1764
+
1765
+ export default phx.domain.implementCustomExpressions({
1766
+ Kettle: {
1767
+ $price: s => {
1768
+ return (
1769
+ BASE_PRICE +
1770
+ FINISH_SURCHARGE[s.bodyFinish] +
1771
+ WOOD_SURCHARGE[s.handleWood] +
1772
+ (s.thermometer ? THERMOMETER_SURCHARGE : 0)
1773
+ )
1774
+ },
1775
+ $plainKnob: s => {
1776
+ return !s.thermometer
1777
+ },
1778
+ $bodyColor: s => {
1779
+ return FINISHES[s.bodyFinish].color
1780
+ },
1781
+ $bodyMetalness: s => {
1782
+ return FINISHES[s.bodyFinish].metalness
1783
+ },
1784
+ $bodyRoughness: s => {
1785
+ return FINISHES[s.bodyFinish].roughness
1786
+ },
1787
+ $bodyClearcoat: s => {
1788
+ return FINISHES[s.bodyFinish].clearcoat
1789
+ },
1790
+ $handleColor: s => {
1791
+ return WOODS[s.handleWood]
1792
+ },
1793
+ },
1794
+ })
1795
+ ```
1796
+
1797
+ ### ./src/handlers/add-to-cart.ts
1798
+
1799
+ ```ts
1800
+ import { useCallback } from 'react'
1801
+
1802
+ // Stands in for the shop's cart: adding takes a moment, then the page shows the confirmation
1803
+ export default phx.frontend.createPhoenixHandler('addToCart', () => {
1804
+ const navigate = phx.frontend.useNavigate()
1805
+
1806
+ return {
1807
+ handler: useCallback(async () => {
1808
+ await new Promise(resolve => setTimeout(resolve, 1200))
1809
+ navigate('added')
1810
+ }, [navigate]),
1811
+ }
1812
+ })
1813
+ ```
1814
+
1815
+ ### ./src/invariants/kettle.ts
1816
+
1817
+ ```ts
1818
+ // The copper body is sold only with the walnut handle. The spec marks the violation `fixable`, so a change that breaks
1819
+ // it is rejected and the built-in snackbar shows the spec's message.
1820
+ export default phx.domain.implementCustomInvariants({
1821
+ Kettle: {
1822
+ copperNeedsWalnut: s => {
1823
+ return s.bodyFinish !== 'Copper' || s.handleWood === 'Walnut'
1824
+ },
1825
+ },
1826
+ })
1827
+ ```
1828
+
1829
+ </details>