@redvars/peacock 3.2.7 → 3.2.8

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 (109) hide show
  1. package/dist/PeacockComponent-DMrFEGDh.js +80 -0
  2. package/dist/PeacockComponent-DMrFEGDh.js.map +1 -0
  3. package/dist/breadcrumb-item-DkhwoMAH.js +6879 -0
  4. package/dist/breadcrumb-item-DkhwoMAH.js.map +1 -0
  5. package/dist/button-BtpAXuLN.js +1180 -0
  6. package/dist/button-BtpAXuLN.js.map +1 -0
  7. package/dist/button-group.js +7 -6
  8. package/dist/button-group.js.map +1 -1
  9. package/dist/button.js +5 -0
  10. package/dist/button.js.map +1 -0
  11. package/dist/{class-map-BmCohX9p.js → class-map-CbncA34D.js} +2 -3
  12. package/dist/class-map-CbncA34D.js.map +1 -0
  13. package/dist/code-highlighter.js +9 -8
  14. package/dist/code-highlighter.js.map +1 -1
  15. package/dist/custom-elements.json +28 -0
  16. package/dist/index.js +87 -35
  17. package/dist/index.js.map +1 -1
  18. package/dist/number-counter.js +7 -6
  19. package/dist/number-counter.js.map +1 -1
  20. package/dist/peacock-loader.js +963 -38
  21. package/dist/peacock-loader.js.map +1 -1
  22. package/dist/src/PeacockComponent.d.ts +1 -0
  23. package/dist/{state-CV1fRmOT.js → state-CEVpI7Vv.js} +2 -2
  24. package/dist/{state-CV1fRmOT.js.map → state-CEVpI7Vv.js.map} +1 -1
  25. package/dist/{style-map-CdmclYgz.js → style-map-mOmZwsJT.js} +2 -3
  26. package/dist/style-map-mOmZwsJT.js.map +1 -0
  27. package/dist/tsconfig.tsbuildinfo +1 -1
  28. package/dist/{unsafe-html-BS8X6Gto.js → unsafe-html-Ca00SXpn.js} +2 -3
  29. package/dist/unsafe-html-Ca00SXpn.js.map +1 -0
  30. package/package.json +1 -1
  31. package/readme.md +2 -2
  32. package/src/PeacockComponent.ts +3 -0
  33. package/src/button/button/button.ts +3 -1
  34. package/src/button/button-group/button-group.ts +2 -0
  35. package/src/code-highlighter/code-highlighter.ts +2 -0
  36. package/src/number-counter/number-counter.ts +2 -0
  37. package/dist/BaseButton.js +0 -209
  38. package/dist/BaseButton.js.map +0 -1
  39. package/dist/BaseInput.js +0 -27
  40. package/dist/BaseInput.js.map +0 -1
  41. package/dist/accordion-item.js +0 -191
  42. package/dist/accordion-item.js.map +0 -1
  43. package/dist/accordion.js +0 -142
  44. package/dist/accordion.js.map +0 -1
  45. package/dist/avatar.js +0 -106
  46. package/dist/avatar.js.map +0 -1
  47. package/dist/badge.js +0 -84
  48. package/dist/badge.js.map +0 -1
  49. package/dist/base-progress.js +0 -33
  50. package/dist/base-progress.js.map +0 -1
  51. package/dist/breadcrumb-item.js +0 -160
  52. package/dist/breadcrumb-item.js.map +0 -1
  53. package/dist/breadcrumb.js +0 -84
  54. package/dist/breadcrumb.js.map +0 -1
  55. package/dist/checkbox.js +0 -530
  56. package/dist/checkbox.js.map +0 -1
  57. package/dist/chip.js +0 -303
  58. package/dist/chip.js.map +0 -1
  59. package/dist/class-map-BmCohX9p.js.map +0 -1
  60. package/dist/clock.js +0 -83
  61. package/dist/clock.js.map +0 -1
  62. package/dist/container.js +0 -135
  63. package/dist/container.js.map +0 -1
  64. package/dist/directive-Cuw6h7YA.js +0 -9
  65. package/dist/directive-Cuw6h7YA.js.map +0 -1
  66. package/dist/divider.js +0 -126
  67. package/dist/divider.js.map +0 -1
  68. package/dist/elevation.js +0 -79
  69. package/dist/elevation.js.map +0 -1
  70. package/dist/empty-state.js +0 -171
  71. package/dist/empty-state.js.map +0 -1
  72. package/dist/field.js +0 -416
  73. package/dist/field.js.map +0 -1
  74. package/dist/focus-ring.js +0 -107
  75. package/dist/focus-ring.js.map +0 -1
  76. package/dist/icon.js +0 -183
  77. package/dist/icon.js.map +0 -1
  78. package/dist/link.js +0 -91
  79. package/dist/link.js.map +0 -1
  80. package/dist/lit-element-CA46RFZ_.js +0 -28
  81. package/dist/lit-element-CA46RFZ_.js.map +0 -1
  82. package/dist/menu-item.js +0 -232
  83. package/dist/menu-item.js.map +0 -1
  84. package/dist/menu-list.js +0 -108
  85. package/dist/menu-list.js.map +0 -1
  86. package/dist/menu.js +0 -117
  87. package/dist/menu.js.map +0 -1
  88. package/dist/property-DNVWDdPC.js +0 -45
  89. package/dist/property-DNVWDdPC.js.map +0 -1
  90. package/dist/query-QBcUV-L_.js +0 -15
  91. package/dist/query-QBcUV-L_.js.map +0 -1
  92. package/dist/ripple.js +0 -128
  93. package/dist/ripple.js.map +0 -1
  94. package/dist/skeleton.js +0 -113
  95. package/dist/skeleton.js.map +0 -1
  96. package/dist/spinner.js +0 -93
  97. package/dist/spinner.js.map +0 -1
  98. package/dist/spread-axRTFMoH.js +0 -32
  99. package/dist/spread-axRTFMoH.js.map +0 -1
  100. package/dist/style-map-CdmclYgz.js.map +0 -1
  101. package/dist/switch-DqxIiVsB.js +0 -2738
  102. package/dist/switch-DqxIiVsB.js.map +0 -1
  103. package/dist/tag.js +0 -323
  104. package/dist/tag.js.map +0 -1
  105. package/dist/tooltip.js +0 -1857
  106. package/dist/tooltip.js.map +0 -1
  107. package/dist/unsafe-html-BS8X6Gto.js.map +0 -1
  108. package/dist/utils-DGMeCC48.js +0 -273
  109. package/dist/utils-DGMeCC48.js.map +0 -1
