@salsita-ai/sdk 0.50.0-develop.bc08a38ffe → 0.50.0-develop.bcb0516d62

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 (823) hide show
  1. package/README.md +19 -14
  2. package/dist/admin/default-admin-elements.d.ts +9 -0
  3. package/dist/admin/default-admin-elements.js +1 -0
  4. package/dist/admin/default-elements/built-in-entity-element.d.ts +10 -0
  5. package/dist/admin/default-elements/built-in-entity-element.js +1 -0
  6. package/dist/admin/default-elements/built-in-layout-element.d.ts +10 -0
  7. package/dist/admin/default-elements/built-in-layout-element.js +1 -0
  8. package/dist/admin/default-elements/index.d.ts +2 -0
  9. package/dist/admin/default-elements/index.js +1 -0
  10. package/dist/admin/index.d.ts +1 -0
  11. package/dist/admin/index.js +1 -1
  12. package/dist/application-spec/caching/content-diff.js +1 -1
  13. package/dist/application-spec/core/application-file.d.ts +0 -2
  14. package/dist/application-spec/core/application-file.js +1 -1
  15. package/dist/application-spec/errors/diagnostic-codes.d.ts +9 -0
  16. package/dist/application-spec/errors/diagnostic-codes.js +1 -1
  17. package/dist/application-spec/errors/diagnostic-messages.d.ts +9 -0
  18. package/dist/application-spec/errors/diagnostic-messages.js +1 -1
  19. package/dist/application-spec/generate-application/code/common/code-imports.js +1 -1
  20. package/dist/application-spec/generate-application/code/common/env-reader.js +2 -2
  21. package/dist/application-spec/generate-application/code/common/index.d.ts +1 -0
  22. package/dist/application-spec/generate-application/code/common/index.js +1 -1
  23. package/dist/application-spec/generate-application/code/common/single-quoted-string.d.ts +6 -0
  24. package/dist/application-spec/generate-application/code/common/single-quoted-string.js +1 -0
  25. package/dist/application-spec/generate-application/code/domain-runtime-files.js +1 -1
  26. package/dist/application-spec/generate-application/code/generate-application-code.d.ts +3 -2
  27. package/dist/application-spec/generate-application/code/generate-application-code.js +1 -1
  28. package/dist/application-spec/generate-application/code/project-scaffolding.d.ts +15 -14
  29. package/dist/application-spec/generate-application/code/project-scaffolding.js +2 -2
  30. package/dist/application-spec/generate-application/code/standalone-app-files.d.ts +2 -2
  31. package/dist/application-spec/generate-application/code/standalone-app-files.js +1 -1
  32. package/dist/application-spec/generate-application/code/story-files.js +1 -1
  33. package/dist/application-spec/generate-application/code/templates/admin-config.js +3 -0
  34. package/dist/application-spec/generate-application/code/templates/application-types.js +6 -6
  35. package/dist/application-spec/generate-application/code/templates/common/doc-comment.d.ts +2 -0
  36. package/dist/application-spec/generate-application/code/templates/common/doc-comment.js +1 -0
  37. package/dist/application-spec/generate-application/code/templates/common/format-property-key.d.ts +7 -0
  38. package/dist/application-spec/generate-application/code/templates/common/format-property-key.js +1 -0
  39. package/dist/application-spec/generate-application/code/templates/common/schema-to-type-string.js +3 -3
  40. package/dist/application-spec/generate-application/code/templates/configurator-config.js +6 -4
  41. package/dist/application-spec/generate-application/code/templates/configurator-globals.d.ts +2 -1
  42. package/dist/application-spec/generate-application/code/templates/configurator-globals.js +19 -6
  43. package/dist/application-spec/generate-application/code/templates/domain-spec/factory-types/domain-factory-types.d.ts +35 -0
  44. package/dist/application-spec/generate-application/code/templates/domain-spec/factory-types/domain-factory-types.js +5 -0
  45. package/dist/application-spec/generate-application/code/templates/domain-spec/factory-types/index.d.ts +1 -0
  46. package/dist/application-spec/generate-application/code/templates/domain-spec/factory-types/index.js +1 -0
  47. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-component-optics.d.ts +1 -1
  48. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-component-optics.js +6 -6
  49. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-domain-block.js +59 -63
  50. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-invariants.d.ts +8 -0
  51. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-invariants.js +1 -1
  52. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-presets.js +1 -1
  53. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-resources.js +13 -13
  54. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-states.d.ts +1 -1
  55. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-states.js +2 -2
  56. package/dist/application-spec/generate-application/code/templates/domain-spec/index.d.ts +2 -1
  57. package/dist/application-spec/generate-application/code/templates/domain-spec/index.js +1 -1
  58. package/dist/application-spec/generate-application/code/templates/eslint-config.d.ts +5 -0
  59. package/dist/application-spec/generate-application/code/templates/eslint-config.js +4 -5
  60. package/dist/application-spec/generate-application/code/templates/frontend-config.js +3 -5
  61. package/dist/application-spec/generate-application/code/templates/gitignore.js +0 -3
  62. package/dist/application-spec/generate-application/code/templates/global-definition/generate-action-types.js +7 -7
  63. package/dist/application-spec/generate-application/code/templates/global-definition/generate-assistant-form-element-types.d.ts +12 -0
  64. package/dist/application-spec/generate-application/code/templates/global-definition/generate-assistant-form-element-types.js +7 -0
  65. package/dist/application-spec/generate-application/code/templates/global-definition/generate-phx-types.d.ts +43 -0
  66. package/dist/application-spec/generate-application/code/templates/global-definition/generate-phx-types.js +33 -0
  67. package/dist/application-spec/generate-application/code/templates/global-definition/index.d.ts +2 -0
  68. package/dist/application-spec/generate-application/code/templates/global-definition/index.js +1 -1
  69. package/dist/application-spec/generate-application/code/templates/globals.js +24 -44
  70. package/dist/application-spec/generate-application/code/templates/index.d.ts +3 -3
  71. package/dist/application-spec/generate-application/code/templates/index.js +1 -1
  72. package/dist/application-spec/generate-application/code/templates/lingui-rc.d.ts +5 -0
  73. package/dist/application-spec/generate-application/code/templates/lingui-rc.js +4 -4
  74. package/dist/application-spec/generate-application/code/templates/prettier-config.d.ts +5 -0
  75. package/dist/application-spec/generate-application/code/templates/prettier-config.js +4 -5
  76. package/dist/application-spec/generate-application/code/templates/root-tsconfig.d.ts +6 -0
  77. package/dist/application-spec/generate-application/code/templates/root-tsconfig.js +2 -0
  78. package/dist/application-spec/generate-application/code/templates/skills/phoenix-cli-skill.js +1 -1
  79. package/dist/application-spec/generate-application/code/templates/skills/phoenix-create-configurator-skill.js +1 -1
  80. package/dist/application-spec/generate-application/code/templates/skills/phoenix-feedback-skill.js +5 -5
  81. package/dist/application-spec/generate-application/code/templates/skills/phoenix-review-skill.js +3 -3
  82. package/dist/application-spec/generate-application/code/templates/skills/phoenix-skill.js +1 -1
  83. package/dist/application-spec/generate-application/code/templates/skills/phoenix-variants-skill.js +2 -2
  84. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.d.ts +25 -7
  85. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.js +2 -2
  86. package/dist/application-spec/generate-application/code/templates/spec-code/collect-spec-code.d.ts +58 -0
  87. package/dist/application-spec/generate-application/code/templates/spec-code/collect-spec-code.js +1 -0
  88. package/dist/application-spec/generate-application/code/templates/spec-code/index.d.ts +2 -0
  89. package/dist/application-spec/generate-application/code/templates/spec-code/index.js +1 -0
  90. package/dist/application-spec/generate-application/code/templates/spec-code/spec-code.d.ts +18 -0
  91. package/dist/application-spec/generate-application/code/templates/spec-code/spec-code.js +41 -0
  92. package/dist/application-spec/generate-application/code/templates/spec-messages/index.d.ts +1 -0
  93. package/dist/application-spec/generate-application/code/templates/spec-messages/index.js +1 -0
  94. package/dist/application-spec/generate-application/code/templates/spec-messages/spec-messages.d.ts +20 -0
  95. package/dist/application-spec/generate-application/code/templates/spec-messages/spec-messages.js +6 -0
  96. package/dist/application-spec/generate-application/code/templates/story/phx-module.d.ts +8 -2
  97. package/dist/application-spec/generate-application/code/templates/story/phx-module.js +15 -3
  98. package/dist/application-spec/generate-application/code/templates/story/wrapper.d.ts +3 -0
  99. package/dist/application-spec/generate-application/code/templates/story/wrapper.js +2 -1
  100. package/dist/application-spec/generate-application/code/templates/tsconfig.d.ts +5 -0
  101. package/dist/application-spec/generate-application/code/templates/tsconfig.js +1 -1
  102. package/dist/application-spec/generate-application/code/templates/webhook-index.d.ts +6 -1
  103. package/dist/application-spec/generate-application/code/templates/webhook-index.js +10 -1
  104. package/dist/application-spec/generate-application/code/templates/webhooks-config.js +2 -3
  105. package/dist/application-spec/generate-application/index.d.ts +2 -0
  106. package/dist/application-spec/generate-application/index.js +1 -1
  107. package/dist/application-spec/generate-application/runtime/admin-runtime/admin-model-runtime.d.ts +6 -4
  108. package/dist/application-spec/generate-application/runtime/admin-runtime/admin-model-runtime.js +1 -1
  109. package/dist/application-spec/generate-application/runtime/admin-runtime/admin-runtime.d.ts +8 -3
  110. package/dist/application-spec/generate-application/runtime/admin-runtime/admin-runtime.js +1 -1
  111. package/dist/application-spec/generate-application/runtime/admin-runtime/states-runtime.d.ts +2 -2
  112. package/dist/application-spec/generate-application/runtime/application-runtime.d.ts +19 -5
  113. package/dist/application-spec/generate-application/runtime/application-runtime.js +1 -1
  114. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-model-runtime.d.ts +6 -4
  115. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-model-runtime.js +1 -1
  116. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-runtime.d.ts +7 -2
  117. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-runtime.js +1 -1
  118. package/dist/application-spec/generate-application/runtime/configurator-runtime/states-runtime.d.ts +2 -2
  119. package/dist/application-spec/generate-application/runtime/factory-data/factory-data-runtime.d.ts +43 -0
  120. package/dist/application-spec/generate-application/runtime/factory-data/factory-data-runtime.js +1 -0
  121. package/dist/application-spec/generate-application/runtime/factory-data/index.d.ts +3 -0
  122. package/dist/application-spec/generate-application/runtime/factory-data/index.js +1 -0
  123. package/dist/application-spec/generate-application/runtime/factory-data/recipe-defaults.d.ts +13 -0
  124. package/dist/application-spec/generate-application/runtime/factory-data/recipe-defaults.js +1 -0
  125. package/dist/application-spec/generate-application/runtime/factory-data/static-violations.d.ts +16 -0
  126. package/dist/application-spec/generate-application/runtime/factory-data/static-violations.js +1 -0
  127. package/dist/application-spec/generate-application/runtime/migrations/index.d.ts +1 -0
  128. package/dist/application-spec/generate-application/runtime/migrations/index.js +1 -0
  129. package/dist/application-spec/generate-application/runtime/migrations/migration-runtime.d.ts +53 -0
  130. package/dist/application-spec/generate-application/runtime/migrations/migration-runtime.js +1 -0
  131. package/dist/application-spec/generate-application/runtime/sections/assistant-runtime.d.ts +2 -2
  132. package/dist/application-spec/generate-application/runtime/sections/build-sdk-optic.d.ts +2 -1
  133. package/dist/application-spec/generate-application/runtime/sections/build-sdk-optic.js +1 -1
  134. package/dist/application-spec/generate-application/runtime/sections/build-user-bound-optic.d.ts +2 -1
  135. package/dist/application-spec/generate-application/runtime/sections/build-user-bound-optic.js +1 -1
  136. package/dist/application-spec/generate-application/runtime/sections/component-optic.d.ts +3 -0
  137. package/dist/application-spec/generate-application/runtime/sections/component-optic.js +1 -1
  138. package/dist/application-spec/generate-application/runtime/sections/data-runtime.d.ts +4 -4
  139. package/dist/application-spec/generate-application/runtime/sections/expression-runtime.d.ts +7 -4
  140. package/dist/application-spec/generate-application/runtime/sections/expression-runtime.js +1 -1
  141. package/dist/application-spec/generate-application/runtime/sections/generate-memo-eval-plan-runtime.d.ts +9 -5
  142. package/dist/application-spec/generate-application/runtime/sections/generate-memo-eval-plan-runtime.js +1 -1
  143. package/dist/application-spec/generate-application/runtime/sections/reflection-constants-runtime.d.ts +3 -1
  144. package/dist/application-spec/generate-application/runtime/sections/reflection-constants-runtime.js +1 -1
  145. package/dist/application-spec/generate-application/runtime/sections/theme-runtime.d.ts +2 -2
  146. package/dist/application-spec/generate-application/runtime/sections/transformers-runtime.d.ts +3 -3
  147. package/dist/application-spec/generate-application/runtime/spec-code/index.d.ts +2 -0
  148. package/dist/application-spec/generate-application/runtime/spec-code/index.js +1 -0
  149. package/dist/application-spec/generate-application/runtime/spec-code/resolve-spec-code.d.ts +18 -0
  150. package/dist/application-spec/generate-application/runtime/spec-code/resolve-spec-code.js +1 -0
  151. package/dist/application-spec/generate-application/runtime/spec-code/spec-code-module.d.ts +17 -0
  152. package/dist/application-spec/generate-application/runtime/spec-code/spec-code-module.js +1 -0
  153. package/dist/application-spec/generate-application/runtime-spec/decode-runtime-spec.d.ts +9 -0
  154. package/dist/application-spec/generate-application/runtime-spec/decode-runtime-spec.js +1 -0
  155. package/dist/application-spec/generate-application/runtime-spec/encode-runtime-spec.d.ts +8 -0
  156. package/dist/application-spec/generate-application/runtime-spec/encode-runtime-spec.js +1 -0
  157. package/dist/application-spec/generate-application/runtime-spec/encoded-runtime-spec.d.ts +27 -0
  158. package/dist/application-spec/generate-application/runtime-spec/encoded-runtime-spec.js +1 -0
  159. package/dist/application-spec/generate-application/runtime-spec/index.d.ts +5 -0
  160. package/dist/application-spec/generate-application/runtime-spec/index.js +1 -0
  161. package/dist/application-spec/generate-application/runtime-spec/runtime-spec.d.ts +68 -0
  162. package/dist/application-spec/generate-application/runtime-spec/runtime-spec.js +1 -0
  163. package/dist/application-spec/generate-application/runtime-spec/spec-code-id.d.ts +40 -0
  164. package/dist/application-spec/generate-application/runtime-spec/spec-code-id.js +1 -0
  165. package/dist/application-spec/parse-application-files/categorize/categorize-files.d.ts +34 -0
  166. package/dist/application-spec/parse-application-files/categorize/categorize-files.js +1 -1
  167. package/dist/application-spec/parse-application-files/categorize/earlier-generated-editor-configs.d.ts +16 -0
  168. package/dist/application-spec/parse-application-files/categorize/earlier-generated-editor-configs.js +9 -0
  169. package/dist/application-spec/parse-application-files/categorize/earlier-generated-tsconfig.d.ts +9 -0
  170. package/dist/application-spec/parse-application-files/categorize/earlier-generated-tsconfig.js +1 -0
  171. package/dist/application-spec/parse-application-files/raw-spec/parse-yaml-spec-file.js +1 -1
  172. package/dist/application-spec/parse-application-files/raw-spec/raw-assistant.d.ts +19 -2
  173. package/dist/application-spec/parse-application-files/raw-spec/raw-assistant.js +1 -1
  174. package/dist/application-spec/parse-application-files/spec/application/admin-spec/admin-spec.js +1 -1
  175. package/dist/application-spec/parse-application-files/spec/application/configurator-spec/configurator-spec.js +1 -1
  176. package/dist/application-spec/parse-application-files/spec/common/index.d.ts +1 -0
  177. package/dist/application-spec/parse-application-files/spec/common/index.js +1 -1
  178. package/dist/application-spec/parse-application-files/spec/common/value-type/format-value-type.d.ts +3 -0
  179. package/dist/application-spec/parse-application-files/spec/common/value-type/format-value-type.js +1 -0
  180. package/dist/application-spec/parse-application-files/spec/common/value-type/index.d.ts +5 -0
  181. package/dist/application-spec/parse-application-files/spec/common/value-type/index.js +1 -0
  182. package/dist/application-spec/parse-application-files/spec/common/value-type/intersect-value-types.d.ts +6 -0
  183. package/dist/application-spec/parse-application-files/spec/common/value-type/intersect-value-types.js +1 -0
  184. package/dist/application-spec/parse-application-files/spec/common/value-type/is-assignable-value-type.d.ts +8 -0
  185. package/dist/application-spec/parse-application-files/spec/common/value-type/is-assignable-value-type.js +1 -0
  186. package/dist/application-spec/parse-application-files/spec/common/value-type/value-type-at.d.ts +10 -0
  187. package/dist/application-spec/parse-application-files/spec/common/value-type/value-type-at.js +1 -0
  188. package/dist/application-spec/parse-application-files/spec/common/value-type/value-type.d.ts +98 -0
  189. package/dist/application-spec/parse-application-files/spec/common/value-type/value-type.js +1 -0
  190. package/dist/application-spec/parse-application-files/spec/components/bindings/component-path.d.ts +13 -0
  191. package/dist/application-spec/parse-application-files/spec/components/bindings/component-path.js +1 -0
  192. package/dist/application-spec/parse-application-files/spec/components/bindings/index.d.ts +2 -0
  193. package/dist/application-spec/parse-application-files/spec/components/bindings/index.js +1 -1
  194. package/dist/application-spec/parse-application-files/spec/components/bindings/read-binding-type.d.ts +24 -0
  195. package/dist/application-spec/parse-application-files/spec/components/bindings/read-binding-type.js +1 -0
  196. package/dist/application-spec/parse-application-files/spec/components/component-state-type.d.ts +8 -0
  197. package/dist/application-spec/parse-application-files/spec/components/component-state-type.js +1 -0
  198. package/dist/application-spec/parse-application-files/spec/components/filter-criterion-types.d.ts +13 -0
  199. package/dist/application-spec/parse-application-files/spec/components/filter-criterion-types.js +1 -0
  200. package/dist/application-spec/parse-application-files/spec/components/static-entity-id.d.ts +14 -0
  201. package/dist/application-spec/parse-application-files/spec/components/static-entity-id.js +1 -0
  202. package/dist/application-spec/parse-application-files/spec/components/user-component-entry.d.ts +6 -0
  203. package/dist/application-spec/parse-application-files/spec/components/user-component-entry.js +1 -1
  204. package/dist/application-spec/parse-application-files/spec/components/user-components.d.ts +7 -4
  205. package/dist/application-spec/parse-application-files/spec/components/user-components.js +1 -1
  206. package/dist/application-spec/parse-application-files/spec/expressions/expression-read-types.d.ts +24 -0
  207. package/dist/application-spec/parse-application-files/spec/expressions/expression-read-types.js +1 -0
  208. package/dist/application-spec/parse-application-files/spec/expressions/expression-read.d.ts +13 -0
  209. package/dist/application-spec/parse-application-files/spec/expressions/expression-read.js +1 -0
  210. package/dist/application-spec/parse-application-files/spec/expressions/expression-value-type.d.ts +9 -0
  211. package/dist/application-spec/parse-application-files/spec/expressions/expression-value-type.js +1 -0
  212. package/dist/application-spec/parse-application-files/spec/expressions/expressions.d.ts +6 -2
  213. package/dist/application-spec/parse-application-files/spec/expressions/expressions.js +1 -1
  214. package/dist/application-spec/parse-application-files/spec/expressions/user-expressions.d.ts +3 -1
  215. package/dist/application-spec/parse-application-files/spec/expressions/user-expressions.js +1 -1
  216. package/dist/application-spec/parse-application-files/spec/invariants/invariants.d.ts +2 -2
  217. package/dist/application-spec/parse-application-files/spec/invariants/invariants.js +1 -1
  218. package/dist/application-spec/parse-application-files/spec/model/index.d.ts +1 -0
  219. package/dist/application-spec/parse-application-files/spec/model/index.js +1 -1
  220. package/dist/application-spec/parse-application-files/spec/model/model-type-resolution.d.ts +10 -0
  221. package/dist/application-spec/parse-application-files/spec/model/model-type-resolution.js +1 -0
  222. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-form-elements.d.ts +9 -0
  223. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-form-elements.js +1 -0
  224. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-schema.js +1 -1
  225. package/dist/client/phoenix-api.d.ts +367 -0
  226. package/dist/configurator/ConfiguratorApp.js +1 -1
  227. package/dist/configurator/app-loader-content/DefaultAppLoaderContent.d.ts +2 -0
  228. package/dist/configurator/app-loader-content/DefaultAppLoaderContent.js +5 -0
  229. package/dist/configurator/app-loader-content/app-loader-content-name.d.ts +5 -0
  230. package/dist/configurator/app-loader-content/app-loader-content-name.js +1 -0
  231. package/dist/configurator/app-loader-content/index.d.ts +2 -0
  232. package/dist/configurator/app-loader-content/index.js +1 -0
  233. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.d.ts +36 -1
  234. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.js +1 -1
  235. package/dist/configurator/application-runtime/extensions/systems/assistant-system/graphql-tools.d.ts +7 -1
  236. package/dist/configurator/application-runtime/extensions/systems/assistant-system/graphql-tools.js +1 -1
  237. package/dist/configurator/application-runtime/extensions/systems/camera-control-system/camera-control-system.d.ts +1 -1
  238. package/dist/configurator/application-runtime/extensions/systems/canvas-system.d.ts +8 -0
  239. package/dist/configurator/application-runtime/extensions/systems/canvas-system.js +1 -1
  240. package/dist/configurator/application-runtime/extensions/systems/export-system/export-system.js +1 -1
  241. package/dist/configurator/application-runtime/extensions/systems/graphql-system/close-unclosed-braces.d.ts +12 -0
  242. package/dist/configurator/application-runtime/extensions/systems/graphql-system/close-unclosed-braces.js +1 -0
  243. package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.d.ts +7 -1
  244. package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.js +1 -1
  245. package/dist/configurator/application-runtime/extensions/systems/image-rendering-system/image-rendering-system.js +1 -1
  246. package/dist/configurator/common/configurator-interface.d.ts +131 -4
  247. package/dist/configurator/common/configurator-interface.js +1 -1
  248. package/dist/configurator/common/index.d.ts +3 -1
  249. package/dist/configurator/common/index.js +1 -1
  250. package/dist/configurator/common/use-reset-camera.d.ts +6 -0
  251. package/dist/configurator/common/use-reset-camera.js +1 -0
  252. package/dist/configurator/configuration-not-found-page/ConfigurationNotFoundPageElement.d.ts +12 -0
  253. package/dist/configurator/configuration-not-found-page/ConfigurationNotFoundPageElement.js +1 -0
  254. package/dist/configurator/configuration-not-found-page/create-configuration-not-found-page.d.ts +9 -0
  255. package/dist/configurator/configuration-not-found-page/create-configuration-not-found-page.js +1 -0
  256. package/dist/configurator/configuration-not-found-page/index.d.ts +2 -0
  257. package/dist/configurator/configuration-not-found-page/index.js +1 -0
  258. package/dist/configurator/configurator-context/ConfiguratorResponsiveProvider.d.ts +12 -0
  259. package/dist/configurator/configurator-context/ConfiguratorResponsiveProvider.js +1 -0
  260. package/dist/configurator/configurator-context/PresetSelectionProvider.js +1 -1
  261. package/dist/configurator/configurator-context/PreviewContextProvider.js +1 -1
  262. package/dist/configurator/configurator-context/ViewportStateSync.d.ts +2 -2
  263. package/dist/configurator/configurator-context/ViewportStateSync.js +1 -1
  264. package/dist/configurator/configurator-context/configurator-hooks/layout-hooks.d.ts +10 -0
  265. package/dist/configurator/configurator-context/configurator-routing/ConfiguratorRoutingProvider.js +1 -1
  266. package/dist/configurator/configurator-error-page/BuiltInConfiguratorErrorPage.d.ts +6 -0
  267. package/dist/configurator/configurator-error-page/BuiltInConfiguratorErrorPage.js +1 -0
  268. package/dist/configurator/configurator-error-page/ConfiguratorErrorPageElement.d.ts +12 -0
  269. package/dist/configurator/configurator-error-page/ConfiguratorErrorPageElement.js +1 -0
  270. package/dist/configurator/configurator-error-page/create-configurator-error-page.d.ts +9 -0
  271. package/dist/configurator/configurator-error-page/create-configurator-error-page.js +1 -0
  272. package/dist/configurator/configurator-error-page/index.d.ts +3 -0
  273. package/dist/configurator/configurator-error-page/index.js +1 -0
  274. package/dist/configurator/index.d.ts +3 -0
  275. package/dist/configurator/index.js +1 -1
  276. package/dist/configurator/pages/ConfiguratorErrorPage.d.ts +0 -1
  277. package/dist/configurator/pages/ConfiguratorErrorPage.js +1 -1
  278. package/dist/configurator/pages/ConfiguratorNotFoundPage.js +1 -1
  279. package/dist/configurator/pages/DefaultConfiguratorLayout.d.ts +3 -2
  280. package/dist/configurator/pages/DefaultNotAuthenticatedPage.d.ts +8 -0
  281. package/dist/configurator/pages/DefaultNotAuthenticatedPage.js +1 -0
  282. package/dist/configurator/pages/DefaultPresetUi.d.ts +7 -0
  283. package/dist/configurator/pages/DefaultPresetUi.js +1 -0
  284. package/dist/configurator/pages/LoadedConfiguratorDetailPage.js +1 -1
  285. package/dist/configurator/pages/NewConfiguratorPage.js +1 -1
  286. package/dist/configurator/pages/PresetCreationErrorPage.d.ts +1 -1
  287. package/dist/configurator/pages/PresetCreationErrorPage.js +1 -1
  288. package/dist/configurator/pages/RootPage.js +1 -1
  289. package/dist/configurator/pages/configurator-layout-name.d.ts +2 -0
  290. package/dist/configurator/pages/configurator-layout-name.js +1 -0
  291. package/dist/configurator/pages/default-configurator-elements.d.ts +13 -0
  292. package/dist/configurator/pages/default-configurator-elements.js +1 -0
  293. package/dist/configurator/pages/default-elements/built-in-entity-element.d.ts +10 -0
  294. package/dist/configurator/pages/default-elements/built-in-entity-element.js +1 -0
  295. package/dist/configurator/pages/default-elements/built-in-layout-element.d.ts +10 -0
  296. package/dist/configurator/pages/default-elements/built-in-layout-element.js +1 -0
  297. package/dist/configurator/pages/default-elements/domain-control-elements.d.ts +6 -0
  298. package/dist/configurator/pages/default-elements/domain-control-elements.js +1 -0
  299. package/dist/configurator/pages/default-elements/index.d.ts +5 -0
  300. package/dist/configurator/pages/default-elements/index.js +1 -0
  301. package/dist/configurator/pages/default-elements/recipe-panel-elements.d.ts +3 -0
  302. package/dist/configurator/pages/default-elements/recipe-panel-elements.js +1 -0
  303. package/dist/configurator/pages/default-elements/scene-controls/BuiltInAddEntityFab.d.ts +3 -0
  304. package/dist/configurator/pages/default-elements/scene-controls/BuiltInAddEntityFab.js +1 -0
  305. package/dist/configurator/pages/default-elements/scene-controls/BuiltInDeleteEntityFab.d.ts +3 -0
  306. package/dist/configurator/pages/default-elements/scene-controls/BuiltInDeleteEntityFab.js +1 -0
  307. package/dist/configurator/pages/default-elements/scene-controls/BuiltInNavigationHotspot.d.ts +3 -0
  308. package/dist/configurator/pages/default-elements/scene-controls/BuiltInNavigationHotspot.js +1 -0
  309. package/dist/configurator/pages/default-elements/scene-controls/BuiltInSelectionHotspot.d.ts +3 -0
  310. package/dist/configurator/pages/default-elements/scene-controls/BuiltInSelectionHotspot.js +1 -0
  311. package/dist/configurator/pages/default-elements/scene-controls/BuiltInToolMenuFab.d.ts +3 -0
  312. package/dist/configurator/pages/default-elements/scene-controls/BuiltInToolMenuFab.js +1 -0
  313. package/dist/configurator/pages/default-elements/scene-controls/index.d.ts +6 -0
  314. package/dist/configurator/pages/default-elements/scene-controls/index.js +1 -0
  315. package/dist/configurator/pages/default-elements/scene-controls/scene-control-elements.d.ts +6 -0
  316. package/dist/configurator/pages/default-elements/scene-controls/scene-control-elements.js +1 -0
  317. package/dist/configurator/pages/default-elements/sidebar-footer-elements.d.ts +7 -0
  318. package/dist/configurator/pages/default-elements/sidebar-footer-elements.js +1 -0
  319. package/dist/configurator/pages/default-elements/toolbar-elements.d.ts +7 -0
  320. package/dist/configurator/pages/default-elements/toolbar-elements.js +1 -0
  321. package/dist/configurator/pages/error-boundaries/GeneralErrorBoundary.js +1 -1
  322. package/dist/configurator/pages/index.d.ts +1 -0
  323. package/dist/configurator/pages/index.js +1 -1
  324. package/dist/configurator/preset-screen-elements/PresetDeviceNotSupportedElement.d.ts +4 -0
  325. package/dist/configurator/preset-screen-elements/PresetDeviceNotSupportedElement.js +1 -0
  326. package/dist/configurator/preset-screen-elements/PresetPageActionElement.d.ts +4 -0
  327. package/dist/configurator/preset-screen-elements/PresetPageActionElement.js +1 -0
  328. package/dist/configurator/preset-screen-elements/index.d.ts +2 -0
  329. package/dist/configurator/preset-screen-elements/index.js +1 -0
  330. package/dist/configurator/scene/index.d.ts +1 -0
  331. package/dist/configurator/scene/index.js +1 -1
  332. package/dist/configurator/scene/scene-controls/DeleteEntityFab.js +1 -1
  333. package/dist/configurator/scene/scene-controls/SelectionHotspot.js +1 -1
  334. package/dist/configurator/scene/scene-controls/ToolFab.d.ts +4 -0
  335. package/dist/configurator/scene/scene-controls/ToolFab.js +1 -1
  336. package/dist/configurator/scene/scene-controls/use-scene-control-tooltip.d.ts +2 -1
  337. package/dist/configurator/scene/scene-entity/scene-controls/SceneEntityHtmlHotspots.js +1 -1
  338. package/dist/configurator/toolbar-actions/index.d.ts +3 -0
  339. package/dist/configurator/toolbar-actions/index.js +1 -0
  340. package/dist/configurator/toolbar-actions/use-assistant-panel.d.ts +18 -0
  341. package/dist/configurator/toolbar-actions/use-assistant-panel.js +1 -0
  342. package/dist/configurator/toolbar-actions/use-measurements.d.ts +35 -0
  343. package/dist/configurator/toolbar-actions/use-measurements.js +1 -0
  344. package/dist/configurator/toolbar-actions/use-toolbar-actions.d.ts +100 -0
  345. package/dist/configurator/toolbar-actions/use-toolbar-actions.js +1 -0
  346. package/dist/configurator/toolbar-actions/use-toolbar-help.d.ts +7 -0
  347. package/dist/configurator/toolbar-actions/use-toolbar-help.js +1 -0
  348. package/dist/configurator/ui/assistant/AssistantChips.d.ts +8 -2
  349. package/dist/configurator/ui/assistant/AssistantChips.js +1 -1
  350. package/dist/configurator/ui/assistant/AssistantMarkdown.d.ts +7 -2
  351. package/dist/configurator/ui/assistant/AssistantMarkdown.js +1 -1
  352. package/dist/configurator/ui/assistant/AssistantPanel.js +1 -1
  353. package/dist/configurator/ui/assistant/AssistantThread.js +1 -1
  354. package/dist/configurator/ui/assistant/alert/AssistantAlert.d.ts +8 -0
  355. package/dist/configurator/ui/assistant/alert/AssistantAlert.js +1 -0
  356. package/dist/configurator/ui/assistant/alert/index.d.ts +2 -0
  357. package/dist/configurator/ui/assistant/alert/index.js +1 -0
  358. package/dist/configurator/ui/assistant/alert/remark-alerts.d.ts +10 -0
  359. package/dist/configurator/ui/assistant/alert/remark-alerts.js +1 -0
  360. package/dist/configurator/ui/assistant/entity-link/AssistantEntityLink.d.ts +1 -1
  361. package/dist/configurator/ui/assistant/entity-link/AssistantEntityLink.js +1 -1
  362. package/dist/configurator/ui/assistant/entity-link/entity-link-state.d.ts +1 -1
  363. package/dist/configurator/ui/assistant/entity-link/index.d.ts +0 -1
  364. package/dist/configurator/ui/assistant/entity-link/index.js +1 -1
  365. package/dist/configurator/ui/assistant/form/AssistantForm.d.ts +19 -0
  366. package/dist/configurator/ui/assistant/form/AssistantForm.js +1 -0
  367. package/dist/configurator/ui/assistant/form/compose-answer.d.ts +11 -0
  368. package/dist/configurator/ui/assistant/form/compose-answer.js +1 -0
  369. package/dist/configurator/ui/assistant/form/describe-build-errors.d.ts +6 -0
  370. package/dist/configurator/ui/assistant/form/describe-build-errors.js +1 -0
  371. package/dist/configurator/ui/assistant/form/form-model.d.ts +37 -0
  372. package/dist/configurator/ui/assistant/form/form-model.js +1 -0
  373. package/dist/configurator/ui/assistant/form/form-state.d.ts +4 -0
  374. package/dist/configurator/ui/assistant/form/form-state.js +1 -0
  375. package/dist/configurator/ui/assistant/form/index.d.ts +4 -0
  376. package/dist/configurator/ui/assistant/form/index.js +1 -0
  377. package/dist/configurator/ui/assistant/form/parse-form-block.d.ts +10 -0
  378. package/dist/configurator/ui/assistant/form/parse-form-block.js +1 -0
  379. package/dist/configurator/ui/assistant/form/read-form-attributes.d.ts +13 -0
  380. package/dist/configurator/ui/assistant/form/read-form-attributes.js +1 -0
  381. package/dist/configurator/ui/assistant/form/registry/built-in-form-elements.d.ts +3 -0
  382. package/dist/configurator/ui/assistant/form/registry/built-in-form-elements.js +1 -0
  383. package/dist/configurator/ui/assistant/form/registry/create-assistant-form-element.d.ts +31 -0
  384. package/dist/configurator/ui/assistant/form/registry/create-assistant-form-element.js +1 -0
  385. package/dist/configurator/ui/assistant/form/registry/form-element-definition.d.ts +16 -0
  386. package/dist/configurator/ui/assistant/form/registry/form-element-definition.js +1 -0
  387. package/dist/configurator/ui/assistant/form/registry/form-registry.d.ts +31 -0
  388. package/dist/configurator/ui/assistant/form/registry/form-registry.js +1 -0
  389. package/dist/configurator/ui/assistant/form/registry/index.d.ts +6 -0
  390. package/dist/configurator/ui/assistant/form/registry/index.js +1 -0
  391. package/dist/configurator/ui/assistant/form/registry/use-form-registry.d.ts +8 -0
  392. package/dist/configurator/ui/assistant/form/registry/use-form-registry.js +1 -0
  393. package/dist/configurator/ui/assistant/form-elements/FormCard.d.ts +9 -0
  394. package/dist/configurator/ui/assistant/form-elements/FormCard.js +1 -0
  395. package/dist/configurator/ui/assistant/form-elements/FormConfirm.d.ts +9 -0
  396. package/dist/configurator/ui/assistant/form-elements/FormConfirm.js +1 -0
  397. package/dist/configurator/ui/assistant/form-elements/FormGroup.d.ts +6 -0
  398. package/dist/configurator/ui/assistant/form-elements/FormGroup.js +1 -0
  399. package/dist/configurator/ui/assistant/form-elements/FormNumber.d.ts +9 -0
  400. package/dist/configurator/ui/assistant/form-elements/FormNumber.js +1 -0
  401. package/dist/configurator/ui/assistant/form-elements/FormOptions.d.ts +6 -0
  402. package/dist/configurator/ui/assistant/form-elements/FormOptions.js +1 -0
  403. package/dist/configurator/ui/assistant/form-elements/FormReply.d.ts +6 -0
  404. package/dist/configurator/ui/assistant/form-elements/FormReply.js +1 -0
  405. package/dist/configurator/ui/assistant/form-elements/FormSwatch.d.ts +10 -0
  406. package/dist/configurator/ui/assistant/form-elements/FormSwatch.js +1 -0
  407. package/dist/configurator/ui/assistant/form-elements/FormText.d.ts +6 -0
  408. package/dist/configurator/ui/assistant/form-elements/FormText.js +1 -0
  409. package/dist/configurator/ui/assistant/form-elements/clamp-form-number.d.ts +10 -0
  410. package/dist/configurator/ui/assistant/form-elements/clamp-form-number.js +1 -0
  411. package/dist/configurator/ui/assistant/form-elements/form-element-props.d.ts +38 -0
  412. package/dist/configurator/ui/assistant/form-elements/form-element-props.js +1 -0
  413. package/dist/configurator/ui/assistant/form-elements/index.d.ts +9 -0
  414. package/dist/configurator/ui/assistant/form-elements/index.js +1 -0
  415. package/dist/configurator/ui/assistant/index.d.ts +3 -0
  416. package/dist/configurator/ui/assistant/index.js +1 -1
  417. package/dist/configurator/ui/assistant/reference-link/AssistantReferenceLink.d.ts +16 -0
  418. package/dist/configurator/ui/assistant/reference-link/AssistantReferenceLink.js +1 -0
  419. package/dist/configurator/ui/assistant/reference-link/assistant-link-target.d.ts +34 -0
  420. package/dist/configurator/ui/assistant/reference-link/assistant-link-target.js +1 -0
  421. package/dist/configurator/ui/assistant/reference-link/assistant-reference-details.d.ts +25 -0
  422. package/dist/configurator/ui/assistant/reference-link/assistant-reference-details.js +1 -0
  423. package/dist/configurator/ui/assistant/reference-link/index.d.ts +3 -0
  424. package/dist/configurator/ui/assistant/reference-link/index.js +1 -0
  425. package/dist/configurator/ui/assistant/reference-link/reference-styles.d.ts +12 -0
  426. package/dist/configurator/ui/assistant/reference-link/reference-styles.js +1 -0
  427. package/dist/configurator/ui/assistant/reference-link/use-assistant-reference-details.d.ts +8 -0
  428. package/dist/configurator/ui/assistant/reference-link/use-assistant-reference-details.js +1 -0
  429. package/dist/configurator/ui/assistant/resource-image/AssistantImage.d.ts +9 -0
  430. package/dist/configurator/ui/assistant/resource-image/AssistantImage.js +1 -0
  431. package/dist/configurator/ui/assistant/resource-image/index.d.ts +3 -0
  432. package/dist/configurator/ui/assistant/resource-image/index.js +1 -0
  433. package/dist/configurator/ui/assistant/resource-image/resource-path.d.ts +2 -0
  434. package/dist/configurator/ui/assistant/resource-image/resource-path.js +1 -0
  435. package/dist/configurator/ui/assistant/resource-image/use-resource-image-url.d.ts +5 -0
  436. package/dist/configurator/ui/assistant/resource-image/use-resource-image-url.js +1 -0
  437. package/dist/configurator/ui/assistant/streamed-markdown.d.ts +4 -2
  438. package/dist/configurator/ui/assistant/streamed-markdown.js +2 -2
  439. package/dist/configurator/ui/assistant/thread-items.d.ts +8 -1
  440. package/dist/configurator/ui/assistant/thread-items.js +1 -1
  441. package/dist/configurator/ui/assistant/use-follow-stream.js +1 -1
  442. package/dist/configurator/ui/configurator-layout/slots/canvas/LayoutCanvas.js +1 -1
  443. package/dist/configurator/ui/configurator-layout/slots/canvas/SharedCanvas.js +1 -1
  444. package/dist/configurator/ui/configurator-layout/slots/mobile-tabs/use-mobile-tabs.d.ts +1 -1
  445. package/dist/configurator/ui/configurator-layout/slots/mobile-tabs/use-mobile-tabs.js +1 -1
  446. package/dist/configurator/ui/configurator-layout/slots/services/InvariantViolations.js +1 -1
  447. package/dist/configurator/ui/configurator-layout/slots/services/Services.js +1 -1
  448. package/dist/configurator/ui/configurator-layout/slots/sidebar-tabs/use-sidebar-tabs.d.ts +1 -1
  449. package/dist/configurator/ui/configurator-layout/slots/sidebar-tabs/use-sidebar-tabs.js +1 -1
  450. package/dist/configurator/ui/configurator-layout/universal/use-layout-scene-safe-area.d.ts +1 -1
  451. package/dist/configurator/ui/configurator-layout/universal/use-layout-scene-safe-area.js +1 -1
  452. package/dist/configurator/ui/configurator-layout/universal/use-scene-safe-area.d.ts +1 -1
  453. package/dist/configurator/ui/index.d.ts +1 -0
  454. package/dist/configurator/ui/index.js +1 -1
  455. package/dist/configurator/ui/legacy/layout/common/CommonFinalizeButton.js +1 -1
  456. package/dist/configurator/ui/legacy/layout/common/CommonSummaryButton.js +1 -1
  457. package/dist/configurator/ui/legacy/layout/common/CommonTopNavigation.js +1 -1
  458. package/dist/configurator/ui/legacy/layout/common/ReactiveInterfaceLayout.js +1 -1
  459. package/dist/configurator/ui/legacy/layout/common/ResponsiveFinalizeButton.js +1 -1
  460. package/dist/configurator/ui/legacy/layout/common/SummaryReadLayout.js +1 -1
  461. package/dist/configurator/ui/legacy/layout/simple/SimpleOwnerLayout.js +1 -1
  462. package/dist/configurator/ui/legacy/layout/simple/SimpleTopNavigation.js +1 -1
  463. package/dist/configurator/ui/legacy/layout/steps/StepsNavigation.js +1 -1
  464. package/dist/configurator/ui/legacy/layout/steps/StepsOwnerLayout.js +1 -1
  465. package/dist/configurator/ui/legacy/layout/steps/StepsSidebarFooter.js +1 -1
  466. package/dist/configurator/ui/legacy/layout/tabs/TabsOwnerLayout.js +1 -1
  467. package/dist/configurator/ui/legacy/toolbar/common/DimensionUnitSelector.js +1 -1
  468. package/dist/configurator/ui/legacy/toolbar/common/MeasurementsIndicatorsSwitch.js +1 -1
  469. package/dist/configurator/ui/legacy/toolbar/desktop-toolbar/FullscreenToolbarAction.js +1 -1
  470. package/dist/configurator/ui/legacy/toolbar/desktop-toolbar/HelpToolbarAction.js +1 -1
  471. package/dist/configurator/ui/legacy/toolbar/desktop-toolbar/MeasurementsToolbarAction.js +1 -1
  472. package/dist/configurator/ui/legacy/toolbar/desktop-toolbar/UndoRedoToolbarGroup.js +1 -1
  473. package/dist/configurator/ui/phoenix-layout-elements/AppLoader.js +2 -6
  474. package/dist/configurator/ui/phoenix-layout-elements/AssistantToolbarButton.js +1 -1
  475. package/dist/configurator/ui/phoenix-layout-elements/EnterFullscreenToolbarButton.js +1 -1
  476. package/dist/configurator/ui/phoenix-layout-elements/ExitFullscreenToolbarButton.js +1 -1
  477. package/dist/configurator/ui/phoenix-layout-elements/HelpToolbarButton.js +1 -1
  478. package/dist/configurator/ui/phoenix-layout-elements/LanguageMenuAction.js +1 -1
  479. package/dist/configurator/ui/phoenix-layout-elements/LanguageToolbarButton.js +1 -1
  480. package/dist/configurator/ui/phoenix-layout-elements/LayoutCustomOwnerUi.d.ts +1 -0
  481. package/dist/configurator/ui/phoenix-layout-elements/LayoutCustomOwnerUi.js +1 -1
  482. package/dist/configurator/ui/phoenix-layout-elements/LayoutCustomReadUi.d.ts +1 -0
  483. package/dist/configurator/ui/phoenix-layout-elements/LayoutCustomReadUi.js +1 -1
  484. package/dist/configurator/ui/phoenix-layout-elements/MeasurementsMenuAction.js +1 -1
  485. package/dist/configurator/ui/phoenix-layout-elements/MeasurementsToolbarButton.js +1 -1
  486. package/dist/configurator/ui/phoenix-layout-elements/RedoToolbarButton.js +1 -1
  487. package/dist/configurator/ui/phoenix-layout-elements/ShareToolbarButton.js +1 -1
  488. package/dist/configurator/ui/phoenix-layout-elements/UndoToolbarButton.js +1 -1
  489. package/dist/configurator/ui/phoenix-layout-elements/header/common/back-button/use-go-back-action.js +1 -1
  490. package/dist/configurator/ui/phoenix-layout-elements/header/common/horizontal-tabs/DesktopHorizontalTabs.js +1 -1
  491. package/dist/configurator/ui/phoenix-layout-elements/header/common/step-navigation/DesktopNavigationSteps.d.ts +1 -1
  492. package/dist/configurator/ui/phoenix-layout-elements/header/common/step-navigation/DesktopNavigationSteps.js +1 -1
  493. package/dist/configurator/ui/phoenix-layout-elements/header/common/step-navigation/StepsNavigation.d.ts +2 -8
  494. package/dist/configurator/ui/phoenix-layout-elements/header/common/step-navigation/StepsNavigation.js +1 -1
  495. package/dist/configurator/ui/phoenix-layout-elements/measurements/DimensionUnitSelector.js +1 -1
  496. package/dist/configurator/ui/phoenix-layout-elements/measurements/MeasurementsIndicatorsSwitch.js +1 -1
  497. package/dist/configurator/ui/phoenix-layout-elements/share/ShareModal.js +1 -1
  498. package/dist/configurator/ui/phoenix-layout-elements/share/use-share.d.ts +7 -8
  499. package/dist/configurator/ui/phoenix-layout-elements/share/use-share.js +1 -1
  500. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/basic/BasicFinalizeButton.js +1 -1
  501. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/common/CustomFinalizeButton.js +1 -1
  502. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/common/EnterSummaryButton.js +1 -1
  503. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/common/FinalizeActions.js +1 -1
  504. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/common/NextStepButton.js +1 -1
  505. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/common/PreviousStepButton.js +1 -1
  506. package/dist/configurator/ui/preset-layout/CategoryPresetUi.js +1 -1
  507. package/dist/configurator/ui/preset-layout/PresetUi.d.ts +4 -0
  508. package/dist/configurator/ui/preset-layout/PresetUi.js +1 -1
  509. package/dist/configurator/ui/save-message-snackbars/SaveMessageSnackbars.d.ts +10 -0
  510. package/dist/configurator/ui/save-message-snackbars/SaveMessageSnackbars.js +1 -0
  511. package/dist/configurator/ui/save-message-snackbars/index.d.ts +1 -0
  512. package/dist/configurator/ui/save-message-snackbars/index.js +1 -0
  513. package/dist/docs/complex-use-cases/focus-mode.mdx +2 -0
  514. package/dist/docs/controls/select-child-entity/cardselect.mdx +1 -0
  515. package/dist/docs/fabs/basic.mdx +6 -2
  516. package/dist/docs/index.json +18 -1
  517. package/dist/docs/layouts/custom-layout.mdx +1474 -201
  518. package/dist/docs/layouts/gallery/kestrel-kettle.mdx +1858 -0
  519. package/dist/docs/other-features/error-5xx.mdx +1 -1
  520. package/dist/docs/other-features/navigation-hotspot.mdx +2 -0
  521. package/dist/docs/other-features/not-found-404.mdx +1 -1
  522. package/dist/docs/phoenix/clerk-sign-in.mdx +1 -1
  523. package/dist/docs/phoenix/components.mdx +6 -0
  524. package/dist/docs/phoenix/configurator-interface.mdx +243 -28
  525. package/dist/docs/phoenix/deployments.mdx +2 -6
  526. package/dist/docs/phoenix/domain-model.mdx +2 -0
  527. package/dist/docs/phoenix/finalization.mdx +1 -1
  528. package/dist/docs/phoenix/getting-started.mdx +6 -3
  529. package/dist/docs/phoenix/layout-slots.mdx +25 -23
  530. package/dist/docs/phoenix/localization.mdx +10 -6
  531. package/dist/docs/phoenix/migration-guide.mdx +24 -11
  532. package/dist/docs/phoenix/phoenix-cli.mdx +67 -20
  533. package/dist/docs/phoenix/project-structure.mdx +70 -33
  534. package/dist/docs/phoenix/quickstart.mdx +7 -7
  535. package/dist/docs/phoenix/sdk-builder-workflow.mdx +8 -8
  536. package/dist/docs/phoenix/testing.mdx +8 -0
  537. package/dist/docs/phoenix/webhooks.mdx +21 -4
  538. package/dist/docs/selection-and-highlight/hotspots.mdx +2 -0
  539. package/dist/domain/application/application-config.d.ts +3 -1
  540. package/dist/domain/application/assistant/assistant-manifest.d.ts +3 -0
  541. package/dist/domain/application/assistant/assistant-resolved-manifest.d.ts +3 -0
  542. package/dist/domain/application/assistant/build-assistant-manifest.js +1 -1
  543. package/dist/domain/application/assistant/form/assistant-form-element-name.d.ts +11 -0
  544. package/dist/domain/application/assistant/form/assistant-form-element-name.js +8 -0
  545. package/dist/domain/application/assistant/form/assistant-form-elements.d.ts +174 -0
  546. package/dist/domain/application/assistant/form/assistant-form-elements.js +1 -0
  547. package/dist/domain/application/assistant/form/assistant-resource-path.d.ts +10 -0
  548. package/dist/domain/application/assistant/form/assistant-resource-path.js +1 -0
  549. package/dist/domain/application/assistant/form/index.d.ts +4 -0
  550. package/dist/domain/application/assistant/form/index.js +1 -0
  551. package/dist/domain/application/assistant/generate-assistant-prompt.d.ts +3 -0
  552. package/dist/domain/application/assistant/generate-assistant-prompt.js +1 -1
  553. package/dist/domain/application/assistant/index.d.ts +1 -0
  554. package/dist/domain/application/assistant/index.js +1 -1
  555. package/dist/domain/application/assistant-recipe-groups.d.ts +3 -1
  556. package/dist/domain/application/configurator-builder.d.ts +4 -1
  557. package/dist/domain/application/configurator-builder.js +1 -1
  558. package/dist/domain/core/schema/extended-schema-validator.js +1 -1
  559. package/dist/domain/domain-context/index.d.ts +1 -1
  560. package/dist/domain/domain-context/undo-system.d.ts +28 -1
  561. package/dist/domain/domain-context/undo-system.js +1 -1
  562. package/dist/domain/domain-runtime/domain-runtime.d.ts +4 -0
  563. package/dist/domain/domain-runtime/environment/types.d.ts +1 -1
  564. package/dist/domain/domain-runtime/spec/index.d.ts +1 -1
  565. package/dist/domain/domain-runtime/spec/index.js +1 -1
  566. package/dist/domain/domain-runtime/spec/initialize.js +1 -1
  567. package/dist/domain/domain-runtime/spec/module-checks/element-registration.d.ts +27 -12
  568. package/dist/domain/domain-runtime/spec/module-checks/element-registration.js +1 -1
  569. package/dist/domain/domain-runtime/spec/module-checks/find-assistant-form-element-errors.d.ts +12 -0
  570. package/dist/domain/domain-runtime/spec/module-checks/find-assistant-form-element-errors.js +1 -0
  571. package/dist/domain/domain-runtime/spec/module-checks/index.d.ts +2 -1
  572. package/dist/domain/domain-runtime/spec/module-checks/index.js +1 -1
  573. package/dist/domain/domain-runtime/spec/selectors.d.ts +3 -1
  574. package/dist/domain/domain-runtime/spec/selectors.js +1 -1
  575. package/dist/domain/domain-runtime/spec/types.d.ts +2 -0
  576. package/dist/domain/mocks/create-mock-domain-runtime.d.ts +2 -0
  577. package/dist/domain/system-components/child-entity-selection.js +1 -1
  578. package/dist/domain/system-components/common/scene-entity-control-schema.d.ts +3 -0
  579. package/dist/domain/system-components/common/scene-entity-control-schema.js +1 -1
  580. package/dist/editor/Editor.d.ts +7 -0
  581. package/dist/editor/Editor.js +1 -1
  582. package/dist/editor/domain-editors/DomainSpecContext.js +1 -1
  583. package/dist/editor/domain-editors/apply-spec-update.d.ts +8 -1
  584. package/dist/editor/domain-editors/apply-spec-update.js +1 -1
  585. package/dist/editor/domain-editors/use-implementation-files.js +1 -1
  586. package/dist/editor/mocks/CreateMockYaml.js +2 -2
  587. package/dist/editor/mocks/EditorMockContext.d.ts +2 -0
  588. package/dist/editor/mocks/EditorMockContext.js +1 -1
  589. package/dist/editor/screenshot/ScreenshotHandler.js +1 -1
  590. package/dist/globals/index.d.ts +2 -0
  591. package/dist/i18n/locales/cs/messages.js +1 -1
  592. package/dist/i18n/locales/da/messages.js +1 -1
  593. package/dist/i18n/locales/de/messages.js +1 -1
  594. package/dist/i18n/locales/de-AT/messages.js +1 -1
  595. package/dist/i18n/locales/en/messages.js +1 -1
  596. package/dist/i18n/locales/en-AU/messages.js +1 -1
  597. package/dist/i18n/locales/en-GB/messages.js +1 -1
  598. package/dist/i18n/locales/es/messages.js +1 -1
  599. package/dist/i18n/locales/fr/messages.js +1 -1
  600. package/dist/i18n/locales/hu/messages.js +1 -1
  601. package/dist/i18n/locales/it/messages.js +1 -1
  602. package/dist/i18n/locales/nl/messages.js +1 -1
  603. package/dist/i18n/locales/pl/messages.js +1 -1
  604. package/dist/i18n/locales/pt/messages.js +1 -1
  605. package/dist/i18n/locales/ro/messages.js +1 -1
  606. package/dist/i18n/locales/sk/messages.js +1 -1
  607. package/dist/i18n/locales/tr/messages.js +1 -1
  608. package/dist/legacy/domain-cli/utils/cache.d.ts +1 -1
  609. package/dist/legacy/domain-cli/utils/cache.js +1 -1
  610. package/dist/legacy/domain-spec/__generated/domain-schema.d.ts +79 -80
  611. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/claude-md.d.ts +1 -1
  612. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/cursor-rules.d.ts +1 -1
  613. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/shared-sdk-content.d.ts +1 -1
  614. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/shared-sdk-content.js +7 -2
  615. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-admin.js +15 -14
  616. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-configurator.js +14 -12
  617. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-embedded-admin.js +14 -13
  618. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-embedded-configurator.js +13 -11
  619. package/dist/phoenix/application-spec/application-spec-builder.d.ts +0 -2
  620. package/dist/phoenix/application-spec/application-spec-builder.js +1 -1
  621. package/dist/phoenix/application-spec/generate-application-spec-project.d.ts +0 -2
  622. package/dist/phoenix/application-spec/generate-application-spec-project.js +2 -2
  623. package/dist/phoenix/application-spec/generate-application-spec-story.js +2 -2
  624. package/dist/phoenix/application-spec/generate-project-files.d.ts +0 -2
  625. package/dist/phoenix/application-spec/project-files.js +1 -1
  626. package/dist/phoenix/bin.d.ts +2 -0
  627. package/dist/phoenix/bin.js +2 -0
  628. package/dist/phoenix/check-configs/built-in-eslint-config.d.ts +9 -0
  629. package/dist/phoenix/check-configs/built-in-eslint-config.js +1 -0
  630. package/dist/phoenix/check-configs/eslint-config.d.ts +10 -0
  631. package/dist/phoenix/check-configs/eslint-config.js +1 -0
  632. package/dist/phoenix/check-configs/index.d.ts +8 -0
  633. package/dist/phoenix/check-configs/index.js +1 -0
  634. package/dist/phoenix/check-configs/typescript-project.d.ts +5 -0
  635. package/dist/phoenix/check-configs/typescript-project.js +1 -0
  636. package/dist/phoenix/cli.d.ts +0 -1
  637. package/dist/phoenix/cli.js +1 -2
  638. package/dist/phoenix/commands/build.js +1 -1
  639. package/dist/phoenix/commands/check.js +1 -1
  640. package/dist/phoenix/commands/clean.js +1 -1
  641. package/dist/phoenix/commands/deploy.js +2 -2
  642. package/dist/phoenix/commands/deps/deps.d.ts +73 -0
  643. package/dist/phoenix/commands/deps/deps.js +3 -0
  644. package/dist/phoenix/commands/deps/index.d.ts +1 -0
  645. package/dist/phoenix/commands/deps/index.js +1 -0
  646. package/dist/phoenix/commands/deps/sdk-manifest.d.ts +12 -0
  647. package/dist/phoenix/commands/deps/sdk-manifest.js +1 -0
  648. package/dist/phoenix/commands/dev.js +5 -5
  649. package/dist/phoenix/commands/fix.js +1 -1
  650. package/dist/phoenix/commands/index.d.ts +1 -0
  651. package/dist/phoenix/commands/index.js +1 -1
  652. package/dist/phoenix/commands/init.d.ts +17 -5
  653. package/dist/phoenix/commands/init.js +1 -1
  654. package/dist/phoenix/commands/link.js +1 -1
  655. package/dist/phoenix/commands/prettier.js +1 -1
  656. package/dist/phoenix/commands/sync.js +1 -1
  657. package/dist/phoenix/commands/unlink.js +1 -1
  658. package/dist/phoenix/services/application-spec-project-watcher.d.ts +2 -2
  659. package/dist/phoenix/services/application-spec-project-watcher.js +3 -3
  660. package/dist/phoenix/services/lingui.d.ts +8 -0
  661. package/dist/phoenix/services/lingui.js +1 -1
  662. package/dist/phoenix/services/swc.js +1 -1
  663. package/dist/phoenix/services/vite-config.js +1 -1
  664. package/dist/phoenix/utils/index.d.ts +4 -2
  665. package/dist/phoenix/utils/index.js +1 -1
  666. package/dist/phoenix/utils/node-version/index.d.ts +1 -0
  667. package/dist/phoenix/utils/node-version/index.js +1 -0
  668. package/dist/phoenix/utils/node-version/supported-node-version.d.ts +12 -0
  669. package/dist/phoenix/utils/node-version/supported-node-version.js +4 -0
  670. package/dist/phoenix/utils/package-info.d.ts +0 -9
  671. package/dist/phoenix/utils/package-info.js +1 -1
  672. package/dist/phoenix/utils/package-manager/index.d.ts +2 -0
  673. package/dist/phoenix/utils/package-manager/index.js +1 -0
  674. package/dist/phoenix/utils/package-manager/package-manager-commands.d.ts +19 -0
  675. package/dist/phoenix/utils/package-manager/package-manager-commands.js +1 -0
  676. package/dist/phoenix/utils/package-manager/pnpm-project.d.ts +9 -0
  677. package/dist/phoenix/utils/package-manager/pnpm-project.js +1 -0
  678. package/dist/phoenix/utils/run-command.d.ts +11 -0
  679. package/dist/phoenix/utils/run-command.js +1 -1
  680. package/dist/phoenix/utils/sdk-tool/index.d.ts +1 -0
  681. package/dist/phoenix/utils/sdk-tool/index.js +1 -0
  682. package/dist/phoenix/utils/sdk-tool/resolve-sdk-tool-bin.d.ts +15 -0
  683. package/dist/phoenix/utils/sdk-tool/resolve-sdk-tool-bin.js +1 -0
  684. package/dist/{configurator/common → react-sdk/application-runtime/common-services/analytics}/frontend-analytics.d.ts +4 -0
  685. package/dist/react-sdk/application-runtime/common-services/analytics/index.d.ts +1 -0
  686. package/dist/react-sdk/application-runtime/common-services/analytics/index.js +1 -1
  687. package/dist/react-sdk/application-runtime/hooks/use-phoenix-element-slots.d.ts +2 -1
  688. package/dist/react-sdk/application-runtime/routing/routing-service.d.ts +34 -2
  689. package/dist/react-sdk/application-runtime/routing/routing-service.js +1 -1
  690. package/dist/react-sdk/application-runtime/runtime/create-application-runtime.d.ts +4 -0
  691. package/dist/react-sdk/application-runtime/runtime/create-application-runtime.js +1 -1
  692. package/dist/react-sdk/domain-application-context/DomainLifecycleBoundary.js +1 -1
  693. package/dist/react-sdk/domain-context/common-hooks/index.d.ts +8 -0
  694. package/dist/react-sdk/domain-context/common-hooks/index.js +1 -0
  695. package/dist/react-sdk/domain-context/common-hooks/use-configurator-messages.d.ts +15 -4
  696. package/dist/react-sdk/domain-context/common-hooks/use-configurator-messages.js +1 -1
  697. package/dist/react-sdk/domain-context/component-hooks/index.d.ts +1 -0
  698. package/dist/react-sdk/domain-context/component-hooks/index.js +1 -0
  699. package/dist/react-sdk/domain-context/component-hooks/use-component.js +1 -1
  700. package/dist/react-sdk/domain-context/entity-hooks/use-domain-entity-state.js +1 -1
  701. package/dist/react-sdk/domain-context/entity-hooks/use-entity-price.js +1 -1
  702. package/dist/react-sdk/domain-context/entity-hooks/use-root-entity-id.js +1 -1
  703. package/dist/react-sdk/domain-context/entity-hooks/use-root-entity-state.js +1 -1
  704. package/dist/react-sdk/domain-context/index.d.ts +7 -1
  705. package/dist/react-sdk/domain-context/index.js +1 -1
  706. package/dist/react-sdk/domain-context/system-hooks/composition-hooks.js +1 -1
  707. package/dist/react-sdk/domain-context/system-hooks/dimension-hooks.js +1 -1
  708. package/dist/react-sdk/domain-context/system-hooks/generate-share-link-hooks.d.ts +8 -0
  709. package/dist/react-sdk/domain-context/system-hooks/generate-share-link-hooks.js +1 -0
  710. package/dist/react-sdk/domain-context/system-hooks/hover-hooks.js +1 -1
  711. package/dist/react-sdk/domain-context/system-hooks/locale-switch-hooks.d.ts +24 -0
  712. package/dist/react-sdk/domain-context/system-hooks/locale-switch-hooks.js +1 -0
  713. package/dist/react-sdk/domain-context/system-hooks/navigation-hooks.d.ts +5 -0
  714. package/dist/react-sdk/domain-context/system-hooks/navigation-hooks.js +1 -1
  715. package/dist/react-sdk/domain-context/system-hooks/selection-hooks.js +1 -1
  716. package/dist/react-sdk/domain-context/system-hooks/share-links-hooks.d.ts +32 -0
  717. package/dist/react-sdk/domain-context/system-hooks/share-links-hooks.js +1 -0
  718. package/dist/react-sdk/domain-context/system-hooks/step-navigation-hooks.d.ts +57 -0
  719. package/dist/react-sdk/domain-context/system-hooks/step-navigation-hooks.js +1 -0
  720. package/dist/react-sdk/domain-context/system-hooks/tab-navigation-hooks.d.ts +61 -0
  721. package/dist/react-sdk/domain-context/system-hooks/tab-navigation-hooks.js +1 -0
  722. package/dist/react-sdk/domain-context/system-hooks/undo-redo-hooks.d.ts +20 -0
  723. package/dist/react-sdk/domain-context/system-hooks/undo-redo-hooks.js +1 -0
  724. package/dist/react-sdk/elements/configurator-error-page-props.d.ts +20 -0
  725. package/dist/react-sdk/elements/configurator-error-page-props.js +1 -0
  726. package/dist/react-sdk/elements/index.d.ts +1 -0
  727. package/dist/react-sdk/handlers/FinalizeActionRunner.d.ts +13 -0
  728. package/dist/react-sdk/handlers/FinalizeActionRunner.js +1 -0
  729. package/dist/react-sdk/handlers/FinalizeActionsHost.d.ts +10 -0
  730. package/dist/react-sdk/handlers/FinalizeActionsHost.js +1 -0
  731. package/dist/react-sdk/handlers/FinalizeActionsProvider.d.ts +11 -0
  732. package/dist/react-sdk/handlers/FinalizeActionsProvider.js +1 -0
  733. package/dist/react-sdk/handlers/finalize-actions-context.d.ts +6 -0
  734. package/dist/react-sdk/handlers/finalize-actions-context.js +1 -0
  735. package/dist/react-sdk/handlers/finalize-actions-store.d.ts +23 -0
  736. package/dist/react-sdk/handlers/finalize-actions-store.js +1 -0
  737. package/dist/react-sdk/handlers/index.d.ts +6 -0
  738. package/dist/react-sdk/handlers/index.js +1 -1
  739. package/dist/react-sdk/handlers/use-finalize-action.d.ts +32 -0
  740. package/dist/react-sdk/handlers/use-finalize-action.js +1 -0
  741. package/dist/react-sdk/handlers/use-finalize-actions.d.ts +53 -0
  742. package/dist/react-sdk/handlers/use-finalize-actions.js +1 -0
  743. package/dist/react-sdk/index.d.ts +2 -0
  744. package/dist/react-sdk/index.js +1 -1
  745. package/dist/react-sdk/loading-state/loading-state-manager.d.ts +5 -0
  746. package/dist/react-sdk/loading-state/loading-state-manager.js +1 -1
  747. package/dist/react-sdk/responsive-state/ResponsiveStateProvider.d.ts +25 -0
  748. package/dist/react-sdk/responsive-state/ResponsiveStateProvider.js +1 -0
  749. package/dist/react-sdk/responsive-state/canvas-padding.d.ts +14 -0
  750. package/dist/react-sdk/responsive-state/canvas-padding.js +1 -0
  751. package/dist/react-sdk/responsive-state/index.d.ts +5 -0
  752. package/dist/react-sdk/responsive-state/index.js +1 -0
  753. package/dist/react-sdk/responsive-state/responsive-state-manager.d.ts +111 -0
  754. package/dist/react-sdk/responsive-state/responsive-state-manager.js +1 -0
  755. package/dist/react-sdk/responsive-state/use-responsive-state-manager.d.ts +10 -0
  756. package/dist/react-sdk/responsive-state/use-responsive-state-manager.js +1 -0
  757. package/dist/react-sdk/responsive-state/use-responsive-state.d.ts +11 -0
  758. package/dist/react-sdk/responsive-state/use-responsive-state.js +1 -0
  759. package/dist/react-sdk/scene-control-elements/AddEntityFabElement.d.ts +36 -0
  760. package/dist/react-sdk/scene-control-elements/AddEntityFabElement.js +1 -0
  761. package/dist/react-sdk/scene-control-elements/DeleteEntityFabElement.d.ts +44 -0
  762. package/dist/react-sdk/scene-control-elements/DeleteEntityFabElement.js +1 -0
  763. package/dist/react-sdk/scene-control-elements/NavigationHotspotElement.d.ts +38 -0
  764. package/dist/react-sdk/scene-control-elements/NavigationHotspotElement.js +1 -0
  765. package/dist/react-sdk/scene-control-elements/SelectionHotspotElement.d.ts +30 -0
  766. package/dist/react-sdk/scene-control-elements/SelectionHotspotElement.js +1 -0
  767. package/dist/react-sdk/scene-control-elements/ToolMenuFabElement.d.ts +30 -0
  768. package/dist/react-sdk/scene-control-elements/ToolMenuFabElement.js +1 -0
  769. package/dist/react-sdk/scene-control-elements/create-add-entity-fab.d.ts +9 -0
  770. package/dist/react-sdk/scene-control-elements/create-add-entity-fab.js +1 -0
  771. package/dist/react-sdk/scene-control-elements/create-delete-entity-fab.d.ts +9 -0
  772. package/dist/react-sdk/scene-control-elements/create-delete-entity-fab.js +1 -0
  773. package/dist/react-sdk/scene-control-elements/create-navigation-hotspot.d.ts +10 -0
  774. package/dist/react-sdk/scene-control-elements/create-navigation-hotspot.js +1 -0
  775. package/dist/react-sdk/scene-control-elements/create-selection-hotspot.d.ts +9 -0
  776. package/dist/react-sdk/scene-control-elements/create-selection-hotspot.js +1 -0
  777. package/dist/react-sdk/scene-control-elements/create-tool-menu-fab.d.ts +9 -0
  778. package/dist/react-sdk/scene-control-elements/create-tool-menu-fab.js +1 -0
  779. package/dist/react-sdk/scene-control-elements/index.d.ts +11 -0
  780. package/dist/react-sdk/scene-control-elements/index.js +1 -0
  781. package/dist/react-sdk/scene-control-elements/scene-control-tooltip-visibility.d.ts +5 -0
  782. package/dist/react-sdk/scene-control-elements/scene-control-tooltip-visibility.js +1 -0
  783. package/dist/react-sdk/session/NotAuthenticatedPage.d.ts +4 -0
  784. package/dist/react-sdk/session/NotAuthenticatedPage.js +1 -1
  785. package/dist/react-sdk/web-component/create-web-component.js +1 -1
  786. package/dist/react-sdk/web-component/god-mode/god-mode-registry.d.ts +30 -0
  787. package/dist/react-sdk/web-component/god-mode/god-mode-registry.js +1 -0
  788. package/dist/react-sdk/web-component/god-mode/index.d.ts +1 -0
  789. package/dist/react-sdk/web-component/god-mode/index.js +1 -0
  790. package/dist/ui-sdk/icons/__generated/Lightbulb.d.ts +3 -0
  791. package/dist/ui-sdk/icons/__generated/Lightbulb.js +1 -0
  792. package/dist/ui-sdk/icons/__generated/XCircle.d.ts +3 -0
  793. package/dist/ui-sdk/icons/__generated/XCircle.js +1 -0
  794. package/dist/ui-sdk/icons/__generated/index.d.ts +4 -0
  795. package/dist/ui-sdk/icons/__generated/index.js +1 -1
  796. package/dist/ui-sdk/icons/icons-registry.js +1 -1
  797. package/dist/ui-sdk/responsive-application/ResponsiveApplicationProvider.d.ts +9 -0
  798. package/dist/ui-sdk/responsive-application/ResponsiveApplicationProvider.js +1 -1
  799. package/dist/ui-sdk/responsive-application/index.d.ts +1 -0
  800. package/dist/ui-sdk/responsive-application/responsive-state-store.d.ts +57 -0
  801. package/dist/ui-sdk/responsive-application/responsive-state-store.js +1 -0
  802. package/dist/ui-sdk/responsive-application/use-store-responsive-info.d.ts +7 -0
  803. package/dist/ui-sdk/responsive-application/use-store-responsive-info.js +1 -0
  804. package/dist/ui-sdk/theme/types.d.ts +1 -1
  805. package/package.json +48 -36
  806. package/schema/domain-spec.json +86 -8
  807. package/dist/application-spec/generate-application/code/templates/nvmrc.d.ts +0 -1
  808. package/dist/application-spec/generate-application/code/templates/nvmrc.js +0 -2
  809. package/dist/application-spec/generate-application/code/templates/package-json.d.ts +0 -10
  810. package/dist/application-spec/generate-application/code/templates/package-json.js +0 -1
  811. package/dist/application-spec/generate-application/code/templates/webhook-implementation.d.ts +0 -1
  812. package/dist/application-spec/generate-application/code/templates/webhook-implementation.js +0 -7
  813. package/dist/configurator/ui/assistant/entity-link/entity-link-target.d.ts +0 -5
  814. package/dist/configurator/ui/assistant/entity-link/entity-link-target.js +0 -1
  815. package/dist/configurator/ui/phoenix-layout-elements/language/use-locale-options.d.ts +0 -4
  816. package/dist/configurator/ui/phoenix-layout-elements/language/use-locale-options.js +0 -1
  817. package/dist/configurator/ui/phoenix-layout-elements/measurements/use-measurements-visibility.d.ts +0 -4
  818. package/dist/configurator/ui/phoenix-layout-elements/measurements/use-measurements-visibility.js +0 -1
  819. package/dist/phoenix/commands/generate-project-files.d.ts +0 -6
  820. package/dist/phoenix/commands/generate-project-files.js +0 -1
  821. package/dist/react-sdk/application-runtime/runtime/god-mode.d.ts +0 -19
  822. package/dist/react-sdk/application-runtime/runtime/god-mode.js +0 -1
  823. /package/dist/{configurator/common → react-sdk/application-runtime/common-services/analytics}/frontend-analytics.js +0 -0
