@ds-mo/ui 1.2.0 → 1.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 (184) hide show
  1. package/README.md +82 -2
  2. package/dist/components/ds-badge.js +1 -1
  3. package/dist/components/ds-badge.js.map +1 -1
  4. package/dist/components/ds-banner.js +1 -1
  5. package/dist/components/ds-banner.js.map +1 -1
  6. package/dist/components/ds-bar-nav-action.js +1 -1
  7. package/dist/components/ds-bar-nav.js +1 -1
  8. package/dist/components/ds-bar-nav.js.map +1 -1
  9. package/dist/components/ds-breadcrumb.js +1 -1
  10. package/dist/components/ds-button-group.js +1 -1
  11. package/dist/components/ds-button.js +1 -1
  12. package/dist/components/ds-card.js +1 -1
  13. package/dist/components/ds-checkbox.js +1 -1
  14. package/dist/components/ds-chip.d.ts +11 -0
  15. package/dist/components/ds-chip.js +2 -0
  16. package/dist/components/ds-chip.js.map +1 -0
  17. package/dist/components/ds-divider.js +1 -1
  18. package/dist/components/ds-empty-state.js +1 -1
  19. package/dist/components/ds-fade.js +1 -1
  20. package/dist/components/ds-fade.js.map +1 -1
  21. package/dist/components/ds-field.js +1 -1
  22. package/dist/components/ds-header.js +1 -1
  23. package/dist/components/ds-icon.js +1 -1
  24. package/dist/components/ds-input.js +1 -1
  25. package/dist/components/ds-modal.js +1 -1
  26. package/dist/components/ds-modal.js.map +1 -1
  27. package/dist/components/ds-panel-nav.js +1 -1
  28. package/dist/components/ds-panel-nav.js.map +1 -1
  29. package/dist/components/ds-radio-group.js +1 -1
  30. package/dist/components/ds-radio-group.js.map +1 -1
  31. package/dist/components/ds-scrollbar.js +1 -1
  32. package/dist/components/ds-select.js +1 -1
  33. package/dist/components/ds-sidebar.js +1 -1
  34. package/dist/components/ds-sidebar.js.map +1 -1
  35. package/dist/components/ds-slider.js +1 -1
  36. package/dist/components/ds-surface.js +1 -1
  37. package/dist/components/ds-tab-group-nav.js +1 -1
  38. package/dist/components/ds-tab-group.js +1 -1
  39. package/dist/components/ds-tab-group.js.map +1 -1
  40. package/dist/components/ds-table.js +1 -1
  41. package/dist/components/ds-tag.js +1 -1
  42. package/dist/components/ds-tag.js.map +1 -1
  43. package/dist/components/ds-text.js +1 -1
  44. package/dist/components/ds-toast-provider.js +1 -1
  45. package/dist/components/ds-toggle-button-group.js +1 -1
  46. package/dist/components/ds-toggle-button.js +1 -1
  47. package/dist/components/ds-toggle.js +1 -1
  48. package/dist/components/ds-tooltip.js +1 -1
  49. package/dist/components/index.d.ts +3 -4
  50. package/dist/components/index.js +1 -1
  51. package/dist/components/index.js.map +1 -1
  52. package/dist/components/{p-COsKOwZR.js → p--YDw8Q4o.js} +2 -2
  53. package/dist/components/p-B_enucPQ.js +2 -0
  54. package/dist/components/p-B_enucPQ.js.map +1 -0
  55. package/dist/components/{p-Cj00JkJb.js → p-C9za7IDu.js} +2 -2
  56. package/dist/components/p-DceSoh5V.js +2 -0
  57. package/dist/components/p-DceSoh5V.js.map +1 -0
  58. package/dist/components/{p-H89PzqGU.js → p-DqBCQRRd.js} +2 -2
  59. package/dist/components/p-DznbYg1m.js +2 -0
  60. package/dist/components/p-DznbYg1m.js.map +1 -0
  61. package/dist/components/p-_LI2ymhS.js +2 -0
  62. package/dist/components/p-_LI2ymhS.js.map +1 -0
  63. package/dist/components/{p-CE5zeV1w.js → p-uMN1Ppw2.js} +2 -2
  64. package/dist/components/p-vW9EMP8s.js +2 -0
  65. package/dist/components/p-vW9EMP8s.js.map +1 -0
  66. package/dist/types/components/Badge/Badge.d.ts +20 -0
  67. package/dist/types/components/Badge/index.d.ts +2 -0
  68. package/dist/types/{.stencil → components}/BarNav/BarNav.d.ts +6 -17
  69. package/dist/types/components/BarNav/bar-nav-types.d.ts +14 -0
  70. package/dist/types/{.stencil → components}/BarNav/bar-nav-utils.d.ts +1 -1
  71. package/dist/types/components/BarNav/index.d.ts +3 -0
  72. package/dist/types/{.stencil → components}/BarNavAction/BarNavAction.d.ts +1 -1
  73. package/dist/types/components/Chip/Chip.d.ts +30 -0
  74. package/dist/types/components/Chip/index.d.ts +2 -0
  75. package/dist/types/components/Fade/Fade.d.ts +25 -0
  76. package/dist/types/components/Fade/index.d.ts +2 -0
  77. package/dist/types/{.stencil → components}/PanelNav/PanelNav.d.ts +11 -26
  78. package/dist/types/components/PanelNav/index.d.ts +4 -0
  79. package/dist/types/components/PanelNav/panel-nav-types.d.ts +20 -0
  80. package/dist/types/components/PanelNav/panel-nav-utils.d.ts +26 -0
  81. package/dist/types/{.stencil → components}/TabGroupNav/TabGroupNav.d.ts +1 -1
  82. package/dist/types/components/Tag/Tag.d.ts +15 -0
  83. package/dist/types/components/Tag/index.d.ts +2 -0
  84. package/dist/types/components.d.ts +256 -108
  85. package/dist/types/nav/index.d.ts +5 -0
  86. package/dist/types/nav/nav-chrome.d.ts +14 -0
  87. package/dist/types/nav/shell-view-transition.d.ts +21 -0
  88. package/package.json +18 -6
  89. package/src/angular/index.ts +1 -0
  90. package/src/angular/proxies.ts +51 -28
  91. package/src/react/components.ts +1 -0
  92. package/src/react/ds-chip.ts +35 -0
  93. package/src/react/ds-tag.ts +3 -12
  94. package/src/wc/components/Badge/Badge.tsx +58 -8
  95. package/src/wc/components/Badge/index.ts +1 -1
  96. package/src/wc/components/Banner/Banner.tsx +2 -2
  97. package/src/wc/components/BarNav/BarNav.tsx +24 -26
  98. package/src/wc/components/BarNav/bar-nav-types.ts +15 -0
  99. package/src/wc/components/BarNav/bar-nav-utils.ts +1 -1
  100. package/src/wc/components/BarNav/index.ts +2 -1
  101. package/src/wc/components/BarNavAction/BarNavAction.tsx +11 -2
  102. package/src/wc/components/Chip/Chip.tsx +127 -0
  103. package/src/wc/components/Chip/index.ts +1 -0
  104. package/src/wc/components/Fade/Fade.tsx +86 -6
  105. package/src/wc/components/Fade/index.ts +1 -1
  106. package/src/wc/components/PanelNav/PanelNav.tsx +63 -91
  107. package/src/wc/components/PanelNav/index.ts +9 -4
  108. package/src/wc/components/PanelNav/panel-nav-types.ts +22 -0
  109. package/src/wc/components/PanelNav/panel-nav-utils.ts +32 -64
  110. package/src/wc/components/TabGroup/TabGroup.tsx +9 -1
  111. package/src/wc/components/TabGroupNav/TabGroupNav.tsx +17 -3
  112. package/src/wc/components/Tag/Tag.tsx +3 -70
  113. package/src/wc/components/Tag/index.ts +1 -1
  114. package/src/wc/components.d.ts +256 -108
  115. package/src/wc/nav/index.ts +19 -0
  116. package/src/wc/nav/nav-chrome.ts +45 -0
  117. package/src/wc/nav/shell-view-transition.ts +102 -0
  118. package/dist/components/p-CQQe6VNo.js +0 -2
  119. package/dist/components/p-CQQe6VNo.js.map +0 -1
  120. package/dist/components/p-Vwlmhl4E.js +0 -2
  121. package/dist/components/p-Vwlmhl4E.js.map +0 -1
  122. package/dist/types/.stencil/Badge/Badge.d.ts +0 -8
  123. package/dist/types/.stencil/Badge/index.d.ts +0 -2
  124. package/dist/types/.stencil/BarNav/index.d.ts +0 -2
  125. package/dist/types/.stencil/Fade/Fade.d.ts +0 -10
  126. package/dist/types/.stencil/Fade/index.d.ts +0 -2
  127. package/dist/types/.stencil/PanelNav/index.d.ts +0 -3
  128. package/dist/types/.stencil/PanelNav/panel-nav-utils.d.ts +0 -27
  129. package/dist/types/.stencil/Tag/Tag.d.ts +0 -32
  130. package/dist/types/.stencil/Tag/index.d.ts +0 -2
  131. /package/dist/components/{p-COsKOwZR.js.map → p--YDw8Q4o.js.map} +0 -0
  132. /package/dist/components/{p-Cj00JkJb.js.map → p-C9za7IDu.js.map} +0 -0
  133. /package/dist/components/{p-H89PzqGU.js.map → p-DqBCQRRd.js.map} +0 -0
  134. /package/dist/components/{p-CE5zeV1w.js.map → p-uMN1Ppw2.js.map} +0 -0
  135. /package/dist/types/{.stencil → components}/Accordion/Accordion.d.ts +0 -0
  136. /package/dist/types/{.stencil → components}/Banner/Banner.d.ts +0 -0
  137. /package/dist/types/{.stencil → components}/BarNav/bar-nav-dom-utils.d.ts +0 -0
  138. /package/dist/types/{.stencil → components}/BarNav/bar-nav-tabs-menu-utils.d.ts +0 -0
  139. /package/dist/types/{.stencil → components}/BarNavAction/index.d.ts +0 -0
  140. /package/dist/types/{.stencil → components}/Breadcrumb/Breadcrumb.d.ts +0 -0
  141. /package/dist/types/{.stencil → components}/Button/Button.d.ts +0 -0
  142. /package/dist/types/{.stencil → components}/Button/index.d.ts +0 -0
  143. /package/dist/types/{.stencil → components}/ButtonGroup/ButtonGroup.d.ts +0 -0
  144. /package/dist/types/{.stencil → components}/Card/Card.d.ts +0 -0
  145. /package/dist/types/{.stencil → components}/Checkbox/Checkbox.d.ts +0 -0
  146. /package/dist/types/{.stencil → components}/Checkbox/index.d.ts +0 -0
  147. /package/dist/types/{.stencil → components}/Divider/Divider.d.ts +0 -0
  148. /package/dist/types/{.stencil → components}/Divider/index.d.ts +0 -0
  149. /package/dist/types/{.stencil → components}/EmptyState/EmptyState.d.ts +0 -0
  150. /package/dist/types/{.stencil → components}/Field/Field.d.ts +0 -0
  151. /package/dist/types/{.stencil → components}/Header/Header.d.ts +0 -0
  152. /package/dist/types/{.stencil → components}/Icon/Icon.d.ts +0 -0
  153. /package/dist/types/{.stencil → components}/Icon/flag-icon-catalog.d.ts +0 -0
  154. /package/dist/types/{.stencil → components}/Icon/index.d.ts +0 -0
  155. /package/dist/types/{.stencil → components}/Icon/system-icon-catalog.d.ts +0 -0
  156. /package/dist/types/{.stencil → components}/Input/Input.d.ts +0 -0
  157. /package/dist/types/{.stencil → components}/Input/index.d.ts +0 -0
  158. /package/dist/types/{.stencil → components}/Loader/Loader.d.ts +0 -0
  159. /package/dist/types/{.stencil → components}/Loader/index.d.ts +0 -0
  160. /package/dist/types/{.stencil → components}/Menu/Menu.d.ts +0 -0
  161. /package/dist/types/{.stencil → components}/Modal/Modal.d.ts +0 -0
  162. /package/dist/types/{.stencil → components}/Pagination/Pagination.d.ts +0 -0
  163. /package/dist/types/{.stencil → components}/RadioGroup/RadioGroup.d.ts +0 -0
  164. /package/dist/types/{.stencil → components}/RadioGroup/index.d.ts +0 -0
  165. /package/dist/types/{.stencil → components}/Scrollbar/Scrollbar.d.ts +0 -0
  166. /package/dist/types/{.stencil → components}/Select/Select.d.ts +0 -0
  167. /package/dist/types/{.stencil → components}/Sidebar/Sidebar.d.ts +0 -0
  168. /package/dist/types/{.stencil → components}/Skeleton/Skeleton.d.ts +0 -0
  169. /package/dist/types/{.stencil → components}/Skeleton/index.d.ts +0 -0
  170. /package/dist/types/{.stencil → components}/Slider/Slider.d.ts +0 -0
  171. /package/dist/types/{.stencil → components}/Slider/index.d.ts +0 -0
  172. /package/dist/types/{.stencil → components}/Surface/Surface.d.ts +0 -0
  173. /package/dist/types/{.stencil → components}/TabGroup/TabGroup.d.ts +0 -0
  174. /package/dist/types/{.stencil → components}/TabGroup/tab-item-utils.d.ts +0 -0
  175. /package/dist/types/{.stencil → components}/Table/Table.d.ts +0 -0
  176. /package/dist/types/{.stencil → components}/Text/Text.d.ts +0 -0
  177. /package/dist/types/{.stencil → components}/Text/index.d.ts +0 -0
  178. /package/dist/types/{.stencil → components}/Toast/Toast.d.ts +0 -0
  179. /package/dist/types/{.stencil → components}/Toast/toast-service.d.ts +0 -0
  180. /package/dist/types/{.stencil → components}/Toggle/Toggle.d.ts +0 -0
  181. /package/dist/types/{.stencil → components}/Toggle/index.d.ts +0 -0
  182. /package/dist/types/{.stencil → components}/ToggleButton/ToggleButton.d.ts +0 -0
  183. /package/dist/types/{.stencil → components}/ToggleButtonGroup/ToggleButtonGroup.d.ts +0 -0
  184. /package/dist/types/{.stencil → components}/Tooltip/Tooltip.d.ts +0 -0
