@ds-mo/ui 14.29.1 → 14.30.0

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.
@@ -0,0 +1,2 @@
1
+ import{p as e,H as s,h as t,a as i,t as a}from"./index.js";import{r as l}from"./p-CochmPyg.js";function h(e,s,t){if(e!=="auto")return e;if(s==="constrained")return"constrained";if(s==="compact"||!t)return"compact";return"expanded"}const n=()=>`.sc-ds-shell-page-h{--_shell-page-content-background:var(--color-background-primary);--_shell-page-header-background:var(--color-background-primary);--_shell-page-responsive-content-block-start-inset:var(--dimension-space-400);--_shell-page-content-block-start-inset:var( --ds-shell-page-content-block-start-inset, var(--_shell-page-responsive-content-block-start-inset) );--ds-shell-page-sticky-header-block-size:var(--dimension-size-600);--ds-shell-page-content-block-start-offset:calc( var(--ds-shell-page-sticky-header-block-size) + var(--_shell-page-content-block-start-inset) );display:block;position:relative;min-width:0;min-height:100%;box-sizing:border-box;background:var(--_shell-page-content-background)}.shell-page-host--surface-secondary.sc-ds-shell-page-h{--_shell-page-content-background:var(--color-background-secondary)}.shell-page-host--surface-secondary[responsive-mode='desktop'].sc-ds-shell-page-h,.shell-page-host--surface-secondary[responsive-mode='tablet'].sc-ds-shell-page-h{--_shell-page-header-background:var(--color-background-secondary)}[responsive-mode='tablet'].sc-ds-shell-page-h,[responsive-mode='mobile'].sc-ds-shell-page-h{--_shell-page-responsive-content-block-start-inset:var(--dimension-space-200)}[responsive-mode='mobile'].sc-ds-shell-page-h{--ds-shell-page-sticky-header-block-size:calc( var(--dimension-size-500) + var(--dimension-space-200) )}.shell-page-host--header-compact.sc-ds-shell-page-h,.shell-page-host--header-constrained.sc-ds-shell-page-h{--_shell-page-content-block-start-inset:var( --ds-shell-page-compact-content-block-start-inset, var(--_shell-page-responsive-content-block-start-inset) )}.shell-page-host--inset-none.sc-ds-shell-page-h,.shell-page-host--block-start-inset-none.sc-ds-shell-page-h{--_shell-page-content-block-start-inset:0px}.shell-page-host--desktop-header-shell-bar.sc-ds-shell-page-h{--ds-shell-page-sticky-header-block-size:0px}.shell-page-host--desktop-header-shell-bar.shell-page-host--inset-default.sc-ds-shell-page-h{--_shell-page-content-block-start-inset:var(--_shell-page-responsive-content-block-start-inset)}.shell-page__scroll-sentinel.sc-ds-shell-page{position:absolute;inset-block-start:var(--ds-shell-page-header-travel, 0);inset-inline-start:0;width:var(--dimension-stroke-width-012);height:var(--dimension-stroke-width-012);pointer-events:none}.shell-page__sticky-header.sc-ds-shell-page{position:sticky;inset-block-start:var(--ds-shell-page-sticky-offset, 0);z-index:var(--dimension-z-index-overlay);min-width:0;background:var(--_shell-page-header-background);overflow:visible;overflow-anchor:none}.shell-page__desktop-header.sc-ds-shell-page-s>ds-bar-title,.shell-page__desktop-header .sc-ds-shell-page-s>ds-bar-title,.shell-page__desktop-header.sc-ds-shell-page-s>ds-bar-workflow,.shell-page__desktop-header .sc-ds-shell-page-s>ds-bar-workflow,.shell-page__mobile-header.sc-ds-shell-page-s>ds-mobile-header,.shell-page__mobile-header .sc-ds-shell-page-s>ds-mobile-header{display:block;min-width:0}.shell-page__desktop-header[hidden].sc-ds-shell-page,.shell-page__mobile-header[hidden].sc-ds-shell-page{display:none}.shell-page-host--mobile.sc-ds-shell-page-h .shell-page__scroll-sentinel.sc-ds-shell-page,.shell-page-host--mobile.sc-ds-shell-page-h .shell-page__flow-spacer.sc-ds-shell-page{display:none}.shell-page__flow-spacer.sc-ds-shell-page{height:var(--ds-shell-page-flow-spacer, 0);background:var(--_shell-page-content-background)}.shell-page__content.sc-ds-shell-page{min-width:0;box-sizing:border-box;background:var(--_shell-page-content-background)}.shell-page-host--inset-default.sc-ds-shell-page-h .shell-page__content.sc-ds-shell-page{padding:var(--dimension-space-400);padding-block-start:var(--_shell-page-content-block-start-inset)}.shell-page-host--inset-default[responsive-mode='tablet'].sc-ds-shell-page-h .shell-page__content.sc-ds-shell-page,.shell-page-host--inset-default[responsive-mode='mobile'].sc-ds-shell-page-h .shell-page__content.sc-ds-shell-page{padding:var(--dimension-space-200);padding-block-start:var(--_shell-page-content-block-start-inset)}.shell-page-host--inset-none.sc-ds-shell-page-h .shell-page__content.sc-ds-shell-page{padding:0}`;const r=e(class e extends s{constructor(e){super();if(e!==false){this.__registerHost()}this.headerPresentation="auto";this.desktopHeaderPlacement="page";this.contentInset="default";this.contentInsetBlockStart="default";this.scrollCompaction=true;this.contentSurface="primary";this.responsiveMode="desktop";this.pageTopVisible=true;this.sentinelEl=null;this.spacerEl=null;this.stickyHeaderEl=null;this.headerEl=null;this.expandedHeaderHeight=0;this.headerTravel=0;this.expandedGeometryFrozen=false;this.pageHeaderResizeObserver=null;this.headerResizeObserver=null;this.headerMutationObserver=null;this.headerRevealFrame=null;this.headerGeometryFrame=null;this.reconnectFrame=null;this.scrollRoot=null;this.hasLoaded=false;this.handleScroll=()=>{if(!this.sentinelEl||!this.scrollRoot)return;const e=this.scrollRoot===window?0:this.scrollRoot.getBoundingClientRect().top;this.syncHeaderDividerInset(e);const s=this.sentinelEl.getBoundingClientRect().top>=e;if(this.effectiveScrollCompaction&&!s&&this.pageTopVisible&&this.headerEl?.classList.contains(this.variantClass("expanded"))){this.captureExpandedHeaderGeometry(this.headerEl);this.expandedGeometryFrozen=true}if(s&&this.expandedGeometryFrozen&&this.el.getBoundingClientRect().top>=e){this.expandedGeometryFrozen=false;if(this.headerEl?.classList.contains(this.variantClass("expanded"))){this.captureExpandedHeaderGeometry(this.headerEl)}}this.pageTopVisible=s};this.handleHeaderSlotChange=e=>{if(this.responsiveMode==="mobile")return;const s=e.target;const t=s.assignedElements().find((e=>e.tagName.toLowerCase()==="ds-bar-title"));this.observeHeader(t??null)}}handleHeaderContractChange(){this.syncHeaderVariant(true)}handleResponsiveModeChange(){this.el.style.removeProperty("--ds-shell-page-sticky-header-block-size");this.observeHeader(this.responsiveMode==="mobile"||this.desktopHeaderExternal?null:this.findHeader());this.syncPageHeaderBlockSize()}handleDesktopHeaderPlacementChange(){this.observeHeader(this.desktopHeaderExternal?null:this.findHeader());this.syncPageHeaderBlockSize()}componentDidLoad(){this.hasLoaded=true;this.connectRuntime()}componentDidRender(){this.syncHeaderVariant();this.syncPageHeaderBlockSize()}connectedCallback(){if(!this.hasLoaded)return;if(this.reconnectFrame!==null)cancelAnimationFrame(this.reconnectFrame);this.reconnectFrame=requestAnimationFrame((()=>{this.reconnectFrame=null;if(this.el.isConnected)this.connectRuntime()}))}disconnectedCallback(){if(this.reconnectFrame!==null)cancelAnimationFrame(this.reconnectFrame);this.reconnectFrame=null;this.headerResizeObserver?.disconnect();this.headerResizeObserver=null;this.pageHeaderResizeObserver?.disconnect();this.pageHeaderResizeObserver=null;this.headerMutationObserver?.disconnect();this.headerMutationObserver=null;this.cancelHeaderReveal();this.cancelHeaderGeometrySync();this.headerEl?.style.removeProperty("--ds-bar-title-divider-inset");this.scrollRoot?.removeEventListener("scroll",this.handleScroll);this.scrollRoot=null}connectRuntime(){this.observePageHeaderGeometry();this.observeHeader(this.responsiveMode==="mobile"?null:this.findHeader());this.connectScrollRoot()}get effectiveVariant(){if(this.desktopHeaderExternal)return"compact";return h(this.headerPresentation,this.headerCapacity??"roomy",this.effectiveScrollCompaction?this.pageTopVisible:true)}get desktopHeaderExternal(){return this.responsiveMode!=="mobile"&&this.desktopHeaderPlacement==="shell-bar"}get effectiveScrollCompaction(){return this.scrollCompaction&&!this.desktopHeaderExternal}get headerContractResolved(){return this.headerPresentation!=="auto"||this.headerCapacity!==undefined}get isScrollCompacted(){return this.effectiveScrollCompaction&&this.headerPresentation==="auto"&&this.headerCapacity==="roomy"&&!this.pageTopVisible}get contentInsetStyles(){const e={};const s=this.contentInsetBlockStartSize?.trim();const t=this.compactContentInsetBlockStartSize?.trim();if(s)e["--ds-shell-page-content-block-start-inset"]=s;if(t)e["--ds-shell-page-compact-content-block-start-inset"]=t;return e}composedParent(e){return e.assignedSlot?.parentElement??e.parentElement}findScrollRoot(){let e=this.composedParent(this.el);while(e&&e!==document.documentElement){const s=getComputedStyle(e).overflowY;if(s==="auto"||s==="scroll"||s==="overlay"){return e}e=this.composedParent(e)}return window}connectScrollRoot(){const e=this.findScrollRoot();if(e===this.scrollRoot)return;this.scrollRoot?.removeEventListener("scroll",this.handleScroll);this.scrollRoot=e;this.scrollRoot.addEventListener("scroll",this.handleScroll,{passive:true});this.handleScroll()}get scrollRootResolved(){const e=this.el.closest("ds-shell-app");if(!e)return true;const s=e.querySelector(".shell-app__content");return s!==null&&this.scrollRoot===s}findHeader(){return this.el.querySelector("ds-bar-title")}get compactHeaderHeight(){return l("--dimension-size-600",0)}syncHeaderDividerInset(e){const s=this.headerEl;if(!s)return;const t=this.effectiveScrollCompaction&&this.headerPresentation==="auto"&&this.headerCapacity==="roomy";const i=l("--dimension-space-400",0);if(!t||!this.sentinelEl||!this.scrollRoot||this.headerTravel<=0||i<=0){s.style.removeProperty("--ds-bar-title-divider-inset");return}const a=e??(this.scrollRoot===window?0:this.scrollRoot.getBoundingClientRect().top);const h=this.sentinelEl.getBoundingClientRect().top-a;const n=Math.min(1,Math.max(0,1-h/this.headerTravel));s.style.setProperty("--ds-bar-title-divider-inset",`${i*(1-n)}px`)}setHeaderTravel(e){const s=Math.max(0,e);if(Math.abs(s-this.headerTravel)<.5)return;this.headerTravel=s;this.el.style.setProperty("--ds-shell-page-header-travel",`${s}px`);this.handleScroll()}measureHeaderTravel(e){const s=e.querySelector("[data-shell-page-header-anchor]");const t=this.compactHeaderHeight;if(!s||t<=0)return;const i=e.getBoundingClientRect();const a=s.getBoundingClientRect();if(i.height<=0||a.height<=0)return;const l=a.top-i.top;const h=Math.max(0,(t-a.height)/2);this.setHeaderTravel(l-h)}captureExpandedHeaderGeometry(e){this.expandedHeaderHeight=Math.max(this.expandedHeaderHeight,e.getBoundingClientRect().height);this.measureHeaderTravel(e)}setSpacerHeight(e){if(!this.spacerEl)return;this.spacerEl.style.setProperty("--ds-shell-page-flow-spacer",`${Math.max(0,e)}px`)}variantClass(e){return`bar-title-host--${e}`}setStickyHeaderOffset(e){this.stickyHeaderEl?.style.setProperty("--ds-shell-page-sticky-offset",e==="expanded"&&this.effectiveScrollCompaction&&this.headerPresentation==="auto"&&this.headerCapacity==="roomy"?`${-this.headerTravel}px`:"0px")}syncPageHeaderBlockSize(){if(this.desktopHeaderExternal){this.el.style.setProperty("--ds-shell-page-sticky-header-block-size","0px");return}const e=this.stickyHeaderEl?.getBoundingClientRect().height??0;if(e>0){this.el.style.setProperty("--ds-shell-page-sticky-header-block-size",`${e}px`)}else{this.el.style.removeProperty("--ds-shell-page-sticky-header-block-size")}}observePageHeaderGeometry(){this.pageHeaderResizeObserver?.disconnect();this.pageHeaderResizeObserver=null;this.syncPageHeaderBlockSize();if(!this.stickyHeaderEl||typeof ResizeObserver==="undefined")return;this.pageHeaderResizeObserver=new ResizeObserver((()=>{this.syncPageHeaderBlockSize()}));this.pageHeaderResizeObserver.observe(this.stickyHeaderEl)}syncRenderedHeaderGeometry(e){const s=this.effectiveVariant;if(!e.classList.contains(this.variantClass(s)))return;this.syncPageHeaderBlockSize();this.setSpacerHeight(this.isScrollCompacted?this.expandedHeaderHeight-this.compactHeaderHeight:0);this.setStickyHeaderOffset(s);if(s==="expanded"&&!this.expandedGeometryFrozen){this.captureExpandedHeaderGeometry(e);this.setStickyHeaderOffset(s)}}cancelHeaderGeometrySync(){if(this.headerGeometryFrame!==null)cancelAnimationFrame(this.headerGeometryFrame);this.headerGeometryFrame=null}scheduleHeaderGeometrySync(s){this.cancelHeaderGeometrySync();let t=e.MAX_HEADER_GEOMETRY_FRAMES;let i=0;const a=()=>{if(this.headerEl!==s)return;t-=1;i+=1;this.connectScrollRoot();this.syncRenderedHeaderGeometry(s);const e=this.effectiveVariant!=="expanded"||this.expandedHeaderHeight>0&&this.headerTravel>0;if(e&&this.scrollRootResolved&&i>=2||t<=0){this.headerGeometryFrame=null;return}this.headerGeometryFrame=requestAnimationFrame(a)};this.headerGeometryFrame=requestAnimationFrame(a)}cancelHeaderReveal(){if(this.headerRevealFrame!==null)cancelAnimationFrame(this.headerRevealFrame);this.headerRevealFrame=null;this.headerEl?.removeAttribute("data-shell-page-syncing")}revealHeaderWhenSynced(s,t){let i=e.MAX_HEADER_REVEAL_FRAMES;const a=()=>{if(this.headerEl!==s){s.removeAttribute("data-shell-page-syncing");return}i-=1;if(s.classList.contains(this.variantClass(t))){s.removeAttribute("data-shell-page-syncing");this.headerRevealFrame=null;return}if(i<=0){this.headerRevealFrame=null;return}this.headerRevealFrame=requestAnimationFrame(a)};this.headerRevealFrame=requestAnimationFrame(a)}syncHeaderVariant(e=false){const s=this.headerEl;if(!s)return;this.syncHeaderDividerInset();if(!this.headerContractResolved){this.cancelHeaderReveal();s.setAttribute("data-shell-page-syncing","");return}const t=this.effectiveVariant;const i=!s.classList.contains(this.variantClass(t));if(!i)this.syncRenderedHeaderGeometry(s);if(i&&this.isScrollCompacted){this.setSpacerHeight(this.expandedHeaderHeight-this.compactHeaderHeight);this.setStickyHeaderOffset(t)}if(e){this.cancelHeaderReveal();s.setAttribute("data-shell-page-syncing","")}if(s.variant!==t){s.variant=t;this.scheduleHeaderGeometrySync(s)}if(e){this.revealHeaderWhenSynced(s,t)}}observeHeader(e){this.cancelHeaderReveal();this.cancelHeaderGeometrySync();this.headerResizeObserver?.disconnect();this.headerResizeObserver=null;this.headerMutationObserver?.disconnect();this.headerMutationObserver=null;this.headerEl?.style.removeProperty("--ds-bar-title-divider-inset");this.headerEl=e;this.expandedHeaderHeight=0;this.expandedGeometryFrozen=false;this.setHeaderTravel(0);this.setSpacerHeight(0);this.stickyHeaderEl?.style.setProperty("--ds-shell-page-sticky-offset","0px");if(!e)return;if(e.classList.contains(this.variantClass("expanded"))){this.captureExpandedHeaderGeometry(e)}if(typeof ResizeObserver!=="undefined"){this.headerResizeObserver=new ResizeObserver((()=>{this.syncRenderedHeaderGeometry(e)}));this.headerResizeObserver.observe(e)}if(typeof MutationObserver!=="undefined"){this.headerMutationObserver=new MutationObserver((()=>{this.syncRenderedHeaderGeometry(e)}));this.headerMutationObserver.observe(e,{attributes:true,attributeFilter:["class"],childList:true,subtree:true})}this.syncHeaderVariant(true);this.scheduleHeaderGeometrySync(e)}render(){const e=this.responsiveMode==="mobile";return t(i,{key:"7c13dabffbbb738499a9a3e372c9f4b6ff577711",role:"main",style:this.contentInsetStyles,class:{"shell-page-host--inset-default":this.contentInset==="default","shell-page-host--inset-none":this.contentInset==="none","shell-page-host--block-start-inset-none":this.contentInsetBlockStart==="none","shell-page-host--surface-primary":this.contentSurface==="primary","shell-page-host--surface-secondary":this.contentSurface==="secondary","shell-page-host--mobile":e,"shell-page-host--desktop-header-shell-bar":this.desktopHeaderExternal,[`shell-page-host--header-${this.effectiveVariant}`]:true}},t("div",{key:"20d0d95b72671a54a049554e12bdc50c9c6f86da",ref:e=>{this.sentinelEl=e??null},class:"shell-page__scroll-sentinel","aria-hidden":"true"}),t("div",{key:"fc7f145d9b239ae2969c1228bc3729ed0054b283",ref:e=>{this.stickyHeaderEl=e??null},class:"shell-page__sticky-header"},t("div",{key:"5194335b60a48e6278886768b830ab9bae5afa26",class:"shell-page__desktop-header",hidden:e,"aria-hidden":e?"true":undefined,inert:e?true:undefined},t("slot",{key:"ad11eb070bb24230a2cf0396f5252411c9a4ef03",name:"header",onSlotchange:this.handleHeaderSlotChange})),t("div",{key:"c017c662a11a63b96c7e72ed06d64cc436a4afce",class:"shell-page__mobile-header",hidden:!e,"aria-hidden":!e?"true":undefined,inert:!e?true:undefined},t("slot",{key:"2928bc4f2fae9cd118794839263bc67eb3139c74",name:"mobile-header"}))),t("div",{key:"6a70612a414eacf3983f3ce69628fa230d28b086",ref:e=>{this.spacerEl=e??null},class:"shell-page__flow-spacer","aria-hidden":"true"}),t("div",{key:"d62779daba97d4339a6971f014d282c52942e5af",class:"shell-page__content"},t("slot",{key:"526ab84d232001c3c4919d5fd26b4b2a4dda7daf"})))}get el(){return this}static get watchers(){return{headerCapacity:[{handleHeaderContractChange:0}],headerPresentation:[{handleHeaderContractChange:0}],scrollCompaction:[{handleHeaderContractChange:0}],responsiveMode:[{handleResponsiveModeChange:0}],desktopHeaderPlacement:[{handleDesktopHeaderPlacementChange:0}]}}static get style(){return n()}},[262,"ds-shell-page",{headerPresentation:[1,"header-presentation"],headerCapacity:[1,"header-capacity"],desktopHeaderPlacement:[513,"desktop-header-placement"],contentInset:[1,"content-inset"],contentInsetBlockStart:[1,"content-inset-block-start"],contentInsetBlockStartSize:[1,"content-inset-block-start-size"],compactContentInsetBlockStartSize:[1,"compact-content-inset-block-start-size"],scrollCompaction:[4,"scroll-compaction"],contentSurface:[1,"content-surface"],responsiveMode:[513,"responsive-mode"],pageTopVisible:[32]},undefined,{headerCapacity:[{handleHeaderContractChange:0}],headerPresentation:[{handleHeaderContractChange:0}],scrollCompaction:[{handleHeaderContractChange:0}],responsiveMode:[{handleResponsiveModeChange:0}],desktopHeaderPlacement:[{handleDesktopHeaderPlacementChange:0}]}]);r.MAX_HEADER_REVEAL_FRAMES=12;r.MAX_HEADER_GEOMETRY_FRAMES=12;function o(){if(typeof customElements==="undefined"){return}const e=["ds-shell-page"];e.forEach((e=>{switch(e){case"ds-shell-page":if(!customElements.get(a(e))){customElements.define(a(e),r)}break}}))}o();export{r as S,o as d};
2
+ //# sourceMappingURL=p-D1Ifsy9M.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["resolveShellPageHeaderVariant","presentation","capacity","pageTopVisible","shellPageCss","ShellPage","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","headerPresentation","desktopHeaderPlacement","contentInset","contentInsetBlockStart","scrollCompaction","contentSurface","responsiveMode","sentinelEl","spacerEl","stickyHeaderEl","headerEl","expandedHeaderHeight","headerTravel","expandedGeometryFrozen","pageHeaderResizeObserver","headerResizeObserver","headerMutationObserver","headerRevealFrame","headerGeometryFrame","reconnectFrame","scrollRoot","hasLoaded","handleScroll","rootTop","window","getBoundingClientRect","top","syncHeaderDividerInset","nextPageTopVisible","effectiveScrollCompaction","classList","contains","variantClass","captureExpandedHeaderGeometry","el","handleHeaderSlotChange","event","slot","target","header","assignedElements","find","element","tagName","toLowerCase","observeHeader","handleHeaderContractChange","syncHeaderVariant","handleResponsiveModeChange","style","removeProperty","desktopHeaderExternal","findHeader","syncPageHeaderBlockSize","handleDesktopHeaderPlacementChange","componentDidLoad","connectRuntime","componentDidRender","connectedCallback","cancelAnimationFrame","requestAnimationFrame","isConnected","disconnectedCallback","disconnect","cancelHeaderReveal","cancelHeaderGeometrySync","removeEventListener","observePageHeaderGeometry","connectScrollRoot","effectiveVariant","headerCapacity","headerContractResolved","undefined","isScrollCompacted","contentInsetStyles","styles","expanded","contentInsetBlockStartSize","trim","compact","compactContentInsetBlockStartSize","composedParent","assignedSlot","parentElement","findScrollRoot","ancestor","document","documentElement","overflow","getComputedStyle","overflowY","next","addEventListener","passive","scrollRootResolved","shell","closest","expected","querySelector","compactHeaderHeight","resolveCssLengthPx","ownsScrollTransition","expandedInset","scrollRootTop","remainingTravel","progress","Math","min","max","setProperty","setHeaderTravel","distance","abs","measureHeaderTravel","anchor","compactHeight","headerRect","anchorRect","height","expandedAnchorTop","compactAnchorTop","setSpacerHeight","variant","setStickyHeaderOffset","renderedVariant","renderedHeight","ResizeObserver","observe","syncRenderedHeaderGeometry","scheduleHeaderGeometrySync","framesRemaining","MAX_HEADER_GEOMETRY_FRAMES","framesElapsed","sync","geometryReady","removeAttribute","revealHeaderWhenSynced","MAX_HEADER_REVEAL_FRAMES","reveal","concealUntilSynced","setAttribute","renderedVariantIsStale","MutationObserver","attributes","attributeFilter","childList","subtree","render","mobile","h","Host","key","role","class","ref","hidden","inert","name","onSlotchange"],"sources":["src/wc/components/ShellPage/shell-page-responsive.ts","src/wc/components/ShellPage/ShellPage.css?tag=ds-shell-page&encapsulation=scoped","src/wc/components/ShellPage/ShellPage.tsx"],"sourcesContent":["import type { ShellPageCapacity, ShellPageHeaderPresentation } from './shell-page-types';\nimport type { BarTitleVariant } from '../BarTitle/bar-title-types';\n\nexport function resolveShellPageHeaderVariant(\n presentation: ShellPageHeaderPresentation,\n capacity: ShellPageCapacity,\n pageTopVisible: boolean\n): BarTitleVariant {\n if (presentation !== 'auto') return presentation;\n if (capacity === 'constrained') return 'constrained';\n if (capacity === 'compact' || !pageTopVisible) return 'compact';\n return 'expanded';\n}\n",":host {\n --_shell-page-content-background: var(--color-background-primary);\n --_shell-page-header-background: var(--color-background-primary);\n --_shell-page-responsive-content-block-start-inset: var(--dimension-space-400);\n --_shell-page-content-block-start-inset: var(\n --ds-shell-page-content-block-start-inset,\n var(--_shell-page-responsive-content-block-start-inset)\n );\n --ds-shell-page-sticky-header-block-size: var(--dimension-size-600);\n --ds-shell-page-content-block-start-offset: calc(\n var(--ds-shell-page-sticky-header-block-size) + var(--_shell-page-content-block-start-inset)\n );\n display: block;\n position: relative;\n min-width: 0;\n min-height: 100%;\n box-sizing: border-box;\n background: var(--_shell-page-content-background);\n}\n\n:host(.shell-page-host--surface-secondary) {\n --_shell-page-content-background: var(--color-background-secondary);\n}\n\n:host(.shell-page-host--surface-secondary[responsive-mode='desktop']),\n:host(.shell-page-host--surface-secondary[responsive-mode='tablet']) {\n --_shell-page-header-background: var(--color-background-secondary);\n}\n\n:host([responsive-mode='tablet']),\n:host([responsive-mode='mobile']) {\n --_shell-page-responsive-content-block-start-inset: var(--dimension-space-200);\n}\n\n:host([responsive-mode='mobile']) {\n --ds-shell-page-sticky-header-block-size: calc(\n var(--dimension-size-500) + var(--dimension-space-200)\n );\n}\n\n:host(.shell-page-host--header-compact),\n:host(.shell-page-host--header-constrained) {\n --_shell-page-content-block-start-inset: var(\n --ds-shell-page-compact-content-block-start-inset,\n var(--_shell-page-responsive-content-block-start-inset)\n );\n}\n\n:host(.shell-page-host--inset-none),\n:host(.shell-page-host--block-start-inset-none) {\n --_shell-page-content-block-start-inset: 0px;\n}\n\n:host(.shell-page-host--desktop-header-shell-bar) {\n --ds-shell-page-sticky-header-block-size: 0px;\n}\n\n:host(.shell-page-host--desktop-header-shell-bar.shell-page-host--inset-default) {\n --_shell-page-content-block-start-inset: var(--_shell-page-responsive-content-block-start-inset);\n}\n\n.shell-page__scroll-sentinel {\n position: absolute;\n inset-block-start: var(--ds-shell-page-header-travel, 0);\n inset-inline-start: 0;\n width: var(--dimension-stroke-width-012);\n height: var(--dimension-stroke-width-012);\n pointer-events: none;\n}\n\n.shell-page__sticky-header {\n position: sticky;\n inset-block-start: var(--ds-shell-page-sticky-offset, 0);\n z-index: var(--dimension-z-index-overlay);\n min-width: 0;\n background: var(--_shell-page-header-background);\n overflow: visible;\n overflow-anchor: none;\n}\n\n.shell-page__desktop-header ::slotted(ds-bar-title),\n.shell-page__desktop-header ::slotted(ds-bar-workflow),\n.shell-page__mobile-header ::slotted(ds-mobile-header) {\n display: block;\n min-width: 0;\n}\n\n.shell-page__desktop-header[hidden],\n.shell-page__mobile-header[hidden] {\n display: none;\n}\n\n:host(.shell-page-host--mobile) .shell-page__scroll-sentinel,\n:host(.shell-page-host--mobile) .shell-page__flow-spacer {\n display: none;\n}\n\n.shell-page__flow-spacer {\n height: var(--ds-shell-page-flow-spacer, 0);\n background: var(--_shell-page-content-background);\n}\n\n.shell-page__content {\n min-width: 0;\n box-sizing: border-box;\n background: var(--_shell-page-content-background);\n}\n\n:host(.shell-page-host--inset-default) .shell-page__content {\n padding: var(--dimension-space-400);\n padding-block-start: var(--_shell-page-content-block-start-inset);\n}\n\n:host(.shell-page-host--inset-default[responsive-mode='tablet']) .shell-page__content,\n:host(.shell-page-host--inset-default[responsive-mode='mobile']) .shell-page__content {\n padding: var(--dimension-space-200);\n padding-block-start: var(--_shell-page-content-block-start-inset);\n}\n\n:host(.shell-page-host--inset-none) .shell-page__content {\n padding: 0;\n}\n","import { Component, Element, h, Host, Prop, State, Watch } from '@stencil/core';\nimport type { ShellResponsiveMode } from '../../shell/shell-responsive';\nimport { resolveCssLengthPx } from '../../utils/resolve-css-length-px';\nimport type { BarTitleVariant } from '../BarTitle/bar-title-types';\nimport { resolveShellPageHeaderVariant } from './shell-page-responsive';\nimport type {\n ShellPageCapacity,\n ShellPageContentInset,\n ShellPageContentSurface,\n ShellPageDesktopHeaderPlacement,\n ShellPageHeaderPresentation,\n} from './shell-page-types';\n\ntype BarTitleElement = HTMLElement & { variant: BarTitleVariant };\n\n@Component({\n tag: 'ds-shell-page',\n styleUrl: 'ShellPage.css',\n scoped: true,\n})\nexport class ShellPage {\n private static readonly MAX_HEADER_REVEAL_FRAMES = 12;\n private static readonly MAX_HEADER_GEOMETRY_FRAMES = 12;\n\n @Element() el!: HTMLElement;\n\n /** Automatic capacity/scroll behavior, or an explicit header variant override. */\n @Prop() headerPresentation: ShellPageHeaderPresentation = 'auto';\n\n /** Available page-header capacity supplied by the owning application shell. */\n @Prop() headerCapacity?: ShellPageCapacity;\n\n /** Desktop title chrome is rendered in this page or externally in the shell bar. */\n @Prop({ attribute: 'desktop-header-placement', reflect: true })\n desktopHeaderPlacement: ShellPageDesktopHeaderPlacement = 'page';\n\n /** Standard page gutters, or no inset for full-bleed page content. */\n @Prop() contentInset: ShellPageContentInset = 'default';\n\n /** Preserve the responsive side/end gutters while allowing content to meet the header. */\n @Prop() contentInsetBlockStart: ShellPageContentInset = 'default';\n\n /** Exact block-start content inset, overriding the responsive default when provided. */\n @Prop() contentInsetBlockStartSize?: string;\n\n /** Exact block-start content inset while the header is compact or constrained. */\n @Prop() compactContentInsetBlockStartSize?: string;\n\n /** Allow roomy automatic headers to compact as the page scrolls. */\n @Prop() scrollCompaction: boolean = true;\n\n /** Canvas surface painted around and beneath routed page content. */\n @Prop() contentSurface: ShellPageContentSurface = 'primary';\n\n /** Explicit shell breakpoint presentation. Mobile uses the dedicated mobile-header slot. */\n @Prop({ attribute: 'responsive-mode', reflect: true })\n responsiveMode: ShellResponsiveMode = 'desktop';\n\n @State() private pageTopVisible = true;\n\n private sentinelEl: HTMLElement | null = null;\n private spacerEl: HTMLElement | null = null;\n private stickyHeaderEl: HTMLElement | null = null;\n private headerEl: BarTitleElement | null = null;\n private expandedHeaderHeight = 0;\n private headerTravel = 0;\n private expandedGeometryFrozen = false;\n private pageHeaderResizeObserver: ResizeObserver | null = null;\n private headerResizeObserver: ResizeObserver | null = null;\n private headerMutationObserver: MutationObserver | null = null;\n private headerRevealFrame: number | null = null;\n private headerGeometryFrame: number | null = null;\n private reconnectFrame: number | null = null;\n private scrollRoot: HTMLElement | Window | null = null;\n private hasLoaded = false;\n\n @Watch('headerCapacity')\n @Watch('headerPresentation')\n @Watch('scrollCompaction')\n handleHeaderContractChange() {\n this.syncHeaderVariant(true);\n }\n\n @Watch('responsiveMode')\n handleResponsiveModeChange() {\n this.el.style.removeProperty('--ds-shell-page-sticky-header-block-size');\n this.observeHeader(\n this.responsiveMode === 'mobile' || this.desktopHeaderExternal ? null : this.findHeader()\n );\n this.syncPageHeaderBlockSize();\n }\n\n @Watch('desktopHeaderPlacement')\n handleDesktopHeaderPlacementChange() {\n this.observeHeader(this.desktopHeaderExternal ? null : this.findHeader());\n this.syncPageHeaderBlockSize();\n }\n\n componentDidLoad() {\n this.hasLoaded = true;\n this.connectRuntime();\n }\n\n componentDidRender() {\n this.syncHeaderVariant();\n this.syncPageHeaderBlockSize();\n }\n\n connectedCallback() {\n if (!this.hasLoaded) return;\n if (this.reconnectFrame !== null) cancelAnimationFrame(this.reconnectFrame);\n this.reconnectFrame = requestAnimationFrame(() => {\n this.reconnectFrame = null;\n if (this.el.isConnected) this.connectRuntime();\n });\n }\n\n disconnectedCallback() {\n if (this.reconnectFrame !== null) cancelAnimationFrame(this.reconnectFrame);\n this.reconnectFrame = null;\n this.headerResizeObserver?.disconnect();\n this.headerResizeObserver = null;\n this.pageHeaderResizeObserver?.disconnect();\n this.pageHeaderResizeObserver = null;\n this.headerMutationObserver?.disconnect();\n this.headerMutationObserver = null;\n this.cancelHeaderReveal();\n this.cancelHeaderGeometrySync();\n this.headerEl?.style.removeProperty('--ds-bar-title-divider-inset');\n this.scrollRoot?.removeEventListener('scroll', this.handleScroll);\n this.scrollRoot = null;\n }\n\n private connectRuntime() {\n this.observePageHeaderGeometry();\n this.observeHeader(this.responsiveMode === 'mobile' ? null : this.findHeader());\n this.connectScrollRoot();\n }\n\n private get effectiveVariant(): BarTitleVariant {\n if (this.desktopHeaderExternal) return 'compact';\n return resolveShellPageHeaderVariant(\n this.headerPresentation,\n this.headerCapacity ?? 'roomy',\n this.effectiveScrollCompaction ? this.pageTopVisible : true\n );\n }\n\n private get desktopHeaderExternal(): boolean {\n return this.responsiveMode !== 'mobile' && this.desktopHeaderPlacement === 'shell-bar';\n }\n\n private get effectiveScrollCompaction(): boolean {\n return this.scrollCompaction && !this.desktopHeaderExternal;\n }\n\n private get headerContractResolved(): boolean {\n return this.headerPresentation !== 'auto' || this.headerCapacity !== undefined;\n }\n\n private get isScrollCompacted(): boolean {\n return (\n this.effectiveScrollCompaction &&\n this.headerPresentation === 'auto' &&\n this.headerCapacity === 'roomy' &&\n !this.pageTopVisible\n );\n }\n\n private get contentInsetStyles(): { [name: string]: string } {\n const styles: { [name: string]: string } = {};\n const expanded = this.contentInsetBlockStartSize?.trim();\n const compact = this.compactContentInsetBlockStartSize?.trim();\n if (expanded) styles['--ds-shell-page-content-block-start-inset'] = expanded;\n if (compact) styles['--ds-shell-page-compact-content-block-start-inset'] = compact;\n return styles;\n }\n\n private composedParent(element: Element): Element | null {\n return (element as HTMLElement).assignedSlot?.parentElement ?? element.parentElement;\n }\n\n private findScrollRoot(): HTMLElement | Window {\n let ancestor = this.composedParent(this.el);\n while (ancestor && ancestor !== document.documentElement) {\n const overflow = getComputedStyle(ancestor).overflowY;\n if (overflow === 'auto' || overflow === 'scroll' || overflow === 'overlay') {\n return ancestor as HTMLElement;\n }\n ancestor = this.composedParent(ancestor);\n }\n return window;\n }\n\n private connectScrollRoot() {\n const next = this.findScrollRoot();\n if (next === this.scrollRoot) return;\n this.scrollRoot?.removeEventListener('scroll', this.handleScroll);\n this.scrollRoot = next;\n this.scrollRoot.addEventListener('scroll', this.handleScroll, { passive: true });\n this.handleScroll();\n }\n\n private get scrollRootResolved(): boolean {\n const shell = this.el.closest('ds-shell-app');\n if (!shell) return true;\n const expected = shell.querySelector<HTMLElement>('.shell-app__content');\n return expected !== null && this.scrollRoot === expected;\n }\n\n private handleScroll = () => {\n if (!this.sentinelEl || !this.scrollRoot) return;\n const rootTop =\n this.scrollRoot === window ? 0 : (this.scrollRoot as HTMLElement).getBoundingClientRect().top;\n this.syncHeaderDividerInset(rootTop);\n const nextPageTopVisible = this.sentinelEl.getBoundingClientRect().top >= rootTop;\n if (\n this.effectiveScrollCompaction &&\n !nextPageTopVisible &&\n this.pageTopVisible &&\n this.headerEl?.classList.contains(this.variantClass('expanded'))\n ) {\n this.captureExpandedHeaderGeometry(this.headerEl);\n this.expandedGeometryFrozen = true;\n }\n if (\n nextPageTopVisible &&\n this.expandedGeometryFrozen &&\n this.el.getBoundingClientRect().top >= rootTop\n ) {\n this.expandedGeometryFrozen = false;\n if (this.headerEl?.classList.contains(this.variantClass('expanded'))) {\n this.captureExpandedHeaderGeometry(this.headerEl);\n }\n }\n this.pageTopVisible = nextPageTopVisible;\n };\n\n private findHeader(): BarTitleElement | null {\n return this.el.querySelector<BarTitleElement>('ds-bar-title');\n }\n\n private get compactHeaderHeight(): number {\n return resolveCssLengthPx('--dimension-size-600', 0);\n }\n\n private syncHeaderDividerInset(rootTop?: number) {\n const header = this.headerEl;\n if (!header) return;\n\n const ownsScrollTransition =\n this.effectiveScrollCompaction &&\n this.headerPresentation === 'auto' &&\n this.headerCapacity === 'roomy';\n const expandedInset = resolveCssLengthPx('--dimension-space-400', 0);\n if (\n !ownsScrollTransition ||\n !this.sentinelEl ||\n !this.scrollRoot ||\n this.headerTravel <= 0 ||\n expandedInset <= 0\n ) {\n header.style.removeProperty('--ds-bar-title-divider-inset');\n return;\n }\n\n const scrollRootTop =\n rootTop ??\n (this.scrollRoot === window\n ? 0\n : (this.scrollRoot as HTMLElement).getBoundingClientRect().top);\n const remainingTravel = this.sentinelEl.getBoundingClientRect().top - scrollRootTop;\n const progress = Math.min(1, Math.max(0, 1 - remainingTravel / this.headerTravel));\n header.style.setProperty('--ds-bar-title-divider-inset', `${expandedInset * (1 - progress)}px`);\n }\n\n private setHeaderTravel(distance: number) {\n const next = Math.max(0, distance);\n if (Math.abs(next - this.headerTravel) < 0.5) return;\n this.headerTravel = next;\n this.el.style.setProperty('--ds-shell-page-header-travel', `${next}px`);\n this.handleScroll();\n }\n\n private measureHeaderTravel(header: BarTitleElement) {\n const anchor = header.querySelector<HTMLElement>('[data-shell-page-header-anchor]');\n const compactHeight = this.compactHeaderHeight;\n if (!anchor || compactHeight <= 0) return;\n\n const headerRect = header.getBoundingClientRect();\n const anchorRect = anchor.getBoundingClientRect();\n if (headerRect.height <= 0 || anchorRect.height <= 0) return;\n\n const expandedAnchorTop = anchorRect.top - headerRect.top;\n const compactAnchorTop = Math.max(0, (compactHeight - anchorRect.height) / 2);\n this.setHeaderTravel(expandedAnchorTop - compactAnchorTop);\n }\n\n private captureExpandedHeaderGeometry(header: BarTitleElement) {\n // Keep the largest observed expanded geometry for this header instance.\n // During a variant handoff Chromium can briefly report the compact box\n // before the child host class mutation is delivered; that transient must\n // not erase the flow reservation captured at the roomy page top.\n this.expandedHeaderHeight = Math.max(\n this.expandedHeaderHeight,\n header.getBoundingClientRect().height\n );\n this.measureHeaderTravel(header);\n }\n\n private setSpacerHeight(height: number) {\n if (!this.spacerEl) return;\n this.spacerEl.style.setProperty('--ds-shell-page-flow-spacer', `${Math.max(0, height)}px`);\n }\n\n private variantClass(variant: BarTitleVariant): string {\n return `bar-title-host--${variant}`;\n }\n\n private setStickyHeaderOffset(renderedVariant: BarTitleVariant) {\n this.stickyHeaderEl?.style.setProperty(\n '--ds-shell-page-sticky-offset',\n renderedVariant === 'expanded' &&\n this.effectiveScrollCompaction &&\n this.headerPresentation === 'auto' &&\n this.headerCapacity === 'roomy'\n ? `${-this.headerTravel}px`\n : '0px'\n );\n }\n\n private syncPageHeaderBlockSize() {\n if (this.desktopHeaderExternal) {\n this.el.style.setProperty('--ds-shell-page-sticky-header-block-size', '0px');\n return;\n }\n const renderedHeight = this.stickyHeaderEl?.getBoundingClientRect().height ?? 0;\n if (renderedHeight > 0) {\n this.el.style.setProperty('--ds-shell-page-sticky-header-block-size', `${renderedHeight}px`);\n } else {\n this.el.style.removeProperty('--ds-shell-page-sticky-header-block-size');\n }\n }\n\n private observePageHeaderGeometry() {\n this.pageHeaderResizeObserver?.disconnect();\n this.pageHeaderResizeObserver = null;\n this.syncPageHeaderBlockSize();\n\n if (!this.stickyHeaderEl || typeof ResizeObserver === 'undefined') return;\n this.pageHeaderResizeObserver = new ResizeObserver(() => {\n this.syncPageHeaderBlockSize();\n });\n this.pageHeaderResizeObserver.observe(this.stickyHeaderEl);\n }\n\n private syncRenderedHeaderGeometry(header: BarTitleElement) {\n const renderedVariant = this.effectiveVariant;\n if (!header.classList.contains(this.variantClass(renderedVariant))) return;\n\n this.syncPageHeaderBlockSize();\n\n // Update both flow-preservation pieces before reading layout. Otherwise a\n // reverse compact → expanded render can briefly contain the tall header and\n // the compact spacer together, giving browser scroll anchoring a transient\n // height change to compensate.\n this.setSpacerHeight(\n this.isScrollCompacted ? this.expandedHeaderHeight - this.compactHeaderHeight : 0\n );\n this.setStickyHeaderOffset(renderedVariant);\n\n if (renderedVariant === 'expanded' && !this.expandedGeometryFrozen) {\n this.captureExpandedHeaderGeometry(header);\n this.setStickyHeaderOffset(renderedVariant);\n }\n }\n\n private cancelHeaderGeometrySync() {\n if (this.headerGeometryFrame !== null) cancelAnimationFrame(this.headerGeometryFrame);\n this.headerGeometryFrame = null;\n }\n\n private scheduleHeaderGeometrySync(header: BarTitleElement) {\n this.cancelHeaderGeometrySync();\n let framesRemaining = ShellPage.MAX_HEADER_GEOMETRY_FRAMES;\n let framesElapsed = 0;\n const sync = () => {\n if (this.headerEl !== header) return;\n framesRemaining -= 1;\n framesElapsed += 1;\n // In WebKit a child's componentDidLoad can precede its assignment into\n // the parent's rendered slot. Revalidate after ShellApp has had a frame\n // to expose the actual content scroller.\n this.connectScrollRoot();\n this.syncRenderedHeaderGeometry(header);\n const geometryReady =\n this.effectiveVariant !== 'expanded' ||\n (this.expandedHeaderHeight > 0 && this.headerTravel > 0);\n if (\n (geometryReady && this.scrollRootResolved && framesElapsed >= 2) ||\n framesRemaining <= 0\n ) {\n this.headerGeometryFrame = null;\n return;\n }\n this.headerGeometryFrame = requestAnimationFrame(sync);\n };\n this.headerGeometryFrame = requestAnimationFrame(sync);\n }\n\n private cancelHeaderReveal() {\n if (this.headerRevealFrame !== null) cancelAnimationFrame(this.headerRevealFrame);\n this.headerRevealFrame = null;\n this.headerEl?.removeAttribute('data-shell-page-syncing');\n }\n\n private revealHeaderWhenSynced(header: BarTitleElement, variant: BarTitleVariant) {\n // Stencil normally re-renders within a frame or two of a prop change. Stop\n // polling at the cap, but fail closed: a stale variant must never paint.\n let framesRemaining = ShellPage.MAX_HEADER_REVEAL_FRAMES;\n const reveal = () => {\n if (this.headerEl !== header) {\n header.removeAttribute('data-shell-page-syncing');\n return;\n }\n framesRemaining -= 1;\n if (header.classList.contains(this.variantClass(variant))) {\n header.removeAttribute('data-shell-page-syncing');\n this.headerRevealFrame = null;\n return;\n }\n if (framesRemaining <= 0) {\n this.headerRevealFrame = null;\n return;\n }\n this.headerRevealFrame = requestAnimationFrame(reveal);\n };\n this.headerRevealFrame = requestAnimationFrame(reveal);\n }\n\n private syncHeaderVariant(concealUntilSynced = false) {\n const header = this.headerEl;\n if (!header) return;\n\n this.syncHeaderDividerInset();\n if (!this.headerContractResolved) {\n this.cancelHeaderReveal();\n header.setAttribute('data-shell-page-syncing', '');\n return;\n }\n\n const next = this.effectiveVariant;\n const renderedVariantIsStale = !header.classList.contains(this.variantClass(next));\n if (!renderedVariantIsStale) this.syncRenderedHeaderGeometry(header);\n if (renderedVariantIsStale && this.isScrollCompacted) {\n // Preserve the expanded flow before asking BarTitle to become compact.\n // This prevents the sentinel from moving back into view during the\n // parent/child render handoff and keeps the variant transition stable.\n this.setSpacerHeight(this.expandedHeaderHeight - this.compactHeaderHeight);\n this.setStickyHeaderOffset(next);\n }\n if (concealUntilSynced) {\n this.cancelHeaderReveal();\n header.setAttribute('data-shell-page-syncing', '');\n }\n if (header.variant !== next) {\n header.variant = next;\n // The child update and its MutationObserver callback can land in\n // different phases across engines. Poll the rendered class as the\n // authoritative handoff before committing sticky/spacer geometry.\n this.scheduleHeaderGeometrySync(header);\n }\n if (concealUntilSynced) {\n this.revealHeaderWhenSynced(header, next);\n }\n }\n\n private observeHeader(header: BarTitleElement | null) {\n this.cancelHeaderReveal();\n this.cancelHeaderGeometrySync();\n this.headerResizeObserver?.disconnect();\n this.headerResizeObserver = null;\n this.headerMutationObserver?.disconnect();\n this.headerMutationObserver = null;\n this.headerEl?.style.removeProperty('--ds-bar-title-divider-inset');\n this.headerEl = header;\n this.expandedHeaderHeight = 0;\n this.expandedGeometryFrozen = false;\n this.setHeaderTravel(0);\n this.setSpacerHeight(0);\n this.stickyHeaderEl?.style.setProperty('--ds-shell-page-sticky-offset', '0px');\n\n if (!header) return;\n if (header.classList.contains(this.variantClass('expanded'))) {\n this.captureExpandedHeaderGeometry(header);\n }\n if (typeof ResizeObserver !== 'undefined') {\n this.headerResizeObserver = new ResizeObserver(() => {\n this.syncRenderedHeaderGeometry(header);\n });\n this.headerResizeObserver.observe(header);\n }\n if (typeof MutationObserver !== 'undefined') {\n this.headerMutationObserver = new MutationObserver(() => {\n this.syncRenderedHeaderGeometry(header);\n });\n this.headerMutationObserver.observe(header, {\n attributes: true,\n attributeFilter: ['class'],\n childList: true,\n subtree: true,\n });\n }\n this.syncHeaderVariant(true);\n this.scheduleHeaderGeometrySync(header);\n }\n\n private handleHeaderSlotChange = (event: Event) => {\n if (this.responsiveMode === 'mobile') return;\n const slot = event.target as HTMLSlotElement;\n const header = slot\n .assignedElements()\n .find(element => element.tagName.toLowerCase() === 'ds-bar-title');\n this.observeHeader((header as BarTitleElement | undefined) ?? null);\n };\n\n render() {\n const mobile = this.responsiveMode === 'mobile';\n return (\n <Host\n role=\"main\"\n style={this.contentInsetStyles}\n class={{\n 'shell-page-host--inset-default': this.contentInset === 'default',\n 'shell-page-host--inset-none': this.contentInset === 'none',\n 'shell-page-host--block-start-inset-none': this.contentInsetBlockStart === 'none',\n 'shell-page-host--surface-primary': this.contentSurface === 'primary',\n 'shell-page-host--surface-secondary': this.contentSurface === 'secondary',\n 'shell-page-host--mobile': mobile,\n 'shell-page-host--desktop-header-shell-bar': this.desktopHeaderExternal,\n [`shell-page-host--header-${this.effectiveVariant}`]: true,\n }}\n >\n <div\n ref={el => {\n this.sentinelEl = el ?? null;\n }}\n class=\"shell-page__scroll-sentinel\"\n aria-hidden=\"true\"\n />\n <div\n ref={el => {\n this.stickyHeaderEl = el ?? null;\n }}\n class=\"shell-page__sticky-header\"\n >\n <div\n class=\"shell-page__desktop-header\"\n hidden={mobile}\n aria-hidden={mobile ? 'true' : undefined}\n inert={mobile ? true : undefined}\n >\n <slot name=\"header\" onSlotchange={this.handleHeaderSlotChange} />\n </div>\n <div\n class=\"shell-page__mobile-header\"\n hidden={!mobile}\n aria-hidden={!mobile ? 'true' : undefined}\n inert={!mobile ? true : undefined}\n >\n <slot name=\"mobile-header\" />\n </div>\n </div>\n <div\n ref={el => {\n this.spacerEl = el ?? null;\n }}\n class=\"shell-page__flow-spacer\"\n aria-hidden=\"true\"\n />\n <div class=\"shell-page__content\">\n <slot />\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  {
2
- "timestamp": "2026-09-04T18:25:52",
2
+ "timestamp": "2026-09-04T19:54:13",
3
3
  "compiler": {
4
4
  "name": "@stencil/core",
5
5
  "version": "4.43.5",
@@ -29620,7 +29620,42 @@
29620
29620
  "setter": false
29621
29621
  }
