@salsita-ai/sdk 0.50.0-develop.c28cfb7ded → 0.50.0-develop.d0eaeed131

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 (378) hide show
  1. package/README.md +19 -14
  2. package/dist/admin/default-admin-elements.d.ts +9 -0
  3. package/dist/admin/default-admin-elements.js +1 -0
  4. package/dist/admin/default-elements/built-in-entity-element.d.ts +10 -0
  5. package/dist/admin/default-elements/built-in-entity-element.js +1 -0
  6. package/dist/admin/default-elements/built-in-layout-element.d.ts +10 -0
  7. package/dist/admin/default-elements/built-in-layout-element.js +1 -0
  8. package/dist/admin/default-elements/index.d.ts +2 -0
  9. package/dist/admin/default-elements/index.js +1 -0
  10. package/dist/admin/index.d.ts +1 -0
  11. package/dist/admin/index.js +1 -1
  12. package/dist/application-spec/caching/content-diff.js +1 -1
  13. package/dist/application-spec/core/application-file.d.ts +0 -2
  14. package/dist/application-spec/core/application-file.js +1 -1
  15. package/dist/application-spec/errors/diagnostic-codes.d.ts +5 -0
  16. package/dist/application-spec/errors/diagnostic-codes.js +1 -1
  17. package/dist/application-spec/errors/diagnostic-messages.d.ts +5 -0
  18. package/dist/application-spec/errors/diagnostic-messages.js +1 -1
  19. package/dist/application-spec/generate-application/code/domain-runtime-files.js +1 -1
  20. package/dist/application-spec/generate-application/code/generate-application-code.d.ts +3 -2
  21. package/dist/application-spec/generate-application/code/generate-application-code.js +1 -1
  22. package/dist/application-spec/generate-application/code/project-scaffolding.d.ts +15 -14
  23. package/dist/application-spec/generate-application/code/project-scaffolding.js +2 -2
  24. package/dist/application-spec/generate-application/code/templates/admin-config.js +3 -0
  25. package/dist/application-spec/generate-application/code/templates/common/format-property-key.d.ts +7 -0
  26. package/dist/application-spec/generate-application/code/templates/common/format-property-key.js +1 -0
  27. package/dist/application-spec/generate-application/code/templates/common/schema-to-type-string.js +3 -3
  28. package/dist/application-spec/generate-application/code/templates/eslint-config.d.ts +5 -0
  29. package/dist/application-spec/generate-application/code/templates/eslint-config.js +4 -5
  30. package/dist/application-spec/generate-application/code/templates/frontend-config.js +3 -5
  31. package/dist/application-spec/generate-application/code/templates/gitignore.js +0 -3
  32. package/dist/application-spec/generate-application/code/templates/globals.js +7 -5
  33. package/dist/application-spec/generate-application/code/templates/index.d.ts +3 -2
  34. package/dist/application-spec/generate-application/code/templates/index.js +1 -1
  35. package/dist/application-spec/generate-application/code/templates/lingui-rc.d.ts +5 -0
  36. package/dist/application-spec/generate-application/code/templates/lingui-rc.js +4 -4
  37. package/dist/application-spec/generate-application/code/templates/prettier-config.d.ts +5 -0
  38. package/dist/application-spec/generate-application/code/templates/prettier-config.js +4 -5
  39. package/dist/application-spec/generate-application/code/templates/root-tsconfig.d.ts +6 -0
  40. package/dist/application-spec/generate-application/code/templates/root-tsconfig.js +2 -0
  41. package/dist/application-spec/generate-application/code/templates/skills/phoenix-cli-skill.js +1 -1
  42. package/dist/application-spec/generate-application/code/templates/skills/phoenix-create-configurator-skill.js +1 -1
  43. package/dist/application-spec/generate-application/code/templates/skills/phoenix-feedback-skill.js +5 -5
  44. package/dist/application-spec/generate-application/code/templates/skills/phoenix-review-skill.js +3 -3
  45. package/dist/application-spec/generate-application/code/templates/skills/phoenix-skill.js +1 -1
  46. package/dist/application-spec/generate-application/code/templates/skills/phoenix-variants-skill.js +2 -2
  47. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.d.ts +16 -4
  48. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.js +2 -2
  49. package/dist/application-spec/generate-application/code/templates/spec-code/collect-spec-code.d.ts +58 -0
  50. package/dist/application-spec/generate-application/code/templates/spec-code/collect-spec-code.js +1 -0
  51. package/dist/application-spec/generate-application/code/templates/spec-code/index.d.ts +2 -0
  52. package/dist/application-spec/generate-application/code/templates/spec-code/index.js +1 -0
  53. package/dist/application-spec/generate-application/code/templates/spec-code/spec-code.d.ts +18 -0
  54. package/dist/application-spec/generate-application/code/templates/spec-code/spec-code.js +41 -0
  55. package/dist/application-spec/generate-application/code/templates/spec-messages/index.d.ts +1 -0
  56. package/dist/application-spec/generate-application/code/templates/spec-messages/index.js +1 -0
  57. package/dist/application-spec/generate-application/code/templates/spec-messages/spec-messages.d.ts +20 -0
  58. package/dist/application-spec/generate-application/code/templates/spec-messages/spec-messages.js +6 -0
  59. package/dist/application-spec/generate-application/code/templates/tsconfig.d.ts +5 -0
  60. package/dist/application-spec/generate-application/code/templates/tsconfig.js +1 -1
  61. package/dist/application-spec/generate-application/code/templates/webhooks-config.js +2 -3
  62. package/dist/application-spec/generate-application/runtime/admin-runtime/admin-model-runtime.d.ts +4 -3
  63. package/dist/application-spec/generate-application/runtime/admin-runtime/admin-runtime.d.ts +2 -2
  64. package/dist/application-spec/generate-application/runtime/admin-runtime/states-runtime.d.ts +2 -2
  65. package/dist/application-spec/generate-application/runtime/application-runtime.d.ts +6 -5
  66. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-model-runtime.d.ts +4 -3
  67. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-runtime.d.ts +2 -2
  68. package/dist/application-spec/generate-application/runtime/configurator-runtime/states-runtime.d.ts +2 -2
  69. package/dist/application-spec/generate-application/runtime/migrations/migration-runtime.d.ts +2 -2
  70. package/dist/application-spec/generate-application/runtime/sections/assistant-runtime.d.ts +2 -2
  71. package/dist/application-spec/generate-application/runtime/sections/data-runtime.d.ts +4 -4
  72. package/dist/application-spec/generate-application/runtime/sections/expression-runtime.d.ts +3 -2
  73. package/dist/application-spec/generate-application/runtime/sections/theme-runtime.d.ts +2 -2
  74. package/dist/application-spec/generate-application/runtime/sections/transformers-runtime.d.ts +3 -3
  75. package/dist/application-spec/generate-application/runtime-spec/decode-runtime-spec.d.ts +9 -0
  76. package/dist/application-spec/generate-application/runtime-spec/decode-runtime-spec.js +1 -0
  77. package/dist/application-spec/generate-application/runtime-spec/encode-runtime-spec.d.ts +8 -0
  78. package/dist/application-spec/generate-application/runtime-spec/encode-runtime-spec.js +1 -0
  79. package/dist/application-spec/generate-application/runtime-spec/encoded-runtime-spec.d.ts +27 -0
  80. package/dist/application-spec/generate-application/runtime-spec/encoded-runtime-spec.js +1 -0
  81. package/dist/application-spec/generate-application/runtime-spec/index.d.ts +5 -0
  82. package/dist/application-spec/generate-application/runtime-spec/index.js +1 -0
  83. package/dist/application-spec/generate-application/runtime-spec/runtime-spec.d.ts +68 -0
  84. package/dist/application-spec/generate-application/runtime-spec/runtime-spec.js +1 -0
  85. package/dist/application-spec/generate-application/runtime-spec/spec-code-id.d.ts +40 -0
  86. package/dist/application-spec/generate-application/runtime-spec/spec-code-id.js +1 -0
  87. package/dist/application-spec/parse-application-files/categorize/categorize-files.d.ts +28 -0
  88. package/dist/application-spec/parse-application-files/categorize/categorize-files.js +1 -1
  89. package/dist/application-spec/parse-application-files/categorize/earlier-generated-editor-configs.d.ts +16 -0
  90. package/dist/application-spec/parse-application-files/categorize/earlier-generated-editor-configs.js +9 -0
  91. package/dist/application-spec/parse-application-files/categorize/earlier-generated-tsconfig.d.ts +9 -0
  92. package/dist/application-spec/parse-application-files/categorize/earlier-generated-tsconfig.js +1 -0
  93. package/dist/application-spec/parse-application-files/raw-spec/parse-yaml-spec-file.js +1 -1
  94. package/dist/application-spec/parse-application-files/spec/application/admin-spec/admin-spec.js +1 -1
  95. package/dist/application-spec/parse-application-files/spec/application/configurator-spec/configurator-spec.js +1 -1
  96. package/dist/application-spec/parse-application-files/spec/common/index.d.ts +1 -0
  97. package/dist/application-spec/parse-application-files/spec/common/index.js +1 -1
  98. package/dist/application-spec/parse-application-files/spec/common/value-type/format-value-type.d.ts +3 -0
  99. package/dist/application-spec/parse-application-files/spec/common/value-type/format-value-type.js +1 -0
  100. package/dist/application-spec/parse-application-files/spec/common/value-type/index.d.ts +5 -0
  101. package/dist/application-spec/parse-application-files/spec/common/value-type/index.js +1 -0
  102. package/dist/application-spec/parse-application-files/spec/common/value-type/intersect-value-types.d.ts +6 -0
  103. package/dist/application-spec/parse-application-files/spec/common/value-type/intersect-value-types.js +1 -0
  104. package/dist/application-spec/parse-application-files/spec/common/value-type/is-assignable-value-type.d.ts +8 -0
  105. package/dist/application-spec/parse-application-files/spec/common/value-type/is-assignable-value-type.js +1 -0
  106. package/dist/application-spec/parse-application-files/spec/common/value-type/value-type-at.d.ts +10 -0
  107. package/dist/application-spec/parse-application-files/spec/common/value-type/value-type-at.js +1 -0
  108. package/dist/application-spec/parse-application-files/spec/common/value-type/value-type.d.ts +98 -0
  109. package/dist/application-spec/parse-application-files/spec/common/value-type/value-type.js +1 -0
  110. package/dist/application-spec/parse-application-files/spec/components/bindings/component-path.d.ts +13 -0
  111. package/dist/application-spec/parse-application-files/spec/components/bindings/component-path.js +1 -0
  112. package/dist/application-spec/parse-application-files/spec/components/bindings/index.d.ts +2 -0
  113. package/dist/application-spec/parse-application-files/spec/components/bindings/index.js +1 -1
  114. package/dist/application-spec/parse-application-files/spec/components/bindings/read-binding-type.d.ts +24 -0
  115. package/dist/application-spec/parse-application-files/spec/components/bindings/read-binding-type.js +1 -0
  116. package/dist/application-spec/parse-application-files/spec/components/component-state-type.d.ts +8 -0
  117. package/dist/application-spec/parse-application-files/spec/components/component-state-type.js +1 -0
  118. package/dist/application-spec/parse-application-files/spec/components/filter-criterion-types.d.ts +13 -0
  119. package/dist/application-spec/parse-application-files/spec/components/filter-criterion-types.js +1 -0
  120. package/dist/application-spec/parse-application-files/spec/components/static-entity-id.d.ts +14 -0
  121. package/dist/application-spec/parse-application-files/spec/components/static-entity-id.js +1 -0
  122. package/dist/application-spec/parse-application-files/spec/components/user-component-entry.d.ts +6 -0
  123. package/dist/application-spec/parse-application-files/spec/components/user-component-entry.js +1 -1
  124. package/dist/application-spec/parse-application-files/spec/components/user-components.d.ts +7 -4
  125. package/dist/application-spec/parse-application-files/spec/components/user-components.js +1 -1
  126. package/dist/application-spec/parse-application-files/spec/expressions/expression-read-types.d.ts +24 -0
  127. package/dist/application-spec/parse-application-files/spec/expressions/expression-read-types.js +1 -0
  128. package/dist/application-spec/parse-application-files/spec/expressions/expression-read.d.ts +13 -0
  129. package/dist/application-spec/parse-application-files/spec/expressions/expression-read.js +1 -0
  130. package/dist/application-spec/parse-application-files/spec/expressions/expression-value-type.d.ts +9 -0
  131. package/dist/application-spec/parse-application-files/spec/expressions/expression-value-type.js +1 -0
  132. package/dist/application-spec/parse-application-files/spec/expressions/expressions.d.ts +6 -2
  133. package/dist/application-spec/parse-application-files/spec/expressions/expressions.js +1 -1
  134. package/dist/application-spec/parse-application-files/spec/expressions/user-expressions.d.ts +3 -1
  135. package/dist/application-spec/parse-application-files/spec/expressions/user-expressions.js +1 -1
  136. package/dist/application-spec/parse-application-files/spec/invariants/invariants.d.ts +2 -2
  137. package/dist/application-spec/parse-application-files/spec/invariants/invariants.js +1 -1
  138. package/dist/application-spec/parse-application-files/spec/model/index.d.ts +1 -0
  139. package/dist/application-spec/parse-application-files/spec/model/index.js +1 -1
  140. package/dist/application-spec/parse-application-files/spec/model/model-type-resolution.d.ts +10 -0
  141. package/dist/application-spec/parse-application-files/spec/model/model-type-resolution.js +1 -0
  142. package/dist/client/phoenix-api.d.ts +367 -0
  143. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.d.ts +7 -1
  144. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.js +1 -1
  145. package/dist/configurator/pages/DefaultConfiguratorLayout.d.ts +3 -2
  146. package/dist/configurator/pages/LoadedConfiguratorDetailPage.js +1 -1
  147. package/dist/configurator/pages/default-configurator-elements.d.ts +2 -1
  148. package/dist/configurator/pages/default-configurator-elements.js +1 -1
  149. package/dist/configurator/pages/default-elements/built-in-entity-element.d.ts +10 -0
  150. package/dist/configurator/pages/default-elements/built-in-entity-element.js +1 -0
  151. package/dist/configurator/pages/default-elements/built-in-layout-element.d.ts +10 -0
  152. package/dist/configurator/pages/default-elements/built-in-layout-element.js +1 -0
  153. package/dist/configurator/pages/default-elements/domain-control-elements.d.ts +6 -0
  154. package/dist/configurator/pages/default-elements/domain-control-elements.js +1 -0
  155. package/dist/configurator/pages/default-elements/index.d.ts +4 -0
  156. package/dist/configurator/pages/default-elements/index.js +1 -0
  157. package/dist/configurator/pages/default-elements/recipe-panel-elements.d.ts +3 -0
  158. package/dist/configurator/pages/default-elements/recipe-panel-elements.js +1 -0
  159. package/dist/configurator/pages/default-elements/sidebar-footer-elements.d.ts +7 -0
  160. package/dist/configurator/pages/default-elements/sidebar-footer-elements.js +1 -0
  161. package/dist/configurator/pages/default-elements/toolbar-elements.d.ts +7 -0
  162. package/dist/configurator/pages/default-elements/toolbar-elements.js +1 -0
  163. package/dist/configurator/ui/SaveMessageSnackbars.d.ts +10 -0
  164. package/dist/configurator/ui/SaveMessageSnackbars.js +1 -0
  165. package/dist/configurator/ui/assistant/AssistantMarkdown.d.ts +7 -2
  166. package/dist/configurator/ui/assistant/AssistantMarkdown.js +1 -1
  167. package/dist/configurator/ui/assistant/AssistantPanel.js +1 -1
  168. package/dist/configurator/ui/assistant/AssistantThread.js +1 -1
  169. package/dist/configurator/ui/assistant/entity-link/AssistantEntityLink.d.ts +1 -1
  170. package/dist/configurator/ui/assistant/entity-link/AssistantEntityLink.js +1 -1
  171. package/dist/configurator/ui/assistant/entity-link/entity-link-state.d.ts +1 -1
  172. package/dist/configurator/ui/assistant/entity-link/index.d.ts +0 -1
  173. package/dist/configurator/ui/assistant/entity-link/index.js +1 -1
  174. package/dist/configurator/ui/assistant/form/AssistantForm.d.ts +19 -0
  175. package/dist/configurator/ui/assistant/form/AssistantForm.js +1 -0
  176. package/dist/configurator/ui/assistant/form/built-in-form-registry.d.ts +10 -0
  177. package/dist/configurator/ui/assistant/form/built-in-form-registry.js +1 -0
  178. package/dist/configurator/ui/assistant/form/compose-answer.d.ts +11 -0
  179. package/dist/configurator/ui/assistant/form/compose-answer.js +1 -0
  180. package/dist/configurator/ui/assistant/form/describe-build-errors.d.ts +6 -0
  181. package/dist/configurator/ui/assistant/form/describe-build-errors.js +1 -0
  182. package/dist/configurator/ui/assistant/form/form-element-definition.d.ts +14 -0
  183. package/dist/configurator/ui/assistant/form/form-element-definition.js +1 -0
  184. package/dist/configurator/ui/assistant/form/form-model.d.ts +38 -0
  185. package/dist/configurator/ui/assistant/form/form-model.js +1 -0
  186. package/dist/configurator/ui/assistant/form/form-registry.d.ts +31 -0
  187. package/dist/configurator/ui/assistant/form/form-registry.js +8 -0
  188. package/dist/configurator/ui/assistant/form/form-state.d.ts +4 -0
  189. package/dist/configurator/ui/assistant/form/form-state.js +1 -0
  190. package/dist/configurator/ui/assistant/form/index.d.ts +2 -0
  191. package/dist/configurator/ui/assistant/form/index.js +1 -0
  192. package/dist/configurator/ui/assistant/form/parse-form-block.d.ts +9 -0
  193. package/dist/configurator/ui/assistant/form/parse-form-block.js +1 -0
  194. package/dist/configurator/ui/assistant/form/read-form-attributes.d.ts +13 -0
  195. package/dist/configurator/ui/assistant/form/read-form-attributes.js +1 -0
  196. package/dist/configurator/ui/assistant/form-elements/FormGroup.d.ts +3 -0
  197. package/dist/configurator/ui/assistant/form-elements/FormGroup.js +1 -0
  198. package/dist/configurator/ui/assistant/form-elements/FormOptions.d.ts +3 -0
  199. package/dist/configurator/ui/assistant/form-elements/FormOptions.js +1 -0
  200. package/dist/configurator/ui/assistant/form-elements/FormReply.d.ts +3 -0
  201. package/dist/configurator/ui/assistant/form-elements/FormReply.js +1 -0
  202. package/dist/configurator/ui/assistant/form-elements/FormText.d.ts +3 -0
  203. package/dist/configurator/ui/assistant/form-elements/FormText.js +1 -0
  204. package/dist/configurator/ui/assistant/form-elements/form-element-props.d.ts +34 -0
  205. package/dist/configurator/ui/assistant/form-elements/form-element-props.js +1 -0
  206. package/dist/configurator/ui/assistant/form-elements/index.d.ts +5 -0
  207. package/dist/configurator/ui/assistant/form-elements/index.js +1 -0
  208. package/dist/configurator/ui/assistant/reference-link/AssistantReferenceLink.d.ts +16 -0
  209. package/dist/configurator/ui/assistant/reference-link/AssistantReferenceLink.js +1 -0
  210. package/dist/configurator/ui/assistant/reference-link/assistant-link-target.d.ts +34 -0
  211. package/dist/configurator/ui/assistant/reference-link/assistant-link-target.js +1 -0
  212. package/dist/configurator/ui/assistant/reference-link/assistant-reference-details.d.ts +25 -0
  213. package/dist/configurator/ui/assistant/reference-link/assistant-reference-details.js +1 -0
  214. package/dist/configurator/ui/assistant/reference-link/index.d.ts +3 -0
  215. package/dist/configurator/ui/assistant/reference-link/index.js +1 -0
  216. package/dist/configurator/ui/assistant/reference-link/reference-styles.d.ts +12 -0
  217. package/dist/configurator/ui/assistant/reference-link/reference-styles.js +1 -0
  218. package/dist/configurator/ui/assistant/reference-link/use-assistant-reference-details.d.ts +8 -0
  219. package/dist/configurator/ui/assistant/reference-link/use-assistant-reference-details.js +1 -0
  220. package/dist/configurator/ui/assistant/resource-image/AssistantImage.d.ts +9 -0
  221. package/dist/configurator/ui/assistant/resource-image/AssistantImage.js +1 -0
  222. package/dist/configurator/ui/assistant/resource-image/index.d.ts +3 -0
  223. package/dist/configurator/ui/assistant/resource-image/index.js +1 -0
  224. package/dist/configurator/ui/assistant/resource-image/resource-path.d.ts +11 -0
  225. package/dist/configurator/ui/assistant/resource-image/resource-path.js +1 -0
  226. package/dist/configurator/ui/assistant/resource-image/use-resource-image-url.d.ts +5 -0
  227. package/dist/configurator/ui/assistant/resource-image/use-resource-image-url.js +1 -0
  228. package/dist/configurator/ui/assistant/streamed-markdown.d.ts +2 -0
  229. package/dist/configurator/ui/assistant/streamed-markdown.js +2 -2
  230. package/dist/configurator/ui/assistant/thread-items.d.ts +8 -1
  231. package/dist/configurator/ui/assistant/thread-items.js +1 -1
  232. package/dist/configurator/ui/assistant/use-follow-stream.js +1 -1
  233. package/dist/configurator/ui/configurator-layout/slots/services/InvariantViolations.js +1 -1
  234. package/dist/configurator/ui/configurator-layout/slots/services/Services.js +1 -1
  235. package/dist/configurator/ui/legacy/layout/common/SummaryReadLayout.js +1 -1
  236. package/dist/configurator/ui/legacy/layout/simple/SimpleOwnerLayout.js +1 -1
  237. package/dist/configurator/ui/legacy/layout/steps/StepsOwnerLayout.js +1 -1
  238. package/dist/configurator/ui/legacy/layout/tabs/TabsOwnerLayout.js +1 -1
  239. package/dist/configurator/ui/phoenix-layout-elements/LayoutCustomOwnerUi.d.ts +1 -0
  240. package/dist/configurator/ui/phoenix-layout-elements/LayoutCustomOwnerUi.js +1 -1
  241. package/dist/configurator/ui/phoenix-layout-elements/LayoutCustomReadUi.d.ts +1 -0
  242. package/dist/configurator/ui/phoenix-layout-elements/LayoutCustomReadUi.js +1 -1
  243. package/dist/docs/controls/select-child-entity/cardselect.mdx +1 -0
  244. package/dist/docs/fabs/basic.mdx +2 -2
  245. package/dist/docs/index.json +1 -1
  246. package/dist/docs/layouts/custom-layout.mdx +324 -15
  247. package/dist/docs/phoenix/clerk-sign-in.mdx +1 -1
  248. package/dist/docs/phoenix/components.mdx +6 -0
  249. package/dist/docs/phoenix/configurator-interface.mdx +10 -10
  250. package/dist/docs/phoenix/deployments.mdx +2 -6
  251. package/dist/docs/phoenix/domain-model.mdx +2 -0
  252. package/dist/docs/phoenix/getting-started.mdx +6 -3
  253. package/dist/docs/phoenix/layout-slots.mdx +9 -9
  254. package/dist/docs/phoenix/localization.mdx +10 -6
  255. package/dist/docs/phoenix/migration-guide.mdx +24 -11
  256. package/dist/docs/phoenix/phoenix-cli.mdx +65 -20
  257. package/dist/docs/phoenix/project-structure.mdx +66 -32
  258. package/dist/docs/phoenix/quickstart.mdx +7 -7
  259. package/dist/docs/phoenix/sdk-builder-workflow.mdx +7 -7
  260. package/dist/docs/phoenix/testing.mdx +8 -0
  261. package/dist/docs/phoenix/webhooks.mdx +4 -4
  262. package/dist/domain/application/assistant/assistant-form-elements.d.ts +28 -0
  263. package/dist/domain/application/assistant/assistant-form-elements.js +1 -0
  264. package/dist/domain/application/assistant/generate-assistant-prompt.js +1 -1
  265. package/dist/domain/application/assistant/index.d.ts +2 -0
  266. package/dist/domain/application/assistant/index.js +1 -1
  267. package/dist/domain/application/assistant-recipe-groups.d.ts +3 -1
  268. package/dist/domain/core/schema/extended-schema-validator.js +1 -1
  269. package/dist/domain/domain-runtime/spec/module-checks/element-registration.d.ts +12 -11
  270. package/dist/domain/domain-runtime/spec/module-checks/element-registration.js +1 -1
  271. package/dist/domain/domain-runtime/spec/module-checks/index.d.ts +1 -1
  272. package/dist/domain/domain-runtime/spec/module-checks/index.js +1 -1
  273. package/dist/domain/domain-runtime/spec/selectors.js +1 -1
  274. package/dist/domain/system-components/child-entity-selection.js +1 -1
  275. package/dist/domain/system-components/common/scene-entity-control-schema.d.ts +3 -0
  276. package/dist/domain/system-components/common/scene-entity-control-schema.js +1 -1
  277. package/dist/globals/index.d.ts +2 -0
  278. package/dist/i18n/locales/cs/messages.js +1 -1
  279. package/dist/i18n/locales/da/messages.js +1 -1
  280. package/dist/i18n/locales/de/messages.js +1 -1
  281. package/dist/i18n/locales/de-AT/messages.js +1 -1
  282. package/dist/i18n/locales/en/messages.js +1 -1
  283. package/dist/i18n/locales/en-AU/messages.js +1 -1
  284. package/dist/i18n/locales/en-GB/messages.js +1 -1
  285. package/dist/i18n/locales/es/messages.js +1 -1
  286. package/dist/i18n/locales/fr/messages.js +1 -1
  287. package/dist/i18n/locales/hu/messages.js +1 -1
  288. package/dist/i18n/locales/it/messages.js +1 -1
  289. package/dist/i18n/locales/nl/messages.js +1 -1
  290. package/dist/i18n/locales/pl/messages.js +1 -1
  291. package/dist/i18n/locales/pt/messages.js +1 -1
  292. package/dist/i18n/locales/ro/messages.js +1 -1
  293. package/dist/i18n/locales/sk/messages.js +1 -1
  294. package/dist/i18n/locales/tr/messages.js +1 -1
  295. package/dist/legacy/domain-cli/utils/cache.d.ts +1 -1
  296. package/dist/legacy/domain-cli/utils/cache.js +1 -1
  297. package/dist/legacy/domain-spec/__generated/domain-schema.d.ts +79 -80
  298. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-admin.js +10 -11
  299. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-embedded-admin.js +9 -10
  300. package/dist/phoenix/application-spec/application-spec-builder.d.ts +0 -2
  301. package/dist/phoenix/application-spec/application-spec-builder.js +1 -1
  302. package/dist/phoenix/application-spec/generate-application-spec-project.d.ts +0 -2
  303. package/dist/phoenix/application-spec/generate-application-spec-project.js +2 -2
  304. package/dist/phoenix/application-spec/generate-application-spec-story.js +2 -2
  305. package/dist/phoenix/application-spec/generate-project-files.d.ts +0 -2
  306. package/dist/phoenix/application-spec/project-files.js +1 -1
  307. package/dist/phoenix/bin.d.ts +2 -0
  308. package/dist/phoenix/bin.js +2 -0
  309. package/dist/phoenix/check-configs/built-in-eslint-config.d.ts +9 -0
  310. package/dist/phoenix/check-configs/built-in-eslint-config.js +1 -0
  311. package/dist/phoenix/check-configs/eslint-config.d.ts +10 -0
  312. package/dist/phoenix/check-configs/eslint-config.js +1 -0
  313. package/dist/phoenix/check-configs/index.d.ts +8 -0
  314. package/dist/phoenix/check-configs/index.js +1 -0
  315. package/dist/phoenix/check-configs/typescript-project.d.ts +5 -0
  316. package/dist/phoenix/check-configs/typescript-project.js +1 -0
  317. package/dist/phoenix/cli.d.ts +0 -1
  318. package/dist/phoenix/cli.js +1 -2
  319. package/dist/phoenix/commands/build.js +1 -1
  320. package/dist/phoenix/commands/check.js +1 -1
  321. package/dist/phoenix/commands/clean.js +1 -1
  322. package/dist/phoenix/commands/deploy.js +2 -2
  323. package/dist/phoenix/commands/deps/deps.d.ts +73 -0
  324. package/dist/phoenix/commands/deps/deps.js +3 -0
  325. package/dist/phoenix/commands/deps/index.d.ts +1 -0
  326. package/dist/phoenix/commands/deps/index.js +1 -0
  327. package/dist/phoenix/commands/deps/sdk-manifest.d.ts +12 -0
  328. package/dist/phoenix/commands/deps/sdk-manifest.js +1 -0
  329. package/dist/phoenix/commands/dev.js +5 -5
  330. package/dist/phoenix/commands/fix.js +1 -1
  331. package/dist/phoenix/commands/index.d.ts +1 -0
  332. package/dist/phoenix/commands/index.js +1 -1
  333. package/dist/phoenix/commands/init.d.ts +17 -5
  334. package/dist/phoenix/commands/init.js +1 -1
  335. package/dist/phoenix/commands/link.js +1 -1
  336. package/dist/phoenix/commands/prettier.js +1 -1
  337. package/dist/phoenix/commands/sync.js +1 -1
  338. package/dist/phoenix/commands/unlink.js +1 -1
  339. package/dist/phoenix/services/application-spec-project-watcher.d.ts +2 -2
  340. package/dist/phoenix/services/application-spec-project-watcher.js +2 -2
  341. package/dist/phoenix/services/lingui.d.ts +8 -0
  342. package/dist/phoenix/services/lingui.js +1 -1
  343. package/dist/phoenix/services/swc.js +1 -1
  344. package/dist/phoenix/services/vite-config.js +1 -1
  345. package/dist/phoenix/utils/index.d.ts +4 -2
  346. package/dist/phoenix/utils/index.js +1 -1
  347. package/dist/phoenix/utils/node-version/index.d.ts +1 -0
  348. package/dist/phoenix/utils/node-version/index.js +1 -0
  349. package/dist/phoenix/utils/node-version/supported-node-version.d.ts +12 -0
  350. package/dist/phoenix/utils/node-version/supported-node-version.js +4 -0
  351. package/dist/phoenix/utils/package-info.d.ts +0 -9
  352. package/dist/phoenix/utils/package-info.js +1 -1
  353. package/dist/phoenix/utils/package-manager/index.d.ts +2 -0
  354. package/dist/phoenix/utils/package-manager/index.js +1 -0
  355. package/dist/phoenix/utils/package-manager/package-manager-commands.d.ts +19 -0
  356. package/dist/phoenix/utils/package-manager/package-manager-commands.js +1 -0
  357. package/dist/phoenix/utils/package-manager/pnpm-project.d.ts +9 -0
  358. package/dist/phoenix/utils/package-manager/pnpm-project.js +1 -0
  359. package/dist/phoenix/utils/run-command.d.ts +11 -0
  360. package/dist/phoenix/utils/run-command.js +1 -1
  361. package/dist/phoenix/utils/sdk-tool/index.d.ts +1 -0
  362. package/dist/phoenix/utils/sdk-tool/index.js +1 -0
  363. package/dist/phoenix/utils/sdk-tool/resolve-sdk-tool-bin.d.ts +15 -0
  364. package/dist/phoenix/utils/sdk-tool/resolve-sdk-tool-bin.js +1 -0
  365. package/dist/react-sdk/domain-application-context/DomainLifecycleBoundary.js +1 -1
  366. package/dist/react-sdk/domain-context/common-hooks/use-configurator-messages.d.ts +15 -4
  367. package/dist/react-sdk/domain-context/common-hooks/use-configurator-messages.js +1 -1
  368. package/dist/ui-sdk/theme/types.d.ts +1 -1
  369. package/package.json +16 -12
  370. package/schema/domain-spec.json +86 -8
  371. package/dist/application-spec/generate-application/code/templates/nvmrc.d.ts +0 -1
  372. package/dist/application-spec/generate-application/code/templates/nvmrc.js +0 -2
  373. package/dist/application-spec/generate-application/code/templates/package-json.d.ts +0 -10
  374. package/dist/application-spec/generate-application/code/templates/package-json.js +0 -1
  375. package/dist/configurator/ui/assistant/entity-link/entity-link-target.d.ts +0 -5
  376. package/dist/configurator/ui/assistant/entity-link/entity-link-target.js +0 -1
  377. package/dist/phoenix/commands/generate-project-files.d.ts +0 -6
  378. package/dist/phoenix/commands/generate-project-files.js +0 -1