@@ -1 +1 @@
1
- import{BehaviorSubject as e,Subject as t,debounceTime as i,delay as n,filter as s,firstValueFrom as r,map as o,merge as a,of as h,switchMap as l,tap as c}from"rxjs";import{applicationConfigComponent as d,canvasConfigComponent as u,canvasCustomEnvironmentComponent as g,canvasPresetEnvironmentComponent as _}from"#package/domain";export const resolveInteractiveViewport=(e,t)=>!Number.isFinite(t.width)||!Number.isFinite(t.height)||t.width<=0||t.height<=0||e?.width===t.width&&e.height===t.height?e:t;export class CanvasInitializationCancellationError extends Error{constructor(){super("Canvas generation ended while waiting for a flush!"),this.name="CanvasInitializationCancellationError"}}export class CanvasSystem{_context;_dimensionIndicatorShown;_meshChanged$=new e(!0);_firstLoadFinished=new e(!1);dimensionIndicatorShown$;meshChanged$=this._meshChanged$;firstLoadFinished$=this._firstLoadFinished;onCanvasClick$=new t;onCanvasPointerMove$=new t;_ready$=new e(null);ready$=this._ready$;_r3fHandle$=new e(null);r3fHandle$=this._r3fHandle$;_interactiveViewport$=new e(null);interactiveViewport$=this._interactiveViewport$;_flushed$=new t;_flushSequence=0;_lastReportedFlushSequence=0;_triggerForceFlush=null;_registration=null;_progress$=new e({type:"finished"});_generation=null;constructor(t){this._context=t,this._dimensionIndicatorShown=new e(!1),this.dimensionIndicatorShown$=this._dimensionIndicatorShown}getCanvasEnvironment=e=>{let t=this._context.domainContextSelectors.getComponentReader().readManyComponents({componentTypes:[g,_]},e);return t.length>1&&this._context.domainServicesSelectors.getLogger().warn("Multiple canvas environments found, using the first one!",{environments:t}),t.at(0)};getCanvasConfig=e=>{let t=this._context.domainContextSelectors.getComponentReader().readManyComponents({componentTypes:[u]},e);return t.length>1&&this._context.domainServicesSelectors.getLogger().warn("Multiple canvas configs found, using the first one!",{configs:t}),t.at(0)?.state};register=(e,t,i,n)=>{let s={scene:e,gl:t,r3fHandle:i};this._registration=s,this._ready$.next({scene:e,gl:t}),this._r3fHandle$.next(i),this._interactiveViewport$.next(null);let r=n.subscribe(e=>{this._progress$.next(e)}),o=e=>{if(this._registration!==s)return;let t=resolveInteractiveViewport(this._interactiveViewport$.value,e);t!==this._interactiveViewport$.value&&(this._interactiveViewport$.next(t),i.get().invalidate())},a=t.domElement,h=a.getBoundingClientRect();o({width:h.width,height:h.height});let l=new ResizeObserver(([e])=>{e&&o({width:e.contentRect.width,height:e.contentRect.height})});return l.observe(a),()=>{r.unsubscribe(),l.disconnect(),this._registration===s&&(this._registration=null,this._ready$.next(null),this._r3fHandle$.next(null),this._interactiveViewport$.next(null),this._progress$.next({type:"finished"}),this._firstLoadFinished.next(!1))}};reportFlush=e=>{this._lastReportedFlushSequence=Math.max(this._lastReportedFlushSequence,e.sequence),this._flushed$.next(e)};registerForceFlush=e=>(this._triggerForceFlush=e,()=>{this._triggerForceFlush===e&&(this._triggerForceFlush=null)});_forceFlush(){if(!this._triggerForceFlush)throw this._context.domainServicesSelectors.getLogger().debug("Force flush skipped: canvas not ready"),new CanvasInitializationCancellationError;let e={sequence:++this._flushSequence},t=r(a(this._flushed$.pipe(s(t=>t.sequence>=e.sequence),o(()=>void 0)),h(void 0).pipe(n(1e4),c(()=>{this._context.domainServicesSelectors.getLogger().error("Force flush timeout",{requestedSequence:e.sequence,lastReportedSequence:this._lastReportedFlushSequence,timeoutMs:1e4,detectorRegistered:null!==this._triggerForceFlush})}))));return this._triggerForceFlush(e),t}toggleDimensionIndicator=()=>{this._dimensionIndicatorShown.next(!this._dimensionIndicatorShown.value)};setDimensionIndicatorShown=e=>{this._dimensionIndicatorShown.value!==e&&this._dimensionIndicatorShown.next(e)};reportMeshChanged=()=>{this._meshChanged$.next(!0)};reportFirstLoadFinished=()=>{this._firstLoadFinished.next(!0)};_findEntity3d(e,t){let i=[];if(e.entityIds?.length===0)return i;if(t.traverse(t=>{let n=t.userData;"entityRoot"===n.type&&(void 0===e.entityIds||e.entityIds.includes(n.entityId))&&i.push(t)}),e.descendantEntities){let e=[...i];for(;e.length>0;){let t=e.shift();t&&t.children.forEach(t=>{"entityRoot"===t.userData.type&&(i.push(t),e.push(t))})}}let n=e.entityRoots?[...i]:[];if(e.entityObjects){let t=i=>{i.children.forEach(i=>{let s=i.userData;"entityObjectGroup"===s.type?t(i):"entityObject"!==s.type||(void 0===e.objectInstanceNames||e.objectInstanceNames.includes(s.objectInstanceName))&&(e.recursiveObjects?i.traverse(e=>{n.push(e)}):n.push(i))})};i.forEach(e=>t(e))}return n}findEntity3d=e=>this.ready$.value?.scene?this._findEntity3d(e,this.ready$.value.scene):[];findEntity3d$=e=>this.ready$.pipe(s(e=>null!=e),l(({scene:t})=>this.meshChanged$.pipe(i(0),o(()=>this._findEntity3d(e,t)))));initialize=()=>{let e=this._context.domainContextSelectors.getComponentReader().readFirstRootComponent({componentTypes:[d]},this._context.domainContextSelectors.getStoreSystem().stateSlices.committed.value.state);null!==this._generation&&(this._generation.active=!1);let t=e?.state.initialIndicatorShown??!1;this._generation={active:!0},this._dimensionIndicatorShown.next(t),this._meshChanged$.next(!0)};waitForFlush=async()=>{let e=this._generation,t=()=>{if(!e?.active)throw new CanvasInitializationCancellationError};for(t(),await this._forceFlush(),t(),await this._forceFlush(),t();"finished"!==this._progress$.value.type;)await r(this._progress$.pipe(s(e=>"finished"===e.type))),t(),await this._forceFlush(),t(),await this._forceFlush(),t()}}
1
+ import{BehaviorSubject as e,Subject as t,debounceTime as i,delay as n,filter as s,firstValueFrom as r,map as o,merge as a,of as h,switchMap as l,tap as c,throwError as d,timeout as u}from"rxjs";import{isNonNullish as g}from"@salsita-ai/common/utils";import{applicationConfigComponent as _,canvasConfigComponent as p,canvasCustomEnvironmentComponent as m,canvasPresetEnvironmentComponent as w}from"#package/domain";export const resolveInteractiveViewport=(e,t)=>!Number.isFinite(t.width)||!Number.isFinite(t.height)||t.width<=0||t.height<=0||e?.width===t.width&&e.height===t.height?e:t;export class CanvasInitializationCancellationError extends Error{constructor(){super("Canvas generation ended while waiting for a flush!"),this.name="CanvasInitializationCancellationError"}}let v=1e4;export class CanvasSystem{_context;_dimensionIndicatorShown;_meshChanged$=new e(!0);_firstLoadFinished=new e(!1);dimensionIndicatorShown$;meshChanged$=this._meshChanged$;firstLoadFinished$=this._firstLoadFinished;onCanvasClick$=new t;onCanvasPointerMove$=new t;_ready$=new e(null);ready$=this._ready$;_r3fHandle$=new e(null);r3fHandle$=this._r3fHandle$;_interactiveViewport$=new e(null);interactiveViewport$=this._interactiveViewport$;_flushed$=new t;_flushSequence=0;_lastReportedFlushSequence=0;_triggerForceFlush=null;_registration=null;_progress$=new e({type:"finished"});_generation=null;constructor(t){this._context=t,this._dimensionIndicatorShown=new e(!1),this.dimensionIndicatorShown$=this._dimensionIndicatorShown}getCanvasEnvironment=e=>{let t=this._context.domainContextSelectors.getComponentReader().readManyComponents({componentTypes:[m,w]},e);return t.length>1&&this._context.domainServicesSelectors.getLogger().warn("Multiple canvas environments found, using the first one!",{environments:t}),t.at(0)};getCanvasConfig=e=>{let t=this._context.domainContextSelectors.getComponentReader().readManyComponents({componentTypes:[p]},e);return t.length>1&&this._context.domainServicesSelectors.getLogger().warn("Multiple canvas configs found, using the first one!",{configs:t}),t.at(0)?.state};register=(e,t,i,n)=>{let s={scene:e,gl:t,r3fHandle:i};this._registration=s,this._ready$.next({scene:e,gl:t}),this._r3fHandle$.next(i),this._interactiveViewport$.next(null);let r=n.subscribe(e=>{this._progress$.next(e)}),o=e=>{if(this._registration!==s)return;let t=resolveInteractiveViewport(this._interactiveViewport$.value,e);t!==this._interactiveViewport$.value&&(this._interactiveViewport$.next(t),i.get().invalidate())},a=t.domElement,h=a.getBoundingClientRect();o({width:h.width,height:h.height});let l=new ResizeObserver(([e])=>{e&&o({width:e.contentRect.width,height:e.contentRect.height})});return l.observe(a),()=>{r.unsubscribe(),l.disconnect(),this._registration===s&&(this._registration=null,this._ready$.next(null),this._r3fHandle$.next(null),this._interactiveViewport$.next(null),this._progress$.next({type:"finished"}),this._firstLoadFinished.next(!1))}};waitForCanvas=(e=v)=>r(this._r3fHandle$.pipe(s(g),u({first:e,with:()=>d(()=>Error(`The 3D canvas did not mount within ${e} ms, so the canvas work that waited for it (an image capture or an export) cannot run. The canvas mounts when the configurator layout renders it; make sure the current layout shows the canvas, then retry once the scene is visible.`))})));reportFlush=e=>{this._lastReportedFlushSequence=Math.max(this._lastReportedFlushSequence,e.sequence),this._flushed$.next(e)};registerForceFlush=e=>(this._triggerForceFlush=e,()=>{this._triggerForceFlush===e&&(this._triggerForceFlush=null)});_forceFlush(){if(!this._triggerForceFlush)throw this._context.domainServicesSelectors.getLogger().debug("Force flush skipped: canvas not ready"),new CanvasInitializationCancellationError;let e={sequence:++this._flushSequence},t=r(a(this._flushed$.pipe(s(t=>t.sequence>=e.sequence),o(()=>void 0)),h(void 0).pipe(n(1e4),c(()=>{this._context.domainServicesSelectors.getLogger().error("Force flush timeout",{requestedSequence:e.sequence,lastReportedSequence:this._lastReportedFlushSequence,timeoutMs:1e4,detectorRegistered:null!==this._triggerForceFlush})}))));return this._triggerForceFlush(e),t}toggleDimensionIndicator=()=>{this._dimensionIndicatorShown.next(!this._dimensionIndicatorShown.value)};setDimensionIndicatorShown=e=>{this._dimensionIndicatorShown.value!==e&&this._dimensionIndicatorShown.next(e)};reportMeshChanged=()=>{this._meshChanged$.next(!0)};reportFirstLoadFinished=()=>{this._firstLoadFinished.next(!0)};_findEntity3d(e,t){let i=[];if(e.entityIds?.length===0)return i;if(t.traverse(t=>{let n=t.userData;"entityRoot"===n.type&&(void 0===e.entityIds||e.entityIds.includes(n.entityId))&&i.push(t)}),e.descendantEntities){let e=[...i];for(;e.length>0;){let t=e.shift();t&&t.children.forEach(t=>{"entityRoot"===t.userData.type&&(i.push(t),e.push(t))})}}let n=e.entityRoots?[...i]:[];if(e.entityObjects){let t=i=>{i.children.forEach(i=>{let s=i.userData;"entityObjectGroup"===s.type?t(i):"entityObject"!==s.type||(void 0===e.objectInstanceNames||e.objectInstanceNames.includes(s.objectInstanceName))&&(e.recursiveObjects?i.traverse(e=>{n.push(e)}):n.push(i))})};i.forEach(e=>t(e))}return n}findEntity3d=e=>this.ready$.value?.scene?this._findEntity3d(e,this.ready$.value.scene):[];findEntity3d$=e=>this.ready$.pipe(s(e=>null!=e),l(({scene:t})=>this.meshChanged$.pipe(i(0),o(()=>this._findEntity3d(e,t)))));initialize=()=>{let e=this._context.domainContextSelectors.getComponentReader().readFirstRootComponent({componentTypes:[_]},this._context.domainContextSelectors.getStoreSystem().stateSlices.committed.value.state);null!==this._generation&&(this._generation.active=!1);let t=e?.state.initialIndicatorShown??!1;this._generation={active:!0},this._dimensionIndicatorShown.next(t),this._meshChanged$.next(!0)};waitForFlush=async()=>{let e=this._generation,t=()=>{if(!e?.active)throw new CanvasInitializationCancellationError};for(t(),await this._forceFlush(),t(),await this._forceFlush(),t();"finished"!==this._progress$.value.type;)await r(this._progress$.pipe(s(e=>"finished"===e.type))),t(),await this._forceFlush(),t(),await this._forceFlush(),t()}}
@@ -1 +1 @@
1
- import{isNonNullish as t}from"@salsita-ai/common/utils";export class ExportSystem{_context;_generation=null;_frameloopPause=null;constructor(t){this._context=t}pauseFrameloop=t=>{if(this._frameloopPause?.handle===t)this._frameloopPause.holders+=1;else{let{frameloop:e,internal:o}=t.get();this._frameloopPause={handle:t,frameloop:e,priority:o.priority,holders:1},t.set(t=>({...t,frameloop:"never",internal:{...t.internal,priority:1/0}}))}let e=this._frameloopPause,o=!1;return()=>{o||(o=!0,e.holders-=1,e.holders>0||this._frameloopPause!==e||(this._frameloopPause=null,this._context.configuratorExtensionSelectors.getCanvasSystem().r3fHandle$.value===t&&t.set(t=>({...t,frameloop:e.frameloop,internal:{...t.internal,priority:e.priority}}))))}};createExportJob=(t,e,o)=>({sourceState:t,exportState:e.exportState,exportedEntityId:e.exportedEntityId,execute:o,toolState:e.toolState,viewState:e.viewState,navigationState:e.navigationState,selectedEntityId:e.selectedEntityId});runExportJobs=async e=>{let o=this._generation,i=()=>{if(!o?.active)throw Error("Export generation ended while jobs were running! The configurator context was reinitialized mid-export, so the remaining jobs would drive a state that is no longer theirs. Await the export before leaving the configuration, or discard the rejection.")};i();let a=this._context.configuratorExtensionSelectors.getCanvasSystem().r3fHandle$.value;if(!a)throw Error("Canvas is not ready");let n=this._context.domainContextSelectors.getStoreSystem().stateSlices.committed.value,r=this.pauseFrameloop(a);try{let o=[];for(let n of e){i();let e=this._context.domainContextSelectors.getStoreSystem().prepareStateEmission([this._context.domainContextSelectors.getNavigationSystem().getExportUpdate(n.exportState,n.exportedEntityId),null!=n.toolState?this._context.domainContextSelectors.getNavigationSystem().getToolUpdate(n.toolState):void 0,null!=n.viewState?this._context.domainContextSelectors.getNavigationSystem().getViewUpdate(n.viewState):void 0,null!=n.navigationState?this._context.domainContextSelectors.getNavigationSystem().getNavigationUpdate(n.navigationState):void 0,null!=n.selectedEntityId?this._context.domainContextSelectors.getNavigationSystem().getSelectUpdate(n.selectedEntityId):void 0,this._context.domainContextSelectors.getNavigationSystem().getHoverOutUpdate()].filter(t),n.sourceState,"staged");if(this._context.domainContextSelectors.getStoreSystem().emit(e),await this._context.configuratorExtensionSelectors.getCanvasSystem().waitForFlush(),i(),!e.validity.valid)throw this._context.domainServicesSelectors.getLogger().error(`Setting an export state to ${n.exportState} for entity ${n.exportedEntityId} resulted in an invalid state! Check if there isn't a transformer corrupting the state as a reaction to setting the export state.`,e),Error("Exported state is invalid!");let r=e.state,s=this._context.domainContextSelectors.getDomain().get$Entity(n.exportedEntityId,r),l=this._context.domainContextSelectors.getDomain().getRoot$Entity(r),c=await n.execute({$entity:s,$root:l,state:r,scene:a.get().scene});i(),o.push(c)}return o}finally{o?.active&&this._context.domainContextSelectors.getStoreSystem().emit(n),r()}};initialize=()=>{null!==this._generation&&(this._generation.active=!1),this._generation={active:!0}}}
1
+ import{isNonNullish as t}from"@salsita-ai/common/utils";export class ExportSystem{_context;_generation=null;_frameloopPause=null;constructor(t){this._context=t}pauseFrameloop=t=>{if(this._frameloopPause?.handle===t)this._frameloopPause.holders+=1;else{let{frameloop:e,internal:o}=t.get();this._frameloopPause={handle:t,frameloop:e,priority:o.priority,holders:1},t.set(t=>({...t,frameloop:"never",internal:{...t.internal,priority:1/0}}))}let e=this._frameloopPause,o=!1;return()=>{o||(o=!0,e.holders-=1,e.holders>0||this._frameloopPause!==e||(this._frameloopPause=null,this._context.configuratorExtensionSelectors.getCanvasSystem().r3fHandle$.value===t&&t.set(t=>({...t,frameloop:e.frameloop,internal:{...t.internal,priority:e.priority}}))))}};createExportJob=(t,e,o)=>({sourceState:t,exportState:e.exportState,exportedEntityId:e.exportedEntityId,execute:o,toolState:e.toolState,viewState:e.viewState,navigationState:e.navigationState,selectedEntityId:e.selectedEntityId});runExportJobs=async e=>{let o=this._generation,i=()=>{if(!o?.active)throw Error("Export generation ended while jobs were running! The configurator context was reinitialized mid-export, so the remaining jobs would drive a state that is no longer theirs. Await the export before leaving the configuration, or discard the rejection.")};i();let a=this._context.configuratorExtensionSelectors.getCanvasSystem(),n=a.r3fHandle$.value??await a.waitForCanvas().catch(t=>{throw i(),t});i();let r=this._context.domainContextSelectors.getStoreSystem().stateSlices.committed.value,s=this.pauseFrameloop(n);try{let o=[];for(let a of e){i();let e=this._context.domainContextSelectors.getStoreSystem().prepareStateEmission([this._context.domainContextSelectors.getNavigationSystem().getExportUpdate(a.exportState,a.exportedEntityId),null!=a.toolState?this._context.domainContextSelectors.getNavigationSystem().getToolUpdate(a.toolState):void 0,null!=a.viewState?this._context.domainContextSelectors.getNavigationSystem().getViewUpdate(a.viewState):void 0,null!=a.navigationState?this._context.domainContextSelectors.getNavigationSystem().getNavigationUpdate(a.navigationState):void 0,null!=a.selectedEntityId?this._context.domainContextSelectors.getNavigationSystem().getSelectUpdate(a.selectedEntityId):void 0,this._context.domainContextSelectors.getNavigationSystem().getHoverOutUpdate()].filter(t),a.sourceState,"staged");if(this._context.domainContextSelectors.getStoreSystem().emit(e),await this._context.configuratorExtensionSelectors.getCanvasSystem().waitForFlush(),i(),!e.validity.valid)throw this._context.domainServicesSelectors.getLogger().error(`Setting an export state to ${a.exportState} for entity ${a.exportedEntityId} resulted in an invalid state! Check if there isn't a transformer corrupting the state as a reaction to setting the export state.`,e),Error("Exported state is invalid!");let r=e.state,s=this._context.domainContextSelectors.getDomain().get$Entity(a.exportedEntityId,r),l=this._context.domainContextSelectors.getDomain().getRoot$Entity(r),c=await a.execute({$entity:s,$root:l,state:r,scene:n.get().scene});i(),o.push(c)}return o}finally{o?.active&&this._context.domainContextSelectors.getStoreSystem().emit(r),s()}};initialize=()=>{null!==this._generation&&(this._generation.active=!1),this._generation={active:!0}}}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * The agent's operation document with the closing braces it left off added at its end. Models
3
+ * often drop the last `}` of a nested selection, and the only error GraphQL gives for it is
4
+ * "Expected Name, found <EOF>", which costs the agent a round trip to fix. At the end of a
5
+ * document, closing braces are the only completion there is, so this cannot change what a valid
6
+ * document means; a brace missing in the middle nests the following fields one level deeper, which
7
+ * validation then rejects. Appending keeps the positions GraphQL reports for the agent's own text.
8
+ * A document with no unclosed brace, which covers every document that parses, or one that still
9
+ * does not parse with them closed is returned as it is, so GraphQL reports the agent's own syntax
10
+ * error and not one of the repair.
11
+ */
12
+ export declare const closeUnclosedBraces: (document: string) => string;
@@ -0,0 +1 @@
1
+ import{Lexer as r,Source as e,TokenKind as t,parse as n}from"graphql";export const closeUnclosedBraces=c=>{let a=(n=>{let c=new r(new e(n)),a=0;try{for(let r=c.advance();r.kind!==t.EOF;r=c.advance())r.kind===t.BRACE_L?a+=1:r.kind===t.BRACE_R&&(a-=1)}catch{return 0}return a})(c);if(a<=0)return c;let l=`${c}${" }".repeat(a)}`;return(r=>{try{return n(r),!0}catch{return!1}})(l)?l:c};
@@ -39,6 +39,12 @@ export interface GraphQLExecution {
39
39
  readonly message?: string;
40
40
  /** What the configurator did, or would do, beyond what the operations asked for, in applied order. */
41
41
  readonly sideEffects: readonly string[];
42
+ /**
43
+ * The state the operations prepared, when it was committed or held for the user's approval; a
44
+ * held state is the one committed if the user approves. A caller can recognize its own change in
45
+ * the undo history by it. It stays in the browser: nothing that leaves it may carry the state.
46
+ */
47
+ readonly preparedState?: AnyDomainState;
42
48
  }
