@salsita-ai/sdk 0.50.0-develop.f101f4c3c9 → 0.50.0-develop.f354d3576d

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 (1542) hide show
  1. package/README.md +8 -2
  2. package/dist/admin/AdminShell.js +1 -1
  3. package/dist/admin/common/admin-interface.d.ts +1 -1
  4. package/dist/admin/legacy-admin/Application.js +1 -1
  5. package/dist/application/index.d.ts +1 -0
  6. package/dist/application/index.js +1 -1
  7. package/dist/application/mount-application.d.ts +1 -1
  8. package/dist/application/mount-application.js +1 -1
  9. package/dist/application/mount-configurator.d.ts +19 -0
  10. package/dist/application/mount-configurator.js +1 -0
  11. package/dist/application/mounted-application-runtime.d.ts +4 -0
  12. package/dist/application/mounted-application-runtime.js +1 -0
  13. package/dist/application/register-web-component.d.ts +2 -0
  14. package/dist/application/register-web-component.js +1 -0
  15. package/dist/application-spec/caching/index.d.ts +6 -1
  16. package/dist/application-spec/caching/index.js +1 -1
  17. package/dist/application-spec/core/enhanced-json-value.d.ts +2 -31
  18. package/dist/application-spec/core/enhanced-json-value.js +1 -1
  19. package/dist/application-spec/core/index.d.ts +1 -3
  20. package/dist/application-spec/core/index.js +1 -1
  21. package/dist/application-spec/core/json-schema.d.ts +2 -52
  22. package/dist/application-spec/core/markers/index.d.ts +1 -1
  23. package/dist/application-spec/core/markers/index.js +1 -1
  24. package/dist/application-spec/core/markers/msg-marker.d.ts +2 -28
  25. package/dist/application-spec/core/markers/msg-marker.js +1 -1
  26. package/dist/application-spec/core/markers/raw-eval-write-marker.d.ts +1 -1
  27. package/dist/application-spec/core/markers/raw-eval-write-marker.js +1 -1
  28. package/dist/application-spec/core/markers/raw-read-write-marker.js +1 -1
  29. package/dist/application-spec/errors/diagnostic-codes.d.ts +18 -1
  30. package/dist/application-spec/errors/diagnostic-codes.js +1 -1
  31. package/dist/application-spec/errors/diagnostic-messages.d.ts +26 -2
  32. package/dist/application-spec/errors/diagnostic-messages.js +1 -1
  33. package/dist/application-spec/generate-application/code/domain-runtime-files.d.ts +0 -19
  34. package/dist/application-spec/generate-application/code/domain-runtime-files.js +1 -1
  35. package/dist/application-spec/generate-application/code/project-scaffolding.js +2 -2
  36. package/dist/application-spec/generate-application/code/templates/application-types.js +6 -6
  37. package/dist/application-spec/generate-application/code/templates/common/doc-comment.d.ts +2 -0
  38. package/dist/application-spec/generate-application/code/templates/common/doc-comment.js +1 -0
  39. package/dist/application-spec/generate-application/code/templates/configurator-globals.d.ts +2 -1
  40. package/dist/application-spec/generate-application/code/templates/configurator-globals.js +19 -6
  41. package/dist/application-spec/generate-application/code/templates/gitignore.js +2 -1
  42. package/dist/application-spec/generate-application/code/templates/global-definition/generate-action-types.js +7 -7
  43. package/dist/application-spec/generate-application/code/templates/global-definition/generate-assistant-form-element-types.d.ts +12 -0
  44. package/dist/application-spec/generate-application/code/templates/global-definition/generate-assistant-form-element-types.js +7 -0
  45. package/dist/application-spec/generate-application/code/templates/global-definition/generate-phx-types.js +24 -22
  46. package/dist/application-spec/generate-application/code/templates/global-definition/index.d.ts +1 -0
  47. package/dist/application-spec/generate-application/code/templates/global-definition/index.js +1 -1
  48. package/dist/application-spec/generate-application/code/templates/index.d.ts +2 -6
  49. package/dist/application-spec/generate-application/code/templates/index.js +1 -1
  50. package/dist/application-spec/generate-application/code/templates/lingui-rc.js +5 -4
  51. package/dist/application-spec/generate-application/code/templates/skills/core/cli.d.ts +2 -0
  52. package/dist/application-spec/generate-application/code/templates/skills/core/cli.js +1 -0
  53. package/dist/application-spec/generate-application/code/templates/skills/core/index.d.ts +3 -0
  54. package/dist/application-spec/generate-application/code/templates/skills/core/index.js +1 -0
  55. package/dist/application-spec/generate-application/code/templates/skills/core/sdk.d.ts +2 -0
  56. package/dist/application-spec/generate-application/code/templates/skills/core/sdk.js +118 -0
  57. package/dist/application-spec/generate-application/code/templates/skills/core/workflow.d.ts +2 -0
  58. package/dist/application-spec/generate-application/code/templates/skills/core/workflow.js +44 -0
  59. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/application-states.d.ts +3 -0
  60. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/application-states.js +3 -0
  61. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/index.d.ts +1 -0
  62. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/index.js +1 -0
  63. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/navigation.d.ts +3 -0
  64. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/navigation.js +48 -0
  65. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/presets.d.ts +3 -0
  66. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/presets.js +38 -0
  67. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/selection.d.ts +3 -0
  68. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/selection.js +35 -0
  69. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/views-and-tools.d.ts +3 -0
  70. package/dist/application-spec/generate-application/code/templates/skills/features/application-states/views-and-tools.js +61 -0
  71. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/custom-layout.d.ts +3 -0
  72. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/custom-layout.js +7 -0
  73. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/finalization-actions.d.ts +3 -0
  74. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/finalization-actions.js +79 -0
  75. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/index.d.ts +1 -0
  76. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/index.js +1 -0
  77. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/messages.d.ts +3 -0
  78. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/messages.js +52 -0
  79. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/pages.d.ts +3 -0
  80. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/pages.js +49 -0
  81. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/scene-and-safe-area.d.ts +3 -0
  82. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/scene-and-safe-area.js +62 -0
  83. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/slots.d.ts +3 -0
  84. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/slots.js +40 -0
  85. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/tabs-and-steps.d.ts +3 -0
  86. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/tabs-and-steps.js +65 -0
  87. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/toolbar-actions.d.ts +3 -0
  88. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/toolbar-actions.js +58 -0
  89. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/view-mode.d.ts +3 -0
  90. package/dist/application-spec/generate-application/code/templates/skills/features/custom-layout/view-mode.js +41 -0
  91. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/control-components.d.ts +3 -0
  92. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/control-components.js +24 -0
  93. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/control-hooks.d.ts +3 -0
  94. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/control-hooks.js +44 -0
  95. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/custom-controls.d.ts +3 -0
  96. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/custom-controls.js +74 -0
  97. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/domain-controls.d.ts +3 -0
  98. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/domain-controls.js +8 -0
  99. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/index.d.ts +1 -0
  100. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/index.js +1 -0
  101. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/scene-controls.d.ts +3 -0
  102. package/dist/application-spec/generate-application/code/templates/skills/features/domain-controls/scene-controls.js +48 -0
  103. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/actions.d.ts +3 -0
  104. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/actions.js +64 -0
  105. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/components.d.ts +3 -0
  106. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/components.js +62 -0
  107. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/domain-model.d.ts +3 -0
  108. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/domain-model.js +1 -0
  109. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/entities-and-relations.d.ts +3 -0
  110. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/entities-and-relations.js +59 -0
  111. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/expressions.d.ts +3 -0
  112. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/expressions.js +46 -0
  113. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/index.d.ts +1 -0
  114. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/index.js +1 -0
  115. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/transformers.d.ts +3 -0
  116. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/transformers.js +43 -0
  117. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/validation-and-repair.d.ts +3 -0
  118. package/dist/application-spec/generate-application/code/templates/skills/features/domain-model/validation-and-repair.js +30 -0
  119. package/dist/application-spec/generate-application/code/templates/skills/features/features.d.ts +3 -0
  120. package/dist/application-spec/generate-application/code/templates/skills/features/features.js +1 -0
  121. package/dist/application-spec/generate-application/code/templates/skills/features/index.d.ts +1 -0
  122. package/dist/application-spec/generate-application/code/templates/skills/features/index.js +1 -0
  123. package/dist/application-spec/generate-application/code/templates/skills/features/inspection.d.ts +2 -0
  124. package/dist/application-spec/generate-application/code/templates/skills/features/inspection.js +1 -0
  125. package/dist/application-spec/generate-application/code/templates/skills/features/localization.d.ts +3 -0
  126. package/dist/application-spec/generate-application/code/templates/skills/features/localization.js +87 -0
  127. package/dist/application-spec/generate-application/code/templates/skills/features/scene-objects.d.ts +3 -0
  128. package/dist/application-spec/generate-application/code/templates/skills/features/scene-objects.js +43 -0
  129. package/dist/application-spec/generate-application/code/templates/skills/features/state/index.d.ts +1 -0
  130. package/dist/application-spec/generate-application/code/templates/skills/features/state/index.js +1 -0
  131. package/dist/application-spec/generate-application/code/templates/skills/features/state/slices.d.ts +3 -0
  132. package/dist/application-spec/generate-application/code/templates/skills/features/state/slices.js +48 -0
  133. package/dist/application-spec/generate-application/code/templates/skills/features/state/state.d.ts +3 -0
  134. package/dist/application-spec/generate-application/code/templates/skills/features/state/state.js +1 -0
  135. package/dist/application-spec/generate-application/code/templates/skills/features/state/updates.d.ts +3 -0
  136. package/dist/application-spec/generate-application/code/templates/skills/features/state/updates.js +39 -0
  137. package/dist/application-spec/generate-application/code/templates/skills/features/state/violations.d.ts +3 -0
  138. package/dist/application-spec/generate-application/code/templates/skills/features/state/violations.js +36 -0
  139. package/dist/application-spec/generate-application/code/templates/skills/features/variants.d.ts +2 -0
  140. package/dist/application-spec/generate-application/code/templates/skills/features/variants.js +1 -0
  141. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks.d.ts +2 -0
  142. package/dist/application-spec/generate-application/code/templates/skills/features/webhooks.js +1 -0
  143. package/dist/application-spec/generate-application/code/templates/skills/guide.d.ts +68 -0
  144. package/dist/application-spec/generate-application/code/templates/skills/guide.js +18 -0
  145. package/dist/application-spec/generate-application/code/templates/skills/phoenix-skill-bundle.d.ts +10 -0
  146. package/dist/application-spec/generate-application/code/templates/skills/phoenix-skill-bundle.js +14 -0
  147. package/dist/application-spec/generate-application/code/templates/skills/phx-members-without-guide.d.ts +9 -0
  148. package/dist/application-spec/generate-application/code/templates/skills/phx-members-without-guide.js +1 -0
  149. package/dist/application-spec/generate-application/code/templates/skills/processes/asset-conversion.d.ts +2 -0
  150. package/dist/application-spec/generate-application/code/templates/skills/processes/asset-conversion.js +23 -0
  151. package/dist/application-spec/generate-application/code/templates/skills/{phoenix-skill.d.ts → processes/beta.d.ts} +2 -1
  152. package/dist/application-spec/generate-application/code/templates/skills/processes/beta.js +4 -0
  153. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/evaluate.d.ts +2 -0
  154. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/evaluate.js +38 -0
  155. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/feedback.d.ts +3 -0
  156. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/feedback.js +1 -0
  157. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/index.d.ts +1 -0
  158. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/index.js +1 -0
  159. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/report.d.ts +2 -0
  160. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/report.js +7 -0
  161. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/send.d.ts +2 -0
  162. package/dist/application-spec/generate-application/code/templates/skills/processes/feedback/send.js +2 -0
  163. package/dist/application-spec/generate-application/code/templates/skills/processes/finalization.d.ts +2 -0
  164. package/dist/application-spec/generate-application/code/templates/skills/processes/finalization.js +2 -0
  165. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/build.d.ts +2 -0
  166. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/build.js +25 -0
  167. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/direction.d.ts +2 -0
  168. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/direction.js +35 -0
  169. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/first-draft.d.ts +3 -0
  170. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/first-draft.js +3 -0
  171. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/handoff.d.ts +2 -0
  172. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/handoff.js +9 -0
  173. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/index.d.ts +1 -0
  174. package/dist/application-spec/generate-application/code/templates/skills/processes/first-draft/index.js +1 -0
  175. package/dist/application-spec/generate-application/code/templates/skills/processes/index.d.ts +8 -0
  176. package/dist/application-spec/generate-application/code/templates/skills/processes/index.js +1 -0
  177. package/dist/application-spec/generate-application/code/templates/skills/processes/model-migration.d.ts +2 -0
  178. package/dist/application-spec/generate-application/code/templates/skills/processes/model-migration.js +1 -0
  179. package/dist/application-spec/generate-application/code/templates/skills/processes/review/appearance.d.ts +2 -0
  180. package/dist/application-spec/generate-application/code/templates/skills/processes/review/appearance.js +46 -0
  181. package/dist/application-spec/generate-application/code/templates/skills/processes/review/code.d.ts +2 -0
  182. package/dist/application-spec/generate-application/code/templates/skills/processes/review/code.js +2 -0
  183. package/dist/application-spec/generate-application/code/templates/skills/processes/review/hand-over.d.ts +2 -0
  184. package/dist/application-spec/generate-application/code/templates/skills/processes/review/hand-over.js +6 -0
  185. package/dist/application-spec/generate-application/code/templates/skills/processes/review/index.d.ts +1 -0
  186. package/dist/application-spec/generate-application/code/templates/skills/processes/review/index.js +1 -0
  187. package/dist/application-spec/generate-application/code/templates/skills/processes/review/review.d.ts +3 -0
  188. package/dist/application-spec/generate-application/code/templates/skills/processes/review/review.js +1 -0
  189. package/dist/application-spec/generate-application/code/templates/skills/processes/review/visual-inspection.d.ts +2 -0
  190. package/dist/application-spec/generate-application/code/templates/skills/processes/review/visual-inspection.js +13 -0
  191. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/branding.d.ts +2 -0
  192. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/branding.js +20 -0
  193. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/catalog.d.ts +2 -0
  194. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/catalog.js +1 -0
  195. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/index.d.ts +1 -0
  196. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/index.js +1 -0
  197. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/product-definition.d.ts +2 -0
  198. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/product-definition.js +22 -0
  199. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/specification.d.ts +3 -0
  200. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/specification.js +1 -0
  201. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/ux-guidelines.d.ts +2 -0
  202. package/dist/application-spec/generate-application/code/templates/skills/processes/specification/ux-guidelines.js +25 -0
  203. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.d.ts +51 -251
  204. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.js +3 -58
  205. package/dist/application-spec/generate-application/code/templates/skills/sdk-subpath-imports.d.ts +9 -0
  206. package/dist/application-spec/generate-application/code/templates/skills/sdk-subpath-imports.js +1 -0
  207. package/dist/application-spec/generate-application/code/templates/spec-code/collect-spec-code.d.ts +1 -1
  208. package/dist/application-spec/generate-application/code/templates/spec-code/collect-spec-code.js +1 -1
  209. package/dist/application-spec/generate-application/code/templates/story/wrapper.js +2 -4
  210. package/dist/application-spec/generate-application/code/templates/tsconfig.js +2 -1
  211. package/dist/application-spec/generate-application/index.d.ts +1 -6
  212. package/dist/application-spec/generate-application/index.js +1 -1
  213. package/dist/application-spec/parse-application-files/merge/merged-assistant.d.ts +13 -4
  214. package/dist/application-spec/parse-application-files/merge/merged-assistant.js +1 -1
  215. package/dist/application-spec/parse-application-files/merge/merged-infra.d.ts +4 -11
  216. package/dist/application-spec/parse-application-files/merge/merged-transformers.d.ts +2 -4
  217. package/dist/application-spec/parse-application-files/parse-application-files.js +1 -1
  218. package/dist/application-spec/parse-application-files/raw-spec/raw-acl.d.ts +2 -2
  219. package/dist/application-spec/parse-application-files/raw-spec/raw-acl.js +1 -1
  220. package/dist/application-spec/parse-application-files/raw-spec/raw-admin-pages.d.ts +3 -24
  221. package/dist/application-spec/parse-application-files/raw-spec/raw-assistant.d.ts +58 -23
  222. package/dist/application-spec/parse-application-files/raw-spec/raw-assistant.js +1 -1
  223. package/dist/application-spec/parse-application-files/raw-spec/raw-expressions.d.ts +1 -1
  224. package/dist/application-spec/parse-application-files/raw-spec/raw-expressions.js +1 -1
  225. package/dist/application-spec/parse-application-files/raw-spec/raw-resources.d.ts +19 -64
  226. package/dist/application-spec/parse-application-files/spec/application/admin-spec/admin-pages.d.ts +3 -20
  227. package/dist/application-spec/parse-application-files/spec/application/admin-spec/states.d.ts +3 -5
  228. package/dist/application-spec/parse-application-files/spec/application/configurator-spec/states.d.ts +3 -8
  229. package/dist/application-spec/parse-application-files/spec/components/bindings/read-binding.d.ts +3 -13
  230. package/dist/application-spec/parse-application-files/spec/components/bindings/write-binding.d.ts +4 -32
  231. package/dist/application-spec/parse-application-files/spec/components/component-filter.d.ts +4 -10
  232. package/dist/application-spec/parse-application-files/spec/components/components.d.ts +3 -4
  233. package/dist/application-spec/parse-application-files/spec/components/index.d.ts +1 -2
  234. package/dist/application-spec/parse-application-files/spec/components/index.js +1 -1
  235. package/dist/application-spec/parse-application-files/spec/components/sdk-component-entry.d.ts +1 -1
  236. package/dist/application-spec/parse-application-files/spec/components/user-component-entry.d.ts +2 -3
  237. package/dist/application-spec/parse-application-files/spec/components/user-component-entry.js +1 -1
  238. package/dist/application-spec/parse-application-files/spec/components/user-components.d.ts +2 -3
  239. package/dist/application-spec/parse-application-files/spec/expressions/expression-read-types.d.ts +2 -2
  240. package/dist/application-spec/parse-application-files/spec/expressions/expressions.d.ts +7 -29
  241. package/dist/application-spec/parse-application-files/spec/expressions/index.d.ts +0 -1
  242. package/dist/application-spec/parse-application-files/spec/expressions/memo-eval-plan.d.ts +4 -71
  243. package/dist/application-spec/parse-application-files/spec/expressions/memo-eval-plan.js +1 -1
  244. package/dist/application-spec/parse-application-files/spec/expressions/user-expressions.d.ts +2 -2
  245. package/dist/application-spec/parse-application-files/spec/invariants/invariant.d.ts +5 -21
  246. package/dist/application-spec/parse-application-files/spec/invariants/invariants.d.ts +4 -14
  247. package/dist/application-spec/parse-application-files/spec/model/aliases.d.ts +3 -9
  248. package/dist/application-spec/parse-application-files/spec/model/common-types.d.ts +6 -14
  249. package/dist/application-spec/parse-application-files/spec/model/defaults.d.ts +6 -31
  250. package/dist/application-spec/parse-application-files/spec/model/entity-types.d.ts +3 -8
  251. package/dist/application-spec/parse-application-files/spec/model/model-version-key.d.ts +3 -3
  252. package/dist/application-spec/parse-application-files/spec/model/names/action-name.d.ts +3 -7
  253. package/dist/application-spec/parse-application-files/spec/model/names/alias-name.d.ts +3 -7
  254. package/dist/application-spec/parse-application-files/spec/model/names/entity-or-alias-name.d.ts +3 -8
  255. package/dist/application-spec/parse-application-files/spec/model/names/entity-type-name.d.ts +3 -8
  256. package/dist/application-spec/parse-application-files/spec/model/names/expression-name.d.ts +3 -6
  257. package/dist/application-spec/parse-application-files/spec/model/names/instance-name.d.ts +3 -7
  258. package/dist/application-spec/parse-application-files/spec/model/names/invariant-name.d.ts +3 -3
  259. package/dist/application-spec/parse-application-files/spec/model/names/shape-property-name.d.ts +3 -11
  260. package/dist/application-spec/parse-application-files/spec/model/names/violation-type-name.d.ts +3 -3
  261. package/dist/application-spec/parse-application-files/spec/model/presets.d.ts +6 -29
  262. package/dist/application-spec/parse-application-files/spec/sections/actions.d.ts +6 -23
  263. package/dist/application-spec/parse-application-files/spec/sections/app-metadata.d.ts +3 -18
  264. package/dist/application-spec/parse-application-files/spec/sections/application-version.d.ts +3 -7
  265. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-form-elements.d.ts +9 -0
  266. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-form-elements.js +1 -0
  267. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-schema.d.ts +4 -1
  268. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-schema.js +1 -1
  269. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant.js +1 -1
  270. package/dist/application-spec/parse-application-files/spec/sections/data-spec/chunks.d.ts +6 -23
  271. package/dist/application-spec/parse-application-files/spec/sections/data-spec/custom-data-spec.d.ts +1 -16
  272. package/dist/application-spec/parse-application-files/spec/sections/data-spec/data-entry-key.d.ts +3 -9
  273. package/dist/application-spec/parse-application-files/spec/sections/data-spec/data-spec.d.ts +1 -10
  274. package/dist/application-spec/parse-application-files/spec/sections/data-spec/swatch-data-spec.d.ts +1 -14
  275. package/dist/application-spec/parse-application-files/spec/sections/state-value.d.ts +3 -7
  276. package/dist/application-spec/parse-application-files/spec/sections/theme.d.ts +3 -10
  277. package/dist/application-spec/parse-application-files/spec/sections/transformers.d.ts +4 -11
  278. package/dist/application-spec/parse-application-files/spec/sections/ui.d.ts +3 -12
  279. package/dist/client/authorized-client.d.ts +4 -2
  280. package/dist/client/authorized-client.js +1 -1
  281. package/dist/client/contract.d.ts +34 -4
  282. package/dist/client/contract.js +1 -1
  283. package/dist/client/index.d.ts +1 -1
  284. package/dist/client/local-authorized-client.d.ts +3 -1
  285. package/dist/client/local-authorized-client.js +1 -1
  286. package/dist/client/memory-authorized-client.d.ts +4 -1
  287. package/dist/client/memory-authorized-client.js +1 -1
  288. package/dist/client/phoenix-api.d.ts +279 -2
  289. package/dist/configurator/ConfiguratorApp.js +1 -1
  290. package/dist/configurator/app-loader-content/index.d.ts +0 -1
  291. package/dist/configurator/app-loader-content/index.js +1 -1
  292. package/dist/configurator/application-runtime/extensions/selectors.js +1 -1
  293. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-annotation.d.ts +31 -0
  294. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.d.ts +140 -27
  295. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.js +1 -1
  296. package/dist/configurator/application-runtime/extensions/systems/assistant-system/graphql-tools.d.ts +52 -9
  297. package/dist/configurator/application-runtime/extensions/systems/assistant-system/graphql-tools.js +1 -1
  298. package/dist/configurator/application-runtime/extensions/systems/camera-control-system/camera-control-system.d.ts +43 -0
  299. package/dist/configurator/application-runtime/extensions/systems/camera-control-system/camera-control-system.js +1 -1
  300. package/dist/configurator/application-runtime/extensions/systems/canvas-system.d.ts +8 -0
  301. package/dist/configurator/application-runtime/extensions/systems/canvas-system.js +1 -1
  302. package/dist/configurator/application-runtime/extensions/systems/export-system/export-busy-error.d.ts +8 -0
  303. package/dist/configurator/application-runtime/extensions/systems/export-system/export-busy-error.js +1 -0
  304. package/dist/configurator/application-runtime/extensions/systems/export-system/export-system.d.ts +23 -1
  305. package/dist/configurator/application-runtime/extensions/systems/export-system/export-system.js +1 -1
  306. package/dist/configurator/application-runtime/extensions/systems/graphql-system/entity-meta.d.ts +82 -55
  307. package/dist/configurator/application-runtime/extensions/systems/graphql-system/entity-meta.js +1 -1
  308. package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.d.ts +73 -5
  309. package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.js +1 -1
  310. package/dist/configurator/application-runtime/extensions/systems/graphql-system/violations.d.ts +40 -0
  311. package/dist/configurator/application-runtime/extensions/systems/graphql-system/violations.js +1 -0
  312. package/dist/configurator/application-runtime/extensions/systems/image-rendering-system/capture-next-frame.d.ts +10 -0
  313. package/dist/configurator/application-runtime/extensions/systems/image-rendering-system/capture-next-frame.js +1 -0
  314. package/dist/configurator/application-runtime/extensions/systems/image-rendering-system/image-rendering-system.d.ts +22 -5
  315. package/dist/configurator/application-runtime/extensions/systems/image-rendering-system/image-rendering-system.js +1 -1
  316. package/dist/configurator/application-runtime/extensions/systems/index.d.ts +3 -2
  317. package/dist/configurator/application-runtime/extensions/systems/index.js +1 -1
  318. package/dist/configurator/common/configurator-interface.d.ts +10 -7
  319. package/dist/configurator/common/configurator-interface.js +1 -1
  320. package/dist/configurator/configuration-not-found-page/BuiltInConfigurationNotFoundPage.d.ts +5 -0
  321. package/dist/configurator/configuration-not-found-page/BuiltInConfigurationNotFoundPage.js +1 -0
  322. package/dist/configurator/configuration-not-found-page/ConfigurationNotFoundPageElement.d.ts +0 -6
  323. package/dist/configurator/configuration-not-found-page/ConfigurationNotFoundPageElement.js +1 -1
  324. package/dist/configurator/configuration-not-found-page/index.d.ts +2 -2
  325. package/dist/configurator/configuration-not-found-page/index.js +1 -1
  326. package/dist/configurator/configurator-context/PreviewContextProvider.js +1 -1
  327. package/dist/configurator/configurator-context/configurator-hooks/index.d.ts +0 -1
  328. package/dist/configurator/configurator-context/configurator-hooks/index.js +1 -1
  329. package/dist/configurator/configurator-context/configurator-hooks/layout-hooks.js +1 -1
  330. package/dist/configurator/configurator-context/index.d.ts +0 -5
  331. package/dist/configurator/configurator-context/index.js +1 -1
  332. package/dist/configurator/configurator-error-page/BuiltInConfiguratorErrorPage.d.ts +3 -3
  333. package/dist/configurator/configurator-error-page/BuiltInConfiguratorErrorPage.js +1 -1
  334. package/dist/configurator/configurator-error-page/ConfiguratorErrorPageElement.d.ts +0 -5
  335. package/dist/configurator/configurator-error-page/ConfiguratorErrorPageElement.js +1 -1
  336. package/dist/configurator/configurator-error-page/index.d.ts +1 -2
  337. package/dist/configurator/configurator-error-page/index.js +1 -1
  338. package/dist/configurator/index.d.ts +9 -2
  339. package/dist/configurator/index.js +1 -1
  340. package/dist/configurator/pages/ConfiguratorNotFoundPage.js +1 -1
  341. package/dist/configurator/pages/LoadedConfiguratorDetailPage.js +1 -1
  342. package/dist/configurator/pages/NewConfiguratorPage.js +1 -1
  343. package/dist/configurator/pages/default-configurator-elements.d.ts +6 -2
  344. package/dist/configurator/pages/default-configurator-elements.js +1 -1
  345. package/dist/configurator/pages/error-boundaries/BuiltInGeneralErrorFallback.d.ts +5 -0
  346. package/dist/configurator/pages/error-boundaries/BuiltInGeneralErrorFallback.js +1 -0
  347. package/dist/configurator/pages/error-boundaries/DevContextFallback.js +1 -1
  348. package/dist/configurator/pages/error-boundaries/DevLoadingFallback.js +1 -1
  349. package/dist/configurator/pages/error-boundaries/LoadingErrorBoundary.js +1 -1
  350. package/dist/configurator/pages/error-boundaries/index.d.ts +1 -0
  351. package/dist/configurator/pages/error-boundaries/index.js +1 -1
  352. package/dist/configurator/{configurator-context → pages/provider-slots}/ConfiguratorResponsiveProvider.d.ts +3 -3
  353. package/dist/configurator/pages/provider-slots/ConfiguratorResponsiveProvider.js +1 -0
  354. package/dist/configurator/pages/provider-slots/ContainerSlotProvider.d.ts +3 -0
  355. package/dist/configurator/pages/provider-slots/ContainerSlotProvider.js +1 -0
  356. package/dist/configurator/pages/provider-slots/LoaderSlotProvider.d.ts +3 -0
  357. package/dist/configurator/pages/provider-slots/LoaderSlotProvider.js +1 -0
  358. package/dist/configurator/pages/provider-slots/MessageHostSlotProvider.d.ts +3 -0
  359. package/dist/configurator/pages/provider-slots/MessageHostSlotProvider.js +1 -0
  360. package/dist/configurator/pages/provider-slots/SceneResourcesSlotProvider.d.ts +3 -0
  361. package/dist/configurator/pages/provider-slots/SceneResourcesSlotProvider.js +1 -0
  362. package/dist/configurator/pages/provider-slots/ThemeSlotProvider.d.ts +3 -0
  363. package/dist/configurator/pages/provider-slots/ThemeSlotProvider.js +1 -0
  364. package/dist/configurator/pages/provider-slots/configurator-provider-slot-elements.d.ts +3 -0
  365. package/dist/configurator/pages/provider-slots/configurator-provider-slot-elements.js +1 -0
  366. package/dist/configurator/pages/provider-slots/index.d.ts +6 -0
  367. package/dist/configurator/pages/provider-slots/index.js +1 -0
  368. package/dist/configurator/pages/ui-elements/BuiltInInvalidDeploymentReload.d.ts +2 -0
  369. package/dist/configurator/pages/ui-elements/BuiltInInvalidDeploymentReload.js +1 -0
  370. package/dist/configurator/pages/ui-elements/configurator-ui-elements.d.ts +3 -0
  371. package/dist/configurator/pages/ui-elements/configurator-ui-elements.js +1 -0
  372. package/dist/configurator/pages/ui-elements/index.d.ts +2 -0
  373. package/dist/configurator/pages/ui-elements/index.js +1 -0
  374. package/dist/configurator/scene/cameras/CameraPadding.js +1 -1
  375. package/dist/configurator/ui/assistant/AssistantChips.d.ts +13 -2
  376. package/dist/configurator/ui/assistant/AssistantChips.js +1 -1
  377. package/dist/configurator/ui/assistant/AssistantComposer.d.ts +6 -0
  378. package/dist/configurator/ui/assistant/AssistantComposer.js +2 -1
  379. package/dist/configurator/ui/assistant/AssistantMarkdown.js +1 -1
  380. package/dist/configurator/ui/assistant/AssistantThread.d.ts +4 -3
  381. package/dist/configurator/ui/assistant/AssistantThread.js +1 -1
  382. package/dist/configurator/ui/assistant/alert/AssistantAlert.d.ts +4 -1
  383. package/dist/configurator/ui/assistant/alert/AssistantAlert.js +1 -1
  384. package/dist/configurator/ui/assistant/annotation/AnnotationBadge.d.ts +9 -0
  385. package/dist/configurator/ui/assistant/annotation/AnnotationBadge.js +1 -0
  386. package/dist/configurator/ui/assistant/annotation/AnnotationOverlay.d.ts +6 -0
  387. package/dist/configurator/ui/assistant/annotation/AnnotationOverlay.js +1 -0
  388. package/dist/configurator/ui/assistant/annotation/AnnotationPin.d.ts +14 -0
  389. package/dist/configurator/ui/assistant/annotation/AnnotationPin.js +1 -0
  390. package/dist/configurator/ui/assistant/annotation/AnnotationViewer.d.ts +12 -0
  391. package/dist/configurator/ui/assistant/annotation/AnnotationViewer.js +1 -0
  392. package/dist/configurator/ui/assistant/annotation/MessageAnnotations.d.ts +11 -0
  393. package/dist/configurator/ui/assistant/annotation/MessageAnnotations.js +1 -0
  394. package/dist/configurator/ui/assistant/annotation/annotation-host-context.d.ts +5 -0
  395. package/dist/configurator/ui/assistant/annotation/annotation-host-context.js +1 -0
  396. package/dist/configurator/ui/assistant/annotation/annotation-layout.d.ts +26 -0
  397. package/dist/configurator/ui/assistant/annotation/annotation-layout.js +1 -0
  398. package/dist/configurator/ui/assistant/annotation/editor/AnnotationComment.d.ts +15 -0
  399. package/dist/configurator/ui/assistant/annotation/editor/AnnotationComment.js +1 -0
  400. package/dist/configurator/ui/assistant/annotation/editor/AnnotationEditor.d.ts +18 -0
  401. package/dist/configurator/ui/assistant/annotation/editor/AnnotationEditor.js +1 -0
  402. package/dist/configurator/ui/assistant/annotation/editor/annotation-drawing.d.ts +22 -0
  403. package/dist/configurator/ui/assistant/annotation/editor/annotation-drawing.js +1 -0
  404. package/dist/configurator/ui/assistant/annotation/editor/annotation-pins.d.ts +22 -0
  405. package/dist/configurator/ui/assistant/annotation/editor/annotation-pins.js +1 -0
  406. package/dist/configurator/ui/assistant/annotation/editor/flatten-annotation.d.ts +17 -0
  407. package/dist/configurator/ui/assistant/annotation/editor/flatten-annotation.js +1 -0
  408. package/dist/configurator/ui/assistant/annotation/editor/index.d.ts +1 -0
  409. package/dist/configurator/ui/assistant/annotation/editor/index.js +1 -0
  410. package/dist/configurator/ui/assistant/annotation/index.d.ts +4 -0
  411. package/dist/configurator/ui/assistant/annotation/index.js +1 -0
  412. package/dist/configurator/ui/assistant/annotation/prefers-reduced-motion.d.ts +2 -0
  413. package/dist/configurator/ui/assistant/annotation/prefers-reduced-motion.js +1 -0
  414. package/dist/configurator/ui/assistant/annotation/use-end-on-unmount.d.ts +6 -0
  415. package/dist/configurator/ui/assistant/annotation/use-end-on-unmount.js +1 -0
  416. package/dist/configurator/ui/assistant/assistant-failure.d.ts +15 -7
  417. package/dist/configurator/ui/assistant/assistant-failure.js +1 -1
  418. package/dist/configurator/ui/assistant/attachments/MessageImages.d.ts +19 -0
  419. package/dist/configurator/ui/assistant/attachments/MessageImages.js +1 -0
  420. package/dist/configurator/ui/assistant/attachments/index.d.ts +2 -0
  421. package/dist/configurator/ui/assistant/attachments/index.js +1 -0
  422. package/dist/configurator/ui/assistant/attachments/prepare-image.d.ts +24 -0
  423. package/dist/configurator/ui/assistant/attachments/prepare-image.js +1 -0
  424. package/dist/configurator/ui/assistant/composer/composer-frame.d.ts +15 -0
  425. package/dist/configurator/ui/assistant/composer/composer-frame.js +1 -0
  426. package/dist/configurator/ui/assistant/composer/index.d.ts +1 -0
  427. package/dist/configurator/ui/assistant/composer/index.js +1 -0
  428. package/dist/configurator/ui/assistant/entity-link/AssistantEntityLink.js +1 -1
  429. package/dist/configurator/ui/assistant/form/AssistantForm.js +1 -1
  430. package/dist/configurator/ui/assistant/form/compose-answer.d.ts +1 -2
  431. package/dist/configurator/ui/assistant/form/compose-answer.js +1 -1
  432. package/dist/configurator/ui/assistant/form/form-model.d.ts +1 -3
  433. package/dist/configurator/ui/assistant/form/form-state.d.ts +1 -1
  434. package/dist/configurator/ui/assistant/form/index.d.ts +2 -0
  435. package/dist/configurator/ui/assistant/form/index.js +1 -1
  436. package/dist/configurator/ui/assistant/form/parse-form-block.d.ts +1 -1
  437. package/dist/configurator/ui/assistant/form/parse-form-block.js +1 -1
  438. package/dist/configurator/ui/assistant/form/read-form-attributes.d.ts +1 -1
  439. package/dist/configurator/ui/assistant/form/read-form-attributes.js +1 -1
  440. package/dist/configurator/ui/assistant/form/registry/built-in-form-elements.d.ts +29 -0
  441. package/dist/configurator/ui/assistant/form/registry/built-in-form-elements.js +1 -0
  442. package/dist/configurator/ui/assistant/form/registry/create-assistant-form-element.d.ts +31 -0
  443. package/dist/configurator/ui/assistant/form/registry/create-assistant-form-element.js +1 -0
  444. package/dist/configurator/ui/assistant/form/{form-element-definition.d.ts → registry/form-element-definition.d.ts} +3 -1
  445. package/dist/configurator/ui/assistant/form/registry/form-element-definition.js +1 -0
  446. package/dist/configurator/ui/assistant/form/{form-registry.d.ts → registry/form-registry.d.ts} +1 -1
  447. package/dist/configurator/ui/assistant/form/registry/form-registry.js +1 -0
  448. package/dist/configurator/ui/assistant/form/registry/index.d.ts +6 -0
  449. package/dist/configurator/ui/assistant/form/registry/index.js +1 -0
  450. package/dist/configurator/ui/assistant/form/registry/use-form-registry.d.ts +8 -0
  451. package/dist/configurator/ui/assistant/form/registry/use-form-registry.js +1 -0
  452. package/dist/configurator/ui/assistant/form-elements/FormCard.d.ts +1 -1
  453. package/dist/configurator/ui/assistant/form-elements/FormCard.js +1 -1
  454. package/dist/configurator/ui/assistant/form-elements/FormNumber.js +1 -1
  455. package/dist/configurator/ui/assistant/form-elements/FormReply.d.ts +1 -1
  456. package/dist/configurator/ui/assistant/form-elements/FormReply.js +1 -1
  457. package/dist/configurator/ui/assistant/form-elements/FormSwatch.d.ts +1 -1
  458. package/dist/configurator/ui/assistant/form-elements/FormSwatch.js +1 -1
  459. package/dist/configurator/ui/assistant/form-elements/form-element-props.d.ts +5 -5
  460. package/dist/configurator/ui/assistant/index.d.ts +4 -0
  461. package/dist/configurator/ui/assistant/index.js +1 -1
  462. package/dist/configurator/ui/assistant/popover/AssistantPopover.d.ts +24 -0
  463. package/dist/configurator/ui/assistant/popover/AssistantPopover.js +1 -0
  464. package/dist/configurator/ui/assistant/popover/index.d.ts +1 -0
  465. package/dist/configurator/ui/assistant/popover/index.js +1 -0
  466. package/dist/configurator/ui/assistant/reference-link/AssistantReferenceLink.js +1 -1
  467. package/dist/configurator/ui/assistant/reference-link/reference-styles.js +1 -1
  468. package/dist/configurator/ui/assistant/screenshots/ScreenshotThumbnails.d.ts +9 -0
  469. package/dist/configurator/ui/assistant/screenshots/ScreenshotThumbnails.js +1 -0
  470. package/dist/configurator/ui/assistant/screenshots/index.d.ts +3 -0
  471. package/dist/configurator/ui/assistant/screenshots/index.js +1 -0
  472. package/dist/configurator/ui/assistant/screenshots/tool-screenshots.d.ts +16 -0
  473. package/dist/configurator/ui/assistant/screenshots/tool-screenshots.js +1 -0
  474. package/dist/configurator/ui/assistant/screenshots/use-screenshot-src.d.ts +8 -0
  475. package/dist/configurator/ui/assistant/screenshots/use-screenshot-src.js +1 -0
  476. package/dist/configurator/ui/assistant/streamed-markdown.d.ts +11 -0
  477. package/dist/configurator/ui/assistant/streamed-markdown.js +2 -2
  478. package/dist/configurator/ui/assistant/thread-items.d.ts +5 -0
  479. package/dist/configurator/ui/assistant/thread-items.js +1 -1
  480. package/dist/configurator/ui/assistant/tool-chip.d.ts +19 -9
  481. package/dist/configurator/ui/assistant/tool-chip.js +1 -1
  482. package/dist/configurator/ui/assistant/use-load-older-on-top.d.ts +22 -0
  483. package/dist/configurator/ui/assistant/use-load-older-on-top.js +1 -0
  484. package/dist/configurator/ui/configurator-layout/slots/canvas/GPUAccelerationDisabled.js +1 -1
  485. package/dist/configurator/ui/configurator-layout/slots/canvas/LayoutCanvas.js +1 -1
  486. package/dist/configurator/ui/configurator-layout/slots/canvas/SharedCanvas.js +1 -1
  487. package/dist/configurator/ui/configurator-layout/slots/canvas/WebGLNotSupported.js +1 -1
  488. package/dist/configurator/ui/configurator-layout/slots/readonly-banner/CloneToEditDialog.js +1 -1
  489. package/dist/configurator/ui/configurator-layout/universal/DesktopPreview.js +1 -1
  490. package/dist/configurator/ui/configurator-layout/universal/ExportingOverlay.d.ts +5 -0
  491. package/dist/configurator/ui/configurator-layout/universal/ExportingOverlay.js +1 -0
  492. package/dist/configurator/ui/configurator-layout/universal/Layout.js +1 -1
  493. package/dist/configurator/ui/configurator-layout/universal/MobilePreview.js +1 -1
  494. package/dist/configurator/ui/configurator-layout/universal/use-layout-scene-safe-area.js +1 -1
  495. package/dist/configurator/ui/index.d.ts +1 -0
  496. package/dist/configurator/ui/index.js +1 -1
  497. package/dist/configurator/ui/legacy/chat/MobileChat.js +1 -1
  498. package/dist/configurator/ui/legacy/layout/common/CommonTopNavigation.js +1 -1
  499. package/dist/configurator/ui/legacy/layout/common/ReactiveInterfaceLayout.js +1 -1
  500. package/dist/configurator/ui/legacy/layout/simple/SimpleSidebar.js +1 -1
  501. package/dist/configurator/ui/legacy/layout/simple/SimpleTopNavigation.js +1 -1
  502. package/dist/configurator/ui/legacy/layout/steps/StepsNavigation.js +1 -1
  503. package/dist/configurator/ui/legacy/layout/steps/StepsOwnerLayout.js +1 -1
  504. package/dist/configurator/ui/legacy/layout/steps/StepsSideBar.js +1 -1
  505. package/dist/configurator/ui/legacy/layout/tabs/TabsSidebar.js +1 -1
  506. package/dist/configurator/ui/phoenix-layout-elements/AppLoader.d.ts +0 -7
  507. package/dist/configurator/ui/phoenix-layout-elements/AppLoader.js +2 -2
  508. package/dist/configurator/ui/phoenix-layout-elements/header/common/back-button/use-go-back-action.js +1 -1
  509. package/dist/configurator/ui/phoenix-layout-elements/header/common/step-navigation/StepsNavigation.js +1 -1
  510. package/dist/configurator/ui/phoenix-layout-elements/index.d.ts +8 -1
  511. package/dist/configurator/ui/phoenix-layout-elements/index.js +1 -1
  512. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/basic/use-basic-sidebar-footer.js +1 -1
  513. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/common/PreviousStepButton.js +1 -1
  514. package/dist/configurator/ui/preset-layout/CategoryPresetUi.js +1 -1
  515. package/dist/configurator/ui/preset-layout/PresetUi.d.ts +0 -2
  516. package/dist/configurator/ui/preset-layout/PresetUi.js +1 -1
  517. package/dist/configurator/ui/preset-layout/index.d.ts +6 -1
  518. package/dist/configurator/ui/preset-layout/index.js +1 -1
  519. package/dist/configurator/ui/save-message-snackbars/SaveMessageSnackbars.js +1 -1
  520. package/dist/docs/3d-scene/animations-basic.mdx +0 -4
  521. package/dist/docs/3d-scene/camera-based-hiding.mdx +0 -2
  522. package/dist/docs/3d-scene/cameras/custom.mdx +4 -4
  523. package/dist/docs/3d-scene/cameras/fit-during-drag.mdx +0 -4
  524. package/dist/docs/3d-scene/cameras/locks.mdx +0 -4
  525. package/dist/docs/3d-scene/cameras/transitions.mdx +0 -2
  526. package/dist/docs/3d-scene/engraving.mdx +0 -4
  527. package/dist/docs/3d-scene/materials/custom.mdx +1 -2
  528. package/dist/docs/3d-scene/materials/inherit.mdx +0 -4
  529. package/dist/docs/3d-scene/materials/multilevel.mdx +0 -47
  530. package/dist/docs/3d-scene/materials/override.mdx +0 -4
  531. package/dist/docs/3d-scene/materials/simple.mdx +0 -4
  532. package/dist/docs/3d-scene/materials/transformer.mdx +0 -4
  533. package/dist/docs/3d-scene/materials/transition.mdx +0 -4
  534. package/dist/docs/3d-scene/materials/transmissive.mdx +0 -4
  535. package/dist/docs/3d-scene/postprocessing.mdx +0 -2
  536. package/dist/docs/3d-scene/rendering/basic.mdx +5 -9
  537. package/dist/docs/3d-scene/rendering/custom-entity.mdx +0 -6
  538. package/dist/docs/3d-scene/rendering/lights/ambient-light.mdx +0 -2
  539. package/dist/docs/3d-scene/rendering/lights/directional-light.mdx +0 -2
  540. package/dist/docs/3d-scene/rendering/lights/point-light.mdx +0 -2
  541. package/dist/docs/3d-scene/rendering/lights/rect-area-light.mdx +0 -2
  542. package/dist/docs/3d-scene/rendering/lights/spot-light.mdx +0 -2
  543. package/dist/docs/3d-scene/rendering/object-groups.mdx +0 -2
  544. package/dist/docs/3d-scene/rendering/objects.mdx +0 -4
  545. package/dist/docs/3d-scene/rendering/scene-entity-object.mdx +0 -43
  546. package/dist/docs/3d-scene/rendering/smma.mdx +0 -2
  547. package/dist/docs/3d-scene/rendering/soft-shadows.mdx +0 -2
  548. package/dist/docs/3d-scene/rendering/transformer.mdx +1 -3
  549. package/dist/docs/complex-use-cases/custom-ui-on-root-level.mdx +0 -1
  550. package/dist/docs/complex-use-cases/filtered-controls-with-fix-dialog.mdx +19 -19
  551. package/dist/docs/complex-use-cases/navigation-guard.mdx +81 -19
  552. package/dist/docs/complex-use-cases/navigation-reset-selection.mdx +28 -65
  553. package/dist/docs/complex-use-cases/navigation-reset-undo.mdx +16 -20
  554. package/dist/docs/complex-use-cases/sketching.mdx +2 -10
  555. package/dist/docs/controls/custom.mdx +88 -87
  556. package/dist/docs/controls/manage-child-entities/entitychildrenlist.mdx +0 -4
  557. package/dist/docs/controls/nullable-attributes.mdx +0 -2
  558. package/dist/docs/controls/scene/custom-controls.mdx +7 -8
  559. package/dist/docs/controls/scene/html-hotspots.mdx +0 -4
  560. package/dist/docs/controls/scene/object-html-hotspots.mdx +0 -4
  561. package/dist/docs/controls/select-attribute/cardselect.mdx +0 -4
  562. package/dist/docs/controls/select-attribute/listselect.mdx +0 -4
  563. package/dist/docs/controls/select-attribute/select.mdx +0 -4
  564. package/dist/docs/controls/select-attribute/swatchselect.mdx +0 -4
  565. package/dist/docs/controls/select-attribute/switchselect.mdx +0 -4
  566. package/dist/docs/controls/select-attribute/toggleselect.mdx +0 -4
  567. package/dist/docs/controls/select-child-entity/cardselect.mdx +2 -6
  568. package/dist/docs/controls/select-child-entity/listselect.mdx +5 -11
  569. package/dist/docs/controls/select-child-entity/toggleselect.mdx +4 -10
  570. package/dist/docs/controls/text-input.mdx +90 -19
  571. package/dist/docs/demos/glass.mdx +0 -4
  572. package/dist/docs/demos/heater.mdx +0 -10
  573. package/dist/docs/demos/office-chair.mdx +0 -8
  574. package/dist/docs/demos/office-desk.mdx +0 -8
  575. package/dist/docs/demos/ring.mdx +0 -9
  576. package/dist/docs/dimensions/3d-scene-integration/angle-indicators.mdx +0 -2
  577. package/dist/docs/dimensions/3d-scene-integration/editable-angle-indicator.mdx +0 -2
  578. package/dist/docs/dimensions/3d-scene-integration/editable-distance-dimension-indicator.mdx +0 -2
  579. package/dist/docs/dimensions/3d-scene-integration/editable-offset-indicator.mdx +0 -6
  580. package/dist/docs/dimensions/3d-scene-integration/editable-size-indicator.mdx +0 -4
  581. package/dist/docs/dimensions/3d-scene-integration/list-selector-dimension-indicator.mdx +0 -4
  582. package/dist/docs/dimensions/3d-scene-integration/offset-indicator.mdx +0 -6
  583. package/dist/docs/dimensions/3d-scene-integration/overlap-offset-demo.mdx +0 -6
  584. package/dist/docs/dimensions/input-controls/distance-slider.mdx +6 -6
  585. package/dist/docs/dimensions/selection-controls/list-selector.mdx +0 -2
  586. package/dist/docs/dimensions/selection-controls/toggle-selector.mdx +0 -2
  587. package/dist/docs/drag-and-drop/drag-handle.mdx +0 -1
  588. package/dist/docs/drag-and-drop/hotspot-handle.mdx +0 -1
  589. package/dist/docs/drag-and-drop/no-selection.mdx +0 -1
  590. package/dist/docs/drag-and-drop/planes.mdx +0 -3
  591. package/dist/docs/drag-and-drop/room-planner.mdx +1 -7
  592. package/dist/docs/drag-and-drop/rotatable.mdx +0 -1
  593. package/dist/docs/drag-and-drop/snapping/auto-rotation-demo.mdx +0 -2
  594. package/dist/docs/drag-and-drop/snapping/label-matching-demo.mdx +0 -2
  595. package/dist/docs/drag-and-drop/snapping/multi-snap-composition-demo.mdx +0 -2
  596. package/dist/docs/drag-and-drop/snapping/nested-entity-demo.mdx +0 -2
  597. package/dist/docs/drag-and-drop/snapping/priority-demo.mdx +0 -2
  598. package/dist/docs/drag-and-drop/snapping/snap-axis-demo.mdx +0 -2
  599. package/dist/docs/drag-and-drop/snapping/snap-edge-demo.mdx +0 -2
  600. package/dist/docs/drag-and-drop/snapping/snap-plane-demo.mdx +0 -5
  601. package/dist/docs/drag-and-drop/snapping/snap-point-demo.mdx +0 -2
  602. package/dist/docs/drag-and-drop/spatial-constraints/collision-system.mdx +0 -2
  603. package/dist/docs/drag-and-drop/spatial-constraints/disjoint-and-within.mdx +0 -6
  604. package/dist/docs/drag-and-drop/spatial-constraints/geometry-override.mdx +0 -4
  605. package/dist/docs/drag-and-drop/spatial-constraints/multiple-collision-meshes.mdx +0 -4
  606. package/dist/docs/drag-and-drop/spatial-constraints/touches.mdx +0 -4
  607. package/dist/docs/drag-and-drop/swap.mdx +0 -4
  608. package/dist/docs/fabs/basic.mdx +8 -12
  609. package/dist/docs/fabs/layout.mdx +0 -7
  610. package/dist/docs/index.json +98 -4
  611. package/dist/docs/integrations/lifecycle-providers.mdx +0 -12
  612. package/dist/docs/integrations/onloadprovider.mdx +0 -3
  613. package/dist/docs/integrations/webcomponent-api/basics.mdx +4 -2
  614. package/dist/docs/integrations/webcomponent-api/preset-tags.mdx +0 -1
  615. package/dist/docs/layouts/custom-layout.mdx +309 -189
  616. package/dist/docs/layouts/custom-price.mdx +0 -2
  617. package/dist/docs/layouts/custom-theme-handler.mdx +0 -4
  618. package/dist/docs/layouts/gallery/ardent-compressor.mdx +3485 -0
  619. package/dist/docs/layouts/gallery/corvid-drone.mdx +3399 -0
  620. package/dist/docs/layouts/gallery/fenwick-window.mdx +2778 -0
  621. package/dist/docs/layouts/gallery/ferrule-bar-station.mdx +6540 -0
  622. package/dist/docs/layouts/gallery/kestrel-kettle.mdx +1829 -0
  623. package/dist/docs/layouts/gallery/nightjar-guitar.mdx +3665 -0
  624. package/dist/docs/layouts/gallery/sunfold-solar.mdx +2657 -0
  625. package/dist/docs/layouts/gallery/tidepool-aquascape.mdx +5157 -0
  626. package/dist/docs/layouts/header/custom.mdx +0 -2
  627. package/dist/docs/layouts/icon-sets.mdx +0 -6
  628. package/dist/docs/layouts/phoenix-elements.mdx +0 -4
  629. package/dist/docs/layouts/phoenix-handlers.mdx +19 -28
  630. package/dist/docs/layouts/presets/action-and-overlay.mdx +0 -8
  631. package/dist/docs/layouts/presets/custom.mdx +6 -13
  632. package/dist/docs/layouts/preview/always-expand.mdx +4 -14
  633. package/dist/docs/layouts/preview/always.mdx +4 -14
  634. package/dist/docs/layouts/preview/auto-presets.mdx +4 -14
  635. package/dist/docs/layouts/preview/auto.mdx +4 -14
  636. package/dist/docs/layouts/preview/never.mdx +4 -14
  637. package/dist/docs/layouts/sidebar/in-a-custom-layout.mdx +18 -13
  638. package/dist/docs/layouts/sidebar/property-page-stack.mdx +0 -2
  639. package/dist/docs/layouts/sidebar/property-page.mdx +0 -2
  640. package/dist/docs/layouts/sidebar/tabs.mdx +0 -4
  641. package/dist/docs/layouts/sidebar-footer/custom.mdx +0 -2
  642. package/dist/docs/layouts/sidebar-footer/universal.mdx +0 -10
  643. package/dist/docs/layouts/tool-controls.mdx +0 -1
  644. package/dist/docs/layouts/toolbar.mdx +0 -4
  645. package/dist/docs/layouts/universal.mdx +2 -10
  646. package/dist/docs/other-features/client-side-rendering/camera-padding.mdx +0 -2
  647. package/dist/docs/other-features/client-side-rendering/custom.mdx +0 -6
  648. package/dist/docs/other-features/client-side-rendering/declarative.mdx +1 -5
  649. package/dist/docs/other-features/client-side-rendering/postprocessing.mdx +0 -6
  650. package/dist/docs/other-features/component-filters.mdx +0 -7
  651. package/dist/docs/other-features/currency.mdx +5 -6
  652. package/dist/docs/other-features/domain-actions.mdx +0 -5
  653. package/dist/docs/other-features/dynamic-component-attachments.mdx +75 -46
  654. package/dist/docs/other-features/error-5xx.mdx +0 -2
  655. package/dist/docs/other-features/navigation-hotspot.mdx +0 -5
  656. package/dist/docs/other-features/not-found-404.mdx +0 -2
  657. package/dist/docs/other-features/projected-entities.mdx +0 -5
  658. package/dist/docs/other-features/side-effects.mdx +0 -7
  659. package/dist/docs/other-features/transformers.mdx +101 -96
  660. package/dist/docs/other-features/violation-messages.mdx +0 -4
  661. package/dist/docs/other-features/violation-severity.mdx +2 -3
  662. package/dist/docs/performance/clone-highlight.mdx +0 -7
  663. package/dist/docs/performance/dynamic-components.mdx +0 -6
  664. package/dist/docs/performance/editable-dimension-stress-test.mdx +0 -2
  665. package/dist/docs/performance/fast-highlight.mdx +0 -7
  666. package/dist/docs/performance/general.mdx +0 -7
  667. package/dist/docs/performance/render-isolation.mdx +0 -6
  668. package/dist/docs/phoenix/admin.mdx +75 -100
  669. package/dist/docs/phoenix/application-states.mdx +45 -27
  670. package/dist/docs/phoenix/components.mdx +53 -46
  671. package/dist/docs/phoenix/configurator-interface.mdx +205 -123
  672. package/dist/docs/phoenix/deployments.mdx +11 -1
  673. package/dist/docs/phoenix/domain-model.mdx +24 -16
  674. package/dist/docs/phoenix/expression-context.mdx +3 -29
  675. package/dist/docs/phoenix/getting-started.mdx +0 -2
  676. package/dist/docs/phoenix/layout-slots.mdx +21 -0
  677. package/dist/docs/phoenix/localization.mdx +64 -54
  678. package/dist/docs/phoenix/migration-guide.mdx +10 -11
  679. package/dist/docs/phoenix/phoenix-cli.mdx +57 -15
  680. package/dist/docs/phoenix/project-structure.mdx +52 -55
  681. package/dist/docs/phoenix/quickstart.mdx +1 -3
  682. package/dist/docs/phoenix/sdk-builder-workflow.mdx +7 -11
  683. package/dist/docs/phoenix/sessions-and-access.mdx +2 -0
  684. package/dist/docs/phoenix/state-management.mdx +18 -16
  685. package/dist/docs/phoenix/testing.mdx +6 -1
  686. package/dist/docs/phoenix/webhooks.mdx +9 -1
  687. package/dist/docs/recipes-and-delete/delete-entity.mdx +3 -6
  688. package/dist/docs/recipes-and-delete/dynamic-root-entity.mdx +0 -2
  689. package/dist/docs/recipes-and-delete/grouped-button.mdx +0 -3
  690. package/dist/docs/recipes-and-delete/grouped-panel.mdx +0 -3
  691. package/dist/docs/recipes-and-delete/horizontal.mdx +3 -6
  692. package/dist/docs/recipes-and-delete/recipe-hierarchy-lists.mdx +0 -3
  693. package/dist/docs/recipes-and-delete/recipe-hierarchy-selection.mdx +0 -5
  694. package/dist/docs/recipes-and-delete/replace-dropdown.mdx +3 -6
  695. package/dist/docs/recipes-and-delete/replace-panel.mdx +0 -7
  696. package/dist/docs/recipes-and-delete/simple.mdx +3 -6
  697. package/dist/docs/recipes-and-delete/vertical.mdx +3 -6
  698. package/dist/docs/relations/aliases.mdx +0 -2
  699. package/dist/docs/relations/all-of-type.mdx +0 -4
  700. package/dist/docs/relations/child-nullable.mdx +0 -4
  701. package/dist/docs/relations/child-required.mdx +0 -2
  702. package/dist/docs/relations/collection-direct.mdx +0 -4
  703. package/dist/docs/relations/collection-indirect.mdx +0 -4
  704. package/dist/docs/relations/collection-multiple.mdx +0 -2
  705. package/dist/docs/relations/cross-reference.mdx +0 -2
  706. package/dist/docs/relations/hierarchy.mdx +0 -2
  707. package/dist/docs/selection-and-highlight/canvas.mdx +0 -1
  708. package/dist/docs/selection-and-highlight/disable-highlight-per-object.mdx +0 -1
  709. package/dist/docs/selection-and-highlight/disable-highlight.mdx +0 -1
  710. package/dist/docs/selection-and-highlight/effects/outline.mdx +0 -3
  711. package/dist/docs/selection-and-highlight/effects/overlay.mdx +0 -3
  712. package/dist/docs/selection-and-highlight/fast-emissive-highlight.mdx +0 -3
  713. package/dist/docs/selection-and-highlight/group-highlighting.mdx +0 -1
  714. package/dist/docs/selection-and-highlight/hierarchy.mdx +100 -151
  715. package/dist/docs/selection-and-highlight/hotspots.mdx +0 -1
  716. package/dist/domain/application/GetApplicationWrapperHandler.d.ts +1 -1
  717. package/dist/domain/application/GetThemeHandler.d.ts +1 -1
  718. package/dist/domain/application/GetWebComponentOptions.d.ts +1 -1
  719. package/dist/domain/application/application-config.d.ts +6 -26
  720. package/dist/domain/application/assistant/assistant-fields.d.ts +1 -1
  721. package/dist/domain/application/assistant/assistant-value-type.d.ts +1 -1
  722. package/dist/domain/application/assistant/build-assistant-lenses.d.ts +1 -2
  723. package/dist/domain/application/assistant/build-assistant-lenses.js +1 -1
  724. package/dist/domain/application/assistant/build-assistant-manifest.d.ts +1 -2
  725. package/dist/domain/application/assistant/build-assistant-manifest.js +1 -1
  726. package/dist/domain/application/assistant/generate-assistant-prompt.d.ts +2 -3
  727. package/dist/domain/application/assistant/generate-assistant-prompt.js +1 -1
  728. package/dist/domain/application/assistant/index.d.ts +0 -4
  729. package/dist/domain/application/assistant/index.js +1 -1
  730. package/dist/domain/application/assistant/session-setup/AssistantSetupHandler.d.ts +1 -1
  731. package/dist/domain/application/assistant/session-setup/apply-assistant-setup.d.ts +1 -1
  732. package/dist/domain/application/assistant/session-setup/apply-assistant-setup.js +1 -1
  733. package/dist/domain/application/assistant/session-setup/assistant-setup-manifest.d.ts +5 -5
  734. package/dist/domain/application/assistant/session-setup/assistant-setup-manifest.js +1 -1
  735. package/dist/domain/application/assistant/session-setup/create-session-assistant.d.ts +1 -2
  736. package/dist/domain/application/assistant-field-options.d.ts +1 -1
  737. package/dist/domain/application/assistant-mutations.d.ts +1 -1
  738. package/dist/domain/application/assistant-mutations.js +1 -1
  739. package/dist/domain/application/assistant-recipe-groups.d.ts +1 -1
  740. package/dist/domain/application/configurator-builder.d.ts +7 -2
  741. package/dist/domain/application/configurator-builder.js +1 -1
  742. package/dist/domain/application/create-initial-published-data.d.ts +2 -1
  743. package/dist/domain/application/index.d.ts +1 -1
  744. package/dist/domain/application/index.js +1 -1
  745. package/dist/domain/application/published-data/DataRowValidatorHandler.d.ts +1 -1
  746. package/dist/domain/application/published-data/FilterPublishedChunksHandler.d.ts +1 -1
  747. package/dist/domain/application/published-data/MapPublishedChunkedDataHandler.d.ts +1 -1
  748. package/dist/domain/application/published-data/MapPublishedRevisionDataHandler.d.ts +1 -1
  749. package/dist/domain/application/published-data/SheetValidatorHandler.d.ts +1 -1
  750. package/dist/domain/application/standard-properties.js +1 -1
  751. package/dist/domain/application/web-component-property.d.ts +3 -1
  752. package/dist/domain/application/web-component-property.js +1 -1
  753. package/dist/domain/available-system-components/available-system-components.d.ts +11 -0
  754. package/dist/domain/available-system-components/available-system-components.js +1 -0
  755. package/dist/domain/available-system-components/index.d.ts +1 -0
  756. package/dist/domain/available-system-components/index.js +1 -0
  757. package/dist/domain/core/invariant/violation.d.ts +3 -2
  758. package/dist/domain/{domain-builder.d.ts → domain-builder/domain-builder.d.ts} +11 -5
  759. package/dist/domain/domain-builder/domain-builder.js +1 -0
  760. package/dist/domain/domain-builder/index.d.ts +1 -0
  761. package/dist/domain/domain-builder/index.js +1 -0
  762. package/dist/domain/domain-context/store-system/store-system.d.ts +5 -0
  763. package/dist/domain/domain-context/store-system/store-system.js +1 -1
  764. package/dist/domain/domain-context/transformers/context.d.ts +4 -2
  765. package/dist/domain/domain-context/transformers/when-builder.d.ts +2 -1
  766. package/dist/domain/domain-runtime/application.d.ts +39 -0
  767. package/dist/domain/domain-runtime/application.js +1 -0
  768. package/dist/domain/domain-runtime/domain-context/selectors.d.ts +1 -0
  769. package/dist/domain/domain-runtime/domain-context/selectors.js +1 -1
  770. package/dist/domain/domain-runtime/domain-runtime.d.ts +68 -28
  771. package/dist/domain/domain-runtime/domain-runtime.js +1 -1
  772. package/dist/domain/domain-runtime/environment/initialize.d.ts +1 -1
  773. package/dist/domain/domain-runtime/environment/types.d.ts +1 -1
  774. package/dist/domain/domain-runtime/index.d.ts +1 -1
  775. package/dist/domain/domain-runtime/index.js +1 -1
  776. package/dist/domain/domain-runtime/spec/create-violation-expressions.d.ts +1 -1
  777. package/dist/domain/domain-runtime/spec/create-violation-expressions.js +1 -1
  778. package/dist/domain/domain-runtime/spec/index.d.ts +1 -1
  779. package/dist/domain/domain-runtime/spec/index.js +1 -1
  780. package/dist/domain/domain-runtime/spec/initialize.js +1 -1
  781. package/dist/domain/domain-runtime/spec/{module-checks/resolve-imported-transformers.d.ts → resolve-imported-transformers.d.ts} +3 -3
  782. package/dist/domain/domain-runtime/spec/resolve-imported-transformers.js +1 -0
  783. package/dist/domain/domain-runtime/spec/selectors.d.ts +8 -6
  784. package/dist/domain/domain-runtime/spec/selectors.js +1 -1
  785. package/dist/domain/domain-runtime/spec/types.d.ts +2 -2
  786. package/dist/domain/domain-runtime/web-component/actions.d.ts +3 -0
  787. package/dist/domain/domain-runtime/web-component/actions.js +1 -1
  788. package/dist/domain/domain-runtime/web-component/initialize.d.ts +1 -0
  789. package/dist/domain/domain-runtime/web-component/initialize.js +1 -1
  790. package/dist/domain/domain-runtime/web-component/selectors.d.ts +2 -0
  791. package/dist/domain/domain-runtime/web-component/selectors.js +1 -1
  792. package/dist/domain/domain-runtime/web-component/types.d.ts +6 -3
  793. package/dist/domain/extensions/export-images/agent-screenshot.d.ts +30 -0
  794. package/dist/domain/extensions/export-images/agent-screenshot.js +1 -0
  795. package/dist/domain/extensions/{client-side-image.d.ts → export-images/client-side-image.d.ts} +2 -2
  796. package/dist/domain/extensions/export-images/client-side-image.js +1 -0
  797. package/dist/domain/extensions/export-images/index.d.ts +3 -0
  798. package/dist/domain/extensions/export-images/index.js +1 -0
  799. package/dist/domain/extensions/{save-template-thumbnail.d.ts → export-images/save-template-thumbnail.d.ts} +2 -2
  800. package/dist/domain/extensions/export-images/save-template-thumbnail.js +1 -0
  801. package/dist/domain/extensions/index.d.ts +1 -2
  802. package/dist/domain/extensions/index.js +1 -1
  803. package/dist/domain/index.d.ts +15 -2
  804. package/dist/domain/index.js +1 -1
  805. package/dist/domain/mocks/create-mock-domain-runtime.d.ts +9 -0
  806. package/dist/domain/mocks/create-test-application-config.d.ts +1 -1
  807. package/dist/domain/spec/application/admin-pages-section.d.ts +29 -0
  808. package/dist/domain/spec/application/admin-pages.d.ts +26 -0
  809. package/dist/domain/spec/application/admin-states.d.ts +5 -0
  810. package/dist/domain/spec/application/configurator-states.d.ts +8 -0
  811. package/dist/domain/spec/application/index.d.ts +5 -0
  812. package/dist/domain/spec/application/index.js +1 -0
  813. package/dist/domain/spec/components/bindings/index.d.ts +2 -0
  814. package/dist/domain/spec/components/bindings/read-binding.d.ts +13 -0
  815. package/dist/domain/spec/components/bindings/write-binding.d.ts +32 -0
  816. package/dist/{application-spec/parse-application-files → domain}/spec/components/component-entry.d.ts +3 -3
  817. package/dist/domain/spec/components/component-entry.js +1 -0
  818. package/dist/{application-spec/core → domain/spec}/components/component-filter.d.ts +3 -2
  819. package/dist/domain/spec/components/component-filters.d.ts +10 -0
  820. package/dist/domain/spec/components/component-filters.js +1 -0
  821. package/dist/domain/spec/components/components.d.ts +4 -0
  822. package/dist/domain/spec/components/components.js +1 -0
  823. package/dist/domain/spec/components/index.d.ts +6 -0
  824. package/dist/domain/spec/enhanced-json/enhanced-json-value.d.ts +30 -0
  825. package/dist/domain/spec/enhanced-json/enhanced-json-value.js +1 -0
  826. package/dist/domain/spec/enhanced-json/index.d.ts +1 -0
  827. package/dist/domain/spec/enhanced-json/index.js +1 -0
  828. package/dist/domain/{domain-runtime → spec}/errors/implementation-error-collector.d.ts +2 -0
  829. package/dist/domain/{domain-runtime → spec}/errors/implementation-error-collector.js +1 -1
  830. package/dist/{application-spec/parse-application-files → domain}/spec/expressions/expression.d.ts +9 -3
  831. package/dist/domain/spec/expressions/expression.js +1 -0
  832. package/dist/domain/spec/expressions/expressions.d.ts +27 -0
  833. package/dist/domain/spec/expressions/expressions.js +1 -0
  834. package/dist/domain/spec/expressions/index.d.ts +5 -0
  835. package/dist/domain/spec/expressions/memo-eval-plan.d.ts +70 -0
  836. package/dist/domain/spec/expressions/memo-eval-plan.js +1 -0
  837. package/dist/domain/spec/expressions/relation-expression-params.js +1 -0
  838. package/dist/domain/spec/index.d.ts +4 -0
  839. package/dist/domain/spec/index.js +1 -0
  840. package/dist/domain/spec/invariants/index.d.ts +2 -0
  841. package/dist/domain/spec/invariants/index.js +1 -0
  842. package/dist/domain/spec/invariants/invariant.d.ts +24 -0
  843. package/dist/domain/spec/invariants/invariant.js +1 -0
  844. package/dist/domain/spec/invariants/invariants.d.ts +14 -0
  845. package/dist/domain/spec/invariants/invariants.js +1 -0
  846. package/dist/domain/spec/json-schema.d.ts +52 -0
  847. package/dist/domain/spec/json-schema.js +1 -0
  848. package/dist/domain/spec/markers/index.d.ts +3 -0
  849. package/dist/domain/spec/markers/index.js +1 -0
  850. package/dist/domain/spec/markers/msg-marker.d.ts +28 -0
  851. package/dist/domain/spec/markers/msg-marker.js +1 -0
  852. package/dist/domain/spec/model/aliases.d.ts +9 -0
  853. package/dist/domain/spec/model/aliases.js +1 -0
  854. package/dist/domain/spec/model/common-types.d.ts +15 -0
  855. package/dist/domain/spec/model/common-types.js +1 -0
  856. package/dist/domain/spec/model/defaults.d.ts +33 -0
  857. package/dist/domain/spec/model/defaults.js +1 -0
  858. package/dist/domain/spec/model/entity-types.d.ts +8 -0
  859. package/dist/domain/spec/model/entity-types.js +1 -0
  860. package/dist/domain/spec/model/index.d.ts +7 -0
  861. package/dist/domain/spec/model/index.js +1 -0
  862. package/dist/domain/spec/model/model-version-key.d.ts +3 -0
  863. package/dist/domain/spec/model/model-version-key.js +1 -0
  864. package/dist/domain/spec/model/names/action-name.d.ts +7 -0
  865. package/dist/domain/spec/model/names/action-name.js +1 -0
  866. package/dist/domain/spec/model/names/alias-name.d.ts +7 -0
  867. package/dist/domain/spec/model/names/alias-name.js +1 -0
  868. package/dist/domain/spec/model/names/entity-or-alias-name.d.ts +8 -0
  869. package/dist/domain/spec/model/names/entity-or-alias-name.js +1 -0
  870. package/dist/domain/spec/model/names/entity-type-name.d.ts +8 -0
  871. package/dist/domain/spec/model/names/entity-type-name.js +1 -0
  872. package/dist/domain/spec/model/names/expression-name.d.ts +6 -0
  873. package/dist/domain/spec/model/names/expression-name.js +1 -0
  874. package/dist/domain/spec/model/names/index.d.ts +9 -0
  875. package/dist/domain/spec/model/names/index.js +1 -0
  876. package/dist/domain/spec/model/names/instance-name.d.ts +7 -0
  877. package/dist/domain/spec/model/names/instance-name.js +1 -0
  878. package/dist/domain/spec/model/names/invariant-name.d.ts +3 -0
  879. package/dist/domain/spec/model/names/invariant-name.js +1 -0
  880. package/dist/domain/spec/model/names/shape-property-name.d.ts +11 -0
  881. package/dist/domain/spec/model/names/shape-property-name.js +1 -0
  882. package/dist/domain/spec/model/names/violation-type-name.d.ts +3 -0
  883. package/dist/domain/spec/model/names/violation-type-name.js +1 -0
  884. package/dist/domain/spec/model/presets.d.ts +30 -0
  885. package/dist/domain/spec/model/presets.js +1 -0
  886. package/dist/domain/{domain-runtime/spec/module-checks → spec/modules}/element-registration.d.ts +16 -2
  887. package/dist/domain/spec/modules/element-registration.js +1 -0
  888. package/dist/domain/spec/modules/find-assistant-form-element-errors.d.ts +12 -0
  889. package/dist/domain/spec/modules/find-assistant-form-element-errors.js +1 -0
  890. package/dist/domain/{domain-runtime/spec/module-checks → spec/modules}/index.d.ts +4 -3
  891. package/dist/domain/spec/modules/index.js +1 -0
  892. package/dist/domain/spec/modules/merge-expression-modules.d.ts +23 -0
  893. package/dist/domain/spec/modules/merge-expression-modules.js +1 -0
  894. package/dist/domain/{domain-runtime/spec/module-checks → spec/modules}/project-modules.d.ts +1 -1
  895. package/dist/domain/spec/modules/project-modules.js +1 -0
  896. package/dist/domain/{domain-runtime/spec/module-checks → spec/modules}/resolve-action-modules.d.ts +1 -1
  897. package/dist/domain/{domain-runtime/spec/module-checks → spec/modules}/resolve-component-optic-modules.d.ts +1 -1
  898. package/dist/domain/{domain-runtime/spec/module-checks → spec/modules}/resolve-expression-modules.d.ts +4 -5
  899. package/dist/domain/spec/modules/resolve-expression-modules.js +1 -0
  900. package/dist/domain/{domain-runtime/spec/module-checks → spec/modules}/resolve-invariant-modules.d.ts +1 -1
  901. package/dist/domain/spec/phx/index.d.ts +1 -0
  902. package/dist/domain/spec/phx/index.js +1 -0
  903. package/dist/domain/spec/phx/phx-application-types.d.ts +25 -0
  904. package/dist/domain/spec/phx/phx-application-types.js +1 -0
  905. package/dist/domain/spec/phx/phx-domain.d.ts +36 -0
  906. package/dist/domain/spec/phx/phx-domain.js +1 -0
  907. package/dist/domain/spec/phx/phx-model.d.ts +24 -0
  908. package/dist/domain/spec/phx/phx-model.js +1 -0
  909. package/dist/domain/spec/phx/phx.d.ts +21 -0
  910. package/dist/domain/spec/phx/phx.js +1 -0
  911. package/dist/domain/spec/runtime/admin-runtime/admin-runtime.d.ts +32 -0
  912. package/dist/domain/spec/runtime/admin-runtime/admin-runtime.js +1 -0
  913. package/dist/domain/spec/runtime/admin-runtime/admin-spec-runtime.d.ts +16 -0
  914. package/dist/domain/spec/runtime/admin-runtime/admin-spec-runtime.js +1 -0
  915. package/dist/domain/spec/runtime/admin-runtime/index.d.ts +2 -0
  916. package/dist/domain/spec/runtime/admin-runtime/index.js +1 -0
  917. package/dist/{application-spec/generate-application → domain/spec}/runtime/admin-runtime/states-runtime.d.ts +1 -1
  918. package/dist/{application-spec/generate-application → domain/spec}/runtime/application-runtime.d.ts +23 -8
  919. package/dist/domain/spec/runtime/application-runtime.js +1 -0
  920. package/dist/domain/spec/runtime/application-spec-slice.d.ts +73 -0
  921. package/dist/domain/spec/runtime/application-spec-slice.js +1 -0
  922. package/dist/domain/spec/runtime/configurator-runtime/configurator-runtime.d.ts +37 -0
  923. package/dist/domain/spec/runtime/configurator-runtime/configurator-runtime.js +1 -0
  924. package/dist/domain/spec/runtime/configurator-runtime/configurator-spec-runtime.d.ts +16 -0
  925. package/dist/domain/spec/runtime/configurator-runtime/configurator-spec-runtime.js +1 -0
  926. package/dist/domain/spec/runtime/configurator-runtime/index.d.ts +2 -0
  927. package/dist/domain/spec/runtime/configurator-runtime/index.js +1 -0
  928. package/dist/{application-spec/generate-application → domain/spec}/runtime/configurator-runtime/states-runtime.d.ts +1 -1
  929. package/dist/domain/spec/runtime/create-application.d.ts +58 -0
  930. package/dist/domain/spec/runtime/create-application.js +1 -0
  931. package/dist/{application-spec/generate-application/runtime/sections → domain/spec/runtime/expressions}/expression-runtime.d.ts +13 -5
  932. package/dist/domain/spec/runtime/expressions/expression-runtime.js +1 -0
  933. package/dist/{application-spec/generate-application/runtime/sections → domain/spec/runtime/expressions}/generate-memo-eval-plan-runtime.d.ts +2 -2
  934. package/dist/domain/spec/runtime/expressions/generate-memo-eval-plan-runtime.js +1 -0
  935. package/dist/domain/spec/runtime/expressions/index.d.ts +3 -0
  936. package/dist/domain/spec/runtime/expressions/index.js +1 -0
  937. package/dist/{application-spec/generate-application/runtime/sections → domain/spec/runtime/expressions}/reflection-constants-runtime.d.ts +2 -1
  938. package/dist/{application-spec/generate-application → domain/spec}/runtime/factory-data/factory-data-runtime.d.ts +4 -3
  939. package/dist/{application-spec/generate-application → domain/spec}/runtime/factory-data/recipe-defaults.d.ts +1 -1
  940. package/dist/{application-spec/generate-application → domain/spec}/runtime/factory-data/recipe-defaults.js +1 -1
  941. package/dist/{application-spec/generate-application → domain/spec}/runtime/factory-data/static-violations.d.ts +2 -2
  942. package/dist/{application-spec/generate-application → domain/spec}/runtime/factory-data/static-violations.js +1 -1
  943. package/dist/{application-spec/generate-application → domain/spec}/runtime/generate-runtime-instance.d.ts +1 -1
  944. package/dist/domain/spec/runtime/generate-runtime-instance.js +1 -0
  945. package/dist/domain/spec/runtime/index.d.ts +13 -0
  946. package/dist/domain/spec/runtime/index.js +1 -0
  947. package/dist/{application-spec/generate-application → domain/spec}/runtime/migrations/migration-runtime.d.ts +2 -2
  948. package/dist/domain/spec/runtime/migrations/migration-runtime.js +1 -0
  949. package/dist/{application-spec/generate-application/runtime/admin-runtime → domain/spec/runtime/model}/admin-model-runtime.d.ts +6 -5
  950. package/dist/domain/spec/runtime/model/admin-model-runtime.js +1 -0
  951. package/dist/{application-spec/generate-application/runtime/configurator-runtime → domain/spec/runtime/model}/configurator-model-runtime.d.ts +6 -5
  952. package/dist/domain/spec/runtime/model/configurator-model-runtime.js +1 -0
  953. package/dist/domain/spec/runtime/model/index.d.ts +2 -0
  954. package/dist/domain/spec/runtime/model/index.js +1 -0
  955. package/dist/domain/spec/runtime/optics/build-sdk-optic.d.ts +7 -0
  956. package/dist/domain/spec/runtime/optics/build-sdk-optic.js +1 -0
  957. package/dist/domain/spec/runtime/optics/build-user-bound-optic.d.ts +7 -0
  958. package/dist/domain/spec/runtime/optics/build-user-bound-optic.js +1 -0
  959. package/dist/domain/spec/runtime/optics/built-component-optic.d.ts +11 -0
  960. package/dist/domain/spec/runtime/optics/built-component-optic.js +1 -0
  961. package/dist/{application-spec/generate-application/runtime/sections → domain/spec/runtime/optics}/component-optic.d.ts +4 -14
  962. package/dist/domain/spec/runtime/optics/index.d.ts +2 -0
  963. package/dist/domain/spec/runtime/optics/index.js +1 -0
  964. package/dist/{application-spec/caching → domain/spec/runtime}/runtime-reference-store.d.ts +1 -5
  965. package/dist/domain/spec/runtime/runtime-reference-store.js +1 -0
  966. package/dist/{application-spec/generate-application → domain/spec}/runtime/sections/actions-runtime.d.ts +3 -3
  967. package/dist/{application-spec/generate-application → domain/spec}/runtime/sections/assistant-runtime.d.ts +2 -2
  968. package/dist/{application-spec/generate-application → domain/spec}/runtime/sections/data-runtime.d.ts +1 -1
  969. package/dist/domain/spec/runtime/sections/index.d.ts +6 -0
  970. package/dist/domain/spec/runtime/sections/index.js +1 -0
  971. package/dist/{application-spec/generate-application → domain/spec}/runtime/sections/preset-runtime.d.ts +4 -4
  972. package/dist/{application-spec/generate-application → domain/spec}/runtime/sections/theme-runtime.d.ts +1 -1
  973. package/dist/{application-spec/generate-application → domain/spec}/runtime/sections/transformers-runtime.d.ts +2 -2
  974. package/dist/{application-spec/generate-application → domain/spec}/runtime/spec-code/resolve-spec-code.d.ts +1 -1
  975. package/dist/domain/spec/runtime/spec-code/spec-code-module.js +1 -0
  976. package/dist/domain/spec/runtime/spec-runtime.d.ts +21 -0
  977. package/dist/domain/spec/runtime/spec-runtime.js +1 -0
  978. package/dist/{application-spec/generate-application → domain/spec}/runtime-spec/encoded-runtime-spec.d.ts +3 -2
  979. package/dist/domain/spec/runtime-spec/index.d.ts +4 -0
  980. package/dist/domain/spec/runtime-spec/index.js +1 -0
  981. package/dist/domain/spec/runtime-spec/runtime-spec.d.ts +174 -0
  982. package/dist/domain/spec/runtime-spec/runtime-spec.js +1 -0
  983. package/dist/{application-spec/generate-application → domain/spec}/runtime-spec/spec-code-id.d.ts +1 -1
  984. package/dist/domain/spec/sections/actions.d.ts +23 -0
  985. package/dist/domain/spec/sections/actions.js +1 -0
  986. package/dist/domain/spec/sections/app-metadata.d.ts +18 -0
  987. package/dist/domain/spec/sections/app-metadata.js +1 -0
  988. package/dist/domain/spec/sections/application-version.d.ts +7 -0
  989. package/dist/domain/spec/sections/application-version.js +1 -0
  990. package/dist/domain/{application → spec/sections}/assistant/assistant-manifest.d.ts +29 -4
  991. package/dist/domain/{application → spec/sections}/assistant/assistant-resolved-manifest.d.ts +12 -9
  992. package/dist/domain/spec/sections/assistant/assistant-resolved-manifest.js +1 -0
  993. package/dist/domain/spec/sections/assistant/form/assistant-form-element-name.d.ts +11 -0
  994. package/dist/domain/spec/sections/assistant/form/assistant-form-element-name.js +8 -0
  995. package/dist/domain/{application → spec/sections}/assistant/form/assistant-form-elements.d.ts +39 -28
  996. package/dist/domain/spec/sections/assistant/form/assistant-form-elements.js +1 -0
  997. package/dist/domain/{application → spec/sections}/assistant/form/index.d.ts +1 -1
  998. package/dist/domain/spec/sections/assistant/form/index.js +1 -0
  999. package/dist/domain/spec/sections/assistant/index.d.ts +4 -0
  1000. package/dist/domain/spec/sections/assistant/index.js +1 -0
  1001. package/dist/domain/spec/sections/data-spec/chunks.d.ts +23 -0
  1002. package/dist/domain/spec/sections/data-spec/chunks.js +1 -0
  1003. package/dist/domain/spec/sections/data-spec/custom-data-spec-entry.d.ts +16 -0
  1004. package/dist/domain/spec/sections/data-spec/custom-data-spec-entry.js +1 -0
  1005. package/dist/domain/spec/sections/data-spec/data-entry-key.d.ts +9 -0
  1006. package/dist/domain/spec/sections/data-spec/data-entry-key.js +1 -0
  1007. package/dist/domain/spec/sections/data-spec/index.d.ts +5 -0
  1008. package/dist/domain/spec/sections/data-spec/index.js +1 -0
  1009. package/dist/domain/spec/sections/data-spec/parsed-data-spec-entries.d.ts +10 -0
  1010. package/dist/domain/spec/sections/data-spec/parsed-data-spec-entries.js +1 -0
  1011. package/dist/domain/spec/sections/data-spec/swatch-data-spec-entry.d.ts +14 -0
  1012. package/dist/domain/spec/sections/data-spec/swatch-data-spec-entry.js +1 -0
  1013. package/dist/domain/spec/sections/index.d.ts +10 -0
  1014. package/dist/domain/spec/sections/index.js +1 -0
  1015. package/dist/domain/spec/sections/infra/acl.d.ts +12 -0
  1016. package/dist/domain/spec/sections/infra/acl.js +1 -0
  1017. package/dist/domain/spec/sections/infra/index.d.ts +3 -0
  1018. package/dist/domain/spec/sections/infra/index.js +1 -0
  1019. package/dist/domain/spec/sections/infra/resource-entry.d.ts +46 -0
  1020. package/dist/domain/spec/sections/infra/resource-entry.js +1 -0
  1021. package/dist/domain/spec/sections/infra/resources-config.d.ts +10 -0
  1022. package/dist/domain/spec/sections/infra/resources-config.js +1 -0
  1023. package/dist/domain/spec/sections/state-value.d.ts +7 -0
  1024. package/dist/domain/spec/sections/state-value.js +1 -0
  1025. package/dist/domain/spec/sections/theme.d.ts +10 -0
  1026. package/dist/domain/spec/sections/theme.js +1 -0
  1027. package/dist/domain/spec/sections/transformers.d.ts +15 -0
  1028. package/dist/domain/spec/sections/transformers.js +1 -0
  1029. package/dist/domain/spec/sections/ui.d.ts +12 -0
  1030. package/dist/domain/spec/sections/ui.js +1 -0
  1031. package/dist/domain/system-components/phoenix-entity-elements/child-entity-card-selector.d.ts +2 -3
  1032. package/dist/domain/system-components/phoenix-entity-elements/child-entity-list-selector.d.ts +2 -3
  1033. package/dist/domain/system-components/phoenix-entity-elements/child-entity-toggle-selector.d.ts +2 -3
  1034. package/dist/domain/system-definitions.js +1 -1
  1035. package/dist/domain/utils/index.d.ts +2 -0
  1036. package/dist/domain/utils/index.js +1 -0
  1037. package/dist/editor/domain-editors/DomainSpecContext.js +1 -1
  1038. package/dist/editor/domain-editors/apply-spec-update.d.ts +10 -2
  1039. package/dist/editor/domain-editors/apply-spec-update.js +1 -1
  1040. package/dist/editor/domain-editors/use-implementation-files.d.ts +6 -14
  1041. package/dist/editor/domain-editors/use-implementation-files.js +1 -1
  1042. package/dist/editor/graphql/GraphQLPanel.js +1 -1
  1043. package/dist/editor/screenshot/ScreenshotHandler.js +1 -1
  1044. package/dist/i18n/locales/cs/messages.js +1 -1
  1045. package/dist/i18n/locales/da/messages.js +1 -1
  1046. package/dist/i18n/locales/de/messages.js +1 -1
  1047. package/dist/i18n/locales/de-AT/messages.js +1 -1
  1048. package/dist/i18n/locales/en/messages.js +1 -1
  1049. package/dist/i18n/locales/en-AU/messages.js +1 -1
  1050. package/dist/i18n/locales/en-GB/messages.js +1 -1
  1051. package/dist/i18n/locales/es/messages.js +1 -1
  1052. package/dist/i18n/locales/fr/messages.js +1 -1
  1053. package/dist/i18n/locales/hu/messages.js +1 -1
  1054. package/dist/i18n/locales/it/messages.js +1 -1
  1055. package/dist/i18n/locales/nl/messages.js +1 -1
  1056. package/dist/i18n/locales/pl/messages.js +1 -1
  1057. package/dist/i18n/locales/pt/messages.js +1 -1
  1058. package/dist/i18n/locales/ro/messages.js +1 -1
  1059. package/dist/i18n/locales/sk/messages.js +1 -1
  1060. package/dist/i18n/locales/tr/messages.js +1 -1
  1061. package/dist/legacy/domain-cli/utils/cache.d.ts +1 -1
  1062. package/dist/legacy/domain-cli/utils/cache.js +1 -1
  1063. package/dist/legacy/domain-spec/__generated/domain-schema.d.ts +16 -0
  1064. package/dist/legacy/domain-spec/spec/domain-spec.js +1 -1
  1065. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/claude-md.d.ts +1 -1
  1066. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/cursor-rules.d.ts +1 -1
  1067. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/shared-sdk-content.d.ts +1 -1
  1068. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/shared-sdk-content.js +11 -5
  1069. package/dist/legacy/phoenix-cli/services/webhook-service/transport.js +1 -1
  1070. package/dist/legacy/phoenix-cli/services/webhook-service/tunnel.d.ts +1 -0
  1071. package/dist/legacy/phoenix-cli/services/webhook-service/tunnel.js +1 -1
  1072. package/dist/legacy/webhook-cli/lambda-local/index.js +1 -1
  1073. package/dist/phoenix/application-spec/application-spec-builder.js +1 -1
  1074. package/dist/phoenix/application-spec/generate-application-spec-project.d.ts +1 -0
  1075. package/dist/phoenix/application-spec/generate-application-spec-project.js +2 -2
  1076. package/dist/phoenix/application-spec/generate-project-files.d.ts +1 -0
  1077. package/dist/phoenix/application-spec/index.d.ts +2 -0
  1078. package/dist/phoenix/application-spec/index.js +1 -1
  1079. package/dist/phoenix/application-spec/project-files.d.ts +8 -2
  1080. package/dist/phoenix/application-spec/project-files.js +1 -1
  1081. package/dist/phoenix/application-spec/resolve-deployment-data.d.ts +11 -0
  1082. package/dist/phoenix/application-spec/resolve-deployment-data.js +2 -2
  1083. package/dist/phoenix/bin.js +1 -1
  1084. package/dist/phoenix/cli.js +1 -1
  1085. package/dist/phoenix/commands/activate-deployment.js +1 -1
  1086. package/dist/phoenix/commands/build.js +1 -1
  1087. package/dist/phoenix/commands/changelog.js +1 -1
  1088. package/dist/phoenix/commands/check.js +1 -1
  1089. package/dist/phoenix/commands/clean.js +1 -1
  1090. package/dist/phoenix/commands/cleanup-environment.js +2 -2
  1091. package/dist/phoenix/commands/create-environment.js +1 -1
  1092. package/dist/phoenix/commands/data.js +1 -1
  1093. package/dist/phoenix/commands/deploy.js +3 -3
  1094. package/dist/phoenix/commands/deployment-build-envs-command.js +1 -1
  1095. package/dist/phoenix/commands/dev.js +4 -5
  1096. package/dist/phoenix/commands/docs.js +1 -1
  1097. package/dist/phoenix/commands/finish-deployment-command.js +1 -1
  1098. package/dist/phoenix/commands/fix.js +1 -1
  1099. package/dist/phoenix/commands/index.d.ts +1 -1
  1100. package/dist/phoenix/commands/index.js +1 -1
  1101. package/dist/phoenix/commands/inspect-assets.js +1 -1
  1102. package/dist/phoenix/commands/list-environments.js +1 -1
  1103. package/dist/phoenix/commands/login.d.ts +4 -1
  1104. package/dist/phoenix/commands/login.js +2 -2
  1105. package/dist/phoenix/commands/prepare-deployment-command.js +2 -2
  1106. package/dist/phoenix/commands/register-deployment.js +1 -1
  1107. package/dist/phoenix/commands/scene.js +1 -1
  1108. package/dist/phoenix/commands/screenshot.js +1 -1
  1109. package/dist/phoenix/commands/state.js +1 -1
  1110. package/dist/phoenix/commands/story-build.js +3 -3
  1111. package/dist/phoenix/commands/story-create.js +1 -1
  1112. package/dist/phoenix/commands/story-dev.js +2 -2
  1113. package/dist/phoenix/commands/sync.js +1 -1
  1114. package/dist/phoenix/commands/variants.js +1 -1
  1115. package/dist/phoenix/editor-server/commands-router.js +1 -1
  1116. package/dist/phoenix/editor-server/editor-server.d.ts +2 -13
  1117. package/dist/phoenix/editor-server/editor-server.js +1 -1
  1118. package/dist/phoenix/editor-server/spec-router.js +1 -1
  1119. package/dist/phoenix/editor-server/trpc.d.ts +2 -12
  1120. package/dist/phoenix/lingui/index.d.ts +1 -0
  1121. package/dist/phoenix/lingui/index.js +1 -0
  1122. package/dist/phoenix/lingui/lingui.d.ts +18 -0
  1123. package/dist/phoenix/lingui/lingui.js +1 -0
  1124. package/dist/phoenix/scripts/docs-utils.js +1 -1
  1125. package/dist/phoenix/services/application-spec-project-watcher.d.ts +11 -6
  1126. package/dist/phoenix/services/application-spec-project-watcher.js +2 -2
  1127. package/dist/phoenix/services/cli-credentials.d.ts +3 -0
  1128. package/dist/phoenix/services/cli-credentials.js +1 -1
  1129. package/dist/phoenix/services/cli-exit.d.ts +5 -0
  1130. package/dist/phoenix/services/cli-exit.js +1 -0
  1131. package/dist/phoenix/services/deployment/deployment-preparation-service.d.ts +28 -0
  1132. package/dist/phoenix/services/deployment/deployment-preparation-service.js +1 -0
  1133. package/dist/phoenix/{commands → services/deployment}/generated-env-markers.d.ts +1 -0
  1134. package/dist/phoenix/services/deployment/generated-env-markers.js +1 -0
  1135. package/dist/phoenix/services/deployment/index.d.ts +2 -0
  1136. package/dist/phoenix/services/deployment/index.js +1 -0
  1137. package/dist/phoenix/services/index.d.ts +5 -1
  1138. package/dist/phoenix/services/index.js +1 -1
  1139. package/dist/phoenix/services/lingui-watcher.js +1 -1
  1140. package/dist/phoenix/services/phoenix-store.d.ts +3 -0
  1141. package/dist/phoenix/services/phoenix-store.js +1 -1
  1142. package/dist/phoenix/services/prepare-development-environment.js +1 -1
  1143. package/dist/phoenix/services/session/editor-server-handle.d.ts +5 -0
  1144. package/dist/phoenix/services/session/editor-server-handle.js +1 -0
  1145. package/dist/phoenix/services/session/index.d.ts +2 -0
  1146. package/dist/phoenix/services/session/index.js +1 -0
  1147. package/dist/phoenix/services/session/phoenix-application.d.ts +82 -0
  1148. package/dist/phoenix/services/session/phoenix-application.js +2 -0
  1149. package/dist/phoenix/services/source-archive.d.ts +2 -0
  1150. package/dist/phoenix/services/source-archive.js +1 -1
  1151. package/dist/phoenix/services/swc.d.ts +5 -4
  1152. package/dist/phoenix/services/swc.js +2 -2
  1153. package/dist/phoenix/services/telemetry/amplitude-telemetry-transport.d.ts +9 -0
  1154. package/dist/phoenix/services/telemetry/amplitude-telemetry-transport.js +1 -0
  1155. package/dist/phoenix/services/telemetry/index.d.ts +3 -0
  1156. package/dist/phoenix/services/telemetry/index.js +1 -0
  1157. package/dist/phoenix/services/telemetry/telemetry-client.d.ts +25 -0
  1158. package/dist/phoenix/services/telemetry/telemetry-client.js +1 -0
  1159. package/dist/phoenix/services/telemetry/telemetry-command.d.ts +2 -0
  1160. package/dist/phoenix/services/telemetry/telemetry-command.js +1 -0
  1161. package/dist/phoenix/services/telemetry/telemetry-event.d.ts +44 -0
  1162. package/dist/phoenix/services/telemetry/telemetry-event.js +1 -0
  1163. package/dist/phoenix/services/telemetry/telemetry-state.d.ts +25 -0
  1164. package/dist/phoenix/services/telemetry/telemetry-state.js +2 -0
  1165. package/dist/phoenix/services/vite-config.js +1 -1
  1166. package/dist/phoenix/services/webhook-service/transport.js +1 -1
  1167. package/dist/phoenix/services/webhook-service/tunnel.d.ts +1 -0
  1168. package/dist/phoenix/services/webhook-service/tunnel.js +1 -1
  1169. package/dist/react-sdk/application-runtime/common-services/analytics/analytics-service.d.ts +1 -1
  1170. package/dist/react-sdk/application-runtime/common-services/initialize.d.ts +2 -2
  1171. package/dist/react-sdk/application-runtime/domain-application-context/chat-system.d.ts +1 -1
  1172. package/dist/react-sdk/application-runtime/hooks/index.d.ts +2 -0
  1173. package/dist/react-sdk/application-runtime/hooks/index.js +1 -1
  1174. package/dist/react-sdk/application-runtime/hooks/loading/index.d.ts +5 -0
  1175. package/dist/react-sdk/application-runtime/hooks/loading/index.js +1 -0
  1176. package/dist/react-sdk/application-runtime/hooks/loading/loader-host-context.d.ts +11 -0
  1177. package/dist/react-sdk/application-runtime/hooks/loading/loader-host-context.js +1 -0
  1178. package/dist/react-sdk/application-runtime/hooks/loading/use-is-awaiting-loading-phase.d.ts +8 -0
  1179. package/dist/react-sdk/application-runtime/hooks/loading/use-is-awaiting-loading-phase.js +1 -0
  1180. package/dist/react-sdk/application-runtime/hooks/loading/use-is-loader-hosted.d.ts +7 -0
  1181. package/dist/react-sdk/application-runtime/hooks/loading/use-is-loader-hosted.js +1 -0
  1182. package/dist/react-sdk/application-runtime/hooks/loading/use-loading-actions.d.ts +9 -0
  1183. package/dist/react-sdk/application-runtime/hooks/loading/use-loading-actions.js +1 -0
  1184. package/dist/react-sdk/application-runtime/hooks/loading/use-loading-application.d.ts +24 -0
  1185. package/dist/react-sdk/application-runtime/hooks/loading/use-loading-application.js +1 -0
  1186. package/dist/react-sdk/application-runtime/hooks/responsive/index.d.ts +3 -0
  1187. package/dist/react-sdk/application-runtime/hooks/responsive/index.js +1 -0
  1188. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-actions.d.ts +9 -0
  1189. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-actions.js +1 -0
  1190. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-application.d.ts +26 -0
  1191. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-application.js +1 -0
  1192. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-state.d.ts +10 -0
  1193. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-state.js +1 -0
  1194. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-store.d.ts +24 -0
  1195. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-store.js +1 -0
  1196. package/dist/react-sdk/application-runtime/hooks/use-access-service.d.ts +5 -0
  1197. package/dist/react-sdk/application-runtime/hooks/use-access-service.js +1 -1
  1198. package/dist/react-sdk/application-runtime/hooks/use-phoenix-element-slots.d.ts +2 -1
  1199. package/dist/react-sdk/application-runtime/hooks/use-web-component-readonly-sync.d.ts +4 -11
  1200. package/dist/react-sdk/application-runtime/hooks/use-web-component-readonly-sync.js +1 -1
  1201. package/dist/react-sdk/application-runtime/hooks/use-web-component.d.ts +5 -0
  1202. package/dist/react-sdk/application-runtime/hooks/use-web-component.js +1 -1
  1203. package/dist/react-sdk/application-runtime/host-properties/actions.d.ts +15 -0
  1204. package/dist/react-sdk/application-runtime/host-properties/actions.js +1 -0
  1205. package/dist/react-sdk/application-runtime/host-properties/connect-host-properties.d.ts +30 -0
  1206. package/dist/react-sdk/application-runtime/host-properties/connect-host-properties.js +1 -0
  1207. package/dist/react-sdk/application-runtime/host-properties/domain-host-properties.d.ts +7 -0
  1208. package/dist/react-sdk/application-runtime/host-properties/domain-host-properties.js +1 -0
  1209. package/dist/react-sdk/application-runtime/host-properties/host-property-descriptors.d.ts +21 -0
  1210. package/dist/react-sdk/application-runtime/host-properties/host-property-descriptors.js +1 -0
  1211. package/dist/react-sdk/application-runtime/host-properties/host-property-scopes.d.ts +42 -0
  1212. package/dist/react-sdk/application-runtime/host-properties/host-property-scopes.js +1 -0
  1213. package/dist/react-sdk/application-runtime/host-properties/index.d.ts +8 -0
  1214. package/dist/react-sdk/application-runtime/host-properties/index.js +1 -0
  1215. package/dist/react-sdk/application-runtime/host-properties/initialize.d.ts +7 -0
  1216. package/dist/react-sdk/application-runtime/host-properties/initialize.js +1 -0
  1217. package/dist/react-sdk/application-runtime/host-properties/selectors.d.ts +54 -0
  1218. package/dist/react-sdk/application-runtime/host-properties/selectors.js +1 -0
  1219. package/dist/react-sdk/application-runtime/host-properties/types.d.ts +18 -0
  1220. package/dist/react-sdk/application-runtime/host-properties/types.js +1 -0
  1221. package/dist/react-sdk/application-runtime/index.d.ts +3 -0
  1222. package/dist/react-sdk/application-runtime/integration/initialize.d.ts +7 -6
  1223. package/dist/react-sdk/application-runtime/integration/initialize.js +1 -1
  1224. package/dist/react-sdk/application-runtime/integration/selectors.d.ts +11 -2
  1225. package/dist/react-sdk/application-runtime/integration/selectors.js +1 -1
  1226. package/dist/react-sdk/application-runtime/integration/types.d.ts +5 -2
  1227. package/dist/react-sdk/application-runtime/loading/actions.d.ts +45 -0
  1228. package/dist/react-sdk/application-runtime/loading/actions.js +1 -0
  1229. package/dist/react-sdk/application-runtime/loading/index.d.ts +4 -0
  1230. package/dist/react-sdk/application-runtime/loading/index.js +1 -0
  1231. package/dist/react-sdk/application-runtime/loading/initialize.d.ts +3 -0
  1232. package/dist/react-sdk/application-runtime/loading/initialize.js +1 -0
  1233. package/dist/react-sdk/application-runtime/loading/selectors.d.ts +18 -0
  1234. package/dist/react-sdk/application-runtime/loading/selectors.js +1 -0
  1235. package/dist/react-sdk/application-runtime/loading/types.d.ts +59 -0
  1236. package/dist/react-sdk/application-runtime/loading/types.js +1 -0
  1237. package/dist/react-sdk/application-runtime/mocks/create-mock-application-runtime.js +1 -1
  1238. package/dist/react-sdk/application-runtime/provider/ApplicationRuntime.d.ts +6 -0
  1239. package/dist/react-sdk/application-runtime/provider/ApplicationRuntime.js +1 -1
  1240. package/dist/react-sdk/application-runtime/provider/ApplicationType.d.ts +7 -0
  1241. package/dist/react-sdk/application-runtime/provider/ApplicationType.js +1 -1
  1242. package/dist/react-sdk/application-runtime/responsive/actions.d.ts +47 -0
  1243. package/dist/react-sdk/application-runtime/responsive/actions.js +1 -0
  1244. package/dist/react-sdk/application-runtime/responsive/index.d.ts +4 -0
  1245. package/dist/react-sdk/application-runtime/responsive/index.js +1 -0
  1246. package/dist/react-sdk/application-runtime/responsive/initialize.d.ts +3 -0
  1247. package/dist/react-sdk/application-runtime/responsive/initialize.js +1 -0
  1248. package/dist/react-sdk/application-runtime/responsive/selectors.d.ts +20 -0
  1249. package/dist/react-sdk/application-runtime/responsive/selectors.js +1 -0
  1250. package/dist/react-sdk/application-runtime/responsive/types.d.ts +104 -0
  1251. package/dist/react-sdk/application-runtime/responsive/types.js +1 -0
  1252. package/dist/react-sdk/application-runtime/routing/routing-service.d.ts +34 -2
  1253. package/dist/react-sdk/application-runtime/routing/routing-service.js +1 -1
  1254. package/dist/react-sdk/application-runtime/runtime/create-application-runtime.d.ts +313 -10
  1255. package/dist/react-sdk/application-runtime/runtime/create-application-runtime.js +1 -1
  1256. package/dist/{configurator/configurator-context → react-sdk}/configurator-routing/ConfiguratorRoutingProvider.d.ts +1 -1
  1257. package/dist/react-sdk/configurator-routing/ConfiguratorRoutingProvider.js +1 -0
  1258. package/dist/{configurator/configurator-context → react-sdk}/configurator-routing/OnGoToIndexHandler.d.ts +1 -2
  1259. package/dist/react-sdk/configurator-routing/OnGoToIndexHandler.js +1 -0
  1260. package/dist/react-sdk/configurator-routing/index.d.ts +3 -0
  1261. package/dist/{configurator/configurator-context → react-sdk}/configurator-routing/index.js +1 -1
  1262. package/dist/{configurator/configurator-context → react-sdk}/configurator-routing/use-power-routing-lifecycle.d.ts +2 -0
  1263. package/dist/react-sdk/configurator-routing/use-power-routing-lifecycle.js +1 -0
  1264. package/dist/react-sdk/configurator-ui-elements/ConfiguratorUiElementHost.d.ts +7 -0
  1265. package/dist/react-sdk/configurator-ui-elements/ConfiguratorUiElementHost.js +1 -0
  1266. package/dist/react-sdk/configurator-ui-elements/ErrorFallbackElement.d.ts +14 -0
  1267. package/dist/react-sdk/configurator-ui-elements/ErrorFallbackElement.js +1 -0
  1268. package/dist/react-sdk/configurator-ui-elements/ErrorFallbackPropsProvider.d.ts +18 -0
  1269. package/dist/react-sdk/configurator-ui-elements/ErrorFallbackPropsProvider.js +1 -0
  1270. package/dist/react-sdk/configurator-ui-elements/PlainErrorFallback.d.ts +5 -0
  1271. package/dist/react-sdk/configurator-ui-elements/PlainErrorFallback.js +1 -0
  1272. package/dist/react-sdk/configurator-ui-elements/configurator-ui-element.d.ts +17 -0
  1273. package/dist/react-sdk/configurator-ui-elements/configurator-ui-element.js +1 -0
  1274. package/dist/react-sdk/configurator-ui-elements/create-configurator-ui-element.d.ts +5 -0
  1275. package/dist/react-sdk/configurator-ui-elements/create-configurator-ui-element.js +1 -0
  1276. package/dist/react-sdk/configurator-ui-elements/index.d.ts +6 -0
  1277. package/dist/react-sdk/configurator-ui-elements/index.js +1 -0
  1278. package/dist/react-sdk/domain-application-context/BackendDataProvider.js +1 -1
  1279. package/dist/react-sdk/domain-application-context/ConfigurationPersistSystemFailureHandler.js +1 -1
  1280. package/dist/react-sdk/domain-application-context/FrontendDataProvider.js +1 -1
  1281. package/dist/react-sdk/domain-application-context/OnPresetLoadedHandler.js +1 -0
  1282. package/dist/react-sdk/domain-application-context/PublishedDataProvider.js +1 -1
  1283. package/dist/react-sdk/domain-application-context/chat-hooks.d.ts +4 -0
  1284. package/dist/react-sdk/domain-application-context/chat-hooks.js +1 -0
  1285. package/dist/react-sdk/domain-application-context/index.d.ts +2 -0
  1286. package/dist/react-sdk/domain-application-context/index.js +1 -1
  1287. package/dist/react-sdk/domain-context/common-hooks/index.d.ts +1 -0
  1288. package/dist/react-sdk/domain-context/common-hooks/index.js +1 -1
  1289. package/dist/react-sdk/domain-context/common-hooks/use-configuration-save-state.d.ts +23 -0
  1290. package/dist/react-sdk/domain-context/common-hooks/use-configuration-save-state.js +1 -0
  1291. package/dist/react-sdk/domain-context/common-hooks/use-domain-context.d.ts +1 -0
  1292. package/dist/react-sdk/domain-context/common-hooks/use-state-validity.d.ts +7 -1
  1293. package/dist/react-sdk/domain-context/index.d.ts +1 -0
  1294. package/dist/react-sdk/domain-context/index.js +1 -1
  1295. package/dist/react-sdk/domain-controls/ChildEntityCardSelector.d.ts +2 -3
  1296. package/dist/react-sdk/domain-controls/ChildEntityListSelector.d.ts +2 -3
  1297. package/dist/react-sdk/domain-controls/ChildEntityToggleSelector.d.ts +2 -3
  1298. package/dist/react-sdk/domain-controls/hooks/use-cook-replace-recipes.d.ts +2 -2
  1299. package/dist/react-sdk/elements/PhoenixEntityElement.js +1 -1
  1300. package/dist/react-sdk/elements/PhoenixLayoutElement.js +1 -1
  1301. package/dist/react-sdk/elements/index.d.ts +0 -1
  1302. package/dist/react-sdk/index.d.ts +8 -1
  1303. package/dist/react-sdk/index.js +1 -1
  1304. package/dist/react-sdk/integration/IntegrationSubscription.js +1 -0
  1305. package/dist/react-sdk/integration/index.d.ts +1 -0
  1306. package/dist/react-sdk/integration/index.js +1 -0
  1307. package/dist/react-sdk/lifecycle-providers/ConfiguratorDataProvider.d.ts +8 -0
  1308. package/dist/react-sdk/lifecycle-providers/ConfiguratorDataProvider.js +1 -0
  1309. package/dist/react-sdk/lifecycle-providers/LifecycleProviders.js +1 -0
  1310. package/dist/react-sdk/lifecycle-providers/index.d.ts +2 -0
  1311. package/dist/react-sdk/lifecycle-providers/index.js +1 -0
  1312. package/dist/react-sdk/loading-state/LoaderHost.d.ts +20 -0
  1313. package/dist/react-sdk/loading-state/LoaderHost.js +1 -0
  1314. package/dist/react-sdk/loading-state/built-in-loading-phase.d.ts +9 -0
  1315. package/dist/react-sdk/loading-state/built-in-loading-phase.js +1 -0
  1316. package/dist/react-sdk/loading-state/create-app-loader.d.ts +18 -0
  1317. package/dist/react-sdk/loading-state/create-app-loader.js +1 -0
  1318. package/dist/react-sdk/loading-state/index.d.ts +4 -2
  1319. package/dist/react-sdk/loading-state/index.js +1 -1
  1320. package/dist/react-sdk/loading-state/{LoadingStateProvider.d.ts → loading-state-hooks.d.ts} +3 -12
  1321. package/dist/react-sdk/loading-state/loading-state-hooks.js +1 -0
  1322. package/dist/react-sdk/notifications/index.d.ts +1 -0
  1323. package/dist/react-sdk/notifications/index.js +1 -0
  1324. package/dist/react-sdk/notifications/snackbar-action-button.d.ts +30 -0
  1325. package/dist/react-sdk/notifications/snackbar-action-button.js +1 -0
  1326. package/dist/react-sdk/page-elements/ConfigurationNotFoundPagePropsProvider.d.ts +17 -0
  1327. package/dist/react-sdk/page-elements/ConfigurationNotFoundPagePropsProvider.js +1 -0
  1328. package/dist/react-sdk/page-elements/ConfiguratorErrorPagePropsProvider.d.ts +17 -0
  1329. package/dist/react-sdk/page-elements/ConfiguratorErrorPagePropsProvider.js +1 -0
  1330. package/dist/react-sdk/page-elements/configurator-error-page-props.js +1 -0
  1331. package/dist/{configurator/configuration-not-found-page → react-sdk/page-elements}/create-configuration-not-found-page.d.ts +7 -1
  1332. package/dist/react-sdk/page-elements/create-configuration-not-found-page.js +1 -0
  1333. package/dist/{configurator/configurator-error-page → react-sdk/page-elements}/create-configurator-error-page.d.ts +6 -1
  1334. package/dist/react-sdk/page-elements/create-configurator-error-page.js +1 -0
  1335. package/dist/react-sdk/page-elements/create-preset-ui.d.ts +9 -0
  1336. package/dist/react-sdk/page-elements/create-preset-ui.js +1 -0
  1337. package/dist/react-sdk/page-elements/index.d.ts +6 -0
  1338. package/dist/react-sdk/page-elements/index.js +1 -0
  1339. package/dist/react-sdk/preset-selection/PresetSelectionProvider.js +1 -0
  1340. package/dist/react-sdk/preset-selection/index.d.ts +1 -0
  1341. package/dist/react-sdk/preset-selection/index.js +1 -0
  1342. package/dist/react-sdk/provider-slots/ConfiguratorProviderSlotHost.d.ts +11 -0
  1343. package/dist/react-sdk/provider-slots/ConfiguratorProviderSlotHost.js +1 -0
  1344. package/dist/react-sdk/provider-slots/configurator-provider-slot.d.ts +24 -0
  1345. package/dist/react-sdk/provider-slots/configurator-provider-slot.js +1 -0
  1346. package/dist/react-sdk/provider-slots/create-configurator-provider-slot.d.ts +5 -0
  1347. package/dist/react-sdk/provider-slots/create-configurator-provider-slot.js +1 -0
  1348. package/dist/react-sdk/provider-slots/index.d.ts +3 -0
  1349. package/dist/react-sdk/provider-slots/index.js +1 -0
  1350. package/dist/react-sdk/session/SessionServiceProvider.d.ts +5 -0
  1351. package/dist/react-sdk/session/SessionServiceProvider.js +1 -1
  1352. package/dist/react-sdk/web-component/create-web-component.js +1 -1
  1353. package/dist/react-sdk/web-component/god-mode/god-mode-registry.d.ts +30 -0
  1354. package/dist/react-sdk/web-component/god-mode/god-mode-registry.js +1 -0
  1355. package/dist/react-sdk/web-component/god-mode/index.d.ts +1 -0
  1356. package/dist/react-sdk/web-component/god-mode/index.js +1 -0
  1357. package/dist/ui-sdk/components/numerical-input/InputField.d.ts +2 -0
  1358. package/dist/ui-sdk/components/numerical-input/InputField.js +1 -1
  1359. package/dist/ui-sdk/components/numerical-input/NumericalInput.d.ts +2 -2
  1360. package/dist/ui-sdk/components/numerical-input/Slider.d.ts +3 -1
  1361. package/dist/ui-sdk/components/numerical-input/Slider.js +1 -1
  1362. package/dist/ui-sdk/components/snackbar/Snackbar.d.ts +24 -3
  1363. package/dist/ui-sdk/components/snackbar/Snackbar.js +1 -1
  1364. package/dist/ui-sdk/icons/__generated/ChatCircleText.d.ts +3 -0
  1365. package/dist/ui-sdk/icons/__generated/ChatCircleText.js +1 -0
  1366. package/dist/ui-sdk/icons/__generated/Paperclip.d.ts +3 -0
  1367. package/dist/ui-sdk/icons/__generated/Paperclip.js +1 -0
  1368. package/dist/ui-sdk/icons/__generated/PencilSimpleLine.d.ts +3 -0
  1369. package/dist/ui-sdk/icons/__generated/PencilSimpleLine.js +1 -0
  1370. package/dist/ui-sdk/icons/__generated/index.d.ts +6 -0
  1371. package/dist/ui-sdk/icons/__generated/index.js +1 -1
  1372. package/dist/ui-sdk/icons/icons-registry.js +1 -1
  1373. package/dist/ui-sdk/responsive-application/ResponsiveApplicationProvider.d.ts +2 -2
  1374. package/dist/ui-sdk/responsive-application/responsive-state-store.d.ts +11 -9
  1375. package/dist/ui-sdk/responsive-application/use-store-responsive-info.js +1 -1
  1376. package/dist/ui-sdk/theme/types.d.ts +5 -1
  1377. package/dist/watch/glob-matcher.d.ts +4 -4
  1378. package/dist/watch/glob-matcher.js +1 -1
  1379. package/dist/watch/watch.d.ts +4 -4
  1380. package/dist/watch/watch.js +1 -1
  1381. package/package.json +13 -3
  1382. package/schema/domain-spec.json +158 -0
  1383. package/dist/application-spec/caching/runtime-reference-store.js +0 -1
  1384. package/dist/application-spec/core/components/index.d.ts +0 -2
  1385. package/dist/application-spec/core/expressions/index.d.ts +0 -2
  1386. package/dist/application-spec/generate-application/code/templates/skills/phoenix-cli-skill.d.ts +0 -1
  1387. package/dist/application-spec/generate-application/code/templates/skills/phoenix-cli-skill.js +0 -1
  1388. package/dist/application-spec/generate-application/code/templates/skills/phoenix-create-configurator-skill.d.ts +0 -3
  1389. package/dist/application-spec/generate-application/code/templates/skills/phoenix-create-configurator-skill.js +0 -166
  1390. package/dist/application-spec/generate-application/code/templates/skills/phoenix-feedback-skill.d.ts +0 -1
  1391. package/dist/application-spec/generate-application/code/templates/skills/phoenix-feedback-skill.js +0 -54
  1392. package/dist/application-spec/generate-application/code/templates/skills/phoenix-review-skill.d.ts +0 -1
  1393. package/dist/application-spec/generate-application/code/templates/skills/phoenix-review-skill.js +0 -115
  1394. package/dist/application-spec/generate-application/code/templates/skills/phoenix-skill.js +0 -1
  1395. package/dist/application-spec/generate-application/code/templates/skills/phoenix-variants-skill.d.ts +0 -1
  1396. package/dist/application-spec/generate-application/code/templates/skills/phoenix-variants-skill.js +0 -6
  1397. package/dist/application-spec/generate-application/runtime/admin-runtime/admin-model-runtime.js +0 -1
  1398. package/dist/application-spec/generate-application/runtime/admin-runtime/admin-runtime.d.ts +0 -28
  1399. package/dist/application-spec/generate-application/runtime/admin-runtime/admin-runtime.js +0 -1
  1400. package/dist/application-spec/generate-application/runtime/application-runtime.js +0 -1
  1401. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-model-runtime.js +0 -1
  1402. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-runtime.d.ts +0 -37
  1403. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-runtime.js +0 -1
  1404. package/dist/application-spec/generate-application/runtime/generate-runtime-instance.js +0 -1
  1405. package/dist/application-spec/generate-application/runtime/migrations/migration-runtime.js +0 -1
  1406. package/dist/application-spec/generate-application/runtime/sections/build-sdk-optic.d.ts +0 -8
  1407. package/dist/application-spec/generate-application/runtime/sections/build-sdk-optic.js +0 -1
  1408. package/dist/application-spec/generate-application/runtime/sections/build-user-bound-optic.d.ts +0 -8
  1409. package/dist/application-spec/generate-application/runtime/sections/build-user-bound-optic.js +0 -1
  1410. package/dist/application-spec/generate-application/runtime/sections/expression-runtime.js +0 -1
  1411. package/dist/application-spec/generate-application/runtime/sections/generate-memo-eval-plan-runtime.js +0 -1
  1412. package/dist/application-spec/generate-application/runtime/sections/index.d.ts +0 -10
  1413. package/dist/application-spec/generate-application/runtime/sections/index.js +0 -1
  1414. package/dist/application-spec/generate-application/runtime-spec/index.d.ts +0 -5
  1415. package/dist/application-spec/generate-application/runtime-spec/index.js +0 -1
  1416. package/dist/application-spec/generate-application/runtime-spec/runtime-spec.d.ts +0 -68
  1417. package/dist/application-spec/generate-application/runtime-spec/runtime-spec.js +0 -1
  1418. package/dist/configurator/app-loader-content/app-loader-content-name.d.ts +0 -5
  1419. package/dist/configurator/app-loader-content/app-loader-content-name.js +0 -1
  1420. package/dist/configurator/application-runtime/extensions/systems/assistant-system/browser-details.d.ts +0 -17
  1421. package/dist/configurator/application-runtime/extensions/systems/assistant-system/browser-details.js +0 -1
  1422. package/dist/configurator/configuration-not-found-page/create-configuration-not-found-page.js +0 -1
  1423. package/dist/configurator/configurator-context/ConfiguratorDataProvider.d.ts +0 -2
  1424. package/dist/configurator/configurator-context/ConfiguratorDataProvider.js +0 -1
  1425. package/dist/configurator/configurator-context/ConfiguratorResponsiveProvider.js +0 -1
  1426. package/dist/configurator/configurator-context/IntegrationSubscription.js +0 -1
  1427. package/dist/configurator/configurator-context/LifecycleProviders.js +0 -1
  1428. package/dist/configurator/configurator-context/OnPresetLoadedHandler.js +0 -1
  1429. package/dist/configurator/configurator-context/PresetSelectionProvider.js +0 -1
  1430. package/dist/configurator/configurator-context/configurator-hooks/chat-hooks.d.ts +0 -1
  1431. package/dist/configurator/configurator-context/configurator-hooks/chat-hooks.js +0 -1
  1432. package/dist/configurator/configurator-context/configurator-routing/ConfiguratorRoutingProvider.js +0 -1
  1433. package/dist/configurator/configurator-context/configurator-routing/OnGoToIndexHandler.js +0 -1
  1434. package/dist/configurator/configurator-context/configurator-routing/index.d.ts +0 -2
  1435. package/dist/configurator/configurator-context/configurator-routing/use-power-routing-lifecycle.js +0 -1
  1436. package/dist/configurator/configurator-error-page/create-configurator-error-page.js +0 -1
  1437. package/dist/configurator/ui/assistant/form/built-in-form-registry.d.ts +0 -10
  1438. package/dist/configurator/ui/assistant/form/built-in-form-registry.js +0 -1
  1439. package/dist/configurator/ui/assistant/form/form-registry.js +0 -8
  1440. package/dist/domain/application/assistant/form/assistant-form-elements.js +0 -1
  1441. package/dist/domain/application/assistant/form/get-assistant-form-value-attribute.d.ts +0 -6
  1442. package/dist/domain/application/assistant/form/get-assistant-form-value-attribute.js +0 -1
  1443. package/dist/domain/application/assistant/form/index.js +0 -1
  1444. package/dist/domain/available-system-components.d.ts +0 -11
  1445. package/dist/domain/available-system-components.js +0 -1
  1446. package/dist/domain/domain-builder.js +0 -1
  1447. package/dist/domain/domain-runtime/spec/module-checks/element-registration.js +0 -1
  1448. package/dist/domain/domain-runtime/spec/module-checks/index.js +0 -1
  1449. package/dist/domain/domain-runtime/spec/module-checks/project-modules.js +0 -1
  1450. package/dist/domain/domain-runtime/spec/module-checks/resolve-expression-modules.js +0 -1
  1451. package/dist/domain/domain-runtime/spec/module-checks/resolve-imported-transformers.js +0 -1
  1452. package/dist/domain/extensions/client-side-image.js +0 -1
  1453. package/dist/domain/extensions/save-template-thumbnail.js +0 -1
  1454. package/dist/phoenix/commands/generated-env-markers.js +0 -1
  1455. package/dist/phoenix/services/lingui.d.ts +0 -15
  1456. package/dist/phoenix/services/lingui.js +0 -1
  1457. package/dist/phoenix/services/phoenix-application.d.ts +0 -21
  1458. package/dist/phoenix/services/phoenix-application.js +0 -1
  1459. package/dist/react-sdk/application-runtime/runtime/god-mode.d.ts +0 -19
  1460. package/dist/react-sdk/application-runtime/runtime/god-mode.js +0 -1
  1461. package/dist/react-sdk/loading-state/LoadingStateProvider.js +0 -1
  1462. package/dist/react-sdk/loading-state/loading-state-manager.d.ts +0 -37
  1463. package/dist/react-sdk/loading-state/loading-state-manager.js +0 -1
  1464. package/dist/react-sdk/responsive-state/ResponsiveStateProvider.d.ts +0 -25
  1465. package/dist/react-sdk/responsive-state/ResponsiveStateProvider.js +0 -1
  1466. package/dist/react-sdk/responsive-state/canvas-padding.d.ts +0 -14
  1467. package/dist/react-sdk/responsive-state/index.d.ts +0 -5
  1468. package/dist/react-sdk/responsive-state/index.js +0 -1
  1469. package/dist/react-sdk/responsive-state/responsive-state-manager.d.ts +0 -111
  1470. package/dist/react-sdk/responsive-state/responsive-state-manager.js +0 -1
  1471. package/dist/react-sdk/responsive-state/use-responsive-state-manager.d.ts +0 -10
  1472. package/dist/react-sdk/responsive-state/use-responsive-state-manager.js +0 -1
  1473. package/dist/react-sdk/responsive-state/use-responsive-state.d.ts +0 -11
  1474. package/dist/react-sdk/responsive-state/use-responsive-state.js +0 -1
  1475. /package/dist/{application-spec/core/expressions/relation-expression-params.js → configurator/application-runtime/extensions/systems/assistant-system/assistant-annotation.js} +0 -0
  1476. /package/dist/{application-spec/generate-application/runtime/spec-code/spec-code-module.js → domain/spec/application/admin-pages-section.js} +0 -0
  1477. /package/dist/{application-spec/parse-application-files/spec/components/component-entry.js → domain/spec/application/admin-pages.js} +0 -0
  1478. /package/dist/{application-spec/parse-application-files/spec/expressions/expression.js → domain/spec/application/admin-states.js} +0 -0
  1479. /package/dist/{application-spec/core → domain/spec/application}/application-instance.d.ts +0 -0
  1480. /package/dist/{application-spec/core → domain/spec/application}/application-instance.js +0 -0
  1481. /package/dist/{configurator/ui/assistant/form/form-element-definition.js → domain/spec/application/configurator-states.js} +0 -0
  1482. /package/dist/domain/{application/assistant/assistant-manifest.js → spec/components/bindings/index.js} +0 -0
  1483. /package/dist/{react-sdk/elements/configurator-error-page-props.js → domain/spec/components/bindings/read-binding.js} +0 -0
  1484. /package/dist/{react-sdk/responsive-state/canvas-padding.js → domain/spec/components/bindings/write-binding.js} +0 -0
  1485. /package/dist/{application-spec/core → domain/spec}/components/component-filter.js +0 -0
  1486. /package/dist/{application-spec/core → domain/spec}/components/index.js +0 -0
  1487. /package/dist/{application-spec/core → domain/spec}/components/sdk-code-ref.d.ts +0 -0
  1488. /package/dist/{application-spec/core → domain/spec}/components/sdk-code-ref.js +0 -0
  1489. /package/dist/domain/{domain-runtime → spec}/errors/implementation-error.d.ts +0 -0
  1490. /package/dist/domain/{domain-runtime → spec}/errors/implementation-error.js +0 -0
  1491. /package/dist/domain/{domain-runtime → spec}/errors/implementation-errors.d.ts +0 -0
  1492. /package/dist/domain/{domain-runtime → spec}/errors/implementation-errors.js +0 -0
  1493. /package/dist/domain/{domain-runtime → spec}/errors/index.d.ts +0 -0
  1494. /package/dist/domain/{domain-runtime → spec}/errors/index.js +0 -0
  1495. /package/dist/domain/{domain-runtime → spec}/errors/to-implementation-errors.d.ts +0 -0
  1496. /package/dist/domain/{domain-runtime → spec}/errors/to-implementation-errors.js +0 -0
  1497. /package/dist/{application-spec/core → domain/spec}/expressions/index.js +0 -0
  1498. /package/dist/{application-spec/core → domain/spec}/expressions/relation-expression-params.d.ts +0 -0
  1499. /package/dist/{application-spec/core → domain/spec}/expressions/sdk-expression-implementation.d.ts +0 -0
  1500. /package/dist/{application-spec/core → domain/spec}/expressions/sdk-expression-implementation.js +0 -0
  1501. /package/dist/{application-spec/parse-application-files/spec/components → domain/spec/markers}/component-prop-target.d.ts +0 -0
  1502. /package/dist/{application-spec/parse-application-files/spec/components → domain/spec/markers}/component-prop-target.js +0 -0
  1503. /package/dist/{application-spec/core → domain/spec}/markers/eval-marker.d.ts +0 -0
  1504. /package/dist/{application-spec/core → domain/spec}/markers/eval-marker.js +0 -0
  1505. /package/dist/domain/{domain-runtime/spec/module-checks → spec/modules}/handler-registration.d.ts +0 -0
  1506. /package/dist/domain/{domain-runtime/spec/module-checks → spec/modules}/handler-registration.js +0 -0
  1507. /package/dist/domain/{domain-runtime/spec/module-checks → spec/modules}/resolve-action-modules.js +0 -0
  1508. /package/dist/domain/{domain-runtime/spec/module-checks → spec/modules}/resolve-component-optic-modules.js +0 -0
  1509. /package/dist/domain/{domain-runtime/spec/module-checks → spec/modules}/resolve-invariant-modules.js +0 -0
  1510. /package/dist/{application-spec/generate-application → domain/spec}/runtime/admin-runtime/states-runtime.js +0 -0
  1511. /package/dist/{application-spec/generate-application → domain/spec}/runtime/configurator-runtime/states-runtime.js +0 -0
  1512. /package/dist/{application-spec/generate-application/runtime/sections → domain/spec/runtime/expressions}/reflection-constants-runtime.js +0 -0
  1513. /package/dist/{application-spec/generate-application → domain/spec}/runtime/factory-data/factory-data-runtime.js +0 -0
  1514. /package/dist/{application-spec/generate-application → domain/spec}/runtime/factory-data/index.d.ts +0 -0
  1515. /package/dist/{application-spec/generate-application → domain/spec}/runtime/factory-data/index.js +0 -0
  1516. /package/dist/{application-spec/generate-application → domain/spec}/runtime/migrations/index.d.ts +0 -0
  1517. /package/dist/{application-spec/generate-application → domain/spec}/runtime/migrations/index.js +0 -0
  1518. /package/dist/{application-spec/generate-application/runtime/sections → domain/spec/runtime/optics}/component-optic.js +0 -0
  1519. /package/dist/{application-spec/generate-application → domain/spec}/runtime/sections/actions-runtime.js +0 -0
  1520. /package/dist/{application-spec/generate-application → domain/spec}/runtime/sections/assistant-runtime.js +0 -0
  1521. /package/dist/{application-spec/generate-application → domain/spec}/runtime/sections/data-runtime.js +0 -0
  1522. /package/dist/{application-spec/generate-application → domain/spec}/runtime/sections/preset-runtime.js +0 -0
  1523. /package/dist/{application-spec/generate-application → domain/spec}/runtime/sections/theme-runtime.js +0 -0
  1524. /package/dist/{application-spec/generate-application → domain/spec}/runtime/sections/transformers-runtime.js +0 -0
  1525. /package/dist/{application-spec/generate-application → domain/spec}/runtime/spec-code/index.d.ts +0 -0
  1526. /package/dist/{application-spec/generate-application → domain/spec}/runtime/spec-code/index.js +0 -0
  1527. /package/dist/{application-spec/generate-application → domain/spec}/runtime/spec-code/resolve-spec-code.js +0 -0
  1528. /package/dist/{application-spec/generate-application → domain/spec}/runtime/spec-code/spec-code-module.d.ts +0 -0
  1529. /package/dist/{application-spec/generate-application → domain/spec}/runtime-spec/decode-runtime-spec.d.ts +0 -0
  1530. /package/dist/{application-spec/generate-application → domain/spec}/runtime-spec/decode-runtime-spec.js +0 -0
  1531. /package/dist/{application-spec/generate-application → domain/spec}/runtime-spec/encode-runtime-spec.d.ts +0 -0
  1532. /package/dist/{application-spec/generate-application → domain/spec}/runtime-spec/encode-runtime-spec.js +0 -0
  1533. /package/dist/{application-spec/generate-application → domain/spec}/runtime-spec/encoded-runtime-spec.js +0 -0
  1534. /package/dist/{application-spec/generate-application → domain/spec}/runtime-spec/spec-code-id.js +0 -0
  1535. /package/dist/domain/{application/assistant/assistant-resolved-manifest.js → spec/sections/assistant/assistant-manifest.js} +0 -0
  1536. /package/dist/domain/{application → spec/sections}/assistant/form/assistant-resource-path.d.ts +0 -0
  1537. /package/dist/domain/{application → spec/sections}/assistant/form/assistant-resource-path.js +0 -0
  1538. /package/dist/{configurator/configurator-context → react-sdk/domain-application-context}/OnPresetLoadedHandler.d.ts +0 -0
  1539. /package/dist/{configurator/configurator-context → react-sdk/integration}/IntegrationSubscription.d.ts +0 -0
  1540. /package/dist/{configurator/configurator-context → react-sdk/lifecycle-providers}/LifecycleProviders.d.ts +0 -0
  1541. /package/dist/react-sdk/{elements → page-elements}/configurator-error-page-props.d.ts +0 -0
  1542. /package/dist/{configurator/configurator-context → react-sdk/preset-selection}/PresetSelectionProvider.d.ts +0 -0