@@ -1,42 +1,967 @@
1
- import { Elevation } from './elevation.js';
2
- import { FocusRing } from './focus-ring.js';
3
- import { Ripple } from './ripple.js';
4
- import { Icon } from './icon.js';
5
- import { Avatar } from './avatar.js';
6
- import { Badge } from './badge.js';
7
- import { Divider } from './divider.js';
8
- import { S as Switch, b as TimePicker, D as DatePicker, T as Textarea, N as NumberField, a as Input, C as CircularProgress, L as LinearProgress, I as IconButton, B as Button } from './switch-DqxIiVsB.js';
1
+ import { A as Accordion, e as Container, g as EmptyState, l as Spinner, m as Switch, c as BreadcrumbItem, b as Breadcrumb, p as Tooltip, o as TimePicker, D as DatePicker, n as Textarea, N as NumberField, F as Field, j as Input, S as Skeleton, d as CircularProgress, L as LinearProgress, T as Tag, C as Chip, k as Link, R as Ripple, E as Elevation, f as Divider, i as IconButton, B as Badge, a as Avatar, h as FocusRing, I as Icon } from './breadcrumb-item-DkhwoMAH.js';
2
+ import { e, s as spread, B as Button } from './button-BtpAXuLN.js';
9
3
  import { ButtonGroup } from './button-group.js';