43
49
  /**
44
50
  * Resolves a localizable value, or each item of a list of them, to a string in the current locale.
@@ -91,7 +97,7 @@ export declare class GraphQLSystem {
91
97
  /**
92
98
  * Runs the operations in order through one working state that starts at `originalState`: a query
93
99
  * reads the current working state, and each mutation field advances it with its own emission.
94
- * The lenses an operation spreads are injected into its document first. Nothing is committed. The first operation that fails stops the list; every later one gets a
100
+ * The closing braces an operation's document left off are added, then the lenses it spreads are injected into it. Nothing is committed. The first operation that fails stops the list; every later one gets a
95
101
  * "not run" error instead.
96
102
  */
97
103
  prepare: (originalState: AnyDomainState, operations: readonly GraphQLOperation[]) => Promise<readonly PreparedOperation[]>;
@@ -1 +1 @@
1
- import{GraphQLError as e,NoSchemaIntrospectionCustomRule as t,defaultFieldResolver as i,execute as o,getNamedType as n,parse as r,specifiedRules as a,validate as s,validateSchema as l}from"graphql";import{assertExistence as c,createSelector as d,isMessageDescriptor as h,isMultilingualString as u}from"@salsita-ai/common/utils";import{DomainEntityIdSchema as m,createAssistantExecutionSchema as f,findAssistantMutation as p}from"#package/domain";import{createEntityMeta as g}from"./entity-meta.js";import{injectAssistantLenses as y}from"./inject-assistant-lenses.js";import{readSideEffects as v}from"./side-effects.js";let S={errors:[new e("The configurator does not provide this request. This is a fault in the configurator, not in your request. Tell the user this is not available.")]},_={errors:[new e("The configuration is not loaded yet, so there is no state to query. Run the query again once the configurator has finished loading.")]},x=new RegExp(m.pattern),w=[...a,t],E=e=>"object"==typeof e&&null!==e&&"type"in e&&"string"==typeof e.type&&"id"in e&&"string"==typeof e.id,$=(e,t)=>"object"==typeof e&&null!==e?Reflect.get(e,t):void 0,b=e=>e instanceof Error?e.message:String(e),T=e=>/[.!?]$/.test(e)?e:`${e}.`,C=e=>"object"==typeof e&&null!==e&&Object.getPrototypeOf(e)===Object.prototype,R=(e,t)=>{let i=C(e)?e._raw:void 0;if(E(i))return i;if(!Array.isArray(e)&&!C(e))return e;if(t.has(e))throw Error("The value contains itself.");let o=new Set([...t,e]);return Array.isArray(e)?e.map(e=>R(e,o)):Object.fromEntries(Object.entries(e).map(([e,t])=>[e,R(t,o)]))};export const localize=(e,t)=>Array.isArray(e)?e.map(e=>localize(e,t)):"string"==typeof e||h(e)||u(e)?t(e):e;let j=t=>new e(`The configurator cannot handle this request: ${T(t)} This is a fault in the configurator, not in your request. Tell the user this is not available.`),A=e=>(e.errors?.length??0)>0,M=t=>({errors:[new e(`Not run: operation ${t+1} failed, so the operations after it were skipped and no change of the list takes effect. Fix the failing operation and send the whole list again.`)]});export class GraphQLSystem{_context;_selectSchema=d([d.leaf(e=>e)],e=>{try{let t=f(e),i=l(t);return i.length>0?j(i.map(e=>e.message).join(" ")):t}catch(e){return j(b(e))}});_selectLenses=d([d.leaf(e=>e)],e=>r(e));_selectFieldResolver=d([d.leaf(e=>e)],t=>(o,r,a,s)=>{if(s.parentType===s.schema.getQueryType())return i(o,r,a,s);if(s.parentType===s.schema.getMutationType())return this._resolveMutation(s.fieldName,String(s.path.key),r,a);if(!E(o))return i(o,r,a,s);if("meta"===s.fieldName){let e;return g({entity:o,state:("object"==typeof(e=$(o,"_state"))&&null!==e&&"entities"in e&&"rootEntityId"in e?e:void 0)??a.state},{manifest:a.manifest,recipes:this._recipeContext(),prepareStateEmission:(e,t,i)=>this._context.domainContextSelectors.getStoreSystem().prepareStateEmission(e,t,i),find$Entity:(e,t)=>this._find$Entity(e,t),validateEntity:e=>this._context.domainContextSelectors.getDomain().validateEntity(e)})}let{source:l,localized:c}=t[s.parentType.name]?.[s.fieldName]??{source:s.fieldName},d=((t,i)=>{try{return $(t,i)}catch(o){throw new e(`Expression "${i}" failed on ${E(t)?t.id:"an entity"}: ${T(b(o))} This is a fault in the configurator, not in your request. Tell the user this is not available.`,{originalError:o instanceof Error?o:void 0})}})(o,l);return c?localize(d,this._context.domainServicesSelectors.getResolveLocalizable()):l.startsWith("$")&&"JSON"===n(s.returnType).name?((t,i,o)=>{try{return R(o,new Set)}catch(o){throw new e(`Expression "${i}" returned a value that is not plain serializable data on ${E(t)?t.id:"an entity"}: ${T(b(o))} This is a fault in the configurator, not in your request. Tell the user this is not available.`,{originalError:o instanceof Error?o:void 0})}})(o,l,d):d});constructor(e){this._context=e}_get$Entity=(e,t)=>this._context.domainContextSelectors.getDomain().get$Entity(e,t);_find$Entity=(e,t)=>this._context.domainContextSelectors.getDomain().getEntity(e,t)?this._get$Entity(e,t):null;_recipeContext=()=>({componentReader:this._context.domainContextSelectors.getComponentReader(),recipeCooker:this._context.domainContextSelectors.getRecipeCookerSystem(),resolveLocalizable:this._context.domainServicesSelectors.getResolveLocalizable()});_rootValue={root:(e,{state:t})=>this._get$Entity(t.rootEntityId,t),entities:({ids:t},{state:i})=>{if(null==t)return i.entities.map(e=>this._get$Entity(e.id,i));var o=i.rootEntityId;let n=t.filter(e=>!x.test(e));if(n.length>0)throw new e(`${n.map(e=>`"${e}"`).join(", ")} ${1===n.length?"is not an entity id":"are not entity ids"}. Entity ids have the form "<Type>-<number>", e.g. "${o}". Use ids as returned by the "id" field.`);return t.map(e=>x.test(e)?this._find$Entity(e,i):null)},selectedEntity:(e,{state:t})=>this._find$Entity(this._context.domainContextSelectors.getNavigationSystem().getActiveSelectionState(t),t),navigation:(e,{state:t})=>{let i=this._context.domainContextSelectors.getNavigationSystem();return{navigationState:i.getActiveNavigationState(t),viewState:i.getActiveViewState(t),toolState:i.getActiveToolState(t)}}};_resolveType=e=>E(e)?e.type:void 0;initialize=()=>{};_resolveMutation=(t,i,o,n)=>{if(void 0!==n.failedMutationField)throw new e(`Not run: the earlier field "${n.failedMutationField}" of this operation failed, so "${i}" was skipped and no change of the operation takes effect. Fix the failing field and send the operation again.`);try{return this._runMutation(t,o,n)}catch(e){throw n.failedMutationField=i,e}};_runMutation=(t,i,o)=>{let n=p(t,o.manifest);if(!n)throw new e(`The schema declares the mutation "${t}", but the configurator has no implementation for it. This is a fault in the configurator, not in your request. Tell the user this is not available.`);let r=o.state,a=n.implementation(i,r,{manifest:o.manifest,action:this._context.domainContextSelectors.getActionSystem().createContext(r),resolveLocalizable:this._context.domainServicesSelectors.getResolveLocalizable()});if(a.updates.length>0){let i=this._context.domainContextSelectors.getStoreSystem().prepareStateEmission(a.updates,r,"committed");if(!i.validity.valid)throw new e(`The changes of "${t}" were not applied, because the resulting configuration is invalid: ${(e=>{if("uncaught"===e.severity)return`validating it threw: ${T(b(e.error))}`;let t=[...new Set(e.entityViolations.filter(({violation:t})=>t.severity===e.severity).map(({entityId:e})=>e))];return`it has ${e.severity} violations on ${t.join(", ")}.`})(i.validity)} Change the request so the configuration stays valid.`);o.emissions.push(i),o.state=i.state}return a.readResult({previousState:r,state:o.state})};_setup=()=>{let{manifest:t,error:i}=this._context.getAssistantSetup();if(i)return{ready:!1,result:{errors:[new e(i.message,{originalError:i})]}};if(!t)return{ready:!1,result:S};let o=this._selectSchema(t.sdl);return o instanceof e?{ready:!1,result:{errors:[o]}}:{ready:!0,assistant:t,schema:o,lenses:t.lenses?.definitions?this._selectLenses(t.lenses.definitions):void 0,fieldResolver:this._selectFieldResolver(t.fields)}};_run=(t,i,n,a)=>{let l;try{l=r(t)}catch(t){return{errors:[t instanceof e?t:new e(b(t))]}}let c=s(n.schema,l,w);return c.length>0?{errors:c}:o({schema:n.schema,document:l,rootValue:this._rootValue,contextValue:a,variableValues:i.variables,operationName:i.operationName,fieldResolver:n.fieldResolver,typeResolver:this._resolveType})};prepare=async(t,i)=>{let o,n=this._setup();if(!n.ready)return i.map(()=>({result:n.result,emissions:[]}));let r={manifest:n.assistant,state:t,emissions:[],failedMutationField:void 0},a=[];for(let[t,s]of i.entries())if(void 0===o){let i=r.emissions.length;r.failedMutationField=void 0;let l=n.lenses?y(s.document,n.lenses):s.document,c=l instanceof e?{errors:[l]}:await this._run(l,s,n,r);a.push({result:c,emissions:r.emissions.slice(i)}),A(c)&&(o=t)}else a.push({result:M(o),emissions:[]});return a};readSideEffects=e=>{let t=this._context.domainServicesSelectors.getResolveLocalizable();return e.flatMap(({emissions:e})=>e.flatMap(e=>v(e.updates,t)))};_prepareAndCommit=async e=>{let t,i,o,n=this._context.domainContextSelectors.getStoreSystem(),r=await this.prepare(n.stateSlices.committed.value.state,e),a=r.map(({result:e})=>e),s=this.readSideEffects(r),l=r.flatMap(e=>e.emissions);return a.some(A)||0===l.length?{results:a,sideEffects:s,outcome:"none"}:{results:a,sideEffects:s,outcome:n.commitPrepared((t=c(l[0]),i=c(l[l.length-1]),o=l.some(e=>void 0!==e.transformationLog),{kind:"committed",previousState:t.previousState,state:i.state,updates:l.flatMap(e=>e.updates),validity:i.validity,transformationLog:o?l.flatMap(e=>e.transformationLog??[]):void 0}))}};execute=async e=>{if(!this._context.domainContextSelectors.getStoreSystem().isInitialized)return{results:e.map(()=>_),committed:!1,sideEffects:[]};let t=await this._prepareAndCommit(e),{results:i,sideEffects:o,outcome:n}="conflict"===t.outcome?await this._prepareAndCommit(e):t;return"committed"===n?{results:i,committed:!0,sideEffects:o}:"held"===n?{results:i,committed:!1,message:"The changes wait for the user's approval and are not applied yet. Do not send them again; the next `[changes]` block lists them once approved.",sideEffects:o}:"conflict"===n?{results:i,committed:!1,message:"The changes were not committed, because the configuration changed while they were being applied. The results describe a state that was discarded. Query the current configuration and send the operations again if they still make sense.",sideEffects:o}:{results:i,committed:!1,sideEffects:o}}}
1
+ import{GraphQLError as e,NoSchemaIntrospectionCustomRule as t,defaultFieldResolver as i,execute as o,getNamedType as n,parse as r,specifiedRules as a,validate as s,validateSchema as l}from"graphql";import{assertExistence as c,createSelector as d,isMessageDescriptor as h,isMultilingualString as u}from"@salsita-ai/common/utils";import{DomainEntityIdSchema as m,createAssistantExecutionSchema as f,findAssistantMutation as p}from"#package/domain";import{closeUnclosedBraces as g}from"./close-unclosed-braces.js";import{createEntityMeta as y}from"./entity-meta.js";import{injectAssistantLenses as v}from"./inject-assistant-lenses.js";import{readSideEffects as S}from"./side-effects.js";let _={errors:[new e("The configurator does not provide this request. This is a fault in the configurator, not in your request. Tell the user this is not available.")]},x={errors:[new e("The configuration is not loaded yet, so there is no state to query. Run the query again once the configurator has finished loading.")]},w=new RegExp(m.pattern),E=[...a,t],$=e=>"object"==typeof e&&null!==e&&"type"in e&&"string"==typeof e.type&&"id"in e&&"string"==typeof e.id,b=(e,t)=>"object"==typeof e&&null!==e?Reflect.get(e,t):void 0,T=e=>e instanceof Error?e.message:String(e),C=e=>/[.!?]$/.test(e)?e:`${e}.`,R=e=>"object"==typeof e&&null!==e&&Object.getPrototypeOf(e)===Object.prototype,j=(e,t)=>{let i=R(e)?e._raw:void 0;if($(i))return i;if(!Array.isArray(e)&&!R(e))return e;if(t.has(e))throw Error("The value contains itself.");let o=new Set([...t,e]);return Array.isArray(e)?e.map(e=>j(e,o)):Object.fromEntries(Object.entries(e).map(([e,t])=>[e,j(t,o)]))};export const localize=(e,t)=>Array.isArray(e)?e.map(e=>localize(e,t)):"string"==typeof e||h(e)||u(e)?t(e):e;let A=t=>new e(`The configurator cannot handle this request: ${C(t)} This is a fault in the configurator, not in your request. Tell the user this is not available.`),M=e=>(e.errors?.length??0)>0,z=t=>({errors:[new e(`Not run: operation ${t+1} failed, so the operations after it were skipped and no change of the list takes effect. Fix the failing operation and send the whole list again.`)]});export class GraphQLSystem{_context;_selectSchema=d([d.leaf(e=>e)],e=>{try{let t=f(e),i=l(t);return i.length>0?A(i.map(e=>e.message).join(" ")):t}catch(e){return A(T(e))}});_selectLenses=d([d.leaf(e=>e)],e=>r(e));_selectFieldResolver=d([d.leaf(e=>e)],t=>(o,r,a,s)=>{if(s.parentType===s.schema.getQueryType())return i(o,r,a,s);if(s.parentType===s.schema.getMutationType())return this._resolveMutation(s.fieldName,String(s.path.key),r,a);if(!$(o))return i(o,r,a,s);if("meta"===s.fieldName){let e;return y({entity:o,state:("object"==typeof(e=b(o,"_state"))&&null!==e&&"entities"in e&&"rootEntityId"in e?e:void 0)??a.state},{manifest:a.manifest,recipes:this._recipeContext(),prepareStateEmission:(e,t,i)=>this._context.domainContextSelectors.getStoreSystem().prepareStateEmission(e,t,i),find$Entity:(e,t)=>this._find$Entity(e,t),validateEntity:e=>this._context.domainContextSelectors.getDomain().validateEntity(e)})}let{source:l,localized:c}=t[s.parentType.name]?.[s.fieldName]??{source:s.fieldName},d=((t,i)=>{try{return b(t,i)}catch(o){throw new e(`Expression "${i}" failed on ${$(t)?t.id:"an entity"}: ${C(T(o))} This is a fault in the configurator, not in your request. Tell the user this is not available.`,{originalError:o instanceof Error?o:void 0})}})(o,l);return c?localize(d,this._context.domainServicesSelectors.getResolveLocalizable()):l.startsWith("$")&&"JSON"===n(s.returnType).name?((t,i,o)=>{try{return j(o,new Set)}catch(o){throw new e(`Expression "${i}" returned a value that is not plain serializable data on ${$(t)?t.id:"an entity"}: ${C(T(o))} This is a fault in the configurator, not in your request. Tell the user this is not available.`,{originalError:o instanceof Error?o:void 0})}})(o,l,d):d});constructor(e){this._context=e}_get$Entity=(e,t)=>this._context.domainContextSelectors.getDomain().get$Entity(e,t);_find$Entity=(e,t)=>this._context.domainContextSelectors.getDomain().getEntity(e,t)?this._get$Entity(e,t):null;_recipeContext=()=>({componentReader:this._context.domainContextSelectors.getComponentReader(),recipeCooker:this._context.domainContextSelectors.getRecipeCookerSystem(),resolveLocalizable:this._context.domainServicesSelectors.getResolveLocalizable()});_rootValue={root:(e,{state:t})=>this._get$Entity(t.rootEntityId,t),entities:({ids:t},{state:i})=>{if(null==t)return i.entities.map(e=>this._get$Entity(e.id,i));var o=i.rootEntityId;let n=t.filter(e=>!w.test(e));if(n.length>0)throw new e(`${n.map(e=>`"${e}"`).join(", ")} ${1===n.length?"is not an entity id":"are not entity ids"}. Entity ids have the form "<Type>-<number>", e.g. "${o}". Use ids as returned by the "id" field.`);return t.map(e=>w.test(e)?this._find$Entity(e,i):null)},selectedEntity:(e,{state:t})=>this._find$Entity(this._context.domainContextSelectors.getNavigationSystem().getActiveSelectionState(t),t),navigation:(e,{state:t})=>{let i=this._context.domainContextSelectors.getNavigationSystem();return{navigationState:i.getActiveNavigationState(t),viewState:i.getActiveViewState(t),toolState:i.getActiveToolState(t)}}};_resolveType=e=>$(e)?e.type:void 0;initialize=()=>{};_resolveMutation=(t,i,o,n)=>{if(void 0!==n.failedMutationField)throw new e(`Not run: the earlier field "${n.failedMutationField}" of this operation failed, so "${i}" was skipped and no change of the operation takes effect. Fix the failing field and send the operation again.`);try{return this._runMutation(t,o,n)}catch(e){throw n.failedMutationField=i,e}};_runMutation=(t,i,o)=>{let n=p(t,o.manifest);if(!n)throw new e(`The schema declares the mutation "${t}", but the configurator has no implementation for it. This is a fault in the configurator, not in your request. Tell the user this is not available.`);let r=o.state,a=n.implementation(i,r,{manifest:o.manifest,action:this._context.domainContextSelectors.getActionSystem().createContext(r),resolveLocalizable:this._context.domainServicesSelectors.getResolveLocalizable()});if(a.updates.length>0){let i=this._context.domainContextSelectors.getStoreSystem().prepareStateEmission(a.updates,r,"committed");if(!i.validity.valid)throw new e(`The changes of "${t}" were not applied, because the resulting configuration is invalid: ${(e=>{if("uncaught"===e.severity)return`validating it threw: ${C(T(e.error))}`;let t=[...new Set(e.entityViolations.filter(({violation:t})=>t.severity===e.severity).map(({entityId:e})=>e))];return`it has ${e.severity} violations on ${t.join(", ")}.`})(i.validity)} Change the request so the configuration stays valid.`);o.emissions.push(i),o.state=i.state}return a.readResult({previousState:r,state:o.state})};_setup=()=>{let{manifest:t,error:i}=this._context.getAssistantSetup();if(i)return{ready:!1,result:{errors:[new e(i.message,{originalError:i})]}};if(!t)return{ready:!1,result:_};let o=this._selectSchema(t.sdl);return o instanceof e?{ready:!1,result:{errors:[o]}}:{ready:!0,assistant:t,schema:o,lenses:t.lenses?.definitions?this._selectLenses(t.lenses.definitions):void 0,fieldResolver:this._selectFieldResolver(t.fields)}};_run=(t,i,n,a)=>{let l;try{l=r(t)}catch(t){return{errors:[t instanceof e?t:new e(T(t))]}}let c=s(n.schema,l,E);return c.length>0?{errors:c}:o({schema:n.schema,document:l,rootValue:this._rootValue,contextValue:a,variableValues:i.variables,operationName:i.operationName,fieldResolver:n.fieldResolver,typeResolver:this._resolveType})};prepare=async(t,i)=>{let o,n=this._setup();if(!n.ready)return i.map(()=>({result:n.result,emissions:[]}));let r={manifest:n.assistant,state:t,emissions:[],failedMutationField:void 0},a=[];for(let[t,s]of i.entries())if(void 0===o){let i=r.emissions.length;r.failedMutationField=void 0;let l=g(s.document),c=n.lenses?v(l,n.lenses):l,d=c instanceof e?{errors:[c]}:await this._run(c,s,n,r);a.push({result:d,emissions:r.emissions.slice(i)}),M(d)&&(o=t)}else a.push({result:z(o),emissions:[]});return a};readSideEffects=e=>{let t=this._context.domainServicesSelectors.getResolveLocalizable();return e.flatMap(({emissions:e})=>e.flatMap(e=>S(e.updates,t)))};_prepareAndCommit=async e=>{let t,i,o,n=this._context.domainContextSelectors.getStoreSystem(),r=await this.prepare(n.stateSlices.committed.value.state,e),a=r.map(({result:e})=>e),s=this.readSideEffects(r),l=r.flatMap(e=>e.emissions);if(a.some(M)||0===l.length)return{results:a,sideEffects:s,outcome:"none"};let d=(t=c(l[0]),i=c(l[l.length-1]),o=l.some(e=>void 0!==e.transformationLog),{kind:"committed",previousState:t.previousState,state:i.state,updates:l.flatMap(e=>e.updates),validity:i.validity,transformationLog:o?l.flatMap(e=>e.transformationLog??[]):void 0});return{results:a,sideEffects:s,outcome:n.commitPrepared(d),preparedState:d.state}};execute=async e=>{if(!this._context.domainContextSelectors.getStoreSystem().isInitialized)return{results:e.map(()=>x),committed:!1,sideEffects:[]};let t=await this._prepareAndCommit(e),{results:i,sideEffects:o,outcome:n,preparedState:r}="conflict"===t.outcome?await this._prepareAndCommit(e):t;return"committed"===n?{results:i,committed:!0,sideEffects:o,preparedState:r}:"held"===n?{results:i,committed:!1,message:"The changes wait for the user's approval and are not applied yet. Do not send them again; the next `[changes]` block lists them once approved.",sideEffects:o,preparedState:r}:"conflict"===n?{results:i,committed:!1,message:"The changes were not committed, because the configuration changed while they were being applied. The results describe a state that was discarded. Query the current configuration and send the operations again if they still make sense.",sideEffects:o}:{results:i,committed:!1,sideEffects:o}}}
@@ -1 +1 @@
1
- import{Color as e,HalfFloatType as t,NoToneMapping as r,OrthographicCamera as a,PerspectiveCamera as n,WebGLRenderTarget as o}from"three";import{preloadFont as i}from"troika-three-text";import{match as s}from"ts-pattern";import{clientSideImageComponent as l,dimensionIndicatorComponent as c,domainEntityTypeFromId as m,editableDistanceDimensionIndicatorComponent as g,isDomainEntityId as d,isVirtualEntityId as h,sketchingEditComponent as u}from"#package/domain";import{createCameraControls as f}from"../camera-control-system/create-camera-controls.js";import{createCanvasFreezeFrame as p}from"./canvas-freeze-frame.js";import{ExportCapturePass as w,readTargetToBlob as C,resolveExportBackground as _}from"./export-image-capture.js";export class ImageRenderingSystem{_context;_renderer=null;_effectComposer=null;_generation=null;_debugObjectUrls=new Set;_canvasFreeze=null;constructor(e){this._context=e}_captureGenerationAssertion=()=>{let e=this._generation,t=()=>{if(!e?.active)throw Error("Image rendering generation ended while images were being rendered! The configurator context was reinitialized before the renderer finished, so the results belong to a configuration that is no longer active. Await the render before leaving the configuration, or discard the rejection.")};return t(),t};_captureGenerationGuard=()=>{let e=this._captureGenerationAssertion();return{assertActive:e,waitFor:async t=>{let r=await t;return e(),r},runEffect:t=>(e(),t())}};register(e){return this._renderer=e,()=>{this._renderer===e&&(this._renderer=null)}}registerEffectComposer(e){return this._effectComposer=e,()=>{this._effectComposer===e&&(this._effectComposer=null)}}_openDebugImage=e=>{let t=URL.createObjectURL(e);this._debugObjectUrls.add(t),window.open(t,"_blank")};_getRenderer=async()=>{let e=this._generation,t=Date.now(),r=()=>{if(!e?.active)throw Error("Image rendering generation ended while waiting for the renderer! The configurator context was reinitialized before the renderer arrived, so the render would target a scene that is gone. Await the render before leaving the configuration, or discard the rejection.")};r();let a=this._renderer;for(;null===a;){if(await new Promise(e=>setTimeout(e,50)),r(),Date.now()-t>1e4)throw Error("Renderer could not be retrieved! Reached timeout.");a=this._renderer}return a};generateImageUsingOriginalCanvas=async(e,t,r=!1)=>{let a=this._captureGenerationGuard(),n=await a.waitFor(this._getRenderer());if(r){let{blob:e}=await a.waitFor(a.runEffect(()=>n.renderUsingOriginalCanvas(t)));a.runEffect(()=>this._openDebugImage(e));return}let o=await Promise.all([t].map(async e=>{let{blob:t}=await a.waitFor(a.runEffect(()=>n.renderUsingOriginalCanvas(e)));return{blob:t,name:e.name}})),i=await a.waitFor(a.runEffect(()=>this._context.getAuthorizedClient().generateUploadLinks(this._context.getConfigurationId(),e,[t.name])));await Promise.all(i.map(async e=>{let t=o.find(t=>t.name===e.name);if(null==t)throw Error("Blob not found!");await Promise.all(i.map(async e=>{await a.waitFor(a.runEffect(()=>fetch(e.url,{method:"PUT",body:t.blob,headers:{"Content-Type":"image/png","Content-Length":t.blob.size.toString()}})))}))}))};async generateImagesUsingOriginalCanvas(e,t,r=!1){let a=this._captureGenerationGuard(),n=await a.waitFor(this._getRenderer()),o=Array.isArray(t)?t:[t],i=await o.reduce(async(e,t)=>[...await e,await a.waitFor(a.runEffect(()=>n.renderUsingOriginalCanvas(t)))],Promise.resolve([]));if(r){for(let e of i)a.runEffect(()=>this._openDebugImage(e.blob)),await a.waitFor(new Promise(e=>setTimeout(e,100)));return}let s=o.map(e=>e.name),l=await a.waitFor(a.runEffect(()=>this._context.getAuthorizedClient().generateUploadLinks(this._context.getConfigurationId(),e,s)));await Promise.all(l.map(async e=>{let t=i.find(t=>t.name===e.name);if(null==t)throw Error("Blob not found!");await Promise.all(l.map(async e=>{await a.waitFor(a.runEffect(()=>fetch(e.url,{method:"PUT",body:t.blob,headers:{"Content-Type":"image/png","Content-Length":t.blob.size.toString()}})))}))}))}async generateImages(e,t,r=!1){let a=this._captureGenerationGuard(),n=await a.waitFor(this._getRenderer()),o=t.map(e=>e.name);if(r)return void await Promise.all(t.map(async e=>{let t=await a.waitFor(a.runEffect(()=>n.renderImage(e)));a.runEffect(()=>this._openDebugImage(t))}));let i=await Promise.all(t.map(async e=>({blob:await a.waitFor(a.runEffect(()=>n.renderImage(e))),name:e.name}))),s=await a.waitFor(a.runEffect(()=>this._context.getAuthorizedClient().generateUploadLinks(this._context.getConfigurationId(),e,o)));await Promise.all(s.map(async e=>{let t=i.find(t=>t.name===e.name);if(null==t)throw Error("Blob not found!");await Promise.all(s.map(async e=>{await a.waitFor(a.runEffect(()=>fetch(e.url,{method:"PUT",body:t.blob,headers:{"Content-Type":"image/png","Content-Length":t.blob.size.toString()}})))}))}))}async getGeneratedImages(e,t=!1){let r=this._captureGenerationAssertion(),a=await this._getRenderer();return(r(),t)?(await Promise.all(e.map(async e=>{let t=await a.renderImage(e);r(),this._openDebugImage(t)})),[]):Promise.all(e.map(async e=>{let t=await a.renderImage(e);return r(),{blob:t,name:e.name}}))}_renderCurrentView=e=>{let{gl:t,scene:r,camera:a}=e.get();null!==this._effectComposer?this._effectComposer.render():t.render(r,a)};_freezeCanvas=e=>{this._canvasFreeze?.handle===e?this._canvasFreeze.holders+=1:(this._canvasFreeze?.remove(),this._canvasFreeze={handle:e,remove:p(e.get().gl.domElement,()=>this._renderCurrentView(e)),resumeFrameloop:this._context.configuratorExtensionSelectors.getExportSystem().pauseFrameloop(e),holders:1});let t=this._canvasFreeze,r=!1;return async()=>{if(!r&&(r=!0,t.holders-=1,!(t.holders>0)))try{let r=this._context.configuratorExtensionSelectors.getCanvasSystem();r.r3fHandle$.value===e&&await r.waitForFlush(),r.r3fHandle$.value===e&&0===t.holders&&this._renderCurrentView(e)}catch{}finally{0===t.holders&&(t.remove(),t.resumeFrameloop(),this._canvasFreeze===t&&(this._canvasFreeze=null))}}};async renderImage(a){let n=this._context.configuratorExtensionSelectors.getCanvasSystem().r3fHandle$.value;if(null===n)throw Error("R3F state not ready");let{gl:i,scene:s,camera:l,size:c,advance:m}=n.get(),g=i.getRenderTarget(),d=i.getClearColor(new e),h=i.getClearAlpha(),u=i.autoClearColor,f=e=>new w(a.width,a.height,e,i.outputColorSpace),p={composer:null,pass:null},y=null,b=null,x=e=>{let t=p.pass??f(r);return p.pass=t,p.composer===e&&e.passes.at(-1)===t||(p.composer?.removePass(t),e.addPass(t),p.composer=e),t},v=async()=>{if(await this._context.configuratorExtensionSelectors.getCanvasSystem().waitForFlush(),this._context.configuratorExtensionSelectors.getCanvasSystem().r3fHandle$.value!==n)throw Error("Canvas was remounted while an image was being rendered! The export borrowed a canvas that is gone, so it cannot capture the image. Retry the export once the configurator has settled.")},E=this._freezeCanvas(n);try{n.set({size:{height:a.height,width:a.width,top:0,left:0,updateStyle:!1}}),n.set({camera:a.camera}),await v(),null!==this._effectComposer&&x(this._effectComposer),m(void 0),await v();let r="JPEG"===a.fileFormat?"image/jpeg":"image/png",l=_({sceneBackground:s.background,backgroundColor:a.backgroundColor,fileFormat:a.fileFormat,outputColorSpace:i.outputColorSpace});if(null!==this._effectComposer){i.setRenderTarget(null),"JPEG"===a.fileFormat?i.setClearColor(a.backgroundColor??0xffffff):a.backgroundColor?i.setClearColor(a.backgroundColor):i.setClearAlpha(0),i.autoClearColor=!0;let e=x(this._effectComposer);return this._effectComposer.render(),await C(i,e.renderTarget,l,r)}y=f(i.toneMapping),b=new o(a.width,a.height,{samples:4,type:t,stencilBuffer:i.getContextAttributes().stencil??!1});let c=s.background;c instanceof e&&(s.background=null);try{i.setClearColor(0,0),i.setRenderTarget(b),i.clear(),i.render(s,a.camera)}finally{s.background=c}return y.render(i,b),await C(i,y.renderTarget,l,r)}finally{null!==p.pass&&(p.composer?.removePass(p.pass),p.pass.dispose()),y?.dispose(),b?.dispose(),this._context.configuratorExtensionSelectors.getCanvasSystem().r3fHandle$.value===n&&(i.setClearColor(d,h),i.autoClearColor=u,i.setRenderTarget(g),n.set({camera:l,size:{...c,updateStyle:!1}})),await E()}}async generateAndUploadDeclaredClientSideImages(e,t,r={}){let a=this._captureGenerationGuard(),n=await a.waitFor(this.generateDeclaredClientSideImages(e,r));if(r.debug)return n;let o=new Map((await a.waitFor(a.runEffect(()=>this._context.getAuthorizedClient().generateUploadLinks(this._context.getConfigurationId(),t,n.map(e=>e.name))))).map(e=>[e.name,e.url]));return await Promise.all(n.map(async e=>{let t=o.get(e.name);if(!t)throw Error(`Presigned link for image ${e.name} not found!`);await a.waitFor(a.runEffect(()=>fetch(t,{method:"PUT",body:e.blob})))})),n}generateDeclaredClientSideImages(e,t={}){let r=this._context.domainContextSelectors.getComponentReader().readManyComponents({componentTypes:[l]},e);return this.generateImagesFromComponents(r,e,t)}async generateImagesFromComponents(t,r,o={}){let l=this._captureGenerationGuard(),p=this._context.configuratorExtensionSelectors.getCanvasSystem().r3fHandle$.value;if(null===p)throw Error("R3F state not ready");let w=!1,C=this._context.domainContextSelectors.getExportStates(),_=t.map(t=>{if(!C.includes(t.state.exportState)){let e=d(t.componentInstance.entityId)?m(t.componentInstance.entityId):"unknown entity",r=t.componentInstance.componentType.name,a=t.componentInstance.instanceName;throw Error(`Export state ${t.state.exportState} declared in component ${r}/${a} on ${e} is not a valid export state. Expected one of: ${C.join(", ")}`)}let p=t.componentInstance.entityId;if(h(p))throw Error("Virtual entities cannot be used for export");return this._context.configuratorExtensionSelectors.getExportSystem().createExportJob(r,{exportState:t.state.exportState,exportedEntityId:p,toolState:t.state.toolState,viewState:t.state.viewState,navigationState:t.state.navigationState,selectedEntityId:r.rootEntityId},async r=>{let m=this._context.domainContextSelectors.getComponentReader().readManyComponents({componentTypes:[c,g,u]},r.state);!w&&m.length>0&&(await new Promise(e=>{i({font:void 0,characters:void 0},e)}),w=!0,await this._context.configuratorExtensionSelectors.getCanvasSystem().waitForFlush());let d=this._context.configuratorExtensionSelectors.getCameraSystem().getActiveCameraConfig(r.state);if(null==d)throw Error(`No camera config is attached for export state ${t.state.exportState} and exported entity ${p}. Whenever using a client-side image component, you need to attach a camera configuration to the export state defined on that componentin the domain spec. This camera will be used to render the image.`);let h=s(d.typeSpecificConfig.cameraType).with("perspective",()=>new n(45,t.state.width/t.state.height,1,1e4)).with("orthographic",()=>new a(0,0,1e4,0,1,1e4)).exhaustive(),C=f(h);await this._context.configuratorExtensionSelectors.getCameraSystem().applyConfig(d,C,!1,{width:t.state.width,height:t.state.height,padding:{top:0,right:0,bottom:0,left:0}}),C.update(1e6),await new Promise(e=>setTimeout(e,100));let _=await l.waitFor(l.runEffect(()=>this.renderImage({width:t.state.width,height:t.state.height,fileFormat:t.state.fileFormat,backgroundColor:t.state.backgroundColor?new e(t.state.backgroundColor):void 0,camera:h})));return o.debug&&l.runEffect(()=>this._openDebugImage(_)),{blob:_,imageComponent:t,name:`${t.componentInstance.componentType.name}-${t.componentInstance.entityId}-${t.componentInstance.instanceName}`}})});if(0===_.length)return this._context.configuratorExtensionSelectors.getExportSystem().runExportJobs(_);let y=this._freezeCanvas(p);try{return await this._context.configuratorExtensionSelectors.getExportSystem().runExportJobs(_)}finally{await y()}}initialize=()=>{for(let e of(null!==this._generation&&(this._generation.active=!1),this._debugObjectUrls))URL.revokeObjectURL(e);this._debugObjectUrls.clear(),this._generation={active:!0}}}
1
+ import{Color as e,HalfFloatType as t,NoToneMapping as a,OrthographicCamera as r,PerspectiveCamera as n,WebGLRenderTarget as o}from"three";import{preloadFont as i}from"troika-three-text";import{match as s}from"ts-pattern";import{clientSideImageComponent as l,dimensionIndicatorComponent as c,domainEntityTypeFromId as m,editableDistanceDimensionIndicatorComponent as g,isDomainEntityId as d,isVirtualEntityId as h,sketchingEditComponent as u}from"#package/domain";import{createCameraControls as f}from"../camera-control-system/create-camera-controls.js";import{createCanvasFreezeFrame as p}from"./canvas-freeze-frame.js";import{ExportCapturePass as w,readTargetToBlob as C,resolveExportBackground as _}from"./export-image-capture.js";export class ImageRenderingSystem{_context;_renderer=null;_effectComposer=null;_generation=null;_debugObjectUrls=new Set;_canvasFreeze=null;constructor(e){this._context=e}_captureGenerationAssertion=()=>{let e=this._generation,t=()=>{if(!e?.active)throw Error("Image rendering generation ended while images were being rendered! The configurator context was reinitialized before the renderer finished, so the results belong to a configuration that is no longer active. Await the render before leaving the configuration, or discard the rejection.")};return t(),t};_captureGenerationGuard=()=>{let e=this._captureGenerationAssertion();return{assertActive:e,waitFor:async t=>{let a=await t;return e(),a},runEffect:t=>(e(),t())}};register(e){return this._renderer=e,()=>{this._renderer===e&&(this._renderer=null)}}registerEffectComposer(e){return this._effectComposer=e,()=>{this._effectComposer===e&&(this._effectComposer=null)}}_openDebugImage=e=>{let t=URL.createObjectURL(e);this._debugObjectUrls.add(t),window.open(t,"_blank")};_getRenderer=async()=>{let e=this._generation,t=Date.now(),a=()=>{if(!e?.active)throw Error("Image rendering generation ended while waiting for the renderer! The configurator context was reinitialized before the renderer arrived, so the render would target a scene that is gone. Await the render before leaving the configuration, or discard the rejection.")};a();let r=this._renderer;for(;null===r;){if(await new Promise(e=>setTimeout(e,50)),a(),Date.now()-t>1e4)throw Error("Renderer could not be retrieved! Reached timeout.");r=this._renderer}return r};generateImageUsingOriginalCanvas=async(e,t,a=!1)=>{let r=this._captureGenerationGuard(),n=await r.waitFor(this._getRenderer());if(a){let{blob:e}=await r.waitFor(r.runEffect(()=>n.renderUsingOriginalCanvas(t)));r.runEffect(()=>this._openDebugImage(e));return}let o=await Promise.all([t].map(async e=>{let{blob:t}=await r.waitFor(r.runEffect(()=>n.renderUsingOriginalCanvas(e)));return{blob:t,name:e.name}})),i=await r.waitFor(r.runEffect(()=>this._context.getAuthorizedClient().generateUploadLinks(this._context.getConfigurationId(),e,[t.name])));await Promise.all(i.map(async e=>{let t=o.find(t=>t.name===e.name);if(null==t)throw Error("Blob not found!");await Promise.all(i.map(async e=>{await r.waitFor(r.runEffect(()=>fetch(e.url,{method:"PUT",body:t.blob,headers:{"Content-Type":"image/png","Content-Length":t.blob.size.toString()}})))}))}))};async generateImagesUsingOriginalCanvas(e,t,a=!1){let r=this._captureGenerationGuard(),n=await r.waitFor(this._getRenderer()),o=Array.isArray(t)?t:[t],i=await o.reduce(async(e,t)=>[...await e,await r.waitFor(r.runEffect(()=>n.renderUsingOriginalCanvas(t)))],Promise.resolve([]));if(a){for(let e of i)r.runEffect(()=>this._openDebugImage(e.blob)),await r.waitFor(new Promise(e=>setTimeout(e,100)));return}let s=o.map(e=>e.name),l=await r.waitFor(r.runEffect(()=>this._context.getAuthorizedClient().generateUploadLinks(this._context.getConfigurationId(),e,s)));await Promise.all(l.map(async e=>{let t=i.find(t=>t.name===e.name);if(null==t)throw Error("Blob not found!");await Promise.all(l.map(async e=>{await r.waitFor(r.runEffect(()=>fetch(e.url,{method:"PUT",body:t.blob,headers:{"Content-Type":"image/png","Content-Length":t.blob.size.toString()}})))}))}))}async generateImages(e,t,a=!1){let r=this._captureGenerationGuard(),n=await r.waitFor(this._getRenderer()),o=t.map(e=>e.name);if(a)return void await Promise.all(t.map(async e=>{let t=await r.waitFor(r.runEffect(()=>n.renderImage(e)));r.runEffect(()=>this._openDebugImage(t))}));let i=await Promise.all(t.map(async e=>({blob:await r.waitFor(r.runEffect(()=>n.renderImage(e))),name:e.name}))),s=await r.waitFor(r.runEffect(()=>this._context.getAuthorizedClient().generateUploadLinks(this._context.getConfigurationId(),e,o)));await Promise.all(s.map(async e=>{let t=i.find(t=>t.name===e.name);if(null==t)throw Error("Blob not found!");await Promise.all(s.map(async e=>{await r.waitFor(r.runEffect(()=>fetch(e.url,{method:"PUT",body:t.blob,headers:{"Content-Type":"image/png","Content-Length":t.blob.size.toString()}})))}))}))}async getGeneratedImages(e,t=!1){let a=this._captureGenerationAssertion(),r=await this._getRenderer();return(a(),t)?(await Promise.all(e.map(async e=>{let t=await r.renderImage(e);a(),this._openDebugImage(t)})),[]):Promise.all(e.map(async e=>{let t=await r.renderImage(e);return a(),{blob:t,name:e.name}}))}_renderCurrentView=e=>{let{gl:t,scene:a,camera:r}=e.get();null!==this._effectComposer?this._effectComposer.render():t.render(a,r)};_freezeCanvas=e=>{this._canvasFreeze?.handle===e?this._canvasFreeze.holders+=1:(this._canvasFreeze?.remove(),this._canvasFreeze={handle:e,remove:p(e.get().gl.domElement,()=>this._renderCurrentView(e)),resumeFrameloop:this._context.configuratorExtensionSelectors.getExportSystem().pauseFrameloop(e),holders:1});let t=this._canvasFreeze,a=!1;return async()=>{if(!a&&(a=!0,t.holders-=1,!(t.holders>0)))try{let a=this._context.configuratorExtensionSelectors.getCanvasSystem();a.r3fHandle$.value===e&&await a.waitForFlush(),a.r3fHandle$.value===e&&0===t.holders&&this._renderCurrentView(e)}catch{}finally{0===t.holders&&(t.remove(),t.resumeFrameloop(),this._canvasFreeze===t&&(this._canvasFreeze=null))}}};async renderImage(r){let n=this._context.configuratorExtensionSelectors.getCanvasSystem(),i=n.r3fHandle$.value??await n.waitForCanvas(),{gl:s,scene:l,camera:c,size:m,advance:g}=i.get(),d=s.getRenderTarget(),h=s.getClearColor(new e),u=s.getClearAlpha(),f=s.autoClearColor,p=e=>new w(r.width,r.height,e,s.outputColorSpace),y={composer:null,pass:null},b=null,x=null,v=e=>{let t=y.pass??p(a);return y.pass=t,y.composer===e&&e.passes.at(-1)===t||(y.composer?.removePass(t),e.addPass(t),y.composer=e),t},E=async()=>{if(await this._context.configuratorExtensionSelectors.getCanvasSystem().waitForFlush(),this._context.configuratorExtensionSelectors.getCanvasSystem().r3fHandle$.value!==i)throw Error("Canvas was remounted while an image was being rendered! The export borrowed a canvas that is gone, so it cannot capture the image. Retry the export once the configurator has settled.")},S=this._freezeCanvas(i);try{i.set({size:{height:r.height,width:r.width,top:0,left:0,updateStyle:!1}}),i.set({camera:r.camera}),await E(),null!==this._effectComposer&&v(this._effectComposer),g(void 0),await E();let a="JPEG"===r.fileFormat?"image/jpeg":"image/png",n=_({sceneBackground:l.background,backgroundColor:r.backgroundColor,fileFormat:r.fileFormat,outputColorSpace:s.outputColorSpace});if(null!==this._effectComposer){s.setRenderTarget(null),"JPEG"===r.fileFormat?s.setClearColor(r.backgroundColor??0xffffff):r.backgroundColor?s.setClearColor(r.backgroundColor):s.setClearAlpha(0),s.autoClearColor=!0;let e=v(this._effectComposer);return this._effectComposer.render(),await C(s,e.renderTarget,n,a)}b=p(s.toneMapping),x=new o(r.width,r.height,{samples:4,type:t,stencilBuffer:s.getContextAttributes().stencil??!1});let c=l.background;c instanceof e&&(l.background=null);try{s.setClearColor(0,0),s.setRenderTarget(x),s.clear(),s.render(l,r.camera)}finally{l.background=c}return b.render(s,x),await C(s,b.renderTarget,n,a)}finally{null!==y.pass&&(y.composer?.removePass(y.pass),y.pass.dispose()),b?.dispose(),x?.dispose(),this._context.configuratorExtensionSelectors.getCanvasSystem().r3fHandle$.value===i&&(s.setClearColor(h,u),s.autoClearColor=f,s.setRenderTarget(d),i.set({camera:c,size:{...m,updateStyle:!1}})),await S()}}async generateAndUploadDeclaredClientSideImages(e,t,a={}){let r=this._captureGenerationGuard(),n=await r.waitFor(this.generateDeclaredClientSideImages(e,a));if(a.debug)return n;let o=new Map((await r.waitFor(r.runEffect(()=>this._context.getAuthorizedClient().generateUploadLinks(this._context.getConfigurationId(),t,n.map(e=>e.name))))).map(e=>[e.name,e.url]));return await Promise.all(n.map(async e=>{let t=o.get(e.name);if(!t)throw Error(`Presigned link for image ${e.name} not found!`);await r.waitFor(r.runEffect(()=>fetch(t,{method:"PUT",body:e.blob})))})),n}generateDeclaredClientSideImages(e,t={}){let a=this._context.domainContextSelectors.getComponentReader().readManyComponents({componentTypes:[l]},e);return this.generateImagesFromComponents(a,e,t)}async generateImagesFromComponents(t,a,o={}){let l=this._captureGenerationGuard(),p=!1,w=this._context.domainContextSelectors.getExportStates(),C=t.map(t=>{if(!w.includes(t.state.exportState)){let e=d(t.componentInstance.entityId)?m(t.componentInstance.entityId):"unknown entity",a=t.componentInstance.componentType.name,r=t.componentInstance.instanceName;throw Error(`Export state ${t.state.exportState} declared in component ${a}/${r} on ${e} is not a valid export state. Expected one of: ${w.join(", ")}`)}let C=t.componentInstance.entityId;if(h(C))throw Error("Virtual entities cannot be used for export");return this._context.configuratorExtensionSelectors.getExportSystem().createExportJob(a,{exportState:t.state.exportState,exportedEntityId:C,toolState:t.state.toolState,viewState:t.state.viewState,navigationState:t.state.navigationState,selectedEntityId:a.rootEntityId},async a=>{let m=this._context.domainContextSelectors.getComponentReader().readManyComponents({componentTypes:[c,g,u]},a.state);!p&&m.length>0&&(await new Promise(e=>{i({font:void 0,characters:void 0},e)}),p=!0,await this._context.configuratorExtensionSelectors.getCanvasSystem().waitForFlush());let d=this._context.configuratorExtensionSelectors.getCameraSystem().getActiveCameraConfig(a.state);if(null==d)throw Error(`No camera config is attached for export state ${t.state.exportState} and exported entity ${C}. Whenever using a client-side image component, you need to attach a camera configuration to the export state defined on that componentin the domain spec. This camera will be used to render the image.`);let h=s(d.typeSpecificConfig.cameraType).with("perspective",()=>new n(45,t.state.width/t.state.height,1,1e4)).with("orthographic",()=>new r(0,0,1e4,0,1,1e4)).exhaustive(),w=f(h);await this._context.configuratorExtensionSelectors.getCameraSystem().applyConfig(d,w,!1,{width:t.state.width,height:t.state.height,padding:{top:0,right:0,bottom:0,left:0}}),w.update(1e6),await new Promise(e=>setTimeout(e,100));let _=await l.waitFor(l.runEffect(()=>this.renderImage({width:t.state.width,height:t.state.height,fileFormat:t.state.fileFormat,backgroundColor:t.state.backgroundColor?new e(t.state.backgroundColor):void 0,camera:h})));return o.debug&&l.runEffect(()=>this._openDebugImage(_)),{blob:_,imageComponent:t,name:`${t.componentInstance.componentType.name}-${t.componentInstance.entityId}-${t.componentInstance.instanceName}`}})});if(0===C.length)return this._context.configuratorExtensionSelectors.getExportSystem().runExportJobs(C);let _=this._context.configuratorExtensionSelectors.getCanvasSystem(),y=_.r3fHandle$.value??await l.waitFor(_.waitForCanvas().catch(e=>{throw l.assertActive(),e})),b=this._freezeCanvas(y);try{return await this._context.configuratorExtensionSelectors.getExportSystem().runExportJobs(C)}finally{await b()}}initialize=()=>{for(let e of(null!==this._generation&&(this._generation.active=!1),this._debugObjectUrls))URL.revokeObjectURL(e);this._debugObjectUrls.clear(),this._generation={active:!0}}}
@@ -1,13 +1,17 @@
1
1
  import { type $DomainEntity, type ConfiguratorBuilder, type CreateCustomPhoenixEntityElement, type CreateCustomPhoenixLayoutElement, type CreateGetThemeHandler, type CreateGetWebComponentOptionsHandler, type CreatePhoenixHandler, type DomainEntity, type IsCreateRecipeUpdate, type IsReplaceRecipeUpdate, type TransformerBuilder, type TransformerFactory, type UpdateFactory, getIdSequence } from '#package/domain';
