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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2183) hide show
  1. package/README.md +27 -16
  2. package/dist/admin/AdminShell.js +1 -1
  3. package/dist/admin/common/admin-interface.d.ts +3 -3
  4. package/dist/admin/default-admin-elements.d.ts +9 -0
  5. package/dist/admin/default-admin-elements.js +1 -0
  6. package/dist/admin/default-elements/built-in-entity-element.d.ts +10 -0
  7. package/dist/admin/default-elements/built-in-entity-element.js +1 -0
  8. package/dist/admin/default-elements/built-in-layout-element.d.ts +10 -0
  9. package/dist/admin/default-elements/built-in-layout-element.js +1 -0
  10. package/dist/admin/default-elements/index.d.ts +2 -0
  11. package/dist/admin/default-elements/index.js +1 -0
  12. package/dist/admin/index.d.ts +1 -0
  13. package/dist/admin/index.js +1 -1
  14. package/dist/admin/legacy-admin/Application.js +1 -1
  15. package/dist/application/index.d.ts +1 -0
  16. package/dist/application/index.js +1 -1
  17. package/dist/application/mount-application.d.ts +1 -1
  18. package/dist/application/mount-application.js +1 -1
  19. package/dist/application/mount-configurator.d.ts +19 -0
  20. package/dist/application/mount-configurator.js +1 -0
  21. package/dist/application/mounted-application-runtime.d.ts +4 -0
  22. package/dist/application/mounted-application-runtime.js +1 -0
  23. package/dist/application/register-web-component.d.ts +2 -0
  24. package/dist/application/register-web-component.js +1 -0
  25. package/dist/application-spec/caching/content-diff.js +1 -1
  26. package/dist/application-spec/caching/index.d.ts +6 -1
  27. package/dist/application-spec/caching/index.js +1 -1
  28. package/dist/application-spec/core/application-file.d.ts +0 -2
  29. package/dist/application-spec/core/application-file.js +1 -1
  30. package/dist/application-spec/core/enhanced-json-value.d.ts +2 -31
  31. package/dist/application-spec/core/enhanced-json-value.js +1 -1
  32. package/dist/application-spec/core/index.d.ts +1 -3
  33. package/dist/application-spec/core/index.js +1 -1
  34. package/dist/application-spec/core/json-schema.d.ts +2 -52
  35. package/dist/application-spec/core/markers/index.d.ts +1 -1
  36. package/dist/application-spec/core/markers/index.js +1 -1
  37. package/dist/application-spec/core/markers/msg-marker.d.ts +2 -28
  38. package/dist/application-spec/core/markers/msg-marker.js +1 -1
  39. package/dist/application-spec/core/markers/raw-eval-write-marker.d.ts +1 -1
  40. package/dist/application-spec/core/markers/raw-eval-write-marker.js +1 -1
  41. package/dist/application-spec/core/markers/raw-read-write-marker.js +1 -1
  42. package/dist/application-spec/errors/diagnostic-codes.d.ts +23 -1
  43. package/dist/application-spec/errors/diagnostic-codes.js +1 -1
  44. package/dist/application-spec/errors/diagnostic-messages.d.ts +31 -2
  45. package/dist/application-spec/errors/diagnostic-messages.js +1 -1
  46. package/dist/application-spec/generate-application/code/common/code-imports.js +1 -1
  47. package/dist/application-spec/generate-application/code/common/env-reader.js +2 -2
  48. package/dist/application-spec/generate-application/code/common/index.d.ts +1 -0
  49. package/dist/application-spec/generate-application/code/common/index.js +1 -1
  50. package/dist/application-spec/generate-application/code/common/single-quoted-string.d.ts +6 -0
  51. package/dist/application-spec/generate-application/code/common/single-quoted-string.js +1 -0
  52. package/dist/application-spec/generate-application/code/domain-runtime-files.d.ts +0 -19
  53. package/dist/application-spec/generate-application/code/domain-runtime-files.js +1 -1
  54. package/dist/application-spec/generate-application/code/generate-application-code.d.ts +3 -2
  55. package/dist/application-spec/generate-application/code/generate-application-code.js +1 -1
  56. package/dist/application-spec/generate-application/code/index.d.ts +1 -0
  57. package/dist/application-spec/generate-application/code/project-scaffolding.d.ts +15 -14
  58. package/dist/application-spec/generate-application/code/project-scaffolding.js +2 -2
  59. package/dist/application-spec/generate-application/code/standalone-app-files.d.ts +4 -3
  60. package/dist/application-spec/generate-application/code/standalone-app-files.js +1 -1
  61. package/dist/application-spec/generate-application/code/story-files.js +1 -1
  62. package/dist/application-spec/generate-application/code/templates/admin-config.js +3 -0
  63. package/dist/application-spec/generate-application/code/templates/application-types.js +6 -6
  64. package/dist/application-spec/generate-application/code/templates/common/doc-comment.d.ts +2 -0
  65. package/dist/application-spec/generate-application/code/templates/common/doc-comment.js +1 -0
  66. package/dist/application-spec/generate-application/code/templates/common/format-property-key.d.ts +7 -0
  67. package/dist/application-spec/generate-application/code/templates/common/format-property-key.js +1 -0
  68. package/dist/application-spec/generate-application/code/templates/common/schema-to-type-string.js +3 -3
  69. package/dist/application-spec/generate-application/code/templates/configurator-globals.d.ts +2 -1
  70. package/dist/application-spec/generate-application/code/templates/configurator-globals.js +19 -6
  71. package/dist/application-spec/generate-application/code/templates/domain-spec/factory-types/domain-factory-types.d.ts +36 -0
  72. package/dist/application-spec/generate-application/code/templates/domain-spec/factory-types/domain-factory-types.js +5 -0
  73. package/dist/application-spec/generate-application/code/templates/domain-spec/factory-types/index.d.ts +1 -0
  74. package/dist/application-spec/generate-application/code/templates/domain-spec/factory-types/index.js +1 -0
  75. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-base-configurator-builder.js +2 -1
  76. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-component-optics.d.ts +1 -1
  77. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-component-optics.js +6 -6
  78. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-domain-block.js +57 -61
  79. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-invariants.d.ts +8 -0
  80. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-invariants.js +1 -1
  81. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-locale.js +1 -1
  82. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-presets.js +1 -1
  83. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-resources.js +13 -13
  84. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-states.d.ts +1 -1
  85. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-states.js +2 -2
  86. package/dist/application-spec/generate-application/code/templates/domain-spec/index.d.ts +2 -1
  87. package/dist/application-spec/generate-application/code/templates/domain-spec/index.js +1 -1
  88. package/dist/application-spec/generate-application/code/templates/editor.d.ts +1 -1
  89. package/dist/application-spec/generate-application/code/templates/editor.js +16 -3
  90. package/dist/application-spec/generate-application/code/templates/eslint-config.d.ts +5 -0
  91. package/dist/application-spec/generate-application/code/templates/eslint-config.js +4 -5
  92. package/dist/application-spec/generate-application/code/templates/frontend-config.js +3 -5
  93. package/dist/application-spec/generate-application/code/templates/gitignore.js +2 -4
  94. package/dist/application-spec/generate-application/code/templates/global-definition/generate-action-types.js +7 -7
  95. package/dist/application-spec/generate-application/code/templates/global-definition/generate-assistant-form-element-types.d.ts +12 -0
  96. package/dist/application-spec/generate-application/code/templates/global-definition/generate-assistant-form-element-types.js +7 -0
  97. package/dist/application-spec/generate-application/code/templates/global-definition/generate-phx-types.d.ts +43 -0
  98. package/dist/application-spec/generate-application/code/templates/global-definition/generate-phx-types.js +33 -0
  99. package/dist/application-spec/generate-application/code/templates/global-definition/index.d.ts +2 -0
  100. package/dist/application-spec/generate-application/code/templates/global-definition/index.js +1 -1
  101. package/dist/application-spec/generate-application/code/templates/globals.js +24 -44
  102. package/dist/application-spec/generate-application/code/templates/html-index.d.ts +12 -1
  103. package/dist/application-spec/generate-application/code/templates/html-index.js +9 -10
  104. package/dist/application-spec/generate-application/code/templates/index.d.ts +6 -9
  105. package/dist/application-spec/generate-application/code/templates/index.js +1 -1
  106. package/dist/application-spec/generate-application/code/templates/lingui-rc.d.ts +5 -0
  107. package/dist/application-spec/generate-application/code/templates/lingui-rc.js +3 -2
  108. package/dist/application-spec/generate-application/code/templates/prettier-config.d.ts +5 -0
  109. package/dist/application-spec/generate-application/code/templates/prettier-config.js +4 -5
  110. package/dist/application-spec/generate-application/code/templates/root-tsconfig.d.ts +6 -0
  111. package/dist/application-spec/generate-application/code/templates/root-tsconfig.js +2 -0
  112. package/dist/application-spec/generate-application/code/templates/skills/core/cli.d.ts +2 -0
  113. package/dist/application-spec/generate-application/code/templates/skills/core/cli.js +1 -0
  114. package/dist/application-spec/generate-application/code/templates/skills/core/index.d.ts +3 -0
  115. package/dist/application-spec/generate-application/code/templates/skills/core/index.js +1 -0
  116. package/dist/application-spec/generate-application/code/templates/skills/core/sdk.d.ts +2 -0
  117. package/dist/application-spec/generate-application/code/templates/skills/core/sdk.js +89 -0
  118. package/dist/application-spec/generate-application/code/templates/skills/core/workflow.d.ts +2 -0
  119. package/dist/application-spec/generate-application/code/templates/skills/core/workflow.js +44 -0
  120. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/application-states.d.ts +3 -0
  121. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/application-states.js +3 -0
  122. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/index.d.ts +1 -0
  123. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/index.js +1 -0
  124. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/navigation.d.ts +3 -0
  125. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/navigation.js +48 -0
  126. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/presets.d.ts +3 -0
  127. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/presets.js +38 -0
  128. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/selection.d.ts +3 -0
  129. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/selection.js +35 -0
  130. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/views-and-tools.d.ts +3 -0
  131. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/views-and-tools.js +61 -0
  132. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/custom-layout.d.ts +3 -0
  133. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/custom-layout.js +7 -0
  134. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/finalization-actions.d.ts +3 -0
  135. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/finalization-actions.js +79 -0
  136. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/index.d.ts +1 -0
  137. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/index.js +1 -0
  138. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/messages.d.ts +3 -0
  139. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/messages.js +52 -0
  140. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/pages.d.ts +3 -0
  141. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/pages.js +49 -0
  142. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/scene-and-safe-area.d.ts +3 -0
  143. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/scene-and-safe-area.js +62 -0
  144. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/slots.d.ts +3 -0
  145. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/slots.js +40 -0
  146. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/tabs-and-steps.d.ts +3 -0
  147. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/tabs-and-steps.js +65 -0
  148. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/toolbar-actions.d.ts +3 -0
  149. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/toolbar-actions.js +58 -0
  150. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/view-mode.d.ts +3 -0
  151. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/view-mode.js +41 -0
  152. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/control-components.d.ts +3 -0
  153. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/control-components.js +24 -0
  154. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/control-hooks.d.ts +3 -0
  155. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/control-hooks.js +44 -0
  156. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/custom-controls.d.ts +3 -0
  157. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/custom-controls.js +74 -0
  158. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/domain-controls.d.ts +3 -0
  159. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/domain-controls.js +8 -0
  160. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/index.d.ts +1 -0
  161. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/index.js +1 -0
  162. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/scene-controls.d.ts +3 -0
  163. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/scene-controls.js +48 -0
  164. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/actions.d.ts +3 -0
  165. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/actions.js +64 -0
  166. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/components.d.ts +3 -0
  167. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/components.js +62 -0
  168. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/domain-model.d.ts +3 -0
  169. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/domain-model.js +1 -0
  170. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/entities-and-relations.d.ts +3 -0
  171. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/entities-and-relations.js +59 -0
  172. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/expressions.d.ts +3 -0
  173. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/expressions.js +46 -0
  174. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/index.d.ts +1 -0
  175. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/index.js +1 -0
  176. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/transformers.d.ts +3 -0
  177. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/transformers.js +43 -0
  178. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/validation-and-repair.d.ts +3 -0
  179. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/validation-and-repair.js +30 -0
  180. package/dist/application-spec/generate-application/code/templates/skills/features/features.d.ts +3 -0
  181. package/dist/application-spec/generate-application/code/templates/skills/features/features.js +1 -0
  182. package/dist/application-spec/generate-application/code/templates/skills/features/index.d.ts +1 -0
  183. package/dist/application-spec/generate-application/code/templates/skills/features/index.js +1 -0
  184. package/dist/application-spec/generate-application/code/templates/skills/features/inspection.d.ts +2 -0
  185. package/dist/application-spec/generate-application/code/templates/skills/features/inspection.js +1 -0
  186. package/dist/application-spec/generate-application/code/templates/skills/features/localization.d.ts +3 -0
  187. package/dist/application-spec/generate-application/code/templates/skills/features/localization.js +87 -0
  188. package/dist/application-spec/generate-application/code/templates/skills/features/scene-objects.d.ts +3 -0
  189. package/dist/application-spec/generate-application/code/templates/skills/features/scene-objects.js +43 -0
  190. package/dist/application-spec/generate-application/code/templates/skills/features/state/index.d.ts +1 -0
  191. package/dist/application-spec/generate-application/code/templates/skills/features/state/index.js +1 -0
  192. package/dist/application-spec/generate-application/code/templates/skills/features/state/slices.d.ts +3 -0
  193. package/dist/application-spec/generate-application/code/templates/skills/features/state/slices.js +48 -0
  194. package/dist/application-spec/generate-application/code/templates/skills/features/state/state.d.ts +3 -0
  195. package/dist/application-spec/generate-application/code/templates/skills/features/state/state.js +1 -0
  196. package/dist/application-spec/generate-application/code/templates/skills/features/state/updates.d.ts +3 -0
  197. package/dist/application-spec/generate-application/code/templates/skills/features/state/updates.js +39 -0
  198. package/dist/application-spec/generate-application/code/templates/skills/features/state/violations.d.ts +3 -0
  199. package/dist/application-spec/generate-application/code/templates/skills/features/state/violations.js +36 -0
  200. package/dist/application-spec/generate-application/code/templates/skills/features/variants.d.ts +2 -0
  201. package/dist/application-spec/generate-application/code/templates/skills/features/variants.js +1 -0
  202. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/assistant-setup.d.ts +3 -0
  203. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/assistant-setup.js +32 -0
  204. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/authentication.d.ts +3 -0
  205. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/authentication.js +42 -0
  206. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/backend-data.d.ts +3 -0
  207. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/backend-data.js +45 -0
  208. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/entry-and-environment.d.ts +3 -0
  209. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/entry-and-environment.js +38 -0
  210. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/finalization.d.ts +3 -0
  211. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/finalization.js +92 -0
  212. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/index.d.ts +1 -0
  213. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/index.js +1 -0
  214. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/publishing.d.ts +3 -0
  215. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/publishing.js +1 -0
  216. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/tasks/callback.d.ts +3 -0
  217. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/tasks/callback.js +26 -0
  218. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/tasks/documents.d.ts +3 -0
  219. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/tasks/documents.js +51 -0
  220. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/tasks/email.d.ts +3 -0
  221. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/tasks/email.js +38 -0
  222. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/tasks/index.d.ts +1 -0
  223. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/tasks/index.js +1 -0
  224. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/tasks/integrations.d.ts +3 -0
  225. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/tasks/integrations.js +88 -0
  226. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/tasks/links-and-images.d.ts +3 -0
  227. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/tasks/links-and-images.js +68 -0
  228. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/tasks/tasks.d.ts +3 -0
  229. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/tasks/tasks.js +1 -0
  230. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/webhooks.d.ts +3 -0
  231. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks/webhooks.js +1 -0
  232. package/dist/application-spec/generate-application/code/templates/skills/guide.d.ts +68 -0
  233. package/dist/application-spec/generate-application/code/templates/skills/guide.js +18 -0
  234. package/dist/application-spec/generate-application/code/templates/skills/phoenix-skill-bundle.d.ts +10 -0
  235. package/dist/application-spec/generate-application/code/templates/skills/phoenix-skill-bundle.js +14 -0
  236. package/dist/application-spec/generate-application/code/templates/skills/phx-members-without-guide.d.ts +9 -0
  237. package/dist/application-spec/generate-application/code/templates/skills/phx-members-without-guide.js +1 -0
  238. package/dist/application-spec/generate-application/code/templates/skills/processes/asset-conversion.d.ts +2 -0
  239. package/dist/application-spec/generate-application/code/templates/skills/processes/asset-conversion.js +23 -0
  240. package/dist/application-spec/generate-application/code/templates/skills/processes/beta.d.ts +14 -0
  241. package/dist/application-spec/generate-application/code/templates/skills/processes/beta.js +4 -0
  242. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/evaluate.d.ts +2 -0
  243. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/evaluate.js +38 -0
  244. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/feedback.d.ts +3 -0
  245. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/feedback.js +1 -0
  246. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/index.d.ts +1 -0
  247. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/index.js +1 -0
  248. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/report.d.ts +2 -0
  249. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/report.js +7 -0
  250. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/send.d.ts +2 -0
  251. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/send.js +2 -0
  252. package/dist/application-spec/generate-application/code/templates/skills/processes/finalization.d.ts +2 -0
  253. package/dist/application-spec/generate-application/code/templates/skills/processes/finalization.js +2 -0
  254. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/build.d.ts +2 -0
  255. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/build.js +25 -0
  256. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/direction.d.ts +2 -0
  257. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/direction.js +35 -0
  258. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/first-draft.d.ts +3 -0
  259. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/first-draft.js +3 -0
  260. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/handoff.d.ts +2 -0
  261. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/handoff.js +9 -0
  262. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/index.d.ts +1 -0
  263. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/index.js +1 -0
  264. package/dist/application-spec/generate-application/code/templates/skills/processes/index.d.ts +8 -0
  265. package/dist/application-spec/generate-application/code/templates/skills/processes/index.js +1 -0
  266. package/dist/application-spec/generate-application/code/templates/skills/processes/model-migration.d.ts +2 -0
  267. package/dist/application-spec/generate-application/code/templates/skills/processes/model-migration.js +1 -0
  268. package/dist/application-spec/generate-application/code/templates/skills/processes/review/appearance.d.ts +2 -0
  269. package/dist/application-spec/generate-application/code/templates/skills/processes/review/appearance.js +46 -0
  270. package/dist/application-spec/generate-application/code/templates/skills/processes/review/code.d.ts +2 -0
  271. package/dist/application-spec/generate-application/code/templates/skills/processes/review/code.js +2 -0
  272. package/dist/application-spec/generate-application/code/templates/skills/processes/review/hand-over.d.ts +2 -0
  273. package/dist/application-spec/generate-application/code/templates/skills/processes/review/hand-over.js +6 -0
  274. package/dist/application-spec/generate-application/code/templates/skills/processes/review/index.d.ts +1 -0
  275. package/dist/application-spec/generate-application/code/templates/skills/processes/review/index.js +1 -0
  276. package/dist/application-spec/generate-application/code/templates/skills/processes/review/review.d.ts +3 -0
  277. package/dist/application-spec/generate-application/code/templates/skills/processes/review/review.js +1 -0
  278. package/dist/application-spec/generate-application/code/templates/skills/processes/review/visual-inspection.d.ts +2 -0
  279. package/dist/application-spec/generate-application/code/templates/skills/processes/review/visual-inspection.js +13 -0
  280. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/branding.d.ts +2 -0
  281. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/branding.js +20 -0
  282. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/catalog.d.ts +2 -0
  283. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/catalog.js +1 -0
  284. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/index.d.ts +1 -0
  285. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/index.js +1 -0
  286. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/product-definition.d.ts +2 -0
  287. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/product-definition.js +22 -0
  288. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/specification.d.ts +3 -0
  289. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/specification.js +1 -0
  290. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/ux-guidelines.d.ts +2 -0
  291. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/ux-guidelines.js +25 -0
  292. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.d.ts +49 -244
  293. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.js +3 -58
  294. package/dist/application-spec/generate-application/code/templates/skills/sdk-subpath-imports.d.ts +9 -0
  295. package/dist/application-spec/generate-application/code/templates/skills/sdk-subpath-imports.js +1 -0
  296. package/dist/application-spec/generate-application/code/templates/spec-code/collect-spec-code.d.ts +58 -0
  297. package/dist/application-spec/generate-application/code/templates/spec-code/collect-spec-code.js +1 -0
  298. package/dist/application-spec/generate-application/code/templates/spec-code/index.d.ts +2 -0
  299. package/dist/application-spec/generate-application/code/templates/spec-code/index.js +1 -0
  300. package/dist/application-spec/generate-application/code/templates/spec-code/spec-code.d.ts +18 -0
  301. package/dist/application-spec/generate-application/code/templates/spec-code/spec-code.js +41 -0
  302. package/dist/application-spec/generate-application/code/templates/spec-messages/index.d.ts +1 -0
  303. package/dist/application-spec/generate-application/code/templates/spec-messages/index.js +1 -0
  304. package/dist/application-spec/generate-application/code/templates/spec-messages/spec-messages.d.ts +20 -0
  305. package/dist/application-spec/generate-application/code/templates/spec-messages/spec-messages.js +6 -0
  306. package/dist/application-spec/generate-application/code/templates/story/phx-module.d.ts +8 -2
  307. package/dist/application-spec/generate-application/code/templates/story/phx-module.js +15 -3
  308. package/dist/application-spec/generate-application/code/templates/story/wrapper.d.ts +3 -0
  309. package/dist/application-spec/generate-application/code/templates/story/wrapper.js +4 -5
  310. package/dist/application-spec/generate-application/code/templates/tsconfig.d.ts +5 -0
  311. package/dist/application-spec/generate-application/code/templates/tsconfig.js +2 -1
  312. package/dist/application-spec/generate-application/code/templates/webhooks-config.js +2 -3
  313. package/dist/application-spec/generate-application/index.d.ts +1 -4
  314. package/dist/application-spec/generate-application/index.js +1 -1
  315. package/dist/application-spec/parse-application-files/categorize/categorize-files.d.ts +28 -0
  316. package/dist/application-spec/parse-application-files/categorize/categorize-files.js +1 -1
  317. package/dist/application-spec/parse-application-files/categorize/earlier-generated-editor-configs.d.ts +16 -0
  318. package/dist/application-spec/parse-application-files/categorize/earlier-generated-editor-configs.js +9 -0
  319. package/dist/application-spec/parse-application-files/categorize/earlier-generated-tsconfig.d.ts +9 -0
  320. package/dist/application-spec/parse-application-files/categorize/earlier-generated-tsconfig.js +1 -0
  321. package/dist/application-spec/parse-application-files/merge/merged-assistant.d.ts +13 -4
  322. package/dist/application-spec/parse-application-files/merge/merged-assistant.js +1 -1
  323. package/dist/application-spec/parse-application-files/merge/merged-infra.d.ts +4 -11
  324. package/dist/application-spec/parse-application-files/merge/merged-transformers.d.ts +2 -4
  325. package/dist/application-spec/parse-application-files/parse-application-files.js +1 -1
  326. package/dist/application-spec/parse-application-files/raw-spec/parse-yaml-spec-file.js +1 -1
  327. package/dist/application-spec/parse-application-files/raw-spec/raw-acl.d.ts +2 -2
  328. package/dist/application-spec/parse-application-files/raw-spec/raw-acl.js +1 -1
  329. package/dist/application-spec/parse-application-files/raw-spec/raw-admin-pages.d.ts +3 -24
  330. package/dist/application-spec/parse-application-files/raw-spec/raw-assistant.d.ts +58 -23
  331. package/dist/application-spec/parse-application-files/raw-spec/raw-assistant.js +1 -1
  332. package/dist/application-spec/parse-application-files/raw-spec/raw-expressions.d.ts +1 -1
  333. package/dist/application-spec/parse-application-files/raw-spec/raw-expressions.js +1 -1
  334. package/dist/application-spec/parse-application-files/raw-spec/raw-resources.d.ts +19 -64
  335. package/dist/application-spec/parse-application-files/spec/application/admin-spec/admin-pages.d.ts +3 -20
  336. package/dist/application-spec/parse-application-files/spec/application/admin-spec/admin-spec.js +1 -1
  337. package/dist/application-spec/parse-application-files/spec/application/admin-spec/states.d.ts +3 -5
  338. package/dist/application-spec/parse-application-files/spec/application/configurator-spec/configurator-spec.js +1 -1
  339. package/dist/application-spec/parse-application-files/spec/application/configurator-spec/states.d.ts +3 -8
  340. package/dist/application-spec/parse-application-files/spec/common/index.d.ts +1 -0
  341. package/dist/application-spec/parse-application-files/spec/common/index.js +1 -1
  342. package/dist/application-spec/parse-application-files/spec/common/value-type/format-value-type.d.ts +3 -0
  343. package/dist/application-spec/parse-application-files/spec/common/value-type/format-value-type.js +1 -0
  344. package/dist/application-spec/parse-application-files/spec/common/value-type/index.d.ts +5 -0
  345. package/dist/application-spec/parse-application-files/spec/common/value-type/index.js +1 -0
  346. package/dist/application-spec/parse-application-files/spec/common/value-type/intersect-value-types.d.ts +6 -0
  347. package/dist/application-spec/parse-application-files/spec/common/value-type/intersect-value-types.js +1 -0
  348. package/dist/application-spec/parse-application-files/spec/common/value-type/is-assignable-value-type.d.ts +8 -0
  349. package/dist/application-spec/parse-application-files/spec/common/value-type/is-assignable-value-type.js +1 -0
  350. package/dist/application-spec/parse-application-files/spec/common/value-type/value-type-at.d.ts +10 -0
  351. package/dist/application-spec/parse-application-files/spec/common/value-type/value-type-at.js +1 -0
  352. package/dist/application-spec/parse-application-files/spec/common/value-type/value-type.d.ts +98 -0
  353. package/dist/application-spec/parse-application-files/spec/common/value-type/value-type.js +1 -0
  354. package/dist/application-spec/parse-application-files/spec/components/bindings/component-path.d.ts +13 -0
  355. package/dist/application-spec/parse-application-files/spec/components/bindings/component-path.js +1 -0
  356. package/dist/application-spec/parse-application-files/spec/components/bindings/index.d.ts +2 -0
  357. package/dist/application-spec/parse-application-files/spec/components/bindings/index.js +1 -1
  358. package/dist/application-spec/parse-application-files/spec/components/bindings/read-binding-type.d.ts +24 -0
  359. package/dist/application-spec/parse-application-files/spec/components/bindings/read-binding-type.js +1 -0
  360. package/dist/application-spec/parse-application-files/spec/components/bindings/read-binding.d.ts +3 -13
  361. package/dist/application-spec/parse-application-files/spec/components/bindings/write-binding.d.ts +4 -32
  362. package/dist/application-spec/parse-application-files/spec/components/component-filter.d.ts +4 -10
  363. package/dist/application-spec/parse-application-files/spec/components/component-state-type.d.ts +8 -0
  364. package/dist/application-spec/parse-application-files/spec/components/component-state-type.js +1 -0
  365. package/dist/application-spec/parse-application-files/spec/components/components.d.ts +3 -4
  366. package/dist/application-spec/parse-application-files/spec/components/filter-criterion-types.d.ts +13 -0
  367. package/dist/application-spec/parse-application-files/spec/components/filter-criterion-types.js +1 -0
  368. package/dist/application-spec/parse-application-files/spec/components/index.d.ts +1 -2
  369. package/dist/application-spec/parse-application-files/spec/components/index.js +1 -1
  370. package/dist/application-spec/parse-application-files/spec/components/sdk-component-entry.d.ts +1 -1
  371. package/dist/application-spec/parse-application-files/spec/components/static-entity-id.d.ts +14 -0
  372. package/dist/application-spec/parse-application-files/spec/components/static-entity-id.js +1 -0
  373. package/dist/application-spec/parse-application-files/spec/components/user-component-entry.d.ts +8 -3
  374. package/dist/application-spec/parse-application-files/spec/components/user-component-entry.js +1 -1
  375. package/dist/application-spec/parse-application-files/spec/components/user-components.d.ts +9 -7
  376. package/dist/application-spec/parse-application-files/spec/components/user-components.js +1 -1
  377. package/dist/application-spec/parse-application-files/spec/expressions/expression-read-types.d.ts +24 -0
  378. package/dist/application-spec/parse-application-files/spec/expressions/expression-read-types.js +1 -0
  379. package/dist/application-spec/parse-application-files/spec/expressions/expression-read.d.ts +13 -0
  380. package/dist/application-spec/parse-application-files/spec/expressions/expression-value-type.d.ts +9 -0
  381. package/dist/application-spec/parse-application-files/spec/expressions/expression-value-type.js +1 -0
  382. package/dist/application-spec/parse-application-files/spec/expressions/expressions.d.ts +12 -30
  383. package/dist/application-spec/parse-application-files/spec/expressions/expressions.js +1 -1
  384. package/dist/application-spec/parse-application-files/spec/expressions/index.d.ts +0 -1
  385. package/dist/application-spec/parse-application-files/spec/expressions/memo-eval-plan.d.ts +4 -71
  386. package/dist/application-spec/parse-application-files/spec/expressions/memo-eval-plan.js +1 -1
  387. package/dist/application-spec/parse-application-files/spec/expressions/user-expressions.d.ts +5 -3
  388. package/dist/application-spec/parse-application-files/spec/expressions/user-expressions.js +1 -1
  389. package/dist/application-spec/parse-application-files/spec/invariants/invariant.d.ts +5 -21
  390. package/dist/application-spec/parse-application-files/spec/invariants/invariants.d.ts +6 -16
  391. package/dist/application-spec/parse-application-files/spec/invariants/invariants.js +1 -1
  392. package/dist/application-spec/parse-application-files/spec/model/aliases.d.ts +3 -9
  393. package/dist/application-spec/parse-application-files/spec/model/common-types.d.ts +6 -14
  394. package/dist/application-spec/parse-application-files/spec/model/defaults.d.ts +6 -31
  395. package/dist/application-spec/parse-application-files/spec/model/entity-types.d.ts +3 -8
  396. package/dist/application-spec/parse-application-files/spec/model/index.d.ts +1 -0
  397. package/dist/application-spec/parse-application-files/spec/model/index.js +1 -1
  398. package/dist/application-spec/parse-application-files/spec/model/model-type-resolution.d.ts +10 -0
  399. package/dist/application-spec/parse-application-files/spec/model/model-type-resolution.js +1 -0
  400. package/dist/application-spec/parse-application-files/spec/model/model-version-key.d.ts +3 -3
  401. package/dist/application-spec/parse-application-files/spec/model/names/action-name.d.ts +3 -7
  402. package/dist/application-spec/parse-application-files/spec/model/names/alias-name.d.ts +3 -7
  403. package/dist/application-spec/parse-application-files/spec/model/names/entity-or-alias-name.d.ts +3 -8
  404. package/dist/application-spec/parse-application-files/spec/model/names/entity-type-name.d.ts +3 -8
  405. package/dist/application-spec/parse-application-files/spec/model/names/expression-name.d.ts +3 -6
  406. package/dist/application-spec/parse-application-files/spec/model/names/instance-name.d.ts +3 -7
  407. package/dist/application-spec/parse-application-files/spec/model/names/invariant-name.d.ts +3 -3
  408. package/dist/application-spec/parse-application-files/spec/model/names/shape-property-name.d.ts +3 -11
  409. package/dist/application-spec/parse-application-files/spec/model/names/violation-type-name.d.ts +3 -3
  410. package/dist/application-spec/parse-application-files/spec/model/presets.d.ts +6 -29
  411. package/dist/application-spec/parse-application-files/spec/sections/actions.d.ts +6 -23
  412. package/dist/application-spec/parse-application-files/spec/sections/app-metadata.d.ts +3 -18
  413. package/dist/application-spec/parse-application-files/spec/sections/application-version.d.ts +3 -7
  414. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-form-elements.d.ts +9 -0
  415. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-form-elements.js +1 -0
  416. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-schema.d.ts +4 -1
  417. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-schema.js +1 -1
  418. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant.js +1 -1
  419. package/dist/application-spec/parse-application-files/spec/sections/data-spec/chunks.d.ts +6 -23
  420. package/dist/application-spec/parse-application-files/spec/sections/data-spec/custom-data-spec.d.ts +1 -16
  421. package/dist/application-spec/parse-application-files/spec/sections/data-spec/data-entry-key.d.ts +3 -9
  422. package/dist/application-spec/parse-application-files/spec/sections/data-spec/data-spec.d.ts +1 -10
  423. package/dist/application-spec/parse-application-files/spec/sections/data-spec/swatch-data-spec.d.ts +1 -14
  424. package/dist/application-spec/parse-application-files/spec/sections/state-value.d.ts +3 -7
  425. package/dist/application-spec/parse-application-files/spec/sections/theme.d.ts +3 -10
  426. package/dist/application-spec/parse-application-files/spec/sections/transformers.d.ts +4 -11
  427. package/dist/application-spec/parse-application-files/spec/sections/ui.d.ts +3 -12
  428. package/dist/client/authorized-client.d.ts +4 -2
  429. package/dist/client/authorized-client.js +1 -1
  430. package/dist/client/contract.d.ts +50 -5
  431. package/dist/client/contract.js +1 -1
  432. package/dist/client/index.d.ts +1 -1
  433. package/dist/client/local-authorized-client.d.ts +3 -1
  434. package/dist/client/local-authorized-client.js +1 -1
  435. package/dist/client/memory-authorized-client.d.ts +4 -1
  436. package/dist/client/memory-authorized-client.js +1 -1
  437. package/dist/client/phoenix-api.d.ts +1036 -18
  438. package/dist/configurator/ConfiguratorApp.js +1 -1
  439. package/dist/configurator/agent-at-work/AgentAtWorkFallback.d.ts +7 -0
  440. package/dist/configurator/agent-at-work/AgentAtWorkFallback.js +1 -0
  441. package/dist/configurator/agent-at-work/AgentAtWorkPage.d.ts +20 -0
  442. package/dist/configurator/agent-at-work/AgentAtWorkPage.js +1 -0
  443. package/dist/configurator/agent-at-work/AgentModeBadge.d.ts +11 -0
  444. package/dist/configurator/agent-at-work/AgentModeBadge.js +1 -0
  445. package/dist/configurator/agent-at-work/StudioMark.d.ts +8 -0
  446. package/dist/configurator/agent-at-work/StudioMark.js +1 -0
  447. package/dist/configurator/agent-at-work/agent-at-work-copy.d.ts +17 -0
  448. package/dist/configurator/agent-at-work/agent-at-work-copy.js +1 -0
  449. package/dist/configurator/agent-at-work/agent-at-work-styles.d.ts +23 -0
  450. package/dist/configurator/agent-at-work/agent-at-work-styles.js +374 -0
  451. package/dist/configurator/agent-at-work/index.d.ts +3 -0
  452. package/dist/configurator/agent-at-work/index.js +1 -0
  453. package/dist/configurator/app-loader-content/DefaultAppLoaderContent.d.ts +2 -0
  454. package/dist/configurator/app-loader-content/DefaultAppLoaderContent.js +5 -0
  455. package/dist/configurator/app-loader-content/index.d.ts +1 -0
  456. package/dist/configurator/app-loader-content/index.js +1 -0
  457. package/dist/configurator/application-runtime/extensions/selectors.js +1 -1
  458. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-annotation.d.ts +34 -0
  459. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-image-view.d.ts +18 -0
  460. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.d.ts +296 -26
  461. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.js +1 -1
  462. package/dist/configurator/application-runtime/extensions/systems/assistant-system/composer-attachments.d.ts +68 -0
  463. package/dist/configurator/application-runtime/extensions/systems/assistant-system/composer-attachments.js +1 -0
  464. package/dist/configurator/application-runtime/extensions/systems/assistant-system/graphql-tools.d.ts +58 -9
  465. package/dist/configurator/application-runtime/extensions/systems/assistant-system/graphql-tools.js +1 -1
  466. package/dist/configurator/application-runtime/extensions/systems/assistant-system/rasterize-image.d.ts +13 -0
  467. package/dist/configurator/application-runtime/extensions/systems/assistant-system/rasterize-image.js +1 -0
  468. package/dist/configurator/application-runtime/extensions/systems/camera-control-system/camera-control-system.d.ts +44 -1
  469. package/dist/configurator/application-runtime/extensions/systems/camera-control-system/camera-control-system.js +1 -1
  470. package/dist/configurator/application-runtime/extensions/systems/canvas-system.d.ts +8 -0
  471. package/dist/configurator/application-runtime/extensions/systems/canvas-system.js +1 -1
  472. package/dist/configurator/application-runtime/extensions/systems/export-system/export-busy-error.d.ts +8 -0
  473. package/dist/configurator/application-runtime/extensions/systems/export-system/export-busy-error.js +1 -0
  474. package/dist/configurator/application-runtime/extensions/systems/export-system/export-system.d.ts +26 -1
  475. package/dist/configurator/application-runtime/extensions/systems/export-system/export-system.js +1 -1
  476. package/dist/configurator/application-runtime/extensions/systems/graphql-system/close-unclosed-braces.d.ts +12 -0
  477. package/dist/configurator/application-runtime/extensions/systems/graphql-system/close-unclosed-braces.js +1 -0
  478. package/dist/configurator/application-runtime/extensions/systems/graphql-system/entity-meta.d.ts +82 -55
  479. package/dist/configurator/application-runtime/extensions/systems/graphql-system/entity-meta.js +1 -1
  480. package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.d.ts +80 -6
  481. package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.js +1 -1
  482. package/dist/configurator/application-runtime/extensions/systems/graphql-system/violations.d.ts +40 -0
  483. package/dist/configurator/application-runtime/extensions/systems/graphql-system/violations.js +1 -0
  484. package/dist/configurator/application-runtime/extensions/systems/image-rendering-system/capture-next-frame.d.ts +10 -0
  485. package/dist/configurator/application-runtime/extensions/systems/image-rendering-system/capture-next-frame.js +1 -0
  486. package/dist/configurator/application-runtime/extensions/systems/image-rendering-system/image-rendering-system.d.ts +22 -5
  487. package/dist/configurator/application-runtime/extensions/systems/image-rendering-system/image-rendering-system.js +1 -1
  488. package/dist/configurator/application-runtime/extensions/systems/index.d.ts +5 -2
  489. package/dist/configurator/application-runtime/extensions/systems/index.js +1 -1
  490. package/dist/configurator/application-runtime/extensions/systems/layout-system/layout-system.d.ts +11 -0
  491. package/dist/configurator/application-runtime/extensions/systems/layout-system/layout-system.js +1 -1
  492. package/dist/configurator/application-runtime/extensions/systems/sketching-system/sketching-system.d.ts +5 -5
  493. package/dist/configurator/common/configurator-interface.d.ts +145 -11
  494. package/dist/configurator/common/configurator-interface.js +1 -1
  495. package/dist/configurator/common/index.d.ts +3 -2
  496. package/dist/configurator/common/index.js +1 -1
  497. package/dist/configurator/common/use-reset-camera.d.ts +6 -0
  498. package/dist/configurator/common/use-reset-camera.js +1 -0
  499. package/dist/configurator/configuration-not-found-page/BuiltInConfigurationNotFoundPage.d.ts +5 -0
  500. package/dist/configurator/configuration-not-found-page/BuiltInConfigurationNotFoundPage.js +1 -0
  501. package/dist/configurator/configuration-not-found-page/ConfigurationNotFoundPageElement.d.ts +6 -0
  502. package/dist/configurator/configuration-not-found-page/ConfigurationNotFoundPageElement.js +1 -0
  503. package/dist/configurator/configuration-not-found-page/index.d.ts +2 -0
  504. package/dist/configurator/configuration-not-found-page/index.js +1 -0
  505. package/dist/configurator/configurator-context/PreviewContextProvider.js +1 -1
  506. package/dist/configurator/configurator-context/ViewportStateSync.d.ts +2 -2
  507. package/dist/configurator/configurator-context/ViewportStateSync.js +1 -1
  508. package/dist/configurator/configurator-context/configurator-hooks/index.d.ts +0 -1
  509. package/dist/configurator/configurator-context/configurator-hooks/index.js +1 -1
  510. package/dist/configurator/configurator-context/configurator-hooks/layout-hooks.d.ts +10 -0
  511. package/dist/configurator/configurator-context/configurator-hooks/layout-hooks.js +1 -1
  512. package/dist/configurator/configurator-context/index.d.ts +0 -5
  513. package/dist/configurator/configurator-context/index.js +1 -1
  514. package/dist/configurator/configurator-error-page/BuiltInConfiguratorErrorPage.d.ts +6 -0
  515. package/dist/configurator/configurator-error-page/BuiltInConfiguratorErrorPage.js +1 -0
  516. package/dist/configurator/configurator-error-page/ConfiguratorErrorPageElement.d.ts +7 -0
  517. package/dist/configurator/configurator-error-page/ConfiguratorErrorPageElement.js +1 -0
  518. package/dist/configurator/configurator-error-page/index.d.ts +2 -0
  519. package/dist/configurator/configurator-error-page/index.js +1 -0
  520. package/dist/configurator/index.d.ts +11 -0
  521. package/dist/configurator/index.js +1 -1
  522. package/dist/configurator/pages/ConfiguratorErrorPage.d.ts +0 -1
  523. package/dist/configurator/pages/ConfiguratorErrorPage.js +1 -1
  524. package/dist/configurator/pages/ConfiguratorNotFoundPage.js +1 -1
  525. package/dist/configurator/pages/DefaultConfiguratorLayout.d.ts +3 -2
  526. package/dist/configurator/pages/DefaultNotAuthenticatedPage.d.ts +8 -0
  527. package/dist/configurator/pages/DefaultNotAuthenticatedPage.js +1 -0
  528. package/dist/configurator/pages/DefaultPresetUi.d.ts +7 -0
  529. package/dist/configurator/pages/DefaultPresetUi.js +1 -0
  530. package/dist/configurator/pages/ExportingOverlay.d.ts +6 -0
  531. package/dist/configurator/pages/ExportingOverlay.js +1 -0
  532. package/dist/configurator/pages/InertRoot.d.ts +10 -0
  533. package/dist/configurator/pages/InertRoot.js +1 -0
  534. package/dist/configurator/pages/LoadedConfiguratorDetailPage.js +1 -1
  535. package/dist/configurator/pages/NewConfiguratorPage.js +1 -1
  536. package/dist/configurator/pages/PresetCreationErrorPage.d.ts +2 -2
  537. package/dist/configurator/pages/PresetCreationErrorPage.js +1 -1
  538. package/dist/configurator/pages/RootPage.js +1 -1
  539. package/dist/configurator/pages/default-configurator-elements.d.ts +11 -1
  540. package/dist/configurator/pages/default-configurator-elements.js +1 -1
  541. package/dist/configurator/pages/default-elements/built-in-entity-element.d.ts +10 -0
  542. package/dist/configurator/pages/default-elements/built-in-entity-element.js +1 -0
  543. package/dist/configurator/pages/default-elements/built-in-layout-element.d.ts +10 -0
  544. package/dist/configurator/pages/default-elements/built-in-layout-element.js +1 -0
  545. package/dist/configurator/pages/default-elements/domain-control-elements.d.ts +6 -0
  546. package/dist/configurator/pages/default-elements/domain-control-elements.js +1 -0
  547. package/dist/configurator/pages/default-elements/index.d.ts +5 -0
  548. package/dist/configurator/pages/default-elements/index.js +1 -0
  549. package/dist/configurator/pages/default-elements/recipe-panel-elements.d.ts +3 -0
  550. package/dist/configurator/pages/default-elements/recipe-panel-elements.js +1 -0
  551. package/dist/configurator/pages/default-elements/scene-controls/BuiltInAddEntityFab.d.ts +3 -0
  552. package/dist/configurator/pages/default-elements/scene-controls/BuiltInAddEntityFab.js +1 -0
  553. package/dist/configurator/pages/default-elements/scene-controls/BuiltInDeleteEntityFab.d.ts +3 -0
  554. package/dist/configurator/pages/default-elements/scene-controls/BuiltInDeleteEntityFab.js +1 -0
  555. package/dist/configurator/pages/default-elements/scene-controls/BuiltInNavigationHotspot.d.ts +3 -0
  556. package/dist/configurator/pages/default-elements/scene-controls/BuiltInNavigationHotspot.js +1 -0
  557. package/dist/configurator/pages/default-elements/scene-controls/BuiltInSelectionHotspot.d.ts +3 -0
  558. package/dist/configurator/pages/default-elements/scene-controls/BuiltInSelectionHotspot.js +1 -0
  559. package/dist/configurator/pages/default-elements/scene-controls/BuiltInToolMenuFab.d.ts +3 -0
  560. package/dist/configurator/pages/default-elements/scene-controls/BuiltInToolMenuFab.js +1 -0
  561. package/dist/configurator/pages/default-elements/scene-controls/index.d.ts +6 -0
  562. package/dist/configurator/pages/default-elements/scene-controls/index.js +1 -0
  563. package/dist/configurator/pages/default-elements/scene-controls/scene-control-elements.d.ts +6 -0
  564. package/dist/configurator/pages/default-elements/scene-controls/scene-control-elements.js +1 -0
  565. package/dist/configurator/pages/default-elements/sidebar-footer-elements.d.ts +7 -0
  566. package/dist/configurator/pages/default-elements/sidebar-footer-elements.js +1 -0
  567. package/dist/configurator/pages/default-elements/toolbar-elements.d.ts +7 -0
  568. package/dist/configurator/pages/default-elements/toolbar-elements.js +1 -0
  569. package/dist/configurator/pages/error-boundaries/AgentModeErrorFallback.d.ts +8 -0
  570. package/dist/configurator/pages/error-boundaries/AgentModeErrorFallback.js +1 -0
  571. package/dist/configurator/pages/error-boundaries/BuiltInGeneralErrorFallback.d.ts +5 -0
  572. package/dist/configurator/pages/error-boundaries/BuiltInGeneralErrorFallback.js +1 -0
  573. package/dist/configurator/pages/error-boundaries/DevContextFallback.d.ts +4 -2
  574. package/dist/configurator/pages/error-boundaries/DevContextFallback.js +1 -1
  575. package/dist/configurator/pages/error-boundaries/DevLoadingFallback.d.ts +6 -4
  576. package/dist/configurator/pages/error-boundaries/DevLoadingFallback.js +1 -1
  577. package/dist/configurator/pages/error-boundaries/GeneralErrorBoundary.js +1 -1
  578. package/dist/configurator/pages/error-boundaries/LoadingErrorBoundary.js +1 -1
  579. package/dist/configurator/pages/error-boundaries/index.d.ts +1 -0
  580. package/dist/configurator/pages/error-boundaries/index.js +1 -1
  581. package/dist/configurator/pages/provider-slots/ConfiguratorResponsiveProvider.d.ts +12 -0
  582. package/dist/configurator/pages/provider-slots/ConfiguratorResponsiveProvider.js +1 -0
  583. package/dist/configurator/pages/provider-slots/ContainerSlotProvider.d.ts +3 -0
  584. package/dist/configurator/pages/provider-slots/ContainerSlotProvider.js +1 -0
  585. package/dist/configurator/pages/provider-slots/LoaderSlotProvider.d.ts +3 -0
  586. package/dist/configurator/pages/provider-slots/LoaderSlotProvider.js +1 -0
  587. package/dist/configurator/pages/provider-slots/MessageHostSlotProvider.d.ts +3 -0
  588. package/dist/configurator/pages/provider-slots/MessageHostSlotProvider.js +1 -0
  589. package/dist/configurator/pages/provider-slots/SceneResourcesSlotProvider.d.ts +3 -0
  590. package/dist/configurator/pages/provider-slots/SceneResourcesSlotProvider.js +1 -0
  591. package/dist/configurator/pages/provider-slots/ThemeSlotProvider.d.ts +3 -0
  592. package/dist/configurator/pages/provider-slots/ThemeSlotProvider.js +1 -0
  593. package/dist/configurator/pages/provider-slots/configurator-provider-slot-elements.d.ts +3 -0
  594. package/dist/configurator/pages/provider-slots/configurator-provider-slot-elements.js +1 -0
  595. package/dist/configurator/pages/provider-slots/index.d.ts +6 -0
  596. package/dist/configurator/pages/provider-slots/index.js +1 -0
  597. package/dist/configurator/pages/ui-elements/BuiltInInvalidDeploymentReload.d.ts +2 -0
  598. package/dist/configurator/pages/ui-elements/BuiltInInvalidDeploymentReload.js +1 -0
  599. package/dist/configurator/pages/ui-elements/configurator-ui-elements.d.ts +3 -0
  600. package/dist/configurator/pages/ui-elements/configurator-ui-elements.js +1 -0
  601. package/dist/configurator/pages/ui-elements/index.d.ts +2 -0
  602. package/dist/configurator/pages/ui-elements/index.js +1 -0
  603. package/dist/configurator/preset-screen-elements/PresetDeviceNotSupportedElement.d.ts +4 -0
  604. package/dist/configurator/preset-screen-elements/PresetDeviceNotSupportedElement.js +1 -0
  605. package/dist/configurator/preset-screen-elements/PresetPageActionElement.d.ts +4 -0
  606. package/dist/configurator/preset-screen-elements/PresetPageActionElement.js +1 -0
  607. package/dist/configurator/preset-screen-elements/index.d.ts +2 -0
  608. package/dist/configurator/preset-screen-elements/index.js +1 -0
  609. package/dist/configurator/scene/cameras/CameraPadding.js +1 -1
  610. package/dist/configurator/scene/index.d.ts +1 -0
  611. package/dist/configurator/scene/index.js +1 -1
  612. package/dist/configurator/scene/scene-controls/DeleteEntityFab.js +1 -1
  613. package/dist/configurator/scene/scene-controls/SelectionHotspot.js +1 -1
  614. package/dist/configurator/scene/scene-controls/ToolFab.d.ts +4 -0
  615. package/dist/configurator/scene/scene-controls/ToolFab.js +1 -1
  616. package/dist/configurator/scene/scene-controls/use-scene-control-tooltip.d.ts +2 -1
  617. package/dist/configurator/scene/scene-entity/scene-controls/SceneEntityHtmlHotspots.js +1 -1
  618. package/dist/configurator/toolbar-actions/index.d.ts +3 -0
  619. package/dist/configurator/toolbar-actions/index.js +1 -0
  620. package/dist/configurator/toolbar-actions/use-assistant-panel.d.ts +18 -0
  621. package/dist/configurator/toolbar-actions/use-assistant-panel.js +1 -0
  622. package/dist/configurator/toolbar-actions/use-measurements.d.ts +35 -0
  623. package/dist/configurator/toolbar-actions/use-measurements.js +1 -0
  624. package/dist/configurator/toolbar-actions/use-toolbar-actions.d.ts +100 -0
  625. package/dist/configurator/toolbar-actions/use-toolbar-actions.js +1 -0
  626. package/dist/configurator/toolbar-actions/use-toolbar-help.d.ts +7 -0
  627. package/dist/configurator/toolbar-actions/use-toolbar-help.js +1 -0
  628. package/dist/configurator/ui/assistant/AssistantChips.d.ts +92 -3
  629. package/dist/configurator/ui/assistant/AssistantChips.js +1 -1
  630. package/dist/configurator/ui/assistant/AssistantComposer.d.ts +100 -1
  631. package/dist/configurator/ui/assistant/AssistantComposer.js +1 -1
  632. package/dist/configurator/ui/assistant/AssistantMarkdown.d.ts +41 -2
  633. package/dist/configurator/ui/assistant/AssistantMarkdown.js +1 -1
  634. package/dist/configurator/ui/assistant/AssistantPanel.d.ts +46 -1
  635. package/dist/configurator/ui/assistant/AssistantPanel.js +1 -1
  636. package/dist/configurator/ui/assistant/AssistantThread.d.ts +80 -4
  637. package/dist/configurator/ui/assistant/AssistantThread.js +1 -1
  638. package/dist/configurator/ui/assistant/AssistantThreadItemView.d.ts +103 -0
  639. package/dist/configurator/ui/assistant/AssistantThreadItemView.js +1 -0
  640. package/dist/configurator/ui/assistant/alert/AssistantAlert.d.ts +45 -0
  641. package/dist/configurator/ui/assistant/alert/AssistantAlert.js +1 -0
  642. package/dist/configurator/ui/assistant/alert/index.d.ts +2 -0
  643. package/dist/configurator/ui/assistant/alert/index.js +1 -0
  644. package/dist/configurator/ui/assistant/alert/remark-alerts.d.ts +10 -0
  645. package/dist/configurator/ui/assistant/alert/remark-alerts.js +1 -0
  646. package/dist/configurator/ui/assistant/annotation/AnnotationBadge.d.ts +43 -0
  647. package/dist/configurator/ui/assistant/annotation/AnnotationBadge.js +1 -0
  648. package/dist/configurator/ui/assistant/annotation/AnnotationOverlay.d.ts +5 -0
  649. package/dist/configurator/ui/assistant/annotation/AnnotationOverlay.js +1 -0
  650. package/dist/configurator/ui/assistant/annotation/AnnotationPin.d.ts +14 -0
  651. package/dist/configurator/ui/assistant/annotation/AnnotationPin.js +1 -0
  652. package/dist/configurator/ui/assistant/annotation/AnnotationViewer.d.ts +12 -0
  653. package/dist/configurator/ui/assistant/annotation/AnnotationViewer.js +1 -0
  654. package/dist/configurator/ui/assistant/annotation/MessageAnnotations.d.ts +11 -0
  655. package/dist/configurator/ui/assistant/annotation/MessageAnnotations.js +1 -0
  656. package/dist/configurator/ui/assistant/annotation/annotation-layout.d.ts +80 -0
  657. package/dist/configurator/ui/assistant/annotation/annotation-layout.js +1 -0
  658. package/dist/configurator/ui/assistant/annotation/editor/AnnotationComment.d.ts +49 -0
  659. package/dist/configurator/ui/assistant/annotation/editor/AnnotationComment.js +1 -0
  660. package/dist/configurator/ui/assistant/annotation/editor/AnnotationEditor.d.ts +18 -0
  661. package/dist/configurator/ui/assistant/annotation/editor/AnnotationEditor.js +1 -0
  662. package/dist/configurator/ui/assistant/annotation/editor/annotation-drawing.d.ts +22 -0
  663. package/dist/configurator/ui/assistant/annotation/editor/annotation-drawing.js +1 -0
  664. package/dist/configurator/ui/assistant/annotation/editor/annotation-pins.d.ts +22 -0
  665. package/dist/configurator/ui/assistant/annotation/editor/annotation-pins.js +1 -0
  666. package/dist/configurator/ui/assistant/annotation/editor/flatten-annotation.d.ts +17 -0
  667. package/dist/configurator/ui/assistant/annotation/editor/flatten-annotation.js +1 -0
  668. package/dist/configurator/ui/assistant/annotation/editor/index.d.ts +2 -0
  669. package/dist/configurator/ui/assistant/annotation/editor/index.js +1 -0
  670. package/dist/configurator/ui/assistant/annotation/index.d.ts +6 -0
  671. package/dist/configurator/ui/assistant/annotation/index.js +1 -0
  672. package/dist/configurator/ui/assistant/annotation/prefers-reduced-motion.d.ts +2 -0
  673. package/dist/configurator/ui/assistant/annotation/prefers-reduced-motion.js +1 -0
  674. package/dist/configurator/ui/assistant/annotation/use-end-on-unmount.d.ts +6 -0
  675. package/dist/configurator/ui/assistant/annotation/use-end-on-unmount.js +1 -0
  676. package/dist/configurator/ui/assistant/assistant-failure.d.ts +20 -7
  677. package/dist/configurator/ui/assistant/assistant-failure.js +1 -1
  678. package/dist/configurator/ui/assistant/attachments/MessageImages.d.ts +63 -0
  679. package/dist/configurator/ui/assistant/attachments/MessageImages.js +1 -0
  680. package/dist/configurator/ui/assistant/attachments/index.d.ts +2 -0
  681. package/dist/configurator/ui/assistant/attachments/index.js +1 -0
  682. package/dist/configurator/ui/assistant/attachments/prepare-image.d.ts +24 -0
  683. package/dist/configurator/ui/assistant/attachments/prepare-image.js +1 -0
  684. package/dist/configurator/ui/assistant/composer/composer-frame.d.ts +20 -0
  685. package/dist/configurator/ui/assistant/composer/composer-frame.js +1 -0
  686. package/dist/configurator/ui/assistant/composer/index.d.ts +1 -0
  687. package/dist/configurator/ui/assistant/composer/index.js +1 -0
  688. package/dist/configurator/ui/assistant/drawing/AssistantDrawing.d.ts +58 -0
  689. package/dist/configurator/ui/assistant/drawing/AssistantDrawing.js +1 -0
  690. package/dist/configurator/ui/assistant/drawing/index.d.ts +2 -0
  691. package/dist/configurator/ui/assistant/drawing/index.js +1 -0
  692. package/dist/configurator/ui/assistant/drawing/parse-drawing.d.ts +18 -0
  693. package/dist/configurator/ui/assistant/drawing/parse-drawing.js +1 -0
  694. package/dist/configurator/ui/assistant/drawing/use-drawing-url.d.ts +14 -0
  695. package/dist/configurator/ui/assistant/drawing/use-drawing-url.js +1 -0
  696. package/dist/configurator/ui/assistant/entity-link/AssistantEntityLink.d.ts +36 -2
  697. package/dist/configurator/ui/assistant/entity-link/AssistantEntityLink.js +1 -1
  698. package/dist/configurator/ui/assistant/entity-link/entity-link-state.d.ts +1 -1
  699. package/dist/configurator/ui/assistant/entity-link/index.d.ts +2 -3
  700. package/dist/configurator/ui/assistant/entity-link/index.js +1 -1
  701. package/dist/configurator/ui/assistant/form/AssistantForm.d.ts +76 -0
  702. package/dist/configurator/ui/assistant/form/AssistantForm.js +1 -0
  703. package/dist/configurator/ui/assistant/form/built-in-form-slots.d.ts +16 -0
  704. package/dist/configurator/ui/assistant/form/built-in-form-slots.js +1 -0
  705. package/dist/configurator/ui/assistant/form/compose-answer.d.ts +11 -0
  706. package/dist/configurator/ui/assistant/form/compose-answer.js +1 -0
  707. package/dist/configurator/ui/assistant/form/describe-build-errors.d.ts +6 -0
  708. package/dist/configurator/ui/assistant/form/describe-build-errors.js +1 -0
  709. package/dist/configurator/ui/assistant/form/form-model.d.ts +37 -0
  710. package/dist/configurator/ui/assistant/form/form-model.js +1 -0
  711. package/dist/configurator/ui/assistant/form/form-state.d.ts +4 -0
  712. package/dist/configurator/ui/assistant/form/form-state.js +1 -0
  713. package/dist/configurator/ui/assistant/form/index.d.ts +5 -0
  714. package/dist/configurator/ui/assistant/form/index.js +1 -0
  715. package/dist/configurator/ui/assistant/form/parse-form-block.d.ts +10 -0
  716. package/dist/configurator/ui/assistant/form/parse-form-block.js +1 -0
  717. package/dist/configurator/ui/assistant/form/read-form-attributes.d.ts +13 -0
  718. package/dist/configurator/ui/assistant/form/read-form-attributes.js +1 -0
  719. package/dist/configurator/ui/assistant/form/registry/built-in-form-elements.d.ts +29 -0
  720. package/dist/configurator/ui/assistant/form/registry/built-in-form-elements.js +1 -0
  721. package/dist/configurator/ui/assistant/form/registry/create-assistant-form-element.d.ts +31 -0
  722. package/dist/configurator/ui/assistant/form/registry/create-assistant-form-element.js +1 -0
  723. package/dist/configurator/ui/assistant/form/registry/form-element-definition.d.ts +16 -0
  724. package/dist/configurator/ui/assistant/form/registry/form-element-definition.js +1 -0
  725. package/dist/configurator/ui/assistant/form/registry/form-registry.d.ts +31 -0
  726. package/dist/configurator/ui/assistant/form/registry/form-registry.js +1 -0
  727. package/dist/configurator/ui/assistant/form/registry/index.d.ts +6 -0
  728. package/dist/configurator/ui/assistant/form/registry/index.js +1 -0
  729. package/dist/configurator/ui/assistant/form/registry/use-form-registry.d.ts +8 -0
  730. package/dist/configurator/ui/assistant/form/registry/use-form-registry.js +1 -0
  731. package/dist/configurator/ui/assistant/form-elements/FormCard.d.ts +68 -0
  732. package/dist/configurator/ui/assistant/form-elements/FormCard.js +1 -0
  733. package/dist/configurator/ui/assistant/form-elements/FormConfirm.d.ts +60 -0
  734. package/dist/configurator/ui/assistant/form-elements/FormConfirm.js +1 -0
  735. package/dist/configurator/ui/assistant/form-elements/FormGroup.d.ts +53 -0
  736. package/dist/configurator/ui/assistant/form-elements/FormGroup.js +1 -0
  737. package/dist/configurator/ui/assistant/form-elements/FormNumber.d.ts +52 -0
  738. package/dist/configurator/ui/assistant/form-elements/FormNumber.js +1 -0
  739. package/dist/configurator/ui/assistant/form-elements/FormOptions.d.ts +57 -0
  740. package/dist/configurator/ui/assistant/form-elements/FormOptions.js +1 -0
  741. package/dist/configurator/ui/assistant/form-elements/FormReply.d.ts +49 -0
  742. package/dist/configurator/ui/assistant/form-elements/FormReply.js +1 -0
  743. package/dist/configurator/ui/assistant/form-elements/FormSwatch.d.ts +61 -0
  744. package/dist/configurator/ui/assistant/form-elements/FormSwatch.js +1 -0
  745. package/dist/configurator/ui/assistant/form-elements/FormText.d.ts +53 -0
  746. package/dist/configurator/ui/assistant/form-elements/FormText.js +1 -0
  747. package/dist/configurator/ui/assistant/form-elements/clamp-form-number.d.ts +10 -0
  748. package/dist/configurator/ui/assistant/form-elements/clamp-form-number.js +1 -0
  749. package/dist/configurator/ui/assistant/form-elements/form-element-props.d.ts +38 -0
  750. package/dist/configurator/ui/assistant/form-elements/index.d.ts +9 -0
  751. package/dist/configurator/ui/assistant/form-elements/index.js +1 -0
  752. package/dist/configurator/ui/assistant/image-view/ImageView.d.ts +66 -0
  753. package/dist/configurator/ui/assistant/image-view/ImageView.js +1 -0
  754. package/dist/configurator/ui/assistant/image-view/index.d.ts +1 -0
  755. package/dist/configurator/ui/assistant/image-view/index.js +1 -0
  756. package/dist/configurator/ui/assistant/image-view/use-image-blob.d.ts +7 -0
  757. package/dist/configurator/ui/assistant/image-view/use-image-blob.js +1 -0
  758. package/dist/configurator/ui/assistant/index.d.ts +25 -1
  759. package/dist/configurator/ui/assistant/index.js +1 -1
  760. package/dist/configurator/ui/assistant/panel/AssistantPanelHeader.d.ts +49 -0
  761. package/dist/configurator/ui/assistant/panel/AssistantPanelHeader.js +1 -0
  762. package/dist/configurator/ui/assistant/panel/index.d.ts +1 -0
  763. package/dist/configurator/ui/assistant/panel/index.js +1 -0
  764. package/dist/configurator/ui/assistant/popover/AssistantPopover.d.ts +24 -0
  765. package/dist/configurator/ui/assistant/popover/AssistantPopover.js +1 -0
  766. package/dist/configurator/ui/assistant/popover/index.d.ts +1 -0
  767. package/dist/configurator/ui/assistant/popover/index.js +1 -0
  768. package/dist/configurator/ui/assistant/reference-link/AssistantReferenceLink.d.ts +58 -0
  769. package/dist/configurator/ui/assistant/reference-link/AssistantReferenceLink.js +1 -0
  770. package/dist/configurator/ui/assistant/reference-link/assistant-link-target.d.ts +34 -0
  771. package/dist/configurator/ui/assistant/reference-link/assistant-link-target.js +1 -0
  772. package/dist/configurator/ui/assistant/reference-link/assistant-reference-details.d.ts +25 -0
  773. package/dist/configurator/ui/assistant/reference-link/assistant-reference-details.js +1 -0
  774. package/dist/configurator/ui/assistant/reference-link/index.d.ts +3 -0
  775. package/dist/configurator/ui/assistant/reference-link/index.js +1 -0
  776. package/dist/configurator/ui/assistant/reference-link/reference-styles.d.ts +12 -0
  777. package/dist/configurator/ui/assistant/reference-link/reference-styles.js +1 -0
  778. package/dist/configurator/ui/assistant/reference-link/use-assistant-reference-details.d.ts +8 -0
  779. package/dist/configurator/ui/assistant/reference-link/use-assistant-reference-details.js +1 -0
  780. package/dist/configurator/ui/assistant/resource-image/AssistantImage.d.ts +56 -0
  781. package/dist/configurator/ui/assistant/resource-image/AssistantImage.js +1 -0
  782. package/dist/configurator/ui/assistant/resource-image/index.d.ts +3 -0
  783. package/dist/configurator/ui/assistant/resource-image/index.js +1 -0
  784. package/dist/configurator/ui/assistant/resource-image/resource-path.d.ts +2 -0
  785. package/dist/configurator/ui/assistant/resource-image/resource-path.js +1 -0
  786. package/dist/configurator/ui/assistant/resource-image/use-resource-image-url.d.ts +5 -0
  787. package/dist/configurator/ui/assistant/resource-image/use-resource-image-url.js +1 -0
  788. package/dist/configurator/ui/assistant/screenshots/ScreenshotThumbnails.d.ts +43 -0
  789. package/dist/configurator/ui/assistant/screenshots/ScreenshotThumbnails.js +1 -0
  790. package/dist/configurator/ui/assistant/screenshots/index.d.ts +3 -0
  791. package/dist/configurator/ui/assistant/screenshots/index.js +1 -0
  792. package/dist/configurator/ui/assistant/screenshots/tool-screenshots.d.ts +16 -0
  793. package/dist/configurator/ui/assistant/screenshots/tool-screenshots.js +1 -0
  794. package/dist/configurator/ui/assistant/screenshots/use-screenshot-src.d.ts +8 -0
  795. package/dist/configurator/ui/assistant/screenshots/use-screenshot-src.js +1 -0
  796. package/dist/configurator/ui/assistant/streamed-markdown.d.ts +15 -2
  797. package/dist/configurator/ui/assistant/streamed-markdown.js +2 -2
  798. package/dist/configurator/ui/assistant/thread-items.d.ts +21 -1
  799. package/dist/configurator/ui/assistant/thread-items.js +1 -1
  800. package/dist/configurator/ui/assistant/tool-chip.d.ts +19 -9
  801. package/dist/configurator/ui/assistant/tool-chip.js +1 -1
  802. package/dist/configurator/ui/assistant/use-assistant-composer.d.ts +88 -0
  803. package/dist/configurator/ui/assistant/use-assistant-composer.js +2 -0
  804. package/dist/configurator/ui/assistant/use-assistant-thread.d.ts +52 -0
  805. package/dist/configurator/ui/assistant/use-assistant-thread.js +1 -0
  806. package/dist/configurator/ui/assistant/use-follow-stream.js +1 -1
  807. package/dist/configurator/ui/assistant/use-load-older-on-top.d.ts +22 -0
  808. package/dist/configurator/ui/assistant/use-load-older-on-top.js +1 -0
  809. package/dist/configurator/ui/assistant/voice/RecordingBar.d.ts +20 -0
  810. package/dist/configurator/ui/assistant/voice/RecordingBar.js +1 -0
  811. package/dist/configurator/ui/assistant/voice/index.d.ts +3 -0
  812. package/dist/configurator/ui/assistant/voice/index.js +1 -0
  813. package/dist/configurator/ui/assistant/voice/use-voice-recording.d.ts +39 -0
  814. package/dist/configurator/ui/assistant/voice/use-voice-recording.js +1 -0
  815. package/dist/configurator/ui/assistant/voice/voice-capture.d.ts +22 -0
  816. package/dist/configurator/ui/assistant/voice/voice-capture.js +1 -0
  817. package/dist/configurator/ui/configurator-layout/slots/canvas/GPUAccelerationDisabled.js +1 -1
  818. package/dist/configurator/ui/configurator-layout/slots/canvas/LayoutCanvas.js +1 -1
  819. package/dist/configurator/ui/configurator-layout/slots/canvas/SharedCanvas.js +1 -1
  820. package/dist/configurator/ui/configurator-layout/slots/canvas/WebGLNotSupported.js +1 -1
  821. package/dist/configurator/ui/configurator-layout/slots/mobile-tabs/use-mobile-tabs.d.ts +1 -1
  822. package/dist/configurator/ui/configurator-layout/slots/mobile-tabs/use-mobile-tabs.js +1 -1
  823. package/dist/configurator/ui/configurator-layout/slots/readonly-banner/CloneToEditDialog.js +1 -1
  824. package/dist/configurator/ui/configurator-layout/slots/services/InvariantViolations.js +1 -1
  825. package/dist/configurator/ui/configurator-layout/slots/services/Services.js +1 -1
  826. package/dist/configurator/ui/configurator-layout/slots/sidebar-tabs/use-sidebar-tabs.d.ts +1 -1
  827. package/dist/configurator/ui/configurator-layout/slots/sidebar-tabs/use-sidebar-tabs.js +1 -1
  828. package/dist/configurator/ui/configurator-layout/universal/DesktopPreview.js +1 -1
  829. package/dist/configurator/ui/configurator-layout/universal/MobilePreview.js +1 -1
  830. package/dist/configurator/ui/configurator-layout/universal/use-layout-scene-safe-area.d.ts +1 -1
  831. package/dist/configurator/ui/configurator-layout/universal/use-layout-scene-safe-area.js +1 -1
  832. package/dist/configurator/ui/configurator-layout/universal/use-scene-safe-area.d.ts +1 -1
  833. package/dist/configurator/ui/index.d.ts +1 -0
  834. package/dist/configurator/ui/index.js +1 -1
  835. package/dist/configurator/ui/legacy/chat/MobileChat.js +1 -1
  836. package/dist/configurator/ui/legacy/layout/common/CommonFinalizeButton.js +1 -1
  837. package/dist/configurator/ui/legacy/layout/common/CommonSummaryButton.js +1 -1
  838. package/dist/configurator/ui/legacy/layout/common/CommonTopNavigation.js +1 -1
  839. package/dist/configurator/ui/legacy/layout/common/ReactiveInterfaceLayout.js +1 -1
  840. package/dist/configurator/ui/legacy/layout/common/ResponsiveFinalizeButton.js +1 -1
  841. package/dist/configurator/ui/legacy/layout/common/SummaryReadLayout.js +1 -1
  842. package/dist/configurator/ui/legacy/layout/simple/SimpleOwnerLayout.js +1 -1
  843. package/dist/configurator/ui/legacy/layout/simple/SimpleSidebar.js +1 -1
  844. package/dist/configurator/ui/legacy/layout/simple/SimpleTopNavigation.js +1 -1
  845. package/dist/configurator/ui/legacy/layout/steps/StepsNavigation.js +1 -1
  846. package/dist/configurator/ui/legacy/layout/steps/StepsOwnerLayout.js +1 -1
  847. package/dist/configurator/ui/legacy/layout/steps/StepsSideBar.js +1 -1
  848. package/dist/configurator/ui/legacy/layout/steps/StepsSidebarFooter.js +1 -1
  849. package/dist/configurator/ui/legacy/layout/tabs/TabsOwnerLayout.js +1 -1
  850. package/dist/configurator/ui/legacy/layout/tabs/TabsSidebar.js +1 -1
  851. package/dist/configurator/ui/legacy/toolbar/common/DimensionUnitSelector.js +1 -1
  852. package/dist/configurator/ui/legacy/toolbar/common/MeasurementsIndicatorsSwitch.js +1 -1
  853. package/dist/configurator/ui/legacy/toolbar/desktop-toolbar/FullscreenToolbarAction.js +1 -1
  854. package/dist/configurator/ui/legacy/toolbar/desktop-toolbar/HelpToolbarAction.js +1 -1
  855. package/dist/configurator/ui/legacy/toolbar/desktop-toolbar/MeasurementsToolbarAction.js +1 -1
  856. package/dist/configurator/ui/legacy/toolbar/desktop-toolbar/UndoRedoToolbarGroup.js +1 -1
  857. package/dist/configurator/ui/phoenix-layout-elements/AppLoader.d.ts +0 -7
  858. package/dist/configurator/ui/phoenix-layout-elements/AppLoader.js +2 -6
  859. package/dist/configurator/ui/phoenix-layout-elements/AssistantToolbarButton.js +1 -1
  860. package/dist/configurator/ui/phoenix-layout-elements/EnterFullscreenToolbarButton.js +1 -1
  861. package/dist/configurator/ui/phoenix-layout-elements/ExitFullscreenToolbarButton.js +1 -1
  862. package/dist/configurator/ui/phoenix-layout-elements/HelpToolbarButton.js +1 -1
  863. package/dist/configurator/ui/phoenix-layout-elements/LanguageMenuAction.js +1 -1
  864. package/dist/configurator/ui/phoenix-layout-elements/LanguageToolbarButton.js +1 -1
  865. package/dist/configurator/ui/phoenix-layout-elements/LayoutCustomOwnerUi.d.ts +1 -0
  866. package/dist/configurator/ui/phoenix-layout-elements/LayoutCustomOwnerUi.js +1 -1
  867. package/dist/configurator/ui/phoenix-layout-elements/LayoutCustomReadUi.d.ts +1 -0
  868. package/dist/configurator/ui/phoenix-layout-elements/LayoutCustomReadUi.js +1 -1
  869. package/dist/configurator/ui/phoenix-layout-elements/MeasurementsMenuAction.js +1 -1
  870. package/dist/configurator/ui/phoenix-layout-elements/MeasurementsToolbarButton.js +1 -1
  871. package/dist/configurator/ui/phoenix-layout-elements/RedoToolbarButton.js +1 -1
  872. package/dist/configurator/ui/phoenix-layout-elements/ShareToolbarButton.js +1 -1
  873. package/dist/configurator/ui/phoenix-layout-elements/UndoToolbarButton.js +1 -1
  874. package/dist/configurator/ui/phoenix-layout-elements/header/common/back-button/use-go-back-action.js +1 -1
  875. package/dist/configurator/ui/phoenix-layout-elements/header/common/horizontal-tabs/DesktopHorizontalTabs.js +1 -1
  876. package/dist/configurator/ui/phoenix-layout-elements/header/common/step-navigation/DesktopNavigationSteps.d.ts +1 -1
  877. package/dist/configurator/ui/phoenix-layout-elements/header/common/step-navigation/DesktopNavigationSteps.js +1 -1
  878. package/dist/configurator/ui/phoenix-layout-elements/header/common/step-navigation/StepsNavigation.d.ts +2 -8
  879. package/dist/configurator/ui/phoenix-layout-elements/header/common/step-navigation/StepsNavigation.js +1 -1
  880. package/dist/configurator/ui/phoenix-layout-elements/index.d.ts +8 -1
  881. package/dist/configurator/ui/phoenix-layout-elements/index.js +1 -1
  882. package/dist/configurator/ui/phoenix-layout-elements/measurements/DimensionUnitSelector.js +1 -1
  883. package/dist/configurator/ui/phoenix-layout-elements/measurements/MeasurementsIndicatorsSwitch.js +1 -1
  884. package/dist/configurator/ui/phoenix-layout-elements/share/ShareModal.js +1 -1
  885. package/dist/configurator/ui/phoenix-layout-elements/share/use-share.d.ts +7 -8
  886. package/dist/configurator/ui/phoenix-layout-elements/share/use-share.js +1 -1
  887. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/basic/BasicFinalizeButton.js +1 -1
  888. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/basic/use-basic-sidebar-footer.js +1 -1
  889. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/common/CustomFinalizeButton.js +1 -1
  890. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/common/EnterSummaryButton.js +1 -1
  891. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/common/FinalizeActions.js +1 -1
  892. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/common/NextStepButton.js +1 -1
  893. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/common/PreviousStepButton.js +1 -1
  894. package/dist/configurator/ui/preset-layout/CategoryPresetUi.js +1 -1
  895. package/dist/configurator/ui/preset-layout/PresetUi.d.ts +4 -2
  896. package/dist/configurator/ui/preset-layout/PresetUi.js +1 -1
  897. package/dist/configurator/ui/preset-layout/index.d.ts +6 -1
  898. package/dist/configurator/ui/preset-layout/index.js +1 -1
  899. package/dist/configurator/ui/save-message-snackbars/SaveMessageSnackbars.d.ts +10 -0
  900. package/dist/configurator/ui/save-message-snackbars/SaveMessageSnackbars.js +1 -0
  901. package/dist/configurator/ui/save-message-snackbars/index.d.ts +1 -0
  902. package/dist/configurator/ui/save-message-snackbars/index.js +1 -0
  903. package/dist/docs/3d-scene/animations-basic.mdx +0 -4
  904. package/dist/docs/3d-scene/camera-based-hiding.mdx +0 -2
  905. package/dist/docs/3d-scene/cameras/custom.mdx +4 -4
  906. package/dist/docs/3d-scene/cameras/fit-during-drag.mdx +0 -4
  907. package/dist/docs/3d-scene/cameras/locks.mdx +0 -4
  908. package/dist/docs/3d-scene/cameras/transitions.mdx +0 -2
  909. package/dist/docs/3d-scene/engraving.mdx +0 -4
  910. package/dist/docs/3d-scene/materials/custom.mdx +1 -2
  911. package/dist/docs/3d-scene/materials/inherit.mdx +0 -4
  912. package/dist/docs/3d-scene/materials/multilevel.mdx +0 -47
  913. package/dist/docs/3d-scene/materials/override.mdx +0 -4
  914. package/dist/docs/3d-scene/materials/simple.mdx +0 -4
  915. package/dist/docs/3d-scene/materials/transformer.mdx +0 -4
  916. package/dist/docs/3d-scene/materials/transition.mdx +0 -4
  917. package/dist/docs/3d-scene/materials/transmissive.mdx +0 -4
  918. package/dist/docs/3d-scene/postprocessing.mdx +0 -2
  919. package/dist/docs/3d-scene/rendering/basic.mdx +5 -9
  920. package/dist/docs/3d-scene/rendering/custom-entity.mdx +0 -6
  921. package/dist/docs/3d-scene/rendering/lights/ambient-light.mdx +0 -2
  922. package/dist/docs/3d-scene/rendering/lights/directional-light.mdx +0 -2
  923. package/dist/docs/3d-scene/rendering/lights/point-light.mdx +0 -2
  924. package/dist/docs/3d-scene/rendering/lights/rect-area-light.mdx +0 -2
  925. package/dist/docs/3d-scene/rendering/lights/spot-light.mdx +0 -2
  926. package/dist/docs/3d-scene/rendering/object-groups.mdx +0 -2
  927. package/dist/docs/3d-scene/rendering/objects.mdx +0 -4
  928. package/dist/docs/3d-scene/rendering/scene-entity-object.mdx +0 -43
  929. package/dist/docs/3d-scene/rendering/smma.mdx +0 -2
  930. package/dist/docs/3d-scene/rendering/soft-shadows.mdx +0 -2
  931. package/dist/docs/3d-scene/rendering/transformer.mdx +1 -3
  932. package/dist/docs/complex-use-cases/custom-ui-on-root-level.mdx +0 -1
  933. package/dist/docs/complex-use-cases/filtered-controls-with-fix-dialog.mdx +19 -19
  934. package/dist/docs/complex-use-cases/focus-mode.mdx +2 -0
  935. package/dist/docs/complex-use-cases/navigation-guard.mdx +81 -19
  936. package/dist/docs/complex-use-cases/navigation-reset-selection.mdx +28 -65
  937. package/dist/docs/complex-use-cases/navigation-reset-undo.mdx +16 -20
  938. package/dist/docs/complex-use-cases/sketching.mdx +2 -10
  939. package/dist/docs/controls/custom.mdx +88 -87
  940. package/dist/docs/controls/manage-child-entities/entitychildrenlist.mdx +0 -4
  941. package/dist/docs/controls/nullable-attributes.mdx +0 -2
  942. package/dist/docs/controls/scene/custom-controls.mdx +7 -8
  943. package/dist/docs/controls/scene/html-hotspots.mdx +0 -4
  944. package/dist/docs/controls/scene/object-html-hotspots.mdx +0 -4
  945. package/dist/docs/controls/select-attribute/cardselect.mdx +0 -4
  946. package/dist/docs/controls/select-attribute/listselect.mdx +0 -4
  947. package/dist/docs/controls/select-attribute/select.mdx +0 -4
  948. package/dist/docs/controls/select-attribute/swatchselect.mdx +0 -4
  949. package/dist/docs/controls/select-attribute/switchselect.mdx +0 -4
  950. package/dist/docs/controls/select-attribute/toggleselect.mdx +0 -4
  951. package/dist/docs/controls/select-child-entity/cardselect.mdx +3 -6
  952. package/dist/docs/controls/select-child-entity/listselect.mdx +5 -11
  953. package/dist/docs/controls/select-child-entity/toggleselect.mdx +4 -10
  954. package/dist/docs/controls/text-input.mdx +90 -19
  955. package/dist/docs/demos/glass.mdx +0 -4
  956. package/dist/docs/demos/heater.mdx +0 -10
  957. package/dist/docs/demos/office-chair.mdx +0 -8
  958. package/dist/docs/demos/office-desk.mdx +0 -8
  959. package/dist/docs/demos/ring.mdx +0 -9
  960. package/dist/docs/dimensions/3d-scene-integration/angle-indicators.mdx +0 -2
  961. package/dist/docs/dimensions/3d-scene-integration/editable-angle-indicator.mdx +0 -2
  962. package/dist/docs/dimensions/3d-scene-integration/editable-distance-dimension-indicator.mdx +0 -14
  963. package/dist/docs/dimensions/3d-scene-integration/editable-offset-indicator.mdx +0 -6
  964. package/dist/docs/dimensions/3d-scene-integration/editable-size-indicator.mdx +0 -4
  965. package/dist/docs/dimensions/3d-scene-integration/list-selector-dimension-indicator.mdx +0 -16
  966. package/dist/docs/dimensions/3d-scene-integration/offset-indicator.mdx +0 -6
  967. package/dist/docs/dimensions/3d-scene-integration/overlap-offset-demo.mdx +0 -6
  968. package/dist/docs/dimensions/basic-concepts/dimension-data-unit.mdx +0 -12
  969. package/dist/docs/dimensions/basic-concepts/dimension-unit-config.mdx +0 -12
  970. package/dist/docs/dimensions/input-controls/distance-input.mdx +0 -12
  971. package/dist/docs/dimensions/input-controls/distance-slider.mdx +6 -18
  972. package/dist/docs/dimensions/selection-controls/list-selector.mdx +0 -14
  973. package/dist/docs/dimensions/selection-controls/toggle-selector.mdx +0 -14
  974. package/dist/docs/drag-and-drop/drag-handle.mdx +0 -1
  975. package/dist/docs/drag-and-drop/hotspot-handle.mdx +0 -1
  976. package/dist/docs/drag-and-drop/no-selection.mdx +0 -1
  977. package/dist/docs/drag-and-drop/planes.mdx +0 -3
  978. package/dist/docs/drag-and-drop/room-planner.mdx +1 -7
  979. package/dist/docs/drag-and-drop/rotatable.mdx +0 -1
  980. package/dist/docs/drag-and-drop/snapping/auto-rotation-demo.mdx +0 -2
  981. package/dist/docs/drag-and-drop/snapping/label-matching-demo.mdx +0 -2
  982. package/dist/docs/drag-and-drop/snapping/multi-snap-composition-demo.mdx +0 -2
  983. package/dist/docs/drag-and-drop/snapping/nested-entity-demo.mdx +0 -2
  984. package/dist/docs/drag-and-drop/snapping/priority-demo.mdx +0 -2
  985. package/dist/docs/drag-and-drop/snapping/snap-axis-demo.mdx +0 -2
  986. package/dist/docs/drag-and-drop/snapping/snap-edge-demo.mdx +0 -2
  987. package/dist/docs/drag-and-drop/snapping/snap-plane-demo.mdx +0 -5
  988. package/dist/docs/drag-and-drop/snapping/snap-point-demo.mdx +0 -2
  989. package/dist/docs/drag-and-drop/spatial-constraints/collision-system.mdx +0 -2
  990. package/dist/docs/drag-and-drop/spatial-constraints/disjoint-and-within.mdx +0 -6
  991. package/dist/docs/drag-and-drop/spatial-constraints/geometry-override.mdx +0 -4
  992. package/dist/docs/drag-and-drop/spatial-constraints/multiple-collision-meshes.mdx +0 -4
  993. package/dist/docs/drag-and-drop/spatial-constraints/touches.mdx +0 -4
  994. package/dist/docs/drag-and-drop/swap.mdx +0 -4
  995. package/dist/docs/fabs/basic.mdx +12 -14
  996. package/dist/docs/fabs/layout.mdx +0 -7
  997. package/dist/docs/index.json +100 -6
  998. package/dist/docs/integrations/lifecycle-providers.mdx +0 -12
  999. package/dist/docs/integrations/onloadprovider.mdx +0 -3
  1000. package/dist/docs/integrations/webcomponent-api/basics.mdx +8 -2
  1001. package/dist/docs/integrations/webcomponent-api/preset-tags.mdx +4 -1
  1002. package/dist/docs/integrations/woocommerce/overview.mdx +4 -2
  1003. package/dist/docs/layouts/custom-layout.mdx +1458 -301
  1004. package/dist/docs/layouts/custom-price.mdx +0 -2
  1005. package/dist/docs/layouts/custom-theme-handler.mdx +0 -4
  1006. package/dist/docs/layouts/gallery/ardent-compressor.mdx +3485 -0
  1007. package/dist/docs/layouts/gallery/corvid-drone.mdx +3399 -0
  1008. package/dist/docs/layouts/gallery/fenwick-window.mdx +2778 -0
  1009. package/dist/docs/layouts/gallery/ferrule-bar-station.mdx +6540 -0
  1010. package/dist/docs/layouts/gallery/kestrel-kettle.mdx +1829 -0
  1011. package/dist/docs/layouts/gallery/nightjar-guitar.mdx +3665 -0
  1012. package/dist/docs/layouts/gallery/sunfold-solar.mdx +2657 -0
  1013. package/dist/docs/layouts/gallery/tidepool-aquascape.mdx +5157 -0
  1014. package/dist/docs/layouts/header/custom.mdx +0 -2
  1015. package/dist/docs/layouts/icon-sets.mdx +0 -6
  1016. package/dist/docs/layouts/phoenix-elements.mdx +0 -4
  1017. package/dist/docs/layouts/phoenix-handlers.mdx +19 -28
  1018. package/dist/docs/layouts/presets/action-and-overlay.mdx +0 -8
  1019. package/dist/docs/layouts/presets/custom.mdx +6 -13
  1020. package/dist/docs/layouts/preview/always-expand.mdx +4 -14
  1021. package/dist/docs/layouts/preview/always.mdx +4 -14
  1022. package/dist/docs/layouts/preview/auto-presets.mdx +4 -14
  1023. package/dist/docs/layouts/preview/auto.mdx +4 -14
  1024. package/dist/docs/layouts/preview/never.mdx +4 -14
  1025. package/dist/docs/layouts/sidebar/in-a-custom-layout.mdx +18 -13
  1026. package/dist/docs/layouts/sidebar/property-page-stack.mdx +0 -2
  1027. package/dist/docs/layouts/sidebar/property-page.mdx +0 -2
  1028. package/dist/docs/layouts/sidebar/tabs.mdx +0 -4
  1029. package/dist/docs/layouts/sidebar-footer/custom.mdx +0 -2
  1030. package/dist/docs/layouts/sidebar-footer/universal.mdx +0 -10
  1031. package/dist/docs/layouts/tool-controls.mdx +0 -1
  1032. package/dist/docs/layouts/toolbar.mdx +0 -4
  1033. package/dist/docs/layouts/universal.mdx +2 -22
  1034. package/dist/docs/other-features/client-side-rendering/camera-padding.mdx +0 -2
  1035. package/dist/docs/other-features/client-side-rendering/custom.mdx +0 -6
  1036. package/dist/docs/other-features/client-side-rendering/declarative.mdx +1 -5
  1037. package/dist/docs/other-features/client-side-rendering/postprocessing.mdx +0 -6
  1038. package/dist/docs/other-features/component-filters.mdx +0 -7
  1039. package/dist/docs/other-features/currency.mdx +5 -6
  1040. package/dist/docs/other-features/domain-actions.mdx +33 -7
  1041. package/dist/docs/other-features/dynamic-component-attachments.mdx +75 -46
  1042. package/dist/docs/other-features/error-5xx.mdx +1 -15
  1043. package/dist/docs/other-features/navigation-hotspot.mdx +2 -5
  1044. package/dist/docs/other-features/not-found-404.mdx +1 -15
  1045. package/dist/docs/other-features/projected-entities.mdx +0 -5
  1046. package/dist/docs/other-features/side-effects.mdx +0 -23
  1047. package/dist/docs/other-features/transformers.mdx +101 -96
  1048. package/dist/docs/other-features/violation-messages.mdx +0 -4
  1049. package/dist/docs/other-features/violation-severity.mdx +2 -3
  1050. package/dist/docs/performance/clone-highlight.mdx +0 -7
  1051. package/dist/docs/performance/dynamic-components.mdx +0 -6
  1052. package/dist/docs/performance/editable-dimension-stress-test.mdx +0 -2
  1053. package/dist/docs/performance/fast-highlight.mdx +0 -7
  1054. package/dist/docs/performance/general.mdx +0 -7
  1055. package/dist/docs/performance/render-isolation.mdx +0 -6
  1056. package/dist/docs/phoenix/admin.mdx +105 -134
  1057. package/dist/docs/phoenix/application-states.mdx +45 -27
  1058. package/dist/docs/phoenix/blender-rendering.mdx +3 -1
  1059. package/dist/docs/phoenix/clerk-sign-in.mdx +1 -1
  1060. package/dist/docs/phoenix/components.mdx +59 -46
  1061. package/dist/docs/phoenix/configurator-interface.mdx +484 -161
  1062. package/dist/docs/phoenix/data-sources.mdx +61 -37
  1063. package/dist/docs/phoenix/deployments.mdx +13 -7
  1064. package/dist/docs/phoenix/domain-model.mdx +26 -16
  1065. package/dist/docs/phoenix/expression-context.mdx +3 -29
  1066. package/dist/docs/phoenix/finalization.mdx +3 -2
  1067. package/dist/docs/phoenix/getting-started.mdx +6 -5
  1068. package/dist/docs/phoenix/integration/authentication-internal.mdx +2 -2
  1069. package/dist/docs/phoenix/integration/finalization-internal.mdx +1 -1
  1070. package/dist/docs/phoenix/layout-slots.mdx +46 -23
  1071. package/dist/docs/phoenix/localization.mdx +74 -59
  1072. package/dist/docs/phoenix/migration-guide.mdx +34 -22
  1073. package/dist/docs/phoenix/phoenix-cli.mdx +126 -35
  1074. package/dist/docs/phoenix/project-structure.mdx +105 -74
  1075. package/dist/docs/phoenix/quickstart.mdx +8 -10
  1076. package/dist/docs/phoenix/sdk-builder-workflow.mdx +18 -22
  1077. package/dist/docs/phoenix/sessions-and-access.mdx +54 -34
  1078. package/dist/docs/phoenix/sharing.mdx +1 -1
  1079. package/dist/docs/phoenix/state-management.mdx +18 -16
  1080. package/dist/docs/phoenix/testing.mdx +13 -0
  1081. package/dist/docs/phoenix/webhooks.mdx +377 -245
  1082. package/dist/docs/recipes-and-delete/delete-entity.mdx +3 -6
  1083. package/dist/docs/recipes-and-delete/dynamic-root-entity.mdx +0 -2
  1084. package/dist/docs/recipes-and-delete/grouped-button.mdx +0 -3
  1085. package/dist/docs/recipes-and-delete/grouped-panel.mdx +0 -3
  1086. package/dist/docs/recipes-and-delete/horizontal.mdx +3 -6
  1087. package/dist/docs/recipes-and-delete/recipe-hierarchy-lists.mdx +0 -3
  1088. package/dist/docs/recipes-and-delete/recipe-hierarchy-selection.mdx +0 -5
  1089. package/dist/docs/recipes-and-delete/replace-dropdown.mdx +3 -6
  1090. package/dist/docs/recipes-and-delete/replace-panel.mdx +0 -7
  1091. package/dist/docs/recipes-and-delete/simple.mdx +3 -6
  1092. package/dist/docs/recipes-and-delete/vertical.mdx +3 -6
  1093. package/dist/docs/relations/aliases.mdx +0 -2
  1094. package/dist/docs/relations/all-of-type.mdx +0 -4
  1095. package/dist/docs/relations/child-nullable.mdx +0 -4
  1096. package/dist/docs/relations/child-required.mdx +0 -2
  1097. package/dist/docs/relations/collection-direct.mdx +0 -4
  1098. package/dist/docs/relations/collection-indirect.mdx +0 -4
  1099. package/dist/docs/relations/collection-multiple.mdx +0 -2
  1100. package/dist/docs/relations/cross-reference.mdx +0 -2
  1101. package/dist/docs/relations/hierarchy.mdx +0 -2
  1102. package/dist/docs/selection-and-highlight/canvas.mdx +0 -1
  1103. package/dist/docs/selection-and-highlight/disable-highlight-per-object.mdx +0 -1
  1104. package/dist/docs/selection-and-highlight/disable-highlight.mdx +0 -1
  1105. package/dist/docs/selection-and-highlight/effects/outline.mdx +0 -3
  1106. package/dist/docs/selection-and-highlight/effects/overlay.mdx +0 -3
  1107. package/dist/docs/selection-and-highlight/fast-emissive-highlight.mdx +0 -3
  1108. package/dist/docs/selection-and-highlight/group-highlighting.mdx +0 -1
  1109. package/dist/docs/selection-and-highlight/hierarchy.mdx +100 -151
  1110. package/dist/docs/selection-and-highlight/hotspots.mdx +2 -1
  1111. package/dist/domain/admin-domain/index.d.ts +2 -2
  1112. package/dist/domain/application/GetApplicationWrapperHandler.d.ts +1 -1
  1113. package/dist/domain/application/GetThemeHandler.d.ts +1 -1
  1114. package/dist/domain/application/GetWebComponentOptions.d.ts +1 -1
  1115. package/dist/domain/application/application-config.d.ts +6 -26
  1116. package/dist/domain/application/assistant/assistant-fields.d.ts +1 -1
  1117. package/dist/domain/application/assistant/assistant-value-type.d.ts +1 -1
  1118. package/dist/domain/application/assistant/build-assistant-lenses.d.ts +1 -2
  1119. package/dist/domain/application/assistant/build-assistant-lenses.js +1 -1
  1120. package/dist/domain/application/assistant/build-assistant-manifest.d.ts +1 -2
  1121. package/dist/domain/application/assistant/build-assistant-manifest.js +1 -1
  1122. package/dist/domain/application/assistant/generate-assistant-prompt.d.ts +3 -1
  1123. package/dist/domain/application/assistant/generate-assistant-prompt.js +1 -1
  1124. package/dist/domain/application/assistant/index.d.ts +0 -3
  1125. package/dist/domain/application/assistant/index.js +1 -1
  1126. package/dist/domain/application/assistant/session-setup/AssistantSetupHandler.d.ts +1 -1
  1127. package/dist/domain/application/assistant/session-setup/apply-assistant-setup.d.ts +1 -1
  1128. package/dist/domain/application/assistant/session-setup/apply-assistant-setup.js +1 -1
  1129. package/dist/domain/application/assistant/session-setup/assistant-setup-manifest.d.ts +5 -5
  1130. package/dist/domain/application/assistant/session-setup/assistant-setup-manifest.js +1 -1
  1131. package/dist/domain/application/assistant/session-setup/create-session-assistant.d.ts +1 -2
  1132. package/dist/domain/application/assistant-field-options.d.ts +1 -1
  1133. package/dist/domain/application/assistant-mutations.d.ts +1 -1
  1134. package/dist/domain/application/assistant-mutations.js +1 -1
  1135. package/dist/domain/application/assistant-recipe-groups.d.ts +4 -2
  1136. package/dist/domain/application/configurator-builder.d.ts +44 -39
  1137. package/dist/domain/application/configurator-builder.js +1 -1
  1138. package/dist/domain/application/create-initial-published-data.d.ts +2 -1
  1139. package/dist/domain/application/index.d.ts +1 -1
  1140. package/dist/domain/application/index.js +1 -1
  1141. package/dist/domain/application/published-data/DataRowValidatorHandler.d.ts +1 -1
  1142. package/dist/domain/application/published-data/FilterPublishedChunksHandler.d.ts +1 -1
  1143. package/dist/domain/application/published-data/MapPublishedChunkedDataHandler.d.ts +1 -1
  1144. package/dist/domain/application/published-data/MapPublishedRevisionDataHandler.d.ts +1 -1
  1145. package/dist/domain/application/published-data/SheetValidatorHandler.d.ts +1 -1
  1146. package/dist/domain/application/standard-properties.js +1 -1
  1147. package/dist/domain/application/web-component-property.d.ts +3 -1
  1148. package/dist/domain/application/web-component-property.js +1 -1
  1149. package/dist/domain/available-system-components/available-system-components.d.ts +11 -0
  1150. package/dist/domain/available-system-components/available-system-components.js +1 -0
  1151. package/dist/domain/available-system-components/index.d.ts +1 -0
  1152. package/dist/domain/available-system-components/index.js +1 -0
  1153. package/dist/domain/core/action/index.d.ts +0 -1
  1154. package/dist/domain/core/action/index.js +1 -1
  1155. package/dist/domain/core/domain.js +1 -1
  1156. package/dist/domain/core/index.d.ts +1 -1
  1157. package/dist/domain/core/index.js +1 -1
  1158. package/dist/domain/core/invariant/violation.d.ts +3 -2
  1159. package/dist/domain/core/schema/extended-schema-validator.js +1 -1
  1160. package/dist/domain/domain-builder/domain-builder.d.ts +46 -0
  1161. package/dist/domain/domain-builder/domain-builder.js +1 -0
  1162. package/dist/domain/domain-builder/index.d.ts +1 -0
  1163. package/dist/domain/domain-builder/index.js +1 -0
  1164. package/dist/domain/domain-context/action-system/action-system.d.ts +32 -6
  1165. package/dist/domain/domain-context/action-system/action-system.js +1 -1
  1166. package/dist/domain/domain-context/domain-context-systems.d.ts +1 -1
  1167. package/dist/domain/domain-context/index.d.ts +1 -1
  1168. package/dist/domain/domain-context/store-system/store-system.d.ts +5 -0
  1169. package/dist/domain/domain-context/store-system/store-system.js +1 -1
  1170. package/dist/domain/domain-context/transformers/context.d.ts +4 -2
  1171. package/dist/domain/domain-context/transformers/when-builder.d.ts +2 -1
  1172. package/dist/domain/domain-context/undo-system.d.ts +28 -1
  1173. package/dist/domain/domain-context/undo-system.js +1 -1
  1174. package/dist/domain/domain-runtime/action-factory.d.ts +11 -0
  1175. package/dist/domain/domain-runtime/application.d.ts +39 -0
  1176. package/dist/domain/domain-runtime/application.js +1 -0
  1177. package/dist/domain/domain-runtime/domain-context/action-context.d.ts +5 -5
  1178. package/dist/domain/domain-runtime/domain-context/selectors.d.ts +3 -0
  1179. package/dist/domain/domain-runtime/domain-context/selectors.js +1 -1
  1180. package/dist/domain/domain-runtime/domain-runtime.d.ts +80 -28
  1181. package/dist/domain/domain-runtime/domain-runtime.js +1 -1
  1182. package/dist/domain/domain-runtime/environment/actions.d.ts +1 -0
  1183. package/dist/domain/domain-runtime/environment/actions.js +1 -1
  1184. package/dist/domain/domain-runtime/environment/initialize.d.ts +1 -1
  1185. package/dist/domain/domain-runtime/environment/initialize.js +1 -1
  1186. package/dist/domain/domain-runtime/environment/selectors.d.ts +2 -0
  1187. package/dist/domain/domain-runtime/environment/selectors.js +1 -1
  1188. package/dist/domain/domain-runtime/environment/types.d.ts +7 -1
  1189. package/dist/domain/domain-runtime/index.d.ts +2 -1
  1190. package/dist/domain/domain-runtime/index.js +1 -1
  1191. package/dist/domain/domain-runtime/spec/create-violation-expressions.d.ts +1 -1
  1192. package/dist/domain/domain-runtime/spec/create-violation-expressions.js +1 -1
  1193. package/dist/domain/domain-runtime/spec/index.d.ts +1 -1
  1194. package/dist/domain/domain-runtime/spec/index.js +1 -1
  1195. package/dist/domain/domain-runtime/spec/initialize.js +1 -1
  1196. package/dist/domain/domain-runtime/spec/resolve-imported-transformers.d.ts +22 -0
  1197. package/dist/domain/domain-runtime/spec/resolve-imported-transformers.js +1 -0
  1198. package/dist/domain/domain-runtime/spec/selectors.d.ts +8 -6
  1199. package/dist/domain/domain-runtime/spec/selectors.js +1 -1
  1200. package/dist/domain/domain-runtime/spec/types.d.ts +2 -2
  1201. package/dist/domain/domain-runtime/web-component/actions.d.ts +3 -0
  1202. package/dist/domain/domain-runtime/web-component/actions.js +1 -1
  1203. package/dist/domain/domain-runtime/web-component/initialize.d.ts +1 -0
  1204. package/dist/domain/domain-runtime/web-component/initialize.js +1 -1
  1205. package/dist/domain/domain-runtime/web-component/selectors.d.ts +2 -0
  1206. package/dist/domain/domain-runtime/web-component/selectors.js +1 -1
  1207. package/dist/domain/domain-runtime/web-component/types.d.ts +6 -3
  1208. package/dist/domain/extensions/export-images/agent-screenshot.d.ts +30 -0
  1209. package/dist/domain/extensions/export-images/agent-screenshot.js +1 -0
  1210. package/dist/domain/extensions/export-images/client-side-image.d.ts +14 -0
  1211. package/dist/domain/extensions/export-images/client-side-image.js +1 -0
  1212. package/dist/domain/extensions/export-images/index.d.ts +3 -0
  1213. package/dist/domain/extensions/export-images/index.js +1 -0
  1214. package/dist/domain/extensions/export-images/save-template-thumbnail.d.ts +14 -0
  1215. package/dist/domain/extensions/export-images/save-template-thumbnail.js +1 -0
  1216. package/dist/domain/extensions/index.d.ts +1 -2
  1217. package/dist/domain/extensions/index.js +1 -1
  1218. package/dist/domain/extensions/scene-entity-delete-fab.d.ts +1 -1
  1219. package/dist/domain/extensions/scene-entity-delete-fab.js +1 -1
  1220. package/dist/domain/index.d.ts +15 -2
  1221. package/dist/domain/index.js +1 -1
  1222. package/dist/domain/mocks/create-mock-domain-runtime.d.ts +14 -0
  1223. package/dist/domain/mocks/create-test-application-config.d.ts +1 -1
  1224. package/dist/domain/spec/application/admin-pages-section.d.ts +29 -0
  1225. package/dist/domain/spec/application/admin-pages-section.js +1 -0
  1226. package/dist/domain/spec/application/admin-pages.d.ts +26 -0
  1227. package/dist/domain/spec/application/admin-pages.js +1 -0
  1228. package/dist/domain/spec/application/admin-states.d.ts +5 -0
  1229. package/dist/domain/spec/application/admin-states.js +1 -0
  1230. package/dist/domain/spec/application/configurator-states.d.ts +8 -0
  1231. package/dist/domain/spec/application/configurator-states.js +1 -0
  1232. package/dist/domain/spec/application/index.d.ts +5 -0
  1233. package/dist/domain/spec/application/index.js +1 -0
  1234. package/dist/domain/spec/components/bindings/index.d.ts +2 -0
  1235. package/dist/domain/spec/components/bindings/index.js +1 -0
  1236. package/dist/domain/spec/components/bindings/read-binding.d.ts +13 -0
  1237. package/dist/domain/spec/components/bindings/read-binding.js +1 -0
  1238. package/dist/domain/spec/components/bindings/write-binding.d.ts +32 -0
  1239. package/dist/domain/spec/components/bindings/write-binding.js +1 -0
  1240. package/dist/domain/spec/components/component-entry.d.ts +90 -0
  1241. package/dist/domain/spec/components/component-entry.js +1 -0
  1242. package/dist/domain/spec/components/component-filter.d.ts +54 -0
  1243. package/dist/domain/spec/components/component-filters.d.ts +10 -0
  1244. package/dist/domain/spec/components/component-filters.js +1 -0
  1245. package/dist/domain/spec/components/components.d.ts +4 -0
  1246. package/dist/domain/spec/components/components.js +1 -0
  1247. package/dist/domain/spec/components/index.d.ts +6 -0
  1248. package/dist/domain/spec/enhanced-json/enhanced-json-value.d.ts +30 -0
  1249. package/dist/domain/spec/enhanced-json/enhanced-json-value.js +1 -0
  1250. package/dist/domain/spec/enhanced-json/index.d.ts +1 -0
  1251. package/dist/domain/spec/enhanced-json/index.js +1 -0
  1252. package/dist/domain/spec/errors/implementation-error-collector.d.ts +21 -0
  1253. package/dist/domain/spec/errors/implementation-error-collector.js +1 -0
  1254. package/dist/domain/spec/expressions/expression.d.ts +49 -0
  1255. package/dist/domain/spec/expressions/expression.js +1 -0
  1256. package/dist/domain/spec/expressions/expressions.d.ts +27 -0
  1257. package/dist/domain/spec/expressions/expressions.js +1 -0
  1258. package/dist/domain/spec/expressions/index.d.ts +5 -0
  1259. package/dist/domain/spec/expressions/memo-eval-plan.d.ts +70 -0
  1260. package/dist/domain/spec/expressions/memo-eval-plan.js +1 -0
  1261. package/dist/domain/spec/expressions/relation-expression-params.d.ts +11 -0
  1262. package/dist/domain/spec/expressions/relation-expression-params.js +1 -0
  1263. package/dist/domain/spec/index.d.ts +4 -0
  1264. package/dist/domain/spec/index.js +1 -0
  1265. package/dist/domain/spec/invariants/index.d.ts +2 -0
  1266. package/dist/domain/spec/invariants/index.js +1 -0
  1267. package/dist/domain/spec/invariants/invariant.d.ts +24 -0
  1268. package/dist/domain/spec/invariants/invariant.js +1 -0
  1269. package/dist/domain/spec/invariants/invariants.d.ts +14 -0
  1270. package/dist/domain/spec/invariants/invariants.js +1 -0
  1271. package/dist/domain/spec/json-schema.d.ts +52 -0
  1272. package/dist/domain/spec/json-schema.js +1 -0
  1273. package/dist/domain/spec/markers/index.d.ts +3 -0
  1274. package/dist/domain/spec/markers/index.js +1 -0
  1275. package/dist/domain/spec/markers/msg-marker.d.ts +28 -0
  1276. package/dist/domain/spec/markers/msg-marker.js +1 -0
  1277. package/dist/domain/spec/model/aliases.d.ts +9 -0
  1278. package/dist/domain/spec/model/aliases.js +1 -0
  1279. package/dist/domain/spec/model/common-types.d.ts +15 -0
  1280. package/dist/domain/spec/model/common-types.js +1 -0
  1281. package/dist/domain/spec/model/defaults.d.ts +33 -0
  1282. package/dist/domain/spec/model/defaults.js +1 -0
  1283. package/dist/domain/spec/model/entity-types.d.ts +8 -0
  1284. package/dist/domain/spec/model/entity-types.js +1 -0
  1285. package/dist/domain/spec/model/index.d.ts +7 -0
  1286. package/dist/domain/spec/model/index.js +1 -0
  1287. package/dist/domain/spec/model/model-version-key.d.ts +3 -0
  1288. package/dist/domain/spec/model/model-version-key.js +1 -0
  1289. package/dist/domain/spec/model/names/action-name.d.ts +7 -0
  1290. package/dist/domain/spec/model/names/action-name.js +1 -0
  1291. package/dist/domain/spec/model/names/alias-name.d.ts +7 -0
  1292. package/dist/domain/spec/model/names/alias-name.js +1 -0
  1293. package/dist/domain/spec/model/names/entity-or-alias-name.d.ts +8 -0
  1294. package/dist/domain/spec/model/names/entity-or-alias-name.js +1 -0
  1295. package/dist/domain/spec/model/names/entity-type-name.d.ts +8 -0
  1296. package/dist/domain/spec/model/names/entity-type-name.js +1 -0
  1297. package/dist/domain/spec/model/names/expression-name.d.ts +6 -0
  1298. package/dist/domain/spec/model/names/expression-name.js +1 -0
  1299. package/dist/domain/spec/model/names/index.d.ts +9 -0
  1300. package/dist/domain/spec/model/names/index.js +1 -0
  1301. package/dist/domain/spec/model/names/instance-name.d.ts +7 -0
  1302. package/dist/domain/spec/model/names/instance-name.js +1 -0
  1303. package/dist/domain/spec/model/names/invariant-name.d.ts +3 -0
  1304. package/dist/domain/spec/model/names/invariant-name.js +1 -0
  1305. package/dist/domain/spec/model/names/shape-property-name.d.ts +11 -0
  1306. package/dist/domain/spec/model/names/shape-property-name.js +1 -0
  1307. package/dist/domain/spec/model/names/violation-type-name.d.ts +3 -0
  1308. package/dist/domain/spec/model/names/violation-type-name.js +1 -0
  1309. package/dist/domain/spec/model/presets.d.ts +30 -0
  1310. package/dist/domain/spec/model/presets.js +1 -0
  1311. package/dist/domain/spec/modules/element-registration.d.ts +125 -0
  1312. package/dist/domain/spec/modules/element-registration.js +1 -0
  1313. package/dist/domain/spec/modules/find-assistant-form-element-errors.d.ts +12 -0
  1314. package/dist/domain/spec/modules/find-assistant-form-element-errors.js +1 -0
  1315. package/dist/domain/spec/modules/index.d.ts +9 -0
  1316. package/dist/domain/spec/modules/index.js +1 -0
  1317. package/dist/domain/spec/modules/merge-expression-modules.d.ts +23 -0
  1318. package/dist/domain/spec/modules/merge-expression-modules.js +1 -0
  1319. package/dist/domain/spec/modules/project-modules.d.ts +32 -0
  1320. package/dist/domain/spec/modules/project-modules.js +1 -0
  1321. package/dist/domain/spec/modules/resolve-action-modules.d.ts +4 -0
  1322. package/dist/domain/spec/modules/resolve-component-optic-modules.d.ts +4 -0
  1323. package/dist/domain/spec/modules/resolve-expression-modules.d.ts +14 -0
  1324. package/dist/domain/spec/modules/resolve-expression-modules.js +1 -0
  1325. package/dist/domain/spec/modules/resolve-invariant-modules.d.ts +6 -0
  1326. package/dist/domain/spec/phx/index.d.ts +1 -0
  1327. package/dist/domain/spec/phx/index.js +1 -0
  1328. package/dist/domain/spec/phx/phx-application-types.d.ts +25 -0
  1329. package/dist/domain/spec/phx/phx-application-types.js +1 -0
  1330. package/dist/domain/spec/phx/phx-domain.d.ts +36 -0
  1331. package/dist/domain/spec/phx/phx-domain.js +1 -0
  1332. package/dist/domain/spec/phx/phx-model.d.ts +24 -0
  1333. package/dist/domain/spec/phx/phx-model.js +1 -0
  1334. package/dist/domain/spec/phx/phx.d.ts +21 -0
  1335. package/dist/domain/spec/phx/phx.js +1 -0
  1336. package/dist/domain/spec/runtime/admin-runtime/admin-runtime.d.ts +32 -0
  1337. package/dist/domain/spec/runtime/admin-runtime/admin-runtime.js +1 -0
  1338. package/dist/domain/spec/runtime/admin-runtime/admin-spec-runtime.d.ts +16 -0
  1339. package/dist/domain/spec/runtime/admin-runtime/admin-spec-runtime.js +1 -0
  1340. package/dist/domain/spec/runtime/admin-runtime/index.d.ts +2 -0
  1341. package/dist/domain/spec/runtime/admin-runtime/index.js +1 -0
  1342. package/dist/domain/spec/runtime/admin-runtime/states-runtime.d.ts +8 -0
  1343. package/dist/domain/spec/runtime/application-runtime.d.ts +62 -0
  1344. package/dist/domain/spec/runtime/application-runtime.js +1 -0
  1345. package/dist/domain/spec/runtime/application-spec-slice.d.ts +73 -0
  1346. package/dist/domain/spec/runtime/application-spec-slice.js +1 -0
  1347. package/dist/domain/spec/runtime/configurator-runtime/configurator-runtime.d.ts +37 -0
  1348. package/dist/domain/spec/runtime/configurator-runtime/configurator-runtime.js +1 -0
  1349. package/dist/domain/spec/runtime/configurator-runtime/configurator-spec-runtime.d.ts +16 -0
  1350. package/dist/domain/spec/runtime/configurator-runtime/configurator-spec-runtime.js +1 -0
  1351. package/dist/domain/spec/runtime/configurator-runtime/index.d.ts +2 -0
  1352. package/dist/domain/spec/runtime/configurator-runtime/index.js +1 -0
  1353. package/dist/domain/spec/runtime/configurator-runtime/states-runtime.d.ts +11 -0
  1354. package/dist/domain/spec/runtime/create-application.d.ts +58 -0
  1355. package/dist/domain/spec/runtime/create-application.js +1 -0
  1356. package/dist/domain/spec/runtime/expressions/expression-runtime.d.ts +57 -0
  1357. package/dist/domain/spec/runtime/expressions/expression-runtime.js +1 -0
  1358. package/dist/domain/spec/runtime/expressions/generate-memo-eval-plan-runtime.d.ts +33 -0
  1359. package/dist/domain/spec/runtime/expressions/generate-memo-eval-plan-runtime.js +1 -0
  1360. package/dist/domain/spec/runtime/expressions/index.d.ts +3 -0
  1361. package/dist/domain/spec/runtime/expressions/index.js +1 -0
  1362. package/dist/domain/spec/runtime/expressions/reflection-constants-runtime.d.ts +11 -0
  1363. package/dist/domain/spec/runtime/expressions/reflection-constants-runtime.js +1 -0
  1364. package/dist/domain/spec/runtime/factory-data/factory-data-runtime.d.ts +44 -0
  1365. package/dist/domain/spec/runtime/factory-data/factory-data-runtime.js +1 -0
  1366. package/dist/domain/spec/runtime/factory-data/index.d.ts +3 -0
  1367. package/dist/domain/spec/runtime/factory-data/index.js +1 -0
  1368. package/dist/domain/spec/runtime/factory-data/recipe-defaults.d.ts +13 -0
  1369. package/dist/domain/spec/runtime/factory-data/recipe-defaults.js +1 -0
  1370. package/dist/domain/spec/runtime/factory-data/static-violations.d.ts +16 -0
  1371. package/dist/domain/spec/runtime/factory-data/static-violations.js +1 -0
  1372. package/dist/domain/spec/runtime/generate-runtime-instance.d.ts +2 -0
  1373. package/dist/domain/spec/runtime/generate-runtime-instance.js +1 -0
  1374. package/dist/domain/spec/runtime/index.d.ts +13 -0
  1375. package/dist/domain/spec/runtime/index.js +1 -0
  1376. package/dist/domain/spec/runtime/migrations/index.d.ts +1 -0
  1377. package/dist/domain/spec/runtime/migrations/index.js +1 -0
  1378. package/dist/domain/spec/runtime/migrations/migration-runtime.d.ts +53 -0
  1379. package/dist/domain/spec/runtime/migrations/migration-runtime.js +1 -0
  1380. package/dist/domain/spec/runtime/model/admin-model-runtime.d.ts +31 -0
  1381. package/dist/domain/spec/runtime/model/admin-model-runtime.js +1 -0
  1382. package/dist/domain/spec/runtime/model/configurator-model-runtime.d.ts +33 -0
  1383. package/dist/domain/spec/runtime/model/configurator-model-runtime.js +1 -0
  1384. package/dist/domain/spec/runtime/model/index.d.ts +2 -0
  1385. package/dist/domain/spec/runtime/model/index.js +1 -0
  1386. package/dist/domain/spec/runtime/optics/build-sdk-optic.d.ts +7 -0
  1387. package/dist/domain/spec/runtime/optics/build-sdk-optic.js +1 -0
  1388. package/dist/domain/spec/runtime/optics/build-user-bound-optic.d.ts +7 -0
  1389. package/dist/domain/spec/runtime/optics/build-user-bound-optic.js +1 -0
  1390. package/dist/domain/spec/runtime/optics/built-component-optic.d.ts +11 -0
  1391. package/dist/domain/spec/runtime/optics/built-component-optic.js +1 -0
  1392. package/dist/domain/spec/runtime/optics/component-optic.d.ts +26 -0
  1393. package/dist/domain/spec/runtime/optics/component-optic.js +1 -0
  1394. package/dist/domain/spec/runtime/optics/index.d.ts +2 -0
  1395. package/dist/domain/spec/runtime/optics/index.js +1 -0
  1396. package/dist/domain/spec/runtime/runtime-reference-store.d.ts +46 -0
  1397. package/dist/domain/spec/runtime/runtime-reference-store.js +1 -0
  1398. package/dist/domain/spec/runtime/sections/actions-runtime.d.ts +14 -0
  1399. package/dist/domain/spec/runtime/sections/assistant-runtime.d.ts +10 -0
  1400. package/dist/domain/spec/runtime/sections/data-runtime.d.ts +13 -0
  1401. package/dist/domain/spec/runtime/sections/index.d.ts +6 -0
  1402. package/dist/domain/spec/runtime/sections/index.js +1 -0
  1403. package/dist/domain/spec/runtime/sections/preset-runtime.d.ts +20 -0
  1404. package/dist/domain/spec/runtime/sections/theme-runtime.d.ts +10 -0
  1405. package/dist/domain/spec/runtime/sections/transformers-runtime.d.ts +19 -0
  1406. package/dist/domain/spec/runtime/spec-code/index.d.ts +2 -0
  1407. package/dist/domain/spec/runtime/spec-code/index.js +1 -0
  1408. package/dist/domain/spec/runtime/spec-code/resolve-spec-code.d.ts +18 -0
  1409. package/dist/domain/spec/runtime/spec-code/resolve-spec-code.js +1 -0
  1410. package/dist/domain/spec/runtime/spec-code/spec-code-module.d.ts +17 -0
  1411. package/dist/domain/spec/runtime/spec-code/spec-code-module.js +1 -0
  1412. package/dist/domain/spec/runtime/spec-runtime.d.ts +21 -0
  1413. package/dist/domain/spec/runtime/spec-runtime.js +1 -0
  1414. package/dist/domain/spec/runtime-spec/decode-runtime-spec.d.ts +9 -0
  1415. package/dist/domain/spec/runtime-spec/decode-runtime-spec.js +1 -0
  1416. package/dist/domain/spec/runtime-spec/encode-runtime-spec.d.ts +8 -0
  1417. package/dist/domain/spec/runtime-spec/encode-runtime-spec.js +1 -0
  1418. package/dist/domain/spec/runtime-spec/encoded-runtime-spec.d.ts +28 -0
  1419. package/dist/domain/spec/runtime-spec/encoded-runtime-spec.js +1 -0
  1420. package/dist/domain/spec/runtime-spec/index.d.ts +4 -0
  1421. package/dist/domain/spec/runtime-spec/index.js +1 -0
  1422. package/dist/domain/spec/runtime-spec/runtime-spec.d.ts +174 -0
  1423. package/dist/domain/spec/runtime-spec/runtime-spec.js +1 -0
  1424. package/dist/domain/spec/runtime-spec/spec-code-id.d.ts +40 -0
  1425. package/dist/domain/spec/runtime-spec/spec-code-id.js +1 -0
  1426. package/dist/domain/spec/sections/actions.d.ts +23 -0
  1427. package/dist/domain/spec/sections/actions.js +1 -0
  1428. package/dist/domain/spec/sections/app-metadata.d.ts +18 -0
  1429. package/dist/domain/spec/sections/app-metadata.js +1 -0
  1430. package/dist/domain/spec/sections/application-version.d.ts +7 -0
  1431. package/dist/domain/spec/sections/application-version.js +1 -0
  1432. package/dist/domain/spec/sections/assistant/assistant-manifest.d.ts +96 -0
  1433. package/dist/domain/spec/sections/assistant/assistant-resolved-manifest.d.ts +135 -0
  1434. package/dist/domain/spec/sections/assistant/assistant-resolved-manifest.js +1 -0
  1435. package/dist/domain/spec/sections/assistant/form/assistant-form-element-name.d.ts +11 -0
  1436. package/dist/domain/spec/sections/assistant/form/assistant-form-element-name.js +8 -0
  1437. package/dist/domain/spec/sections/assistant/form/assistant-form-elements.d.ts +174 -0
  1438. package/dist/domain/spec/sections/assistant/form/assistant-form-elements.js +1 -0
  1439. package/dist/domain/spec/sections/assistant/form/assistant-resource-path.d.ts +10 -0
  1440. package/dist/domain/spec/sections/assistant/form/assistant-resource-path.js +1 -0
  1441. package/dist/domain/spec/sections/assistant/form/index.d.ts +4 -0
  1442. package/dist/domain/spec/sections/assistant/form/index.js +1 -0
  1443. package/dist/domain/spec/sections/assistant/index.d.ts +4 -0
  1444. package/dist/domain/spec/sections/assistant/index.js +1 -0
  1445. package/dist/domain/spec/sections/data-spec/chunks.d.ts +23 -0
  1446. package/dist/domain/spec/sections/data-spec/chunks.js +1 -0
  1447. package/dist/domain/spec/sections/data-spec/custom-data-spec-entry.d.ts +16 -0
  1448. package/dist/domain/spec/sections/data-spec/custom-data-spec-entry.js +1 -0
  1449. package/dist/domain/spec/sections/data-spec/data-entry-key.d.ts +9 -0
  1450. package/dist/domain/spec/sections/data-spec/data-entry-key.js +1 -0
  1451. package/dist/domain/spec/sections/data-spec/index.d.ts +5 -0
  1452. package/dist/domain/spec/sections/data-spec/index.js +1 -0
  1453. package/dist/domain/spec/sections/data-spec/parsed-data-spec-entries.d.ts +10 -0
  1454. package/dist/domain/spec/sections/data-spec/parsed-data-spec-entries.js +1 -0
  1455. package/dist/domain/spec/sections/data-spec/swatch-data-spec-entry.d.ts +14 -0
  1456. package/dist/domain/spec/sections/data-spec/swatch-data-spec-entry.js +1 -0
  1457. package/dist/domain/spec/sections/index.d.ts +10 -0
  1458. package/dist/domain/spec/sections/index.js +1 -0
  1459. package/dist/domain/spec/sections/infra/acl.d.ts +12 -0
  1460. package/dist/domain/spec/sections/infra/acl.js +1 -0
  1461. package/dist/domain/spec/sections/infra/index.d.ts +3 -0
  1462. package/dist/domain/spec/sections/infra/index.js +1 -0
  1463. package/dist/domain/spec/sections/infra/resource-entry.d.ts +46 -0
  1464. package/dist/domain/spec/sections/infra/resource-entry.js +1 -0
  1465. package/dist/domain/spec/sections/infra/resources-config.d.ts +10 -0
  1466. package/dist/domain/spec/sections/infra/resources-config.js +1 -0
  1467. package/dist/domain/spec/sections/state-value.d.ts +7 -0
  1468. package/dist/domain/spec/sections/state-value.js +1 -0
  1469. package/dist/domain/spec/sections/theme.d.ts +10 -0
  1470. package/dist/domain/spec/sections/theme.js +1 -0
  1471. package/dist/domain/spec/sections/transformers.d.ts +15 -0
  1472. package/dist/domain/spec/sections/transformers.js +1 -0
  1473. package/dist/domain/spec/sections/ui.d.ts +12 -0
  1474. package/dist/domain/spec/sections/ui.js +1 -0
  1475. package/dist/domain/system-components/child-entity-selection.js +1 -1
  1476. package/dist/domain/system-components/common/scene-entity-control-schema.d.ts +3 -0
  1477. package/dist/domain/system-components/common/scene-entity-control-schema.js +1 -1
  1478. package/dist/domain/system-components/phoenix-entity-elements/child-entity-card-selector.d.ts +2 -3
  1479. package/dist/domain/system-components/phoenix-entity-elements/child-entity-list-selector.d.ts +2 -3
  1480. package/dist/domain/system-components/phoenix-entity-elements/child-entity-toggle-selector.d.ts +2 -3
  1481. package/dist/domain/system-definitions.js +1 -1
  1482. package/dist/domain/utils/index.d.ts +2 -0
  1483. package/dist/domain/utils/index.js +1 -0
  1484. package/dist/editor/Editor.d.ts +12 -0
  1485. package/dist/editor/Editor.js +1 -1
  1486. package/dist/editor/EditorMode.d.ts +2 -0
  1487. package/dist/editor/EditorMode.js +1 -1
  1488. package/dist/editor/agent-mode/AgentModeBridge.d.ts +10 -0
  1489. package/dist/editor/agent-mode/AgentModeBridge.js +1 -0
  1490. package/dist/editor/agent-mode/agent-at-work-fonts.d.ts +2 -0
  1491. package/dist/editor/agent-mode/agent-at-work-fonts.js +1 -0
  1492. package/dist/editor/console-reporter/BrowserConsoleReporter.js +1 -1
  1493. package/dist/editor/console-reporter/console-capture.d.ts +20 -0
  1494. package/dist/editor/console-reporter/console-capture.js +1 -0
  1495. package/dist/editor/domain-editors/DomainSpecContext.js +1 -1
  1496. package/dist/editor/domain-editors/apply-spec-update.d.ts +10 -2
  1497. package/dist/editor/domain-editors/apply-spec-update.js +1 -1
  1498. package/dist/editor/domain-editors/use-implementation-files.d.ts +6 -14
  1499. package/dist/editor/domain-editors/use-implementation-files.js +1 -1
  1500. package/dist/editor/graphql/GraphQLPanel.js +1 -1
  1501. package/dist/editor/index.d.ts +1 -0
  1502. package/dist/editor/index.js +1 -1
  1503. package/dist/editor/mocks/CreateMockYaml.js +2 -2
  1504. package/dist/editor/mocks/EditorMockContext.d.ts +2 -0
  1505. package/dist/editor/mocks/EditorMockContext.js +1 -1
  1506. package/dist/editor/screenshot/ScreenshotHandler.js +1 -1
  1507. package/dist/editor/variants/VariantAnswerFooter.d.ts +8 -1
  1508. package/dist/editor/variants/VariantAnswerFooter.js +1 -1
  1509. package/dist/editor/variants/VariantPageUnavailable.d.ts +5 -0
  1510. package/dist/editor/variants/VariantPageUnavailable.js +1 -0
  1511. package/dist/editor/variants/VariantPreviewHandler.js +1 -1
  1512. package/dist/editor/variants/variant-preview-fonts.d.ts +2 -0
  1513. package/dist/editor/variants/variant-preview-fonts.js +1 -0
  1514. package/dist/editor/variants/variant-preview-styles.d.ts +40 -48
  1515. package/dist/editor/variants/variant-preview-styles.js +493 -1
  1516. package/dist/globals/index.d.ts +2 -0
  1517. package/dist/i18n/locales/cs/messages.js +1 -1
  1518. package/dist/i18n/locales/da/messages.js +1 -1
  1519. package/dist/i18n/locales/de/messages.js +1 -1
  1520. package/dist/i18n/locales/de-AT/messages.js +1 -1
  1521. package/dist/i18n/locales/en/messages.js +1 -1
  1522. package/dist/i18n/locales/en-AU/messages.js +1 -1
  1523. package/dist/i18n/locales/en-GB/messages.js +1 -1
  1524. package/dist/i18n/locales/es/messages.js +1 -1
  1525. package/dist/i18n/locales/fr/messages.js +1 -1
  1526. package/dist/i18n/locales/hu/messages.js +1 -1
  1527. package/dist/i18n/locales/it/messages.js +1 -1
  1528. package/dist/i18n/locales/nl/messages.js +1 -1
  1529. package/dist/i18n/locales/pl/messages.js +1 -1
  1530. package/dist/i18n/locales/pt/messages.js +1 -1
  1531. package/dist/i18n/locales/ro/messages.js +1 -1
  1532. package/dist/i18n/locales/sk/messages.js +1 -1
  1533. package/dist/i18n/locales/tr/messages.js +1 -1
  1534. package/dist/i18n/merge-catalogs.d.ts +4 -1
  1535. package/dist/i18n/merge-catalogs.js +1 -1
  1536. package/dist/legacy/domain-cli/gen/configurator-builder.js +5 -4
  1537. package/dist/legacy/domain-cli/utils/cache.d.ts +1 -1
  1538. package/dist/legacy/domain-cli/utils/cache.js +1 -1
  1539. package/dist/legacy/domain-spec/__generated/domain-schema.d.ts +97 -80
  1540. package/dist/legacy/domain-spec/spec/domain-spec.js +1 -1
  1541. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/claude-md.d.ts +1 -1
  1542. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/cursor-rules.d.ts +1 -1
  1543. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/shared-sdk-content.d.ts +1 -1
  1544. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/shared-sdk-content.js +11 -5
  1545. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-admin.js +10 -11
  1546. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-embedded-admin.js +9 -10
  1547. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/i18n-index.js +3 -3
  1548. package/dist/legacy/phoenix-cli/services/webhook-service/transport.js +1 -1
  1549. package/dist/legacy/phoenix-cli/services/webhook-service/tunnel.d.ts +1 -0
  1550. package/dist/legacy/phoenix-cli/services/webhook-service/tunnel.js +1 -1
  1551. package/dist/legacy/webhook-cli/lambda-local/index.js +1 -1
  1552. package/dist/phoenix/application-spec/application-spec-builder.d.ts +2 -4
  1553. package/dist/phoenix/application-spec/application-spec-builder.js +1 -1
  1554. package/dist/phoenix/application-spec/generate-application-spec-project.d.ts +3 -3
  1555. package/dist/phoenix/application-spec/generate-application-spec-project.js +2 -2
  1556. package/dist/phoenix/application-spec/generate-application-spec-story.js +2 -2
  1557. package/dist/phoenix/application-spec/generate-project-files.d.ts +4 -4
  1558. package/dist/phoenix/application-spec/generate-project-files.js +1 -1
  1559. package/dist/phoenix/application-spec/index.d.ts +3 -0
  1560. package/dist/phoenix/application-spec/index.js +1 -1
  1561. package/dist/phoenix/application-spec/project-files.d.ts +8 -2
  1562. package/dist/phoenix/application-spec/project-files.js +1 -1
  1563. package/dist/phoenix/application-spec/read-spec-project.d.ts +1 -2
  1564. package/dist/phoenix/application-spec/read-spec-project.js +1 -1
  1565. package/dist/phoenix/application-spec/resolve-deployment-data.d.ts +11 -0
  1566. package/dist/phoenix/application-spec/resolve-deployment-data.js +2 -2
  1567. package/dist/phoenix/bin.d.ts +2 -0
  1568. package/dist/phoenix/bin.js +2 -0
  1569. package/dist/phoenix/check-configs/built-in-eslint-config.d.ts +9 -0
  1570. package/dist/phoenix/check-configs/built-in-eslint-config.js +1 -0
  1571. package/dist/phoenix/check-configs/eslint-config.d.ts +10 -0
  1572. package/dist/phoenix/check-configs/eslint-config.js +1 -0
  1573. package/dist/phoenix/check-configs/index.d.ts +8 -0
  1574. package/dist/phoenix/check-configs/index.js +1 -0
  1575. package/dist/phoenix/check-configs/typescript-project.d.ts +5 -0
  1576. package/dist/phoenix/check-configs/typescript-project.js +1 -0
  1577. package/dist/phoenix/cli.d.ts +0 -1
  1578. package/dist/phoenix/cli.js +1 -2
  1579. package/dist/phoenix/commands/activate-deployment.js +1 -1
  1580. package/dist/phoenix/commands/build.d.ts +2 -1
  1581. package/dist/phoenix/commands/build.js +1 -1
  1582. package/dist/phoenix/commands/changelog.js +1 -1
  1583. package/dist/phoenix/commands/check.js +1 -1
  1584. package/dist/phoenix/commands/clean.d.ts +2 -1
  1585. package/dist/phoenix/commands/clean.js +1 -1
  1586. package/dist/phoenix/commands/cleanup-environment.js +2 -2
  1587. package/dist/phoenix/commands/create-environment.js +1 -1
  1588. package/dist/phoenix/commands/data.js +1 -1
  1589. package/dist/phoenix/commands/deploy.js +3 -3
  1590. package/dist/phoenix/commands/deployment-build-envs-command.js +1 -1
  1591. package/dist/phoenix/commands/deps/deps.d.ts +73 -0
  1592. package/dist/phoenix/commands/deps/deps.js +3 -0
  1593. package/dist/phoenix/commands/deps/index.d.ts +1 -0
  1594. package/dist/phoenix/commands/deps/index.js +1 -0
  1595. package/dist/phoenix/commands/deps/sdk-manifest.d.ts +12 -0
  1596. package/dist/phoenix/commands/deps/sdk-manifest.js +1 -0
  1597. package/dist/phoenix/commands/dev.d.ts +2 -1
  1598. package/dist/phoenix/commands/dev.js +4 -5
  1599. package/dist/phoenix/commands/docs.js +1 -1
  1600. package/dist/phoenix/commands/finish-deployment-command.js +1 -1
  1601. package/dist/phoenix/commands/fix.js +1 -1
  1602. package/dist/phoenix/commands/index.d.ts +1 -0
  1603. package/dist/phoenix/commands/index.js +1 -1
  1604. package/dist/phoenix/commands/init.d.ts +17 -5
  1605. package/dist/phoenix/commands/init.js +1 -1
  1606. package/dist/phoenix/commands/inspect-assets.js +1 -1
  1607. package/dist/phoenix/commands/link.js +1 -1
  1608. package/dist/phoenix/commands/list-environments.js +1 -1
  1609. package/dist/phoenix/commands/login.d.ts +4 -1
  1610. package/dist/phoenix/commands/login.js +2 -2
  1611. package/dist/phoenix/commands/prepare-deployment-command.js +2 -2
  1612. package/dist/phoenix/commands/prettier.js +1 -1
  1613. package/dist/phoenix/commands/register-deployment.js +1 -1
  1614. package/dist/phoenix/commands/scene.js +1 -1
  1615. package/dist/phoenix/commands/screenshot.js +1 -1
  1616. package/dist/phoenix/commands/state.js +1 -1
  1617. package/dist/phoenix/commands/story-build.js +3 -3
  1618. package/dist/phoenix/commands/story-create.js +1 -1
  1619. package/dist/phoenix/commands/story-dev.js +2 -2
  1620. package/dist/phoenix/commands/sync.d.ts +2 -1
  1621. package/dist/phoenix/commands/sync.js +1 -1
  1622. package/dist/phoenix/commands/unlink.js +1 -1
  1623. package/dist/phoenix/commands/variants.js +1 -1
  1624. package/dist/phoenix/editor-server/commands-router.js +1 -1
  1625. package/dist/phoenix/editor-server/editor-server.d.ts +2 -13
  1626. package/dist/phoenix/editor-server/editor-server.js +1 -1
  1627. package/dist/phoenix/editor-server/spec-router.js +1 -1
  1628. package/dist/phoenix/editor-server/trpc.d.ts +2 -12
  1629. package/dist/phoenix/lingui/index.d.ts +1 -0
  1630. package/dist/phoenix/lingui/index.js +1 -0
  1631. package/dist/phoenix/lingui/lingui.d.ts +18 -0
  1632. package/dist/phoenix/lingui/lingui.js +1 -0
  1633. package/dist/phoenix/scripts/docs-utils.js +1 -1
  1634. package/dist/phoenix/services/application-spec-project-watcher.d.ts +16 -9
  1635. package/dist/phoenix/services/application-spec-project-watcher.js +2 -2
  1636. package/dist/phoenix/services/cli-credentials.d.ts +3 -0
  1637. package/dist/phoenix/services/cli-credentials.js +1 -1
  1638. package/dist/phoenix/services/cli-exit.d.ts +5 -0
  1639. package/dist/phoenix/services/cli-exit.js +1 -0
  1640. package/dist/phoenix/services/deployment/deployment-preparation-service.d.ts +28 -0
  1641. package/dist/phoenix/services/deployment/deployment-preparation-service.js +1 -0
  1642. package/dist/phoenix/services/deployment/generated-env-markers.d.ts +8 -0
  1643. package/dist/phoenix/services/deployment/generated-env-markers.js +1 -0
  1644. package/dist/phoenix/services/deployment/index.d.ts +2 -0
  1645. package/dist/phoenix/services/deployment/index.js +1 -0
  1646. package/dist/phoenix/services/dev-experience/dev-experience.d.ts +31 -0
  1647. package/dist/phoenix/services/dev-experience/dev-experience.js +1 -0
  1648. package/dist/phoenix/services/dev-experience/index.d.ts +3 -0
  1649. package/dist/phoenix/services/dev-experience/index.js +1 -0
  1650. package/dist/phoenix/services/dev-experience/read-explicit-editor-setting.d.ts +7 -0
  1651. package/dist/phoenix/services/dev-experience/read-explicit-editor-setting.js +1 -0
  1652. package/dist/phoenix/services/dev-experience/regenerated-page-experience.d.ts +24 -0
  1653. package/dist/phoenix/services/dev-experience/regenerated-page-experience.js +1 -0
  1654. package/dist/phoenix/services/index.d.ts +7 -2
  1655. package/dist/phoenix/services/index.js +1 -1
  1656. package/dist/phoenix/services/lingui-watcher.js +1 -1
  1657. package/dist/phoenix/services/phoenix-pubsub.d.ts +4 -0
  1658. package/dist/phoenix/services/phoenix-store.d.ts +3 -0
  1659. package/dist/phoenix/services/phoenix-store.js +1 -1
  1660. package/dist/phoenix/services/prepare-development-environment.js +1 -1
  1661. package/dist/phoenix/services/session/editor-server-handle.d.ts +5 -0
  1662. package/dist/phoenix/services/session/editor-server-handle.js +1 -0
  1663. package/dist/phoenix/services/session/index.d.ts +2 -0
  1664. package/dist/phoenix/services/session/index.js +1 -0
  1665. package/dist/phoenix/services/session/phoenix-application.d.ts +83 -0
  1666. package/dist/phoenix/services/session/phoenix-application.js +2 -0
  1667. package/dist/phoenix/services/source-archive.d.ts +2 -0
  1668. package/dist/phoenix/services/source-archive.js +1 -1
  1669. package/dist/phoenix/services/swc.d.ts +5 -4
  1670. package/dist/phoenix/services/swc.js +2 -2
  1671. package/dist/phoenix/services/telemetry/amplitude-telemetry-transport.d.ts +9 -0
  1672. package/dist/phoenix/services/telemetry/amplitude-telemetry-transport.js +1 -0
  1673. package/dist/phoenix/services/telemetry/index.d.ts +3 -0
  1674. package/dist/phoenix/services/telemetry/index.js +1 -0
  1675. package/dist/phoenix/services/telemetry/telemetry-client.d.ts +25 -0
  1676. package/dist/phoenix/services/telemetry/telemetry-client.js +1 -0
  1677. package/dist/phoenix/services/telemetry/telemetry-command.d.ts +2 -0
  1678. package/dist/phoenix/services/telemetry/telemetry-command.js +1 -0
  1679. package/dist/phoenix/services/telemetry/telemetry-event.d.ts +44 -0
  1680. package/dist/phoenix/services/telemetry/telemetry-event.js +1 -0
  1681. package/dist/phoenix/services/telemetry/telemetry-state.d.ts +25 -0
  1682. package/dist/phoenix/services/telemetry/telemetry-state.js +2 -0
  1683. package/dist/phoenix/services/vite-config.d.ts +2 -1
  1684. package/dist/phoenix/services/vite-config.js +1 -1
  1685. package/dist/phoenix/services/webhook-service/transport.js +1 -1
  1686. package/dist/phoenix/services/webhook-service/tunnel.d.ts +1 -0
  1687. package/dist/phoenix/services/webhook-service/tunnel.js +1 -1
  1688. package/dist/phoenix/utils/index.d.ts +4 -2
  1689. package/dist/phoenix/utils/index.js +1 -1
  1690. package/dist/phoenix/utils/node-version/index.d.ts +1 -0
  1691. package/dist/phoenix/utils/node-version/index.js +1 -0
  1692. package/dist/phoenix/utils/node-version/supported-node-version.d.ts +12 -0
  1693. package/dist/phoenix/utils/node-version/supported-node-version.js +4 -0
  1694. package/dist/phoenix/utils/package-info.d.ts +0 -9
  1695. package/dist/phoenix/utils/package-info.js +1 -1
  1696. package/dist/phoenix/utils/package-manager/index.d.ts +2 -0
  1697. package/dist/phoenix/utils/package-manager/index.js +1 -0
  1698. package/dist/phoenix/utils/package-manager/package-manager-commands.d.ts +19 -0
  1699. package/dist/phoenix/utils/package-manager/package-manager-commands.js +1 -0
  1700. package/dist/phoenix/utils/package-manager/pnpm-project.d.ts +9 -0
  1701. package/dist/phoenix/utils/package-manager/pnpm-project.js +1 -0
  1702. package/dist/phoenix/utils/run-command.d.ts +11 -0
  1703. package/dist/phoenix/utils/run-command.js +1 -1
  1704. package/dist/phoenix/utils/sdk-tool/index.d.ts +1 -0
  1705. package/dist/phoenix/utils/sdk-tool/index.js +1 -0
  1706. package/dist/phoenix/utils/sdk-tool/resolve-sdk-tool-bin.d.ts +15 -0
  1707. package/dist/phoenix/utils/sdk-tool/resolve-sdk-tool-bin.js +1 -0
  1708. package/dist/react-sdk/application-runtime/common-services/analytics/analytics-service.d.ts +1 -1
  1709. package/dist/react-sdk/application-runtime/common-services/analytics/frontend-analytics.d.ts +52 -0
  1710. package/dist/react-sdk/application-runtime/common-services/analytics/index.d.ts +1 -0
  1711. package/dist/react-sdk/application-runtime/common-services/analytics/index.js +1 -1
  1712. package/dist/react-sdk/application-runtime/common-services/initialize.d.ts +2 -2
  1713. package/dist/react-sdk/application-runtime/domain-application-context/chat-system.d.ts +1 -1
  1714. package/dist/react-sdk/application-runtime/hooks/index.d.ts +2 -0
  1715. package/dist/react-sdk/application-runtime/hooks/index.js +1 -1
  1716. package/dist/react-sdk/application-runtime/hooks/loading/index.d.ts +5 -0
  1717. package/dist/react-sdk/application-runtime/hooks/loading/index.js +1 -0
  1718. package/dist/react-sdk/application-runtime/hooks/loading/loader-host-context.d.ts +11 -0
  1719. package/dist/react-sdk/application-runtime/hooks/loading/loader-host-context.js +1 -0
  1720. package/dist/react-sdk/application-runtime/hooks/loading/use-is-awaiting-loading-phase.d.ts +8 -0
  1721. package/dist/react-sdk/application-runtime/hooks/loading/use-is-awaiting-loading-phase.js +1 -0
  1722. package/dist/react-sdk/application-runtime/hooks/loading/use-is-loader-hosted.d.ts +7 -0
  1723. package/dist/react-sdk/application-runtime/hooks/loading/use-is-loader-hosted.js +1 -0
  1724. package/dist/react-sdk/application-runtime/hooks/loading/use-loading-actions.d.ts +9 -0
  1725. package/dist/react-sdk/application-runtime/hooks/loading/use-loading-actions.js +1 -0
  1726. package/dist/react-sdk/application-runtime/hooks/loading/use-loading-application.d.ts +24 -0
  1727. package/dist/react-sdk/application-runtime/hooks/loading/use-loading-application.js +1 -0
  1728. package/dist/react-sdk/application-runtime/hooks/responsive/index.d.ts +3 -0
  1729. package/dist/react-sdk/application-runtime/hooks/responsive/index.js +1 -0
  1730. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-actions.d.ts +9 -0
  1731. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-actions.js +1 -0
  1732. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-application.d.ts +28 -0
  1733. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-application.js +1 -0
  1734. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-state.d.ts +10 -0
  1735. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-state.js +1 -0
  1736. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-store.d.ts +24 -0
  1737. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-store.js +1 -0
  1738. package/dist/react-sdk/application-runtime/hooks/use-access-service.d.ts +5 -0
  1739. package/dist/react-sdk/application-runtime/hooks/use-access-service.js +1 -1
  1740. package/dist/react-sdk/application-runtime/hooks/use-environment.d.ts +7 -0
  1741. package/dist/react-sdk/application-runtime/hooks/use-environment.js +1 -1
  1742. package/dist/react-sdk/application-runtime/hooks/use-phoenix-element-slots.d.ts +2 -1
  1743. package/dist/react-sdk/application-runtime/hooks/use-web-component-readonly-sync.d.ts +4 -11
  1744. package/dist/react-sdk/application-runtime/hooks/use-web-component-readonly-sync.js +1 -1
  1745. package/dist/react-sdk/application-runtime/hooks/use-web-component.d.ts +5 -0
  1746. package/dist/react-sdk/application-runtime/hooks/use-web-component.js +1 -1
  1747. package/dist/react-sdk/application-runtime/host-properties/actions.d.ts +15 -0
  1748. package/dist/react-sdk/application-runtime/host-properties/actions.js +1 -0
  1749. package/dist/react-sdk/application-runtime/host-properties/connect-host-properties.d.ts +30 -0
  1750. package/dist/react-sdk/application-runtime/host-properties/connect-host-properties.js +1 -0
  1751. package/dist/react-sdk/application-runtime/host-properties/domain-host-properties.d.ts +7 -0
  1752. package/dist/react-sdk/application-runtime/host-properties/domain-host-properties.js +1 -0
  1753. package/dist/react-sdk/application-runtime/host-properties/host-property-descriptors.d.ts +21 -0
  1754. package/dist/react-sdk/application-runtime/host-properties/host-property-descriptors.js +1 -0
  1755. package/dist/react-sdk/application-runtime/host-properties/host-property-scopes.d.ts +42 -0
  1756. package/dist/react-sdk/application-runtime/host-properties/host-property-scopes.js +1 -0
  1757. package/dist/react-sdk/application-runtime/host-properties/index.d.ts +8 -0
  1758. package/dist/react-sdk/application-runtime/host-properties/index.js +1 -0
  1759. package/dist/react-sdk/application-runtime/host-properties/initialize.d.ts +7 -0
  1760. package/dist/react-sdk/application-runtime/host-properties/initialize.js +1 -0
  1761. package/dist/react-sdk/application-runtime/host-properties/selectors.d.ts +54 -0
  1762. package/dist/react-sdk/application-runtime/host-properties/selectors.js +1 -0
  1763. package/dist/react-sdk/application-runtime/host-properties/types.d.ts +18 -0
  1764. package/dist/react-sdk/application-runtime/host-properties/types.js +1 -0
  1765. package/dist/react-sdk/application-runtime/index.d.ts +3 -0
  1766. package/dist/react-sdk/application-runtime/integration/initialize.d.ts +7 -6
  1767. package/dist/react-sdk/application-runtime/integration/initialize.js +1 -1
  1768. package/dist/react-sdk/application-runtime/integration/selectors.d.ts +11 -2
  1769. package/dist/react-sdk/application-runtime/integration/selectors.js +1 -1
  1770. package/dist/react-sdk/application-runtime/integration/types.d.ts +5 -2
  1771. package/dist/react-sdk/application-runtime/loading/actions.d.ts +45 -0
  1772. package/dist/react-sdk/application-runtime/loading/actions.js +1 -0
  1773. package/dist/react-sdk/application-runtime/loading/index.d.ts +4 -0
  1774. package/dist/react-sdk/application-runtime/loading/index.js +1 -0
  1775. package/dist/react-sdk/application-runtime/loading/initialize.d.ts +3 -0
  1776. package/dist/react-sdk/application-runtime/loading/initialize.js +1 -0
  1777. package/dist/react-sdk/application-runtime/loading/selectors.d.ts +18 -0
  1778. package/dist/react-sdk/application-runtime/loading/selectors.js +1 -0
  1779. package/dist/react-sdk/application-runtime/loading/types.d.ts +59 -0
  1780. package/dist/react-sdk/application-runtime/loading/types.js +1 -0
  1781. package/dist/react-sdk/application-runtime/mocks/create-mock-application-runtime.js +1 -1
  1782. package/dist/react-sdk/application-runtime/provider/ApplicationRuntime.d.ts +6 -0
  1783. package/dist/react-sdk/application-runtime/provider/ApplicationRuntime.js +1 -1
  1784. package/dist/react-sdk/application-runtime/provider/ApplicationType.d.ts +7 -0
  1785. package/dist/react-sdk/application-runtime/provider/ApplicationType.js +1 -1
  1786. package/dist/react-sdk/application-runtime/responsive/actions.d.ts +53 -0
  1787. package/dist/react-sdk/application-runtime/responsive/actions.js +1 -0
  1788. package/dist/react-sdk/application-runtime/responsive/index.d.ts +4 -0
  1789. package/dist/react-sdk/application-runtime/responsive/index.js +1 -0
  1790. package/dist/react-sdk/application-runtime/responsive/initialize.d.ts +3 -0
  1791. package/dist/react-sdk/application-runtime/responsive/initialize.js +1 -0
  1792. package/dist/react-sdk/application-runtime/responsive/selectors.d.ts +20 -0
  1793. package/dist/react-sdk/application-runtime/responsive/selectors.js +1 -0
  1794. package/dist/react-sdk/application-runtime/responsive/types.d.ts +113 -0
  1795. package/dist/react-sdk/application-runtime/responsive/types.js +1 -0
  1796. package/dist/react-sdk/application-runtime/routing/routing-service.d.ts +34 -2
  1797. package/dist/react-sdk/application-runtime/routing/routing-service.js +1 -1
  1798. package/dist/react-sdk/application-runtime/runtime/create-application-runtime.d.ts +331 -10
  1799. package/dist/react-sdk/application-runtime/runtime/create-application-runtime.js +1 -1
  1800. package/dist/react-sdk/configurator-routing/ConfiguratorRoutingProvider.d.ts +11 -0
  1801. package/dist/react-sdk/configurator-routing/ConfiguratorRoutingProvider.js +1 -0
  1802. package/dist/react-sdk/configurator-routing/OnGoToIndexHandler.d.ts +9 -0
  1803. package/dist/react-sdk/configurator-routing/OnGoToIndexHandler.js +1 -0
  1804. package/dist/react-sdk/configurator-routing/index.d.ts +3 -0
  1805. package/dist/react-sdk/configurator-routing/index.js +1 -0
  1806. package/dist/react-sdk/configurator-routing/use-power-routing-lifecycle.d.ts +11 -0
  1807. package/dist/react-sdk/configurator-routing/use-power-routing-lifecycle.js +1 -0
  1808. package/dist/react-sdk/configurator-ui-elements/ConfiguratorUiElementHost.d.ts +7 -0
  1809. package/dist/react-sdk/configurator-ui-elements/ConfiguratorUiElementHost.js +1 -0
  1810. package/dist/react-sdk/configurator-ui-elements/ErrorFallbackElement.d.ts +14 -0
  1811. package/dist/react-sdk/configurator-ui-elements/ErrorFallbackElement.js +1 -0
  1812. package/dist/react-sdk/configurator-ui-elements/ErrorFallbackPropsProvider.d.ts +18 -0
  1813. package/dist/react-sdk/configurator-ui-elements/ErrorFallbackPropsProvider.js +1 -0
  1814. package/dist/react-sdk/configurator-ui-elements/PlainErrorFallback.d.ts +5 -0
  1815. package/dist/react-sdk/configurator-ui-elements/PlainErrorFallback.js +1 -0
  1816. package/dist/react-sdk/configurator-ui-elements/configurator-ui-element.d.ts +17 -0
  1817. package/dist/react-sdk/configurator-ui-elements/configurator-ui-element.js +1 -0
  1818. package/dist/react-sdk/configurator-ui-elements/create-configurator-ui-element.d.ts +5 -0
  1819. package/dist/react-sdk/configurator-ui-elements/create-configurator-ui-element.js +1 -0
  1820. package/dist/react-sdk/configurator-ui-elements/index.d.ts +6 -0
  1821. package/dist/react-sdk/configurator-ui-elements/index.js +1 -0
  1822. package/dist/react-sdk/domain-application-context/BackendDataProvider.js +1 -1
  1823. package/dist/react-sdk/domain-application-context/ConfigurationPersistSystemFailureHandler.js +1 -1
  1824. package/dist/react-sdk/domain-application-context/DomainLifecycleBoundary.js +1 -1
  1825. package/dist/react-sdk/domain-application-context/FrontendDataProvider.js +1 -1
  1826. package/dist/react-sdk/domain-application-context/OnPresetLoadedHandler.js +1 -0
  1827. package/dist/react-sdk/domain-application-context/PublishedDataProvider.js +1 -1
  1828. package/dist/react-sdk/domain-application-context/chat-hooks.d.ts +4 -0
  1829. package/dist/react-sdk/domain-application-context/chat-hooks.js +1 -0
  1830. package/dist/react-sdk/domain-application-context/index.d.ts +2 -0
  1831. package/dist/react-sdk/domain-application-context/index.js +1 -1
  1832. package/dist/react-sdk/domain-context/common-hooks/index.d.ts +9 -0
  1833. package/dist/react-sdk/domain-context/common-hooks/index.js +1 -0
  1834. package/dist/react-sdk/domain-context/common-hooks/use-configuration-save-state.d.ts +23 -0
  1835. package/dist/react-sdk/domain-context/common-hooks/use-configuration-save-state.js +1 -0
  1836. package/dist/react-sdk/domain-context/common-hooks/use-configurator-messages.d.ts +15 -4
  1837. package/dist/react-sdk/domain-context/common-hooks/use-configurator-messages.js +1 -1
  1838. package/dist/react-sdk/domain-context/common-hooks/use-domain-context.d.ts +5 -3
  1839. package/dist/react-sdk/domain-context/common-hooks/use-state-validity.d.ts +6 -1
  1840. package/dist/react-sdk/domain-context/common-hooks/use-state-validity.js +1 -1
  1841. package/dist/react-sdk/domain-context/component-hooks/index.d.ts +1 -0
  1842. package/dist/react-sdk/domain-context/component-hooks/index.js +1 -0
  1843. package/dist/react-sdk/domain-context/component-hooks/use-component.js +1 -1
  1844. package/dist/react-sdk/domain-context/entity-hooks/use-domain-entity-state.js +1 -1
  1845. package/dist/react-sdk/domain-context/entity-hooks/use-entity-price.js +1 -1
  1846. package/dist/react-sdk/domain-context/entity-hooks/use-root-entity-id.js +1 -1
  1847. package/dist/react-sdk/domain-context/entity-hooks/use-root-entity-state.js +1 -1
  1848. package/dist/react-sdk/domain-context/index.d.ts +8 -1
  1849. package/dist/react-sdk/domain-context/index.js +1 -1
  1850. package/dist/react-sdk/domain-context/system-hooks/composition-hooks.js +1 -1
  1851. package/dist/react-sdk/domain-context/system-hooks/dimension-hooks.js +1 -1
  1852. package/dist/react-sdk/domain-context/system-hooks/generate-share-link-hooks.d.ts +8 -0
  1853. package/dist/react-sdk/domain-context/system-hooks/generate-share-link-hooks.js +1 -0
  1854. package/dist/react-sdk/domain-context/system-hooks/hover-hooks.d.ts +2 -2
  1855. package/dist/react-sdk/domain-context/system-hooks/hover-hooks.js +1 -1
  1856. package/dist/react-sdk/domain-context/system-hooks/locale-switch-hooks.d.ts +24 -0
  1857. package/dist/react-sdk/domain-context/system-hooks/locale-switch-hooks.js +1 -0
  1858. package/dist/react-sdk/domain-context/system-hooks/navigation-hooks.d.ts +5 -0
  1859. package/dist/react-sdk/domain-context/system-hooks/navigation-hooks.js +1 -1
  1860. package/dist/react-sdk/domain-context/system-hooks/selection-hooks.js +1 -1
  1861. package/dist/react-sdk/domain-context/system-hooks/share-links-hooks.d.ts +32 -0
  1862. package/dist/react-sdk/domain-context/system-hooks/share-links-hooks.js +1 -0
  1863. package/dist/react-sdk/domain-context/system-hooks/step-navigation-hooks.d.ts +57 -0
  1864. package/dist/react-sdk/domain-context/system-hooks/step-navigation-hooks.js +1 -0
  1865. package/dist/react-sdk/domain-context/system-hooks/tab-navigation-hooks.d.ts +61 -0
  1866. package/dist/react-sdk/domain-context/system-hooks/tab-navigation-hooks.js +1 -0
  1867. package/dist/react-sdk/domain-context/system-hooks/undo-redo-hooks.d.ts +20 -0
  1868. package/dist/react-sdk/domain-context/system-hooks/undo-redo-hooks.js +1 -0
  1869. package/dist/react-sdk/domain-controls/ChildEntityCardSelector.d.ts +2 -3
  1870. package/dist/react-sdk/domain-controls/ChildEntityListSelector.d.ts +2 -3
  1871. package/dist/react-sdk/domain-controls/ChildEntityToggleSelector.d.ts +2 -3
  1872. package/dist/react-sdk/domain-controls/hooks/use-cook-replace-recipes.d.ts +3 -3
  1873. package/dist/react-sdk/elements/PhoenixEntityElement.js +1 -1
  1874. package/dist/react-sdk/elements/PhoenixLayoutElement.js +1 -1
  1875. package/dist/react-sdk/handlers/FinalizeActionRunner.d.ts +13 -0
  1876. package/dist/react-sdk/handlers/FinalizeActionRunner.js +1 -0
  1877. package/dist/react-sdk/handlers/FinalizeActionsHost.d.ts +10 -0
  1878. package/dist/react-sdk/handlers/FinalizeActionsHost.js +1 -0
  1879. package/dist/react-sdk/handlers/FinalizeActionsProvider.d.ts +11 -0
  1880. package/dist/react-sdk/handlers/FinalizeActionsProvider.js +1 -0
  1881. package/dist/react-sdk/handlers/finalize-actions-context.d.ts +6 -0
  1882. package/dist/react-sdk/handlers/finalize-actions-context.js +1 -0
  1883. package/dist/react-sdk/handlers/finalize-actions-store.d.ts +23 -0
  1884. package/dist/react-sdk/handlers/finalize-actions-store.js +1 -0
  1885. package/dist/react-sdk/handlers/index.d.ts +6 -0
  1886. package/dist/react-sdk/handlers/index.js +1 -1
  1887. package/dist/react-sdk/handlers/use-finalize-action.d.ts +32 -0
  1888. package/dist/react-sdk/handlers/use-finalize-action.js +1 -0
  1889. package/dist/react-sdk/handlers/use-finalize-actions.d.ts +53 -0
  1890. package/dist/react-sdk/handlers/use-finalize-actions.js +1 -0
  1891. package/dist/react-sdk/index.d.ts +9 -0
  1892. package/dist/react-sdk/index.js +1 -1
  1893. package/dist/react-sdk/integration/IntegrationSubscription.js +1 -0
  1894. package/dist/react-sdk/integration/index.d.ts +1 -0
  1895. package/dist/react-sdk/integration/index.js +1 -0
  1896. package/dist/react-sdk/lifecycle-providers/ConfiguratorDataProvider.d.ts +8 -0
  1897. package/dist/react-sdk/lifecycle-providers/ConfiguratorDataProvider.js +1 -0
  1898. package/dist/react-sdk/lifecycle-providers/LifecycleProviders.js +1 -0
  1899. package/dist/react-sdk/lifecycle-providers/index.d.ts +2 -0
  1900. package/dist/react-sdk/lifecycle-providers/index.js +1 -0
  1901. package/dist/react-sdk/loading-state/LoaderHost.d.ts +20 -0
  1902. package/dist/react-sdk/loading-state/LoaderHost.js +1 -0
  1903. package/dist/react-sdk/loading-state/built-in-loading-phase.d.ts +9 -0
  1904. package/dist/react-sdk/loading-state/built-in-loading-phase.js +1 -0
  1905. package/dist/react-sdk/loading-state/create-app-loader.d.ts +18 -0
  1906. package/dist/react-sdk/loading-state/create-app-loader.js +1 -0
  1907. package/dist/react-sdk/loading-state/index.d.ts +4 -2
  1908. package/dist/react-sdk/loading-state/index.js +1 -1
  1909. package/dist/react-sdk/loading-state/loading-state-hooks.d.ts +22 -0
  1910. package/dist/react-sdk/loading-state/loading-state-hooks.js +1 -0
  1911. package/dist/react-sdk/notifications/index.d.ts +1 -0
  1912. package/dist/react-sdk/notifications/index.js +1 -0
  1913. package/dist/react-sdk/notifications/snackbar-action-button.d.ts +30 -0
  1914. package/dist/react-sdk/notifications/snackbar-action-button.js +1 -0
  1915. package/dist/react-sdk/page-elements/ConfigurationNotFoundPagePropsProvider.d.ts +17 -0
  1916. package/dist/react-sdk/page-elements/ConfigurationNotFoundPagePropsProvider.js +1 -0
  1917. package/dist/react-sdk/page-elements/ConfiguratorErrorPagePropsProvider.d.ts +17 -0
  1918. package/dist/react-sdk/page-elements/ConfiguratorErrorPagePropsProvider.js +1 -0
  1919. package/dist/react-sdk/page-elements/configurator-error-page-props.d.ts +20 -0
  1920. package/dist/react-sdk/page-elements/configurator-error-page-props.js +1 -0
  1921. package/dist/react-sdk/page-elements/create-configuration-not-found-page.d.ts +15 -0
  1922. package/dist/react-sdk/page-elements/create-configuration-not-found-page.js +1 -0
  1923. package/dist/react-sdk/page-elements/create-configurator-error-page.d.ts +14 -0
  1924. package/dist/react-sdk/page-elements/create-configurator-error-page.js +1 -0
  1925. package/dist/react-sdk/page-elements/create-preset-ui.d.ts +9 -0
  1926. package/dist/react-sdk/page-elements/create-preset-ui.js +1 -0
  1927. package/dist/react-sdk/page-elements/index.d.ts +6 -0
  1928. package/dist/react-sdk/page-elements/index.js +1 -0
  1929. package/dist/react-sdk/preset-selection/PresetSelectionProvider.js +1 -0
  1930. package/dist/react-sdk/preset-selection/index.d.ts +1 -0
  1931. package/dist/react-sdk/preset-selection/index.js +1 -0
  1932. package/dist/react-sdk/provider-slots/ConfiguratorProviderSlotHost.d.ts +11 -0
  1933. package/dist/react-sdk/provider-slots/ConfiguratorProviderSlotHost.js +1 -0
  1934. package/dist/react-sdk/provider-slots/configurator-provider-slot.d.ts +24 -0
  1935. package/dist/react-sdk/provider-slots/configurator-provider-slot.js +1 -0
  1936. package/dist/react-sdk/provider-slots/create-configurator-provider-slot.d.ts +5 -0
  1937. package/dist/react-sdk/provider-slots/create-configurator-provider-slot.js +1 -0
  1938. package/dist/react-sdk/provider-slots/index.d.ts +3 -0
  1939. package/dist/react-sdk/provider-slots/index.js +1 -0
  1940. package/dist/react-sdk/scene-control-elements/AddEntityFabElement.d.ts +36 -0
  1941. package/dist/react-sdk/scene-control-elements/AddEntityFabElement.js +1 -0
  1942. package/dist/react-sdk/scene-control-elements/DeleteEntityFabElement.d.ts +44 -0
  1943. package/dist/react-sdk/scene-control-elements/DeleteEntityFabElement.js +1 -0
  1944. package/dist/react-sdk/scene-control-elements/NavigationHotspotElement.d.ts +38 -0
  1945. package/dist/react-sdk/scene-control-elements/NavigationHotspotElement.js +1 -0
  1946. package/dist/react-sdk/scene-control-elements/SelectionHotspotElement.d.ts +30 -0
  1947. package/dist/react-sdk/scene-control-elements/SelectionHotspotElement.js +1 -0
  1948. package/dist/react-sdk/scene-control-elements/ToolMenuFabElement.d.ts +30 -0
  1949. package/dist/react-sdk/scene-control-elements/ToolMenuFabElement.js +1 -0
  1950. package/dist/react-sdk/scene-control-elements/create-add-entity-fab.d.ts +9 -0
  1951. package/dist/react-sdk/scene-control-elements/create-add-entity-fab.js +1 -0
  1952. package/dist/react-sdk/scene-control-elements/create-delete-entity-fab.d.ts +9 -0
  1953. package/dist/react-sdk/scene-control-elements/create-delete-entity-fab.js +1 -0
  1954. package/dist/react-sdk/scene-control-elements/create-navigation-hotspot.d.ts +10 -0
  1955. package/dist/react-sdk/scene-control-elements/create-navigation-hotspot.js +1 -0
  1956. package/dist/react-sdk/scene-control-elements/create-selection-hotspot.d.ts +9 -0
  1957. package/dist/react-sdk/scene-control-elements/create-selection-hotspot.js +1 -0
  1958. package/dist/react-sdk/scene-control-elements/create-tool-menu-fab.d.ts +9 -0
  1959. package/dist/react-sdk/scene-control-elements/create-tool-menu-fab.js +1 -0
  1960. package/dist/react-sdk/scene-control-elements/index.d.ts +11 -0
  1961. package/dist/react-sdk/scene-control-elements/index.js +1 -0
  1962. package/dist/react-sdk/scene-control-elements/scene-control-tooltip-visibility.d.ts +5 -0
  1963. package/dist/react-sdk/scene-control-elements/scene-control-tooltip-visibility.js +1 -0
  1964. package/dist/react-sdk/session/NotAuthenticatedPage.d.ts +4 -0
  1965. package/dist/react-sdk/session/NotAuthenticatedPage.js +1 -1
  1966. package/dist/react-sdk/session/SessionServiceProvider.d.ts +5 -0
  1967. package/dist/react-sdk/session/SessionServiceProvider.js +1 -1
  1968. package/dist/react-sdk/web-component/create-web-component.js +1 -1
  1969. package/dist/react-sdk/web-component/god-mode/god-mode-registry.d.ts +30 -0
  1970. package/dist/react-sdk/web-component/god-mode/god-mode-registry.js +1 -0
  1971. package/dist/react-sdk/web-component/god-mode/index.d.ts +1 -0
  1972. package/dist/react-sdk/web-component/god-mode/index.js +1 -0
  1973. package/dist/ui-sdk/components/numerical-input/InputField.d.ts +2 -0
  1974. package/dist/ui-sdk/components/numerical-input/InputField.js +1 -1
  1975. package/dist/ui-sdk/components/numerical-input/NumericalInput.d.ts +2 -2
  1976. package/dist/ui-sdk/components/numerical-input/Slider.d.ts +3 -1
  1977. package/dist/ui-sdk/components/numerical-input/Slider.js +1 -1
  1978. package/dist/ui-sdk/components/snackbar/Snackbar.d.ts +24 -3
  1979. package/dist/ui-sdk/components/snackbar/Snackbar.js +1 -1
  1980. package/dist/ui-sdk/icons/__generated/ChatCircleText.d.ts +3 -0
  1981. package/dist/ui-sdk/icons/__generated/ChatCircleText.js +1 -0
  1982. package/dist/ui-sdk/icons/__generated/Lightbulb.d.ts +3 -0
  1983. package/dist/ui-sdk/icons/__generated/Lightbulb.js +1 -0
  1984. package/dist/ui-sdk/icons/__generated/Microphone.d.ts +3 -0
  1985. package/dist/ui-sdk/icons/__generated/Microphone.js +1 -0
  1986. package/dist/ui-sdk/icons/__generated/MicrophoneSlash.d.ts +3 -0
  1987. package/dist/ui-sdk/icons/__generated/MicrophoneSlash.js +1 -0
  1988. package/dist/ui-sdk/icons/__generated/Paperclip.d.ts +3 -0
  1989. package/dist/ui-sdk/icons/__generated/Paperclip.js +1 -0
  1990. package/dist/ui-sdk/icons/__generated/PencilSimpleLine.d.ts +3 -0
  1991. package/dist/ui-sdk/icons/__generated/PencilSimpleLine.js +1 -0
  1992. package/dist/ui-sdk/icons/__generated/XCircle.d.ts +3 -0
  1993. package/dist/ui-sdk/icons/__generated/XCircle.js +1 -0
  1994. package/dist/ui-sdk/icons/__generated/index.d.ts +14 -0
  1995. package/dist/ui-sdk/icons/__generated/index.js +1 -1
  1996. package/dist/ui-sdk/icons/icons-registry.js +1 -1
  1997. package/dist/ui-sdk/responsive-application/ResponsiveApplicationProvider.d.ts +9 -0
  1998. package/dist/ui-sdk/responsive-application/ResponsiveApplicationProvider.js +1 -1
  1999. package/dist/ui-sdk/responsive-application/index.d.ts +1 -0
  2000. package/dist/ui-sdk/responsive-application/responsive-state-store.d.ts +59 -0
  2001. package/dist/ui-sdk/responsive-application/responsive-state-store.js +1 -0
  2002. package/dist/ui-sdk/responsive-application/use-store-responsive-info.d.ts +7 -0
  2003. package/dist/ui-sdk/responsive-application/use-store-responsive-info.js +1 -0
  2004. package/dist/ui-sdk/theme/types.d.ts +3 -3
  2005. package/dist/watch/glob-matcher.d.ts +4 -4
  2006. package/dist/watch/glob-matcher.js +1 -1
  2007. package/dist/watch/watch.d.ts +4 -4
  2008. package/dist/watch/watch.js +1 -1
  2009. package/dist/webhook/builders/common.d.ts +2 -2
  2010. package/package.json +61 -37
  2011. package/schema/domain-spec.json +310 -8
  2012. package/dist/application-spec/caching/runtime-reference-store.d.ts +0 -50
  2013. package/dist/application-spec/caching/runtime-reference-store.js +0 -1
  2014. package/dist/application-spec/core/components/component-filter.d.ts +0 -53
  2015. package/dist/application-spec/core/components/index.d.ts +0 -2
  2016. package/dist/application-spec/core/expressions/index.d.ts +0 -2
  2017. package/dist/application-spec/core/expressions/relation-expression-params.d.ts +0 -11
  2018. package/dist/application-spec/generate-application/code/templates/nvmrc.d.ts +0 -1
  2019. package/dist/application-spec/generate-application/code/templates/nvmrc.js +0 -2
  2020. package/dist/application-spec/generate-application/code/templates/package-json.d.ts +0 -10
  2021. package/dist/application-spec/generate-application/code/templates/package-json.js +0 -1
  2022. package/dist/application-spec/generate-application/code/templates/skills/phoenix-cli-skill.d.ts +0 -1
  2023. package/dist/application-spec/generate-application/code/templates/skills/phoenix-cli-skill.js +0 -1
  2024. package/dist/application-spec/generate-application/code/templates/skills/phoenix-create-configurator-skill.d.ts +0 -3
  2025. package/dist/application-spec/generate-application/code/templates/skills/phoenix-create-configurator-skill.js +0 -166
  2026. package/dist/application-spec/generate-application/code/templates/skills/phoenix-feedback-skill.d.ts +0 -1
  2027. package/dist/application-spec/generate-application/code/templates/skills/phoenix-feedback-skill.js +0 -54
  2028. package/dist/application-spec/generate-application/code/templates/skills/phoenix-review-skill.d.ts +0 -1
  2029. package/dist/application-spec/generate-application/code/templates/skills/phoenix-review-skill.js +0 -115
  2030. package/dist/application-spec/generate-application/code/templates/skills/phoenix-skill.d.ts +0 -13
  2031. package/dist/application-spec/generate-application/code/templates/skills/phoenix-skill.js +0 -1
  2032. package/dist/application-spec/generate-application/code/templates/skills/phoenix-variants-skill.d.ts +0 -1
  2033. package/dist/application-spec/generate-application/code/templates/skills/phoenix-variants-skill.js +0 -6
  2034. package/dist/application-spec/generate-application/runtime/admin-runtime/admin-model-runtime.d.ts +0 -28
  2035. package/dist/application-spec/generate-application/runtime/admin-runtime/admin-model-runtime.js +0 -1
  2036. package/dist/application-spec/generate-application/runtime/admin-runtime/admin-runtime.d.ts +0 -23
  2037. package/dist/application-spec/generate-application/runtime/admin-runtime/admin-runtime.js +0 -1
  2038. package/dist/application-spec/generate-application/runtime/admin-runtime/states-runtime.d.ts +0 -8
  2039. package/dist/application-spec/generate-application/runtime/application-runtime.d.ts +0 -33
  2040. package/dist/application-spec/generate-application/runtime/application-runtime.js +0 -1
  2041. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-model-runtime.d.ts +0 -30
  2042. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-model-runtime.js +0 -1
  2043. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-runtime.d.ts +0 -32
  2044. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-runtime.js +0 -1
  2045. package/dist/application-spec/generate-application/runtime/configurator-runtime/states-runtime.d.ts +0 -11
  2046. package/dist/application-spec/generate-application/runtime/generate-runtime-instance.d.ts +0 -2
  2047. package/dist/application-spec/generate-application/runtime/generate-runtime-instance.js +0 -1
  2048. package/dist/application-spec/generate-application/runtime/sections/actions-runtime.d.ts +0 -14
  2049. package/dist/application-spec/generate-application/runtime/sections/assistant-runtime.d.ts +0 -10
  2050. package/dist/application-spec/generate-application/runtime/sections/build-sdk-optic.d.ts +0 -7
  2051. package/dist/application-spec/generate-application/runtime/sections/build-sdk-optic.js +0 -1
  2052. package/dist/application-spec/generate-application/runtime/sections/build-user-bound-optic.d.ts +0 -7
  2053. package/dist/application-spec/generate-application/runtime/sections/build-user-bound-optic.js +0 -1
  2054. package/dist/application-spec/generate-application/runtime/sections/component-optic.d.ts +0 -33
  2055. package/dist/application-spec/generate-application/runtime/sections/component-optic.js +0 -1
  2056. package/dist/application-spec/generate-application/runtime/sections/data-runtime.d.ts +0 -13
  2057. package/dist/application-spec/generate-application/runtime/sections/expression-runtime.d.ts +0 -46
  2058. package/dist/application-spec/generate-application/runtime/sections/expression-runtime.js +0 -1
  2059. package/dist/application-spec/generate-application/runtime/sections/generate-memo-eval-plan-runtime.d.ts +0 -29
  2060. package/dist/application-spec/generate-application/runtime/sections/generate-memo-eval-plan-runtime.js +0 -1
  2061. package/dist/application-spec/generate-application/runtime/sections/index.d.ts +0 -10
  2062. package/dist/application-spec/generate-application/runtime/sections/index.js +0 -1
  2063. package/dist/application-spec/generate-application/runtime/sections/preset-runtime.d.ts +0 -20
  2064. package/dist/application-spec/generate-application/runtime/sections/reflection-constants-runtime.d.ts +0 -8
  2065. package/dist/application-spec/generate-application/runtime/sections/reflection-constants-runtime.js +0 -1
  2066. package/dist/application-spec/generate-application/runtime/sections/theme-runtime.d.ts +0 -10
  2067. package/dist/application-spec/generate-application/runtime/sections/transformers-runtime.d.ts +0 -19
  2068. package/dist/application-spec/parse-application-files/spec/components/component-entry.d.ts +0 -90
  2069. package/dist/application-spec/parse-application-files/spec/expressions/expression.d.ts +0 -43
  2070. package/dist/configurator/application-runtime/extensions/systems/assistant-system/browser-details.d.ts +0 -17
  2071. package/dist/configurator/application-runtime/extensions/systems/assistant-system/browser-details.js +0 -1
  2072. package/dist/configurator/common/frontend-analytics.d.ts +0 -48
  2073. package/dist/configurator/common/use-finalize-action.d.ts +0 -27
  2074. package/dist/configurator/common/use-finalize-action.js +0 -1
  2075. package/dist/configurator/configurator-context/ConfiguratorDataProvider.d.ts +0 -2
  2076. package/dist/configurator/configurator-context/ConfiguratorDataProvider.js +0 -1
  2077. package/dist/configurator/configurator-context/IntegrationSubscription.js +0 -1
  2078. package/dist/configurator/configurator-context/LifecycleProviders.js +0 -1
  2079. package/dist/configurator/configurator-context/OnPresetLoadedHandler.js +0 -1
  2080. package/dist/configurator/configurator-context/PresetSelectionProvider.js +0 -1
  2081. package/dist/configurator/configurator-context/configurator-hooks/chat-hooks.d.ts +0 -1
  2082. package/dist/configurator/configurator-context/configurator-hooks/chat-hooks.js +0 -1
  2083. package/dist/configurator/configurator-context/configurator-routing/ConfiguratorRoutingProvider.d.ts +0 -11
  2084. package/dist/configurator/configurator-context/configurator-routing/ConfiguratorRoutingProvider.js +0 -1
  2085. package/dist/configurator/configurator-context/configurator-routing/OnGoToIndexHandler.d.ts +0 -10
  2086. package/dist/configurator/configurator-context/configurator-routing/OnGoToIndexHandler.js +0 -1
  2087. package/dist/configurator/configurator-context/configurator-routing/index.d.ts +0 -2
  2088. package/dist/configurator/configurator-context/configurator-routing/index.js +0 -1
  2089. package/dist/configurator/configurator-context/configurator-routing/use-power-routing-lifecycle.d.ts +0 -9
  2090. package/dist/configurator/configurator-context/configurator-routing/use-power-routing-lifecycle.js +0 -1
  2091. package/dist/configurator/ui/assistant/entity-link/entity-link-target.d.ts +0 -5
  2092. package/dist/configurator/ui/assistant/entity-link/entity-link-target.js +0 -1
  2093. package/dist/configurator/ui/assistant/theme.d.ts +0 -2
  2094. package/dist/configurator/ui/assistant/theme.js +0 -1
  2095. package/dist/configurator/ui/phoenix-layout-elements/language/use-locale-options.d.ts +0 -4
  2096. package/dist/configurator/ui/phoenix-layout-elements/language/use-locale-options.js +0 -1
  2097. package/dist/configurator/ui/phoenix-layout-elements/measurements/use-measurements-visibility.d.ts +0 -4
  2098. package/dist/configurator/ui/phoenix-layout-elements/measurements/use-measurements-visibility.js +0 -1
  2099. package/dist/domain/application/assistant/assistant-manifest.d.ts +0 -71
  2100. package/dist/domain/application/assistant/assistant-resolved-manifest.d.ts +0 -131
  2101. package/dist/domain/available-system-components.d.ts +0 -11
  2102. package/dist/domain/available-system-components.js +0 -1
  2103. package/dist/domain/core/action/action-factory.d.ts +0 -11
  2104. package/dist/domain/domain-builder.d.ts +0 -40
  2105. package/dist/domain/domain-builder.js +0 -1
  2106. package/dist/domain/domain-runtime/errors/implementation-error-collector.d.ts +0 -19
  2107. package/dist/domain/domain-runtime/errors/implementation-error-collector.js +0 -1
  2108. package/dist/domain/domain-runtime/spec/module-checks/element-registration.d.ts +0 -110
  2109. package/dist/domain/domain-runtime/spec/module-checks/element-registration.js +0 -1
  2110. package/dist/domain/domain-runtime/spec/module-checks/index.d.ts +0 -8
  2111. package/dist/domain/domain-runtime/spec/module-checks/index.js +0 -1
  2112. package/dist/domain/domain-runtime/spec/module-checks/project-modules.d.ts +0 -32
  2113. package/dist/domain/domain-runtime/spec/module-checks/project-modules.js +0 -1
  2114. package/dist/domain/domain-runtime/spec/module-checks/resolve-action-modules.d.ts +0 -4
  2115. package/dist/domain/domain-runtime/spec/module-checks/resolve-component-optic-modules.d.ts +0 -4
  2116. package/dist/domain/domain-runtime/spec/module-checks/resolve-expression-modules.d.ts +0 -15
  2117. package/dist/domain/domain-runtime/spec/module-checks/resolve-expression-modules.js +0 -1
  2118. package/dist/domain/domain-runtime/spec/module-checks/resolve-imported-transformers.d.ts +0 -22
  2119. package/dist/domain/domain-runtime/spec/module-checks/resolve-imported-transformers.js +0 -1
  2120. package/dist/domain/domain-runtime/spec/module-checks/resolve-invariant-modules.d.ts +0 -6
  2121. package/dist/domain/extensions/client-side-image.d.ts +0 -14
  2122. package/dist/domain/extensions/client-side-image.js +0 -1
  2123. package/dist/domain/extensions/save-template-thumbnail.d.ts +0 -14
  2124. package/dist/domain/extensions/save-template-thumbnail.js +0 -1
  2125. package/dist/phoenix/commands/generate-project-files.d.ts +0 -6
  2126. package/dist/phoenix/commands/generate-project-files.js +0 -1
  2127. package/dist/phoenix/commands/generated-env-markers.d.ts +0 -7
  2128. package/dist/phoenix/commands/generated-env-markers.js +0 -1
  2129. package/dist/phoenix/services/lingui.d.ts +0 -7
  2130. package/dist/phoenix/services/lingui.js +0 -1
  2131. package/dist/phoenix/services/phoenix-application.d.ts +0 -21
  2132. package/dist/phoenix/services/phoenix-application.js +0 -1
  2133. package/dist/react-sdk/application-runtime/runtime/god-mode.d.ts +0 -19
  2134. package/dist/react-sdk/application-runtime/runtime/god-mode.js +0 -1
  2135. package/dist/react-sdk/loading-state/LoadingStateProvider.d.ts +0 -31
  2136. package/dist/react-sdk/loading-state/LoadingStateProvider.js +0 -1
  2137. package/dist/react-sdk/loading-state/loading-state-manager.d.ts +0 -32
  2138. package/dist/react-sdk/loading-state/loading-state-manager.js +0 -1
  2139. /package/dist/application-spec/{core/expressions/relation-expression-params.js → parse-application-files/spec/expressions/expression-read.js} +0 -0
  2140. /package/dist/{application-spec/parse-application-files/spec/components/component-entry.js → configurator/application-runtime/extensions/systems/assistant-system/assistant-annotation.js} +0 -0
  2141. /package/dist/{application-spec/parse-application-files/spec/expressions/expression.js → configurator/application-runtime/extensions/systems/assistant-system/assistant-image-view.js} +0 -0
  2142. /package/dist/{domain/application/assistant/assistant-manifest.js → configurator/ui/assistant/form-elements/form-element-props.js} +0 -0
  2143. /package/dist/domain/{core/action → domain-runtime}/action-factory.js +0 -0
  2144. /package/dist/{application-spec/core → domain/spec/application}/application-instance.d.ts +0 -0
  2145. /package/dist/{application-spec/core → domain/spec/application}/application-instance.js +0 -0
  2146. /package/dist/{application-spec/core → domain/spec}/components/component-filter.js +0 -0
  2147. /package/dist/{application-spec/core → domain/spec}/components/index.js +0 -0
  2148. /package/dist/{application-spec/core → domain/spec}/components/sdk-code-ref.d.ts +0 -0
  2149. /package/dist/{application-spec/core → domain/spec}/components/sdk-code-ref.js +0 -0
  2150. /package/dist/domain/{domain-runtime → spec}/errors/implementation-error.d.ts +0 -0
  2151. /package/dist/domain/{domain-runtime → spec}/errors/implementation-error.js +0 -0
  2152. /package/dist/domain/{domain-runtime → spec}/errors/implementation-errors.d.ts +0 -0
  2153. /package/dist/domain/{domain-runtime → spec}/errors/implementation-errors.js +0 -0
  2154. /package/dist/domain/{domain-runtime → spec}/errors/index.d.ts +0 -0
  2155. /package/dist/domain/{domain-runtime → spec}/errors/index.js +0 -0
  2156. /package/dist/domain/{domain-runtime → spec}/errors/to-implementation-errors.d.ts +0 -0
  2157. /package/dist/domain/{domain-runtime → spec}/errors/to-implementation-errors.js +0 -0
  2158. /package/dist/{application-spec/core → domain/spec}/expressions/index.js +0 -0
  2159. /package/dist/{application-spec/core → domain/spec}/expressions/sdk-expression-implementation.d.ts +0 -0
  2160. /package/dist/{application-spec/core → domain/spec}/expressions/sdk-expression-implementation.js +0 -0
  2161. /package/dist/{application-spec/parse-application-files/spec/components → domain/spec/markers}/component-prop-target.d.ts +0 -0
  2162. /package/dist/{application-spec/parse-application-files/spec/components → domain/spec/markers}/component-prop-target.js +0 -0
  2163. /package/dist/{application-spec/core → domain/spec}/markers/eval-marker.d.ts +0 -0
  2164. /package/dist/{application-spec/core → domain/spec}/markers/eval-marker.js +0 -0
  2165. /package/dist/domain/{domain-runtime/spec/module-checks → spec/modules}/handler-registration.d.ts +0 -0
  2166. /package/dist/domain/{domain-runtime/spec/module-checks → spec/modules}/handler-registration.js +0 -0
  2167. /package/dist/domain/{domain-runtime/spec/module-checks → spec/modules}/resolve-action-modules.js +0 -0
  2168. /package/dist/domain/{domain-runtime/spec/module-checks → spec/modules}/resolve-component-optic-modules.js +0 -0
  2169. /package/dist/domain/{domain-runtime/spec/module-checks → spec/modules}/resolve-invariant-modules.js +0 -0
  2170. /package/dist/{application-spec/generate-application → domain/spec}/runtime/admin-runtime/states-runtime.js +0 -0
  2171. /package/dist/{application-spec/generate-application → domain/spec}/runtime/configurator-runtime/states-runtime.js +0 -0
  2172. /package/dist/{application-spec/generate-application → domain/spec}/runtime/sections/actions-runtime.js +0 -0
  2173. /package/dist/{application-spec/generate-application → domain/spec}/runtime/sections/assistant-runtime.js +0 -0
  2174. /package/dist/{application-spec/generate-application → domain/spec}/runtime/sections/data-runtime.js +0 -0
  2175. /package/dist/{application-spec/generate-application → domain/spec}/runtime/sections/preset-runtime.js +0 -0
  2176. /package/dist/{application-spec/generate-application → domain/spec}/runtime/sections/theme-runtime.js +0 -0
  2177. /package/dist/{application-spec/generate-application → domain/spec}/runtime/sections/transformers-runtime.js +0 -0
  2178. /package/dist/domain/{application/assistant/assistant-resolved-manifest.js → spec/sections/assistant/assistant-manifest.js} +0 -0
  2179. /package/dist/{configurator/common → react-sdk/application-runtime/common-services/analytics}/frontend-analytics.js +0 -0
  2180. /package/dist/{configurator/configurator-context → react-sdk/domain-application-context}/OnPresetLoadedHandler.d.ts +0 -0
  2181. /package/dist/{configurator/configurator-context → react-sdk/integration}/IntegrationSubscription.d.ts +0 -0
  2182. /package/dist/{configurator/configurator-context → react-sdk/lifecycle-providers}/LifecycleProviders.d.ts +0 -0
  2183. /package/dist/{configurator/configurator-context → react-sdk/preset-selection}/PresetSelectionProvider.d.ts +0 -0
@@ -1,6 +1,6 @@
1
1
  # Custom Layout
2
2
 
3
- Make the configurator look like the brand's own product page. A furniture shop wants its table configurator to read like the rest of its site: a floating panel on the left with the product's name, the edge finishes as picture cards, the price in large type and one clear call to action, and the table in the space beside it. The project writes that page as one React component. Phoenix supplies the 3D scene, the product's state and a few hooks; every pixel around the scene is the project's own.
3
+ Make the configurator look like the brand's own product page. A furniture shop wants its table configurator to read like the rest of its site: a floating panel on the left with the product's name, the edge finishes as picture cards, the price in large type and one clear call to action, and the table in the space beside it. On a phone the panel becomes a sheet at the bottom, and a button on the table's edge offers the finishes right where they apply, and the layout's own buttons switch between the whole table and a close-up of its edge. The project writes that page as one React component. Phoenix supplies the 3D scene, the product's state and a few hooks; every pixel around the scene is the project's own.
4
4
 
5
5
  - [Choose this approach](#choose-this-approach)
6
6
  - [Register the layout](#register-the-layout)
@@ -8,9 +8,13 @@ Make the configurator look like the brand's own product page. A furniture shop w
8
8
  - [Read and change the product](#read-and-change-the-product)
9
9
  - [Draw the choices](#draw-the-choices)
10
10
  - [Offer fullscreen](#offer-fullscreen)
11
+ - [Undo and redo](#undo-and-redo)
11
12
  - [Show messages](#show-messages)
12
13
  - [Request a quote](#request-a-quote)
13
14
  - [Serve read mode](#serve-read-mode)
15
+ - [Fit a phone](#fit-a-phone)
16
+ - [Put a control on the product](#put-a-control-on-the-product)
17
+ - [Control the scene](#control-the-scene)
14
18
  - [The spec the layout reads](#the-spec-the-layout-reads)
15
19
  - [Try the example](#try-the-example)
16
20
  - [Test cases](#test-cases)
@@ -24,7 +28,7 @@ Write your own layout when the configurator has to follow a design the built-in
24
28
 
25
29
  Stay with the built-in layout when its structure fits and only its parts change. [Universal](?path=/docs/layouts-universal--docs) demonstrates that layout, and the pages of its parts describe what the spec configures: [Header](?path=/docs/layouts-header-floating--docs), [Sidebar](?path=/docs/layouts-sidebar-general--docs), [Sidebar Footer](?path=/docs/layouts-sidebar-footer-basic--docs), [Toolbar](?path=/docs/layouts-toolbar--docs) and [View Controls](?path=/docs/layouts-view-controls--docs).
26
30
 
27
- A project layout replaces all of that. None of the built-in sidebar, footer, toolbar or property pages is rendered for it, so the layout builds every control the user needs. This example uses no SDK component that draws UI: only the scene, the safe-area hook and hooks that read and change the product's state. A layout may also mount the SDK's own pieces where it wants them, see [Configurator Interface → Loaded Configuration UI](?path=/docs/phoenix-configurator-interface--docs#loaded-configuration-ui).
31
+ A project layout replaces all of that. None of the built-in sidebar, footer, toolbar or property pages is rendered for it, so the layout builds every control the user needs. This example uses no SDK component that draws UI: only the scene and the `phx.frontend` hooks that measure the free area, read and change the product's state and record analytics. A layout may also mount the SDK's own pieces where it wants them, see [Configurator Interface → Loaded Configuration UI](?path=/docs/phoenix-configurator-interface--docs#loaded-configuration-ui).
28
32
 
29
33
  ## Register the layout
30
34
 
@@ -32,26 +36,43 @@ Create `src/elements/ConfiguratorLayout.tsx` with a default export made by `phx.
32
36
 
33
37
  ```tsx
34
38
  import { Box } from '@mui/material'
39
+ import { useState } from 'react'
35
40
 
36
- import { LayoutSlots, useSceneSafeArea } from '@salsita-ai/sdk/configurator'
41
+ import { LayoutSlots } from '@salsita-ai/sdk/configurator'
37
42
 
38
- import { phx } from '../../.phoenix/phx.js'
43
+ import { BottomSheet } from '../_shared/BottomSheet.js'
39
44
  import { FullscreenToggle } from '../_shared/FullscreenToggle.js'
40
45
  import { MessageToast } from '../_shared/MessageToast.js'
41
46
  import { ProductPanel } from '../_shared/ProductPanel.js'
47
+ import { SceneControls } from '../_shared/SceneControls.js'
48
+ import { UndoRedo } from '../_shared/UndoRedo.js'
42
49
 
43
50
  const GUTTER = 24
44
51
  const PANEL_WIDTH = 380
52
+ const PHONE_GUTTER = 16
53
+ const TOUCH_TARGET = 44
45
54
 
46
55
  const ConfiguratorLayout = () => {
47
- const { containerRef, safeAreaRef } = useSceneSafeArea()
56
+ const { containerRef, safeAreaRef } = phx.frontend.useSceneSafeArea()
48
57
  const isFullscreen = phx.frontend.useIsFullscreenActive()
58
+ // `null` until the container has been measured; the layout shows only the scene until then
59
+ const viewports = phx.frontend.useActiveViewports()
60
+ const [isSheetOpen, setSheetOpen] = useState(false)
61
+
62
+ const isDesktop = viewports?.includes('desktop') ?? false
63
+ const gutter = isDesktop ? GUTTER : PHONE_GUTTER
49
64
 
50
65
  return (
51
- <Box component="div" ref={containerRef} sx={{ position: 'absolute', inset: 0 }}>
66
+ <Box
67
+ component="div"
68
+ ref={containerRef}
69
+ // `clip`, not `hidden`: what overflows, such as the sheet's fill below its edge, can never be scrolled into view,
70
+ // not even by the browser when the focus moves
71
+ sx={{ position: 'absolute', inset: 0, display: 'flex', flexDirection: 'column', overflow: 'clip' }}
72
+ >
52
73
  <LayoutSlots.SharedCanvas />
53
74
 
54
- {!isFullscreen && (
75
+ {viewports !== null && isDesktop && !isFullscreen && (
55
76
  <Box
56
77
  component="aside"
57
78
  sx={{
@@ -65,37 +86,80 @@ const ConfiguratorLayout = () => {
65
86
  borderRadius: 5,
66
87
  bgcolor: 'background.paper',
67
88
  boxShadow: '0 12px 40px rgba(0, 0, 0, 0.12)',
68
- overflow: 'hidden',
89
+ // A very short container, such as a phone held sideways, scrolls the panel instead of clipping its footer
90
+ overflowX: 'hidden',
91
+ overflowY: 'auto',
92
+ overscrollBehavior: 'contain',
69
93
  }}
70
94
  >
71
95
  <ProductPanel />
72
96
  </Box>
73
97
  )}
74
98
 
75
- <Box
76
- component="div"
77
- ref={safeAreaRef}
78
- sx={{
79
- position: 'absolute',
80
- insetBlock: 0,
81
- insetInlineStart: isFullscreen ? 0 : PANEL_WIDTH + 2 * GUTTER,
82
- insetInlineEnd: 0,
83
- pointerEvents: 'none',
84
- }}
85
- >
86
- <Box
87
- component="div"
88
- sx={{ position: 'absolute', insetBlockStart: GUTTER, insetInlineEnd: GUTTER, pointerEvents: 'auto' }}
89
- >
90
- <FullscreenToggle />
91
- </Box>
99
+ {viewports !== null && (
92
100
  <Box
93
101
  component="div"
94
- sx={{ position: 'absolute', insetBlockEnd: GUTTER, insetInlineStart: GUTTER, pointerEvents: 'auto' }}
102
+ ref={safeAreaRef}
103
+ sx={{
104
+ // Desktop: right of the panel. Phone: above the sheet, whose height the column gives the rest.
105
+ ...(isDesktop
106
+ ? {
107
+ position: 'absolute',
108
+ insetBlock: 0,
109
+ insetInlineStart: isFullscreen ? 0 : PANEL_WIDTH + 2 * GUTTER,
110
+ insetInlineEnd: 0,
111
+ }
112
+ : { position: 'relative', flex: '1 1 0', minBlockSize: 0 }),
113
+ pointerEvents: 'none',
114
+ }}
95
115
  >
96
- <MessageToast />
116
+ <Box
117
+ component="div"
118
+ sx={{
119
+ position: 'absolute',
120
+ insetBlockStart: gutter,
121
+ insetInlineEnd: gutter,
122
+ display: 'flex',
123
+ gap: 1,
124
+ pointerEvents: 'auto',
125
+ }}
126
+ >
127
+ {!isFullscreen && <UndoRedo />}
128
+ <FullscreenToggle compact={!isDesktop} />
129
+ </Box>
130
+ <Box
131
+ component="div"
132
+ sx={{
133
+ position: 'absolute',
134
+ pointerEvents: 'auto',
135
+ // Desktop: bottom left, above the row of view controls. Phone: at the top below the row of undo, redo and
136
+ // fullscreen, clear of the sheet's handle and the view controls.
137
+ ...(isDesktop
138
+ ? { insetBlockEnd: 2 * GUTTER + TOUCH_TARGET, insetInlineStart: GUTTER }
139
+ : { insetBlockStart: gutter + TOUCH_TARGET + gutter / 2, insetInline: gutter }),
140
+ }}
141
+ >
142
+ <MessageToast />
143
+ </Box>
144
+ {/* A phone in fullscreen keeps only the reset, as the built-in layout does. Below 1024 pixels (`tablet`) the
145
+ free area beside the panel is narrow, so the reset shows only its icon there too. */}
146
+ <Box
147
+ component="div"
148
+ sx={{ position: 'absolute', insetBlockEnd: gutter, insetInlineEnd: gutter, pointerEvents: 'auto' }}
149
+ >
150
+ <SceneControls
151
+ compact={!isDesktop || (viewports?.includes('tablet') ?? false)}
152
+ resetOnly={!isDesktop && isFullscreen}
153
+ />
154
+ </Box>
97
155
  </Box>
98
- </Box>
156
+ )}
157
+
158
+ {viewports !== null && !isDesktop && !isFullscreen && (
159
+ <BottomSheet open={isSheetOpen} onOpenChange={setSheetOpen} label="Product details">
160
+ <ProductPanel collapsed={!isSheetOpen} inSheet />
161
+ </BottomSheet>
162
+ )}
99
163
  </Box>
100
164
  )
101
165
  }
@@ -103,17 +167,18 @@ const ConfiguratorLayout = () => {
103
167
  export default phx.frontend.createCustomPhoenixLayoutElement('ConfiguratorLayout', ConfiguratorLayout)
104
168
  ```
105
169
 
106
- The components it uses live in `src/_shared/`, which Phoenix does not import by convention, so the layout imports them itself. Application projects receive `phx` as a global. Storybook examples cannot rely on that project environment, so these files import it from `../../.phoenix/phx.js`; leave that import out in a project.
170
+ The components it uses live in `src/_shared/`, which Phoenix does not import by convention, so the layout imports them itself. Application projects receive `phx` as a global. Storybook examples cannot rely on that project environment, so the example's files import it from `../../.phoenix/phx.js`; leave that import out in a project.
107
171
 
108
172
  ## What the layout has to do
109
173
 
110
174
  - **Position the root and cover the page.** `LayoutSlots.SharedCanvas` is absolutely positioned and fills its nearest positioned ancestor. The root here is `position: absolute; inset: 0`.
111
- - **Mount the shared canvas.** The app loader stays on screen until the scene has loaded. A layout without `LayoutSlots.SharedCanvas` never gets past the loader unless the project sets `appLoader: legacy`.
175
+ - **Mount the shared canvas.** It renders the scene, and the app loader stays on screen until the scene has loaded. A layout without a canvas is not held by the loader: it leaves once the configuration is up.
112
176
  - **Put the UI above the canvas.** The canvas is opaque. Content that is positioned and comes after it in the markup is painted above it; unpositioned content is painted under it and cannot be seen.
113
- - **Tell the camera where the free area is.** `useSceneSafeArea()` returns two refs. `containerRef` goes on the element that covers the whole canvas, `safeAreaRef` on the region the product should stay visible in, here everything right of the panel. The camera then frames the product in that region. The hook measures again whenever either of the two elements resizes; for a change no resize reports, such as a `transform` on an ancestor settling at the end of an animation, it also returns `update` to call. Without the two refs the product is centred in the whole canvas and sits against the panel.
177
+ - **Tell the camera where the free area is.** `phx.frontend.useSceneSafeArea()` returns two refs. `containerRef` goes on the element that covers the whole canvas, `safeAreaRef` on the region the product should stay visible in, here everything right of the panel, or above the sheet on a phone. The camera then frames the product in that region. The hook measures again whenever either of the two elements resizes; for a change no resize reports, such as a `transform` on an ancestor settling at the end of an animation, it also returns `update` to call. Without the two refs the product is centred in the whole canvas and sits against the panel.
114
178
  - **Let the pointer through.** The safe-area element lies over the canvas, so it sets `pointerEvents: 'none'`; otherwise the scene cannot be orbited. The fullscreen button inside it switches pointer events back on.
115
- - **Honour fullscreen.** Fullscreen is a flag in the product's state, not a browser feature. The layout reads it with `phx.frontend.useIsFullscreenActive()`, removes the panel and lets the safe area start at the left edge, so the camera frames the product in the whole canvas.
116
- - **Serve read mode.** The same element renders a configuration shared for viewing, and the layout decides what a viewer sees.
179
+ - **Honour fullscreen.** Fullscreen is a flag in the product's state, not a browser feature. The layout reads it with `phx.frontend.useIsFullscreenActive()`, removes the panel or the sheet and lets the safe area cover the canvas, so the camera frames the product in the whole canvas.
180
+ - **Fit the width it is given.** The configurator can be embedded in a narrow column or opened on a phone. The layout reads the container's width class with `phx.frontend.useActiveViewports()` and renders a desktop or a phone arrangement, see [Fit a phone](#fit-a-phone).
181
+ - **Serve read mode.** The same element renders a configuration shared for viewing, or one the host page opens read-only, and the layout decides what a viewer sees; see [Serve read mode](#serve-read-mode).
117
182
 
118
183
  ## Read and change the product
119
184
 
@@ -122,17 +187,22 @@ The panel reads everything it shows from hooks and writes the customer's choice
122
187
  ```tsx
123
188
  import { Box, Button, Typography } from '@mui/material'
124
189
 
125
- import { detailComponent, finalizeActionComponent } from '@salsita-ai/sdk/domain'
126
- import { PhoenixHandlerBoundary, useResolveLocalizable } from '@salsita-ai/sdk/react'
190
+ import { detailComponent } from '@salsita-ai/sdk/domain'
127
191
 
128
- import { phx } from '../../.phoenix/phx.js'
129
192
  import { EdgeFinishCards } from './EdgeFinishCards.js'
130
193
  import { ReviewActions } from './ReviewActions.js'
131
194
 
132
195
  const BUTTON_SX = { minBlockSize: 48, borderRadius: 999, textTransform: 'none', fontWeight: 600 } as const
133
196
 
134
- export const ProductPanel = () => {
135
- const resolve = useResolveLocalizable()
197
+ interface ProductPanelProps {
198
+ // Only the name, the price and the action, for a collapsed bottom sheet
199
+ readonly collapsed?: boolean
200
+ // In a bottom sheet the cards region keeps the top of the cards in view, and the sheet scrolls when that does not fit
201
+ readonly inSheet?: boolean
202
+ }
203
+
204
+ export const ProductPanel = ({ collapsed = false, inSheet = false }: ProductPanelProps) => {
205
+ const resolve = phx.frontend.useResolveLocalizable()
136
206
  const detail = phx.frontend.useFirstRootComponent(detailComponent)
137
207
  const price = phx.frontend.useRootEntityPrice()
138
208
  const tableId = phx.frontend.useRootEntityId()
@@ -142,12 +212,9 @@ export const ProductPanel = () => {
142
212
  const pushNavigate = phx.frontend.usePushNavigate()
143
213
  const popNavigate = phx.frontend.usePopNavigate()
144
214
  const navigate = phx.frontend.useNavigate()
145
- const finalizeActions = phx.frontend.useComponents({ componentTypes: [finalizeActionComponent] }) ?? []
146
215
 
147
216
  const isReadMode = accessInfo.viewMode
148
217
  const isReview = isReadMode || navigationState !== 'configure'
149
- // The spec's primary finalize action, or its first one
150
- const quoteAction = finalizeActions.find(action => action.state.variant === 'primary') ?? finalizeActions[0]
151
218
  const chosenEdge = edgeFinish.options.find(option => option.value === edgeFinish.value)
152
219
 
153
220
  return (
@@ -168,29 +235,44 @@ export const ProductPanel = () => {
168
235
  <Typography variant="h5" component="h2" fontWeight={700}>
169
236
  {resolve(detail?.state.title)}
170
237
  </Typography>
171
- <Typography variant="body2" color="text.secondary">
172
- {resolve(detail?.state.description)}
173
- </Typography>
174
- </Box>
175
-
176
- <Box component="div" sx={{ display: 'grid', gap: 1.5, paddingInline: 3, paddingBlockEnd: 3, overflowY: 'auto' }}>
177
- <Typography variant="subtitle2" component="h3">
178
- Edge finish
179
- </Typography>
180
- {isReview ? (
181
- <Box component="div" sx={{ padding: 2, borderRadius: 3, bgcolor: 'action.hover' }}>
182
- <Typography variant="body2" fontWeight={600}>
183
- {resolve(chosenEdge?.title)}
184
- </Typography>
185
- <Typography variant="caption" color="text.secondary">
186
- {resolve(chosenEdge?.description)}
187
- </Typography>
188
- </Box>
189
- ) : (
190
- <EdgeFinishCards selection={edgeFinish} />
238
+ {!collapsed && (
239
+ <Typography variant="body2" color="text.secondary">
240
+ {resolve(detail?.state.description)}
241
+ </Typography>
191
242
  )}
192
243
  </Box>
193
244
 
245
+ {!collapsed && (
246
+ <Box
247
+ component="div"
248
+ sx={{
249
+ display: 'grid',
250
+ gap: 1.5,
251
+ paddingInline: 3,
252
+ paddingBlockEnd: 3,
253
+ // In a short container the region shrinks and scrolls; a scroll past its end moves its container on
254
+ minBlockSize: inSheet ? 120 : 0,
255
+ overflowY: 'auto',
256
+ }}
257
+ >
258
+ <Typography variant="subtitle2" component="h3">
259
+ Edge finish
260
+ </Typography>
261
+ {isReview ? (
262
+ <Box component="div" sx={{ padding: 2, borderRadius: 3, bgcolor: 'action.hover' }}>
263
+ <Typography variant="body2" fontWeight={600}>
264
+ {resolve(chosenEdge?.title)}
265
+ </Typography>
266
+ <Typography variant="caption" color="text.secondary">
267
+ {resolve(chosenEdge?.description)}
268
+ </Typography>
269
+ </Box>
270
+ ) : (
271
+ <EdgeFinishCards selection={edgeFinish} />
272
+ )}
273
+ </Box>
274
+ )}
275
+
194
276
  <Box component="footer" sx={{ display: 'grid', gap: 2, padding: 3, borderTop: 1, borderColor: 'divider' }}>
195
277
  <Box component="div" sx={{ display: 'flex', alignItems: 'baseline', justifyContent: 'space-between' }}>
196
278
  <Typography variant="body2" color="text.secondary">
@@ -210,19 +292,7 @@ export const ProductPanel = () => {
210
292
  <Typography variant="body2" color="text.secondary">
211
293
  Your table is ready for a quote. A real shop collects the contact details here.
212
294
  </Typography>
213
- {quoteAction ? (
214
- <PhoenixHandlerBoundary name={quoteAction.state.handler}>
215
- <ReviewActions
216
- handler={quoteAction.state.handler}
217
- label={resolve(quoteAction.state.label)}
218
- onBack={popNavigate}
219
- />
220
- </PhoenixHandlerBoundary>
221
- ) : (
222
- <Button size="large" variant="outlined" onClick={popNavigate} sx={BUTTON_SX}>
223
- Back to the configuration
224
- </Button>
225
- )}
295
+ <ReviewActions onBack={popNavigate} />
226
296
  </>
227
297
  )}
228
298
  {!isReadMode && navigationState === 'requested' && (
@@ -241,22 +311,26 @@ export const ProductPanel = () => {
241
311
  }
242
312
  ```
243
313
 
244
- | Hook | What the layout uses it for |
245
- | ---------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
246
- | `phx.frontend.useFirstRootComponent(detailComponent)` | The `detail` component of the root entity: name, subtitle and description. `detailComponent` comes from `@salsita-ai/sdk/domain`; the hook returns `null` without one. |
247
- | `phx.frontend.useRootEntityId()` | The id of the table, which the control hooks take. |
248
- | `phx.frontend.useAttributeSelection(entityId, instanceName)` | The `attributeSelection` component named `edgeFinish`: the current `value` and the `options`, each with `title`, `description`, `value`, `disabled` and `onSelect`. |
249
- | `phx.frontend.useRootEntityPrice()` | The root entity's `price` component, formatted for the current locale and currency, or `null` without one. |
250
- | `phx.frontend.useAccessService()` | `accessInfo.viewMode` is `true` while a configuration shared for viewing is open, and also while the host sets the `readonly` property. |
251
- | `phx.frontend.useActiveNavigationState()` | The active navigation state; the panel shows its review step while it is `checkout`. |
252
- | `phx.frontend.usePushNavigate()` and `phx.frontend.usePopNavigate()` | Enter the review step and leave it again. |
253
- | `phx.frontend.useNavigate()` | Return from the confirmation to the configuration, forgetting the review step. |
254
- | `phx.frontend.useComponents({ componentTypes: [finalizeActionComponent] })` | The spec's `finalizeAction` components; the panel offers the primary one in its review step. `finalizeActionComponent` comes from `@salsita-ai/sdk/domain`. |
255
- | `phx.frontend.useFinalizeAction(handler)` | Run the finalize action's handler, with its pending state, its error and whether finalizing is possible; see [Request a quote](#request-a-quote). |
256
- | `phx.frontend.useIsFullscreenActive()` and `phx.frontend.useSetFullscreen()` | Read the fullscreen flag, and set it from the layout's own button. |
257
- | `phx.frontend.useConfiguratorMessages(onMessage)` | Receive violations, side-effect hints and errors one by one, with their text resolved, for the layout's own toast; see [Show messages](#show-messages). |
258
- | `useResolveLocalizable()` from `@salsita-ai/sdk/react` | Turns the localizable texts of the spec into strings in the current language. [Localization](?path=/docs/phoenix-localization--docs) describes it and `LocalizableMessage`. |
259
- | `PhoenixHandlerBoundary` from `@salsita-ai/sdk/react` | Wraps the review step's buttons, so an edited handler takes effect without a reload. |
314
+ | Hook | What the layout uses it for |
315
+ | ---------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
316
+ | `phx.frontend.useFirstRootComponent(detailComponent)` | The `detail` component of the root entity: name, subtitle and description. `detailComponent` comes from `@salsita-ai/sdk/domain`; the hook returns `null` without one. |
317
+ | `phx.frontend.useRootEntityId()` | The id of the table, which the control hooks take. |
318
+ | `phx.frontend.useAttributeSelection(entityId, instanceName)` | The `attributeSelection` component named `edgeFinish`: the current `value` and the `options`, each with `title`, `description`, `value`, `disabled` and `onSelect`. |
319
+ | `phx.frontend.useRootEntityPrice()` | The root entity's `price` component, formatted for the current locale and currency, or `null` without one. |
320
+ | `phx.frontend.useResolveLocalizable()` | Turns the localizable texts of the spec into strings in the current language. [Localization](?path=/docs/phoenix-localization--docs) describes it, `phx.frontend.useLocalizable(text)` and `LocalizableMessage`. |
321
+ | `phx.frontend.useAccessService()` | `accessInfo.viewMode` is `true` while a configuration shared for viewing is open, and also while the host sets the `readonly` property; see [Serve read mode](#serve-read-mode). |
322
+ | `phx.frontend.useActiveNavigationState()` | The active navigation state; the panel shows its review step while it is `checkout`. |
323
+ | `phx.frontend.usePushNavigate()` and `phx.frontend.usePopNavigate()` | Enter the review step and leave it again. |
324
+ | `phx.frontend.useNavigate()` | Return from the confirmation to the configuration, forgetting the review step. |
325
+ | `phx.frontend.useFinalizeActions()` | The spec's `finalizeAction` components with what a button needs; the review step offers the `primary` one and runs it, with its pending state, its error and whether finalizing is possible; see [Request a quote](#request-a-quote). |
326
+ | `phx.frontend.useUndoRedo()` | Whether there is a change to undo or redo, and `undo` and `redo`, for the layout's own buttons; see [Undo and redo](#undo-and-redo). |
327
+ | `phx.frontend.useIsFullscreenActive()` and `phx.frontend.useSetFullscreen()` | Read the fullscreen flag, and set it from the layout's own button. |
328
+ | `phx.frontend.useAnalytics()` | Record the fullscreen button's click as the built-in button does; see [Offer fullscreen](#offer-fullscreen). |
329
+ | `phx.frontend.useSceneSafeArea()` | The two refs that tell the camera which part of the canvas the panel or the sheet leaves free; see [What the layout has to do](#what-the-layout-has-to-do). |
330
+ | `phx.frontend.useActiveViewports()` | The width classes of the configurator's container, or `null` before it is measured; the layout renders its phone arrangement unless it includes `desktop`, see [Fit a phone](#fit-a-phone). |
331
+ | `phx.frontend.useActiveViewState()` and `phx.frontend.useSetViewState()` | Read the active view state, one of the spec's `viewStates`, to mark the active view button, and make another one active; see [Control the scene](#control-the-scene). |
332
+ | `phx.frontend.useResetCamera()` | Move the camera back to the framing of the active camera, undoing the customer's orbit, pan and zoom. |
333
+ | `phx.frontend.useConfiguratorMessages(onMessage)` | Receive violations, side-effect hints and errors one by one, with their text resolved, for the layout's own toast; see [Show messages](#show-messages). |
260
334
 
261
335
  Calling an option's `onSelect` is the whole write: it changes `edgeFinish` on the table, the scene morphs the edge and the price expression recalculates. The option fields are named for display: the spec's `label` arrives as `title`, its `img` as `imageSrc`.
262
336
 
@@ -270,7 +344,7 @@ The edge finish is a visual choice, so the panel shows it as cards with a drawin
270
344
  import { Box, ButtonBase, type SxProps, type Theme, Typography } from '@mui/material'
271
345
  import type { KeyboardEvent } from 'react'
272
346
 
273
- import { type UseAttributeSelection, useResolveLocalizable } from '@salsita-ai/sdk/react'
347
+ import type { UseAttributeSelection } from '@salsita-ai/sdk/react'
274
348
 
275
349
  // Cross-sections of the tabletop's edge, keyed by the option values of the spec.
276
350
  const EDGE_PROFILES: Readonly<Record<string, string>> = {
@@ -307,7 +381,7 @@ interface EdgeFinishCardsProps {
307
381
  }
308
382
 
309
383
  export const EdgeFinishCards = ({ selection }: EdgeFinishCardsProps) => {
310
- const resolve = useResolveLocalizable()
384
+ const resolve = phx.frontend.useResolveLocalizable()
311
385
  const { options } = selection
312
386
  // The card in the tab order: the selected one, or the first enabled one. Disabled cards are never in it.
313
387
  const selectedIndex = options.findIndex(option => option.value === selection.value && !option.disabled)
@@ -403,51 +477,139 @@ The drawings are keyed by the option values of the spec. A spec can carry a pict
403
477
 
404
478
  ## Offer fullscreen
405
479
 
406
- Fullscreen is a flag in the configurator's state, not the browser's fullscreen mode. `phx.frontend.useIsFullscreenActive()` reads it and `phx.frontend.useSetFullscreen()` returns a function that sets it: `setFullscreen(true)` turns it on, `setFullscreen(false)` off. The layout's own button flips it, and the layout decides what to hide.
480
+ Fullscreen is a flag in the configurator's state, not the browser's fullscreen mode. `phx.frontend.useIsFullscreenActive()` reads it and `phx.frontend.useSetFullscreen()` returns a function that sets it: `setFullscreen(true)` turns it on, `setFullscreen(false)` off. The layout's own button flips it, and the layout decides what to hide. Before it flips the flag, the button records the click with `phx.frontend.useAnalytics().push(FrontendAnalyticsFactory.FullScreenModeToggled())`, the event the built-in fullscreen button records, so the shop's analytics count fullscreen the same way with either layout. `FrontendAnalyticsFactory` comes from `@salsita-ai/sdk/configurator`.
407
481
 
408
482
  ```tsx
409
- import { Button } from '@mui/material'
483
+ import { Button, Tooltip } from '@mui/material'
410
484
 
411
- import { phx } from '../../.phoenix/phx.js'
485
+ import { FrontendAnalyticsFactory } from '@salsita-ai/sdk/configurator'
412
486
 
413
487
  const ENTER_ICON = 'M4 9V4h5M15 4h5v5M20 15v5h-5M9 20H4v-5'
414
488
  const EXIT_ICON = 'M9 4v5H4M15 4v5h5M15 20v-5h5M9 20v-5H4'
415
489
 
416
- export const FullscreenToggle = () => {
490
+ interface FullscreenToggleProps {
491
+ // Only the icon, with the label as its accessible name and tooltip, where a label would cover the product
492
+ readonly compact?: boolean
493
+ }
494
+
495
+ export const FullscreenToggle = ({ compact = false }: FullscreenToggleProps) => {
417
496
  const isFullscreen = phx.frontend.useIsFullscreenActive()
418
497
  const setFullscreen = phx.frontend.useSetFullscreen()
498
+ const analytics = phx.frontend.useAnalytics()
499
+ const label = isFullscreen ? 'Exit fullscreen' : 'Fullscreen'
500
+ const icon = (
501
+ <svg viewBox="0 0 24 24" width={20} height={20} fill="none" stroke="currentColor" strokeWidth={2}>
502
+ <path d={isFullscreen ? EXIT_ICON : ENTER_ICON} />
503
+ </svg>
504
+ )
505
+
506
+ // The same event the built-in fullscreen button records, for entering and for leaving
507
+ const toggle = () => {
508
+ analytics.push(FrontendAnalyticsFactory.FullScreenModeToggled())
509
+ setFullscreen(!isFullscreen)
510
+ }
419
511
 
420
512
  return (
421
- <Button
422
- onClick={() => setFullscreen(!isFullscreen)}
423
- startIcon={
513
+ <Tooltip title={compact ? label : ''}>
514
+ <Button
515
+ onClick={toggle}
516
+ aria-label={compact ? label : undefined}
517
+ startIcon={compact ? undefined : icon}
518
+ sx={{
519
+ minBlockSize: 44,
520
+ minInlineSize: 44,
521
+ paddingInline: compact ? 0 : 2.5,
522
+ borderRadius: 999,
523
+ bgcolor: 'background.paper',
524
+ color: 'text.primary',
525
+ boxShadow: '0 4px 16px rgba(0, 0, 0, 0.12)',
526
+ textTransform: 'none',
527
+ fontWeight: 600,
528
+ '&:hover': { bgcolor: 'background.paper', boxShadow: '0 6px 20px rgba(0, 0, 0, 0.18)' },
529
+ }}
530
+ >
531
+ {compact ? icon : label}
532
+ </Button>
533
+ </Tooltip>
534
+ )
535
+ }
536
+ ```
537
+
538
+ The button stays in the free area in both states, so the way back is always where the user left it. [Interaction Modes](?path=/docs/ux-guidelines-interaction-modes--docs#full-screen-preview) describes what fullscreen hides.
539
+
540
+ ## Undo and redo
541
+
542
+ The customer tries the four finishes against each other, so the layout offers **Undo** and **Redo** at the top right of the free area, beside the fullscreen button. `phx.frontend.useUndoRedo()` returns `canUndo` and `canRedo`, whether the history has a change to undo or to redo, and `undo` and `redo`, which change the configuration back or forward as the built-in toolbar's buttons do and push the same analytics events:
543
+
544
+ ```tsx
545
+ import { Box, IconButton, Tooltip } from '@mui/material'
546
+
547
+ const UNDO_ICON = 'M9 14 4 9l5-5M4 9h10.5a5.5 5.5 0 0 1 0 11H11'
548
+ const REDO_ICON = 'M15 14l5-5-5-5M20 9H9.5a5.5 5.5 0 0 0 0 11H13'
549
+
550
+ interface HistoryButtonProps {
551
+ readonly label: string
552
+ readonly icon: string
553
+ readonly enabled: boolean
554
+ readonly onClick: () => void
555
+ }
556
+
557
+ const HistoryButton = ({ label, icon, enabled, onClick }: HistoryButtonProps) => (
558
+ <Tooltip title={label}>
559
+ {/* A disabled button fires no pointer events, so the span keeps the tooltip working */}
560
+ <span>
561
+ <IconButton
562
+ aria-label={label}
563
+ disabled={!enabled}
564
+ onClick={onClick}
565
+ sx={{ inlineSize: 44, blockSize: 44, color: 'text.primary' }}
566
+ >
424
567
  <svg viewBox="0 0 24 24" width={20} height={20} fill="none" stroke="currentColor" strokeWidth={2}>
425
- <path d={isFullscreen ? EXIT_ICON : ENTER_ICON} />
568
+ <path d={icon} />
426
569
  </svg>
427
- }
570
+ </IconButton>
571
+ </span>
572
+ </Tooltip>
573
+ )
574
+
575
+ // Undo and redo for the customer's choices. They change the configuration, so they are offered only where the cards
576
+ // are: not to a viewer, and not in the review step, where the summary and a running request must not change under the
577
+ // customer. `useUndoRedo` pushes the same analytics events as the built-in toolbar's buttons.
578
+ export const UndoRedo = () => {
579
+ const { canUndo, canRedo, undo, redo } = phx.frontend.useUndoRedo()
580
+ const { accessInfo } = phx.frontend.useAccessService()
581
+ const navigationState = phx.frontend.useActiveNavigationState()
582
+
583
+ if (accessInfo.viewMode || navigationState !== 'configure') {
584
+ return null
585
+ }
586
+
587
+ return (
588
+ <Box
589
+ component="div"
590
+ role="group"
591
+ aria-label="History"
428
592
  sx={{
429
- minBlockSize: 44,
430
- paddingInline: 2.5,
593
+ display: 'flex',
431
594
  borderRadius: 999,
432
595
  bgcolor: 'background.paper',
433
- color: 'text.primary',
434
596
  boxShadow: '0 4px 16px rgba(0, 0, 0, 0.12)',
435
- textTransform: 'none',
436
- fontWeight: 600,
437
- '&:hover': { bgcolor: 'background.paper', boxShadow: '0 6px 20px rgba(0, 0, 0, 0.18)' },
438
597
  }}
439
598
  >
440
- {isFullscreen ? 'Exit fullscreen' : 'Fullscreen'}
441
- </Button>
599
+ <HistoryButton label="Undo" icon={UNDO_ICON} enabled={canUndo} onClick={undo} />
600
+ <HistoryButton label="Redo" icon={REDO_ICON} enabled={canRedo} onClick={redo} />
601
+ </Box>
442
602
  )
443
603
  }
444
604
  ```
445
605
 
446
- The button stays in the free area in both states, so the way back is always where the user left it. [Interaction Modes](?path=/docs/ux-guidelines-interaction-modes--docs#full-screen-preview) describes what fullscreen hides.
606
+ - Each choice of a finish is one step of the history, whether it is made on the cards or on the button on the table's edge; undoing it moves the check mark back, changes the edge back and restores the price.
607
+ - Each button is disabled while there is nothing to undo or redo, and keeps its tooltip and accessible name. A disabled MUI button receives no pointer events, so a `span` around it carries the tooltip.
608
+ - The hook does not look at read mode or at the navigation state. The buttons change the configuration, so the component renders them only while the cards are shown: not to a viewer, not in the review step, where the summary and a running request must not change under the customer, and not in the confirmation. The layout also leaves them out in fullscreen, which gives the canvas to the product and keeps only the controls placed on it or for looking at it. The button on the table's edge stays there and still changes the finish; the history keeps that change, so **Undo** undoes it after fullscreen is left.
447
609
 
448
610
  ## Show messages
449
611
 
450
- When a change is rejected because it breaks an invariant, when a committed change carries a hint, or when an error is thrown while a change is validated, the configurator has a message for the customer. `phx.frontend.useConfiguratorMessages(onMessage)` calls `onMessage` once for each, with the text already in the customer's language, and the layout shows it its own way. Here a toast at the bottom of the free area shows a message for six seconds, colored by its severity:
612
+ When a change is rejected because it breaks an invariant, when a committed change carries a hint, when an error is thrown while a change is validated, or when saving the configuration fails and later succeeds again, the configurator has a message for the customer. `phx.frontend.useConfiguratorMessages(onMessage)` calls `onMessage` once for each, with the text already in the customer's language, and the layout shows it its own way. Here a toast shows a message for six seconds, colored by its severity, at the bottom left of the free area above the view controls on a desktop, and at its top, below the row of buttons, on a phone:
451
613
 
452
614
  ```tsx
453
615
  import { Alert } from '@mui/material'
@@ -455,8 +617,6 @@ import { useEffect, useState } from 'react'
455
617
 
456
618
  import type { ConfiguratorMessage } from '@salsita-ai/sdk/react'
457
619
 
458
- import { phx } from '../../.phoenix/phx.js'
459
-
460
620
  const VIOLATION_SEVERITY = { fatal: 'error', fixable: 'error', warning: 'warning', notice: 'info' } as const
461
621
  const RANK = { info: 0, warning: 1, error: 2 } as const
462
622
  const VISIBLE_MS = 6000
@@ -466,7 +626,7 @@ const severityOf = (message: ConfiguratorMessage) => {
466
626
  return VIOLATION_SEVERITY[message.violation.severity]
467
627
  }
468
628
 
469
- return message.kind === 'error' ? 'error' : 'info'
629
+ return message.kind === 'error' || message.kind === 'saveError' ? 'error' : 'info'
470
630
  }
471
631
 
472
632
  export const MessageToast = () => {
@@ -503,15 +663,13 @@ export const MessageToast = () => {
503
663
  }
504
664
  ```
505
665
 
506
- The hook takes a new function on every render without missing a message, so passing the state setter, or an inline function, is fine. `message.kind` is `'violation'`, `'sideEffect'` or `'error'`; a violation also carries `entityId` and the `violation` itself, with its `severity`. A rejected change brings one message for each violation of the rejected state, including notices and warnings that were already present, so the toast keeps the most severe message while it is shown instead of letting a later notice replace the reason for the rejection. The layout mounts the toast in the safe-area element, which sets `pointerEvents: 'none'`, so the toast's wrapper switches pointer events back on for the close button.
666
+ The hook takes a new function on every render without missing a message, so passing the state setter, or an inline function, is fine. `message.kind` is `'violation'`, `'sideEffect'`, `'error'`, `'saveError'` or `'saveRecovery'`; the toast shows an error and a failed save as errors, a hint and the save that succeeded again as information. A violation also carries `entityId` and the `violation` itself, with its `severity`. A rejected change brings one message for each violation of the rejected state, including notices and warnings that were already present, so the toast keeps the most severe message while it is shown instead of letting a later notice replace the reason for the rejection. The layout mounts the toast in the safe-area element, which sets `pointerEvents: 'none'`, so the toast's wrapper switches pointer events back on for the close button.
507
667
 
508
668
  To give the toast something to show, the spec registers one transformer. Choosing **Tree trunk** keeps the change and adds a hint to it, which arrives as a `sideEffect` message:
509
669
 
510
670
  ```ts
511
671
  import { msg } from '@lingui/core/macro'
512
672
 
513
- import { phx } from '../../.phoenix/phx.js'
514
-
515
673
  // A tree-trunk edge is cut by hand; choosing it carries a hint, which reaches the layout as a side-effect message
516
674
  export default phx.frontend.transformerBuilder.when
517
675
  .entity(['Table'])
@@ -526,7 +684,7 @@ export default phx.frontend.transformerBuilder.when
526
684
  .build('tree-trunk-delivery')
527
685
  ```
528
686
 
529
- [Configurator Interface → Loaded Configuration UI](?path=/docs/phoenix-configurator-interface--docs#loaded-configuration-ui) lists the messages the hook does not deliver: a failure to save, errors of the built-in finalize and other actions, and preset errors stay snackbars.
687
+ [Configurator Interface → Loaded Configuration UI](?path=/docs/phoenix-configurator-interface--docs#loaded-configuration-ui) lists the messages the hook does not deliver: errors of the built-in finalize and other actions stay snackbars, and a failure to start from a preset is raised on the preset screen.
530
688
 
531
689
  ## Request a quote
532
690
 
@@ -547,8 +705,6 @@ components:
547
705
  ```ts
548
706
  import { useCallback } from 'react'
549
707
 
550
- import { phx } from '../../.phoenix/phx.js'
551
-
552
708
  // Stands in for the shop's quote service: the request takes a moment, then the panel shows the confirmation
553
709
  export default phx.frontend.createPhoenixHandler('requestQuote', () => {
554
710
  const navigate = phx.frontend.useNavigate()
@@ -564,69 +720,534 @@ export default phx.frontend.createPhoenixHandler('requestQuote', () => {
564
720
 
565
721
  The handler stands in for the shop's quote service: it waits a moment, as a request would, and then enters the `requested` navigation state, in which the panel thanks the customer. A handler is a hook factory, so it can use any hook, here `phx.frontend.useNavigate()`.
566
722
 
567
- The panel lists the finalize actions with `phx.frontend.useComponents({ componentTypes: [finalizeActionComponent] })` and offers the primary one, or the first when none is primary, in its review step. It renders the review step's buttons in a component of their own inside `<PhoenixHandlerBoundary name={handler}>`, because `phx.frontend.useFinalizeAction(handler)` runs the project's handler factory: it is called once per component, never in a loop, and the boundary remounts the buttons when the handler is edited. **Back to the configuration** lives in the same component, so it can be disabled while the request is pending.
723
+ The review step offers the spec's primary finalize action, or the first one when none is primary, with `phx.frontend.useFinalizeActions()`. The hook lists the active `finalizeAction` components with what a button needs, the label and the title resolved to the customer's language, and runs their handlers itself, beside the layout, so the buttons need no handler boundary and the component may be called anywhere and as often as the layout likes. **Back to the configuration** lives in the same component, so it can be disabled while the request is pending.
568
724
 
569
725
  ```tsx
570
726
  import { Alert, Box, Button, CircularProgress, Typography } from '@mui/material'
571
727
 
572
- import { phx } from '../../.phoenix/phx.js'
573
-
574
728
  const BUTTON_SX = { minBlockSize: 48, borderRadius: 999, textTransform: 'none', fontWeight: 600 } as const
575
729
 
576
730
  interface ReviewActionsProps {
577
- readonly handler: string
578
- readonly label: string
579
731
  readonly onBack: () => void
580
732
  }
581
733
 
582
- // The review step's buttons: one finalize action and the way back. `useFinalizeAction` runs the action's handler,
583
- // so this component calls it exactly once and is rendered inside a `PhoenixHandlerBoundary` for that handler.
584
- // Back is disabled while the request is pending, so the confirmation never follows a configuration that changed.
585
- export const ReviewActions = ({ handler, label, onBack }: ReviewActionsProps) => {
586
- const { run, isPending, error, disabled, hints } = phx.frontend.useFinalizeAction(handler)
734
+ // The review step's buttons: the spec's primary finalize action and the way back. `useFinalizeActions` runs the
735
+ // action's handler beside the layout, so its pending state and error outlive this component: when the panel unmounts,
736
+ // as in fullscreen, the request goes on and the remounted buttons still show it. Back is disabled while the request
737
+ // is pending, so the customer cannot change the configuration while it is sent.
738
+ export const ReviewActions = ({ onBack }: ReviewActionsProps) => {
739
+ const { primary, hints } = phx.frontend.useFinalizeActions()
740
+ const isPending = primary?.isPending ?? false
587
741
 
588
742
  return (
589
743
  <Box component="div" sx={{ display: 'grid', gap: 2 }}>
590
- <Box component="div" sx={{ display: 'grid', gap: 1 }}>
744
+ {primary && (
745
+ <Box component="div" sx={{ display: 'grid', gap: 1 }}>
746
+ <Button
747
+ size="large"
748
+ variant="contained"
749
+ disabled={primary.disabled || isPending}
750
+ onClick={() => void primary.run()}
751
+ title={primary.title}
752
+ startIcon={isPending ? <CircularProgress size={18} color="inherit" /> : undefined}
753
+ sx={BUTTON_SX}
754
+ >
755
+ {isPending ? 'Sending the request…' : primary.label}
756
+ </Button>
757
+ {primary.disabled && hints && (
758
+ <Typography variant="caption" color="text.secondary">
759
+ {hints}
760
+ </Typography>
761
+ )}
762
+ {primary.error && <Alert severity="error">The request could not be sent: {primary.error.message}</Alert>}
763
+ </Box>
764
+ )}
765
+ <Button size="large" variant="outlined" disabled={isPending} onClick={onBack} sx={BUTTON_SX}>
766
+ Back to the configuration
767
+ </Button>
768
+ </Box>
769
+ )
770
+ }
771
+ ```
772
+
773
+ - `primary` is the first `'primary'` action, or else the first action, or `null` when the spec has none; the component then shows only **Back to the configuration**. `secondary` holds the others, which this product does not have.
774
+ - `run()` records the finalize-button click for analytics and runs the handler; it does nothing while `disabled` or `isPending`, and returns a promise that never rejects.
775
+ - While `isPending` the button shows a spinner and cannot be clicked again, and **Back to the configuration** is disabled, so the customer cannot change the configuration while it is sent. The configurator keeps `isPending` and `error` while the layout's components unmount: entering fullscreen during the request removes the panel, and the panel shown after fullscreen still shows the spinner until the handler settles.
776
+ - `error` is what the handler rejected with. The layout shows it under the button; no snackbar is raised. It is cleared when the customer tries again.
777
+ - `disabled` and `hints` come from the configuration's violations: while a `warning` or worse holds, or the configuration failed to save, finalizing is not possible and `hints` says why.
778
+
779
+ The review step stays: a quote request is a commitment, so the customer sees the summary first, and a real shop collects the contact details there. A product that finalizes without a review offers the button in place of **Review and request a quote**. [Configurator Interface → Hooks for a Project Layout](?path=/docs/phoenix-configurator-interface--docs#hooks-for-a-project-layout) describes the hook, and `phx.frontend.useFinalizeAction(handler)`, which runs one known action inside the layout instead, and [Finalization](?path=/docs/phoenix-finalization--docs) what a real flow does on the server.
780
+
781
+ ## Serve read mode
782
+
783
+ A configuration is in read mode by one of two routes, and the layout does not need to know which:
784
+
785
+ - **A configuration shared for viewing.** The configuration is opened with `read-revision` access, as a viewer of a shared link opens it. The `read` mock template sets that access, and the **Read Mode** story below opens it.
786
+ - **The host page sets `readonly`.** The page that embeds the configurator sets the web component's `readonly` property, here on a configuration the user owns. The mock template `mocks/readonly-host.yaml`, **Host sets readonly** in the editor's **Mocks** panel, keeps `access: owner` and sets the property with `webComponentProperties: { readonly: true }`.
787
+
788
+ Both routes set `accessInfo.viewMode` to `true`, and both switch the spec's filter mode to read, so a component filtered with `$filter.modes: [owner]` is left out either way. While `viewMode` is `true` the panel marks the view as view only, replaces the cards with the chosen finish and shows the price without an action; neither the finalize action nor undo and redo are offered, since `useFinalizeActions` and `useUndoRedo` do not check read mode themselves. The hooks do not hide or disable anything in read mode: what a viewer can change is decided by what the layout renders. Rotating and zooming the scene, and fullscreen, stay available, as [Interaction Modes](?path=/docs/ux-guidelines-interaction-modes--docs#view-only-mode) recommends. The button on the table's edge is hidden for viewers by the spec, see [Put a control on the product](#put-a-control-on-the-product).
789
+
790
+ A viewer of a shared configuration has no way here to edit a copy of it; see **Clone to edit in read mode** in [Known gaps](#known-gaps).
791
+
792
+ ## Fit a phone
793
+
794
+ A panel 380 pixels wide beside the scene leaves nothing of the table on a phone. Below a desktop width the layout puts the panel into a sheet at the bottom and lets the camera frame the table in the area above it. The layout above shows both arrangements.
795
+
796
+ **The switch.** `phx.frontend.useActiveViewports()` returns the width classes the configurator's container satisfies. The container decides, not the window, so a configurator embedded in a narrow column of a wide page gets the phone arrangement too. The built-in layout switches on `desktop` as well.
797
+
798
+ | Value | When it is active |
799
+ | ----------- | ---------------------------------------------------------------------------------- |
800
+ | `phone` | The container is narrower than 480 pixels. |
801
+ | `mobile` | The container is at most 768 pixels wide. |
802
+ | `tablet` | The container is wider than 480 and narrower than 1024 pixels. |
803
+ | `desktop` | The container is wider than 768 pixels; `mobile` and `desktop` exclude each other. |
804
+ | `landscape` | The browser window, not the container, is wider than it is high. |
805
+ | `portrait` | The browser window, not the container, is higher than it is wide. |
806
+
807
+ The hook returns `null` until the container has been measured, and the layout renders only the scene until then, so a phone never shows the desktop panel for a frame.
808
+
809
+ **The sheet.** On a phone the layout is a column: the safe-area element takes the height the sheet leaves, and the sheet sits below it. The sheet has two positions. Collapsed, it shows the name, the price and the action; open, it shows the description and the cards too. The `collapsed` prop of the panel hides the description and the cards, and nothing else, and `inSheet` keeps the top of the cards in view. The sheet scrolls what does not fit, so the price, the review step, **Request a quote** and the thank-you message are reachable in both positions.
810
+
811
+ ```tsx
812
+ import { Box, ButtonBase } from '@mui/material'
813
+ import { type MouseEvent, type PointerEvent, type ReactNode, useRef } from 'react'
814
+
815
+ // A drag shorter than this is a tap, and the handle's click toggles the sheet
816
+ const TAP_DISTANCE = 6
817
+ // A drag that ends this far from where it started snaps to the other position
818
+ const SNAP_DISTANCE = 48
819
+ // A drag faster than this, in pixels per millisecond, snaps in its direction even when it is short
820
+ const SNAP_VELOCITY = 0.5
821
+ // How far the sheet follows the finger towards the position it is already in
822
+ const OVERDRAG = 0.25
823
+
824
+ interface BottomSheetProps {
825
+ readonly open: boolean
826
+ readonly onOpenChange: (open: boolean) => void
827
+ readonly label: string
828
+ readonly children: ReactNode
829
+ }
830
+
831
+ interface Drag {
832
+ readonly startY: number
833
+ readonly startTime: number
834
+ delta: number
835
+ }
836
+
837
+ // A persistent sheet at the bottom of the layout with two positions, open and collapsed. It is not a modal: the scene
838
+ // above it stays interactive. Its height comes from its content, so the layout's safe area ends where the sheet
839
+ // starts and changes only when the sheet snaps. While the handle is dragged the sheet follows the finger with a
840
+ // transform, which the safe area does not see, so the camera refits once per snap and not on every move.
841
+ export const BottomSheet = ({ open, onOpenChange, label, children }: BottomSheetProps) => {
842
+ const sheetRef = useRef<HTMLElement>(null)
843
+ const dragRef = useRef<Drag | null>(null)
844
+ const draggedRef = useRef(false)
845
+
846
+ const moveSheet = (offset: number, animate: boolean) => {
847
+ if (sheetRef.current) {
848
+ sheetRef.current.style.transition = animate ? 'transform 200ms ease-out' : 'none'
849
+ sheetRef.current.style.transform = offset === 0 ? '' : `translateY(${offset}px)`
850
+ }
851
+ }
852
+
853
+ const handlePointerDown = (event: PointerEvent<HTMLButtonElement>) => {
854
+ event.currentTarget.setPointerCapture(event.pointerId)
855
+ dragRef.current = { startY: event.clientY, startTime: event.timeStamp, delta: 0 }
856
+ draggedRef.current = false
857
+ }
858
+
859
+ const handlePointerMove = (event: PointerEvent<HTMLButtonElement>) => {
860
+ const drag = dragRef.current
861
+
862
+ if (drag === null) {
863
+ return
864
+ }
865
+
866
+ drag.delta = event.clientY - drag.startY
867
+ // Down closes an open sheet and up opens a collapsed one; the other direction only gives a little
868
+ const towardsOther = open ? drag.delta > 0 : drag.delta < 0
869
+ moveSheet(towardsOther ? drag.delta : drag.delta * OVERDRAG, false)
870
+ }
871
+
872
+ const handlePointerEnd = (event: PointerEvent<HTMLButtonElement>) => {
873
+ const drag = dragRef.current
874
+ dragRef.current = null
875
+
876
+ if (drag === null) {
877
+ return
878
+ }
879
+
880
+ moveSheet(0, true)
881
+
882
+ if (Math.abs(drag.delta) < TAP_DISTANCE) {
883
+ return
884
+ }
885
+
886
+ draggedRef.current = true
887
+ const velocity = drag.delta / Math.max(event.timeStamp - drag.startTime, 1)
888
+ const flicked = Math.abs(drag.delta) >= SNAP_DISTANCE || Math.abs(velocity) >= SNAP_VELOCITY
889
+
890
+ if (flicked && (open ? drag.delta > 0 : drag.delta < 0)) {
891
+ onOpenChange(!open)
892
+ }
893
+ }
894
+
895
+ // A tap, Enter or Space toggles the sheet. The pointer click that ends a drag has already been handled; a keyboard
896
+ // click (`detail` 0) always toggles, also after a touch drag that was followed by no click.
897
+ const handleClick = (event: MouseEvent<HTMLButtonElement>) => {
898
+ const dragged = draggedRef.current
899
+ draggedRef.current = false
900
+
901
+ if (dragged && event.detail !== 0) {
902
+ return
903
+ }
904
+
905
+ onOpenChange(!open)
906
+ }
907
+
908
+ return (
909
+ <Box
910
+ component="section"
911
+ ref={sheetRef}
912
+ aria-label={label}
913
+ sx={{
914
+ position: 'relative',
915
+ flexShrink: 0,
916
+ display: 'flex',
917
+ flexDirection: 'column',
918
+ maxBlockSize: '55%',
919
+ paddingBlockEnd: 'env(safe-area-inset-bottom)',
920
+ borderStartStartRadius: 20,
921
+ borderStartEndRadius: 20,
922
+ bgcolor: 'background.paper',
923
+ boxShadow: '0 -8px 32px rgba(0, 0, 0, 0.12)',
924
+ // Fills the gap below the sheet while it is dragged up
925
+ '&::after': {
926
+ content: '""',
927
+ position: 'absolute',
928
+ insetInline: 0,
929
+ insetBlockStart: '100%',
930
+ blockSize: '100vh',
931
+ bgcolor: 'background.paper',
932
+ },
933
+ }}
934
+ >
935
+ <ButtonBase
936
+ aria-expanded={open}
937
+ disableRipple
938
+ aria-label={open ? `Collapse ${label.toLowerCase()}` : `Expand ${label.toLowerCase()}`}
939
+ onClick={handleClick}
940
+ onPointerDown={handlePointerDown}
941
+ onPointerMove={handlePointerMove}
942
+ onPointerUp={handlePointerEnd}
943
+ onPointerCancel={handlePointerEnd}
944
+ sx={{
945
+ flexShrink: 0,
946
+ blockSize: 36,
947
+ touchAction: 'none',
948
+ '&.Mui-focusVisible': { outline: 2, outlineColor: 'primary.main', outlineOffset: -4, borderRadius: 3 },
949
+ }}
950
+ >
951
+ <Box component="span" sx={{ inlineSize: 40, blockSize: 4, borderRadius: 2, bgcolor: 'text.disabled' }} />
952
+ </ButtonBase>
953
+ {/* A column, so the panel's cards region shrinks first and the price and action stay in view; below the cards
954
+ region's minimum height the content scrolls as a whole, as the review step does on a short phone */}
955
+ <Box
956
+ component="div"
957
+ sx={{
958
+ display: 'flex',
959
+ flexDirection: 'column',
960
+ flex: '1 1 auto',
961
+ minBlockSize: 0,
962
+ overflowY: 'auto',
963
+ overscrollBehavior: 'contain',
964
+ }}
965
+ >
966
+ {children}
967
+ </Box>
968
+ </Box>
969
+ )
970
+ }
971
+ ```
972
+
973
+ - The handle is a real button with `aria-expanded`. A tap, Enter or Space toggles the sheet, and dragging it up or down snaps the sheet to the other position when the drag is long or fast enough. `touchAction: 'none'` is set on the handle only, so the cards still scroll by touch.
974
+ - The sheet's height comes from its content and is at most 55% of the configurator; when the content does not fit, the cards region shrinks until only the top of the cards shows and scrolls, and below that the sheet's content scrolls as a whole. On a phone with room for the header, the top of the cards and the footer, the price and the action stay in view with the sheet open; on a shorter one the customer scrolls the sheet to them, and the review step's buttons are reached the same way in both positions. A scroll on the cards that reaches their end moves the sheet on. Because the safe-area element is its neighbour in the column, the free area ends where the sheet starts without anything being measured by the layout.
975
+ - While the handle is dragged the sheet follows the finger with a `transform`. `phx.frontend.useSceneSafeArea()` does not see a transform, so the free area changes once, when the sheet snaps, and the camera refits once. A safe area that followed the finger would refit the camera on every move and reset an orbit the customer made.
976
+ - The sheet is not a modal: no backdrop covers the scene, so the table can be orbited with one finger and zoomed with two while the sheet is open. MUI's temporary `Drawer` and `SwipeableDrawer` are modals and would block the scene; their persistent and permanent variants have no backdrop, but no drag handle with two positions either.
977
+
978
+ **What else moves.** The toast sits at the top of the free area, below the row of undo, redo and fullscreen buttons, so it does not cover the sheet's handle, and the fullscreen button shows only its icon, with its label as tooltip and accessible name. Fullscreen removes the sheet as it removes the panel on a desktop. The sheet keeps its position while fullscreen is on.
979
+
980
+ **A camera for the phone.** The desktop camera is close enough to fill a wide free area, and on a narrow one it cuts off the ends of the table. So each camera has a filter on the viewport: the desktop camera `main` applies while `desktop` is active, and a second camera, `phone`, with a larger distance frames the whole table while `mobile` is. The filters exclude each other once the container is measured. Before that, for example when an image of the configuration is rendered, no viewport is known and a viewport filter matches, so both cameras apply and the higher priority of `main` decides:
981
+
982
+ ```yaml
983
+ components:
984
+ Table:
985
+ fitRootPerspectiveCamera:
986
+ main:
987
+ priority: 2
988
+ fov: 35
989
+ near: 100
990
+ far: 10000
991
+ minDistance: 1000
992
+ maxDistance: 9000
993
+ distance: 5000
994
+ azimuthAngle: 1.5
995
+ polarAngle: 1.1
996
+ fitMeshChanges: true
997
+ $filter:
998
+ viewports: [desktop]
999
+ phone:
1000
+ priority: 1
1001
+ fov: 35
1002
+ near: 100
1003
+ far: 10000
1004
+ minDistance: 1000
1005
+ maxDistance: 12000
1006
+ distance: 8000
1007
+ azimuthAngle: 1.5
1008
+ polarAngle: 1.1
1009
+ fitMeshChanges: true
1010
+ $filter:
1011
+ viewports: [mobile]
1012
+ ```
1013
+
1014
+ ## Put a control on the product
1015
+
1016
+ The edge finish is a detail of the tabletop, so the layout also offers it on the table itself: a round button on the middle of the long edge opens the four finishes next to the edge. On a phone it is a way to change the edge without opening the sheet.
1017
+
1018
+ A control in the scene is a spec component that names an element of the project. `htmlHotspot` places an HTML element at an offset from the entity's origin, in the model's units, here millimetres: half the table's depth towards the camera and just below the top's surface. Its `$filter` shows it only to the owner and only while the `configure` navigation state is active, so a viewer and the review step do not get it, and the element does not check either itself:
1019
+
1020
+ ```yaml
1021
+ components:
1022
+ Table:
1023
+ htmlHotspot:
1024
+ edgeFinish:
1025
+ name: EdgeFinishHotspot
1026
+ offsetX: 500
1027
+ offsetY: 800
1028
+ offsetZ: 0
1029
+ $filter:
1030
+ modes: [owner]
1031
+ navigationStates: [configure]
1032
+ ```
1033
+
1034
+ The element is registered with `phx.frontend.createCustomPhoenixEntityElement` under the name the spec gives. It receives the id of the entity the hotspot belongs to, and reads the same `attributeSelection` the panel reads:
1035
+
1036
+ ```tsx
1037
+ import { Box, ButtonBase, Popover, Tooltip } from '@mui/material'
1038
+ import { useState } from 'react'
1039
+
1040
+ import { EdgeFinishCards } from '../_shared/EdgeFinishCards.js'
1041
+
1042
+ // The edge profile the button shows, the square edge of the cards' drawings
1043
+ const EDGE_ICON = 'M3 7H17L21 11V13L17 17H3Z'
1044
+
1045
+ // Rendered by the spec's `htmlHotspot` on the table's edge: a button on the product that opens the edge finishes
1046
+ // next to the edge, with the same cards as the panel. The spec's `$filter` decides when it is shown.
1047
+ export default phx.frontend.createCustomPhoenixEntityElement('EdgeFinishHotspot', ({ entityId }) => {
1048
+ const edgeFinish = phx.frontend.useAttributeSelection(entityId, 'edgeFinish')
1049
+ const [anchor, setAnchor] = useState<HTMLElement | null>(null)
1050
+
1051
+ return (
1052
+ <>
1053
+ <Tooltip title="Edge finish">
1054
+ <ButtonBase
1055
+ aria-label="Edge finish"
1056
+ aria-haspopup="dialog"
1057
+ aria-expanded={anchor !== null}
1058
+ onClick={event => setAnchor(event.currentTarget)}
1059
+ sx={{
1060
+ display: 'grid',
1061
+ placeItems: 'center',
1062
+ inlineSize: 44,
1063
+ blockSize: 44,
1064
+ borderRadius: '50%',
1065
+ bgcolor: 'background.paper',
1066
+ color: 'primary.main',
1067
+ boxShadow: '0 4px 16px rgba(0, 0, 0, 0.2)',
1068
+ '&.Mui-focusVisible': { outline: 2, outlineColor: 'primary.main', outlineOffset: 2 },
1069
+ }}
1070
+ >
1071
+ <svg viewBox="0 0 24 24" width={22} height={22} aria-hidden>
1072
+ <path d={EDGE_ICON} fill="currentColor" />
1073
+ </svg>
1074
+ </ButtonBase>
1075
+ </Tooltip>
1076
+ <Popover
1077
+ open={anchor !== null}
1078
+ anchorEl={anchor}
1079
+ onClose={() => setAnchor(null)}
1080
+ anchorOrigin={{ vertical: 'top', horizontal: 'center' }}
1081
+ transformOrigin={{ vertical: 'bottom', horizontal: 'center' }}
1082
+ slotProps={{
1083
+ paper: { role: 'dialog', 'aria-label': 'Edge finish', sx: { borderRadius: 4, marginBlockStart: -1 } },
1084
+ }}
1085
+ >
1086
+ <Box component="div" sx={{ inlineSize: 340, maxInlineSize: 'calc(100vw - 32px)', padding: 2 }}>
1087
+ <EdgeFinishCards selection={edgeFinish} />
1088
+ </Box>
1089
+ </Popover>
1090
+ </>
1091
+ )
1092
+ })
1093
+ ```
1094
+
1095
+ - The hotspot is rendered inside the scene, but it has the theme and every `phx.frontend` hook, like the layout. MUI's `Popover` and `Tooltip` render into the configurator's own modal root, so they are styled and work inside its shadow root.
1096
+ - The cards in the popover are the panel's `EdgeFinishCards`, used a second time. A choice changes the edge, the price and the panel's cards at once, and the popover stays open so the customer can compare the finishes on the table.
1097
+ - Keyboard: the button is in the tab order, Enter and Space open the popover and move the focus into it, the arrow keys change the finish, and Escape closes it and returns the focus to the button.
1098
+ - `controlHotspot: true` would hide the hotspot while a change is being applied, which would also unmount the open popover on every choice, so this hotspot does not set it.
1099
+ - The scene's HTML is painted inside the canvas's stacking context, under the layout's panel and sheet. A hotspot that a panel covers cannot be clicked there.
1100
+
1101
+ [Html Hotspots](?path=/docs/controls-scene-html-hotspots--docs) describes the component and its other properties.
1102
+
1103
+ The SDK's own controls on the product, such as `sceneEntityAddFab` and `sceneEntitySelectHotspot`, keep the SDK's look in a project layout too. Each is rendered through an entity element of its own name, so a project gives it the brand's look by registering that name, for example with `phx.frontend.createAddEntityFab`; see [Configurator Interface → In-Scene Controls](?path=/docs/phoenix-configurator-interface--docs#in-scene-controls). `htmlHotspot` is for a control the SDK has none of, like this one.
1104
+
1105
+ ## Control the scene
1106
+
1107
+ The four finishes differ by a few millimetres on a table two metres long, so from the default distance the difference is hard to judge. The layout offers two views, **Whole table** and **Edge close-up**, a close and low look at a corner of the top, and a **Reset view** button that brings back the framing after the customer has orbited, panned or zoomed.
1108
+
1109
+ **Views are view states.** The spec lists them, and each camera says by its `$filter` in which view states and at which widths it applies. The two close-up cameras have the highest priorities and apply only in the `edge` view state, the desktop one with `desktop` and the phone one with `mobile`, a little farther away. In the `overview` view state, the first in the list and so the initial one, only the two whole-table cameras of [Fit a phone](#fit-a-phone) apply. A camera always looks at the middle of the table, so the close-up shows the near corner, where the edge profile is seen on both sides:
1110
+
1111
+ ```yaml
1112
+ viewStates:
1113
+ - overview
1114
+ - edge
1115
+
1116
+ components:
1117
+ Table:
1118
+ fitRootPerspectiveCamera:
1119
+ edge:
1120
+ priority: 4
1121
+ fov: 35
1122
+ near: 100
1123
+ far: 10000
1124
+ minDistance: 800
1125
+ maxDistance: 9000
1126
+ distance: 2000
1127
+ azimuthAngle: 0.5
1128
+ polarAngle: 1.15
1129
+ fitMeshChanges: true
1130
+ $filter:
1131
+ viewports: [desktop]
1132
+ viewStates: [edge]
1133
+ edgePhone:
1134
+ priority: 3
1135
+ fov: 35
1136
+ near: 100
1137
+ far: 10000
1138
+ minDistance: 800
1139
+ maxDistance: 12000
1140
+ distance: 3000
1141
+ azimuthAngle: 0.5
1142
+ polarAngle: 1.15
1143
+ fitMeshChanges: true
1144
+ $filter:
1145
+ viewports: [mobile]
1146
+ viewStates: [edge]
1147
+ ```
1148
+
1149
+ **The buttons.** `phx.frontend.useActiveViewState()` returns the active view state and `phx.frontend.useSetViewState()` a function that makes another one active; the camera then moves to the camera of that view state. `phx.frontend.useResetCamera()` returns a function that moves the camera back to the framing of the active camera, the whole table or the close-up:
1150
+
1151
+ ```tsx
1152
+ import { Box, Button, Tooltip } from '@mui/material'
1153
+
1154
+ // The spec's view states, each with the label of the button that shows it
1155
+ const VIEWS = [
1156
+ { state: 'overview', label: 'Whole table' },
1157
+ { state: 'edge', label: 'Edge close-up' },
1158
+ ] as const
1159
+
1160
+ const RESET_ICON = 'M4 12a8 8 0 1 0 2.4-5.7M4 4v4h4'
1161
+
1162
+ const SURFACE_SX = {
1163
+ borderRadius: 999,
1164
+ bgcolor: 'background.paper',
1165
+ boxShadow: '0 4px 16px rgba(0, 0, 0, 0.12)',
1166
+ } as const
1167
+
1168
+ const BUTTON_SX = {
1169
+ minBlockSize: 44,
1170
+ minInlineSize: 44,
1171
+ borderRadius: 999,
1172
+ textTransform: 'none',
1173
+ fontWeight: 600,
1174
+ whiteSpace: 'nowrap',
1175
+ } as const
1176
+
1177
+ interface SceneControlsProps {
1178
+ // The reset button shows only its icon, with its label as tooltip and accessible name
1179
+ readonly compact?: boolean
1180
+ // Only the reset button, without the view buttons
1181
+ readonly resetOnly?: boolean
1182
+ }
1183
+
1184
+ // The layout's own camera controls: one button per view state of the spec, and a reset that undoes an orbit
1185
+ export const SceneControls = ({ compact = false, resetOnly = false }: SceneControlsProps) => {
1186
+ const activeView = phx.frontend.useActiveViewState()
1187
+ const setViewState = phx.frontend.useSetViewState()
1188
+ const resetCamera = phx.frontend.useResetCamera()
1189
+ const resetIcon = (
1190
+ <svg viewBox="0 0 24 24" width={20} height={20} fill="none" stroke="currentColor" strokeWidth={2}>
1191
+ <path d={RESET_ICON} />
1192
+ </svg>
1193
+ )
1194
+
1195
+ return (
1196
+ <Box component="div" sx={{ display: 'flex', gap: 1 }}>
1197
+ {!resetOnly && (
1198
+ <Box component="div" role="group" aria-label="View" sx={{ ...SURFACE_SX, display: 'flex' }}>
1199
+ {VIEWS.map(view => {
1200
+ const isActive = activeView === view.state
1201
+
1202
+ return (
1203
+ <Button
1204
+ key={view.state}
1205
+ aria-pressed={isActive}
1206
+ onClick={() => setViewState(view.state)}
1207
+ sx={{
1208
+ ...BUTTON_SX,
1209
+ paddingInline: 2,
1210
+ bgcolor: isActive ? 'text.primary' : 'transparent',
1211
+ color: isActive ? 'background.paper' : 'text.primary',
1212
+ '&:hover': { bgcolor: isActive ? 'text.primary' : 'action.hover' },
1213
+ }}
1214
+ >
1215
+ {view.label}
1216
+ </Button>
1217
+ )
1218
+ })}
1219
+ </Box>
1220
+ )}
1221
+ <Tooltip title={compact ? 'Reset view' : ''}>
591
1222
  <Button
592
- size="large"
593
- variant="contained"
594
- disabled={disabled || isPending}
595
- onClick={run}
596
- startIcon={isPending ? <CircularProgress size={18} color="inherit" /> : undefined}
597
- sx={BUTTON_SX}
1223
+ onClick={resetCamera}
1224
+ aria-label={compact ? 'Reset view' : undefined}
1225
+ startIcon={compact ? undefined : resetIcon}
1226
+ sx={{
1227
+ ...SURFACE_SX,
1228
+ ...BUTTON_SX,
1229
+ paddingInline: compact ? 0 : 2,
1230
+ color: 'text.primary',
1231
+ '&:hover': { bgcolor: 'background.paper', boxShadow: '0 6px 20px rgba(0, 0, 0, 0.18)' },
1232
+ }}
598
1233
  >
599
- {isPending ? 'Sending the request…' : label}
1234
+ {compact ? resetIcon : 'Reset view'}
600
1235
  </Button>
601
- {disabled && hints && (
602
- <Typography variant="caption" color="text.secondary">
603
- {hints}
604
- </Typography>
605
- )}
606
- {error && <Alert severity="error">The request could not be sent: {error.message}</Alert>}
607
- </Box>
608
- <Button size="large" variant="outlined" disabled={isPending} onClick={onBack} sx={BUTTON_SX}>
609
- Back to the configuration
610
- </Button>
1236
+ </Tooltip>
611
1237
  </Box>
612
1238
  )
613
1239
  }
614
1240
  ```
615
1241
 
616
- - `run()` records the finalize-button click for analytics and runs the handler; it does nothing while `disabled` or `isPending`.
617
- - While `isPending` the button shows a spinner and cannot be clicked again, and **Back to the configuration** is disabled: leaving the review step then would let the confirmation arrive for a configuration that has changed since.
618
- - `error` is what the handler rejected with. The layout shows it under the button; no snackbar is raised. It is cleared when the customer tries again.
619
- - `disabled` and `hints` come from the configuration's violations: while a `warning` or worse holds, or the configuration failed to save, finalizing is not possible and `hints` says why.
620
-
621
- The review step stays: a quote request is a commitment, so the customer sees the summary first, and a real shop collects the contact details there. A product that finalizes without a review offers the button in place of **Review and request a quote**. [Configurator Interface → Hooks for a Project Layout](?path=/docs/phoenix-configurator-interface--docs#hooks-for-a-project-layout) describes the hook, and [Finalization](?path=/docs/phoenix-finalization--docs) what a real flow does on the server.
622
-
623
- ## Serve read mode
624
-
625
- While `accessInfo.viewMode` is `true` the panel marks the view as view only, replaces the cards with the chosen finish and shows the price without an action; the finalize action is not offered, since `useFinalizeAction` does not check read mode itself. The hooks do not hide or disable anything in read mode: what a viewer can change is decided by what the layout renders. Rotating and zooming the scene, and fullscreen, stay available, as [Interaction Modes](?path=/docs/ux-guidelines-interaction-modes--docs#view-only-mode) recommends.
1242
+ - The view buttons are a group with `aria-pressed`, so a screen reader announces which view is active, and the active one is drawn dark, not only in another colour.
1243
+ - On a desktop the controls sit at the bottom right of the free area and the toast above its bottom left; on a phone they sit at the bottom of the free area, just above the sheet. On a phone, and on a desktop arrangement below 1024 pixels, where `tablet` is also active and the free area beside the panel is narrow, **Reset view** shows only its icon, with its label as tooltip and accessible name.
1244
+ - In fullscreen the controls stay on a desktop. On a phone the view buttons are hidden and **Reset view** stays, as [Interaction Modes](?path=/docs/ux-guidelines-interaction-modes--docs#full-screen-preview) describes for the built-in layout: on a phone the canvas is small and the product comes first, and the way back to the framed product is still needed after an orbit.
1245
+ - The controls stay in the review step and in read mode: changing the view changes nothing in the configuration, and a viewer may look at the product as closely as the customer.
1246
+ - The hooks need no `viewControls` component. That component configures the built-in layout's view controls and has no effect here.
626
1247
 
627
1248
  ## The spec the layout reads
628
1249
 
629
- The layout reads four components of the root entity and its navigation states; the scene components are in the complete implementation below.
1250
+ The layout reads four components of the root entity and its navigation and view states; the scene components are in the complete implementation below. `SceneControls` names the view states `overview` and `edge` in its code, so they must match the spec's `viewStates`.
630
1251
 
631
1252
  ```yaml
632
1253
  navigationStates:
@@ -634,6 +1255,10 @@ navigationStates:
634
1255
  - checkout
635
1256
  - requested
636
1257
 
1258
+ viewStates:
1259
+ - overview
1260
+ - edge
1261
+
637
1262
  components:
638
1263
  Table:
639
1264
  detail:
@@ -678,34 +1303,52 @@ transformers:
678
1303
 
679
1304
  ## Try the example
680
1305
 
681
- To see read mode, open **Mocks** in the editor rail on the left and apply the **Read User** template.
1306
+ Each story names the mock template it opens with `args: { mockTemplate }`: **Example** and **Phone** open `default-user`, and **Read Mode** opens `read`. A template applied from the **Mocks** panel lasts until the story is opened again.
1307
+
1308
+ The same layout in a frame 390 pixels wide, as on a phone. Opened on its own from the sidebar, the **Phone** story sets Storybook's viewport to 390 × 844.
682
1309
 
683
1310
  ## Test cases
684
1311
 
685
1312
  - The panel is on the left and the table is centred in the area to the right of it, not in the whole canvas.
686
1313
  - Choosing **Tree trunk** moves the check mark to that card, changes the edge of the tabletop and raises the price from $1,290.00 to $1,630.00.
687
- - Choosing **Tree trunk** also shows "Tree trunk edges are cut by hand, so delivery takes three weeks longer." at the bottom of the free area, until its close button is clicked or six seconds pass. Choosing another finish shows nothing.
1314
+ - Choosing **Tree trunk** also shows "Tree trunk edges are cut by hand, so delivery takes three weeks longer." at the bottom left of the free area, above the view controls, until its close button is clicked or six seconds pass. Choosing another finish shows nothing.
688
1315
  - Tab reaches the selected card, and the arrow keys move the selection to the next or previous card.
689
1316
  - Dragging in the area to the right of the panel orbits the camera.
690
1317
  - **Review and request a quote** replaces the cards with the chosen finish and offers **Request a quote**; **Back to the configuration** brings the cards back.
691
1318
  - **Request a quote** shows a spinner and "Sending the request…" for about a second and a half, with **Back to the configuration** disabled, then "Thank you. Your quote request is on its way, and the shop replies within two working days."; **Back to the configuration** then returns to the cards.
692
1319
  - **Fullscreen** removes the panel and the table moves to the centre of the canvas; **Exit fullscreen** brings both back.
693
- - With the **Read User** mock the panel says **View only**, shows the chosen finish and the price, and has no button, so no quote can be requested.
1320
+ - In the **Read Mode** story the panel says **View only**, shows the chosen finish and the price, and has no button, so no quote can be requested; **Undo**, **Redo** and the button on the table's edge are not shown, and **Fullscreen**, the view buttons and **Reset view** work.
1321
+ - Applying **Host sets readonly** from the **Mocks** panel in the **Example** story shows the same read mode: **View only**, the chosen finish, no button in the panel, no **Undo**, **Redo** or button on the table's edge. Applying **Default User** brings the cards back.
1322
+ - **Undo** and **Redo** are disabled when the story opens. After choosing **Tree trunk**, **Undo** restores **Square** and $1,290.00 and enables **Redo**; **Redo** chooses **Tree trunk** again at $1,630.00.
1323
+ - **Undo** and **Redo** are not shown in the review step, in the confirmation or in fullscreen.
1324
+ - Clicking **Fullscreen** and **Exit fullscreen** each pushes the `fullscreenButton` user-action event, as an `AnalyticsService.push` line in the browser console shows: without a Google Tag Manager id, Storybook's analytics only log their events with `console.debug`, which the console shows only with its Verbose level enabled.
1325
+ - Entering fullscreen while **Request a quote** is pending and leaving it again shows the panel with the spinner still running, until the thank-you message appears.
1326
+ - A round button sits on the middle of the table's long edge. Clicking it opens the four finishes next to it; choosing **Round** there moves the check mark in the popover and in the panel, rounds the edge and raises the price to $1,410.00. Escape closes the popover.
1327
+ - Tab reaches the button on the edge, and Enter or Space opens the popover.
1328
+ - The button on the edge is gone in the review step, in the confirmation and in both read routes, and stays in fullscreen.
1329
+ - In the **Phone** story the panel is a sheet at the bottom showing the name, the price and **Review and request a quote**, and the whole table is visible above it.
1330
+ - Tapping the sheet's handle, or dragging it up, opens the sheet with the cards; the table moves up once the sheet has snapped and stays fully visible. Dragging the handle down, or tapping it again, collapses the sheet.
1331
+ - On the phone, the review step, **Request a quote** and the thank-you message work with the sheet collapsed and open.
1332
+ - On the phone, choosing **Tree trunk** shows the hint at the top of the free area, below the undo, redo and fullscreen buttons.
1333
+ - On the phone, the fullscreen button removes the sheet and the table moves to the centre of the canvas; pressing it again brings the sheet back in the position it had.
1334
+ - **Edge close-up** moves the camera close to the near corner of the top, where the edge profile shows; the button is drawn dark and the other light. **Whole table** returns to the whole table.
1335
+ - After dragging in the free area to orbit the table, **Reset view** returns to the framing of the active view, the whole table or the close-up.
1336
+ - The view buttons and **Reset view** sit at the bottom right of the free area on a desktop and just above the sheet on a phone, and overlap neither the panel, the sheet, the button on the edge nor the toast.
1337
+ - In fullscreen the view controls stay on a desktop. On a phone the view buttons are hidden and **Reset view** stays; after an orbit it restores the framing.
694
1338
 
695
1339
  ## Known gaps
696
1340
 
697
1341
  A project layout has only what it renders. This one leaves out the following, each of which a product may need. [Layout Slots](?path=/docs/phoenix-layout-slots--docs) describes every `LayoutSlots` member named here.
698
1342
 
699
- - **Phone width.** The panel is written for desktop: on a narrow screen it covers the scene. A phone layout puts the panel in a bottom sheet and moves the safe area above it.
700
- - **Messages that stay snackbars.** The toast shows violations, side effects and errors, and the finalize button shows its own error. A failure to save the configuration is still raised as a snackbar, which renders into `LayoutSlots.DesktopSnackbarsRoot`; this layout mounts no snackbar root, so it appears outside the configurator. A layout that wants it inside mounts the root.
701
- - **Toolbar actions.** Undo and redo, camera reset, measurements, sharing and language switching are not offered. A layout can mount `LayoutSlots.DesktopToolbar` for the toolbar the spec configures, or build its own buttons.
702
- - **View controls, tool controls and leaving a tool mode.** A spec can configure view controls and tool controls, and a tool mode has a button that leaves it. The built-in layout places them with `LayoutSlots.DesktopViewControls`, `LayoutSlots.DesktopToolControls` and `LayoutSlots.DesktopCallToAction`; this layout mounts none of them, so they do not appear.
1343
+ - **Messages that stay snackbars.** The toast shows violations, side effects, errors and failed saves, and the finalize button shows its own error. Two kinds of message stay snackbars. An error of a built-in action, such as one from `LayoutSlots.DesktopToolbar`, renders into `LayoutSlots.DesktopSnackbarsRoot`; this layout mounts neither, and a layout that mounts such an action mounts the root too, or the snackbar appears outside the configurator. A failure to start from a preset appears on the preset screen, before this layout mounts; a project replaces that screen with `phx.frontend.createPresetUi`, see [Configurator Interface → Preset UI](?path=/docs/phoenix-configurator-interface--docs#preset-ui).
1344
+ - **Toolbar actions.** Measurements, sharing and language switching are not offered; undo and redo are the layout's own buttons, see [Undo and redo](#undo-and-redo). A layout can mount `LayoutSlots.DesktopToolbar` for the toolbar the spec configures, or build its own buttons: `phx.frontend.useToolbarActions()` returns the spec's toolbar as runnable entries, and `phx.frontend.useUndoRedo()`, `useMeasurements()`, `useShareLinks()` and `useLocaleSwitch()` serve single actions, pushing the same analytics events as the built-in buttons; see [Configurator Interface → Hooks for a Project Layout](?path=/docs/phoenix-configurator-interface--docs#hooks-for-a-project-layout).
1345
+ - **The spec's view controls, tool controls and leaving a tool mode.** A spec can configure view controls and tool controls, and a tool mode has a button that leaves it. The built-in layout places them with `LayoutSlots.DesktopViewControls`, `LayoutSlots.DesktopToolControls` and `LayoutSlots.DesktopCallToAction`; this layout mounts none of them, so the spec's `viewControls` and `toolControls` do not appear. Its views come from its own buttons instead, see [Control the scene](#control-the-scene), and it has no tool modes.
703
1346
  - **A project's layout dialog.** A dialog the project registers with `phx.frontend.createLayoutDialog` is shown by `LayoutDialog`, which the built-in layout mounts. This layout does not; a layout that needs the dialog mounts `LayoutDialog` from `@salsita-ai/sdk/configurator`.
704
1347
  - **Selection.** The table has no parts to select. A product with selectable parts reads `phx.frontend.useSelectedDomainEntityId()` and shows the controls of the selected part.
705
- - **Clone to edit in read mode.** With `shareCloneToEdit` set, the built-in layout's `LayoutSlots.DesktopReadonlyBanner` offers **Edit configuration** to a viewer; this layout's "View only" label offers nothing. A layout mounts the banner, or builds its own action with `LayoutSlots.useIsCloningAllowed()` and `LayoutSlots.CloneToEditDialog`.
706
- - **Back and close.** The built-in header's back button returns to the product choice, runs the host's close action or leaves the expanded view, whichever applies. This layout has none of them. `useCloseAction()` from `@salsita-ai/sdk/configurator` returns the host's close action, or `null` when there is none; the hook that chooses among the three is not exported.
707
- - **Analytics.** The finalize button records `FinalizeButtonClicked` through `useFinalizeAction`. The built-in fullscreen button records `FullScreenModeToggled`; this layout's fullscreen and other buttons record nothing. A layout that wants the events pushes `FrontendAnalyticsFactory.FullScreenModeToggled()` and the like, from `@salsita-ai/sdk/configurator`, with `phx.frontend.useAnalytics().push(...)`.
708
- - **Preview start screen.** The built-in layout shows a preview while `usePreview().isPreview` is set, which `preview: auto` does on phones without the project opting in. This layout ignores it and always renders the interface.
1348
+ - **Clone to edit in read mode.** With `shareCloneToEdit` set, the built-in layout's `LayoutSlots.DesktopReadonlyBanner` offers **Edit configuration** to a viewer; this layout's "View only" label offers nothing. A layout mounts the banner, or builds its own action with `phx.frontend.useIsCloningAllowed()` and `LayoutSlots.CloneToEditDialog`. The example leaves it out because Storybook cannot show the result: the dialog creates and opens the copy, but the mock template keeps its `read-revision` access on every configuration it opens, so the copy opens in read mode again.
1349
+ - **Back and close.** The built-in header's back button returns to the product choice, runs the host's close action or leaves the expanded view, whichever applies. This layout has none of them. `phx.frontend.useCloseAction()` returns the host's close action, or `null` when there is none, as in this Storybook example; the hook that chooses among the three is not exported.
1350
+ - **Analytics.** The finalize button records `FinalizeButtonClicked` through `useFinalizeActions`, the cards record the attribute choice through `useAttributeSelection`, undo and redo record their events through `useUndoRedo`, and the fullscreen button records `FullScreenModeToggled` itself. The review step's navigation buttons, the view buttons, **Reset view**, the sheet's handle and the button on the table's edge record nothing. A layout that wants more events pushes them from `FrontendAnalyticsFactory`, from `@salsita-ai/sdk/configurator`, with `phx.frontend.useAnalytics().push(...)`, as [Offer fullscreen](#offer-fullscreen) does.
1351
+ - **Preview start screen.** The built-in layout shows a preview while `phx.frontend.usePreview().isPreview` is set, which `preview: auto` does on phones without the project opting in. This layout ignores it and always renders the interface.
709
1352
  - **Assistant panel.** A project layout gets it only with `LayoutSlots.DesktopSidebar`, the built-in sidebar as one piece, see [Sidebar in a Custom Layout](?path=/docs/layouts-sidebar-in-a-custom-layout--docs); this layout does not use it.
710
1353
  - **"Powered by Salsita" mark.** The built-in layout shows it; a project layout decides whether to mount `LayoutSlots.DesktopPoweredBy`, and this one does not.
711
1354
 
@@ -714,7 +1357,7 @@ A project layout has only what it renders. This one leaves out the following, ea
714
1357
  - [Configurator Interface → Loaded Configuration UI](?path=/docs/phoenix-configurator-interface--docs#loaded-configuration-ui) is the reference for the element name, the minimal layout, the SDK pieces a layout can mount and the hooks it reads.
715
1358
  - [Universal](?path=/docs/layouts-universal--docs) is the built-in layout this one replaces.
716
1359
  - [Header / Custom](?path=/docs/layouts-header-custom--docs) replaces only the header, with the price from `useRootEntityPrice()`.
717
- - [Canvas Padding](?path=/docs/layouts-canvas-padding--docs) scales the gaps `useSceneSafeArea()` measures.
1360
+ - [Canvas Padding](?path=/docs/layouts-canvas-padding--docs) scales the gaps `phx.frontend.useSceneSafeArea()` measures.
718
1361
  - [Presets / Custom](?path=/docs/layouts-presets-custom--docs) replaces the preset screen the same way.
719
1362
 
720
1363
  ## Complete Implementation
@@ -758,6 +1401,10 @@ navigationStates:
758
1401
  - checkout
759
1402
  - requested
760
1403
 
1404
+ viewStates:
1405
+ - overview
1406
+ - edge
1407
+
761
1408
  components:
762
1409
  Table:
763
1410
  detail:
@@ -793,9 +1440,18 @@ components:
793
1440
  title: Send the configuration to the shop for a quote
794
1441
  icon: PaperPlaneTilt
795
1442
  handler: requestQuote
1443
+ htmlHotspot:
1444
+ edgeFinish:
1445
+ name: EdgeFinishHotspot
1446
+ offsetX: 500
1447
+ offsetY: 800
1448
+ offsetZ: 0
1449
+ $filter:
1450
+ modes: [owner]
1451
+ navigationStates: [configure]
796
1452
  fitRootPerspectiveCamera:
797
1453
  main:
798
- priority: 1
1454
+ priority: 2
799
1455
  fov: 35
800
1456
  near: 100
801
1457
  far: 10000
@@ -805,6 +1461,49 @@ components:
805
1461
  azimuthAngle: 1.5
806
1462
  polarAngle: 1.1
807
1463
  fitMeshChanges: true
1464
+ $filter:
1465
+ viewports: [desktop]
1466
+ phone:
1467
+ priority: 1
1468
+ fov: 35
1469
+ near: 100
1470
+ far: 10000
1471
+ minDistance: 1000
1472
+ maxDistance: 12000
1473
+ distance: 8000
1474
+ azimuthAngle: 1.5
1475
+ polarAngle: 1.1
1476
+ fitMeshChanges: true
1477
+ $filter:
1478
+ viewports: [mobile]
1479
+ edge:
1480
+ priority: 4
1481
+ fov: 35
1482
+ near: 100
1483
+ far: 10000
1484
+ minDistance: 800
1485
+ maxDistance: 9000
1486
+ distance: 2000
1487
+ azimuthAngle: 0.5
1488
+ polarAngle: 1.15
1489
+ fitMeshChanges: true
1490
+ $filter:
1491
+ viewports: [desktop]
1492
+ viewStates: [edge]
1493
+ edgePhone:
1494
+ priority: 3
1495
+ fov: 35
1496
+ near: 100
1497
+ far: 10000
1498
+ minDistance: 800
1499
+ maxDistance: 12000
1500
+ distance: 3000
1501
+ azimuthAngle: 0.5
1502
+ polarAngle: 1.15
1503
+ fitMeshChanges: true
1504
+ $filter:
1505
+ viewports: [mobile]
1506
+ viewStates: [edge]
808
1507
  sceneEntityRemoteObject:
809
1508
  top:
810
1509
  fileUrl: /models/tables.gltf
@@ -852,13 +1551,177 @@ transformers:
852
1551
  - name: tree-trunk-delivery
853
1552
  ```
854
1553
 
1554
+ ### ./src/\_shared/BottomSheet.tsx
1555
+
1556
+ ```tsx
1557
+ import { Box, ButtonBase } from '@mui/material'
1558
+ import { type MouseEvent, type PointerEvent, type ReactNode, useRef } from 'react'
1559
+
1560
+ // A drag shorter than this is a tap, and the handle's click toggles the sheet
1561
+ const TAP_DISTANCE = 6
1562
+ // A drag that ends this far from where it started snaps to the other position
1563
+ const SNAP_DISTANCE = 48
1564
+ // A drag faster than this, in pixels per millisecond, snaps in its direction even when it is short
1565
+ const SNAP_VELOCITY = 0.5
1566
+ // How far the sheet follows the finger towards the position it is already in
1567
+ const OVERDRAG = 0.25
1568
+
1569
+ interface BottomSheetProps {
1570
+ readonly open: boolean
1571
+ readonly onOpenChange: (open: boolean) => void
1572
+ readonly label: string
1573
+ readonly children: ReactNode
1574
+ }
1575
+
1576
+ interface Drag {
1577
+ readonly startY: number
1578
+ readonly startTime: number
1579
+ delta: number
1580
+ }
1581
+
1582
+ // A persistent sheet at the bottom of the layout with two positions, open and collapsed. It is not a modal: the scene
1583
+ // above it stays interactive. Its height comes from its content, so the layout's safe area ends where the sheet
1584
+ // starts and changes only when the sheet snaps. While the handle is dragged the sheet follows the finger with a
1585
+ // transform, which the safe area does not see, so the camera refits once per snap and not on every move.
1586
+ export const BottomSheet = ({ open, onOpenChange, label, children }: BottomSheetProps) => {
1587
+ const sheetRef = useRef<HTMLElement>(null)
1588
+ const dragRef = useRef<Drag | null>(null)
1589
+ const draggedRef = useRef(false)
1590
+
1591
+ const moveSheet = (offset: number, animate: boolean) => {
1592
+ if (sheetRef.current) {
1593
+ sheetRef.current.style.transition = animate ? 'transform 200ms ease-out' : 'none'
1594
+ sheetRef.current.style.transform = offset === 0 ? '' : `translateY(${offset}px)`
1595
+ }
1596
+ }
1597
+
1598
+ const handlePointerDown = (event: PointerEvent<HTMLButtonElement>) => {
1599
+ event.currentTarget.setPointerCapture(event.pointerId)
1600
+ dragRef.current = { startY: event.clientY, startTime: event.timeStamp, delta: 0 }
1601
+ draggedRef.current = false
1602
+ }
1603
+
1604
+ const handlePointerMove = (event: PointerEvent<HTMLButtonElement>) => {
1605
+ const drag = dragRef.current
1606
+
1607
+ if (drag === null) {
1608
+ return
1609
+ }
1610
+
1611
+ drag.delta = event.clientY - drag.startY
1612
+ // Down closes an open sheet and up opens a collapsed one; the other direction only gives a little
1613
+ const towardsOther = open ? drag.delta > 0 : drag.delta < 0
1614
+ moveSheet(towardsOther ? drag.delta : drag.delta * OVERDRAG, false)
1615
+ }
1616
+
1617
+ const handlePointerEnd = (event: PointerEvent<HTMLButtonElement>) => {
1618
+ const drag = dragRef.current
1619
+ dragRef.current = null
1620
+
1621
+ if (drag === null) {
1622
+ return
1623
+ }
1624
+
1625
+ moveSheet(0, true)
1626
+
1627
+ if (Math.abs(drag.delta) < TAP_DISTANCE) {
1628
+ return
1629
+ }
1630
+
1631
+ draggedRef.current = true
1632
+ const velocity = drag.delta / Math.max(event.timeStamp - drag.startTime, 1)
1633
+ const flicked = Math.abs(drag.delta) >= SNAP_DISTANCE || Math.abs(velocity) >= SNAP_VELOCITY
1634
+
1635
+ if (flicked && (open ? drag.delta > 0 : drag.delta < 0)) {
1636
+ onOpenChange(!open)
1637
+ }
1638
+ }
1639
+
1640
+ // A tap, Enter or Space toggles the sheet. The pointer click that ends a drag has already been handled; a keyboard
1641
+ // click (`detail` 0) always toggles, also after a touch drag that was followed by no click.
1642
+ const handleClick = (event: MouseEvent<HTMLButtonElement>) => {
1643
+ const dragged = draggedRef.current
1644
+ draggedRef.current = false
1645
+
1646
+ if (dragged && event.detail !== 0) {
1647
+ return
1648
+ }
1649
+
1650
+ onOpenChange(!open)
1651
+ }
1652
+
1653
+ return (
1654
+ <Box
1655
+ component="section"
1656
+ ref={sheetRef}
1657
+ aria-label={label}
1658
+ sx={{
1659
+ position: 'relative',
1660
+ flexShrink: 0,
1661
+ display: 'flex',
1662
+ flexDirection: 'column',
1663
+ maxBlockSize: '55%',
1664
+ paddingBlockEnd: 'env(safe-area-inset-bottom)',
1665
+ borderStartStartRadius: 20,
1666
+ borderStartEndRadius: 20,
1667
+ bgcolor: 'background.paper',
1668
+ boxShadow: '0 -8px 32px rgba(0, 0, 0, 0.12)',
1669
+ // Fills the gap below the sheet while it is dragged up
1670
+ '&::after': {
1671
+ content: '""',
1672
+ position: 'absolute',
1673
+ insetInline: 0,
1674
+ insetBlockStart: '100%',
1675
+ blockSize: '100vh',
1676
+ bgcolor: 'background.paper',
1677
+ },
1678
+ }}
1679
+ >
1680
+ <ButtonBase
1681
+ aria-expanded={open}
1682
+ disableRipple
1683
+ aria-label={open ? `Collapse ${label.toLowerCase()}` : `Expand ${label.toLowerCase()}`}
1684
+ onClick={handleClick}
1685
+ onPointerDown={handlePointerDown}
1686
+ onPointerMove={handlePointerMove}
1687
+ onPointerUp={handlePointerEnd}
1688
+ onPointerCancel={handlePointerEnd}
1689
+ sx={{
1690
+ flexShrink: 0,
1691
+ blockSize: 36,
1692
+ touchAction: 'none',
1693
+ '&.Mui-focusVisible': { outline: 2, outlineColor: 'primary.main', outlineOffset: -4, borderRadius: 3 },
1694
+ }}
1695
+ >
1696
+ <Box component="span" sx={{ inlineSize: 40, blockSize: 4, borderRadius: 2, bgcolor: 'text.disabled' }} />
1697
+ </ButtonBase>
1698
+ {/* A column, so the panel's cards region shrinks first and the price and action stay in view; below the cards
1699
+ region's minimum height the content scrolls as a whole, as the review step does on a short phone */}
1700
+ <Box
1701
+ component="div"
1702
+ sx={{
1703
+ display: 'flex',
1704
+ flexDirection: 'column',
1705
+ flex: '1 1 auto',
1706
+ minBlockSize: 0,
1707
+ overflowY: 'auto',
1708
+ overscrollBehavior: 'contain',
1709
+ }}
1710
+ >
1711
+ {children}
1712
+ </Box>
1713
+ </Box>
1714
+ )
1715
+ }
1716
+ ```
1717
+
855
1718
  ### ./src/\_shared/EdgeFinishCards.tsx
856
1719
 
857
1720
  ```tsx
858
1721
  import { Box, ButtonBase, type SxProps, type Theme, Typography } from '@mui/material'
859
1722
  import type { KeyboardEvent } from 'react'
860
1723
 
861
- import { type UseAttributeSelection, useResolveLocalizable } from '@salsita-ai/sdk/react'
1724
+ import type { UseAttributeSelection } from '@salsita-ai/sdk/react'
862
1725
 
863
1726
  // Cross-sections of the tabletop's edge, keyed by the option values of the spec.
864
1727
  const EDGE_PROFILES: Readonly<Record<string, string>> = {
@@ -895,7 +1758,7 @@ interface EdgeFinishCardsProps {
895
1758
  }
896
1759
 
897
1760
  export const EdgeFinishCards = ({ selection }: EdgeFinishCardsProps) => {
898
- const resolve = useResolveLocalizable()
1761
+ const resolve = phx.frontend.useResolveLocalizable()
899
1762
  const { options } = selection
900
1763
  // The card in the tab order: the selected one, or the first enabled one. Disabled cards are never in it.
901
1764
  const selectedIndex = options.findIndex(option => option.value === selection.value && !option.disabled)
@@ -990,39 +1853,57 @@ export const EdgeFinishCards = ({ selection }: EdgeFinishCardsProps) => {
990
1853
  ### ./src/\_shared/FullscreenToggle.tsx
991
1854
 
992
1855
  ```tsx
993
- import { Button } from '@mui/material'
1856
+ import { Button, Tooltip } from '@mui/material'
994
1857
 
995
- import { phx } from '../../.phoenix/phx.js'
1858
+ import { FrontendAnalyticsFactory } from '@salsita-ai/sdk/configurator'
996
1859
 
997
1860
  const ENTER_ICON = 'M4 9V4h5M15 4h5v5M20 15v5h-5M9 20H4v-5'
998
1861
  const EXIT_ICON = 'M9 4v5H4M15 4v5h5M15 20v-5h5M9 20v-5H4'
999
1862
 
1000
- export const FullscreenToggle = () => {
1863
+ interface FullscreenToggleProps {
1864
+ // Only the icon, with the label as its accessible name and tooltip, where a label would cover the product
1865
+ readonly compact?: boolean
1866
+ }
1867
+
1868
+ export const FullscreenToggle = ({ compact = false }: FullscreenToggleProps) => {
1001
1869
  const isFullscreen = phx.frontend.useIsFullscreenActive()
1002
1870
  const setFullscreen = phx.frontend.useSetFullscreen()
1871
+ const analytics = phx.frontend.useAnalytics()
1872
+ const label = isFullscreen ? 'Exit fullscreen' : 'Fullscreen'
1873
+ const icon = (
1874
+ <svg viewBox="0 0 24 24" width={20} height={20} fill="none" stroke="currentColor" strokeWidth={2}>
1875
+ <path d={isFullscreen ? EXIT_ICON : ENTER_ICON} />
1876
+ </svg>
1877
+ )
1878
+
1879
+ // The same event the built-in fullscreen button records, for entering and for leaving
1880
+ const toggle = () => {
1881
+ analytics.push(FrontendAnalyticsFactory.FullScreenModeToggled())
1882
+ setFullscreen(!isFullscreen)
1883
+ }
1003
1884
 
1004
1885
  return (
1005
- <Button
1006
- onClick={() => setFullscreen(!isFullscreen)}
1007
- startIcon={
1008
- <svg viewBox="0 0 24 24" width={20} height={20} fill="none" stroke="currentColor" strokeWidth={2}>
1009
- <path d={isFullscreen ? EXIT_ICON : ENTER_ICON} />
1010
- </svg>
1011
- }
1012
- sx={{
1013
- minBlockSize: 44,
1014
- paddingInline: 2.5,
1015
- borderRadius: 999,
1016
- bgcolor: 'background.paper',
1017
- color: 'text.primary',
1018
- boxShadow: '0 4px 16px rgba(0, 0, 0, 0.12)',
1019
- textTransform: 'none',
1020
- fontWeight: 600,
1021
- '&:hover': { bgcolor: 'background.paper', boxShadow: '0 6px 20px rgba(0, 0, 0, 0.18)' },
1022
- }}
1023
- >
1024
- {isFullscreen ? 'Exit fullscreen' : 'Fullscreen'}
1025
- </Button>
1886
+ <Tooltip title={compact ? label : ''}>
1887
+ <Button
1888
+ onClick={toggle}
1889
+ aria-label={compact ? label : undefined}
1890
+ startIcon={compact ? undefined : icon}
1891
+ sx={{
1892
+ minBlockSize: 44,
1893
+ minInlineSize: 44,
1894
+ paddingInline: compact ? 0 : 2.5,
1895
+ borderRadius: 999,
1896
+ bgcolor: 'background.paper',
1897
+ color: 'text.primary',
1898
+ boxShadow: '0 4px 16px rgba(0, 0, 0, 0.12)',
1899
+ textTransform: 'none',
1900
+ fontWeight: 600,
1901
+ '&:hover': { bgcolor: 'background.paper', boxShadow: '0 6px 20px rgba(0, 0, 0, 0.18)' },
1902
+ }}
1903
+ >
1904
+ {compact ? icon : label}
1905
+ </Button>
1906
+ </Tooltip>
1026
1907
  )
1027
1908
  }
1028
1909
  ```
@@ -1035,8 +1916,6 @@ import { useEffect, useState } from 'react'
1035
1916
 
1036
1917
  import type { ConfiguratorMessage } from '@salsita-ai/sdk/react'
1037
1918
 
1038
- import { phx } from '../../.phoenix/phx.js'
1039
-
1040
1919
  const VIOLATION_SEVERITY = { fatal: 'error', fixable: 'error', warning: 'warning', notice: 'info' } as const
1041
1920
  const RANK = { info: 0, warning: 1, error: 2 } as const
1042
1921
  const VISIBLE_MS = 6000
@@ -1046,7 +1925,7 @@ const severityOf = (message: ConfiguratorMessage) => {
1046
1925
  return VIOLATION_SEVERITY[message.violation.severity]
1047
1926
  }
1048
1927
 
1049
- return message.kind === 'error' ? 'error' : 'info'
1928
+ return message.kind === 'error' || message.kind === 'saveError' ? 'error' : 'info'
1050
1929
  }
1051
1930
 
1052
1931
  export const MessageToast = () => {
@@ -1088,17 +1967,22 @@ export const MessageToast = () => {
1088
1967
  ```tsx
1089
1968
  import { Box, Button, Typography } from '@mui/material'
1090
1969
 
1091
- import { detailComponent, finalizeActionComponent } from '@salsita-ai/sdk/domain'
1092
- import { PhoenixHandlerBoundary, useResolveLocalizable } from '@salsita-ai/sdk/react'
1970
+ import { detailComponent } from '@salsita-ai/sdk/domain'
1093
1971
 
1094
- import { phx } from '../../.phoenix/phx.js'
1095
1972
  import { EdgeFinishCards } from './EdgeFinishCards.js'
1096
1973
  import { ReviewActions } from './ReviewActions.js'
1097
1974
 
1098
1975
  const BUTTON_SX = { minBlockSize: 48, borderRadius: 999, textTransform: 'none', fontWeight: 600 } as const
1099
1976
 
1100
- export const ProductPanel = () => {
1101
- const resolve = useResolveLocalizable()
1977
+ interface ProductPanelProps {
1978
+ // Only the name, the price and the action, for a collapsed bottom sheet
1979
+ readonly collapsed?: boolean
1980
+ // In a bottom sheet the cards region keeps the top of the cards in view, and the sheet scrolls when that does not fit
1981
+ readonly inSheet?: boolean
1982
+ }
1983
+
1984
+ export const ProductPanel = ({ collapsed = false, inSheet = false }: ProductPanelProps) => {
1985
+ const resolve = phx.frontend.useResolveLocalizable()
1102
1986
  const detail = phx.frontend.useFirstRootComponent(detailComponent)
1103
1987
  const price = phx.frontend.useRootEntityPrice()
1104
1988
  const tableId = phx.frontend.useRootEntityId()
@@ -1108,12 +1992,9 @@ export const ProductPanel = () => {
1108
1992
  const pushNavigate = phx.frontend.usePushNavigate()
1109
1993
  const popNavigate = phx.frontend.usePopNavigate()
1110
1994
  const navigate = phx.frontend.useNavigate()
1111
- const finalizeActions = phx.frontend.useComponents({ componentTypes: [finalizeActionComponent] }) ?? []
1112
1995
 
1113
1996
  const isReadMode = accessInfo.viewMode
1114
1997
  const isReview = isReadMode || navigationState !== 'configure'
1115
- // The spec's primary finalize action, or its first one
1116
- const quoteAction = finalizeActions.find(action => action.state.variant === 'primary') ?? finalizeActions[0]
1117
1998
  const chosenEdge = edgeFinish.options.find(option => option.value === edgeFinish.value)
1118
1999
 
1119
2000
  return (
@@ -1134,29 +2015,44 @@ export const ProductPanel = () => {
1134
2015
  <Typography variant="h5" component="h2" fontWeight={700}>
1135
2016
  {resolve(detail?.state.title)}
1136
2017
  </Typography>
1137
- <Typography variant="body2" color="text.secondary">
1138
- {resolve(detail?.state.description)}
1139
- </Typography>
1140
- </Box>
1141
-
1142
- <Box component="div" sx={{ display: 'grid', gap: 1.5, paddingInline: 3, paddingBlockEnd: 3, overflowY: 'auto' }}>
1143
- <Typography variant="subtitle2" component="h3">
1144
- Edge finish
1145
- </Typography>
1146
- {isReview ? (
1147
- <Box component="div" sx={{ padding: 2, borderRadius: 3, bgcolor: 'action.hover' }}>
1148
- <Typography variant="body2" fontWeight={600}>
1149
- {resolve(chosenEdge?.title)}
1150
- </Typography>
1151
- <Typography variant="caption" color="text.secondary">
1152
- {resolve(chosenEdge?.description)}
1153
- </Typography>
1154
- </Box>
1155
- ) : (
1156
- <EdgeFinishCards selection={edgeFinish} />
2018
+ {!collapsed && (
2019
+ <Typography variant="body2" color="text.secondary">
2020
+ {resolve(detail?.state.description)}
2021
+ </Typography>
1157
2022
  )}
1158
2023
  </Box>
1159
2024
 
2025
+ {!collapsed && (
2026
+ <Box
2027
+ component="div"
2028
+ sx={{
2029
+ display: 'grid',
2030
+ gap: 1.5,
2031
+ paddingInline: 3,
2032
+ paddingBlockEnd: 3,
2033
+ // In a short container the region shrinks and scrolls; a scroll past its end moves its container on
2034
+ minBlockSize: inSheet ? 120 : 0,
2035
+ overflowY: 'auto',
2036
+ }}
2037
+ >
2038
+ <Typography variant="subtitle2" component="h3">
2039
+ Edge finish
2040
+ </Typography>
2041
+ {isReview ? (
2042
+ <Box component="div" sx={{ padding: 2, borderRadius: 3, bgcolor: 'action.hover' }}>
2043
+ <Typography variant="body2" fontWeight={600}>
2044
+ {resolve(chosenEdge?.title)}
2045
+ </Typography>
2046
+ <Typography variant="caption" color="text.secondary">
2047
+ {resolve(chosenEdge?.description)}
2048
+ </Typography>
2049
+ </Box>
2050
+ ) : (
2051
+ <EdgeFinishCards selection={edgeFinish} />
2052
+ )}
2053
+ </Box>
2054
+ )}
2055
+
1160
2056
  <Box component="footer" sx={{ display: 'grid', gap: 2, padding: 3, borderTop: 1, borderColor: 'divider' }}>
1161
2057
  <Box component="div" sx={{ display: 'flex', alignItems: 'baseline', justifyContent: 'space-between' }}>
1162
2058
  <Typography variant="body2" color="text.secondary">
@@ -1176,19 +2072,7 @@ export const ProductPanel = () => {
1176
2072
  <Typography variant="body2" color="text.secondary">
1177
2073
  Your table is ready for a quote. A real shop collects the contact details here.
1178
2074
  </Typography>
1179
- {quoteAction ? (
1180
- <PhoenixHandlerBoundary name={quoteAction.state.handler}>
1181
- <ReviewActions
1182
- handler={quoteAction.state.handler}
1183
- label={resolve(quoteAction.state.label)}
1184
- onBack={popNavigate}
1185
- />
1186
- </PhoenixHandlerBoundary>
1187
- ) : (
1188
- <Button size="large" variant="outlined" onClick={popNavigate} sx={BUTTON_SX}>
1189
- Back to the configuration
1190
- </Button>
1191
- )}
2075
+ <ReviewActions onBack={popNavigate} />
1192
2076
  </>
1193
2077
  )}
1194
2078
  {!isReadMode && navigationState === 'requested' && (
@@ -1212,42 +2096,43 @@ export const ProductPanel = () => {
1212
2096
  ```tsx
1213
2097
  import { Alert, Box, Button, CircularProgress, Typography } from '@mui/material'
1214
2098
 
1215
- import { phx } from '../../.phoenix/phx.js'
1216
-
1217
2099
  const BUTTON_SX = { minBlockSize: 48, borderRadius: 999, textTransform: 'none', fontWeight: 600 } as const
1218
2100
 
1219
2101
  interface ReviewActionsProps {
1220
- readonly handler: string
1221
- readonly label: string
1222
2102
  readonly onBack: () => void
1223
2103
  }
1224
2104
 
1225
- // The review step's buttons: one finalize action and the way back. `useFinalizeAction` runs the action's handler,
1226
- // so this component calls it exactly once and is rendered inside a `PhoenixHandlerBoundary` for that handler.
1227
- // Back is disabled while the request is pending, so the confirmation never follows a configuration that changed.
1228
- export const ReviewActions = ({ handler, label, onBack }: ReviewActionsProps) => {
1229
- const { run, isPending, error, disabled, hints } = phx.frontend.useFinalizeAction(handler)
2105
+ // The review step's buttons: the spec's primary finalize action and the way back. `useFinalizeActions` runs the
2106
+ // action's handler beside the layout, so its pending state and error outlive this component: when the panel unmounts,
2107
+ // as in fullscreen, the request goes on and the remounted buttons still show it. Back is disabled while the request
2108
+ // is pending, so the customer cannot change the configuration while it is sent.
2109
+ export const ReviewActions = ({ onBack }: ReviewActionsProps) => {
2110
+ const { primary, hints } = phx.frontend.useFinalizeActions()
2111
+ const isPending = primary?.isPending ?? false
1230
2112
 
1231
2113
  return (
1232
2114
  <Box component="div" sx={{ display: 'grid', gap: 2 }}>
1233
- <Box component="div" sx={{ display: 'grid', gap: 1 }}>
1234
- <Button
1235
- size="large"
1236
- variant="contained"
1237
- disabled={disabled || isPending}
1238
- onClick={run}
1239
- startIcon={isPending ? <CircularProgress size={18} color="inherit" /> : undefined}
1240
- sx={BUTTON_SX}
1241
- >
1242
- {isPending ? 'Sending the request…' : label}
1243
- </Button>
1244
- {disabled && hints && (
1245
- <Typography variant="caption" color="text.secondary">
1246
- {hints}
1247
- </Typography>
1248
- )}
1249
- {error && <Alert severity="error">The request could not be sent: {error.message}</Alert>}
1250
- </Box>
2115
+ {primary && (
2116
+ <Box component="div" sx={{ display: 'grid', gap: 1 }}>
2117
+ <Button
2118
+ size="large"
2119
+ variant="contained"
2120
+ disabled={primary.disabled || isPending}
2121
+ onClick={() => void primary.run()}
2122
+ title={primary.title}
2123
+ startIcon={isPending ? <CircularProgress size={18} color="inherit" /> : undefined}
2124
+ sx={BUTTON_SX}
2125
+ >
2126
+ {isPending ? 'Sending the request…' : primary.label}
2127
+ </Button>
2128
+ {primary.disabled && hints && (
2129
+ <Typography variant="caption" color="text.secondary">
2130
+ {hints}
2131
+ </Typography>
2132
+ )}
2133
+ {primary.error && <Alert severity="error">The request could not be sent: {primary.error.message}</Alert>}
2134
+ </Box>
2135
+ )}
1251
2136
  <Button size="large" variant="outlined" disabled={isPending} onClick={onBack} sx={BUTTON_SX}>
1252
2137
  Back to the configuration
1253
2138
  </Button>
@@ -1256,30 +2141,204 @@ export const ReviewActions = ({ handler, label, onBack }: ReviewActionsProps) =>
1256
2141
  }
1257
2142
  ```
1258
2143
 
2144
+ ### ./src/\_shared/SceneControls.tsx
2145
+
2146
+ ```tsx
2147
+ import { Box, Button, Tooltip } from '@mui/material'
2148
+
2149
+ // The spec's view states, each with the label of the button that shows it
2150
+ const VIEWS = [
2151
+ { state: 'overview', label: 'Whole table' },
2152
+ { state: 'edge', label: 'Edge close-up' },
2153
+ ] as const
2154
+
2155
+ const RESET_ICON = 'M4 12a8 8 0 1 0 2.4-5.7M4 4v4h4'
2156
+
2157
+ const SURFACE_SX = {
2158
+ borderRadius: 999,
2159
+ bgcolor: 'background.paper',
2160
+ boxShadow: '0 4px 16px rgba(0, 0, 0, 0.12)',
2161
+ } as const
2162
+
2163
+ const BUTTON_SX = {
2164
+ minBlockSize: 44,
2165
+ minInlineSize: 44,
2166
+ borderRadius: 999,
2167
+ textTransform: 'none',
2168
+ fontWeight: 600,
2169
+ whiteSpace: 'nowrap',
2170
+ } as const
2171
+
2172
+ interface SceneControlsProps {
2173
+ // The reset button shows only its icon, with its label as tooltip and accessible name
2174
+ readonly compact?: boolean
2175
+ // Only the reset button, without the view buttons
2176
+ readonly resetOnly?: boolean
2177
+ }
2178
+
2179
+ // The layout's own camera controls: one button per view state of the spec, and a reset that undoes an orbit
2180
+ export const SceneControls = ({ compact = false, resetOnly = false }: SceneControlsProps) => {
2181
+ const activeView = phx.frontend.useActiveViewState()
2182
+ const setViewState = phx.frontend.useSetViewState()
2183
+ const resetCamera = phx.frontend.useResetCamera()
2184
+ const resetIcon = (
2185
+ <svg viewBox="0 0 24 24" width={20} height={20} fill="none" stroke="currentColor" strokeWidth={2}>
2186
+ <path d={RESET_ICON} />
2187
+ </svg>
2188
+ )
2189
+
2190
+ return (
2191
+ <Box component="div" sx={{ display: 'flex', gap: 1 }}>
2192
+ {!resetOnly && (
2193
+ <Box component="div" role="group" aria-label="View" sx={{ ...SURFACE_SX, display: 'flex' }}>
2194
+ {VIEWS.map(view => {
2195
+ const isActive = activeView === view.state
2196
+
2197
+ return (
2198
+ <Button
2199
+ key={view.state}
2200
+ aria-pressed={isActive}
2201
+ onClick={() => setViewState(view.state)}
2202
+ sx={{
2203
+ ...BUTTON_SX,
2204
+ paddingInline: 2,
2205
+ bgcolor: isActive ? 'text.primary' : 'transparent',
2206
+ color: isActive ? 'background.paper' : 'text.primary',
2207
+ '&:hover': { bgcolor: isActive ? 'text.primary' : 'action.hover' },
2208
+ }}
2209
+ >
2210
+ {view.label}
2211
+ </Button>
2212
+ )
2213
+ })}
2214
+ </Box>
2215
+ )}
2216
+ <Tooltip title={compact ? 'Reset view' : ''}>
2217
+ <Button
2218
+ onClick={resetCamera}
2219
+ aria-label={compact ? 'Reset view' : undefined}
2220
+ startIcon={compact ? undefined : resetIcon}
2221
+ sx={{
2222
+ ...SURFACE_SX,
2223
+ ...BUTTON_SX,
2224
+ paddingInline: compact ? 0 : 2,
2225
+ color: 'text.primary',
2226
+ '&:hover': { bgcolor: 'background.paper', boxShadow: '0 6px 20px rgba(0, 0, 0, 0.18)' },
2227
+ }}
2228
+ >
2229
+ {compact ? resetIcon : 'Reset view'}
2230
+ </Button>
2231
+ </Tooltip>
2232
+ </Box>
2233
+ )
2234
+ }
2235
+ ```
2236
+
2237
+ ### ./src/\_shared/UndoRedo.tsx
2238
+
2239
+ ```tsx
2240
+ import { Box, IconButton, Tooltip } from '@mui/material'
2241
+
2242
+ const UNDO_ICON = 'M9 14 4 9l5-5M4 9h10.5a5.5 5.5 0 0 1 0 11H11'
2243
+ const REDO_ICON = 'M15 14l5-5-5-5M20 9H9.5a5.5 5.5 0 0 0 0 11H13'
2244
+
2245
+ interface HistoryButtonProps {
2246
+ readonly label: string
2247
+ readonly icon: string
2248
+ readonly enabled: boolean
2249
+ readonly onClick: () => void
2250
+ }
2251
+
2252
+ const HistoryButton = ({ label, icon, enabled, onClick }: HistoryButtonProps) => (
2253
+ <Tooltip title={label}>
2254
+ {/* A disabled button fires no pointer events, so the span keeps the tooltip working */}
2255
+ <span>
2256
+ <IconButton
2257
+ aria-label={label}
2258
+ disabled={!enabled}
2259
+ onClick={onClick}
2260
+ sx={{ inlineSize: 44, blockSize: 44, color: 'text.primary' }}
2261
+ >
2262
+ <svg viewBox="0 0 24 24" width={20} height={20} fill="none" stroke="currentColor" strokeWidth={2}>
2263
+ <path d={icon} />
2264
+ </svg>
2265
+ </IconButton>
2266
+ </span>
2267
+ </Tooltip>
2268
+ )
2269
+
2270
+ // Undo and redo for the customer's choices. They change the configuration, so they are offered only where the cards
2271
+ // are: not to a viewer, and not in the review step, where the summary and a running request must not change under the
2272
+ // customer. `useUndoRedo` pushes the same analytics events as the built-in toolbar's buttons.
2273
+ export const UndoRedo = () => {
2274
+ const { canUndo, canRedo, undo, redo } = phx.frontend.useUndoRedo()
2275
+ const { accessInfo } = phx.frontend.useAccessService()
2276
+ const navigationState = phx.frontend.useActiveNavigationState()
2277
+
2278
+ if (accessInfo.viewMode || navigationState !== 'configure') {
2279
+ return null
2280
+ }
2281
+
2282
+ return (
2283
+ <Box
2284
+ component="div"
2285
+ role="group"
2286
+ aria-label="History"
2287
+ sx={{
2288
+ display: 'flex',
2289
+ borderRadius: 999,
2290
+ bgcolor: 'background.paper',
2291
+ boxShadow: '0 4px 16px rgba(0, 0, 0, 0.12)',
2292
+ }}
2293
+ >
2294
+ <HistoryButton label="Undo" icon={UNDO_ICON} enabled={canUndo} onClick={undo} />
2295
+ <HistoryButton label="Redo" icon={REDO_ICON} enabled={canRedo} onClick={redo} />
2296
+ </Box>
2297
+ )
2298
+ }
2299
+ ```
2300
+
1259
2301
  ### ./src/elements/ConfiguratorLayout.tsx
1260
2302
 
1261
2303
  ```tsx
1262
2304
  import { Box } from '@mui/material'
2305
+ import { useState } from 'react'
1263
2306
 
1264
- import { LayoutSlots, useSceneSafeArea } from '@salsita-ai/sdk/configurator'
2307
+ import { LayoutSlots } from '@salsita-ai/sdk/configurator'
1265
2308
 
1266
- import { phx } from '../../.phoenix/phx.js'
2309
+ import { BottomSheet } from '../_shared/BottomSheet.js'
1267
2310
  import { FullscreenToggle } from '../_shared/FullscreenToggle.js'
1268
2311
  import { MessageToast } from '../_shared/MessageToast.js'
1269
2312
  import { ProductPanel } from '../_shared/ProductPanel.js'
2313
+ import { SceneControls } from '../_shared/SceneControls.js'
2314
+ import { UndoRedo } from '../_shared/UndoRedo.js'
1270
2315
 
1271
2316
  const GUTTER = 24
1272
2317
  const PANEL_WIDTH = 380
2318
+ const PHONE_GUTTER = 16
2319
+ const TOUCH_TARGET = 44
1273
2320
 
1274
2321
  const ConfiguratorLayout = () => {
1275
- const { containerRef, safeAreaRef } = useSceneSafeArea()
2322
+ const { containerRef, safeAreaRef } = phx.frontend.useSceneSafeArea()
1276
2323
  const isFullscreen = phx.frontend.useIsFullscreenActive()
2324
+ // `null` until the container has been measured; the layout shows only the scene until then
2325
+ const viewports = phx.frontend.useActiveViewports()
2326
+ const [isSheetOpen, setSheetOpen] = useState(false)
2327
+
2328
+ const isDesktop = viewports?.includes('desktop') ?? false
2329
+ const gutter = isDesktop ? GUTTER : PHONE_GUTTER
1277
2330
 
1278
2331
  return (
1279
- <Box component="div" ref={containerRef} sx={{ position: 'absolute', inset: 0 }}>
2332
+ <Box
2333
+ component="div"
2334
+ ref={containerRef}
2335
+ // `clip`, not `hidden`: what overflows, such as the sheet's fill below its edge, can never be scrolled into view,
2336
+ // not even by the browser when the focus moves
2337
+ sx={{ position: 'absolute', inset: 0, display: 'flex', flexDirection: 'column', overflow: 'clip' }}
2338
+ >
1280
2339
  <LayoutSlots.SharedCanvas />
1281
2340
 
1282
- {!isFullscreen && (
2341
+ {viewports !== null && isDesktop && !isFullscreen && (
1283
2342
  <Box
1284
2343
  component="aside"
1285
2344
  sx={{
@@ -1293,37 +2352,80 @@ const ConfiguratorLayout = () => {
1293
2352
  borderRadius: 5,
1294
2353
  bgcolor: 'background.paper',
1295
2354
  boxShadow: '0 12px 40px rgba(0, 0, 0, 0.12)',
1296
- overflow: 'hidden',
2355
+ // A very short container, such as a phone held sideways, scrolls the panel instead of clipping its footer
2356
+ overflowX: 'hidden',
2357
+ overflowY: 'auto',
2358
+ overscrollBehavior: 'contain',
1297
2359
  }}
1298
2360
  >
1299
2361
  <ProductPanel />
1300
2362
  </Box>
1301
2363
  )}
1302
2364
 
1303
- <Box
1304
- component="div"
1305
- ref={safeAreaRef}
1306
- sx={{
1307
- position: 'absolute',
1308
- insetBlock: 0,
1309
- insetInlineStart: isFullscreen ? 0 : PANEL_WIDTH + 2 * GUTTER,
1310
- insetInlineEnd: 0,
1311
- pointerEvents: 'none',
1312
- }}
1313
- >
1314
- <Box
1315
- component="div"
1316
- sx={{ position: 'absolute', insetBlockStart: GUTTER, insetInlineEnd: GUTTER, pointerEvents: 'auto' }}
1317
- >
1318
- <FullscreenToggle />
1319
- </Box>
2365
+ {viewports !== null && (
1320
2366
  <Box
1321
2367
  component="div"
1322
- sx={{ position: 'absolute', insetBlockEnd: GUTTER, insetInlineStart: GUTTER, pointerEvents: 'auto' }}
2368
+ ref={safeAreaRef}
2369
+ sx={{
2370
+ // Desktop: right of the panel. Phone: above the sheet, whose height the column gives the rest.
2371
+ ...(isDesktop
2372
+ ? {
2373
+ position: 'absolute',
2374
+ insetBlock: 0,
2375
+ insetInlineStart: isFullscreen ? 0 : PANEL_WIDTH + 2 * GUTTER,
2376
+ insetInlineEnd: 0,
2377
+ }
2378
+ : { position: 'relative', flex: '1 1 0', minBlockSize: 0 }),
2379
+ pointerEvents: 'none',
2380
+ }}
1323
2381
  >
1324
- <MessageToast />
2382
+ <Box
2383
+ component="div"
2384
+ sx={{
2385
+ position: 'absolute',
2386
+ insetBlockStart: gutter,
2387
+ insetInlineEnd: gutter,
2388
+ display: 'flex',
2389
+ gap: 1,
2390
+ pointerEvents: 'auto',
2391
+ }}
2392
+ >
2393
+ {!isFullscreen && <UndoRedo />}
2394
+ <FullscreenToggle compact={!isDesktop} />
2395
+ </Box>
2396
+ <Box
2397
+ component="div"
2398
+ sx={{
2399
+ position: 'absolute',
2400
+ pointerEvents: 'auto',
2401
+ // Desktop: bottom left, above the row of view controls. Phone: at the top below the row of undo, redo and
2402
+ // fullscreen, clear of the sheet's handle and the view controls.
2403
+ ...(isDesktop
2404
+ ? { insetBlockEnd: 2 * GUTTER + TOUCH_TARGET, insetInlineStart: GUTTER }
2405
+ : { insetBlockStart: gutter + TOUCH_TARGET + gutter / 2, insetInline: gutter }),
2406
+ }}
2407
+ >
2408
+ <MessageToast />
2409
+ </Box>
2410
+ {/* A phone in fullscreen keeps only the reset, as the built-in layout does. Below 1024 pixels (`tablet`) the
2411
+ free area beside the panel is narrow, so the reset shows only its icon there too. */}
2412
+ <Box
2413
+ component="div"
2414
+ sx={{ position: 'absolute', insetBlockEnd: gutter, insetInlineEnd: gutter, pointerEvents: 'auto' }}
2415
+ >
2416
+ <SceneControls
2417
+ compact={!isDesktop || (viewports?.includes('tablet') ?? false)}
2418
+ resetOnly={!isDesktop && isFullscreen}
2419
+ />
2420
+ </Box>
1325
2421
  </Box>
1326
- </Box>
2422
+ )}
2423
+
2424
+ {viewports !== null && !isDesktop && !isFullscreen && (
2425
+ <BottomSheet open={isSheetOpen} onOpenChange={setSheetOpen} label="Product details">
2426
+ <ProductPanel collapsed={!isSheetOpen} inSheet />
2427
+ </BottomSheet>
2428
+ )}
1327
2429
  </Box>
1328
2430
  )
1329
2431
  }
@@ -1331,11 +2433,70 @@ const ConfiguratorLayout = () => {
1331
2433
  export default phx.frontend.createCustomPhoenixLayoutElement('ConfiguratorLayout', ConfiguratorLayout)
1332
2434
  ```
1333
2435
 
2436
+ ### ./src/elements/EdgeFinishHotspot.tsx
2437
+
2438
+ ```tsx
2439
+ import { Box, ButtonBase, Popover, Tooltip } from '@mui/material'
2440
+ import { useState } from 'react'
2441
+
2442
+ import { EdgeFinishCards } from '../_shared/EdgeFinishCards.js'
2443
+
2444
+ // The edge profile the button shows, the square edge of the cards' drawings
2445
+ const EDGE_ICON = 'M3 7H17L21 11V13L17 17H3Z'
2446
+
2447
+ // Rendered by the spec's `htmlHotspot` on the table's edge: a button on the product that opens the edge finishes
2448
+ // next to the edge, with the same cards as the panel. The spec's `$filter` decides when it is shown.
2449
+ export default phx.frontend.createCustomPhoenixEntityElement('EdgeFinishHotspot', ({ entityId }) => {
2450
+ const edgeFinish = phx.frontend.useAttributeSelection(entityId, 'edgeFinish')
2451
+ const [anchor, setAnchor] = useState<HTMLElement | null>(null)
2452
+
2453
+ return (
2454
+ <>
2455
+ <Tooltip title="Edge finish">
2456
+ <ButtonBase
2457
+ aria-label="Edge finish"
2458
+ aria-haspopup="dialog"
2459
+ aria-expanded={anchor !== null}
2460
+ onClick={event => setAnchor(event.currentTarget)}
2461
+ sx={{
2462
+ display: 'grid',
2463
+ placeItems: 'center',
2464
+ inlineSize: 44,
2465
+ blockSize: 44,
2466
+ borderRadius: '50%',
2467
+ bgcolor: 'background.paper',
2468
+ color: 'primary.main',
2469
+ boxShadow: '0 4px 16px rgba(0, 0, 0, 0.2)',
2470
+ '&.Mui-focusVisible': { outline: 2, outlineColor: 'primary.main', outlineOffset: 2 },
2471
+ }}
2472
+ >
2473
+ <svg viewBox="0 0 24 24" width={22} height={22} aria-hidden>
2474
+ <path d={EDGE_ICON} fill="currentColor" />
2475
+ </svg>
2476
+ </ButtonBase>
2477
+ </Tooltip>
2478
+ <Popover
2479
+ open={anchor !== null}
2480
+ anchorEl={anchor}
2481
+ onClose={() => setAnchor(null)}
2482
+ anchorOrigin={{ vertical: 'top', horizontal: 'center' }}
2483
+ transformOrigin={{ vertical: 'bottom', horizontal: 'center' }}
2484
+ slotProps={{
2485
+ paper: { role: 'dialog', 'aria-label': 'Edge finish', sx: { borderRadius: 4, marginBlockStart: -1 } },
2486
+ }}
2487
+ >
2488
+ <Box component="div" sx={{ inlineSize: 340, maxInlineSize: 'calc(100vw - 32px)', padding: 2 }}>
2489
+ <EdgeFinishCards selection={edgeFinish} />
2490
+ </Box>
2491
+ </Popover>
2492
+ </>
2493
+ )
2494
+ })
2495
+ ```
2496
+
1334
2497
  ### ./src/expressions/table.ts
1335
2498
 
1336
2499
  ```ts
1337
- import { phx } from '../../.phoenix/phx.js'
1338
-
1339
2500
  const EDGE_FINISH_SURCHARGE = { None: 0, Facet: 90, Round: 120, TreeTrunk: 340 }
1340
2501
 
1341
2502
  export default phx.domain.implementCustomExpressions({
@@ -1361,8 +2522,6 @@ export default phx.domain.implementCustomExpressions({
1361
2522
  ```ts
1362
2523
  import { useCallback } from 'react'
1363
2524
 
1364
- import { phx } from '../../.phoenix/phx.js'
1365
-
1366
2525
  // Stands in for the shop's quote service: the request takes a moment, then the panel shows the confirmation
1367
2526
  export default phx.frontend.createPhoenixHandler('requestQuote', () => {
1368
2527
  const navigate = phx.frontend.useNavigate()
@@ -1381,8 +2540,6 @@ export default phx.frontend.createPhoenixHandler('requestQuote', () => {
1381
2540
  ```ts
1382
2541
  import { msg } from '@lingui/core/macro'
1383
2542
 
1384
- import { phx } from '../../.phoenix/phx.js'
1385
-
1386
2543
  // A tree-trunk edge is cut by hand; choosing it carries a hint, which reaches the layout as a side-effect message
1387
2544
  export default phx.frontend.transformerBuilder.when
1388
2545
  .entity(['Table'])