@redvars/peacock 3.6.0 → 3.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/dist/code-highlighter.js +1 -1
  2. package/dist/code-highlighter.js.map +1 -1
  3. package/dist/custom-elements-jsdocs.json +928 -96
  4. package/dist/custom-elements.json +1294 -379
  5. package/dist/{flow-designer-dZnLJOQT.js → flow-designer-DvTUrDp5.js} +3 -3
  6. package/dist/{flow-designer-dZnLJOQT.js.map → flow-designer-DvTUrDp5.js.map} +1 -1
  7. package/dist/{flow-designer-node-XMe-jlKg.js → flow-designer-node-BWrPuxAR.js} +2 -2
  8. package/dist/flow-designer-node-BWrPuxAR.js.map +1 -0
  9. package/dist/flow-designer-node.js +1 -1
  10. package/dist/flow-designer.js +2 -2
  11. package/dist/html-editor.js +27245 -87
  12. package/dist/html-editor.js.map +1 -1
  13. package/dist/index.js +3 -3
  14. package/dist/modal.js +1 -7
  15. package/dist/modal.js.map +1 -1
  16. package/dist/{navigation-rail-DyO0oAZU.js → navigation-rail-DTTkqohi.js} +763 -214
  17. package/dist/navigation-rail-DTTkqohi.js.map +1 -0
  18. package/dist/peacock-loader.js +12 -3
  19. package/dist/peacock-loader.js.map +1 -1
  20. package/dist/src/html-editor/html-editor.d.ts +44 -11
  21. package/dist/src/index.d.ts +2 -0
  22. package/dist/src/list/index.d.ts +2 -0
  23. package/dist/src/list/list-item.d.ts +35 -0
  24. package/dist/src/list/list.d.ts +28 -0
  25. package/dist/src/modal/modal.d.ts +1 -7
  26. package/dist/src/navigation-rail/navigation-rail.d.ts +3 -7
  27. package/dist/src/number-field/number-field.d.ts +2 -2
  28. package/dist/src/svg/index.d.ts +1 -0
  29. package/dist/src/svg/svg.d.ts +38 -0
  30. package/dist/src/toolbar/toolbar.d.ts +3 -3
  31. package/dist/toolbar.js +3 -3
  32. package/dist/toolbar.js.map +1 -1
  33. package/dist/tsconfig.tsbuildinfo +1 -1
  34. package/package.json +7 -1
  35. package/readme.md +3 -3
  36. package/src/code-highlighter/code-highlighter.ts +1 -1
  37. package/src/flow-designer/flow-designer-node.ts +1 -1
  38. package/src/html-editor/html-editor.scss +44 -2
  39. package/src/html-editor/html-editor.ts +309 -94
  40. package/src/index.ts +2 -1
  41. package/src/list/index.ts +2 -0
  42. package/src/list/list-item.scss +111 -0
  43. package/src/list/list-item.ts +175 -0
  44. package/src/list/list.scss +24 -0
  45. package/src/list/list.ts +51 -0
  46. package/src/modal/modal.ts +1 -7
  47. package/src/navigation-rail/navigation-rail-item.scss +7 -38
  48. package/src/navigation-rail/navigation-rail-item.ts +1 -2
  49. package/src/navigation-rail/navigation-rail.scss +17 -21
  50. package/src/navigation-rail/navigation-rail.ts +6 -9
  51. package/src/number-field/number-field.ts +2 -2
  52. package/src/peacock-loader.ts +12 -0
  53. package/src/svg/index.ts +1 -0
  54. package/src/svg/svg.scss +91 -0
  55. package/src/svg/svg.ts +160 -0
  56. package/src/toolbar/toolbar.ts +3 -3
  57. package/dist/flow-designer-node-XMe-jlKg.js.map +0 -1
  58. package/dist/navigation-rail-DyO0oAZU.js.map +0 -1
@@ -11,7 +11,8 @@ import { s as spread, o as o$2, a as BaseButtonMixin } from './BaseButton-BNFAYn
11
11
  import { B as BaseInput } from './BaseInput-14YmcfK7.js';
12
12
  import { F as FloatingController } from './popover-NC7b1lTq.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 './flow-designer-DvTUrDp5.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
 
@@ -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
 
@@ -2337,7 +2338,7 @@ var css_248z$E = i`* {
2337
2338
  color: var(--background);
2338
2339
  }`;
2339
2340
 
2340
- var css_248z$D = i`:host([color=red]) {
2341
+ var css_248z$G = i`:host([color=red]) {
2341
2342
  --chip-container-color: var(--color-red-container);
2342
2343
  --chip-outline-color: var(--color-on-red-container);
2343
2344
  }
@@ -2366,7 +2367,7 @@ var css_248z$D = i`:host([color=red]) {
2366
2367
  --chip-outline-color: var(--color-on-purple-container);
2367
2368
  }`;
2368
2369
 
2369
- var css_248z$C = i`.tag {
2370
+ var css_248z$F = i`.tag {
2370
2371
  font-family: var(--font-family-sans) !important;
2371
2372
  }
2372
2373
 
@@ -2504,7 +2505,7 @@ class Chip extends i$1 {
2504
2505
  }
2505
2506
  // Define styles (Lit handles Scoping via Shadow DOM by default)
2506
2507
  // 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];
2508
+ Chip.styles = [css_248z$H, css_248z$G, css_248z$F];
2508
2509
  __decorate([
2509
2510
  n({ type: Boolean })
2510
2511
  ], Chip.prototype, "dismissible", void 0);
@@ -2521,7 +2522,7 @@ __decorate([
2521
2522
  n({ type: String })
2522
2523
  ], Chip.prototype, "imageSrc", void 0);
2523
2524
 
2524
- var css_248z$B = i`:host {
2525
+ var css_248z$E = i`:host {
2525
2526
  display: block;
2526
2527
  --progress-height: 0.25rem;
2527
2528
  --progress-container-color: var(--color-primary);
@@ -2727,9 +2728,9 @@ class LinearProgress extends BaseProgress {
2727
2728
  }
2728
2729
  }
2729
2730
  // Lit components use static styles for better performance
2730
- LinearProgress.styles = [css_248z$B];
2731
+ LinearProgress.styles = [css_248z$E];
2731
2732
 
2732
- var css_248z$A = i`:host {
2733
+ var css_248z$D = i`:host {
2733
2734
  display: inline-block;
2734
2735
  --progress-height: 1.5rem;
2735
2736
  --progress-line-thickness: 4px;
@@ -2892,9 +2893,9 @@ class CircularProgress extends BaseProgress {
2892
2893
  }
2893
2894
  }
2894
2895
  // Lit components use static styles for better performance
2895
- CircularProgress.styles = [css_248z$A];
2896
+ CircularProgress.styles = [css_248z$D];
2896
2897
 
2897
- var css_248z$z = i`* {
2898
+ var css_248z$C = i`* {
2898
2899
  box-sizing: border-box;
2899
2900
  }
2900
2901
 
@@ -2998,12 +2999,12 @@ class Skeleton extends i$1 {
2998
2999
  return b ` <div class="skeleton"></div>`;
2999
3000
  }
3000
3001
  }