2
- import { type CreateCollectFrontendDataHandler, type CreateFilterPublishedChunksHandler, type CreateNotAuthenticatedPage, type IsAngleDimensionUpdate, type IsAttributeSelectionUpdate, type IsAttributeSwitchUpdate, type IsDeleteEntityUpdate, type IsDistanceDimensionUpdate, type IsGenericDimensionUpdate, type IsSwatchSelectionUpdate, type IsTextValueUpdate, type UseAccessService, type UseActiveNavigationState, type UseActiveToolState, type UseActiveViewState, type UseAnalyticsService, type UseAngleDimension, type UseAttributeSelection, type UseAttributeSwitch, type UseAuthenticatedClient, type UseAuthorizedClient, type UseBackendData, type UseChildEntitySelection, type UseComponent, type UseComponents, type UseComposition, type UseConfigurationId, type UseConfiguratorMessages, type UseControlViolations, type UseCookRecipes, type UseCookReplaceRecipes, type UseCookedRecipes, type UseCookedReplaceRecipes, type UseCreateAuthorizedClient, type UseDeleteEntity, type UseDeletedEntity, type UseDeselect, type UseDistanceDimension, type UseDistanceDimensionSelection, type UseDomainApplicationContext, type UseDomainApplicationProps, type UseDomainContext, type UseDomainEntityState, type UseEntityPrice, type UseEntitySelector, type UseFinalizeViolations, type UseFirstComponent, type UseFirstRootComponent, type UseFrontendData, type UseGenericDimension, type UseGroupedRecipeOptions, type UseHoveredDomainEntityId, type UseHoveredEntity, type UseHoveredEntityId, type UseIntegrationService, type UseIntegrationState, type UseIsFullscreenActive, type UseLoadedData, type UseLoadingState, type UseMapViolationHints, type UseNavigate, type UsePopNavigate, type UsePresetEmbeddedState, type UsePublishedData, type UsePushNavigate, type UseRecipeEmbeddedState, type UseReplaceEntityRecipeOptions, type UseRootComponents, type UseRootEntityId, type UseRootEntityPrice, type UseRootEntitySelector, type UseRootEntityState, type UseSelectEntity, type UseSelectParent, type UseSelectedDomainEntityId, type UseSelectedEntity, type UseSelectedEntityId, type UseSession, type UseSessionRole, type UseSessionService, type UseSetFullscreen, type UseSlice, type UseState, type UseStateValidity, type UseSwatchSelection, type UseSynchronizedSelector, type UseSynchronizedSelector$, type UseTextValue, type UseUpdateControl, type UseUpdatedControl, useLoadingStateValue } from '#package/react-sdk';
2
+ import { type CreateAddEntityFab, type CreateCollectFrontendDataHandler, type CreateDeleteEntityFab, type CreateFilterPublishedChunksHandler, type CreateNavigationHotspot, type CreateNotAuthenticatedPage, type CreateSelectionHotspot, type CreateToolMenuFab, type IsAngleDimensionUpdate, type IsAttributeSelectionUpdate, type IsAttributeSwitchUpdate, type IsDeleteEntityUpdate, type IsDistanceDimensionUpdate, type IsGenericDimensionUpdate, type IsSwatchSelectionUpdate, type IsTextValueUpdate, type UseAccessService, type UseActiveNavigationState, type UseActiveToolState, type UseActiveViewState, type UseActiveViewports, type UseAnalyticsService, type UseAngleDimension, type UseAttributeSelection, type UseAttributeSwitch, type UseAuthenticatedClient, type UseAuthorizedClient, type UseBackendData, type UseChildEntitySelection, type UseComponent, type UseComponents, type UseComposition, type UseConfigurationId, type UseConfiguratorMessages, type UseControlViolations, type UseCookRecipes, type UseCookReplaceRecipes, type UseCookedRecipes, type UseCookedReplaceRecipes, type UseCreateAuthorizedClient, type UseDeleteEntity, type UseDeletedEntity, type UseDeselect, type UseDistanceDimension, type UseDistanceDimensionSelection, type UseDomainApplicationContext, type UseDomainApplicationProps, type UseDomainContext, type UseDomainEntityState, type UseEntityPrice, type UseEntitySelector, type UseFinalizeAction, type UseFinalizeActions, type UseFinalizeViolations, type UseFirstComponent, type UseFirstRootComponent, type UseFrontendData, type UseGenericDimension, type UseGroupedRecipeOptions, type UseHoveredDomainEntityId, type UseHoveredEntity, type UseHoveredEntityId, type UseIntegrationService, type UseIntegrationState, type UseIsFullscreenActive, type UseLoadedData, type UseLoadingState, type UseLocaleSwitch, type UseMapViolationHints, type UseNavigate, type UsePopNavigate, type UsePresetEmbeddedState, type UsePublishedData, type UsePushNavigate, type UseRecipeEmbeddedState, type UseReplaceEntityRecipeOptions, type UseRootComponents, type UseRootEntityId, type UseRootEntityPrice, type UseRootEntitySelector, type UseRootEntityState, type UseSelectEntity, type UseSelectParent, type UseSelectedDomainEntityId, type UseSelectedEntity, type UseSelectedEntityId, type UseSession, type UseSessionRole, type UseSessionService, type UseSetFullscreen, type UseSetViewState, type UseShareLinks, type UseSlice, type UseState, type UseStateValidity, type UseStepNavigation, type UseSwatchSelection, type UseSynchronizedSelector, type UseSynchronizedSelector$, type UseTabNavigation, type UseTextValue, type UseUndoRedo, type UseUpdateControl, type UseUpdatedControl, useGenerateShareLink, useLoadingStateValue, useLocalizable, useResolveLocalizable } from '#package/react-sdk';
3
3
  import { type CreatePhoenixIconSet } from '#package/ui-sdk';
