@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
@@ -0,0 +1,12 @@
1
+ import { ImplementationError } from '../../errors/index.js';
2
+ import type { ElementRegistration } from './element-registration.js';
3
+ /**
4
+ * The mistakes in pairing the project's assistant form elements with their components: an element
5
+ * the YAML declares under `assistant.formElements` that no file in `src/elements/` registers, or
6
+ * that two register, and a registration of a name the YAML does not declare. Spec parsing cannot
7
+ * see which name a file registers, so the application checks this when it starts and on every hot
8
+ * reload, on the registrations of all element files together.
9
+ */
10
+ export declare const findAssistantFormElementErrors: (formElements: ReadonlyArray<{
11
+ readonly name: string;
12
+ }>, elements: readonly ElementRegistration[]) => readonly ImplementationError[];
@@ -0,0 +1 @@
1
+ import{ImplementationError as e}from"../../errors/index.js";export const findAssistantFormElementErrors=(t,n)=>{let s=n.flatMap(e=>"assistantFormElement"===e.type?[e.name]:[]),r=new Set(t.map(({name:e})=>e));return[...t.flatMap(({name:t})=>{let n=s.filter(e=>e===t).length;return 0===n?[new e({code:"MISSING_IMPLEMENTATION",origin:null,problem:`The assistant form element "${t}" declared under assistant.formElements has no component`,fix:`Add a file to src/elements/ that default-exports phx.frontend.createAssistantFormElement('${t}', Component), or remove the element from the YAML.`})]:n>1?[new e({code:"DUPLICATE_DEFINITION",origin:null,problem:`The assistant form element "${t}" is registered by ${n} files in src/elements/`,fix:`Each element has one component. Keep one phx.frontend.createAssistantFormElement('${t}', …) and remove the others.`})]:[]}),...[...new Set(s)].filter(e=>!r.has(e)).map(t=>new e({code:"MISSING_IMPLEMENTATION",origin:null,problem:`A file in src/elements/ registers the assistant form element "${t}", which assistant.formElements does not declare`,fix:`Declare "${t}" under assistant.formElements with its description, role and attributes, so the assistant knows the element, or remove the registration.`}))]};
@@ -1,5 +1,6 @@
1
- export { type PhoenixEntityElementProps, type PhoenixEntityElementRegistration, type PhoenixLayoutElementRegistration, type PhoenixIconRegistration, type ElementRegistration, type CustomPhoenixEntityElementProps, type PhoenixLayoutElementDefinition, type PhoenixEntityElementDefinition, type CreateCustomPhoenixLayoutElement, type CreateCustomPhoenixEntityElement, createPhoenixLayoutElement, createPhoenixEntityElement, createCustomPhoenixLayoutElement, createCustomPhoenixEntityElement, resolveElementModule, resolveElementModules, systemElementRegistry, } from './element-registration.js';
1
+ export { type PhoenixEntityElementProps, type PhoenixEntityElementRegistration, type PhoenixLayoutElementRegistration, type PhoenixIconRegistration, type AssistantFormElementRegistration, type ElementRegistration, type CustomPhoenixEntityElementProps, type PhoenixLayoutElementDefinition, type PhoenixEntityElementDefinition, type CreateCustomPhoenixLayoutElement, type CreateCustomPhoenixEntityElement, createPhoenixLayoutElement, createPhoenixEntityElement, createCustomPhoenixLayoutElement, createCustomPhoenixEntityElement, createAssistantFormElement, resolveElementModule, resolveElementModules, } from './element-registration.js';
2
2
  export { type PhoenixHandlerDefinition, type SystemPhoenixHandlerDefinition, type PhoenixHandlerRegistration, type SystemPhoenixHandlerRegistration, type SystemPhoenixAsyncHandlerDefinition, type SystemPhoenixAsyncHandlerRegistration, type HandlerRegistration, type CreatePhoenixHandler, createPhoenixHandler, createSystemPhoenixHandler, createSystemPhoenixAsyncHandler, resolveHandlerModule, resolveHandlerModules, } from './handler-registration.js';
3
+ export { findAssistantFormElementErrors } from './find-assistant-form-element-errors.js';
3
4
  export { type ProjectModule } from './project-modules.js';
4
5
  export { resolveActionModules } from './resolve-action-modules.js';
5
6
  export { resolveComponentOpticModules } from './resolve-component-optic-modules.js';
@@ -1 +1 @@
1
- export{createPhoenixLayoutElement,createPhoenixEntityElement,createCustomPhoenixLayoutElement,createCustomPhoenixEntityElement,resolveElementModule,resolveElementModules,systemElementRegistry}from"./element-registration.js";export{createPhoenixHandler,createSystemPhoenixHandler,createSystemPhoenixAsyncHandler,resolveHandlerModule,resolveHandlerModules}from"./handler-registration.js";export{resolveActionModules}from"./resolve-action-modules.js";export{resolveComponentOpticModules}from"./resolve-component-optic-modules.js";export{resolveExpressionModules}from"./resolve-expression-modules.js";export{resolveImportedTransformers,resolveTransformerModule,resolveTransformerModules}from"./resolve-imported-transformers.js";export{resolveInvariantModules}from"./resolve-invariant-modules.js";
1
+ export{createPhoenixLayoutElement,createPhoenixEntityElement,createCustomPhoenixLayoutElement,createCustomPhoenixEntityElement,createAssistantFormElement,resolveElementModule,resolveElementModules}from"./element-registration.js";export{createPhoenixHandler,createSystemPhoenixHandler,createSystemPhoenixAsyncHandler,resolveHandlerModule,resolveHandlerModules}from"./handler-registration.js";export{findAssistantFormElementErrors}from"./find-assistant-form-element-errors.js";export{resolveActionModules}from"./resolve-action-modules.js";export{resolveComponentOpticModules}from"./resolve-component-optic-modules.js";export{resolveExpressionModules}from"./resolve-expression-modules.js";export{resolveImportedTransformers,resolveTransformerModule,resolveTransformerModules}from"./resolve-imported-transformers.js";export{resolveInvariantModules}from"./resolve-invariant-modules.js";
@@ -1,4 +1,4 @@
1
- import type { PropsWithChildren } from 'react';
1
+ import type { ComponentType, PropsWithChildren } from 'react';
2
2
  import { type CustomPhoenixEntityElementProps, type PhoenixHandlerDefinition, type SystemPhoenixAsyncHandlerDefinition, type SystemPhoenixHandlerDefinition } from './module-checks/index.js';
3
3
  import type { ApplicationSpec } from './types.js';
4
4
  /**
@@ -46,6 +46,7 @@ export declare const createSpecSelectors: (context: Context) => {
46
46
  selectElementSlots: import("@salsita-ai/common/utils").Selector<SpecSelectorState, {
47
47
  entityElements: Record<string, (props: CustomPhoenixEntityElementProps) => JSX.Element>;
48
48
  layoutElements: Record<string, (props: PropsWithChildren) => JSX.Element>;
49
+ assistantFormElements: Record<string, ComponentType<never>>;
49
50
  hashes: Record<string, string>;
50
51
  }>;
51
52
  selectDataConfig: import("@salsita-ai/common/utils").Selector<SpecSelectorState, import("../../index.js").DataSpec | null>;
@@ -89,6 +90,7 @@ export declare const createSpecSelectors: (context: Context) => {
89
90
  getElementSlots: () => {
90
91
  entityElements: Record<string, (props: CustomPhoenixEntityElementProps) => JSX.Element>;
91
92
  layoutElements: Record<string, (props: PropsWithChildren) => JSX.Element>;
93
+ assistantFormElements: Record<string, ComponentType<never>>;
92
94
  hashes: Record<string, string>;
93
95
  };
94
96
  getDataConfig: () => import("../../index.js").DataSpec | null;
@@ -1 +1 @@
1
- import{createSelector as e}from"@salsita-ai/common/utils";import{buildAssistantManifest as t}from"../../application/assistant/index.js";import{systemElementRegistry as n}from"./module-checks/index.js";export const createSpecSelectors=a=>{let{getState:s}=a,r=e.withTypes(),o=r([r.leaf(e=>e.spec)],e=>e),l=r([o],e=>e.version),i=r([o],e=>e.baseResourcesUrl),m=r([o],e=>e.configurator),g=r([o],e=>e.dataConfig),p=r([o],e=>e.chunks),d=r([o],e=>e.publishedDataHash),c=r([o],e=>e.initialPublishedData),u=r([o],e=>e.canCreate),h=r([o],e=>e.enableAdminRelease),y=r([o],e=>e.textLanguages),f=r([m],e=>e.modelVersion),C=r([o],e=>e.admin),x=r([C],e=>e.preset),A=r([C],e=>e.modelVersion),E=r([m],e=>e.theme),b=r([m],e=>e.assistant),H=r([b],e=>e?t(e):null),D=r([m],e=>e.factory),P=r([C],e=>e.factory),S=r([m],e=>e.componentOptics),w=r([C],e=>e.componentOptics),O=r([m],e=>e.appLoader),T=r([m],e=>e.preview),V=r([m],e=>e.alwaysExpand),L=r([m],e=>e.presets),R=r([m],e=>e.deploymentQueryDisabled),U=r([m],e=>e.prefetchTextureUrls),k=r([m],e=>e.handlerHashes),v=r([m],e=>e.handlers),j=r([v,k],(e,t)=>({...(e=>{let t={},n={},a={};for(let s of e)"phoenix"===s.type&&(t[s.name]=s.handler),"system"===s.type&&(n[s.name]=s.handler),"system-async"===s.type&&(a[s.name]=s.handler);return{handlers:t,systemHandlers:n,systemAsyncHandlers:a}})(e),hashes:t})),F=r([m],e=>e.elementHashes),M=r([m],e=>e.elements),Q=r([M,F],(e,t)=>({...(e=>{let t={},a={};for(let n of e)"layout"===n.type&&(t[n.name]=n.element),"entity"===n.type&&(a[n.name]=n.element);return{entityElements:{...n.entityElements,...a},layoutElements:{...n.layoutElements,...t}}})(e),hashes:t}));return{selectSpec:o,selectVersion:l,selectBaseResourcesUrl:i,selectConfiguratorSpec:m,selectConfiguratorModelVersion:f,selectAdminSpec:C,selectAdminPreset:x,selectAdminModelVersion:A,selectThemeOptions:E,selectAssistant:H,selectConfiguratorFactory:D,selectAdminFactory:P,selectConfiguratorComponentOptics:S,selectAdminComponentOptics:w,selectAppLoader:O,selectPreview:T,selectAlwaysExpand:V,selectPresetSeed:L,selectDeploymentQueryDisabled:R,selectPrefetchTextureUrls:U,selectTextLanguages:y,selectHandlerHashes:k,selectHandlers:v,selectHandlerSlots:j,selectElementHashes:F,selectElements:M,selectElementSlots:Q,selectDataConfig:g,selectChunks:p,selectPublishedDataHash:d,selectInitialPublishedData:c,selectCanCreate:u,selectEnableAdminRelease:h,getVersion:()=>l(s()),getBaseResourcesUrl:()=>i(s()),getConfiguratorSpec:()=>m(s()),getConfiguratorModelVersion:()=>f(s()),getAdminSpec:()=>C(s()),getAdminPreset:()=>x(s()),getAdminModelVersion:()=>A(s()),getThemeOptions:()=>E(s()),getAssistant:()=>H(s()),getConfiguratorFactory:()=>D(s()),getAdminFactory:()=>P(s()),getConfiguratorComponentOptics:()=>S(s()),getAdminComponentOptics:()=>w(s()),getAppLoader:()=>O(s()),getPreview:()=>T(s()),getAlwaysExpand:()=>V(s()),getPresetSeed:()=>L(s()),getDeploymentQueryDisabled:()=>R(s()),getPrefetchTextureUrls:()=>U(s()),getTextLanguages:()=>y(s()),getHandlerHashes:()=>k(s()),getHandlers:()=>v(s()),getHandlerSlots:()=>j(s()),getElementHashes:()=>F(s()),getElements:()=>M(s()),getElementSlots:()=>Q(s()),getDataConfig:()=>g(s()),getChunks:()=>p(s()),getPublishedDataHash:()=>d(s()),getInitialPublishedData:()=>c(s()),getCanCreate:()=>u(s()),getEnableAdminRelease:()=>h(s())}};
1
+ import{createSelector as e}from"@salsita-ai/common/utils";import{buildAssistantManifest as t}from"../../application/assistant/index.js";export const createSpecSelectors=a=>{let{getState:n}=a,s=e.withTypes(),r=s([s.leaf(e=>e.spec)],e=>e),l=s([r],e=>e.version),o=s([r],e=>e.baseResourcesUrl),i=s([r],e=>e.configurator),m=s([r],e=>e.dataConfig),g=s([r],e=>e.chunks),p=s([r],e=>e.publishedDataHash),d=s([r],e=>e.initialPublishedData),c=s([r],e=>e.canCreate),u=s([r],e=>e.enableAdminRelease),h=s([r],e=>e.textLanguages),y=s([i],e=>e.modelVersion),f=s([r],e=>e.admin),C=s([f],e=>e.preset),E=s([f],e=>e.modelVersion),A=s([i],e=>e.theme),b=s([i],e=>e.assistant),x=s([b],e=>e?t(e):null),H=s([i],e=>e.factory),D=s([f],e=>e.factory),P=s([i],e=>e.componentOptics),S=s([f],e=>e.componentOptics),w=s([i],e=>e.appLoader),O=s([i],e=>e.preview),T=s([i],e=>e.alwaysExpand),V=s([i],e=>e.presets),F=s([i],e=>e.deploymentQueryDisabled),L=s([i],e=>e.prefetchTextureUrls),R=s([i],e=>e.handlerHashes),U=s([i],e=>e.handlers),v=s([U,R],(e,t)=>({...(e=>{let t={},a={},n={};for(let s of e)"phoenix"===s.type&&(t[s.name]=s.handler),"system"===s.type&&(a[s.name]=s.handler),"system-async"===s.type&&(n[s.name]=s.handler);return{handlers:t,systemHandlers:a,systemAsyncHandlers:n}})(e),hashes:t})),k=s([i],e=>e.elementHashes),M=s([i],e=>e.elements),Q=s([i],e=>e.defaultElements),j=s([Q,M,k],(e,t,a)=>({...(e=>{let t={},a={},n={};for(let s of e)"layout"===s.type&&(t[s.name]=s.element),"entity"===s.type&&(a[s.name]=s.element),"assistantFormElement"===s.type&&(n[s.name]=s.element);return{entityElements:a,layoutElements:t,assistantFormElements:n}})([...e,...t]),hashes:a}));return{selectSpec:r,selectVersion:l,selectBaseResourcesUrl:o,selectConfiguratorSpec:i,selectConfiguratorModelVersion:y,selectAdminSpec:f,selectAdminPreset:C,selectAdminModelVersion:E,selectThemeOptions:A,selectAssistant:x,selectConfiguratorFactory:H,selectAdminFactory:D,selectConfiguratorComponentOptics:P,selectAdminComponentOptics:S,selectAppLoader:w,selectPreview:O,selectAlwaysExpand:T,selectPresetSeed:V,selectDeploymentQueryDisabled:F,selectPrefetchTextureUrls:L,selectTextLanguages:h,selectHandlerHashes:R,selectHandlers:U,selectHandlerSlots:v,selectElementHashes:k,selectElements:M,selectElementSlots:j,selectDataConfig:m,selectChunks:g,selectPublishedDataHash:p,selectInitialPublishedData:d,selectCanCreate:c,selectEnableAdminRelease:u,getVersion:()=>l(n()),getBaseResourcesUrl:()=>o(n()),getConfiguratorSpec:()=>i(n()),getConfiguratorModelVersion:()=>y(n()),getAdminSpec:()=>f(n()),getAdminPreset:()=>C(n()),getAdminModelVersion:()=>E(n()),getThemeOptions:()=>A(n()),getAssistant:()=>x(n()),getConfiguratorFactory:()=>H(n()),getAdminFactory:()=>D(n()),getConfiguratorComponentOptics:()=>P(n()),getAdminComponentOptics:()=>S(n()),getAppLoader:()=>w(n()),getPreview:()=>O(n()),getAlwaysExpand:()=>T(n()),getPresetSeed:()=>V(n()),getDeploymentQueryDisabled:()=>F(n()),getPrefetchTextureUrls:()=>L(n()),getTextLanguages:()=>h(n()),getHandlerHashes:()=>R(n()),getHandlers:()=>U(n()),getHandlerSlots:()=>v(n()),getElementHashes:()=>k(n()),getElements:()=>M(n()),getElementSlots:()=>j(n()),getDataConfig:()=>m(n()),getChunks:()=>g(n()),getPublishedDataHash:()=>p(n()),getInitialPublishedData:()=>d(n()),getCanCreate:()=>c(n()),getEnableAdminRelease:()=>u(n())}};
@@ -35,6 +35,8 @@ export interface ApplicationConfiguratorSpec {
35
35
  */
36
36
  readonly handlerHashes: Record<string, string>;
37
37
  readonly elements: readonly ElementRegistration[];
