@salsita-ai/sdk 0.50.0-develop.ea458ea381 → 0.50.0-develop.f42416a4e6

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 (100) hide show
  1. package/README.md +19 -11
  2. package/dist/application-spec/generate-application/code/templates/skills/phoenix-create-configurator-skill.js +3 -1
  3. package/dist/application-spec/generate-application/code/templates/skills/phoenix-feedback-skill.js +39 -16
  4. package/dist/application-spec/generate-application/code/templates/skills/phoenix-skill.js +1 -1
  5. package/dist/configurator/application-runtime/extensions/systems/layout-system/layout-system.d.ts +2 -0
  6. package/dist/configurator/application-runtime/extensions/systems/layout-system/layout-system.js +1 -1
  7. package/dist/configurator/assistant/use-assistant-chat.d.ts +15 -5
  8. package/dist/configurator/assistant/use-assistant-chat.js +1 -1
  9. package/dist/configurator/ui/assistant/AssistantChips.d.ts +11 -0
  10. package/dist/configurator/ui/assistant/AssistantChips.js +1 -0
  11. package/dist/configurator/ui/assistant/AssistantComposer.d.ts +11 -0
  12. package/dist/configurator/ui/assistant/AssistantComposer.js +1 -0
  13. package/dist/configurator/ui/assistant/AssistantMarkdown.d.ts +7 -0
  14. package/dist/configurator/ui/assistant/AssistantMarkdown.js +1 -0
  15. package/dist/configurator/ui/assistant/AssistantPanel.d.ts +11 -0
  16. package/dist/configurator/ui/assistant/AssistantPanel.js +1 -0
  17. package/dist/configurator/ui/assistant/AssistantPanelProvider.d.ts +42 -0
  18. package/dist/configurator/ui/assistant/AssistantPanelProvider.js +1 -0
  19. package/dist/configurator/ui/assistant/AssistantThread.d.ts +11 -0
  20. package/dist/configurator/ui/assistant/AssistantThread.js +1 -0
  21. package/dist/configurator/ui/assistant/assistant-failure.d.ts +18 -0
  22. package/dist/configurator/ui/assistant/assistant-failure.js +1 -0
  23. package/dist/configurator/ui/assistant/index.d.ts +2 -0
  24. package/dist/configurator/ui/assistant/index.js +1 -0
  25. package/dist/configurator/ui/assistant/streamed-markdown.d.ts +6 -0
  26. package/dist/configurator/ui/assistant/streamed-markdown.js +2 -0
  27. package/dist/configurator/ui/assistant/theme.d.ts +2 -0
  28. package/dist/configurator/ui/assistant/theme.js +1 -0
  29. package/dist/configurator/ui/assistant/thread-items.d.ts +37 -0
  30. package/dist/configurator/ui/assistant/thread-items.js +1 -0
  31. package/dist/configurator/ui/assistant/tool-chip.d.ts +37 -0
  32. package/dist/configurator/ui/assistant/tool-chip.js +1 -0
  33. package/dist/configurator/ui/assistant/use-follow-stream.d.ts +17 -0
  34. package/dist/configurator/ui/assistant/use-follow-stream.js +1 -0
  35. package/dist/configurator/ui/configurator-layout/universal/DesktopLayout.js +5 -5
  36. package/dist/configurator/ui/configurator-layout/universal/Layout.js +1 -1
  37. package/dist/configurator/ui/configurator-layout/universal/MobileLayout.d.ts +2 -0
  38. package/dist/configurator/ui/configurator-layout/universal/MobileLayout.js +3 -3
  39. package/dist/configurator/ui/phoenix-layout-elements/AssistantToolbarButton.d.ts +10 -0
  40. package/dist/configurator/ui/phoenix-layout-elements/AssistantToolbarButton.js +1 -0
  41. package/dist/configurator/ui/phoenix-layout-elements/index.d.ts +1 -0
  42. package/dist/configurator/ui/phoenix-layout-elements/index.js +1 -1
  43. package/dist/docs/index.json +1 -1
  44. package/dist/docs/layouts/toolbar.mdx +4 -0
  45. package/dist/docs/phoenix/admin.mdx +2 -2
  46. package/dist/docs/phoenix/finalization.mdx +1 -1
  47. package/dist/docs/phoenix/integration/headless-mode-external.mdx +5 -5
  48. package/dist/docs/phoenix/integration/widget-mode-external.mdx +5 -5
  49. package/dist/docs/phoenix/phoenix-cli.mdx +56 -18
  50. package/dist/docs/phoenix/project-structure.mdx +1 -1
  51. package/dist/docs/phoenix/sdk-builder-workflow.mdx +3 -2
  52. package/dist/domain/system-components/phoenix-layout-elements/assistant-toolbar-button.d.ts +44 -0
  53. package/dist/domain/system-components/phoenix-layout-elements/assistant-toolbar-button.js +1 -0
  54. package/dist/domain/system-components/phoenix-layout-elements/index.d.ts +1 -0
  55. package/dist/domain/system-components/phoenix-layout-elements/index.js +1 -1
  56. package/dist/domain/system-components/phoenix-layout-elements/phoenix-layout-element.d.ts +2 -1
  57. package/dist/domain/system-components/phoenix-layout-elements/phoenix-layout-element.js +1 -1
  58. package/dist/i18n/locales/cs/messages.js +1 -1
  59. package/dist/i18n/locales/da/messages.js +1 -1
  60. package/dist/i18n/locales/de/messages.js +1 -1
  61. package/dist/i18n/locales/de-AT/messages.js +1 -1
  62. package/dist/i18n/locales/en/messages.js +1 -1
  63. package/dist/i18n/locales/en-AU/messages.js +1 -1
  64. package/dist/i18n/locales/en-GB/messages.js +1 -1
  65. package/dist/i18n/locales/es/messages.js +1 -1
  66. package/dist/i18n/locales/fr/messages.js +1 -1
  67. package/dist/i18n/locales/hu/messages.js +1 -1
  68. package/dist/i18n/locales/it/messages.js +1 -1
  69. package/dist/i18n/locales/nl/messages.js +1 -1
  70. package/dist/i18n/locales/pl/messages.js +1 -1
  71. package/dist/i18n/locales/pt/messages.js +1 -1
  72. package/dist/i18n/locales/ro/messages.js +1 -1
  73. package/dist/i18n/locales/sk/messages.js +1 -1
  74. package/dist/i18n/locales/tr/messages.js +1 -1
  75. package/dist/legacy/domain-spec/__generated/domain-schema.d.ts +6 -0
  76. package/dist/phoenix/cli.js +1 -1
  77. package/dist/phoenix/commands/build.d.ts +5 -0
  78. package/dist/phoenix/commands/build.js +1 -1
  79. package/dist/phoenix/commands/deploy.js +2 -2
  80. package/dist/phoenix/commands/feedback.d.ts +2 -1
  81. package/dist/phoenix/commands/feedback.js +1 -1
  82. package/dist/phoenix/services/index.d.ts +1 -0
  83. package/dist/phoenix/services/index.js +1 -1
  84. package/dist/phoenix/services/phx-banner-plugin.d.ts +32 -0
  85. package/dist/phoenix/services/phx-banner-plugin.js +1 -0
  86. package/dist/phoenix/services/phx-licenses-plugin.d.ts +55 -0
  87. package/dist/phoenix/services/phx-licenses-plugin.js +8 -0
  88. package/dist/phoenix/services/vite-config.d.ts +2 -0
  89. package/dist/phoenix/services/vite-config.js +1 -1
  90. package/dist/phoenix/utils/index.d.ts +1 -0
  91. package/dist/phoenix/utils/index.js +1 -1
  92. package/dist/phoenix/utils/read-git-commit.d.ts +14 -0
  93. package/dist/phoenix/utils/read-git-commit.js +1 -0
  94. package/dist/ui-sdk/theme/types.d.ts +4 -0
  95. package/package.json +4 -7
  96. package/schema/domain-spec.json +24 -0
  97. package/dist/extras/assistant/AssistantChat.d.ts +0 -6
  98. package/dist/extras/assistant/AssistantChat.js +0 -1
  99. package/dist/extras/assistant/index.d.ts +0 -1
  100. package/dist/extras/assistant/index.js +0 -1