29622
29622
  ],
29623
- "methods": [],
29623
+ "methods": [
29624
+ {
29625
+ "name": "scrollRowIntoView",
29626
+ "returns": {
29627
+ "type": "Promise<boolean>",
29628
+ "docs": ""
29629
+ },
29630
+ "complexType": {
29631
+ "signature": "(rowId: string) => Promise<boolean>",
29632
+ "parameters": [
29633
+ {
29634
+ "name": "rowId",
29635
+ "type": "string",
29636
+ "docs": ""
29637
+ }
29638
+ ],
29639
+ "references": {
29640
+ "Promise": {
29641
+ "location": "global",
29642
+ "id": "global::Promise"
29643
+ }
29644
+ },
29645
+ "return": "Promise<boolean>"
29646
+ },
29647
+ "signature": "scrollRowIntoView(rowId: string) => Promise<boolean>",
29648
+ "parameters": [
29649
+ {
29650
+ "name": "rowId",
29651
+ "type": "string",
29652
+ "docs": ""
29653
+ }
29654
+ ],
29655
+ "docs": "Scroll the nearest vertical owner only enough to reveal a supplied row.\nResolves false when the row is absent from the supplied, expanded table model.\nThis method never moves focus.",
29656
+ "docsTags": []
29657
+ }
29658
+ ],
29624
29659
  "events": [
29625
29660
  {
29626
29661
  "event": "dsCellAction",
@@ -8711,7 +8711,7 @@
8711
8711
  "The flow-preservation spacer follows contentSurface so compacting a secondary page cannot expose a primary strip before its content.",
8712
8712
  "On roomy pages, the expanded header scrolls upward until its title and action row reaches the compact row position, while its bottom divider progressively extends from the expanded inset to edge-to-edge; it then snaps variants without moving that shared visual anchor.",
8713
8713
  "Scroll compaction preserves the expanded page flow offset so content never jumps beneath the sticky header.",
8714
- "The sticky header paints above the isolated routed-content layer, so product surfaces and callouts scroll beneath its opaque boundary instead of covering page chrome.",
8714
+ "The sticky header uses the overlay layer: raised product surfaces and callouts scroll beneath its opaque boundary, while modal, floating, and tooltip surfaces remain above page chrome.",
8715
8715
  "ShellPage relies on ShellApp's content scroller and never introduces nested scrolling.",
8716
8716
  "BarWorkflow remains compact and is not assigned BarTitle's capacity or scroll variants."
8717
8717
  ],
@@ -9836,7 +9836,7 @@
9836
9836
  "The column customizer is the shared Menu of switch rows, not a table-owned dialog. Data columns can be shown, hidden, and reordered. Action columns and the selection checkbox never appear in the menu. The last remaining visible data column cannot be hidden, but it stays focusable so it can still be reordered. Escape and outside click restore focus to the trigger. Persistence stays in the application.",
9837
9837
  "Sorting controls remain buttons inside column headers and expose the table's one controlled member-row sort through aria-sort. ds-table-sort in the toolbar trailing cluster is the matching menu of Data and Direction sections; it emits the same dsSortChange shape so header clicks and menu choices stay in sync. Grouping never adds a second sort indicator or header control; ds-table-group controls the grouping data point and ascending or descending group-section order while the application supplies the resulting groups. Optional column help underlines the header label with the shared dotted decoration and shows ds-tooltip from that label; it does not add a second header control or replace the column name.",
9838
9838
  "Selection controls expose checkbox semantics and explicit row names; select-all affects selectable loaded rows only and preserves selected identities outside the loaded window. In virtual mode the supplied in-memory rows are that loaded set, including rows whose DOM is recycled. When grouping is active with multi-selection, each group section header also exposes a checkbox that selects or clears that group's selectable loaded rows.",
9839
- "Interactive rows are focusable as native rows, activate with Enter or Space, and do not steal activation from their nested selection, action, overflow-menu, or primary-text link controls.",
9839
+ "Interactive rows are focusable as native rows, activate with Enter or Space, and do not steal activation from their nested selection, action, overflow-menu, or primary-text link controls. When an application-owned details surface navigates between records, scrollRowIntoView reveals the newly associated row with nearest scrolling while preserving focus in that surface. It resolves false when the identity is absent from the supplied, expanded table model so the application can first load data, change its controlled page, or expand its group.",
9840
9840
  "Scrollable table regions become keyboard focusable and named only when overflow exists.",
9841
9841
  "Incremental loading, newly appended row counts, failures, and end-of-results transitions are announced through a polite status region without replacing visible state. In grouped tables, announcements name the independently loading group.",
9842
9842
  "Applications may pass their controlled literal search terms through highlightTerms after applying their own filtering. When TableSearch scopes the query, pass the same selected field identities through highlightFieldIds. A compound column maps its ordered headerSegments to primary, secondary-run, and tertiary-run data points; simple columns map their column ID to every owned text track. With no highlightFieldIds every text track remains eligible. Matching text is rendered with semantic mark elements, so the emphasis is identifiable independently of its faint-brand background and bold-brand foreground. Highlight markup preserves source order, the cell's complete accessible text, and does not create extra announcements.",
@@ -81,7 +81,7 @@
81
81
  "The flow-preservation spacer follows contentSurface so compacting a secondary page cannot expose a primary strip before its content.",
82
82
  "On roomy pages, the expanded header scrolls upward until its title and action row reaches the compact row position, while its bottom divider progressively extends from the expanded inset to edge-to-edge; it then snaps variants without moving that shared visual anchor.",
83
83
  "Scroll compaction preserves the expanded page flow offset so content never jumps beneath the sticky header.",
84
- "The sticky header paints above the isolated routed-content layer, so product surfaces and callouts scroll beneath its opaque boundary instead of covering page chrome.",
84
+ "The sticky header uses the overlay layer: raised product surfaces and callouts scroll beneath its opaque boundary, while modal, floating, and tooltip surfaces remain above page chrome.",
85
85
  "ShellPage relies on ShellApp's content scroller and never introduces nested scrolling.",
86
86
  "BarWorkflow remains compact and is not assigned BarTitle's capacity or scroll variants."
87
87
  ],
