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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (823) hide show
  1. package/README.md +19 -14
  2. package/dist/admin/default-admin-elements.d.ts +9 -0
  3. package/dist/admin/default-admin-elements.js +1 -0
  4. package/dist/admin/default-elements/built-in-entity-element.d.ts +10 -0
  5. package/dist/admin/default-elements/built-in-entity-element.js +1 -0
  6. package/dist/admin/default-elements/built-in-layout-element.d.ts +10 -0
  7. package/dist/admin/default-elements/built-in-layout-element.js +1 -0
  8. package/dist/admin/default-elements/index.d.ts +2 -0
  9. package/dist/admin/default-elements/index.js +1 -0
  10. package/dist/admin/index.d.ts +1 -0
  11. package/dist/admin/index.js +1 -1
  12. package/dist/application-spec/caching/content-diff.js +1 -1
  13. package/dist/application-spec/core/application-file.d.ts +0 -2
  14. package/dist/application-spec/core/application-file.js +1 -1
  15. package/dist/application-spec/errors/diagnostic-codes.d.ts +9 -0
  16. package/dist/application-spec/errors/diagnostic-codes.js +1 -1
  17. package/dist/application-spec/errors/diagnostic-messages.d.ts +9 -0
  18. package/dist/application-spec/errors/diagnostic-messages.js +1 -1
  19. package/dist/application-spec/generate-application/code/common/code-imports.js +1 -1
  20. package/dist/application-spec/generate-application/code/common/env-reader.js +2 -2
  21. package/dist/application-spec/generate-application/code/common/index.d.ts +1 -0
  22. package/dist/application-spec/generate-application/code/common/index.js +1 -1
  23. package/dist/application-spec/generate-application/code/common/single-quoted-string.d.ts +6 -0
  24. package/dist/application-spec/generate-application/code/common/single-quoted-string.js +1 -0
  25. package/dist/application-spec/generate-application/code/domain-runtime-files.js +1 -1
  26. package/dist/application-spec/generate-application/code/generate-application-code.d.ts +3 -2
  27. package/dist/application-spec/generate-application/code/generate-application-code.js +1 -1
  28. package/dist/application-spec/generate-application/code/project-scaffolding.d.ts +15 -14
  29. package/dist/application-spec/generate-application/code/project-scaffolding.js +2 -2
  30. package/dist/application-spec/generate-application/code/standalone-app-files.d.ts +2 -2
  31. package/dist/application-spec/generate-application/code/standalone-app-files.js +1 -1
  32. package/dist/application-spec/generate-application/code/story-files.js +1 -1
  33. package/dist/application-spec/generate-application/code/templates/admin-config.js +3 -0
  34. package/dist/application-spec/generate-application/code/templates/application-types.js +6 -6
  35. package/dist/application-spec/generate-application/code/templates/common/doc-comment.d.ts +2 -0
  36. package/dist/application-spec/generate-application/code/templates/common/doc-comment.js +1 -0
  37. package/dist/application-spec/generate-application/code/templates/common/format-property-key.d.ts +7 -0
  38. package/dist/application-spec/generate-application/code/templates/common/format-property-key.js +1 -0
  39. package/dist/application-spec/generate-application/code/templates/common/schema-to-type-string.js +3 -3
  40. package/dist/application-spec/generate-application/code/templates/configurator-config.js +6 -4
  41. package/dist/application-spec/generate-application/code/templates/configurator-globals.d.ts +2 -1
  42. package/dist/application-spec/generate-application/code/templates/configurator-globals.js +19 -6
  43. package/dist/application-spec/generate-application/code/templates/domain-spec/factory-types/domain-factory-types.d.ts +35 -0
  44. package/dist/application-spec/generate-application/code/templates/domain-spec/factory-types/domain-factory-types.js +5 -0
  45. package/dist/application-spec/generate-application/code/templates/domain-spec/factory-types/index.d.ts +1 -0
  46. package/dist/application-spec/generate-application/code/templates/domain-spec/factory-types/index.js +1 -0
  47. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-component-optics.d.ts +1 -1
  48. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-component-optics.js +6 -6
  49. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-domain-block.js +59 -63
  50. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-invariants.d.ts +8 -0
  51. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-invariants.js +1 -1
  52. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-presets.js +1 -1
  53. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-resources.js +13 -13
  54. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-states.d.ts +1 -1
  55. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-states.js +2 -2
  56. package/dist/application-spec/generate-application/code/templates/domain-spec/index.d.ts +2 -1
  57. package/dist/application-spec/generate-application/code/templates/domain-spec/index.js +1 -1
  58. package/dist/application-spec/generate-application/code/templates/eslint-config.d.ts +5 -0
  59. package/dist/application-spec/generate-application/code/templates/eslint-config.js +4 -5
  60. package/dist/application-spec/generate-application/code/templates/frontend-config.js +3 -5
  61. package/dist/application-spec/generate-application/code/templates/gitignore.js +0 -3
  62. package/dist/application-spec/generate-application/code/templates/global-definition/generate-action-types.js +7 -7
  63. package/dist/application-spec/generate-application/code/templates/global-definition/generate-assistant-form-element-types.d.ts +12 -0
  64. package/dist/application-spec/generate-application/code/templates/global-definition/generate-assistant-form-element-types.js +7 -0
  65. package/dist/application-spec/generate-application/code/templates/global-definition/generate-phx-types.d.ts +43 -0
  66. package/dist/application-spec/generate-application/code/templates/global-definition/generate-phx-types.js +33 -0
  67. package/dist/application-spec/generate-application/code/templates/global-definition/index.d.ts +2 -0
  68. package/dist/application-spec/generate-application/code/templates/global-definition/index.js +1 -1
  69. package/dist/application-spec/generate-application/code/templates/globals.js +24 -44
  70. package/dist/application-spec/generate-application/code/templates/index.d.ts +3 -3
  71. package/dist/application-spec/generate-application/code/templates/index.js +1 -1
  72. package/dist/application-spec/generate-application/code/templates/lingui-rc.d.ts +5 -0
  73. package/dist/application-spec/generate-application/code/templates/lingui-rc.js +4 -4
  74. package/dist/application-spec/generate-application/code/templates/prettier-config.d.ts +5 -0
  75. package/dist/application-spec/generate-application/code/templates/prettier-config.js +4 -5
  76. package/dist/application-spec/generate-application/code/templates/root-tsconfig.d.ts +6 -0
  77. package/dist/application-spec/generate-application/code/templates/root-tsconfig.js +2 -0
  78. package/dist/application-spec/generate-application/code/templates/skills/phoenix-cli-skill.js +1 -1
  79. package/dist/application-spec/generate-application/code/templates/skills/phoenix-create-configurator-skill.js +1 -1
  80. package/dist/application-spec/generate-application/code/templates/skills/phoenix-feedback-skill.js +5 -5
  81. package/dist/application-spec/generate-application/code/templates/skills/phoenix-review-skill.js +3 -3
  82. package/dist/application-spec/generate-application/code/templates/skills/phoenix-skill.js +1 -1
  83. package/dist/application-spec/generate-application/code/templates/skills/phoenix-variants-skill.js +2 -2
  84. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.d.ts +25 -7
  85. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.js +2 -2
  86. package/dist/application-spec/generate-application/code/templates/spec-code/collect-spec-code.d.ts +58 -0
  87. package/dist/application-spec/generate-application/code/templates/spec-code/collect-spec-code.js +1 -0
  88. package/dist/application-spec/generate-application/code/templates/spec-code/index.d.ts +2 -0
  89. package/dist/application-spec/generate-application/code/templates/spec-code/index.js +1 -0
  90. package/dist/application-spec/generate-application/code/templates/spec-code/spec-code.d.ts +18 -0
  91. package/dist/application-spec/generate-application/code/templates/spec-code/spec-code.js +41 -0
  92. package/dist/application-spec/generate-application/code/templates/spec-messages/index.d.ts +1 -0
  93. package/dist/application-spec/generate-application/code/templates/spec-messages/index.js +1 -0
  94. package/dist/application-spec/generate-application/code/templates/spec-messages/spec-messages.d.ts +20 -0
  95. package/dist/application-spec/generate-application/code/templates/spec-messages/spec-messages.js +6 -0
  96. package/dist/application-spec/generate-application/code/templates/story/phx-module.d.ts +8 -2
  97. package/dist/application-spec/generate-application/code/templates/story/phx-module.js +15 -3
  98. package/dist/application-spec/generate-application/code/templates/story/wrapper.d.ts +3 -0
  99. package/dist/application-spec/generate-application/code/templates/story/wrapper.js +2 -1
  100. package/dist/application-spec/generate-application/code/templates/tsconfig.d.ts +5 -0
  101. package/dist/application-spec/generate-application/code/templates/tsconfig.js +1 -1
  102. package/dist/application-spec/generate-application/code/templates/webhook-index.d.ts +6 -1
  103. package/dist/application-spec/generate-application/code/templates/webhook-index.js +10 -1
  104. package/dist/application-spec/generate-application/code/templates/webhooks-config.js +2 -3
  105. package/dist/application-spec/generate-application/index.d.ts +2 -0
  106. package/dist/application-spec/generate-application/index.js +1 -1
  107. package/dist/application-spec/generate-application/runtime/admin-runtime/admin-model-runtime.d.ts +6 -4
  108. package/dist/application-spec/generate-application/runtime/admin-runtime/admin-model-runtime.js +1 -1
  109. package/dist/application-spec/generate-application/runtime/admin-runtime/admin-runtime.d.ts +8 -3
  110. package/dist/application-spec/generate-application/runtime/admin-runtime/admin-runtime.js +1 -1
  111. package/dist/application-spec/generate-application/runtime/admin-runtime/states-runtime.d.ts +2 -2
  112. package/dist/application-spec/generate-application/runtime/application-runtime.d.ts +19 -5
  113. package/dist/application-spec/generate-application/runtime/application-runtime.js +1 -1
  114. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-model-runtime.d.ts +6 -4
  115. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-model-runtime.js +1 -1
  116. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-runtime.d.ts +7 -2
  117. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-runtime.js +1 -1
  118. package/dist/application-spec/generate-application/runtime/configurator-runtime/states-runtime.d.ts +2 -2
  119. package/dist/application-spec/generate-application/runtime/factory-data/factory-data-runtime.d.ts +43 -0
  120. package/dist/application-spec/generate-application/runtime/factory-data/factory-data-runtime.js +1 -0
  121. package/dist/application-spec/generate-application/runtime/factory-data/index.d.ts +3 -0
  122. package/dist/application-spec/generate-application/runtime/factory-data/index.js +1 -0
  123. package/dist/application-spec/generate-application/runtime/factory-data/recipe-defaults.d.ts +13 -0
  124. package/dist/application-spec/generate-application/runtime/factory-data/recipe-defaults.js +1 -0
  125. package/dist/application-spec/generate-application/runtime/factory-data/static-violations.d.ts +16 -0
  126. package/dist/application-spec/generate-application/runtime/factory-data/static-violations.js +1 -0
  127. package/dist/application-spec/generate-application/runtime/migrations/index.d.ts +1 -0
  128. package/dist/application-spec/generate-application/runtime/migrations/index.js +1 -0
  129. package/dist/application-spec/generate-application/runtime/migrations/migration-runtime.d.ts +53 -0
  130. package/dist/application-spec/generate-application/runtime/migrations/migration-runtime.js +1 -0
  131. package/dist/application-spec/generate-application/runtime/sections/assistant-runtime.d.ts +2 -2
  132. package/dist/application-spec/generate-application/runtime/sections/build-sdk-optic.d.ts +2 -1
  133. package/dist/application-spec/generate-application/runtime/sections/build-sdk-optic.js +1 -1
  134. package/dist/application-spec/generate-application/runtime/sections/build-user-bound-optic.d.ts +2 -1
  135. package/dist/application-spec/generate-application/runtime/sections/build-user-bound-optic.js +1 -1
  136. package/dist/application-spec/generate-application/runtime/sections/component-optic.d.ts +3 -0
  137. package/dist/application-spec/generate-application/runtime/sections/component-optic.js +1 -1
  138. package/dist/application-spec/generate-application/runtime/sections/data-runtime.d.ts +4 -4
  139. package/dist/application-spec/generate-application/runtime/sections/expression-runtime.d.ts +7 -4
  140. package/dist/application-spec/generate-application/runtime/sections/expression-runtime.js +1 -1
  141. package/dist/application-spec/generate-application/runtime/sections/generate-memo-eval-plan-runtime.d.ts +9 -5
  142. package/dist/application-spec/generate-application/runtime/sections/generate-memo-eval-plan-runtime.js +1 -1
  143. package/dist/application-spec/generate-application/runtime/sections/reflection-constants-runtime.d.ts +3 -1
  144. package/dist/application-spec/generate-application/runtime/sections/reflection-constants-runtime.js +1 -1
  145. package/dist/application-spec/generate-application/runtime/sections/theme-runtime.d.ts +2 -2
  146. package/dist/application-spec/generate-application/runtime/sections/transformers-runtime.d.ts +3 -3
  147. package/dist/application-spec/generate-application/runtime/spec-code/index.d.ts +2 -0
  148. package/dist/application-spec/generate-application/runtime/spec-code/index.js +1 -0
  149. package/dist/application-spec/generate-application/runtime/spec-code/resolve-spec-code.d.ts +18 -0
  150. package/dist/application-spec/generate-application/runtime/spec-code/resolve-spec-code.js +1 -0
  151. package/dist/application-spec/generate-application/runtime/spec-code/spec-code-module.d.ts +17 -0
  152. package/dist/application-spec/generate-application/runtime/spec-code/spec-code-module.js +1 -0
  153. package/dist/application-spec/generate-application/runtime-spec/decode-runtime-spec.d.ts +9 -0
  154. package/dist/application-spec/generate-application/runtime-spec/decode-runtime-spec.js +1 -0
  155. package/dist/application-spec/generate-application/runtime-spec/encode-runtime-spec.d.ts +8 -0
  156. package/dist/application-spec/generate-application/runtime-spec/encode-runtime-spec.js +1 -0
  157. package/dist/application-spec/generate-application/runtime-spec/encoded-runtime-spec.d.ts +27 -0
  158. package/dist/application-spec/generate-application/runtime-spec/encoded-runtime-spec.js +1 -0
  159. package/dist/application-spec/generate-application/runtime-spec/index.d.ts +5 -0
  160. package/dist/application-spec/generate-application/runtime-spec/index.js +1 -0
  161. package/dist/application-spec/generate-application/runtime-spec/runtime-spec.d.ts +68 -0
  162. package/dist/application-spec/generate-application/runtime-spec/runtime-spec.js +1 -0
  163. package/dist/application-spec/generate-application/runtime-spec/spec-code-id.d.ts +40 -0
  164. package/dist/application-spec/generate-application/runtime-spec/spec-code-id.js +1 -0
  165. package/dist/application-spec/parse-application-files/categorize/categorize-files.d.ts +34 -0
  166. package/dist/application-spec/parse-application-files/categorize/categorize-files.js +1 -1
  167. package/dist/application-spec/parse-application-files/categorize/earlier-generated-editor-configs.d.ts +16 -0
  168. package/dist/application-spec/parse-application-files/categorize/earlier-generated-editor-configs.js +9 -0
  169. package/dist/application-spec/parse-application-files/categorize/earlier-generated-tsconfig.d.ts +9 -0
  170. package/dist/application-spec/parse-application-files/categorize/earlier-generated-tsconfig.js +1 -0
  171. package/dist/application-spec/parse-application-files/raw-spec/parse-yaml-spec-file.js +1 -1
  172. package/dist/application-spec/parse-application-files/raw-spec/raw-assistant.d.ts +19 -2
  173. package/dist/application-spec/parse-application-files/raw-spec/raw-assistant.js +1 -1
  174. package/dist/application-spec/parse-application-files/spec/application/admin-spec/admin-spec.js +1 -1
  175. package/dist/application-spec/parse-application-files/spec/application/configurator-spec/configurator-spec.js +1 -1
  176. package/dist/application-spec/parse-application-files/spec/common/index.d.ts +1 -0
  177. package/dist/application-spec/parse-application-files/spec/common/index.js +1 -1
  178. package/dist/application-spec/parse-application-files/spec/common/value-type/format-value-type.d.ts +3 -0
  179. package/dist/application-spec/parse-application-files/spec/common/value-type/format-value-type.js +1 -0
  180. package/dist/application-spec/parse-application-files/spec/common/value-type/index.d.ts +5 -0
  181. package/dist/application-spec/parse-application-files/spec/common/value-type/index.js +1 -0
  182. package/dist/application-spec/parse-application-files/spec/common/value-type/intersect-value-types.d.ts +6 -0
  183. package/dist/application-spec/parse-application-files/spec/common/value-type/intersect-value-types.js +1 -0
  184. package/dist/application-spec/parse-application-files/spec/common/value-type/is-assignable-value-type.d.ts +8 -0
  185. package/dist/application-spec/parse-application-files/spec/common/value-type/is-assignable-value-type.js +1 -0
  186. package/dist/application-spec/parse-application-files/spec/common/value-type/value-type-at.d.ts +10 -0
  187. package/dist/application-spec/parse-application-files/spec/common/value-type/value-type-at.js +1 -0
  188. package/dist/application-spec/parse-application-files/spec/common/value-type/value-type.d.ts +98 -0
  189. package/dist/application-spec/parse-application-files/spec/common/value-type/value-type.js +1 -0
  190. package/dist/application-spec/parse-application-files/spec/components/bindings/component-path.d.ts +13 -0
  191. package/dist/application-spec/parse-application-files/spec/components/bindings/component-path.js +1 -0
  192. package/dist/application-spec/parse-application-files/spec/components/bindings/index.d.ts +2 -0
  193. package/dist/application-spec/parse-application-files/spec/components/bindings/index.js +1 -1
  194. package/dist/application-spec/parse-application-files/spec/components/bindings/read-binding-type.d.ts +24 -0
  195. package/dist/application-spec/parse-application-files/spec/components/bindings/read-binding-type.js +1 -0
  196. package/dist/application-spec/parse-application-files/spec/components/component-state-type.d.ts +8 -0
  197. package/dist/application-spec/parse-application-files/spec/components/component-state-type.js +1 -0
  198. package/dist/application-spec/parse-application-files/spec/components/filter-criterion-types.d.ts +13 -0
  199. package/dist/application-spec/parse-application-files/spec/components/filter-criterion-types.js +1 -0
  200. package/dist/application-spec/parse-application-files/spec/components/static-entity-id.d.ts +14 -0
  201. package/dist/application-spec/parse-application-files/spec/components/static-entity-id.js +1 -0
  202. package/dist/application-spec/parse-application-files/spec/components/user-component-entry.d.ts +6 -0
  203. package/dist/application-spec/parse-application-files/spec/components/user-component-entry.js +1 -1
  204. package/dist/application-spec/parse-application-files/spec/components/user-components.d.ts +7 -4
  205. package/dist/application-spec/parse-application-files/spec/components/user-components.js +1 -1
  206. package/dist/application-spec/parse-application-files/spec/expressions/expression-read-types.d.ts +24 -0
  207. package/dist/application-spec/parse-application-files/spec/expressions/expression-read-types.js +1 -0
  208. package/dist/application-spec/parse-application-files/spec/expressions/expression-read.d.ts +13 -0
  209. package/dist/application-spec/parse-application-files/spec/expressions/expression-read.js +1 -0
  210. package/dist/application-spec/parse-application-files/spec/expressions/expression-value-type.d.ts +9 -0
  211. package/dist/application-spec/parse-application-files/spec/expressions/expression-value-type.js +1 -0
  212. package/dist/application-spec/parse-application-files/spec/expressions/expressions.d.ts +6 -2
  213. package/dist/application-spec/parse-application-files/spec/expressions/expressions.js +1 -1
  214. package/dist/application-spec/parse-application-files/spec/expressions/user-expressions.d.ts +3 -1
  215. package/dist/application-spec/parse-application-files/spec/expressions/user-expressions.js +1 -1
  216. package/dist/application-spec/parse-application-files/spec/invariants/invariants.d.ts +2 -2
  217. package/dist/application-spec/parse-application-files/spec/invariants/invariants.js +1 -1
  218. package/dist/application-spec/parse-application-files/spec/model/index.d.ts +1 -0
  219. package/dist/application-spec/parse-application-files/spec/model/index.js +1 -1
  220. package/dist/application-spec/parse-application-files/spec/model/model-type-resolution.d.ts +10 -0
  221. package/dist/application-spec/parse-application-files/spec/model/model-type-resolution.js +1 -0
  222. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-form-elements.d.ts +9 -0
  223. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-form-elements.js +1 -0
  224. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-schema.js +1 -1
  225. package/dist/client/phoenix-api.d.ts +367 -0
  226. package/dist/configurator/ConfiguratorApp.js +1 -1
  227. package/dist/configurator/app-loader-content/DefaultAppLoaderContent.d.ts +2 -0
  228. package/dist/configurator/app-loader-content/DefaultAppLoaderContent.js +5 -0
  229. package/dist/configurator/app-loader-content/app-loader-content-name.d.ts +5 -0
  230. package/dist/configurator/app-loader-content/app-loader-content-name.js +1 -0
  231. package/dist/configurator/app-loader-content/index.d.ts +2 -0
  232. package/dist/configurator/app-loader-content/index.js +1 -0
  233. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.d.ts +36 -1
  234. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.js +1 -1
  235. package/dist/configurator/application-runtime/extensions/systems/assistant-system/graphql-tools.d.ts +7 -1
  236. package/dist/configurator/application-runtime/extensions/systems/assistant-system/graphql-tools.js +1 -1
  237. package/dist/configurator/application-runtime/extensions/systems/camera-control-system/camera-control-system.d.ts +1 -1
  238. package/dist/configurator/application-runtime/extensions/systems/canvas-system.d.ts +8 -0
  239. package/dist/configurator/application-runtime/extensions/systems/canvas-system.js +1 -1
  240. package/dist/configurator/application-runtime/extensions/systems/export-system/export-system.js +1 -1
  241. package/dist/configurator/application-runtime/extensions/systems/graphql-system/close-unclosed-braces.d.ts +12 -0
  242. package/dist/configurator/application-runtime/extensions/systems/graphql-system/close-unclosed-braces.js +1 -0
  243. package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.d.ts +7 -1
  244. package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.js +1 -1
  245. package/dist/configurator/application-runtime/extensions/systems/image-rendering-system/image-rendering-system.js +1 -1
  246. package/dist/configurator/common/configurator-interface.d.ts +131 -4
  247. package/dist/configurator/common/configurator-interface.js +1 -1
  248. package/dist/configurator/common/index.d.ts +3 -1
  249. package/dist/configurator/common/index.js +1 -1
  250. package/dist/configurator/common/use-reset-camera.d.ts +6 -0
  251. package/dist/configurator/common/use-reset-camera.js +1 -0
  252. package/dist/configurator/configuration-not-found-page/ConfigurationNotFoundPageElement.d.ts +12 -0
  253. package/dist/configurator/configuration-not-found-page/ConfigurationNotFoundPageElement.js +1 -0
  254. package/dist/configurator/configuration-not-found-page/create-configuration-not-found-page.d.ts +9 -0
  255. package/dist/configurator/configuration-not-found-page/create-configuration-not-found-page.js +1 -0
  256. package/dist/configurator/configuration-not-found-page/index.d.ts +2 -0
  257. package/dist/configurator/configuration-not-found-page/index.js +1 -0
  258. package/dist/configurator/configurator-context/ConfiguratorResponsiveProvider.d.ts +12 -0
  259. package/dist/configurator/configurator-context/ConfiguratorResponsiveProvider.js +1 -0
  260. package/dist/configurator/configurator-context/PresetSelectionProvider.js +1 -1
  261. package/dist/configurator/configurator-context/PreviewContextProvider.js +1 -1
  262. package/dist/configurator/configurator-context/ViewportStateSync.d.ts +2 -2
  263. package/dist/configurator/configurator-context/ViewportStateSync.js +1 -1
  264. package/dist/configurator/configurator-context/configurator-hooks/layout-hooks.d.ts +10 -0
  265. package/dist/configurator/configurator-context/configurator-routing/ConfiguratorRoutingProvider.js +1 -1
  266. package/dist/configurator/configurator-error-page/BuiltInConfiguratorErrorPage.d.ts +6 -0
  267. package/dist/configurator/configurator-error-page/BuiltInConfiguratorErrorPage.js +1 -0
  268. package/dist/configurator/configurator-error-page/ConfiguratorErrorPageElement.d.ts +12 -0
  269. package/dist/configurator/configurator-error-page/ConfiguratorErrorPageElement.js +1 -0
  270. package/dist/configurator/configurator-error-page/create-configurator-error-page.d.ts +9 -0
  271. package/dist/configurator/configurator-error-page/create-configurator-error-page.js +1 -0
  272. package/dist/configurator/configurator-error-page/index.d.ts +3 -0
  273. package/dist/configurator/configurator-error-page/index.js +1 -0
  274. package/dist/configurator/index.d.ts +3 -0
  275. package/dist/configurator/index.js +1 -1
  276. package/dist/configurator/pages/ConfiguratorErrorPage.d.ts +0 -1
  277. package/dist/configurator/pages/ConfiguratorErrorPage.js +1 -1
  278. package/dist/configurator/pages/ConfiguratorNotFoundPage.js +1 -1
  279. package/dist/configurator/pages/DefaultConfiguratorLayout.d.ts +3 -2
  280. package/dist/configurator/pages/DefaultNotAuthenticatedPage.d.ts +8 -0
  281. package/dist/configurator/pages/DefaultNotAuthenticatedPage.js +1 -0
  282. package/dist/configurator/pages/DefaultPresetUi.d.ts +7 -0
  283. package/dist/configurator/pages/DefaultPresetUi.js +1 -0
  284. package/dist/configurator/pages/LoadedConfiguratorDetailPage.js +1 -1
  285. package/dist/configurator/pages/NewConfiguratorPage.js +1 -1
  286. package/dist/configurator/pages/PresetCreationErrorPage.d.ts +1 -1
  287. package/dist/configurator/pages/PresetCreationErrorPage.js +1 -1
  288. package/dist/configurator/pages/RootPage.js +1 -1
  289. package/dist/configurator/pages/configurator-layout-name.d.ts +2 -0
  290. package/dist/configurator/pages/configurator-layout-name.js +1 -0
  291. package/dist/configurator/pages/default-configurator-elements.d.ts +13 -0
  292. package/dist/configurator/pages/default-configurator-elements.js +1 -0
  293. package/dist/configurator/pages/default-elements/built-in-entity-element.d.ts +10 -0
  294. package/dist/configurator/pages/default-elements/built-in-entity-element.js +1 -0
  295. package/dist/configurator/pages/default-elements/built-in-layout-element.d.ts +10 -0
  296. package/dist/configurator/pages/default-elements/built-in-layout-element.js +1 -0
  297. package/dist/configurator/pages/default-elements/domain-control-elements.d.ts +6 -0
  298. package/dist/configurator/pages/default-elements/domain-control-elements.js +1 -0
  299. package/dist/configurator/pages/default-elements/index.d.ts +5 -0
  300. package/dist/configurator/pages/default-elements/index.js +1 -0
  301. package/dist/configurator/pages/default-elements/recipe-panel-elements.d.ts +3 -0
  302. package/dist/configurator/pages/default-elements/recipe-panel-elements.js +1 -0
  303. package/dist/configurator/pages/default-elements/scene-controls/BuiltInAddEntityFab.d.ts +3 -0
  304. package/dist/configurator/pages/default-elements/scene-controls/BuiltInAddEntityFab.js +1 -0
  305. package/dist/configurator/pages/default-elements/scene-controls/BuiltInDeleteEntityFab.d.ts +3 -0
  306. package/dist/configurator/pages/default-elements/scene-controls/BuiltInDeleteEntityFab.js +1 -0
  307. package/dist/configurator/pages/default-elements/scene-controls/BuiltInNavigationHotspot.d.ts +3 -0
  308. package/dist/configurator/pages/default-elements/scene-controls/BuiltInNavigationHotspot.js +1 -0
  309. package/dist/configurator/pages/default-elements/scene-controls/BuiltInSelectionHotspot.d.ts +3 -0
  310. package/dist/configurator/pages/default-elements/scene-controls/BuiltInSelectionHotspot.js +1 -0
  311. package/dist/configurator/pages/default-elements/scene-controls/BuiltInToolMenuFab.d.ts +3 -0
  312. package/dist/configurator/pages/default-elements/scene-controls/BuiltInToolMenuFab.js +1 -0
  313. package/dist/configurator/pages/default-elements/scene-controls/index.d.ts +6 -0
  314. package/dist/configurator/pages/default-elements/scene-controls/index.js +1 -0
  315. package/dist/configurator/pages/default-elements/scene-controls/scene-control-elements.d.ts +6 -0
  316. package/dist/configurator/pages/default-elements/scene-controls/scene-control-elements.js +1 -0
  317. package/dist/configurator/pages/default-elements/sidebar-footer-elements.d.ts +7 -0
  318. package/dist/configurator/pages/default-elements/sidebar-footer-elements.js +1 -0
  319. package/dist/configurator/pages/default-elements/toolbar-elements.d.ts +7 -0
  320. package/dist/configurator/pages/default-elements/toolbar-elements.js +1 -0
  321. package/dist/configurator/pages/error-boundaries/GeneralErrorBoundary.js +1 -1
  322. package/dist/configurator/pages/index.d.ts +1 -0
  323. package/dist/configurator/pages/index.js +1 -1
  324. package/dist/configurator/preset-screen-elements/PresetDeviceNotSupportedElement.d.ts +4 -0
  325. package/dist/configurator/preset-screen-elements/PresetDeviceNotSupportedElement.js +1 -0
  326. package/dist/configurator/preset-screen-elements/PresetPageActionElement.d.ts +4 -0
  327. package/dist/configurator/preset-screen-elements/PresetPageActionElement.js +1 -0
  328. package/dist/configurator/preset-screen-elements/index.d.ts +2 -0
  329. package/dist/configurator/preset-screen-elements/index.js +1 -0
  330. package/dist/configurator/scene/index.d.ts +1 -0
  331. package/dist/configurator/scene/index.js +1 -1
  332. package/dist/configurator/scene/scene-controls/DeleteEntityFab.js +1 -1
  333. package/dist/configurator/scene/scene-controls/SelectionHotspot.js +1 -1
  334. package/dist/configurator/scene/scene-controls/ToolFab.d.ts +4 -0
  335. package/dist/configurator/scene/scene-controls/ToolFab.js +1 -1
  336. package/dist/configurator/scene/scene-controls/use-scene-control-tooltip.d.ts +2 -1
  337. package/dist/configurator/scene/scene-entity/scene-controls/SceneEntityHtmlHotspots.js +1 -1
  338. package/dist/configurator/toolbar-actions/index.d.ts +3 -0
  339. package/dist/configurator/toolbar-actions/index.js +1 -0
  340. package/dist/configurator/toolbar-actions/use-assistant-panel.d.ts +18 -0
  341. package/dist/configurator/toolbar-actions/use-assistant-panel.js +1 -0
  342. package/dist/configurator/toolbar-actions/use-measurements.d.ts +35 -0
  343. package/dist/configurator/toolbar-actions/use-measurements.js +1 -0
  344. package/dist/configurator/toolbar-actions/use-toolbar-actions.d.ts +100 -0
  345. package/dist/configurator/toolbar-actions/use-toolbar-actions.js +1 -0
  346. package/dist/configurator/toolbar-actions/use-toolbar-help.d.ts +7 -0
  347. package/dist/configurator/toolbar-actions/use-toolbar-help.js +1 -0
  348. package/dist/configurator/ui/assistant/AssistantChips.d.ts +8 -2
  349. package/dist/configurator/ui/assistant/AssistantChips.js +1 -1
  350. package/dist/configurator/ui/assistant/AssistantMarkdown.d.ts +7 -2
  351. package/dist/configurator/ui/assistant/AssistantMarkdown.js +1 -1
  352. package/dist/configurator/ui/assistant/AssistantPanel.js +1 -1
  353. package/dist/configurator/ui/assistant/AssistantThread.js +1 -1
  354. package/dist/configurator/ui/assistant/alert/AssistantAlert.d.ts +8 -0
  355. package/dist/configurator/ui/assistant/alert/AssistantAlert.js +1 -0
  356. package/dist/configurator/ui/assistant/alert/index.d.ts +2 -0
  357. package/dist/configurator/ui/assistant/alert/index.js +1 -0
  358. package/dist/configurator/ui/assistant/alert/remark-alerts.d.ts +10 -0
  359. package/dist/configurator/ui/assistant/alert/remark-alerts.js +1 -0
  360. package/dist/configurator/ui/assistant/entity-link/AssistantEntityLink.d.ts +1 -1
  361. package/dist/configurator/ui/assistant/entity-link/AssistantEntityLink.js +1 -1
  362. package/dist/configurator/ui/assistant/entity-link/entity-link-state.d.ts +1 -1
  363. package/dist/configurator/ui/assistant/entity-link/index.d.ts +0 -1
  364. package/dist/configurator/ui/assistant/entity-link/index.js +1 -1
  365. package/dist/configurator/ui/assistant/form/AssistantForm.d.ts +19 -0
  366. package/dist/configurator/ui/assistant/form/AssistantForm.js +1 -0
  367. package/dist/configurator/ui/assistant/form/compose-answer.d.ts +11 -0
  368. package/dist/configurator/ui/assistant/form/compose-answer.js +1 -0
  369. package/dist/configurator/ui/assistant/form/describe-build-errors.d.ts +6 -0
  370. package/dist/configurator/ui/assistant/form/describe-build-errors.js +1 -0
  371. package/dist/configurator/ui/assistant/form/form-model.d.ts +37 -0
  372. package/dist/configurator/ui/assistant/form/form-model.js +1 -0
  373. package/dist/configurator/ui/assistant/form/form-state.d.ts +4 -0
  374. package/dist/configurator/ui/assistant/form/form-state.js +1 -0
  375. package/dist/configurator/ui/assistant/form/index.d.ts +4 -0
  376. package/dist/configurator/ui/assistant/form/index.js +1 -0
  377. package/dist/configurator/ui/assistant/form/parse-form-block.d.ts +10 -0
  378. package/dist/configurator/ui/assistant/form/parse-form-block.js +1 -0
  379. package/dist/configurator/ui/assistant/form/read-form-attributes.d.ts +13 -0
  380. package/dist/configurator/ui/assistant/form/read-form-attributes.js +1 -0
  381. package/dist/configurator/ui/assistant/form/registry/built-in-form-elements.d.ts +3 -0
  382. package/dist/configurator/ui/assistant/form/registry/built-in-form-elements.js +1 -0
  383. package/dist/configurator/ui/assistant/form/registry/create-assistant-form-element.d.ts +31 -0
  384. package/dist/configurator/ui/assistant/form/registry/create-assistant-form-element.js +1 -0
  385. package/dist/configurator/ui/assistant/form/registry/form-element-definition.d.ts +16 -0
  386. package/dist/configurator/ui/assistant/form/registry/form-element-definition.js +1 -0
  387. package/dist/configurator/ui/assistant/form/registry/form-registry.d.ts +31 -0
  388. package/dist/configurator/ui/assistant/form/registry/form-registry.js +1 -0
  389. package/dist/configurator/ui/assistant/form/registry/index.d.ts +6 -0
  390. package/dist/configurator/ui/assistant/form/registry/index.js +1 -0
  391. package/dist/configurator/ui/assistant/form/registry/use-form-registry.d.ts +8 -0
  392. package/dist/configurator/ui/assistant/form/registry/use-form-registry.js +1 -0
  393. package/dist/configurator/ui/assistant/form-elements/FormCard.d.ts +9 -0
  394. package/dist/configurator/ui/assistant/form-elements/FormCard.js +1 -0
  395. package/dist/configurator/ui/assistant/form-elements/FormConfirm.d.ts +9 -0
  396. package/dist/configurator/ui/assistant/form-elements/FormConfirm.js +1 -0
  397. package/dist/configurator/ui/assistant/form-elements/FormGroup.d.ts +6 -0
  398. package/dist/configurator/ui/assistant/form-elements/FormGroup.js +1 -0
  399. package/dist/configurator/ui/assistant/form-elements/FormNumber.d.ts +9 -0
  400. package/dist/configurator/ui/assistant/form-elements/FormNumber.js +1 -0
  401. package/dist/configurator/ui/assistant/form-elements/FormOptions.d.ts +6 -0
  402. package/dist/configurator/ui/assistant/form-elements/FormOptions.js +1 -0
  403. package/dist/configurator/ui/assistant/form-elements/FormReply.d.ts +6 -0
  404. package/dist/configurator/ui/assistant/form-elements/FormReply.js +1 -0
  405. package/dist/configurator/ui/assistant/form-elements/FormSwatch.d.ts +10 -0
  406. package/dist/configurator/ui/assistant/form-elements/FormSwatch.js +1 -0
  407. package/dist/configurator/ui/assistant/form-elements/FormText.d.ts +6 -0
  408. package/dist/configurator/ui/assistant/form-elements/FormText.js +1 -0
  409. package/dist/configurator/ui/assistant/form-elements/clamp-form-number.d.ts +10 -0
  410. package/dist/configurator/ui/assistant/form-elements/clamp-form-number.js +1 -0
  411. package/dist/configurator/ui/assistant/form-elements/form-element-props.d.ts +38 -0
  412. package/dist/configurator/ui/assistant/form-elements/form-element-props.js +1 -0
  413. package/dist/configurator/ui/assistant/form-elements/index.d.ts +9 -0
  414. package/dist/configurator/ui/assistant/form-elements/index.js +1 -0
  415. package/dist/configurator/ui/assistant/index.d.ts +3 -0
  416. package/dist/configurator/ui/assistant/index.js +1 -1
  417. package/dist/configurator/ui/assistant/reference-link/AssistantReferenceLink.d.ts +16 -0
  418. package/dist/configurator/ui/assistant/reference-link/AssistantReferenceLink.js +1 -0
  419. package/dist/configurator/ui/assistant/reference-link/assistant-link-target.d.ts +34 -0
  420. package/dist/configurator/ui/assistant/reference-link/assistant-link-target.js +1 -0
  421. package/dist/configurator/ui/assistant/reference-link/assistant-reference-details.d.ts +25 -0
  422. package/dist/configurator/ui/assistant/reference-link/assistant-reference-details.js +1 -0
  423. package/dist/configurator/ui/assistant/reference-link/index.d.ts +3 -0
  424. package/dist/configurator/ui/assistant/reference-link/index.js +1 -0
  425. package/dist/configurator/ui/assistant/reference-link/reference-styles.d.ts +12 -0
  426. package/dist/configurator/ui/assistant/reference-link/reference-styles.js +1 -0
  427. package/dist/configurator/ui/assistant/reference-link/use-assistant-reference-details.d.ts +8 -0
  428. package/dist/configurator/ui/assistant/reference-link/use-assistant-reference-details.js +1 -0
  429. package/dist/configurator/ui/assistant/resource-image/AssistantImage.d.ts +9 -0
  430. package/dist/configurator/ui/assistant/resource-image/AssistantImage.js +1 -0
  431. package/dist/configurator/ui/assistant/resource-image/index.d.ts +3 -0
  432. package/dist/configurator/ui/assistant/resource-image/index.js +1 -0
  433. package/dist/configurator/ui/assistant/resource-image/resource-path.d.ts +2 -0
  434. package/dist/configurator/ui/assistant/resource-image/resource-path.js +1 -0
  435. package/dist/configurator/ui/assistant/resource-image/use-resource-image-url.d.ts +5 -0
  436. package/dist/configurator/ui/assistant/resource-image/use-resource-image-url.js +1 -0
  437. package/dist/configurator/ui/assistant/streamed-markdown.d.ts +4 -2
  438. package/dist/configurator/ui/assistant/streamed-markdown.js +2 -2
  439. package/dist/configurator/ui/assistant/thread-items.d.ts +8 -1
  440. package/dist/configurator/ui/assistant/thread-items.js +1 -1
  441. package/dist/configurator/ui/assistant/use-follow-stream.js +1 -1
  442. package/dist/configurator/ui/configurator-layout/slots/canvas/LayoutCanvas.js +1 -1
  443. package/dist/configurator/ui/configurator-layout/slots/canvas/SharedCanvas.js +1 -1
  444. package/dist/configurator/ui/configurator-layout/slots/mobile-tabs/use-mobile-tabs.d.ts +1 -1
  445. package/dist/configurator/ui/configurator-layout/slots/mobile-tabs/use-mobile-tabs.js +1 -1
  446. package/dist/configurator/ui/configurator-layout/slots/services/InvariantViolations.js +1 -1
  447. package/dist/configurator/ui/configurator-layout/slots/services/Services.js +1 -1
  448. package/dist/configurator/ui/configurator-layout/slots/sidebar-tabs/use-sidebar-tabs.d.ts +1 -1
  449. package/dist/configurator/ui/configurator-layout/slots/sidebar-tabs/use-sidebar-tabs.js +1 -1
  450. package/dist/configurator/ui/configurator-layout/universal/use-layout-scene-safe-area.d.ts +1 -1
  451. package/dist/configurator/ui/configurator-layout/universal/use-layout-scene-safe-area.js +1 -1
  452. package/dist/configurator/ui/configurator-layout/universal/use-scene-safe-area.d.ts +1 -1
  453. package/dist/configurator/ui/index.d.ts +1 -0
  454. package/dist/configurator/ui/index.js +1 -1
  455. package/dist/configurator/ui/legacy/layout/common/CommonFinalizeButton.js +1 -1
  456. package/dist/configurator/ui/legacy/layout/common/CommonSummaryButton.js +1 -1
  457. package/dist/configurator/ui/legacy/layout/common/CommonTopNavigation.js +1 -1
  458. package/dist/configurator/ui/legacy/layout/common/ReactiveInterfaceLayout.js +1 -1
  459. package/dist/configurator/ui/legacy/layout/common/ResponsiveFinalizeButton.js +1 -1
  460. package/dist/configurator/ui/legacy/layout/common/SummaryReadLayout.js +1 -1
  461. package/dist/configurator/ui/legacy/layout/simple/SimpleOwnerLayout.js +1 -1
  462. package/dist/configurator/ui/legacy/layout/simple/SimpleTopNavigation.js +1 -1
  463. package/dist/configurator/ui/legacy/layout/steps/StepsNavigation.js +1 -1
  464. package/dist/configurator/ui/legacy/layout/steps/StepsOwnerLayout.js +1 -1
  465. package/dist/configurator/ui/legacy/layout/steps/StepsSidebarFooter.js +1 -1
  466. package/dist/configurator/ui/legacy/layout/tabs/TabsOwnerLayout.js +1 -1
  467. package/dist/configurator/ui/legacy/toolbar/common/DimensionUnitSelector.js +1 -1
  468. package/dist/configurator/ui/legacy/toolbar/common/MeasurementsIndicatorsSwitch.js +1 -1
  469. package/dist/configurator/ui/legacy/toolbar/desktop-toolbar/FullscreenToolbarAction.js +1 -1
  470. package/dist/configurator/ui/legacy/toolbar/desktop-toolbar/HelpToolbarAction.js +1 -1
  471. package/dist/configurator/ui/legacy/toolbar/desktop-toolbar/MeasurementsToolbarAction.js +1 -1
  472. package/dist/configurator/ui/legacy/toolbar/desktop-toolbar/UndoRedoToolbarGroup.js +1 -1
  473. package/dist/configurator/ui/phoenix-layout-elements/AppLoader.js +2 -6
  474. package/dist/configurator/ui/phoenix-layout-elements/AssistantToolbarButton.js +1 -1
  475. package/dist/configurator/ui/phoenix-layout-elements/EnterFullscreenToolbarButton.js +1 -1
  476. package/dist/configurator/ui/phoenix-layout-elements/ExitFullscreenToolbarButton.js +1 -1
  477. package/dist/configurator/ui/phoenix-layout-elements/HelpToolbarButton.js +1 -1
  478. package/dist/configurator/ui/phoenix-layout-elements/LanguageMenuAction.js +1 -1
  479. package/dist/configurator/ui/phoenix-layout-elements/LanguageToolbarButton.js +1 -1
  480. package/dist/configurator/ui/phoenix-layout-elements/LayoutCustomOwnerUi.d.ts +1 -0
  481. package/dist/configurator/ui/phoenix-layout-elements/LayoutCustomOwnerUi.js +1 -1
  482. package/dist/configurator/ui/phoenix-layout-elements/LayoutCustomReadUi.d.ts +1 -0
  483. package/dist/configurator/ui/phoenix-layout-elements/LayoutCustomReadUi.js +1 -1
  484. package/dist/configurator/ui/phoenix-layout-elements/MeasurementsMenuAction.js +1 -1
  485. package/dist/configurator/ui/phoenix-layout-elements/MeasurementsToolbarButton.js +1 -1
  486. package/dist/configurator/ui/phoenix-layout-elements/RedoToolbarButton.js +1 -1
  487. package/dist/configurator/ui/phoenix-layout-elements/ShareToolbarButton.js +1 -1
  488. package/dist/configurator/ui/phoenix-layout-elements/UndoToolbarButton.js +1 -1
  489. package/dist/configurator/ui/phoenix-layout-elements/header/common/back-button/use-go-back-action.js +1 -1
  490. package/dist/configurator/ui/phoenix-layout-elements/header/common/horizontal-tabs/DesktopHorizontalTabs.js +1 -1
  491. package/dist/configurator/ui/phoenix-layout-elements/header/common/step-navigation/DesktopNavigationSteps.d.ts +1 -1
  492. package/dist/configurator/ui/phoenix-layout-elements/header/common/step-navigation/DesktopNavigationSteps.js +1 -1
  493. package/dist/configurator/ui/phoenix-layout-elements/header/common/step-navigation/StepsNavigation.d.ts +2 -8
  494. package/dist/configurator/ui/phoenix-layout-elements/header/common/step-navigation/StepsNavigation.js +1 -1
  495. package/dist/configurator/ui/phoenix-layout-elements/measurements/DimensionUnitSelector.js +1 -1
  496. package/dist/configurator/ui/phoenix-layout-elements/measurements/MeasurementsIndicatorsSwitch.js +1 -1
  497. package/dist/configurator/ui/phoenix-layout-elements/share/ShareModal.js +1 -1
  498. package/dist/configurator/ui/phoenix-layout-elements/share/use-share.d.ts +7 -8
  499. package/dist/configurator/ui/phoenix-layout-elements/share/use-share.js +1 -1
  500. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/basic/BasicFinalizeButton.js +1 -1
  501. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/common/CustomFinalizeButton.js +1 -1
  502. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/common/EnterSummaryButton.js +1 -1
  503. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/common/FinalizeActions.js +1 -1
  504. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/common/NextStepButton.js +1 -1
  505. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/common/PreviousStepButton.js +1 -1
  506. package/dist/configurator/ui/preset-layout/CategoryPresetUi.js +1 -1
  507. package/dist/configurator/ui/preset-layout/PresetUi.d.ts +4 -0
  508. package/dist/configurator/ui/preset-layout/PresetUi.js +1 -1
  509. package/dist/configurator/ui/save-message-snackbars/SaveMessageSnackbars.d.ts +10 -0
  510. package/dist/configurator/ui/save-message-snackbars/SaveMessageSnackbars.js +1 -0
  511. package/dist/configurator/ui/save-message-snackbars/index.d.ts +1 -0
  512. package/dist/configurator/ui/save-message-snackbars/index.js +1 -0
  513. package/dist/docs/complex-use-cases/focus-mode.mdx +2 -0
  514. package/dist/docs/controls/select-child-entity/cardselect.mdx +1 -0
  515. package/dist/docs/fabs/basic.mdx +6 -2
  516. package/dist/docs/index.json +18 -1
  517. package/dist/docs/layouts/custom-layout.mdx +1474 -201
  518. package/dist/docs/layouts/gallery/kestrel-kettle.mdx +1858 -0
  519. package/dist/docs/other-features/error-5xx.mdx +1 -1
  520. package/dist/docs/other-features/navigation-hotspot.mdx +2 -0
  521. package/dist/docs/other-features/not-found-404.mdx +1 -1
  522. package/dist/docs/phoenix/clerk-sign-in.mdx +1 -1
  523. package/dist/docs/phoenix/components.mdx +6 -0
  524. package/dist/docs/phoenix/configurator-interface.mdx +243 -28
  525. package/dist/docs/phoenix/deployments.mdx +2 -6
  526. package/dist/docs/phoenix/domain-model.mdx +2 -0
  527. package/dist/docs/phoenix/finalization.mdx +1 -1
  528. package/dist/docs/phoenix/getting-started.mdx +6 -3
  529. package/dist/docs/phoenix/layout-slots.mdx +25 -23
  530. package/dist/docs/phoenix/localization.mdx +10 -6
  531. package/dist/docs/phoenix/migration-guide.mdx +24 -11
  532. package/dist/docs/phoenix/phoenix-cli.mdx +67 -20
  533. package/dist/docs/phoenix/project-structure.mdx +70 -33
  534. package/dist/docs/phoenix/quickstart.mdx +7 -7
  535. package/dist/docs/phoenix/sdk-builder-workflow.mdx +8 -8
  536. package/dist/docs/phoenix/testing.mdx +8 -0
  537. package/dist/docs/phoenix/webhooks.mdx +21 -4
  538. package/dist/docs/selection-and-highlight/hotspots.mdx +2 -0
  539. package/dist/domain/application/application-config.d.ts +3 -1
  540. package/dist/domain/application/assistant/assistant-manifest.d.ts +3 -0
  541. package/dist/domain/application/assistant/assistant-resolved-manifest.d.ts +3 -0
  542. package/dist/domain/application/assistant/build-assistant-manifest.js +1 -1
  543. package/dist/domain/application/assistant/form/assistant-form-element-name.d.ts +11 -0
  544. package/dist/domain/application/assistant/form/assistant-form-element-name.js +8 -0
  545. package/dist/domain/application/assistant/form/assistant-form-elements.d.ts +174 -0
  546. package/dist/domain/application/assistant/form/assistant-form-elements.js +1 -0
  547. package/dist/domain/application/assistant/form/assistant-resource-path.d.ts +10 -0
  548. package/dist/domain/application/assistant/form/assistant-resource-path.js +1 -0
  549. package/dist/domain/application/assistant/form/index.d.ts +4 -0
  550. package/dist/domain/application/assistant/form/index.js +1 -0
  551. package/dist/domain/application/assistant/generate-assistant-prompt.d.ts +3 -0
  552. package/dist/domain/application/assistant/generate-assistant-prompt.js +1 -1
  553. package/dist/domain/application/assistant/index.d.ts +1 -0
  554. package/dist/domain/application/assistant/index.js +1 -1
  555. package/dist/domain/application/assistant-recipe-groups.d.ts +3 -1
  556. package/dist/domain/application/configurator-builder.d.ts +4 -1
  557. package/dist/domain/application/configurator-builder.js +1 -1
  558. package/dist/domain/core/schema/extended-schema-validator.js +1 -1
  559. package/dist/domain/domain-context/index.d.ts +1 -1
  560. package/dist/domain/domain-context/undo-system.d.ts +28 -1
  561. package/dist/domain/domain-context/undo-system.js +1 -1
  562. package/dist/domain/domain-runtime/domain-runtime.d.ts +4 -0
  563. package/dist/domain/domain-runtime/environment/types.d.ts +1 -1
  564. package/dist/domain/domain-runtime/spec/index.d.ts +1 -1
  565. package/dist/domain/domain-runtime/spec/index.js +1 -1
  566. package/dist/domain/domain-runtime/spec/initialize.js +1 -1
  567. package/dist/domain/domain-runtime/spec/module-checks/element-registration.d.ts +27 -12
  568. package/dist/domain/domain-runtime/spec/module-checks/element-registration.js +1 -1
  569. package/dist/domain/domain-runtime/spec/module-checks/find-assistant-form-element-errors.d.ts +12 -0
  570. package/dist/domain/domain-runtime/spec/module-checks/find-assistant-form-element-errors.js +1 -0
  571. package/dist/domain/domain-runtime/spec/module-checks/index.d.ts +2 -1
  572. package/dist/domain/domain-runtime/spec/module-checks/index.js +1 -1
  573. package/dist/domain/domain-runtime/spec/selectors.d.ts +3 -1
  574. package/dist/domain/domain-runtime/spec/selectors.js +1 -1
  575. package/dist/domain/domain-runtime/spec/types.d.ts +2 -0
  576. package/dist/domain/mocks/create-mock-domain-runtime.d.ts +2 -0
  577. package/dist/domain/system-components/child-entity-selection.js +1 -1
  578. package/dist/domain/system-components/common/scene-entity-control-schema.d.ts +3 -0
  579. package/dist/domain/system-components/common/scene-entity-control-schema.js +1 -1
  580. package/dist/editor/Editor.d.ts +7 -0
  581. package/dist/editor/Editor.js +1 -1
  582. package/dist/editor/domain-editors/DomainSpecContext.js +1 -1
  583. package/dist/editor/domain-editors/apply-spec-update.d.ts +8 -1
  584. package/dist/editor/domain-editors/apply-spec-update.js +1 -1
  585. package/dist/editor/domain-editors/use-implementation-files.js +1 -1
  586. package/dist/editor/mocks/CreateMockYaml.js +2 -2
  587. package/dist/editor/mocks/EditorMockContext.d.ts +2 -0
  588. package/dist/editor/mocks/EditorMockContext.js +1 -1
  589. package/dist/editor/screenshot/ScreenshotHandler.js +1 -1
  590. package/dist/globals/index.d.ts +2 -0
  591. package/dist/i18n/locales/cs/messages.js +1 -1
  592. package/dist/i18n/locales/da/messages.js +1 -1
  593. package/dist/i18n/locales/de/messages.js +1 -1
  594. package/dist/i18n/locales/de-AT/messages.js +1 -1
  595. package/dist/i18n/locales/en/messages.js +1 -1
  596. package/dist/i18n/locales/en-AU/messages.js +1 -1
  597. package/dist/i18n/locales/en-GB/messages.js +1 -1
  598. package/dist/i18n/locales/es/messages.js +1 -1
  599. package/dist/i18n/locales/fr/messages.js +1 -1
  600. package/dist/i18n/locales/hu/messages.js +1 -1
  601. package/dist/i18n/locales/it/messages.js +1 -1
  602. package/dist/i18n/locales/nl/messages.js +1 -1
  603. package/dist/i18n/locales/pl/messages.js +1 -1
  604. package/dist/i18n/locales/pt/messages.js +1 -1
  605. package/dist/i18n/locales/ro/messages.js +1 -1
  606. package/dist/i18n/locales/sk/messages.js +1 -1
  607. package/dist/i18n/locales/tr/messages.js +1 -1
  608. package/dist/legacy/domain-cli/utils/cache.d.ts +1 -1
  609. package/dist/legacy/domain-cli/utils/cache.js +1 -1
  610. package/dist/legacy/domain-spec/__generated/domain-schema.d.ts +79 -80
  611. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/claude-md.d.ts +1 -1
  612. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/cursor-rules.d.ts +1 -1
  613. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/shared-sdk-content.d.ts +1 -1
  614. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/shared-sdk-content.js +7 -2
  615. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-admin.js +15 -14
  616. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-configurator.js +14 -12
  617. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-embedded-admin.js +14 -13
  618. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-embedded-configurator.js +13 -11
  619. package/dist/phoenix/application-spec/application-spec-builder.d.ts +0 -2
  620. package/dist/phoenix/application-spec/application-spec-builder.js +1 -1
  621. package/dist/phoenix/application-spec/generate-application-spec-project.d.ts +0 -2
  622. package/dist/phoenix/application-spec/generate-application-spec-project.js +2 -2
  623. package/dist/phoenix/application-spec/generate-application-spec-story.js +2 -2
  624. package/dist/phoenix/application-spec/generate-project-files.d.ts +0 -2
  625. package/dist/phoenix/application-spec/project-files.js +1 -1
  626. package/dist/phoenix/bin.d.ts +2 -0
  627. package/dist/phoenix/bin.js +2 -0
  628. package/dist/phoenix/check-configs/built-in-eslint-config.d.ts +9 -0
  629. package/dist/phoenix/check-configs/built-in-eslint-config.js +1 -0
  630. package/dist/phoenix/check-configs/eslint-config.d.ts +10 -0
  631. package/dist/phoenix/check-configs/eslint-config.js +1 -0
  632. package/dist/phoenix/check-configs/index.d.ts +8 -0
  633. package/dist/phoenix/check-configs/index.js +1 -0
  634. package/dist/phoenix/check-configs/typescript-project.d.ts +5 -0
  635. package/dist/phoenix/check-configs/typescript-project.js +1 -0
  636. package/dist/phoenix/cli.d.ts +0 -1
  637. package/dist/phoenix/cli.js +1 -2
  638. package/dist/phoenix/commands/build.js +1 -1
  639. package/dist/phoenix/commands/check.js +1 -1
  640. package/dist/phoenix/commands/clean.js +1 -1
  641. package/dist/phoenix/commands/deploy.js +2 -2
  642. package/dist/phoenix/commands/deps/deps.d.ts +73 -0
  643. package/dist/phoenix/commands/deps/deps.js +3 -0
  644. package/dist/phoenix/commands/deps/index.d.ts +1 -0
  645. package/dist/phoenix/commands/deps/index.js +1 -0
  646. package/dist/phoenix/commands/deps/sdk-manifest.d.ts +12 -0
  647. package/dist/phoenix/commands/deps/sdk-manifest.js +1 -0
  648. package/dist/phoenix/commands/dev.js +5 -5
  649. package/dist/phoenix/commands/fix.js +1 -1
  650. package/dist/phoenix/commands/index.d.ts +1 -0
  651. package/dist/phoenix/commands/index.js +1 -1
  652. package/dist/phoenix/commands/init.d.ts +17 -5
  653. package/dist/phoenix/commands/init.js +1 -1
  654. package/dist/phoenix/commands/link.js +1 -1
  655. package/dist/phoenix/commands/prettier.js +1 -1
  656. package/dist/phoenix/commands/sync.js +1 -1
  657. package/dist/phoenix/commands/unlink.js +1 -1
  658. package/dist/phoenix/services/application-spec-project-watcher.d.ts +2 -2
  659. package/dist/phoenix/services/application-spec-project-watcher.js +3 -3
  660. package/dist/phoenix/services/lingui.d.ts +8 -0
  661. package/dist/phoenix/services/lingui.js +1 -1
  662. package/dist/phoenix/services/swc.js +1 -1
  663. package/dist/phoenix/services/vite-config.js +1 -1
  664. package/dist/phoenix/utils/index.d.ts +4 -2
  665. package/dist/phoenix/utils/index.js +1 -1
  666. package/dist/phoenix/utils/node-version/index.d.ts +1 -0
  667. package/dist/phoenix/utils/node-version/index.js +1 -0
  668. package/dist/phoenix/utils/node-version/supported-node-version.d.ts +12 -0
  669. package/dist/phoenix/utils/node-version/supported-node-version.js +4 -0
  670. package/dist/phoenix/utils/package-info.d.ts +0 -9
  671. package/dist/phoenix/utils/package-info.js +1 -1
  672. package/dist/phoenix/utils/package-manager/index.d.ts +2 -0
  673. package/dist/phoenix/utils/package-manager/index.js +1 -0
  674. package/dist/phoenix/utils/package-manager/package-manager-commands.d.ts +19 -0
  675. package/dist/phoenix/utils/package-manager/package-manager-commands.js +1 -0
  676. package/dist/phoenix/utils/package-manager/pnpm-project.d.ts +9 -0
  677. package/dist/phoenix/utils/package-manager/pnpm-project.js +1 -0
  678. package/dist/phoenix/utils/run-command.d.ts +11 -0
  679. package/dist/phoenix/utils/run-command.js +1 -1
  680. package/dist/phoenix/utils/sdk-tool/index.d.ts +1 -0
  681. package/dist/phoenix/utils/sdk-tool/index.js +1 -0
  682. package/dist/phoenix/utils/sdk-tool/resolve-sdk-tool-bin.d.ts +15 -0
  683. package/dist/phoenix/utils/sdk-tool/resolve-sdk-tool-bin.js +1 -0
  684. package/dist/{configurator/common → react-sdk/application-runtime/common-services/analytics}/frontend-analytics.d.ts +4 -0
  685. package/dist/react-sdk/application-runtime/common-services/analytics/index.d.ts +1 -0
  686. package/dist/react-sdk/application-runtime/common-services/analytics/index.js +1 -1
  687. package/dist/react-sdk/application-runtime/hooks/use-phoenix-element-slots.d.ts +2 -1
  688. package/dist/react-sdk/application-runtime/routing/routing-service.d.ts +34 -2
  689. package/dist/react-sdk/application-runtime/routing/routing-service.js +1 -1
  690. package/dist/react-sdk/application-runtime/runtime/create-application-runtime.d.ts +4 -0
  691. package/dist/react-sdk/application-runtime/runtime/create-application-runtime.js +1 -1
  692. package/dist/react-sdk/domain-application-context/DomainLifecycleBoundary.js +1 -1
  693. package/dist/react-sdk/domain-context/common-hooks/index.d.ts +8 -0
  694. package/dist/react-sdk/domain-context/common-hooks/index.js +1 -0
  695. package/dist/react-sdk/domain-context/common-hooks/use-configurator-messages.d.ts +15 -4
  696. package/dist/react-sdk/domain-context/common-hooks/use-configurator-messages.js +1 -1
  697. package/dist/react-sdk/domain-context/component-hooks/index.d.ts +1 -0
  698. package/dist/react-sdk/domain-context/component-hooks/index.js +1 -0
  699. package/dist/react-sdk/domain-context/component-hooks/use-component.js +1 -1
  700. package/dist/react-sdk/domain-context/entity-hooks/use-domain-entity-state.js +1 -1
  701. package/dist/react-sdk/domain-context/entity-hooks/use-entity-price.js +1 -1
  702. package/dist/react-sdk/domain-context/entity-hooks/use-root-entity-id.js +1 -1
  703. package/dist/react-sdk/domain-context/entity-hooks/use-root-entity-state.js +1 -1
  704. package/dist/react-sdk/domain-context/index.d.ts +7 -1
  705. package/dist/react-sdk/domain-context/index.js +1 -1
  706. package/dist/react-sdk/domain-context/system-hooks/composition-hooks.js +1 -1
  707. package/dist/react-sdk/domain-context/system-hooks/dimension-hooks.js +1 -1
  708. package/dist/react-sdk/domain-context/system-hooks/generate-share-link-hooks.d.ts +8 -0
  709. package/dist/react-sdk/domain-context/system-hooks/generate-share-link-hooks.js +1 -0
  710. package/dist/react-sdk/domain-context/system-hooks/hover-hooks.js +1 -1
  711. package/dist/react-sdk/domain-context/system-hooks/locale-switch-hooks.d.ts +24 -0
  712. package/dist/react-sdk/domain-context/system-hooks/locale-switch-hooks.js +1 -0
  713. package/dist/react-sdk/domain-context/system-hooks/navigation-hooks.d.ts +5 -0
  714. package/dist/react-sdk/domain-context/system-hooks/navigation-hooks.js +1 -1
  715. package/dist/react-sdk/domain-context/system-hooks/selection-hooks.js +1 -1
  716. package/dist/react-sdk/domain-context/system-hooks/share-links-hooks.d.ts +32 -0
  717. package/dist/react-sdk/domain-context/system-hooks/share-links-hooks.js +1 -0
  718. package/dist/react-sdk/domain-context/system-hooks/step-navigation-hooks.d.ts +57 -0
  719. package/dist/react-sdk/domain-context/system-hooks/step-navigation-hooks.js +1 -0
  720. package/dist/react-sdk/domain-context/system-hooks/tab-navigation-hooks.d.ts +61 -0
  721. package/dist/react-sdk/domain-context/system-hooks/tab-navigation-hooks.js +1 -0
  722. package/dist/react-sdk/domain-context/system-hooks/undo-redo-hooks.d.ts +20 -0
  723. package/dist/react-sdk/domain-context/system-hooks/undo-redo-hooks.js +1 -0
  724. package/dist/react-sdk/elements/configurator-error-page-props.d.ts +20 -0
  725. package/dist/react-sdk/elements/configurator-error-page-props.js +1 -0
  726. package/dist/react-sdk/elements/index.d.ts +1 -0
  727. package/dist/react-sdk/handlers/FinalizeActionRunner.d.ts +13 -0
  728. package/dist/react-sdk/handlers/FinalizeActionRunner.js +1 -0
  729. package/dist/react-sdk/handlers/FinalizeActionsHost.d.ts +10 -0
  730. package/dist/react-sdk/handlers/FinalizeActionsHost.js +1 -0
  731. package/dist/react-sdk/handlers/FinalizeActionsProvider.d.ts +11 -0
  732. package/dist/react-sdk/handlers/FinalizeActionsProvider.js +1 -0
  733. package/dist/react-sdk/handlers/finalize-actions-context.d.ts +6 -0
  734. package/dist/react-sdk/handlers/finalize-actions-context.js +1 -0
  735. package/dist/react-sdk/handlers/finalize-actions-store.d.ts +23 -0
  736. package/dist/react-sdk/handlers/finalize-actions-store.js +1 -0
  737. package/dist/react-sdk/handlers/index.d.ts +6 -0
  738. package/dist/react-sdk/handlers/index.js +1 -1
  739. package/dist/react-sdk/handlers/use-finalize-action.d.ts +32 -0
  740. package/dist/react-sdk/handlers/use-finalize-action.js +1 -0
  741. package/dist/react-sdk/handlers/use-finalize-actions.d.ts +53 -0
  742. package/dist/react-sdk/handlers/use-finalize-actions.js +1 -0
  743. package/dist/react-sdk/index.d.ts +2 -0
  744. package/dist/react-sdk/index.js +1 -1
  745. package/dist/react-sdk/loading-state/loading-state-manager.d.ts +5 -0
  746. package/dist/react-sdk/loading-state/loading-state-manager.js +1 -1
  747. package/dist/react-sdk/responsive-state/ResponsiveStateProvider.d.ts +25 -0
  748. package/dist/react-sdk/responsive-state/ResponsiveStateProvider.js +1 -0
  749. package/dist/react-sdk/responsive-state/canvas-padding.d.ts +14 -0
  750. package/dist/react-sdk/responsive-state/canvas-padding.js +1 -0
  751. package/dist/react-sdk/responsive-state/index.d.ts +5 -0
  752. package/dist/react-sdk/responsive-state/index.js +1 -0
  753. package/dist/react-sdk/responsive-state/responsive-state-manager.d.ts +111 -0
  754. package/dist/react-sdk/responsive-state/responsive-state-manager.js +1 -0
  755. package/dist/react-sdk/responsive-state/use-responsive-state-manager.d.ts +10 -0
  756. package/dist/react-sdk/responsive-state/use-responsive-state-manager.js +1 -0
  757. package/dist/react-sdk/responsive-state/use-responsive-state.d.ts +11 -0
  758. package/dist/react-sdk/responsive-state/use-responsive-state.js +1 -0
  759. package/dist/react-sdk/scene-control-elements/AddEntityFabElement.d.ts +36 -0
  760. package/dist/react-sdk/scene-control-elements/AddEntityFabElement.js +1 -0
  761. package/dist/react-sdk/scene-control-elements/DeleteEntityFabElement.d.ts +44 -0
  762. package/dist/react-sdk/scene-control-elements/DeleteEntityFabElement.js +1 -0
  763. package/dist/react-sdk/scene-control-elements/NavigationHotspotElement.d.ts +38 -0
  764. package/dist/react-sdk/scene-control-elements/NavigationHotspotElement.js +1 -0
  765. package/dist/react-sdk/scene-control-elements/SelectionHotspotElement.d.ts +30 -0
  766. package/dist/react-sdk/scene-control-elements/SelectionHotspotElement.js +1 -0
  767. package/dist/react-sdk/scene-control-elements/ToolMenuFabElement.d.ts +30 -0
  768. package/dist/react-sdk/scene-control-elements/ToolMenuFabElement.js +1 -0
  769. package/dist/react-sdk/scene-control-elements/create-add-entity-fab.d.ts +9 -0
  770. package/dist/react-sdk/scene-control-elements/create-add-entity-fab.js +1 -0
  771. package/dist/react-sdk/scene-control-elements/create-delete-entity-fab.d.ts +9 -0
  772. package/dist/react-sdk/scene-control-elements/create-delete-entity-fab.js +1 -0
  773. package/dist/react-sdk/scene-control-elements/create-navigation-hotspot.d.ts +10 -0
  774. package/dist/react-sdk/scene-control-elements/create-navigation-hotspot.js +1 -0
  775. package/dist/react-sdk/scene-control-elements/create-selection-hotspot.d.ts +9 -0
  776. package/dist/react-sdk/scene-control-elements/create-selection-hotspot.js +1 -0
  777. package/dist/react-sdk/scene-control-elements/create-tool-menu-fab.d.ts +9 -0
  778. package/dist/react-sdk/scene-control-elements/create-tool-menu-fab.js +1 -0
  779. package/dist/react-sdk/scene-control-elements/index.d.ts +11 -0
  780. package/dist/react-sdk/scene-control-elements/index.js +1 -0
  781. package/dist/react-sdk/scene-control-elements/scene-control-tooltip-visibility.d.ts +5 -0
  782. package/dist/react-sdk/scene-control-elements/scene-control-tooltip-visibility.js +1 -0
  783. package/dist/react-sdk/session/NotAuthenticatedPage.d.ts +4 -0
  784. package/dist/react-sdk/session/NotAuthenticatedPage.js +1 -1
  785. package/dist/react-sdk/web-component/create-web-component.js +1 -1
  786. package/dist/react-sdk/web-component/god-mode/god-mode-registry.d.ts +30 -0
  787. package/dist/react-sdk/web-component/god-mode/god-mode-registry.js +1 -0
  788. package/dist/react-sdk/web-component/god-mode/index.d.ts +1 -0
  789. package/dist/react-sdk/web-component/god-mode/index.js +1 -0
  790. package/dist/ui-sdk/icons/__generated/Lightbulb.d.ts +3 -0
  791. package/dist/ui-sdk/icons/__generated/Lightbulb.js +1 -0
  792. package/dist/ui-sdk/icons/__generated/XCircle.d.ts +3 -0
  793. package/dist/ui-sdk/icons/__generated/XCircle.js +1 -0
  794. package/dist/ui-sdk/icons/__generated/index.d.ts +4 -0
  795. package/dist/ui-sdk/icons/__generated/index.js +1 -1
  796. package/dist/ui-sdk/icons/icons-registry.js +1 -1
  797. package/dist/ui-sdk/responsive-application/ResponsiveApplicationProvider.d.ts +9 -0
  798. package/dist/ui-sdk/responsive-application/ResponsiveApplicationProvider.js +1 -1
  799. package/dist/ui-sdk/responsive-application/index.d.ts +1 -0
  800. package/dist/ui-sdk/responsive-application/responsive-state-store.d.ts +57 -0
  801. package/dist/ui-sdk/responsive-application/responsive-state-store.js +1 -0
  802. package/dist/ui-sdk/responsive-application/use-store-responsive-info.d.ts +7 -0
  803. package/dist/ui-sdk/responsive-application/use-store-responsive-info.js +1 -0
  804. package/dist/ui-sdk/theme/types.d.ts +1 -1
  805. package/package.json +48 -36
  806. package/schema/domain-spec.json +86 -8
  807. package/dist/application-spec/generate-application/code/templates/nvmrc.d.ts +0 -1
  808. package/dist/application-spec/generate-application/code/templates/nvmrc.js +0 -2
  809. package/dist/application-spec/generate-application/code/templates/package-json.d.ts +0 -10
  810. package/dist/application-spec/generate-application/code/templates/package-json.js +0 -1
  811. package/dist/application-spec/generate-application/code/templates/webhook-implementation.d.ts +0 -1
  812. package/dist/application-spec/generate-application/code/templates/webhook-implementation.js +0 -7
  813. package/dist/configurator/ui/assistant/entity-link/entity-link-target.d.ts +0 -5
  814. package/dist/configurator/ui/assistant/entity-link/entity-link-target.js +0 -1
  815. package/dist/configurator/ui/phoenix-layout-elements/language/use-locale-options.d.ts +0 -4
  816. package/dist/configurator/ui/phoenix-layout-elements/language/use-locale-options.js +0 -1
  817. package/dist/configurator/ui/phoenix-layout-elements/measurements/use-measurements-visibility.d.ts +0 -4
  818. package/dist/configurator/ui/phoenix-layout-elements/measurements/use-measurements-visibility.js +0 -1
  819. package/dist/phoenix/commands/generate-project-files.d.ts +0 -6
  820. package/dist/phoenix/commands/generate-project-files.js +0 -1
  821. package/dist/react-sdk/application-runtime/runtime/god-mode.d.ts +0 -19
  822. package/dist/react-sdk/application-runtime/runtime/god-mode.js +0 -1
  823. /package/dist/{configurator/common → react-sdk/application-runtime/common-services/analytics}/frontend-analytics.js +0 -0
