@salsita-ai/sdk 0.50.0-develop.9ed52379e9 → 0.50.0-develop.a49722158a

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 (432) hide show
  1. package/README.md +2 -2
  2. package/dist/application-spec/core/components/component-filter.d.ts +53 -0
  3. package/dist/application-spec/core/components/component-filter.js +1 -0
  4. package/dist/application-spec/core/components/index.d.ts +2 -0
  5. package/dist/application-spec/core/components/index.js +1 -0
  6. package/dist/application-spec/core/components/sdk-code-ref.d.ts +9 -0
  7. package/dist/application-spec/core/components/sdk-code-ref.js +1 -0
  8. package/dist/application-spec/core/enhanced-json-value.d.ts +0 -68
  9. package/dist/application-spec/core/enhanced-json-value.js +1 -1
  10. package/dist/application-spec/core/expressions/index.d.ts +2 -0
  11. package/dist/application-spec/core/expressions/index.js +1 -0
  12. package/dist/application-spec/core/expressions/relation-expression-params.d.ts +11 -0
  13. package/dist/application-spec/core/expressions/sdk-expression-implementation.d.ts +24 -0
  14. package/dist/application-spec/core/expressions/sdk-expression-implementation.js +1 -0
  15. package/dist/application-spec/core/index.d.ts +2 -0
  16. package/dist/application-spec/core/index.js +1 -1
  17. package/dist/application-spec/core/json-value.d.ts +1 -1
  18. package/dist/application-spec/{core → enhanced-json}/eval-to-constant.d.ts +1 -1
  19. package/dist/application-spec/enhanced-json/index.d.ts +4 -0
  20. package/dist/application-spec/enhanced-json/index.js +1 -0
  21. package/dist/application-spec/enhanced-json/is-enhanced-json-array.d.ts +2 -0
  22. package/dist/application-spec/enhanced-json/is-enhanced-json-array.js +1 -0
  23. package/dist/application-spec/enhanced-json/resolve-enhanced-json-value.d.ts +18 -0
  24. package/dist/application-spec/enhanced-json/resolve-enhanced-json-value.js +1 -0
  25. package/dist/application-spec/enhanced-json/schema-from-value.d.ts +24 -0
  26. package/dist/application-spec/enhanced-json/schema-from-value.js +1 -0
  27. package/dist/application-spec/enhanced-json/stringify-enhanced-json-value.d.ts +14 -0
  28. package/dist/application-spec/enhanced-json/stringify-enhanced-json-value.js +1 -0
  29. package/dist/application-spec/enhanced-json/validate-enhanced-json-value-caps.d.ts +12 -0
  30. package/dist/application-spec/enhanced-json/validate-enhanced-json-value-caps.js +1 -0
  31. package/dist/application-spec/enhanced-json/validate-no-legacy-code-ref.d.ts +13 -0
  32. package/dist/application-spec/enhanced-json/validate-no-legacy-code-ref.js +1 -0
  33. package/dist/application-spec/errors/diagnostic-codes.d.ts +9 -0
  34. package/dist/application-spec/errors/diagnostic-codes.js +1 -1
  35. package/dist/application-spec/errors/diagnostic-messages.d.ts +12 -0
  36. package/dist/application-spec/errors/diagnostic-messages.js +1 -1
  37. package/dist/application-spec/generate-application/code/project-scaffolding.d.ts +7 -0
  38. package/dist/application-spec/generate-application/code/project-scaffolding.js +2 -2
  39. package/dist/application-spec/generate-application/code/standalone-app-files.d.ts +2 -2
  40. package/dist/application-spec/generate-application/code/standalone-app-files.js +1 -1
  41. package/dist/application-spec/generate-application/code/templates/configurator-config.js +6 -4
  42. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-component-optics.js +4 -4
  43. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-defaults.d.ts +4 -2
  44. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-defaults.js +1 -1
  45. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-domain-block.js +48 -48
  46. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-phx-globals.js +3 -0
  47. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-relation-expressions.js +1 -1
  48. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-resources.d.ts +6 -8
  49. package/dist/application-spec/generate-application/code/templates/domain-spec/generate-resources.js +11 -11
  50. package/dist/application-spec/generate-application/code/templates/domain-spec/index.d.ts +1 -1
  51. package/dist/application-spec/generate-application/code/templates/domain-spec/index.js +1 -1
  52. package/dist/application-spec/generate-application/code/templates/domain-spec.js +12 -12
  53. package/dist/application-spec/generate-application/code/templates/domain.js +3 -3
  54. package/dist/application-spec/generate-application/code/templates/globals.js +5 -4
  55. package/dist/application-spec/generate-application/code/templates/index.d.ts +0 -2
  56. package/dist/application-spec/generate-application/code/templates/index.js +1 -1
  57. package/dist/application-spec/generate-application/code/templates/package-json.js +1 -1
  58. package/dist/application-spec/generate-application/code/templates/skills/phoenix-review-skill.js +8 -2
  59. package/dist/application-spec/generate-application/code/templates/skills/phoenix-skill.js +1 -1
  60. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.d.ts +11 -4
  61. package/dist/application-spec/generate-application/code/templates/skills/sdk-content.js +2 -2
  62. package/dist/application-spec/generate-application/code/templates/webhook-index.d.ts +6 -1
  63. package/dist/application-spec/generate-application/code/templates/webhook-index.js +10 -1
  64. package/dist/application-spec/generate-application/runtime/application-runtime.d.ts +1 -3
  65. package/dist/application-spec/generate-application/runtime/configurator-runtime/configurator-runtime.d.ts +1 -3
  66. package/dist/application-spec/generate-application/runtime/sections/build-sdk-optic.d.ts +1 -1
  67. package/dist/application-spec/generate-application/runtime/sections/build-sdk-optic.js +1 -1
  68. package/dist/application-spec/generate-application/runtime/sections/component-optic.d.ts +2 -1
  69. package/dist/application-spec/generate-application/runtime/sections/expression-runtime.js +1 -1
  70. package/dist/application-spec/generate-application/runtime/sections/transformers-runtime.d.ts +2 -4
  71. package/dist/application-spec/index.d.ts +1 -0
  72. package/dist/application-spec/index.js +1 -1
  73. package/dist/application-spec/parse-application-files/categorize/categorize-files.d.ts +6 -0
  74. package/dist/application-spec/parse-application-files/categorize/categorize-files.js +1 -1
  75. package/dist/application-spec/parse-application-files/categorize/module-analysis.d.ts +1 -1
  76. package/dist/application-spec/parse-application-files/categorize/module-analysis.js +1 -1
  77. package/dist/application-spec/parse-application-files/raw-spec/raw-assistant.d.ts +16 -3
  78. package/dist/application-spec/parse-application-files/raw-spec/raw-assistant.js +1 -1
  79. package/dist/application-spec/parse-application-files/raw-spec/raw-spec-file.js +1 -1
  80. package/dist/application-spec/parse-application-files/spec/application/admin-spec/admin-spec.js +1 -1
  81. package/dist/application-spec/parse-application-files/spec/application/configurator-spec/configurator-spec.js +1 -1
  82. package/dist/application-spec/parse-application-files/spec/components/component-entry.d.ts +1 -9
  83. package/dist/application-spec/parse-application-files/spec/components/component-entry.js +1 -1
  84. package/dist/application-spec/parse-application-files/spec/components/component-filter.d.ts +1 -54
  85. package/dist/application-spec/parse-application-files/spec/components/component-filter.js +1 -1
  86. package/dist/application-spec/parse-application-files/spec/components/index.d.ts +1 -1
  87. package/dist/application-spec/parse-application-files/spec/components/index.js +1 -1
  88. package/dist/application-spec/parse-application-files/spec/expressions/expression.d.ts +1 -28
  89. package/dist/application-spec/parse-application-files/spec/expressions/expression.js +1 -1
  90. package/dist/application-spec/parse-application-files/spec/expressions/expressions.d.ts +1 -1
  91. package/dist/application-spec/parse-application-files/spec/expressions/expressions.js +1 -1
  92. package/dist/application-spec/parse-application-files/spec/expressions/index.d.ts +0 -1
  93. package/dist/application-spec/parse-application-files/spec/expressions/index.js +1 -1
  94. package/dist/application-spec/parse-application-files/spec/expressions/memo-eval-plan.js +1 -1
  95. package/dist/application-spec/parse-application-files/spec/expressions/user-expressions.js +1 -1
  96. package/dist/application-spec/parse-application-files/spec/model/defaults.d.ts +7 -2
  97. package/dist/application-spec/parse-application-files/spec/model/defaults.js +1 -1
  98. package/dist/application-spec/parse-application-files/spec/relations/reference-field-type.d.ts +25 -0
  99. package/dist/application-spec/parse-application-files/spec/relations/reference-field-type.js +1 -0
  100. package/dist/application-spec/parse-application-files/spec/relations/relation-field-mismatch.d.ts +46 -0
  101. package/dist/application-spec/parse-application-files/spec/relations/relation-field-mismatch.js +1 -0
  102. package/dist/application-spec/parse-application-files/spec/relations/relations.d.ts +4 -3
  103. package/dist/application-spec/parse-application-files/spec/relations/relations.js +1 -1
  104. package/dist/application-spec/parse-application-files/spec/sections/assistant/assistant-schema.js +1 -1
  105. package/dist/application-spec/parse-application-files/spec/sections/infra.d.ts +2 -0
  106. package/dist/application-spec/parse-application-files/spec/sections/infra.js +1 -1
  107. package/dist/client/phoenix-api.d.ts +96 -0
  108. package/dist/configurator/application-runtime/extensions/create-configurator-extensions.js +1 -1
  109. package/dist/configurator/application-runtime/extensions/selectors.d.ts +3 -1
  110. package/dist/configurator/application-runtime/extensions/selectors.js +1 -1
  111. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.d.ts +3 -1
  112. package/dist/configurator/application-runtime/extensions/systems/assistant-system/assistant-system.js +1 -1
  113. package/dist/configurator/application-runtime/extensions/systems/drag-and-drop-system/drag-and-drop-system.d.ts +3 -3
  114. package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.d.ts +14 -4
  115. package/dist/configurator/application-runtime/extensions/systems/graphql-system/graphql-system.js +1 -1
  116. package/dist/configurator/application-runtime/extensions/systems/graphql-system/inject-assistant-lenses.d.ts +11 -0
  117. package/dist/configurator/application-runtime/extensions/systems/graphql-system/inject-assistant-lenses.js +1 -0
  118. package/dist/configurator/application-runtime/extensions/systems/layout-system/layout-system.d.ts +2 -2
  119. package/dist/configurator/application-runtime/extensions/systems/layout-system/layout-system.js +1 -1
  120. package/dist/configurator/common/configurator-interface.d.ts +17 -1
  121. package/dist/configurator/common/configurator-interface.js +1 -1
  122. package/dist/configurator/common/frontend-analytics.d.ts +2 -0
  123. package/dist/configurator/common/frontend-analytics.js +1 -1
  124. package/dist/configurator/common/index.d.ts +1 -0
  125. package/dist/configurator/common/index.js +1 -1
  126. package/dist/configurator/common/use-finalize-action.d.ts +27 -0
  127. package/dist/configurator/common/use-finalize-action.js +1 -0
  128. package/dist/configurator/configurator-context/configurator-hooks/layout-hooks.d.ts +1 -1
  129. package/dist/configurator/pages/DefaultConfiguratorLayout.d.ts +2 -2
  130. package/dist/configurator/pages/LoadedConfiguratorDetailPage.js +1 -1
  131. package/dist/configurator/pages/configurator-layout-name.d.ts +2 -0
  132. package/dist/configurator/pages/configurator-layout-name.js +1 -0
  133. package/dist/configurator/pages/default-configurator-elements.d.ts +7 -0
  134. package/dist/configurator/pages/default-configurator-elements.js +1 -0
  135. package/dist/configurator/pages/index.d.ts +1 -0
  136. package/dist/configurator/pages/index.js +1 -1
  137. package/dist/configurator/scene/scene-controls/hotspot-drag-handle/HotspotDragHandle.d.ts +1 -1
  138. package/dist/configurator/scene/scene-controls/hotspot-drag-handle/HotspotDragSceneHandle.d.ts +1 -1
  139. package/dist/configurator/scene/scene-entity/dimension-indicators/DimensionIndicator.d.ts +1 -1
  140. package/dist/configurator/scene/scene-entity/dimension-indicators/DimensionIndicatorInternal.d.ts +1 -1
  141. package/dist/configurator/scene/scene-entity/drag-and-drop/shared.d.ts +2 -2
  142. package/dist/configurator/scene/scene-entity/drag-and-drop/use-drag-object.d.ts +1 -1
  143. package/dist/configurator/scene/scene-entity/materials/RemoteReplacedMaterial.js +1 -1
  144. package/dist/configurator/scene/scene-entity/objects/SceneEntityObjectTextDecal.d.ts +1 -1
  145. package/dist/configurator/ui/assistant/AssistantMarkdown.d.ts +1 -1
  146. package/dist/configurator/ui/assistant/AssistantMarkdown.js +1 -1
  147. package/dist/configurator/ui/assistant/AssistantThread.js +1 -1
  148. package/dist/configurator/ui/assistant/entity-link/AssistantEntityLink.d.ts +13 -0
  149. package/dist/configurator/ui/assistant/entity-link/AssistantEntityLink.js +1 -0
  150. package/dist/configurator/ui/assistant/entity-link/entity-link-selection.d.ts +22 -0
  151. package/dist/configurator/ui/assistant/entity-link/entity-link-selection.js +1 -0
  152. package/dist/configurator/ui/assistant/entity-link/entity-link-state.d.ts +27 -0
  153. package/dist/configurator/ui/assistant/entity-link/entity-link-state.js +1 -0
  154. package/dist/configurator/ui/assistant/entity-link/entity-link-target.d.ts +5 -0
  155. package/dist/configurator/ui/assistant/entity-link/entity-link-target.js +1 -0
  156. package/dist/configurator/ui/assistant/entity-link/index.d.ts +3 -0
  157. package/dist/configurator/ui/assistant/entity-link/index.js +1 -0
  158. package/dist/configurator/ui/configurator-layout/sidebar-keys/index.d.ts +1 -0
  159. package/dist/configurator/ui/configurator-layout/sidebar-keys/index.js +1 -0
  160. package/dist/configurator/ui/configurator-layout/sidebar-keys/sidebar-keys.d.ts +11 -0
  161. package/dist/configurator/ui/configurator-layout/sidebar-keys/sidebar-keys.js +1 -0
  162. package/dist/configurator/ui/configurator-layout/slots/desktop-sidebar/DesktopSidebar.d.ts +101 -0
  163. package/dist/configurator/ui/configurator-layout/slots/desktop-sidebar/DesktopSidebar.js +16 -0
  164. package/dist/configurator/ui/configurator-layout/slots/desktop-sidebar/index.d.ts +1 -0
  165. package/dist/configurator/ui/configurator-layout/slots/desktop-sidebar/index.js +1 -0
  166. package/dist/configurator/ui/configurator-layout/slots/services/InvariantViolations.d.ts +4 -4
  167. package/dist/configurator/ui/configurator-layout/slots/services/InvariantViolations.js +1 -1
  168. package/dist/configurator/ui/configurator-layout/slots/services/SideEffects.d.ts +3 -6
  169. package/dist/configurator/ui/configurator-layout/slots/services/SideEffects.js +1 -1
  170. package/dist/configurator/ui/configurator-layout/slots/slots.d.ts +1 -0
  171. package/dist/configurator/ui/configurator-layout/slots/slots.js +1 -1
  172. package/dist/configurator/ui/configurator-layout/universal/DesktopLayout.d.ts +0 -74
  173. package/dist/configurator/ui/configurator-layout/universal/DesktopLayout.js +5 -20
  174. package/dist/configurator/ui/configurator-layout/universal/DesktopPreview.js +1 -1
  175. package/dist/configurator/ui/configurator-layout/universal/MobileLayout.js +4 -4
  176. package/dist/configurator/ui/configurator-layout/universal/MobilePreview.js +1 -1
  177. package/dist/configurator/ui/configurator-layout/universal/use-layout-scene-safe-area.d.ts +47 -0
  178. package/dist/configurator/ui/configurator-layout/universal/use-layout-scene-safe-area.js +1 -0
  179. package/dist/configurator/ui/configurator-layout/universal/use-scene-safe-area.d.ts +11 -26
  180. package/dist/configurator/ui/configurator-layout/universal/use-scene-safe-area.js +1 -1
  181. package/dist/configurator/ui/legacy/layout/steps/StepsNavigation.d.ts +2 -2
  182. package/dist/configurator/ui/phoenix-layout-elements/header/common/step-navigation/StepsNavigation.d.ts +2 -2
  183. package/dist/docs/complex-use-cases/filtered-controls-with-fix-dialog.mdx +16 -19
  184. package/dist/docs/complex-use-cases/sketching.mdx +0 -38
  185. package/dist/docs/controls/select-attribute/cardselect.mdx +9 -13
  186. package/dist/docs/dimensions/3d-scene-integration/dimension-indicators.mdx +2 -2
  187. package/dist/docs/dimensions/3d-scene-integration/editable-angle-indicator.mdx +1 -1
  188. package/dist/docs/dimensions/3d-scene-integration/editable-distance-dimension-indicator.mdx +1 -1
  189. package/dist/docs/dimensions/3d-scene-integration/list-selector-dimension-indicator.mdx +1 -1
  190. package/dist/docs/drag-and-drop/drag-handle.mdx +1 -1
  191. package/dist/docs/drag-and-drop/hotspot-handle.mdx +1 -1
  192. package/dist/docs/drag-and-drop/planes.mdx +1 -1
  193. package/dist/docs/drag-and-drop/rotatable.mdx +2 -2
  194. package/dist/docs/index.json +42 -1
  195. package/dist/docs/integrations/woocommerce/local-development.mdx +1 -1
  196. package/dist/docs/layouts/custom-layout.mdx +1400 -0
  197. package/dist/docs/layouts/header/fixed.mdx +2 -2
  198. package/dist/docs/layouts/header/floating.mdx +2 -2
  199. package/dist/docs/layouts/sidebar/in-a-custom-layout.mdx +380 -0
  200. package/dist/docs/layouts/sidebar-footer/basic.mdx +32 -77
  201. package/dist/docs/other-features/client-side-rendering/declarative.mdx +1 -1
  202. package/dist/docs/other-features/side-effects.mdx +8 -11
  203. package/dist/docs/other-features/transformers.mdx +4 -0
  204. package/dist/docs/other-features/violation-messages.mdx +52 -56
  205. package/dist/docs/phoenix/application-states.mdx +9 -7
  206. package/dist/docs/phoenix/configurator-interface.mdx +204 -82
  207. package/dist/docs/phoenix/domain-model.mdx +4 -0
  208. package/dist/docs/phoenix/finalization.mdx +1 -1
  209. package/dist/docs/phoenix/layout-slots.mdx +114 -0
  210. package/dist/docs/phoenix/phoenix-cli.mdx +27 -28
  211. package/dist/docs/phoenix/project-structure.mdx +18 -10
  212. package/dist/docs/phoenix/quickstart.mdx +2 -2
  213. package/dist/docs/phoenix/sdk-builder-workflow.mdx +2 -2
  214. package/dist/docs/phoenix/testing.mdx +140 -0
  215. package/dist/docs/phoenix/webhook-membership.mdx +10 -9
  216. package/dist/docs/phoenix/webhooks.mdx +19 -2
  217. package/dist/domain/admin-domain/implementation/common-admin-expressions.d.ts +26 -11
  218. package/dist/domain/admin-domain/implementation/common-admin-publish.d.ts +1 -2
  219. package/dist/domain/admin-domain/index.js +1 -1
  220. package/dist/domain/application/GetApplicationWrapperHandler.d.ts +1 -1
  221. package/dist/domain/application/application-config.d.ts +7 -3
  222. package/dist/domain/application/assistant/assistant-fields.d.ts +12 -0
  223. package/dist/domain/application/assistant/assistant-fields.js +1 -0
  224. package/dist/domain/application/assistant/assistant-manifest.d.ts +9 -1
  225. package/dist/domain/application/assistant/assistant-resolved-manifest.d.ts +38 -2
  226. package/dist/domain/application/assistant/assistant-resolved-manifest.js +1 -1
  227. package/dist/domain/application/assistant/build-assistant-lenses.d.ts +14 -0
  228. package/dist/domain/application/assistant/build-assistant-lenses.js +5 -0
  229. package/dist/domain/application/assistant/build-assistant-manifest.js +1 -1
  230. package/dist/domain/application/assistant/create-assistant-execution-schema.d.ts +32 -0
  231. package/dist/domain/application/assistant/create-assistant-execution-schema.js +1 -0
  232. package/dist/domain/application/assistant/generate-assistant-prompt.js +1 -1
  233. package/dist/domain/application/assistant/index.d.ts +6 -1
  234. package/dist/domain/application/assistant/index.js +1 -1
  235. package/dist/domain/application/assistant/session-setup/AssistantSetupHandler.d.ts +20 -0
  236. package/dist/domain/application/assistant/session-setup/AssistantSetupHandler.js +1 -0
  237. package/dist/domain/application/assistant/session-setup/apply-assistant-setup.d.ts +10 -0
  238. package/dist/domain/application/assistant/session-setup/apply-assistant-setup.js +1 -0
  239. package/dist/domain/application/assistant/session-setup/assistant-setup-manifest.d.ts +48 -0
  240. package/dist/domain/application/assistant/session-setup/assistant-setup-manifest.js +1 -0
  241. package/dist/domain/application/assistant/session-setup/create-session-assistant.d.ts +15 -0
  242. package/dist/domain/application/assistant/session-setup/create-session-assistant.js +1 -0
  243. package/dist/domain/application/assistant/session-setup/index.d.ts +4 -0
  244. package/dist/domain/application/assistant/session-setup/index.js +1 -0
  245. package/dist/domain/application/configurator-builder.d.ts +5 -2
  246. package/dist/domain/application/configurator-builder.js +1 -1
  247. package/dist/domain/application/create-initial-published-data.d.ts +5 -5
  248. package/dist/domain/application/index.d.ts +0 -1
  249. package/dist/domain/application/index.js +1 -1
  250. package/dist/domain/application/published-data/map-published-chunked-data.d.ts +1 -1
  251. package/dist/domain/application/published-data/map-published-data.d.ts +7 -3
  252. package/dist/domain/core/component/domain-component-optic.d.ts +1 -2
  253. package/dist/domain/core/component/domain-component-optic.js +2 -2
  254. package/dist/domain/core/component/system-component-filter.d.ts +15 -2
  255. package/dist/domain/core/expression/constant-expressions.d.ts +16 -8
  256. package/dist/domain/core/expression/custom-expression.d.ts +16 -3
  257. package/dist/domain/core/invariant/custom-invariants.d.ts +6 -14
  258. package/dist/domain/core/invariant/invariants.d.ts +1 -4
  259. package/dist/domain/core/invariant/violation.d.ts +50 -2
  260. package/dist/domain/core/invariant/violation.js +1 -1
  261. package/dist/domain/core/model/model.d.ts +1 -1
  262. package/dist/domain/core/recipe/recipes.d.ts +18 -50
  263. package/dist/domain/core/recipe/recipes.js +1 -1
  264. package/dist/domain/core/relation/all-of-type-relation.d.ts +8 -21
  265. package/dist/domain/core/relation/all-of-type-relation.js +1 -1
  266. package/dist/domain/core/relation/direct-relation.d.ts +13 -24
  267. package/dist/domain/core/relation/index.d.ts +0 -1
  268. package/dist/domain/core/relation/indirect-relation.d.ts +12 -67
  269. package/dist/domain/core/relation/indirect-relation.js +1 -1
  270. package/dist/domain/core/relation/relation-factory.d.ts +19 -15
  271. package/dist/domain/core/relation/relation-factory.js +1 -1
  272. package/dist/domain/core/state/state.d.ts +1 -1
  273. package/dist/domain/domain-runtime/access/selectors.d.ts +9 -0
  274. package/dist/domain/domain-runtime/access/selectors.js +1 -1
  275. package/dist/domain/domain-runtime/access/types.d.ts +2 -0
  276. package/dist/domain/domain-runtime/access/types.js +1 -1
  277. package/dist/domain/domain-runtime/domain-context/selectors.d.ts +14 -13
  278. package/dist/domain/domain-runtime/domain-context/selectors.js +1 -1
  279. package/dist/domain/domain-runtime/domain-context/types.d.ts +4 -1
  280. package/dist/domain/domain-runtime/domain-runtime.d.ts +32 -16
  281. package/dist/domain/domain-runtime/errors/implementation-error-collector.d.ts +19 -0
  282. package/dist/domain/domain-runtime/errors/implementation-error-collector.js +1 -0
  283. package/dist/domain/domain-runtime/errors/implementation-error.d.ts +46 -0
  284. package/dist/domain/domain-runtime/errors/implementation-error.js +1 -0
  285. package/dist/domain/domain-runtime/errors/implementation-errors.d.ts +13 -0
  286. package/dist/domain/domain-runtime/errors/implementation-errors.js +1 -0
  287. package/dist/domain/domain-runtime/errors/index.d.ts +4 -0
  288. package/dist/domain/domain-runtime/errors/index.js +1 -0
  289. package/dist/domain/domain-runtime/errors/to-implementation-errors.d.ts +10 -0
  290. package/dist/domain/domain-runtime/errors/to-implementation-errors.js +1 -0
  291. package/dist/domain/domain-runtime/index.d.ts +1 -0
  292. package/dist/domain/domain-runtime/index.js +1 -1
  293. package/dist/domain/domain-runtime/spec/create-violation-expressions.d.ts +24 -0
  294. package/dist/domain/domain-runtime/spec/create-violation-expressions.js +1 -0
  295. package/dist/domain/domain-runtime/spec/index.d.ts +1 -1
  296. package/dist/domain/domain-runtime/spec/index.js +1 -1
  297. package/dist/domain/domain-runtime/spec/initialize.d.ts +11 -0
  298. package/dist/domain/domain-runtime/spec/initialize.js +1 -1
  299. package/dist/domain/domain-runtime/spec/module-checks/index.d.ts +1 -1
  300. package/dist/domain/domain-runtime/spec/module-checks/project-modules.d.ts +8 -1
  301. package/dist/domain/domain-runtime/spec/module-checks/project-modules.js +1 -1
  302. package/dist/domain/domain-runtime/spec/module-checks/resolve-action-modules.js +1 -1
  303. package/dist/domain/domain-runtime/spec/module-checks/resolve-expression-modules.js +1 -1
  304. package/dist/domain/domain-runtime/spec/module-checks/resolve-imported-transformers.d.ts +7 -7
  305. package/dist/domain/domain-runtime/spec/module-checks/resolve-imported-transformers.js +1 -1
  306. package/dist/domain/domain-runtime/spec/module-checks/resolve-invariant-modules.d.ts +2 -2
  307. package/dist/domain/domain-runtime/spec/module-checks/resolve-invariant-modules.js +1 -1
  308. package/dist/domain/domain-runtime/spec/selectors.js +1 -1
  309. package/dist/domain/domain-runtime/spec/types.d.ts +2 -0
  310. package/dist/domain/extensions/attribute-switch.d.ts +1 -1
  311. package/dist/domain/extensions/attribute-switch.js +1 -1
  312. package/dist/domain/extensions/canvas-config.d.ts +1 -1
  313. package/dist/domain/extensions/client-side-image.d.ts +2 -2
  314. package/dist/domain/extensions/client-side-image.js +1 -1
  315. package/dist/domain/extensions/common/angle-indicator-schema.d.ts +2 -2
  316. package/dist/domain/extensions/common/dimension-indicator-schema.d.ts +2 -2
  317. package/dist/domain/extensions/editable-angle-indicator.d.ts +1 -1
  318. package/dist/domain/extensions/editable-distance-dimension-indicator.d.ts +1 -1
  319. package/dist/domain/extensions/editable-offset-indicator.d.ts +1 -1
  320. package/dist/domain/extensions/editable-offset-indicator.js +1 -1
  321. package/dist/domain/extensions/fit-selection-orthographic-camera-component.js +1 -1
  322. package/dist/domain/extensions/fit-selection-perspective-camera-component.js +1 -1
  323. package/dist/domain/extensions/horizontal-tabs.d.ts +2 -2
  324. package/dist/domain/extensions/list-selector-dimension-indicator.d.ts +1 -1
  325. package/dist/domain/extensions/navigation-steps.d.ts +2 -2
  326. package/dist/domain/extensions/offset-indicator.js +1 -1
  327. package/dist/domain/extensions/rotation-handle.d.ts +2 -2
  328. package/dist/domain/extensions/save-template-thumbnail.d.ts +2 -2
  329. package/dist/domain/extensions/save-template-thumbnail.js +1 -1
  330. package/dist/domain/extensions/scene-entity-animation.js +1 -1
  331. package/dist/domain/mocks/create-mock-domain-context.d.ts +1 -1
  332. package/dist/domain/mocks/create-mock-domain-runtime.d.ts +18 -9
  333. package/dist/domain/mocks/create-mock-domain-runtime.js +1 -1
  334. package/dist/domain/mocks/create-mock-domain.d.ts +1 -1
  335. package/dist/domain/mocks/create-mock-domain.js +1 -1
  336. package/dist/domain/mocks/create-mock-state.d.ts +2 -2
  337. package/dist/domain/mocks/create-test-application-config.d.ts +59 -0
  338. package/dist/domain/mocks/create-test-application-config.js +1 -0
  339. package/dist/domain/mocks/index.d.ts +1 -0
  340. package/dist/domain/mocks/index.js +1 -1
  341. package/dist/domain/projections/blender-projections/camera.d.ts +1 -1
  342. package/dist/domain/system-components/application-config.d.ts +2 -2
  343. package/dist/domain/system-components/child-entity-selection.js +1 -1
  344. package/dist/domain/system-components/collision-box-geometry.d.ts +4 -2
  345. package/dist/domain/system-components/collision-geometry.d.ts +4 -2
  346. package/dist/domain/system-components/collision-point-geometry.d.ts +4 -2
  347. package/dist/domain/system-components/common/material-override-schema.d.ts +2 -2
  348. package/dist/domain/system-components/common/recipes.d.ts +21 -3
  349. package/dist/domain/system-components/common/recipes.js +1 -1
  350. package/dist/domain/system-components/constraint.d.ts +10 -23
  351. package/dist/domain/system-components/drag-handle.d.ts +1 -1
  352. package/dist/domain/system-components/drag-handle.js +1 -1
  353. package/dist/domain/system-components/fit-entity-orthographic-camera-component.js +1 -1
  354. package/dist/domain/system-components/fit-entity-perspective-camera-component.js +1 -1
  355. package/dist/domain/system-components/fit-root-orthographic-camera-component.js +1 -1
  356. package/dist/domain/system-components/fit-root-perspective-camera-component.js +1 -1
  357. package/dist/domain/system-components/hotspot-drag-handle.d.ts +1 -1
  358. package/dist/domain/system-components/hotspot-drag-handle.js +1 -1
  359. package/dist/domain/system-components/material-swatch.js +1 -1
  360. package/dist/domain/system-components/scene-entity-material-override.d.ts +1 -1
  361. package/dist/domain/system-components/scene-entity-object-material-override.d.ts +1 -1
  362. package/dist/domain/system-components/scene-entity-object-text-decal.d.ts +1 -1
  363. package/dist/domain/system-components/scene-entity-object-transimissive-material-override.d.ts +1 -1
  364. package/dist/domain/system-components/scene-entity-transimissive-material-override.d.ts +1 -1
  365. package/dist/domain/system-components/static-orthographic-camera-component.js +1 -1
  366. package/dist/domain/system-components/static-perspective-camera-component.js +1 -1
  367. package/dist/domain/utils/eval-cache.d.ts +1 -1
  368. package/dist/domain/utils/map-nested-object.d.ts +1 -1
  369. package/dist/editor/domain-editors/use-implementation-files.d.ts +1 -2
  370. package/dist/editor/mocks/EditorMockContext.js +1 -1
  371. package/dist/legacy/domain-cli/gen/configurator-builder.js +13 -12
  372. package/dist/legacy/domain-cli/gen/constant-expressions.js +1 -1
  373. package/dist/legacy/domain-cli/gen/defaults.js +1 -7
  374. package/dist/legacy/domain-cli/gen/invariants.js +3 -4
  375. package/dist/legacy/domain-cli/gen/relations.js +1 -1
  376. package/dist/legacy/domain-cli/utils/cache.d.ts +1 -1
  377. package/dist/legacy/domain-cli/utils/cache.js +1 -1
  378. package/dist/legacy/domain-spec/__generated/domain-schema.d.ts +81 -68
  379. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/claude-md.d.ts +1 -1
  380. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/cursor-rules.d.ts +1 -1
  381. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/shared-sdk-content.d.ts +1 -1
  382. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/agents/shared-sdk-content.js +7 -1
  383. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/domain-index.js +15 -13
  384. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-admin.js +18 -16
  385. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-configurator.js +14 -12
  386. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-embedded-admin.js +13 -11
  387. package/dist/legacy/phoenix-cli/project-gen/generators/file-templates/frontend-embedded-configurator.js +13 -11
  388. package/dist/phoenix/application-spec/application-spec-builder.js +1 -1
  389. package/dist/phoenix/commands/check.js +1 -1
  390. package/dist/phoenix/commands/deploy.js +1 -1
  391. package/dist/phoenix/commands/fix.js +1 -1
  392. package/dist/phoenix/commands/init.d.ts +4 -4
  393. package/dist/phoenix/commands/init.js +1 -1
  394. package/dist/phoenix/services/application-spec-project-watcher.js +3 -3
  395. package/dist/phoenix/services/source-archive.d.ts +1 -0
  396. package/dist/phoenix/services/source-archive.js +1 -1
  397. package/dist/phoenix/utils/git/index.d.ts +1 -0
  398. package/dist/phoenix/utils/git/index.js +1 -0
  399. package/dist/phoenix/utils/git/is-inside-git-repository.d.ts +6 -0
  400. package/dist/phoenix/utils/git/is-inside-git-repository.js +1 -0
  401. package/dist/phoenix/utils/index.d.ts +1 -0
  402. package/dist/phoenix/utils/index.js +1 -1
  403. package/dist/react-sdk/application-runtime/hooks/use-access-service.d.ts +2 -0
  404. package/dist/react-sdk/application-runtime/mocks/create-mock-application-runtime.js +1 -1
  405. package/dist/react-sdk/application-runtime/routing/access-service.d.ts +1 -0
  406. package/dist/react-sdk/application-runtime/runtime/create-application-runtime.d.ts +33 -16
  407. package/dist/react-sdk/application-runtime/runtime/create-application-runtime.js +1 -1
  408. package/dist/react-sdk/domain-context/common-hooks/use-configurator-messages.d.ts +30 -0
  409. package/dist/react-sdk/domain-context/common-hooks/use-configurator-messages.js +1 -0
  410. package/dist/react-sdk/domain-context/common-hooks/use-domain-context.d.ts +4 -4
  411. package/dist/react-sdk/domain-context/index.d.ts +2 -1
  412. package/dist/react-sdk/domain-context/index.js +1 -1
  413. package/dist/react-sdk/domain-context/system-hooks/navigation-hooks.d.ts +6 -0
  414. package/dist/react-sdk/domain-context/system-hooks/navigation-hooks.js +1 -1
  415. package/dist/react-sdk/domain-controls/hooks/use-angle-dimension.d.ts +1 -1
  416. package/dist/ui-sdk/theme/types.d.ts +1 -1
  417. package/dist/webhook/builders/webhook-builder.js +1 -1
  418. package/package.json +3 -3
  419. package/schema/domain-spec.json +1115 -209
  420. package/dist/application-spec/generate-application/code/templates/prettier-ignore.d.ts +0 -1
  421. package/dist/application-spec/generate-application/code/templates/prettier-ignore.js +0 -6
  422. package/dist/application-spec/generate-application/code/templates/webhook-implementation.d.ts +0 -1
  423. package/dist/application-spec/generate-application/code/templates/webhook-implementation.js +0 -7
  424. package/dist/domain/application/resource-builder.d.ts +0 -13
  425. package/dist/domain/application/resource-builder.js +0 -1
  426. package/dist/domain/core/relation/relation-implementation.d.ts +0 -7
  427. package/dist/domain/domain-runtime/spec/invariant-builder.d.ts +0 -26
  428. package/dist/domain/domain-runtime/spec/invariant-builder.js +0 -1
  429. /package/dist/{domain/core/relation/relation-implementation.js → application-spec/core/expressions/relation-expression-params.js} +0 -0
  430. /package/dist/application-spec/{core → enhanced-json}/eval-code-uses-self.d.ts +0 -0
  431. /package/dist/application-spec/{core → enhanced-json}/eval-code-uses-self.js +0 -0
  432. /package/dist/application-spec/{core → enhanced-json}/eval-to-constant.js +0 -0