38
+ /** The SDK's default element registrations; an entry of `elements` with the same name replaces one. */
39
+ readonly defaultElements: readonly ElementRegistration[];
38
40
  /**
39
41
  * Per-element content hash. Used as remount key so only the specific element
40
42
  * whose source changed remounts. Unchanged elements keep their hash and stay mounted.
@@ -83,6 +83,7 @@ export declare const createMockDomainRuntime: <ENTITIES extends DomainEntity<str
83
83
  selectElementSlots: import("@salsita-ai/common/utils").Selector<import("../index.js").SpecSelectorState, {
84
84
  entityElements: Record<string, (props: import("../index.js").CustomPhoenixEntityElementProps) => JSX.Element>;
85
85
  layoutElements: Record<string, (props: import("react").PropsWithChildren) => JSX.Element>;
86
+ assistantFormElements: Record<string, import("react").ComponentType<never>>;
86
87
  hashes: Record<string, string>;
87
88
  }>;
88
89
  selectDataConfig: import("@salsita-ai/common/utils").Selector<import("../index.js").SpecSelectorState, import("../index.js").DataSpec | null>;
@@ -126,6 +127,7 @@ export declare const createMockDomainRuntime: <ENTITIES extends DomainEntity<str
126
127
  getElementSlots: () => {
127
128
  entityElements: Record<string, (props: import("../index.js").CustomPhoenixEntityElementProps) => JSX.Element>;
128
129
  layoutElements: Record<string, (props: import("react").PropsWithChildren) => JSX.Element>;
130
+ assistantFormElements: Record<string, import("react").ComponentType<never>>;
129
131
  hashes: Record<string, string>;
130
132
  };
131
133
  getDataConfig: () => import("../index.js").DataSpec | null;
@@ -1 +1 @@
1
- import{EnhancedLocalizableSchema as e}from"@salsita-ai/common/utils";import{DomainEntityIdSchema as t,SystemComponentBuilder as i}from"../core/index.js";import{recipeSchema as o}from"./common/recipes.js";export const childEntitySelectionComponent=i.component("childEntitySelection").withState({type:"object",tsType:"ChildEntitySelectionComponentState",import:[{module:"@salsita-ai/sdk/domain",member:"ChildEntitySelectionComponentState"}],properties:{value:t,options:{type:"array",items:{type:"object",properties:{label:e,description:e,img:e,recipes:{type:"array",items:o},keepChildren:{type:"boolean"}},required:["recipes","label"],additionalProperties:!0}}},required:["value","options"],additionalProperties:!1}).build();
1
+ import{EnhancedLocalizableSchema as e}from"@salsita-ai/common/utils";import{DomainEntityIdSchema as t,SystemComponentBuilder as i}from"../core/index.js";import{recipeSchema as o}from"./common/recipes.js";export const childEntitySelectionComponent=i.component("childEntitySelection").withState({type:"object",tsType:"ChildEntitySelectionComponentState",import:[{module:"@salsita-ai/sdk/domain",member:"ChildEntitySelectionComponentState"}],properties:{value:t,options:{type:"array",items:{type:"object",properties:{label:e,description:e,img:e,recipes:{type:"array",items:o}},required:["recipes","label"],additionalProperties:!1}},keepChildren:{type:"boolean"}},required:["value","options"],additionalProperties:!1}).build();
@@ -115,6 +115,7 @@ declare const SceneHtmlOpacityPropertiesTmp: {
115
115
  readonly type: 'number';
116
116
  };
117
117
  };
118
+ readonly required: readonly ['min', 'max'];
118
119
  readonly additionalProperties: false;
119
120
  };
120
121
  readonly polarAngleLimits: {
@@ -138,6 +139,7 @@ declare const SceneHtmlOpacityPropertiesTmp: {
138
139
  readonly type: 'number';
139
140
  };
140
141
  };
142
+ readonly required: readonly ['min', 'max'];
141
143
  readonly additionalProperties: false;
142
144
  };
143
145
  readonly distanceLimits: {
@@ -161,6 +163,7 @@ declare const SceneHtmlOpacityPropertiesTmp: {
161
163
  readonly type: 'number';
162
164
  };
163
165
  };
166
+ readonly required: readonly ['min', 'max'];
164
167
  readonly additionalProperties: false;
165
168
  };
166
169
  readonly minInteractiveOpacity: {
@@ -1 +1 @@
1
- import{EnhancedLocalizableSchema as e}from"@salsita-ai/common/utils";let t={type:"object",tsType:"SceneEntityHtmlOpacityLimits",import:[{module:"@salsita-ai/sdk/domain",member:"SceneEntityHtmlOpacityLimits"}],properties:{min:{type:"number"},max:{type:"number"},smoothZone:{type:"number"},minOpacity:{type:"number"}},additionalProperties:!1};export const SceneHtmlOpacityProperties={azimuthAngleLimits:t,polarAngleLimits:t,distanceLimits:t,minInteractiveOpacity:{type:"number"}};export const SceneHtmlPositionProperties={offsetX:{type:"number"},offsetY:{type:"number"},offsetZ:{type:"number"},screenOffsetHorizontal:{type:"number"},screenOffsetVertical:{type:"number"}};export const SceneHtmlVisibilityProperties={hideWhileDragging:{type:"boolean"},occlude:{type:"boolean"},showWhen:{type:"array",items:{type:"string",enum:["selected","unselected"]}}};export const SceneHtmlTooltipProperties={title:e,tooltipVisibility:{type:["string"],enum:["on-hover","forced","forced-when-still","hidden"]}};
1
+ import{EnhancedLocalizableSchema as e}from"@salsita-ai/common/utils";let t={type:"object",tsType:"SceneEntityHtmlOpacityLimits",import:[{module:"@salsita-ai/sdk/domain",member:"SceneEntityHtmlOpacityLimits"}],properties:{min:{type:"number"},max:{type:"number"},smoothZone:{type:"number"},minOpacity:{type:"number"}},required:["min","max"],additionalProperties:!1};export const SceneHtmlOpacityProperties={azimuthAngleLimits:t,polarAngleLimits:t,distanceLimits:t,minInteractiveOpacity:{type:"number"}};export const SceneHtmlPositionProperties={offsetX:{type:"number"},offsetY:{type:"number"},offsetZ:{type:"number"},screenOffsetHorizontal:{type:"number"},screenOffsetVertical:{type:"number"}};export const SceneHtmlVisibilityProperties={hideWhileDragging:{type:"boolean"},occlude:{type:"boolean"},showWhen:{type:"array",items:{type:"string",enum:["selected","unselected"]}}};export const SceneHtmlTooltipProperties={title:e,tooltipVisibility:{type:["string"],enum:["on-hover","forced","forced-when-still","hidden"]}};
@@ -32,6 +32,13 @@ export interface EditorProps {
32
32
  readonly mockTemplates?: MockTemplateDefinition[];
33
33
  /** If true, automatically apply the first template when templates are initialized */
34
34
  readonly autoApplyTemplate?: boolean;
35
+ /**
36
+ * Key of the mock template to apply on mount, in place of the template stored for this page.
37
+ * Applying it does not store it, so it never changes what an editor without this prop opens.
38
+ * An unknown key logs a warning and falls back to the stored template, or to the first template
39
+ * when `autoApplyTemplate` is set.
40
+ */
41
+ readonly initialTemplateKey?: string;
35
42
  /** Key used to scope localStorage template persistence (e.g. environment slug) */
36
43
  readonly environmentKey?: string;
37
44
  /** Web component tag name for creating and discovering reflection systems. */
