@salsita-ai/sdk 0.50.0-develop.801a817d3f → 0.50.0-develop.9267bdc12e

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 (1049) hide show
  1. package/README.md +3 -3
  2. package/dist/admin/create-admin-pages-from-spec.d.ts +1 -1
  3. package/dist/application-spec/errors/diagnostic-codes.d.ts +5 -0
  4. package/dist/application-spec/errors/diagnostic-codes.js +1 -1
  5. package/dist/application-spec/errors/diagnostic-messages.d.ts +5 -0
  6. package/dist/application-spec/errors/diagnostic-messages.js +1 -1
  7. package/dist/application-spec/generate-application/code/common/index.d.ts +1 -0
  8. package/dist/application-spec/generate-application/code/common/index.js +1 -1
  9. package/dist/application-spec/generate-application/code/common/project-module-list.d.ts +8 -0
  10. package/dist/application-spec/generate-application/code/common/project-module-list.js +3 -0
  11. package/dist/application-spec/generate-application/code/domain-runtime-files.js +1 -1
  12. package/dist/application-spec/generate-application/code/project-scaffolding.d.ts +8 -1
  13. package/dist/application-spec/generate-application/code/project-scaffolding.js +2 -2
  14. package/dist/application-spec/generate-application/code/templates/admin-domain-code.d.ts +1 -2
  15. package/dist/application-spec/generate-application/code/templates/admin-domain-code.js +6 -14
  16. package/dist/application-spec/generate-application/code/templates/admin-frontend-code.d.ts +1 -2
  17. package/dist/application-spec/generate-application/code/templates/admin-frontend-code.js +4 -4
  18. package/dist/application-spec/generate-application/code/templates/configurator-domain-code.d.ts +1 -2
  19. package/dist/application-spec/generate-application/code/templates/configurator-domain-code.js +7 -16
  20. package/dist/application-spec/generate-application/code/templates/configurator-frontend-code.d.ts +1 -2
  21. package/dist/application-spec/generate-application/code/templates/configurator-frontend-code.js +7 -9
  22. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-assistant.d.ts +2 -2
  23. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-assistant.js +1 -1
  24. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-defaults.d.ts +4 -2
  25. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-domain-block.js +56 -56
  26. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-invariants.d.ts +1 -1
  27. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-invariants.js +1 -1
  28. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-phx-globals.js +3 -0
  29. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-relation-expressions.js +1 -1
  30. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-resources.d.ts +6 -8
  31. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-resources.js +11 -11
  32. package/dist/application-spec/generate-application/code/templates/domain-spec/index.d.ts +1 -1
  33. package/dist/application-spec/generate-application/code/templates/domain-spec/index.js +1 -1
  34. package/dist/application-spec/generate-application/code/templates/domain-spec.js +12 -12
  35. package/dist/application-spec/generate-application/code/templates/domain.js +5 -5
  36. package/dist/application-spec/generate-application/code/templates/globals.js +5 -4
  37. package/dist/application-spec/generate-application/code/templates/index.d.ts +1 -7
  38. package/dist/application-spec/generate-application/code/templates/index.js +1 -1
  39. package/dist/application-spec/generate-application/code/templates/package-json.js +1 -1
  40. package/dist/application-spec/generate-application/code/templates/skills/phoenix-cli-skill.js +1 -1
  41. package/dist/application-spec/generate-application/code/templates/skills/phoenix-create-configurator-skill.js +93 -41
  42. package/dist/application-spec/generate-application/code/templates/skills/phoenix-review-skill.js +10 -4
  43. package/dist/application-spec/generate-application/code/templates/skills/phoenix-skill.js +1 -1
  44. package/dist/application-spec/generate-application/code/templates/skills/phoenix-variants-skill.d.ts +1 -0
  45. package/dist/application-spec/generate-application/code/templates/skills/phoenix-variants-skill.js +6 -0
  46. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.d.ts +39 -13
  47. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.js +19 -7
  48. package/dist/application-spec/generate-application/code/templates/webhook-builders.js +9 -4
  49. package/dist/application-spec/generate-application/code/templates/webhooks-config.js +2 -2
  50. package/dist/application-spec/generate-application/runtime/application-runtime.d.ts +1 -3
  51. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-runtime.d.ts +1 -3
  52. package/dist/application-spec/generate-application/runtime/sections/assistant-runtime.d.ts +4 -3
  53. package/dist/application-spec/generate-application/runtime/sections/assistant-runtime.js +1 -1
  54. package/dist/application-spec/generate-application/runtime/sections/component-optic.d.ts +2 -1
  55. package/dist/application-spec/generate-application/runtime/sections/expression-runtime.js +1 -1
  56. package/dist/application-spec/generate-application/runtime/sections/transformers-runtime.d.ts +2 -4
  57. package/dist/application-spec/parse-application-files/categorize/module-analysis.d.ts +1 -1
  58. package/dist/application-spec/parse-application-files/categorize/module-analysis.js +1 -1
  59. package/dist/application-spec/parse-application-files/raw-spec/raw-assistant.d.ts +1 -1
  60. package/dist/application-spec/parse-application-files/raw-spec/raw-assistant.js +1 -1
  61. package/dist/application-spec/parse-application-files/spec/application/admin-spec/admin-spec.js +1 -1
  62. package/dist/application-spec/parse-application-files/spec/application/configurator-spec/configurator-spec.js +1 -1
  63. package/dist/application-spec/parse-application-files/spec/model/defaults.d.ts +7 -2
  64. package/dist/application-spec/parse-application-files/spec/model/defaults.js +1 -1
  65. package/dist/application-spec/parse-application-files/spec/relations/reference-field-type.d.ts +25 -0
  66. package/dist/application-spec/parse-application-files/spec/relations/reference-field-type.js +1 -0
  67. package/dist/application-spec/parse-application-files/spec/relations/relation-field-mismatch.d.ts +46 -0
  68. package/dist/application-spec/parse-application-files/spec/relations/relation-field-mismatch.js +1 -0
  69. package/dist/application-spec/parse-application-files/spec/relations/relations.d.ts +4 -3
  70. package/dist/application-spec/parse-application-files/spec/relations/relations.js +1 -1
  71. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-field-type.d.ts +3 -8
  72. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-field-type.js +1 -1
  73. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-schema.d.ts +9 -43
  74. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-schema.js +1 -1
  75. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-server-settings.d.ts +2 -2
  76. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant.d.ts +5 -21
  77. package/dist/application-spec/parse-application-files/spec/sections/infra.d.ts +2 -0
  78. package/dist/application-spec/parse-application-files/spec/sections/infra.js +1 -1
  79. package/dist/client/authorized-client.d.ts +3 -1
  80. package/dist/client/authorized-client.js +1 -1
  81. package/dist/client/contract.d.ts +34 -0
  82. package/dist/client/contract.js +1 -1
  83. package/dist/client/index.d.ts +2 -2
  84. package/dist/client/index.js +1 -1
  85. package/dist/client/local-authorized-client.d.ts +3 -1
  86. package/dist/client/local-authorized-client.js +1 -1
  87. package/dist/client/memory-authorized-client.d.ts +3 -1
  88. package/dist/client/memory-authorized-client.js +1 -1
  89. package/dist/client/phoenix-api.d.ts +271 -30
  90. package/dist/configurator/application-runtime/extensions/create-configurator-extensions.js +1 -1
  91. package/dist/configurator/application-runtime/extensions/selectors.d.ts +3 -1
  92. package/dist/configurator/application-runtime/extensions/selectors.js +1 -1
  93. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.d.ts +123 -8
  94. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.js +1 -1
  95. package/dist/configurator/application-runtime/extensions/systems/assistant-system/change-recorder.d.ts +85 -0
  96. package/dist/configurator/application-runtime/extensions/systems/assistant-system/change-recorder.js +1 -0
  97. package/dist/configurator/application-runtime/extensions/systems/assistant-system/graphql-tools.d.ts +5 -1
  98. package/dist/configurator/application-runtime/extensions/systems/assistant-system/graphql-tools.js +1 -1
  99. package/dist/configurator/application-runtime/extensions/systems/graphql-system/entity-meta.js +1 -1
  100. package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.d.ts +9 -1
  101. package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.js +1 -1
  102. package/dist/configurator/application-runtime/extensions/systems/index.d.ts +1 -1
  103. package/dist/configurator/application-runtime/extensions/systems/layout-system/layout-system.js +1 -1
  104. package/dist/configurator/common/configurator-interface.d.ts +5 -1
  105. package/dist/configurator/common/configurator-interface.js +1 -1
  106. package/dist/configurator/pages/DefaultConfiguratorLayout.d.ts +6 -0
  107. package/dist/configurator/pages/DefaultConfiguratorLayout.js +1 -0
  108. package/dist/configurator/pages/LoadedConfiguratorDetailPage.js +1 -1
  109. package/dist/configurator/ui/assistant/AssistantChips.js +1 -1
  110. package/dist/configurator/ui/assistant/AssistantComposer.d.ts +2 -1
  111. package/dist/configurator/ui/assistant/AssistantComposer.js +1 -1
  112. package/dist/configurator/ui/assistant/AssistantThread.d.ts +6 -2
  113. package/dist/configurator/ui/assistant/AssistantThread.js +1 -1
  114. package/dist/configurator/ui/assistant/thread-items.d.ts +13 -2
  115. package/dist/configurator/ui/assistant/thread-items.js +1 -1
  116. package/dist/configurator/ui/assistant/tool-chip.d.ts +8 -1
  117. package/dist/configurator/ui/assistant/tool-chip.js +1 -1
  118. package/dist/configurator/ui/configurator-layout/universal/DesktopLayout.d.ts +1 -75
  119. package/dist/configurator/ui/configurator-layout/universal/DesktopLayout.js +5 -20
  120. package/dist/configurator/ui/configurator-layout/universal/DesktopPreview.js +1 -1
  121. package/dist/configurator/ui/configurator-layout/universal/DesktopSidebar.d.ts +92 -0
  122. package/dist/configurator/ui/configurator-layout/universal/DesktopSidebar.js +16 -0
  123. package/dist/configurator/ui/configurator-layout/universal/MobileLayout.js +4 -4
  124. package/dist/configurator/ui/configurator-layout/universal/MobilePreview.js +1 -1
  125. package/dist/configurator/ui/configurator-layout/universal/use-layout-scene-safe-area.d.ts +47 -0
  126. package/dist/configurator/ui/configurator-layout/universal/use-layout-scene-safe-area.js +1 -0
  127. package/dist/configurator/ui/configurator-layout/universal/use-scene-safe-area.d.ts +11 -26
  128. package/dist/configurator/ui/configurator-layout/universal/use-scene-safe-area.js +1 -1
  129. package/dist/docs/complex-use-cases/filtered-controls-with-fix-dialog.mdx +100 -117
  130. package/dist/docs/complex-use-cases/navigation-reset-selection.mdx +18 -12
  131. package/dist/docs/complex-use-cases/sketching.mdx +0 -38
  132. package/dist/docs/controls/select-attribute/cardselect.mdx +9 -13
  133. package/dist/docs/index.json +11 -1
  134. package/dist/docs/integrations/woocommerce/local-development.mdx +1 -1
  135. package/dist/docs/layouts/custom-layout.mdx +981 -0
  136. package/dist/docs/layouts/custom-price.mdx +14 -16
  137. package/dist/docs/layouts/sidebar/tabs.mdx +24 -21
  138. package/dist/docs/other-features/domain-actions.mdx +1 -1
  139. package/dist/docs/other-features/side-effects.mdx +58 -48
  140. package/dist/docs/other-features/transformers.mdx +1 -1
  141. package/dist/docs/other-features/violation-messages.mdx +52 -56
  142. package/dist/docs/phoenix/admin.mdx +9 -24
  143. package/dist/docs/phoenix/configurator-interface.mdx +105 -65
  144. package/dist/docs/phoenix/deployments.mdx +1 -1
  145. package/dist/docs/phoenix/domain-model.mdx +4 -0
  146. package/dist/docs/phoenix/expression-context.mdx +11 -3
  147. package/dist/docs/phoenix/getting-started.mdx +1 -1
  148. package/dist/docs/phoenix/localization.mdx +3 -22
  149. package/dist/docs/phoenix/phoenix-cli.mdx +123 -48
  150. package/dist/docs/phoenix/project-structure.mdx +24 -11
  151. package/dist/docs/phoenix/quickstart.mdx +2 -2
  152. package/dist/docs/phoenix/sdk-builder-workflow.mdx +12 -11
  153. package/dist/docs/phoenix/webhook-membership.mdx +10 -9
  154. package/dist/docs/phoenix/webhooks.mdx +2 -2
  155. package/dist/docs/recipes-and-delete/recipe-hierarchy-selection.mdx +15 -13
  156. package/dist/docs/relations/hierarchy.mdx +13 -2
  157. package/dist/docs/ux-guidelines/choosing-a-control.mdx +11 -0
  158. package/dist/domain/admin-domain/__generated/enhanced-model.d.ts +1 -2
  159. package/dist/domain/admin-domain/__generated/model/versions/v1.d.ts +1 -1
  160. package/dist/domain/admin-domain/__generated/model/versions/v2.d.ts +1 -1
  161. package/dist/domain/admin-domain/__generated/model/versions/v3.d.ts +1 -1
  162. package/dist/domain/admin-domain/__generated/model/versions/v4.d.ts +1 -1
  163. package/dist/domain/admin-domain/__generated/model/versions/v5.d.ts +1 -1
  164. package/dist/domain/admin-domain/__generated/model/versions/v6.d.ts +2 -2
  165. package/dist/domain/admin-domain/__generated/model/versions/v6.js +1 -1
  166. package/dist/domain/admin-domain/implementation/common-admin-expressions.d.ts +26 -14
  167. package/dist/domain/admin-domain/implementation/common-admin-migrations.d.ts +1 -1
  168. package/dist/domain/admin-domain/implementation/common-admin-publish.d.ts +1 -2
  169. package/dist/domain/admin-domain/index.d.ts +9 -5
  170. package/dist/domain/admin-domain/index.js +1 -1
  171. package/dist/domain/application/GetApplicationWrapperHandler.d.ts +2 -2
  172. package/dist/domain/application/GetThemeHandler.d.ts +1 -1
  173. package/dist/domain/application/GetWebComponentOptions.d.ts +1 -1
  174. package/dist/domain/application/admin-page-factories.d.ts +1 -2
  175. package/dist/domain/application/application-config.d.ts +28 -97
  176. package/dist/domain/application/assistant/assistant-fields.d.ts +5 -0
  177. package/dist/domain/application/assistant/assistant-fields.js +1 -0
  178. package/dist/domain/application/assistant/assistant-manifest.d.ts +63 -0
  179. package/dist/domain/application/assistant/assistant-resolved-manifest.d.ts +121 -0
  180. package/dist/domain/application/assistant/assistant-resolved-manifest.js +1 -0
  181. package/dist/domain/application/assistant/assistant-value-type.d.ts +9 -0
  182. package/dist/domain/application/assistant/assistant-value-type.js +1 -0
  183. package/dist/domain/application/assistant/build-assistant-manifest.d.ts +4 -0
  184. package/dist/domain/application/assistant/build-assistant-manifest.js +1 -0
  185. package/dist/domain/application/assistant/generate-assistant-prompt.d.ts +3 -0
  186. package/dist/domain/application/assistant/generate-assistant-prompt.js +1 -0
  187. package/dist/domain/application/assistant/index.d.ts +7 -0
  188. package/dist/domain/application/assistant/index.js +1 -0
  189. package/dist/domain/application/assistant/session-setup/AssistantSetupHandler.d.ts +20 -0
  190. package/dist/domain/application/assistant/session-setup/AssistantSetupHandler.js +1 -0
  191. package/dist/domain/application/assistant/session-setup/apply-assistant-setup.d.ts +10 -0
  192. package/dist/domain/application/assistant/session-setup/apply-assistant-setup.js +1 -0
  193. package/dist/domain/application/assistant/session-setup/assistant-setup-manifest.d.ts +48 -0
  194. package/dist/domain/application/assistant/session-setup/assistant-setup-manifest.js +1 -0
  195. package/dist/domain/application/assistant/session-setup/create-session-assistant.d.ts +15 -0
  196. package/dist/domain/application/assistant/session-setup/create-session-assistant.js +1 -0
  197. package/dist/domain/application/assistant/session-setup/index.d.ts +4 -0
  198. package/dist/domain/application/assistant/session-setup/index.js +1 -0
  199. package/dist/domain/application/assistant-field-options.d.ts +2 -3
  200. package/dist/domain/application/assistant-mutations.d.ts +3 -5
  201. package/dist/domain/application/assistant-mutations.js +1 -1
  202. package/dist/domain/application/assistant-recipe-groups.d.ts +3 -7
  203. package/dist/domain/application/configurator-builder.d.ts +33 -18
  204. package/dist/domain/application/configurator-builder.js +1 -1
  205. package/dist/domain/application/create-initial-published-data.d.ts +6 -7
  206. package/dist/domain/application/index.d.ts +3 -6
  207. package/dist/domain/application/index.js +1 -1
  208. package/dist/domain/application/published-data/DataRowValidatorHandler.d.ts +1 -1
  209. package/dist/domain/application/published-data/FilterPublishedChunksHandler.d.ts +1 -1
  210. package/dist/domain/application/published-data/MapPublishedChunkedDataHandler.d.ts +1 -1
  211. package/dist/domain/application/published-data/MapPublishedRevisionDataHandler.d.ts +1 -1
  212. package/dist/domain/application/published-data/SheetValidatorHandler.d.ts +1 -1
  213. package/dist/domain/application/published-data/build-legend-data.d.ts +1 -1
  214. package/dist/domain/application/published-data/create-finalize-admin-domain.d.ts +1 -2
  215. package/dist/domain/application/published-data/format-field-type.d.ts +1 -1
  216. package/dist/domain/application/published-data/map-data-to-sheet.d.ts +1 -1
  217. package/dist/domain/application/published-data/map-published-chunked-data.d.ts +3 -3
  218. package/dist/domain/application/published-data/map-published-data.d.ts +7 -4
  219. package/dist/domain/application/published-data/validate-sheet-data.d.ts +1 -1
  220. package/dist/domain/available-system-components.js +1 -1
  221. package/dist/domain/core/action/action-factory.d.ts +11 -0
  222. package/dist/domain/core/{action.d.ts → action/action.d.ts} +22 -18
  223. package/dist/domain/core/action/index.d.ts +2 -0
  224. package/dist/domain/core/action/index.js +1 -0
  225. package/dist/domain/{components → core/component}/component-reader-types.d.ts +1 -2
  226. package/dist/domain/{components → core/component}/debug-state-component.d.ts +1 -1
  227. package/dist/domain/core/component/debug-state-component.js +1 -0
  228. package/dist/domain/core/component/domain-component-optic.d.ts +65 -0
  229. package/dist/domain/core/component/domain-component-optic.js +16 -0
  230. package/dist/domain/{components → core/component}/drag-state-component.d.ts +1 -1
  231. package/dist/domain/core/component/drag-state-component.js +1 -0
  232. package/dist/domain/{components → core/component}/export-state-component.d.ts +1 -1
  233. package/dist/domain/core/component/export-state-component.js +1 -0
  234. package/dist/domain/{components → core/component}/fullscreen-state-component.d.ts +1 -1
  235. package/dist/domain/core/component/fullscreen-state-component.js +1 -0
  236. package/dist/domain/{components → core/component}/group-components-by-entity-id-and-name.d.ts +1 -2
  237. package/dist/domain/core/component/group-components-by-entity-id-and-name.js +1 -0
  238. package/dist/domain/{components → core/component}/hover-state-component.d.ts +1 -1
  239. package/dist/domain/core/component/hover-state-component.js +1 -0
  240. package/dist/domain/core/component/index.d.ts +18 -0
  241. package/dist/domain/core/component/index.js +1 -0
  242. package/dist/domain/{components → core/component}/legacy-filter.d.ts +4 -19
  243. package/dist/domain/{components → core/component}/navigation-state-component.d.ts +1 -1
  244. package/dist/domain/core/component/navigation-state-component.js +1 -0
  245. package/dist/domain/{components → core/component}/selection-state-component.d.ts +1 -1
  246. package/dist/domain/core/component/selection-state-component.js +1 -0
  247. package/dist/domain/{components → core/component}/system-component-builder.d.ts +1 -2
  248. package/dist/domain/core/component/system-component-builder.js +1 -0
  249. package/dist/domain/{components → core/component}/system-component-filter.d.ts +38 -20
  250. package/dist/domain/core/component/system-virtual-entity.js +1 -0
  251. package/dist/domain/{components → core/component}/tool-state-component.d.ts +1 -1
  252. package/dist/domain/core/component/tool-state-component.js +1 -0
  253. package/dist/domain/{components → core/component}/updates.d.ts +9 -10
  254. package/dist/domain/{components → core/component}/view-state-component.d.ts +1 -1
  255. package/dist/domain/core/component/view-state-component.js +1 -0
  256. package/dist/domain/{components → core/component}/viewport-state-component.d.ts +1 -1
  257. package/dist/domain/core/component/viewport-state-component.js +1 -0
  258. package/dist/domain/core/data-schema/data-cell-value.d.ts +4 -0
  259. package/dist/domain/core/data-schema/data-schema-array-field.d.ts +5 -0
  260. package/dist/domain/core/data-schema/data-schema-field-object.d.ts +4 -0
  261. package/dist/domain/core/data-schema/data-schema-field.d.ts +2 -0
  262. package/dist/domain/core/data-schema/data-schema-localized-field.d.ts +4 -0
  263. package/dist/domain/core/data-schema/data-schema-localized-field.js +1 -0
  264. package/dist/domain/core/data-schema/data-schema-primitive-field.d.ts +5 -0
  265. package/dist/domain/core/data-schema/data-schema-primitive-field.js +1 -0
  266. package/dist/domain/core/data-schema/data-schema.d.ts +2 -0
  267. package/dist/domain/core/data-schema/data-schema.js +1 -0
  268. package/dist/domain/core/data-schema/index.d.ts +7 -0
  269. package/dist/domain/core/data-schema/index.js +1 -0
  270. package/dist/domain/core/decoder/create-decoder.d.ts +6 -0
  271. package/dist/domain/core/decoder/create-decoder.js +1 -0
  272. package/dist/domain/core/decoder/decoder.d.ts +6 -0
  273. package/dist/domain/core/decoder/decoder.js +1 -0
  274. package/dist/domain/core/decoder/index.d.ts +2 -0
  275. package/dist/domain/core/decoder/index.js +1 -0
  276. package/dist/domain/core/domain-factory.d.ts +4 -5
  277. package/dist/domain/core/domain-factory.js +1 -1
  278. package/dist/domain/core/domain.d.ts +4 -5
  279. package/dist/domain/core/domain.js +1 -1
  280. package/dist/domain/core/emission/index.d.ts +8 -0
  281. package/dist/domain/core/emission/index.js +1 -0
  282. package/dist/domain/core/emission/reset-state-emission.d.ts +12 -0
  283. package/dist/domain/core/emission/reset-state-emission.js +1 -0
  284. package/dist/domain/core/emission/state-emission.d.ts +4 -0
  285. package/dist/domain/core/emission/state-emission.js +1 -0
  286. package/dist/domain/core/emission/state-update-emission.d.ts +14 -0
  287. package/dist/domain/core/emission/state-update-emission.js +1 -0
  288. package/dist/domain/core/emission/state-validation-result.d.ts +18 -0
  289. package/dist/domain/core/emission/state-validation-result.js +1 -0
  290. package/dist/domain/core/emission/transformation-log.d.ts +2 -0
  291. package/dist/domain/core/emission/transformation-log.js +1 -0
  292. package/dist/domain/core/emission/transformer-log-entry.d.ts +6 -0
  293. package/dist/domain/core/emission/transformer-log-entry.js +1 -0
  294. package/dist/domain/core/emission/transformer-log.d.ts +11 -0
  295. package/dist/domain/core/emission/transformer-log.js +1 -0
  296. package/dist/domain/core/emission/transformer-phase.d.ts +1 -0
  297. package/dist/domain/core/emission/transformer-phase.js +1 -0
  298. package/dist/domain/core/expression/aliased-expressions.d.ts +10 -0
  299. package/dist/domain/core/expression/aliased-expressions.js +1 -0
  300. package/dist/domain/core/expression/constant-expressions.d.ts +16 -0
  301. package/dist/domain/core/expression/constant-expressions.js +1 -0
  302. package/dist/domain/core/expression/custom-expression.d.ts +25 -0
  303. package/dist/domain/core/expression/custom-expression.js +1 -0
  304. package/dist/domain/core/expression/expression.d.ts +46 -0
  305. package/dist/domain/core/expression/expression.js +1 -0
  306. package/dist/domain/core/expression/index.d.ts +4 -0
  307. package/dist/domain/core/expression/index.js +1 -0
  308. package/dist/domain/core/index.d.ts +13 -17
  309. package/dist/domain/core/index.js +1 -1
  310. package/dist/domain/{invariants → core/invariant}/builtin-invariant.d.ts +2 -2
  311. package/dist/domain/core/invariant/custom-invariants.d.ts +13 -0
  312. package/dist/domain/core/invariant/custom-invariants.js +1 -0
  313. package/dist/domain/core/invariant/index.d.ts +5 -0
  314. package/dist/domain/core/invariant/index.js +1 -0
  315. package/dist/domain/core/invariant/invariants.d.ts +10 -0
  316. package/dist/domain/core/invariant/invariants.js +1 -0
  317. package/dist/domain/core/invariant/violation-component.js +1 -0
  318. package/dist/domain/{invariants → core/invariant}/violation.d.ts +2 -2
  319. package/dist/domain/core/{component.d.ts → model/component.d.ts} +1 -1
  320. package/dist/domain/core/model/index.d.ts +6 -0
  321. package/dist/domain/core/model/index.js +1 -0
  322. package/dist/domain/core/{reflection.d.ts → model/reflection.d.ts} +1 -1
  323. package/dist/domain/core/model/reflection.js +1 -0
  324. package/dist/domain/core/recipe/index.d.ts +1 -0
  325. package/dist/domain/core/recipe/index.js +1 -0
  326. package/dist/domain/core/recipe/recipes.d.ts +23 -0
  327. package/dist/domain/core/recipe/recipes.js +1 -0
  328. package/dist/domain/core/relation/all-of-type-relation.d.ts +19 -0
  329. package/dist/domain/core/relation/all-of-type-relation.js +1 -0
  330. package/dist/domain/{relations → core/relation}/component-factories.d.ts +1 -2
  331. package/dist/domain/core/relation/component-factories.js +1 -0
  332. package/dist/domain/{relations → core/relation}/composed-of.d.ts +1 -1
  333. package/dist/domain/core/relation/composed-of.js +1 -0
  334. package/dist/domain/core/relation/direct-relation.d.ts +17 -0
  335. package/dist/domain/core/relation/index.d.ts +8 -0
  336. package/dist/domain/core/relation/index.js +1 -0
  337. package/dist/domain/core/relation/indirect-relation.d.ts +25 -0
  338. package/dist/domain/core/relation/indirect-relation.js +1 -0
  339. package/dist/domain/{relations → core/relation}/reference-component.d.ts +4 -5
  340. package/dist/domain/core/relation/reference-component.js +1 -0
  341. package/dist/domain/{relations → core/relation}/reference-field.d.ts +1 -1
  342. package/dist/domain/core/relation/reference-field.js +1 -0
  343. package/dist/domain/core/relation/relation-factory.d.ts +22 -0
  344. package/dist/domain/core/relation/relation-factory.js +1 -0
  345. package/dist/domain/core/schema/enhanced-json-schema.js +1 -0
  346. package/dist/domain/core/schema/extended-schema-validator.js +1 -0
  347. package/dist/domain/core/schema/index.d.ts +3 -0
  348. package/dist/domain/core/schema/index.js +1 -0
  349. package/dist/domain/core/schema/schema-validator.js +1 -0
  350. package/dist/domain/core/state/id-sequence.d.ts +15 -0
  351. package/dist/domain/core/state/id-sequence.js +1 -0
  352. package/dist/domain/core/state/index.d.ts +3 -0
  353. package/dist/domain/core/state/index.js +1 -0
  354. package/dist/domain/core/{migrations.d.ts → state/migrations.d.ts} +15 -47
  355. package/dist/domain/core/state/migrations.js +1 -0
  356. package/dist/domain/core/{state.d.ts → state/state.d.ts} +2 -3
  357. package/dist/domain/domain-builder.d.ts +11 -11
  358. package/dist/domain/domain-builder.js +1 -1
  359. package/dist/domain/domain-context/action-system/action-system.d.ts +2 -4
  360. package/dist/domain/domain-context/action-system/action-system.js +1 -1
  361. package/dist/domain/domain-context/action-system/index.d.ts +1 -0
  362. package/dist/domain/domain-context/action-system/index.js +1 -0
  363. package/dist/domain/domain-context/analytics-system/index.d.ts +2 -0
  364. package/dist/domain/domain-context/analytics-system/index.js +1 -0
  365. package/dist/domain/domain-context/create-transformer.d.ts +2 -2
  366. package/dist/domain/domain-context/dimension-system/dimension-state.js +1 -1
  367. package/dist/domain/domain-context/dimension-system/dimension-system.d.ts +3 -4
  368. package/dist/domain/domain-context/dimension-system/dimension-system.js +1 -1
  369. package/dist/domain/domain-context/dimension-system/index.d.ts +1 -0
  370. package/dist/domain/domain-context/dimension-system/index.js +1 -0
  371. package/dist/domain/domain-context/domain-context-systems.d.ts +8 -10
  372. package/dist/domain/domain-context/index.d.ts +8 -18
  373. package/dist/domain/domain-context/index.js +1 -1
  374. package/dist/domain/domain-context/navigation-system/index.d.ts +3 -0
  375. package/dist/domain/domain-context/navigation-system/index.js +1 -0
  376. package/dist/domain/domain-context/navigation-system/navigation-system.d.ts +5 -8
  377. package/dist/domain/domain-context/navigation-system/navigation-system.js +1 -1
  378. package/dist/domain/domain-context/navigation-system/navigation-updates.d.ts +1 -12
  379. package/dist/domain/domain-context/navigation-system/navigation-updates.js +1 -1
  380. package/dist/domain/domain-context/navigation-system/selection-transformers.d.ts +2 -2
  381. package/dist/domain/domain-context/navigation-system/selection-transformers.js +1 -1
  382. package/dist/domain/domain-context/recipe-system/index.d.ts +1 -0
  383. package/dist/domain/domain-context/recipe-system/index.js +1 -0
  384. package/dist/domain/domain-context/recipe-system/recipe-cooker-system.d.ts +2 -4
  385. package/dist/domain/domain-context/recipe-system/recipe-cooker-system.js +1 -1
  386. package/dist/domain/domain-context/relation-transformers/cascade-deletes.d.ts +3 -3
  387. package/dist/domain/domain-context/relation-transformers/cascade-deletes.js +1 -1
  388. package/dist/domain/domain-context/relation-transformers/cascade-ref-pruning.d.ts +3 -3
  389. package/dist/domain/domain-context/relation-transformers/cascade-ref-pruning.js +1 -1
  390. package/dist/domain/domain-context/relation-transformers/create-entity-refs.d.ts +3 -3
  391. package/dist/domain/domain-context/relation-transformers/create-entity-refs.js +2 -2
  392. package/dist/domain/domain-context/relation-transformers/index.d.ts +4 -0
  393. package/dist/domain/domain-context/relation-transformers/index.js +1 -0
  394. package/dist/domain/domain-context/relation-transformers/replace-refs.d.ts +3 -3
  395. package/dist/domain/domain-context/relation-transformers/replace-refs.js +1 -1
  396. package/dist/domain/domain-context/store-system/apply-updates.d.ts +1 -3
  397. package/dist/domain/domain-context/store-system/apply-updates.js +1 -1
  398. package/dist/domain/domain-context/store-system/index.d.ts +4 -0
  399. package/dist/domain/domain-context/store-system/index.js +1 -0
  400. package/dist/domain/domain-context/store-system/next-domain-entity-id.d.ts +1 -13
  401. package/dist/domain/domain-context/store-system/next-domain-entity-id.js +1 -1
  402. package/dist/domain/domain-context/store-system/reconcile-projected-entities.d.ts +1 -2
  403. package/dist/domain/domain-context/store-system/reconcile-projected-entities.js +1 -1
  404. package/dist/domain/domain-context/store-system/store-system.d.ts +2 -39
  405. package/dist/domain/domain-context/store-system/store-system.js +2 -2
  406. package/dist/domain/domain-context/store-system/system-state.d.ts +2 -4
  407. package/dist/domain/domain-context/store-system/system-state.js +1 -1
  408. package/dist/domain/domain-context/transformers/actions-builder.d.ts +1 -2
  409. package/dist/domain/domain-context/transformers/actions-builder.js +1 -1
  410. package/dist/domain/domain-context/transformers/auto-snap-transformer.d.ts +6 -10
  411. package/dist/domain/domain-context/transformers/auto-snap-transformer.js +1 -1
  412. package/dist/domain/domain-context/transformers/chain-builder.d.ts +3 -3
  413. package/dist/domain/domain-context/transformers/context.d.ts +2 -7
  414. package/dist/domain/domain-context/transformers/context.js +1 -1
  415. package/dist/domain/domain-context/transformers/entity-builder.d.ts +1 -5
  416. package/dist/domain/domain-context/transformers/entity-builder.js +1 -1
  417. package/dist/domain/domain-context/transformers/index.d.ts +1 -1
  418. package/dist/domain/domain-context/transformers/index.js +1 -1
  419. package/dist/domain/domain-context/transformers/then-builder.d.ts +1 -2
  420. package/dist/domain/domain-context/transformers/then-builder.js +1 -1
  421. package/dist/domain/domain-context/transformers/when-builder.d.ts +3 -9
  422. package/dist/domain/domain-context/transformers/when-builder.js +1 -1
  423. package/dist/domain/domain-context/undo-system.d.ts +2 -3
  424. package/dist/domain/domain-runtime/access/selectors.d.ts +9 -0
  425. package/dist/domain/domain-runtime/access/selectors.js +1 -1
  426. package/dist/domain/domain-runtime/access/types.d.ts +2 -0
  427. package/dist/domain/domain-runtime/access/types.js +1 -1
  428. package/dist/domain/domain-runtime/domain-context/action-context.d.ts +11 -0
  429. package/dist/domain/domain-runtime/domain-context/action-context.js +1 -0
  430. package/dist/domain/domain-runtime/domain-context/component-reader.d.ts +1 -4
  431. package/dist/domain/domain-runtime/domain-context/component-reader.js +1 -1
  432. package/dist/domain/domain-runtime/domain-context/domain-context.js +1 -1
  433. package/dist/domain/domain-runtime/domain-context/expression-context.d.ts +8 -0
  434. package/dist/domain/domain-runtime/domain-context/expression-context.js +1 -0
  435. package/dist/domain/domain-runtime/domain-context/index.d.ts +3 -0
  436. package/dist/domain/domain-runtime/domain-context/runtime-expression-context.d.ts +18 -0
  437. package/dist/domain/domain-runtime/domain-context/runtime-expression-context.js +1 -0
  438. package/dist/domain/domain-runtime/domain-context/selectors.d.ts +19 -25
  439. package/dist/domain/domain-runtime/domain-context/selectors.js +1 -1
  440. package/dist/domain/domain-runtime/domain-context/types.d.ts +4 -1
  441. package/dist/domain/domain-runtime/domain-runtime.d.ts +88 -72
  442. package/dist/domain/domain-runtime/errors/implementation-error-collector.d.ts +19 -0
  443. package/dist/domain/domain-runtime/errors/implementation-error-collector.js +1 -0
  444. package/dist/domain/domain-runtime/errors/implementation-error.d.ts +46 -0
  445. package/dist/domain/domain-runtime/errors/implementation-error.js +1 -0
  446. package/dist/domain/domain-runtime/errors/implementation-errors.d.ts +13 -0
  447. package/dist/domain/domain-runtime/errors/implementation-errors.js +1 -0
  448. package/dist/domain/domain-runtime/errors/index.d.ts +4 -0
  449. package/dist/domain/domain-runtime/errors/index.js +1 -0
  450. package/dist/domain/domain-runtime/errors/to-implementation-errors.d.ts +10 -0
  451. package/dist/domain/domain-runtime/errors/to-implementation-errors.js +1 -0
  452. package/dist/domain/domain-runtime/index.d.ts +1 -0
  453. package/dist/domain/domain-runtime/index.js +1 -1
  454. package/dist/domain/domain-runtime/spec/create-violation-expressions.d.ts +24 -0
  455. package/dist/domain/domain-runtime/spec/create-violation-expressions.js +1 -0
  456. package/dist/domain/domain-runtime/spec/index.d.ts +5 -0
  457. package/dist/domain/domain-runtime/spec/index.js +1 -1
  458. package/dist/domain/domain-runtime/spec/initialize.js +1 -1
  459. package/dist/domain/{expressions → domain-runtime/spec}/memoize-expression.d.ts +1 -2
  460. package/dist/domain/{application → domain-runtime/spec/module-checks}/element-registration.d.ts +6 -1
  461. package/dist/domain/domain-runtime/spec/module-checks/element-registration.js +1 -0
  462. package/dist/domain/{application → domain-runtime/spec/module-checks}/handler-registration.d.ts +5 -0
  463. package/dist/domain/domain-runtime/spec/module-checks/handler-registration.js +1 -0
  464. package/dist/domain/domain-runtime/spec/module-checks/index.d.ts +8 -0
  465. package/dist/domain/domain-runtime/spec/module-checks/index.js +1 -0
  466. package/dist/domain/domain-runtime/spec/module-checks/project-modules.d.ts +32 -0
  467. package/dist/domain/domain-runtime/spec/module-checks/project-modules.js +1 -0
  468. package/dist/domain/domain-runtime/spec/module-checks/resolve-action-modules.d.ts +4 -0
  469. package/dist/domain/domain-runtime/spec/module-checks/resolve-action-modules.js +1 -0
  470. package/dist/domain/domain-runtime/spec/module-checks/resolve-component-optic-modules.d.ts +4 -0
  471. package/dist/domain/domain-runtime/spec/module-checks/resolve-component-optic-modules.js +1 -0
  472. package/dist/domain/domain-runtime/spec/module-checks/resolve-expression-modules.d.ts +15 -0
  473. package/dist/domain/domain-runtime/spec/module-checks/resolve-expression-modules.js +1 -0
  474. package/dist/domain/domain-runtime/spec/module-checks/resolve-imported-transformers.d.ts +22 -0
  475. package/dist/domain/domain-runtime/spec/module-checks/resolve-imported-transformers.js +1 -0
  476. package/dist/domain/domain-runtime/spec/module-checks/resolve-invariant-modules.d.ts +6 -0
  477. package/dist/domain/domain-runtime/spec/module-checks/resolve-invariant-modules.js +1 -0
  478. package/dist/domain/{actions → domain-runtime/spec}/prepare-action-implementations.d.ts +1 -1
  479. package/dist/domain/domain-runtime/spec/prepare-action-implementations.js +5 -0
  480. package/dist/domain/{expressions → domain-runtime/spec}/prepare-domain-expressions.d.ts +1 -1
  481. package/dist/domain/domain-runtime/spec/selectors.d.ts +7 -8
  482. package/dist/domain/domain-runtime/spec/selectors.js +1 -1
  483. package/dist/domain/domain-runtime/spec/types.d.ts +6 -6
  484. package/dist/domain/{system-components → extensions}/angle-indicator.d.ts +1 -1
  485. package/dist/domain/extensions/angle-indicator.js +1 -0
  486. package/dist/domain/extensions/attribute-switch.js +1 -0
  487. package/dist/domain/{system-components → extensions}/autorotate-camera-component.d.ts +1 -1
  488. package/dist/domain/extensions/autorotate-camera-component.js +1 -0
  489. package/dist/domain/{system-components → extensions}/basic-sidebar-footer.d.ts +1 -1
  490. package/dist/domain/extensions/basic-sidebar-footer.js +1 -0
  491. package/dist/domain/extensions/camera-based-hidden-entity-object.js +1 -0
  492. package/dist/domain/extensions/camera-based-hidden-entity.js +1 -0
  493. package/dist/domain/{system-components → extensions}/canvas-config.d.ts +1 -1
  494. package/dist/domain/extensions/canvas-config.js +1 -0
  495. package/dist/domain/extensions/canvas-custom-environment.js +1 -0
  496. package/dist/domain/{system-components → extensions}/canvas-padding.d.ts +1 -1
  497. package/dist/domain/extensions/canvas-padding.js +1 -0
  498. package/dist/domain/{system-components → extensions}/canvas-preset-environment.d.ts +1 -1
  499. package/dist/domain/extensions/canvas-preset-environment.js +1 -0
  500. package/dist/domain/{system-components → extensions}/child-entity-recipe-hierarchy.d.ts +2 -2
  501. package/dist/domain/extensions/child-entity-recipe-hierarchy.js +1 -0
  502. package/dist/domain/extensions/client-side-image.js +1 -0
  503. package/dist/domain/extensions/color-value.js +1 -0
  504. package/dist/domain/{system-components → extensions}/common/angle-indicator-schema.d.ts +1 -1
  505. package/dist/domain/extensions/common/angle-indicator-schema.js +1 -0
  506. package/dist/domain/{system-components → extensions}/common/dimension-indicator-schema.d.ts +1 -1
  507. package/dist/domain/extensions/common/dimension-indicator-schema.js +1 -0
  508. package/dist/domain/extensions/common/index.d.ts +4 -0
  509. package/dist/domain/extensions/common/index.js +1 -0
  510. package/dist/domain/{system-components → extensions}/custom-header.d.ts +2 -2
  511. package/dist/domain/{system-components → extensions}/custom-header.js +1 -1
  512. package/dist/domain/extensions/custom-price-footer.js +1 -0
  513. package/dist/domain/{system-components → extensions}/custom-sidebar-footer.d.ts +2 -2
  514. package/dist/domain/{system-components → extensions}/custom-sidebar-footer.js +1 -1
  515. package/dist/domain/{system-components → extensions}/dimension-indicator.d.ts +1 -1
  516. package/dist/domain/extensions/dimension-indicator.js +1 -0
  517. package/dist/domain/{system-components → extensions}/editable-angle-indicator.d.ts +3 -2
  518. package/dist/domain/extensions/editable-angle-indicator.js +1 -0
  519. package/dist/domain/{system-components → extensions}/editable-distance-dimension-indicator.d.ts +3 -2
  520. package/dist/domain/extensions/editable-distance-dimension-indicator.js +1 -0
  521. package/dist/domain/{system-components → extensions}/editable-offset-indicator.d.ts +3 -2
  522. package/dist/domain/extensions/editable-offset-indicator.js +1 -0
  523. package/dist/domain/{system-components → extensions}/editable-size-indicator.d.ts +3 -2
  524. package/dist/domain/extensions/editable-size-indicator.js +1 -0
  525. package/dist/domain/{system-components → extensions}/entity-header.d.ts +1 -1
  526. package/dist/domain/extensions/entity-header.js +1 -0
  527. package/dist/domain/{system-components → extensions}/exit-tool-mode-fab.d.ts +1 -1
  528. package/dist/domain/extensions/exit-tool-mode-fab.js +1 -0
  529. package/dist/domain/{system-components → extensions}/finalize-action.d.ts +1 -1
  530. package/dist/domain/extensions/finalize-action.js +1 -0
  531. package/dist/domain/extensions/finalize-component.js +1 -0
  532. package/dist/domain/extensions/fit-selection-orthographic-camera-component.js +1 -0
  533. package/dist/domain/extensions/fit-selection-perspective-camera-component.js +1 -0
  534. package/dist/domain/{system-components → extensions}/fixed-header.d.ts +1 -1
  535. package/dist/domain/extensions/fixed-header.js +1 -0
  536. package/dist/domain/{system-components → extensions}/floating-header.d.ts +1 -1
  537. package/dist/domain/extensions/floating-header.js +1 -0
  538. package/dist/domain/{system-components → extensions}/hidden-header.d.ts +1 -1
  539. package/dist/domain/extensions/hidden-header.js +1 -0
  540. package/dist/domain/{system-components → extensions}/hidden-sidebar-footer.d.ts +1 -1
  541. package/dist/domain/extensions/hidden-sidebar-footer.js +1 -0
  542. package/dist/domain/{system-components → extensions}/horizontal-tabs.d.ts +1 -1
  543. package/dist/domain/extensions/horizontal-tabs.js +1 -0
  544. package/dist/domain/extensions/index.d.ts +69 -0
  545. package/dist/domain/extensions/index.js +1 -0
  546. package/dist/domain/{system-components → extensions}/list-selector-dimension-indicator.d.ts +3 -2
  547. package/dist/domain/extensions/list-selector-dimension-indicator.js +1 -0
  548. package/dist/domain/extensions/multilingual-text-value.js +1 -0
  549. package/dist/domain/extensions/navigation-steps.js +1 -0
  550. package/dist/domain/{system-components → extensions}/offset-anchors.d.ts +1 -1
  551. package/dist/domain/extensions/offset-anchors.js +1 -0
  552. package/dist/domain/{system-components → extensions}/offset-indicator.d.ts +1 -2
  553. package/dist/domain/extensions/offset-indicator.js +1 -0
  554. package/dist/domain/{system-components → extensions}/offset.d.ts +1 -1
  555. package/dist/domain/extensions/offset.js +1 -0
  556. package/dist/domain/{system-components → extensions}/other-action.d.ts +1 -1
  557. package/dist/domain/extensions/other-action.js +1 -0
  558. package/dist/domain/{system-components → extensions}/property-page.d.ts +2 -2
  559. package/dist/domain/extensions/property-page.js +1 -0
  560. package/dist/domain/{system-components → extensions}/read-sidebar-footer.d.ts +1 -1
  561. package/dist/domain/extensions/read-sidebar-footer.js +1 -0
  562. package/dist/domain/{system-components → extensions}/replace-entity-recipe-hierarchy.d.ts +2 -2
  563. package/dist/domain/extensions/replace-entity-recipe-hierarchy.js +1 -0
  564. package/dist/domain/extensions/rotatable.js +1 -0
  565. package/dist/domain/extensions/rotation-handle.js +1 -0
  566. package/dist/domain/extensions/save-template-thumbnail.js +1 -0
  567. package/dist/domain/{system-components → extensions}/scene-entity-add-fab.d.ts +1 -1
  568. package/dist/domain/extensions/scene-entity-add-fab.js +1 -0
  569. package/dist/domain/extensions/scene-entity-animation.js +1 -0
  570. package/dist/domain/extensions/scene-entity-control.js +1 -0
  571. package/dist/domain/{system-components → extensions}/scene-entity-delete-fab.d.ts +1 -1
  572. package/dist/domain/extensions/scene-entity-delete-fab.js +1 -0
  573. package/dist/domain/extensions/scene-entity-floor-object.js +1 -0
  574. package/dist/domain/{system-components → extensions}/scene-entity-html-hotspot.d.ts +1 -1
  575. package/dist/domain/extensions/scene-entity-html-hotspot.js +1 -0
  576. package/dist/domain/{system-components → extensions}/scene-entity-navigation-hotspot.d.ts +1 -1
  577. package/dist/domain/extensions/scene-entity-navigation-hotspot.js +1 -0
  578. package/dist/domain/{system-components → extensions}/scene-entity-object-html-hotspot.d.ts +1 -1
  579. package/dist/domain/extensions/scene-entity-object-html-hotspot.js +1 -0
  580. package/dist/domain/{system-components → extensions}/scene-entity-select-hotspot.d.ts +1 -1
  581. package/dist/domain/extensions/scene-entity-select-hotspot.js +1 -0
  582. package/dist/domain/extensions/scene-entity-wall-object.js +1 -0
  583. package/dist/domain/extensions/selectable-component.js +1 -0
  584. package/dist/domain/{system-components → extensions}/sidebar-tabs.d.ts +1 -1
  585. package/dist/domain/extensions/sidebar-tabs.js +1 -0
  586. package/dist/domain/extensions/simple-summary.js +1 -0
  587. package/dist/domain/{system-components → extensions}/size.d.ts +1 -1
  588. package/dist/domain/extensions/size.js +1 -0
  589. package/dist/domain/{system-components → extensions}/sketching-draw.d.ts +1 -1
  590. package/dist/domain/extensions/sketching-draw.js +1 -0
  591. package/dist/domain/{system-components → extensions}/sketching-edit.d.ts +2 -2
  592. package/dist/domain/extensions/sketching-edit.js +1 -0
  593. package/dist/domain/extensions/summary-component.js +1 -0
  594. package/dist/domain/extensions/text-value.js +1 -0
  595. package/dist/domain/extensions/tool-controls.js +1 -0
  596. package/dist/domain/{system-components → extensions}/tool-menu-fab.d.ts +2 -2
  597. package/dist/domain/extensions/tool-menu-fab.js +1 -0
  598. package/dist/domain/{system-components → extensions}/toolbar.d.ts +2 -2
  599. package/dist/domain/{system-components → extensions}/toolbar.js +1 -1
  600. package/dist/domain/{system-components → extensions}/universal-sidebar-footer.d.ts +1 -1
  601. package/dist/domain/extensions/universal-sidebar-footer.js +1 -0
  602. package/dist/domain/extensions/view-controls.js +1 -0
  603. package/dist/domain/index.d.ts +2 -32
  604. package/dist/domain/index.js +1 -1
  605. package/dist/domain/mocks/create-mock-domain-context.d.ts +1 -1
  606. package/dist/domain/mocks/create-mock-domain-runtime-services.d.ts +1 -1
  607. package/dist/domain/mocks/create-mock-domain-runtime.d.ts +30 -21
  608. package/dist/domain/mocks/create-mock-domain-runtime.js +1 -1
  609. package/dist/domain/mocks/create-mock-domain.d.ts +1 -1
  610. package/dist/domain/mocks/create-mock-domain.js +1 -1
  611. package/dist/domain/mocks/create-mock-state.d.ts +2 -2
  612. package/dist/domain/projections/blender-projections/blender-projections.d.ts +2 -3
  613. package/dist/domain/projections/blender-projections/blender-projections.js +1 -1
  614. package/dist/domain/projections/blender-projections/camera.d.ts +2 -2
  615. package/dist/domain/projections/collision-projections.d.ts +1 -1
  616. package/dist/domain/projections/composition-projections.d.ts +1 -1
  617. package/dist/domain/projections/composition-projections.js +1 -1
  618. package/dist/domain/projections/constraint-projections.d.ts +1 -1
  619. package/dist/domain/projections/index.d.ts +1 -1
  620. package/dist/domain/projections/position-projections.d.ts +1 -1
  621. package/dist/domain/projections/projected-entities-projections.d.ts +2 -3
  622. package/dist/domain/projections/snap-matching.d.ts +1 -2
  623. package/dist/domain/projections/snap-utils.d.ts +1 -2
  624. package/dist/domain/projections/snapping-projections.d.ts +1 -1
  625. package/dist/domain/projections/validation-projections.d.ts +3 -20
  626. package/dist/domain/projections/validation-projections.js +1 -1
  627. package/dist/domain/sketching/sketching-projections.d.ts +1 -1
  628. package/dist/domain/system-components/admin-sidebar.d.ts +1 -1
  629. package/dist/domain/system-components/admin-sidebar.js +1 -1
  630. package/dist/domain/system-components/angle-dimension.js +1 -1
  631. package/dist/domain/system-components/application-config.d.ts +1 -1
  632. package/dist/domain/system-components/application-config.js +1 -1
  633. package/dist/domain/system-components/attribute-selection.js +1 -1
  634. package/dist/domain/system-components/bounding-box-component.d.ts +1 -1
  635. package/dist/domain/system-components/bounding-box-component.js +1 -1
  636. package/dist/domain/system-components/bounding-sphere-component.d.ts +1 -1
  637. package/dist/domain/system-components/bounding-sphere-component.js +1 -1
  638. package/dist/domain/system-components/child-entity-recipes.d.ts +1 -1
  639. package/dist/domain/system-components/child-entity-recipes.js +1 -1
  640. package/dist/domain/system-components/child-entity-selection.d.ts +1 -2
  641. package/dist/domain/system-components/child-entity-selection.js +1 -1
  642. package/dist/domain/system-components/collision-box-geometry.d.ts +1 -1
  643. package/dist/domain/system-components/collision-box-geometry.js +1 -1
  644. package/dist/domain/system-components/collision-geometries.d.ts +1 -1
  645. package/dist/domain/system-components/collision-geometry.d.ts +1 -1
  646. package/dist/domain/system-components/collision-geometry.js +1 -1
  647. package/dist/domain/system-components/collision-point-geometry.d.ts +1 -1
  648. package/dist/domain/system-components/collision-point-geometry.js +1 -1
  649. package/dist/domain/system-components/common/index.d.ts +0 -4
  650. package/dist/domain/system-components/common/index.js +1 -1
  651. package/dist/domain/system-components/common/recipes.d.ts +1 -2
  652. package/dist/domain/system-components/constraint.d.ts +1 -1
  653. package/dist/domain/system-components/constraint.js +1 -1
  654. package/dist/domain/system-components/create-blueprint.d.ts +1 -1
  655. package/dist/domain/system-components/custom-scene-entity.d.ts +1 -1
  656. package/dist/domain/system-components/custom-scene-entity.js +1 -1
  657. package/dist/domain/system-components/detail.js +1 -1
  658. package/dist/domain/system-components/distance-dimension-select.d.ts +1 -1
  659. package/dist/domain/system-components/distance-dimension-select.js +1 -1
  660. package/dist/domain/system-components/distance-dimension.d.ts +1 -1
  661. package/dist/domain/system-components/distance-dimension.js +1 -1
  662. package/dist/domain/system-components/drag-handle.d.ts +1 -1
  663. package/dist/domain/system-components/drag-handle.js +1 -1
  664. package/dist/domain/system-components/fit-entity-orthographic-camera-component.js +1 -1
  665. package/dist/domain/system-components/fit-entity-perspective-camera-component.js +1 -1
  666. package/dist/domain/system-components/fit-root-orthographic-camera-component.js +1 -1
  667. package/dist/domain/system-components/fit-root-perspective-camera-component.js +1 -1
  668. package/dist/domain/system-components/generic-dimension.d.ts +1 -1
  669. package/dist/domain/system-components/generic-dimension.js +1 -1
  670. package/dist/domain/system-components/hidden-entity.js +1 -1
  671. package/dist/domain/system-components/hotspot-drag-handle.d.ts +1 -2
  672. package/dist/domain/system-components/hotspot-drag-handle.js +1 -1
  673. package/dist/domain/system-components/index.d.ts +0 -68
  674. package/dist/domain/system-components/index.js +1 -1
  675. package/dist/domain/system-components/material-override-property-transition.js +1 -1
  676. package/dist/domain/system-components/material-override-transformer.js +1 -1
  677. package/dist/domain/system-components/material-swatch.js +1 -1
  678. package/dist/domain/system-components/navigation-page.js +1 -1
  679. package/dist/domain/system-components/navigation-panel-list.js +1 -1
  680. package/dist/domain/system-components/phoenix-entity-elements/admin-data-table-sidebar.d.ts +1 -1
  681. package/dist/domain/system-components/phoenix-layout-elements/admin-connected-resource-page.d.ts +1 -1
  682. package/dist/domain/system-components/phoenix-layout-elements/admin-data-table-actions.d.ts +1 -1
  683. package/dist/domain/system-components/phoenix-layout-elements/admin-data-table-page.d.ts +1 -1
  684. package/dist/domain/system-components/pivot-point.d.ts +1 -1
  685. package/dist/domain/system-components/pivot-point.js +1 -1
  686. package/dist/domain/system-components/price.js +1 -1
  687. package/dist/domain/system-components/projected-entities.d.ts +1 -1
  688. package/dist/domain/system-components/projected-entities.js +1 -1
  689. package/dist/domain/system-components/replace-entity-recipes.d.ts +1 -1
  690. package/dist/domain/system-components/replace-entity-recipes.js +1 -1
  691. package/dist/domain/system-components/scene-entity-ambient-light.js +1 -1
  692. package/dist/domain/system-components/scene-entity-box-object.js +1 -1
  693. package/dist/domain/system-components/scene-entity-directional-light.js +1 -1
  694. package/dist/domain/system-components/scene-entity-local-material-override.js +1 -1
  695. package/dist/domain/system-components/scene-entity-material-override.js +1 -1
  696. package/dist/domain/system-components/scene-entity-object-clip.js +1 -1
  697. package/dist/domain/system-components/scene-entity-object-decal.js +1 -1
  698. package/dist/domain/system-components/scene-entity-object-group.js +1 -1
  699. package/dist/domain/system-components/scene-entity-object-local-material-override.js +1 -1
  700. package/dist/domain/system-components/scene-entity-object-material-override.js +1 -1
  701. package/dist/domain/system-components/scene-entity-object-properties.js +1 -1
  702. package/dist/domain/system-components/scene-entity-object-remote-material-override.js +1 -1
  703. package/dist/domain/system-components/scene-entity-object-text-decal.js +1 -1
  704. package/dist/domain/system-components/scene-entity-object-transformer.js +1 -1
  705. package/dist/domain/system-components/scene-entity-object-transimissive-material-override.js +1 -1
  706. package/dist/domain/system-components/scene-entity-object.js +1 -1
  707. package/dist/domain/system-components/scene-entity-point-light.js +1 -1
  708. package/dist/domain/system-components/scene-entity-properties.js +1 -1
  709. package/dist/domain/system-components/scene-entity-rect-area-light.js +1 -1
  710. package/dist/domain/system-components/scene-entity-remote-material-override.js +1 -1
  711. package/dist/domain/system-components/scene-entity-remote-object.js +1 -1
  712. package/dist/domain/system-components/scene-entity-spot-light.js +1 -1
  713. package/dist/domain/system-components/scene-entity-transimissive-material-override.js +1 -1
  714. package/dist/domain/system-components/sketching-line.d.ts +1 -1
  715. package/dist/domain/system-components/sketching-line.js +1 -1
  716. package/dist/domain/system-components/sketching-rectangle.d.ts +1 -1
  717. package/dist/domain/system-components/sketching-rectangle.js +1 -1
  718. package/dist/domain/system-components/sketching.d.ts +1 -1
  719. package/dist/domain/system-components/sketching.js +1 -1
  720. package/dist/domain/system-components/snap-axis.d.ts +1 -1
  721. package/dist/domain/system-components/snap-axis.js +1 -1
  722. package/dist/domain/system-components/snap-edge.d.ts +1 -1
  723. package/dist/domain/system-components/snap-edge.js +1 -1
  724. package/dist/domain/system-components/snap-plane.d.ts +1 -1
  725. package/dist/domain/system-components/snap-plane.js +1 -1
  726. package/dist/domain/system-components/snap-point.d.ts +1 -1
  727. package/dist/domain/system-components/snap-point.js +1 -1
  728. package/dist/domain/system-components/static-orthographic-camera-component.d.ts +1 -1
  729. package/dist/domain/system-components/static-orthographic-camera-component.js +1 -1
  730. package/dist/domain/system-components/static-perspective-camera-component.d.ts +1 -1
  731. package/dist/domain/system-components/static-perspective-camera-component.js +1 -1
  732. package/dist/domain/utils/eval-cache.d.ts +2 -3
  733. package/dist/domain/utils/map-nested-object.d.ts +1 -1
  734. package/dist/domain/utils/memo-eval.d.ts +2 -4
  735. package/dist/editor/Editor.js +1 -1
  736. package/dist/editor/domain-editors/use-implementation-files.d.ts +8 -8
  737. package/dist/editor/domain-editors/use-implementation-files.js +1 -1
  738. package/dist/editor/mocks/EditorMockContext.js +1 -1
  739. package/dist/editor/variants/VariantAnswerFooter.d.ts +17 -0
  740. package/dist/editor/variants/VariantAnswerFooter.js +1 -0
  741. package/dist/editor/variants/VariantPreviewHandler.d.ts +6 -0
  742. package/dist/editor/variants/VariantPreviewHandler.js +1 -0
  743. package/dist/editor/variants/variant-preview-styles.d.ts +49 -0
  744. package/dist/editor/variants/variant-preview-styles.js +1 -0
  745. package/dist/i18n/locales/cs/messages.js +1 -1
  746. package/dist/i18n/locales/da/messages.js +1 -1
  747. package/dist/i18n/locales/de/messages.js +1 -1
  748. package/dist/i18n/locales/de-AT/messages.js +1 -1
  749. package/dist/i18n/locales/en/messages.js +1 -1
  750. package/dist/i18n/locales/en-AU/messages.js +1 -1
  751. package/dist/i18n/locales/en-GB/messages.js +1 -1
  752. package/dist/i18n/locales/es/messages.js +1 -1
  753. package/dist/i18n/locales/fr/messages.js +1 -1
  754. package/dist/i18n/locales/hu/messages.js +1 -1
  755. package/dist/i18n/locales/it/messages.js +1 -1
  756. package/dist/i18n/locales/nl/messages.js +1 -1
  757. package/dist/i18n/locales/pl/messages.js +1 -1
  758. package/dist/i18n/locales/pt/messages.js +1 -1
  759. package/dist/i18n/locales/ro/messages.js +1 -1
  760. package/dist/i18n/locales/sk/messages.js +1 -1
  761. package/dist/i18n/locales/tr/messages.js +1 -1
  762. package/dist/legacy/domain-cli/gen/configurator-builder.js +30 -16
  763. package/dist/legacy/domain-cli/gen/constant-expressions.js +1 -3
  764. package/dist/legacy/domain-cli/gen/defaults.js +1 -7
  765. package/dist/legacy/domain-cli/gen/implementation.js +7 -11
  766. package/dist/legacy/domain-cli/gen/invariants.js +7 -6
  767. package/dist/legacy/domain-cli/gen/relations.js +1 -1
  768. package/dist/legacy/domain-cli/utils/cache.d.ts +1 -1
  769. package/dist/legacy/domain-cli/utils/cache.js +1 -1
  770. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/claude-md.d.ts +1 -1
  771. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/cursor-rules.d.ts +1 -1
  772. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/shared-sdk-content.d.ts +1 -1
  773. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/shared-sdk-content.js +1 -0
  774. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/domain-index.js +17 -15
  775. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/env-example.d.ts +1 -1
  776. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/env-example.js +4 -0
  777. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-admin.js +18 -19
  778. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-configurator.js +15 -16
  779. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-embedded-admin.js +22 -23
  780. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-embedded-configurator.js +15 -16
  781. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/generator-shared.d.ts +7 -2
  782. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/generator-shared.js +8 -12
  783. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/index.d.ts +1 -1
  784. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/index.js +1 -1
  785. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/webhook-builders.js +7 -7
  786. package/dist/phoenix/application-spec/application-spec-builder.js +1 -1
  787. package/dist/phoenix/application-spec/resolve-deployment-data.d.ts +4 -3
  788. package/dist/phoenix/application-spec/resolve-deployment-data.js +2 -2
  789. package/dist/phoenix/cli.js +1 -1
  790. package/dist/phoenix/commands/dev.js +5 -5
  791. package/dist/phoenix/commands/index.d.ts +1 -0
  792. package/dist/phoenix/commands/index.js +1 -1
  793. package/dist/phoenix/commands/init.d.ts +4 -4
  794. package/dist/phoenix/commands/init.js +1 -1
  795. package/dist/phoenix/commands/prepare-deployment-command.js +2 -2
  796. package/dist/phoenix/commands/prepare-local-environment-command.js +1 -1
  797. package/dist/phoenix/commands/prettier.js +1 -1
  798. package/dist/phoenix/commands/story-dev.js +2 -2
  799. package/dist/phoenix/commands/variants.d.ts +35 -0
  800. package/dist/phoenix/commands/variants.js +1 -0
  801. package/dist/phoenix/editor-server/commands-router.d.ts +68 -1
  802. package/dist/phoenix/editor-server/commands-router.js +1 -1
  803. package/dist/phoenix/editor-server/editor-router.d.ts +65 -0
  804. package/dist/phoenix/editor-server/editor-server.d.ts +3 -3
  805. package/dist/phoenix/editor-server/editor-server.js +1 -1
  806. package/dist/phoenix/editor-server/protocol.d.ts +1 -0
  807. package/dist/phoenix/editor-server/spec-router.js +1 -1
  808. package/dist/phoenix/editor-server/trpc.d.ts +3 -0
  809. package/dist/phoenix/scripts/build-admin.js +1 -1
  810. package/dist/phoenix/services/application-spec-project-watcher.d.ts +13 -2
  811. package/dist/phoenix/services/application-spec-project-watcher.js +3 -3
  812. package/dist/phoenix/services/index.d.ts +4 -0
  813. package/dist/phoenix/services/index.js +1 -1
  814. package/dist/phoenix/services/phoenix-application.d.ts +21 -0
  815. package/dist/phoenix/services/phoenix-application.js +1 -0
  816. package/dist/phoenix/services/phoenix-store.d.ts +48 -0
  817. package/dist/phoenix/services/phoenix-store.js +1 -0
  818. package/dist/phoenix/services/phx-variant-previews-plugin.d.ts +9 -0
  819. package/dist/phoenix/services/phx-variant-previews-plugin.js +1 -0
  820. package/dist/phoenix/services/prepare-development-environment.js +1 -1
  821. package/dist/phoenix/services/variant-file-session.d.ts +36 -0
  822. package/dist/phoenix/services/variant-file-session.js +1 -0
  823. package/dist/phoenix/services/variant-preview-service.d.ts +80 -0
  824. package/dist/phoenix/services/variant-preview-service.js +1 -0
  825. package/dist/phoenix/services/vite-config.js +1 -1
  826. package/dist/phoenix/utils/git/index.d.ts +1 -0
  827. package/dist/phoenix/utils/git/index.js +1 -0
  828. package/dist/phoenix/utils/git/is-inside-git-repository.d.ts +6 -0
  829. package/dist/phoenix/utils/git/is-inside-git-repository.js +1 -0
  830. package/dist/phoenix/utils/index.d.ts +1 -0
  831. package/dist/phoenix/utils/index.js +1 -1
  832. package/dist/react-sdk/application-runtime/hooks/use-access-service.d.ts +2 -0
  833. package/dist/react-sdk/application-runtime/hooks/use-domain-application-props.d.ts +5 -2
  834. package/dist/react-sdk/application-runtime/hooks/use-spec.d.ts +1 -1
  835. package/dist/react-sdk/application-runtime/mocks/create-mock-application-runtime.d.ts +1 -1
  836. package/dist/react-sdk/application-runtime/mocks/create-mock-application-runtime.js +1 -1
  837. package/dist/react-sdk/application-runtime/routing/access-service.d.ts +1 -0
  838. package/dist/react-sdk/application-runtime/runtime/create-application-runtime.d.ts +57 -40
  839. package/dist/react-sdk/application-runtime/runtime/create-application-runtime.js +1 -1
  840. package/dist/react-sdk/domain-context/common-hooks/use-domain-context.d.ts +9 -9
  841. package/dist/react-sdk/domain-context/index.d.ts +1 -1
  842. package/dist/react-sdk/domain-context/index.js +1 -1
  843. package/dist/react-sdk/domain-context/system-hooks/navigation-hooks.d.ts +6 -0
  844. package/dist/react-sdk/domain-context/system-hooks/navigation-hooks.js +1 -1
  845. package/dist/ui-sdk/theme/types.d.ts +1 -1
  846. package/dist/webhook/builders/common.d.ts +8 -0
  847. package/dist/webhook/builders/webhook-builder.d.ts +1 -1
  848. package/dist/webhook/builders/webhook-builder.js +1 -1
  849. package/package.json +3 -3
  850. package/dist/application-spec/generate-application/code/templates/env-ci.d.ts +0 -1
  851. package/dist/application-spec/generate-application/code/templates/env-ci.js +0 -25
  852. package/dist/application-spec/generate-application/code/templates/env-example.d.ts +0 -1
  853. package/dist/application-spec/generate-application/code/templates/env-example.js +0 -90
  854. package/dist/application-spec/generate-application/code/templates/prettier-ignore.d.ts +0 -1
  855. package/dist/application-spec/generate-application/code/templates/prettier-ignore.js +0 -6
  856. package/dist/application-spec/generate-application/code/templates/private-assets-readme.d.ts +0 -1
  857. package/dist/application-spec/generate-application/code/templates/private-assets-readme.js +0 -24
  858. package/dist/application-spec/generate-application/code/templates/public-assets-readme.d.ts +0 -1
  859. package/dist/application-spec/generate-application/code/templates/public-assets-readme.js +0 -24
  860. package/dist/application-spec/generate-application/code/templates/readme.d.ts +0 -1
  861. package/dist/application-spec/generate-application/code/templates/readme.js +0 -23
  862. package/dist/application-spec/generate-application/code/templates/skills/agents-md.d.ts +0 -1
  863. package/dist/application-spec/generate-application/code/templates/skills/agents-md.js +0 -2
  864. package/dist/domain/actions/action-factory.d.ts +0 -10
  865. package/dist/domain/actions/prepare-action-implementations.js +0 -5
  866. package/dist/domain/application/element-registration.js +0 -1
  867. package/dist/domain/application/handler-registration.js +0 -1
  868. package/dist/domain/application/resolve-imported-transformers.d.ts +0 -13
  869. package/dist/domain/application/resolve-imported-transformers.js +0 -1
  870. package/dist/domain/application/resource-builder.d.ts +0 -13
  871. package/dist/domain/application/resource-builder.js +0 -1
  872. package/dist/domain/components/debug-state-component.js +0 -1
  873. package/dist/domain/components/domain-component-optic.d.ts +0 -76
  874. package/dist/domain/components/domain-component-optic.js +0 -16
  875. package/dist/domain/components/drag-state-component.js +0 -1
  876. package/dist/domain/components/export-state-component.js +0 -1
  877. package/dist/domain/components/fullscreen-state-component.js +0 -1
  878. package/dist/domain/components/group-components-by-entity-id-and-name.js +0 -1
  879. package/dist/domain/components/hover-state-component.js +0 -1
  880. package/dist/domain/components/index.d.ts +0 -2
  881. package/dist/domain/components/index.js +0 -1
  882. package/dist/domain/components/navigation-state-component.js +0 -1
  883. package/dist/domain/components/selection-state-component.js +0 -1
  884. package/dist/domain/components/system-component-builder.js +0 -1
  885. package/dist/domain/components/system-virtual-entity.js +0 -1
  886. package/dist/domain/components/tool-state-component.js +0 -1
  887. package/dist/domain/components/view-state-component.js +0 -1
  888. package/dist/domain/components/viewport-state-component.js +0 -1
  889. package/dist/domain/core/expression.d.ts +0 -50
  890. package/dist/domain/core/json-schema.js +0 -1
  891. package/dist/domain/core/migrations.js +0 -1
  892. package/dist/domain/core/reflection.js +0 -1
  893. package/dist/domain/domain-context/recipe-system/recipes.d.ts +0 -57
  894. package/dist/domain/domain-context/recipe-system/recipes.js +0 -1
  895. package/dist/domain/expressions/constant-expressions.d.ts +0 -9
  896. package/dist/domain/expressions/constant-expressions.js +0 -1
  897. package/dist/domain/expressions/custom-expression.d.ts +0 -13
  898. package/dist/domain/expressions/custom-expression.js +0 -1
  899. package/dist/domain/expressions/index.d.ts +0 -1
  900. package/dist/domain/expressions/index.js +0 -1
  901. package/dist/domain/invariants/custom-invariants.d.ts +0 -22
  902. package/dist/domain/invariants/custom-invariants.js +0 -1
  903. package/dist/domain/invariants/invariants.d.ts +0 -68
  904. package/dist/domain/invariants/invariants.js +0 -1
  905. package/dist/domain/invariants/violation-component.js +0 -1
  906. package/dist/domain/relations/all-of-type-relation.d.ts +0 -33
  907. package/dist/domain/relations/all-of-type-relation.js +0 -1
  908. package/dist/domain/relations/component-factories.js +0 -1
  909. package/dist/domain/relations/composed-of.js +0 -1
  910. package/dist/domain/relations/direct-relation.d.ts +0 -29
  911. package/dist/domain/relations/indirect-relation.d.ts +0 -81
  912. package/dist/domain/relations/indirect-relation.js +0 -1
  913. package/dist/domain/relations/reference-component.js +0 -1
  914. package/dist/domain/relations/relation-factory.d.ts +0 -19
  915. package/dist/domain/relations/relation-factory.js +0 -1
  916. package/dist/domain/relations/relation-implementation.d.ts +0 -8
  917. package/dist/domain/system-components/angle-indicator.js +0 -1
  918. package/dist/domain/system-components/attribute-switch.js +0 -1
  919. package/dist/domain/system-components/autorotate-camera-component.js +0 -1
  920. package/dist/domain/system-components/basic-sidebar-footer.js +0 -1
  921. package/dist/domain/system-components/camera-based-hidden-entity-object.js +0 -1
  922. package/dist/domain/system-components/camera-based-hidden-entity.js +0 -1
  923. package/dist/domain/system-components/canvas-config.js +0 -1
  924. package/dist/domain/system-components/canvas-custom-environment.js +0 -1
  925. package/dist/domain/system-components/canvas-padding.js +0 -1
  926. package/dist/domain/system-components/canvas-preset-environment.js +0 -1
  927. package/dist/domain/system-components/child-entity-recipe-hierarchy.js +0 -1
  928. package/dist/domain/system-components/client-side-image.js +0 -1
  929. package/dist/domain/system-components/color-value.js +0 -1
  930. package/dist/domain/system-components/common/angle-indicator-schema.js +0 -1
  931. package/dist/domain/system-components/common/dimension-indicator-schema.js +0 -1
  932. package/dist/domain/system-components/custom-price-footer.js +0 -1
  933. package/dist/domain/system-components/dimension-indicator.js +0 -1
  934. package/dist/domain/system-components/editable-angle-indicator.js +0 -1
  935. package/dist/domain/system-components/editable-distance-dimension-indicator.js +0 -1
  936. package/dist/domain/system-components/editable-offset-indicator.js +0 -1
  937. package/dist/domain/system-components/editable-size-indicator.js +0 -1
  938. package/dist/domain/system-components/entity-header.js +0 -1
  939. package/dist/domain/system-components/exit-tool-mode-fab.js +0 -1
  940. package/dist/domain/system-components/finalize-action.js +0 -1
  941. package/dist/domain/system-components/finalize-component.js +0 -1
  942. package/dist/domain/system-components/fit-selection-orthographic-camera-component.js +0 -1
  943. package/dist/domain/system-components/fit-selection-perspective-camera-component.js +0 -1
  944. package/dist/domain/system-components/fixed-header.js +0 -1
  945. package/dist/domain/system-components/floating-header.js +0 -1
  946. package/dist/domain/system-components/hidden-header.js +0 -1
  947. package/dist/domain/system-components/hidden-sidebar-footer.js +0 -1
  948. package/dist/domain/system-components/horizontal-tabs.js +0 -1
  949. package/dist/domain/system-components/list-selector-dimension-indicator.js +0 -1
  950. package/dist/domain/system-components/multilingual-text-value.js +0 -1
  951. package/dist/domain/system-components/navigation-steps.js +0 -1
  952. package/dist/domain/system-components/offset-anchors.js +0 -1
  953. package/dist/domain/system-components/offset-indicator.js +0 -1
  954. package/dist/domain/system-components/offset.js +0 -1
  955. package/dist/domain/system-components/other-action.js +0 -1
  956. package/dist/domain/system-components/property-page.js +0 -1
  957. package/dist/domain/system-components/read-sidebar-footer.js +0 -1
  958. package/dist/domain/system-components/replace-entity-recipe-hierarchy.js +0 -1
  959. package/dist/domain/system-components/rotatable.js +0 -1
  960. package/dist/domain/system-components/rotation-handle.js +0 -1
  961. package/dist/domain/system-components/save-template-thumbnail.js +0 -1
  962. package/dist/domain/system-components/scene-entity-add-fab.js +0 -1
  963. package/dist/domain/system-components/scene-entity-animation.js +0 -1
  964. package/dist/domain/system-components/scene-entity-control.js +0 -1
  965. package/dist/domain/system-components/scene-entity-delete-fab.js +0 -1
  966. package/dist/domain/system-components/scene-entity-floor-object.js +0 -1
  967. package/dist/domain/system-components/scene-entity-html-hotspot.js +0 -1
  968. package/dist/domain/system-components/scene-entity-navigation-hotspot.js +0 -1
  969. package/dist/domain/system-components/scene-entity-object-html-hotspot.js +0 -1
  970. package/dist/domain/system-components/scene-entity-select-hotspot.js +0 -1
  971. package/dist/domain/system-components/scene-entity-wall-object.js +0 -1
  972. package/dist/domain/system-components/selectable-component.js +0 -1
  973. package/dist/domain/system-components/sidebar-tabs.js +0 -1
  974. package/dist/domain/system-components/simple-summary.js +0 -1
  975. package/dist/domain/system-components/size.js +0 -1
  976. package/dist/domain/system-components/sketching-draw.js +0 -1
  977. package/dist/domain/system-components/sketching-edit.js +0 -1
  978. package/dist/domain/system-components/summary-component.js +0 -1
  979. package/dist/domain/system-components/text-value.js +0 -1
  980. package/dist/domain/system-components/tool-controls.js +0 -1
  981. package/dist/domain/system-components/tool-menu-fab.js +0 -1
  982. package/dist/domain/system-components/universal-sidebar-footer.js +0 -1
  983. package/dist/domain/system-components/view-controls.js +0 -1
  984. package/dist/phoenix/application-spec/generate-assistant-prompt.d.ts +0 -12
  985. package/dist/phoenix/application-spec/generate-assistant-prompt.js +0 -1
  986. /package/dist/domain/{components/component-reader-types.js → application/assistant/assistant-manifest.js} +0 -0
  987. /package/dist/domain/{actions → core/action}/action-factory.js +0 -0
  988. /package/dist/domain/core/{action.js → action/action.js} +0 -0
  989. /package/dist/domain/core/{enhanced-json-schema.js → component/component-reader-types.js} +0 -0
  990. /package/dist/domain/{components → core/component}/legacy-filter.js +0 -0
  991. /package/dist/domain/{components → core/component}/system-component-filter.js +0 -0
  992. /package/dist/domain/{components → core/component}/system-virtual-entity.d.ts +0 -0
  993. /package/dist/domain/{components → core/component}/updates.js +0 -0
  994. /package/dist/domain/core/{expression.js → data-schema/data-cell-value.js} +0 -0
  995. /package/dist/domain/core/{schema-validator.js → data-schema/data-schema-array-field.js} +0 -0
  996. /package/dist/domain/{relations/reference-field.js → core/data-schema/data-schema-field-object.js} +0 -0
  997. /package/dist/domain/{relations/relation-implementation.js → core/data-schema/data-schema-field.js} +0 -0
  998. /package/dist/domain/{invariants → core/invariant}/builtin-invariant.js +0 -0
  999. /package/dist/domain/{invariants → core/invariant}/violation-component.d.ts +0 -0
  1000. /package/dist/domain/{invariants → core/invariant}/violation.js +0 -0
  1001. /package/dist/domain/core/{alias.d.ts → model/alias.d.ts} +0 -0
  1002. /package/dist/domain/core/{alias.js → model/alias.js} +0 -0
  1003. /package/dist/domain/core/{common-definitions.d.ts → model/common-definitions.d.ts} +0 -0
  1004. /package/dist/domain/core/{common-definitions.js → model/common-definitions.js} +0 -0
  1005. /package/dist/domain/core/{component.js → model/component.js} +0 -0
  1006. /package/dist/domain/core/{model.d.ts → model/model.d.ts} +0 -0
  1007. /package/dist/domain/core/{model.js → model/model.js} +0 -0
  1008. /package/dist/domain/core/{preset.d.ts → model/preset.d.ts} +0 -0
  1009. /package/dist/domain/core/{preset.js → model/preset.js} +0 -0
  1010. /package/dist/domain/{relations → core/relation}/direct-relation.js +0 -0
  1011. /package/dist/domain/core/{schema-validator-ajv.d.ts → schema/create-ajv-schema-validator.d.ts} +0 -0
  1012. /package/dist/domain/core/{schema-validator-ajv.js → schema/create-ajv-schema-validator.js} +0 -0
  1013. /package/dist/domain/core/{schema-validator-csp.d.ts → schema/create-csp-schema-validator.d.ts} +0 -0
  1014. /package/dist/domain/core/{schema-validator-csp.js → schema/create-csp-schema-validator.js} +0 -0
  1015. /package/dist/domain/core/{enhanced-json-schema.d.ts → schema/enhanced-json-schema.d.ts} +0 -0
  1016. /package/dist/domain/core/{json-schema.d.ts → schema/extended-schema-validator.d.ts} +0 -0
  1017. /package/dist/domain/core/{schema-validator.d.ts → schema/schema-validator.d.ts} +0 -0
  1018. /package/dist/domain/core/{state.js → state/state.js} +0 -0
  1019. /package/dist/domain/{expressions → domain-runtime/spec}/memoize-expression.js +0 -0
  1020. /package/dist/domain/{expressions → domain-runtime/spec}/prepare-domain-expressions.js +0 -0
  1021. /package/dist/domain/{system-components → extensions}/attribute-switch.d.ts +0 -0
  1022. /package/dist/domain/{system-components → extensions}/camera-based-hidden-entity-object.d.ts +0 -0
  1023. /package/dist/domain/{system-components → extensions}/camera-based-hidden-entity.d.ts +0 -0
  1024. /package/dist/domain/{system-components → extensions}/canvas-custom-environment.d.ts +0 -0
  1025. /package/dist/domain/{system-components → extensions}/client-side-image.d.ts +0 -0
  1026. /package/dist/domain/{system-components → extensions}/color-value.d.ts +0 -0
  1027. /package/dist/domain/{system-components → extensions}/common/dimension-indicators.d.ts +0 -0
  1028. /package/dist/domain/{system-components → extensions}/common/dimension-indicators.js +0 -0
  1029. /package/dist/domain/{system-components → extensions}/common/editable-indicator-button-variant.d.ts +0 -0
  1030. /package/dist/domain/{system-components → extensions}/common/editable-indicator-button-variant.js +0 -0
  1031. /package/dist/domain/{system-components → extensions}/custom-price-footer.d.ts +0 -0
  1032. /package/dist/domain/{system-components → extensions}/finalize-component.d.ts +0 -0
  1033. /package/dist/domain/{system-components → extensions}/fit-selection-orthographic-camera-component.d.ts +0 -0
  1034. /package/dist/domain/{system-components → extensions}/fit-selection-perspective-camera-component.d.ts +0 -0
  1035. /package/dist/domain/{system-components → extensions}/multilingual-text-value.d.ts +0 -0
  1036. /package/dist/domain/{system-components → extensions}/navigation-steps.d.ts +0 -0
  1037. /package/dist/domain/{system-components → extensions}/rotatable.d.ts +0 -0
  1038. /package/dist/domain/{system-components → extensions}/rotation-handle.d.ts +0 -0
  1039. /package/dist/domain/{system-components → extensions}/save-template-thumbnail.d.ts +0 -0
  1040. /package/dist/domain/{system-components → extensions}/scene-entity-animation.d.ts +0 -0
  1041. /package/dist/domain/{system-components → extensions}/scene-entity-control.d.ts +0 -0
  1042. /package/dist/domain/{system-components → extensions}/scene-entity-floor-object.d.ts +0 -0
  1043. /package/dist/domain/{system-components → extensions}/scene-entity-wall-object.d.ts +0 -0
  1044. /package/dist/domain/{system-components → extensions}/selectable-component.d.ts +0 -0
  1045. /package/dist/domain/{system-components → extensions}/simple-summary.d.ts +0 -0
  1046. /package/dist/domain/{system-components → extensions}/summary-component.d.ts +0 -0
  1047. /package/dist/domain/{system-components → extensions}/text-value.d.ts +0 -0
  1048. /package/dist/domain/{system-components → extensions}/tool-controls.d.ts +0 -0
  1049. /package/dist/domain/{system-components → extensions}/view-controls.d.ts +0 -0
