@salsita-ai/sdk 0.50.0-develop.9267bdc12e → 0.50.0-develop.98166fe7c3

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 (554) hide show
  1. package/README.md +14 -13
  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/core/components/component-filter.d.ts +53 -0
  16. package/dist/application-spec/core/components/component-filter.js +1 -0
  17. package/dist/application-spec/core/components/index.d.ts +2 -0
  18. package/dist/application-spec/core/components/index.js +1 -0
  19. package/dist/application-spec/core/components/sdk-code-ref.d.ts +9 -0
  20. package/dist/application-spec/core/components/sdk-code-ref.js +1 -0
  21. package/dist/application-spec/core/enhanced-json-value.d.ts +0 -68
  22. package/dist/application-spec/core/enhanced-json-value.js +1 -1
  23. package/dist/application-spec/core/expressions/index.d.ts +2 -0
  24. package/dist/application-spec/core/expressions/index.js +1 -0
  25. package/dist/application-spec/core/expressions/relation-expression-params.d.ts +11 -0
  26. package/dist/application-spec/core/expressions/relation-expression-params.js +1 -0
  27. package/dist/application-spec/core/expressions/sdk-expression-implementation.d.ts +24 -0
  28. package/dist/application-spec/core/expressions/sdk-expression-implementation.js +1 -0
  29. package/dist/application-spec/core/index.d.ts +2 -0
  30. package/dist/application-spec/core/index.js +1 -1
  31. package/dist/application-spec/core/json-value.d.ts +1 -1
  32. package/dist/application-spec/{core → enhanced-json}/eval-to-constant.d.ts +1 -1
  33. package/dist/application-spec/enhanced-json/index.d.ts +4 -0
  34. package/dist/application-spec/enhanced-json/index.js +1 -0
  35. package/dist/application-spec/enhanced-json/is-enhanced-json-array.d.ts +2 -0
  36. package/dist/application-spec/enhanced-json/is-enhanced-json-array.js +1 -0
  37. package/dist/application-spec/enhanced-json/resolve-enhanced-json-value.d.ts +18 -0
  38. package/dist/application-spec/enhanced-json/resolve-enhanced-json-value.js +1 -0
  39. package/dist/application-spec/enhanced-json/schema-from-value.d.ts +24 -0
  40. package/dist/application-spec/enhanced-json/schema-from-value.js +1 -0
  41. package/dist/application-spec/enhanced-json/stringify-enhanced-json-value.d.ts +14 -0
  42. package/dist/application-spec/enhanced-json/stringify-enhanced-json-value.js +1 -0
  43. package/dist/application-spec/enhanced-json/validate-enhanced-json-value-caps.d.ts +12 -0
  44. package/dist/application-spec/enhanced-json/validate-enhanced-json-value-caps.js +1 -0
  45. package/dist/application-spec/enhanced-json/validate-no-legacy-code-ref.d.ts +13 -0
  46. package/dist/application-spec/enhanced-json/validate-no-legacy-code-ref.js +1 -0
  47. package/dist/application-spec/errors/diagnostic-codes.d.ts +9 -0
  48. package/dist/application-spec/errors/diagnostic-codes.js +1 -1
  49. package/dist/application-spec/errors/diagnostic-messages.d.ts +12 -0
  50. package/dist/application-spec/errors/diagnostic-messages.js +1 -1
  51. package/dist/application-spec/generate-application/code/domain-runtime-files.js +1 -1
  52. package/dist/application-spec/generate-application/code/generate-application-code.d.ts +3 -2
  53. package/dist/application-spec/generate-application/code/generate-application-code.js +1 -1
  54. package/dist/application-spec/generate-application/code/project-scaffolding.d.ts +11 -8
  55. package/dist/application-spec/generate-application/code/project-scaffolding.js +2 -2
  56. package/dist/application-spec/generate-application/code/standalone-app-files.d.ts +2 -2
  57. package/dist/application-spec/generate-application/code/standalone-app-files.js +1 -1
  58. package/dist/application-spec/generate-application/code/templates/admin-config.js +3 -0
  59. package/dist/application-spec/generate-application/code/templates/configurator-config.js +6 -4
  60. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-component-optics.js +4 -4
  61. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-defaults.js +1 -1
  62. package/dist/application-spec/generate-application/code/templates/eslint-config.d.ts +5 -0
  63. package/dist/application-spec/generate-application/code/templates/eslint-config.js +4 -5
  64. package/dist/application-spec/generate-application/code/templates/frontend-config.js +3 -5
  65. package/dist/application-spec/generate-application/code/templates/gitignore.js +0 -3
  66. package/dist/application-spec/generate-application/code/templates/globals.js +7 -5
  67. package/dist/application-spec/generate-application/code/templates/index.d.ts +3 -1
  68. package/dist/application-spec/generate-application/code/templates/index.js +1 -1
  69. package/dist/application-spec/generate-application/code/templates/lingui-rc.d.ts +5 -0
  70. package/dist/application-spec/generate-application/code/templates/lingui-rc.js +4 -4
  71. package/dist/application-spec/generate-application/code/templates/package-json.js +1 -1
  72. package/dist/application-spec/generate-application/code/templates/prettier-config.d.ts +5 -0
  73. package/dist/application-spec/generate-application/code/templates/prettier-config.js +4 -5
  74. package/dist/application-spec/generate-application/code/templates/root-tsconfig.d.ts +6 -0
  75. package/dist/application-spec/generate-application/code/templates/root-tsconfig.js +2 -0
  76. package/dist/application-spec/generate-application/code/templates/skills/phoenix-cli-skill.js +1 -1
  77. package/dist/application-spec/generate-application/code/templates/skills/phoenix-review-skill.js +1 -1
  78. package/dist/application-spec/generate-application/code/templates/skills/phoenix-skill.js +1 -1
  79. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.d.ts +13 -6
  80. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.js +2 -2
  81. package/dist/application-spec/generate-application/code/templates/spec-code/collect-spec-code.d.ts +58 -0
  82. package/dist/application-spec/generate-application/code/templates/spec-code/collect-spec-code.js +1 -0
  83. package/dist/application-spec/generate-application/code/templates/spec-code/index.d.ts +2 -0
  84. package/dist/application-spec/generate-application/code/templates/spec-code/index.js +1 -0
  85. package/dist/application-spec/generate-application/code/templates/spec-code/spec-code.d.ts +18 -0
  86. package/dist/application-spec/generate-application/code/templates/spec-code/spec-code.js +41 -0
  87. package/dist/application-spec/generate-application/code/templates/spec-messages/index.d.ts +1 -0
  88. package/dist/application-spec/generate-application/code/templates/spec-messages/index.js +1 -0
  89. package/dist/application-spec/generate-application/code/templates/spec-messages/spec-messages.d.ts +20 -0
  90. package/dist/application-spec/generate-application/code/templates/spec-messages/spec-messages.js +6 -0
  91. package/dist/application-spec/generate-application/code/templates/tsconfig.d.ts +5 -0
  92. package/dist/application-spec/generate-application/code/templates/tsconfig.js +1 -1
  93. package/dist/application-spec/generate-application/code/templates/webhook-index.d.ts +6 -1
  94. package/dist/application-spec/generate-application/code/templates/webhook-index.js +10 -1
  95. package/dist/application-spec/generate-application/code/templates/webhooks-config.js +2 -3
  96. package/dist/application-spec/generate-application/index.d.ts +2 -0
  97. package/dist/application-spec/generate-application/index.js +1 -1
  98. package/dist/application-spec/generate-application/runtime/admin-runtime/admin-model-runtime.d.ts +4 -3
  99. package/dist/application-spec/generate-application/runtime/admin-runtime/admin-runtime.d.ts +7 -3
  100. package/dist/application-spec/generate-application/runtime/admin-runtime/admin-runtime.js +1 -1
  101. package/dist/application-spec/generate-application/runtime/admin-runtime/states-runtime.d.ts +2 -2
  102. package/dist/application-spec/generate-application/runtime/application-runtime.d.ts +13 -5
  103. package/dist/application-spec/generate-application/runtime/application-runtime.js +1 -1
  104. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-model-runtime.d.ts +4 -3
  105. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-runtime.d.ts +6 -2
  106. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-runtime.js +1 -1
  107. package/dist/application-spec/generate-application/runtime/configurator-runtime/states-runtime.d.ts +2 -2
  108. package/dist/application-spec/generate-application/runtime/factory-data/factory-data-runtime.d.ts +43 -0
  109. package/dist/application-spec/generate-application/runtime/factory-data/factory-data-runtime.js +1 -0
  110. package/dist/application-spec/generate-application/runtime/factory-data/index.d.ts +3 -0
  111. package/dist/application-spec/generate-application/runtime/factory-data/index.js +1 -0
  112. package/dist/application-spec/generate-application/runtime/factory-data/recipe-defaults.d.ts +13 -0
  113. package/dist/application-spec/generate-application/runtime/factory-data/recipe-defaults.js +1 -0
  114. package/dist/application-spec/generate-application/runtime/factory-data/static-violations.d.ts +16 -0
  115. package/dist/application-spec/generate-application/runtime/factory-data/static-violations.js +1 -0
  116. package/dist/application-spec/generate-application/runtime/migrations/index.d.ts +1 -0
  117. package/dist/application-spec/generate-application/runtime/migrations/index.js +1 -0
  118. package/dist/application-spec/generate-application/runtime/migrations/migration-runtime.d.ts +53 -0
  119. package/dist/application-spec/generate-application/runtime/migrations/migration-runtime.js +1 -0
  120. package/dist/application-spec/generate-application/runtime/sections/assistant-runtime.d.ts +2 -2
  121. package/dist/application-spec/generate-application/runtime/sections/build-sdk-optic.d.ts +1 -1
  122. package/dist/application-spec/generate-application/runtime/sections/build-sdk-optic.js +1 -1
  123. package/dist/application-spec/generate-application/runtime/sections/data-runtime.d.ts +4 -4
  124. package/dist/application-spec/generate-application/runtime/sections/expression-runtime.d.ts +3 -2
  125. package/dist/application-spec/generate-application/runtime/sections/expression-runtime.js +1 -1
  126. package/dist/application-spec/generate-application/runtime/sections/theme-runtime.d.ts +2 -2
  127. package/dist/application-spec/generate-application/runtime/sections/transformers-runtime.d.ts +3 -3
  128. package/dist/application-spec/generate-application/runtime-spec/decode-runtime-spec.d.ts +9 -0
  129. package/dist/application-spec/generate-application/runtime-spec/decode-runtime-spec.js +1 -0
  130. package/dist/application-spec/generate-application/runtime-spec/encode-runtime-spec.d.ts +8 -0
  131. package/dist/application-spec/generate-application/runtime-spec/encode-runtime-spec.js +1 -0
  132. package/dist/application-spec/generate-application/runtime-spec/encoded-runtime-spec.d.ts +27 -0
  133. package/dist/application-spec/generate-application/runtime-spec/encoded-runtime-spec.js +1 -0
  134. package/dist/application-spec/generate-application/runtime-spec/index.d.ts +5 -0
  135. package/dist/application-spec/generate-application/runtime-spec/index.js +1 -0
  136. package/dist/application-spec/generate-application/runtime-spec/runtime-spec.d.ts +68 -0
  137. package/dist/application-spec/generate-application/runtime-spec/runtime-spec.js +1 -0
  138. package/dist/application-spec/generate-application/runtime-spec/spec-code-id.d.ts +40 -0
  139. package/dist/application-spec/generate-application/runtime-spec/spec-code-id.js +1 -0
  140. package/dist/application-spec/index.d.ts +1 -0
  141. package/dist/application-spec/index.js +1 -1
  142. package/dist/application-spec/parse-application-files/categorize/categorize-files.d.ts +34 -0
  143. package/dist/application-spec/parse-application-files/categorize/categorize-files.js +1 -1
  144. package/dist/application-spec/parse-application-files/categorize/earlier-generated-editor-configs.d.ts +16 -0
  145. package/dist/application-spec/parse-application-files/categorize/earlier-generated-editor-configs.js +9 -0
  146. package/dist/application-spec/parse-application-files/categorize/earlier-generated-tsconfig.d.ts +9 -0
  147. package/dist/application-spec/parse-application-files/categorize/earlier-generated-tsconfig.js +1 -0
  148. package/dist/application-spec/parse-application-files/raw-spec/parse-yaml-spec-file.js +1 -1
  149. package/dist/application-spec/parse-application-files/raw-spec/raw-assistant.d.ts +15 -2
  150. package/dist/application-spec/parse-application-files/raw-spec/raw-assistant.js +1 -1
  151. package/dist/application-spec/parse-application-files/raw-spec/raw-spec-file.js +1 -1
  152. package/dist/application-spec/parse-application-files/spec/application/admin-spec/admin-spec.js +1 -1
  153. package/dist/application-spec/parse-application-files/spec/application/configurator-spec/configurator-spec.js +1 -1
  154. package/dist/application-spec/parse-application-files/spec/common/index.d.ts +1 -0
  155. package/dist/application-spec/parse-application-files/spec/common/index.js +1 -1
  156. package/dist/application-spec/parse-application-files/spec/common/value-type/format-value-type.d.ts +3 -0
  157. package/dist/application-spec/parse-application-files/spec/common/value-type/format-value-type.js +1 -0
  158. package/dist/application-spec/parse-application-files/spec/common/value-type/index.d.ts +5 -0
  159. package/dist/application-spec/parse-application-files/spec/common/value-type/index.js +1 -0
  160. package/dist/application-spec/parse-application-files/spec/common/value-type/intersect-value-types.d.ts +6 -0
  161. package/dist/application-spec/parse-application-files/spec/common/value-type/intersect-value-types.js +1 -0
  162. package/dist/application-spec/parse-application-files/spec/common/value-type/is-assignable-value-type.d.ts +8 -0
  163. package/dist/application-spec/parse-application-files/spec/common/value-type/is-assignable-value-type.js +1 -0
  164. package/dist/application-spec/parse-application-files/spec/common/value-type/value-type-at.d.ts +10 -0
  165. package/dist/application-spec/parse-application-files/spec/common/value-type/value-type-at.js +1 -0
  166. package/dist/application-spec/parse-application-files/spec/common/value-type/value-type.d.ts +98 -0
  167. package/dist/application-spec/parse-application-files/spec/common/value-type/value-type.js +1 -0
  168. package/dist/application-spec/parse-application-files/spec/components/bindings/component-path.d.ts +13 -0
  169. package/dist/application-spec/parse-application-files/spec/components/bindings/component-path.js +1 -0
  170. package/dist/application-spec/parse-application-files/spec/components/bindings/index.d.ts +2 -0
  171. package/dist/application-spec/parse-application-files/spec/components/bindings/index.js +1 -1
  172. package/dist/application-spec/parse-application-files/spec/components/bindings/read-binding-type.d.ts +24 -0
  173. package/dist/application-spec/parse-application-files/spec/components/bindings/read-binding-type.js +1 -0
  174. package/dist/application-spec/parse-application-files/spec/components/component-entry.d.ts +1 -9
  175. package/dist/application-spec/parse-application-files/spec/components/component-entry.js +1 -1
  176. package/dist/application-spec/parse-application-files/spec/components/component-filter.d.ts +1 -54
  177. package/dist/application-spec/parse-application-files/spec/components/component-filter.js +1 -1
  178. package/dist/application-spec/parse-application-files/spec/components/component-state-type.d.ts +8 -0
  179. package/dist/application-spec/parse-application-files/spec/components/component-state-type.js +1 -0
  180. package/dist/application-spec/parse-application-files/spec/components/filter-criterion-types.d.ts +13 -0
  181. package/dist/application-spec/parse-application-files/spec/components/filter-criterion-types.js +1 -0
  182. package/dist/application-spec/parse-application-files/spec/components/index.d.ts +1 -1
  183. package/dist/application-spec/parse-application-files/spec/components/index.js +1 -1
  184. package/dist/application-spec/parse-application-files/spec/components/static-entity-id.d.ts +14 -0
  185. package/dist/application-spec/parse-application-files/spec/components/static-entity-id.js +1 -0
  186. package/dist/application-spec/parse-application-files/spec/components/user-component-entry.d.ts +6 -0
  187. package/dist/application-spec/parse-application-files/spec/components/user-component-entry.js +1 -1
  188. package/dist/application-spec/parse-application-files/spec/components/user-components.d.ts +7 -4
  189. package/dist/application-spec/parse-application-files/spec/components/user-components.js +1 -1
  190. package/dist/application-spec/parse-application-files/spec/expressions/expression-read-types.d.ts +24 -0
  191. package/dist/application-spec/parse-application-files/spec/expressions/expression-read-types.js +1 -0
  192. package/dist/application-spec/parse-application-files/spec/expressions/expression-read.d.ts +13 -0
  193. package/dist/application-spec/parse-application-files/spec/expressions/expression-read.js +1 -0
  194. package/dist/application-spec/parse-application-files/spec/expressions/expression-value-type.d.ts +9 -0
  195. package/dist/application-spec/parse-application-files/spec/expressions/expression-value-type.js +1 -0
  196. package/dist/application-spec/parse-application-files/spec/expressions/expression.d.ts +1 -28
  197. package/dist/application-spec/parse-application-files/spec/expressions/expression.js +1 -1
  198. package/dist/application-spec/parse-application-files/spec/expressions/expressions.d.ts +7 -3
  199. package/dist/application-spec/parse-application-files/spec/expressions/expressions.js +1 -1
  200. package/dist/application-spec/parse-application-files/spec/expressions/index.d.ts +0 -1
  201. package/dist/application-spec/parse-application-files/spec/expressions/index.js +1 -1
  202. package/dist/application-spec/parse-application-files/spec/expressions/memo-eval-plan.js +1 -1
  203. package/dist/application-spec/parse-application-files/spec/expressions/user-expressions.d.ts +3 -1
  204. package/dist/application-spec/parse-application-files/spec/expressions/user-expressions.js +1 -1
  205. package/dist/application-spec/parse-application-files/spec/invariants/invariants.d.ts +2 -2
  206. package/dist/application-spec/parse-application-files/spec/invariants/invariants.js +1 -1
  207. package/dist/application-spec/parse-application-files/spec/model/defaults.js +1 -1
  208. package/dist/application-spec/parse-application-files/spec/model/index.d.ts +1 -0
  209. package/dist/application-spec/parse-application-files/spec/model/index.js +1 -1
  210. package/dist/application-spec/parse-application-files/spec/model/model-type-resolution.d.ts +10 -0
  211. package/dist/application-spec/parse-application-files/spec/model/model-type-resolution.js +1 -0
  212. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-schema.js +1 -1
  213. package/dist/client/phoenix-api.d.ts +463 -0
  214. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.d.ts +36 -1
  215. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.js +1 -1
  216. package/dist/configurator/application-runtime/extensions/systems/assistant-system/graphql-tools.d.ts +7 -1
  217. package/dist/configurator/application-runtime/extensions/systems/assistant-system/graphql-tools.js +1 -1
  218. package/dist/configurator/application-runtime/extensions/systems/drag-and-drop-system/drag-and-drop-system.d.ts +3 -3
  219. package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.d.ts +17 -3
  220. package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.js +1 -1
  221. package/dist/configurator/application-runtime/extensions/systems/graphql-system/inject-assistant-lenses.d.ts +11 -0
  222. package/dist/configurator/application-runtime/extensions/systems/graphql-system/inject-assistant-lenses.js +1 -0
  223. package/dist/configurator/application-runtime/extensions/systems/layout-system/layout-system.d.ts +2 -2
  224. package/dist/configurator/common/configurator-interface.d.ts +22 -1
  225. package/dist/configurator/common/configurator-interface.js +1 -1
  226. package/dist/configurator/common/frontend-analytics.d.ts +2 -0
  227. package/dist/configurator/common/frontend-analytics.js +1 -1
  228. package/dist/configurator/common/index.d.ts +2 -0
  229. package/dist/configurator/common/index.js +1 -1
  230. package/dist/configurator/common/use-finalize-action.d.ts +31 -0
  231. package/dist/configurator/common/use-finalize-action.js +1 -0
  232. package/dist/configurator/common/use-reset-camera.d.ts +6 -0
  233. package/dist/configurator/common/use-reset-camera.js +1 -0
  234. package/dist/configurator/configurator-context/configurator-hooks/layout-hooks.d.ts +1 -1
  235. package/dist/configurator/pages/DefaultConfiguratorLayout.d.ts +3 -2
  236. package/dist/configurator/pages/LoadedConfiguratorDetailPage.js +1 -1
  237. package/dist/configurator/pages/configurator-layout-name.d.ts +2 -0
  238. package/dist/configurator/pages/configurator-layout-name.js +1 -0
  239. package/dist/configurator/pages/default-configurator-elements.d.ts +8 -0
  240. package/dist/configurator/pages/default-configurator-elements.js +1 -0
  241. package/dist/configurator/pages/default-elements/built-in-entity-element.d.ts +10 -0
  242. package/dist/configurator/pages/default-elements/built-in-entity-element.js +1 -0
  243. package/dist/configurator/pages/default-elements/built-in-layout-element.d.ts +10 -0
  244. package/dist/configurator/pages/default-elements/built-in-layout-element.js +1 -0
  245. package/dist/configurator/pages/default-elements/domain-control-elements.d.ts +6 -0
  246. package/dist/configurator/pages/default-elements/domain-control-elements.js +1 -0
  247. package/dist/configurator/pages/default-elements/index.d.ts +4 -0
  248. package/dist/configurator/pages/default-elements/index.js +1 -0
  249. package/dist/configurator/pages/default-elements/recipe-panel-elements.d.ts +3 -0
  250. package/dist/configurator/pages/default-elements/recipe-panel-elements.js +1 -0
  251. package/dist/configurator/pages/default-elements/sidebar-footer-elements.d.ts +7 -0
  252. package/dist/configurator/pages/default-elements/sidebar-footer-elements.js +1 -0
  253. package/dist/configurator/pages/default-elements/toolbar-elements.d.ts +7 -0
  254. package/dist/configurator/pages/default-elements/toolbar-elements.js +1 -0
  255. package/dist/configurator/pages/index.d.ts +1 -0
  256. package/dist/configurator/pages/index.js +1 -1
  257. package/dist/configurator/scene/scene-controls/hotspot-drag-handle/HotspotDragHandle.d.ts +1 -1
  258. package/dist/configurator/scene/scene-controls/hotspot-drag-handle/HotspotDragSceneHandle.d.ts +1 -1
  259. package/dist/configurator/scene/scene-entity/dimension-indicators/DimensionIndicator.d.ts +1 -1
  260. package/dist/configurator/scene/scene-entity/dimension-indicators/DimensionIndicatorInternal.d.ts +1 -1
  261. package/dist/configurator/scene/scene-entity/drag-and-drop/shared.d.ts +2 -2
  262. package/dist/configurator/scene/scene-entity/drag-and-drop/use-drag-object.d.ts +1 -1
  263. package/dist/configurator/scene/scene-entity/materials/RemoteReplacedMaterial.js +1 -1
  264. package/dist/configurator/scene/scene-entity/objects/SceneEntityObjectTextDecal.d.ts +1 -1
  265. package/dist/configurator/ui/assistant/AssistantChips.d.ts +8 -2
  266. package/dist/configurator/ui/assistant/AssistantChips.js +1 -1
  267. package/dist/configurator/ui/assistant/AssistantMarkdown.d.ts +7 -2
  268. package/dist/configurator/ui/assistant/AssistantMarkdown.js +1 -1
  269. package/dist/configurator/ui/assistant/AssistantPanel.js +1 -1
  270. package/dist/configurator/ui/assistant/AssistantThread.js +1 -1
  271. package/dist/configurator/ui/assistant/entity-link/AssistantEntityLink.d.ts +13 -0
  272. package/dist/configurator/ui/assistant/entity-link/AssistantEntityLink.js +1 -0
  273. package/dist/configurator/ui/assistant/entity-link/entity-link-selection.d.ts +22 -0
  274. package/dist/configurator/ui/assistant/entity-link/entity-link-selection.js +1 -0
  275. package/dist/configurator/ui/assistant/entity-link/entity-link-state.d.ts +27 -0
  276. package/dist/configurator/ui/assistant/entity-link/entity-link-state.js +1 -0
  277. package/dist/configurator/ui/assistant/entity-link/index.d.ts +2 -0
  278. package/dist/configurator/ui/assistant/entity-link/index.js +1 -0
  279. package/dist/configurator/ui/assistant/form/AssistantForm.d.ts +19 -0
  280. package/dist/configurator/ui/assistant/form/AssistantForm.js +1 -0
  281. package/dist/configurator/ui/assistant/form/built-in-form-registry.d.ts +10 -0
  282. package/dist/configurator/ui/assistant/form/built-in-form-registry.js +1 -0
  283. package/dist/configurator/ui/assistant/form/compose-answer.d.ts +11 -0
  284. package/dist/configurator/ui/assistant/form/compose-answer.js +1 -0
  285. package/dist/configurator/ui/assistant/form/describe-build-errors.d.ts +6 -0
  286. package/dist/configurator/ui/assistant/form/describe-build-errors.js +1 -0
  287. package/dist/configurator/ui/assistant/form/form-element-definition.d.ts +14 -0
  288. package/dist/configurator/ui/assistant/form/form-element-definition.js +1 -0
  289. package/dist/configurator/ui/assistant/form/form-model.d.ts +38 -0
  290. package/dist/configurator/ui/assistant/form/form-model.js +1 -0
  291. package/dist/configurator/ui/assistant/form/form-registry.d.ts +31 -0
  292. package/dist/configurator/ui/assistant/form/form-registry.js +8 -0
  293. package/dist/configurator/ui/assistant/form/form-state.d.ts +4 -0
  294. package/dist/configurator/ui/assistant/form/form-state.js +1 -0
  295. package/dist/configurator/ui/assistant/form/index.d.ts +2 -0
  296. package/dist/configurator/ui/assistant/form/index.js +1 -0
  297. package/dist/configurator/ui/assistant/form/parse-form-block.d.ts +9 -0
  298. package/dist/configurator/ui/assistant/form/parse-form-block.js +1 -0
  299. package/dist/configurator/ui/assistant/form/read-form-attributes.d.ts +13 -0
  300. package/dist/configurator/ui/assistant/form/read-form-attributes.js +1 -0
  301. package/dist/configurator/ui/assistant/form-elements/FormGroup.d.ts +3 -0
  302. package/dist/configurator/ui/assistant/form-elements/FormGroup.js +1 -0
  303. package/dist/configurator/ui/assistant/form-elements/FormOptions.d.ts +3 -0
  304. package/dist/configurator/ui/assistant/form-elements/FormOptions.js +1 -0
  305. package/dist/configurator/ui/assistant/form-elements/FormReply.d.ts +3 -0
  306. package/dist/configurator/ui/assistant/form-elements/FormReply.js +1 -0
  307. package/dist/configurator/ui/assistant/form-elements/FormText.d.ts +3 -0
  308. package/dist/configurator/ui/assistant/form-elements/FormText.js +1 -0
  309. package/dist/configurator/ui/assistant/form-elements/form-element-props.d.ts +34 -0
  310. package/dist/configurator/ui/assistant/form-elements/form-element-props.js +1 -0
  311. package/dist/configurator/ui/assistant/form-elements/index.d.ts +5 -0
  312. package/dist/configurator/ui/assistant/form-elements/index.js +1 -0
  313. package/dist/configurator/ui/assistant/reference-link/AssistantReferenceLink.d.ts +16 -0
  314. package/dist/configurator/ui/assistant/reference-link/AssistantReferenceLink.js +1 -0
  315. package/dist/configurator/ui/assistant/reference-link/assistant-link-target.d.ts +34 -0
  316. package/dist/configurator/ui/assistant/reference-link/assistant-link-target.js +1 -0
  317. package/dist/configurator/ui/assistant/reference-link/assistant-reference-details.d.ts +25 -0
  318. package/dist/configurator/ui/assistant/reference-link/assistant-reference-details.js +1 -0
  319. package/dist/configurator/ui/assistant/reference-link/index.d.ts +3 -0
  320. package/dist/configurator/ui/assistant/reference-link/index.js +1 -0
  321. package/dist/configurator/ui/assistant/reference-link/reference-styles.d.ts +12 -0
  322. package/dist/configurator/ui/assistant/reference-link/reference-styles.js +1 -0
  323. package/dist/configurator/ui/assistant/reference-link/use-assistant-reference-details.d.ts +8 -0
  324. package/dist/configurator/ui/assistant/reference-link/use-assistant-reference-details.js +1 -0
  325. package/dist/configurator/ui/assistant/streamed-markdown.d.ts +2 -0
  326. package/dist/configurator/ui/assistant/streamed-markdown.js +2 -2
  327. package/dist/configurator/ui/assistant/thread-items.d.ts +8 -1
  328. package/dist/configurator/ui/assistant/thread-items.js +1 -1
  329. package/dist/configurator/ui/configurator-layout/sidebar-keys/index.d.ts +1 -0
  330. package/dist/configurator/ui/configurator-layout/sidebar-keys/index.js +1 -0
  331. package/dist/configurator/ui/configurator-layout/sidebar-keys/sidebar-keys.d.ts +11 -0
  332. package/dist/configurator/ui/configurator-layout/sidebar-keys/sidebar-keys.js +1 -0
  333. package/dist/configurator/ui/configurator-layout/{universal → slots/desktop-sidebar}/DesktopSidebar.d.ts +23 -14
  334. package/dist/configurator/ui/configurator-layout/slots/desktop-sidebar/DesktopSidebar.js +16 -0
  335. package/dist/configurator/ui/configurator-layout/slots/desktop-sidebar/index.d.ts +1 -0
  336. package/dist/configurator/ui/configurator-layout/slots/desktop-sidebar/index.js +1 -0
  337. package/dist/configurator/ui/configurator-layout/slots/services/InvariantViolations.d.ts +4 -4
  338. package/dist/configurator/ui/configurator-layout/slots/services/InvariantViolations.js +1 -1
  339. package/dist/configurator/ui/configurator-layout/slots/services/SideEffects.d.ts +3 -6
  340. package/dist/configurator/ui/configurator-layout/slots/services/SideEffects.js +1 -1
  341. package/dist/configurator/ui/configurator-layout/slots/slots.d.ts +1 -0
  342. package/dist/configurator/ui/configurator-layout/slots/slots.js +1 -1
  343. package/dist/configurator/ui/configurator-layout/universal/DesktopLayout.d.ts +1 -1
  344. package/dist/configurator/ui/configurator-layout/universal/DesktopLayout.js +2 -2
  345. package/dist/configurator/ui/legacy/layout/steps/StepsNavigation.d.ts +2 -2
  346. package/dist/configurator/ui/phoenix-layout-elements/header/common/step-navigation/StepsNavigation.d.ts +2 -2
  347. package/dist/docs/controls/select-child-entity/cardselect.mdx +1 -0
  348. package/dist/docs/dimensions/3d-scene-integration/dimension-indicators.mdx +2 -2
  349. package/dist/docs/dimensions/3d-scene-integration/editable-angle-indicator.mdx +1 -1
  350. package/dist/docs/dimensions/3d-scene-integration/editable-distance-dimension-indicator.mdx +1 -1
  351. package/dist/docs/dimensions/3d-scene-integration/list-selector-dimension-indicator.mdx +1 -1
  352. package/dist/docs/drag-and-drop/drag-handle.mdx +1 -1
  353. package/dist/docs/drag-and-drop/hotspot-handle.mdx +1 -1
  354. package/dist/docs/drag-and-drop/planes.mdx +1 -1
  355. package/dist/docs/drag-and-drop/rotatable.mdx +2 -2
  356. package/dist/docs/fabs/basic.mdx +2 -2
  357. package/dist/docs/index.json +32 -1
  358. package/dist/docs/layouts/custom-layout.mdx +1636 -183
  359. package/dist/docs/layouts/header/fixed.mdx +2 -2
  360. package/dist/docs/layouts/header/floating.mdx +2 -2
  361. package/dist/docs/layouts/sidebar/in-a-custom-layout.mdx +380 -0
  362. package/dist/docs/layouts/sidebar-footer/basic.mdx +32 -77
  363. package/dist/docs/other-features/client-side-rendering/declarative.mdx +1 -1
  364. package/dist/docs/other-features/transformers.mdx +4 -0
  365. package/dist/docs/phoenix/application-states.mdx +9 -7
  366. package/dist/docs/phoenix/components.mdx +6 -0
  367. package/dist/docs/phoenix/configurator-interface.mdx +135 -18
  368. package/dist/docs/phoenix/deployments.mdx +2 -6
  369. package/dist/docs/phoenix/domain-model.mdx +2 -0
  370. package/dist/docs/phoenix/finalization.mdx +1 -1
  371. package/dist/docs/phoenix/getting-started.mdx +2 -1
  372. package/dist/docs/phoenix/layout-slots.mdx +116 -0
  373. package/dist/docs/phoenix/localization.mdx +10 -6
  374. package/dist/docs/phoenix/migration-guide.mdx +21 -8
  375. package/dist/docs/phoenix/phoenix-cli.mdx +51 -11
  376. package/dist/docs/phoenix/project-structure.mdx +33 -13
  377. package/dist/docs/phoenix/sdk-builder-workflow.mdx +2 -2
  378. package/dist/docs/phoenix/testing.mdx +140 -0
  379. package/dist/docs/phoenix/webhooks.mdx +21 -4
  380. package/dist/domain/application/application-config.d.ts +3 -1
  381. package/dist/domain/application/assistant/assistant-fields.d.ts +8 -1
  382. package/dist/domain/application/assistant/assistant-fields.js +1 -1
  383. package/dist/domain/application/assistant/assistant-form-elements.d.ts +28 -0
  384. package/dist/domain/application/assistant/assistant-form-elements.js +1 -0
  385. package/dist/domain/application/assistant/assistant-manifest.d.ts +9 -1
  386. package/dist/domain/application/assistant/assistant-resolved-manifest.d.ts +11 -1
  387. package/dist/domain/application/assistant/build-assistant-lenses.d.ts +14 -0
  388. package/dist/domain/application/assistant/build-assistant-lenses.js +5 -0
  389. package/dist/domain/application/assistant/build-assistant-manifest.js +1 -1
  390. package/dist/domain/application/assistant/create-assistant-execution-schema.d.ts +32 -0
  391. package/dist/domain/application/assistant/create-assistant-execution-schema.js +1 -0
  392. package/dist/domain/application/assistant/generate-assistant-prompt.js +1 -1
  393. package/dist/domain/application/assistant/index.d.ts +5 -1
  394. package/dist/domain/application/assistant/index.js +1 -1
  395. package/dist/domain/application/assistant/session-setup/apply-assistant-setup.js +1 -1
  396. package/dist/domain/application/assistant-recipe-groups.d.ts +3 -1
  397. package/dist/domain/application/configurator-builder.d.ts +4 -1
  398. package/dist/domain/application/configurator-builder.js +1 -1
  399. package/dist/domain/core/invariant/violation.d.ts +50 -2
  400. package/dist/domain/core/invariant/violation.js +1 -1
  401. package/dist/domain/core/model/model.d.ts +1 -1
  402. package/dist/domain/core/schema/extended-schema-validator.js +1 -1
  403. package/dist/domain/domain-context/index.d.ts +1 -1
  404. package/dist/domain/domain-context/undo-system.d.ts +28 -1
  405. package/dist/domain/domain-context/undo-system.js +1 -1
  406. package/dist/domain/domain-runtime/spec/initialize.d.ts +11 -0
  407. package/dist/domain/domain-runtime/spec/initialize.js +1 -1
  408. package/dist/domain/domain-runtime/spec/selectors.js +1 -1
  409. package/dist/domain/domain-runtime/spec/types.d.ts +2 -0
  410. package/dist/domain/extensions/attribute-switch.d.ts +1 -1
  411. package/dist/domain/extensions/attribute-switch.js +1 -1
  412. package/dist/domain/extensions/canvas-config.d.ts +1 -1
  413. package/dist/domain/extensions/client-side-image.d.ts +2 -2
  414. package/dist/domain/extensions/client-side-image.js +1 -1
  415. package/dist/domain/extensions/common/angle-indicator-schema.d.ts +2 -2
  416. package/dist/domain/extensions/common/dimension-indicator-schema.d.ts +2 -2
  417. package/dist/domain/extensions/editable-angle-indicator.d.ts +1 -1
  418. package/dist/domain/extensions/editable-distance-dimension-indicator.d.ts +1 -1
  419. package/dist/domain/extensions/editable-offset-indicator.d.ts +1 -1
  420. package/dist/domain/extensions/editable-offset-indicator.js +1 -1
  421. package/dist/domain/extensions/fit-selection-orthographic-camera-component.js +1 -1
  422. package/dist/domain/extensions/fit-selection-perspective-camera-component.js +1 -1
  423. package/dist/domain/extensions/horizontal-tabs.d.ts +2 -2
  424. package/dist/domain/extensions/list-selector-dimension-indicator.d.ts +1 -1
  425. package/dist/domain/extensions/navigation-steps.d.ts +2 -2
  426. package/dist/domain/extensions/offset-indicator.js +1 -1
  427. package/dist/domain/extensions/rotation-handle.d.ts +2 -2
  428. package/dist/domain/extensions/save-template-thumbnail.d.ts +2 -2
  429. package/dist/domain/extensions/save-template-thumbnail.js +1 -1
  430. package/dist/domain/extensions/scene-entity-animation.js +1 -1
  431. package/dist/domain/mocks/create-test-application-config.d.ts +59 -0
  432. package/dist/domain/mocks/create-test-application-config.js +1 -0
  433. package/dist/domain/mocks/index.d.ts +1 -0
  434. package/dist/domain/mocks/index.js +1 -1
  435. package/dist/domain/system-components/application-config.d.ts +2 -2
  436. package/dist/domain/system-components/child-entity-selection.js +1 -1
  437. package/dist/domain/system-components/collision-box-geometry.d.ts +4 -2
  438. package/dist/domain/system-components/collision-geometry.d.ts +4 -2
  439. package/dist/domain/system-components/collision-point-geometry.d.ts +4 -2
  440. package/dist/domain/system-components/common/material-override-schema.d.ts +2 -2
  441. package/dist/domain/system-components/common/recipes.d.ts +21 -3
  442. package/dist/domain/system-components/common/recipes.js +1 -1
  443. package/dist/domain/system-components/common/scene-entity-control-schema.d.ts +3 -0
  444. package/dist/domain/system-components/common/scene-entity-control-schema.js +1 -1
  445. package/dist/domain/system-components/constraint.d.ts +10 -23
  446. package/dist/domain/system-components/drag-handle.d.ts +1 -1
  447. package/dist/domain/system-components/drag-handle.js +1 -1
  448. package/dist/domain/system-components/fit-entity-orthographic-camera-component.js +1 -1
  449. package/dist/domain/system-components/fit-entity-perspective-camera-component.js +1 -1
  450. package/dist/domain/system-components/fit-root-orthographic-camera-component.js +1 -1
  451. package/dist/domain/system-components/fit-root-perspective-camera-component.js +1 -1
  452. package/dist/domain/system-components/hotspot-drag-handle.d.ts +1 -1
  453. package/dist/domain/system-components/hotspot-drag-handle.js +1 -1
  454. package/dist/domain/system-components/material-swatch.js +1 -1
  455. package/dist/domain/system-components/scene-entity-material-override.d.ts +1 -1
  456. package/dist/domain/system-components/scene-entity-object-material-override.d.ts +1 -1
  457. package/dist/domain/system-components/scene-entity-object-text-decal.d.ts +1 -1
  458. package/dist/domain/system-components/scene-entity-object-transimissive-material-override.d.ts +1 -1
  459. package/dist/domain/system-components/scene-entity-transimissive-material-override.d.ts +1 -1
  460. package/dist/domain/system-components/static-orthographic-camera-component.js +1 -1
  461. package/dist/domain/system-components/static-perspective-camera-component.js +1 -1
  462. package/dist/globals/index.d.ts +2 -0
  463. package/dist/i18n/locales/cs/messages.js +1 -1
  464. package/dist/i18n/locales/da/messages.js +1 -1
  465. package/dist/i18n/locales/de/messages.js +1 -1
  466. package/dist/i18n/locales/de-AT/messages.js +1 -1
  467. package/dist/i18n/locales/en/messages.js +1 -1
  468. package/dist/i18n/locales/en-AU/messages.js +1 -1
  469. package/dist/i18n/locales/en-GB/messages.js +1 -1
  470. package/dist/i18n/locales/es/messages.js +1 -1
  471. package/dist/i18n/locales/fr/messages.js +1 -1
  472. package/dist/i18n/locales/hu/messages.js +1 -1
  473. package/dist/i18n/locales/it/messages.js +1 -1
  474. package/dist/i18n/locales/nl/messages.js +1 -1
  475. package/dist/i18n/locales/pl/messages.js +1 -1
  476. package/dist/i18n/locales/pt/messages.js +1 -1
  477. package/dist/i18n/locales/ro/messages.js +1 -1
  478. package/dist/i18n/locales/sk/messages.js +1 -1
  479. package/dist/i18n/locales/tr/messages.js +1 -1
  480. package/dist/legacy/domain-cli/utils/cache.d.ts +1 -1
  481. package/dist/legacy/domain-cli/utils/cache.js +1 -1
  482. package/dist/legacy/domain-spec/__generated/domain-schema.d.ts +160 -148
  483. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/claude-md.d.ts +1 -1
  484. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/cursor-rules.d.ts +1 -1
  485. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/shared-sdk-content.d.ts +1 -1
  486. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/shared-sdk-content.js +7 -1
  487. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-admin.js +15 -14
  488. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-configurator.js +14 -12
  489. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-embedded-admin.js +14 -13
  490. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-embedded-configurator.js +13 -11
  491. package/dist/phoenix/application-spec/application-spec-builder.js +1 -1
  492. package/dist/phoenix/application-spec/generate-application-spec-story.js +2 -2
  493. package/dist/phoenix/application-spec/project-files.js +1 -1
  494. package/dist/phoenix/bin.d.ts +2 -0
  495. package/dist/phoenix/bin.js +2 -0
  496. package/dist/phoenix/check-configs/built-in-eslint-config.d.ts +9 -0
  497. package/dist/phoenix/check-configs/built-in-eslint-config.js +1 -0
  498. package/dist/phoenix/check-configs/eslint-config.d.ts +10 -0
  499. package/dist/phoenix/check-configs/eslint-config.js +1 -0
  500. package/dist/phoenix/check-configs/index.d.ts +8 -0
  501. package/dist/phoenix/check-configs/index.js +1 -0
  502. package/dist/phoenix/check-configs/typescript-project.d.ts +5 -0
  503. package/dist/phoenix/check-configs/typescript-project.js +1 -0
  504. package/dist/phoenix/cli.d.ts +0 -1
  505. package/dist/phoenix/cli.js +1 -2
  506. package/dist/phoenix/commands/check.js +1 -1
  507. package/dist/phoenix/commands/deploy.js +1 -1
  508. package/dist/phoenix/commands/deps/deps.d.ts +52 -0
  509. package/dist/phoenix/commands/deps/deps.js +3 -0
  510. package/dist/phoenix/commands/deps/index.d.ts +1 -0
  511. package/dist/phoenix/commands/deps/index.js +1 -0
  512. package/dist/phoenix/commands/deps/sdk-manifest.d.ts +12 -0
  513. package/dist/phoenix/commands/deps/sdk-manifest.js +1 -0
  514. package/dist/phoenix/commands/dev.js +5 -5
  515. package/dist/phoenix/commands/fix.js +1 -1
  516. package/dist/phoenix/commands/index.d.ts +1 -0
  517. package/dist/phoenix/commands/index.js +1 -1
  518. package/dist/phoenix/commands/prettier.js +1 -1
  519. package/dist/phoenix/services/application-spec-project-watcher.d.ts +2 -0
  520. package/dist/phoenix/services/application-spec-project-watcher.js +3 -3
  521. package/dist/phoenix/services/lingui.d.ts +8 -0
  522. package/dist/phoenix/services/lingui.js +1 -1
  523. package/dist/phoenix/services/source-archive.d.ts +1 -0
  524. package/dist/phoenix/services/source-archive.js +1 -1
  525. package/dist/phoenix/services/swc.js +1 -1
  526. package/dist/phoenix/services/vite-config.js +1 -1
  527. package/dist/phoenix/utils/index.d.ts +2 -1
  528. package/dist/phoenix/utils/index.js +1 -1
  529. package/dist/phoenix/utils/node-version/index.d.ts +1 -0
  530. package/dist/phoenix/utils/node-version/index.js +1 -0
  531. package/dist/phoenix/utils/node-version/supported-node-version.d.ts +12 -0
  532. package/dist/phoenix/utils/node-version/supported-node-version.js +4 -0
  533. package/dist/phoenix/utils/run-command.d.ts +11 -0
  534. package/dist/phoenix/utils/run-command.js +1 -1
  535. package/dist/phoenix/utils/sdk-tool/index.d.ts +1 -0
  536. package/dist/phoenix/utils/sdk-tool/index.js +1 -0
  537. package/dist/phoenix/utils/sdk-tool/resolve-sdk-tool-bin.d.ts +15 -0
  538. package/dist/phoenix/utils/sdk-tool/resolve-sdk-tool-bin.js +1 -0
  539. package/dist/react-sdk/domain-context/common-hooks/use-configurator-messages.d.ts +30 -0
  540. package/dist/react-sdk/domain-context/common-hooks/use-configurator-messages.js +1 -0
  541. package/dist/react-sdk/domain-context/index.d.ts +2 -1
  542. package/dist/react-sdk/domain-context/index.js +1 -1
  543. package/dist/react-sdk/domain-context/system-hooks/navigation-hooks.d.ts +5 -0
  544. package/dist/react-sdk/domain-context/system-hooks/navigation-hooks.js +1 -1
  545. package/dist/react-sdk/domain-controls/hooks/use-angle-dimension.d.ts +1 -1
  546. package/dist/ui-sdk/theme/types.d.ts +1 -1
  547. package/package.json +46 -35
  548. package/schema/domain-spec.json +1201 -217
  549. package/dist/application-spec/generate-application/code/templates/webhook-implementation.d.ts +0 -1
  550. package/dist/application-spec/generate-application/code/templates/webhook-implementation.js +0 -7
  551. package/dist/configurator/ui/configurator-layout/universal/DesktopSidebar.js +0 -16
  552. /package/dist/application-spec/{core → enhanced-json}/eval-code-uses-self.d.ts +0 -0
  553. /package/dist/application-spec/{core → enhanced-json}/eval-code-uses-self.js +0 -0
  554. /package/dist/application-spec/{core → enhanced-json}/eval-to-constant.js +0 -0
