@redvars/peacock 3.6.0 → 3.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/dist/assets/styles.css +1 -1
  2. package/dist/assets/styles.css.map +1 -1
  3. package/dist/assets/tokens.css +1 -1
  4. package/dist/assets/tokens.css.map +1 -1
  5. package/dist/{button-colors-Ccys3hvS.js → button-colors-AvGh22Zn.js} +18 -18
  6. package/dist/{button-colors-Ccys3hvS.js.map → button-colors-AvGh22Zn.js.map} +1 -1
  7. package/dist/button-group.js +2 -2
  8. package/dist/button.js +2 -3
  9. package/dist/button.js.map +1 -1
  10. package/dist/card.js +1 -1
  11. package/dist/card.js.map +1 -1
  12. package/dist/code-highlighter.js +34 -9
  13. package/dist/code-highlighter.js.map +1 -1
  14. package/dist/custom-elements-jsdocs.json +4973 -3553
  15. package/dist/custom-elements.json +7899 -6346
  16. package/dist/{flow-designer-node-XMe-jlKg.js → flow-designer-node-BWrPuxAR.js} +2 -2
  17. package/dist/flow-designer-node-BWrPuxAR.js.map +1 -0
  18. package/dist/flow-designer-node.js +1 -1
  19. package/dist/flow-designer.js +1402 -8
  20. package/dist/flow-designer.js.map +1 -1
  21. package/dist/html-editor.js +27245 -87
  22. package/dist/html-editor.js.map +1 -1
  23. package/dist/icon-CueRR7wx.js +260 -0
  24. package/dist/icon-CueRR7wx.js.map +1 -0
  25. package/dist/{icon-button-CK1ZuE-2.js → icon-button-ohxHhy4t.js} +2 -2
  26. package/dist/{icon-button-CK1ZuE-2.js.map → icon-button-ohxHhy4t.js.map} +1 -1
  27. package/dist/index.js +10 -9
  28. package/dist/index.js.map +1 -1
  29. package/dist/modal.js +12 -18
  30. package/dist/modal.js.map +1 -1
  31. package/dist/{navigation-rail-DyO0oAZU.js → navigation-rail-CD7IrqbN.js} +952 -279
  32. package/dist/navigation-rail-CD7IrqbN.js.map +1 -0
  33. package/dist/peacock-loader.js +39 -30
  34. package/dist/peacock-loader.js.map +1 -1
  35. package/dist/{popover-NC7b1lTq.js → popover-DUPmMVWS.js} +9 -4
  36. package/dist/{popover-NC7b1lTq.js.map → popover-DUPmMVWS.js.map} +1 -1
  37. package/dist/popover.js +1 -1
  38. package/dist/src/__controllers/floating-controller.d.ts +1 -0
  39. package/dist/src/avatar/avatar.d.ts +1 -1
  40. package/dist/src/breadcrumb/breadcrumb/breadcrumb.d.ts +0 -1
  41. package/dist/src/chip/chip/chip.d.ts +14 -11
  42. package/dist/src/chip/chip-set/chip-set.d.ts +20 -0
  43. package/dist/src/chip/chip-set/index.d.ts +1 -0
  44. package/dist/src/code-highlighter/code-highlighter.d.ts +4 -0
  45. package/dist/src/html-editor/html-editor.d.ts +44 -11
  46. package/dist/src/index.d.ts +3 -0
  47. package/dist/src/list/index.d.ts +2 -0
  48. package/dist/src/list/list-item.d.ts +35 -0
  49. package/dist/src/list/list.d.ts +28 -0
  50. package/dist/src/menu/menu/menu.d.ts +1 -0
  51. package/dist/src/modal/modal.d.ts +2 -8
  52. package/dist/src/navigation-rail/navigation-rail.d.ts +3 -7
  53. package/dist/src/number-field/number-field.d.ts +2 -2
  54. package/dist/src/svg/index.d.ts +1 -0
  55. package/dist/src/svg/svg.d.ts +38 -0
  56. package/dist/src/toolbar/toolbar.d.ts +3 -3
  57. package/dist/test/chip.test.d.ts +1 -0
  58. package/dist/toolbar.js +3 -3
  59. package/dist/toolbar.js.map +1 -1
  60. package/dist/tsconfig.tsbuildinfo +1 -1
  61. package/package.json +7 -1
  62. package/readme.md +3 -3
  63. package/scss/styles.scss +3 -3
  64. package/scss/tokens.css +1 -1
  65. package/src/__controllers/floating-controller.ts +9 -3
  66. package/src/avatar/avatar.scss +4 -4
  67. package/src/avatar/avatar.ts +1 -1
  68. package/src/breadcrumb/breadcrumb/breadcrumb.ts +0 -1
  69. package/src/button/button/button.scss +17 -17
  70. package/src/button/button/button.ts +1 -2
  71. package/src/card/card.ts +1 -1
  72. package/src/chip/chip/chip.scss +119 -45
  73. package/src/chip/chip/chip.ts +97 -38
  74. package/src/chip/chip-set/chip-set.scss +13 -0
  75. package/src/chip/chip-set/chip-set.ts +25 -0
  76. package/src/chip/chip-set/index.ts +1 -0
  77. package/src/code-highlighter/code-highlighter.ts +33 -6
  78. package/src/field/field.scss +1 -1
  79. package/src/flow-designer/flow-designer-node.ts +1 -1
  80. package/src/html-editor/html-editor.scss +44 -2
  81. package/src/html-editor/html-editor.ts +309 -94
  82. package/src/index.ts +3 -1
  83. package/src/list/index.ts +2 -0
  84. package/src/list/list-item.scss +111 -0
  85. package/src/list/list-item.ts +175 -0
  86. package/src/list/list.scss +24 -0
  87. package/src/list/list.ts +51 -0
  88. package/src/menu/menu/menu.ts +11 -0
  89. package/src/modal/modal.scss +10 -10
  90. package/src/modal/modal.ts +2 -8
  91. package/src/navigation-rail/navigation-rail-item.scss +7 -38
  92. package/src/navigation-rail/navigation-rail-item.ts +1 -2
  93. package/src/navigation-rail/navigation-rail.scss +17 -21
  94. package/src/navigation-rail/navigation-rail.ts +6 -9
  95. package/src/number-field/number-field.ts +2 -2
  96. package/src/peacock-loader.ts +36 -22
  97. package/src/svg/index.ts +1 -0
  98. package/src/svg/svg.scss +91 -0
  99. package/src/svg/svg.ts +160 -0
  100. package/src/toolbar/toolbar.ts +3 -3
  101. package/dist/flow-designer-dZnLJOQT.js +0 -1656
  102. package/dist/flow-designer-dZnLJOQT.js.map +0 -1
  103. package/dist/flow-designer-node-XMe-jlKg.js.map +0 -1
  104. package/dist/navigation-rail-DyO0oAZU.js.map +0 -1
  105. package/src/chip/chip/chip-colors.scss +0 -31
@@ -5,13 +5,14 @@ import { r } from './state-DwbEjqVk.js';
5
5
  import { o as observerSlotChangesWithCallback } from './observe-slot-change-BGJfgg2E.js';
6
6
  import { a as e, e as e$2 } from './query-QBcUV-L_.js';
7
7
  import { B as BaseHyperlinkMixin, t as throttle } from './BaseHyperlinkMixin-BNuwbiEf.js';
8
- import { o as o$1 } from './style-map-DVmWOuYy.js';
8
+ import { B as BaseButton, o as o$1, s as spread, a as BaseButtonMixin } from './BaseButton-BNFAYn-S.js';
9
+ import { o as o$2 } from './style-map-DVmWOuYy.js';
9
10
  import { r as redispatchEvent, i as isActivationClick, d as dispatchActivationClick } from './dispatch-event-utils-CuEqjlPT.js';
10
- import { s as spread, o as o$2, a as BaseButtonMixin } from './BaseButton-BNFAYn-S.js';
11
11
  import { B as BaseInput } from './BaseInput-14YmcfK7.js';
12
- import { F as FloatingController } from './popover-NC7b1lTq.js';
12
+ import { F as FloatingController } from './popover-DUPmMVWS.js';
13
13
  import { i as isDarkMode, o as observeThemeChange } from './is-dark-mode-DOcaw4Yq.js';
14
- import { o as o$3 } from './unsafe-html-BsGUjx94.js';
14
+ import { f as fetchSVG, s as sanitizeSvg, o as o$3 } from './icon-CueRR7wx.js';
15
+ import { o as o$4 } from './unsafe-html-BsGUjx94.js';
15
16
 
16
17
  /**
17
18
  * @license
@@ -19,7 +20,7 @@ import { o as o$3 } from './unsafe-html-BsGUjx94.js';
19
20
  * SPDX-License-Identifier: BSD-3-Clause
20
21
  */function o(o){return (e$1,n)=>{const{slot:r,selector:s}=o??{},c="slot"+(r?`[name=${r}]`:":not([name])");return e(e$1,n,{get(){const t=this.renderRoot?.querySelector(c),e=t?.assignedElements(o)??[];return void 0===s?e:e.filter(t=>t.matches(s))}})}}
21
22
 
22
- var css_248z$R = i`* {
23
+ var css_248z$U = i`* {
23
24
  box-sizing: border-box;
24
25
  }
25
26
 
@@ -31,9 +32,9 @@ var css_248z$R = i`* {
31
32
  display: inline-block;
32
33
  pointer-events: none;
33
34
  --avatar-size: 2rem;
34
- --avatar-background-color: var(--color-primary);
35
+ --avatar-container-color: var(--color-primary);
35
36
  --avatar-text-color: var(--color-on-primary);
36
- --avatar-border-radius: var(--global-avatar-border-radius);
37
+ --avatar-container-shape: var(--global-avatar-container-shape);
37
38
  }
38
39
 
39
40
  .avatar-container {
@@ -44,7 +45,7 @@ var css_248z$R = i`* {
44
45
  }
45
46
 