@@ -1 +1 @@
1
- import{jsx as e,jsxs as i,Fragment as t}from"react/jsx-runtime";import{Box as o,Chip as n,CssBaseline as r,IconButton as s,ThemeProvider as a,Tooltip as l,Typography as d,createTheme as c,useMediaQuery as m,useTheme as p}from"@mui/material";import{ModalProvider as f}from"mui-modal-provider";import{memo as h,useCallback as u,useEffect as g,useState as w}from"react";import{match as k}from"ts-pattern";import{useLocalStorage as y}from"usehooks-ts";import{PhxIcon as x,SnackbarProvider as b,createThemeWithPhoenixIcons as v}from"#package/ui-sdk";import{EditorMode as S}from"./EditorMode.js";import{EditorRuntimeProvider as P}from"./EditorRuntimeProvider.js";import{EditorAdminContextProvider as j}from"./admin/EditorAdminContext.js";import{EditorAdminMainContent as V}from"./admin/EditorAdminMainContent.js";import{EditorAdminSidebar as E}from"./admin/EditorAdminSidebar.js";import{useEditorAdminState as D}from"./admin/use-editor-admin-state.js";import{Analytics as T}from"./analytics/Analytics.js";import{AnalyticsProvider as A}from"./analytics/AnalyticsContext.js";import{Logotype as C}from"./common/Logotype.js";import{PanelIconButton as L}from"./common/PanelIconButton.js";import{BrowserConsoleReporter as M}from"./console-reporter/BrowserConsoleReporter.js";import{DataHandler as W}from"./data/DataHandler.js";import{DebugFlags as R}from"./debug-flags/DebugFlags.js";import{DiagnosticsPanel as I}from"./diagnostics/DiagnosticsPanel.js";import{DomainEditors as F}from"./domain-editors/DomainEditors.js";import{DomainSpecProvider as G,useDomainSpecContext as z}from"./domain-editors/DomainSpecContext.js";import{DomainReflection as B}from"./domain-reflection/DomainReflection.js";import{GraphQLPanel as Q}from"./graphql/GraphQLPanel.js";import{LogsPanel as H}from"./logs/LogsPanel.js";import{EditorMockProvider as U}from"./mocks/EditorMockContext.js";import{Mocks as q}from"./mocks/Mocks.js";import{ProfilerPanel as O}from"./profiler/ProfilerPanel.js";import{RemoteFilesList as K}from"./remote-files/RemoteFilesList.js";import{SceneHandler as N}from"./scene/SceneHandler.js";import{ScreenshotHandler as X}from"./screenshot/ScreenshotHandler.js";import{EditorConnectionProvider as Y}from"./services/EditorConnectionContext.js";import{EditorActionButtons as $}from"./sidebar/EditorActionButtons.js";import{StateInspector as J}from"./state-inspector/index.js";import{StateHandler as Z}from"./state/StateHandler.js";import{SpaTemplate as _}from"./templates/SpaTemplate.js";import{Templates as ee}from"./templates/Templates.js";import{TemplatesList as ei}from"./templates/TemplatesList.js";import{TunnelProvider as et,useTunnel as eo}from"./tunnel/TunnelContext.js";import{TunnelPanel as en}from"./tunnel/TunnelPanel.js";import{hasTunnelProblem as er}from"./tunnel/tunnel-view-model.js";import{HTML_VARIANT_FRAME_ATTRIBUTE as es,VariantPreviewHandler as ea,useConfiguratorContainerRef as el}from"./variants/VariantPreviewHandler.js";import{VideoStudio as ed}from"./video-studio/VideoStudio.js";import{WebSocketStatus as ec}from"./websocket-status/WebSocketStatus.js";let em=h(()=>e("div",{ref:el(),style:{width:"100%",height:"100%"}})),ep=v(c());export const EditorPanelView={Files:"Files",Reflections:"Reflections",Domain:"Domain",Templates:"Templates",Mocks:"Mocks",Inspector:"Inspector",Debug:"Debug",Profiler:"Profiler",GraphQL:"GraphQL",VideoStudio:"VideoStudio",Analytics:"Analytics",Diagnostics:"Diagnostics",Logs:"Logs",Tunnel:"Tunnel",WebSocketStatus:"WebSocketStatus",Admin:"Admin"};let ef=[{key:EditorPanelView.Templates,icon:"GridFour",title:"Templates"},{key:EditorPanelView.Reflections,icon:"House",title:"Reflections"},{key:EditorPanelView.Files,icon:"List",title:"Files"},{key:EditorPanelView.Domain,icon:"Gear",title:"Domain"},{key:EditorPanelView.Mocks,icon:"TagBold",title:"Mocks"},{key:EditorPanelView.Inspector,icon:"CurrencyDollar",title:"Inspector"},{key:EditorPanelView.Debug,icon:"EyeBold",title:"Debug"},{key:EditorPanelView.Profiler,icon:"Alarm",title:"Profiler"},{key:EditorPanelView.GraphQL,icon:"MagnifyingGlassBold",title:"GraphQL"},{key:EditorPanelView.VideoStudio,icon:"CameraRotate",title:"Video Studio"},{key:EditorPanelView.Analytics,icon:"Flame",title:"Analytics"},{key:EditorPanelView.Diagnostics,icon:"WarningCircle",title:"Diagnostics"},{key:EditorPanelView.Logs,icon:"BracketsCurly",title:"Logs"},{key:EditorPanelView.Tunnel,icon:"ArrowsHorizontal",title:"Webhook Tunnel"}],eh=h(r=>{let{panelView:a,setPanelView:c,width:m,setWidth:p,selectedTemplate:f,setSelectedTemplate:h,isResizing:y,setIsResizing:b,onExit:v,enableAdmin:S}=r,P=D(S),{unreadDiagnosticCount:j,markDiagnosticsRead:A}=z(),{state:M}=eo(),W=a?Math.max(m,240):38,[G,U]=w(0),N=u(()=>U(e=>e+1),[]);return g(()=>{a===EditorPanelView.Diagnostics&&A()},[A,a]),i(o,{component:"div",sx:{display:"grid",gridTemplateColumns:`${W}px min-content auto`,gridTemplateRows:"minmax(0, 1fr)",width:"100vw",height:"100vh",backgroundColor:"#ffffff",overflow:"hidden"},onMouseMove:e=>{y&&p(e.clientX)},onMouseUp:()=>{b(!1)},children:[i(o,{component:"div",sx:{display:"grid",gridTemplateColumns:"36px auto",backgroundColor:"#f8f9fa",borderRight:"1px solid #dee2e6",boxShadow:"2px 0 8px rgba(0, 0, 0, 0.06)",overflow:"hidden",height:"100%"},children:[i("div",{style:{backgroundColor:"#f8f9fa",height:"100%",display:"flex",flexDirection:"column",alignItems:"center",padding:"4px 0"},children:[e("div",{style:{marginBottom:"8px"},children:e(C,{variant:"icon-only"})}),i("div",{style:{flex:1,display:"flex",flexDirection:"column",gap:"2px"},children:[S&&i(t,{children:[e(L,{icon:"SlidersHorizontal",title:"Admin",active:a===EditorPanelView.Admin,onClick:()=>{a===EditorPanelView.Admin?c(null):c(EditorPanelView.Admin)}}),e("div",{style:{borderBottom:"1px solid #dee2e6",margin:"2px 0"}})]}),ef.map(i=>e(L,{icon:i.icon,title:i.title,active:a===i.key,badgeCount:i.key===EditorPanelView.Tunnel?+!!er(M):i.key===EditorPanelView.Diagnostics?j:0,onClick:()=>{a===i.key?c(null):c(i.key)}},i.key))]}),e($,{reload:N}),e("div",{style:{padding:"0 2px",paddingBottom:"4px"},children:e(L,{icon:"CloudArrowUp",title:"WebSocket Status",active:a===EditorPanelView.WebSocketStatus,onClick:()=>{a===EditorPanelView.WebSocketStatus?c(null):c(EditorPanelView.WebSocketStatus)}})}),v&&e("div",{style:{padding:"0 2px",paddingBottom:"8px"},children:e(L,{icon:"SignOut",title:"Exit Editor",variant:"danger",onClick:v})})]}),a&&i(o,{component:"div",sx:{display:"flex",flexDirection:"column",height:"100%",overflow:"hidden",backgroundColor:"#ffffff"},children:[e(o,{component:"div",sx:{p:1.5,borderBottom:"1px solid #e9ecef",backgroundColor:"#ffffff"},children:i(o,{component:"div",sx:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[i(o,{component:"div",sx:{display:"flex",flexDirection:"row",alignItems:"center"},children:[e(d,{variant:"h6",sx:{fontSize:16,fontWeight:600,color:"#212529"},children:k(a).with("Files",()=>"Files").with("Reflections",()=>"Reflections").with("Domain",()=>"Domain").with("Templates",()=>"Templates").with("Mocks",()=>"Mocks").with("Inspector",()=>"State Inspector").with("Debug",()=>"Debug").with("Profiler",()=>"Profiler").with("GraphQL",()=>"GraphQL").with("VideoStudio",()=>"Video Studio").with("Analytics",()=>"Analytics").with("Diagnostics",()=>"Diagnostics").with("Logs",()=>"Dev Server Logs").with("Tunnel",()=>"Webhook Tunnel").with("WebSocketStatus",()=>"WebSocket Status").with("Admin",()=>"Admin").otherwise(e=>e)}),e(l,{title:k(a).with("Files",()=>"Browse and inspect loaded GLTF files and their contents").with("Reflections",()=>"Inspect internal Phoenix systems state and configuration").with("Domain",()=>"Edit YAML domain specifications and component configurations").with("Templates",()=>"Select different layout templates for the configurator interface").with("Mocks",()=>"Create and manage mock data for testing session and access configurations").with("Inspector",()=>"Walk the entity tree: fields, expressions, and children").with("Debug",()=>"Toggle scene debug visuals like offset anchors, snapping, and collision meshes").with("Profiler",()=>"Make domain expressions show up as named frames in browser CPU profiles").with("GraphQL",()=>"Run GraphQL queries against the schema generated from the assistant manifest").with("VideoStudio",()=>"Create video sequences by capturing keyframes and exporting as video").with("Analytics",()=>"View parse pipeline metrics, domain stats, and diagnostics").with("Diagnostics",()=>"View latest editor warnings and errors").with("Logs",()=>"View dev server logs: spec builds, webhooks, vite, and browser console").with("Tunnel",()=>"View webhook tunnel status and the requests routed through it").with("WebSocketStatus",()=>"View WebSocket connection status and editor mode information").with("Admin",()=>"Manage admin panel, publish data, and configure settings").otherwise(()=>"Panel information"),placement:"left",arrow:!0,children:e(s,{size:"small",sx:{ml:1,color:"#6c757d",fontSize:14,p:.25,"&:hover":{backgroundColor:"#f8f9fa",color:"#495057"}},children:e(x,{name:"Info",style:{fontSize:14}})})})]}),e(o,{component:"div",sx:{display:"flex",alignItems:"center",gap:1},children:"Templates"===a&&e(n,{label:f.charAt(0).toUpperCase()+f.slice(1),variant:"outlined",size:"small",sx:{backgroundColor:"#f8f9fa",borderColor:"#dee2e6",color:"#495057",fontWeight:500,fontSize:"0.75rem"}})})]})}),i(o,{component:"div",sx:{flex:1,backgroundColor:"#ffffff",overflow:"auto"},children:["Files"===a&&e(K,{}),"Reflections"===a&&e(B,{}),"Domain"===a&&e(F,{}),"Templates"===a&&e(ei,{selectedTemplate:f,onTemplateSelect:h}),"Mocks"===a&&e(q,{}),"Inspector"===a&&e(J,{}),"Debug"===a&&e(R,{}),"Profiler"===a&&e(O,{}),"GraphQL"===a&&e(Q,{}),"VideoStudio"===a&&e(ed,{}),"Analytics"===a&&e(T,{}),"Diagnostics"===a&&e(I,{}),"Logs"===a&&e(H,{}),"Tunnel"===a&&e(en,{}),"WebSocketStatus"===a&&e(ec,{}),S&&"Admin"===a&&e(E,{...P})]})]})]}),e("div",{style:{width:"2px",backgroundColor:"#dee2e6",cursor:"ew-resize",boxShadow:"1px 0 3px rgba(0, 0, 0, 0.05)"},onMouseDown:()=>{b(!0)}}),i("div",{style:{position:"relative",overflow:"hidden"},children:[e("div",{style:{position:"absolute",inset:0,zIndex:+("Admin"!==a)},children:e(ee,{selectedTemplate:f,children:e(em,{},G)})}),S&&e("div",{style:{position:"absolute",inset:0,zIndex:+("Admin"===a)},children:e(V,{})})]})]})}),eu=h(()=>e(_,{children:e(em,{})})),eg=h(o=>{let{wsUrl:n="ws://localhost:3020",localMode:r=!1,domainSpec:s,initialRawProjectFiles:a,onExit:l,mockTemplates:d,autoApplyTemplate:c,environmentKey:h,tagName:u,enableAdmin:k=!0}=o,x=m(p().breakpoints.up("md")),[v,V]=y("editor-width",350),[E,D]=y("editor-view",null),[T,C]=y("editor-template","spa"),[L,R]=w(!1);return g(()=>{null===E||Object.values(EditorPanelView).some(e=>e===E)&&(k||E!==EditorPanelView.Admin)||D(null)},[k,E,D]),e(f,{children:e(b,{maxSnack:5,children:e(j,{children:e(P,{tagName:u,children:e(Y,{initialWsUrl:n,localMode:r,children:e(et,{children:e(S,{children:e(A,{children:e(G,{domainSpec:s,initialRawProjectFiles:a,children:i(U,{mockTemplates:d,autoApplyTemplate:c,environmentKey:h,children:[!r&&i(t,{children:[e(X,{}),e(Z,{}),e(W,{}),e(N,{}),e(M,{})]}),e(ea,{children:x?e(eh,{panelView:E,setPanelView:D,width:v,setWidth:V,selectedTemplate:T,setSelectedTemplate:C,isResizing:L,setIsResizing:R,onExit:l,enableAdmin:k}):e(eu,{})})]})})})})})})})})})})});export const Editor=h(t=>{try{if(window.frameElement?.hasAttribute(es))return e("div",{role:"alert","data-testid":"variant-page-unavailable",style:{padding:24,fontFamily:"sans-serif"},children:"This preview page is unavailable. Ask the agent to recreate it or close the comparison."})}catch{}return i(a,{theme:ep,children:[e(r,{}),e(eg,{...t})]})});
1
+ import{jsx as e,jsxs as i,Fragment as t}from"react/jsx-runtime";import{Box as o,Chip as n,CssBaseline as r,IconButton as s,ThemeProvider as a,Tooltip as l,Typography as d,createTheme as m,useMediaQuery as c,useTheme as p}from"@mui/material";import{ModalProvider as f}from"mui-modal-provider";import{memo as h,useCallback as u,useEffect as g,useState as w}from"react";import{match as k}from"ts-pattern";import{useLocalStorage as y}from"usehooks-ts";import{PhxIcon as x,SnackbarProvider as b,createThemeWithPhoenixIcons as v}from"#package/ui-sdk";import{EditorMode as S}from"./EditorMode.js";import{EditorRuntimeProvider as P}from"./EditorRuntimeProvider.js";import{EditorAdminContextProvider as j}from"./admin/EditorAdminContext.js";import{EditorAdminMainContent as V}from"./admin/EditorAdminMainContent.js";import{EditorAdminSidebar as E}from"./admin/EditorAdminSidebar.js";import{useEditorAdminState as D}from"./admin/use-editor-admin-state.js";import{Analytics as T}from"./analytics/Analytics.js";import{AnalyticsProvider as A}from"./analytics/AnalyticsContext.js";import{Logotype as C}from"./common/Logotype.js";import{PanelIconButton as L}from"./common/PanelIconButton.js";import{BrowserConsoleReporter as M}from"./console-reporter/BrowserConsoleReporter.js";import{DataHandler as W}from"./data/DataHandler.js";import{DebugFlags as R}from"./debug-flags/DebugFlags.js";import{DiagnosticsPanel as I}from"./diagnostics/DiagnosticsPanel.js";import{DomainEditors as F}from"./domain-editors/DomainEditors.js";import{DomainSpecProvider as G,useDomainSpecContext as z}from"./domain-editors/DomainSpecContext.js";import{DomainReflection as B}from"./domain-reflection/DomainReflection.js";import{GraphQLPanel as Q}from"./graphql/GraphQLPanel.js";import{LogsPanel as H}from"./logs/LogsPanel.js";import{EditorMockProvider as U}from"./mocks/EditorMockContext.js";import{Mocks as q}from"./mocks/Mocks.js";import{ProfilerPanel as K}from"./profiler/ProfilerPanel.js";import{RemoteFilesList as O}from"./remote-files/RemoteFilesList.js";import{SceneHandler as N}from"./scene/SceneHandler.js";import{ScreenshotHandler as X}from"./screenshot/ScreenshotHandler.js";import{EditorConnectionProvider as Y}from"./services/EditorConnectionContext.js";import{EditorActionButtons as $}from"./sidebar/EditorActionButtons.js";import{StateInspector as J}from"./state-inspector/index.js";import{StateHandler as Z}from"./state/StateHandler.js";import{SpaTemplate as _}from"./templates/SpaTemplate.js";import{Templates as ee}from"./templates/Templates.js";import{TemplatesList as ei}from"./templates/TemplatesList.js";import{TunnelProvider as et,useTunnel as eo}from"./tunnel/TunnelContext.js";import{TunnelPanel as en}from"./tunnel/TunnelPanel.js";import{hasTunnelProblem as er}from"./tunnel/tunnel-view-model.js";import{HTML_VARIANT_FRAME_ATTRIBUTE as es,VariantPreviewHandler as ea,useConfiguratorContainerRef as el}from"./variants/VariantPreviewHandler.js";import{VideoStudio as ed}from"./video-studio/VideoStudio.js";import{WebSocketStatus as em}from"./websocket-status/WebSocketStatus.js";let ec=h(()=>e("div",{ref:el(),style:{width:"100%",height:"100%"}})),ep=v(m());export const EditorPanelView={Files:"Files",Reflections:"Reflections",Domain:"Domain",Templates:"Templates",Mocks:"Mocks",Inspector:"Inspector",Debug:"Debug",Profiler:"Profiler",GraphQL:"GraphQL",VideoStudio:"VideoStudio",Analytics:"Analytics",Diagnostics:"Diagnostics",Logs:"Logs",Tunnel:"Tunnel",WebSocketStatus:"WebSocketStatus",Admin:"Admin"};let ef=[{key:EditorPanelView.Templates,icon:"GridFour",title:"Templates"},{key:EditorPanelView.Reflections,icon:"House",title:"Reflections"},{key:EditorPanelView.Files,icon:"List",title:"Files"},{key:EditorPanelView.Domain,icon:"Gear",title:"Domain"},{key:EditorPanelView.Mocks,icon:"TagBold",title:"Mocks"},{key:EditorPanelView.Inspector,icon:"CurrencyDollar",title:"Inspector"},{key:EditorPanelView.Debug,icon:"EyeBold",title:"Debug"},{key:EditorPanelView.Profiler,icon:"Alarm",title:"Profiler"},{key:EditorPanelView.GraphQL,icon:"MagnifyingGlassBold",title:"GraphQL"},{key:EditorPanelView.VideoStudio,icon:"CameraRotate",title:"Video Studio"},{key:EditorPanelView.Analytics,icon:"Flame",title:"Analytics"},{key:EditorPanelView.Diagnostics,icon:"WarningCircle",title:"Diagnostics"},{key:EditorPanelView.Logs,icon:"BracketsCurly",title:"Logs"},{key:EditorPanelView.Tunnel,icon:"ArrowsHorizontal",title:"Webhook Tunnel"}],eh=h(r=>{let{panelView:a,setPanelView:m,width:c,setWidth:p,selectedTemplate:f,setSelectedTemplate:h,isResizing:y,setIsResizing:b,onExit:v,enableAdmin:S}=r,P=D(S),{unreadDiagnosticCount:j,markDiagnosticsRead:A}=z(),{state:M}=eo(),W=a?Math.max(c,240):38,[G,U]=w(0),N=u(()=>U(e=>e+1),[]);return g(()=>{a===EditorPanelView.Diagnostics&&A()},[A,a]),i(o,{component:"div",sx:{display:"grid",gridTemplateColumns:`${W}px min-content auto`,gridTemplateRows:"minmax(0, 1fr)",width:"100vw",height:"100vh",backgroundColor:"#ffffff",overflow:"hidden"},onMouseMove:e=>{y&&p(e.clientX)},onMouseUp:()=>{b(!1)},children:[i(o,{component:"div",sx:{display:"grid",gridTemplateColumns:"36px auto",backgroundColor:"#f8f9fa",borderRight:"1px solid #dee2e6",boxShadow:"2px 0 8px rgba(0, 0, 0, 0.06)",overflow:"hidden",height:"100%"},children:[i("div",{style:{backgroundColor:"#f8f9fa",height:"100%",display:"flex",flexDirection:"column",alignItems:"center",padding:"4px 0"},children:[e("div",{style:{marginBottom:"8px"},children:e(C,{variant:"icon-only"})}),i("div",{style:{flex:1,display:"flex",flexDirection:"column",gap:"2px"},children:[S&&i(t,{children:[e(L,{icon:"SlidersHorizontal",title:"Admin",active:a===EditorPanelView.Admin,onClick:()=>{a===EditorPanelView.Admin?m(null):m(EditorPanelView.Admin)}}),e("div",{style:{borderBottom:"1px solid #dee2e6",margin:"2px 0"}})]}),ef.map(i=>e(L,{icon:i.icon,title:i.title,active:a===i.key,badgeCount:i.key===EditorPanelView.Tunnel?+!!er(M):i.key===EditorPanelView.Diagnostics?j:0,onClick:()=>{a===i.key?m(null):m(i.key)}},i.key))]}),e($,{reload:N}),e("div",{style:{padding:"0 2px",paddingBottom:"4px"},children:e(L,{icon:"CloudArrowUp",title:"WebSocket Status",active:a===EditorPanelView.WebSocketStatus,onClick:()=>{a===EditorPanelView.WebSocketStatus?m(null):m(EditorPanelView.WebSocketStatus)}})}),v&&e("div",{style:{padding:"0 2px",paddingBottom:"8px"},children:e(L,{icon:"SignOut",title:"Exit Editor",variant:"danger",onClick:v})})]}),a&&i(o,{component:"div",sx:{display:"flex",flexDirection:"column",height:"100%",overflow:"hidden",backgroundColor:"#ffffff"},children:[e(o,{component:"div",sx:{p:1.5,borderBottom:"1px solid #e9ecef",backgroundColor:"#ffffff"},children:i(o,{component:"div",sx:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[i(o,{component:"div",sx:{display:"flex",flexDirection:"row",alignItems:"center"},children:[e(d,{variant:"h6",sx:{fontSize:16,fontWeight:600,color:"#212529"},children:k(a).with("Files",()=>"Files").with("Reflections",()=>"Reflections").with("Domain",()=>"Domain").with("Templates",()=>"Templates").with("Mocks",()=>"Mocks").with("Inspector",()=>"State Inspector").with("Debug",()=>"Debug").with("Profiler",()=>"Profiler").with("GraphQL",()=>"GraphQL").with("VideoStudio",()=>"Video Studio").with("Analytics",()=>"Analytics").with("Diagnostics",()=>"Diagnostics").with("Logs",()=>"Dev Server Logs").with("Tunnel",()=>"Webhook Tunnel").with("WebSocketStatus",()=>"WebSocket Status").with("Admin",()=>"Admin").otherwise(e=>e)}),e(l,{title:k(a).with("Files",()=>"Browse and inspect loaded GLTF files and their contents").with("Reflections",()=>"Inspect internal Phoenix systems state and configuration").with("Domain",()=>"Edit YAML domain specifications and component configurations").with("Templates",()=>"Select different layout templates for the configurator interface").with("Mocks",()=>"Create and manage mock data for testing session and access configurations").with("Inspector",()=>"Walk the entity tree: fields, expressions, and children").with("Debug",()=>"Toggle scene debug visuals like offset anchors, snapping, and collision meshes").with("Profiler",()=>"Make domain expressions show up as named frames in browser CPU profiles").with("GraphQL",()=>"Run GraphQL queries against the schema generated from the assistant manifest").with("VideoStudio",()=>"Create video sequences by capturing keyframes and exporting as video").with("Analytics",()=>"View parse pipeline metrics, domain stats, and diagnostics").with("Diagnostics",()=>"View latest editor warnings and errors").with("Logs",()=>"View dev server logs: spec builds, webhooks, vite, and browser console").with("Tunnel",()=>"View webhook tunnel status and the requests routed through it").with("WebSocketStatus",()=>"View WebSocket connection status and editor mode information").with("Admin",()=>"Manage admin panel, publish data, and configure settings").otherwise(()=>"Panel information"),placement:"left",arrow:!0,children:e(s,{size:"small",sx:{ml:1,color:"#6c757d",fontSize:14,p:.25,"&:hover":{backgroundColor:"#f8f9fa",color:"#495057"}},children:e(x,{name:"Info",style:{fontSize:14}})})})]}),e(o,{component:"div",sx:{display:"flex",alignItems:"center",gap:1},children:"Templates"===a&&e(n,{label:f.charAt(0).toUpperCase()+f.slice(1),variant:"outlined",size:"small",sx:{backgroundColor:"#f8f9fa",borderColor:"#dee2e6",color:"#495057",fontWeight:500,fontSize:"0.75rem"}})})]})}),i(o,{component:"div",sx:{flex:1,backgroundColor:"#ffffff",overflow:"auto"},children:["Files"===a&&e(O,{}),"Reflections"===a&&e(B,{}),"Domain"===a&&e(F,{}),"Templates"===a&&e(ei,{selectedTemplate:f,onTemplateSelect:h}),"Mocks"===a&&e(q,{}),"Inspector"===a&&e(J,{}),"Debug"===a&&e(R,{}),"Profiler"===a&&e(K,{}),"GraphQL"===a&&e(Q,{}),"VideoStudio"===a&&e(ed,{}),"Analytics"===a&&e(T,{}),"Diagnostics"===a&&e(I,{}),"Logs"===a&&e(H,{}),"Tunnel"===a&&e(en,{}),"WebSocketStatus"===a&&e(em,{}),S&&"Admin"===a&&e(E,{...P})]})]})]}),e("div",{style:{width:"2px",backgroundColor:"#dee2e6",cursor:"ew-resize",boxShadow:"1px 0 3px rgba(0, 0, 0, 0.05)"},onMouseDown:()=>{b(!0)}}),i("div",{style:{position:"relative",overflow:"hidden"},children:[e("div",{style:{position:"absolute",inset:0,zIndex:+("Admin"!==a)},children:e(ee,{selectedTemplate:f,children:e(ec,{},G)})}),S&&e("div",{style:{position:"absolute",inset:0,zIndex:+("Admin"===a)},children:e(V,{})})]})]})}),eu=h(()=>e(_,{children:e(ec,{})})),eg=h(o=>{let{wsUrl:n="ws://localhost:3020",localMode:r=!1,domainSpec:s,initialRawProjectFiles:a,onExit:l,mockTemplates:d,autoApplyTemplate:m,initialTemplateKey:h,environmentKey:u,tagName:k,enableAdmin:x=!0}=o,v=c(p().breakpoints.up("md")),[V,E]=y("editor-width",350),[D,T]=y("editor-view",null),[C,L]=y("editor-template","spa"),[R,I]=w(!1);return g(()=>{null===D||Object.values(EditorPanelView).some(e=>e===D)&&(x||D!==EditorPanelView.Admin)||T(null)},[x,D,T]),e(f,{children:e(b,{maxSnack:5,children:e(j,{children:e(P,{tagName:k,children:e(Y,{initialWsUrl:n,localMode:r,children:e(et,{children:e(S,{children:e(A,{children:e(G,{domainSpec:s,initialRawProjectFiles:a,children:i(U,{mockTemplates:d,autoApplyTemplate:m,initialTemplateKey:h,environmentKey:u,children:[!r&&i(t,{children:[e(X,{}),e(Z,{}),e(W,{}),e(N,{}),e(M,{})]}),e(ea,{children:v?e(eh,{panelView:D,setPanelView:T,width:V,setWidth:E,selectedTemplate:C,setSelectedTemplate:L,isResizing:R,setIsResizing:I,onExit:l,enableAdmin:x}):e(eu,{})})]})})})})})})})})})})});export const Editor=h(t=>{try{if(window.frameElement?.hasAttribute(es))return e("div",{role:"alert","data-testid":"variant-page-unavailable",style:{padding:24,fontFamily:"sans-serif"},children:"This preview page is unavailable. Ask the agent to recreate it or close the comparison."})}catch{}return i(a,{theme:ep,children:[e(r,{}),e(eg,{...t})]})});
@@ -1 +1 @@
1
- import{jsx as e}from"react/jsx-runtime";import t from"lodash-es/debounce.js";import r from"promise-queue";import{createContext as o,useCallback as n,useContext as i,useEffect as a,useMemo as s,useRef as c,useState as m}from"react";import{match as l}from"ts-pattern";import{ApplicationRuntime as p,BinaryFile as u,RawProjectFiles as d,RuntimeReferenceStore as g,TextFile as f,buildPhoenixDefinitions as S,isConfiguratorModelSchemaCompatible as v,isTextFile as h,parseApplicationFiles as y}from"#package/application-spec";import{findActionImplementationConflicts as E,getAllPhxDefinitions as x}from"#package/domain";import{useApplicationRuntime as A,useMountGuard as C}from"#package/react-sdk";import{useEditorConnection as D}from"../services/EditorConnectionContext.js";import{trpc as I}from"../services/trpc.js";import{applyRuntimeReset as N,applySpecUpdate as w,prepareRuntimeRefresh as P,prepareRuntimeReset as _}from"./apply-spec-update.js";import{useDiagnostics as R}from"./use-diagnostics.js";import{useImplementationFiles as j}from"./use-implementation-files.js";import{getWasmSwcParsers as L}from"./wasm-swc-parsers.js";let k=o(null),T={debug:e=>console.debug(e)},M=e=>e instanceof Error?e.message:String(e);export const DomainSpecProvider=o=>{let{children:i,domainSpec:O,initialRawProjectFiles:b}=o,[$,F]=m(s(()=>O?[{fileName:"domain.yaml",content:O}]:b?b.files.filter(h).map(e=>({fileName:e.name,content:e.content})):[],[O,b])),[z,H]=m(null),q=s(()=>new g,[]),G=s(()=>S(x()),[]),U=c(null),Q=A(),{getImplementationFiles:B}=j(),{diagnostics:V,unreadDiagnosticCount:X,setDiagnostics:Y,pushDiagnostic:Z,clearDiagnostics:J,markDiagnosticsRead:K}=R(),W=s(()=>new r(1,1/0),[]),ee=c(0),et=c(null),{mutateAsync:er}=I.requestSpecFiles.useMutation(),{mutateAsync:eo}=I.save.useMutation(),en=C(),{localMode:ei,connectionStatus:ea}=D(),{data:es}=I.getEditorConfig.useQuery(void 0,{enabled:!ei&&"connected"===ea}),ec=ei||es?.specSync===!0,em=$.length>0?$:void 0,el=s(()=>$.map(e=>e.fileName),[$]),ep=s(()=>t(async e=>{if(!ei&&"connected"===ea&&0!==e.length)try{await eo(e.map(e=>({fileName:e.fileName,content:e.content})))}catch(e){console.error("[DomainSpecContext] Failed to save files to disk:",e)}},1e3),[ei,ea,eo]);a(()=>()=>{ep.cancel()},[ep]);let eu=n(()=>{H(null)},[]),ed=n(async(e,t)=>{F(r=>{let o=r.find(t=>t.fileName===e)?r.map(r=>r.fileName===e?{...r,content:t}:r):[...r,{fileName:e,content:t}];return ep(o),o})},[ep]),eg=n(async(e,t)=>{let r,o,n=()=>en()&&ee.current===t;if(!n())return;let i=d(e.rawProjectFiles.files.map(e=>l(e).with({kind:"text"},e=>f(e.name,e.content)).with({kind:"binary"},e=>u(e.name)).exhaustive()));F(i.files.filter(h).map(e=>({fileName:e.name,content:e.content})));try{r=await L()}catch(e){if(!n())return;Y([{code:"MODULE_ANALYZER_UNAVAILABLE",message:`The editor's module analyzer failed to load: ${e instanceof Error?e.message:String(e)}`,severity:"error",source:"spec",path:[]}]);return}if(!n())return;let a=y({rawProjectFiles:i,phxDefinitions:G},{analyzer:r.analyzer,evalExpressionParser:r.evalExpressionParser,referenceStore:q,logger:T});if(console.info(`[DomainSpecContext] Spec parsed: ${a.ok?"ok":"error"}, ${a.diagnostics.length} diagnostics`),!a.ok)return void Y([...a.errors,...a.diagnostics].map(e=>({...e,source:"spec"})));J();let{applicationSpec:s}=a.value,c=await B({application:a.value,projectRoot:e.projectRoot});if(!n())return;if(c.errors.length>0)return void Y(c.errors.map(e=>({code:e.code,message:e.message,severity:"error",source:"reload",path:[]})));let m=E([...s.configurator.actions.values()].map(e=>String(e.name)),c.actionImplementations??Q.getState().spec.configurator.actionImplementations);if(m.extra.length>0&&console.error(`[DomainSpecContext] Action implementations without a declaration: ${m.extra.join(", ")}`),m.missing.length>0){let e=`Missing action implementations: ${m.missing.join(", ")}. Add each to a default export of phx.domain.implementActions({ ... }) in src/actions/.`;console.error(`[DomainSpecContext] ${e}`),Z({code:"MISSING_ACTION_IMPLEMENTATIONS",message:e,severity:"error",source:"runtime"});return}let g=p(s,q,c.implementations,c.importedTransformers,c.invariantImplementations,c.adminImplementations);if(!g.ok){let e=`Missing expression implementations: ${g.missingExpressions.map(e=>`${e.entityType}.${e.exprName}`).join(", ")}`;console.error(`[DomainSpecContext] ${e}`),Z({code:"MISSING_EXPRESSION_IMPLEMENTATIONS",message:e,severity:"error",source:"runtime"});return}let{runtime:S}=g,x=null===U.current||v(U.current.configurator,s.configurator),A=Q.selectors.environment.getPersistenceConfig();if(!x){let e;if("server"===A.type)return void Z({code:"HOT_RELOAD_MODEL_CHANGE_REQUIRES_RESTART",message:"Domain model changes require an application restart and were not applied.",severity:"error",source:"runtime"});if(!Q.selectors.domainContext.configurator.getInitializationState().isCurrent)return void Q.selectors.domainServices.getLogger().debug("[DomainSpecContext] Skipping the model reset because no configurator session is initialized; the change applies once a session loads under the new spec.");try{e=_({runtime:S,implementationFiles:c,previousSpec:Q.getState().spec})}catch(e){Z({code:"HOT_RELOAD_PREPARE_FAILED",message:M(e),severity:"error",source:"runtime"});return}return Q.selectors.domainServices.getLogger().debug("[DomainSpecContext] Reseeding the reset session directly from the spec preset; onPresetLoadedHandler and ProductSelected analytics are intentionally skipped."),N(Q,e,Q.selectors.domainApplicationContext.configurator.getConfigurationPersistSystem().revisionId$.value),void(U.current=s)}try{o=P({runtime:S,implementationFiles:c,previousSpec:Q.getState().spec})}catch(e){Z({code:"HOT_RELOAD_PREPARE_FAILED",message:M(e),severity:"error",source:"runtime"});return}n()&&(w(Q,o),U.current=s)},[Q,B,en,G,Z,q,Y,J]),ef=c(null),eS=n(e=>{let t=ee.current+1;ee.current=t,et.current={data:e,generation:t},W.add(async()=>{let e=et.current;e&&e.data!==ef.current&&(et.current=null,ef.current=e.data,await eg(e.data,e.generation))})},[eg,W]);I.onSpecChange.useSubscription(void 0,{enabled:!ei&&ec,onData:eS}),a(()=>{!ei&&ec&&er().catch(()=>{console.warn("[DomainSpecContext] Failed to request spec files")})},[er,ei,ec]);let ev=s(()=>({files:em,fileNames:el,updateFile:ed,parsing:!1,parseError:z,clearParseError:eu,diagnostics:V,clearDiagnostics:J,unreadDiagnosticCount:X,markDiagnosticsRead:K}),[em,el,ed,z,eu,V,J,X,K]);return e(k.Provider,{value:ev,children:i})};export const useDomainSpecContext=()=>{let e=i(k);if(null===e)throw Error("useDomainSpecContext must be used within DomainSpecProvider");return e};
1
+ import{jsx as e}from"react/jsx-runtime";import r from"lodash-es/debounce.js";import t from"promise-queue";import{createContext as o,useCallback as n,useContext as i,useEffect as s,useMemo as a,useRef as c,useState as m}from"react";import{match as l}from"ts-pattern";import{ApplicationRuntime as p,BinaryFile as u,RawProjectFiles as d,RuntimeReferenceStore as g,TextFile as f,buildPhoenixDefinitions as S,isConfiguratorModelSchemaCompatible as v,isTextFile as y,parseApplicationFiles as E}from"#package/application-spec";import{findActionImplementationConflicts as h,getAllPhxDefinitions as x}from"#package/domain";import{useApplicationRuntime as A,useMountGuard as C}from"#package/react-sdk";import{useEditorConnection as D}from"../services/EditorConnectionContext.js";import{trpc as I}from"../services/trpc.js";import{applyRuntimeReset as N,applySpecUpdate as w,prepareRuntimeRefresh as P,prepareRuntimeReset as _}from"./apply-spec-update.js";import{useDiagnostics as R}from"./use-diagnostics.js";import{useImplementationFiles as j}from"./use-implementation-files.js";import{getWasmSwcParsers as L}from"./wasm-swc-parsers.js";let k=o(null),T={debug:e=>console.debug(e)},M=e=>e instanceof Error?e.message:String(e);export const DomainSpecProvider=o=>{let{children:i,domainSpec:O,initialRawProjectFiles:b}=o,[$,F]=m(a(()=>O?[{fileName:"domain.yaml",content:O}]:b?b.files.filter(y).map(e=>({fileName:e.name,content:e.content})):[],[O,b])),[z,H]=m(null),q=a(()=>new g,[]),G=a(()=>S(x()),[]),U=c(null),Q=A(),{getImplementationFiles:B}=j(),{diagnostics:V,unreadDiagnosticCount:X,setDiagnostics:Y,pushDiagnostic:Z,clearDiagnostics:J,markDiagnosticsRead:K}=R(),W=a(()=>new t(1,1/0),[]),ee=c(0),er=c(null),{mutateAsync:et}=I.requestSpecFiles.useMutation(),{mutateAsync:eo}=I.save.useMutation(),en=C(),{localMode:ei,connectionStatus:es}=D(),{data:ea}=I.getEditorConfig.useQuery(void 0,{enabled:!ei&&"connected"===es}),ec=ei||ea?.specSync===!0,em=$.length>0?$:void 0,el=a(()=>$.map(e=>e.fileName),[$]),ep=a(()=>r(async e=>{if(!ei&&"connected"===es&&0!==e.length)try{await eo(e.map(e=>({fileName:e.fileName,content:e.content})))}catch(e){console.error("[DomainSpecContext] Failed to save files to disk:",e)}},1e3),[ei,es,eo]);s(()=>()=>{ep.cancel()},[ep]);let eu=n(()=>{H(null)},[]),ed=n(async(e,r)=>{F(t=>{let o=t.find(r=>r.fileName===e)?t.map(t=>t.fileName===e?{...t,content:r}:t):[...t,{fileName:e,content:r}];return ep(o),o})},[ep]),eg=n(async(e,r)=>{let t,o,n=()=>en()&&ee.current===r;if(!n())return;let i=d(e.rawProjectFiles.files.map(e=>l(e).with({kind:"text"},e=>f(e.name,e.content)).with({kind:"binary"},e=>u(e.name)).exhaustive()));F(i.files.filter(y).map(e=>({fileName:e.name,content:e.content})));try{t=await L()}catch(e){if(!n())return;Y([{code:"MODULE_ANALYZER_UNAVAILABLE",message:`The editor's module analyzer failed to load: ${e instanceof Error?e.message:String(e)}`,severity:"error",source:"spec",path:[]}]);return}if(!n())return;let s=E({rawProjectFiles:i,phxDefinitions:G},{analyzer:t.analyzer,evalExpressionParser:t.evalExpressionParser,referenceStore:q,logger:T});if(console.info(`[DomainSpecContext] Spec parsed: ${s.ok?"ok":"error"}, ${s.diagnostics.length} diagnostics`),!s.ok)return void Y([...s.errors,...s.diagnostics].map(e=>({...e,source:"spec"})));J();let{applicationSpec:a}=s.value,c=await B({application:s.value,projectRoot:e.projectRoot});if(!n())return;if(c.errors.length>0)return void Y(c.errors.map(e=>({code:e.code,message:e.message,severity:"error",source:"reload",path:[]})));let m=h([...a.configurator.actions.values()].map(e=>String(e.name)),c.actionImplementations??Q.getState().spec.configurator.actionImplementations);if(m.extra.length>0&&console.error(`[DomainSpecContext] Action implementations without a declaration: ${m.extra.join(", ")}`),m.missing.length>0){let e=`Missing action implementations: ${m.missing.join(", ")}. Add each to a default export of phx.domain.implementActions({ ... }) in src/actions/.`;console.error(`[DomainSpecContext] ${e}`),Z({code:"MISSING_ACTION_IMPLEMENTATIONS",message:e,severity:"error",source:"runtime"});return}let g=p(a,q,c.implementations,c.importedTransformers,c.invariantImplementations,c.adminImplementations);if(!g.ok){let e=`Missing expression implementations: ${g.missingExpressions.map(e=>`${e.entityType}.${e.exprName}`).join(", ")}`;console.error(`[DomainSpecContext] ${e}`),Z({code:"MISSING_EXPRESSION_IMPLEMENTATIONS",message:e,severity:"error",source:"runtime"});return}let{runtime:S}=g,x=null===U.current||v(U.current.configurator,a.configurator),A=Q.selectors.environment.getPersistenceConfig();if(!x){let e;if("server"===A.type)return void Z({code:"HOT_RELOAD_MODEL_CHANGE_REQUIRES_RESTART",message:"Domain model changes require an application restart and were not applied.",severity:"error",source:"runtime"});if(!Q.selectors.domainContext.configurator.getInitializationState().isCurrent)return void Q.selectors.domainServices.getLogger().debug("[DomainSpecContext] Skipping the model reset because no configurator session is initialized; the change applies once a session loads under the new spec.");try{e=_({runtime:S,implementationFiles:c,previousSpec:Q.getState().spec})}catch(e){Z({code:"HOT_RELOAD_PREPARE_FAILED",message:M(e),severity:"error",source:"runtime"});return}for(let r of(Q.selectors.domainServices.getLogger().debug("[DomainSpecContext] Reseeding the reset session directly from the spec preset; onPresetLoadedHandler and ProductSelected analytics are intentionally skipped."),N(Q,e,Q.selectors.domainApplicationContext.configurator.getConfigurationPersistSystem().revisionId$.value),U.current=a,e.implementationErrors))Z({code:r.code,message:r.message,severity:"error",source:"runtime"});return}try{o=P({runtime:S,implementationFiles:c,previousSpec:Q.getState().spec})}catch(e){Z({code:"HOT_RELOAD_PREPARE_FAILED",message:M(e),severity:"error",source:"runtime"});return}if(n())for(let e of(w(Q,o),U.current=a,o.implementationErrors))Z({code:e.code,message:e.message,severity:"error",source:"runtime"})},[Q,B,en,G,Z,q,Y,J]),ef=c(null),eS=n(e=>{let r=ee.current+1;ee.current=r,er.current={data:e,generation:r},W.add(async()=>{let e=er.current;e&&e.data!==ef.current&&(er.current=null,ef.current=e.data,await eg(e.data,e.generation))})},[eg,W]);I.onSpecChange.useSubscription(void 0,{enabled:!ei&&ec,onData:eS}),s(()=>{!ei&&ec&&et().catch(()=>{console.warn("[DomainSpecContext] Failed to request spec files")})},[et,ei,ec]);let ev=a(()=>({files:em,fileNames:el,updateFile:ed,parsing:!1,parseError:z,clearParseError:eu,diagnostics:V,clearDiagnostics:J,unreadDiagnosticCount:X,markDiagnosticsRead:K}),[em,el,ed,z,eu,V,J,X,K]);return e(k.Provider,{value:ev,children:i})};export const useDomainSpecContext=()=>{let e=i(k);if(null===e)throw Error("useDomainSpecContext must be used within DomainSpecProvider");return e};
@@ -1,11 +1,18 @@
1
1
  import type { ApplicationRuntime as GeneratedApplicationRuntime } from '#package/application-spec';
