@ds-mo/ui 15.0.0 → 15.1.1
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.
- package/NOTICE +6 -0
- package/README.md +7 -0
- package/dist/.package-ready.json +1 -1
- package/dist/agent-patterns.json +1 -1
- package/dist/agent.json +2320 -90
- package/dist/components/ds-agent-questionnaire.js +1 -1
- package/dist/components/ds-agent-response.js +1 -1
- package/dist/components/ds-banner.js +1 -1
- package/dist/components/ds-banner.js.map +1 -1
- package/dist/components/ds-card-chart.js +1 -1
- package/dist/components/ds-card-chart.js.map +1 -1
- package/dist/components/ds-card-overview.js +1 -1
- package/dist/components/ds-card-overview.js.map +1 -1
- package/dist/components/ds-card-setting.js +1 -1
- package/dist/components/ds-card-setting.js.map +1 -1
- package/dist/components/ds-chart.js +1 -1
- package/dist/components/ds-chart.js.map +1 -1
- package/dist/components/ds-checkbox.js +1 -1
- package/dist/components/ds-conversation-list-item.js +1 -1
- package/dist/components/ds-conversation-list-item.js.map +1 -1
- package/dist/components/ds-data-filter.js +1 -1
- package/dist/components/ds-data-preferences.js +1 -1
- package/dist/components/ds-data-saved-views.js +1 -1
- package/dist/components/ds-data-search.js +1 -1
- package/dist/components/ds-data-search.js.map +1 -1
- package/dist/components/ds-filter-menu.js +1 -1
- package/dist/components/ds-message-scroller.js.map +1 -1
- package/dist/components/ds-mobile-sheet-nav.js +1 -1
- package/dist/components/ds-pagination.js +1 -1
- package/dist/components/ds-scroll-overlay.js.map +1 -1
- package/dist/components/ds-select.js +1 -1
- package/dist/components/ds-shell-app.js +1 -1
- package/dist/components/ds-table.js +1 -1
- package/dist/components/p-0FYD2bev.js.map +1 -1
- package/dist/components/{p-Dpr2y6_S.js → p-B_jdoM7e.js} +2 -2
- package/dist/components/{p-CElUM-xU.js → p-C6xVxqOn.js} +2 -2
- package/dist/components/{p-MG4lcN0D.js → p-CdGXzRP8.js} +2 -2
- package/dist/components/{p-D6Wl3dRO.js → p-Cqc2U1ZQ.js} +2 -2
- package/dist/components/{p-D6Wl3dRO.js.map → p-Cqc2U1ZQ.js.map} +1 -1
- package/dist/components/{p-Nc76seSq.js → p-DEW7r0U9.js} +2 -2
- package/dist/components/{p-IEq_06J0.js → p-Dfs98tpL.js} +2 -2
- package/dist/components/{p-IEq_06J0.js.map → p-Dfs98tpL.js.map} +1 -1
- package/dist/components/p-ZhP2tVmM.js.map +1 -1
- package/dist/components/p-etifxiDc.js.map +1 -1
- package/dist/docs/components.json +1 -1
- package/dist/lint/STYLELINT-LICENSE +20 -0
- package/dist/lint/THIRD-PARTY-NOTICES +553 -0
- package/dist/lint/index.d.ts +7 -0
- package/dist/lint/index.js +51385 -0
- package/dist/lint/types.d.ts +13 -0
- package/dist/mcp-data/registry/agent-activity.json +6 -1
- package/dist/mcp-data/registry/agent-questionnaire.json +6 -1
- package/dist/mcp-data/registry/agent-response.json +12 -1
- package/dist/mcp-data/registry/agent-source-list.json +6 -1
- package/dist/mcp-data/registry/agent-tool-call.json +6 -1
- package/dist/mcp-data/registry/attachment-list.json +6 -1
- package/dist/mcp-data/registry/avatar.json +21 -1
- package/dist/mcp-data/registry/badge.json +30 -2
- package/dist/mcp-data/registry/banner.json +28 -2
- package/dist/mcp-data/registry/bar-action.json +24 -1
- package/dist/mcp-data/registry/bar-nav.json +6 -1
- package/dist/mcp-data/registry/bar-page-title.json +24 -1
- package/dist/mcp-data/registry/bar-title.json +26 -1
- package/dist/mcp-data/registry/bar-workflow.json +24 -1
- package/dist/mcp-data/registry/breadcrumb.json +6 -1
- package/dist/mcp-data/registry/button-filled.json +68 -1
- package/dist/mcp-data/registry/button-inverted.json +64 -1
- package/dist/mcp-data/registry/button-unfilled.json +66 -1
- package/dist/mcp-data/registry/calendar.json +15 -2
- package/dist/mcp-data/registry/card-action-center.json +24 -1
- package/dist/mcp-data/registry/card-chart.json +37 -2
- package/dist/mcp-data/registry/card-navigation.json +36 -1
- package/dist/mcp-data/registry/card-overview.json +27 -2
- package/dist/mcp-data/registry/card-setting.json +35 -2
- package/dist/mcp-data/registry/card-settings-scope.json +24 -1
- package/dist/mcp-data/registry/chart-legend.json +6 -1
- package/dist/mcp-data/registry/chart.json +7 -2
- package/dist/mcp-data/registry/checkbox.json +38 -2
- package/dist/mcp-data/registry/chip.json +50 -1
- package/dist/mcp-data/registry/code-block.json +30 -1
- package/dist/mcp-data/registry/conversation-list-item.json +25 -2
- package/dist/mcp-data/registry/conversation-list-section.json +14 -1
- package/dist/mcp-data/registry/conversation-list.json +6 -1
- package/dist/mcp-data/registry/data-customize.json +26 -1
- package/dist/mcp-data/registry/data-filter.json +26 -1
- package/dist/mcp-data/registry/data-group.json +26 -1
- package/dist/mcp-data/registry/data-preferences.json +26 -1
- package/dist/mcp-data/registry/data-saved-views.json +26 -1
- package/dist/mcp-data/registry/data-search.json +27 -2
- package/dist/mcp-data/registry/data-sort.json +26 -1
- package/dist/mcp-data/registry/data-toolbar.json +14 -1
- package/dist/mcp-data/registry/divider.json +6 -1
- package/dist/mcp-data/registry/empty-state.json +6 -1
- package/dist/mcp-data/registry/field.json +14 -1
- package/dist/mcp-data/registry/filter-menu.json +48 -1
- package/dist/mcp-data/registry/icon.json +21 -1
- package/dist/mcp-data/registry/input-date.json +48 -1
- package/dist/mcp-data/registry/input-time.json +48 -1
- package/dist/mcp-data/registry/input.json +48 -1
- package/dist/mcp-data/registry/loader.json +21 -1
- package/dist/mcp-data/registry/markdown.json +17 -1
- package/dist/mcp-data/registry/menu.json +26 -1
- package/dist/mcp-data/registry/message-actions.json +6 -1
- package/dist/mcp-data/registry/message-bubble.json +26 -1
- package/dist/mcp-data/registry/message-composer.json +24 -1
- package/dist/mcp-data/registry/message-scroller.json +12 -1
- package/dist/mcp-data/registry/message.json +6 -1
- package/dist/mcp-data/registry/mobile-bar-nav.json +24 -1
- package/dist/mcp-data/registry/mobile-header.json +26 -1
- package/dist/mcp-data/registry/mobile-section-switcher.json +26 -1
- package/dist/mcp-data/registry/mobile-sheet-nav.json +27 -2
- package/dist/mcp-data/registry/modal.json +24 -1
- package/dist/mcp-data/registry/pagination.json +6 -1
- package/dist/mcp-data/registry/panel-nav.json +28 -2
- package/dist/mcp-data/registry/panel-sub-nav.json +25 -0
- package/dist/mcp-data/registry/panel-tool-header.json +24 -1
- package/dist/mcp-data/registry/panel-tool-search.json +24 -1
- package/dist/mcp-data/registry/panel-tools.json +25 -1
- package/dist/mcp-data/registry/paper-texture.json +6 -1
- package/dist/mcp-data/registry/radio.json +35 -1
- package/dist/mcp-data/registry/registry.json +2319 -89
- package/dist/mcp-data/registry/score.json +38 -1
- package/dist/mcp-data/registry/scroll-overlay.json +6 -1
- package/dist/mcp-data/registry/select.json +52 -1
- package/dist/mcp-data/registry/shell-app.json +26 -1
- package/dist/mcp-data/registry/shell-page.json +6 -1
- package/dist/mcp-data/registry/shell-tools.json +25 -1
- package/dist/mcp-data/registry/skeleton.json +41 -1
- package/dist/mcp-data/registry/slider.json +42 -1
- package/dist/mcp-data/registry/swatch-picker.json +24 -1
- package/dist/mcp-data/registry/switch.json +37 -1
- package/dist/mcp-data/registry/tab-group.json +49 -1
- package/dist/mcp-data/registry/table.json +102 -1
- package/dist/mcp-data/registry/tag.json +52 -1
- package/dist/mcp-data/registry/text.json +22 -1
- package/dist/mcp-data/registry/textarea.json +38 -1
- package/dist/mcp-data/registry/time-picker.json +14 -1
- package/dist/mcp-data/registry/toast.json +24 -1
- package/dist/mcp-data/registry/tooltip-chart.json +24 -1
- package/dist/mcp-data/registry/tooltip.json +26 -1
- package/dist/mcp-data/registry/typing-indicator.json +6 -1
- package/package.json +32 -7
- /package/dist/components/{p-Dpr2y6_S.js.map → p-B_jdoM7e.js.map} +0 -0
- /package/dist/components/{p-CElUM-xU.js.map → p-C6xVxqOn.js.map} +0 -0
- /package/dist/components/{p-MG4lcN0D.js.map → p-CdGXzRP8.js.map} +0 -0
- /package/dist/components/{p-Nc76seSq.js.map → p-DEW7r0U9.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["isMessageScrollerTranscriptReset","previous","current","length","previousElements","Set","some","element","has","pruneMessageScrollerTranscriptSet","known","currentElements","delete","scrollEdgeFadeCss","messageScrollerCss","LIVE_EDGE_THRESHOLD","MessageScroller","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","busy","autoFollow","defaultPosition","messagesLabel","showScrollToLatest","following","followReleased","releasePendingAtLiveEdge","atStart","programmatic","transcriptChildren","knownTranscriptElements","knownTurnAnchors","turnClearance","prependReconciliation","turnPositionGeneration","defaultPositionGeneration","transcriptResetPending","hasLoaded","handleTranscriptChange","getTranscriptChildren","transcriptReset","invalidateTranscriptWork","resetTranscriptTracking","resetTranscriptPositionState","trackTranscript","rememberFirstChildTop","scrollOverlayController","sync","scheduleDefaultPosition","hadKnownTranscript","size","previouslyKnown","appendedAnchor","reverse","find","reverseIndex","matches","index","slice","every","next","pruneTranscriptTracking","scheduleNewTurnPosition","firstKnownIndex","findIndex","newTranscript","filter","prepended","indexOf","viewport","preservedElement","activeTurnAnchor","isConnected","preservedTop","activeTurnAnchorViewportTop","firstChildViewportTop","undefined","reconcilePrependPosition","schedulePrependReconciliation","rememberActiveTurnAnchorTop","handleTranscriptSlotChange","handleScroll","atLiveEdge","isAtLiveEdge","nextAtStart","scrollTop","dsReachStart","emit","releaseFollow","handleSelectionChange","selection","document","getSelection","isCollapsed","anchorNode","el","contains","componentDidLoad","seedTranscriptBaseline","connectObservers","removeEventListener","addEventListener","connectedCallback","disconnectedCallback","disconnect","mutationObserver","scrollToMessage","id","message","Array","from","querySelectorAll","item","messageId","getAttribute","scrollIntoView","block","behavior","motionBehavior","scrollToStart","scrollTo","Boolean","scrollHeight","clientHeight","scrollToEnd","matchMedia","top","programmaticTimer","clearTimeout","setTimeout","clearActiveTurnAnchor","style","removeProperty","clear","elements","forEach","add","includes","generation","requestAnimationFrame","applyDefaultPosition","content","overlay","ScrollOverlayController","host","overlayContentSelector","onGeometryChange","handleContentGrowth","connect","MutationObserver","observe","childList","subtree","characterData","syncTurnClearance","nextHeight","first","getBoundingClientRect","assigned","transcriptSlot","assignedElements","assignedTranscript","queriedTranscript","closest","viewportTop","nextTop","pending","flatMap","map","componentOnReady","call","catch","promise","Promise","all","then","anchor","positionNewTurn","finishPositionNewTurn","viewportRect","anchorTop","customOffset","getComputedStyle","getPropertyValue","trim","offset","resolveCssLengthPx","max","Math","target","min","children","last","anchorRect","lastRect","contentAfterAnchor","bottom","clearance","ceil","setProperty","anchors","render","h","Host","key","class","ref","role","tabIndex","onScroll","onPointerDown","event","pointerType","onWheel","onKeyDown","onSlotchange","name","label","side","variant","icon","rounded","hasBorder","onDsClick"],"sources":["src/wc/components/MessageScroller/message-scroller-transcript.ts","src/wc/utils/scroll-edge-fade.css?tag=ds-message-scroller&encapsulation=scoped","src/wc/components/MessageScroller/MessageScroller.css?tag=ds-message-scroller&encapsulation=scoped","src/wc/components/MessageScroller/MessageScroller.tsx"],"sourcesContent":["/**\n * A transcript reset replaces the current baseline instead of appending or\n * prepending around surviving nodes. Emptying a populated transcript also\n * starts a reset that completes when its next baseline is supplied.\n */\nexport function isMessageScrollerTranscriptReset<T>(\n previous: readonly T[],\n current: readonly T[]\n): boolean {\n if (!previous.length) return false;\n if (!current.length) return true;\n const previousElements = new Set(previous);\n return !current.some(element => previousElements.has(element));\n}\n\n/** Keep identity tracking bounded to nodes in the current transcript. */\nexport function pruneMessageScrollerTranscriptSet<T>(known: Set<T>, current: readonly T[]): void {\n const currentElements = new Set(current);\n for (const element of known) {\n if (!currentElements.has(element)) known.delete(element);\n }\n}\n","/**\n * Scroll-edge alpha fade — the single edge-fade utility for overflow containers.\n * Masks scrolling content to transparent so flat surfaces, shell gradients, and\n * images show through.\n *\n * Static fades are the default (PanelNav intentionally keeps its bottom fade).\n * Add `.scroll-edge-fade--scroll-aware` to reveal/hide each configured edge from\n * the container's own scroll position without JavaScript. Browsers without CSS\n * scroll-driven animations retain the configured static fades.\n *\n * @see scroll-edge-fade.ts — `scrollEdgeFadeClassMap`, `isScrollAtEdge`, size helpers.\n */\n\n@property --ds-scroll-edge-fade-top {\n syntax: '<length-percentage>';\n inherits: false;\n /* stylelint-disable-next-line length-zero-no-unit -- @property requires a unit-compatible initial value. */\n initial-value: 0px;\n}\n\n@property --ds-scroll-edge-fade-bottom {\n syntax: '<length-percentage>';\n inherits: false;\n /* stylelint-disable-next-line length-zero-no-unit -- @property requires a unit-compatible initial value. */\n initial-value: 0px;\n}\n\n@property --ds-scroll-edge-fade-left {\n syntax: '<length-percentage>';\n inherits: false;\n /* stylelint-disable-next-line length-zero-no-unit -- @property requires a unit-compatible initial value. */\n initial-value: 0px;\n}\n\n@property --ds-scroll-edge-fade-right {\n syntax: '<length-percentage>';\n inherits: false;\n /* stylelint-disable-next-line length-zero-no-unit -- @property requires a unit-compatible initial value. */\n initial-value: 0px;\n}\n\n@keyframes ds-scroll-edge-fade-reveal-top {\n from {\n --ds-scroll-edge-fade-top: 0px;\n }\n to {\n --ds-scroll-edge-fade-top: var(--ds-scroll-edge-fade-target-top);\n }\n}\n\n@keyframes ds-scroll-edge-fade-reveal-bottom {\n from {\n --ds-scroll-edge-fade-bottom: var(--ds-scroll-edge-fade-target-bottom);\n }\n to {\n --ds-scroll-edge-fade-bottom: 0px;\n }\n}\n\n@keyframes ds-scroll-edge-fade-reveal-left {\n from {\n --ds-scroll-edge-fade-left: 0px;\n }\n to {\n --ds-scroll-edge-fade-left: var(--ds-scroll-edge-fade-target-left);\n }\n}\n\n@keyframes ds-scroll-edge-fade-reveal-right {\n from {\n --ds-scroll-edge-fade-right: var(--ds-scroll-edge-fade-target-right);\n }\n to {\n --ds-scroll-edge-fade-right: 0px;\n }\n}\n\n/* Mask gradients use #000 / transparent as alpha stops — not theme colors. */\n/* stylelint-disable color-no-hex */\n\n.scroll-edge-fade {\n --ds-scroll-edge-fade-size: var(--dimension-size-600);\n --ds-scroll-edge-fade-reveal-distance: var(--dimension-size-800);\n --ds-scroll-edge-fade-target-top: 0px;\n --ds-scroll-edge-fade-target-bottom: 0px;\n --ds-scroll-edge-fade-target-left: 0px;\n --ds-scroll-edge-fade-target-right: 0px;\n --ds-scroll-edge-fade-top: var(--ds-scroll-edge-fade-target-top);\n --ds-scroll-edge-fade-bottom: var(--ds-scroll-edge-fade-target-bottom);\n --ds-scroll-edge-fade-left: var(--ds-scroll-edge-fade-target-left);\n --ds-scroll-edge-fade-right: var(--ds-scroll-edge-fade-target-right);\n --ds-scroll-edge-fade-block-mask: linear-gradient(\n to bottom,\n transparent 0,\n #000 var(--ds-scroll-edge-fade-top),\n #000 calc(100% - var(--ds-scroll-edge-fade-bottom)),\n transparent 100%\n );\n --ds-scroll-edge-fade-inline-mask: linear-gradient(\n to right,\n transparent 0,\n #000 var(--ds-scroll-edge-fade-left),\n #000 calc(100% - var(--ds-scroll-edge-fade-right)),\n transparent 100%\n );\n\n /* Intersecting the block and inline masks lets every edge compose correctly. */\n -webkit-mask-image: var(--ds-scroll-edge-fade-block-mask), var(--ds-scroll-edge-fade-inline-mask);\n mask-image: var(--ds-scroll-edge-fade-block-mask), var(--ds-scroll-edge-fade-inline-mask);\n -webkit-mask-composite: source-in;\n mask-composite: intersect;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n}\n\n.scroll-edge-fade--top {\n --ds-scroll-edge-fade-target-top: var(--ds-scroll-edge-fade-size);\n}\n\n.scroll-edge-fade--bottom {\n --ds-scroll-edge-fade-target-bottom: var(--ds-scroll-edge-fade-size);\n}\n\n.scroll-edge-fade--left {\n --ds-scroll-edge-fade-target-left: var(--ds-scroll-edge-fade-size);\n}\n\n.scroll-edge-fade--right {\n --ds-scroll-edge-fade-target-right: var(--ds-scroll-edge-fade-size);\n}\n\n/* Manual per-edge state remains available when scroll state already lives in JS. */\n.scroll-edge-fade--top-at-edge {\n --ds-scroll-edge-fade-target-top: 0px;\n}\n\n.scroll-edge-fade--bottom-at-edge {\n --ds-scroll-edge-fade-target-bottom: 0px;\n}\n\n.scroll-edge-fade--left-at-edge {\n --ds-scroll-edge-fade-target-left: 0px;\n}\n\n.scroll-edge-fade--right-at-edge {\n --ds-scroll-edge-fade-target-right: 0px;\n}\n\n@supports (animation-timeline: scroll()) {\n .scroll-edge-fade--scroll-aware {\n animation-name:\n ds-scroll-edge-fade-reveal-top, ds-scroll-edge-fade-reveal-bottom,\n ds-scroll-edge-fade-reveal-left, ds-scroll-edge-fade-reveal-right;\n /* stylelint-disable-next-line declaration-property-value-disallowed-list -- scroll timelines require a nonzero sentinel duration; elapsed time is ignored. */\n animation-duration: 1ms;\n animation-timing-function: ease-in-out;\n animation-fill-mode: both;\n animation-timeline: scroll(self y), scroll(self y), scroll(self x), scroll(self x);\n animation-range:\n 0 var(--ds-scroll-edge-fade-reveal-distance),\n calc(100% - var(--ds-scroll-edge-fade-reveal-distance)) 100%,\n 0 var(--ds-scroll-edge-fade-reveal-distance),\n calc(100% - var(--ds-scroll-edge-fade-reveal-distance)) 100%;\n }\n\n @media (prefers-reduced-motion: reduce) {\n .scroll-edge-fade--scroll-aware {\n animation: none;\n }\n }\n}\n\n.scroll-edge-fade--at-end,\n.scroll-edge-fade--hidden {\n -webkit-mask-image: none;\n mask-image: none;\n}\n\n/**\n * Masks a long content element against a scrollport-relative block window.\n * The owner updates the start/end offsets as the scrollport moves. Keeping the\n * mask on the content instead of the overflow element leaves native scrollbars\n * outside the fade.\n */\n.scroll-edge-fade--block-window {\n --ds-scroll-edge-fade-window-start: 100%;\n --ds-scroll-edge-fade-window-end: 100%;\n\n -webkit-mask-image: linear-gradient(\n to bottom,\n #000 0,\n #000 var(--ds-scroll-edge-fade-window-start),\n transparent var(--ds-scroll-edge-fade-window-end)\n );\n mask-image: linear-gradient(\n to bottom,\n #000 0,\n #000 var(--ds-scroll-edge-fade-window-start),\n transparent var(--ds-scroll-edge-fade-window-end)\n );\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n}\n\n/* stylelint-enable color-no-hex */\n","@import '../../styles/control-elevation.css';\n\n:host {\n --ds-message-scroller-anchor-offset: var(--dimension-space-800);\n\n display: block;\n width: 100%;\n height: 100%;\n min-height: 0;\n box-sizing: border-box;\n}\n\n.message-scroller {\n position: relative;\n width: 100%;\n height: 100%;\n min-height: 0;\n}\n\n.message-scroller__viewport {\n width: 100%;\n height: 100%;\n min-height: 0;\n overflow: auto;\n overflow-anchor: none;\n overscroll-behavior: contain;\n box-sizing: border-box;\n}\n\n.message-scroller__viewport:focus-visible {\n outline: var(--dimension-stroke-width-025) solid var(--color-border-bold-brand);\n outline-offset: calc(-1 * var(--dimension-stroke-width-025));\n}\n\n.message-scroller__content {\n display: flex;\n flex-direction: column;\n gap: var(--dimension-space-300);\n width: 100%;\n max-width: var(--ds-message-scroller-content-max-width, var(--dimension-panel-width-2xl));\n min-height: 100%;\n margin-inline: auto;\n padding-block-start: var(--dimension-space-200);\n padding-inline: var(--dimension-space-200);\n padding-block-end: max(\n calc(var(--dimension-space-200) + var(--ds-scroll-overlay-block-size, 0px)),\n var(--ds-message-scroller-turn-clearance, 0px)\n );\n box-sizing: border-box;\n}\n\n.message-scroller__overlay {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: var(--dimension-z-index-floating);\n}\n\n.message-scroller__overlay-stack {\n display: grid;\n width: 100%;\n}\n\n.message-scroller__interaction,\n.message-scroller__overlay-content {\n min-width: 0;\n}\n\n.message-scroller__control {\n position: absolute;\n bottom: calc(var(--ds-scroll-overlay-content-block-size, 0px) + var(--dimension-space-200));\n left: 50%;\n z-index: var(--dimension-z-index-floating);\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--dimension-radius-half);\n background: var(--color-background-transparent);\n transform: translateX(-50%);\n -webkit-backdrop-filter: blur(var(--effect-blur-sm));\n backdrop-filter: blur(var(--effect-blur-sm));\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Method,\n Prop,\n State,\n} from '@stencil/core';\nimport type { MessageScrollerPosition } from '../conversation-types';\nimport { ScrollOverlayController } from '../../utils/scroll-overlay-controller';\nimport { resolveCssLengthPx } from '../../utils/resolve-css-length-px';\nimport {\n isMessageScrollerTranscriptReset,\n pruneMessageScrollerTranscriptSet,\n} from './message-scroller-transcript';\n\nconst LIVE_EDGE_THRESHOLD = 24;\n\n@Component({\n tag: 'ds-message-scroller',\n styleUrl: 'MessageScroller.css',\n styleUrls: ['../../utils/scroll-edge-fade.css'],\n scoped: true,\n})\nexport class MessageScroller {\n @Element() el!: HTMLElement;\n\n @Prop() busy: boolean = false;\n @Prop() autoFollow: boolean = true;\n @Prop() defaultPosition: MessageScrollerPosition = 'last-anchor';\n @Prop() messagesLabel: string = 'Messages';\n\n @Event() dsReachStart!: EventEmitter<void>;\n\n @State() private showScrollToLatest = false;\n\n private viewport?: HTMLElement;\n private content?: HTMLElement;\n private overlay?: HTMLElement;\n private transcriptSlot?: HTMLSlotElement;\n private scrollOverlayController?: ScrollOverlayController;\n private mutationObserver?: MutationObserver;\n private following = true;\n private followReleased = false;\n private releasePendingAtLiveEdge = false;\n private atStart = false;\n private programmatic = false;\n private programmaticTimer?: ReturnType<typeof setTimeout>;\n private transcriptChildren: HTMLElement[] = [];\n private knownTranscriptElements = new Set<HTMLElement>();\n private knownTurnAnchors = new Set<HTMLElement>();\n private firstChildViewportTop?: number;\n private activeTurnAnchor?: HTMLElement;\n private activeTurnAnchorViewportTop?: number;\n private turnClearance = 0;\n private prependReconciliation = 0;\n private turnPositionGeneration = 0;\n private defaultPositionGeneration = 0;\n private transcriptResetPending = false;\n private hasLoaded = false;\n\n componentDidLoad() {\n this.hasLoaded = true;\n this.seedTranscriptBaseline();\n this.connectObservers();\n this.scheduleDefaultPosition();\n document.removeEventListener('selectionchange', this.handleSelectionChange);\n document.addEventListener('selectionchange', this.handleSelectionChange);\n }\n\n connectedCallback() {\n if (!this.hasLoaded) return;\n this.seedTranscriptBaseline();\n this.connectObservers();\n this.scheduleDefaultPosition();\n document.removeEventListener('selectionchange', this.handleSelectionChange);\n document.addEventListener('selectionchange', this.handleSelectionChange);\n }\n\n disconnectedCallback() {\n this.invalidateTranscriptWork();\n this.scrollOverlayController?.disconnect();\n this.scrollOverlayController = undefined;\n this.mutationObserver?.disconnect();\n this.mutationObserver = undefined;\n this.resetTranscriptTracking();\n this.resetTranscriptPositionState();\n this.transcriptResetPending = false;\n document.removeEventListener('selectionchange', this.handleSelectionChange);\n }\n\n @Method()\n async scrollToMessage(id: string): Promise<boolean> {\n const message = Array.from(\n this.el.querySelectorAll<HTMLElement & { messageId?: string }>('ds-message')\n ).find(item => item.messageId === id || item.getAttribute('message-id') === id);\n if (!message) return false;\n this.releasePendingAtLiveEdge = false;\n this.following = false;\n this.followReleased = true;\n this.showScrollToLatest = true;\n message.scrollIntoView({ block: 'start', behavior: this.motionBehavior() });\n return true;\n }\n\n @Method()\n async scrollToStart() {\n this.releasePendingAtLiveEdge = false;\n this.scrollTo(0);\n this.following = false;\n this.followReleased = true;\n this.showScrollToLatest = Boolean(\n this.viewport && this.viewport.scrollHeight > this.viewport.clientHeight\n );\n }\n\n @Method()\n async scrollToEnd() {\n this.releasePendingAtLiveEdge = false;\n this.following = true;\n this.followReleased = false;\n this.showScrollToLatest = false;\n this.scrollTo(this.viewport?.scrollHeight ?? 0);\n }\n\n private motionBehavior(): ScrollBehavior {\n return matchMedia('(prefers-reduced-motion: reduce)').matches ? 'auto' : 'smooth';\n }\n\n private scrollTo(top: number) {\n if (!this.viewport) return;\n this.programmatic = true;\n const behavior = this.motionBehavior();\n this.viewport.scrollTo({ top, behavior });\n if (this.programmaticTimer) clearTimeout(this.programmaticTimer);\n this.programmaticTimer = setTimeout(\n () => {\n this.programmatic = false;\n this.programmaticTimer = undefined;\n if (this.following) {\n this.viewport!.scrollTop = top;\n this.showScrollToLatest = false;\n }\n },\n behavior === 'smooth' ? 600 : 0\n );\n }\n\n private invalidateTranscriptWork() {\n this.prependReconciliation += 1;\n this.turnPositionGeneration += 1;\n this.defaultPositionGeneration += 1;\n if (this.programmaticTimer) clearTimeout(this.programmaticTimer);\n this.programmaticTimer = undefined;\n this.programmatic = false;\n }\n\n private clearActiveTurnAnchor() {\n this.activeTurnAnchor = undefined;\n this.activeTurnAnchorViewportTop = undefined;\n this.turnClearance = 0;\n this.el.style.removeProperty('--ds-message-scroller-turn-clearance');\n }\n\n private resetTranscriptTracking() {\n this.transcriptChildren = [];\n this.knownTranscriptElements.clear();\n this.knownTurnAnchors.clear();\n this.firstChildViewportTop = undefined;\n this.clearActiveTurnAnchor();\n }\n\n private resetTranscriptPositionState() {\n this.following = true;\n this.followReleased = false;\n this.releasePendingAtLiveEdge = false;\n this.atStart = false;\n this.showScrollToLatest = false;\n }\n\n private trackTranscript(elements: readonly HTMLElement[]) {\n elements.forEach(element => {\n this.knownTranscriptElements.add(element);\n if (element.matches('ds-message[scroll-anchor]')) {\n this.knownTurnAnchors.add(element);\n }\n });\n }\n\n private seedTranscriptBaseline() {\n this.resetTranscriptTracking();\n this.transcriptChildren = this.getTranscriptChildren();\n this.trackTranscript(this.transcriptChildren);\n this.transcriptResetPending = false;\n this.rememberFirstChildTop();\n }\n\n private pruneTranscriptTracking(current: readonly HTMLElement[]) {\n pruneMessageScrollerTranscriptSet(this.knownTranscriptElements, current);\n pruneMessageScrollerTranscriptSet(this.knownTurnAnchors, current);\n if (this.activeTurnAnchor && !current.includes(this.activeTurnAnchor)) {\n this.clearActiveTurnAnchor();\n }\n }\n\n private scheduleDefaultPosition() {\n const generation = ++this.defaultPositionGeneration;\n requestAnimationFrame(() => {\n if (generation !== this.defaultPositionGeneration || !this.el.isConnected) return;\n this.applyDefaultPosition();\n });\n }\n\n private connectObservers() {\n if (!this.viewport || !this.content || !this.overlay) return;\n this.scrollOverlayController?.disconnect();\n this.mutationObserver?.disconnect();\n this.scrollOverlayController = new ScrollOverlayController({\n host: this.el,\n viewport: this.viewport,\n content: this.content,\n overlay: this.overlay,\n overlayContentSelector: '.message-scroller__overlay-stack',\n onGeometryChange: () => this.handleContentGrowth(),\n });\n this.scrollOverlayController.connect();\n this.mutationObserver = new MutationObserver(() => {\n this.handleTranscriptChange();\n this.handleContentGrowth();\n });\n this.mutationObserver.observe(this.el, {\n childList: true,\n subtree: true,\n characterData: true,\n });\n }\n\n private handleContentGrowth() {\n if (!this.viewport) return;\n this.syncTurnClearance();\n const nextHeight = this.viewport.scrollHeight;\n if (this.autoFollow && this.following && !this.followReleased) {\n this.viewport.scrollTop = nextHeight;\n }\n if (this.releasePendingAtLiveEdge && !this.isAtLiveEdge()) {\n this.releasePendingAtLiveEdge = false;\n }\n this.showScrollToLatest = !this.following && !this.isAtLiveEdge();\n this.scrollOverlayController?.sync();\n }\n\n private rememberFirstChildTop() {\n if (!this.viewport) return;\n const first = this.getTranscriptChildren()[0];\n this.firstChildViewportTop = first\n ? first.getBoundingClientRect().top - this.viewport.getBoundingClientRect().top\n : undefined;\n }\n\n private getTranscriptChildren(): HTMLElement[] {\n const assigned = this.transcriptSlot?.assignedElements() ?? [];\n const assignedTranscript = assigned.filter(\n (element): element is HTMLElement =>\n element instanceof HTMLElement &&\n (element.matches('ds-message') || element.matches('ds-agent-response'))\n );\n const queriedTranscript = Array.from(\n this.el.querySelectorAll<HTMLElement>('ds-message, ds-agent-response')\n ).filter(element => {\n if (element.closest('.message-scroller__interaction, .message-scroller__overlay-content')) {\n return false;\n }\n if (element.matches('ds-agent-response')) return true;\n return !element.closest('ds-agent-response');\n });\n return queriedTranscript.length > assignedTranscript.length\n ? queriedTranscript\n : assignedTranscript;\n }\n\n private handleTranscriptChange = () => {\n const current = this.getTranscriptChildren();\n const previous = this.transcriptChildren;\n const transcriptReset =\n isMessageScrollerTranscriptReset(previous, current) ||\n (this.transcriptResetPending && current.length > 0);\n if (transcriptReset) {\n this.invalidateTranscriptWork();\n this.resetTranscriptTracking();\n this.resetTranscriptPositionState();\n this.transcriptChildren = current;\n this.trackTranscript(current);\n this.transcriptResetPending = current.length === 0;\n this.rememberFirstChildTop();\n this.scrollOverlayController?.sync();\n if (current.length) this.scheduleDefaultPosition();\n return;\n }\n\n const hadKnownTranscript = this.knownTranscriptElements.size > 0;\n const previouslyKnown = new Set(this.knownTranscriptElements);\n const appendedAnchor = [...current].reverse().find((element, reverseIndex) => {\n if (!element.matches('ds-message[scroll-anchor]') || this.knownTurnAnchors.has(element)) {\n return false;\n }\n const index = current.length - reverseIndex - 1;\n return current.slice(index + 1).every(next => !this.knownTranscriptElements.has(next));\n });\n this.trackTranscript(current);\n this.pruneTranscriptTracking(current);\n if (!previous.length) {\n this.transcriptChildren = current;\n if (appendedAnchor && hadKnownTranscript) {\n this.scheduleNewTurnPosition(appendedAnchor);\n }\n return;\n }\n\n const firstKnownIndex = current.findIndex(element => previouslyKnown.has(element));\n const newTranscript = current.filter(element => !previouslyKnown.has(element));\n const prepended =\n (current.length > previous.length &&\n previous.every(\n (element, index) => current[current.length - previous.length + index] === element\n )) ||\n (!appendedAnchor &&\n newTranscript.length > 0 &&\n firstKnownIndex > 0 &&\n newTranscript.every(element => current.indexOf(element) < firstKnownIndex));\n\n this.transcriptChildren = current;\n if (prepended) {\n if (this.viewport) {\n const preservedElement = this.activeTurnAnchor?.isConnected\n ? this.activeTurnAnchor\n : previous[0];\n const preservedTop = this.activeTurnAnchor?.isConnected\n ? this.activeTurnAnchorViewportTop\n : this.firstChildViewportTop;\n if (preservedElement && preservedTop !== undefined) {\n this.reconcilePrependPosition(preservedElement, preservedTop);\n this.schedulePrependReconciliation(preservedElement, preservedTop, newTranscript);\n }\n }\n this.rememberFirstChildTop();\n this.rememberActiveTurnAnchorTop();\n this.scrollOverlayController?.sync();\n return;\n }\n if (appendedAnchor) {\n this.scheduleNewTurnPosition(appendedAnchor);\n }\n };\n\n private reconcilePrependPosition(element: HTMLElement, viewportTop: number) {\n if (!this.viewport || !element.isConnected) return;\n const nextTop = element.getBoundingClientRect().top - this.viewport.getBoundingClientRect().top;\n this.viewport.scrollTop += nextTop - viewportTop;\n }\n\n private schedulePrependReconciliation(\n element: HTMLElement,\n viewportTop: number,\n prepended: HTMLElement[]\n ) {\n const generation = ++this.prependReconciliation;\n // Prepended custom elements can gain height after their child-list mutation.\n // Reconcile against the original coordinate after their layouts settle.\n const pending = prepended\n .flatMap(item => [item, ...Array.from(item.querySelectorAll<HTMLElement>('*'))])\n .map(item => {\n const componentOnReady = (\n item as HTMLElement & { componentOnReady?: () => Promise<unknown> }\n ).componentOnReady;\n return componentOnReady ? componentOnReady.call(item).catch(() => undefined) : null;\n })\n .filter((promise): promise is Promise<unknown> => Boolean(promise));\n\n void Promise.all(pending).then(() => {\n requestAnimationFrame(() => {\n if (generation !== this.prependReconciliation) return;\n this.reconcilePrependPosition(element, viewportTop);\n requestAnimationFrame(() => {\n if (generation !== this.prependReconciliation) return;\n this.reconcilePrependPosition(element, viewportTop);\n this.rememberFirstChildTop();\n this.rememberActiveTurnAnchorTop();\n this.scrollOverlayController?.sync();\n });\n });\n });\n }\n\n private handleTranscriptSlotChange = () => this.handleTranscriptChange();\n\n private scheduleNewTurnPosition(anchor: HTMLElement) {\n const generation = ++this.turnPositionGeneration;\n requestAnimationFrame(() => {\n if (generation !== this.turnPositionGeneration || !anchor.isConnected || !this.viewport) {\n return;\n }\n this.positionNewTurn(anchor, generation);\n });\n }\n\n private positionNewTurn(anchor: HTMLElement, generation: number) {\n if (generation !== this.turnPositionGeneration || !this.viewport || !anchor.isConnected) return;\n this.activeTurnAnchor = anchor;\n this.syncTurnClearance();\n requestAnimationFrame(() => {\n if (generation !== this.turnPositionGeneration) return;\n this.finishPositionNewTurn(anchor, generation);\n });\n }\n\n private finishPositionNewTurn(anchor: HTMLElement, generation: number) {\n if (generation !== this.turnPositionGeneration || !this.viewport || !anchor.isConnected) {\n return;\n }\n const viewportRect = this.viewport.getBoundingClientRect();\n const anchorTop =\n anchor.getBoundingClientRect().top - viewportRect.top + this.viewport.scrollTop;\n const customOffset = getComputedStyle(this.el)\n .getPropertyValue('--ds-message-scroller-anchor-offset')\n .trim();\n const offset = resolveCssLengthPx(customOffset, 'var(--dimension-space-800)');\n const max = Math.max(this.viewport.scrollHeight - this.viewport.clientHeight, 0);\n const target = Math.min(Math.max(anchorTop - offset, 0), max);\n this.following = max - target <= LIVE_EDGE_THRESHOLD;\n this.followReleased = !this.following;\n this.showScrollToLatest = !this.following;\n this.programmatic = true;\n this.viewport.scrollTop = target;\n requestAnimationFrame(() => {\n if (generation !== this.turnPositionGeneration) return;\n this.programmatic = false;\n this.following = this.isAtLiveEdge();\n this.followReleased = !this.following;\n this.showScrollToLatest = !this.following;\n this.rememberFirstChildTop();\n this.rememberActiveTurnAnchorTop();\n });\n this.scrollOverlayController?.sync();\n }\n\n private rememberActiveTurnAnchorTop() {\n if (!this.viewport || !this.activeTurnAnchor?.isConnected) return;\n this.activeTurnAnchorViewportTop =\n this.activeTurnAnchor.getBoundingClientRect().top - this.viewport.getBoundingClientRect().top;\n }\n\n private syncTurnClearance() {\n if (!this.viewport || !this.activeTurnAnchor?.isConnected) return;\n const children = this.getTranscriptChildren();\n const last = children[children.length - 1];\n if (!last) return;\n const anchorRect = this.activeTurnAnchor.getBoundingClientRect();\n const lastRect = last.getBoundingClientRect();\n const customOffset = getComputedStyle(this.el)\n .getPropertyValue('--ds-message-scroller-anchor-offset')\n .trim();\n const offset = resolveCssLengthPx(customOffset, 'var(--dimension-space-800)');\n const contentAfterAnchor = Math.max(lastRect.bottom - anchorRect.top, 0);\n const clearance = Math.max(\n Math.ceil(this.viewport.clientHeight - offset - contentAfterAnchor),\n 0\n );\n if (clearance === this.turnClearance) return;\n this.turnClearance = clearance;\n this.el.style.setProperty('--ds-message-scroller-turn-clearance', `${clearance}px`);\n }\n\n private applyDefaultPosition() {\n if (!this.viewport) return;\n this.releasePendingAtLiveEdge = false;\n if (this.defaultPosition === 'start') {\n this.viewport.scrollTop = 0;\n this.following = false;\n this.followReleased = true;\n this.showScrollToLatest = this.viewport.scrollHeight > this.viewport.clientHeight;\n this.scrollOverlayController?.sync();\n return;\n }\n if (this.defaultPosition === 'last-anchor') {\n const anchors = this.el.querySelectorAll<HTMLElement>('ds-message[scroll-anchor]');\n const last = anchors.item(anchors.length - 1);\n if (last) {\n last.scrollIntoView({ block: 'start' });\n this.following = this.isAtLiveEdge();\n this.followReleased = !this.following;\n this.showScrollToLatest = !this.following;\n this.scrollOverlayController?.sync();\n return;\n }\n }\n this.viewport.scrollTop = this.viewport.scrollHeight;\n this.following = true;\n this.followReleased = false;\n this.showScrollToLatest = false;\n this.scrollOverlayController?.sync();\n }\n\n private isAtLiveEdge(): boolean {\n if (!this.viewport) return true;\n return (\n this.viewport.scrollHeight - this.viewport.clientHeight - this.viewport.scrollTop <=\n LIVE_EDGE_THRESHOLD\n );\n }\n\n private handleScroll = () => {\n if (!this.viewport) return;\n this.scrollOverlayController?.sync();\n this.rememberFirstChildTop();\n this.rememberActiveTurnAnchorTop();\n if (this.programmatic) return;\n const atLiveEdge = this.isAtLiveEdge();\n if (this.releasePendingAtLiveEdge && atLiveEdge) {\n // A scroll event queued by the previous auto-follow can arrive after\n // reader input. Keep that stale event from restoring follow mode.\n this.following = false;\n this.followReleased = true;\n this.showScrollToLatest = false;\n return;\n }\n this.releasePendingAtLiveEdge = false;\n this.following = atLiveEdge;\n this.followReleased = !this.following;\n this.showScrollToLatest = !this.following;\n const nextAtStart = this.viewport.scrollTop <= LIVE_EDGE_THRESHOLD;\n if (nextAtStart && !this.atStart) this.dsReachStart.emit();\n this.atStart = nextAtStart;\n };\n\n private releaseFollow = () => {\n this.prependReconciliation += 1;\n this.releasePendingAtLiveEdge = this.isAtLiveEdge();\n this.following = false;\n this.followReleased = true;\n this.showScrollToLatest = !this.releasePendingAtLiveEdge;\n };\n\n private handleSelectionChange = () => {\n const selection = document.getSelection();\n if (\n selection &&\n !selection.isCollapsed &&\n selection.anchorNode &&\n this.el.contains(selection.anchorNode)\n ) {\n this.releaseFollow();\n }\n };\n\n render() {\n return (\n <Host>\n <div class=\"message-scroller\">\n <div\n class=\"message-scroller__viewport\"\n ref={element => {\n this.viewport = element;\n }}\n role=\"region\"\n aria-label={this.messagesLabel}\n tabIndex={0}\n onScroll={this.handleScroll}\n onPointerDown={(event: PointerEvent) => {\n if (event.pointerType === 'touch') this.releaseFollow();\n }}\n onWheel={this.releaseFollow}\n onKeyDown={(event: KeyboardEvent) => {\n if (\n ['ArrowUp', 'ArrowDown', 'PageUp', 'PageDown', 'Home', 'End', ' '].includes(\n event.key\n )\n ) {\n this.releaseFollow();\n }\n }}\n >\n <div\n class=\"message-scroller__content scroll-edge-fade--block-window\"\n ref={element => {\n this.content = element;\n }}\n role=\"log\"\n aria-live=\"polite\"\n aria-relevant=\"additions\"\n aria-busy={this.busy ? 'true' : undefined}\n >\n <slot\n ref={element => {\n this.transcriptSlot = element;\n }}\n onSlotchange={this.handleTranscriptSlotChange}\n />\n </div>\n </div>\n <div\n class=\"message-scroller__overlay\"\n ref={element => {\n this.overlay = element;\n }}\n >\n <div class=\"message-scroller__overlay-stack\">\n <div class=\"message-scroller__interaction\">\n <slot name=\"interaction\" />\n </div>\n <div class=\"message-scroller__overlay-content\">\n <slot name=\"overlay\" />\n </div>\n </div>\n </div>\n {this.showScrollToLatest ? (\n <div class=\"message-scroller__control ds-control-elevation ds-control-elevation--md ds-control-elevation--press-scale\">\n <ds-tooltip label=\"Scroll to latest message\" side=\"top\" size=\"sm\">\n <ds-button-unfilled\n variant=\"icon\"\n icon=\"ChevronDown\"\n size=\"md\"\n rounded\n hasBorder={false}\n aria-label=\"Scroll to latest message\"\n onDsClick={() => void this.scrollToEnd()}\n />\n </ds-tooltip>\n </div>\n ) : null}\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["isMessageScrollerTranscriptReset","previous","current","length","previousElements","Set","some","element","has","pruneMessageScrollerTranscriptSet","known","currentElements","delete","scrollEdgeFadeCss","messageScrollerCss","LIVE_EDGE_THRESHOLD","MessageScroller","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","busy","autoFollow","defaultPosition","messagesLabel","showScrollToLatest","following","followReleased","releasePendingAtLiveEdge","atStart","programmatic","transcriptChildren","knownTranscriptElements","knownTurnAnchors","turnClearance","prependReconciliation","turnPositionGeneration","defaultPositionGeneration","transcriptResetPending","hasLoaded","handleTranscriptChange","getTranscriptChildren","transcriptReset","invalidateTranscriptWork","resetTranscriptTracking","resetTranscriptPositionState","trackTranscript","rememberFirstChildTop","scrollOverlayController","sync","scheduleDefaultPosition","hadKnownTranscript","size","previouslyKnown","appendedAnchor","reverse","find","reverseIndex","matches","index","slice","every","next","pruneTranscriptTracking","scheduleNewTurnPosition","firstKnownIndex","findIndex","newTranscript","filter","prepended","indexOf","viewport","preservedElement","activeTurnAnchor","isConnected","preservedTop","activeTurnAnchorViewportTop","firstChildViewportTop","undefined","reconcilePrependPosition","schedulePrependReconciliation","rememberActiveTurnAnchorTop","handleTranscriptSlotChange","handleScroll","atLiveEdge","isAtLiveEdge","nextAtStart","scrollTop","dsReachStart","emit","releaseFollow","handleSelectionChange","selection","document","getSelection","isCollapsed","anchorNode","el","contains","componentDidLoad","seedTranscriptBaseline","connectObservers","removeEventListener","addEventListener","connectedCallback","disconnectedCallback","disconnect","mutationObserver","scrollToMessage","id","message","Array","from","querySelectorAll","item","messageId","getAttribute","scrollIntoView","block","behavior","motionBehavior","scrollToStart","scrollTo","Boolean","scrollHeight","clientHeight","scrollToEnd","matchMedia","top","programmaticTimer","clearTimeout","setTimeout","clearActiveTurnAnchor","style","removeProperty","clear","elements","forEach","add","includes","generation","requestAnimationFrame","applyDefaultPosition","content","overlay","ScrollOverlayController","host","overlayContentSelector","onGeometryChange","handleContentGrowth","connect","MutationObserver","observe","childList","subtree","characterData","syncTurnClearance","nextHeight","first","getBoundingClientRect","assigned","transcriptSlot","assignedElements","assignedTranscript","queriedTranscript","closest","viewportTop","nextTop","pending","flatMap","map","componentOnReady","call","catch","promise","Promise","all","then","anchor","positionNewTurn","finishPositionNewTurn","viewportRect","anchorTop","customOffset","getComputedStyle","getPropertyValue","trim","offset","resolveCssLengthPx","max","Math","target","min","children","last","anchorRect","lastRect","contentAfterAnchor","bottom","clearance","ceil","setProperty","anchors","render","h","Host","key","class","ref","role","tabIndex","onScroll","onPointerDown","event","pointerType","onWheel","onKeyDown","onSlotchange","name","label","side","variant","icon","rounded","hasBorder","onDsClick"],"sources":["src/wc/components/MessageScroller/message-scroller-transcript.ts","src/wc/utils/scroll-edge-fade.css?tag=ds-message-scroller&encapsulation=scoped","src/wc/components/MessageScroller/MessageScroller.css?tag=ds-message-scroller&encapsulation=scoped","src/wc/components/MessageScroller/MessageScroller.tsx"],"sourcesContent":["/**\n * A transcript reset replaces the current baseline instead of appending or\n * prepending around surviving nodes. Emptying a populated transcript also\n * starts a reset that completes when its next baseline is supplied.\n */\nexport function isMessageScrollerTranscriptReset<T>(\n previous: readonly T[],\n current: readonly T[]\n): boolean {\n if (!previous.length) return false;\n if (!current.length) return true;\n const previousElements = new Set(previous);\n return !current.some(element => previousElements.has(element));\n}\n\n/** Keep identity tracking bounded to nodes in the current transcript. */\nexport function pruneMessageScrollerTranscriptSet<T>(known: Set<T>, current: readonly T[]): void {\n const currentElements = new Set(current);\n for (const element of known) {\n if (!currentElements.has(element)) known.delete(element);\n }\n}\n","/**\n * Scroll-edge alpha fade — the single edge-fade utility for overflow containers.\n * Masks scrolling content to transparent so flat surfaces, shell gradients, and\n * images show through.\n *\n * Static fades are the default (PanelNav intentionally keeps its bottom fade).\n * Add `.scroll-edge-fade--scroll-aware` to reveal/hide each configured edge from\n * the container's own scroll position without JavaScript. Browsers without CSS\n * scroll-driven animations retain the configured static fades.\n *\n * @see scroll-edge-fade.ts — `scrollEdgeFadeClassMap`, `isScrollAtEdge`, size helpers.\n */\n\n@property --ds-scroll-edge-fade-top {\n syntax: '<length-percentage>';\n inherits: false;\n /* eslint-disable-next-line compomo/length-zero-no-unit -- @property requires a unit-compatible initial value. */\n initial-value: 0px;\n}\n\n@property --ds-scroll-edge-fade-bottom {\n syntax: '<length-percentage>';\n inherits: false;\n /* eslint-disable-next-line compomo/length-zero-no-unit -- @property requires a unit-compatible initial value. */\n initial-value: 0px;\n}\n\n@property --ds-scroll-edge-fade-left {\n syntax: '<length-percentage>';\n inherits: false;\n /* eslint-disable-next-line compomo/length-zero-no-unit -- @property requires a unit-compatible initial value. */\n initial-value: 0px;\n}\n\n@property --ds-scroll-edge-fade-right {\n syntax: '<length-percentage>';\n inherits: false;\n /* eslint-disable-next-line compomo/length-zero-no-unit -- @property requires a unit-compatible initial value. */\n initial-value: 0px;\n}\n\n@keyframes ds-scroll-edge-fade-reveal-top {\n from {\n --ds-scroll-edge-fade-top: 0px;\n }\n to {\n --ds-scroll-edge-fade-top: var(--ds-scroll-edge-fade-target-top);\n }\n}\n\n@keyframes ds-scroll-edge-fade-reveal-bottom {\n from {\n --ds-scroll-edge-fade-bottom: var(--ds-scroll-edge-fade-target-bottom);\n }\n to {\n --ds-scroll-edge-fade-bottom: 0px;\n }\n}\n\n@keyframes ds-scroll-edge-fade-reveal-left {\n from {\n --ds-scroll-edge-fade-left: 0px;\n }\n to {\n --ds-scroll-edge-fade-left: var(--ds-scroll-edge-fade-target-left);\n }\n}\n\n@keyframes ds-scroll-edge-fade-reveal-right {\n from {\n --ds-scroll-edge-fade-right: var(--ds-scroll-edge-fade-target-right);\n }\n to {\n --ds-scroll-edge-fade-right: 0px;\n }\n}\n\n/* Mask gradients use #000 / transparent as alpha stops — not theme colors. */\n/* eslint-disable compomo/color-no-hex */\n\n.scroll-edge-fade {\n --ds-scroll-edge-fade-size: var(--dimension-size-600);\n --ds-scroll-edge-fade-reveal-distance: var(--dimension-size-800);\n --ds-scroll-edge-fade-target-top: 0px;\n --ds-scroll-edge-fade-target-bottom: 0px;\n --ds-scroll-edge-fade-target-left: 0px;\n --ds-scroll-edge-fade-target-right: 0px;\n --ds-scroll-edge-fade-top: var(--ds-scroll-edge-fade-target-top);\n --ds-scroll-edge-fade-bottom: var(--ds-scroll-edge-fade-target-bottom);\n --ds-scroll-edge-fade-left: var(--ds-scroll-edge-fade-target-left);\n --ds-scroll-edge-fade-right: var(--ds-scroll-edge-fade-target-right);\n --ds-scroll-edge-fade-block-mask: linear-gradient(\n to bottom,\n transparent 0,\n #000 var(--ds-scroll-edge-fade-top),\n #000 calc(100% - var(--ds-scroll-edge-fade-bottom)),\n transparent 100%\n );\n --ds-scroll-edge-fade-inline-mask: linear-gradient(\n to right,\n transparent 0,\n #000 var(--ds-scroll-edge-fade-left),\n #000 calc(100% - var(--ds-scroll-edge-fade-right)),\n transparent 100%\n );\n\n /* Intersecting the block and inline masks lets every edge compose correctly. */\n -webkit-mask-image: var(--ds-scroll-edge-fade-block-mask), var(--ds-scroll-edge-fade-inline-mask);\n mask-image: var(--ds-scroll-edge-fade-block-mask), var(--ds-scroll-edge-fade-inline-mask);\n -webkit-mask-composite: source-in;\n mask-composite: intersect;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n}\n\n.scroll-edge-fade--top {\n --ds-scroll-edge-fade-target-top: var(--ds-scroll-edge-fade-size);\n}\n\n.scroll-edge-fade--bottom {\n --ds-scroll-edge-fade-target-bottom: var(--ds-scroll-edge-fade-size);\n}\n\n.scroll-edge-fade--left {\n --ds-scroll-edge-fade-target-left: var(--ds-scroll-edge-fade-size);\n}\n\n.scroll-edge-fade--right {\n --ds-scroll-edge-fade-target-right: var(--ds-scroll-edge-fade-size);\n}\n\n/* Manual per-edge state remains available when scroll state already lives in JS. */\n.scroll-edge-fade--top-at-edge {\n --ds-scroll-edge-fade-target-top: 0px;\n}\n\n.scroll-edge-fade--bottom-at-edge {\n --ds-scroll-edge-fade-target-bottom: 0px;\n}\n\n.scroll-edge-fade--left-at-edge {\n --ds-scroll-edge-fade-target-left: 0px;\n}\n\n.scroll-edge-fade--right-at-edge {\n --ds-scroll-edge-fade-target-right: 0px;\n}\n\n@supports (animation-timeline: scroll()) {\n .scroll-edge-fade--scroll-aware {\n animation-name:\n ds-scroll-edge-fade-reveal-top, ds-scroll-edge-fade-reveal-bottom,\n ds-scroll-edge-fade-reveal-left, ds-scroll-edge-fade-reveal-right;\n /* eslint-disable-next-line compomo/declaration-property-value-disallowed-list -- scroll timelines require a nonzero sentinel duration; elapsed time is ignored. */\n animation-duration: 1ms;\n animation-timing-function: ease-in-out;\n animation-fill-mode: both;\n animation-timeline: scroll(self y), scroll(self y), scroll(self x), scroll(self x);\n animation-range:\n 0 var(--ds-scroll-edge-fade-reveal-distance),\n calc(100% - var(--ds-scroll-edge-fade-reveal-distance)) 100%,\n 0 var(--ds-scroll-edge-fade-reveal-distance),\n calc(100% - var(--ds-scroll-edge-fade-reveal-distance)) 100%;\n }\n\n @media (prefers-reduced-motion: reduce) {\n .scroll-edge-fade--scroll-aware {\n animation: none;\n }\n }\n}\n\n.scroll-edge-fade--at-end,\n.scroll-edge-fade--hidden {\n -webkit-mask-image: none;\n mask-image: none;\n}\n\n/**\n * Masks a long content element against a scrollport-relative block window.\n * The owner updates the start/end offsets as the scrollport moves. Keeping the\n * mask on the content instead of the overflow element leaves native scrollbars\n * outside the fade.\n */\n.scroll-edge-fade--block-window {\n --ds-scroll-edge-fade-window-start: 100%;\n --ds-scroll-edge-fade-window-end: 100%;\n\n -webkit-mask-image: linear-gradient(\n to bottom,\n #000 0,\n #000 var(--ds-scroll-edge-fade-window-start),\n transparent var(--ds-scroll-edge-fade-window-end)\n );\n mask-image: linear-gradient(\n to bottom,\n #000 0,\n #000 var(--ds-scroll-edge-fade-window-start),\n transparent var(--ds-scroll-edge-fade-window-end)\n );\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n}\n\n/* eslint-enable compomo/color-no-hex */\n","@import '../../styles/control-elevation.css';\n\n:host {\n --ds-message-scroller-anchor-offset: var(--dimension-space-800);\n\n display: block;\n width: 100%;\n height: 100%;\n min-height: 0;\n box-sizing: border-box;\n}\n\n.message-scroller {\n position: relative;\n width: 100%;\n height: 100%;\n min-height: 0;\n}\n\n.message-scroller__viewport {\n width: 100%;\n height: 100%;\n min-height: 0;\n overflow: auto;\n overflow-anchor: none;\n overscroll-behavior: contain;\n box-sizing: border-box;\n}\n\n.message-scroller__viewport:focus-visible {\n outline: var(--dimension-stroke-width-025) solid var(--color-border-bold-brand);\n outline-offset: calc(-1 * var(--dimension-stroke-width-025));\n}\n\n.message-scroller__content {\n display: flex;\n flex-direction: column;\n gap: var(--dimension-space-300);\n width: 100%;\n max-width: var(--ds-message-scroller-content-max-width, var(--dimension-panel-width-2xl));\n min-height: 100%;\n margin-inline: auto;\n padding-block-start: var(--dimension-space-200);\n padding-inline: var(--dimension-space-200);\n padding-block-end: max(\n calc(var(--dimension-space-200) + var(--ds-scroll-overlay-block-size, 0px)),\n var(--ds-message-scroller-turn-clearance, 0px)\n );\n box-sizing: border-box;\n}\n\n.message-scroller__overlay {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: var(--dimension-z-index-floating);\n}\n\n.message-scroller__overlay-stack {\n display: grid;\n width: 100%;\n}\n\n.message-scroller__interaction,\n.message-scroller__overlay-content {\n min-width: 0;\n}\n\n.message-scroller__control {\n position: absolute;\n bottom: calc(var(--ds-scroll-overlay-content-block-size, 0px) + var(--dimension-space-200));\n left: 50%;\n z-index: var(--dimension-z-index-floating);\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--dimension-radius-half);\n background: var(--color-background-transparent);\n transform: translateX(-50%);\n -webkit-backdrop-filter: blur(var(--effect-blur-sm));\n backdrop-filter: blur(var(--effect-blur-sm));\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Method,\n Prop,\n State,\n} from '@stencil/core';\nimport type { MessageScrollerPosition } from '../conversation-types';\nimport { ScrollOverlayController } from '../../utils/scroll-overlay-controller';\nimport { resolveCssLengthPx } from '../../utils/resolve-css-length-px';\nimport {\n isMessageScrollerTranscriptReset,\n pruneMessageScrollerTranscriptSet,\n} from './message-scroller-transcript';\n\nconst LIVE_EDGE_THRESHOLD = 24;\n\n@Component({\n tag: 'ds-message-scroller',\n styleUrl: 'MessageScroller.css',\n styleUrls: ['../../utils/scroll-edge-fade.css'],\n scoped: true,\n})\nexport class MessageScroller {\n @Element() el!: HTMLElement;\n\n @Prop() busy: boolean = false;\n @Prop() autoFollow: boolean = true;\n @Prop() defaultPosition: MessageScrollerPosition = 'last-anchor';\n @Prop() messagesLabel: string = 'Messages';\n\n @Event() dsReachStart!: EventEmitter<void>;\n\n @State() private showScrollToLatest = false;\n\n private viewport?: HTMLElement;\n private content?: HTMLElement;\n private overlay?: HTMLElement;\n private transcriptSlot?: HTMLSlotElement;\n private scrollOverlayController?: ScrollOverlayController;\n private mutationObserver?: MutationObserver;\n private following = true;\n private followReleased = false;\n private releasePendingAtLiveEdge = false;\n private atStart = false;\n private programmatic = false;\n private programmaticTimer?: ReturnType<typeof setTimeout>;\n private transcriptChildren: HTMLElement[] = [];\n private knownTranscriptElements = new Set<HTMLElement>();\n private knownTurnAnchors = new Set<HTMLElement>();\n private firstChildViewportTop?: number;\n private activeTurnAnchor?: HTMLElement;\n private activeTurnAnchorViewportTop?: number;\n private turnClearance = 0;\n private prependReconciliation = 0;\n private turnPositionGeneration = 0;\n private defaultPositionGeneration = 0;\n private transcriptResetPending = false;\n private hasLoaded = false;\n\n componentDidLoad() {\n this.hasLoaded = true;\n this.seedTranscriptBaseline();\n this.connectObservers();\n this.scheduleDefaultPosition();\n document.removeEventListener('selectionchange', this.handleSelectionChange);\n document.addEventListener('selectionchange', this.handleSelectionChange);\n }\n\n connectedCallback() {\n if (!this.hasLoaded) return;\n this.seedTranscriptBaseline();\n this.connectObservers();\n this.scheduleDefaultPosition();\n document.removeEventListener('selectionchange', this.handleSelectionChange);\n document.addEventListener('selectionchange', this.handleSelectionChange);\n }\n\n disconnectedCallback() {\n this.invalidateTranscriptWork();\n this.scrollOverlayController?.disconnect();\n this.scrollOverlayController = undefined;\n this.mutationObserver?.disconnect();\n this.mutationObserver = undefined;\n this.resetTranscriptTracking();\n this.resetTranscriptPositionState();\n this.transcriptResetPending = false;\n document.removeEventListener('selectionchange', this.handleSelectionChange);\n }\n\n @Method()\n async scrollToMessage(id: string): Promise<boolean> {\n const message = Array.from(\n this.el.querySelectorAll<HTMLElement & { messageId?: string }>('ds-message')\n ).find(item => item.messageId === id || item.getAttribute('message-id') === id);\n if (!message) return false;\n this.releasePendingAtLiveEdge = false;\n this.following = false;\n this.followReleased = true;\n this.showScrollToLatest = true;\n message.scrollIntoView({ block: 'start', behavior: this.motionBehavior() });\n return true;\n }\n\n @Method()\n async scrollToStart() {\n this.releasePendingAtLiveEdge = false;\n this.scrollTo(0);\n this.following = false;\n this.followReleased = true;\n this.showScrollToLatest = Boolean(\n this.viewport && this.viewport.scrollHeight > this.viewport.clientHeight\n );\n }\n\n @Method()\n async scrollToEnd() {\n this.releasePendingAtLiveEdge = false;\n this.following = true;\n this.followReleased = false;\n this.showScrollToLatest = false;\n this.scrollTo(this.viewport?.scrollHeight ?? 0);\n }\n\n private motionBehavior(): ScrollBehavior {\n return matchMedia('(prefers-reduced-motion: reduce)').matches ? 'auto' : 'smooth';\n }\n\n private scrollTo(top: number) {\n if (!this.viewport) return;\n this.programmatic = true;\n const behavior = this.motionBehavior();\n this.viewport.scrollTo({ top, behavior });\n if (this.programmaticTimer) clearTimeout(this.programmaticTimer);\n this.programmaticTimer = setTimeout(\n () => {\n this.programmatic = false;\n this.programmaticTimer = undefined;\n if (this.following) {\n this.viewport!.scrollTop = top;\n this.showScrollToLatest = false;\n }\n },\n behavior === 'smooth' ? 600 : 0\n );\n }\n\n private invalidateTranscriptWork() {\n this.prependReconciliation += 1;\n this.turnPositionGeneration += 1;\n this.defaultPositionGeneration += 1;\n if (this.programmaticTimer) clearTimeout(this.programmaticTimer);\n this.programmaticTimer = undefined;\n this.programmatic = false;\n }\n\n private clearActiveTurnAnchor() {\n this.activeTurnAnchor = undefined;\n this.activeTurnAnchorViewportTop = undefined;\n this.turnClearance = 0;\n this.el.style.removeProperty('--ds-message-scroller-turn-clearance');\n }\n\n private resetTranscriptTracking() {\n this.transcriptChildren = [];\n this.knownTranscriptElements.clear();\n this.knownTurnAnchors.clear();\n this.firstChildViewportTop = undefined;\n this.clearActiveTurnAnchor();\n }\n\n private resetTranscriptPositionState() {\n this.following = true;\n this.followReleased = false;\n this.releasePendingAtLiveEdge = false;\n this.atStart = false;\n this.showScrollToLatest = false;\n }\n\n private trackTranscript(elements: readonly HTMLElement[]) {\n elements.forEach(element => {\n this.knownTranscriptElements.add(element);\n if (element.matches('ds-message[scroll-anchor]')) {\n this.knownTurnAnchors.add(element);\n }\n });\n }\n\n private seedTranscriptBaseline() {\n this.resetTranscriptTracking();\n this.transcriptChildren = this.getTranscriptChildren();\n this.trackTranscript(this.transcriptChildren);\n this.transcriptResetPending = false;\n this.rememberFirstChildTop();\n }\n\n private pruneTranscriptTracking(current: readonly HTMLElement[]) {\n pruneMessageScrollerTranscriptSet(this.knownTranscriptElements, current);\n pruneMessageScrollerTranscriptSet(this.knownTurnAnchors, current);\n if (this.activeTurnAnchor && !current.includes(this.activeTurnAnchor)) {\n this.clearActiveTurnAnchor();\n }\n }\n\n private scheduleDefaultPosition() {\n const generation = ++this.defaultPositionGeneration;\n requestAnimationFrame(() => {\n if (generation !== this.defaultPositionGeneration || !this.el.isConnected) return;\n this.applyDefaultPosition();\n });\n }\n\n private connectObservers() {\n if (!this.viewport || !this.content || !this.overlay) return;\n this.scrollOverlayController?.disconnect();\n this.mutationObserver?.disconnect();\n this.scrollOverlayController = new ScrollOverlayController({\n host: this.el,\n viewport: this.viewport,\n content: this.content,\n overlay: this.overlay,\n overlayContentSelector: '.message-scroller__overlay-stack',\n onGeometryChange: () => this.handleContentGrowth(),\n });\n this.scrollOverlayController.connect();\n this.mutationObserver = new MutationObserver(() => {\n this.handleTranscriptChange();\n this.handleContentGrowth();\n });\n this.mutationObserver.observe(this.el, {\n childList: true,\n subtree: true,\n characterData: true,\n });\n }\n\n private handleContentGrowth() {\n if (!this.viewport) return;\n this.syncTurnClearance();\n const nextHeight = this.viewport.scrollHeight;\n if (this.autoFollow && this.following && !this.followReleased) {\n this.viewport.scrollTop = nextHeight;\n }\n if (this.releasePendingAtLiveEdge && !this.isAtLiveEdge()) {\n this.releasePendingAtLiveEdge = false;\n }\n this.showScrollToLatest = !this.following && !this.isAtLiveEdge();\n this.scrollOverlayController?.sync();\n }\n\n private rememberFirstChildTop() {\n if (!this.viewport) return;\n const first = this.getTranscriptChildren()[0];\n this.firstChildViewportTop = first\n ? first.getBoundingClientRect().top - this.viewport.getBoundingClientRect().top\n : undefined;\n }\n\n private getTranscriptChildren(): HTMLElement[] {\n const assigned = this.transcriptSlot?.assignedElements() ?? [];\n const assignedTranscript = assigned.filter(\n (element): element is HTMLElement =>\n element instanceof HTMLElement &&\n (element.matches('ds-message') || element.matches('ds-agent-response'))\n );\n const queriedTranscript = Array.from(\n this.el.querySelectorAll<HTMLElement>('ds-message, ds-agent-response')\n ).filter(element => {\n if (element.closest('.message-scroller__interaction, .message-scroller__overlay-content')) {\n return false;\n }\n if (element.matches('ds-agent-response')) return true;\n return !element.closest('ds-agent-response');\n });\n return queriedTranscript.length > assignedTranscript.length\n ? queriedTranscript\n : assignedTranscript;\n }\n\n private handleTranscriptChange = () => {\n const current = this.getTranscriptChildren();\n const previous = this.transcriptChildren;\n const transcriptReset =\n isMessageScrollerTranscriptReset(previous, current) ||\n (this.transcriptResetPending && current.length > 0);\n if (transcriptReset) {\n this.invalidateTranscriptWork();\n this.resetTranscriptTracking();\n this.resetTranscriptPositionState();\n this.transcriptChildren = current;\n this.trackTranscript(current);\n this.transcriptResetPending = current.length === 0;\n this.rememberFirstChildTop();\n this.scrollOverlayController?.sync();\n if (current.length) this.scheduleDefaultPosition();\n return;\n }\n\n const hadKnownTranscript = this.knownTranscriptElements.size > 0;\n const previouslyKnown = new Set(this.knownTranscriptElements);\n const appendedAnchor = [...current].reverse().find((element, reverseIndex) => {\n if (!element.matches('ds-message[scroll-anchor]') || this.knownTurnAnchors.has(element)) {\n return false;\n }\n const index = current.length - reverseIndex - 1;\n return current.slice(index + 1).every(next => !this.knownTranscriptElements.has(next));\n });\n this.trackTranscript(current);\n this.pruneTranscriptTracking(current);\n if (!previous.length) {\n this.transcriptChildren = current;\n if (appendedAnchor && hadKnownTranscript) {\n this.scheduleNewTurnPosition(appendedAnchor);\n }\n return;\n }\n\n const firstKnownIndex = current.findIndex(element => previouslyKnown.has(element));\n const newTranscript = current.filter(element => !previouslyKnown.has(element));\n const prepended =\n (current.length > previous.length &&\n previous.every(\n (element, index) => current[current.length - previous.length + index] === element\n )) ||\n (!appendedAnchor &&\n newTranscript.length > 0 &&\n firstKnownIndex > 0 &&\n newTranscript.every(element => current.indexOf(element) < firstKnownIndex));\n\n this.transcriptChildren = current;\n if (prepended) {\n if (this.viewport) {\n const preservedElement = this.activeTurnAnchor?.isConnected\n ? this.activeTurnAnchor\n : previous[0];\n const preservedTop = this.activeTurnAnchor?.isConnected\n ? this.activeTurnAnchorViewportTop\n : this.firstChildViewportTop;\n if (preservedElement && preservedTop !== undefined) {\n this.reconcilePrependPosition(preservedElement, preservedTop);\n this.schedulePrependReconciliation(preservedElement, preservedTop, newTranscript);\n }\n }\n this.rememberFirstChildTop();\n this.rememberActiveTurnAnchorTop();\n this.scrollOverlayController?.sync();\n return;\n }\n if (appendedAnchor) {\n this.scheduleNewTurnPosition(appendedAnchor);\n }\n };\n\n private reconcilePrependPosition(element: HTMLElement, viewportTop: number) {\n if (!this.viewport || !element.isConnected) return;\n const nextTop = element.getBoundingClientRect().top - this.viewport.getBoundingClientRect().top;\n this.viewport.scrollTop += nextTop - viewportTop;\n }\n\n private schedulePrependReconciliation(\n element: HTMLElement,\n viewportTop: number,\n prepended: HTMLElement[]\n ) {\n const generation = ++this.prependReconciliation;\n // Prepended custom elements can gain height after their child-list mutation.\n // Reconcile against the original coordinate after their layouts settle.\n const pending = prepended\n .flatMap(item => [item, ...Array.from(item.querySelectorAll<HTMLElement>('*'))])\n .map(item => {\n const componentOnReady = (\n item as HTMLElement & { componentOnReady?: () => Promise<unknown> }\n ).componentOnReady;\n return componentOnReady ? componentOnReady.call(item).catch(() => undefined) : null;\n })\n .filter((promise): promise is Promise<unknown> => Boolean(promise));\n\n void Promise.all(pending).then(() => {\n requestAnimationFrame(() => {\n if (generation !== this.prependReconciliation) return;\n this.reconcilePrependPosition(element, viewportTop);\n requestAnimationFrame(() => {\n if (generation !== this.prependReconciliation) return;\n this.reconcilePrependPosition(element, viewportTop);\n this.rememberFirstChildTop();\n this.rememberActiveTurnAnchorTop();\n this.scrollOverlayController?.sync();\n });\n });\n });\n }\n\n private handleTranscriptSlotChange = () => this.handleTranscriptChange();\n\n private scheduleNewTurnPosition(anchor: HTMLElement) {\n const generation = ++this.turnPositionGeneration;\n requestAnimationFrame(() => {\n if (generation !== this.turnPositionGeneration || !anchor.isConnected || !this.viewport) {\n return;\n }\n this.positionNewTurn(anchor, generation);\n });\n }\n\n private positionNewTurn(anchor: HTMLElement, generation: number) {\n if (generation !== this.turnPositionGeneration || !this.viewport || !anchor.isConnected) return;\n this.activeTurnAnchor = anchor;\n this.syncTurnClearance();\n requestAnimationFrame(() => {\n if (generation !== this.turnPositionGeneration) return;\n this.finishPositionNewTurn(anchor, generation);\n });\n }\n\n private finishPositionNewTurn(anchor: HTMLElement, generation: number) {\n if (generation !== this.turnPositionGeneration || !this.viewport || !anchor.isConnected) {\n return;\n }\n const viewportRect = this.viewport.getBoundingClientRect();\n const anchorTop =\n anchor.getBoundingClientRect().top - viewportRect.top + this.viewport.scrollTop;\n const customOffset = getComputedStyle(this.el)\n .getPropertyValue('--ds-message-scroller-anchor-offset')\n .trim();\n const offset = resolveCssLengthPx(customOffset, 'var(--dimension-space-800)');\n const max = Math.max(this.viewport.scrollHeight - this.viewport.clientHeight, 0);\n const target = Math.min(Math.max(anchorTop - offset, 0), max);\n this.following = max - target <= LIVE_EDGE_THRESHOLD;\n this.followReleased = !this.following;\n this.showScrollToLatest = !this.following;\n this.programmatic = true;\n this.viewport.scrollTop = target;\n requestAnimationFrame(() => {\n if (generation !== this.turnPositionGeneration) return;\n this.programmatic = false;\n this.following = this.isAtLiveEdge();\n this.followReleased = !this.following;\n this.showScrollToLatest = !this.following;\n this.rememberFirstChildTop();\n this.rememberActiveTurnAnchorTop();\n });\n this.scrollOverlayController?.sync();\n }\n\n private rememberActiveTurnAnchorTop() {\n if (!this.viewport || !this.activeTurnAnchor?.isConnected) return;\n this.activeTurnAnchorViewportTop =\n this.activeTurnAnchor.getBoundingClientRect().top - this.viewport.getBoundingClientRect().top;\n }\n\n private syncTurnClearance() {\n if (!this.viewport || !this.activeTurnAnchor?.isConnected) return;\n const children = this.getTranscriptChildren();\n const last = children[children.length - 1];\n if (!last) return;\n const anchorRect = this.activeTurnAnchor.getBoundingClientRect();\n const lastRect = last.getBoundingClientRect();\n const customOffset = getComputedStyle(this.el)\n .getPropertyValue('--ds-message-scroller-anchor-offset')\n .trim();\n const offset = resolveCssLengthPx(customOffset, 'var(--dimension-space-800)');\n const contentAfterAnchor = Math.max(lastRect.bottom - anchorRect.top, 0);\n const clearance = Math.max(\n Math.ceil(this.viewport.clientHeight - offset - contentAfterAnchor),\n 0\n );\n if (clearance === this.turnClearance) return;\n this.turnClearance = clearance;\n this.el.style.setProperty('--ds-message-scroller-turn-clearance', `${clearance}px`);\n }\n\n private applyDefaultPosition() {\n if (!this.viewport) return;\n this.releasePendingAtLiveEdge = false;\n if (this.defaultPosition === 'start') {\n this.viewport.scrollTop = 0;\n this.following = false;\n this.followReleased = true;\n this.showScrollToLatest = this.viewport.scrollHeight > this.viewport.clientHeight;\n this.scrollOverlayController?.sync();\n return;\n }\n if (this.defaultPosition === 'last-anchor') {\n const anchors = this.el.querySelectorAll<HTMLElement>('ds-message[scroll-anchor]');\n const last = anchors.item(anchors.length - 1);\n if (last) {\n last.scrollIntoView({ block: 'start' });\n this.following = this.isAtLiveEdge();\n this.followReleased = !this.following;\n this.showScrollToLatest = !this.following;\n this.scrollOverlayController?.sync();\n return;\n }\n }\n this.viewport.scrollTop = this.viewport.scrollHeight;\n this.following = true;\n this.followReleased = false;\n this.showScrollToLatest = false;\n this.scrollOverlayController?.sync();\n }\n\n private isAtLiveEdge(): boolean {\n if (!this.viewport) return true;\n return (\n this.viewport.scrollHeight - this.viewport.clientHeight - this.viewport.scrollTop <=\n LIVE_EDGE_THRESHOLD\n );\n }\n\n private handleScroll = () => {\n if (!this.viewport) return;\n this.scrollOverlayController?.sync();\n this.rememberFirstChildTop();\n this.rememberActiveTurnAnchorTop();\n if (this.programmatic) return;\n const atLiveEdge = this.isAtLiveEdge();\n if (this.releasePendingAtLiveEdge && atLiveEdge) {\n // A scroll event queued by the previous auto-follow can arrive after\n // reader input. Keep that stale event from restoring follow mode.\n this.following = false;\n this.followReleased = true;\n this.showScrollToLatest = false;\n return;\n }\n this.releasePendingAtLiveEdge = false;\n this.following = atLiveEdge;\n this.followReleased = !this.following;\n this.showScrollToLatest = !this.following;\n const nextAtStart = this.viewport.scrollTop <= LIVE_EDGE_THRESHOLD;\n if (nextAtStart && !this.atStart) this.dsReachStart.emit();\n this.atStart = nextAtStart;\n };\n\n private releaseFollow = () => {\n this.prependReconciliation += 1;\n this.releasePendingAtLiveEdge = this.isAtLiveEdge();\n this.following = false;\n this.followReleased = true;\n this.showScrollToLatest = !this.releasePendingAtLiveEdge;\n };\n\n private handleSelectionChange = () => {\n const selection = document.getSelection();\n if (\n selection &&\n !selection.isCollapsed &&\n selection.anchorNode &&\n this.el.contains(selection.anchorNode)\n ) {\n this.releaseFollow();\n }\n };\n\n render() {\n return (\n <Host>\n <div class=\"message-scroller\">\n <div\n class=\"message-scroller__viewport\"\n ref={element => {\n this.viewport = element;\n }}\n role=\"region\"\n aria-label={this.messagesLabel}\n tabIndex={0}\n onScroll={this.handleScroll}\n onPointerDown={(event: PointerEvent) => {\n if (event.pointerType === 'touch') this.releaseFollow();\n }}\n onWheel={this.releaseFollow}\n onKeyDown={(event: KeyboardEvent) => {\n if (\n ['ArrowUp', 'ArrowDown', 'PageUp', 'PageDown', 'Home', 'End', ' '].includes(\n event.key\n )\n ) {\n this.releaseFollow();\n }\n }}\n >\n <div\n class=\"message-scroller__content scroll-edge-fade--block-window\"\n ref={element => {\n this.content = element;\n }}\n role=\"log\"\n aria-live=\"polite\"\n aria-relevant=\"additions\"\n aria-busy={this.busy ? 'true' : undefined}\n >\n <slot\n ref={element => {\n this.transcriptSlot = element;\n }}\n onSlotchange={this.handleTranscriptSlotChange}\n />\n </div>\n </div>\n <div\n class=\"message-scroller__overlay\"\n ref={element => {\n this.overlay = element;\n }}\n >\n <div class=\"message-scroller__overlay-stack\">\n <div class=\"message-scroller__interaction\">\n <slot name=\"interaction\" />\n </div>\n <div class=\"message-scroller__overlay-content\">\n <slot name=\"overlay\" />\n </div>\n </div>\n </div>\n {this.showScrollToLatest ? (\n <div class=\"message-scroller__control ds-control-elevation ds-control-elevation--md ds-control-elevation--press-scale\">\n <ds-tooltip label=\"Scroll to latest message\" side=\"top\" size=\"sm\">\n <ds-button-unfilled\n variant=\"icon\"\n icon=\"ChevronDown\"\n size=\"md\"\n rounded\n hasBorder={false}\n aria-label=\"Scroll to latest message\"\n onDsClick={() => void this.scrollToEnd()}\n />\n </ds-tooltip>\n </div>\n ) : null}\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{M as
|
|
1
|
+
import{M as s,d as o}from"./p-Dfs98tpL.js";const t=s;const p=o;export{t as DsMobileSheetNav,p as defineCustomElement};
|
|
2
2
|
//# sourceMappingURL=ds-mobile-sheet-nav.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{P as o,d as s}from"./p-
|
|
1
|
+
import{P as o,d as s}from"./p-CdGXzRP8.js";const t=o;const p=s;export{t as DsPagination,p as defineCustomElement};
|
|
2
2
|
//# sourceMappingURL=ds-pagination.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["scrollEdgeFadeCss","scrollOverlayCss","ScrollOverlay","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","handleScroll","viewport","controller","sync","dsScroll","emit","scrollTop","scrollHeight","clientHeight","componentDidLoad","content","overlay","ScrollOverlayController","host","el","connect","disconnectedCallback","disconnect","scrollToStart","scrollTo","top","behavior","scrollToEnd","refreshOverlay","render","labelled","Boolean","scrollLabel","trim","h","Host","key","class","ref","element","role","undefined","tabIndex","onScroll","name"],"sources":["src/wc/utils/scroll-edge-fade.css?tag=ds-scroll-overlay&encapsulation=scoped","src/wc/components/ScrollOverlay/ScrollOverlay.css?tag=ds-scroll-overlay&encapsulation=scoped","src/wc/components/ScrollOverlay/ScrollOverlay.tsx"],"sourcesContent":["/**\n * Scroll-edge alpha fade — the single edge-fade utility for overflow containers.\n * Masks scrolling content to transparent so flat surfaces, shell gradients, and\n * images show through.\n *\n * Static fades are the default (PanelNav intentionally keeps its bottom fade).\n * Add `.scroll-edge-fade--scroll-aware` to reveal/hide each configured edge from\n * the container's own scroll position without JavaScript. Browsers without CSS\n * scroll-driven animations retain the configured static fades.\n *\n * @see scroll-edge-fade.ts — `scrollEdgeFadeClassMap`, `isScrollAtEdge`, size helpers.\n */\n\n@property --ds-scroll-edge-fade-top {\n syntax: '<length-percentage>';\n inherits: false;\n /* stylelint-disable-next-line length-zero-no-unit -- @property requires a unit-compatible initial value. */\n initial-value: 0px;\n}\n\n@property --ds-scroll-edge-fade-bottom {\n syntax: '<length-percentage>';\n inherits: false;\n /* stylelint-disable-next-line length-zero-no-unit -- @property requires a unit-compatible initial value. */\n initial-value: 0px;\n}\n\n@property --ds-scroll-edge-fade-left {\n syntax: '<length-percentage>';\n inherits: false;\n /* stylelint-disable-next-line length-zero-no-unit -- @property requires a unit-compatible initial value. */\n initial-value: 0px;\n}\n\n@property --ds-scroll-edge-fade-right {\n syntax: '<length-percentage>';\n inherits: false;\n /* stylelint-disable-next-line length-zero-no-unit -- @property requires a unit-compatible initial value. */\n initial-value: 0px;\n}\n\n@keyframes ds-scroll-edge-fade-reveal-top {\n from {\n --ds-scroll-edge-fade-top: 0px;\n }\n to {\n --ds-scroll-edge-fade-top: var(--ds-scroll-edge-fade-target-top);\n }\n}\n\n@keyframes ds-scroll-edge-fade-reveal-bottom {\n from {\n --ds-scroll-edge-fade-bottom: var(--ds-scroll-edge-fade-target-bottom);\n }\n to {\n --ds-scroll-edge-fade-bottom: 0px;\n }\n}\n\n@keyframes ds-scroll-edge-fade-reveal-left {\n from {\n --ds-scroll-edge-fade-left: 0px;\n }\n to {\n --ds-scroll-edge-fade-left: var(--ds-scroll-edge-fade-target-left);\n }\n}\n\n@keyframes ds-scroll-edge-fade-reveal-right {\n from {\n --ds-scroll-edge-fade-right: var(--ds-scroll-edge-fade-target-right);\n }\n to {\n --ds-scroll-edge-fade-right: 0px;\n }\n}\n\n/* Mask gradients use #000 / transparent as alpha stops — not theme colors. */\n/* stylelint-disable color-no-hex */\n\n.scroll-edge-fade {\n --ds-scroll-edge-fade-size: var(--dimension-size-600);\n --ds-scroll-edge-fade-reveal-distance: var(--dimension-size-800);\n --ds-scroll-edge-fade-target-top: 0px;\n --ds-scroll-edge-fade-target-bottom: 0px;\n --ds-scroll-edge-fade-target-left: 0px;\n --ds-scroll-edge-fade-target-right: 0px;\n --ds-scroll-edge-fade-top: var(--ds-scroll-edge-fade-target-top);\n --ds-scroll-edge-fade-bottom: var(--ds-scroll-edge-fade-target-bottom);\n --ds-scroll-edge-fade-left: var(--ds-scroll-edge-fade-target-left);\n --ds-scroll-edge-fade-right: var(--ds-scroll-edge-fade-target-right);\n --ds-scroll-edge-fade-block-mask: linear-gradient(\n to bottom,\n transparent 0,\n #000 var(--ds-scroll-edge-fade-top),\n #000 calc(100% - var(--ds-scroll-edge-fade-bottom)),\n transparent 100%\n );\n --ds-scroll-edge-fade-inline-mask: linear-gradient(\n to right,\n transparent 0,\n #000 var(--ds-scroll-edge-fade-left),\n #000 calc(100% - var(--ds-scroll-edge-fade-right)),\n transparent 100%\n );\n\n /* Intersecting the block and inline masks lets every edge compose correctly. */\n -webkit-mask-image: var(--ds-scroll-edge-fade-block-mask), var(--ds-scroll-edge-fade-inline-mask);\n mask-image: var(--ds-scroll-edge-fade-block-mask), var(--ds-scroll-edge-fade-inline-mask);\n -webkit-mask-composite: source-in;\n mask-composite: intersect;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n}\n\n.scroll-edge-fade--top {\n --ds-scroll-edge-fade-target-top: var(--ds-scroll-edge-fade-size);\n}\n\n.scroll-edge-fade--bottom {\n --ds-scroll-edge-fade-target-bottom: var(--ds-scroll-edge-fade-size);\n}\n\n.scroll-edge-fade--left {\n --ds-scroll-edge-fade-target-left: var(--ds-scroll-edge-fade-size);\n}\n\n.scroll-edge-fade--right {\n --ds-scroll-edge-fade-target-right: var(--ds-scroll-edge-fade-size);\n}\n\n/* Manual per-edge state remains available when scroll state already lives in JS. */\n.scroll-edge-fade--top-at-edge {\n --ds-scroll-edge-fade-target-top: 0px;\n}\n\n.scroll-edge-fade--bottom-at-edge {\n --ds-scroll-edge-fade-target-bottom: 0px;\n}\n\n.scroll-edge-fade--left-at-edge {\n --ds-scroll-edge-fade-target-left: 0px;\n}\n\n.scroll-edge-fade--right-at-edge {\n --ds-scroll-edge-fade-target-right: 0px;\n}\n\n@supports (animation-timeline: scroll()) {\n .scroll-edge-fade--scroll-aware {\n animation-name:\n ds-scroll-edge-fade-reveal-top, ds-scroll-edge-fade-reveal-bottom,\n ds-scroll-edge-fade-reveal-left, ds-scroll-edge-fade-reveal-right;\n /* stylelint-disable-next-line declaration-property-value-disallowed-list -- scroll timelines require a nonzero sentinel duration; elapsed time is ignored. */\n animation-duration: 1ms;\n animation-timing-function: ease-in-out;\n animation-fill-mode: both;\n animation-timeline: scroll(self y), scroll(self y), scroll(self x), scroll(self x);\n animation-range:\n 0 var(--ds-scroll-edge-fade-reveal-distance),\n calc(100% - var(--ds-scroll-edge-fade-reveal-distance)) 100%,\n 0 var(--ds-scroll-edge-fade-reveal-distance),\n calc(100% - var(--ds-scroll-edge-fade-reveal-distance)) 100%;\n }\n\n @media (prefers-reduced-motion: reduce) {\n .scroll-edge-fade--scroll-aware {\n animation: none;\n }\n }\n}\n\n.scroll-edge-fade--at-end,\n.scroll-edge-fade--hidden {\n -webkit-mask-image: none;\n mask-image: none;\n}\n\n/**\n * Masks a long content element against a scrollport-relative block window.\n * The owner updates the start/end offsets as the scrollport moves. Keeping the\n * mask on the content instead of the overflow element leaves native scrollbars\n * outside the fade.\n */\n.scroll-edge-fade--block-window {\n --ds-scroll-edge-fade-window-start: 100%;\n --ds-scroll-edge-fade-window-end: 100%;\n\n -webkit-mask-image: linear-gradient(\n to bottom,\n #000 0,\n #000 var(--ds-scroll-edge-fade-window-start),\n transparent var(--ds-scroll-edge-fade-window-end)\n );\n mask-image: linear-gradient(\n to bottom,\n #000 0,\n #000 var(--ds-scroll-edge-fade-window-start),\n transparent var(--ds-scroll-edge-fade-window-end)\n );\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n}\n\n/* stylelint-enable color-no-hex */\n",":host {\n display: block;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n box-sizing: border-box;\n}\n\n.scroll-overlay {\n position: relative;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n}\n\n.scroll-overlay__viewport {\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n overflow: auto;\n overscroll-behavior: contain;\n box-sizing: border-box;\n}\n\n.scroll-overlay__viewport:focus-visible {\n outline: var(--dimension-stroke-width-025) solid var(--color-border-bold-brand);\n outline-offset: calc(-1 * var(--dimension-stroke-width-025));\n}\n\n.scroll-overlay__content {\n display: flex;\n flex-direction: column;\n min-height: 100%;\n padding-block-end: var(--ds-scroll-overlay-block-size, 0);\n box-sizing: border-box;\n}\n\n.scroll-overlay__body {\n display: grid;\n grid-template-columns: minmax(0, 1fr);\n flex: 1 0 auto;\n min-height: 0;\n}\n\n.scroll-overlay__overlay {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: var(--dimension-z-index-floating);\n}\n","import { Component, Element, Event, EventEmitter, h, Host, Method, Prop } from '@stencil/core';\nimport { ScrollOverlayController } from '../../utils/scroll-overlay-controller';\n\nexport interface ScrollOverlayScrollDetail {\n scrollTop: number;\n scrollHeight: number;\n clientHeight: number;\n}\n\n@Component({\n tag: 'ds-scroll-overlay',\n styleUrl: 'ScrollOverlay.css',\n styleUrls: ['../../utils/scroll-edge-fade.css'],\n scoped: true,\n})\nexport class ScrollOverlay {\n @Element() el!: HTMLElement;\n\n /** Optional accessible name. When provided, the scrollport is a focusable region. */\n @Prop() scrollLabel: string | undefined;\n\n /** Reports scroll position without exposing the internal scrollport element. */\n @Event() dsScroll!: EventEmitter<ScrollOverlayScrollDetail>;\n\n private viewport?: HTMLElement;\n private content?: HTMLElement;\n private overlay?: HTMLElement;\n private controller?: ScrollOverlayController;\n\n componentDidLoad(): void {\n if (!this.viewport || !this.content || !this.overlay) return;\n this.controller = new ScrollOverlayController({\n host: this.el,\n viewport: this.viewport,\n content: this.content,\n overlay: this.overlay,\n });\n this.controller.connect();\n }\n\n disconnectedCallback(): void {\n this.controller?.disconnect();\n }\n\n /** Move the owned scrollport to its beginning. */\n @Method()\n async scrollToStart(): Promise<void> {\n this.viewport?.scrollTo({ top: 0, behavior: 'auto' });\n this.controller?.sync();\n }\n\n /** Move the owned scrollport to its live end. */\n @Method()\n async scrollToEnd(): Promise<void> {\n this.viewport?.scrollTo({ top: this.viewport.scrollHeight, behavior: 'auto' });\n this.controller?.sync();\n }\n\n /** Re-measure footer geometry after an imperative slotted-content update. */\n @Method()\n async refreshOverlay(): Promise<void> {\n this.controller?.sync();\n }\n\n private handleScroll = (): void => {\n if (!this.viewport) return;\n this.controller?.sync();\n this.dsScroll.emit({\n scrollTop: this.viewport.scrollTop,\n scrollHeight: this.viewport.scrollHeight,\n clientHeight: this.viewport.clientHeight,\n });\n };\n\n render() {\n const labelled = Boolean(this.scrollLabel?.trim());\n return (\n <Host>\n <div class=\"scroll-overlay\">\n <div\n class=\"scroll-overlay__viewport\"\n ref={element => {\n this.viewport = element;\n }}\n role={labelled ? 'region' : undefined}\n aria-label={labelled ? this.scrollLabel : undefined}\n tabIndex={labelled ? 0 : undefined}\n onScroll={this.handleScroll}\n >\n <div\n class=\"scroll-overlay__content scroll-edge-fade--block-window\"\n ref={element => {\n this.content = element;\n }}\n >\n <div class=\"scroll-overlay__body\">\n <slot />\n </div>\n </div>\n </div>\n <div\n class=\"scroll-overlay__overlay\"\n ref={element => {\n this.overlay = element;\n }}\n >\n <slot name=\"overlay\" />\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"iGAAA,MAAMA,EAAoB,IAAM,u+ICAhC,MAAMC,EAAmB,IAAM,u+B,MCelBC,EAAaC,EAAA,MAAAD,UAAAE,EAN1B,WAAAC,CAAAC,G,+EAuDUC,KAAAC,aAAe,KACrB,IAAKD,KAAKE,SAAU,OACpBF,KAAKG,YAAYC,OACjBJ,KAAKK,SAASC,KAAK,CACjBC,UAAWP,KAAKE,SAASK,UACzBC,aAAcR,KAAKE,SAASM,aAC5BC,aAAcT,KAAKE,SAASO,cAC5B,CAyCL,CAnFC,gBAAAC,GACE,IAAKV,KAAKE,WAAaF,KAAKW,UAAYX,KAAKY,QAAS,OACtDZ,KAAKG,WAAa,IAAIU,EAAwB,CAC5CC,KAAMd,KAAKe,GACXb,SAAUF,KAAKE,SACfS,QAASX,KAAKW,QACdC,QAASZ,KAAKY,UAEhBZ,KAAKG,WAAWa,S,CAGlB,oBAAAC,GACEjB,KAAKG,YAAYe,Y,CAKnB,mBAAMC,GACJnB,KAAKE,UAAUkB,SAAS,CAAEC,IAAK,EAAGC,SAAU,SAC5CtB,KAAKG,YAAYC,M,CAKnB,iBAAMmB,GACJvB,KAAKE,UAAUkB,SAAS,CAAEC,IAAKrB,KAAKE,SAASM,aAAcc,SAAU,SACrEtB,KAAKG,YAAYC,M,CAKnB,oBAAMoB,GACJxB,KAAKG,YAAYC,M,CAanB,MAAAqB,GACE,MAAMC,EAAWC,QAAQ3B,KAAK4B,aAAaC,QAC3C,OACEC,EAACC,EAAI,CAAAC,IAAA,4CACHF,EAAA,OAAAE,IAAA,2CAAKC,MAAM,kBACTH,EAAA,OAAAE,IAAA,2CACEC,MAAM,2BACNC,IAAKC,IACHnC,KAAKE,SAAWiC,CAAO,EAEzBC,KAAMV,EAAW,SAAWW,UAAS,aACzBX,EAAW1B,KAAK4B,YAAcS,UAC1CC,SAAUZ,EAAW,EAAIW,UACzBE,SAAUvC,KAAKC,cAEf6B,EAAA,OAAAE,IAAA,2CACEC,MAAM,yDACNC,IAAKC,IACHnC,KAAKW,QAAUwB,CAAO,GAGxBL,EAAA,OAAAE,IAAA,2CAAKC,MAAM,wBACTH,EAAA,QAAAE,IAAA,gDAINF,EAAA,OAAAE,IAAA,2CACEC,MAAM,0BACNC,IAAKC,IACHnC,KAAKY,QAAUuB,CAAO,GAGxBL,EAAA,QAAAE,IAAA,2CAAMQ,KAAK,c","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["scrollEdgeFadeCss","scrollOverlayCss","ScrollOverlay","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","handleScroll","viewport","controller","sync","dsScroll","emit","scrollTop","scrollHeight","clientHeight","componentDidLoad","content","overlay","ScrollOverlayController","host","el","connect","disconnectedCallback","disconnect","scrollToStart","scrollTo","top","behavior","scrollToEnd","refreshOverlay","render","labelled","Boolean","scrollLabel","trim","h","Host","key","class","ref","element","role","undefined","tabIndex","onScroll","name"],"sources":["src/wc/utils/scroll-edge-fade.css?tag=ds-scroll-overlay&encapsulation=scoped","src/wc/components/ScrollOverlay/ScrollOverlay.css?tag=ds-scroll-overlay&encapsulation=scoped","src/wc/components/ScrollOverlay/ScrollOverlay.tsx"],"sourcesContent":["/**\n * Scroll-edge alpha fade — the single edge-fade utility for overflow containers.\n * Masks scrolling content to transparent so flat surfaces, shell gradients, and\n * images show through.\n *\n * Static fades are the default (PanelNav intentionally keeps its bottom fade).\n * Add `.scroll-edge-fade--scroll-aware` to reveal/hide each configured edge from\n * the container's own scroll position without JavaScript. Browsers without CSS\n * scroll-driven animations retain the configured static fades.\n *\n * @see scroll-edge-fade.ts — `scrollEdgeFadeClassMap`, `isScrollAtEdge`, size helpers.\n */\n\n@property --ds-scroll-edge-fade-top {\n syntax: '<length-percentage>';\n inherits: false;\n /* eslint-disable-next-line compomo/length-zero-no-unit -- @property requires a unit-compatible initial value. */\n initial-value: 0px;\n}\n\n@property --ds-scroll-edge-fade-bottom {\n syntax: '<length-percentage>';\n inherits: false;\n /* eslint-disable-next-line compomo/length-zero-no-unit -- @property requires a unit-compatible initial value. */\n initial-value: 0px;\n}\n\n@property --ds-scroll-edge-fade-left {\n syntax: '<length-percentage>';\n inherits: false;\n /* eslint-disable-next-line compomo/length-zero-no-unit -- @property requires a unit-compatible initial value. */\n initial-value: 0px;\n}\n\n@property --ds-scroll-edge-fade-right {\n syntax: '<length-percentage>';\n inherits: false;\n /* eslint-disable-next-line compomo/length-zero-no-unit -- @property requires a unit-compatible initial value. */\n initial-value: 0px;\n}\n\n@keyframes ds-scroll-edge-fade-reveal-top {\n from {\n --ds-scroll-edge-fade-top: 0px;\n }\n to {\n --ds-scroll-edge-fade-top: var(--ds-scroll-edge-fade-target-top);\n }\n}\n\n@keyframes ds-scroll-edge-fade-reveal-bottom {\n from {\n --ds-scroll-edge-fade-bottom: var(--ds-scroll-edge-fade-target-bottom);\n }\n to {\n --ds-scroll-edge-fade-bottom: 0px;\n }\n}\n\n@keyframes ds-scroll-edge-fade-reveal-left {\n from {\n --ds-scroll-edge-fade-left: 0px;\n }\n to {\n --ds-scroll-edge-fade-left: var(--ds-scroll-edge-fade-target-left);\n }\n}\n\n@keyframes ds-scroll-edge-fade-reveal-right {\n from {\n --ds-scroll-edge-fade-right: var(--ds-scroll-edge-fade-target-right);\n }\n to {\n --ds-scroll-edge-fade-right: 0px;\n }\n}\n\n/* Mask gradients use #000 / transparent as alpha stops — not theme colors. */\n/* eslint-disable compomo/color-no-hex */\n\n.scroll-edge-fade {\n --ds-scroll-edge-fade-size: var(--dimension-size-600);\n --ds-scroll-edge-fade-reveal-distance: var(--dimension-size-800);\n --ds-scroll-edge-fade-target-top: 0px;\n --ds-scroll-edge-fade-target-bottom: 0px;\n --ds-scroll-edge-fade-target-left: 0px;\n --ds-scroll-edge-fade-target-right: 0px;\n --ds-scroll-edge-fade-top: var(--ds-scroll-edge-fade-target-top);\n --ds-scroll-edge-fade-bottom: var(--ds-scroll-edge-fade-target-bottom);\n --ds-scroll-edge-fade-left: var(--ds-scroll-edge-fade-target-left);\n --ds-scroll-edge-fade-right: var(--ds-scroll-edge-fade-target-right);\n --ds-scroll-edge-fade-block-mask: linear-gradient(\n to bottom,\n transparent 0,\n #000 var(--ds-scroll-edge-fade-top),\n #000 calc(100% - var(--ds-scroll-edge-fade-bottom)),\n transparent 100%\n );\n --ds-scroll-edge-fade-inline-mask: linear-gradient(\n to right,\n transparent 0,\n #000 var(--ds-scroll-edge-fade-left),\n #000 calc(100% - var(--ds-scroll-edge-fade-right)),\n transparent 100%\n );\n\n /* Intersecting the block and inline masks lets every edge compose correctly. */\n -webkit-mask-image: var(--ds-scroll-edge-fade-block-mask), var(--ds-scroll-edge-fade-inline-mask);\n mask-image: var(--ds-scroll-edge-fade-block-mask), var(--ds-scroll-edge-fade-inline-mask);\n -webkit-mask-composite: source-in;\n mask-composite: intersect;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-size: 100% 100%;\n mask-size: 100% 100%;\n}\n\n.scroll-edge-fade--top {\n --ds-scroll-edge-fade-target-top: var(--ds-scroll-edge-fade-size);\n}\n\n.scroll-edge-fade--bottom {\n --ds-scroll-edge-fade-target-bottom: var(--ds-scroll-edge-fade-size);\n}\n\n.scroll-edge-fade--left {\n --ds-scroll-edge-fade-target-left: var(--ds-scroll-edge-fade-size);\n}\n\n.scroll-edge-fade--right {\n --ds-scroll-edge-fade-target-right: var(--ds-scroll-edge-fade-size);\n}\n\n/* Manual per-edge state remains available when scroll state already lives in JS. */\n.scroll-edge-fade--top-at-edge {\n --ds-scroll-edge-fade-target-top: 0px;\n}\n\n.scroll-edge-fade--bottom-at-edge {\n --ds-scroll-edge-fade-target-bottom: 0px;\n}\n\n.scroll-edge-fade--left-at-edge {\n --ds-scroll-edge-fade-target-left: 0px;\n}\n\n.scroll-edge-fade--right-at-edge {\n --ds-scroll-edge-fade-target-right: 0px;\n}\n\n@supports (animation-timeline: scroll()) {\n .scroll-edge-fade--scroll-aware {\n animation-name:\n ds-scroll-edge-fade-reveal-top, ds-scroll-edge-fade-reveal-bottom,\n ds-scroll-edge-fade-reveal-left, ds-scroll-edge-fade-reveal-right;\n /* eslint-disable-next-line compomo/declaration-property-value-disallowed-list -- scroll timelines require a nonzero sentinel duration; elapsed time is ignored. */\n animation-duration: 1ms;\n animation-timing-function: ease-in-out;\n animation-fill-mode: both;\n animation-timeline: scroll(self y), scroll(self y), scroll(self x), scroll(self x);\n animation-range:\n 0 var(--ds-scroll-edge-fade-reveal-distance),\n calc(100% - var(--ds-scroll-edge-fade-reveal-distance)) 100%,\n 0 var(--ds-scroll-edge-fade-reveal-distance),\n calc(100% - var(--ds-scroll-edge-fade-reveal-distance)) 100%;\n }\n\n @media (prefers-reduced-motion: reduce) {\n .scroll-edge-fade--scroll-aware {\n animation: none;\n }\n }\n}\n\n.scroll-edge-fade--at-end,\n.scroll-edge-fade--hidden {\n -webkit-mask-image: none;\n mask-image: none;\n}\n\n/**\n * Masks a long content element against a scrollport-relative block window.\n * The owner updates the start/end offsets as the scrollport moves. Keeping the\n * mask on the content instead of the overflow element leaves native scrollbars\n * outside the fade.\n */\n.scroll-edge-fade--block-window {\n --ds-scroll-edge-fade-window-start: 100%;\n --ds-scroll-edge-fade-window-end: 100%;\n\n -webkit-mask-image: linear-gradient(\n to bottom,\n #000 0,\n #000 var(--ds-scroll-edge-fade-window-start),\n transparent var(--ds-scroll-edge-fade-window-end)\n );\n mask-image: linear-gradient(\n to bottom,\n #000 0,\n #000 var(--ds-scroll-edge-fade-window-start),\n transparent var(--ds-scroll-edge-fade-window-end)\n );\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n}\n\n/* eslint-enable compomo/color-no-hex */\n",":host {\n display: block;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n box-sizing: border-box;\n}\n\n.scroll-overlay {\n position: relative;\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n}\n\n.scroll-overlay__viewport {\n width: 100%;\n height: 100%;\n min-width: 0;\n min-height: 0;\n overflow: auto;\n overscroll-behavior: contain;\n box-sizing: border-box;\n}\n\n.scroll-overlay__viewport:focus-visible {\n outline: var(--dimension-stroke-width-025) solid var(--color-border-bold-brand);\n outline-offset: calc(-1 * var(--dimension-stroke-width-025));\n}\n\n.scroll-overlay__content {\n display: flex;\n flex-direction: column;\n min-height: 100%;\n padding-block-end: var(--ds-scroll-overlay-block-size, 0);\n box-sizing: border-box;\n}\n\n.scroll-overlay__body {\n display: grid;\n grid-template-columns: minmax(0, 1fr);\n flex: 1 0 auto;\n min-height: 0;\n}\n\n.scroll-overlay__overlay {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: var(--dimension-z-index-floating);\n}\n","import { Component, Element, Event, EventEmitter, h, Host, Method, Prop } from '@stencil/core';\nimport { ScrollOverlayController } from '../../utils/scroll-overlay-controller';\n\nexport interface ScrollOverlayScrollDetail {\n scrollTop: number;\n scrollHeight: number;\n clientHeight: number;\n}\n\n@Component({\n tag: 'ds-scroll-overlay',\n styleUrl: 'ScrollOverlay.css',\n styleUrls: ['../../utils/scroll-edge-fade.css'],\n scoped: true,\n})\nexport class ScrollOverlay {\n @Element() el!: HTMLElement;\n\n /** Optional accessible name. When provided, the scrollport is a focusable region. */\n @Prop() scrollLabel: string | undefined;\n\n /** Reports scroll position without exposing the internal scrollport element. */\n @Event() dsScroll!: EventEmitter<ScrollOverlayScrollDetail>;\n\n private viewport?: HTMLElement;\n private content?: HTMLElement;\n private overlay?: HTMLElement;\n private controller?: ScrollOverlayController;\n\n componentDidLoad(): void {\n if (!this.viewport || !this.content || !this.overlay) return;\n this.controller = new ScrollOverlayController({\n host: this.el,\n viewport: this.viewport,\n content: this.content,\n overlay: this.overlay,\n });\n this.controller.connect();\n }\n\n disconnectedCallback(): void {\n this.controller?.disconnect();\n }\n\n /** Move the owned scrollport to its beginning. */\n @Method()\n async scrollToStart(): Promise<void> {\n this.viewport?.scrollTo({ top: 0, behavior: 'auto' });\n this.controller?.sync();\n }\n\n /** Move the owned scrollport to its live end. */\n @Method()\n async scrollToEnd(): Promise<void> {\n this.viewport?.scrollTo({ top: this.viewport.scrollHeight, behavior: 'auto' });\n this.controller?.sync();\n }\n\n /** Re-measure footer geometry after an imperative slotted-content update. */\n @Method()\n async refreshOverlay(): Promise<void> {\n this.controller?.sync();\n }\n\n private handleScroll = (): void => {\n if (!this.viewport) return;\n this.controller?.sync();\n this.dsScroll.emit({\n scrollTop: this.viewport.scrollTop,\n scrollHeight: this.viewport.scrollHeight,\n clientHeight: this.viewport.clientHeight,\n });\n };\n\n render() {\n const labelled = Boolean(this.scrollLabel?.trim());\n return (\n <Host>\n <div class=\"scroll-overlay\">\n <div\n class=\"scroll-overlay__viewport\"\n ref={element => {\n this.viewport = element;\n }}\n role={labelled ? 'region' : undefined}\n aria-label={labelled ? this.scrollLabel : undefined}\n tabIndex={labelled ? 0 : undefined}\n onScroll={this.handleScroll}\n >\n <div\n class=\"scroll-overlay__content scroll-edge-fade--block-window\"\n ref={element => {\n this.content = element;\n }}\n >\n <div class=\"scroll-overlay__body\">\n <slot />\n </div>\n </div>\n </div>\n <div\n class=\"scroll-overlay__overlay\"\n ref={element => {\n this.overlay = element;\n }}\n >\n <slot name=\"overlay\" />\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"iGAAA,MAAMA,EAAoB,IAAM,u+ICAhC,MAAMC,EAAmB,IAAM,u+B,MCelBC,EAAaC,EAAA,MAAAD,UAAAE,EAN1B,WAAAC,CAAAC,G,+EAuDUC,KAAAC,aAAe,KACrB,IAAKD,KAAKE,SAAU,OACpBF,KAAKG,YAAYC,OACjBJ,KAAKK,SAASC,KAAK,CACjBC,UAAWP,KAAKE,SAASK,UACzBC,aAAcR,KAAKE,SAASM,aAC5BC,aAAcT,KAAKE,SAASO,cAC5B,CAyCL,CAnFC,gBAAAC,GACE,IAAKV,KAAKE,WAAaF,KAAKW,UAAYX,KAAKY,QAAS,OACtDZ,KAAKG,WAAa,IAAIU,EAAwB,CAC5CC,KAAMd,KAAKe,GACXb,SAAUF,KAAKE,SACfS,QAASX,KAAKW,QACdC,QAASZ,KAAKY,UAEhBZ,KAAKG,WAAWa,S,CAGlB,oBAAAC,GACEjB,KAAKG,YAAYe,Y,CAKnB,mBAAMC,GACJnB,KAAKE,UAAUkB,SAAS,CAAEC,IAAK,EAAGC,SAAU,SAC5CtB,KAAKG,YAAYC,M,CAKnB,iBAAMmB,GACJvB,KAAKE,UAAUkB,SAAS,CAAEC,IAAKrB,KAAKE,SAASM,aAAcc,SAAU,SACrEtB,KAAKG,YAAYC,M,CAKnB,oBAAMoB,GACJxB,KAAKG,YAAYC,M,CAanB,MAAAqB,GACE,MAAMC,EAAWC,QAAQ3B,KAAK4B,aAAaC,QAC3C,OACEC,EAACC,EAAI,CAAAC,IAAA,4CACHF,EAAA,OAAAE,IAAA,2CAAKC,MAAM,kBACTH,EAAA,OAAAE,IAAA,2CACEC,MAAM,2BACNC,IAAKC,IACHnC,KAAKE,SAAWiC,CAAO,EAEzBC,KAAMV,EAAW,SAAWW,UAAS,aACzBX,EAAW1B,KAAK4B,YAAcS,UAC1CC,SAAUZ,EAAW,EAAIW,UACzBE,SAAUvC,KAAKC,cAEf6B,EAAA,OAAAE,IAAA,2CACEC,MAAM,yDACNC,IAAKC,IACHnC,KAAKW,QAAUwB,CAAO,GAGxBL,EAAA,OAAAE,IAAA,2CAAKC,MAAM,wBACTH,EAAA,QAAAE,IAAA,gDAINF,EAAA,OAAAE,IAAA,2CACEC,MAAM,0BACNC,IAAKC,IACHnC,KAAKY,QAAUuB,CAAO,GAGxBL,EAAA,QAAAE,IAAA,2CAAMQ,KAAK,c","ignoreList":[]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{S as o,d as s}from"./p-
|
|
1
|
+
import{S as o,d as s}from"./p-C6xVxqOn.js";const t=o;const n=s;export{t as DsSelect,n as defineCustomElement};
|
|
2
2
|
//# sourceMappingURL=ds-select.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{p as e,H as s,c as t,h as i,a,t as n}from"./index.js";import{c as l,d as o}from"./p-CdgOLWX9.js";import{f as h,v as r,j as p,o as d}from"./p-Cc3ZUQlJ.js";import{g as c,c as u,a as b,b as m,r as f}from"./p-BxduVc5g.js";import{i as g,b as v,c as _,r as y,S as k,d as w}from"./p-CgGcgMjs.js";import{c as x}from"./p-CqW2eyiF.js";import{d as C}from"./p-ZhP2tVmM.js";import{d as S}from"./p-C-3YqeTb.js";import{d as D}from"./p-Do2FJd1y.js";import{d as M}from"./p-BciTtTwx.js";import{d as A}from"./p-E5W27Fu_.js";import{d as L}from"./p-CiH4GG6r.js";import{d as P}from"./p-Dzndkdx5.js";import{d as T}from"./p-7V1AhetH.js";import{d as B}from"./p-DjkUFlDW.js";import{d as j}from"./p-0XTyQNRG.js";import{d as z}from"./p-BKZdqJQB.js";import{d as E}from"./p-D1vQGJzc.js";import{d as N}from"./p-CiJ1WR11.js";import{d as I}from"./p-BhJXmuRA.js";import{d as F}from"./p-IEq_06J0.js";import{d as $}from"./p-etifxiDc.js";import{d as O}from"./p-CmexIVnE.js";import{d as H}from"./p-xdmJCPCg.js";import{d as G}from"./p-Bm7rqs3C.js";import{d as V}from"./p-Dn9QHL4O.js";import{d as R}from"./p-Bn8I7iw6.js";import{d as W}from"./p-D0y7Sja6.js";import{d as J}from"./p-DHICPS4n.js";import{d as q}from"./p-D922f6Tb.js";import{d as U}from"./p-DwbcNDJF.js";import{d as K}from"./p-CYzFfFcH.js";const Q={k:"search",a:"agents",s:"stacks",m:"messages",n:"activity","/":"help"};function Z(e){return!e.metaKey&&!e.ctrlKey&&!e.altKey&&!e.shiftKey}function X(e){if(!e||typeof e!=="object")return false;if(!("closest"in e)||typeof e.closest!=="function")return false;const s=e;const t=s.closest('input, textarea, select, [contenteditable=""], [contenteditable="true"], [contenteditable="plaintext-only"]');if(t)return true;const i=s.getAttribute("role");if(i==="textbox"||i==="combobox"||i==="searchbox")return true;return Boolean(s.isContentEditable)}function Y(e){if(e.key==="["||e.code==="BracketLeft")return"[";if(e.key==="]"||e.code==="BracketRight")return"]";return e.key.length===1?e.key.toLowerCase():e.key.toLowerCase()}function ee(e){if(!Z(e))return null;const s=Y(e);if(s==="[")return"toggle-panel-nav";if(s==="]")return"close-panel-tools";const t=Q[s];if(t)return`open-tool:${t}`;return null}const se=["none","cool","neutral","warm","fresh"];const te="neutral";const ie={cool:{opacity:.1,stops:[{color:"var(--color-background-transparent)",position:0},{color:"var(--color-color-intent-blue-strong-background)",position:100}]},neutral:{opacity:.1,stops:[{color:"var(--color-background-transparent)",position:0},{color:"var(--color-color-intent-grey-strong-background)",position:100}]},warm:{opacity:.1,stops:[{color:"var(--color-background-transparent)",position:0},{color:"var(--color-color-intent-yellow-strong-background)",position:100}]},fresh:{opacity:.4,stops:[{color:"var(--color-color-intent-cyan-faint-background)",position:0},{color:"var(--color-background-transparent)",position:47},{color:"var(--color-background-transparent)",position:58},{color:"var(--color-color-intent-red-faint-background)",position:83},{color:"var(--color-color-intent-pink-faint-background)",position:100}]}};const ae="100% 100% at 0% 0%";function ne(e){const s=he(e);return s==="none"?null:ie[s]}function le(e){return String(ne(e)?.opacity??0)}function oe(e){return se.includes(e)}function he(e){return e!=null&&oe(e)?e:te}function re(e){const s=he(e);if(s==="none")return"none";return pe(ie[s].stops)}function pe(e){const s=e.map((e=>`${e.color} ${e.position}%`)).join(", ");return`radial-gradient(${ae}, ${s})`}const de="--ds-shell-gradient-image";const ce="--ds-shell-gradient-size";const ue="--ds-shell-gradient-position-panel";const be="--ds-shell-gradient-position-bar";const me="--ds-shell-gradient-opacity";function fe(e=te){return re(e)}function ge(e){const s=typeof globalThis.window!=="undefined"?globalThis.window:undefined;if(!s)return{width:0,height:0};const t=s.visualViewport;return{width:Math.round(t?.width??s.innerWidth),height:Math.round(t?.height??s.innerHeight)}}function ve(e){return`${Math.round(e.width)}px ${Math.round(e.height)}px`}function _e(){return"0 0"}function ye(e){return`${-Math.round(e)}px 0`}function ke(e,s){if(typeof document==="undefined")return 0;const t=document.createElement("div");t.style.cssText="position:absolute;visibility:hidden;pointer-events:none;height:0;width:var("+s+");";e.appendChild(t);const i=t.getBoundingClientRect().width;e.removeChild(t);return i}function we(e){return{expandedPx:ke(e,"--_nav-width"),collapsedPx:ke(e,"--_nav-width-collapsed")}}function xe(e,s){if(s?.classList.contains("panel-nav--collapsed"))return true;const t=e?.collapsed;return t===true}function Ce(e,s){return s?e.collapsedPx:e.expandedPx}const Se=()=>`.sc-ds-shell-app-h{display:flex;flex-direction:column;height:100%;min-height:0;box-sizing:border-box;overflow:hidden;overscroll-behavior:none;font-family:var(--typography-font-family-ui, system-ui);--ds-shell-panel-tools-width:var(--dimension-panel-width-xs);--ds-shell-gradient-context:flat}.sc-ds-shell-app-h{--_shell-chrome-bg:var(--color-background-secondary)}.shell-app--gradient.sc-ds-shell-app-h{--ds-shell-gradient-context:gradient}.shell-app__row.sc-ds-shell-app{display:flex;flex:1 1 0;min-height:0;position:relative}.shell-app__banner.sc-ds-shell-app{--_shell-banner-edge-display:none;flex:0 0 auto;min-width:0;position:relative;z-index:5}.shell-app__banner.sc-ds-shell-app-s>ds-banner,.shell-app__banner .sc-ds-shell-app-s>ds-banner{display:grid;width:100%}.shell-app__chrome.sc-ds-shell-app{position:absolute;inset:0;pointer-events:none;z-index:0;overflow:hidden;background-color:var(--_shell-chrome-bg)}.shell-app--gradient.sc-ds-shell-app-h .shell-app__chrome.sc-ds-shell-app::before{content:'';position:absolute;inset:0;pointer-events:none;background-position:0 0;background-attachment:fixed;z-index:1;opacity:var(--ds-shell-gradient-opacity, 1);background-image:var(--ds-shell-gradient-image, none);background-size:var(--ds-shell-gradient-size, auto);background-repeat:no-repeat}.shell-app__paper-texture.sc-ds-shell-app{z-index:2}.shell-app__panel.sc-ds-shell-app{flex:0 0 auto;min-height:0;height:100%;position:relative;z-index:2}.shell-app__panel.sc-ds-shell-app-s>ds-panel-nav,.shell-app__panel .sc-ds-shell-app-s>ds-panel-nav{display:block;height:100%}.shell-app__panel.sc-ds-shell-app>ds-panel-nav.sc-ds-shell-app{display:block;height:100%}.shell-app__main.sc-ds-shell-app{flex:1 1 auto;min-width:0;min-height:0;display:grid;grid-template-columns:minmax(0, 1fr) auto;grid-template-rows:auto minmax(0, 1fr);grid-template-areas:'bar tools' 'content tools';position:relative;z-index:1}.shell-app__mobile-sheet-nav.sc-ds-shell-app,.shell-app__mobile-bar-nav.sc-ds-shell-app{display:none}.shell-app__bar.sc-ds-shell-app{grid-area:bar;flex:0 0 auto;min-width:0}.shell-app__bar.sc-ds-shell-app-s>ds-bar-nav,.shell-app__bar .sc-ds-shell-app-s>ds-bar-nav{display:block}.shell-app__bar.sc-ds-shell-app-s>ds-bar-title,.shell-app__bar .sc-ds-shell-app-s>ds-bar-title,.shell-app__bar.sc-ds-shell-app-s>ds-bar-page-title,.shell-app__bar .sc-ds-shell-app-s>ds-bar-page-title{display:block}.shell-app__bar.sc-ds-shell-app>ds-bar-nav.sc-ds-shell-app{display:block}.shell-app__bar.sc-ds-shell-app>ds-bar-title.sc-ds-shell-app,.shell-app__bar.sc-ds-shell-app>ds-bar-page-title.sc-ds-shell-app{display:block}.shell-app__content.sc-ds-shell-app{grid-area:content;flex:1 1 auto;min-width:0;min-height:0;overflow:auto;overscroll-behavior:none;contain:layout}.shell-app__content.sc-ds-shell-app:focus,.shell-app__content.sc-ds-shell-app:focus-visible{outline:none}.shell-app__content.sc-ds-shell-app{position:relative;z-index:1;background-color:var(--color-background-primary)}.shell-app__tools.sc-ds-shell-app{grid-area:tools;flex:0 0 auto;min-width:0;min-height:0;height:100%;display:flex;position:relative;z-index:0;overflow:hidden}.shell-app__tools.sc-ds-shell-app-s>ds-panel-tools,.shell-app__tools .sc-ds-shell-app-s>ds-panel-tools{display:block;height:100%;min-height:0}.shell-app__tools.sc-ds-shell-app-s>ds-shell-tools,.shell-app__tools .sc-ds-shell-app-s>ds-shell-tools{display:block;height:100%;min-height:0}.shell-app__tools.sc-ds-shell-app>ds-shell-tools.sc-ds-shell-app{display:block;height:100%;min-height:0}.shell-app__tool-slot-proxy.sc-ds-shell-app{display:block;width:100%;height:100%;min-width:0;min-height:0}.shell-app__content.sc-ds-shell-app>ds-shell-page.sc-ds-shell-app{display:block;min-height:100%}.shell-app--tools-fullscreen.sc-ds-shell-app-h .shell-app__row.sc-ds-shell-app{contain:layout}.shell-app--tools-fullscreen.sc-ds-shell-app-h .shell-app__main.sc-ds-shell-app{z-index:3}.shell-app--tools-fullscreen.sc-ds-shell-app-h .shell-app__tools.sc-ds-shell-app{z-index:2}.shell-app--tools-fullscreen.sc-ds-shell-app-h .shell-app__panel.sc-ds-shell-app,.shell-app--tools-fullscreen.sc-ds-shell-app-h .shell-app__bar.sc-ds-shell-app,.shell-app--tools-fullscreen.sc-ds-shell-app-h .shell-app__content.sc-ds-shell-app{visibility:hidden;content-visibility:hidden}.shell-app--mobile.sc-ds-shell-app-h{--_shell-chrome-bg:var(--color-background-primary);padding-block-start:env(safe-area-inset-top);background:var(--ds-shell-safe-area-background, var(--color-background-primary))}.shell-app--mobile.sc-ds-shell-app-h .shell-app__banner.sc-ds-shell-app{--_shell-banner-edge-display:block}.shell-app--mobile.shell-app--foreground-refresh.sc-ds-shell-app-h .shell-app__main.sc-ds-shell-app{transform:translateZ(0)}.shell-app--mobile.sc-ds-shell-app-h .shell-app__chrome.sc-ds-shell-app,.shell-app--mobile.sc-ds-shell-app-h .shell-app__panel.sc-ds-shell-app,.shell-app--mobile.sc-ds-shell-app-h .shell-app__bar.sc-ds-shell-app{display:none}.shell-app--mobile.sc-ds-shell-app-h .shell-app__main.sc-ds-shell-app{width:100%;box-sizing:border-box;grid-template-columns:minmax(0, 1fr);grid-template-rows:minmax(0, 1fr) auto;grid-template-areas:'stage' 'mobile-bar-nav';background:var(--color-background-primary)}.shell-app--mobile.sc-ds-shell-app-h .shell-app__content.sc-ds-shell-app,.shell-app--mobile.sc-ds-shell-app-h .shell-app__tools.sc-ds-shell-app,.shell-app--mobile.sc-ds-shell-app-h .shell-app__mobile-sheet-nav.sc-ds-shell-app{grid-area:stage;min-width:0;min-height:0;height:100%;position:relative}.shell-app--mobile.sc-ds-shell-app-h .shell-app__content.sc-ds-shell-app{z-index:1;overflow:auto}.shell-app--mobile.sc-ds-shell-app-h .shell-app__tools.sc-ds-shell-app{z-index:2;width:100%;overflow:hidden;background:var(--color-background-primary)}.shell-app--mobile.sc-ds-shell-app-h .shell-app__mobile-sheet-nav.sc-ds-shell-app{display:block;z-index:3;overflow:hidden;background:var(--color-background-primary)}.shell-app--mobile.sc-ds-shell-app-h .shell-app__mobile-bar-nav.sc-ds-shell-app{grid-area:mobile-bar-nav;display:block;min-width:0;position:relative;z-index:4}.shell-app--mobile.sc-ds-shell-app-h .shell-app__tools[hidden].sc-ds-shell-app,.shell-app--mobile.sc-ds-shell-app-h .shell-app__mobile-sheet-nav[hidden].sc-ds-shell-app,.shell-app--mobile.sc-ds-shell-app-h .shell-app__mobile-bar-nav[hidden].sc-ds-shell-app{display:none}.shell-app--mobile-tool-active.sc-ds-shell-app-h .shell-app__content.sc-ds-shell-app,.shell-app--mobile-sheet-nav-open.sc-ds-shell-app-h .shell-app__content.sc-ds-shell-app,.shell-app--mobile-sheet-nav-open.sc-ds-shell-app-h .shell-app__tools.sc-ds-shell-app{visibility:hidden}`;let De=0;const Me=e(class e extends s{constructor(e){super();if(e!==false){this.__registerHost()}this.dsResponsiveModeChange=t(this,"dsResponsiveModeChange",7);this.dsNavSelect=t(this,"dsNavSelect",7);this.dsTabChange=t(this,"dsTabChange",7);this.dsNavChildSelect=t(this,"dsNavChildSelect",7);this.dsSubsectionChange=t(this,"dsSubsectionChange",7);this.dsPageBack=t(this,"dsPageBack",7);this.dsBreadcrumbSelect=t(this,"dsBreadcrumbSelect",7);this.dsPageAction=t(this,"dsPageAction",7);this.dsToolChange=t(this,"dsToolChange",7);this.dsHeaderBack=t(this,"dsHeaderBack",7);this.dsHeaderAction=t(this,"dsHeaderAction",7);this.dsRailAccessoryAction=t(this,"dsRailAccessoryAction",7);this.dsPresentationChange=t(this,"dsPresentationChange",7);this.dsBrowseContextChange=t(this,"dsBrowseContextChange",7);this.dsNavFooterAction=t(this,"dsNavFooterAction",7);this.dsNavUserAction=t(this,"dsNavUserAction",7);this.composition="managed";this.navigation={};this.sectionNavigation="bar";this.pageChrome={};this.tools={};this.navStyle="dashboard";this.gradientPreset=te;this.shortcutsEnabled=true;this.mobileDestination="area";this.mobileSheetNavOpen=false;this.toolsFullscreen=false;this.resolvedMode="desktop";this.managedToolsOpen=false;this.managedActiveTool="";this.managedToolPresentation="drawer";this.managedMobileDestination="area";this.managedMobilePrimaryDestination="area";this.managedMobileSheetNavOpen=false;this.managedInboxTool="";this.managedBrowseContext="dashboard";this.mobileActionMenuOpen=false;this.mobileActionSurfaceOpen=false;this.mobileActionMenuInitialFocusVisible=false;this.instanceId=De++;this.mobileActionMenuTriggerId=`shell-app-mobile-action-trigger-${this.instanceId}`;this.mobileActionMenuId=`shell-app-mobile-action-menu-${this.instanceId}`;this.mobileActionTriggerEl=null;this.resizeObserver=null;this.hasLoaded=false;this.foregroundRefreshTimer=null;this.panelNavTransition=new c;this.chromeSyncCoalescer=u((()=>this.syncChrome()));this.panelWidthTokens={expandedPx:0,collapsedPx:0};this.cachedViewportWidth=0;this.cachedViewportHeight=0;this.onWindowResize=()=>{this.updateResponsiveMode();if(this.panelNavTransition.isActive)return;this.scheduleChromeSync()};this.onVisualViewportChange=()=>{if(this.panelNavTransition.isActive)return;this.scheduleChromeSync()};this.onChromeTransitionStart=e=>{const s=f(e);if(s!=="panel-nav")return;this.panelNavTransition.enter();const t=ge();this.cachedViewportWidth=t.width;this.cachedViewportHeight=t.height;this.syncChrome()};this.onChromeTransitionEnd=e=>{const s=f(e);if(s!=="panel-nav")return;this.panelNavTransition.exit();if(!this.panelNavTransition.isActive){this.scheduleChromeSync()}};this.onDocumentVisibilityChange=()=>{if(!document.hidden)this.refreshAfterForegroundRestore()};this.onPageShow=e=>{if(e.persisted)this.refreshAfterForegroundRestore()};this.handleManagedNavSelect=e=>{e.stopPropagation();this.dsNavSelect.emit(e.detail)};this.handleManagedNavChildSelect=e=>{e.stopPropagation();this.dsNavChildSelect.emit(e.detail)};this.handleManagedTabChange=e=>{e.stopPropagation();this.dsTabChange.emit(e.detail)};this.handleManagedPageBack=e=>{e.stopPropagation();this.dsPageBack.emit(e.detail)};this.handleManagedBreadcrumbSelect=e=>{e.stopPropagation();const s=this.dsBreadcrumbSelect.emit(e.detail);if(s.defaultPrevented)e.preventDefault()};this.handleManagedSubsectionChange=e=>{e.stopPropagation();this.dsSubsectionChange.emit(e.detail)};this.handleManagedPageAction=e=>{e.stopPropagation();this.dsPageAction.emit(e.detail)};this.handleManagedToolChange=e=>{e.stopPropagation();const{id:s,selected:t}=e.detail;this.managedActiveTool=s;this.managedToolsOpen=t;const i=this.resolvedToolItems.find((e=>e.id===s));if(i&&g(i)){this.managedInboxTool=s}this.managedMobileDestination=t?i?.mobileDestination??v(true,s):"area";this.managedMobileSheetNavOpen=false;this.dsToolChange.emit(e.detail)};this.handleManagedPresentationChange=e=>{e.stopPropagation();this.managedToolPresentation=e.detail.presentation;this.toolsFullscreen=e.detail.presentation==="fullscreen";this.dsPresentationChange.emit(e.detail)};this.handleManagedHeaderBack=e=>{e.stopPropagation();this.dsHeaderBack.emit(e.detail)};this.handleManagedHeaderAction=e=>{e.stopPropagation();this.dsHeaderAction.emit(e.detail)};this.handleManagedRailAccessoryAction=e=>{e.stopPropagation();this.dsRailAccessoryAction.emit(e.detail)};this.handleManagedSheetToggle=e=>{e.stopPropagation();this.managedMobileSheetNavOpen=e.detail};this.handleManagedMobileDestination=e=>{e.stopPropagation();const s=e.detail.destination;this.managedMobileSheetNavOpen=false;this.managedMobileDestination=s;if(s==="area"){this.managedToolsOpen=false;return}this.activateManagedMobileTool(s)};this.handleManagedAreaSelect=e=>{e.stopPropagation();if(e.detail==="help"){this.managedMobileSheetNavOpen=false;this.managedMobileDestination="help";if(this.activateManagedMobileTool("help"))return}this.managedMobileSheetNavOpen=false;this.managedMobileDestination="area";this.managedMobilePrimaryDestination="area";this.managedToolsOpen=false;this.dsNavSelect.emit(e.detail)};this.handleManagedMobileChildSelect=e=>{e.stopPropagation();this.managedMobileSheetNavOpen=false;this.managedMobileDestination="area";this.managedMobilePrimaryDestination="area";this.managedToolsOpen=false;this.dsNavChildSelect.emit(e.detail)};this.handleManagedBrowseContext=e=>{e.stopPropagation();this.managedBrowseContext=e.detail;this.dsBrowseContextChange.emit(e.detail)};this.handleManagedSheetClose=e=>{e.stopPropagation();this.managedMobileSheetNavOpen=false};this.handleManagedNavFooterAction=e=>{e.stopPropagation();this.dsNavFooterAction.emit()};this.handleManagedNavUserAction=e=>{e.stopPropagation();this.dsNavUserAction.emit(e.detail)};this.closeMobileActionMenu=()=>{this.mobileActionMenuOpen=false};this.handleMobileActionSelect=e=>{const s=String(e.detail.value??"");const t=h(this.resolvedHeaderActions,s);if(!t||t.isInactive||"isLoading"in t&&t.isLoading)return;this.mobileActionMenuOpen=false;this.dsPageAction.emit(s);requestAnimationFrame((()=>void this.mobileActionTriggerEl?.setFocus?.()))}}get managed(){return this.composition==="managed"}get effectiveMobileDestination(){return this.managed?this.managedMobileDestination:this.mobileDestination}get effectiveMobileSheetNavOpen(){return this.managed?this.managedMobileSheetNavOpen:this.mobileSheetNavOpen}get resolvedNavigationGroups(){if(this.navigation.groups?.length)return this.navigation.groups;return this.managedBrowseContext==="settings"?this.navigation.settingsGroups??[]:this.navigation.dashboardGroups??[]}get resolvedToolItems(){return this.tools.items??l}get resolvedPageTabs(){const e=this.currentArea.children;if(!e?.length)return this.pageChrome.tabs??[];return e.map((e=>({id:e.id,label:e.label,dot:e.dot,isInactive:e.isInactive})))}get availableInboxTools(){return this.resolvedToolItems.filter((e=>!e.isInactive&&g(e))).map((e=>e.id))}componentWillLoad(){if(typeof window!=="undefined"){this.resolvedMode=_(window.innerWidth)}this.managedBrowseContext=this.navigation.browseContext??this.navStyle;this.managedMobileDestination=this.mobileDestination;this.managedMobileSheetNavOpen=this.mobileSheetNavOpen;this.managedInboxTool=y("",this.availableInboxTools)}componentDidLoad(){this.hasLoaded=true;this.syncSlottedNavStyle();this.syncSlottedMobileState();this.connectMetricsObserver();this.connectViewportListeners();this.connectPageLifecycleListeners();this.el.addEventListener(b,this.onChromeTransitionStart);this.el.addEventListener(m,this.onChromeTransitionEnd);requestAnimationFrame((()=>{this.cachePanelWidthTokens();this.scheduleChromeSync()}));const e=this.el.querySelector("ds-shell-tools, ds-panel-tools");this.toolsFullscreen=e?.getAttribute("presentation")==="fullscreen"}handleToolsPresentation(e){this.toolsFullscreen=e.detail?.presentation==="fullscreen"}disconnectedCallback(){this.resizeObserver?.disconnect();this.resizeObserver=null;this.disconnectViewportListeners();this.disconnectPageLifecycleListeners();this.cancelForegroundRefresh();this.chromeSyncCoalescer.cancel();this.el.removeEventListener(b,this.onChromeTransitionStart);this.el.removeEventListener(m,this.onChromeTransitionEnd)}onShellPropsChange(){this.syncSlottedNavStyle();this.scheduleChromeSync()}handleNavigationChange(e,s){this.managedBrowseContext=this.navigation.browseContext??this.navStyle;if(e.currentUrl!==s.currentUrl||e.activeId!==s.activeId){this.managedMobilePrimaryDestination="area"}}handlePageChromeChange(){if(this.mobileActionMenuSections.length===0){this.mobileActionMenuOpen=false;this.mobileActionSurfaceOpen=false}}handleToolsChange(){if(!this.resolvedToolItems.some((e=>e.id==="help"&&!e.isInactive))){this.managedMobilePrimaryDestination="area"}if(this.managedActiveTool&&!this.resolvedToolItems.some((e=>e.id===this.managedActiveTool))){this.managedToolsOpen=false;this.managedActiveTool="";this.managedMobileDestination="area"}this.managedInboxTool=y(this.managedInboxTool,this.availableInboxTools)}onMobileStateChange(e,t){if(this.managed){this.managedMobileDestination=this.mobileDestination;this.managedMobileSheetNavOpen=this.mobileSheetNavOpen}this.syncSlottedMobileState();if(t===true&&!this.effectiveMobileSheetNavOpen&&this.resolvedMode==="mobile"){requestAnimationFrame((()=>{const e=this.el.querySelector("ds-mobile-bar-nav");const t=document.activeElement;if(t instanceof s&&e?.contains(t))return;void e?.focusDestination?.("sheet-nav")}))}}updateResponsiveMode(){if(typeof window==="undefined")return;const e=_(window.innerWidth);if(e===this.resolvedMode)return;this.resolvedMode=e;this.syncSlottedMobileState();this.scheduleChromeSync();if(this.hasLoaded)this.dsResponsiveModeChange.emit({mode:e})}scheduleChromeSync(){this.chromeSyncCoalescer.schedule()}syncSlottedNavStyle(){const e=this.el.querySelector("ds-panel-nav");const s=this.el.querySelector("ds-bar-nav");if(e){e.setAttribute("nav-style",this.navStyle);e.navStyle=this.navStyle}if(s){s.setAttribute("nav-style",this.navStyle);s.navStyle=this.navStyle}}syncSlottedMobileState(){const e=this.el.querySelector("ds-shell-tools");const s=this.el.querySelector("ds-mobile-bar-nav");const t=this.el.querySelector("ds-mobile-sheet-nav");if(e){e.setAttribute("responsive-mode",this.resolvedMode);e.responsiveMode=this.resolvedMode}if(s){s.activeDestination=this.effectiveMobileDestination;s.sheetNavExpanded=this.effectiveMobileSheetNavOpen}if(t){t.open=this.effectiveMobileSheetNavOpen}}connectMetricsObserver(){this.resizeObserver=new ResizeObserver((()=>{if(this.panelNavTransition.isActive)return;this.scheduleChromeSync()}));this.resizeObserver.observe(this.el);const e=this.el.querySelector(".shell-app__panel");if(e)this.resizeObserver.observe(e)}connectViewportListeners(){if(typeof window==="undefined")return;window.addEventListener("resize",this.onWindowResize,{passive:true});const e=window.visualViewport;if(e){e.addEventListener("resize",this.onVisualViewportChange,{passive:true});e.addEventListener("scroll",this.onVisualViewportChange,{passive:true})}}disconnectViewportListeners(){if(typeof window==="undefined")return;window.removeEventListener("resize",this.onWindowResize);const e=window.visualViewport;if(e){e.removeEventListener("resize",this.onVisualViewportChange);e.removeEventListener("scroll",this.onVisualViewportChange)}}connectPageLifecycleListeners(){if(typeof window==="undefined"||typeof document==="undefined")return;document.addEventListener("visibilitychange",this.onDocumentVisibilityChange);window.addEventListener("pageshow",this.onPageShow)}disconnectPageLifecycleListeners(){if(typeof window==="undefined"||typeof document==="undefined")return;document.removeEventListener("visibilitychange",this.onDocumentVisibilityChange);window.removeEventListener("pageshow",this.onPageShow)}cancelForegroundRefresh(){if(this.foregroundRefreshTimer!==null){window.clearTimeout(this.foregroundRefreshTimer);this.foregroundRefreshTimer=null}this.el.classList.remove("shell-app--foreground-refresh")}refreshAfterForegroundRestore(){this.updateResponsiveMode();this.syncSlottedMobileState();this.scheduleChromeSync();if(this.resolvedMode!=="mobile")return;this.cancelForegroundRefresh();this.el.classList.add("shell-app--foreground-refresh");this.foregroundRefreshTimer=window.setTimeout((()=>{this.foregroundRefreshTimer=null;this.el.classList.remove("shell-app--foreground-refresh");void this.el.querySelector(".shell-app__main")?.offsetHeight}),e.FOREGROUND_REFRESH_MS)}cachePanelWidthTokens(){const e=this.el.querySelector("ds-panel-nav .panel-nav");if(!e)return;this.panelWidthTokens=we(e)}applyGradientVars(e,s){const t=e.style;for(const[e,i]of Object.entries(s)){if(i===null)t.removeProperty(e);else t.setProperty(e,i)}}clearGradientPaintVars(e){const s=[de,ce,me];for(const t of e){for(const e of s)t.style.removeProperty(e)}}syncChromeLayoutVars(e,s,t,i){if(e){e.style.setProperty(ue,t)}if(s){s.style.setProperty(be,i)}}resolvePanelWidthPx(e){const s=e?.querySelector(".panel-nav");if(this.panelNavTransition.isActive&&this.panelWidthTokens.expandedPx>0){const t=xe(e,s);return Ce(this.panelWidthTokens,t)}const t=this.el.querySelector(".shell-app__panel");const i=t?.getBoundingClientRect().width??0;if(i>0)return i;if(this.panelWidthTokens.expandedPx>0){const t=xe(e,s);return Ce(this.panelWidthTokens,t)}return 0}resolveViewportDimensions(){if(this.panelNavTransition.isActive&&this.cachedViewportWidth>0){return{width:this.cachedViewportWidth,height:this.cachedViewportHeight}}return ge()}chromeLayerActive(){return this.gradientLayerActive()||this.paperTextureLayerActive()}gradientLayerActive(){return this.resolvedMode!=="mobile"&&he(this.gradientPreset)!=="none"}paperTextureLayerActive(){return this.resolvedMode!=="mobile"&&this.paperTexture!=null}handleWindowKeyDown(e){if(!this.shortcutsEnabled)return;if(X(e.target))return;const s=ee(e);if(!s)return;e.preventDefault();const t=this.el.querySelector("ds-panel-nav");const i=this.el.querySelector("ds-shell-tools, ds-panel-tools");if(s==="toggle-panel-nav"){void t?.toggleCollapsed();return}if(s==="close-panel-tools"){void i?.closeDrawer?.();return}if(s.startsWith("open-tool:")&&i){const e=s.slice("open-tool:".length);void i.activateTool?.(e)}}async activateTool(e){const s=this.el.querySelector("ds-shell-tools, ds-panel-tools");await(s?.activateTool?.(e))}async closeGlobalSurface(){if(this.managedMobileSheetNavOpen){this.managedMobileSheetNavOpen=false;return}const e=this.el.querySelector("ds-shell-tools, ds-panel-tools");await(e?.closeDrawer?.())}async setToolPresentation(e){this.managedToolPresentation=e;this.toolsFullscreen=e==="fullscreen"}activateManagedMobileTool(e){const s=e==="inbox"?y(this.managedInboxTool,this.availableInboxTools):e;if(!s)return false;const t=this.resolvedToolItems.find((t=>t.id===s||e!=="inbox"&&t.mobileDestination===e));if(!t||t.isInactive)return false;const i=t.id;this.managedActiveTool=i;this.managedToolsOpen=true;if(g(t))this.managedInboxTool=i;if(e==="help")this.managedMobilePrimaryDestination="help";this.dsToolChange.emit({id:i,selected:true});return true}get currentArea(){const e=[...this.navigation.dashboardGroups??[],...this.navigation.settingsGroups??[],...this.resolvedNavigationGroups];const s=e.flatMap((e=>e.items));const t=this.navigation.activeId||x(this.navigation.currentUrl??this.pageChrome.currentUrl??"",s);return s.find((e=>e.id===t))??s[0]??{id:"area",icon:"MapPage",label:this.pageChrome.heading||"Area"}}toolDot(e){return this.resolvedToolItems.find((s=>s.id===e))?.dot??false}syncChrome(){const e=this.el.querySelector("ds-panel-nav");const s=this.el.querySelector('ds-bar-nav, ds-bar-page-title, ds-bar-title[placement="shell-bar"]');const t=[this.el,e,s].filter((e=>e!==null));const i=()=>{if(e)e.style.removeProperty(ue);if(s)s.style.removeProperty(be)};const a=he(this.gradientPreset);if(this.resolvedMode==="mobile"){this.clearGradientPaintVars(t);i();return}const n=this.resolveViewportDimensions();if(a==="none"){this.clearGradientPaintVars(t);i();this.syncPaperTextureLayout(n);return}const l=this.resolvePanelWidthPx(e);const o=_e();const h=ye(l);this.syncChromeLayoutVars(e,s,o,h);const r=fe(a);const p=ve({width:n.width,height:n.height});const d=le(a);for(const e of t){if(e===this.el){this.applyGradientVars(e,{[de]:r,[ce]:p,[ue]:o,[be]:h,[me]:d});continue}const t=e===s;this.applyGradientVars(e,{[de]:r,[ce]:p,[me]:d,[ue]:t?null:o,[be]:t?h:null})}this.syncPaperTextureLayout(n)}syncPaperTextureLayout(e){const s=this.el.querySelector(".shell-app__chrome");const t=this.el.querySelector(".shell-app__chrome > ds-paper-texture");if(!s||!t)return;const i=s.getBoundingClientRect();t.style.setProperty("width",`${Math.round(e.width)}px`);t.style.setProperty("height",`${Math.round(e.height)}px`);t.style.setProperty("left",`${-Math.round(i.left)}px`);t.style.setProperty("top",`${-Math.round(i.top)}px`)}renderPaperTexture(){if(!this.paperTextureLayerActive())return null;return i("ds-paper-texture",{class:"shell-app__paper-texture",config:this.paperTexture})}renderManagedPanelNav(){const e=this.navigation;return i("ds-panel-nav",{navStyle:this.navStyle,presentation:this.sectionNavigation==="panel"?"nested":"flat",groups:this.resolvedNavigationGroups,breakpoint:k,routerMode:e.routerMode??"event",activeId:e.activeId??"",activeChildId:this.pageChrome.value??"",currentUrl:e.currentUrl??this.pageChrome.currentUrl??"",storageKey:e.storageKey??"",userName:e.userName??"",userInitial:e.userInitial??"",accountMenuExpanded:e.accountMenuExpanded??false,accountMenuSurfaceOpen:e.accountMenuSurfaceOpen,dashboardLabel:e.dashboardLabel??"Dashboard",settingsLabel:e.settingsLabel??"Settings",accountLabel:e.accountLabel??"Account",dashboardNavigationLabel:e.dashboardNavigationLabel??"Dashboard navigation",settingsNavigationLabel:e.settingsNavigationLabel??"Settings navigation",navigationItemsLabel:e.navigationLabel??"Navigation items",onDsNavSelect:this.handleManagedNavSelect,onDsNavChildSelect:this.handleManagedNavChildSelect,onDsNavFooterAction:this.handleManagedNavFooterAction,onDsNavUserAction:this.handleManagedNavUserAction})}renderManagedBarNav(){return i("ds-bar-nav",{navStyle:this.navStyle,tabs:this.resolvedPageTabs,value:this.pageChrome.value??"",heading:this.pageChrome.routeHeading??this.pageChrome.heading,basePath:this.pageChrome.basePath??"",currentUrl:this.pageChrome.currentUrl??this.navigation.currentUrl??"",onDsTabChange:this.handleManagedTabChange})}renderManagedTopBar(){return this.sectionNavigation==="panel"?this.renderManagedBarPageTitle():this.renderManagedBarNav()}renderManagedToolSlots(){const e=[...new Set(this.resolvedToolItems.map((e=>e.id)))].sort();return e.flatMap((e=>[i("div",{key:`tool:${e}`,class:"shell-app__tool-slot-proxy",slot:e},i("slot",{name:e})),i("div",{key:`tool-view:${e}`,class:"shell-app__tool-slot-proxy",slot:`${e}-view`},i("slot",{name:`${e}-view`}))]))}renderManagedTools(){const e=this.tools;return i("ds-shell-tools",{responsiveMode:this.resolvedMode,open:this.managedToolsOpen,activeTool:this.managedActiveTool,presentation:this.managedToolPresentation,fullscreenHeaderMode:e.fullscreenHeaderMode??"shared",items:this.resolvedToolItems,accessories:e.accessories??[],headers:e.headers??{},storageKey:e.storageKey??"",toolsLabel:e.toolsLabel??"Tools",toolShortcutsLabel:e.toolShortcutsLabel??"Tool shortcuts",inboxLabel:e.inboxLabel??"Inbox",inboxNavigationLabel:e.inboxNavigationLabel??"Inbox sections",onDsToolChange:this.handleManagedToolChange,onDsPresentationChange:this.handleManagedPresentationChange,onDsHeaderBack:this.handleManagedHeaderBack,onDsHeaderAction:this.handleManagedHeaderAction,onDsRailAccessoryAction:this.handleManagedRailAccessoryAction},this.renderManagedToolSlots())}renderManagedMobileSheetNav(){const e=this.navigation;return i("ds-mobile-sheet-nav",{open:this.managedMobileSheetNavOpen,presentation:this.sectionNavigation==="panel"?"nested":"flat",browseContext:this.managedBrowseContext,dashboardGroups:e.dashboardGroups??e.groups??[],settingsGroups:e.settingsGroups??[],currentUrl:e.currentUrl??this.pageChrome.currentUrl??"",routeSelectionActive:this.managedMobileDestination==="area",navigationLabel:e.navigationLabel??"Application navigation",dashboardLabel:e.dashboardLabel??"Dashboard",settingsLabel:e.settingsLabel??"Settings",accountLabel:e.accountLabel??"Account",showAccount:e.showMobileAccount??true,onDsAreaSelect:this.handleManagedAreaSelect,onDsNavChildSelect:this.handleManagedMobileChildSelect,onDsBrowseContextChange:this.handleManagedBrowseContext,onDsClose:this.handleManagedSheetClose})}renderManagedMobileBarNav(){const e=e=>this.resolvedToolItems.find((s=>s.id===e));const s=(s,t)=>e(s)?.ariaLabel??e(s)?.label??t;const t=this.resolvedToolItems.some((e=>!e.isInactive&&e.mobileDestination==="activity"));return i("ds-mobile-bar-nav",{hidden:this.tools.mobileBarHidden??false,activeDestination:this.managedMobileDestination,primaryDestination:this.managedMobilePrimaryDestination,currentArea:this.currentArea,sheetNavExpanded:this.managedMobileSheetNavOpen,searchLabel:s("search","Search"),activityMode:t?"direct":"inbox",activityLabel:s("activity","Activity"),inboxLabel:this.tools.inboxLabel??"Inbox",messagesLabel:s("messages","Messages"),agentsLabel:s("agents","Agents"),helpLabel:s("help","Help & Support"),searchDot:this.toolDot("search"),activityDot:this.toolDot("activity"),inboxDot:this.toolDot("stacks")||this.toolDot("activity"),messagesDot:this.toolDot("messages"),agentsDot:this.toolDot("agents"),onDsSheetNavToggle:this.handleManagedSheetToggle,onDsDestinationChange:this.handleManagedMobileDestination})}renderManagedMobileLeading(){if(!this.pageChrome.showBack){return i("slot",{name:"page-header-leading",slot:"leading"})}return[i("ds-tooltip",{slot:"leading",label:this.pageChrome.backAriaLabel??"Back",side:"bottom",size:"sm"},i("ds-button-unfilled",{variant:"icon",icon:this.pageChrome.backIcon??"ChevronLeft",size:"lg","aria-label":this.pageChrome.backAriaLabel??"Back",activeFill:false,hasBorder:false,onDsClick:e=>this.dsPageBack.emit(e.detail)})),i("slot",{name:"page-header-leading",slot:"leading"})]}renderManagedMobileActions(){const e=this.pageChrome.mobileActions??[];const s=r(this.resolvedHeaderActions,"mobile");return[...e.map((e=>i("ds-tooltip",{slot:"trailing",key:e.id,label:e.ariaLabel,side:"bottom",size:"sm"},i("ds-button-unfilled",{id:e.triggerId||undefined,variant:"icon",icon:e.icon,size:"lg","aria-label":e.ariaLabel,haspopup:e.haspopup,controls:e.controls,expanded:e.expanded,surfaceOpen:e.surfaceOpen,pressed:e.pressed,isInactive:e.isInactive,activeFill:false,hasBorder:false,onDsClick:()=>this.dsPageAction.emit(e.id)})))),...s.map((e=>{if(e.type!=="icon")return null;const s=(e.appearance??"unfilled")==="filled"?i("ds-button-filled",{variant:"icon",icon:e.icon,"aria-label":e.ariaLabel,size:"lg",intent:e.intent??"brand",contrast:e.contrast??"bold",isInactive:e.isInactive,isLoading:e.isLoading,onDsClick:()=>this.dsPageAction.emit(e.id)}):i("ds-button-unfilled",{variant:"icon",icon:e.icon,"aria-label":e.ariaLabel,size:"lg",isInactive:e.isInactive,isLoading:e.isLoading,activeFill:false,hasBorder:false,onDsClick:()=>this.dsPageAction.emit(e.id)});return i("ds-tooltip",{slot:"trailing",key:e.id,label:e.label,side:"bottom",size:"sm"},s)})),...this.mobileActionMenuSections.length>0?[i("ds-tooltip",{slot:"trailing",label:"Page options",side:"bottom",size:"sm"},i("ds-button-unfilled",{ref:e=>{this.mobileActionTriggerEl=e??null},id:this.mobileActionMenuTriggerId,variant:"icon",icon:"Ellipses","aria-label":this.pageChrome.actionsAriaLabel??"More page actions",size:"lg",activeFill:false,hasBorder:false,haspopup:"menu",controls:this.mobileActionMenuId,expanded:this.mobileActionMenuOpen,surfaceOpen:this.mobileActionSurfaceOpen,onDsClick:e=>{this.mobileActionMenuInitialFocusVisible=e.detail.detail===0;this.mobileActionMenuOpen=!this.mobileActionMenuOpen;if(this.mobileActionMenuOpen)this.mobileActionSurfaceOpen=true}}))]:[],i("slot",{name:"page-header-trailing",slot:"trailing"})]}get resolvedHeaderActions(){return p(this.pageChrome.actionItems,this.pageChrome.primaryAction??null,this.pageChrome.actions??[])}get mobileActionMenuSections(){return d(this.resolvedHeaderActions,"mobile")}renderManagedMobileActionMenu(){if(this.mobileActionMenuSections.length===0)return null;return i("ds-menu",{id:this.mobileActionMenuId,anchorId:this.mobileActionMenuTriggerId,align:"end",menuLabel:this.pageChrome.actionsAriaLabel??"More page actions",open:this.mobileActionMenuOpen,initialFocusVisible:this.mobileActionMenuInitialFocusVisible,sections:this.mobileActionMenuSections,onDsClose:this.closeMobileActionMenu,onDsAfterClose:()=>{if(!this.mobileActionMenuOpen)this.mobileActionSurfaceOpen=false},onDsSelect:this.handleMobileActionSelect})}get barTitleSections(){return(this.pageChrome.subsections??[]).map((e=>"type"in e?{type:"divider"}:{id:e.id,label:e.label,isInactive:e.isInactive}))}renderManagedBarPageTitle(){const e=this.pageChrome;return i("ds-bar-page-title",{ref:s=>{if(s){s.actionItems=e.actionItems}},heading:e.heading??"",showBack:e.showBack??false,backAriaLabel:e.backAriaLabel??"Back",sections:this.barTitleSections,value:e.subvalue??"",sectionsAriaLabel:e.subsectionsAriaLabel??"Change page subsection",primaryAction:e.primaryAction??null,actions:e.actions??[],actionsAriaLabel:e.actionsAriaLabel??"More page actions",showDivider:e.showHeaderDivider??true,showCompactDivider:e.showCompactHeaderDivider,onDsBack:this.handleManagedPageBack,onDsSectionChange:this.handleManagedSubsectionChange,onDsAction:this.handleManagedPageAction})}renderManagedBarTitle(e){const s=this.pageChrome;return i("ds-bar-title",{ref:e=>{if(e){e.actionItems=s.actionItems}},slot:e==="page"?"header":undefined,placement:e,variant:e==="shell-bar"?"compact":"expanded",heading:s.heading??"",description:s.description??"",showBack:s.showBack??false,backAriaLabel:s.backAriaLabel??"Back",backLabel:s.backLabel??"Back",breadcrumbs:s.breadcrumbs??[],breadcrumbAriaLabel:s.breadcrumbAriaLabel??"Breadcrumb",sections:this.barTitleSections,value:s.subvalue??"",sectionsAriaLabel:s.subsectionsAriaLabel??"Change page subsection",primaryAction:s.primaryAction??null,actions:s.actions??[],actionsAriaLabel:s.actionsAriaLabel??"More page actions",showDivider:s.showHeaderDivider??true,showCompactDivider:s.showCompactHeaderDivider,onDsBack:this.handleManagedPageBack,onDsBreadcrumbSelect:this.handleManagedBreadcrumbSelect,onDsSectionChange:this.handleManagedSubsectionChange,onDsAction:this.handleManagedPageAction})}renderManagedPage(){const e=this.pageChrome;const s=this.sectionNavigation==="panel";const t=e.showBack||s?[]:this.resolvedPageTabs;return[i("ds-shell-page",{responsiveMode:this.resolvedMode,headerCapacity:w(this.resolvedMode),headerPresentation:e.headerPresentation??"auto",desktopHeaderPlacement:this.sectionNavigation==="panel"?"shell-bar":"page",contentInset:e.contentInset??"default",contentInsetBlockStart:e.contentInsetBlockStart??"default",contentInsetBlockStartSize:e.contentInsetBlockStartSize,compactContentInsetBlockStartSize:e.compactContentInsetBlockStartSize,scrollCompaction:e.scrollCompaction??true,contentSurface:e.contentSurface??"primary"},this.sectionNavigation==="bar"?this.renderManagedBarTitle("page"):null,i("ds-mobile-header",{slot:"mobile-header",heading:e.heading??"",headingLevel:e.headingLevel??"h1",sections:t,value:e.showBack?"":e.value??"",sectionsAriaLabel:e.sectionsAriaLabel??"Change page section",subsections:e.subsections??[],subsectionsPlacement:e.showBack||s?"combined":"below",subvalue:e.subvalue??"",subsectionsAriaLabel:e.subsectionsAriaLabel??"Change page subsection",tone:e.tone??"default",onDsSectionChange:this.handleManagedTabChange,onDsSubsectionChange:this.handleManagedSubsectionChange},this.renderManagedMobileLeading(),this.renderManagedMobileActions()),i("slot",null)),this.renderManagedMobileActionMenu()]}renderSlottedShell(e,s,t,n,l){return i(a,{class:e,"responsive-mode":this.resolvedMode},i("div",{class:"shell-app__banner"},i("slot",{name:"banner"})),i("div",{class:"shell-app__row"},i("div",{class:"shell-app__chrome","aria-hidden":"true"},this.renderPaperTexture()),i("div",{class:"shell-app__panel","aria-hidden":l?"true":undefined,inert:l?true:undefined},i("slot",{name:"panel"})),i("div",{class:"shell-app__main"},i("div",{class:"shell-app__bar","aria-hidden":l?"true":undefined,inert:l?true:undefined},i("slot",{name:"bar"})),i("div",{class:"shell-app__tools","data-ds-overlay-boundary":l?undefined:true,"aria-hidden":s&&(!t||this.mobileSheetNavOpen)?"true":undefined,inert:s&&(!t||this.mobileSheetNavOpen)?true:undefined,hidden:s&&!t},i("slot",{name:"tools"})),i("div",{class:"shell-app__content","data-ds-overlay-boundary":true,"aria-hidden":l||n?"true":undefined,inert:l||n?true:undefined,tabIndex:0},i("slot",null)),i("div",{class:"shell-app__mobile-sheet-nav",hidden:!s||!this.mobileSheetNavOpen,"aria-hidden":s&&this.mobileSheetNavOpen?undefined:"true",inert:s&&this.mobileSheetNavOpen?undefined:true},i("slot",{name:"mobile-sheet-nav"})),i("div",{class:"shell-app__mobile-bar-nav",hidden:!s},i("slot",{name:"mobile-bar-nav"})))))}render(){const e=this.chromeLayerActive();const s=this.gradientLayerActive();const t=this.paperTextureLayerActive();const n=this.resolvedMode==="mobile";const l=n&&this.effectiveMobileDestination!=="area";const o=n&&(l||this.effectiveMobileSheetNavOpen);const h=!n&&this.toolsFullscreen;const r={"shell-app":true,"shell-app--chrome":e,"shell-app--gradient":s,"shell-app--paper-texture":t,[`shell-app--${this.navStyle}`]:true,[`shell-app--${this.resolvedMode}`]:true,"shell-app--tools-fullscreen":h,"shell-app--mobile-tool-active":l,"shell-app--mobile-sheet-nav-open":n&&this.effectiveMobileSheetNavOpen,"shell-app--managed":this.managed,"shell-app--slotted":!this.managed};if(!this.managed){return this.renderSlottedShell(r,n,l,o,h)}return i(a,{class:r,"responsive-mode":this.resolvedMode},i("div",{class:"shell-app__banner"},i("slot",{name:"banner"})),i("div",{class:"shell-app__row"},i("div",{class:"shell-app__chrome","aria-hidden":"true"},this.renderPaperTexture()),i("div",{class:"shell-app__panel","aria-hidden":h?"true":undefined,inert:h?true:undefined},this.renderManagedPanelNav()),i("div",{class:"shell-app__main"},i("div",{class:"shell-app__bar","aria-hidden":h?"true":undefined,inert:h?true:undefined},this.renderManagedTopBar()),i("div",{class:"shell-app__tools","data-ds-overlay-boundary":h?undefined:true,"aria-hidden":n&&(!l||this.effectiveMobileSheetNavOpen)?"true":undefined,inert:n&&(!l||this.effectiveMobileSheetNavOpen)?true:undefined,hidden:n&&!l},this.renderManagedTools()),i("div",{class:"shell-app__content","data-ds-overlay-boundary":true,"aria-hidden":h||o?"true":undefined,inert:h||o?true:undefined,tabIndex:0},this.renderManagedPage()),i("div",{class:"shell-app__mobile-sheet-nav",hidden:!n||!this.effectiveMobileSheetNavOpen,"aria-hidden":n&&this.effectiveMobileSheetNavOpen?undefined:"true",inert:n&&this.effectiveMobileSheetNavOpen?undefined:true},this.renderManagedMobileSheetNav()),i("div",{class:"shell-app__mobile-bar-nav",hidden:!n},this.renderManagedMobileBarNav()))))}get el(){return this}static get watchers(){return{navStyle:[{onShellPropsChange:0}],gradientPreset:[{onShellPropsChange:0}],paperTexture:[{onShellPropsChange:0}],sectionNavigation:[{onShellPropsChange:0}],navigation:[{handleNavigationChange:0}],pageChrome:[{handlePageChromeChange:0}],tools:[{handleToolsChange:0}],mobileDestination:[{onMobileStateChange:0}],mobileSheetNavOpen:[{onMobileStateChange:0}]}}static get style(){return Se()}},[262,"ds-shell-app",{composition:[513],navigation:[16],sectionNavigation:[513,"section-navigation"],pageChrome:[16],tools:[16],navStyle:[513,"nav-style"],gradientPreset:[513,"gradient-preset"],paperTexture:[16],shortcutsEnabled:[4,"shortcuts-enabled"],mobileDestination:[1,"mobile-destination"],mobileSheetNavOpen:[4,"mobile-sheet-nav-open"],toolsFullscreen:[32],resolvedMode:[32],managedToolsOpen:[32],managedActiveTool:[32],managedToolPresentation:[32],managedMobileDestination:[32],managedMobilePrimaryDestination:[32],managedMobileSheetNavOpen:[32],managedInboxTool:[32],managedBrowseContext:[32],mobileActionMenuOpen:[32],mobileActionSurfaceOpen:[32],mobileActionMenuInitialFocusVisible:[32],activateTool:[64],closeGlobalSurface:[64],setToolPresentation:[64]},[[0,"dsPresentationChange","handleToolsPresentation"],[10,"keydown","handleWindowKeyDown"]],{navStyle:[{onShellPropsChange:0}],gradientPreset:[{onShellPropsChange:0}],paperTexture:[{onShellPropsChange:0}],sectionNavigation:[{onShellPropsChange:0}],navigation:[{handleNavigationChange:0}],pageChrome:[{handlePageChromeChange:0}],tools:[{handleToolsChange:0}],mobileDestination:[{onMobileStateChange:0}],mobileSheetNavOpen:[{onMobileStateChange:0}]}]);Me.FOREGROUND_REFRESH_MS=50;function Ae(){if(typeof customElements==="undefined"){return}const e=["ds-shell-app","ds-badge","ds-bar-nav","ds-bar-page-title","ds-bar-title","ds-breadcrumb","ds-button-filled","ds-button-unfilled","ds-divider","ds-icon","ds-loader","ds-menu","ds-mobile-bar-nav","ds-mobile-header","ds-mobile-section-switcher","ds-mobile-sheet-nav","ds-panel-nav","ds-panel-tool-header","ds-panel-tools","ds-paper-texture","ds-shell-page","ds-shell-tools","ds-swatch-picker","ds-switch","ds-tab-group","ds-tag","ds-text","ds-tooltip"];e.forEach((e=>{switch(e){case"ds-shell-app":if(!customElements.get(n(e))){customElements.define(n(e),Me)}break;case"ds-badge":if(!customElements.get(n(e))){C()}break;case"ds-bar-nav":if(!customElements.get(n(e))){S()}break;case"ds-bar-page-title":if(!customElements.get(n(e))){D()}break;case"ds-bar-title":if(!customElements.get(n(e))){M()}break;case"ds-breadcrumb":if(!customElements.get(n(e))){A()}break;case"ds-button-filled":if(!customElements.get(n(e))){L()}break;case"ds-button-unfilled":if(!customElements.get(n(e))){P()}break;case"ds-divider":if(!customElements.get(n(e))){T()}break;case"ds-icon":if(!customElements.get(n(e))){B()}break;case"ds-loader":if(!customElements.get(n(e))){j()}break;case"ds-menu":if(!customElements.get(n(e))){z()}break;case"ds-mobile-bar-nav":if(!customElements.get(n(e))){E()}break;case"ds-mobile-header":if(!customElements.get(n(e))){N()}break;case"ds-mobile-section-switcher":if(!customElements.get(n(e))){I()}break;case"ds-mobile-sheet-nav":if(!customElements.get(n(e))){F()}break;case"ds-panel-nav":if(!customElements.get(n(e))){$()}break;case"ds-panel-tool-header":if(!customElements.get(n(e))){O()}break;case"ds-panel-tools":if(!customElements.get(n(e))){o()}break;case"ds-paper-texture":if(!customElements.get(n(e))){H()}break;case"ds-shell-page":if(!customElements.get(n(e))){G()}break;case"ds-shell-tools":if(!customElements.get(n(e))){V()}break;case"ds-swatch-picker":if(!customElements.get(n(e))){R()}break;case"ds-switch":if(!customElements.get(n(e))){W()}break;case"ds-tab-group":if(!customElements.get(n(e))){J()}break;case"ds-tag":if(!customElements.get(n(e))){q()}break;case"ds-text":if(!customElements.get(n(e))){U()}break;case"ds-tooltip":if(!customElements.get(n(e))){K()}break}}))}Ae();const Le=Me;const Pe=Ae;export{Le as DsShellApp,Pe as defineCustomElement};
|
|
1
|
+
import{p as e,H as s,c as t,h as i,a,t as n}from"./index.js";import{c as l,d as o}from"./p-CdgOLWX9.js";import{f as h,v as r,j as p,o as d}from"./p-Cc3ZUQlJ.js";import{g as c,c as u,a as b,b as m,r as f}from"./p-BxduVc5g.js";import{i as g,b as v,c as _,r as y,S as k,d as w}from"./p-CgGcgMjs.js";import{c as x}from"./p-CqW2eyiF.js";import{d as C}from"./p-ZhP2tVmM.js";import{d as S}from"./p-C-3YqeTb.js";import{d as D}from"./p-Do2FJd1y.js";import{d as M}from"./p-BciTtTwx.js";import{d as L}from"./p-E5W27Fu_.js";import{d as A}from"./p-CiH4GG6r.js";import{d as P}from"./p-Dzndkdx5.js";import{d as T}from"./p-7V1AhetH.js";import{d as B}from"./p-DjkUFlDW.js";import{d as j}from"./p-0XTyQNRG.js";import{d as z}from"./p-BKZdqJQB.js";import{d as E}from"./p-D1vQGJzc.js";import{d as N}from"./p-CiJ1WR11.js";import{d as I}from"./p-BhJXmuRA.js";import{d as F}from"./p-Dfs98tpL.js";import{d as $}from"./p-etifxiDc.js";import{d as O}from"./p-CmexIVnE.js";import{d as H}from"./p-xdmJCPCg.js";import{d as G}from"./p-Bm7rqs3C.js";import{d as V}from"./p-Dn9QHL4O.js";import{d as R}from"./p-Bn8I7iw6.js";import{d as W}from"./p-D0y7Sja6.js";import{d as J}from"./p-DHICPS4n.js";import{d as q}from"./p-D922f6Tb.js";import{d as U}from"./p-DwbcNDJF.js";import{d as K}from"./p-CYzFfFcH.js";const Q={k:"search",a:"agents",s:"stacks",m:"messages",n:"activity","/":"help"};function Z(e){return!e.metaKey&&!e.ctrlKey&&!e.altKey&&!e.shiftKey}function X(e){if(!e||typeof e!=="object")return false;if(!("closest"in e)||typeof e.closest!=="function")return false;const s=e;const t=s.closest('input, textarea, select, [contenteditable=""], [contenteditable="true"], [contenteditable="plaintext-only"]');if(t)return true;const i=s.getAttribute("role");if(i==="textbox"||i==="combobox"||i==="searchbox")return true;return Boolean(s.isContentEditable)}function Y(e){if(e.key==="["||e.code==="BracketLeft")return"[";if(e.key==="]"||e.code==="BracketRight")return"]";return e.key.length===1?e.key.toLowerCase():e.key.toLowerCase()}function ee(e){if(!Z(e))return null;const s=Y(e);if(s==="[")return"toggle-panel-nav";if(s==="]")return"close-panel-tools";const t=Q[s];if(t)return`open-tool:${t}`;return null}const se=["none","cool","neutral","warm","fresh"];const te="neutral";const ie={cool:{opacity:.1,stops:[{color:"var(--color-background-transparent)",position:0},{color:"var(--color-color-intent-blue-strong-background)",position:100}]},neutral:{opacity:.1,stops:[{color:"var(--color-background-transparent)",position:0},{color:"var(--color-color-intent-grey-strong-background)",position:100}]},warm:{opacity:.1,stops:[{color:"var(--color-background-transparent)",position:0},{color:"var(--color-color-intent-yellow-strong-background)",position:100}]},fresh:{opacity:.4,stops:[{color:"var(--color-color-intent-cyan-faint-background)",position:0},{color:"var(--color-background-transparent)",position:47},{color:"var(--color-background-transparent)",position:58},{color:"var(--color-color-intent-red-faint-background)",position:83},{color:"var(--color-color-intent-pink-faint-background)",position:100}]}};const ae="100% 100% at 0% 0%";function ne(e){const s=he(e);return s==="none"?null:ie[s]}function le(e){return String(ne(e)?.opacity??0)}function oe(e){return se.includes(e)}function he(e){return e!=null&&oe(e)?e:te}function re(e){const s=he(e);if(s==="none")return"none";return pe(ie[s].stops)}function pe(e){const s=e.map((e=>`${e.color} ${e.position}%`)).join(", ");return`radial-gradient(${ae}, ${s})`}const de="--ds-shell-gradient-image";const ce="--ds-shell-gradient-size";const ue="--ds-shell-gradient-position-panel";const be="--ds-shell-gradient-position-bar";const me="--ds-shell-gradient-opacity";function fe(e=te){return re(e)}function ge(e){const s=typeof globalThis.window!=="undefined"?globalThis.window:undefined;if(!s)return{width:0,height:0};const t=s.visualViewport;return{width:Math.round(t?.width??s.innerWidth),height:Math.round(t?.height??s.innerHeight)}}function ve(e){return`${Math.round(e.width)}px ${Math.round(e.height)}px`}function _e(){return"0 0"}function ye(e){return`${-Math.round(e)}px 0`}function ke(e,s){if(typeof document==="undefined")return 0;const t=document.createElement("div");t.style.cssText="position:absolute;visibility:hidden;pointer-events:none;height:0;width:var("+s+");";e.appendChild(t);const i=t.getBoundingClientRect().width;e.removeChild(t);return i}function we(e){return{expandedPx:ke(e,"--_nav-width"),collapsedPx:ke(e,"--_nav-width-collapsed")}}function xe(e,s){if(s?.classList.contains("panel-nav--collapsed"))return true;const t=e?.collapsed;return t===true}function Ce(e,s){return s?e.collapsedPx:e.expandedPx}const Se=()=>`.sc-ds-shell-app-h{display:flex;flex-direction:column;height:100%;min-height:0;box-sizing:border-box;overflow:hidden;overscroll-behavior:none;font-family:var(--typography-font-family-ui, system-ui);--ds-shell-panel-tools-width:var(--dimension-panel-width-xs);--ds-shell-gradient-context:flat}.sc-ds-shell-app-h{--_shell-chrome-bg:var(--color-background-secondary)}.shell-app--gradient.sc-ds-shell-app-h{--ds-shell-gradient-context:gradient}.shell-app__row.sc-ds-shell-app{display:flex;flex:1 1 0;min-height:0;position:relative}.shell-app__banner.sc-ds-shell-app{--_shell-banner-edge-display:none;flex:0 0 auto;min-width:0;position:relative;z-index:5}.shell-app__banner.sc-ds-shell-app-s>ds-banner,.shell-app__banner .sc-ds-shell-app-s>ds-banner{display:grid;width:100%}.shell-app__chrome.sc-ds-shell-app{position:absolute;inset:0;pointer-events:none;z-index:0;overflow:hidden;background-color:var(--_shell-chrome-bg)}.shell-app--gradient.sc-ds-shell-app-h .shell-app__chrome.sc-ds-shell-app::before{content:'';position:absolute;inset:0;pointer-events:none;background-position:0 0;background-attachment:fixed;z-index:1;opacity:var(--ds-shell-gradient-opacity, 1);background-image:var(--ds-shell-gradient-image, none);background-size:var(--ds-shell-gradient-size, auto);background-repeat:no-repeat}.shell-app__paper-texture.sc-ds-shell-app{z-index:2}.shell-app__panel.sc-ds-shell-app{flex:0 0 auto;min-height:0;height:100%;position:relative;z-index:2}.shell-app__panel.sc-ds-shell-app-s>ds-panel-nav,.shell-app__panel .sc-ds-shell-app-s>ds-panel-nav{display:block;height:100%}.shell-app__panel.sc-ds-shell-app>ds-panel-nav.sc-ds-shell-app{display:block;height:100%}.shell-app__main.sc-ds-shell-app{flex:1 1 auto;min-width:0;min-height:0;display:grid;grid-template-columns:minmax(0, 1fr) auto;grid-template-rows:auto minmax(0, 1fr);grid-template-areas:'bar tools' 'content tools';position:relative;z-index:1}.shell-app__mobile-sheet-nav.sc-ds-shell-app,.shell-app__mobile-bar-nav.sc-ds-shell-app{display:none}.shell-app__bar.sc-ds-shell-app{grid-area:bar;flex:0 0 auto;min-width:0}.shell-app__bar.sc-ds-shell-app-s>ds-bar-nav,.shell-app__bar .sc-ds-shell-app-s>ds-bar-nav{display:block}.shell-app__bar.sc-ds-shell-app-s>ds-bar-title,.shell-app__bar .sc-ds-shell-app-s>ds-bar-title,.shell-app__bar.sc-ds-shell-app-s>ds-bar-page-title,.shell-app__bar .sc-ds-shell-app-s>ds-bar-page-title{display:block}.shell-app__bar.sc-ds-shell-app>ds-bar-nav.sc-ds-shell-app{display:block}.shell-app__bar.sc-ds-shell-app>ds-bar-title.sc-ds-shell-app,.shell-app__bar.sc-ds-shell-app>ds-bar-page-title.sc-ds-shell-app{display:block}.shell-app__content.sc-ds-shell-app{grid-area:content;flex:1 1 auto;min-width:0;min-height:0;overflow:auto;overscroll-behavior:none;contain:layout}.shell-app__content.sc-ds-shell-app:focus,.shell-app__content.sc-ds-shell-app:focus-visible{outline:none}.shell-app__content.sc-ds-shell-app{position:relative;z-index:1;background-color:var(--color-background-primary)}.shell-app__tools.sc-ds-shell-app{grid-area:tools;flex:0 0 auto;min-width:0;min-height:0;height:100%;display:flex;position:relative;z-index:0;overflow:hidden}.shell-app__tools.sc-ds-shell-app-s>ds-panel-tools,.shell-app__tools .sc-ds-shell-app-s>ds-panel-tools{display:block;height:100%;min-height:0}.shell-app__tools.sc-ds-shell-app-s>ds-shell-tools,.shell-app__tools .sc-ds-shell-app-s>ds-shell-tools{display:block;height:100%;min-height:0}.shell-app__tools.sc-ds-shell-app>ds-shell-tools.sc-ds-shell-app{display:block;height:100%;min-height:0}.shell-app__tool-slot-proxy.sc-ds-shell-app{display:block;width:100%;height:100%;min-width:0;min-height:0}.shell-app__content.sc-ds-shell-app>ds-shell-page.sc-ds-shell-app{display:block;min-height:100%}.shell-app--tools-fullscreen.sc-ds-shell-app-h .shell-app__row.sc-ds-shell-app{contain:layout}.shell-app--tools-fullscreen.sc-ds-shell-app-h .shell-app__main.sc-ds-shell-app{z-index:3}.shell-app--tools-fullscreen.sc-ds-shell-app-h .shell-app__tools.sc-ds-shell-app{z-index:2}.shell-app--tools-fullscreen.sc-ds-shell-app-h .shell-app__panel.sc-ds-shell-app,.shell-app--tools-fullscreen.sc-ds-shell-app-h .shell-app__bar.sc-ds-shell-app,.shell-app--tools-fullscreen.sc-ds-shell-app-h .shell-app__content.sc-ds-shell-app{visibility:hidden;content-visibility:hidden}.shell-app--mobile.sc-ds-shell-app-h{--_shell-chrome-bg:var(--color-background-primary);padding-block-start:env(safe-area-inset-top);background:var(--ds-shell-safe-area-background, var(--color-background-primary))}.shell-app--mobile.sc-ds-shell-app-h .shell-app__banner.sc-ds-shell-app{--_shell-banner-edge-display:block}.shell-app--mobile.shell-app--foreground-refresh.sc-ds-shell-app-h .shell-app__main.sc-ds-shell-app{transform:translateZ(0)}.shell-app--mobile.sc-ds-shell-app-h .shell-app__chrome.sc-ds-shell-app,.shell-app--mobile.sc-ds-shell-app-h .shell-app__panel.sc-ds-shell-app,.shell-app--mobile.sc-ds-shell-app-h .shell-app__bar.sc-ds-shell-app{display:none}.shell-app--mobile.sc-ds-shell-app-h .shell-app__main.sc-ds-shell-app{width:100%;box-sizing:border-box;grid-template-columns:minmax(0, 1fr);grid-template-rows:minmax(0, 1fr) auto;grid-template-areas:'stage' 'mobile-bar-nav';background:var(--color-background-primary)}.shell-app--mobile.sc-ds-shell-app-h .shell-app__content.sc-ds-shell-app,.shell-app--mobile.sc-ds-shell-app-h .shell-app__tools.sc-ds-shell-app,.shell-app--mobile.sc-ds-shell-app-h .shell-app__mobile-sheet-nav.sc-ds-shell-app{grid-area:stage;min-width:0;min-height:0;height:100%;position:relative}.shell-app--mobile.sc-ds-shell-app-h .shell-app__content.sc-ds-shell-app{z-index:1;overflow:auto}.shell-app--mobile.sc-ds-shell-app-h .shell-app__tools.sc-ds-shell-app{z-index:2;width:100%;overflow:hidden;background:var(--color-background-primary)}.shell-app--mobile.sc-ds-shell-app-h .shell-app__mobile-sheet-nav.sc-ds-shell-app{display:block;z-index:3;overflow:hidden;background:var(--color-background-primary)}.shell-app--mobile.sc-ds-shell-app-h .shell-app__mobile-bar-nav.sc-ds-shell-app{grid-area:mobile-bar-nav;display:block;min-width:0;position:relative;z-index:4}.shell-app--mobile.sc-ds-shell-app-h .shell-app__tools[hidden].sc-ds-shell-app,.shell-app--mobile.sc-ds-shell-app-h .shell-app__mobile-sheet-nav[hidden].sc-ds-shell-app,.shell-app--mobile.sc-ds-shell-app-h .shell-app__mobile-bar-nav[hidden].sc-ds-shell-app{display:none}.shell-app--mobile-tool-active.sc-ds-shell-app-h .shell-app__content.sc-ds-shell-app,.shell-app--mobile-sheet-nav-open.sc-ds-shell-app-h .shell-app__content.sc-ds-shell-app,.shell-app--mobile-sheet-nav-open.sc-ds-shell-app-h .shell-app__tools.sc-ds-shell-app{visibility:hidden}`;let De=0;const Me=e(class e extends s{constructor(e){super();if(e!==false){this.__registerHost()}this.dsResponsiveModeChange=t(this,"dsResponsiveModeChange",7);this.dsNavSelect=t(this,"dsNavSelect",7);this.dsTabChange=t(this,"dsTabChange",7);this.dsNavChildSelect=t(this,"dsNavChildSelect",7);this.dsSubsectionChange=t(this,"dsSubsectionChange",7);this.dsPageBack=t(this,"dsPageBack",7);this.dsBreadcrumbSelect=t(this,"dsBreadcrumbSelect",7);this.dsPageAction=t(this,"dsPageAction",7);this.dsToolChange=t(this,"dsToolChange",7);this.dsHeaderBack=t(this,"dsHeaderBack",7);this.dsHeaderAction=t(this,"dsHeaderAction",7);this.dsRailAccessoryAction=t(this,"dsRailAccessoryAction",7);this.dsPresentationChange=t(this,"dsPresentationChange",7);this.dsBrowseContextChange=t(this,"dsBrowseContextChange",7);this.dsNavFooterAction=t(this,"dsNavFooterAction",7);this.dsNavUserAction=t(this,"dsNavUserAction",7);this.composition="managed";this.navigation={};this.sectionNavigation="bar";this.pageChrome={};this.tools={};this.navStyle="dashboard";this.gradientPreset=te;this.shortcutsEnabled=true;this.mobileDestination="area";this.mobileSheetNavOpen=false;this.toolsFullscreen=false;this.resolvedMode="desktop";this.managedToolsOpen=false;this.managedActiveTool="";this.managedToolPresentation="drawer";this.managedMobileDestination="area";this.managedMobilePrimaryDestination="area";this.managedMobileSheetNavOpen=false;this.managedInboxTool="";this.managedBrowseContext="dashboard";this.mobileActionMenuOpen=false;this.mobileActionSurfaceOpen=false;this.mobileActionMenuInitialFocusVisible=false;this.instanceId=De++;this.mobileActionMenuTriggerId=`shell-app-mobile-action-trigger-${this.instanceId}`;this.mobileActionMenuId=`shell-app-mobile-action-menu-${this.instanceId}`;this.mobileActionTriggerEl=null;this.resizeObserver=null;this.hasLoaded=false;this.foregroundRefreshTimer=null;this.panelNavTransition=new c;this.chromeSyncCoalescer=u((()=>this.syncChrome()));this.panelWidthTokens={expandedPx:0,collapsedPx:0};this.cachedViewportWidth=0;this.cachedViewportHeight=0;this.onWindowResize=()=>{this.updateResponsiveMode();if(this.panelNavTransition.isActive)return;this.scheduleChromeSync()};this.onVisualViewportChange=()=>{if(this.panelNavTransition.isActive)return;this.scheduleChromeSync()};this.onChromeTransitionStart=e=>{const s=f(e);if(s!=="panel-nav")return;this.panelNavTransition.enter();const t=ge();this.cachedViewportWidth=t.width;this.cachedViewportHeight=t.height;this.syncChrome()};this.onChromeTransitionEnd=e=>{const s=f(e);if(s!=="panel-nav")return;this.panelNavTransition.exit();if(!this.panelNavTransition.isActive){this.scheduleChromeSync()}};this.onDocumentVisibilityChange=()=>{if(!document.hidden)this.refreshAfterForegroundRestore()};this.onPageShow=e=>{if(e.persisted)this.refreshAfterForegroundRestore()};this.handleManagedNavSelect=e=>{e.stopPropagation();this.dsNavSelect.emit(e.detail)};this.handleManagedNavChildSelect=e=>{e.stopPropagation();this.dsNavChildSelect.emit(e.detail)};this.handleManagedTabChange=e=>{e.stopPropagation();this.dsTabChange.emit(e.detail)};this.handleManagedPageBack=e=>{e.stopPropagation();this.dsPageBack.emit(e.detail)};this.handleManagedBreadcrumbSelect=e=>{e.stopPropagation();const s=this.dsBreadcrumbSelect.emit(e.detail);if(s.defaultPrevented)e.preventDefault()};this.handleManagedSubsectionChange=e=>{e.stopPropagation();this.dsSubsectionChange.emit(e.detail)};this.handleManagedPageAction=e=>{e.stopPropagation();this.dsPageAction.emit(e.detail)};this.handleManagedToolChange=e=>{e.stopPropagation();const{id:s,selected:t}=e.detail;this.managedActiveTool=s;this.managedToolsOpen=t;const i=this.resolvedToolItems.find((e=>e.id===s));if(i&&g(i)){this.managedInboxTool=s}this.managedMobileDestination=t?i?.mobileDestination??v(true,s):"area";this.managedMobileSheetNavOpen=false;this.dsToolChange.emit(e.detail)};this.handleManagedPresentationChange=e=>{e.stopPropagation();this.managedToolPresentation=e.detail.presentation;this.toolsFullscreen=e.detail.presentation==="fullscreen";this.dsPresentationChange.emit(e.detail)};this.handleManagedHeaderBack=e=>{e.stopPropagation();this.dsHeaderBack.emit(e.detail)};this.handleManagedHeaderAction=e=>{e.stopPropagation();this.dsHeaderAction.emit(e.detail)};this.handleManagedRailAccessoryAction=e=>{e.stopPropagation();this.dsRailAccessoryAction.emit(e.detail)};this.handleManagedSheetToggle=e=>{e.stopPropagation();this.managedMobileSheetNavOpen=e.detail};this.handleManagedMobileDestination=e=>{e.stopPropagation();const s=e.detail.destination;this.managedMobileSheetNavOpen=false;this.managedMobileDestination=s;if(s==="area"){this.managedToolsOpen=false;return}this.activateManagedMobileTool(s)};this.handleManagedAreaSelect=e=>{e.stopPropagation();if(e.detail==="help"){this.managedMobileSheetNavOpen=false;this.managedMobileDestination="help";if(this.activateManagedMobileTool("help"))return}this.managedMobileSheetNavOpen=false;this.managedMobileDestination="area";this.managedMobilePrimaryDestination="area";this.managedToolsOpen=false;this.dsNavSelect.emit(e.detail)};this.handleManagedMobileChildSelect=e=>{e.stopPropagation();this.managedMobileSheetNavOpen=false;this.managedMobileDestination="area";this.managedMobilePrimaryDestination="area";this.managedToolsOpen=false;this.dsNavChildSelect.emit(e.detail)};this.handleManagedBrowseContext=e=>{e.stopPropagation();this.managedBrowseContext=e.detail;this.dsBrowseContextChange.emit(e.detail)};this.handleManagedSheetClose=e=>{e.stopPropagation();this.managedMobileSheetNavOpen=false};this.handleManagedNavFooterAction=e=>{e.stopPropagation();this.dsNavFooterAction.emit()};this.handleManagedNavUserAction=e=>{e.stopPropagation();this.dsNavUserAction.emit(e.detail)};this.closeMobileActionMenu=()=>{this.mobileActionMenuOpen=false};this.handleMobileActionSelect=e=>{const s=String(e.detail.value??"");const t=h(this.resolvedHeaderActions,s);if(!t||t.isInactive||"isLoading"in t&&t.isLoading)return;this.mobileActionMenuOpen=false;this.dsPageAction.emit(s);requestAnimationFrame((()=>void this.mobileActionTriggerEl?.setFocus?.()))}}get managed(){return this.composition==="managed"}get effectiveMobileDestination(){return this.managed?this.managedMobileDestination:this.mobileDestination}get effectiveMobileSheetNavOpen(){return this.managed?this.managedMobileSheetNavOpen:this.mobileSheetNavOpen}get resolvedNavigationGroups(){if(this.navigation.groups?.length)return this.navigation.groups;return this.managedBrowseContext==="settings"?this.navigation.settingsGroups??[]:this.navigation.dashboardGroups??[]}get resolvedToolItems(){return this.tools.items??l}get resolvedPageTabs(){const e=this.currentArea.children;if(!e?.length)return this.pageChrome.tabs??[];return e.map((e=>({id:e.id,label:e.label,dot:e.dot,isInactive:e.isInactive})))}get availableInboxTools(){return this.resolvedToolItems.filter((e=>!e.isInactive&&g(e))).map((e=>e.id))}componentWillLoad(){if(typeof window!=="undefined"){this.resolvedMode=_(window.innerWidth)}this.managedBrowseContext=this.navigation.browseContext??this.navStyle;this.managedMobileDestination=this.mobileDestination;this.managedMobileSheetNavOpen=this.mobileSheetNavOpen;this.managedInboxTool=y("",this.availableInboxTools)}componentDidLoad(){this.hasLoaded=true;this.syncSlottedNavStyle();this.syncSlottedMobileState();this.connectMetricsObserver();this.connectViewportListeners();this.connectPageLifecycleListeners();this.el.addEventListener(b,this.onChromeTransitionStart);this.el.addEventListener(m,this.onChromeTransitionEnd);requestAnimationFrame((()=>{this.cachePanelWidthTokens();this.scheduleChromeSync()}));const e=this.el.querySelector("ds-shell-tools, ds-panel-tools");this.toolsFullscreen=e?.getAttribute("presentation")==="fullscreen"}handleToolsPresentation(e){this.toolsFullscreen=e.detail?.presentation==="fullscreen"}disconnectedCallback(){this.resizeObserver?.disconnect();this.resizeObserver=null;this.disconnectViewportListeners();this.disconnectPageLifecycleListeners();this.cancelForegroundRefresh();this.chromeSyncCoalescer.cancel();this.el.removeEventListener(b,this.onChromeTransitionStart);this.el.removeEventListener(m,this.onChromeTransitionEnd)}onShellPropsChange(){this.syncSlottedNavStyle();this.scheduleChromeSync()}handleNavigationChange(e,s){this.managedBrowseContext=this.navigation.browseContext??this.navStyle;if(e.currentUrl!==s.currentUrl||e.activeId!==s.activeId){this.managedMobilePrimaryDestination="area"}}handlePageChromeChange(){if(this.mobileActionMenuSections.length===0){this.mobileActionMenuOpen=false;this.mobileActionSurfaceOpen=false}}handleToolsChange(){if(!this.resolvedToolItems.some((e=>e.id==="help"&&!e.isInactive))){this.managedMobilePrimaryDestination="area"}if(this.managedActiveTool&&!this.resolvedToolItems.some((e=>e.id===this.managedActiveTool))){this.managedToolsOpen=false;this.managedActiveTool="";this.managedMobileDestination="area"}this.managedInboxTool=y(this.managedInboxTool,this.availableInboxTools)}onMobileStateChange(e,t){if(this.managed){this.managedMobileDestination=this.mobileDestination;this.managedMobileSheetNavOpen=this.mobileSheetNavOpen}this.syncSlottedMobileState();if(t===true&&!this.effectiveMobileSheetNavOpen&&this.resolvedMode==="mobile"){requestAnimationFrame((()=>{const e=this.el.querySelector("ds-mobile-bar-nav");const t=document.activeElement;if(t instanceof s&&e?.contains(t))return;void e?.focusDestination?.("sheet-nav")}))}}updateResponsiveMode(){if(typeof window==="undefined")return;const e=_(window.innerWidth);if(e===this.resolvedMode)return;this.resolvedMode=e;this.syncSlottedMobileState();this.scheduleChromeSync();if(this.hasLoaded)this.dsResponsiveModeChange.emit({mode:e})}scheduleChromeSync(){this.chromeSyncCoalescer.schedule()}syncSlottedNavStyle(){const e=this.el.querySelector("ds-panel-nav");const s=this.el.querySelector("ds-bar-nav");if(e){e.setAttribute("nav-style",this.navStyle);e.navStyle=this.navStyle}if(s){s.setAttribute("nav-style",this.navStyle);s.navStyle=this.navStyle}}syncSlottedMobileState(){const e=this.el.querySelector("ds-shell-tools");const s=this.el.querySelector("ds-mobile-bar-nav");const t=this.el.querySelector("ds-mobile-sheet-nav");if(e){e.setAttribute("responsive-mode",this.resolvedMode);e.responsiveMode=this.resolvedMode}if(s){s.activeDestination=this.effectiveMobileDestination;s.sheetNavExpanded=this.effectiveMobileSheetNavOpen}if(t){t.open=this.effectiveMobileSheetNavOpen}}connectMetricsObserver(){this.resizeObserver=new ResizeObserver((()=>{if(this.panelNavTransition.isActive)return;this.scheduleChromeSync()}));this.resizeObserver.observe(this.el);const e=this.el.querySelector(".shell-app__panel");if(e)this.resizeObserver.observe(e)}connectViewportListeners(){if(typeof window==="undefined")return;window.addEventListener("resize",this.onWindowResize,{passive:true});const e=window.visualViewport;if(e){e.addEventListener("resize",this.onVisualViewportChange,{passive:true});e.addEventListener("scroll",this.onVisualViewportChange,{passive:true})}}disconnectViewportListeners(){if(typeof window==="undefined")return;window.removeEventListener("resize",this.onWindowResize);const e=window.visualViewport;if(e){e.removeEventListener("resize",this.onVisualViewportChange);e.removeEventListener("scroll",this.onVisualViewportChange)}}connectPageLifecycleListeners(){if(typeof window==="undefined"||typeof document==="undefined")return;document.addEventListener("visibilitychange",this.onDocumentVisibilityChange);window.addEventListener("pageshow",this.onPageShow)}disconnectPageLifecycleListeners(){if(typeof window==="undefined"||typeof document==="undefined")return;document.removeEventListener("visibilitychange",this.onDocumentVisibilityChange);window.removeEventListener("pageshow",this.onPageShow)}cancelForegroundRefresh(){if(this.foregroundRefreshTimer!==null){window.clearTimeout(this.foregroundRefreshTimer);this.foregroundRefreshTimer=null}this.el.classList.remove("shell-app--foreground-refresh")}refreshAfterForegroundRestore(){this.updateResponsiveMode();this.syncSlottedMobileState();this.scheduleChromeSync();if(this.resolvedMode!=="mobile")return;this.cancelForegroundRefresh();this.el.classList.add("shell-app--foreground-refresh");this.foregroundRefreshTimer=window.setTimeout((()=>{this.foregroundRefreshTimer=null;this.el.classList.remove("shell-app--foreground-refresh");void this.el.querySelector(".shell-app__main")?.offsetHeight}),e.FOREGROUND_REFRESH_MS)}cachePanelWidthTokens(){const e=this.el.querySelector("ds-panel-nav .panel-nav");if(!e)return;this.panelWidthTokens=we(e)}applyGradientVars(e,s){const t=e.style;for(const[e,i]of Object.entries(s)){if(i===null)t.removeProperty(e);else t.setProperty(e,i)}}clearGradientPaintVars(e){const s=[de,ce,me];for(const t of e){for(const e of s)t.style.removeProperty(e)}}syncChromeLayoutVars(e,s,t,i){if(e){e.style.setProperty(ue,t)}if(s){s.style.setProperty(be,i)}}resolvePanelWidthPx(e){const s=e?.querySelector(".panel-nav");if(this.panelNavTransition.isActive&&this.panelWidthTokens.expandedPx>0){const t=xe(e,s);return Ce(this.panelWidthTokens,t)}const t=this.el.querySelector(".shell-app__panel");const i=t?.getBoundingClientRect().width??0;if(i>0)return i;if(this.panelWidthTokens.expandedPx>0){const t=xe(e,s);return Ce(this.panelWidthTokens,t)}return 0}resolveViewportDimensions(){if(this.panelNavTransition.isActive&&this.cachedViewportWidth>0){return{width:this.cachedViewportWidth,height:this.cachedViewportHeight}}return ge()}chromeLayerActive(){return this.gradientLayerActive()||this.paperTextureLayerActive()}gradientLayerActive(){return this.resolvedMode!=="mobile"&&he(this.gradientPreset)!=="none"}paperTextureLayerActive(){return this.resolvedMode!=="mobile"&&this.paperTexture!=null}handleWindowKeyDown(e){if(!this.shortcutsEnabled)return;if(X(e.target))return;const s=ee(e);if(!s)return;e.preventDefault();const t=this.el.querySelector("ds-panel-nav");const i=this.el.querySelector("ds-shell-tools, ds-panel-tools");if(s==="toggle-panel-nav"){void t?.toggleCollapsed();return}if(s==="close-panel-tools"){void i?.closeDrawer?.();return}if(s.startsWith("open-tool:")&&i){const e=s.slice("open-tool:".length);void i.activateTool?.(e)}}async activateTool(e){const s=this.el.querySelector("ds-shell-tools, ds-panel-tools");await(s?.activateTool?.(e))}async closeGlobalSurface(){if(this.managedMobileSheetNavOpen){this.managedMobileSheetNavOpen=false;return}const e=this.el.querySelector("ds-shell-tools, ds-panel-tools");await(e?.closeDrawer?.())}async setToolPresentation(e){this.managedToolPresentation=e;this.toolsFullscreen=e==="fullscreen"}activateManagedMobileTool(e){const s=e==="inbox"?y(this.managedInboxTool,this.availableInboxTools):e;if(!s)return false;const t=this.resolvedToolItems.find((t=>t.id===s||e!=="inbox"&&t.mobileDestination===e));if(!t||t.isInactive)return false;const i=t.id;this.managedActiveTool=i;this.managedToolsOpen=true;if(g(t))this.managedInboxTool=i;if(e==="help")this.managedMobilePrimaryDestination="help";this.dsToolChange.emit({id:i,selected:true});return true}get currentArea(){const e=[...this.navigation.dashboardGroups??[],...this.navigation.settingsGroups??[],...this.resolvedNavigationGroups];const s=e.flatMap((e=>e.items));const t=this.navigation.activeId||x(this.navigation.currentUrl??this.pageChrome.currentUrl??"",s);return s.find((e=>e.id===t))??s[0]??{id:"area",icon:"MapPage",label:this.pageChrome.heading||"Area"}}toolDot(e){return this.resolvedToolItems.find((s=>s.id===e))?.dot??false}syncChrome(){const e=this.el.querySelector("ds-panel-nav");const s=this.el.querySelector('ds-bar-nav, ds-bar-page-title, ds-bar-title[placement="shell-bar"]');const t=[this.el,e,s].filter((e=>e!==null));const i=()=>{if(e)e.style.removeProperty(ue);if(s)s.style.removeProperty(be)};const a=he(this.gradientPreset);if(this.resolvedMode==="mobile"){this.clearGradientPaintVars(t);i();return}const n=this.resolveViewportDimensions();if(a==="none"){this.clearGradientPaintVars(t);i();this.syncPaperTextureLayout(n);return}const l=this.resolvePanelWidthPx(e);const o=_e();const h=ye(l);this.syncChromeLayoutVars(e,s,o,h);const r=fe(a);const p=ve({width:n.width,height:n.height});const d=le(a);for(const e of t){if(e===this.el){this.applyGradientVars(e,{[de]:r,[ce]:p,[ue]:o,[be]:h,[me]:d});continue}const t=e===s;this.applyGradientVars(e,{[de]:r,[ce]:p,[me]:d,[ue]:t?null:o,[be]:t?h:null})}this.syncPaperTextureLayout(n)}syncPaperTextureLayout(e){const s=this.el.querySelector(".shell-app__chrome");const t=this.el.querySelector(".shell-app__chrome > ds-paper-texture");if(!s||!t)return;const i=s.getBoundingClientRect();t.style.setProperty("width",`${Math.round(e.width)}px`);t.style.setProperty("height",`${Math.round(e.height)}px`);t.style.setProperty("left",`${-Math.round(i.left)}px`);t.style.setProperty("top",`${-Math.round(i.top)}px`)}renderPaperTexture(){if(!this.paperTextureLayerActive())return null;return i("ds-paper-texture",{class:"shell-app__paper-texture",config:this.paperTexture})}renderManagedPanelNav(){const e=this.navigation;return i("ds-panel-nav",{navStyle:this.navStyle,presentation:this.sectionNavigation==="panel"?"nested":"flat",groups:this.resolvedNavigationGroups,breakpoint:k,routerMode:e.routerMode??"event",activeId:e.activeId??"",activeChildId:this.pageChrome.value??"",currentUrl:e.currentUrl??this.pageChrome.currentUrl??"",storageKey:e.storageKey??"",userName:e.userName??"",userInitial:e.userInitial??"",accountMenuExpanded:e.accountMenuExpanded??false,accountMenuSurfaceOpen:e.accountMenuSurfaceOpen,dashboardLabel:e.dashboardLabel??"Dashboard",settingsLabel:e.settingsLabel??"Settings",accountLabel:e.accountLabel??"Account",dashboardNavigationLabel:e.dashboardNavigationLabel??"Dashboard navigation",settingsNavigationLabel:e.settingsNavigationLabel??"Settings navigation",navigationItemsLabel:e.navigationLabel??"Navigation items",onDsNavSelect:this.handleManagedNavSelect,onDsNavChildSelect:this.handleManagedNavChildSelect,onDsNavFooterAction:this.handleManagedNavFooterAction,onDsNavUserAction:this.handleManagedNavUserAction})}renderManagedBarNav(){return i("ds-bar-nav",{navStyle:this.navStyle,tabs:this.resolvedPageTabs,value:this.pageChrome.value??"",heading:this.pageChrome.routeHeading??this.pageChrome.heading,basePath:this.pageChrome.basePath??"",currentUrl:this.pageChrome.currentUrl??this.navigation.currentUrl??"",onDsTabChange:this.handleManagedTabChange})}renderManagedTopBar(){return this.sectionNavigation==="panel"?this.renderManagedBarPageTitle():this.renderManagedBarNav()}renderManagedToolSlots(){const e=[...new Set(this.resolvedToolItems.map((e=>e.id)))].sort();return e.flatMap((e=>[i("div",{key:`tool:${e}`,class:"shell-app__tool-slot-proxy",slot:e},i("slot",{name:e})),i("div",{key:`tool-view:${e}`,class:"shell-app__tool-slot-proxy",slot:`${e}-view`},i("slot",{name:`${e}-view`}))]))}renderManagedTools(){const e=this.tools;return i("ds-shell-tools",{responsiveMode:this.resolvedMode,open:this.managedToolsOpen,activeTool:this.managedActiveTool,presentation:this.managedToolPresentation,fullscreenHeaderMode:e.fullscreenHeaderMode??"shared",items:this.resolvedToolItems,accessories:e.accessories??[],headers:e.headers??{},storageKey:e.storageKey??"",toolsLabel:e.toolsLabel??"Tools",toolShortcutsLabel:e.toolShortcutsLabel??"Tool shortcuts",inboxLabel:e.inboxLabel??"Inbox",inboxNavigationLabel:e.inboxNavigationLabel??"Inbox sections",onDsToolChange:this.handleManagedToolChange,onDsPresentationChange:this.handleManagedPresentationChange,onDsHeaderBack:this.handleManagedHeaderBack,onDsHeaderAction:this.handleManagedHeaderAction,onDsRailAccessoryAction:this.handleManagedRailAccessoryAction},this.renderManagedToolSlots())}renderManagedMobileSheetNav(){const e=this.navigation;return i("ds-mobile-sheet-nav",{open:this.managedMobileSheetNavOpen,presentation:this.sectionNavigation==="panel"?"nested":"flat",browseContext:this.managedBrowseContext,dashboardGroups:e.dashboardGroups??e.groups??[],settingsGroups:e.settingsGroups??[],currentUrl:e.currentUrl??this.pageChrome.currentUrl??"",routeSelectionActive:this.managedMobileDestination==="area",navigationLabel:e.navigationLabel??"Application navigation",dashboardLabel:e.dashboardLabel??"Dashboard",settingsLabel:e.settingsLabel??"Settings",accountLabel:e.accountLabel??"Account",showAccount:e.showMobileAccount??true,onDsAreaSelect:this.handleManagedAreaSelect,onDsNavChildSelect:this.handleManagedMobileChildSelect,onDsBrowseContextChange:this.handleManagedBrowseContext,onDsClose:this.handleManagedSheetClose})}renderManagedMobileBarNav(){const e=e=>this.resolvedToolItems.find((s=>s.id===e));const s=(s,t)=>e(s)?.ariaLabel??e(s)?.label??t;const t=this.resolvedToolItems.some((e=>!e.isInactive&&e.mobileDestination==="activity"));return i("ds-mobile-bar-nav",{hidden:this.tools.mobileBarHidden??false,activeDestination:this.managedMobileDestination,primaryDestination:this.managedMobilePrimaryDestination,currentArea:this.currentArea,sheetNavExpanded:this.managedMobileSheetNavOpen,searchLabel:s("search","Search"),activityMode:t?"direct":"inbox",activityLabel:s("activity","Activity"),inboxLabel:this.tools.inboxLabel??"Inbox",messagesLabel:s("messages","Messages"),agentsLabel:s("agents","Agents"),helpLabel:s("help","Help & Support"),searchDot:this.toolDot("search"),activityDot:this.toolDot("activity"),inboxDot:this.toolDot("stacks")||this.toolDot("activity"),messagesDot:this.toolDot("messages"),agentsDot:this.toolDot("agents"),onDsSheetNavToggle:this.handleManagedSheetToggle,onDsDestinationChange:this.handleManagedMobileDestination})}renderManagedMobileLeading(){if(!this.pageChrome.showBack){return i("slot",{name:"page-header-leading",slot:"leading"})}return[i("ds-tooltip",{slot:"leading",label:this.pageChrome.backAriaLabel??"Back",side:"bottom",size:"sm"},i("ds-button-unfilled",{variant:"icon",icon:this.pageChrome.backIcon??"ChevronLeft",size:"lg","aria-label":this.pageChrome.backAriaLabel??"Back",activeFill:false,hasBorder:false,onDsClick:e=>this.dsPageBack.emit(e.detail)})),i("slot",{name:"page-header-leading",slot:"leading"})]}renderManagedMobileActions(){const e=this.pageChrome.mobileActions??[];const s=r(this.resolvedHeaderActions,"mobile");return[...e.map((e=>i("ds-tooltip",{slot:"trailing",key:e.id,label:e.ariaLabel,side:"bottom",size:"sm"},i("ds-button-unfilled",{id:e.triggerId||undefined,variant:"icon",icon:e.icon,size:"lg","aria-label":e.ariaLabel,haspopup:e.haspopup,controls:e.controls,expanded:e.expanded,surfaceOpen:e.surfaceOpen,pressed:e.pressed,isInactive:e.isInactive,activeFill:false,hasBorder:false,onDsClick:()=>this.dsPageAction.emit(e.id)})))),...s.map((e=>{if(e.type!=="icon")return null;const s=(e.appearance??"unfilled")==="filled"?i("ds-button-filled",{variant:"icon",icon:e.icon,"aria-label":e.ariaLabel,size:"lg",intent:e.intent??"brand",contrast:e.contrast??"bold",isInactive:e.isInactive,isLoading:e.isLoading,onDsClick:()=>this.dsPageAction.emit(e.id)}):i("ds-button-unfilled",{variant:"icon",icon:e.icon,"aria-label":e.ariaLabel,size:"lg",isInactive:e.isInactive,isLoading:e.isLoading,activeFill:false,hasBorder:false,onDsClick:()=>this.dsPageAction.emit(e.id)});return i("ds-tooltip",{slot:"trailing",key:e.id,label:e.label,side:"bottom",size:"sm"},s)})),...this.mobileActionMenuSections.length>0?[i("ds-tooltip",{slot:"trailing",label:"Page options",side:"bottom",size:"sm"},i("ds-button-unfilled",{ref:e=>{this.mobileActionTriggerEl=e??null},id:this.mobileActionMenuTriggerId,variant:"icon",icon:"Ellipses","aria-label":this.pageChrome.actionsAriaLabel??"More page actions",size:"lg",activeFill:false,hasBorder:false,haspopup:"menu",controls:this.mobileActionMenuId,expanded:this.mobileActionMenuOpen,surfaceOpen:this.mobileActionSurfaceOpen,onDsClick:e=>{this.mobileActionMenuInitialFocusVisible=e.detail.detail===0;this.mobileActionMenuOpen=!this.mobileActionMenuOpen;if(this.mobileActionMenuOpen)this.mobileActionSurfaceOpen=true}}))]:[],i("slot",{name:"page-header-trailing",slot:"trailing"})]}get resolvedHeaderActions(){return p(this.pageChrome.actionItems,this.pageChrome.primaryAction??null,this.pageChrome.actions??[])}get mobileActionMenuSections(){return d(this.resolvedHeaderActions,"mobile")}renderManagedMobileActionMenu(){if(this.mobileActionMenuSections.length===0)return null;return i("ds-menu",{id:this.mobileActionMenuId,anchorId:this.mobileActionMenuTriggerId,align:"end",menuLabel:this.pageChrome.actionsAriaLabel??"More page actions",open:this.mobileActionMenuOpen,initialFocusVisible:this.mobileActionMenuInitialFocusVisible,sections:this.mobileActionMenuSections,onDsClose:this.closeMobileActionMenu,onDsAfterClose:()=>{if(!this.mobileActionMenuOpen)this.mobileActionSurfaceOpen=false},onDsSelect:this.handleMobileActionSelect})}get barTitleSections(){return(this.pageChrome.subsections??[]).map((e=>"type"in e?{type:"divider"}:{id:e.id,label:e.label,isInactive:e.isInactive}))}renderManagedBarPageTitle(){const e=this.pageChrome;return i("ds-bar-page-title",{ref:s=>{if(s){s.actionItems=e.actionItems}},heading:e.heading??"",showBack:e.showBack??false,backAriaLabel:e.backAriaLabel??"Back",sections:this.barTitleSections,value:e.subvalue??"",sectionsAriaLabel:e.subsectionsAriaLabel??"Change page subsection",primaryAction:e.primaryAction??null,actions:e.actions??[],actionsAriaLabel:e.actionsAriaLabel??"More page actions",showDivider:e.showHeaderDivider??true,showCompactDivider:e.showCompactHeaderDivider,onDsBack:this.handleManagedPageBack,onDsSectionChange:this.handleManagedSubsectionChange,onDsAction:this.handleManagedPageAction})}renderManagedBarTitle(e){const s=this.pageChrome;return i("ds-bar-title",{ref:e=>{if(e){e.actionItems=s.actionItems}},slot:e==="page"?"header":undefined,placement:e,variant:e==="shell-bar"?"compact":"expanded",heading:s.heading??"",description:s.description??"",showBack:s.showBack??false,backAriaLabel:s.backAriaLabel??"Back",backLabel:s.backLabel??"Back",breadcrumbs:s.breadcrumbs??[],breadcrumbAriaLabel:s.breadcrumbAriaLabel??"Breadcrumb",sections:this.barTitleSections,value:s.subvalue??"",sectionsAriaLabel:s.subsectionsAriaLabel??"Change page subsection",primaryAction:s.primaryAction??null,actions:s.actions??[],actionsAriaLabel:s.actionsAriaLabel??"More page actions",showDivider:s.showHeaderDivider??true,showCompactDivider:s.showCompactHeaderDivider,onDsBack:this.handleManagedPageBack,onDsBreadcrumbSelect:this.handleManagedBreadcrumbSelect,onDsSectionChange:this.handleManagedSubsectionChange,onDsAction:this.handleManagedPageAction})}renderManagedPage(){const e=this.pageChrome;const s=this.sectionNavigation==="panel";const t=e.showBack||s?[]:this.resolvedPageTabs;return[i("ds-shell-page",{responsiveMode:this.resolvedMode,headerCapacity:w(this.resolvedMode),headerPresentation:e.headerPresentation??"auto",desktopHeaderPlacement:this.sectionNavigation==="panel"?"shell-bar":"page",contentInset:e.contentInset??"default",contentInsetBlockStart:e.contentInsetBlockStart??"default",contentInsetBlockStartSize:e.contentInsetBlockStartSize,compactContentInsetBlockStartSize:e.compactContentInsetBlockStartSize,scrollCompaction:e.scrollCompaction??true,contentSurface:e.contentSurface??"primary"},this.sectionNavigation==="bar"?this.renderManagedBarTitle("page"):null,i("ds-mobile-header",{slot:"mobile-header",heading:e.heading??"",headingLevel:e.headingLevel??"h1",sections:t,value:e.showBack?"":e.value??"",sectionsAriaLabel:e.sectionsAriaLabel??"Change page section",subsections:e.subsections??[],subsectionsPlacement:e.showBack||s?"combined":"below",subvalue:e.subvalue??"",subsectionsAriaLabel:e.subsectionsAriaLabel??"Change page subsection",tone:e.tone??"default",onDsSectionChange:this.handleManagedTabChange,onDsSubsectionChange:this.handleManagedSubsectionChange},this.renderManagedMobileLeading(),this.renderManagedMobileActions()),i("slot",null)),this.renderManagedMobileActionMenu()]}renderSlottedShell(e,s,t,n,l){return i(a,{class:e,"responsive-mode":this.resolvedMode},i("div",{class:"shell-app__banner"},i("slot",{name:"banner"})),i("div",{class:"shell-app__row"},i("div",{class:"shell-app__chrome","aria-hidden":"true"},this.renderPaperTexture()),i("div",{class:"shell-app__panel","aria-hidden":l?"true":undefined,inert:l?true:undefined},i("slot",{name:"panel"})),i("div",{class:"shell-app__main"},i("div",{class:"shell-app__bar","aria-hidden":l?"true":undefined,inert:l?true:undefined},i("slot",{name:"bar"})),i("div",{class:"shell-app__tools","data-ds-overlay-boundary":l?undefined:true,"aria-hidden":s&&(!t||this.mobileSheetNavOpen)?"true":undefined,inert:s&&(!t||this.mobileSheetNavOpen)?true:undefined,hidden:s&&!t},i("slot",{name:"tools"})),i("div",{class:"shell-app__content","data-ds-overlay-boundary":true,"aria-hidden":l||n?"true":undefined,inert:l||n?true:undefined,tabIndex:0},i("slot",null)),i("div",{class:"shell-app__mobile-sheet-nav",hidden:!s||!this.mobileSheetNavOpen,"aria-hidden":s&&this.mobileSheetNavOpen?undefined:"true",inert:s&&this.mobileSheetNavOpen?undefined:true},i("slot",{name:"mobile-sheet-nav"})),i("div",{class:"shell-app__mobile-bar-nav",hidden:!s},i("slot",{name:"mobile-bar-nav"})))))}render(){const e=this.chromeLayerActive();const s=this.gradientLayerActive();const t=this.paperTextureLayerActive();const n=this.resolvedMode==="mobile";const l=n&&this.effectiveMobileDestination!=="area";const o=n&&(l||this.effectiveMobileSheetNavOpen);const h=!n&&this.toolsFullscreen;const r={"shell-app":true,"shell-app--chrome":e,"shell-app--gradient":s,"shell-app--paper-texture":t,[`shell-app--${this.navStyle}`]:true,[`shell-app--${this.resolvedMode}`]:true,"shell-app--tools-fullscreen":h,"shell-app--mobile-tool-active":l,"shell-app--mobile-sheet-nav-open":n&&this.effectiveMobileSheetNavOpen,"shell-app--managed":this.managed,"shell-app--slotted":!this.managed};if(!this.managed){return this.renderSlottedShell(r,n,l,o,h)}return i(a,{class:r,"responsive-mode":this.resolvedMode},i("div",{class:"shell-app__banner"},i("slot",{name:"banner"})),i("div",{class:"shell-app__row"},i("div",{class:"shell-app__chrome","aria-hidden":"true"},this.renderPaperTexture()),i("div",{class:"shell-app__panel","aria-hidden":h?"true":undefined,inert:h?true:undefined},this.renderManagedPanelNav()),i("div",{class:"shell-app__main"},i("div",{class:"shell-app__bar","aria-hidden":h?"true":undefined,inert:h?true:undefined},this.renderManagedTopBar()),i("div",{class:"shell-app__tools","data-ds-overlay-boundary":h?undefined:true,"aria-hidden":n&&(!l||this.effectiveMobileSheetNavOpen)?"true":undefined,inert:n&&(!l||this.effectiveMobileSheetNavOpen)?true:undefined,hidden:n&&!l},this.renderManagedTools()),i("div",{class:"shell-app__content","data-ds-overlay-boundary":true,"aria-hidden":h||o?"true":undefined,inert:h||o?true:undefined,tabIndex:0},this.renderManagedPage()),i("div",{class:"shell-app__mobile-sheet-nav",hidden:!n||!this.effectiveMobileSheetNavOpen,"aria-hidden":n&&this.effectiveMobileSheetNavOpen?undefined:"true",inert:n&&this.effectiveMobileSheetNavOpen?undefined:true},this.renderManagedMobileSheetNav()),i("div",{class:"shell-app__mobile-bar-nav",hidden:!n},this.renderManagedMobileBarNav()))))}get el(){return this}static get watchers(){return{navStyle:[{onShellPropsChange:0}],gradientPreset:[{onShellPropsChange:0}],paperTexture:[{onShellPropsChange:0}],sectionNavigation:[{onShellPropsChange:0}],navigation:[{handleNavigationChange:0}],pageChrome:[{handlePageChromeChange:0}],tools:[{handleToolsChange:0}],mobileDestination:[{onMobileStateChange:0}],mobileSheetNavOpen:[{onMobileStateChange:0}]}}static get style(){return Se()}},[262,"ds-shell-app",{composition:[513],navigation:[16],sectionNavigation:[513,"section-navigation"],pageChrome:[16],tools:[16],navStyle:[513,"nav-style"],gradientPreset:[513,"gradient-preset"],paperTexture:[16],shortcutsEnabled:[4,"shortcuts-enabled"],mobileDestination:[1,"mobile-destination"],mobileSheetNavOpen:[4,"mobile-sheet-nav-open"],toolsFullscreen:[32],resolvedMode:[32],managedToolsOpen:[32],managedActiveTool:[32],managedToolPresentation:[32],managedMobileDestination:[32],managedMobilePrimaryDestination:[32],managedMobileSheetNavOpen:[32],managedInboxTool:[32],managedBrowseContext:[32],mobileActionMenuOpen:[32],mobileActionSurfaceOpen:[32],mobileActionMenuInitialFocusVisible:[32],activateTool:[64],closeGlobalSurface:[64],setToolPresentation:[64]},[[0,"dsPresentationChange","handleToolsPresentation"],[10,"keydown","handleWindowKeyDown"]],{navStyle:[{onShellPropsChange:0}],gradientPreset:[{onShellPropsChange:0}],paperTexture:[{onShellPropsChange:0}],sectionNavigation:[{onShellPropsChange:0}],navigation:[{handleNavigationChange:0}],pageChrome:[{handlePageChromeChange:0}],tools:[{handleToolsChange:0}],mobileDestination:[{onMobileStateChange:0}],mobileSheetNavOpen:[{onMobileStateChange:0}]}]);Me.FOREGROUND_REFRESH_MS=50;function Le(){if(typeof customElements==="undefined"){return}const e=["ds-shell-app","ds-badge","ds-bar-nav","ds-bar-page-title","ds-bar-title","ds-breadcrumb","ds-button-filled","ds-button-unfilled","ds-divider","ds-icon","ds-loader","ds-menu","ds-mobile-bar-nav","ds-mobile-header","ds-mobile-section-switcher","ds-mobile-sheet-nav","ds-panel-nav","ds-panel-tool-header","ds-panel-tools","ds-paper-texture","ds-shell-page","ds-shell-tools","ds-swatch-picker","ds-switch","ds-tab-group","ds-tag","ds-text","ds-tooltip"];e.forEach((e=>{switch(e){case"ds-shell-app":if(!customElements.get(n(e))){customElements.define(n(e),Me)}break;case"ds-badge":if(!customElements.get(n(e))){C()}break;case"ds-bar-nav":if(!customElements.get(n(e))){S()}break;case"ds-bar-page-title":if(!customElements.get(n(e))){D()}break;case"ds-bar-title":if(!customElements.get(n(e))){M()}break;case"ds-breadcrumb":if(!customElements.get(n(e))){L()}break;case"ds-button-filled":if(!customElements.get(n(e))){A()}break;case"ds-button-unfilled":if(!customElements.get(n(e))){P()}break;case"ds-divider":if(!customElements.get(n(e))){T()}break;case"ds-icon":if(!customElements.get(n(e))){B()}break;case"ds-loader":if(!customElements.get(n(e))){j()}break;case"ds-menu":if(!customElements.get(n(e))){z()}break;case"ds-mobile-bar-nav":if(!customElements.get(n(e))){E()}break;case"ds-mobile-header":if(!customElements.get(n(e))){N()}break;case"ds-mobile-section-switcher":if(!customElements.get(n(e))){I()}break;case"ds-mobile-sheet-nav":if(!customElements.get(n(e))){F()}break;case"ds-panel-nav":if(!customElements.get(n(e))){$()}break;case"ds-panel-tool-header":if(!customElements.get(n(e))){O()}break;case"ds-panel-tools":if(!customElements.get(n(e))){o()}break;case"ds-paper-texture":if(!customElements.get(n(e))){H()}break;case"ds-shell-page":if(!customElements.get(n(e))){G()}break;case"ds-shell-tools":if(!customElements.get(n(e))){V()}break;case"ds-swatch-picker":if(!customElements.get(n(e))){R()}break;case"ds-switch":if(!customElements.get(n(e))){W()}break;case"ds-tab-group":if(!customElements.get(n(e))){J()}break;case"ds-tag":if(!customElements.get(n(e))){q()}break;case"ds-text":if(!customElements.get(n(e))){U()}break;case"ds-tooltip":if(!customElements.get(n(e))){K()}break}}))}Le();const Ae=Me;const Pe=Le;export{Ae as DsShellApp,Pe as defineCustomElement};
|
|
2
2
|
//# sourceMappingURL=ds-shell-app.js.map
|