46
47
  .avatar {
47
- border-radius: var(--avatar-border-radius);
48
+ border-radius: var(--avatar-container-shape);
48
49
  display: flex;
49
50
  justify-content: center;
50
51
  align-items: center;
@@ -56,7 +57,7 @@ var css_248z$R = i`* {
56
57
  font-weight: var(--typography-body-large-emphasized-font-weight) !important;
57
58
  line-height: var(--typography-body-large-emphasized-line-height) !important;
58
59
  letter-spacing: var(--typography-body-large-emphasized-letter-spacing) !important;
59
- background-color: var(--avatar-background-color);
60
+ background-color: var(--avatar-container-color);
60
61
  font-size: calc(var(--avatar-size) * 0.5) !important;
61
62
  }
62
63
  .avatar .image {
@@ -73,7 +74,7 @@ var css_248z$R = i`* {
73
74
  * @summary The Avatar component is used to represent user, and displays the profile picture, initials or fallback icon.
74
75
  *
75
76
  * @cssprop --avatar-border-radius - Controls the border radius of the avatar.
76
- * @cssprop --avatar-background-color - Controls the color of the avatar.
77
+ * @cssprop --avatar-container-color - Controls the color of the avatar container.
77
78
  * @cssprop --avatar-size - Controls the size of the avatar.
78
79
  * @cssprop --avatar-text-color - Controls the color of the text inside the avatar.
79
80
  *
@@ -110,7 +111,7 @@ class Avatar extends i$1 {
110
111
  return `${first.charAt(0)}${last.charAt(0)}`.toUpperCase();
111
112
  }
112
113
  }
113
- Avatar.styles = [css_248z$R];
114
+ Avatar.styles = [css_248z$U];
114
115
  __decorate([
115
116
  n({ type: String, reflect: true })
116
117
  ], Avatar.prototype, "name", void 0);
@@ -118,7 +119,7 @@ __decorate([
118
119
  n({ type: String, reflect: true })
119
120
  ], Avatar.prototype, "src", void 0);
120
121
 
121
- var css_248z$Q = i`* {
122
+ var css_248z$T = i`* {
122
123
  box-sizing: border-box;
123
124
  }
124
125
 
@@ -190,12 +191,12 @@ class Badge extends i$1 {
190
191
  </div>`;
191
192
  }
192
193
  }
193
- Badge.styles = [css_248z$Q];
194
+ Badge.styles = [css_248z$T];
194
195
  __decorate([
195
196
  n({ type: String })
196
197
  ], Badge.prototype, "value", void 0);
197
198
 
198
- var css_248z$P = i`* {
199
+ var css_248z$S = i`* {
199
200
  box-sizing: border-box;
200
201
  }
201
202
 
@@ -304,7 +305,7 @@ class Divider extends i$1 {
304
305
  </div>`;
305
306
  }
306
307
  }
307
- Divider.styles = [css_248z$P];
308
+ Divider.styles = [css_248z$S];
308
309
  __decorate([
309
310
  n({ type: Boolean, reflect: true })
310
311
  ], Divider.prototype, "vertical", void 0);
@@ -312,7 +313,7 @@ __decorate([
312
313
  r()
313
314
  ], Divider.prototype, "slotHasContent", void 0);
314
315
 
315
- var css_248z$O = i`* {
316
+ var css_248z$R = i`* {
316
317
  box-sizing: border-box;
317
318
  }
318
319
 
@@ -393,9 +394,9 @@ class Elevation extends i$1 {
393
394
  return b `<span class="shadow"></span>`;
394
395
  }
395
396
  }
396
- Elevation.styles = [css_248z$O];
397
+ Elevation.styles = [css_248z$R];
397
398
 
398
- var css_248z$N = i`* {
399
+ var css_248z$Q = i`* {
399
400
  box-sizing: border-box;
400
401
  }
401
402
 
@@ -648,7 +649,7 @@ class SegmentedButton extends i$1 {
648
649
  `;
649
650
  }
650
651
  }
651
- SegmentedButton.styles = [css_248z$N];
652
+ SegmentedButton.styles = [css_248z$Q];
652
653
  __decorate([
653
654
  n({ type: String, reflect: true })
654
655
  ], SegmentedButton.prototype, "value", void 0);
@@ -668,7 +669,7 @@ __decorate([
668
669
  r()
669
670
  ], SegmentedButton.prototype, "isActive", void 0);
670
671
 
671
- var css_248z$M = i`* {
672
+ var css_248z$P = i`* {
672
673
  box-sizing: border-box;
673
674
  }
674
675
 
@@ -780,7 +781,7 @@ class SegmentedButtonGroup extends i$1 {
780
781
  `;
781
782
  }
782
783
  }
783
- SegmentedButtonGroup.styles = [css_248z$M];
784
+ SegmentedButtonGroup.styles = [css_248z$P];
784
785
  SegmentedButtonGroup.SegmentedButton = SegmentedButton;
785
786
  __decorate([
786
787
  n({ type: Boolean, reflect: true, attribute: 'multi-select' })
@@ -789,7 +790,7 @@ __decorate([
789
790
  n({ type: Boolean, reflect: true })
790
791
  ], SegmentedButtonGroup.prototype, "nullable", void 0);
791
792
 
792
- var css_248z$L = i`:host {
793
+ var css_248z$O = i`:host {
793
794
  display: none;
794
795
  pointer-events: none;
795
796
  position: absolute;
@@ -907,7 +908,7 @@ class FocusRing extends i$1 {
907
908
  }
908
909
  }
909
910
  }
910
- FocusRing.styles = [css_248z$L];
911
+ FocusRing.styles = [css_248z$O];
911
912
  __decorate([
912
913
  n({ type: Boolean, reflect: true })
913
914
  ], FocusRing.prototype, "visible", void 0);
@@ -1384,7 +1385,7 @@ __decorate([
1384
1385
  e$2('.surface')
1385
1386
  ], Ripple.prototype, "mdRoot", void 0);
1386
1387
 
1387
- var css_248z$K = i`* {
1388
+ var css_248z$N = i`* {
1388
1389
  box-sizing: border-box;
1389
1390
  }
1390
1391
 
@@ -1680,7 +1681,7 @@ class AccordionItem extends i$1 {
1680
1681
  }
1681
1682
  }
1682
1683
  _AccordionItem_id = new WeakMap();
1683
- AccordionItem.styles = [css_248z$K];
1684
+ AccordionItem.styles = [css_248z$N];
1684
1685
  __decorate([
1685
1686
  n({ type: Boolean, reflect: true })
1686
1687
  ], AccordionItem.prototype, "disabled", void 0);
@@ -1703,7 +1704,7 @@ __decorate([
1703
1704
  e$2('.header-button')
1704
1705
  ], AccordionItem.prototype, "buttonElement", void 0);
1705
1706
 
1706
- var css_248z$J = i`* {
1707
+ var css_248z$M = i`* {
1707
1708
  box-sizing: border-box;
1708
1709
  }
1709
1710
 
@@ -1831,7 +1832,7 @@ class Accordion extends i$1 {
1831
1832
  return b `<div class="accordion"><slot></slot></div>`;
1832
1833
  }
1833
1834
  }
1834
- Accordion.styles = [css_248z$J];
1835
+ Accordion.styles = [css_248z$M];
1835
1836
  Accordion.Item = AccordionItem;