2
- import type { ApplicationSpec as RuntimeApplicationSpec } from '#package/domain';
2
+ import { type ImplementationError, type ApplicationSpec as RuntimeApplicationSpec } from '#package/domain';
3
3
  import type { ApplicationRuntime } from '#package/react-sdk';
4
4
  import type { ImplementationFiles } from './use-implementation-files.js';
5
5
  type ConfiguratorSpec = RuntimeApplicationSpec['configurator'];
6
6
  /** Schema-compatible replacement that refreshes live runtime inputs without rebuilding the factory. */
7
7
  export interface PreparedRuntimeRefresh {
8
8
  readonly nextSpec: RuntimeApplicationSpec;
9
+ /**
10
+ * The assistant form elements the next spec declares without a component, or registers without a
11
+ * declaration. They are reported, not refused: the YAML and the element files change in separate
12
+ * saves, and the update after the second save must still pair them, which a refused update would
13
+ * prevent by using up the section's change flag. The panel leaves such an element out.
14
+ */
15
+ readonly implementationErrors: readonly ImplementationError[];
9
16
  }
10
17
  /** Full runtime replacement used when an editor update changes the configurator model schema. */
11
18
  export interface PreparedRuntimeReset extends PreparedRuntimeRefresh {
@@ -1 +1 @@
1
- import{resolveImportedTransformers as e}from"#package/domain";import{getPhoenixThemes as t}from"#package/ui-sdk";import{getCustomComponentOptics as n}from"./use-implementation-files.js";let s=s=>{var o;let i,a,{runtime:r,implementationFiles:m,previousSpec:c}=s,p=r.configurator,l=c.configurator,u=m.handlers?.handlers??l.handlers,f=m.handlers?((e,t,n)=>{let s={};for(let o of e)s[o.name]=t?.[o.name]??n?.[o.name]??o.name;return s})(u,m.handlers.nameHashes,l.handlerHashes):l.handlerHashes,d=m.elements?.elements??l.elements,h=m.elements?((e,t,n)=>{let s={},o=0;for(let i of e)if("entity"===i.type||"layout"===i.type)s[i.name]=t?.[i.name]??n?.[i.name]??i.name;else{let e=`icon:${o}`;s[e]=t?.[e]??n?.[e]??`${e}:${i.elements.length}`,o+=1}return s})(d,m.elements.nameHashes,l.elementHashes):l.elementHashes,g=null!==m.customComponentOptics,R=p.componentOptics.changed||g?[...p.componentOptics.optics.map(e=>e.optic),...m.customComponentOptics??n(l.componentOptics)]:l.componentOptics,x=p.transformersRuntime.changed?t=>e(p.transformersRuntime.importedTransformers,p.transformersRuntime.specTransformers,t):l.createTransformers;return{presets:p.presetRuntime.changed?p.presetRuntime.presets:l.presets,theme:p.themeRuntime.changed?(o=p.themeRuntime,i=t(),a=Object.entries(i).find(([e])=>e===o.preset)?.[1]??{},Object.keys(o.options).length>0?{...a,...o.options}:a):l.theme,assistant:p.assistantRuntime.changed?p.assistantRuntime.assistant:l.assistant,navigationStates:p.statesRuntime.changed?p.statesRuntime.navigationStates:l.navigationStates,viewStates:p.statesRuntime.changed?p.statesRuntime.viewStates:l.viewStates,toolStates:p.statesRuntime.changed?p.statesRuntime.toolStates:l.toolStates,exportStates:p.statesRuntime.changed?p.statesRuntime.exportStates:l.exportStates,componentOptics:R,createTransformers:x,handlers:u,handlerHashes:f,elements:d,elementHashes:h}};export const prepareRuntimeRefresh=e=>{let{runtime:t,previousSpec:n}=e,o=n.configurator,i=s(e),a=t.configurator.expressionRuntime.changed?t.configurator.expressionRuntime.merged:o.expressions,r=t.configurator.actionsRuntime.changed?t.configurator.actionsRuntime.definitions:o.actions,m=e.implementationFiles.actionImplementations??o.actionImplementations;return{nextSpec:{...n,configurator:{...o,...i,expressions:a,actions:r,actionImplementations:m}}}};export const prepareRuntimeReset=e=>{let{runtime:t,previousSpec:n}=e,o=n.configurator,i=s(e),a=t.configurator.expressionRuntime.merged,r=t.configurator.actionsRuntime.definitions,m=e.implementationFiles.actionImplementations??o.actionImplementations,c=t.configurator.modelRuntime.domainBuilder.withExpressions(a).withActions(Object.values(r)).withActionImplementations(m).build(),p=i.presets[0];if(void 0===p)throw Error("Cannot reset the configurator after a model change because the application spec has no presets.");return{firstPreset:p,nextSpec:{...n,configurator:{...o,...i,modelVersion:c.context.modelVersion,factory:c,aliasMap:c.context.aliasMap,entityReflections:c.context.entityReflections,$entityReflections:c.context.$entityReflections,expressions:a,actions:r,actionImplementations:m,allowedRootEntityTypes:c.context.allowedRootEntityTypes,migrate:c.context.migrate}}}};let o=(e,t)=>{e.actions.spec.updateSpec(t)};export const applyRuntimeRefresh=(e,t)=>o(e,t.nextSpec);export const applyRuntimeReset=(e,t,n)=>{o(e,t.nextSpec),e.actions.loadedData.completeConfiguratorLoad({initialRevisionId:n,initialEntities:t.firstPreset.initialDomainEntities,modelVersion:t.nextSpec.configurator.modelVersion,rootEntityType:t.firstPreset.rootEntityType,schemaIdentity:t.nextSpec.configurator.factory})};export const applySpecUpdate=(e,t)=>o(e,t.nextSpec);
1
+ import{findAssistantFormElementErrors as e,resolveImportedTransformers as t}from"#package/domain";import{getPhoenixThemes as n}from"#package/ui-sdk";import{getCustomComponentOptics as s}from"./use-implementation-files.js";let o=e=>{var o;let i,a,{runtime:r,implementationFiles:m,previousSpec:c}=e,p=r.configurator,l=c.configurator,u=m.handlers?.handlers??l.handlers,f=m.handlers?((e,t,n)=>{let s={};for(let o of e)s[o.name]=t?.[o.name]??n?.[o.name]??o.name;return s})(u,m.handlers.nameHashes,l.handlerHashes):l.handlerHashes,d=m.elements?.elements??l.elements,h=m.elements?((e,t,n)=>{let s={},o=0;for(let i of e)if("assistantFormElement"!==i.type)if("entity"===i.type||"layout"===i.type)s[i.name]=t?.[i.name]??n?.[i.name]??i.name;else{let e=`icon:${o}`;s[e]=t?.[e]??n?.[e]??`${e}:${i.elements.length}`,o+=1}return s})(d,m.elements.nameHashes,l.elementHashes):l.elementHashes,g=null!==m.customComponentOptics,R=p.componentOptics.changed||g?[...p.componentOptics.optics.map(e=>e.optic),...m.customComponentOptics??s(l.componentOptics)]:l.componentOptics,x=p.transformersRuntime.changed?e=>t(p.transformersRuntime.importedTransformers,p.transformersRuntime.specTransformers,e):l.createTransformers;return{presets:p.presetRuntime.changed?p.presetRuntime.presets:l.presets,theme:p.themeRuntime.changed?(o=p.themeRuntime,i=n(),a=Object.entries(i).find(([e])=>e===o.preset)?.[1]??{},Object.keys(o.options).length>0?{...a,...o.options}:a):l.theme,assistant:p.assistantRuntime.changed?p.assistantRuntime.assistant:l.assistant,navigationStates:p.statesRuntime.changed?p.statesRuntime.navigationStates:l.navigationStates,viewStates:p.statesRuntime.changed?p.statesRuntime.viewStates:l.viewStates,toolStates:p.statesRuntime.changed?p.statesRuntime.toolStates:l.toolStates,exportStates:p.statesRuntime.changed?p.statesRuntime.exportStates:l.exportStates,componentOptics:R,createTransformers:x,handlers:u,handlerHashes:f,elements:d,elementHashes:h}},i=({assistant:t,elements:n})=>e(t?.formElements??[],n);export const prepareRuntimeRefresh=e=>{let{runtime:t,previousSpec:n}=e,s=n.configurator,a=o(e),r=t.configurator.expressionRuntime.changed?t.configurator.expressionRuntime.merged:s.expressions,m=t.configurator.actionsRuntime.changed?t.configurator.actionsRuntime.definitions:s.actions,c=e.implementationFiles.actionImplementations??s.actionImplementations;return{nextSpec:{...n,configurator:{...s,...a,expressions:r,actions:m,actionImplementations:c}},implementationErrors:i(a)}};export const prepareRuntimeReset=e=>{let{runtime:t,previousSpec:n}=e,s=n.configurator,a=o(e),r=t.configurator.expressionRuntime.merged,m=t.configurator.actionsRuntime.definitions,c=e.implementationFiles.actionImplementations??s.actionImplementations,p=t.configurator.modelRuntime.domainBuilder.withExpressions(r).withActions(Object.values(m)).withActionImplementations(c).build(),l=a.presets[0];if(void 0===l)throw Error("Cannot reset the configurator after a model change because the application spec has no presets.");return{firstPreset:l,nextSpec:{...n,configurator:{...s,...a,modelVersion:p.context.modelVersion,factory:p,aliasMap:p.context.aliasMap,entityReflections:p.context.entityReflections,$entityReflections:p.context.$entityReflections,expressions:r,actions:m,actionImplementations:c,allowedRootEntityTypes:p.context.allowedRootEntityTypes,migrate:p.context.migrate}},implementationErrors:i(a)}};let a=(e,t)=>{e.actions.spec.updateSpec(t)};export const applyRuntimeRefresh=(e,t)=>a(e,t.nextSpec);export const applyRuntimeReset=(e,t,n)=>{a(e,t.nextSpec),e.actions.loadedData.completeConfiguratorLoad({initialRevisionId:n,initialEntities:t.firstPreset.initialDomainEntities,modelVersion:t.nextSpec.configurator.modelVersion,rootEntityType:t.firstPreset.rootEntityType,schemaIdentity:t.nextSpec.configurator.factory})};export const applySpecUpdate=(e,t)=>a(e,t.nextSpec);
@@ -1 +1 @@
1
- import{useCallback as e,useRef as n}from"react";import{expandAlias as t,resolveActionModules as a,resolveComponentOpticModules as r,resolveElementModule as o,resolveExpressionModules as s,resolveHandlerModule as i,resolveInvariantModules as l,resolveTransformerModule as m}from"#package/domain";import{importImplementationFile as c}from"./import-implementation-file.js";let p=e=>e instanceof Error?e.message:String(e),f=async(e,n)=>{let t=Date.now();return Promise.all(e.map(async e=>({origin:e,exports:await c(`/@fs/${n}/${e}?t=${t}`)})))},d=async(e,n)=>a(await f(e,n));export const mergeExpressionModules=(e,n)=>{let a={};for(let{expressions:t}of s(e,n))for(let[e,n]of Object.entries(t))a[e]={...a[e],...n};let r={};for(let[e,o]of Object.entries(a))for(let a of t(n,e)){let n=r[a]??{};for(let[t,a]of Object.entries(o))n[t]={...a,origin:{name:t,typeOrAlias:e}};r[a]=n}return r};export const mergeComponentOptics=(e,n)=>e.concat(n);export const getCustomComponentOptics=e=>e.filter(e=>!0!==e.generated);let u=async(e,n,t)=>mergeExpressionModules(await f(e,t),n),g=async(e,n)=>r(await f(e,n)),h=async(e,n)=>l(await f(e,n)),E=async(e,n)=>(await f(e,n)).map(m),F=async(e,n)=>(await f(e,n)).map(e=>({filePath:e.origin,registrations:i(e)})),w=async(e,n)=>(await f(e,n)).map(e=>({filePath:e.origin,registrations:o(e)}));export const useImplementationFiles=()=>{let t=n({}),a=n(null),r=n({}),o=n(0),s=n(null),i=n({}),l=n(null),m=n(null),c=n(null),f=n([]),I=n(null),y=n(null),O=n(new Map),A=n(new Map);return{getImplementationFiles:e(async e=>{let{application:n,projectRoot:R}=e,C=++o.current,{applicationSpec:D,categorizedFiles:L}=n,S=[],x=t.current,M=r.current,_=i.current,$=c.current,b=f.current,v=L.expressionsChanged,N=L.actionsChanged,j=L.componentsChanged,P=L.transformersChanged,H=L.handlersChanged,T=L.elementsChanged,k=Object.fromEntries(L.invariants.map(e=>[e.file.name,e.depHash])),J=l.current,X=JSON.stringify(D.configurator.invariants.entries),V=null===J||m.current!==X||Object.keys(J).length!==L.invariants.length||L.invariants.some(e=>J[e.file.name]!==e.depHash);if(console.info(`[useImplementationFiles] Changed: spec=${L.specChanged}, expressions=${L.expressionsChanged}, actions=${L.actionsChanged}, adminExpressions=${L.adminExpressionsChanged}, transformers=${L.transformersChanged}, handlers=${L.handlersChanged}, elements=${L.elementsChanged}`),v){console.info("[useImplementationFiles] Reloading expression implementations");try{let e=Object.fromEntries(D.configurator.latestModel.aliases);t.current=x=await u(L.expressions.map(e=>e.file.name),e,R)}catch(e){console.warn("[useImplementationFiles] Failed to reload expressions:",e),S.push({code:"RELOAD_EXPRESSIONS_FAILED",message:p(e)})}}let q=a.current;if(N){console.info("[useImplementationFiles] Reloading action implementations");try{a.current=q=await d(L.actions.map(e=>e.file.name),R)}catch(e){console.warn("[useImplementationFiles] Failed to reload actions:",e),S.push({code:"RELOAD_ACTIONS_FAILED",message:p(e)})}}let z=JSON.stringify({projectRoot:R,files:L.adminExpressions.map(e=>[e.file.name,e.depHash]),aliases:[...D.admin.latestModel.aliases]});if(C===o.current&&s.current!==z)try{M=await u(L.adminExpressions.map(e=>e.file.name),Object.fromEntries(D.admin.latestModel.aliases),R),C===o.current&&(r.current=M,s.current=z)}catch(e){S.push({code:"RELOAD_ADMIN_EXPRESSIONS_FAILED",message:p(e)})}if(j){console.info("[useImplementationFiles] Reloading component optics");try{c.current=$=await g(L.components.map(e=>e.file.name),R)}catch(e){console.warn("[useImplementationFiles] Failed to reload components:",e),S.push({code:"RELOAD_COMPONENTS_FAILED",message:p(e)})}}if(V){console.info("[useImplementationFiles] Reloading invariant implementations");try{i.current=_=await h(L.invariants.map(e=>e.file.name),R),l.current=k,m.current=X}catch(e){console.warn("[useImplementationFiles] Failed to reload invariants:",e),S.push({code:"RELOAD_INVARIANTS_FAILED",message:p(e)})}}if(P){console.info("[useImplementationFiles] Reloading transformer implementations");try{f.current=b=await E(L.transformers.map(e=>e.file.name),R)}catch(e){console.warn("[useImplementationFiles] Failed to reload transformers:",e),S.push({code:"RELOAD_TRANSFORMERS_FAILED",message:p(e)})}}let B=null;if(H){console.info("[useImplementationFiles] Reloading handler implementations");try{let e=Object.fromEntries(L.handlers.map(e=>[e.file.name,e.depHash])),n=I.current,t=t=>null===n||n[t]!==e[t],a=A.current,r=L.handlers.map(e=>e.file.name),o=r.filter(e=>t(e)||!a.has(e)),s=await F(o,R),i=new Map(s.map(e=>[e.filePath,e])),l=r.map(e=>{let n=i.get(e)??a.get(e);if(!n)throw Error(`Handler file "${e}" was neither re-imported nor cached from a previous round. This is a hot-reload bookkeeping bug — reload the editor page to recover.`);return n}),m=l.flatMap(e=>e.registrations),c={};for(let{filePath:n,registrations:a}of l){let r=t(n)?e[n]:void 0;if(r)for(let e of a)c[e.name]=r}console.info(`[useImplementationFiles] Staged handlers for registry (${m.length} total)`),B={handlers:m,nameHashes:c},A.current=new Map(l.map(e=>[e.filePath,e])),I.current=e}catch(e){console.warn("[useImplementationFiles] Failed to reload handlers:",e),S.push({code:"RELOAD_HANDLERS_FAILED",message:p(e)})}}let G=null;if(T){console.info("[useImplementationFiles] Reloading element implementations");try{let e=Object.fromEntries(L.elements.map(e=>[e.file.name,e.depHash])),n=y.current,t=t=>null===n||n[t]!==e[t],a=O.current,r=L.elements.map(e=>e.file.name),o=r.filter(e=>t(e)||!a.has(e)),s=await w(o,R),i=new Map(s.map(e=>[e.filePath,e])),l=r.map(e=>{let n=i.get(e)??a.get(e);if(!n)throw Error(`Element file "${e}" was neither re-imported nor cached from a previous round. This is a hot-reload bookkeeping bug — reload the editor page to recover.`);return n}),m=l.flatMap(e=>e.registrations),c={},p=0;for(let{filePath:n,registrations:a}of l){let r=t(n)?e[n]:void 0;for(let e of a){if("entity"===e.type||"layout"===e.type){r&&(c[e.name]=r);continue}r&&(c[`icon:${p}`]=r),p+=1}}console.info(`[useImplementationFiles] Staged elements for registry (${m.length} total)`),G={elements:m,nameHashes:c},O.current=new Map(l.map(e=>[e.filePath,e])),y.current=e}catch(e){console.warn("[useImplementationFiles] Failed to reload elements:",e),S.push({code:"RELOAD_ELEMENTS_FAILED",message:p(e)})}}return{implementations:x,actionImplementations:q,adminImplementations:M,invariantImplementations:_,importedTransformers:b,customComponentOptics:$,handlers:B,elements:G,errors:S}},[])}};
1
+ import{useCallback as e,useRef as n}from"react";import{expandAlias as t,resolveActionModules as a,resolveComponentOpticModules as r,resolveElementModule as o,resolveExpressionModules as s,resolveHandlerModule as i,resolveInvariantModules as l,resolveTransformerModule as m}from"#package/domain";import{importImplementationFile as c}from"./import-implementation-file.js";let p=e=>e instanceof Error?e.message:String(e),f=async(e,n)=>{let t=Date.now();return Promise.all(e.map(async e=>({origin:e,exports:await c(`/@fs/${n}/${e}?t=${t}`)})))},d=async(e,n)=>a(await f(e,n));export const mergeExpressionModules=(e,n)=>{let a={};for(let{expressions:t}of s(e,n))for(let[e,n]of Object.entries(t))a[e]={...a[e],...n};let r={};for(let[e,o]of Object.entries(a))for(let a of t(n,e)){let n=r[a]??{};for(let[t,a]of Object.entries(o))n[t]={...a,origin:{name:t,typeOrAlias:e}};r[a]=n}return r};export const mergeComponentOptics=(e,n)=>e.concat(n);export const getCustomComponentOptics=e=>e.filter(e=>!0!==e.generated);let u=async(e,n,t)=>mergeExpressionModules(await f(e,t),n),g=async(e,n)=>r(await f(e,n)),h=async(e,n)=>l(await f(e,n)),E=async(e,n)=>(await f(e,n)).map(m),F=async(e,n)=>(await f(e,n)).map(e=>({filePath:e.origin,registrations:i(e)})),w=async(e,n)=>(await f(e,n)).map(e=>({filePath:e.origin,registrations:o(e)}));export const useImplementationFiles=()=>{let t=n({}),a=n(null),r=n({}),o=n(0),s=n(null),i=n({}),l=n(null),m=n(null),c=n(null),f=n([]),I=n(null),y=n(null),O=n(new Map),A=n(new Map);return{getImplementationFiles:e(async e=>{let{application:n,projectRoot:R}=e,C=++o.current,{applicationSpec:D,categorizedFiles:L}=n,S=[],x=t.current,M=r.current,_=i.current,$=c.current,b=f.current,v=L.expressionsChanged,N=L.actionsChanged,j=L.componentsChanged,P=L.transformersChanged,H=L.handlersChanged,T=L.elementsChanged,k=Object.fromEntries(L.invariants.map(e=>[e.file.name,e.depHash])),J=l.current,X=JSON.stringify(D.configurator.invariants.entries),V=null===J||m.current!==X||Object.keys(J).length!==L.invariants.length||L.invariants.some(e=>J[e.file.name]!==e.depHash);if(console.info(`[useImplementationFiles] Changed: spec=${L.specChanged}, expressions=${L.expressionsChanged}, actions=${L.actionsChanged}, adminExpressions=${L.adminExpressionsChanged}, transformers=${L.transformersChanged}, handlers=${L.handlersChanged}, elements=${L.elementsChanged}`),v){console.info("[useImplementationFiles] Reloading expression implementations");try{let e=Object.fromEntries(D.configurator.latestModel.aliases);t.current=x=await u(L.expressions.map(e=>e.file.name),e,R)}catch(e){console.warn("[useImplementationFiles] Failed to reload expressions:",e),S.push({code:"RELOAD_EXPRESSIONS_FAILED",message:p(e)})}}let q=a.current;if(N){console.info("[useImplementationFiles] Reloading action implementations");try{a.current=q=await d(L.actions.map(e=>e.file.name),R)}catch(e){console.warn("[useImplementationFiles] Failed to reload actions:",e),S.push({code:"RELOAD_ACTIONS_FAILED",message:p(e)})}}let z=JSON.stringify({projectRoot:R,files:L.adminExpressions.map(e=>[e.file.name,e.depHash]),aliases:[...D.admin.latestModel.aliases]});if(C===o.current&&s.current!==z)try{M=await u(L.adminExpressions.map(e=>e.file.name),Object.fromEntries(D.admin.latestModel.aliases),R),C===o.current&&(r.current=M,s.current=z)}catch(e){S.push({code:"RELOAD_ADMIN_EXPRESSIONS_FAILED",message:p(e)})}if(j){console.info("[useImplementationFiles] Reloading component optics");try{c.current=$=await g(L.components.map(e=>e.file.name),R)}catch(e){console.warn("[useImplementationFiles] Failed to reload components:",e),S.push({code:"RELOAD_COMPONENTS_FAILED",message:p(e)})}}if(V){console.info("[useImplementationFiles] Reloading invariant implementations");try{i.current=_=await h(L.invariants.map(e=>e.file.name),R),l.current=k,m.current=X}catch(e){console.warn("[useImplementationFiles] Failed to reload invariants:",e),S.push({code:"RELOAD_INVARIANTS_FAILED",message:p(e)})}}if(P){console.info("[useImplementationFiles] Reloading transformer implementations");try{f.current=b=await E(L.transformers.map(e=>e.file.name),R)}catch(e){console.warn("[useImplementationFiles] Failed to reload transformers:",e),S.push({code:"RELOAD_TRANSFORMERS_FAILED",message:p(e)})}}let B=null;if(H){console.info("[useImplementationFiles] Reloading handler implementations");try{let e=Object.fromEntries(L.handlers.map(e=>[e.file.name,e.depHash])),n=I.current,t=t=>null===n||n[t]!==e[t],a=A.current,r=L.handlers.map(e=>e.file.name),o=r.filter(e=>t(e)||!a.has(e)),s=await F(o,R),i=new Map(s.map(e=>[e.filePath,e])),l=r.map(e=>{let n=i.get(e)??a.get(e);if(!n)throw Error(`Handler file "${e}" was neither re-imported nor cached from a previous round. This is a hot-reload bookkeeping bug — reload the editor page to recover.`);return n}),m=l.flatMap(e=>e.registrations),c={};for(let{filePath:n,registrations:a}of l){let r=t(n)?e[n]:void 0;if(r)for(let e of a)c[e.name]=r}console.info(`[useImplementationFiles] Staged handlers for registry (${m.length} total)`),B={handlers:m,nameHashes:c},A.current=new Map(l.map(e=>[e.filePath,e])),I.current=e}catch(e){console.warn("[useImplementationFiles] Failed to reload handlers:",e),S.push({code:"RELOAD_HANDLERS_FAILED",message:p(e)})}}let G=null;if(T){console.info("[useImplementationFiles] Reloading element implementations");try{let e=Object.fromEntries(L.elements.map(e=>[e.file.name,e.depHash])),n=y.current,t=t=>null===n||n[t]!==e[t],a=O.current,r=L.elements.map(e=>e.file.name),o=r.filter(e=>t(e)||!a.has(e)),s=await w(o,R),i=new Map(s.map(e=>[e.filePath,e])),l=r.map(e=>{let n=i.get(e)??a.get(e);if(!n)throw Error(`Element file "${e}" was neither re-imported nor cached from a previous round. This is a hot-reload bookkeeping bug — reload the editor page to recover.`);return n}),m=l.flatMap(e=>e.registrations),c={},p=0;for(let{filePath:n,registrations:a}of l){let r=t(n)?e[n]:void 0;for(let e of a)if("assistantFormElement"!==e.type){if("entity"===e.type||"layout"===e.type){r&&(c[e.name]=r);continue}r&&(c[`icon:${p}`]=r),p+=1}}console.info(`[useImplementationFiles] Staged elements for registry (${m.length} total)`),G={elements:m,nameHashes:c},O.current=new Map(l.map(e=>[e.filePath,e])),y.current=e}catch(e){console.warn("[useImplementationFiles] Failed to reload elements:",e),S.push({code:"RELOAD_ELEMENTS_FAILED",message:p(e)})}}return{implementations:x,actionImplementations:q,adminImplementations:M,invariantImplementations:_,importedTransformers:b,customComponentOptics:$,handlers:B,elements:G,errors:S}},[])}};
@@ -1,7 +1,7 @@
1
- import{jsx as e,jsxs as t,Fragment as o}from"react/jsx-runtime";import{Box as a,Checkbox as n,Dialog as i,DialogActions as r,DialogContent as l,DialogTitle as s,Divider as c,FormControlLabel as d,Stack as p,TextField as f,Tooltip as u,Typography as m}from"@mui/material";import{jwtDecode as h}from"jwt-decode";import{useSnackbar as g}from"notistack";import{useEffect as b,useState as v}from"react";import{stringify as x}from"yaml";import{validateMockTemplateContent as k}from"#package/application-spec";import{useAccessServiceOverride as y,useBackendDataOverride as C,useConfiguratorModelVersion as D,useConfiguratorRawAccessInfo as w,useConfiguratorRawBackendData as S,useConfiguratorRawFrontendData as j,useConfiguratorRawPublishedData as M,useFrontendDataOverride as W,usePublishedDataOverride as z,useSessionContextOverride as E,useSessionService as I}from"#package/react-sdk";import{CollapsibleSection as A}from"../common/CollapsibleSection.js";import{EditorButton as F}from"../common/EditorButton.js";import{useOptionalDomain as P}from"../hooks/use-optional-runtime.js";import{useEditorConnection as T}from"../services/EditorConnectionContext.js";import{trpc as $}from"../services/trpc.js";import{useEditorMockContext as B}from"./EditorMockContext.js";import{ValidationErrorModal as O}from"./ValidationErrorModal.js";let R=({title:o,value:n,setValue:i,placeholder:r})=>t(a,{component:"div",sx:{display:"flex",alignItems:"center",gap:1},children:[e(m,{variant:"subtitle2",sx:{fontSize:"11px",fontWeight:600,color:"#495057",minWidth:"80px"},children:o}),e(f,{value:n,onChange:e=>{i(e.target.value)},fullWidth:!0,size:"small",placeholder:r,InputProps:{sx:{fontSize:"12px",fontFamily:"monospace",backgroundColor:"#fff",height:"32px","& input":{padding:"6px 12px"}}},sx:{"& .MuiOutlinedInput-root":{"&:hover fieldset":{borderColor:"#90caf9"},"&.Mui-focused fieldset":{borderColor:"#1976d2"}}}})]}),V={fontFamily:"monospace",fontSize:"12px",whiteSpace:"pre-wrap",wordBreak:"break-word",margin:0,padding:1,backgroundColor:"#f8f9fa",border:"1px solid #e9ecef",borderRadius:"4px"},N={fontSize:"10px",py:.25,px:1,fontWeight:600,minWidth:"auto"},U=({onClick:t})=>e(F,{variant:"secondary",sx:N,onClick:e=>{e.stopPropagation(),t()},children:"Copy"}),q=({label:t,checked:o,onChange:a})=>e(d,{control:e(n,{size:"small",checked:o,onChange:e=>{a(e.target.checked)},sx:{p:.5}}),label:t,sx:{ml:-.5,mr:0,"& .MuiFormControlLabel-label":{fontSize:"12px",color:"#212529"}}}),H=({title:t,original:o,edited:n,onChange:i,onCopy:r})=>{let[l,s]=v(!1),c=n??o;return e(A,{title:t,subtitle:void 0!==n?"edited":void 0,defaultExpanded:!0,actions:[e(F,{variant:"secondary",sx:N,onClick:e=>{e.stopPropagation(),s(!l)},children:l?"Done":"Edit"},"edit"),e(F,{variant:"secondary",sx:N,disabled:void 0===n,onClick:e=>{e.stopPropagation(),i(void 0)},children:"Reset"},"reset"),e(U,{onClick:()=>r(c)},"copy")],children:l?e(f,{value:c,onChange:e=>{i(e.target.value)},fullWidth:!0,multiline:!0,minRows:4,InputProps:{sx:{fontSize:"12px",fontFamily:"monospace",backgroundColor:"#fff",padding:1}},inputProps:{spellCheck:!1},sx:{"& .MuiOutlinedInput-root":{"&:hover fieldset":{borderColor:"#90caf9"},"&.Mui-focused fieldset":{borderColor:"#1976d2"}}}}):e(a,{component:"pre",sx:V,children:c})})},K=({yaml:o,open:n,onClose:d})=>{let{enqueueSnackbar:f}=g(),{effectiveMockTemplates:u}=B(),{localMode:h,connectionStatus:x}=T(),y=$.saveMock.useMutation(),[C,D]=v(""),[w,S]=v(""),[j,M]=v(""),[W,z]=v(!0),[E,I]=v(!0),[A,P]=v(!0),[V,N]=v(""!==o.frontendData),[U,K]=v(""!==o.backendData),[L,Y]=v({}),[G,J]=v(null);b(()=>{Y({})},[o]);let Q=e=>t=>{Y(o=>{let a={...o};return void 0===t?delete a[e]:a[e]=t,a})},X={sessionAccess:L.sessionAccess??o.session+"\n"+o.access,configuration:L.configuration??o.configuration,publishedData:L.publishedData??o.publishedData,frontendData:L.frontendData??o.frontendData,backendData:L.backendData??o.backendData},Z=async e=>{try{await navigator.clipboard.writeText(e),f("Copied to clipboard!",{variant:"success"})}catch(e){f("Failed to copy to clipboard",{variant:"error"})}},_=()=>{let e,t=(e=`key: '${C}'
1
+ import{jsx as e,jsxs as t,Fragment as o}from"react/jsx-runtime";import{Box as a,Checkbox as n,Dialog as i,DialogActions as r,DialogContent as l,DialogTitle as s,Divider as c,FormControlLabel as d,Stack as p,TextField as f,Tooltip as u,Typography as m}from"@mui/material";import{useSnackbar as h}from"notistack";import{useEffect as g,useMemo as b,useState as v}from"react";import{stringify as x}from"yaml";import{validateMockTemplateContent as k}from"#package/application-spec";import{useAccessServiceOverride as C,useBackendDataOverride as y,useConfiguratorModelVersion as D,useConfiguratorRawAccessInfo as w,useConfiguratorRawBackendData as S,useConfiguratorRawFrontendData as j,useConfiguratorRawPublishedData as M,useFrontendDataOverride as W,usePublishedDataOverride as z,useRawSession as E,useSessionContextOverride as I}from"#package/react-sdk";import{CollapsibleSection as A}from"../common/CollapsibleSection.js";import{EditorButton as F}from"../common/EditorButton.js";import{useOptionalDomain as P}from"../hooks/use-optional-runtime.js";import{useEditorConnection as $}from"../services/EditorConnectionContext.js";import{trpc as B}from"../services/trpc.js";import{useEditorMockContext as O}from"./EditorMockContext.js";import{ValidationErrorModal as T}from"./ValidationErrorModal.js";let R=({title:o,value:n,setValue:i,placeholder:r})=>t(a,{component:"div",sx:{display:"flex",alignItems:"center",gap:1},children:[e(m,{variant:"subtitle2",sx:{fontSize:"11px",fontWeight:600,color:"#495057",minWidth:"80px"},children:o}),e(f,{value:n,onChange:e=>{i(e.target.value)},fullWidth:!0,size:"small",placeholder:r,InputProps:{sx:{fontSize:"12px",fontFamily:"monospace",backgroundColor:"#fff",height:"32px","& input":{padding:"6px 12px"}}},sx:{"& .MuiOutlinedInput-root":{"&:hover fieldset":{borderColor:"#90caf9"},"&.Mui-focused fieldset":{borderColor:"#1976d2"}}}})]}),V={fontFamily:"monospace",fontSize:"12px",whiteSpace:"pre-wrap",wordBreak:"break-word",margin:0,padding:1,backgroundColor:"#f8f9fa",border:"1px solid #e9ecef",borderRadius:"4px"},N={fontSize:"10px",py:.25,px:1,fontWeight:600,minWidth:"auto"},U=({onClick:t})=>e(F,{variant:"secondary",sx:N,onClick:e=>{e.stopPropagation(),t()},children:"Copy"}),H=({label:t,checked:o,onChange:a})=>e(d,{control:e(n,{size:"small",checked:o,onChange:e=>{a(e.target.checked)},sx:{p:.5}}),label:t,sx:{ml:-.5,mr:0,"& .MuiFormControlLabel-label":{fontSize:"12px",color:"#212529"}}}),K=({title:t,original:o,edited:n,onChange:i,onCopy:r})=>{let[l,s]=v(!1),c=n??o;return e(A,{title:t,subtitle:void 0!==n?"edited":void 0,defaultExpanded:!0,actions:[e(F,{variant:"secondary",sx:N,onClick:e=>{e.stopPropagation(),s(!l)},children:l?"Done":"Edit"},"edit"),e(F,{variant:"secondary",sx:N,disabled:void 0===n,onClick:e=>{e.stopPropagation(),i(void 0)},children:"Reset"},"reset"),e(U,{onClick:()=>r(c)},"copy")],children:l?e(f,{value:c,onChange:e=>{i(e.target.value)},fullWidth:!0,multiline:!0,minRows:4,InputProps:{sx:{fontSize:"12px",fontFamily:"monospace",backgroundColor:"#fff",padding:1}},inputProps:{spellCheck:!1},sx:{"& .MuiOutlinedInput-root":{"&:hover fieldset":{borderColor:"#90caf9"},"&.Mui-focused fieldset":{borderColor:"#1976d2"}}}}):e(a,{component:"pre",sx:V,children:c})})},L=({yaml:o,open:n,onClose:d})=>{let{enqueueSnackbar:f}=h(),{effectiveMockTemplates:u}=O(),{localMode:b,connectionStatus:x}=$(),C=B.saveMock.useMutation(),[y,D]=v(""),[w,S]=v(""),[j,M]=v(""),[W,z]=v(!0),[E,I]=v(!0),[A,P]=v(!0),[V,N]=v(""!==o.frontendData),[U,L]=v(""!==o.backendData),[Y,q]=v({}),[G,J]=v(null);g(()=>{q({})},[o]);let Q=e=>t=>{q(o=>{let a={...o};return void 0===t?delete a[e]:a[e]=t,a})},X={sessionAccess:Y.sessionAccess??o.session+"\n"+o.access,configuration:Y.configuration??o.configuration,publishedData:Y.publishedData??o.publishedData,frontendData:Y.frontendData??o.frontendData,backendData:Y.backendData??o.backendData},Z=async e=>{try{await navigator.clipboard.writeText(e),f("Copied to clipboard!",{variant:"success"})}catch(e){f("Failed to copy to clipboard",{variant:"error"})}},_=()=>{let e,t=(e=`key: '${y}'
2
2
  title: '${w}'
3
3
  description: '${j}'
4
4
  order: ${o.order.toString()}
5
5
  `,W&&(e+="\n"+X.sessionAccess+"\n"),E&&(e+="\n"+X.configuration),A&&(e+="\n"+X.publishedData),V&&(e+="\n"+X.frontendData),U&&(e+="\n"+X.backendData),e),a=k(t);return a.valid?t:(J(`The assembled mock template is not valid:
6
6
 
7
- ${a.errors.join("\n")}`),null)},ee=async()=>{let e=_();null!==e&&await Z(e)},et=async()=>{if(""===C)return void f("Enter a key for the mock file",{variant:"error"});let e=C+".yaml";if(u.find(e=>e.key===C))return void f(`A mock template '${e}' already exists`,{variant:"error"});if(h)return void f("Cannot save files in local mode",{variant:"error"});if("connected"!==x)return void f("Not connected to server. Cannot save file.",{variant:"error"});let t=_();if(null!==t)try{await y.mutateAsync({fileName:e,content:t}),f(`Mock file ${e} saved successfully!`,{variant:"success"})}catch(e){f(e instanceof Error?e.message:"Failed to save mock file",{variant:"error"})}};return t(i,{open:n,onClose:d,maxWidth:"md",fullWidth:!0,children:[e(s,{sx:{fontSize:"14px",fontWeight:600,py:1.5,px:2,borderBottom:"1px solid #e9ecef"},children:"Created Mock Data"}),e(l,{sx:{p:2},children:t(a,{component:"div",sx:{display:"flex",flexDirection:"column",gap:2,pt:1},children:[t(a,{component:"div",sx:{display:"flex",flexDirection:"column",gap:1},children:[e(R,{title:"Key",value:C,setValue:D,placeholder:"e.g. 'regularUser', also in the filename"}),e(R,{title:"Title",value:w,setValue:S,placeholder:"e.g. 'Regular User'"}),e(R,{title:"Description",value:j,setValue:M,placeholder:"Human readable description of the mock data"}),t(a,{component:"div",sx:{display:"flex",alignItems:"center",gap:1,flexWrap:"wrap"},children:[e(m,{variant:"subtitle2",sx:{fontSize:"11px",fontWeight:600,color:"#495057",minWidth:"80px"},children:"Include"}),e(q,{label:"Session & Access",checked:W,onChange:z}),e(q,{label:"Configuration",checked:E,onChange:I}),e(q,{label:"Published data",checked:A,onChange:P}),e(q,{label:"Frontend data",checked:V,onChange:N}),e(q,{label:"Backend data",checked:U,onChange:K})]})]}),e(c,{}),t(p,{direction:"column",spacing:1,children:[e(H,{title:"Session & Access",original:o.session+"\n"+o.access,edited:L.sessionAccess,onChange:Q("sessionAccess"),onCopy:e=>void Z(e)}),e(H,{title:"Configuration (entities)",original:o.configuration,edited:L.configuration,onChange:Q("configuration"),onCopy:e=>void Z(e)}),e(H,{title:"Published Data",original:o.publishedData,edited:L.publishedData,onChange:Q("publishedData"),onCopy:e=>void Z(e)}),""!==o.frontendData&&e(H,{title:"Frontend Data",original:o.frontendData,edited:L.frontendData,onChange:Q("frontendData"),onCopy:e=>void Z(e)}),""!==o.backendData&&e(H,{title:"Backend Data",original:o.backendData,edited:L.backendData,onChange:Q("backendData"),onCopy:e=>void Z(e)})]})]})}),t(r,{sx:{p:2,borderTop:"1px solid #e9ecef"},children:[e(F,{onClick:et,children:"Save to file"}),e(F,{onClick:ee,children:"Copy to clipboard"}),e(F,{onClick:d,children:"Close"})]}),e(O,{open:null!==G,error:G,onClose:()=>{J(null)}})]})};export const CreateMockYaml=()=>{let n=P(),i=D(),{effectiveMockTemplates:r}=B(),l=I(),s=w(),c=z(),d=W(),p=C(),f=M(),g=j(),k=S(),A=c??f,T=d??g,$=p??k,[O,R]=v([]),V=n?i:-1,[U,q]=v(""),[H,L]=v(),[Y,G]=v(),[J,Q]=v();b(()=>{(async()=>{var e;let t;G(((e=h(await l.requestSessionToken())).data&&"object"==typeof e.data&&("object"==typeof e.data.tags&&0===Object.keys(e.data.tags).length&&delete e.data.tags,t=e.data),{role:e.role,data:t}))})()},[l]);let X=E();b(()=>{Q(X??void 0)},[X]);let[Z,_]=v(),[ee,et]=v();b(()=>{_(s?.viewMode?"read-revision":"owner")},[s]);let eo=y();b(()=>{eo?et(eo.accessInfo.viewMode?"read-revision":"owner"):et(void 0)},[eo,eo?.accessInfo.viewMode]),b(()=>{if(!n)return void R([]);let e=n.storeSystem.stateSlices.committed.value.state;R([...e.entities]),q(e.rootEntityType);let t=n.storeSystem.stateSlices.committed.subscribe(e=>{R([...e.state.entities]),q(e.state.rootEntityType)});return()=>{t.unsubscribe()}},[n]);let[ea,en]=v(!1);return t(o,{children:[e(a,{component:"div",sx:{borderBottom:"1px solid #e9ecef",backgroundColor:"#f8f9fa",px:1.5,py:1,display:"flex",flexDirection:"column",gap:1.5,mb:0},children:t(a,{component:"div",sx:{display:"flex",flexDirection:"row",alignItems:"center",justifyContent:"space-between"},children:[e(m,{variant:"subtitle2",sx:{fontWeight:600,color:"#495057",fontSize:"12px"},children:"Create mock yaml from current state"}),e(u,{title:-1===V?"No configuration is loaded yet — load a configuration to capture its state":"Capture the current session, access, configuration and data as a mock template",placement:"left",arrow:!0,enterDelay:300,children:e("span",{children:e(F,{variant:"secondary",onClick:e=>{let t,o,a,n,i,l;e.stopPropagation(),t=x({session:{role:(J??Y)?.role??"anonymous",data:(J??Y)?.data??{}}}),o=x({access:{access:ee??Z??"owner"}}),a=x({configuration:{entities:O,modelVersion:V,rootEntityType:U}}),n=A&&Object.keys(A).length>=1?x({publishedData:{data:A}}):"",i=T&&Object.keys(T).length>=1?x({frontendData:{data:T}}):"",l=$&&Object.keys($).length>=1?x({backendData:{data:$}}):"",L({order:(r.length??0)+1,configuration:a,session:t,access:o,publishedData:n,frontendData:i,backendData:l}),en(!0)},sx:N,disabled:-1===V,children:"Create Mock"})})})]})}),H&&e(K,{yaml:H,open:ea,onClose:()=>{en(!1)}})]})};
7
+ ${a.errors.join("\n")}`),null)},ee=async()=>{let e=_();null!==e&&await Z(e)},et=async()=>{if(""===y)return void f("Enter a key for the mock file",{variant:"error"});let e=y+".yaml";if(u.find(e=>e.key===y))return void f(`A mock template '${e}' already exists`,{variant:"error"});if(b)return void f("Cannot save files in local mode",{variant:"error"});if("connected"!==x)return void f("Not connected to server. Cannot save file.",{variant:"error"});let t=_();if(null!==t)try{await C.mutateAsync({fileName:e,content:t}),f(`Mock file ${e} saved successfully!`,{variant:"success"})}catch(e){f(e instanceof Error?e.message:"Failed to save mock file",{variant:"error"})}};return t(i,{open:n,onClose:d,maxWidth:"md",fullWidth:!0,children:[e(s,{sx:{fontSize:"14px",fontWeight:600,py:1.5,px:2,borderBottom:"1px solid #e9ecef"},children:"Created Mock Data"}),e(l,{sx:{p:2},children:t(a,{component:"div",sx:{display:"flex",flexDirection:"column",gap:2,pt:1},children:[t(a,{component:"div",sx:{display:"flex",flexDirection:"column",gap:1},children:[e(R,{title:"Key",value:y,setValue:D,placeholder:"e.g. 'regularUser', also in the filename"}),e(R,{title:"Title",value:w,setValue:S,placeholder:"e.g. 'Regular User'"}),e(R,{title:"Description",value:j,setValue:M,placeholder:"Human readable description of the mock data"}),t(a,{component:"div",sx:{display:"flex",alignItems:"center",gap:1,flexWrap:"wrap"},children:[e(m,{variant:"subtitle2",sx:{fontSize:"11px",fontWeight:600,color:"#495057",minWidth:"80px"},children:"Include"}),e(H,{label:"Session & Access",checked:W,onChange:z}),e(H,{label:"Configuration",checked:E,onChange:I}),e(H,{label:"Published data",checked:A,onChange:P}),e(H,{label:"Frontend data",checked:V,onChange:N}),e(H,{label:"Backend data",checked:U,onChange:L})]})]}),e(c,{}),t(p,{direction:"column",spacing:1,children:[e(K,{title:"Session & Access",original:o.session+"\n"+o.access,edited:Y.sessionAccess,onChange:Q("sessionAccess"),onCopy:e=>void Z(e)}),e(K,{title:"Configuration (entities)",original:o.configuration,edited:Y.configuration,onChange:Q("configuration"),onCopy:e=>void Z(e)}),e(K,{title:"Published Data",original:o.publishedData,edited:Y.publishedData,onChange:Q("publishedData"),onCopy:e=>void Z(e)}),""!==o.frontendData&&e(K,{title:"Frontend Data",original:o.frontendData,edited:Y.frontendData,onChange:Q("frontendData"),onCopy:e=>void Z(e)}),""!==o.backendData&&e(K,{title:"Backend Data",original:o.backendData,edited:Y.backendData,onChange:Q("backendData"),onCopy:e=>void Z(e)})]})]})}),t(r,{sx:{p:2,borderTop:"1px solid #e9ecef"},children:[e(F,{onClick:et,children:"Save to file"}),e(F,{onClick:ee,children:"Copy to clipboard"}),e(F,{onClick:d,children:"Close"})]}),e(T,{open:null!==G,error:G,onClose:()=>{J(null)}})]})};export const CreateMockYaml=()=>{let n=P(),i=D(),{effectiveMockTemplates:r}=O(),{sessionPayload:l}=E(),s=w(),c=z(),d=W(),p=y(),f=M(),h=j(),k=S(),A=c??f,$=d??h,B=p??k,[T,R]=v([]),V=n?i:-1,[U,H]=v(""),[K,Y]=v(),q=b(()=>null===l?void 0:(e=>{let{tags:t,...o}=e.data,a="object"==typeof t&&null!==t&&0===Object.keys(t).length;return{role:e.role,data:a?o:e.data}})(l),[l]),[G,J]=v(),Q=I();g(()=>{J(Q??void 0)},[Q]);let[X,Z]=v(),[_,ee]=v();g(()=>{Z(s?.viewMode?"read-revision":"owner")},[s]);let et=C();g(()=>{et?ee(et.accessInfo.viewMode?"read-revision":"owner"):ee(void 0)},[et,et?.accessInfo.viewMode]),g(()=>{if(!n)return void R([]);let e=n.storeSystem.stateSlices.committed.value.state;R([...e.entities]),H(e.rootEntityType);let t=n.storeSystem.stateSlices.committed.subscribe(e=>{R([...e.state.entities]),H(e.state.rootEntityType)});return()=>{t.unsubscribe()}},[n]);let[eo,ea]=v(!1);return t(o,{children:[e(a,{component:"div",sx:{borderBottom:"1px solid #e9ecef",backgroundColor:"#f8f9fa",px:1.5,py:1,display:"flex",flexDirection:"column",gap:1.5,mb:0},children:t(a,{component:"div",sx:{display:"flex",flexDirection:"row",alignItems:"center",justifyContent:"space-between"},children:[e(m,{variant:"subtitle2",sx:{fontWeight:600,color:"#495057",fontSize:"12px"},children:"Create mock yaml from current state"}),e(u,{title:-1===V?"No configuration is loaded yet — load a configuration to capture its state":"Capture the current session, access, configuration and data as a mock template",placement:"left",arrow:!0,enterDelay:300,children:e("span",{children:e(F,{variant:"secondary",onClick:e=>{let t,o,a,n,i,l;e.stopPropagation(),t=x({session:{role:(G??q)?.role??"anonymous",data:(G??q)?.data??{}}}),o=x({access:{access:_??X??"owner"}}),a=x({configuration:{entities:T,modelVersion:V,rootEntityType:U}}),n=A&&Object.keys(A).length>=1?x({publishedData:{data:A}}):"",i=$&&Object.keys($).length>=1?x({frontendData:{data:$}}):"",l=B&&Object.keys(B).length>=1?x({backendData:{data:B}}):"",Y({order:(r.length??0)+1,configuration:a,session:t,access:o,publishedData:n,frontendData:i,backendData:l}),ea(!0)},sx:N,disabled:-1===V,children:"Create Mock"})})})]})}),K&&e(L,{yaml:K,open:eo,onClose:()=>{ea(!1)}})]})};
@@ -18,6 +18,8 @@ export interface EditorMockProviderProps {
18
18
  readonly children: React.ReactNode;
19
19
  readonly mockTemplates?: MockTemplateDefinition[];
20
20
  readonly autoApplyTemplate?: boolean;
21
+ /** Applied on mount in place of the stored template, without being stored. */
22
+ readonly initialTemplateKey?: string;
21
23
  readonly environmentKey?: string;
22
24
  }
