@ds-mo/ui 12.3.0 → 12.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/dist/.build-stamp +1 -1
  2. package/dist/agent-patterns.json +89 -11
  3. package/dist/agent.json +543 -9
  4. package/dist/angular/ds-shell-app.d.ts +13 -2
  5. package/dist/angular/ds-shell-app.js +9 -5
  6. package/dist/angular/ds-shell-mobile-bar.d.ts +18 -0
  7. package/dist/angular/ds-shell-mobile-bar.js +46 -0
  8. package/dist/angular/ds-shell-mobile-nav.d.ts +23 -0
  9. package/dist/angular/ds-shell-mobile-nav.js +51 -0
  10. package/dist/angular/ds-shell-mobile-section-nav.d.ts +18 -0
  11. package/dist/angular/ds-shell-mobile-section-nav.js +42 -0
  12. package/dist/angular/ds-shell-tools.d.ts +42 -0
  13. package/dist/angular/ds-shell-tools.js +52 -0
  14. package/dist/angular/index.d.ts +1 -1
  15. package/dist/angular/index.js +4 -0
  16. package/dist/angular/proxies.d.ts +4 -0
  17. package/dist/angular/proxies.js +4 -0
  18. package/dist/components/ds-agent-response.js +1 -1
  19. package/dist/components/ds-bar-nav.js +1 -1
  20. package/dist/components/ds-bar-title.js +1 -1
  21. package/dist/components/ds-bar-workflow.js +1 -1
  22. package/dist/components/ds-chart-donut.js +1 -1
  23. package/dist/components/ds-code-block.js +1 -1
  24. package/dist/components/ds-conversation-list-item.js +1 -1
  25. package/dist/components/ds-conversation-list-item.js.map +1 -1
  26. package/dist/components/ds-markdown.js +1 -1
  27. package/dist/components/ds-menu.js +1 -1
  28. package/dist/components/ds-message-composer.js +1 -1
  29. package/dist/components/ds-message-scroller.js +1 -1
  30. package/dist/components/ds-modal.js +1 -1
  31. package/dist/components/ds-modal.js.map +1 -1
  32. package/dist/components/ds-panel-nav.js +1 -1
  33. package/dist/components/ds-panel-nav.js.map +1 -1
  34. package/dist/components/ds-panel-tool-header.js +1 -1
  35. package/dist/components/ds-panel-tool-search.js +1 -1
  36. package/dist/components/ds-panel-tools.js +1 -1
  37. package/dist/components/ds-panel-tools.js.map +1 -1
  38. package/dist/components/ds-select-multi.js +1 -1
  39. package/dist/components/ds-select-multi.js.map +1 -1
  40. package/dist/components/ds-select.js +1 -1
  41. package/dist/components/ds-select.js.map +1 -1
  42. package/dist/components/ds-shell-app.js +1 -1
  43. package/dist/components/ds-shell-app.js.map +1 -1
  44. package/dist/components/ds-shell-gradient-picker.js +1 -1
  45. package/dist/components/ds-shell-gradient-picker.js.map +1 -1
  46. package/dist/components/ds-shell-gradient-swatch.js +1 -1
  47. package/dist/components/ds-shell-mobile-bar.d.ts +11 -0
  48. package/dist/components/ds-shell-mobile-bar.js +2 -0
  49. package/dist/components/ds-shell-mobile-bar.js.map +1 -0
  50. package/dist/components/ds-shell-mobile-nav.d.ts +11 -0
  51. package/dist/components/ds-shell-mobile-nav.js +2 -0
  52. package/dist/components/ds-shell-mobile-nav.js.map +1 -0
  53. package/dist/components/ds-shell-mobile-section-nav.d.ts +11 -0
  54. package/dist/components/ds-shell-mobile-section-nav.js +2 -0
  55. package/dist/components/ds-shell-mobile-section-nav.js.map +1 -0
  56. package/dist/components/ds-shell-page.js +1 -1
  57. package/dist/components/ds-shell-page.js.map +1 -1
  58. package/dist/components/ds-shell-tools.d.ts +11 -0
  59. package/dist/components/ds-shell-tools.js +2 -0
  60. package/dist/components/ds-shell-tools.js.map +1 -0
  61. package/dist/components/ds-swatch-picker.js +1 -1
  62. package/dist/components/ds-tab-group.js +1 -1
  63. package/dist/components/ds-tab-group.js.map +1 -1
  64. package/dist/components/ds-toast.js +1 -1
  65. package/dist/components/ds-toast.js.map +1 -1
  66. package/dist/components/ds-tooltip-data-viz.js +1 -1
  67. package/dist/components/ds-tooltip.js +1 -1
  68. package/dist/components/ds-typing-indicator.js +1 -1
  69. package/dist/components/p-B6Vuayt6.js +2 -0
  70. package/dist/components/p-B6Vuayt6.js.map +1 -0
  71. package/dist/components/p-BPS9VExm.js +2 -0
  72. package/dist/components/{p-D3DYxbC5.js.map → p-BPS9VExm.js.map} +1 -1
  73. package/dist/components/{p-Bi_bxbih.js → p-Biz6xo-z.js} +2 -2
  74. package/dist/components/p-BrusnEYP.js +2 -0
  75. package/dist/components/p-BrusnEYP.js.map +1 -0
  76. package/dist/components/p-C_0Q8Cnp.js +2 -0
  77. package/dist/components/{p-Dg3xLna0.js.map → p-C_0Q8Cnp.js.map} +1 -1
  78. package/dist/components/p-CgHTNfC1.js +2 -0
  79. package/dist/components/p-CgHTNfC1.js.map +1 -0
  80. package/dist/components/p-Co8hD3P-.js +2 -0
  81. package/dist/components/{p-DC7yOUQx.js.map → p-Co8hD3P-.js.map} +1 -1
  82. package/dist/components/{p-Cuw2Lo2g.js → p-CtD24EyI.js} +2 -2
  83. package/dist/components/{p-C0NPJ0h2.js → p-DXnFhmZF.js} +2 -2
  84. package/dist/components/p-NUNsefU1.js +2 -0
  85. package/dist/components/{p-CWlh7HAg.js.map → p-NUNsefU1.js.map} +1 -1
  86. package/dist/components/p-PZ6R_nGI.js +2 -0
  87. package/dist/components/p-PZ6R_nGI.js.map +1 -0
  88. package/dist/components/{p-J6xK6Ihq.js → p-g40DTeV8.js} +2 -2
  89. package/dist/components/p-yhj1lIPx.js +2 -0
  90. package/dist/components/p-yhj1lIPx.js.map +1 -0
  91. package/dist/docs/components.json +2143 -115
  92. package/dist/lib/components/BarNav/bar-nav-types.d.ts +2 -0
  93. package/dist/lib/components/PanelNav/panel-nav-types.d.ts +29 -0
  94. package/dist/lib/components/PanelTools/panel-tools-types.d.ts +40 -0
  95. package/dist/lib/components/TabGroup/tab-item-utils.d.ts +31 -0
  96. package/dist/lib/shell/index.d.ts +5 -0
  97. package/dist/lib/shell/index.js +36 -0
  98. package/dist/lib/shell/index.js.map +3 -3
  99. package/dist/lib/shell/shell-responsive.d.ts +13 -0
  100. package/dist/mcp-data/registry/conversation-list-item.json +1 -1
  101. package/dist/mcp-data/registry/modal.json +1 -1
  102. package/dist/mcp-data/registry/registry.json +554 -8
  103. package/dist/mcp-data/registry/shell-app.json +71 -11
  104. package/dist/mcp-data/registry/shell-mobile-bar.json +314 -0
  105. package/dist/mcp-data/registry/shell-mobile-nav.json +348 -0
  106. package/dist/mcp-data/registry/shell-mobile-section-nav.json +267 -0
  107. package/dist/mcp-data/registry/shell-page.json +1 -1
  108. package/dist/mcp-data/registry/shell-tools.json +450 -0
  109. package/dist/react/components.d.ts +4 -0
  110. package/dist/react/components.js +4 -0
  111. package/dist/react/ds-shell-app.d.ts +7 -2
  112. package/dist/react/ds-shell-app.js +1 -1
  113. package/dist/react/ds-shell-mobile-bar.d.ts +13 -0
  114. package/dist/react/ds-shell-mobile-bar.js +15 -0
  115. package/dist/react/ds-shell-mobile-nav.d.ts +15 -0
  116. package/dist/react/ds-shell-mobile-nav.js +17 -0
  117. package/dist/react/ds-shell-mobile-section-nav.d.ts +12 -0
  118. package/dist/react/ds-shell-mobile-section-nav.js +12 -0
  119. package/dist/react/ds-shell-tools.d.ts +25 -0
  120. package/dist/react/ds-shell-tools.js +17 -0
  121. package/dist/types/components/ShellApp/ShellApp.d.ts +16 -0
  122. package/dist/types/components/ShellMobileBar/ShellMobileBar.d.ts +25 -0
  123. package/dist/types/components/ShellMobileBar/index.d.ts +4 -0
  124. package/dist/types/components/ShellMobileBar/shell-mobile-bar-types.d.ts +5 -0
  125. package/dist/types/components/ShellMobileNav/ShellMobileNav.d.ts +32 -0
  126. package/dist/types/components/ShellMobileNav/index.d.ts +2 -0
  127. package/dist/types/components/ShellMobileNav/shell-mobile-nav-types.d.ts +6 -0
  128. package/dist/types/components/ShellMobileSectionNav/ShellMobileSectionNav.d.ts +30 -0
  129. package/dist/types/components/ShellMobileSectionNav/index.d.ts +2 -0
  130. package/dist/types/components/ShellTools/ShellTools.d.ts +61 -0
  131. package/dist/types/components/ShellTools/index.d.ts +3 -0
  132. package/dist/types/components.d.ts +607 -2
  133. package/dist/types/shell/index.d.ts +5 -0
  134. package/dist/types/shell/shell-responsive.d.ts +14 -0
  135. package/package.json +1 -1
  136. package/dist/components/p-CWlh7HAg.js +0 -2
  137. package/dist/components/p-D3DYxbC5.js +0 -2
  138. package/dist/components/p-DC7yOUQx.js +0 -2
  139. package/dist/components/p-Dg3xLna0.js +0 -2
  140. /package/dist/components/{p-Bi_bxbih.js.map → p-Biz6xo-z.js.map} +0 -0
  141. /package/dist/components/{p-Cuw2Lo2g.js.map → p-CtD24EyI.js.map} +0 -0
  142. /package/dist/components/{p-C0NPJ0h2.js.map → p-DXnFhmZF.js.map} +0 -0
  143. /package/dist/components/{p-J6xK6Ihq.js.map → p-g40DTeV8.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","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","style","flexShrink","minWidth","maxWidth","padding","Tooltip","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","size","side","align","sideOffset","TOKEN_CSS_LENGTHS","space050","alignOffset","delay","animationDelayMedium3","shortcutKeyPosition","tooltipId","delayTimer","closeTimer","anchor","popupEl","positionObserver","anchorObserver","positionFrame","skipEnterAnimation","isOpen","lastInteractionWasKeyboard","pointerEnterHandler","event","pointerType","show","pointerLeaveHandler","hide","pointerDownHandler","hideInstant","keyDownHandler","focusHandler","matches","blurHandler","e","next","relatedTarget","contains","scrollResizeHandler","requestAnimationFrame","calculatePosition","escapeHandler","key","preventDefault","handleSlotChange","slot","querySelector","assignedElements","firstElementChild","unbindAnchor","bindAnchor","componentDidLoad","MutationObserver","observe","childList","disconnectedCallback","disconnect","clearTimers","destroyPopup","onContentOrPositionChange","renderPopupContent","schedulePosition","viewportPadPx","resolveCssLengthPx","sideOffsetPx","alignOffsetPx","hoverDelayMs","resolveCssTimeMs","instantReopenMs","animationDurationMedium1","fadeOutMs","resolveMotionTimeMs","motionShort3","animationDurationShort3","tooltipFallbackWidthPx","tooltipFallbackWidth","tooltipFallbackHeightPx","token","slotted","child","addEventListener","unlinkDescribedBy","removeEventListener","linkDescribedBy","ids","getAttribute","add","setAttribute","id","removeAttribute","clearTimeout","setupOpenListeners","window","teardownOpenListeners","cancelAnimationFrame","remove","reapplyLabelStyles","ResizeObserver","Date","now","instant","mountPopup","setTimeout","classList","tip","className","Object","assign","position","left","top","zIndex","pointerEvents","body","appendChild","toggle","textVariant","CONTROL_TEXT_VARIANT","density","sc","inner","appendShortcut","shortcutKey","group","hint","wide","replaceChildren","a","getBoundingClientRect","tw","offsetWidth","th","offsetHeight","x","y","resolvedSide","computeTooltipPosition","anchorRect","popupWidth","popupHeight","viewportWidth","innerWidth","viewportHeight","innerHeight","dataset","transform","Math","round","render","h","Host","display","onSlotchange"],"sources":["src/wc/utils/shortcut-key.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.split('+').map(part => part.trim()).filter(Boolean).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","@import '../../utils/control-density.css';\n@import '../../utils/key-hint.css';\n\n.tooltip-popup {\n box-sizing: border-box;\n background-color: var(--color-background-primary);\n border-radius: var(--ds-control-radius, 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@keyframes tooltipFadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n@keyframes tooltipFadeOut {\n from { opacity: 1; }\n to { opacity: 0; }\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","import { Component, Prop, Element, 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 { computeTooltipPosition } from './tooltip-position';\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) {\n el.style.flexShrink = '0';\n el.style.minWidth = 'max-content';\n el.style.maxWidth = 'none';\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 /**\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 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 positionObserver: ResizeObserver | null = null;\n private anchorObserver: MutationObserver | null = null;\n private positionFrame: number | null = null;\n private skipEnterAnimation = false;\n private isOpen = 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 scrollResizeHandler = () => {\n if (this.positionFrame !== null) return;\n this.positionFrame = requestAnimationFrame(() => {\n this.positionFrame = null;\n this.calculatePosition();\n });\n };\n private escapeHandler = (event: KeyboardEvent) => {\n if (event.key !== 'Escape' || !this.isOpen) return;\n event.preventDefault();\n this.hide();\n };\n\n componentDidLoad() {\n this.bindAnchor();\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('shortcutKey')\n @Watch('shortcutKeyPosition')\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(TOKEN_DEFAULTS.tooltipFallbackWidth, TOKEN_DEFAULTS.tooltipFallbackWidth);\n }\n\n private get tooltipFallbackHeightPx(): number {\n const token = FALLBACK_HEIGHT[this.size];\n return resolveCssLengthPx(token, token);\n }\n\n private bindAnchor() {\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 === 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 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 this.anchor = null;\n }\n\n private linkDescribedBy() {\n if (!this.anchor || !this.popupEl) return;\n const ids = new Set((this.anchor.getAttribute('aria-describedby') ?? '').split(/\\s+/).filter(Boolean));\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 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) return;\n if (this.isOpen || this.popupEl) this.hideInstant();\n this.unbindAnchor();\n this.bindAnchor();\n };\n\n private clearTimers() {\n if (this.delayTimer) { clearTimeout(this.delayTimer); this.delayTimer = null; }\n if (this.closeTimer) { clearTimeout(this.closeTimer); this.closeTimer = null; }\n }\n\n private setupOpenListeners() {\n window.addEventListener('scroll', this.scrollResizeHandler, true);\n window.addEventListener('resize', this.scrollResizeHandler);\n document.addEventListener('keydown', this.escapeHandler);\n }\n\n private teardownOpenListeners() {\n window.removeEventListener('scroll', this.scrollResizeHandler, true);\n window.removeEventListener('resize', this.scrollResizeHandler);\n document.removeEventListener('keydown', this.escapeHandler);\n if (this.positionFrame !== null) {\n cancelAnimationFrame(this.positionFrame);\n this.positionFrame = null;\n }\n }\n\n private destroyPopup() {\n this.teardownOpenListeners();\n this.positionObserver?.disconnect();\n this.positionObserver = null;\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);\n };\n\n requestAnimationFrame(() => {\n reapplyLabelStyles();\n this.calculatePosition();\n requestAnimationFrame(() => {\n reapplyLabelStyles();\n this.calculatePosition();\n });\n });\n\n this.positionObserver?.disconnect();\n this.positionObserver = new ResizeObserver(() => this.calculatePosition());\n this.positionObserver.observe(this.popupEl);\n if (this.anchor) this.positionObserver.observe(this.anchor);\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 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.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 const textVariant = CONTROL_TEXT_VARIANT[this.size];\n const density =\n this.size === 'md' ? 'ds-control--md' : this.size === 'sm' ? 'ds-control--sm' : '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({ variant: textVariant, wrap: 'nowrap', text: this.label });\n styleTooltipLabel(label);\n inner.appendChild(label);\n\n appendShortcut('end');\n\n this.popupEl.replaceChildren(inner);\n }\n\n private calculatePosition() {\n if (!this.anchor || !this.popupEl) return;\n const tip = this.popupEl;\n const a = this.anchor.getBoundingClientRect();\n const tw = tip.offsetWidth || this.tooltipFallbackWidthPx;\n const th = tip.offsetHeight || this.tooltipFallbackHeightPx;\n const { x, y, resolvedSide } = computeTooltipPosition({\n anchorRect: a,\n popupWidth: tw,\n popupHeight: th,\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 });\n tip.dataset.side = resolvedSide;\n tip.style.transform = `translate(${Math.round(x)}px, ${Math.round(y)}px)`;\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","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","style","flexShrink","minWidth","maxWidth","padding","Tooltip","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","size","side","align","sideOffset","TOKEN_CSS_LENGTHS","space050","alignOffset","delay","animationDelayMedium3","shortcutKeyPosition","tooltipId","delayTimer","closeTimer","anchor","popupEl","positionObserver","anchorObserver","positionFrame","skipEnterAnimation","isOpen","lastInteractionWasKeyboard","pointerEnterHandler","event","pointerType","show","pointerLeaveHandler","hide","pointerDownHandler","hideInstant","keyDownHandler","focusHandler","matches","blurHandler","e","next","relatedTarget","contains","scrollResizeHandler","requestAnimationFrame","calculatePosition","escapeHandler","key","preventDefault","handleSlotChange","slot","querySelector","assignedElements","firstElementChild","unbindAnchor","bindAnchor","componentDidLoad","MutationObserver","observe","childList","disconnectedCallback","disconnect","clearTimers","destroyPopup","onContentOrPositionChange","renderPopupContent","schedulePosition","viewportPadPx","resolveCssLengthPx","sideOffsetPx","alignOffsetPx","hoverDelayMs","resolveCssTimeMs","instantReopenMs","animationDurationMedium1","fadeOutMs","resolveMotionTimeMs","motionShort3","animationDurationShort3","tooltipFallbackWidthPx","tooltipFallbackWidth","tooltipFallbackHeightPx","token","slotted","child","addEventListener","unlinkDescribedBy","removeEventListener","linkDescribedBy","ids","getAttribute","add","setAttribute","id","removeAttribute","clearTimeout","setupOpenListeners","window","teardownOpenListeners","cancelAnimationFrame","remove","reapplyLabelStyles","ResizeObserver","Date","now","instant","mountPopup","setTimeout","classList","tip","className","Object","assign","position","left","top","zIndex","pointerEvents","body","appendChild","toggle","textVariant","CONTROL_TEXT_VARIANT","density","sc","inner","appendShortcut","shortcutKey","group","hint","wide","replaceChildren","a","getBoundingClientRect","tw","offsetWidth","th","offsetHeight","x","y","resolvedSide","computeTooltipPosition","anchorRect","popupWidth","popupHeight","viewportWidth","innerWidth","viewportHeight","innerHeight","dataset","transform","Math","round","render","h","Host","display","onSlotchange"],"sources":["src/wc/utils/shortcut-key.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.split('+').map(part => part.trim()).filter(Boolean).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","@import '../../utils/control-density.css';\n@import '../../utils/key-hint.css';\n\n.tooltip-popup {\n box-sizing: border-box;\n background-color: var(--color-background-primary);\n border-radius: var(--ds-control-radius, 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@keyframes tooltipFadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n@keyframes tooltipFadeOut {\n from { opacity: 1; }\n to { opacity: 0; }\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","import { Component, Prop, Element, 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 { computeTooltipPosition } from './tooltip-position';\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) {\n el.style.flexShrink = '0';\n el.style.minWidth = 'max-content';\n el.style.maxWidth = 'none';\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 /**\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 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 positionObserver: ResizeObserver | null = null;\n private anchorObserver: MutationObserver | null = null;\n private positionFrame: number | null = null;\n private skipEnterAnimation = false;\n private isOpen = 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 scrollResizeHandler = () => {\n if (this.positionFrame !== null) return;\n this.positionFrame = requestAnimationFrame(() => {\n this.positionFrame = null;\n this.calculatePosition();\n });\n };\n private escapeHandler = (event: KeyboardEvent) => {\n if (event.key !== 'Escape' || !this.isOpen) return;\n event.preventDefault();\n this.hide();\n };\n\n componentDidLoad() {\n this.bindAnchor();\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('shortcutKey')\n @Watch('shortcutKeyPosition')\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(TOKEN_DEFAULTS.tooltipFallbackWidth, TOKEN_DEFAULTS.tooltipFallbackWidth);\n }\n\n private get tooltipFallbackHeightPx(): number {\n const token = FALLBACK_HEIGHT[this.size];\n return resolveCssLengthPx(token, token);\n }\n\n private bindAnchor() {\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 === 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 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 this.anchor = null;\n }\n\n private linkDescribedBy() {\n if (!this.anchor || !this.popupEl) return;\n const ids = new Set((this.anchor.getAttribute('aria-describedby') ?? '').split(/\\s+/).filter(Boolean));\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 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) return;\n if (this.isOpen || this.popupEl) this.hideInstant();\n this.unbindAnchor();\n this.bindAnchor();\n };\n\n private clearTimers() {\n if (this.delayTimer) { clearTimeout(this.delayTimer); this.delayTimer = null; }\n if (this.closeTimer) { clearTimeout(this.closeTimer); this.closeTimer = null; }\n }\n\n private setupOpenListeners() {\n window.addEventListener('scroll', this.scrollResizeHandler, true);\n window.addEventListener('resize', this.scrollResizeHandler);\n document.addEventListener('keydown', this.escapeHandler);\n }\n\n private teardownOpenListeners() {\n window.removeEventListener('scroll', this.scrollResizeHandler, true);\n window.removeEventListener('resize', this.scrollResizeHandler);\n document.removeEventListener('keydown', this.escapeHandler);\n if (this.positionFrame !== null) {\n cancelAnimationFrame(this.positionFrame);\n this.positionFrame = null;\n }\n }\n\n private destroyPopup() {\n this.teardownOpenListeners();\n this.positionObserver?.disconnect();\n this.positionObserver = null;\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);\n };\n\n requestAnimationFrame(() => {\n reapplyLabelStyles();\n this.calculatePosition();\n requestAnimationFrame(() => {\n reapplyLabelStyles();\n this.calculatePosition();\n });\n });\n\n this.positionObserver?.disconnect();\n this.positionObserver = new ResizeObserver(() => this.calculatePosition());\n this.positionObserver.observe(this.popupEl);\n if (this.anchor) this.positionObserver.observe(this.anchor);\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 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.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 const textVariant = CONTROL_TEXT_VARIANT[this.size];\n const density =\n this.size === 'md' ? 'ds-control--md' : this.size === 'sm' ? 'ds-control--sm' : '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({ variant: textVariant, wrap: 'nowrap', text: this.label });\n styleTooltipLabel(label);\n inner.appendChild(label);\n\n appendShortcut('end');\n\n this.popupEl.replaceChildren(inner);\n }\n\n private calculatePosition() {\n if (!this.anchor || !this.popupEl) return;\n const tip = this.popupEl;\n const a = this.anchor.getBoundingClientRect();\n const tw = tip.offsetWidth || this.tooltipFallbackWidthPx;\n const th = tip.offsetHeight || this.tooltipFallbackHeightPx;\n const { x, y, resolvedSide } = computeTooltipPosition({\n anchorRect: a,\n popupWidth: tw,\n popupHeight: th,\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 });\n tip.dataset.side = resolvedSide;\n tip.style.transform = `translate(${Math.round(x)}px, ${Math.round(y)}px)`;\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 s,H as i,c,h as e,a as t,t as r}from"./index.js";function o(s,i){return i.length>0?i.flatMap((s=>s.options)):[...s]}function a(s,i){const c=s.findIndex((s=>s.value===i&&!s.isInactive));if(c>=0)return c;return s.findIndex((s=>!s.isInactive))}function n(s,i,c){const e=s.map(((s,i)=>({option:s,index:i}))).filter((({option:s})=>!s.isInactive)).map((({index:s})=>s));if(e.length===0)return null;if(c==="Home")return e[0];if(c==="End")return e[e.length-1];const t=c==="ArrowRight"||c==="ArrowDown"?1:-1;const r=e.indexOf(i);if(r<0){return t>0?e[0]:e[e.length-1]}return e[(r+t+e.length)%e.length]}function d(s){if(s===undefined||!Number.isFinite(s))return 1;return Math.min(1,Math.max(0,s))}const h=()=>`.sc-ds-swatch-picker-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-swatch-picker-h:focus-visible,.ds-focus-ring.sc-ds-swatch-picker: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-swatch-picker-h,.ds-focus-ring.ds-focus-ring--visible.sc-ds-swatch-picker{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-swatch-picker-h:focus-visible,.ds-focus-ring-inset.sc-ds-swatch-picker:focus-visible{outline:none}.ds-focus-ring-inset.sc-ds-swatch-picker-h:focus-visible::after,.ds-focus-ring-inset.sc-ds-swatch-picker: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-swatch-picker-h,.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-swatch-picker{outline:none}.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-swatch-picker-h::after,.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-swatch-picker::after{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:calc(-1 * var(--ds-focus-ring-width))}.ds-control-inactive.sc-ds-swatch-picker-h,.ds-control-inactive.sc-ds-swatch-picker{opacity:0.5;pointer-events:none;cursor:not-allowed}.sc-ds-swatch-picker-h{box-sizing:border-box;display:block;width:100%;--_swatch-inner-inset:calc( var(--dimension-stroke-width-025) + var(--dimension-space-025) );--_swatch-ring-bg:var(--color-background-primary);--_swatch-select-motion:var(--effect-motion-short-3)}.swatch-picker.sc-ds-swatch-picker{box-sizing:border-box;display:flex;align-items:center;flex-wrap:wrap;width:100%;min-height:var(--dimension-size-400);gap:var(--dimension-space-100);padding:var(--dimension-space-100)}.swatch-picker__option.sc-ds-swatch-picker{position:relative;box-sizing:border-box;flex:0 0 auto;width:var(--dimension-size-300);height:var(--dimension-size-300);padding:0;border:none;border-radius:var(--dimension-radius-half);background:transparent;cursor:pointer;isolation:isolate}.swatch-picker__fill.sc-ds-swatch-picker,.swatch-picker__border.sc-ds-swatch-picker,.swatch-picker__interaction.sc-ds-swatch-picker,.swatch-picker__halo.sc-ds-swatch-picker,.swatch-picker__stroke.sc-ds-swatch-picker{position:absolute;inset:0;border-radius:inherit;pointer-events:none}.swatch-picker__fill.sc-ds-swatch-picker{z-index:1;background-color:var(--_swatch-preview-color);background-image:var(--_swatch-preview-image);background-repeat:no-repeat;background-position:center;background-size:cover;opacity:var(--_swatch-preview-opacity);transition:inset var(--_swatch-select-motion)}.swatch-picker__border.sc-ds-swatch-picker{z-index:2;box-shadow:inset 0 0 0 var(--dimension-stroke-width-012) var(--color-border-secondary);transition:inset var(--_swatch-select-motion)}.swatch-picker__interaction.sc-ds-swatch-picker{z-index:3;background-color:transparent;transition:inset var(--_swatch-select-motion), background-color 0s}.swatch-picker__option.sc-ds-swatch-picker:hover:not(:disabled) .swatch-picker__interaction.sc-ds-swatch-picker{background-color:var(--color-interaction-hover)}.swatch-picker__option.sc-ds-swatch-picker:active:not(:disabled) .swatch-picker__interaction.sc-ds-swatch-picker{background-color:var(--color-interaction-pressed)}.swatch-picker__halo.sc-ds-swatch-picker,.swatch-picker__stroke.sc-ds-swatch-picker{opacity:0;transform:scale(1.2);transform-origin:center;transition:opacity var(--_swatch-select-motion), transform var(--_swatch-select-motion)}.swatch-picker__halo.sc-ds-swatch-picker{z-index:4;box-shadow:inset 0 0 0 var(--_swatch-inner-inset) var(--_swatch-ring-bg)}.swatch-picker__stroke.sc-ds-swatch-picker{z-index:5;box-shadow:inset 0 0 0 var(--dimension-stroke-width-025) var(--color-border-bold-brand)}.swatch-picker__option--selected.sc-ds-swatch-picker .swatch-picker__fill.sc-ds-swatch-picker,.swatch-picker__option--selected.sc-ds-swatch-picker .swatch-picker__border.sc-ds-swatch-picker,.swatch-picker__option--selected.sc-ds-swatch-picker .swatch-picker__interaction.sc-ds-swatch-picker{inset:var(--_swatch-inner-inset)}.swatch-picker__option--selected.sc-ds-swatch-picker .swatch-picker__halo.sc-ds-swatch-picker,.swatch-picker__option--selected.sc-ds-swatch-picker .swatch-picker__stroke.sc-ds-swatch-picker{opacity:1;transform:scale(1)}.swatch-picker__divider.sc-ds-swatch-picker{flex:0 0 auto;align-self:center;width:var(--dimension-stroke-width-012);height:var(--dimension-size-300);background-color:var(--color-border-tertiary)}@media (prefers-reduced-motion: reduce){.swatch-picker__fill.sc-ds-swatch-picker,.swatch-picker__border.sc-ds-swatch-picker,.swatch-picker__interaction.sc-ds-swatch-picker,.swatch-picker__halo.sc-ds-swatch-picker,.swatch-picker__stroke.sc-ds-swatch-picker{transition:none}}`;const p=s(class s extends i{constructor(s){super();if(s!==false){this.__registerHost()}this.dsChange=c(this,"dsChange");this.value="";this.options=[];this.sections=[];this.groupLabel="Swatch options"}get activeOptions(){return o(this.options,this.sections)}selectOption(s){if(s.isInactive||s.value===this.value)return;this.value=s.value;this.dsChange.emit(s.value)}focusOption(s){requestAnimationFrame((()=>{const i=this.el.querySelectorAll(".swatch-picker__option");i[s]?.focus()}))}handleOptionKeyDown(s,i){const c=s.key;if(!["ArrowDown","ArrowLeft","ArrowRight","ArrowUp","Home","End"].includes(c)){return}const e=n(this.activeOptions,i,c);if(e===null)return;s.preventDefault();const t=this.activeOptions[e];this.selectOption(t);this.focusOption(e)}renderOption(s,i,c){const t=s.value===this.value;const r=d(s.preview.opacity);return e("button",{key:s.value,type:"button",class:{"swatch-picker__option":true,"swatch-picker__option--selected":t,"ds-focus-ring-inset":true,"ds-control-inactive":!!s.isInactive},style:{"--_swatch-preview-color":s.preview.backgroundColor??"var(--color-background-secondary)","--_swatch-preview-image":s.preview.backgroundImage??"none","--_swatch-preview-opacity":String(r)},role:"radio","aria-label":s.label,"aria-checked":t?"true":"false",tabIndex:i===c?0:-1,disabled:s.isInactive,onClick:()=>this.selectOption(s),onKeyDown:s=>this.handleOptionKeyDown(s,i)},e("span",{class:"swatch-picker__fill","aria-hidden":"true"}),e("span",{class:"swatch-picker__border","aria-hidden":"true"}),e("span",{class:"swatch-picker__interaction","aria-hidden":"true"}),e("span",{class:"swatch-picker__halo","aria-hidden":"true"}),e("span",{class:"swatch-picker__stroke","aria-hidden":"true"}))}render(){const s=this.activeOptions;const i=a(s,this.value);let c=0;return e(t,{key:"8220edd4cdb7c5f710fe73930efb6ae86749784b"},e("div",{key:"8e6203aace9c3a535d25def77e0abf426a9c7a2a",class:"swatch-picker",role:"radiogroup","aria-label":this.groupLabel},(this.sections.length>0?this.sections:[{options:this.options}]).map(((s,t)=>[s.options.map((s=>{const e=c++;return this.renderOption(s,e,i)})),t<(this.sections.length>0?this.sections.length:1)-1&&e("span",{class:"swatch-picker__divider","aria-hidden":"true"})]))))}get el(){return this}static get style(){return h()}},[2,"ds-swatch-picker",{value:[1537],options:[16],sections:[16],groupLabel:[1,"group-label"]}]);function w(){if(typeof customElements==="undefined"){return}const s=["ds-swatch-picker"];s.forEach((s=>{switch(s){case"ds-swatch-picker":if(!customElements.get(r(s))){customElements.define(r(s),p)}break}}))}w();export{p as S,w as d};
2
- //# sourceMappingURL=p-Bi_bxbih.js.map
1
+ import{p as s,H as i,c,h as e,a as t,t as r}from"./index.js";function o(s,i){return i.length>0?i.flatMap((s=>s.options)):[...s]}function a(s,i){const c=s.findIndex((s=>s.value===i&&!s.isInactive));if(c>=0)return c;return s.findIndex((s=>!s.isInactive))}function n(s,i,c){const e=s.map(((s,i)=>({option:s,index:i}))).filter((({option:s})=>!s.isInactive)).map((({index:s})=>s));if(e.length===0)return null;if(c==="Home")return e[0];if(c==="End")return e[e.length-1];const t=c==="ArrowRight"||c==="ArrowDown"?1:-1;const r=e.indexOf(i);if(r<0){return t>0?e[0]:e[e.length-1]}return e[(r+t+e.length)%e.length]}function d(s){if(s===undefined||!Number.isFinite(s))return 1;return Math.min(1,Math.max(0,s))}const h=()=>`.sc-ds-swatch-picker-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-swatch-picker-h:focus-visible,.ds-focus-ring.sc-ds-swatch-picker: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-swatch-picker-h,.ds-focus-ring.ds-focus-ring--visible.sc-ds-swatch-picker{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-swatch-picker-h:focus-visible,.ds-focus-ring-inset.sc-ds-swatch-picker:focus-visible{outline:none}.ds-focus-ring-inset.sc-ds-swatch-picker-h:focus-visible::after,.ds-focus-ring-inset.sc-ds-swatch-picker: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-swatch-picker-h,.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-swatch-picker{outline:none}.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-swatch-picker-h::after,.ds-focus-ring-inset.ds-focus-ring--visible.sc-ds-swatch-picker::after{outline:var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);outline-offset:calc(-1 * var(--ds-focus-ring-width))}.ds-control-inactive.sc-ds-swatch-picker-h,.ds-control-inactive.sc-ds-swatch-picker{opacity:0.5;pointer-events:none;cursor:not-allowed}.sc-ds-swatch-picker-h{box-sizing:border-box;display:block;width:100%;--_swatch-inner-inset:calc( var(--dimension-stroke-width-025) + var(--dimension-space-025) );--_swatch-ring-bg:var(--color-background-primary);--_swatch-select-motion:var(--effect-motion-short-3)}.swatch-picker.sc-ds-swatch-picker{box-sizing:border-box;display:flex;align-items:center;flex-wrap:wrap;width:100%;min-height:var(--dimension-size-400);gap:var(--dimension-space-100);padding:var(--dimension-space-100)}.swatch-picker__option.sc-ds-swatch-picker{position:relative;box-sizing:border-box;flex:0 0 auto;width:var(--dimension-size-300);height:var(--dimension-size-300);padding:0;border:none;border-radius:var(--dimension-radius-half);background:transparent;cursor:pointer;isolation:isolate}.swatch-picker__fill.sc-ds-swatch-picker,.swatch-picker__border.sc-ds-swatch-picker,.swatch-picker__interaction.sc-ds-swatch-picker,.swatch-picker__halo.sc-ds-swatch-picker,.swatch-picker__stroke.sc-ds-swatch-picker{position:absolute;inset:0;border-radius:inherit;pointer-events:none}.swatch-picker__fill.sc-ds-swatch-picker{z-index:1;background-color:var(--_swatch-preview-color);background-image:var(--_swatch-preview-image);background-repeat:no-repeat;background-position:center;background-size:cover;opacity:var(--_swatch-preview-opacity);transition:inset var(--_swatch-select-motion)}.swatch-picker__border.sc-ds-swatch-picker{z-index:2;box-shadow:inset 0 0 0 var(--dimension-stroke-width-012) var(--color-border-secondary);transition:inset var(--_swatch-select-motion)}.swatch-picker__interaction.sc-ds-swatch-picker{z-index:3;background-color:transparent;transition:inset var(--_swatch-select-motion), background-color 0s}.swatch-picker__option.sc-ds-swatch-picker:hover:not(:disabled) .swatch-picker__interaction.sc-ds-swatch-picker{background-color:var(--color-interaction-hover)}.swatch-picker__option.sc-ds-swatch-picker:active:not(:disabled) .swatch-picker__interaction.sc-ds-swatch-picker{background-color:var(--color-interaction-pressed)}.swatch-picker__halo.sc-ds-swatch-picker,.swatch-picker__stroke.sc-ds-swatch-picker{opacity:0;transform:scale(1.2);transform-origin:center;transition:opacity var(--_swatch-select-motion), transform var(--_swatch-select-motion)}.swatch-picker__halo.sc-ds-swatch-picker{z-index:4;box-shadow:inset 0 0 0 var(--_swatch-inner-inset) var(--_swatch-ring-bg)}.swatch-picker__stroke.sc-ds-swatch-picker{z-index:5;box-shadow:inset 0 0 0 var(--dimension-stroke-width-025) var(--color-border-bold-brand)}.swatch-picker__option--selected.sc-ds-swatch-picker .swatch-picker__fill.sc-ds-swatch-picker,.swatch-picker__option--selected.sc-ds-swatch-picker .swatch-picker__border.sc-ds-swatch-picker,.swatch-picker__option--selected.sc-ds-swatch-picker .swatch-picker__interaction.sc-ds-swatch-picker{inset:var(--_swatch-inner-inset)}.swatch-picker__option--selected.sc-ds-swatch-picker .swatch-picker__halo.sc-ds-swatch-picker,.swatch-picker__option--selected.sc-ds-swatch-picker .swatch-picker__stroke.sc-ds-swatch-picker{opacity:1;transform:scale(1)}.swatch-picker__divider.sc-ds-swatch-picker{flex:0 0 auto;align-self:center;width:var(--dimension-stroke-width-012);height:var(--dimension-size-300);background-color:var(--color-border-tertiary)}@media (prefers-reduced-motion: reduce){.swatch-picker__fill.sc-ds-swatch-picker,.swatch-picker__border.sc-ds-swatch-picker,.swatch-picker__interaction.sc-ds-swatch-picker,.swatch-picker__halo.sc-ds-swatch-picker,.swatch-picker__stroke.sc-ds-swatch-picker{transition:none}}`;const p=s(class s extends i{constructor(s){super();if(s!==false){this.__registerHost()}this.dsChange=c(this,"dsChange");this.value="";this.options=[];this.sections=[];this.groupLabel="Swatch options"}get activeOptions(){return o(this.options,this.sections)}selectOption(s){if(s.isInactive||s.value===this.value)return;this.value=s.value;this.dsChange.emit(s.value)}focusOption(s){requestAnimationFrame((()=>{const i=this.el.querySelectorAll(".swatch-picker__option");i[s]?.focus()}))}handleOptionKeyDown(s,i){const c=s.key;if(!["ArrowDown","ArrowLeft","ArrowRight","ArrowUp","Home","End"].includes(c)){return}const e=n(this.activeOptions,i,c);if(e===null)return;s.preventDefault();const t=this.activeOptions[e];this.selectOption(t);this.focusOption(e)}renderOption(s,i,c){const t=s.value===this.value;const r=d(s.preview.opacity);return e("button",{key:s.value,type:"button",class:{"swatch-picker__option":true,"swatch-picker__option--selected":t,"ds-focus-ring-inset":true,"ds-control-inactive":!!s.isInactive},style:{"--_swatch-preview-color":s.preview.backgroundColor??"var(--color-background-secondary)","--_swatch-preview-image":s.preview.backgroundImage??"none","--_swatch-preview-opacity":String(r)},role:"radio","aria-label":s.label,"aria-checked":t?"true":"false",tabIndex:i===c?0:-1,disabled:s.isInactive,onClick:()=>this.selectOption(s),onKeyDown:s=>this.handleOptionKeyDown(s,i)},e("span",{class:"swatch-picker__fill","aria-hidden":"true"}),e("span",{class:"swatch-picker__border","aria-hidden":"true"}),e("span",{class:"swatch-picker__interaction","aria-hidden":"true"}),e("span",{class:"swatch-picker__halo","aria-hidden":"true"}),e("span",{class:"swatch-picker__stroke","aria-hidden":"true"}))}render(){const s=this.activeOptions;const i=a(s,this.value);let c=0;return e(t,{key:"0db6c89970c68955c870a6729b6bc9b0d39ebec2"},e("div",{key:"6023f991039d57f94b007b6c7a97645fe8a766a0",class:"swatch-picker",role:"radiogroup","aria-label":this.groupLabel},(this.sections.length>0?this.sections:[{options:this.options}]).map(((s,t)=>[s.options.map((s=>{const e=c++;return this.renderOption(s,e,i)})),t<(this.sections.length>0?this.sections.length:1)-1&&e("span",{class:"swatch-picker__divider","aria-hidden":"true"})]))))}get el(){return this}static get style(){return h()}},[2,"ds-swatch-picker",{value:[1537],options:[16],sections:[16],groupLabel:[1,"group-label"]}]);function w(){if(typeof customElements==="undefined"){return}const s=["ds-swatch-picker"];s.forEach((s=>{switch(s){case"ds-swatch-picker":if(!customElements.get(r(s))){customElements.define(r(s),p)}break}}))}w();export{p as S,w as d};
2
+ //# sourceMappingURL=p-Biz6xo-z.js.map
@@ -0,0 +1,2 @@
1
+ const t=1200;const n=768;const r="messages";function s(r){if(r>=t)return"desktop";if(r>=n)return"tablet";return"mobile"}function e(t){return t==="messages"||t==="stacks"||t==="activity"}function i(t,n){const s=n.filter(e);if(e(t)&&s.includes(t))return t;if(s.includes(r))return r;return s[0]??""}function u(t,n,r){return r||t!==n}export{s as a,e as i,i as r,u as s};
2
+ //# sourceMappingURL=p-BrusnEYP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["SHELL_DESKTOP_BREAKPOINT","SHELL_MOBILE_BREAKPOINT","SHELL_DEFAULT_INBOX_TOOL","resolveShellResponsiveMode","width","isShellInboxTool","tool","resolveAvailableInboxTool","preferred","available","inbox","filter","includes","shouldEmitMobileDestinationChange","active","next","navigationOpen"],"sources":["src/wc/shell/shell-responsive.ts"],"sourcesContent":["import type { PanelToolsToolId } from '../components/PanelTools/panel-tools-types';\n\nexport type ShellResponsiveMode = 'desktop' | 'tablet' | 'mobile';\nexport type ShellMobileDestination = 'area' | 'search' | 'agents' | 'inbox';\nexport type ShellInboxToolId = Extract<PanelToolsToolId, 'messages' | 'stacks' | 'activity'>;\n\nexport const SHELL_DESKTOP_BREAKPOINT = 1200;\nexport const SHELL_MOBILE_BREAKPOINT = 768;\nexport const SHELL_DEFAULT_INBOX_TOOL: ShellInboxToolId = 'messages';\n\nexport function resolveShellResponsiveMode(width: number): ShellResponsiveMode {\n if (width >= SHELL_DESKTOP_BREAKPOINT) return 'desktop';\n if (width >= SHELL_MOBILE_BREAKPOINT) return 'tablet';\n return 'mobile';\n}\n\nexport function shellMobileDestinationForTool(\n open: boolean,\n tool: PanelToolsToolId | ''\n): ShellMobileDestination {\n if (!open || !tool || tool === 'help') return 'area';\n if (tool === 'search') return 'search';\n if (tool === 'agents') return 'agents';\n return 'inbox';\n}\n\nexport function isShellInboxTool(tool: string): tool is ShellInboxToolId {\n return tool === 'messages' || tool === 'stacks' || tool === 'activity';\n}\n\nexport function resolveAvailableInboxTool(\n preferred: string,\n available: readonly PanelToolsToolId[]\n): ShellInboxToolId | '' {\n const inbox = available.filter(isShellInboxTool);\n if (isShellInboxTool(preferred) && inbox.includes(preferred)) return preferred;\n if (inbox.includes(SHELL_DEFAULT_INBOX_TOOL)) return SHELL_DEFAULT_INBOX_TOOL;\n return inbox[0] ?? '';\n}\n\n/** Active-destination reselects are inert unless they also dismiss the Menu pane. */\nexport function shouldEmitMobileDestinationChange(\n active: ShellMobileDestination,\n next: ShellMobileDestination,\n navigationOpen: boolean\n): boolean {\n return navigationOpen || active !== next;\n}\n"],"mappings":"AAMO,MAAMA,EAA2B,KACjC,MAAMC,EAA0B,IAChC,MAAMC,EAA6C,WAEpD,SAAUC,EAA2BC,GACzC,GAAIA,GAASJ,EAA0B,MAAO,UAC9C,GAAII,GAASH,EAAyB,MAAO,SAC7C,MAAO,QACT,CAYM,SAAUI,EAAiBC,GAC/B,OAAOA,IAAS,YAAcA,IAAS,UAAYA,IAAS,UAC9D,CAEM,SAAUC,EACdC,EACAC,GAEA,MAAMC,EAAQD,EAAUE,OAAON,GAC/B,GAAIA,EAAiBG,IAAcE,EAAME,SAASJ,GAAY,OAAOA,EACrE,GAAIE,EAAME,SAASV,GAA2B,OAAOA,EACrD,OAAOQ,EAAM,IAAM,EACrB,C,SAGgBG,EACdC,EACAC,EACAC,GAEA,OAAOA,GAAkBF,IAAWC,CACtC,Q","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ const i="--dimension-menu-width-xs";const n="--dimension-radius-025";const e="--dimension-size-200";const t="--dimension-size-300";const o="--dimension-size-400";const a="--dimension-space-050";const s="--dimension-space-200";const c="--effect-animation-delay-instant";const m="--effect-animation-delay-long-2";const d="--effect-animation-delay-medium-3";const l="--effect-animation-duration-medium-1";const r="--effect-animation-duration-short-3";const h="--effect-motion-short-2";const u="--effect-motion-short-3";const f="--typography-lineheight-md";const p="--typography-lineheight-xl";const z={space050:a,space200:s,radius025:n,size200:e,size300:t,size400:o,menuWidthXs:i,lineheightMd:f,lineheightXl:p,motionShort2:h,motionShort3:u,animationDurationShort3:r,animationDurationMedium1:l,animationDelayInstant:c,animationDelayMedium3:d,animationDelayLong2:m,menuFallbackHeight:"calc(var(--dimension-size-base) * 20)",tooltipFallbackWidth:"calc(var(--dimension-size-800) + var(--dimension-size-200))",donutFillMin:"calc(var(--dimension-size-base) * 16)",donutFillMax:"calc(var(--dimension-size-base) * 24)"};const y={space050:`var(${a})`};export{z as T,y as a};
2
+ //# sourceMappingURL=p-C_0Q8Cnp.js.map