@@ -0,0 +1,101 @@
1
+ import type { ComponentsOverrides } from '@mui/material';
2
+ import type { CSSProperties } from 'react';
3
+ import type { ValueOf } from '@salsita-ai/common/utils';
4
+ declare const MuiSidebarComponentName: 'PhxDesktopSidebar';
5
+ declare const MuiSidebarSlots: {
6
+ readonly Root: 'root';
7
+ readonly Header: 'header';
8
+ readonly Body: 'body';
9
+ readonly Content: 'content';
10
+ readonly Tabs: 'tabs';
11
+ readonly Footer: 'footer';
12
+ };
13
+ type DesktopSidebarSlots = ValueOf<typeof MuiSidebarSlots>;
14
+ declare module '@mui/material/styles' {
15
+ interface ComponentNameToClassKey {
16
+ [MuiSidebarComponentName]: DesktopSidebarSlots;
17
+ }
18
+ interface ComponentsPropsList {
19
+ [MuiSidebarComponentName]: ThemeableDesktopSidebarProps;
20
+ }
21
+ interface Components {
22
+ [MuiSidebarComponentName]?: {
23
+ defaultProps?: ComponentsPropsList['PhxDesktopSidebar'];
24
+ styleOverrides?: ComponentsOverrides<Theme>['PhxDesktopSidebar'];
25
+ };
26
+ }
27
+ }
28
+ /** Which side of its layout the sidebar is on. */
29
+ export type DesktopSidebarSide = 'start' | 'end';
30
+ interface SidebarOwnerState {
31
+ readonly isHeaderEmpty?: boolean;
32
+ readonly isContentEmpty?: boolean;
33
+ }
34
+ export interface ThemeableDesktopSidebarProps extends SidebarOwnerState {
35
+ /**
36
+ * Background applied to sidebar sections (header, body, footer).
37
+ *
38
+ * @default theme.palette.background.paper
39
+ */
40
+ readonly background?: CSSProperties['background'];
41
+ /**
42
+ * Border applied to sidebar sections.
43
+ *
44
+ * @default 0
45
+ */
46
+ readonly border?: CSSProperties['border'];
47
+ /**
48
+ * Corner radius applied to sidebar sections.
49
+ *
50
+ * @default theme.shape.sidebarBorderRadius ?? theme.shape.borderRadius
51
+ */
52
+ readonly borderRadius?: CSSProperties['borderRadius'];
53
+ /**
54
+ * CSS filter applied to the sidebar root (e.g. drop-shadow for elevation).
55
+ *
56
+ * @default elevation[1] drop-shadow
57
+ */
58
+ readonly filter?: CSSProperties['filter'];
59
+ /**
60
+ * Spacing value for sidebar inner padding.
61
+ * Accepts a theme spacing multiplier or a CSS value.
62
+ *
63
+ * @default theme.spacing(2.5)
64
+ */
65
+ readonly padding?: number | string;
66
+ /**
67
+ * Background gradient for scrollable edge indicators.
68
+ * Applied to `::before` and `::after` pseudo-elements on the content area.
69
+ *
70
+ * @default linear-gradient(180deg, hsl(from black h s l / 12%), transparent 8px)
71
+ */
72
+ readonly scrollableIndicatorBackground?: CSSProperties['background'];
73
+ /**
74
+ * Inline size (width) of the sidebar. Not read from the theme: the sidebar takes its width from its
75
+ * `width` prop, which the built-in desktop layout sets from `ThemeableDesktopLayoutProps.sidebarWidth`.
76
+ */
77
+ readonly width?: CSSProperties['width'];
78
+ }
79
+ /** Props of the built-in desktop sidebar. */
80
+ export interface DesktopSidebarProps {
81
+ /**
82
+ * Inline size (width) of the sidebar. Without it the sidebar fills the width and height of its
83
+ * container, which the layout sizes and positions; with it the sidebar takes this width and the
84
+ * height of its content, unless its container stretches it.
85
+ */
86
+ readonly width?: CSSProperties['width'];
87
+ /**
88
+ * Which side of the layout the sidebar is on. The sidebar tabs sit outside the sidebar on the other
89
+ * side: to its left for `end`, to its right for `start`.
90
+ *
91
+ * @default 'end'
92
+ */
93
+ readonly side?: DesktopSidebarSide;
94
+ }
95
+ /**
96
+ * The built-in desktop sidebar: tabs, back button, property page, footer and the assistant panel, with
97
+ * their spacing, scrolling and empty states. In fullscreen it stays in place, transparent and inert;
98
+ * the layout decides whether it keeps its space.
99
+ */
100
+ export declare const DesktopSidebar: ({ width, side }: DesktopSidebarProps) => import("react/jsx-runtime").JSX.Element;
101
+ export {};
@@ -0,0 +1,16 @@
1
+ import{jsx as r,jsxs as a}from"react/jsx-runtime";import{paperClasses as e,styled as d,tabsClasses as i,useTheme as t,useThemeProps as o}from"@mui/material";import{useMemo as n,useState as s}from"react";import{useIsFullscreenActive as b}from"#package/react-sdk";import{attrf as l,commonStyles as p,useInvalidateScrollTimeline as c,useIsEmpty as h}from"#package/ui-sdk";import{ASSISTANT_PANEL_SLOT as m,AssistantPanel as u,useIsAssistantPanelOpen as S}from"../../../assistant/index.js";import{SidebarKeys as g}from"../../sidebar-keys/index.js";import{DesktopSidebarBackButton as k}from"../sidebar-back-button/index.js";import{DesktopSidebarContent as x,useSidebarContent as E}from"../sidebar-contents/index.js";import{DesktopSidebarFooter as f}from"../sidebar-footer/index.js";import{DesktopSidebarTabs as v}from"../sidebar-tabs/index.js";let R="PhxDesktopSidebar",y={Root:d("div",{name:R,slot:"root",shouldForwardProp:r=>"ownerState"!==r})(({ownerState:r})=>[`
2
+ --phx-sidebar-background: ${r.background};
3
+ --phx-sidebar-border: ${r.border};
4
+ --phx-sidebar-filter: ${r.filter};
5
+ --phx-sidebar-padding: ${r.padding};
6
+ --phx-sidebar-radius: ${r.borderRadius}px;
7
+ --phx-sidebar-scrollable-indicator-background: ${r.scrollableIndicatorBackground};
8
+ `,{borderRadius:"var(--phx-sidebar-radius)",display:"grid",filter:"var(--phx-sidebar-filter)",gridTemplateRows:"min-content minmax(0, 1fr) min-content",inlineSize:r.width,...void 0===r.width&&{blockSize:"100%",inlineSize:"100%"},position:"relative","& > *":{pointerEvents:"auto"},"@container style(--inspect: on)":{"--phx-sidebar-background":"hsl(from gold h s l / 50%)"},[`&[data-sidebar*="${g.Visible}"]`]:{opacity:1},[`&[data-sidebar*="${g.Hidden}"]`]:{opacity:0},[`&[data-sidebar*="${g.Assistant}"] > :not([data-sidebar="${m}"])`]:{visibility:"hidden"}}]),Tabs:d("div",{name:R,slot:"tabs",shouldForwardProp:r=>"ownerState"!==r})(({ownerState:r,theme:{spacing:a}})=>({insetBlockStart:0,insetInlineEnd:"100%",maxInlineSize:150,paddingInlineEnd:a(2),position:"absolute",..."start"===r.side&&{insetInlineEnd:"auto",insetInlineStart:"100%",paddingInlineEnd:0,paddingInlineStart:a(2),[`.${i.indicator}`]:{left:0,right:"auto"}},"&:is(:empty)":{padding:0},[`.${e.root}`]:{boxShadow:"none"}})),Header:d("header",{name:R,slot:"header",shouldForwardProp:r=>"ownerState"!==r})({background:"var(--phx-sidebar-background)",border:"var(--phx-sidebar-border)",borderBlockEnd:0,borderStartStartRadius:"inherit",borderStartEndRadius:"inherit",paddingBlock:"calc(0.6 * var(--phx-sidebar-padding))",paddingInline:"var(--phx-sidebar-padding)","&:is(:empty)":{border:0,paddingBlock:0}}),Body:d("div",{name:R,slot:"body",shouldForwardProp:r=>"ownerState"!==r})(({ownerState:r})=>({background:"var(--phx-sidebar-background)",border:"var(--phx-sidebar-border)",borderBlockStart:0,borderBlockEnd:0,display:"grid",position:"relative","[data-sidebar] &":{...r.isHeaderEmpty&&{borderBlockStart:"var(--phx-sidebar-border)",borderStartStartRadius:"inherit",borderStartEndRadius:"inherit",paddingBlockStart:"var(--phx-sidebar-padding)"}},'&:has([data-sidebar*="slot[content]"]:empty)':{...r.isContentEmpty&&{paddingBlock:0}},[`[data-sidebar*="${g.Minimalist}"] &`]:{...r.isContentEmpty&&{border:0}},[`[data-sidebar*="${g.Split}"] &`]:{borderBlockEnd:"var(--phx-sidebar-border)",borderEndStartRadius:"inherit",borderEndEndRadius:"inherit",paddingBlockEnd:"var(--phx-sidebar-padding)"}})),Content:d("div",{name:R,slot:"content",shouldForwardProp:r=>"ownerState"!==r})(({ownerState:r,theme:{spacing:a}})=>({...p.layout.normalizeScrollableContainer,alignContent:"start",borderRadius:"inherit",display:"grid",gap:a(3),padding:"var(--phx-sidebar-padding)","@supports (animation-timeline: scroll())":{"&[data-scrollable]":{scrollTimeline:"--phx-sidebar-timeline y","&::after, &::before":{animation:`${p.keyframes.fadeIn} both`,animationTimeline:"--phx-sidebar-timeline",background:"var(--phx-sidebar-scrollable-indicator-background)",backgroundRepeat:"no-repeat",content:'""',display:"block",insetInline:0,opacity:0,pointerEvents:"none",position:"absolute",zIndex:1},"&::after":{animationDirection:"reverse",animationRange:`calc(100% - ${a(4)}) 100%`,borderEndStartRadius:"inherit",borderEndEndRadius:"inherit",insetBlockStart:"50%",insetBlockEnd:0,scale:"1 -1"},"&::before":{animationRange:`0 ${a(4)}`,borderStartStartRadius:"inherit",borderStartEndRadius:"inherit",insetBlockStart:0,insetBlockEnd:"50%"}}},"&:is(:empty)":{paddingBlock:0},"[data-sidebar] &":{...r.isHeaderEmpty&&{paddingBlockStart:0,"&::before":{borderStartStartRadius:0,borderStartEndRadius:0,insetBlockStart:"var(--phx-sidebar-padding)"}}},[`[data-sidebar*="${g.Split}"] &`]:{paddingBlockEnd:0,"&::after":{borderEndStartRadius:0,borderEndEndRadius:0,insetBlockEnd:"var(--phx-sidebar-padding)"}}})),Footer:d("footer",{name:R,slot:"footer",shouldForwardProp:r=>"ownerState"!==r})(({ownerState:r,theme:{palette:a,spacing:e}})=>({background:"var(--phx-sidebar-background)",border:"var(--phx-sidebar-border)",borderBlockStart:`1px solid ${a.divider}`,borderEndStartRadius:"inherit",borderEndEndRadius:"inherit",padding:"var(--phx-sidebar-padding)","&:is(:empty)":{border:0,paddingBlock:0},[`[data-sidebar*="${g.Minimalist}"] &`]:{...r.isContentEmpty&&{borderBlockStart:"var(--phx-sidebar-border)",borderStartStartRadius:"inherit",borderStartEndRadius:"inherit"}},[`[data-sidebar*="${g.Split}"] &`]:{borderBlockStart:"var(--phx-sidebar-border)",borderStartStartRadius:"inherit",borderStartEndRadius:"inherit",marginBlockStart:e(2)}}))};export const DesktopSidebar=({width:e,side:d="end"})=>{let[i,p]=s(null),[m,B]=s(null),$=n(()=>({current:i}),[i]),w=n(()=>({current:m}),[m]),{palette:I,shape:j,spacing:C}=t(),{background:F=I.background.paper,border:H=0,borderRadius:P=j.sidebarBorderRadius??j.borderRadius,filter:z=`
9
+ drop-shadow(0 1px 1.5px hsl(from ${I.common.black} h s l / 12%))
10
+ drop-shadow(0 1px 0.5px hsl(from ${I.common.black} h s l / 14%))
11
+ drop-shadow(0 2px 0.5px hsl(from ${I.common.black} h s l / 20%))
12
+ `,padding:T=C(2.5),scrollableIndicatorBackground:D=`linear-gradient(
13
+ 180deg,
14
+ hsl(from black h s l / 12%),
15
+ hsl(from black h s l / 0%) 8px
16
+ )`}=o({props:{},name:R}),{hasMiniSidebar:M,hasSplitSidebar:A}=E(),V=S(),q=!b(),G=h($,{disabled:!q}),J=h(w,{disabled:!q});c(w,{disabled:!q});let K={background:F,border:H,borderRadius:P,filter:z,isHeaderEmpty:G,isContentEmpty:J,padding:T,scrollableIndicatorBackground:D,width:e};return a(y.Root,{ownerState:K,"data-sidebar":l({variant:{[`${g.Minimalist}`]:M,[`${g.Split}`]:A},state:{[`${g.Visible}`]:q,[`${g.Hidden}`]:!q,[`${g.Assistant}`]:V}}),inert:q?void 0:"",children:[r(y.Tabs,{ownerState:{...K,side:d},"data-sidebar":"slot[tabs]",children:r(v,{})}),r(y.Header,{ref:p,ownerState:K,"data-sidebar":"slot[header]",children:r(k,{})}),r(y.Body,{ownerState:K,"data-sidebar":"slot[body]",children:r(y.Content,{ref:B,ownerState:K,"data-sidebar":"slot[content]",children:r(x,{})})}),r(y.Footer,{ownerState:K,"data-sidebar":"slot[footer]",children:r(f,{})}),r(u,{})]})};
@@ -0,0 +1 @@
1
+ export { DesktopSidebar, type DesktopSidebarProps, type DesktopSidebarSide } from './DesktopSidebar.js';
@@ -0,0 +1 @@
1
+ export{DesktopSidebar}from"./DesktopSidebar.js";
@@ -1,8 +1,8 @@
1
1
  /**
2
- * InvariantViolations component that monitors domain store validity and displays
3
- * violation notifications using notistack snackbars.
2
+ * InvariantViolations component that shows the violation and error messages of
3
+ * `useConfiguratorMessages` as notistack snackbars.
4
4
  *
5
- * This component subscribes to the store's validity state and shows appropriate
6
- * error messages for uncaught errors and entity validation violations.
5
+ * An uncaught error is also logged; each entity violation becomes one snackbar
6
+ * prefixed with the id of its entity.
7
7
  */