@@ -0,0 +1,24 @@
1
+ import type { SchemaPathSegment } from '../../../../core/index.js';
2
+ import { type ValueType, type ValueTypeResolution } from '../../common/index.js';
3
+ import { type ComponentReadBindingContext } from './read-binding.js';
4
+ /** What the type check of a read binding needs besides the binding's own context. */
5
+ export interface ReadBindingTypeContext extends ComponentReadBindingContext {
6
+ /** Resolves the refs of the entity's field schemas; the schemas are the project's. */
7
+ readonly typeResolution: Omit<ValueTypeResolution, 'author' | 'definitions'>;
8
+ }
9
+ /** A `$read` or `$bind` of a shape field and the place in the component where it is read. */
10
+ export interface ReadBindingTypeCheck {
11
+ readonly marker: '$read' | '$bind';
12
+ readonly target: string;
13
+ /** Where in the component the value goes: a prop path or a filter criterion, or empty for the whole state. */
14
+ readonly path: readonly SchemaPathSegment[];
15
+ /** The type the component expects there. */
16
+ readonly expected: ValueType;
17
+ }
18
+ /**
19
+ * Reports a `$read` or `$bind` of a shape field whose type does not fit the type the component
20
+ * expects where the value goes, which the type check of generated code rejects. An expression
21
+ * target is checked where the expression's type is settled; an unknown field is reported by
22
+ * {@link ComponentReadBinding}.
23
+ */
24
+ export declare const checkReadBindingType: (check: ReadBindingTypeCheck, context: ReadBindingTypeContext) => void;
@@ -0,0 +1 @@
1
+ import{DiagnosticCode as e,diagnosticMessages as t}from"../../../../errors/index.js";import{entityIdValueType as r,formatValueType as o,isAssignableValueType as i,ValueType as n}from"../../common/index.js";import{componentParseContext as p,componentPath as a}from"./component-path.js";import{isExpressionReadTarget as m}from"./read-binding.js";export const checkReadBindingType=(s,d)=>{if(m(s.target))return;let c=((e,t)=>{if("id"===e)return r(String(t.entityKey),t.typeResolution);let o=t.resolvedShape.fieldSchemas.get(e);return o&&n(o,{...t.typeResolution,author:"project"})})(s.target,d);!c||i(c,s.expected)||p(d.parsingContext,d,s.path).error(e.COMPONENT_BINDING_TYPE_MISMATCH,t.COMPONENT_BINDING_TYPE_MISMATCH(a(d,s.path),`${s.marker}: ${s.target}`,o(c),o(s.expected)))};
@@ -0,0 +1,8 @@
1
+ import type { EnhancedJsonSchemaType } from '../../../core/index.js';
2
+ import { ValueType, type ValueTypeResolution } from '../common/index.js';
3
+ /**
4
+ * The type of a system component's state, read from its JSON schema. The schemas state the same
5
+ * types as the components' TypeScript state types, except that a brand or template literal is known
6
+ * only by the `tsType` that names it. Read once per component schema.
7
+ */
8
+ export declare const componentStateType: (componentSchema: EnhancedJsonSchemaType, resolution: Omit<ValueTypeResolution, 'author' | 'definitions'>) => ValueType;
@@ -0,0 +1 @@
1
+ import{ValueType as e}from"../common/index.js";let t=new WeakMap;export const componentStateType=(n,o)=>{let i=t.get(n);if(i)return i;let r=e(n,{...o,author:"sdk",definitions:n.definitions});return t.set(n,r),r};
@@ -0,0 +1,13 @@
1
+ import type { EnhancedJsonSchemaType, FILTER_CRITERION_KEYS } from '../../../core/index.js';
2
+ /**
3
+ * The type each filter criterion takes, as an SDK schema that states exactly the TypeScript type of
4
+ * `ComponentSystemFilterProps`: the modes, roles and viewports are their literal unions and the
5
+ * entity ids are `DomainEntityId`s. `FILTER_CRITERION_SCHEMAS`, which infers the type of an
6
+ * expression read in a criterion, is wider where the JSON schema of the filter is.
7
+ */
8
+ export declare const FILTER_CRITERION_TYPE_SCHEMAS: Readonly<Record<(typeof FILTER_CRITERION_KEYS)[number], EnhancedJsonSchemaType>>;
9
+ /**
10
+ * The type a root filter (`$filter: { $read: x }`) takes, `ComponentSystemFilter`: a boolean, or an
11
+ * object of the criteria other than the export ones.
12
+ */
13
+ export declare const ROOT_FILTER_TYPE_SCHEMA: EnhancedJsonSchemaType;
@@ -0,0 +1 @@
1
+ import{SessionRole as e}from"@salsita-ai/contracts/api";import{VIEWPORTS as t}from"#package/domain";let r={type:"string",tsType:"DomainEntityId"},a={anyOf:[r,{type:"object",properties:{id:r},required:["id"]}]},i={anyOf:[{type:"array",items:a},a]},s={type:"array",items:{type:"string"}},o={type:"boolean"};export const FILTER_CRITERION_TYPE_SCHEMAS={navigationStates:s,viewStates:s,toolStates:s,exportStates:s,modes:{type:"array",items:{enum:["owner","read","finalize"]}},roles:{type:"array",items:{enum:Object.values(e)}},selectedEntityIds:i,hoveredEntityIds:i,draggedEntityIds:i,exportedEntityIds:i,active:o,fullscreen:o,debug:o,viewports:{type:"array",items:{enum:[...t]}}};let n=new Set(["exportedEntityIds","exportStates"]),p=Object.fromEntries(Object.entries(FILTER_CRITERION_TYPE_SCHEMAS).filter(([e])=>!n.has(e)));export const ROOT_FILTER_TYPE_SCHEMA={anyOf:[o,{type:"object",properties:p}]};
@@ -0,0 +1,14 @@
1
+ import type { SchemaPathSegment } from '../../../core/index.js';
2
+ import { type ValueType } from '../common/index.js';
3
+ import { type ComponentReadBindingContext } from './bindings/index.js';
4
+ /**
5
+ * Reports a value written in a component prop or filter where the component expects an entity id
6
+ * (`DomainEntityId`). The schema checks the id's form, but the id's type is branded, so the type
7
+ * check of generated code rejects any string written in YAML: the id has to be read from the
8
+ * domain state with `$read` or `$bind`.
9
+ *
10
+ * @param value - A primitive value written in the spec
11
+ * @param path - The prop path or filter criterion the value is written at
12
+ * @param expected - The type the component expects there
13
+ */
14
+ export declare const checkStaticEntityId: (value: string | number | boolean | null, path: readonly SchemaPathSegment[], expected: ValueType, context: Omit<ComponentReadBindingContext, 'resolvedShape'>) => void;
@@ -0,0 +1 @@
1
+ import{DiagnosticCode as i,diagnosticMessages as r}from"../../../errors/index.js";import{formatValueType as o,isAssignableValueType as n,literalValueType as t}from"../common/index.js";import{componentParseContext as e,componentPath as m}from"./bindings/index.js";export const checkStaticEntityId=(s,d,T,c)=>{!T.some(i=>"string"===i.kind&&void 0!==i.named&&void 0===i.named.acceptsLiteral)||n(t(s),T)||e(c.parsingContext,c,d).error(i.COMPONENT_STATIC_ENTITY_ID,r.COMPONENT_STATIC_ENTITY_ID(m(c,d),JSON.stringify(s),o(T)))};
@@ -1,4 +1,6 @@
1
1
  import { type EnhancedJsonObject, type ParseContext } from '../../../core/index.js';