@@ -342,7 +342,7 @@
342
342
  "files": [
343
343
  {
344
344
  "path": "src/wc/components/ShellPage/ShellPage.css",
345
- "content": ":host {\n --_shell-page-content-background: var(--color-background-primary);\n --_shell-page-header-background: var(--color-background-primary);\n --_shell-page-responsive-content-block-start-inset: var(--dimension-space-400);\n --_shell-page-content-block-start-inset: var(\n --ds-shell-page-content-block-start-inset,\n var(--_shell-page-responsive-content-block-start-inset)\n );\n --ds-shell-page-sticky-header-block-size: var(--dimension-size-600);\n --ds-shell-page-content-block-start-offset: calc(\n var(--ds-shell-page-sticky-header-block-size) + var(--_shell-page-content-block-start-inset)\n );\n display: block;\n position: relative;\n min-width: 0;\n min-height: 100%;\n box-sizing: border-box;\n background: var(--_shell-page-content-background);\n}\n\n:host(.shell-page-host--surface-secondary) {\n --_shell-page-content-background: var(--color-background-secondary);\n}\n\n:host(.shell-page-host--surface-secondary[responsive-mode='desktop']),\n:host(.shell-page-host--surface-secondary[responsive-mode='tablet']) {\n --_shell-page-header-background: var(--color-background-secondary);\n}\n\n:host([responsive-mode='tablet']),\n:host([responsive-mode='mobile']) {\n --_shell-page-responsive-content-block-start-inset: var(--dimension-space-200);\n}\n\n:host([responsive-mode='mobile']) {\n --ds-shell-page-sticky-header-block-size: calc(\n var(--dimension-size-500) + var(--dimension-space-200)\n );\n}\n\n:host(.shell-page-host--header-compact),\n:host(.shell-page-host--header-constrained) {\n --_shell-page-content-block-start-inset: var(\n --ds-shell-page-compact-content-block-start-inset,\n var(--_shell-page-responsive-content-block-start-inset)\n );\n}\n\n:host(.shell-page-host--inset-none),\n:host(.shell-page-host--block-start-inset-none) {\n --_shell-page-content-block-start-inset: 0px;\n}\n\n:host(.shell-page-host--desktop-header-shell-bar) {\n --ds-shell-page-sticky-header-block-size: 0px;\n}\n\n:host(.shell-page-host--desktop-header-shell-bar.shell-page-host--inset-default) {\n --_shell-page-content-block-start-inset: var(--_shell-page-responsive-content-block-start-inset);\n}\n\n.shell-page__scroll-sentinel {\n position: absolute;\n inset-block-start: var(--ds-shell-page-header-travel, 0);\n inset-inline-start: 0;\n width: var(--dimension-stroke-width-012);\n height: var(--dimension-stroke-width-012);\n pointer-events: none;\n}\n\n.shell-page__sticky-header {\n position: sticky;\n inset-block-start: var(--ds-shell-page-sticky-offset, 0);\n z-index: var(--dimension-z-index-raised);\n min-width: 0;\n background: var(--_shell-page-header-background);\n overflow: visible;\n overflow-anchor: none;\n}\n\n.shell-page__desktop-header ::slotted(ds-bar-title),\n.shell-page__desktop-header ::slotted(ds-bar-workflow),\n.shell-page__mobile-header ::slotted(ds-mobile-header) {\n display: block;\n min-width: 0;\n}\n\n.shell-page__desktop-header[hidden],\n.shell-page__mobile-header[hidden] {\n display: none;\n}\n\n:host(.shell-page-host--mobile) .shell-page__scroll-sentinel,\n:host(.shell-page-host--mobile) .shell-page__flow-spacer {\n display: none;\n}\n\n.shell-page__flow-spacer {\n height: var(--ds-shell-page-flow-spacer, 0);\n background: var(--_shell-page-content-background);\n}\n\n.shell-page__content {\n min-width: 0;\n box-sizing: border-box;\n background: var(--_shell-page-content-background);\n isolation: isolate;\n}\n\n:host(.shell-page-host--inset-default) .shell-page__content {\n padding: var(--dimension-space-400);\n padding-block-start: var(--_shell-page-content-block-start-inset);\n}\n\n:host(.shell-page-host--inset-default[responsive-mode='tablet']) .shell-page__content,\n:host(.shell-page-host--inset-default[responsive-mode='mobile']) .shell-page__content {\n padding: var(--dimension-space-200);\n padding-block-start: var(--_shell-page-content-block-start-inset);\n}\n\n:host(.shell-page-host--inset-none) .shell-page__content {\n padding: 0;\n}\n",
345
+ "content": ":host {\n --_shell-page-content-background: var(--color-background-primary);\n --_shell-page-header-background: var(--color-background-primary);\n --_shell-page-responsive-content-block-start-inset: var(--dimension-space-400);\n --_shell-page-content-block-start-inset: var(\n --ds-shell-page-content-block-start-inset,\n var(--_shell-page-responsive-content-block-start-inset)\n );\n --ds-shell-page-sticky-header-block-size: var(--dimension-size-600);\n --ds-shell-page-content-block-start-offset: calc(\n var(--ds-shell-page-sticky-header-block-size) + var(--_shell-page-content-block-start-inset)\n );\n display: block;\n position: relative;\n min-width: 0;\n min-height: 100%;\n box-sizing: border-box;\n background: var(--_shell-page-content-background);\n}\n\n:host(.shell-page-host--surface-secondary) {\n --_shell-page-content-background: var(--color-background-secondary);\n}\n\n:host(.shell-page-host--surface-secondary[responsive-mode='desktop']),\n:host(.shell-page-host--surface-secondary[responsive-mode='tablet']) {\n --_shell-page-header-background: var(--color-background-secondary);\n}\n\n:host([responsive-mode='tablet']),\n:host([responsive-mode='mobile']) {\n --_shell-page-responsive-content-block-start-inset: var(--dimension-space-200);\n}\n\n:host([responsive-mode='mobile']) {\n --ds-shell-page-sticky-header-block-size: calc(\n var(--dimension-size-500) + var(--dimension-space-200)\n );\n}\n\n:host(.shell-page-host--header-compact),\n:host(.shell-page-host--header-constrained) {\n --_shell-page-content-block-start-inset: var(\n --ds-shell-page-compact-content-block-start-inset,\n var(--_shell-page-responsive-content-block-start-inset)\n );\n}\n\n:host(.shell-page-host--inset-none),\n:host(.shell-page-host--block-start-inset-none) {\n --_shell-page-content-block-start-inset: 0px;\n}\n\n:host(.shell-page-host--desktop-header-shell-bar) {\n --ds-shell-page-sticky-header-block-size: 0px;\n}\n\n:host(.shell-page-host--desktop-header-shell-bar.shell-page-host--inset-default) {\n --_shell-page-content-block-start-inset: var(--_shell-page-responsive-content-block-start-inset);\n}\n\n.shell-page__scroll-sentinel {\n position: absolute;\n inset-block-start: var(--ds-shell-page-header-travel, 0);\n inset-inline-start: 0;\n width: var(--dimension-stroke-width-012);\n height: var(--dimension-stroke-width-012);\n pointer-events: none;\n}\n\n.shell-page__sticky-header {\n position: sticky;\n inset-block-start: var(--ds-shell-page-sticky-offset, 0);\n z-index: var(--dimension-z-index-overlay);\n min-width: 0;\n background: var(--_shell-page-header-background);\n overflow: visible;\n overflow-anchor: none;\n}\n\n.shell-page__desktop-header ::slotted(ds-bar-title),\n.shell-page__desktop-header ::slotted(ds-bar-workflow),\n.shell-page__mobile-header ::slotted(ds-mobile-header) {\n display: block;\n min-width: 0;\n}\n\n.shell-page__desktop-header[hidden],\n.shell-page__mobile-header[hidden] {\n display: none;\n}\n\n:host(.shell-page-host--mobile) .shell-page__scroll-sentinel,\n:host(.shell-page-host--mobile) .shell-page__flow-spacer {\n display: none;\n}\n\n.shell-page__flow-spacer {\n height: var(--ds-shell-page-flow-spacer, 0);\n background: var(--_shell-page-content-background);\n}\n\n.shell-page__content {\n min-width: 0;\n box-sizing: border-box;\n background: var(--_shell-page-content-background);\n}\n\n:host(.shell-page-host--inset-default) .shell-page__content {\n padding: var(--dimension-space-400);\n padding-block-start: var(--_shell-page-content-block-start-inset);\n}\n\n:host(.shell-page-host--inset-default[responsive-mode='tablet']) .shell-page__content,\n:host(.shell-page-host--inset-default[responsive-mode='mobile']) .shell-page__content {\n padding: var(--dimension-space-200);\n padding-block-start: var(--_shell-page-content-block-start-inset);\n}\n\n:host(.shell-page-host--inset-none) .shell-page__content {\n padding: 0;\n}\n",
346
346
  "type": "registry:ui"
347
347
  },
348
348
  {