4
4
  import { type UseConfiguratorExtensions } from '../application-runtime/index.js';
5
- import { type CreateOnApplicationStartProvider, type CreateOnBackendDataReadyProvider, type CreateOnConfiguratorReadyProvider, type CreateOnFrontendDataReadyProvider, type CreateOnGoToIndexHandler, type CreateOnPresetLoadedHandler, type CreateOnPublishedDataReadyProvider, type CreateOnRoutingReadyProvider, type CreateOnSessionReadyProvider, type UseConfiguratorRouting, type UsePresetSelection, usePropertyPageStack, usePropertyPageState } from '../configurator-context/index.js';
5
+ import { type CreateConfigurationNotFoundPage } from '../configuration-not-found-page/index.js';
6
+ import { type CreateOnApplicationStartProvider, type CreateOnBackendDataReadyProvider, type CreateOnConfiguratorReadyProvider, type CreateOnFrontendDataReadyProvider, type CreateOnGoToIndexHandler, type CreateOnPresetLoadedHandler, type CreateOnPublishedDataReadyProvider, type CreateOnRoutingReadyProvider, type CreateOnSessionReadyProvider, type UseConfiguratorRouting, type UsePresetSelection, usePreview, usePropertyPageStack, usePropertyPageState } from '../configurator-context/index.js';
7
+ import { type CreateConfiguratorErrorPage } from '../configurator-error-page/index.js';
8
+ import { useCloseAction } from '../integration/index.js';
6
9
  import { type CreateGetTextureProcessingMapHandler } from '../scene/index.js';