@@ -0,0 +1,3 @@
1
+ import { type ElementRegistration } from '#package/domain';
2
+ /** The configurator's recipe panels and the buttons that open them, registered under their spec kinds. */
3
+ export declare const recipePanelElements: readonly ElementRegistration[];
@@ -0,0 +1 @@
1
+ import{groupedRecipeButtonSchema as e,groupedRecipePanelSchema as i,replaceEntityPanelButtonSchema as t,replaceEntityPanelSchema as m}from"#package/domain";import{GroupedRecipeButton as o,GroupedRecipePanel as n,ReplaceEntityPanel as r,ReplaceEntityPanelButton as p}from"../../ui/index.js";import{builtInEntityElement as a}from"./built-in-entity-element.js";export const recipePanelElements=[a(e,o),a(i,n),a(m,r),a(t,p)];
@@ -0,0 +1,7 @@
1
+ import { type ElementRegistration } from '#package/domain';
2
+ /**
3
+ * The pieces of the configurator's sidebar footer, registered under their spec kinds. The built-in
4
+ * footers render these components directly, so a project element of the same name reaches only a
5
+ * `customSidebarFooter`.
6
+ */
7
+ export declare const sidebarFooterElements: readonly ElementRegistration[];
@@ -0,0 +1 @@
1
+ import{enterSummaryButtonSchema as o,footerPriceSchema as e,mainFooterActionsSchema as t,nextStepButtonSchema as i,otherActionsSchema as m,previousStepButtonSchema as r,saveTemplateButtonSchema as n,stepLabelSchema as a,stepProgressSchema as p}from"#package/domain";import{EnterSummaryButton as s,FooterPrice as l,MainFooterActions as d,NextStepButton as f,OtherActions as u,PreviousStepButton as b,SaveTemplateButton as c,StepLabel as j,StepProgress as x}from"../../ui/index.js";import{builtInLayoutElement as g}from"./built-in-layout-element.js";export const sidebarFooterElements=[g(o,s),g(e,l),g(t,d),g(i,f),g(m,u),g(r,b),g(n,c),g(a,j),g(p,x)];
@@ -0,0 +1,7 @@
1
+ import { type ElementRegistration } from '#package/domain';
2
+ /**
3
+ * The configurator's toolbar buttons and mobile menu actions, registered under their spec kinds.
4
+ * `ToolbarHelp` is not among them: the toolbar shows its help button only when a project registers
5
+ * that name.
6
+ */
7
+ export declare const toolbarElements: readonly ElementRegistration[];
@@ -0,0 +1 @@
1
+ import{assistantToolbarButtonSchema as o,enterFullscreenToolbarButtonSchema as t,exitFullscreenToolbarButtonSchema as m,helpMenuActionSchema as e,helpToolbarButtonSchema as i,languageMenuActionSchema as r,languageToolbarButtonSchema as n,measurementsMenuActionSchema as a,measurementsToolbarButtonSchema as l,redoToolbarButtonSchema as p,resetCameraToolbarButtonSchema as s,shareMenuActionSchema as f,shareToolbarButtonSchema as u,toolbarButtonGroupSchema as b,undoToolbarButtonSchema as c}from"#package/domain";import{AssistantToolbarButton as d,EnterFullscreenToolbarButton as j,ExitFullscreenToolbarButton as x,HelpMenuAction as g,HelpToolbarButton as k,LanguageMenuAction as y,LanguageToolbarButton as E,MeasurementsMenuAction as h,MeasurementsToolbarButton as q,RedoToolbarButton as v,ResetCameraToolbarButton as w,ShareMenuAction as z,ShareToolbarButton as A,ToolbarButtonGroup as B,UndoToolbarButton as C}from"../../ui/index.js";import{builtInLayoutElement as D}from"./built-in-layout-element.js";export const toolbarElements=[D(o,d),D(t,j),D(m,x),D(e,g),D(i,k),D(r,y),D(n,E),D(a,h),D(l,q),D(p,v),D(s,w),D(f,z),D(u,A),D(b,B),D(c,C)];
@@ -4,6 +4,7 @@ export { RootPage } from './RootPage.js';
4
4
  export { NewConfiguratorPage } from './NewConfiguratorPage.js';