8
8
  export declare const InvariantViolations: () => null;
@@ -1 +1 @@
1
- import{jsx as r}from"react/jsx-runtime";import{Trans as t}from"@lingui/react";import{useSnackbar as i}from"notistack";import{useSubscription as e}from"observable-hooks";import{useMemo as a}from"react";import{map as o}from"rxjs";import{match as n}from"ts-pattern";import{useDomain as s,useLogger as m,useResolveLocalizable as l}from"#package/react-sdk";export const InvariantViolations=()=>{let{storeSystem:p}=s(),{enqueueSnackbar:g}=i(),c=l(),f=m();return e(a(()=>p.stateSlices.potentiallyInvalid.pipe(o(r=>r.validity)),[p]),i=>{if(!i.valid&&"uncaught"===i.severity){f.error("Uncaught error",i.error),g(r(t,{id:"sdk.messages.validation.uncaughtError.message",message:"Oops, something went wrong"}),{variant:"error"});return}i.valid||i.entityViolations.forEach(({violation:r,entityId:t})=>{let i=c(r.message??r.type);g(`${String(t)}: ${i}`,{variant:n(r.severity).with("notice",()=>"info").with("warning",()=>"warning").with("fixable",()=>"error").with("fatal",()=>"error").exhaustive()})})}),null};
1
+ import{jsx as r}from"react/jsx-runtime";import{Trans as t}from"@lingui/react";import{useSnackbar as i}from"notistack";import{match as e}from"ts-pattern";import{useConfiguratorMessages as a,useLogger as n}from"#package/react-sdk";export const InvariantViolations=()=>{let{enqueueSnackbar:o}=i(),s=n();return a(i=>{e(i).with({kind:"error"},({error:i})=>{s.error("Uncaught error",i),o(r(t,{id:"sdk.messages.validation.uncaughtError.message",message:"Oops, something went wrong"}),{variant:"error"})}).with({kind:"violation"},({entityId:r,violation:t,text:i})=>{o(`${String(r)}: ${i}`,{variant:e(t.severity).with("notice",()=>"info").with("warning",()=>"warning").with("fixable",()=>"error").with("fatal",()=>"error").exhaustive()})}).with({kind:"sideEffect"},()=>{}).exhaustive()}),null};
@@ -1,9 +1,6 @@
1
1
  /**
2
- * SideEffects component that listens to domain store updates and displays
3
- * informational snackbars for updates that contain hint messages.
4
- *
5
- * This component renders nothing but subscribes to the committed state changes
6
- * from the domain store system and shows user-friendly notifications for
7
- * operations that provide feedback hints.
2
+ * SideEffects component that shows the side-effect messages of
3
+ * `useConfiguratorMessages`, the hints of committed updates, as informational
4
+ * notistack snackbars.
8
5
  */
