@salsita-ai/sdk 0.50.0-develop.d7ce7f7857 → 0.50.0-develop.d815756961

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 (513) 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 +5 -0
  16. package/dist/application-spec/errors/diagnostic-codes.js +1 -1
  17. package/dist/application-spec/errors/diagnostic-messages.d.ts +5 -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/story-files.js +1 -1
  31. package/dist/application-spec/generate-application/code/templates/admin-config.js +3 -0
  32. package/dist/application-spec/generate-application/code/templates/common/format-property-key.d.ts +7 -0
  33. package/dist/application-spec/generate-application/code/templates/common/format-property-key.js +1 -0
  34. package/dist/application-spec/generate-application/code/templates/common/schema-to-type-string.js +3 -3
  35. package/dist/application-spec/generate-application/code/templates/domain-spec/factory-types/domain-factory-types.d.ts +35 -0
  36. package/dist/application-spec/generate-application/code/templates/domain-spec/factory-types/domain-factory-types.js +5 -0
  37. package/dist/application-spec/generate-application/code/templates/domain-spec/factory-types/index.d.ts +1 -0
  38. package/dist/application-spec/generate-application/code/templates/domain-spec/factory-types/index.js +1 -0
  39. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-component-optics.d.ts +1 -1
  40. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-component-optics.js +6 -6
  41. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-domain-block.js +59 -63
  42. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-invariants.d.ts +8 -0
  43. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-invariants.js +1 -1
  44. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-presets.js +1 -1
  45. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-resources.js +13 -13
  46. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-states.d.ts +1 -1
  47. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-states.js +2 -2
  48. package/dist/application-spec/generate-application/code/templates/domain-spec/index.d.ts +2 -1
  49. package/dist/application-spec/generate-application/code/templates/domain-spec/index.js +1 -1
  50. package/dist/application-spec/generate-application/code/templates/eslint-config.d.ts +5 -0
  51. package/dist/application-spec/generate-application/code/templates/eslint-config.js +4 -5
  52. package/dist/application-spec/generate-application/code/templates/frontend-config.js +3 -5
  53. package/dist/application-spec/generate-application/code/templates/gitignore.js +0 -3
  54. package/dist/application-spec/generate-application/code/templates/global-definition/generate-phx-types.d.ts +43 -0
  55. package/dist/application-spec/generate-application/code/templates/global-definition/generate-phx-types.js +31 -0
  56. package/dist/application-spec/generate-application/code/templates/global-definition/index.d.ts +1 -0
  57. package/dist/application-spec/generate-application/code/templates/global-definition/index.js +1 -1
  58. package/dist/application-spec/generate-application/code/templates/globals.js +24 -44
  59. package/dist/application-spec/generate-application/code/templates/index.d.ts +3 -2
  60. package/dist/application-spec/generate-application/code/templates/index.js +1 -1
  61. package/dist/application-spec/generate-application/code/templates/lingui-rc.d.ts +5 -0
  62. package/dist/application-spec/generate-application/code/templates/lingui-rc.js +4 -4
  63. package/dist/application-spec/generate-application/code/templates/prettier-config.d.ts +5 -0
  64. package/dist/application-spec/generate-application/code/templates/prettier-config.js +4 -5
  65. package/dist/application-spec/generate-application/code/templates/root-tsconfig.d.ts +6 -0
  66. package/dist/application-spec/generate-application/code/templates/root-tsconfig.js +2 -0
  67. package/dist/application-spec/generate-application/code/templates/skills/phoenix-cli-skill.js +1 -1
  68. package/dist/application-spec/generate-application/code/templates/skills/phoenix-create-configurator-skill.js +1 -1
  69. package/dist/application-spec/generate-application/code/templates/skills/phoenix-feedback-skill.js +5 -5
  70. package/dist/application-spec/generate-application/code/templates/skills/phoenix-review-skill.js +3 -3
  71. package/dist/application-spec/generate-application/code/templates/skills/phoenix-skill.js +1 -1
  72. package/dist/application-spec/generate-application/code/templates/skills/phoenix-variants-skill.js +2 -2
  73. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.d.ts +16 -4
  74. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.js +2 -2
  75. package/dist/application-spec/generate-application/code/templates/spec-code/collect-spec-code.d.ts +58 -0
  76. package/dist/application-spec/generate-application/code/templates/spec-code/collect-spec-code.js +1 -0
  77. package/dist/application-spec/generate-application/code/templates/spec-code/index.d.ts +2 -0
  78. package/dist/application-spec/generate-application/code/templates/spec-code/index.js +1 -0
  79. package/dist/application-spec/generate-application/code/templates/spec-code/spec-code.d.ts +18 -0
  80. package/dist/application-spec/generate-application/code/templates/spec-code/spec-code.js +41 -0
  81. package/dist/application-spec/generate-application/code/templates/spec-messages/index.d.ts +1 -0
  82. package/dist/application-spec/generate-application/code/templates/spec-messages/index.js +1 -0
  83. package/dist/application-spec/generate-application/code/templates/spec-messages/spec-messages.d.ts +20 -0
  84. package/dist/application-spec/generate-application/code/templates/spec-messages/spec-messages.js +6 -0
  85. package/dist/application-spec/generate-application/code/templates/story/phx-module.d.ts +8 -2
  86. package/dist/application-spec/generate-application/code/templates/story/phx-module.js +15 -3
  87. package/dist/application-spec/generate-application/code/templates/story/wrapper.d.ts +3 -0
  88. package/dist/application-spec/generate-application/code/templates/story/wrapper.js +2 -1
  89. package/dist/application-spec/generate-application/code/templates/tsconfig.d.ts +5 -0
  90. package/dist/application-spec/generate-application/code/templates/tsconfig.js +1 -1
  91. package/dist/application-spec/generate-application/code/templates/webhooks-config.js +2 -3
  92. package/dist/application-spec/generate-application/runtime/admin-runtime/admin-model-runtime.d.ts +6 -4
  93. package/dist/application-spec/generate-application/runtime/admin-runtime/admin-model-runtime.js +1 -1
  94. package/dist/application-spec/generate-application/runtime/admin-runtime/admin-runtime.d.ts +3 -2
  95. package/dist/application-spec/generate-application/runtime/admin-runtime/admin-runtime.js +1 -1
  96. package/dist/application-spec/generate-application/runtime/admin-runtime/states-runtime.d.ts +2 -2
  97. package/dist/application-spec/generate-application/runtime/application-runtime.d.ts +13 -6
  98. package/dist/application-spec/generate-application/runtime/application-runtime.js +1 -1
  99. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-model-runtime.d.ts +6 -4
  100. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-model-runtime.js +1 -1
  101. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-runtime.d.ts +3 -2
  102. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-runtime.js +1 -1
  103. package/dist/application-spec/generate-application/runtime/configurator-runtime/states-runtime.d.ts +2 -2
  104. package/dist/application-spec/generate-application/runtime/migrations/migration-runtime.d.ts +2 -2
  105. package/dist/application-spec/generate-application/runtime/sections/assistant-runtime.d.ts +2 -2
  106. package/dist/application-spec/generate-application/runtime/sections/build-sdk-optic.d.ts +2 -1
  107. package/dist/application-spec/generate-application/runtime/sections/build-sdk-optic.js +1 -1
  108. package/dist/application-spec/generate-application/runtime/sections/build-user-bound-optic.d.ts +2 -1
  109. package/dist/application-spec/generate-application/runtime/sections/build-user-bound-optic.js +1 -1
  110. package/dist/application-spec/generate-application/runtime/sections/component-optic.d.ts +3 -0
  111. package/dist/application-spec/generate-application/runtime/sections/component-optic.js +1 -1
  112. package/dist/application-spec/generate-application/runtime/sections/data-runtime.d.ts +4 -4
  113. package/dist/application-spec/generate-application/runtime/sections/expression-runtime.d.ts +7 -4
  114. package/dist/application-spec/generate-application/runtime/sections/expression-runtime.js +1 -1
  115. package/dist/application-spec/generate-application/runtime/sections/generate-memo-eval-plan-runtime.d.ts +9 -5
  116. package/dist/application-spec/generate-application/runtime/sections/generate-memo-eval-plan-runtime.js +1 -1
  117. package/dist/application-spec/generate-application/runtime/sections/reflection-constants-runtime.d.ts +3 -1
  118. package/dist/application-spec/generate-application/runtime/sections/reflection-constants-runtime.js +1 -1
  119. package/dist/application-spec/generate-application/runtime/sections/theme-runtime.d.ts +2 -2
  120. package/dist/application-spec/generate-application/runtime/sections/transformers-runtime.d.ts +3 -3
  121. package/dist/application-spec/generate-application/runtime/spec-code/index.d.ts +2 -0
  122. package/dist/application-spec/generate-application/runtime/spec-code/index.js +1 -0
  123. package/dist/application-spec/generate-application/runtime/spec-code/resolve-spec-code.d.ts +18 -0
  124. package/dist/application-spec/generate-application/runtime/spec-code/resolve-spec-code.js +1 -0
  125. package/dist/application-spec/generate-application/runtime/spec-code/spec-code-module.d.ts +17 -0
  126. package/dist/application-spec/generate-application/runtime/spec-code/spec-code-module.js +1 -0
  127. package/dist/application-spec/generate-application/runtime-spec/decode-runtime-spec.d.ts +9 -0
  128. package/dist/application-spec/generate-application/runtime-spec/decode-runtime-spec.js +1 -0
  129. package/dist/application-spec/generate-application/runtime-spec/encode-runtime-spec.d.ts +8 -0
  130. package/dist/application-spec/generate-application/runtime-spec/encode-runtime-spec.js +1 -0
  131. package/dist/application-spec/generate-application/runtime-spec/encoded-runtime-spec.d.ts +27 -0
  132. package/dist/application-spec/generate-application/runtime-spec/encoded-runtime-spec.js +1 -0
  133. package/dist/application-spec/generate-application/runtime-spec/index.d.ts +5 -0
  134. package/dist/application-spec/generate-application/runtime-spec/index.js +1 -0
  135. package/dist/application-spec/generate-application/runtime-spec/runtime-spec.d.ts +68 -0
  136. package/dist/application-spec/generate-application/runtime-spec/runtime-spec.js +1 -0
  137. package/dist/application-spec/generate-application/runtime-spec/spec-code-id.d.ts +40 -0
  138. package/dist/application-spec/generate-application/runtime-spec/spec-code-id.js +1 -0
  139. package/dist/application-spec/parse-application-files/categorize/categorize-files.d.ts +28 -0
  140. package/dist/application-spec/parse-application-files/categorize/categorize-files.js +1 -1
  141. package/dist/application-spec/parse-application-files/categorize/earlier-generated-editor-configs.d.ts +16 -0
  142. package/dist/application-spec/parse-application-files/categorize/earlier-generated-editor-configs.js +9 -0
  143. package/dist/application-spec/parse-application-files/categorize/earlier-generated-tsconfig.d.ts +9 -0
  144. package/dist/application-spec/parse-application-files/categorize/earlier-generated-tsconfig.js +1 -0
  145. package/dist/application-spec/parse-application-files/raw-spec/parse-yaml-spec-file.js +1 -1
  146. package/dist/application-spec/parse-application-files/spec/application/admin-spec/admin-spec.js +1 -1
  147. package/dist/application-spec/parse-application-files/spec/application/configurator-spec/configurator-spec.js +1 -1
  148. package/dist/application-spec/parse-application-files/spec/common/index.d.ts +1 -0
  149. package/dist/application-spec/parse-application-files/spec/common/index.js +1 -1
  150. package/dist/application-spec/parse-application-files/spec/common/value-type/format-value-type.d.ts +3 -0
  151. package/dist/application-spec/parse-application-files/spec/common/value-type/format-value-type.js +1 -0
  152. package/dist/application-spec/parse-application-files/spec/common/value-type/index.d.ts +5 -0
  153. package/dist/application-spec/parse-application-files/spec/common/value-type/index.js +1 -0
  154. package/dist/application-spec/parse-application-files/spec/common/value-type/intersect-value-types.d.ts +6 -0
  155. package/dist/application-spec/parse-application-files/spec/common/value-type/intersect-value-types.js +1 -0
  156. package/dist/application-spec/parse-application-files/spec/common/value-type/is-assignable-value-type.d.ts +8 -0
  157. package/dist/application-spec/parse-application-files/spec/common/value-type/is-assignable-value-type.js +1 -0
  158. package/dist/application-spec/parse-application-files/spec/common/value-type/value-type-at.d.ts +10 -0
  159. package/dist/application-spec/parse-application-files/spec/common/value-type/value-type-at.js +1 -0
  160. package/dist/application-spec/parse-application-files/spec/common/value-type/value-type.d.ts +98 -0
  161. package/dist/application-spec/parse-application-files/spec/common/value-type/value-type.js +1 -0
  162. package/dist/application-spec/parse-application-files/spec/components/bindings/component-path.d.ts +13 -0
  163. package/dist/application-spec/parse-application-files/spec/components/bindings/component-path.js +1 -0
  164. package/dist/application-spec/parse-application-files/spec/components/bindings/index.d.ts +2 -0
  165. package/dist/application-spec/parse-application-files/spec/components/bindings/index.js +1 -1
  166. package/dist/application-spec/parse-application-files/spec/components/bindings/read-binding-type.d.ts +24 -0
  167. package/dist/application-spec/parse-application-files/spec/components/bindings/read-binding-type.js +1 -0
  168. package/dist/application-spec/parse-application-files/spec/components/component-state-type.d.ts +8 -0
  169. package/dist/application-spec/parse-application-files/spec/components/component-state-type.js +1 -0
  170. package/dist/application-spec/parse-application-files/spec/components/filter-criterion-types.d.ts +13 -0
  171. package/dist/application-spec/parse-application-files/spec/components/filter-criterion-types.js +1 -0
  172. package/dist/application-spec/parse-application-files/spec/components/static-entity-id.d.ts +14 -0
  173. package/dist/application-spec/parse-application-files/spec/components/static-entity-id.js +1 -0
  174. package/dist/application-spec/parse-application-files/spec/components/user-component-entry.d.ts +6 -0
  175. package/dist/application-spec/parse-application-files/spec/components/user-component-entry.js +1 -1
  176. package/dist/application-spec/parse-application-files/spec/components/user-components.d.ts +7 -4
  177. package/dist/application-spec/parse-application-files/spec/components/user-components.js +1 -1
  178. package/dist/application-spec/parse-application-files/spec/expressions/expression-read-types.d.ts +24 -0
  179. package/dist/application-spec/parse-application-files/spec/expressions/expression-read-types.js +1 -0
  180. package/dist/application-spec/parse-application-files/spec/expressions/expression-read.d.ts +13 -0
  181. package/dist/application-spec/parse-application-files/spec/expressions/expression-read.js +1 -0
  182. package/dist/application-spec/parse-application-files/spec/expressions/expression-value-type.d.ts +9 -0
  183. package/dist/application-spec/parse-application-files/spec/expressions/expression-value-type.js +1 -0
  184. package/dist/application-spec/parse-application-files/spec/expressions/expressions.d.ts +6 -2
  185. package/dist/application-spec/parse-application-files/spec/expressions/expressions.js +1 -1
  186. package/dist/application-spec/parse-application-files/spec/expressions/user-expressions.d.ts +3 -1
  187. package/dist/application-spec/parse-application-files/spec/expressions/user-expressions.js +1 -1
  188. package/dist/application-spec/parse-application-files/spec/invariants/invariants.d.ts +2 -2
  189. package/dist/application-spec/parse-application-files/spec/invariants/invariants.js +1 -1
  190. package/dist/application-spec/parse-application-files/spec/model/index.d.ts +1 -0
  191. package/dist/application-spec/parse-application-files/spec/model/index.js +1 -1
  192. package/dist/application-spec/parse-application-files/spec/model/model-type-resolution.d.ts +10 -0
  193. package/dist/application-spec/parse-application-files/spec/model/model-type-resolution.js +1 -0
  194. package/dist/client/phoenix-api.d.ts +367 -0
  195. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.d.ts +7 -1
  196. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.js +1 -1
  197. package/dist/configurator/application-runtime/extensions/systems/graphql-system/close-unclosed-braces.d.ts +12 -0
  198. package/dist/configurator/application-runtime/extensions/systems/graphql-system/close-unclosed-braces.js +1 -0
  199. package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.d.ts +1 -1
  200. package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.js +1 -1
  201. package/dist/configurator/common/configurator-interface.d.ts +6 -2
  202. package/dist/configurator/common/configurator-interface.js +1 -1
  203. package/dist/configurator/common/index.d.ts +2 -2
  204. package/dist/configurator/common/index.js +1 -1
  205. package/dist/configurator/configuration-not-found-page/ConfigurationNotFoundPageElement.d.ts +12 -0
  206. package/dist/configurator/configuration-not-found-page/ConfigurationNotFoundPageElement.js +1 -0
  207. package/dist/configurator/configuration-not-found-page/index.d.ts +1 -0
  208. package/dist/configurator/configuration-not-found-page/index.js +1 -0
  209. package/dist/configurator/configurator-context/PresetSelectionProvider.js +1 -1
  210. package/dist/configurator/pages/ConfiguratorNotFoundPage.js +1 -1
  211. package/dist/configurator/pages/DefaultConfiguratorLayout.d.ts +3 -2
  212. package/dist/configurator/pages/DefaultNotAuthenticatedPage.d.ts +8 -0
  213. package/dist/configurator/pages/DefaultNotAuthenticatedPage.js +1 -0
  214. package/dist/configurator/pages/DefaultPresetUi.d.ts +7 -0
  215. package/dist/configurator/pages/DefaultPresetUi.js +1 -0
  216. package/dist/configurator/pages/LoadedConfiguratorDetailPage.js +1 -1
  217. package/dist/configurator/pages/NewConfiguratorPage.js +1 -1
  218. package/dist/configurator/pages/RootPage.js +1 -1
  219. package/dist/configurator/pages/default-configurator-elements.d.ts +5 -1
  220. package/dist/configurator/pages/default-configurator-elements.js +1 -1
  221. package/dist/configurator/pages/default-elements/built-in-entity-element.d.ts +10 -0
  222. package/dist/configurator/pages/default-elements/built-in-entity-element.js +1 -0
  223. package/dist/configurator/pages/default-elements/built-in-layout-element.d.ts +10 -0
  224. package/dist/configurator/pages/default-elements/built-in-layout-element.js +1 -0
  225. package/dist/configurator/pages/default-elements/domain-control-elements.d.ts +6 -0
  226. package/dist/configurator/pages/default-elements/domain-control-elements.js +1 -0
  227. package/dist/configurator/pages/default-elements/index.d.ts +4 -0
  228. package/dist/configurator/pages/default-elements/index.js +1 -0
  229. package/dist/configurator/pages/default-elements/recipe-panel-elements.d.ts +3 -0
  230. package/dist/configurator/pages/default-elements/recipe-panel-elements.js +1 -0
  231. package/dist/configurator/pages/default-elements/sidebar-footer-elements.d.ts +7 -0
  232. package/dist/configurator/pages/default-elements/sidebar-footer-elements.js +1 -0
  233. package/dist/configurator/pages/default-elements/toolbar-elements.d.ts +7 -0
  234. package/dist/configurator/pages/default-elements/toolbar-elements.js +1 -0
  235. package/dist/configurator/preset-screen-elements/PresetDeviceNotSupportedElement.d.ts +4 -0
  236. package/dist/configurator/preset-screen-elements/PresetDeviceNotSupportedElement.js +1 -0
  237. package/dist/configurator/preset-screen-elements/PresetPageActionElement.d.ts +4 -0
  238. package/dist/configurator/preset-screen-elements/PresetPageActionElement.js +1 -0
  239. package/dist/configurator/preset-screen-elements/index.d.ts +2 -0
  240. package/dist/configurator/preset-screen-elements/index.js +1 -0
  241. package/dist/configurator/scene/scene-controls/DeleteEntityFab.js +1 -1
  242. package/dist/configurator/scene/scene-controls/SelectionHotspot.js +1 -1
  243. package/dist/configurator/ui/assistant/AssistantMarkdown.d.ts +7 -2
  244. package/dist/configurator/ui/assistant/AssistantMarkdown.js +1 -1
  245. package/dist/configurator/ui/assistant/AssistantPanel.js +1 -1
  246. package/dist/configurator/ui/assistant/AssistantThread.js +1 -1
  247. package/dist/configurator/ui/assistant/entity-link/AssistantEntityLink.d.ts +1 -1
  248. package/dist/configurator/ui/assistant/entity-link/AssistantEntityLink.js +1 -1
  249. package/dist/configurator/ui/assistant/entity-link/entity-link-state.d.ts +1 -1
  250. package/dist/configurator/ui/assistant/entity-link/index.d.ts +0 -1
  251. package/dist/configurator/ui/assistant/entity-link/index.js +1 -1
  252. package/dist/configurator/ui/assistant/form/AssistantForm.d.ts +19 -0
  253. package/dist/configurator/ui/assistant/form/AssistantForm.js +1 -0
  254. package/dist/configurator/ui/assistant/form/built-in-form-registry.d.ts +10 -0
  255. package/dist/configurator/ui/assistant/form/built-in-form-registry.js +1 -0
  256. package/dist/configurator/ui/assistant/form/compose-answer.d.ts +11 -0
  257. package/dist/configurator/ui/assistant/form/compose-answer.js +1 -0
  258. package/dist/configurator/ui/assistant/form/describe-build-errors.d.ts +6 -0
  259. package/dist/configurator/ui/assistant/form/describe-build-errors.js +1 -0
  260. package/dist/configurator/ui/assistant/form/form-element-definition.d.ts +14 -0
  261. package/dist/configurator/ui/assistant/form/form-element-definition.js +1 -0
  262. package/dist/configurator/ui/assistant/form/form-model.d.ts +38 -0
  263. package/dist/configurator/ui/assistant/form/form-model.js +1 -0
  264. package/dist/configurator/ui/assistant/form/form-registry.d.ts +31 -0
  265. package/dist/configurator/ui/assistant/form/form-registry.js +8 -0
  266. package/dist/configurator/ui/assistant/form/form-state.d.ts +4 -0
  267. package/dist/configurator/ui/assistant/form/form-state.js +1 -0
  268. package/dist/configurator/ui/assistant/form/index.d.ts +2 -0
  269. package/dist/configurator/ui/assistant/form/index.js +1 -0
  270. package/dist/configurator/ui/assistant/form/parse-form-block.d.ts +9 -0
  271. package/dist/configurator/ui/assistant/form/parse-form-block.js +1 -0
  272. package/dist/configurator/ui/assistant/form/read-form-attributes.d.ts +13 -0
  273. package/dist/configurator/ui/assistant/form/read-form-attributes.js +1 -0
  274. package/dist/configurator/ui/assistant/form-elements/FormGroup.d.ts +3 -0
  275. package/dist/configurator/ui/assistant/form-elements/FormGroup.js +1 -0
  276. package/dist/configurator/ui/assistant/form-elements/FormOptions.d.ts +3 -0
  277. package/dist/configurator/ui/assistant/form-elements/FormOptions.js +1 -0
  278. package/dist/configurator/ui/assistant/form-elements/FormReply.d.ts +3 -0
  279. package/dist/configurator/ui/assistant/form-elements/FormReply.js +1 -0
  280. package/dist/configurator/ui/assistant/form-elements/FormText.d.ts +3 -0
  281. package/dist/configurator/ui/assistant/form-elements/FormText.js +1 -0
  282. package/dist/configurator/ui/assistant/form-elements/form-element-props.d.ts +34 -0
  283. package/dist/configurator/ui/assistant/form-elements/form-element-props.js +1 -0
  284. package/dist/configurator/ui/assistant/form-elements/index.d.ts +5 -0
  285. package/dist/configurator/ui/assistant/form-elements/index.js +1 -0
  286. package/dist/configurator/ui/assistant/reference-link/AssistantReferenceLink.d.ts +16 -0
  287. package/dist/configurator/ui/assistant/reference-link/AssistantReferenceLink.js +1 -0
  288. package/dist/configurator/ui/assistant/reference-link/assistant-link-target.d.ts +34 -0
  289. package/dist/configurator/ui/assistant/reference-link/assistant-link-target.js +1 -0
  290. package/dist/configurator/ui/assistant/reference-link/assistant-reference-details.d.ts +25 -0
  291. package/dist/configurator/ui/assistant/reference-link/assistant-reference-details.js +1 -0
  292. package/dist/configurator/ui/assistant/reference-link/index.d.ts +3 -0
  293. package/dist/configurator/ui/assistant/reference-link/index.js +1 -0
  294. package/dist/configurator/ui/assistant/reference-link/reference-styles.d.ts +12 -0
  295. package/dist/configurator/ui/assistant/reference-link/reference-styles.js +1 -0
  296. package/dist/configurator/ui/assistant/reference-link/use-assistant-reference-details.d.ts +8 -0
  297. package/dist/configurator/ui/assistant/reference-link/use-assistant-reference-details.js +1 -0
  298. package/dist/configurator/ui/assistant/resource-image/AssistantImage.d.ts +9 -0
  299. package/dist/configurator/ui/assistant/resource-image/AssistantImage.js +1 -0
  300. package/dist/configurator/ui/assistant/resource-image/index.d.ts +3 -0
  301. package/dist/configurator/ui/assistant/resource-image/index.js +1 -0
  302. package/dist/configurator/ui/assistant/resource-image/resource-path.d.ts +11 -0
  303. package/dist/configurator/ui/assistant/resource-image/resource-path.js +1 -0
  304. package/dist/configurator/ui/assistant/resource-image/use-resource-image-url.d.ts +5 -0
  305. package/dist/configurator/ui/assistant/resource-image/use-resource-image-url.js +1 -0
  306. package/dist/configurator/ui/assistant/streamed-markdown.d.ts +2 -0
  307. package/dist/configurator/ui/assistant/streamed-markdown.js +2 -2
  308. package/dist/configurator/ui/assistant/thread-items.d.ts +8 -1
  309. package/dist/configurator/ui/assistant/thread-items.js +1 -1
  310. package/dist/configurator/ui/assistant/use-follow-stream.js +1 -1
  311. package/dist/configurator/ui/configurator-layout/slots/services/InvariantViolations.js +1 -1
  312. package/dist/configurator/ui/configurator-layout/slots/services/Services.js +1 -1
  313. package/dist/configurator/ui/legacy/layout/common/CommonFinalizeButton.js +1 -1
  314. package/dist/configurator/ui/legacy/layout/common/CommonSummaryButton.js +1 -1
  315. package/dist/configurator/ui/legacy/layout/common/CommonTopNavigation.js +1 -1
  316. package/dist/configurator/ui/legacy/layout/common/ResponsiveFinalizeButton.js +1 -1
  317. package/dist/configurator/ui/legacy/layout/common/SummaryReadLayout.js +1 -1
  318. package/dist/configurator/ui/legacy/layout/simple/SimpleOwnerLayout.js +1 -1
  319. package/dist/configurator/ui/legacy/layout/simple/SimpleTopNavigation.js +1 -1
  320. package/dist/configurator/ui/legacy/layout/steps/StepsNavigation.js +1 -1
  321. package/dist/configurator/ui/legacy/layout/steps/StepsOwnerLayout.js +1 -1
  322. package/dist/configurator/ui/legacy/layout/steps/StepsSidebarFooter.js +1 -1
  323. package/dist/configurator/ui/legacy/layout/tabs/TabsOwnerLayout.js +1 -1
  324. package/dist/configurator/ui/legacy/toolbar/common/DimensionUnitSelector.js +1 -1
  325. package/dist/configurator/ui/legacy/toolbar/common/MeasurementsIndicatorsSwitch.js +1 -1
  326. package/dist/configurator/ui/legacy/toolbar/desktop-toolbar/FullscreenToolbarAction.js +1 -1
  327. package/dist/configurator/ui/legacy/toolbar/desktop-toolbar/HelpToolbarAction.js +1 -1
  328. package/dist/configurator/ui/legacy/toolbar/desktop-toolbar/MeasurementsToolbarAction.js +1 -1
  329. package/dist/configurator/ui/legacy/toolbar/desktop-toolbar/UndoRedoToolbarGroup.js +1 -1
  330. package/dist/configurator/ui/phoenix-layout-elements/EnterFullscreenToolbarButton.js +1 -1
  331. package/dist/configurator/ui/phoenix-layout-elements/ExitFullscreenToolbarButton.js +1 -1
  332. package/dist/configurator/ui/phoenix-layout-elements/HelpToolbarButton.js +1 -1
  333. package/dist/configurator/ui/phoenix-layout-elements/LayoutCustomOwnerUi.d.ts +1 -0
  334. package/dist/configurator/ui/phoenix-layout-elements/LayoutCustomOwnerUi.js +1 -1
  335. package/dist/configurator/ui/phoenix-layout-elements/LayoutCustomReadUi.d.ts +1 -0
  336. package/dist/configurator/ui/phoenix-layout-elements/LayoutCustomReadUi.js +1 -1
  337. package/dist/configurator/ui/phoenix-layout-elements/MeasurementsToolbarButton.js +1 -1
  338. package/dist/configurator/ui/phoenix-layout-elements/RedoToolbarButton.js +1 -1
  339. package/dist/configurator/ui/phoenix-layout-elements/UndoToolbarButton.js +1 -1
  340. package/dist/configurator/ui/phoenix-layout-elements/header/common/back-button/use-go-back-action.js +1 -1
  341. package/dist/configurator/ui/phoenix-layout-elements/header/common/horizontal-tabs/DesktopHorizontalTabs.js +1 -1
  342. package/dist/configurator/ui/phoenix-layout-elements/header/common/step-navigation/StepsNavigation.js +1 -1
  343. package/dist/configurator/ui/phoenix-layout-elements/measurements/DimensionUnitSelector.js +1 -1
  344. package/dist/configurator/ui/phoenix-layout-elements/measurements/MeasurementsIndicatorsSwitch.js +1 -1
  345. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/basic/BasicFinalizeButton.js +1 -1
  346. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/common/CustomFinalizeButton.js +1 -1
  347. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/common/EnterSummaryButton.js +1 -1
  348. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/common/NextStepButton.js +1 -1
  349. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/common/PreviousStepButton.js +1 -1
  350. package/dist/configurator/ui/preset-layout/CategoryPresetUi.js +1 -1
  351. package/dist/configurator/ui/preset-layout/PresetUi.d.ts +4 -0
  352. package/dist/configurator/ui/preset-layout/PresetUi.js +1 -1
  353. package/dist/configurator/ui/save-message-snackbars/SaveMessageSnackbars.d.ts +10 -0
  354. package/dist/configurator/ui/save-message-snackbars/SaveMessageSnackbars.js +1 -0
  355. package/dist/configurator/ui/save-message-snackbars/index.d.ts +1 -0
  356. package/dist/configurator/ui/save-message-snackbars/index.js +1 -0
  357. package/dist/docs/controls/select-child-entity/cardselect.mdx +1 -0
  358. package/dist/docs/fabs/basic.mdx +2 -2
  359. package/dist/docs/index.json +1 -1
  360. package/dist/docs/layouts/custom-layout.mdx +325 -15
  361. package/dist/docs/other-features/not-found-404.mdx +1 -1
  362. package/dist/docs/phoenix/clerk-sign-in.mdx +1 -1
  363. package/dist/docs/phoenix/components.mdx +6 -0
  364. package/dist/docs/phoenix/configurator-interface.mdx +39 -11
  365. package/dist/docs/phoenix/deployments.mdx +2 -6
  366. package/dist/docs/phoenix/domain-model.mdx +2 -0
  367. package/dist/docs/phoenix/getting-started.mdx +6 -3
  368. package/dist/docs/phoenix/layout-slots.mdx +9 -9
  369. package/dist/docs/phoenix/localization.mdx +10 -6
  370. package/dist/docs/phoenix/migration-guide.mdx +24 -11
  371. package/dist/docs/phoenix/phoenix-cli.mdx +48 -15
  372. package/dist/docs/phoenix/project-structure.mdx +63 -31
  373. package/dist/docs/phoenix/quickstart.mdx +7 -7
  374. package/dist/docs/phoenix/sdk-builder-workflow.mdx +7 -7
  375. package/dist/docs/phoenix/testing.mdx +8 -0
  376. package/dist/docs/phoenix/webhooks.mdx +4 -4
  377. package/dist/domain/application/assistant/assistant-form-elements.d.ts +28 -0
  378. package/dist/domain/application/assistant/assistant-form-elements.js +1 -0
  379. package/dist/domain/application/assistant/generate-assistant-prompt.js +1 -1
  380. package/dist/domain/application/assistant/index.d.ts +2 -0
  381. package/dist/domain/application/assistant/index.js +1 -1
  382. package/dist/domain/application/assistant-recipe-groups.d.ts +3 -1
  383. package/dist/domain/core/schema/extended-schema-validator.js +1 -1
  384. package/dist/domain/domain-runtime/spec/module-checks/element-registration.d.ts +12 -11
  385. package/dist/domain/domain-runtime/spec/module-checks/element-registration.js +1 -1
  386. package/dist/domain/domain-runtime/spec/module-checks/index.d.ts +1 -1
  387. package/dist/domain/domain-runtime/spec/module-checks/index.js +1 -1
  388. package/dist/domain/domain-runtime/spec/selectors.js +1 -1
  389. package/dist/domain/system-components/child-entity-selection.js +1 -1
  390. package/dist/domain/system-components/common/scene-entity-control-schema.d.ts +3 -0
  391. package/dist/domain/system-components/common/scene-entity-control-schema.js +1 -1
  392. package/dist/editor/Editor.d.ts +7 -0
  393. package/dist/editor/Editor.js +1 -1
  394. package/dist/editor/mocks/CreateMockYaml.js +2 -2
  395. package/dist/editor/mocks/EditorMockContext.d.ts +2 -0
  396. package/dist/editor/mocks/EditorMockContext.js +1 -1
  397. package/dist/globals/index.d.ts +2 -0
  398. package/dist/i18n/locales/cs/messages.js +1 -1
  399. package/dist/i18n/locales/da/messages.js +1 -1
  400. package/dist/i18n/locales/de/messages.js +1 -1
  401. package/dist/i18n/locales/de-AT/messages.js +1 -1
  402. package/dist/i18n/locales/en/messages.js +1 -1
  403. package/dist/i18n/locales/en-AU/messages.js +1 -1
  404. package/dist/i18n/locales/en-GB/messages.js +1 -1
  405. package/dist/i18n/locales/es/messages.js +1 -1
  406. package/dist/i18n/locales/fr/messages.js +1 -1
  407. package/dist/i18n/locales/hu/messages.js +1 -1
  408. package/dist/i18n/locales/it/messages.js +1 -1
  409. package/dist/i18n/locales/nl/messages.js +1 -1
  410. package/dist/i18n/locales/pl/messages.js +1 -1
  411. package/dist/i18n/locales/pt/messages.js +1 -1
  412. package/dist/i18n/locales/ro/messages.js +1 -1
  413. package/dist/i18n/locales/sk/messages.js +1 -1
  414. package/dist/i18n/locales/tr/messages.js +1 -1
  415. package/dist/legacy/domain-cli/utils/cache.d.ts +1 -1
  416. package/dist/legacy/domain-cli/utils/cache.js +1 -1
  417. package/dist/legacy/domain-spec/__generated/domain-schema.d.ts +79 -80
  418. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-admin.js +10 -11
  419. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-embedded-admin.js +9 -10
  420. package/dist/phoenix/application-spec/application-spec-builder.d.ts +0 -2
  421. package/dist/phoenix/application-spec/application-spec-builder.js +1 -1
  422. package/dist/phoenix/application-spec/generate-application-spec-project.d.ts +0 -2
  423. package/dist/phoenix/application-spec/generate-application-spec-project.js +2 -2
  424. package/dist/phoenix/application-spec/generate-application-spec-story.js +2 -2
  425. package/dist/phoenix/application-spec/generate-project-files.d.ts +0 -2
  426. package/dist/phoenix/application-spec/project-files.js +1 -1
  427. package/dist/phoenix/bin.d.ts +2 -0
  428. package/dist/phoenix/bin.js +2 -0
  429. package/dist/phoenix/check-configs/built-in-eslint-config.d.ts +9 -0
  430. package/dist/phoenix/check-configs/built-in-eslint-config.js +1 -0
  431. package/dist/phoenix/check-configs/eslint-config.d.ts +10 -0
  432. package/dist/phoenix/check-configs/eslint-config.js +1 -0
  433. package/dist/phoenix/check-configs/index.d.ts +8 -0
  434. package/dist/phoenix/check-configs/index.js +1 -0
  435. package/dist/phoenix/check-configs/typescript-project.d.ts +5 -0
  436. package/dist/phoenix/check-configs/typescript-project.js +1 -0
  437. package/dist/phoenix/cli.d.ts +0 -1
  438. package/dist/phoenix/cli.js +1 -2
  439. package/dist/phoenix/commands/build.js +1 -1
  440. package/dist/phoenix/commands/check.js +1 -1
  441. package/dist/phoenix/commands/clean.js +1 -1
  442. package/dist/phoenix/commands/deploy.js +2 -2
  443. package/dist/phoenix/commands/deps/deps.d.ts +73 -0
  444. package/dist/phoenix/commands/deps/deps.js +3 -0
  445. package/dist/phoenix/commands/deps/index.d.ts +1 -0
  446. package/dist/phoenix/commands/deps/index.js +1 -0
  447. package/dist/phoenix/commands/deps/sdk-manifest.d.ts +12 -0
  448. package/dist/phoenix/commands/deps/sdk-manifest.js +1 -0
  449. package/dist/phoenix/commands/dev.js +4 -4
  450. package/dist/phoenix/commands/fix.js +1 -1
  451. package/dist/phoenix/commands/index.d.ts +1 -0
  452. package/dist/phoenix/commands/index.js +1 -1
  453. package/dist/phoenix/commands/init.d.ts +17 -5
  454. package/dist/phoenix/commands/init.js +1 -1
  455. package/dist/phoenix/commands/link.js +1 -1
  456. package/dist/phoenix/commands/prettier.js +1 -1
  457. package/dist/phoenix/commands/sync.js +1 -1
  458. package/dist/phoenix/commands/unlink.js +1 -1
  459. package/dist/phoenix/services/application-spec-project-watcher.d.ts +0 -2
  460. package/dist/phoenix/services/application-spec-project-watcher.js +2 -2
  461. package/dist/phoenix/services/lingui.d.ts +8 -0
  462. package/dist/phoenix/services/lingui.js +1 -1
  463. package/dist/phoenix/services/swc.js +1 -1
  464. package/dist/phoenix/services/vite-config.js +1 -1
  465. package/dist/phoenix/utils/index.d.ts +4 -2
  466. package/dist/phoenix/utils/index.js +1 -1
  467. package/dist/phoenix/utils/node-version/index.d.ts +1 -0
  468. package/dist/phoenix/utils/node-version/index.js +1 -0
  469. package/dist/phoenix/utils/node-version/supported-node-version.d.ts +12 -0
  470. package/dist/phoenix/utils/node-version/supported-node-version.js +4 -0
  471. package/dist/phoenix/utils/package-info.d.ts +0 -9
  472. package/dist/phoenix/utils/package-info.js +1 -1
  473. package/dist/phoenix/utils/package-manager/index.d.ts +2 -0
  474. package/dist/phoenix/utils/package-manager/index.js +1 -0
  475. package/dist/phoenix/utils/package-manager/package-manager-commands.d.ts +19 -0
  476. package/dist/phoenix/utils/package-manager/package-manager-commands.js +1 -0
  477. package/dist/phoenix/utils/package-manager/pnpm-project.d.ts +9 -0
  478. package/dist/phoenix/utils/package-manager/pnpm-project.js +1 -0
  479. package/dist/phoenix/utils/run-command.d.ts +11 -0
  480. package/dist/phoenix/utils/run-command.js +1 -1
  481. package/dist/phoenix/utils/sdk-tool/index.d.ts +1 -0
  482. package/dist/phoenix/utils/sdk-tool/index.js +1 -0
  483. package/dist/phoenix/utils/sdk-tool/resolve-sdk-tool-bin.d.ts +15 -0
  484. package/dist/phoenix/utils/sdk-tool/resolve-sdk-tool-bin.js +1 -0
  485. package/dist/react-sdk/application-runtime/common-services/analytics/index.d.ts +1 -0
  486. package/dist/react-sdk/application-runtime/common-services/analytics/index.js +1 -1
  487. package/dist/react-sdk/domain-application-context/DomainLifecycleBoundary.js +1 -1
  488. package/dist/react-sdk/domain-context/common-hooks/use-configurator-messages.d.ts +15 -4
  489. package/dist/react-sdk/domain-context/common-hooks/use-configurator-messages.js +1 -1
  490. package/dist/react-sdk/domain-context/index.d.ts +1 -0
  491. package/dist/react-sdk/domain-context/index.js +1 -1
  492. package/dist/react-sdk/domain-context/system-hooks/undo-redo-hooks.d.ts +20 -0
  493. package/dist/react-sdk/domain-context/system-hooks/undo-redo-hooks.js +1 -0
  494. package/dist/react-sdk/handlers/index.d.ts +1 -0
  495. package/dist/react-sdk/handlers/index.js +1 -1
  496. package/dist/react-sdk/handlers/use-finalize-action.js +1 -0
  497. package/dist/react-sdk/session/NotAuthenticatedPage.d.ts +4 -0
  498. package/dist/react-sdk/session/NotAuthenticatedPage.js +1 -1
  499. package/dist/ui-sdk/theme/types.d.ts +1 -1
  500. package/package.json +16 -12
  501. package/schema/domain-spec.json +86 -8
  502. package/dist/application-spec/generate-application/code/templates/nvmrc.d.ts +0 -1
  503. package/dist/application-spec/generate-application/code/templates/nvmrc.js +0 -2
  504. package/dist/application-spec/generate-application/code/templates/package-json.d.ts +0 -10
  505. package/dist/application-spec/generate-application/code/templates/package-json.js +0 -1
  506. package/dist/configurator/common/use-finalize-action.js +0 -1
  507. package/dist/configurator/ui/assistant/entity-link/entity-link-target.d.ts +0 -5
  508. package/dist/configurator/ui/assistant/entity-link/entity-link-target.js +0 -1
  509. package/dist/phoenix/commands/generate-project-files.d.ts +0 -6
  510. package/dist/phoenix/commands/generate-project-files.js +0 -1
  511. /package/dist/{configurator/common → react-sdk/application-runtime/common-services/analytics}/frontend-analytics.d.ts +0 -0
  512. /package/dist/{configurator/common → react-sdk/application-runtime/common-services/analytics}/frontend-analytics.js +0 -0
  513. /package/dist/{configurator/common → react-sdk/handlers}/use-finalize-action.d.ts +0 -0