@@ -0,0 +1,85 @@
1
+ import type { Localizable } from '@salsita-ai/common/utils';
2
+ import { type $DomainEntity, type AssistantManifest, type DomainEntity, type DomainState, type StateEmission } from '#package/domain';
3
+ type AnyDomainEntity = DomainEntity<string>;
4
+ type AnyDomainState = DomainState<AnyDomainEntity>;
5
+ type AnyStateEmission = StateEmission<AnyDomainEntity, Record<string, $DomainEntity<AnyDomainEntity>>>;
6
+ /**
7
+ * What the change record compares besides the entities: the values the `Query` root of the
8
+ * assistant's schema exposes as `selectedEntity` and `navigation`, read off a state.
9
+ */
10
+ export interface ChangeRecorderStateReaders {
11
+ readonly selectedEntityId: (state: AnyDomainState) => string | undefined;
12
+ readonly navigationState: (state: AnyDomainState) => string | undefined;
13
+ readonly viewState: (state: AnyDomainState) => string | undefined;
14
+ readonly toolState: (state: AnyDomainState) => string | undefined;
15
+ }
16
+ /** What a {@link ChangeRecorder} reads from the running configurator. */
17
+ export interface ChangeRecorderContext {
18
+ readonly readers: ChangeRecorderStateReaders;
19
+ /**
20
+ * The field table of the assistant manifest: per entity type of the schema, each exposed field
21
+ * name with the stored field or expression it reads. The record lists nothing the table does not
22
+ * hold, so the agent is shown only what it could also query. Read at every take, because editor
23
+ * hot reload replaces the manifest.
24
+ */
25
+ readonly getExposedFields: () => AssistantManifest['fields'];
26
+ readonly resolveLocalizable: (message: Localizable) => string;
27
+ }
28
+ export interface ChangeRecorderProps {
29
+ /** More differing entities than this are counted and not listed. */
30
+ readonly maxEntities: number;
31
+ }
32
+ /**
33
+ * Records what changed in the committed configuration since the assistant agent last acted, and
34
+ * prints it as the change record a user message carries to the agent.
35
+ *
36
+ * The record is a net diff: the committed state at the last take or clear is kept as the baseline
37
+ * and compared with the current one, so a value that was changed and changed back is not listed.
38
+ * Of the emissions in between, only the last update that touched each entity and each entity field
39
+ * is kept, to say why a line is there. Selection and navigation are read off the two states and
40
+ * never from their updates.
41
+ *
42
+ * Only what the assistant manifest exposes is listed: entities of the types its schema has, and of
43
+ * their stored fields the exposed ones, under their exposed names and localized like the schema
44
+ * returns them. A change of anything else is not in the record.
45
+ */
46
+ export declare class ChangeRecorder {
47
+ private readonly _props;
48
+ private readonly _context;
49
+ private _baseline;
50
+ /** True from a reset until the first take: what happened before the baseline is not known. */
51
+ private _isUnavailable;
52
+ private readonly _touches;
53
+ private _lastReset;
54
+ private _wasUndoneOrRedone;
55
+ constructor(_props: ChangeRecorderProps, _context: ChangeRecorderContext);
56
+ /** Starts over from this committed state; the next take reports `unavailable`. */
57
+ reset: (state: AnyDomainState) => void;
58
+ /** Records one committed emission: the last update that touched each entity and field, or the reset. */
59
+ record: (emission: AnyStateEmission) => void;
60
+ /** The change record since the last take or clear, as the prompt describes it; moves the baseline. */
61
+ take: (state: AnyDomainState) => string;
62
+ /** Forgets what was recorded and makes this committed state the baseline. */
63
+ clear: (state: AnyDomainState) => void;
64
+ private _touchesOf;
65
+ private _touchFields;
66
+ private _print;
67
+ private _diffStates;
68
+ /** Added and modified entities in the order of the current state, then the deleted ones in the order they had. */
69
+ private _diffEntities;
70
+ /**
71
+ * The lines of the exposed stored fields that differ, in manifest order. A field no update
72
+ * touched since its entity was created or replaced under an id that existed before is explained
73
+ * by that creation.
74
+ */
75
+ private _diffFields;
76
+ /** Why a line is in the record; a line no recorded update explains was left by a reset. */
77
+ private _comment;
78
+ /**
79
+ * What the agent is told about an update, else what the user was told, else the update tag. As
80
+ * for `sideEffects`, an `agentHint` replaces the `hint` whatever it holds: `null` or empty text
81
+ * hides the wording from the agent, not the change, so the tag stands in.
82
+ */
83
+ private _explain;
84
+ }
85
+ export {};
@@ -0,0 +1 @@
1
+ import{match as e}from"ts-pattern";import{isUndoRedoReset as t}from"#package/domain";import{localize as i}from"../graphql-system/graphql-system.js";let s=[["selected","selectedEntityId"],["navigationState","navigationState"],["viewState","viewState"],["toolState","toolState"]],n=e=>e.length>80?`${e.slice(0,80)}…`:e,a=e=>void 0===e||""===e?"none":e,r=e=>new Map(Object.entries(e)),l=["id","type"];export class ChangeRecorder{_props;_context;_baseline;_isUnavailable=!0;_touches=new Map;_lastReset;_wasUndoneOrRedone=!1;constructor(e,t){this._props=e,this._context=t}reset=e=>{this.clear(e),this._isUnavailable=!0};record=i=>{if("reset"===i.kind){this._touches.clear(),this._lastReset=t(i)?"undo/redo":"reset",this._wasUndoneOrRedone||="undo/redo"===this._lastReset;return}for(let t of i.updates)e(t).with({kind:"createDomainEntity"},e=>{this._touchesOf(e.entityId).created=e}).with({kind:"deleteEntity"},e=>{let t=this._touchesOf(e.entityId);t.fields.clear(),t.deleted=e}).with({kind:"modifyDomainEntity"},e=>{this._touchFields(e.entityId,Object.keys(e.stateDelta),e)}).with({kind:"replaceDomainEntity"},e=>{let{replacementEntity:t}=e;this._touchesOf(e.entityId).fields.clear(),this._touchesOf(e.entityId).deleted=e,this._touchesOf(t.id).created=e}).with({kind:"createEphemeralRecord"},{kind:"modifyEphemeralRecord"},{kind:"deleteEphemeralRecord"},()=>{}).exhaustive()};take=e=>{let t=this._print(e);return this.clear(e),this._isUnavailable=!1,t};clear=e=>{this._baseline=e,this._touches.clear(),this._lastReset=void 0,this._wasUndoneOrRedone=!1};_touchesOf=e=>{let t=this._touches.get(e);if(t)return t;let i={created:void 0,deleted:void 0,fields:new Map};return this._touches.set(e,i),i};_touchFields=(e,t,i)=>{let s=this._touchesOf(e);for(let e of t)s.fields.set(e,i)};_print=e=>{let t=this._baseline;if(this._isUnavailable||!t)return"[changes: unavailable]";let{lines:i,count:s}=this._diffEntities(t,e);if(s>this._props.maxEntities)return`[changes: too many (${s})]`;let n=[...this._diffStates(t,e),...i];return 0===n.length?"[changes: none]":["[changes]",...this._wasUndoneOrRedone?["reset: undo/redo"]:[],...n].join("\n")};_diffStates=(e,t)=>s.flatMap(([i,s])=>{let n=a(this._context.readers[s](e)),r=a(this._context.readers[s](t));return n===r?[]:[`${i}: ${n} -> ${r}`]});_diffEntities=(e,t)=>{let i=this._context.getExposedFields(),s=new Map(e.entities.map(e=>[e.id,e])),n=new Set(t.entities.map(e=>e.id)),a=t.entities.flatMap(e=>{let t=i[e.type],n=s.get(e.id);if(!t)return[];if(!n)return[[`A ${e.id}${this._comment(this._touches.get(e.id)?.created)}`]];let a=n===e?[]:this._diffFields(n,e,t);return a.length>0?[[`M ${e.id}`,...a]]:[]}),r=e.entities.filter(e=>i[e.type]&&!n.has(e.id)).map(e=>[`D ${e.id}${this._comment(this._touches.get(e.id)?.deleted)}`]);return{lines:[...a,...r].flat(),count:a.length+r.length}};_diffFields=(e,t,s)=>{let a=r(e),d=r(t),o=this._touches.get(t.id);return Object.entries(s).flatMap(([e,{source:t,localized:s}])=>{if(!(!t.startsWith("$")&&!l.includes(t)))return[];let r=e=>{let t;return void 0===(t=s?i(e,this._context.resolveLocalizable):e)?"undefined":JSON.stringify(t)},h=r(a.get(t)),c=r(d.get(t));return h===c?[]:[` ${e}: ${n(h)} -> ${n(c)}${this._comment(o?.fields.get(t)??o?.created)}`]})};_comment=e=>e?` # ${this._explain(e).replace(/\s*\n\s*/g," ")}`:this._lastReset?` # ${this._lastReset}`:"";_explain=({agentHint:e,hint:t,updateTag:i})=>void 0!==e?null===e||""===e?i:e:t?this._context.resolveLocalizable(t):i}
@@ -18,6 +18,8 @@ export interface AssistantToolDependencies {
18
18
  };