7
10
  import type { UseUpdateEntityObjectSelection } from '../scene/scene-entity/drag-and-drop/use-updated-selection.js';
8
- import { type CreateAppLoader, type CreateCanvasLoader, type CreateLayoutAdminUi, type CreateLayoutCustomOwnerUi, type CreateLayoutCustomReadUi, type CreateLayoutDialog, type CreateLayoutFooter, type CreateLayoutToolbarDesktop, type CreateLayoutToolbarDesktopFullScreen, type CreateLayoutToolbarReadDesktop, type CreateLayoutToolbarReadDesktopFullScreen, type CreateLayoutUserUi, type CreateToolbarHelp } from '../ui/index.js';
9
- import { useGenerateShareLink } from '../ui/phoenix-layout-elements/share/use-share.js';
11
+ import { type UseAssistantPanel, type UseMeasurements, type UseToolbarActions } from '../toolbar-actions/index.js';
12
+ import { type CreateAppLoader, type CreateCanvasLoader, type CreateLayoutAdminUi, type CreateLayoutCustomOwnerUi, type CreateLayoutCustomReadUi, type CreateLayoutDialog, type CreateLayoutFooter, type CreateLayoutToolbarDesktop, type CreateLayoutToolbarDesktopFullScreen, type CreateLayoutToolbarReadDesktop, type CreateLayoutToolbarReadDesktopFullScreen, type CreateLayoutUserUi, type CreateToolbarHelp, LayoutSlots, useSceneSafeArea } from '../ui/index.js';
10
13
  import { type CreatePresetDeviceNotSupported, type CreatePresetPageAction, type CreatePresetUi } from '../ui/preset-layout/PresetUi.js';