@@ -8,6 +8,7 @@ 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)
@@ -27,7 +28,7 @@ Write your own layout when the configurator has to follow a design the built-in
27
28
 
28
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).
29
30
 
30
- 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).
31
32
 
32
33
  ## Register the layout
33
34
 
@@ -37,15 +38,14 @@ Create `src/elements/ConfiguratorLayout.tsx` with a default export made by `phx.
37
38
  import { Box } from '@mui/material'
38
39
  import { useState } from 'react'
39
40
 
40
- import { LayoutSlots, useSceneSafeArea } from '@salsita-ai/sdk/configurator'
41
- import { useActiveViewports } from '@salsita-ai/sdk/react'
41
+ import { LayoutSlots } from '@salsita-ai/sdk/configurator'
42
42
 
43
- import { phx } from '../../.phoenix/phx.js'
44
43
  import { BottomSheet } from '../_shared/BottomSheet.js'
45
44
  import { FullscreenToggle } from '../_shared/FullscreenToggle.js'
46
45
  import { MessageToast } from '../_shared/MessageToast.js'
47
46
  import { ProductPanel } from '../_shared/ProductPanel.js'
48
47
  import { SceneControls } from '../_shared/SceneControls.js'
48
+ import { UndoRedo } from '../_shared/UndoRedo.js'
49
49
 
50
50
  const GUTTER = 24
51
51
  const PANEL_WIDTH = 380
@@ -53,10 +53,10 @@ const PHONE_GUTTER = 16
53
53
  const TOUCH_TARGET = 44
54
54
 
55
55
  const ConfiguratorLayout = () => {
56
- const { containerRef, safeAreaRef } = useSceneSafeArea()
56
+ const { containerRef, safeAreaRef } = phx.frontend.useSceneSafeArea()
57
57
  const isFullscreen = phx.frontend.useIsFullscreenActive()
58
58
  // `null` until the container has been measured; the layout shows only the scene until then
59
- const viewports = useActiveViewports()
59
+ const viewports = phx.frontend.useActiveViewports()
60
60
  const [isSheetOpen, setSheetOpen] = useState(false)
61
61
 
62
62
  const isDesktop = viewports?.includes('desktop') ?? false
@@ -115,8 +115,16 @@ const ConfiguratorLayout = () => {
115
115
  >
116
116
  <Box
117
117
  component="div"
118
- sx={{ position: 'absolute', insetBlockStart: gutter, insetInlineEnd: gutter, pointerEvents: 'auto' }}
118
+ sx={{
119
+ position: 'absolute',
120
+ insetBlockStart: gutter,
121
+ insetInlineEnd: gutter,
122
+ display: 'flex',
123
+ gap: 1,
124
+ pointerEvents: 'auto',
125
+ }}
119
126
  >
127
+ {!isFullscreen && <UndoRedo />}
120
128
  <FullscreenToggle compact={!isDesktop} />
121
129
  </Box>
122
130
  <Box
@@ -124,11 +132,11 @@ const ConfiguratorLayout = () => {
124
132
  sx={{
125
133
  position: 'absolute',
126
134
  pointerEvents: 'auto',
127
- // Desktop: bottom left, above the row of view controls. Phone: at the top beside the fullscreen button,
128
- // clear of the sheet's handle and the view controls.
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.
129
137
  ...(isDesktop
130
138
  ? { insetBlockEnd: 2 * GUTTER + TOUCH_TARGET, insetInlineStart: GUTTER }
131
- : { insetBlockStart: gutter, insetInline: `${gutter}px ${2 * gutter + TOUCH_TARGET}px` }),
139
+ : { insetBlockStart: gutter + TOUCH_TARGET + gutter / 2, insetInline: gutter }),
132
140
  }}
133
141
  >
134
142
  <MessageToast />
@@ -159,18 +167,18 @@ const ConfiguratorLayout = () => {
159
167
  export default phx.frontend.createCustomPhoenixLayoutElement('ConfiguratorLayout', ConfiguratorLayout)
160
168
  ```