1836
1837
  __decorate([
1837
1838
  n({ type: Boolean, reflect: true })
@@ -1843,7 +1844,7 @@ __decorate([
1843
1844
  o({ selector: 'wc-accordion-item' })
1844
1845
  ], Accordion.prototype, "items", void 0);
1845
1846
 
1846
- var css_248z$I = i`* {
1847
+ var css_248z$L = i`* {
1847
1848
  box-sizing: border-box;
1848
1849
  }
1849
1850
 
@@ -1907,9 +1908,9 @@ class Link extends BaseHyperlinkMixin(i$1) {
1907
1908
  </a>`;
1908
1909
  }
1909
1910
  }
1910
- Link.styles = [css_248z$I];
1911
+ Link.styles = [css_248z$L];
1911
1912
 
1912
- var css_248z$H = i`* {
1913
+ var css_248z$K = i`* {
1913
1914
  box-sizing: border-box;
1914
1915
  }
1915
1916
 
@@ -2046,7 +2047,7 @@ slot::slotted(*) {
2046
2047
  --_container-state-opacity: 0.08;
2047
2048
  }`;
2048
2049
 
2049
- var css_248z$G = i`:host([color=default]) {
2050
+ var css_248z$J = i`:host([color=default]) {
2050
2051
  --filled-tag-container-color: var(--color-surface);
2051
2052
  --filled-tag-label-text-color: var(--color-on-surface);
2052
2053
  --tonal-tag-container-color: var(--color-surface-container);
@@ -2112,7 +2113,7 @@ var css_248z$G = i`:host([color=default]) {
2112
2113
  --outlined-tag-label-text-color: var(--color-purple);
2113
2114
  }`;
2114
2115
 
2115
- var css_248z$F = i`.tag {
2116
+ var css_248z$I = i`.tag {
2116
2117
  font-family: var(--font-family-sans) !important;
2117
2118
  }
2118
2119
 
@@ -2211,7 +2212,7 @@ class Tag extends i$1 {
2211
2212
  }
2212
2213
  // Define styles (Lit handles Scoping via Shadow DOM by default)
2213
2214
  // You would typically import your tag.scss.js here or use the css tag
2214
- Tag.styles = [css_248z$H, css_248z$G, css_248z$F];
2215
+ Tag.styles = [css_248z$K, css_248z$J, css_248z$I];
2215
2216
  __decorate([
2216
2217
  n({ type: Boolean })
2217
2218
  ], Tag.prototype, "dismissible", void 0);
@@ -2225,7 +2226,7 @@ __decorate([
2225
2226
  n()
2226
2227
  ], Tag.prototype, "size", void 0);
2227
2228
 
2228
- var css_248z$E = i`* {
2229
+ var css_248z$H = i`* {
2229
2230
  box-sizing: border-box;
2230
2231
  }
2231
2232
 
@@ -2237,24 +2238,32 @@ var css_248z$E = i`* {
2237
2238
  display: inline-block;
2238
2239
  --chip-container-color: var(--color-surface);
2239
2240
  --chip-label-text-color: var(--color-on-surface);
2240
- --chip-outline-color: var(--color-outline);
2241
+ --chip-outline-color: var(--color-outline-variant);
2241
2242
  --chip-container-shape: var(--shape-corner-small);
2243
+ --chip-container-padding: 1rem;
2244
+ /* 8dp */
2242
2245
  }
2243
2246
 
2244
- :host-context([data-theme=dark]) {
2245
- --chip-hover-color: var(--color-primary-30);
2247
+ /*
2248
+ * Reset native button/link styles
2249
+ */
2250
+ .button {
2251
+ background: transparent;
2252
+ border: none;
2253
+ appearance: none;
2254
+ margin: 0;
2255
+ padding: 0;
2256
+ outline: none;
2257
+ text-decoration: none;
2246
2258
  }
2247
2259
 
2248
2260
  .chip {
2249
2261
  position: relative;
2250
2262
  display: inline-flex;
2251
- flex-direction: column;
2252
2263
  align-items: center;
2253
- justify-content: center;
2254
2264
  height: var(--chip-height, var(--_chip-height, 2rem));
2255
- padding: 0 var(--_container-padding, 1rem);
2256
2265
  width: 100%;
2257
- border-radius: var(--chip-container-shape);
2266
+ cursor: pointer;
2258
2267
  }
2259
2268
  .chip .tag-content {
2260
2269
  position: relative;
@@ -2263,41 +2272,74 @@ var css_248z$E = i`* {
2263
2272
  text-overflow: ellipsis;
2264
2273
  white-space: nowrap;
2265
2274
  max-width: 100%;
2275
+ height: 100%;
2266
2276
  display: flex;
2267
2277
  align-items: center;
2268
2278
  justify-content: center;
2269
- color: var(--chip-label-text-color);
2270
- font-family: var(--typography-label-small-font-family) !important;
2271
- font-size: var(--typography-label-small-font-size) !important;
2272
- font-weight: var(--typography-label-small-font-weight) !important;
2273
- line-height: var(--typography-label-small-line-height) !important;
2274
- letter-spacing: var(--typography-label-small-letter-spacing) !important;
2275
- gap: 0.5rem;
2279
+ padding-inline: var(--chip-container-padding);
2280
+ color: var(--_chip-text-color);
2281
+ opacity: var(--_chip-text-opacity, 1);
2282
+ font-family: var(--typography-label-large-font-family) !important;
2283
+ font-size: var(--typography-label-large-font-size) !important;
2284
+ font-weight: var(--typography-label-large-font-weight) !important;
2285
+ line-height: var(--typography-label-large-line-height) !important;
2286
+ letter-spacing: var(--typography-label-large-letter-spacing) !important;
2276
2287
  }
2277
- .chip .tag-content .tag-image {
2278
- width: 1.125rem;
2279
- height: 1.125rem;
2280
- border-radius: 100%;
2281
- background: var(--chip-hover-color);
2288
+ .chip .tag-content .label-container {
2289
+ min-width: 0;
2290
+ overflow: hidden;
2291
+ text-overflow: ellipsis;
2292
+ white-space: nowrap;
2282
2293
  }
2283
- .chip .close-btn {
2284
- border-radius: 12px;
2294
+ .chip .tag-content .close-btn {
2295
+ height: 100%;
2285
2296
  padding: 0;
2297
+ padding-inline: calc(var(--chip-container-padding) / 2);
2286
2298
  margin: 0;
2287
2299
  border: none;
2288
2300
  background: transparent;
2289
2301
  line-height: 0;
2290
2302
  cursor: pointer;
2291
- --icon-size: 1rem;
2292
2303
  }
2293
- .chip .close-btn .close-btn-icon {
2304
+ .chip .tag-content .close-btn .close-btn-icon {
2294
2305
  --icon-size: 1rem;
2306
+ --icon-color: var(--_chip-text-color);
2295
2307
  }
2296
- .chip .close-btn:hover {
2308
+ .chip .tag-content .close-btn:hover {
2297
2309
  background: var(--chip-hover-color);
2298
2310
  }
2299
- .chip .close-btn:hover .close-btn-icon {
2300
- color: var(--background);
2311
+ .chip .tag-content .icon-slot-container {
2312
+ height: 100%;
2313
+ display: flex;
2314
+ align-items: center;
2315
+ --icon-size: 1rem;
2316
+ --icon-color: var(--color-primary);
2317
+ }
2318
+ .chip .focus-ring {
2319
+ z-index: 2;
2320
+ display: block;
2321
+ --focus-ring-container-shape: var(--chip-container-shape);
2322
+ }
2323
+ .chip .ripple {
2324
+ display: block;
2325
+ border-radius: var(--chip-container-shape);
2326
+ --ripple-state-opacity: var(--_chip-state-opacity, 0);
2327
+ --ripple-pressed-color: var(--_chip-state-color);
2328
+ }
2329
+ .chip.disabled {
2330
+ cursor: not-allowed;
2331
+ }
2332
+ .chip.dismissible .tag-content {
2333
+ padding-inline-end: 0;
2334
+ }
2335
+ .chip.dismissible.actionable .tag-content {
2336
+ padding-inline-end: calc(var(--chip-container-padding) / 2);
2337
+ }
2338
+ .chip.icon-slot-has-content .tag-content, .chip.selected .tag-content {
2339
+ padding-inline-start: 0;
2340
+ }
2341
+ .chip.icon-slot-has-content .icon-slot-container, .chip.selected .icon-slot-container {
2342
+ padding-inline: calc(var(--chip-container-padding) / 2);
2301
2343
  }
2302
2344
  .chip {
2303
2345
  /**
@@ -2307,66 +2349,56 @@ var css_248z$E = i`* {
2307
2349
  .chip .background {
2308
2350
  display: block;
2309
2351
  position: absolute;
2352
+ left: 0;
2310
2353
  width: 100%;
2311
2354
  height: 100%;
2312
- border-radius: inherit;
2313
- background: var(--chip-container-color);
2355
+ border-radius: var(--chip-container-shape);
2356
+ background: var(--_chip-container-color);
2314
2357
  pointer-events: none;
2315
2358
  }
2316
2359
  .chip .outline {
2360
+ z-index: 0;
2317
2361
  display: block;
2318
2362
  position: absolute;
2363
+ left: 0;
2319
2364
  width: 100%;
2320
2365
  height: 100%;
2321
- border-radius: inherit;
2366
+ border-radius: var(--chip-container-shape);
2322
2367
  border: 1px solid var(--chip-outline-color);
2323
2368
  }
2324
2369
  .chip .elevation {
2325
2370
  --elevation-level: 0;
2326
2371
  transition-duration: 280ms;
2327
- border-radius: inherit;
2328
- }
2329
- .chip.dismissible .tag-content {
2330
- padding-inline-end: 0.25rem;
2331
- }
2332
- .chip.selected {
2333
- color: var(--background);
2334
- background: var(--chip-hover-color);
2372
+ --elevation-container-shape: var(--chip-container-shape);
2335
2373
  }
2336
- .chip.selected .close-btn-icon {
2337
- color: var(--background);
2338
- }`;
2339
2374
 
2340
- var css_248z$D = i`:host([color=red]) {
2341
- --chip-container-color: var(--color-red-container);
2342
- --chip-outline-color: var(--color-on-red-container);
2375
+ /** Color state management */
2376
+ .chip {
2377
+ --_chip-container-color: var(--chip-container-color);
2378
+ --_chip-text-color: var(--chip-label-text-color);
2379
+ --_chip-state-color: var(--_chip-text-color);
2343
2380
  }
2344
-
2345
- :host([color=green]) {
2346
- --chip-container-color: var(--color-green-container);
2347
- --chip-label-text-color: var(--color-on-green-container);
2348
- --chip-outline-color: var(--color-on-green-container);
2381
+ .chip:hover {
2382
+ --_chip-state-opacity: 0.08;
2349
2383
  }
2350
-
2351
- :host([color=blue]) {
2352
- --chip-container-color: var(--color-blue-container);
2353
- --chip-label-text-color: var(--color-on-blue-container);
2354
- --chip-outline-color: var(--color-on-blue-container);
2384
+ .chip.pressed {
2385
+ --_chip-state-opacity: 0.12;
2355
2386
  }
2356
-
2357
- :host([color=yellow]) {
2358
- --chip-container-color: var(--color-yellow-container);
2359
- --chip-label-text-color: var(--color-on-yellow-container);
2360
- --chip-outline-color: var(--color-on-yellow-container);
2387
+ .chip.selected {
2388
+ --_chip-container-color: var(--color-secondary-container);
2389
+ --_chip-text-color: var(--color-on-secondary-container);
2361
2390
  }
2362
-
2363
- :host([color=purple]) {
2364
- --chip-container-color: var(--color-purple-container);
2365
- --chip-label-text-color: var(--color-on-purple-container);
2366
- --chip-outline-color: var(--color-on-purple-container);
2391
+ .chip.disabled {
2392
+ --_chip-container-color: var(--color-on-surface);
2393
+ --_chip-container-opacity: 0.1;
2394
+ --_chip-text-color: var(--color-on-surface);
2395
+ --_chip-text-opacity: 0.38;
2396
+ }
2397
+ .chip.disabled .ripple {
2398
+ display: none;
2367
2399
  }`;
2368
2400
 
2369
- var css_248z$C = i`.tag {
2401
+ var css_248z$G = i`.tag {
2370
2402
  font-family: var(--font-family-sans) !important;
2371
2403
  }
2372
2404
 
@@ -2436,17 +2468,25 @@ var css_248z$C = i`.tag {
2436
2468
  * <wc-chip>Chip content</wc-chip>
2437
2469
  * ```
2438
2470
  */
2439
- class Chip extends i$1 {
2471
+ class Chip extends BaseButton {
2440
2472
  constructor() {
2441
2473
  super(...arguments);
2442
2474
  /** If true, the tag will have a close icon. */
2443
2475
  this.dismissible = false;
2444
- /** Tag color. */
2445
- this.color = 'default';
2446
- /** Tag value. */
2447
- this.value = '';
2448
- /** If true, the tag will be selected. */
2449
- this.selected = false;
2476
+ this._hasIconSlotContent = false;
2477
+ this._isPressed = false;
2478
+ }
2479
+ focus() {
2480
+ this.buttonElement?.focus();
2481
+ }
2482
+ blur() {
2483
+ this.buttonElement?.blur();
2484
+ }
2485
+ firstUpdated() {
2486
+ observerSlotChangesWithCallback(this.renderRoot.querySelector('slot[name="icon"]'), hasContent => {
2487
+ this._hasIconSlotContent = hasContent;
2488
+ this.requestUpdate();
2489
+ });
2450
2490
  }
2451
2491
  _dismissClickHandler(e) {
2452
2492
  e.stopPropagation();
@@ -2460,7 +2500,7 @@ class Chip extends i$1 {
2460
2500
  }
2461
2501
  _renderCloseButton() {
2462
2502
  if (!this.dismissible)
2463
- return null;
2503
+ return A;
2464
2504
  return b `
2465
2505
  <button
2466
2506
  class="close-btn"
@@ -2471,57 +2511,135 @@ class Chip extends i$1 {
2471
2511
  </button>
2472
2512
  `;
2473
2513
  }
2474
- _renderImage() {
2475
- if (this.imageSrc)
2476
- return b `<img
2477
- src=${this.imageSrc}
2478
- class="tag-image"
2479
- alt="Tag Logo"
2480
- />`;
2481
- return A;
2482
- }
2483
2514
  render() {
2484
- const classes = {
2515
+ const cssClasses = {
2485
2516
  chip: true,
2517
+ button: true,
2486
2518
  selected: this.selected,
2487
2519
  dismissible: this.dismissible,
2488
- [`color-${this.color}`]: true,
2520
+ pressed: this._isPressed,
2521
+ 'icon-slot-has-content': this._hasIconSlotContent,
2489
2522
  };
2523
+ if (!this.__isLink()) {
2524
+ return b `<button
2525
+ class=${e$1(cssClasses)}
2526
+ id="button"
2527
+ type=${this.htmlType}
2528
+ @click=${this.__dispatchClickWithThrottle}
2529
+ @mousedown=${this.__handlePress}
2530
+ @keydown=${this.__handlePress}
2531
+ @keyup=${this.__handlePress}
2532
+
2533
+ aria-describedby=${o$1(this.softDisabled ? BaseButton.DISABLED_REASON_ID : undefined)}
2534
+ ?aria-disabled=${this.softDisabled}
2535
+
2536
+ ?disabled=${this.disabled}
2537
+ ${spread(this.configAria)}
2538
+ >
2539
+ ${this.renderChipContent()}
2540
+ </button>`;
2541
+ }
2542
+ return b `<a
2543
+ class=${e$1(cssClasses)}
2544
+ id="button"
2545
+ href=${this.href}
2546
+ target=${this.target}
2547
+ tabindex=${this.disabled ? '-1' : '0'}
2548
+
2549
+ @click=${this.__dispatchClick}
2550
+ @mousedown=${this.__handlePress}
2551
+ @keydown=${this.__handlePress}
2552
+ @keyup=${this.__handlePress}
2553
+ role="button"
2554
+
2555
+ aria-describedby=${o$1(this.softDisabled ? BaseButton.DISABLED_REASON_ID : undefined)}
2556
+ ?aria-disabled=${this.softDisabled}
2557
+
2558
+ ${spread(this.configAria)}
2559
+ >
2560
+ ${this.renderChipContent()}
2561
+ </a>`;
2562
+ }
2563
+ renderChipContent() {
2490
2564
  return b `
2491
- <div class="${e$1(classes)}">
2492
- <wc-elevation class="elevation"></wc-elevation>
2493
- <div class="background"></div>
2494
- <div class="outline"></div>
2565
+ <wc-focus-ring class="focus-ring" for="button"></wc-focus-ring>
2566
+ <wc-elevation class="elevation"></wc-elevation>
2567
+ <div class="background"></div>
2568
+ <div class="outline"></div>
2569
+ <wc-ripple class="ripple"></wc-ripple>
2570
+ <div class="tag-content">
2495
2571
 
2496
- <div class="tag-content">
2497
- <slot name="icon"></slot>
2498
- <slot></slot>
2499
- ${this._renderCloseButton()}
2572
+ <div class="icon-slot-container">
2573
+ ${this.selected
2574
+ ? b `<wc-icon class="selected-icon" name="check"></wc-icon>`
2575
+ : b `<slot name="icon"></slot>`}
2500
2576
  </div>
2577
+ <div class="label-container">
2578
+ <slot></slot>
2579
+ </div>
2580
+
2581
+ ${this._renderCloseButton()}
2501
2582
  </div>
2502
2583
  `;
2503
2584
  }
2504
2585
  }
2505
2586
  // Define styles (Lit handles Scoping via Shadow DOM by default)
2506
2587
  // You would typically import your tag.scss.js here or use the css tag
2507
- Chip.styles = [css_248z$E, css_248z$D, css_248z$C];
2588
+ Chip.styles = [css_248z$H, css_248z$G];
2508
2589
  __decorate([
2509
2590
  n({ type: Boolean })
2510
2591
  ], Chip.prototype, "dismissible", void 0);
2511
2592
  __decorate([
2512
- n({ type: String, reflect: true })
2513
- ], Chip.prototype, "color", void 0);
2514
- __decorate([
2515
- n({ type: String, reflect: true })
2516
- ], Chip.prototype, "value", void 0);
2593
+ n({ reflect: true })
2594
+ ], Chip.prototype, "configAria", void 0);
2517
2595
  __decorate([
2518
- n({ type: Boolean, reflect: true })
2519
- ], Chip.prototype, "selected", void 0);
2596
+ r()
2597
+ ], Chip.prototype, "_hasIconSlotContent", void 0);
2520
2598
  __decorate([
2521
- n({ type: String })
2522
- ], Chip.prototype, "imageSrc", void 0);
2599
+ r()
2600
+ ], Chip.prototype, "_isPressed", void 0);
2601
+
2602
+ var css_248z$F = i`* {
2603
+ box-sizing: border-box;
2604
+ }
2605
+
2606
+ .screen-reader-only {
2607
+ display: none !important;
2608
+ }
2609
+
2610
+ :host {
2611
+ display: block;
2612
+ }
2613
+
2614
+ slot {
2615
+ display: flex;
2616
+ flex-wrap: wrap;
2617
+ gap: 8px;
2618
+ }`;
2619
+
2620
+ /**
2621
+ * @label Chip Set
2622
+ * @tag wc-chip-set
2623
+ * @rawTag chip-set
2624
+ * @summary A layout container for wrapping chips.
2625
+ * @tags layout
2626
+ *
2627
+ * @example
2628
+ * ```html
2629
+ * <wc-chip-set>
2630
+ * <wc-chip>One</wc-chip>
2631
+ * <wc-chip>Two</wc-chip>
2632
+ * </wc-chip-set>
2633
+ * ```
2634
+ */
2635
+ class ChipSet extends i$1 {
2636
+ render() {
2637
+ return b `<slot></slot>`;
2638
+ }
2639
+ }
2640
+ ChipSet.styles = [css_248z$F];
2523
2641
 
2524
- var css_248z$B = i`:host {
2642
+ var css_248z$E = i`:host {
2525
2643
  display: block;
2526
2644
  --progress-height: 0.25rem;
2527
2645
  --progress-container-color: var(--color-primary);
@@ -2711,7 +2829,7 @@ class LinearProgress extends BaseProgress {
2711
2829
  <div class="track track-start"></div>
2712
2830
  <div
2713
2831
  class="active-indicator"
2714
- style="${o$1({
2832
+ style="${o$2({
2715
2833
  width: `${this.__getPercentageValue()}%`,
2716
2834
  })}"
2717
2835
  ></div>
@@ -2727,9 +2845,9 @@ class LinearProgress extends BaseProgress {
2727
2845
  }
2728
2846
  }
2729
2847
  // Lit components use static styles for better performance
2730
- LinearProgress.styles = [css_248z$B];
2848
+ LinearProgress.styles = [css_248z$E];
2731
2849
 
2732
- var css_248z$A = i`:host {
2850
+ var css_248z$D = i`:host {
2733
2851
  display: inline-block;
2734
2852
  --progress-height: 1.5rem;
2735
2853
  --progress-line-thickness: 4px;
@@ -2871,7 +2989,7 @@ class CircularProgress extends BaseProgress {
2871
2989
  cx="8"
2872
2990
  cy="8"
2873
2991
  r="6"
2874
- style="${o$1({
2992
+ style="${o$2({
2875
2993
  strokeDasharray: `${circumference}`,
2876
2994
  strokeDashoffset: this.indeterminate ? undefined : `${offset}`,
2877
2995
  })}"
@@ -2892,9 +3010,9 @@ class CircularProgress extends BaseProgress {
2892
3010
  }
2893
3011
  }
2894
3012
  // Lit components use static styles for better performance
2895
- CircularProgress.styles = [css_248z$A];
3013
+ CircularProgress.styles = [css_248z$D];
2896
3014
 
2897
- var css_248z$z = i`* {
3015
+ var css_248z$C = i`* {
2898
3016
  box-sizing: border-box;
2899
3017
  }
2900
3018
 
@@ -2998,12 +3116,12 @@ class Skeleton extends i$1 {
2998
3116
  return b ` <div class="skeleton"></div>`;
2999
3117
  }
3000
3118
  }
3001
- Skeleton.styles = [css_248z$z];
3119
+ Skeleton.styles = [css_248z$C];
3002
3120
  __decorate([
3003
3121
  n({ type: Boolean, reflect: true })
3004
3122
  ], Skeleton.prototype, "visible", void 0);
3005
3123
 
3006
- var css_248z$y = i`* {
3124
+ var css_248z$B = i`* {
3007
3125
  box-sizing: border-box;
3008
3126
  }
3009
3127
 
@@ -3178,7 +3296,7 @@ class Input extends BaseInput {
3178
3296
  `;
3179
3297
  }
3180
3298
  }
3181
- Input.styles = [css_248z$y];
3299
+ Input.styles = [css_248z$B];
3182
3300
  __decorate([
3183
3301
  n({ type: String })
3184
3302
  ], Input.prototype, "value", void 0);
@@ -3237,7 +3355,7 @@ __decorate([
3237
3355
  e$2('.input-element')
3238
3356
  ], Input.prototype, "inputElement", void 0);
3239
3357
 
3240
- var css_248z$x = i`* {
3358
+ var css_248z$A = i`* {
3241
3359
  box-sizing: border-box;
3242
3360
  }
3243
3361
 
@@ -3470,7 +3588,7 @@ class UrlField extends BaseInput {
3470
3588
  `;
3471
3589
  }
3472
3590
  }
3473
- UrlField.styles = [css_248z$x];
3591
+ UrlField.styles = [css_248z$A];
3474
3592
  __decorate([
3475
3593
  n({ type: String })
3476
3594
  ], UrlField.prototype, "value", void 0);
@@ -3520,7 +3638,7 @@ __decorate([
3520
3638
  e$2('.url-input')
3521
3639
  ], UrlField.prototype, "inputElement", void 0);
3522
3640
 
3523
- var css_248z$w = i`* {
3641
+ var css_248z$z = i`* {
3524
3642
  box-sizing: border-box;
3525
3643
  }
3526
3644
 
@@ -3609,7 +3727,7 @@ var css_248z$w = i`* {
3609
3727
  display: flex;
3610
3728
  align-items: center;
3611
3729
  flex: 1;
3612
- height: var(--field-height, 3.5rem);
3730
+ min-height: var(--field-height, 3.5rem);
3613
3731
  padding-block: var(--field-padding-block);
3614
3732
  z-index: 1;
3615
3733
  }
@@ -3888,7 +4006,7 @@ class Field extends i$1 {
3888
4006
  return b `<div class="text-count">${this.textCount}</div>`;
3889
4007
  }
3890
4008
  }
3891
- Field.styles = [css_248z$w];
4009
+ Field.styles = [css_248z$z];
3892
4010
  __decorate([
3893
4011
  n({ type: String })
3894
4012
  ], Field.prototype, "label", void 0);
@@ -3944,7 +4062,7 @@ __decorate([
3944
4062
  r()
3945
4063
  ], Field.prototype, "slotEndHasContent", void 0);
3946
4064
 
3947
- var css_248z$v = i`* {
4065
+ var css_248z$y = i`* {
3948
4066
  box-sizing: border-box;
3949
4067
  }
3950
4068
 
@@ -3992,8 +4110,8 @@ var css_248z$v = i`* {
3992
4110
  var _NumberField_id;
3993
4111
  /**
3994
4112
  * @label Number Field
3995
- * @tag number-field
3996
- * @rawTag number
4113
+ * @tag wc-number-field
4114
+ * @rawTag number-field
3997
4115
  *
3998
4116
  * @summary The Number Field component is used to capture numeric user input.
3999
4117
  *
@@ -4143,7 +4261,7 @@ class NumberField extends BaseInput {
4143
4261
  }
4144
4262
  }
4145
4263
  _NumberField_id = new WeakMap();
4146
- NumberField.styles = [css_248z$v];
4264
+ NumberField.styles = [css_248z$y];
4147
4265
  __decorate([
4148
4266
  n({ type: Number })
4149
4267
  ], NumberField.prototype, "value", void 0);
@@ -4205,7 +4323,7 @@ __decorate([
4205
4323
  e$2('.input-element')
4206
4324
  ], NumberField.prototype, "inputElement", void 0);
4207
4325
 
4208
- var css_248z$u = i`* {
4326
+ var css_248z$x = i`* {
4209
4327
  box-sizing: border-box;
4210
4328
  }
4211
4329
 
@@ -4372,7 +4490,7 @@ class DatePicker extends BaseInput {
4372
4490
  `;
4373
4491
  }
4374
4492
  }
4375
- DatePicker.styles = [css_248z$u];
4493
+ DatePicker.styles = [css_248z$x];
4376
4494
  __decorate([
4377
4495
  n({ type: String })
4378
4496
  ], DatePicker.prototype, "value", void 0);
@@ -4428,7 +4546,7 @@ __decorate([
4428
4546
  e$2('.input-element')
4429
4547
  ], DatePicker.prototype, "inputElement", void 0);
4430
4548
 
4431
- var css_248z$t = i`* {
4549
+ var css_248z$w = i`* {
4432
4550
  box-sizing: border-box;
4433
4551
  }
4434
4552
 
@@ -4595,7 +4713,7 @@ class TimePicker extends BaseInput {
4595
4713
  `;
4596
4714
  }
4597
4715
  }
4598
- TimePicker.styles = [css_248z$t];
4716
+ TimePicker.styles = [css_248z$w];
4599
4717
  __decorate([
4600
4718
  n({ type: String })
4601
4719
  ], TimePicker.prototype, "value", void 0);
@@ -4651,7 +4769,7 @@ __decorate([
4651
4769
  e$2('.input-element')
4652
4770
  ], TimePicker.prototype, "inputElement", void 0);
4653
4771
 
4654
- var css_248z$s = i`* {
4772
+ var css_248z$v = i`* {
4655
4773
  box-sizing: border-box;
4656
4774
  }
4657
4775
 
@@ -4811,7 +4929,7 @@ class Textarea extends BaseInput {
4811
4929
  `;
4812
4930
  }
4813
4931
  }
4814
- Textarea.styles = [css_248z$s];
4932
+ Textarea.styles = [css_248z$v];
4815
4933
  __decorate([
4816
4934
  n({ type: String })
4817
4935
  ], Textarea.prototype, "value", void 0);
@@ -4870,7 +4988,7 @@ __decorate([
4870
4988
  e$2('.input-element')
4871
4989
  ], Textarea.prototype, "inputElement", void 0);
4872
4990
 
4873
- var css_248z$r = i`* {
4991
+ var css_248z$u = i`* {
4874
4992
  box-sizing: border-box;
4875
4993
  }
4876
4994
 
@@ -5211,7 +5329,7 @@ class Switch extends BaseInput {
5211
5329
  `;
5212
5330
  }
5213
5331
  }
5214
- Switch.styles = [css_248z$r];
5332
+ Switch.styles = [css_248z$u];
5215
5333
  __decorate([
5216
5334
  n({ type: Boolean })
5217
5335
  ], Switch.prototype, "value", void 0);
@@ -5255,7 +5373,7 @@ __decorate([
5255
5373
  e$2('.input-native')
5256
5374
  ], Switch.prototype, "nativeElement", void 0);
5257
5375
 
5258
- var css_248z$q = i`* {
5376
+ var css_248z$t = i`* {
5259
5377
  box-sizing: border-box;
5260
5378
  }
5261
5379
 
@@ -5713,7 +5831,7 @@ class Checkbox extends i$1 {
5713
5831
  `;
5714
5832
  }
5715
5833
  }
5716
- Checkbox.styles = [css_248z$q];
5834
+ Checkbox.styles = [css_248z$t];
5717
5835
  __decorate([
5718
5836
  n({ type: String })
5719
5837
  ], Checkbox.prototype, "name", void 0);
@@ -5760,7 +5878,7 @@ __decorate([
5760
5878
  e$2('.input-native')
5761
5879
  ], Checkbox.prototype, "nativeElement", void 0);
5762
5880
 
5763
- var css_248z$p = i`* {
5881
+ var css_248z$s = i`* {
5764
5882
  box-sizing: border-box;
5765
5883
  }
5766
5884
 
@@ -5847,9 +5965,9 @@ class Spinner extends i$1 {
5847
5965
  `;
5848
5966
  }
5849
5967
  }
5850
- Spinner.styles = [css_248z$p];
5968
+ Spinner.styles = [css_248z$s];
5851
5969
 
5852
- var css_248z$o = i`* {
5970
+ var css_248z$r = i`* {
5853
5971
  box-sizing: border-box;
5854
5972
  }
5855
5973
 
@@ -5967,12 +6085,12 @@ class Container extends i$1 {
5967
6085
  `;
5968
6086
  }
5969
6087
  }
5970
- Container.styles = [css_248z$o];
6088
+ Container.styles = [css_248z$r];
5971
6089
  __decorate([
5972
6090
  n({ type: String, reflect: true })
5973
6091
  ], Container.prototype, "size", void 0);
5974
6092
 
5975
- var css_248z$n = i`* {
6093
+ var css_248z$q = i`* {
5976
6094
  box-sizing: border-box;
5977
6095
  }
5978
6096
 
@@ -6135,7 +6253,7 @@ class EmptyState extends i$1 {
6135
6253
  }
6136
6254
  }
6137
6255
  // Lit handles styles in a static property for better performance
6138
- EmptyState.styles = [css_248z$n];
6256
+ EmptyState.styles = [css_248z$q];
6139
6257
  __decorate([
6140
6258
  n({ type: String, reflect: true })
6141
6259
  ], EmptyState.prototype, "illustration", void 0);
@@ -6149,7 +6267,7 @@ __decorate([
6149
6267
  r()
6150
6268
  ], EmptyState.prototype, "vertical", void 0);
6151
6269
 
6152
- var css_248z$m = i`* {
6270
+ var css_248z$p = i`* {
6153
6271
  box-sizing: border-box;
6154
6272
  }
6155
6273
 
@@ -6387,7 +6505,7 @@ class Tooltip extends i$1 {
6387
6505
  `;
6388
6506
  }
6389
6507
  }
6390
- Tooltip.styles = [css_248z$m];
6508
+ Tooltip.styles = [css_248z$p];
6391
6509
  __decorate([
6392
6510
  n()
6393
6511
  ], Tooltip.prototype, "content", void 0);
@@ -6407,7 +6525,7 @@ __decorate([
6407
6525
  n({ type: Boolean, reflect: true })
6408
6526
  ], Tooltip.prototype, "preview", void 0);
6409
6527
 
6410
- var css_248z$l = i`* {
6528
+ var css_248z$o = i`* {
6411
6529
  box-sizing: border-box;
6412
6530
  }
6413
6531
 
@@ -6443,7 +6561,7 @@ ol {
6443
6561
  pointer-events: none;
6444
6562
  }`;
6445
6563
 
6446
- var css_248z$k = i`* {
6564
+ var css_248z$n = i`* {
6447
6565
  box-sizing: border-box;
6448
6566
  }
6449
6567
 
@@ -6552,8 +6670,8 @@ class BreadcrumbItem extends i$1 {
6552
6670
  <a
6553
6671
  class="breadcrumb-link"
6554
6672
  itemprop="item"
6555
- href=${o$2(this.href)}
6556
- target=${o$2(this.target)}
6673
+ href=${o$1(this.href)}
6674
+ target=${o$1(this.target)}
6557
6675
  ${this.target === '_blank'
6558
6676
  ? b `rel="noopener noreferrer"`
6559
6677
  : A}
@@ -6573,7 +6691,7 @@ class BreadcrumbItem extends i$1 {
6573
6691
  `;
6574
6692
  }
6575
6693
  }
6576
- BreadcrumbItem.styles = [css_248z$k];
6694
+ BreadcrumbItem.styles = [css_248z$n];
6577
6695
  __decorate([
6578
6696
  n({ reflect: true })
6579
6697
  ], BreadcrumbItem.prototype, "href", void 0);
@@ -6615,7 +6733,6 @@ class Breadcrumb extends i$1 {
6615
6733
  super(...arguments);
6616
6734
  /**
6617
6735
  * Accessible label for the breadcrumb navigation landmark.
6618
- * @default "Breadcrumb"
6619
6736
  */
6620
6737
  this.label = 'Breadcrumb';
6621
6738
  }
@@ -6627,13 +6744,13 @@ class Breadcrumb extends i$1 {
6627
6744
  </nav>`;
6628
6745
  }
6629
6746
  }
6630
- Breadcrumb.styles = [css_248z$l];
6747
+ Breadcrumb.styles = [css_248z$o];
6631
6748
  Breadcrumb.Item = BreadcrumbItem;
6632
6749
  __decorate([
6633
6750
  n({ type: String })
6634
6751
  ], Breadcrumb.prototype, "label", void 0);
6635
6752
 
6636
- var css_248z$j = i`* {
6753
+ var css_248z$m = i`* {
6637
6754
  box-sizing: border-box;
6638
6755
  }
6639
6756
 
@@ -6741,7 +6858,7 @@ var css_248z$j = i`* {
6741
6858
  --_container-color: var(--color-tertiary-container);
6742
6859
  }`;
6743
6860
 
6744
- var css_248z$i = i`* {
6861
+ var css_248z$l = i`* {
6745
6862
  box-sizing: border-box;
6746
6863
  }
6747
6864
 
@@ -6856,7 +6973,7 @@ var css_248z$i = i`* {
6856
6973
  display: none;
6857
6974
  }`;
6858
6975
 
6859
- var css_248z$h = i`:host-context([variant=standard]) {
6976
+ var css_248z$k = i`:host-context([variant=standard]) {
6860
6977
  --menu-item-label-color: var(--color-on-surface-variant);
6861
6978
  --menu-item-label-selected-color: var(--color-on-tertiary-container);
6862
6979
  --menu-item-container-selected-color: var(--color-tertiary-container);
@@ -7027,7 +7144,7 @@ class MenuItem extends BaseButtonMixin(BaseHyperlinkMixin(i$1)) {
7027
7144
  `;
7028
7145
  }
7029
7146
  }
7030
- MenuItem.styles = [css_248z$i, css_248z$h];
7147
+ MenuItem.styles = [css_248z$l, css_248z$k];
7031
7148
  __decorate([
7032
7149
  n({ type: String })
7033
7150
  ], MenuItem.prototype, "value", void 0);
@@ -7104,6 +7221,7 @@ class Menu extends i$1 {
7104
7221
  return;
7105
7222
  }
7106
7223
  this._setActiveItem(item);
7224
+ this._dispatchItemActivate(item);
7107
7225
  if (item.keepOpen) {
7108
7226
  return;
7109
7227
  }
@@ -7322,6 +7440,13 @@ class Menu extends i$1 {
7322
7440
  this.activeIndex = nextIndex;
7323
7441
  this._syncRovingTabIndex();
7324
7442
  }
7443
+ _dispatchItemActivate(item) {
7444
+ this.dispatchEvent(new CustomEvent('menu-item-activate', {
7445
+ bubbles: true,
7446
+ composed: true,
7447
+ detail: { item },
7448
+ }));
7449
+ }
7325
7450
  _applyPositioning() {
7326
7451
  if (!this.open || !this.menuListElement) {
7327
7452
  return;
@@ -7403,7 +7528,7 @@ class Menu extends i$1 {
7403
7528
  </div>`;
7404
7529
  }
7405
7530
  }
7406
- Menu.styles = [css_248z$j];
7531
+ Menu.styles = [css_248z$m];
7407
7532
  Menu.Item = MenuItem;
7408
7533
  __decorate([
7409
7534
  n({ type: Boolean, reflect: true })
@@ -7439,7 +7564,7 @@ __decorate([
7439
7564
  e$2('.menu')
7440
7565
  ], Menu.prototype, "menuListElement", void 0);
7441
7566
 
7442
- var css_248z$g = i`* {
7567
+ var css_248z$j = i`* {
7443
7568
  box-sizing: border-box;
7444
7569
  }
7445
7570
 
@@ -7634,7 +7759,7 @@ class SubMenu extends i$1 {
7634
7759
  `;
7635
7760
  }
7636
7761
  }
7637
- SubMenu.styles = [css_248z$g];
7762
+ SubMenu.styles = [css_248z$j];
7638
7763
  __decorate([
7639
7764
  n({ type: Number, attribute: 'hover-open-delay' })
7640
7765
  ], SubMenu.prototype, "hoverOpenDelay", void 0);
@@ -7654,43 +7779,381 @@ __decorate([
7654
7779
  o({ slot: 'menu' })
7655
7780
  ], SubMenu.prototype, "_menus", void 0);
7656
7781
 
7657
- var css_248z$f = i`@charset "UTF-8";
7782
+ var css_248z$i = i`* {
7783
+ box-sizing: border-box;
7784
+ }
7785
+
7786
+ .screen-reader-only {
7787
+ display: none !important;
7788
+ }
7789
+
7658
7790
  :host {
7659
7791
  display: block;
7660
- height: 100%;
7661
- width: 100%;
7662
7792
  }
7663
7793
 
7664
- .image-wrapper {
7794
+ .list {
7665
7795
  display: flex;
7666
- align-items: center;
7667
- justify-content: center;
7668
- height: 100%;
7669
- width: 100%;
7796
+ flex-direction: column;
7797
+ gap: var(--spacing-050);
7798
+ padding-block: var(--spacing-050);
7799
+ border-radius: var(--shape-corner-large);
7800
+ background-color: var(--_container-color);
7670
7801
  }
7671
7802
 
7672
- img {
7673
- display: block;
7674
- max-height: 100%;
7675
- max-width: 100%;
7803
+ .list.variant-standard {
7804
+ --_container-color: var(--color-surface-container);
7676
7805
  }
7677
7806
 
7678
- img.clickable {
7679
- cursor: zoom-in;
7807
+ .list.variant-vibrant {
7808
+ --_container-color: var(--color-tertiary-container);
7809
+ }`;
7810
+
7811
+ var css_248z$h = i`* {
7812
+ box-sizing: border-box;
7680
7813
  }
7681
7814
 
7682
- .placeholder {
7683
- background: #e0e0e0;
7684
- min-width: 100px;
7685
- min-height: 100px;
7815
+ .screen-reader-only {
7816
+ display: none !important;
7817
+ }
7818
+
7819
+ :host {
7686
7820
  display: block;
7821
+ padding-inline: var(--spacing-050);
7687
7822
  }
7688
7823
 
7689
- /* Preview overlay — rendered in light DOM via portal, but we keep
7690
- a host-level overlay as a fallback when shadow DOM is used. */
7691
- .preview-overlay {
7692
- display: none;
7693
- position: fixed;
7824
+ .item-element {
7825
+ position: relative;
7826
+ min-height: 3.5rem;
7827
+ width: 100%;
7828
+ border: 0;
7829
+ margin: 0;
7830
+ padding: 0;
7831
+ outline: 0;
7832
+ background: transparent;
7833
+ text-align: initial;
7834
+ text-decoration: none;
7835
+ cursor: pointer;
7836
+ font-family: var(--typography-body-large-font-family) !important;
7837
+ font-size: var(--typography-body-large-font-size) !important;
7838
+ font-weight: var(--typography-body-large-font-weight) !important;
7839
+ line-height: var(--typography-body-large-line-height) !important;
7840
+ letter-spacing: var(--typography-body-large-letter-spacing) !important;
7841
+ }
7842
+ .item-element .list-item-content {
7843
+ position: relative;
7844
+ z-index: 1;
7845
+ display: flex;
7846
+ align-items: center;
7847
+ gap: var(--spacing-200);
7848
+ min-height: 3.5rem;
7849
+ padding-inline: var(--spacing-200);
7850
+ color: var(--_label-text-color);
7851
+ opacity: var(--_label-text-opacity, 1);
7852
+ }
7853
+ .item-element .leading,
7854
+ .item-element .trailing {
7855
+ display: inline-flex;
7856
+ align-items: center;
7857
+ justify-content: center;
7858
+ min-width: 1.5rem;
7859
+ color: var(--_leading-trailing-color);
7860
+ }
7861
+ .item-element .trailing {
7862
+ margin-inline-start: auto;
7863
+ }
7864
+ .item-element .content {
7865
+ display: block;
7866
+ flex: 1;
7867
+ min-inline-size: 0;
7868
+ }
7869
+ .item-element .background {
7870
+ position: absolute;
7871
+ inset: 0;
7872
+ background-color: var(--_container-color);
7873
+ opacity: var(--_container-opacity, 1);
7874
+ border-radius: var(--shape-corner-medium);
7875
+ pointer-events: none;
7876
+ }
7877
+ .item-element .focus-ring {
7878
+ --focus-ring-container-shape-start-start: var(--shape-corner-medium);
7879
+ --focus-ring-container-shape-start-end: var(--shape-corner-medium);
7880
+ --focus-ring-container-shape-end-start: var(--shape-corner-medium);
7881
+ --focus-ring-container-shape-end-end: var(--shape-corner-medium);
7882
+ z-index: 2;
7883
+ }
7884
+ .item-element .ripple {
7885
+ --ripple-state-opacity: var(--_container-state-opacity, 0);
7886
+ --ripple-pressed-color: var(--_container-state-color);
7887
+ border-radius: var(--shape-corner-medium);
7888
+ }
7889
+
7890
+ .item-element {
7891
+ --_container-color: transparent;
7892
+ --_label-text-color: var(--color-on-surface);
7893
+ --_leading-trailing-color: var(--color-on-surface-variant);
7894
+ --_container-state-color: var(--color-on-surface);
7895
+ }
7896
+ .item-element:hover:not(:where(.disabled, .selected)) {
7897
+ --_container-state-opacity: 0.08;
7898
+ }
7899
+ .item-element.pressed:not(:where(.disabled)) {
7900
+ --_container-state-opacity: 0.12;
7901
+ }
7902
+ .item-element.selected {
7903
+ --_container-color: var(--color-secondary-container);
7904
+ --_label-text-color: var(--color-on-secondary-container);
7905
+ --_leading-trailing-color: var(--color-on-secondary-container);
7906
+ --_container-state-color: var(--color-on-secondary-container);
7907
+ }
7908
+ .item-element.disabled {
7909
+ cursor: not-allowed;
7910
+ --_label-text-color: var(--color-on-surface);
7911
+ --_label-text-opacity: 0.38;
7912
+ --_leading-trailing-color: var(--color-on-surface);
7913
+ --_container-opacity: 0.12;
7914
+ }
7915
+ .item-element.disabled .ripple {
7916
+ display: none;
7917
+ }`;
7918
+
7919
+ /**
7920
+ * @label List Item
7921
+ * @tag wc-list-item
7922
+ * @rawTag list-item
7923
+ * @parentRawTag list
7924
+ *
7925
+ * @summary A Material 3 list item with leading, trailing and content slots.
7926
+ *
7927
+ * @example
7928
+ * ```html
7929
+ * <wc-list-item selected>
7930
+ * <wc-icon slot="leading" name="person"></wc-icon>
7931
+ * Profile
7932
+ * <wc-icon slot="trailing" name="chevron_right"></wc-icon>
7933
+ * </wc-list-item>
7934
+ * ```
7935
+ * @tags display
7936
+ */
7937
+ class ListItem extends BaseButtonMixin(BaseHyperlinkMixin(i$1)) {
7938
+ constructor() {
7939
+ super(...arguments);
7940
+ this.selected = false;
7941
+ this.isPressed = false;
7942
+ this.__dispatchClick = (event) => {
7943
+ if (this.softDisabled || (this.disabled && this.href)) {
7944
+ event.stopImmediatePropagation();
7945
+ event.preventDefault();
7946
+ return;
7947
+ }
7948
+ if (!isActivationClick(event) || !this.itemElement) {
7949
+ return;
7950
+ }
7951
+ this.focus();
7952
+ dispatchActivationClick(this.itemElement);
7953
+ };
7954
+ this.__handleKeyDown = (event) => {
7955
+ this.__handlePress(event);
7956
+ if (this.disabled || this.softDisabled || !this.itemElement) {
7957
+ return;
7958
+ }
7959
+ if (event.key === ' ') {
7960
+ event.preventDefault();
7961
+ this.itemElement.click();
7962
+ return;
7963
+ }
7964
+ if (event.key === 'Enter' && !this.__isLink()) {
7965
+ event.preventDefault();
7966
+ this.itemElement.click();
7967
+ }
7968
+ };
7969
+ this.__handlePress = (event) => {
7970
+ if (this.disabled || this.softDisabled)
7971
+ return;
7972
+ if (event instanceof KeyboardEvent &&
7973
+ event.type === 'keydown' &&
7974
+ (event.key === 'Enter' || event.key === ' ')) {
7975
+ this.isPressed = true;
7976
+ }
7977
+ else if (event.type === 'mousedown') {
7978
+ this.isPressed = true;
7979
+ }
7980
+ else {
7981
+ this.isPressed = false;
7982
+ }
7983
+ };
7984
+ }
7985
+ connectedCallback() {
7986
+ // eslint-disable-next-line wc/guard-super-call
7987
+ super.connectedCallback();
7988
+ if (!this.hasAttribute('role')) {
7989
+ this.setAttribute('role', 'listitem');
7990
+ }
7991
+ }
7992
+ focus() {
7993
+ this.itemElement?.focus();
7994
+ }
7995
+ blur() {
7996
+ this.itemElement?.blur();
7997
+ }
7998
+ render() {
7999
+ const isLink = this.__isLink();
8000
+ const cssClasses = {
8001
+ 'list-item': true,
8002
+ 'item-element': true,
8003
+ selected: this.selected,
8004
+ disabled: this.disabled || this.softDisabled,
8005
+ pressed: this.isPressed,
8006
+ };
8007
+ if (!isLink) {
8008
+ return b `
8009
+ <button
8010
+ id="item"
8011
+ class=${e$1(cssClasses)}
8012
+ type=${this.htmlType}
8013
+ ?disabled=${this.disabled}
8014
+ ?aria-disabled=${this.softDisabled}
8015
+ @click=${this.__dispatchClick}
8016
+ @mousedown=${this.__handlePress}
8017
+ @keydown=${this.__handleKeyDown}
8018
+ @keyup=${this.__handlePress}
8019
+ >
8020
+ ${this.renderContent()}
8021
+ </button>
8022
+ `;
8023
+ }
8024
+ return b `
8025
+ <a
8026
+ id="item"
8027
+ class=${e$1(cssClasses)}
8028
+ href=${this.href}
8029
+ target=${this.target}
8030
+ rel=${o$1(this.rel)}
8031
+ download=${o$1(this.download)}
8032
+ tabindex=${this.disabled ? '-1' : '0'}
8033
+ aria-disabled=${String(this.disabled || this.softDisabled)}
8034
+ @click=${this.__dispatchClick}
8035
+ @mousedown=${this.__handlePress}
8036
+ @keydown=${this.__handleKeyDown}
8037
+ @keyup=${this.__handlePress}
8038
+ >
8039
+ ${this.renderContent()}
8040
+ </a>
8041
+ `;
8042
+ }
8043
+ renderContent() {
8044
+ return b `
8045
+ <wc-focus-ring class="focus-ring" for="item"></wc-focus-ring>
8046
+ <div class="background"></div>
8047
+ <wc-ripple class="ripple"></wc-ripple>
8048
+
8049
+ <div class="list-item-content">
8050
+ <div class="leading">
8051
+ <slot name="leading"></slot>
8052
+ </div>
8053
+ <div class="content">
8054
+ <slot></slot>
8055
+ </div>
8056
+ <div class="trailing">
8057
+ <slot name="trailing"></slot>
8058
+ </div>
8059
+ </div>
8060
+ `;
8061
+ }
8062
+ }
8063
+ ListItem.styles = [css_248z$h];
8064
+ __decorate([
8065
+ n({ type: Boolean, reflect: true })
8066
+ ], ListItem.prototype, "selected", void 0);
8067
+ __decorate([
8068
+ e$2('#item')
8069
+ ], ListItem.prototype, "itemElement", void 0);
8070
+ __decorate([
8071
+ r()
8072
+ ], ListItem.prototype, "isPressed", void 0);
8073
+
8074
+ /**
8075
+ * @label List
8076
+ * @tag wc-list
8077
+ * @rawTag list
8078
+ *
8079
+ * @summary A Material 3 list container for one or more list items.
8080
+ *
8081
+ * @example
8082
+ * ```html
8083
+ * <wc-list>
8084
+ * <wc-list-item>
8085
+ * <wc-icon slot="leading" name="inbox"></wc-icon>
8086
+ * Inbox
8087
+ * <span slot="trailing">24</span>
8088
+ * </wc-list-item>
8089
+ * </wc-list>
8090
+ * ```
8091
+ * @tags display
8092
+ */
8093
+ class List extends i$1 {
8094
+ constructor() {
8095
+ super(...arguments);
8096
+ this.variant = 'standard';
8097
+ }
8098
+ connectedCallback() {
8099
+ super.connectedCallback();
8100
+ this.setAttribute('role', 'list');
8101
+ }
8102
+ render() {
8103
+ const cssClasses = {
8104
+ list: true,
8105
+ [`variant-${this.variant}`]: true,
8106
+ };
8107
+ return b `
8108
+ <div class=${e$1(cssClasses)}>
8109
+ <slot></slot>
8110
+ </div>
8111
+ `;
8112
+ }
8113
+ }
8114
+ List.styles = [css_248z$i];
8115
+ List.Item = ListItem;
8116
+ __decorate([
8117
+ n({ type: String, reflect: true })
8118
+ ], List.prototype, "variant", void 0);
8119
+
8120
+ var css_248z$g = i`@charset "UTF-8";
8121
+ :host {
8122
+ display: block;
8123
+ height: 100%;
8124
+ width: 100%;
8125
+ }
8126
+
8127
+ .image-wrapper {
8128
+ display: flex;
8129
+ align-items: center;
8130
+ justify-content: center;
8131
+ height: 100%;
8132
+ width: 100%;
8133
+ }
8134
+
8135
+ img {
8136
+ display: block;
8137
+ max-height: 100%;
8138
+ max-width: 100%;
8139
+ }
8140
+
8141
+ img.clickable {
8142
+ cursor: zoom-in;
8143
+ }
8144
+
8145
+ .placeholder {
8146
+ background: #e0e0e0;
8147
+ min-width: 100px;
8148
+ min-height: 100px;
8149
+ display: block;
8150
+ }
8151
+
8152
+ /* Preview overlay — rendered in light DOM via portal, but we keep
8153
+ a host-level overlay as a fallback when shadow DOM is used. */
8154
+ .preview-overlay {
8155
+ display: none;
8156
+ position: fixed;
7694
8157
  inset: 0;
7695
8158
  z-index: 9999;
7696
8159
  background: rgba(0, 0, 0, 0.85);
@@ -7811,7 +8274,7 @@ class Image extends i$1 {
7811
8274
  `;
7812
8275
  }
7813
8276
  }
7814
- Image.styles = [css_248z$f];
8277
+ Image.styles = [css_248z$g];
7815
8278
  __decorate([
7816
8279
  n({ reflect: true })
7817
8280
  ], Image.prototype, "src", void 0);
@@ -7834,6 +8297,251 @@ __decorate([
7834
8297
  r()
7835
8298
  ], Image.prototype, "_previewOpen", void 0);
7836
8299
 
8300
+ var css_248z$f = i`* {
8301
+ box-sizing: border-box;
8302
+ }
8303
+
8304
+ .screen-reader-only {
8305
+ display: none !important;
8306
+ }
8307
+
8308
+ :host {
8309
+ display: inline-flex;
8310
+ vertical-align: middle;
8311
+ --svg-size: inherit;
8312
+ --svg-color: inherit;
8313
+ }
8314
+
8315
+ .svg-wrapper {
8316
+ height: var(--svg-size, 1rem);
8317
+ width: var(--svg-size, 1rem);
8318
+ display: inline-flex;
8319
+ align-items: center;
8320
+ justify-content: center;
8321
+ }
8322
+
8323
+ .svg-content {
8324
+ height: 100%;
8325
+ width: 100%;
8326
+ display: inline-flex;
8327
+ align-items: center;
8328
+ justify-content: center;
8329
+ }
8330
+ .svg-content svg {
8331
+ fill: var(--svg-color);
8332
+ height: 100%;
8333
+ width: 100%;
8334
+ }
8335
+
8336
+ .svg-content.clickable {
8337
+ cursor: zoom-in;
8338
+ }
8339
+
8340
+ .placeholder {
8341
+ display: block;
8342
+ height: 100%;
8343
+ width: 100%;
8344
+ }
8345
+
8346
+ .preview-overlay {
8347
+ display: none;
8348
+ position: fixed;
8349
+ inset: 0;
8350
+ z-index: 9999;
8351
+ background: rgba(0, 0, 0, 0.85);
8352
+ align-items: center;
8353
+ justify-content: center;
8354
+ cursor: zoom-out;
8355
+ }
8356
+
8357
+ .preview-overlay.open {
8358
+ display: flex;
8359
+ }
8360
+
8361
+ .preview-close {
8362
+ position: absolute;
8363
+ top: 1rem;
8364
+ right: 1rem;
8365
+ background: transparent;
8366
+ border: none;
8367
+ color: #fff;
8368
+ font-size: 1.5rem;
8369
+ cursor: pointer;
8370
+ line-height: 1;
8371
+ padding: 0.25rem 0.5rem;
8372
+ }
8373
+ .preview-close:focus-visible {
8374
+ outline: 2px solid #fff;
8375
+ outline-offset: 2px;
8376
+ }
8377
+
8378
+ .preview-content {
8379
+ max-width: 90vw;
8380
+ max-height: 90vh;
8381
+ display: flex;
8382
+ align-items: center;
8383
+ justify-content: center;
8384
+ cursor: default;
8385
+ }
8386
+ .preview-content svg {
8387
+ max-width: 90vw;
8388
+ max-height: 90vh;
8389
+ box-shadow: 0 8px 40px rgba(0, 0, 0, 0.6);
8390
+ border-radius: 4px;
8391
+ }`;
8392
+
8393
+ /**
8394
+ * @label SVG
8395
+ * @tag wc-svg
8396
+ * @rawTag svg
8397
+ * @summary An SVG component with lazy loading and optional preview support.
8398
+ * @overview Renders an inline SVG fetched from a URL, with lazy loading via IntersectionObserver and an optional click-to-preview lightbox.
8399
+ *
8400
+ * @cssprop --svg-color - Controls the fill color of the SVG.
8401
+ * @cssprop [--svg-size=1rem] - Controls the size of the SVG. Defaults to "1rem"
8402
+ *
8403
+ * @example
8404
+ * ```html
8405
+ * <wc-svg src="/icons/my-icon.svg" image-title="My icon"></wc-svg>
8406
+ * ```
8407
+ */
8408
+ class Svg extends i$1 {
8409
+ constructor() {
8410
+ super(...arguments);
8411
+ /** URL of the SVG asset to fetch and render inline. */
8412
+ this.src = '';
8413
+ /** Accessible title / alt text for the SVG. */
8414
+ this.imageTitle = '';
8415
+ /** Enable click-to-preview lightbox. */
8416
+ this.preview = false;
8417
+ this._loaded = false;
8418
+ this._previewOpen = false;
8419
+ this._svgContent = '';
8420
+ // token to avoid stale fetch results
8421
+ this._fetchId = 0;
8422
+ this._intersectionObserver = null;
8423
+ }
8424
+ disconnectedCallback() {
8425
+ super.disconnectedCallback();
8426
+ this._intersectionObserver?.disconnect();
8427
+ }
8428
+ firstUpdated() {
8429
+ this._setupIntersectionObserver();
8430
+ }
8431
+ updated(changedProperties) {
8432
+ if (changedProperties.has('src')) {
8433
+ // Reset lazy-load state so the new src is fetched when visible
8434
+ this._loaded = false;
8435
+ this._svgContent = '';
8436
+ this._setupIntersectionObserver();
8437
+ }
8438
+ }
8439
+ _setupIntersectionObserver() {
8440
+ this._intersectionObserver?.disconnect();
8441
+ const wrapper = this.shadowRoot?.querySelector('.svg-wrapper');
8442
+ if (!wrapper)
8443
+ return;
8444
+ this._intersectionObserver = new IntersectionObserver((entries) => {
8445
+ if (entries[0].isIntersecting) {
8446
+ this._loaded = true;
8447
+ this._intersectionObserver?.disconnect();
8448
+ this._fetchSvg();
8449
+ }
8450
+ }, { rootMargin: '200px' });
8451
+ this._intersectionObserver.observe(wrapper);
8452
+ }
8453
+ async _fetchSvg() {
8454
+ if (!this.src)
8455
+ return;
8456
+ this._fetchId += 1;
8457
+ const currentId = this._fetchId;
8458
+ try {
8459
+ const raw = await fetchSVG(this.src);
8460
+ if (currentId !== this._fetchId)
8461
+ return;
8462
+ this._svgContent = raw ? sanitizeSvg(raw) : '';
8463
+ }
8464
+ catch {
8465
+ if (currentId === this._fetchId) {
8466
+ this._svgContent = '';
8467
+ }
8468
+ }
8469
+ }
8470
+ _handleClick() {
8471
+ if (this.preview) {
8472
+ this._previewOpen = true;
8473
+ // Move focus into the dialog after render
8474
+ this.updateComplete.then(() => {
8475
+ const closeBtn = this.shadowRoot?.querySelector('.preview-close');
8476
+ closeBtn?.focus();
8477
+ });
8478
+ }
8479
+ }
8480
+ _closePreview(e) {
8481
+ e.stopPropagation();
8482
+ const wasOpen = this._previewOpen;
8483
+ this._previewOpen = false;
8484
+ if (wasOpen) {
8485
+ // Return focus to the trigger
8486
+ const trigger = this.shadowRoot?.querySelector('.svg-content');
8487
+ trigger?.focus();
8488
+ }
8489
+ }
8490
+ render() {
8491
+ return b `
8492
+ <div class="svg-wrapper">
8493
+ ${this._loaded && this._svgContent
8494
+ ? b `<div
8495
+ class="svg-content ${this.preview ? 'clickable' : ''}"
8496
+ role=${this.imageTitle ? 'img' : 'presentation'}
8497
+ aria-label=${this.imageTitle || ''}
8498
+ @click=${this._handleClick}
8499
+ >
8500
+ ${o$3(this._svgContent)}
8501
+ </div>`
8502
+ : b `<span class="placeholder" aria-hidden="true"></span>`}
8503
+ </div>
8504
+
8505
+ <div
8506
+ class="preview-overlay ${this._previewOpen ? 'open' : ''}"
8507
+ role="dialog"
8508
+ aria-modal="true"
8509
+ aria-label=${this.imageTitle ? `Preview: ${this.imageTitle}` : 'SVG preview'}
8510
+ @click=${this._closePreview}
8511
+ @keydown=${(e) => e.key === 'Escape' && this._closePreview(e)}
8512
+ >
8513
+ <button
8514
+ class="preview-close"
8515
+ aria-label="Close preview"
8516
+ @click=${this._closePreview}
8517
+ >&#x2715;</button>
8518
+ <div class="preview-content" @click=${(e) => e.stopPropagation()}>
8519
+ ${o$3(this._svgContent)}
8520
+ </div>
8521
+ </div>
8522
+ `;
8523
+ }
8524
+ }
8525
+ Svg.styles = [css_248z$f];
8526
+ __decorate([
8527
+ n({ type: String, reflect: true })
8528
+ ], Svg.prototype, "src", void 0);
8529
+ __decorate([
8530
+ n({ attribute: 'image-title' })
8531
+ ], Svg.prototype, "imageTitle", void 0);
8532
+ __decorate([
8533
+ n({ type: Boolean, reflect: true })
8534
+ ], Svg.prototype, "preview", void 0);
8535
+ __decorate([
8536
+ r()
8537
+ ], Svg.prototype, "_loaded", void 0);
8538
+ __decorate([
8539
+ r()
8540
+ ], Svg.prototype, "_previewOpen", void 0);
8541
+ __decorate([
8542
+ r()
8543
+ ], Svg.prototype, "_svgContent", void 0);
8544
+
7837
8545
  var css_248z$e = i`* {
7838
8546
  box-sizing: border-box;
7839
8547
  }
@@ -9213,7 +9921,7 @@ class Slider extends i$1 {
9213
9921
  @touchstart=${this.onMouseDown}
9214
9922
  >
9215
9923
  <div class="track">
9216
- <div class="track-active" style=${o$1({ width: `${percentage}%` })}></div>
9924
+ <div class="track-active" style=${o$2({ width: `${percentage}%` })}></div>
9217
9925
  </div>
9218
9926
 
9219
9927
  <div
@@ -9225,7 +9933,7 @@ class Slider extends i$1 {
9225
9933
  aria-valuemax=${this.max}
9226
9934
  aria-valuenow=${this.value}
9227
9935
  aria-disabled=${this.disabled}
9228
- style=${o$1({ left: `calc(${percentage}% - var(--thumb-half))` })}
9936
+ style=${o$2({ left: `calc(${percentage}% - var(--thumb-half))` })}
9229
9937
  @keydown=${this.handleKeyDown}
9230
9938
  >
9231
9939
  ${this.labeled ? b `<div class="value-label">${this.value}</div>` : ''}
@@ -9724,7 +10432,7 @@ class Table extends i$1 {
9724
10432
  <div class="col-content">
9725
10433
  ${column.template
9726
10434
  ? b `<div class="col-template">
9727
- ${o$3(column.template(row, column))}
10435
+ ${o$4(column.template(row, column))}
9728
10436
  </div>`
9729
10437
  : b `<div class="col-text" title=${row?.[column.name] ?? ''}>
9730
10438
  ${row?.[column.name]}
@@ -10569,7 +11277,7 @@ class SidebarSubMenu extends i$1 {
10569
11277
  disabled: this.disabled,
10570
11278
  selected: this.selected,
10571
11279
  });
10572
- const inlineStyles = o$1({
11280
+ const inlineStyles = o$2({
10573
11281
  paddingLeft: `calc(var(--sidebar-menu-item-height, 2.5rem) * ${this.level})`,
10574
11282
  });
10575
11283
  return b `
@@ -12337,13 +13045,25 @@ var css_248z$1 = i`* {
12337
13045
  align-items: center;
12338
13046
  width: 100%;
12339
13047
  flex-shrink: 0;
13048
+ padding-block-end: 2.5rem;
12340
13049
  }
12341
13050
  .rail .header:empty {
12342
13051
  display: none;
12343
13052
  }
13053
+ .rail .footer {
13054
+ display: flex;
13055
+ flex-direction: column;
13056
+ align-items: center;
13057
+ justify-content: flex-end;
13058
+ width: 100%;
13059
+ flex-shrink: 0;
13060
+ margin-top: auto;
13061
+ }
13062
+ .rail .footer:empty {
13063
+ display: none;
13064
+ }
12344
13065
  .rail wc-divider {
12345
13066
  width: calc(100% - 1rem);
12346
- margin-block: 0.5rem;
12347
13067
  flex-shrink: 0;
12348
13068
  }
12349
13069
  .rail .items {
@@ -12352,22 +13072,11 @@ var css_248z$1 = i`* {
12352
13072
  align-items: center;
12353
13073
  width: 100%;
12354
13074
  gap: 0.75rem; /* 12dp between items */
12355
- flex: 1;
13075
+ flex: 1 1 auto;
13076
+ min-height: 0;
12356
13077
  }
12357
13078
  .rail .items ::slotted(wc-navigation-rail-item) {
12358
13079
  width: 100%;
12359
- }
12360
- .rail {
12361
- /* Alignment variants */
12362
- }
12363
- .rail.align-top .items {
12364
- justify-content: flex-start;
12365
- }
12366
- .rail.align-center .items {
12367
- justify-content: center;
12368
- }
12369
- .rail.align-bottom .items {
12370
- justify-content: flex-end;
12371
13080
  }`;
12372
13081
 
12373
13082
  var css_248z = i`* {
@@ -12440,6 +13149,12 @@ var css_248z = i`* {
12440
13149
  flex-shrink: 0;
12441
13150
  transition: background-color var(--duration-short4, 200ms) var(--easing-standard, ease);
12442
13151
  }
13152
+ .item .indicator .ripple {
13153
+ inset: 0;
13154
+ z-index: 0;
13155
+ --ripple-pressed-color: var(--_state-color);
13156
+ border-radius: inherit;
13157
+ }
12443
13158
  .item .indicator .icon-container {
12444
13159
  display: flex;
12445
13160
  align-items: center;
@@ -12454,29 +13169,6 @@ var css_248z = i`* {
12454
13169
  color: var(--_inactive-icon-color);
12455
13170
  display: flex;
12456
13171
  }
12457
- .item {
12458
- /* State layer for hover/press */
12459
- }
12460
- .item .state-layer {
12461
- position: absolute;
12462
- top: 0.25rem;
12463
- left: 50%;
12464
- transform: translateX(-50%);
12465
- width: var(--_indicator-width);
12466
- height: var(--_indicator-height);
12467
- pointer-events: none;
12468
- background-color: var(--_state-color);
12469
- opacity: 0;
12470
- z-index: 0;
12471
- border-radius: var(--_indicator-shape);
12472
- transition: opacity var(--duration-short4, 200ms) var(--easing-standard, ease);
12473
- }
12474
- .item .ripple {
12475
- z-index: 1;
12476
- --ripple-pressed-color: var(--_state-color);
12477
- --ripple-state-opacity: 0;
12478
- border-radius: var(--shape-corner-small, 4px);
12479
- }
12480
13172
  .item {
12481
13173
  /* Label */
12482
13174
  }
@@ -12538,18 +13230,6 @@ var css_248z = i`* {
12538
13230
  .item.active.has-active-icon .icon-slot {
12539
13231
  display: none;
12540
13232
  }
12541
- .item {
12542
- /* Hover state */
12543
- }
12544
- .item:hover:not(.disabled) .state-layer {
12545
- opacity: 0.08;
12546
- }
12547
- .item {
12548
- /* Pressed state */
12549
- }
12550
- .item.pressed:not(.disabled) .state-layer {
12551
- opacity: 0.12;
12552
- }
12553
13233
  .item {
12554
13234
  /* Disabled state */
12555
13235
  }
@@ -12571,7 +13251,6 @@ var css_248z = i`* {
12571
13251
 
12572
13252
  @media (prefers-reduced-motion: reduce) {
12573
13253
  .item .indicator,
12574
- .item .state-layer,
12575
13254
  .item .label {
12576
13255
  transition: none;
12577
13256
  }
@@ -12688,11 +13367,10 @@ class NavigationRailItem extends i$1 {
12688
13367
  __renderItemContent() {
12689
13368
  return b `
12690
13369
  <wc-focus-ring class="focus-ring" for='item'></wc-focus-ring>
12691
- <div class="state-layer"></div>
12692
- <wc-ripple class="ripple"></wc-ripple>
12693
13370
 
12694
13371
  <div class="item-content">
12695
13372
  <div class="indicator">
13373
+ <wc-ripple class="ripple"></wc-ripple>
12696
13374
  <div class="icon-container">
12697
13375
  <slot name="active-icon" class="active-icon-slot"></slot>
12698
13376
  <slot name="icon" class="icon-slot"></slot>
@@ -12799,6 +13477,9 @@ __decorate([
12799
13477
  * <p>Navigation rail provides access to primary destinations in an app using icons—with or without labels—on a vertical rail.</p>
12800
13478
  * <p>Use navigation rail on medium-sized screens (tablets) with 3–7 destinations.</p>
12801
13479
  *
13480
+ * @slot header - Content displayed above the rail items.
13481
+ * @slot footer - Content pinned to the bottom of the rail.
13482
+ *
12802
13483
  * @cssprop --nav-rail-width - Width of the rail container. Defaults to 5rem (80dp).
12803
13484
  * @cssprop --nav-rail-container-color - Background color of the rail. Defaults to surface color.
12804
13485
  * @cssprop --nav-rail-indicator-color - Color of the active indicator. Defaults to secondary-container.
@@ -12832,13 +13513,6 @@ __decorate([
12832
13513
  class NavigationRail extends i$1 {
12833
13514
  constructor() {
12834
13515
  super(...arguments);
12835
- /**
12836
- * Vertical alignment of items within the rail.
12837
- * - `"top"`: Items align to the top.
12838
- * - `"center"`: Items are centered (default).
12839
- * - `"bottom"`: Items align to the bottom.
12840
- */
12841
- this.alignment = 'center';
12842
13516
  /**
12843
13517
  * Display mode of the navigation rail.
12844
13518
  * - `"expanded"`: shows labels.
@@ -12898,7 +13572,6 @@ class NavigationRail extends i$1 {
12898
13572
  render() {
12899
13573
  const cssClasses = {
12900
13574
  rail: true,
12901
- [`align-${this.alignment}`]: true,
12902
13575
  [`mode-${this.mode}`]: true,
12903
13576
  };
12904
13577
  return b `
@@ -12910,15 +13583,15 @@ class NavigationRail extends i$1 {
12910
13583
  <nav class="items" role="presentation">
12911
13584
  <slot @slotchange=${this._syncItemMode}></slot>
12912
13585
  </nav>
13586
+ <div class="footer">
13587
+ <slot name="footer"></slot>
13588
+ </div>
12913
13589
  </div>
12914
13590
  `;
12915
13591
  }
12916
13592
  }
12917
13593
  NavigationRail.styles = [css_248z$1];
12918
13594
  NavigationRail.Item = NavigationRailItem;
12919
- __decorate([
12920
- n({ reflect: true })
12921
- ], NavigationRail.prototype, "alignment", void 0);
12922
13595
  __decorate([
12923
13596
  n({ reflect: true })
12924
13597
  ], NavigationRail.prototype, "mode", void 0);
@@ -12926,5 +13599,5 @@ __decorate([
12926
13599
  n({ type: Boolean, attribute: 'show-divider' })
12927
13600
  ], NavigationRail.prototype, "showDivider", void 0);
12928
13601
 
12929
- export { Accordion as A, Badge as B, Checkbox as C, DatePicker as D, Elevation as E, Field as F, Switch as G, TabGroup as H, Image as I, TabPanel as J, Table as K, LinearProgress as L, Menu as M, NavigationRail as N, Tabs as O, Pagination as P, Tag as Q, Radio as R, SegmentedButton as S, Tab as T, Textarea as U, TimePicker as V, Tooltip as W, UrlField as X, Avatar as a, Breadcrumb as b, BreadcrumbItem as c, Chip as d, CircularProgress as e, Container as f, Divider as g, EmptyState as h, FocusRing as i, Input as j, Link as k, MenuItem as l, NavigationRailItem as m, NumberField as n, Ripple as o, SegmentedButtonGroup as p, Select as q, SelectOptionElement as r, SidebarMenu as s, SidebarMenuItem as t, SidebarSubMenu as u, Skeleton as v, Slider as w, Snackbar as x, Spinner as y, SubMenu as z };
12930
- //# sourceMappingURL=navigation-rail-DyO0oAZU.js.map
13602
+ export { UrlField as $, Accordion as A, Badge as B, Checkbox as C, DatePicker as D, Elevation as E, Field as F, Snackbar as G, Spinner as H, Image as I, SubMenu as J, Svg as K, LinearProgress as L, Menu as M, NavigationRail as N, Switch as O, Pagination as P, TabGroup as Q, Radio as R, SegmentedButton as S, Tab as T, TabPanel as U, Table as V, Tabs as W, Tag as X, Textarea as Y, TimePicker as Z, Tooltip as _, Avatar as a, Breadcrumb as b, BreadcrumbItem as c, Chip as d, ChipSet as e, CircularProgress as f, Container as g, Divider as h, EmptyState as i, FocusRing as j, Input as k, Link as l, List as m, ListItem as n, MenuItem as o, NavigationRailItem as p, NumberField as q, Ripple as r, SegmentedButtonGroup as s, Select as t, SelectOptionElement as u, SidebarMenu as v, SidebarMenuItem as w, SidebarSubMenu as x, Skeleton as y, Slider as z };
13603
+ //# sourceMappingURL=navigation-rail-CD7IrqbN.js.map