@ds-mo/ui 14.16.0 → 14.17.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 (130) hide show
  1. package/dist/.package-ready.json +1 -1
  2. package/dist/agent-patterns.json +1 -1
  3. package/dist/agent.json +167 -11
  4. package/dist/angular/ds-table-filter.d.ts +44 -0
  5. package/dist/angular/ds-table-filter.js +57 -0
  6. package/dist/angular/index.d.ts +1 -1
  7. package/dist/angular/index.js +1 -0
  8. package/dist/angular/proxies.d.ts +1 -0
  9. package/dist/angular/proxies.js +1 -0
  10. package/dist/components/ds-agent-questionnaire.js +1 -1
  11. package/dist/components/ds-agent-response.js +1 -1
  12. package/dist/components/ds-banner.js +1 -1
  13. package/dist/components/ds-bar-nav.js +1 -1
  14. package/dist/components/ds-bar-title.js +1 -1
  15. package/dist/components/ds-bar-workflow.js +1 -1
  16. package/dist/components/ds-button-unfilled.js +1 -1
  17. package/dist/components/ds-card-chart.js +1 -1
  18. package/dist/components/ds-card-overview.js +1 -1
  19. package/dist/components/ds-card-setting.js +1 -1
  20. package/dist/components/ds-chart.js +1 -1
  21. package/dist/components/ds-code-block.js +1 -1
  22. package/dist/components/ds-filter-menu.js +1 -1
  23. package/dist/components/ds-filter-menu.js.map +1 -1
  24. package/dist/components/ds-input.js +1 -1
  25. package/dist/components/ds-markdown.js +1 -1
  26. package/dist/components/ds-menu.js +1 -1
  27. package/dist/components/ds-message-actions.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-mobile-header.js +1 -1
  31. package/dist/components/ds-mobile-section-switcher.js +1 -1
  32. package/dist/components/ds-mobile-sheet-nav.js +1 -1
  33. package/dist/components/ds-modal.js +1 -1
  34. package/dist/components/ds-pagination.js +1 -1
  35. package/dist/components/ds-panel-nav.js +1 -1
  36. package/dist/components/ds-panel-tool-header.js +1 -1
  37. package/dist/components/ds-panel-tool-search.js +1 -1
  38. package/dist/components/ds-panel-tools.js +1 -1
  39. package/dist/components/ds-select.js +1 -1
  40. package/dist/components/ds-shell-app.js +1 -1
  41. package/dist/components/ds-shell-tools.js +1 -1
  42. package/dist/components/ds-table-filter.d.ts +11 -0
  43. package/dist/components/ds-table-filter.js +2 -0
  44. package/dist/components/ds-table-filter.js.map +1 -0
  45. package/dist/components/ds-table-saved-views.js +1 -1
  46. package/dist/components/ds-table-sort.js +1 -1
  47. package/dist/components/ds-table-sort.js.map +1 -1
  48. package/dist/components/ds-table-toolbar.js +1 -1
  49. package/dist/components/ds-table-toolbar.js.map +1 -1
  50. package/dist/components/ds-table.js +1 -1
  51. package/dist/components/ds-toast.js +1 -1
  52. package/dist/components/ds-tooltip-chart.js +1 -1
  53. package/dist/components/ds-tooltip.js +1 -1
  54. package/dist/components/ds-typing-indicator.js +1 -1
  55. package/dist/components/{p-3dYwA4i_.js → p-Asi9h3pa.js} +2 -2
  56. package/dist/components/p-BFSLT0yc.js +2 -0
  57. package/dist/components/p-BFSLT0yc.js.map +1 -0
  58. package/dist/components/{p-C4p2i59V.js → p-BHz78C8h.js} +2 -2
  59. package/dist/components/{p-Dcnd5ZX5.js → p-BKp__CQX.js} +2 -2
  60. package/dist/components/{p-Ct2GVdSI.js → p-Be1sY58w.js} +2 -2
  61. package/dist/components/{p-vzxD117T.js → p-Bh67XbfB.js} +2 -2
  62. package/dist/components/{p-C_TOgX82.js → p-Bn8NryHK.js} +2 -2
  63. package/dist/components/{p-CaAZ-D08.js → p-C4TgWJi9.js} +2 -2
  64. package/dist/components/{p-COVcyUAA.js → p-CKmfuK7k.js} +2 -2
  65. package/dist/components/p-CKmfuK7k.js.map +1 -0
  66. package/dist/components/{p-EWI6ccs-.js → p-CMFvaY05.js} +2 -2
  67. package/dist/components/{p-BK-JjdoN.js → p-D4K9CE8a.js} +2 -2
  68. package/dist/components/{p-CxBE3l74.js → p-DEjh3klB.js} +2 -2
  69. package/dist/components/{p-NdahPypA.js → p-DFQ9mcbK.js} +2 -2
  70. package/dist/components/{p-WGZWqh-B.js → p-DHuyj-9J.js} +2 -2
  71. package/dist/components/{p-BUhShHfb.js → p-DIEK54fV.js} +2 -2
  72. package/dist/components/p-DOqnJVos.js +2 -0
  73. package/dist/components/{p-CwkcFMMe.js.map → p-DOqnJVos.js.map} +1 -1
  74. package/dist/components/{p-DRBTr6TS.js → p-DZ55e3j9.js} +2 -2
  75. package/dist/components/{p-MxptXwlW.js → p-DsJW5W3W.js} +2 -2
  76. package/dist/components/p-JPTkZ3Ji.js.map +1 -1
  77. package/dist/components/{p-DAV32g35.js → p-NzGRAPcF.js} +2 -2
  78. package/dist/components/p-NzGRAPcF.js.map +1 -0
  79. package/dist/components/{p-BUrbVZJU.js → p-ZZzC52Ea.js} +2 -2
  80. package/dist/components/{p-C91izpHV.js → p-__lNIImO.js} +2 -2
  81. package/dist/components/{p-0IbKxhqM.js → p-rrFMAZkj.js} +2 -2
  82. package/dist/components/{p-Cr2VT5zv.js → p-ruPTIV6t.js} +2 -2
  83. package/dist/docs/components.json +435 -6
  84. package/dist/mcp-data/registry/button-unfilled.json +3 -3
  85. package/dist/mcp-data/registry/filter-menu.json +5 -5
  86. package/dist/mcp-data/registry/loader.json +2 -1
  87. package/dist/mcp-data/registry/registry.json +169 -10
  88. package/dist/mcp-data/registry/select.json +1 -1
  89. package/dist/mcp-data/registry/table-filter.json +399 -0
  90. package/dist/mcp-data/registry/table-saved-views.json +1 -1
  91. package/dist/mcp-data/registry/table-sort.json +2 -2
  92. package/dist/mcp-data/registry/table-toolbar.json +9 -9
  93. package/dist/mcp-data/registry/table.json +1 -0
  94. package/dist/react/components.d.ts +1 -0
  95. package/dist/react/components.js +1 -0
  96. package/dist/react/ds-table-filter.d.ts +17 -0
  97. package/dist/react/ds-table-filter.js +19 -0
  98. package/dist/types/components/ButtonUnfilled/ButtonUnfilled.d.ts +2 -0
  99. package/dist/types/components/FilterMenu/FilterMenu.d.ts +2 -0
  100. package/dist/types/components/Select/Select.d.ts +2 -0
  101. package/dist/types/components/TableFilter/TableFilter.d.ts +37 -0
  102. package/dist/types/components/TableToolbar/TableToolbar.d.ts +0 -6
  103. package/dist/types/components.d.ts +160 -4
  104. package/dist/vue/components.d.ts +1 -0
  105. package/dist/vue/components.js +1 -0
  106. package/dist/vue/ds-table-filter.d.ts +3 -0
  107. package/dist/vue/ds-table-filter.js +29 -0
  108. package/package.json +1 -1
  109. package/dist/components/p-COVcyUAA.js.map +0 -1
  110. package/dist/components/p-CwkcFMMe.js +0 -2
  111. package/dist/components/p-DAV32g35.js.map +0 -1
  112. /package/dist/components/{p-3dYwA4i_.js.map → p-Asi9h3pa.js.map} +0 -0
  113. /package/dist/components/{p-C4p2i59V.js.map → p-BHz78C8h.js.map} +0 -0
  114. /package/dist/components/{p-Dcnd5ZX5.js.map → p-BKp__CQX.js.map} +0 -0
  115. /package/dist/components/{p-Ct2GVdSI.js.map → p-Be1sY58w.js.map} +0 -0
  116. /package/dist/components/{p-vzxD117T.js.map → p-Bh67XbfB.js.map} +0 -0
  117. /package/dist/components/{p-C_TOgX82.js.map → p-Bn8NryHK.js.map} +0 -0
  118. /package/dist/components/{p-CaAZ-D08.js.map → p-C4TgWJi9.js.map} +0 -0
  119. /package/dist/components/{p-EWI6ccs-.js.map → p-CMFvaY05.js.map} +0 -0
  120. /package/dist/components/{p-BK-JjdoN.js.map → p-D4K9CE8a.js.map} +0 -0
  121. /package/dist/components/{p-CxBE3l74.js.map → p-DEjh3klB.js.map} +0 -0
  122. /package/dist/components/{p-NdahPypA.js.map → p-DFQ9mcbK.js.map} +0 -0
  123. /package/dist/components/{p-WGZWqh-B.js.map → p-DHuyj-9J.js.map} +0 -0
  124. /package/dist/components/{p-BUhShHfb.js.map → p-DIEK54fV.js.map} +0 -0
  125. /package/dist/components/{p-DRBTr6TS.js.map → p-DZ55e3j9.js.map} +0 -0
  126. /package/dist/components/{p-MxptXwlW.js.map → p-DsJW5W3W.js.map} +0 -0
  127. /package/dist/components/{p-BUrbVZJU.js.map → p-ZZzC52Ea.js.map} +0 -0
  128. /package/dist/components/{p-C91izpHV.js.map → p-__lNIImO.js.map} +0 -0
  129. /package/dist/components/{p-0IbKxhqM.js.map → p-rrFMAZkj.js.map} +0 -0
  130. /package/dist/components/{p-Cr2VT5zv.js.map → p-ruPTIV6t.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"names":["TABLE_CAPTION_COMPACT_MAX_PX","isTableCaptionCompact","width","tableCaptionInlineSize","entry","contentBoxSize","inlineSize","contentRect","observeTableCaptionCompact","host","onChange","ResizeObserver","undefined","table","closest","sync","observer","entries","observe","clientWidth","disconnect","buttonUnfilledCss","ButtonUnfilled","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","variant","size","isInset","insetDepth","label","icon","isActive","activeFill","hasBorder","rounded","pressScale","dot","isInactive","isLoading","type","ariaLabel","collapseLabel","hasMenu","captionCompact","buttonEl","handleClick","event","preventDefault","stopPropagation","dsClick","emit","pressed","dsChange","componentDidLoad","syncCaptionCompactObserver","disconnectedCallback","disconnectCaptionCompactObserver","onCollapseLabelChange","setFocus","focus","captionIconOnly","Boolean","visualVariant","showDot","captionCompactDisconnect","el","compact","resolvedHaspopup","haspopup","doubleInset","expandedPopup","expanded","visuallyActive","dotRing","accessibleName","render","bg","background","cls","h","Host","key","class","controlWidthClass","tabIndex","ref","disabled","focusTabIndex","controls","String","onPointerDown","beginElevatedControlPress","onClick","renderButtonContent","namespace","visible"],"sources":["src/wc/utils/table-caption-compact.ts","src/wc/components/ButtonUnfilled/ButtonUnfilled.css?tag=ds-button-unfilled&encapsulation=scoped","src/wc/components/ButtonUnfilled/ButtonUnfilled.tsx"],"sourcesContent":["/** Matches `@container ds-table (max-width: 899px)` on caption Filter/Group/Sort. */\nexport const TABLE_CAPTION_COMPACT_MAX_PX = 899;\n\nexport function isTableCaptionCompact(width: number): boolean {\n return width > 0 && width <= TABLE_CAPTION_COMPACT_MAX_PX;\n}\n\nexport function tableCaptionInlineSize(entry: ResizeObserverEntry): number {\n return entry.contentBoxSize[0]?.inlineSize ?? entry.contentRect.width;\n}\n\nexport function observeTableCaptionCompact(\n host: HTMLElement,\n onChange: (compact: boolean) => void\n): () => void {\n if (typeof ResizeObserver === 'undefined') {\n onChange(false);\n return () => undefined;\n }\n\n const table = host.closest('ds-table');\n if (!table) {\n onChange(false);\n return () => undefined;\n }\n\n const sync = (width: number) => {\n if (width <= 0) return;\n onChange(isTableCaptionCompact(width));\n };\n\n const observer = new ResizeObserver(entries => {\n sync(entries[0] ? tableCaptionInlineSize(entries[0]) : 0);\n });\n observer.observe(table);\n sync(table.clientWidth);\n return () => observer.disconnect();\n}\n","@import '../../utils/button-base.css';\n@import '../../utils/table-caption-control.css';\n\n:host {\n --ds-button-unfilled-fg: var(--color-foreground-secondary);\n --ds-button-unfilled-fg-active: var(--color-foreground-primary);\n --ds-button-unfilled-dot-ring: var(--color-background-secondary);\n --ds-button-unfilled-border: var(--color-border-secondary);\n}\n\n.button-unfilled {\n background: transparent;\n color: var(--ds-button-unfilled-fg);\n /* Hover/press/selected fill: `.ds-interaction-fill` (+ `--selected` / `--on-*`).\n Active foreground changes remain independent from popup-open pressed paint. */\n}\n\n.button-unfilled--active {\n color: var(--ds-button-unfilled-fg-active);\n}\n\n/*\n * Foreground-only active on icon-label: the word carries the selected meaning.\n * Icon and menu chevron keep the resting foreground. Icon-only active still\n * promotes the glyph because that is the only content.\n */\n.button-unfilled--icon-label.button-unfilled--active:not(.ds-interaction-fill--selected) {\n color: var(--ds-button-unfilled-fg);\n}\n\n.button-unfilled--icon-label.button-unfilled--active:not(.ds-interaction-fill--selected) .button-unfilled__label {\n color: var(--ds-button-unfilled-fg-active);\n}\n\n/*\n * An open popup is a transient pressed state, not a selected state. Keep the\n * pressed wash visible for the popup's complete rendered lifecycle without\n * promoting the resting foreground or selected fill.\n */\n/* Inset stroke via interaction-fill ::after (above selected / hover washes). */\n.button-unfilled--bordered {\n --ds-interaction-border-color: var(--ds-button-unfilled-border);\n}\n\n/* Inactive: `.ds-control-inactive` (50% opacity). */\n\n/* Foreground / chrome tokens per surface — interaction tokens come from util `--on-*`. */\n.button-unfilled--background-medium {\n --ds-button-unfilled-fg: var(--color-foreground-on-medium-background-secondary);\n --ds-button-unfilled-fg-active: var(--color-foreground-on-medium-background-primary);\n --ds-button-unfilled-dot-ring: var(--color-background-medium-neutral);\n --ds-button-unfilled-border: var(--color-border-on-medium-background-secondary);\n}\n\n.button-unfilled--background-bold {\n --ds-button-unfilled-fg: var(--color-foreground-on-bold-background-secondary);\n --ds-button-unfilled-fg-active: var(--color-foreground-on-bold-background-primary);\n --ds-button-unfilled-dot-ring: var(--color-background-bold-neutral);\n --ds-button-unfilled-border: var(--color-border-on-bold-background-secondary);\n}\n\n.button-unfilled--background-strong {\n --ds-button-unfilled-fg: var(--color-foreground-on-strong-background-secondary);\n --ds-button-unfilled-fg-active: var(--color-foreground-on-strong-background-primary);\n --ds-button-unfilled-dot-ring: var(--color-background-strong-neutral);\n --ds-button-unfilled-border: var(--color-border-on-strong-background-secondary);\n}\n\n.button-unfilled--background-translucent {\n --ds-button-unfilled-fg: var(--color-translucent-foreground-secondary);\n --ds-button-unfilled-fg-active: var(--color-translucent-foreground-primary);\n --ds-button-unfilled-dot-ring: var(--color-translucent-translucent);\n --ds-button-unfilled-border: var(--color-translucent-border-secondary);\n}\n\n.button-unfilled--background-inverted {\n --ds-button-unfilled-fg: var(--color-inverted-foreground-secondary);\n --ds-button-unfilled-fg-active: var(--color-inverted-foreground-primary);\n --ds-button-unfilled-dot-ring: var(--color-inverted-background);\n --ds-button-unfilled-border: var(--color-inverted-border-secondary);\n}\n\n.button-unfilled--background-media {\n --ds-button-unfilled-fg: var(--color-media-foreground-secondary);\n --ds-button-unfilled-fg-active: var(--color-media-foreground-primary);\n --ds-button-unfilled-dot-ring: var(--color-media-background);\n --ds-button-unfilled-border: var(--color-media-border-secondary);\n}\n\n.button-unfilled--on-always-dark {\n --ds-button-unfilled-fg: var(--color-always-dark-foreground-secondary);\n --ds-button-unfilled-fg-active: var(--color-always-dark-foreground-primary);\n --ds-button-unfilled-dot-ring: var(--color-always-dark-background);\n --ds-button-unfilled-border: var(--color-always-dark-border-secondary);\n}\n\n/*\n * After surface ring defaults: selected fill remaps the knock-out to the active\n * wash so the badge halo matches the selected background.\n */\n.button-unfilled.ds-interaction-fill--selected {\n --ds-button-unfilled-dot-ring: var(--ds-interaction-active);\n}\n","import { Component, Element, Event, EventEmitter, h, Host, Method, Prop, State, Watch } from '@stencil/core';\nimport { controlWidthClass } from '../../utils';\nimport { beginElevatedControlPress } from '../../utils/control-press';\nimport { renderButtonContent } from '../../utils/button-render';\nimport type { ControlInsetDepth } from '../../utils/control-text';\nimport { observeTableCaptionCompact } from '../../utils/table-caption-compact';\nimport type {\n ButtonPopup,\n ButtonSize,\n ButtonVariant,\n ButtonWidth,\n} from '../../utils/button-types';\n\nexport type ButtonUnfilledBackground =\n | 'faint'\n | 'medium'\n | 'bold'\n | 'strong'\n | 'translucent'\n | 'inverted'\n | 'media'\n | 'always-dark';\n\nexport type ButtonUnfilledVariant = ButtonVariant;\nexport type ButtonUnfilledSize = ButtonSize;\nexport type ButtonUnfilledWidth = ButtonWidth;\nexport type ButtonUnfilledPopup = ButtonPopup;\n\n@Component({\n tag: 'ds-button-unfilled',\n styleUrl: 'ButtonUnfilled.css',\n scoped: true,\n})\nexport class ButtonUnfilled {\n @Element() el!: HTMLElement;\n\n /**\n * Content layout. Default is label-only; pass `icon` for icon-only chrome\n * (nav / tool rails) or `icon-label` for leading icon + text.\n */\n @Prop() variant: ButtonUnfilledVariant = 'label';\n\n /** Control density (height, padding, icon, type). */\n @Prop() size: ButtonUnfilledSize = 'md';\n\n /** Use reduced outer geometry when nested inside a control of the same size. */\n @Prop() isInset: boolean = false;\n\n /** Single removes 4px overall; double removes 8px overall (xs stays single). */\n @Prop() insetDepth: ControlInsetDepth = 'single';\n\n /** Width fit — hug content (default) or fill the parent. */\n @Prop() width: ButtonUnfilledWidth = 'hug';\n\n /** Visible text for `label` / `icon-label` variants. */\n @Prop() label: string = '';\n\n /** Icon name passed to <ds-icon> for `icon` / `icon-label` variants. */\n @Prop() icon: string = '';\n\n /**\n * Owner-controlled visual emphasis inside a composite. This does not add\n * toggle semantics and does not emit dsChange.\n */\n @Prop() isActive: boolean = false;\n\n /**\n * When active, render the selected interaction fill.\n * Default `true` for general UI. Shell chrome (nav / tool rails) should pass\n * `false` so selection is foreground-only (primary color, no fill).\n */\n @Prop() activeFill: boolean = true;\n\n /** Show a 1px secondary inset border. Default on; shell chrome can pass `false`. */\n @Prop() hasBorder: boolean = true;\n\n /** Use the half-radius treatment instead of the default control radius. */\n @Prop() rounded: boolean = false;\n\n /**\n * Scale down during a physical pointer press.\n * Disable when an owning composite requires fixed child or background geometry.\n */\n @Prop() pressScale: boolean = true;\n\n /** Show a notification dot at the top-right of the icon zone (icon variant only). */\n @Prop() dot: boolean = false;\n\n /** Disables interaction. */\n @Prop() isInactive: boolean = false;\n\n /** Shows an inline loader and prevents interaction without applying inactive opacity. */\n @Prop() isLoading: boolean = false;\n\n /** Native button type. */\n @Prop() type: 'button' | 'submit' | 'reset' = 'button';\n\n /** Actual parent surface context. Omit on primary and secondary surfaces. */\n @Prop() background: ButtonUnfilledBackground | undefined;\n\n /** Accessible name override. Required for icon-only buttons. */\n @Prop({ attribute: 'aria-label' }) ariaLabel: string | null = null;\n @Prop() controls: string | undefined;\n /**\n * Controlled disclosure or popup state forwarded to `aria-expanded`.\n * Popup triggers hold only the pressed wash while open; their resting\n * foreground is unchanged. Ordinary disclosures remain visually neutral.\n */\n @Prop() expanded: boolean | undefined;\n @Prop() haspopup: ButtonUnfilledPopup | undefined;\n /**\n * Controlled state for a genuine toggle button. Adds aria-pressed, promotes\n * active styling, and makes activation emit dsChange with the requested state.\n */\n @Prop() pressed: boolean | undefined;\n\n /**\n * Collapse the visible label and chevron to an icon-only control when the\n * owning `ds-table` caption is narrower than 900px. The trigger omits those\n * parts rather than clipping them.\n */\n @Prop({ reflect: true }) collapseLabel: boolean = false;\n\n /**\n * Mark the button as a Menu trigger. Implies `aria-haspopup=\"menu\"` and covers\n * both menu-button shapes:\n *\n * - `label` / `icon-label` — the action *has* a menu; a trailing chevron carries\n * the affordance.\n * - `icon` — the button *is* a menu. No chevron is added, so the glyph must\n * convey the menu on its own. Use `Ellipses` for generic more-options;\n * use a specific icon when the menu has a named purpose, such as\n * `Table` for Customize table.\n *\n * Use `haspopup` directly for non-menu popups.\n */\n @Prop() hasMenu: boolean = false;\n\n /**\n * Native `tabindex` for roving keyboard groups in shell chrome.\n * Omit for the default button tab stop (`0`).\n */\n @Prop({ attribute: 'tab-index' }) focusTabIndex?: number;\n\n @Event() dsClick!: EventEmitter<MouseEvent>;\n @Event() dsChange!: EventEmitter<boolean>;\n\n @State() private captionCompact = false;\n\n private buttonEl: HTMLButtonElement | null = null;\n private captionCompactDisconnect: (() => void) | undefined;\n\n componentDidLoad(): void {\n this.syncCaptionCompactObserver();\n }\n\n disconnectedCallback(): void {\n this.disconnectCaptionCompactObserver();\n }\n\n @Watch('collapseLabel')\n onCollapseLabelChange() {\n this.syncCaptionCompactObserver();\n }\n\n @Method()\n async setFocus() {\n this.buttonEl?.focus();\n }\n\n private handleClick = (event: MouseEvent) => {\n if (this.isInactive || this.isLoading) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n this.dsClick.emit(event);\n if (this.pressed !== undefined) this.dsChange.emit(!this.pressed);\n };\n\n private get captionIconOnly(): boolean {\n return (\n this.collapseLabel &&\n this.captionCompact &&\n this.variant === 'icon-label' &&\n Boolean(this.icon)\n );\n }\n\n private get visualVariant(): ButtonUnfilledVariant {\n return this.captionIconOnly ? 'icon' : this.variant;\n }\n\n private get showDot(): boolean {\n return this.variant === 'icon' && this.dot && !this.isLoading;\n }\n\n private syncCaptionCompactObserver(): void {\n this.disconnectCaptionCompactObserver();\n if (!this.collapseLabel) {\n if (this.captionCompact) this.captionCompact = false;\n return;\n }\n this.captionCompactDisconnect = observeTableCaptionCompact(this.el, compact => {\n if (this.captionCompact !== compact) this.captionCompact = compact;\n });\n }\n\n private disconnectCaptionCompactObserver(): void {\n this.captionCompactDisconnect?.();\n this.captionCompactDisconnect = undefined;\n }\n\n private get resolvedHaspopup(): ButtonUnfilledPopup | undefined {\n return this.haspopup ?? (this.hasMenu ? 'menu' : undefined);\n }\n\n private get doubleInset(): boolean {\n return this.isInset && this.insetDepth === 'double' && this.size !== 'xs';\n }\n\n /** Only popup triggers hold a pressed visual while expanded. */\n private get expandedPopup(): boolean {\n return this.expanded === true && this.resolvedHaspopup !== undefined && !this.isInactive;\n }\n\n private get visuallyActive(): boolean {\n return this.isActive || this.pressed === true;\n }\n\n /** Knock-out ring: selected fill → active wash; otherwise surface token. */\n private get dotRing(): string {\n if ((this.isActive || this.pressed === true) && this.activeFill) {\n return 'var(--ds-interaction-active)';\n }\n return 'var(--ds-button-unfilled-dot-ring)';\n }\n\n private get accessibleName(): string | undefined {\n if (this.ariaLabel) return this.ariaLabel;\n if (this.isLoading && this.variant === 'label' && this.label) return this.label;\n return undefined;\n }\n\n render() {\n const bg = this.background;\n const cls: Record<string, boolean> = {\n 'button-unfilled': true,\n 'ds-button': true,\n 'ds-focus-ring-inset': true,\n 'ds-control-press-scale': this.pressScale,\n 'ds-interaction-fill': true,\n 'ds-interaction-fill--selected':\n (this.isActive || this.pressed === true) &&\n this.activeFill &&\n !this.isInactive,\n 'ds-interaction-fill--on-faint': bg === 'faint',\n 'ds-interaction-fill--on-medium': bg === 'medium',\n 'ds-interaction-fill--on-bold': bg === 'bold',\n 'ds-interaction-fill--on-strong': bg === 'strong',\n 'ds-interaction-fill--on-translucent': bg === 'translucent',\n 'ds-interaction-fill--on-inverted': bg === 'inverted',\n 'ds-interaction-fill--on-media': bg === 'media',\n 'ds-interaction-fill--on-always-dark': bg === 'always-dark',\n 'button-unfilled--active': this.visuallyActive,\n 'button-unfilled--expanded': this.expandedPopup,\n 'ds-button--expanded': this.expandedPopup,\n 'button-unfilled--bordered': this.hasBorder,\n 'ds-button--bordered': this.hasBorder,\n 'button-unfilled--rounded': this.rounded,\n 'ds-button--rounded': this.rounded,\n 'ds-control-inactive': this.isInactive,\n 'ds-control--lg': this.size === 'lg',\n 'ds-control--md': this.size === 'md',\n 'ds-control--sm': this.size === 'sm',\n 'ds-control--xs': this.size === 'xs',\n 'ds-control--inset': this.isInset && !this.doubleInset,\n 'ds-control--inset-double': this.doubleInset,\n 'ds-control-frame': true,\n 'button-unfilled--icon': this.visualVariant === 'icon',\n 'ds-button--icon': this.visualVariant === 'icon',\n 'button-unfilled--label': this.visualVariant === 'label',\n 'button-unfilled--icon-label': this.visualVariant === 'icon-label',\n 'button-unfilled--background-faint': bg === 'faint',\n 'button-unfilled--background-medium': bg === 'medium',\n 'button-unfilled--background-bold': bg === 'bold',\n 'button-unfilled--background-strong': bg === 'strong',\n 'button-unfilled--background-translucent': bg === 'translucent',\n 'button-unfilled--background-inverted': bg === 'inverted',\n 'button-unfilled--background-media': bg === 'media',\n 'button-unfilled--on-always-dark': bg === 'always-dark',\n };\n\n return (\n <Host\n class={{\n 'button-unfilled-host': true,\n 'button-unfilled-host--icon': this.visualVariant === 'icon',\n 'ds-button-host--icon': this.visualVariant === 'icon',\n 'ds-control--lg': this.size === 'lg',\n 'ds-control--md': this.size === 'md',\n 'ds-control--sm': this.size === 'sm',\n 'ds-control--xs': this.size === 'xs',\n 'ds-control--inset': this.isInset && !this.doubleInset,\n 'ds-control--inset-double': this.doubleInset,\n 'ds-table-caption-control': this.collapseLabel,\n 'ds-table-caption-control--compact': this.captionIconOnly,\n ...controlWidthClass(this.width),\n }}\n tabIndex={-1}\n >\n <button\n ref={el => {\n this.buttonEl = el ?? null;\n }}\n type={this.type}\n class={cls}\n disabled={this.isInactive}\n tabIndex={this.focusTabIndex ?? 0}\n aria-label={this.accessibleName}\n aria-busy={this.isLoading ? 'true' : undefined}\n aria-disabled={this.isLoading ? 'true' : undefined}\n aria-controls={this.controls}\n aria-expanded={this.expanded === undefined ? undefined : String(this.expanded)}\n aria-haspopup={this.resolvedHaspopup}\n aria-pressed={this.pressed === undefined ? undefined : String(this.pressed)}\n onPointerDown={event =>\n beginElevatedControlPress(\n event,\n this.pressScale && !this.isInactive && !this.isLoading,\n )\n }\n onClick={this.handleClick}\n >\n {renderButtonContent({\n namespace: 'button-unfilled',\n variant: this.visualVariant,\n size: this.size,\n label: this.label,\n icon: this.icon,\n hasMenu: this.hasMenu,\n isLoading: this.isLoading,\n dot: {\n visible: this.showDot,\n background: this.dotRing,\n },\n })}\n </button>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}