161
169
 
162
- 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.
163
171
 
164
172
  ## What the layout has to do
165
173
 
166
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`.
167
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.
168
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.
169
- - **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, 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.
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.
170
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.
171
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.
172
- - **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 `useActiveViewports()` and renders a desktop or a phone arrangement, see [Fit a phone](#fit-a-phone).
173
- - **Serve read mode.** The same element renders a configuration shared for viewing, and the layout decides what a viewer sees.
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).
174
182
 
175
183
  ## Read and change the product
176
184
 
@@ -179,10 +187,8 @@ The panel reads everything it shows from hooks and writes the customer's choice
179
187
  ```tsx
180
188
  import { Box, Button, Typography } from '@mui/material'
181
189
 
182
- import { detailComponent, finalizeActionComponent } from '@salsita-ai/sdk/domain'
183
- import { PhoenixHandlerBoundary, useResolveLocalizable } from '@salsita-ai/sdk/react'
190
+ import { detailComponent } from '@salsita-ai/sdk/domain'
184
191
 
185
- import { phx } from '../../.phoenix/phx.js'
186
192
  import { EdgeFinishCards } from './EdgeFinishCards.js'
187
193
  import { ReviewActions } from './ReviewActions.js'
188
194
 
@@ -196,7 +202,7 @@ interface ProductPanelProps {
196
202
  }