23
25
  export declare const EditorMockProvider: (props: EditorMockProviderProps) => import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- import{jsx as e}from"react/jsx-runtime";import{createContext as t,useCallback as r,useContext as o,useEffect as n,useMemo as a,useRef as s,useState as c}from"react";import{AccessLevel as i}from"@salsita-ai/contracts/api";import{createUnsignedJWT as l,memoryStorage as d}from"#package/client";import{createInitialDomainState as u}from"#package/domain";import{useApplicationRuntime as m,useIntegrationService as p,useModal as f,useMountGuard as w}from"#package/react-sdk";import{useEditorConnection as g}from"../services/EditorConnectionContext.js";import{trpc as y}from"../services/trpc.js";import{ConfirmMemoryModeModal as b}from"./ConfirmMemoryModeModal.js";import{ValidationErrorModal as h}from"./ValidationErrorModal.js";let k=e=>{let t=e??("u">typeof window?window.location.pathname:"default");return`phx-editor-template:${t}`},v=e=>`template-configuration-${e}`,E=t(null);export const EditorMockProvider=t=>{let{children:o,mockTemplates:I,autoApplyTemplate:C,environmentKey:V}=t,P=s(!1),S=s(0),M=s(null),[x,D]=c(null),[R,A]=c([]),[T,j]=c(null),[$,B]=c({session:null,access:null,embeddedView:null}),F=w(),L=m(),O=L.actions.overrides,_=p(),{showModal:q}=f(),{localMode:z}=g(),G=a(()=>[...I&&I.length>0?I:R].sort((e,t)=>(e.order??1/0)-(t.order??1/0)),[I,R]),H=r(()=>L.selectors.spec.getConfiguratorFactory(),[L]),J=r(e=>(H().parseSessionData(e.data),{role:e.role,data:e.data}),[H]),K=r(e=>H().parsePublishedData(e.data),[H]),N=r(e=>H().parseFrontendData(e.data),[H]),Q=r(e=>{let t=H();if(!t.hasBackendData)throw Error("Backend data mock could not be applied, because backend data is not supported by the current domain configuration. Please use a domain that supports backend data.");return t.parseBackendData(e.data)},[H]),U=r(e=>{if("recipe"===e.type){if(!e.collection)throw Error("Embedded view mock could not be applied, because a collection is required for recipe type embedded views. Please specify a collection for this mock.");return{type:"recipe",recipeId:`Recipe_${Math.floor(1e6*Math.random())}`,collection:e.collection,...e.rootRecipeId?{rootRecipeId:e.rootRecipeId}:{}}}return{type:"preset",presetId:`Preset_${Math.floor(1e6*Math.random())}`}},[]),W=r((e,t)=>{if(d.has(e))return null;let r=L.selectors.loadedData.getConfiguratorRawLoadedData();if(null===r)return null;let o=L.selectors.domainContext.configurator,n=o.getInitializationState().isCurrent?o.getStoreSystem().stateSlices.committed.value.state.entities:r.initialEntities;return{configurationId:e,revisionId:t??r.initialRevisionId,modelVersion:r.modelVersion,rootEntityType:r.rootEntityType,data:n}},[L]),X=r((e,t)=>{let r=W(e,t);null!==r&&d.set(e,[r])},[W]),Y=r(async()=>!!("server"!==L.selectors.environment.getBasePersistenceConfig().type||L.selectors.overrides.getActive())||new Promise(e=>{q(b,{onConfirm:()=>e(!0),onCancel:()=>e(!1)})}),[L,q]),Z=s(null),ee=r((e,t)=>{let r=e instanceof Error?e.message:t;Z.current?.destroy(),Z.current=q(h,{error:r})},[q]),et=r(async e=>{try{if(!await Y())return;let t=J(e),r=L.selectors.access.getConfiguratorRawAccessService();null!==r&&X(r.configurationId,r.accessInfo.revisionId),O.setSessionContext(t),B(t=>({...t,session:e}))}catch(e){ee(e,"Session mock could not be applied, because an unknown error has occurred. Please check the mock data and try again.")}},[Y,J,L,X,O,ee]),er=r(async e=>{try{if(!await Y())return;let t=L.selectors.access.getConfiguratorRawAccessInfo();null!==t&&X(t.configurationId,t.revisionId),O.setAccessLevel(e.access),B(t=>({...t,access:e}))}catch(e){ee(e,"Access mock could not be applied, because an unknown error has occurred. Please check the mock data and try again.")}},[Y,L,X,O,ee]),eo=r(async e=>{try{if(!await Y())return;let t=U(e),r=L.selectors.access.getConfiguratorRawAccessInfo();null!==r&&X(r.configurationId,r.revisionId),_.enterEmbeddedView(t),O.setEmbeddedViewActive(!0),B(t=>({...t,embeddedView:e}))}catch(e){ee(e,"Embedded view mock could not be applied, because an unknown error has occurred. Please check the mock data and try again.")}},[Y,U,L,X,_,O,ee]),en=r(async()=>{try{let e=T?J(T.session):null;O.setSessionContext(e),B(e=>({...e,session:null}))}catch(e){ee(e,"Session mock could not be reset, because an unknown error has occurred. Please check the active template and try again.")}},[O,T,J,ee]),ea=r(async()=>{O.setAccessLevel(T?.access.access??null),B(e=>({...e,access:null}))},[O,T]),es=r(async()=>{try{let e=T?.embeddedView?U(T.embeddedView):null;null!==e?_.enterEmbeddedView(e):_.exitEmbeddedView(),O.setEmbeddedViewActive(null!==e),B(e=>({...e,embeddedView:null}))}catch(e){ee(e,"Embedded view mock could not be reset, because an unknown error has occurred. Please check the active template and try again.")}},[_,O,T,U,ee]),ec=r(e=>{null!==e&&d.delete(v(e))},[]),ei=r(async()=>{S.current+=1,ec(M.current),M.current=null,D(null),j(null),B({session:null,access:null,embeddedView:null}),_.exitEmbeddedView(),O.clearMockOverrides();try{localStorage.removeItem(k(V))}catch{console.warn("[Editor] Failed to clear template key from localStorage")}},[_,O,V,ec]),el=r(async(e,t)=>{let r=t?.generation??++S.current;try{let t=e.embeddedView?U(e.embeddedView):null,n=J(e.session),a=e.publishedData?K(e.publishedData):null,s=e.frontendData?N(e.frontendData):null,c=e.backendData?Q(e.backendData):null,m=null,p=null,f=L.selectors.access.getConfiguratorRawAccessInfo(),w=null===f?null:W(f.configurationId,f.revisionId);if(e.configuration){let t=v(e.key),r="latest",o=e.configuration,n=H(),a=n.validateAndMigrateState(o.entities,o.modelVersion);u(a,o.rootEntityType),m={configurationId:t,revisionId:r,modelVersion:n.modelVersion,rootEntityType:o.rootEntityType,data:a};let s=Math.floor(Date.now()/1e3),c=l({configurationId:t,revisionId:r,access:e.access.access,iat:s,exp:s+3600});p={configurationId:t,accessInfo:{raw:c,access:"owner"===e.access.access?i.Owner:"read-revision"===e.access.access?i.ReadRevision:i.Read,viewMode:"read-revision"===e.access.access,revisionId:r,configurationId:t}}}else null!==f&&(m=W(f.configurationId,f.revisionId));if(r!==S.current)return;null!==w&&d.set(w.configurationId,[w]),null!==m&&d.set(m.configurationId,[m]),null!==t?_.enterEmbeddedView(t):_.exitEmbeddedView(),O.updateOverrides({accessService:p,accessLevel:null===p?e.access.access:null,sessionContext:n,publishedData:a,frontendData:s,backendData:c,webComponentProperties:e.webComponentProperties??null,embeddedViewActive:null!==t,persistenceConfig:L.selectors.overrides.getPersistenceConfig()}),M.current!==e.key&&ec(M.current),M.current=e.key,D(e.key),j(e),B({session:null,access:null,embeddedView:null});var o=e.key;try{localStorage.setItem(k(V),o)}catch{console.warn("[Editor] Failed to store template key to localStorage")}}catch(o){let r="Template could not be applied, because an unknown error has occurred. Please check the template configuration and try again.";if(t?.errorPresentation==="console")return void console.warn(`[Editor] Template "${e.title}" could not be applied:`,o instanceof Error?o.message:r);ee(o,r)}},[J,H,K,N,Q,U,_,O,ee,V,L,ec,W]),ed=r(async e=>{let t=++S.current;await Y()&&t===S.current&&await el(e,{generation:t})},[Y,el]);y.onMockTemplateChange.useSubscription(void 0,{enabled:!z,onData:e=>{F()&&A(e.templates)}}),n(()=>{if(G&&G.length>0&&!P.current){P.current=!0;let e=(e=>{try{return localStorage.getItem(k(e))}catch{return null}})(V);if(e){let t=G.find(t=>t.key===e);if(t)return void el(t,{errorPresentation:"console"});console.warn(`[Editor] Stored template "${e}" not found in available templates`)}if(C){let e=G[0];e&&el(e,{errorPresentation:"console"})}}},[C,G,el,V]);let eu=a(()=>({activeTemplateKey:x,activeCustomizations:$,effectiveMockTemplates:G,applySessionMock:et,applyAccessMock:er,resetSessionOverride:en,resetAccessOverride:ea,applyEmbeddedViewMock:eo,resetEmbeddedViewOverride:es,applyTemplate:ed,resetAllMocks:ei}),[x,$,G,et,er,en,ea,eo,es,ed,ei]);return e(E.Provider,{value:eu,children:o})};export const useEditorMockContext=()=>{let e=o(E);if(null===e)throw Error("useEditorMockContext must be used within EditorMockProvider");return e};
