@ds-mo/ui 15.0.0 → 15.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/NOTICE +6 -0
  2. package/README.md +7 -0
  3. package/dist/.package-ready.json +1 -1
  4. package/dist/agent-patterns.json +1 -1
  5. package/dist/agent.json +2320 -90
  6. package/dist/components/ds-agent-questionnaire.js +1 -1
  7. package/dist/components/ds-agent-response.js +1 -1
  8. package/dist/components/ds-banner.js +1 -1
  9. package/dist/components/ds-banner.js.map +1 -1
  10. package/dist/components/ds-card-chart.js +1 -1
  11. package/dist/components/ds-card-chart.js.map +1 -1
  12. package/dist/components/ds-card-overview.js +1 -1
  13. package/dist/components/ds-card-overview.js.map +1 -1
  14. package/dist/components/ds-card-setting.js +1 -1
  15. package/dist/components/ds-card-setting.js.map +1 -1
  16. package/dist/components/ds-chart.js +1 -1
  17. package/dist/components/ds-chart.js.map +1 -1
  18. package/dist/components/ds-checkbox.js +1 -1
  19. package/dist/components/ds-conversation-list-item.js +1 -1
  20. package/dist/components/ds-conversation-list-item.js.map +1 -1
  21. package/dist/components/ds-data-filter.js +1 -1
  22. package/dist/components/ds-data-preferences.js +1 -1
  23. package/dist/components/ds-data-saved-views.js +1 -1
  24. package/dist/components/ds-data-search.js +1 -1
  25. package/dist/components/ds-data-search.js.map +1 -1
  26. package/dist/components/ds-filter-menu.js +1 -1
  27. package/dist/components/ds-message-scroller.js.map +1 -1
  28. package/dist/components/ds-mobile-sheet-nav.js +1 -1
  29. package/dist/components/ds-pagination.js +1 -1
  30. package/dist/components/ds-scroll-overlay.js.map +1 -1
  31. package/dist/components/ds-select.js +1 -1
  32. package/dist/components/ds-shell-app.js +1 -1
  33. package/dist/components/ds-table.js +1 -1
  34. package/dist/components/p-0FYD2bev.js.map +1 -1
  35. package/dist/components/{p-Dpr2y6_S.js → p-B_jdoM7e.js} +2 -2
  36. package/dist/components/{p-CElUM-xU.js → p-C6xVxqOn.js} +2 -2
  37. package/dist/components/{p-MG4lcN0D.js → p-CdGXzRP8.js} +2 -2
  38. package/dist/components/{p-D6Wl3dRO.js → p-Cqc2U1ZQ.js} +2 -2
  39. package/dist/components/{p-D6Wl3dRO.js.map → p-Cqc2U1ZQ.js.map} +1 -1
  40. package/dist/components/{p-Nc76seSq.js → p-DEW7r0U9.js} +2 -2
  41. package/dist/components/{p-IEq_06J0.js → p-Dfs98tpL.js} +2 -2
  42. package/dist/components/{p-IEq_06J0.js.map → p-Dfs98tpL.js.map} +1 -1
  43. package/dist/components/p-ZhP2tVmM.js.map +1 -1
  44. package/dist/components/p-etifxiDc.js.map +1 -1
  45. package/dist/docs/components.json +1 -1
  46. package/dist/lint/STYLELINT-LICENSE +20 -0
  47. package/dist/lint/THIRD-PARTY-NOTICES +553 -0
  48. package/dist/lint/index.d.ts +7 -0
  49. package/dist/lint/index.js +51385 -0
  50. package/dist/lint/types.d.ts +13 -0
  51. package/dist/mcp-data/registry/agent-activity.json +6 -1
  52. package/dist/mcp-data/registry/agent-questionnaire.json +6 -1
  53. package/dist/mcp-data/registry/agent-response.json +12 -1
  54. package/dist/mcp-data/registry/agent-source-list.json +6 -1
  55. package/dist/mcp-data/registry/agent-tool-call.json +6 -1
  56. package/dist/mcp-data/registry/attachment-list.json +6 -1
  57. package/dist/mcp-data/registry/avatar.json +21 -1
  58. package/dist/mcp-data/registry/badge.json +30 -2
  59. package/dist/mcp-data/registry/banner.json +28 -2
  60. package/dist/mcp-data/registry/bar-action.json +24 -1
  61. package/dist/mcp-data/registry/bar-nav.json +6 -1
  62. package/dist/mcp-data/registry/bar-page-title.json +24 -1
  63. package/dist/mcp-data/registry/bar-title.json +26 -1
  64. package/dist/mcp-data/registry/bar-workflow.json +24 -1
  65. package/dist/mcp-data/registry/breadcrumb.json +6 -1
  66. package/dist/mcp-data/registry/button-filled.json +68 -1
  67. package/dist/mcp-data/registry/button-inverted.json +64 -1
  68. package/dist/mcp-data/registry/button-unfilled.json +66 -1
  69. package/dist/mcp-data/registry/calendar.json +15 -2
  70. package/dist/mcp-data/registry/card-action-center.json +24 -1
  71. package/dist/mcp-data/registry/card-chart.json +37 -2
  72. package/dist/mcp-data/registry/card-navigation.json +36 -1
  73. package/dist/mcp-data/registry/card-overview.json +27 -2
  74. package/dist/mcp-data/registry/card-setting.json +35 -2
  75. package/dist/mcp-data/registry/card-settings-scope.json +24 -1
  76. package/dist/mcp-data/registry/chart-legend.json +6 -1
  77. package/dist/mcp-data/registry/chart.json +7 -2
  78. package/dist/mcp-data/registry/checkbox.json +38 -2
  79. package/dist/mcp-data/registry/chip.json +50 -1
  80. package/dist/mcp-data/registry/code-block.json +30 -1
  81. package/dist/mcp-data/registry/conversation-list-item.json +25 -2
  82. package/dist/mcp-data/registry/conversation-list-section.json +14 -1
  83. package/dist/mcp-data/registry/conversation-list.json +6 -1
  84. package/dist/mcp-data/registry/data-customize.json +26 -1
  85. package/dist/mcp-data/registry/data-filter.json +26 -1
  86. package/dist/mcp-data/registry/data-group.json +26 -1
  87. package/dist/mcp-data/registry/data-preferences.json +26 -1
  88. package/dist/mcp-data/registry/data-saved-views.json +26 -1
  89. package/dist/mcp-data/registry/data-search.json +27 -2
  90. package/dist/mcp-data/registry/data-sort.json +26 -1
  91. package/dist/mcp-data/registry/data-toolbar.json +14 -1
  92. package/dist/mcp-data/registry/divider.json +6 -1
  93. package/dist/mcp-data/registry/empty-state.json +6 -1
  94. package/dist/mcp-data/registry/field.json +14 -1
  95. package/dist/mcp-data/registry/filter-menu.json +48 -1
  96. package/dist/mcp-data/registry/icon.json +21 -1
  97. package/dist/mcp-data/registry/input-date.json +48 -1
  98. package/dist/mcp-data/registry/input-time.json +48 -1
  99. package/dist/mcp-data/registry/input.json +48 -1
  100. package/dist/mcp-data/registry/loader.json +21 -1
  101. package/dist/mcp-data/registry/markdown.json +17 -1
  102. package/dist/mcp-data/registry/menu.json +26 -1
  103. package/dist/mcp-data/registry/message-actions.json +6 -1
  104. package/dist/mcp-data/registry/message-bubble.json +26 -1
  105. package/dist/mcp-data/registry/message-composer.json +24 -1
  106. package/dist/mcp-data/registry/message-scroller.json +12 -1
  107. package/dist/mcp-data/registry/message.json +6 -1
  108. package/dist/mcp-data/registry/mobile-bar-nav.json +24 -1
  109. package/dist/mcp-data/registry/mobile-header.json +26 -1
  110. package/dist/mcp-data/registry/mobile-section-switcher.json +26 -1
  111. package/dist/mcp-data/registry/mobile-sheet-nav.json +27 -2
  112. package/dist/mcp-data/registry/modal.json +24 -1
  113. package/dist/mcp-data/registry/pagination.json +6 -1
  114. package/dist/mcp-data/registry/panel-nav.json +28 -2
  115. package/dist/mcp-data/registry/panel-sub-nav.json +25 -0
  116. package/dist/mcp-data/registry/panel-tool-header.json +24 -1
  117. package/dist/mcp-data/registry/panel-tool-search.json +24 -1
  118. package/dist/mcp-data/registry/panel-tools.json +25 -1
  119. package/dist/mcp-data/registry/paper-texture.json +6 -1
  120. package/dist/mcp-data/registry/radio.json +35 -1
  121. package/dist/mcp-data/registry/registry.json +2319 -89
  122. package/dist/mcp-data/registry/score.json +38 -1
  123. package/dist/mcp-data/registry/scroll-overlay.json +6 -1
  124. package/dist/mcp-data/registry/select.json +52 -1
  125. package/dist/mcp-data/registry/shell-app.json +26 -1
  126. package/dist/mcp-data/registry/shell-page.json +6 -1
  127. package/dist/mcp-data/registry/shell-tools.json +25 -1
  128. package/dist/mcp-data/registry/skeleton.json +41 -1
  129. package/dist/mcp-data/registry/slider.json +42 -1
  130. package/dist/mcp-data/registry/swatch-picker.json +24 -1
  131. package/dist/mcp-data/registry/switch.json +37 -1
  132. package/dist/mcp-data/registry/tab-group.json +49 -1
  133. package/dist/mcp-data/registry/table.json +102 -1
  134. package/dist/mcp-data/registry/tag.json +52 -1
  135. package/dist/mcp-data/registry/text.json +22 -1
  136. package/dist/mcp-data/registry/textarea.json +38 -1
  137. package/dist/mcp-data/registry/time-picker.json +14 -1
  138. package/dist/mcp-data/registry/toast.json +24 -1
  139. package/dist/mcp-data/registry/tooltip-chart.json +24 -1
  140. package/dist/mcp-data/registry/tooltip.json +26 -1
  141. package/dist/mcp-data/registry/typing-indicator.json +6 -1
  142. package/package.json +32 -7
  143. /package/dist/components/{p-Dpr2y6_S.js.map → p-B_jdoM7e.js.map} +0 -0
  144. /package/dist/components/{p-CElUM-xU.js.map → p-C6xVxqOn.js.map} +0 -0
  145. /package/dist/components/{p-MG4lcN0D.js.map → p-CdGXzRP8.js.map} +0 -0
  146. /package/dist/components/{p-Nc76seSq.js.map → p-DEW7r0U9.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"names":["mobileSheetNavCss","CONTEXT_TABS","id","label","icon","variant","nextSheetId","MobileSheetNav","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","open","browseContext","dashboardGroups","settingsGroups","currentUrl","presentation","routeSelectionActive","navigationLabel","dashboardLabel","settingsLabel","accountLabel","helpLabel","showAccount","expandedParentId","instanceId","handleContextChange","event","next","detail","dsBrowseContextChange","emit","groups","selection","derivePanelNavSelectionFromUrl","flatMap","group","items","componentWillLoad","syncExpandedParent","parentId","handleOpenChange","requestAnimationFrame","selected","el","querySelector","first","focus","preventScroll","handleKeyDown","key","preventDefault","dsClose","renderItem","item","disclosure","children","length","expanded","h","type","class","undefined","String","childrenId","onClick","dsAreaSelect","name","size","color","as","emphasis","lineTruncation","dot","hasRing","encodeURIComponent","renderChild","parent","child","index","childId","disabled","isInactive","style","dsNavChildSelect","href","onKeyDown","CSS","escape","renderBranchDivider","position","renderBranch","count","hasChildren","inert","role","map","renderLogo","viewBox","fill","xmlns","focusable","d","renderHeaderDestination","side","activeFill","hasBorder","onDsClick","render","contextTabs","Host","tabs","value","width","onDsChange","filter"],"sources":["src/wc/components/MobileSheetNav/MobileSheetNav.css?tag=ds-mobile-sheet-nav&encapsulation=scoped","src/wc/components/MobileSheetNav/MobileSheetNav.tsx"],"sourcesContent":["@import '../../utils/radius.css';\n@import '../../utils/control-density.css';\n@import '../../utils/chrome-layout.css';\n@import '../../utils/focus-ring.css';\n@import '../../utils/interaction-fill.css';\n@import '../../utils/nav-disclosure.css';\n\n:host {\n display: block;\n min-width: 0;\n min-height: 0;\n height: 100%;\n background: var(--color-background-primary);\n}\n\n:host(:not([open])) {\n display: none;\n}\n\n.mobile-sheet-nav {\n display: grid;\n grid-template-rows: auto minmax(0, 1fr);\n height: 100%;\n min-height: 0;\n background: var(--color-background-primary);\n}\n\n.mobile-sheet-nav__header {\n position: relative;\n grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);\n}\n\n.mobile-sheet-nav__header--expanded-context {\n grid-template-columns:\n minmax(var(--dimension-size-500), 1fr)\n minmax(0, 4fr)\n minmax(var(--dimension-size-500), 1fr);\n}\n\n.mobile-sheet-nav__header--expanded-context .mobile-sheet-nav__context {\n width: 100%;\n}\n\n.mobile-sheet-nav__header::after {\n content: '';\n position: absolute;\n inset-inline: 0;\n inset-block-end: 0;\n height: var(--dimension-stroke-width-012);\n background: var(--color-border-tertiary);\n pointer-events: none;\n}\n\n.mobile-sheet-nav__brand {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n min-width: 0;\n}\n\n.mobile-sheet-nav__logo {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--dimension-size-500);\n height: var(--dimension-size-500);\n padding: var(--dimension-space-100);\n box-sizing: border-box;\n color: var(--color-foreground-primary);\n}\n\n.mobile-sheet-nav__logo-mark {\n width: var(--dimension-iconography-lg);\n height: var(--dimension-iconography-lg);\n flex: 0 0 auto;\n}\n\n.mobile-sheet-nav__context {\n justify-self: center;\n}\n\n.mobile-sheet-nav__actions {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--dimension-space-050);\n min-width: 0;\n}\n\n.mobile-sheet-nav__body {\n min-height: 0;\n overflow: auto;\n overscroll-behavior: contain;\n}\n\n.mobile-sheet-nav__sections {\n display: grid;\n gap: var(--dimension-space-400);\n}\n\n.mobile-sheet-nav__items {\n display: grid;\n gap: var(--dimension-space-100);\n}\n\n.mobile-sheet-nav__item {\n appearance: none;\n width: 100%;\n height: var(--ds-control-height);\n min-height: var(--ds-control-height);\n padding-inline: var(--ds-control-padding-inline);\n border: 0;\n border-radius: var(--ds-control-radius);\n background: transparent;\n color: var(--color-foreground-secondary);\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: var(--ds-control-gap);\n cursor: default;\n text-align: start;\n box-sizing: border-box;\n}\n\n.mobile-sheet-nav__item--selected {\n color: var(--color-foreground-primary);\n}\n\n.mobile-sheet-nav__item-label {\n min-width: 0;\n padding-inline: var(--ds-control-label-inset);\n}\n\n.mobile-sheet-nav__dot {\n margin-inline-start: auto;\n}\n\n.mobile-sheet-nav__children {\n display: flex;\n flex-direction: column;\n gap: var(--dimension-space-100);\n min-height: 0;\n overflow: hidden;\n}\n\n.mobile-sheet-nav__child {\n flex: 0 0 var(--ds-control-height);\n padding-inline-start: calc(\n var(--ds-control-padding-inline) + var(--dimension-iconography-lg) + var(--ds-control-gap)\n );\n}\n\n.mobile-sheet-nav__child:first-child {\n margin-block-start: var(--dimension-space-100);\n}\n\n.mobile-sheet-nav__child:disabled {\n color: var(--color-foreground-tertiary);\n}\n\n.mobile-sheet-nav__parent--muted {\n color: var(--color-foreground-secondary);\n}\n\n.mobile-sheet-nav__divider-line {\n display: block;\n height: var(--dimension-stroke-width-012);\n margin-inline: var(--dimension-space-100);\n background: var(--color-border-tertiary);\n}\n\n.mobile-sheet-nav__divider--before .mobile-sheet-nav__divider-line {\n margin-block: var(--dimension-space-050) var(--dimension-space-150);\n}\n\n.mobile-sheet-nav__divider--after .mobile-sheet-nav__divider-line {\n margin-block: var(--dimension-space-150) var(--dimension-space-050);\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport type { NavChromeStyle } from '../../shell/nav-chrome';\nimport { derivePanelNavSelectionFromUrl } from '../PanelNav/panel-nav-utils';\nimport type {\n PanelNavChildItem,\n PanelNavChildSelectDetail,\n PanelNavGroup,\n PanelNavItem,\n PanelNavPresentation,\n} from '../PanelNav/panel-nav-types';\n\ntype MobileSheetNavHeaderDestinationId = 'account' | 'help';\n\nconst CONTEXT_TABS = [\n { id: 'dashboard', label: 'Dashboard', icon: 'Dashboard', variant: 'icon' as const },\n { id: 'settings', label: 'Settings', icon: 'Gear', variant: 'icon' as const },\n];\nlet nextSheetId = 0;\n\n@Component({\n tag: 'ds-mobile-sheet-nav',\n styleUrl: 'MobileSheetNav.css',\n scoped: true,\n})\nexport class MobileSheetNav {\n @Element() el!: HTMLElement;\n\n @Prop({ reflect: true }) open: boolean = false;\n @Prop() browseContext: NavChromeStyle = 'dashboard';\n @Prop() dashboardGroups: PanelNavGroup[] = [];\n @Prop() settingsGroups: PanelNavGroup[] = [];\n @Prop() currentUrl: string = '';\n /** Flat area navigation or inline disclosure of each area's child routes. */\n @Prop() presentation: PanelNavPresentation = 'flat';\n /** Whether the router-derived current area owns the active mobile stage. */\n @Prop() routeSelectionActive: boolean = true;\n @Prop() navigationLabel: string = 'Application navigation';\n @Prop() dashboardLabel: string = 'Dashboard';\n @Prop() settingsLabel: string = 'Settings';\n @Prop() accountLabel: string = 'Account';\n @Prop() helpLabel: string = 'Help & Support';\n /** Show the optional Account shortcut in the sheet header. */\n @Prop() showAccount: boolean = true;\n\n @Event() dsAreaSelect!: EventEmitter<string>;\n /** Selecting a child requests routing; expanding its parent never navigates. */\n @Event() dsNavChildSelect!: EventEmitter<PanelNavChildSelectDetail>;\n @Event() dsBrowseContextChange!: EventEmitter<NavChromeStyle>;\n @Event() dsClose!: EventEmitter<void>;\n @State() private expandedParentId = '';\n private readonly instanceId = nextSheetId++;\n\n private get groups(): PanelNavGroup[] {\n return this.browseContext === 'settings' ? this.settingsGroups : this.dashboardGroups;\n }\n\n private get selection() {\n return derivePanelNavSelectionFromUrl(\n this.routeSelectionActive ? this.currentUrl : '',\n this.groups.flatMap(group => group.items)\n );\n }\n\n componentWillLoad() {\n this.syncExpandedParent();\n }\n\n @Watch('presentation')\n @Watch('currentUrl')\n @Watch('browseContext')\n @Watch('routeSelectionActive')\n syncExpandedParent() {\n this.expandedParentId = this.presentation === 'nested' ? this.selection.parentId : '';\n }\n\n @Watch('open')\n handleOpenChange(open: boolean) {\n if (!open) return;\n this.syncExpandedParent();\n requestAnimationFrame(() => {\n const selected = this.el.querySelector<HTMLElement>('[aria-current=\"page\"]');\n const first = this.el.querySelector<HTMLElement>('.mobile-sheet-nav__item:not(:disabled)');\n (selected ?? first)?.focus({ preventScroll: true });\n });\n }\n\n @Listen('keydown')\n handleKeyDown(event: KeyboardEvent) {\n if (!this.open || event.key !== 'Escape') return;\n event.preventDefault();\n this.dsClose.emit();\n }\n\n private handleContextChange = (event: CustomEvent<string>) => {\n const next = event.detail === 'settings' ? 'settings' : 'dashboard';\n if (next === this.browseContext) return;\n this.dsBrowseContextChange.emit(next);\n };\n\n private renderItem(item: PanelNavItem) {\n const selected = item.id === this.selection.parentId;\n const disclosure = this.presentation === 'nested' && !!item.children?.length;\n const expanded = disclosure && item.id === this.expandedParentId;\n return (\n <button\n id={this.parentId(item.id)}\n type=\"button\"\n class={{\n 'mobile-sheet-nav__item': true,\n 'mobile-sheet-nav__item--selected': selected,\n 'mobile-sheet-nav__parent--muted':\n this.presentation === 'nested' &&\n this.expandedParentId !== '' &&\n this.expandedParentId !== item.id,\n 'ds-control--lg': true,\n 'ds-focus-ring-inset': true,\n 'ds-interaction-fill': true,\n }}\n aria-current={selected && !disclosure ? 'page' : undefined}\n aria-expanded={disclosure ? String(expanded) : undefined}\n aria-controls={disclosure ? this.childrenId(item.id) : undefined}\n onClick={() =>\n disclosure\n ? (this.expandedParentId = expanded ? '' : item.id)\n : this.dsAreaSelect.emit(item.id)\n }\n >\n <ds-icon class=\"ds-interaction-fill__content\" name={item.icon} size=\"lg\" color=\"inherit\" />\n <ds-text\n class=\"mobile-sheet-nav__item-label ds-interaction-fill__content\"\n as=\"span\"\n variant=\"text-body-large\"\n emphasis={selected}\n color=\"inherit\"\n lineTruncation={1}\n >\n {item.label}\n </ds-text>\n {item.dot && (\n <ds-badge\n class=\"mobile-sheet-nav__dot ds-interaction-fill__content\"\n variant=\"dot\"\n hasRing={false}\n label=\"\"\n aria-hidden=\"true\"\n />\n )}\n </button>\n );\n }\n\n private parentId(id: string) {\n return `mobile-sheet-${this.instanceId}-${encodeURIComponent(id)}`;\n }\n private childrenId(id: string) {\n return `${this.parentId(id)}-children`;\n }\n\n private renderChild(parent: PanelNavItem, child: PanelNavChildItem, index: number) {\n const selected = parent.id === this.selection.parentId && child.id === this.selection.childId;\n return (\n <button\n type=\"button\"\n disabled={child.isInactive}\n class={{\n 'mobile-sheet-nav__item': true,\n 'mobile-sheet-nav__child': true,\n 'mobile-sheet-nav__item--selected': selected,\n 'ds-nav-disclosure__item': true,\n 'ds-control--lg': true,\n 'ds-focus-ring-inset': true,\n 'ds-interaction-fill': true,\n }}\n style={{\n '--ds-nav-disclosure-index': String(index),\n '--ds-nav-disclosure-reverse-index': String((parent.children?.length ?? 0) - index - 1),\n }}\n aria-current={selected ? 'page' : undefined}\n onClick={() => {\n if (!child.isInactive)\n this.dsNavChildSelect.emit({\n parentId: parent.id,\n childId: child.id,\n href: child.href,\n });\n }}\n onKeyDown={(event: KeyboardEvent) => {\n if (event.key === 'ArrowLeft') {\n event.preventDefault();\n this.expandedParentId = '';\n this.el.querySelector<HTMLElement>(`#${CSS.escape(this.parentId(parent.id))}`)?.focus();\n }\n }}\n >\n <ds-text\n class=\"mobile-sheet-nav__item-label ds-interaction-fill__content\"\n as=\"span\"\n variant=\"text-body-large\"\n emphasis={selected}\n color=\"inherit\"\n lineTruncation={1}\n >\n {child.label}\n </ds-text>\n {child.dot ? (\n <ds-badge\n class=\"mobile-sheet-nav__dot ds-interaction-fill__content\"\n variant=\"dot\"\n hasRing={false}\n label=\"\"\n aria-hidden=\"true\"\n />\n ) : null}\n </button>\n );\n }\n\n private renderBranchDivider(position: 'before' | 'after', expanded: boolean) {\n return (\n <div\n class={{\n 'ds-nav-disclosure-divider': true,\n 'ds-nav-disclosure-divider--open': expanded,\n 'mobile-sheet-nav__divider': true,\n [`mobile-sheet-nav__divider--${position}`]: true,\n }}\n aria-hidden=\"true\"\n >\n <div class=\"ds-nav-disclosure-divider__clip\">\n <span class=\"mobile-sheet-nav__divider-line\" />\n </div>\n </div>\n );\n }\n\n private renderBranch(item: PanelNavItem, index: number, count: number) {\n const hasChildren = this.presentation === 'nested' && !!item.children?.length;\n const expanded = hasChildren && this.expandedParentId === item.id;\n return (\n <div key={item.id} class=\"mobile-sheet-nav__branch\">\n {hasChildren && index > 0 ? this.renderBranchDivider('before', expanded) : null}\n {this.renderItem(item)}\n {this.presentation === 'nested' && item.children?.length ? (\n <div\n class={{ 'ds-nav-disclosure': true, 'ds-nav-disclosure--open': expanded }}\n inert={!expanded ? true : undefined}\n aria-hidden={!expanded ? 'true' : undefined}\n >\n <div\n class=\"mobile-sheet-nav__children\"\n id={this.childrenId(item.id)}\n role=\"group\"\n aria-labelledby={this.parentId(item.id)}\n >\n {item.children.map((child, index) => this.renderChild(item, child, index))}\n </div>\n </div>\n ) : null}\n {hasChildren && index < count - 1 ? this.renderBranchDivider('after', expanded) : null}\n </div>\n );\n }\n\n private renderLogo() {\n return (\n <span class=\"mobile-sheet-nav__logo\" aria-hidden=\"true\">\n {/* eslint-disable-next-line local/prefer-ds-icon -- Motive brand mark is not part of the IcoMo runtime catalog. */}\n <svg\n class=\"mobile-sheet-nav__logo-mark\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n focusable=\"false\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M11.1159 4.31537H7.67021L2.53401 13.0703H0V15.6875H4.02716L8.24319 8.49978V15.6846H11.6342L15.8289 8.47829V15.6846H18.7122V4.3125H15.2559L11.1159 11.3648V4.31537Z\"\n fill=\"currentColor\"\n />\n </svg>\n </span>\n );\n }\n\n private renderHeaderDestination(\n id: MobileSheetNavHeaderDestinationId,\n icon: string,\n label: string\n ) {\n return (\n <ds-tooltip label={label} side=\"bottom\" size=\"sm\">\n <ds-button-unfilled\n variant=\"icon\"\n size=\"lg\"\n icon={icon}\n aria-label={label}\n activeFill={false}\n hasBorder={false}\n onDsClick={() => this.dsAreaSelect.emit(id)}\n />\n </ds-tooltip>\n );\n }\n\n render() {\n const contextTabs = [\n { ...CONTEXT_TABS[0], label: this.dashboardLabel },\n { ...CONTEXT_TABS[1], label: this.settingsLabel },\n ];\n\n return (\n <Host aria-hidden={this.open ? undefined : 'true'} inert={this.open ? undefined : true}>\n <section id=\"ds-mobile-sheet-nav\" class=\"mobile-sheet-nav\">\n <header\n class={{\n 'mobile-sheet-nav__header': true,\n 'mobile-sheet-nav__header--expanded-context': !this.showAccount,\n 'ds-chrome-grid': true,\n 'ds-chrome-space--md': true,\n }}\n >\n <div class=\"mobile-sheet-nav__brand\">{this.renderLogo()}</div>\n <ds-tab-group\n class=\"mobile-sheet-nav__context\"\n tabs={contextTabs}\n value={this.browseContext}\n size=\"lg\"\n width={this.showAccount ? 'hug' : 'fill'}\n aria-label=\"Browse context\"\n onDsChange={this.handleContextChange}\n />\n <div class=\"mobile-sheet-nav__actions\">\n {this.renderHeaderDestination('help', 'QuestionCircle', this.helpLabel)}\n {this.showAccount\n ? this.renderHeaderDestination('account', 'PersonCircle', this.accountLabel)\n : null}\n </div>\n </header>\n\n <nav\n class=\"mobile-sheet-nav__body ds-chrome-column ds-chrome-space--md\"\n aria-label={this.navigationLabel}\n >\n <div class=\"mobile-sheet-nav__sections\">\n {this.groups\n .filter(group => group.items.length > 0)\n .map(group => (\n <div class=\"mobile-sheet-nav__items\">\n {group.items.map((item, index) =>\n this.renderBranch(item, index, group.items.length)\n )}\n </div>\n ))}\n </div>\n </nav>\n </section>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["mobileSheetNavCss","CONTEXT_TABS","id","label","icon","variant","nextSheetId","MobileSheetNav","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","open","browseContext","dashboardGroups","settingsGroups","currentUrl","presentation","routeSelectionActive","navigationLabel","dashboardLabel","settingsLabel","accountLabel","helpLabel","showAccount","expandedParentId","instanceId","handleContextChange","event","next","detail","dsBrowseContextChange","emit","groups","selection","derivePanelNavSelectionFromUrl","flatMap","group","items","componentWillLoad","syncExpandedParent","parentId","handleOpenChange","requestAnimationFrame","selected","el","querySelector","first","focus","preventScroll","handleKeyDown","key","preventDefault","dsClose","renderItem","item","disclosure","children","length","expanded","h","type","class","undefined","String","childrenId","onClick","dsAreaSelect","name","size","color","as","emphasis","lineTruncation","dot","hasRing","encodeURIComponent","renderChild","parent","child","index","childId","disabled","isInactive","style","dsNavChildSelect","href","onKeyDown","CSS","escape","renderBranchDivider","position","renderBranch","count","hasChildren","inert","role","map","renderLogo","viewBox","fill","xmlns","focusable","d","renderHeaderDestination","side","activeFill","hasBorder","onDsClick","render","contextTabs","Host","tabs","value","width","onDsChange","filter"],"sources":["src/wc/components/MobileSheetNav/MobileSheetNav.css?tag=ds-mobile-sheet-nav&encapsulation=scoped","src/wc/components/MobileSheetNav/MobileSheetNav.tsx"],"sourcesContent":["@import '../../utils/radius.css';\n@import '../../utils/control-density.css';\n@import '../../utils/chrome-layout.css';\n@import '../../utils/focus-ring.css';\n@import '../../utils/interaction-fill.css';\n@import '../../utils/nav-disclosure.css';\n\n:host {\n display: block;\n min-width: 0;\n min-height: 0;\n height: 100%;\n background: var(--color-background-primary);\n}\n\n:host(:not([open])) {\n display: none;\n}\n\n.mobile-sheet-nav {\n display: grid;\n grid-template-rows: auto minmax(0, 1fr);\n height: 100%;\n min-height: 0;\n background: var(--color-background-primary);\n}\n\n.mobile-sheet-nav__header {\n position: relative;\n grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);\n}\n\n.mobile-sheet-nav__header--expanded-context {\n grid-template-columns:\n minmax(var(--dimension-size-500), 1fr)\n minmax(0, 4fr)\n minmax(var(--dimension-size-500), 1fr);\n}\n\n.mobile-sheet-nav__header--expanded-context .mobile-sheet-nav__context {\n width: 100%;\n}\n\n.mobile-sheet-nav__header::after {\n content: '';\n position: absolute;\n inset-inline: 0;\n inset-block-end: 0;\n height: var(--dimension-stroke-width-012);\n background: var(--color-border-tertiary);\n pointer-events: none;\n}\n\n.mobile-sheet-nav__brand {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n min-width: 0;\n}\n\n.mobile-sheet-nav__logo {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--dimension-size-500);\n height: var(--dimension-size-500);\n padding: var(--dimension-space-100);\n box-sizing: border-box;\n color: var(--color-foreground-primary);\n}\n\n.mobile-sheet-nav__logo-mark {\n width: var(--dimension-iconography-lg);\n height: var(--dimension-iconography-lg);\n flex: 0 0 auto;\n}\n\n.mobile-sheet-nav__context {\n justify-self: center;\n}\n\n.mobile-sheet-nav__actions {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--dimension-space-050);\n min-width: 0;\n}\n\n.mobile-sheet-nav__body {\n min-height: 0;\n overflow: auto;\n overscroll-behavior: contain;\n}\n\n.mobile-sheet-nav__sections {\n display: grid;\n gap: var(--dimension-space-400);\n}\n\n.mobile-sheet-nav__items {\n display: grid;\n gap: var(--dimension-space-100);\n}\n\n.mobile-sheet-nav__item {\n appearance: none;\n width: 100%;\n height: var(--ds-control-height);\n min-height: var(--ds-control-height);\n padding-inline: var(--ds-control-padding-inline);\n border: 0;\n border-radius: var(--ds-control-radius);\n background: transparent;\n color: var(--color-foreground-secondary);\n display: flex;\n align-items: center;\n justify-content: flex-start;\n gap: var(--ds-control-gap);\n cursor: default;\n text-align: start;\n box-sizing: border-box;\n}\n\n.mobile-sheet-nav__item--selected {\n color: var(--color-foreground-primary);\n}\n\n.mobile-sheet-nav__item-label {\n min-width: 0;\n padding-inline: var(--ds-control-label-inset);\n}\n\n.mobile-sheet-nav__dot {\n margin-inline-start: auto;\n}\n\n.mobile-sheet-nav__children {\n display: flex;\n flex-direction: column;\n gap: var(--dimension-space-100);\n min-height: 0;\n overflow: hidden;\n}\n\n.mobile-sheet-nav__child {\n flex: 0 0 var(--ds-control-height);\n padding-inline-start: calc(\n var(--ds-control-padding-inline) + var(--dimension-iconography-lg) + var(--ds-control-gap)\n );\n}\n\n.mobile-sheet-nav__child:first-child {\n margin-block-start: var(--dimension-space-100);\n}\n\n.mobile-sheet-nav__child:disabled {\n color: var(--color-foreground-tertiary);\n}\n\n.mobile-sheet-nav__parent--muted {\n color: var(--color-foreground-secondary);\n}\n\n.mobile-sheet-nav__divider-line {\n display: block;\n height: var(--dimension-stroke-width-012);\n margin-inline: var(--dimension-space-100);\n background: var(--color-border-tertiary);\n}\n\n.mobile-sheet-nav__divider--before .mobile-sheet-nav__divider-line {\n margin-block: var(--dimension-space-050) var(--dimension-space-150);\n}\n\n.mobile-sheet-nav__divider--after .mobile-sheet-nav__divider-line {\n margin-block: var(--dimension-space-150) var(--dimension-space-050);\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport type { NavChromeStyle } from '../../shell/nav-chrome';\nimport { derivePanelNavSelectionFromUrl } from '../PanelNav/panel-nav-utils';\nimport type {\n PanelNavChildItem,\n PanelNavChildSelectDetail,\n PanelNavGroup,\n PanelNavItem,\n PanelNavPresentation,\n} from '../PanelNav/panel-nav-types';\n\ntype MobileSheetNavHeaderDestinationId = 'account' | 'help';\n\nconst CONTEXT_TABS = [\n { id: 'dashboard', label: 'Dashboard', icon: 'Dashboard', variant: 'icon' as const },\n { id: 'settings', label: 'Settings', icon: 'Gear', variant: 'icon' as const },\n];\nlet nextSheetId = 0;\n\n@Component({\n tag: 'ds-mobile-sheet-nav',\n styleUrl: 'MobileSheetNav.css',\n scoped: true,\n})\nexport class MobileSheetNav {\n @Element() el!: HTMLElement;\n\n @Prop({ reflect: true }) open: boolean = false;\n @Prop() browseContext: NavChromeStyle = 'dashboard';\n @Prop() dashboardGroups: PanelNavGroup[] = [];\n @Prop() settingsGroups: PanelNavGroup[] = [];\n @Prop() currentUrl: string = '';\n /** Flat area navigation or inline disclosure of each area's child routes. */\n @Prop() presentation: PanelNavPresentation = 'flat';\n /** Whether the router-derived current area owns the active mobile stage. */\n @Prop() routeSelectionActive: boolean = true;\n @Prop() navigationLabel: string = 'Application navigation';\n @Prop() dashboardLabel: string = 'Dashboard';\n @Prop() settingsLabel: string = 'Settings';\n @Prop() accountLabel: string = 'Account';\n @Prop() helpLabel: string = 'Help & Support';\n /** Show the optional Account shortcut in the sheet header. */\n @Prop() showAccount: boolean = true;\n\n @Event() dsAreaSelect!: EventEmitter<string>;\n /** Selecting a child requests routing; expanding its parent never navigates. */\n @Event() dsNavChildSelect!: EventEmitter<PanelNavChildSelectDetail>;\n @Event() dsBrowseContextChange!: EventEmitter<NavChromeStyle>;\n @Event() dsClose!: EventEmitter<void>;\n @State() private expandedParentId = '';\n private readonly instanceId = nextSheetId++;\n\n private get groups(): PanelNavGroup[] {\n return this.browseContext === 'settings' ? this.settingsGroups : this.dashboardGroups;\n }\n\n private get selection() {\n return derivePanelNavSelectionFromUrl(\n this.routeSelectionActive ? this.currentUrl : '',\n this.groups.flatMap(group => group.items)\n );\n }\n\n componentWillLoad() {\n this.syncExpandedParent();\n }\n\n @Watch('presentation')\n @Watch('currentUrl')\n @Watch('browseContext')\n @Watch('routeSelectionActive')\n syncExpandedParent() {\n this.expandedParentId = this.presentation === 'nested' ? this.selection.parentId : '';\n }\n\n @Watch('open')\n handleOpenChange(open: boolean) {\n if (!open) return;\n this.syncExpandedParent();\n requestAnimationFrame(() => {\n const selected = this.el.querySelector<HTMLElement>('[aria-current=\"page\"]');\n const first = this.el.querySelector<HTMLElement>('.mobile-sheet-nav__item:not(:disabled)');\n (selected ?? first)?.focus({ preventScroll: true });\n });\n }\n\n @Listen('keydown')\n handleKeyDown(event: KeyboardEvent) {\n if (!this.open || event.key !== 'Escape') return;\n event.preventDefault();\n this.dsClose.emit();\n }\n\n private handleContextChange = (event: CustomEvent<string>) => {\n const next = event.detail === 'settings' ? 'settings' : 'dashboard';\n if (next === this.browseContext) return;\n this.dsBrowseContextChange.emit(next);\n };\n\n private renderItem(item: PanelNavItem) {\n const selected = item.id === this.selection.parentId;\n const disclosure = this.presentation === 'nested' && !!item.children?.length;\n const expanded = disclosure && item.id === this.expandedParentId;\n return (\n <button\n id={this.parentId(item.id)}\n type=\"button\"\n class={{\n 'mobile-sheet-nav__item': true,\n 'mobile-sheet-nav__item--selected': selected,\n 'mobile-sheet-nav__parent--muted':\n this.presentation === 'nested' &&\n this.expandedParentId !== '' &&\n this.expandedParentId !== item.id,\n 'ds-control--lg': true,\n 'ds-focus-ring-inset': true,\n 'ds-interaction-fill': true,\n }}\n aria-current={selected && !disclosure ? 'page' : undefined}\n aria-expanded={disclosure ? String(expanded) : undefined}\n aria-controls={disclosure ? this.childrenId(item.id) : undefined}\n onClick={() =>\n disclosure\n ? (this.expandedParentId = expanded ? '' : item.id)\n : this.dsAreaSelect.emit(item.id)\n }\n >\n <ds-icon class=\"ds-interaction-fill__content\" name={item.icon} size=\"lg\" color=\"inherit\" />\n <ds-text\n class=\"mobile-sheet-nav__item-label ds-interaction-fill__content\"\n as=\"span\"\n variant=\"text-body-large\"\n emphasis={selected}\n color=\"inherit\"\n lineTruncation={1}\n >\n {item.label}\n </ds-text>\n {item.dot && (\n <ds-badge\n class=\"mobile-sheet-nav__dot ds-interaction-fill__content\"\n variant=\"dot\"\n hasRing={false}\n label=\"\"\n aria-hidden=\"true\"\n />\n )}\n </button>\n );\n }\n\n private parentId(id: string) {\n return `mobile-sheet-${this.instanceId}-${encodeURIComponent(id)}`;\n }\n private childrenId(id: string) {\n return `${this.parentId(id)}-children`;\n }\n\n private renderChild(parent: PanelNavItem, child: PanelNavChildItem, index: number) {\n const selected = parent.id === this.selection.parentId && child.id === this.selection.childId;\n return (\n <button\n type=\"button\"\n disabled={child.isInactive}\n class={{\n 'mobile-sheet-nav__item': true,\n 'mobile-sheet-nav__child': true,\n 'mobile-sheet-nav__item--selected': selected,\n 'ds-nav-disclosure__item': true,\n 'ds-control--lg': true,\n 'ds-focus-ring-inset': true,\n 'ds-interaction-fill': true,\n }}\n style={{\n '--ds-nav-disclosure-index': String(index),\n '--ds-nav-disclosure-reverse-index': String((parent.children?.length ?? 0) - index - 1),\n }}\n aria-current={selected ? 'page' : undefined}\n onClick={() => {\n if (!child.isInactive)\n this.dsNavChildSelect.emit({\n parentId: parent.id,\n childId: child.id,\n href: child.href,\n });\n }}\n onKeyDown={(event: KeyboardEvent) => {\n if (event.key === 'ArrowLeft') {\n event.preventDefault();\n this.expandedParentId = '';\n this.el.querySelector<HTMLElement>(`#${CSS.escape(this.parentId(parent.id))}`)?.focus();\n }\n }}\n >\n <ds-text\n class=\"mobile-sheet-nav__item-label ds-interaction-fill__content\"\n as=\"span\"\n variant=\"text-body-large\"\n emphasis={selected}\n color=\"inherit\"\n lineTruncation={1}\n >\n {child.label}\n </ds-text>\n {child.dot ? (\n <ds-badge\n class=\"mobile-sheet-nav__dot ds-interaction-fill__content\"\n variant=\"dot\"\n hasRing={false}\n label=\"\"\n aria-hidden=\"true\"\n />\n ) : null}\n </button>\n );\n }\n\n private renderBranchDivider(position: 'before' | 'after', expanded: boolean) {\n return (\n <div\n class={{\n 'ds-nav-disclosure-divider': true,\n 'ds-nav-disclosure-divider--open': expanded,\n 'mobile-sheet-nav__divider': true,\n [`mobile-sheet-nav__divider--${position}`]: true,\n }}\n aria-hidden=\"true\"\n >\n <div class=\"ds-nav-disclosure-divider__clip\">\n <span class=\"mobile-sheet-nav__divider-line\" />\n </div>\n </div>\n );\n }\n\n private renderBranch(item: PanelNavItem, index: number, count: number) {\n const hasChildren = this.presentation === 'nested' && !!item.children?.length;\n const expanded = hasChildren && this.expandedParentId === item.id;\n return (\n <div key={item.id} class=\"mobile-sheet-nav__branch\">\n {hasChildren && index > 0 ? this.renderBranchDivider('before', expanded) : null}\n {this.renderItem(item)}\n {this.presentation === 'nested' && item.children?.length ? (\n <div\n class={{ 'ds-nav-disclosure': true, 'ds-nav-disclosure--open': expanded }}\n inert={!expanded ? true : undefined}\n aria-hidden={!expanded ? 'true' : undefined}\n >\n <div\n class=\"mobile-sheet-nav__children\"\n id={this.childrenId(item.id)}\n role=\"group\"\n aria-labelledby={this.parentId(item.id)}\n >\n {item.children.map((child, index) => this.renderChild(item, child, index))}\n </div>\n </div>\n ) : null}\n {hasChildren && index < count - 1 ? this.renderBranchDivider('after', expanded) : null}\n </div>\n );\n }\n\n private renderLogo() {\n return (\n <span class=\"mobile-sheet-nav__logo\" aria-hidden=\"true\">\n {/* eslint-disable-next-line compomo/prefer-ds-icon -- Motive brand mark is not part of the IcoMo runtime catalog. */}\n <svg\n class=\"mobile-sheet-nav__logo-mark\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n focusable=\"false\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M11.1159 4.31537H7.67021L2.53401 13.0703H0V15.6875H4.02716L8.24319 8.49978V15.6846H11.6342L15.8289 8.47829V15.6846H18.7122V4.3125H15.2559L11.1159 11.3648V4.31537Z\"\n fill=\"currentColor\"\n />\n </svg>\n </span>\n );\n }\n\n private renderHeaderDestination(\n id: MobileSheetNavHeaderDestinationId,\n icon: string,\n label: string\n ) {\n return (\n <ds-tooltip label={label} side=\"bottom\" size=\"sm\">\n <ds-button-unfilled\n variant=\"icon\"\n size=\"lg\"\n icon={icon}\n aria-label={label}\n activeFill={false}\n hasBorder={false}\n onDsClick={() => this.dsAreaSelect.emit(id)}\n />\n </ds-tooltip>\n );\n }\n\n render() {\n const contextTabs = [\n { ...CONTEXT_TABS[0], label: this.dashboardLabel },\n { ...CONTEXT_TABS[1], label: this.settingsLabel },\n ];\n\n return (\n <Host aria-hidden={this.open ? undefined : 'true'} inert={this.open ? undefined : true}>\n <section id=\"ds-mobile-sheet-nav\" class=\"mobile-sheet-nav\">\n <header\n class={{\n 'mobile-sheet-nav__header': true,\n 'mobile-sheet-nav__header--expanded-context': !this.showAccount,\n 'ds-chrome-grid': true,\n 'ds-chrome-space--md': true,\n }}\n >\n <div class=\"mobile-sheet-nav__brand\">{this.renderLogo()}</div>\n <ds-tab-group\n class=\"mobile-sheet-nav__context\"\n tabs={contextTabs}\n value={this.browseContext}\n size=\"lg\"\n width={this.showAccount ? 'hug' : 'fill'}\n aria-label=\"Browse context\"\n onDsChange={this.handleContextChange}\n />\n <div class=\"mobile-sheet-nav__actions\">\n {this.renderHeaderDestination('help', 'QuestionCircle', this.helpLabel)}\n {this.showAccount\n ? this.renderHeaderDestination('account', 'PersonCircle', this.accountLabel)\n : null}\n </div>\n </header>\n\n <nav\n class=\"mobile-sheet-nav__body ds-chrome-column ds-chrome-space--md\"\n aria-label={this.navigationLabel}\n >\n <div class=\"mobile-sheet-nav__sections\">\n {this.groups\n .filter(group => group.items.length > 0)\n .map(group => (\n <div class=\"mobile-sheet-nav__items\">\n {group.items.map((item, index) =>\n this.renderBranch(item, index, group.items.length)\n )}\n </div>\n ))}\n </div>\n </nav>\n </section>\n </Host>\n );\n }\n}\n"],"mappings":"wVAAA,MAAMA,EAAoB,IAAM,qvqBCwBhC,MAAMC,EAAe,CACnB,CAAEC,GAAI,YAAaC,MAAO,YAAaC,KAAM,YAAaC,QAAS,QACnE,CAAEH,GAAI,WAAYC,MAAO,WAAYC,KAAM,OAAQC,QAAS,SAE9D,IAAIC,EAAc,E,MAOLC,EAAcC,EAAA,MAAAD,UAAAE,EAL3B,WAAAC,CAAAC,G,wOAQ2BC,KAAAC,KAAgB,MACjCD,KAAAE,cAAgC,YAChCF,KAAAG,gBAAmC,GACnCH,KAAAI,eAAkC,GAClCJ,KAAAK,WAAqB,GAErBL,KAAAM,aAAqC,OAErCN,KAAAO,qBAAgC,KAChCP,KAAAQ,gBAA0B,yBAC1BR,KAAAS,eAAyB,YACzBT,KAAAU,cAAwB,WACxBV,KAAAW,aAAuB,UACvBX,KAAAY,UAAoB,iBAEpBZ,KAAAa,YAAuB,KAOdb,KAAAc,iBAAmB,GACnBd,KAAAe,WAAarB,IA2CtBM,KAAAgB,oBAAuBC,IAC7B,MAAMC,EAAOD,EAAME,SAAW,WAAa,WAAa,YACxD,GAAID,IAASlB,KAAKE,cAAe,OACjCF,KAAKoB,sBAAsBC,KAAKH,EAAK,CAuQxC,CAnTC,UAAYI,GACV,OAAOtB,KAAKE,gBAAkB,WAAaF,KAAKI,eAAiBJ,KAAKG,e,CAGxE,aAAYoB,GACV,OAAOC,EACLxB,KAAKO,qBAAuBP,KAAKK,WAAa,GAC9CL,KAAKsB,OAAOG,SAAQC,GAASA,EAAMC,Q,CAIvC,iBAAAC,GACE5B,KAAK6B,oB,CAOP,kBAAAA,GACE7B,KAAKc,iBAAmBd,KAAKM,eAAiB,SAAWN,KAAKuB,UAAUO,SAAW,E,CAIrF,gBAAAC,CAAiB9B,GACf,IAAKA,EAAM,OACXD,KAAK6B,qBACLG,uBAAsB,KACpB,MAAMC,EAAWjC,KAAKkC,GAAGC,cAA2B,yBACpD,MAAMC,EAAQpC,KAAKkC,GAAGC,cAA2B,2CAChDF,GAAYG,IAAQC,MAAM,CAAEC,cAAe,MAAO,G,CAKvD,aAAAC,CAActB,GACZ,IAAKjB,KAAKC,MAAQgB,EAAMuB,MAAQ,SAAU,OAC1CvB,EAAMwB,iBACNzC,KAAK0C,QAAQrB,M,CASP,UAAAsB,CAAWC,GACjB,MAAMX,EAAWW,EAAKtD,KAAOU,KAAKuB,UAAUO,SAC5C,MAAMe,EAAa7C,KAAKM,eAAiB,YAAcsC,EAAKE,UAAUC,OACtE,MAAMC,EAAWH,GAAcD,EAAKtD,KAAOU,KAAKc,iBAChD,OACEmC,EAAA,UACE3D,GAAIU,KAAK8B,SAASc,EAAKtD,IACvB4D,KAAK,SACLC,MAAO,CACL,yBAA0B,KAC1B,mCAAoClB,EACpC,kCACEjC,KAAKM,eAAiB,UACtBN,KAAKc,mBAAqB,IAC1Bd,KAAKc,mBAAqB8B,EAAKtD,GACjC,iBAAkB,KAClB,sBAAuB,KACvB,sBAAuB,MACxB,eACa2C,IAAaY,EAAa,OAASO,UAAS,gBAC3CP,EAAaQ,OAAOL,GAAYI,UAAS,gBACzCP,EAAa7C,KAAKsD,WAAWV,EAAKtD,IAAM8D,UACvDG,QAAS,IACPV,EACK7C,KAAKc,iBAAmBkC,EAAW,GAAKJ,EAAKtD,GAC9CU,KAAKwD,aAAanC,KAAKuB,EAAKtD,KAGlC2D,EAAA,WAASE,MAAM,+BAA+BM,KAAMb,EAAKpD,KAAMkE,KAAK,KAAKC,MAAM,YAC/EV,EAAA,WACEE,MAAM,4DACNS,GAAG,OACHnE,QAAQ,kBACRoE,SAAU5B,EACV0B,MAAM,UACNG,eAAgB,GAEflB,EAAKrD,OAEPqD,EAAKmB,KACJd,EAAA,YACEE,MAAM,qDACN1D,QAAQ,MACRuE,QAAS,MACTzE,MAAM,GAAE,cACI,S,CAOd,QAAAuC,CAASxC,GACf,MAAO,gBAAgBU,KAAKe,cAAckD,mBAAmB3E,I,CAEvD,UAAAgE,CAAWhE,GACjB,MAAO,GAAGU,KAAK8B,SAASxC,a,CAGlB,WAAA4E,CAAYC,EAAsBC,EAA0BC,GAClE,MAAMpC,EAAWkC,EAAO7E,KAAOU,KAAKuB,UAAUO,UAAYsC,EAAM9E,KAAOU,KAAKuB,UAAU+C,QACtF,OACErB,EAAA,UACEC,KAAK,SACLqB,SAAUH,EAAMI,WAChBrB,MAAO,CACL,yBAA0B,KAC1B,0BAA2B,KAC3B,mCAAoClB,EACpC,0BAA2B,KAC3B,iBAAkB,KAClB,sBAAuB,KACvB,sBAAuB,MAEzBwC,MAAO,CACL,4BAA6BpB,OAAOgB,GACpC,oCAAqChB,QAAQc,EAAOrB,UAAUC,QAAU,GAAKsB,EAAQ,IACtF,eACapC,EAAW,OAASmB,UAClCG,QAAS,KACP,IAAKa,EAAMI,WACTxE,KAAK0E,iBAAiBrD,KAAK,CACzBS,SAAUqC,EAAO7E,GACjBgF,QAASF,EAAM9E,GACfqF,KAAMP,EAAMO,MACZ,EAENC,UAAY3D,IACV,GAAIA,EAAMuB,MAAQ,YAAa,CAC7BvB,EAAMwB,iBACNzC,KAAKc,iBAAmB,GACxBd,KAAKkC,GAAGC,cAA2B,IAAI0C,IAAIC,OAAO9E,KAAK8B,SAASqC,EAAO7E,SAAS+C,O,IAIpFY,EAAA,WACEE,MAAM,4DACNS,GAAG,OACHnE,QAAQ,kBACRoE,SAAU5B,EACV0B,MAAM,UACNG,eAAgB,GAEfM,EAAM7E,OAER6E,EAAML,IACLd,EAAA,YACEE,MAAM,qDACN1D,QAAQ,MACRuE,QAAS,MACTzE,MAAM,GAAE,cACI,SAEZ,K,CAKF,mBAAAwF,CAAoBC,EAA8BhC,GACxD,OACEC,EAAA,OACEE,MAAO,CACL,4BAA6B,KAC7B,kCAAmCH,EACnC,4BAA6B,KAC7B,CAAC,8BAA8BgC,KAAa,MAC7C,cACW,QAEZ/B,EAAA,OAAKE,MAAM,mCACTF,EAAA,QAAME,MAAM,oC,CAMZ,YAAA8B,CAAarC,EAAoByB,EAAea,GACtD,MAAMC,EAAcnF,KAAKM,eAAiB,YAAcsC,EAAKE,UAAUC,OACvE,MAAMC,EAAWmC,GAAenF,KAAKc,mBAAqB8B,EAAKtD,GAC/D,OACE2D,EAAA,OAAKT,IAAKI,EAAKtD,GAAI6D,MAAM,4BACtBgC,GAAed,EAAQ,EAAIrE,KAAK+E,oBAAoB,SAAU/B,GAAY,KAC1EhD,KAAK2C,WAAWC,GAChB5C,KAAKM,eAAiB,UAAYsC,EAAKE,UAAUC,OAChDE,EAAA,OACEE,MAAO,CAAE,oBAAqB,KAAM,0BAA2BH,GAC/DoC,OAAQpC,EAAW,KAAOI,UAAS,eACrBJ,EAAW,OAASI,WAElCH,EAAA,OACEE,MAAM,6BACN7D,GAAIU,KAAKsD,WAAWV,EAAKtD,IACzB+F,KAAK,QAAO,kBACKrF,KAAK8B,SAASc,EAAKtD,KAEnCsD,EAAKE,SAASwC,KAAI,CAAClB,EAAOC,IAAUrE,KAAKkE,YAAYtB,EAAMwB,EAAOC,OAGrE,KACHc,GAAed,EAAQa,EAAQ,EAAIlF,KAAK+E,oBAAoB,QAAS/B,GAAY,K,CAKhF,UAAAuC,GACN,OACEtC,EAAA,QAAME,MAAM,yBAAwB,cAAa,QAE/CF,EAAA,OACEE,MAAM,8BACNqC,QAAQ,YACRC,KAAK,OACLC,MAAM,6BACNC,UAAU,QAAO,cACL,QAEZ1C,EAAA,QACE2C,EAAE,qKACFH,KAAK,kB,CAOP,uBAAAI,CACNvG,EACAE,EACAD,GAEA,OACE0D,EAAA,cAAY1D,MAAOA,EAAOuG,KAAK,SAASpC,KAAK,MAC3CT,EAAA,sBACExD,QAAQ,OACRiE,KAAK,KACLlE,KAAMA,EAAI,aACED,EACZwG,WAAY,MACZC,UAAW,MACXC,UAAW,IAAMjG,KAAKwD,aAAanC,KAAK/B,K,CAMhD,MAAA4G,GACE,MAAMC,EAAc,CAClB,IAAK9G,EAAa,GAAIE,MAAOS,KAAKS,gBAClC,IAAKpB,EAAa,GAAIE,MAAOS,KAAKU,gBAGpC,OACEuC,EAACmD,EAAI,CAAA5D,IAAA,yDAAcxC,KAAKC,KAAOmD,UAAY,OAAQgC,MAAOpF,KAAKC,KAAOmD,UAAY,MAChFH,EAAA,WAAAT,IAAA,2CAASlD,GAAG,sBAAsB6D,MAAM,oBACtCF,EAAA,UAAAT,IAAA,2CACEW,MAAO,CACL,2BAA4B,KAC5B,8CAA+CnD,KAAKa,YACpD,iBAAkB,KAClB,sBAAuB,OAGzBoC,EAAA,OAAAT,IAAA,2CAAKW,MAAM,2BAA2BnD,KAAKuF,cAC3CtC,EAAA,gBAAAT,IAAA,2CACEW,MAAM,4BACNkD,KAAMF,EACNG,MAAOtG,KAAKE,cACZwD,KAAK,KACL6C,MAAOvG,KAAKa,YAAc,MAAQ,OAAM,aAC7B,iBACX2F,WAAYxG,KAAKgB,sBAEnBiC,EAAA,OAAAT,IAAA,2CAAKW,MAAM,6BACRnD,KAAK6F,wBAAwB,OAAQ,iBAAkB7F,KAAKY,WAC5DZ,KAAKa,YACFb,KAAK6F,wBAAwB,UAAW,eAAgB7F,KAAKW,cAC7D,OAIRsC,EAAA,OAAAT,IAAA,2CACEW,MAAM,8DAA6D,aACvDnD,KAAKQ,iBAEjByC,EAAA,OAAAT,IAAA,2CAAKW,MAAM,8BACRnD,KAAKsB,OACHmF,QAAO/E,GAASA,EAAMC,MAAMoB,OAAS,IACrCuC,KAAI5D,GACHuB,EAAA,OAAKE,MAAM,2BACRzB,EAAMC,MAAM2D,KAAI,CAAC1C,EAAMyB,IACtBrE,KAAKiF,aAAarC,EAAMyB,EAAO3C,EAAMC,MAAMoB,gB","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["badgeCss","SURFACE_RING","primary","secondary","faint","medium","bold","strong","translucent","inverted","media","navigation","Badge","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","variant","count","max","surface","hasRing","render","isDot","h","Host","style","display","String","ring","background","class","badge","gradientBackground","as","emphasis","color","label"],"sources":["src/wc/components/Badge/Badge.css?tag=ds-badge&encapsulation=scoped","src/wc/components/Badge/Badge.tsx"],"sourcesContent":["@import '../../utils/visually-hidden.css';\n@import '../../utils/forced-colors.css';\n\n:host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n container-name: ds-badge-gradient;\n pointer-events: none;\n vertical-align: middle;\n\n --_badge-bg: var(--color-background-bold-brand);\n --_badge-fg: var(--color-foreground-on-bold-background-primary);\n --_badge-ring: var(--color-background-secondary);\n --_badge-ring-width: var(--dimension-stroke-width-018);\n --_badge-gradient-context: var(--ds-shell-gradient-context, flat);\n}\n\n:host(.badge--force-gradient-background) {\n --_badge-gradient-context: gradient;\n}\n\n:host(.badge--force-flat-background) {\n --_badge-gradient-context: flat;\n}\n\n.badge__mark {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n box-sizing: border-box;\n color: var(--_badge-fg);\n background: var(--_badge-bg);\n box-shadow: 0 0 0 var(--_badge-ring-width) var(--_badge-ring);\n white-space: nowrap;\n}\n\n:host(.badge--no-ring) {\n --_badge-ring-width: 0;\n}\n\n:host(.badge--dot) .badge__mark {\n width: var(--dimension-size-075);\n height: var(--dimension-size-075);\n border-radius: var(--dimension-radius-half);\n}\n\n:host(.badge--counter) .badge__mark {\n width: auto;\n min-width: var(--dimension-size-150);\n height: var(--dimension-size-150);\n padding: 0 var(--dimension-space-025);\n border-radius: var(--dimension-radius-half);\n}\n\n/* Shell gradient ring — base fill + wash donut (option 3). */\n@container ds-badge-gradient style(--_badge-gradient-context: gradient) {\n /* Match the scoped base rule's specificity; Stencil does not yet scope style-query selectors. */\n .badge__mark.badge__mark {\n position: relative;\n z-index: 0;\n box-shadow: none;\n isolation: isolate;\n }\n\n .badge__mark::before,\n .badge__mark::after {\n content: '';\n position: absolute;\n inset: calc(-1 * var(--_badge-ring-width));\n border-radius: inherit;\n box-sizing: border-box;\n padding: var(--_badge-ring-width);\n pointer-events: none;\n /* stylelint-disable color-no-hex -- mask luminance stops for ring cutout, not theme colors */\n -webkit-mask:\n linear-gradient(#fff 0 0) content-box,\n linear-gradient(#fff 0 0);\n -webkit-mask-composite: xor;\n mask:\n linear-gradient(#fff 0 0) content-box,\n linear-gradient(#fff 0 0);\n /* stylelint-enable color-no-hex */\n mask-composite: exclude;\n }\n\n .badge__mark::before {\n z-index: -2;\n background-color: var(--_badge-ring);\n }\n\n .badge__mark::after {\n z-index: -1;\n background-image: var(--ds-shell-gradient-image, none);\n background-size: var(--ds-shell-gradient-size, auto);\n background-position: 0 0;\n background-repeat: no-repeat;\n background-attachment: fixed;\n opacity: var(--ds-shell-gradient-opacity, 1);\n }\n}\n\n@media (forced-colors: active) {\n .badge__mark {\n color: var(--ds-forced-color-on-selected);\n background: var(--ds-forced-color-selected);\n box-shadow: none;\n outline: var(--_badge-ring-width) solid var(--ds-forced-color-surface);\n }\n\n .badge__mark::before,\n .badge__mark::after {\n display: none;\n }\n}\n","import { Component, Prop, h, Host } from '@stencil/core';\n\nexport type BadgeVariant = 'counter' | 'dot';\nexport type BadgeSurface =\n | 'primary'\n | 'secondary'\n | 'faint'\n | 'medium'\n | 'bold'\n | 'strong'\n | 'translucent'\n | 'inverted'\n | 'media'\n | 'navigation'\n | 'always-dark';\n\nconst SURFACE_RING: Record<BadgeSurface, string> = {\n primary: 'var(--color-background-primary)',\n secondary: 'var(--color-background-secondary)',\n faint: 'var(--color-background-faint-neutral)',\n medium: 'var(--color-background-medium-neutral)',\n bold: 'var(--color-background-bold-neutral)',\n strong: 'var(--color-background-strong-neutral)',\n translucent: 'var(--color-translucent-translucent)',\n inverted: 'var(--color-inverted-background)',\n media: 'var(--color-media-background)',\n navigation: 'var(--color-navigation-background)',\n 'always-dark': 'var(--color-always-dark-background)',\n};\n\n@Component({\n tag: 'ds-badge',\n styleUrl: 'Badge.css',\n scoped: true,\n})\nexport class Badge {\n /** Render as a compact counter or notification dot. */\n @Prop() variant: BadgeVariant = 'counter';\n\n /** Count shown for counter badges. Count 0 hides the badge. */\n @Prop() count: number = 0;\n\n /** Highest count shown before compacting to \"{max}+\". */\n @Prop() max: number = 9;\n\n /** Immediate backing surface matched by the ring around either variant. */\n @Prop() surface: BadgeSurface = 'primary';\n\n /** Direct ring background override for component-local surfaces. */\n @Prop() background: string | undefined;\n\n /** Show the separation ring when the badge overlaps an icon or other content. */\n @Prop() hasRing: boolean = true;\n\n /**\n * Ring samples the shell gradient stack (base fill + wash) instead of a flat\n * `box-shadow`. Omit to inherit ShellApp context; set true or false to override.\n *\n * The attribute must NOT start with `on` — Stencil's setAccessor routes any\n * unknown `on*` member down the event-listener path during attribute\n * reflection, calling addEventListener with a non-listener and throwing.\n */\n @Prop({ attribute: 'gradient-background', reflect: true }) gradientBackground?: boolean;\n\n /** Contextual supplemental text. Omit when the owner hides the badge from assistive technology. */\n @Prop() label: string | undefined;\n\n render() {\n const isDot = this.variant === 'dot';\n\n if (!isDot && this.count <= 0) return <Host style={{ display: 'none' }} />;\n\n const display = this.count > this.max ? `${this.max}+` : String(this.count);\n const ring = this.background ?? SURFACE_RING[this.surface];\n\n return (\n <Host\n class={{\n badge: true,\n 'badge--counter': !isDot,\n 'badge--dot': isDot,\n 'badge--no-ring': !this.hasRing,\n 'badge--force-gradient-background': this.gradientBackground === true,\n 'badge--force-flat-background': this.gradientBackground === false,\n }}\n style={{ '--_badge-ring': ring }}\n >\n <span class=\"badge__mark\" aria-hidden=\"true\">\n {!isDot && (\n <ds-text as=\"span\" variant=\"text-caption\" emphasis color=\"inherit\">\n {display}\n </ds-text>\n )}\n </span>\n {this.label && <span class=\"badge__a11y ds-visually-hidden\">{this.label}</span>}\n </Host>\n );\n }\n}\n"],"mappings":"+FAAA,MAAMA,EAAW,IAAM,k8FCgBvB,MAAMC,EAA6C,CACjDC,QAAS,kCACTC,UAAW,oCACXC,MAAO,wCACPC,OAAQ,yCACRC,KAAM,uCACNC,OAAQ,yCACRC,YAAa,uCACbC,SAAU,mCACVC,MAAO,gCACPC,WAAY,qCACZ,cAAe,uC,MAQJC,EAAKC,EAAA,MAAAD,UAAAE,EALlB,WAAAC,CAAAC,G,4CAOUC,KAAAC,QAAwB,UAGxBD,KAAAE,MAAgB,EAGhBF,KAAAG,IAAc,EAGdH,KAAAI,QAAwB,UAMxBJ,KAAAK,QAAmB,IA8C5B,CA/BC,MAAAC,GACE,MAAMC,EAAQP,KAAKC,UAAY,MAE/B,IAAKM,GAASP,KAAKE,OAAS,EAAG,OAAOM,EAACC,EAAI,CAACC,MAAO,CAAEC,QAAS,UAE9D,MAAMA,EAAUX,KAAKE,MAAQF,KAAKG,IAAM,GAAGH,KAAKG,OAASS,OAAOZ,KAAKE,OACrE,MAAMW,EAAOb,KAAKc,YAAc9B,EAAagB,KAAKI,SAElD,OACEI,EAACC,EAAI,CACHM,MAAO,CACLC,MAAO,KACP,kBAAmBT,EACnB,aAAcA,EACd,kBAAmBP,KAAKK,QACxB,mCAAoCL,KAAKiB,qBAAuB,KAChE,+BAAgCjB,KAAKiB,qBAAuB,OAE9DP,MAAO,CAAE,gBAAiBG,IAE1BL,EAAA,QAAMO,MAAM,cAAa,cAAa,SAClCR,GACAC,EAAA,WAASU,GAAG,OAAOjB,QAAQ,eAAekB,SAAQ,KAACC,MAAM,WACtDT,IAINX,KAAKqB,OAASb,EAAA,QAAMO,MAAM,kCAAkCf,KAAKqB,O","ignoreList":[]}
1
+ {"version":3,"names":["badgeCss","SURFACE_RING","primary","secondary","faint","medium","bold","strong","translucent","inverted","media","navigation","Badge","__stencil_proxyCustomElement","HTMLElement","constructor","registerHost","this","variant","count","max","surface","hasRing","render","isDot","h","Host","style","display","String","ring","background","class","badge","gradientBackground","as","emphasis","color","label"],"sources":["src/wc/components/Badge/Badge.css?tag=ds-badge&encapsulation=scoped","src/wc/components/Badge/Badge.tsx"],"sourcesContent":["@import '../../utils/visually-hidden.css';\n@import '../../utils/forced-colors.css';\n\n:host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n container-name: ds-badge-gradient;\n pointer-events: none;\n vertical-align: middle;\n\n --_badge-bg: var(--color-background-bold-brand);\n --_badge-fg: var(--color-foreground-on-bold-background-primary);\n --_badge-ring: var(--color-background-secondary);\n --_badge-ring-width: var(--dimension-stroke-width-018);\n --_badge-gradient-context: var(--ds-shell-gradient-context, flat);\n}\n\n:host(.badge--force-gradient-background) {\n --_badge-gradient-context: gradient;\n}\n\n:host(.badge--force-flat-background) {\n --_badge-gradient-context: flat;\n}\n\n.badge__mark {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n box-sizing: border-box;\n color: var(--_badge-fg);\n background: var(--_badge-bg);\n box-shadow: 0 0 0 var(--_badge-ring-width) var(--_badge-ring);\n white-space: nowrap;\n}\n\n:host(.badge--no-ring) {\n --_badge-ring-width: 0;\n}\n\n:host(.badge--dot) .badge__mark {\n width: var(--dimension-size-075);\n height: var(--dimension-size-075);\n border-radius: var(--dimension-radius-half);\n}\n\n:host(.badge--counter) .badge__mark {\n width: auto;\n min-width: var(--dimension-size-150);\n height: var(--dimension-size-150);\n padding: 0 var(--dimension-space-025);\n border-radius: var(--dimension-radius-half);\n}\n\n/* Shell gradient ring — base fill + wash donut (option 3). */\n@container ds-badge-gradient style(--_badge-gradient-context: gradient) {\n /* Match the scoped base rule's specificity; Stencil does not yet scope style-query selectors. */\n .badge__mark.badge__mark {\n position: relative;\n z-index: 0;\n box-shadow: none;\n isolation: isolate;\n }\n\n .badge__mark::before,\n .badge__mark::after {\n content: '';\n position: absolute;\n inset: calc(-1 * var(--_badge-ring-width));\n border-radius: inherit;\n box-sizing: border-box;\n padding: var(--_badge-ring-width);\n pointer-events: none;\n /* eslint-disable compomo/color-no-hex -- mask luminance stops for ring cutout, not theme colors */\n -webkit-mask:\n linear-gradient(#fff 0 0) content-box,\n linear-gradient(#fff 0 0);\n -webkit-mask-composite: xor;\n mask:\n linear-gradient(#fff 0 0) content-box,\n linear-gradient(#fff 0 0);\n /* eslint-enable compomo/color-no-hex */\n mask-composite: exclude;\n }\n\n .badge__mark::before {\n z-index: -2;\n background-color: var(--_badge-ring);\n }\n\n .badge__mark::after {\n z-index: -1;\n background-image: var(--ds-shell-gradient-image, none);\n background-size: var(--ds-shell-gradient-size, auto);\n background-position: 0 0;\n background-repeat: no-repeat;\n background-attachment: fixed;\n opacity: var(--ds-shell-gradient-opacity, 1);\n }\n}\n\n@media (forced-colors: active) {\n .badge__mark {\n color: var(--ds-forced-color-on-selected);\n background: var(--ds-forced-color-selected);\n box-shadow: none;\n outline: var(--_badge-ring-width) solid var(--ds-forced-color-surface);\n }\n\n .badge__mark::before,\n .badge__mark::after {\n display: none;\n }\n}\n","import { Component, Prop, h, Host } from '@stencil/core';\n\nexport type BadgeVariant = 'counter' | 'dot';\nexport type BadgeSurface =\n | 'primary'\n | 'secondary'\n | 'faint'\n | 'medium'\n | 'bold'\n | 'strong'\n | 'translucent'\n | 'inverted'\n | 'media'\n | 'navigation'\n | 'always-dark';\n\nconst SURFACE_RING: Record<BadgeSurface, string> = {\n primary: 'var(--color-background-primary)',\n secondary: 'var(--color-background-secondary)',\n faint: 'var(--color-background-faint-neutral)',\n medium: 'var(--color-background-medium-neutral)',\n bold: 'var(--color-background-bold-neutral)',\n strong: 'var(--color-background-strong-neutral)',\n translucent: 'var(--color-translucent-translucent)',\n inverted: 'var(--color-inverted-background)',\n media: 'var(--color-media-background)',\n navigation: 'var(--color-navigation-background)',\n 'always-dark': 'var(--color-always-dark-background)',\n};\n\n@Component({\n tag: 'ds-badge',\n styleUrl: 'Badge.css',\n scoped: true,\n})\nexport class Badge {\n /** Render as a compact counter or notification dot. */\n @Prop() variant: BadgeVariant = 'counter';\n\n /** Count shown for counter badges. Count 0 hides the badge. */\n @Prop() count: number = 0;\n\n /** Highest count shown before compacting to \"{max}+\". */\n @Prop() max: number = 9;\n\n /** Immediate backing surface matched by the ring around either variant. */\n @Prop() surface: BadgeSurface = 'primary';\n\n /** Direct ring background override for component-local surfaces. */\n @Prop() background: string | undefined;\n\n /** Show the separation ring when the badge overlaps an icon or other content. */\n @Prop() hasRing: boolean = true;\n\n /**\n * Ring samples the shell gradient stack (base fill + wash) instead of a flat\n * `box-shadow`. Omit to inherit ShellApp context; set true or false to override.\n *\n * The attribute must NOT start with `on` — Stencil's setAccessor routes any\n * unknown `on*` member down the event-listener path during attribute\n * reflection, calling addEventListener with a non-listener and throwing.\n */\n @Prop({ attribute: 'gradient-background', reflect: true }) gradientBackground?: boolean;\n\n /** Contextual supplemental text. Omit when the owner hides the badge from assistive technology. */\n @Prop() label: string | undefined;\n\n render() {\n const isDot = this.variant === 'dot';\n\n if (!isDot && this.count <= 0) return <Host style={{ display: 'none' }} />;\n\n const display = this.count > this.max ? `${this.max}+` : String(this.count);\n const ring = this.background ?? SURFACE_RING[this.surface];\n\n return (\n <Host\n class={{\n badge: true,\n 'badge--counter': !isDot,\n 'badge--dot': isDot,\n 'badge--no-ring': !this.hasRing,\n 'badge--force-gradient-background': this.gradientBackground === true,\n 'badge--force-flat-background': this.gradientBackground === false,\n }}\n style={{ '--_badge-ring': ring }}\n >\n <span class=\"badge__mark\" aria-hidden=\"true\">\n {!isDot && (\n <ds-text as=\"span\" variant=\"text-caption\" emphasis color=\"inherit\">\n {display}\n </ds-text>\n )}\n </span>\n {this.label && <span class=\"badge__a11y ds-visually-hidden\">{this.label}</span>}\n </Host>\n );\n }\n}\n"],"mappings":"+FAAA,MAAMA,EAAW,IAAM,k8FCgBvB,MAAMC,EAA6C,CACjDC,QAAS,kCACTC,UAAW,oCACXC,MAAO,wCACPC,OAAQ,yCACRC,KAAM,uCACNC,OAAQ,yCACRC,YAAa,uCACbC,SAAU,mCACVC,MAAO,gCACPC,WAAY,qCACZ,cAAe,uC,MAQJC,EAAKC,EAAA,MAAAD,UAAAE,EALlB,WAAAC,CAAAC,G,4CAOUC,KAAAC,QAAwB,UAGxBD,KAAAE,MAAgB,EAGhBF,KAAAG,IAAc,EAGdH,KAAAI,QAAwB,UAMxBJ,KAAAK,QAAmB,IA8C5B,CA/BC,MAAAC,GACE,MAAMC,EAAQP,KAAKC,UAAY,MAE/B,IAAKM,GAASP,KAAKE,OAAS,EAAG,OAAOM,EAACC,EAAI,CAACC,MAAO,CAAEC,QAAS,UAE9D,MAAMA,EAAUX,KAAKE,MAAQF,KAAKG,IAAM,GAAGH,KAAKG,OAASS,OAAOZ,KAAKE,OACrE,MAAMW,EAAOb,KAAKc,YAAc9B,EAAagB,KAAKI,SAElD,OACEI,EAACC,EAAI,CACHM,MAAO,CACLC,MAAO,KACP,kBAAmBT,EACnB,aAAcA,EACd,kBAAmBP,KAAKK,QACxB,mCAAoCL,KAAKiB,qBAAuB,KAChE,+BAAgCjB,KAAKiB,qBAAuB,OAE9DP,MAAO,CAAE,gBAAiBG,IAE1BL,EAAA,QAAMO,MAAM,cAAa,cAAa,SAClCR,GACAC,EAAA,WAASU,GAAG,OAAOjB,QAAQ,eAAekB,SAAQ,KAACC,MAAM,WACtDT,IAINX,KAAKqB,OAASb,EAAA,QAAMO,MAAM,kCAAkCf,KAAKqB,O","ignoreList":[]}