197
203
 
198
204
  export const ProductPanel = ({ collapsed = false, inSheet = false }: ProductPanelProps) => {
199
- const resolve = useResolveLocalizable()
205
+ const resolve = phx.frontend.useResolveLocalizable()
200
206
  const detail = phx.frontend.useFirstRootComponent(detailComponent)
201
207
  const price = phx.frontend.useRootEntityPrice()
202
208
  const tableId = phx.frontend.useRootEntityId()
@@ -206,12 +212,9 @@ export const ProductPanel = ({ collapsed = false, inSheet = false }: ProductPane
206
212
  const pushNavigate = phx.frontend.usePushNavigate()
207
213
  const popNavigate = phx.frontend.usePopNavigate()
208
214
  const navigate = phx.frontend.useNavigate()
209
- const finalizeActions = phx.frontend.useComponents({ componentTypes: [finalizeActionComponent] }) ?? []
210
215
 
211
216
  const isReadMode = accessInfo.viewMode
212
217
  const isReview = isReadMode || navigationState !== 'configure'
213
- // The spec's primary finalize action, or its first one
214
- const quoteAction = finalizeActions.find(action => action.state.variant === 'primary') ?? finalizeActions[0]
215
218
  const chosenEdge = edgeFinish.options.find(option => option.value === edgeFinish.value)
216
219
 
217
220
  return (
@@ -289,19 +292,7 @@ export const ProductPanel = ({ collapsed = false, inSheet = false }: ProductPane
289
292
  <Typography variant="body2" color="text.secondary">
290
293
  Your table is ready for a quote. A real shop collects the contact details here.
291
294
  </Typography>
292
- {quoteAction ? (
293
- <PhoenixHandlerBoundary name={quoteAction.state.handler}>
294
- <ReviewActions
295
- handler={quoteAction.state.handler}
296
- label={resolve(quoteAction.state.label)}
297
- onBack={popNavigate}
298
- />
299
- </PhoenixHandlerBoundary>
300
- ) : (
301
- <Button size="large" variant="outlined" onClick={popNavigate} sx={BUTTON_SX}>
302
- Back to the configuration
303
- </Button>
304
- )}
295
+ <ReviewActions onBack={popNavigate} />
305
296
  </>
306
297
  )}
307
298
  {!isReadMode && navigationState === 'requested' && (
@@ -320,26 +311,26 @@ export const ProductPanel = ({ collapsed = false, inSheet = false }: ProductPane
320
311
  }
321
312
  ```
322
313
 
323
- | Hook | What the layout uses it for |
324
- | ---------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
325
- | `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. |
326
- | `phx.frontend.useRootEntityId()` | The id of the table, which the control hooks take. |
327
- | `phx.frontend.useAttributeSelection(entityId, instanceName)` | The `attributeSelection` component named `edgeFinish`: the current `value` and the `options`, each with `title`, `description`, `value`, `disabled` and `onSelect`. |
328
- | `phx.frontend.useRootEntityPrice()` | The root entity's `price` component, formatted for the current locale and currency, or `null` without one. |
329
- | `phx.frontend.useAccessService()` | `accessInfo.viewMode` is `true` while a configuration shared for viewing is open, and also while the host sets the `readonly` property. |
330
- | `phx.frontend.useActiveNavigationState()` | The active navigation state; the panel shows its review step while it is `checkout`. |
331
- | `phx.frontend.usePushNavigate()` and `phx.frontend.usePopNavigate()` | Enter the review step and leave it again. |
332
- | `phx.frontend.useNavigate()` | Return from the confirmation to the configuration, forgetting the review step. |
333
- | `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`. |
334
- | `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). |
335
- | `phx.frontend.useIsFullscreenActive()` and `phx.frontend.useSetFullscreen()` | Read the fullscreen flag, and set it from the layout's own button. |
336
- | `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). |
337
- | `phx.frontend.useResetCamera()` | Move the camera back to the framing of the active camera, undoing the customer's orbit, pan and zoom. |
338
- | `phx.frontend.useUndoRedo()` | Not used here: whether there is a change to undo or redo, and `undo` and `redo`, for a layout's own undo and redo buttons; see [Known gaps](#known-gaps). |
339
- | `useActiveViewports()` from `@salsita-ai/sdk/react` | 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). |
340
- | `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). |
341
- | `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`. |
342
- | `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). |
343
334
 
344
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`.
345
336
 
@@ -353,7 +344,7 @@ The edge finish is a visual choice, so the panel shows it as cards with a drawin
353
344
  import { Box, ButtonBase, type SxProps, type Theme, Typography } from '@mui/material'
354
345
  import type { KeyboardEvent } from 'react'
355
346
 
356
- import { type UseAttributeSelection, useResolveLocalizable } from '@salsita-ai/sdk/react'
347
+ import type { UseAttributeSelection } from '@salsita-ai/sdk/react'
357
348
 
358
349
  // Cross-sections of the tabletop's edge, keyed by the option values of the spec.
359
350
  const EDGE_PROFILES: Readonly<Record<string, string>> = {
@@ -390,7 +381,7 @@ interface EdgeFinishCardsProps {
390
381
  }
391
382
 
392
383
  export const EdgeFinishCards = ({ selection }: EdgeFinishCardsProps) => {
393
- const resolve = useResolveLocalizable()
384
+ const resolve = phx.frontend.useResolveLocalizable()
394
385
  const { options } = selection
395
386
  // The card in the tab order: the selected one, or the first enabled one. Disabled cards are never in it.
396
387
  const selectedIndex = options.findIndex(option => option.value === selection.value && !option.disabled)
@@ -486,12 +477,12 @@ The drawings are keyed by the option values of the spec. A spec can carry a pict
486
477
 
487
478
  ## Offer fullscreen
488
479
 
489
- 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`.
490
481
 
491
482
  ```tsx
492
483
  import { Button, Tooltip } from '@mui/material'
493
484
 
494
- import { phx } from '../../.phoenix/phx.js'
485
+ import { FrontendAnalyticsFactory } from '@salsita-ai/sdk/configurator'
495
486
 
496
487
  const ENTER_ICON = 'M4 9V4h5M15 4h5v5M20 15v5h-5M9 20H4v-5'
497
488
  const EXIT_ICON = 'M9 4v5H4M15 4v5h5M15 20v-5h5M9 20v-5H4'
@@ -504,6 +495,7 @@ interface FullscreenToggleProps {
504
495
  export const FullscreenToggle = ({ compact = false }: FullscreenToggleProps) => {
505
496
  const isFullscreen = phx.frontend.useIsFullscreenActive()
506
497
  const setFullscreen = phx.frontend.useSetFullscreen()
498
+ const analytics = phx.frontend.useAnalytics()
507
499
  const label = isFullscreen ? 'Exit fullscreen' : 'Fullscreen'
508
500
  const icon = (
509
501
  <svg viewBox="0 0 24 24" width={20} height={20} fill="none" stroke="currentColor" strokeWidth={2}>
@@ -511,10 +503,16 @@ export const FullscreenToggle = ({ compact = false }: FullscreenToggleProps) =>
511
503
  </svg>
512
504
  )
513
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
+ }
511
+
514
512
  return (
515
513
  <Tooltip title={compact ? label : ''}>
516
514
  <Button
517
- onClick={() => setFullscreen(!isFullscreen)}
515
+ onClick={toggle}
518
516
  aria-label={compact ? label : undefined}
519
517
  startIcon={compact ? undefined : icon}
520
518
  sx={{
@@ -539,9 +537,79 @@ export const FullscreenToggle = ({ compact = false }: FullscreenToggleProps) =>
539
537
 
540
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.
541
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
+ >
567
+ <svg viewBox="0 0 24 24" width={20} height={20} fill="none" stroke="currentColor" strokeWidth={2}>
568
+ <path d={icon} />
569
+ </svg>
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"
592
+ sx={{
593
+ display: 'flex',
594
+ borderRadius: 999,
595
+ bgcolor: 'background.paper',
596
+ boxShadow: '0 4px 16px rgba(0, 0, 0, 0.12)',
597
+ }}
598
+ >
599
+ <HistoryButton label="Undo" icon={UNDO_ICON} enabled={canUndo} onClick={undo} />
600
+ <HistoryButton label="Redo" icon={REDO_ICON} enabled={canRedo} onClick={redo} />
601
+ </Box>
602
+ )
603
+ }
604
+ ```
605
+
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.
609
+
542
610
  ## Show messages
543
611
 
544
- 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 on a phone:
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:
545
613
 
546
614
  ```tsx
547
615
  import { Alert } from '@mui/material'
@@ -549,8 +617,6 @@ import { useEffect, useState } from 'react'
549
617
 
550
618
  import type { ConfiguratorMessage } from '@salsita-ai/sdk/react'
551
619
 
552
- import { phx } from '../../.phoenix/phx.js'
553
-
554
620
  const VIOLATION_SEVERITY = { fatal: 'error', fixable: 'error', warning: 'warning', notice: 'info' } as const
555
621
  const RANK = { info: 0, warning: 1, error: 2 } as const
556
622
  const VISIBLE_MS = 6000
@@ -604,8 +670,6 @@ To give the toast something to show, the spec registers one transformer. Choosin
604
670
  ```ts
605
671
  import { msg } from '@lingui/core/macro'
606
672
 
607
- import { phx } from '../../.phoenix/phx.js'
608
-
609
673
  // A tree-trunk edge is cut by hand; choosing it carries a hint, which reaches the layout as a side-effect message
610
674
  export default phx.frontend.transformerBuilder.when
611
675
  .entity(['Table'])
@@ -641,8 +705,6 @@ components:
641
705
  ```ts
642
706
  import { useCallback } from 'react'
643
707
 
644
- import { phx } from '../../.phoenix/phx.js'
645
-
646
708
  // Stands in for the shop's quote service: the request takes a moment, then the panel shows the confirmation
647
709
  export default phx.frontend.createPhoenixHandler('requestQuote', () => {
648
710
  const navigate = phx.frontend.useNavigate()
@@ -658,49 +720,48 @@ export default phx.frontend.createPhoenixHandler('requestQuote', () => {
658
720
 
659
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()`.
660
722
 
661
- 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.
662
724
 
663
725
  ```tsx
664
726
  import { Alert, Box, Button, CircularProgress, Typography } from '@mui/material'
665
727
 
666
- import { phx } from '../../.phoenix/phx.js'
667
-
668
728
  const BUTTON_SX = { minBlockSize: 48, borderRadius: 999, textTransform: 'none', fontWeight: 600 } as const
669
729
 
670
730
  interface ReviewActionsProps {
671
- readonly handler: string
672
- readonly label: string
673
731
  readonly onBack: () => void
674
732
  }
675
733
 
676
- // The review step's buttons: one finalize action and the way back. `useFinalizeAction` runs the action's handler,
677
- // so this component calls it exactly once and is rendered inside a `PhoenixHandlerBoundary` for that handler.
678
- // Back is disabled while the request is pending, so the customer cannot change the configuration while it is sent.
679
- // The pending state belongs to this component: when the panel unmounts, as in fullscreen, the request goes on and
680
- // the remounted buttons are enabled again.
681
- export const ReviewActions = ({ handler, label, onBack }: ReviewActionsProps) => {
682
- 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
683
741
 
684
742
  return (
685
743
  <Box component="div" sx={{ display: 'grid', gap: 2 }}>
686
- <Box component="div" sx={{ display: 'grid', gap: 1 }}>
687
- <Button
688
- size="large"
689
- variant="contained"
690
- disabled={disabled || isPending}
691
- onClick={run}
692
- startIcon={isPending ? <CircularProgress size={18} color="inherit" /> : undefined}
693
- sx={BUTTON_SX}
694
- >
695
- {isPending ? 'Sending the request…' : label}
696
- </Button>
697
- {disabled && hints && (
698
- <Typography variant="caption" color="text.secondary">
699
- {hints}
700
- </Typography>
701
- )}
702
- {error && <Alert severity="error">The request could not be sent: {error.message}</Alert>}
703
- </Box>
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
+ )}
704
765
  <Button size="large" variant="outlined" disabled={isPending} onClick={onBack} sx={BUTTON_SX}>
705
766
  Back to the configuration
706
767
  </Button>
@@ -709,22 +770,30 @@ export const ReviewActions = ({ handler, label, onBack }: ReviewActionsProps) =>
709
770
  }
710
771
  ```
711
772
 
712
- - `run()` records the finalize-button click for analytics and runs the handler; it does nothing while `disabled` or `isPending`.
713
- - 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. `isPending` and `error` belong to the mounted component: entering fullscreen unmounts the panel, the request goes on, and the panel shown after fullscreen starts with both buttons enabled. A layout that must rule that out keeps the review step mounted, or hides its fullscreen button while a request runs.
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.
714
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.
715
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.
716
778
 
717
- 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.
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.
718
780
 
719
781
  ## Serve read mode
720
782
 
721
- 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. 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).
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).
722
791
 
