@salsita-ai/sdk 0.50.0-develop.f81ab6ac76 → 0.50.0-develop.f9cd9b3a12

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 (460) hide show
  1. package/dist/application-spec/errors/diagnostic-codes.d.ts +9 -0
  2. package/dist/application-spec/errors/diagnostic-codes.js +1 -1
  3. package/dist/application-spec/errors/diagnostic-messages.d.ts +10 -1
  4. package/dist/application-spec/errors/diagnostic-messages.js +1 -1
  5. package/dist/application-spec/generate-application/code/domain-runtime-files.js +1 -1
  6. package/dist/application-spec/generate-application/code/templates/application-types.js +6 -6
  7. package/dist/application-spec/generate-application/code/templates/common/doc-comment.d.ts +2 -0
  8. package/dist/application-spec/generate-application/code/templates/common/doc-comment.js +1 -0
  9. package/dist/application-spec/generate-application/code/templates/configurator-globals.d.ts +2 -1
  10. package/dist/application-spec/generate-application/code/templates/configurator-globals.js +19 -6
  11. package/dist/application-spec/generate-application/code/templates/global-definition/generate-action-types.js +7 -7
  12. package/dist/application-spec/generate-application/code/templates/global-definition/generate-assistant-form-element-types.d.ts +12 -0
  13. package/dist/application-spec/generate-application/code/templates/global-definition/generate-assistant-form-element-types.js +7 -0
  14. package/dist/application-spec/generate-application/code/templates/global-definition/generate-phx-types.js +24 -22
  15. package/dist/application-spec/generate-application/code/templates/global-definition/index.d.ts +1 -0
  16. package/dist/application-spec/generate-application/code/templates/global-definition/index.js +1 -1
  17. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.d.ts +13 -6
  18. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.js +2 -2
  19. package/dist/application-spec/parse-application-files/raw-spec/raw-assistant.d.ts +33 -3
  20. package/dist/application-spec/parse-application-files/raw-spec/raw-assistant.js +1 -1
  21. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-form-elements.d.ts +9 -0
  22. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-form-elements.js +1 -0
  23. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-schema.d.ts +4 -1
  24. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-schema.js +1 -1
  25. package/dist/configurator/ConfiguratorApp.js +1 -1
  26. package/dist/configurator/app-loader-content/DefaultAppLoaderContent.d.ts +2 -0
  27. package/dist/configurator/app-loader-content/DefaultAppLoaderContent.js +5 -0
  28. package/dist/configurator/app-loader-content/app-loader-content-name.d.ts +5 -0
  29. package/dist/configurator/app-loader-content/app-loader-content-name.js +1 -0
  30. package/dist/configurator/app-loader-content/index.d.ts +2 -0
  31. package/dist/configurator/app-loader-content/index.js +1 -0
  32. package/dist/configurator/application-runtime/extensions/selectors.js +1 -1
  33. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.d.ts +4 -3
  34. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.js +1 -1
  35. package/dist/configurator/application-runtime/extensions/systems/assistant-system/graphql-tools.d.ts +33 -7
  36. package/dist/configurator/application-runtime/extensions/systems/assistant-system/graphql-tools.js +1 -1
  37. package/dist/configurator/application-runtime/extensions/systems/camera-control-system/camera-control-system.d.ts +1 -1
  38. package/dist/configurator/application-runtime/extensions/systems/canvas-system.d.ts +8 -0
  39. package/dist/configurator/application-runtime/extensions/systems/canvas-system.js +1 -1
  40. package/dist/configurator/application-runtime/extensions/systems/export-system/export-busy-error.d.ts +8 -0
  41. package/dist/configurator/application-runtime/extensions/systems/export-system/export-busy-error.js +1 -0
  42. package/dist/configurator/application-runtime/extensions/systems/export-system/export-system.d.ts +23 -1
  43. package/dist/configurator/application-runtime/extensions/systems/export-system/export-system.js +1 -1
  44. package/dist/configurator/application-runtime/extensions/systems/graphql-system/entity-meta.d.ts +14 -1
  45. package/dist/configurator/application-runtime/extensions/systems/graphql-system/entity-meta.js +1 -1
  46. package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.d.ts +45 -4
  47. package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.js +1 -1
  48. package/dist/configurator/application-runtime/extensions/systems/image-rendering-system/image-rendering-system.d.ts +14 -5
  49. package/dist/configurator/application-runtime/extensions/systems/image-rendering-system/image-rendering-system.js +1 -1
  50. package/dist/configurator/application-runtime/extensions/systems/index.d.ts +1 -1
  51. package/dist/configurator/common/configurator-interface.d.ts +112 -4
  52. package/dist/configurator/common/configurator-interface.js +1 -1
  53. package/dist/configurator/configuration-not-found-page/create-configuration-not-found-page.d.ts +9 -0
  54. package/dist/configurator/configuration-not-found-page/create-configuration-not-found-page.js +1 -0
  55. package/dist/configurator/configuration-not-found-page/index.d.ts +1 -0
  56. package/dist/configurator/configuration-not-found-page/index.js +1 -1
  57. package/dist/configurator/configurator-context/ConfiguratorResponsiveProvider.d.ts +12 -0
  58. package/dist/configurator/configurator-context/ConfiguratorResponsiveProvider.js +1 -0
  59. package/dist/configurator/configurator-context/PreviewContextProvider.js +1 -1
  60. package/dist/configurator/configurator-context/ViewportStateSync.d.ts +2 -2
  61. package/dist/configurator/configurator-context/ViewportStateSync.js +1 -1
  62. package/dist/configurator/configurator-context/configurator-hooks/layout-hooks.d.ts +10 -0
  63. package/dist/configurator/configurator-context/configurator-routing/ConfiguratorRoutingProvider.js +1 -1
  64. package/dist/configurator/configurator-error-page/BuiltInConfiguratorErrorPage.d.ts +6 -0
  65. package/dist/configurator/configurator-error-page/BuiltInConfiguratorErrorPage.js +1 -0
  66. package/dist/configurator/configurator-error-page/ConfiguratorErrorPageElement.d.ts +12 -0
  67. package/dist/configurator/configurator-error-page/ConfiguratorErrorPageElement.js +1 -0
  68. package/dist/configurator/configurator-error-page/create-configurator-error-page.d.ts +9 -0
  69. package/dist/configurator/configurator-error-page/create-configurator-error-page.js +1 -0
  70. package/dist/configurator/configurator-error-page/index.d.ts +3 -0
  71. package/dist/configurator/configurator-error-page/index.js +1 -0
  72. package/dist/configurator/index.d.ts +3 -0
  73. package/dist/configurator/index.js +1 -1
  74. package/dist/configurator/pages/ConfiguratorErrorPage.d.ts +0 -1
  75. package/dist/configurator/pages/ConfiguratorErrorPage.js +1 -1
  76. package/dist/configurator/pages/LoadedConfiguratorDetailPage.js +1 -1
  77. package/dist/configurator/pages/PresetCreationErrorPage.d.ts +1 -1
  78. package/dist/configurator/pages/PresetCreationErrorPage.js +1 -1
  79. package/dist/configurator/pages/default-configurator-elements.d.ts +4 -2
  80. package/dist/configurator/pages/default-configurator-elements.js +1 -1
  81. package/dist/configurator/pages/default-elements/index.d.ts +1 -0
  82. package/dist/configurator/pages/default-elements/index.js +1 -1
  83. package/dist/configurator/pages/default-elements/scene-controls/BuiltInAddEntityFab.d.ts +3 -0
  84. package/dist/configurator/pages/default-elements/scene-controls/BuiltInAddEntityFab.js +1 -0
  85. package/dist/configurator/pages/default-elements/scene-controls/BuiltInDeleteEntityFab.d.ts +3 -0
  86. package/dist/configurator/pages/default-elements/scene-controls/BuiltInDeleteEntityFab.js +1 -0
  87. package/dist/configurator/pages/default-elements/scene-controls/BuiltInNavigationHotspot.d.ts +3 -0
  88. package/dist/configurator/pages/default-elements/scene-controls/BuiltInNavigationHotspot.js +1 -0
  89. package/dist/configurator/pages/default-elements/scene-controls/BuiltInSelectionHotspot.d.ts +3 -0
  90. package/dist/configurator/pages/default-elements/scene-controls/BuiltInSelectionHotspot.js +1 -0
  91. package/dist/configurator/pages/default-elements/scene-controls/BuiltInToolMenuFab.d.ts +3 -0
  92. package/dist/configurator/pages/default-elements/scene-controls/BuiltInToolMenuFab.js +1 -0
  93. package/dist/configurator/pages/default-elements/scene-controls/index.d.ts +6 -0
  94. package/dist/configurator/pages/default-elements/scene-controls/index.js +1 -0
  95. package/dist/configurator/pages/default-elements/scene-controls/scene-control-elements.d.ts +6 -0
  96. package/dist/configurator/pages/default-elements/scene-controls/scene-control-elements.js +1 -0
  97. package/dist/configurator/pages/error-boundaries/GeneralErrorBoundary.js +1 -1
  98. package/dist/configurator/scene/index.d.ts +1 -0
  99. package/dist/configurator/scene/index.js +1 -1
  100. package/dist/configurator/scene/scene-controls/ToolFab.d.ts +4 -0
  101. package/dist/configurator/scene/scene-controls/ToolFab.js +1 -1
  102. package/dist/configurator/scene/scene-controls/use-scene-control-tooltip.d.ts +2 -1
  103. package/dist/configurator/scene/scene-entity/scene-controls/SceneEntityHtmlHotspots.js +1 -1
  104. package/dist/configurator/toolbar-actions/index.d.ts +3 -0
  105. package/dist/configurator/toolbar-actions/index.js +1 -0
  106. package/dist/configurator/toolbar-actions/use-assistant-panel.d.ts +18 -0
  107. package/dist/configurator/toolbar-actions/use-assistant-panel.js +1 -0
  108. package/dist/configurator/toolbar-actions/use-measurements.d.ts +35 -0
  109. package/dist/configurator/toolbar-actions/use-measurements.js +1 -0
  110. package/dist/configurator/toolbar-actions/use-toolbar-actions.d.ts +100 -0
  111. package/dist/configurator/toolbar-actions/use-toolbar-actions.js +1 -0
  112. package/dist/configurator/toolbar-actions/use-toolbar-help.d.ts +7 -0
  113. package/dist/configurator/toolbar-actions/use-toolbar-help.js +1 -0
  114. package/dist/configurator/ui/assistant/AssistantChips.d.ts +3 -2
  115. package/dist/configurator/ui/assistant/AssistantChips.js +1 -1
  116. package/dist/configurator/ui/assistant/AssistantMarkdown.d.ts +1 -1
  117. package/dist/configurator/ui/assistant/AssistantMarkdown.js +1 -1
  118. package/dist/configurator/ui/assistant/alert/AssistantAlert.d.ts +8 -0
  119. package/dist/configurator/ui/assistant/alert/AssistantAlert.js +1 -0
  120. package/dist/configurator/ui/assistant/alert/index.d.ts +2 -0
  121. package/dist/configurator/ui/assistant/alert/index.js +1 -0
  122. package/dist/configurator/ui/assistant/alert/remark-alerts.d.ts +10 -0
  123. package/dist/configurator/ui/assistant/alert/remark-alerts.js +1 -0
  124. package/dist/configurator/ui/assistant/form/AssistantForm.js +1 -1
  125. package/dist/configurator/ui/assistant/form/compose-answer.d.ts +1 -1
  126. package/dist/configurator/ui/assistant/form/compose-answer.js +1 -1
  127. package/dist/configurator/ui/assistant/form/form-model.d.ts +3 -4
  128. package/dist/configurator/ui/assistant/form/form-state.d.ts +1 -1
  129. package/dist/configurator/ui/assistant/form/index.d.ts +2 -0
  130. package/dist/configurator/ui/assistant/form/index.js +1 -1
  131. package/dist/configurator/ui/assistant/form/parse-form-block.d.ts +3 -2
  132. package/dist/configurator/ui/assistant/form/parse-form-block.js +1 -1
  133. package/dist/configurator/ui/assistant/form/read-form-attributes.d.ts +1 -1
  134. package/dist/configurator/ui/assistant/form/read-form-attributes.js +1 -1
  135. package/dist/configurator/ui/assistant/form/registry/built-in-form-elements.d.ts +3 -0
  136. package/dist/configurator/ui/assistant/form/registry/built-in-form-elements.js +1 -0
  137. package/dist/configurator/ui/assistant/form/registry/create-assistant-form-element.d.ts +31 -0
  138. package/dist/configurator/ui/assistant/form/registry/create-assistant-form-element.js +1 -0
  139. package/dist/configurator/ui/assistant/form/{form-element-definition.d.ts → registry/form-element-definition.d.ts} +3 -1
  140. package/dist/configurator/ui/assistant/form/registry/form-element-definition.js +1 -0
  141. package/dist/configurator/ui/assistant/form/{form-registry.d.ts → registry/form-registry.d.ts} +2 -2
  142. package/dist/configurator/ui/assistant/form/registry/form-registry.js +1 -0
  143. package/dist/configurator/ui/assistant/form/registry/index.d.ts +6 -0
  144. package/dist/configurator/ui/assistant/form/registry/index.js +1 -0
  145. package/dist/configurator/ui/assistant/form/registry/use-form-registry.d.ts +8 -0
  146. package/dist/configurator/ui/assistant/form/registry/use-form-registry.js +1 -0
  147. package/dist/configurator/ui/assistant/form-elements/FormCard.d.ts +9 -0
  148. package/dist/configurator/ui/assistant/form-elements/FormCard.js +1 -0
  149. package/dist/configurator/ui/assistant/form-elements/FormConfirm.d.ts +9 -0
  150. package/dist/configurator/ui/assistant/form-elements/FormConfirm.js +1 -0
  151. package/dist/configurator/ui/assistant/form-elements/FormGroup.d.ts +4 -1
  152. package/dist/configurator/ui/assistant/form-elements/FormNumber.d.ts +9 -0
  153. package/dist/configurator/ui/assistant/form-elements/FormNumber.js +1 -0
  154. package/dist/configurator/ui/assistant/form-elements/FormOptions.d.ts +4 -1
  155. package/dist/configurator/ui/assistant/form-elements/FormReply.d.ts +4 -1
  156. package/dist/configurator/ui/assistant/form-elements/FormReply.js +1 -1
  157. package/dist/configurator/ui/assistant/form-elements/FormSwatch.d.ts +10 -0
  158. package/dist/configurator/ui/assistant/form-elements/FormSwatch.js +1 -0
  159. package/dist/configurator/ui/assistant/form-elements/FormText.d.ts +4 -1
  160. package/dist/configurator/ui/assistant/form-elements/FormText.js +1 -1
  161. package/dist/configurator/ui/assistant/form-elements/clamp-form-number.d.ts +10 -0
  162. package/dist/configurator/ui/assistant/form-elements/clamp-form-number.js +1 -0
  163. package/dist/configurator/ui/assistant/form-elements/form-element-props.d.ts +20 -16
  164. package/dist/configurator/ui/assistant/form-elements/index.d.ts +4 -0
  165. package/dist/configurator/ui/assistant/form-elements/index.js +1 -1
  166. package/dist/configurator/ui/assistant/index.d.ts +3 -0
  167. package/dist/configurator/ui/assistant/index.js +1 -1
  168. package/dist/configurator/ui/assistant/resource-image/index.d.ts +1 -1
  169. package/dist/configurator/ui/assistant/resource-image/index.js +1 -1
  170. package/dist/configurator/ui/assistant/resource-image/resource-path.d.ts +0 -9
  171. package/dist/configurator/ui/assistant/resource-image/resource-path.js +1 -1
  172. package/dist/configurator/ui/assistant/screenshots/ScreenshotThumbnails.d.ts +9 -0
  173. package/dist/configurator/ui/assistant/screenshots/ScreenshotThumbnails.js +1 -0
  174. package/dist/configurator/ui/assistant/screenshots/index.d.ts +2 -0
  175. package/dist/configurator/ui/assistant/screenshots/index.js +1 -0
  176. package/dist/configurator/ui/assistant/screenshots/tool-screenshots.d.ts +14 -0
  177. package/dist/configurator/ui/assistant/screenshots/tool-screenshots.js +1 -0
  178. package/dist/configurator/ui/assistant/streamed-markdown.d.ts +2 -2
  179. package/dist/configurator/ui/assistant/streamed-markdown.js +2 -2
  180. package/dist/configurator/ui/assistant/tool-chip.js +1 -1
  181. package/dist/configurator/ui/configurator-layout/slots/canvas/LayoutCanvas.js +1 -1
  182. package/dist/configurator/ui/configurator-layout/slots/canvas/SharedCanvas.js +1 -1
  183. package/dist/configurator/ui/configurator-layout/universal/ExportingOverlay.d.ts +5 -0
  184. package/dist/configurator/ui/configurator-layout/universal/ExportingOverlay.js +1 -0
  185. package/dist/configurator/ui/configurator-layout/universal/Layout.js +1 -1
  186. package/dist/configurator/ui/configurator-layout/universal/use-layout-scene-safe-area.d.ts +1 -1
  187. package/dist/configurator/ui/configurator-layout/universal/use-layout-scene-safe-area.js +1 -1
  188. package/dist/configurator/ui/configurator-layout/universal/use-scene-safe-area.d.ts +1 -1
  189. package/dist/configurator/ui/index.d.ts +1 -0
  190. package/dist/configurator/ui/index.js +1 -1
  191. package/dist/configurator/ui/legacy/layout/common/ReactiveInterfaceLayout.js +1 -1
  192. package/dist/configurator/ui/phoenix-layout-elements/AppLoader.js +2 -6
  193. package/dist/configurator/ui/phoenix-layout-elements/AssistantToolbarButton.js +1 -1
  194. package/dist/configurator/ui/phoenix-layout-elements/LanguageMenuAction.js +1 -1
  195. package/dist/configurator/ui/phoenix-layout-elements/LanguageToolbarButton.js +1 -1
  196. package/dist/configurator/ui/phoenix-layout-elements/MeasurementsMenuAction.js +1 -1
  197. package/dist/configurator/ui/phoenix-layout-elements/MeasurementsToolbarButton.js +1 -1
  198. package/dist/configurator/ui/phoenix-layout-elements/ShareToolbarButton.js +1 -1
  199. package/dist/configurator/ui/phoenix-layout-elements/header/common/step-navigation/DesktopNavigationSteps.d.ts +1 -1
  200. package/dist/configurator/ui/phoenix-layout-elements/header/common/step-navigation/DesktopNavigationSteps.js +1 -1
  201. package/dist/configurator/ui/phoenix-layout-elements/header/common/step-navigation/StepsNavigation.d.ts +2 -8
  202. package/dist/configurator/ui/phoenix-layout-elements/header/common/step-navigation/StepsNavigation.js +1 -1
  203. package/dist/configurator/ui/phoenix-layout-elements/measurements/DimensionUnitSelector.js +1 -1
  204. package/dist/configurator/ui/phoenix-layout-elements/measurements/MeasurementsIndicatorsSwitch.js +1 -1
  205. package/dist/configurator/ui/phoenix-layout-elements/share/ShareModal.js +1 -1
  206. package/dist/configurator/ui/phoenix-layout-elements/share/use-share.d.ts +7 -8
  207. package/dist/configurator/ui/phoenix-layout-elements/share/use-share.js +1 -1
  208. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/common/FinalizeActions.js +1 -1
  209. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/common/NextStepButton.js +1 -1
  210. package/dist/configurator/ui/phoenix-layout-elements/sidebar-footer/common/PreviousStepButton.js +1 -1
  211. package/dist/configurator/ui/save-message-snackbars/SaveMessageSnackbars.js +1 -1
  212. package/dist/docs/complex-use-cases/focus-mode.mdx +2 -0
  213. package/dist/docs/fabs/basic.mdx +4 -0
  214. package/dist/docs/index.json +62 -1
  215. package/dist/docs/integrations/webcomponent-api/basics.mdx +2 -0
  216. package/dist/docs/layouts/custom-layout.mdx +321 -159
  217. package/dist/docs/layouts/gallery/ardent-compressor.mdx +3516 -0
  218. package/dist/docs/layouts/gallery/fenwick-window.mdx +2803 -0
  219. package/dist/docs/layouts/gallery/ferrule-bar-station.mdx +6567 -0
  220. package/dist/docs/layouts/gallery/kestrel-kettle.mdx +1858 -0
  221. package/dist/docs/layouts/gallery/sunfold-solar.mdx +2683 -0
  222. package/dist/docs/other-features/client-side-rendering/declarative.mdx +1 -1
  223. package/dist/docs/other-features/error-5xx.mdx +1 -1
  224. package/dist/docs/other-features/navigation-hotspot.mdx +2 -0
  225. package/dist/docs/other-features/not-found-404.mdx +1 -1
  226. package/dist/docs/phoenix/configurator-interface.mdx +200 -66
  227. package/dist/docs/phoenix/finalization.mdx +1 -1
  228. package/dist/docs/phoenix/layout-slots.mdx +5 -5
  229. package/dist/docs/phoenix/sdk-builder-workflow.mdx +1 -1
  230. package/dist/docs/phoenix/sessions-and-access.mdx +2 -0
  231. package/dist/docs/phoenix/testing.mdx +2 -2
  232. package/dist/docs/selection-and-highlight/hotspots.mdx +2 -0
  233. package/dist/domain/application/assistant/assistant-manifest.d.ts +16 -1
  234. package/dist/domain/application/assistant/assistant-resolved-manifest.d.ts +8 -1
  235. package/dist/domain/application/assistant/build-assistant-manifest.js +1 -1
  236. package/dist/domain/application/assistant/form/assistant-form-element-name.d.ts +11 -0
  237. package/dist/domain/application/assistant/form/assistant-form-element-name.js +8 -0
  238. package/dist/domain/application/assistant/form/assistant-form-elements.d.ts +174 -0
  239. package/dist/domain/application/assistant/form/assistant-form-elements.js +1 -0
  240. package/dist/domain/application/assistant/form/assistant-resource-path.d.ts +10 -0
  241. package/dist/domain/application/assistant/form/assistant-resource-path.js +1 -0
  242. package/dist/domain/application/assistant/form/index.d.ts +4 -0
  243. package/dist/domain/application/assistant/form/index.js +1 -0
  244. package/dist/domain/application/assistant/generate-assistant-prompt.d.ts +3 -0
  245. package/dist/domain/application/assistant/generate-assistant-prompt.js +1 -1
  246. package/dist/domain/application/assistant/index.d.ts +2 -3
  247. package/dist/domain/application/assistant/index.js +1 -1
  248. package/dist/domain/application/assistant/session-setup/apply-assistant-setup.js +1 -1
  249. package/dist/domain/application/assistant/session-setup/assistant-setup-manifest.d.ts +2 -0
  250. package/dist/domain/application/assistant/session-setup/assistant-setup-manifest.js +1 -1
  251. package/dist/domain/application/web-component-property.d.ts +3 -1
  252. package/dist/domain/application/web-component-property.js +1 -1
  253. package/dist/domain/available-system-components.d.ts +1 -1
  254. package/dist/domain/available-system-components.js +1 -1
  255. package/dist/domain/domain-context/store-system/store-system.d.ts +5 -0
  256. package/dist/domain/domain-context/store-system/store-system.js +1 -1
  257. package/dist/domain/domain-runtime/domain-context/selectors.d.ts +1 -0
  258. package/dist/domain/domain-runtime/domain-context/selectors.js +1 -1
  259. package/dist/domain/domain-runtime/domain-runtime.d.ts +8 -0
  260. package/dist/domain/domain-runtime/environment/types.d.ts +1 -1
  261. package/dist/domain/domain-runtime/spec/index.d.ts +1 -1
  262. package/dist/domain/domain-runtime/spec/index.js +1 -1
  263. package/dist/domain/domain-runtime/spec/initialize.js +1 -1
  264. package/dist/domain/domain-runtime/spec/module-checks/element-registration.d.ts +15 -1
  265. package/dist/domain/domain-runtime/spec/module-checks/element-registration.js +1 -1
  266. package/dist/domain/domain-runtime/spec/module-checks/find-assistant-form-element-errors.d.ts +12 -0
  267. package/dist/domain/domain-runtime/spec/module-checks/find-assistant-form-element-errors.js +1 -0
  268. package/dist/domain/domain-runtime/spec/module-checks/index.d.ts +2 -1
  269. package/dist/domain/domain-runtime/spec/module-checks/index.js +1 -1
  270. package/dist/domain/domain-runtime/spec/selectors.d.ts +3 -1
  271. package/dist/domain/domain-runtime/spec/selectors.js +1 -1
  272. package/dist/domain/extensions/export-images/agent-screenshot.d.ts +24 -0
  273. package/dist/domain/extensions/export-images/agent-screenshot.js +1 -0
  274. package/dist/domain/extensions/{client-side-image.d.ts → export-images/client-side-image.d.ts} +2 -2
  275. package/dist/domain/extensions/export-images/client-side-image.js +1 -0
  276. package/dist/domain/extensions/export-images/index.d.ts +3 -0
  277. package/dist/domain/extensions/export-images/index.js +1 -0
  278. package/dist/domain/extensions/{save-template-thumbnail.d.ts → export-images/save-template-thumbnail.d.ts} +2 -2
  279. package/dist/domain/extensions/export-images/save-template-thumbnail.js +1 -0
  280. package/dist/domain/extensions/index.d.ts +1 -2
  281. package/dist/domain/extensions/index.js +1 -1
  282. package/dist/domain/mocks/create-mock-domain-runtime.d.ts +4 -0
  283. package/dist/editor/domain-editors/DomainSpecContext.js +1 -1
  284. package/dist/editor/domain-editors/apply-spec-update.d.ts +8 -1
  285. package/dist/editor/domain-editors/apply-spec-update.js +1 -1
  286. package/dist/editor/domain-editors/use-implementation-files.js +1 -1
  287. package/dist/editor/screenshot/ScreenshotHandler.js +1 -1
  288. package/dist/i18n/locales/cs/messages.js +1 -1
  289. package/dist/i18n/locales/da/messages.js +1 -1
  290. package/dist/i18n/locales/de/messages.js +1 -1
  291. package/dist/i18n/locales/de-AT/messages.js +1 -1
  292. package/dist/i18n/locales/en/messages.js +1 -1
  293. package/dist/i18n/locales/en-AU/messages.js +1 -1
  294. package/dist/i18n/locales/en-GB/messages.js +1 -1
  295. package/dist/i18n/locales/es/messages.js +1 -1
  296. package/dist/i18n/locales/fr/messages.js +1 -1
  297. package/dist/i18n/locales/hu/messages.js +1 -1
  298. package/dist/i18n/locales/it/messages.js +1 -1
  299. package/dist/i18n/locales/nl/messages.js +1 -1
  300. package/dist/i18n/locales/pl/messages.js +1 -1
  301. package/dist/i18n/locales/pt/messages.js +1 -1
  302. package/dist/i18n/locales/ro/messages.js +1 -1
  303. package/dist/i18n/locales/sk/messages.js +1 -1
  304. package/dist/i18n/locales/tr/messages.js +1 -1
  305. package/dist/legacy/domain-cli/utils/cache.d.ts +1 -1
  306. package/dist/legacy/domain-cli/utils/cache.js +1 -1
  307. package/dist/legacy/domain-spec/__generated/domain-schema.d.ts +16 -0
  308. package/dist/legacy/domain-spec/spec/domain-spec.js +1 -1
  309. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/claude-md.d.ts +1 -1
  310. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/cursor-rules.d.ts +1 -1
  311. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/shared-sdk-content.d.ts +1 -1
  312. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/shared-sdk-content.js +11 -5
  313. package/dist/react-sdk/application-runtime/common-services/analytics/frontend-analytics.d.ts +4 -0
  314. package/dist/react-sdk/application-runtime/hooks/index.d.ts +1 -0
  315. package/dist/react-sdk/application-runtime/hooks/index.js +1 -1
  316. package/dist/react-sdk/application-runtime/hooks/responsive/index.d.ts +3 -0
  317. package/dist/react-sdk/application-runtime/hooks/responsive/index.js +1 -0
  318. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-actions.d.ts +9 -0
  319. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-actions.js +1 -0
  320. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-application.d.ts +26 -0
  321. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-application.js +1 -0
  322. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-state.d.ts +10 -0
  323. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-state.js +1 -0
  324. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-store.d.ts +24 -0
  325. package/dist/react-sdk/application-runtime/hooks/responsive/use-responsive-store.js +1 -0
  326. package/dist/react-sdk/application-runtime/hooks/use-access-service.d.ts +5 -0
  327. package/dist/react-sdk/application-runtime/hooks/use-access-service.js +1 -1
  328. package/dist/react-sdk/application-runtime/hooks/use-phoenix-element-slots.d.ts +2 -1
  329. package/dist/react-sdk/application-runtime/index.d.ts +1 -0
  330. package/dist/react-sdk/application-runtime/integration/initialize.d.ts +7 -6
  331. package/dist/react-sdk/application-runtime/integration/initialize.js +1 -1
  332. package/dist/react-sdk/application-runtime/integration/selectors.d.ts +11 -2
  333. package/dist/react-sdk/application-runtime/integration/selectors.js +1 -1
  334. package/dist/react-sdk/application-runtime/integration/types.d.ts +5 -2
  335. package/dist/react-sdk/application-runtime/mocks/create-mock-application-runtime.js +1 -1
  336. package/dist/react-sdk/application-runtime/responsive/actions.d.ts +47 -0
  337. package/dist/react-sdk/application-runtime/responsive/actions.js +1 -0
  338. package/dist/react-sdk/application-runtime/responsive/index.d.ts +4 -0
  339. package/dist/react-sdk/application-runtime/responsive/index.js +1 -0
  340. package/dist/react-sdk/application-runtime/responsive/initialize.d.ts +3 -0
  341. package/dist/react-sdk/application-runtime/responsive/initialize.js +1 -0
  342. package/dist/react-sdk/application-runtime/responsive/selectors.d.ts +20 -0
  343. package/dist/react-sdk/application-runtime/responsive/selectors.js +1 -0
  344. package/dist/react-sdk/application-runtime/responsive/types.d.ts +104 -0
  345. package/dist/react-sdk/application-runtime/routing/routing-service.d.ts +34 -2
  346. package/dist/react-sdk/application-runtime/routing/routing-service.js +1 -1
  347. package/dist/react-sdk/application-runtime/runtime/create-application-runtime.d.ts +95 -2
  348. package/dist/react-sdk/application-runtime/runtime/create-application-runtime.js +1 -1
  349. package/dist/react-sdk/domain-context/common-hooks/index.d.ts +9 -0
  350. package/dist/react-sdk/domain-context/common-hooks/index.js +1 -0
  351. package/dist/react-sdk/domain-context/common-hooks/use-configuration-save-state.d.ts +23 -0
  352. package/dist/react-sdk/domain-context/common-hooks/use-configuration-save-state.js +1 -0
  353. package/dist/react-sdk/domain-context/common-hooks/use-domain-context.d.ts +1 -0
  354. package/dist/react-sdk/domain-context/component-hooks/index.d.ts +1 -0
  355. package/dist/react-sdk/domain-context/component-hooks/index.js +1 -0
  356. package/dist/react-sdk/domain-context/component-hooks/use-component.js +1 -1
  357. package/dist/react-sdk/domain-context/entity-hooks/use-domain-entity-state.js +1 -1
  358. package/dist/react-sdk/domain-context/entity-hooks/use-entity-price.js +1 -1
  359. package/dist/react-sdk/domain-context/entity-hooks/use-root-entity-id.js +1 -1
  360. package/dist/react-sdk/domain-context/entity-hooks/use-root-entity-state.js +1 -1
  361. package/dist/react-sdk/domain-context/index.d.ts +5 -0
  362. package/dist/react-sdk/domain-context/index.js +1 -1
  363. package/dist/react-sdk/domain-context/system-hooks/composition-hooks.js +1 -1
  364. package/dist/react-sdk/domain-context/system-hooks/dimension-hooks.js +1 -1
  365. package/dist/react-sdk/domain-context/system-hooks/generate-share-link-hooks.d.ts +8 -0
  366. package/dist/react-sdk/domain-context/system-hooks/generate-share-link-hooks.js +1 -0
  367. package/dist/react-sdk/domain-context/system-hooks/hover-hooks.js +1 -1
  368. package/dist/react-sdk/domain-context/system-hooks/locale-switch-hooks.d.ts +24 -0
  369. package/dist/react-sdk/domain-context/system-hooks/locale-switch-hooks.js +1 -0
  370. package/dist/react-sdk/domain-context/system-hooks/navigation-hooks.js +1 -1
  371. package/dist/react-sdk/domain-context/system-hooks/selection-hooks.js +1 -1
  372. package/dist/react-sdk/domain-context/system-hooks/share-links-hooks.d.ts +32 -0
  373. package/dist/react-sdk/domain-context/system-hooks/share-links-hooks.js +1 -0
  374. package/dist/react-sdk/domain-context/system-hooks/step-navigation-hooks.d.ts +57 -0
  375. package/dist/react-sdk/domain-context/system-hooks/step-navigation-hooks.js +1 -0
  376. package/dist/react-sdk/domain-context/system-hooks/tab-navigation-hooks.js +1 -1
  377. package/dist/react-sdk/domain-context/system-hooks/undo-redo-hooks.js +1 -1
  378. package/dist/react-sdk/elements/configurator-error-page-props.d.ts +20 -0
  379. package/dist/react-sdk/elements/configurator-error-page-props.js +1 -0
  380. package/dist/react-sdk/elements/index.d.ts +1 -0
  381. package/dist/react-sdk/handlers/FinalizeActionRunner.d.ts +13 -0
  382. package/dist/react-sdk/handlers/FinalizeActionRunner.js +1 -0
  383. package/dist/react-sdk/handlers/FinalizeActionsHost.d.ts +10 -0
  384. package/dist/react-sdk/handlers/FinalizeActionsHost.js +1 -0
  385. package/dist/react-sdk/handlers/FinalizeActionsProvider.d.ts +11 -0
  386. package/dist/react-sdk/handlers/FinalizeActionsProvider.js +1 -0
  387. package/dist/react-sdk/handlers/finalize-actions-context.d.ts +6 -0
  388. package/dist/react-sdk/handlers/finalize-actions-context.js +1 -0
  389. package/dist/react-sdk/handlers/finalize-actions-store.d.ts +23 -0
  390. package/dist/react-sdk/handlers/finalize-actions-store.js +1 -0
  391. package/dist/react-sdk/handlers/index.d.ts +5 -0
  392. package/dist/react-sdk/handlers/index.js +1 -1
  393. package/dist/react-sdk/handlers/use-finalize-action.d.ts +3 -2
  394. package/dist/react-sdk/handlers/use-finalize-action.js +1 -1
  395. package/dist/react-sdk/handlers/use-finalize-actions.d.ts +53 -0
  396. package/dist/react-sdk/handlers/use-finalize-actions.js +1 -0
  397. package/dist/react-sdk/index.d.ts +1 -0
  398. package/dist/react-sdk/index.js +1 -1
  399. package/dist/react-sdk/loading-state/loading-state-manager.d.ts +5 -0
  400. package/dist/react-sdk/loading-state/loading-state-manager.js +1 -1
  401. package/dist/react-sdk/scene-control-elements/AddEntityFabElement.d.ts +36 -0
  402. package/dist/react-sdk/scene-control-elements/AddEntityFabElement.js +1 -0
  403. package/dist/react-sdk/scene-control-elements/DeleteEntityFabElement.d.ts +44 -0
  404. package/dist/react-sdk/scene-control-elements/DeleteEntityFabElement.js +1 -0
  405. package/dist/react-sdk/scene-control-elements/NavigationHotspotElement.d.ts +38 -0
  406. package/dist/react-sdk/scene-control-elements/NavigationHotspotElement.js +1 -0
  407. package/dist/react-sdk/scene-control-elements/SelectionHotspotElement.d.ts +30 -0
  408. package/dist/react-sdk/scene-control-elements/SelectionHotspotElement.js +1 -0
  409. package/dist/react-sdk/scene-control-elements/ToolMenuFabElement.d.ts +30 -0
  410. package/dist/react-sdk/scene-control-elements/ToolMenuFabElement.js +1 -0
  411. package/dist/react-sdk/scene-control-elements/create-add-entity-fab.d.ts +9 -0
  412. package/dist/react-sdk/scene-control-elements/create-add-entity-fab.js +1 -0
  413. package/dist/react-sdk/scene-control-elements/create-delete-entity-fab.d.ts +9 -0
  414. package/dist/react-sdk/scene-control-elements/create-delete-entity-fab.js +1 -0
  415. package/dist/react-sdk/scene-control-elements/create-navigation-hotspot.d.ts +10 -0
  416. package/dist/react-sdk/scene-control-elements/create-navigation-hotspot.js +1 -0
  417. package/dist/react-sdk/scene-control-elements/create-selection-hotspot.d.ts +9 -0
  418. package/dist/react-sdk/scene-control-elements/create-selection-hotspot.js +1 -0
  419. package/dist/react-sdk/scene-control-elements/create-tool-menu-fab.d.ts +9 -0
  420. package/dist/react-sdk/scene-control-elements/create-tool-menu-fab.js +1 -0
  421. package/dist/react-sdk/scene-control-elements/index.d.ts +11 -0
  422. package/dist/react-sdk/scene-control-elements/index.js +1 -0
  423. package/dist/react-sdk/scene-control-elements/scene-control-tooltip-visibility.d.ts +5 -0
  424. package/dist/react-sdk/scene-control-elements/scene-control-tooltip-visibility.js +1 -0
  425. package/dist/react-sdk/web-component/create-web-component.js +1 -1
  426. package/dist/react-sdk/web-component/god-mode/god-mode-registry.d.ts +30 -0
  427. package/dist/react-sdk/web-component/god-mode/god-mode-registry.js +1 -0
  428. package/dist/react-sdk/web-component/god-mode/index.d.ts +1 -0
  429. package/dist/react-sdk/web-component/god-mode/index.js +1 -0
  430. package/dist/ui-sdk/icons/__generated/Lightbulb.d.ts +3 -0
  431. package/dist/ui-sdk/icons/__generated/Lightbulb.js +1 -0
  432. package/dist/ui-sdk/icons/__generated/XCircle.d.ts +3 -0
  433. package/dist/ui-sdk/icons/__generated/XCircle.js +1 -0
  434. package/dist/ui-sdk/icons/__generated/index.d.ts +4 -0
  435. package/dist/ui-sdk/icons/__generated/index.js +1 -1
  436. package/dist/ui-sdk/icons/icons-registry.js +1 -1
  437. package/dist/ui-sdk/responsive-application/ResponsiveApplicationProvider.d.ts +9 -0
  438. package/dist/ui-sdk/responsive-application/ResponsiveApplicationProvider.js +1 -1
  439. package/dist/ui-sdk/responsive-application/index.d.ts +1 -0
  440. package/dist/ui-sdk/responsive-application/responsive-state-store.d.ts +59 -0
  441. package/dist/ui-sdk/responsive-application/responsive-state-store.js +1 -0
  442. package/dist/ui-sdk/responsive-application/use-store-responsive-info.d.ts +7 -0
  443. package/dist/ui-sdk/responsive-application/use-store-responsive-info.js +1 -0
  444. package/dist/ui-sdk/theme/types.d.ts +5 -1
  445. package/package.json +13 -3
  446. package/schema/domain-spec.json +140 -0
  447. package/dist/configurator/ui/assistant/form/built-in-form-registry.d.ts +0 -10
  448. package/dist/configurator/ui/assistant/form/built-in-form-registry.js +0 -1
  449. package/dist/configurator/ui/assistant/form/form-registry.js +0 -8
  450. package/dist/configurator/ui/phoenix-layout-elements/language/use-locale-options.d.ts +0 -4
  451. package/dist/configurator/ui/phoenix-layout-elements/language/use-locale-options.js +0 -1
  452. package/dist/configurator/ui/phoenix-layout-elements/measurements/use-measurements-visibility.d.ts +0 -4
  453. package/dist/configurator/ui/phoenix-layout-elements/measurements/use-measurements-visibility.js +0 -1
  454. package/dist/domain/application/assistant/assistant-form-elements.d.ts +0 -28
  455. package/dist/domain/application/assistant/assistant-form-elements.js +0 -1
  456. package/dist/domain/extensions/client-side-image.js +0 -1
  457. package/dist/domain/extensions/save-template-thumbnail.js +0 -1
  458. package/dist/react-sdk/application-runtime/runtime/god-mode.d.ts +0 -19
  459. package/dist/react-sdk/application-runtime/runtime/god-mode.js +0 -1
  460. /package/dist/{configurator/ui/assistant/form/form-element-definition.js → react-sdk/application-runtime/responsive/types.js} +0 -0