3001
- Skeleton.styles = [css_248z$z];
3002
+ Skeleton.styles = [css_248z$C];
3002
3003
  __decorate([
3003
3004
  n({ type: Boolean, reflect: true })
3004
3005
  ], Skeleton.prototype, "visible", void 0);
3005
3006
 
3006
- var css_248z$y = i`* {
3007
+ var css_248z$B = i`* {
3007
3008
  box-sizing: border-box;
3008
3009
  }
3009
3010
 
@@ -3178,7 +3179,7 @@ class Input extends BaseInput {
3178
3179
  `;
3179
3180
  }
3180
3181
  }
3181
- Input.styles = [css_248z$y];
3182
+ Input.styles = [css_248z$B];
3182
3183
  __decorate([
3183
3184
  n({ type: String })
3184
3185
  ], Input.prototype, "value", void 0);
@@ -3237,7 +3238,7 @@ __decorate([
3237
3238
  e$2('.input-element')
3238
3239
  ], Input.prototype, "inputElement", void 0);
3239
3240
 
3240
- var css_248z$x = i`* {
3241
+ var css_248z$A = i`* {
3241
3242
  box-sizing: border-box;
3242
3243
  }
3243
3244
 
@@ -3470,7 +3471,7 @@ class UrlField extends BaseInput {
3470
3471
  `;
3471
3472
  }
3472
3473
  }
3473
- UrlField.styles = [css_248z$x];
3474
+ UrlField.styles = [css_248z$A];
3474
3475
  __decorate([
3475
3476
  n({ type: String })
3476
3477
  ], UrlField.prototype, "value", void 0);
@@ -3520,7 +3521,7 @@ __decorate([
3520
3521
  e$2('.url-input')
3521
3522
  ], UrlField.prototype, "inputElement", void 0);
3522
3523
 
3523
- var css_248z$w = i`* {
3524
+ var css_248z$z = i`* {
3524
3525
  box-sizing: border-box;
3525
3526
  }
3526
3527
 
@@ -3888,7 +3889,7 @@ class Field extends i$1 {
3888
3889
  return b `<div class="text-count">${this.textCount}</div>`;
3889
3890
  }
3890
3891
  }
3891
- Field.styles = [css_248z$w];
3892
+ Field.styles = [css_248z$z];
3892
3893
  __decorate([
3893
3894
  n({ type: String })
3894
3895
  ], Field.prototype, "label", void 0);
@@ -3944,7 +3945,7 @@ __decorate([
3944
3945
  r()
3945
3946
  ], Field.prototype, "slotEndHasContent", void 0);
3946
3947
 
3947
- var css_248z$v = i`* {
3948
+ var css_248z$y = i`* {
3948
3949
  box-sizing: border-box;
3949
3950
  }
3950
3951
 
@@ -3992,8 +3993,8 @@ var css_248z$v = i`* {
3992
3993
  var _NumberField_id;
3993
3994
  /**
3994
3995
  * @label Number Field
3995
- * @tag number-field
3996
- * @rawTag number
3996
+ * @tag wc-number-field
3997
+ * @rawTag number-field
3997
3998
  *
3998
3999
  * @summary The Number Field component is used to capture numeric user input.
3999
4000
  *
@@ -4143,7 +4144,7 @@ class NumberField extends BaseInput {
4143
4144
  }
4144
4145
  }
4145
4146
  _NumberField_id = new WeakMap();
4146
- NumberField.styles = [css_248z$v];
4147
+ NumberField.styles = [css_248z$y];
4147
4148
  __decorate([
4148
4149
  n({ type: Number })
4149
4150
  ], NumberField.prototype, "value", void 0);
@@ -4205,7 +4206,7 @@ __decorate([
4205
4206
  e$2('.input-element')
4206
4207
  ], NumberField.prototype, "inputElement", void 0);
4207
4208
 
4208
- var css_248z$u = i`* {
4209
+ var css_248z$x = i`* {
4209
4210
  box-sizing: border-box;
4210
4211
  }
4211
4212
 
@@ -4372,7 +4373,7 @@ class DatePicker extends BaseInput {
4372
4373
  `;
4373
4374
  }
4374
4375
  }
4375
- DatePicker.styles = [css_248z$u];
4376
+ DatePicker.styles = [css_248z$x];
4376
4377
  __decorate([
4377
4378
  n({ type: String })
4378
4379
  ], DatePicker.prototype, "value", void 0);
@@ -4428,7 +4429,7 @@ __decorate([
4428
4429
  e$2('.input-element')
4429
4430
  ], DatePicker.prototype, "inputElement", void 0);
4430
4431
 
4431
- var css_248z$t = i`* {
4432
+ var css_248z$w = i`* {
4432
4433
  box-sizing: border-box;
4433
4434
  }
4434
4435
 
@@ -4595,7 +4596,7 @@ class TimePicker extends BaseInput {
4595
4596
  `;
4596
4597
  }
4597
4598
  }
4598
- TimePicker.styles = [css_248z$t];
4599
+ TimePicker.styles = [css_248z$w];
4599
4600
  __decorate([
4600
4601
  n({ type: String })
4601
4602
  ], TimePicker.prototype, "value", void 0);
@@ -4651,7 +4652,7 @@ __decorate([
4651
4652
  e$2('.input-element')
4652
4653
  ], TimePicker.prototype, "inputElement", void 0);
4653
4654
 
4654
- var css_248z$s = i`* {
4655
+ var css_248z$v = i`* {
4655
4656
  box-sizing: border-box;
4656
4657
  }
4657
4658
 
@@ -4811,7 +4812,7 @@ class Textarea extends BaseInput {
4811
4812
  `;
4812
4813
  }
4813
4814
  }
4814
- Textarea.styles = [css_248z$s];
4815
+ Textarea.styles = [css_248z$v];
4815
4816
  __decorate([
4816
4817
  n({ type: String })
4817
4818
  ], Textarea.prototype, "value", void 0);
@@ -4870,7 +4871,7 @@ __decorate([
4870
4871
  e$2('.input-element')
4871
4872
  ], Textarea.prototype, "inputElement", void 0);
4872
4873
 
4873
- var css_248z$r = i`* {
4874
+ var css_248z$u = i`* {
4874
4875
  box-sizing: border-box;
4875
4876
  }
4876
4877
 
@@ -5211,7 +5212,7 @@ class Switch extends BaseInput {
5211
5212
  `;
5212
5213
  }
5213
5214
  }
5214
- Switch.styles = [css_248z$r];
5215
+ Switch.styles = [css_248z$u];
5215
5216
  __decorate([
5216
5217
  n({ type: Boolean })
5217
5218
  ], Switch.prototype, "value", void 0);
@@ -5255,7 +5256,7 @@ __decorate([
5255
5256
  e$2('.input-native')
5256
5257
  ], Switch.prototype, "nativeElement", void 0);
5257
5258
 
5258
- var css_248z$q = i`* {
5259
+ var css_248z$t = i`* {
5259
5260
  box-sizing: border-box;
5260
5261
  }
5261
5262
 
@@ -5713,7 +5714,7 @@ class Checkbox extends i$1 {
5713
5714
  `;
5714
5715
  }
5715
5716
  }
5716
- Checkbox.styles = [css_248z$q];
5717
+ Checkbox.styles = [css_248z$t];
5717
5718
  __decorate([
5718
5719
  n({ type: String })
5719
5720
  ], Checkbox.prototype, "name", void 0);