14
+ import { type UseResetCamera } from './use-reset-camera.js';
11
15
  export interface ConfiguratorInterface<ENTITIES extends DomainEntity<string>, ALLOWED_ROOT_ENTITIES extends ENTITIES, $MAP extends Record<ENTITIES['type'], $DomainEntity<ENTITIES>>, PUBLISHED_DATA extends Record<string, unknown>, SESSION_DATA extends Record<string, unknown>, FRONTEND_DATA extends Record<string, unknown>, NAVIGATION_STATES extends string, VIEW_STATES extends string, TOOL_STATES extends string, EXPORT_STATES extends string, FINALIZE_DATA extends Record<string, unknown>, FINALIZE_RESULT extends Record<string, unknown>> {
12
16
  /**
13
17
  * Factory for creating update functions for entities.
@@ -179,6 +183,42 @@ export interface ConfiguratorInterface<ENTITIES extends DomainEntity<string>, AL
179
183
  * Creates a custom page shown when session authentication fails.
180
184
  */
181
185
  createNotAuthenticatedPage: CreateNotAuthenticatedPage;
186
+ /**
187
+ * Creates the page shown when a configuration cannot be loaded or opened, replacing the built-in
188
+ * `ConfigurationNotFoundPage`.
189
+ */
190
+ createConfigurationNotFoundPage: CreateConfigurationNotFoundPage;
191
+ /**
192
+ * Creates the page the configurator shows in production when it cannot go on, replacing the built-in
193
+ * `ConfiguratorErrorPage`.
194
+ */
195
+ createConfiguratorErrorPage: CreateConfiguratorErrorPage;
196
+ /**
197
+ * Creates the in-scene FAB that adds child entities (`sceneEntityAddFab`), replacing the built-in
198
+ * `AddEntityFab` element. It receives the component's settings and reads the recipes it offers
199
+ * with `useGroupedRecipeOptions(entityId, instanceNames, fixableViolations)`.
200
+ */
201
+ createAddEntityFab: CreateAddEntityFab;
202
+ /**
203
+ * Creates the in-scene FAB that deletes an entity (`sceneEntityDeleteFab`), replacing the built-in
204
+ * `DeleteEntityFab` element. It receives `onDelete`, `disabled` and `disabledHint`.
205
+ */
206
+ createDeleteEntityFab: CreateDeleteEntityFab;
207
+ /**
208
+ * Creates the in-scene hotspot that selects an entity (`sceneEntitySelectHotspot`), replacing the
209
+ * built-in `SelectionHotspot` element. It receives `onSelect`.
210
+ */
211
+ createSelectionHotspot: CreateSelectionHotspot;
212
+ /**
213
+ * Creates the in-scene hotspot that goes to a navigation state (`sceneEntityNavigationHotspot`),
214
+ * replacing the built-in `NavigationHotspot` element. It receives `onNavigate`.
215
+ */
216
+ createNavigationHotspot: CreateNavigationHotspot;
217
+ /**
218
+ * Creates the in-scene FAB that switches tools (`toolMenuFab`), replacing the built-in `ToolMenuFab`
219
+ * element. It receives the tool `options` and `onSelectTool`.
220
+ */
221
+ createToolMenuFab: CreateToolMenuFab;
182
222
  /**
183
223
  * Factory for creating transformers for entities.
184
224
  * @deprecated Use {@link #transformerBuilder} instead.
@@ -347,6 +387,16 @@ export interface ConfiguratorInterface<ENTITIES extends DomainEntity<string>, AL
347
387
  * text resolved
348
388
  */
349
389
  useConfiguratorMessages: UseConfiguratorMessages<ENTITIES, $MAP>;
390
+ /**
391
+ * Runs the project handler a `finalizeAction` component names, with its pending state, its error and the
392
+ * finalize violations; call it once per component, wrapped in `PhoenixHandlerBoundary`
393
+ */
394
+ useFinalizeAction: UseFinalizeAction;
395
+ /**
396
+ * The spec's finalize actions, each with its resolved texts and its own `run`, `isPending` and `error`, the
397
+ * primary one picked as the built-in footer picks it; call it anywhere and render the actions in a loop
398
+ */
399
+ useFinalizeActions: UseFinalizeActions;
350
400
  /**
351
401
  * Returns component based on a filter specified
352
402
  */
@@ -464,6 +514,10 @@ export interface ConfiguratorInterface<ENTITIES extends DomainEntity<string>, AL
464
514
  * Get the currently active view state
465
515
  */
466
516
  useActiveViewState: UseActiveViewState<VIEW_STATES>;
517
+ /**
518
+ * Make the given view state the active one
519
+ */
520
+ useSetViewState: UseSetViewState<VIEW_STATES>;
467
521
  /**
468
522
  * Get the currently active tool state
469
523
  */
@@ -476,6 +530,79 @@ export interface ConfiguratorInterface<ENTITIES extends DomainEntity<string>, AL
476
530
  * Turn the fullscreen state on or off. The state is a flag the layout reads with `useIsFullscreenActive`
477
531
  */
478
532
  useSetFullscreen: UseSetFullscreen;
533
+ /**
534
+ * Move the camera back to the framing of the active camera configuration, as the toolbar's reset button does
535
+ */
536
+ useResetCamera: UseResetCamera;
537
+ /**
538
+ * Undo and redo changes of the configuration, with whether each is possible, as the toolbar's undo and redo
539
+ * buttons do
540
+ */
541
+ useUndoRedo: UseUndoRedo;
542
+ /**
543
+ * The spec's tabs (`sidebarTabs` or `horizontalTabs`) with the active one, and switching between them, as the
544
+ * built-in tabs do
545
+ */
546
+ useTabNavigation: UseTabNavigation<NAVIGATION_STATES>;
547
+ /**
548
+ * The spec's steps (`navigationSteps`) with the active one, and moving between them, as the built-in step buttons
549
+ * and the header's stepper do
550
+ */
551
+ useStepNavigation: UseStepNavigation<NAVIGATION_STATES>;
552
+ /**
553
+ * Tell the camera which part of the canvas a project layout leaves free for the scene. Attach `containerRef` to the
554
+ * element that covers the whole canvas and `safeAreaRef` to the region the scene should stay visible in
555
+ */
556
+ useSceneSafeArea: typeof useSceneSafeArea;
557
+ /**
558
+ * Get the responsive breakpoints the configurator's container satisfies, or `null` before it is measured
559
+ */
560
+ useActiveViewports: UseActiveViewports;
561
+ /**
562
+ * Get the preview state: whether the layout shows a preview start screen, and functions that enter and leave it
563
+ */
564
+ usePreview: typeof usePreview;
565
+ /**
566
+ * Get the host's close action, or `null` when the integration mode offers none
567
+ */
568
+ useCloseAction: typeof useCloseAction;
569
+ /**
570
+ * Whether a viewer of a configuration shared for viewing may clone it to edit: the application config sets
571
+ * `shareCloneToEdit` and the session's role may create configurations
572
+ */
573
+ useIsCloningAllowed: typeof LayoutSlots.useIsCloningAllowed;
574
+ /**
575
+ * Returns a function that turns a localizable text of the spec into a string in the current language
576
+ */
577
+ useResolveLocalizable: typeof useResolveLocalizable;
578
+ /**
579
+ * Turn one localizable text of the spec into a string in the current language
580
+ */
581
+ useLocalizable: typeof useLocalizable;
582
+ /**
583
+ * The spec's toolbar for a placement as runnable entries, grouped as the spec groups them, for a layout's own
584
+ * toolbar
585
+ */
586
+ useToolbarActions: UseToolbarActions;
587
+ /**
588
+ * The unit of dimensions and the dimension indicators, with functions that change them, as the toolbar's
589
+ * measurements button does
590
+ */
591
+ useMeasurements: UseMeasurements;
592
+ /**
593
+ * The languages the configurator offers and the active one, with a function that switches it, as the toolbar's
594
+ * language button does
595
+ */
596
+ useLocaleSwitch: UseLocaleSwitch;
597
+ /**
598
+ * Links that share the configuration for editing and for viewing, as the toolbar's share dialog generates them
599
+ */
600
+ useShareLinks: UseShareLinks;
601
+ /**
602
+ * Whether the assistant panel is open, with a function that opens or closes it, as the toolbar's assistant button
603
+ * does
604
+ */
605
+ useAssistantPanel: UseAssistantPanel;
479
606
  /**
480
607
  * Returns composition tree of the domain
481
608
  */
@@ -1 +1 @@
1
- import{createCustomPhoenixEntityElement as e,createCustomPhoenixLayoutElement as t,createGetThemeHandler as r,createGetWebComponentOptionsHandler as o,createPhoenixHandler as i,createTransformer as s,createTransformerBuilder as a,createUpdateFactory as n,getIdSequence as m,isCreateEntityUpdate as p,isReplaceEntityUpdate as u}from"#package/domain";import{createCollectFrontendDataHandler as d,createFilterPublishedChunksHandler as c,createNotAuthenticatedPage as f,isAngleDimensionUpdate as g,isAttributeSelectionUpdate as j,isAttributeSwitchUpdate as l,isDeleteEntityUpdate as x,isDistanceDimensionUpdate as y,isGenericDimensionUpdate as k,isSwatchSelectionUpdate as h,isTextValueUpdate as S,useAccessService as E,useActiveNavigationState as I,useActiveToolState as q,useActiveViewState as A,useAnalyticsService as B,useAngleDimension as C,useAttributeSelection as P,useAttributeSwitch as R,useAuthenticatedClient as U,useAuthorizedClient as b,useBackendData as v,useChildEntitySelection as w,useCommittedSlice as z,useCommittedState as D,useComponent as F,useComponents as G,useComposition as H,useConfigurationId as J,useConfiguratorMessages as K,useControlViolations as L,useCookRecipes as M,useCookReplaceRecipes as N,useCookedRecipes as O,useCookedReplaceRecipes as Q,useCreateAuthorizedClient as T,useDeleteEntity as V,useDeletedEntity as W,useDeselect as X,useDistanceDimension as Y,useDistanceDimensionSelection as Z,useDomain as $,useDomainApplication as _,useDomainApplicationProps as ee,useDomainEntityRenderedState as et,useDomainEntityState as er,useEntityPrice as eo,useEntitySelector as ei,useFinalizeViolations as es,useFirstComponent as ea,useFirstRenderedComponent as en,useFirstRootComponent as em,useFirstRootRenderedComponent as ep,useFrontendData as eu,useGenericDimension as ed,useGroupedRecipeOptions as ec,useHoveredDomainEntityId as ef,useHoveredEntity as eg,useHoveredEntityId as ej,useIntegrationService as el,useIntegrationState as ex,useIsFullscreenActive as ey,useLoadedData as ek,useLoadingState as eh,useLoadingStateValue as eS,useMapViolationHints as eE,useNavigate as eI,usePopNavigate as eq,usePresetEmbeddedState as eA,usePublishedData as eB,usePushNavigate as eC,useRecipeEmbeddedState as eP,useRenderedComponent as eR,useRenderedComponents as eU,useRenderedEntitySelector as eb,useRenderedRootEntitySelector as ev,useRenderedSelector as ew,useRenderedSelector$ as ez,useRenderedSlice as eD,useRenderedState as eF,useReplaceEntityRecipeOptions as eG,useRootComponents as eH,useRootEntityId as eJ,useRootEntityPrice as eK,useRootEntityRenderedId as eL,useRootEntityRenderedState as eM,useRootEntitySelector as eN,useRootEntityState as eO,useRootRenderedComponents as eQ,useSelectEntity as eT,useSelectParent as eV,useSelectedDomainEntityId as eW,useSelectedEntity as eX,useSelectedEntityId as eY,useSession as eZ,useSessionRole as e$,useSessionService as e_,useSetFullscreen as e0,useStateValidity as e1,useStoreSelector as e2,useStoreSelector$ as e3,useSwatchSelection as e4,useTextValue as e5,useUpdateControl as e6,useUpdatedControl as e7}from"#package/react-sdk";import{createPhoenixIconSet as e8}from"#package/ui-sdk";import{useConfigurator as e9}from"../application-runtime/index.js";import{createOnApplicationStartProvider as te,createOnBackendDataReadyProvider as tt,createOnConfiguratorReadyProvider as tr,createOnFrontendDataReadyProvider as to,createOnGoToIndexHandler as ti,createOnPresetLoadedHandler as ts,createOnPublishedDataReadyProvider as ta,createOnRoutingReadyProvider as tn,createOnSessionReadyProvider as tm,useConfiguratorRouting as tp,usePresetSelection as tu,usePropertyPageStack as td,usePropertyPageState as tc}from"../configurator-context/index.js";import{createGetTextureProcessingMapHandler as tf}from"../scene/index.js";import{useUpdateEntityObjectSelection as tg}from"../scene/scene-entity/drag-and-drop/use-updated-selection.js";import{createAppLoader as tj,createCanvasLoader as tl,createLayoutAdminUi as tx,createLayoutCustomOwnerUi as ty,createLayoutCustomReadUi as tk,createLayoutDialog as th,createLayoutFooter as tS,createLayoutToolbarDesktop as tE,createLayoutToolbarDesktopFullScreen as tI,createLayoutToolbarReadDesktop as tq,createLayoutToolbarReadDesktopFullScreen as tA,createLayoutUserUi as tB,createToolbarHelp as tC}from"../ui/index.js";import{useGenerateShareLink as tP}from"../ui/phoenix-layout-elements/share/use-share.js";import{createPresetDeviceNotSupported as tR,createPresetPageAction as tU,createPresetUi as tb}from"../ui/preset-layout/PresetUi.js";export const createConfiguratorInterface=tv=>({updates:n(),getIdSequence:m,createGetWebComponentOptionsHandler:o,createGetThemeHandler:r,createPhoenixHandler:i,createCustomPhoenixEntityElement:e,createCustomPhoenixLayoutElement:t,createPhoenixIconSet:e8,createGetTextureProcessingMapHandler:tf,createCollectFrontendDataHandler:d,createFilterPublishedChunksHandler:c,createOnGoToIndexHandler:ti,createOnApplicationStartProvider:te,createOnSessionReadyProvider:tm,createOnPublishedDataReadyProvider:ta,createOnFrontendDataReadyProvider:to,createOnBackendDataReadyProvider:tt,createOnRoutingReadyProvider:tn,createOnConfiguratorReadyProvider:tr,createOnPresetLoadedHandler:ts,createPresetUi:tb,createPresetPageAction:tU,createPresetDeviceNotSupported:tR,createLayoutFooter:tS,createAppLoader:tj,createCanvasLoader:tl,createLayoutDialog:th,createLayoutToolbarDesktop:tE,createLayoutToolbarDesktopFullScreen:tI,createLayoutToolbarReadDesktop:tq,createLayoutToolbarReadDesktopFullScreen:tA,createLayoutCustomOwnerUi:ty,createLayoutCustomReadUi:tk,createLayoutAdminUi:tx,createLayoutUserUi:tB,createToolbarHelp:tC,createNotAuthenticatedPage:f,createTransformer:s,transformerBuilder:a(),useAnalytics:B,useAuthenticatedClient:U,useAuthorizedClient:b,useCreateAuthorizedClient:T,useAccessService:E,useConfigurationId:J,useSession:eZ,useSessionRole:e$,useSessionService:e_,useDomain:$,useDomainApplication:_,useConfigurator:e9,useConfiguratorRouting:tp,usePresetSelection:tu,usePublishedData:eB,useFrontendData:eu,useBackendData:v,useDomainApplicationProps:ee,useLoadedData:ek,useIntegrationService:el,useIntegrationState:ex,usePresetEmbeddedState:eA,useRecipeEmbeddedState:eP,useCommittedSlice:z,useRenderedSlice:eD,useCommittedState:D,useRenderedState:eF,useStoreSelector:e2,useRenderedSelector:ew,useStoreSelector$:e3,useRenderedSelector$:ez,useEntitySelector:ei,useRenderedEntitySelector:eb,useRootEntitySelector:eN,useRenderedRootEntitySelector:ev,useStateValidity:e1,useMapViolationHints:eE,useNavigate:eI,usePopNavigate:eq,usePushNavigate:eC,useControlViolations:L,useFinalizeViolations:es,useConfiguratorMessages:K,useComponent:F,useRenderedComponent:eR,useComponents:G,useRenderedComponents:eU,useFirstComponent:ea,useFirstRenderedComponent:en,useRootComponents:eH,useRootRenderedComponents:eQ,useFirstRootComponent:em,useFirstRootRenderedComponent:ep,useEntityState:er,useEntityRenderedState:et,useRootEntityState:eO,useRootEntityRenderedState:eM,useRootEntityId:eJ,useRootEntityRenderedId:eL,useEntityPrice:eo,useRootEntityPrice:eK,useSelectedEntity:eX,useSelectedEntityId:eY,useSelectedDomainEntityId:eW,useSelectEntity:eT,useDeselect:X,useSelectParent:eV,useHoveredEntity:eg,useHoveredEntityId:ej,useHoveredDomainEntityId:ef,useActiveNavigationState:I,useActiveViewState:A,useActiveToolState:q,useIsFullscreenActive:ey,useSetFullscreen:e0,useComposition:H,useUpdateControl:e6,useUpdatedControl:e7,useCookRecipes:M,useCookedRecipes:O,useCookReplaceRecipes:N,useCookedReplaceRecipes:Q,useDeleteEntity:V,useDeletedEntity:W,useSwatchSelection:e4,useTextValue:e5,useAttributeSelection:P,useAttributeSwitch:R,useDistanceDimension:Y,useDistanceDimensionSelection:Z,useGenericDimension:ed,useAngleDimension:C,useChildEntitySelection:w,useGroupedRecipeOptions:ec,useReplaceEntityRecipeOptions:eG,useUpdateEntityObjectSelection:tg,useGenerateShareLink:tP,useLoadingState:eh,useLoadingStateValue:eS,usePropertyPageStack:td,usePropertyPageState:tc,isCreateEntityUpdate:p,isReplaceEntityUpdate:u,isDeleteEntityUpdate:x,isAngleDimensionUpdate:g,isDistanceDimensionUpdate:y,isGenericDimensionUpdate:k,isAttributeSelectionUpdate:j,isAttributeSwitchUpdate:l,isTextValueUpdate:S,isSwatchSelectionUpdate:h});
1
+ import{createCustomPhoenixEntityElement as e,createCustomPhoenixLayoutElement as o,createGetThemeHandler as r,createGetWebComponentOptionsHandler as t,createPhoenixHandler as i,createTransformer as n,createTransformerBuilder as s,createUpdateFactory as a,getIdSequence as m,isCreateEntityUpdate as p,isReplaceEntityUpdate as d}from"#package/domain";import{createAddEntityFab as f,createCollectFrontendDataHandler as u,createDeleteEntityFab as c,createFilterPublishedChunksHandler as g,createNavigationHotspot as l,createNotAuthenticatedPage as j,createSelectionHotspot as x,createToolMenuFab as k,isAngleDimensionUpdate as y,isAttributeSelectionUpdate as I,isAttributeSwitchUpdate as A,isDeleteEntityUpdate as C,isDistanceDimensionUpdate as S,isGenericDimensionUpdate as w,isSwatchSelectionUpdate as E,isTextValueUpdate as b,useAccessService as q,useActiveNavigationState as B,useActiveToolState as P,useActiveViewState as R,useActiveViewports as U,useAnalyticsService as h,useAngleDimension as v,useAttributeSelection as z,useAttributeSwitch as D,useAuthenticatedClient as F,useAuthorizedClient as G,useBackendData as H,useChildEntitySelection as J,useCommittedSlice as K,useCommittedState as L,useComponent as M,useComponents as N,useComposition as O,useConfigurationId as Q,useConfiguratorMessages as T,useControlViolations as V,useCookRecipes as W,useCookReplaceRecipes as X,useCookedRecipes as Y,useCookedReplaceRecipes as Z,useCreateAuthorizedClient as $,useDeleteEntity as _,useDeletedEntity as ee,useDeselect as eo,useDistanceDimension as er,useDistanceDimensionSelection as et,useDomain as ei,useDomainApplication as en,useDomainApplicationProps as es,useDomainEntityRenderedState as ea,useDomainEntityState as em,useEntityPrice as ep,useEntitySelector as ed,useFinalizeAction as ef,useFinalizeActions as eu,useFinalizeViolations as ec,useFirstComponent as eg,useFirstRenderedComponent as el,useFirstRootComponent as ej,useFirstRootRenderedComponent as ex,useFrontendData as ek,useGenerateShareLink as ey,useGenericDimension as eI,useGroupedRecipeOptions as eA,useHoveredDomainEntityId as eC,useHoveredEntity as eS,useHoveredEntityId as ew,useIntegrationService as eE,useIntegrationState as eb,useIsFullscreenActive as eq,useLoadedData as eB,useLoadingState as eP,useLoadingStateValue as eR,useLocaleSwitch as eU,useLocalizable as eh,useMapViolationHints as ev,useNavigate as ez,usePopNavigate as eD,usePresetEmbeddedState as eF,usePublishedData as eG,usePushNavigate as eH,useRecipeEmbeddedState as eJ,useRenderedComponent as eK,useRenderedComponents as eL,useRenderedEntitySelector as eM,useRenderedRootEntitySelector as eN,useRenderedSelector as eO,useRenderedSelector$ as eQ,useRenderedSlice as eT,useRenderedState as eV,useReplaceEntityRecipeOptions as eW,useResolveLocalizable as eX,useRootComponents as eY,useRootEntityId as eZ,useRootEntityPrice as e$,useRootEntityRenderedId as e_,useRootEntityRenderedState as e0,useRootEntitySelector as e1,useRootEntityState as e2,useRootRenderedComponents as e3,useSelectEntity as e4,useSelectParent as e5,useSelectedDomainEntityId as e6,useSelectedEntity as e7,useSelectedEntityId as e8,useSession as e9,useSessionRole as oe,useSessionService as oo,useSetFullscreen as or,useSetViewState as ot,useShareLinks as oi,useStateValidity as on,useStepNavigation as os,useStoreSelector as oa,useStoreSelector$ as om,useSwatchSelection as op,useTabNavigation as od,useTextValue as of,useUndoRedo as ou,useUpdateControl as oc,useUpdatedControl as og}from"#package/react-sdk";import{createPhoenixIconSet as ol}from"#package/ui-sdk";import{useConfigurator as oj}from"../application-runtime/index.js";import{createConfigurationNotFoundPage as ox}from"../configuration-not-found-page/index.js";import{createOnApplicationStartProvider as ok,createOnBackendDataReadyProvider as oy,createOnConfiguratorReadyProvider as oI,createOnFrontendDataReadyProvider as oA,createOnGoToIndexHandler as oC,createOnPresetLoadedHandler as oS,createOnPublishedDataReadyProvider as ow,createOnRoutingReadyProvider as oE,createOnSessionReadyProvider as ob,useConfiguratorRouting as oq,usePresetSelection as oB,usePreview as oP,usePropertyPageStack as oR,usePropertyPageState as oU}from"../configurator-context/index.js";import{createConfiguratorErrorPage as oh}from"../configurator-error-page/index.js";import{useCloseAction as ov}from"../integration/index.js";import{createGetTextureProcessingMapHandler as oz}from"../scene/index.js";import{useUpdateEntityObjectSelection as oD}from"../scene/scene-entity/drag-and-drop/use-updated-selection.js";import{useAssistantPanel as oF,useMeasurements as oG,useToolbarActions as oH}from"../toolbar-actions/index.js";import{LayoutSlots as oJ,createAppLoader as oK,createCanvasLoader as oL,createLayoutAdminUi as oM,createLayoutCustomOwnerUi as oN,createLayoutCustomReadUi as oO,createLayoutDialog as oQ,createLayoutFooter as oT,createLayoutToolbarDesktop as oV,createLayoutToolbarDesktopFullScreen as oW,createLayoutToolbarReadDesktop as oX,createLayoutToolbarReadDesktopFullScreen as oY,createLayoutUserUi as oZ,createToolbarHelp as o$,useSceneSafeArea as o_}from"../ui/index.js";import{createPresetDeviceNotSupported as o0,createPresetPageAction as o1,createPresetUi as o2}from"../ui/preset-layout/PresetUi.js";import{useResetCamera as o3}from"./use-reset-camera.js";export const createConfiguratorInterface=o4=>({updates:a(),getIdSequence:m,createGetWebComponentOptionsHandler:t,createGetThemeHandler:r,createPhoenixHandler:i,createCustomPhoenixEntityElement:e,createCustomPhoenixLayoutElement:o,createPhoenixIconSet:ol,createGetTextureProcessingMapHandler:oz,createCollectFrontendDataHandler:u,createFilterPublishedChunksHandler:g,createOnGoToIndexHandler:oC,createOnApplicationStartProvider:ok,createOnSessionReadyProvider:ob,createOnPublishedDataReadyProvider:ow,createOnFrontendDataReadyProvider:oA,createOnBackendDataReadyProvider:oy,createOnRoutingReadyProvider:oE,createOnConfiguratorReadyProvider:oI,createOnPresetLoadedHandler:oS,createPresetUi:o2,createPresetPageAction:o1,createPresetDeviceNotSupported:o0,createLayoutFooter:oT,createAppLoader:oK,createCanvasLoader:oL,createLayoutDialog:oQ,createLayoutToolbarDesktop:oV,createLayoutToolbarDesktopFullScreen:oW,createLayoutToolbarReadDesktop:oX,createLayoutToolbarReadDesktopFullScreen:oY,createLayoutCustomOwnerUi:oN,createLayoutCustomReadUi:oO,createLayoutAdminUi:oM,createLayoutUserUi:oZ,createToolbarHelp:o$,createNotAuthenticatedPage:j,createConfigurationNotFoundPage:ox,createConfiguratorErrorPage:oh,createAddEntityFab:f,createDeleteEntityFab:c,createSelectionHotspot:x,createNavigationHotspot:l,createToolMenuFab:k,createTransformer:n,transformerBuilder:s(),useAnalytics:h,useAuthenticatedClient:F,useAuthorizedClient:G,useCreateAuthorizedClient:$,useAccessService:q,useConfigurationId:Q,useSession:e9,useSessionRole:oe,useSessionService:oo,useDomain:ei,useDomainApplication:en,useConfigurator:oj,useConfiguratorRouting:oq,usePresetSelection:oB,usePublishedData:eG,useFrontendData:ek,useBackendData:H,useDomainApplicationProps:es,useLoadedData:eB,useIntegrationService:eE,useIntegrationState:eb,usePresetEmbeddedState:eF,useRecipeEmbeddedState:eJ,useCommittedSlice:K,useRenderedSlice:eT,useCommittedState:L,useRenderedState:eV,useStoreSelector:oa,useRenderedSelector:eO,useStoreSelector$:om,useRenderedSelector$:eQ,useEntitySelector:ed,useRenderedEntitySelector:eM,useRootEntitySelector:e1,useRenderedRootEntitySelector:eN,useStateValidity:on,useMapViolationHints:ev,useNavigate:ez,usePopNavigate:eD,usePushNavigate:eH,useControlViolations:V,useFinalizeViolations:ec,useConfiguratorMessages:T,useFinalizeAction:ef,useFinalizeActions:eu,useComponent:M,useRenderedComponent:eK,useComponents:N,useRenderedComponents:eL,useFirstComponent:eg,useFirstRenderedComponent:el,useRootComponents:eY,useRootRenderedComponents:e3,useFirstRootComponent:ej,useFirstRootRenderedComponent:ex,useEntityState:em,useEntityRenderedState:ea,useRootEntityState:e2,useRootEntityRenderedState:e0,useRootEntityId:eZ,useRootEntityRenderedId:e_,useEntityPrice:ep,useRootEntityPrice:e$,useSelectedEntity:e7,useSelectedEntityId:e8,useSelectedDomainEntityId:e6,useSelectEntity:e4,useDeselect:eo,useSelectParent:e5,useHoveredEntity:eS,useHoveredEntityId:ew,useHoveredDomainEntityId:eC,useActiveNavigationState:B,useActiveViewState:R,useSetViewState:ot,useActiveToolState:P,useIsFullscreenActive:eq,useSetFullscreen:or,useResetCamera:o3,useUndoRedo:ou,useTabNavigation:od,useStepNavigation:os,useSceneSafeArea:o_,useActiveViewports:U,usePreview:oP,useCloseAction:ov,useIsCloningAllowed:oJ.useIsCloningAllowed,useResolveLocalizable:eX,useLocalizable:eh,useToolbarActions:oH,useMeasurements:oG,useLocaleSwitch:eU,useShareLinks:oi,useAssistantPanel:oF,useComposition:O,useUpdateControl:oc,useUpdatedControl:og,useCookRecipes:W,useCookedRecipes:Y,useCookReplaceRecipes:X,useCookedReplaceRecipes:Z,useDeleteEntity:_,useDeletedEntity:ee,useSwatchSelection:op,useTextValue:of,useAttributeSelection:z,useAttributeSwitch:D,useDistanceDimension:er,useDistanceDimensionSelection:et,useGenericDimension:eI,useAngleDimension:v,useChildEntitySelection:J,useGroupedRecipeOptions:eA,useReplaceEntityRecipeOptions:eW,useUpdateEntityObjectSelection:oD,useGenerateShareLink:ey,useLoadingState:eP,useLoadingStateValue:eR,usePropertyPageStack:oR,usePropertyPageState:oU,isCreateEntityUpdate:p,isReplaceEntityUpdate:d,isDeleteEntityUpdate:C,isAngleDimensionUpdate:y,isDistanceDimensionUpdate:S,isGenericDimensionUpdate:w,isAttributeSelectionUpdate:I,isAttributeSwitchUpdate:A,isTextValueUpdate:b,isSwatchSelectionUpdate:E});
@@ -1,2 +1,4 @@
1
+ export { FrontendAnalyticsFactory } from '#package/react-sdk';
1
2
  export { type ConfiguratorInterface, createConfiguratorInterface } from './configurator-interface.js';
2
- export { FrontendAnalyticsFactory } from './frontend-analytics.js';
3
+ export { type UseFinalizeAction, type UseFinalizeActionResult, useFinalizeAction } from '#package/react-sdk';
4
+ export { type UseResetCamera, useResetCamera } from './use-reset-camera.js';
@@ -1 +1 @@
1
- export{createConfiguratorInterface}from"./configurator-interface.js";export{FrontendAnalyticsFactory}from"./frontend-analytics.js";
1
+ export{FrontendAnalyticsFactory,useFinalizeAction}from"#package/react-sdk";export{createConfiguratorInterface}from"./configurator-interface.js";export{useResetCamera}from"./use-reset-camera.js";
@@ -0,0 +1,6 @@
1
+ export type UseResetCamera = () => () => void;
2
+ /**
3
+ * Hook to move the camera back to the framing of the active camera configuration, undoing what the user orbited,
4
+ * panned or zoomed. It does what the built-in toolbar's reset button does
5
+ */
6
+ export declare const useResetCamera: UseResetCamera;
@@ -0,0 +1 @@
1
+ import{useCallback as e}from"react";import{useConfigurator as r}from"../application-runtime/index.js";export const useResetCamera=()=>{let{cameraControlSystem:t}=r();return e(()=>{t.resetCamera()},[t])};
@@ -0,0 +1,12 @@
1
+ import { type ConfigurationNotFoundPageProps } from '#package/react-sdk';
2
+ /**
3
+ * The name a project registers a layout element under to replace the page shown when a configuration
4
+ * cannot be loaded or opened. Its default, the built-in `ConfigurationNotFoundPage`, is registered in
5
+ * `defaultConfiguratorElements`.
6
+ */
7
+ export declare const ConfigurationNotFoundPageName = "ConfigurationNotFoundPage";
8
+ /**
9
+ * Renders the `ConfigurationNotFoundPage` element. `onBack` is passed only where leaving the page leads
10
+ * somewhere, which is the start of the configurator.
11
+ */
12
+ export declare const ConfigurationNotFoundPageElement: (props: ConfigurationNotFoundPageProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ import{jsx as o}from"react/jsx-runtime";import{PhoenixLayoutElement as t}from"#package/react-sdk";export const ConfigurationNotFoundPageName="ConfigurationNotFoundPage";export const ConfigurationNotFoundPageElement=n=>o(t,{name:"ConfigurationNotFoundPage",elementProps:{...n}});
@@ -0,0 +1,9 @@
1
+ import { type PhoenixLayoutElementRegistration } from '#package/domain';
2
+ import type { ConfigurationNotFoundPageProps } from '#package/react-sdk';
3
+ /**
4
+ * Registers a project's "configuration not accessible" page as the `ConfigurationNotFoundPage`
5
+ * element, with its props typed. Registering a layout element under that name with
6
+ * `createCustomPhoenixLayoutElement` works too, but its component is typed as taking only `children`.
7
+ */
8
+ export declare const createConfigurationNotFoundPage: (Element: (props: ConfigurationNotFoundPageProps) => JSX.Element) => PhoenixLayoutElementRegistration;
9
+ export type CreateConfigurationNotFoundPage = (Element: (props: ConfigurationNotFoundPageProps) => JSX.Element) => PhoenixLayoutElementRegistration;
@@ -0,0 +1 @@
1
+ import{createCustomPhoenixLayoutElement as o}from"#package/domain";import{ConfigurationNotFoundPageName as t}from"./ConfigurationNotFoundPageElement.js";export const createConfigurationNotFoundPage=n=>o(t,n);
@@ -0,0 +1,2 @@
1
+ export { ConfigurationNotFoundPageElement, ConfigurationNotFoundPageName } from './ConfigurationNotFoundPageElement.js';
2
+ export { createConfigurationNotFoundPage, type CreateConfigurationNotFoundPage, } from './create-configuration-not-found-page.js';
@@ -0,0 +1 @@
1
+ export{ConfigurationNotFoundPageElement,ConfigurationNotFoundPageName}from"./ConfigurationNotFoundPageElement.js";export{createConfigurationNotFoundPage}from"./create-configuration-not-found-page.js";
@@ -0,0 +1,12 @@
1
+ import { type ReactNode } from 'react';
2
+ interface ConfiguratorResponsiveProviderProps {
3
+ readonly children: ReactNode;
4
+ readonly containerZIndex: number;
5
+ }
6
+ /**
7
+ * Gives the configurator its responsive state for as long as it is mounted, and renders the root
8
+ * container that measures itself into that state. The lifecycle reads the state from the runtime
9
+ * provider, the UI through `useResponsive()`.
10
+ */
11
+ export declare const ConfiguratorResponsiveProvider: (props: ConfiguratorResponsiveProviderProps) => import("react/jsx-runtime").JSX.Element;
12
+ export {};
@@ -0,0 +1 @@
1
+ import{jsx as r}from"react/jsx-runtime";import{useState as e}from"react";import{ResponsiveStateManager as o,ResponsiveStateProvider as t}from"#package/react-sdk";import{ResponsiveApplicationProvider as a}from"#package/ui-sdk";export const ConfiguratorResponsiveProvider=i=>{let{children:n,containerZIndex:m}=i,[c]=e(()=>new o);return r(t,{manager:c,children:r(a,{containerZIndex:m,store:c,children:n})})};
@@ -1 +1 @@
1
- import{jsx as e}from"react/jsx-runtime";import{Button as t}from"@mui/material";import{useMutation as r}from"@tanstack/react-query";import{useSnackbar as i}from"notistack";import{useSubscription as o}from"observable-hooks";import{createContext as s,useCallback as n,useContext as a,useEffect as l,useMemo as m,useState as d}from"react";import{skip as p}from"rxjs";import{match as c}from"ts-pattern";import{AuthorizedClient as g,LocalStorageAuthorizedPhoenixApiClient as u,MemoryAuthorizedPhoenixApiClient as f}from"#package/client";import{SYSTEM_CHUNK_KEY as h,standardWebComponentProperties as y}from"#package/domain";import{ApplicationRoutes as P,useAnalyticsService as v,useAuthenticatedClient as w,useConfiguratorDomainFactory as x,useEagerObservableValue as C,useIsDev as T,useLogger as k,usePersistenceConfig as D,usePublishedData as S,useResolveLocalizable as E,useRoutingSelectors as b,useSessionService as A,useSpecPresetSeed as j,useWebComponentProperty$ as I}from"#package/react-sdk";import{FrontendAnalyticsFactory as V}from"../common/frontend-analytics.js";import{useOnPresetLoadedHandler as $}from"./OnPresetLoadedHandler.js";import{useConfiguratorRouting as F}from"./configurator-routing/index.js";let M={id:"sdk.presets.create.error.message",message:"Could not start configuring from this preset. Please try again."},R={id:"sdk.presets.create.error.dismiss.label",message:"Dismiss"},q="phx-preset-creation-error";export const PresetSelectionContext=s(null);export const usePresetSelection=()=>{let e=a(PresetSelectionContext);if(null===e)throw Error("usePresetSelection must be used within a PresetSelectionProvider!");return e};let z=e=>t=>null===e||void 0!==t.tags&&t.tags.some(t=>e.includes(t));export const PresetSelectionProvider=s=>{let{children:a}=s,[H,L]=d(null),[O,U]=d(null),B=j(),G=w(),J=v(),K=D(),N=x(),Q=T(),W=E(),{requestSessionToken:X}=A(),Y=k(),Z=F(),_=b(),ee=S(),{enqueueSnackbar:et,closeSnackbar:er}=i(),ei=I(y.presetTags),eo=C(ei),es=$();o(m(()=>ei.pipe(p(1)),[ei]),()=>{_.getRoutingState().route!==P.Index&&Z.goToIndex()}),l(()=>{U(null),er(q)},[Q,er]);let{mutate:en}=r({mutationFn:n(async e=>{let{getData:t,name:r}=e,{rootEntityType:i,entities:o,modelVersion:s}=await t(),n=N.validateAndMigrateState(o,s);J.push(V.ProductSelected(i,W(r)));let a=es?await es(n):n;return G.createConfiguration({rootEntityType:i,data:a})},[N,J,W,G,es]),onSuccess:e=>{Z.goToConfigurationDetail(e.configurationId,e.accessToken)},onError:(e,t)=>{Y.error("Failed to create a new configuration from a preset!",{name:t.name},e),U(e)},onSettled:()=>{L(null)}}),ea=m(()=>{let e,t=(e=h in ee?ee[h].presetCategories:ee.presetCategories,{publishedPresetCategories:(e??[]).map(e=>({...e,presets:e.presets.filter(z(eo))})).filter(e=>e.presets.length>0),seedPresets:B.filter(z(eo))});return t.publishedPresetCategories.length>0?t.publishedPresetCategories.map(e=>({id:e.id,name:e.name,description:e.description,img:e.img,imgAlt:e.imgAlt,presets:e.presets.map(e=>({id:e.configurationId,name:e.name,description:e.description,img:e?.img,imgAlt:e?.imgAlt,detailTitle:e?.detailTitle,detailDescription:e?.detailDescription,getData:async()=>{let t=c(K).with({type:"server"},t=>new g(t.serverUrl,()=>e.readToken,X)).with({type:"local-storage"},()=>new u(N.modelVersion)).with({type:"memory"},()=>new f(N.modelVersion)).exhaustive(),r=await t.getConfigurationRevision(e.configurationId,e.revisionId);return{entities:r.data,rootEntityType:r.rootEntityType,modelVersion:r.modelVersion}}}))})):t.seedPresets.length>0?[{id:"Default",name:"Default Category",presets:t.seedPresets.map((e,t)=>({id:`${t}`,name:e.name??`${e.rootEntityType} preset - ${t}`,description:e.description??"",img:e.img,imgAlt:e.imgAlt,detailTitle:e.detailTitle,detailDescription:e.detailDescription,getData:async()=>({entities:e.initialDomainEntities,rootEntityType:e.rootEntityType,modelVersion:N.modelVersion})}))}]:[]},[ee,X,K,N,eo,B]),el=m(()=>ea.flatMap(e=>e.presets),[ea]),em=n(r=>{let i=el.find(e=>e.id===r);if(void 0===i)throw Error(`Preset with id ${r} not found!`);let{getData:o,name:s}=i,n=!Q&&el.length>1;U(null),L(r),en({getData:o,name:s},{onError:()=>{n&&(er(q),et(W(M),{variant:"error",key:q,persist:!0,preventDuplicate:!0,action:r=>e(t,{color:"inherit",size:"small",onClick:()=>{U(null),er(r)},children:W(R)})}))}})},[el,Q,en,et,er,W]),ed=el.length>1,ep=m(()=>({hasMultiplePresets:ed,presetCategories:ea,selectPreset:em,selectionError:O,creatingPresetId:H}),[em,ed,ea,O,H]);return e(PresetSelectionContext.Provider,{value:ep,children:a})};
1
+ import{jsx as e}from"react/jsx-runtime";import{Button as t}from"@mui/material";import{useMutation as r}from"@tanstack/react-query";import{useSnackbar as i}from"notistack";import{useSubscription as o}from"observable-hooks";import{createContext as s,useCallback as n,useContext as a,useEffect as l,useMemo as m,useState as d}from"react";import{skip as p}from"rxjs";import{match as c}from"ts-pattern";import{AuthorizedClient as g,LocalStorageAuthorizedPhoenixApiClient as u,MemoryAuthorizedPhoenixApiClient as f}from"#package/client";import{SYSTEM_CHUNK_KEY as h,standardWebComponentProperties as y}from"#package/domain";import{ApplicationRoutes as P,FrontendAnalyticsFactory as v,useAnalyticsService as w,useAuthenticatedClient as x,useConfiguratorDomainFactory as C,useEagerObservableValue as T,useIsDev as k,useLogger as D,usePersistenceConfig as S,usePublishedData as E,useResolveLocalizable as b,useRoutingSelectors as A,useSessionService as I,useSpecPresetSeed as V,useWebComponentProperty$ as j}from"#package/react-sdk";import{useOnPresetLoadedHandler as $}from"./OnPresetLoadedHandler.js";import{useConfiguratorRouting as F}from"./configurator-routing/index.js";let M={id:"sdk.presets.create.error.message",message:"Could not start configuring from this preset. Please try again."},R={id:"sdk.presets.create.error.dismiss.label",message:"Dismiss"},q="phx-preset-creation-error";export const PresetSelectionContext=s(null);export const usePresetSelection=()=>{let e=a(PresetSelectionContext);if(null===e)throw Error("usePresetSelection must be used within a PresetSelectionProvider!");return e};let z=e=>t=>null===e||void 0!==t.tags&&t.tags.some(t=>e.includes(t));export const PresetSelectionProvider=s=>{let{children:a}=s,[H,L]=d(null),[O,U]=d(null),B=V(),G=x(),J=w(),K=S(),N=C(),Q=k(),W=b(),{requestSessionToken:X}=I(),Y=D(),Z=F(),_=A(),ee=E(),{enqueueSnackbar:et,closeSnackbar:er}=i(),ei=j(y.presetTags),eo=T(ei),es=$();o(m(()=>ei.pipe(p(1)),[ei]),()=>{_.getRoutingState().route!==P.Index&&Z.goToIndex()}),l(()=>{U(null),er(q)},[Q,er]);let{mutate:en}=r({mutationFn:n(async e=>{let{getData:t,name:r}=e,{rootEntityType:i,entities:o,modelVersion:s}=await t(),n=N.validateAndMigrateState(o,s);J.push(v.ProductSelected(i,W(r)));let a=es?await es(n):n;return G.createConfiguration({rootEntityType:i,data:a})},[N,J,W,G,es]),onSuccess:e=>{Z.goToConfigurationDetail(e.configurationId,e.accessToken)},onError:(e,t)=>{Y.error("Failed to create a new configuration from a preset!",{name:t.name},e),U(e)},onSettled:()=>{L(null)}}),ea=m(()=>{let e,t=(e=h in ee?ee[h].presetCategories:ee.presetCategories,{publishedPresetCategories:(e??[]).map(e=>({...e,presets:e.presets.filter(z(eo))})).filter(e=>e.presets.length>0),seedPresets:B.filter(z(eo))});return t.publishedPresetCategories.length>0?t.publishedPresetCategories.map(e=>({id:e.id,name:e.name,description:e.description,img:e.img,imgAlt:e.imgAlt,presets:e.presets.map(e=>({id:e.configurationId,name:e.name,description:e.description,img:e?.img,imgAlt:e?.imgAlt,detailTitle:e?.detailTitle,detailDescription:e?.detailDescription,getData:async()=>{let t=c(K).with({type:"server"},t=>new g(t.serverUrl,()=>e.readToken,X)).with({type:"local-storage"},()=>new u(N.modelVersion)).with({type:"memory"},()=>new f(N.modelVersion)).exhaustive(),r=await t.getConfigurationRevision(e.configurationId,e.revisionId);return{entities:r.data,rootEntityType:r.rootEntityType,modelVersion:r.modelVersion}}}))})):t.seedPresets.length>0?[{id:"Default",name:"Default Category",presets:t.seedPresets.map((e,t)=>({id:`${t}`,name:e.name??`${e.rootEntityType} preset - ${t}`,description:e.description??"",img:e.img,imgAlt:e.imgAlt,detailTitle:e.detailTitle,detailDescription:e.detailDescription,getData:async()=>({entities:e.initialDomainEntities,rootEntityType:e.rootEntityType,modelVersion:N.modelVersion})}))}]:[]},[ee,X,K,N,eo,B]),el=m(()=>ea.flatMap(e=>e.presets),[ea]),em=n(r=>{let i=el.find(e=>e.id===r);if(void 0===i)throw Error(`Preset with id ${r} not found!`);let{getData:o,name:s}=i,n=!Q&&el.length>1;U(null),L(r),en({getData:o,name:s},{onError:()=>{n&&(er(q),et(W(M),{variant:"error",key:q,persist:!0,preventDuplicate:!0,action:r=>e(t,{color:"inherit",size:"small",onClick:()=>{U(null),er(r)},children:W(R)})}))}})},[el,Q,en,et,er,W]),ed=el.length>1,ep=m(()=>({hasMultiplePresets:ed,presetCategories:ea,selectPreset:em,selectionError:O,creatingPresetId:H}),[em,ed,ea,O,H]);return e(PresetSelectionContext.Provider,{value:ep,children:a})};
@@ -1 +1 @@
1
- import{jsx as e}from"react/jsx-runtime";import{createContext as r,useCallback as t,useContext as o,useEffect as i,useMemo as a,useState as n}from"react";import{match as s}from"ts-pattern";import{standardWebComponentProperties as d}from"#package/domain";import{useWebComponentPropertyState as m,useWebComponentPropertyValue as p}from"#package/react-sdk";import{useResponsive as u}from"#package/ui-sdk";let w=r(null);export const PreviewContextProvider=r=>{let{children:o,preview:h,alwaysExpand:v}=r,[c,f]=n(!0),[x,l]=m(d.expanded),P=p(d.mode),g=p(d.power),{isMobile:k,expand:C,collapse:b,show:j,hide:y}=u(),E=t(()=>{f(!1),(v||k)&&l(!0)},[k,v,l]),q=t(()=>{f(!0),l(!1)},[l]),z=a(()=>!!x||"configurator"===P&&s(h).with("hide",()=>!1).with("never",()=>!1).with("always",()=>!0).with("auto",()=>k).exhaustive(),[h,x,k,P]),A=!x&&z&&c,B="hide"===h&&!x&&"configurator"===P,D=a(()=>({isPreview:A,isExpanded:x,enter:E,leave:q,isPreviewEnabled:z,isHidden:B}),[A,x,E,q,z,B]),F=s(g).with("on",()=>!0).with("standby","off",()=>!1).exhaustive();return i(()=>{x&&F?C():b()},[x,C,b,F]),i(()=>{B?y():j()},[B,y,j]),e(w.Provider,{value:D,children:o})};export const usePreview=()=>{let e=o(w);if(!e)throw Error("Context was not provided - usePreview must be used inside PreviewContext provider");return e};
1
+ import{jsx as e}from"react/jsx-runtime";import{createContext as r,useCallback as t,useContext as o,useEffect as i,useMemo as a,useState as n}from"react";import{match as s}from"ts-pattern";import{standardWebComponentProperties as d}from"#package/domain";import{useResponsiveState as m,useResponsiveStateManager as p,useWebComponentPropertyState as u,useWebComponentPropertyValue as w}from"#package/react-sdk";let h=r(null);export const PreviewContextProvider=r=>{let{children:o,preview:v,alwaysExpand:c}=r,[f,x]=n(!0),[l,P]=u(d.expanded),g=w(d.mode),k=w(d.power),{isMobile:C}=m(),{expand:b,collapse:j,show:y,hide:E}=p(),q=t(()=>{x(!1),(c||C)&&P(!0)},[C,c,P]),z=t(()=>{x(!0),P(!1)},[P]),A=a(()=>!!l||"configurator"===g&&s(v).with("hide",()=>!1).with("never",()=>!1).with("always",()=>!0).with("auto",()=>C).exhaustive(),[v,l,C,g]),B=!l&&A&&f,D="hide"===v&&!l&&"configurator"===g,F=a(()=>({isPreview:B,isExpanded:l,enter:q,leave:z,isPreviewEnabled:A,isHidden:D}),[B,l,q,z,A,D]),G=s(k).with("on",()=>!0).with("standby","off",()=>!1).exhaustive();return i(()=>{l&&G?b():j()},[l,b,j,G]),i(()=>{D?E():y()},[D,E,y]),e(h.Provider,{value:F,children:o})};export const usePreview=()=>{let e=o(h);if(!e)throw Error("Context was not provided - usePreview must be used inside PreviewContext provider");return e};
@@ -1,6 +1,6 @@
1
1
  import type { Viewport } from '#package/domain';
2
- import { type ResponsiveInfo } from '#package/ui-sdk';
3
- type ViewportFlags = Pick<ResponsiveInfo, 'isPhone' | 'isMobile' | 'isTablet' | 'isDesktop' | 'isLandscape' | 'isPortrait'>;
2
+ import { type ResponsiveState } from '#package/react-sdk';
3
+ type ViewportFlags = Pick<ResponsiveState, 'isPhone' | 'isMobile' | 'isTablet' | 'isDesktop' | 'isLandscape' | 'isPortrait'>;
4
4
  /**
5
5
  * Maps the responsive flags of the configurator container to the viewport classes stored in the domain.
6
6
  */
@@ -1 +1 @@
1
- import{useEffect as t,useRef as e}from"react";import{useDomain as r}from"#package/react-sdk";import{useResponsive as o}from"#package/ui-sdk";let i=[["isPhone","phone"],["isMobile","mobile"],["isTablet","tablet"],["isDesktop","desktop"],["isLandscape","landscape"],["isPortrait","portrait"]];export const getActiveViewports=t=>i.filter(([e])=>t[e]).map(([,t])=>t);export const ViewportStateSync=()=>{let{storeSystem:i,navigationSystem:p}=r(),{isPhone:a,isMobile:l,isTablet:n,isDesktop:s,isLandscape:c,isPortrait:m}=o(),g=e(null);return t(()=>{let t,e=getActiveViewports({isPhone:a,isMobile:l,isTablet:n,isDesktop:s,isLandscape:c,isPortrait:m});0===e.length||(t=g.current,null!==t&&t.length===e.length&&t.every((t,r)=>t===e[r]))||(g.current=e,i.stageAndCommit([p.getViewportUpdate(e)]))},[a,l,n,s,c,m,i,p]),null};
1
+ import{useEffect as t,useRef as e}from"react";import{useDomain as r,useResponsiveState as o}from"#package/react-sdk";let i=[["isPhone","phone"],["isMobile","mobile"],["isTablet","tablet"],["isDesktop","desktop"],["isLandscape","landscape"],["isPortrait","portrait"]];export const getActiveViewports=t=>i.filter(([e])=>t[e]).map(([,t])=>t);export const ViewportStateSync=()=>{let{storeSystem:i,navigationSystem:l}=r(),{isPhone:n,isMobile:p,isTablet:a,isDesktop:s,isLandscape:c,isPortrait:g}=o(),m=e(null);return t(()=>{let t,e=getActiveViewports({isPhone:n,isMobile:p,isTablet:a,isDesktop:s,isLandscape:c,isPortrait:g});0===e.length||(t=m.current,null!==t&&t.length===e.length&&t.every((t,r)=>t===e[r]))||(m.current=e,i.stageAndCommit([l.getViewportUpdate(e)]))},[n,p,a,s,c,g,i,l]),null};