1
+ import{jsx as e}from"react/jsx-runtime";import{createContext as t,useCallback as r,useContext as o,useEffect as n,useMemo as a,useRef as s,useState as i}from"react";import{AccessLevel as c}from"@salsita-ai/contracts/api";import{createUnsignedJWT as l,memoryStorage as d}from"#package/client";import{createInitialDomainState as u}from"#package/domain";import{useApplicationRuntime as m,useIntegrationService as p,useModal as f,useMountGuard as w}from"#package/react-sdk";import{useEditorConnection as y}from"../services/EditorConnectionContext.js";import{trpc as g}from"../services/trpc.js";import{ConfirmMemoryModeModal as b}from"./ConfirmMemoryModeModal.js";import{ValidationErrorModal as h}from"./ValidationErrorModal.js";let k=e=>{let t=e??("u">typeof window?window.location.pathname:"default");return`phx-editor-template:${t}`},v=e=>`template-configuration-${e}`,E=t(null);export const EditorMockProvider=t=>{let{children:o,mockTemplates:I,autoApplyTemplate:C,initialTemplateKey:V,environmentKey:P}=t,S=s(!1),M=s(0),x=s(null),[D,R]=i(null),[A,T]=i([]),[$,j]=i(null),[B,F]=i({session:null,access:null,embeddedView:null}),L=w(),O=m(),_=O.actions.overrides,q=p(),{showModal:z}=f(),{localMode:G}=y(),H=a(()=>[...I&&I.length>0?I:A].sort((e,t)=>(e.order??1/0)-(t.order??1/0)),[I,A]),J=r(()=>O.selectors.spec.getConfiguratorFactory(),[O]),K=r(e=>(J().parseSessionData(e.data),{role:e.role,data:e.data}),[J]),N=r(e=>J().parsePublishedData(e.data),[J]),Q=r(e=>J().parseFrontendData(e.data),[J]),U=r(e=>{let t=J();if(!t.hasBackendData)throw Error("Backend data mock could not be applied, because backend data is not supported by the current domain configuration. Please use a domain that supports backend data.");return t.parseBackendData(e.data)},[J]),W=r(e=>{if("recipe"===e.type){if(!e.collection)throw Error("Embedded view mock could not be applied, because a collection is required for recipe type embedded views. Please specify a collection for this mock.");return{type:"recipe",recipeId:`Recipe_${Math.floor(1e6*Math.random())}`,collection:e.collection,...e.rootRecipeId?{rootRecipeId:e.rootRecipeId}:{}}}return{type:"preset",presetId:`Preset_${Math.floor(1e6*Math.random())}`}},[]),X=r((e,t)=>{if(d.has(e))return null;let r=O.selectors.loadedData.getConfiguratorRawLoadedData();if(null===r)return null;let o=O.selectors.domainContext.configurator,n=o.getInitializationState().isCurrent?o.getStoreSystem().stateSlices.committed.value.state.entities:r.initialEntities;return{configurationId:e,revisionId:t??r.initialRevisionId,modelVersion:r.modelVersion,rootEntityType:r.rootEntityType,data:n}},[O]),Y=r((e,t)=>{let r=X(e,t);null!==r&&d.set(e,[r])},[X]),Z=r(async()=>!!("server"!==O.selectors.environment.getBasePersistenceConfig().type||O.selectors.overrides.getActive())||new Promise(e=>{z(b,{onConfirm:()=>e(!0),onCancel:()=>e(!1)})}),[O,z]),ee=s(null),et=r((e,t)=>{let r=e instanceof Error?e.message:t;ee.current?.destroy(),ee.current=z(h,{error:r})},[z]),er=r(async e=>{try{if(!await Z())return;let t=K(e),r=O.selectors.access.getConfiguratorRawAccessService();null!==r&&Y(r.configurationId,r.accessInfo.revisionId),_.setSessionContext(t),F(t=>({...t,session:e}))}catch(e){et(e,"Session mock could not be applied, because an unknown error has occurred. Please check the mock data and try again.")}},[Z,K,O,Y,_,et]),eo=r(async e=>{try{if(!await Z())return;let t=O.selectors.access.getConfiguratorRawAccessInfo();null!==t&&Y(t.configurationId,t.revisionId),_.setAccessLevel(e.access),F(t=>({...t,access:e}))}catch(e){et(e,"Access mock could not be applied, because an unknown error has occurred. Please check the mock data and try again.")}},[Z,O,Y,_,et]),en=r(async e=>{try{if(!await Z())return;let t=W(e),r=O.selectors.access.getConfiguratorRawAccessInfo();null!==r&&Y(r.configurationId,r.revisionId),q.enterEmbeddedView(t),_.setEmbeddedViewActive(!0),F(t=>({...t,embeddedView:e}))}catch(e){et(e,"Embedded view mock could not be applied, because an unknown error has occurred. Please check the mock data and try again.")}},[Z,W,O,Y,q,_,et]),ea=r(async()=>{try{let e=$?K($.session):null;_.setSessionContext(e),F(e=>({...e,session:null}))}catch(e){et(e,"Session mock could not be reset, because an unknown error has occurred. Please check the active template and try again.")}},[_,$,K,et]),es=r(async()=>{_.setAccessLevel($?.access.access??null),F(e=>({...e,access:null}))},[_,$]),ei=r(async()=>{try{let e=$?.embeddedView?W($.embeddedView):null;null!==e?q.enterEmbeddedView(e):q.exitEmbeddedView(),_.setEmbeddedViewActive(null!==e),F(e=>({...e,embeddedView:null}))}catch(e){et(e,"Embedded view mock could not be reset, because an unknown error has occurred. Please check the active template and try again.")}},[q,_,$,W,et]),ec=r(e=>{null!==e&&d.delete(v(e))},[]),el=r(async()=>{M.current+=1,ec(x.current),x.current=null,R(null),j(null),F({session:null,access:null,embeddedView:null}),q.exitEmbeddedView(),_.clearMockOverrides();try{localStorage.removeItem(k(P))}catch{console.warn("[Editor] Failed to clear template key from localStorage")}},[q,_,P,ec]),ed=r(async(e,t)=>{let r=t.generation??++M.current;try{let o=e.embeddedView?W(e.embeddedView):null,n=K(e.session),a=e.publishedData?N(e.publishedData):null,s=e.frontendData?Q(e.frontendData):null,i=e.backendData?U(e.backendData):null,m=null,p=null,f=O.selectors.access.getConfiguratorRawAccessInfo(),w=null===f?null:X(f.configurationId,f.revisionId);if(e.configuration){let t=v(e.key),r="latest",o=e.configuration,n=J(),a=n.validateAndMigrateState(o.entities,o.modelVersion);u(a,o.rootEntityType),m={configurationId:t,revisionId:r,modelVersion:n.modelVersion,rootEntityType:o.rootEntityType,data:a};let s=Math.floor(Date.now()/1e3),i=l({configurationId:t,revisionId:r,access:e.access.access,iat:s,exp:s+3600});p={configurationId:t,accessInfo:{raw:i,access:"owner"===e.access.access?c.Owner:"read-revision"===e.access.access?c.ReadRevision:c.Read,viewMode:"read-revision"===e.access.access,revisionId:r,configurationId:t}}}else null!==f&&(m=X(f.configurationId,f.revisionId));if(r!==M.current)return;null!==w&&d.set(w.configurationId,[w]),null!==m&&d.set(m.configurationId,[m]),null!==o?q.enterEmbeddedView(o):q.exitEmbeddedView(),_.updateOverrides({accessService:p,accessLevel:null===p?e.access.access:null,sessionContext:n,publishedData:a,frontendData:s,backendData:i,webComponentProperties:e.webComponentProperties??null,embeddedViewActive:null!==o,persistenceConfig:O.selectors.overrides.getPersistenceConfig()}),x.current!==e.key&&ec(x.current),x.current=e.key,R(e.key),j(e),F({session:null,access:null,embeddedView:null}),t.persist&&((e,t)=>{try{localStorage.setItem(k(t),e)}catch{console.warn("[Editor] Failed to store template key to localStorage")}})(e.key,P)}catch(o){let r="Template could not be applied, because an unknown error has occurred. Please check the template configuration and try again.";if("console"===t.errorPresentation)return void console.warn(`[Editor] Template "${e.title}" could not be applied:`,o instanceof Error?o.message:r);et(o,r)}},[K,J,N,Q,U,W,q,_,et,P,O,ec,X]),eu=r(async e=>{let t=++M.current;await Z()&&t===M.current&&await ed(e,{generation:t,persist:!0})},[Z,ed]);g.onMockTemplateChange.useSubscription(void 0,{enabled:!G,onData:e=>{L()&&T(e.templates)}}),n(()=>{if(H&&H.length>0&&!S.current){if(S.current=!0,V){let e=H.find(e=>e.key===V);if(e)return void ed(e,{errorPresentation:"console",persist:!1});console.warn(`[Editor] Initial template "${V}" not found in available templates`)}let e=(e=>{try{return localStorage.getItem(k(e))}catch{return null}})(P);if(e){let t=H.find(t=>t.key===e);if(t)return void ed(t,{errorPresentation:"console",persist:!0});console.warn(`[Editor] Stored template "${e}" not found in available templates`)}if(C){let e=H[0];e&&ed(e,{errorPresentation:"console",persist:!0})}}},[C,V,H,ed,P]);let em=a(()=>({activeTemplateKey:D,activeCustomizations:B,effectiveMockTemplates:H,applySessionMock:er,applyAccessMock:eo,resetSessionOverride:ea,resetAccessOverride:es,applyEmbeddedViewMock:en,resetEmbeddedViewOverride:ei,applyTemplate:eu,resetAllMocks:el}),[D,B,H,er,eo,ea,es,en,ei,eu,el]);return e(E.Provider,{value:em,children:o})};export const useEditorMockContext=()=>{let e=o(E);if(null===e)throw Error("useEditorMockContext must be used within EditorMockProvider");return e};
@@ -1 +1 @@
1
- import{memo as e,useCallback as r,useRef as t}from"react";import{useOptionalConfigurator as n}from"../hooks/use-optional-runtime.js";import{useEditorConnection as o}from"../services/EditorConnectionContext.js";import{trpc as a}from"../services/trpc.js";export const ScreenshotHandler=e(()=>{let{localMode:e}=o(),i=n(),s=a.submitScreenshot.useMutation(),c=t(!1),l=r(async e=>{if(!c.current){c.current=!0;try{if(!i)return void console.warn("[ScreenshotHandler] configurator context not ready");let r=i.canvasSystem.r3fHandle$.value;if(!r)return void console.warn("[ScreenshotHandler] R3F handle not ready");let{camera:t}=r.get(),n=t.clone(),o=await i.imageRenderingSystem.renderImage({width:e.width,height:e.height,fileFormat:e.fileFormat,camera:n}),a=await o.arrayBuffer(),c=new Uint8Array(a),l="";for(let e=0;e<c.length;e++)l+=String.fromCharCode(c[e]);let u=btoa(l);await s.mutateAsync({requestId:e.requestId,imageBase64:u,fileFormat:e.fileFormat})}catch(e){console.error("[ScreenshotHandler] Failed to capture screenshot:",e)}finally{c.current=!1}}},[i,s]),u=t(l);return u.current=l,a.onScreenshotRequest.useSubscription(void 0,{enabled:!e,onData:e=>{u.current(e)}}),null});
1
+ import{memo as e,useCallback as r,useRef as t}from"react";import{useOptionalConfigurator as o}from"../hooks/use-optional-runtime.js";import{useEditorConnection as n}from"../services/EditorConnectionContext.js";import{trpc as a}from"../services/trpc.js";export const ScreenshotHandler=e(()=>{let{localMode:e}=n(),i=o(),s=a.submitScreenshot.useMutation(),c=t(!1),l=r(async e=>{if(!c.current){c.current=!0;try{if(!i)return void console.warn("[ScreenshotHandler] configurator context not ready");let{camera:r}=(i.canvasSystem.r3fHandle$.value??await i.canvasSystem.waitForCanvas()).get(),t=r.clone(),o=await i.imageRenderingSystem.renderImage({width:e.width,height:e.height,fileFormat:e.fileFormat,camera:t}),n=await o.arrayBuffer(),a=new Uint8Array(n),c="";for(let e=0;e<a.length;e++)c+=String.fromCharCode(a[e]);let l=btoa(c);await s.mutateAsync({requestId:e.requestId,imageBase64:l,fileFormat:e.fileFormat})}catch(e){console.error("[ScreenshotHandler] Failed to capture screenshot:",e)}finally{c.current=!1}}},[i,s]),u=t(l);return u.current=l,a.onScreenshotRequest.useSubscription(void 0,{enabled:!e,onData:e=>{u.current(e)}}),null});
@@ -1,4 +1,6 @@
1
1
  /* eslint-disable @typescript-eslint/triple-slash-reference */
2
+ // Resolved from the SDK's own `vite`, so a project's `import.meta.env` and asset imports type-check without a `vite` of its own
3
+ /// <reference types="vite/client" />
2
4
  /// <reference path="./asset-modules.d.ts" />
3
5
 
4
6
  export {}