@@ -5760,7 +5761,7 @@ __decorate([
5760
5761
  e$2('.input-native')
5761
5762
  ], Checkbox.prototype, "nativeElement", void 0);
5762
5763
 
5763
- var css_248z$p = i`* {
5764
+ var css_248z$s = i`* {
5764
5765
  box-sizing: border-box;
5765
5766
  }
5766
5767
 
@@ -5847,9 +5848,9 @@ class Spinner extends i$1 {
5847
5848
  `;
5848
5849
  }
5849
5850
  }
5850
- Spinner.styles = [css_248z$p];
5851
+ Spinner.styles = [css_248z$s];
5851
5852
 
5852
- var css_248z$o = i`* {
5853
+ var css_248z$r = i`* {
5853
5854
  box-sizing: border-box;
5854
5855
  }
5855
5856
 
@@ -5967,12 +5968,12 @@ class Container extends i$1 {
5967
5968
  `;
5968
5969
  }
5969
5970
  }
5970
- Container.styles = [css_248z$o];
5971
+ Container.styles = [css_248z$r];
5971
5972
  __decorate([
5972
5973
  n({ type: String, reflect: true })
5973
5974
  ], Container.prototype, "size", void 0);
5974
5975
 
5975
- var css_248z$n = i`* {
5976
+ var css_248z$q = i`* {
5976
5977
  box-sizing: border-box;
5977
5978
  }
5978
5979
 
@@ -6135,7 +6136,7 @@ class EmptyState extends i$1 {
6135
6136
  }
6136
6137
  }
6137
6138
  // Lit handles styles in a static property for better performance
6138
- EmptyState.styles = [css_248z$n];
6139
+ EmptyState.styles = [css_248z$q];
6139
6140
  __decorate([
6140
6141
  n({ type: String, reflect: true })
6141
6142
  ], EmptyState.prototype, "illustration", void 0);
@@ -6149,7 +6150,7 @@ __decorate([
6149
6150
  r()
6150
6151
  ], EmptyState.prototype, "vertical", void 0);
6151
6152
 
6152
- var css_248z$m = i`* {
6153
+ var css_248z$p = i`* {
6153
6154
  box-sizing: border-box;
6154
6155
  }
6155
6156
 