@@ -1,4 +1,35 @@
1
- import type { PanelNavGroup, PanelNavItem, PanelNavVariant } from './PanelNav';
1
+ import type { PanelNavGroup, PanelNavItem } from './panel-nav-types';
2
+ import {
3
+ NAV_STYLE_HINT_ATTR,
4
+ clearNavStyleHint,
5
+ readNavStyleAttr,
6
+ resolveNavChromeStyle,
7
+ setNavStyleHint,
8
+ shouldResyncNavChromeStyle,
9
+ } from '../../nav/nav-chrome';
10
+ import { ensureShellNavVtStyle } from '../../nav/shell-view-transition';
11
+
12
+ export type { NavChromeStyle } from '../../nav/nav-chrome';
13
+ export {
14
+ NAV_STYLE_HINT_ATTR,
15
+ readNavStyleAttr,
16
+ setNavStyleHint,
17
+ clearNavStyleHint,
18
+ resolveNavChromeStyle as resolvePanelNavStyle,
19
+ shouldResyncNavChromeStyle as shouldResyncPanelNavStyle,
20
+ };
21
+
22
+ /** @deprecated Use `setNavStyleHint` */
23
+ export const setPanelNavStyleHint = setNavStyleHint;
24
+
25
+ /** @deprecated Use `clearNavStyleHint` */
26
+ export const clearPanelNavStyleHint = clearNavStyleHint;
27
+
28
+ /** @deprecated Use `NAV_STYLE_HINT_ATTR` */
29
+ export const PANEL_NAV_STYLE_HINT_ATTR = NAV_STYLE_HINT_ATTR;
30
+
31
+ /** @deprecated Use `ensureShellNavVtStyle` */
32
+ export const ensurePanelNavVtStyle = ensureShellNavVtStyle;
2
33
 