@@ -136,18 +136,37 @@ export default [CabinetModule, DrawerModule, ShelfModule]
136
136
 
137
137
  Phoenix auto-flattens both patterns during build. Use array exports when logically grouping related items in one file.
138
138
 
139
- ## Dependencies Merging
139
+ ## Dependencies
140
140
 
141
- When running `phx sync` or `phx build`, Phoenix manages `package.json` dependencies:
141
+ In a project on the application-spec pipeline, `package.json` is the project's own: `phoenix sync`, `phoenix dev` and `phoenix build` never write it. The SDK lists the packages its code imports from the project's install as peer dependencies (React, three.js, MUI, Lingui and others), and the project declares them next to `@salsita-ai/sdk`. [`phoenix deps`](?path=/docs/phoenix-phoenix-cli--docs#phoenix-deps) adds the missing ones and moves out-of-range ones into the SDK's range; run it, then install, after every SDK update. With pnpm, and the same through any other package manager (`npm install`, `npx phoenix deps` with npm):
142
142
 
143
- | Behavior | Description |
144
- | --------------------- | -------------------------------------------------------------- |
145
- | Phoenix deps override | Required Phoenix dependencies override user-specified versions |
146
- | Versions pinned | All Phoenix deps use exact versions (no ^ or ~) |
147
- | User deps preserved | Non-conflicting user dependencies are kept |
148
- | Manual deps safe | Dependencies not in Phoenix's required list remain untouched |
143
+ ```bash
144
+ pnpm add @salsita-ai/sdk@<version>
145
+ pnpm phoenix deps
146
+ pnpm install
147
+ pnpm phoenix sync
148
+ ```
149
+
150
+ `phoenix sync`, `phoenix dev` and `phoenix build`, also on the platform when a deploy builds, check `package.json` before they generate any file. When a peer is missing, or declared at a version whose lowest match falls outside the SDK's range, they stop and list each such peer with the range the SDK needs and what `package.json` declares. A peer counts in `dependencies`, `devDependencies` or `optionalDependencies`, and a specifier that is not a version range, such as `workspace:` or `link:`, counts as declared. Add your own dependencies to `package.json` as usual; Phoenix leaves them, the Node.js and package-manager versions and the rest of the file as you wrote them.
151
+
152
+ In a project on the legacy pipeline (see [Current and legacy project tooling](?path=/docs/phoenix-phoenix-cli--docs#current-and-legacy-project-tooling)), `phoenix sync` and `phoenix build` merge the SDK's required dependencies into `package.json` instead, at exact versions over the ones you set, and keep every other dependency.
153
+
154
+ ### Package manager
155
+
156
+ A project installs with any package manager: pnpm, npm, Yarn or Bun. Phoenix writes no package-manager settings and no `packageManager` field; the lockfile, `pnpm-workspace.yaml`, `.npmrc` and `.yarnrc.yml` are the project's own. Run `phoenix` through the package manager the project uses, such as `pnpm phoenix sync` or `npx phoenix sync`.
157
+
158
+ A project that installs with pnpm 11 needs a `pnpm-workspace.yaml` in its root before the first install. pnpm 11 stops an install until every dependency build script is allowed or denied, and the SDK's dependencies have three. Its default minimum release age also refuses a package published only recently, so the exclusion lets the project install an SDK build on the day it is released; it is optional:
159
+
160
+ ```yaml
161
+ allowBuilds:
162
+ '@swc/core': true
163
+ esbuild: true
164
+ es5-ext: false
165
+ minimumReleaseAgeExclude:
166
+ - '@salsita-ai/*'
167
+ ```
149
168
 
150
- To add custom dependencies, add them normally to `package.json`. Phoenix preserves them unless they conflict with required framework dependencies.
169
+ The file is yours to extend, for example to allow the build script of a dependency you add. In a pnpm monorepo, these settings go into the workspace root's `pnpm-workspace.yaml`. [`phoenix deploy`](?path=/docs/phoenix-phoenix-cli--docs#phoenix-deploy) packs `pnpm-lock.yaml` and `pnpm-workspace.yaml` when the project has them, and the platform build, which installs with pnpm, follows them.
151
170
 
152
171
  ## Global Interfaces
153
172
 
@@ -180,45 +199,56 @@ type CustomMaterial = Phx['AdminModel']['CustomMaterial']
180
199
 
181
200
  ### Root Level Files
182
201
 
183
- | File | Auto-Generated? | Notes |
184
- | ------------------------------------------------------ | --------------- | -------------------------------------- |
185
- | `package.json` | Partially | Dependencies merged, scripts untouched |
186
- | `tsconfig.json` | Yes | Managed by Phoenix |
187
- | `eslint.config.js` | Yes | Managed by Phoenix |
188
- | `prettier.config.js` | Yes | Managed by Phoenix |
189
- | `.prettierignore` | No | Optional and your own; see below |
190
- | `.linguirc` | Yes | Managed by Phoenix |
191
- | `.nvmrc` | Yes | Managed by Phoenix |
192
- | `.gitignore` | Partially | Only in a git repository; see Markers |
193
- | `.env` | No | Git-ignored, local config |
194
- | `.env.example` | No | Template for env vars |
195
- | `.env.generated` | Yes | Auto-generated IDs, git-ignored |
196
- | `README.md` | No | Project documentation |
197
- | `AGENTS.md` | No | Your own coding-agent instructions |
198
- | `.claude/skills/phoenix*/`, `.agents/skills/phoenix*/` | Yes | Phoenix agent skills |
202
+ | File | Auto-Generated? | Notes |
203
+ | ------------------------------------------------------ | --------------- | ------------------------------------- |
204
+ | `package.json` | No | Yours; see Dependencies |
205
+ | `tsconfig.json` | Once | Yours; see below |
206
+ | `eslint.config.js` | Once | Yours; see below |
207
+ | `prettier.config.js` | Once | Yours; see below |
208
+ | `.prettierignore` | No | Optional and your own; see below |
209
+ | `pnpm-workspace.yaml` | No | Only with pnpm; see Package manager |
210
+ | `.gitignore` | Partially | Only in a git repository; see Markers |
211
+ | `.env` | No | Git-ignored, local config |
212
+ | `.env.example` | No | Template for env vars |
213
+ | `.env.generated` | Yes | Optional, git-ignored; see below |
214
+ | `README.md` | No | Project documentation |
215
+ | `AGENTS.md` | No | Your own coding-agent instructions |
216
+ | `.claude/skills/phoenix*/`, `.agents/skills/phoenix*/` | Yes | Phoenix agent skills |
199
217
 
200
218
  Sync does not write `README.md`, `AGENTS.md`, `.env.example`, `.env.ci` or the `README.md` files in `assets/public/` and `assets/private/`. Earlier SDK versions wrote them once; a project that has them keeps them, and they are yours to edit.
201
219
 
202
- With the application-spec pipeline (see [Current and legacy project tooling](?path=/docs/phoenix-phoenix-cli--docs#current-and-legacy-project-tooling)), Phoenix does not write a `.prettierignore`, and a fresh clone or CI checkout of a project has none. `phoenix check` and `phoenix fix` do not read one: they skip `.phoenix/`, `dist/`, the compiled catalogs in `src/locales/`, `pnpm-lock.yaml` and `.linguirc` on their own. A project that runs Prettier directly, as `prettier --check .` or from an editor, can add its own `.prettierignore`. To commit it, add a `!.prettierignore` line after the Phoenix block of `.gitignore`, because that block lists the file. The legacy pipeline writes `.prettierignore` on every sync.
220
+ Phoenix keeps the generated env file, with the IDs and values of the prepared deployment, in `.phoenix/` unless the project has a `.env.generated` in its root, which then is the one that counts. `phoenix dev` creates no `.env.generated` in the project root; the deployment and environment commands write it there. See [The generated env file](?path=/docs/phoenix-phoenix-cli--docs#the-generated-env-file).
221
+
222
+ With the application-spec pipeline (see [Current and legacy project tooling](?path=/docs/phoenix-phoenix-cli--docs#current-and-legacy-project-tooling)), Phoenix does not write a `.prettierignore`, and a fresh clone or CI checkout of a project has none. `phoenix check` and `phoenix fix` do not read one: they skip `.phoenix/`, `dist/`, the compiled catalogs in `src/locales/` and `.linguirc` on their own, and the package manager's files in the project root, which belong to whichever package manager the project uses: `pnpm-lock.yaml`, `pnpm-workspace.yaml`, `package-lock.json`, `npm-shrinkwrap.json`, `yarn.lock`, `.yarnrc.yml`, `bun.lock` and `bun.lockb`. A project that runs Prettier directly, as `prettier --check .` or from an editor, can add its own `.prettierignore`. To commit it, add a `!.prettierignore` line after the Phoenix block of `.gitignore`, because that block lists the file. The legacy pipeline writes `.prettierignore` on every sync.
223
+
224
+ With the application-spec pipeline, the project's TypeScript settings are in `.phoenix/tsconfig.json`, which sync rewrites with the rest of `.phoenix/`. The root `tsconfig.json` is the one editors and tools find: sync writes it only when the project has none, as a single line that extends the generated settings, and it is yours to commit and to add to:
225
+
226
+ ```json
227
+ { "extends": "./.phoenix/tsconfig.json" }
228
+ ```
229
+
230
+ The only root `tsconfig.json` sync replaces is the full file earlier SDK versions generated there, recognised by its settings; any other stays as it is. `phoenix dev`, `phoenix build` and the webhook bundle do not resolve `paths` aliases, so an alias added to the root file passes `phoenix check` and fails the build. `phoenix check` type-checks with the root `tsconfig.json`, or with `.phoenix/tsconfig.json` when the project has none. The legacy pipeline writes the full `tsconfig.json` on every sync.
231
+
232
+ With the application-spec pipeline, sync writes `eslint.config.js` and `prettier.config.js` only when the project has none, each re-exporting the SDK's shared configuration so editors find it. They are yours to commit and to change. The only ones sync replaces are the files earlier SDK versions generated there; any other stays as it is. `phoenix check` and `phoenix fix` lint and format with the project's files, and with the SDK's configurations when a file is missing (see [`phoenix check`](?path=/docs/phoenix-phoenix-cli--docs#phoenix-check)). Sync formats the files it generates in the project root, such as the agent skills, with the same Prettier configuration, so `phoenix check` accepts them; while the project's configuration cannot be loaded, as before the first install, they get the SDK's settings. The legacy pipeline writes both files on every sync.
233
+
234
+ With the application-spec pipeline, the Lingui configuration is `.phoenix/.linguirc`, which sync rewrites with the rest of `.phoenix/` from `availableLocales` in `spec/application.yaml`. Phoenix passes that file to Lingui every time it extracts or compiles the catalogs and to its Vite builds, so a `.linguirc` in the project root is not read and can be deleted. To run Lingui yourself, name the file: `npx lingui extract --config .phoenix/.linguirc`, from the project root. The legacy pipeline writes `.linguirc` in the project root on every sync.
203
235
 
204
236
  ### DO NOT EDIT (Fully Auto-Generated)
205
237
 
206
- - **Everything in `.phoenix/`** - Completely regenerated on each build. The one exception is `.phoenix/variants/`, where a coding agent writes the option files for `phoenix variants`; a rebuild keeps it
207
- - `tsconfig.json`, `eslint.config.js`, `prettier.config.js`
208
- - `.linguirc`, `.nvmrc`
238
+ - **Everything in `.phoenix/`** - Completely regenerated on each build. The exceptions are `.phoenix/variants/`, where a coding agent writes the option files for `phoenix variants`, and `.phoenix/.env.generated`, the generated env file of `phoenix dev`; a rebuild keeps both
209
239
  - `src/locales/**/*.ts` - Compiled from `.po` catalogs
210
240
  - `.env.generated`
211
241
  - `phoenix` and `phoenix-*` skill folders under `.claude/skills/` and `.agents/skills/` — rewritten on every sync with anything else inside them removed, and other `phoenix`-prefixed skill folders are removed; to customise a skill, copy it to a folder whose name does not start with `phoenix`
212
242
 
213
243
  ### Agent Guidance
214
244
 
215
- Coding agents (Claude Code, Codex, Cursor) read the Phoenix agent skills. An `AGENTS.md` is yours to add for your own instructions; sync does not write one. The `phoenix`, `phoenix-cli`, `phoenix-feedback` and `phoenix-review` skills carry the SDK conventions, CLI tooling and review checklist, and the `phoenix-create-configurator` skill walks the agent from your product documents and assets to a reviewed configurator in five stages. The `phoenix-variants` skill has the agent show you several options over the dev preview when a decision is a matter of taste, and build the one you pick. Phoenix keeps them in step with the installed SDK, including the reference files inside a skill folder. During the internal beta, a project created from a canary build of the SDK gets one more section in the `phoenix` skill: once per conversation the agent checks for a newer canary and, after telling you, updates the project's SDK and runs `phoenix sync`. Other skill folders are never touched.
245
+ Coding agents (Claude Code, Codex, Cursor) read the Phoenix agent skills. An `AGENTS.md` is yours to add for your own instructions; sync does not write one. The `phoenix`, `phoenix-cli`, `phoenix-feedback` and `phoenix-review` skills carry the SDK conventions, CLI tooling and review checklist, and the `phoenix-create-configurator` skill walks the agent from your product documents and assets to a reviewed configurator in five stages. The `phoenix-variants` skill has the agent show you several options over the dev preview when a decision is a matter of taste, and build the one you pick. Phoenix keeps them in step with the installed SDK, including the reference files inside a skill folder. During the internal beta, a project created from a canary build of the SDK gets one more section in the `phoenix` skill: once per conversation the agent checks for a newer canary and, after telling you, updates the project's SDK, runs `phoenix deps`, installs, then runs `phoenix sync`. Other skill folders are never touched.
216
246
 
217
247
  Projects created by earlier SDK versions had this guidance in `CLAUDE.md`, `.cursor/rules/phoenix.mdc` and `commands/review.md`. Sync removes the SDK block from the first two, keeps your own text around it, deletes a file that held nothing else, and deletes the review commands; use the `phoenix-review` skill instead of `/review`.
218
248
 
219
249
  ### Markers for Partial Auto-Generation
220
250
 
221
- `.gitignore` holds the Phoenix entries between two marker lines. Sync rewrites that block and keeps everything outside it:
251
+ `.gitignore` holds the Phoenix entries between two marker lines. Sync rewrites that block and keeps everything outside it. With the application-spec pipeline the block does not list the files sync writes once, `tsconfig.json`, `eslint.config.js` and `prettier.config.js`, so a project commits them:
222
252
 
223
253
  ```gitignore
224
254
  # ===== BEGIN PHOENIX AUTO-GENERATED =====
@@ -242,6 +272,8 @@ With the application-spec pipeline (see [Current and legacy project tooling](?pa
242
272
  - `templates/`
243
273
  - `package.json` (scripts section, custom dependencies)
244
274
  - `.env`, `.env.example`, `.env.ci`
275
+ - `tsconfig.json` (application-spec pipeline; keep it extending `.phoenix/tsconfig.json`)
276
+ - `eslint.config.js`, `prettier.config.js` (application-spec pipeline; sync writes them once, and they are the project's afterwards)
245
277
  - `README.md`, `AGENTS.md`
246
278
 
247
279
  ## File Naming Conventions
@@ -349,6 +381,8 @@ project-root/
349
381
  │ ├── admin-interface.ts # Admin interface types
350
382
  │ ├── i18n.ts # i18n initialization
351
383
  │ ├── globals.d.ts # Global type definitions
384
+ │ ├── tsconfig.json # TypeScript settings, extended by the root tsconfig.json
385
+ │ ├── .linguirc # Lingui configuration
352
386
  │ ├── index.html # Configurator HTML entry
353
387
  │ └── admin.html # Admin HTML entry
354
388
  │
@@ -512,7 +546,7 @@ Assets are split between two locations with different deployment strategies:
512
546
 
513
547
  Localization files enable multi-language support in your configurator.
514
548
 
515
- Translatable messages are authored in TypeScript and TSX source files using `@lingui/macro`.
549
+ Translatable messages are authored in TypeScript and TSX source files using Lingui's macros: `msg` from `@lingui/core/macro` and `<Trans>` from `@lingui/react/macro`.
516
550
 
517
551
  Locale catalogs live in `src/locales/<lang>/`. Phoenix creates and updates the `messages.po` source catalogs; edit their `msgstr` values to provide translations. The `messages.ts` files are compiled from those catalogs and must not be edited directly.
518
552
 
@@ -15,7 +15,7 @@ Build a working office desk configurator from an empty folder. You will describe
15
15
 
16
16
  ## Before you start
17
17
 
18
- Use Node.js 24 and pnpm 11. The tutorial uses the office desk model served by this documentation site at `/models/office-desk.gltf`; download it first. Real client projects normally start from `phoenix init`. This tutorial creates the four essential files by hand so you can see what Phoenix owns.
18
+ Use Node.js 24 and any package manager; the commands below use pnpm, and with pnpm 11 the project also needs the `pnpm-workspace.yaml` in [Package manager](?path=/docs/phoenix-project-structure--docs#package-manager). The tutorial uses the office desk model served by this documentation site at `/models/office-desk.gltf`; download it first. Real client projects normally start from `phoenix init`. This tutorial creates the four essential files by hand so you can see what Phoenix owns.
19
19
 
20
20
  ## Step 0 — Create the project
21
21
 
@@ -40,17 +40,13 @@ Now add these four files.
40
40
  "dependencies": {
41
41
  "@salsita-ai/sdk": "0.48.0"
42
42
  },
43
- "devDependencies": {
44
- "@lingui/cli": "5.9.5",
45
- "@lingui/swc-plugin": "5.11.0"
46
- },
47
43
  "phoenix": {
48
44
  "applicationFlow": true
49
45
  }
50
46
  }
51
47
  ```
52
48
 
53
- Use the SDK version supplied by your team if it differs from the repository's current `0.48.0` version. `phoenix.applicationFlow` selects the application-spec project structure. The first sync uses Lingui while generating the rest of the dependencies, so its CLI and SWC plugin must also be present in the initial install.
49
+ Use the SDK version supplied by your team if it differs from the repository's current `0.48.0` version. `phoenix.applicationFlow` selects the application-spec project structure. The SDK runs its own Lingui, so the SDK is the only dependency you write by hand; `phoenix deps` adds the packages it needs next to it in the install step below. A project started with `phoenix init` gets a `package.json` that already declares them.
54
50
 
55
51
  ### `.env`
56
52
 
@@ -97,13 +93,17 @@ components:
97
93
  layout: universal
98
94
  ```
99
95
 
100
- Install the SDK, then ask Phoenix to generate the rest of the project:
96
+ Install the SDK, let it declare the packages it needs, such as React, three.js and MUI, install them, then ask Phoenix to generate the rest of the project:
101
97
 
102
98
  ```sh
103
99
  pnpm install
100
+ pnpm phoenix deps
101
+ pnpm install
104
102
  pnpm phoenix sync
105
103
  ```
106
104
 
105
+ `phoenix sync` stops while `package.json` lacks one of those packages; after every SDK update, run `phoenix deps` and install again (see [`phoenix deps`](?path=/docs/phoenix-phoenix-cli--docs#phoenix-deps)). With npm, the same steps are `npm install`, `npx phoenix deps`, `npm install` and `npx phoenix sync`.
106
+
107
107
  `phoenix sync` keeps `spec/` and `src/` as your authored inputs and generates the application shell, types, and `.phoenix/` implementation. Start development without a server:
108
108
 
109
109
  ```sh
@@ -8,9 +8,9 @@ Your workspace's Studio shows the setup, the link to your configurator and the s
8
8
 
9
9
  ## Before you start
10
10
 
11
- - **Package access:** `@salsita-ai/sdk` is public on npm; `npx` and `pnpm install` download it without a registry token.
11
+ - **Package access:** `@salsita-ai/sdk` is public on npm; any package manager downloads it without a registry token.
12
12
  - **Workspace details:** you need your workspace slug and its Phoenix region (`eu` or `us`), which you also received with your workspace.
13
- - **Tools:** Node.js and pnpm.
13
+ - **Tools:** Node.js and a package manager. The commands below use pnpm; with npm, run `npm install` and `npx phoenix …` instead, with Yarn `yarn phoenix …`, with Bun `bunx phoenix …`.
14
14
  - **SDK build:** during the internal beta, use the `canary` build of the SDK, as the commands below do. It is published from every change to the platform, so it is newer than the last release.
15
15
 
16
16
  ## 1. Create a project
@@ -22,11 +22,11 @@ pnpm install
22
22
  pnpm phoenix sync
23
23
  ```
24
24
 
25
- `phoenix init [folder]` writes the starter project: `package.json`, `pnpm-workspace.yaml` and the starter spec, `spec/application.yaml` and `spec/configurator.yaml`, which describe one box you can resize and recolour. The starter depends on the same SDK version as the CLI that created it, and its `package.json` has the `dev`, `build`, `deploy`, `check` and `fix` scripts, which are yours to change. `phoenix sync` then adds the rest of the project: the TypeScript, lint and formatting config and the agent skills. It writes no webhook code: a project without `src/webhooks/index.ts` gets a built-in webhook (see [Webhook Entry Point](?path=/docs/phoenix-webhooks--docs#webhook-entry-point)). It writes a `.gitignore` only when the folder is inside a git repository; run `git init` before the first sync, or sync again after it, to get the file.
25
+ `phoenix init [folder]` writes the starter project: `package.json` and the starter spec, `spec/application.yaml` and `spec/configurator.yaml`, which describe one box you can resize and recolour. The starter depends on the same SDK version as the CLI that created it and on the packages the SDK requires next to it (React, three.js, MUI, Lingui and the others, with their type packages), with ESLint and Prettier at the versions the SDK uses itself. Its `package.json` has the `dev`, `build`, `deploy`, `check` and `fix` scripts, which are yours to change. `phoenix sync` then adds the rest of the project: the TypeScript, lint and formatting config and the agent skills. It writes no webhook code: a project without `src/webhooks/index.ts` gets a built-in webhook (see [Webhook Entry Point](?path=/docs/phoenix-webhooks--docs#webhook-entry-point)). It writes a `.gitignore` only when the folder is inside a git repository; run `git init` before the first sync, or sync again after it, to get the file.
26
26
 
27
- `init` only writes these files: it asks nothing and contacts no server. It refuses a folder that already has a `spec/` folder. A `package.json` already in the folder is kept, as long as it depends on the SDK.
27
+ `init` only writes these files: it asks nothing and contacts no server. It refuses a folder that already has a `spec/` folder. A `package.json` already in the folder is kept, as long as it depends on the SDK, and gains only the entries it lacks (see [Starting a New Project](?path=/docs/phoenix-phoenix-cli--docs#starting-a-new-project)).
28
28
 
29
- `pnpm-workspace.yaml` holds the pnpm settings the install needs: it allows the build scripts of the SDK's dependencies and exempts `@salsita-ai/*` packages from pnpm's minimum release age, so a build of the SDK published today installs. The file is yours to edit, for example to allow the build script of a dependency you add. `phoenix sync` adds these entries when they are missing and keeps the values you set. A project inside a pnpm monorepo gets no file of its own; the workspace root holds the settings.
29
+ Phoenix writes no package-manager settings. With pnpm 11, add a `pnpm-workspace.yaml` that allows the build scripts of the SDK's dependencies before the first install; [Package manager](?path=/docs/phoenix-project-structure--docs#package-manager) has the file.
30
30
 
31
31
  The starter `spec/application.yaml` begins with `project: default`, which means the default project of the workspace you sign in to. Leave it as it is; a workspace has one project.
32
32
 
@@ -76,12 +76,12 @@ pnpm phoenix deploy
76
76
  `phoenix deploy` goes through these steps:
77
77
 
78
78
  1. It validates the application spec.
79
- 2. It packs the project files: the `.yaml` files in `spec`, everything in `src`, `mocks`, `assets`, `public` and `templates`, and `package.json`, `pnpm-lock.yaml`, `pnpm-workspace.yaml`, `.gitignore`, `CLAUDE.md` and `.cursor/rules/phoenix.mdc`. Every `node_modules`, `.phoenix` and `__generated` folder, every `.DS_Store` and `._*` file and every `.env` and `.env.*` file are left out, at any depth.
79
+ 2. It packs the project files: the `.yaml` files in `spec`, everything in `src`, `mocks`, `assets`, `public` and `templates`, and `package.json`, `tsconfig.json`, `pnpm-lock.yaml`, `pnpm-workspace.yaml`, `.gitignore`, `CLAUDE.md` and `.cursor/rules/phoenix.mdc`. Every `node_modules`, `.phoenix` and `__generated` folder, every `.DS_Store` and `._*` file and every `.env` and `.env.*` file are left out, at any depth.
80
80
  3. It asks the server for a build. The server compares your domain model with the deployed one and refuses, before anything is uploaded, a model that changed under an already deployed model version; see [Migrations](?path=/docs/phoenix-migrations--docs).
81
81
  4. It uploads the archive, which may be up to 200 MB.
82
82
  5. It starts the build, prints a link to the build's page in Studio and follows the build until your configurator is live, then prints its URL.
83
83
 
84
- On the server, the install follows your `pnpm-lock.yaml` and `pnpm-workspace.yaml`, so it allows the same build scripts and package versions as `pnpm install` on your computer. The build runs without platform secrets. It sees only your own environment variables and the public platform values, the [build environment](?path=/docs/phoenix-phoenix-cli--docs) that `phoenix deployment:build-envs` writes. The trusted deploy step then publishes the frontend, webhooks and assets.
84
+ On the server, the install runs pnpm. It follows your `pnpm-lock.yaml` and `pnpm-workspace.yaml` when the project has them, so a pnpm project gets the same build scripts and package versions as on your computer; without them, pnpm resolves `package.json` with the settings the SDK needs. The build runs without platform secrets. It sees only your own environment variables and the public platform values, the [build environment](?path=/docs/phoenix-phoenix-cli--docs) that `phoenix deployment:build-envs` writes. The trusted deploy step then publishes the frontend, webhooks and assets.
85
85
 
86
86
  If the build fails, is cancelled or takes too long, `phoenix deploy` prints the end of the build log and exits with an error. `--no-wait` returns as soon as the build starts.
87
87
 
@@ -33,6 +33,14 @@ invariants, actions, migrations, presets and the components declared in YAML. `c
33
33
  handler, element and transformer; it reads the frontend environment when it is imported, so a test that
34
34
  uses it stubs `phx.frontendEnv` first.
35
35
 
36
+ A test that mounts the configurator's UI builds from `configuratorConfig`: it carries the SDK's default
37
+ elements, the built-in layout, controls, toolbar buttons and sidebar-footer pieces, which
38
+ `configuratorBuilder` does not, so a test that mounts the UI from `createTestApplicationConfig(configuratorBuilder)`
39
+ shows a "not found" box in place of every built-in element. Code that assembles a config without the
40
+ generated files calls `.withDefaultElements(defaultConfiguratorElements)` on its configurator builder, with
41
+ the list from `@salsita-ai/sdk/configurator`, or `defaultAdminElements` from `@salsita-ai/sdk/admin` for
42
+ the admin.
43
+
36
44
  A test passes the generated export to the helper and does not call the export's methods: they are how the
37
45
  SDK assembles an application, not an interface for tests, while the helper's call does not depend on that
38
46
  assembly.
@@ -408,7 +408,7 @@ ctx.emailTaskBuilder.withSubject(msg`Your configuration`)
408
408
  In React templates, use `<Trans>` for inline strings and `<HtmlHelpers.Localized>` to render message descriptors:
409
409
 
410
410
  ```tsx
411
- import { Trans } from '@lingui/macro'
411
+ import { Trans } from '@lingui/react/macro'
412
412
 
413
413
  import { HtmlHelpers } from '@salsita-ai/sdk/webhook'
414
414
 
@@ -473,7 +473,7 @@ The template file:
473
473
 
474
474
  ```tsx
475
475
  // src/webhooks/handlers/configurator-finalize-handler/tasks/pdf-template.tsx
476
- import { Trans } from '@lingui/macro'
476
+ import { Trans } from '@lingui/react/macro'
477
477
 
478
478
  import { HtmlHelpers, PdfHelpers, ResourceHelpers } from '@salsita-ai/sdk/webhook'
479
479
 
@@ -595,7 +595,7 @@ except for resource reference interpolation.
595
595
 
596
596
  ```tsx
597
597
  // src/webhooks/handlers/configurator-finalize-handler/tasks/email-task.tsx
598
- import { msg } from '@lingui/macro'
598
+ import { msg } from '@lingui/core/macro'
599
599
 
600
600
  import { EmailTemplate } from './email-template.js'
601
601
 
@@ -620,7 +620,7 @@ export const simpleEmailTask = phx.webhooks.taskFactory.createSendEmailTask((res
620
620
 
621
621
  ```tsx
622
622
  // src/webhooks/handlers/configurator-finalize-handler/tasks/email-template.tsx
623
- import { Trans } from '@lingui/macro'
623
+ import { Trans } from '@lingui/react/macro'
624
624
 
625
625
  import { EmailHelpers, ResourceHelpers } from '@salsita-ai/sdk/webhook'
626
626
 
@@ -0,0 +1,28 @@
1
+ /**
2
+ * What an element of an assistant form collects: a `group` all its children, a `choice` exactly one
3
+ * of its options, a `choices` any number of them; an `option` is something to pick and an `input` a
4
+ * free value.
5
+ */
6
+ export type AssistantFormRole = 'group' | 'choice' | 'choices' | 'option' | 'input';
7
+ /** The type an attribute of a form element is validated and coerced to; the model writes every attribute as a string. */
8
+ export interface AssistantFormAttribute {
9
+ readonly type: 'string' | 'number' | 'integer' | 'boolean';
10
+ readonly enum?: readonly string[];
11
+ }
12
+ /**
13
+ * An element the assistant can write inside a ```` ```form ```` fence of its reply to ask the user
14
+ * something. The panel renders it, and the SDK prompt lists it, so the model and the panel agree on
15
+ * one set of elements.
16
+ */
17
+ export interface AssistantFormElementDescriptor {
18
+ /** The tag: lowercase, and never the name of an HTML element. */
19
+ readonly name: string;
20
+ readonly role: AssistantFormRole;
21
+ /** What the element is for, printed in the prompt after its signature. */
22
+ readonly description: string;
23
+ /** Attributes beyond the built-in `label` and, on an option or an input, `value`. */
24
+ readonly attributes: Readonly<Record<string, AssistantFormAttribute>>;
25
+ readonly required?: readonly string[];
26
+ }
27
+ /** The elements every assistant form understands, in the order the prompt lists them. */
28
+ export declare const ASSISTANT_BUILT_IN_FORM_ELEMENTS: readonly AssistantFormElementDescriptor[];
@@ -0,0 +1 @@
1
+ export const ASSISTANT_BUILT_IN_FORM_ELEMENTS=[{name:"group",role:"group",description:"Puts related questions together under its label.",attributes:{}},{name:"choice",role:"choice",description:"The user picks exactly one of its options.",attributes:{}},{name:"choices",role:"choices",description:"The user picks any number of its options.",attributes:{}},{name:"reply",role:"option",description:"A short answer shown as a button.",attributes:{}},{name:"text",role:"input",description:"A single line the user types.",attributes:{placeholder:{type:"string"}}}];
@@ -1 +1 @@
1
- export const generateAssistantPrompt=e=>{let t=Object.values(e.childRecipes??{}).some(e=>e.length>0),a=Object.values(e.replaceRecipes??{}).some(e=>e.length>0),n=Object.values(e.fieldOptions??{}).some(e=>e.length>0),s=Object.keys(e.actions??{}).length>0,i=(e.deletableTypes?.length??0)>0||Object.values(e.writableFields??{}).some(e=>Object.keys(e).length>0)||t||a||s,o=t||a||n,r=[...t?["`childRecipes` is what can be added to it"]:[],...a?["`replaceRecipes` what it can be replaced with"]:[],...n?["`<field>Options` the values a field accepts"]:[]],h=["`selected`",...(e.navigationFields??[]).map(e=>`\`${e}\``)].join(", ");return[["Tools","- Put related operations in one call and select only the fields you need.",...i?[`- Use a mutation inside \`query\` to answer a what-if about a change ${o?"the lists under `meta` do not show":"before making it"}.`,"- Use `apply` only for what the user asked for."]:["- Nothing in this configurator can be changed through you. Say so when the user asks for a change."],"- When an operation fails, its `errors` say why and what to send instead."],...i?[["After a change","- A change is made only when the `apply` result has `committed: true`. Otherwise `errors` or `message` says what happened; without either, nothing changed. Never say a change was made when it was not.","- `sideEffects` names the major or unexpected things the configurator changed along with your change. Tell the user about them when committed; otherwise they describe what would happen. Smaller adjustments are not listed.","- A mutation returns the state after the change: use the ids and values it returned, not the ones you sent.",...s?["- When one mutation does the whole of what the user asked, use it instead of building the same change from several others."]:[]]]:[],...o?[["What can be done to an entity",`- \`meta\` lists what is possible right now: ${r.join(", ")}. Read the list before such a change and before telling the user what is available.`,`- You can select \`dryRun\` on ${[...t||a?["recipes"]:[],...n?["options"]:[]].join(" or ")} to look ahead and pick one that meets what the user asked for. It is optional before a change.`,"- Read the lists again after a change, unless their descriptions say they stay the same."]]:[],["The `[changes]` block","- Every user message starts with it: a glimpse of what the user did in the configurator since your last turn.",`- \`[changes: none]\`, or only ${h} lines: what you know still holds. Do not query it again.`,"- Other lines are a hint at what to read again: `A` added, `D` deleted, `M` modified with the fields. Text after `#` says what caused the line; `reset: undo/redo` says the user undid or redid changes.","- Read computed fields again when a listed change may affect them.","- `[changes: unavailable]` and `[changes: too many (n)]`: read again before relying on anything you read earlier.",...i?["- Your applied changes are not listed, except those waiting for user approval: they appear once approved."]:[]],["Reading the schema","- Take ids from results.",...(e.deletableTypes?.length??0)>0||a?["- The id of a deleted or replaced entity is gone and may later be given to another entity."]:[],`- A field whose name starts with \`_\` is computed: read it${i?", never write it":""}.`,"- Numbers are in the unit the field description names. Convert when the user uses another unit."],["Entity links","- When you name an entity the user may want to find, write it as a Markdown link whose target is `entity:` and its id: `[the corner cabinet](entity:<id>)`. The user sees only the text; the id is never shown.","- Link only entities that exist in the configuration now, never one created only inside `query`."],...e.lenses?.declarations?[["Built-in fragments","- These fragments are already defined for every operation. Spread one by name on a field of its type, as in `field { ...FragmentName }`, instead of listing its fields.","- A fragment is a starting selection: add the other fields you need next to the spread, by name from the schema.","- Never define a fragment with one of these names.","",e.lenses.declarations]]:[]].map(e=>e.join("\n")).join("\n\n")};
1
+ import{ASSISTANT_BUILT_IN_FORM_ELEMENTS as e}from"./assistant-form-elements.js";let t=[["Containers",["group","choice","choices"]],["Options",["option"]],["Inputs",["input"]]];export const generateAssistantPrompt=a=>{let n=Object.values(a.childRecipes??{}).some(e=>e.length>0),i=Object.values(a.replaceRecipes??{}).some(e=>e.length>0),s=Object.values(a.fieldOptions??{}).some(e=>e.length>0),o=Object.keys(a.actions??{}).length>0,r=(a.deletableTypes?.length??0)>0||Object.values(a.writableFields??{}).some(e=>Object.keys(e).length>0)||n||i||o,h=n||i||s,l=[...n?["`childRecipes` is what can be added to it"]:[],...i?["`replaceRecipes` what it can be replaced with"]:[],...s?["`<field>Options` the values a field accepts"]:[]],d=["`selected`",...(a.navigationFields??[]).map(e=>`\`${e}\``)].join(", ");return[["Tools","- Put related operations in one call and select only the fields you need.",...r?[`- Use a mutation inside \`query\` to answer a what-if about a change ${h?"the lists under `meta` do not show":"before making it"}.`,"- Use `apply` only for what the user asked for."]:["- Nothing in this configurator can be changed through you. Say so when the user asks for a change."],"- When an operation fails, its `errors` say why and what to send instead."],...r?[["After a change","- A change is made only when the `apply` result has `committed: true`. Otherwise `errors` or `message` says what happened; without either, nothing changed. Never say a change was made when it was not.","- `sideEffects` names the major or unexpected things the configurator changed along with your change. Tell the user about them when committed; otherwise they describe what would happen. Smaller adjustments are not listed.","- A mutation returns the state after the change: use the ids and values it returned, not the ones you sent.",...o?["- When one mutation does the whole of what the user asked, use it instead of building the same change from several others."]:[]]]:[],...h?[["What can be done to an entity",`- \`meta\` lists what is possible right now: ${l.join(", ")}. Read the list before such a change and before telling the user what is available.`,`- You can select \`dryRun\` on ${[...n||i?["recipes"]:[],...s?["options"]:[]].join(" or ")} to look ahead and pick one that meets what the user asked for. It is optional before a change.`,"- Read the lists again after a change, unless their descriptions say they stay the same."]]:[],["The `[changes]` block","- Every user message starts with it: a glimpse of what the user did in the configurator since your last turn.",`- \`[changes: none]\`, or only ${d} lines: what you know still holds. Do not query it again.`,"- Other lines are a hint at what to read again: `A` added, `D` deleted, `M` modified with the fields. Text after `#` says what caused the line; `reset: undo/redo` says the user undid or redid changes.","- Read computed fields again when a listed change may affect them.","- `[changes: unavailable]` and `[changes: too many (n)]`: read again before relying on anything you read earlier.",...r?["- Your applied changes are not listed, except those waiting for user approval: they appear once approved."]:[]],["Reading the schema","- Take ids from results.",...(a.deletableTypes?.length??0)>0||i?["- The id of a deleted or replaced entity is gone and may later be given to another entity."]:[],`- A field whose name starts with \`_\` is computed: read it${r?", never write it":""}.`,"- Numbers are in the unit the field description names. Convert when the user uses another unit."],["Links","- You may link an entity of the current configuration when you speak about that very entity: `[the left burner](entity:CookingTop-1)`. It helps the user find it in the configurator.",...h?["- Whenever you name recipes or options you read from `meta`, in a list, a table or a sentence, link each one: `[Single gas burner](recipe:KitchenRange-1/top/gas_single)` or `[Oak](option:Cabinet-2/finishOptions/oak)`. The link shows the user its picture or color and its description, so never draw previews yourself. The target is the entity id, the recipe group id or the options field you read, and the key or value, each encoded as in a URL."]:[]],["Replies","- Write Markdown only, never HTML: the panel does not render it.","- An image, `![alt](path)`, is shown only when its path is relative."],["Forms","- To ask the user something they answer by picking or typing, end your reply with a form: a fenced code block with the language `form`. It holds only elements, written as lowercase tags with string attributes, without Markdown or text.","- Every element takes `label`, the text the user sees; on a container or an input it also names the answer. Options and inputs take `value`: an option sends it instead of its label, and an input starts with it.","- Options can also stand on their own, outside a `choice` or `choices`.","- An element or attribute not listed here, or an element other than an option inside a `choice` or `choices`, makes the whole form fail.","- The answer is the user's next message. Each container or input gives a line `Label: value`, or the bare value without a label; the lines of a labelled container are indented by two spaces under it, a `choices` lists each picked option on its own line, and `—` marks what was left unanswered.",'- Example: `<choice label="Plinth"><reply label="Black" /><reply label="Oak" /></choice>` is answered with `Plinth: Oak`.',...t.flatMap(([t,a])=>{let n=e.filter(({role:e})=>a.includes(e));return 0===n.length?[]:[`- ${t}:`,...n.map(e=>` - \`${(({name:e,role:t,attributes:a})=>{let n=["label",..."option"===t||"input"===t?["value"]:[],...Object.keys(a)];return"option"===t||"input"===t?`<${e} ${n.join(" ")} />`:`<${e} ${n.join(" ")}>…</${e}>`})(e)}\`: ${e.description}`)]})],...a.lenses?.declarations?[["Built-in fragments","- These fragments are already defined for every operation. Spread one by name on a field of its type, as in `field { ...FragmentName }`, instead of listing its fields.","- A fragment is a starting selection: add the other fields you need next to the spread, by name from the schema.","- Never define a fragment with one of these names.","",a.lenses.declarations]]:[]].map(e=>e.join("\n")).join("\n\n")};
@@ -7,3 +7,5 @@ export type { AssistantFieldSource, AssistantRecipeGroup, AssistantFieldOptions,
7
7
  export { generateAssistantPrompt } from './generate-assistant-prompt.js';
8
8
  export * from './session-setup/index.js';
9
9
  export { describeAssistantValues, mergeAssistantFields, resolveAssistantField } from './assistant-fields.js';
10
+ export { ASSISTANT_BUILT_IN_FORM_ELEMENTS } from './assistant-form-elements.js';
11
+ export type { AssistantFormAttribute, AssistantFormElementDescriptor, AssistantFormRole, } from './assistant-form-elements.js';
@@ -1 +1 @@
1
- export{ASSISTANT_HINTS}from"./assistant-resolved-manifest.js";export{buildAssistantManifest}from"./build-assistant-manifest.js";export{AssistantFieldClashError,createAssistantExecutionSchema}from"./create-assistant-execution-schema.js";export{generateAssistantPrompt}from"./generate-assistant-prompt.js";export*from"./session-setup/index.js";export{describeAssistantValues,mergeAssistantFields,resolveAssistantField}from"./assistant-fields.js";
1
+ export{ASSISTANT_HINTS}from"./assistant-resolved-manifest.js";export{buildAssistantManifest}from"./build-assistant-manifest.js";export{AssistantFieldClashError,createAssistantExecutionSchema}from"./create-assistant-execution-schema.js";export{generateAssistantPrompt}from"./generate-assistant-prompt.js";export*from"./session-setup/index.js";export{describeAssistantValues,mergeAssistantFields,resolveAssistantField}from"./assistant-fields.js";export{ASSISTANT_BUILT_IN_FORM_ELEMENTS}from"./assistant-form-elements.js";
@@ -41,6 +41,8 @@ export interface AssistantRecipeContext {
41
41
  /** Resolves a title in the current language, for the key of a recipe that declares none. */
42
42
  readonly resolveLocalizable: (message: Localizable) => string;
43
43
  }
44
+ /** What reading a recipe group needs: listing never cooks, so the panel can read a group without a cooker. */
45
+ type AssistantRecipeReadContext = Pick<AssistantRecipeContext, 'componentReader' | 'resolveLocalizable'>;
44
46
  /** One recipe of a group as the assistant addresses it: the list item and its key, unique within the group. */
45
47
  export interface AssistantRecipe {
46
48
  readonly key: string;
@@ -73,7 +75,7 @@ export declare const findAssistantRecipeGroups: (manifest: AssistantManifest, ki
73
75
  * assistant sees the groups the configurator's own controls would offer. A list item without recipes
74
76
  * adds nothing and is left out.
75
77
  */
76
- export declare const readAssistantRecipeGroup: (kind: AssistantRecipeKind, group: AssistantRecipeGroup, entityId: DomainEntityId<string>, state: AnyDomainState, context: AssistantRecipeContext) => AssistantRecipeGroupSnapshot | null;
78
+ export declare const readAssistantRecipeGroup: (kind: AssistantRecipeKind, group: AssistantRecipeGroup, entityId: DomainEntityId<string>, state: AnyDomainState, context: AssistantRecipeReadContext) => AssistantRecipeGroupSnapshot | null;
77
79
  /**
78
80
  * The updates of one recipe of a group for the entity `entityId`, computed from `state`: the same
79
81
  * updates, with the same tag, the configurator's own controls make. A recipe of a child group is
@@ -1 +1 @@
1
- import{createAjvSchemaValidator as e}from"./create-ajv-schema-validator.js";import{createCspSchemaValidator as a}from"./create-csp-schema-validator.js";let t="csp-compatible"===globalThis.PHX_SCHEMA_VALIDATOR?a:e;export const getExtendedSchemaValidator=()=>{let e=t();return e.addKeyword("tsType"),e.addKeyword("import"),e.addKeyword("declared"),e};export const extendedSchemaValidator=getExtendedSchemaValidator();
1
+ import{createAjvSchemaValidator as e}from"./create-ajv-schema-validator.js";import{createCspSchemaValidator as a}from"./create-csp-schema-validator.js";export const getExtendedSchemaValidator=()=>{let t="csp-compatible"===globalThis.PHX_SCHEMA_VALIDATOR?a():e();return t.addKeyword("tsType"),t.addKeyword("import"),t.addKeyword("declared"),t};export const extendedSchemaValidator=getExtendedSchemaValidator();
@@ -26,15 +26,6 @@ export interface CustomPhoenixEntityElementProps {
26
26
  entityId: DomainEntityId<string>;
27
27
  children?: ReactNode;
28
28
  }
29
- export interface SystemElementRegistry {
30
- layoutElements: Record<string, (props: PropsWithChildren) => JSX.Element>;
31
- entityElements: Record<string, (props: CustomPhoenixEntityElementProps) => JSX.Element>;
32
- }
33
- /**
34
- * Internal registry for system-level elements registered at import time
35
- * via createPhoenixLayoutElement / createPhoenixEntityElement.
36
- */
37
- export declare const systemElementRegistry: SystemElementRegistry;
38
29
  type SchemaOfPhoenixLayoutElement<SCHEMA extends {
39
30
  kind: string;
40
31
  props?: Record<string, unknown>;
@@ -61,7 +52,12 @@ export interface PhoenixLayoutElementDefinition<SCHEMA extends {
61
52
  }>;
62
53
  }
63
54
  /**
64
- * For internal use in PHX only.
55
+ * Returns the component of a built-in layout element definition; it registers nothing. A layout
56
+ * element reaches the runtime only through a registration in `elements` or `defaultElements`.
57
+ *
58
+ * @deprecated Register a layout element with `createCustomPhoenixLayoutElement(name, component)`;
59
+ * the built-in ones are in `defaultConfiguratorElements` and `defaultAdminElements`. This API will
60
+ * be removed in a future version.
65
61
  */
66
62
  export declare const createPhoenixLayoutElement: <SCHEMA extends {
67
63
  kind: string;
@@ -95,7 +91,12 @@ export interface PhoenixEntityElementDefinition<SCHEMA extends {
95
91
  component: React.FunctionComponent<SCHEMA['props'] & CustomPhoenixEntityElementProps>;
96
92
  }
97
93
  /**
98
- * For internal use in PHX only.
94
+ * Returns the component of a built-in entity element definition; it registers nothing. An entity
95
+ * element reaches the runtime only through a registration in `elements` or `defaultElements`.
96
+ *
97
+ * @deprecated Register an entity element with `createCustomPhoenixEntityElement(name, component)`;
98
+ * the built-in ones are in `defaultConfiguratorElements` and `defaultAdminElements`. This API will
99
+ * be removed in a future version.
99
100
  */
100
101
  export declare const createPhoenixEntityElement: <SCHEMA extends {
101
102
  kind: string;
@@ -1 +1 @@
1
- import{SHARED_FOLDER_HINT as e,isRecord as t,resolveListModule as n}from"./project-modules.js";export const systemElementRegistry={layoutElements:{},entityElements:{}};export const createPhoenixLayoutElement=e=>(systemElementRegistry.layoutElements[e.schema.properties.kind.enum[0]]=e.component,e.component);export const createCustomPhoenixLayoutElement=(e,t)=>({type:"layout",name:e,element:t});export const createPhoenixEntityElement=e=>(systemElementRegistry.entityElements[e.schema.properties.kind.enum[0]]=e.component,e.component);export const createCustomPhoenixEntityElement=(e,t)=>({type:"entity",name:e,element:t});let o={expected:"an element registration, or an array of them",fix:`Create it with phx.frontend.createCustomPhoenixLayoutElement(...) or phx.frontend.createCustomPhoenixEntityElement(...), ${e}.`},r=e=>!!t(e)&&("icon"===e.type?Array.isArray(e.elements):("entity"===e.type||"layout"===e.type)&&"string"==typeof e.name&&"function"==typeof e.element);export const resolveElementModule=e=>n(e,o,r);export const resolveElementModules=e=>e.flatMap(resolveElementModule);
1
+ import{SHARED_FOLDER_HINT as e,isRecord as t,resolveListModule as o}from"./project-modules.js";export const createPhoenixLayoutElement=e=>e.component;export const createCustomPhoenixLayoutElement=(e,t)=>({type:"layout",name:e,element:t});export const createPhoenixEntityElement=e=>e.component;export const createCustomPhoenixEntityElement=(e,t)=>({type:"entity",name:e,element:t});let n={expected:"an element registration, or an array of them",fix:`Create it with phx.frontend.createCustomPhoenixLayoutElement(...) or phx.frontend.createCustomPhoenixEntityElement(...), ${e}.`},r=e=>!!t(e)&&("icon"===e.type?Array.isArray(e.elements):("entity"===e.type||"layout"===e.type)&&"string"==typeof e.name&&"function"==typeof e.element);export const resolveElementModule=e=>o(e,n,r);export const resolveElementModules=e=>e.flatMap(resolveElementModule);
@@ -1,4 +1,4 @@
1
- export { type PhoenixEntityElementProps, type PhoenixEntityElementRegistration, type PhoenixLayoutElementRegistration, type PhoenixIconRegistration, type ElementRegistration, type CustomPhoenixEntityElementProps, type PhoenixLayoutElementDefinition, type PhoenixEntityElementDefinition, type CreateCustomPhoenixLayoutElement, type CreateCustomPhoenixEntityElement, createPhoenixLayoutElement, createPhoenixEntityElement, createCustomPhoenixLayoutElement, createCustomPhoenixEntityElement, resolveElementModule, resolveElementModules, systemElementRegistry, } from './element-registration.js';
1
+ export { type PhoenixEntityElementProps, type PhoenixEntityElementRegistration, type PhoenixLayoutElementRegistration, type PhoenixIconRegistration, type ElementRegistration, type CustomPhoenixEntityElementProps, type PhoenixLayoutElementDefinition, type PhoenixEntityElementDefinition, type CreateCustomPhoenixLayoutElement, type CreateCustomPhoenixEntityElement, createPhoenixLayoutElement, createPhoenixEntityElement, createCustomPhoenixLayoutElement, createCustomPhoenixEntityElement, resolveElementModule, resolveElementModules, } from './element-registration.js';
2
2
  export { type PhoenixHandlerDefinition, type SystemPhoenixHandlerDefinition, type PhoenixHandlerRegistration, type SystemPhoenixHandlerRegistration, type SystemPhoenixAsyncHandlerDefinition, type SystemPhoenixAsyncHandlerRegistration, type HandlerRegistration, type CreatePhoenixHandler, createPhoenixHandler, createSystemPhoenixHandler, createSystemPhoenixAsyncHandler, resolveHandlerModule, resolveHandlerModules, } from './handler-registration.js';
3
3
  export { type ProjectModule } from './project-modules.js';
4
4
  export { resolveActionModules } from './resolve-action-modules.js';
@@ -1 +1 @@
1
- export{createPhoenixLayoutElement,createPhoenixEntityElement,createCustomPhoenixLayoutElement,createCustomPhoenixEntityElement,resolveElementModule,resolveElementModules,systemElementRegistry}from"./element-registration.js";export{createPhoenixHandler,createSystemPhoenixHandler,createSystemPhoenixAsyncHandler,resolveHandlerModule,resolveHandlerModules}from"./handler-registration.js";export{resolveActionModules}from"./resolve-action-modules.js";export{resolveComponentOpticModules}from"./resolve-component-optic-modules.js";export{resolveExpressionModules}from"./resolve-expression-modules.js";export{resolveImportedTransformers,resolveTransformerModule,resolveTransformerModules}from"./resolve-imported-transformers.js";export{resolveInvariantModules}from"./resolve-invariant-modules.js";
1
+ export{createPhoenixLayoutElement,createPhoenixEntityElement,createCustomPhoenixLayoutElement,createCustomPhoenixEntityElement,resolveElementModule,resolveElementModules}from"./element-registration.js";export{createPhoenixHandler,createSystemPhoenixHandler,createSystemPhoenixAsyncHandler,resolveHandlerModule,resolveHandlerModules}from"./handler-registration.js";export{resolveActionModules}from"./resolve-action-modules.js";export{resolveComponentOpticModules}from"./resolve-component-optic-modules.js";export{resolveExpressionModules}from"./resolve-expression-modules.js";export{resolveImportedTransformers,resolveTransformerModule,resolveTransformerModules}from"./resolve-imported-transformers.js";export{resolveInvariantModules}from"./resolve-invariant-modules.js";
@@ -1 +1 @@
1
- import{createSelector as e}from"@salsita-ai/common/utils";import{buildAssistantManifest as t}from"../../application/assistant/index.js";import{systemElementRegistry as n}from"./module-checks/index.js";export const createSpecSelectors=a=>{let{getState:s}=a,r=e.withTypes(),l=r([r.leaf(e=>e.spec)],e=>e),o=r([l],e=>e.version),i=r([l],e=>e.baseResourcesUrl),m=r([l],e=>e.configurator),g=r([l],e=>e.dataConfig),p=r([l],e=>e.chunks),d=r([l],e=>e.publishedDataHash),c=r([l],e=>e.initialPublishedData),u=r([l],e=>e.canCreate),h=r([l],e=>e.enableAdminRelease),y=r([l],e=>e.textLanguages),f=r([m],e=>e.modelVersion),C=r([l],e=>e.admin),E=r([C],e=>e.preset),x=r([C],e=>e.modelVersion),A=r([m],e=>e.theme),b=r([m],e=>e.assistant),H=r([b],e=>e?t(e):null),D=r([m],e=>e.factory),P=r([C],e=>e.factory),S=r([m],e=>e.componentOptics),w=r([C],e=>e.componentOptics),O=r([m],e=>e.appLoader),T=r([m],e=>e.preview),V=r([m],e=>e.alwaysExpand),L=r([m],e=>e.presets),R=r([m],e=>e.deploymentQueryDisabled),U=r([m],e=>e.prefetchTextureUrls),k=r([m],e=>e.handlerHashes),v=r([m],e=>e.handlers),j=r([v,k],(e,t)=>({...(e=>{let t={},n={},a={};for(let s of e)"phoenix"===s.type&&(t[s.name]=s.handler),"system"===s.type&&(n[s.name]=s.handler),"system-async"===s.type&&(a[s.name]=s.handler);return{handlers:t,systemHandlers:n,systemAsyncHandlers:a}})(e),hashes:t})),F=r([m],e=>e.elementHashes),M=r([m],e=>e.elements),Q=r([m],e=>e.defaultElements),B=r([Q,M,F],(e,t,a)=>({...(e=>{let t={},a={};for(let n of e)"layout"===n.type&&(t[n.name]=n.element),"entity"===n.type&&(a[n.name]=n.element);return{entityElements:{...n.entityElements,...a},layoutElements:{...n.layoutElements,...t}}})([...e,...t]),hashes:a}));return{selectSpec:l,selectVersion:o,selectBaseResourcesUrl:i,selectConfiguratorSpec:m,selectConfiguratorModelVersion:f,selectAdminSpec:C,selectAdminPreset:E,selectAdminModelVersion:x,selectThemeOptions:A,selectAssistant:H,selectConfiguratorFactory:D,selectAdminFactory:P,selectConfiguratorComponentOptics:S,selectAdminComponentOptics:w,selectAppLoader:O,selectPreview:T,selectAlwaysExpand:V,selectPresetSeed:L,selectDeploymentQueryDisabled:R,selectPrefetchTextureUrls:U,selectTextLanguages:y,selectHandlerHashes:k,selectHandlers:v,selectHandlerSlots:j,selectElementHashes:F,selectElements:M,selectElementSlots:B,selectDataConfig:g,selectChunks:p,selectPublishedDataHash:d,selectInitialPublishedData:c,selectCanCreate:u,selectEnableAdminRelease:h,getVersion:()=>o(s()),getBaseResourcesUrl:()=>i(s()),getConfiguratorSpec:()=>m(s()),getConfiguratorModelVersion:()=>f(s()),getAdminSpec:()=>C(s()),getAdminPreset:()=>E(s()),getAdminModelVersion:()=>x(s()),getThemeOptions:()=>A(s()),getAssistant:()=>H(s()),getConfiguratorFactory:()=>D(s()),getAdminFactory:()=>P(s()),getConfiguratorComponentOptics:()=>S(s()),getAdminComponentOptics:()=>w(s()),getAppLoader:()=>O(s()),getPreview:()=>T(s()),getAlwaysExpand:()=>V(s()),getPresetSeed:()=>L(s()),getDeploymentQueryDisabled:()=>R(s()),getPrefetchTextureUrls:()=>U(s()),getTextLanguages:()=>y(s()),getHandlerHashes:()=>k(s()),getHandlers:()=>v(s()),getHandlerSlots:()=>j(s()),getElementHashes:()=>F(s()),getElements:()=>M(s()),getElementSlots:()=>B(s()),getDataConfig:()=>g(s()),getChunks:()=>p(s()),getPublishedDataHash:()=>d(s()),getInitialPublishedData:()=>c(s()),getCanCreate:()=>u(s()),getEnableAdminRelease:()=>h(s())}};
1
+ import{createSelector as e}from"@salsita-ai/common/utils";import{buildAssistantManifest as t}from"../../application/assistant/index.js";export const createSpecSelectors=a=>{let{getState:n}=a,s=e.withTypes(),r=s([s.leaf(e=>e.spec)],e=>e),l=s([r],e=>e.version),o=s([r],e=>e.baseResourcesUrl),i=s([r],e=>e.configurator),g=s([r],e=>e.dataConfig),m=s([r],e=>e.chunks),p=s([r],e=>e.publishedDataHash),d=s([r],e=>e.initialPublishedData),c=s([r],e=>e.canCreate),u=s([r],e=>e.enableAdminRelease),h=s([r],e=>e.textLanguages),y=s([i],e=>e.modelVersion),f=s([r],e=>e.admin),C=s([f],e=>e.preset),A=s([f],e=>e.modelVersion),b=s([i],e=>e.theme),x=s([i],e=>e.assistant),E=s([x],e=>e?t(e):null),H=s([i],e=>e.factory),D=s([f],e=>e.factory),P=s([i],e=>e.componentOptics),S=s([f],e=>e.componentOptics),w=s([i],e=>e.appLoader),O=s([i],e=>e.preview),T=s([i],e=>e.alwaysExpand),V=s([i],e=>e.presets),L=s([i],e=>e.deploymentQueryDisabled),R=s([i],e=>e.prefetchTextureUrls),U=s([i],e=>e.handlerHashes),v=s([i],e=>e.handlers),k=s([v,U],(e,t)=>({...(e=>{let t={},a={},n={};for(let s of e)"phoenix"===s.type&&(t[s.name]=s.handler),"system"===s.type&&(a[s.name]=s.handler),"system-async"===s.type&&(n[s.name]=s.handler);return{handlers:t,systemHandlers:a,systemAsyncHandlers:n}})(e),hashes:t})),F=s([i],e=>e.elementHashes),M=s([i],e=>e.elements),Q=s([i],e=>e.defaultElements),j=s([Q,M,F],(e,t,a)=>({...(e=>{let t={},a={};for(let n of e)"layout"===n.type&&(t[n.name]=n.element),"entity"===n.type&&(a[n.name]=n.element);return{entityElements:a,layoutElements:t}})([...e,...t]),hashes:a}));return{selectSpec:r,selectVersion:l,selectBaseResourcesUrl:o,selectConfiguratorSpec:i,selectConfiguratorModelVersion:y,selectAdminSpec:f,selectAdminPreset:C,selectAdminModelVersion:A,selectThemeOptions:b,selectAssistant:E,selectConfiguratorFactory:H,selectAdminFactory:D,selectConfiguratorComponentOptics:P,selectAdminComponentOptics:S,selectAppLoader:w,selectPreview:O,selectAlwaysExpand:T,selectPresetSeed:V,selectDeploymentQueryDisabled:L,selectPrefetchTextureUrls:R,selectTextLanguages:h,selectHandlerHashes:U,selectHandlers:v,selectHandlerSlots:k,selectElementHashes:F,selectElements:M,selectElementSlots:j,selectDataConfig:g,selectChunks:m,selectPublishedDataHash:p,selectInitialPublishedData:d,selectCanCreate:c,selectEnableAdminRelease:u,getVersion:()=>l(n()),getBaseResourcesUrl:()=>o(n()),getConfiguratorSpec:()=>i(n()),getConfiguratorModelVersion:()=>y(n()),getAdminSpec:()=>f(n()),getAdminPreset:()=>C(n()),getAdminModelVersion:()=>A(n()),getThemeOptions:()=>b(n()),getAssistant:()=>E(n()),getConfiguratorFactory:()=>H(n()),getAdminFactory:()=>D(n()),getConfiguratorComponentOptics:()=>P(n()),getAdminComponentOptics:()=>S(n()),getAppLoader:()=>w(n()),getPreview:()=>O(n()),getAlwaysExpand:()=>T(n()),getPresetSeed:()=>V(n()),getDeploymentQueryDisabled:()=>L(n()),getPrefetchTextureUrls:()=>R(n()),getTextLanguages:()=>h(n()),getHandlerHashes:()=>U(n()),getHandlers:()=>v(n()),getHandlerSlots:()=>k(n()),getElementHashes:()=>F(n()),getElements:()=>M(n()),getElementSlots:()=>j(n()),getDataConfig:()=>g(n()),getChunks:()=>m(n()),getPublishedDataHash:()=>p(n()),getInitialPublishedData:()=>d(n()),getCanCreate:()=>c(n()),getEnableAdminRelease:()=>u(n())}};
@@ -1 +1 @@
1
- import{EnhancedLocalizableSchema as e}from"@salsita-ai/common/utils";import{DomainEntityIdSchema as t,SystemComponentBuilder as i}from"../core/index.js";import{recipeSchema as o}from"./common/recipes.js";export const childEntitySelectionComponent=i.component("childEntitySelection").withState({type:"object",tsType:"ChildEntitySelectionComponentState",import:[{module:"@salsita-ai/sdk/domain",member:"ChildEntitySelectionComponentState"}],properties:{value:t,options:{type:"array",items:{type:"object",properties:{label:e,description:e,img:e,recipes:{type:"array",items:o},keepChildren:{type:"boolean"}},required:["recipes","label"],additionalProperties:!0}}},required:["value","options"],additionalProperties:!1}).build();
1
+ import{EnhancedLocalizableSchema as e}from"@salsita-ai/common/utils";import{DomainEntityIdSchema as t,SystemComponentBuilder as i}from"../core/index.js";import{recipeSchema as o}from"./common/recipes.js";export const childEntitySelectionComponent=i.component("childEntitySelection").withState({type:"object",tsType:"ChildEntitySelectionComponentState",import:[{module:"@salsita-ai/sdk/domain",member:"ChildEntitySelectionComponentState"}],properties:{value:t,options:{type:"array",items:{type:"object",properties:{label:e,description:e,img:e,recipes:{type:"array",items:o}},required:["recipes","label"],additionalProperties:!1}},keepChildren:{type:"boolean"}},required:["value","options"],additionalProperties:!1}).build();
@@ -115,6 +115,7 @@ declare const SceneHtmlOpacityPropertiesTmp: {
115
115
  readonly type: 'number';
116
116
  };
117
117
  };
118
+ readonly required: readonly ['min', 'max'];
118
119
  readonly additionalProperties: false;
119
120
  };
120
121
  readonly polarAngleLimits: {
@@ -138,6 +139,7 @@ declare const SceneHtmlOpacityPropertiesTmp: {
138
139
  readonly type: 'number';
139
140
  };
140
141
  };
142
+ readonly required: readonly ['min', 'max'];
141
143
  readonly additionalProperties: false;
142
144
  };
143
145
  readonly distanceLimits: {
@@ -161,6 +163,7 @@ declare const SceneHtmlOpacityPropertiesTmp: {
161
163
  readonly type: 'number';
162
164
  };
163
165
  };
166
+ readonly required: readonly ['min', 'max'];
164
167
  readonly additionalProperties: false;
165
168
  };
166
169
  readonly minInteractiveOpacity: {
@@ -1 +1 @@
1
- import{EnhancedLocalizableSchema as e}from"@salsita-ai/common/utils";let t={type:"object",tsType:"SceneEntityHtmlOpacityLimits",import:[{module:"@salsita-ai/sdk/domain",member:"SceneEntityHtmlOpacityLimits"}],properties:{min:{type:"number"},max:{type:"number"},smoothZone:{type:"number"},minOpacity:{type:"number"}},additionalProperties:!1};export const SceneHtmlOpacityProperties={azimuthAngleLimits:t,polarAngleLimits:t,distanceLimits:t,minInteractiveOpacity:{type:"number"}};export const SceneHtmlPositionProperties={offsetX:{type:"number"},offsetY:{type:"number"},offsetZ:{type:"number"},screenOffsetHorizontal:{type:"number"},screenOffsetVertical:{type:"number"}};export const SceneHtmlVisibilityProperties={hideWhileDragging:{type:"boolean"},occlude:{type:"boolean"},showWhen:{type:"array",items:{type:"string",enum:["selected","unselected"]}}};export const SceneHtmlTooltipProperties={title:e,tooltipVisibility:{type:["string"],enum:["on-hover","forced","forced-when-still","hidden"]}};
1
+ import{EnhancedLocalizableSchema as e}from"@salsita-ai/common/utils";let t={type:"object",tsType:"SceneEntityHtmlOpacityLimits",import:[{module:"@salsita-ai/sdk/domain",member:"SceneEntityHtmlOpacityLimits"}],properties:{min:{type:"number"},max:{type:"number"},smoothZone:{type:"number"},minOpacity:{type:"number"}},required:["min","max"],additionalProperties:!1};export const SceneHtmlOpacityProperties={azimuthAngleLimits:t,polarAngleLimits:t,distanceLimits:t,minInteractiveOpacity:{type:"number"}};export const SceneHtmlPositionProperties={offsetX:{type:"number"},offsetY:{type:"number"},offsetZ:{type:"number"},screenOffsetHorizontal:{type:"number"},screenOffsetVertical:{type:"number"}};export const SceneHtmlVisibilityProperties={hideWhileDragging:{type:"boolean"},occlude:{type:"boolean"},showWhen:{type:"array",items:{type:"string",enum:["selected","unselected"]}}};export const SceneHtmlTooltipProperties={title:e,tooltipVisibility:{type:["string"],enum:["on-hover","forced","forced-when-still","hidden"]}};
@@ -1,4 +1,6 @@
1
1
  /* eslint-disable @typescript-eslint/triple-slash-reference */
2
+ // Resolved from the SDK's own `vite`, so a project's `import.meta.env` and asset imports type-check without a `vite` of its own
3
+ /// <reference types="vite/client" />
2
4
  /// <reference path="./asset-modules.d.ts" />
3
5
 
4
6
  export {}