2
+ import { type ValueTypeResolution } from '../common/index.js';
3
+ import type { ExpressionRead } from '../expressions/expression-read.js';
2
4
  import type { Expression } from '../expressions/expression.js';
3
5
  import type { EntityOrAliasName, InstanceName, ResolvedShape } from '../model/index.js';
4
6
  import type { ComponentEntry } from './component-entry.js';
@@ -11,10 +13,14 @@ interface UserComponentProps {
11
13
  interface UserComponentContext {
12
14
  readonly resolvedShape: ResolvedShape;
13
15
  readonly parsingContext: ParseContext;
16
+ /** Resolves the refs of field schemas and the entity types of a name, for the type checks. */
17
+ readonly typeResolution: Omit<ValueTypeResolution, 'author' | 'definitions'>;
14
18
  }
15
19
  export interface UserComponentResult {
16
20
  readonly entry: ComponentEntry;
17
21
  readonly inferredExpressions: readonly Expression[];
22
+ /** Every `$read` of an expression in the instance, with the type expected where it is read. */
23
+ readonly expressionReads: readonly ExpressionRead[];
18
24
  }
19
25
  /**
20
26
  * Creates a user-declared ComponentEntry from raw YAML props.
@@ -1 +1 @@
1
- import{Branded as e}from"@salsita-ai/common/utils";import{componentsByName as t}from"#package/domain";import{FILTER_KEY as n,READ_MARKER_KEY as r,isEvalMarker as i,isImportRefShaped as a,isRawBindMarker as o,isRawDataRefMarker as m,isRawEvalWriteMarker as p,isRawReadMarker as s,isRawReadWriteMarker as l,navigateSchema as d}from"../../../core/index.js";import{DiagnosticCode as f,diagnosticMessages as c}from"../../../errors/index.js";import{MemoEvalPlan as y}from"../expressions/memo-eval-plan.js";import{ComponentReadBinding as g,ComponentWriteBinding as u,isExpressionReadTarget as N}from"./bindings/index.js";import{ComponentFilters as $,FILTER_CRITERION_SCHEMAS as O}from"./component-filter.js";let S=e=>e.reduce((e,t)=>"number"==typeof t?`${e}[${t}]`:0===e.length?t:`${e}.${t}`,""),T=(e,t,n,r)=>{if(null==e||"object"!=typeof e)return e;if(s(e))return n.addReadBinding(e.$read,t),{$target:e.$read};if(m(e))return void r.parsingContext.at(String(r.entityKey),r.componentName,String(r.instanceName),...t.map(String)).error(f.COMPONENT_DATA_REF_UNSUPPORTED,c.COMPONENT_DATA_REF_UNSUPPORTED(String(r.entityKey),r.componentName,String(r.instanceName),S(t),e.$read,e.$data));if(o(e))return n.addReadBinding(e.$bind,t),{$target:e.$bind};if(i(e))return e;if(a(e))return void r.parsingContext.at(String(r.entityKey),r.componentName,String(r.instanceName),...t.map(String)).error(f.COMPONENT_IMPORT_REF_UNSUPPORTED,c.COMPONENT_IMPORT_REF_UNSUPPORTED(String(r.entityKey),r.componentName,String(r.instanceName),S(t),e.$importRef.module,e.$importRef.member));if(Array.isArray(e))return e.map((e,i)=>T(e,[...t,i],n,r)).filter(e=>void 0!==e);let p={};for(let[i,a]of Object.entries(e)){let e=T(a,[...t,i],n,r);void 0!==e&&(p[i]=e)}return p},A=(t,n,r)=>{for(let i of t.items)if("gradual"===i.kind){for(let[t,a]of Object.entries(i))if("kind"!==t&&a?.kind==="dynamic"&&a.target&&N(a.target)){let i=O[t];i&&r.push(e({entityKey:n,name:a.target,schema:i,implementation:{kind:"user"}}))}}};export const UserComponentEntry=(i,a)=>{let{implementation:m,inferredExpressions:s}=((i,a)=>{let m=t.get(i.componentName),s=m?.schema,O=new Set,S=[],P=[],E=[],R={entityKey:i.typeOrAlias,componentName:i.componentName,instanceName:i.instanceName,resolvedShape:a.resolvedShape,parsingContext:a.parsingContext},_={entityKey:i.typeOrAlias,componentName:i.componentName,instanceName:i.instanceName,resolvedShape:a.resolvedShape,parsingContext:a.parsingContext},h=(t,n)=>{if(!O.has(t)&&(O.add(t),S.push(g(t,R)),N(t)&&s)){let r=((t,n,r,i)=>{let{schema:a,lastDeclaredType:o,pathSinceDeclaredType:m}=d(r,n),p=n=>e({entityKey:i,name:t,schema:n,implementation:{kind:"user"}});if(void 0!==o){let e=m.map(e=>"number"==typeof e?"[number]":`['${e}']`).join("");return p({...a,tsType:`${o.tsType}${e}`,import:o.import})}if(Object.keys(a).length>0)return p(a)})(t,n,s,i.typeOrAlias);r&&E.push(r)}},b={addReadBinding:h},v=$(i.rawProps[n]),C=`${String(i.typeOrAlias)}.${String(i.instanceName)}`;if((e=>{if(!(r in e)||"string"!=typeof e[r])return!1;for(let t of Object.keys(e))if(t!==r&&t!==n)return!1;return!0})(i.rawProps)){let e=i.rawProps[r];return h(e,[]),A(v,i.typeOrAlias,E),{implementation:{kind:"userBound",filters:v,plan:y({$target:e},C),implementation:{kind:"rootRead",readBinding:S[0]}},inferredExpressions:E}}let k={};for(let[e,t]of Object.entries(i.rawProps)){if(e===n)continue;if(o(t)){P.push(u(e,t.$bind,_)),h(t.$bind,[e]),k[e]={$target:t.$bind};continue}if(l(t)){h(t.$read,[e]),P.push(u(e,t.$write,_)),k[e]={$target:t.$read};continue}if(p(t)){P.push(u(e,t.$write,_)),k[e]={$eval:t.$eval};continue}let r=T(t,[e],b,R);void 0!==r&&(k[e]=r)}let j=new Map;for(let e of P){let t=j.get(e.entityField);t?a.parsingContext.error(f.WRITE_BINDING_DUPLICATE_TARGET,c.WRITE_BINDING_DUPLICATE_TARGET(String(i.typeOrAlias),i.componentName,String(i.instanceName),e.entityField,t,e.propKey)):j.set(e.entityField,e.propKey)}return A(v,i.typeOrAlias,E),{implementation:{kind:"userBound",filters:v,plan:y(k,C),implementation:{kind:"composite",resolvedProps:k,readBindings:S,writeBindings:P}},inferredExpressions:E}})(i,a);return{entry:e({typeOrAlias:i.typeOrAlias,instanceName:i.instanceName,isAlias:"alias"===a.resolvedShape.kind,componentName:i.componentName,implementation:m}),inferredExpressions:s}};
1
+ import{Branded as e}from"@salsita-ai/common/utils";import{componentsByName as t}from"#package/domain";import{FILTER_CRITERION_KEYS as n,FILTER_KEY as r,FILTER_OR_KEY as i,READ_MARKER_KEY as o,isEnhancedJsonObject as a,isEvalMarker as m,isImportRefShaped as p,isRawBindMarker as s,isRawDataRefMarker as l,isRawEvalWriteMarker as d,isRawReadMarker as c,isRawReadWriteMarker as f,navigateSchema as y}from"../../../core/index.js";import{DiagnosticCode as u,diagnosticMessages as g}from"../../../errors/index.js";import{ValueType as N,valueTypeAt as $}from"../common/index.js";import{MemoEvalPlan as O}from"../expressions/memo-eval-plan.js";import{ComponentReadBinding as S,ComponentWriteBinding as A,checkReadBindingType as k,componentPath as R,formatComponentPropPath as T,isExpressionReadTarget as b}from"./bindings/index.js";import{ComponentFilters as h,FILTER_CRITERION_SCHEMAS as P}from"./component-filter.js";import{componentStateType as E}from"./component-state-type.js";import{FILTER_CRITERION_TYPE_SCHEMAS as j,ROOT_FILTER_TYPE_SCHEMA as v}from"./filter-criterion-types.js";import{checkStaticEntityId as _}from"./static-entity-id.js";let x=(e,t,n,r)=>{if(null==e||"object"!=typeof e)return void 0!==e&&n.checkStaticValue(e,t),e;if(c(e))return n.addReadBinding(e.$read,t,"$read"),{$target:e.$read};if(l(e))return void r.parsingContext.at(String(r.entityKey),r.componentName,String(r.instanceName),...t.map(String)).error(u.COMPONENT_DATA_REF_UNSUPPORTED,g.COMPONENT_DATA_REF_UNSUPPORTED(String(r.entityKey),r.componentName,String(r.instanceName),T(t),e.$read,e.$data));if(s(e))return n.addReadBinding(e.$bind,t,"$bind"),{$target:e.$bind};if(m(e))return e;if(p(e))return void r.parsingContext.at(String(r.entityKey),r.componentName,String(r.instanceName),...t.map(String)).error(u.COMPONENT_IMPORT_REF_UNSUPPORTED,g.COMPONENT_IMPORT_REF_UNSUPPORTED(String(r.entityKey),r.componentName,String(r.instanceName),T(t),e.$importRef.module,e.$importRef.member));if(Array.isArray(e))return e.map((e,i)=>x(e,[...t,i],n,r)).filter(e=>void 0!==e);let i={};for(let[o,a]of Object.entries(e)){let e=x(a,[...t,o],n,r);void 0!==e&&(i[o]=e)}return i},C=(t,n,r)=>{for(let i of t.items)if("gradual"===i.kind){for(let[t,o]of Object.entries(i))if("kind"!==t&&o?.kind==="dynamic"&&o.target&&b(o.target)){let i=P[t];i&&r.push(e({entityKey:n,name:o.target,schema:i,implementation:{kind:"user"}}))}}},U=(e,t,n,r)=>{if("string"==typeof e||"number"==typeof e||"boolean"==typeof e||null===e)return void _(e,t,n,r);if("object"==typeof e)for(let[i,o]of Object.entries(e)){let a=Array.isArray(e)?Number(i):i;U(o,[...t,a],$(n,[a]),r)}};export const UserComponentEntry=(m,p)=>{let{implementation:l,inferredExpressions:c,expressionReads:T}=((m,p)=>{let l,c=t.get(m.componentName),T=c?.schema,P=new Set,w=[],D=[],I=[],K={entityKey:m.typeOrAlias,componentName:m.componentName,instanceName:m.instanceName,resolvedShape:p.resolvedShape,parsingContext:p.parsingContext},B={entityKey:m.typeOrAlias,componentName:m.componentName,instanceName:m.instanceName,resolvedShape:p.resolvedShape,parsingContext:p.parsingContext},F={...K,typeResolution:p.typeResolution},M=e=>T?$(l??=E(T,p.typeResolution),e):[{kind:"unknown"}],G=[],V=e=>{b(e.target)?G.push({entityKey:m.typeOrAlias,name:e.target,expected:e.expected,location:R(K,e.path)}):k(e,F)},L=(t,n,r)=>{if(V({marker:r,target:t,path:n,expected:M(n)}),!P.has(t)&&(P.add(t),w.push(S(t,K)),b(t)&&T)){let r=((t,n,r,i)=>{let{schema:o,lastDeclaredType:a,pathSinceDeclaredType:m}=y(r,n),p=n=>e({entityKey:i,name:t,schema:n,implementation:{kind:"user"}});if(void 0!==a){let e=m.map(e=>"number"==typeof e?"[number]":`['${e}']`).join("");return p({...o,tsType:`${a.tsType}${e}`,import:a.import})}if(Object.keys(o).length>0)return p(o)})(t,n,T,m.typeOrAlias);r&&I.push(r)}},W={addReadBinding:L,checkStaticValue:(e,t)=>_(e,t,M(t),K)},q=h(m.rawProps[r]);((e,t,o,m)=>{let p=e=>N(e,{...o.typeResolution,author:"sdk"}),s=void 0!==e&&a(e)&&Array.isArray(e[i]);for(let[e,a]of t.items.entries()){let t=s?[r,i,e]:[r];if("root"===a.kind){m({marker:"$read",target:a.target,path:t,expected:p(v)});continue}for(let e of n){let n=a[e],r=[...t,e],i=p(j[e]);n?.kind==="dynamic"?m({marker:"$read",target:n.target,path:r,expected:i}):n?.kind==="static"&&U(n.value,r,i,o)}}})(m.rawProps[r],q,F,V);let z=`${String(m.typeOrAlias)}.${String(m.instanceName)}`;if((e=>{if(!(o in e)||"string"!=typeof e[o])return!1;for(let t of Object.keys(e))if(t!==o&&t!==r)return!1;return!0})(m.rawProps)){let e=m.rawProps[o];return L(e,[],"$read"),C(q,m.typeOrAlias,I),{implementation:{kind:"userBound",filters:q,plan:O({$target:e},z),implementation:{kind:"rootRead",readBinding:w[0]}},inferredExpressions:I,expressionReads:G}}let H={};for(let[e,t]of Object.entries(m.rawProps)){if(e===r)continue;if(s(t)){D.push(A(e,t.$bind,B)),L(t.$bind,[e],"$bind"),H[e]={$target:t.$bind};continue}if(f(t)){L(t.$read,[e],"$read"),D.push(A(e,t.$write,B)),H[e]={$target:t.$read};continue}if(d(t)){D.push(A(e,t.$write,B)),H[e]={$eval:t.$eval};continue}let n=x(t,[e],W,K);void 0!==n&&(H[e]=n)}let J=new Map;for(let e of D){let t=J.get(e.entityField);t?p.parsingContext.error(u.WRITE_BINDING_DUPLICATE_TARGET,g.WRITE_BINDING_DUPLICATE_TARGET(String(m.typeOrAlias),m.componentName,String(m.instanceName),e.entityField,t,e.propKey)):J.set(e.entityField,e.propKey)}return C(q,m.typeOrAlias,I),{implementation:{kind:"userBound",filters:q,plan:O(H,z),implementation:{kind:"composite",resolvedProps:H,readBindings:w,writeBindings:D}},inferredExpressions:I,expressionReads:G}})(m,p);return{entry:e({typeOrAlias:m.typeOrAlias,instanceName:m.instanceName,isAlias:"alias"===p.resolvedShape.kind,componentName:m.componentName,implementation:l}),inferredExpressions:c,expressionReads:T}};
@@ -1,19 +1,22 @@
1
1
  import { Branded } from '@salsita-ai/common/utils';
2
- import type { ParseContext } from '../../../core/index.js';
2
+ import type { ParseContext, PhoenixDefinitions } from '../../../core/index.js';
3
3
  import type { MergedComponents } from '../../merge/index.js';
4
+ import type { ExpressionRead } from '../expressions/expression-read.js';
4
5
  import type { Expression } from '../expressions/expression.js';
5
- import type { ResolvedShapes } from '../model/index.js';
6
+ import type { ModelVersion } from '../model/index.js';
6
7
  import type { ComponentEntry } from './component-entry.js';
7
8
  /** User-declared component entries, flattened from the nested merge map. */
8
9
  export type UserComponents = Branded<'UserComponents', readonly ComponentEntry[]>;
9
10
  interface UserComponentsContext {
10
- readonly allNames: ReadonlySet<string>;
11
- readonly resolvedShapes: ResolvedShapes;
11
+ readonly latestModel: ModelVersion;
12
+ readonly phxDefinitions: PhoenixDefinitions;
12
13
  readonly parsingContext: ParseContext;
13
14
  }
14
15
  interface UserComponentsResult {
15
16
  readonly components: UserComponents;
16
17
  readonly expressions: readonly Expression[];
18
+ /** Every `$read` of an expression in a component, with the type expected where it is read. */
19
+ readonly expressionReads: readonly ExpressionRead[];
17
20
  }
18
21
  /**
19
22
  * Flattens the nested merge map into a flat list of ComponentEntry objects.
@@ -1 +1 @@
1
- import{Branded as e}from"@salsita-ai/common/utils";import{DiagnosticCode as r,diagnosticMessages as t}from"../../../errors/index.js";import{InstanceName as o,getResolvedShape as n}from"../model/index.js";import{UserComponentEntry as s}from"./user-component-entry.js";export const UserComponents=(i,p)=>{let{allNames:m,parsingContext:f}=p,l=[],N=[],O=[...m];for(let[e,c]of Object.entries(i)){if(!m.has(e)){f.error(r.COMPONENT_UNKNOWN_ENTITY_KEY,t.COMPONENT_UNKNOWN_ENTITY_KEY(e,O));continue}let i=n(p.resolvedShapes,e);for(let[r,t]of Object.entries(c))for(let[n,p]of Object.entries(t)){let t=o(n,e,r,f);if(!t)continue;let m=s({typeOrAlias:e,instanceName:t,componentName:r,rawProps:p},{resolvedShape:i,parsingContext:f});l.push(m.entry),N.push(...m.inferredExpressions)}}return{components:e(l),expressions:N}};
1
+ import{Branded as e}from"@salsita-ai/common/utils";import{DiagnosticCode as o,diagnosticMessages as r}from"../../../errors/index.js";import{InstanceName as t,ModelTypeResolution as s,getResolvedShape as n}from"../model/index.js";import{UserComponentEntry as i}from"./user-component-entry.js";export const UserComponents=(p,m)=>{let{latestModel:f,parsingContext:l}=m,N=f.allNames,a=s(f,m.phxDefinitions),O=[],c=[],u=[],x=[...N];for(let[e,s]of Object.entries(p)){if(!N.has(e)){l.error(o.COMPONENT_UNKNOWN_ENTITY_KEY,r.COMPONENT_UNKNOWN_ENTITY_KEY(e,x));continue}let p=n(f.resolvedShapes,e);for(let[o,r]of Object.entries(s))for(let[s,n]of Object.entries(r)){let r=t(s,e,o,l);if(!r)continue;let m=i({typeOrAlias:e,instanceName:r,componentName:o,rawProps:n},{resolvedShape:p,parsingContext:l,typeResolution:a});O.push(m.entry),c.push(...m.inferredExpressions),u.push(...m.expressionReads)}}return{components:e(O),expressions:c,expressionReads:u}};
@@ -0,0 +1,24 @@
1
+ import type { ParseContext } from '../../../core/index.js';
2
+ import type { EntityOrAliasName, ExpressionName, ModelTypeResolution } from '../model/index.js';
3
+ import type { ExpressionRead } from './expression-read.js';
4
+ import type { Expression } from './expression.js';
5
+ /** Where an expression is declared: the spec section and the entity or alias under it. */
6
+ export interface ExpressionLocation {
7
+ readonly section: string;
8
+ readonly entityKey: EntityOrAliasName;
9
+ }
10
+ interface ExpressionReadTypesInput {
11
+ readonly userExpressions: readonly Expression[];
12
+ readonly expressionReads: readonly ExpressionRead[];
13
+ /** Finds where a read expression is declared, which is where a conflict is reported. */
14
+ readonly locateDeclaration: (entityKey: EntityOrAliasName, name: ExpressionName) => ExpressionLocation;
15
+ }
16
+ /**
17
+ * Reports an expression whose declared type and the types its `$read`s expect have no value in
18
+ * common, or whose `$read`s expect types that have none: generated code types the expression by
19
+ * the intersection of them all, which no value can be, so the implementation cannot type-check.
20
+ * A type given as `tsType` text is not read, and never reported. Relation and invariant
21
+ * expressions state their types only as `tsType`, so only a conflict among their reads is reported.
22
+ */
23
+ export declare const checkExpressionReadTypes: ({ userExpressions, expressionReads, locateDeclaration }: ExpressionReadTypesInput, typeResolution: ModelTypeResolution, ctx: ParseContext) => void;
24
+ export {};
@@ -0,0 +1 @@
1
+ import{DiagnosticCode as e,diagnosticMessages as t}from"../../../errors/index.js";import{ValueType as r,formatValueType as n,intersectValueTypes as o}from"../common/index.js";export const checkExpressionReadTypes=({userExpressions:i,expressionReads:a,locateDeclaration:c},d,l)=>{let s=new Map,m=(e,t)=>{let r=`${String(e)}\0${String(t)}`,n=s.get(r);return n||(n={entityKey:e,name:t,reads:[]},s.set(r,n)),n};for(let e of i)e.declaredSchema&&(m(e.entityKey,e.name).declared=r(e.declaredSchema,{...d,author:"project"}));for(let e of a)m(e.entityKey,e.name).reads.push(e);for(let{entityKey:r,name:i,declared:a,reads:d}of s.values()){let[s,...m]=[...a?[a]:[],...d.map(e=>e.expected)];if(!s||m.reduce(o,s).length>0)continue;let p=c(r,i);l.at(p.section,String(p.entityKey),String(i)).error(e.EXPRESSION_READ_TYPE_CONFLICT,t.EXPRESSION_READ_TYPE_CONFLICT(String(p.entityKey),String(i),a&&n(a),d.map(e=>`${n(e.expected)} at "${e.location}"`)))}};
@@ -0,0 +1,13 @@
1
+ import type { ValueType } from '../common/index.js';
2
+ import type { EntityOrAliasName, ExpressionName } from '../model/index.js';
3
+ /**
4
+ * A `$read` of an expression in a component, with the type the component expects where the value
5
+ * goes: a prop, the whole state, a filter criterion or the whole filter.
6
+ */
7
+ export interface ExpressionRead {
8
+ readonly entityKey: EntityOrAliasName;
9
+ readonly name: ExpressionName;
10
+ readonly expected: ValueType;
11
+ /** The place of the read, such as `Hole.detail.main.title`. */
12
+ readonly location: string;
13
+ }
@@ -0,0 +1,9 @@
1
+ import { type EnhancedJsonValue } from '../../../core/index.js';
2
+ import { ValueType } from '../common/index.js';
3
+ import type { ModelTypeResolution } from '../model/index.js';
4
+ /**
5
+ * The type generated code gives the inline value of an expression that declares a schema: a `$msg`
6
+ * compiles to a lingui `MessageDescriptor`. The only other such value is an `$eval`, which is code
7
+ * whose type is not read; constants never declare a schema.
8
+ */
9
+ export declare const expressionValueType: (value: EnhancedJsonValue, resolution: ModelTypeResolution) => ValueType;
@@ -0,0 +1 @@
1
+ import{isMsgMarker as e}from"../../../core/index.js";import{ValueType as o}from"../common/index.js";let r=[{kind:"unknown"}];export const expressionValueType=(n,s)=>e(n)?o({$ref:"phx:MessageDescriptor"},{...s,author:"sdk"}):r;
@@ -1,7 +1,8 @@
1
1
  import { Branded } from '@salsita-ai/common/utils';
2
- import { type EvalExpressionParser, type ParseContext } from '../../../core/index.js';
2
+ import { type EvalExpressionParser, type ParseContext, type PhoenixDefinitions } from '../../../core/index.js';
3
3
  import type { MergedExpressions } from '../../merge/index.js';
4
- import type { Aliases, EntityOrAliasName, EntityTypeName, ExpressionName, ModelVersion } from '../model/index.js';
4
+ import { type Aliases, type EntityOrAliasName, type EntityTypeName, type ExpressionName, type ModelVersion } from '../model/index.js';
5
+ import type { ExpressionRead } from './expression-read.js';
5
6
  import type { Expression } from './expression.js';
6
7
  import type { MemoEvalPlan } from './memo-eval-plan.js';
7
8
  export type { Expression, ExpressionImplementation } from './expression.js';
@@ -31,12 +32,15 @@ export type Expressions = Branded<'Expressions', {
31
32
  interface ExpressionsProps {
32
33
  readonly rawExpressions: MergedExpressions;
33
34
  readonly inferredExpressions: readonly Expression[];
35
+ /** The `$read`s of expressions in components, whose expected types the expressions must share. */
36
+ readonly expressionReads: readonly ExpressionRead[];
34
37
  }
35
38
  interface ExpressionsContext {
36
39
  readonly latestModel: ModelVersion;
37
40
  readonly aliases: Aliases;
38
41
  readonly entityTypes: readonly EntityTypeName[];
39
42
  readonly evalExpressionParser: EvalExpressionParser;
43
+ readonly phxDefinitions: PhoenixDefinitions;
40
44
  readonly parsingContext: ParseContext;
41
45
  }
42
46
  /**
@@ -1 +1 @@
1
- import{Branded as e}from"@salsita-ai/common/utils";import{intersectSchemas as t,isSdkExpressionImplementation as n}from"../../../core/index.js";import{DiagnosticCode as i,diagnosticMessages as o}from"../../../errors/index.js";import{UserExpressions as r}from"./user-expressions.js";let s=(e,t)=>{let n=e.get(t.entityKey);n||(n=new Map,e.set(t.entityKey,n)),n.set(t.name,t)},a=(n,i)=>{let o=n.get(i.entityKey);o||(o=new Map,n.set(i.entityKey,o));let r=o.get(i.name);r?o.set(i.name,e({...r,schema:t(r.schema,i.schema),...r.declaredSchema||!i.declaredSchema?{}:{declaredSchema:i.declaredSchema}})):o.set(i.name,i)},l=e=>"relation"===e.implementation.kind?"relations":"violations"===e.implementation.kind?"invariants":"expressions";export const Expressions=(t,m)=>{let{rawExpressions:f,inferredExpressions:p}=t,{latestModel:c,aliases:d,entityTypes:y,evalExpressionParser:u,parsingContext:g}=m,S=r(f,{latestModel:c,evalExpressionParser:u,parsingContext:g});if(void 0===S)return;let h=new Map;for(let e of S)s(h,e);for(let e of p)a(h,e);let w=((e,t)=>{let i=new Map,o=e=>{let t=i.get(e.entityKey);t||(t=new Set,i.set(e.entityKey,t)),t.add(e.name)};for(let t of e)o(t);for(let e of t)n(e.implementation)&&o(e);return i})(S,p),x=new Map;for(let e of S){let{implementation:t}=e;if("value"!==t.kind||!t.constant||t.plan.usesSelf)continue;let n=x.get(e.entityKey);n||(n=new Map,x.set(e.entityKey,n)),n.set(e.name,t.plan)}let K=new Map;for(let t of y){let n=[],r=new Map,s=e=>{let s=h.get(e);if(!s||0===s.size)return;n.push(e);let a=w.get(e);for(let[n,m]of s){if(!a?.has(n))continue;let s=r.get(n);if(s){g.at(l(m),e,n).error(i.DUPLICATE_EXPRESSION,o.DUPLICATE_EXPRESSION(t,n,s,e));continue}r.set(n,e)}};for(let[e,n]of d)n.includes(t)&&s(e);s(t),K.set(t,e({shapeGroups:n}))}return e({expressions:h,entityExpressions:K,constants:x})};
1
+ import{Branded as e}from"@salsita-ai/common/utils";import{intersectSchemas as t,isSdkExpressionImplementation as n}from"../../../core/index.js";import{DiagnosticCode as o,diagnosticMessages as i}from"../../../errors/index.js";import{ModelTypeResolution as r}from"../model/index.js";import{checkExpressionReadTypes as s}from"./expression-read-types.js";import{UserExpressions as a}from"./user-expressions.js";let l=(e,t)=>{let n=e.get(t.entityKey);n||(n=new Map,e.set(t.entityKey,n)),n.set(t.name,t)},m=(n,o)=>{let i=n.get(o.entityKey);i||(i=new Map,n.set(o.entityKey,i));let r=i.get(o.name);r?i.set(o.name,e({...r,schema:t(r.schema,o.schema),...r.declaredSchema||!o.declaredSchema?{}:{declaredSchema:o.declaredSchema}})):i.set(o.name,o)},f=e=>"relation"===e.implementation.kind?"relations":"violations"===e.implementation.kind?"invariants":"expressions";export const Expressions=(t,p)=>{let{rawExpressions:c,inferredExpressions:d,expressionReads:y}=t,{latestModel:u,aliases:g,entityTypes:x,evalExpressionParser:h,parsingContext:S}=p,w=r(u,p.phxDefinitions),K=a(c,{latestModel:u,evalExpressionParser:h,typeResolution:w,parsingContext:S});if(void 0===K)return;let M=new Map;for(let e of K)l(M,e);for(let e of d)m(M,e);let E=((e,t)=>{let o=new Map,i=e=>{let t=o.get(e.entityKey);t||(t=new Set,o.set(e.entityKey,t)),t.add(e.name)};for(let t of e)i(t);for(let e of t)n(e.implementation)&&i(e);return o})(K,d);s({userExpressions:K,expressionReads:y,locateDeclaration:(e,t)=>{for(let n of[e,...[...g].filter(([,t])=>t.some(t=>t===e)).map(([e])=>e)]){let e=E.get(n)?.has(t)?M.get(n)?.get(t):void 0;if(e)return{section:f(e),entityKey:n}}return{section:"expressions",entityKey:e}}},w,S);let j=new Map;for(let e of K){let{implementation:t}=e;if("value"!==t.kind||!t.constant||t.plan.usesSelf)continue;let n=j.get(e.entityKey);n||(n=new Map,j.set(e.entityKey,n)),n.set(e.name,t.plan)}let v=new Map;for(let t of x){let n=[],r=new Map,s=e=>{let s=M.get(e);if(!s||0===s.size)return;n.push(e);let a=E.get(e);for(let[n,l]of s){if(!a?.has(n))continue;let s=r.get(n);if(s){S.at(f(l),e,n).error(o.DUPLICATE_EXPRESSION,i.DUPLICATE_EXPRESSION(t,n,s,e));continue}r.set(n,e)}};for(let[e,n]of g)n.includes(t)&&s(e);s(t),v.set(t,e({shapeGroups:n}))}return e({expressions:M,entityExpressions:v,constants:j})};
@@ -1,6 +1,6 @@
1
1
  import { type EvalExpressionParser, type ParseContext } from '../../../core/index.js';
2
2
  import type { MergedExpressions } from '../../merge/index.js';
3
- import type { ModelVersion } from '../model/index.js';
3
+ import type { ModelTypeResolution, ModelVersion } from '../model/index.js';
4
4
  import type { Expression } from './expression.js';
5
5
  /**
6
6
  * Validates user-declared expressions from merged YAML.
@@ -15,6 +15,8 @@ import type { Expression } from './expression.js';
15
15
  interface UserExpressionsContext {
16
16
  readonly latestModel: ModelVersion;
17
17
  readonly evalExpressionParser: EvalExpressionParser;
18
+ /** Resolves the refs of the declared schemas, for checking an inline value against its schema. */
19
+ readonly typeResolution: ModelTypeResolution;
18
20
  readonly parsingContext: ParseContext;
19
21
  }
20
22
  export declare const UserExpressions: (rawExpressions: MergedExpressions, context: UserExpressionsContext) => readonly Expression[] | undefined;
@@ -1 +1 @@
1
- import{Branded as e}from"@salsita-ai/common/utils";import{schemaFromValue as t}from"../../../enhanced-json/index.js";import{DiagnosticCode as r,diagnosticMessages as n}from"../../../errors/index.js";import{ExpressionName as s}from"../model/index.js";import{MemoEvalPlan as a}from"./memo-eval-plan.js";let o=(e,r,n,s)=>{if("user"===e.kind)return{schema:e.schema,implementation:{kind:"user"}};let o=a(e.value,r),i={kind:"value",constant:e.constant,value:e.value,plan:o};if(Object.keys(e.schema).length>0)return{schema:e.schema,implementation:i};let m=t(e.value,n,s);if(void 0!==m)return{schema:m,implementation:i}};export const UserExpressions=(t,a)=>{let{latestModel:i,evalExpressionParser:m,parsingContext:l}=a,{allNames:c}=i,h=[...c].map(String),f=[];for(let[a,i]of Object.entries(t)){c.has(a)||l.error(r.EXPRESSION_UNKNOWN_ENTITY_KEY,n.EXPRESSION_UNKNOWN_ENTITY_KEY(a,h));let t=e(a);for(let[r,n]of Object.entries(i)){let i=l.at(a),c=s(r,i);if(!c)continue;let h=o(n,`${a}.${r}`,i.at(r),m);h&&f.push(e({entityKey:t,name:c,schema:h.schema,declaredSchema:h.schema,implementation:h.implementation}))}}if(!l.hasErrors)return f};
1
+ import{Branded as e}from"@salsita-ai/common/utils";import{schemaFromValue as r}from"../../../enhanced-json/index.js";import{DiagnosticCode as t,diagnosticMessages as o}from"../../../errors/index.js";import{ValueType as s,formatValueType as m,isAssignableValueType as a}from"../common/index.js";import{ExpressionName as n}from"../model/index.js";import{expressionValueType as i}from"./expression-value-type.js";import{MemoEvalPlan as l}from"./memo-eval-plan.js";let c=(e,n,c,p,E)=>{if("user"===e.kind)return{schema:e.schema,implementation:{kind:"user"}};let h=l(e.value,n),u={kind:"value",constant:e.constant,value:e.value,plan:h};if(Object.keys(e.schema).length>0){var f,d;let r,l;return f=e.value,d=e.schema,r=i(f,E),a(r,l=s(d,{...E,author:"project"}))||c.error(t.EXPRESSION_VALUE_TYPE_MISMATCH,o.EXPRESSION_VALUE_TYPE_MISMATCH(n,m(r),m(l))),{schema:e.schema,implementation:u}}let N=r(e.value,c,p);if(void 0!==N)return{schema:N,implementation:u}};export const UserExpressions=(r,s)=>{let{latestModel:m,evalExpressionParser:a,typeResolution:i,parsingContext:l}=s,{allNames:p}=m,E=[...p].map(String),h=[];for(let[s,m]of Object.entries(r)){p.has(s)||l.error(t.EXPRESSION_UNKNOWN_ENTITY_KEY,o.EXPRESSION_UNKNOWN_ENTITY_KEY(s,E));let r=e(s);for(let[t,o]of Object.entries(m)){let m=l.at(s),p=n(t,m);if(!p)continue;let E=c(o,`${s}.${t}`,m.at(t),a,i);E&&h.push(e({entityKey:r,name:p,schema:E.schema,declaredSchema:E.schema,implementation:E.implementation}))}}if(!l.hasErrors)return h};
@@ -1,5 +1,5 @@
1
1
  import { Branded } from '@salsita-ai/common/utils';
2
- import type { ParseContext } from '../../../core/index.js';
2
+ import type { ParseContext, PhoenixDefinitions } from '../../../core/index.js';
3
3
  import type { MergedComponents, MergedExpressions, MergedInvariants, MergedRelations } from '../../merge/index.js';
4
4
  import type { ComponentEntry } from '../components/index.js';
5
5
  import type { Expression } from '../expressions/index.js';
@@ -22,5 +22,5 @@ interface InvariantsProps {
22
22
  }
23
23
  /** Explicit empty invariants aggregate for consumers that do not declare invariants. */
24
24
  export declare const EmptyInvariants: () => Invariants;
25
- export declare const Invariants: (props: InvariantsProps, latestModel: ModelVersion, ctx: ParseContext) => Invariants;
25
+ export declare const Invariants: (props: InvariantsProps, latestModel: ModelVersion, phxDefinitions: PhoenixDefinitions, ctx: ParseContext) => Invariants;
26
26
  export {};
@@ -1 +1 @@
1
- import{Branded as e}from"@salsita-ai/common/utils";import{DiagnosticCode as t,diagnosticMessages as o}from"../../../errors/index.js";import{UserComponentEntry as r}from"../components/index.js";import{ExpressionName as n,InstanceName as i,getResolvedShape as a}from"../model/index.js";import{Invariant as s}from"./invariant.js";let l="violations",p="$violations",N=(e,t)=>t.get(e)??[e],m=e=>"dynamic"===e.kind?e.violationTypes:[e.violationType],O=(t,o,r)=>{if(!r)return;let n=[...o.violationTypes].map(e=>`'${String(e)}'`).join(" | "),i={tsType:`ReadonlyArray<Violation<${n}>>`,import:[{module:"@salsita-ai/sdk/domain",member:"Violation"}]};return e({entityKey:t,name:r,schema:i,declaredSchema:i,implementation:{kind:"violations",params:[{entityType:String(t),invariants:o.declaredGroups}]}})},I=(e,t,o)=>{let n=i("default",String(e),l,o);if(n)return r({typeOrAlias:e,instanceName:n,componentName:l,rawProps:{violations:{$read:p}}},{resolvedShape:a(t.resolvedShapes,e),parsingContext:o}).entry};export const EmptyInvariants=()=>e({entries:{},expressions:[],components:[]});export const Invariants=(r,i,a)=>{let{rawInvariants:f,rawExpressions:T,rawRelations:d,rawComponents:A}=r,{allNames:c,aliases:S}=i,y=[...c].map(String),_={},v=new Map;for(let[e,r]of Object.entries(f)){let n=a.at(e);if(!c.has(e)){n.error(t.INVARIANT_UNKNOWN_ENTITY_KEY,o.INVARIANT_UNKNOWN_ENTITY_KEY(e,y));continue}let i={};for(let[e,t]of Object.entries(r)){let o=s(e,t,n.at(e));o&&(i[String(o.name)]=o)}_[String(e)]=i;let l=Object.values(i);if(0!==l.length)for(let t of N(e,S)){let o=v.get(t);for(let r of(o||(o={violationTypes:new Set,declaredGroups:[]},v.set(t,o)),o.declaredGroups.push({typeOrAlias:e,invariants:l}),l))for(let e of m(r))o.violationTypes.add(e)}}let u=[],g=[],h=n(p,a);for(let[e,t]of v){let o=O(e,t,h),r=I(e,i,a);o&&u.push(o),r&&g.push(r)}for(let[e,r]of Object.entries(A))Object.hasOwn(r,l)&&a.at("components",e,l).error(t.INVARIANT_MANUAL_VIOLATIONS_COMPONENT,o.INVARIANT_MANUAL_VIOLATIONS_COMPONENT(e));return((e,r)=>{let{invariantEntityTypes:n,rawExpressions:i,rawRelations:a,aliases:s}=e,l=e=>{let t=s.get(e);return t?t.some(e=>n.has(String(e))):n.has(e)},N=(e,n)=>{for(let[i,a]of Object.entries(e))Object.hasOwn(a,p)&&l(i)&&r.at(n,i,p).error(t.INVARIANT_VIOLATIONS_EXPRESSION_CONFLICT,o.INVARIANT_VIOLATIONS_EXPRESSION_CONFLICT(i,n))};N(i,"expressions"),N(a,"relations")})({invariantEntityTypes:new Set([...v.keys()].map(String)),rawExpressions:T,rawRelations:d,aliases:S},a),e({entries:_,expressions:u,components:g})};
1
+ import{Branded as e}from"@salsita-ai/common/utils";import{DiagnosticCode as t,diagnosticMessages as o}from"../../../errors/index.js";import{UserComponentEntry as r}from"../components/index.js";import{ExpressionName as n,InstanceName as i,ModelTypeResolution as a,getResolvedShape as s}from"../model/index.js";import{Invariant as l}from"./invariant.js";let p="violations",N="$violations",m=(e,t)=>t.get(e)??[e],O=e=>"dynamic"===e.kind?e.violationTypes:[e.violationType],I=(t,o,r)=>{if(!r)return;let n=[...o.violationTypes].map(e=>`'${String(e)}'`).join(" | "),i={tsType:`ReadonlyArray<Violation<${n}>>`,import:[{module:"@salsita-ai/sdk/domain",member:"Violation"}]};return e({entityKey:t,name:r,schema:i,declaredSchema:i,implementation:{kind:"violations",params:[{entityType:String(t),invariants:o.declaredGroups}]}})},f=(e,t,o,n)=>{let l=i("default",String(e),p,n);if(l)return r({typeOrAlias:e,instanceName:l,componentName:p,rawProps:{violations:{$read:N}}},{resolvedShape:s(t.resolvedShapes,e),parsingContext:n,typeResolution:a(t,o)}).entry};export const EmptyInvariants=()=>e({entries:{},expressions:[],components:[]});export const Invariants=(r,i,a,s)=>{let{rawInvariants:T,rawExpressions:d,rawRelations:A,rawComponents:c}=r,{allNames:y,aliases:S}=i,_=[...y].map(String),u={},v=new Map;for(let[e,r]of Object.entries(T)){let n=s.at(e);if(!y.has(e)){n.error(t.INVARIANT_UNKNOWN_ENTITY_KEY,o.INVARIANT_UNKNOWN_ENTITY_KEY(e,_));continue}let i={};for(let[e,t]of Object.entries(r)){let o=l(e,t,n.at(e));o&&(i[String(o.name)]=o)}u[String(e)]=i;let a=Object.values(i);if(0!==a.length)for(let t of m(e,S)){let o=v.get(t);for(let r of(o||(o={violationTypes:new Set,declaredGroups:[]},v.set(t,o)),o.declaredGroups.push({typeOrAlias:e,invariants:a}),a))for(let e of O(r))o.violationTypes.add(e)}}let g=[],h=[],j=n(N,s);for(let[e,t]of v){let o=I(e,t,j),r=f(e,i,a,s);o&&g.push(o),r&&h.push(r)}for(let[e,r]of Object.entries(c))Object.hasOwn(r,p)&&s.at("components",e,p).error(t.INVARIANT_MANUAL_VIOLATIONS_COMPONENT,o.INVARIANT_MANUAL_VIOLATIONS_COMPONENT(e));return((e,r)=>{let{invariantEntityTypes:n,rawExpressions:i,rawRelations:a,aliases:s}=e,l=e=>{let t=s.get(e);return t?t.some(e=>n.has(String(e))):n.has(e)},p=(e,n)=>{for(let[i,a]of Object.entries(e))Object.hasOwn(a,N)&&l(i)&&r.at(n,i,N).error(t.INVARIANT_VIOLATIONS_EXPRESSION_CONFLICT,o.INVARIANT_VIOLATIONS_EXPRESSION_CONFLICT(i,n))};p(i,"expressions"),p(a,"relations")})({invariantEntityTypes:new Set([...v.keys()].map(String)),rawExpressions:d,rawRelations:A,aliases:S},s),e({entries:u,expressions:g,components:h})};
@@ -8,6 +8,7 @@ export * from './entity-schema.js';
8
8
  export * from './entity-types.js';
9
9
  export * from './model-version.js';
10
10
  export * from './model-version-key.js';
11
+ export * from './model-type-resolution.js';
11
12
  export * from './names/index.js';
12
13
  export * from './presets.js';
13
14
  export * from './resolved-shapes.js';
@@ -1 +1 @@
1
- export*from"./aliases.js";export*from"./all-names.js";export*from"./common-types.js";export*from"./configuration-schema.js";export*from"./data-schemas.js";export*from"./defaults.js";export*from"./entity-schema.js";export*from"./entity-types.js";export*from"./model-version.js";export*from"./model-version-key.js";export*from"./names/index.js";export*from"./presets.js";export*from"./resolved-shapes.js";export*from"./session-data-schema.js";export*from"./shapes/index.js";
1
+ export*from"./aliases.js";export*from"./all-names.js";export*from"./common-types.js";export*from"./configuration-schema.js";export*from"./data-schemas.js";export*from"./defaults.js";export*from"./entity-schema.js";export*from"./entity-types.js";export*from"./model-version.js";export*from"./model-version-key.js";export*from"./model-type-resolution.js";export*from"./names/index.js";export*from"./presets.js";export*from"./resolved-shapes.js";export*from"./session-data-schema.js";export*from"./shapes/index.js";
@@ -0,0 +1,10 @@
1
+ import type { PhoenixDefinitions } from '../../../core/index.js';
2
+ import { type ValueTypeResolution } from '../common/index.js';
3
+ import type { ModelVersion } from './model-version.js';
4
+ /** What reading the type of a schema of the model needs: its refs and its entity names. */
5
+ export type ModelTypeResolution = Omit<ValueTypeResolution, 'author' | 'definitions'>;
6
+ /**
7
+ * Resolves the refs of a model's schemas (its common types and the phoenix definitions) and the
8
+ * entity types an entity type or alias name stands for.
9
+ */
10
+ export declare const ModelTypeResolution: (model: ModelVersion, phxDefinitions: PhoenixDefinitions) => ModelTypeResolution;
@@ -0,0 +1 @@
1
+ import{createSchemaRefResolver as e}from"../common/index.js";export const ModelTypeResolution=(o,r)=>({resolveRef:e(o.commonTypes,r),entityTypes:e=>{for(let[r,t]of o.aliases)if(String(r)===e)return t.map(String);return[e]}});
@@ -0,0 +1,9 @@
1
+ import { type AssistantFormElementDescriptor } from '#package/domain';
2
+ import type { ParseContext } from '../../../../core/index.js';
3
+ import type { RawAssistantFormElement } from '../../../raw-spec/index.js';
4
+ /**
5
+ * Checks the project's own form elements and turns them into the descriptors the built-ins use, in
6
+ * YAML order. Whether each has an implementation is not known here, since module analysis does not
7
+ * see the name a file registers; the application checks that pairing when it starts.
8
+ */
9
+ export declare const resolveFormElements: (formElements: Readonly<Record<string, RawAssistantFormElement>>, ctx: ParseContext) => readonly AssistantFormElementDescriptor[];
@@ -0,0 +1 @@
1
+ import{ASSISTANT_BUILT_IN_FORM_ELEMENTS as e,isHtmlElementName as r}from"#package/domain";import{DiagnosticCode as E,diagnosticMessages as _}from"../../../../errors/index.js";let T=e.map(({name:e})=>e),t=new Set(["label"]);export const resolveFormElements=(e,N)=>Object.entries(e).map(([e,S])=>{let A=N.at(e);return T.includes(e)?A.error(E.ASSISTANT_FORM_ELEMENT_BUILT_IN_NAME,_.ASSISTANT_FORM_ELEMENT_BUILT_IN_NAME(e,T)):r(e)&&A.error(E.ASSISTANT_FORM_ELEMENT_HTML_NAME,_.ASSISTANT_FORM_ELEMENT_HTML_NAME(e)),((e,{attributes:r={},required:T=[]},N)=>{let S=Object.keys(r);for(let r of S)t.has(r)&&N.at("attributes",r).error(E.ASSISTANT_FORM_ATTRIBUTE_RESERVED_NAME,_.ASSISTANT_FORM_ATTRIBUTE_RESERVED_NAME(e,r));for(let t of T)Object.hasOwn(r,t)||N.at("required").error(E.ASSISTANT_FORM_ELEMENT_UNKNOWN_REQUIRED,_.ASSISTANT_FORM_ELEMENT_UNKNOWN_REQUIRED(e,t,S))})(e,S,A),{name:e,role:S.role,description:S.description,attributes:S.attributes??{},...void 0===S.required?{}:{required:S.required}}});
@@ -1 +1 @@
1
- import{isArray as e}from"@salsita-ai/common/utils";import{ASSISTANT_HINTS as t,AssistantFieldClashError as i,buildAssistantManifest as r,describeAssistantValues as n,mergeAssistantFields as s,resolveAssistantField as o}from"#package/domain";import{DiagnosticCode as a,diagnosticMessages as l}from"../../../../errors/index.js";import{createSchemaRefResolver as S,isNullableSchema as p,phxDefinitionRefName as N}from"../../common/index.js";import{resolveAssistantFieldType as T}from"./assistant-field-type.js";let c="AnyDomainEntity",d="RecipeGroup",f="Recipe",A="DryRun",E="FieldOption",m={section:"childRecipes",component:"childEntityRecipes",mutation:"addChild"},_={section:"replaceRecipes",component:"replaceEntityRecipes",mutation:"replaceEntity"},u=new Set(["id","type","meta"]),O=new Set(["Query","Mutation","Navigation",d,f,A,"DryRunError",E,"JSON","String","Int","Float","Boolean","ID"]),I=new Set([d,f,E,A]),y=new Set(["id","type"]),b="A string, a message descriptor or a multilingual object; passed without translation.",h=(e,t)=>Object.entries(e).find(([e])=>e===t)?.[1],g=(e,{property:t,writableKey:i},r,{resolveRef:s,exposed:o,sources:S},p)=>{let N=Object.entries(h(S,e)??{}),c=o.get(e)?.find(({source:e})=>e===t)?.name??N.find(([,{source:e}])=>e===t)?.[0],d=void 0===c?N.find(([e])=>e===t)?.[1]:void 0;if(d)return void p.at(i,t).error(a.ASSISTANT_FIELD_NAME_CONFLICT,l.ASSISTANT_FIELD_NAME_CONFLICT(e,t,[d.source,t],`${i}.${t}`));let{type:f,enumValues:A,localized:E,description:m}=T(r,s),_={...f,nonNull:!1},u=c??t,O=void 0===c?n(m,A):void 0;return E?{name:u,property:t,type:{kind:"scalar",name:"JSON",nonNull:!1},description:O?`${O} ${b}`:b}:{name:u,property:t,type:_,...void 0===O?{}:{description:O}}},v=(e,t,{model:i,components:r})=>{let n=new Set([e,...[...i.aliases].filter(([,t])=>t.includes(e)).map(([e])=>e)]);return r.filter(({componentName:e,typeOrAlias:i})=>e===t&&n.has(i)).map(({instanceName:e})=>String(e))},R=(...e)=>t.filter(t=>e.some(e=>e?.includes(t))),j=(e,t,i,r)=>{let{model:n}=i,s=new Map,o=new Map;for(let[S,{groups:p,hints:N}]of Object.entries(e)){let e=n.entityTypes.find(e=>e===S),T=e?[e]:[...n.aliases].find(([e])=>e===S)?.[1];if(!T){r.at(S).error(a.ASSISTANT_UNKNOWN_TYPE,l.ASSISTANT_UNKNOWN_TYPE(t.section,S));continue}for(let[e,n]of(T.forEach(e=>o.set(e,R(o.get(e),N))),Object.entries(p))){let o=r.at(S,"groups",e),p=`${S}.groups.${e}`,N={groupId:n?.as??e,instanceName:e,...n?.description===void 0?{}:{description:n.description},dryRuns:n?.allowDryRuns??!0};for(let r of T){let n=v(r,t.component,i),T=s.get(r)??[],c=T.find(e=>e.group.groupId===N.groupId);n.includes(e)?c?o.error(a.ASSISTANT_DUPLICATE_RECIPE_GROUP,l.ASSISTANT_DUPLICATE_RECIPE_GROUP(t,r,N.groupId,[c.entry,p])):s.set(r,[...T,{group:N,entry:p,entryCtx:o}]):o.error(a.ASSISTANT_UNKNOWN_RECIPE_GROUP,l.ASSISTANT_UNKNOWN_RECIPE_GROUP(t,S,e,r,n))}}}let S=n.entityTypes.flatMap(e=>{let t=s.get(e);return t?[{entityType:e,groups:t}]:[]});return{groups:Object.fromEntries(S.map(({entityType:e,groups:t})=>[e,t.map(({group:e})=>e)])),hints:o,metaEntries:new Map(S.flatMap(({entityType:e,groups:[t]})=>t?[[e,t.entryCtx]]:[]))}},M=e=>`${e}Meta`,D=e=>`${e.charAt(0).toUpperCase()+e.slice(1)}Result`,C=e=>{let t=(({anyOf:e,oneOf:t})=>[...e??[],...t??[]].filter(e=>"null"!==e.type))(e);return e.$ref||1!==t.length?e:t[0]},P=(e,t)=>{let{type:i,enumValues:r,localized:s,description:o}=T(e,t),a={...i,nonNull:!1},l=s?`${n(o,r)??""} ${b}`.trim():n(o,r);return{type:{...s?{kind:"scalar",name:"JSON",nonNull:!1}:a,nonNull:i.nonNull},...void 0===l?{}:{description:l}}},L=(t,i)=>{let r=(t=>{let i=C(t),r=i?.type==="array"&&i.items&&!e(i.items)?C(i.items):void 0,n=r??i;if(n?.$ref!==void 0&&"$DomainEntity"===N(n.$ref))return{target:n.references??c,list:void 0!==r}})(t);if(r)return{kind:"edge",...r,nullable:p(t,i),...void 0===t.description?{}:{description:t.description}};let{type:s,enumValues:o,localized:a,description:l}=T(t,i),S=n(l,o);return a?{kind:"value",type:{kind:"scalar",name:"JSON",nonNull:s.nonNull},description:`${l??""} ${b}`.trim()}:{kind:"value",type:s,...void 0===S?{}:{description:S}}},U=(e,t)=>{let{type:i,enumValues:r,localized:n,description:s}=T(e,t);return{type:{kind:"value",type:i},localized:!0===n,description:s,enumValues:r}},w=(e,t,i,r,s)=>{let o=t.startsWith("$")?((e,t,i,r)=>{let n=((e,t,{expressions:i,entityTypes:r})=>{let n=r.find(t=>t===e);for(let r of void 0===n?[e]:i.entityExpressions.get(n)?.shapeGroups??[]){let e=[...i.expressions.get(r)?.values()??[]].find(e=>e.name===t);if(e?.declaredSchema)return{implementation:e.implementation,declaredSchema:e.declaredSchema}}})(e.name,t,i);if(!n)return void r.error(a.ASSISTANT_UNKNOWN_FIELD,l.ASSISTANT_UNKNOWN_FIELD("entities",e.name,t));let{implementation:s}=n;if("violations"===s.kind)return void r.error(a.ASSISTANT_UNSUPPORTED_EXPRESSION,l.ASSISTANT_UNSUPPORTED_EXPRESSION(e.name,t));if("relation"===s.kind){let[{target:e,cardinality:t}]=s.params;return{type:{kind:"edge",target:e,cardinality:t},localized:!1,description:void 0}}return U(n.declaredSchema,i.resolveRef)})(e,t,r,s):((e,t,{resolveRef:i},r)=>{let n=Object.entries(e.shape.properties).find(([e])=>e===t)?.[1];return n?U(n,i):void r.error(a.ASSISTANT_UNKNOWN_FIELD,l.ASSISTANT_UNKNOWN_FIELD("entities",e.name,t))})(e,t,r,s);if(!o)return;let S=i?.as??(t.startsWith("$")?`_${t.slice(1)}`:t);return u.has(S)?void s.error(a.ASSISTANT_RESERVED_FIELD_NAME,l.ASSISTANT_RESERVED_FIELD_NAME(e.name,t,S)):{name:S,source:t,type:o.type,localized:o.localized,description:n(i?.description??o.description,o.enumValues),describedByManifest:i?.description!==void 0,enumValues:o.enumValues,valueDescription:i?.description??o.description,...i?.lenses?.length?{lenses:[...new Set(i.lenses)]}:{}}},$=(e,t,i,r,n)=>s(t,i,r,(t,i,r)=>{n.error(a.ASSISTANT_FIELD_NAME_CONFLICT,l.ASSISTANT_FIELD_NAME_CONFLICT(e,t,[i,r]))});export const resolveAssistantManifest=(e,{model:t,states:i,phxDefinitions:r,expressions:n,components:s,actions:p},N)=>{let d=N.errors.length,f=N.at("entities"),A=S(t.commonTypes,r);for(let e of t.resolvedShapes.keys())O.has(e)&&N.error(a.ASSISTANT_RESERVED_TYPE_NAME,l.ASSISTANT_RESERVED_TYPE_NAME(e,[...O]));let E=((e,t,i)=>{let r=new Map;for(let n of e){let e=[];for(let[r,s]of Object.entries(n.entries)){let o=w(n,r,s,t,i.at(n.name,r));o&&e.push(o)}r.set(n.name,e)}return r})(((e,t,i)=>{let r=[];for(let[i,n]of t.resolvedShapes){let t=e[i];t&&r.push({name:i,shape:n,entries:t})}let n=new Set(t.resolvedShapes.keys());for(let t of Object.keys(e))n.has(t)||i.at(t).error(a.ASSISTANT_UNKNOWN_TYPE,l.ASSISTANT_UNKNOWN_TYPE("entities",t));return r})(e.entities??{},t,f),{resolveRef:A,expressions:n,entityTypes:t.entityTypes},f),u=$(c,[],E.get(c)??[],()=>void 0,N),C=new Map([[c,u]]);for(let e of t.aliases.keys())e!==c&&C.set(e,$(e,[u],E.get(e)??[],()=>void 0,N));for(let e of t.entityTypes){let i=[c,...[...t.aliases].filter(([t,i])=>t!==c&&i.includes(e)).map(([e])=>e)],r=[...t.resolvedShapes].find(([t])=>t===e)?.[1];C.set(e,$(e,i.map(e=>C.get(e)??[]),E.get(e)??[],e=>{let t=Object.entries(r?.properties??{}).find(([t])=>t===e)?.[1];return t&&T(t,A).enumValues},N))}let U=Object.fromEntries(t.entityTypes.map(e=>[e,Object.fromEntries((C.get(e)??[]).map(({name:e,source:t,localized:i})=>[e,i?{source:t,localized:!0}:{source:t}]))])),F=j(e.childRecipes??{},m,{model:t,components:s},N.at("childRecipes")),W=j(e.replaceRecipes??{},_,{model:t,components:s},N.at("replaceRecipes")),k=((e,t,i)=>{let r=new Set;for(let n of Object.keys(e)){let e=t.entityTypes.find(e=>e===n),s=e?[e]:[...t.aliases].find(([e])=>e===n)?.[1];s?s.forEach(e=>r.add(e)):i.at(n).error(a.ASSISTANT_UNKNOWN_TYPE,l.ASSISTANT_UNKNOWN_TYPE("deletable",n))}return t.entityTypes.filter(e=>r.has(e))})(e.deletable??{},t,N.at("deletable")),K=((e,t,i)=>{let{model:r}=t,n=((e,t,i)=>{let r=new Map;for(let[n,s]of Object.entries(e)){let e=t.entityTypes.find(e=>e===n),o=e?[e]:[...t.aliases].find(([e])=>e===n)?.[1],S=[...t.resolvedShapes].find(([e])=>e===n)?.[1];if(!o||!S){i.at(n).error(a.ASSISTANT_UNKNOWN_TYPE,l.ASSISTANT_UNKNOWN_TYPE("writable",n));continue}for(let e of Object.keys(s)){let t=i.at(n,e);e.startsWith("$")||y.has(e)?t.error(a.ASSISTANT_NOT_WRITABLE,l.ASSISTANT_NOT_WRITABLE(n,e)):h(S.properties,e)?o.forEach(t=>{let i=r.get(t)??new Map;r.set(t,i.has(e)?i:i.set(e,n))}):t.error(a.ASSISTANT_UNKNOWN_FIELD,l.ASSISTANT_UNKNOWN_FIELD("writable",n,e))}}return r})(e,r,i);return r.entityTypes.flatMap(e=>{let s=[...r.resolvedShapes].find(([t])=>t===e)?.[1],o=[...n.get(e)??[]].flatMap(([r,n])=>{let o=s&&h(s.properties,r);return(o&&g(e,{property:r,writableKey:n},o,t,i))??[]});return o.length>0?[{entityType:e,fields:o}]:[]})})(e.writable??{},{model:t,resolveRef:A,exposed:E,sources:U},N.at("writable")),V=((e,t,i,r)=>{let{model:n}=i,s=new Map;for(let[o,S]of Object.entries(e)){let e=n.entityTypes.find(e=>e===o),p=e?[e]:[...n.aliases].find(([e])=>e===o)?.[1]??[];for(let[e,n]of Object.entries(S)){let S=n?.options;if(!S)continue;let N=r.at(o,e,"options"),T=`${o}.${e}`;for(let r of p){let n=t.find(e=>e.entityType===r)?.fields.find(t=>t.property===e);if(!n)continue;let o=S.as??`${n.name}Options`,p=v(r,S.componentType,i),c=s.get(r)??[],d=c.find(e=>e.options.edgeName===o||e.options.field===n.name);if(p.includes(S.instanceName))if(o===m.section||o===_.section)N.error(a.ASSISTANT_RESERVED_OPTIONS_EDGE_NAME,l.ASSISTANT_RESERVED_OPTIONS_EDGE_NAME(T,o,n.name));else if(d)N.error(a.ASSISTANT_DUPLICATE_OPTIONS_EDGE,l.ASSISTANT_DUPLICATE_OPTIONS_EDGE(r,d.options.edgeName===o?{edgeName:o}:{field:n.name},[d.entry,T]));else{let e={field:n.name,edgeName:o,componentType:S.componentType,instanceName:S.instanceName,validate:S.validate??!0,dryRuns:S.allowDryRuns??!0};s.set(r,[...c,{options:e,hints:R(S.hints),entry:T,entryCtx:N}])}else N.error(a.ASSISTANT_UNKNOWN_OPTIONS_COMPONENT,l.ASSISTANT_UNKNOWN_OPTIONS_COMPONENT(T,S,r,p))}}}return s})(e.writable??{},K,{model:t,components:s},N.at("writable"));var Y=[F.metaEntries,W.metaEntries,new Map([...V].flatMap(([e,[t]])=>t?[[e,t.entryCtx]]:[]))];for(let e of t.entityTypes){let i=Y.flatMap(t=>t.get(e)??[])[0],r=M(e);i&&[...t.resolvedShapes.keys()].some(e=>e===r)&&i.error(a.ASSISTANT_META_TYPE_NAME_CONFLICT,l.ASSISTANT_META_TYPE_NAME_CONFLICT(e,r))}let x=t.entityTypes.filter(e=>(F.groups[e]?.length??0)>0||(W.groups[e]?.length??0)>0||(V.get(e)?.length??0)>0).map(M),G=((e,{actions:t,resolveRef:i,builtInMutations:r,typeNames:n},s)=>{let o=[],S=[...t.values()].map(e=>String(e.name));for(let[p,N]of Object.entries(e)){let e=s.at(p),T=[...t.values()].find(e=>e.name===p);if(!T){e.error(a.ASSISTANT_UNKNOWN_ACTION,l.ASSISTANT_UNKNOWN_ACTION(p,S));continue}let c=N?.as??p,d=o.find(e=>e.fieldName===c),f=D(c);if(r.has(c)||d){e.error(a.ASSISTANT_MUTATION_NAME_CONFLICT,l.ASSISTANT_MUTATION_NAME_CONFLICT(p,c,d?`"assistant.actions.${d.actionName}" already exposes`:"the built-in mutation of that name already takes"));continue}if(n.has(f)||o.some(e=>D(e.fieldName)===f)){e.error(a.ASSISTANT_ACTION_RESULT_TYPE_CONFLICT,l.ASSISTANT_ACTION_RESULT_TYPE_CONFLICT(p,c,f));continue}let A=N?.description??T.description;o.push({fieldName:c,actionName:p,...void 0===A?{}:{description:A},args:Object.fromEntries(Object.entries(T.params).map(([e,{schema:t}])=>[e,P(t,i)])),result:Object.fromEntries(Object.entries(T.result).map(([e,t])=>[e,L(t,i)]))})}return o})(e.actions??{},{actions:p,resolveRef:A,builtInMutations:new Set(["deleteEntity",m.mutation,_.mutation,...K.map(({entityType:e})=>`modify${e}`)]),typeNames:new Set([...O,...t.resolvedShapes.keys(),...x])},N.at("actions")),z=((e,t)=>{let i=e.lenses??{},r=new Set;for(let[n,s]of Object.entries(e.entities??{}))for(let[e,o]of Object.entries(s))for(let s of o?.lenses??[])Object.hasOwn(i,s)?r.add(s):t.at("entities",n,e,"lenses").error(a.ASSISTANT_UNKNOWN_LENS,l.ASSISTANT_UNKNOWN_LENS(`${n}.${e}`,s,Object.keys(i)));for(let e of Object.keys(i))I.has(e)?t.at("lenses",e).error(a.ASSISTANT_RESERVED_LENS_NAME,l.ASSISTANT_RESERVED_LENS_NAME(e,[...I])):r.has(e)||t.at("lenses",e).error(a.ASSISTANT_EMPTY_LENS,l.ASSISTANT_EMPTY_LENS(e));return Object.fromEntries(Object.entries(i).map(([e,{description:t,maxDepth:i}])=>[e,{description:t,maxDepth:i??1}]))})(e,N);if(N.errors.length>d)return;let B=e=>Object.fromEntries(Object.entries(e).map(([e,t])=>[e,{hints:R(t.hints),groups:Object.entries(t.groups).map(([e,t])=>({instanceName:e,groupId:t?.as??e,...t?.description===void 0?{}:{description:t.description},dryRuns:t?.allowDryRuns??!0}))}]));return{declarations:{entities:Object.fromEntries(Object.keys(e.entities??{}).map(e=>[e,(E.get(e)??[]).map(e=>({name:e.name,source:e.source,type:e.type,localized:e.localized,describedByManifest:e.describedByManifest,...void 0===e.description?{}:{description:e.description},...void 0===e.valueDescription?{}:{valueDescription:e.valueDescription},...void 0===e.enumValues?{}:{enumValues:e.enumValues},...void 0===e.lenses?{}:{lenses:e.lenses}}))])),enumValues:Object.fromEntries(t.entityTypes.map(e=>[e,Object.fromEntries(Object.entries(t.resolvedShapes.get(e)?.properties??{}).flatMap(([e,t])=>{let i=T(t,A).enumValues;return i?[[e,i]]:[]}))])),deletable:Object.keys(e.deletable??{}),writable:Object.fromEntries(Object.entries(e.writable??{}).map(([e,i])=>[e,Object.fromEntries(Object.entries(i).map(([i,r])=>[i,{defaultOptionsName:r?.options?.as===void 0,members:Object.fromEntries(t.entityTypes.filter(i=>i===e||[...t.aliases].find(([t])=>t===e)?.[1].includes(i)).flatMap(r=>{let n=h(t.resolvedShapes.get(r)?.properties??{},i),s=n&&g(r,{property:i,writableKey:e},n,{model:t,resolveRef:A,exposed:new Map,sources:{}},N.at("writable")),o=V.get(r)?.find(t=>t.entry===`${e}.${i}`);return s?[[r,{field:s,...T(n,A).localized?{exposedDescription:b}:{},...o?{options:{options:o.options,hints:o.hints}}:{}}]]:[]}))}]))])),childRecipes:B(e.childRecipes??{}),replaceRecipes:B(e.replaceRecipes??{})},entityTypes:t.entityTypes,aliases:Object.fromEntries(t.aliases),exampleType:t.rootEntityTypes[0]??t.entityTypes[0],states:{navigationStates:i.navigationStates,viewStates:i.viewStates,toolStates:i.toolStates},deletableTypes:k,writableTypes:K,actionFields:G,childRecipes:Object.fromEntries(Object.entries(F.groups).map(([e,t])=>[e,{groups:t,hints:F.hints.get(e)??[]}])),replaceRecipes:Object.fromEntries(Object.entries(W.groups).map(([e,t])=>[e,{groups:t,hints:W.hints.get(e)??[]}])),optionsEdges:Object.fromEntries([...V].map(([e,t])=>[e,t.map(({options:e,hints:t})=>({options:e,hints:t}))])),fields:Object.fromEntries([...C].map(([e,t])=>[e,t.map(t=>o(t,E.get(e)??[]))])),lenses:z}};export const createAssistantSchema=(e,t,n)=>{let s=resolveAssistantManifest(e,t,n);if(s)try{return{...r(s),resolved:s}}catch(e){if(e instanceof i)return void n.at("entities").error(a.ASSISTANT_FIELD_SHAPE_CONFLICT,l.ASSISTANT_FIELD_SHAPE_CONFLICT(e.fieldName,e.exposures));n.error(a.ASSISTANT_INVALID_SCHEMA,l.ASSISTANT_INVALID_SCHEMA([e instanceof Error?e.message:String(e)]));return}};
1
+ import{isArray as e}from"@salsita-ai/common/utils";import{ASSISTANT_HINTS as t,AssistantFieldClashError as i,buildAssistantManifest as r,describeAssistantValues as n,mergeAssistantFields as s,resolveAssistantField as o}from"#package/domain";import{DiagnosticCode as a,diagnosticMessages as l}from"../../../../errors/index.js";import{createSchemaRefResolver as S,isNullableSchema as p,phxDefinitionRefName as N}from"../../common/index.js";import{resolveAssistantFieldType as T}from"./assistant-field-type.js";import{resolveFormElements as c}from"./assistant-form-elements.js";let d="AnyDomainEntity",f="RecipeGroup",m="Recipe",E="DryRun",A="FieldOption",_={section:"childRecipes",component:"childEntityRecipes",mutation:"addChild"},u={section:"replaceRecipes",component:"replaceEntityRecipes",mutation:"replaceEntity"},O=new Set(["id","type","meta"]),I=new Set(["Query","Mutation","Navigation",f,m,E,"DryRunError",A,"JSON","String","Int","Float","Boolean","ID"]),y=new Set([f,m,A,E]),b=new Set(["id","type"]),h="A string, a message descriptor or a multilingual object; passed without translation.",g=(e,t)=>Object.entries(e).find(([e])=>e===t)?.[1],v=(e,{property:t,writableKey:i},r,{resolveRef:s,exposed:o,sources:S},p)=>{let N=Object.entries(g(S,e)??{}),c=o.get(e)?.find(({source:e})=>e===t)?.name??N.find(([,{source:e}])=>e===t)?.[0],d=void 0===c?N.find(([e])=>e===t)?.[1]:void 0;if(d)return void p.at(i,t).error(a.ASSISTANT_FIELD_NAME_CONFLICT,l.ASSISTANT_FIELD_NAME_CONFLICT(e,t,[d.source,t],`${i}.${t}`));let{type:f,enumValues:m,localized:E,description:A}=T(r,s),_={...f,nonNull:!1},u=c??t,O=void 0===c?n(A,m):void 0;return E?{name:u,property:t,type:{kind:"scalar",name:"JSON",nonNull:!1},description:O?`${O} ${h}`:h}:{name:u,property:t,type:_,...void 0===O?{}:{description:O}}},R=(e,t,{model:i,components:r})=>{let n=new Set([e,...[...i.aliases].filter(([,t])=>t.includes(e)).map(([e])=>e)]);return r.filter(({componentName:e,typeOrAlias:i})=>e===t&&n.has(i)).map(({instanceName:e})=>String(e))},j=(...e)=>t.filter(t=>e.some(e=>e?.includes(t))),M=(e,t,i,r)=>{let{model:n}=i,s=new Map,o=new Map;for(let[S,{groups:p,hints:N}]of Object.entries(e)){let e=n.entityTypes.find(e=>e===S),T=e?[e]:[...n.aliases].find(([e])=>e===S)?.[1];if(!T){r.at(S).error(a.ASSISTANT_UNKNOWN_TYPE,l.ASSISTANT_UNKNOWN_TYPE(t.section,S));continue}for(let[e,n]of(T.forEach(e=>o.set(e,j(o.get(e),N))),Object.entries(p))){let o=r.at(S,"groups",e),p=`${S}.groups.${e}`,N={groupId:n?.as??e,instanceName:e,...n?.description===void 0?{}:{description:n.description},dryRuns:n?.allowDryRuns??!0};for(let r of T){let n=R(r,t.component,i),T=s.get(r)??[],c=T.find(e=>e.group.groupId===N.groupId);n.includes(e)?c?o.error(a.ASSISTANT_DUPLICATE_RECIPE_GROUP,l.ASSISTANT_DUPLICATE_RECIPE_GROUP(t,r,N.groupId,[c.entry,p])):s.set(r,[...T,{group:N,entry:p,entryCtx:o}]):o.error(a.ASSISTANT_UNKNOWN_RECIPE_GROUP,l.ASSISTANT_UNKNOWN_RECIPE_GROUP(t,S,e,r,n))}}}let S=n.entityTypes.flatMap(e=>{let t=s.get(e);return t?[{entityType:e,groups:t}]:[]});return{groups:Object.fromEntries(S.map(({entityType:e,groups:t})=>[e,t.map(({group:e})=>e)])),hints:o,metaEntries:new Map(S.flatMap(({entityType:e,groups:[t]})=>t?[[e,t.entryCtx]]:[]))}},D=e=>`${e}Meta`,C=e=>`${e.charAt(0).toUpperCase()+e.slice(1)}Result`,P=e=>{let t=(({anyOf:e,oneOf:t})=>[...e??[],...t??[]].filter(e=>"null"!==e.type))(e);return e.$ref||1!==t.length?e:t[0]},L=(e,t)=>{let{type:i,enumValues:r,localized:s,description:o}=T(e,t),a={...i,nonNull:!1},l=s?`${n(o,r)??""} ${h}`.trim():n(o,r);return{type:{...s?{kind:"scalar",name:"JSON",nonNull:!1}:a,nonNull:i.nonNull},...void 0===l?{}:{description:l}}},U=(t,i)=>{let r=(t=>{let i=P(t),r=i?.type==="array"&&i.items&&!e(i.items)?P(i.items):void 0,n=r??i;if(n?.$ref!==void 0&&"$DomainEntity"===N(n.$ref))return{target:n.references??d,list:void 0!==r}})(t);if(r)return{kind:"edge",...r,nullable:p(t,i),...void 0===t.description?{}:{description:t.description}};let{type:s,enumValues:o,localized:a,description:l}=T(t,i),S=n(l,o);return a?{kind:"value",type:{kind:"scalar",name:"JSON",nonNull:s.nonNull},description:`${l??""} ${h}`.trim()}:{kind:"value",type:s,...void 0===S?{}:{description:S}}},w=(e,t)=>{let{type:i,enumValues:r,localized:n,description:s}=T(e,t);return{type:{kind:"value",type:i},localized:!0===n,description:s,enumValues:r}},$=(e,t,i,r,s)=>{let o=t.startsWith("$")?((e,t,i,r)=>{let n=((e,t,{expressions:i,entityTypes:r})=>{let n=r.find(t=>t===e);for(let r of void 0===n?[e]:i.entityExpressions.get(n)?.shapeGroups??[]){let e=[...i.expressions.get(r)?.values()??[]].find(e=>e.name===t);if(e?.declaredSchema)return{implementation:e.implementation,declaredSchema:e.declaredSchema}}})(e.name,t,i);if(!n)return void r.error(a.ASSISTANT_UNKNOWN_FIELD,l.ASSISTANT_UNKNOWN_FIELD("entities",e.name,t));let{implementation:s}=n;if("violations"===s.kind)return void r.error(a.ASSISTANT_UNSUPPORTED_EXPRESSION,l.ASSISTANT_UNSUPPORTED_EXPRESSION(e.name,t));if("relation"===s.kind){let[{target:e,cardinality:t}]=s.params;return{type:{kind:"edge",target:e,cardinality:t},localized:!1,description:void 0}}return w(n.declaredSchema,i.resolveRef)})(e,t,r,s):((e,t,{resolveRef:i},r)=>{let n=Object.entries(e.shape.properties).find(([e])=>e===t)?.[1];return n?w(n,i):void r.error(a.ASSISTANT_UNKNOWN_FIELD,l.ASSISTANT_UNKNOWN_FIELD("entities",e.name,t))})(e,t,r,s);if(!o)return;let S=i?.as??(t.startsWith("$")?`_${t.slice(1)}`:t);return O.has(S)?void s.error(a.ASSISTANT_RESERVED_FIELD_NAME,l.ASSISTANT_RESERVED_FIELD_NAME(e.name,t,S)):{name:S,source:t,type:o.type,localized:o.localized,description:n(i?.description??o.description,o.enumValues),describedByManifest:i?.description!==void 0,enumValues:o.enumValues,valueDescription:i?.description??o.description,...i?.lenses?.length?{lenses:[...new Set(i.lenses)]}:{}}},F=(e,t,i,r,n)=>s(t,i,r,(t,i,r)=>{n.error(a.ASSISTANT_FIELD_NAME_CONFLICT,l.ASSISTANT_FIELD_NAME_CONFLICT(e,t,[i,r]))});export const resolveAssistantManifest=(e,{model:t,states:i,phxDefinitions:r,expressions:n,components:s,actions:p},N)=>{let f=N.errors.length,m=N.at("entities"),E=S(t.commonTypes,r);for(let e of t.resolvedShapes.keys())I.has(e)&&N.error(a.ASSISTANT_RESERVED_TYPE_NAME,l.ASSISTANT_RESERVED_TYPE_NAME(e,[...I]));let A=((e,t,i)=>{let r=new Map;for(let n of e){let e=[];for(let[r,s]of Object.entries(n.entries)){let o=$(n,r,s,t,i.at(n.name,r));o&&e.push(o)}r.set(n.name,e)}return r})(((e,t,i)=>{let r=[];for(let[i,n]of t.resolvedShapes){let t=e[i];t&&r.push({name:i,shape:n,entries:t})}let n=new Set(t.resolvedShapes.keys());for(let t of Object.keys(e))n.has(t)||i.at(t).error(a.ASSISTANT_UNKNOWN_TYPE,l.ASSISTANT_UNKNOWN_TYPE("entities",t));return r})(e.entities??{},t,m),{resolveRef:E,expressions:n,entityTypes:t.entityTypes},m),O=F(d,[],A.get(d)??[],()=>void 0,N),P=new Map([[d,O]]);for(let e of t.aliases.keys())e!==d&&P.set(e,F(e,[O],A.get(e)??[],()=>void 0,N));for(let e of t.entityTypes){let i=[d,...[...t.aliases].filter(([t,i])=>t!==d&&i.includes(e)).map(([e])=>e)],r=[...t.resolvedShapes].find(([t])=>t===e)?.[1];P.set(e,F(e,i.map(e=>P.get(e)??[]),A.get(e)??[],e=>{let t=Object.entries(r?.properties??{}).find(([t])=>t===e)?.[1];return t&&T(t,E).enumValues},N))}let w=Object.fromEntries(t.entityTypes.map(e=>[e,Object.fromEntries((P.get(e)??[]).map(({name:e,source:t,localized:i})=>[e,i?{source:t,localized:!0}:{source:t}]))])),W=M(e.childRecipes??{},_,{model:t,components:s},N.at("childRecipes")),k=M(e.replaceRecipes??{},u,{model:t,components:s},N.at("replaceRecipes")),K=((e,t,i)=>{let r=new Set;for(let n of Object.keys(e)){let e=t.entityTypes.find(e=>e===n),s=e?[e]:[...t.aliases].find(([e])=>e===n)?.[1];s?s.forEach(e=>r.add(e)):i.at(n).error(a.ASSISTANT_UNKNOWN_TYPE,l.ASSISTANT_UNKNOWN_TYPE("deletable",n))}return t.entityTypes.filter(e=>r.has(e))})(e.deletable??{},t,N.at("deletable")),V=((e,t,i)=>{let{model:r}=t,n=((e,t,i)=>{let r=new Map;for(let[n,s]of Object.entries(e)){let e=t.entityTypes.find(e=>e===n),o=e?[e]:[...t.aliases].find(([e])=>e===n)?.[1],S=[...t.resolvedShapes].find(([e])=>e===n)?.[1];if(!o||!S){i.at(n).error(a.ASSISTANT_UNKNOWN_TYPE,l.ASSISTANT_UNKNOWN_TYPE("writable",n));continue}for(let e of Object.keys(s)){let t=i.at(n,e);e.startsWith("$")||b.has(e)?t.error(a.ASSISTANT_NOT_WRITABLE,l.ASSISTANT_NOT_WRITABLE(n,e)):g(S.properties,e)?o.forEach(t=>{let i=r.get(t)??new Map;r.set(t,i.has(e)?i:i.set(e,n))}):t.error(a.ASSISTANT_UNKNOWN_FIELD,l.ASSISTANT_UNKNOWN_FIELD("writable",n,e))}}return r})(e,r,i);return r.entityTypes.flatMap(e=>{let s=[...r.resolvedShapes].find(([t])=>t===e)?.[1],o=[...n.get(e)??[]].flatMap(([r,n])=>{let o=s&&g(s.properties,r);return(o&&v(e,{property:r,writableKey:n},o,t,i))??[]});return o.length>0?[{entityType:e,fields:o}]:[]})})(e.writable??{},{model:t,resolveRef:E,exposed:A,sources:w},N.at("writable")),Y=((e,t,i,r)=>{let{model:n}=i,s=new Map;for(let[o,S]of Object.entries(e)){let e=n.entityTypes.find(e=>e===o),p=e?[e]:[...n.aliases].find(([e])=>e===o)?.[1]??[];for(let[e,n]of Object.entries(S)){let S=n?.options;if(!S)continue;let N=r.at(o,e,"options"),T=`${o}.${e}`;for(let r of p){let n=t.find(e=>e.entityType===r)?.fields.find(t=>t.property===e);if(!n)continue;let o=S.as??`${n.name}Options`,p=R(r,S.componentType,i),c=s.get(r)??[],d=c.find(e=>e.options.edgeName===o||e.options.field===n.name);if(p.includes(S.instanceName))if(o===_.section||o===u.section)N.error(a.ASSISTANT_RESERVED_OPTIONS_EDGE_NAME,l.ASSISTANT_RESERVED_OPTIONS_EDGE_NAME(T,o,n.name));else if(d)N.error(a.ASSISTANT_DUPLICATE_OPTIONS_EDGE,l.ASSISTANT_DUPLICATE_OPTIONS_EDGE(r,d.options.edgeName===o?{edgeName:o}:{field:n.name},[d.entry,T]));else{let e={field:n.name,edgeName:o,componentType:S.componentType,instanceName:S.instanceName,validate:S.validate??!0,dryRuns:S.allowDryRuns??!0};s.set(r,[...c,{options:e,hints:j(S.hints),entry:T,entryCtx:N}])}else N.error(a.ASSISTANT_UNKNOWN_OPTIONS_COMPONENT,l.ASSISTANT_UNKNOWN_OPTIONS_COMPONENT(T,S,r,p))}}}return s})(e.writable??{},V,{model:t,components:s},N.at("writable"));var x=[W.metaEntries,k.metaEntries,new Map([...Y].flatMap(([e,[t]])=>t?[[e,t.entryCtx]]:[]))];for(let e of t.entityTypes){let i=x.flatMap(t=>t.get(e)??[])[0],r=D(e);i&&[...t.resolvedShapes.keys()].some(e=>e===r)&&i.error(a.ASSISTANT_META_TYPE_NAME_CONFLICT,l.ASSISTANT_META_TYPE_NAME_CONFLICT(e,r))}let G=t.entityTypes.filter(e=>(W.groups[e]?.length??0)>0||(k.groups[e]?.length??0)>0||(Y.get(e)?.length??0)>0).map(D),z=((e,{actions:t,resolveRef:i,builtInMutations:r,typeNames:n},s)=>{let o=[],S=[...t.values()].map(e=>String(e.name));for(let[p,N]of Object.entries(e)){let e=s.at(p),T=[...t.values()].find(e=>e.name===p);if(!T){e.error(a.ASSISTANT_UNKNOWN_ACTION,l.ASSISTANT_UNKNOWN_ACTION(p,S));continue}let c=N?.as??p,d=o.find(e=>e.fieldName===c),f=C(c);if(r.has(c)||d){e.error(a.ASSISTANT_MUTATION_NAME_CONFLICT,l.ASSISTANT_MUTATION_NAME_CONFLICT(p,c,d?`"assistant.actions.${d.actionName}" already exposes`:"the built-in mutation of that name already takes"));continue}if(n.has(f)||o.some(e=>C(e.fieldName)===f)){e.error(a.ASSISTANT_ACTION_RESULT_TYPE_CONFLICT,l.ASSISTANT_ACTION_RESULT_TYPE_CONFLICT(p,c,f));continue}let m=N?.description??T.description;o.push({fieldName:c,actionName:p,...void 0===m?{}:{description:m},args:Object.fromEntries(Object.entries(T.params).map(([e,{schema:t}])=>[e,L(t,i)])),result:Object.fromEntries(Object.entries(T.result).map(([e,t])=>[e,U(t,i)]))})}return o})(e.actions??{},{actions:p,resolveRef:E,builtInMutations:new Set(["deleteEntity",_.mutation,u.mutation,...V.map(({entityType:e})=>`modify${e}`)]),typeNames:new Set([...I,...t.resolvedShapes.keys(),...G])},N.at("actions")),B=((e,t)=>{let i=e.lenses??{},r=new Set;for(let[n,s]of Object.entries(e.entities??{}))for(let[e,o]of Object.entries(s))for(let s of o?.lenses??[])Object.hasOwn(i,s)?r.add(s):t.at("entities",n,e,"lenses").error(a.ASSISTANT_UNKNOWN_LENS,l.ASSISTANT_UNKNOWN_LENS(`${n}.${e}`,s,Object.keys(i)));for(let e of Object.keys(i))y.has(e)?t.at("lenses",e).error(a.ASSISTANT_RESERVED_LENS_NAME,l.ASSISTANT_RESERVED_LENS_NAME(e,[...y])):r.has(e)||t.at("lenses",e).error(a.ASSISTANT_EMPTY_LENS,l.ASSISTANT_EMPTY_LENS(e));return Object.fromEntries(Object.entries(i).map(([e,{description:t,maxDepth:i}])=>[e,{description:t,maxDepth:i??1}]))})(e,N),H=c(e.formElements??{},N.at("formElements"));if(N.errors.length>f)return;let J=e=>Object.fromEntries(Object.entries(e).map(([e,t])=>[e,{hints:j(t.hints),groups:Object.entries(t.groups).map(([e,t])=>({instanceName:e,groupId:t?.as??e,...t?.description===void 0?{}:{description:t.description},dryRuns:t?.allowDryRuns??!0}))}]));return{declarations:{entities:Object.fromEntries(Object.keys(e.entities??{}).map(e=>[e,(A.get(e)??[]).map(e=>({name:e.name,source:e.source,type:e.type,localized:e.localized,describedByManifest:e.describedByManifest,...void 0===e.description?{}:{description:e.description},...void 0===e.valueDescription?{}:{valueDescription:e.valueDescription},...void 0===e.enumValues?{}:{enumValues:e.enumValues},...void 0===e.lenses?{}:{lenses:e.lenses}}))])),enumValues:Object.fromEntries(t.entityTypes.map(e=>[e,Object.fromEntries(Object.entries(t.resolvedShapes.get(e)?.properties??{}).flatMap(([e,t])=>{let i=T(t,E).enumValues;return i?[[e,i]]:[]}))])),deletable:Object.keys(e.deletable??{}),writable:Object.fromEntries(Object.entries(e.writable??{}).map(([e,i])=>[e,Object.fromEntries(Object.entries(i).map(([i,r])=>[i,{defaultOptionsName:r?.options?.as===void 0,members:Object.fromEntries(t.entityTypes.filter(i=>i===e||[...t.aliases].find(([t])=>t===e)?.[1].includes(i)).flatMap(r=>{let n=g(t.resolvedShapes.get(r)?.properties??{},i),s=n&&v(r,{property:i,writableKey:e},n,{model:t,resolveRef:E,exposed:new Map,sources:{}},N.at("writable")),o=Y.get(r)?.find(t=>t.entry===`${e}.${i}`);return s?[[r,{field:s,...T(n,E).localized?{exposedDescription:h}:{},...o?{options:{options:o.options,hints:o.hints}}:{}}]]:[]}))}]))])),childRecipes:J(e.childRecipes??{}),replaceRecipes:J(e.replaceRecipes??{})},entityTypes:t.entityTypes,aliases:Object.fromEntries(t.aliases),exampleType:t.rootEntityTypes[0]??t.entityTypes[0],states:{navigationStates:i.navigationStates,viewStates:i.viewStates,toolStates:i.toolStates},deletableTypes:K,writableTypes:V,actionFields:z,childRecipes:Object.fromEntries(Object.entries(W.groups).map(([e,t])=>[e,{groups:t,hints:W.hints.get(e)??[]}])),replaceRecipes:Object.fromEntries(Object.entries(k.groups).map(([e,t])=>[e,{groups:t,hints:k.hints.get(e)??[]}])),optionsEdges:Object.fromEntries([...Y].map(([e,t])=>[e,t.map(({options:e,hints:t})=>({options:e,hints:t}))])),fields:Object.fromEntries([...P].map(([e,t])=>[e,t.map(t=>o(t,A.get(e)??[]))])),lenses:B,formElements:H}};export const createAssistantSchema=(e,t,n)=>{let s=resolveAssistantManifest(e,t,n);if(s)try{return{...r(s),resolved:s}}catch(e){if(e instanceof i)return void n.at("entities").error(a.ASSISTANT_FIELD_SHAPE_CONFLICT,l.ASSISTANT_FIELD_SHAPE_CONFLICT(e.fieldName,e.exposures));n.error(a.ASSISTANT_INVALID_SCHEMA,l.ASSISTANT_INVALID_SCHEMA([e instanceof Error?e.message:String(e)]));return}};