3
34
  /** Whether `path` matches `href` at a segment boundary (exact or child path). */
4
35
  export function hrefMatchesPath(path: string, href: string): boolean {
@@ -42,41 +73,6 @@ export function parsePanelNavGroups(groups: string | unknown): PanelNavGroup[] {
42
73
  return [];
43
74
  }
44
75
 
45
- /** `document.documentElement` attribute for pre-bootstrap variant hints (SPA hard reload). */
46
- export const PANEL_NAV_VARIANT_HINT_ATTR = 'data-panel-nav-variant';
47
-
48
- /** Parse `variant` from a host attribute value. */
49
- export function readPanelNavVariantAttr(attr: string | null): PanelNavVariant | undefined {
50
- if (attr === 'settings' || attr === 'dashboard') return attr;
51
- return undefined;
52
- }
53
-
54
- /** Set a document-level variant hint before the custom element upgrades (hard reload). */
55
- export function setPanelNavVariantHint(variant: PanelNavVariant): void {
56
- if (typeof document === 'undefined') return;
57
- document.documentElement.setAttribute(PANEL_NAV_VARIANT_HINT_ATTR, variant);
58
- }
59
-
60
- export function clearPanelNavVariantHint(): void {
61
- if (typeof document === 'undefined') return;
62
- document.documentElement.removeAttribute(PANEL_NAV_VARIANT_HINT_ATTR);
63
- }
64
-
65
- /** Resolve initial variant — host attr, then document hint, then prop default. */
66
- export function resolvePanelNavVariant(
67
- variantProp: PanelNavVariant,
68
- variantAttr: string | null,
69
- documentVariantAttr: string | null = typeof document !== 'undefined'
70
- ? document.documentElement.getAttribute(PANEL_NAV_VARIANT_HINT_ATTR)
71
- : null,
72
- ): PanelNavVariant {
73
- return (
74
- readPanelNavVariantAttr(variantAttr) ??
75
- readPanelNavVariantAttr(documentVariantAttr) ??
76
- variantProp
77
- );
78
- }
79
-
80
76
  /** Resolve whether VT is disabled from prop and/or host attribute. */
81
77
  export function resolvePanelNavDisableVt(prop: boolean, attr: string | null): boolean {
82
78
  if (prop) return true;
@@ -84,14 +80,6 @@ export function resolvePanelNavDisableVt(prop: boolean, attr: string | null): bo
84
80
  return attr !== 'false';
85
81
  }
86
82
 
87
- /** True when internal rendered surface lags the host `variant` prop. */
88
- export function shouldResyncPanelNavVariant(
89
- renderedVariant: PanelNavVariant,
90
- variant: PanelNavVariant,
91
- ): boolean {
92
- return renderedVariant !== variant;
93
- }
94
-
95
83
  /** True when host `groups` has items but internal parsed state is still empty. */
96
84
  export function shouldResyncPanelNavGroups(
97
85
  parsedGroups: PanelNavGroup[],
@@ -102,23 +90,3 @@ export function shouldResyncPanelNavGroups(
102
90
  countPanelNavItems(parsePanelNavGroups(groups)) > 0
103
91
  );
104
92
  }
105
-
106
- let vtStyleInjected = false;
107
-
108
- /** Inject view-transition suppress styles once per document (shared by PanelNav + hosts). */
109
- export function ensurePanelNavVtStyle(): void {
110
- if (vtStyleInjected) return;
111
- const id = 'ds-panel-nav-vt-style';
112
- if (document.getElementById(id)) {
113
- vtStyleInjected = true;
114
- return;
115
- }
116
- const style = document.createElement('style');
117
- style.id = id;
118
- style.textContent = [
119
- '::view-transition-old(root),::view-transition-new(root){animation:none;mix-blend-mode:normal}',
120
- '::view-transition-new(root){clip-path:circle(0px at var(--vt-x,50%) var(--vt-y,50%))}',
121
- ].join('\n');
122
- document.head.appendChild(style);
123
- vtStyleInjected = true;
124
- }
@@ -176,7 +176,15 @@ export class TabGroup {
176
176
  [isSelected ? 'text-body-small-emphasis' : 'text-body-small']: true,
177
177
  }}>