@@ -1 +1 @@
1
- import{jsx as t}from"react/jsx-runtime";import{Badge as r}from"@mui/material";import{memo as o,useCallback as a}from"react";import{assistantToolbarButtonSchema as i,createPhoenixLayoutElement as e}from"#package/domain";import{useEagerObservableValue as s,useLocalizable as n,useSpecAssistant as m}from"#package/react-sdk";import{DesktopToolbar as l,PhxIcon as p,useResponsive as c}from"#package/ui-sdk";import{useConfigurator as d}from"../../application-runtime/index.js";let u={id:"sdk.assistant.toolbarButton.label",message:"Assistant"};export const AssistantToolbarButton=e({schema:i,component:o(o=>{let{icon:i,showTitle:e=!0}=o,{assistantSystem:k}=d(),f=m(),{open:A,hasUnreadReply:b}=s(k.panel$),g=n(u),{isPhone:x,isTablet:h}=c(),B=a(()=>{k.setOpen(!A)},[k,A]);return f?t(l.Button,{title:g,onClick:B,showTitle:e&&!x&&!h,"aria-pressed":A,sx:{'&[aria-pressed="true"]':{backgroundColor:"action.selected"}},children:t(r,{color:"primary",variant:"dot",overlap:"circular",invisible:!b,children:t(p,{name:i??(A?"CustomAiAssistantBold":"CustomAiAssistant")})})}):null})});
1
+ import{jsx as t}from"react/jsx-runtime";import{Badge as o}from"@mui/material";import{memo as r,useCallback as a}from"react";import{assistantToolbarButtonSchema as s,createPhoenixLayoutElement as i}from"#package/domain";import{useLocalizable as e}from"#package/react-sdk";import{DesktopToolbar as m,PhxIcon as n,useResponsive as l}from"#package/ui-sdk";import{useAssistantPanel as c}from"../../toolbar-actions/index.js";let p={id:"sdk.assistant.toolbarButton.label",message:"Assistant"};export const AssistantToolbarButton=i({schema:s,component:r(r=>{let{icon:s,showTitle:i=!0}=r,{available:d,open:u,hasUnreadReply:k,setOpen:f}=c(),b=e(p),{isPhone:A,isTablet:g}=l(),x=a(()=>{f(!u)},[f,u]);return d?t(m.Button,{title:b,onClick:x,showTitle:i&&!A&&!g,"aria-pressed":u,sx:{'&[aria-pressed="true"]':{backgroundColor:"action.selected"}},children:t(o,{color:"primary",variant:"dot",overlap:"circular",invisible:!k,children:t(n,{name:s??(u?"CustomAiAssistantBold":"CustomAiAssistant")})})}):null})});
@@ -1 +1 @@
1
- import{jsx as e,jsxs as a}from"react/jsx-runtime";import{useLingui as o,Trans as n}from"@lingui/react";import{Button as l,DialogActions as r,DialogContent as i,DialogTitle as t,ListItemText as m,MenuItem as s,MenuList as c,menuItemClasses as g,styled as u}from"@mui/material";import{memo as d,useCallback as p}from"react";import{createPhoenixLayoutElement as h,languageMenuActionSchema as f}from"#package/domain";import{useLinguiActivate as x}from"#package/react-sdk";import{LocaleIcon as C}from"./language/LocaleIcon.js";import{useLocaleOptions as k}from"./language/use-locale-options.js";import{useMenuRouting as j}from"./menu-actions/MenuRoutingContext.js";import{RoutingMenuAction as y}from"./menu-actions/RoutingMenuAction.js";let b=u(c)(({theme:{spacing:e}})=>({columnGap:e(2),display:"grid",gridTemplateColumns:"min-content auto",[`.${g.root}`]:{display:"grid",gridColumn:"1 / -1",gridTemplateColumns:"subgrid"}}));export const LanguageMenuAction=h({schema:f,component:d(()=>{let{i18n:c}=o(),g=k(),{close:u}=j(),d=x(),h=p(e=>{d(e),u()},[d,u]);return a(y,{label:e(n,{id:"sdk.layout.hamburgerMenu.language.label",message:"Change Language"}),icon:e(C,{children:c.locale}),children:[e(t,{children:e(n,{id:"sdk.layout.hamburgerMenu.language.dialogTitle",message:"Change Language"})}),e(i,{sx:{px:0},children:e(b,{children:g.map(o=>a(s,{onClick:()=>{h(o.locale)},children:[e(C,{sx:{color:"text.secondary"},children:o.locale}),e(m,{children:o.displayName})]},o.locale))})}),e(r,{children:e(l,{variant:"text",color:"inherit",onClick:u,children:e(n,{id:"sdk.layout.menu.language.close.label",message:"Close"})})})]})})});
1
+ import{jsx as e,jsxs as a}from"react/jsx-runtime";import{Trans as n}from"@lingui/react";import{Button as o,DialogActions as r,DialogContent as i,DialogTitle as l,ListItemText as t,MenuItem as m,MenuList as s,menuItemClasses as c,styled as g}from"@mui/material";import{memo as u,useCallback as d}from"react";import{createPhoenixLayoutElement as p,languageMenuActionSchema as h}from"#package/domain";import{useLocaleSwitch as x}from"#package/react-sdk";import{LocaleIcon as f}from"./language/LocaleIcon.js";import{useMenuRouting as C}from"./menu-actions/MenuRoutingContext.js";import{RoutingMenuAction as k}from"./menu-actions/RoutingMenuAction.js";let y=g(s)(({theme:{spacing:e}})=>({columnGap:e(2),display:"grid",gridTemplateColumns:"min-content auto",[`.${c.root}`]:{display:"grid",gridColumn:"1 / -1",gridTemplateColumns:"subgrid"}}));export const LanguageMenuAction=p({schema:h,component:u(()=>{let{locales:s,locale:c,setLocale:g}=x(),{close:u}=C(),p=d(e=>{g(e),u()},[g,u]);return a(k,{label:e(n,{id:"sdk.layout.hamburgerMenu.language.label",message:"Change Language"}),icon:e(f,{children:c}),children:[e(l,{children:e(n,{id:"sdk.layout.hamburgerMenu.language.dialogTitle",message:"Change Language"})}),e(i,{sx:{px:0},children:e(y,{children:s.map(n=>a(m,{onClick:()=>{p(n.locale)},children:[e(f,{sx:{color:"text.secondary"},children:n.locale}),e(t,{children:n.displayName})]},n.locale))})}),e(r,{children:e(o,{variant:"text",color:"inherit",onClick:u,children:e(n,{id:"sdk.layout.menu.language.close.label",message:"Close"})})})]})})});
@@ -1 +1 @@
1
- import{jsx as e,jsxs as a,Fragment as o}from"react/jsx-runtime";import{useLingui as r}from"@lingui/react";import{ListItemButton as l,ListItemText as t,List as i,listItemButtonClasses as n,styled as m}from"@mui/material";import{memo as c,useCallback as s}from"react";import{createPhoenixLayoutElement as p,languageToolbarButtonSchema as g}from"#package/domain";import{useLinguiActivate as u,useResolveLocalizable as d}from"#package/react-sdk";import{DesktopToolbar as h}from"#package/ui-sdk";import{LocaleIcon as f}from"./language/LocaleIcon.js";import{useLocaleOptions as x}from"./language/use-locale-options.js";let k=m(i)(({theme:{spacing:e}})=>({columnGap:e(2),display:"grid",gridTemplateColumns:"min-content auto",maxBlockSize:"calc(100cqb - 50px)",overflowY:"auto",[`.${n.root}`]:{display:"grid",gridColumn:"1 / -1",gridTemplateColumns:"subgrid"}})),b={id:"sdk.toolbar.language.title",message:"Switch language"},C="language-toolbar";export const LanguageToolbarButton=p({schema:g,component:c(()=>{let{i18n:i}=r(),{ref:n,handleClose:m,handleToggle:c,openedKey:p}=h.useToolbarPopper(),g=d(),j=u(),y=s(()=>{c("language-toolbar")},[c]),T=s(e=>{j(e),y()},[j,y]),z=x();return a(o,{children:[e(h.Button,{ref:n,title:g(b),size:"small","aria-expanded":p===C?"true":void 0,"aria-haspopup":"menu",onClick:y,children:e(f,{sx:{minInlineSize:24},children:i.locale})}),e(h.Popper,{placement:"top-start",anchorEl:n.current,isOpen:p===C,onClose:m,children:e(k,{children:z.map(o=>a(l,{onClick:()=>{T(o.locale)},children:[e(f,{sx:{color:"text.secondary"},children:o.locale}),e(t,{primary:o.displayName})]},o.locale))})})]})})});
1
+ import{jsx as e,jsxs as a,Fragment as o}from"react/jsx-runtime";import{ListItemButton as r,ListItemText as l,List as t,listItemButtonClasses as i,styled as n}from"@mui/material";import{memo as m,useCallback as c}from"react";import{createPhoenixLayoutElement as s,languageToolbarButtonSchema as p}from"#package/domain";import{useLocaleSwitch as d,useResolveLocalizable as g}from"#package/react-sdk";import{DesktopToolbar as u}from"#package/ui-sdk";import{LocaleIcon as h}from"./language/LocaleIcon.js";let x=n(t)(({theme:{spacing:e}})=>({columnGap:e(2),display:"grid",gridTemplateColumns:"min-content auto",maxBlockSize:"calc(100cqb - 50px)",overflowY:"auto",[`.${i.root}`]:{display:"grid",gridColumn:"1 / -1",gridTemplateColumns:"subgrid"}})),f={id:"sdk.toolbar.language.title",message:"Switch language"},k="language-toolbar";export const LanguageToolbarButton=s({schema:p,component:m(()=>{let{locales:t,locale:i,setLocale:n}=d(),{ref:m,handleClose:s,handleToggle:p,openedKey:b}=u.useToolbarPopper(),C=g(),y=c(()=>{p("language-toolbar")},[p]),T=c(e=>{n(e),y()},[n,y]);return a(o,{children:[e(u.Button,{ref:m,title:C(f),size:"small","aria-expanded":b===k?"true":void 0,"aria-haspopup":"menu",onClick:y,children:e(h,{sx:{minInlineSize:24},children:i})}),e(u.Popper,{placement:"top-start",anchorEl:m.current,isOpen:b===k,onClose:s,children:e(x,{children:t.map(o=>a(r,{onClick:()=>{T(o.locale)},children:[e(h,{sx:{color:"text.secondary"},children:o.locale}),e(l,{primary:o.displayName})]},o.locale))})})]})})});
@@ -1 +1 @@
1
- import{jsx as e,jsxs as m}from"react/jsx-runtime";import{Trans as s}from"@lingui/react";import{Button as r,DialogActions as n,DialogContent as t,DialogTitle as i,Stack as o}from"@mui/material";import{memo as a}from"react";import{createPhoenixLayoutElement as u,measurementsMenuActionSchema as c}from"#package/domain";import{useDimensionState as l}from"#package/react-sdk";import{DimensionUnitSelector as p}from"./measurements/DimensionUnitSelector.js";import{MeasurementsIcon as d}from"./measurements/MeasurementsIcon.js";import{MeasurementsIndicatorsSwitch as f}from"./measurements/MeasurementsIndicatorsSwitch.js";import{useMeasurementsVisibility as g}from"./measurements/use-measurements-visibility.js";import{useMenuRouting as h}from"./menu-actions/MenuRoutingContext.js";import{RoutingMenuAction as j}from"./menu-actions/RoutingMenuAction.js";export const MeasurementsMenuAction=u({schema:c,component:a(a=>{let{showIndicatorSwitch:u,icons:c}=a,{unit:k}=l(),{indicatorSwitchShown:x,measurementsShown:M}=g(u),{close:b}=h();return M?m(j,{label:e(s,{id:"sdk.layout.menu.measurements.label",message:"Change measure"}),icon:e(d,{unit:k,icons:c}),children:[e(i,{children:e(s,{id:"sdk.layout.menu.measurements.label",message:"Change measure"})}),e(t,{children:m(o,{spacing:2,direction:"column",children:[x&&e(f,{}),e(p,{})]})}),e(n,{children:e(r,{variant:"text",color:"inherit",onClick:b,children:e(s,{id:"sdk.layout.menu.measurements.close.label",message:"Close"})})})]}):null})});
1
+ import{jsx as e,jsxs as n}from"react/jsx-runtime";import{Trans as m}from"@lingui/react";import{Button as r,DialogActions as s,DialogContent as t,DialogTitle as o,Stack as i}from"@mui/material";import{memo as a}from"react";import{createPhoenixLayoutElement as u,measurementsMenuActionSchema as c}from"#package/domain";import{useMeasurements as l}from"../../toolbar-actions/index.js";import{DimensionUnitSelector as d}from"./measurements/DimensionUnitSelector.js";import{MeasurementsIcon as p}from"./measurements/MeasurementsIcon.js";import{MeasurementsIndicatorsSwitch as f}from"./measurements/MeasurementsIndicatorsSwitch.js";import{useMenuRouting as h}from"./menu-actions/MenuRoutingContext.js";import{RoutingMenuAction as g}from"./menu-actions/RoutingMenuAction.js";export const MeasurementsMenuAction=u({schema:c,component:a(a=>{let{showIndicatorSwitch:u,icons:c}=a,{unit:j,hasIndicatorSwitch:x,available:M}=l({showIndicatorSwitch:u}),{close:b}=h();return M?n(g,{label:e(m,{id:"sdk.layout.menu.measurements.label",message:"Change measure"}),icon:e(p,{unit:j,icons:c}),children:[e(o,{children:e(m,{id:"sdk.layout.menu.measurements.label",message:"Change measure"})}),e(t,{children:n(i,{spacing:2,direction:"column",children:[x&&e(f,{}),e(d,{})]})}),e(s,{children:e(r,{variant:"text",color:"inherit",onClick:b,children:e(m,{id:"sdk.layout.menu.measurements.close.label",message:"Close"})})})]}):null})});
@@ -1 +1 @@
1
- import{jsx as e,jsxs as r,Fragment as s}from"react/jsx-runtime";import{Box as m,Stack as a}from"@mui/material";import{memo as n,useCallback as t}from"react";import{createPhoenixLayoutElement as o,measurementsToolbarButtonSchema as i}from"#package/domain";import{FrontendAnalyticsFactory as u,useAnalyticsService as p,useDimensionState as l,useLocalizable as c}from"#package/react-sdk";import{DesktopToolbar as d}from"#package/ui-sdk";import{DimensionUnitSelector as h}from"./measurements/DimensionUnitSelector.js";import{MeasurementsIcon as g}from"./measurements/MeasurementsIcon.js";import{MeasurementsIndicatorsSwitch as f}from"./measurements/MeasurementsIndicatorsSwitch.js";import{useMeasurementsVisibility as k}from"./measurements/use-measurements-visibility.js";let j="measurements",M={id:"sdk.measurements",message:"Change measure"},x={id:"sdk.toolbar.measurements.change.aria",message:"open measure menu"};export const MeasurementsToolbarButton=o({schema:i,component:n(n=>{let{showIndicatorSwitch:o,icons:i}=n,{ref:b,handleClose:C,handleToggle:T,openedKey:v}=d.useToolbarPopper(),B=p(),{unit:I}=l(),{indicatorSwitchShown:P,measurementsShown:S}=k(o),w=t(()=>{B.push(u.MeasurementsMenuToggled()),T(j)},[B,T]),y=t(e=>{B.push(u.MeasurementsMenuClosed()),C(e)},[B,C]),z=c(M),D=c(x);return S?r(s,{children:[e(d.Button,{ref:b,title:z,size:"small","aria-expanded":v===j?"true":void 0,"aria-label":D,"aria-haspopup":"menu",onClick:w,children:e(g,{unit:I,icons:i})}),e(d.Popper,{placement:"top-start",anchorEl:b.current,isOpen:v===j,onClose:y,children:e(m,{component:"div",sx:{p:2},children:r(a,{spacing:2,direction:"column",children:[P&&e(f,{}),e(h,{})]})})})]}):null})});
1
+ import{jsx as e,jsxs as r,Fragment as s}from"react/jsx-runtime";import{Box as o,Stack as a}from"@mui/material";import{memo as n,useCallback as t}from"react";import{createPhoenixLayoutElement as m,measurementsToolbarButtonSchema as i}from"#package/domain";import{FrontendAnalyticsFactory as u,useAnalyticsService as p,useLocalizable as l}from"#package/react-sdk";import{DesktopToolbar as c}from"#package/ui-sdk";import{useMeasurements as d}from"../../toolbar-actions/index.js";import{DimensionUnitSelector as h}from"./measurements/DimensionUnitSelector.js";import{MeasurementsIcon as g}from"./measurements/MeasurementsIcon.js";import{MeasurementsIndicatorsSwitch as f}from"./measurements/MeasurementsIndicatorsSwitch.js";let k="measurements",j={id:"sdk.measurements",message:"Change measure"},x={id:"sdk.toolbar.measurements.change.aria",message:"open measure menu"};export const MeasurementsToolbarButton=m({schema:i,component:n(n=>{let{showIndicatorSwitch:m,icons:i}=n,{ref:M,handleClose:b,handleToggle:C,openedKey:T}=c.useToolbarPopper(),v=p(),{unit:B,hasIndicatorSwitch:I,available:P}=d({showIndicatorSwitch:m}),S=t(()=>{v.push(u.MeasurementsMenuToggled()),C(k)},[v,C]),w=t(e=>{v.push(u.MeasurementsMenuClosed()),b(e)},[v,b]),z=l(j),D=l(x);return P?r(s,{children:[e(c.Button,{ref:M,title:z,size:"small","aria-expanded":T===k?"true":void 0,"aria-label":D,"aria-haspopup":"menu",onClick:S,children:e(g,{unit:B,icons:i})}),e(c.Popper,{placement:"top-start",anchorEl:M.current,isOpen:T===k,onClose:w,children:e(o,{component:"div",sx:{p:2},children:r(a,{spacing:2,direction:"column",children:[I&&e(f,{}),e(h,{})]})})})]}):null})});
@@ -1 +1 @@
1
- import{jsx as r,jsxs as e,Fragment as o}from"react/jsx-runtime";import{memo as a,useCallback as t,useState as s}from"react";import{createPhoenixLayoutElement as m,shareToolbarButtonSchema as i}from"#package/domain";import{useResolveLocalizable as l}from"#package/react-sdk";import{DesktopToolbar as n,PhxIcon as p}from"#package/ui-sdk";import{ShareModal as c}from"./share/ShareModal.js";import{useShareSettings as h}from"./share/use-share.js";let d={id:"sdk.toolbar.share.open.label",message:"Share"};export const ShareToolbarButton=m({schema:i,component:a(a=>{let{icon:m}=a,[i,f]=s(!1),{disabled:k}=h(),u=t(()=>{f(!0)},[]),g=t(()=>{f(!1)},[]),j=l();return k?null:e(o,{children:[r(n.Button,{title:j(d),size:"small",onClick:u,children:r(p,{name:m??"Export"})}),i&&r(c,{onClose:g})]})})});
1
+ import{jsx as e,jsxs as r,Fragment as o}from"react/jsx-runtime";import{memo as a,useCallback as t,useState as m}from"react";import{createPhoenixLayoutElement as s,shareToolbarButtonSchema as l}from"#package/domain";import{useResolveLocalizable as n,useShareLinks as i}from"#package/react-sdk";import{DesktopToolbar as p,PhxIcon as c}from"#package/ui-sdk";import{ShareModal as d}from"./share/ShareModal.js";let h={id:"sdk.toolbar.share.open.label",message:"Share"};export const ShareToolbarButton=s({schema:l,component:a(a=>{let{icon:s}=a,[l,k]=m(!1),{available:f}=i({enabled:!1}),u=t(()=>{k(!0)},[]),g=t(()=>{k(!1)},[]),x=n();return f?r(o,{children:[e(p.Button,{title:x(h),size:"small",onClick:u,children:e(c,{name:s??"Export"})}),l&&e(d,{onClose:g})]}):null})});
@@ -38,7 +38,7 @@ export interface ThemeableDesktopNavigationStepsProps extends OwnerState {
38
38
  * - Renders horizontal step navigation for desktop layouts.
39
39
  * - Hides when no navigation steps are available.
40
40
  * - Integrates with MUI theming for customizable width behavior.
41
- * - Retrieves steps from the navigation steps domain component.
41
+ * - Retrieves the steps and moves between them with `useStepNavigation`.
42
42
  */
43
43
  export declare const DesktopNavigationSteps: () => import("react/jsx-runtime").JSX.Element | null;
44
44
  export {};
@@ -1 +1 @@
1
- import{jsx as t}from"react/jsx-runtime";import{stepClasses as o,stepperClasses as e,styled as i,useThemeProps as r}from"@mui/material";import{useMemo as a}from"react";import{navigationStepsComponent as n}from"#package/domain";import{useFirstRootComponent as l}from"#package/react-sdk";import{StepsNavigation as m}from"./StepsNavigation.js";let p="PhxDesktopStepsNavigation",s=i("div",{name:p,slot:"root",shouldForwardProp:t=>"ownerState"!==t})(({ownerState:t,theme:{spacing:i}})=>({flexGrow:1,marginBlock:i(1),marginInline:"auto",maxInlineSize:t.fullWidth?void 0:856,[`.${e.horizontal}`]:{overflow:"hidden"},[`.${o.horizontal}`]:{"&:first-child":{paddingInlineStart:0},"&:last-child":{paddingInlineEnd:0}}}));export const DesktopNavigationSteps=()=>{let{fullWidth:o=!1}=r({props:{fullWidth:void 0},name:p}),e=l(n),i=a(()=>e?.state.steps??[],[e]);return 0===i.length?null:t(s,{ownerState:{fullWidth:o},children:t(m,{steps:i})})};
1
+ import{jsx as t}from"react/jsx-runtime";import{stepClasses as o,stepperClasses as e,styled as i,useThemeProps as r}from"@mui/material";import{useStepNavigation as n}from"#package/react-sdk";import{StepsNavigation as a}from"./StepsNavigation.js";let l="PhxDesktopStepsNavigation",d=i("div",{name:l,slot:"root",shouldForwardProp:t=>"ownerState"!==t})(({ownerState:t,theme:{spacing:i}})=>({flexGrow:1,marginBlock:i(1),marginInline:"auto",maxInlineSize:t.fullWidth?void 0:856,[`.${e.horizontal}`]:{overflow:"hidden"},[`.${o.horizontal}`]:{"&:first-child":{paddingInlineStart:0},"&:last-child":{paddingInlineEnd:0}}}));export const DesktopNavigationSteps=()=>{let{fullWidth:o=!1}=r({props:{fullWidth:void 0},name:l}),{steps:e,activeIndex:i,goTo:s}=n();return 0===e.length?null:t(d,{ownerState:{fullWidth:o},children:t(a,{steps:e,activeIndex:i,goTo:s})})};
@@ -1,9 +1,3 @@
1
- import type { Localizable } from '@salsita-ai/common/utils';
2
- export interface TopNavigationStep {
3
- readonly navigationStates: readonly string[];
4
- label: Localizable;
5
- }
6
- export interface StepsNavigationComponentProps {
7
- steps: readonly TopNavigationStep[];
8
- }
1
+ import { type UseStepNavigationResult } from '#package/react-sdk';
2
+ export type StepsNavigationComponentProps = Pick<UseStepNavigationResult, 'steps' | 'activeIndex' | 'goTo'>;
9
3
  export declare const StepsNavigation: import("react").MemoExoticComponent<(props: StepsNavigationComponentProps) => import("react/jsx-runtime").JSX.Element>;
@@ -1 +1 @@
1
- import{jsx as t,jsxs as e}from"react/jsx-runtime";import{Trans as a}from"@lingui/react";import{memo as i,useCallback as o}from"react";import{FrontendAnalyticsFactory as s,useActiveNavigationState as n,useAnalyticsService as r,useDomain as p,usePresetEmbeddedState as c,useResolveLocalizable as l}from"#package/react-sdk";import{TopNavigation as d,useResponsive as m}from"#package/ui-sdk";import{useConfiguratorRouting as g,usePresetSelection as u}from"../../../../../configurator-context/index.js";export const StepsNavigation=i(i=>{let{steps:f}=i,k=r(),{navigationSystem:v,storeSystem:x}=p(),h=n(),C=g(),S=l(),{presetCategories:T}=u(),j=c(),N=T.flatMap(t=>t.presets).length>1,b=!j&&N,I=f.findIndex(t=>t.navigationStates.includes(h))+ +!!b,{isTablet:P}=m(),y=o(()=>{k.push(s.GoToProductsClicked()),C.goToIndex()},[k,C]);return e(d.Root,{activeStep:I,nonLinear:!0,compact:P,fullWidth:!0,children:[b&&t(d.Step,{isCompleted:!0,onClick:y,compact:P,children:t(a,{id:"sdk.layout.navigation.steps.first.label",message:"Products"})}),f.map((e,a)=>{let i=b?a<I-1:a<I,o=S(e.label);return t(d.Step,{isCompleted:i,isDisabled:!i,compact:P,onClick:()=>{let t=e.navigationStates[0];t&&(k.push(s.TopNavigationStepClicked(t)),x.stageAndCommit([v.getNavigationUpdate(t)]))},children:o},o)})]})});
1
+ import{jsx as t,jsxs as e}from"react/jsx-runtime";import{Trans as o}from"@lingui/react";import{memo as a,useCallback as i}from"react";import{FrontendAnalyticsFactory as r,useAnalyticsService as s,usePresetEmbeddedState as c}from"#package/react-sdk";import{TopNavigation as p,useResponsive as l}from"#package/ui-sdk";import{useConfiguratorRouting as n,usePresetSelection as m}from"../../../../../configurator-context/index.js";export const StepsNavigation=a(a=>{let{steps:d,activeIndex:u,goTo:f}=a,g=s(),k=n(),{presetCategories:x}=m(),h=c(),C=x.flatMap(t=>t.presets).length>1,b=!h&&C,{isTablet:j}=l(),v=i(()=>{g.push(r.GoToProductsClicked()),k.goToIndex()},[g,k]);return e(p.Root,{activeStep:u+ +!!b,nonLinear:!0,compact:j,fullWidth:!0,children:[b&&t(p.Step,{isCompleted:!0,onClick:v,compact:j,children:t(o,{id:"sdk.layout.navigation.steps.first.label",message:"Products"})}),d.map(e=>{let o="complete"===e.status;return t(p.Step,{isCompleted:o,isDisabled:!o,compact:j,onClick:()=>f(e.index),children:e.label},e.label)})]})});
@@ -1 +1 @@
1
- import{jsx as t}from"react/jsx-runtime";import{useCallback as e,useMemo as i}from"react";import{match as m}from"ts-pattern";import{DimensionUnit as r}from"#package/domain";import{FrontendAnalyticsFactory as a,useAnalyticsService as n,useDimensionConfig as o,useDimensionState as l,useDimensions as s,useLocalizable as u}from"#package/react-sdk";import{ToggleSelector as c}from"#package/ui-sdk";let h=o=>{let{value:l}=o,u=n(),{setGlobalUnit:h}=s(),p=e(()=>{u.push(a.GlobalDimensionsButtonClicked(l)),h(l)},[u,l,h]),f=i(()=>m(l).with(r.mm,()=>"mm").with(r.cm,()=>"cm").with(r.m,()=>"m").with(r.inch,()=>"in").with(r.feet,()=>"ft").exhaustive(),[l]),w=i(()=>m(l).with(r.mm,()=>"millimeter").with(r.cm,()=>"centimeter").with(r.m,()=>"meter").with(r.inch,()=>"inches").with(r.feet,()=>"feet").exhaustive(),[l]);return t(c.Item,{value:l,"aria-label":w,onClick:p,children:f})},p={id:"sdk.toolbar.measurements.units.aria",message:"Measurement unit setup"};export const DimensionUnitSelector=()=>{let{availableDimensions:e}=o(),{unit:i}=l(),m=u(p);return e.length<=1?null:t(c.Root,{"aria-label":m,value:i,exclusive:!0,columnCount:"auto-fit",sx:{maxWidth:500},children:e.map(e=>t(h,{value:e},e))})};
1
+ import{jsx as t}from"react/jsx-runtime";import{useMemo as e}from"react";import{match as i}from"ts-pattern";import{DimensionUnit as m}from"#package/domain";import{useLocalizable as r}from"#package/react-sdk";import{ToggleSelector as a}from"#package/ui-sdk";import{useMeasurements as o}from"../../../toolbar-actions/index.js";let n=r=>{let{value:o,onSelect:n}=r,l=e(()=>i(o).with(m.mm,()=>"mm").with(m.cm,()=>"cm").with(m.m,()=>"m").with(m.inch,()=>"in").with(m.feet,()=>"ft").exhaustive(),[o]),s=e(()=>i(o).with(m.mm,()=>"millimeter").with(m.cm,()=>"centimeter").with(m.m,()=>"meter").with(m.inch,()=>"inches").with(m.feet,()=>"feet").exhaustive(),[o]);return t(a.Item,{value:o,"aria-label":s,onClick:()=>n(o),children:l})},l={id:"sdk.toolbar.measurements.units.aria",message:"Measurement unit setup"};export const DimensionUnitSelector=()=>{let{units:e,unit:i,setUnit:m}=o(),s=r(l);return e.length<=1?null:t(a.Root,{"aria-label":s,value:i,exclusive:!0,columnCount:"auto-fit",sx:{maxWidth:500},children:e.map(e=>t(n,{value:e,onSelect:m},e))})};
@@ -1 +1 @@
1
- import{jsx as e}from"react/jsx-runtime";import{Trans as i}from"@lingui/react";import{Switch as t}from"@mui/material";import{useObservableEagerState as o}from"observable-hooks";import{useCallback as r}from"react";import{FrontendAnalyticsFactory as a,useAnalyticsService as s,useLocalizable as m}from"#package/react-sdk";import{MobileToolbar as n}from"#package/ui-sdk";import{useConfigurator as c}from"../../../application-runtime/index.js";let p={id:"sdk.toolbar.measurements.input.aria",message:"Switch measurements"};export const MeasurementsIndicatorsSwitch=()=>{let d=s(),{canvasSystem:l}=c(),u=o(l.dimensionIndicatorShown$),g=r(()=>{d.push(a.DimensionIndicatorsToggled()),l.toggleDimensionIndicator()},[d,l]),f=m(p);return e(n.SectionItem,{title:e(i,{id:"sdk.toolbar.measurements.indicators.label",message:"Dimension indicators"}),content:e(t,{inputProps:{"aria-label":f},checked:u,onChange:g})})};
1
+ import{jsx as e}from"react/jsx-runtime";import{Trans as t}from"@lingui/react";import{Switch as r}from"@mui/material";import{useLocalizable as a}from"#package/react-sdk";import{MobileToolbar as i}from"#package/ui-sdk";import{useMeasurements as o}from"../../../toolbar-actions/index.js";let s={id:"sdk.toolbar.measurements.input.aria",message:"Switch measurements"};export const MeasurementsIndicatorsSwitch=()=>{let{indicatorsShown:m,toggleIndicators:n}=o(),c=a(s);return e(i.SectionItem,{title:e(t,{id:"sdk.toolbar.measurements.indicators.label",message:"Dimension indicators"}),content:e(r,{inputProps:{"aria-label":c},checked:m,onChange:n})})};
@@ -1 +1 @@
1
- import{jsx as e,jsxs as i}from"react/jsx-runtime";import{Trans as a}from"@lingui/react";import{Button as r,DialogActions as l,DialogContent as o,DialogTitle as s,FormControlLabel as n,LinearProgress as t,Stack as d,Switch as c,TextField as m}from"@mui/material";import{memo as h,useCallback as p,useState as k}from"react";import{applicationConfigComponent as g}from"#package/domain";import{useFirstRootComponent as b,useResolveLocalizable as u}from"#package/react-sdk";import{Dialog as x,PhxIcon as C}from"#package/ui-sdk";import{useShareData as f,useShareSettings as v}from"./use-share.js";let y=i=>{let{isLinkCopied:l,onCopy:o,disabled:s}=i;return l?e(r,{variant:"muted",color:"success",startIcon:e(C,{name:"Check"}),disabled:s,onClick:o,children:e(a,{id:"sdk.toolbar.share.linkCopied.label",message:"Copied"})}):e(r,{variant:"contained",disabled:s,onClick:o,children:e(a,{id:"sdk.toolbar.share.copyLink.label",message:"Copy link"})})},w={id:"sdk.toolbar.share.loading.label",message:"loading link..."},j=({link:a,onFocus:r})=>i(d,{sx:{display:"grid","& > *":{gridArea:"1 / 1"}},children:[e(m,{value:a??"",placeholder:u()(w),hiddenLabel:!0,InputProps:{readOnly:!0},onFocus:r}),e(t,{sx:{alignSelf:"end",visibility:null==a?"visible":"hidden"}})]});export const ShareModal=h(t=>{let{onClose:m}=t,h=b(g),u=h?.state.shareExpiration,{ownerLinkDisabled:C,readRevisionLinkDisabled:w}=v(),[T,L]=k(w),[S,A]=k(!1),{revisionData:E,ownerData:F}=f({expiration:u,ownerLinkDisabled:C,readRevisionLinkDisabled:w}),I=T?F?.link:E?.link,O=!C&&!w,M=p(async()=>{I&&(await navigator.clipboard.writeText(I),A(!0))},[I]),P=p(e=>{e.currentTarget.select()},[]),R=p(e=>{L(e.currentTarget.checked),A(!1)},[]);return i(x.Root,{sx:{maxWidth:"unset",width:"min(100%, 520px)"},isOpen:!0,onClose:m,children:[e(s,{children:e(a,{id:"sdk.toolbar.share.label",message:"Share configuration"})}),e(o,{children:i(d,{sx:{gap:2},children:[e(j,{link:I,onFocus:P}),O&&e(n,{control:e(c,{value:T,disabled:!I,onChange:R}),label:e(a,{id:"sdk.toolbar.share.allowEdit.label",message:"Allow the recipient to edit configuration"})})]})}),i(l,{children:[e(r,{variant:"text",color:"inherit",onClick:m,children:e(a,{id:"sdk.toolbar.share.close.label",message:"Close"})}),e(y,{isLinkCopied:S,disabled:!I,onCopy:M})]})]})});
1
+ import{jsx as e,jsxs as i}from"react/jsx-runtime";import{Trans as a}from"@lingui/react";import{Button as l,DialogActions as r,DialogContent as o,DialogTitle as n,FormControlLabel as s,LinearProgress as t,Stack as d,Switch as c,TextField as h}from"@mui/material";import{memo as m,useCallback as p,useState as b}from"react";import{useResolveLocalizable as g,useShareLinks as k}from"#package/react-sdk";import{Dialog as u,PhxIcon as x}from"#package/ui-sdk";let C=i=>{let{isLinkCopied:r,onCopy:o,disabled:n}=i;return r?e(l,{variant:"muted",color:"success",startIcon:e(x,{name:"Check"}),disabled:n,onClick:o,children:e(a,{id:"sdk.toolbar.share.linkCopied.label",message:"Copied"})}):e(l,{variant:"contained",disabled:n,onClick:o,children:e(a,{id:"sdk.toolbar.share.copyLink.label",message:"Copy link"})})},v={id:"sdk.toolbar.share.loading.label",message:"loading link..."},f=({link:a,onFocus:l})=>i(d,{sx:{display:"grid","& > *":{gridArea:"1 / 1"}},children:[e(h,{value:a??"",placeholder:g()(v),hiddenLabel:!0,InputProps:{readOnly:!0},onFocus:l}),e(t,{sx:{alignSelf:"end",visibility:null==a?"visible":"hidden"}})]});export const ShareModal=m(t=>{let{onClose:h}=t,{ownerLinkAvailable:m,readLinkAvailable:g,ownerLink:x,readLink:v}=k(),[y,w]=b(!g),[T,j]=b(null),L=(y?x:v)??void 0,S=void 0!==L&&L===T,A=p(async()=>{L&&(await navigator.clipboard.writeText(L),j(L))},[L]),F=p(e=>{e.currentTarget.select()},[]),I=p(e=>{w(e.currentTarget.checked)},[]);return i(u.Root,{sx:{maxWidth:"unset",width:"min(100%, 520px)"},isOpen:!0,onClose:h,children:[e(n,{children:e(a,{id:"sdk.toolbar.share.label",message:"Share configuration"})}),e(o,{children:i(d,{sx:{gap:2},children:[e(f,{link:L,onFocus:F}),m&&g&&e(s,{control:e(c,{value:y,disabled:!L,onChange:I}),label:e(a,{id:"sdk.toolbar.share.allowEdit.label",message:"Allow the recipient to edit configuration"})})]})}),i(r,{children:[e(l,{variant:"text",color:"inherit",onClick:h,children:e(a,{id:"sdk.toolbar.share.close.label",message:"Close"})}),e(C,{isLinkCopied:S,disabled:!L,onCopy:A})]})]})});
@@ -1,11 +1,3 @@
1
- import type { AccessLevel } from '@salsita-ai/contracts/api';
2
- export interface GenerateShareLinkOptions {
3
- access: AccessLevel;
4
- expiration?: number;
5
- }
6
- export declare const useGenerateShareLink: () => (options: GenerateShareLinkOptions) => Promise<{
7
- readonly link: string;
8
- }>;
9
1
  interface UseShareDataParams {
10
2
  /**
11
3
  * Expiration time in hours. When undefined, links do not expire.
@@ -14,6 +6,9 @@ interface UseShareDataParams {
14
6
  ownerLinkDisabled: boolean;
15
7
  readRevisionLinkDisabled: boolean;
16
8
  }
9
+ /**
10
+ * @deprecated Use useShareLinks() instead. This API will be removed in a future version.
11
+ */
17
12
  export declare const useShareData: (params: UseShareDataParams) => {
18
13
  isLoadingOwnerData: boolean;
19
14
  isLoadingRevisionData: boolean;
@@ -24,6 +19,10 @@ export declare const useShareData: (params: UseShareDataParams) => {
24
19
  readonly link: string;
25
20
  }> | undefined;
26
21
  };
22
+ /**
23
+ * @deprecated Use useShareLinks() instead, whose `available`, `ownerLinkAvailable` and `readLinkAvailable` say which
24
+ * links can be shared. This API will be removed in a future version.
25
+ */
27
26
  export declare const useShareSettings: () => {
28
27
  disabled: boolean;
29
28
  ownerLinkDisabled: boolean;
@@ -1 +1 @@
1
- import{useQuery as e}from"@tanstack/react-query";import{useCallback as t}from"react";import{match as r}from"ts-pattern";import{applicationConfigComponent as a}from"#package/domain";import{useAuthorizedClient as s,useConfigurationId as i,useDomain as n,useDomainApplication as o,useFirstRootComponent as d}from"#package/react-sdk";export const useGenerateShareLink=()=>{let e=d(a),n=e?.state.shareStrategy??"deployment-registered",{configurationPersistSystem:c}=o(),l=i(),h=s();return t(async e=>{let t=r(n).with("deployment-registered",()=>void 0).with("current-frontend",()=>{let e=new URL(window.location.href);return e.searchParams.delete("cid"),e.searchParams.delete("ca"),e.toString()}).exhaustive(),a=await c.save();return h.generateShareLink(l,"rr"===e.access?a:void 0,e.expiration,e.access,t)},[n,c,h,l])};export const useShareData=t=>{let{expiration:r,ownerLinkDisabled:a,readRevisionLinkDisabled:s}=t,o=useGenerateShareLink(),{storeSystem:d}=n(),c=i(),l=d.stateSlices.committed.value.state,{data:h,isLoading:m}=e({queryKey:["share-owner-link",c],staleTime:1/0,queryFn:()=>o({access:"o",expiration:r}),enabled:!a}),{data:u,isLoading:p,isFetchedAfterMount:y}=e({queryKey:["share-revision-link",c,l.entities,l.rootEntityId],queryFn:()=>o({access:"rr",expiration:r}),enabled:!s});return{isLoadingOwnerData:m,isLoadingRevisionData:p,ownerData:h,revisionData:y?u:void 0}};export const useShareSettings=()=>{let e=d(a),t=e?.state.shareDisabled??!1,r=t||(e?.state.shareOwnerLinkDisabled??!1),s=t||(e?.state.shareReadRevisionLinkDisabled??!1);return{disabled:r&&s,ownerLinkDisabled:r,readRevisionLinkDisabled:s}};
1
+ import{useQuery as e}from"@tanstack/react-query";import{applicationConfigComponent as a}from"#package/domain";import{useConfigurationId as t,useDomain as r,useFirstRootComponent as s,useGenerateShareLink as i}from"#package/react-sdk";export const useShareData=a=>{let{expiration:s,ownerLinkDisabled:n,readRevisionLinkDisabled:o}=a,d=i(),{storeSystem:c}=r(),l=t(),u=c.stateSlices.committed.value.state,{data:m,isLoading:h}=e({queryKey:["share-owner-link",l],staleTime:1/0,queryFn:()=>d({access:"o",expiration:s}),enabled:!n}),{data:k,isLoading:y,isFetchedAfterMount:p}=e({queryKey:["share-revision-link",l,u.entities,u.rootEntityId],queryFn:()=>d({access:"rr",expiration:s}),enabled:!o});return{isLoadingOwnerData:h,isLoadingRevisionData:y,ownerData:m,revisionData:p?k:void 0}};export const useShareSettings=()=>{let e=s(a),t=e?.state.shareDisabled??!1,r=t||(e?.state.shareOwnerLinkDisabled??!1),i=t||(e?.state.shareReadRevisionLinkDisabled??!1);return{disabled:r&&i,ownerLinkDisabled:r,readRevisionLinkDisabled:i}};
@@ -1 +1 @@
1
- import{jsx as e,jsxs as r,Fragment as t}from"react/jsx-runtime";import{Trans as a}from"@lingui/react";import{Button as i,ButtonGroup as n,CircularProgress as o,ListItemIcon as l,ListItemText as s,Menu as m,MenuItem as d,buttonClasses as c,styled as p,svgIconClasses as h}from"@mui/material";import{useMutation as g}from"@tanstack/react-query";import{useSnackbar as f}from"notistack";import{useCallback as u,useState as z}from"react";import{finalizeActionComponent as k,getComponentSnapshotKey as y}from"#package/domain";import{LocalizableMessage as b,PhoenixHandlerBoundary as C,useComponents as v,useFinalizeViolations as x,useLocalizable as w,useLogger as F,usePhoenixHandler as S,useResolveLocalizable as j}from"#package/react-sdk";import{PhxIcon as O,TooltipWithArrow as T,useResponsive as E}from"#package/ui-sdk";import{CustomFinalizeButton as P}from"./CustomFinalizeButton.js";let $=p(n)({display:"grid",gridTemplateColumns:"minmax(0, 1fr) min-content "}),A=p(i)(({theme:{spacing:e}})=>({[`&.${c.containedSizeSmall}`]:{minInlineSize:0,[`.${h.root}`]:{fontSize:18}},[`&.${c.containedSizeLarge}`]:{paddingInline:e(1)}})),D=r=>e(C,{name:r.handler,children:e(I,{...r})}),I=r=>{let{handler:t,icon:i,title:n,tooltip:o}=r,{handler:l}=S(t),s=F(),{enqueueSnackbar:m}=f(),{mutate:d,isPending:c}=g({mutationFn:l,onError:r=>{s.error("Failed to finalize",{error:r.message}),m({message:e(a,{id:"sdk.messages.finalize.error",message:"Oops, something went wrong"}),variant:"error"})}}),{disabled:p,hints:h}=x(),u=j();return e(P,{hints:h??u(o),icon:i,busy:c,disabled:p,onClick:d,title:n})},L=r=>e(C,{name:r.handler,children:e(M,{...r})}),M=t=>{let{handler:i,icon:n,label:m,title:c,onClose:p}=t,{handler:h}=S(i),{enqueueSnackbar:z}=f(),k=F(),{mutateAsync:y,isPending:C}=g({mutationFn:h,onError:r=>{k.error("Failed to finalize",{error:r.message}),z({message:e(a,{id:"sdk.messages.finalize.error",message:"Oops, something went wrong"}),variant:"error"})}}),{disabled:v,hints:w}=x();return e(T,{title:w,placement:"top",children:e("span",{children:r(d,{disabled:v,onClick:u(async e=>{e.preventDefault(),e.stopPropagation(),await y(),p()},[y,p]),children:[e(l,{children:C?e(o,{size:20}):e(O,{name:n})}),e(s,{primary:e(b,{children:m}),secondary:e(b,{children:c})})]})})})};export const FinalizeActions=()=>{let a=w({id:"sdk.layout.finalize.moreActions",message:"More finalization options"}),i=v({componentTypes:[k]}),[n,o]=z(null),l=!!n,{isDesktop:s}=E(),d={color:"primary",variant:"contained",size:s?"large":"small"},c=u(e=>{o(e.currentTarget)},[]),p=u(()=>{o(null)},[]),h=i.find(e=>"primary"===e.state.variant)??i[0],g=i.filter(e=>e!==h);return h?1===i.length?e(D,{handler:h.state.handler,icon:h.state.icon,title:h.state.label,tooltip:h.state.title},y(h)):r(t,{children:[r($,{...d,children:[e(D,{handler:h.state.handler,icon:h.state.icon,title:h.state.label,tooltip:h.state.title},y(h)),e(A,{...d,"aria-label":a,"aria-haspopup":"menu","aria-expanded":l,onClick:c,children:e(O,{name:"CaretDown"})})]}),e(m,{anchorEl:n,anchorOrigin:{vertical:"top",horizontal:"right"},transformOrigin:{vertical:"bottom",horizontal:"right"},MenuListProps:{dense:!0},slotProps:{paper:{sx:{mt:-2}}},open:l,onClose:p,children:g.map(r=>e(L,{handler:r.state.handler,icon:r.state.icon,label:r.state.label,title:r.state.title,onClose:p},y(r)))})]}):null};
1
+ import{jsx as e,jsxs as n,Fragment as r}from"react/jsx-runtime";import{Trans as t}from"@lingui/react";import{Button as i,ButtonGroup as a,CircularProgress as o,ListItemIcon as l,ListItemText as s,Menu as c,MenuItem as m,buttonClasses as p,styled as d,svgIconClasses as g}from"@mui/material";import{useSnackbar as u}from"notistack";import{useCallback as h,useContext as f,useRef as y,useState as k}from"react";import{FinalizeActionsContext as z,useFinalizeActions as b,useLocalizable as x}from"#package/react-sdk";import{PhxIcon as C,ResponsiveSidebarFooterButton as P,TooltipWithArrow as v,useResponsive as S}from"#package/ui-sdk";let w=d(a)({display:"grid",gridTemplateColumns:"minmax(0, 1fr) min-content "}),j=d(i)(({theme:{spacing:e}})=>({[`&.${p.containedSizeSmall}`]:{minInlineSize:0,[`.${g.root}`]:{fontSize:18}},[`&.${p.containedSizeLarge}`]:{paddingInline:e(1)}})),D=n=>{let{enqueueSnackbar:r}=u(),i=f(z),{key:a,disabled:o,isPending:l,run:s}=n,c=y(!1);return h(async()=>{if(o||l||c.current)return!1;c.current=!0;try{await s()}finally{c.current=!1}let n=i?.getSnapshot().get(a);return n?.status!=="ready"||!n.action.error||(r({message:e(t,{id:"sdk.messages.finalize.error",message:"Oops, something went wrong"}),variant:"error"}),!1)},[o,r,l,a,s,i])},I=({action:n,hints:r})=>{let t=D(n),i=h(e=>{e.preventDefault(),e.stopPropagation(),t()},[t]);return e(P,{tooltip:r??n.title,busy:n.isPending,disabled:n.disabled,onClick:i,slotProps:{button:{startIcon:e(C,{name:n.icon})}},children:n.label})},O=({action:r,hints:t,onClose:i})=>{let a=D(r),c=h(async e=>{e.preventDefault(),e.stopPropagation(),await a()&&i()},[a,i]);return e(v,{title:t,placement:"top",children:e("span",{children:n(m,{disabled:r.disabled,onClick:c,children:[e(l,{children:r.isPending?e(o,{size:20}):e(C,{name:r.icon})}),e(s,{primary:r.label,secondary:r.title})]})})})};export const FinalizeActions=()=>{let t=x({id:"sdk.layout.finalize.moreActions",message:"More finalization options"}),{actions:i,primary:a,secondary:o,hints:l}=b(),[s,m]=k(null),p=!!s,{isDesktop:d}=S(),g={color:"primary",variant:"contained",size:d?"large":"small"},u=h(e=>{m(e.currentTarget)},[]),f=h(()=>{m(null)},[]);return a?1===i.length?e(I,{action:a,hints:l},a.key):n(r,{children:[n(w,{...g,children:[e(I,{action:a,hints:l},a.key),e(j,{...g,"aria-label":t,"aria-haspopup":"menu","aria-expanded":p,onClick:u,children:e(C,{name:"CaretDown"})})]}),e(c,{anchorEl:s,anchorOrigin:{vertical:"top",horizontal:"right"},transformOrigin:{vertical:"bottom",horizontal:"right"},MenuListProps:{dense:!0},slotProps:{paper:{sx:{mt:-2}}},open:p,onClose:f,children:o.map(n=>e(O,{action:n,hints:l,onClose:f},n.key))})]}):null};
@@ -1 +1 @@
1
- import{jsx as t}from"react/jsx-runtime";import{Trans as e}from"@lingui/react";import{Button as a}from"@mui/material";import{memo as i,useCallback as o}from"react";import{createPhoenixLayoutElement as r,nextStepButtonSchema as n}from"#package/domain";import{FrontendAnalyticsFactory as m,useAnalyticsService as s,useDomain as l}from"#package/react-sdk";import{useResponsive as c}from"#package/ui-sdk";import{useConfigurator as p}from"../../../../application-runtime/index.js";export const NextStepButton=r({schema:n,component:i(()=>{let i=s(),{layoutSystem:r}=p(),{navigationSystem:n,storeSystem:d}=l(),{isDesktop:g}=c(),u=o(()=>{let t=n.getActiveNavigationState(d.stateSlices.committed.value.state),e=r.getNavigationSteps(d.stateSlices.committed.value.state);i.push(m.NextStepButtonClicked());let a=e.findIndex(e=>e.navigationStates.includes(t)),o=e[a+1];if(!o)return;let s=o.navigationStates[0];s&&d.stageAndCommit([n.getNavigationUpdate(s)])},[i,n,d,r]);return g?t(a,{variant:"contained",color:"primary",size:"large",onClick:u,children:t(e,{id:"sdk.layout.sidebar.nextStep.label",message:"Next step"})}):t(a,{variant:"contained",color:"primary",size:"small",onClick:u,children:t(e,{id:"sdk.layout.sidebar.nextStepShort.label",message:"Next"})})})});
1
+ import{jsx as e}from"react/jsx-runtime";import{Trans as t}from"@lingui/react";import{Button as r}from"@mui/material";import{memo as a,useCallback as o}from"react";import{createPhoenixLayoutElement as i,nextStepButtonSchema as m}from"#package/domain";import{FrontendAnalyticsFactory as n,useAnalyticsService as s,useStepNavigation as p}from"#package/react-sdk";import{useResponsive as c}from"#package/ui-sdk";export const NextStepButton=i({schema:m,component:a(()=>{let a=s(),{canGoNext:i,next:m}=p(),{isDesktop:l}=c(),d=o(()=>{i?m():a.push(n.NextStepButtonClicked())},[a,i,m]);return l?e(r,{variant:"contained",color:"primary",size:"large",onClick:d,children:e(t,{id:"sdk.layout.sidebar.nextStep.label",message:"Next step"})}):e(r,{variant:"contained",color:"primary",size:"small",onClick:d,children:e(t,{id:"sdk.layout.sidebar.nextStepShort.label",message:"Next"})})})});
@@ -1 +1 @@
1
- import{jsx as t}from"react/jsx-runtime";import{IconButton as e,Tooltip as i}from"@mui/material";import{memo as a,useCallback as o}from"react";import{createPhoenixLayoutElement as r,previousStepButtonSchema as n}from"#package/domain";import{FrontendAnalyticsFactory as m,useAnalyticsService as s,useDomain as l,useLocalizable as c}from"#package/react-sdk";import{PhxIcon as p,useResponsive as d}from"#package/ui-sdk";import{useConfigurator as u}from"../../../../application-runtime/index.js";import{useBackToPresetEnabled as g,useConfiguratorRouting as f,useSteps as v}from"../../../../configurator-context/index.js";let S={id:"sdk.layout.sidebar.previousStep.label",message:"Previous step"};export const PreviousStepButton=r({schema:n,component:a(a=>{let{icon:r}=a,n=c(S),k=s(),x=g(),{layoutSystem:h}=u(),j=f(),{navigationSystem:C,storeSystem:b}=l(),{isDesktop:N}=d(),{previousStepDisabled:P}=v();return t(i,{title:n,placement:"top",children:t("span",{style:{alignSelf:"center"},children:t(e,{variant:"muted",color:"default",size:N?"medium":"small",disabled:P,onClick:o(()=>{let t=C.getActiveNavigationState(b.stateSlices.committed.value.state),e=h.getNavigationSteps(b.stateSlices.committed.value.state);k.push(m.PreviousStepButtonClicked());let i=e.findIndex(e=>e.navigationStates.includes(t)),a=e[i-1];if(!a){x&&j.goToIndex();return}let o=a.navigationStates[0];o&&b.stageAndCommit([C.getNavigationUpdate(o)])},[k,C,x,j,b,h]),children:t(p,{name:r??"CaretLeft"})})})})})});
1
+ import{jsx as e}from"react/jsx-runtime";import{IconButton as t,Tooltip as r}from"@mui/material";import{memo as o,useCallback as i}from"react";import{createPhoenixLayoutElement as a,previousStepButtonSchema as m}from"#package/domain";import{FrontendAnalyticsFactory as s,useAnalyticsService as n,useLocalizable as l,useStepNavigation as p}from"#package/react-sdk";import{PhxIcon as c,useResponsive as d}from"#package/ui-sdk";import{useBackToPresetEnabled as u,useConfiguratorRouting as f,useSteps as k}from"../../../../configurator-context/index.js";let g={id:"sdk.layout.sidebar.previousStep.label",message:"Previous step"};export const PreviousStepButton=a({schema:m,component:o(o=>{let{icon:a}=o,m=l(g),x=n(),h=u(),v=f(),{canGoPrevious:S,previous:b}=p(),{isDesktop:j}=d(),{previousStepDisabled:C}=k();return e(r,{title:m,placement:"top",children:e("span",{style:{alignSelf:"center"},children:e(t,{variant:"muted",color:"default",size:j?"medium":"small",disabled:C,onClick:i(()=>{S?b():(x.push(s.PreviousStepButtonClicked()),h&&v.goToIndex())},[x,h,S,b,v]),children:e(c,{name:a??"CaretLeft"})})})})})});
@@ -1 +1 @@
1
- import{jsx as r}from"react/jsx-runtime";import{Trans as e}from"@lingui/react";import{Button as s}from"@mui/material";import{useSnackbar as i}from"notistack";import{useEffect as t}from"react";import{useApplicationRuntime as o,useApplicationRuntimeSelector as a,useConfiguratorMessages as n}from"#package/react-sdk";let m="phx-configuration-persist-system-failure";export const SaveMessageSnackbars=()=>{let c=a(o().selectors.domainContext.configurator.getInitializationState).isViewMode,{enqueueSnackbar:d,closeSnackbar:p}=i();return t(()=>{c&&p(m)},[c,p]),n(i=>{c||("saveError"===i.kind&&d(r(e,{id:"sdk.persist.system.error.message",message:"An error occured when trying to update a configuration"}),{variant:"error",key:m,persist:!0,preventDuplicate:!0,action:i=>r(s,{color:"inherit",size:"small",onClick:()=>{p(i)},children:r(e,{id:"sdk.persist.system.error.dismiss",message:"Dismiss"})})}),"saveRecovery"===i.kind&&(p(m),d(r(e,{id:"sdk.persist.system.error.recovered",message:"Configuration updated"}),{variant:"info"})))}),null};
1
+ import{jsx as r}from"react/jsx-runtime";import{Trans as e}from"@lingui/react";import{Button as s}from"@mui/material";import{useSnackbar as i}from"notistack";import{useEffect as t}from"react";import{useApplicationRuntime as o,useApplicationRuntimeSelector as a,useConfiguratorMessages as n}from"#package/react-sdk";let m="phx-configuration-persist-system-failure";export const SaveMessageSnackbars=()=>{let c=a(o().selectors.domainContext.configurator.getIsViewMode),{enqueueSnackbar:d,closeSnackbar:p}=i();return t(()=>{c&&p(m)},[c,p]),n(i=>{c||("saveError"===i.kind&&d(r(e,{id:"sdk.persist.system.error.message",message:"An error occured when trying to update a configuration"}),{variant:"error",key:m,persist:!0,preventDuplicate:!0,action:i=>r(s,{color:"inherit",size:"small",onClick:()=>{p(i)},children:r(e,{id:"sdk.persist.system.error.dismiss",message:"Dismiss"})})}),"saveRecovery"===i.kind&&(p(m),d(r(e,{id:"sdk.persist.system.error.recovered",message:"Configuration updated"}),{variant:"info"})))}),null};
@@ -69,6 +69,8 @@ components:
69
69
 
70
70
  The toolMenuFab is scene HTML rendered at the entity's position in the 3D scene. It supports positioning properties (`offsetX`, `offsetY`, `offsetZ`) and appearance properties like opacity and visibility.
71
71
 
72
+ The FAB and its menu are the entity element `ToolMenuFab`. A project replaces them by registering its own with `phx.frontend.createToolMenuFab`, which receives the `options` and `onSelectTool(toolState)`. See [Configurator Interface → In-Scene Controls](?path=/docs/phoenix-configurator-interface--docs#in-scene-controls).
73
+
72
74
  ### Step 3: Add exitToolModeFab component
73
75
 
74
76
  The `exitToolModeFab` component renders a button in the call to action layout slot, providing a clear way to exit the current tool mode. This appears in the UI chrome, not in the scene:
@@ -131,6 +131,10 @@ components:
131
131
  - non-existent
132
132
  ```
133
133
 
134
+ ### Your own FABs
135
+
136
+ The FABs are the entity elements `DeleteEntityFab` and `AddEntityFab`. A project replaces their look by registering its own with `phx.frontend.createDeleteEntityFab` or `phx.frontend.createAddEntityFab`; the spec's settings and positions above still apply. The delete FAB's replacement gets `onDelete`, `disabled` and `disabledHint`; the add FAB's reads its recipes with `phx.frontend.useGroupedRecipeOptions`. See [Configurator Interface → In-Scene Controls](?path=/docs/phoenix-configurator-interface--docs#in-scene-controls).
137
+
134
138
  ## Example
135
139
 
136
140
  Here you can see the live example!
@@ -1,5 +1,5 @@
1
1
  {
2
- "generatedAt": "2026-10-15T17:13:10.434Z",
2
+ "generatedAt": "2026-10-17T09:01:44.367Z",
3
3
  "categories": [
4
4
  {
5
5
  "name": "Phoenix",
@@ -881,6 +881,67 @@
881
881
  ],
882
882
  "subcategories": []
883
883
  },
884
+ {
885
+ "name": "Gallery",
886
+ "docs": [
887
+ {
888
+ "title": "Ardent Compressor",
889
+ "description": "Quote an engineered product from a form, with no 3D model at all. An industrial compressor maker, Ardent Air, lets plant engineers size a rotary screw compressor and ask for a firm quote. The...",
890
+ "path": "docs/layouts/gallery/ardent-compressor.mdx",
891
+ "category": [
892
+ "Layouts",
893
+ "Gallery",
894
+ "Ardent Compressor"
895
+ ],
896
+ "source": "storybook-example"
897
+ },
898
+ {
899
+ "title": "Fenwick Window",
900
+ "description": "Show a made-to-measure product as the drawing a workshop would build it from. A joinery, Fenwick & Lowe, sells timber casement windows to order: the customer sets the overall size, the panes across,...",
901
+ "path": "docs/layouts/gallery/fenwick-window.mdx",
902
+ "category": [
903
+ "Layouts",
904
+ "Gallery",
905
+ "Fenwick Window"
906
+ ],
907
+ "source": "storybook-example"
908
+ },
909
+ {
910
+ "title": "Ferrule Bar Station",
911
+ "description": "Let a bar designer lay out a commercial bartender station and hand the result straight to the workshop. A fictional maker, Ferrule Barworks, sells stainless underbar stations built from modules: ice...",
912
+ "path": "docs/layouts/gallery/ferrule-bar-station.mdx",
913
+ "category": [
914
+ "Layouts",
915
+ "Gallery",
916
+ "Ferrule Bar Station"
917
+ ],
918
+ "source": "storybook-example"
919
+ },
920
+ {
921
+ "title": "Kestrel Kettle",
922
+ "description": "Sell a small product from one calm page that looks like the shop's own. A specialty-coffee shop, Aldermoor Coffee, sells its Kestrel pour-over kettle in three finishes, two handle woods and with or...",
923
+ "path": "docs/layouts/gallery/kestrel-kettle.mdx",
924
+ "category": [
925
+ "Layouts",
926
+ "Gallery",
927
+ "Kestrel Kettle"
928
+ ],
929
+ "source": "storybook-example"
930
+ },
931
+ {
932
+ "title": "Sunfold Solar",
933
+ "description": "Help a household decide on a system by showing what it would do for them. A solar installer, Sunfold, lets a homeowner plan panels and a battery for their roof: the roof's area and direction, the...",
934
+ "path": "docs/layouts/gallery/sunfold-solar.mdx",
935
+ "category": [
936
+ "Layouts",
937
+ "Gallery",
938
+ "Sunfold Solar"
939
+ ],
940
+ "source": "storybook-example"
941
+ }
942
+ ],
943
+ "subcategories": []
944
+ },
884
945
  {
885
946
  "name": "Header",
886
947
  "docs": [
@@ -214,6 +214,8 @@ Properties use camelCase (`integrationMode`), while attributes use kebab-case (`
214
214
 
215
215
  Attributes are **write-only from the host's perspective**: setting an attribute (in HTML or via `setAttribute`) flows the value into the property, but the WC **never reflects property changes back to attributes**. To read the current value, always use the JavaScript property, not `getAttribute`.
216
216
 
217
+ Boolean attributes (`readonly`, `expanded`, and a custom property whose `attributeParser` is `webComponentAttributeParsers.boolean`) follow the HTML convention: present without a value (`<salsita-configurator readonly>`, `setAttribute('readonly', '')`) or with their own name as the value (`readonly="readonly"`), they switch the property on. `"true"` and `"false"` work too; any other value is ignored with an error in the console. Removing the attribute resets the property to its default.
218
+
217
219
  Standard property to attribute mapping:
218
220
 
219
221
  | Property | Attribute(s) |