10
- import { Field } from './field.js';
11
- import { Checkbox } from './checkbox.js';
12
- import { Menu } from './menu.js';
13
- import { MenuItem } from './menu-item.js';
14
- import { MenuList } from './menu-list.js';
15
- import { Accordion } from './accordion.js';
16
- import { Link } from './link.js';
17
- import { Tag } from './tag.js';
18
- import { Chip } from './chip.js';
19
- import { Tooltip } from './tooltip.js';
20
- import { Breadcrumb } from './breadcrumb.js';
21
- import { BreadcrumbItem } from './breadcrumb-item.js';
22
- import { Skeleton } from './skeleton.js';
23
- import { Spinner } from './spinner.js';
24
- import { EmptyState } from './empty-state.js';
25
- import { Container } from './container.js';
26
- import './lit-element-CA46RFZ_.js';
27
- import './property-DNVWDdPC.js';
28
- import './state-CV1fRmOT.js';
29
- import './directive-Cuw6h7YA.js';
30
- import './unsafe-html-BS8X6Gto.js';
31
- import './utils-DGMeCC48.js';
32
- import './class-map-BmCohX9p.js';
33
- import './spread-axRTFMoH.js';
34
- import './BaseButton.js';
35
- import './query-QBcUV-L_.js';
36
- import './style-map-CdmclYgz.js';
37
- import './base-progress.js';
38
- import './BaseInput.js';
39
- import './accordion-item.js';
4
+ import { i, _ as __decorate, n, a as i$1, w, b } from './PeacockComponent-DMrFEGDh.js';
5
+ import { r } from './state-CEVpI7Vv.js';
6
+ import { e as e$1 } from './class-map-CbncA34D.js';
7
+ import './unsafe-html-Ca00SXpn.js';
8
+ import './style-map-mOmZwsJT.js';
9
+
10
+ var css_248z$3 = i`* {
11
+ box-sizing: border-box;
12
+ }
13
+
14
+ .screen-reader-only {
15
+ display: none !important;
16
+ }
17
+
18
+ :host {
19
+ display: inline-block;
20
+ --checkbox-size: 18px;
21
+ --checkbox-icon-size: 12px;
22
+ --checkbox-selected-color: var(--color-primary);
23
+ --checkbox-unselected-color: var(--color-on-surface-variant);
24
+ --checkbox-checkmark-color: var(--color-on-primary);
25
+ --checkbox-state-layer-size: 40px;
26
+ --checkbox-disabled-opacity: 0.38;
27
+ --checkbox-border-radius: 2px;
28
+ }
29
+
30
+ .checkbox {
31
+ position: relative;
32
+ display: inline-flex;
33
+ align-items: center;
34
+ cursor: pointer;
35
+ user-select: none;
36
+ vertical-align: middle;
37
+ font-family: var(--typography-body-medium-font-family) !important;
38
+ font-size: var(--typography-body-medium-font-size) !important;
39
+ font-weight: var(--typography-body-medium-font-weight) !important;
40
+ line-height: var(--typography-body-medium-line-height) !important;
41
+ letter-spacing: var(--typography-body-medium-letter-spacing) !important;
42
+ }
43
+ .checkbox.has-content {
44
+ gap: 8px;
45
+ }
46
+ .checkbox .input-native {
47
+ position: absolute;
48
+ width: 1px;
49
+ height: 1px;
50
+ padding: 0;
51
+ margin: -1px;
52
+ overflow: hidden;
53
+ clip: rect(0, 0, 0, 0);
54
+ border: 0;
55
+ }
56
+ .checkbox .container {
57
+ position: relative;
58
+ display: inline-flex;
59
+ align-items: center;
60
+ justify-content: center;
61
+ width: var(--checkbox-state-layer-size);
62
+ height: var(--checkbox-state-layer-size);
63
+ cursor: inherit;
64
+ outline: none;
65
+ flex-shrink: 0;
66
+ }
67
+ .checkbox .state-layer {
68
+ position: absolute;
69
+ inset: 0;
70
+ border-radius: 50%;
71
+ opacity: 0;
72
+ transition: opacity var(--duration-short2) var(--easing-standard);
73
+ }
74
+ .checkbox .outline {
75
+ position: absolute;
76
+ width: var(--checkbox-size);
77
+ height: var(--checkbox-size);
78
+ border: 2px solid var(--checkbox-unselected-color);
79
+ border-radius: var(--checkbox-border-radius);
80
+ box-sizing: border-box;
81
+ transition: border-color var(--duration-short2) var(--easing-standard);
82
+ }
83
+ .checkbox .background {
84
+ position: absolute;
85
+ width: var(--checkbox-size);
86
+ height: var(--checkbox-size);
87
+ background: var(--checkbox-selected-color);
88
+ border-radius: var(--checkbox-border-radius);
89
+ opacity: 0;
90
+ transform: scale(0);
91
+ transition: transform var(--duration-short2) var(--easing-standard), opacity var(--duration-short2) var(--easing-standard);
92
+ }
93
+ .checkbox .icon {
94
+ position: absolute;
95
+ width: var(--checkbox-icon-size);
96
+ height: var(--checkbox-icon-size);
97
+ fill: none;
98
+ stroke: var(--checkbox-checkmark-color);
99
+ stroke-width: 2;
100
+ stroke-linecap: round;
101
+ stroke-linejoin: round;
102
+ opacity: 0;
103
+ transition: opacity var(--duration-short1) var(--easing-standard);
104
+ }
105
+ .checkbox .icon .checkmark {
106
+ stroke-dasharray: 14;
107
+ stroke-dashoffset: 14;
108
+ transition: stroke-dashoffset var(--duration-short4) var(--easing-emphasized);
109
+ }
110
+ .checkbox .icon .indeterminate {
111
+ transform-origin: center;
112
+ opacity: 0;
113
+ transition: opacity var(--duration-short1) var(--easing-standard);
114
+ }
115
+ .checkbox .label {
116
+ color: var(--color-on-surface);
117
+ cursor: inherit;
118
+ }
119
+ .checkbox:hover:not(.disabled):not(.readonly) .state-layer {
120
+ opacity: 0.08;
121
+ background: var(--color-on-surface);
122
+ }
123
+ .checkbox:hover:not(.disabled):not(.readonly).state-checked .state-layer, .checkbox:hover:not(.disabled):not(.readonly).state-indeterminate .state-layer {
124
+ background: var(--checkbox-selected-color);
125
+ }
126
+ .checkbox.has-focus:not(.active):not(.disabled):not(.readonly) .state-layer {
127
+ opacity: 0.12;
128
+ background: var(--color-on-surface);
129
+ }
130
+ .checkbox.has-focus:not(.active):not(.disabled):not(.readonly) .container {
131
+ outline: 3px solid var(--color-primary);
132
+ outline-offset: 2px;
133
+ border-radius: 50%;
134
+ }
135
+ .checkbox.has-focus:not(.active):not(.disabled):not(.readonly).state-checked .state-layer, .checkbox.has-focus:not(.active):not(.disabled):not(.readonly).state-indeterminate .state-layer {
136
+ background: var(--checkbox-selected-color);
137
+ }
138
+ .checkbox.active:not(.disabled):not(.readonly) .state-layer {
139
+ opacity: 0.12;
140
+ background: var(--color-on-surface);
141
+ }
142
+ .checkbox.active:not(.disabled):not(.readonly).state-checked .state-layer, .checkbox.active:not(.disabled):not(.readonly).state-indeterminate .state-layer {
143
+ background: var(--checkbox-selected-color);
144
+ }
145
+ .checkbox.rounded {
146
+ --checkbox-border-radius: 18px;
147
+ }
148
+
149
+ .checkbox.state-checked .outline {
150
+ border-color: transparent;
151
+ }
152
+ .checkbox.state-checked .background {
153
+ opacity: 1;
154
+ transform: scale(1);
155
+ }
156
+ .checkbox.state-checked .icon {
157
+ opacity: 1;
158
+ }
159
+ .checkbox.state-checked .icon .checkmark {
160
+ stroke-dashoffset: 0;
161
+ }
162
+
163
+ .checkbox.state-indeterminate .outline {
164
+ border-color: transparent;
165
+ }
166
+ .checkbox.state-indeterminate .background {
167
+ opacity: 1;
168
+ transform: scale(1);
169
+ }
170
+ .checkbox.state-indeterminate .icon {
171
+ opacity: 1;
172
+ fill: var(--checkbox-checkmark-color);
173
+ }
174
+ .checkbox.state-indeterminate .icon .indeterminate {
175
+ opacity: 1;
176
+ }
177
+
178
+ .checkbox.size-sm {
179
+ --checkbox-size: 16px;
180
+ --checkbox-icon-size: 10px;
181
+ --checkbox-state-layer-size: 36px;
182
+ font-size: var(--font-size-body-small);
183
+ line-height: var(--line-height-body-small);
184
+ }
185
+ .checkbox.size-sm .icon {
186
+ stroke-width: 1.5;
187
+ }
188
+
189
+ .checkbox.size-md {
190
+ --checkbox-size: 18px;
191
+ --checkbox-icon-size: 12px;
192
+ --checkbox-state-layer-size: 40px;
193
+ }
194
+ .checkbox.size-md .icon {
195
+ stroke-width: 2;
196
+ }
197
+
198
+ .checkbox.size-lg {
199
+ --checkbox-size: 24px;
200
+ --checkbox-icon-size: 16px;
201
+ --checkbox-state-layer-size: 48px;
202
+ font-size: var(--font-size-body-large);
203
+ line-height: var(--line-height-body-large);
204
+ }
205
+ .checkbox.size-lg .icon {
206
+ stroke-width: 2.5;
207
+ }
208
+
209
+ .checkbox.readonly {
210
+ cursor: default;
211
+ }
212
+ .checkbox.readonly .label {
213
+ color: var(--color-on-surface);
214
+ }
215
+ .checkbox.readonly .outline {
216
+ border-color: var(--color-on-surface-variant);
217
+ }
218
+ .checkbox.readonly.state-checked .background, .checkbox.readonly.state-indeterminate .background {
219
+ background: var(--color-on-surface-variant);
220
+ }
221
+ .checkbox.readonly .state-layer {
222
+ display: none;
223
+ }
224
+
225
+ .checkbox.disabled {
226
+ cursor: not-allowed;
227
+ opacity: var(--checkbox-disabled-opacity);
228
+ }
229
+ .checkbox.disabled .label {
230
+ color: var(--color-on-surface);
231
+ }
232
+ .checkbox.disabled .outline {
233
+ border-color: var(--color-on-surface);
234
+ }
235
+ .checkbox.disabled.state-checked .background, .checkbox.disabled.state-indeterminate .background {
236
+ background: var(--color-on-surface);
237
+ }
238
+ .checkbox.disabled .state-layer {
239
+ display: none;
240
+ }`;
241
+
242
+ /**
243
+ * @label Checkbox
244
+ * @tag base-checkbox
245
+ * @rawTag checkbox
246
+ *
247
+ * @summary Captures boolean input with an optional indeterminate mode.
248
+ * @overview
249
+ * <p>Checkboxes allow users to select one or more items from a set. Checkboxes can turn an option on or off.</p>
250
+ * <p>Material Design 3 checkboxes feature a smooth animation and clear visual states for checked, unchecked, and indeterminate.</p>
251
+ *
252
+ * @cssprop --checkbox-size: Size of the checkbox container.
253
+ * @cssprop --checkbox-selected-color: Color of the checkbox when selected.
254
+ * @cssprop --checkbox-unselected-color: Color of the checkbox border when unselected.
255
+ * @cssprop --checkbox-checkmark-color: Color of the checkmark icon.
256
+ * @cssprop --checkbox-state-layer-size: Size of the state layer for touch target.
257
+ *
258
+ * @fires {CustomEvent} change - Dispatched when the checkbox value changes.
259
+ * @fires {CustomEvent} blur - Dispatched when the checkbox loses focus.
260
+ * @fires {CustomEvent} focus - Dispatched when the checkbox receives focus.
261
+ *
262
+ * @example
263
+ * ```html
264
+ * <base-checkbox label="Accept terms"></base-checkbox>
265
+ * ```
266
+ * @tags input, form
267
+ */
268
+ class Checkbox extends i$1 {
269
+ constructor() {
270
+ super(...arguments);
271
+ /**
272
+ * The input field name.
273
+ */
274
+ this.name = '';
275
+ /**
276
+ * The checkbox label.
277
+ */
278
+ this.label = '';
279
+ /**
280
+ * The input field value (checked state).
281
+ */
282
+ this.value = false;
283
+ /**
284
+ * If true, displays the checkbox in an indeterminate state.
285
+ */
286
+ this.indeterminate = false;
287
+ /**
288
+ * If true, the checkbox has rounded corners. Defaults to `false`.
289
+ */
290
+ this.rounded = false;
291
+ /**
292
+ * The checkbox size.
293
+ * Possible values are: `"sm"`, `"md"`, `"lg"`. Defaults to `"md"`.
294
+ */
295
+ this.size = 'md';
296
+ /**
297
+ * If true, required icon is shown. Defaults to `false`.
298
+ */
299
+ this.required = false;
300
+ /**
301
+ * If true, the checkbox is readonly. Defaults to `false`.
302
+ */
303
+ this.readonly = false;
304
+ /**
305
+ * If true, the user cannot interact with the checkbox. Defaults to `false`.
306
+ */
307
+ this.disabled = false;
308
+ /**
309
+ * Configuration object for aria attributes.
310
+ */
311
+ this.configAria = {};
312
+ this.hasFocus = false;
313
+ this.isActive = false;
314
+ this.slotHasContent = false;
315
+ this.windowMouseUp = () => {
316
+ if (this.isActive) {
317
+ this.isActive = false;
318
+ }
319
+ };
320
+ this.windowKeyUp = (evt) => {
321
+ if (this.isActive && evt.key === ' ') {
322
+ this.isActive = false;
323
+ }
324
+ };
325
+ this.mouseDownHandler = () => {
326
+ this.isActive = true;
327
+ };
328
+ this.keyDownHandler = (evt) => {
329
+ if (evt.key === ' ') {
330
+ evt.preventDefault();
331
+ this.isActive = true;
332
+ this.clickHandler(evt);
333
+ }
334
+ };
335
+ this.clickHandler = (ev) => {
336
+ if (!this.disabled && !this.readonly) {
337
+ this.value = !this.value;
338
+ this.indeterminate = false;
339
+ this.dispatchEvent(new CustomEvent('change', {
340
+ detail: { value: this.value, originalEvent: ev },
341
+ bubbles: true,
342
+ composed: true,
343
+ }));
344
+ this.containerElement?.focus();
345
+ }
346
+ };
347
+ this.blurHandler = (ev) => {
348
+ this.hasFocus = false;
349
+ this.dispatchEvent(new CustomEvent('blur', {
350
+ detail: ev,
351
+ bubbles: true,
352
+ composed: true,
353
+ }));
354
+ };
355
+ this.focusHandler = (ev) => {
356
+ this.hasFocus = true;
357
+ this.dispatchEvent(new CustomEvent('focus', {
358
+ detail: ev,
359
+ bubbles: true,
360
+ composed: true,
361
+ }));
362
+ };
363
+ this.handleKeyUp = (evt) => {
364
+ if (evt.key === 'Enter') {
365
+ this.clickHandler(evt);
366
+ }
367
+ };
368
+ }
369
+ connectedCallback() {
370
+ super.connectedCallback();
371
+ this.handleInitialAttributes();
372
+ window.addEventListener('mouseup', this.windowMouseUp);
373
+ window.addEventListener('keyup', this.windowKeyUp);
374
+ }
375
+ disconnectedCallback() {
376
+ super.disconnectedCallback();
377
+ window.removeEventListener('mouseup', this.windowMouseUp);
378
+ window.removeEventListener('keyup', this.windowKeyUp);
379
+ }
380
+ firstUpdated() {
381
+ this.slotHasContent = this.hasChildNodes();
382
+ }
383
+ handleInitialAttributes() {
384
+ if (this.hasAttribute('tabindex')) {
385
+ this.tabindex = this.getAttribute('tabindex') || undefined;
386
+ this.removeAttribute('tabindex');
387
+ }
388
+ Array.from(this.attributes).forEach(attr => {
389
+ if (attr.name.startsWith('aria-')) {
390
+ this.configAria[attr.name] = attr.value;
391
+ this.removeAttribute(attr.name);
392
+ }
393
+ });
394
+ }
395
+ /**
396
+ * Sets focus on the checkbox.
397
+ */
398
+ focus() {
399
+ this.containerElement?.focus();
400
+ }
401
+ /**
402
+ * Removes focus from the checkbox.
403
+ */
404
+ blur() {
405
+ this.containerElement?.blur();
406
+ }
407
+ render() {
408
+ const cssClasses = {
409
+ checkbox: true,
410
+ 'state-checked': this.value,
411
+ 'state-indeterminate': !this.value && this.indeterminate,
412
+ [`size-${this.size}`]: true,
413
+ 'has-focus': this.hasFocus,
414
+ active: this.isActive,
415
+ disabled: this.disabled,
416
+ readonly: this.readonly,
417
+ required: this.required,
418
+ rounded: this.rounded,
419
+ 'has-content': this.slotHasContent,
420
+ };
421
+ return b `
422
+ <label class=${e$1(cssClasses)}>
423
+ <div
424
+ class="container"
425
+ tabindex=${this.tabindex || 0}
426
+ @keyup=${this.handleKeyUp}
427
+ @mousedown=${this.mouseDownHandler}
428
+ @keydown=${this.keyDownHandler}
429
+ @blur=${this.blurHandler}
430
+ @focus=${this.focusHandler}
431
+ role="checkbox"
432
+ aria-disabled=${this.disabled}
433
+ aria-required=${this.required}
434
+ aria-checked=${this.value
435
+ ? 'true'
436
+ : this.indeterminate
437
+ ? 'mixed'
438
+ : 'false'}
439
+ ${spread(this.configAria)}
440
+ >
441
+ <div class="state-layer"></div>
442
+ <div class="outline"></div>
443
+ <div class="background"></div>
444
+ <svg class="icon" viewBox="0 0 12 12">
445
+ ${this.value
446
+ ? w `
447
+ <path
448
+ class="checkmark"
449
+ d="M2 6L5 9L10 2"
450
+ />
451
+ `
452
+ : this.indeterminate
453
+ ? w `<rect
454
+ class="indeterminate"
455
+ x="2"
456
+ y="5"
457
+ width="8"
458
+ height="2"
459
+ />`
460
+ : ''}
461
+ </svg>
462
+ </div>
463
+
464
+ <input
465
+ type="checkbox"
466
+ class="input-native"
467
+ name=${this.name}
468
+ .checked=${this.value}
469
+ .indeterminate=${this.indeterminate}
470
+ aria-hidden="true"
471
+ ?required=${this.required}
472
+ tabindex="-1"
473
+ @click=${this.clickHandler}
474
+ />
475
+
476
+ ${this.label
477
+ ? b `<div class="label">${this.label}</div>`
478
+ : b `<div class="label slot-container"><slot></slot></div>`}
479
+ </label>
480
+ `;
481
+ }
482
+ }
483
+ Checkbox.styles = [css_248z$3];
484
+ __decorate([
485
+ n({ type: String })
486
+ ], Checkbox.prototype, "name", void 0);
487
+ __decorate([
488
+ n({ type: String })
489
+ ], Checkbox.prototype, "label", void 0);
490
+ __decorate([
491
+ n({ type: Boolean, reflect: true })
492
+ ], Checkbox.prototype, "value", void 0);
493
+ __decorate([
494
+ n({ type: Boolean, reflect: true })
495
+ ], Checkbox.prototype, "indeterminate", void 0);
496
+ __decorate([
497
+ n({ type: Boolean })
498
+ ], Checkbox.prototype, "rounded", void 0);
499
+ __decorate([
500
+ n({ type: String })
501
+ ], Checkbox.prototype, "size", void 0);
502
+ __decorate([
503
+ n({ type: Boolean, reflect: true })
504
+ ], Checkbox.prototype, "required", void 0);
505
+ __decorate([
506
+ n({ type: Boolean, reflect: true })
507
+ ], Checkbox.prototype, "readonly", void 0);
508
+ __decorate([
509
+ n({ type: Boolean, reflect: true })
510
+ ], Checkbox.prototype, "disabled", void 0);
511
+ __decorate([
512
+ n({ type: Object })
513
+ ], Checkbox.prototype, "configAria", void 0);
514
+ __decorate([
515
+ r()
516
+ ], Checkbox.prototype, "hasFocus", void 0);
517
+ __decorate([
518
+ r()
519
+ ], Checkbox.prototype, "isActive", void 0);
520
+ __decorate([
521
+ r()
522
+ ], Checkbox.prototype, "slotHasContent", void 0);
523
+ __decorate([
524
+ e('.container')
525
+ ], Checkbox.prototype, "containerElement", void 0);
526
+ __decorate([
527
+ e('.input-native')
528
+ ], Checkbox.prototype, "nativeElement", void 0);
529
+
530
+ class Menu extends i$1 {
531
+ constructor() {
532
+ super();
533
+ this.open = false;
534
+ // Position: 'bottom-start' | 'bottom-end' | etc. (Simplified here to generic dropdown)
535
+ this.align = 'start';
536
+ this._boundClickOutside = this._handleClickOutside.bind(this);
537
+ }
538
+ connectedCallback() {
539
+ // eslint-disable-next-line wc/guard-super-call
540
+ super.connectedCallback();
541
+ window.addEventListener('click', this._boundClickOutside);
542
+ // Listen for menu-item clicks bubbling up
543
+ this.addEventListener('click', this._handleItemClick);
544
+ }
545
+ disconnectedCallback() {
546
+ // eslint-disable-next-line wc/guard-super-call
547
+ super.disconnectedCallback();
548
+ window.removeEventListener('click', this._boundClickOutside);
549
+ this.removeEventListener('click', this._handleItemClick);
550
+ }
551
+ _handleClickOutside(e) {
552
+ if (!this.open)
553
+ return;
554
+ const path = e.composedPath();
555
+ if (!path.includes(this)) {
556
+ this.open = false;
557
+ }
558
+ }
559
+ _handleItemClick(e) {
560
+ const target = e.target;
561
+ // Check if the clicked element is a menu-item
562
+ if (target.tagName.toLowerCase() === 'menu-item') {
563
+ // Dispatch custom event with value
564
+ const value = target.value;
565
+ this.dispatchEvent(new CustomEvent('menu-selected', {
566
+ detail: { value },
567
+ bubbles: true,
568
+ composed: true,
569
+ }));
570
+ this.open = false;
571
+ }
572
+ }
573
+ _toggleMenu(e) {
574
+ e.stopPropagation(); // Prevent immediate closing via window listener
575
+ this.open = !this.open;
576
+ }
577
+ render() {
578
+ return b `
579
+ <div class="trigger" @click="${this._toggleMenu}">
580
+ <slot name="trigger"></slot>
581
+ </div>
582
+
583
+ <div class="menu-wrapper">
584
+ <!-- We expect a menu-list to be passed here -->
585
+ <slot></slot>
586
+ </div>
587
+ `;
588
+ }
589
+ }
590
+ Menu.styles = i `
591
+ :host {
592
+ display: inline-block;
593
+ position: relative;
594
+ }
595
+
596
+ .trigger {
597
+ cursor: pointer;
598
+ display: inline-block;
599
+ }
600
+
601
+ .menu-wrapper {
602
+ position: absolute;
603
+ top: 100%;
604
+ z-index: 10;
605
+ opacity: 0;
606
+ transform: scale(0.95);
607
+ transform-origin: top left;
608
+ transition:
609
+ opacity 0.1s ease-out,
610
+ transform 0.1s ease-out;
611
+ pointer-events: none; /* Prevent clicking when hidden */
612
+ margin-top: 4px; /* Slight gap */
613
+ }
614
+
615
+ :host([open]) .menu-wrapper {
616
+ opacity: 1;
617
+ transform: scale(1);
618
+ pointer-events: auto;
619
+ }
620
+
621
+ /* Alignment logic */
622
+ :host([align='end']) .menu-wrapper {
623
+ right: 0;
624
+ transform-origin: top right;
625
+ }
626
+ :host([align='start']) .menu-wrapper {
627
+ left: 0;
628
+ transform-origin: top left;
629
+ }
630
+ `;
631
+ __decorate([
632
+ n({ type: Boolean, reflect: true })
633
+ ], Menu.prototype, "open", void 0);
634
+ __decorate([
635
+ n({ type: String })
636
+ ], Menu.prototype, "align", void 0);
637
+ __decorate([
638
+ e('.menu-wrapper')
639
+ ], Menu.prototype, "menuWrapper", void 0);
640
+
641
+ var css_248z$2 = i`* {
642
+ box-sizing: border-box;
643
+ }
644
+
645
+ .screen-reader-only {
646
+ display: none !important;
647
+ }
648
+
649
+ :host {
650
+ padding-inline: var(--spacing-050);
651
+ }
652
+
653
+ .menu-item {
654
+ position: relative;
655
+ height: 3rem;
656
+ display: flex;
657
+ align-items: center;
658
+ padding-inline: 0.75rem;
659
+ outline: 0;
660
+ font-family: var(--typography-label-large-font-family) !important;
661
+ font-size: var(--typography-label-large-font-size) !important;
662
+ font-weight: var(--typography-label-large-font-weight) !important;
663
+ line-height: var(--typography-label-large-line-height) !important;
664
+ letter-spacing: var(--typography-label-large-letter-spacing) !important;
665
+ }
666
+ .menu-item .menu-item-content {
667
+ display: flex;
668
+ align-items: center;
669
+ z-index: 1;
670
+ width: 100%;
671
+ gap: var(--spacing-100);
672
+ color: var(--_label-text-color);
673
+ opacity: var(--_label-text-opacity, 1);
674
+ --icon-size: var(--button-icon-size, var(--_button-icon-size));
675
+ --icon-color: var(--_label-text-color);
676
+ }
677
+ .menu-item .menu-item-content .slot-container {
678
+ flex: 1;
679
+ }
680
+ .menu-item .background {
681
+ display: block;
682
+ position: absolute;
683
+ left: 0;
684
+ top: 0;
685
+ width: 100%;
686
+ height: 100%;
687
+ background-color: var(--_container-color);
688
+ opacity: var(--_container-opacity, 1);
689
+ border-start-start-radius: var(--_container-shape-start-start);
690
+ border-start-end-radius: var(--_container-shape-start-end);
691
+ border-end-start-radius: var(--_container-shape-end-start);
692
+ border-end-end-radius: var(--_container-shape-end-end);
693
+ corner-shape: var(--_container-corner-shape-variant);
694
+ pointer-events: none;
695
+ }
696
+ .menu-item {
697
+ /*
698
+ Background layers
699
+ */
700
+ }
701
+ .menu-item .focus-ring {
702
+ z-index: 2;
703
+ --focus-ring-container-shape-start-start: var(--_container-shape-start-start);
704
+ --focus-ring-container-shape-start-end: var(--_container-shape-start-end);
705
+ --focus-ring-container-shape-end-start: var(--_container-shape-end-start);
706
+ --focus-ring-container-shape-end-end: var(--_container-shape-end-end);
707
+ --focus-ring-container-shape-variant: var(--_container-corner-shape-variant);
708
+ }
709
+ .menu-item .ripple {
710
+ --ripple-state-opacity: var(--_container-state-opacity, 0);
711
+ --ripple-pressed-color: var(--_container-state-color);
712
+ border-start-start-radius: var(--_container-shape-start-start);
713
+ border-start-end-radius: var(--_container-shape-start-end);
714
+ border-end-start-radius: var(--_container-shape-end-start);
715
+ border-end-end-radius: var(--_container-shape-end-end);
716
+ corner-shape: var(--_container-corner-shape-variant);
717
+ }
718
+
719
+ .menu-item {
720
+ --_container-shape-start-start: var(--menu-item-container-shape-start-start, var(--shape-corner-extra-small));
721
+ --_container-shape-start-end: var(--menu-item-container-shape-start-end, var(--shape-corner-extra-small));
722
+ --_container-shape-end-start: var(--menu-item-container-shape-end-start, var(--shape-corner-extra-small));
723
+ --_container-shape-end-end: var(--menu-item-container-shape-end-end, var(--shape-corner-extra-small));
724
+ --_container-corner-shape-variant: none;
725
+ --_label-text-color: var(--menu-item-label-color);
726
+ --_container-state-color: var(--_label-text-color);
727
+ }
728
+ .menu-item:hover:not(:where(.disabled, .selected)) {
729
+ --_container-state-opacity: 0.08;
730
+ }
731
+ .menu-item.selected {
732
+ --_container-color: var(--menu-item-container-selected-color);
733
+ --_label-text-color: var(--menu-item-label-selected-color);
734
+ --_container-shape-start-start: var(--menu-item-container-shape-start-start, var(--shape-corner-large));
735
+ --_container-shape-start-end: var(--menu-item-container-shape-start-end, var(--shape-corner-large));
736
+ --_container-shape-end-start: var(--menu-item-container-shape-end-start, var(--shape-corner-large));
737
+ --_container-shape-end-end: var(--menu-item-container-shape-end-end, var(--shape-corner-large));
738
+ --_container-corner-shape-variant: none;
739
+ }
740
+ .menu-item.disabled {
741
+ cursor: not-allowed;
742
+ --_container-color: var(--color-on-surface);
743
+ --_container-opacity: 0.1;
744
+ --_label-text-color: var(--color-on-surface);
745
+ --_label-text-opacity: 0.38;
746
+ }
747
+ .menu-item.disabled .ripple {
748
+ display: none;
749
+ }`;
750
+
751
+ var css_248z$1 = i`:host-context(menu-list[variant=standard]) {
752
+ --menu-item-label-color: var(--color-on-surface-variant);
753
+ --menu-item-label-selected-color: var(--color-on-tertiary-container);
754
+ --menu-item-container-selected-color: var(--color-tertiary-container);
755
+ }
756
+
757
+ :host-context(menu-list[variant=vibrant]) {
758
+ --menu-item-label-color: var(--color-on-tertiary-container);
759
+ --menu-item-label-selected-color: var(--color-on-tertiary);
760
+ --menu-item-container-selected-color: var(--color-tertiary);
761
+ }`;
762
+
763
+ class MenuItem extends i$1 {
764
+ constructor() {
765
+ super(...arguments);
766
+ this.disabled = false;
767
+ this.value = '';
768
+ this.selected = false;
769
+ /**
770
+ * Sets or retrieves the window or frame at which to target content.
771
+ */
772
+ this.target = '_self';
773
+ this.variant = 'standard';
774
+ }
775
+ connectedCallback() {
776
+ // eslint-disable-next-line wc/guard-super-call
777
+ super.connectedCallback();
778
+ if (!this.hasAttribute('role')) {
779
+ this.setAttribute('role', 'menuitem');
780
+ }
781
+ }
782
+ // Handle keyboard activation (Enter/Space)
783
+ _handleKeyDown(e) {
784
+ if (e.key === 'Enter' || e.key === ' ') {
785
+ e.preventDefault();
786
+ this.click();
787
+ }
788
+ }
789
+ __isLink() {
790
+ return !!this.href;
791
+ }
792
+ focus() {
793
+ this.menuItemElement?.focus();
794
+ }
795
+ blur() {
796
+ this.menuItemElement?.blur();
797
+ }
798
+ render() {
799
+ const isLink = this.__isLink();
800
+ const cssClasses = {
801
+ 'menu-item': true,
802
+ disabled: this.disabled,
803
+ selected: this.selected,
804
+ };
805
+ if (isLink) {
806
+ return b `<a
807
+ class=${e$1(cssClasses)}
808
+ href=${this.href}
809
+ target=${this.target}
810
+ >
811
+ ${this.renderContent()}
812
+ </a>
813
+ `;
814
+ }
815
+ return b `<div
816
+ class=${e$1(cssClasses)}
817
+ tabindex=${!this.disabled ? 0 : -1}
818
+ @keydown="${this._handleKeyDown}"
819
+ >
820
+ ${this.renderContent()}
821
+ </div>
822
+ `;
823
+ }
824
+ renderContent() {
825
+ return b `
826
+ <focus-ring class="focus-ring" .control=${this} element="menuItemElement"></focus-ring>
827
+ <div class="background"></div>
828
+ <base-ripple class="ripple"></base-ripple>
829
+
830
+ <div class="menu-item-content">
831
+ <slot name="leading-icon"></slot>
832
+ <div class="slot-container">
833
+ <slot></slot>
834
+ </div>
835
+ <slot
836
+ name="trailing-supporting-text"
837
+ ></slot>
838
+ </div>
839
+ `;
840
+ }
841
+ }
842
+ MenuItem.styles = [css_248z$2, css_248z$1];
843
+ __decorate([
844
+ n({ type: Boolean, reflect: true })
845
+ ], MenuItem.prototype, "disabled", void 0);
846
+ __decorate([
847
+ n({ type: String })
848
+ ], MenuItem.prototype, "value", void 0);
849
+ __decorate([
850
+ n({ type: Boolean })
851
+ ], MenuItem.prototype, "selected", void 0);
852
+ __decorate([
853
+ n({ reflect: true })
854
+ ], MenuItem.prototype, "href", void 0);
855
+ __decorate([
856
+ n()
857
+ ], MenuItem.prototype, "target", void 0);
858
+ __decorate([
859
+ n({ type: String, reflect: true })
860
+ ], MenuItem.prototype, "variant", void 0);
861
+ __decorate([
862
+ e('.menu-item')
863
+ ], MenuItem.prototype, "menuItemElement", void 0);
864
+
865
+ var css_248z = i`* {
866
+ box-sizing: border-box;
867
+ }
868
+
869
+ .screen-reader-only {
870
+ display: none !important;
871
+ }
872
+
873
+ .menu-list {
874
+ display: flex;
875
+ position: relative;
876
+ min-width: 112px;
877
+ padding-block: var(--spacing-050);
878
+ }
879
+ .menu-list .menu-list-content {
880
+ display: flex;
881
+ flex-direction: column;
882
+ gap: var(--spacing-050);
883
+ z-index: 1;
884
+ }
885
+ .menu-list .menu-list-content ::slotted(:first-child) {
886
+ --menu-item-container-shape-start-start: var(--shape-corner-medium);
887
+ --menu-item-container-shape-start-end: var(--shape-corner-medium);
888
+ }
889
+ .menu-list .menu-list-content ::slotted(:last-child) {
890
+ --menu-item-container-shape-end-start: var(--shape-corner-medium);
891
+ --menu-item-container-shape-end-end: var(--shape-corner-medium);
892
+ }
893
+ .menu-list .menu-list-content ::slotted(base-divider) {
894
+ --divider-spacing: var(--spacing-100);
895
+ padding-inline: var(--spacing-050);
896
+ }
897
+ .menu-list .background {
898
+ display: block;
899
+ position: absolute;
900
+ left: 0;
901
+ top: 0;
902
+ width: 100%;
903
+ height: 100%;
904
+ background-color: var(--_container-color);
905
+ opacity: var(--_container-opacity, 1);
906
+ border-start-start-radius: var(--_container-shape-start-start);
907
+ border-start-end-radius: var(--_container-shape-start-end);
908
+ border-end-start-radius: var(--_container-shape-end-start);
909
+ border-end-end-radius: var(--_container-shape-end-end);
910
+ pointer-events: none;
911
+ }
912
+ .menu-list .elevation {
913
+ --elevation-level: 2;
914
+ transition-duration: 280ms;
915
+ --elevation-container-shape-start-start: var(--_container-shape-start-start);
916
+ --elevation-container-shape-start-end: var(--_container-shape-start-end);
917
+ --elevation-container-shape-end-start: var(--_container-shape-end-start);
918
+ --elevation-container-shape-end-end: var(--_container-shape-end-end);
919
+ --elevation-container-shape-variant: var(--_container-corner-shape-variant);
920
+ }
921
+
922
+ .menu-list {
923
+ --_container-shape-start-start: var(--shape-corner-large);
924
+ --_container-shape-start-end: var(--shape-corner-large);
925
+ --_container-shape-end-start: var(--shape-corner-large);
926
+ --_container-shape-end-end: var(--shape-corner-large);
927
+ }
928
+ .menu-list.variant-standard {
929
+ --_container-color: var(--color-surface-container);
930
+ }
931
+ .menu-list.variant-vibrant {
932
+ --_container-color: var(--color-tertiary-container);
933
+ }`;
934
+
935
+ class MenuList extends i$1 {
936
+ constructor() {
937
+ super(...arguments);
938
+ this.variant = 'standard';
939
+ }
940
+ connectedCallback() {
941
+ // eslint-disable-next-line wc/guard-super-call
942
+ super.connectedCallback();
943
+ this.setAttribute('role', 'menu');
944
+ }
945
+ render() {
946
+ return b `<div
947
+ class=${e$1({
948
+ 'menu-list': true,
949
+ [`variant-${this.variant}`]: true,
950
+ })}
951
+ >
952
+ <div class="background"></div>
953
+ <base-elevation class="elevation"></base-elevation>
954
+
955
+ <div class="menu-list-content">
956
+ <slot></slot>
957
+ </div>
958
+ </div>`;
959
+ }
960
+ }
961
+ MenuList.styles = [css_248z];
962
+ __decorate([
963
+ n({ type: String, reflect: true })
964
+ ], MenuList.prototype, "variant", void 0);
40
965
 
41
966
  class LoaderUtils {
42
967
  constructor(loaderConfig) {