723
792
  ## Fit a phone
724
793
 
725
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.
726
795
 
727
- **The switch.** `useActiveViewports()` from `@salsita-ai/sdk/react` 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.
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.
728
797
 
729
798
  | Value | When it is active |
730
799
  | ----------- | ---------------------------------------------------------------------------------- |
@@ -903,10 +972,10 @@ export const BottomSheet = ({ open, onOpenChange, label, children }: BottomSheet
903
972
 
904
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.
905
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.
906
- - While the handle is dragged the sheet follows the finger with a `transform`. `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.
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.
907
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.
908
977
 
909
- **What else moves.** The toast sits at the top of the free area, 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, so the toast has room beside it. Fullscreen removes the sheet as it removes the panel on a desktop. The sheet keeps its position while fullscreen is on.
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.
910
979
 
911
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:
912
981
 
@@ -968,7 +1037,6 @@ The element is registered with `phx.frontend.createCustomPhoenixEntityElement` u
968
1037
  import { Box, ButtonBase, Popover, Tooltip } from '@mui/material'
969
1038
  import { useState } from 'react'
970
1039
 
971
- import { phx } from '../../.phoenix/phx.js'
972
1040
  import { EdgeFinishCards } from '../_shared/EdgeFinishCards.js'
973
1041
 
974
1042
  // The edge profile the button shows, the square edge of the cards' drawings
@@ -1083,8 +1151,6 @@ components:
1083
1151
  ```tsx
1084
1152
  import { Box, Button, Tooltip } from '@mui/material'
1085
1153
 
1086
- import { phx } from '../../.phoenix/phx.js'
1087
-
1088
1154
  // The spec's view states, each with the label of the button that shows it
1089
1155
  const VIEWS = [
1090
1156
  { state: 'overview', label: 'Whole table' },
@@ -1237,7 +1303,7 @@ transformers:
1237
1303
 
1238
1304
  ## Try the example
1239
1305
 
1240
- 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.
1241
1307
 
1242
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.
1243
1309
 
@@ -1251,14 +1317,19 @@ The same layout in a frame 390 pixels wide, as on a phone. Opened on its own fro
1251
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.
1252
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.
1253
1319
  - **Fullscreen** removes the panel and the table moves to the centre of the canvas; **Exit fullscreen** brings both back.
1254
- - 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.
1255
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.
1256
1327
  - Tab reaches the button on the edge, and Enter or Space opens the popover.
1257
- - The button on the edge is gone in the review step, in the confirmation and with the **Read User** mock, and stays in fullscreen.
1328
+ - The button on the edge is gone in the review step, in the confirmation and in both read routes, and stays in fullscreen.
1258
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.
1259
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.
1260
1331
  - On the phone, the review step, **Request a quote** and the thank-you message work with the sheet collapsed and open.
1261
- - On the phone, choosing **Tree trunk** shows the hint at the top of the free area, beside the fullscreen button.
1332
+ - On the phone, choosing **Tree trunk** shows the hint at the top of the free area, below the undo, redo and fullscreen buttons.
1262
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.
1263
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.
1264
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.
@@ -1270,14 +1341,14 @@ The same layout in a frame 390 pixels wide, as on a phone. Opened on its own fro
1270
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.
1271
1342
 
1272
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).
1273
- - **Toolbar actions.** Undo and redo, 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: `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).
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).
1274
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.
1275
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`.
1276
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.
1277
- - **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`.
1278
- - **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.
1279
- - **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(...)`.
1280
- - **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.
1281
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.
1282
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.
1283
1354
 
@@ -1286,7 +1357,7 @@ A project layout has only what it renders. This one leaves out the following, ea
1286
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.
1287
1358
  - [Universal](?path=/docs/layouts-universal--docs) is the built-in layout this one replaces.
1288
1359
  - [Header / Custom](?path=/docs/layouts-header-custom--docs) replaces only the header, with the price from `useRootEntityPrice()`.
1289
- - [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.
1290
1361
  - [Presets / Custom](?path=/docs/layouts-presets-custom--docs) replaces the preset screen the same way.
1291
1362
 
1292
1363
  ## Complete Implementation
@@ -1650,7 +1721,7 @@ export const BottomSheet = ({ open, onOpenChange, label, children }: BottomSheet
1650
1721
  import { Box, ButtonBase, type SxProps, type Theme, Typography } from '@mui/material'
1651
1722
  import type { KeyboardEvent } from 'react'
1652
1723
 
1653
- import { type UseAttributeSelection, useResolveLocalizable } from '@salsita-ai/sdk/react'
1724
+ import type { UseAttributeSelection } from '@salsita-ai/sdk/react'
1654
1725
 
1655
1726
  // Cross-sections of the tabletop's edge, keyed by the option values of the spec.
1656
1727
  const EDGE_PROFILES: Readonly<Record<string, string>> = {
@@ -1687,7 +1758,7 @@ interface EdgeFinishCardsProps {
1687
1758
  }
1688
1759
 
1689
1760
  export const EdgeFinishCards = ({ selection }: EdgeFinishCardsProps) => {
1690
- const resolve = useResolveLocalizable()
1761
+ const resolve = phx.frontend.useResolveLocalizable()
1691
1762
  const { options } = selection
1692
1763
  // The card in the tab order: the selected one, or the first enabled one. Disabled cards are never in it.
1693
1764
  const selectedIndex = options.findIndex(option => option.value === selection.value && !option.disabled)
@@ -1784,7 +1855,7 @@ export const EdgeFinishCards = ({ selection }: EdgeFinishCardsProps) => {
1784
1855
  ```tsx
1785
1856
  import { Button, Tooltip } from '@mui/material'
1786
1857
 
1787
- import { phx } from '../../.phoenix/phx.js'
1858
+ import { FrontendAnalyticsFactory } from '@salsita-ai/sdk/configurator'
1788
1859
 
1789
1860
  const ENTER_ICON = 'M4 9V4h5M15 4h5v5M20 15v5h-5M9 20H4v-5'
1790
1861
  const EXIT_ICON = 'M9 4v5H4M15 4v5h5M15 20v-5h5M9 20v-5H4'
@@ -1797,6 +1868,7 @@ interface FullscreenToggleProps {
1797
1868
  export const FullscreenToggle = ({ compact = false }: FullscreenToggleProps) => {
1798
1869
  const isFullscreen = phx.frontend.useIsFullscreenActive()
1799
1870
  const setFullscreen = phx.frontend.useSetFullscreen()
1871
+ const analytics = phx.frontend.useAnalytics()
1800
1872
  const label = isFullscreen ? 'Exit fullscreen' : 'Fullscreen'
1801
1873
  const icon = (
1802
1874
  <svg viewBox="0 0 24 24" width={20} height={20} fill="none" stroke="currentColor" strokeWidth={2}>
@@ -1804,10 +1876,16 @@ export const FullscreenToggle = ({ compact = false }: FullscreenToggleProps) =>
1804
1876
  </svg>
1805
1877
  )
1806
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
+ }
1884
+
1807
1885
  return (
1808
1886
  <Tooltip title={compact ? label : ''}>
1809
1887
  <Button
1810
- onClick={() => setFullscreen(!isFullscreen)}
1888
+ onClick={toggle}
1811
1889
  aria-label={compact ? label : undefined}
1812
1890
  startIcon={compact ? undefined : icon}
1813
1891
  sx={{
@@ -1838,8 +1916,6 @@ import { useEffect, useState } from 'react'
1838
1916
 
1839
1917
  import type { ConfiguratorMessage } from '@salsita-ai/sdk/react'
1840
1918
 
1841
- import { phx } from '../../.phoenix/phx.js'
1842
-
1843
1919
  const VIOLATION_SEVERITY = { fatal: 'error', fixable: 'error', warning: 'warning', notice: 'info' } as const
1844
1920
  const RANK = { info: 0, warning: 1, error: 2 } as const
1845
1921
  const VISIBLE_MS = 6000
@@ -1891,10 +1967,8 @@ export const MessageToast = () => {
1891
1967
  ```tsx
1892
1968
  import { Box, Button, Typography } from '@mui/material'
1893
1969
 
1894
- import { detailComponent, finalizeActionComponent } from '@salsita-ai/sdk/domain'
1895
- import { PhoenixHandlerBoundary, useResolveLocalizable } from '@salsita-ai/sdk/react'
1970
+ import { detailComponent } from '@salsita-ai/sdk/domain'
1896
1971
 
1897
- import { phx } from '../../.phoenix/phx.js'
1898
1972
  import { EdgeFinishCards } from './EdgeFinishCards.js'
1899
1973
  import { ReviewActions } from './ReviewActions.js'
1900
1974
 
@@ -1908,7 +1982,7 @@ interface ProductPanelProps {
1908
1982
  }
1909
1983
 
1910
1984
  export const ProductPanel = ({ collapsed = false, inSheet = false }: ProductPanelProps) => {
1911
- const resolve = useResolveLocalizable()
1985
+ const resolve = phx.frontend.useResolveLocalizable()
1912
1986
  const detail = phx.frontend.useFirstRootComponent(detailComponent)
1913
1987
  const price = phx.frontend.useRootEntityPrice()
1914
1988
  const tableId = phx.frontend.useRootEntityId()
@@ -1918,12 +1992,9 @@ export const ProductPanel = ({ collapsed = false, inSheet = false }: ProductPane
1918
1992
  const pushNavigate = phx.frontend.usePushNavigate()
1919
1993
  const popNavigate = phx.frontend.usePopNavigate()
1920
1994
  const navigate = phx.frontend.useNavigate()
1921
- const finalizeActions = phx.frontend.useComponents({ componentTypes: [finalizeActionComponent] }) ?? []
1922
1995
 
1923
1996
  const isReadMode = accessInfo.viewMode
1924
1997
  const isReview = isReadMode || navigationState !== 'configure'
1925
- // The spec's primary finalize action, or its first one
1926
- const quoteAction = finalizeActions.find(action => action.state.variant === 'primary') ?? finalizeActions[0]
1927
1998
  const chosenEdge = edgeFinish.options.find(option => option.value === edgeFinish.value)
1928
1999
 
1929
2000
  return (
@@ -2001,19 +2072,7 @@ export const ProductPanel = ({ collapsed = false, inSheet = false }: ProductPane
2001
2072
  <Typography variant="body2" color="text.secondary">
2002
2073
  Your table is ready for a quote. A real shop collects the contact details here.
2003
2074
  </Typography>
2004
- {quoteAction ? (
2005
- <PhoenixHandlerBoundary name={quoteAction.state.handler}>
2006
- <ReviewActions
2007
- handler={quoteAction.state.handler}
2008
- label={resolve(quoteAction.state.label)}
2009
- onBack={popNavigate}
2010
- />
2011
- </PhoenixHandlerBoundary>
2012
- ) : (
2013
- <Button size="large" variant="outlined" onClick={popNavigate} sx={BUTTON_SX}>
2014
- Back to the configuration
2015
- </Button>
2016
- )}
2075
+ <ReviewActions onBack={popNavigate} />
2017
2076
  </>
2018
2077
  )}
2019
2078
  {!isReadMode && navigationState === 'requested' && (
@@ -2037,44 +2096,43 @@ export const ProductPanel = ({ collapsed = false, inSheet = false }: ProductPane
2037
2096
  ```tsx
2038
2097
  import { Alert, Box, Button, CircularProgress, Typography } from '@mui/material'
2039
2098
 
2040
- import { phx } from '../../.phoenix/phx.js'
2041
-
2042
2099
  const BUTTON_SX = { minBlockSize: 48, borderRadius: 999, textTransform: 'none', fontWeight: 600 } as const
2043
2100
 
2044
2101
  interface ReviewActionsProps {
2045
- readonly handler: string
2046
- readonly label: string
2047
2102
  readonly onBack: () => void
2048
2103
  }
2049
2104
 
2050
- // The review step's buttons: one finalize action and the way back. `useFinalizeAction` runs the action's handler,
2051
- // so this component calls it exactly once and is rendered inside a `PhoenixHandlerBoundary` for that handler.
2052
- // Back is disabled while the request is pending, so the customer cannot change the configuration while it is sent.
2053
- // The pending state belongs to this component: when the panel unmounts, as in fullscreen, the request goes on and
2054
- // the remounted buttons are enabled again.
2055
- export const ReviewActions = ({ handler, label, onBack }: ReviewActionsProps) => {
2056
- 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
2057
2112
 
2058
2113
  return (
2059
2114
  <Box component="div" sx={{ display: 'grid', gap: 2 }}>
2060
- <Box component="div" sx={{ display: 'grid', gap: 1 }}>
2061
- <Button
2062
- size="large"
2063
- variant="contained"
2064
- disabled={disabled || isPending}
2065
- onClick={run}
2066
- startIcon={isPending ? <CircularProgress size={18} color="inherit" /> : undefined}
2067
- sx={BUTTON_SX}
2068
- >
2069
- {isPending ? 'Sending the request…' : label}
2070
- </Button>
2071
- {disabled && hints && (
2072
- <Typography variant="caption" color="text.secondary">
2073
- {hints}
2074
- </Typography>
2075
- )}
2076
- {error && <Alert severity="error">The request could not be sent: {error.message}</Alert>}
2077
- </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
+ )}
2078
2136
  <Button size="large" variant="outlined" disabled={isPending} onClick={onBack} sx={BUTTON_SX}>
2079
2137
  Back to the configuration
2080
2138
  </Button>
@@ -2088,8 +2146,6 @@ export const ReviewActions = ({ handler, label, onBack }: ReviewActionsProps) =>
2088
2146
  ```tsx
2089
2147
  import { Box, Button, Tooltip } from '@mui/material'
2090
2148
 
2091
- import { phx } from '../../.phoenix/phx.js'
2092
-
2093
2149
  // The spec's view states, each with the label of the button that shows it
2094
2150
  const VIEWS = [
2095
2151
  { state: 'overview', label: 'Whole table' },
@@ -2178,21 +2234,84 @@ export const SceneControls = ({ compact = false, resetOnly = false }: SceneContr
2178
2234
  }
2179
2235
  ```
2180
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
+
2181
2301
  ### ./src/elements/ConfiguratorLayout.tsx
2182
2302
 
2183
2303
  ```tsx
2184
2304
  import { Box } from '@mui/material'
2185
2305
  import { useState } from 'react'
2186
2306
 
2187
- import { LayoutSlots, useSceneSafeArea } from '@salsita-ai/sdk/configurator'
2188
- import { useActiveViewports } from '@salsita-ai/sdk/react'
2307
+ import { LayoutSlots } from '@salsita-ai/sdk/configurator'
2189
2308
 
2190
- import { phx } from '../../.phoenix/phx.js'
2191
2309
  import { BottomSheet } from '../_shared/BottomSheet.js'
2192
2310
  import { FullscreenToggle } from '../_shared/FullscreenToggle.js'
2193
2311
  import { MessageToast } from '../_shared/MessageToast.js'
2194
2312
  import { ProductPanel } from '../_shared/ProductPanel.js'
2195
2313
  import { SceneControls } from '../_shared/SceneControls.js'
2314
+ import { UndoRedo } from '../_shared/UndoRedo.js'
2196
2315
 
2197
2316
  const GUTTER = 24
2198
2317
  const PANEL_WIDTH = 380
@@ -2200,10 +2319,10 @@ const PHONE_GUTTER = 16
2200
2319
  const TOUCH_TARGET = 44
2201
2320
 
2202
2321
  const ConfiguratorLayout = () => {
2203
- const { containerRef, safeAreaRef } = useSceneSafeArea()
2322
+ const { containerRef, safeAreaRef } = phx.frontend.useSceneSafeArea()
2204
2323
  const isFullscreen = phx.frontend.useIsFullscreenActive()
2205
2324
  // `null` until the container has been measured; the layout shows only the scene until then
2206
- const viewports = useActiveViewports()
2325
+ const viewports = phx.frontend.useActiveViewports()
2207
2326
  const [isSheetOpen, setSheetOpen] = useState(false)
2208
2327
 
2209
2328
  const isDesktop = viewports?.includes('desktop') ?? false
@@ -2262,8 +2381,16 @@ const ConfiguratorLayout = () => {
2262
2381
  >
2263
2382
  <Box
2264
2383
  component="div"
2265
- sx={{ position: 'absolute', insetBlockStart: gutter, insetInlineEnd: gutter, pointerEvents: 'auto' }}
2384
+ sx={{
2385
+ position: 'absolute',
2386
+ insetBlockStart: gutter,
2387
+ insetInlineEnd: gutter,
2388
+ display: 'flex',
2389
+ gap: 1,
2390
+ pointerEvents: 'auto',
2391
+ }}
2266
2392
  >
2393
+ {!isFullscreen && <UndoRedo />}
2267
2394
  <FullscreenToggle compact={!isDesktop} />
2268
2395
  </Box>
2269
2396
  <Box
@@ -2271,11 +2398,11 @@ const ConfiguratorLayout = () => {
2271
2398
  sx={{
2272
2399
  position: 'absolute',
2273
2400
  pointerEvents: 'auto',
2274
- // Desktop: bottom left, above the row of view controls. Phone: at the top beside the fullscreen button,
2275
- // clear of the sheet's handle and the view controls.
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.
2276
2403
  ...(isDesktop
2277
2404
  ? { insetBlockEnd: 2 * GUTTER + TOUCH_TARGET, insetInlineStart: GUTTER }
2278
- : { insetBlockStart: gutter, insetInline: `${gutter}px ${2 * gutter + TOUCH_TARGET}px` }),
2405
+ : { insetBlockStart: gutter + TOUCH_TARGET + gutter / 2, insetInline: gutter }),
2279
2406
  }}
2280
2407
  >
2281
2408
  <MessageToast />
@@ -2312,7 +2439,6 @@ export default phx.frontend.createCustomPhoenixLayoutElement('ConfiguratorLayout
2312
2439
  import { Box, ButtonBase, Popover, Tooltip } from '@mui/material'
2313
2440
  import { useState } from 'react'
2314
2441
 
2315
- import { phx } from '../../.phoenix/phx.js'
2316
2442
  import { EdgeFinishCards } from '../_shared/EdgeFinishCards.js'
2317
2443
 
2318
2444
  // The edge profile the button shows, the square edge of the cards' drawings
@@ -2371,8 +2497,6 @@ export default phx.frontend.createCustomPhoenixEntityElement('EdgeFinishHotspot'
2371
2497
  ### ./src/expressions/table.ts
2372
2498
 
2373
2499
  ```ts
2374
- import { phx } from '../../.phoenix/phx.js'
2375
-
2376
2500
  const EDGE_FINISH_SURCHARGE = { None: 0, Facet: 90, Round: 120, TreeTrunk: 340 }
2377
2501
 
2378
2502
  export default phx.domain.implementCustomExpressions({
@@ -2398,8 +2522,6 @@ export default phx.domain.implementCustomExpressions({
2398
2522
  ```ts
2399
2523
  import { useCallback } from 'react'
2400
2524
 
2401
- import { phx } from '../../.phoenix/phx.js'
2402
-
2403
2525
  // Stands in for the shop's quote service: the request takes a moment, then the panel shows the confirmation
2404
2526
  export default phx.frontend.createPhoenixHandler('requestQuote', () => {
2405
2527
  const navigate = phx.frontend.useNavigate()
@@ -2418,8 +2540,6 @@ export default phx.frontend.createPhoenixHandler('requestQuote', () => {
2418
2540
  ```ts
2419
2541
  import { msg } from '@lingui/core/macro'
2420
2542
 
2421
- import { phx } from '../../.phoenix/phx.js'
2422
-
2423
2543
  // A tree-trunk edge is cut by hand; choosing it carries a hint, which reaches the layout as a side-effect message
2424
2544
  export default phx.frontend.transformerBuilder.when
2425
2545
  .entity(['Table'])