5
5
  export { ConfiguratorRootErrorPage } from './ConfiguratorErrorPage.js';
6
6
  export { ConfiguratorNotFoundPage } from './ConfiguratorNotFoundPage.js';
7
+ export { defaultConfiguratorElements } from './default-configurator-elements.js';
7
8
  export { DevContextFallback } from './error-boundaries/DevContextFallback.js';
8
9
  export { DevLoadingFallback } from './error-boundaries/DevLoadingFallback.js';
9
10
  export { GeneralErrorFallback, DevGeneralErrorFallback, ProdGeneralErrorFallback } from './error-boundaries/index.js';
@@ -1 +1 @@
1
- export{ConfiguratorRoot}from"./ConfiguratorRoot.js";export{LoadedConfiguratorDetailPage}from"./LoadedConfiguratorDetailPage.js";export{RootPage}from"./RootPage.js";export{NewConfiguratorPage}from"./NewConfiguratorPage.js";export{ConfiguratorRootErrorPage}from"./ConfiguratorErrorPage.js";export{ConfiguratorNotFoundPage}from"./ConfiguratorNotFoundPage.js";export{DevContextFallback}from"./error-boundaries/DevContextFallback.js";export{DevLoadingFallback}from"./error-boundaries/DevLoadingFallback.js";export{GeneralErrorFallback,DevGeneralErrorFallback,ProdGeneralErrorFallback}from"./error-boundaries/index.js";export{LoadingErrorBoundary}from"./error-boundaries/LoadingErrorBoundary.js";
1
+ export{ConfiguratorRoot}from"./ConfiguratorRoot.js";export{LoadedConfiguratorDetailPage}from"./LoadedConfiguratorDetailPage.js";export{RootPage}from"./RootPage.js";export{NewConfiguratorPage}from"./NewConfiguratorPage.js";export{ConfiguratorRootErrorPage}from"./ConfiguratorErrorPage.js";export{ConfiguratorNotFoundPage}from"./ConfiguratorNotFoundPage.js";export{defaultConfiguratorElements}from"./default-configurator-elements.js";export{DevContextFallback}from"./error-boundaries/DevContextFallback.js";export{DevLoadingFallback}from"./error-boundaries/DevLoadingFallback.js";export{GeneralErrorFallback,DevGeneralErrorFallback,ProdGeneralErrorFallback}from"./error-boundaries/index.js";export{LoadingErrorBoundary}from"./error-boundaries/LoadingErrorBoundary.js";
@@ -2,7 +2,7 @@ import type { DraggableSurface } from '#package/domain';
2
2
  import { HotspotDragHandleVariant } from '#package/domain';
