@redvars/peacock 3.2.7 → 3.2.9

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