@@ -1 +1 @@
1
- import{ChatClient as e,fetchServerSentEvents as t}from"@tanstack/ai-client";import{BehaviorSubject as i}from"rxjs";import{skip as s}from"rxjs/operators";import{isShallowEqual as a}from"@salsita-ai/common/utils";import{AssistantRequestError as r}from"#package/client";import{createBrowserDetailsClientTool as n}from"./browser-details.js";import{ChangeRecorder as o}from"./change-recorder.js";import{createApplyClientTool as l,createQueryClientTool as h}from"./graphql-tools.js";let d=Object.freeze({messages:Object.freeze([]),isLoading:!1,error:void 0,failedStatus:void 0,isContinuable:!0,isLoaded:!1,isResuming:!1,earlierThreads:Object.freeze([]),hasEarlierThread:!1,isLoadingEarlierThread:!1}),c=Object.freeze({open:!1,hasUnreadReply:!1,isInputFocused:!1}),u=Object.freeze({}),_=Object.freeze({results:Object.freeze([]),committed:!1,sideEffects:Object.freeze([]),message:"Nothing was run, because the user closed the configurator while this reply was being written. Do not call any more tools in this reply and end it now. The tools work again as soon as the user writes the next message."}),g=e=>{if(e.getError())return!0;let t=e.getMessages().at(-1)?.parts.at(-1);return t?.type!=="tool-call"&&t?.type!=="tool-result"};export class AssistantSystem{_context;_tools;_chat=new i(d);_panel=new i(c);_activation=null;_current=null;_finishing=new Set;_olderThreadId=null;_resuming=null;_refused=null;_firstAttempt=null;_chain={};_loadingThreadId=null;_recorder;_recording=null;_applyToolCallIds=new WeakMap;_undoTipToolCallId=new i(void 0);constructor(e){this._context=e;let{configuratorExtensionSelectors:t,domainContextSelectors:i,domainServicesSelectors:s,getAssistantSetup:a}=e;this._recorder=new o({maxEntities:30},{readers:{selectedEntityId:e=>i.getNavigationSystem().getActiveSelectionState(e),navigationState:e=>i.getNavigationSystem().getActiveNavigationState(e),viewState:e=>i.getNavigationSystem().getActiveViewState(e),toolState:e=>i.getNavigationSystem().getActiveToolState(e)},getExposedFields:()=>a().manifest?.fields??u,resolveLocalizable:e=>s.getResolveLocalizable()(e)});let r={getGraphQLSystem:()=>t.getGraphQLSystem(),getStoreSystem:()=>i.getStoreSystem(),getActiveMode:()=>i.getActiveMode(),clearChanges:()=>this._recorder.clear(this._committedState()),rememberCommit:(e,t)=>{this._applyToolCallIds.set(t,e),this._refreshUndoTip()}};this._tools=[n(),h(r),l(r)],i.getUndoSystem().tip$.subscribe(this._refreshUndoTip)}chat$=this._chat;panel$=this._panel;undoTipToolCallId$=this._undoTipToolCallId;initialize=()=>{let{committed:e}=this._context.domainContextSelectors.getStoreSystem().stateSlices;this._recording??=e.pipe(s(1)).subscribe(this._recorder.record),this._recorder.reset(e.value.state),this._endChat(),this._patchPanel(c),this._activation&&this._startClient()};activate=()=>{this._endChat();let e={};return this._activation=e,this._startClient(),()=>{this._activation===e&&(this._activation=null,this._endChat())}};send=async e=>{if(!this._chat.value.isContinuable&&!await this.resume())return;let t=this._current;if(!t)return;let i={changes:this._recorder.take(this._committedState())};this._firstAttempt=t;try{await this._sendOn(t,e,i);let s=this._findRefusedMessageIndex(t);if(-1===s)return;this._refused={chat:t,index:s}}finally{this._firstAttempt===t&&(this._firstAttempt=null)}if(!await this.resume())return;let s=this._current;s&&await this._sendOn(s,e,i)};resume=async()=>{let e=this._current;if(!e)return!1;if(this._chat.value.isContinuable)return!0;if(this._resuming)return this._resuming;let t=this._resume(e).finally(()=>{this._resuming===t&&(this._resuming=null)});return this._resuming=t,t};loadEarlierThread=async()=>{let e=this._current,t=this._olderThreadId;if(!e||null===t||this._loadingThreadId===t)return;let i=this._chain;this._loadingThreadId=t,this._chat.next({...this._chat.value,isLoadingEarlierThread:!0});try{let s=await e.authorizedClient.getAssistantEarlierThread(e.configurationId,t,50);if(this._chain!==i||this._olderThreadId!==t)return;this._olderThreadId=s.previousThreadId,this._chat.next({...this._chat.value,earlierThreads:[{threadId:t,messages:s.messages},...this._chat.value.earlierThreads],hasEarlierThread:null!==s.previousThreadId})}catch(e){this._context.domainServicesSelectors.getLogger().warn("Could not load the earlier assistant conversation",{error:e})}finally{this._chain===i&&this._loadingThreadId===t&&(this._loadingThreadId=null,this._chat.next({...this._chat.value,isLoadingEarlierThread:!1}))}};stop=async()=>{let e=this._current;if(!e)return;let t=e.client.getCurrentRunId();if(e.client.stop(),null!=t)try{let i=e.getConnection();await fetch(`${i.url}/runs/${encodeURIComponent(t)}/cancel`,{method:"POST",headers:await i.headers()})}catch(e){this._context.domainServicesSelectors.getLogger().warn("Could not cancel the assistant run on the server",{error:e})}};reloadThread=()=>{if(!this._activation)return;let e=this._retireChat();e?.client.stop(),e?.dispose(),this._recorder.reset(this._committedState()),this._startClient()};undoToolCalls=e=>{let t=this._context.domainContextSelectors.getUndoSystem(),i=()=>{let t=this._findTipToolCallId();return void 0!==t&&e.has(t)};for(;i();)t.undo()};setOpen=e=>{this._patchPanel(e?{open:e,hasUnreadReply:!1}:{open:e,isInputFocused:!1})};setInputFocused=e=>{this._patchPanel({isInputFocused:e})};_findRefusedMessageIndex=e=>{var t;let i,{failedStatus:s,isContinuable:a}=this._chat.value;return this._firstAttempt===e&&e.generation.active&&409===s&&!a?(i=(t=e.client.getMessages()).map(e=>e.role).lastIndexOf("user"),t.slice(i+1).every(e=>0===e.parts.length)?i:-1):-1};_sendOn=async(e,t,i)=>{let{client:s}=e;s.getIsLoading()||null===s.getResumeState()||s.stop();try{await s.sendMessage({content:t,metadata:i})}catch(i){let t=i instanceof Error?i:Error(String(i));e.generation.active&&this._chat.next({...this._chat.value,error:t}),this._context.domainServicesSelectors.getLogger().error("The assistant message could not be sent",{},t)}};_resume=async e=>{this._chat.next({...this._chat.value,isResuming:!0,error:void 0,failedStatus:void 0});try{let{previousThreadId:t}=await e.authorizedClient.compactAssistantThread(e.configurationId);if(!e.generation.active)return!1;let{messages:i,earlierThreads:s,hasEarlierThread:a}=this._chat.value,r=this._refused?.chat===e?i.slice(0,this._refused.index):i;return e.generation.active=!1,this._current=null,e.client.stop(),e.dispose(),this._chat.next({...d,earlierThreads:[...s,{threadId:t,messages:r}],hasEarlierThread:a,isLoadingEarlierThread:null!==this._loadingThreadId}),this._startClient(),!0}catch(i){let t=i instanceof Error?i:Error(String(i));if(t instanceof r&&409===t.status)return e.generation.active&&this.reloadThread(),!1;return e.generation.active&&this._chat.next({...this._chat.value,isResuming:!1,error:t,failedStatus:t instanceof r?t.status:void 0}),this._context.domainServicesSelectors.getLogger().error("The assistant thread could not be resumed",{},t),!1}};_findTipToolCallId=()=>{let e=this._context.domainContextSelectors.getUndoSystem(),t=e.tip$.value?.committedState;return void 0!==t&&e.canUndo()?this._applyToolCallIds.get(t):void 0};_refreshUndoTip=()=>{let e=this._findTipToolCallId();e!==this._undoTipToolCallId.value&&this._undoTipToolCallId.next(e)};_committedState=()=>this._context.domainContextSelectors.getStoreSystem().stateSlices.committed.value.state;_patchPanel=e=>{let t={...this._panel.value,...e};a(t,this._panel.value)||this._panel.next(t)};_takeOverThread=e=>{for(let t of this._finishing)t.configurationId===e&&(t.client.stop(),t.dispose())};_startClient=()=>{let i={active:!0},s=this._context.getConfigurationId();this._takeOverThread(s);let r=this._context.getAuthorizedClient(),n=()=>{if(i.active){let{manifest:e,error:t}=this._context.getAssistantSetup();if(t)throw t;if(!e)throw Error("The assistant is disabled for this session.")}return r.getAssistantChatConnection(s)},o=e=>{if(!i.active)return;let t={...this._chat.value,...e};a(t,this._chat.value)||this._chat.next(t)},l=async(e,t)=>{let s=await fetch(e,t).finally(()=>o({isLoaded:!0})),a=s.headers.get("x-assistant-thread-continuable");return null!=a&&s.ok&&i.active&&0===this._chat.value.earlierThreads.length&&(this._olderThreadId=s.headers.get("x-assistant-previous-thread")),o({failedStatus:s.ok?void 0:s.status,...null!=a&&{isContinuable:"false"!==a,hasEarlierThread:null!==this._olderThreadId}}),s},h=async()=>({headers:await n().headers(),fetchClient:l}),d=t(()=>n().url,h),c=t(()=>`${n().url}/runs`,h),u=this._tools.map(e=>({...e,execute:(t,s)=>{if(!i.active)return _;let{manifest:a,error:r}=this._context.getAssistantSetup();return r||!a?{error:r?.message??"The assistant is disabled for this session."}:e.execute?.(t,s)}})),m=new e({threadId:`assistant:${s}`,connection:{...d,joinRun:c.joinRun},persistence:!0,history:{pageSize:50},tools:u,onMessagesChange:e=>o({messages:e}),onLoadingChange:e=>{let t=i.active&&this._chat.value.isLoading;o({isLoading:e}),!e&&g(m)&&(i.active?t&&!this._panel.value.open&&this._patchPanel({hasUnreadReply:!0}):p())},onErrorChange:e=>{i.active&&e!==this._chat.value.error&&(!e||-1===this._findRefusedMessageIndex(v))&&(o({error:e}),e&&this._context.domainServicesSelectors.getLogger().error("The assistant request failed",{status:this._chat.value.failedStatus},e))}}),f=!1,p=()=>{f||(f=!0,this._finishing.delete(v),m.dispose())},v={client:m,configurationId:s,generation:i,authorizedClient:r,getConnection:n,dispose:p};this._current=v,m.attach()};_retireChat=()=>{let e=this._current;return this._current=null,e&&(e.generation.active=!1),this._chain={},this._olderThreadId=null,this._resuming=null,this._refused=null,this._loadingThreadId=null,this._chat.value!==d&&this._chat.next(d),e};_endChat=()=>{let e=this._retireChat();if(e){if(!e.client.getIsLoading()&&g(e.client))return void e.dispose();this._finishing.add(e)}}}
1
+ import{ChatClient as e,fetchServerSentEvents as t}from"@tanstack/ai-client";import{BehaviorSubject as i}from"rxjs";import{skip as s}from"rxjs/operators";import{isShallowEqual as a}from"@salsita-ai/common/utils";import{AssistantRequestError as r}from"#package/client";import{createBrowserDetailsClientTool as n}from"./browser-details.js";import{ChangeRecorder as o}from"./change-recorder.js";import{createApplyClientTool as l,createQueryClientTool as h}from"./graphql-tools.js";let d=Object.freeze({messages:Object.freeze([]),isLoading:!1,error:void 0,failedStatus:void 0,isContinuable:!0,isLoaded:!1,isResuming:!1,earlierThreads:Object.freeze([]),hasEarlierThread:!1,isLoadingEarlierThread:!1}),c=Object.freeze({open:!1,hasUnreadReply:!1,isInputFocused:!1}),u=Object.freeze({}),_=Object.freeze({results:Object.freeze([]),committed:!1,sideEffects:Object.freeze([]),message:"Nothing was run, because the user closed the configurator while this reply was being written. Do not call any more tools in this reply and end it now. The tools work again as soon as the user writes the next message."}),g=e=>{if(e.getError())return!0;let t=e.getMessages().at(-1)?.parts.at(-1);return t?.type!=="tool-call"&&t?.type!=="tool-result"};export class AssistantSystem{_context;_tools;_chat=new i(d);_panel=new i(c);_activation=null;_current=null;_finishing=new Set;_olderThreadId=null;_resuming=null;_refused=null;_firstAttempt=null;_chain={};_loadingThreadId=null;_recorder;_recording=null;_applyToolCallIds=new WeakMap;_undoTipToolCallId=new i(void 0);constructor(e){this._context=e;let{configuratorExtensionSelectors:t,domainContextSelectors:i,domainServicesSelectors:s,getAssistantSetup:a}=e;this._recorder=new o({maxEntities:30},{readers:{selectedEntityId:e=>i.getNavigationSystem().getActiveSelectionState(e),navigationState:e=>i.getNavigationSystem().getActiveNavigationState(e),viewState:e=>i.getNavigationSystem().getActiveViewState(e),toolState:e=>i.getNavigationSystem().getActiveToolState(e)},getExposedFields:()=>a().manifest?.fields??u,resolveLocalizable:e=>s.getResolveLocalizable()(e)});let r={getGraphQLSystem:()=>t.getGraphQLSystem(),getStoreSystem:()=>i.getStoreSystem(),getActiveMode:()=>i.getActiveMode(),clearChanges:()=>this._recorder.clear(this._committedState()),rememberCommit:(e,t)=>{this._applyToolCallIds.set(t,e),this._refreshUndoTip()}};this._tools=[n(),h(r),l(r)],i.getUndoSystem().tip$.subscribe(this._refreshUndoTip)}chat$=this._chat;panel$=this._panel;undoTipToolCallId$=this._undoTipToolCallId;getSessionManifest=()=>this._context.getAssistantSetup().manifest;initialize=()=>{let{committed:e}=this._context.domainContextSelectors.getStoreSystem().stateSlices;this._recording??=e.pipe(s(1)).subscribe(this._recorder.record),this._recorder.reset(e.value.state),this._endChat(),this._patchPanel(c),this._activation&&this._startClient()};activate=()=>{this._endChat();let e={};return this._activation=e,this._startClient(),()=>{this._activation===e&&(this._activation=null,this._endChat())}};send=async e=>{if(!this._chat.value.isContinuable&&!await this.resume())return;let t=this._current;if(!t)return;let i={changes:this._recorder.take(this._committedState())};this._firstAttempt=t;try{await this._sendOn(t,e,i);let s=this._findRefusedMessageIndex(t);if(-1===s)return;this._refused={chat:t,index:s}}finally{this._firstAttempt===t&&(this._firstAttempt=null)}if(!await this.resume())return;let s=this._current;s&&await this._sendOn(s,e,i)};resume=async()=>{let e=this._current;if(!e)return!1;if(this._chat.value.isContinuable)return!0;if(this._resuming)return this._resuming;let t=this._resume(e).finally(()=>{this._resuming===t&&(this._resuming=null)});return this._resuming=t,t};loadEarlierThread=async()=>{let e=this._current,t=this._olderThreadId;if(!e||null===t||this._loadingThreadId===t)return;let i=this._chain;this._loadingThreadId=t,this._chat.next({...this._chat.value,isLoadingEarlierThread:!0});try{let s=await e.authorizedClient.getAssistantEarlierThread(e.configurationId,t,50);if(this._chain!==i||this._olderThreadId!==t)return;this._olderThreadId=s.previousThreadId,this._chat.next({...this._chat.value,earlierThreads:[{threadId:t,messages:s.messages},...this._chat.value.earlierThreads],hasEarlierThread:null!==s.previousThreadId})}catch(e){this._context.domainServicesSelectors.getLogger().warn("Could not load the earlier assistant conversation",{error:e})}finally{this._chain===i&&this._loadingThreadId===t&&(this._loadingThreadId=null,this._chat.next({...this._chat.value,isLoadingEarlierThread:!1}))}};stop=async()=>{let e=this._current;if(!e)return;let t=e.client.getCurrentRunId();if(e.client.stop(),null!=t)try{let i=e.getConnection();await fetch(`${i.url}/runs/${encodeURIComponent(t)}/cancel`,{method:"POST",headers:await i.headers()})}catch(e){this._context.domainServicesSelectors.getLogger().warn("Could not cancel the assistant run on the server",{error:e})}};reloadThread=()=>{if(!this._activation)return;let e=this._retireChat();e?.client.stop(),e?.dispose(),this._recorder.reset(this._committedState()),this._startClient()};undoToolCalls=e=>{let t=this._context.domainContextSelectors.getUndoSystem(),i=()=>{let t=this._findTipToolCallId();return void 0!==t&&e.has(t)};for(;i();)t.undo()};setOpen=e=>{this._patchPanel(e?{open:e,hasUnreadReply:!1}:{open:e,isInputFocused:!1})};setInputFocused=e=>{this._patchPanel({isInputFocused:e})};_findRefusedMessageIndex=e=>{var t;let i,{failedStatus:s,isContinuable:a}=this._chat.value;return this._firstAttempt===e&&e.generation.active&&409===s&&!a?(i=(t=e.client.getMessages()).map(e=>e.role).lastIndexOf("user"),t.slice(i+1).every(e=>0===e.parts.length)?i:-1):-1};_sendOn=async(e,t,i)=>{let{client:s}=e;s.getIsLoading()||null===s.getResumeState()||s.stop();try{await s.sendMessage({content:t,metadata:i})}catch(i){let t=i instanceof Error?i:Error(String(i));e.generation.active&&this._chat.next({...this._chat.value,error:t}),this._context.domainServicesSelectors.getLogger().error("The assistant message could not be sent",{},t)}};_resume=async e=>{this._chat.next({...this._chat.value,isResuming:!0,error:void 0,failedStatus:void 0});try{let{previousThreadId:t}=await e.authorizedClient.compactAssistantThread(e.configurationId);if(!e.generation.active)return!1;let{messages:i,earlierThreads:s,hasEarlierThread:a}=this._chat.value,r=this._refused?.chat===e?i.slice(0,this._refused.index):i;return e.generation.active=!1,this._current=null,e.client.stop(),e.dispose(),this._chat.next({...d,earlierThreads:[...s,{threadId:t,messages:r}],hasEarlierThread:a,isLoadingEarlierThread:null!==this._loadingThreadId}),this._startClient(),!0}catch(i){let t=i instanceof Error?i:Error(String(i));if(t instanceof r&&409===t.status)return e.generation.active&&this.reloadThread(),!1;return e.generation.active&&this._chat.next({...this._chat.value,isResuming:!1,error:t,failedStatus:t instanceof r?t.status:void 0}),this._context.domainServicesSelectors.getLogger().error("The assistant thread could not be resumed",{},t),!1}};_findTipToolCallId=()=>{let e=this._context.domainContextSelectors.getUndoSystem(),t=e.tip$.value?.committedState;return void 0!==t&&e.canUndo()?this._applyToolCallIds.get(t):void 0};_refreshUndoTip=()=>{let e=this._findTipToolCallId();e!==this._undoTipToolCallId.value&&this._undoTipToolCallId.next(e)};_committedState=()=>this._context.domainContextSelectors.getStoreSystem().stateSlices.committed.value.state;_patchPanel=e=>{let t={...this._panel.value,...e};a(t,this._panel.value)||this._panel.next(t)};_takeOverThread=e=>{for(let t of this._finishing)t.configurationId===e&&(t.client.stop(),t.dispose())};_startClient=()=>{let i={active:!0},s=this._context.getConfigurationId();this._takeOverThread(s);let r=this._context.getAuthorizedClient(),n=()=>{if(i.active){let{manifest:e,error:t}=this._context.getAssistantSetup();if(t)throw t;if(!e)throw Error("The assistant is disabled for this session.")}return r.getAssistantChatConnection(s)},o=e=>{if(!i.active)return;let t={...this._chat.value,...e};a(t,this._chat.value)||this._chat.next(t)},l=async(e,t)=>{let s=await fetch(e,t).finally(()=>o({isLoaded:!0})),a=s.headers.get("x-assistant-thread-continuable");return null!=a&&s.ok&&i.active&&0===this._chat.value.earlierThreads.length&&(this._olderThreadId=s.headers.get("x-assistant-previous-thread")),o({failedStatus:s.ok?void 0:s.status,...null!=a&&{isContinuable:"false"!==a,hasEarlierThread:null!==this._olderThreadId}}),s},h=async()=>({headers:await n().headers(),fetchClient:l}),d=t(()=>n().url,h),c=t(()=>`${n().url}/runs`,h),u=this._tools.map(e=>({...e,execute:(t,s)=>{if(!i.active)return _;let{manifest:a,error:r}=this._context.getAssistantSetup();return r||!a?{error:r?.message??"The assistant is disabled for this session."}:e.execute?.(t,s)}})),f=new e({threadId:`assistant:${s}`,connection:{...d,joinRun:c.joinRun},persistence:!0,history:{pageSize:50},tools:u,onMessagesChange:e=>o({messages:e}),onLoadingChange:e=>{let t=i.active&&this._chat.value.isLoading;o({isLoading:e}),!e&&g(f)&&(i.active?t&&!this._panel.value.open&&this._patchPanel({hasUnreadReply:!0}):p())},onErrorChange:e=>{i.active&&e!==this._chat.value.error&&(!e||-1===this._findRefusedMessageIndex(v))&&(o({error:e}),e&&this._context.domainServicesSelectors.getLogger().error("The assistant request failed",{status:this._chat.value.failedStatus},e))}}),m=!1,p=()=>{m||(m=!0,this._finishing.delete(v),f.dispose())},v={client:f,configurationId:s,generation:i,authorizedClient:r,getConnection:n,dispose:p};this._current=v,f.attach()};_retireChat=()=>{let e=this._current;return this._current=null,e&&(e.generation.active=!1),this._chain={},this._olderThreadId=null,this._resuming=null,this._refused=null,this._loadingThreadId=null,this._chat.value!==d&&this._chat.next(d),e};_endChat=()=>{let e=this._retireChat();if(e){if(!e.client.getIsLoading()&&g(e.client))return void e.dispose();this._finishing.add(e)}}}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * The agent's operation document with the closing braces it left off added at its end. Models
3
+ * often drop the last `}` of a nested selection, and the only error GraphQL gives for it is
4
+ * "Expected Name, found <EOF>", which costs the agent a round trip to fix. At the end of a
5
+ * document, closing braces are the only completion there is, so this cannot change what a valid
6
+ * document means; a brace missing in the middle nests the following fields one level deeper, which
7
+ * validation then rejects. Appending keeps the positions GraphQL reports for the agent's own text.
8
+ * A document with no unclosed brace, which covers every document that parses, or one that still
9
+ * does not parse with them closed is returned as it is, so GraphQL reports the agent's own syntax
10
+ * error and not one of the repair.
11
+ */
12
+ export declare const closeUnclosedBraces: (document: string) => string;
@@ -0,0 +1 @@
1
+ import{Lexer as r,Source as e,TokenKind as t,parse as n}from"graphql";export const closeUnclosedBraces=c=>{let a=(n=>{let c=new r(new e(n)),a=0;try{for(let r=c.advance();r.kind!==t.EOF;r=c.advance())r.kind===t.BRACE_L?a+=1:r.kind===t.BRACE_R&&(a-=1)}catch{return 0}return a})(c);if(a<=0)return c;let l=`${c}${" }".repeat(a)}`;return(r=>{try{return n(r),!0}catch{return!1}})(l)?l:c};
@@ -97,7 +97,7 @@ export declare class GraphQLSystem {
97
97
  /**
98
98
  * Runs the operations in order through one working state that starts at `originalState`: a query
99
99
  * reads the current working state, and each mutation field advances it with its own emission.
100
- * The lenses an operation spreads are injected into its document first. Nothing is committed. The first operation that fails stops the list; every later one gets a
100
+ * The closing braces an operation's document left off are added, then the lenses it spreads are injected into it. Nothing is committed. The first operation that fails stops the list; every later one gets a
101
101
  * "not run" error instead.
102
102
  */
103
103
  prepare: (originalState: AnyDomainState, operations: readonly GraphQLOperation[]) => Promise<readonly PreparedOperation[]>;
@@ -1 +1 @@
1
- import{GraphQLError as e,NoSchemaIntrospectionCustomRule as t,defaultFieldResolver as i,execute as o,getNamedType as n,parse as r,specifiedRules as a,validate as s,validateSchema as l}from"graphql";import{assertExistence as c,createSelector as d,isMessageDescriptor as h,isMultilingualString as u}from"@salsita-ai/common/utils";import{DomainEntityIdSchema as m,createAssistantExecutionSchema as f,findAssistantMutation as p}from"#package/domain";import{createEntityMeta as g}from"./entity-meta.js";import{injectAssistantLenses as y}from"./inject-assistant-lenses.js";import{readSideEffects as v}from"./side-effects.js";let S={errors:[new e("The configurator does not provide this request. This is a fault in the configurator, not in your request. Tell the user this is not available.")]},_={errors:[new e("The configuration is not loaded yet, so there is no state to query. Run the query again once the configurator has finished loading.")]},x=new RegExp(m.pattern),w=[...a,t],E=e=>"object"==typeof e&&null!==e&&"type"in e&&"string"==typeof e.type&&"id"in e&&"string"==typeof e.id,$=(e,t)=>"object"==typeof e&&null!==e?Reflect.get(e,t):void 0,b=e=>e instanceof Error?e.message:String(e),T=e=>/[.!?]$/.test(e)?e:`${e}.`,C=e=>"object"==typeof e&&null!==e&&Object.getPrototypeOf(e)===Object.prototype,R=(e,t)=>{let i=C(e)?e._raw:void 0;if(E(i))return i;if(!Array.isArray(e)&&!C(e))return e;if(t.has(e))throw Error("The value contains itself.");let o=new Set([...t,e]);return Array.isArray(e)?e.map(e=>R(e,o)):Object.fromEntries(Object.entries(e).map(([e,t])=>[e,R(t,o)]))};export const localize=(e,t)=>Array.isArray(e)?e.map(e=>localize(e,t)):"string"==typeof e||h(e)||u(e)?t(e):e;let j=t=>new e(`The configurator cannot handle this request: ${T(t)} This is a fault in the configurator, not in your request. Tell the user this is not available.`),A=e=>(e.errors?.length??0)>0,M=t=>({errors:[new e(`Not run: operation ${t+1} failed, so the operations after it were skipped and no change of the list takes effect. Fix the failing operation and send the whole list again.`)]});export class GraphQLSystem{_context;_selectSchema=d([d.leaf(e=>e)],e=>{try{let t=f(e),i=l(t);return i.length>0?j(i.map(e=>e.message).join(" ")):t}catch(e){return j(b(e))}});_selectLenses=d([d.leaf(e=>e)],e=>r(e));_selectFieldResolver=d([d.leaf(e=>e)],t=>(o,r,a,s)=>{if(s.parentType===s.schema.getQueryType())return i(o,r,a,s);if(s.parentType===s.schema.getMutationType())return this._resolveMutation(s.fieldName,String(s.path.key),r,a);if(!E(o))return i(o,r,a,s);if("meta"===s.fieldName){let e;return g({entity:o,state:("object"==typeof(e=$(o,"_state"))&&null!==e&&"entities"in e&&"rootEntityId"in e?e:void 0)??a.state},{manifest:a.manifest,recipes:this._recipeContext(),prepareStateEmission:(e,t,i)=>this._context.domainContextSelectors.getStoreSystem().prepareStateEmission(e,t,i),find$Entity:(e,t)=>this._find$Entity(e,t),validateEntity:e=>this._context.domainContextSelectors.getDomain().validateEntity(e)})}let{source:l,localized:c}=t[s.parentType.name]?.[s.fieldName]??{source:s.fieldName},d=((t,i)=>{try{return $(t,i)}catch(o){throw new e(`Expression "${i}" failed on ${E(t)?t.id:"an entity"}: ${T(b(o))} This is a fault in the configurator, not in your request. Tell the user this is not available.`,{originalError:o instanceof Error?o:void 0})}})(o,l);return c?localize(d,this._context.domainServicesSelectors.getResolveLocalizable()):l.startsWith("$")&&"JSON"===n(s.returnType).name?((t,i,o)=>{try{return R(o,new Set)}catch(o){throw new e(`Expression "${i}" returned a value that is not plain serializable data on ${E(t)?t.id:"an entity"}: ${T(b(o))} This is a fault in the configurator, not in your request. Tell the user this is not available.`,{originalError:o instanceof Error?o:void 0})}})(o,l,d):d});constructor(e){this._context=e}_get$Entity=(e,t)=>this._context.domainContextSelectors.getDomain().get$Entity(e,t);_find$Entity=(e,t)=>this._context.domainContextSelectors.getDomain().getEntity(e,t)?this._get$Entity(e,t):null;_recipeContext=()=>({componentReader:this._context.domainContextSelectors.getComponentReader(),recipeCooker:this._context.domainContextSelectors.getRecipeCookerSystem(),resolveLocalizable:this._context.domainServicesSelectors.getResolveLocalizable()});_rootValue={root:(e,{state:t})=>this._get$Entity(t.rootEntityId,t),entities:({ids:t},{state:i})=>{if(null==t)return i.entities.map(e=>this._get$Entity(e.id,i));var o=i.rootEntityId;let n=t.filter(e=>!x.test(e));if(n.length>0)throw new e(`${n.map(e=>`"${e}"`).join(", ")} ${1===n.length?"is not an entity id":"are not entity ids"}. Entity ids have the form "<Type>-<number>", e.g. "${o}". Use ids as returned by the "id" field.`);return t.map(e=>x.test(e)?this._find$Entity(e,i):null)},selectedEntity:(e,{state:t})=>this._find$Entity(this._context.domainContextSelectors.getNavigationSystem().getActiveSelectionState(t),t),navigation:(e,{state:t})=>{let i=this._context.domainContextSelectors.getNavigationSystem();return{navigationState:i.getActiveNavigationState(t),viewState:i.getActiveViewState(t),toolState:i.getActiveToolState(t)}}};_resolveType=e=>E(e)?e.type:void 0;initialize=()=>{};_resolveMutation=(t,i,o,n)=>{if(void 0!==n.failedMutationField)throw new e(`Not run: the earlier field "${n.failedMutationField}" of this operation failed, so "${i}" was skipped and no change of the operation takes effect. Fix the failing field and send the operation again.`);try{return this._runMutation(t,o,n)}catch(e){throw n.failedMutationField=i,e}};_runMutation=(t,i,o)=>{let n=p(t,o.manifest);if(!n)throw new e(`The schema declares the mutation "${t}", but the configurator has no implementation for it. This is a fault in the configurator, not in your request. Tell the user this is not available.`);let r=o.state,a=n.implementation(i,r,{manifest:o.manifest,action:this._context.domainContextSelectors.getActionSystem().createContext(r),resolveLocalizable:this._context.domainServicesSelectors.getResolveLocalizable()});if(a.updates.length>0){let i=this._context.domainContextSelectors.getStoreSystem().prepareStateEmission(a.updates,r,"committed");if(!i.validity.valid)throw new e(`The changes of "${t}" were not applied, because the resulting configuration is invalid: ${(e=>{if("uncaught"===e.severity)return`validating it threw: ${T(b(e.error))}`;let t=[...new Set(e.entityViolations.filter(({violation:t})=>t.severity===e.severity).map(({entityId:e})=>e))];return`it has ${e.severity} violations on ${t.join(", ")}.`})(i.validity)} Change the request so the configuration stays valid.`);o.emissions.push(i),o.state=i.state}return a.readResult({previousState:r,state:o.state})};_setup=()=>{let{manifest:t,error:i}=this._context.getAssistantSetup();if(i)return{ready:!1,result:{errors:[new e(i.message,{originalError:i})]}};if(!t)return{ready:!1,result:S};let o=this._selectSchema(t.sdl);return o instanceof e?{ready:!1,result:{errors:[o]}}:{ready:!0,assistant:t,schema:o,lenses:t.lenses?.definitions?this._selectLenses(t.lenses.definitions):void 0,fieldResolver:this._selectFieldResolver(t.fields)}};_run=(t,i,n,a)=>{let l;try{l=r(t)}catch(t){return{errors:[t instanceof e?t:new e(b(t))]}}let c=s(n.schema,l,w);return c.length>0?{errors:c}:o({schema:n.schema,document:l,rootValue:this._rootValue,contextValue:a,variableValues:i.variables,operationName:i.operationName,fieldResolver:n.fieldResolver,typeResolver:this._resolveType})};prepare=async(t,i)=>{let o,n=this._setup();if(!n.ready)return i.map(()=>({result:n.result,emissions:[]}));let r={manifest:n.assistant,state:t,emissions:[],failedMutationField:void 0},a=[];for(let[t,s]of i.entries())if(void 0===o){let i=r.emissions.length;r.failedMutationField=void 0;let l=n.lenses?y(s.document,n.lenses):s.document,c=l instanceof e?{errors:[l]}:await this._run(l,s,n,r);a.push({result:c,emissions:r.emissions.slice(i)}),A(c)&&(o=t)}else a.push({result:M(o),emissions:[]});return a};readSideEffects=e=>{let t=this._context.domainServicesSelectors.getResolveLocalizable();return e.flatMap(({emissions:e})=>e.flatMap(e=>v(e.updates,t)))};_prepareAndCommit=async e=>{let t,i,o,n=this._context.domainContextSelectors.getStoreSystem(),r=await this.prepare(n.stateSlices.committed.value.state,e),a=r.map(({result:e})=>e),s=this.readSideEffects(r),l=r.flatMap(e=>e.emissions);if(a.some(A)||0===l.length)return{results:a,sideEffects:s,outcome:"none"};let d=(t=c(l[0]),i=c(l[l.length-1]),o=l.some(e=>void 0!==e.transformationLog),{kind:"committed",previousState:t.previousState,state:i.state,updates:l.flatMap(e=>e.updates),validity:i.validity,transformationLog:o?l.flatMap(e=>e.transformationLog??[]):void 0});return{results:a,sideEffects:s,outcome:n.commitPrepared(d),preparedState:d.state}};execute=async e=>{if(!this._context.domainContextSelectors.getStoreSystem().isInitialized)return{results:e.map(()=>_),committed:!1,sideEffects:[]};let t=await this._prepareAndCommit(e),{results:i,sideEffects:o,outcome:n,preparedState:r}="conflict"===t.outcome?await this._prepareAndCommit(e):t;return"committed"===n?{results:i,committed:!0,sideEffects:o,preparedState:r}:"held"===n?{results:i,committed:!1,message:"The changes wait for the user's approval and are not applied yet. Do not send them again; the next `[changes]` block lists them once approved.",sideEffects:o,preparedState:r}:"conflict"===n?{results:i,committed:!1,message:"The changes were not committed, because the configuration changed while they were being applied. The results describe a state that was discarded. Query the current configuration and send the operations again if they still make sense.",sideEffects:o}:{results:i,committed:!1,sideEffects:o}}}
1
+ import{GraphQLError as e,NoSchemaIntrospectionCustomRule as t,defaultFieldResolver as i,execute as o,getNamedType as n,parse as r,specifiedRules as a,validate as s,validateSchema as l}from"graphql";import{assertExistence as c,createSelector as d,isMessageDescriptor as h,isMultilingualString as u}from"@salsita-ai/common/utils";import{DomainEntityIdSchema as m,createAssistantExecutionSchema as f,findAssistantMutation as p}from"#package/domain";import{closeUnclosedBraces as g}from"./close-unclosed-braces.js";import{createEntityMeta as y}from"./entity-meta.js";import{injectAssistantLenses as v}from"./inject-assistant-lenses.js";import{readSideEffects as S}from"./side-effects.js";let _={errors:[new e("The configurator does not provide this request. This is a fault in the configurator, not in your request. Tell the user this is not available.")]},x={errors:[new e("The configuration is not loaded yet, so there is no state to query. Run the query again once the configurator has finished loading.")]},w=new RegExp(m.pattern),E=[...a,t],$=e=>"object"==typeof e&&null!==e&&"type"in e&&"string"==typeof e.type&&"id"in e&&"string"==typeof e.id,b=(e,t)=>"object"==typeof e&&null!==e?Reflect.get(e,t):void 0,T=e=>e instanceof Error?e.message:String(e),C=e=>/[.!?]$/.test(e)?e:`${e}.`,R=e=>"object"==typeof e&&null!==e&&Object.getPrototypeOf(e)===Object.prototype,j=(e,t)=>{let i=R(e)?e._raw:void 0;if($(i))return i;if(!Array.isArray(e)&&!R(e))return e;if(t.has(e))throw Error("The value contains itself.");let o=new Set([...t,e]);return Array.isArray(e)?e.map(e=>j(e,o)):Object.fromEntries(Object.entries(e).map(([e,t])=>[e,j(t,o)]))};export const localize=(e,t)=>Array.isArray(e)?e.map(e=>localize(e,t)):"string"==typeof e||h(e)||u(e)?t(e):e;let A=t=>new e(`The configurator cannot handle this request: ${C(t)} This is a fault in the configurator, not in your request. Tell the user this is not available.`),M=e=>(e.errors?.length??0)>0,z=t=>({errors:[new e(`Not run: operation ${t+1} failed, so the operations after it were skipped and no change of the list takes effect. Fix the failing operation and send the whole list again.`)]});export class GraphQLSystem{_context;_selectSchema=d([d.leaf(e=>e)],e=>{try{let t=f(e),i=l(t);return i.length>0?A(i.map(e=>e.message).join(" ")):t}catch(e){return A(T(e))}});_selectLenses=d([d.leaf(e=>e)],e=>r(e));_selectFieldResolver=d([d.leaf(e=>e)],t=>(o,r,a,s)=>{if(s.parentType===s.schema.getQueryType())return i(o,r,a,s);if(s.parentType===s.schema.getMutationType())return this._resolveMutation(s.fieldName,String(s.path.key),r,a);if(!$(o))return i(o,r,a,s);if("meta"===s.fieldName){let e;return y({entity:o,state:("object"==typeof(e=b(o,"_state"))&&null!==e&&"entities"in e&&"rootEntityId"in e?e:void 0)??a.state},{manifest:a.manifest,recipes:this._recipeContext(),prepareStateEmission:(e,t,i)=>this._context.domainContextSelectors.getStoreSystem().prepareStateEmission(e,t,i),find$Entity:(e,t)=>this._find$Entity(e,t),validateEntity:e=>this._context.domainContextSelectors.getDomain().validateEntity(e)})}let{source:l,localized:c}=t[s.parentType.name]?.[s.fieldName]??{source:s.fieldName},d=((t,i)=>{try{return b(t,i)}catch(o){throw new e(`Expression "${i}" failed on ${$(t)?t.id:"an entity"}: ${C(T(o))} This is a fault in the configurator, not in your request. Tell the user this is not available.`,{originalError:o instanceof Error?o:void 0})}})(o,l);return c?localize(d,this._context.domainServicesSelectors.getResolveLocalizable()):l.startsWith("$")&&"JSON"===n(s.returnType).name?((t,i,o)=>{try{return j(o,new Set)}catch(o){throw new e(`Expression "${i}" returned a value that is not plain serializable data on ${$(t)?t.id:"an entity"}: ${C(T(o))} This is a fault in the configurator, not in your request. Tell the user this is not available.`,{originalError:o instanceof Error?o:void 0})}})(o,l,d):d});constructor(e){this._context=e}_get$Entity=(e,t)=>this._context.domainContextSelectors.getDomain().get$Entity(e,t);_find$Entity=(e,t)=>this._context.domainContextSelectors.getDomain().getEntity(e,t)?this._get$Entity(e,t):null;_recipeContext=()=>({componentReader:this._context.domainContextSelectors.getComponentReader(),recipeCooker:this._context.domainContextSelectors.getRecipeCookerSystem(),resolveLocalizable:this._context.domainServicesSelectors.getResolveLocalizable()});_rootValue={root:(e,{state:t})=>this._get$Entity(t.rootEntityId,t),entities:({ids:t},{state:i})=>{if(null==t)return i.entities.map(e=>this._get$Entity(e.id,i));var o=i.rootEntityId;let n=t.filter(e=>!w.test(e));if(n.length>0)throw new e(`${n.map(e=>`"${e}"`).join(", ")} ${1===n.length?"is not an entity id":"are not entity ids"}. Entity ids have the form "<Type>-<number>", e.g. "${o}". Use ids as returned by the "id" field.`);return t.map(e=>w.test(e)?this._find$Entity(e,i):null)},selectedEntity:(e,{state:t})=>this._find$Entity(this._context.domainContextSelectors.getNavigationSystem().getActiveSelectionState(t),t),navigation:(e,{state:t})=>{let i=this._context.domainContextSelectors.getNavigationSystem();return{navigationState:i.getActiveNavigationState(t),viewState:i.getActiveViewState(t),toolState:i.getActiveToolState(t)}}};_resolveType=e=>$(e)?e.type:void 0;initialize=()=>{};_resolveMutation=(t,i,o,n)=>{if(void 0!==n.failedMutationField)throw new e(`Not run: the earlier field "${n.failedMutationField}" of this operation failed, so "${i}" was skipped and no change of the operation takes effect. Fix the failing field and send the operation again.`);try{return this._runMutation(t,o,n)}catch(e){throw n.failedMutationField=i,e}};_runMutation=(t,i,o)=>{let n=p(t,o.manifest);if(!n)throw new e(`The schema declares the mutation "${t}", but the configurator has no implementation for it. This is a fault in the configurator, not in your request. Tell the user this is not available.`);let r=o.state,a=n.implementation(i,r,{manifest:o.manifest,action:this._context.domainContextSelectors.getActionSystem().createContext(r),resolveLocalizable:this._context.domainServicesSelectors.getResolveLocalizable()});if(a.updates.length>0){let i=this._context.domainContextSelectors.getStoreSystem().prepareStateEmission(a.updates,r,"committed");if(!i.validity.valid)throw new e(`The changes of "${t}" were not applied, because the resulting configuration is invalid: ${(e=>{if("uncaught"===e.severity)return`validating it threw: ${C(T(e.error))}`;let t=[...new Set(e.entityViolations.filter(({violation:t})=>t.severity===e.severity).map(({entityId:e})=>e))];return`it has ${e.severity} violations on ${t.join(", ")}.`})(i.validity)} Change the request so the configuration stays valid.`);o.emissions.push(i),o.state=i.state}return a.readResult({previousState:r,state:o.state})};_setup=()=>{let{manifest:t,error:i}=this._context.getAssistantSetup();if(i)return{ready:!1,result:{errors:[new e(i.message,{originalError:i})]}};if(!t)return{ready:!1,result:_};let o=this._selectSchema(t.sdl);return o instanceof e?{ready:!1,result:{errors:[o]}}:{ready:!0,assistant:t,schema:o,lenses:t.lenses?.definitions?this._selectLenses(t.lenses.definitions):void 0,fieldResolver:this._selectFieldResolver(t.fields)}};_run=(t,i,n,a)=>{let l;try{l=r(t)}catch(t){return{errors:[t instanceof e?t:new e(T(t))]}}let c=s(n.schema,l,E);return c.length>0?{errors:c}:o({schema:n.schema,document:l,rootValue:this._rootValue,contextValue:a,variableValues:i.variables,operationName:i.operationName,fieldResolver:n.fieldResolver,typeResolver:this._resolveType})};prepare=async(t,i)=>{let o,n=this._setup();if(!n.ready)return i.map(()=>({result:n.result,emissions:[]}));let r={manifest:n.assistant,state:t,emissions:[],failedMutationField:void 0},a=[];for(let[t,s]of i.entries())if(void 0===o){let i=r.emissions.length;r.failedMutationField=void 0;let l=g(s.document),c=n.lenses?v(l,n.lenses):l,d=c instanceof e?{errors:[c]}:await this._run(c,s,n,r);a.push({result:d,emissions:r.emissions.slice(i)}),M(d)&&(o=t)}else a.push({result:z(o),emissions:[]});return a};readSideEffects=e=>{let t=this._context.domainServicesSelectors.getResolveLocalizable();return e.flatMap(({emissions:e})=>e.flatMap(e=>S(e.updates,t)))};_prepareAndCommit=async e=>{let t,i,o,n=this._context.domainContextSelectors.getStoreSystem(),r=await this.prepare(n.stateSlices.committed.value.state,e),a=r.map(({result:e})=>e),s=this.readSideEffects(r),l=r.flatMap(e=>e.emissions);if(a.some(M)||0===l.length)return{results:a,sideEffects:s,outcome:"none"};let d=(t=c(l[0]),i=c(l[l.length-1]),o=l.some(e=>void 0!==e.transformationLog),{kind:"committed",previousState:t.previousState,state:i.state,updates:l.flatMap(e=>e.updates),validity:i.validity,transformationLog:o?l.flatMap(e=>e.transformationLog??[]):void 0});return{results:a,sideEffects:s,outcome:n.commitPrepared(d),preparedState:d.state}};execute=async e=>{if(!this._context.domainContextSelectors.getStoreSystem().isInitialized)return{results:e.map(()=>x),committed:!1,sideEffects:[]};let t=await this._prepareAndCommit(e),{results:i,sideEffects:o,outcome:n,preparedState:r}="conflict"===t.outcome?await this._prepareAndCommit(e):t;return"committed"===n?{results:i,committed:!0,sideEffects:o,preparedState:r}:"held"===n?{results:i,committed:!1,message:"The changes wait for the user's approval and are not applied yet. Do not send them again; the next `[changes]` block lists them once approved.",sideEffects:o,preparedState:r}:"conflict"===n?{results:i,committed:!1,message:"The changes were not committed, because the configuration changed while they were being applied. The results describe a state that was discarded. Query the current configuration and send the operations again if they still make sense.",sideEffects:o}:{results:i,committed:!1,sideEffects:o}}}
@@ -1,5 +1,5 @@
1
1
  import { type $DomainEntity, type ConfiguratorBuilder, type CreateCustomPhoenixEntityElement, type CreateCustomPhoenixLayoutElement, type CreateGetThemeHandler, type CreateGetWebComponentOptionsHandler, type CreatePhoenixHandler, type DomainEntity, type IsCreateRecipeUpdate, type IsReplaceRecipeUpdate, type TransformerBuilder, type TransformerFactory, type UpdateFactory, getIdSequence } from '#package/domain';
2
- import { type CreateCollectFrontendDataHandler, type CreateFilterPublishedChunksHandler, type CreateNotAuthenticatedPage, type IsAngleDimensionUpdate, type IsAttributeSelectionUpdate, type IsAttributeSwitchUpdate, type IsDeleteEntityUpdate, type IsDistanceDimensionUpdate, type IsGenericDimensionUpdate, type IsSwatchSelectionUpdate, type IsTextValueUpdate, type UseAccessService, type UseActiveNavigationState, type UseActiveToolState, type UseActiveViewState, type UseAnalyticsService, type UseAngleDimension, type UseAttributeSelection, type UseAttributeSwitch, type UseAuthenticatedClient, type UseAuthorizedClient, type UseBackendData, type UseChildEntitySelection, type UseComponent, type UseComponents, type UseComposition, type UseConfigurationId, type UseConfiguratorMessages, type UseControlViolations, type UseCookRecipes, type UseCookReplaceRecipes, type UseCookedRecipes, type UseCookedReplaceRecipes, type UseCreateAuthorizedClient, type UseDeleteEntity, type UseDeletedEntity, type UseDeselect, type UseDistanceDimension, type UseDistanceDimensionSelection, type UseDomainApplicationContext, type UseDomainApplicationProps, type UseDomainContext, type UseDomainEntityState, type UseEntityPrice, type UseEntitySelector, type UseFinalizeViolations, type UseFirstComponent, type UseFirstRootComponent, type UseFrontendData, type UseGenericDimension, type UseGroupedRecipeOptions, type UseHoveredDomainEntityId, type UseHoveredEntity, type UseHoveredEntityId, type UseIntegrationService, type UseIntegrationState, type UseIsFullscreenActive, type UseLoadedData, type UseLoadingState, type UseMapViolationHints, type UseNavigate, type UsePopNavigate, type UsePresetEmbeddedState, type UsePublishedData, type UsePushNavigate, type UseRecipeEmbeddedState, type UseReplaceEntityRecipeOptions, type UseRootComponents, type UseRootEntityId, type UseRootEntityPrice, type UseRootEntitySelector, type UseRootEntityState, type UseSelectEntity, type UseSelectParent, type UseSelectedDomainEntityId, type UseSelectedEntity, type UseSelectedEntityId, type UseSession, type UseSessionRole, type UseSessionService, type UseSetFullscreen, type UseSetViewState, type UseSlice, type UseState, type UseStateValidity, type UseSwatchSelection, type UseSynchronizedSelector, type UseSynchronizedSelector$, type UseTextValue, type UseUpdateControl, type UseUpdatedControl, useLoadingStateValue } from '#package/react-sdk';
2
+ import { type CreateCollectFrontendDataHandler, type CreateFilterPublishedChunksHandler, type CreateNotAuthenticatedPage, type IsAngleDimensionUpdate, type IsAttributeSelectionUpdate, type IsAttributeSwitchUpdate, type IsDeleteEntityUpdate, type IsDistanceDimensionUpdate, type IsGenericDimensionUpdate, type IsSwatchSelectionUpdate, type IsTextValueUpdate, type UseAccessService, type UseActiveNavigationState, type UseActiveToolState, type UseActiveViewState, type UseAnalyticsService, type UseAngleDimension, type UseAttributeSelection, type UseAttributeSwitch, type UseAuthenticatedClient, type UseAuthorizedClient, type UseBackendData, type UseChildEntitySelection, type UseComponent, type UseComponents, type UseComposition, type UseConfigurationId, type UseConfiguratorMessages, type UseControlViolations, type UseCookRecipes, type UseCookReplaceRecipes, type UseCookedRecipes, type UseCookedReplaceRecipes, type UseCreateAuthorizedClient, type UseDeleteEntity, type UseDeletedEntity, type UseDeselect, type UseDistanceDimension, type UseDistanceDimensionSelection, type UseDomainApplicationContext, type UseDomainApplicationProps, type UseDomainContext, type UseDomainEntityState, type UseEntityPrice, type UseEntitySelector, type UseFinalizeAction, type UseFinalizeViolations, type UseFirstComponent, type UseFirstRootComponent, type UseFrontendData, type UseGenericDimension, type UseGroupedRecipeOptions, type UseHoveredDomainEntityId, type UseHoveredEntity, type UseHoveredEntityId, type UseIntegrationService, type UseIntegrationState, type UseIsFullscreenActive, type UseLoadedData, type UseLoadingState, type UseMapViolationHints, type UseNavigate, type UsePopNavigate, type UsePresetEmbeddedState, type UsePublishedData, type UsePushNavigate, type UseRecipeEmbeddedState, type UseReplaceEntityRecipeOptions, type UseRootComponents, type UseRootEntityId, type UseRootEntityPrice, type UseRootEntitySelector, type UseRootEntityState, type UseSelectEntity, type UseSelectParent, type UseSelectedDomainEntityId, type UseSelectedEntity, type UseSelectedEntityId, type UseSession, type UseSessionRole, type UseSessionService, type UseSetFullscreen, type UseSetViewState, type UseSlice, type UseState, type UseStateValidity, type UseSwatchSelection, type UseSynchronizedSelector, type UseSynchronizedSelector$, type UseTextValue, type UseUndoRedo, type UseUpdateControl, type UseUpdatedControl, useLoadingStateValue } from '#package/react-sdk';
3
3
  import { type CreatePhoenixIconSet } from '#package/ui-sdk';
4
4
  import { type UseConfiguratorExtensions } from '../application-runtime/index.js';
5
5
  import { type CreateOnApplicationStartProvider, type CreateOnBackendDataReadyProvider, type CreateOnConfiguratorReadyProvider, type CreateOnFrontendDataReadyProvider, type CreateOnGoToIndexHandler, type CreateOnPresetLoadedHandler, type CreateOnPublishedDataReadyProvider, type CreateOnRoutingReadyProvider, type CreateOnSessionReadyProvider, type UseConfiguratorRouting, type UsePresetSelection, usePropertyPageStack, usePropertyPageState } from '../configurator-context/index.js';
@@ -8,7 +8,6 @@ import type { UseUpdateEntityObjectSelection } from '../scene/scene-entity/drag-
8
8
  import { type CreateAppLoader, type CreateCanvasLoader, type CreateLayoutAdminUi, type CreateLayoutCustomOwnerUi, type CreateLayoutCustomReadUi, type CreateLayoutDialog, type CreateLayoutFooter, type CreateLayoutToolbarDesktop, type CreateLayoutToolbarDesktopFullScreen, type CreateLayoutToolbarReadDesktop, type CreateLayoutToolbarReadDesktopFullScreen, type CreateLayoutUserUi, type CreateToolbarHelp } from '../ui/index.js';
9
9
  import { useGenerateShareLink } from '../ui/phoenix-layout-elements/share/use-share.js';
10
10
  import { type CreatePresetDeviceNotSupported, type CreatePresetPageAction, type CreatePresetUi } from '../ui/preset-layout/PresetUi.js';
11
- import { type UseFinalizeAction } from './use-finalize-action.js';
12
11
  import { type UseResetCamera } from './use-reset-camera.js';
13
12
  export interface ConfiguratorInterface<ENTITIES extends DomainEntity<string>, ALLOWED_ROOT_ENTITIES extends ENTITIES, $MAP extends Record<ENTITIES['type'], $DomainEntity<ENTITIES>>, PUBLISHED_DATA extends Record<string, unknown>, SESSION_DATA extends Record<string, unknown>, FRONTEND_DATA extends Record<string, unknown>, NAVIGATION_STATES extends string, VIEW_STATES extends string, TOOL_STATES extends string, EXPORT_STATES extends string, FINALIZE_DATA extends Record<string, unknown>, FINALIZE_RESULT extends Record<string, unknown>> {
14
13
  /**
@@ -491,6 +490,11 @@ export interface ConfiguratorInterface<ENTITIES extends DomainEntity<string>, AL
491
490
  * Move the camera back to the framing of the active camera configuration, as the toolbar's reset button does
492
491
  */
493
492
  useResetCamera: UseResetCamera;
493
+ /**
494
+ * Undo and redo changes of the configuration, with whether each is possible, as the toolbar's undo and redo
495
+ * buttons do
496
+ */
497
+ useUndoRedo: UseUndoRedo;
494
498
  /**
495
499
  * Returns composition tree of the domain
496
500
  */
@@ -1 +1 @@
1
- import{createCustomPhoenixEntityElement as e,createCustomPhoenixLayoutElement as r,createGetThemeHandler as t,createGetWebComponentOptionsHandler as o,createPhoenixHandler as i,createTransformer as s,createTransformerBuilder as a,createUpdateFactory as m,getIdSequence as n,isCreateEntityUpdate as p,isReplaceEntityUpdate as u}from"#package/domain";import{createCollectFrontendDataHandler as c,createFilterPublishedChunksHandler as d,createNotAuthenticatedPage as f,isAngleDimensionUpdate as j,isAttributeSelectionUpdate as l,isAttributeSwitchUpdate as g,isDeleteEntityUpdate as x,isDistanceDimensionUpdate as y,isGenericDimensionUpdate as k,isSwatchSelectionUpdate as h,isTextValueUpdate as S,useAccessService as E,useActiveNavigationState as I,useActiveToolState as q,useActiveViewState as z,useAnalyticsService as A,useAngleDimension as B,useAttributeSelection as C,useAttributeSwitch as P,useAuthenticatedClient as R,useAuthorizedClient as U,useBackendData as b,useChildEntitySelection as v,useCommittedSlice as w,useCommittedState as D,useComponent as F,useComponents as G,useComposition as H,useConfigurationId as J,useConfiguratorMessages as K,useControlViolations as L,useCookRecipes as M,useCookReplaceRecipes as N,useCookedRecipes as O,useCookedReplaceRecipes as Q,useCreateAuthorizedClient as T,useDeleteEntity as V,useDeletedEntity as W,useDeselect as X,useDistanceDimension as Y,useDistanceDimensionSelection as Z,useDomain as $,useDomainApplication as _,useDomainApplicationProps as ee,useDomainEntityRenderedState as er,useDomainEntityState as et,useEntityPrice as eo,useEntitySelector as ei,useFinalizeViolations as es,useFirstComponent as ea,useFirstRenderedComponent as em,useFirstRootComponent as en,useFirstRootRenderedComponent as ep,useFrontendData as eu,useGenericDimension as ec,useGroupedRecipeOptions as ed,useHoveredDomainEntityId as ef,useHoveredEntity as ej,useHoveredEntityId as el,useIntegrationService as eg,useIntegrationState as ex,useIsFullscreenActive as ey,useLoadedData as ek,useLoadingState as eh,useLoadingStateValue as eS,useMapViolationHints as eE,useNavigate as eI,usePopNavigate as eq,usePresetEmbeddedState as ez,usePublishedData as eA,usePushNavigate as eB,useRecipeEmbeddedState as eC,useRenderedComponent as eP,useRenderedComponents as eR,useRenderedEntitySelector as eU,useRenderedRootEntitySelector as eb,useRenderedSelector as ev,useRenderedSelector$ as ew,useRenderedSlice as eD,useRenderedState as eF,useReplaceEntityRecipeOptions as eG,useRootComponents as eH,useRootEntityId as eJ,useRootEntityPrice as eK,useRootEntityRenderedId as eL,useRootEntityRenderedState as eM,useRootEntitySelector as eN,useRootEntityState as eO,useRootRenderedComponents as eQ,useSelectEntity as eT,useSelectParent as eV,useSelectedDomainEntityId as eW,useSelectedEntity as eX,useSelectedEntityId as eY,useSession as eZ,useSessionRole as e$,useSessionService as e_,useSetFullscreen as e0,useSetViewState as e1,useStateValidity as e2,useStoreSelector as e3,useStoreSelector$ as e4,useSwatchSelection as e5,useTextValue as e6,useUpdateControl as e7,useUpdatedControl as e8}from"#package/react-sdk";import{createPhoenixIconSet as e9}from"#package/ui-sdk";import{useConfigurator as re}from"../application-runtime/index.js";import{createOnApplicationStartProvider as rr,createOnBackendDataReadyProvider as rt,createOnConfiguratorReadyProvider as ro,createOnFrontendDataReadyProvider as ri,createOnGoToIndexHandler as rs,createOnPresetLoadedHandler as ra,createOnPublishedDataReadyProvider as rm,createOnRoutingReadyProvider as rn,createOnSessionReadyProvider as rp,useConfiguratorRouting as ru,usePresetSelection as rc,usePropertyPageStack as rd,usePropertyPageState as rf}from"../configurator-context/index.js";import{createGetTextureProcessingMapHandler as rj}from"../scene/index.js";import{useUpdateEntityObjectSelection as rl}from"../scene/scene-entity/drag-and-drop/use-updated-selection.js";import{createAppLoader as rg,createCanvasLoader as rx,createLayoutAdminUi as ry,createLayoutCustomOwnerUi as rk,createLayoutCustomReadUi as rh,createLayoutDialog as rS,createLayoutFooter as rE,createLayoutToolbarDesktop as rI,createLayoutToolbarDesktopFullScreen as rq,createLayoutToolbarReadDesktop as rz,createLayoutToolbarReadDesktopFullScreen as rA,createLayoutUserUi as rB,createToolbarHelp as rC}from"../ui/index.js";import{useGenerateShareLink as rP}from"../ui/phoenix-layout-elements/share/use-share.js";import{createPresetDeviceNotSupported as rR,createPresetPageAction as rU,createPresetUi as rb}from"../ui/preset-layout/PresetUi.js";import{useFinalizeAction as rv}from"./use-finalize-action.js";import{useResetCamera as rw}from"./use-reset-camera.js";export const createConfiguratorInterface=rD=>({updates:m(),getIdSequence:n,createGetWebComponentOptionsHandler:o,createGetThemeHandler:t,createPhoenixHandler:i,createCustomPhoenixEntityElement:e,createCustomPhoenixLayoutElement:r,createPhoenixIconSet:e9,createGetTextureProcessingMapHandler:rj,createCollectFrontendDataHandler:c,createFilterPublishedChunksHandler:d,createOnGoToIndexHandler:rs,createOnApplicationStartProvider:rr,createOnSessionReadyProvider:rp,createOnPublishedDataReadyProvider:rm,createOnFrontendDataReadyProvider:ri,createOnBackendDataReadyProvider:rt,createOnRoutingReadyProvider:rn,createOnConfiguratorReadyProvider:ro,createOnPresetLoadedHandler:ra,createPresetUi:rb,createPresetPageAction:rU,createPresetDeviceNotSupported:rR,createLayoutFooter:rE,createAppLoader:rg,createCanvasLoader:rx,createLayoutDialog:rS,createLayoutToolbarDesktop:rI,createLayoutToolbarDesktopFullScreen:rq,createLayoutToolbarReadDesktop:rz,createLayoutToolbarReadDesktopFullScreen:rA,createLayoutCustomOwnerUi:rk,createLayoutCustomReadUi:rh,createLayoutAdminUi:ry,createLayoutUserUi:rB,createToolbarHelp:rC,createNotAuthenticatedPage:f,createTransformer:s,transformerBuilder:a(),useAnalytics:A,useAuthenticatedClient:R,useAuthorizedClient:U,useCreateAuthorizedClient:T,useAccessService:E,useConfigurationId:J,useSession:eZ,useSessionRole:e$,useSessionService:e_,useDomain:$,useDomainApplication:_,useConfigurator:re,useConfiguratorRouting:ru,usePresetSelection:rc,usePublishedData:eA,useFrontendData:eu,useBackendData:b,useDomainApplicationProps:ee,useLoadedData:ek,useIntegrationService:eg,useIntegrationState:ex,usePresetEmbeddedState:ez,useRecipeEmbeddedState:eC,useCommittedSlice:w,useRenderedSlice:eD,useCommittedState:D,useRenderedState:eF,useStoreSelector:e3,useRenderedSelector:ev,useStoreSelector$:e4,useRenderedSelector$:ew,useEntitySelector:ei,useRenderedEntitySelector:eU,useRootEntitySelector:eN,useRenderedRootEntitySelector:eb,useStateValidity:e2,useMapViolationHints:eE,useNavigate:eI,usePopNavigate:eq,usePushNavigate:eB,useControlViolations:L,useFinalizeViolations:es,useConfiguratorMessages:K,useFinalizeAction:rv,useComponent:F,useRenderedComponent:eP,useComponents:G,useRenderedComponents:eR,useFirstComponent:ea,useFirstRenderedComponent:em,useRootComponents:eH,useRootRenderedComponents:eQ,useFirstRootComponent:en,useFirstRootRenderedComponent:ep,useEntityState:et,useEntityRenderedState:er,useRootEntityState:eO,useRootEntityRenderedState:eM,useRootEntityId:eJ,useRootEntityRenderedId:eL,useEntityPrice:eo,useRootEntityPrice:eK,useSelectedEntity:eX,useSelectedEntityId:eY,useSelectedDomainEntityId:eW,useSelectEntity:eT,useDeselect:X,useSelectParent:eV,useHoveredEntity:ej,useHoveredEntityId:el,useHoveredDomainEntityId:ef,useActiveNavigationState:I,useActiveViewState:z,useSetViewState:e1,useActiveToolState:q,useIsFullscreenActive:ey,useSetFullscreen:e0,useResetCamera:rw,useComposition:H,useUpdateControl:e7,useUpdatedControl:e8,useCookRecipes:M,useCookedRecipes:O,useCookReplaceRecipes:N,useCookedReplaceRecipes:Q,useDeleteEntity:V,useDeletedEntity:W,useSwatchSelection:e5,useTextValue:e6,useAttributeSelection:C,useAttributeSwitch:P,useDistanceDimension:Y,useDistanceDimensionSelection:Z,useGenericDimension:ec,useAngleDimension:B,useChildEntitySelection:v,useGroupedRecipeOptions:ed,useReplaceEntityRecipeOptions:eG,useUpdateEntityObjectSelection:rl,useGenerateShareLink:rP,useLoadingState:eh,useLoadingStateValue:eS,usePropertyPageStack:rd,usePropertyPageState:rf,isCreateEntityUpdate:p,isReplaceEntityUpdate:u,isDeleteEntityUpdate:x,isAngleDimensionUpdate:j,isDistanceDimensionUpdate:y,isGenericDimensionUpdate:k,isAttributeSelectionUpdate:l,isAttributeSwitchUpdate:g,isTextValueUpdate:S,isSwatchSelectionUpdate:h});
1
+ import{createCustomPhoenixEntityElement as e,createCustomPhoenixLayoutElement as r,createGetThemeHandler as t,createGetWebComponentOptionsHandler as o,createPhoenixHandler as i,createTransformer as s,createTransformerBuilder as a,createUpdateFactory as m,getIdSequence as n,isCreateEntityUpdate as p,isReplaceEntityUpdate as u}from"#package/domain";import{createCollectFrontendDataHandler as c,createFilterPublishedChunksHandler as d,createNotAuthenticatedPage as f,isAngleDimensionUpdate as j,isAttributeSelectionUpdate as g,isAttributeSwitchUpdate as l,isDeleteEntityUpdate as x,isDistanceDimensionUpdate as y,isGenericDimensionUpdate as k,isSwatchSelectionUpdate as h,isTextValueUpdate as S,useAccessService as E,useActiveNavigationState as I,useActiveToolState as q,useActiveViewState as A,useAnalyticsService as B,useAngleDimension as C,useAttributeSelection as P,useAttributeSwitch as R,useAuthenticatedClient as U,useAuthorizedClient as b,useBackendData as v,useChildEntitySelection as w,useCommittedSlice as z,useCommittedState as D,useComponent as F,useComponents as G,useComposition as H,useConfigurationId as J,useConfiguratorMessages as K,useControlViolations as L,useCookRecipes as M,useCookReplaceRecipes as N,useCookedRecipes as O,useCookedReplaceRecipes as Q,useCreateAuthorizedClient as T,useDeleteEntity as V,useDeletedEntity as W,useDeselect as X,useDistanceDimension as Y,useDistanceDimensionSelection as Z,useDomain as $,useDomainApplication as _,useDomainApplicationProps as ee,useDomainEntityRenderedState as er,useDomainEntityState as et,useEntityPrice as eo,useEntitySelector as ei,useFinalizeAction as es,useFinalizeViolations as ea,useFirstComponent as em,useFirstRenderedComponent as en,useFirstRootComponent as ep,useFirstRootRenderedComponent as eu,useFrontendData as ec,useGenericDimension as ed,useGroupedRecipeOptions as ef,useHoveredDomainEntityId as ej,useHoveredEntity as eg,useHoveredEntityId as el,useIntegrationService as ex,useIntegrationState as ey,useIsFullscreenActive as ek,useLoadedData as eh,useLoadingState as eS,useLoadingStateValue as eE,useMapViolationHints as eI,useNavigate as eq,usePopNavigate as eA,usePresetEmbeddedState as eB,usePublishedData as eC,usePushNavigate as eP,useRecipeEmbeddedState as eR,useRenderedComponent as eU,useRenderedComponents as eb,useRenderedEntitySelector as ev,useRenderedRootEntitySelector as ew,useRenderedSelector as ez,useRenderedSelector$ as eD,useRenderedSlice as eF,useRenderedState as eG,useReplaceEntityRecipeOptions as eH,useRootComponents as eJ,useRootEntityId as eK,useRootEntityPrice as eL,useRootEntityRenderedId as eM,useRootEntityRenderedState as eN,useRootEntitySelector as eO,useRootEntityState as eQ,useRootRenderedComponents as eT,useSelectEntity as eV,useSelectParent as eW,useSelectedDomainEntityId as eX,useSelectedEntity as eY,useSelectedEntityId as eZ,useSession as e$,useSessionRole as e_,useSessionService as e0,useSetFullscreen as e1,useSetViewState as e2,useStateValidity as e3,useStoreSelector as e4,useStoreSelector$ as e5,useSwatchSelection as e6,useTextValue as e7,useUndoRedo as e8,useUpdateControl as e9,useUpdatedControl as re}from"#package/react-sdk";import{createPhoenixIconSet as rr}from"#package/ui-sdk";import{useConfigurator as rt}from"../application-runtime/index.js";import{createOnApplicationStartProvider as ro,createOnBackendDataReadyProvider as ri,createOnConfiguratorReadyProvider as rs,createOnFrontendDataReadyProvider as ra,createOnGoToIndexHandler as rm,createOnPresetLoadedHandler as rn,createOnPublishedDataReadyProvider as rp,createOnRoutingReadyProvider as ru,createOnSessionReadyProvider as rc,useConfiguratorRouting as rd,usePresetSelection as rf,usePropertyPageStack as rj,usePropertyPageState as rg}from"../configurator-context/index.js";import{createGetTextureProcessingMapHandler as rl}from"../scene/index.js";import{useUpdateEntityObjectSelection as rx}from"../scene/scene-entity/drag-and-drop/use-updated-selection.js";import{createAppLoader as ry,createCanvasLoader as rk,createLayoutAdminUi as rh,createLayoutCustomOwnerUi as rS,createLayoutCustomReadUi as rE,createLayoutDialog as rI,createLayoutFooter as rq,createLayoutToolbarDesktop as rA,createLayoutToolbarDesktopFullScreen as rB,createLayoutToolbarReadDesktop as rC,createLayoutToolbarReadDesktopFullScreen as rP,createLayoutUserUi as rR,createToolbarHelp as rU}from"../ui/index.js";import{useGenerateShareLink as rb}from"../ui/phoenix-layout-elements/share/use-share.js";import{createPresetDeviceNotSupported as rv,createPresetPageAction as rw,createPresetUi as rz}from"../ui/preset-layout/PresetUi.js";import{useResetCamera as rD}from"./use-reset-camera.js";export const createConfiguratorInterface=rF=>({updates:m(),getIdSequence:n,createGetWebComponentOptionsHandler:o,createGetThemeHandler:t,createPhoenixHandler:i,createCustomPhoenixEntityElement:e,createCustomPhoenixLayoutElement:r,createPhoenixIconSet:rr,createGetTextureProcessingMapHandler:rl,createCollectFrontendDataHandler:c,createFilterPublishedChunksHandler:d,createOnGoToIndexHandler:rm,createOnApplicationStartProvider:ro,createOnSessionReadyProvider:rc,createOnPublishedDataReadyProvider:rp,createOnFrontendDataReadyProvider:ra,createOnBackendDataReadyProvider:ri,createOnRoutingReadyProvider:ru,createOnConfiguratorReadyProvider:rs,createOnPresetLoadedHandler:rn,createPresetUi:rz,createPresetPageAction:rw,createPresetDeviceNotSupported:rv,createLayoutFooter:rq,createAppLoader:ry,createCanvasLoader:rk,createLayoutDialog:rI,createLayoutToolbarDesktop:rA,createLayoutToolbarDesktopFullScreen:rB,createLayoutToolbarReadDesktop:rC,createLayoutToolbarReadDesktopFullScreen:rP,createLayoutCustomOwnerUi:rS,createLayoutCustomReadUi:rE,createLayoutAdminUi:rh,createLayoutUserUi:rR,createToolbarHelp:rU,createNotAuthenticatedPage:f,createTransformer:s,transformerBuilder:a(),useAnalytics:B,useAuthenticatedClient:U,useAuthorizedClient:b,useCreateAuthorizedClient:T,useAccessService:E,useConfigurationId:J,useSession:e$,useSessionRole:e_,useSessionService:e0,useDomain:$,useDomainApplication:_,useConfigurator:rt,useConfiguratorRouting:rd,usePresetSelection:rf,usePublishedData:eC,useFrontendData:ec,useBackendData:v,useDomainApplicationProps:ee,useLoadedData:eh,useIntegrationService:ex,useIntegrationState:ey,usePresetEmbeddedState:eB,useRecipeEmbeddedState:eR,useCommittedSlice:z,useRenderedSlice:eF,useCommittedState:D,useRenderedState:eG,useStoreSelector:e4,useRenderedSelector:ez,useStoreSelector$:e5,useRenderedSelector$:eD,useEntitySelector:ei,useRenderedEntitySelector:ev,useRootEntitySelector:eO,useRenderedRootEntitySelector:ew,useStateValidity:e3,useMapViolationHints:eI,useNavigate:eq,usePopNavigate:eA,usePushNavigate:eP,useControlViolations:L,useFinalizeViolations:ea,useConfiguratorMessages:K,useFinalizeAction:es,useComponent:F,useRenderedComponent:eU,useComponents:G,useRenderedComponents:eb,useFirstComponent:em,useFirstRenderedComponent:en,useRootComponents:eJ,useRootRenderedComponents:eT,useFirstRootComponent:ep,useFirstRootRenderedComponent:eu,useEntityState:et,useEntityRenderedState:er,useRootEntityState:eQ,useRootEntityRenderedState:eN,useRootEntityId:eK,useRootEntityRenderedId:eM,useEntityPrice:eo,useRootEntityPrice:eL,useSelectedEntity:eY,useSelectedEntityId:eZ,useSelectedDomainEntityId:eX,useSelectEntity:eV,useDeselect:X,useSelectParent:eW,useHoveredEntity:eg,useHoveredEntityId:el,useHoveredDomainEntityId:ej,useActiveNavigationState:I,useActiveViewState:A,useSetViewState:e2,useActiveToolState:q,useIsFullscreenActive:ek,useSetFullscreen:e1,useResetCamera:rD,useUndoRedo:e8,useComposition:H,useUpdateControl:e9,useUpdatedControl:re,useCookRecipes:M,useCookedRecipes:O,useCookReplaceRecipes:N,useCookedReplaceRecipes:Q,useDeleteEntity:V,useDeletedEntity:W,useSwatchSelection:e6,useTextValue:e7,useAttributeSelection:P,useAttributeSwitch:R,useDistanceDimension:Y,useDistanceDimensionSelection:Z,useGenericDimension:ed,useAngleDimension:C,useChildEntitySelection:w,useGroupedRecipeOptions:ef,useReplaceEntityRecipeOptions:eH,useUpdateEntityObjectSelection:rx,useGenerateShareLink:rb,useLoadingState:eS,useLoadingStateValue:eE,usePropertyPageStack:rj,usePropertyPageState:rg,isCreateEntityUpdate:p,isReplaceEntityUpdate:u,isDeleteEntityUpdate:x,isAngleDimensionUpdate:j,isDistanceDimensionUpdate:y,isGenericDimensionUpdate:k,isAttributeSelectionUpdate:g,isAttributeSwitchUpdate:l,isTextValueUpdate:S,isSwatchSelectionUpdate:h});
@@ -1,4 +1,4 @@
1
+ export { FrontendAnalyticsFactory } from '#package/react-sdk';
1
2
  export { type ConfiguratorInterface, createConfiguratorInterface } from './configurator-interface.js';
2
- export { FrontendAnalyticsFactory } from './frontend-analytics.js';
3
- export { type UseFinalizeAction, type UseFinalizeActionResult, useFinalizeAction } from './use-finalize-action.js';
3
+ export { type UseFinalizeAction, type UseFinalizeActionResult, useFinalizeAction } from '#package/react-sdk';
4
4
  export { type UseResetCamera, useResetCamera } from './use-reset-camera.js';
@@ -1 +1 @@
1
- export{createConfiguratorInterface}from"./configurator-interface.js";export{FrontendAnalyticsFactory}from"./frontend-analytics.js";export{useFinalizeAction}from"./use-finalize-action.js";export{useResetCamera}from"./use-reset-camera.js";
1
+ export{FrontendAnalyticsFactory,useFinalizeAction}from"#package/react-sdk";export{createConfiguratorInterface}from"./configurator-interface.js";export{useResetCamera}from"./use-reset-camera.js";
@@ -0,0 +1,12 @@
1
+ import { type ConfigurationNotFoundPageProps } from '#package/react-sdk';
2
+ /**
3
+ * The name a project registers a layout element under to replace the page shown when a configuration
4
+ * cannot be loaded or opened. Its default, the built-in `ConfigurationNotFoundPage`, is registered in
5
+ * `defaultConfiguratorElements`.
6
+ */
7
+ export declare const ConfigurationNotFoundPageName = "ConfigurationNotFoundPage";
8
+ /**
9
+ * Renders the `ConfigurationNotFoundPage` element. `onBack` is passed only where leaving the page leads
10
+ * somewhere, which is the start of the configurator.
11
+ */
12
+ export declare const ConfigurationNotFoundPageElement: (props: ConfigurationNotFoundPageProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ import{jsx as o}from"react/jsx-runtime";import{PhoenixLayoutElement as t}from"#package/react-sdk";export const ConfigurationNotFoundPageName="ConfigurationNotFoundPage";export const ConfigurationNotFoundPageElement=n=>o(t,{name:"ConfigurationNotFoundPage",elementProps:{...n}});
@@ -0,0 +1 @@
1
+ export { ConfigurationNotFoundPageElement, ConfigurationNotFoundPageName } from './ConfigurationNotFoundPageElement.js';
@@ -0,0 +1 @@
1
+ export{ConfigurationNotFoundPageElement,ConfigurationNotFoundPageName}from"./ConfigurationNotFoundPageElement.js";
@@ -1 +1 @@
1
- import{jsx as e}from"react/jsx-runtime";import{Button as t}from"@mui/material";import{useMutation as r}from"@tanstack/react-query";import{useSnackbar as i}from"notistack";import{useSubscription as o}from"observable-hooks";import{createContext as s,useCallback as n,useContext as a,useEffect as l,useMemo as m,useState as d}from"react";import{skip as p}from"rxjs";import{match as c}from"ts-pattern";import{AuthorizedClient as g,LocalStorageAuthorizedPhoenixApiClient as u,MemoryAuthorizedPhoenixApiClient as f}from"#package/client";import{SYSTEM_CHUNK_KEY as h,standardWebComponentProperties as y}from"#package/domain";import{ApplicationRoutes as P,useAnalyticsService as v,useAuthenticatedClient as w,useConfiguratorDomainFactory as x,useEagerObservableValue as C,useIsDev as T,useLogger as k,usePersistenceConfig as D,usePublishedData as S,useResolveLocalizable as E,useRoutingSelectors as b,useSessionService as A,useSpecPresetSeed as j,useWebComponentProperty$ as I}from"#package/react-sdk";import{FrontendAnalyticsFactory as V}from"../common/frontend-analytics.js";import{useOnPresetLoadedHandler as $}from"./OnPresetLoadedHandler.js";import{useConfiguratorRouting as F}from"./configurator-routing/index.js";let M={id:"sdk.presets.create.error.message",message:"Could not start configuring from this preset. Please try again."},R={id:"sdk.presets.create.error.dismiss.label",message:"Dismiss"},q="phx-preset-creation-error";export const PresetSelectionContext=s(null);export const usePresetSelection=()=>{let e=a(PresetSelectionContext);if(null===e)throw Error("usePresetSelection must be used within a PresetSelectionProvider!");return e};let z=e=>t=>null===e||void 0!==t.tags&&t.tags.some(t=>e.includes(t));export const PresetSelectionProvider=s=>{let{children:a}=s,[H,L]=d(null),[O,U]=d(null),B=j(),G=w(),J=v(),K=D(),N=x(),Q=T(),W=E(),{requestSessionToken:X}=A(),Y=k(),Z=F(),_=b(),ee=S(),{enqueueSnackbar:et,closeSnackbar:er}=i(),ei=I(y.presetTags),eo=C(ei),es=$();o(m(()=>ei.pipe(p(1)),[ei]),()=>{_.getRoutingState().route!==P.Index&&Z.goToIndex()}),l(()=>{U(null),er(q)},[Q,er]);let{mutate:en}=r({mutationFn:n(async e=>{let{getData:t,name:r}=e,{rootEntityType:i,entities:o,modelVersion:s}=await t(),n=N.validateAndMigrateState(o,s);J.push(V.ProductSelected(i,W(r)));let a=es?await es(n):n;return G.createConfiguration({rootEntityType:i,data:a})},[N,J,W,G,es]),onSuccess:e=>{Z.goToConfigurationDetail(e.configurationId,e.accessToken)},onError:(e,t)=>{Y.error("Failed to create a new configuration from a preset!",{name:t.name},e),U(e)},onSettled:()=>{L(null)}}),ea=m(()=>{let e,t=(e=h in ee?ee[h].presetCategories:ee.presetCategories,{publishedPresetCategories:(e??[]).map(e=>({...e,presets:e.presets.filter(z(eo))})).filter(e=>e.presets.length>0),seedPresets:B.filter(z(eo))});return t.publishedPresetCategories.length>0?t.publishedPresetCategories.map(e=>({id:e.id,name:e.name,description:e.description,img:e.img,imgAlt:e.imgAlt,presets:e.presets.map(e=>({id:e.configurationId,name:e.name,description:e.description,img:e?.img,imgAlt:e?.imgAlt,detailTitle:e?.detailTitle,detailDescription:e?.detailDescription,getData:async()=>{let t=c(K).with({type:"server"},t=>new g(t.serverUrl,()=>e.readToken,X)).with({type:"local-storage"},()=>new u(N.modelVersion)).with({type:"memory"},()=>new f(N.modelVersion)).exhaustive(),r=await t.getConfigurationRevision(e.configurationId,e.revisionId);return{entities:r.data,rootEntityType:r.rootEntityType,modelVersion:r.modelVersion}}}))})):t.seedPresets.length>0?[{id:"Default",name:"Default Category",presets:t.seedPresets.map((e,t)=>({id:`${t}`,name:e.name??`${e.rootEntityType} preset - ${t}`,description:e.description??"",img:e.img,imgAlt:e.imgAlt,detailTitle:e.detailTitle,detailDescription:e.detailDescription,getData:async()=>({entities:e.initialDomainEntities,rootEntityType:e.rootEntityType,modelVersion:N.modelVersion})}))}]:[]},[ee,X,K,N,eo,B]),el=m(()=>ea.flatMap(e=>e.presets),[ea]),em=n(r=>{let i=el.find(e=>e.id===r);if(void 0===i)throw Error(`Preset with id ${r} not found!`);let{getData:o,name:s}=i,n=!Q&&el.length>1;U(null),L(r),en({getData:o,name:s},{onError:()=>{n&&(er(q),et(W(M),{variant:"error",key:q,persist:!0,preventDuplicate:!0,action:r=>e(t,{color:"inherit",size:"small",onClick:()=>{U(null),er(r)},children:W(R)})}))}})},[el,Q,en,et,er,W]),ed=el.length>1,ep=m(()=>({hasMultiplePresets:ed,presetCategories:ea,selectPreset:em,selectionError:O,creatingPresetId:H}),[em,ed,ea,O,H]);return e(PresetSelectionContext.Provider,{value:ep,children:a})};
1
+ import{jsx as e}from"react/jsx-runtime";import{Button as t}from"@mui/material";import{useMutation as r}from"@tanstack/react-query";import{useSnackbar as i}from"notistack";import{useSubscription as o}from"observable-hooks";import{createContext as s,useCallback as n,useContext as a,useEffect as l,useMemo as m,useState as d}from"react";import{skip as p}from"rxjs";import{match as c}from"ts-pattern";import{AuthorizedClient as g,LocalStorageAuthorizedPhoenixApiClient as u,MemoryAuthorizedPhoenixApiClient as f}from"#package/client";import{SYSTEM_CHUNK_KEY as h,standardWebComponentProperties as y}from"#package/domain";import{ApplicationRoutes as P,FrontendAnalyticsFactory as v,useAnalyticsService as w,useAuthenticatedClient as x,useConfiguratorDomainFactory as C,useEagerObservableValue as T,useIsDev as k,useLogger as D,usePersistenceConfig as S,usePublishedData as E,useResolveLocalizable as b,useRoutingSelectors as A,useSessionService as I,useSpecPresetSeed as V,useWebComponentProperty$ as j}from"#package/react-sdk";import{useOnPresetLoadedHandler as $}from"./OnPresetLoadedHandler.js";import{useConfiguratorRouting as F}from"./configurator-routing/index.js";let M={id:"sdk.presets.create.error.message",message:"Could not start configuring from this preset. Please try again."},R={id:"sdk.presets.create.error.dismiss.label",message:"Dismiss"},q="phx-preset-creation-error";export const PresetSelectionContext=s(null);export const usePresetSelection=()=>{let e=a(PresetSelectionContext);if(null===e)throw Error("usePresetSelection must be used within a PresetSelectionProvider!");return e};let z=e=>t=>null===e||void 0!==t.tags&&t.tags.some(t=>e.includes(t));export const PresetSelectionProvider=s=>{let{children:a}=s,[H,L]=d(null),[O,U]=d(null),B=V(),G=x(),J=w(),K=S(),N=C(),Q=k(),W=b(),{requestSessionToken:X}=I(),Y=D(),Z=F(),_=A(),ee=E(),{enqueueSnackbar:et,closeSnackbar:er}=i(),ei=j(y.presetTags),eo=T(ei),es=$();o(m(()=>ei.pipe(p(1)),[ei]),()=>{_.getRoutingState().route!==P.Index&&Z.goToIndex()}),l(()=>{U(null),er(q)},[Q,er]);let{mutate:en}=r({mutationFn:n(async e=>{let{getData:t,name:r}=e,{rootEntityType:i,entities:o,modelVersion:s}=await t(),n=N.validateAndMigrateState(o,s);J.push(v.ProductSelected(i,W(r)));let a=es?await es(n):n;return G.createConfiguration({rootEntityType:i,data:a})},[N,J,W,G,es]),onSuccess:e=>{Z.goToConfigurationDetail(e.configurationId,e.accessToken)},onError:(e,t)=>{Y.error("Failed to create a new configuration from a preset!",{name:t.name},e),U(e)},onSettled:()=>{L(null)}}),ea=m(()=>{let e,t=(e=h in ee?ee[h].presetCategories:ee.presetCategories,{publishedPresetCategories:(e??[]).map(e=>({...e,presets:e.presets.filter(z(eo))})).filter(e=>e.presets.length>0),seedPresets:B.filter(z(eo))});return t.publishedPresetCategories.length>0?t.publishedPresetCategories.map(e=>({id:e.id,name:e.name,description:e.description,img:e.img,imgAlt:e.imgAlt,presets:e.presets.map(e=>({id:e.configurationId,name:e.name,description:e.description,img:e?.img,imgAlt:e?.imgAlt,detailTitle:e?.detailTitle,detailDescription:e?.detailDescription,getData:async()=>{let t=c(K).with({type:"server"},t=>new g(t.serverUrl,()=>e.readToken,X)).with({type:"local-storage"},()=>new u(N.modelVersion)).with({type:"memory"},()=>new f(N.modelVersion)).exhaustive(),r=await t.getConfigurationRevision(e.configurationId,e.revisionId);return{entities:r.data,rootEntityType:r.rootEntityType,modelVersion:r.modelVersion}}}))})):t.seedPresets.length>0?[{id:"Default",name:"Default Category",presets:t.seedPresets.map((e,t)=>({id:`${t}`,name:e.name??`${e.rootEntityType} preset - ${t}`,description:e.description??"",img:e.img,imgAlt:e.imgAlt,detailTitle:e.detailTitle,detailDescription:e.detailDescription,getData:async()=>({entities:e.initialDomainEntities,rootEntityType:e.rootEntityType,modelVersion:N.modelVersion})}))}]:[]},[ee,X,K,N,eo,B]),el=m(()=>ea.flatMap(e=>e.presets),[ea]),em=n(r=>{let i=el.find(e=>e.id===r);if(void 0===i)throw Error(`Preset with id ${r} not found!`);let{getData:o,name:s}=i,n=!Q&&el.length>1;U(null),L(r),en({getData:o,name:s},{onError:()=>{n&&(er(q),et(W(M),{variant:"error",key:q,persist:!0,preventDuplicate:!0,action:r=>e(t,{color:"inherit",size:"small",onClick:()=>{U(null),er(r)},children:W(R)})}))}})},[el,Q,en,et,er,W]),ed=el.length>1,ep=m(()=>({hasMultiplePresets:ed,presetCategories:ea,selectPreset:em,selectionError:O,creatingPresetId:H}),[em,ed,ea,O,H]);return e(PresetSelectionContext.Provider,{value:ep,children:a})};
@@ -1 +1 @@
1
- import{jsx as o}from"react/jsx-runtime";import{ConfigurationNotFoundPage as r}from"#package/react-sdk";import{useConfiguratorRouting as t}from"../configurator-context/index.js";export const ConfiguratorNotFoundPage=()=>o(r,{onBack:t().goToIndex});
1
+ import{jsx as o}from"react/jsx-runtime";import{ConfigurationNotFoundPageElement as n}from"../configuration-not-found-page/index.js";import{useConfiguratorRouting as r}from"../configurator-context/index.js";export const ConfiguratorNotFoundPage=()=>o(n,{onBack:r().goToIndex});
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * The built-in UI of a loaded configuration: the layout the spec's `layout` selects, in owner or
3
- * read mode. `defaultConfiguratorElements` registers it as `ConfiguratorLayout`, and
4
- * `LoadedConfiguratorDetailPage` renders it when no layout element has that name.
3
+ * read mode. It is registered as the default `ConfiguratorLayout` in `defaultConfiguratorElements`,
4
+ * so `LoadedConfiguratorDetailPage` renders it unless the project registers a layout element of that
5
+ * name.
5
6
  */
6
7
  export declare const DefaultConfiguratorLayout: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * The built-in page shown when session authentication fails, or when an anonymous visitor who may not
3
+ * create a configuration opens the start page: the `ConfigurationNotFoundPage` element, so a project's
4
+ * not-found page shows here too. It is registered as the default `NotAuthenticatedPage`
5
+ * in `defaultConfiguratorElements`, so `NotAuthenticatedPage` renders it unless the project registers a
6
+ * layout element of that name.
7
+ */
8
+ export declare const DefaultNotAuthenticatedPage: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ import{jsx as t}from"react/jsx-runtime";import{ConfigurationNotFoundPageElement as o}from"../configuration-not-found-page/index.js";export const DefaultNotAuthenticatedPage=()=>t(o,{});
@@ -0,0 +1,7 @@
1
+ /**
2
+ * The built-in preset screen: `CategoryPresetUi` with the `PresetPageAction` element as its action and
3
+ * the `PresetDeviceNotSupported` element as its overlay. It is registered as the default `PresetUi` in
4
+ * `defaultConfiguratorElements`, so `PresetUi` renders it unless the project registers a layout element
5
+ * of that name.
6
+ */
7
+ export declare const DefaultPresetUi: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ import{jsx as e}from"react/jsx-runtime";import{PresetDeviceNotSupportedElement as r,PresetPageActionElement as t}from"../preset-screen-elements/index.js";import{CategoryPresetUi as o}from"../ui/index.js";export const DefaultPresetUi=()=>e(o,{action:e(t,{}),overlay:e(r,{})});
@@ -1 +1 @@
1
- import{jsx as o,jsxs as r}from"react/jsx-runtime";import e from"mui-modal-provider";import{memo as i,useCallback as n,useEffect as t}from"react";import{InvalidAccessKeyError as a}from"#package/client";import{BuiltInLoadingPhase as d,CommonAnalyticsFactory as s,DomainLifecycleBoundary as l,LoadedDataProvider as c,PhoenixLayoutElement as u,useAccessService as f,useAnalyticsService as m,useAuthorizedClient as g,useConfiguratorDomainFactory as p,useConfiguratorLoadStatus as v,useConfiguratorRawLoadedData as I,useExpectPhase as h,useLoadedDataActions as j,useLoadingError as C,useLoadingPhase as k,useLogger as w,useRoutingService as y,useSpecAssistant as b}from"#package/react-sdk";import{useConfigurator as x}from"../application-runtime/index.js";import{IntegrationSubscription as E,OnConfiguratorReadyProvider as D,ViewportStateSync as L}from"../configurator-context/index.js";import{ConfiguratorNotFoundPage as M}from"./ConfiguratorNotFoundPage.js";import{DefaultConfiguratorLayout as F}from"./DefaultConfiguratorLayout.js";import{ConfiguratorLayoutName as S}from"./configurator-layout-name.js";import{DevContextFallback as T}from"./error-boundaries/DevContextFallback.js";import{DevLoadingFallback as A}from"./error-boundaries/DevLoadingFallback.js";import{LoadingErrorBoundary as P}from"./error-boundaries/LoadingErrorBoundary.js";import{useLoad as R}from"./use-load.js";let V=i(()=>((()=>{let{assistantSystem:o}=x(),r=null!=b();t(()=>{if(r)return o.activate()},[o,r])})(),o(e,{children:o(D,{children:o(u,{name:S,defaultSlot:F})})})));export const LoadedConfiguratorDetailPage=()=>{h(d.SceneAssets);let{configurationId:e,accessInfo:i}=f(),t=g(),u=y(),b=w(),x=m(),{startConfiguratorLoad:D,completeConfiguratorLoad:F,failConfiguratorLoad:S,resetConfiguratorLoad:q}=j(),{isLoading:B,isError:G}=v(),N=I(),z=p(),H=n(()=>i.viewMode&&void 0!==i.revisionId?t.getConfigurationRevision(e,i.revisionId):t.getConfiguration(e),[i.revisionId,i.viewMode,t,e]),J=n(()=>{D()},[D]),K=n(o=>{F({initialRevisionId:o.revisionId,initialEntities:o.data,modelVersion:o.modelVersion,rootEntityType:o.rootEntityType,schemaIdentity:z}),x.push(s.ConfigurationLoaded(o.configurationId,o.revisionId,i.viewMode?"read":"owner")),b.appendToGlobalContext({configurationId:o.configurationId,revisionId:o.revisionId,mode:i.viewMode}),b.info("Configuration loaded.")},[i.viewMode,x,F,z,b]),O=n(o=>{if(S(o),o instanceof a)return void u.rejectAccessToken(e,i.raw);let r=o instanceof Error?o:Error("Configuration loading failed with an unknown error.",{cause:o});b.error("Configuration loading failed because the API request did not succeed. Verify the configuration ID and access token.",{configurationId:e},r)},[i.raw,e,S,b,u]),Q=n(()=>{q()},[q]);return(R({key:[t,e,i.revisionId,i.viewMode],load:H,onStart:J,onSuccess:K,onError:O,onCleanup:Q}),k({id:d.DataFetch,label:"Loading configuration…"},B),C(G),G)?o(M,{}):null===N?null:o(c,{value:N,children:o(P,{fallbackRender:r=>o(A,{...r}),children:o(l,{type:"configurator",children:o(P,{FallbackComponent:T,children:r(E,{children:[o(L,{}),o(V,{})]})})})})})};
1
+ import{jsx as o,jsxs as r}from"react/jsx-runtime";import e from"mui-modal-provider";import{memo as i,useCallback as n,useEffect as t}from"react";import{InvalidAccessKeyError as a}from"#package/client";import{BuiltInLoadingPhase as d,CommonAnalyticsFactory as s,DomainLifecycleBoundary as l,LoadedDataProvider as c,PhoenixLayoutElement as u,useAccessService as f,useAnalyticsService as m,useAuthorizedClient as g,useConfiguratorDomainFactory as p,useConfiguratorLoadStatus as v,useConfiguratorRawLoadedData as I,useExpectPhase as h,useLoadedDataActions as j,useLoadingError as C,useLoadingPhase as k,useLogger as w,useRoutingService as b,useSpecAssistant as y}from"#package/react-sdk";import{useConfigurator as x}from"../application-runtime/index.js";import{IntegrationSubscription as E,OnConfiguratorReadyProvider as M,ViewportStateSync as D}from"../configurator-context/index.js";import{ConfiguratorNotFoundPage as F}from"./ConfiguratorNotFoundPage.js";import{ConfiguratorLayoutName as L}from"./configurator-layout-name.js";import{DevContextFallback as T}from"./error-boundaries/DevContextFallback.js";import{DevLoadingFallback as A}from"./error-boundaries/DevLoadingFallback.js";import{LoadingErrorBoundary as P}from"./error-boundaries/LoadingErrorBoundary.js";import{useLoad as R}from"./use-load.js";let S=i(()=>((()=>{let{assistantSystem:o}=x(),r=null!=y();t(()=>{if(r)return o.activate()},[o,r])})(),o(e,{children:o(M,{children:o(u,{name:L})})})));export const LoadedConfiguratorDetailPage=()=>{h(d.SceneAssets);let{configurationId:e,accessInfo:i}=f(),t=g(),u=b(),y=w(),x=m(),{startConfiguratorLoad:M,completeConfiguratorLoad:L,failConfiguratorLoad:V,resetConfiguratorLoad:q}=j(),{isLoading:B,isError:G}=v(),N=I(),z=p(),H=n(()=>i.viewMode&&void 0!==i.revisionId?t.getConfigurationRevision(e,i.revisionId):t.getConfiguration(e),[i.revisionId,i.viewMode,t,e]),J=n(()=>{M()},[M]),K=n(o=>{L({initialRevisionId:o.revisionId,initialEntities:o.data,modelVersion:o.modelVersion,rootEntityType:o.rootEntityType,schemaIdentity:z}),x.push(s.ConfigurationLoaded(o.configurationId,o.revisionId,i.viewMode?"read":"owner")),y.appendToGlobalContext({configurationId:o.configurationId,revisionId:o.revisionId,mode:i.viewMode}),y.info("Configuration loaded.")},[i.viewMode,x,L,z,y]),O=n(o=>{if(V(o),o instanceof a)return void u.rejectAccessToken(e,i.raw);let r=o instanceof Error?o:Error("Configuration loading failed with an unknown error.",{cause:o});y.error("Configuration loading failed because the API request did not succeed. Verify the configuration ID and access token.",{configurationId:e},r)},[i.raw,e,V,y,u]),Q=n(()=>{q()},[q]);return(R({key:[t,e,i.revisionId,i.viewMode],load:H,onStart:J,onSuccess:K,onError:O,onCleanup:Q}),k({id:d.DataFetch,label:"Loading configuration…"},B),C(G),G)?o(F,{}):null===N?null:o(c,{value:N,children:o(P,{fallbackRender:r=>o(A,{...r}),children:o(l,{type:"configurator",children:o(P,{FallbackComponent:T,children:r(E,{children:[o(D,{}),o(S,{})]})})})})})};
@@ -1 +1 @@
1
- import{jsx as t}from"react/jsx-runtime";import{useEffect as e}from"react";import{assertExistence as o}from"@salsita-ai/common/utils";import{AnalyticsEventFactory as r}from"#package/domain";import{useAnalyticsService as a,useIsDev as i,useLogger as n,useOnMount as d}from"#package/react-sdk";import{usePresetSelection as m}from"../configurator-context/index.js";import{PresetUi as s}from"../ui/preset-layout/PresetUi.js";import{PresetCreationErrorPage as l}from"./PresetCreationErrorPage.js";let p=t=>{let{id:e}=t,o=n(),{selectPreset:r}=m();return d(()=>{o.debug("Only single preset available, creating configuration automatically."),r(e)}),null};export const NewConfiguratorPage=()=>{let d=n(),g=a(),u=i(),{presetCategories:f,selectionError:c}=m();e(()=>{g.push(r.DataLoadedEvent({configurationId:"notYetLoaded",revisionId:"notYetLoaded",mode:"notYetLoaded"})),d.appendToGlobalContext({navigationState:"NewConfiguratorPage",revisionId:"notYetLoaded",mode:"notYetLoaded"})},[g,d]);let x=f.flatMap(t=>t.presets),L=1===x.length;return c&&(u||L)?t(l,{error:c}):L?t(p,{id:o(x[0]).id}):t(s,{})};
1
+ import{jsx as o}from"react/jsx-runtime";import{useEffect as t}from"react";import{assertExistence as e}from"@salsita-ai/common/utils";import{AnalyticsEventFactory as r}from"#package/domain";import{useAnalyticsService as a,useIsDev as i,useLogger as n,useOnMount as d}from"#package/react-sdk";import{usePresetSelection as m}from"../configurator-context/index.js";import{PresetUi as s}from"../ui/index.js";import{PresetCreationErrorPage as l}from"./PresetCreationErrorPage.js";let p=o=>{let{id:t}=o,e=n(),{selectPreset:r}=m();return d(()=>{e.debug("Only single preset available, creating configuration automatically."),r(t)}),null};export const NewConfiguratorPage=()=>{let d=n(),g=a(),f=i(),{presetCategories:u,selectionError:c}=m();t(()=>{g.push(r.DataLoadedEvent({configurationId:"notYetLoaded",revisionId:"notYetLoaded",mode:"notYetLoaded"})),d.appendToGlobalContext({navigationState:"NewConfiguratorPage",revisionId:"notYetLoaded",mode:"notYetLoaded"})},[g,d]);let x=u.flatMap(o=>o.presets),L=1===x.length;return c&&(f||L)?o(l,{error:c}):L?o(p,{id:e(x[0]).id}):o(s,{})};
@@ -1 +1 @@
1
- import{jsx as o}from"react/jsx-runtime";import{match as t}from"ts-pattern";import{SessionRole as r}from"@salsita-ai/contracts/api";import{ApplicationRoutes as e,ConfigurationNotFoundPage as i,NotAuthenticatedPage as a,useRoutingState as n,useSession as s,useSpecCanCreate as m}from"#package/react-sdk";import{ConfiguratorRoot as c}from"./ConfiguratorRoot.js";import{NewConfiguratorPage as u}from"./NewConfiguratorPage.js";export const RootPage=()=>{let f=m(),p=n(),{sessionPayload:g}=s(),d=g?.role??r.Anonymous,x=f.includes(d);return t(p).with({route:e.Index},()=>x?o(u,{}):d===r.Anonymous?o(a,{}):o(i,{})).with({route:e.Configuration},t=>o(c,{configurationId:t.configurationId,accessToken:t.accessToken})).exhaustive()};
1
+ import{jsx as o}from"react/jsx-runtime";import{match as t}from"ts-pattern";import{SessionRole as r}from"@salsita-ai/contracts/api";import{ApplicationRoutes as i,NotAuthenticatedPage as n,useRoutingState as e,useSession as a,useSpecCanCreate as s}from"#package/react-sdk";import{ConfigurationNotFoundPageElement as m}from"../configuration-not-found-page/index.js";import{ConfiguratorRoot as u}from"./ConfiguratorRoot.js";import{NewConfiguratorPage as c}from"./NewConfiguratorPage.js";export const RootPage=()=>{let f=s(),p=e(),{sessionPayload:g}=a(),d=g?.role??r.Anonymous,x=f.includes(d);return t(p).with({route:i.Index},()=>x?o(c,{}):d===r.Anonymous?o(n,{}):o(m,{})).with({route:i.Configuration},t=>o(u,{configurationId:t.configurationId,accessToken:t.accessToken})).exhaustive()};
@@ -2,6 +2,10 @@ import { type ElementRegistration } from '#package/domain';
2
2
  /**
3
3
  * The configurator's default element registrations, passed to `withDefaultElements`. A project
4
4
  * element registered under the same name replaces one: `ConfiguratorLayout` is the built-in UI of a
5
- * loaded configuration.
5
+ * loaded configuration, `ConfigurationNotFoundPage` the page shown when a configuration cannot be
6
+ * loaded or opened, `NotAuthenticatedPage` the page shown when session authentication fails or an
7
+ * anonymous visitor who may not create a configuration opens the start page, `PresetUi` the preset
8
+ * screen, and the others are the built-in controls, toolbar buttons, menu actions and
9
+ * sidebar-footer pieces under the spec kinds that YAML names.
6
10
  */
7
11
  export declare const defaultConfiguratorElements: readonly ElementRegistration[];
@@ -1 +1 @@
1
- import{createCustomPhoenixLayoutElement as o}from"#package/domain";import{DefaultConfiguratorLayout as r}from"./DefaultConfiguratorLayout.js";import{ConfiguratorLayoutName as t}from"./configurator-layout-name.js";export const defaultConfiguratorElements=[o(t,r)];
1
+ import{createCustomPhoenixLayoutElement as o}from"#package/domain";import{ConfigurationNotFoundPage as t,createNotAuthenticatedPage as r}from"#package/react-sdk";import{ConfigurationNotFoundPageName as e}from"../configuration-not-found-page/index.js";import{createPresetUi as m}from"../ui/index.js";import{DefaultConfiguratorLayout as a}from"./DefaultConfiguratorLayout.js";import{DefaultNotAuthenticatedPage as i}from"./DefaultNotAuthenticatedPage.js";import{DefaultPresetUi as f}from"./DefaultPresetUi.js";import{ConfiguratorLayoutName as n}from"./configurator-layout-name.js";import{domainControlElements as u,recipePanelElements as p,sidebarFooterElements as s,toolbarElements as d}from"./default-elements/index.js";export const defaultConfiguratorElements=[o(n,a),o(e,t),r(i),m(f),...u,...p,...d,...s];
@@ -0,0 +1,10 @@
1
+ import { type PhoenixEntityElementDefinition, type PhoenixEntityElementRegistration } from '#package/domain';
2
+ /**
3
+ * Registers a built-in entity element under the `kind` of its schema, with the component that the
4
+ * element's module exports. The schema type argument ties the schema and the
5
+ * component's props together, as in `createPhoenixEntityElement`.
6
+ */
7
+ export declare const builtInEntityElement: <SCHEMA extends {
8
+ kind: string;
9
+ props?: Record<string, unknown>;
10
+ } = never>(schema: PhoenixEntityElementDefinition<SCHEMA>['schema'], component: PhoenixEntityElementDefinition<SCHEMA>['component']) => PhoenixEntityElementRegistration;
@@ -0,0 +1 @@
1
+ import{createCustomPhoenixEntityElement as t}from"#package/domain";export const builtInEntityElement=(e,n)=>t(e.properties.kind.enum[0],n);
@@ -0,0 +1,10 @@
1
+ import { type PhoenixLayoutElementDefinition, type PhoenixLayoutElementRegistration } from '#package/domain';
2
+ /**
3
+ * Registers a built-in layout element under the `kind` of its schema, with the component that the
4
+ * element's module exports. The schema type argument ties the schema and the
5
+ * component's props together, as in `createPhoenixLayoutElement`.
6
+ */
7
+ export declare const builtInLayoutElement: <SCHEMA extends {
8
+ kind: string;
9
+ props?: Record<string, unknown>;
10
+ } = never>(schema: PhoenixLayoutElementDefinition<SCHEMA>['schema'], component: PhoenixLayoutElementDefinition<SCHEMA>['component']) => PhoenixLayoutElementRegistration;
@@ -0,0 +1 @@
1
+ import{createCustomPhoenixLayoutElement as e}from"#package/domain";export const builtInLayoutElement=(o,t)=>e(o.properties.kind.enum[0],t);
@@ -0,0 +1,6 @@
1
+ import { type ElementRegistration } from '#package/domain';
2
+ /**
3
+ * The property-page controls of `react-sdk` and the two adapters that forward to a project element,
4
+ * registered under their spec kinds.
5
+ */
6
+ export declare const domainControlElements: readonly ElementRegistration[];
@@ -0,0 +1 @@
1
+ import{attributeCardSelectorSchema as t,attributeListSelectorSchema as o,attributeSelectSchema as e,attributeSwitchSelectorSchema as m,attributeToggleSelectorSchema as i,childEntityCardSelectorSchema as r,childEntityListSelectorSchema as n,childEntityToggleSelectorSchema as a,colorPickerInputSchema as l,customElementSchema as p,customLayoutElementSchema as s,deleteEntityButtonSchema as c,dimensionListSelectorSchema as f,dimensionToggleSelectorSchema as d,distanceDimensionInputSchema as k,distanceDimensionSliderSchema as u,entityChildActionDeleteSchema as b,entityChildActionSelectSchema as g,entityChildrenListSchema as j,genericDimensionInputSchema as y,genericDimensionSliderSchema as x,horizontalGroupRecipePanelSchema as C,materialSwatchSelectorSchema as E,propertyContainerGroupSchema as h,propertyContainerItemSchema as q,replaceEntityDropdownSchema as v,simpleRecipePanelSchema as w,verticalGroupRecipePanelSchema as z}from"#package/domain";import{AttributeCardSelector as A,AttributeListSelector as B,AttributeSelect as D,AttributeSwitchSelector as F,AttributeToggleSelector as G,ChildEntityCardSelector as H,ChildEntityListSelector as I,ChildEntityToggleSelector as J,ColorPickerInput as K,CustomElement as L,CustomLayoutElement as M,DeleteEntityButton as N,DimensionListSelector as O,DimensionToggleSelector as P,DistanceDimensionInput as Q,DistanceDimensionSlider as R,EntityChildActionDelete as S,EntityChildActionSelect as T,GenericDimensionInput as U,GenericDimensionSlider as V,HorizontalGroupRecipePanel as W,MaterialSwatchSelector as X,PropertyContainerGroup as Y,PropertyContainerItem as Z,PropertyPageEntityChildrenList as $,ReplaceEntityDropdown as _,SimpleRecipePanel as tt,VerticalGroupRecipePanel as to}from"#package/react-sdk";import{builtInEntityElement as te}from"./built-in-entity-element.js";import{builtInLayoutElement as tm}from"./built-in-layout-element.js";export const domainControlElements=[te(t,A),te(o,B),te(e,D),te(m,F),te(i,G),te(r,H),te(n,I),te(a,J),te(l,K),te(p,L),tm(s,M),te(c,N),te(f,O),te(d,P),te(k,Q),te(u,R),te(b,S),te(g,T),te(j,$),te(y,U),te(x,V),te(C,W),te(E,X),te(h,Y),te(q,Z),te(v,_),te(w,tt),te(z,to)];
@@ -0,0 +1,4 @@
1
+ export { domainControlElements } from './domain-control-elements.js';
2
+ export { recipePanelElements } from './recipe-panel-elements.js';
3
+ export { sidebarFooterElements } from './sidebar-footer-elements.js';
4
+ export { toolbarElements } from './toolbar-elements.js';
@@ -0,0 +1 @@
1
+ export{domainControlElements}from"./domain-control-elements.js";export{recipePanelElements}from"./recipe-panel-elements.js";export{sidebarFooterElements}from"./sidebar-footer-elements.js";export{toolbarElements}from"./toolbar-elements.js";
@@ -0,0 +1,3 @@
1
+ import { type ElementRegistration } from '#package/domain';
2
+ /** The configurator's recipe panels and the buttons that open them, registered under their spec kinds. */
3
+ export declare const recipePanelElements: readonly ElementRegistration[];
@@ -0,0 +1 @@
1
+ import{groupedRecipeButtonSchema as e,groupedRecipePanelSchema as i,replaceEntityPanelButtonSchema as t,replaceEntityPanelSchema as m}from"#package/domain";import{GroupedRecipeButton as o,GroupedRecipePanel as n,ReplaceEntityPanel as r,ReplaceEntityPanelButton as p}from"../../ui/index.js";import{builtInEntityElement as a}from"./built-in-entity-element.js";export const recipePanelElements=[a(e,o),a(i,n),a(m,r),a(t,p)];
@@ -0,0 +1,7 @@
1
+ import { type ElementRegistration } from '#package/domain';
2
+ /**
3
+ * The pieces of the configurator's sidebar footer, registered under their spec kinds. The built-in
4
+ * footers render these components directly, so a project element of the same name reaches only a
5
+ * `customSidebarFooter`.
6
+ */
7
+ export declare const sidebarFooterElements: readonly ElementRegistration[];
@@ -0,0 +1 @@
1
+ import{enterSummaryButtonSchema as o,footerPriceSchema as e,mainFooterActionsSchema as t,nextStepButtonSchema as i,otherActionsSchema as m,previousStepButtonSchema as r,saveTemplateButtonSchema as n,stepLabelSchema as a,stepProgressSchema as p}from"#package/domain";import{EnterSummaryButton as s,FooterPrice as l,MainFooterActions as d,NextStepButton as f,OtherActions as u,PreviousStepButton as b,SaveTemplateButton as c,StepLabel as j,StepProgress as x}from"../../ui/index.js";import{builtInLayoutElement as g}from"./built-in-layout-element.js";export const sidebarFooterElements=[g(o,s),g(e,l),g(t,d),g(i,f),g(m,u),g(r,b),g(n,c),g(a,j),g(p,x)];
@@ -0,0 +1,7 @@
1
+ import { type ElementRegistration } from '#package/domain';
2
+ /**
3
+ * The configurator's toolbar buttons and mobile menu actions, registered under their spec kinds.
4
+ * `ToolbarHelp` is not among them: the toolbar shows its help button only when a project registers
5
+ * that name.
6
+ */
7
+ export declare const toolbarElements: readonly ElementRegistration[];
@@ -0,0 +1 @@
1
+ import{assistantToolbarButtonSchema as o,enterFullscreenToolbarButtonSchema as t,exitFullscreenToolbarButtonSchema as m,helpMenuActionSchema as e,helpToolbarButtonSchema as i,languageMenuActionSchema as r,languageToolbarButtonSchema as n,measurementsMenuActionSchema as a,measurementsToolbarButtonSchema as l,redoToolbarButtonSchema as p,resetCameraToolbarButtonSchema as s,shareMenuActionSchema as f,shareToolbarButtonSchema as u,toolbarButtonGroupSchema as b,undoToolbarButtonSchema as c}from"#package/domain";import{AssistantToolbarButton as d,EnterFullscreenToolbarButton as j,ExitFullscreenToolbarButton as x,HelpMenuAction as g,HelpToolbarButton as k,LanguageMenuAction as y,LanguageToolbarButton as E,MeasurementsMenuAction as h,MeasurementsToolbarButton as q,RedoToolbarButton as v,ResetCameraToolbarButton as w,ShareMenuAction as z,ShareToolbarButton as A,ToolbarButtonGroup as B,UndoToolbarButton as C}from"../../ui/index.js";import{builtInLayoutElement as D}from"./built-in-layout-element.js";export const toolbarElements=[D(o,d),D(t,j),D(m,x),D(e,g),D(i,k),D(r,y),D(n,E),D(a,h),D(l,q),D(p,v),D(s,w),D(f,z),D(u,A),D(b,B),D(c,C)];
@@ -0,0 +1,4 @@
1
+ /** The name a project registers a layout element under to add an overlay to the preset screen. */
2
+ export declare const PresetDeviceNotSupportedName = "PresetDeviceNotSupported";
3
+ /** Renders the `PresetDeviceNotSupported` element, which the built-in preset screen shows as its overlay. */
4
+ export declare const PresetDeviceNotSupportedElement: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ import{jsx as e}from"react/jsx-runtime";import{PhoenixLayoutElement as t}from"#package/react-sdk";export const PresetDeviceNotSupportedName="PresetDeviceNotSupported";let o=()=>null;export const PresetDeviceNotSupportedElement=()=>e(t,{name:"PresetDeviceNotSupported",elementProps:{},defaultSlot:o});
@@ -0,0 +1,4 @@
1
+ /** The name a project registers a layout element under to add an action below the preset cards. */
2
+ export declare const PresetPageActionName = "PresetPageAction";
3
+ /** Renders the `PresetPageAction` element, which the built-in preset screen shows below its cards. */
4
+ export declare const PresetPageActionElement: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ import{jsx as e}from"react/jsx-runtime";import{PhoenixLayoutElement as t}from"#package/react-sdk";export const PresetPageActionName="PresetPageAction";let o=()=>null;export const PresetPageActionElement=()=>e(t,{name:"PresetPageAction",elementProps:{},defaultSlot:o});
@@ -0,0 +1,2 @@
1
+ export { PresetDeviceNotSupportedElement, PresetDeviceNotSupportedName } from './PresetDeviceNotSupportedElement.js';
2
+ export { PresetPageActionElement, PresetPageActionName } from './PresetPageActionElement.js';
@@ -0,0 +1 @@
1
+ export{PresetDeviceNotSupportedElement,PresetDeviceNotSupportedName}from"./PresetDeviceNotSupportedElement.js";export{PresetPageActionElement,PresetPageActionName}from"./PresetPageActionElement.js";
@@ -1 +1 @@
1
- import{jsx as e}from"react/jsx-runtime";import{memo as t,useCallback as o}from"react";import{LocalizableMessage as i,useDeletedEntity as r}from"#package/react-sdk";import{DeleteEntityFab as l}from"#package/ui-sdk";import{FrontendAnalyticsFactory as n}from"../../common/frontend-analytics.js";import{useSceneControlTooltip as a}from"./use-scene-control-tooltip.js";export const DeleteEntityFab=t(t=>{let{entityId:s,fixableViolations:c,label:m,title:p,tooltipVisibility:d="on-hover",...f}=t,{tooltipOpen:k}=a(d),b=o(()=>n.EntityDeleteHotspotClicked(s),[s]),{disabled:u,hints:g,remove:j,trace:y}=r(s,c,b);return e(l,{label:m?e(i,{children:m}):void 0,title:p?e(i,{children:p}):void 0,...f,disabled:u,disabledMessage:g,tooltipOpen:k,onClick:j,onDebugClick:y})});
1
+ import{jsx as e}from"react/jsx-runtime";import{memo as t,useCallback as o}from"react";import{FrontendAnalyticsFactory as i,LocalizableMessage as r,useDeletedEntity as l}from"#package/react-sdk";import{DeleteEntityFab as a}from"#package/ui-sdk";import{useSceneControlTooltip as s}from"./use-scene-control-tooltip.js";export const DeleteEntityFab=t(t=>{let{entityId:n,fixableViolations:c,label:p,title:d,tooltipVisibility:m="on-hover",...k}=t,{tooltipOpen:b}=s(m),f=o(()=>i.EntityDeleteHotspotClicked(n),[n]),{disabled:u,hints:g,remove:D,trace:h}=l(n,c,f);return e(a,{label:p?e(r,{children:p}):void 0,title:d?e(r,{children:d}):void 0,...k,disabled:u,disabledMessage:g,tooltipOpen:b,onClick:D,onDebugClick:h})});
@@ -1 +1 @@
1
- import{jsx as o}from"react/jsx-runtime";import{useCallback as t}from"react";import{useSelectEntity as r}from"#package/react-sdk";import{FrontendAnalyticsFactory as e}from"../../common/frontend-analytics.js";import{SceneHotspot as i}from"./SceneHotspot.js";export const SelectionHotspot=m=>{let{id:n,title:p,tooltipVisibility:s="on-hover"}=m,c=r(e.SelectionHotspotClicked);return o(i,{onClick:t(o=>{o.stopPropagation(),c(n)},[n,c]),title:p,tooltipVisibility:s})};
1
+ import{jsx as t}from"react/jsx-runtime";import{useCallback as o}from"react";import{FrontendAnalyticsFactory as e,useSelectEntity as r}from"#package/react-sdk";import{SceneHotspot as i}from"./SceneHotspot.js";export const SelectionHotspot=p=>{let{id:s,title:c,tooltipVisibility:m="on-hover"}=p,n=r(e.SelectionHotspotClicked);return t(i,{onClick:o(t=>{t.stopPropagation(),n(s)},[s,n]),title:c,tooltipVisibility:m})};
@@ -1,7 +1,12 @@
1
+ import type { AssistantFormsVisibility } from './thread-items.js';
1
2
  export interface AssistantMarkdownProps {
2
3
  readonly markdown: string;
3
4
  /** True while the text is still arriving, so markup the model has not finished is completed. */
4
5
  readonly isStreaming: boolean;
6
+ readonly forms: AssistantFormsVisibility;
5
7
  }
6
- /** Assistant text of the thread: Markdown with lists, tables, links, entity links and code, without a bubble. */
7
- export declare const AssistantMarkdown: import("react").MemoExoticComponent<({ markdown, isStreaming }: AssistantMarkdownProps) => import("react/jsx-runtime").JSX.Element>;
8
+ /**
9
+ * Assistant text of the thread: Markdown with lists, tables, links, entity links, references, images, code and forms,
10
+ * without a bubble. A form fence the model is still writing shows a placeholder.
11
+ */
12
+ export declare const AssistantMarkdown: import("react").MemoExoticComponent<({ markdown, isStreaming, forms }: AssistantMarkdownProps) => import("react/jsx-runtime").JSX.Element>;
@@ -1 +1 @@
1
- import{jsx as r,Fragment as e}from"react/jsx-runtime";import{styled as o}from"@mui/material";import{memo as n}from"react";import i,{defaultUrlTransform as a}from"react-markdown";import t from"remark-gfm";import{AssistantEntityLink as l,isEntityLinkHref as d,parseEntityLinkTarget as m}from"./entity-link/index.js";import{completeStreamedMarkdown as s}from"./streamed-markdown.js";import{AssistantPanelName as c}from"./theme.js";let p=o("div",{name:c,slot:"assistantMessage"})(({theme:{palette:r,shape:e,spacing:o,typography:n}})=>({overflowWrap:"anywhere","& > :first-child":{marginBlockStart:0},"& > :last-child":{marginBlockEnd:0},"p, ul, ol, pre, blockquote":{marginBlock:o(1)},"h1, h2, h3, h4, h5, h6":{...n.subtitle2,marginBlock:o(1.5,.5)},"ul, ol":{paddingInlineStart:o(2.5)},a:{color:r.primary.main},code:{background:r.action.hover,borderRadius:e.borderRadius/2,fontFamily:"ui-monospace, Menlo, monospace",fontSize:"0.9em",paddingInline:o(.5)},pre:{background:r.action.hover,borderRadius:e.borderRadius,overflowX:"auto",padding:o(1),code:{background:"none",padding:0}},blockquote:{borderInlineStart:`2px solid ${r.divider}`,color:r.text.secondary,marginInline:0,paddingInlineStart:o(1.5)},"th, td":{borderBlockEnd:`1px solid ${r.divider}`,padding:o(.5,1),textAlign:"start",verticalAlign:"top"}})),u=o("div")({overflowX:"auto",table:{borderCollapse:"collapse",inlineSize:"100%"}}),g={a:({node:o,children:n,href:i,...a})=>{if(null==i||!d(i))return r("a",{...a,href:i,target:"_blank",rel:"noopener noreferrer",children:n});let t=m(i);return null==t?r(e,{children:n}):r(l,{id:t,children:n})},table:({node:e,children:o,...n})=>r(u,{children:r("table",{...n,children:o})})},h=[t],f=r=>d(r)?r:a(r),b=["img"];export const AssistantMarkdown=n(({markdown:e,isStreaming:o})=>r(p,{children:r(i,{components:g,remarkPlugins:h,disallowedElements:b,urlTransform:f,children:o?s(e):e})}));
1
+ import{jsx as e,Fragment as r}from"react/jsx-runtime";import{styled as n}from"@mui/material";import{createContext as i,memo as o,useContext as t,useMemo as l}from"react";import a,{defaultUrlTransform as d}from"react-markdown";import m from"remark-gfm";import{AssistantEntityLink as s}from"./entity-link/index.js";import{AssistantForm as c}from"./form/index.js";import{AssistantReferenceLink as u,isAssistantLinkHref as p,parseAssistantLinkTarget as g}from"./reference-link/index.js";import{AssistantImage as f}from"./resource-image/index.js";import{completeStreamedMarkdown as h,hasOpenFence as k}from"./streamed-markdown.js";import{AssistantPanelName as b}from"./theme.js";let v=n("div",{name:b,slot:"assistantMessage"})(({theme:{palette:e,shape:r,spacing:n,typography:i}})=>({overflowWrap:"anywhere","& > :first-child":{marginBlockStart:0},"& > :last-child":{marginBlockEnd:0},"p, ul, ol, pre, blockquote":{marginBlock:n(1)},"h1, h2, h3, h4, h5, h6":{...i.subtitle2,marginBlock:n(1.5,.5)},"ul, ol":{paddingInlineStart:n(2.5)},a:{color:e.primary.main},code:{background:e.action.hover,borderRadius:r.borderRadius/2,fontFamily:"ui-monospace, Menlo, monospace",fontSize:"0.9em",paddingInline:n(.5)},pre:{background:e.action.hover,borderRadius:r.borderRadius,overflowX:"auto",padding:n(1),code:{background:"none",padding:0}},blockquote:{borderInlineStart:`2px solid ${e.divider}`,color:e.text.secondary,marginInline:0,paddingInlineStart:n(1.5)},"th, td":{borderBlockEnd:`1px solid ${e.divider}`,padding:n(.5,1),textAlign:"start",verticalAlign:"top"}})),x=n("div")({overflowX:"auto",table:{borderCollapse:"collapse",inlineSize:"100%"}}),y=i({forms:"hidden",openFenceEnd:void 0,isStreaming:!1}),j=({source:r,end:n})=>{let{forms:i,openFenceEnd:o,isStreaming:l}=t(y);return"hidden"===i?null:null!=n&&n===o?l?e(c,{source:r,status:"writing"}):null:e(c,{source:r,status:"disabled"===i?"waiting":"ready"})},w={a:({node:n,children:i,href:o,...t})=>{if(null==o||!p(o))return e("a",{...t,href:o,target:"_blank",rel:"noopener noreferrer",children:i});let l=g(o);return null==l?e(r,{children:i}):"entity"===l.kind?e(s,{id:l.id,children:i}):e(u,{target:l,children:i})},img:({src:r,alt:n})=>e(f,{src:r,alt:n}),pre:({node:r,children:n,...i})=>{let o=(e=>{let[r]=e?.children??[];if(r?.type!=="element"||"code"!==r.tagName)return;let{className:n}=r.properties;if(Array.isArray(n)&&n.includes("language-form"))return r.children.map(e=>"text"===e.type?e.value:"").join("")})(r);return null==o?e("pre",{...i,children:n}):e(j,{source:o,end:r?.position?.end.offset})},table:({node:r,children:n,...i})=>e(x,{children:e("table",{...i,children:n})})},S=[m],A=e=>p(e)?e:d(e);export const AssistantMarkdown=o(({markdown:r,isStreaming:n,forms:i})=>{let o=n?h(r):r,t=k(r)?o.length:void 0,d=l(()=>({forms:i,openFenceEnd:t,isStreaming:n}),[i,t,n]);return e(v,{children:e(y.Provider,{value:d,children:e(a,{components:w,remarkPlugins:S,urlTransform:A,children:o})})})});