@@ -1,11 +1,11 @@
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 k,useResponsive as x}from"#package/ui-sdk";import{usePreview as v}from"../../../configurator-context/index.js";import{LayoutSlots as S}from"../slots/index.js";import{DesktopPreview as E}from"./DesktopPreview.js";import{useSceneSafeArea as w}from"./use-scene-safe-area.js";let R="PhxDesktopSidebar",B="minimalist",$="split",C="visible",D="hidden",T={Root:i("div",{name:R,slot:"root",shouldForwardProp:a=>"ownerState"!==a})(({ownerState:a})=>[`
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,useAssistantPanel 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
2
  --phx-sidebar-background: ${a.background};
3
3
  --phx-sidebar-border: ${a.border};
4
4
  --phx-sidebar-filter: ${a.filter};
5
5
  --phx-sidebar-padding: ${a.padding};
6
6
  --phx-sidebar-radius: ${a.borderRadius}px;
7
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*="${C}"]`]:{opacity:1},[`&[data-sidebar*="${D}"]`]:{opacity:0}}]),Tabs:i("div",{name:R,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:R,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:R,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*="${B}"] &`]:{...a.isContentEmpty&&{border:0}},[`[data-sidebar*="${$}"] &`]:{borderBlockEnd:"var(--phx-sidebar-border)",borderEndStartRadius:"inherit",borderEndEndRadius:"inherit",paddingBlockEnd:"var(--phx-sidebar-padding)"}})),Content:i("div",{name:R,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*="${$}"] &`]:{paddingBlockEnd:0,"&::after":{borderEndStartRadius:0,borderEndEndRadius:0,insetBlockEnd:"var(--phx-sidebar-padding)"}}})),Footer:i("footer",{name:R,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*="${B}"] &`]:{...a.isContentEmpty&&{borderBlockStart:"var(--phx-sidebar-border)",borderStartStartRadius:"inherit",borderStartEndRadius:"inherit"}},[`[data-sidebar*="${$}"] &`]:{borderBlockStart:"var(--phx-sidebar-border)",borderStartStartRadius:"inherit",borderStartEndRadius:"inherit",marginBlockStart:o(2)}}))};export const PhxDesktopLayoutName="PhxDesktopLayout";let I="PhxDesktopLayout",A=i(p.div,{name:I,slot:"root",shouldForwardProp:a=>"ownerState"!==a})(({ownerState:a,theme:{spacing:t}})=>{let o=e({"0%":{marginInlineEnd:0},"100%":{marginInlineEnd:t(-2)}});return[`
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[`
9
9
  --inspect: off; // 🕹️ inspection mode toggle
10
10
 
11
11
  --phx-layout-sidebar-track-size: ${g(a.sidebarWidth)};
@@ -38,12 +38,12 @@ import{jsx as a,jsxs as t,Fragment as o}from"react/jsx-runtime";import{keyframes
38
38
  [bottom-start]
39
39
  min-content
40
40
  [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*="${B}"])`]:{'[data-layout*="slot[sidebar]"]':{alignContent:"end",gridRow:"main-start / main-end"}},[`&:has([data-header*="floating"]):has([data-sidebar*="${B}"])`]:{'[data-layout*="slot[header]"]':{gridColumnEnd:"sidebar-end"},'[data-layout*="slot[sidebar]"]':{gridRowStart:"top-end"}},[`&:has([data-sidebar*="${D}"])`]:{"--phx-layout-gap":0,"--phx-layout-sidebar-track-size":0,'[data-layout*="slot[sidebar]"]':{overflow:"hidden"}}}]}),P=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:I}),{background:g=d.background.paper,border:F=0,borderRadius:j=i.sidebarBorderRadius??i.borderRadius,filter:z=`
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
42
  drop-shadow(0 1px 1.5px hsl(from ${d.common.black} h s l / 12%))
43
43
  drop-shadow(0 1px 0.5px hsl(from ${d.common.black} h s l / 14%))
44
44
  drop-shadow(0 2px 0.5px hsl(from ${d.common.black} h s l / 20%))
45
- `,padding:H=p(2.5),scrollableIndicatorBackground:L=`linear-gradient(
45
+ `,padding:q=p(2.5),scrollableIndicatorBackground:M=`linear-gradient(
46
46
  180deg,
47
47
  hsl(from black h s l / 12%),
48
48
  hsl(from black h s l / 0%) 8px
49
- )`}=s({props:{},name:R}),{hasMiniSidebar:W,hasSplitSidebar:q}=S.useSidebarContent(),{accessInfo:M}=c(),N=m(),{isPreview:V,isHidden:X}=v(),G=!X&&!V,J=!N,{setCanvasPadding:K,setAnimating:O}=x(),{containerRef:Q,safeAreaRef:U,update:Y}=w(K,W,G),Z=b(()=>{O(!0)},[O]),_=b(()=>{O(!1),Y()},[O,Y]),aa=G&&J,at=k(e,{disabled:!aa}),ao=k(r,{disabled:!aa});f(r,{disabled:!aa});let ae={background:g,border:F,borderRadius:j,filter:z,isHeaderEmpty:at,isContentEmpty:ao,padding:H,scrollableIndicatorBackground:L,width:y};return a(o,{children:t(l,{mode:"wait",children:[!X&&V&&a(E,{},"preview-layout"),G&&t(A,{layoutId:"ui-layout",layout:!0,ownerState:{sidebarWidth:y},"data-layout":h({state:{initial:!N,fullscreen:N}}),onLayoutAnimationStart:Z,onLayoutAnimationComplete:_,children:[a(P,{ref:Q}),a("header",{"data-layout":"slot[header]",children:a(S.DesktopHeader,{})}),t("main",{"data-layout":"slot[body]",children:[a("div",{"data-layout":"slot[body.top] interactive",children:a(S.DesktopCallToAction,{})}),a("div",{ref:U,"data-layout":"slot[body.safeSceneArea]"}),t("div",{"data-layout":"slot[body.bottom] interactive",children:[a("div",{"data-layout":"slot[body.toolbar]",children:a(S.DesktopToolbar,{})}),a("div",{"data-layout":"slot[body.toolControls]",children:!N&&a(S.DesktopToolControls,{})}),a("div",{"data-layout":"slot[body.viewControls]",children:a(S.DesktopViewControls,{})}),a("div",{"data-layout":"slot[body.logo]",children:a(S.DesktopPoweredBy,{})}),a("div",{"data-layout":"slot[body.sideEffects]",children:a(S.DesktopSnackbarsRoot,{})})]})]}),a("aside",{"data-layout":"slot[sidebar]",children:t(T.Root,{ownerState:ae,"data-sidebar":h({variant:{[`${B}`]:W,[`${$}`]:q},state:{[`${C}`]:J,[`${D}`]:!J}}),inert:J?void 0:"",children:[a(T.Tabs,{ownerState:ae,"data-sidebar":"slot[tabs]",children:a(S.DesktopSidebarTabs,{})}),a(T.Header,{ref:e,ownerState:ae,"data-sidebar":"slot[header]",children:a(S.DesktopSidebarBackButton,{})}),a(T.Body,{ownerState:ae,"data-sidebar":"slot[body]",children:a(T.Content,{ref:r,ownerState:ae,"data-sidebar":"slot[content]",children:a(S.DesktopSidebarContent,{})})}),a(T.Footer,{ownerState:ae,"data-sidebar":"slot[footer]",children:a(S.DesktopSidebarFooter,{})})]})}),t("footer",{"data-layout":"slot[footer] interactive",children:[M.viewMode&&!N&&a(S.DesktopReadonlyBanner,{}),a(S.DesktopFooter,{})]})]},"interface-layout")]})})};
49
+ )`}=s({props:{},name:C}),{hasMiniSidebar:N,hasSplitSidebar:V}=R.useSidebarContent(),X=w()?.open??!1,{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")]})})};
@@ -1 +1 @@
1
- import{jsx as r,jsxs as o,Fragment as s}from"react/jsx-runtime";import{useResponsive as t}from"#package/ui-sdk";import{LayoutSlots as e}from"../slots/index.js";import{DesktopLayout as a}from"./DesktopLayout.js";import{MobileLayout as m}from"./MobileLayout.js";export const Layout=()=>{let{isDesktop:i}=t();return o(s,{children:[r(e.Services,{}),r(e.SharedCanvas,{}),i?r(a,{}):r(m,{})]})};
1
+ import{jsx as r,jsxs as s,Fragment as o}from"react/jsx-runtime";import{useResponsive as t}from"#package/ui-sdk";import{AssistantPanelProvider as e}from"../../assistant/index.js";import{LayoutSlots as a}from"../slots/index.js";import{DesktopLayout as i}from"./DesktopLayout.js";import{MobileLayout as m}from"./MobileLayout.js";export const Layout=()=>{let{isDesktop:n}=t();return s(o,{children:[r(a.Services,{}),r(a.SharedCanvas,{}),r(e,{children:n?r(i,{}):r(m,{})})]})};
@@ -86,6 +86,8 @@ declare module '@mui/material/styles' {
86
86
  }
87
87
  interface LayoutOwnerState {
88
88
  readonly isContentEmpty?: boolean;
89
+ /** Height of the assistant panel while its input has focus: what the on-screen keyboard leaves free. */
90
+ readonly assistantFocusHeight?: number;
89
91
  }
90
92
  export interface ThemeableMobileLayoutProps extends LayoutOwnerState {
91
93
  /**
@@ -1,8 +1,8 @@
1
- import{jsx as t,jsxs as a,Fragment as e}from"react/jsx-runtime";import{snackbarClasses as o,styled as r,useTheme as i,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,useIsFullscreenActive as p}from"#package/react-sdk";import{attrf as c,commonStyles as u,numToPx as b,useIsEmpty as h,useResponsive as g}from"#package/ui-sdk";import{usePreview as y}from"../../../configurator-context/index.js";import{LayoutSlots as f}from"../slots/index.js";import{MobileHeader as x}from"../slots/slots.js";import{MobilePreview as v}from"./MobilePreview.js";import{useSceneSafeArea as w}from"./use-scene-safe-area.js";let S="visible",k="hidden",C=r("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*="${S}"]`]:{opacity:1,transitionDuration:"200ms, 300ms",transitionTimingFunction:"linear, ease-out",translate:"0 0"},[`&[data-header*="${k}"]`]:{opacity:0,transitionDuration:"100ms, 100ms",transitionTimingFunction:"linear, ease-in",translate:"0 -60%"}})),$="visible",M="hidden",F=r("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*="${$}"]`]:{'[data-controls="slot[toolControls]"], [data-controls="slot[viewControls]"]':{opacity:1,transitionDuration:"200ms, 300ms",transitionTimingFunction:"linear, ease-out",translate:"0 0"}},[`&[data-controls*="${M}"]`]:{'[data-controls="slot[toolControls]"], [data-controls="slot[viewControls]"]':{opacity:0,transitionDuration:"100ms, 100ms",transitionTimingFunction:"linear, ease-in",translate:"0 60%"}}})),T="PhxMobileSidebar",I="visible",B="hidden",R={Root:r("div",{name:T,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 d from"lodash/noop.js";import{AnimatePresence as s}from"motion/react";import{useRef as l}from"react";import{useAccessService as m,useIsFullscreenActive as c}from"#package/react-sdk";import{attrf as p,commonStyles as u,numToPx as b,useIsEmpty as h,useResponsive as g,useViewportSize as f}from"#package/ui-sdk";import{usePreview as y}from"../../../configurator-context/index.js";import{ASSISTANT_PANEL_SLOT as x,AssistantPanel as v,useAssistantPanel 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{useSceneSafeArea as C}from"./use-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
- `,{...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","& > *":{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*="${I}"]`]:{opacity:1,transitionDuration:"200ms, 300ms",transitionTimingFunction:"linear, ease-out",translate:"0 0"},[`&[data-sidebar*="${B}"]`]:{opacity:0,transitionDuration:"100ms, 100ms",transitionTimingFunction:"linear, ease-in",translate:"0 60%"}}]),Header:r("header",{name:T,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:r("div",{name:T,slot:"body",shouldForwardProp:t=>"ownerState"!==t})({display:"grid",gridTemplateRows:"minmax(0, 1fr)"}),Content:r("div",{name:T,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:r("div",{name:T,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:r("footer",{name:T,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 E="initial",P="fullscreen",D=r("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
8
  --phx-layout-sidebar-track-size: ${b(t.sidebarHeight)};
@@ -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*="${E}"]`]:{transitionDelay:"200ms",transitionDuration:"300ms"},[`&[data-layout*="${P}"]`]:{transitionDelay:"0ms",transitionDuration:"300ms"},[`&:has([data-sidebar*="${B}"])[class]`]:{"--phx-layout-sidebar-track-size":0}}]),j=r("div")({gridArea:"1 / 1 / -1 / -1"}),A=t=>({inert:t?"":void 0});export const MobileLayout=()=>{let o=l(null),{palette:r,shape:u,spacing:b}=i(),{sidebarHeight:z="min(480px, 50cqb)"}=n({props:{},name:"PhxMobileLayout"}),{background:H=r.background.paper,borderRadius:L=u.sidebarBorderRadius??u.borderRadius,padding:q=b(2)}=n({props:{},name:T}),{accessInfo:N}=m(),V=p(),{isPreview:G,isHidden:J}=y(),K=!J&&!G,O=!V&&K,Q=!V&&K,U=!V,{setCanvasPadding:W}=g(),{containerRef:X,safeAreaRef:Y}=w(K?W:d,!1),Z=h(o,{disabled:!U}),_={background:H,borderRadius:L,padding:q,isContentEmpty:Z};return a(e,{children:[t(s,{initial:!1,children:!J&&G&&t(v,{})}),a(D,{ownerState:{isContentEmpty:Z,sidebarHeight:z},"data-layout":c({state:{[`${E}`]:!V,[`${P}`]:V}}),...A(!K),children:[t(j,{ref:X}),t("div",{"data-layout":"slot[sideEffects]",children:t(f.MobileSnackbarsRoot,{})}),a("main",{"data-layout":"slot[body]",children:[t("header",{"data-layout":"slot[body.header]",children:a(C,{"data-header":c({state:{[`${S}`]:O,[`${k}`]:!O}}),...A(!O),children:[t("div",{"data-header":"slot[start]",children:t(x,{})}),t("div",{"data-header":"slot[center]",children:t(f.MobileCallToAction,{})}),a("div",{"data-header":"slot[end]",children:[N.viewMode&&!V&&t(f.MobileReadonlyBanner,{}),t(f.MobileHamburgerMenu,{})]})]})}),t("div",{ref:Y,"data-layout":"slot[body.safeSceneArea]"}),t("div",{"data-layout":"slot[body.footer] interactive",children:a(F,{"data-controls":c({state:{[`${$}`]:Q,[`${M}`]:!Q}}),children:[t("div",{"data-controls":"slot[toolControls]",...A(!Q),children:t(f.MobileToolControls,{})}),t("div",{"data-controls":"slot[viewControls]",...A(!Q),children:t(f.MobileViewControls,{})}),t("div",{"data-controls":"slot[toolbar]",children:K&&t(f.MobileToolbar,{})})]})})]}),t("aside",{"data-layout":"slot[sidebar]",children:a(R.Root,{ownerState:_,"data-sidebar":c({state:{[`${I}`]:U,[`${B}`]:!U}}),...A(!U),children:[a(R.Header,{ownerState:_,"data-sidebar":"slot[header]",children:[t("div",{"data-sidebar":"slot[header.start]",children:t(f.MobileSidebarBackButton,{})}),t("div",{"data-sidebar":"slot[header.end]",children:t(f.MobilePoweredBy,{})})]}),t(R.Body,{ownerState:_,"data-sidebar":"slot[body]",children:t(R.Content,{ref:o,ownerState:_,"data-sidebar":"slot[content]",children:t(f.MobileSidebarContent,{})})}),t(R.Tabs,{ownerState:_,"data-sidebar":"slot[tabs]",children:t(f.MobileTabs,{})}),t(R.Footer,{ownerState:_,"data-sidebar":"slot[footer]",children:t(f.MobileSidebarFooter,{})})]})}),t("footer",{"data-layout":"slot[footer] interactive",children:t(f.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=l(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}=m(),U=c(),{isPreview:W,isHidden:X}=y(),Y=!X&&!W,Z=!U&&Y,_=!U&&Y,tt=!U,{setCanvasPadding:ta}=g(),{containerRef:te,safeAreaRef:to}=C(Y?ta:d,!1),ti=h(o,{disabled:!tt}),tr=w(),tn=tr?.open??!1,td=tn&&tt&&(tr?.isInputFocused??!1),ts=f(),tl=ti&&!tn,tm={isContentEmpty:tl,sidebarHeight:tn?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(s,{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:te}),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:to,"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}`]:tn}}),...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,{})})]})]})};
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Opens and closes the assistant panel. It renders nothing where there is no panel to open: in a
3
+ * project without an assistant, or in a layout that does not carry the panel.
4
+ */
5
+ export declare const AssistantToolbarButton: import("react").FunctionComponent<{
6
+ readonly showTitle?: boolean;
7
+ readonly icon?: string;
8
+ } & {
9
+ children?: import("react").ReactNode;
10
+ }>;
@@ -0,0 +1 @@
1
+ import{jsx as t}from"react/jsx-runtime";import{Badge as r}from"@mui/material";import{memo as s,useCallback as a}from"react";import{assistantToolbarButtonSchema as o,createPhoenixLayoutElement as e}from"#package/domain";import{useLocalizable as i}from"#package/react-sdk";import{DesktopToolbar as n,PhxIcon as m,useResponsive as l}from"#package/ui-sdk";import{useAssistantPanel as p}from"../assistant/index.js";let c={id:"sdk.assistant.toolbarButton.label",message:"Assistant"};export const AssistantToolbarButton=e({schema:o,component:s(s=>{let{icon:o,showTitle:e=!0}=s,d=p(),u=i(c),{isPhone:k,isTablet:f}=l(),A=d?.open??!1,b=d?.setOpen,g=a(()=>{b?.(!A)},[A,b]);return d?t(n.Button,{title:u,onClick:g,showTitle:e&&!k&&!f,"aria-pressed":A,sx:{'&[aria-pressed="true"]':{backgroundColor:"action.selected"}},children:t(r,{color:"primary",variant:"dot",overlap:"circular",invisible:!d.hasUnreadReply,children:t(m,{name:o??(A?"CustomAiAssistantBold":"CustomAiAssistant")})})}):null})});
@@ -14,6 +14,7 @@ export { UndoToolbarButton } from './UndoToolbarButton.js';
14
14
  export { RedoToolbarButton } from './RedoToolbarButton.js';