@@ -6387,7 +6388,7 @@ class Tooltip extends i$1 {
6387
6388
  `;
6388
6389
  }
6389
6390
  }
6390
- Tooltip.styles = [css_248z$m];
6391
+ Tooltip.styles = [css_248z$p];
6391
6392
  __decorate([
6392
6393
  n()
6393
6394
  ], Tooltip.prototype, "content", void 0);
@@ -6407,7 +6408,7 @@ __decorate([
6407
6408
  n({ type: Boolean, reflect: true })
6408
6409
  ], Tooltip.prototype, "preview", void 0);
6409
6410
 
6410
- var css_248z$l = i`* {
6411
+ var css_248z$o = i`* {
6411
6412
  box-sizing: border-box;
6412
6413
  }
6413
6414
 
@@ -6443,7 +6444,7 @@ ol {
6443
6444
  pointer-events: none;
6444
6445
  }`;
6445
6446
 
6446
- var css_248z$k = i`* {
6447
+ var css_248z$n = i`* {
6447
6448
  box-sizing: border-box;
6448
6449
  }
6449
6450
 
@@ -6573,7 +6574,7 @@ class BreadcrumbItem extends i$1 {
6573
6574
  `;
6574
6575
  }
6575
6576
  }
6576
- BreadcrumbItem.styles = [css_248z$k];
6577
+ BreadcrumbItem.styles = [css_248z$n];
6577
6578
  __decorate([
6578
6579
  n({ reflect: true })
6579
6580
  ], BreadcrumbItem.prototype, "href", void 0);
@@ -6627,13 +6628,13 @@ class Breadcrumb extends i$1 {
6627
6628
  </nav>`;
6628
6629
  }
6629
6630
  }
6630
- Breadcrumb.styles = [css_248z$l];
6631
+ Breadcrumb.styles = [css_248z$o];
6631
6632
  Breadcrumb.Item = BreadcrumbItem;
6632
6633
  __decorate([
6633
6634
  n({ type: String })
6634
6635
  ], Breadcrumb.prototype, "label", void 0);
6635
6636
 
6636
- var css_248z$j = i`* {
6637
+ var css_248z$m = i`* {
6637
6638
  box-sizing: border-box;
6638
6639
  }
6639
6640
 
@@ -6741,7 +6742,7 @@ var css_248z$j = i`* {
6741
6742
  --_container-color: var(--color-tertiary-container);
6742
6743
  }`;
6743
6744
 
6744
- var css_248z$i = i`* {
6745
+ var css_248z$l = i`* {
6745
6746
  box-sizing: border-box;
6746
6747
  }
6747
6748
 
@@ -6856,7 +6857,7 @@ var css_248z$i = i`* {
6856
6857
  display: none;
6857
6858
  }`;
6858
6859
 
6859
- var css_248z$h = i`:host-context([variant=standard]) {
6860
+ var css_248z$k = i`:host-context([variant=standard]) {
6860
6861
  --menu-item-label-color: var(--color-on-surface-variant);
6861
6862
  --menu-item-label-selected-color: var(--color-on-tertiary-container);
6862
6863
  --menu-item-container-selected-color: var(--color-tertiary-container);
@@ -7027,7 +7028,7 @@ class MenuItem extends BaseButtonMixin(BaseHyperlinkMixin(i$1)) {
7027
7028
  `;
7028
7029
  }
7029
7030
  }
7030
- MenuItem.styles = [css_248z$i, css_248z$h];
7031
+ MenuItem.styles = [css_248z$l, css_248z$k];
7031
7032
  __decorate([
7032
7033
  n({ type: String })
7033
7034
  ], MenuItem.prototype, "value", void 0);
@@ -7403,7 +7404,7 @@ class Menu extends i$1 {
7403
7404
  </div>`;
7404
7405
  }
7405
7406
  }
7406
- Menu.styles = [css_248z$j];
7407
+ Menu.styles = [css_248z$m];
7407
7408
  Menu.Item = MenuItem;
7408
7409
  __decorate([
7409
7410
  n({ type: Boolean, reflect: true })
@@ -7439,7 +7440,7 @@ __decorate([
7439
7440
  e$2('.menu')
7440
7441
  ], Menu.prototype, "menuListElement", void 0);
7441
7442
 
7442
- var css_248z$g = i`* {
7443
+ var css_248z$j = i`* {
7443
7444
  box-sizing: border-box;
7444
7445
  }
7445
7446
 
@@ -7634,7 +7635,7 @@ class SubMenu extends i$1 {
7634
7635
  `;
7635
7636
  }
7636
7637
  }
7637
- SubMenu.styles = [css_248z$g];
7638
+ SubMenu.styles = [css_248z$j];
7638
7639
  __decorate([
7639
7640
  n({ type: Number, attribute: 'hover-open-delay' })
7640
7641
  ], SubMenu.prototype, "hoverOpenDelay", void 0);
@@ -7654,114 +7655,452 @@ __decorate([
7654
7655
  o({ slot: 'menu' })
7655
7656
  ], SubMenu.prototype, "_menus", void 0);
7656
7657
 
7657
- var css_248z$f = i`@charset "UTF-8";
7658
+ var css_248z$i = i`* {
7659
+ box-sizing: border-box;
7660
+ }
7661
+
7662
+ .screen-reader-only {
7663
+ display: none !important;
7664
+ }
7665
+
7658
7666
  :host {
7659
7667
  display: block;
7660
- height: 100%;
7661
- width: 100%;
7662
7668
  }
7663
7669
 
7664
- .image-wrapper {
7670
+ .list {
7665
7671
  display: flex;
7666
- align-items: center;
7667
- justify-content: center;
7668
- height: 100%;
7669
- width: 100%;
7672
+ flex-direction: column;
7673
+ gap: var(--spacing-050);
7674
+ padding-block: var(--spacing-050);
7675
+ border-radius: var(--shape-corner-large);
7676
+ background-color: var(--_container-color);
7670
7677
  }
7671
7678
 
7672
- img {
7673
- display: block;
7674
- max-height: 100%;
7675
- max-width: 100%;
7679
+ .list.variant-standard {
7680
+ --_container-color: var(--color-surface-container);
7676
7681
  }
7677
7682
 
7678
- img.clickable {
7679
- cursor: zoom-in;
7683
+ .list.variant-vibrant {
7684
+ --_container-color: var(--color-tertiary-container);
7685
+ }`;
7686
+
7687
+ var css_248z$h = i`* {
7688
+ box-sizing: border-box;
7680
7689
  }
7681
7690
 
7682
- .placeholder {
7683
- background: #e0e0e0;
7684
- min-width: 100px;
7685
- min-height: 100px;
7691
+ .screen-reader-only {
7692
+ display: none !important;
7693
+ }
7694
+
7695
+ :host {
7686
7696
  display: block;
7697
+ padding-inline: var(--spacing-050);
7687
7698
  }
7688
7699
 
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;
7694
- inset: 0;
7695
- z-index: 9999;
7696
- background: rgba(0, 0, 0, 0.85);
7700
+ .item-element {
7701
+ position: relative;
7702
+ min-height: 3.5rem;
7703
+ width: 100%;
7704
+ border: 0;
7705
+ margin: 0;
7706
+ padding: 0;
7707
+ outline: 0;
7708
+ background: transparent;
7709
+ text-align: initial;
7710
+ text-decoration: none;
7711
+ cursor: pointer;
7712
+ font-family: var(--typography-body-large-font-family) !important;
7713
+ font-size: var(--typography-body-large-font-size) !important;
7714
+ font-weight: var(--typography-body-large-font-weight) !important;
7715
+ line-height: var(--typography-body-large-line-height) !important;
7716
+ letter-spacing: var(--typography-body-large-letter-spacing) !important;
7717
+ }
7718
+ .item-element .list-item-content {
7719
+ position: relative;
7720
+ z-index: 1;
7721
+ display: flex;
7722
+ align-items: center;
7723
+ gap: var(--spacing-200);
7724
+ min-height: 3.5rem;
7725
+ padding-inline: var(--spacing-200);
7726
+ color: var(--_label-text-color);
7727
+ opacity: var(--_label-text-opacity, 1);
7728
+ }
7729
+ .item-element .leading,
7730
+ .item-element .trailing {
7731
+ display: inline-flex;
7697
7732
  align-items: center;
7698
7733
  justify-content: center;
7699
- cursor: zoom-out;
7734
+ min-width: 1.5rem;
7735
+ color: var(--_leading-trailing-color);
7700
7736
  }
7701
-
7702
- .preview-overlay.open {
7703
- display: flex;
7737
+ .item-element .trailing {
7738
+ margin-inline-start: auto;
7739
+ }
7740
+ .item-element .content {
7741
+ display: block;
7742
+ flex: 1;
7743
+ min-inline-size: 0;
7744
+ }
7745
+ .item-element .background {
7746
+ position: absolute;
7747
+ inset: 0;
7748
+ background-color: var(--_container-color);
7749
+ opacity: var(--_container-opacity, 1);
7750
+ border-radius: var(--shape-corner-medium);
7751
+ pointer-events: none;
7752
+ }
7753
+ .item-element .focus-ring {
7754
+ --focus-ring-container-shape-start-start: var(--shape-corner-medium);
7755
+ --focus-ring-container-shape-start-end: var(--shape-corner-medium);
7756
+ --focus-ring-container-shape-end-start: var(--shape-corner-medium);
7757
+ --focus-ring-container-shape-end-end: var(--shape-corner-medium);
7758
+ z-index: 2;
7759
+ }
7760
+ .item-element .ripple {
7761
+ --ripple-state-opacity: var(--_container-state-opacity, 0);
7762
+ --ripple-pressed-color: var(--_container-state-color);
7763
+ border-radius: var(--shape-corner-medium);
7704
7764
  }
7705
7765
 
7706
- .preview-overlay img {
7707
- max-width: 90vw;
7708
- max-height: 90vh;
7709
- object-fit: contain;
7710
- box-shadow: 0 8px 40px rgba(0, 0, 0, 0.6);
7711
- border-radius: 4px;
7766
+ .item-element {
7767
+ --_container-color: transparent;
7768
+ --_label-text-color: var(--color-on-surface);
7769
+ --_leading-trailing-color: var(--color-on-surface-variant);
7770
+ --_container-state-color: var(--color-on-surface);
7771
+ }
7772
+ .item-element:hover:not(:where(.disabled, .selected)) {
7773
+ --_container-state-opacity: 0.08;
7774
+ }
7775
+ .item-element.pressed:not(:where(.disabled)) {
7776
+ --_container-state-opacity: 0.12;
7777
+ }
7778
+ .item-element.selected {
7779
+ --_container-color: var(--color-secondary-container);
7780
+ --_label-text-color: var(--color-on-secondary-container);
7781
+ --_leading-trailing-color: var(--color-on-secondary-container);
7782
+ --_container-state-color: var(--color-on-secondary-container);
7783
+ }
7784
+ .item-element.disabled {
7785
+ cursor: not-allowed;
7786
+ --_label-text-color: var(--color-on-surface);
7787
+ --_label-text-opacity: 0.38;
7788
+ --_leading-trailing-color: var(--color-on-surface);
7789
+ --_container-opacity: 0.12;
7790
+ }
7791
+ .item-element.disabled .ripple {
7792
+ display: none;
7712
7793
  }`;
7713
7794
 
7714
7795
  /**
7715
- * @label Image
7716
- * @tag wc-image
7717
- * @rawTag image
7718
- * @summary An image component with lazy loading and theme support.
7719
- * @tags media
7796
+ * @label List Item
7797
+ * @tag wc-list-item
7798
+ * @rawTag list-item
7799
+ * @parentRawTag list
7800
+ *
7801
+ * @summary A Material 3 list item with leading, trailing and content slots.
7720
7802
  *
7721
7803
  * @example
7722
7804
  * ```html
7723
- * <wc-image src="image.jpg" alt="Description"></wc-image>
7805
+ * <wc-list-item selected>
7806
+ * <wc-icon slot="leading" name="person"></wc-icon>
7807
+ * Profile
7808
+ * <wc-icon slot="trailing" name="chevron_right"></wc-icon>
7809
+ * </wc-list-item>
7724
7810
  * ```
7811
+ * @tags display
7725
7812
  */
7726
- class Image extends i$1 {
7813
+ class ListItem extends BaseButtonMixin(BaseHyperlinkMixin(i$1)) {
7727
7814
  constructor() {
7728
7815
  super(...arguments);
7729
- /** Primary image source */
7730
- this.src = '';
7731
- /** Optional dark-mode image source */
7732
- this.darkSrc = '';
7733
- /** Alt text / title for the image */
7734
- this.imageTitle = '';
7735
- /** Enable click-to-preview lightbox */
7736
- this.preview = false;
7737
- this._isDarkMode = isDarkMode();
7738
- this._loaded = false;
7739
- this._previewOpen = false;
7740
- this._intersectionObserver = null;
7741
- this._themeCleanup = null;
7816
+ this.selected = false;
7817
+ this.isPressed = false;
7818
+ this.__dispatchClick = (event) => {
7819
+ if (this.softDisabled || (this.disabled && this.href)) {
7820
+ event.stopImmediatePropagation();
7821
+ event.preventDefault();
7822
+ return;
7823
+ }
7824
+ if (!isActivationClick(event) || !this.itemElement) {
7825
+ return;
7826
+ }
7827
+ this.focus();
7828
+ dispatchActivationClick(this.itemElement);
7829
+ };
7830
+ this.__handleKeyDown = (event) => {
7831
+ this.__handlePress(event);
7832
+ if (this.disabled || this.softDisabled || !this.itemElement) {
7833
+ return;
7834
+ }
7835
+ if (event.key === ' ') {
7836
+ event.preventDefault();
7837
+ this.itemElement.click();
7838
+ return;
7839
+ }
7840
+ if (event.key === 'Enter' && !this.__isLink()) {
7841
+ event.preventDefault();
7842
+ this.itemElement.click();
7843
+ }
7844
+ };
7845
+ this.__handlePress = (event) => {
7846
+ if (this.disabled || this.softDisabled)
7847
+ return;
7848
+ if (event instanceof KeyboardEvent &&
7849
+ event.type === 'keydown' &&
7850
+ (event.key === 'Enter' || event.key === ' ')) {
7851
+ this.isPressed = true;
7852
+ }
7853
+ else if (event.type === 'mousedown') {
7854
+ this.isPressed = true;
7855
+ }
7856
+ else {
7857
+ this.isPressed = false;
7858
+ }
7859
+ };
7742
7860
  }
7743
7861
  connectedCallback() {
7862
+ // eslint-disable-next-line wc/guard-super-call
7744
7863
  super.connectedCallback();
7745
- // Theme observation
7746
- this._themeCleanup = observeThemeChange(() => {
7747
- this._isDarkMode = isDarkMode();
7748
- // Reset lazy-load state so new src is loaded when visible
7749
- this._loaded = false;
7750
- this._setupIntersectionObserver();
7751
- });
7864
+ if (!this.hasAttribute('role')) {
7865
+ this.setAttribute('role', 'listitem');
7866
+ }
7752
7867
  }
7753
- disconnectedCallback() {
7754
- super.disconnectedCallback();
7755
- this._intersectionObserver?.disconnect();
7756
- this._themeCleanup?.();
7868
+ focus() {
7869
+ this.itemElement?.focus();
7757
7870
  }
7758
- firstUpdated() {
7759
- this._setupIntersectionObserver();
7871
+ blur() {
7872
+ this.itemElement?.blur();
7760
7873
  }
7761
- _setupIntersectionObserver() {
7762
- this._intersectionObserver?.disconnect();
7763
- const wrapper = this.shadowRoot?.querySelector('.image-wrapper');
7764
- if (!wrapper)
7874
+ render() {
7875
+ const isLink = this.__isLink();
7876
+ const cssClasses = {
7877
+ 'list-item': true,
7878
+ 'item-element': true,
7879
+ selected: this.selected,
7880
+ disabled: this.disabled || this.softDisabled,
7881
+ pressed: this.isPressed,
7882
+ };
7883
+ if (!isLink) {
7884
+ return b `
7885
+ <button
7886
+ id="item"
7887
+ class=${e$1(cssClasses)}
7888
+ type=${this.htmlType}
7889
+ ?disabled=${this.disabled}
7890
+ ?aria-disabled=${this.softDisabled}
7891
+ @click=${this.__dispatchClick}
7892
+ @mousedown=${this.__handlePress}
7893
+ @keydown=${this.__handleKeyDown}
7894
+ @keyup=${this.__handlePress}
7895
+ >
7896
+ ${this.renderContent()}
7897
+ </button>
7898
+ `;
7899
+ }
7900
+ return b `
7901
+ <a
7902
+ id="item"
7903
+ class=${e$1(cssClasses)}
7904
+ href=${this.href}
7905
+ target=${this.target}
7906
+ rel=${o$2(this.rel)}
7907
+ download=${o$2(this.download)}
7908
+ tabindex=${this.disabled ? '-1' : '0'}
7909
+ aria-disabled=${String(this.disabled || this.softDisabled)}
7910
+ @click=${this.__dispatchClick}
7911
+ @mousedown=${this.__handlePress}
7912
+ @keydown=${this.__handleKeyDown}
7913
+ @keyup=${this.__handlePress}
7914
+ >
7915
+ ${this.renderContent()}
7916
+ </a>
7917
+ `;
7918
+ }
7919
+ renderContent() {
7920
+ return b `
7921
+ <wc-focus-ring class="focus-ring" for="item"></wc-focus-ring>
7922
+ <div class="background"></div>
7923
+ <wc-ripple class="ripple"></wc-ripple>
7924
+
7925
+ <div class="list-item-content">
7926
+ <div class="leading">
7927
+ <slot name="leading"></slot>
7928
+ </div>
7929
+ <div class="content">
7930
+ <slot></slot>
7931
+ </div>
7932
+ <div class="trailing">
7933
+ <slot name="trailing"></slot>
7934
+ </div>
7935
+ </div>
7936
+ `;
7937
+ }
7938
+ }
7939
+ ListItem.styles = [css_248z$h];
7940
+ __decorate([
7941
+ n({ type: Boolean, reflect: true })
7942
+ ], ListItem.prototype, "selected", void 0);
7943
+ __decorate([
7944
+ e$2('#item')
7945
+ ], ListItem.prototype, "itemElement", void 0);
7946
+ __decorate([
7947
+ r()
7948
+ ], ListItem.prototype, "isPressed", void 0);
7949
+
7950
+ /**
7951
+ * @label List
7952
+ * @tag wc-list
7953
+ * @rawTag list
7954
+ *
7955
+ * @summary A Material 3 list container for one or more list items.
7956
+ *
7957
+ * @example
7958
+ * ```html
7959
+ * <wc-list>
7960
+ * <wc-list-item>
7961
+ * <wc-icon slot="leading" name="inbox"></wc-icon>
7962
+ * Inbox
7963
+ * <span slot="trailing">24</span>
7964
+ * </wc-list-item>
7965
+ * </wc-list>
7966
+ * ```
7967
+ * @tags display
7968
+ */
7969
+ class List extends i$1 {
7970
+ constructor() {
7971
+ super(...arguments);
7972
+ this.variant = 'standard';
7973
+ }
7974
+ connectedCallback() {
7975
+ super.connectedCallback();
7976
+ this.setAttribute('role', 'list');
7977
+ }
7978
+ render() {
7979
+ const cssClasses = {
7980
+ list: true,
7981
+ [`variant-${this.variant}`]: true,
7982
+ };
7983
+ return b `
7984
+ <div class=${e$1(cssClasses)}>
7985
+ <slot></slot>
7986
+ </div>
7987
+ `;
7988
+ }
7989
+ }
7990
+ List.styles = [css_248z$i];
7991
+ List.Item = ListItem;
7992
+ __decorate([
7993
+ n({ type: String, reflect: true })
7994
+ ], List.prototype, "variant", void 0);
7995
+
7996
+ var css_248z$g = i`@charset "UTF-8";
7997
+ :host {
7998
+ display: block;
7999
+ height: 100%;
8000
+ width: 100%;
8001
+ }
8002
+
8003
+ .image-wrapper {
8004
+ display: flex;
8005
+ align-items: center;
8006
+ justify-content: center;
8007
+ height: 100%;
8008
+ width: 100%;
8009
+ }
8010
+
8011
+ img {
8012
+ display: block;
8013
+ max-height: 100%;
8014
+ max-width: 100%;
8015
+ }
8016
+
8017
+ img.clickable {
8018
+ cursor: zoom-in;
8019
+ }
8020
+
8021
+ .placeholder {
8022
+ background: #e0e0e0;
8023
+ min-width: 100px;
8024
+ min-height: 100px;
8025
+ display: block;
8026
+ }
8027
+
8028
+ /* Preview overlay — rendered in light DOM via portal, but we keep
8029
+ a host-level overlay as a fallback when shadow DOM is used. */
8030
+ .preview-overlay {
8031
+ display: none;
8032
+ position: fixed;
8033
+ inset: 0;
8034
+ z-index: 9999;
8035
+ background: rgba(0, 0, 0, 0.85);
8036
+ align-items: center;
8037
+ justify-content: center;
8038
+ cursor: zoom-out;
8039
+ }
8040
+
8041
+ .preview-overlay.open {
8042
+ display: flex;
8043
+ }
8044
+
8045
+ .preview-overlay img {
8046
+ max-width: 90vw;
8047
+ max-height: 90vh;
8048
+ object-fit: contain;
8049
+ box-shadow: 0 8px 40px rgba(0, 0, 0, 0.6);
8050
+ border-radius: 4px;
8051
+ }`;
8052
+
8053
+ /**
8054
+ * @label Image
8055
+ * @tag wc-image
8056
+ * @rawTag image
8057
+ * @summary An image component with lazy loading and theme support.
8058
+ * @tags media
8059
+ *
8060
+ * @example
8061
+ * ```html
8062
+ * <wc-image src="image.jpg" alt="Description"></wc-image>
8063
+ * ```
8064
+ */
8065
+ class Image extends i$1 {
8066
+ constructor() {
8067
+ super(...arguments);
8068
+ /** Primary image source */
8069
+ this.src = '';
8070
+ /** Optional dark-mode image source */
8071
+ this.darkSrc = '';
8072
+ /** Alt text / title for the image */
8073
+ this.imageTitle = '';
8074
+ /** Enable click-to-preview lightbox */
8075
+ this.preview = false;
8076
+ this._isDarkMode = isDarkMode();
8077
+ this._loaded = false;
8078
+ this._previewOpen = false;
8079
+ this._intersectionObserver = null;
8080
+ this._themeCleanup = null;
8081
+ }
8082
+ connectedCallback() {
8083
+ super.connectedCallback();
8084
+ // Theme observation
8085
+ this._themeCleanup = observeThemeChange(() => {
8086
+ this._isDarkMode = isDarkMode();
8087
+ // Reset lazy-load state so new src is loaded when visible
8088
+ this._loaded = false;
8089
+ this._setupIntersectionObserver();
8090
+ });
8091
+ }
8092
+ disconnectedCallback() {
8093
+ super.disconnectedCallback();
8094
+ this._intersectionObserver?.disconnect();
8095
+ this._themeCleanup?.();
8096
+ }
8097
+ firstUpdated() {
8098
+ this._setupIntersectionObserver();
8099
+ }
8100
+ _setupIntersectionObserver() {
8101
+ this._intersectionObserver?.disconnect();
8102
+ const wrapper = this.shadowRoot?.querySelector('.image-wrapper');
8103
+ if (!wrapper)
7765
8104
  return;
7766
8105
  this._intersectionObserver = new IntersectionObserver((entries) => {
7767
8106
  if (entries[0].isIntersecting) {
@@ -7811,7 +8150,7 @@ class Image extends i$1 {
7811
8150
  `;
7812
8151
  }
7813
8152
  }
7814
- Image.styles = [css_248z$f];
8153
+ Image.styles = [css_248z$g];
7815
8154
  __decorate([
7816
8155
  n({ reflect: true })
7817
8156
  ], Image.prototype, "src", void 0);
@@ -7834,6 +8173,251 @@ __decorate([
7834
8173
  r()
7835
8174
  ], Image.prototype, "_previewOpen", void 0);
7836
8175
 
8176
+ var css_248z$f = i`* {
8177
+ box-sizing: border-box;
8178
+ }
8179
+
8180
+ .screen-reader-only {
8181
+ display: none !important;
8182
+ }
8183
+
8184
+ :host {
8185
+ display: inline-flex;
8186
+ vertical-align: middle;
8187
+ --svg-size: inherit;
8188
+ --svg-color: inherit;
8189
+ }
8190
+
8191
+ .svg-wrapper {
8192
+ height: var(--svg-size, 1rem);
8193
+ width: var(--svg-size, 1rem);
8194
+ display: inline-flex;
8195
+ align-items: center;
8196
+ justify-content: center;
8197
+ }
8198
+
8199
+ .svg-content {
8200
+ height: 100%;
8201
+ width: 100%;
8202
+ display: inline-flex;
8203
+ align-items: center;
8204
+ justify-content: center;
8205
+ }
8206
+ .svg-content svg {
8207
+ fill: var(--svg-color);
8208
+ height: 100%;
8209
+ width: 100%;
8210
+ }
8211
+
8212
+ .svg-content.clickable {
8213
+ cursor: zoom-in;
8214
+ }
8215
+
8216
+ .placeholder {
8217
+ display: block;
8218
+ height: 100%;
8219
+ width: 100%;
8220
+ }
8221
+
8222
+ .preview-overlay {
8223
+ display: none;
8224
+ position: fixed;
8225
+ inset: 0;
8226
+ z-index: 9999;
8227
+ background: rgba(0, 0, 0, 0.85);
8228
+ align-items: center;
8229
+ justify-content: center;
8230
+ cursor: zoom-out;
8231
+ }
8232
+
8233
+ .preview-overlay.open {
8234
+ display: flex;
8235
+ }
8236
+
8237
+ .preview-close {
8238
+ position: absolute;
8239
+ top: 1rem;
8240
+ right: 1rem;
8241
+ background: transparent;
8242
+ border: none;
8243
+ color: #fff;
8244
+ font-size: 1.5rem;
8245
+ cursor: pointer;
8246
+ line-height: 1;
8247
+ padding: 0.25rem 0.5rem;
8248
+ }
8249
+ .preview-close:focus-visible {
8250
+ outline: 2px solid #fff;
8251
+ outline-offset: 2px;
8252
+ }
8253
+
8254
+ .preview-content {
8255
+ max-width: 90vw;
8256
+ max-height: 90vh;
8257
+ display: flex;
8258
+ align-items: center;
8259
+ justify-content: center;
8260
+ cursor: default;
8261
+ }
8262
+ .preview-content svg {
8263
+ max-width: 90vw;
8264
+ max-height: 90vh;
8265
+ box-shadow: 0 8px 40px rgba(0, 0, 0, 0.6);
8266
+ border-radius: 4px;
8267
+ }`;
8268
+
8269
+ /**
8270
+ * @label SVG
8271
+ * @tag wc-svg
8272
+ * @rawTag svg
8273
+ * @summary An SVG component with lazy loading and optional preview support.
8274
+ * @overview Renders an inline SVG fetched from a URL, with lazy loading via IntersectionObserver and an optional click-to-preview lightbox.
8275
+ *
8276
+ * @cssprop --svg-color - Controls the fill color of the SVG.
8277
+ * @cssprop [--svg-size=1rem] - Controls the size of the SVG. Defaults to "1rem"
8278
+ *
8279
+ * @example
8280
+ * ```html
8281
+ * <wc-svg src="/icons/my-icon.svg" image-title="My icon"></wc-svg>
8282
+ * ```
8283
+ */
8284
+ class Svg extends i$1 {
8285
+ constructor() {
8286
+ super(...arguments);
8287
+ /** URL of the SVG asset to fetch and render inline. */
8288
+ this.src = '';
8289
+ /** Accessible title / alt text for the SVG. */
8290
+ this.imageTitle = '';
8291
+ /** Enable click-to-preview lightbox. */
8292
+ this.preview = false;
8293
+ this._loaded = false;
8294
+ this._previewOpen = false;
8295
+ this._svgContent = '';
8296
+ // token to avoid stale fetch results
8297
+ this._fetchId = 0;
8298
+ this._intersectionObserver = null;
8299
+ }
8300
+ disconnectedCallback() {
8301
+ super.disconnectedCallback();
8302
+ this._intersectionObserver?.disconnect();
8303
+ }
8304
+ firstUpdated() {
8305
+ this._setupIntersectionObserver();
8306
+ }
8307
+ updated(changedProperties) {
8308
+ if (changedProperties.has('src')) {
8309
+ // Reset lazy-load state so the new src is fetched when visible
8310
+ this._loaded = false;
8311
+ this._svgContent = '';
8312
+ this._setupIntersectionObserver();
8313
+ }
8314
+ }
8315
+ _setupIntersectionObserver() {
8316
+ this._intersectionObserver?.disconnect();
8317
+ const wrapper = this.shadowRoot?.querySelector('.svg-wrapper');
8318
+ if (!wrapper)
8319
+ return;
8320
+ this._intersectionObserver = new IntersectionObserver((entries) => {
8321
+ if (entries[0].isIntersecting) {
8322
+ this._loaded = true;
8323
+ this._intersectionObserver?.disconnect();
8324
+ this._fetchSvg();
8325
+ }
8326
+ }, { rootMargin: '200px' });
8327
+ this._intersectionObserver.observe(wrapper);
8328
+ }
8329
+ async _fetchSvg() {
8330
+ if (!this.src)
8331
+ return;
8332
+ this._fetchId += 1;
8333
+ const currentId = this._fetchId;
8334
+ try {
8335
+ const raw = await fetchSVG(this.src);
8336
+ if (currentId !== this._fetchId)
8337
+ return;
8338
+ this._svgContent = raw ? sanitizeSvg(raw) : '';
8339
+ }
8340
+ catch {
8341
+ if (currentId === this._fetchId) {
8342
+ this._svgContent = '';
8343
+ }
8344
+ }
8345
+ }
8346
+ _handleClick() {
8347
+ if (this.preview) {
8348
+ this._previewOpen = true;
8349
+ // Move focus into the dialog after render
8350
+ this.updateComplete.then(() => {
8351
+ const closeBtn = this.shadowRoot?.querySelector('.preview-close');
8352
+ closeBtn?.focus();
8353
+ });
8354
+ }
8355
+ }
8356
+ _closePreview(e) {
8357
+ e.stopPropagation();
8358
+ const wasOpen = this._previewOpen;
8359
+ this._previewOpen = false;
8360
+ if (wasOpen) {
8361
+ // Return focus to the trigger
8362
+ const trigger = this.shadowRoot?.querySelector('.svg-content');
8363
+ trigger?.focus();
8364
+ }
8365
+ }
8366
+ render() {
8367
+ return b `
8368
+ <div class="svg-wrapper">
8369
+ ${this._loaded && this._svgContent
8370
+ ? b `<div
8371
+ class="svg-content ${this.preview ? 'clickable' : ''}"
8372
+ role=${this.imageTitle ? 'img' : 'presentation'}
8373
+ aria-label=${this.imageTitle || ''}
8374
+ @click=${this._handleClick}
8375
+ >
8376
+ ${o$3(this._svgContent)}
8377
+ </div>`
8378
+ : b `<span class="placeholder" aria-hidden="true"></span>`}
8379
+ </div>
8380
+
8381
+ <div
8382
+ class="preview-overlay ${this._previewOpen ? 'open' : ''}"
8383
+ role="dialog"
8384
+ aria-modal="true"
8385
+ aria-label=${this.imageTitle ? `Preview: ${this.imageTitle}` : 'SVG preview'}
8386
+ @click=${this._closePreview}
8387
+ @keydown=${(e) => e.key === 'Escape' && this._closePreview(e)}
8388
+ >
8389
+ <button
8390
+ class="preview-close"
8391
+ aria-label="Close preview"
8392
+ @click=${this._closePreview}
8393
+ >&#x2715;</button>
8394
+ <div class="preview-content" @click=${(e) => e.stopPropagation()}>
8395
+ ${o$3(this._svgContent)}
8396
+ </div>
8397
+ </div>
8398
+ `;
8399
+ }
8400
+ }
8401
+ Svg.styles = [css_248z$f];
8402
+ __decorate([
8403
+ n({ type: String, reflect: true })
8404
+ ], Svg.prototype, "src", void 0);
8405
+ __decorate([
8406
+ n({ attribute: 'image-title' })
8407
+ ], Svg.prototype, "imageTitle", void 0);
8408
+ __decorate([
8409
+ n({ type: Boolean, reflect: true })
8410
+ ], Svg.prototype, "preview", void 0);
8411
+ __decorate([
8412
+ r()
8413
+ ], Svg.prototype, "_loaded", void 0);
8414
+ __decorate([
8415
+ r()
8416
+ ], Svg.prototype, "_previewOpen", void 0);
8417
+ __decorate([
8418
+ r()
8419
+ ], Svg.prototype, "_svgContent", void 0);
8420
+
7837
8421
  var css_248z$e = i`* {
7838
8422
  box-sizing: border-box;
7839
8423
  }
@@ -9724,7 +10308,7 @@ class Table extends i$1 {
9724
10308
  <div class="col-content">
9725
10309
  ${column.template
9726
10310
  ? b `<div class="col-template">
9727
- ${o$3(column.template(row, column))}
10311
+ ${o$4(column.template(row, column))}
9728
10312
  </div>`
9729
10313
  : b `<div class="col-text" title=${row?.[column.name] ?? ''}>
9730
10314
  ${row?.[column.name]}
@@ -12337,13 +12921,25 @@ var css_248z$1 = i`* {
12337
12921
  align-items: center;
12338
12922
  width: 100%;
12339
12923
  flex-shrink: 0;
12924
+ padding-block-end: 2.5rem;
12340
12925
  }
12341
12926
  .rail .header:empty {
12342
12927
  display: none;
12343
12928
  }
12929
+ .rail .footer {
12930
+ display: flex;
12931
+ flex-direction: column;
12932
+ align-items: center;
12933
+ justify-content: flex-end;
12934
+ width: 100%;
12935
+ flex-shrink: 0;
12936
+ margin-top: auto;
12937
+ }
12938
+ .rail .footer:empty {
12939
+ display: none;
12940
+ }
12344
12941
  .rail wc-divider {
12345
12942
  width: calc(100% - 1rem);
12346
- margin-block: 0.5rem;
12347
12943
  flex-shrink: 0;
12348
12944
  }
12349
12945
  .rail .items {
@@ -12352,22 +12948,11 @@ var css_248z$1 = i`* {
12352
12948
  align-items: center;
12353
12949
  width: 100%;
12354
12950
  gap: 0.75rem; /* 12dp between items */
12355
- flex: 1;
12951
+ flex: 1 1 auto;
12952
+ min-height: 0;
12356
12953
  }
12357
12954
  .rail .items ::slotted(wc-navigation-rail-item) {
12358
12955
  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
12956
  }`;
12372
12957
 
12373
12958
  var css_248z = i`* {
@@ -12440,6 +13025,12 @@ var css_248z = i`* {
12440
13025
  flex-shrink: 0;
12441
13026
  transition: background-color var(--duration-short4, 200ms) var(--easing-standard, ease);
12442
13027
  }
13028
+ .item .indicator .ripple {
13029
+ inset: 0;
13030
+ z-index: 0;
13031
+ --ripple-pressed-color: var(--_state-color);
13032
+ border-radius: inherit;
13033
+ }
12443
13034
  .item .indicator .icon-container {
12444
13035
  display: flex;
12445
13036
  align-items: center;
@@ -12454,29 +13045,6 @@ var css_248z = i`* {
12454
13045
  color: var(--_inactive-icon-color);
12455
13046
  display: flex;
12456
13047
  }
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
13048
  .item {
12481
13049
  /* Label */
12482
13050
  }
@@ -12538,18 +13106,6 @@ var css_248z = i`* {
12538
13106
  .item.active.has-active-icon .icon-slot {
12539
13107
  display: none;
12540
13108
  }
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
13109
  .item {
12554
13110
  /* Disabled state */
12555
13111
  }
@@ -12571,7 +13127,6 @@ var css_248z = i`* {
12571
13127
 
12572
13128
  @media (prefers-reduced-motion: reduce) {
12573
13129
  .item .indicator,
12574
- .item .state-layer,
12575
13130
  .item .label {
12576
13131
  transition: none;
12577
13132
  }
@@ -12688,11 +13243,10 @@ class NavigationRailItem extends i$1 {
12688
13243
  __renderItemContent() {
12689
13244
  return b `
12690
13245
  <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
13246
 
12694
13247
  <div class="item-content">
12695
13248
  <div class="indicator">
13249
+ <wc-ripple class="ripple"></wc-ripple>
12696
13250
  <div class="icon-container">
12697
13251
  <slot name="active-icon" class="active-icon-slot"></slot>
12698
13252
  <slot name="icon" class="icon-slot"></slot>
@@ -12799,6 +13353,9 @@ __decorate([
12799
13353
  * <p>Navigation rail provides access to primary destinations in an app using icons—with or without labels—on a vertical rail.</p>
12800
13354
  * <p>Use navigation rail on medium-sized screens (tablets) with 3–7 destinations.</p>
12801
13355
  *
13356
+ * @slot header - Content displayed above the rail items.
13357
+ * @slot footer - Content pinned to the bottom of the rail.
13358
+ *
12802
13359
  * @cssprop --nav-rail-width - Width of the rail container. Defaults to 5rem (80dp).
12803
13360
  * @cssprop --nav-rail-container-color - Background color of the rail. Defaults to surface color.
12804
13361
  * @cssprop --nav-rail-indicator-color - Color of the active indicator. Defaults to secondary-container.
@@ -12832,13 +13389,6 @@ __decorate([
12832
13389
  class NavigationRail extends i$1 {
12833
13390
  constructor() {
12834
13391
  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
13392
  /**
12843
13393
  * Display mode of the navigation rail.
12844
13394
  * - `"expanded"`: shows labels.
@@ -12898,7 +13448,6 @@ class NavigationRail extends i$1 {
12898
13448
  render() {
12899
13449
  const cssClasses = {
12900
13450
  rail: true,
12901
- [`align-${this.alignment}`]: true,
12902
13451
  [`mode-${this.mode}`]: true,
12903
13452
  };
12904
13453
  return b `
@@ -12910,15 +13459,15 @@ class NavigationRail extends i$1 {
12910
13459
  <nav class="items" role="presentation">
12911
13460
  <slot @slotchange=${this._syncItemMode}></slot>
12912
13461
  </nav>
13462
+ <div class="footer">
13463
+ <slot name="footer"></slot>
13464
+ </div>
12913
13465
  </div>
12914
13466
  `;
12915
13467
  }
12916
13468
  }
12917
13469
  NavigationRail.styles = [css_248z$1];
12918
13470
  NavigationRail.Item = NavigationRailItem;
12919
- __decorate([
12920
- n({ reflect: true })
12921
- ], NavigationRail.prototype, "alignment", void 0);
12922
13471
  __decorate([
12923
13472
  n({ reflect: true })
12924
13473
  ], NavigationRail.prototype, "mode", void 0);
@@ -12926,5 +13475,5 @@ __decorate([
12926
13475
  n({ type: Boolean, attribute: 'show-divider' })
12927
13476
  ], NavigationRail.prototype, "showDivider", void 0);
12928
13477
 
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
13478
+ export { Accordion as A, Badge as B, Checkbox as C, DatePicker as D, Elevation as E, Field as F, Spinner as G, SubMenu as H, Image as I, Svg as J, Switch as K, LinearProgress as L, Menu as M, NavigationRail as N, TabGroup as O, Pagination as P, TabPanel as Q, Radio as R, SegmentedButton as S, Tab as T, Table as U, Tabs as V, Tag as W, Textarea as X, TimePicker as Y, Tooltip as Z, UrlField as _, 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, List as l, ListItem as m, MenuItem as n, NavigationRailItem as o, NumberField as p, Ripple as q, SegmentedButtonGroup as r, Select as s, SelectOptionElement as t, SidebarMenu as u, SidebarMenuItem as v, SidebarSubMenu as w, Skeleton as x, Slider as y, Snackbar as z };
13479
+ //# sourceMappingURL=navigation-rail-DTTkqohi.js.map