19
19
  };
20
20
  readonly getActiveMode: () => DomainMode;
21
+ /** Forgets the changes recorded for the next change record, so it never lists what the agent itself changed. */
22
+ readonly clearChanges: () => void;
21
23
  }
22
24
  /**
23
25
  * Browser implementation of the assistant's `query` tool: prepares the operations from the
@@ -89,7 +91,9 @@ export declare const createQueryClientTool: (dependencies: AssistantToolDependen
89
91
  /**
90
92
  * Browser implementation of the assistant's `apply` tool: hands the operations to
91
93
  * `GraphQLSystem.execute`, which commits their changes as one undo step, and returns its result,
92
- * including why nothing was committed when a commit was held or lost to a conflict. Only an owner
94
+ * including why nothing was committed when a commit was held or lost to a conflict. A commit clears
95
+ * the recorded changes; a held one does not, so it shows in the next change record once the user
96
+ * approves it. Only an owner
93
97
  * session may change the configuration; the check lives here and not in the `GraphQLSystem`, whose
94
98
  * other caller, the editor panel, has its own rules.
95
99
  */
@@ -1 +1 @@
1
- import{AssistantGraphQLToolInput as e,applyTool as t,queryTool as o}from"@salsita-ai/contracts/assistant";let a=e=>({results:[],committed:!1,message:e,sideEffects:[]}),i=e=>JSON.parse(JSON.stringify(e)),s=t=>{let o=e.safeParse(t);if(!o.success){let e=o.error.issues.map(e=>`${e.path.join(".")}: ${e.message}`).join("; ");return{ok:!1,refusal:a(`Nothing was run, because the tool input is not a list of operations (${e}). Send { "operations": [{ "query": "<one GraphQL operation>" }] } with at least one item.`)}}return{ok:!0,operations:o.data.operations.map(({query:e,variables:t,operationName:o})=>({document:e,variables:t??void 0,operationName:o??void 0}))}};export const createQueryClientTool=e=>o.client(async t=>{let o=s(t);if(!o.ok)return o.refusal;let n=e.getStoreSystem();if(!n.isInitialized)return a("Nothing was run, because the configuration is not loaded yet, so there is no state to query. Call the tool again once the configurator has finished loading.");let r=e.getGraphQLSystem(),l=await r.prepare(n.stateSlices.committed.value.state,o.operations);return i({results:l.map(({result:e})=>e),committed:!1,sideEffects:r.readSideEffects(l)})});export const createApplyClientTool=e=>t.client(async t=>{if("owner"!==e.getActiveMode())return a("Nothing was run, because changes cannot be applied in this session: the user may view this configuration but not change it. The query tool still works here, including mutations, to show what a change would do without keeping it.");let o=s(t);return o.ok?i(await e.getGraphQLSystem().execute(o.operations)):o.refusal});
1
+ import{AssistantGraphQLToolInput as e,applyTool as t,queryTool as o}from"@salsita-ai/contracts/assistant";let a=e=>({results:[],committed:!1,message:e,sideEffects:[]}),i=e=>JSON.parse(JSON.stringify(e)),s=t=>{let o=e.safeParse(t);if(!o.success){let e=o.error.issues.map(e=>`${e.path.join(".")}: ${e.message}`).join("; ");return{ok:!1,refusal:a(`Nothing was run, because the tool input is not a list of operations (${e}). Send { "operations": [{ "query": "<one GraphQL operation>" }] } with at least one item.`)}}return{ok:!0,operations:o.data.operations.map(({query:e,variables:t,operationName:o})=>({document:e,variables:t??void 0,operationName:o??void 0}))}};export const createQueryClientTool=e=>o.client(async t=>{let o=s(t);if(!o.ok)return o.refusal;let n=e.getStoreSystem();if(!n.isInitialized)return a("Nothing was run, because the configuration is not loaded yet, so there is no state to query. Call the tool again once the configurator has finished loading.");let r=e.getGraphQLSystem(),l=await r.prepare(n.stateSlices.committed.value.state,o.operations);return i({results:l.map(({result:e})=>e),committed:!1,sideEffects:r.readSideEffects(l)})});export const createApplyClientTool=e=>t.client(async t=>{if("owner"!==e.getActiveMode())return a("Nothing was run, because changes cannot be applied in this session: the user may view this configuration but not change it. The query tool still works here, including mutations, to show what a change would do without keeping it.");let o=s(t);if(!o.ok)return o.refusal;let n=await e.getGraphQLSystem().execute(o.operations);return n.committed&&e.clearChanges(),i(n)});
@@ -1 +1 @@
1
- import{findAssistantFieldOptions as e,findAssistantRecipeGroups as t,modifyEntityUpdateTag as i,prepareAssistantRecipeUpdates as r,readAssistantFieldOptions as n,readAssistantRecipeGroup as s,systemUpdateFactory as a}from"#package/domain";import{readSideEffects as o}from"./side-effects.js";let d=e=>({ok:!1,root:null,changedEntities:[],deletedEntityIds:[],sideEffects:[],errors:e}),l=(e,{state:t},{recipes:i,prepareStateEmission:r,find$Entity:n})=>{let{validity:s,state:a,updates:l}=r(e,t,"committed");if(s.valid){let e=new Map(t.entities.map(e=>[e.id,e])),r=new Set(a.entities.map(e=>e.id));return{ok:!0,root:n(a.rootEntityId,a),changedEntities:a.entities.filter(t=>e.get(t.id)!==t).flatMap(e=>n(e.id,a)??[]),deletedEntityIds:t.entities.map(e=>e.id).filter(e=>!r.has(e)),sideEffects:o(l,i.resolveLocalizable),errors:[]}}return d("uncaught"===s.severity?[{type:"uncaught",entityId:null,message:s.error.message}]:s.entityViolations.filter(({violation:e})=>e.severity===s.severity).map(({entityId:e,violation:t})=>({type:t.type,entityId:e,message:void 0===t.message?null:i.resolveLocalizable(t.message)})))};export const createEntityMeta=(o,c)=>{let p=e=>()=>t(c.manifest,e,o.entity.type).flatMap(t=>{let i=s(e,t,o.entity.id,o.state,c.recipes);return i?[((e,t,i)=>{let{group:n,label:s,description:a,recipes:o}=e,{resolveLocalizable:c}=i.recipes;return{groupId:n.groupId,name:void 0===s?n.instanceName:c(s),description:n.description??(void 0===a?null:c(a)),recipes:o.map(n=>((e,t,i,n)=>{let{key:s,item:a}=e,{resolveLocalizable:o}=n.recipes;return{key:s,name:o(a.title),description:void 0===a.description?null:o(a.description),imageUrl:void 0===a.thumbnailUrl?null:o(a.thumbnailUrl),dryRun:()=>t.group.dryRuns?((e,t,i,n)=>{let{updates:s,error:a}=((e,t,{entity:i,state:n},{recipes:s})=>{try{return{updates:r(e,t,i.id,n,s),error:void 0}}catch(e){if("child"===t.target.kind)throw e;return{updates:void 0,error:e instanceof Error?e.message:String(e)}}})(e,t,i,n);return void 0===s?d([{type:"uncaught",entityId:null,message:a}]):l(s,i,n)})(e,t,i,n):null}})(n,e,t,i))}})(i,o,c)]:[]});return{...Object.fromEntries(e(c.manifest,o.entity.type).map(e=>[e.edgeName,()=>n(e,o.entity.id,o.state,c.recipes)?.map(t=>({...t,dryRun:()=>e.dryRuns?(({field:e},{value:t},r,n)=>{let{entity:s}=r,o=Object.entries(Object.entries(n.manifest.writableFields??{}).find(([e])=>e===s.type)?.[1]??{}).find(([t])=>t===e)?.[1];if(void 0===o)throw Error(`The options of "${e}" on "${s.id}" cannot be dry-run: the schema lists them, but the configurator has no writable field "${e}" on ${s.type}. Regenerate the application so the schema matches the configurator.`);let c=r.state.entities.find(e=>e.id===s.id),p={[o]:t},u=c?n.validateEntity({...c,...p}):{success:!0};return u.success?l([a.DomainEntityModification({entityId:s.id,stateDelta:p,updateTag:i})],r,n):d([{type:"uncaught",entityId:s.id,message:`Writing ${JSON.stringify(t)} to "${e}" would make "${s.id}" an invalid ${s.type}: ${u.errors.join("; ")}.${e===o?"":` The message names the stored property: ${e} is stored as ${o}.`} The option comes from the configurator and cannot be corrected from here, so do not write it.`}])})(e,t,o,c):null}))??null])),childRecipes:p("child"),replaceRecipes:p("replace")}};
1
+ import{findAssistantFieldOptions as e,findAssistantRecipeGroups as t,modifyEntityUpdateTag as i,prepareAssistantRecipeUpdates as r,readAssistantFieldOptions as n,readAssistantRecipeGroup as o,systemUpdateFactory as s}from"#package/domain";import{readSideEffects as a}from"./side-effects.js";let d=e=>({ok:!1,root:null,changedEntities:[],deletedEntityIds:[],sideEffects:[],errors:e}),l=(e,{state:t},{recipes:i,prepareStateEmission:r,find$Entity:n})=>{let{validity:o,state:s,updates:l}=r(e,t,"committed");if(o.valid){let e=new Map(t.entities.map(e=>[e.id,e])),r=new Set(s.entities.map(e=>e.id));return{ok:!0,root:n(s.rootEntityId,s),changedEntities:s.entities.filter(t=>e.get(t.id)!==t).flatMap(e=>n(e.id,s)??[]),deletedEntityIds:t.entities.map(e=>e.id).filter(e=>!r.has(e)),sideEffects:a(l,i.resolveLocalizable),errors:[]}}return d("uncaught"===o.severity?[{type:"uncaught",entityId:null,message:o.error.message}]:o.entityViolations.filter(({violation:e})=>e.severity===o.severity).map(({entityId:e,violation:t})=>({type:t.type,entityId:e,message:void 0===t.message?null:i.resolveLocalizable(t.message)})))};export const createEntityMeta=(a,u)=>{let c=e=>()=>t(u.manifest,e,a.entity.type).flatMap(t=>{let i=o(e,t,a.entity.id,a.state,u.recipes);return i?[((e,t,i)=>{let{group:n,label:o,description:s,recipes:a}=e,{resolveLocalizable:u}=i.recipes;return{groupId:n.groupId,name:void 0===o?n.instanceName:u(o),description:n.description??(void 0===s?null:u(s)),recipes:a.map(n=>((e,t,i,n)=>{let{key:o,item:s}=e,{resolveLocalizable:a}=n.recipes;return{key:o,name:a(s.title),description:void 0===s.description?null:a(s.description),imageUrl:void 0===s.thumbnailUrl?null:a(s.thumbnailUrl),dryRun:()=>t.group.dryRuns?((e,t,i,n)=>{let{updates:o,error:s}=((e,t,{entity:i,state:n},{recipes:o})=>{try{return{updates:r(e,t,i.id,n,o),error:void 0}}catch(e){if("child"===t.target.kind)throw e;return{updates:void 0,error:e instanceof Error?e.message:String(e)}}})(e,t,i,n);return void 0===o?d([{type:"uncaught",entityId:null,message:s}]):l(o,i,n)})(e,t,i,n):null}})(n,e,t,i))}})(i,a,u)]:[]});return{...Object.fromEntries(e(u.manifest,a.entity.type).map(e=>[e.edgeName,()=>n(e,a.entity.id,a.state,u.recipes)?.map(t=>({...t,dryRun:()=>e.dryRuns?(({field:e},{value:t},r,n)=>{let{entity:o}=r,a=Object.entries(Object.entries(n.manifest.writableFields??{}).find(([e])=>e===o.type)?.[1]??{}).find(([t])=>t===e)?.[1];if(void 0===a)throw Error(`The options of "${e}" on "${o.id}" cannot be dry-run: the schema lists them, but the configurator has no writable field "${e}" on ${o.type}. This is a fault in the configurator, not in your request. Tell the user this is not available.`);let u=r.state.entities.find(e=>e.id===o.id);if(!u)throw Error(`The options of "${e}" on "${o.id}" cannot be dry-run: entity "${o.id}" does not exist. It may have been deleted by an earlier operation or field. Query the current entities and use an id they return.`);let c={[a]:t},p=n.validateEntity({...u,...c});return p.success?l([s.DomainEntityModification({entityId:o.id,stateDelta:c,updateTag:i})],r,n):d([{type:"uncaught",entityId:o.id,message:`Writing ${JSON.stringify(t)} to "${e}" would make "${o.id}" an invalid ${o.type}: ${p.errors.join("; ")}. The option comes from the configurator and cannot be corrected from here, so do not write it.`}])})(e,t,a,u):null}))??null])),childRecipes:c("child"),replaceRecipes:c("replace")}};
@@ -1,5 +1,6 @@
1
1
  import { type ExecutionResult } from 'graphql';