9
6
  export declare const SideEffects: () => null;
@@ -1 +1 @@
1
- import{useSnackbar as t}from"notistack";import{useSubscription as r}from"observable-hooks";import{useMemo as e}from"react";import{distinctUntilChanged as o,map as i,skip as a}from"rxjs/operators";import{useDomain as m,useResolveLocalizable as n}from"#package/react-sdk";let p=[];export const SideEffects=()=>{let{storeSystem:s}=m(),f=n(),{enqueueSnackbar:c}=t();return r(e(()=>s.stateSlices.committed.pipe(a(1),o(),i(t=>{if("updates"in t){let r=t.updates.filter(t=>!!t.hint);return r.length>0?r:p}return p})),[s]),t=>{t.forEach(t=>{c(f(t.hint),{variant:"info"})})}),null};
1
+ import{useSnackbar as t}from"notistack";import{useConfiguratorMessages as e}from"#package/react-sdk";export const SideEffects=()=>{let{enqueueSnackbar:r}=t();return e(t=>{"sideEffect"===t.kind&&r(t.text,{variant:"info"})}),null};
@@ -1,5 +1,6 @@
1
1
  export * from './call-to-action/index.js';
2
2
  export * from './canvas/index.js';
3
+ export * from './desktop-sidebar/index.js';
3
4
  export * from './footer/index.js';
4
5
  export * from './hamburger-menu/index.js';
5
6
  export * from './header/index.js';
@@ -1 +1 @@
1
- export*from"./call-to-action/index.js";export*from"./canvas/index.js";export*from"./footer/index.js";export*from"./hamburger-menu/index.js";export*from"./header/index.js";export*from"./mobile-tabs/index.js";export*from"./powered-by/index.js";export*from"./readonly-banner/index.js";export*from"./services/index.js";export*from"./sidebar-back-button/index.js";export*from"./sidebar-contents/index.js";export*from"./sidebar-footer/index.js";export*from"./sidebar-tabs/index.js";export*from"./snackbar-root/index.js";export*from"./toolbar/index.js";export*from"./tool-controls/index.js";export*from"./view-controls/index.js";
1
+ export*from"./call-to-action/index.js";export*from"./canvas/index.js";export*from"./desktop-sidebar/index.js";export*from"./footer/index.js";export*from"./hamburger-menu/index.js";export*from"./header/index.js";export*from"./mobile-tabs/index.js";export*from"./powered-by/index.js";export*from"./readonly-banner/index.js";export*from"./services/index.js";export*from"./sidebar-back-button/index.js";export*from"./sidebar-contents/index.js";export*from"./sidebar-footer/index.js";export*from"./sidebar-tabs/index.js";export*from"./snackbar-root/index.js";export*from"./toolbar/index.js";export*from"./tool-controls/index.js";export*from"./view-controls/index.js";
@@ -1,80 +1,6 @@
1
1
  import type { ComponentsOverrides } from '@mui/material';
2
2
  import type { CSSProperties } from 'react';
3
3
  import type { ValueOf } from '@salsita-ai/common/utils';
4
- declare const MuiSidebarComponentName: 'PhxDesktopSidebar';
5
- declare const MuiSidebarSlots: {
6
- readonly Root: 'root';
7
- readonly Header: 'header';
8
- readonly Body: 'body';
9
- readonly Content: 'content';
10
- readonly Tabs: 'tabs';
11
- readonly Footer: 'footer';
12
- };
13
- type DesktopSidebarSlots = ValueOf<typeof MuiSidebarSlots>;
14
- declare module '@mui/material/styles' {
15
- interface ComponentNameToClassKey {
16
- [MuiSidebarComponentName]: DesktopSidebarSlots;
17
- }
18
- interface ComponentsPropsList {
19
- [MuiSidebarComponentName]: ThemeableDesktopSidebarProps;
20
- }
21
- interface Components {
22
- [MuiSidebarComponentName]?: {
23
- defaultProps?: ComponentsPropsList['PhxDesktopSidebar'];
24
- styleOverrides?: ComponentsOverrides<Theme>['PhxDesktopSidebar'];
25
- };
26
- }
27
- }
28
- interface SidebarOwnerState {
29
- readonly isHeaderEmpty?: boolean;
30
- readonly isContentEmpty?: boolean;
31
- }
32
- export interface ThemeableDesktopSidebarProps extends SidebarOwnerState {
33
- /**
34
- * Background applied to sidebar sections (header, body, footer).
35
- *
36
- * @default theme.palette.background.paper
37
- */
38
- readonly background?: CSSProperties['background'];
39
- /**
40
- * Border applied to sidebar sections.
41
- *
42
- * @default 0
43
- */
44
- readonly border?: CSSProperties['border'];
45
- /**
46
- * Corner radius applied to sidebar sections.
47
- *
48
- * @default theme.shape.sidebarBorderRadius ?? theme.shape.borderRadius
49
- */
50
- readonly borderRadius?: CSSProperties['borderRadius'];
51
- /**
52
- * CSS filter applied to the sidebar root (e.g. drop-shadow for elevation).
53
- *
54
- * @default elevation[1] drop-shadow
55
- */
56
- readonly filter?: CSSProperties['filter'];
57
- /**
58
- * Spacing value for sidebar inner padding.
59
- * Accepts a theme spacing multiplier or a CSS value.
60
- *
61
- * @default theme.spacing(2.5)
62
- */
63
- readonly padding?: number | string;
64
- /**
65
- * Background gradient for scrollable edge indicators.
66
- * Applied to `::before` and `::after` pseudo-elements on the content area.
67
- *
68
- * @default linear-gradient(180deg, hsl(from black h s l / 12%), transparent 8px)
69
- */
70
- readonly scrollableIndicatorBackground?: CSSProperties['background'];
71
- /**
72
- * Inline size (width) of the sidebar.
73
- *
74
- * @default inherited from ThemeableDesktopLayoutProps.sidebarWidth
75
- */
76
- readonly width?: CSSProperties['width'];
77
- }
78
4
  export declare const PhxDesktopLayoutName: 'PhxDesktopLayout';
79
5
  declare const MuiLayoutComponentName: "PhxDesktopLayout";
