@ds-mo/ui 15.11.1 → 15.11.2
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/dist/.package-ready.json +1 -1
- package/dist/agent-patterns.json +1 -1
- package/dist/agent.json +1 -1
- package/dist/components/THIRD-PARTY-NOTICES +1 -1
- package/dist/components/bundled-dependencies.json +1 -1
- 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-bar-nav.js +1 -1
- package/dist/components/ds-bar-page-title.js +1 -1
- package/dist/components/ds-bar-title.js +1 -1
- package/dist/components/ds-bar-workflow.js +1 -1
- package/dist/components/ds-button-unfilled.js +1 -1
- package/dist/components/ds-calendar.js +1 -1
- package/dist/components/ds-card-chart.js +1 -1
- package/dist/components/ds-card-overview.js +1 -1
- package/dist/components/ds-card-setting.js +1 -1
- package/dist/components/ds-chart.js +1 -1
- package/dist/components/ds-code-block.js +1 -1
- package/dist/components/ds-data-customize.js +1 -1
- package/dist/components/ds-data-filter.js +1 -1
- package/dist/components/ds-data-group.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-sort.js +1 -1
- package/dist/components/ds-filter-menu.js +1 -1
- package/dist/components/ds-input-date.js +1 -1
- package/dist/components/ds-input-time.js +1 -1
- package/dist/components/ds-input.js +1 -1
- package/dist/components/ds-markdown.js +1 -1
- package/dist/components/ds-menu.js +1 -1
- package/dist/components/ds-message-actions.js +1 -1
- package/dist/components/ds-message-composer.js +1 -1
- package/dist/components/ds-message-scroller.js +1 -1
- package/dist/components/ds-mobile-header.js +1 -1
- package/dist/components/ds-mobile-section-switcher.js +1 -1
- package/dist/components/ds-mobile-sheet-nav.js +1 -1
- package/dist/components/ds-modal.js +1 -1
- package/dist/components/ds-pagination.js +1 -1
- package/dist/components/ds-panel-nav.js +1 -1
- package/dist/components/ds-panel-tool-header.js +1 -1
- package/dist/components/ds-panel-tool-search.js +1 -1
- package/dist/components/ds-panel-tools.js +1 -1
- package/dist/components/ds-select.js +1 -1
- package/dist/components/ds-shell-app.js +1 -1
- package/dist/components/ds-shell-tools.js +1 -1
- package/dist/components/ds-table.js +1 -1
- package/dist/components/ds-table.js.map +1 -1
- package/dist/components/ds-toast.js +1 -1
- package/dist/components/ds-tooltip-chart.js +1 -1
- package/dist/components/ds-tooltip.js +1 -1
- package/dist/components/{p-B9Q7fXxW.js → p-4qKHg502.js} +2 -2
- package/dist/components/{p-DixX2_Bd.js → p-529k8euH.js} +2 -2
- package/dist/components/{p-CEB8RFih.js → p-BI6L3JoU.js} +2 -2
- package/dist/components/p-BjYoM1f8.js +2 -0
- package/dist/components/{p-BqIRExej.js.map → p-BjYoM1f8.js.map} +1 -1
- package/dist/components/p-BkKdzYZP.js +2 -0
- package/dist/components/{p-B5rN3slq.js.map → p-BkKdzYZP.js.map} +1 -1
- package/dist/components/{p-DKG26pp5.js → p-BrJebF5t.js} +2 -2
- package/dist/components/{p-y2Sdv9M3.js → p-BvlkO__o.js} +2 -2
- package/dist/components/{p-DvMCOJwc.js → p-C31AjGbg.js} +2 -2
- package/dist/components/{p-DwFnt0W0.js → p-C4kVTIBc.js} +2 -2
- package/dist/components/{p-BNnw_O4e.js → p-C6VWVB87.js} +2 -2
- package/dist/components/{p-CaNMVLhm.js → p-CC4X8rpT.js} +2 -2
- package/dist/components/{p-S5QCVAdH.js → p-CJ-igzsZ.js} +2 -2
- package/dist/components/{p-D-cZ6cRI.js → p-CTstnsLe.js} +2 -2
- package/dist/components/{p-Ba-dSshd.js → p-CXF8wj9I.js} +2 -2
- package/dist/components/{p-OFJpWJcN.js → p-Cqg9T781.js} +2 -2
- package/dist/components/p-D0kzIzGQ.js +2 -0
- package/dist/components/p-D0kzIzGQ.js.map +1 -0
- package/dist/components/p-DEJLfD7k.js +2 -0
- package/dist/components/p-DEJLfD7k.js.map +1 -0
- package/dist/components/{p-BkajUPiA.js → p-DHmHllUM.js} +2 -2
- package/dist/components/p-DNtwJJOC.js +2 -0
- package/dist/components/p-DNtwJJOC.js.map +1 -0
- package/dist/components/{p-DfwvHxYi.js → p-DXEInGEq.js} +2 -2
- package/dist/components/{p-DGDF4NMV.js → p-DcVK0W4X.js} +2 -2
- package/dist/components/{p-Cxk1A7Sx.js → p-Ds58qo_J.js} +2 -2
- package/dist/components/{p-CMrHRjjH.js → p-DwcAROOo.js} +2 -2
- package/dist/components/{p-CW-7vLUB.js → p-DxVokKm8.js} +2 -2
- package/dist/components/{p-CqW2eyiF.js → p-E0RqkUNq.js} +2 -2
- package/dist/components/p-HNktxWtF.js +2 -0
- package/dist/components/p-HNktxWtF.js.map +1 -0
- package/dist/components/{p-DfzXyVoM.js → p-YE1r-XSR.js} +2 -2
- package/dist/components/{p-CeXf9-X3.js → p-mSCnWLhL.js} +2 -2
- package/dist/components/{p-C8D853vs.js → p-vrRbdZAI.js} +2 -2
- package/dist/docs/components.json +16 -16
- package/dist/mcp-data/registry/agent-activity.json +2 -2
- package/dist/mcp-data/registry/agent-questionnaire.json +2 -2
- package/dist/mcp-data/registry/agent-response.json +2 -2
- package/dist/mcp-data/registry/agent-source-list.json +2 -2
- package/dist/mcp-data/registry/agent-tool-call.json +2 -2
- package/dist/mcp-data/registry/attachment-list.json +2 -2
- package/dist/mcp-data/registry/avatar.json +2 -2
- package/dist/mcp-data/registry/badge.json +2 -2
- package/dist/mcp-data/registry/banner.json +2 -2
- package/dist/mcp-data/registry/bar-action.json +2 -2
- package/dist/mcp-data/registry/bar-nav.json +2 -2
- package/dist/mcp-data/registry/bar-page-title.json +2 -2
- package/dist/mcp-data/registry/bar-title.json +2 -2
- package/dist/mcp-data/registry/bar-workflow.json +2 -2
- package/dist/mcp-data/registry/breadcrumb.json +2 -2
- package/dist/mcp-data/registry/button-filled.json +2 -2
- package/dist/mcp-data/registry/button-inverted.json +2 -2
- package/dist/mcp-data/registry/button-unfilled.json +2 -2
- package/dist/mcp-data/registry/calendar.json +2 -2
- package/dist/mcp-data/registry/card-action-center.json +2 -2
- package/dist/mcp-data/registry/card-chart.json +2 -2
- package/dist/mcp-data/registry/card-navigation.json +2 -2
- package/dist/mcp-data/registry/card-overview.json +2 -2
- package/dist/mcp-data/registry/card-setting.json +2 -2
- package/dist/mcp-data/registry/card-settings-scope.json +2 -2
- package/dist/mcp-data/registry/chart-legend.json +2 -2
- package/dist/mcp-data/registry/chart.json +2 -2
- package/dist/mcp-data/registry/checkbox-group.json +2 -2
- package/dist/mcp-data/registry/checkbox.json +2 -2
- package/dist/mcp-data/registry/chip.json +2 -2
- package/dist/mcp-data/registry/code-block.json +2 -2
- package/dist/mcp-data/registry/conversation-list-item.json +2 -2
- package/dist/mcp-data/registry/conversation-list-section.json +2 -2
- package/dist/mcp-data/registry/conversation-list.json +2 -2
- package/dist/mcp-data/registry/data-customize.json +2 -2
- package/dist/mcp-data/registry/data-filter.json +2 -2
- package/dist/mcp-data/registry/data-group.json +2 -2
- package/dist/mcp-data/registry/data-preferences.json +2 -2
- package/dist/mcp-data/registry/data-saved-views.json +2 -2
- package/dist/mcp-data/registry/data-search.json +2 -2
- package/dist/mcp-data/registry/data-sort.json +2 -2
- package/dist/mcp-data/registry/data-toolbar.json +2 -2
- package/dist/mcp-data/registry/divider.json +2 -2
- package/dist/mcp-data/registry/empty-state.json +2 -2
- package/dist/mcp-data/registry/field.json +2 -2
- package/dist/mcp-data/registry/filter-menu.json +2 -2
- package/dist/mcp-data/registry/icon.json +2 -2
- package/dist/mcp-data/registry/inline-banner-settings.json +2 -2
- package/dist/mcp-data/registry/input-date.json +3 -3
- package/dist/mcp-data/registry/input-time.json +3 -3
- package/dist/mcp-data/registry/input.json +2 -2
- package/dist/mcp-data/registry/loader.json +2 -2
- package/dist/mcp-data/registry/map-cluster-marker.json +2 -2
- package/dist/mcp-data/registry/map-entity-marker.json +2 -2
- package/dist/mcp-data/registry/map-marker.json +2 -2
- package/dist/mcp-data/registry/markdown.json +2 -2
- package/dist/mcp-data/registry/menu.json +2 -2
- package/dist/mcp-data/registry/message-actions.json +2 -2
- package/dist/mcp-data/registry/message-bubble.json +2 -2
- package/dist/mcp-data/registry/message-composer.json +2 -2
- package/dist/mcp-data/registry/message-scroller.json +2 -2
- package/dist/mcp-data/registry/message.json +2 -2
- package/dist/mcp-data/registry/mobile-bar-nav.json +2 -2
- package/dist/mcp-data/registry/mobile-header.json +2 -2
- package/dist/mcp-data/registry/mobile-section-switcher.json +2 -2
- package/dist/mcp-data/registry/mobile-sheet-nav.json +2 -2
- package/dist/mcp-data/registry/modal.json +2 -2
- package/dist/mcp-data/registry/navigation-tab-group.json +2 -2
- package/dist/mcp-data/registry/pagination.json +2 -2
- package/dist/mcp-data/registry/panel-nav.json +2 -2
- package/dist/mcp-data/registry/panel-sub-nav.json +2 -2
- package/dist/mcp-data/registry/panel-tool-header.json +2 -2
- package/dist/mcp-data/registry/panel-tool-search.json +2 -2
- package/dist/mcp-data/registry/panel-tools.json +2 -2
- package/dist/mcp-data/registry/paper-texture.json +2 -2
- package/dist/mcp-data/registry/radio-tile.json +2 -2
- package/dist/mcp-data/registry/radio.json +2 -2
- package/dist/mcp-data/registry/registry.json +2 -2
- package/dist/mcp-data/registry/score.json +2 -2
- package/dist/mcp-data/registry/scroll-overlay.json +2 -2
- package/dist/mcp-data/registry/select-toggle.json +2 -2
- package/dist/mcp-data/registry/select.json +2 -2
- package/dist/mcp-data/registry/setting-row-checkbox.json +2 -2
- package/dist/mcp-data/registry/setting-row-radio.json +2 -2
- package/dist/mcp-data/registry/setting-row-toggle.json +2 -2
- package/dist/mcp-data/registry/shell-app.json +2 -2
- package/dist/mcp-data/registry/shell-page.json +2 -2
- package/dist/mcp-data/registry/shell-tools.json +2 -2
- package/dist/mcp-data/registry/skeleton.json +2 -2
- package/dist/mcp-data/registry/slider.json +2 -2
- package/dist/mcp-data/registry/swatch-picker.json +2 -2
- package/dist/mcp-data/registry/switch.json +2 -2
- package/dist/mcp-data/registry/tab-group.json +2 -2
- package/dist/mcp-data/registry/table.json +14 -4
- package/dist/mcp-data/registry/tag.json +2 -2
- package/dist/mcp-data/registry/text.json +2 -2
- package/dist/mcp-data/registry/textarea.json +2 -2
- package/dist/mcp-data/registry/time-picker.json +2 -2
- package/dist/mcp-data/registry/toast.json +2 -2
- package/dist/mcp-data/registry/tooltip-chart.json +2 -2
- package/dist/mcp-data/registry/tooltip.json +2 -2
- package/dist/mcp-data/registry/typing-indicator.json +2 -2
- package/dist/types/components/InputDate/InputDate.d.ts +5 -6
- package/dist/types/components/InputTime/InputTime.d.ts +5 -6
- package/dist/types/components/Table/Table.d.ts +5 -48
- package/dist/types/components/Table/table-caption-controller.d.ts +54 -0
- package/dist/types/components/Table/table-cell-editor.d.ts +1 -1
- package/dist/types/components/Table/table-editing-controller.d.ts +37 -0
- package/dist/types/utils/picker-popup-controller.d.ts +24 -0
- package/dist/types/utils/select-controller.d.ts +1 -0
- package/package.json +6 -6
- package/dist/components/p-B5rN3slq.js +0 -2
- package/dist/components/p-BT6xQogY.js +0 -2
- package/dist/components/p-BT6xQogY.js.map +0 -1
- package/dist/components/p-BqIRExej.js +0 -2
- package/dist/components/p-CPNA8raE.js +0 -2
- package/dist/components/p-CPNA8raE.js.map +0 -1
- package/dist/components/p-Djkk338n.js +0 -2
- package/dist/components/p-Djkk338n.js.map +0 -1
- package/dist/types/utils/cartesian-chart-layout.d.ts +0 -13
- package/dist/types/utils/chart-viewport-controller.d.ts +0 -21
- /package/dist/components/{p-B9Q7fXxW.js.map → p-4qKHg502.js.map} +0 -0
- /package/dist/components/{p-DixX2_Bd.js.map → p-529k8euH.js.map} +0 -0
- /package/dist/components/{p-CEB8RFih.js.map → p-BI6L3JoU.js.map} +0 -0
- /package/dist/components/{p-DKG26pp5.js.map → p-BrJebF5t.js.map} +0 -0
- /package/dist/components/{p-y2Sdv9M3.js.map → p-BvlkO__o.js.map} +0 -0
- /package/dist/components/{p-DvMCOJwc.js.map → p-C31AjGbg.js.map} +0 -0
- /package/dist/components/{p-DwFnt0W0.js.map → p-C4kVTIBc.js.map} +0 -0
- /package/dist/components/{p-BNnw_O4e.js.map → p-C6VWVB87.js.map} +0 -0
- /package/dist/components/{p-CaNMVLhm.js.map → p-CC4X8rpT.js.map} +0 -0
- /package/dist/components/{p-S5QCVAdH.js.map → p-CJ-igzsZ.js.map} +0 -0
- /package/dist/components/{p-D-cZ6cRI.js.map → p-CTstnsLe.js.map} +0 -0
- /package/dist/components/{p-Ba-dSshd.js.map → p-CXF8wj9I.js.map} +0 -0
- /package/dist/components/{p-OFJpWJcN.js.map → p-Cqg9T781.js.map} +0 -0
- /package/dist/components/{p-BkajUPiA.js.map → p-DHmHllUM.js.map} +0 -0
- /package/dist/components/{p-DfwvHxYi.js.map → p-DXEInGEq.js.map} +0 -0
- /package/dist/components/{p-DGDF4NMV.js.map → p-DcVK0W4X.js.map} +0 -0
- /package/dist/components/{p-Cxk1A7Sx.js.map → p-Ds58qo_J.js.map} +0 -0
- /package/dist/components/{p-CMrHRjjH.js.map → p-DwcAROOo.js.map} +0 -0
- /package/dist/components/{p-CW-7vLUB.js.map → p-DxVokKm8.js.map} +0 -0
- /package/dist/components/{p-CqW2eyiF.js.map → p-E0RqkUNq.js.map} +0 -0
- /package/dist/components/{p-DfzXyVoM.js.map → p-YE1r-XSR.js.map} +0 -0
- /package/dist/components/{p-CeXf9-X3.js.map → p-mSCnWLhL.js.map} +0 -0
- /package/dist/components/{p-C8D853vs.js.map → p-vrRbdZAI.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["MODIFIER_GLYPHS","Set","MODIFIER_LABELS","alt","cmd","command","control","ctrl","option","shift","canonicalKeyLabel","label","toLowerCase","shortcutKeyLabels","shortcut","normalized","trim","includes","split","map","part","filter","Boolean","test","characters","Array","from","labels","length","has","push","join","OPPOSITE_SIDE","top","right","bottom","left","rawPosition","input","side","anchorRect","anchor","popupWidth","popupHeight","align","sideOffsetPx","alignOffsetPx","x","width","y","height","collisionBounds","boundary","collisionRect","viewportWidth","viewportHeight","viewportPadPx","mainAxisOverflow","position","bounds","Math","max","clampToBounds","value","size","minimum","maximumEdge","maximum","min","computeAnchoredPosition","preferred","oppositeSide","opposite","preferredOverflow","oppositeOverflow","useOpposite","resolvedSide","availableHeight","POSITION_RETRY_BUDGET","AnchoredPositionController","constructor","options","this","scrollResizeHandler","resizeObserver","retryRaf","liveRaf","anchorMotionRaf","activeAnchorMotions","ownerDocument","last","isReady","generation","retryGeneration","anchorMotionStartHandler","event","eventCanMoveAnchor","scheduleAnchorMotionUpdate","anchorMotionEndHandler","ready","observe","bindListeners","unobserve","unbindListeners","cancel","schedule","onReady","cancelRetry","current","remaining","retryBudget","attempt","measured","update","requestAnimationFrame","getAnchor","isConnected","popup","getPopup","observeResizeTargets","topLayer","showPopover","matches","measure","next","apply","scheduleLiveUpdate","mode","liveUpdate","cancelAnimationFrame","window","addEventListener","observeResize","ResizeObserver","observer","observeAnchorMotion","getOwnerDocument","removeEventListener","disconnect","target","Element","contains","tick","ANCHORED_OVERLAY_BOUNDARY_ATTRIBUTE","composedParentElement","element","assignedSlot","parentElement","root","getRootNode","ShadowRoot","host","findAnchoredOverlayBoundary","HTMLElement","hasAttribute","resolveAnchoredOverlayBoundaryRect","explicitBoundary","undefined","getBoundingClientRect","tooltipCss","FALLBACK_HEIGHT","md","TOKEN_DEFAULTS","size400","sm","size300","xs","size200","lastDismissedAt","tooltipIdCounter","activeTooltip","createDsText","opts","el","document","createElement","as","variant","emphasis","color","wrap","textContent","text","styleTooltipLabel","wrapLabel","style","flexShrink","minWidth","maxWidth","whiteSpace","padding","Tooltip","__stencil_proxyCustomElement","registerHost","sideOffset","TOKEN_CSS_LENGTHS","space050","alignOffset","delay","animationDelayMedium3","shortcutKeyPosition","describedBy","tooltipId","delayTimer","closeTimer","popupEl","anchorObserver","didLoad","tip","offsetWidth","tooltipFallbackWidthPx","offsetHeight","tooltipFallbackHeightPx","innerWidth","innerHeight","dataset","transform","round","skipEnterAnimation","isOpen","programmaticAnchor","lastInteractionWasKeyboard","pointerEnterHandler","pointerType","show","pointerLeaveHandler","hide","pointerDownHandler","hideInstant","keyDownHandler","focusHandler","blurHandler","e","relatedTarget","escapeHandler","key","preventDefault","handleSlotChange","slot","querySelector","assignedElements","firstElementChild","tagName","unbindAnchor","bindAnchor","connectedCallback","connectAnchor","componentDidLoad","MutationObserver","childList","disconnectedCallback","clearTimers","destroyPopup","onContentOrPositionChange","renderPopupContent","schedulePosition","resolveCssLengthPx","hoverDelayMs","resolveCssTimeMs","instantReopenMs","animationDurationMedium1","fadeOutMs","resolveMotionTimeMs","motionShort3","animationDurationShort3","tooltipFallbackWidth","token","presentFrom","sameAnchor","linkDescribedBy","dismiss","slotted","child","unlinkDescribedBy","ids","getAttribute","add","setAttribute","id","removeAttribute","clearTimeout","setupOpenListeners","teardownOpenListeners","remove","reapplyLabelStyles","Date","now","instant","mountPopup","setTimeout","classList","className","Object","assign","zIndex","pointerEvents","body","appendChild","toggle","textVariant","CONTROL_TEXT_VARIANT","density","sc","inner","appendShortcut","shortcutKey","group","hint","wide","replaceChildren","render","h","Host","display","onSlotchange"],"sources":["src/wc/utils/shortcut-key.ts","src/wc/utils/anchored-position.ts","src/wc/utils/anchored-position-controller.ts","src/wc/utils/anchored-overlay-boundary.ts","src/wc/components/Tooltip/Tooltip.css?tag=ds-tooltip&encapsulation=scoped","src/wc/components/Tooltip/Tooltip.tsx"],"sourcesContent":["const MODIFIER_GLYPHS = new Set(['⌘', '⇧', '⌥', '⌃']);\nconst MODIFIER_LABELS: Readonly<Record<string, string>> = {\n alt: '⌥',\n cmd: '⌘',\n command: '⌘',\n control: '⌃',\n ctrl: '⌃',\n option: '⌥',\n shift: '⇧',\n};\n\nfunction canonicalKeyLabel(label: string): string {\n return MODIFIER_LABELS[label.toLowerCase()] ?? label;\n}\n\n/** Split a shortcut chord into the labels rendered on individual keycaps. */\nexport function shortcutKeyLabels(shortcut: string): string[] {\n const normalized = shortcut.trim();\n if (!normalized) return [];\n\n if (normalized.includes('+')) {\n return normalized\n .split('+')\n .map(part => part.trim())\n .filter(Boolean)\n .map(canonicalKeyLabel);\n }\n\n if (/\\s/.test(normalized)) {\n return normalized.split(/\\s+/).filter(Boolean).map(canonicalKeyLabel);\n }\n\n const characters = Array.from(normalized);\n const labels: string[] = [];\n while (characters.length > 1 && MODIFIER_GLYPHS.has(characters[0])) {\n labels.push(characters.shift()!);\n }\n labels.push(characters.join(''));\n return labels;\n}\n","export type AnchoredSide = 'top' | 'right' | 'bottom' | 'left';\nexport type AnchoredAlign = 'start' | 'center' | 'end';\n\nexport type AnchoredCollisionRect = Pick<\n DOMRectReadOnly,\n 'top' | 'left' | 'right' | 'bottom' | 'width' | 'height'\n>;\n\nexport interface AnchoredPositionInput {\n anchorRect: Pick<DOMRectReadOnly, 'top' | 'left' | 'right' | 'bottom' | 'width' | 'height'>;\n popupWidth: number;\n popupHeight: number;\n side: AnchoredSide;\n align: AnchoredAlign;\n sideOffsetPx: number;\n alignOffsetPx: number;\n viewportPadPx: number;\n viewportWidth: number;\n viewportHeight: number;\n /** Optional page or panel collision rectangle in viewport-fixed coordinates. */\n collisionRect?: AnchoredCollisionRect;\n}\n\nexport interface AnchoredPosition {\n x: number;\n y: number;\n /** Side actually used, which differs from the request when placement flipped. */\n resolvedSide: AnchoredSide;\n /** Vertical room available on the resolved side inside the padded viewport. */\n availableHeight: number;\n}\n\nconst OPPOSITE_SIDE: Record<AnchoredSide, AnchoredSide> = {\n top: 'bottom',\n right: 'left',\n bottom: 'top',\n left: 'right',\n};\n\n/** Unclamped coordinates for one candidate side. */\nfunction rawPosition(\n input: AnchoredPositionInput,\n side: AnchoredSide\n): Pick<AnchoredPosition, 'x' | 'y'> {\n const { anchorRect: anchor, popupWidth, popupHeight, align, sideOffsetPx, alignOffsetPx } = input;\n\n if (side === 'top' || side === 'bottom') {\n return {\n x:\n align === 'start'\n ? anchor.left + alignOffsetPx\n : align === 'end'\n ? anchor.right - popupWidth + alignOffsetPx\n : anchor.left + anchor.width / 2 - popupWidth / 2 + alignOffsetPx,\n y: side === 'top' ? anchor.top - popupHeight - sideOffsetPx : anchor.bottom + sideOffsetPx,\n };\n }\n\n return {\n x: side === 'left' ? anchor.left - popupWidth - sideOffsetPx : anchor.right + sideOffsetPx,\n y:\n align === 'start'\n ? anchor.top + alignOffsetPx\n : align === 'end'\n ? anchor.bottom - popupHeight + alignOffsetPx\n : anchor.top + anchor.height / 2 - popupHeight / 2 + alignOffsetPx,\n };\n}\n\n/** Total main-axis spill past the padded viewport for a candidate position. */\nfunction collisionBounds(input: AnchoredPositionInput) {\n const boundary = input.collisionRect ?? {\n top: 0,\n left: 0,\n right: input.viewportWidth,\n bottom: input.viewportHeight,\n };\n return {\n top: boundary.top + input.viewportPadPx,\n left: boundary.left + input.viewportPadPx,\n right: boundary.right - input.viewportPadPx,\n bottom: boundary.bottom - input.viewportPadPx,\n };\n}\n\nfunction mainAxisOverflow(\n input: AnchoredPositionInput,\n side: AnchoredSide,\n position: Pick<AnchoredPosition, 'x' | 'y'>\n): number {\n const { popupWidth, popupHeight } = input;\n const bounds = collisionBounds(input);\n\n if (side === 'top' || side === 'bottom') {\n return (\n Math.max(bounds.top - position.y, 0) + Math.max(position.y + popupHeight - bounds.bottom, 0)\n );\n }\n\n return (\n Math.max(bounds.left - position.x, 0) + Math.max(position.x + popupWidth - bounds.right, 0)\n );\n}\n\nfunction clampToBounds(value: number, size: number, minimum: number, maximumEdge: number): number {\n const maximum = Math.max(minimum, maximumEdge - size);\n return Math.min(Math.max(value, minimum), maximum);\n}\n\n/**\n * Pure viewport-fixed anchored-popup layout math shared by every element-anchored\n * overlay: menus, selects, tooltips, and anchored toasts.\n *\n * `side` is preferred. When the popup spills past the padded collision boundary and\n * the opposite side spills less, placement flips on the main axis; the result is\n * then clamped into that boundary on both axes. The viewport is the fallback when\n * no page or panel collision rectangle is supplied. Cross-axis `align` is applied\n * before clamping so `alignOffsetPx` stays an additive nudge.\n *\n * Callers own their own anchor semantics — inner-cell alignment offsets and\n * minimum widths belong to the calling component, not here.\n * @see choice-popup-alignment.ts for the choice-cell alignment transform.\n */\nexport function computeAnchoredPosition(input: AnchoredPositionInput): AnchoredPosition {\n const bounds = collisionBounds(input);\n const preferred = rawPosition(input, input.side);\n const oppositeSide = OPPOSITE_SIDE[input.side];\n const opposite = rawPosition(input, oppositeSide);\n const preferredOverflow = mainAxisOverflow(input, input.side, preferred);\n const oppositeOverflow = mainAxisOverflow(input, oppositeSide, opposite);\n const useOpposite = preferredOverflow > 0 && oppositeOverflow < preferredOverflow;\n const resolvedSide = useOpposite ? oppositeSide : input.side;\n const position = useOpposite ? opposite : preferred;\n const availableHeight =\n resolvedSide === 'top'\n ? input.anchorRect.top - bounds.top - input.sideOffsetPx\n : resolvedSide === 'bottom'\n ? bounds.bottom - input.anchorRect.bottom - input.sideOffsetPx\n : bounds.bottom - bounds.top;\n\n return {\n x: clampToBounds(position.x, input.popupWidth, bounds.left, bounds.right),\n y: clampToBounds(position.y, input.popupHeight, bounds.top, bounds.bottom),\n resolvedSide,\n availableHeight: Math.max(0, availableHeight),\n };\n}\n","import {\n computeAnchoredPosition,\n type AnchoredPosition,\n type AnchoredPositionInput,\n} from './anchored-position';\n\n/** Frames to wait for an anchor and popup to become measurable before giving up. */\nconst POSITION_RETRY_BUDGET = 8;\n\n/**\n * How the scroll/resize path reschedules. Each consumer family measured\n * differently before consolidation, and the differences are preserved verbatim\n * so placement timing is unchanged.\n *\n * - `sync` — measure inside the listener. Selects.\n * - `frame` — coalesce and measure on the next frame. Tooltips.\n * - `double-frame` — coalesce, measure next frame, then measure once more the\n * frame after. Scroll-driven owners such as ShellPage commit a compact-header\n * render in the frame after the scroll event, so a single frame reads a stale\n * anchor rect. Menus.\n */\nexport type AnchoredLiveUpdateMode = 'sync' | 'frame' | 'double-frame';\n\nexport interface AnchoredPositionControllerOptions {\n /** Resolve the anchor at measure time; positioning retries while this is null. */\n getAnchor: () => HTMLElement | null;\n /** Resolve the popup at measure time; positioning retries while this is null. */\n getPopup: () => HTMLElement | null;\n /** Stable owner fallback when framework bindings assign open before anchor. */\n getOwnerDocument?: () => Document | null;\n /**\n * Build the layout input for one measurement pass.\n *\n * The owning component keeps its own anchor semantics here — inner-cell align\n * offsets, minimum widths, and token resolution stay with the component rather\n * than moving into this controller. Return `null` when the component's own\n * guards say the popup is not measurable yet, which schedules a retry.\n */\n measure: (anchor: HTMLElement, popup: HTMLElement) => AnchoredPositionInput | null;\n /** Commit a changed position. Not called when the result is unchanged. */\n apply: (position: AnchoredPosition) => void;\n /**\n * Move a `popover=\"manual\"` popup into the native top layer before measuring.\n *\n * Use this for popups that remain in their owner's DOM tree. The top layer\n * gives `position: fixed` viewport coordinates even when an application\n * ancestor establishes a fixed-position containing block through containment,\n * transforms, or filters.\n */\n topLayer?: boolean;\n /** Fired once per `start()` when the first measurement succeeds. */\n onReady?: () => void;\n /** Scroll/resize behavior. Defaults to `sync`. */\n liveUpdate?: AnchoredLiveUpdateMode;\n /**\n * Re-measure when the popup or anchor resizes. Tooltips need this because the\n * label's `ds-text` upgrade changes the measured width after mount.\n */\n observeResize?: boolean;\n /**\n * Follow CSS transitions or animations that move the anchor without resizing\n * it. The observer only runs a measurement loop while related motion is active.\n */\n observeAnchorMotion?: boolean;\n retryBudget?: number;\n}\n\n/**\n * Lifecycle owner for an element-anchored popup: listener binding, measurement\n * retries, frame coalescing, and teardown.\n *\n * Pairs with `computeAnchoredPosition`, which owns the geometry. Split this way\n * because the geometry is pure and exhaustively testable while the lifecycle is\n * timing-dependent; keeping them separate means the risky half lives in exactly\n * one place.\n *\n * Not suitable for overlays that place several popups in one shared pass — Toast\n * positions N anchored records inside a single layout commit and keeps its own\n * scheduler, using only the geometry function.\n */\nexport class AnchoredPositionController {\n private readonly options: AnchoredPositionControllerOptions;\n private scrollResizeHandler: (() => void) | null = null;\n private resizeObserver: ResizeObserver | null = null;\n private retryRaf: number | null = null;\n private liveRaf: number | null = null;\n private anchorMotionRaf: number | null = null;\n private activeAnchorMotions = 0;\n private ownerDocument: Document | null = null;\n private last: AnchoredPosition | null = null;\n private isReady = false;\n private generation = 0;\n private retryGeneration = 0;\n private readonly anchorMotionStartHandler = (event: Event) => {\n if (!this.eventCanMoveAnchor(event)) return;\n this.activeAnchorMotions += 1;\n this.scheduleAnchorMotionUpdate();\n };\n private readonly anchorMotionEndHandler = (event: Event) => {\n if (!this.eventCanMoveAnchor(event)) return;\n this.activeAnchorMotions = Math.max(0, this.activeAnchorMotions - 1);\n this.scheduleAnchorMotionUpdate();\n };\n\n constructor(options: AnchoredPositionControllerOptions) {\n this.options = options;\n }\n\n /** `true` once a measurement has succeeded, for gating popup reveal. */\n get ready(): boolean {\n return this.isReady;\n }\n\n /**\n * Bind scroll/resize tracking for an opening popup.\n *\n * Deliberately does not schedule placement: every consumer binds listeners and\n * then schedules in its own order, and folding both into one call produced two\n * overlapping retry loops. Call `schedule()` or `update()` separately.\n */\n observe(): void {\n this.bindListeners();\n }\n\n /** Unbind tracking, cancel pending frames, and clear the cached position. */\n unobserve(): void {\n this.unbindListeners();\n this.cancel();\n this.last = null;\n this.isReady = false;\n }\n\n /**\n * Retry measurement each frame until it succeeds or the budget runs out, so a\n * popup is never revealed at 0,0 after a failed first pass.\n */\n schedule(onReady?: () => void): void {\n this.cancelRetry();\n this.isReady = false;\n const generation = this.generation;\n const retryGeneration = this.retryGeneration;\n const current = () =>\n generation === this.generation && retryGeneration === this.retryGeneration;\n\n let remaining = this.options.retryBudget ?? POSITION_RETRY_BUDGET;\n\n const attempt = () => {\n if (!current()) return;\n this.retryRaf = null;\n const measured = this.update();\n if (!current()) return;\n if (measured) {\n this.isReady = true;\n this.options.onReady?.();\n if (current()) onReady?.();\n return;\n }\n if (remaining > 0) {\n remaining -= 1;\n this.retryRaf = requestAnimationFrame(attempt);\n }\n };\n\n this.retryRaf = requestAnimationFrame(attempt);\n }\n\n /** Measure and commit once. @returns `false` when the popup is not measurable. */\n update(): boolean {\n const anchor = this.options.getAnchor();\n if (!anchor?.isConnected) return false;\n const popup = this.options.getPopup();\n if (!popup?.isConnected) return false;\n this.observeResizeTargets();\n\n if (\n this.options.topLayer &&\n typeof popup.showPopover === 'function' &&\n !popup.matches(':popover-open')\n ) {\n try {\n popup.showPopover();\n } catch {\n // The popup may not be connected yet. The scheduled retry will try again\n // on the next frame instead of measuring it in the wrong coordinate space.\n return false;\n }\n }\n\n const input = this.options.measure(anchor, popup);\n if (!input) return false;\n\n const next = computeAnchoredPosition(input);\n if (\n !this.last ||\n this.last.x !== next.x ||\n this.last.y !== next.y ||\n this.last.resolvedSide !== next.resolvedSide ||\n this.last.availableHeight !== next.availableHeight\n ) {\n this.last = next;\n this.options.apply(next);\n }\n return true;\n }\n\n /** Reposition an already-open popup without hiding it. */\n scheduleLiveUpdate(): void {\n const generation = this.generation;\n const mode = this.options.liveUpdate ?? 'sync';\n if (mode === 'sync') {\n this.update();\n return;\n }\n\n if (this.liveRaf !== null) return;\n\n if (mode === 'frame') {\n this.liveRaf = requestAnimationFrame(() => {\n if (generation !== this.generation) return;\n this.liveRaf = null;\n this.update();\n });\n return;\n }\n\n // double-frame stays coalesced until the second frame resolves.\n this.liveRaf = requestAnimationFrame(() => {\n if (generation !== this.generation) return;\n this.update();\n if (generation !== this.generation) return;\n this.liveRaf = requestAnimationFrame(() => {\n if (generation !== this.generation) return;\n this.liveRaf = null;\n this.update();\n });\n });\n }\n\n /** Cancel pending retry and live frames without unbinding listeners. */\n cancel(): void {\n this.generation += 1;\n this.cancelRetry();\n if (this.liveRaf !== null) {\n cancelAnimationFrame(this.liveRaf);\n this.liveRaf = null;\n }\n if (this.anchorMotionRaf !== null) {\n cancelAnimationFrame(this.anchorMotionRaf);\n this.anchorMotionRaf = null;\n }\n }\n\n private cancelRetry(): void {\n this.retryGeneration += 1;\n if (this.retryRaf === null) return;\n cancelAnimationFrame(this.retryRaf);\n this.retryRaf = null;\n }\n\n private bindListeners(): void {\n this.unbindListeners();\n this.scrollResizeHandler = () => this.scheduleLiveUpdate();\n // Capture phase so scrolling inside any ancestor repositions the popup.\n window.addEventListener('scroll', this.scrollResizeHandler, true);\n window.addEventListener('resize', this.scrollResizeHandler);\n\n if (this.options.observeResize && typeof ResizeObserver !== 'undefined') {\n const observer = new ResizeObserver(() => {\n if (this.resizeObserver === observer) this.scheduleLiveUpdate();\n });\n this.resizeObserver = observer;\n this.observeResizeTargets();\n }\n\n if (this.options.observeAnchorMotion) {\n this.ownerDocument =\n this.options.getAnchor()?.ownerDocument ?? this.options.getOwnerDocument?.() ?? null;\n this.ownerDocument?.addEventListener('transitionrun', this.anchorMotionStartHandler, true);\n this.ownerDocument?.addEventListener('transitionend', this.anchorMotionEndHandler, true);\n this.ownerDocument?.addEventListener('transitioncancel', this.anchorMotionEndHandler, true);\n this.ownerDocument?.addEventListener('animationstart', this.anchorMotionStartHandler, true);\n this.ownerDocument?.addEventListener('animationend', this.anchorMotionEndHandler, true);\n this.ownerDocument?.addEventListener('animationcancel', this.anchorMotionEndHandler, true);\n }\n }\n\n private unbindListeners(): void {\n if (this.scrollResizeHandler) {\n window.removeEventListener('scroll', this.scrollResizeHandler, true);\n window.removeEventListener('resize', this.scrollResizeHandler);\n this.scrollResizeHandler = null;\n }\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n this.ownerDocument?.removeEventListener('transitionrun', this.anchorMotionStartHandler, true);\n this.ownerDocument?.removeEventListener('transitionend', this.anchorMotionEndHandler, true);\n this.ownerDocument?.removeEventListener('transitioncancel', this.anchorMotionEndHandler, true);\n this.ownerDocument?.removeEventListener('animationstart', this.anchorMotionStartHandler, true);\n this.ownerDocument?.removeEventListener('animationend', this.anchorMotionEndHandler, true);\n this.ownerDocument?.removeEventListener('animationcancel', this.anchorMotionEndHandler, true);\n this.ownerDocument = null;\n this.activeAnchorMotions = 0;\n }\n\n private eventCanMoveAnchor(event: Event): boolean {\n const anchor = this.options.getAnchor();\n const target = event.target;\n if (!anchor || !(target instanceof Element)) return false;\n // Motion on the anchor or one of its layout ancestors can move its rect.\n // Descendant-only animation is irrelevant unless it resizes the anchor,\n // which the ResizeObserver path already covers.\n return target === anchor || target.contains(anchor);\n }\n\n private scheduleAnchorMotionUpdate(): void {\n if (this.anchorMotionRaf !== null) return;\n const generation = this.generation;\n const tick = () => {\n if (generation !== this.generation) return;\n this.anchorMotionRaf = null;\n this.update();\n if (generation !== this.generation) return;\n if (this.activeAnchorMotions <= 0 || !this.options.getAnchor()?.isConnected) {\n this.activeAnchorMotions = 0;\n return;\n }\n this.anchorMotionRaf = requestAnimationFrame(tick);\n };\n this.anchorMotionRaf = requestAnimationFrame(tick);\n }\n\n /**\n * Re-attach the resize observer after the popup remounts. Safe to call\n * repeatedly; `ResizeObserver.observe` ignores duplicate targets.\n */\n observeResizeTargets(): void {\n if (!this.resizeObserver) return;\n const popup = this.options.getPopup();\n if (popup) this.resizeObserver.observe(popup);\n const anchor = this.options.getAnchor();\n if (anchor) this.resizeObserver.observe(anchor);\n }\n}\n","import type { AnchoredCollisionRect } from './anchored-position';\n\n/** Attribute placed on a page or panel whose visible rectangle owns anchored overlays. */\nexport const ANCHORED_OVERLAY_BOUNDARY_ATTRIBUTE = 'data-ds-overlay-boundary';\n\n/** An element-owned collision rectangle, or an explicit escape to the viewport. */\nexport type AnchoredOverlayBoundary = HTMLElement | 'viewport';\n\nfunction composedParentElement(element: Element): Element | null {\n if (element.assignedSlot) return element.assignedSlot;\n if (element.parentElement) return element.parentElement;\n const root = element.getRootNode();\n return root instanceof ShadowRoot ? root.host : null;\n}\n\n/**\n * Find the nearest collision owner through light DOM, assigned slots, and open\n * shadow roots. The popup may live in the top layer or a body portal; ownership\n * follows its anchor instead of the popup's rendering location.\n */\nexport function findAnchoredOverlayBoundary(anchor: Element): HTMLElement | null {\n let current: Element | null = anchor;\n while (current) {\n if (\n current instanceof HTMLElement &&\n current.hasAttribute(ANCHORED_OVERLAY_BOUNDARY_ATTRIBUTE)\n ) {\n return current;\n }\n current = composedParentElement(current);\n }\n return null;\n}\n\n/** Resolve an explicit owner first, then the nearest composed-tree boundary. */\nexport function resolveAnchoredOverlayBoundaryRect(\n anchor: Element,\n explicitBoundary?: AnchoredOverlayBoundary\n): AnchoredCollisionRect | undefined {\n if (explicitBoundary === 'viewport') return undefined;\n return (explicitBoundary ?? findAnchoredOverlayBoundary(anchor))?.getBoundingClientRect();\n}\n","@import '../../utils/radius.css';\n@import '../../utils/control-density.css';\n@import '../../utils/key-hint.css';\n@import '../../utils/forced-colors.css';\n\n.tooltip-popup {\n box-sizing: border-box;\n background-color: var(--color-background-primary);\n border-radius: var(--ds-radius-tooltip-control, var(--dimension-radius-025));\n box-shadow: var(--effect-elevation-elevated-floating);\n white-space: nowrap;\n pointer-events: none;\n animation: tooltipFadeIn var(--effect-motion-short-2) forwards;\n will-change: transform;\n backface-visibility: hidden;\n}\n\n/* Warm handoff between nearby triggers — no enter fade (avoids 20–100ms lag). */\n.tooltip-popup--instant {\n animation: none;\n opacity: 1;\n}\n\n.tooltip-popup--closing {\n animation: tooltipFadeOut var(--effect-motion-short-3) forwards;\n}\n\n/* Density: md / sm / xs via `.ds-control--*` on `.tooltip-inner`. */\n.tooltip-inner {\n box-sizing: border-box;\n height: var(--ds-control-height, var(--dimension-size-400));\n display: flex;\n align-items: center;\n gap: var(--ds-control-gap, var(--dimension-space-050));\n padding: 0 var(--ds-control-padding-inline, var(--dimension-space-075));\n}\n\n/*\n * Label layout lives on ds-text (metric-box + control label-inset).\n * NOTE: Stencil scopes this to `ds-text.sc-ds-tooltip`, but portaled\n * createElement ds-text loses that class when Text's <Host class> renders.\n * `renderPopupContent` therefore also sets these as inline styles.\n */\n.tooltip-inner > ds-text {\n flex-shrink: 0;\n min-width: max-content;\n max-width: none;\n padding: 0 var(--ds-control-label-inset, var(--dimension-space-025));\n color: var(--color-foreground-primary);\n}\n\n.tooltip-popup--wrap {\n white-space: normal;\n max-inline-size: var(--dimension-panel-width-xs);\n}\n\n.tooltip-popup--wrap .tooltip-inner {\n height: auto;\n min-height: var(--ds-control-height, var(--dimension-size-400));\n padding-block: var(--dimension-space-050);\n align-items: flex-start;\n}\n\n.tooltip-popup--wrap .tooltip-inner > ds-text {\n flex: 1 1 auto;\n min-width: 0;\n max-width: 100%;\n white-space: pre-line;\n}\n\n@keyframes tooltipFadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n@keyframes tooltipFadeOut {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .tooltip-popup,\n .tooltip-popup--instant {\n animation: none;\n opacity: 1;\n }\n\n .tooltip-popup--closing {\n animation: none;\n opacity: 0;\n }\n}\n\n@media (forced-colors: active) {\n .tooltip-popup {\n box-shadow: none;\n outline: var(--dimension-stroke-width-012) solid var(--ds-forced-color-content);\n outline-offset: calc(-1 * var(--dimension-stroke-width-012));\n }\n}\n","import { Component, Prop, Element, Method, Watch, h, Host } from '@stencil/core';\nimport {\n CONTROL_TEXT_VARIANT,\n resolveCssLengthPx,\n resolveCssTimeMs,\n resolveMotionTimeMs,\n TOKEN_CSS_LENGTHS,\n TOKEN_DEFAULTS,\n} from '../../utils';\nimport type { TextVariant } from '../Text/text-types';\nimport { shortcutKeyLabels } from '../../utils/shortcut-key';\nimport { AnchoredPositionController } from '../../utils/anchored-position-controller';\nimport {\n resolveAnchoredOverlayBoundaryRect,\n type AnchoredOverlayBoundary,\n} from '../../utils/anchored-overlay-boundary';\n// Side-effect: register `ds-text` — the portal builds it via createElement, not JSX.\nimport '../Text/Text';\n\nexport type TooltipSide = 'top' | 'right' | 'bottom' | 'left';\nexport type TooltipAlign = 'start' | 'center' | 'end';\nexport type TooltipSize = 'md' | 'sm' | 'xs';\n\nconst FALLBACK_HEIGHT: Record<TooltipSize, string> = {\n md: TOKEN_DEFAULTS.size400,\n sm: TOKEN_DEFAULTS.size300,\n xs: TOKEN_DEFAULTS.size200,\n};\n\nlet lastDismissedAt = 0;\nlet tooltipIdCounter = 0;\n/** Currently open tooltip — force-cleared on warm handoff so tips don't cross-fade. */\nlet activeTooltip: Tooltip | null = null;\n\ntype DsTextEl = HTMLElement & {\n as: string;\n variant: TextVariant;\n emphasis: boolean;\n color: string;\n wrap: string;\n};\n\nfunction createDsText(opts: {\n variant: TextVariant;\n emphasis?: boolean;\n color?: string;\n wrap?: 'wrap' | 'nowrap' | 'balance' | 'pretty';\n text: string;\n}): DsTextEl {\n const el = document.createElement('ds-text') as DsTextEl;\n el.as = 'span';\n el.variant = opts.variant;\n el.emphasis = opts.emphasis ?? false;\n el.color = opts.color ?? 'inherit';\n if (opts.wrap) el.wrap = opts.wrap;\n el.textContent = opts.text;\n return el;\n}\n\n/**\n * Control-density label styles for portaled ds-text.\n * Scoped CSS requires `sc-ds-tooltip` on the host, but Text's `<Host class>`\n * overwrites imperative className — so these must be inline to stick.\n */\nfunction styleTooltipLabel(el: HTMLElement, wrapLabel = false) {\n el.style.flexShrink = wrapLabel ? '1' : '0';\n el.style.minWidth = wrapLabel ? '0' : 'max-content';\n el.style.maxWidth = wrapLabel ? '100%' : 'none';\n el.style.whiteSpace = wrapLabel ? 'pre-line' : '';\n el.style.padding = '0 var(--ds-control-label-inset, var(--dimension-space-025))';\n el.style.color = 'var(--color-foreground-primary)';\n}\n\n/**\n * Imperative body portal for the popup.\n * Stencil must not own the portaled node — moving a VDOM child to `document.body`\n * causes recreate → re-portal → @State loops that freeze the page.\n */\n@Component({\n tag: 'ds-tooltip',\n styleUrl: 'Tooltip.css',\n scoped: true,\n})\nexport class Tooltip {\n @Element() el!: HTMLElement;\n\n /**\n * Tooltip text. Empty/whitespace skips show — useful when the wrapper must stay\n * mounted for layout/animation stability (e.g. PanelNav expand/collapse).\n */\n @Prop() label!: string;\n\n /** Control density (height, padding, type). */\n @Prop() size: TooltipSize = 'md';\n\n @Prop() side: TooltipSide = 'top';\n @Prop() align: TooltipAlign = 'center';\n /** Gap between anchor and tooltip — number (px) or TokoMo length. */\n @Prop() sideOffset: number | string = TOKEN_CSS_LENGTHS.space050;\n /** Cross-axis offset — number (px) or TokoMo length. */\n @Prop() alignOffset: number | string = 0;\n /** Explicit collision owner, `viewport`, or the nearest data-ds-overlay-boundary ancestor. */\n @Prop() boundary: AnchoredOverlayBoundary | undefined;\n /**\n * Hover show delay before the tooltip appears.\n * Default: `--effect-animation-delay-medium-3` (1000ms). Accepts a number (ms)\n * or a TokoMo time token / `var(--effect-animation-delay-*)`. Applies to the\n * initial hover/focus show only — after a recent dismiss, reopen is instant.\n * Prefer the default; override only for denser chrome or rare/destructive actions.\n */\n @Prop() delay: number | string = TOKEN_DEFAULTS.animationDelayMedium3;\n @Prop() shortcutKey: string | undefined;\n @Prop() shortcutKeyPosition: 'start' | 'end' = 'end';\n /**\n * Link the trigger with aria-describedby while the popup is open. Disable when\n * the label is already in the DOM, such as a truncated table cell.\n */\n @Prop() describedBy = true;\n /** Allow wrapping at a panel-xs max width and preserve explicit line breaks. */\n @Prop() wrapLabel = false;\n\n private tooltipId = `ds-tooltip-${++tooltipIdCounter}`;\n private delayTimer: ReturnType<typeof setTimeout> | null = null;\n private closeTimer: ReturnType<typeof setTimeout> | null = null;\n private anchor: HTMLElement | null = null;\n private popupEl: HTMLElement | null = null;\n private anchorObserver: MutationObserver | null = null;\n private didLoad = false;\n private readonly position = new AnchoredPositionController({\n getAnchor: () => this.anchor,\n getPopup: () => this.popupEl,\n getOwnerDocument: () => this.el.ownerDocument,\n measure: (anchor, tip) => ({\n anchorRect: anchor.getBoundingClientRect(),\n // Fall back to token metrics until `ds-text` upgrades and reports a width.\n popupWidth: tip.offsetWidth || this.tooltipFallbackWidthPx,\n popupHeight: tip.offsetHeight || this.tooltipFallbackHeightPx,\n side: this.side,\n align: this.align,\n sideOffsetPx: this.sideOffsetPx,\n alignOffsetPx: this.alignOffsetPx,\n viewportPadPx: this.viewportPadPx,\n viewportWidth: window.innerWidth,\n viewportHeight: window.innerHeight,\n collisionRect: resolveAnchoredOverlayBoundaryRect(anchor, this.boundary),\n }),\n apply: ({ x, y, resolvedSide }) => {\n if (!this.popupEl) return;\n this.popupEl.dataset.side = resolvedSide;\n this.popupEl.style.transform = `translate(${Math.round(x)}px, ${Math.round(y)}px)`;\n },\n liveUpdate: 'frame',\n observeResize: true,\n });\n private skipEnterAnimation = false;\n private isOpen = false;\n private programmaticAnchor = false;\n private lastInteractionWasKeyboard = false;\n private pointerEnterHandler = (event: PointerEvent) => {\n if (event.pointerType === 'touch') return;\n this.show();\n };\n private pointerLeaveHandler = (event: PointerEvent) => {\n if (event.pointerType === 'touch') return;\n this.hide();\n };\n private pointerDownHandler = (event: PointerEvent) => {\n this.lastInteractionWasKeyboard = false;\n if (event.pointerType === 'touch' && (this.isOpen || this.popupEl)) this.hideInstant();\n };\n private keyDownHandler = () => {\n this.lastInteractionWasKeyboard = true;\n };\n /** focusin/focusout so nested focus targets (e.g. ds-button-* inner button) still open the tip. */\n private focusHandler = () => {\n if (this.lastInteractionWasKeyboard || this.anchor?.matches(':focus-visible')) this.show();\n };\n private blurHandler: (e: FocusEvent) => void = e => {\n const next = e.relatedTarget as Node | null;\n if (next && this.anchor?.contains(next)) return;\n this.hide();\n };\n private escapeHandler = (event: KeyboardEvent) => {\n if (event.key !== 'Escape' || !this.isOpen) return;\n event.preventDefault();\n this.hide();\n };\n\n connectedCallback() {\n if (!this.didLoad) return;\n this.connectAnchor();\n }\n\n componentDidLoad() {\n this.didLoad = true;\n this.connectAnchor();\n }\n\n private connectAnchor() {\n this.bindAnchor();\n if (this.anchorObserver) return;\n this.anchorObserver = new MutationObserver(() => this.handleSlotChange());\n this.anchorObserver.observe(this.el, { childList: true });\n }\n\n disconnectedCallback() {\n if (activeTooltip === this) activeTooltip = null;\n this.anchorObserver?.disconnect();\n this.anchorObserver = null;\n this.unbindAnchor();\n this.clearTimers();\n this.destroyPopup();\n }\n\n @Watch('label')\n @Watch('size')\n @Watch('side')\n @Watch('align')\n @Watch('sideOffset')\n @Watch('alignOffset')\n @Watch('boundary')\n @Watch('shortcutKey')\n @Watch('shortcutKeyPosition')\n @Watch('wrapLabel')\n onContentOrPositionChange() {\n if (!this.label?.trim()) {\n if (this.isOpen || this.popupEl) this.hideInstant();\n return;\n }\n if (!this.popupEl || !this.isOpen) return;\n this.renderPopupContent();\n this.schedulePosition();\n }\n\n private get viewportPadPx(): number {\n return resolveCssLengthPx(TOKEN_DEFAULTS.space050, TOKEN_DEFAULTS.space050);\n }\n\n private get sideOffsetPx(): number {\n return resolveCssLengthPx(this.sideOffset, TOKEN_DEFAULTS.space050);\n }\n\n private get alignOffsetPx(): number {\n return resolveCssLengthPx(this.alignOffset, 0);\n }\n\n private get hoverDelayMs(): number {\n return resolveCssTimeMs(this.delay, TOKEN_DEFAULTS.animationDelayMedium3);\n }\n\n private get instantReopenMs(): number {\n return resolveCssTimeMs(\n TOKEN_DEFAULTS.animationDurationMedium1,\n TOKEN_DEFAULTS.animationDurationMedium1\n );\n }\n\n private get fadeOutMs(): number {\n return resolveMotionTimeMs(TOKEN_DEFAULTS.motionShort3, TOKEN_DEFAULTS.animationDurationShort3);\n }\n\n private get tooltipFallbackWidthPx(): number {\n return resolveCssLengthPx(\n TOKEN_DEFAULTS.tooltipFallbackWidth,\n TOKEN_DEFAULTS.tooltipFallbackWidth\n );\n }\n\n private get tooltipFallbackHeightPx(): number {\n const token = FALLBACK_HEIGHT[this.size];\n return resolveCssLengthPx(token, token);\n }\n\n /**\n * Present against an external anchor the host already measured.\n * Does not bind hover or focus on that anchor — the owner drives show/hide.\n */\n @Method()\n async presentFrom(anchor: HTMLElement, label?: string) {\n if (label != null) this.label = label;\n if (!this.label?.trim()) {\n this.hide();\n return;\n }\n const sameAnchor = this.anchor === anchor;\n if (!sameAnchor) {\n this.unbindAnchor();\n this.anchor = anchor;\n this.programmaticAnchor = true;\n if (this.popupEl && this.describedBy) this.linkDescribedBy();\n }\n if (this.popupEl) {\n this.renderPopupContent();\n this.schedulePosition();\n return;\n }\n if (this.delayTimer && sameAnchor) return;\n this.show();\n }\n\n /** Dismiss a popup opened through presentFrom or the slotted trigger. */\n @Method()\n async dismiss() {\n this.hide();\n }\n\n private bindAnchor() {\n if (this.programmaticAnchor) return;\n const slot = this.el.querySelector('slot') as HTMLSlotElement | null;\n const slotted = slot?.assignedElements?.() ?? [];\n const child = (slotted[0] ?? this.el.firstElementChild) as HTMLElement | null;\n if (!child || child.tagName === 'SLOT' || child === this.anchor) return;\n this.anchor = child;\n child.addEventListener('pointerenter', this.pointerEnterHandler);\n child.addEventListener('pointerleave', this.pointerLeaveHandler);\n child.addEventListener('pointerdown', this.pointerDownHandler);\n child.addEventListener('keydown', this.keyDownHandler);\n child.addEventListener('focusin', this.focusHandler);\n child.addEventListener('focusout', this.blurHandler);\n }\n\n private unbindAnchor() {\n if (!this.anchor) return;\n this.unlinkDescribedBy();\n if (!this.programmaticAnchor) {\n this.anchor.removeEventListener('pointerenter', this.pointerEnterHandler);\n this.anchor.removeEventListener('pointerleave', this.pointerLeaveHandler);\n this.anchor.removeEventListener('pointerdown', this.pointerDownHandler);\n this.anchor.removeEventListener('keydown', this.keyDownHandler);\n this.anchor.removeEventListener('focusin', this.focusHandler);\n this.anchor.removeEventListener('focusout', this.blurHandler);\n }\n this.anchor = null;\n this.programmaticAnchor = false;\n }\n\n private linkDescribedBy() {\n if (!this.describedBy || !this.anchor || !this.popupEl) return;\n const ids = new Set(\n (this.anchor.getAttribute('aria-describedby') ?? '').split(/\\s+/).filter(Boolean)\n );\n ids.add(this.tooltipId);\n this.anchor.setAttribute('aria-describedby', Array.from(ids).join(' '));\n }\n\n private unlinkDescribedBy() {\n if (!this.anchor) return;\n const ids = (this.anchor.getAttribute('aria-describedby') ?? '')\n .split(/\\s+/)\n .filter(id => id && id !== this.tooltipId);\n if (ids.length) this.anchor.setAttribute('aria-describedby', ids.join(' '));\n else this.anchor.removeAttribute('aria-describedby');\n }\n\n private handleSlotChange = () => {\n if (this.programmaticAnchor) return;\n const slot = this.el.querySelector('slot') as HTMLSlotElement | null;\n const next = (slot?.assignedElements?.()[0] ?? this.el.firstElementChild) as HTMLElement | null;\n if (next === this.anchor || next?.tagName === 'SLOT') return;\n if (this.isOpen || this.popupEl) this.hideInstant();\n this.unbindAnchor();\n this.bindAnchor();\n };\n\n private clearTimers() {\n if (this.delayTimer) {\n clearTimeout(this.delayTimer);\n this.delayTimer = null;\n }\n if (this.closeTimer) {\n clearTimeout(this.closeTimer);\n this.closeTimer = null;\n }\n }\n\n private setupOpenListeners() {\n // Binds scroll/resize + the resize observer; placement itself is scheduled\n // by schedulePosition() so the label restyle stays interleaved.\n this.position.observe();\n document.addEventListener('keydown', this.escapeHandler);\n }\n\n private teardownOpenListeners() {\n this.position.unobserve();\n document.removeEventListener('keydown', this.escapeHandler);\n }\n\n private destroyPopup() {\n this.teardownOpenListeners();\n this.unlinkDescribedBy();\n if (!this.popupEl) return;\n this.popupEl.remove();\n this.popupEl = null;\n }\n\n /**\n * Position after `ds-text` upgrades and lays out. Measuring synchronously in\n * `mountPopup` reads a collapsed/fallback width and places left/right tips wrong.\n */\n private schedulePosition() {\n if (!this.popupEl) return;\n\n const reapplyLabelStyles = () => {\n const label = this.popupEl?.querySelector(':scope > .tooltip-inner > ds-text');\n if (label instanceof HTMLElement) styleTooltipLabel(label, this.wrapLabel);\n };\n\n requestAnimationFrame(() => {\n reapplyLabelStyles();\n this.position.update();\n requestAnimationFrame(() => {\n reapplyLabelStyles();\n this.position.update();\n });\n });\n\n // The popup remounts on every show, so re-target the observer bound in start().\n this.position.observeResizeTargets();\n }\n\n /** Drop the open tip immediately (warm handoff to another tooltip). */\n private hideInstant() {\n this.clearTimers();\n lastDismissedAt = Date.now();\n if (activeTooltip === this) activeTooltip = null;\n this.destroyPopup();\n this.isOpen = false;\n this.skipEnterAnimation = false;\n }\n\n private show() {\n // Empty label = wrapper present for DOM stability (e.g. PanelNav expand/collapse)\n // but no tip should appear.\n if (!this.label?.trim()) return;\n this.clearTimers();\n let instant = Date.now() - lastDismissedAt < this.instantReopenMs;\n if (activeTooltip && activeTooltip !== this) {\n activeTooltip.hideInstant();\n instant = true;\n }\n // eslint-disable-next-line @typescript-eslint/no-this-alias -- module singleton tracks the active instance\n activeTooltip = this;\n this.skipEnterAnimation = instant;\n if (instant) {\n this.mountPopup();\n return;\n }\n this.delayTimer = setTimeout(() => {\n this.delayTimer = null;\n if (!this.label?.trim()) return;\n this.mountPopup();\n }, this.hoverDelayMs);\n }\n\n private hide() {\n this.clearTimers();\n if (!this.popupEl && !this.isOpen) return;\n lastDismissedAt = Date.now();\n if (!this.popupEl) {\n this.isOpen = false;\n return;\n }\n this.popupEl.classList.remove('tooltip-popup--instant');\n this.popupEl.classList.add('tooltip-popup--closing');\n if (this.fadeOutMs === 0) {\n if (activeTooltip === this) activeTooltip = null;\n this.destroyPopup();\n this.isOpen = false;\n this.skipEnterAnimation = false;\n return;\n }\n this.closeTimer = setTimeout(() => {\n this.closeTimer = null;\n if (activeTooltip === this) activeTooltip = null;\n this.destroyPopup();\n this.isOpen = false;\n this.skipEnterAnimation = false;\n }, this.fadeOutMs);\n }\n\n private mountPopup() {\n if (!this.popupEl) {\n const tip = document.createElement('div');\n tip.id = this.tooltipId;\n tip.setAttribute('role', 'tooltip');\n // `sc-ds-tooltip` is required for Stencil scoped CSS to match outside the host.\n tip.className = 'tooltip-popup ds-forced-colors-scope sc-ds-tooltip';\n Object.assign(tip.style, {\n position: 'fixed',\n left: '0',\n top: '0',\n zIndex: 'var(--dimension-z-index-tooltip)',\n pointerEvents: 'none',\n });\n document.body.appendChild(tip);\n this.popupEl = tip;\n }\n\n this.setupOpenListeners();\n this.linkDescribedBy();\n this.popupEl.classList.toggle('tooltip-popup--instant', this.skipEnterAnimation);\n this.popupEl.classList.toggle('tooltip-popup--wrap', this.wrapLabel);\n this.popupEl.classList.remove('tooltip-popup--closing');\n this.renderPopupContent();\n this.schedulePosition();\n this.isOpen = true;\n }\n\n private renderPopupContent() {\n if (!this.popupEl) return;\n this.popupEl.classList.toggle('tooltip-popup--wrap', this.wrapLabel);\n const textVariant = CONTROL_TEXT_VARIANT[this.size];\n const density =\n this.size === 'md'\n ? 'ds-control--md'\n : this.size === 'sm'\n ? 'ds-control--sm'\n : 'ds-control--xs';\n // Every layout node needs `sc-ds-tooltip` so scoped selectors (`.foo.sc-ds-tooltip`) match.\n const sc = 'sc-ds-tooltip';\n\n const inner = document.createElement('div');\n inner.className = `tooltip-inner ${density} ${sc}`;\n\n const appendShortcut = (position: 'start' | 'end') => {\n if (!this.shortcutKey || this.shortcutKeyPosition !== position) return;\n const group = document.createElement('span');\n group.className = `key-hint-group ${sc}`;\n group.setAttribute('aria-hidden', 'true');\n\n for (const label of shortcutKeyLabels(this.shortcutKey)) {\n const hint = document.createElement('span');\n const wide = Array.from(label).length > 1 ? ' key-hint--wide' : '';\n hint.className = `key-hint${wide} ${sc}`;\n const text = document.createElement('span');\n text.className = `key-hint__label ${sc}`;\n text.textContent = label;\n hint.appendChild(text);\n group.appendChild(hint);\n }\n inner.appendChild(group);\n };\n\n appendShortcut('start');\n\n // ds-text is the layout box (metric-box + 2px control label-inset).\n // Inline styles required — see styleTooltipLabel.\n const label = createDsText({\n variant: textVariant,\n wrap: this.wrapLabel ? 'wrap' : 'nowrap',\n text: this.label,\n });\n styleTooltipLabel(label, this.wrapLabel);\n inner.appendChild(label);\n\n appendShortcut('end');\n\n this.popupEl.replaceChildren(inner);\n }\n\n render() {\n return (\n <Host style={{ display: 'contents' }}>\n <slot onSlotchange={this.handleSlotChange} />\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["MODIFIER_GLYPHS","Set","MODIFIER_LABELS","alt","cmd","command","control","ctrl","option","shift","canonicalKeyLabel","label","toLowerCase","shortcutKeyLabels","shortcut","normalized","trim","includes","split","map","part","filter","Boolean","test","characters","Array","from","labels","length","has","push","join","OPPOSITE_SIDE","top","right","bottom","left","rawPosition","input","side","anchorRect","anchor","popupWidth","popupHeight","align","sideOffsetPx","alignOffsetPx","x","width","y","height","collisionBounds","boundary","collisionRect","viewportWidth","viewportHeight","viewportPadPx","mainAxisOverflow","position","bounds","Math","max","clampToBounds","value","size","minimum","maximumEdge","maximum","min","computeAnchoredPosition","preferred","oppositeSide","opposite","preferredOverflow","oppositeOverflow","useOpposite","resolvedSide","availableHeight","POSITION_RETRY_BUDGET","AnchoredPositionController","constructor","options","this","scrollResizeHandler","resizeObserver","retryRaf","liveRaf","anchorMotionRaf","activeAnchorMotions","ownerDocument","last","isReady","generation","retryGeneration","anchorMotionStartHandler","event","eventCanMoveAnchor","scheduleAnchorMotionUpdate","anchorMotionEndHandler","ready","observe","bindListeners","unobserve","unbindListeners","cancel","schedule","onReady","cancelRetry","current","remaining","retryBudget","attempt","measured","update","requestAnimationFrame","getAnchor","isConnected","popup","getPopup","observeResizeTargets","topLayer","showPopover","matches","measure","next","apply","scheduleLiveUpdate","mode","liveUpdate","cancelAnimationFrame","window","addEventListener","observeResize","ResizeObserver","observer","observeAnchorMotion","getOwnerDocument","removeEventListener","disconnect","target","Element","contains","tick","ANCHORED_OVERLAY_BOUNDARY_ATTRIBUTE","composedParentElement","element","assignedSlot","parentElement","root","getRootNode","ShadowRoot","host","findAnchoredOverlayBoundary","HTMLElement","hasAttribute","resolveAnchoredOverlayBoundaryRect","explicitBoundary","undefined","getBoundingClientRect","tooltipCss","FALLBACK_HEIGHT","md","TOKEN_DEFAULTS","size400","sm","size300","xs","size200","lastDismissedAt","tooltipIdCounter","activeTooltip","createDsText","opts","el","document","createElement","as","variant","emphasis","color","wrap","textContent","text","styleTooltipLabel","wrapLabel","style","flexShrink","minWidth","maxWidth","whiteSpace","padding","Tooltip","__stencil_proxyCustomElement","registerHost","sideOffset","TOKEN_CSS_LENGTHS","space050","alignOffset","delay","animationDelayMedium3","shortcutKeyPosition","describedBy","tooltipId","delayTimer","closeTimer","popupEl","anchorObserver","didLoad","tip","offsetWidth","tooltipFallbackWidthPx","offsetHeight","tooltipFallbackHeightPx","innerWidth","innerHeight","dataset","transform","round","skipEnterAnimation","isOpen","programmaticAnchor","lastInteractionWasKeyboard","pointerEnterHandler","pointerType","show","pointerLeaveHandler","hide","pointerDownHandler","hideInstant","keyDownHandler","focusHandler","blurHandler","e","relatedTarget","escapeHandler","key","preventDefault","handleSlotChange","slot","querySelector","assignedElements","firstElementChild","tagName","unbindAnchor","bindAnchor","connectedCallback","connectAnchor","componentDidLoad","MutationObserver","childList","disconnectedCallback","clearTimers","destroyPopup","onContentOrPositionChange","renderPopupContent","schedulePosition","resolveCssLengthPx","hoverDelayMs","resolveCssTimeMs","instantReopenMs","animationDurationMedium1","fadeOutMs","resolveMotionTimeMs","motionShort3","animationDurationShort3","tooltipFallbackWidth","token","presentFrom","sameAnchor","linkDescribedBy","dismiss","slotted","child","unlinkDescribedBy","ids","getAttribute","add","setAttribute","id","removeAttribute","clearTimeout","setupOpenListeners","teardownOpenListeners","remove","reapplyLabelStyles","Date","now","instant","mountPopup","setTimeout","classList","className","Object","assign","zIndex","pointerEvents","body","appendChild","toggle","textVariant","CONTROL_TEXT_VARIANT","density","sc","inner","appendShortcut","shortcutKey","group","hint","wide","replaceChildren","render","h","Host","display","onSlotchange"],"sources":["src/wc/utils/shortcut-key.ts","src/wc/utils/anchored-position.ts","src/wc/utils/anchored-position-controller.ts","src/wc/utils/anchored-overlay-boundary.ts","src/wc/components/Tooltip/Tooltip.css?tag=ds-tooltip&encapsulation=scoped","src/wc/components/Tooltip/Tooltip.tsx"],"sourcesContent":["const MODIFIER_GLYPHS = new Set(['⌘', '⇧', '⌥', '⌃']);\nconst MODIFIER_LABELS: Readonly<Record<string, string>> = {\n alt: '⌥',\n cmd: '⌘',\n command: '⌘',\n control: '⌃',\n ctrl: '⌃',\n option: '⌥',\n shift: '⇧',\n};\n\nfunction canonicalKeyLabel(label: string): string {\n return MODIFIER_LABELS[label.toLowerCase()] ?? label;\n}\n\n/** Split a shortcut chord into the labels rendered on individual keycaps. */\nexport function shortcutKeyLabels(shortcut: string): string[] {\n const normalized = shortcut.trim();\n if (!normalized) return [];\n\n if (normalized.includes('+')) {\n return normalized\n .split('+')\n .map(part => part.trim())\n .filter(Boolean)\n .map(canonicalKeyLabel);\n }\n\n if (/\\s/.test(normalized)) {\n return normalized.split(/\\s+/).filter(Boolean).map(canonicalKeyLabel);\n }\n\n const characters = Array.from(normalized);\n const labels: string[] = [];\n while (characters.length > 1 && MODIFIER_GLYPHS.has(characters[0])) {\n labels.push(characters.shift()!);\n }\n labels.push(characters.join(''));\n return labels;\n}\n","export type AnchoredSide = 'top' | 'right' | 'bottom' | 'left';\nexport type AnchoredAlign = 'start' | 'center' | 'end';\n\nexport type AnchoredCollisionRect = Pick<\n DOMRectReadOnly,\n 'top' | 'left' | 'right' | 'bottom' | 'width' | 'height'\n>;\n\nexport interface AnchoredPositionInput {\n anchorRect: Pick<DOMRectReadOnly, 'top' | 'left' | 'right' | 'bottom' | 'width' | 'height'>;\n popupWidth: number;\n popupHeight: number;\n side: AnchoredSide;\n align: AnchoredAlign;\n sideOffsetPx: number;\n alignOffsetPx: number;\n viewportPadPx: number;\n viewportWidth: number;\n viewportHeight: number;\n /** Optional page or panel collision rectangle in viewport-fixed coordinates. */\n collisionRect?: AnchoredCollisionRect;\n}\n\nexport interface AnchoredPosition {\n x: number;\n y: number;\n /** Side actually used, which differs from the request when placement flipped. */\n resolvedSide: AnchoredSide;\n /** Vertical room available on the resolved side inside the padded viewport. */\n availableHeight: number;\n}\n\nconst OPPOSITE_SIDE: Record<AnchoredSide, AnchoredSide> = {\n top: 'bottom',\n right: 'left',\n bottom: 'top',\n left: 'right',\n};\n\n/** Unclamped coordinates for one candidate side. */\nfunction rawPosition(\n input: AnchoredPositionInput,\n side: AnchoredSide\n): Pick<AnchoredPosition, 'x' | 'y'> {\n const { anchorRect: anchor, popupWidth, popupHeight, align, sideOffsetPx, alignOffsetPx } = input;\n\n if (side === 'top' || side === 'bottom') {\n return {\n x:\n align === 'start'\n ? anchor.left + alignOffsetPx\n : align === 'end'\n ? anchor.right - popupWidth + alignOffsetPx\n : anchor.left + anchor.width / 2 - popupWidth / 2 + alignOffsetPx,\n y: side === 'top' ? anchor.top - popupHeight - sideOffsetPx : anchor.bottom + sideOffsetPx,\n };\n }\n\n return {\n x: side === 'left' ? anchor.left - popupWidth - sideOffsetPx : anchor.right + sideOffsetPx,\n y:\n align === 'start'\n ? anchor.top + alignOffsetPx\n : align === 'end'\n ? anchor.bottom - popupHeight + alignOffsetPx\n : anchor.top + anchor.height / 2 - popupHeight / 2 + alignOffsetPx,\n };\n}\n\n/** Total main-axis spill past the padded viewport for a candidate position. */\nfunction collisionBounds(input: AnchoredPositionInput) {\n const boundary = input.collisionRect ?? {\n top: 0,\n left: 0,\n right: input.viewportWidth,\n bottom: input.viewportHeight,\n };\n return {\n top: boundary.top + input.viewportPadPx,\n left: boundary.left + input.viewportPadPx,\n right: boundary.right - input.viewportPadPx,\n bottom: boundary.bottom - input.viewportPadPx,\n };\n}\n\nfunction mainAxisOverflow(\n input: AnchoredPositionInput,\n side: AnchoredSide,\n position: Pick<AnchoredPosition, 'x' | 'y'>\n): number {\n const { popupWidth, popupHeight } = input;\n const bounds = collisionBounds(input);\n\n if (side === 'top' || side === 'bottom') {\n return (\n Math.max(bounds.top - position.y, 0) + Math.max(position.y + popupHeight - bounds.bottom, 0)\n );\n }\n\n return (\n Math.max(bounds.left - position.x, 0) + Math.max(position.x + popupWidth - bounds.right, 0)\n );\n}\n\nfunction clampToBounds(value: number, size: number, minimum: number, maximumEdge: number): number {\n const maximum = Math.max(minimum, maximumEdge - size);\n return Math.min(Math.max(value, minimum), maximum);\n}\n\n/**\n * Pure viewport-fixed anchored-popup layout math shared by every element-anchored\n * overlay: menus, selects, tooltips, and anchored toasts.\n *\n * `side` is preferred. When the popup spills past the padded collision boundary and\n * the opposite side spills less, placement flips on the main axis; the result is\n * then clamped into that boundary on both axes. The viewport is the fallback when\n * no page or panel collision rectangle is supplied. Cross-axis `align` is applied\n * before clamping so `alignOffsetPx` stays an additive nudge.\n *\n * Callers own their own anchor semantics — inner-cell alignment offsets and\n * minimum widths belong to the calling component, not here.\n * @see choice-popup-alignment.ts for the choice-cell alignment transform.\n */\nexport function computeAnchoredPosition(input: AnchoredPositionInput): AnchoredPosition {\n const bounds = collisionBounds(input);\n const preferred = rawPosition(input, input.side);\n const oppositeSide = OPPOSITE_SIDE[input.side];\n const opposite = rawPosition(input, oppositeSide);\n const preferredOverflow = mainAxisOverflow(input, input.side, preferred);\n const oppositeOverflow = mainAxisOverflow(input, oppositeSide, opposite);\n const useOpposite = preferredOverflow > 0 && oppositeOverflow < preferredOverflow;\n const resolvedSide = useOpposite ? oppositeSide : input.side;\n const position = useOpposite ? opposite : preferred;\n const availableHeight =\n resolvedSide === 'top'\n ? input.anchorRect.top - bounds.top - input.sideOffsetPx\n : resolvedSide === 'bottom'\n ? bounds.bottom - input.anchorRect.bottom - input.sideOffsetPx\n : bounds.bottom - bounds.top;\n\n return {\n x: clampToBounds(position.x, input.popupWidth, bounds.left, bounds.right),\n y: clampToBounds(position.y, input.popupHeight, bounds.top, bounds.bottom),\n resolvedSide,\n availableHeight: Math.max(0, availableHeight),\n };\n}\n","import {\n computeAnchoredPosition,\n type AnchoredPosition,\n type AnchoredPositionInput,\n} from './anchored-position';\n\n/** Frames to wait for an anchor and popup to become measurable before giving up. */\nconst POSITION_RETRY_BUDGET = 8;\n\n/**\n * How the scroll/resize path reschedules. Each consumer family measured\n * differently before consolidation, and the differences are preserved verbatim\n * so placement timing is unchanged.\n *\n * - `sync` — measure inside the listener. Selects.\n * - `frame` — coalesce and measure on the next frame. Tooltips.\n * - `double-frame` — coalesce, measure next frame, then measure once more the\n * frame after. Scroll-driven owners such as ShellPage commit a compact-header\n * render in the frame after the scroll event, so a single frame reads a stale\n * anchor rect. Menus.\n */\nexport type AnchoredLiveUpdateMode = 'sync' | 'frame' | 'double-frame';\n\nexport interface AnchoredPositionControllerOptions {\n /** Resolve the anchor at measure time; positioning retries while this is null. */\n getAnchor: () => HTMLElement | null;\n /** Resolve the popup at measure time; positioning retries while this is null. */\n getPopup: () => HTMLElement | null;\n /** Stable owner fallback when framework bindings assign open before anchor. */\n getOwnerDocument?: () => Document | null;\n /**\n * Build the layout input for one measurement pass.\n *\n * The owning component keeps its own anchor semantics here — inner-cell align\n * offsets, minimum widths, and token resolution stay with the component rather\n * than moving into this controller. Return `null` when the component's own\n * guards say the popup is not measurable yet, which schedules a retry.\n */\n measure: (anchor: HTMLElement, popup: HTMLElement) => AnchoredPositionInput | null;\n /** Commit a changed position. Not called when the result is unchanged. */\n apply: (position: AnchoredPosition) => void;\n /**\n * Move a `popover=\"manual\"` popup into the native top layer before measuring.\n *\n * Use this for popups that remain in their owner's DOM tree. The top layer\n * gives `position: fixed` viewport coordinates even when an application\n * ancestor establishes a fixed-position containing block through containment,\n * transforms, or filters.\n */\n topLayer?: boolean;\n /** Fired once per `start()` when the first measurement succeeds. */\n onReady?: () => void;\n /** Scroll/resize behavior. Defaults to `sync`. */\n liveUpdate?: AnchoredLiveUpdateMode;\n /**\n * Re-measure when the popup or anchor resizes. Tooltips need this because the\n * label's `ds-text` upgrade changes the measured width after mount.\n */\n observeResize?: boolean;\n /**\n * Follow CSS transitions or animations that move the anchor without resizing\n * it. The observer only runs a measurement loop while related motion is active.\n */\n observeAnchorMotion?: boolean;\n retryBudget?: number;\n}\n\n/**\n * Lifecycle owner for an element-anchored popup: listener binding, measurement\n * retries, frame coalescing, and teardown.\n *\n * Pairs with `computeAnchoredPosition`, which owns the geometry. Split this way\n * because the geometry is pure and exhaustively testable while the lifecycle is\n * timing-dependent; keeping them separate means the risky half lives in exactly\n * one place.\n *\n * Not suitable for overlays that place several popups in one shared pass — Toast\n * positions N anchored records inside a single layout commit and keeps its own\n * scheduler, using only the geometry function.\n */\nexport class AnchoredPositionController {\n private readonly options: AnchoredPositionControllerOptions;\n private scrollResizeHandler: (() => void) | null = null;\n private resizeObserver: ResizeObserver | null = null;\n private retryRaf: number | null = null;\n private liveRaf: number | null = null;\n private anchorMotionRaf: number | null = null;\n private activeAnchorMotions = 0;\n private ownerDocument: Document | null = null;\n private last: AnchoredPosition | null = null;\n private isReady = false;\n private generation = 0;\n private retryGeneration = 0;\n private readonly anchorMotionStartHandler = (event: Event) => {\n if (!this.eventCanMoveAnchor(event)) return;\n this.activeAnchorMotions += 1;\n this.scheduleAnchorMotionUpdate();\n };\n private readonly anchorMotionEndHandler = (event: Event) => {\n if (!this.eventCanMoveAnchor(event)) return;\n this.activeAnchorMotions = Math.max(0, this.activeAnchorMotions - 1);\n this.scheduleAnchorMotionUpdate();\n };\n\n constructor(options: AnchoredPositionControllerOptions) {\n this.options = options;\n }\n\n /** `true` once a measurement has succeeded, for gating popup reveal. */\n get ready(): boolean {\n return this.isReady;\n }\n\n /**\n * Bind scroll/resize tracking for an opening popup.\n *\n * Deliberately does not schedule placement: every consumer binds listeners and\n * then schedules in its own order, and folding both into one call produced two\n * overlapping retry loops. Call `schedule()` or `update()` separately.\n */\n observe(): void {\n this.bindListeners();\n }\n\n /** Unbind tracking, cancel pending frames, and clear the cached position. */\n unobserve(): void {\n this.unbindListeners();\n this.cancel();\n this.last = null;\n this.isReady = false;\n }\n\n /**\n * Retry measurement each frame until it succeeds or the budget runs out, so a\n * popup is never revealed at 0,0 after a failed first pass.\n */\n schedule(onReady?: () => void): void {\n this.cancelRetry();\n this.isReady = false;\n const generation = this.generation;\n const retryGeneration = this.retryGeneration;\n const current = () =>\n generation === this.generation && retryGeneration === this.retryGeneration;\n\n let remaining = this.options.retryBudget ?? POSITION_RETRY_BUDGET;\n\n const attempt = () => {\n if (!current()) return;\n this.retryRaf = null;\n const measured = this.update();\n if (!current()) return;\n if (measured) {\n this.isReady = true;\n this.options.onReady?.();\n if (current()) onReady?.();\n return;\n }\n if (remaining > 0) {\n remaining -= 1;\n this.retryRaf = requestAnimationFrame(attempt);\n }\n };\n\n this.retryRaf = requestAnimationFrame(attempt);\n }\n\n /** Measure and commit once. @returns `false` when the popup is not measurable. */\n update(): boolean {\n const anchor = this.options.getAnchor();\n if (!anchor?.isConnected) return false;\n const popup = this.options.getPopup();\n if (!popup?.isConnected) return false;\n this.observeResizeTargets();\n\n if (\n this.options.topLayer &&\n typeof popup.showPopover === 'function' &&\n !popup.matches(':popover-open')\n ) {\n try {\n popup.showPopover();\n } catch {\n // The popup may not be connected yet. The scheduled retry will try again\n // on the next frame instead of measuring it in the wrong coordinate space.\n return false;\n }\n }\n\n const input = this.options.measure(anchor, popup);\n if (!input) return false;\n\n const next = computeAnchoredPosition(input);\n if (\n !this.last ||\n this.last.x !== next.x ||\n this.last.y !== next.y ||\n this.last.resolvedSide !== next.resolvedSide ||\n this.last.availableHeight !== next.availableHeight\n ) {\n this.last = next;\n this.options.apply(next);\n }\n return true;\n }\n\n /** Reposition an already-open popup without hiding it. */\n scheduleLiveUpdate(): void {\n const generation = this.generation;\n const mode = this.options.liveUpdate ?? 'sync';\n if (mode === 'sync') {\n this.update();\n return;\n }\n\n if (this.liveRaf !== null) return;\n\n if (mode === 'frame') {\n this.liveRaf = requestAnimationFrame(() => {\n if (generation !== this.generation) return;\n this.liveRaf = null;\n this.update();\n });\n return;\n }\n\n // double-frame stays coalesced until the second frame resolves.\n this.liveRaf = requestAnimationFrame(() => {\n if (generation !== this.generation) return;\n this.update();\n if (generation !== this.generation) return;\n this.liveRaf = requestAnimationFrame(() => {\n if (generation !== this.generation) return;\n this.liveRaf = null;\n this.update();\n });\n });\n }\n\n /** Cancel pending retry and live frames without unbinding listeners. */\n cancel(): void {\n this.generation += 1;\n this.cancelRetry();\n if (this.liveRaf !== null) {\n cancelAnimationFrame(this.liveRaf);\n this.liveRaf = null;\n }\n if (this.anchorMotionRaf !== null) {\n cancelAnimationFrame(this.anchorMotionRaf);\n this.anchorMotionRaf = null;\n }\n }\n\n private cancelRetry(): void {\n this.retryGeneration += 1;\n if (this.retryRaf === null) return;\n cancelAnimationFrame(this.retryRaf);\n this.retryRaf = null;\n }\n\n private bindListeners(): void {\n this.unbindListeners();\n this.scrollResizeHandler = () => this.scheduleLiveUpdate();\n // Capture phase so scrolling inside any ancestor repositions the popup.\n window.addEventListener('scroll', this.scrollResizeHandler, true);\n window.addEventListener('resize', this.scrollResizeHandler);\n\n if (this.options.observeResize && typeof ResizeObserver !== 'undefined') {\n const observer = new ResizeObserver(() => {\n if (this.resizeObserver === observer) this.scheduleLiveUpdate();\n });\n this.resizeObserver = observer;\n this.observeResizeTargets();\n }\n\n if (this.options.observeAnchorMotion) {\n this.ownerDocument =\n this.options.getAnchor()?.ownerDocument ?? this.options.getOwnerDocument?.() ?? null;\n this.ownerDocument?.addEventListener('transitionrun', this.anchorMotionStartHandler, true);\n this.ownerDocument?.addEventListener('transitionend', this.anchorMotionEndHandler, true);\n this.ownerDocument?.addEventListener('transitioncancel', this.anchorMotionEndHandler, true);\n this.ownerDocument?.addEventListener('animationstart', this.anchorMotionStartHandler, true);\n this.ownerDocument?.addEventListener('animationend', this.anchorMotionEndHandler, true);\n this.ownerDocument?.addEventListener('animationcancel', this.anchorMotionEndHandler, true);\n }\n }\n\n private unbindListeners(): void {\n if (this.scrollResizeHandler) {\n window.removeEventListener('scroll', this.scrollResizeHandler, true);\n window.removeEventListener('resize', this.scrollResizeHandler);\n this.scrollResizeHandler = null;\n }\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n this.ownerDocument?.removeEventListener('transitionrun', this.anchorMotionStartHandler, true);\n this.ownerDocument?.removeEventListener('transitionend', this.anchorMotionEndHandler, true);\n this.ownerDocument?.removeEventListener('transitioncancel', this.anchorMotionEndHandler, true);\n this.ownerDocument?.removeEventListener('animationstart', this.anchorMotionStartHandler, true);\n this.ownerDocument?.removeEventListener('animationend', this.anchorMotionEndHandler, true);\n this.ownerDocument?.removeEventListener('animationcancel', this.anchorMotionEndHandler, true);\n this.ownerDocument = null;\n this.activeAnchorMotions = 0;\n }\n\n private eventCanMoveAnchor(event: Event): boolean {\n const anchor = this.options.getAnchor();\n const target = event.target;\n if (!anchor || !(target instanceof Element)) return false;\n // Motion on the anchor or one of its layout ancestors can move its rect.\n // Descendant-only animation is irrelevant unless it resizes the anchor,\n // which the ResizeObserver path already covers.\n return target === anchor || target.contains(anchor);\n }\n\n private scheduleAnchorMotionUpdate(): void {\n if (this.anchorMotionRaf !== null) return;\n const generation = this.generation;\n const tick = () => {\n if (generation !== this.generation) return;\n this.anchorMotionRaf = null;\n this.update();\n if (generation !== this.generation) return;\n if (this.activeAnchorMotions <= 0 || !this.options.getAnchor()?.isConnected) {\n this.activeAnchorMotions = 0;\n return;\n }\n this.anchorMotionRaf = requestAnimationFrame(tick);\n };\n this.anchorMotionRaf = requestAnimationFrame(tick);\n }\n\n /**\n * Re-attach the resize observer after the popup remounts. Safe to call\n * repeatedly; `ResizeObserver.observe` ignores duplicate targets.\n */\n observeResizeTargets(): void {\n if (!this.resizeObserver) return;\n const popup = this.options.getPopup();\n if (popup) this.resizeObserver.observe(popup);\n const anchor = this.options.getAnchor();\n if (anchor) this.resizeObserver.observe(anchor);\n }\n}\n","import type { AnchoredCollisionRect } from './anchored-position';\n\n/** Attribute placed on a page or panel whose visible rectangle owns anchored overlays. */\nexport const ANCHORED_OVERLAY_BOUNDARY_ATTRIBUTE = 'data-ds-overlay-boundary';\n\n/** An element-owned collision rectangle, or an explicit escape to the viewport. */\nexport type AnchoredOverlayBoundary = HTMLElement | 'viewport';\n\nfunction composedParentElement(element: Element): Element | null {\n if (element.assignedSlot) return element.assignedSlot;\n if (element.parentElement) return element.parentElement;\n const root = element.getRootNode();\n return root instanceof ShadowRoot ? root.host : null;\n}\n\n/**\n * Find the nearest collision owner through light DOM, assigned slots, and open\n * shadow roots. The popup may live in the top layer or a body portal; ownership\n * follows its anchor instead of the popup's rendering location.\n */\nexport function findAnchoredOverlayBoundary(anchor: Element): HTMLElement | null {\n let current: Element | null = anchor;\n while (current) {\n if (\n current instanceof HTMLElement &&\n current.hasAttribute(ANCHORED_OVERLAY_BOUNDARY_ATTRIBUTE)\n ) {\n return current;\n }\n current = composedParentElement(current);\n }\n return null;\n}\n\n/** Resolve an explicit owner first, then the nearest composed-tree boundary. */\nexport function resolveAnchoredOverlayBoundaryRect(\n anchor: Element,\n explicitBoundary?: AnchoredOverlayBoundary\n): AnchoredCollisionRect | undefined {\n if (explicitBoundary === 'viewport') return undefined;\n return (explicitBoundary ?? findAnchoredOverlayBoundary(anchor))?.getBoundingClientRect();\n}\n","@import '../../utils/radius.css';\n@import '../../utils/control-density.css';\n@import '../../utils/key-hint.css';\n@import '../../utils/forced-colors.css';\n\n.tooltip-popup {\n box-sizing: border-box;\n background-color: var(--color-background-primary);\n border-radius: var(--ds-radius-tooltip-control, var(--dimension-radius-025));\n box-shadow: var(--effect-elevation-elevated-floating);\n white-space: nowrap;\n pointer-events: none;\n animation: tooltipFadeIn var(--effect-motion-short-2) forwards;\n will-change: transform;\n backface-visibility: hidden;\n}\n\n/* Warm handoff between nearby triggers — no enter fade (avoids 20–100ms lag). */\n.tooltip-popup--instant {\n animation: none;\n opacity: 1;\n}\n\n.tooltip-popup--closing {\n animation: tooltipFadeOut var(--effect-motion-short-3) forwards;\n}\n\n/* Density: md / sm / xs via `.ds-control--*` on `.tooltip-inner`. */\n.tooltip-inner {\n box-sizing: border-box;\n height: var(--ds-control-height, var(--dimension-size-400));\n display: flex;\n align-items: center;\n gap: var(--ds-control-gap, var(--dimension-space-050));\n padding: 0 var(--ds-control-padding-inline, var(--dimension-space-075));\n}\n\n/*\n * Label layout lives on ds-text (metric-box + control label-inset).\n * NOTE: Stencil scopes this to `ds-text.sc-ds-tooltip`, but portaled\n * createElement ds-text loses that class when Text's <Host class> renders.\n * `renderPopupContent` therefore also sets these as inline styles.\n */\n.tooltip-inner > ds-text {\n flex-shrink: 0;\n min-width: max-content;\n max-width: none;\n padding: 0 var(--ds-control-label-inset, var(--dimension-space-025));\n color: var(--color-foreground-primary);\n}\n\n.tooltip-popup--wrap {\n white-space: normal;\n max-inline-size: var(--dimension-panel-width-xs);\n}\n\n.tooltip-popup--wrap .tooltip-inner {\n height: auto;\n min-height: var(--ds-control-height, var(--dimension-size-400));\n padding-block: var(--dimension-space-050);\n align-items: flex-start;\n}\n\n.tooltip-popup--wrap .tooltip-inner > ds-text {\n flex: 1 1 auto;\n min-width: 0;\n max-width: 100%;\n white-space: pre-line;\n}\n\n@keyframes tooltipFadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n\n@keyframes tooltipFadeOut {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .tooltip-popup,\n .tooltip-popup--instant {\n animation: none;\n opacity: 1;\n }\n\n .tooltip-popup--closing {\n animation: none;\n opacity: 0;\n }\n}\n\n@media (forced-colors: active) {\n .tooltip-popup {\n box-shadow: none;\n outline: var(--dimension-stroke-width-012) solid var(--ds-forced-color-content);\n outline-offset: calc(-1 * var(--dimension-stroke-width-012));\n }\n}\n","import { Component, Prop, Element, Method, Watch, h, Host } from '@stencil/core';\nimport {\n CONTROL_TEXT_VARIANT,\n resolveCssLengthPx,\n resolveCssTimeMs,\n resolveMotionTimeMs,\n TOKEN_CSS_LENGTHS,\n TOKEN_DEFAULTS,\n} from '../../utils';\nimport type { TextVariant } from '../Text/text-types';\nimport { shortcutKeyLabels } from '../../utils/shortcut-key';\nimport { AnchoredPositionController } from '../../utils/anchored-position-controller';\nimport {\n resolveAnchoredOverlayBoundaryRect,\n type AnchoredOverlayBoundary,\n} from '../../utils/anchored-overlay-boundary';\n// Side-effect: register `ds-text` — the portal builds it via createElement, not JSX.\nimport '../Text/Text';\n\nexport type TooltipSide = 'top' | 'right' | 'bottom' | 'left';\nexport type TooltipAlign = 'start' | 'center' | 'end';\nexport type TooltipSize = 'md' | 'sm' | 'xs';\n\nconst FALLBACK_HEIGHT: Record<TooltipSize, string> = {\n md: TOKEN_DEFAULTS.size400,\n sm: TOKEN_DEFAULTS.size300,\n xs: TOKEN_DEFAULTS.size200,\n};\n\nlet lastDismissedAt = 0;\nlet tooltipIdCounter = 0;\n/** Currently open tooltip — force-cleared on warm handoff so tips don't cross-fade. */\nlet activeTooltip: Tooltip | null = null;\n\ntype DsTextEl = HTMLElement & {\n as: string;\n variant: TextVariant;\n emphasis: boolean;\n color: string;\n wrap: string;\n};\n\nfunction createDsText(opts: {\n variant: TextVariant;\n emphasis?: boolean;\n color?: string;\n wrap?: 'wrap' | 'nowrap' | 'balance' | 'pretty';\n text: string;\n}): DsTextEl {\n const el = document.createElement('ds-text') as DsTextEl;\n el.as = 'span';\n el.variant = opts.variant;\n el.emphasis = opts.emphasis ?? false;\n el.color = opts.color ?? 'inherit';\n if (opts.wrap) el.wrap = opts.wrap;\n el.textContent = opts.text;\n return el;\n}\n\n/**\n * Control-density label styles for portaled ds-text.\n * Scoped CSS requires `sc-ds-tooltip` on the host, but Text's `<Host class>`\n * overwrites imperative className — so these must be inline to stick.\n */\nfunction styleTooltipLabel(el: HTMLElement, wrapLabel = false) {\n el.style.flexShrink = wrapLabel ? '1' : '0';\n el.style.minWidth = wrapLabel ? '0' : 'max-content';\n el.style.maxWidth = wrapLabel ? '100%' : 'none';\n el.style.whiteSpace = wrapLabel ? 'pre-line' : '';\n el.style.padding = '0 var(--ds-control-label-inset, var(--dimension-space-025))';\n el.style.color = 'var(--color-foreground-primary)';\n}\n\n/**\n * Imperative body portal for the popup.\n * Stencil must not own the portaled node — moving a VDOM child to `document.body`\n * causes recreate → re-portal → @State loops that freeze the page.\n */\n@Component({\n tag: 'ds-tooltip',\n styleUrl: 'Tooltip.css',\n scoped: true,\n})\nexport class Tooltip {\n @Element() el!: HTMLElement;\n\n /**\n * Tooltip text. Empty/whitespace skips show — useful when the wrapper must stay\n * mounted for layout/animation stability (e.g. PanelNav expand/collapse).\n */\n @Prop() label!: string;\n\n /** Control density (height, padding, type). */\n @Prop() size: TooltipSize = 'md';\n\n @Prop() side: TooltipSide = 'top';\n @Prop() align: TooltipAlign = 'center';\n /** Gap between anchor and tooltip — number (px) or TokoMo length. */\n @Prop() sideOffset: number | string = TOKEN_CSS_LENGTHS.space050;\n /** Cross-axis offset — number (px) or TokoMo length. */\n @Prop() alignOffset: number | string = 0;\n /** Explicit collision owner, `viewport`, or the nearest data-ds-overlay-boundary ancestor. */\n @Prop() boundary: AnchoredOverlayBoundary | undefined;\n /**\n * Hover show delay before the tooltip appears.\n * Default: `--effect-animation-delay-medium-3` (1000ms). Accepts a number (ms)\n * or a TokoMo time token / `var(--effect-animation-delay-*)`. Applies to the\n * initial hover/focus show only — after a recent dismiss, reopen is instant.\n * Prefer the default; override only for denser chrome or rare/destructive actions.\n */\n @Prop() delay: number | string = TOKEN_DEFAULTS.animationDelayMedium3;\n @Prop() shortcutKey: string | undefined;\n @Prop() shortcutKeyPosition: 'start' | 'end' = 'end';\n /**\n * Link the trigger with aria-describedby while the popup is open. Disable when\n * the label is already in the DOM, such as a truncated table cell.\n */\n @Prop() describedBy = true;\n /** Allow wrapping at a panel-xs max width and preserve explicit line breaks. */\n @Prop() wrapLabel = false;\n\n private tooltipId = `ds-tooltip-${++tooltipIdCounter}`;\n private delayTimer: ReturnType<typeof setTimeout> | null = null;\n private closeTimer: ReturnType<typeof setTimeout> | null = null;\n private anchor: HTMLElement | null = null;\n private popupEl: HTMLElement | null = null;\n private anchorObserver: MutationObserver | null = null;\n private didLoad = false;\n private readonly position = new AnchoredPositionController({\n getAnchor: () => this.anchor,\n getPopup: () => this.popupEl,\n getOwnerDocument: () => this.el.ownerDocument,\n measure: (anchor, tip) => ({\n anchorRect: anchor.getBoundingClientRect(),\n // Fall back to token metrics until `ds-text` upgrades and reports a width.\n popupWidth: tip.offsetWidth || this.tooltipFallbackWidthPx,\n popupHeight: tip.offsetHeight || this.tooltipFallbackHeightPx,\n side: this.side,\n align: this.align,\n sideOffsetPx: this.sideOffsetPx,\n alignOffsetPx: this.alignOffsetPx,\n viewportPadPx: this.viewportPadPx,\n viewportWidth: window.innerWidth,\n viewportHeight: window.innerHeight,\n collisionRect: resolveAnchoredOverlayBoundaryRect(anchor, this.boundary),\n }),\n apply: ({ x, y, resolvedSide }) => {\n if (!this.popupEl) return;\n this.popupEl.dataset.side = resolvedSide;\n this.popupEl.style.transform = `translate(${Math.round(x)}px, ${Math.round(y)}px)`;\n },\n liveUpdate: 'frame',\n observeResize: true,\n });\n private skipEnterAnimation = false;\n private isOpen = false;\n private programmaticAnchor = false;\n private lastInteractionWasKeyboard = false;\n private pointerEnterHandler = (event: PointerEvent) => {\n if (event.pointerType === 'touch') return;\n this.show();\n };\n private pointerLeaveHandler = (event: PointerEvent) => {\n if (event.pointerType === 'touch') return;\n this.hide();\n };\n private pointerDownHandler = (event: PointerEvent) => {\n this.lastInteractionWasKeyboard = false;\n if (event.pointerType === 'touch' && (this.isOpen || this.popupEl)) this.hideInstant();\n };\n private keyDownHandler = () => {\n this.lastInteractionWasKeyboard = true;\n };\n /** focusin/focusout so nested focus targets (e.g. ds-button-* inner button) still open the tip. */\n private focusHandler = () => {\n if (this.lastInteractionWasKeyboard || this.anchor?.matches(':focus-visible')) this.show();\n };\n private blurHandler: (e: FocusEvent) => void = e => {\n const next = e.relatedTarget as Node | null;\n if (next && this.anchor?.contains(next)) return;\n this.hide();\n };\n private escapeHandler = (event: KeyboardEvent) => {\n if (event.key !== 'Escape' || !this.isOpen) return;\n event.preventDefault();\n this.hide();\n };\n\n connectedCallback() {\n if (!this.didLoad) return;\n this.connectAnchor();\n }\n\n componentDidLoad() {\n this.didLoad = true;\n this.connectAnchor();\n }\n\n private connectAnchor() {\n this.bindAnchor();\n if (this.anchorObserver) return;\n this.anchorObserver = new MutationObserver(() => this.handleSlotChange());\n this.anchorObserver.observe(this.el, { childList: true });\n }\n\n disconnectedCallback() {\n if (activeTooltip === this) activeTooltip = null;\n this.anchorObserver?.disconnect();\n this.anchorObserver = null;\n this.unbindAnchor();\n this.clearTimers();\n this.destroyPopup();\n }\n\n @Watch('label')\n @Watch('size')\n @Watch('side')\n @Watch('align')\n @Watch('sideOffset')\n @Watch('alignOffset')\n @Watch('boundary')\n @Watch('shortcutKey')\n @Watch('shortcutKeyPosition')\n @Watch('wrapLabel')\n onContentOrPositionChange() {\n if (!this.label?.trim()) {\n if (this.isOpen || this.popupEl) this.hideInstant();\n return;\n }\n if (!this.popupEl || !this.isOpen) return;\n this.renderPopupContent();\n this.schedulePosition();\n }\n\n private get viewportPadPx(): number {\n return resolveCssLengthPx(TOKEN_DEFAULTS.space050, TOKEN_DEFAULTS.space050);\n }\n\n private get sideOffsetPx(): number {\n return resolveCssLengthPx(this.sideOffset, TOKEN_DEFAULTS.space050);\n }\n\n private get alignOffsetPx(): number {\n return resolveCssLengthPx(this.alignOffset, 0);\n }\n\n private get hoverDelayMs(): number {\n return resolveCssTimeMs(this.delay, TOKEN_DEFAULTS.animationDelayMedium3);\n }\n\n private get instantReopenMs(): number {\n return resolveCssTimeMs(\n TOKEN_DEFAULTS.animationDurationMedium1,\n TOKEN_DEFAULTS.animationDurationMedium1\n );\n }\n\n private get fadeOutMs(): number {\n return resolveMotionTimeMs(TOKEN_DEFAULTS.motionShort3, TOKEN_DEFAULTS.animationDurationShort3);\n }\n\n private get tooltipFallbackWidthPx(): number {\n return resolveCssLengthPx(\n TOKEN_DEFAULTS.tooltipFallbackWidth,\n TOKEN_DEFAULTS.tooltipFallbackWidth\n );\n }\n\n private get tooltipFallbackHeightPx(): number {\n const token = FALLBACK_HEIGHT[this.size];\n return resolveCssLengthPx(token, token);\n }\n\n /**\n * Present against an external anchor the host already measured.\n * Does not bind hover or focus on that anchor — the owner drives show/hide.\n */\n @Method()\n async presentFrom(anchor: HTMLElement, label?: string) {\n if (label != null) this.label = label;\n if (!this.label?.trim()) {\n this.hide();\n return;\n }\n const sameAnchor = this.anchor === anchor;\n if (!sameAnchor) {\n this.unbindAnchor();\n this.anchor = anchor;\n this.programmaticAnchor = true;\n if (this.popupEl && this.describedBy) this.linkDescribedBy();\n }\n if (this.popupEl) {\n this.renderPopupContent();\n this.schedulePosition();\n return;\n }\n if (this.delayTimer && sameAnchor) return;\n this.show();\n }\n\n /** Dismiss a popup opened through presentFrom or the slotted trigger. */\n @Method()\n async dismiss() {\n this.hide();\n }\n\n private bindAnchor() {\n if (this.programmaticAnchor) return;\n const slot = this.el.querySelector('slot') as HTMLSlotElement | null;\n const slotted = slot?.assignedElements?.() ?? [];\n const child = (slotted[0] ?? this.el.firstElementChild) as HTMLElement | null;\n if (!child || child.tagName === 'SLOT' || child === this.anchor) return;\n this.anchor = child;\n child.addEventListener('pointerenter', this.pointerEnterHandler);\n child.addEventListener('pointerleave', this.pointerLeaveHandler);\n child.addEventListener('pointerdown', this.pointerDownHandler);\n child.addEventListener('keydown', this.keyDownHandler);\n child.addEventListener('focusin', this.focusHandler);\n child.addEventListener('focusout', this.blurHandler);\n }\n\n private unbindAnchor() {\n if (!this.anchor) return;\n this.unlinkDescribedBy();\n if (!this.programmaticAnchor) {\n this.anchor.removeEventListener('pointerenter', this.pointerEnterHandler);\n this.anchor.removeEventListener('pointerleave', this.pointerLeaveHandler);\n this.anchor.removeEventListener('pointerdown', this.pointerDownHandler);\n this.anchor.removeEventListener('keydown', this.keyDownHandler);\n this.anchor.removeEventListener('focusin', this.focusHandler);\n this.anchor.removeEventListener('focusout', this.blurHandler);\n }\n this.anchor = null;\n this.programmaticAnchor = false;\n }\n\n private linkDescribedBy() {\n if (!this.describedBy || !this.anchor || !this.popupEl) return;\n const ids = new Set(\n (this.anchor.getAttribute('aria-describedby') ?? '').split(/\\s+/).filter(Boolean)\n );\n ids.add(this.tooltipId);\n this.anchor.setAttribute('aria-describedby', Array.from(ids).join(' '));\n }\n\n private unlinkDescribedBy() {\n if (!this.anchor) return;\n const ids = (this.anchor.getAttribute('aria-describedby') ?? '')\n .split(/\\s+/)\n .filter(id => id && id !== this.tooltipId);\n if (ids.length) this.anchor.setAttribute('aria-describedby', ids.join(' '));\n else this.anchor.removeAttribute('aria-describedby');\n }\n\n private handleSlotChange = () => {\n if (this.programmaticAnchor) return;\n const slot = this.el.querySelector('slot') as HTMLSlotElement | null;\n const next = (slot?.assignedElements?.()[0] ?? this.el.firstElementChild) as HTMLElement | null;\n if (next === this.anchor || next?.tagName === 'SLOT') return;\n if (this.isOpen || this.popupEl) this.hideInstant();\n this.unbindAnchor();\n this.bindAnchor();\n };\n\n private clearTimers() {\n if (this.delayTimer) {\n clearTimeout(this.delayTimer);\n this.delayTimer = null;\n }\n if (this.closeTimer) {\n clearTimeout(this.closeTimer);\n this.closeTimer = null;\n }\n }\n\n private setupOpenListeners() {\n // Binds scroll/resize + the resize observer; placement itself is scheduled\n // by schedulePosition() so the label restyle stays interleaved.\n this.position.observe();\n document.addEventListener('keydown', this.escapeHandler);\n }\n\n private teardownOpenListeners() {\n this.position.unobserve();\n document.removeEventListener('keydown', this.escapeHandler);\n }\n\n private destroyPopup() {\n this.teardownOpenListeners();\n this.unlinkDescribedBy();\n if (!this.popupEl) return;\n this.popupEl.remove();\n this.popupEl = null;\n }\n\n /**\n * Position after `ds-text` upgrades and lays out. Measuring synchronously in\n * `mountPopup` reads a collapsed/fallback width and places left/right tips wrong.\n */\n private schedulePosition() {\n if (!this.popupEl) return;\n\n const reapplyLabelStyles = () => {\n const label = this.popupEl?.querySelector(':scope > .tooltip-inner > ds-text');\n if (label instanceof HTMLElement) styleTooltipLabel(label, this.wrapLabel);\n };\n\n requestAnimationFrame(() => {\n reapplyLabelStyles();\n this.position.update();\n requestAnimationFrame(() => {\n reapplyLabelStyles();\n this.position.update();\n });\n });\n\n // The popup remounts on every show, so re-target the observer bound in start().\n this.position.observeResizeTargets();\n }\n\n /** Drop the open tip immediately (warm handoff to another tooltip). */\n private hideInstant() {\n this.clearTimers();\n lastDismissedAt = Date.now();\n if (activeTooltip === this) activeTooltip = null;\n this.destroyPopup();\n this.isOpen = false;\n this.skipEnterAnimation = false;\n }\n\n private show() {\n // Empty label = wrapper present for DOM stability (e.g. PanelNav expand/collapse)\n // but no tip should appear.\n if (!this.label?.trim()) return;\n this.clearTimers();\n let instant = Date.now() - lastDismissedAt < this.instantReopenMs;\n if (activeTooltip && activeTooltip !== this) {\n activeTooltip.hideInstant();\n instant = true;\n }\n // eslint-disable-next-line @typescript-eslint/no-this-alias -- module singleton tracks the active instance\n activeTooltip = this;\n this.skipEnterAnimation = instant;\n if (instant) {\n this.mountPopup();\n return;\n }\n this.delayTimer = setTimeout(() => {\n this.delayTimer = null;\n if (!this.label?.trim()) return;\n this.mountPopup();\n }, this.hoverDelayMs);\n }\n\n private hide() {\n this.clearTimers();\n if (!this.popupEl && !this.isOpen) return;\n lastDismissedAt = Date.now();\n if (!this.popupEl) {\n this.isOpen = false;\n return;\n }\n this.popupEl.classList.remove('tooltip-popup--instant');\n this.popupEl.classList.add('tooltip-popup--closing');\n if (this.fadeOutMs === 0) {\n if (activeTooltip === this) activeTooltip = null;\n this.destroyPopup();\n this.isOpen = false;\n this.skipEnterAnimation = false;\n return;\n }\n this.closeTimer = setTimeout(() => {\n this.closeTimer = null;\n if (activeTooltip === this) activeTooltip = null;\n this.destroyPopup();\n this.isOpen = false;\n this.skipEnterAnimation = false;\n }, this.fadeOutMs);\n }\n\n private mountPopup() {\n if (!this.popupEl) {\n const tip = document.createElement('div');\n tip.id = this.tooltipId;\n tip.setAttribute('role', 'tooltip');\n // `sc-ds-tooltip` is required for Stencil scoped CSS to match outside the host.\n tip.className = 'tooltip-popup ds-forced-colors-scope sc-ds-tooltip';\n Object.assign(tip.style, {\n position: 'fixed',\n left: '0',\n top: '0',\n zIndex: 'var(--dimension-z-index-tooltip)',\n pointerEvents: 'none',\n });\n document.body.appendChild(tip);\n this.popupEl = tip;\n }\n\n this.setupOpenListeners();\n this.linkDescribedBy();\n this.popupEl.classList.toggle('tooltip-popup--instant', this.skipEnterAnimation);\n this.popupEl.classList.toggle('tooltip-popup--wrap', this.wrapLabel);\n this.popupEl.classList.remove('tooltip-popup--closing');\n this.renderPopupContent();\n this.schedulePosition();\n this.isOpen = true;\n }\n\n private renderPopupContent() {\n if (!this.popupEl) return;\n this.popupEl.classList.toggle('tooltip-popup--wrap', this.wrapLabel);\n const textVariant = CONTROL_TEXT_VARIANT[this.size];\n const density =\n this.size === 'md'\n ? 'ds-control--md'\n : this.size === 'sm'\n ? 'ds-control--sm'\n : 'ds-control--xs';\n // Every layout node needs `sc-ds-tooltip` so scoped selectors (`.foo.sc-ds-tooltip`) match.\n const sc = 'sc-ds-tooltip';\n\n const inner = document.createElement('div');\n inner.className = `tooltip-inner ${density} ${sc}`;\n\n const appendShortcut = (position: 'start' | 'end') => {\n if (!this.shortcutKey || this.shortcutKeyPosition !== position) return;\n const group = document.createElement('span');\n group.className = `key-hint-group ${sc}`;\n group.setAttribute('aria-hidden', 'true');\n\n for (const label of shortcutKeyLabels(this.shortcutKey)) {\n const hint = document.createElement('span');\n const wide = Array.from(label).length > 1 ? ' key-hint--wide' : '';\n hint.className = `key-hint${wide} ${sc}`;\n const text = document.createElement('span');\n text.className = `key-hint__label ${sc}`;\n text.textContent = label;\n hint.appendChild(text);\n group.appendChild(hint);\n }\n inner.appendChild(group);\n };\n\n appendShortcut('start');\n\n // ds-text is the layout box (metric-box + 2px control label-inset).\n // Inline styles required — see styleTooltipLabel.\n const label = createDsText({\n variant: textVariant,\n wrap: this.wrapLabel ? 'wrap' : 'nowrap',\n text: this.label,\n });\n styleTooltipLabel(label, this.wrapLabel);\n inner.appendChild(label);\n\n appendShortcut('end');\n\n this.popupEl.replaceChildren(inner);\n }\n\n render() {\n return (\n <Host style={{ display: 'contents' }}>\n <slot onSlotchange={this.handleSlotChange} />\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{p as e,H as t,c as i,h as s,a as r,t as a}from"./index.js";import{C as n,c as o,a as d,b as c,r as l,d as h}from"./p-B0uO3-Dp.js";import{C as p}from"./p-DlsjHRU3.js";import{t as g}from"./p-02k7d7BH.js";import{g as b,i as f}from"./p-BQq26pt9.js";import{b as u,f as v,r as m,a as _,c as w,s as x,d as y,e as k,g as C,h as I,i as A,j as T,v as z,o as L,k as M,l as S,m as j,n as B,p as E,q as O}from"./p-BWSIw8AQ.js";import{d as V}from"./p-CzTJAO2J.js";import{d as D}from"./p-DKg181YU.js";import{d as H}from"./p-CaNMVLhm.js";import{d as R}from"./p-BVsVUnAw.js";import{d as F}from"./p-0XTyQNRG.js";import{d as $}from"./p-DixX2_Bd.js";import{d as P}from"./p-Ch00yccW.js";import{d as W}from"./p-CAARHqjE.js";import{d as q}from"./p-M9pOLcyK.js";import{d as G}from"./p-CTAF7SkL.js";import{d as K}from"./p-B5rN3slq.js";const N=()=>`.sc-ds-bar-page-title-h,.sc-ds-bar-page-title:where(.ds-table),.sc-ds-bar-page-title:where(.tooltip-popup),.sc-ds-bar-page-title:where(.ds-radius){--ds-radius-control:var(--dimension-radius-025);--ds-radius-card:var(--dimension-radius-050);--ds-radius-modal:var(--dimension-radius-050);--ds-radius-menu:var(--dimension-radius-075);--ds-radius-tooltip-control:var(--dimension-radius-025);--ds-radius-tooltip-menu:var(--dimension-radius-075);--ds-radius-table:var(--dimension-radius-050)}.ds-control--lg.sc-ds-bar-page-title,.ds-control--lg.sc-ds-bar-page-title-h,.ds-control--md.sc-ds-bar-page-title-h,.ds-control--md.sc-ds-bar-page-title,.ds-control--sm.sc-ds-bar-page-title-h,.ds-control--sm.sc-ds-bar-page-title,.ds-control--xs.sc-ds-bar-page-title-h,.ds-control--xs.sc-ds-bar-page-title{--ds-control-radius:var(--ds-radius-control)}.ds-control--lg.sc-ds-bar-page-title-h,.ds-control--lg.sc-ds-bar-page-title{--ds-control-height:var(--dimension-size-500);--ds-control-icon:var(--dimension-iconography-lg);--ds-control-padding-inline:var(--dimension-space-100);--ds-control-label-inset:var(--dimension-space-050);--ds-control-gap:var(--dimension-space-050)}.ds-control--md.sc-ds-bar-page-title-h,.ds-control--md.sc-ds-bar-page-title{--ds-control-height:var(--dimension-size-400);--ds-control-icon:var(--dimension-iconography-md);--ds-control-padding-inline:var(--dimension-space-075);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:var(--dimension-space-050)}.ds-control--sm.sc-ds-bar-page-title-h,.ds-control--sm.sc-ds-bar-page-title{--ds-control-height:var(--dimension-size-300);--ds-control-icon:var(--dimension-iconography-sm);--ds-control-padding-inline:var(--dimension-space-050);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:var(--dimension-space-025)}.ds-control--xs.sc-ds-bar-page-title-h,.ds-control--xs.sc-ds-bar-page-title{--ds-control-height:var(--dimension-size-200);--ds-control-icon:var(--dimension-iconography-xs);--ds-control-padding-inline:var(--dimension-space-025);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:0}.ds-control-frame.sc-ds-bar-page-title{display:inline-flex;align-items:center;box-sizing:border-box;height:var(--ds-control-height, var(--dimension-size-400));padding-inline:var(--ds-control-padding-inline, var(--dimension-space-075));gap:var(--ds-control-gap, var(--dimension-space-050));border-radius:var(--ds-control-radius, var(--dimension-radius-025))}.ds-control-section-heading.sc-ds-bar-page-title{display:flex;align-items:center;box-sizing:border-box;height:var(--ds-control-height, var(--dimension-size-400));padding-inline:calc( var(--ds-control-padding-inline, var(--dimension-space-075)) + var(--ds-control-label-inset, var(--dimension-space-025)) )}.ds-control-icon-box.sc-ds-bar-page-title{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:var(--ds-control-icon, var(--dimension-iconography-md));height:var(--ds-control-icon, var(--dimension-iconography-md))}.ds-control-label-box.sc-ds-bar-page-title{min-width:0;padding-inline:var(--ds-control-label-inset, var(--dimension-space-025))}.ds-control-label-dot.sc-ds-bar-page-title{position:relative;padding-inline-end:calc( var(--ds-control-label-inset, var(--dimension-space-025)) + var(--ds-control-gap, var(--dimension-space-050)) )}.ds-control-label-dot__badge.sc-ds-bar-page-title{position:absolute;inset-block-start:0;inset-inline-end:0;pointer-events:none}.ds-control--lg.sc-ds-bar-page-title,.ds-control--lg.sc-ds-bar-page-title-h,.ds-control--md.sc-ds-bar-page-title-h,.ds-control--md.sc-ds-bar-page-title,.ds-control--sm.sc-ds-bar-page-title-h,.ds-control--sm.sc-ds-bar-page-title,.ds-control--xs.sc-ds-bar-page-title-h,.ds-control--xs.sc-ds-bar-page-title{--ds-control-radius:var(--ds-radius-control)}.ds-control--lg.sc-ds-bar-page-title-h,.ds-control--lg.sc-ds-bar-page-title{--ds-control-height:var(--dimension-size-500);--ds-control-icon:var(--dimension-iconography-lg);--ds-control-padding-inline:var(--dimension-space-100);--ds-control-label-inset:var(--dimension-space-050);--ds-control-gap:var(--dimension-space-050)}.ds-control--md.sc-ds-bar-page-title-h,.ds-control--md.sc-ds-bar-page-title{--ds-control-height:var(--dimension-size-400);--ds-control-icon:var(--dimension-iconography-md);--ds-control-padding-inline:var(--dimension-space-075);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:var(--dimension-space-050)}.ds-control--sm.sc-ds-bar-page-title-h,.ds-control--sm.sc-ds-bar-page-title{--ds-control-height:var(--dimension-size-300);--ds-control-icon:var(--dimension-iconography-sm);--ds-control-padding-inline:var(--dimension-space-050);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:var(--dimension-space-025)}.ds-control--xs.sc-ds-bar-page-title-h,.ds-control--xs.sc-ds-bar-page-title{--ds-control-height:var(--dimension-size-200);--ds-control-icon:var(--dimension-iconography-xs);--ds-control-padding-inline:var(--dimension-space-025);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:0}.ds-chrome-header.sc-ds-bar-page-title{display:flex;align-items:center;box-sizing:border-box;min-width:0;min-block-size:var(--dimension-size-600);padding:var(--dimension-space-100);gap:var(--dimension-space-100)}.ds-chrome-header--wrapping.sc-ds-bar-page-title{flex-wrap:wrap}.ds-chrome-header--bounded.sc-ds-bar-page-title{border-block-end:var(--dimension-stroke-width-012) solid var(--color-border-tertiary)}.ds-chrome-header__leading.sc-ds-bar-page-title,.ds-chrome-header__trailing.sc-ds-bar-page-title{display:flex;align-items:center;flex:0 0 auto;min-width:0}.ds-chrome-header__trailing.sc-ds-bar-page-title{margin-inline-start:auto;gap:var(--dimension-space-100)}.ds-chrome-header__copy.sc-ds-bar-page-title{display:flex;flex:1 1 0;min-width:0;padding:var(--ds-control-padding-inline, var(--dimension-space-075));box-sizing:border-box}.ds-chrome-header__copy--wrapping.sc-ds-bar-page-title{align-items:baseline;flex-wrap:wrap;column-gap:var(--dimension-space-100);row-gap:var(--dimension-space-050)}.ds-chrome-header__copy--stacked.sc-ds-bar-page-title{align-items:stretch;flex-direction:column;gap:var(--dimension-space-050)}.ds-chrome-header__heading.sc-ds-bar-page-title,.ds-chrome-header__description.sc-ds-bar-page-title{width:auto;min-width:0;padding-inline:var(--ds-control-label-inset, var(--dimension-space-025));box-sizing:border-box}.ds-chrome-header__heading.sc-ds-bar-page-title{flex:0 1 auto}.ds-chrome-header__copy--wrapping.sc-ds-bar-page-title .ds-chrome-header__description.sc-ds-bar-page-title{flex:1 1 var(--dimension-card-width-xs)}@media (forced-colors: active){.sc-ds-bar-page-title:root,.sc-ds-bar-page-title-h,.ds-forced-colors-scope.sc-ds-bar-page-title{--ds-forced-color-surface:Canvas;--ds-forced-color-content:CanvasText;--ds-forced-color-control-boundary:ButtonText;--ds-forced-color-selected:Highlight;--ds-forced-color-on-selected:HighlightText;--ds-forced-color-disabled:GrayText}}.sc-ds-bar-page-title-h{--ds-focus-ring-width:var(--dimension-stroke-width-025, 2px);--ds-focus-ring-offset:var(--dimension-space-025, 2px);--ds-focus-ring-color:var(--color-interaction-focus)}.ds-focus-ring.sc-ds-bar-page-title-h,.ds-focus-ring.sc-ds-bar-page-title,.ds-focus-ring-inset.sc-ds-bar-page-title-h,.ds-focus-ring-inset.sc-ds-bar-page-title{outline:none;-webkit-tap-highlight-color:transparent;touch-action:manipulation}.ds-focus-ring.sc-ds-bar-page-title-h:focus-visible,.ds-focus-ring.sc-ds-bar-page-title:focus-visible{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:var(--ds-focus-ring-offset)}.ds-focus-ring.ds-focus-ring--visible.sc-ds-bar-page-title-h,.ds-focus-ring.ds-focus-ring--visible.sc-ds-bar-page-title{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:var(--ds-focus-ring-offset)}.ds-focus-ring-inset.sc-ds-bar-page-title-h:focus-visible,.ds-focus-ring-inset.sc-ds-bar-page-title:focus-visible{outline:none}.ds-focus-ring-inset.sc-ds-bar-page-title-h:focus-visible::after,.ds-focus-ring-inset.sc-ds-bar-page-title:focus-visible::after{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:calc(-1 * var(--ds-focus-ring-width))}.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-bar-page-title-h,.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-bar-page-title{outline:none}.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-bar-page-title-h::after,.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-bar-page-title::after{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:calc(-1 * var(--ds-focus-ring-width))}@media (forced-colors: active){.sc-ds-bar-page-title-h{--ds-focus-ring-color:var(--ds-forced-color-selected)}}@media (forced-colors: active){.sc-ds-bar-page-title:root,.sc-ds-bar-page-title-h,.ds-forced-colors-scope.sc-ds-bar-page-title{--ds-forced-color-surface:Canvas;--ds-forced-color-content:CanvasText;--ds-forced-color-control-boundary:ButtonText;--ds-forced-color-selected:Highlight;--ds-forced-color-on-selected:HighlightText;--ds-forced-color-disabled:GrayText}}.ds-interaction-fill.sc-ds-bar-page-title-h,.ds-interaction-fill.sc-ds-bar-page-title{position:var(--ds-interaction-position, relative);z-index:var(--ds-interaction-z-index, 0);cursor:default;--ds-interaction-hover:var(--color-interaction-hover);--ds-interaction-pressed:var(--color-interaction-pressed);--ds-interaction-active:var(--color-interaction-active-brand);--ds-interaction-border-width:0px;--ds-interaction-border-color:transparent;--ds-interaction-divider-width:0px;--ds-interaction-divider-color:transparent;--ds-interaction-divider-inline-start-width:0px;--ds-interaction-divider-inline-start-color:transparent;--ds-interaction-divider-inline-end-width:0px;--ds-interaction-divider-inline-end-color:transparent}.ds-interaction-fill.sc-ds-bar-page-title-h::before,.ds-interaction-fill.sc-ds-bar-page-title::before,.ds-interaction-fill.sc-ds-bar-page-title-h::after,.ds-interaction-fill.sc-ds-bar-page-title::after{content:'';position:absolute;inset:0;border-radius:inherit;background:transparent;pointer-events:none;cursor:inherit;transition:none}.ds-interaction-fill.sc-ds-bar-page-title-h::before,.ds-interaction-fill.sc-ds-bar-page-title::before{z-index:1}.ds-interaction-fill.sc-ds-bar-page-title-h::after,.ds-interaction-fill.sc-ds-bar-page-title::after{z-index:3;box-shadow:inset 0 calc(-1 * var(--ds-interaction-divider-width)) 0 var(--ds-interaction-divider-color), inset var(--ds-interaction-divider-inline-start-width) 0 0 var(--ds-interaction-divider-inline-start-color), inset calc(-1 * var(--ds-interaction-divider-inline-end-width)) 0 0 var(--ds-interaction-divider-inline-end-color), inset 0 0 0 var(--ds-interaction-border-width) var(--ds-interaction-border-color)}.ds-interaction-fill--bordered.sc-ds-bar-page-title-h,.ds-interaction-fill--bordered.sc-ds-bar-page-title{--ds-interaction-border-width:var(--dimension-stroke-width-012);--ds-interaction-border-color:var(--color-border-secondary)}.ds-interaction-fill--selected.sc-ds-bar-page-title-h::before,.ds-interaction-fill--selected.sc-ds-bar-page-title::before{background:var(--ds-interaction-active)}.ds-interaction-fill--selected.sc-ds-bar-page-title-h,.ds-interaction-fill--selected.sc-ds-bar-page-title{--ds-interaction-dot-ring:var(--ds-interaction-active)}@media (hover: hover) and (pointer: fine){.ds-interaction-fill.sc-ds-bar-page-title-h:hover:not(:disabled)::after,.ds-interaction-fill.sc-ds-bar-page-title:hover:not(:disabled)::after{background:var(--ds-interaction-hover)}}.ds-interaction-fill.sc-ds-bar-page-title-h:active:not(:disabled)::after,.ds-interaction-fill.sc-ds-bar-page-title:active:not(:disabled)::after{background:var(--ds-interaction-pressed)}.ds-interaction-fill--grouped.sc-ds-bar-page-title-h::after,.ds-interaction-fill--grouped.sc-ds-bar-page-title::after,.ds-interaction-fill--grouped.sc-ds-bar-page-title-h:active:not(:disabled)::after,.ds-interaction-fill--grouped.sc-ds-bar-page-title:active:not(:disabled)::after{background:var(--ds-interaction-group-fill, transparent)}@media (hover: hover) and (pointer: fine){.ds-interaction-fill--grouped.sc-ds-bar-page-title-h:hover:not(:disabled)::after,.ds-interaction-fill--grouped.sc-ds-bar-page-title:hover:not(:disabled)::after{background:var(--ds-interaction-group-fill, transparent)}}.ds-interaction-fill--grouped.sc-ds-bar-page-title-h,.ds-interaction-fill--grouped.sc-ds-bar-page-title{--ds-interaction-divider-width:var(--ds-interaction-group-divider-width, 0px);--ds-interaction-divider-color:var(--ds-interaction-group-divider-color, transparent);--ds-interaction-divider-inline-start-width:var( --ds-interaction-group-divider-inline-start-width, 0px );--ds-interaction-divider-inline-start-color:var( --ds-interaction-group-divider-inline-start-color, transparent );--ds-interaction-divider-inline-end-width:var( --ds-interaction-group-divider-inline-end-width, 0px );--ds-interaction-divider-inline-end-color:var( --ds-interaction-group-divider-inline-end-color, transparent )}.ds-interaction-fill.sc-ds-bar-page-title-h>.ds-interaction-fill__content.sc-ds-bar-page-title,.ds-interaction-fill.sc-ds-bar-page-title>.ds-interaction-fill__content.sc-ds-bar-page-title,.ds-interaction-fill__content.sc-ds-bar-page-title{position:relative;z-index:2;cursor:inherit}.ds-interaction-fill--on-faint.sc-ds-bar-page-title-h,.ds-interaction-fill--on-faint.sc-ds-bar-page-title{--ds-interaction-active:var(--color-interaction-active)}.ds-interaction-fill--on-medium.sc-ds-bar-page-title-h,.ds-interaction-fill--on-medium.sc-ds-bar-page-title{--ds-interaction-hover:var(--color-interaction-on-medium-background-hover);--ds-interaction-pressed:var(--color-interaction-on-medium-background-pressed);--ds-interaction-active:var(--color-interaction-on-medium-background-active);--ds-focus-ring-color:var(--color-interaction-on-medium-background-focus)}.ds-interaction-fill--on-bold.sc-ds-bar-page-title-h,.ds-interaction-fill--on-bold.sc-ds-bar-page-title{--ds-interaction-hover:var(--color-interaction-on-bold-background-hover);--ds-interaction-pressed:var(--color-interaction-on-bold-background-pressed);--ds-interaction-active:var(--color-interaction-on-bold-background-active);--ds-focus-ring-color:var(--color-interaction-on-bold-background-focus)}.ds-interaction-fill--on-strong.sc-ds-bar-page-title-h,.ds-interaction-fill--on-strong.sc-ds-bar-page-title{--ds-interaction-hover:var(--color-interaction-on-strong-background-hover);--ds-interaction-pressed:var(--color-interaction-on-strong-background-pressed);--ds-interaction-active:var(--color-interaction-on-strong-background-active);--ds-focus-ring-color:var(--color-interaction-on-strong-background-focus)}.ds-interaction-fill--on-translucent.sc-ds-bar-page-title-h,.ds-interaction-fill--on-translucent.sc-ds-bar-page-title{--ds-interaction-hover:var(--color-translucent-interaction-hover);--ds-interaction-pressed:var(--color-translucent-interaction-pressed);--ds-interaction-active:var(--color-translucent-interaction-active-brand);--ds-focus-ring-color:var(--color-translucent-interaction-focus)}.ds-interaction-fill--on-inverted.sc-ds-bar-page-title-h,.ds-interaction-fill--on-inverted.sc-ds-bar-page-title{--ds-interaction-hover:var(--color-inverted-interaction-hover);--ds-interaction-pressed:var(--color-inverted-interaction-pressed);--ds-interaction-active:var(--color-inverted-interaction-active-brand);--ds-focus-ring-color:var(--color-inverted-interaction-focus)}.ds-interaction-fill--on-media.sc-ds-bar-page-title-h,.ds-interaction-fill--on-media.sc-ds-bar-page-title{--ds-interaction-hover:var(--color-media-interaction-hover);--ds-interaction-pressed:var(--color-media-interaction-pressed);--ds-interaction-active:var(--color-media-interaction-active);--ds-focus-ring-color:var(--color-media-interaction-focus)}.ds-interaction-fill--on-always-dark.sc-ds-bar-page-title-h,.ds-interaction-fill--on-always-dark.sc-ds-bar-page-title{--ds-interaction-hover:var(--color-always-dark-interaction-hover);--ds-interaction-pressed:var(--color-always-dark-interaction-pressed);--ds-interaction-active:var(--color-always-dark-interaction-active-brand);--ds-focus-ring-color:var(--color-always-dark-interaction-focus)}.ds-interaction-fill--on-chrome.sc-ds-bar-page-title-h,.ds-interaction-fill--on-chrome.sc-ds-bar-page-title{--ds-interaction-hover:var(--color-chrome-interaction-hover);--ds-interaction-pressed:var(--color-chrome-interaction-pressed);--ds-interaction-active:var(--color-chrome-interaction-active);--ds-focus-ring-color:var(--color-chrome-interaction-focus)}.ds-interaction-fill--on-navigation.sc-ds-bar-page-title-h,.ds-interaction-fill--on-navigation.sc-ds-bar-page-title{--ds-interaction-hover:var(--color-navigation-interaction-hover);--ds-interaction-pressed:var(--color-navigation-interaction-pressed);--ds-interaction-active:var(--color-navigation-interaction-active);--ds-focus-ring-color:var(--color-navigation-interaction-focus)}.ds-interaction-fill.ds-interaction-fill--surface-open.sc-ds-bar-page-title-h:not(:disabled)::after,.ds-interaction-fill.ds-interaction-fill--surface-open.sc-ds-bar-page-title:not(:disabled)::after{background:var(--ds-interaction-pressed)}@media (forced-colors: active){.ds-interaction-fill.sc-ds-bar-page-title-h::after,.ds-interaction-fill.sc-ds-bar-page-title::after{box-shadow:none;outline:var(--ds-interaction-border-width) solid var(--ds-forced-color-control-boundary);outline-offset:calc(-1 * var(--ds-interaction-border-width))}.ds-interaction-fill--surface-open.sc-ds-bar-page-title-h:not(:disabled):not(:focus-visible):not(:focus-within):not(.ds-focus-ring--visible)::after,.ds-interaction-fill--surface-open.sc-ds-bar-page-title:not(:disabled):not(:focus-visible):not(:focus-within):not(.ds-focus-ring--visible)::after{outline:var(--dimension-stroke-width-025) dashed var(--ds-forced-color-control-boundary);outline-offset:calc(-1 * var(--dimension-stroke-width-025))}.ds-interaction-fill--selected.sc-ds-bar-page-title-h::before,.ds-interaction-fill--selected.sc-ds-bar-page-title::before{background:transparent;outline:var(--dimension-stroke-width-025) solid var(--ds-forced-color-selected);outline-offset:calc(-1 * var(--dimension-stroke-width-025))}}@media (forced-colors: active) and (hover: hover) and (pointer: fine){.ds-interaction-fill.sc-ds-bar-page-title-h:hover:not(:disabled):not(:focus-visible):not(:focus-within):not(.ds-focus-ring--visible)::after,.ds-interaction-fill.sc-ds-bar-page-title:hover:not(:disabled):not(:focus-visible):not(:focus-within):not(.ds-focus-ring--visible)::after{outline-color:var(--ds-forced-color-selected);outline-width:var(--dimension-stroke-width-012)}}@media (forced-colors: active){.sc-ds-bar-page-title:root,.sc-ds-bar-page-title-h,.ds-forced-colors-scope.sc-ds-bar-page-title{--ds-forced-color-surface:Canvas;--ds-forced-color-content:CanvasText;--ds-forced-color-control-boundary:ButtonText;--ds-forced-color-selected:Highlight;--ds-forced-color-on-selected:HighlightText;--ds-forced-color-disabled:GrayText}}.ds-control-inactive.sc-ds-bar-page-title-h,.ds-control-inactive.sc-ds-bar-page-title{opacity:var(--effect-opacity-medium);pointer-events:none;cursor:not-allowed}@media (forced-colors: active){.ds-control-inactive.sc-ds-bar-page-title-h,.ds-control-inactive.sc-ds-bar-page-title{color:var(--ds-forced-color-disabled);opacity:1}}.sc-ds-bar-page-title-h{display:block;min-width:0;box-sizing:border-box;background:var(--color-background-secondary);--_bar-page-title-fg-primary:var(--color-foreground-primary);--_bar-page-title-fg-secondary:var(--color-foreground-secondary);--_bar-page-title-hover:var(--color-interaction-hover);--_bar-page-title-pressed:var(--color-interaction-pressed);--_bar-page-title-focus:var(--color-interaction-focus);--_bar-page-title-border:var(--color-border-tertiary);--ds-focus-ring-color:var(--_bar-page-title-focus)}[data-shell-bar].sc-ds-bar-page-title-h{background:transparent;color:var(--_bar-page-title-fg-primary);--_bar-page-title-fg-primary:var(--color-chrome-foreground-primary);--_bar-page-title-fg-secondary:var(--color-chrome-foreground-secondary);--_bar-page-title-hover:var(--color-chrome-interaction-hover);--_bar-page-title-pressed:var(--color-chrome-interaction-pressed);--_bar-page-title-focus:var(--color-chrome-interaction-focus);--_bar-page-title-border:var(--color-chrome-border-tertiary);--ds-focus-ring-color:var(--_bar-page-title-focus)}ds-shell-app.sc-ds-bar-page-title-h:not([gradient-preset='none']),ds-shell-app:not([gradient-preset='none']) .sc-ds-bar-page-title-h,ds-shell-app.sc-ds-bar-page-title-h:not([gradient-preset='none']) .bar-page-title.sc-ds-bar-page-title,ds-shell-app:not([gradient-preset='none']) .sc-ds-bar-page-title-h .bar-page-title.sc-ds-bar-page-title,ds-shell-app.shell-app--paper-texture.sc-ds-bar-page-title-h,ds-shell-app.shell-app--paper-texture .sc-ds-bar-page-title-h,ds-shell-app.shell-app--paper-texture.sc-ds-bar-page-title-h .bar-page-title.sc-ds-bar-page-title,ds-shell-app.shell-app--paper-texture .sc-ds-bar-page-title-h .bar-page-title.sc-ds-bar-page-title{background:transparent}.bar-page-title.sc-ds-bar-page-title{position:relative;height:var(--dimension-size-600);min-width:0;box-sizing:border-box;background:var(--color-background-secondary);color:var(--_bar-page-title-fg-primary)}[data-shell-bar].sc-ds-bar-page-title-h .bar-page-title.sc-ds-bar-page-title{background:transparent}.bar-page-title.sc-ds-bar-page-title::after{content:'';position:absolute;inset:auto 0 0;height:var(--dimension-stroke-width-012);background:var(--_bar-page-title-border);pointer-events:none}.bar-page-title--divider-hidden.sc-ds-bar-page-title::after{display:none}.bar-page-title__inner.sc-ds-bar-page-title{position:relative;z-index:1;flex:1 1 auto;height:100%;min-width:0;padding:0;gap:0}.bar-page-title__row.sc-ds-bar-page-title{display:flex;align-items:center;justify-content:space-between;gap:var(--dimension-space-100);height:100%;min-width:0}.bar-page-title__title-row.sc-ds-bar-page-title{display:flex;align-items:center;gap:var(--dimension-space-100);min-width:0;min-height:var(--dimension-size-400);flex:1 1 auto}.bar-page-title__identity.sc-ds-bar-page-title{display:flex;flex:0 1 auto;align-items:center;gap:var(--dimension-space-050);min-width:0;height:var(--dimension-size-400)}.bar-page-title__back.sc-ds-bar-page-title,.bar-page-title__section-chevron.sc-ds-bar-page-title{flex:0 0 auto}.bar-page-title__heading.sc-ds-bar-page-title{display:inline-flex;flex:1 1 auto;align-items:center;width:auto;min-width:0;height:var(--dimension-size-400);padding-inline:calc(var(--ds-control-padding-inline) + var(--ds-control-label-inset));box-sizing:border-box;user-select:none}.bar-page-title__divider.sc-ds-bar-page-title{width:var(--dimension-stroke-width-012);height:var(--dimension-size-250);flex:0 0 var(--dimension-stroke-width-012);background:var(--_bar-page-title-border)}.bar-page-title__section-selector.sc-ds-bar-page-title{display:flex;flex:0 1 auto;min-width:0;max-width:var(--dimension-panel-width-sm)}.bar-page-title__section-trigger.sc-ds-bar-page-title{--ds-control-radius:var(--dimension-radius-half);display:inline-flex;align-items:center;justify-content:center;gap:var(--ds-control-gap);height:var(--ds-control-height);min-width:0;max-width:100%;padding-inline:var(--ds-control-padding-inline);border:none;border-radius:var(--ds-control-radius);box-sizing:border-box;background:transparent;color:var(--color-foreground-secondary);cursor:default;font-family:inherit;user-select:none}[data-shell-bar].sc-ds-bar-page-title-h .bar-page-title__section-trigger.sc-ds-bar-page-title{color:var(--_bar-page-title-fg-primary)}.bar-page-title__section-label.sc-ds-bar-page-title{min-width:0;padding-inline:var(--ds-control-label-inset)}.bar-page-title__actions.sc-ds-bar-page-title{display:flex;align-items:center;gap:var(--dimension-space-100);flex:0 0 auto}.bar-page-title__probe.sc-ds-bar-page-title{position:absolute;left:0;top:0;visibility:hidden;pointer-events:none;overflow:visible;width:max-content;max-width:none;z-index:-1}.bar-page-title__probe-row.sc-ds-bar-page-title{display:flex;align-items:center;gap:var(--dimension-space-100);width:max-content;max-width:none}.bar-page-title__probe.sc-ds-bar-page-title .bar-page-title__identity.sc-ds-bar-page-title,.bar-page-title__probe.sc-ds-bar-page-title .bar-page-title__heading.sc-ds-bar-page-title{flex:0 0 auto;width:max-content;min-width:0;max-width:none}.bar-page-title__tabs-pending.sc-ds-bar-page-title{flex:0 0 auto;width:var(--dimension-size-400);height:var(--ds-control-height);visibility:hidden;pointer-events:none}.bar-page-title__tab-list.sc-ds-bar-page-title{display:flex;align-items:center;gap:var(--dimension-space-050);position:relative;width:max-content;flex:0 0 auto;min-width:0}.bar-page-title__tab.sc-ds-bar-page-title{display:flex;align-items:center;justify-content:center;gap:var(--ds-control-gap);height:var(--ds-control-height);min-width:var(--ds-control-height);padding:0 var(--ds-control-padding-inline);box-sizing:border-box;border:none;border-radius:var(--ds-control-radius);background-color:transparent;color:var(--_bar-page-title-fg-secondary);cursor:default;position:relative;flex-shrink:0;-webkit-user-select:none;user-select:none;transition:color var(--effect-motion-short-2)}.bar-page-title__tab.sc-ds-bar-page-title::after{content:'';position:absolute;inset:0;border-radius:var(--ds-control-radius);background:transparent;pointer-events:none;cursor:inherit}@media (hover: hover) and (pointer: fine){.bar-page-title__tab.sc-ds-bar-page-title:hover::after{background:var(--_bar-page-title-hover)}}.bar-page-title__tab.sc-ds-bar-page-title:active::after{background:var(--_bar-page-title-pressed)}.bar-page-title__tab--selected.sc-ds-bar-page-title{color:var(--_bar-page-title-fg-primary)}.bar-page-title__tab-label.sc-ds-bar-page-title{display:inline-flex;align-items:center;white-space:nowrap}.bar-page-title__tab-divider.sc-ds-bar-page-title{display:flex;align-items:center;justify-content:center;box-sizing:border-box;width:var(--dimension-space-100);height:var(--ds-control-height);padding-block:var(--ds-control-padding-inline);flex-shrink:0;pointer-events:none}.bar-page-title__tab-divider-line.sc-ds-bar-page-title{width:var(--dimension-stroke-width-012);align-self:stretch;background-color:var(--_bar-page-title-border)}`;let Q=0;const U=e(class e extends t{constructor(e){super();if(e!==false){this.__registerHost()}this.dsBack=i(this,"dsBack",7);this.dsSectionChange=i(this,"dsSectionChange",7);this.dsAction=i(this,"dsAction",7);this.showBack=false;this.backAriaLabel="Back";this.sections=[];this.value="";this.sectionsAriaLabel="Change page section";this.primaryAction=null;this.actions=[];this.actionsAriaLabel="More page actions";this.showDivider=true;this.sectionMenuOpen=false;this.openActionMenuId="";this.surfaceActionMenuId="";this.sectionSurfaceOpen=false;this.sectionMenuInitialFocusVisible=false;this.actionMenuInitialFocusVisible=false;this.sectionsCollapsed=false;this.layoutCommitted=false;this.focusedTabId="";this.instanceId=Q++;this.sectionMenuTriggerId=`bar-page-title-section-trigger-${this.instanceId}`;this.sectionMenuId=`bar-page-title-section-menu-${this.instanceId}`;this.actionMenuTriggerId=`bar-page-title-action-trigger-${this.instanceId}`;this.actionMenuId=`bar-page-title-action-menu-${this.instanceId}`;this.sectionTriggerEl=null;this.actionTriggerEl=null;this.actionTriggerEls=new Map;this.chromeEl=null;this.rowEl=null;this.probeRowEl=null;this.visibleTabListEl=null;this.resizeObserver=null;this.hasLoaded=false;this.connectionTasks=new p((()=>this.el.isConnected));this.intrinsicWidthRetryCount=0;this.tabLayoutPendingFrames=0;this.panelNavTransition=new n;this.panelToolsTransition=new n;this.overflowCoalescer=o((()=>{this.updateSectionsCollapsed()}));this.chromeTransitionShell=null;this.onChromeTransitionStart=e=>{const t=l(e);if(t==="panel-nav"){this.panelNavTransition.enter();return}if(t==="panel-tools"){const t=h(e)??"opening";if(t==="closing"){this.panelToolsTransition.enter()}}};this.onChromeTransitionEnd=e=>{const t=l(e);if(t==="panel-nav"){this.panelNavTransition.exit();if(!this.panelNavTransition.isActive){this.scheduleOverflowCheck()}return}if(t==="panel-tools"){this.panelToolsTransition.exit();this.scheduleOverflowCheck()}};this.toggleSectionMenu=e=>{this.sectionMenuInitialFocusVisible=e.detail===0;this.openActionMenuId="";this.sectionMenuOpen=!this.sectionMenuOpen;if(this.sectionMenuOpen)this.sectionSurfaceOpen=true};this.closeSectionMenu=()=>{this.sectionMenuOpen=false};this.handleSectionSelect=e=>{const t=String(e.detail?.value??"");this.closeSectionMenu();this.selectSection(t);this.connectionTasks.frame((()=>this.sectionTriggerEl?.focus()))};this.toggleActionMenu=(e,t)=>{this.actionMenuInitialFocusVisible=t.detail===0;this.sectionMenuOpen=false;this.openActionMenuId=this.openActionMenuId===e?"":e;if(this.openActionMenuId)this.surfaceActionMenuId=this.openActionMenuId};this.finishActionMenuClose=e=>{const t=this.surfaceActionMenuId;const i=t==="__overflow"?this.actionMenuId:u("bar-page-title",this.instanceId,this.resolvedActionItems,t);if(this.openActionMenuId!==t&&e.target.id===i){this.surfaceActionMenuId=""}};this.closeActionMenu=()=>{this.openActionMenuId=""};this.handleActionSelect=e=>{const t=String(e.detail?.value??"");const i=v(this.resolvedActionItems,t);if(!i||i.isInactive||"isLoading"in i&&i.isLoading)return;const s=this.openActionMenuId;this.closeActionMenu();this.dsAction.emit(t);this.connectionTasks.frame((()=>{void m({menuId:s,overflowTrigger:this.actionTriggerEl,actionTriggers:this.actionTriggerEls,resolvedActionItems:this.resolvedActionItems})}))}}componentWillLoad(){this.reportActionIdIssues();this.syncFocusedTabId(this.effectiveValue,this.selectableTabs)}connectedCallback(){if(this.hasLoaded)this.connectResources()}componentDidLoad(){this.hasLoaded=true;this.connectResources()}connectResources(){if(!this.el.isConnected)return;this.intrinsicWidthRetryCount=0;this.tabLayoutPendingFrames=0;this.setupOverflowObserver();this.bindChromeTransitionListeners();this.scheduleOverflowCheck()}componentDidRender(){if(this.chromeOverflowPaused())return;this.scheduleOverflowCheck()}disconnectedCallback(){this.connectionTasks.cancel();this.resizeObserver?.disconnect();this.resizeObserver=null;this.overflowCoalescer.cancel();this.unbindChromeTransitionListeners();this.panelNavTransition.exit();this.panelToolsTransition.exit()}handleSectionsChange(e,t){if(!this.hasSectionSelector){this.closeSectionMenu();this.sectionSurfaceOpen=false;this.sectionsCollapsed=false;this.layoutCommitted=true;this.intrinsicWidthRetryCount=0;this.tabLayoutPendingFrames=0;return}if(_(e)===_(t)){this.syncFocusedTabId(this.effectiveValue,this.selectableTabs);return}this.resetSectionLayout();this.syncFocusedTabId(this.effectiveValue,this.selectableTabs);this.scheduleOverflowCheck()}handleValueChange(){this.syncFocusedTabId(this.effectiveValue,this.selectableTabs);this.scheduleOverflowCheck()}handleLayoutInputsChange(){this.reportActionIdIssues();if(!this.availableActionMenuIds.has(this.openActionMenuId))this.closeActionMenu();if(!this.availableActionMenuIds.has(this.surfaceActionMenuId))this.surfaceActionMenuId="";this.scheduleOverflowCheck()}reportActionIdIssues(){for(const e of w(this.resolvedActionItems)){console.warn(`[ds-bar-page-title] ${e}`)}}get dividerVisible(){return this.showCompactDivider??this.showDivider}get usesChromeTokens(){return this.el.hasAttribute("data-shell-bar")}get shellBarButtonBackground(){return this.usesChromeTokens?"chrome":undefined}get selectableSections(){return x(this.sections)}get hasSectionSelector(){return this.selectableSections.length>1}get sectionTabs(){return y(this.sections)}get selectableTabs(){return b(this.sectionTabs)}get effectiveValue(){return k(this.sections,this.value)}get selectedSectionLabel(){return C(this.sections,this.value)}get sectionTriggerAriaLabel(){return I(this.sectionsAriaLabel,this.selectedSectionLabel)}get sectionMenuSections(){return A(this.sections,this.effectiveValue)}get resolvedActionItems(){return T(this.actionItems,this.primaryAction,this.actions)}get visibleActions(){return z(this.resolvedActionItems,"compact")}get actionMenuSections(){return L(this.resolvedActionItems,"compact")}get showActionMenuTrigger(){return this.actionMenuSections.length>0}get availableActionMenuIds(){return M(this.visibleActions,this.showActionMenuTrigger)}get showSectionTabs(){return this.hasSectionSelector&&this.layoutCommitted&&!this.sectionsCollapsed}get showSectionButton(){return this.hasSectionSelector&&this.layoutCommitted&&this.sectionsCollapsed}resetSectionLayout(){this.layoutCommitted=false;this.sectionsCollapsed=false;this.sectionMenuOpen=false;this.sectionMenuInitialFocusVisible=false;this.intrinsicWidthRetryCount=0;this.tabLayoutPendingFrames=0}bindChromeTransitionListeners(){this.unbindChromeTransitionListeners();const e=this.el.closest("ds-shell-app");if(!e)return;this.chromeTransitionShell=e;e.addEventListener(d,this.onChromeTransitionStart);e.addEventListener(c,this.onChromeTransitionEnd)}unbindChromeTransitionListeners(){if(!this.chromeTransitionShell)return;this.chromeTransitionShell.removeEventListener(d,this.onChromeTransitionStart);this.chromeTransitionShell.removeEventListener(c,this.onChromeTransitionEnd);this.chromeTransitionShell=null}chromeOverflowPaused(){return this.panelNavTransition.isActive||this.panelToolsTransition.isActive}setupOverflowObserver(){if(typeof ResizeObserver==="undefined"||!this.chromeEl)return;this.resizeObserver?.disconnect();this.resizeObserver=new ResizeObserver((()=>{if(this.chromeOverflowPaused())return;this.scheduleOverflowCheck()}));this.resizeObserver.observe(this.chromeEl)}scheduleOverflowCheck(){if(!this.el.isConnected||this.chromeOverflowPaused())return;this.overflowCoalescer.schedule()}scheduleIntrinsicWidthRetry(){if(this.intrinsicWidthRetryCount>=e.INTRINSIC_WIDTH_RETRY_MAX)return;this.intrinsicWidthRetryCount++;this.connectionTasks.frame((()=>this.scheduleOverflowCheck()))}forceTabLayoutCommit(e){this.intrinsicWidthRetryCount=0;this.tabLayoutPendingFrames=0;const t=this.sectionsCollapsed!==e;if(t)this.sectionsCollapsed=e;if(!e&&t){this.closeSectionMenu();this.sectionSurfaceOpen=false}this.layoutCommitted=true}getAvailableWidth(){if(!this.rowEl)return 0;const e=this.rowEl.clientWidth;const t=this.rowEl.querySelector(".bar-page-title__actions");const i=t?.getBoundingClientRect().width??0;const s=getComputedStyle(this.rowEl);const r=parseFloat(s.columnGap||s.gap)||0;return Math.max(0,e-i-(i>0?r:0))}updateSectionsCollapsed(){if(!this.el.isConnected||this.chromeOverflowPaused())return;if(!this.hasSectionSelector){if(this.sectionsCollapsed)this.sectionsCollapsed=false;this.intrinsicWidthRetryCount=0;this.tabLayoutPendingFrames=0;this.layoutCommitted=true;return}const t=this.probeRowEl?.scrollWidth??0;const i=this.getAvailableWidth();if(!this.probeRowEl||!this.rowEl||t===0){if(this.layoutCommitted){this.scheduleIntrinsicWidthRetry();return}this.tabLayoutPendingFrames+=1;if(this.intrinsicWidthRetryCount>=e.INTRINSIC_WIDTH_RETRY_MAX||this.tabLayoutPendingFrames>=e.TAB_LAYOUT_COMMIT_MAX_FRAMES){this.forceTabLayoutCommit(false)}else{this.scheduleIntrinsicWidthRetry()}return}this.intrinsicWidthRetryCount=0;this.tabLayoutPendingFrames=0;const s=g(t,i,this.sectionsCollapsed,e.OVERFLOW_HYSTERESIS_PX);this.forceTabLayoutCommit(s)}syncFocusedTabId(e,t){if(t.some((t=>t.id===e&&!t.isInactive))){this.focusedTabId=e;return}const i=t.find((e=>!e.isInactive));this.focusedTabId=i?.id??""}selectSection(e){const t=this.selectableSections.find((t=>t.id===e));if(!t||t.isInactive)return;this.dsSectionChange.emit(e)}focusVisibleTab(e){this.focusedTabId=e;const t=this.visibleTabListEl?.querySelector(`[data-tab-id="${e}"]`);t?.focus({preventScroll:true})}findEnabledTab(e,t){const i=this.selectableTabs;for(let s=e+t;s>=0&&s<i.length;s+=t){if(!i[s]?.isInactive)return s}return null}handleTabKeyDown(e){const t=this.selectableTabs;if(!t.length)return;const i=e.target?.getAttribute("data-tab-id");const s=i??this.focusedTabId;if(e.key==="Enter"||e.key===" "){const i=t.find((e=>e.id===s));if(!i||i.isInactive)return;e.preventDefault();this.selectSection(i.id);return}const r=t.findIndex((e=>e.id===s));if(r<0)return;let a;if(e.key==="ArrowRight"){a=this.findEnabledTab(r,1)}else if(e.key==="ArrowLeft"){a=this.findEnabledTab(r,-1)}else if(e.key==="Home"){a=t.findIndex((e=>!e.isInactive))}else if(e.key==="End"){const e=[...t].reverse().findIndex((e=>!e.isInactive));a=e<0?null:t.length-1-e}else{return}if(a===null||a<0||a===r)return;e.preventDefault();this.focusVisibleTab(t[a].id)}chromeActionOptions(){return{classPrefix:"bar-page-title",compact:true,visibleActions:this.visibleActions,showOverflowTrigger:this.showActionMenuTrigger,actionItems:this.actionItems,primaryAction:this.primaryAction,resolvedActionItems:this.resolvedActionItems,instanceId:this.instanceId,openActionMenuId:this.openActionMenuId,surfaceActionMenuId:this.surfaceActionMenuId,actionsAriaLabel:this.actionsAriaLabel,actionMenuTriggerId:this.actionMenuTriggerId,actionMenuId:this.actionMenuId,actionTriggers:this.actionTriggerEls,buttonBackground:this.shellBarButtonBackground,setOverflowTriggerEl:e=>{this.actionTriggerEl=e},toggleActionMenu:this.toggleActionMenu,emitAction:e=>this.dsAction.emit(e)}}renderHeading(e){return s("ds-text",{class:"bar-page-title__heading ds-control--md",variant:"text-title-small",emphasis:true,color:"inherit",as:e?"span":"h1",wrap:e?"nowrap":undefined,lineTruncation:e?"none":1},this.heading)}renderTabList(e){return s("div",{role:e?undefined:"tablist",class:"bar-page-title__tab-list","aria-label":e?undefined:this.sectionsAriaLabel,ref:t=>{if(!e)this.visibleTabListEl=t??null},onKeyDown:e?undefined:e=>this.handleTabKeyDown(e)},this.sectionTabs.map(((t,i)=>{if(f(t)){return s("div",{class:"bar-page-title__tab-divider",key:`divider-${i}`,"aria-hidden":"true"},s("div",{class:"bar-page-title__tab-divider-line"}))}const r=t.id===this.effectiveValue;return s("button",{key:t.id,type:"button",role:e?undefined:"tab","data-tab-id":t.id,class:{"bar-page-title__tab":true,"bar-page-title__tab--selected":r,"ds-control--md":true,"ds-focus-ring-inset":true,"ds-control-inactive":!!t.isInactive,"ds-interaction-fill--on-chrome":this.usesChromeTokens},"aria-selected":r?"true":"false","aria-disabled":t.isInactive?"true":undefined,disabled:t.isInactive,tabIndex:!e&&t.id===this.focusedTabId?0:-1,onClick:()=>!e&&this.selectSection(t.id),onFocus:()=>{if(!e)this.focusedTabId=t.id}},s("ds-text",{class:"bar-page-title__tab-label ds-control-label-box",as:"span",variant:"text-body-medium",emphasis:r,color:"inherit"},t.label))})))}renderIdentity(e){return s("div",{class:"bar-page-title__identity"},S({classPrefix:"bar-page-title",showBack:this.showBack,backAriaLabel:this.backAriaLabel,background:this.shellBarButtonBackground,onBack:e=>this.dsBack.emit(e)}),this.renderHeading(e))}renderSectionRegion(){if(!this.hasSectionSelector)return null;if(!this.layoutCommitted){return[s("div",{class:"bar-page-title__divider","aria-hidden":"true"}),s("div",{class:"bar-page-title__tabs-pending","aria-hidden":"true"})]}if(this.showSectionTabs){return[s("div",{class:"bar-page-title__divider","aria-hidden":"true"}),this.renderTabList(false)]}return[s("div",{class:"bar-page-title__divider","aria-hidden":"true"}),j({classPrefix:"bar-page-title",triggerId:this.sectionMenuTriggerId,menuId:this.sectionMenuId,open:this.sectionMenuOpen,surfaceOpen:this.sectionSurfaceOpen,ariaLabel:this.sectionTriggerAriaLabel,selectedLabel:this.selectedSectionLabel,background:this.shellBarButtonBackground,labelColor:this.usesChromeTokens?"inherit":undefined,setTriggerEl:e=>{this.sectionTriggerEl=e},onToggle:this.toggleSectionMenu})]}render(){return s(r,{key:"ecad1bc5e6d0f128a457f87352d643a7f0a55e85"},s("div",{key:"f58348b5586ea25e6ab463834f51fb215fcb2d2a",class:{"bar-page-title":true,"bar-page-title--divider-hidden":!this.dividerVisible,"ds-chrome-header":true},ref:e=>{this.chromeEl=e??null;if(e&&!this.resizeObserver)this.setupOverflowObserver()}},this.hasSectionSelector?s("div",{class:"bar-page-title__probe","aria-hidden":"true",inert:true},s("div",{class:"bar-page-title__probe-row",ref:e=>{const t=e??null;if(t===this.probeRowEl)return;this.probeRowEl=t;if(t){this.intrinsicWidthRetryCount=0;this.tabLayoutPendingFrames=0;this.scheduleOverflowCheck()}}},this.renderIdentity(true),s("div",{class:"bar-page-title__divider"}),this.renderTabList(true))):null,s("div",{key:"97ab44234f67d75cadb7a0f4df68ae9e69698d87",class:"bar-page-title__inner"},s("div",{key:"4dca98ada9df5fe76b8fc70ae1410cf202ea0bfe",class:"bar-page-title__row",ref:e=>{this.rowEl=e??null}},s("div",{key:"e6713cf5184afb3c3c0926b2d5c0c85e78cffe8f",class:"bar-page-title__title-row"},this.renderIdentity(false),this.renderSectionRegion()),O(this.chromeActionOptions())))),this.showSectionButton?s("ds-menu",{id:this.sectionMenuId,class:"bar-page-title__section-menu",anchorId:this.sectionMenuTriggerId,menuLabel:this.sectionsAriaLabel,open:this.sectionMenuOpen,initialFocusVisible:this.sectionMenuInitialFocusVisible,sections:this.sectionMenuSections,onDsClose:this.closeSectionMenu,onDsAfterClose:()=>{if(!this.sectionMenuOpen)this.sectionSurfaceOpen=false},onDsSelect:this.handleSectionSelect}):null,E({classPrefix:"bar-page-title",visibleActions:this.visibleActions,instanceId:this.instanceId,resolvedActionItems:this.resolvedActionItems,openActionMenuId:this.openActionMenuId,actionMenuInitialFocusVisible:this.actionMenuInitialFocusVisible,overflowTrigger:this.actionTriggerEl,actionTriggers:this.actionTriggerEls,closeActionMenu:this.closeActionMenu,finishActionMenuClose:this.finishActionMenuClose,handleActionSelect:this.handleActionSelect}),B({classPrefix:"bar-page-title",showOverflowTrigger:this.showActionMenuTrigger,actionMenuId:this.actionMenuId,actionMenuTriggerId:this.actionMenuTriggerId,actionsAriaLabel:this.actionsAriaLabel,open:this.openActionMenuId==="__overflow",actionMenuInitialFocusVisible:this.actionMenuInitialFocusVisible,actionMenuSections:this.actionMenuSections,closeActionMenu:this.closeActionMenu,finishActionMenuClose:this.finishActionMenuClose,handleActionSelect:this.handleActionSelect}))}get el(){return this}static get watchers(){return{sections:[{handleSectionsChange:0}],value:[{handleValueChange:0}],heading:[{handleLayoutInputsChange:0}],showBack:[{handleLayoutInputsChange:0}],primaryAction:[{handleLayoutInputsChange:0}],actions:[{handleLayoutInputsChange:0}],actionItems:[{handleLayoutInputsChange:0}]}}static get style(){return N()}},[2,"ds-bar-page-title",{heading:[1],showBack:[4,"show-back"],backAriaLabel:[1,"back-aria-label"],sections:[16],value:[1],sectionsAriaLabel:[1,"sections-aria-label"],primaryAction:[16],actions:[16],actionItems:[16],actionsAriaLabel:[1,"actions-aria-label"],showDivider:[4,"show-divider"],showCompactDivider:[4,"show-compact-divider"],sectionMenuOpen:[32],openActionMenuId:[32],surfaceActionMenuId:[32],sectionSurfaceOpen:[32],sectionMenuInitialFocusVisible:[32],actionMenuInitialFocusVisible:[32],sectionsCollapsed:[32],layoutCommitted:[32],focusedTabId:[32]},undefined,{sections:[{handleSectionsChange:0}],value:[{handleValueChange:0}],heading:[{handleLayoutInputsChange:0}],showBack:[{handleLayoutInputsChange:0}],primaryAction:[{handleLayoutInputsChange:0}],actions:[{handleLayoutInputsChange:0}],actionItems:[{handleLayoutInputsChange:0}]}]);U.INTRINSIC_WIDTH_RETRY_MAX=3;U.TAB_LAYOUT_COMMIT_MAX_FRAMES=16;U.OVERFLOW_HYSTERESIS_PX=8;function J(){if(typeof customElements==="undefined"){return}const e=["ds-bar-page-title","ds-badge","ds-button-filled","ds-button-unfilled","ds-icon","ds-loader","ds-menu","ds-swatch-picker","ds-switch","ds-tag","ds-text","ds-tooltip"];e.forEach((e=>{switch(e){case"ds-bar-page-title":if(!customElements.get(a(e))){customElements.define(a(e),U)}break;case"ds-badge":if(!customElements.get(a(e))){V()}break;case"ds-button-filled":if(!customElements.get(a(e))){D()}break;case"ds-button-unfilled":if(!customElements.get(a(e))){H()}break;case"ds-icon":if(!customElements.get(a(e))){R()}break;case"ds-loader":if(!customElements.get(a(e))){F()}break;case"ds-menu":if(!customElements.get(a(e))){$()}break;case"ds-swatch-picker":if(!customElements.get(a(e))){P()}break;case"ds-switch":if(!customElements.get(a(e))){W()}break;case"ds-tag":if(!customElements.get(a(e))){q()}break;case"ds-text":if(!customElements.get(a(e))){G()}break;case"ds-tooltip":if(!customElements.get(a(e))){K()}break}}))}J();export{U as B,J as d};
|
|
2
|
-
//# sourceMappingURL=p-
|
|
1
|
+
import{p as e,H as t,c as i,h as s,a as r,t as a}from"./index.js";import{C as n,c as o,a as d,b as c,r as l,d as h}from"./p-B0uO3-Dp.js";import{C as p}from"./p-DlsjHRU3.js";import{t as g}from"./p-02k7d7BH.js";import{g as b,i as u}from"./p-BQq26pt9.js";import{b as f,f as v,r as m,a as _,c as w,s as x,d as y,e as k,g as C,h as I,i as A,j as T,v as z,o as L,k as M,l as S,m as j,n as B,p as E,q as O}from"./p-BWSIw8AQ.js";import{d as V}from"./p-CzTJAO2J.js";import{d as D}from"./p-DKg181YU.js";import{d as H}from"./p-CC4X8rpT.js";import{d as R}from"./p-BVsVUnAw.js";import{d as F}from"./p-0XTyQNRG.js";import{d as P}from"./p-529k8euH.js";import{d as $}from"./p-Ch00yccW.js";import{d as K}from"./p-CAARHqjE.js";import{d as W}from"./p-M9pOLcyK.js";import{d as G}from"./p-CTAF7SkL.js";import{d as q}from"./p-BkKdzYZP.js";const Q=()=>`.sc-ds-bar-page-title-h,.sc-ds-bar-page-title:where(.ds-table),.sc-ds-bar-page-title:where(.tooltip-popup),.sc-ds-bar-page-title:where(.ds-radius){--ds-radius-control:var(--dimension-radius-025);--ds-radius-card:var(--dimension-radius-050);--ds-radius-modal:var(--dimension-radius-050);--ds-radius-menu:var(--dimension-radius-075);--ds-radius-tooltip-control:var(--dimension-radius-025);--ds-radius-tooltip-menu:var(--dimension-radius-075);--ds-radius-table:var(--dimension-radius-050)}.ds-control--lg.sc-ds-bar-page-title,.ds-control--lg.sc-ds-bar-page-title-h,.ds-control--md.sc-ds-bar-page-title-h,.ds-control--md.sc-ds-bar-page-title,.ds-control--sm.sc-ds-bar-page-title-h,.ds-control--sm.sc-ds-bar-page-title,.ds-control--xs.sc-ds-bar-page-title-h,.ds-control--xs.sc-ds-bar-page-title{--ds-control-radius:var(--ds-radius-control)}.ds-control--lg.sc-ds-bar-page-title-h,.ds-control--lg.sc-ds-bar-page-title{--ds-control-height:var(--dimension-size-500);--ds-control-icon:var(--dimension-iconography-lg);--ds-control-padding-inline:var(--dimension-space-100);--ds-control-label-inset:var(--dimension-space-050);--ds-control-gap:var(--dimension-space-050)}.ds-control--md.sc-ds-bar-page-title-h,.ds-control--md.sc-ds-bar-page-title{--ds-control-height:var(--dimension-size-400);--ds-control-icon:var(--dimension-iconography-md);--ds-control-padding-inline:var(--dimension-space-075);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:var(--dimension-space-050)}.ds-control--sm.sc-ds-bar-page-title-h,.ds-control--sm.sc-ds-bar-page-title{--ds-control-height:var(--dimension-size-300);--ds-control-icon:var(--dimension-iconography-sm);--ds-control-padding-inline:var(--dimension-space-050);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:var(--dimension-space-025)}.ds-control--xs.sc-ds-bar-page-title-h,.ds-control--xs.sc-ds-bar-page-title{--ds-control-height:var(--dimension-size-200);--ds-control-icon:var(--dimension-iconography-xs);--ds-control-padding-inline:var(--dimension-space-025);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:0}.ds-control-frame.sc-ds-bar-page-title{display:inline-flex;align-items:center;box-sizing:border-box;height:var(--ds-control-height, var(--dimension-size-400));padding-inline:var(--ds-control-padding-inline, var(--dimension-space-075));gap:var(--ds-control-gap, var(--dimension-space-050));border-radius:var(--ds-control-radius, var(--dimension-radius-025))}.ds-control-section-heading.sc-ds-bar-page-title{display:flex;align-items:center;box-sizing:border-box;height:var(--ds-control-height, var(--dimension-size-400));padding-inline:calc( var(--ds-control-padding-inline, var(--dimension-space-075)) + var(--ds-control-label-inset, var(--dimension-space-025)) )}.ds-control-icon-box.sc-ds-bar-page-title{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:var(--ds-control-icon, var(--dimension-iconography-md));height:var(--ds-control-icon, var(--dimension-iconography-md))}.ds-control-label-box.sc-ds-bar-page-title{min-width:0;padding-inline:var(--ds-control-label-inset, var(--dimension-space-025))}.ds-control-label-dot.sc-ds-bar-page-title{position:relative;padding-inline-end:calc( var(--ds-control-label-inset, var(--dimension-space-025)) + var(--ds-control-gap, var(--dimension-space-050)) )}.ds-control-label-dot__badge.sc-ds-bar-page-title{position:absolute;inset-block-start:0;inset-inline-end:0;pointer-events:none}.ds-control--lg.sc-ds-bar-page-title,.ds-control--lg.sc-ds-bar-page-title-h,.ds-control--md.sc-ds-bar-page-title-h,.ds-control--md.sc-ds-bar-page-title,.ds-control--sm.sc-ds-bar-page-title-h,.ds-control--sm.sc-ds-bar-page-title,.ds-control--xs.sc-ds-bar-page-title-h,.ds-control--xs.sc-ds-bar-page-title{--ds-control-radius:var(--ds-radius-control)}.ds-control--lg.sc-ds-bar-page-title-h,.ds-control--lg.sc-ds-bar-page-title{--ds-control-height:var(--dimension-size-500);--ds-control-icon:var(--dimension-iconography-lg);--ds-control-padding-inline:var(--dimension-space-100);--ds-control-label-inset:var(--dimension-space-050);--ds-control-gap:var(--dimension-space-050)}.ds-control--md.sc-ds-bar-page-title-h,.ds-control--md.sc-ds-bar-page-title{--ds-control-height:var(--dimension-size-400);--ds-control-icon:var(--dimension-iconography-md);--ds-control-padding-inline:var(--dimension-space-075);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:var(--dimension-space-050)}.ds-control--sm.sc-ds-bar-page-title-h,.ds-control--sm.sc-ds-bar-page-title{--ds-control-height:var(--dimension-size-300);--ds-control-icon:var(--dimension-iconography-sm);--ds-control-padding-inline:var(--dimension-space-050);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:var(--dimension-space-025)}.ds-control--xs.sc-ds-bar-page-title-h,.ds-control--xs.sc-ds-bar-page-title{--ds-control-height:var(--dimension-size-200);--ds-control-icon:var(--dimension-iconography-xs);--ds-control-padding-inline:var(--dimension-space-025);--ds-control-label-inset:var(--dimension-space-025);--ds-control-gap:0}.ds-chrome-header.sc-ds-bar-page-title{display:flex;align-items:center;box-sizing:border-box;min-width:0;min-block-size:var(--dimension-size-600);padding:var(--dimension-space-100);gap:var(--dimension-space-100)}.ds-chrome-header--wrapping.sc-ds-bar-page-title{flex-wrap:wrap}.ds-chrome-header--bounded.sc-ds-bar-page-title{border-block-end:var(--dimension-stroke-width-012) solid var(--color-border-tertiary)}.ds-chrome-header__leading.sc-ds-bar-page-title,.ds-chrome-header__trailing.sc-ds-bar-page-title{display:flex;align-items:center;flex:0 0 auto;min-width:0}.ds-chrome-header__trailing.sc-ds-bar-page-title{margin-inline-start:auto;gap:var(--dimension-space-100)}.ds-chrome-header__copy.sc-ds-bar-page-title{display:flex;flex:1 1 0;min-width:0;padding:var(--ds-control-padding-inline, var(--dimension-space-075));box-sizing:border-box}.ds-chrome-header__copy--wrapping.sc-ds-bar-page-title{align-items:baseline;flex-wrap:wrap;column-gap:var(--dimension-space-100);row-gap:var(--dimension-space-050)}.ds-chrome-header__copy--stacked.sc-ds-bar-page-title{align-items:stretch;flex-direction:column;gap:var(--dimension-space-050)}.ds-chrome-header__heading.sc-ds-bar-page-title,.ds-chrome-header__description.sc-ds-bar-page-title{width:auto;min-width:0;padding-inline:var(--ds-control-label-inset, var(--dimension-space-025));box-sizing:border-box}.ds-chrome-header__heading.sc-ds-bar-page-title{flex:0 1 auto}.ds-chrome-header__copy--wrapping.sc-ds-bar-page-title .ds-chrome-header__description.sc-ds-bar-page-title{flex:1 1 var(--dimension-card-width-xs)}@media (forced-colors: active){.sc-ds-bar-page-title:root,.sc-ds-bar-page-title-h,.ds-forced-colors-scope.sc-ds-bar-page-title{--ds-forced-color-surface:Canvas;--ds-forced-color-content:CanvasText;--ds-forced-color-control-boundary:ButtonText;--ds-forced-color-selected:Highlight;--ds-forced-color-on-selected:HighlightText;--ds-forced-color-disabled:GrayText}}.sc-ds-bar-page-title-h{--ds-focus-ring-width:var(--dimension-stroke-width-025, 2px);--ds-focus-ring-offset:var(--dimension-space-025, 2px);--ds-focus-ring-color:var(--color-interaction-focus)}.ds-focus-ring.sc-ds-bar-page-title-h,.ds-focus-ring.sc-ds-bar-page-title,.ds-focus-ring-inset.sc-ds-bar-page-title-h,.ds-focus-ring-inset.sc-ds-bar-page-title{outline:none;-webkit-tap-highlight-color:transparent;touch-action:manipulation}.ds-focus-ring.sc-ds-bar-page-title-h:focus-visible,.ds-focus-ring.sc-ds-bar-page-title:focus-visible{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:var(--ds-focus-ring-offset)}.ds-focus-ring.ds-focus-ring--visible.sc-ds-bar-page-title-h,.ds-focus-ring.ds-focus-ring--visible.sc-ds-bar-page-title{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:var(--ds-focus-ring-offset)}.ds-focus-ring-inset.sc-ds-bar-page-title-h:focus-visible,.ds-focus-ring-inset.sc-ds-bar-page-title:focus-visible{outline:none}.ds-focus-ring-inset.sc-ds-bar-page-title-h:focus-visible::after,.ds-focus-ring-inset.sc-ds-bar-page-title:focus-visible::after{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:calc(-1 * var(--ds-focus-ring-width))}.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-bar-page-title-h,.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-bar-page-title{outline:none}.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-bar-page-title-h::after,.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-bar-page-title::after{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:calc(-1 * var(--ds-focus-ring-width))}@media (forced-colors: active){.sc-ds-bar-page-title-h{--ds-focus-ring-color:var(--ds-forced-color-selected)}}@media (forced-colors: active){.sc-ds-bar-page-title:root,.sc-ds-bar-page-title-h,.ds-forced-colors-scope.sc-ds-bar-page-title{--ds-forced-color-surface:Canvas;--ds-forced-color-content:CanvasText;--ds-forced-color-control-boundary:ButtonText;--ds-forced-color-selected:Highlight;--ds-forced-color-on-selected:HighlightText;--ds-forced-color-disabled:GrayText}}.ds-interaction-fill.sc-ds-bar-page-title-h,.ds-interaction-fill.sc-ds-bar-page-title{position:var(--ds-interaction-position, relative);z-index:var(--ds-interaction-z-index, 0);cursor:default;--ds-interaction-hover:var(--color-interaction-hover);--ds-interaction-pressed:var(--color-interaction-pressed);--ds-interaction-active:var(--color-interaction-active-brand);--ds-interaction-border-width:0px;--ds-interaction-border-color:transparent;--ds-interaction-divider-width:0px;--ds-interaction-divider-color:transparent;--ds-interaction-divider-inline-start-width:0px;--ds-interaction-divider-inline-start-color:transparent;--ds-interaction-divider-inline-end-width:0px;--ds-interaction-divider-inline-end-color:transparent}.ds-interaction-fill.sc-ds-bar-page-title-h::before,.ds-interaction-fill.sc-ds-bar-page-title::before,.ds-interaction-fill.sc-ds-bar-page-title-h::after,.ds-interaction-fill.sc-ds-bar-page-title::after{content:'';position:absolute;inset:0;border-radius:inherit;background:transparent;pointer-events:none;cursor:inherit;transition:none}.ds-interaction-fill.sc-ds-bar-page-title-h::before,.ds-interaction-fill.sc-ds-bar-page-title::before{z-index:1}.ds-interaction-fill.sc-ds-bar-page-title-h::after,.ds-interaction-fill.sc-ds-bar-page-title::after{z-index:3;box-shadow:inset 0 calc(-1 * var(--ds-interaction-divider-width)) 0 var(--ds-interaction-divider-color), inset var(--ds-interaction-divider-inline-start-width) 0 0 var(--ds-interaction-divider-inline-start-color), inset calc(-1 * var(--ds-interaction-divider-inline-end-width)) 0 0 var(--ds-interaction-divider-inline-end-color), inset 0 0 0 var(--ds-interaction-border-width) var(--ds-interaction-border-color)}.ds-interaction-fill--bordered.sc-ds-bar-page-title-h,.ds-interaction-fill--bordered.sc-ds-bar-page-title{--ds-interaction-border-width:var(--dimension-stroke-width-012);--ds-interaction-border-color:var(--color-border-secondary)}.ds-interaction-fill--selected.sc-ds-bar-page-title-h::before,.ds-interaction-fill--selected.sc-ds-bar-page-title::before{background:var(--ds-interaction-active)}.ds-interaction-fill--selected.sc-ds-bar-page-title-h,.ds-interaction-fill--selected.sc-ds-bar-page-title{--ds-interaction-dot-ring:var(--ds-interaction-active)}@media (hover: hover) and (pointer: fine){.ds-interaction-fill.sc-ds-bar-page-title-h:hover:not(:disabled)::after,.ds-interaction-fill.sc-ds-bar-page-title:hover:not(:disabled)::after{background:var(--ds-interaction-hover)}}.ds-interaction-fill.sc-ds-bar-page-title-h:active:not(:disabled)::after,.ds-interaction-fill.sc-ds-bar-page-title:active:not(:disabled)::after{background:var(--ds-interaction-pressed)}.ds-interaction-fill--grouped.sc-ds-bar-page-title-h::after,.ds-interaction-fill--grouped.sc-ds-bar-page-title::after,.ds-interaction-fill--grouped.sc-ds-bar-page-title-h:active:not(:disabled)::after,.ds-interaction-fill--grouped.sc-ds-bar-page-title:active:not(:disabled)::after{background:var(--ds-interaction-group-fill, transparent)}@media (hover: hover) and (pointer: fine){.ds-interaction-fill--grouped.sc-ds-bar-page-title-h:hover:not(:disabled)::after,.ds-interaction-fill--grouped.sc-ds-bar-page-title:hover:not(:disabled)::after{background:var(--ds-interaction-group-fill, transparent)}}.ds-interaction-fill--grouped.sc-ds-bar-page-title-h,.ds-interaction-fill--grouped.sc-ds-bar-page-title{--ds-interaction-divider-width:var(--ds-interaction-group-divider-width, 0px);--ds-interaction-divider-color:var(--ds-interaction-group-divider-color, transparent);--ds-interaction-divider-inline-start-width:var( --ds-interaction-group-divider-inline-start-width, 0px );--ds-interaction-divider-inline-start-color:var( --ds-interaction-group-divider-inline-start-color, transparent );--ds-interaction-divider-inline-end-width:var( --ds-interaction-group-divider-inline-end-width, 0px );--ds-interaction-divider-inline-end-color:var( --ds-interaction-group-divider-inline-end-color, transparent )}.ds-interaction-fill.sc-ds-bar-page-title-h>.ds-interaction-fill__content.sc-ds-bar-page-title,.ds-interaction-fill.sc-ds-bar-page-title>.ds-interaction-fill__content.sc-ds-bar-page-title,.ds-interaction-fill__content.sc-ds-bar-page-title{position:relative;z-index:2;cursor:inherit}.ds-interaction-fill--on-faint.sc-ds-bar-page-title-h,.ds-interaction-fill--on-faint.sc-ds-bar-page-title{--ds-interaction-active:var(--color-interaction-active)}.ds-interaction-fill--on-medium.sc-ds-bar-page-title-h,.ds-interaction-fill--on-medium.sc-ds-bar-page-title{--ds-interaction-hover:var(--color-interaction-on-medium-background-hover);--ds-interaction-pressed:var(--color-interaction-on-medium-background-pressed);--ds-interaction-active:var(--color-interaction-on-medium-background-active);--ds-focus-ring-color:var(--color-interaction-on-medium-background-focus)}.ds-interaction-fill--on-bold.sc-ds-bar-page-title-h,.ds-interaction-fill--on-bold.sc-ds-bar-page-title{--ds-interaction-hover:var(--color-interaction-on-bold-background-hover);--ds-interaction-pressed:var(--color-interaction-on-bold-background-pressed);--ds-interaction-active:var(--color-interaction-on-bold-background-active);--ds-focus-ring-color:var(--color-interaction-on-bold-background-focus)}.ds-interaction-fill--on-strong.sc-ds-bar-page-title-h,.ds-interaction-fill--on-strong.sc-ds-bar-page-title{--ds-interaction-hover:var(--color-interaction-on-strong-background-hover);--ds-interaction-pressed:var(--color-interaction-on-strong-background-pressed);--ds-interaction-active:var(--color-interaction-on-strong-background-active);--ds-focus-ring-color:var(--color-interaction-on-strong-background-focus)}.ds-interaction-fill--on-translucent.sc-ds-bar-page-title-h,.ds-interaction-fill--on-translucent.sc-ds-bar-page-title{--ds-interaction-hover:var(--color-translucent-interaction-hover);--ds-interaction-pressed:var(--color-translucent-interaction-pressed);--ds-interaction-active:var(--color-translucent-interaction-active-brand);--ds-focus-ring-color:var(--color-translucent-interaction-focus)}.ds-interaction-fill--on-inverted.sc-ds-bar-page-title-h,.ds-interaction-fill--on-inverted.sc-ds-bar-page-title{--ds-interaction-hover:var(--color-inverted-interaction-hover);--ds-interaction-pressed:var(--color-inverted-interaction-pressed);--ds-interaction-active:var(--color-inverted-interaction-active-brand);--ds-focus-ring-color:var(--color-inverted-interaction-focus)}.ds-interaction-fill--on-media.sc-ds-bar-page-title-h,.ds-interaction-fill--on-media.sc-ds-bar-page-title{--ds-interaction-hover:var(--color-media-interaction-hover);--ds-interaction-pressed:var(--color-media-interaction-pressed);--ds-interaction-active:var(--color-media-interaction-active);--ds-focus-ring-color:var(--color-media-interaction-focus)}.ds-interaction-fill--on-always-dark.sc-ds-bar-page-title-h,.ds-interaction-fill--on-always-dark.sc-ds-bar-page-title{--ds-interaction-hover:var(--color-always-dark-interaction-hover);--ds-interaction-pressed:var(--color-always-dark-interaction-pressed);--ds-interaction-active:var(--color-always-dark-interaction-active-brand);--ds-focus-ring-color:var(--color-always-dark-interaction-focus)}.ds-interaction-fill--on-chrome.sc-ds-bar-page-title-h,.ds-interaction-fill--on-chrome.sc-ds-bar-page-title{--ds-interaction-hover:var(--color-chrome-interaction-hover);--ds-interaction-pressed:var(--color-chrome-interaction-pressed);--ds-interaction-active:var(--color-chrome-interaction-active);--ds-focus-ring-color:var(--color-chrome-interaction-focus)}.ds-interaction-fill--on-navigation.sc-ds-bar-page-title-h,.ds-interaction-fill--on-navigation.sc-ds-bar-page-title{--ds-interaction-hover:var(--color-navigation-interaction-hover);--ds-interaction-pressed:var(--color-navigation-interaction-pressed);--ds-interaction-active:var(--color-navigation-interaction-active);--ds-focus-ring-color:var(--color-navigation-interaction-focus)}.ds-interaction-fill.ds-interaction-fill--surface-open.sc-ds-bar-page-title-h:not(:disabled)::after,.ds-interaction-fill.ds-interaction-fill--surface-open.sc-ds-bar-page-title:not(:disabled)::after{background:var(--ds-interaction-pressed)}@media (forced-colors: active){.ds-interaction-fill.sc-ds-bar-page-title-h::after,.ds-interaction-fill.sc-ds-bar-page-title::after{box-shadow:none;outline:var(--ds-interaction-border-width) solid var(--ds-forced-color-control-boundary);outline-offset:calc(-1 * var(--ds-interaction-border-width))}.ds-interaction-fill--surface-open.sc-ds-bar-page-title-h:not(:disabled):not(:focus-visible):not(:focus-within):not(.ds-focus-ring--visible)::after,.ds-interaction-fill--surface-open.sc-ds-bar-page-title:not(:disabled):not(:focus-visible):not(:focus-within):not(.ds-focus-ring--visible)::after{outline:var(--dimension-stroke-width-025) dashed var(--ds-forced-color-control-boundary);outline-offset:calc(-1 * var(--dimension-stroke-width-025))}.ds-interaction-fill--selected.sc-ds-bar-page-title-h::before,.ds-interaction-fill--selected.sc-ds-bar-page-title::before{background:transparent;outline:var(--dimension-stroke-width-025) solid var(--ds-forced-color-selected);outline-offset:calc(-1 * var(--dimension-stroke-width-025))}}@media (forced-colors: active) and (hover: hover) and (pointer: fine){.ds-interaction-fill.sc-ds-bar-page-title-h:hover:not(:disabled):not(:focus-visible):not(:focus-within):not(.ds-focus-ring--visible)::after,.ds-interaction-fill.sc-ds-bar-page-title:hover:not(:disabled):not(:focus-visible):not(:focus-within):not(.ds-focus-ring--visible)::after{outline-color:var(--ds-forced-color-selected);outline-width:var(--dimension-stroke-width-012)}}@media (forced-colors: active){.sc-ds-bar-page-title:root,.sc-ds-bar-page-title-h,.ds-forced-colors-scope.sc-ds-bar-page-title{--ds-forced-color-surface:Canvas;--ds-forced-color-content:CanvasText;--ds-forced-color-control-boundary:ButtonText;--ds-forced-color-selected:Highlight;--ds-forced-color-on-selected:HighlightText;--ds-forced-color-disabled:GrayText}}.ds-control-inactive.sc-ds-bar-page-title-h,.ds-control-inactive.sc-ds-bar-page-title{opacity:var(--effect-opacity-medium);pointer-events:none;cursor:not-allowed}@media (forced-colors: active){.ds-control-inactive.sc-ds-bar-page-title-h,.ds-control-inactive.sc-ds-bar-page-title{color:var(--ds-forced-color-disabled);opacity:1}}.sc-ds-bar-page-title-h{display:block;min-width:0;box-sizing:border-box;background:var(--color-background-secondary);--_bar-page-title-fg-primary:var(--color-foreground-primary);--_bar-page-title-fg-secondary:var(--color-foreground-secondary);--_bar-page-title-hover:var(--color-interaction-hover);--_bar-page-title-pressed:var(--color-interaction-pressed);--_bar-page-title-focus:var(--color-interaction-focus);--_bar-page-title-border:var(--color-border-tertiary);--ds-focus-ring-color:var(--_bar-page-title-focus)}[data-shell-bar].sc-ds-bar-page-title-h{background:transparent;color:var(--_bar-page-title-fg-primary);--_bar-page-title-fg-primary:var(--color-chrome-foreground-primary);--_bar-page-title-fg-secondary:var(--color-chrome-foreground-secondary);--_bar-page-title-hover:var(--color-chrome-interaction-hover);--_bar-page-title-pressed:var(--color-chrome-interaction-pressed);--_bar-page-title-focus:var(--color-chrome-interaction-focus);--_bar-page-title-border:var(--color-chrome-border-tertiary);--ds-focus-ring-color:var(--_bar-page-title-focus)}ds-shell-app.sc-ds-bar-page-title-h:not([gradient-preset='none']),ds-shell-app:not([gradient-preset='none']) .sc-ds-bar-page-title-h,ds-shell-app.sc-ds-bar-page-title-h:not([gradient-preset='none']) .bar-page-title.sc-ds-bar-page-title,ds-shell-app:not([gradient-preset='none']) .sc-ds-bar-page-title-h .bar-page-title.sc-ds-bar-page-title,ds-shell-app.shell-app--paper-texture.sc-ds-bar-page-title-h,ds-shell-app.shell-app--paper-texture .sc-ds-bar-page-title-h,ds-shell-app.shell-app--paper-texture.sc-ds-bar-page-title-h .bar-page-title.sc-ds-bar-page-title,ds-shell-app.shell-app--paper-texture .sc-ds-bar-page-title-h .bar-page-title.sc-ds-bar-page-title{background:transparent}.bar-page-title.sc-ds-bar-page-title{position:relative;height:var(--dimension-size-600);min-width:0;box-sizing:border-box;background:var(--color-background-secondary);color:var(--_bar-page-title-fg-primary)}[data-shell-bar].sc-ds-bar-page-title-h .bar-page-title.sc-ds-bar-page-title{background:transparent}.bar-page-title.sc-ds-bar-page-title::after{content:'';position:absolute;inset:auto 0 0;height:var(--dimension-stroke-width-012);background:var(--_bar-page-title-border);pointer-events:none}.bar-page-title--divider-hidden.sc-ds-bar-page-title::after{display:none}.bar-page-title__inner.sc-ds-bar-page-title{position:relative;z-index:1;flex:1 1 auto;height:100%;min-width:0;padding:0;gap:0}.bar-page-title__row.sc-ds-bar-page-title{display:flex;align-items:center;justify-content:space-between;gap:var(--dimension-space-100);height:100%;min-width:0}.bar-page-title__title-row.sc-ds-bar-page-title{display:flex;align-items:center;gap:var(--dimension-space-100);min-width:0;min-height:var(--dimension-size-400);flex:1 1 auto}.bar-page-title__identity.sc-ds-bar-page-title{display:flex;flex:0 1 auto;align-items:center;gap:var(--dimension-space-050);min-width:0;height:var(--dimension-size-400)}.bar-page-title__back.sc-ds-bar-page-title,.bar-page-title__section-chevron.sc-ds-bar-page-title{flex:0 0 auto}.bar-page-title__heading.sc-ds-bar-page-title{display:inline-flex;flex:1 1 auto;align-items:center;width:auto;min-width:0;height:var(--dimension-size-400);padding-inline:calc(var(--ds-control-padding-inline) + var(--ds-control-label-inset));box-sizing:border-box;user-select:none}.bar-page-title__divider.sc-ds-bar-page-title{width:var(--dimension-stroke-width-012);height:var(--dimension-size-250);flex:0 0 var(--dimension-stroke-width-012);background:var(--_bar-page-title-border)}.bar-page-title__section-selector.sc-ds-bar-page-title{display:flex;flex:0 1 auto;min-width:0;max-width:var(--dimension-panel-width-sm)}.bar-page-title__section-trigger.sc-ds-bar-page-title{--ds-control-radius:var(--dimension-radius-half);display:inline-flex;align-items:center;justify-content:center;gap:var(--ds-control-gap);height:var(--ds-control-height);min-width:0;max-width:100%;padding-inline:var(--ds-control-padding-inline);border:none;border-radius:var(--ds-control-radius);box-sizing:border-box;background:transparent;color:var(--color-foreground-secondary);cursor:default;font-family:inherit;user-select:none}[data-shell-bar].sc-ds-bar-page-title-h .bar-page-title__section-trigger.sc-ds-bar-page-title{color:var(--_bar-page-title-fg-primary)}.bar-page-title__section-label.sc-ds-bar-page-title{min-width:0;padding-inline:var(--ds-control-label-inset)}.bar-page-title__actions.sc-ds-bar-page-title{display:flex;align-items:center;gap:var(--dimension-space-100);flex:0 0 auto}.bar-page-title__probe.sc-ds-bar-page-title{position:absolute;left:0;top:0;visibility:hidden;pointer-events:none;overflow:visible;width:max-content;max-width:none;z-index:-1}.bar-page-title__probe-row.sc-ds-bar-page-title{display:flex;align-items:center;gap:var(--dimension-space-100);width:max-content;max-width:none}.bar-page-title__probe.sc-ds-bar-page-title .bar-page-title__identity.sc-ds-bar-page-title,.bar-page-title__probe.sc-ds-bar-page-title .bar-page-title__heading.sc-ds-bar-page-title{flex:0 0 auto;width:max-content;min-width:0;max-width:none}.bar-page-title__tabs-pending.sc-ds-bar-page-title{flex:0 0 auto;width:var(--dimension-size-400);height:var(--ds-control-height);visibility:hidden;pointer-events:none}.bar-page-title__tab-list.sc-ds-bar-page-title{display:flex;align-items:center;gap:var(--dimension-space-050);position:relative;width:max-content;flex:0 0 auto;min-width:0}.bar-page-title__tab.sc-ds-bar-page-title{display:flex;align-items:center;justify-content:center;gap:var(--ds-control-gap);height:var(--ds-control-height);min-width:var(--ds-control-height);padding:0 var(--ds-control-padding-inline);box-sizing:border-box;border:none;border-radius:var(--ds-control-radius);background-color:transparent;color:var(--_bar-page-title-fg-secondary);cursor:default;position:relative;flex-shrink:0;-webkit-user-select:none;user-select:none;transition:color var(--effect-motion-short-2)}.bar-page-title__tab.sc-ds-bar-page-title::after{content:'';position:absolute;inset:0;border-radius:var(--ds-control-radius);background:transparent;pointer-events:none;cursor:inherit}@media (hover: hover) and (pointer: fine){.bar-page-title__tab.sc-ds-bar-page-title:hover::after{background:var(--_bar-page-title-hover)}}.bar-page-title__tab.sc-ds-bar-page-title:active::after{background:var(--_bar-page-title-pressed)}.bar-page-title__tab--selected.sc-ds-bar-page-title{color:var(--_bar-page-title-fg-primary)}.bar-page-title__tab-label.sc-ds-bar-page-title{display:inline-flex;align-items:center;white-space:nowrap}.bar-page-title__tab-divider.sc-ds-bar-page-title{display:flex;align-items:center;justify-content:center;box-sizing:border-box;width:var(--dimension-space-100);height:var(--ds-control-height);padding-block:var(--ds-control-padding-inline);flex-shrink:0;pointer-events:none}.bar-page-title__tab-divider-line.sc-ds-bar-page-title{width:var(--dimension-stroke-width-012);align-self:stretch;background-color:var(--_bar-page-title-border)}`;let U=0;const J=e(class e extends t{constructor(e){super();if(e!==false){this.__registerHost()}this.dsBack=i(this,"dsBack",7);this.dsSectionChange=i(this,"dsSectionChange",7);this.dsAction=i(this,"dsAction",7);this.showBack=false;this.backAriaLabel="Back";this.sections=[];this.value="";this.sectionsAriaLabel="Change page section";this.primaryAction=null;this.actions=[];this.actionsAriaLabel="More page actions";this.showDivider=true;this.sectionMenuOpen=false;this.openActionMenuId="";this.surfaceActionMenuId="";this.sectionSurfaceOpen=false;this.sectionMenuInitialFocusVisible=false;this.actionMenuInitialFocusVisible=false;this.sectionsCollapsed=false;this.layoutCommitted=false;this.focusedTabId="";this.instanceId=U++;this.sectionMenuTriggerId=`bar-page-title-section-trigger-${this.instanceId}`;this.sectionMenuId=`bar-page-title-section-menu-${this.instanceId}`;this.actionMenuTriggerId=`bar-page-title-action-trigger-${this.instanceId}`;this.actionMenuId=`bar-page-title-action-menu-${this.instanceId}`;this.sectionTriggerEl=null;this.actionTriggerEl=null;this.actionTriggerEls=new Map;this.chromeEl=null;this.rowEl=null;this.probeRowEl=null;this.visibleTabListEl=null;this.resizeObserver=null;this.hasLoaded=false;this.connectionTasks=new p((()=>this.el.isConnected));this.intrinsicWidthRetryCount=0;this.tabLayoutPendingFrames=0;this.panelNavTransition=new n;this.panelToolsTransition=new n;this.overflowCoalescer=o((()=>{this.updateSectionsCollapsed()}));this.chromeTransitionShell=null;this.onChromeTransitionStart=e=>{const t=l(e);if(t==="panel-nav"){this.panelNavTransition.enter();return}if(t==="panel-tools"){const t=h(e)??"opening";if(t==="closing"){this.panelToolsTransition.enter()}}};this.onChromeTransitionEnd=e=>{const t=l(e);if(t==="panel-nav"){this.panelNavTransition.exit();if(!this.panelNavTransition.isActive){this.scheduleOverflowCheck()}return}if(t==="panel-tools"){this.panelToolsTransition.exit();this.scheduleOverflowCheck()}};this.toggleSectionMenu=e=>{this.sectionMenuInitialFocusVisible=e.detail===0;this.openActionMenuId="";this.sectionMenuOpen=!this.sectionMenuOpen;if(this.sectionMenuOpen)this.sectionSurfaceOpen=true};this.closeSectionMenu=()=>{this.sectionMenuOpen=false};this.handleSectionSelect=e=>{const t=String(e.detail?.value??"");this.closeSectionMenu();this.selectSection(t);this.connectionTasks.frame((()=>this.sectionTriggerEl?.focus()))};this.toggleActionMenu=(e,t)=>{this.actionMenuInitialFocusVisible=t.detail===0;this.sectionMenuOpen=false;this.openActionMenuId=this.openActionMenuId===e?"":e;if(this.openActionMenuId)this.surfaceActionMenuId=this.openActionMenuId};this.finishActionMenuClose=e=>{const t=this.surfaceActionMenuId;const i=t==="__overflow"?this.actionMenuId:f("bar-page-title",this.instanceId,this.resolvedActionItems,t);if(this.openActionMenuId!==t&&e.target.id===i){this.surfaceActionMenuId=""}};this.closeActionMenu=()=>{this.openActionMenuId=""};this.handleActionSelect=e=>{const t=String(e.detail?.value??"");const i=v(this.resolvedActionItems,t);if(!i||i.isInactive||"isLoading"in i&&i.isLoading)return;const s=this.openActionMenuId;this.closeActionMenu();this.dsAction.emit(t);this.connectionTasks.frame((()=>{void m({menuId:s,overflowTrigger:this.actionTriggerEl,actionTriggers:this.actionTriggerEls,resolvedActionItems:this.resolvedActionItems})}))}}componentWillLoad(){this.reportActionIdIssues();this.syncFocusedTabId(this.effectiveValue,this.selectableTabs)}connectedCallback(){if(this.hasLoaded)this.connectResources()}componentDidLoad(){this.hasLoaded=true;this.connectResources()}connectResources(){if(!this.el.isConnected)return;this.intrinsicWidthRetryCount=0;this.tabLayoutPendingFrames=0;this.setupOverflowObserver();this.bindChromeTransitionListeners();this.scheduleOverflowCheck()}componentDidRender(){if(this.chromeOverflowPaused())return;this.scheduleOverflowCheck()}disconnectedCallback(){this.connectionTasks.cancel();this.resizeObserver?.disconnect();this.resizeObserver=null;this.overflowCoalescer.cancel();this.unbindChromeTransitionListeners();this.panelNavTransition.exit();this.panelToolsTransition.exit()}handleSectionsChange(e,t){if(!this.hasSectionSelector){this.closeSectionMenu();this.sectionSurfaceOpen=false;this.sectionsCollapsed=false;this.layoutCommitted=true;this.intrinsicWidthRetryCount=0;this.tabLayoutPendingFrames=0;return}if(_(e)===_(t)){this.syncFocusedTabId(this.effectiveValue,this.selectableTabs);return}this.resetSectionLayout();this.syncFocusedTabId(this.effectiveValue,this.selectableTabs);this.scheduleOverflowCheck()}handleValueChange(){this.syncFocusedTabId(this.effectiveValue,this.selectableTabs);this.scheduleOverflowCheck()}handleLayoutInputsChange(){this.reportActionIdIssues();if(!this.availableActionMenuIds.has(this.openActionMenuId))this.closeActionMenu();if(!this.availableActionMenuIds.has(this.surfaceActionMenuId))this.surfaceActionMenuId="";this.scheduleOverflowCheck()}reportActionIdIssues(){for(const e of w(this.resolvedActionItems)){console.warn(`[ds-bar-page-title] ${e}`)}}get dividerVisible(){return this.showCompactDivider??this.showDivider}get usesChromeTokens(){return this.el.hasAttribute("data-shell-bar")}get shellBarButtonBackground(){return this.usesChromeTokens?"chrome":undefined}get selectableSections(){return x(this.sections)}get hasSectionSelector(){return this.selectableSections.length>1}get sectionTabs(){return y(this.sections)}get selectableTabs(){return b(this.sectionTabs)}get effectiveValue(){return k(this.sections,this.value)}get selectedSectionLabel(){return C(this.sections,this.value)}get sectionTriggerAriaLabel(){return I(this.sectionsAriaLabel,this.selectedSectionLabel)}get sectionMenuSections(){return A(this.sections,this.effectiveValue)}get resolvedActionItems(){return T(this.actionItems,this.primaryAction,this.actions)}get visibleActions(){return z(this.resolvedActionItems,"compact")}get actionMenuSections(){return L(this.resolvedActionItems,"compact")}get showActionMenuTrigger(){return this.actionMenuSections.length>0}get availableActionMenuIds(){return M(this.visibleActions,this.showActionMenuTrigger)}get showSectionTabs(){return this.hasSectionSelector&&this.layoutCommitted&&!this.sectionsCollapsed}get showSectionButton(){return this.hasSectionSelector&&this.layoutCommitted&&this.sectionsCollapsed}resetSectionLayout(){this.layoutCommitted=false;this.sectionsCollapsed=false;this.sectionMenuOpen=false;this.sectionMenuInitialFocusVisible=false;this.intrinsicWidthRetryCount=0;this.tabLayoutPendingFrames=0}bindChromeTransitionListeners(){this.unbindChromeTransitionListeners();const e=this.el.closest("ds-shell-app");if(!e)return;this.chromeTransitionShell=e;e.addEventListener(d,this.onChromeTransitionStart);e.addEventListener(c,this.onChromeTransitionEnd)}unbindChromeTransitionListeners(){if(!this.chromeTransitionShell)return;this.chromeTransitionShell.removeEventListener(d,this.onChromeTransitionStart);this.chromeTransitionShell.removeEventListener(c,this.onChromeTransitionEnd);this.chromeTransitionShell=null}chromeOverflowPaused(){return this.panelNavTransition.isActive||this.panelToolsTransition.isActive}setupOverflowObserver(){if(typeof ResizeObserver==="undefined"||!this.chromeEl)return;this.resizeObserver?.disconnect();this.resizeObserver=new ResizeObserver((()=>{if(this.chromeOverflowPaused())return;this.scheduleOverflowCheck()}));this.resizeObserver.observe(this.chromeEl)}scheduleOverflowCheck(){if(!this.el.isConnected||this.chromeOverflowPaused())return;this.overflowCoalescer.schedule()}scheduleIntrinsicWidthRetry(){if(this.intrinsicWidthRetryCount>=e.INTRINSIC_WIDTH_RETRY_MAX)return;this.intrinsicWidthRetryCount++;this.connectionTasks.frame((()=>this.scheduleOverflowCheck()))}forceTabLayoutCommit(e){this.intrinsicWidthRetryCount=0;this.tabLayoutPendingFrames=0;const t=this.sectionsCollapsed!==e;if(t)this.sectionsCollapsed=e;if(!e&&t){this.closeSectionMenu();this.sectionSurfaceOpen=false}this.layoutCommitted=true}getAvailableWidth(){if(!this.rowEl)return 0;const e=this.rowEl.clientWidth;const t=this.rowEl.querySelector(".bar-page-title__actions");const i=t?.getBoundingClientRect().width??0;const s=getComputedStyle(this.rowEl);const r=parseFloat(s.columnGap||s.gap)||0;return Math.max(0,e-i-(i>0?r:0))}updateSectionsCollapsed(){if(!this.el.isConnected||this.chromeOverflowPaused())return;if(!this.hasSectionSelector){if(this.sectionsCollapsed)this.sectionsCollapsed=false;this.intrinsicWidthRetryCount=0;this.tabLayoutPendingFrames=0;this.layoutCommitted=true;return}const t=this.probeRowEl?.scrollWidth??0;const i=this.getAvailableWidth();if(!this.probeRowEl||!this.rowEl||t===0){if(this.layoutCommitted){this.scheduleIntrinsicWidthRetry();return}this.tabLayoutPendingFrames+=1;if(this.intrinsicWidthRetryCount>=e.INTRINSIC_WIDTH_RETRY_MAX||this.tabLayoutPendingFrames>=e.TAB_LAYOUT_COMMIT_MAX_FRAMES){this.forceTabLayoutCommit(false)}else{this.scheduleIntrinsicWidthRetry()}return}this.intrinsicWidthRetryCount=0;this.tabLayoutPendingFrames=0;const s=g(t,i,this.sectionsCollapsed,e.OVERFLOW_HYSTERESIS_PX);this.forceTabLayoutCommit(s)}syncFocusedTabId(e,t){if(t.some((t=>t.id===e&&!t.isInactive))){this.focusedTabId=e;return}const i=t.find((e=>!e.isInactive));this.focusedTabId=i?.id??""}selectSection(e){const t=this.selectableSections.find((t=>t.id===e));if(!t||t.isInactive)return;this.dsSectionChange.emit(e)}focusVisibleTab(e){this.focusedTabId=e;const t=this.visibleTabListEl?.querySelector(`[data-tab-id="${e}"]`);t?.focus({preventScroll:true})}findEnabledTab(e,t){const i=this.selectableTabs;for(let s=e+t;s>=0&&s<i.length;s+=t){if(!i[s]?.isInactive)return s}return null}handleTabKeyDown(e){const t=this.selectableTabs;if(!t.length)return;const i=e.target?.getAttribute("data-tab-id");const s=i??this.focusedTabId;if(e.key==="Enter"||e.key===" "){const i=t.find((e=>e.id===s));if(!i||i.isInactive)return;e.preventDefault();this.selectSection(i.id);return}const r=t.findIndex((e=>e.id===s));if(r<0)return;let a;if(e.key==="ArrowRight"){a=this.findEnabledTab(r,1)}else if(e.key==="ArrowLeft"){a=this.findEnabledTab(r,-1)}else if(e.key==="Home"){a=t.findIndex((e=>!e.isInactive))}else if(e.key==="End"){const e=[...t].reverse().findIndex((e=>!e.isInactive));a=e<0?null:t.length-1-e}else{return}if(a===null||a<0||a===r)return;e.preventDefault();this.focusVisibleTab(t[a].id)}chromeActionOptions(){return{classPrefix:"bar-page-title",compact:true,visibleActions:this.visibleActions,showOverflowTrigger:this.showActionMenuTrigger,actionItems:this.actionItems,primaryAction:this.primaryAction,resolvedActionItems:this.resolvedActionItems,instanceId:this.instanceId,openActionMenuId:this.openActionMenuId,surfaceActionMenuId:this.surfaceActionMenuId,actionsAriaLabel:this.actionsAriaLabel,actionMenuTriggerId:this.actionMenuTriggerId,actionMenuId:this.actionMenuId,actionTriggers:this.actionTriggerEls,buttonBackground:this.shellBarButtonBackground,setOverflowTriggerEl:e=>{this.actionTriggerEl=e},toggleActionMenu:this.toggleActionMenu,emitAction:e=>this.dsAction.emit(e)}}renderHeading(e){return s("ds-text",{class:"bar-page-title__heading ds-control--md",variant:"text-title-small",emphasis:true,color:"inherit",as:e?"span":"h1",wrap:e?"nowrap":undefined,lineTruncation:e?"none":1},this.heading)}renderTabList(e){return s("div",{role:e?undefined:"tablist",class:"bar-page-title__tab-list","aria-label":e?undefined:this.sectionsAriaLabel,ref:t=>{if(!e)this.visibleTabListEl=t??null},onKeyDown:e?undefined:e=>this.handleTabKeyDown(e)},this.sectionTabs.map(((t,i)=>{if(u(t)){return s("div",{class:"bar-page-title__tab-divider",key:`divider-${i}`,"aria-hidden":"true"},s("div",{class:"bar-page-title__tab-divider-line"}))}const r=t.id===this.effectiveValue;return s("button",{key:t.id,type:"button",role:e?undefined:"tab","data-tab-id":t.id,class:{"bar-page-title__tab":true,"bar-page-title__tab--selected":r,"ds-control--md":true,"ds-focus-ring-inset":true,"ds-control-inactive":!!t.isInactive,"ds-interaction-fill--on-chrome":this.usesChromeTokens},"aria-selected":r?"true":"false","aria-disabled":t.isInactive?"true":undefined,disabled:t.isInactive,tabIndex:!e&&t.id===this.focusedTabId?0:-1,onClick:()=>!e&&this.selectSection(t.id),onFocus:()=>{if(!e)this.focusedTabId=t.id}},s("ds-text",{class:"bar-page-title__tab-label ds-control-label-box",as:"span",variant:"text-body-medium",emphasis:r,color:"inherit"},t.label))})))}renderIdentity(e){return s("div",{class:"bar-page-title__identity"},S({classPrefix:"bar-page-title",showBack:this.showBack,backAriaLabel:this.backAriaLabel,background:this.shellBarButtonBackground,onBack:e=>this.dsBack.emit(e)}),this.renderHeading(e))}renderSectionRegion(){if(!this.hasSectionSelector)return null;if(!this.layoutCommitted){return[s("div",{class:"bar-page-title__divider","aria-hidden":"true"}),s("div",{class:"bar-page-title__tabs-pending","aria-hidden":"true"})]}if(this.showSectionTabs){return[s("div",{class:"bar-page-title__divider","aria-hidden":"true"}),this.renderTabList(false)]}return[s("div",{class:"bar-page-title__divider","aria-hidden":"true"}),j({classPrefix:"bar-page-title",triggerId:this.sectionMenuTriggerId,menuId:this.sectionMenuId,open:this.sectionMenuOpen,surfaceOpen:this.sectionSurfaceOpen,ariaLabel:this.sectionTriggerAriaLabel,selectedLabel:this.selectedSectionLabel,background:this.shellBarButtonBackground,labelColor:this.usesChromeTokens?"inherit":undefined,setTriggerEl:e=>{this.sectionTriggerEl=e},onToggle:this.toggleSectionMenu})]}render(){return s(r,{key:"ecad1bc5e6d0f128a457f87352d643a7f0a55e85"},s("div",{key:"f58348b5586ea25e6ab463834f51fb215fcb2d2a",class:{"bar-page-title":true,"bar-page-title--divider-hidden":!this.dividerVisible,"ds-chrome-header":true},ref:e=>{this.chromeEl=e??null;if(e&&!this.resizeObserver)this.setupOverflowObserver()}},this.hasSectionSelector?s("div",{class:"bar-page-title__probe","aria-hidden":"true",inert:true},s("div",{class:"bar-page-title__probe-row",ref:e=>{const t=e??null;if(t===this.probeRowEl)return;this.probeRowEl=t;if(t){this.intrinsicWidthRetryCount=0;this.tabLayoutPendingFrames=0;this.scheduleOverflowCheck()}}},this.renderIdentity(true),s("div",{class:"bar-page-title__divider"}),this.renderTabList(true))):null,s("div",{key:"97ab44234f67d75cadb7a0f4df68ae9e69698d87",class:"bar-page-title__inner"},s("div",{key:"4dca98ada9df5fe76b8fc70ae1410cf202ea0bfe",class:"bar-page-title__row",ref:e=>{this.rowEl=e??null}},s("div",{key:"e6713cf5184afb3c3c0926b2d5c0c85e78cffe8f",class:"bar-page-title__title-row"},this.renderIdentity(false),this.renderSectionRegion()),O(this.chromeActionOptions())))),this.showSectionButton?s("ds-menu",{id:this.sectionMenuId,class:"bar-page-title__section-menu",anchorId:this.sectionMenuTriggerId,menuLabel:this.sectionsAriaLabel,open:this.sectionMenuOpen,initialFocusVisible:this.sectionMenuInitialFocusVisible,sections:this.sectionMenuSections,onDsClose:this.closeSectionMenu,onDsAfterClose:()=>{if(!this.sectionMenuOpen)this.sectionSurfaceOpen=false},onDsSelect:this.handleSectionSelect}):null,E({classPrefix:"bar-page-title",visibleActions:this.visibleActions,instanceId:this.instanceId,resolvedActionItems:this.resolvedActionItems,openActionMenuId:this.openActionMenuId,actionMenuInitialFocusVisible:this.actionMenuInitialFocusVisible,overflowTrigger:this.actionTriggerEl,actionTriggers:this.actionTriggerEls,closeActionMenu:this.closeActionMenu,finishActionMenuClose:this.finishActionMenuClose,handleActionSelect:this.handleActionSelect}),B({classPrefix:"bar-page-title",showOverflowTrigger:this.showActionMenuTrigger,actionMenuId:this.actionMenuId,actionMenuTriggerId:this.actionMenuTriggerId,actionsAriaLabel:this.actionsAriaLabel,open:this.openActionMenuId==="__overflow",actionMenuInitialFocusVisible:this.actionMenuInitialFocusVisible,actionMenuSections:this.actionMenuSections,closeActionMenu:this.closeActionMenu,finishActionMenuClose:this.finishActionMenuClose,handleActionSelect:this.handleActionSelect}))}get el(){return this}static get watchers(){return{sections:[{handleSectionsChange:0}],value:[{handleValueChange:0}],heading:[{handleLayoutInputsChange:0}],showBack:[{handleLayoutInputsChange:0}],primaryAction:[{handleLayoutInputsChange:0}],actions:[{handleLayoutInputsChange:0}],actionItems:[{handleLayoutInputsChange:0}]}}static get style(){return Q()}},[2,"ds-bar-page-title",{heading:[1],showBack:[4,"show-back"],backAriaLabel:[1,"back-aria-label"],sections:[16],value:[1],sectionsAriaLabel:[1,"sections-aria-label"],primaryAction:[16],actions:[16],actionItems:[16],actionsAriaLabel:[1,"actions-aria-label"],showDivider:[4,"show-divider"],showCompactDivider:[4,"show-compact-divider"],sectionMenuOpen:[32],openActionMenuId:[32],surfaceActionMenuId:[32],sectionSurfaceOpen:[32],sectionMenuInitialFocusVisible:[32],actionMenuInitialFocusVisible:[32],sectionsCollapsed:[32],layoutCommitted:[32],focusedTabId:[32]},undefined,{sections:[{handleSectionsChange:0}],value:[{handleValueChange:0}],heading:[{handleLayoutInputsChange:0}],showBack:[{handleLayoutInputsChange:0}],primaryAction:[{handleLayoutInputsChange:0}],actions:[{handleLayoutInputsChange:0}],actionItems:[{handleLayoutInputsChange:0}]}]);J.INTRINSIC_WIDTH_RETRY_MAX=3;J.TAB_LAYOUT_COMMIT_MAX_FRAMES=16;J.OVERFLOW_HYSTERESIS_PX=8;function X(){if(typeof customElements==="undefined"){return}const e=["ds-bar-page-title","ds-badge","ds-button-filled","ds-button-unfilled","ds-icon","ds-loader","ds-menu","ds-swatch-picker","ds-switch","ds-tag","ds-text","ds-tooltip"];e.forEach((e=>{switch(e){case"ds-bar-page-title":if(!customElements.get(a(e))){customElements.define(a(e),J)}break;case"ds-badge":if(!customElements.get(a(e))){V()}break;case"ds-button-filled":if(!customElements.get(a(e))){D()}break;case"ds-button-unfilled":if(!customElements.get(a(e))){H()}break;case"ds-icon":if(!customElements.get(a(e))){R()}break;case"ds-loader":if(!customElements.get(a(e))){F()}break;case"ds-menu":if(!customElements.get(a(e))){P()}break;case"ds-swatch-picker":if(!customElements.get(a(e))){$()}break;case"ds-switch":if(!customElements.get(a(e))){K()}break;case"ds-tag":if(!customElements.get(a(e))){W()}break;case"ds-text":if(!customElements.get(a(e))){G()}break;case"ds-tooltip":if(!customElements.get(a(e))){q()}break}}))}X();export{J as B,X as d};
|
|
2
|
+
//# sourceMappingURL=p-BrJebF5t.js.map
|