2
- import { type $DomainEntity, type DomainContextSelectors, type DomainEntity, type DomainServicesSelectors, type DomainState, type SpecSelectors, type StateUpdateEmission } from '#package/domain';
2
+ import { type Localizable } from '@salsita-ai/common/utils';
3
+ import { type $DomainEntity, type DomainContextSelectors, type DomainEntity, type DomainServicesSelectors, type DomainState, type SessionAssistantSetup, type SpecSelectors, type StateUpdateEmission } from '#package/domain';
3
4
  /** One single-operation GraphQL document with its own variables, as executed by {@link GraphQLSystem}. */
4
5
  export interface GraphQLOperation {
5
6
  readonly document: string;
@@ -7,6 +8,8 @@ export interface GraphQLOperation {
7
8
  readonly operationName?: string;
8
9
  }
9
10
  export interface GraphQLSystemContext {
11
+ /** The assistant the initialized session runs: the operations are validated and executed against its schema. */
12
+ readonly getAssistantSetup: () => SessionAssistantSetup;
10
13
  readonly specSelectors: SpecSelectors;
11
14
  readonly domainContextSelectors: DomainContextSelectors;
12
15
  readonly domainServicesSelectors: DomainServicesSelectors;
@@ -37,6 +40,11 @@ export interface GraphQLExecution {
37
40
  /** What the configurator did, or would do, beyond what the operations asked for, in applied order. */
38
41
  readonly sideEffects: readonly string[];
39
42
  }
43
+ /**
44
+ * Resolves a localizable value, or each item of a list of them, to a string in the current locale.
45
+ * `null` and values that are not localizable pass through, so the schema's nullability decides.
46
+ */
47
+ export declare const localize: (value: unknown, resolveLocalizable: (message: Localizable) => string) => unknown;
40
48
  /**
41
49
  * Executes GraphQL operations against the schema generated from the application spec `assistant`
42
50
  * manifest, resolving it against the committed domain state. Agent-independent: the assistant's
@@ -1 +1 @@
1
- import{GraphQLError as e,buildSchema as t,defaultFieldResolver as i,getNamedType as o,graphql as a,validateSchema as n}from"graphql";import{assertExistence as r,createSelector as s,isMessageDescriptor as l,isMultilingualString as c}from"@salsita-ai/common/utils";import{DomainEntityIdSchema as h,findAssistantMutation as d}from"#package/domain";import{createEntityMeta as m}from"./entity-meta.js";import{readSideEffects as p}from"./side-effects.js";let f={errors:[new e('No assistant manifest in the application spec. The GraphQL schema is generated from the "assistant" section. Add an "assistant" section to a spec file to expose a schema.')]},u={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.")]},y=new RegExp(h.pattern),g=e=>"object"==typeof e&&null!==e&&"type"in e&&"string"==typeof e.type&&"id"in e&&"string"==typeof e.id,v=(e,t)=>"object"==typeof e&&null!==e?Reflect.get(e,t):void 0,S=e=>e instanceof Error?e.message:String(e),_=e=>/[.!?]$/.test(e)?e:`${e}.`,x=e=>"object"==typeof e&&null!==e&&Object.getPrototypeOf(e)===Object.prototype,w=(e,t)=>{let i=x(e)?e._raw:void 0;if(g(i))return i;if(!Array.isArray(e)&&!x(e))return e;if(t.has(e))throw Error("The value contains itself. Return ids or copies of the values instead of objects that reference each other.");let o=new Set([...t,e]);return Array.isArray(e)?e.map(e=>w(e,o)):Object.fromEntries(Object.entries(e).map(([e,t])=>[e,w(t,o)]))},E=(e,t)=>Array.isArray(e)?e.map(e=>E(e,t)):"string"==typeof e||l(e)||c(e)?t(e):e,$=t=>new e(`The GraphQL schema generated from the "assistant" manifest is invalid: ${_(t)} Regenerate the application so the schema is rebuilt from the current spec.`),b=e=>(e.errors?.length??0)>0,C=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=s([s.leaf(e=>e)],e=>{try{let i=t(e),o=n(i);return o.length>0?$(o.map(e=>e.message).join(" ")):i}catch(e){return $(S(e))}});_selectFieldResolver=s([s.leaf(e=>e)],t=>(a,n,r,s)=>{if(s.parentType===s.schema.getQueryType())return i(a,n,r,s);if(s.parentType===s.schema.getMutationType())return this._resolveMutation(s.fieldName,String(s.path.key),n,r);if(!g(a))return i(a,n,r,s);if("meta"===s.fieldName){let e;return m({entity:a,state:("object"==typeof(e=v(a,"_state"))&&null!==e&&"entities"in e&&"rootEntityId"in e?e:void 0)??r.state},{manifest:r.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},h=((t,i)=>{try{return v(t,i)}catch(o){throw new e(`Expression "${i}" failed on ${g(t)?t.id:"an entity"}: ${_(S(o))} The expression threw while the query read it; fix the expression or the configuration state it reads.`,{originalError:o instanceof Error?o:void 0})}})(a,l);return c?E(h,this._context.domainServicesSelectors.getResolveLocalizable()):l.startsWith("$")&&"JSON"===o(s.returnType).name?((t,i,o)=>{try{return w(o,new Set)}catch(o){throw new e(`Expression "${i}" returned a value that is not plain serializable data on ${g(t)?t.id:"an entity"}: ${_(S(o))} A JSON field can only return data that serializes to JSON.`,{originalError:o instanceof Error?o:void 0})}})(a,l,h):h});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 a=t.filter(e=>!y.test(e));if(a.length>0)throw new e(`${a.map(e=>`"${e}"`).join(", ")} ${1===a.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=>y.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=>g(e)?e.type:void 0;initialize=()=>{};_resolveMutation=(t,i,o,a)=>{if(void 0!==a.failedMutationField)throw new e(`Not run: the earlier field "${a.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,a)}catch(e){throw a.failedMutationField=i,e}};_runMutation=(t,i,o)=>{let a=d(t,o.manifest);if(!a)throw new e(`The schema declares the mutation "${t}", but the configurator has no implementation for it. Regenerate the application so the schema matches the configurator.`);let n=o.state,r=a.implementation(i,n,{manifest:o.manifest,action:this._context.domainContextSelectors.getActionSystem().createContext(n),resolveLocalizable:this._context.domainServicesSelectors.getResolveLocalizable()});if(r.updates.length>0){let i=this._context.domainContextSelectors.getStoreSystem().prepareStateEmission(r.updates,n,"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: ${_(S(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 r.readResult({previousState:n,state:o.state})};_setup=()=>{let t=this._context.specSelectors.getAssistant();if(!t)return{ready:!1,result:f};let i=this._selectSchema(t.sdl);return i instanceof e?{ready:!1,result:{errors:[i]}}:{ready:!0,assistant:t,schema:i,fieldResolver:this._selectFieldResolver(t.fields)}};prepare=async(e,t)=>{let i,o=this._setup();if(!o.ready)return t.map(()=>({result:o.result,emissions:[]}));let n={manifest:o.assistant,state:e,emissions:[],failedMutationField:void 0},r=[];for(let[e,s]of t.entries())if(void 0===i){let t=n.emissions.length;n.failedMutationField=void 0;let l=await a({schema:o.schema,source:s.document,rootValue:this._rootValue,contextValue:n,variableValues:s.variables,operationName:s.operationName,fieldResolver:o.fieldResolver,typeResolver:this._resolveType});r.push({result:l,emissions:n.emissions.slice(t)}),b(l)&&(i=e)}else r.push({result:C(i),emissions:[]});return r};readSideEffects=e=>{let t=this._context.domainServicesSelectors.getResolveLocalizable();return e.flatMap(({emissions:e})=>e.flatMap(e=>p(e.updates,t)))};_prepareAndCommit=async e=>{let t,i,o,a=this._context.domainContextSelectors.getStoreSystem(),n=await this.prepare(a.stateSlices.committed.value.state,e),s=n.map(({result:e})=>e),l=this.readSideEffects(n),c=n.flatMap(e=>e.emissions);return s.some(b)||0===c.length?{results:s,sideEffects:l,outcome:"none"}:{results:s,sideEffects:l,outcome:a.commitPrepared((t=r(c[0]),i=r(c[c.length-1]),o=c.some(e=>void 0!==e.transformationLog),{kind:"committed",previousState:t.previousState,state:i.state,updates:c.flatMap(e=>e.updates),validity:i.validity,transformationLog:o?c.flatMap(e=>e.transformationLog??[]):void 0}))}};execute=async e=>{if(!this._context.domainContextSelectors.getStoreSystem().isInitialized)return{results:e.map(()=>u),committed:!1,sideEffects:[]};let t=await this._prepareAndCommit(e),{results:i,sideEffects:o,outcome:a}="conflict"===t.outcome?await this._prepareAndCommit(e):t;return"committed"===a?{results:i,committed:!0,sideEffects:o}:"held"===a?{results:i,committed:!1,message:"The changes were not committed yet: the application held them, usually to ask the user for approval. They may still be applied once the user approves, and the next turn shows whether they were. Do not send the operations again.",sideEffects:o}:"conflict"===a?{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,buildSchema as t,defaultFieldResolver as i,getNamedType as o,graphql as n,validateSchema as a}from"graphql";import{assertExistence as r,createSelector as s,isMessageDescriptor as l,isMultilingualString as c}from"@salsita-ai/common/utils";import{DomainEntityIdSchema as d,findAssistantMutation as h}from"#package/domain";import{createEntityMeta as u}from"./entity-meta.js";import{readSideEffects as m}from"./side-effects.js";let f={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.")]},p={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.")]},g=new RegExp(d.pattern),y=e=>"object"==typeof e&&null!==e&&"type"in e&&"string"==typeof e.type&&"id"in e&&"string"==typeof e.id,v=(e,t)=>"object"==typeof e&&null!==e?Reflect.get(e,t):void 0,S=e=>e instanceof Error?e.message:String(e),_=e=>/[.!?]$/.test(e)?e:`${e}.`,x=e=>"object"==typeof e&&null!==e&&Object.getPrototypeOf(e)===Object.prototype,w=(e,t)=>{let i=x(e)?e._raw:void 0;if(y(i))return i;if(!Array.isArray(e)&&!x(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=>w(e,o)):Object.fromEntries(Object.entries(e).map(([e,t])=>[e,w(t,o)]))};export const localize=(e,t)=>Array.isArray(e)?e.map(e=>localize(e,t)):"string"==typeof e||l(e)||c(e)?t(e):e;let E=t=>new e(`The configurator cannot handle this request: ${_(t)} This is a fault in the configurator, not in your request. Tell the user this is not available.`),$=e=>(e.errors?.length??0)>0,b=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=s([s.leaf(e=>e)],e=>{try{let i=t(e),o=a(i);return o.length>0?E(o.map(e=>e.message).join(" ")):i}catch(e){return E(S(e))}});_selectFieldResolver=s([s.leaf(e=>e)],t=>(n,a,r,s)=>{if(s.parentType===s.schema.getQueryType())return i(n,a,r,s);if(s.parentType===s.schema.getMutationType())return this._resolveMutation(s.fieldName,String(s.path.key),a,r);if(!y(n))return i(n,a,r,s);if("meta"===s.fieldName){let e;return u({entity:n,state:("object"==typeof(e=v(n,"_state"))&&null!==e&&"entities"in e&&"rootEntityId"in e?e:void 0)??r.state},{manifest:r.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 v(t,i)}catch(o){throw new e(`Expression "${i}" failed on ${y(t)?t.id:"an entity"}: ${_(S(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})}})(n,l);return c?localize(d,this._context.domainServicesSelectors.getResolveLocalizable()):l.startsWith("$")&&"JSON"===o(s.returnType).name?((t,i,o)=>{try{return w(o,new Set)}catch(o){throw new e(`Expression "${i}" returned a value that is not plain serializable data on ${y(t)?t.id:"an entity"}: ${_(S(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})}})(n,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=>!g.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=>g.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=>y(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=h(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 a=o.state,r=n.implementation(i,a,{manifest:o.manifest,action:this._context.domainContextSelectors.getActionSystem().createContext(a),resolveLocalizable:this._context.domainServicesSelectors.getResolveLocalizable()});if(r.updates.length>0){let i=this._context.domainContextSelectors.getStoreSystem().prepareStateEmission(r.updates,a,"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: ${_(S(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 r.readResult({previousState:a,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:f};let o=this._selectSchema(t.sdl);return o instanceof e?{ready:!1,result:{errors:[o]}}:{ready:!0,assistant:t,schema:o,fieldResolver:this._selectFieldResolver(t.fields)}};prepare=async(e,t)=>{let i,o=this._setup();if(!o.ready)return t.map(()=>({result:o.result,emissions:[]}));let a={manifest:o.assistant,state:e,emissions:[],failedMutationField:void 0},r=[];for(let[e,s]of t.entries())if(void 0===i){let t=a.emissions.length;a.failedMutationField=void 0;let l=await n({schema:o.schema,source:s.document,rootValue:this._rootValue,contextValue:a,variableValues:s.variables,operationName:s.operationName,fieldResolver:o.fieldResolver,typeResolver:this._resolveType});r.push({result:l,emissions:a.emissions.slice(t)}),$(l)&&(i=e)}else r.push({result:b(i),emissions:[]});return r};readSideEffects=e=>{let t=this._context.domainServicesSelectors.getResolveLocalizable();return e.flatMap(({emissions:e})=>e.flatMap(e=>m(e.updates,t)))};_prepareAndCommit=async e=>{let t,i,o,n=this._context.domainContextSelectors.getStoreSystem(),a=await this.prepare(n.stateSlices.committed.value.state,e),s=a.map(({result:e})=>e),l=this.readSideEffects(a),c=a.flatMap(e=>e.emissions);return s.some($)||0===c.length?{results:s,sideEffects:l,outcome:"none"}:{results:s,sideEffects:l,outcome:n.commitPrepared((t=r(c[0]),i=r(c[c.length-1]),o=c.some(e=>void 0!==e.transformationLog),{kind:"committed",previousState:t.previousState,state:i.state,updates:c.flatMap(e=>e.updates),validity:i.validity,transformationLog:o?c.flatMap(e=>e.transformationLog??[]):void 0}))}};execute=async e=>{if(!this._context.domainContextSelectors.getStoreSystem().isInitialized)return{results:e.map(()=>p),committed:!1,sideEffects:[]};let t=await this._prepareAndCommit(e),{results:i,sideEffects:o,outcome:n}="conflict"===t.outcome?await this._prepareAndCommit(e):t;return"committed"===n?{results:i,committed:!0,sideEffects:o}:"held"===n?{results:i,committed:!1,message:"The changes wait for the user's approval and are not applied yet. Do not send them again; the next `[changes]` block lists them once approved.",sideEffects:o}:"conflict"===n?{results:i,committed:!1,message:"The changes were not committed, because the configuration changed while they were being applied. The results describe a state that was discarded. Query the current configuration and send the operations again if they still make sense.",sideEffects:o}:{results:i,committed:!1,sideEffects:o}}}
@@ -1,5 +1,5 @@
1
1
  export { AnimationSystem, type AnimationSystemContext } from './animation-system.js';
2
- export { type AssistantChatSnapshot, type AssistantClientTool, type AssistantPanelSnapshot, AssistantSystem, type AssistantSystemContext, } from './assistant-system/assistant-system.js';
2
+ export { type AssistantChatSnapshot, type AssistantEarlierThreadSnapshot, type AssistantClientTool, type AssistantPanelSnapshot, AssistantSystem, type AssistantSystemContext, } from './assistant-system/assistant-system.js';
3
3
  export { CameraControlSystem, CameraControlType } from './camera-control-system/camera-control-system.js';
4
4
  export { type AnyCameraSystem, CameraSystem, type CameraSystemContext } from './camera-control-system/camera-system.js';
5
5
  export { createCameraControls } from './camera-control-system/create-camera-controls.js';
@@ -1 +1 @@
1
- import{P as t,match as e}from"ts-pattern";import{SystemState as o,applicationConfigComponent as n,customSummaryPageComponent as a,entityHeaderComponent as i,navigationStepsComponent as r,propertyPageComponent as s,sidebarTabsComponent as l,simpleSummaryComponent as d,toolbarComponent as c}from"#package/domain";import{layoutStateComponent as g}from"./layout-state.js";import{toolbarHelpElementName as u}from"./toolbar-help-element.js";export class LayoutSystem{_context;_toolbarCache=new WeakMap;state;constructor(t){this._context=t,this.state=new o({...this._context,selectors:this._context.domainContextSelectors,componentType:g,getInitialState:()=>({propertyPageStates:{}})})}get _toolbarHelpExists(){return void 0!==this._context.specSelectors.getElementSlots().layoutElements[u]}get _hasAssistant(){return void 0!==this._context.specSelectors.getAssistant()}initialize=()=>{this.state.initialize()};getCleanUpPropertyPageStateUpdates=(t,e)=>this.state.getUpdates(e=>{if(!e.propertyPageStates[t])return null;let o={...e.propertyPageStates};return delete o[t],{...e,propertyPageStates:o}},e);getLayoutConfig=t=>{let e=this._context.domainContextSelectors.getComponentReader().readFirstRootComponent({componentTypes:[n]},t),o=e?.state.shareDisabled??!1,a=o||(e?.state.shareOwnerLinkDisabled??!1),i=o||(e?.state.shareReadRevisionLinkDisabled??!1);return{layout:e?.state.layout??"universal",ignoreSelectionInSidebar:e?.state.ignoreSelectionInSidebar??!1,miniSidebar:e?.state.miniSidebar??!1,splitSidebar:e?.state.splitSidebar??!1,showSelectionBackButton:e?.state.showSelectionBackButton??!0,shareDisabled:a&&i,availableLocales:e?.state.availableLocales??["en"],indicatorSwitch:e?.state.indicatorSwitch??!0}};getSidebarSummaryPage=t=>{let e=this._context.domainContextSelectors.getNavigationSystem().getActiveNavigationState(t),o=this._context.domainContextSelectors.getComponentReader().readFirstRootComponent({componentTypes:[a,d]},t),n=e===o?.state.summaryNavigationState,i=o?.state.summaryNavigationState;return{page:o,isSummaryActive:n,summaryNavigationState:i}};getEnterSidebarSummaryUpdates=t=>{let{summaryNavigationState:e}=this.getSidebarSummaryPage(t);return e?[this._context.domainContextSelectors.getNavigationSystem().getPushNavigationUpdate(e,t)]:[]};getLeaveSidebarSummaryUpdates=t=>{let e=this._context.domainContextSelectors.getNavigationSystem().getPopNavigationUpdate(t);if(e)return[e];let o=this._context.domainContextSelectors.getNavigationStates().at(0);return o?(this._context.domainServicesSelectors.getLogger().error("There is no navigation state to pop, falling back to the initial navigation state. Check whether the history stack is not broken by some custom navigation logic."),[this._context.domainContextSelectors.getNavigationSystem().getNavigationUpdate(o)]):(this._context.domainServicesSelectors.getLogger().error("There is no navigation state to pop and no initial navigation state to fallback to, this should not happen"),[])};getPushSidebarStackPageUpdates=(t,e,o,n)=>this.state.getUpdates(n=>{let a=n.propertyPageStates[t]??{customState:{},stackPages:[]};return{...n,propertyPageStates:{...n.propertyPageStates,[t]:{...a,stackPages:[...a.stackPages,{props:o,component:e}]}}}},n);getPopSidebarStackPageUpdates=(t,e)=>this.state.getUpdates(e=>{let o=e.propertyPageStates[t]??{customState:{},stackPages:[]};return{...e,propertyPageStates:{...e.propertyPageStates,[t]:{...o,stackPages:o.stackPages.slice(0,-1)}}}},e);getSidebarBackUpdates=t=>{let e=this._context.domainContextSelectors.getNavigationSystem().getHasStackToPop(t),o=this._context.domainContextSelectors.getNavigationSystem().getIsRootSelected(t),{renderedStackedPage:n,summaryPage:a,activePropertyPageId:i}=this.getSidebarContent(t);if(a)return this.getLeaveSidebarSummaryUpdates(t);if(n&&i)return this.getPopSidebarStackPageUpdates(i,t);if(e){let e=this._context.domainContextSelectors.getNavigationSystem().getPopNavigationUpdate(t);return e?[e]:[]}return o?[]:[this._context.domainContextSelectors.getNavigationSystem().getDeselectUpdate()]};getSidebarContent=t=>{let e=this._context.domainContextSelectors.getNavigationSystem().getActiveSelectionState(t),o=this.state.get(t),n=this.getLayoutConfig(t),a=this._context.domainContextSelectors.getComponentReader().readManyComponents({componentTypes:[l],entityIds:[e]},t).some(t=>t.state.tabs.length>0),r=n.miniSidebar&&!a;r&&a&&this._context.domainServicesSelectors.getLogger().warn("Mini sidebar is not active because the layout contains tabs. Only layouts without tabs can have mini sidebar.");let d=this._context.domainContextSelectors.getComponentReader().readManyComponents({componentTypes:[s]},t),{isSummaryActive:c,page:g}=this.getSidebarSummaryPage(t),u=this._context.domainContextSelectors.getComponentReader().readManyComponents({componentTypes:[i]},t),p=this._context.domainContextSelectors.getCompositionProjections().getTree(t).map.get(e);if(!p)throw Error(`Selected entity ${e} not found in composition tree`);let m=this._context.domainContextSelectors.getCompositionProjections().getTree(t).map.get(t.rootEntityId);if(!m)throw Error(`Root entity ${t.rootEntityId} not found in composition tree`);let h=(n.ignoreSelectionInSidebar?[m]:[p,...p.ancestors()]).map(t=>{let e=n.ignoreSelectionInSidebar?d:d.filter(e=>e.componentInstance.entityId===t.id),o=u.filter(e=>e.componentInstance.entityId===t.id);return{id:t.id,propertyPages:e,header:o[0]??null}}),S=h[0]?.id,b=(S?o.propertyPageStates[S]?.stackPages??[]:[]).at(-1)??null,k=this._context.domainContextSelectors.getNavigationSystem().getHasStackToPop(t),x=this._context.domainContextSelectors.getNavigationSystem().getIsRootSelected(t),y=c&&k||k||!!b||!x&&n.showSelectionBackButton&&!n.ignoreSelectionInSidebar;return c?{summaryPage:g,propertyPages:[],isBackAvailable:y,hasMiniSidebar:r,hasSplitSidebar:n.splitSidebar}:{summaryPage:null,propertyPages:h,renderedStackedPage:b,activePropertyPageId:S,isBackAvailable:y,hasMiniSidebar:r,hasSplitSidebar:n.splitSidebar}};getToolbarState=o=>{let n=this._toolbarHelpExists,a=this._hasAssistant,i=this._toolbarCache.get(o);if(i&&i.toolbarHelpExists===n&&i.hasAssistant===a)return i.result;let r=this._context.domainContextSelectors.getExpressionContext(),s=this._context.domainContextSelectors.getNavigationSystem().getActiveFullscreenState(o),l="read"===r.mode,d=this._context.domainContextSelectors.getComponentReader().readFirstRootComponent({componentTypes:[c]},o),g=this._context.domainContextSelectors.getDimensionSystem().getDimensionConfig(o),u=this.getLayoutConfig(o),p="read"===this._context.domainContextSelectors.getExpressionContext().mode,m=u.availableLocales.length>1,h=!p&&!u.shareDisabled,S=u.indicatorSwitch,b=g.availableDimensions.length>1||S,k=a?[{kind:"toolbarButtonGroup",children:[{kind:"assistantToolbarButton"}]}]:[],x=e(d).returnType().with(t.nonNullable,t=>t.state).with(t.nullish,()=>e([s,l]).returnType().with([!1,!1],()=>({desktop:[{kind:"toolbarButtonGroup",children:[{kind:"enterFullscreenToolbarButton"}]},{kind:"toolbarButtonGroup",children:[{kind:"resetCameraToolbarButton"}]},...m?[{kind:"toolbarButtonGroup",children:[{kind:"languageToolbarButton"}]}]:[],...h||b?[{kind:"toolbarButtonGroup",children:[...h?[{kind:"shareToolbarButton"}]:[],...b?[{kind:"measurementsToolbarButton"}]:[],...n?[{kind:"helpToolbarButton"}]:[]]}]:[],{kind:"toolbarButtonGroup",children:[{kind:"undoToolbarButton"},{kind:"redoToolbarButton"}]},...k],mobile:[{kind:"toolbarButtonGroup",children:[{kind:"undoToolbarButton"},{kind:"redoToolbarButton"}]},{kind:"toolbarButtonGroup",children:[{kind:"resetCameraToolbarButton"}]},{kind:"toolbarButtonGroup",children:[{kind:"enterFullscreenToolbarButton"}]},...k],mobileMenu:[...h?[{kind:"shareMenuAction"}]:[],...b?[{kind:"measurementsMenuAction"}]:[],...m?[{kind:"languageMenuAction"}]:[],...n?[{kind:"helpMenuAction"}]:[]]})).with([!0,!1],()=>({desktop:[{kind:"toolbarButtonGroup",children:[{kind:"exitFullscreenToolbarButton"}]}],mobile:[{kind:"toolbarButtonGroup",children:[{kind:"exitFullscreenToolbarButton"}]}],mobileMenu:[]})).with([!1,!0],()=>({desktop:[{kind:"toolbarButtonGroup",children:[{kind:"enterFullscreenToolbarButton"}]},{kind:"toolbarButtonGroup",children:[{kind:"resetCameraToolbarButton"}]},...m?[{kind:"toolbarButtonGroup",children:[{kind:"languageToolbarButton"}]}]:[],...b?[{kind:"toolbarButtonGroup",children:[...b?[{kind:"measurementsToolbarButton"}]:[]]}]:[],...n?[{kind:"helpToolbarButton"}]:[],...k],mobile:[{kind:"toolbarButtonGroup",children:[{kind:"resetCameraToolbarButton"}]},{kind:"toolbarButtonGroup",children:[{kind:"enterFullscreenToolbarButton"}]},...k],mobileMenu:[...b?[{kind:"measurementsMenuAction"}]:[],...m?[{kind:"languageMenuAction"}]:[],...n?[{kind:"helpMenuAction"}]:[]]})).with([!0,!0],()=>({desktop:[{kind:"toolbarButtonGroup",children:[{kind:"exitFullscreenToolbarButton"}]}],mobile:[{kind:"toolbarButtonGroup",children:[{kind:"exitFullscreenToolbarButton"}]}],mobileMenu:[]})).exhaustive()).exhaustive();return this._toolbarCache.set(o,{toolbarHelpExists:n,hasAssistant:a,result:x}),x};getNavigationSteps=t=>{let e=this._context.domainContextSelectors.getComponentReader().readFirstRootComponent({componentTypes:[r]},t);return e?.state.steps??[]}}
1
+ import{P as t,match as e}from"ts-pattern";import{SystemState as o,applicationConfigComponent as n,customSummaryPageComponent as a,entityHeaderComponent as i,navigationStepsComponent as r,propertyPageComponent as s,sidebarTabsComponent as l,simpleSummaryComponent as d,toolbarComponent as c}from"#package/domain";import{layoutStateComponent as g}from"./layout-state.js";import{toolbarHelpElementName as u}from"./toolbar-help-element.js";export class LayoutSystem{_context;_toolbarCache=new WeakMap;state;constructor(t){this._context=t,this.state=new o({...this._context,selectors:this._context.domainContextSelectors,componentType:g,getInitialState:()=>({propertyPageStates:{}})})}get _toolbarHelpExists(){return void 0!==this._context.specSelectors.getElementSlots().layoutElements[u]}get _hasAssistant(){return null!=this._context.specSelectors.getAssistant()}initialize=()=>{this.state.initialize()};getCleanUpPropertyPageStateUpdates=(t,e)=>this.state.getUpdates(e=>{if(!e.propertyPageStates[t])return null;let o={...e.propertyPageStates};return delete o[t],{...e,propertyPageStates:o}},e);getLayoutConfig=t=>{let e=this._context.domainContextSelectors.getComponentReader().readFirstRootComponent({componentTypes:[n]},t),o=e?.state.shareDisabled??!1,a=o||(e?.state.shareOwnerLinkDisabled??!1),i=o||(e?.state.shareReadRevisionLinkDisabled??!1);return{layout:e?.state.layout??"universal",ignoreSelectionInSidebar:e?.state.ignoreSelectionInSidebar??!1,miniSidebar:e?.state.miniSidebar??!1,splitSidebar:e?.state.splitSidebar??!1,showSelectionBackButton:e?.state.showSelectionBackButton??!0,shareDisabled:a&&i,availableLocales:e?.state.availableLocales??["en"],indicatorSwitch:e?.state.indicatorSwitch??!0}};getSidebarSummaryPage=t=>{let e=this._context.domainContextSelectors.getNavigationSystem().getActiveNavigationState(t),o=this._context.domainContextSelectors.getComponentReader().readFirstRootComponent({componentTypes:[a,d]},t),n=e===o?.state.summaryNavigationState,i=o?.state.summaryNavigationState;return{page:o,isSummaryActive:n,summaryNavigationState:i}};getEnterSidebarSummaryUpdates=t=>{let{summaryNavigationState:e}=this.getSidebarSummaryPage(t);return e?[this._context.domainContextSelectors.getNavigationSystem().getPushNavigationUpdate(e,t)]:[]};getLeaveSidebarSummaryUpdates=t=>{let e=this._context.domainContextSelectors.getNavigationSystem().getPopNavigationUpdate(t);if(e)return[e];let o=this._context.domainContextSelectors.getNavigationStates().at(0);return o?(this._context.domainServicesSelectors.getLogger().error("There is no navigation state to pop, falling back to the initial navigation state. Check whether the history stack is not broken by some custom navigation logic."),[this._context.domainContextSelectors.getNavigationSystem().getNavigationUpdate(o)]):(this._context.domainServicesSelectors.getLogger().error("There is no navigation state to pop and no initial navigation state to fallback to, this should not happen"),[])};getPushSidebarStackPageUpdates=(t,e,o,n)=>this.state.getUpdates(n=>{let a=n.propertyPageStates[t]??{customState:{},stackPages:[]};return{...n,propertyPageStates:{...n.propertyPageStates,[t]:{...a,stackPages:[...a.stackPages,{props:o,component:e}]}}}},n);getPopSidebarStackPageUpdates=(t,e)=>this.state.getUpdates(e=>{let o=e.propertyPageStates[t]??{customState:{},stackPages:[]};return{...e,propertyPageStates:{...e.propertyPageStates,[t]:{...o,stackPages:o.stackPages.slice(0,-1)}}}},e);getSidebarBackUpdates=t=>{let e=this._context.domainContextSelectors.getNavigationSystem().getHasStackToPop(t),o=this._context.domainContextSelectors.getNavigationSystem().getIsRootSelected(t),{renderedStackedPage:n,summaryPage:a,activePropertyPageId:i}=this.getSidebarContent(t);if(a)return this.getLeaveSidebarSummaryUpdates(t);if(n&&i)return this.getPopSidebarStackPageUpdates(i,t);if(e){let e=this._context.domainContextSelectors.getNavigationSystem().getPopNavigationUpdate(t);return e?[e]:[]}return o?[]:[this._context.domainContextSelectors.getNavigationSystem().getDeselectUpdate()]};getSidebarContent=t=>{let e=this._context.domainContextSelectors.getNavigationSystem().getActiveSelectionState(t),o=this.state.get(t),n=this.getLayoutConfig(t),a=this._context.domainContextSelectors.getComponentReader().readManyComponents({componentTypes:[l],entityIds:[e]},t).some(t=>t.state.tabs.length>0),r=n.miniSidebar&&!a;r&&a&&this._context.domainServicesSelectors.getLogger().warn("Mini sidebar is not active because the layout contains tabs. Only layouts without tabs can have mini sidebar.");let d=this._context.domainContextSelectors.getComponentReader().readManyComponents({componentTypes:[s]},t),{isSummaryActive:c,page:g}=this.getSidebarSummaryPage(t),u=this._context.domainContextSelectors.getComponentReader().readManyComponents({componentTypes:[i]},t),p=this._context.domainContextSelectors.getCompositionProjections().getTree(t).map.get(e);if(!p)throw Error(`Selected entity ${e} not found in composition tree`);let m=this._context.domainContextSelectors.getCompositionProjections().getTree(t).map.get(t.rootEntityId);if(!m)throw Error(`Root entity ${t.rootEntityId} not found in composition tree`);let h=(n.ignoreSelectionInSidebar?[m]:[p,...p.ancestors()]).map(t=>{let e=n.ignoreSelectionInSidebar?d:d.filter(e=>e.componentInstance.entityId===t.id),o=u.filter(e=>e.componentInstance.entityId===t.id);return{id:t.id,propertyPages:e,header:o[0]??null}}),S=h[0]?.id,b=(S?o.propertyPageStates[S]?.stackPages??[]:[]).at(-1)??null,k=this._context.domainContextSelectors.getNavigationSystem().getHasStackToPop(t),x=this._context.domainContextSelectors.getNavigationSystem().getIsRootSelected(t),y=c&&k||k||!!b||!x&&n.showSelectionBackButton&&!n.ignoreSelectionInSidebar;return c?{summaryPage:g,propertyPages:[],isBackAvailable:y,hasMiniSidebar:r,hasSplitSidebar:n.splitSidebar}:{summaryPage:null,propertyPages:h,renderedStackedPage:b,activePropertyPageId:S,isBackAvailable:y,hasMiniSidebar:r,hasSplitSidebar:n.splitSidebar}};getToolbarState=o=>{let n=this._toolbarHelpExists,a=this._hasAssistant,i=this._toolbarCache.get(o);if(i&&i.toolbarHelpExists===n&&i.hasAssistant===a)return i.result;let r=this._context.domainContextSelectors.getExpressionContext(),s=this._context.domainContextSelectors.getNavigationSystem().getActiveFullscreenState(o),l="read"===r.mode,d=this._context.domainContextSelectors.getComponentReader().readFirstRootComponent({componentTypes:[c]},o),g=this._context.domainContextSelectors.getDimensionSystem().getDimensionConfig(o),u=this.getLayoutConfig(o),p="read"===this._context.domainContextSelectors.getExpressionContext().mode,m=u.availableLocales.length>1,h=!p&&!u.shareDisabled,S=u.indicatorSwitch,b=g.availableDimensions.length>1||S,k=a?[{kind:"toolbarButtonGroup",children:[{kind:"assistantToolbarButton"}]}]:[],x=e(d).returnType().with(t.nonNullable,t=>t.state).with(t.nullish,()=>e([s,l]).returnType().with([!1,!1],()=>({desktop:[{kind:"toolbarButtonGroup",children:[{kind:"enterFullscreenToolbarButton"}]},{kind:"toolbarButtonGroup",children:[{kind:"resetCameraToolbarButton"}]},...m?[{kind:"toolbarButtonGroup",children:[{kind:"languageToolbarButton"}]}]:[],...h||b?[{kind:"toolbarButtonGroup",children:[...h?[{kind:"shareToolbarButton"}]:[],...b?[{kind:"measurementsToolbarButton"}]:[],...n?[{kind:"helpToolbarButton"}]:[]]}]:[],{kind:"toolbarButtonGroup",children:[{kind:"undoToolbarButton"},{kind:"redoToolbarButton"}]},...k],mobile:[{kind:"toolbarButtonGroup",children:[{kind:"undoToolbarButton"},{kind:"redoToolbarButton"}]},{kind:"toolbarButtonGroup",children:[{kind:"resetCameraToolbarButton"}]},{kind:"toolbarButtonGroup",children:[{kind:"enterFullscreenToolbarButton"}]},...k],mobileMenu:[...h?[{kind:"shareMenuAction"}]:[],...b?[{kind:"measurementsMenuAction"}]:[],...m?[{kind:"languageMenuAction"}]:[],...n?[{kind:"helpMenuAction"}]:[]]})).with([!0,!1],()=>({desktop:[{kind:"toolbarButtonGroup",children:[{kind:"exitFullscreenToolbarButton"}]}],mobile:[{kind:"toolbarButtonGroup",children:[{kind:"exitFullscreenToolbarButton"}]}],mobileMenu:[]})).with([!1,!0],()=>({desktop:[{kind:"toolbarButtonGroup",children:[{kind:"enterFullscreenToolbarButton"}]},{kind:"toolbarButtonGroup",children:[{kind:"resetCameraToolbarButton"}]},...m?[{kind:"toolbarButtonGroup",children:[{kind:"languageToolbarButton"}]}]:[],...b?[{kind:"toolbarButtonGroup",children:[...b?[{kind:"measurementsToolbarButton"}]:[]]}]:[],...n?[{kind:"helpToolbarButton"}]:[],...k],mobile:[{kind:"toolbarButtonGroup",children:[{kind:"resetCameraToolbarButton"}]},{kind:"toolbarButtonGroup",children:[{kind:"enterFullscreenToolbarButton"}]},...k],mobileMenu:[...b?[{kind:"measurementsMenuAction"}]:[],...m?[{kind:"languageMenuAction"}]:[],...n?[{kind:"helpMenuAction"}]:[]]})).with([!0,!0],()=>({desktop:[{kind:"toolbarButtonGroup",children:[{kind:"exitFullscreenToolbarButton"}]}],mobile:[{kind:"toolbarButtonGroup",children:[{kind:"exitFullscreenToolbarButton"}]}],mobileMenu:[]})).exhaustive()).exhaustive();return this._toolbarCache.set(o,{toolbarHelpExists:n,hasAssistant:a,result:x}),x};getNavigationSteps=t=>{let e=this._context.domainContextSelectors.getComponentReader().readFirstRootComponent({componentTypes:[r]},t);return e?.state.steps??[]}}
@@ -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 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 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 UseControlViolations, type UseCookRecipes, type UseCookReplaceRecipes, type UseCookedRecipes, type UseCookedReplaceRecipes, type UseCreateAuthorizedClient, type UseDeleteEntity, type UseDeletedEntity, type UseDeselect, type UseDistanceDimension, type UseDistanceDimensionSelection, type UseDomainApplicationContext, type UseDomainApplicationProps, type UseDomainContext, type UseDomainEntityState, type UseEntityPrice, type UseEntitySelector, type UseFinalizeViolations, type UseFirstComponent, type UseFirstRootComponent, type UseFrontendData, type UseGenericDimension, type UseGroupedRecipeOptions, type UseHoveredDomainEntityId, type UseHoveredEntity, type UseHoveredEntityId, type UseIntegrationService, type UseIntegrationState, type UseIsFullscreenActive, type UseLoadedData, type UseLoadingState, type UseMapViolationHints, type UseNavigate, type UsePopNavigate, type UsePresetEmbeddedState, type UsePublishedData, type UsePushNavigate, type UseRecipeEmbeddedState, type UseReplaceEntityRecipeOptions, type UseRootComponents, type UseRootEntityId, type UseRootEntityPrice, type UseRootEntitySelector, type UseRootEntityState, type UseSelectEntity, type UseSelectParent, type UseSelectedDomainEntityId, type UseSelectedEntity, type UseSelectedEntityId, type UseSession, type UseSessionRole, type UseSessionService, type UseSetFullscreen, type UseSlice, type UseState, type UseStateValidity, type UseSwatchSelection, type UseSynchronizedSelector, type UseSynchronizedSelector$, type UseTextValue, type UseUpdateControl, type UseUpdatedControl, useLoadingStateValue } from '#package/react-sdk';
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';
@@ -466,6 +466,10 @@ export interface ConfiguratorInterface<ENTITIES extends DomainEntity<string>, AL
466
466
  * Get the currently active fullscreen state
467
467
  */
468
468
  useIsFullscreenActive: UseIsFullscreenActive;
469
+ /**
470
+ * Turn the fullscreen state on or off. The state is a flag the layout reads with `useIsFullscreenActive`
471
+ */
472
+ useSetFullscreen: UseSetFullscreen;
469
473
  /**
470
474
  * Returns composition tree of the domain
471
475
  */
@@ -1 +1 @@
1
- import{createCustomPhoenixEntityElement as e,createCustomPhoenixLayoutElement as t,createGetThemeHandler as r,createGetWebComponentOptionsHandler as o,createPhoenixHandler as i,createTransformer as s,createTransformerBuilder as a,createUpdateFactory as n,getIdSequence as m,isCreateEntityUpdate as p,isReplaceEntityUpdate as u}from"#package/domain";import{createCollectFrontendDataHandler as d,createFilterPublishedChunksHandler as c,createNotAuthenticatedPage as f,isAngleDimensionUpdate as g,isAttributeSelectionUpdate as j,isAttributeSwitchUpdate as l,isDeleteEntityUpdate as x,isDistanceDimensionUpdate as y,isGenericDimensionUpdate as k,isSwatchSelectionUpdate as h,isTextValueUpdate as S,useAccessService as E,useActiveNavigationState as I,useActiveToolState as q,useActiveViewState as A,useAnalyticsService as B,useAngleDimension as C,useAttributeSelection as P,useAttributeSwitch as R,useAuthenticatedClient as U,useAuthorizedClient as b,useBackendData as v,useChildEntitySelection as w,useCommittedSlice as z,useCommittedState as D,useComponent as F,useComponents as G,useComposition as H,useConfigurationId as J,useControlViolations as K,useCookRecipes as L,useCookReplaceRecipes as M,useCookedRecipes as N,useCookedReplaceRecipes as O,useCreateAuthorizedClient as Q,useDeleteEntity as T,useDeletedEntity as V,useDeselect as W,useDistanceDimension as X,useDistanceDimensionSelection as Y,useDomain as Z,useDomainApplication as $,useDomainApplicationProps as _,useDomainEntityRenderedState as ee,useDomainEntityState as et,useEntityPrice as er,useEntitySelector as eo,useFinalizeViolations as ei,useFirstComponent as es,useFirstRenderedComponent as ea,useFirstRootComponent as en,useFirstRootRenderedComponent as em,useFrontendData as ep,useGenericDimension as eu,useGroupedRecipeOptions as ed,useHoveredDomainEntityId as ec,useHoveredEntity as ef,useHoveredEntityId as eg,useIntegrationService as ej,useIntegrationState as el,useIsFullscreenActive as ex,useLoadedData as ey,useLoadingState as ek,useLoadingStateValue as eh,useMapViolationHints as eS,useNavigate as eE,usePopNavigate as eI,usePresetEmbeddedState as eq,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 ez,useRenderedState as eD,useReplaceEntityRecipeOptions as eF,useRootComponents as eG,useRootEntityId as eH,useRootEntityPrice as eJ,useRootEntityRenderedId as eK,useRootEntityRenderedState as eL,useRootEntitySelector as eM,useRootEntityState as eN,useRootRenderedComponents as eO,useSelectEntity as eQ,useSelectParent as eT,useSelectedDomainEntityId as eV,useSelectedEntity as eW,useSelectedEntityId as eX,useSession as eY,useSessionRole as eZ,useSessionService as e$,useStateValidity as e_,useStoreSelector as e0,useStoreSelector$ as e1,useSwatchSelection as e2,useTextValue as e3,useUpdateControl as e4,useUpdatedControl as e5}from"#package/react-sdk";import{createPhoenixIconSet as e6}from"#package/ui-sdk";import{useConfigurator as e7}from"../application-runtime/index.js";import{createOnApplicationStartProvider as e8,createOnBackendDataReadyProvider as e9,createOnConfiguratorReadyProvider as te,createOnFrontendDataReadyProvider as tt,createOnGoToIndexHandler as tr,createOnPresetLoadedHandler as to,createOnPublishedDataReadyProvider as ti,createOnRoutingReadyProvider as ts,createOnSessionReadyProvider as ta,useConfiguratorRouting as tn,usePresetSelection as tm,usePropertyPageStack as tp,usePropertyPageState as tu}from"../configurator-context/index.js";import{createGetTextureProcessingMapHandler as td}from"../scene/index.js";import{useUpdateEntityObjectSelection as tc}from"../scene/scene-entity/drag-and-drop/use-updated-selection.js";import{createAppLoader as tf,createCanvasLoader as tg,createLayoutAdminUi as tj,createLayoutCustomOwnerUi as tl,createLayoutCustomReadUi as tx,createLayoutDialog as ty,createLayoutFooter as tk,createLayoutToolbarDesktop as th,createLayoutToolbarDesktopFullScreen as tS,createLayoutToolbarReadDesktop as tE,createLayoutToolbarReadDesktopFullScreen as tI,createLayoutUserUi as tq,createToolbarHelp as tA}from"../ui/index.js";import{useGenerateShareLink as tB}from"../ui/phoenix-layout-elements/share/use-share.js";import{createPresetDeviceNotSupported as tC,createPresetPageAction as tP,createPresetUi as tR}from"../ui/preset-layout/PresetUi.js";export const createConfiguratorInterface=tU=>({updates:n(),getIdSequence:m,createGetWebComponentOptionsHandler:o,createGetThemeHandler:r,createPhoenixHandler:i,createCustomPhoenixEntityElement:e,createCustomPhoenixLayoutElement:t,createPhoenixIconSet:e6,createGetTextureProcessingMapHandler:td,createCollectFrontendDataHandler:d,createFilterPublishedChunksHandler:c,createOnGoToIndexHandler:tr,createOnApplicationStartProvider:e8,createOnSessionReadyProvider:ta,createOnPublishedDataReadyProvider:ti,createOnFrontendDataReadyProvider:tt,createOnBackendDataReadyProvider:e9,createOnRoutingReadyProvider:ts,createOnConfiguratorReadyProvider:te,createOnPresetLoadedHandler:to,createPresetUi:tR,createPresetPageAction:tP,createPresetDeviceNotSupported:tC,createLayoutFooter:tk,createAppLoader:tf,createCanvasLoader:tg,createLayoutDialog:ty,createLayoutToolbarDesktop:th,createLayoutToolbarDesktopFullScreen:tS,createLayoutToolbarReadDesktop:tE,createLayoutToolbarReadDesktopFullScreen:tI,createLayoutCustomOwnerUi:tl,createLayoutCustomReadUi:tx,createLayoutAdminUi:tj,createLayoutUserUi:tq,createToolbarHelp:tA,createNotAuthenticatedPage:f,createTransformer:s,transformerBuilder:a(),useAnalytics:B,useAuthenticatedClient:U,useAuthorizedClient:b,useCreateAuthorizedClient:Q,useAccessService:E,useConfigurationId:J,useSession:eY,useSessionRole:eZ,useSessionService:e$,useDomain:Z,useDomainApplication:$,useConfigurator:e7,useConfiguratorRouting:tn,usePresetSelection:tm,usePublishedData:eA,useFrontendData:ep,useBackendData:v,useDomainApplicationProps:_,useLoadedData:ey,useIntegrationService:ej,useIntegrationState:el,usePresetEmbeddedState:eq,useRecipeEmbeddedState:eC,useCommittedSlice:z,useRenderedSlice:ez,useCommittedState:D,useRenderedState:eD,useStoreSelector:e0,useRenderedSelector:ev,useStoreSelector$:e1,useRenderedSelector$:ew,useEntitySelector:eo,useRenderedEntitySelector:eU,useRootEntitySelector:eM,useRenderedRootEntitySelector:eb,useStateValidity:e_,useMapViolationHints:eS,useNavigate:eE,usePopNavigate:eI,usePushNavigate:eB,useControlViolations:K,useFinalizeViolations:ei,useComponent:F,useRenderedComponent:eP,useComponents:G,useRenderedComponents:eR,useFirstComponent:es,useFirstRenderedComponent:ea,useRootComponents:eG,useRootRenderedComponents:eO,useFirstRootComponent:en,useFirstRootRenderedComponent:em,useEntityState:et,useEntityRenderedState:ee,useRootEntityState:eN,useRootEntityRenderedState:eL,useRootEntityId:eH,useRootEntityRenderedId:eK,useEntityPrice:er,useRootEntityPrice:eJ,useSelectedEntity:eW,useSelectedEntityId:eX,useSelectedDomainEntityId:eV,useSelectEntity:eQ,useDeselect:W,useSelectParent:eT,useHoveredEntity:ef,useHoveredEntityId:eg,useHoveredDomainEntityId:ec,useActiveNavigationState:I,useActiveViewState:A,useActiveToolState:q,useIsFullscreenActive:ex,useComposition:H,useUpdateControl:e4,useUpdatedControl:e5,useCookRecipes:L,useCookedRecipes:N,useCookReplaceRecipes:M,useCookedReplaceRecipes:O,useDeleteEntity:T,useDeletedEntity:V,useSwatchSelection:e2,useTextValue:e3,useAttributeSelection:P,useAttributeSwitch:R,useDistanceDimension:X,useDistanceDimensionSelection:Y,useGenericDimension:eu,useAngleDimension:C,useChildEntitySelection:w,useGroupedRecipeOptions:ed,useReplaceEntityRecipeOptions:eF,useUpdateEntityObjectSelection:tc,useGenerateShareLink:tB,useLoadingState:ek,useLoadingStateValue:eh,usePropertyPageStack:tp,usePropertyPageState:tu,isCreateEntityUpdate:p,isReplaceEntityUpdate:u,isDeleteEntityUpdate:x,isAngleDimensionUpdate:g,isDistanceDimensionUpdate:y,isGenericDimensionUpdate:k,isAttributeSelectionUpdate:j,isAttributeSwitchUpdate:l,isTextValueUpdate:S,isSwatchSelectionUpdate:h});
1
+ import{createCustomPhoenixEntityElement as e,createCustomPhoenixLayoutElement as t,createGetThemeHandler as r,createGetWebComponentOptionsHandler as o,createPhoenixHandler as i,createTransformer as s,createTransformerBuilder as a,createUpdateFactory as n,getIdSequence as m,isCreateEntityUpdate as p,isReplaceEntityUpdate as u}from"#package/domain";import{createCollectFrontendDataHandler as d,createFilterPublishedChunksHandler as c,createNotAuthenticatedPage as f,isAngleDimensionUpdate as g,isAttributeSelectionUpdate as j,isAttributeSwitchUpdate as l,isDeleteEntityUpdate as x,isDistanceDimensionUpdate as y,isGenericDimensionUpdate as k,isSwatchSelectionUpdate as h,isTextValueUpdate as S,useAccessService as E,useActiveNavigationState as I,useActiveToolState as q,useActiveViewState as A,useAnalyticsService as B,useAngleDimension as C,useAttributeSelection as P,useAttributeSwitch as R,useAuthenticatedClient as U,useAuthorizedClient as b,useBackendData as v,useChildEntitySelection as w,useCommittedSlice as z,useCommittedState as D,useComponent as F,useComponents as G,useComposition as H,useConfigurationId as J,useControlViolations as K,useCookRecipes as L,useCookReplaceRecipes as M,useCookedRecipes as N,useCookedReplaceRecipes as O,useCreateAuthorizedClient as Q,useDeleteEntity as T,useDeletedEntity as V,useDeselect as W,useDistanceDimension as X,useDistanceDimensionSelection as Y,useDomain as Z,useDomainApplication as $,useDomainApplicationProps as _,useDomainEntityRenderedState as ee,useDomainEntityState as et,useEntityPrice as er,useEntitySelector as eo,useFinalizeViolations as ei,useFirstComponent as es,useFirstRenderedComponent as ea,useFirstRootComponent as en,useFirstRootRenderedComponent as em,useFrontendData as ep,useGenericDimension as eu,useGroupedRecipeOptions as ed,useHoveredDomainEntityId as ec,useHoveredEntity as ef,useHoveredEntityId as eg,useIntegrationService as ej,useIntegrationState as el,useIsFullscreenActive as ex,useLoadedData as ey,useLoadingState as ek,useLoadingStateValue as eh,useMapViolationHints as eS,useNavigate as eE,usePopNavigate as eI,usePresetEmbeddedState as eq,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 ez,useRenderedState as eD,useReplaceEntityRecipeOptions as eF,useRootComponents as eG,useRootEntityId as eH,useRootEntityPrice as eJ,useRootEntityRenderedId as eK,useRootEntityRenderedState as eL,useRootEntitySelector as eM,useRootEntityState as eN,useRootRenderedComponents as eO,useSelectEntity as eQ,useSelectParent as eT,useSelectedDomainEntityId as eV,useSelectedEntity as eW,useSelectedEntityId as eX,useSession as eY,useSessionRole as eZ,useSessionService as e$,useSetFullscreen as e_,useStateValidity as e0,useStoreSelector as e1,useStoreSelector$ as e2,useSwatchSelection as e3,useTextValue as e4,useUpdateControl as e5,useUpdatedControl as e6}from"#package/react-sdk";import{createPhoenixIconSet as e7}from"#package/ui-sdk";import{useConfigurator as e8}from"../application-runtime/index.js";import{createOnApplicationStartProvider as e9,createOnBackendDataReadyProvider as te,createOnConfiguratorReadyProvider as tt,createOnFrontendDataReadyProvider as tr,createOnGoToIndexHandler as to,createOnPresetLoadedHandler as ti,createOnPublishedDataReadyProvider as ts,createOnRoutingReadyProvider as ta,createOnSessionReadyProvider as tn,useConfiguratorRouting as tm,usePresetSelection as tp,usePropertyPageStack as tu,usePropertyPageState as td}from"../configurator-context/index.js";import{createGetTextureProcessingMapHandler as tc}from"../scene/index.js";import{useUpdateEntityObjectSelection as tf}from"../scene/scene-entity/drag-and-drop/use-updated-selection.js";import{createAppLoader as tg,createCanvasLoader as tj,createLayoutAdminUi as tl,createLayoutCustomOwnerUi as tx,createLayoutCustomReadUi as ty,createLayoutDialog as tk,createLayoutFooter as th,createLayoutToolbarDesktop as tS,createLayoutToolbarDesktopFullScreen as tE,createLayoutToolbarReadDesktop as tI,createLayoutToolbarReadDesktopFullScreen as tq,createLayoutUserUi as tA,createToolbarHelp as tB}from"../ui/index.js";import{useGenerateShareLink as tC}from"../ui/phoenix-layout-elements/share/use-share.js";import{createPresetDeviceNotSupported as tP,createPresetPageAction as tR,createPresetUi as tU}from"../ui/preset-layout/PresetUi.js";export const createConfiguratorInterface=tb=>({updates:n(),getIdSequence:m,createGetWebComponentOptionsHandler:o,createGetThemeHandler:r,createPhoenixHandler:i,createCustomPhoenixEntityElement:e,createCustomPhoenixLayoutElement:t,createPhoenixIconSet:e7,createGetTextureProcessingMapHandler:tc,createCollectFrontendDataHandler:d,createFilterPublishedChunksHandler:c,createOnGoToIndexHandler:to,createOnApplicationStartProvider:e9,createOnSessionReadyProvider:tn,createOnPublishedDataReadyProvider:ts,createOnFrontendDataReadyProvider:tr,createOnBackendDataReadyProvider:te,createOnRoutingReadyProvider:ta,createOnConfiguratorReadyProvider:tt,createOnPresetLoadedHandler:ti,createPresetUi:tU,createPresetPageAction:tR,createPresetDeviceNotSupported:tP,createLayoutFooter:th,createAppLoader:tg,createCanvasLoader:tj,createLayoutDialog:tk,createLayoutToolbarDesktop:tS,createLayoutToolbarDesktopFullScreen:tE,createLayoutToolbarReadDesktop:tI,createLayoutToolbarReadDesktopFullScreen:tq,createLayoutCustomOwnerUi:tx,createLayoutCustomReadUi:ty,createLayoutAdminUi:tl,createLayoutUserUi:tA,createToolbarHelp:tB,createNotAuthenticatedPage:f,createTransformer:s,transformerBuilder:a(),useAnalytics:B,useAuthenticatedClient:U,useAuthorizedClient:b,useCreateAuthorizedClient:Q,useAccessService:E,useConfigurationId:J,useSession:eY,useSessionRole:eZ,useSessionService:e$,useDomain:Z,useDomainApplication:$,useConfigurator:e8,useConfiguratorRouting:tm,usePresetSelection:tp,usePublishedData:eA,useFrontendData:ep,useBackendData:v,useDomainApplicationProps:_,useLoadedData:ey,useIntegrationService:ej,useIntegrationState:el,usePresetEmbeddedState:eq,useRecipeEmbeddedState:eC,useCommittedSlice:z,useRenderedSlice:ez,useCommittedState:D,useRenderedState:eD,useStoreSelector:e1,useRenderedSelector:ev,useStoreSelector$:e2,useRenderedSelector$:ew,useEntitySelector:eo,useRenderedEntitySelector:eU,useRootEntitySelector:eM,useRenderedRootEntitySelector:eb,useStateValidity:e0,useMapViolationHints:eS,useNavigate:eE,usePopNavigate:eI,usePushNavigate:eB,useControlViolations:K,useFinalizeViolations:ei,useComponent:F,useRenderedComponent:eP,useComponents:G,useRenderedComponents:eR,useFirstComponent:es,useFirstRenderedComponent:ea,useRootComponents:eG,useRootRenderedComponents:eO,useFirstRootComponent:en,useFirstRootRenderedComponent:em,useEntityState:et,useEntityRenderedState:ee,useRootEntityState:eN,useRootEntityRenderedState:eL,useRootEntityId:eH,useRootEntityRenderedId:eK,useEntityPrice:er,useRootEntityPrice:eJ,useSelectedEntity:eW,useSelectedEntityId:eX,useSelectedDomainEntityId:eV,useSelectEntity:eQ,useDeselect:W,useSelectParent:eT,useHoveredEntity:ef,useHoveredEntityId:eg,useHoveredDomainEntityId:ec,useActiveNavigationState:I,useActiveViewState:A,useActiveToolState:q,useIsFullscreenActive:ex,useSetFullscreen:e_,useComposition:H,useUpdateControl:e5,useUpdatedControl:e6,useCookRecipes:L,useCookedRecipes:N,useCookReplaceRecipes:M,useCookedReplaceRecipes:O,useDeleteEntity:T,useDeletedEntity:V,useSwatchSelection:e3,useTextValue:e4,useAttributeSelection:P,useAttributeSwitch:R,useDistanceDimension:X,useDistanceDimensionSelection:Y,useGenericDimension:eu,useAngleDimension:C,useChildEntitySelection:w,useGroupedRecipeOptions:ed,useReplaceEntityRecipeOptions:eF,useUpdateEntityObjectSelection:tf,useGenerateShareLink:tC,useLoadingState:ek,useLoadingStateValue:eh,usePropertyPageStack:tu,usePropertyPageState:td,isCreateEntityUpdate:p,isReplaceEntityUpdate:u,isDeleteEntityUpdate:x,isAngleDimensionUpdate:g,isDistanceDimensionUpdate:y,isGenericDimensionUpdate:k,isAttributeSelectionUpdate:j,isAttributeSwitchUpdate:l,isTextValueUpdate:S,isSwatchSelectionUpdate:h});
@@ -0,0 +1,6 @@
1
+ /**
2
+ * The built-in UI of a loaded configuration: the layout the spec's `layout` selects, in owner or
3
+ * read mode. `LoadedConfiguratorDetailPage` renders it when the project registers no layout element
4
+ * named `ConfiguratorLayout`.
5
+ */
6
+ export declare const DefaultConfiguratorLayout: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ import{jsx as r,jsxs as e,Fragment as t}from"react/jsx-runtime";import{useMemo as a}from"react";import{match as o}from"ts-pattern";import{useAccessService as i}from"#package/react-sdk";import{useLayoutSystemConfig as m}from"../configurator-context/index.js";import{Layout as n,LayoutCustomOwnerUi as u,LayoutCustomReadUi as s,LayoutDialog as d,Legacy as w}from"../ui/index.js";export const DefaultConfiguratorLayout=()=>{let{accessInfo:p}=i(),y=m(),{ownerUi:l,readUi:c}=a(()=>o(y.layout).with("simple",()=>({ownerUi:r(w.SimpleOwnerLayout,{}),readUi:r(w.SummaryReadLayout,{})})).with("tabs",()=>({ownerUi:r(w.TabsOwnerLayout,{}),readUi:r(w.SummaryReadLayout,{})})).with("steps",()=>({ownerUi:r(w.StepsOwnerLayout,{}),readUi:r(w.SummaryReadLayout,{})})).with("universal",()=>({ownerUi:r(n,{}),readUi:r(n,{})})).with("custom",()=>({ownerUi:r(u,{}),readUi:r(s,{})})).exhaustive(),[y.layout]);return e(t,{children:[p.viewMode?c:l,"universal"===y.layout&&e(t,{children:[r(w.CommonFinalizePage,{}),r(d,{})]})]})};
@@ -1 +1 @@
1
- import{jsx as e,jsxs as o,Fragment as i}from"react/jsx-runtime";import r from"mui-modal-provider";import{memo as n,useCallback as t,useEffect as a,useMemo as d}from"react";import{match as s}from"ts-pattern";import{InvalidAccessKeyError as l}from"#package/client";import{BuiltInLoadingPhase as u,CommonAnalyticsFactory as m,DomainLifecycleBoundary as c,LoadedDataProvider as f,useAccessService as p,useAnalyticsService as g,useAuthorizedClient as v,useConfiguratorDomainFactory as w,useConfiguratorLoadStatus as y,useConfiguratorRawLoadedData as h,useExpectPhase as I,useLoadedDataActions as j,useLoadingError as x,useLoadingPhase as C,useLogger as b,useRoutingService as k,useSpecAssistant as L}from"#package/react-sdk";import{useConfigurator as U}from"../application-runtime/index.js";import{IntegrationSubscription as M,OnConfiguratorReadyProvider as S,ViewportStateSync as E,useLayoutSystemConfig as F}from"../configurator-context/index.js";import{Layout as R,Legacy as D}from"../ui/index.js";import{LayoutCustomOwnerUi as T,LayoutCustomReadUi as P,LayoutDialog as A}from"../ui/phoenix-layout-elements/index.js";import{ConfiguratorNotFoundPage as O}from"./ConfiguratorNotFoundPage.js";import{DevContextFallback as V}from"./error-boundaries/DevContextFallback.js";import{DevLoadingFallback as q}from"./error-boundaries/DevLoadingFallback.js";import{LoadingErrorBoundary as z}from"./error-boundaries/LoadingErrorBoundary.js";import{useLoad as B}from"./use-load.js";let G=n(n=>{let{viewMode:t}=n,l=F();(()=>{let{assistantSystem:e}=U(),o=null!=L();a(()=>{if(o)return e.activate()},[e,o])})();let{ownerUi:u,readUi:m}=d(()=>s(l.layout).with("simple",()=>({ownerUi:e(D.SimpleOwnerLayout,{}),readUi:e(D.SummaryReadLayout,{})})).with("tabs",()=>({ownerUi:e(D.TabsOwnerLayout,{}),readUi:e(D.SummaryReadLayout,{})})).with("steps",()=>({ownerUi:e(D.StepsOwnerLayout,{}),readUi:e(D.SummaryReadLayout,{})})).with("universal",()=>({ownerUi:e(R,{}),readUi:e(R,{})})).with("custom",()=>({ownerUi:e(T,{}),readUi:e(P,{})})).exhaustive(),[l.layout]);return e(r,{children:o(S,{children:[t?m:u,"universal"===l.layout&&o(i,{children:[e(D.CommonFinalizePage,{}),e(A,{})]})]})})});export const LoadedConfiguratorDetailPage=()=>{I(u.SceneAssets);let{configurationId:i,accessInfo:r}=p(),n=v(),a=k(),d=b(),s=g(),{startConfiguratorLoad:L,completeConfiguratorLoad:U,failConfiguratorLoad:S,resetConfiguratorLoad:F}=j(),{isLoading:R,isError:D}=y(),T=h(),P=w(),A=t(()=>r.viewMode&&void 0!==r.revisionId?n.getConfigurationRevision(i,r.revisionId):n.getConfiguration(i),[r.revisionId,r.viewMode,n,i]),N=t(()=>{L()},[L]),H=t(e=>{U({initialRevisionId:e.revisionId,initialEntities:e.data,modelVersion:e.modelVersion,rootEntityType:e.rootEntityType,schemaIdentity:P}),s.push(m.ConfigurationLoaded(e.configurationId,e.revisionId,r.viewMode?"read":"owner")),d.appendToGlobalContext({configurationId:e.configurationId,revisionId:e.revisionId,mode:r.viewMode}),d.info("Configuration loaded.")},[r.viewMode,s,U,P,d]),J=t(e=>{if(S(e),e instanceof l)return void a.rejectAccessToken(i,r.raw);let o=e instanceof Error?e:Error("Configuration loading failed with an unknown error.",{cause:e});d.error("Configuration loading failed because the API request did not succeed. Verify the configuration ID and access token.",{configurationId:i},o)},[r.raw,i,S,d,a]),K=t(()=>{F()},[F]);return(B({key:[n,i,r.revisionId,r.viewMode],load:A,onStart:N,onSuccess:H,onError:J,onCleanup:K}),C({id:u.DataFetch,label:"Loading configuration…"},R),x(D),D)?e(O,{}):null===T?null:e(f,{value:T,children:e(z,{fallbackRender:o=>e(q,{...o}),children:e(c,{type:"configurator",children:e(z,{FallbackComponent:V,children:o(M,{children:[e(E,{}),e(G,{viewMode:r.viewMode})]})})})})})};
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 u,PhoenixLayoutElement as c,useAccessService as f,useAnalyticsService as m,useAuthorizedClient as g,useConfiguratorDomainFactory as p,useConfiguratorLoadStatus as v,useConfiguratorRawLoadedData as I,useExpectPhase as C,useLoadedDataActions as h,useLoadingError as j,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 L,ViewportStateSync as D}from"../configurator-context/index.js";import{ConfiguratorNotFoundPage as M}from"./ConfiguratorNotFoundPage.js";import{DefaultConfiguratorLayout as F}from"./DefaultConfiguratorLayout.js";import{DevContextFallback as S}from"./error-boundaries/DevContextFallback.js";import{DevLoadingFallback as T}from"./error-boundaries/DevLoadingFallback.js";import{LoadingErrorBoundary as A}from"./error-boundaries/LoadingErrorBoundary.js";import{useLoad as P}from"./use-load.js";let R=i(()=>((()=>{let{assistantSystem:o}=x(),r=null!=b();t(()=>{if(r)return o.activate()},[o,r])})(),o(e,{children:o(L,{children:o(c,{name:"ConfiguratorLayout",defaultSlot:F})})})));export const LoadedConfiguratorDetailPage=()=>{C(d.SceneAssets);let{configurationId:e,accessInfo:i}=f(),t=g(),c=y(),b=w(),x=m(),{startConfiguratorLoad:L,completeConfiguratorLoad:F,failConfiguratorLoad:V,resetConfiguratorLoad:q}=h(),{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(()=>{L()},[L]),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(V(o),o instanceof a)return void c.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,V,b,c]),Q=n(()=>{q()},[q]);return(P({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),j(G),G)?o(M,{}):null===N?null:o(u,{value:N,children:o(A,{fallbackRender:r=>o(T,{...r}),children:o(l,{type:"configurator",children:o(A,{FallbackComponent:S,children:r(E,{children:[o(D,{}),o(R,{})]})})})})})};
@@ -1 +1 @@
1
- import{jsx as t,jsxs as e}from"react/jsx-runtime";import{Tooltip as a,styled as i}from"@mui/material";import{memo as n,useCallback as s}from"react";import{match as o}from"ts-pattern";import{useLocalizable as r}from"#package/react-sdk";import{PhxIcon as l}from"#package/ui-sdk";import{AssistantPanelName as d}from"./theme.js";let c={id:"sdk.assistant.tool.updateDesign.label",message:"Update design"},m={id:"sdk.assistant.tool.readDesign.label",message:"Read design"},p={id:"sdk.assistant.tool.mistake.hint",message:"The assistant made a mistake."},h=i("div",{name:d,slot:"chips"})(({theme:{palette:t,spacing:e,typography:a}})=>({...a.caption,alignItems:"start",color:t.text.secondary,display:"grid",gap:e(.75),gridTemplateColumns:"min-content minmax(0, 1fr)"})),g=i("span",{name:d,slot:"activity"})(({theme:{typography:t}})=>({blockSize:`calc(${t.caption.lineHeight} * 1em)`,display:"grid",placeItems:"center"})),f=i(l,{name:d,slot:"activityIcon"})({fontSize:14,'[data-chips="active"] &':{animation:"phx-assistant-turn 2.4s linear infinite","@media (prefers-reduced-motion: reduce)":{animation:"none"}},"@keyframes phx-assistant-turn":{to:{rotate:"360deg"}}}),k=i("span",{name:d,slot:"chip"})(({theme:{palette:t,spacing:e}})=>({cursor:"default",display:"inline-block",whiteSpace:"nowrap","&:not(:last-child)::after":{color:t.text.secondary,content:'"\xb7"',display:"inline-block",marginInline:e(.75),textDecoration:"none"},'&[data-chip="failed"]':{color:t.error.main},'&[data-chip="flawed"]':{textDecoration:"line-through",textDecorationColor:t.error.main}})),u=n(({tool:e})=>{let{chip:i,input:n,result:l}=e,d=r(c),h=r(m),g=r(p),f=o(i.label).with({kind:"text"},({text:t})=>t).with({kind:"updateDesign"},()=>d).with({kind:"readDesign"},()=>h).exhaustive(),u=s(()=>{console.info(`Assistant tool call "${f}"`,{input:n,result:l})},[n,f,l]);return t(a,{title:"failed"===i.state||"flawed"===i.state?g:"",placement:"top-start",children:t(k,{onClick:u,"data-chip":i.state,children:f})})});export const AssistantToolChips=n(({tools:a,isActive:i})=>e(h,{"data-chips":i?"active":"done","aria-busy":i,children:[t(g,{children:t(f,{name:"Gear"})}),t("div",{children:a.map(e=>t(u,{tool:e},e.id))})]}));
1
+ import{jsx as t,jsxs as e}from"react/jsx-runtime";import{Tooltip as a,styled as i}from"@mui/material";import{memo as s,useCallback as o}from"react";import{match as n}from"ts-pattern";import{useLocalizable as r}from"#package/react-sdk";import{PhxIcon as l}from"#package/ui-sdk";import{AssistantPanelName as d}from"./theme.js";let m={id:"sdk.assistant.tool.updateDesign.label",message:"Update design"},c={id:"sdk.assistant.tool.readDesign.label",message:"Read design"},p={id:"sdk.assistant.tool.mistake.hint",message:"The assistant made a mistake."},h={id:"sdk.assistant.tool.cancelled.hint",message:"Stopped before it finished."},g={id:"sdk.assistant.tool.noResult.hint",message:"The result of this step was lost. It may or may not have been done."},f={id:"sdk.assistant.tool.toolBudget.hint",message:"Not done: the assistant reached its limit of steps for one message."},u=i("div",{name:d,slot:"chips"})(({theme:{palette:t,spacing:e,typography:a}})=>({...a.caption,alignItems:"start",color:t.text.secondary,display:"grid",gap:e(.75),gridTemplateColumns:"min-content minmax(0, 1fr)"})),k=i("span",{name:d,slot:"activity"})(({theme:{typography:t}})=>({blockSize:`calc(${t.caption.lineHeight} * 1em)`,display:"grid",placeItems:"center"})),x=i(l,{name:d,slot:"activityIcon"})({fontSize:14,'[data-chips="active"] &':{animation:"phx-assistant-turn 2.4s linear infinite","@media (prefers-reduced-motion: reduce)":{animation:"none"}},"@keyframes phx-assistant-turn":{to:{rotate:"360deg"}}}),w=i("span",{name:d,slot:"chip"})(({theme:{palette:t,spacing:e}})=>({cursor:"default",display:"inline-block",whiteSpace:"nowrap","&:not(:last-child)::after":{color:t.text.secondary,content:'"\xb7"',display:"inline-block",marginInline:e(.75),textDecoration:"none"},'&[data-chip="failed"]':{color:t.error.main},'&[data-chip="flawed"]':{textDecoration:"line-through",textDecorationColor:t.error.main}})),y=s(({tool:e})=>{let{chip:i,input:s,result:l}=e,d=r(m),u=r(c),k=r(p),x=r(h),y=r(g),b=r(f),v=n(i.label).with({kind:"text"},({text:t})=>t).with({kind:"updateDesign"},()=>d).with({kind:"readDesign"},()=>u).exhaustive(),C=o(()=>{console.info(`Assistant tool call "${v}"`,{input:s,result:l})},[s,v,l]);return t(a,{title:n(i).with({errorCode:"cancelled"},()=>x).with({errorCode:"no_result"},()=>y).with({errorCode:"tool_budget"},()=>b).with({state:"failed"},{state:"flawed"},()=>k).otherwise(()=>""),placement:"top-start",children:t(w,{onClick:C,"data-chip":i.state,children:v})})});export const AssistantToolChips=s(({tools:a,isActive:i})=>e(u,{"data-chips":i?"active":"done","aria-busy":i,children:[t(k,{children:t(x,{name:"Gear"})}),t("div",{children:a.map(e=>t(y,{tool:e},e.id))})]}));
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * The message input of the panel. Enter sends and Shift+Enter adds a line. While a reply runs the
3
3
  * send control is a Stop control and the input stays editable, so the next message can be written.
4
- * A thread this session may not continue disables the input and says why.
4
+ * A thread this session may not continue takes a message like any other: it is resumed first, with
5
+ * the input read-only meanwhile, and the message stays in the input when that fails.
5
6
  */
6
7
  export declare const AssistantComposer: () => import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- import{jsx as e,jsxs as a}from"react/jsx-runtime";import{Trans as i}from"@lingui/react";import{IconButton as o,InputBase as r,Tooltip as t,styled as n}from"@mui/material";import{useCallback as s,useRef as d,useState as l}from"react";import{useEagerObservableSelector as m,useLocalizable as c}from"#package/react-sdk";import{PhxIcon as p,useResponsive as u}from"#package/ui-sdk";import{useConfigurator as b}from"../../application-runtime/index.js";import{AssistantPanelName as g}from"./theme.js";let h={id:"sdk.assistant.composer.placeholder",message:"Ask or tell me what to change…"},k={id:"sdk.assistant.composer.send.label",message:"Send"},f={id:"sdk.assistant.composer.stop.label",message:"Stop"},x=n("form",{name:g,slot:"composer"})(({theme:{palette:e,spacing:a}})=>({borderBlockStart:`1px solid ${e.divider}`,display:"grid",gap:a(.75),paddingBlock:a(1.25),paddingInline:`var(--phx-sidebar-padding, ${a(2)})`})),y=n("div",{name:g,slot:"inputFrame"})(({theme:{palette:e,spacing:a}})=>({alignItems:"flex-end",border:`1px solid ${e.divider}`,borderRadius:12,display:"flex",gap:a(1),paddingBlock:a(.5),paddingInline:`${a(1.5)} ${a(.5)}`,"&:focus-within":{borderColor:e.primary.main},"&:has(textarea:disabled)":{background:e.action.disabledBackground}})),v=n(r,{name:g,slot:"input"})(({theme:{spacing:e,typography:a}})=>({...a.body2,flex:1,paddingBlock:e(.75)})),B=n(o,{name:g,slot:"sendButton"})(({theme:{palette:e}})=>({background:e.primary.main,borderRadius:8,color:e.primary.contrastText,"&:hover":{background:e.primary.dark},"&.Mui-disabled":{background:e.action.disabledBackground,color:e.action.disabled}})),C=n(o,{name:g,slot:"stopButton"})(({theme:{palette:e}})=>({background:e.text.primary,borderRadius:8,color:e.background.paper,"&:hover":{background:e.text.secondary}})),R=n("span")({background:"currentColor",blockSize:10,borderRadius:2,inlineSize:10,margin:5}),S=n("div",{name:g,slot:"hint"})(({theme:{palette:e,typography:a}})=>({...a.caption,color:e.text.secondary}));export const AssistantComposer=()=>{let{assistantSystem:o}=b(),[r,n]=l(""),g=d(null),{isDesktop:I}=u(),$=c(h),j=c(k),w=c(f),{isReplying:z,isContinuable:F}=m(o.chat$,e=>({isReplying:e.isLoading,isContinuable:e.isContinuable}),[]),A=r.trim(),D=F&&!z&&A.length>0,P=s(()=>{D&&(n(""),o.send(A),I||g.current?.blur())},[o,D,A,I]),T=s(e=>{e.preventDefault(),P()},[P]),E=s(e=>{"Enter"!==e.key||e.shiftKey||e.nativeEvent.isComposing||(e.preventDefault(),P())},[P]),K=s(()=>{o.stop()},[o]);return a(x,{onSubmit:T,children:[!F&&e(S,{role:"status",children:e(i,{id:"sdk.assistant.composer.notContinuable",message:"This conversation can be read here, but it can no longer be continued."})}),a(y,{children:[e(v,{multiline:!0,maxRows:6,placeholder:$,value:r,disabled:!F,inputRef:g,onChange:e=>n(e.target.value),onKeyDown:E,onFocus:()=>o.setInputFocused(!0),onBlur:()=>o.setInputFocused(!1),inputProps:{"aria-label":$}}),z?e(t,{title:w,placement:"top",children:e(C,{size:"small","aria-label":w,onClick:K,children:e(R,{})})}):e(t,{title:j,placement:"top",children:e("span",{children:e(B,{type:"submit",size:"small","aria-label":j,disabled:!D,children:e(p,{name:"PaperPlaneRightBold",fontSize:"small"})})})})]}),e(S,{children:e(i,{id:"sdk.assistant.composer.disclaimer",message:"AI can be wrong. Check the result."})})]})};
1
+ import{jsx as e,jsxs as a}from"react/jsx-runtime";import{Trans as r}from"@lingui/react";import{IconButton as i,InputBase as o,Tooltip as t,styled as n}from"@mui/material";import{useCallback as s,useRef as l,useState as d}from"react";import{useEagerObservableSelector as m,useLocalizable as p}from"#package/react-sdk";import{PhxIcon as c,useResponsive as u}from"#package/ui-sdk";import{useConfigurator as g}from"../../application-runtime/index.js";import{AssistantPanelName as h}from"./theme.js";let b={id:"sdk.assistant.composer.placeholder",message:"Ask or tell me what to change…"},k={id:"sdk.assistant.composer.send.label",message:"Send"},f={id:"sdk.assistant.composer.stop.label",message:"Stop"},y=n("form",{name:h,slot:"composer"})(({theme:{palette:e,spacing:a}})=>({borderBlockStart:`1px solid ${e.divider}`,display:"grid",gap:a(.75),paddingBlock:a(1.25),paddingInline:`var(--phx-sidebar-padding, ${a(2)})`})),x=n("div",{name:h,slot:"inputFrame"})(({theme:{palette:e,spacing:a}})=>({alignItems:"flex-end",border:`1px solid ${e.divider}`,borderRadius:12,display:"flex",gap:a(1),paddingBlock:a(.5),paddingInline:`${a(1.5)} ${a(.5)}`,"&:focus-within":{borderColor:e.primary.main}})),v=n(o,{name:h,slot:"input"})(({theme:{spacing:e,typography:a}})=>({...a.body2,flex:1,paddingBlock:e(.75)})),R=n(i,{name:h,slot:"sendButton"})(({theme:{palette:e}})=>({background:e.primary.main,borderRadius:8,color:e.primary.contrastText,"&:hover":{background:e.primary.dark},"&.Mui-disabled":{background:e.action.disabledBackground,color:e.action.disabled}})),B=n(i,{name:h,slot:"stopButton"})(({theme:{palette:e}})=>({background:e.text.primary,borderRadius:8,color:e.background.paper,"&:hover":{background:e.text.secondary}})),C=n("span")({background:"currentColor",blockSize:10,borderRadius:2,inlineSize:10,margin:5}),S=n("div",{name:h,slot:"hint"})(({theme:{palette:e,typography:a}})=>({...a.caption,color:e.text.secondary}));export const AssistantComposer=()=>{let{assistantSystem:i}=g(),[o,n]=d(""),h=l(null),{isDesktop:w}=u(),I=p(b),$=p(k),j=p(f),{isReplying:z,isResuming:F}=m(i.chat$,e=>({isReplying:e.isLoading,isResuming:e.isResuming}),[]),A=o.trim(),D=!z&&!F&&A.length>0,P=s(async()=>{!D||(w||h.current?.blur(),await i.resume()&&(n(""),i.send(A)))},[i,D,A,w]),E=s(e=>{e.preventDefault(),P()},[P]),K=s(e=>{"Enter"!==e.key||e.shiftKey||e.nativeEvent.isComposing||(e.preventDefault(),P())},[P]),T=s(()=>{i.stop()},[i]);return a(y,{onSubmit:E,children:[a(x,{children:[e(v,{multiline:!0,maxRows:6,placeholder:I,value:o,readOnly:F,inputRef:h,onChange:e=>n(e.target.value),onKeyDown:K,onFocus:()=>i.setInputFocused(!0),onBlur:()=>i.setInputFocused(!1),inputProps:{"aria-label":I}}),z?e(t,{title:j,placement:"top",children:e(B,{size:"small","aria-label":j,onClick:T,children:e(C,{})})}):e(t,{title:$,placement:"top",children:e("span",{children:e(R,{type:"submit",size:"small","aria-label":$,disabled:!D,children:e(c,{name:"PaperPlaneRightBold",fontSize:"small"})})})})]}),e(S,{children:e(r,{id:"sdk.assistant.composer.disclaimer",message:"AI can be wrong. Check the result."})})]})};
@@ -1,6 +1,10 @@
1
1
  /**
2
2
  * The conversation: user bubbles, assistant Markdown, tool chips, and what the panel
3
- * has to say itself, which is a greeting for an empty thread, a "Thinking…" line and a failure with
4
- * its way out. It follows a streaming reply until the user scrolls up.
3
+ * has to say itself, which is a line while the thread loads, a greeting for an empty thread, a
4
+ * "Thinking…" line and a failure with its way out. It follows a streaming reply until the user scrolls up.
5
+ *
6
+ * A conversation the assistant continued from a summary is painted whole: the threads that were
7
+ * closed come first, each ended by a separator, and the ones still on the server are loaded one at a
8
+ * time from a control above them.
5
9
  */
6
10
  export declare const AssistantThread: () => import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- import{jsx as e,jsxs as i}from"react/jsx-runtime";import{Trans as a}from"@lingui/react";import{Button as t,styled as s}from"@mui/material";import{useMemo as r}from"react";import{match as n}from"ts-pattern";import{useEagerObservableValue as o}from"#package/react-sdk";import{PhxIcon as l}from"#package/ui-sdk";import{useConfigurator as d}from"../../application-runtime/index.js";import{AssistantToolChips as m}from"./AssistantChips.js";import{AssistantMarkdown as p}from"./AssistantMarkdown.js";import{describeAssistantFailure as c}from"./assistant-failure.js";import{AssistantPanelName as h}from"./theme.js";import{buildThreadView as g}from"./thread-items.js";import{useFollowStream as u}from"./use-follow-stream.js";let f=s("div",{name:h,slot:"thread"})({display:"grid",position:"relative"}),k=s("div",{name:h,slot:"messages"})(({theme:{spacing:e,typography:i}})=>({...i.body2,display:"flex",flexDirection:"column",gap:e(1.5),overflowY:"auto",overscrollBehavior:"contain",paddingBlock:e(2),paddingInline:`var(--phx-sidebar-padding, ${e(2)})`,"& > :first-child":{marginBlockStart:"auto"}})),v=s("div",{name:h,slot:"userMessage"})(({theme:{palette:e,spacing:i}})=>({alignSelf:"flex-end",background:`hsl(from ${e.primary.main} h s l / 12%)`,borderRadius:"14px 14px 4px 14px",maxInlineSize:"85%",overflowWrap:"anywhere",paddingBlock:i(1),paddingInline:i(1.5),whiteSpace:"pre-wrap"})),w=s("div",{name:h,slot:"greeting"})({}),b=s("div",{name:h,slot:"status"})(({theme:{palette:e,typography:i}})=>({...i.caption,color:e.text.secondary})),x=s("div",{name:h,slot:"notice"})(({theme:{palette:e,shape:i,spacing:a}})=>({alignItems:"center",background:e.action.hover,borderRadius:i.borderRadius,display:"flex",flexWrap:"wrap",gap:a(1),justifyContent:"space-between",paddingBlock:a(1),paddingInline:a(1.5)})),y=s(t,{name:h,slot:"newReplyButton"})(({theme:{palette:e,spacing:i}})=>({background:e.text.primary,borderRadius:"calc(infinity * 1px)",color:e.background.paper,insetBlockEnd:i(1),insetInlineStart:"50%",position:"absolute",translate:"-50% 0","&:hover":{background:e.text.secondary}})),j=({item:i,isActive:a})=>n(i).with({kind:"user"},({text:i})=>e(v,{children:i})).with({kind:"text"},({markdown:i,isStreaming:a})=>e(p,{markdown:i,isStreaming:a})).with({kind:"tools"},({tools:i})=>e(m,{tools:i,isActive:a})).exhaustive();export const AssistantThread=()=>{let{assistantSystem:s}=d(),m=o(s.chat$),{messages:p,isLoading:h}=m,{items:v,isThinking:T}=r(()=>g(p,h),[p,h]),I=r(()=>v.filter(({kind:e})=>"user"===e).length,[v]),S=m.error?c(m.failedStatus):void 0,{scrollerRef:A,hasUnseenContent:B,handleScroll:R,scrollToEnd:C}=u(r(()=>({messages:p,isThinking:T,failure:S?.kind}),[p,T,S?.kind]),I);return i(f,{children:[i(k,{ref:A,onScroll:R,role:"log","aria-live":"polite",children:[m.isLoaded&&0===v.length&&!h&&!S&&e(w,{children:e(a,{id:"sdk.assistant.thread.greeting",message:"Hi. I can answer questions about this design and change it with you. Tell me what you need."})}),v.map(i=>e(j,{item:i,isActive:h&&i===v.at(-1)},i.id)),T&&e(b,{children:e(a,{id:"sdk.assistant.thread.thinking",message:"Thinking…"})}),S&&i(x,{role:"alert",children:[e("span",{children:n(S.kind).with("notAvailable",()=>e(a,{id:"sdk.assistant.failure.notAvailable",message:"The assistant is not available here."})).with("busy",()=>e(a,{id:"sdk.assistant.failure.busy",message:"The assistant is still working on an earlier message."})).with("unavailable",()=>e(a,{id:"sdk.assistant.failure.unavailable",message:"The assistant is unavailable right now."})).exhaustive()}),S.canRetry&&e(t,{size:"small",variant:"outlined",color:"inherit",onClick:s.reloadThread,children:e(a,{id:"sdk.assistant.failure.retry.label",message:"Try again"})})]})]}),B&&e(y,{size:"small",onClick:C,endIcon:e(l,{name:"CaretDown"}),children:e(a,{id:"sdk.assistant.thread.newReply.label",message:"New reply"})})]})};
1
+ import{jsx as e,jsxs as a}from"react/jsx-runtime";import{Trans as i}from"@lingui/react";import{Button as s,styled as t}from"@mui/material";import{useMemo as r}from"react";import{match as n}from"ts-pattern";import{useEagerObservableValue as o}from"#package/react-sdk";import{PhxIcon as l}from"#package/ui-sdk";import{useConfigurator as d}from"../../application-runtime/index.js";import{AssistantToolChips as m}from"./AssistantChips.js";import{AssistantMarkdown as h}from"./AssistantMarkdown.js";import{describeAssistantFailure as c}from"./assistant-failure.js";import{AssistantPanelName as p}from"./theme.js";import{buildEarlierThreadItems as g,buildThreadView as u}from"./thread-items.js";import{useFollowStream as k}from"./use-follow-stream.js";let f=t("div",{name:p,slot:"thread"})({display:"grid",position:"relative"}),v=t("div",{name:p,slot:"messages"})(({theme:{spacing:e,typography:a}})=>({...a.body2,display:"flex",flexDirection:"column",gap:e(1.5),overflowY:"auto",overscrollBehavior:"contain",paddingBlock:e(2),paddingInline:`var(--phx-sidebar-padding, ${e(2)})`,"& > :first-child":{marginBlockStart:"auto"}})),w=t("div",{name:p,slot:"userMessage"})(({theme:{palette:e,spacing:a}})=>({alignSelf:"flex-end",background:`hsl(from ${e.primary.main} h s l / 12%)`,borderRadius:"14px 14px 4px 14px",maxInlineSize:"85%",overflowWrap:"anywhere",paddingBlock:a(1),paddingInline:a(1.5),whiteSpace:"pre-wrap"})),b=t("div",{name:p,slot:"greeting"})({}),x=t("div",{name:p,slot:"status"})(({theme:{palette:e,typography:a}})=>({...a.caption,color:e.text.secondary})),y=t("div",{name:p,slot:"separator"})(({theme:{palette:e,spacing:a,typography:i}})=>({...i.caption,alignItems:"center",color:e.text.secondary,display:"flex",gap:a(1),"&::before, &::after":{borderBlockStart:`1px solid ${e.divider}`,content:'""',flex:1}})),T=t(s,{name:p,slot:"earlierButton"})({alignSelf:"center"}),S=t("div",{name:p,slot:"notice"})(({theme:{palette:e,shape:a,spacing:i}})=>({alignItems:"center",background:e.action.hover,borderRadius:a.borderRadius,display:"flex",flexWrap:"wrap",gap:i(1),justifyContent:"space-between",paddingBlock:i(1),paddingInline:i(1.5)})),j=t(s,{name:p,slot:"newReplyButton"})(({theme:{palette:e,spacing:a}})=>({background:e.text.primary,borderRadius:"calc(infinity * 1px)",color:e.background.paper,insetBlockEnd:a(1),insetInlineStart:"50%",position:"absolute",translate:"-50% 0","&:hover":{background:e.text.secondary}})),B=({item:a,isActive:s})=>n(a).with({kind:"user"},({text:a})=>e(w,{children:a})).with({kind:"text"},({markdown:a,isStreaming:i})=>e(h,{markdown:a,isStreaming:i})).with({kind:"tools"},({tools:a})=>e(m,{tools:a,isActive:s})).with({kind:"separator"},()=>e(y,{role:"separator",children:e(i,{id:"sdk.assistant.thread.earlierSummarized",message:"Earlier conversation summarized"})})).exhaustive();export const AssistantThread=()=>{let{assistantSystem:t}=d(),m=o(t.chat$),{messages:h,isLoading:p,isResuming:w,earlierThreads:y}=m,{items:I,isThinking:A}=r(()=>u(h,p),[h,p]),E=r(()=>g(y),[y]),R=r(()=>I.filter(({kind:e})=>"user"===e).length,[I]),L=m.error?c(m.failedStatus):void 0,{scrollerRef:z,hasUnseenContent:C,handleScroll:$,scrollToEnd:D}=k(r(()=>({messages:h,isThinking:A,isResuming:w,failure:L?.kind}),[h,A,w,L?.kind]),R),M=!m.isLoaded&&0===E.length&&!w&&!L;return a(f,{children:[a(v,{ref:z,onScroll:$,role:"log","aria-live":"polite",children:[m.isLoaded&&0===I.length&&0===E.length&&!p&&!w&&!L&&e(b,{children:e(i,{id:"sdk.assistant.thread.greeting",message:"Hi. I can answer questions about this design and change it with you. Tell me what you need."})}),M&&e(x,{children:e(i,{id:"sdk.assistant.thread.loading",message:"Loading the conversation…"})}),m.isLoadingEarlierThread&&e(x,{children:e(i,{id:"sdk.assistant.thread.loadingEarlier",message:"Loading the earlier conversation…"})}),m.hasEarlierThread&&!m.isLoadingEarlierThread&&e(T,{size:"small",color:"inherit",onClick:t.loadEarlierThread,children:e(i,{id:"sdk.assistant.thread.showEarlier.label",message:"Show earlier conversation"})}),E.map(a=>e(B,{item:a,isActive:!1},a.id)),I.map(a=>e(B,{item:a,isActive:p&&a===I.at(-1)},a.id)),w&&e(x,{children:e(i,{id:"sdk.assistant.thread.resuming",message:"Resuming the conversation…"})}),A&&e(x,{children:e(i,{id:"sdk.assistant.thread.thinking",message:"Thinking…"})}),L&&a(S,{role:"alert",children:[e("span",{children:n(L.kind).with("notAvailable",()=>e(i,{id:"sdk.assistant.failure.notAvailable",message:"The assistant is not available here."})).with("busy",()=>e(i,{id:"sdk.assistant.failure.busy",message:"The assistant is still working on an earlier message."})).with("unavailable",()=>e(i,{id:"sdk.assistant.failure.unavailable",message:"The assistant is unavailable right now."})).exhaustive()}),L.canRetry&&e(s,{size:"small",variant:"outlined",color:"inherit",onClick:t.reloadThread,children:e(i,{id:"sdk.assistant.failure.retry.label",message:"Try again"})})]})]}),C&&e(j,{size:"small",onClick:D,endIcon:e(l,{name:"CaretDown"}),children:e(i,{id:"sdk.assistant.thread.newReply.label",message:"New reply"})})]})};
@@ -1,4 +1,5 @@
1
1
  import type { UIMessage } from '@tanstack/ai-client';
2
+ import type { AssistantEarlierThreadSnapshot } from '../../application-runtime/index.js';
2
3
  import { type AssistantToolChip } from './tool-chip.js';
3
4
  /** A tool call of the thread, with what its chip shows and what a click on the chip logs. */
4
5
  export interface AssistantToolItem {
@@ -8,8 +9,9 @@ export interface AssistantToolItem {
8
9
  readonly result: unknown;
9
10
  }
10
11
  /**
11
- * One block of the thread, in reading order: a user bubble, a stretch of assistant Markdown, or a
12
- * row of chips for the tool calls that follow each other without text in between.
12
+ * One block of the thread, in reading order: a user bubble, a stretch of assistant Markdown, a row
13
+ * of chips for the tool calls that follow each other without text in between, or the line that
14
+ * ends a closed thread of the conversation.
13
15
  */
14
16
  export type AssistantThreadItem = {
15
17
  readonly kind: 'user';
@@ -24,6 +26,9 @@ export type AssistantThreadItem = {
24
26
  readonly kind: 'tools';
25
27
  readonly id: string;
26
28
  readonly tools: readonly AssistantToolItem[];
29
+ } | {
30
+ readonly kind: 'separator';
31
+ readonly id: string;
27
32
  };
28
33
  export interface AssistantThreadView {
29
34
  readonly items: readonly AssistantThreadItem[];
@@ -35,3 +40,9 @@ export interface AssistantThreadView {
35
40
  * results are not shown on their own but decide the state of the chip of their call.
36
41
  */
37
42
  export declare const buildThreadView: (messages: ReadonlyArray<UIMessage>, isReplying: boolean) => AssistantThreadView;
43
+ /**
44
+ * Lays the closed threads of the conversation out above the thread that continues them, oldest
45
+ * first, each ended by a separator: the assistant read on from a summary of it, not from the
46
+ * messages themselves.
47
+ */
48
+ export declare const buildEarlierThreadItems: (earlierThreads: ReadonlyArray<AssistantEarlierThreadSnapshot>) => readonly AssistantThreadItem[];
@@ -1 +1 @@
1
- import{describeToolCall as t}from"./tool-chip.js";let e=t=>{try{return JSON.parse(t)}catch{return t}},r=t=>t.map(t=>"text"===t.type?t.content:"").join("").trim();export const buildThreadView=(o,n)=>{let l=(t=>{let r=new Map;for(let o of t)for(let t of o.parts)"tool-result"===t.type&&r.set(t.toolCallId,{result:"string"==typeof t.content?e(t.content):t.content,error:"error"===t.state?t.error??"The tool call failed.":void 0});return r})(o),i=[],s=o.at(-1),a=t=>{let e=i.at(-1);e?.kind==="tools"?i[i.length-1]={...e,tools:[...e.tools,t]}:i.push({kind:"tools",id:t.id,tools:[t]})};for(let e of o){if("user"===e.role){let t=r(e.parts);t&&i.push({kind:"user",id:e.id,text:t});continue}let o=n&&e===s;e.parts.forEach((r,n)=>{let s=`${e.id}:${n}`;if("text"===r.type){if(r.content.trim()){let t=o&&n===e.parts.length-1;i.push({kind:"text",id:s,markdown:r.content,isStreaming:t})}return}if("tool-call"!==r.type)return;let p=l.get(r.id),d=r.input,u=r.output??p?.result;a({id:r.id,input:d,result:u,chip:t({name:r.name,input:d,result:u,error:p?.error,isReplyRunning:o})})})}let p=i.at(-1),d=s?.role==="assistant"&&(p?.kind==="text"&&p.isStreaming||p?.kind==="tools");return{items:i,isThinking:n&&!d}};
1
+ import{describeToolCall as t}from"./tool-chip.js";let e=t=>{try{return JSON.parse(t)}catch{return t}},r=t=>t.map(t=>"text"===t.type?t.content:"").join("").trim();export const buildThreadView=(o,i)=>{let l=(t=>{let r=new Map;for(let o of t)for(let t of o.parts)"tool-result"===t.type&&r.set(t.toolCallId,{result:"string"==typeof t.content?e(t.content):t.content,error:"error"===t.state?t.error??"The tool call failed.":void 0});return r})(o),n=[],a=o.at(-1),s=t=>{let e=n.at(-1);e?.kind==="tools"?n[n.length-1]={...e,tools:[...e.tools,t]}:n.push({kind:"tools",id:t.id,tools:[t]})};for(let e of o){if("user"===e.role){let t=r(e.parts);t&&n.push({kind:"user",id:e.id,text:t});continue}let o=i&&e===a;e.parts.forEach((r,i)=>{let a=`${e.id}:${i}`;if("text"===r.type){if(r.content.trim()){let t=o&&i===e.parts.length-1;n.push({kind:"text",id:a,markdown:r.content,isStreaming:t})}return}if("tool-call"!==r.type)return;let d=l.get(r.id),p=r.input,u=r.output??d?.result;s({id:r.id,input:p,result:u,chip:t({name:r.name,input:p,result:u,error:d?.error,isReplyRunning:o})})})}let d=n.at(-1),p=a?.role==="assistant"&&(d?.kind==="text"&&d.isStreaming||d?.kind==="tools");return{items:n,isThinking:i&&!p}};export const buildEarlierThreadItems=t=>t.flatMap(({threadId:t,messages:e})=>[...buildThreadView(e,!1).items.map(e=>({...e,id:`${t}:${e.id}`})),{kind:"separator",id:`${t}:separator`}]);
@@ -1,3 +1,4 @@
1
+ import { type AssistantToolErrorCode } from '@salsita-ai/contracts/assistant';
1
2
  /**
2
3
  * How a tool call of the assistant looks in the thread: still running, finished, a change that was
3
4
  * not kept (`failed`), or a read that answered with errors (`flawed`), which matters less because
@@ -16,6 +17,11 @@ export type AssistantToolChipLabel = {
16
17
  export interface AssistantToolChip {
17
18
  readonly label: AssistantToolChipLabel;
18
19
  readonly state: AssistantToolChipState;
20
+ /**
21
+ * Why the server recorded an error in place of the call's result, when it said so with a code this
22
+ * panel knows. Nothing for a call that went wrong for any other reason.
23
+ */
24
+ readonly errorCode: AssistantToolErrorCode | undefined;
19
25
  }
20
26
  /** A tool call of a message as the chip reads it. */
21
27
  export interface AssistantToolCall {
@@ -32,6 +38,7 @@ export interface AssistantToolCall {
32
38
  /**
33
39
  * Describes one tool call for its chip: the label in the order operation names, fixed text for the
34
40
  * `apply` and `query` tools, tool name; and whether the call runs, finished, or went wrong. Why it
35
- * went wrong is not part of it: the tool result words that for the model, not for the user.
41
+ * went wrong is part of it only as the code of an error the server recorded: the text of a tool
42
+ * result is worded for the model, not for the user.
36
43
  */
37
44
  export declare const describeToolCall: (call: AssistantToolCall) => AssistantToolChip;