80
6
  declare const MuiLayoutSlots: {
@@ -1,17 +1,10 @@
1
- import{jsx as a,jsxs as t,Fragment as o}from"react/jsx-runtime";import{keyframes as e,paperClasses as r,snackbarClasses as d,styled as i,useTheme as n,useThemeProps as s}from"@mui/material";import{AnimatePresence as l,motion as p}from"motion/react";import{useCallback as b,useRef as u}from"react";import{useAccessService as c,useIsFullscreenActive as m}from"#package/react-sdk";import{attrf as h,commonStyles as y,numToPx as g,useInvalidateScrollTimeline as f,useIsEmpty as x,useResponsive as k}from"#package/ui-sdk";import{usePreview as v}from"../../../configurator-context/index.js";import{ASSISTANT_PANEL_SLOT as S,AssistantPanel as E,useIsAssistantPanelOpen as w}from"../../assistant/index.js";import{LayoutSlots as R}from"../slots/index.js";import{DesktopPreview as $}from"./DesktopPreview.js";import{useSceneSafeArea as B}from"./use-scene-safe-area.js";let C="PhxDesktopSidebar",D="minimalist",T="split",I="visible",A="hidden",P="assistant",F={Root:i("div",{name:C,slot:"root",shouldForwardProp:a=>"ownerState"!==a})(({ownerState:a})=>[`
2
- --phx-sidebar-background: ${a.background};
3
- --phx-sidebar-border: ${a.border};
4
- --phx-sidebar-filter: ${a.filter};
5
- --phx-sidebar-padding: ${a.padding};
6
- --phx-sidebar-radius: ${a.borderRadius}px;
7
- --phx-sidebar-scrollable-indicator-background: ${a.scrollableIndicatorBackground};
8
- `,{borderRadius:"var(--phx-sidebar-radius)",display:"grid",filter:"var(--phx-sidebar-filter)",gridTemplateRows:"min-content minmax(0, 1fr) min-content",inlineSize:a.width,position:"relative","& > *":{pointerEvents:"auto"},"@container style(--inspect: on)":{"--phx-sidebar-background":"hsl(from gold h s l / 50%)"},[`&[data-sidebar*="${I}"]`]:{opacity:1},[`&[data-sidebar*="${A}"]`]:{opacity:0},[`&[data-sidebar*="${P}"] > :not([data-sidebar="${S}"])`]:{visibility:"hidden"}}]),Tabs:i("div",{name:C,slot:"tabs",shouldForwardProp:a=>"ownerState"!==a})(({theme:{spacing:a}})=>({insetBlockStart:0,insetInlineEnd:"100%",maxInlineSize:150,paddingInlineEnd:a(2),position:"absolute","&:is(:empty)":{padding:0},[`.${r.root}`]:{boxShadow:"none"}})),Header:i("header",{name:C,slot:"header",shouldForwardProp:a=>"ownerState"!==a})({background:"var(--phx-sidebar-background)",border:"var(--phx-sidebar-border)",borderBlockEnd:0,borderStartStartRadius:"inherit",borderStartEndRadius:"inherit",paddingBlock:"calc(0.6 * var(--phx-sidebar-padding))",paddingInline:"var(--phx-sidebar-padding)","&:is(:empty)":{border:0,paddingBlock:0}}),Body:i("div",{name:C,slot:"body",shouldForwardProp:a=>"ownerState"!==a})(({ownerState:a})=>({background:"var(--phx-sidebar-background)",border:"var(--phx-sidebar-border)",borderBlockStart:0,borderBlockEnd:0,display:"grid",position:"relative",'[data-layout*="slot[sidebar]"]:where(:has([data-sidebar="slot[header]"])) &':{...a.isHeaderEmpty&&{borderBlockStart:"var(--phx-sidebar-border)",borderStartStartRadius:"inherit",borderStartEndRadius:"inherit",paddingBlockStart:"var(--phx-sidebar-padding)"}},'&:has([data-sidebar*="slot[content]"]:empty)':{...a.isContentEmpty&&{paddingBlock:0}},[`[data-sidebar*="${D}"] &`]:{...a.isContentEmpty&&{border:0}},[`[data-sidebar*="${T}"] &`]:{borderBlockEnd:"var(--phx-sidebar-border)",borderEndStartRadius:"inherit",borderEndEndRadius:"inherit",paddingBlockEnd:"var(--phx-sidebar-padding)"}})),Content:i("div",{name:C,slot:"content",shouldForwardProp:a=>"ownerState"!==a})(({ownerState:a,theme:{spacing:t}})=>({...y.layout.normalizeScrollableContainer,alignContent:"start",borderRadius:"inherit",display:"grid",gap:t(3),padding:"var(--phx-sidebar-padding)","@supports (animation-timeline: scroll())":{"&[data-scrollable]":{scrollTimeline:"--phx-sidebar-timeline y","&::after, &::before":{animation:`${y.keyframes.fadeIn} both`,animationTimeline:"--phx-sidebar-timeline",background:"var(--phx-sidebar-scrollable-indicator-background)",backgroundRepeat:"no-repeat",content:'""',display:"block",insetInline:0,opacity:0,pointerEvents:"none",position:"absolute",zIndex:1},"&::after":{animationDirection:"reverse",animationRange:`calc(100% - ${t(4)}) 100%`,borderEndStartRadius:"inherit",borderEndEndRadius:"inherit",insetBlockStart:"50%",insetBlockEnd:0,scale:"1 -1"},"&::before":{animationRange:`0 ${t(4)}`,borderStartStartRadius:"inherit",borderStartEndRadius:"inherit",insetBlockStart:0,insetBlockEnd:"50%"}}},"&:is(:empty)":{paddingBlock:0},'[data-layout*="slot[sidebar]"] &':{...a.isHeaderEmpty&&{paddingBlockStart:0,"&::before":{borderStartStartRadius:0,borderStartEndRadius:0,insetBlockStart:"var(--phx-sidebar-padding)"}}},[`[data-sidebar*="${T}"] &`]:{paddingBlockEnd:0,"&::after":{borderEndStartRadius:0,borderEndEndRadius:0,insetBlockEnd:"var(--phx-sidebar-padding)"}}})),Footer:i("footer",{name:C,slot:"footer",shouldForwardProp:a=>"ownerState"!==a})(({ownerState:a,theme:{palette:t,spacing:o}})=>({background:"var(--phx-sidebar-background)",border:"var(--phx-sidebar-border)",borderBlockStart:`1px solid ${t.divider}`,borderEndStartRadius:"inherit",borderEndEndRadius:"inherit",padding:"var(--phx-sidebar-padding)","&:is(:empty)":{border:0,paddingBlock:0},[`[data-sidebar*="${D}"] &`]:{...a.isContentEmpty&&{borderBlockStart:"var(--phx-sidebar-border)",borderStartStartRadius:"inherit",borderStartEndRadius:"inherit"}},[`[data-sidebar*="${T}"] &`]:{borderBlockStart:"var(--phx-sidebar-border)",borderStartStartRadius:"inherit",borderStartEndRadius:"inherit",marginBlockStart:o(2)}}))};export const PhxDesktopLayoutName="PhxDesktopLayout";let j="PhxDesktopLayout",z=i(p.div,{name:j,slot:"root",shouldForwardProp:a=>"ownerState"!==a})(({ownerState:a,theme:{spacing:t}})=>{let o=e({"0%":{marginInlineEnd:0},"100%":{marginInlineEnd:t(-2)}});return[`
1
+ import{jsx as t,jsxs as a,Fragment as o}from"react/jsx-runtime";import{keyframes as e,snackbarClasses as i,styled as r,useThemeProps as d}from"@mui/material";import{AnimatePresence as l,motion as s}from"motion/react";import{useCallback as n}from"react";import{useAccessService as u,useIsFullscreenActive as m}from"#package/react-sdk";import{attrf as p,commonStyles as y,numToPx as c,useResponsive as b}from"#package/ui-sdk";import{usePreview as h}from"../../../configurator-context/index.js";import{useIsAssistantPanelOpen as f}from"../../assistant/index.js";import{SidebarKeys as g}from"../sidebar-keys/index.js";import{LayoutSlots as x}from"../slots/index.js";import{DesktopPreview as v}from"./DesktopPreview.js";import{useLayoutSceneSafeArea as k}from"./use-layout-scene-safe-area.js";export const PhxDesktopLayoutName="PhxDesktopLayout";let w="PhxDesktopLayout",C=r(s.div,{name:w,slot:"root",shouldForwardProp:t=>"ownerState"!==t})(({ownerState:t,theme:{spacing:a}})=>{let o=e({"0%":{marginInlineEnd:0},"100%":{marginInlineEnd:a(-2)}});return[`
9
2
  --inspect: off; // 🕹️ inspection mode toggle
10
3
 
11
- --phx-layout-sidebar-track-size: ${g(a.sidebarWidth)};
4
+ --phx-layout-sidebar-track-size: ${c(t.sidebarWidth)};
12
5
 
13
- --phx-layout-gap: ${t(2)};
14
- --phx-layout-gutter: ${t(3)};
6
+ --phx-layout-gap: ${a(2)};
7
+ --phx-layout-gutter: ${a(3)};
15
8
  `,{display:"grid",gridTemplateColumns:`
16
9
  [full-start]
17
10
  var(--phx-layout-gutter)
@@ -38,12 +31,4 @@ import{jsx as a,jsxs as t,Fragment as o}from"react/jsx-runtime";import{keyframes
38
31
  [bottom-start]
39
32
  min-content
40
33
  [bottom-end full-end]
41
- `,inset:0,isolation:"isolate",pointerEvents:"none",position:"absolute","@container style(--inspect: on)":{'& > *, & > * > *, [data-layout*="slot[body.footer]"] > *':{outline:"2px solid hsl(from tomato h s l / 50%)"}},'[data-layout*="interactive"]':{"& > *":{pointerEvents:"auto"}},'[data-layout*="slot[header]"]':{gridArea:"top-start / main-start / top-end / sidebar-end"},'[data-layout*="slot[body]"]':{containerType:"size",display:"grid",gridArea:"main",gridRowStart:"top-end",gridTemplateRows:"min-content 1fr min-content"},'[data-layout*="slot[body.top]"]':{gridArea:"1 / 1 / 2 / -1","& > *":{...y.transition.fadeIn}},'[data-layout*="slot[body.safeSceneArea]"]':{gridArea:"1 / 1 / 3 / -1","@container style(--inspect: on)":{background:"hsl(from lime h s l / 50%)"}},'[data-layout*="slot[body.bottom]"]':{alignItems:"end",display:"grid",gap:t(2),gridArea:"3 / 1 / 4 / -1",gridTemplateColumns:"minmax(0, auto) minmax(60px, 1fr)",justifyContent:"start",position:"relative",'&:has([data-layout="slot[body.viewControls]"]:empty)':{gap:0,gridTemplateColumns:"repeat(2, auto)"}},'[data-layout="slot[body.toolbar]"]':{animation:`${o} auto linear both`,animationTimeline:"scroll(self inline)",display:"flex",margin:t(-2),overflowX:"scroll",overscrollBehavior:"contain",padding:t(2),scrollbarWidth:"none","&::after":{content:'""'}},'[data-layout="slot[body.toolControls]"]':{insetBlockEnd:`calc(100% + ${t(6)})`,position:"absolute","& > *":{...y.transition.fadeIn,transitionDuration:"300ms"}},'[data-layout="slot[body.viewControls]"]':{},'[data-layout="slot[body.logo]"], [data-layout="slot[body.sideEffects]"]':{insetBlockEnd:`calc(100% + ${t(2)})`,position:"absolute"},'[data-layout="slot[body.sideEffects]"]':{insetInline:0,[`.${d.root}`]:{inset:"unset",insetBlockEnd:0,position:"absolute"}},'[data-layout*="slot[sidebar]"]':{display:"grid",gridArea:"top-start / sidebar-start / main-end / sidebar-end",gridTemplateRows:"minmax(0, auto)"},'[data-layout*="slot[footer]"]':{display:"grid",gap:"var(--phx-layout-gap)",gridArea:"bottom-start / full-start / bottom-end / full-end"},'&:has([data-header*="fixed"])':{'[data-layout*="slot[header]"]':{gridArea:"full-start / full-start / top-end / full-end"},'[data-layout*="slot[body]"]':{gridRowStart:"main-start"},'[data-layout*="slot[sidebar]"]':{gridRow:"main-start / main-end"}},'&:has([data-header*="floating"])':{'[data-layout*="slot[header]"]':{gridColumnEnd:"main-end"}},[`&:has([data-sidebar*="${D}"])`]:{'[data-layout*="slot[sidebar]"]':{alignContent:"end",gridRow:"main-start / main-end"}},[`&:has([data-header*="floating"]):has([data-sidebar*="${D}"])`]:{'[data-layout*="slot[header]"]':{gridColumnEnd:"sidebar-end"},'[data-layout*="slot[sidebar]"]':{gridRowStart:"top-end"}},[`&:has([data-sidebar*="${P}"])`]:{'[data-layout*="slot[sidebar]"]':{alignContent:"stretch"}},[`&:has([data-sidebar*="${A}"])`]:{"--phx-layout-gap":0,"--phx-layout-sidebar-track-size":0,'[data-layout*="slot[sidebar]"]':{overflow:"hidden"}}}]}),H=i("div")({gridArea:"1 / 1 / -1 / -1"});export const DesktopLayout=()=>{let e=u(null),r=u(null),{palette:d,shape:i,spacing:p}=n(),{sidebarWidth:y="clamp(360px, 30cqi, 400px)"}=s({props:{},name:j}),{background:g=d.background.paper,border:S=0,borderRadius:L=i.sidebarBorderRadius??i.borderRadius,filter:W=`
42
- drop-shadow(0 1px 1.5px hsl(from ${d.common.black} h s l / 12%))
43
- drop-shadow(0 1px 0.5px hsl(from ${d.common.black} h s l / 14%))
44
- drop-shadow(0 2px 0.5px hsl(from ${d.common.black} h s l / 20%))
45
- `,padding:q=p(2.5),scrollableIndicatorBackground:M=`linear-gradient(
46
- 180deg,
47
- hsl(from black h s l / 12%),
48
- hsl(from black h s l / 0%) 8px
49
- )`}=s({props:{},name:C}),{hasMiniSidebar:N,hasSplitSidebar:V}=R.useSidebarContent(),X=w(),{accessInfo:G}=c(),J=m(),{isPreview:K,isHidden:O}=v(),Q=!O&&!K,U=!J,{setCanvasPadding:Y,setAnimating:Z}=k(),{containerRef:_,safeAreaRef:aa,update:at}=B(Y,N&&!X,Q),ao=b(()=>{Z(!0)},[Z]),ae=b(()=>{Z(!1),at()},[Z,at]),ar=Q&&U,ad=x(e,{disabled:!ar}),ai=x(r,{disabled:!ar});f(r,{disabled:!ar});let an={background:g,border:S,borderRadius:L,filter:W,isHeaderEmpty:ad,isContentEmpty:ai,padding:q,scrollableIndicatorBackground:M,width:y};return a(o,{children:t(l,{mode:"wait",children:[!O&&K&&a($,{},"preview-layout"),Q&&t(z,{layoutId:"ui-layout",layout:!0,ownerState:{sidebarWidth:y},"data-layout":h({state:{initial:!J,fullscreen:J}}),onLayoutAnimationStart:ao,onLayoutAnimationComplete:ae,children:[a(H,{ref:_}),a("header",{"data-layout":"slot[header]",children:a(R.DesktopHeader,{})}),t("main",{"data-layout":"slot[body]",children:[a("div",{"data-layout":"slot[body.top] interactive",children:a(R.DesktopCallToAction,{})}),a("div",{ref:aa,"data-layout":"slot[body.safeSceneArea]"}),t("div",{"data-layout":"slot[body.bottom] interactive",children:[a("div",{"data-layout":"slot[body.toolbar]",children:a(R.DesktopToolbar,{})}),a("div",{"data-layout":"slot[body.toolControls]",children:!J&&a(R.DesktopToolControls,{})}),a("div",{"data-layout":"slot[body.viewControls]",children:a(R.DesktopViewControls,{})}),a("div",{"data-layout":"slot[body.logo]",children:a(R.DesktopPoweredBy,{})}),a("div",{"data-layout":"slot[body.sideEffects]",children:a(R.DesktopSnackbarsRoot,{})})]})]}),a("aside",{"data-layout":"slot[sidebar]",children:t(F.Root,{ownerState:an,"data-sidebar":h({variant:{[`${D}`]:N,[`${T}`]:V},state:{[`${I}`]:U,[`${A}`]:!U,[`${P}`]:X}}),inert:U?void 0:"",children:[a(F.Tabs,{ownerState:an,"data-sidebar":"slot[tabs]",children:a(R.DesktopSidebarTabs,{})}),a(F.Header,{ref:e,ownerState:an,"data-sidebar":"slot[header]",children:a(R.DesktopSidebarBackButton,{})}),a(F.Body,{ownerState:an,"data-sidebar":"slot[body]",children:a(F.Content,{ref:r,ownerState:an,"data-sidebar":"slot[content]",children:a(R.DesktopSidebarContent,{})})}),a(F.Footer,{ownerState:an,"data-sidebar":"slot[footer]",children:a(R.DesktopSidebarFooter,{})}),a(E,{})]})}),t("footer",{"data-layout":"slot[footer] interactive",children:[G.viewMode&&!J&&a(R.DesktopReadonlyBanner,{}),a(R.DesktopFooter,{})]})]},"interface-layout")]})})};
34
+ `,inset:0,isolation:"isolate",pointerEvents:"none",position:"absolute","@container style(--inspect: on)":{'& > *, & > * > *, [data-layout*="slot[body.footer]"] > *':{outline:"2px solid hsl(from tomato h s l / 50%)"}},'[data-layout*="interactive"]':{"& > *":{pointerEvents:"auto"}},'[data-layout*="slot[header]"]':{gridArea:"top-start / main-start / top-end / sidebar-end"},'[data-layout*="slot[body]"]':{containerType:"size",display:"grid",gridArea:"main",gridRowStart:"top-end",gridTemplateRows:"min-content 1fr min-content"},'[data-layout*="slot[body.top]"]':{gridArea:"1 / 1 / 2 / -1","& > *":{...y.transition.fadeIn}},'[data-layout*="slot[body.safeSceneArea]"]':{gridArea:"1 / 1 / 3 / -1","@container style(--inspect: on)":{background:"hsl(from lime h s l / 50%)"}},'[data-layout*="slot[body.bottom]"]':{alignItems:"end",display:"grid",gap:a(2),gridArea:"3 / 1 / 4 / -1",gridTemplateColumns:"minmax(0, auto) minmax(60px, 1fr)",justifyContent:"start",position:"relative",'&:has([data-layout="slot[body.viewControls]"]:empty)':{gap:0,gridTemplateColumns:"repeat(2, auto)"}},'[data-layout="slot[body.toolbar]"]':{animation:`${o} auto linear both`,animationTimeline:"scroll(self inline)",display:"flex",margin:a(-2),overflowX:"scroll",overscrollBehavior:"contain",padding:a(2),scrollbarWidth:"none","&::after":{content:'""'}},'[data-layout="slot[body.toolControls]"]':{insetBlockEnd:`calc(100% + ${a(6)})`,position:"absolute","& > *":{...y.transition.fadeIn,transitionDuration:"300ms"}},'[data-layout="slot[body.viewControls]"]':{},'[data-layout="slot[body.logo]"], [data-layout="slot[body.sideEffects]"]':{insetBlockEnd:`calc(100% + ${a(2)})`,position:"absolute"},'[data-layout="slot[body.sideEffects]"]':{insetInline:0,[`.${i.root}`]:{inset:"unset",insetBlockEnd:0,position:"absolute"}},'[data-layout*="slot[sidebar]"]':{display:"grid",gridArea:"top-start / sidebar-start / main-end / sidebar-end",gridTemplateRows:"minmax(0, auto)"},'[data-layout*="slot[footer]"]':{display:"grid",gap:"var(--phx-layout-gap)",gridArea:"bottom-start / full-start / bottom-end / full-end"},'&:has([data-header*="fixed"])':{'[data-layout*="slot[header]"]':{gridArea:"full-start / full-start / top-end / full-end"},'[data-layout*="slot[body]"]':{gridRowStart:"main-start"},'[data-layout*="slot[sidebar]"]':{gridRow:"main-start / main-end"}},'&:has([data-header*="floating"])':{'[data-layout*="slot[header]"]':{gridColumnEnd:"main-end"}},[`&:has([data-sidebar*="${g.Minimalist}"])`]:{'[data-layout*="slot[sidebar]"]':{alignContent:"end",gridRow:"main-start / main-end"}},[`&:has([data-header*="floating"]):has([data-sidebar*="${g.Minimalist}"])`]:{'[data-layout*="slot[header]"]':{gridColumnEnd:"sidebar-end"},'[data-layout*="slot[sidebar]"]':{gridRowStart:"top-end"}},[`&:has([data-sidebar*="${g.Assistant}"])`]:{'[data-layout*="slot[sidebar]"]':{alignContent:"stretch"}},[`&:has([data-sidebar*="${g.Hidden}"])`]:{"--phx-layout-gap":0,"--phx-layout-sidebar-track-size":0,'[data-layout*="slot[sidebar]"]':{overflow:"hidden"}}}]}),D=r("div")({gridArea:"1 / 1 / -1 / -1"});export const DesktopLayout=()=>{let{sidebarWidth:e="clamp(360px, 30cqi, 400px)"}=d({props:{},name:w}),{hasMiniSidebar:i}=x.useSidebarContent(),r=f(),{accessInfo:s}=u(),y=m(),{isPreview:c,isHidden:g}=h(),A=!g&&!c,{setAnimating:E}=b(),{containerRef:S,safeAreaRef:T,update:$}=k({enabled:A,hasMiniSidebar:i&&!r}),j=n(()=>{E(!0)},[E]),R=n(()=>{E(!1),$()},[E,$]);return t(o,{children:a(l,{mode:"wait",children:[!g&&c&&t(v,{},"preview-layout"),A&&a(C,{layoutId:"ui-layout",layout:!0,ownerState:{sidebarWidth:e},"data-layout":p({state:{initial:!y,fullscreen:y}}),onLayoutAnimationStart:j,onLayoutAnimationComplete:R,children:[t(D,{ref:S}),t("header",{"data-layout":"slot[header]",children:t(x.DesktopHeader,{})}),a("main",{"data-layout":"slot[body]",children:[t("div",{"data-layout":"slot[body.top] interactive",children:t(x.DesktopCallToAction,{})}),t("div",{ref:T,"data-layout":"slot[body.safeSceneArea]"}),a("div",{"data-layout":"slot[body.bottom] interactive",children:[t("div",{"data-layout":"slot[body.toolbar]",children:t(x.DesktopToolbar,{})}),t("div",{"data-layout":"slot[body.toolControls]",children:!y&&t(x.DesktopToolControls,{})}),t("div",{"data-layout":"slot[body.viewControls]",children:t(x.DesktopViewControls,{})}),t("div",{"data-layout":"slot[body.logo]",children:t(x.DesktopPoweredBy,{})}),t("div",{"data-layout":"slot[body.sideEffects]",children:t(x.DesktopSnackbarsRoot,{})})]})]}),t("aside",{"data-layout":"slot[sidebar]",children:t(x.DesktopSidebar,{width:e})}),a("footer",{"data-layout":"slot[footer] interactive",children:[s.viewMode&&!y&&t(x.DesktopReadonlyBanner,{}),t(x.DesktopFooter,{})]})]},"interface-layout")]})})};
@@ -1 +1 @@
1
- import{jsx as t}from"react/jsx-runtime";import{useCallback as e,useMemo as o}from"react";import{useResolveLocalizable as a}from"#package/react-sdk";import{Preview as i,useResponsive as r}from"#package/ui-sdk";import{usePresetSelection as n,usePreview as s}from"../../../configurator-context/index.js";import{useSceneSafeArea as p}from"./use-scene-safe-area.js";let m={id:"sdk.preview.customize.title",message:"Customize product"},u={id:"sdk.preview.start.button.label",message:"Start configuring"},c={layoutId:"ui-layout",initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{layout:{type:"spring",bounce:.2,duration:.6},opacity:{duration:.2,ease:"linear"}}};export const DesktopPreview=l=>{let{slotProps:d={},slots:f}=l,{enter:y}=s(),{hasMultiplePresets:g}=n(),{setCanvasPadding:k,setAnimating:x}=r(),{containerRef:b,safeAreaRef:j,update:w}=p(k,!1),S=a(),v=e(()=>{x(!0)},[x]),A=e(()=>{x(!1),w()},[x,w]),L=o(()=>({...d,root:{...c,onLayoutAnimationStart:v,onLayoutAnimationComplete:A,...d.root}}),[A,v,d]);return t(i,{title:S(m),buttonLabel:S(u),containerRef:b,safeAreaRef:j,withScene:!g,slots:f,slotProps:L,onStart:y})};
1
+ import{jsx as t}from"react/jsx-runtime";import{useCallback as e,useMemo as o}from"react";import{useResolveLocalizable as a}from"#package/react-sdk";import{Preview as i,useResponsive as r}from"#package/ui-sdk";import{usePresetSelection as n,usePreview as s}from"../../../configurator-context/index.js";import{useLayoutSceneSafeArea as p}from"./use-layout-scene-safe-area.js";let u={id:"sdk.preview.customize.title",message:"Customize product"},m={id:"sdk.preview.start.button.label",message:"Start configuring"},c={layoutId:"ui-layout",initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{layout:{type:"spring",bounce:.2,duration:.6},opacity:{duration:.2,ease:"linear"}}};export const DesktopPreview=l=>{let{slotProps:d={},slots:f}=l,{enter:y}=s(),{hasMultiplePresets:g}=n(),{setAnimating:b}=r(),{containerRef:k,safeAreaRef:x,update:S}=p({enabled:!0,hasMiniSidebar:!1}),j=a(),w=e(()=>{b(!0)},[b]),v=e(()=>{b(!1),S()},[b,S]),A=o(()=>({...d,root:{...c,onLayoutAnimationStart:w,onLayoutAnimationComplete:v,...d.root}}),[v,w,d]);return t(i,{title:j(u),buttonLabel:j(m),containerRef:k,safeAreaRef:x,withScene:!g,slots:f,slotProps:A,onStart:y})};
@@ -1,11 +1,11 @@
1
- import{jsx as t,jsxs as a,Fragment as e}from"react/jsx-runtime";import{snackbarClasses as o,styled as i,useTheme as r,useThemeProps as n}from"@mui/material";import d from"lodash/noop.js";import{AnimatePresence as s}from"motion/react";import{useRef as l}from"react";import{useAccessService as m,useEagerObservableSelector as c,useIsFullscreenActive as p}from"#package/react-sdk";import{attrf as u,commonStyles as b,numToPx as h,useIsEmpty as g,useResponsive as f,useViewportSize as y}from"#package/ui-sdk";import{useConfigurator as x}from"../../../application-runtime/index.js";import{usePreview as v}from"../../../configurator-context/index.js";import{ASSISTANT_PANEL_SLOT as w,AssistantPanel as S,useIsAssistantPanelOpen as $}from"../../assistant/index.js";import{LayoutSlots as k}from"../slots/index.js";import{MobileHeader as C}from"../slots/slots.js";import{MobilePreview as F}from"./MobilePreview.js";import{useSceneSafeArea as M}from"./use-scene-safe-area.js";let T="visible",I="hidden",R=i("div",{name:"PhxMobileHeader",slot:"root"})(({theme:{spacing:t}})=>({...b.transition.fadeInFrom,alignItems:"center",display:"flex",gap:t(1),justifyContent:"space-between",position:"relative","@container style(--inspect: on)":{background:"hsl(from tomato h s l / 50%)"},'[data-header*="slot"]':{display:"flex",gap:t(2),"& > *":{pointerEvents:"auto"}},'[data-header="slot[center]"]':{display:"grid",inset:0,placeItems:"center",position:"absolute"},[`&[data-header*="${T}"]`]:{opacity:1,transitionDuration:"200ms, 300ms",transitionTimingFunction:"linear, ease-out",translate:"0 0"},[`&[data-header*="${I}"]`]:{opacity:0,transitionDuration:"100ms, 100ms",transitionTimingFunction:"linear, ease-in",translate:"0 -60%"}})),B="visible",E="hidden",P=i("div",{name:"PhxMobileControls",slot:"root"})(({theme:{spacing:t}})=>({alignItems:"end",display:"flex",position:"relative","@container style(--inspect: on)":{background:"hsl(from tomato h s l / 50%)"},'[data-controls*="slot"]':{"& > *":{pointerEvents:"auto"}},'[data-controls="slot[toolControls]"]':{...b.transition.fadeInFrom,"&:not(:empty)":{marginInlineEnd:t(2)},"& > *":{...b.transition.fadeIn,transitionDelay:"300ms",transitionDuration:"300ms"}},'[data-controls="slot[viewControls]"]':{...b.transition.fadeInFrom,marginInlineStart:"auto"},'[data-controls="slot[toolbar]"]':{"&:not(:empty)":{marginInlineStart:t(2)}},[`&[data-controls*="${B}"]`]:{'[data-controls="slot[toolControls]"], [data-controls="slot[viewControls]"]':{opacity:1,transitionDuration:"200ms, 300ms",transitionTimingFunction:"linear, ease-out",translate:"0 0"}},[`&[data-controls*="${E}"]`]:{'[data-controls="slot[toolControls]"], [data-controls="slot[viewControls]"]':{opacity:0,transitionDuration:"100ms, 100ms",transitionTimingFunction:"linear, ease-in",translate:"0 60%"}}})),D="PhxMobileSidebar",j="visible",A="hidden",z="assistant",H={Root:i("div",{name:D,slot:"root",shouldForwardProp:t=>"ownerState"!==t})(({ownerState:t})=>[`
1
+ import{jsx as t,jsxs as a,Fragment as e}from"react/jsx-runtime";import{snackbarClasses as o,styled as i,useTheme as r,useThemeProps as n}from"@mui/material";import{AnimatePresence as d}from"motion/react";import{useRef as s}from"react";import{useAccessService as l,useEagerObservableSelector as m,useIsFullscreenActive as c}from"#package/react-sdk";import{attrf as p,commonStyles as u,numToPx as b,useIsEmpty as h,useViewportSize as g}from"#package/ui-sdk";import{useConfigurator as f}from"../../../application-runtime/index.js";import{usePreview as y}from"../../../configurator-context/index.js";import{ASSISTANT_PANEL_SLOT as x,AssistantPanel as v,useIsAssistantPanelOpen as w}from"../../assistant/index.js";import{LayoutSlots as S}from"../slots/index.js";import{MobileHeader as $}from"../slots/slots.js";import{MobilePreview as k}from"./MobilePreview.js";import{useLayoutSceneSafeArea as C}from"./use-layout-scene-safe-area.js";let F="visible",M="hidden",T=i("div",{name:"PhxMobileHeader",slot:"root"})(({theme:{spacing:t}})=>({...u.transition.fadeInFrom,alignItems:"center",display:"flex",gap:t(1),justifyContent:"space-between",position:"relative","@container style(--inspect: on)":{background:"hsl(from tomato h s l / 50%)"},'[data-header*="slot"]':{display:"flex",gap:t(2),"& > *":{pointerEvents:"auto"}},'[data-header="slot[center]"]':{display:"grid",inset:0,placeItems:"center",position:"absolute"},[`&[data-header*="${F}"]`]:{opacity:1,transitionDuration:"200ms, 300ms",transitionTimingFunction:"linear, ease-out",translate:"0 0"},[`&[data-header*="${M}"]`]:{opacity:0,transitionDuration:"100ms, 100ms",transitionTimingFunction:"linear, ease-in",translate:"0 -60%"}})),I="visible",R="hidden",B=i("div",{name:"PhxMobileControls",slot:"root"})(({theme:{spacing:t}})=>({alignItems:"end",display:"flex",position:"relative","@container style(--inspect: on)":{background:"hsl(from tomato h s l / 50%)"},'[data-controls*="slot"]':{"& > *":{pointerEvents:"auto"}},'[data-controls="slot[toolControls]"]':{...u.transition.fadeInFrom,"&:not(:empty)":{marginInlineEnd:t(2)},"& > *":{...u.transition.fadeIn,transitionDelay:"300ms",transitionDuration:"300ms"}},'[data-controls="slot[viewControls]"]':{...u.transition.fadeInFrom,marginInlineStart:"auto"},'[data-controls="slot[toolbar]"]':{"&:not(:empty)":{marginInlineStart:t(2)}},[`&[data-controls*="${I}"]`]:{'[data-controls="slot[toolControls]"], [data-controls="slot[viewControls]"]':{opacity:1,transitionDuration:"200ms, 300ms",transitionTimingFunction:"linear, ease-out",translate:"0 0"}},[`&[data-controls*="${R}"]`]:{'[data-controls="slot[toolControls]"], [data-controls="slot[viewControls]"]':{opacity:0,transitionDuration:"100ms, 100ms",transitionTimingFunction:"linear, ease-in",translate:"0 60%"}}})),E="PhxMobileSidebar",P="visible",D="hidden",j="assistant",A={Root:i("div",{name:E,slot:"root",shouldForwardProp:t=>"ownerState"!==t})(({ownerState:t})=>[`
2
2
  --phx-sidebar-background: ${t.background};
3
3
  --phx-sidebar-padding: ${t.padding};
4
4
  --phx-sidebar-radius: ${t.borderRadius}px;
5
- `,{...b.transition.fadeInFrom,background:"var(--phx-sidebar-background)",borderStartStartRadius:"var(--phx-sidebar-radius)",borderStartEndRadius:"var(--phx-sidebar-radius)",display:"grid",gridTemplateColumns:"minmax(0, 1fr)",gridTemplateRows:"min-content minmax(0, 1fr) min-content",position:"relative","& > *":{pointerEvents:"auto"},"@container style(--inspect: on)":{background:"hsl(from gold h s l / 50%)"},'&:has([data-sidebar*="slot[content]"])':{...t.isContentEmpty&&{"--phx-sidebar-radius":0,'[data-sidebar*="slot[header]"]':{paddingBlock:0,"& > *":{display:"none"}}}},[`&[data-sidebar*="${j}"]`]:{opacity:1,transitionDuration:"200ms, 300ms",transitionTimingFunction:"linear, ease-out",translate:"0 0"},[`&[data-sidebar*="${A}"]`]:{opacity:0,transitionDuration:"100ms, 100ms",transitionTimingFunction:"linear, ease-in",translate:"0 60%"},[`&[data-sidebar*="${z}"] > :not([data-sidebar="${w}"])`]:{visibility:"hidden"}}]),Header:i("header",{name:D,slot:"header",shouldForwardProp:t=>"ownerState"!==t})(({theme:{spacing:t}})=>({alignItems:"center",borderStartStartRadius:"inherit",borderStartEndRadius:"inherit",display:"grid",gap:t(1),gridTemplateColumns:"repeat(2, minmax(0, 1fr))",paddingBlock:"calc(var(--phx-sidebar-padding) * 0.5)",paddingInline:"var(--phx-sidebar-padding)","& > *":{...b.transition.fadeIn,transitionDelay:"100ms",transitionDuration:"300ms"},'[data-sidebar="slot[header.start]"]':{},'[data-sidebar="slot[header.end]"]':{justifySelf:"end"}})),Body:i("div",{name:D,slot:"body",shouldForwardProp:t=>"ownerState"!==t})({display:"grid",gridTemplateRows:"minmax(0, 1fr)"}),Content:i("div",{name:D,slot:"content",shouldForwardProp:t=>"ownerState"!==t})(({theme:{spacing:t}})=>({...b.layout.normalizeScrollableContainer,display:"grid",gap:t(2),gridAutoRows:"min-content",paddingBlock:"calc(var(--phx-sidebar-padding) * 0.5)",paddingInline:"var(--phx-sidebar-padding)","&:empty":{paddingBlock:0}})),Tabs:i("div",{name:D,slot:"tabs",shouldForwardProp:t=>"ownerState"!==t})(({theme:{palette:t}})=>({borderBlockStart:`1px solid ${t.divider}`,paddingBlock:"calc(var(--phx-sidebar-padding) * 0.5)",paddingInline:"calc(var(--phx-sidebar-padding) * 0.75)","&:is(:empty)":{border:0,padding:0}})),Footer:i("footer",{name:D,slot:"footer",shouldForwardProp:t=>"ownerState"!==t})(({theme:{palette:t}})=>({borderBlockStart:`1px solid ${t.divider}`,paddingBlock:"calc(var(--phx-sidebar-padding) * 0.5)",paddingInline:"var(--phx-sidebar-padding)","&:is(:empty)":{borderColor:"transparent",paddingBlock:0}}))};export const PhxMobileLayoutName="PhxMobileLayout";let L="initial",q="fullscreen",N="min(480px, 50cqb)",V=["auto","min-content","max-content","fit-content"],G=i("div",{name:"PhxMobileLayout",slot:"root",shouldForwardProp:t=>"ownerState"!==t})(({ownerState:t,theme:{spacing:a}})=>[`
5
+ `,{...u.transition.fadeInFrom,background:"var(--phx-sidebar-background)",borderStartStartRadius:"var(--phx-sidebar-radius)",borderStartEndRadius:"var(--phx-sidebar-radius)",display:"grid",gridTemplateColumns:"minmax(0, 1fr)",gridTemplateRows:"min-content minmax(0, 1fr) min-content",position:"relative","& > *":{pointerEvents:"auto"},"@container style(--inspect: on)":{background:"hsl(from gold h s l / 50%)"},'&:has([data-sidebar*="slot[content]"])':{...t.isContentEmpty&&{"--phx-sidebar-radius":0,'[data-sidebar*="slot[header]"]':{paddingBlock:0,"& > *":{display:"none"}}}},[`&[data-sidebar*="${P}"]`]:{opacity:1,transitionDuration:"200ms, 300ms",transitionTimingFunction:"linear, ease-out",translate:"0 0"},[`&[data-sidebar*="${D}"]`]:{opacity:0,transitionDuration:"100ms, 100ms",transitionTimingFunction:"linear, ease-in",translate:"0 60%"},[`&[data-sidebar*="${j}"] > :not([data-sidebar="${x}"])`]:{visibility:"hidden"}}]),Header:i("header",{name:E,slot:"header",shouldForwardProp:t=>"ownerState"!==t})(({theme:{spacing:t}})=>({alignItems:"center",borderStartStartRadius:"inherit",borderStartEndRadius:"inherit",display:"grid",gap:t(1),gridTemplateColumns:"repeat(2, minmax(0, 1fr))",paddingBlock:"calc(var(--phx-sidebar-padding) * 0.5)",paddingInline:"var(--phx-sidebar-padding)","& > *":{...u.transition.fadeIn,transitionDelay:"100ms",transitionDuration:"300ms"},'[data-sidebar="slot[header.start]"]':{},'[data-sidebar="slot[header.end]"]':{justifySelf:"end"}})),Body:i("div",{name:E,slot:"body",shouldForwardProp:t=>"ownerState"!==t})({display:"grid",gridTemplateRows:"minmax(0, 1fr)"}),Content:i("div",{name:E,slot:"content",shouldForwardProp:t=>"ownerState"!==t})(({theme:{spacing:t}})=>({...u.layout.normalizeScrollableContainer,display:"grid",gap:t(2),gridAutoRows:"min-content",paddingBlock:"calc(var(--phx-sidebar-padding) * 0.5)",paddingInline:"var(--phx-sidebar-padding)","&:empty":{paddingBlock:0}})),Tabs:i("div",{name:E,slot:"tabs",shouldForwardProp:t=>"ownerState"!==t})(({theme:{palette:t}})=>({borderBlockStart:`1px solid ${t.divider}`,paddingBlock:"calc(var(--phx-sidebar-padding) * 0.5)",paddingInline:"calc(var(--phx-sidebar-padding) * 0.75)","&:is(:empty)":{border:0,padding:0}})),Footer:i("footer",{name:E,slot:"footer",shouldForwardProp:t=>"ownerState"!==t})(({theme:{palette:t}})=>({borderBlockStart:`1px solid ${t.divider}`,paddingBlock:"calc(var(--phx-sidebar-padding) * 0.5)",paddingInline:"var(--phx-sidebar-padding)","&:is(:empty)":{borderColor:"transparent",paddingBlock:0}}))};export const PhxMobileLayoutName="PhxMobileLayout";let z="initial",H="fullscreen",L="min(480px, 50cqb)",q=["auto","min-content","max-content","fit-content"],N=i("div",{name:"PhxMobileLayout",slot:"root",shouldForwardProp:t=>"ownerState"!==t})(({ownerState:t,theme:{spacing:a}})=>[`
6
6
  --inspect: off; // 🕹️ inspection mode toggle
7
7
 
8
- --phx-layout-sidebar-track-size: ${h(t.sidebarHeight)};
8
+ --phx-layout-sidebar-track-size: ${b(t.sidebarHeight)};
9
9
  --phx-layout-gutter: ${a(2)};
10
10
  `,{display:"grid",gridTemplateColumns:`
11
11
  [full-start]
@@ -39,4 +39,4 @@ import{jsx as t,jsxs as a,Fragment as e}from"react/jsx-runtime";import{snackbarC
39
39
  [footer-end]
40
40
  var(--phx-layout-gutter)
41
41
  [full-end]
42
- `},'[data-layout*="slot[body.header]"]':{gridArea:"header-start / main-start / header-end / main-end"},'[data-layout*="slot[body.footer]"]':{gridArea:"footer-start / main-start / footer-end / main-end",position:"relative"},'[data-layout*="slot[body.safeSceneArea]"]':{gridArea:"full","@container style(--inspect: on)":{background:"hsl(from lime h s l / 50%)"}},'[data-layout="slot[body.sideEffects]"]':{insetBlockEnd:`calc(100% + ${a(2)})`,position:"absolute"},'[data-layout*="slot[sidebar]"]':{display:"grid",gridArea:"sidebar-start / full-start / sidebar-end / full-end",gridTemplateColumns:"minmax(0, 1fr)",gridTemplateRows:"minmax(0, auto)"},'[data-layout*="slot[footer]"]':{gridArea:"footer-start / full-start / footer-end / full-end",zIndex:1},'&:has([data-sidebar*="slot[content]"])':{...t.isContentEmpty&&{"--phx-layout-sidebar-track-size":"min-content"}},[`&[data-layout*="${L}"]`]:{transitionDelay:"200ms",transitionDuration:"300ms"},[`&[data-layout*="${q}"]`]:{transitionDelay:"0ms",transitionDuration:"300ms"},[`&:has([data-sidebar*="${A}"])[class]`]:{"--phx-layout-sidebar-track-size":0}},null!=t.assistantFocusHeight&&{'[data-layout*="slot[sidebar]"]':{alignSelf:"start",blockSize:`min(100%, ${t.assistantFocusHeight}px)`,gridRow:"full-start / full-end",zIndex:2}}]),J=i("div")({gridArea:"1 / 1 / -1 / -1"}),K=t=>({inert:t?"":void 0});export const MobileLayout=()=>{let o=l(null),{palette:i,shape:b,spacing:h}=r(),{sidebarHeight:w=N}=n({props:{},name:"PhxMobileLayout"}),{background:O=i.background.paper,borderRadius:Q=b.sidebarBorderRadius??b.borderRadius,padding:U=h(2)}=n({props:{},name:D}),{accessInfo:W}=m(),X=p(),{isPreview:Y,isHidden:Z}=v(),_=!Z&&!Y,tt=!X&&_,ta=!X&&_,te=!X,{setCanvasPadding:to}=f(),{containerRef:ti,safeAreaRef:tr}=M(_?to:d,!1),tn=g(o,{disabled:!te}),{assistantSystem:td}=x(),ts=$(),tl=c(td.panel$,t=>t.isInputFocused,[]),tm=ts&&te&&tl,tc=y(tm),tp=tn&&!ts,tu={isContentEmpty:tp,sidebarHeight:ts?V.includes(w)?N:w:w,assistantFocusHeight:tm?tc?.[1]:void 0},tb={background:O,borderRadius:Q,padding:U,isContentEmpty:tp};return a(e,{children:[t(s,{initial:!1,children:!Z&&Y&&t(F,{})}),a(G,{ownerState:tu,"data-layout":u({state:{[`${L}`]:!X,[`${q}`]:X}}),...K(!_),children:[t(J,{ref:ti}),t("div",{"data-layout":"slot[sideEffects]",children:t(k.MobileSnackbarsRoot,{})}),a("main",{"data-layout":"slot[body]",children:[t("header",{"data-layout":"slot[body.header]",children:a(R,{"data-header":u({state:{[`${T}`]:tt,[`${I}`]:!tt}}),...K(!tt),children:[t("div",{"data-header":"slot[start]",children:t(C,{})}),t("div",{"data-header":"slot[center]",children:t(k.MobileCallToAction,{})}),a("div",{"data-header":"slot[end]",children:[W.viewMode&&!X&&t(k.MobileReadonlyBanner,{}),t(k.MobileHamburgerMenu,{})]})]})}),t("div",{ref:tr,"data-layout":"slot[body.safeSceneArea]"}),t("div",{"data-layout":"slot[body.footer] interactive",children:a(P,{"data-controls":u({state:{[`${B}`]:ta,[`${E}`]:!ta}}),children:[t("div",{"data-controls":"slot[toolControls]",...K(!ta),children:t(k.MobileToolControls,{})}),t("div",{"data-controls":"slot[viewControls]",...K(!ta),children:t(k.MobileViewControls,{})}),t("div",{"data-controls":"slot[toolbar]",children:_&&t(k.MobileToolbar,{})})]})})]}),t("aside",{"data-layout":"slot[sidebar]",children:a(H.Root,{ownerState:tb,"data-sidebar":u({state:{[`${j}`]:te,[`${A}`]:!te,[`${z}`]:ts}}),...K(!te),children:[a(H.Header,{ownerState:tb,"data-sidebar":"slot[header]",children:[t("div",{"data-sidebar":"slot[header.start]",children:t(k.MobileSidebarBackButton,{})}),t("div",{"data-sidebar":"slot[header.end]",children:t(k.MobilePoweredBy,{})})]}),t(H.Body,{ownerState:tb,"data-sidebar":"slot[body]",children:t(H.Content,{ref:o,ownerState:tb,"data-sidebar":"slot[content]",children:t(k.MobileSidebarContent,{})})}),t(H.Tabs,{ownerState:tb,"data-sidebar":"slot[tabs]",children:t(k.MobileTabs,{})}),t(H.Footer,{ownerState:tb,"data-sidebar":"slot[footer]",children:t(k.MobileSidebarFooter,{})}),t(S,{})]})}),t("footer",{"data-layout":"slot[footer] interactive",children:t(k.MobileFooter,{})})]})]})};
42
+ `},'[data-layout*="slot[body.header]"]':{gridArea:"header-start / main-start / header-end / main-end"},'[data-layout*="slot[body.footer]"]':{gridArea:"footer-start / main-start / footer-end / main-end",position:"relative"},'[data-layout*="slot[body.safeSceneArea]"]':{gridArea:"full","@container style(--inspect: on)":{background:"hsl(from lime h s l / 50%)"}},'[data-layout="slot[body.sideEffects]"]':{insetBlockEnd:`calc(100% + ${a(2)})`,position:"absolute"},'[data-layout*="slot[sidebar]"]':{display:"grid",gridArea:"sidebar-start / full-start / sidebar-end / full-end",gridTemplateColumns:"minmax(0, 1fr)",gridTemplateRows:"minmax(0, auto)"},'[data-layout*="slot[footer]"]':{gridArea:"footer-start / full-start / footer-end / full-end",zIndex:1},'&:has([data-sidebar*="slot[content]"])':{...t.isContentEmpty&&{"--phx-layout-sidebar-track-size":"min-content"}},[`&[data-layout*="${z}"]`]:{transitionDelay:"200ms",transitionDuration:"300ms"},[`&[data-layout*="${H}"]`]:{transitionDelay:"0ms",transitionDuration:"300ms"},[`&:has([data-sidebar*="${D}"])[class]`]:{"--phx-layout-sidebar-track-size":0}},null!=t.assistantFocusHeight&&{'[data-layout*="slot[sidebar]"]':{alignSelf:"start",blockSize:`min(100%, ${t.assistantFocusHeight}px)`,gridRow:"full-start / full-end",zIndex:2}}]),V=i("div")({gridArea:"1 / 1 / -1 / -1"}),G=t=>({inert:t?"":void 0});export const MobileLayout=()=>{let o=s(null),{palette:i,shape:u,spacing:b}=r(),{sidebarHeight:x=L}=n({props:{},name:"PhxMobileLayout"}),{background:J=i.background.paper,borderRadius:K=u.sidebarBorderRadius??u.borderRadius,padding:O=b(2)}=n({props:{},name:E}),{accessInfo:Q}=l(),U=c(),{isPreview:W,isHidden:X}=y(),Y=!X&&!W,Z=!U&&Y,_=!U&&Y,tt=!U,{containerRef:ta,safeAreaRef:te}=C({enabled:Y,hasMiniSidebar:!1}),to=h(o,{disabled:!tt}),{assistantSystem:ti}=f(),tr=w(),tn=m(ti.panel$,t=>t.isInputFocused,[]),td=tr&&tt&&tn,ts=g(td),tl=to&&!tr,tm={isContentEmpty:tl,sidebarHeight:tr?q.includes(x)?L:x:x,assistantFocusHeight:td?ts?.[1]:void 0},tc={background:J,borderRadius:K,padding:O,isContentEmpty:tl};return a(e,{children:[t(d,{initial:!1,children:!X&&W&&t(k,{})}),a(N,{ownerState:tm,"data-layout":p({state:{[`${z}`]:!U,[`${H}`]:U}}),...G(!Y),children:[t(V,{ref:ta}),t("div",{"data-layout":"slot[sideEffects]",children:t(S.MobileSnackbarsRoot,{})}),a("main",{"data-layout":"slot[body]",children:[t("header",{"data-layout":"slot[body.header]",children:a(T,{"data-header":p({state:{[`${F}`]:Z,[`${M}`]:!Z}}),...G(!Z),children:[t("div",{"data-header":"slot[start]",children:t($,{})}),t("div",{"data-header":"slot[center]",children:t(S.MobileCallToAction,{})}),a("div",{"data-header":"slot[end]",children:[Q.viewMode&&!U&&t(S.MobileReadonlyBanner,{}),t(S.MobileHamburgerMenu,{})]})]})}),t("div",{ref:te,"data-layout":"slot[body.safeSceneArea]"}),t("div",{"data-layout":"slot[body.footer] interactive",children:a(B,{"data-controls":p({state:{[`${I}`]:_,[`${R}`]:!_}}),children:[t("div",{"data-controls":"slot[toolControls]",...G(!_),children:t(S.MobileToolControls,{})}),t("div",{"data-controls":"slot[viewControls]",...G(!_),children:t(S.MobileViewControls,{})}),t("div",{"data-controls":"slot[toolbar]",children:Y&&t(S.MobileToolbar,{})})]})})]}),t("aside",{"data-layout":"slot[sidebar]",children:a(A.Root,{ownerState:tc,"data-sidebar":p({state:{[`${P}`]:tt,[`${D}`]:!tt,[`${j}`]:tr}}),...G(!tt),children:[a(A.Header,{ownerState:tc,"data-sidebar":"slot[header]",children:[t("div",{"data-sidebar":"slot[header.start]",children:t(S.MobileSidebarBackButton,{})}),t("div",{"data-sidebar":"slot[header.end]",children:t(S.MobilePoweredBy,{})})]}),t(A.Body,{ownerState:tc,"data-sidebar":"slot[body]",children:t(A.Content,{ref:o,ownerState:tc,"data-sidebar":"slot[content]",children:t(S.MobileSidebarContent,{})})}),t(A.Tabs,{ownerState:tc,"data-sidebar":"slot[tabs]",children:t(S.MobileTabs,{})}),t(A.Footer,{ownerState:tc,"data-sidebar":"slot[footer]",children:t(S.MobileSidebarFooter,{})}),t(v,{})]})}),t("footer",{"data-layout":"slot[footer] interactive",children:t(S.MobileFooter,{})})]})]})};
@@ -1 +1 @@
1
- import{jsx as t}from"react/jsx-runtime";import e from"lodash/noop.js";import{useCallback as o,useMemo as i}from"react";import{useResolveLocalizable as r}from"#package/react-sdk";import{Preview as a,useResponsive as s}from"#package/ui-sdk";import{usePresetSelection as n,usePreview as m}from"../../../configurator-context/index.js";import{useSceneSafeArea as p}from"./use-scene-safe-area.js";let c={id:"sdk.preview.customize.title",message:"Customize product"},l={id:"sdk.preview.start.button.label",message:"Start configuring"},u={initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{opacity:{duration:.1,ease:"linear"}}};export const MobilePreview=f=>{let{slotProps:d={},slots:g}=f,{enter:k,isPreview:x}=m(),{hasMultiplePresets:b}=n(),{setCanvasPadding:j}=s(),{containerRef:y,safeAreaRef:w,update:v}=p(x?j:e,!1),S=r(),h=o(()=>{v()},[v]),z=i(()=>({...d,root:{...u,onLayoutAnimationComplete:h,...d.root}}),[h,d]);return t(a,{title:S(c),buttonLabel:S(l),containerRef:y,safeAreaRef:w,withScene:!b,slots:g,slotProps:z,onStart:k})};
1
+ import{jsx as t}from"react/jsx-runtime";import{useCallback as e,useMemo as o}from"react";import{useResolveLocalizable as i}from"#package/react-sdk";import{Preview as a}from"#package/ui-sdk";import{usePresetSelection as r,usePreview as s}from"../../../configurator-context/index.js";import{useLayoutSceneSafeArea as n}from"./use-layout-scene-safe-area.js";let m={id:"sdk.preview.customize.title",message:"Customize product"},p={id:"sdk.preview.start.button.label",message:"Start configuring"},c={initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{opacity:{duration:.1,ease:"linear"}}};export const MobilePreview=l=>{let{slotProps:u={},slots:d}=l,{enter:f,isPreview:b}=s(),{hasMultiplePresets:g}=r(),{containerRef:k,safeAreaRef:x,update:y}=n({enabled:b,hasMiniSidebar:!1}),j=i(),w=e(()=>{y()},[y]),S=o(()=>({...u,root:{...c,onLayoutAnimationComplete:w,...u.root}}),[w,u]);return t(a,{title:j(m),buttonLabel:j(p),containerRef:k,safeAreaRef:x,withScene:!g,slots:d,slotProps:S,onStart:f})};
@@ -0,0 +1,47 @@
1
+ /** What a built-in layout tells the safe-area measurement about itself. */
2
+ export interface LayoutSceneSafeAreaOptions {
3
+ /** Whether the layout owns the canvas padding now. See `useLayoutSceneSafeArea`. */
4
+ readonly enabled: boolean;
5
+ /** Whether the sidebar is collapsed to its mini form, which the scene clears only in part. */
6
+ readonly hasMiniSidebar: boolean;
7
+ }
8
+ /**
9
+ * Measures the gap between a full-area container and an inner "safe area" element,
10
+ * and writes the resulting gaps to the responsive context as canvas padding — letting the
11
+ * 3D scene render only in the region not covered by overlay UI (preview body, sidebar, etc.).
12
+ *
13
+ * The implementation behind `useSceneSafeArea`, with the two things only the built-in
14
+ * layouts need: `enabled` and `hasMiniSidebar`.
15
+ *
16
+ * Returns:
17
+ * - `containerRef` — attach to the full-area measurement element.
18
+ * - `safeAreaRef` — attach to the region the scene should remain visible in.
19
+ * - `update` — trigger a manual re-measure on demand.
20
+ *
21
+ * `containerRef` / `safeAreaRef` are *callback* refs: the `ResizeObserver` (re)connects
22
+ * whenever a node attaches or detaches. This matters because the owning layout can mount
23
+ * late — `AnimatePresence mode="wait"` only mounts the interface after the preview has
24
+ * finished exiting, well after a one-shot mount effect would have run and bailed on null
25
+ * refs (leaving the scene stuck at the preview's padding).
26
+ *
27
+ * `enabled` is for a layout that stays mounted while another one owns the padding (e.g. the
28
+ * mobile interface while previewing, or a preview that lingers through its exit fade). While
29
+ * it is `false` the observer is disconnected, and a measurement started by the `update` of that
30
+ * render or by a pending retry writes nothing. An `update` that was created while the hook was
31
+ * enabled, such as a handler an animation already holds, still measures and writes. Turning
32
+ * `enabled` back on reconnects the observer, which measures again.
33
+ *
34
+ * `getBoundingClientRect()` returns *visually transformed* rects, so `measure` skips
35
+ * transformed frames automatically (retrying until the transform clears) to avoid feeding
36
+ * the scene a scaled gap mid layout animation.
37
+ *
38
+ * `update` exists for the complementary case: when only an ancestor's `transform` changes
39
+ * (e.g. motion FLIP settling), `ResizeObserver` doesn't fire, so nothing re-triggers
40
+ * `measure`. Call `update()` once the transform settles (e.g. from
41
+ * `onLayoutAnimationComplete`) to re-measure against the actual layout box.
42
+ */
43
+ export declare const useLayoutSceneSafeArea: (options: LayoutSceneSafeAreaOptions) => {
44
+ containerRef: (node: HTMLDivElement | null) => void;
45
+ safeAreaRef: (node: HTMLDivElement | null) => void;
46
+ update: () => void;
47
+ };
@@ -0,0 +1 @@
1
+ import{useCallback as t,useEffect as e,useRef as r}from"react";import{canvasPaddingComponent as n}from"#package/domain";import{useFirstComponent as o}from"#package/react-sdk";import{useResponsive as a}from"#package/ui-sdk";export const useLayoutSceneSafeArea=c=>{let{enabled:u,hasMiniSidebar:i}=c,{setCanvasPadding:m}=a(),l=r(null),s=r(null),f=r(null),h=r(null),p=r(0),g=r(()=>{}),b=o({componentTypes:[n]}),d=t(()=>{let t=s.current,e=f.current;if(!u||!t||!e)return;let r=t.getBoundingClientRect(),n=e.getBoundingClientRect();if(Math.abs(r.width-t.offsetWidth)>1||Math.abs(r.height-t.offsetHeight)>1){if(p.current+=1,p.current>60){p.current=0;return}l.current&&cancelAnimationFrame(l.current),l.current=requestAnimationFrame(()=>g.current());return}p.current=0;let o={bottom:Math.max(0,r.bottom-n.bottom),left:Math.max(0,n.left-r.left),right:Math.max(0,r.right-n.right),top:Math.max(0,n.top-r.top)},a=i?.3:1,c=b?.state.bottom??1,h=b?.state.left??1,d=b?.state.right??a,A=b?.state.top??1;m({bottom:o.bottom*c,left:o.left*h,right:o.right*d,top:o.top*A})},[u,i,b?.state.bottom,b?.state.left,b?.state.right,b?.state.top,m]);g.current=d;let A=t(()=>{l.current&&cancelAnimationFrame(l.current),l.current=requestAnimationFrame(d)},[d]),M=t(()=>{h.current?.disconnect(),h.current=null},[]),k=t(()=>{let t=s.current,e=f.current;if(!u||!t||!e)return void M();M();let r=new ResizeObserver(A);r.observe(t),r.observe(e),h.current=r},[M,u,A]),x=t(t=>{s.current=t,k()},[k]),F=t(t=>{f.current=t,k()},[k]);return e(()=>(k(),()=>{M(),l.current&&cancelAnimationFrame(l.current)}),[k,M]),{containerRef:x,safeAreaRef:F,update:A}};
@@ -1,33 +1,18 @@
1
- import type { CanvasPadding } from '#package/ui-sdk';
2
1
  /**
3
- * Measures the gap between a full-area container and an inner "safe area" element,
4
- * and forwards the resulting gaps as canvas padding — letting the 3D scene render
5
- * only in the region not covered by overlay UI (preview body, sidebar, etc.).
2
+ * Tells the camera which part of the canvas a layout leaves free for the scene.
6
3
  *
7
- * Returns:
8
- * - `containerRef` — attach to the full-area measurement element.
9
- * - `safeAreaRef` — attach to the region the scene should remain visible in.
10
- * - `update` — trigger a manual re-measure on demand.
11
- *
12
- * `containerRef` / `safeAreaRef` are *callback* refs: the `ResizeObserver` (re)connects
13
- * whenever a node attaches or detaches. This matters because the owning layout can mount
14
- * late — `AnimatePresence mode="wait"` only mounts the interface after the preview has
15
- * finished exiting, well after a one-shot mount effect would have run and bailed on null
16
- * refs (leaving the scene stuck at the preview's padding).
17
- *
18
- * `enabled` gates the whole thing: when `false` the observer is disconnected so an inactive
19
- * layout (e.g. the interface while previewing) neither measures nor writes padding.
4
+ * A layout attaches `containerRef` to the element that covers the whole canvas and `safeAreaRef`
5
+ * to the region the scene should stay visible in. The hook measures the gap between the two,
6
+ * again whenever either element resizes, and writes it to the responsive context as the canvas
7
+ * padding the camera frames the scene with.
20
8
  *
21
- * `getBoundingClientRect()` returns *visually transformed* rects, so `measure` skips
22
- * transformed frames automatically (retrying until the transform clears) to avoid feeding
23
- * the scene a scaled gap mid layout animation.
24
- *
25
- * `update` exists for the complementary case: when only an ancestor's `transform` changes
26
- * (e.g. motion FLIP settling), `ResizeObserver` doesn't fire, so nothing re-triggers
27
- * `measure`. Call `update()` once the transform settles (e.g. from
28
- * `onLayoutAnimationComplete`) to re-measure against the actual layout box.
9
+ * Returns:
10
+ * - `containerRef` — attach to the element that covers the whole canvas.
11
+ * - `safeAreaRef` — attach to the region the scene should stay visible in.
12
+ * - `update` — measures again on demand, for a change no resize reports, such as a `transform`
13
+ * on an ancestor settling at the end of an animation.
29
14
  */
30
- export declare const useSceneSafeArea: (setCanvasPadding: (padding: CanvasPadding) => void, hasMiniSidebar: boolean, enabled?: boolean) => {
15
+ export declare const useSceneSafeArea: () => {
31
16
  containerRef: (node: HTMLDivElement | null) => void;
32
17
  safeAreaRef: (node: HTMLDivElement | null) => void;
33
18
  update: () => void;
@@ -1 +1 @@
1
- import{useCallback as t,useEffect as e,useRef as r}from"react";import{canvasPaddingComponent as n}from"#package/domain";import{useFirstComponent as o}from"#package/react-sdk";export const useSceneSafeArea=(a,c,u=!0)=>{let i=r(null),l=r(null),m=r(null),s=r(null),f=r(0),h=r(()=>{}),g=o({componentTypes:[n]}),p=t(()=>{let t=l.current,e=m.current;if(!t||!e)return;let r=t.getBoundingClientRect(),n=e.getBoundingClientRect();if(Math.abs(r.width-t.offsetWidth)>1||Math.abs(r.height-t.offsetHeight)>1){if(f.current+=1,f.current>60){f.current=0;return}i.current&&cancelAnimationFrame(i.current),i.current=requestAnimationFrame(()=>h.current());return}f.current=0;let o={bottom:Math.max(0,r.bottom-n.bottom),left:Math.max(0,n.left-r.left),right:Math.max(0,r.right-n.right),top:Math.max(0,n.top-r.top)},u=c?.3:1,s=g?.state.bottom??1,p=g?.state.left??1,b=g?.state.right??u,d=g?.state.top??1;a({bottom:o.bottom*s,left:o.left*p,right:o.right*b,top:o.top*d})},[c,g?.state.bottom,g?.state.left,g?.state.right,g?.state.top,a]);h.current=p;let b=t(()=>{i.current&&cancelAnimationFrame(i.current),i.current=requestAnimationFrame(p)},[p]),d=t(()=>{s.current?.disconnect(),s.current=null},[]),A=t(()=>{let t=l.current,e=m.current;if(!u||!t||!e)return void d();d();let r=new ResizeObserver(b);r.observe(t),r.observe(e),s.current=r},[d,u,b]),M=t(t=>{l.current=t,A()},[A]),x=t(t=>{m.current=t,A()},[A]);return e(()=>(A(),()=>{d(),i.current&&cancelAnimationFrame(i.current)}),[A,d]),{containerRef:M,safeAreaRef:x,update:b}};
1
+ import{useLayoutSceneSafeArea as e}from"./use-layout-scene-safe-area.js";export const useSceneSafeArea=()=>e({enabled:!0,hasMiniSidebar:!1});
@@ -1,10 +1,10 @@
1
1
  import type { Localizable } from '@salsita-ai/common/utils';
2
2
  export interface TopNavigationStep {
3
- navigationStates: string[];
3
+ readonly navigationStates: readonly string[];
4
4
  label: Localizable;
5
5
  }
6
6
  export interface StepsNavigationComponentProps {
7
- steps: TopNavigationStep[];
7
+ steps: readonly TopNavigationStep[];
8
8
  }
9
9
  declare const StepsNavigationComponent: (props: StepsNavigationComponentProps) => import("react/jsx-runtime").JSX.Element;
10
10
  /**
@@ -1,9 +1,9 @@
1
1
  import type { Localizable } from '@salsita-ai/common/utils';
2
2
  export interface TopNavigationStep {
3
- navigationStates: string[];
3
+ readonly navigationStates: readonly string[];
4
4
  label: Localizable;
5
5
  }
6
6
  export interface StepsNavigationComponentProps {
7
- steps: TopNavigationStep[];
7
+ steps: readonly TopNavigationStep[];
8
8
  }
9
9
  export declare const StepsNavigation: import("react").MemoExoticComponent<(props: StepsNavigationComponentProps) => import("react/jsx-runtime").JSX.Element>;