15
15
  export { MeasurementsToolbarButton } from './MeasurementsToolbarButton.js';
16
16
  export { HelpToolbarButton } from './HelpToolbarButton.js';
17
+ export { AssistantToolbarButton } from './AssistantToolbarButton.js';
17
18
  export { HelpMenuAction } from './HelpMenuAction.js';
18
19
  export { LanguageMenuAction } from './LanguageMenuAction.js';
19
20
  export { MeasurementsMenuAction } from './MeasurementsMenuAction.js';
@@ -1 +1 @@
1
- export*from"./sidebar-footer/index.js";export*from"./header/index.js";export{useShareData,useShareSettings}from"./share/use-share.js";export{MenuRoutingProvider,useMenuRouting}from"./menu-actions/MenuRoutingContext.js";export{MenuAction}from"./menu-actions/MenuAction.js";export{RoutingMenuAction}from"./menu-actions/RoutingMenuAction.js";export{EnterFullscreenToolbarButton}from"./EnterFullscreenToolbarButton.js";export{ExitFullscreenToolbarButton}from"./ExitFullscreenToolbarButton.js";export{LanguageToolbarButton}from"./LanguageToolbarButton.js";export{ToolbarButtonGroup}from"./ToolbarButtonGroup.js";export{ShareMenuAction}from"./ShareMenuAction.js";export{ShareToolbarButton}from"./ShareToolbarButton.js";export{UndoToolbarButton}from"./UndoToolbarButton.js";export{RedoToolbarButton}from"./RedoToolbarButton.js";export{MeasurementsToolbarButton}from"./MeasurementsToolbarButton.js";export{HelpToolbarButton}from"./HelpToolbarButton.js";export{HelpMenuAction}from"./HelpMenuAction.js";export{LanguageMenuAction}from"./LanguageMenuAction.js";export{MeasurementsMenuAction}from"./MeasurementsMenuAction.js";export{ResetCameraToolbarButton}from"./ResetCameraToolbarButton.js";export{SimpleSummary}from"./SimpleSummary.js";export{ResetUndoListener}from"./ResetUndoListener.js";export{SetAsRecipeButton}from"./SetAsRecipeButton.js";export{LayoutDialog,createLayoutDialog}from"./LayoutDialog.js";export{LayoutFooter,createLayoutFooter}from"./LayoutFooter.js";export{CanvasLoader,createCanvasLoader}from"./CanvasLoader.js";export{AppLoader,createAppLoader}from"./AppLoader.js";export{ToolbarHelp,createToolbarHelp,useToolbarHelpExists}from"./ToolbarHelp.js";export{LayoutToolbarDesktop,createLayoutToolbarDesktop}from"./LayoutToolbarDesktop.js";export{LayoutToolbarDesktopFullScreen,createLayoutToolbarDesktopFullScreen}from"./LayoutToolbarDesktopFullScreen.js";export{LayoutToolbarReadDesktop,createLayoutToolbarReadDesktop}from"./LayoutToolbarReadDesktop.js";export{LayoutToolbarReadDesktopFullScreen,createLayoutToolbarReadDesktopFullScreen}from"./LayoutToolbarReadDesktopFullScreen.js";export{LayoutCustomOwnerUi,createLayoutCustomOwnerUi}from"./LayoutCustomOwnerUi.js";export{LayoutCustomReadUi,createLayoutCustomReadUi}from"./LayoutCustomReadUi.js";export{LayoutAdminUi,createLayoutAdminUi}from"./LayoutAdminUi.js";export{LayoutUserUi,createLayoutUserUi}from"./LayoutUserUi.js";export{ExitToolModeFab}from"./call-to-action/ExitToolModeFab.js";export*from"./svg-throbber-3d/index.js";
1
+ export*from"./sidebar-footer/index.js";export*from"./header/index.js";export{useShareData,useShareSettings}from"./share/use-share.js";export{MenuRoutingProvider,useMenuRouting}from"./menu-actions/MenuRoutingContext.js";export{MenuAction}from"./menu-actions/MenuAction.js";export{RoutingMenuAction}from"./menu-actions/RoutingMenuAction.js";export{EnterFullscreenToolbarButton}from"./EnterFullscreenToolbarButton.js";export{ExitFullscreenToolbarButton}from"./ExitFullscreenToolbarButton.js";export{LanguageToolbarButton}from"./LanguageToolbarButton.js";export{ToolbarButtonGroup}from"./ToolbarButtonGroup.js";export{ShareMenuAction}from"./ShareMenuAction.js";export{ShareToolbarButton}from"./ShareToolbarButton.js";export{UndoToolbarButton}from"./UndoToolbarButton.js";export{RedoToolbarButton}from"./RedoToolbarButton.js";export{MeasurementsToolbarButton}from"./MeasurementsToolbarButton.js";export{HelpToolbarButton}from"./HelpToolbarButton.js";export{AssistantToolbarButton}from"./AssistantToolbarButton.js";export{HelpMenuAction}from"./HelpMenuAction.js";export{LanguageMenuAction}from"./LanguageMenuAction.js";export{MeasurementsMenuAction}from"./MeasurementsMenuAction.js";export{ResetCameraToolbarButton}from"./ResetCameraToolbarButton.js";export{SimpleSummary}from"./SimpleSummary.js";export{ResetUndoListener}from"./ResetUndoListener.js";export{SetAsRecipeButton}from"./SetAsRecipeButton.js";export{LayoutDialog,createLayoutDialog}from"./LayoutDialog.js";export{LayoutFooter,createLayoutFooter}from"./LayoutFooter.js";export{CanvasLoader,createCanvasLoader}from"./CanvasLoader.js";export{AppLoader,createAppLoader}from"./AppLoader.js";export{ToolbarHelp,createToolbarHelp,useToolbarHelpExists}from"./ToolbarHelp.js";export{LayoutToolbarDesktop,createLayoutToolbarDesktop}from"./LayoutToolbarDesktop.js";export{LayoutToolbarDesktopFullScreen,createLayoutToolbarDesktopFullScreen}from"./LayoutToolbarDesktopFullScreen.js";export{LayoutToolbarReadDesktop,createLayoutToolbarReadDesktop}from"./LayoutToolbarReadDesktop.js";export{LayoutToolbarReadDesktopFullScreen,createLayoutToolbarReadDesktopFullScreen}from"./LayoutToolbarReadDesktopFullScreen.js";export{LayoutCustomOwnerUi,createLayoutCustomOwnerUi}from"./LayoutCustomOwnerUi.js";export{LayoutCustomReadUi,createLayoutCustomReadUi}from"./LayoutCustomReadUi.js";export{LayoutAdminUi,createLayoutAdminUi}from"./LayoutAdminUi.js";export{LayoutUserUi,createLayoutUserUi}from"./LayoutUserUi.js";export{ExitToolModeFab}from"./call-to-action/ExitToolModeFab.js";export*from"./svg-throbber-3d/index.js";
@@ -1,5 +1,5 @@
1
1
  {
2
- "generatedAt": "2026-10-08T15:23:30.576Z",
2
+ "generatedAt": "2026-10-09T17:02:22.383Z",
3
3
  "categories": [
4
4
  {
5
5
  "name": "Phoenix",
@@ -81,6 +81,10 @@ Phoenix provides built-in toolbar buttons for common operations:
81
81
  `props.showIndicatorSwitch: false` to hide the Dimension indicators switch. When omitted, the prop falls back to
82
82
  `applicationConfig.indicatorSwitch`, then `true`.
83
83
  - `helpToolbarButton` - Show help content (supports custom children)
84
+ - `assistantToolbarButton` - Open and close the built-in assistant panel. It renders only in a project whose
85
+ application spec has an `assistant` section. `props.showTitle` defaults to `true`; the label shows on a
86
+ desktop-sized layout only. The default toolbar includes it, in a group of its own, when the spec has an
87
+ `assistant` section.
84
88
 
85
89
  ### Mobile Toolbar Configuration
86
90
 
@@ -421,7 +421,7 @@ export const handler = webhookBuilder
421
421
 
422
422
  The publishing workflow validates admin state, transforms entities, and stores JSON to S3. Configurators access published data via `ctx.publishedData` in expressions.
423
423
 
424
- For implementation examples, see `packages/demos/demo-finalize/src/handlers/map-published-revision-data.ts`.
424
+ For implementation examples, see `packages/demos/demo-catalog-builder/src/handlers/map-published-chunked-data.ts`.
425
425
 
426
426
  For technical details about data transformation and storage, see [Data Sources - Published Data](?path=/docs/phoenix-data-sources--docs#published-data).
427
427
 
@@ -515,4 +515,4 @@ Ready to implement admin functionality in your Phoenix project? Here's what to e
515
515
  - **[Sessions and Access](?path=/docs/phoenix-sessions-and-access--docs)** - Understand admin authentication and permissions
516
516
  - **[Connected Data Sources](?path=/docs/phoenix-connected-data-sources--docs)** - Wire `$data` entries to Google Sheets or Excel; requires the embedded admin mode
517
517
 
518
- For hands-on examples, check out the finalize demo (`packages/demos/demo-finalize/`) which shows spec-driven admin using `createAdminPages` for presets and recipes. This demo demonstrates the YAML-based admin approach with publishing workflows rather than custom admin UI components.
518
+ For hands-on examples, check out the Catalog Builder demo (`packages/demos/demo-catalog-builder/`), which shows spec-driven admin pages over connected and generated data, custom catalog pages beside them, admin model migrations, and the publishing workflow.
@@ -355,4 +355,4 @@ Now that you understand finalization workflows, explore these related topics:
355
355
  - **[Admin](?path=/docs/phoenix-admin--docs)** - Learn about admin finalization and published data generation
356
356
  - **[Best Practices](?path=/docs/phoenix-best-practices--docs)** - Follow proven patterns for finalization implementation
357
357
 
358
- For hands-on practice, explore the finalize demo in the **[Quickstart](?path=/docs/phoenix-quickstart--docs)** guide.
358
+ For hands-on practice, explore the Precision demo (`packages/demos/demo-precision/`) for finalization resources — PDF, CSV, images, email attachments and callbacks — and the Catalog Builder demo (`packages/demos/demo-catalog-builder/`) for the finalization data lifecycle and access links.
@@ -51,11 +51,11 @@ For details on the server-side token exchange, see [Authentication](?path=/docs/
51
51
 
52
52
  The `power` attribute controls the configurator's state:
53
53
 
54
- | Value | Behavior |
55
- | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
56
- | `"off"` | Completely inactive. No rendering, no session, no network requests beyond loading the bundle. |
57
- | `"standby"` | Session initialized, assets preloaded (3D models, textures), but not rendered. Faster power-on, but consumes bandwidth and counts toward session quotas. |
58
- | `"on"` | Fully active and visible. |
54
+ | Value | Behavior |
55
+ | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
56
+ | `"off"` | Completely inactive. No rendering, no session, no network requests beyond loading the bundle. |
57
+ | `"standby"` | Session initialized and any textures listed in `resourcesConfig.prefetchTextureUrls` prefetched; nothing is rendered and no models are loaded. Faster power-on, but consumes bandwidth and counts toward session quotas. |
58
+ | `"on"` | Fully active and visible. |
59
59
 
60
60
  A typical flow: power on at login (`"standby"`), then toggle between `"on"` and `"standby"` as the user opens and closes the configurator. Use `"off"` only before the user has authenticated.
61
61
 
@@ -28,11 +28,11 @@ The configurator fills its parent container. Set a height on the element or a wr
28
28
 
29
29
  The `power` attribute controls whether the configurator is active. It accepts three values:
30
30
 
31
- | Value | Behavior |
32
- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
33
- | `"off"` | Configurator is completely inactive. No rendering, no session initialization, no network requests beyond loading the bundle. Lowest resource usage. |
34
- | `"standby"` | Configurator initializes its session and preloads assets (3D models, textures), but does not render. Subsequent power-on is faster, but consumes bandwidth and counts toward monthly session quotas. |
35
- | `"on"` | Configurator is fully active and visible. |
31
+ | Value | Behavior |
32
+ | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
33
+ | `"off"` | Configurator is completely inactive. No rendering, no session initialization, no network requests beyond loading the bundle. Lowest resource usage. |
34
+ | `"standby"` | Configurator initializes its session and prefetches any textures listed in `resourcesConfig.prefetchTextureUrls`, but does not render or load models. Subsequent power-on is faster, but consumes bandwidth and counts toward monthly session quotas. |
35
+ | `"on"` | Configurator is fully active and visible. |
36
36
 
37
37
  ### Choosing the Initial Power
38
38
 
@@ -327,15 +327,49 @@ as restart-required unless their feature documentation explicitly states live-up
327
327
 
328
328
  Builds the project for production deployment.
329
329
 
330
- | Flag | Env Variable | Default | Description |
331
- | ---------------- | --------------- | ------- | ------------------------------ |
332
- | `--onlyFrontend` | — | — | Build only the frontend bundle |
333
- | `--onlyWebhook` | — | — | Build only webhooks |
334
- | `--force` / `-f` | `FORCE_REBUILD` | `false` | Force full rebuild, skip cache |
335
- | `--debug` | `DEBUG` | `false` | Verbose logging |
330
+ | Flag | Env Variable | Default | Description |
331
+ | ----------------- | --------------- | ------- | --------------------------------------------------- |
332
+ | `--onlyFrontend` | — | — | Build only the frontend bundle |
333
+ | `--onlyWebhook` | — | — | Build only webhooks |
334
+ | `--force` / `-f` | `FORCE_REBUILD` | `false` | Force full rebuild, skip cache |
335
+ | `--banner <text>` | — | — | Replaces the application line of the banner comment |
336
+ | `--debug` | `DEBUG` | `false` | Verbose logging |
336
337
 
337
338
  The build target can also be controlled via `BUILD_TARGET` env (`frontend`, `webhook`, or `both`).
338
339
 
340
+ #### Banner comment
341
+
342
+ Every JavaScript file the frontend build emits (the configurator, admin and embedded bundles, and the editor's entry and lazy chunks) starts with a comment that identifies the build, so `head -n 5 <bundle.js>` tells two deployed bundles of nearly the same size apart:
343
+
344
+ ```js
345
+ /*!
346
+ * App version: 1.2.3; Commit: 9fd79ce0f4c1a2b3d4e5f60718293a4b5c6d7e8f
347
+ * Built with Salsita SDK 3.4.0. Copyright (c) Salsita s.r.o. All rights reserved.
348
+ * Third-party licences: THIRD-PARTY-LICENSES.txt
349
+ */
350
+ ```
351
+
352
+ The first line is the application's. By default it holds `applicationVersion` from `spec/application.yaml` and the commit checked out in the project, read with `git rev-parse HEAD`. Where git cannot read a commit for the project (no checkout, git missing or refusing the repository, or the project's `package.json` is not tracked by the repository around it), the line holds the version only and `--debug` logs it; this is the case for a platform build from uploaded sources.
353
+
354
+ `--banner <text>` replaces that line with your own text, for example when CI knows a release name the spec does not:
355
+
356
+ ```sh
357
+ pnpm phoenix build --banner "Release: ${RELEASE_NAME}; Commit: ${COMMIT_SHA}"
358
+ ```
359
+
360
+ The line is **public**: it ships in every bundle. The default publishes the application version and the commit SHA; pass `--banner ""` to leave the line out, and never put a secret or internal detail in your own text. The text is written as comment text only. Each line of a multi-line value (or each repeated `--banner`) becomes its own comment line and `*/` is written as `*\/`. There is no environment-variable fallback, and the option has no effect on webhook output or with `--onlyWebhook`. Lazy chunks keep their hashed file name when only the banner text changes.
361
+
362
+ The banner and the licences file below are produced by the application-spec pipeline; the legacy pipeline's build ignores `--banner`.
363
+
364
+ #### Third-party licences
365
+
366
+ The frontend build writes `.phoenix/dist/frontend/THIRD-PARTY-LICENSES.txt` next to the bundles and the banner comment points to it. It lists every third-party package whose code or styles are in any of the frontend bundles, once each, sorted by name and version, with the package's version, the licence declared in its `package.json` and the text of its licence file (`LICENSE*`, `LICENCE*` or `COPYING*`). A package that ships no licence file is listed without the text. Your project's own source is not listed.
367
+
368
+ Deploy the file together with the bundles, so the notices those licences ask for travel with every copy. The build lists licences; it does not judge whether a licence suits your product. Two kinds of package are not in the list, so add their notices yourself when you use them:
369
+
370
+ - packages used only inside a web worker, which are bundled separately;
371
+ - packages a stylesheet reaches on its own, through CSS `@import`, Sass `@use` or `url()`. A stylesheet imported from JavaScript or TypeScript (`import 'some-font/index.css'`) is listed.
372
+
339
373
  #### Bundle-size budgets
340
374
 
341
375
  Application-spec projects can set gzip-size limits for the standalone configurator and webhook bundles. Add the optional `budgets` section to a spec YAML file:
@@ -594,28 +628,32 @@ Revokes the token on the server and removes it from the credentials file. `--reg
594
628
 
595
629
  ### `phoenix deploy`
596
630
 
597
- Validates the spec, adds the pnpm settings `phoenix init` writes to `pnpm-workspace.yaml` when they are missing, packs and uploads the project, starts its build on the server and follows it until the configurator is live. Before the upload the server compares the domain model with the deployed one: a model that changed under an already deployed model version is refused with the reason, and needs a new model version and a [migration](?path=/docs/phoenix-migrations--docs). Once the build starts it prints `Follow the build in Studio: <url>`, the build's page in the Studio you signed in through; a sign-in stored by an older CLI has no Studio URL, so sign in again to get the link. `--region` or `--serverUrl` selects the server, as for `login`; `--no-wait` returns as soon as the build starts.
631
+ Validates the spec, adds the pnpm settings `phoenix init` writes to `pnpm-workspace.yaml` when they are missing, packs and uploads the project, starts its build on the server and follows it until the configurator is live. Before the upload the server compares the domain model with the deployed one: a model that changed under an already deployed model version is refused with the reason, and needs a new model version and a [migration](?path=/docs/phoenix-migrations--docs). Once the build starts it prints `Follow the build in Studio: <url>`, the build's page in the Studio you signed in through; a sign-in stored by an older CLI has no Studio URL, so sign in again to get the link. After `Your configurator is live at <url>` it prints one line for coding agents, which tells them to offer the run evaluation of the `phoenix-feedback` skill once you have nothing more to build; you can ignore it when you run the command yourself. `--region` or `--serverUrl` selects the server, as for `login`; `--no-wait` returns as soon as the build starts.
598
632
 
599
- ### `phoenix feedback <message>`
633
+ ### `phoenix feedback [message]`
600
634
 
601
635
  Sends feedback about the SDK, the CLI, the documentation or Studio to the Phoenix team. It needs `phoenix login`: the server records the workspace, user and API token of the sign-in, so the message itself needs no introduction.
602
636
 
603
637
  ```bash
604
638
  phoenix feedback "phoenix build reports a missing entity when a module file is empty" --type bug
639
+ phoenix feedback --file report.txt --type bug
605
640
  ```
606
641
 
607
- | Flag | Env | Default | Description |
608
- | ---------------------- | -------------- | ----------------------------- | ---------------------------------------------------- |
609
- | `--type` | — | `other` | What the feedback is about: `bug`, `idea` or `other` |
610
- | `--contact` | — | — | How to reach you, when you want a reply |
611
- | `--agent` | — | — | Name of the coding agent that writes the feedback |
612
- | `--projectSlug` / `-p` | `PROJECT_SLUG` | `project` of the spec, if any | Workspace project the feedback is about |
613
- | `--region` | — | `eu` | Phoenix region of the workspace: `eu` or `us` |
614
- | `--serverUrl` / `-su` | — | the region's server | Phoenix server URL, for a local or custom server |
642
+ Pass the message as the argument for a short note, or `--file` for a longer report: the content of the file is the message, read as UTF-8, so quotes, backticks and new lines arrive unchanged. Giving both, or neither, is an error.
643
+
644
+ | Flag | Env | Default | Description |
645
+ | ---------------------- | -------------- | ----------------------------- | --------------------------------------------------------- |
646
+ | `--file` | — | — | Text file that holds the message, instead of the argument |
647
+ | `--type` | — | `other` | What the feedback is about: `bug`, `idea` or `other` |
648
+ | `--contact` | — | — | How to reach you, when you want a reply |
649
+ | `--agent` | — | — | Name of the coding agent that writes the feedback |
650
+ | `--projectSlug` / `-p` | `PROJECT_SLUG` | `project` of the spec, if any | Workspace project the feedback is about |
651
+ | `--region` | — | `eu` | Phoenix region of the workspace: `eu` or `us` |
652
+ | `--serverUrl` / `-su` | — | the region's server | Phoenix server URL, for a local or custom server |
615
653
 
616
- A message holds at most 5000 characters. Besides the message and the flags, the CLI sends only the SDK version, the operating system and the Node.js version; nothing of the project's files is attached. The project must belong to the signed-in workspace, otherwise the server refuses the feedback; without a project, the feedback is sent on its own.
654
+ A message holds at most 100,000 characters, from the argument or from the file. Besides the message and the flags, the CLI sends only the SDK version, the operating system and the Node.js version; no file of the project is attached, and the Phoenix team reads a build's sources through the build's page in Studio. The project must belong to the signed-in workspace, otherwise the server refuses the feedback; without a project, the feedback is sent on its own.
617
655
 
618
- Generated projects carry the `phoenix-feedback` agent skill. It tells coding agents when to draft feedback, to show you the draft and send it only after you approve it, and what must never go into it: secrets, customer data and the project's source. The command needs a server with API 1.40.0 or newer.
656
+ Generated projects carry the `phoenix-feedback` agent skill. It tells coding agents when to draft feedback, to show you the draft and send it only after you approve it, and how to write a report: the build id with its Studio page link, the live configurator link, what the agent was doing, what happened and what was expected, the exact error or output, the workaround and a condensed conversation log. When you say you are done, or a deploy went live and you confirm the run is finished, the agent asks you to evaluate the run, one question at a time: minutes spent, then a score from 0 to 10 for the agent's guidance, the configurator's functionality, its UX, the quality of the 3D, the UI visuals and the overall result, then your comments. It never picks a score for you and sends nothing when you decline. Secrets, credentials and personal data never go into a message; file paths, spec and code snippets and your own words may, once you approved the draft that contains them. The command needs a server with API 1.40.0 or newer; a message over 5000 characters needs API 1.43.0 or newer.
619
657
 
620
658
  ## Next Steps
621
659
 
@@ -513,7 +513,7 @@ The `application.yaml` file contains global application-level settings. These fi
513
513
  | Field | Type | Description |
514
514
  | -------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
515
515
  | `project` | `string` | Server project `phoenix dev` develops in: a project slug, or `default` for the default project of the signed-in workspace. Read only by the CLI; overridden by `--projectSlug` and `PROJECT_SLUG` |
516
- | `applicationVersion` | `string` | Semantic version (`x.y.z`) exported as `ApplicationVersion` constant and stored on the deployment record |
516
+ | `applicationVersion` | `string` | Semantic version (`x.y.z`) exported as `ApplicationVersion` constant, stored on the deployment record and named in the banner comment of built bundles |
517
517
  | `webComponentTag` | `string` | Custom HTML web component tag name for embedding |
518
518
  | `pageTitle` | `string` | Browser page title |
519
519
 
@@ -94,9 +94,10 @@ Studio's **Builds & deployments** page lists your builds and shows which one you
94
94
  Tell us what is broken, confusing or missing, from wherever you are:
95
95
 
96
96
  - In Studio, **Send beta feedback** in the sidebar opens a short form.
97
- - In the terminal, `pnpm phoenix feedback "<message>" --type bug|idea|other` sends it with your sign-in. See the [CLI reference](?path=/docs/phoenix-phoenix-cli--docs).
97
+ - In the terminal, `pnpm phoenix feedback "<message>" --type bug|idea|other` sends it with your sign-in, and `--file <path>` sends a text file instead of the argument. See the [CLI reference](?path=/docs/phoenix-phoenix-cli--docs).
98
+ - On a build's page in Studio, **Download sources** downloads the archive `phoenix deploy` uploaded for that build, so a report only needs to name the build.
98
99
 
99
- Coding agents working in your project use the same command, guided by the generated `phoenix-feedback` skill. They never send on their own: an agent shows you a draft, right away when the problem is crucial and otherwise at the end of the task, and sends it only after you approve it. They are told never to include secrets, customer data or your project's source. After a deploy goes live, the agent also asks you, once per conversation, to rate building with Phoenix from 0 to 10; it tells you the answer goes to the Phoenix team, shows the message and sends it only after you approve it.
100
+ Coding agents working in your project use the same command, guided by the generated `phoenix-feedback` skill. They never send on their own: an agent shows you a draft, right away when the problem is crucial and otherwise at the end of the task, and sends it only after you approve it. A report names the build with its Studio page link and the live configurator, says what the agent was doing, what happened and what it expected, quotes the exact error and ends with a condensed conversation log. Agents are told never to include secrets, credentials or personal data; parts of your project and your own words go in only through a draft you approved. When you are done with the configurator, the agent also asks you, once per conversation, to evaluate the run: minutes spent, then scores from 0 to 10 for the agent's guidance, functionality, UX, 3D quality, UI visuals and the overall result, and your comments. It asks one question at a time, never picks a score for you, tells you the answers go to the Phoenix team, shows the message and sends it only after you approve it.
100
101
 
101
102
  ## Known limits
102
103
 
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Toolbar button that opens and closes the built-in assistant panel. The default toolbar of the
3
+ * universal layout lists it, in a group of its own, when the application spec has an `assistant`
4
+ * section; a custom toolbar places it in a `toolbarButtonGroup` like any other button. It renders
5
+ * nothing in a project without an `assistant` section.
6
+ */
7
+ export interface AssistantToolbarButtonSchema {
8
+ readonly kind: 'assistantToolbarButton';
9
+ readonly props?: {
10
+ /**
11
+ * If true, the title is displayed on a desktop-sized layout; a phone or tablet-sized layout shows
12
+ * the icon only. By default true.
13
+ */
14
+ readonly showTitle?: boolean;
15
+ /**
16
+ * PHX icon name used instead of the default assistant icon.
17
+ */
18
+ readonly icon?: string;
19
+ };
20
+ }
21
+ export declare const assistantToolbarButtonSchema: {
22
+ readonly type: 'object';
23
+ readonly properties: {
24
+ readonly kind: {
25
+ readonly type: 'string';
26
+ readonly enum: ["assistantToolbarButton"];
27
+ };
28
+ readonly props: {
29
+ readonly type: 'object';
30
+ readonly properties: {
31
+ readonly showTitle: {
32
+ readonly type: 'boolean';
33
+ };
34
+ readonly icon: {
35
+ readonly type: 'string';
36
+ };
37
+ };
38
+ readonly required: [];
39
+ readonly additionalProperties: false;
40
+ };
41
+ };
42
+ readonly required: ["kind"];
43
+ readonly additionalProperties: false;
44
+ };
@@ -0,0 +1 @@
1
+ export const assistantToolbarButtonSchema={type:"object",properties:{kind:{type:"string",enum:["assistantToolbarButton"]},props:{type:"object",properties:{showTitle:{type:"boolean"},icon:{type:"string"}},required:[],additionalProperties:!1}},required:["kind"],additionalProperties:!1};
@@ -1,4 +1,5 @@
1
1
  export { type PhoenixLayoutElement, PhoenixLayoutElementSchema } from './phoenix-layout-element.js';
2
+ export { type AssistantToolbarButtonSchema, assistantToolbarButtonSchema } from './assistant-toolbar-button.js';
2
3
  export { type AdminConnectedResourcePageSchema, adminConnectedResourcePageSchema, } from './admin-connected-resource-page.js';
3
4
  export { type AdminDataTableActionsSchema, adminDataTableActionsSchema } from './admin-data-table-actions.js';
4
5
  export { type AdminDataTablePageSchema, adminDataTablePageSchema } from './admin-data-table-page.js';
@@ -1 +1 @@
1
- export{PhoenixLayoutElementSchema}from"./phoenix-layout-element.js";export{adminConnectedResourcePageSchema}from"./admin-connected-resource-page.js";export{adminDataTableActionsSchema}from"./admin-data-table-actions.js";export{adminDataTablePageSchema}from"./admin-data-table-page.js";export{adminPresetActionsSchema}from"./admin-preset-actions.js";export{adminPresetCategoryActionsSchema}from"./admin-preset-category-actions.js";export{adminPresetCategoryPageSchema}from"./admin-preset-category-page.js";export{adminPresetListPageSchema}from"./admin-preset-list-page.js";export{adminRecipeActionsSchema}from"./admin-recipe-actions.js";export{adminRecipeCollectionPageSchema}from"./admin-recipe-collection-page.js";export{customLayoutElementSchema}from"./custom-layout-element.js";export{enterSummaryButtonSchema}from"./enter-summary-button.js";export{enterFullscreenToolbarButtonSchema}from"./enter-fullscreen-toolbar-button.js";export{exitFullscreenToolbarButtonSchema}from"./exit-fullscreen-toolbar-button.js";export{footerPriceSchema}from"./footer-price.js";export{languageToolbarButtonSchema}from"./language-toolbar-button.js";export{mainFooterActionsSchema}from"./main-footer-actions.js";export{nextStepButtonSchema}from"./next-step-button.js";export{otherActionsSchema}from"./other-actions.js";export{previousStepButtonSchema}from"./previous-step-button.js";export{saveTemplateButtonSchema}from"./save-template-button.js";export{stepLabelSchema}from"./step-label.js";export{stepProgressSchema}from"./step-progress.js";export{shareToolbarButtonSchema}from"./share-toolbar-button.js";export{shareMenuActionSchema}from"./share-menu-action.js";export{toolbarButtonGroupSchema}from"./toolbar-button-group.js";export{undoToolbarButtonSchema}from"./undo-toolbar-button.js";export{redoToolbarButtonSchema}from"./redo-toolbar-button.js";export{resetCameraToolbarButtonSchema}from"./reset-camera-toolbar-button.js";export{measurementsToolbarButtonSchema}from"./measurements-toolbar-button.js";export{helpToolbarButtonSchema}from"./help-toolbar-button.js";export{measurementsMenuActionSchema}from"./measurements-menu-action.js";export{languageMenuActionSchema}from"./language-menu-action.js";export{helpMenuActionSchema}from"./help-menu-action.js";
1
+ export{PhoenixLayoutElementSchema}from"./phoenix-layout-element.js";export{assistantToolbarButtonSchema}from"./assistant-toolbar-button.js";export{adminConnectedResourcePageSchema}from"./admin-connected-resource-page.js";export{adminDataTableActionsSchema}from"./admin-data-table-actions.js";export{adminDataTablePageSchema}from"./admin-data-table-page.js";export{adminPresetActionsSchema}from"./admin-preset-actions.js";export{adminPresetCategoryActionsSchema}from"./admin-preset-category-actions.js";export{adminPresetCategoryPageSchema}from"./admin-preset-category-page.js";export{adminPresetListPageSchema}from"./admin-preset-list-page.js";export{adminRecipeActionsSchema}from"./admin-recipe-actions.js";export{adminRecipeCollectionPageSchema}from"./admin-recipe-collection-page.js";export{customLayoutElementSchema}from"./custom-layout-element.js";export{enterSummaryButtonSchema}from"./enter-summary-button.js";export{enterFullscreenToolbarButtonSchema}from"./enter-fullscreen-toolbar-button.js";export{exitFullscreenToolbarButtonSchema}from"./exit-fullscreen-toolbar-button.js";export{footerPriceSchema}from"./footer-price.js";export{languageToolbarButtonSchema}from"./language-toolbar-button.js";export{mainFooterActionsSchema}from"./main-footer-actions.js";export{nextStepButtonSchema}from"./next-step-button.js";export{otherActionsSchema}from"./other-actions.js";export{previousStepButtonSchema}from"./previous-step-button.js";export{saveTemplateButtonSchema}from"./save-template-button.js";export{stepLabelSchema}from"./step-label.js";export{stepProgressSchema}from"./step-progress.js";export{shareToolbarButtonSchema}from"./share-toolbar-button.js";export{shareMenuActionSchema}from"./share-menu-action.js";export{toolbarButtonGroupSchema}from"./toolbar-button-group.js";export{undoToolbarButtonSchema}from"./undo-toolbar-button.js";export{redoToolbarButtonSchema}from"./redo-toolbar-button.js";export{resetCameraToolbarButtonSchema}from"./reset-camera-toolbar-button.js";export{measurementsToolbarButtonSchema}from"./measurements-toolbar-button.js";export{helpToolbarButtonSchema}from"./help-toolbar-button.js";export{measurementsMenuActionSchema}from"./measurements-menu-action.js";export{languageMenuActionSchema}from"./language-menu-action.js";export{helpMenuActionSchema}from"./help-menu-action.js";
@@ -8,6 +8,7 @@ import { type AdminPresetCategoryPageSchema } from './admin-preset-category-page
8
8
  import { type AdminPresetListPageSchema } from './admin-preset-list-page.js';
9
9
  import { type AdminRecipeActionsSchema } from './admin-recipe-actions.js';
10
10
  import { type AdminRecipeCollectionPageSchema } from './admin-recipe-collection-page.js';
11
+ import { type AssistantToolbarButtonSchema } from './assistant-toolbar-button.js';
11
12
  import { type CustomLayoutElementSchema } from './custom-layout-element.js';
12
13
  import { type EnterFullscreenToolbarButtonSchema } from './enter-fullscreen-toolbar-button.js';
13
14
  import { type EnterSummaryButtonSchema } from './enter-summary-button.js';
@@ -32,5 +33,5 @@ import { type StepLabelSchema } from './step-label.js';
32
33
  import { type StepProgressSchema } from './step-progress.js';
33
34
  import { type ToolbarButtonGroupSchema } from './toolbar-button-group.js';
34
35
  import { type UndoToolbarButtonSchema } from './undo-toolbar-button.js';
35
- export type PhoenixLayoutElement = CustomLayoutElementSchema | AdminPresetCategoryPageSchema | AdminPresetCategoryActionsSchema | AdminPresetListPageSchema | AdminPresetActionsSchema | AdminRecipeCollectionPageSchema | AdminRecipeActionsSchema | AdminDataTablePageSchema | AdminDataTableActionsSchema | AdminConnectedResourcePageSchema | EnterSummaryButtonSchema | EnterFullscreenToolbarButtonSchema | ExitFullscreenToolbarButtonSchema | FooterPriceSchema | LanguageToolbarButtonSchema | MainFooterActionsSchema | NextStepButtonSchema | OtherActionsSchema | PreviousStepButtonSchema | SaveTemplateButtonSchema | StepLabelSchema | StepProgressSchema | ToolbarButtonGroupSchema | ShareMenuActionSchema | ShareToolbarButtonSchema | UndoToolbarButtonSchema | RedoToolbarButtonSchema | ResetCameraToolbarButtonSchema | MeasurementsToolbarButtonSchema | HelpToolbarButtonSchema | MeasurementsMenuActionSchema | LanguageMenuActionSchema | HelpMenuActionSchema;
36
+ export type PhoenixLayoutElement = CustomLayoutElementSchema | AdminPresetCategoryPageSchema | AdminPresetCategoryActionsSchema | AdminPresetListPageSchema | AdminPresetActionsSchema | AdminRecipeCollectionPageSchema | AdminRecipeActionsSchema | AdminDataTablePageSchema | AdminDataTableActionsSchema | AdminConnectedResourcePageSchema | EnterSummaryButtonSchema | EnterFullscreenToolbarButtonSchema | ExitFullscreenToolbarButtonSchema | FooterPriceSchema | LanguageToolbarButtonSchema | MainFooterActionsSchema | NextStepButtonSchema | OtherActionsSchema | PreviousStepButtonSchema | SaveTemplateButtonSchema | StepLabelSchema | StepProgressSchema | ToolbarButtonGroupSchema | ShareMenuActionSchema | ShareToolbarButtonSchema | UndoToolbarButtonSchema | RedoToolbarButtonSchema | ResetCameraToolbarButtonSchema | MeasurementsToolbarButtonSchema | AssistantToolbarButtonSchema | HelpToolbarButtonSchema | MeasurementsMenuActionSchema | LanguageMenuActionSchema | HelpMenuActionSchema;
36
37
  export declare const PhoenixLayoutElementSchema: ExtendedJsonSchema;
@@ -1 +1 @@
1
- import{adminConnectedResourcePageSchema as o}from"./admin-connected-resource-page.js";import{adminDataTableActionsSchema as t}from"./admin-data-table-actions.js";import{adminDataTablePageSchema as r}from"./admin-data-table-page.js";import{adminPresetActionsSchema as m}from"./admin-preset-actions.js";import{adminPresetCategoryActionsSchema as e}from"./admin-preset-category-actions.js";import{adminPresetCategoryPageSchema as s}from"./admin-preset-category-page.js";import{adminPresetListPageSchema as a}from"./admin-preset-list-page.js";import{adminRecipeActionsSchema as i}from"./admin-recipe-actions.js";import{adminRecipeCollectionPageSchema as n}from"./admin-recipe-collection-page.js";import{customLayoutElementSchema as p}from"./custom-layout-element.js";import{enterFullscreenToolbarButtonSchema as f}from"./enter-fullscreen-toolbar-button.js";import{enterSummaryButtonSchema as u}from"./enter-summary-button.js";import{exitFullscreenToolbarButtonSchema as j}from"./exit-fullscreen-toolbar-button.js";import{footerPriceSchema as l}from"./footer-price.js";import{helpMenuActionSchema as b}from"./help-menu-action.js";import{helpToolbarButtonSchema as c}from"./help-toolbar-button.js";import{languageMenuActionSchema as d}from"./language-menu-action.js";import{languageToolbarButtonSchema as g}from"./language-toolbar-button.js";import{mainFooterActionsSchema as h}from"./main-footer-actions.js";import{measurementsMenuActionSchema as y}from"./measurements-menu-action.js";import{measurementsToolbarButtonSchema as x}from"./measurements-toolbar-button.js";import{nextStepButtonSchema as E}from"./next-step-button.js";import{otherActionsSchema as L}from"./other-actions.js";import{previousStepButtonSchema as P}from"./previous-step-button.js";import{redoToolbarButtonSchema as v}from"./redo-toolbar-button.js";import{resetCameraToolbarButtonSchema as k}from"./reset-camera-toolbar-button.js";import{saveTemplateButtonSchema as O}from"./save-template-button.js";import{shareMenuActionSchema as S}from"./share-menu-action.js";import{shareToolbarButtonSchema as T}from"./share-toolbar-button.js";import{stepLabelSchema as q}from"./step-label.js";import{stepProgressSchema as w}from"./step-progress.js";import{toolbarButtonGroupSchema as z}from"./toolbar-button-group.js";import{undoToolbarButtonSchema as A}from"./undo-toolbar-button.js";export const PhoenixLayoutElementSchema={tsType:"PhoenixLayoutElement",import:[{module:"@salsita-ai/sdk/domain",member:"PhoenixLayoutElement"}],anyOf:[p,s,e,a,m,n,i,r,t,o,u,f,l,g,h,E,L,P,O,q,w,z,j,T,S,A,v,k,x,c,y,d,b]};
1
+ import{adminConnectedResourcePageSchema as o}from"./admin-connected-resource-page.js";import{adminDataTableActionsSchema as t}from"./admin-data-table-actions.js";import{adminDataTablePageSchema as r}from"./admin-data-table-page.js";import{adminPresetActionsSchema as m}from"./admin-preset-actions.js";import{adminPresetCategoryActionsSchema as e}from"./admin-preset-category-actions.js";import{adminPresetCategoryPageSchema as s}from"./admin-preset-category-page.js";import{adminPresetListPageSchema as a}from"./admin-preset-list-page.js";import{adminRecipeActionsSchema as i}from"./admin-recipe-actions.js";import{adminRecipeCollectionPageSchema as n}from"./admin-recipe-collection-page.js";import{assistantToolbarButtonSchema as p}from"./assistant-toolbar-button.js";import{customLayoutElementSchema as f}from"./custom-layout-element.js";import{enterFullscreenToolbarButtonSchema as u}from"./enter-fullscreen-toolbar-button.js";import{enterSummaryButtonSchema as j}from"./enter-summary-button.js";import{exitFullscreenToolbarButtonSchema as l}from"./exit-fullscreen-toolbar-button.js";import{footerPriceSchema as b}from"./footer-price.js";import{helpMenuActionSchema as c}from"./help-menu-action.js";import{helpToolbarButtonSchema as d}from"./help-toolbar-button.js";import{languageMenuActionSchema as g}from"./language-menu-action.js";import{languageToolbarButtonSchema as h}from"./language-toolbar-button.js";import{mainFooterActionsSchema as y}from"./main-footer-actions.js";import{measurementsMenuActionSchema as x}from"./measurements-menu-action.js";import{measurementsToolbarButtonSchema as E}from"./measurements-toolbar-button.js";import{nextStepButtonSchema as L}from"./next-step-button.js";import{otherActionsSchema as P}from"./other-actions.js";import{previousStepButtonSchema as v}from"./previous-step-button.js";import{redoToolbarButtonSchema as k}from"./redo-toolbar-button.js";import{resetCameraToolbarButtonSchema as O}from"./reset-camera-toolbar-button.js";import{saveTemplateButtonSchema as S}from"./save-template-button.js";import{shareMenuActionSchema as T}from"./share-menu-action.js";import{shareToolbarButtonSchema as q}from"./share-toolbar-button.js";import{stepLabelSchema as w}from"./step-label.js";import{stepProgressSchema as z}from"./step-progress.js";import{toolbarButtonGroupSchema as A}from"./toolbar-button-group.js";import{undoToolbarButtonSchema as B}from"./undo-toolbar-button.js";export const PhoenixLayoutElementSchema={tsType:"PhoenixLayoutElement",import:[{module:"@salsita-ai/sdk/domain",member:"PhoenixLayoutElement"}],anyOf:[f,s,e,a,m,n,i,r,t,o,j,u,b,h,y,L,P,v,S,w,z,A,l,q,T,B,k,O,E,p,d,x,g,c]};