3
3
  import type { SceneEntitySpecificProps, SceneHtmlOpacityProps, SceneHtmlPositionProps, SceneHtmlVisibilityProps } from '../../scene-html/index.js';
4
4
  export interface HotspotDragHandleProps extends SceneHtmlOpacityProps, SceneHtmlVisibilityProps, SceneHtmlPositionProps, SceneEntitySpecificProps {
5
- readonly surfaces: DraggableSurface[];
5
+ readonly surfaces: readonly DraggableSurface[];
6
6
  readonly instanceName: string;
7
7
  readonly handleSize?: number;
8
8
  readonly variant?: HotspotDragHandleVariant;
@@ -3,7 +3,7 @@ import { type DraggableSurface } from '#package/domain';
3
3
  import { type SceneEntitySpecificProps, type SceneHtmlOpacityProps, type SceneHtmlPositionProps, type SceneHtmlVisibilityProps } from '../../scene-html/index.js';
4
4
  export declare const useHotspotHovered: () => boolean;
5
5
  export interface HotspotDragSceneHandleProps extends SceneHtmlOpacityProps, SceneHtmlVisibilityProps, SceneHtmlPositionProps, SceneEntitySpecificProps {
6
- readonly surfaces: DraggableSurface[];
6
+ readonly surfaces: readonly DraggableSurface[];
7
7
  readonly instanceName: string;
8
8
  readonly children: ReactNode;
9
9
  readonly handleSize?: number;
@@ -37,7 +37,7 @@ export interface DimensionIndicatorProps {
37
37
  readonly labelDirection?: 'auto' | 'ltr' | 'rtl';
38
38
  readonly labelFillOpacity?: number;
39
39
  readonly labelFontStyle?: 'normal' | 'italic';
40
- readonly labelFontWeight?: number | 'normal' | 'bold';
40
+ readonly labelFontWeight?: number | string;
41
41
  readonly labelLetterSpacing?: number;
42
42
  readonly labelLineHeight?: number;
43
43
  readonly labelMaxWidth?: number;
@@ -76,7 +76,7 @@ interface DimensionIndicatorProps {
76
76
  /** Font style. See https://protectwise.github.io/troika/troika-three-text/ */
77
77
  labelFontStyle?: 'normal' | 'italic';
78
78
  /** Font weight. See https://protectwise.github.io/troika/troika-three-text/ */
79
- labelFontWeight?: number | 'normal' | 'bold';
79
+ labelFontWeight?: number | string;
80
80
  /** Spacing between letters. See https://protectwise.github.io/troika/troika-three-text/ */
81
81
  labelLetterSpacing?: number;
82
82
  /** Line height as a multiple of the font size. See https://protectwise.github.io/troika/troika-three-text/ */
@@ -1,6 +1,6 @@
1
1
  import { type Size } from '@react-three/fiber';
2
2
  import { type Camera, Vector2, Vector3 } from 'three';
3
- import type { DraggableSurface } from '#package/domain';
3
+ import type { DraggableSurface, RotatableSurface } from '#package/domain';
4
4
  /**
5
5
  * Converts mouse coordinates to normalized device coordinates
6
6
  */
@@ -20,7 +20,7 @@ export declare const findSurfaceClosestToPoint: (worldPoint: Vector3, surfaces:
20
20
  * Projects the cursor ray onto a single specified surface. Returns null if the
21
21
  * ray is parallel to or points away from the plane.
22
22
  */
23
- export declare const projectMouseOntoSurface: (mouse: Vector2, surface: DraggableSurface, camera: Camera) => Vector3 | null;
23
+ export declare const projectMouseOntoSurface: (mouse: Vector2, surface: DraggableSurface | RotatableSurface, camera: Camera) => Vector3 | null;
24
24
  /**
25
25
  * Among the camera-facing surfaces the cursor ray actually hits, picks the
26
26
  * intersection closest to the world origin. Used during multi-surface drag-move
@@ -1,7 +1,7 @@
1
1
  import { type Object3D } from 'three';
2
2
  import { type DomainEntityId, type DraggableSurface } from '#package/domain';
3
3
  interface DragHandle {
4
- surfaces: DraggableSurface[];
4
+ surfaces: readonly DraggableSurface[];
5
5
  instanceName: string;
6
6
  }
7
7
  export declare const useDragObject: (entityId: DomainEntityId<string>, object: Object3D | null, dragHandle: DragHandle | undefined, onUpdate: () => void, onDragStart?: () => void, onDragEnd?: () => void) => {
@@ -1 +1 @@
1
- import{jsx as e,jsxs as t,Fragment as a}from"react/jsx-runtime";import s from"lodash-es/isNumber.js";import{memo as r,useEffect as n,useMemo as i}from"react";import{Color as o,RepeatWrapping as l}from"three";import{isRemoteMaterialOverrideComponent as c}from"#package/domain";import{useResourceUrl as p}from"#package/react-sdk";import{useCombinedQueries as M,usePhxGltf as m,useResourceQueryFactories as d}from"../../resources/index.js";import{isPhysicalMaterial as h,isStandardMaterial as u,isWithColor as U}from"../../three/with-material.js";import{ReplacedMaterialTransformations as v}from"./ReplacedMaterialTransformer.js";import{ReplacedMaterialTransitions as g}from"./ReplacedMaterialTransition.js";export const applyRemoteMaterialOverride=(e,t,a,r)=>{let n=t=>{let{offsetX:a,offsetY:r,rotation:n,rotationCenterX:i,rotationCenterY:o,repeatX:c,repeatY:p}=e.state,M=s(a)||s(r),m=s(n),d=s(c)||s(p);return M&&t.offset.set(a??0,r??0),m&&(t.rotation=n,t.center.set(i??0,o??0)),d&&(t.repeat.set(c??1,p??1),t.wrapS=l,t.wrapT=l),t},i=(e,t)=>{if(null===e)t(null);else if(e){let s=r[a.findIndex(t=>t===e)];s&&t(n(s))}};if((u(t)||h(t))&&(i(e.state.textureUrl,e=>{t.map=e}),e.state.color&&t.color.set(new o(e.state.color)),i(e.state.roughnessMapUrl,e=>{t.roughnessMap=e}),s(e.state.roughness)&&(t.roughness=e.state.roughness),i(e.state.bumpMapUrl,e=>{t.bumpMap=e}),s(e.state.bumpScale)&&(t.bumpScale=e.state.bumpScale),i(e.state.metalnessMapUrl,e=>{t.metalnessMap=e}),s(e.state.metalness)&&(t.metalness=e.state.metalness),s(e.state.envMapIntensity)&&(t.envMapIntensity=e.state.envMapIntensity),void 0!==e.state.toneMapped&&(t.toneMapped=e.state.toneMapped),void 0!==e.state.emissive&&t.emissive.set(new o(e.state.emissive)),void 0!==e.state.emissiveIntensity&&(t.emissiveIntensity=e.state.emissiveIntensity),i(e.state.alphaMapUrl,e=>{t.alphaMap=e}),void 0!==e.state.transparent&&(t.transparent=e.state.transparent),s(e.state.opacity)&&(t.opacity=e.state.opacity),i(e.state.aoMapUrl,e=>{t.aoMap=e}),s(e.state.aoMapIntensity)&&(t.aoMapIntensity=e.state.aoMapIntensity),i(e.state.displacementMapUrl,e=>{t.displacementMap=e}),s(e.state.displacementScale)&&(t.displacementScale=e.state.displacementScale),i(e.state.lightMapUrl,e=>{t.lightMap=e}),s(e.state.lightMapIntensity)&&(t.lightMapIntensity=e.state.lightMapIntensity),i(e.state.envMapUrl,e=>{t.envMap=e}),s(e.state.envMapIntensity)&&(t.envMapIntensity=e.state.envMapIntensity),s(e.state.blendingMode)&&(t.blending=e.state.blendingMode),i(e.state.normalMapUrl,e=>{t.normalMap=e}),s(e.state.normalScale)&&t.normalScale.set(e.state.normalScale,e.state.normalScale),void 0!==e.state.wireframe&&(t.wireframe=e.state.wireframe)),h(t)&&(void 0!==e.state.clearcoat&&(t.clearcoat=e.state.clearcoat),void 0!==e.state.clearcoatRoughness&&(t.clearcoatRoughness=e.state.clearcoatRoughness),void 0!==e.state.iridescence&&(t.iridescence=e.state.iridescence),void 0!==e.state.iridescenceIor&&(t.iridescenceIOR=e.state.iridescenceIor),s(e.state.sheen)&&(t.sheen=e.state.sheen),void 0!==e.state.sheenColor&&U(t)&&t.sheenColor.set(new o(e.state.sheenColor)),s(e.state.sheenRoughness)&&(t.sheenRoughness=e.state.sheenRoughness),i(e.state.anisotropyMapUrl,e=>{t.anisotropyMap=e}),s(e.state.anisotropyStrength)&&(t.anisotropy=e.state.anisotropyStrength),s(e.state.anisotropyRotation)&&(t.anisotropyRotation=e.state.anisotropyRotation),s(e.state.ior)&&(t.ior=e.state.ior),s(e.state.reflectivity)&&(t.reflectivity=e.state.reflectivity),s(e.state.transmission)&&(t.transmission=e.state.transmission),s(e.state.thickness)&&(t.thickness=e.state.thickness),s(e.state.attenuationDistance)&&(t.attenuationDistance=e.state.attenuationDistance),void 0!==e.state.attenuationColor&&t.attenuationColor.set(new o(e.state.attenuationColor)),s(e.state.specularIntensity)&&(t.specularIntensity=e.state.specularIntensity),void 0!==e.state.specularColor&&t.specularColor.set(new o(e.state.specularColor)),i(e.state.specularIntensityMapUrl,e=>{t.specularIntensityMap=e}),i(e.state.specularColorMapUrl,e=>{t.specularColorMap=e}),i(e.state.clearcoatNormalMapUrl,e=>{t.clearcoatNormalMap=e}),s(e.state.clearcoatNormalScale)&&t.clearcoatNormalScale.set(e.state.clearcoatNormalScale,e.state.clearcoatNormalScale),i(e.state.clearcoatMapUrl,e=>{t.clearcoatMap=e}),i(e.state.clearcoatRoughnessMapUrl,e=>{t.clearcoatRoughnessMap=e}),i(e.state.iridescenceMapUrl,e=>{t.iridescenceMap=e}),void 0!==e.state.iridescenceThicknessRange&&(t.iridescenceThicknessRange=e.state.iridescenceThicknessRange),i(e.state.iridescenceThicknessMapUrl,e=>{t.iridescenceThicknessMap=e}),i(e.state.sheenColorMapUrl,e=>{t.sheenColorMap=e}),i(e.state.sheenRoughnessMapUrl,e=>{t.sheenRoughnessMap=e}),i(e.state.transmissionMapUrl,e=>{t.transmissionMap=e}),i(e.state.thicknessMapUrl,e=>{t.thicknessMap=e})),u(t)&&!h(t)){let a=[void 0!==e.state.clearcoat?"clearcoat":"",void 0!==e.state.clearcoatRoughness?"clearcoatRoughness":"",void 0!==e.state.iridescence?"iridescence":"",void 0!==e.state.iridescenceIor?"iridescenceIor":"",void 0!==e.state.sheen?"sheen":"",void 0!==e.state.sheenColor?"sheenColor":"",void 0!==e.state.sheenRoughness?"sheenRoughness":"",void 0!==e.state.anisotropyMapUrl?"anisotropyMapUrl":"",void 0!==e.state.anisotropyStrength?"anisotropyStrength":"",void 0!==e.state.anisotropyRotation?"anisotropyRotation":"",void 0!==e.state.ior?"ior":"",void 0!==e.state.reflectivity?"reflectivity":"",void 0!==e.state.transmission?"transmission":"",void 0!==e.state.thickness?"thickness":"",void 0!==e.state.attenuationDistance?"attenuationDistance":"",void 0!==e.state.attenuationColor?"attenuationColor":"",void 0!==e.state.specularIntensity?"specularIntensity":"",void 0!==e.state.specularColor?"specularColor":"",void 0!==e.state.specularIntensityMapUrl?"specularIntensityMapUrl":"",void 0!==e.state.specularColorMapUrl?"specularColorMapUrl":"",void 0!==e.state.clearcoatNormalMapUrl?"clearcoatNormalMapUrl":"",void 0!==e.state.clearcoatNormalScale?"clearcoatNormalScale":"",void 0!==e.state.clearcoatMapUrl?"clearcoatMapUrl":"",void 0!==e.state.clearcoatRoughnessMapUrl?"clearcoatRoughnessMapUrl":"",void 0!==e.state.iridescenceMapUrl?"iridescenceMapUrl":"",void 0!==e.state.iridescenceThicknessRange?"iridescenceThicknessRange":"",void 0!==e.state.iridescenceThicknessMapUrl?"iridescenceThicknessMapUrl":"",void 0!==e.state.sheenColorMapUrl?"sheenColorMapUrl":"",void 0!==e.state.sheenRoughnessMapUrl?"sheenRoughnessMapUrl":"",void 0!==e.state.transmissionMapUrl?"transmissionMapUrl":"",void 0!==e.state.thicknessMapUrl?"thicknessMapUrl":""].filter(Boolean);a.length>0&&console.warn(`[Phoenix] Material override properties [${a.join(", ")}] were ignored because the target material "${t.name}" is a MeshStandardMaterial, not a MeshPhysicalMaterial. These properties require MeshPhysicalMaterial. Ensure the source material in the override file uses a physical property (e.g. clearcoat) to trigger MeshPhysicalMaterial.`)}};let y=["textureUrl","roughnessMapUrl","bumpMapUrl","metalnessMapUrl","anisotropyMapUrl","normalMapUrl","alphaMapUrl","aoMapUrl","displacementMapUrl","lightMapUrl","envMapUrl","specularIntensityMapUrl","specularColorMapUrl","clearcoatNormalMapUrl","clearcoatMapUrl","clearcoatRoughnessMapUrl","iridescenceMapUrl","iridescenceThicknessMapUrl","sheenColorMapUrl","sheenRoughnessMapUrl","transmissionMapUrl","thicknessMapUrl"];export const getMaterialOverrideTextureNames=e=>y.flatMap(t=>{let a=e.state[t];return"string"==typeof a&&""!==a?[a]:[]});export const RemoteReplacedMaterial=r(s=>{let{overrideComponent:r,original:o,object:l}=s,{getResourceUrl:h}=p(),u=i(()=>[r].reduce((e,t)=>(c(t)&&e.push(t.state.fileUrl),e),[]),[r]),U=i(()=>getMaterialOverrideTextureNames(r),[r]),y=m(u.map(h)),{createTextureQuery:R}=d(),f=M(U.map(R)),I=i(()=>f.map(e=>e.clone()),[f]),C=i(()=>{let e=y[u.findIndex(e=>e===r.state.fileUrl)],t=e?.materials[r.state.materialName];if(null==t)throw Error(`Material with name '${r.state.materialName}' not found in '${r.state.fileUrl}'`);let a=t.clone();return applyRemoteMaterialOverride(r,a,U,I),a},[r,u,y,U,I]);return n(()=>(l.material=C,l.material.name=o.name,()=>{l.material=o}),[l,o,C]),t(a,{children:[e(v,{material:C,instanceName:r.componentInstance.instanceName}),e(g,{material:C,instanceName:r.componentInstance.instanceName})]})});
1
+ import{jsx as e,jsxs as t,Fragment as a}from"react/jsx-runtime";import s from"lodash-es/isNumber.js";import{memo as r,useEffect as n,useMemo as o}from"react";import{Color as i,RepeatWrapping as l}from"three";import{isRemoteMaterialOverrideComponent as c}from"#package/domain";import{useResourceUrl as p}from"#package/react-sdk";import{useCombinedQueries as M,usePhxGltf as m,useResourceQueryFactories as d}from"../../resources/index.js";import{isPhysicalMaterial as h,isStandardMaterial as u,isWithColor as v}from"../../three/with-material.js";import{ReplacedMaterialTransformations as U}from"./ReplacedMaterialTransformer.js";import{ReplacedMaterialTransitions as y}from"./ReplacedMaterialTransition.js";export const applyRemoteMaterialOverride=(e,t,a,r)=>{let n=t=>{let{offsetX:a,offsetY:r,rotation:n,rotationCenterX:o,rotationCenterY:i,repeatX:c,repeatY:p}=e.state,M=s(a)||s(r),m=s(n),d=s(c)||s(p);return M&&t.offset.set(a??0,r??0),m&&(t.rotation=n,t.center.set(o??0,i??0)),d&&(t.repeat.set(c??1,p??1),t.wrapS=l,t.wrapT=l),t},o=(e,t)=>{if(null===e)t(null);else if(e){let s=r[a.findIndex(t=>t===e)];s&&t(n(s))}};if((u(t)||h(t))&&(o(e.state.textureUrl,e=>{t.map=e}),e.state.color&&t.color.set(new i(e.state.color)),o(e.state.roughnessMapUrl,e=>{t.roughnessMap=e}),s(e.state.roughness)&&(t.roughness=e.state.roughness),o(e.state.bumpMapUrl,e=>{t.bumpMap=e}),s(e.state.bumpScale)&&(t.bumpScale=e.state.bumpScale),o(e.state.metalnessMapUrl,e=>{t.metalnessMap=e}),s(e.state.metalness)&&(t.metalness=e.state.metalness),s(e.state.envMapIntensity)&&(t.envMapIntensity=e.state.envMapIntensity),void 0!==e.state.toneMapped&&(t.toneMapped=e.state.toneMapped),void 0!==e.state.emissive&&t.emissive.set(new i(e.state.emissive)),void 0!==e.state.emissiveIntensity&&(t.emissiveIntensity=e.state.emissiveIntensity),o(e.state.alphaMapUrl,e=>{t.alphaMap=e}),void 0!==e.state.transparent&&(t.transparent=e.state.transparent),s(e.state.opacity)&&(t.opacity=e.state.opacity),o(e.state.aoMapUrl,e=>{t.aoMap=e}),s(e.state.aoMapIntensity)&&(t.aoMapIntensity=e.state.aoMapIntensity),o(e.state.displacementMapUrl,e=>{t.displacementMap=e}),s(e.state.displacementScale)&&(t.displacementScale=e.state.displacementScale),o(e.state.lightMapUrl,e=>{t.lightMap=e}),s(e.state.lightMapIntensity)&&(t.lightMapIntensity=e.state.lightMapIntensity),o(e.state.envMapUrl,e=>{t.envMap=e}),s(e.state.envMapIntensity)&&(t.envMapIntensity=e.state.envMapIntensity),s(e.state.blendingMode)&&(t.blending=e.state.blendingMode),o(e.state.normalMapUrl,e=>{t.normalMap=e}),s(e.state.normalScale)&&t.normalScale.set(e.state.normalScale,e.state.normalScale),void 0!==e.state.wireframe&&(t.wireframe=e.state.wireframe)),h(t)){void 0!==e.state.clearcoat&&(t.clearcoat=e.state.clearcoat),void 0!==e.state.clearcoatRoughness&&(t.clearcoatRoughness=e.state.clearcoatRoughness),void 0!==e.state.iridescence&&(t.iridescence=e.state.iridescence),void 0!==e.state.iridescenceIor&&(t.iridescenceIOR=e.state.iridescenceIor),s(e.state.sheen)&&(t.sheen=e.state.sheen),void 0!==e.state.sheenColor&&v(t)&&t.sheenColor.set(new i(e.state.sheenColor)),s(e.state.sheenRoughness)&&(t.sheenRoughness=e.state.sheenRoughness),o(e.state.anisotropyMapUrl,e=>{t.anisotropyMap=e}),s(e.state.anisotropyStrength)&&(t.anisotropy=e.state.anisotropyStrength),s(e.state.anisotropyRotation)&&(t.anisotropyRotation=e.state.anisotropyRotation),s(e.state.ior)&&(t.ior=e.state.ior),s(e.state.reflectivity)&&(t.reflectivity=e.state.reflectivity),s(e.state.transmission)&&(t.transmission=e.state.transmission),s(e.state.thickness)&&(t.thickness=e.state.thickness),s(e.state.attenuationDistance)&&(t.attenuationDistance=e.state.attenuationDistance),void 0!==e.state.attenuationColor&&t.attenuationColor.set(new i(e.state.attenuationColor)),s(e.state.specularIntensity)&&(t.specularIntensity=e.state.specularIntensity),void 0!==e.state.specularColor&&t.specularColor.set(new i(e.state.specularColor)),o(e.state.specularIntensityMapUrl,e=>{t.specularIntensityMap=e}),o(e.state.specularColorMapUrl,e=>{t.specularColorMap=e}),o(e.state.clearcoatNormalMapUrl,e=>{t.clearcoatNormalMap=e}),s(e.state.clearcoatNormalScale)&&t.clearcoatNormalScale.set(e.state.clearcoatNormalScale,e.state.clearcoatNormalScale),o(e.state.clearcoatMapUrl,e=>{t.clearcoatMap=e}),o(e.state.clearcoatRoughnessMapUrl,e=>{t.clearcoatRoughnessMap=e}),o(e.state.iridescenceMapUrl,e=>{t.iridescenceMap=e});let[a,r]=e.state.iridescenceThicknessRange??[];void 0!==a&&void 0!==r&&(t.iridescenceThicknessRange=[a,r]),o(e.state.iridescenceThicknessMapUrl,e=>{t.iridescenceThicknessMap=e}),o(e.state.sheenColorMapUrl,e=>{t.sheenColorMap=e}),o(e.state.sheenRoughnessMapUrl,e=>{t.sheenRoughnessMap=e}),o(e.state.transmissionMapUrl,e=>{t.transmissionMap=e}),o(e.state.thicknessMapUrl,e=>{t.thicknessMap=e})}if(u(t)&&!h(t)){let a=[void 0!==e.state.clearcoat?"clearcoat":"",void 0!==e.state.clearcoatRoughness?"clearcoatRoughness":"",void 0!==e.state.iridescence?"iridescence":"",void 0!==e.state.iridescenceIor?"iridescenceIor":"",void 0!==e.state.sheen?"sheen":"",void 0!==e.state.sheenColor?"sheenColor":"",void 0!==e.state.sheenRoughness?"sheenRoughness":"",void 0!==e.state.anisotropyMapUrl?"anisotropyMapUrl":"",void 0!==e.state.anisotropyStrength?"anisotropyStrength":"",void 0!==e.state.anisotropyRotation?"anisotropyRotation":"",void 0!==e.state.ior?"ior":"",void 0!==e.state.reflectivity?"reflectivity":"",void 0!==e.state.transmission?"transmission":"",void 0!==e.state.thickness?"thickness":"",void 0!==e.state.attenuationDistance?"attenuationDistance":"",void 0!==e.state.attenuationColor?"attenuationColor":"",void 0!==e.state.specularIntensity?"specularIntensity":"",void 0!==e.state.specularColor?"specularColor":"",void 0!==e.state.specularIntensityMapUrl?"specularIntensityMapUrl":"",void 0!==e.state.specularColorMapUrl?"specularColorMapUrl":"",void 0!==e.state.clearcoatNormalMapUrl?"clearcoatNormalMapUrl":"",void 0!==e.state.clearcoatNormalScale?"clearcoatNormalScale":"",void 0!==e.state.clearcoatMapUrl?"clearcoatMapUrl":"",void 0!==e.state.clearcoatRoughnessMapUrl?"clearcoatRoughnessMapUrl":"",void 0!==e.state.iridescenceMapUrl?"iridescenceMapUrl":"",void 0!==e.state.iridescenceThicknessRange?"iridescenceThicknessRange":"",void 0!==e.state.iridescenceThicknessMapUrl?"iridescenceThicknessMapUrl":"",void 0!==e.state.sheenColorMapUrl?"sheenColorMapUrl":"",void 0!==e.state.sheenRoughnessMapUrl?"sheenRoughnessMapUrl":"",void 0!==e.state.transmissionMapUrl?"transmissionMapUrl":"",void 0!==e.state.thicknessMapUrl?"thicknessMapUrl":""].filter(Boolean);a.length>0&&console.warn(`[Phoenix] Material override properties [${a.join(", ")}] were ignored because the target material "${t.name}" is a MeshStandardMaterial, not a MeshPhysicalMaterial. These properties require MeshPhysicalMaterial. Ensure the source material in the override file uses a physical property (e.g. clearcoat) to trigger MeshPhysicalMaterial.`)}};let g=["textureUrl","roughnessMapUrl","bumpMapUrl","metalnessMapUrl","anisotropyMapUrl","normalMapUrl","alphaMapUrl","aoMapUrl","displacementMapUrl","lightMapUrl","envMapUrl","specularIntensityMapUrl","specularColorMapUrl","clearcoatNormalMapUrl","clearcoatMapUrl","clearcoatRoughnessMapUrl","iridescenceMapUrl","iridescenceThicknessMapUrl","sheenColorMapUrl","sheenRoughnessMapUrl","transmissionMapUrl","thicknessMapUrl"];export const getMaterialOverrideTextureNames=e=>g.flatMap(t=>{let a=e.state[t];return"string"==typeof a&&""!==a?[a]:[]});export const RemoteReplacedMaterial=r(s=>{let{overrideComponent:r,original:i,object:l}=s,{getResourceUrl:h}=p(),u=o(()=>[r].reduce((e,t)=>(c(t)&&e.push(t.state.fileUrl),e),[]),[r]),v=o(()=>getMaterialOverrideTextureNames(r),[r]),g=m(u.map(h)),{createTextureQuery:f}=d(),R=M(v.map(f)),I=o(()=>R.map(e=>e.clone()),[R]),C=o(()=>{let e=g[u.findIndex(e=>e===r.state.fileUrl)],t=e?.materials[r.state.materialName];if(null==t)throw Error(`Material with name '${r.state.materialName}' not found in '${r.state.fileUrl}'`);let a=t.clone();return applyRemoteMaterialOverride(r,a,v,I),a},[r,u,g,v,I]);return n(()=>(l.material=C,l.material.name=i.name,()=>{l.material=i}),[l,i,C]),t(a,{children:[e(U,{material:C,instanceName:r.componentInstance.instanceName}),e(y,{material:C,instanceName:r.componentInstance.instanceName})]})});
@@ -29,7 +29,7 @@ export interface SceneEntityTextDecalV2Props {
29
29
  text: string;
30
30
  textureUrl?: string | undefined;
31
31
  roughnessMapUrl?: string | undefined;
32
- preloadFonts?: string[] | undefined;
32
+ preloadFonts?: readonly string[] | undefined;
33
33
  invertedBump?: boolean | undefined;
34
34
  }
35
35
  export interface SceneEntityObjectTextDecalProps {
@@ -3,9 +3,15 @@ export interface AssistantToolChipsProps {
3
3
  readonly tools: readonly AssistantToolItem[];
4
4
  /** True while the reply runs and this row is its newest block: the assistant is at work on it. */
5
5
  readonly isActive: boolean;
6
+ /** True when the row offers Undo: no reply runs, and the step of the undo history the configuration is at is one of its changes. */
7
+ readonly canUndo: boolean;
8
+ /** Undoes the changes of the given tool calls while one of them is the step the configuration is at. */
9
+ readonly onUndo: (toolCallIds: ReadonlySet<string>) => void;
6
10
  }
7
11
  /**
8
12
  * A row of notes on what the assistant did in a reply, one per tool call. A click on a note logs
9
- * the input and the result of its call to the console.
13
+ * the input and the result of its call to the console. While one of the row's changes is the step
14
+ * of the undo history the configuration is at, an Undo after the notes takes the row's changes
15
+ * back, up to a change the user made in between.
10
16
  */
11
- export declare const AssistantToolChips: import("react").MemoExoticComponent<({ tools, isActive }: AssistantToolChipsProps) => import("react/jsx-runtime").JSX.Element>;
17
+ export declare const AssistantToolChips: import("react").MemoExoticComponent<({ tools, isActive, canUndo, onUndo }: AssistantToolChipsProps) => import("react/jsx-runtime").JSX.Element>;
@@ -1 +1 @@
1
- import{jsx as t,jsxs as e}from"react/jsx-runtime";import{Tooltip as a,styled as i}from"@mui/material";import{memo as s,useCallback as o}from"react";import{match as n}from"ts-pattern";import{useLocalizable as r}from"#package/react-sdk";import{PhxIcon as l}from"#package/ui-sdk";import{AssistantPanelName as d}from"./theme.js";let m={id:"sdk.assistant.tool.updateDesign.label",message:"Update design"},c={id:"sdk.assistant.tool.readDesign.label",message:"Read design"},p={id:"sdk.assistant.tool.mistake.hint",message:"The assistant made a mistake."},h={id:"sdk.assistant.tool.cancelled.hint",message:"Stopped before it finished."},g={id:"sdk.assistant.tool.noResult.hint",message:"The result of this step was lost. It may or may not have been done."},f={id:"sdk.assistant.tool.toolBudget.hint",message:"Not done: the assistant reached its limit of steps for one message."},u=i("div",{name:d,slot:"chips"})(({theme:{palette:t,spacing:e,typography:a}})=>({...a.caption,alignItems:"start",color:t.text.secondary,display:"grid",gap:e(.75),gridTemplateColumns:"min-content minmax(0, 1fr)"})),k=i("span",{name:d,slot:"activity"})(({theme:{typography:t}})=>({blockSize:`calc(${t.caption.lineHeight} * 1em)`,display:"grid",placeItems:"center"})),x=i(l,{name:d,slot:"activityIcon"})({fontSize:14,'[data-chips="active"] &':{animation:"phx-assistant-turn 2.4s linear infinite","@media (prefers-reduced-motion: reduce)":{animation:"none"}},"@keyframes phx-assistant-turn":{to:{rotate:"360deg"}}}),w=i("span",{name:d,slot:"chip"})(({theme:{palette:t,spacing:e}})=>({cursor:"default",display:"inline-block",whiteSpace:"nowrap","&:not(:last-child)::after":{color:t.text.secondary,content:'"\xb7"',display:"inline-block",marginInline:e(.75),textDecoration:"none"},'&[data-chip="failed"]':{color:t.error.main},'&[data-chip="flawed"]':{textDecoration:"line-through",textDecorationColor:t.error.main}})),y=s(({tool:e})=>{let{chip:i,input:s,result:l}=e,d=r(m),u=r(c),k=r(p),x=r(h),y=r(g),b=r(f),v=n(i.label).with({kind:"text"},({text:t})=>t).with({kind:"updateDesign"},()=>d).with({kind:"readDesign"},()=>u).exhaustive(),C=o(()=>{console.info(`Assistant tool call "${v}"`,{input:s,result:l})},[s,v,l]);return t(a,{title:n(i).with({errorCode:"cancelled"},()=>x).with({errorCode:"no_result"},()=>y).with({errorCode:"tool_budget"},()=>b).with({state:"failed"},{state:"flawed"},()=>k).otherwise(()=>""),placement:"top-start",children:t(w,{onClick:C,"data-chip":i.state,children:v})})});export const AssistantToolChips=s(({tools:a,isActive:i})=>e(u,{"data-chips":i?"active":"done","aria-busy":i,children:[t(k,{children:t(x,{name:"Gear"})}),t("div",{children:a.map(e=>t(y,{tool:e},e.id))})]}));
1
+ import{jsx as e,jsxs as t}from"react/jsx-runtime";import{ButtonBase as i,Tooltip as a,styled as n}from"@mui/material";import{memo as o,useCallback as s}from"react";import{match as r}from"ts-pattern";import{useLocalizable as d}from"#package/react-sdk";import{PhxIcon as l}from"#package/ui-sdk";import{AssistantPanelName as m}from"./theme.js";let c={id:"sdk.assistant.tool.updateDesign.label",message:"Update design"},p={id:"sdk.assistant.tool.readDesign.label",message:"Read design"},h={id:"sdk.assistant.tool.mistake.hint",message:"The assistant made a mistake."},u={id:"sdk.assistant.tool.cancelled.hint",message:"Stopped before it finished."},f={id:"sdk.assistant.tool.noResult.hint",message:"The result of this step was lost. It may or may not have been done."},g={id:"sdk.assistant.tool.toolBudget.hint",message:"Not done: the assistant reached its limit of steps for one message."},k={id:"sdk.assistant.tool.undo.label",message:"Undo"},x=n("div",{name:m,slot:"chips"})(({theme:{palette:e,spacing:t,typography:i}})=>({...i.caption,alignItems:"start",color:e.text.secondary,display:"grid",gap:t(.75),gridTemplateColumns:"min-content minmax(0, 1fr)"})),y=n("span",{name:m,slot:"activity"})(({theme:{typography:e}})=>({blockSize:`calc(${e.caption.lineHeight} * 1em)`,display:"grid",placeItems:"center"})),w=n(l,{name:m,slot:"activityIcon"})({fontSize:14,'[data-chips="active"] &':{animation:"phx-assistant-turn 2.4s linear infinite","@media (prefers-reduced-motion: reduce)":{animation:"none"}},"@keyframes phx-assistant-turn":{to:{rotate:"360deg"}}}),b=n("span",{name:m,slot:"chip"})(({theme:{palette:e,spacing:t}})=>({cursor:"default",display:"inline-block",whiteSpace:"nowrap","&:not(:last-of-type)::after":{color:e.text.secondary,content:'"\xb7"',display:"inline-block",marginInline:t(.75),textDecoration:"none"},'&[data-chip="failed"]':{color:e.error.main},'&[data-chip="flawed"]':{textDecoration:"line-through",textDecorationColor:e.error.main}})),v=n(i,{name:m,slot:"undoButton"})(({theme:{palette:e,shape:t,spacing:i}})=>({alignItems:"center",animation:"phx-assistant-undo-in 150ms ease-out",borderRadius:t.borderRadius,color:e.primary.main,display:"inline-flex",font:"inherit",gap:i(.5),marginInlineStart:i(1),verticalAlign:"top","&:hover":{textDecoration:"underline"},"@media (prefers-reduced-motion: reduce)":{animation:"none"},"@keyframes phx-assistant-undo-in":{from:{opacity:0}}})),C=o(({tool:t})=>{let{chip:i,input:n,result:o}=t,l=d(c),m=d(p),k=d(h),x=d(u),y=d(f),w=d(g),v=r(i.label).with({kind:"text"},({text:e})=>e).with({kind:"updateDesign"},()=>l).with({kind:"readDesign"},()=>m).exhaustive(),C=s(()=>{console.info(`Assistant tool call "${v}"`,{input:n,result:o})},[n,v,o]);return e(a,{title:r(i).with({errorCode:"cancelled"},()=>x).with({errorCode:"no_result"},()=>y).with({errorCode:"tool_budget"},()=>w).with({state:"failed"},{state:"flawed"},()=>k).otherwise(()=>""),placement:"top-start",children:e(b,{onClick:C,"data-chip":i.state,children:v})})});export const AssistantToolChips=o(({tools:i,isActive:a,canUndo:n,onUndo:o})=>{let r=d(k),m=s(()=>{o(new Set(i.map(({id:e})=>e)))},[o,i]);return t(x,{"data-chips":a?"active":"done","aria-busy":a,children:[e(y,{children:e(w,{name:"Gear"})}),t("div",{children:[i.map(t=>e(C,{tool:t},t.id)),n&&t(v,{onClick:m,children:[e(l,{name:"ArrowCounterClockwise",fontSize:"inherit"}),r]})]})]})});
@@ -1,7 +1,12 @@
1
+ import type { AssistantFormsVisibility } from './thread-items.js';
1
2
  export interface AssistantMarkdownProps {
2
3
  readonly markdown: string;
3
4
  /** True while the text is still arriving, so markup the model has not finished is completed. */
4
5
  readonly isStreaming: boolean;
6
+ readonly forms: AssistantFormsVisibility;
5
7
  }
6
- /** Assistant text of the thread: Markdown with lists, tables, links and code, without a bubble. */
7
- export declare const AssistantMarkdown: import("react").MemoExoticComponent<({ markdown, isStreaming }: AssistantMarkdownProps) => import("react/jsx-runtime").JSX.Element>;
8
+ /**
9
+ * Assistant text of the thread: Markdown with lists, tables, links, entity links, references, code and forms,
10
+ * without a bubble. A form fence the model is still writing shows a placeholder.
11
+ */
12
+ export declare const AssistantMarkdown: import("react").MemoExoticComponent<({ markdown, isStreaming, forms }: AssistantMarkdownProps) => import("react/jsx-runtime").JSX.Element>;
@@ -1 +1 @@
1
- import{jsx as r}from"react/jsx-runtime";import{styled as e}from"@mui/material";import{memo as o}from"react";import a from"react-markdown";import i from"remark-gfm";import{completeStreamedMarkdown as n}from"./streamed-markdown.js";import{AssistantPanelName as t}from"./theme.js";let l=e("div",{name:t,slot:"assistantMessage"})(({theme:{palette:r,shape:e,spacing:o,typography:a}})=>({overflowWrap:"anywhere","& > :first-child":{marginBlockStart:0},"& > :last-child":{marginBlockEnd:0},"p, ul, ol, pre, blockquote":{marginBlock:o(1)},"h1, h2, h3, h4, h5, h6":{...a.subtitle2,marginBlock:o(1.5,.5)},"ul, ol":{paddingInlineStart:o(2.5)},a:{color:r.primary.main},code:{background:r.action.hover,borderRadius:e.borderRadius/2,fontFamily:"ui-monospace, Menlo, monospace",fontSize:"0.9em",paddingInline:o(.5)},pre:{background:r.action.hover,borderRadius:e.borderRadius,overflowX:"auto",padding:o(1),code:{background:"none",padding:0}},blockquote:{borderInlineStart:`2px solid ${r.divider}`,color:r.text.secondary,marginInline:0,paddingInlineStart:o(1.5)},"th, td":{borderBlockEnd:`1px solid ${r.divider}`,padding:o(.5,1),textAlign:"start",verticalAlign:"top"}})),d=e("div")({overflowX:"auto",table:{borderCollapse:"collapse",inlineSize:"100%"}}),m={a:({node:e,children:o,...a})=>r("a",{...a,target:"_blank",rel:"noopener noreferrer",children:o}),table:({node:e,children:o,...a})=>r(d,{children:r("table",{...a,children:o})})},s=[i],c=["img"];export const AssistantMarkdown=o(({markdown:e,isStreaming:o})=>r(l,{children:r(a,{components:m,remarkPlugins:s,disallowedElements:c,children:o?n(e):e})}));
1
+ import{jsx as e,Fragment as r}from"react/jsx-runtime";import{styled as n}from"@mui/material";import{createContext as i,memo as o,useContext as t,useMemo as l}from"react";import a,{defaultUrlTransform as d}from"react-markdown";import m from"remark-gfm";import{AssistantEntityLink as s}from"./entity-link/index.js";import{AssistantForm as c}from"./form/index.js";import{AssistantReferenceLink as u,isAssistantLinkHref as p,parseAssistantLinkTarget as g}from"./reference-link/index.js";import{completeStreamedMarkdown as h,hasOpenFence as f}from"./streamed-markdown.js";import{AssistantPanelName as k}from"./theme.js";let b=n("div",{name:k,slot:"assistantMessage"})(({theme:{palette:e,shape:r,spacing:n,typography:i}})=>({overflowWrap:"anywhere","& > :first-child":{marginBlockStart:0},"& > :last-child":{marginBlockEnd:0},"p, ul, ol, pre, blockquote":{marginBlock:n(1)},"h1, h2, h3, h4, h5, h6":{...i.subtitle2,marginBlock:n(1.5,.5)},"ul, ol":{paddingInlineStart:n(2.5)},a:{color:e.primary.main},code:{background:e.action.hover,borderRadius:r.borderRadius/2,fontFamily:"ui-monospace, Menlo, monospace",fontSize:"0.9em",paddingInline:n(.5)},pre:{background:e.action.hover,borderRadius:r.borderRadius,overflowX:"auto",padding:n(1),code:{background:"none",padding:0}},blockquote:{borderInlineStart:`2px solid ${e.divider}`,color:e.text.secondary,marginInline:0,paddingInlineStart:n(1.5)},"th, td":{borderBlockEnd:`1px solid ${e.divider}`,padding:n(.5,1),textAlign:"start",verticalAlign:"top"}})),v=n("div")({overflowX:"auto",table:{borderCollapse:"collapse",inlineSize:"100%"}}),x=i({forms:"hidden",openFenceEnd:void 0,isStreaming:!1}),y=({source:r,end:n})=>{let{forms:i,openFenceEnd:o,isStreaming:l}=t(x);return"hidden"===i?null:null!=n&&n===o?l?e(c,{source:r,status:"writing"}):null:e(c,{source:r,status:"disabled"===i?"waiting":"ready"})},w={a:({node:n,children:i,href:o,...t})=>{if(null==o||!p(o))return e("a",{...t,href:o,target:"_blank",rel:"noopener noreferrer",children:i});let l=g(o);return null==l?e(r,{children:i}):"entity"===l.kind?e(s,{id:l.id,children:i}):e(u,{target:l,children:i})},pre:({node:r,children:n,...i})=>{let o=(e=>{let[r]=e?.children??[];if(r?.type!=="element"||"code"!==r.tagName)return;let{className:n}=r.properties;if(Array.isArray(n)&&n.includes("language-form"))return r.children.map(e=>"text"===e.type?e.value:"").join("")})(r);return null==o?e("pre",{...i,children:n}):e(y,{source:o,end:r?.position?.end.offset})},table:({node:r,children:n,...i})=>e(v,{children:e("table",{...i,children:n})})},j=[m],S=e=>p(e)?e:d(e),A=["img"];export const AssistantMarkdown=o(({markdown:r,isStreaming:n,forms:i})=>{let o=n?h(r):r,t=f(r)?o.length:void 0,d=l(()=>({forms:i,openFenceEnd:t,isStreaming:n}),[i,t,n]);return e(b,{children:e(x.Provider,{value:d,children:e(a,{components:w,remarkPlugins:j,disallowedElements:A,urlTransform:S,children:o})})})});
@@ -1 +1 @@
1
- import{jsx as e,jsxs as t}from"react/jsx-runtime";import{IconButton as s,Tooltip as a,Typography as i,styled as n}from"@mui/material";import{useCallback as r}from"react";import{useLocalizable as o}from"#package/react-sdk";import{PhxIcon as l}from"#package/ui-sdk";import{useConfigurator as m}from"../../application-runtime/index.js";import{AssistantComposer as d}from"./AssistantComposer.js";import{AssistantThread as p}from"./AssistantThread.js";import{AssistantPanelName as c}from"./theme.js";import{useIsAssistantPanelOpen as u}from"./use-is-assistant-panel-open.js";let b={id:"sdk.assistant.panel.title",message:"Assistant"},f={id:"sdk.assistant.panel.close.label",message:"Close assistant"};export const ASSISTANT_PANEL_SLOT="slot[assistant]";let g=n("section",{name:c,slot:"root"})(({theme:{palette:e}})=>({background:`var(--phx-sidebar-background, ${e.background.paper})`,border:"var(--phx-sidebar-border, 0)",borderRadius:"inherit",display:"grid",gridTemplateColumns:"minmax(0, 1fr)",gridTemplateRows:"min-content minmax(0, 1fr) min-content",inset:0,overflow:"hidden",position:"absolute",zIndex:1})),h=n("header",{name:c,slot:"header"})(({theme:{palette:e,spacing:t}})=>({alignItems:"center",borderBlockEnd:`1px solid ${e.divider}`,display:"flex",gap:t(1),justifyContent:"space-between",paddingBlock:t(1),paddingInline:`var(--phx-sidebar-padding, ${t(2)}) ${t(1)}`})),x=n(i,{name:c,slot:"title"})({fontWeight:600}),k=n(s,{name:c,slot:"closeButton"})({}),j=e=>{e.target instanceof Element&&e.target.closest("button")&&e.preventDefault()};export const AssistantPanel=()=>{let{assistantSystem:s}=m(),i=u(),n=o(b),c=o(f),v=r(()=>{s.setOpen(!1)},[s]);return i?t(g,{"data-sidebar":"slot[assistant]","aria-label":n,onMouseDown:j,children:[t(h,{children:[e(x,{variant:"subtitle1",component:"h2",children:n}),e(a,{title:c,placement:"top",children:e(k,{size:"small","aria-label":c,onClick:v,children:e(l,{name:"X"})})})]}),e(p,{}),e(d,{})]}):null};
1
+ import{jsx as e,jsxs as t}from"react/jsx-runtime";import{IconButton as s,Tooltip as a,Typography as n,styled as i}from"@mui/material";import{useCallback as r}from"react";import{useLocalizable as o}from"#package/react-sdk";import{PhxIcon as l}from"#package/ui-sdk";import{useConfigurator as m}from"../../application-runtime/index.js";import{AssistantComposer as d}from"./AssistantComposer.js";import{AssistantThread as p}from"./AssistantThread.js";import{AssistantPanelName as c}from"./theme.js";import{useIsAssistantPanelOpen as u}from"./use-is-assistant-panel-open.js";let b={id:"sdk.assistant.panel.title",message:"Assistant"},f={id:"sdk.assistant.panel.close.label",message:"Close assistant"};export const ASSISTANT_PANEL_SLOT="slot[assistant]";let g=i("section",{name:c,slot:"root"})(({theme:{palette:e}})=>({background:`var(--phx-sidebar-background, ${e.background.paper})`,border:"var(--phx-sidebar-border, 0)",borderRadius:"inherit",display:"grid",gridTemplateColumns:"minmax(0, 1fr)",gridTemplateRows:"min-content minmax(0, 1fr) min-content",inset:0,overflow:"hidden",position:"absolute",zIndex:1})),h=i("header",{name:c,slot:"header"})(({theme:{palette:e,spacing:t}})=>({alignItems:"center",borderBlockEnd:`1px solid ${e.divider}`,display:"flex",gap:t(1),justifyContent:"space-between",paddingBlock:t(1),paddingInline:`var(--phx-sidebar-padding, ${t(2)}) ${t(1)}`})),x=i(n,{name:c,slot:"title"})({fontWeight:600}),k=i(s,{name:c,slot:"closeButton"})({}),j=e=>{e.target instanceof Element&&e.target.closest('button, [role="button"]')&&e.preventDefault()};export const AssistantPanel=()=>{let{assistantSystem:s}=m(),n=u(),i=o(b),c=o(f),v=r(()=>{s.setOpen(!1)},[s]);return n?t(g,{"data-sidebar":"slot[assistant]","aria-label":i,onMouseDown:j,children:[t(h,{children:[e(x,{variant:"subtitle1",component:"h2",children:i}),e(a,{title:c,placement:"top",children:e(k,{size:"small","aria-label":c,onClick:v,children:e(l,{name:"X"})})})]}),e(p,{}),e(d,{})]}):null};
@@ -1 +1 @@
1
- import{jsx as e,jsxs as a}from"react/jsx-runtime";import{Trans as i}from"@lingui/react";import{Button as s,styled as t}from"@mui/material";import{useMemo as r}from"react";import{match as n}from"ts-pattern";import{useEagerObservableValue as o}from"#package/react-sdk";import{PhxIcon as l}from"#package/ui-sdk";import{useConfigurator as d}from"../../application-runtime/index.js";import{AssistantToolChips as m}from"./AssistantChips.js";import{AssistantMarkdown as h}from"./AssistantMarkdown.js";import{describeAssistantFailure as c}from"./assistant-failure.js";import{AssistantPanelName as p}from"./theme.js";import{buildEarlierThreadItems as g,buildThreadView as u}from"./thread-items.js";import{useFollowStream as k}from"./use-follow-stream.js";let f=t("div",{name:p,slot:"thread"})({display:"grid",position:"relative"}),v=t("div",{name:p,slot:"messages"})(({theme:{spacing:e,typography:a}})=>({...a.body2,display:"flex",flexDirection:"column",gap:e(1.5),overflowY:"auto",overscrollBehavior:"contain",paddingBlock:e(2),paddingInline:`var(--phx-sidebar-padding, ${e(2)})`,"& > :first-child":{marginBlockStart:"auto"}})),w=t("div",{name:p,slot:"userMessage"})(({theme:{palette:e,spacing:a}})=>({alignSelf:"flex-end",background:`hsl(from ${e.primary.main} h s l / 12%)`,borderRadius:"14px 14px 4px 14px",maxInlineSize:"85%",overflowWrap:"anywhere",paddingBlock:a(1),paddingInline:a(1.5),whiteSpace:"pre-wrap"})),b=t("div",{name:p,slot:"greeting"})({}),x=t("div",{name:p,slot:"status"})(({theme:{palette:e,typography:a}})=>({...a.caption,color:e.text.secondary})),y=t("div",{name:p,slot:"separator"})(({theme:{palette:e,spacing:a,typography:i}})=>({...i.caption,alignItems:"center",color:e.text.secondary,display:"flex",gap:a(1),"&::before, &::after":{borderBlockStart:`1px solid ${e.divider}`,content:'""',flex:1}})),T=t(s,{name:p,slot:"earlierButton"})({alignSelf:"center"}),S=t("div",{name:p,slot:"notice"})(({theme:{palette:e,shape:a,spacing:i}})=>({alignItems:"center",background:e.action.hover,borderRadius:a.borderRadius,display:"flex",flexWrap:"wrap",gap:i(1),justifyContent:"space-between",paddingBlock:i(1),paddingInline:i(1.5)})),j=t(s,{name:p,slot:"newReplyButton"})(({theme:{palette:e,spacing:a}})=>({background:e.text.primary,borderRadius:"calc(infinity * 1px)",color:e.background.paper,insetBlockEnd:a(1),insetInlineStart:"50%",position:"absolute",translate:"-50% 0","&:hover":{background:e.text.secondary}})),B=({item:a,isActive:s})=>n(a).with({kind:"user"},({text:a})=>e(w,{children:a})).with({kind:"text"},({markdown:a,isStreaming:i})=>e(h,{markdown:a,isStreaming:i})).with({kind:"tools"},({tools:a})=>e(m,{tools:a,isActive:s})).with({kind:"separator"},()=>e(y,{role:"separator",children:e(i,{id:"sdk.assistant.thread.earlierSummarized",message:"Earlier conversation summarized"})})).exhaustive();export const AssistantThread=()=>{let{assistantSystem:t}=d(),m=o(t.chat$),{messages:h,isLoading:p,isResuming:w,earlierThreads:y}=m,{items:I,isThinking:A}=r(()=>u(h,p),[h,p]),E=r(()=>g(y),[y]),R=r(()=>I.filter(({kind:e})=>"user"===e).length,[I]),L=m.error?c(m.failedStatus):void 0,{scrollerRef:z,hasUnseenContent:C,handleScroll:$,scrollToEnd:D}=k(r(()=>({messages:h,isThinking:A,isResuming:w,failure:L?.kind}),[h,A,w,L?.kind]),R),M=!m.isLoaded&&0===E.length&&!w&&!L;return a(f,{children:[a(v,{ref:z,onScroll:$,role:"log","aria-live":"polite",children:[m.isLoaded&&0===I.length&&0===E.length&&!p&&!w&&!L&&e(b,{children:e(i,{id:"sdk.assistant.thread.greeting",message:"Hi. I can answer questions about this design and change it with you. Tell me what you need."})}),M&&e(x,{children:e(i,{id:"sdk.assistant.thread.loading",message:"Loading the conversation…"})}),m.isLoadingEarlierThread&&e(x,{children:e(i,{id:"sdk.assistant.thread.loadingEarlier",message:"Loading the earlier conversation…"})}),m.hasEarlierThread&&!m.isLoadingEarlierThread&&e(T,{size:"small",color:"inherit",onClick:t.loadEarlierThread,children:e(i,{id:"sdk.assistant.thread.showEarlier.label",message:"Show earlier conversation"})}),E.map(a=>e(B,{item:a,isActive:!1},a.id)),I.map(a=>e(B,{item:a,isActive:p&&a===I.at(-1)},a.id)),w&&e(x,{children:e(i,{id:"sdk.assistant.thread.resuming",message:"Resuming the conversation…"})}),A&&e(x,{children:e(i,{id:"sdk.assistant.thread.thinking",message:"Thinking…"})}),L&&a(S,{role:"alert",children:[e("span",{children:n(L.kind).with("notAvailable",()=>e(i,{id:"sdk.assistant.failure.notAvailable",message:"The assistant is not available here."})).with("busy",()=>e(i,{id:"sdk.assistant.failure.busy",message:"The assistant is still working on an earlier message."})).with("unavailable",()=>e(i,{id:"sdk.assistant.failure.unavailable",message:"The assistant is unavailable right now."})).exhaustive()}),L.canRetry&&e(s,{size:"small",variant:"outlined",color:"inherit",onClick:t.reloadThread,children:e(i,{id:"sdk.assistant.failure.retry.label",message:"Try again"})})]})]}),C&&e(j,{size:"small",onClick:D,endIcon:e(l,{name:"CaretDown"}),children:e(i,{id:"sdk.assistant.thread.newReply.label",message:"New reply"})})]})};
1
+ import{jsx as e,jsxs as a}from"react/jsx-runtime";import{Trans as i}from"@lingui/react";import{Button as t,styled as s}from"@mui/material";import{useCallback as r,useMemo as n}from"react";import{match as o}from"ts-pattern";import{useEagerObservableValue as l}from"#package/react-sdk";import{PhxIcon as d}from"#package/ui-sdk";import{useConfigurator as m}from"../../application-runtime/index.js";import{AssistantToolChips as c}from"./AssistantChips.js";import{AssistantMarkdown as h}from"./AssistantMarkdown.js";import{describeAssistantFailure as p}from"./assistant-failure.js";import{EntityLinkSelectionProvider as g,useCreateEntityLinkSelection as u}from"./entity-link/index.js";import{AssistantPanelName as f}from"./theme.js";import{buildEarlierThreadItems as k,buildThreadView as v}from"./thread-items.js";import{useFollowStream as b}from"./use-follow-stream.js";let w=s("div",{name:f,slot:"thread"})({display:"grid",position:"relative"}),x=s("div",{name:f,slot:"messages"})(({theme:{spacing:e,typography:a}})=>({...a.body2,display:"flex",flexDirection:"column",gap:e(1.5),overflowY:"auto",overscrollBehavior:"contain",paddingBlock:e(2),paddingInline:`var(--phx-sidebar-padding, ${e(2)})`,"& > :first-child":{marginBlockStart:"auto"}})),y=s("div",{name:f,slot:"userMessage"})(({theme:{palette:e,spacing:a}})=>({alignSelf:"flex-end",background:`hsl(from ${e.primary.main} h s l / 12%)`,borderRadius:"14px 14px 4px 14px",maxInlineSize:"85%",overflowWrap:"anywhere",paddingBlock:a(1),paddingInline:a(1.5),whiteSpace:"pre-wrap"})),T=s("div",{name:f,slot:"greeting"})({}),C=s("div",{name:f,slot:"status"})(({theme:{palette:e,typography:a}})=>({...a.caption,color:e.text.secondary})),S=s("div",{name:f,slot:"separator"})(({theme:{palette:e,spacing:a,typography:i}})=>({...i.caption,alignItems:"center",color:e.text.secondary,display:"flex",gap:a(1),"&::before, &::after":{borderBlockStart:`1px solid ${e.divider}`,content:'""',flex:1}})),j=s(t,{name:f,slot:"earlierButton"})({alignSelf:"center"}),I=s("div",{name:f,slot:"notice"})(({theme:{palette:e,shape:a,spacing:i}})=>({alignItems:"center",background:e.action.hover,borderRadius:a.borderRadius,display:"flex",flexWrap:"wrap",gap:i(1),justifyContent:"space-between",paddingBlock:i(1),paddingInline:i(1.5)})),B=s(t,{name:f,slot:"newReplyButton"})(({theme:{palette:e,spacing:a}})=>({background:e.text.primary,borderRadius:"calc(infinity * 1px)",color:e.background.paper,insetBlockEnd:a(1),insetInlineStart:"50%",position:"absolute",translate:"-50% 0","&:hover":{background:e.text.secondary}})),E=({item:a,isActive:t,undoableToolCallId:s,onUndo:r})=>o(a).with({kind:"user"},({text:a})=>e(y,{children:a})).with({kind:"text"},({markdown:a,isStreaming:i,forms:t})=>e(h,{markdown:a,isStreaming:i,forms:t})).with({kind:"tools"},({tools:a})=>e(c,{tools:a,isActive:t,canUndo:a.some(({id:e})=>e===s),onUndo:r})).with({kind:"separator"},()=>e(S,{role:"separator",children:e(i,{id:"sdk.assistant.thread.earlierSummarized",message:"Earlier conversation summarized"})})).exhaustive();export const AssistantThread=()=>{let{assistantSystem:s}=m(),c=l(s.chat$),{messages:h,isLoading:f,isResuming:y,earlierThreads:S}=c,A=l(s.undoTipToolCallId$),R=f?void 0:A,{items:L,isThinking:z}=n(()=>v(h,f,y),[h,f,y]),$=n(()=>k(S),[S]),U=n(()=>L.filter(({kind:e})=>"user"===e).length,[L]),D=c.error?p(c.failedStatus):void 0,{scrollerRef:M,hasUnseenContent:W,handleScroll:q,scrollToEnd:H}=b(n(()=>({messages:h,isThinking:z,isResuming:y,failure:D?.kind}),[h,z,y,D?.kind]),U),N=u(),Y=r(e=>{e.target instanceof Element&&e.target.closest('a, button, input, label, select, textarea, [role="button"], [role="tooltip"]')||window.getSelection()?.isCollapsed!==!1&&N.release()},[N]),F=!c.isLoaded&&0===$.length&&!y&&!D;return a(w,{children:[e(g,{selection:N,children:a(x,{ref:M,onScroll:q,onClick:Y,role:"log","aria-live":"polite",children:[c.isLoaded&&0===L.length&&0===$.length&&!f&&!y&&!D&&e(T,{children:e(i,{id:"sdk.assistant.thread.greeting",message:"Hi. I can answer questions about this design and change it with you. Tell me what you need."})}),F&&e(C,{children:e(i,{id:"sdk.assistant.thread.loading",message:"Loading the conversation…"})}),c.isLoadingEarlierThread&&e(C,{children:e(i,{id:"sdk.assistant.thread.loadingEarlier",message:"Loading the earlier conversation…"})}),c.hasEarlierThread&&!c.isLoadingEarlierThread&&e(j,{size:"small",color:"inherit",onClick:s.loadEarlierThread,children:e(i,{id:"sdk.assistant.thread.showEarlier.label",message:"Show earlier conversation"})}),$.map(a=>e(E,{item:a,isActive:!1,undoableToolCallId:R,onUndo:s.undoToolCalls},a.id)),L.map(a=>e(E,{item:a,isActive:f&&a===L.at(-1),undoableToolCallId:R,onUndo:s.undoToolCalls},a.id)),y&&e(C,{children:e(i,{id:"sdk.assistant.thread.resuming",message:"Resuming the conversation…"})}),z&&e(C,{children:e(i,{id:"sdk.assistant.thread.thinking",message:"Thinking…"})}),D&&a(I,{role:"alert",children:[e("span",{children:o(D.kind).with("notAvailable",()=>e(i,{id:"sdk.assistant.failure.notAvailable",message:"The assistant is not available here."})).with("busy",()=>e(i,{id:"sdk.assistant.failure.busy",message:"The assistant is still working on an earlier message."})).with("unavailable",()=>e(i,{id:"sdk.assistant.failure.unavailable",message:"The assistant is unavailable right now."})).exhaustive()}),D.canRetry&&e(t,{size:"small",variant:"outlined",color:"inherit",onClick:s.reloadThread,children:e(i,{id:"sdk.assistant.failure.retry.label",message:"Try again"})})]})]})}),W&&e(B,{size:"small",onClick:H,endIcon:e(d,{name:"CaretDown"}),children:e(i,{id:"sdk.assistant.thread.newReply.label",message:"New reply"})})]})};
@@ -0,0 +1,13 @@
1
+ import { type ReactNode } from 'react';
2
+ import { type DomainEntityId } from '#package/domain';
3
+ export interface AssistantEntityLinkProps {
4
+ readonly id: DomainEntityId<string>;
5
+ /** The text the assistant gave the link; the id itself is never shown. */
6
+ readonly children: ReactNode;
7
+ }
8
+ /**
9
+ * An entity the assistant named in a reply, shown as its label. It follows the configurator live:
10
+ * a click selects the entity when the scene can select it, the link shows when the entity is
11
+ * selected or hovered in the scene, and it is muted once the entity is gone.
12
+ */
13
+ export declare const AssistantEntityLink: import("react").MemoExoticComponent<({ id, children }: AssistantEntityLinkProps) => import("react/jsx-runtime").JSX.Element>;
@@ -0,0 +1 @@
1
+ import{jsx as e}from"react/jsx-runtime";import{styled as t}from"@mui/material";import{memo as n,useCallback as i,useEffect as r,useRef as o}from"react";import{sceneEntitySelectHotspotComponent as a,selectableComponent as l}from"#package/domain";import{useDomain as s,useFirstRenderedComponent as c,useHoveredDomainEntityId as d,useRenderedSelector as m,useSelectEntity as u,useSelectedDomainEntityId as p,useStoreSelector as k}from"#package/react-sdk";import{FrontendAnalyticsFactory as y}from"../../../common/index.js";import{assistantReferenceStyles as f}from"../reference-link/index.js";import{AssistantPanelName as g}from"../theme.js";import{useEntityLinkSelection as h}from"./entity-link-selection.js";import{resolveEntityLinkState as v}from"./entity-link-state.js";let b=t("span",{name:g,slot:"entityLink"})(e=>({...f(e),'&[data-entity-link="plain"], &[data-entity-link="missing"]':{cursor:"auto","&:hover":{background:"none"}},'&[data-selected="true"]':{textDecorationStyle:"solid"}})),j={interactive:void 0,plain:"plain",missing:"muted"},x=({kind:t,isSelected:n,children:i})=>e(b,{"data-entity-link":t,"data-reference":j[t],"data-selected":n,children:i}),S=({id:t,isSelected:n,children:m})=>{let{navigationSystem:p}=s(),k=c({entityIds:[t],componentTypes:[l]}),f=c({entityIds:[t],componentTypes:[a]}),{kind:g,canHover:j}=v({isSelectable:null!=k,isHoverDisabled:k?.state.hoverable===!1,hasSelectHotspot:null!=f}),S=d()===t,E=u(y.AssistantEntityLinkClicked),T=h(),D=i(()=>{T?.remember(t),E(t)},[t,T,E]),H=o(!1),L=i(()=>{j&&(H.current=!0,p.debouncedToggleHover(t))},[j,t,p]),I=i(()=>{H.current&&(H.current=!1,p.debouncedToggleHover(null))},[p]),A=i(e=>{"touch"!==e.pointerType&&L()},[L]),C=i(e=>{e.currentTarget.matches(":focus-visible")&&L()},[L]),P=i(e=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),D())},[D]);return(r(()=>I,[j,I,t]),"interactive"!==g)?e(x,{kind:g,isSelected:n,children:m}):e(b,{role:"button",tabIndex:0,"data-entity-link":g,"data-selected":n,"data-hovered":j&&S,"aria-current":n?"true":void 0,onClick:D,onKeyDown:P,onPointerEnter:A,onPointerLeave:I,onFocus:C,onBlur:I,children:m})};export const AssistantEntityLink=n(({id:t,children:n})=>{let{domain:i}=s(),r=k(e=>null!=i.getEntity(t,e.state),[i,t]),o=m(e=>null!=i.getEntity(t,e.state),[i,t]),a=p()===t;return r?o?e(S,{id:t,isSelected:a,children:n}):e(x,{kind:"plain",isSelected:a,children:n}):e(x,{kind:"missing",isSelected:!1,children:n})});
@@ -0,0 +1,22 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { DomainEntityId } from '#package/domain';
3
+ /**
4
+ * The selection an entity link made, held for the thread the links are in. A click elsewhere in
5
+ * the thread takes back what a link selected, so a user can look at an entity and let it go again.
6
+ * A selection made anywhere else, in the scene, a hotspot or the sidebar, is never taken back.
7
+ */
8
+ export interface EntityLinkSelection {
9
+ /** Records that a link is selecting this entity; call it before the select update is committed. */
10
+ readonly remember: (id: DomainEntityId<string>) => void;
11
+ /** Deselects the entity a link selected, when it is still the selected one, and forgets it. */
12
+ readonly release: () => void;
13
+ }
14
+ /** Creates the selection the entity links of one thread share; the thread provides it to them. */
15
+ export declare const useCreateEntityLinkSelection: () => EntityLinkSelection;
16
+ export interface EntityLinkSelectionProviderProps {
17
+ readonly selection: EntityLinkSelection;
18
+ readonly children: ReactNode;
19
+ }
20
+ export declare const EntityLinkSelectionProvider: ({ selection, children }: EntityLinkSelectionProviderProps) => import("react/jsx-runtime").JSX.Element;
21
+ /** The selection of the thread the link is in, or `null` for a link rendered outside a thread. */
22
+ export declare const useEntityLinkSelection: () => EntityLinkSelection | null;
@@ -0,0 +1 @@
1
+ import{jsx as t}from"react/jsx-runtime";import{createContext as e,useCallback as r,useContext as n,useEffect as l,useMemo as c,useRef as i}from"react";import{useDeselect as o,useDomain as u,useSelectedDomainEntityId as a}from"#package/react-sdk";let s=e(null);export const useCreateEntityLinkSelection=()=>{let{storeSystem:t,navigationSystem:e}=u(),n=o(),s=a(),m=i(null);l(()=>{s!==m.current&&(m.current=null)},[s]);let p=r(t=>{m.current=t},[]),S=r(()=>{let r=m.current;m.current=null,null!=r&&e.getActiveSelectionState(t.stateSlices.committed.value.state)===r&&n()},[n,e,t]);return c(()=>({remember:p,release:S}),[p,S])};export const EntityLinkSelectionProvider=({selection:e,children:r})=>t(s.Provider,{value:e,children:r});export const useEntityLinkSelection=()=>n(s);
@@ -0,0 +1,27 @@
1
+ /** What is attached right now to an existing entity that an entity link points at. */
2
+ export interface EntityLinkFacts {
3
+ /** A `selectable` component is attached to the entity under the current filters. */
4
+ readonly isSelectable: boolean;
5
+ /** The attached `selectable` component switches hover off with `hoverable: false`. */
6
+ readonly isHoverDisabled: boolean;
7
+ /** A `sceneEntitySelectHotspot` component is attached to the entity under the current filters. */
8
+ readonly hasSelectHotspot: boolean;
9
+ }
10
+ /**
11
+ * How an entity link shows and behaves:
12
+ *
13
+ * - `missing`: the entity is gone, the link is muted;
14
+ * - `plain`: the entity exists but nothing in the scene selects it, so the link is only a label;
15
+ * - `interactive`: a click selects the entity, as a click on it or on its hotspot in the scene does.
16
+ */
17
+ export type EntityLinkKind = 'missing' | 'plain' | 'interactive';
18
+ /** The state of a link to an entity that exists; a link to one that is gone is `missing` without it. */
19
+ export interface EntityLinkState {
20
+ readonly kind: Exclude<EntityLinkKind, 'missing'>;
21
+ /**
22
+ * The link sends its hover to the scene and shows the hover of the scene. Only an entity the
23
+ * scene itself can hover takes part, so one that is selected through a hotspot alone does not.
24
+ */
25
+ readonly canHover: boolean;
26
+ }
27
+ export declare const resolveEntityLinkState: (facts: EntityLinkFacts) => EntityLinkState;
@@ -0,0 +1 @@
1
+ export const resolveEntityLinkState=e=>{let{isSelectable:n,isHoverDisabled:t,hasSelectHotspot:i}=e;return n||i?{kind:"interactive",canHover:n&&!t}:{kind:"plain",canHover:!1}};
@@ -0,0 +1,2 @@
1
+ export { AssistantEntityLink } from './AssistantEntityLink.js';
2
+ export { EntityLinkSelectionProvider, useCreateEntityLinkSelection } from './entity-link-selection.js';
@@ -0,0 +1 @@
1
+ export{AssistantEntityLink}from"./AssistantEntityLink.js";export{EntityLinkSelectionProvider,useCreateEntityLinkSelection}from"./entity-link-selection.js";
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Where a form stands in its reply: still being written, written while the reply goes on, or ready
3
+ * for the user once the reply has ended.
4
+ */
5
+ export type AssistantFormStatus = 'writing' | 'waiting' | 'ready';
6
+ export interface AssistantFormProps {
7
+ /** The markup inside the ```` ```form ```` fence. */
8
+ readonly source: string;
9
+ readonly status: AssistantFormStatus;
10
+ }
11
+ /**
12
+ * A form the assistant wrote to ask the user something. What the user picks or enters is sent as
13
+ * their next message; a form that asks one question sends on the first pick, any other has a submit
14
+ * button. A form that cannot be built offers to send the assistant its errors instead.
15
+ *
16
+ * The state lives here, so unfinished input is lost when the form unmounts: accepted, because a
17
+ * form is shown only in the last reply of the thread.
18
+ */
19
+ export declare const AssistantForm: import("react").MemoExoticComponent<({ source, status }: AssistantFormProps) => import("react/jsx-runtime").JSX.Element | null>;
@@ -0,0 +1 @@
1
+ import{jsx as e,jsxs as i}from"react/jsx-runtime";import{Trans as r}from"@lingui/react";import{Button as t,styled as o}from"@mui/material";import{memo as n,useCallback as a,useEffect as s,useMemo as l,useState as d}from"react";import{match as m}from"ts-pattern";import{useConfigurator as c}from"../../../application-runtime/index.js";import{AssistantPanelName as p}from"../theme.js";import{getBuiltInFormRegistry as u}from"./built-in-form-registry.js";import{composeAnswer as b}from"./compose-answer.js";import{describeBuildErrors as f}from"./describe-build-errors.js";import{parseFormBlock as g}from"./parse-form-block.js";let h=o("form",{name:p,slot:"form"})(({theme:{spacing:e}})=>({display:"flex",flexDirection:"column",gap:e(1.5),marginBlock:e(1)})),k=o(t,{name:p,slot:"formSubmit"})(({theme:{palette:e,spacing:i,typography:r}})=>({...r.body2,alignSelf:"end",background:e.primary.main,border:"none",borderRadius:8,color:e.primary.contrastText,fontWeight:r.fontWeightMedium,letterSpacing:"normal",minBlockSize:0,minInlineSize:0,paddingBlock:i(.5),paddingInline:i(2),textTransform:"none","&:hover":{background:e.primary.dark,border:"none"},"&.Mui-disabled":{background:e.action.disabledBackground,border:"none",color:e.action.disabled}})),w=o("div",{name:p,slot:"formNote"})(({theme:{palette:e,shape:i,spacing:r,typography:t}})=>({...t.caption,alignItems:"center",background:e.action.hover,borderRadius:i.borderRadius,color:e.text.secondary,display:"flex",flexWrap:"wrap",gap:r(1),justifyContent:"space-between",marginBlock:r(1),paddingBlock:r(1),paddingInline:r(1.5)})),x=({model:t,disabled:o,send:n})=>{let[a,s]=d(()=>new Map),[l,c]=d(()=>new Map),p=(i,r)=>{let{id:d,definition:u,label:f,value:g,attributes:h}=i;return m(u).with({role:"option"},({component:m})=>e(m,{attributes:h,label:f,disabled:o,selected:!0===a.get(d),onSelect:()=>{t.isQuick?n(b(t,new Map([[i.id,!0]]),l)):s(e=>{let t=new Map(e);if("choice"===r.definition.role){for(let e of r.children)t.delete(e.id);t.set(i.id,!0)}else t.set(i.id,!0!==e.get(i.id));return t})}},d)).with({role:"input"},({component:r})=>e(r,{attributes:h,label:f,value:g,disabled:o,state:a.get(d),onChange:(e,r)=>{s(r=>new Map(r).set(i.id,e)),c(e=>new Map(e).set(i.id,r))}},d)).with({role:"group"},{role:"choice"},{role:"choices"},({component:r})=>e(r,{attributes:h,label:f,disabled:o,children:i.children.map(e=>p(e,i))},d)).exhaustive()};return i(h,{onSubmit:e=>{e.preventDefault(),o||t.isQuick||n(b(t,a,l))},children:[t.root.children.map(e=>p(e,t.root)),!t.isQuick&&e(k,{type:"submit",variant:"contained",disabled:o,disableElevation:!0,children:e(r,{id:"sdk.assistant.form.submit.label",message:"Submit"})})]})};export const AssistantForm=n(({source:o,status:n})=>{let{assistantSystem:m}=c(),[p,b]=d(!1),h="writing"===n,k=l(()=>h?void 0:g(o,u()),[o,h]),y="ready"!==n||p,j=a(e=>{b(!0),m.send(e).finally(()=>b(!1))},[m]);return(s(()=>{k?.ok===!1&&console.warn("The assistant wrote a form that could not be built.",k.errors)},[k]),k)?k.ok?0===k.root.children.length?null:e(x,{model:k,disabled:y,send:j}):i(w,{role:"alert",children:[e("span",{children:e(r,{id:"sdk.assistant.form.failure",message:"The assistant couldn't build this form."})}),e(t,{size:"small",variant:"outlined",color:"inherit",disabled:y,onClick:()=>j(f(k.errors)),children:e(r,{id:"sdk.assistant.form.fix.label",message:"Fix it"})})]}):e(w,{children:e(r,{id:"sdk.assistant.form.writing",message:"Preparing a form…"})})});
@@ -0,0 +1,10 @@
1
+ import type { FormElementDefinition } from './form-element-definition.js';
2
+ import { type FormRegistry } from './form-registry.js';
3
+ /** The elements of every assistant form: the built-ins the SDK prompt lists, with their components. */
4
+ export declare const BUILT_IN_FORM_ELEMENTS: readonly FormElementDefinition[];
5
+ /**
6
+ * The registry of the built-in elements, built on the first form rather than when the module loads:
7
+ * compiling validators while the bundle evaluates would break a configurator on a page whose CSP
8
+ * forbids eval, even one without an assistant.
9
+ */
10
+ export declare const getBuiltInFormRegistry: () => FormRegistry;
@@ -0,0 +1 @@
1
+ let o;import{match as t}from"ts-pattern";import{ASSISTANT_BUILT_IN_FORM_ELEMENTS as e,extendedSchemaValidator as r}from"#package/domain";import{FormGroup as i,FormOptions as m,FormReply as n,FormText as p}from"../form-elements/index.js";import{createFormRegistry as c}from"./form-registry.js";export const BUILT_IN_FORM_ELEMENTS=e.map(o=>t(o.role).with("group",t=>({...o,role:t,component:i})).with("choice","choices",t=>({...o,role:t,component:m})).with("option",t=>({...o,role:t,component:n})).with("input",t=>({...o,role:t,component:p})).exhaustive());export const getBuiltInFormRegistry=()=>o??=c(BUILT_IN_FORM_ELEMENTS,{schemaValidator:r});
@@ -0,0 +1,11 @@
1
+ import type { BuiltFormModel } from './form-model.js';
2
+ import type { FormAnswers, FormState } from './form-state.js';
3
+ /** Stands for anything left unanswered, so every question keeps its line. */
4
+ export declare const FORM_PLACEHOLDER = "\u2014";
5
+ /**
6
+ * The user's answer to a form, sent as their message: one line per labelled container or input as
7
+ * `Label: value`, a bare line for an unlabelled one, two spaces of indentation per labelled
8
+ * container, and the placeholder for anything unanswered. Unlabelled groups are flattened into
9
+ * their parent, and a picked option answers with its value, or its label without one.
10
+ */
11
+ export declare const composeAnswer: (model: BuiltFormModel, state: FormState, answers: FormAnswers) => string;
@@ -0,0 +1 @@
1
+ import{match as t}from"ts-pattern";export const FORM_PLACEHOLDER="—";let e=(t,e)=>`${" ".repeat(t)}${e}`,n=(t,e)=>null==t?e:`${t}: ${e}`,r=({value:t,label:e})=>t??e??"",i=({children:t},{state:e})=>t.filter(({id:t})=>!0===e.get(t)).map(r),o=(r,l,p)=>{let{label:h}=r;return t(r.definition.role).with("group",()=>{if(null==h)return r.children.flatMap(t=>o(t,l,p));let t=r.children.flatMap(t=>o(t,l+1,p));return t.length>0?[e(l,`${h}:`),...t]:[e(l,`${h}: —`)]}).with("choice",()=>[e(l,n(h,i(r,p)[0]??"—"))]).with("choices",()=>{let t=i(r,p);return 0===t.length?[e(l,n(h,"—"))]:null==h?t.map(t=>e(l,t)):[e(l,`${h}:`),...t.map(t=>e(l+1,t))]}).with("input",()=>[e(l,n(h,(({id:t,value:e},{answers:n})=>n.has(t)?n.get(t):""===e?void 0:e)(r,p)??"—"))]).with("option",()=>[]).exhaustive()};export const composeAnswer=(t,e,n)=>o(t.root,0,{state:e,answers:n}).join("\n");
@@ -0,0 +1,6 @@
1
+ import type { FormBuildError } from './form-model.js';
2
+ /**
3
+ * The message Fix it sends for a form that could not be built: every error, with the element named
4
+ * by its tag and its label or its position, then the request to write the form again.
5
+ */
6
+ export declare const describeBuildErrors: (errors: readonly FormBuildError[]) => string;
@@ -0,0 +1 @@
1
+ export const describeBuildErrors=e=>["Your form could not be built:",...e.map(e=>`- ${(({element:e,label:l,position:n})=>null==l?`<${e}> (element ${n})`:`<${e} label="${l}">`)(e)}: ${e.message}.`),"Send it again."].join("\n");
@@ -0,0 +1,14 @@
1
+ import type { ComponentType } from 'react';
2
+ import type { AssistantFormElementDescriptor } from '#package/domain';
3
+ import type { FormContainerProps, FormInputProps, FormOptionProps } from '../form-elements/index.js';
4
+ /** An element a form can render: what the prompt knows of it, and the component that renders it for its role. */
5
+ export type FormElementDefinition = (AssistantFormElementDescriptor & {
6
+ readonly role: 'group' | 'choice' | 'choices';
7
+ readonly component: ComponentType<FormContainerProps>;
8
+ }) | (AssistantFormElementDescriptor & {
9
+ readonly role: 'option';
10
+ readonly component: ComponentType<FormOptionProps>;
11
+ }) | (AssistantFormElementDescriptor & {
12
+ readonly role: 'input';
13
+ readonly component: ComponentType<FormInputProps>;
14
+ });
@@ -0,0 +1,38 @@
1
+ import type { FormElementDefinition } from './form-element-definition.js';
2
+ /**
3
+ * An element of a parsed form. Options outside a `choice` or `choices` are already wrapped in an
4
+ * implicit container, and the top level of the block is an implicit group without a label.
5
+ */
6
+ export interface FormNode {
7
+ /** Unique within its block: the element's position in the markup, or what an implicit container wraps. */
8
+ readonly id: string;
9
+ readonly definition: FormElementDefinition;
10
+ readonly label?: string;
11
+ readonly value?: string;
12
+ readonly attributes: Readonly<Record<string, unknown>>;
13
+ readonly children: readonly FormNode[];
14
+ }
15
+ /** Why an element made its block unbuildable, named by its tag and its label or its position in the block. */
16
+ export interface FormBuildError {
17
+ readonly element: string;
18
+ readonly label?: string;
19
+ /** The element's place in the block, counting elements in document order from 1. */
20
+ readonly position: number;
21
+ readonly message: string;
22
+ }
23
+ /**
24
+ * A form fence as the panel renders it, or every reason it cannot. A quick form asks one question:
25
+ * the first pick sends it, and it has no submit button.
26
+ */
27
+ export type FormModel = {
28
+ readonly ok: true;
29
+ readonly root: FormNode;
30
+ readonly isQuick: boolean;
31
+ } | {
32
+ readonly ok: false;
33
+ readonly errors: readonly FormBuildError[];
34
+ };
35
+ /** A form that could be built. */
36
+ export type BuiltFormModel = Extract<FormModel, {
37
+ readonly ok: true;
38
+ }>;
@@ -0,0 +1 @@
1
+ export{};
@@ -0,0 +1,31 @@
1
+ import type { AssistantFormAttribute, PhxValidateFunction, SchemaValidator } from '#package/domain';
2
+ import type { FormElementDefinition } from './form-element-definition.js';
3
+ /** A declared attribute of a form element with the validator of its coerced value. */
4
+ export interface RegisteredFormAttribute {
5
+ readonly attribute: AssistantFormAttribute;
6
+ readonly validate: PhxValidateFunction;
7
+ }
8
+ /** A form element with its declared attributes, the built-in `label` and `value` included. */
9
+ export interface RegisteredFormElement {
10
+ readonly definition: FormElementDefinition;
11
+ readonly attributes: ReadonlyMap<string, RegisteredFormAttribute>;
12
+ }
13
+ /** The elements forms can use, and the containers a form puts around what the model left implicit. */
14
+ export interface FormRegistry {
15
+ /** The container of a block's top level. */
16
+ readonly group: RegisteredFormElement;
17
+ /** The container of options that are a block's only content. */
18
+ readonly choice: RegisteredFormElement;
19
+ /** The container of a run of options outside any choice. */
20
+ readonly choices: RegisteredFormElement;
21
+ get(name: string): RegisteredFormElement | undefined;
22
+ }
23
+ /** What a registry is built with: the shared validator, which follows the project's CSP switch. */
24
+ export interface FormRegistryContext {
25
+ readonly schemaValidator: SchemaValidator;
26
+ }
27
+ /**
28
+ * Compiles a validator for every declared attribute of the given elements, each its own small
29
+ * schema, so every failing attribute is reported whichever validator the project uses.
30
+ */
31
+ export declare const createFormRegistry: (definitions: readonly FormElementDefinition[], { schemaValidator }: FormRegistryContext) => FormRegistry;