178
178
  {tab.label}
179
- {tab.dot && <span class="tab__dot" aria-hidden="true" />}
179
+ {tab.dot && (
180
+ <ds-badge
181
+ class="tab__dot"
182
+ variant="dot"
183
+ background="var(--_dot-ring)"
184
+ label=""
185
+ aria-hidden="true"
186
+ />
187
+ )}
180
188
  </span>
181
189
  </button>
182
190
  );
@@ -6,7 +6,7 @@ import {
6
6
  type TabItemTab,
7
7
  } from '../TabGroup/tab-item-utils';
8
8
 
9
- export type TabGroupNavBackground = 'faint' | 'medium' | 'bold' | 'strong' | 'always-dark';
9
+ export type TabGroupNavBackground = 'faint' | 'medium' | 'bold' | 'strong' | 'always-dark' | 'navigation';
10
10
 
11
11
  @Component({
12
12
  tag: 'ds-tab-group-nav',
@@ -119,18 +119,24 @@ export class TabGroupNav {
119
119
  private getBgClass(): string {
120
120
  if (!this.background || this.background === 'faint') return '';
121
121
  if (this.background === 'always-dark') return 'on-always-dark';
122
+ if (this.background === 'navigation') return 'on-navigation';
122
123
  return `on-${this.background}`;
123
124
  }
124
125
 
125
126
  render() {
126
127
  const bgClass = this.getBgClass();
127
128
  const isVertical = this.orientation === 'vertical';
129
+ const isNavigation = this.background === 'navigation';
128
130
 
129
131
  return (
130
132
  <Host class="tab-group-nav-host">
131
133
  <div
132
134
  role="tablist"
133
- class={{ 'tab-list': true, 'tab-list--vertical': isVertical }}
135
+ class={{
136
+ 'tab-list': true,
137
+ 'tab-list--vertical': isVertical,
138
+ 'tab-list--on-navigation': isNavigation,
139
+ }}
134
140
  aria-label={this.ariaLabel}
135
141
  aria-labelledby={this.ariaLabelledby}
136
142
  aria-orientation={isVertical ? 'vertical' : undefined}
@@ -176,7 +182,15 @@ export class TabGroupNav {
176
182
  [isSelected ? 'text-body-medium-emphasis' : 'text-body-medium']: true,
177
183
  }}>
178
184
  {tab.label}
179
- {tab.dot && <span class="tab__dot" aria-hidden="true" />}
185
+ {tab.dot && (
186
+ <ds-badge
187
+ class="tab__dot"
188
+ variant="dot"
189
+ background="var(--_dot-ring)"
190
+ label=""
191
+ aria-hidden="true"
192
+ />
193
+ )}
180
194
  </span>
181
195
  </button>
182
196
  );
@@ -1,10 +1,9 @@
1
- import { Component, Prop, Event, EventEmitter, h, Host } from '@stencil/core';
1
+ import { Component, Prop, h, Host } from '@stencil/core';
2
2
 
3
3
  export type TagIntent = 'neutral' | 'brand' | 'ai' | 'negative' | 'warning' | 'caution' | 'positive';
4
4
  export type TagContrast = 'strong' | 'bold' | 'medium' | 'faint';
5
5
  export type TagElevation = 'none' | 'flat' | 'elevated';
6
6
  export type TagSize = 'md' | 'sm' | 'xs';
7
- export type TagBackground = 'faint' | 'medium' | 'bold' | 'strong' | 'always-dark';
8
7
 
9
8
  const TEXT_VARIANT: Record<TagSize, string> = {
10
9
  md: 'text-body-medium',
@@ -26,45 +25,10 @@ export class Tag {
26
25
  @Prop() elevation: TagElevation = 'none';
27
26
  @Prop() size: TagSize = 'md';
28
27
  @Prop() rounded: boolean = false;
29
- @Prop() removable: boolean = false;
30
28
  @Prop() maxWidth: string | number | undefined;
31
- @Prop() inactive: boolean = false;
32
- @Prop() background: TagBackground | undefined;
33
- @Prop({ mutable: true }) pressed: boolean = false;
34
- /** Whether the tag has a click/toggle behavior. */
35
- @Prop() interactive: boolean = false;
36
-
37
- /** Fired when the remove button is clicked. */
38
- @Event() dsRemove!: EventEmitter<void>;
39
- /** Fired when an interactive tag is clicked. */
40
- @Event() dsClick!: EventEmitter<void>;
41
- /** Fired when the pressed state toggles. */
42
- @Event() dsPressedChange!: EventEmitter<boolean>;
43
-
44
- private handleClick = () => {
45
- if (this.inactive) return;
46
- this.pressed = !this.pressed;
47
- this.dsPressedChange.emit(this.pressed);
48
- this.dsClick.emit();
49
- };
50
-
51
- private handleKeyDown = (e: KeyboardEvent) => {
52
- if (this.inactive) return;
53
- if (e.key === 'Enter' || e.key === ' ') {
54
- e.preventDefault();
55
- this.handleClick();
56
- }
57
- };
58
-
59
- private handleRemove = (e: MouseEvent) => {
60
- e.stopPropagation();
61
- this.dsRemove.emit();
62
- };
63
29
 
64
30
  render() {
65
- const cap = (s: string) => s.charAt(0).toUpperCase() + s.slice(1);
66
31
  const sz = this.size.toUpperCase() as 'MD' | 'SM' | 'XS';
67
- const hasIconSlot = true; // always render slot, consumer decides whether to fill it
68
32
  const textVariant = TEXT_VARIANT[this.size];
69
33
  const iconSize = ICON_SIZE[this.size];
70
34
 
@@ -80,29 +44,15 @@ export class Tag {
80
44
  [`tag--size-${this.size}`]: true,
81
45
  'tag--rounded': this.rounded,
82
46
  'tag--rounded-no-icon-left': this.rounded, // consumer overrides via slot presence hack
83
- 'tag--rounded-no-remove-right': this.rounded && !this.removable,
47
+ 'tag--rounded-no-remove-right': this.rounded,
84
48
  [`tag--icon-left-${sz}`]: false, // toggled by slotchange
85
- [`tag--icon-right-${sz}`]: this.removable,
86
- 'tag--removable': this.removable,
87
- 'tag--interactive': this.interactive,
88
- 'tag--inactive': this.inactive,
89
- 'tag--pressed': this.pressed,
90
- 'tag--on-medium': this.background === 'medium',
91
- 'tag--on-bold': this.background === 'bold',
92
- 'tag--on-strong': this.background === 'strong',
93
- 'tag--on-always-dark': this.background === 'always-dark',
49
+ [`tag--icon-right-${sz}`]: false,
94
50
  };
95
51
 
96
52
  return (
97
53
  <Host
98
54
  class={hostCls}
99
55
  style={maxWidthStyle}
100
- onClick={this.interactive ? this.handleClick : undefined}
101
- onKeyDown={this.interactive ? this.handleKeyDown : undefined}
102
- role={this.interactive ? 'button' : undefined}
103
- tabIndex={this.interactive ? (this.inactive ? -1 : 0) : undefined}
104
- aria-pressed={this.interactive && this.pressed !== undefined ? String(this.pressed) : undefined}
105
- aria-disabled={this.inactive || undefined}
106
56
  >
107
57
  {/* Leading icon slot — consumer provides an icon element */}
108
58
  <span class="tag__icon-slot" style={{ fontSize: `${iconSize}px`, lineHeight: '0' }}>
@@ -112,23 +62,6 @@ export class Tag {
112
62
  <span class={{ 'tag__label': true, [textVariant]: true }}>
113
63
  {this.label}
114
64
  </span>
115
- {/* Remove button */}
116
- {this.removable && (
117
- <button
118
- type="button"
119
- class="tag__remove"
120
- onClick={this.handleRemove}
121
- aria-label={`Remove ${this.label}`}
122
- tabIndex={-1}
123
- >
124
- {/* Remove icon slot — defaults to × glyph */}
125
- <slot name="remove-icon">
126
- <span class="tag__remove-x" style={{ fontSize: `${iconSize}px`, lineHeight: '0' }}>
127
-
128
- </span>
129
- </slot>
130
- </button>
131
- )}
132
65
  </Host>
133
66
  );
134
67
  }
@@ -1 +1 @@
1
- export type { TagIntent, TagContrast, TagElevation, TagSize, TagBackground } from './Tag';
1
+ export type { TagIntent, TagContrast, TagElevation, TagSize } from './Tag';