@openvoxproject/voxblocks 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +66 -0
  3. package/dist/cdn/voxblocks.css +1 -0
  4. package/dist/cdn/voxblocks.js +5057 -0
  5. package/dist/types/components/accordion/vox-accordion.d.ts +32 -0
  6. package/dist/types/components/alert/vox-alert.d.ts +23 -0
  7. package/dist/types/components/avatar/vox-avatar.d.ts +18 -0
  8. package/dist/types/components/badge/vox-badge.d.ts +17 -0
  9. package/dist/types/components/billboard/vox-billboard.d.ts +22 -0
  10. package/dist/types/components/breadcrumbs/vox-breadcrumbs.d.ts +24 -0
  11. package/dist/types/components/button/vox-button.d.ts +24 -0
  12. package/dist/types/components/calendar-tile/vox-calendar-tile.d.ts +18 -0
  13. package/dist/types/components/callout/vox-callout.d.ts +20 -0
  14. package/dist/types/components/card/vox-card.d.ts +28 -0
  15. package/dist/types/components/checkbox/vox-checkbox.d.ts +20 -0
  16. package/dist/types/components/cta/vox-cta.d.ts +17 -0
  17. package/dist/types/components/cta-band/vox-cta-band.d.ts +22 -0
  18. package/dist/types/components/dialog/vox-dialog.d.ts +30 -0
  19. package/dist/types/components/disclosure/vox-disclosure.d.ts +19 -0
  20. package/dist/types/components/dropdown/vox-dropdown.d.ts +29 -0
  21. package/dist/types/components/empty-state/vox-empty-state.d.ts +18 -0
  22. package/dist/types/components/file-input/vox-file-input.d.ts +22 -0
  23. package/dist/types/components/footer/vox-footer.d.ts +28 -0
  24. package/dist/types/components/grid/vox-grid.d.ts +22 -0
  25. package/dist/types/components/header/vox-header.d.ts +23 -0
  26. package/dist/types/components/hero/vox-hero.d.ts +21 -0
  27. package/dist/types/components/input/vox-input.d.ts +24 -0
  28. package/dist/types/components/input-group/vox-input-group.d.ts +25 -0
  29. package/dist/types/components/link-hub/vox-link-hub.d.ts +27 -0
  30. package/dist/types/components/loader/vox-loader.d.ts +16 -0
  31. package/dist/types/components/pagination/vox-pagination.d.ts +25 -0
  32. package/dist/types/components/quote/vox-quote.d.ts +18 -0
  33. package/dist/types/components/radio/vox-radio-group.d.ts +23 -0
  34. package/dist/types/components/radio/vox-radio.d.ts +21 -0
  35. package/dist/types/components/select/vox-select.d.ts +27 -0
  36. package/dist/types/components/series-nav/vox-series-nav.d.ts +18 -0
  37. package/dist/types/components/sidenav/vox-sidenav.d.ts +50 -0
  38. package/dist/types/components/sponsor/vox-sponsor.d.ts +35 -0
  39. package/dist/types/components/stat/vox-stat.d.ts +17 -0
  40. package/dist/types/components/step-indicator/vox-step-indicator.d.ts +28 -0
  41. package/dist/types/components/subnav/vox-subnav.d.ts +18 -0
  42. package/dist/types/components/switch/vox-switch.d.ts +20 -0
  43. package/dist/types/components/tabs/vox-tabs.d.ts +57 -0
  44. package/dist/types/components/textarea/vox-textarea.d.ts +22 -0
  45. package/dist/types/components/theme-toggle/vox-theme-toggle.d.ts +35 -0
  46. package/dist/types/components/timeline/vox-timeline.d.ts +27 -0
  47. package/dist/types/index.d.ts +51 -0
  48. package/dist/types/internal/field.d.ts +27 -0
  49. package/dist/voxblocks.css +1 -0
  50. package/dist/voxblocks.js +4350 -0
  51. package/package.json +59 -0
  52. package/src/components/accordion/vox-accordion.ts +150 -0
  53. package/src/components/alert/vox-alert.ts +155 -0
  54. package/src/components/avatar/vox-avatar.ts +80 -0
  55. package/src/components/badge/vox-badge.ts +67 -0
  56. package/src/components/billboard/vox-billboard.ts +109 -0
  57. package/src/components/breadcrumbs/vox-breadcrumbs.ts +68 -0
  58. package/src/components/button/vox-button.ts +165 -0
  59. package/src/components/calendar-tile/vox-calendar-tile.ts +74 -0
  60. package/src/components/callout/vox-callout.ts +97 -0
  61. package/src/components/card/vox-card.ts +147 -0
  62. package/src/components/checkbox/vox-checkbox.ts +101 -0
  63. package/src/components/cta/vox-cta.ts +69 -0
  64. package/src/components/cta-band/vox-cta-band.ts +105 -0
  65. package/src/components/dialog/vox-dialog.ts +176 -0
  66. package/src/components/disclosure/vox-disclosure.ts +98 -0
  67. package/src/components/dropdown/vox-dropdown.ts +186 -0
  68. package/src/components/empty-state/vox-empty-state.ts +76 -0
  69. package/src/components/file-input/vox-file-input.ts +127 -0
  70. package/src/components/footer/vox-footer.ts +109 -0
  71. package/src/components/grid/vox-grid.ts +54 -0
  72. package/src/components/header/vox-header.ts +109 -0
  73. package/src/components/hero/vox-hero.ts +100 -0
  74. package/src/components/input/vox-input.ts +72 -0
  75. package/src/components/input-group/vox-input-group.ts +85 -0
  76. package/src/components/link-hub/vox-link-hub.ts +108 -0
  77. package/src/components/loader/vox-loader.ts +82 -0
  78. package/src/components/pagination/vox-pagination.ts +76 -0
  79. package/src/components/quote/vox-quote.ts +82 -0
  80. package/src/components/radio/vox-radio-group.ts +117 -0
  81. package/src/components/radio/vox-radio.ts +102 -0
  82. package/src/components/select/vox-select.ts +89 -0
  83. package/src/components/series-nav/vox-series-nav.ts +94 -0
  84. package/src/components/sidenav/vox-sidenav.ts +192 -0
  85. package/src/components/sponsor/vox-sponsor.ts +187 -0
  86. package/src/components/stat/vox-stat.ts +55 -0
  87. package/src/components/step-indicator/vox-step-indicator.ts +152 -0
  88. package/src/components/subnav/vox-subnav.ts +64 -0
  89. package/src/components/switch/vox-switch.ts +90 -0
  90. package/src/components/tabs/vox-tabs.ts +201 -0
  91. package/src/components/textarea/vox-textarea.ts +75 -0
  92. package/src/components/theme-toggle/vox-theme-toggle.ts +164 -0
  93. package/src/components/timeline/vox-timeline.ts +100 -0
  94. package/src/index.ts +65 -0
  95. package/src/internal/field.ts +165 -0
  96. package/src/styles/utilities.css +409 -0
  97. package/src/tokens/tokens.css +161 -0
@@ -0,0 +1,4350 @@
1
+ import { css as c, LitElement as v, html as l, nothing as p } from "lit";
2
+ import { property as n, customElement as d, state as to, query as qe } from "lit/decorators.js";
3
+ import { classMap as po } from "lit/directives/class-map.js";
4
+ import { ifDefined as j } from "lit/directives/if-defined.js";
5
+ import { live as ro } from "lit/directives/live.js";
6
+ var ho = Object.defineProperty, xo = Object.getOwnPropertyDescriptor, O = (t, o, a, r) => {
7
+ for (var e = r > 1 ? void 0 : r ? xo(o, a) : o, s = t.length - 1, i; s >= 0; s--)
8
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
9
+ return r && e && ho(o, a, e), e;
10
+ };
11
+ let x = class extends v {
12
+ constructor() {
13
+ super(...arguments), this.variant = "brand", this.size = "md", this.type = "button", this.disabled = !1;
14
+ }
15
+ render() {
16
+ const t = po({
17
+ button: !0,
18
+ [this.variant]: !0,
19
+ [this.size]: !0
20
+ });
21
+ return this.href !== void 0 && !this.disabled ? l`
22
+ <a
23
+ class=${t}
24
+ href=${this.href}
25
+ target=${j(this.target)}
26
+ rel=${j(this.target === "_blank" ? "noreferrer" : void 0)}
27
+ >
28
+ <slot></slot>
29
+ </a>
30
+ ` : l`
31
+ <button class=${t} type=${this.type} ?disabled=${this.disabled}>
32
+ <slot></slot>
33
+ </button>
34
+ `;
35
+ }
36
+ };
37
+ x.styles = c`
38
+ :host {
39
+ display: inline-block;
40
+ }
41
+
42
+ :host([disabled]) {
43
+ pointer-events: none;
44
+ }
45
+
46
+ .button {
47
+ display: inline-flex;
48
+ align-items: center;
49
+ justify-content: center;
50
+ gap: var(--vox-space-2);
51
+ border: 1px solid transparent;
52
+ border-radius: var(--vox-radius-full);
53
+ font-family: var(--vox-font-family-base);
54
+ font-weight: 600;
55
+ line-height: 1;
56
+ text-decoration: none;
57
+ cursor: pointer;
58
+ white-space: nowrap;
59
+ transition:
60
+ color var(--vox-transition-base),
61
+ background-color var(--vox-transition-base),
62
+ border-color var(--vox-transition-base);
63
+ }
64
+
65
+ .button:focus-visible {
66
+ outline: 2px solid var(--vox-color-brand-1);
67
+ outline-offset: 2px;
68
+ }
69
+
70
+ .button:disabled {
71
+ opacity: 0.5;
72
+ cursor: not-allowed;
73
+ }
74
+
75
+ .sm {
76
+ font-size: 12px;
77
+ padding: 0 var(--vox-space-3);
78
+ height: 28px;
79
+ }
80
+
81
+ .md {
82
+ font-size: 14px;
83
+ padding: 0 20px;
84
+ height: 38px;
85
+ }
86
+
87
+ .lg {
88
+ font-size: 16px;
89
+ padding: 0 var(--vox-space-6);
90
+ height: 48px;
91
+ }
92
+
93
+ .brand {
94
+ background-color: var(--vox-color-brand-3);
95
+ color: var(--vox-color-text-inverse);
96
+ }
97
+
98
+ .brand:hover:not(:disabled) {
99
+ background-color: var(--vox-color-brand-2);
100
+ }
101
+
102
+ .alt {
103
+ background-color: var(--vox-color-bg-soft);
104
+ color: var(--vox-color-text-1);
105
+ border-color: var(--vox-color-divider);
106
+ }
107
+
108
+ .alt:hover:not(:disabled) {
109
+ border-color: var(--vox-color-brand-1);
110
+ color: var(--vox-color-brand-1);
111
+ }
112
+
113
+ .danger {
114
+ background-color: var(--vox-color-danger-3);
115
+ color: var(--vox-color-text-inverse);
116
+ }
117
+
118
+ .danger:hover:not(:disabled) {
119
+ background-color: var(--vox-color-danger-2);
120
+ }
121
+
122
+ .ghost {
123
+ background-color: transparent;
124
+ color: var(--vox-color-brand-1);
125
+ }
126
+
127
+ .ghost:hover:not(:disabled) {
128
+ background-color: var(--vox-color-brand-soft);
129
+ }
130
+
131
+ /* Corner flattening when placed inside a <vox-input-group>. */
132
+ :host([data-vox-group]) .button {
133
+ height: 100%;
134
+ border-radius: 0;
135
+ }
136
+
137
+ :host([data-vox-group='start']) .button {
138
+ border-radius: var(--vox-radius-md) 0 0 var(--vox-radius-md);
139
+ }
140
+
141
+ :host([data-vox-group='end']) .button {
142
+ border-radius: 0 var(--vox-radius-md) var(--vox-radius-md) 0;
143
+ }
144
+ `;
145
+ O([
146
+ n()
147
+ ], x.prototype, "variant", 2);
148
+ O([
149
+ n()
150
+ ], x.prototype, "size", 2);
151
+ O([
152
+ n()
153
+ ], x.prototype, "href", 2);
154
+ O([
155
+ n()
156
+ ], x.prototype, "target", 2);
157
+ O([
158
+ n()
159
+ ], x.prototype, "type", 2);
160
+ O([
161
+ n({ type: Boolean, reflect: !0 })
162
+ ], x.prototype, "disabled", 2);
163
+ x = O([
164
+ d("vox-button")
165
+ ], x);
166
+ var uo = Object.defineProperty, fo = Object.getOwnPropertyDescriptor, Le = (t, o, a, r) => {
167
+ for (var e = r > 1 ? void 0 : r ? fo(o, a) : o, s = t.length - 1, i; s >= 0; s--)
168
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
169
+ return r && e && uo(o, a, e), e;
170
+ };
171
+ let A = class extends v {
172
+ constructor() {
173
+ super(...arguments), this.href = "#";
174
+ }
175
+ render() {
176
+ return l`
177
+ <a href=${this.href} target=${this.target ?? ""}>
178
+ <slot></slot>
179
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
180
+ <path d="M5 12h14" />
181
+ <path d="m13 6 6 6-6 6" />
182
+ </svg>
183
+ </a>
184
+ `;
185
+ }
186
+ };
187
+ A.styles = c`
188
+ :host {
189
+ display: inline-block;
190
+ font-family: var(--vox-font-family-base);
191
+ }
192
+
193
+ a {
194
+ display: inline-flex;
195
+ align-items: center;
196
+ gap: var(--vox-space-2);
197
+ color: var(--vox-color-brand-1);
198
+ font-size: 15px;
199
+ font-weight: 600;
200
+ text-decoration: none;
201
+ }
202
+
203
+ a:hover {
204
+ color: var(--vox-color-brand-2);
205
+ text-decoration: underline;
206
+ }
207
+
208
+ a:focus-visible {
209
+ outline: 2px solid var(--vox-color-brand-1);
210
+ outline-offset: 2px;
211
+ border-radius: var(--vox-radius-sm);
212
+ }
213
+
214
+ svg {
215
+ width: 16px;
216
+ height: 16px;
217
+ transition: transform var(--vox-transition-fast);
218
+ }
219
+
220
+ a:hover svg {
221
+ transform: translateX(3px);
222
+ }
223
+ `;
224
+ Le([
225
+ n()
226
+ ], A.prototype, "href", 2);
227
+ Le([
228
+ n()
229
+ ], A.prototype, "target", 2);
230
+ A = Le([
231
+ d("vox-cta")
232
+ ], A);
233
+ var bo = Object.defineProperty, go = Object.getOwnPropertyDescriptor, $e = (t, o, a, r) => {
234
+ for (var e = r > 1 ? void 0 : r ? go(o, a) : o, s = t.length - 1, i; s >= 0; s--)
235
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
236
+ return r && e && bo(o, a, e), e;
237
+ };
238
+ const oo = "vox-theme", ve = "data-vox-theme";
239
+ let D = class extends v {
240
+ constructor() {
241
+ super(...arguments), this.lightLabel = "Switch to dark theme", this.darkLabel = "Switch to light theme", this.dark = !1, this.media = window.matchMedia("(prefers-color-scheme: dark)"), this.handleSystemChange = (t) => {
242
+ localStorage.getItem(oo) || document.documentElement.setAttribute(ve, t.matches ? "dark" : "light");
243
+ };
244
+ }
245
+ connectedCallback() {
246
+ super.connectedCallback(), this.syncFromDocument(), this.observer = new MutationObserver(() => this.syncFromDocument()), this.observer.observe(document.documentElement, {
247
+ attributes: !0,
248
+ attributeFilter: [ve]
249
+ }), this.media.addEventListener("change", this.handleSystemChange);
250
+ }
251
+ disconnectedCallback() {
252
+ var t;
253
+ super.disconnectedCallback(), (t = this.observer) == null || t.disconnect(), this.media.removeEventListener("change", this.handleSystemChange);
254
+ }
255
+ syncFromDocument() {
256
+ const t = document.documentElement.getAttribute(ve) === "dark";
257
+ this.dark = t, this.toggleAttribute("dark", t);
258
+ }
259
+ handleClick() {
260
+ const t = this.dark ? "light" : "dark";
261
+ document.documentElement.setAttribute(ve, t), localStorage.setItem(oo, t), this.dispatchEvent(
262
+ new CustomEvent("vox-theme-change", {
263
+ detail: { theme: t },
264
+ bubbles: !0,
265
+ composed: !0
266
+ })
267
+ );
268
+ }
269
+ render() {
270
+ const t = this.dark ? this.darkLabel : this.lightLabel;
271
+ return l`
272
+ <button
273
+ type="button"
274
+ role="switch"
275
+ aria-checked=${this.dark}
276
+ aria-label=${t}
277
+ title=${t}
278
+ @click=${this.handleClick}
279
+ >
280
+ <span class="track">
281
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
282
+ <circle cx="12" cy="12" r="4" />
283
+ <path d="M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41" />
284
+ </svg>
285
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
286
+ <path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79Z" />
287
+ </svg>
288
+ <span class="thumb"></span>
289
+ </span>
290
+ </button>
291
+ `;
292
+ }
293
+ };
294
+ D.styles = c`
295
+ :host {
296
+ display: inline-flex;
297
+ }
298
+
299
+ button {
300
+ display: inline-flex;
301
+ align-items: center;
302
+ border: none;
303
+ background: none;
304
+ padding: 0;
305
+ cursor: pointer;
306
+ -webkit-tap-highlight-color: transparent;
307
+ }
308
+
309
+ button:focus-visible {
310
+ outline: 2px solid var(--vox-color-brand-1);
311
+ outline-offset: 2px;
312
+ border-radius: var(--vox-radius-full);
313
+ }
314
+
315
+ .track {
316
+ position: relative;
317
+ display: inline-flex;
318
+ align-items: center;
319
+ justify-content: space-between;
320
+ box-sizing: border-box;
321
+ width: 44px;
322
+ height: 24px;
323
+ padding: 0 5px;
324
+ border-radius: var(--vox-radius-full);
325
+ background-color: var(--vox-color-bg-soft);
326
+ border: 1px solid var(--vox-color-divider);
327
+ }
328
+
329
+ .track svg {
330
+ position: relative;
331
+ width: 13px;
332
+ height: 13px;
333
+ flex: none;
334
+ color: var(--vox-color-text-3);
335
+ }
336
+
337
+ .thumb {
338
+ position: absolute;
339
+ top: 1px;
340
+ left: 1px;
341
+ width: 20px;
342
+ height: 20px;
343
+ border-radius: 50%;
344
+ background-color: var(--vox-color-bg-elv);
345
+ box-shadow: var(--vox-shadow-1);
346
+ transition: transform var(--vox-transition-base);
347
+ }
348
+
349
+ :host([dark]) .thumb {
350
+ transform: translateX(20px);
351
+ }
352
+ `;
353
+ $e([
354
+ n({ attribute: "light-label" })
355
+ ], D.prototype, "lightLabel", 2);
356
+ $e([
357
+ n({ attribute: "dark-label" })
358
+ ], D.prototype, "darkLabel", 2);
359
+ $e([
360
+ to()
361
+ ], D.prototype, "dark", 2);
362
+ D = $e([
363
+ d("vox-theme-toggle")
364
+ ], D);
365
+ var mo = Object.defineProperty, te = (t, o, a, r) => {
366
+ for (var e = void 0, s = t.length - 1, i; s >= 0; s--)
367
+ (i = t[s]) && (e = i(o, a, e) || e);
368
+ return e && mo(o, a, e), e;
369
+ };
370
+ const Ze = class Ze extends v {
371
+ constructor() {
372
+ super(), this.name = "", this.label = "", this.note = "", this.disabled = !1, this.required = !1, this.internals = this.attachInternals();
373
+ }
374
+ get form() {
375
+ return this.internals.form;
376
+ }
377
+ get validity() {
378
+ return this.internals.validity;
379
+ }
380
+ get validationMessage() {
381
+ return this.internals.validationMessage;
382
+ }
383
+ checkValidity() {
384
+ return this.internals.checkValidity();
385
+ }
386
+ reportValidity() {
387
+ return this.internals.reportValidity();
388
+ }
389
+ /** Mirror a native inner control's validity onto the host element. */
390
+ syncValidity(o) {
391
+ this.internals.setValidity(o.validity, o.validationMessage, o);
392
+ }
393
+ renderLabel(o) {
394
+ return this.label ? l`
395
+ <label class="label" for=${o}>
396
+ ${this.label}${this.required ? l`<span class="required-mark" aria-hidden="true"> *</span>` : p}
397
+ </label>
398
+ ` : p;
399
+ }
400
+ renderNote() {
401
+ return this.note ? l`<p class="note">${this.note}</p>` : p;
402
+ }
403
+ };
404
+ Ze.formAssociated = !0;
405
+ let h = Ze;
406
+ te([
407
+ n()
408
+ ], h.prototype, "name");
409
+ te([
410
+ n()
411
+ ], h.prototype, "label");
412
+ te([
413
+ n()
414
+ ], h.prototype, "note");
415
+ te([
416
+ n({ type: Boolean, reflect: !0 })
417
+ ], h.prototype, "disabled");
418
+ te([
419
+ n({ type: Boolean, reflect: !0 })
420
+ ], h.prototype, "required");
421
+ const re = c`
422
+ :host {
423
+ display: block;
424
+ font-family: var(--vox-font-family-base);
425
+ }
426
+
427
+ :host([disabled]) {
428
+ opacity: 0.6;
429
+ pointer-events: none;
430
+ }
431
+
432
+ .field {
433
+ display: flex;
434
+ flex-direction: column;
435
+ gap: var(--vox-space-1);
436
+ }
437
+
438
+ .label {
439
+ font-size: 14px;
440
+ font-weight: 600;
441
+ color: var(--vox-color-text-1);
442
+ }
443
+
444
+ .required-mark {
445
+ color: var(--vox-color-danger-1);
446
+ }
447
+
448
+ .note {
449
+ margin: 0;
450
+ font-size: 12px;
451
+ color: var(--vox-color-text-2);
452
+ }
453
+
454
+ .control {
455
+ box-sizing: border-box;
456
+ width: 100%;
457
+ background-color: var(--vox-color-bg);
458
+ border: 1px solid var(--vox-color-border);
459
+ border-radius: var(--vox-radius-md);
460
+ color: var(--vox-color-text-1);
461
+ font-family: inherit;
462
+ font-size: 14px;
463
+ line-height: 1.5;
464
+ padding: var(--vox-space-2) var(--vox-space-3);
465
+ transition:
466
+ border-color var(--vox-transition-fast),
467
+ box-shadow var(--vox-transition-fast);
468
+ }
469
+
470
+ .control:focus {
471
+ outline: none;
472
+ border-color: var(--vox-color-brand-1);
473
+ box-shadow: 0 0 0 3px var(--vox-color-brand-soft);
474
+ }
475
+
476
+ /* Corner flattening when placed inside a <vox-input-group>. */
477
+ :host([data-vox-group]) .control {
478
+ border-radius: 0;
479
+ }
480
+
481
+ :host([data-vox-group='start']) .control {
482
+ border-radius: var(--vox-radius-md) 0 0 var(--vox-radius-md);
483
+ }
484
+
485
+ :host([data-vox-group='end']) .control {
486
+ border-radius: 0 var(--vox-radius-md) var(--vox-radius-md) 0;
487
+ }
488
+ `, ao = c`
489
+ :host {
490
+ display: block;
491
+ font-family: var(--vox-font-family-base);
492
+ }
493
+
494
+ :host([disabled]) {
495
+ opacity: 0.6;
496
+ pointer-events: none;
497
+ }
498
+
499
+ .check {
500
+ display: inline-flex;
501
+ align-items: flex-start;
502
+ gap: var(--vox-space-2);
503
+ cursor: pointer;
504
+ font-size: 14px;
505
+ line-height: 1.5;
506
+ color: var(--vox-color-text-1);
507
+ }
508
+
509
+ input {
510
+ position: absolute;
511
+ width: 1px;
512
+ height: 1px;
513
+ opacity: 0;
514
+ margin: 0;
515
+ }
516
+ `;
517
+ var yo = Object.defineProperty, wo = Object.getOwnPropertyDescriptor, Ne = (t, o, a, r) => {
518
+ for (var e = r > 1 ? void 0 : r ? wo(o, a) : o, s = t.length - 1, i; s >= 0; s--)
519
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
520
+ return r && e && yo(o, a, e), e;
521
+ };
522
+ let q = class extends h {
523
+ constructor() {
524
+ super(...arguments), this.checked = !1, this.value = "on";
525
+ }
526
+ formResetCallback() {
527
+ this.checked = !1;
528
+ }
529
+ updated() {
530
+ this.internals.setFormValue(this.checked ? this.value : null), this.internals.setValidity(
531
+ this.required && !this.checked ? { valueMissing: !0 } : {},
532
+ "Please check this box.",
533
+ this.renderRoot.querySelector("input") ?? void 0
534
+ );
535
+ }
536
+ handleChange(t) {
537
+ this.checked = t.target.checked, this.dispatchEvent(new Event("change", { bubbles: !0 }));
538
+ }
539
+ render() {
540
+ return l`
541
+ <label class="check">
542
+ <input
543
+ type="checkbox"
544
+ .checked=${this.checked}
545
+ ?disabled=${this.disabled}
546
+ @change=${this.handleChange}
547
+ />
548
+ <span class="box" aria-hidden="true">
549
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="4" stroke-linecap="round" stroke-linejoin="round">
550
+ <path d="m4 12 5 5L20 6" />
551
+ </svg>
552
+ </span>
553
+ <span class="text"><slot></slot></span>
554
+ </label>
555
+ `;
556
+ }
557
+ };
558
+ q.styles = [
559
+ ao,
560
+ c`
561
+ .box {
562
+ flex: none;
563
+ display: flex;
564
+ align-items: center;
565
+ justify-content: center;
566
+ width: 18px;
567
+ height: 18px;
568
+ margin-top: 2px;
569
+ border: 1px solid var(--vox-color-border);
570
+ border-radius: var(--vox-radius-sm);
571
+ background-color: var(--vox-color-bg);
572
+ color: var(--vox-color-text-inverse);
573
+ transition:
574
+ background-color var(--vox-transition-fast),
575
+ border-color var(--vox-transition-fast);
576
+ }
577
+
578
+ .box svg {
579
+ width: 12px;
580
+ height: 12px;
581
+ opacity: 0;
582
+ }
583
+
584
+ input:checked + .box {
585
+ background-color: var(--vox-color-brand-3);
586
+ border-color: var(--vox-color-brand-3);
587
+ }
588
+
589
+ input:checked + .box svg {
590
+ opacity: 1;
591
+ }
592
+
593
+ input:focus-visible + .box {
594
+ outline: 2px solid var(--vox-color-brand-1);
595
+ outline-offset: 2px;
596
+ }
597
+ `
598
+ ];
599
+ Ne([
600
+ n({ type: Boolean, reflect: !0 })
601
+ ], q.prototype, "checked", 2);
602
+ Ne([
603
+ n()
604
+ ], q.prototype, "value", 2);
605
+ q = Ne([
606
+ d("vox-checkbox")
607
+ ], q);
608
+ var $o = Object.defineProperty, _o = Object.getOwnPropertyDescriptor, V = (t, o, a, r) => {
609
+ for (var e = r > 1 ? void 0 : r ? _o(o, a) : o, s = t.length - 1, i; s >= 0; s--)
610
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
611
+ return r && e && $o(o, a, e), e;
612
+ };
613
+ let u = class extends h {
614
+ constructor() {
615
+ super(...arguments), this.multiple = !1, this.buttonLabel = "Choose a file", this.fileNames = [];
616
+ }
617
+ formResetCallback() {
618
+ this.fileNames = [], this.inputEl && (this.inputEl.value = ""), this.internals.setFormValue(null);
619
+ }
620
+ handleChange() {
621
+ const t = [...this.inputEl.files ?? []];
622
+ this.fileNames = t.map((a) => a.name);
623
+ const o = new FormData();
624
+ for (const a of t) o.append(this.name, a);
625
+ this.internals.setFormValue(t.length > 0 ? o : null), this.internals.setValidity(
626
+ this.required && t.length === 0 ? { valueMissing: !0 } : {},
627
+ "Please select a file.",
628
+ this.inputEl
629
+ ), this.dispatchEvent(new Event("change", { bubbles: !0 }));
630
+ }
631
+ render() {
632
+ return l`
633
+ <div class="field">
634
+ ${this.renderLabel("file")}
635
+ <label>
636
+ <input
637
+ id="file"
638
+ type="file"
639
+ accept=${j(this.accept)}
640
+ ?multiple=${this.multiple}
641
+ ?disabled=${this.disabled}
642
+ @change=${this.handleChange}
643
+ />
644
+ <span class="picker">
645
+ <span class="button">${this.buttonLabel}</span>
646
+ <span class="names">
647
+ ${this.fileNames.length > 0 ? this.fileNames.join(", ") : "No file selected"}
648
+ </span>
649
+ </span>
650
+ </label>
651
+ ${this.renderNote()}
652
+ </div>
653
+ `;
654
+ }
655
+ };
656
+ u.styles = [
657
+ re,
658
+ c`
659
+ input {
660
+ position: absolute;
661
+ width: 1px;
662
+ height: 1px;
663
+ opacity: 0;
664
+ }
665
+
666
+ .picker {
667
+ display: flex;
668
+ align-items: center;
669
+ gap: var(--vox-space-3);
670
+ flex-wrap: wrap;
671
+ }
672
+
673
+ .button {
674
+ display: inline-flex;
675
+ align-items: center;
676
+ padding: 0 var(--vox-space-4);
677
+ height: 34px;
678
+ background-color: var(--vox-color-bg-soft);
679
+ border: 1px dashed var(--vox-color-border);
680
+ border-radius: var(--vox-radius-md);
681
+ color: var(--vox-color-text-1);
682
+ font-size: 14px;
683
+ font-weight: 600;
684
+ cursor: pointer;
685
+ transition:
686
+ border-color var(--vox-transition-fast),
687
+ color var(--vox-transition-fast);
688
+ }
689
+
690
+ .button:hover {
691
+ border-color: var(--vox-color-brand-1);
692
+ color: var(--vox-color-brand-1);
693
+ }
694
+
695
+ input:focus-visible ~ .picker .button {
696
+ outline: 2px solid var(--vox-color-brand-1);
697
+ outline-offset: 2px;
698
+ }
699
+
700
+ .names {
701
+ font-size: 13px;
702
+ color: var(--vox-color-text-2);
703
+ }
704
+ `
705
+ ];
706
+ V([
707
+ n()
708
+ ], u.prototype, "accept", 2);
709
+ V([
710
+ n({ type: Boolean })
711
+ ], u.prototype, "multiple", 2);
712
+ V([
713
+ n({ attribute: "button-label" })
714
+ ], u.prototype, "buttonLabel", 2);
715
+ V([
716
+ to()
717
+ ], u.prototype, "fileNames", 2);
718
+ V([
719
+ qe("input")
720
+ ], u.prototype, "inputEl", 2);
721
+ u = V([
722
+ d("vox-file-input")
723
+ ], u);
724
+ var Oo = Object.defineProperty, Po = Object.getOwnPropertyDescriptor, B = (t, o, a, r) => {
725
+ for (var e = r > 1 ? void 0 : r ? Po(o, a) : o, s = t.length - 1, i; s >= 0; s--)
726
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
727
+ return r && e && Oo(o, a, e), e;
728
+ };
729
+ let f = class extends h {
730
+ constructor() {
731
+ super(...arguments), this.type = "text", this.value = "", this.readonly = !1;
732
+ }
733
+ formResetCallback() {
734
+ this.value = "";
735
+ }
736
+ updated() {
737
+ this.internals.setFormValue(this.value);
738
+ const t = this.renderRoot.querySelector("input");
739
+ t && this.syncValidity(t);
740
+ }
741
+ focus(t) {
742
+ var o;
743
+ (o = this.renderRoot.querySelector("input")) == null || o.focus(t);
744
+ }
745
+ handleInput(t) {
746
+ this.value = t.target.value;
747
+ }
748
+ handleChange() {
749
+ this.dispatchEvent(new Event("change", { bubbles: !0 }));
750
+ }
751
+ render() {
752
+ return l`
753
+ <div class="field">
754
+ ${this.renderLabel("input")}
755
+ <input
756
+ id="input"
757
+ class="control"
758
+ type=${this.type}
759
+ .value=${ro(this.value)}
760
+ placeholder=${j(this.placeholder)}
761
+ autocomplete=${j(this.autocomplete)}
762
+ ?required=${this.required}
763
+ ?readonly=${this.readonly}
764
+ ?disabled=${this.disabled}
765
+ aria-label=${this.label ? p : "text input"}
766
+ @input=${this.handleInput}
767
+ @change=${this.handleChange}
768
+ />
769
+ ${this.renderNote()}
770
+ </div>
771
+ `;
772
+ }
773
+ };
774
+ f.styles = re;
775
+ B([
776
+ n()
777
+ ], f.prototype, "type", 2);
778
+ B([
779
+ n()
780
+ ], f.prototype, "value", 2);
781
+ B([
782
+ n()
783
+ ], f.prototype, "placeholder", 2);
784
+ B([
785
+ n()
786
+ ], f.prototype, "autocomplete", 2);
787
+ B([
788
+ n({ type: Boolean, reflect: !0 })
789
+ ], f.prototype, "readonly", 2);
790
+ f = B([
791
+ d("vox-input")
792
+ ], f);
793
+ var Co = Object.getOwnPropertyDescriptor, jo = (t, o, a, r) => {
794
+ for (var e = r > 1 ? void 0 : r ? Co(o, a) : o, s = t.length - 1, i; s >= 0; s--)
795
+ (i = t[s]) && (e = i(e) || e);
796
+ return e;
797
+ };
798
+ let ke = class extends v {
799
+ handleSlotChange(t) {
800
+ const o = t.target.assignedElements();
801
+ o.forEach((a, r) => {
802
+ const e = r === 0 ? "start" : r === o.length - 1 ? "end" : "middle";
803
+ a.setAttribute("data-vox-group", e);
804
+ });
805
+ }
806
+ render() {
807
+ return l`
808
+ <div class="group" role="group">
809
+ <slot @slotchange=${this.handleSlotChange}></slot>
810
+ </div>
811
+ `;
812
+ }
813
+ };
814
+ ke.styles = c`
815
+ :host {
816
+ display: block;
817
+ font-family: var(--vox-font-family-base);
818
+ }
819
+
820
+ .group {
821
+ display: flex;
822
+ align-items: stretch;
823
+ }
824
+
825
+ ::slotted(*) {
826
+ flex: none;
827
+ }
828
+
829
+ ::slotted(vox-input),
830
+ ::slotted(vox-select) {
831
+ flex: 1 1 auto;
832
+ min-width: 0;
833
+ }
834
+
835
+ ::slotted(span) {
836
+ display: inline-flex;
837
+ align-items: center;
838
+ padding: 0 var(--vox-space-3);
839
+ background-color: var(--vox-color-bg-soft);
840
+ border: 1px solid var(--vox-color-border);
841
+ color: var(--vox-color-text-2);
842
+ font-size: 14px;
843
+ white-space: nowrap;
844
+ }
845
+
846
+ ::slotted(span[data-vox-group='start']) {
847
+ border-radius: var(--vox-radius-md) 0 0 var(--vox-radius-md);
848
+ border-right: none;
849
+ }
850
+
851
+ ::slotted(span[data-vox-group='end']) {
852
+ border-radius: 0 var(--vox-radius-md) var(--vox-radius-md) 0;
853
+ border-left: none;
854
+ }
855
+ `;
856
+ ke = jo([
857
+ d("vox-input-group")
858
+ ], ke);
859
+ var Do = Object.defineProperty, ko = Object.getOwnPropertyDescriptor, _e = (t, o, a, r) => {
860
+ for (var e = r > 1 ? void 0 : r ? ko(o, a) : o, s = t.length - 1, i; s >= 0; s--)
861
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
862
+ return r && e && Do(o, a, e), e;
863
+ };
864
+ let k = class extends v {
865
+ constructor() {
866
+ super(...arguments), this.value = "", this.checked = !1, this.disabled = !1;
867
+ }
868
+ select() {
869
+ this.disabled || this.dispatchEvent(
870
+ new CustomEvent("vox-radio-select", { bubbles: !0, composed: !0 })
871
+ );
872
+ }
873
+ handleKeydown(t) {
874
+ (t.key === " " || t.key === "Enter") && (t.preventDefault(), this.select());
875
+ }
876
+ render() {
877
+ return l`
878
+ <span
879
+ class="radio"
880
+ role="radio"
881
+ aria-checked=${this.checked ? "true" : "false"}
882
+ aria-disabled=${this.disabled ? "true" : "false"}
883
+ tabindex=${this.checked ? "0" : "-1"}
884
+ @click=${this.select}
885
+ @keydown=${this.handleKeydown}
886
+ >
887
+ <span class="circle" aria-hidden="true"></span>
888
+ <span class="text"><slot></slot></span>
889
+ </span>
890
+ `;
891
+ }
892
+ };
893
+ k.styles = c`
894
+ :host {
895
+ display: block;
896
+ font-family: var(--vox-font-family-base);
897
+ }
898
+
899
+ :host([disabled]) {
900
+ opacity: 0.6;
901
+ pointer-events: none;
902
+ }
903
+
904
+ .radio {
905
+ display: inline-flex;
906
+ align-items: flex-start;
907
+ gap: var(--vox-space-2);
908
+ cursor: pointer;
909
+ font-size: 14px;
910
+ line-height: 1.5;
911
+ color: var(--vox-color-text-1);
912
+ }
913
+
914
+ .radio:focus {
915
+ outline: none;
916
+ }
917
+
918
+ .circle {
919
+ flex: none;
920
+ box-sizing: border-box;
921
+ width: 18px;
922
+ height: 18px;
923
+ margin-top: 2px;
924
+ border: 1px solid var(--vox-color-border);
925
+ border-radius: 50%;
926
+ background-color: var(--vox-color-bg);
927
+ transition:
928
+ border-color var(--vox-transition-fast),
929
+ box-shadow var(--vox-transition-fast);
930
+ }
931
+
932
+ :host([checked]) .circle {
933
+ border-color: var(--vox-color-brand-3);
934
+ border-width: 5px;
935
+ }
936
+
937
+ .radio:focus-visible .circle {
938
+ outline: 2px solid var(--vox-color-brand-1);
939
+ outline-offset: 2px;
940
+ }
941
+ `;
942
+ _e([
943
+ n()
944
+ ], k.prototype, "value", 2);
945
+ _e([
946
+ n({ type: Boolean, reflect: !0 })
947
+ ], k.prototype, "checked", 2);
948
+ _e([
949
+ n({ type: Boolean, reflect: !0 })
950
+ ], k.prototype, "disabled", 2);
951
+ k = _e([
952
+ d("vox-radio")
953
+ ], k);
954
+ var zo = Object.defineProperty, Eo = Object.getOwnPropertyDescriptor, so = (t, o, a, r) => {
955
+ for (var e = r > 1 ? void 0 : r ? Eo(o, a) : o, s = t.length - 1, i; s >= 0; s--)
956
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
957
+ return r && e && zo(o, a, e), e;
958
+ };
959
+ let pe = class extends h {
960
+ constructor() {
961
+ super(...arguments), this.value = "";
962
+ }
963
+ get radios() {
964
+ return [...this.querySelectorAll("vox-radio")];
965
+ }
966
+ formResetCallback() {
967
+ this.value = "";
968
+ }
969
+ updated() {
970
+ this.internals.setFormValue(this.value || null), this.internals.setValidity(
971
+ this.required && !this.value ? { valueMissing: !0 } : {},
972
+ "Please select an option.",
973
+ this
974
+ ), this.syncRadios();
975
+ }
976
+ syncRadios() {
977
+ const t = this.radios, o = t.some((a) => a.value === this.value && this.value !== "");
978
+ t.forEach((a, r) => {
979
+ var s, i;
980
+ a.checked = this.value !== "" && a.value === this.value;
981
+ const e = o ? a.checked : r === 0;
982
+ (i = (s = a.shadowRoot) == null ? void 0 : s.querySelector(".radio")) == null || i.setAttribute("tabindex", e ? "0" : "-1");
983
+ });
984
+ }
985
+ handleSelect(t) {
986
+ const o = t.target;
987
+ !(o instanceof HTMLElement) || o.tagName !== "VOX-RADIO" || (t.stopPropagation(), this.value !== o.value && (this.value = o.value, this.dispatchEvent(new Event("change", { bubbles: !0 }))));
988
+ }
989
+ handleKeydown(t) {
990
+ var Je, eo;
991
+ const a = {
992
+ ArrowDown: 1,
993
+ ArrowRight: 1,
994
+ ArrowUp: -1,
995
+ ArrowLeft: -1
996
+ }[t.key];
997
+ if (!a) return;
998
+ t.preventDefault();
999
+ const r = this.radios.filter((De) => !De.disabled);
1000
+ if (r.length === 0) return;
1001
+ const e = r.findIndex((De) => De.checked), s = (Math.max(e, 0) + a + r.length) % r.length, i = r[s];
1002
+ i.select(), (eo = (Je = i.shadowRoot) == null ? void 0 : Je.querySelector(".radio")) == null || eo.focus();
1003
+ }
1004
+ render() {
1005
+ return l`
1006
+ <div class="field" role="radiogroup" aria-label=${this.label}>
1007
+ ${this.label ? l`<span class="label">
1008
+ ${this.label}${this.required ? l`<span class="required-mark" aria-hidden="true"> *</span>` : ""}
1009
+ </span>` : ""}
1010
+ <div
1011
+ class="options"
1012
+ @vox-radio-select=${this.handleSelect}
1013
+ @keydown=${this.handleKeydown}
1014
+ >
1015
+ <slot @slotchange=${this.syncRadios}></slot>
1016
+ </div>
1017
+ ${this.renderNote()}
1018
+ </div>
1019
+ `;
1020
+ }
1021
+ };
1022
+ pe.styles = [
1023
+ re,
1024
+ c`
1025
+ .options {
1026
+ display: flex;
1027
+ flex-direction: column;
1028
+ gap: var(--vox-space-2);
1029
+ margin-top: var(--vox-space-1);
1030
+ }
1031
+ `
1032
+ ];
1033
+ so([
1034
+ n()
1035
+ ], pe.prototype, "value", 2);
1036
+ pe = so([
1037
+ d("vox-radio-group")
1038
+ ], pe);
1039
+ var So = Object.defineProperty, Vo = Object.getOwnPropertyDescriptor, Me = (t, o, a, r) => {
1040
+ for (var e = r > 1 ? void 0 : r ? Vo(o, a) : o, s = t.length - 1, i; s >= 0; s--)
1041
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
1042
+ return r && e && So(o, a, e), e;
1043
+ };
1044
+ let L = class extends h {
1045
+ constructor() {
1046
+ super(...arguments), this.value = "";
1047
+ }
1048
+ formResetCallback() {
1049
+ this.value = "", this.syncOptions();
1050
+ }
1051
+ updated() {
1052
+ this.internals.setFormValue(this.value), this.selectEl && this.syncValidity(this.selectEl);
1053
+ }
1054
+ syncOptions() {
1055
+ if (!this.selectEl) return;
1056
+ const t = this.renderRoot.querySelector("slot");
1057
+ t && (this.selectEl.replaceChildren(
1058
+ ...t.assignedElements().filter((o) => o instanceof HTMLOptionElement || o instanceof HTMLOptGroupElement).map((o) => o.cloneNode(!0))
1059
+ ), this.value && (this.selectEl.value = this.value), this.value = this.selectEl.value);
1060
+ }
1061
+ handleChange() {
1062
+ this.value = this.selectEl.value, this.dispatchEvent(new Event("change", { bubbles: !0 }));
1063
+ }
1064
+ render() {
1065
+ return l`
1066
+ <div class="field">
1067
+ ${this.renderLabel("select")}
1068
+ <select
1069
+ id="select"
1070
+ class="control"
1071
+ ?required=${this.required}
1072
+ ?disabled=${this.disabled}
1073
+ @change=${this.handleChange}
1074
+ ></select>
1075
+ ${this.renderNote()}
1076
+ </div>
1077
+ <div hidden><slot @slotchange=${this.syncOptions}></slot></div>
1078
+ `;
1079
+ }
1080
+ };
1081
+ L.styles = [
1082
+ re,
1083
+ c`
1084
+ select.control {
1085
+ appearance: none;
1086
+ padding-right: var(--vox-space-8);
1087
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23808080' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
1088
+ background-repeat: no-repeat;
1089
+ background-position: right var(--vox-space-3) center;
1090
+ cursor: pointer;
1091
+ }
1092
+ `
1093
+ ];
1094
+ Me([
1095
+ n()
1096
+ ], L.prototype, "value", 2);
1097
+ Me([
1098
+ qe("select")
1099
+ ], L.prototype, "selectEl", 2);
1100
+ L = Me([
1101
+ d("vox-select")
1102
+ ], L);
1103
+ var Bo = Object.defineProperty, Ao = Object.getOwnPropertyDescriptor, Te = (t, o, a, r) => {
1104
+ for (var e = r > 1 ? void 0 : r ? Ao(o, a) : o, s = t.length - 1, i; s >= 0; s--)
1105
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
1106
+ return r && e && Bo(o, a, e), e;
1107
+ };
1108
+ let N = class extends h {
1109
+ constructor() {
1110
+ super(...arguments), this.checked = !1, this.value = "on";
1111
+ }
1112
+ formResetCallback() {
1113
+ this.checked = !1;
1114
+ }
1115
+ updated() {
1116
+ this.internals.setFormValue(this.checked ? this.value : null);
1117
+ }
1118
+ handleChange(t) {
1119
+ this.checked = t.target.checked, this.dispatchEvent(new Event("change", { bubbles: !0 }));
1120
+ }
1121
+ render() {
1122
+ return l`
1123
+ <label class="check">
1124
+ <input
1125
+ type="checkbox"
1126
+ role="switch"
1127
+ .checked=${this.checked}
1128
+ ?disabled=${this.disabled}
1129
+ @change=${this.handleChange}
1130
+ />
1131
+ <span class="track" aria-hidden="true"></span>
1132
+ <span class="text"><slot></slot></span>
1133
+ </label>
1134
+ `;
1135
+ }
1136
+ };
1137
+ N.styles = [
1138
+ ao,
1139
+ c`
1140
+ .track {
1141
+ flex: none;
1142
+ position: relative;
1143
+ width: 36px;
1144
+ height: 20px;
1145
+ margin-top: 1px;
1146
+ border-radius: var(--vox-radius-full);
1147
+ background-color: var(--vox-color-border);
1148
+ transition: background-color var(--vox-transition-fast);
1149
+ }
1150
+
1151
+ .track::after {
1152
+ content: '';
1153
+ position: absolute;
1154
+ top: 2px;
1155
+ left: 2px;
1156
+ width: 16px;
1157
+ height: 16px;
1158
+ border-radius: 50%;
1159
+ background-color: var(--vox-color-bg);
1160
+ transition: transform var(--vox-transition-fast);
1161
+ }
1162
+
1163
+ input:checked + .track {
1164
+ background-color: var(--vox-color-brand-3);
1165
+ }
1166
+
1167
+ input:checked + .track::after {
1168
+ transform: translateX(16px);
1169
+ }
1170
+
1171
+ input:focus-visible + .track {
1172
+ outline: 2px solid var(--vox-color-brand-1);
1173
+ outline-offset: 2px;
1174
+ }
1175
+ `
1176
+ ];
1177
+ Te([
1178
+ n({ type: Boolean, reflect: !0 })
1179
+ ], N.prototype, "checked", 2);
1180
+ Te([
1181
+ n()
1182
+ ], N.prototype, "value", 2);
1183
+ N = Te([
1184
+ d("vox-switch")
1185
+ ], N);
1186
+ var qo = Object.defineProperty, Lo = Object.getOwnPropertyDescriptor, ae = (t, o, a, r) => {
1187
+ for (var e = r > 1 ? void 0 : r ? Lo(o, a) : o, s = t.length - 1, i; s >= 0; s--)
1188
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
1189
+ return r && e && qo(o, a, e), e;
1190
+ };
1191
+ let g = class extends h {
1192
+ constructor() {
1193
+ super(...arguments), this.value = "", this.rows = 4, this.readonly = !1;
1194
+ }
1195
+ formResetCallback() {
1196
+ this.value = "";
1197
+ }
1198
+ updated() {
1199
+ this.internals.setFormValue(this.value);
1200
+ const t = this.renderRoot.querySelector("textarea");
1201
+ t && this.syncValidity(t);
1202
+ }
1203
+ focus(t) {
1204
+ var o;
1205
+ (o = this.renderRoot.querySelector("textarea")) == null || o.focus(t);
1206
+ }
1207
+ handleInput(t) {
1208
+ this.value = t.target.value;
1209
+ }
1210
+ handleChange() {
1211
+ this.dispatchEvent(new Event("change", { bubbles: !0 }));
1212
+ }
1213
+ render() {
1214
+ return l`
1215
+ <div class="field">
1216
+ ${this.renderLabel("textarea")}
1217
+ <textarea
1218
+ id="textarea"
1219
+ class="control"
1220
+ rows=${this.rows}
1221
+ .value=${ro(this.value)}
1222
+ placeholder=${j(this.placeholder)}
1223
+ ?required=${this.required}
1224
+ ?readonly=${this.readonly}
1225
+ ?disabled=${this.disabled}
1226
+ @input=${this.handleInput}
1227
+ @change=${this.handleChange}
1228
+ ></textarea>
1229
+ ${this.renderNote()}
1230
+ </div>
1231
+ `;
1232
+ }
1233
+ };
1234
+ g.styles = [
1235
+ re,
1236
+ c`
1237
+ textarea.control {
1238
+ resize: vertical;
1239
+ min-height: 4em;
1240
+ }
1241
+ `
1242
+ ];
1243
+ ae([
1244
+ n()
1245
+ ], g.prototype, "value", 2);
1246
+ ae([
1247
+ n()
1248
+ ], g.prototype, "placeholder", 2);
1249
+ ae([
1250
+ n({ type: Number })
1251
+ ], g.prototype, "rows", 2);
1252
+ ae([
1253
+ n({ type: Boolean, reflect: !0 })
1254
+ ], g.prototype, "readonly", 2);
1255
+ g = ae([
1256
+ d("vox-textarea")
1257
+ ], g);
1258
+ var No = Object.defineProperty, Mo = Object.getOwnPropertyDescriptor, se = (t, o, a, r) => {
1259
+ for (var e = r > 1 ? void 0 : r ? Mo(o, a) : o, s = t.length - 1, i; s >= 0; s--)
1260
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
1261
+ return r && e && No(o, a, e), e;
1262
+ };
1263
+ let m = class extends v {
1264
+ constructor() {
1265
+ super(...arguments), this.alt = "", this.initials = "", this.size = "md";
1266
+ }
1267
+ render() {
1268
+ return l`
1269
+ <span class="avatar" role=${this.src ? "presentation" : "img"} aria-label=${this.alt}>
1270
+ ${this.src ? l`<img src=${this.src} alt=${this.alt} />` : this.initials}
1271
+ </span>
1272
+ `;
1273
+ }
1274
+ };
1275
+ m.styles = c`
1276
+ :host {
1277
+ display: inline-block;
1278
+ }
1279
+
1280
+ .avatar {
1281
+ display: flex;
1282
+ align-items: center;
1283
+ justify-content: center;
1284
+ overflow: hidden;
1285
+ border-radius: 50%;
1286
+ background-color: var(--vox-color-brand-soft);
1287
+ color: var(--vox-color-brand-1);
1288
+ font-family: var(--vox-font-family-base);
1289
+ font-weight: 600;
1290
+ user-select: none;
1291
+ }
1292
+
1293
+ img {
1294
+ width: 100%;
1295
+ height: 100%;
1296
+ object-fit: cover;
1297
+ }
1298
+
1299
+ :host([size='sm']) .avatar {
1300
+ width: 28px;
1301
+ height: 28px;
1302
+ font-size: 11px;
1303
+ }
1304
+
1305
+ :host([size='md']) .avatar {
1306
+ width: 40px;
1307
+ height: 40px;
1308
+ font-size: 14px;
1309
+ }
1310
+
1311
+ :host([size='lg']) .avatar {
1312
+ width: 56px;
1313
+ height: 56px;
1314
+ font-size: 20px;
1315
+ }
1316
+
1317
+ :host([size='xl']) .avatar {
1318
+ width: 80px;
1319
+ height: 80px;
1320
+ font-size: 28px;
1321
+ }
1322
+ `;
1323
+ se([
1324
+ n()
1325
+ ], m.prototype, "src", 2);
1326
+ se([
1327
+ n()
1328
+ ], m.prototype, "alt", 2);
1329
+ se([
1330
+ n()
1331
+ ], m.prototype, "initials", 2);
1332
+ se([
1333
+ n({ reflect: !0 })
1334
+ ], m.prototype, "size", 2);
1335
+ m = se([
1336
+ d("vox-avatar")
1337
+ ], m);
1338
+ var To = Object.defineProperty, Fo = Object.getOwnPropertyDescriptor, Fe = (t, o, a, r) => {
1339
+ for (var e = r > 1 ? void 0 : r ? Fo(o, a) : o, s = t.length - 1, i; s >= 0; s--)
1340
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
1341
+ return r && e && To(o, a, e), e;
1342
+ };
1343
+ let M = class extends v {
1344
+ constructor() {
1345
+ super(...arguments), this.heading = "", this.reverse = !1, this.hasActions = !1;
1346
+ }
1347
+ handleActionsSlotChange(t) {
1348
+ const o = t.target;
1349
+ this.hasActions = o.assignedNodes({ flatten: !0 }).length > 0, this.requestUpdate();
1350
+ }
1351
+ render() {
1352
+ return l`
1353
+ <div class="billboard">
1354
+ <div class="media"><slot name="media"></slot></div>
1355
+ <div class="content">
1356
+ <h2 class="heading">${this.heading}</h2>
1357
+ <div class="body"><slot></slot></div>
1358
+ <div class="actions ${this.hasActions ? "has-content" : ""}">
1359
+ <slot name="actions" @slotchange=${this.handleActionsSlotChange}></slot>
1360
+ </div>
1361
+ </div>
1362
+ </div>
1363
+ `;
1364
+ }
1365
+ };
1366
+ M.styles = c`
1367
+ :host {
1368
+ display: block;
1369
+ font-family: var(--vox-font-family-base);
1370
+ }
1371
+
1372
+ .billboard {
1373
+ display: flex;
1374
+ gap: var(--vox-space-8);
1375
+ align-items: center;
1376
+ flex-wrap: wrap;
1377
+ padding: var(--vox-space-8);
1378
+ background-color: var(--vox-color-bg-soft);
1379
+ border-radius: var(--vox-radius-lg);
1380
+ }
1381
+
1382
+ :host([reverse]) .billboard {
1383
+ flex-direction: row-reverse;
1384
+ }
1385
+
1386
+ .media {
1387
+ flex: 1 1 280px;
1388
+ min-width: 0;
1389
+ }
1390
+
1391
+ .media ::slotted(img) {
1392
+ display: block;
1393
+ max-width: 100%;
1394
+ border-radius: var(--vox-radius-md);
1395
+ }
1396
+
1397
+ .content {
1398
+ flex: 1 1 320px;
1399
+ min-width: 0;
1400
+ }
1401
+
1402
+ .heading {
1403
+ margin: 0 0 var(--vox-space-3);
1404
+ font-family: var(--vox-font-family-display);
1405
+ font-size: 28px;
1406
+ font-weight: 600;
1407
+ line-height: 1.3;
1408
+ color: var(--vox-color-text-1);
1409
+ }
1410
+
1411
+ .body {
1412
+ font-size: 16px;
1413
+ line-height: 1.7;
1414
+ color: var(--vox-color-text-2);
1415
+ }
1416
+
1417
+ .actions {
1418
+ display: flex;
1419
+ gap: var(--vox-space-3);
1420
+ flex-wrap: wrap;
1421
+ margin-top: var(--vox-space-6);
1422
+ }
1423
+
1424
+ .actions:not(.has-content) {
1425
+ display: none;
1426
+ }
1427
+ `;
1428
+ Fe([
1429
+ n()
1430
+ ], M.prototype, "heading", 2);
1431
+ Fe([
1432
+ n({ type: Boolean, reflect: !0 })
1433
+ ], M.prototype, "reverse", 2);
1434
+ M = Fe([
1435
+ d("vox-billboard")
1436
+ ], M);
1437
+ var Io = Object.getOwnPropertyDescriptor, Ro = (t, o, a, r) => {
1438
+ for (var e = r > 1 ? void 0 : r ? Io(o, a) : o, s = t.length - 1, i; s >= 0; s--)
1439
+ (i = t[s]) && (e = i(e) || e);
1440
+ return e;
1441
+ };
1442
+ let ze = class extends v {
1443
+ render() {
1444
+ return l`
1445
+ <nav aria-label="Breadcrumbs">
1446
+ <slot></slot>
1447
+ </nav>
1448
+ `;
1449
+ }
1450
+ };
1451
+ ze.styles = c`
1452
+ :host {
1453
+ display: block;
1454
+ font-family: var(--vox-font-family-base);
1455
+ }
1456
+
1457
+ nav {
1458
+ display: flex;
1459
+ align-items: center;
1460
+ flex-wrap: wrap;
1461
+ font-size: 13px;
1462
+ }
1463
+
1464
+ ::slotted(*) {
1465
+ color: var(--vox-color-text-2);
1466
+ text-decoration: none;
1467
+ }
1468
+
1469
+ ::slotted(a:hover) {
1470
+ color: var(--vox-color-brand-1);
1471
+ text-decoration: underline;
1472
+ }
1473
+
1474
+ ::slotted([aria-current='page']) {
1475
+ color: var(--vox-color-text-1);
1476
+ font-weight: 600;
1477
+ }
1478
+
1479
+ ::slotted(*:not(:first-child))::before {
1480
+ content: '/';
1481
+ margin: 0 var(--vox-space-2);
1482
+ color: var(--vox-color-text-3);
1483
+ }
1484
+ `;
1485
+ ze = Ro([
1486
+ d("vox-breadcrumbs")
1487
+ ], ze);
1488
+ var Ho = Object.defineProperty, Uo = Object.getOwnPropertyDescriptor, Ie = (t, o, a, r) => {
1489
+ for (var e = r > 1 ? void 0 : r ? Uo(o, a) : o, s = t.length - 1, i; s >= 0; s--)
1490
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
1491
+ return r && e && Ho(o, a, e), e;
1492
+ };
1493
+ let T = class extends v {
1494
+ constructor() {
1495
+ super(...arguments), this.siteTitle = "", this.href = "/";
1496
+ }
1497
+ render() {
1498
+ return l`
1499
+ <header class="header">
1500
+ <a class="brand" href=${this.href}>
1501
+ <slot name="logo"></slot>
1502
+ ${this.siteTitle ? l`<span>${this.siteTitle}</span>` : p}
1503
+ </a>
1504
+ <nav aria-label="Main">
1505
+ <slot></slot>
1506
+ </nav>
1507
+ <div class="actions">
1508
+ <slot name="actions"></slot>
1509
+ </div>
1510
+ </header>
1511
+ `;
1512
+ }
1513
+ };
1514
+ T.styles = c`
1515
+ :host {
1516
+ display: block;
1517
+ font-family: var(--vox-font-family-base);
1518
+ background-color: var(--vox-color-bg);
1519
+ border-bottom: 1px solid var(--vox-color-divider);
1520
+ }
1521
+
1522
+ .header {
1523
+ display: flex;
1524
+ align-items: center;
1525
+ gap: var(--vox-space-6);
1526
+ flex-wrap: wrap;
1527
+ max-width: 1280px;
1528
+ margin: 0 auto;
1529
+ padding: var(--vox-space-3) var(--vox-space-6);
1530
+ }
1531
+
1532
+ .brand {
1533
+ display: inline-flex;
1534
+ align-items: center;
1535
+ gap: var(--vox-space-2);
1536
+ color: var(--vox-color-text-1);
1537
+ font-size: 16px;
1538
+ font-weight: 700;
1539
+ text-decoration: none;
1540
+ }
1541
+
1542
+ .brand ::slotted(img),
1543
+ .brand ::slotted(svg) {
1544
+ height: 28px;
1545
+ width: auto;
1546
+ }
1547
+
1548
+ nav {
1549
+ display: flex;
1550
+ align-items: center;
1551
+ gap: var(--vox-space-4);
1552
+ flex-wrap: wrap;
1553
+ flex: 1 1 auto;
1554
+ }
1555
+
1556
+ nav ::slotted(a) {
1557
+ color: var(--vox-color-text-2);
1558
+ font-size: 14px;
1559
+ font-weight: 500;
1560
+ text-decoration: none;
1561
+ transition: color var(--vox-transition-fast);
1562
+ }
1563
+
1564
+ nav ::slotted(a:hover) {
1565
+ color: var(--vox-color-brand-1);
1566
+ }
1567
+
1568
+ nav ::slotted(a[aria-current='page']) {
1569
+ color: var(--vox-color-brand-1);
1570
+ font-weight: 600;
1571
+ }
1572
+
1573
+ .actions {
1574
+ display: flex;
1575
+ align-items: center;
1576
+ gap: var(--vox-space-3);
1577
+ }
1578
+ `;
1579
+ Ie([
1580
+ n({ attribute: "site-title" })
1581
+ ], T.prototype, "siteTitle", 2);
1582
+ Ie([
1583
+ n()
1584
+ ], T.prototype, "href", 2);
1585
+ T = Ie([
1586
+ d("vox-header")
1587
+ ], T);
1588
+ var Ko = Object.defineProperty, Go = Object.getOwnPropertyDescriptor, ie = (t, o, a, r) => {
1589
+ for (var e = r > 1 ? void 0 : r ? Go(o, a) : o, s = t.length - 1, i; s >= 0; s--)
1590
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
1591
+ return r && e && Ko(o, a, e), e;
1592
+ };
1593
+ let y = class extends v {
1594
+ constructor() {
1595
+ super(...arguments), this.previousLabel = "", this.nextLabel = "";
1596
+ }
1597
+ render() {
1598
+ return l`
1599
+ <nav aria-label="Series">
1600
+ ${this.previousHref ? l`
1601
+ <a href=${this.previousHref} rel="prev">
1602
+ <span class="direction">← Previous</span>
1603
+ <span class="title">${this.previousLabel}</span>
1604
+ </a>
1605
+ ` : p}
1606
+ ${this.nextHref ? l`
1607
+ <a class="next" href=${this.nextHref} rel="next">
1608
+ <span class="direction">Next →</span>
1609
+ <span class="title">${this.nextLabel}</span>
1610
+ </a>
1611
+ ` : p}
1612
+ </nav>
1613
+ `;
1614
+ }
1615
+ };
1616
+ y.styles = c`
1617
+ :host {
1618
+ display: block;
1619
+ font-family: var(--vox-font-family-base);
1620
+ }
1621
+
1622
+ nav {
1623
+ display: flex;
1624
+ justify-content: space-between;
1625
+ gap: var(--vox-space-4);
1626
+ }
1627
+
1628
+ a {
1629
+ display: flex;
1630
+ flex-direction: column;
1631
+ gap: 2px;
1632
+ flex: 0 1 48%;
1633
+ padding: var(--vox-space-3) var(--vox-space-4);
1634
+ border: 1px solid var(--vox-color-divider);
1635
+ border-radius: var(--vox-radius-md);
1636
+ text-decoration: none;
1637
+ transition: border-color var(--vox-transition-base);
1638
+ }
1639
+
1640
+ a:hover,
1641
+ a:focus-visible {
1642
+ border-color: var(--vox-color-brand-1);
1643
+ }
1644
+
1645
+ a:focus-visible {
1646
+ outline: 2px solid var(--vox-color-brand-1);
1647
+ outline-offset: 2px;
1648
+ }
1649
+
1650
+ .next {
1651
+ margin-left: auto;
1652
+ text-align: right;
1653
+ }
1654
+
1655
+ .direction {
1656
+ font-size: 12px;
1657
+ color: var(--vox-color-text-3);
1658
+ }
1659
+
1660
+ .title {
1661
+ font-size: 14px;
1662
+ font-weight: 600;
1663
+ color: var(--vox-color-brand-1);
1664
+ }
1665
+ `;
1666
+ ie([
1667
+ n({ attribute: "previous-href" })
1668
+ ], y.prototype, "previousHref", 2);
1669
+ ie([
1670
+ n({ attribute: "previous-label" })
1671
+ ], y.prototype, "previousLabel", 2);
1672
+ ie([
1673
+ n({ attribute: "next-href" })
1674
+ ], y.prototype, "nextHref", 2);
1675
+ ie([
1676
+ n({ attribute: "next-label" })
1677
+ ], y.prototype, "nextLabel", 2);
1678
+ y = ie([
1679
+ d("vox-series-nav")
1680
+ ], y);
1681
+ var Xo = Object.defineProperty, Qo = Object.getOwnPropertyDescriptor, b = (t, o, a, r) => {
1682
+ for (var e = r > 1 ? void 0 : r ? Qo(o, a) : o, s = t.length - 1, i; s >= 0; s--)
1683
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
1684
+ return r && e && Xo(o, a, e), e;
1685
+ };
1686
+ let he = class extends v {
1687
+ constructor() {
1688
+ super(...arguments), this.label = "Section";
1689
+ }
1690
+ render() {
1691
+ return l`
1692
+ <nav aria-label=${this.label}>
1693
+ <slot></slot>
1694
+ </nav>
1695
+ `;
1696
+ }
1697
+ };
1698
+ he.styles = c`
1699
+ :host {
1700
+ display: block;
1701
+ font-family: var(--vox-font-family-base);
1702
+ }
1703
+
1704
+ nav {
1705
+ display: flex;
1706
+ flex-direction: column;
1707
+ gap: 2px;
1708
+ }
1709
+ `;
1710
+ b([
1711
+ n()
1712
+ ], he.prototype, "label", 2);
1713
+ he = b([
1714
+ d("vox-sidenav")
1715
+ ], he);
1716
+ let F = class extends v {
1717
+ constructor() {
1718
+ super(...arguments), this.heading = "", this.open = !1;
1719
+ }
1720
+ toggle() {
1721
+ this.open = !this.open;
1722
+ }
1723
+ render() {
1724
+ return l`
1725
+ <button
1726
+ class="trigger"
1727
+ aria-expanded=${this.open ? "true" : "false"}
1728
+ @click=${this.toggle}
1729
+ >
1730
+ ${this.heading}
1731
+ <svg class="chevron" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
1732
+ <path d="m9 6 6 6-6 6" />
1733
+ </svg>
1734
+ </button>
1735
+ <div class="items"><slot></slot></div>
1736
+ `;
1737
+ }
1738
+ };
1739
+ F.styles = c`
1740
+ :host {
1741
+ display: block;
1742
+ font-family: var(--vox-font-family-base);
1743
+ }
1744
+
1745
+ .trigger {
1746
+ display: flex;
1747
+ align-items: center;
1748
+ justify-content: space-between;
1749
+ gap: var(--vox-space-2);
1750
+ width: 100%;
1751
+ padding: var(--vox-space-2) var(--vox-space-3);
1752
+ background: none;
1753
+ border: none;
1754
+ border-radius: var(--vox-radius-sm);
1755
+ color: var(--vox-color-text-1);
1756
+ font-family: inherit;
1757
+ font-size: 14px;
1758
+ font-weight: 600;
1759
+ text-align: left;
1760
+ cursor: pointer;
1761
+ }
1762
+
1763
+ .trigger:hover {
1764
+ color: var(--vox-color-brand-1);
1765
+ }
1766
+
1767
+ .trigger:focus-visible {
1768
+ outline: 2px solid var(--vox-color-brand-1);
1769
+ outline-offset: -2px;
1770
+ }
1771
+
1772
+ .chevron {
1773
+ flex: none;
1774
+ width: 14px;
1775
+ height: 14px;
1776
+ transition: transform var(--vox-transition-fast);
1777
+ }
1778
+
1779
+ :host([open]) .chevron {
1780
+ transform: rotate(90deg);
1781
+ }
1782
+
1783
+ .items {
1784
+ display: none;
1785
+ flex-direction: column;
1786
+ gap: 2px;
1787
+ padding-left: var(--vox-space-3);
1788
+ border-left: 1px solid var(--vox-color-divider);
1789
+ margin-left: var(--vox-space-3);
1790
+ }
1791
+
1792
+ :host([open]) .items {
1793
+ display: flex;
1794
+ }
1795
+ `;
1796
+ b([
1797
+ n()
1798
+ ], F.prototype, "heading", 2);
1799
+ b([
1800
+ n({ type: Boolean, reflect: !0 })
1801
+ ], F.prototype, "open", 2);
1802
+ F = b([
1803
+ d("vox-sidenav-group")
1804
+ ], F);
1805
+ let I = class extends v {
1806
+ constructor() {
1807
+ super(...arguments), this.href = "#", this.current = !1;
1808
+ }
1809
+ render() {
1810
+ return l`
1811
+ <a href=${this.href} aria-current=${this.current ? "page" : "false"}>
1812
+ <slot></slot>
1813
+ </a>
1814
+ `;
1815
+ }
1816
+ };
1817
+ I.styles = c`
1818
+ :host {
1819
+ display: block;
1820
+ font-family: var(--vox-font-family-base);
1821
+ }
1822
+
1823
+ a {
1824
+ display: block;
1825
+ padding: var(--vox-space-2) var(--vox-space-3);
1826
+ border-radius: var(--vox-radius-sm);
1827
+ color: var(--vox-color-text-2);
1828
+ font-size: 14px;
1829
+ text-decoration: none;
1830
+ transition:
1831
+ color var(--vox-transition-fast),
1832
+ background-color var(--vox-transition-fast);
1833
+ }
1834
+
1835
+ a:hover {
1836
+ color: var(--vox-color-text-1);
1837
+ }
1838
+
1839
+ a:focus-visible {
1840
+ outline: 2px solid var(--vox-color-brand-1);
1841
+ outline-offset: -2px;
1842
+ }
1843
+
1844
+ :host([current]) a {
1845
+ background-color: var(--vox-color-brand-soft);
1846
+ color: var(--vox-color-brand-1);
1847
+ font-weight: 600;
1848
+ }
1849
+ `;
1850
+ b([
1851
+ n()
1852
+ ], I.prototype, "href", 2);
1853
+ b([
1854
+ n({ type: Boolean, reflect: !0 })
1855
+ ], I.prototype, "current", 2);
1856
+ I = b([
1857
+ d("vox-sidenav-item")
1858
+ ], I);
1859
+ var Wo = Object.defineProperty, Yo = Object.getOwnPropertyDescriptor, io = (t, o, a, r) => {
1860
+ for (var e = r > 1 ? void 0 : r ? Yo(o, a) : o, s = t.length - 1, i; s >= 0; s--)
1861
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
1862
+ return r && e && Wo(o, a, e), e;
1863
+ };
1864
+ let xe = class extends v {
1865
+ constructor() {
1866
+ super(...arguments), this.label = "Secondary";
1867
+ }
1868
+ render() {
1869
+ return l`
1870
+ <nav aria-label=${this.label}>
1871
+ <slot></slot>
1872
+ </nav>
1873
+ `;
1874
+ }
1875
+ };
1876
+ xe.styles = c`
1877
+ :host {
1878
+ display: block;
1879
+ font-family: var(--vox-font-family-base);
1880
+ }
1881
+
1882
+ nav {
1883
+ display: flex;
1884
+ gap: var(--vox-space-1);
1885
+ overflow-x: auto;
1886
+ border-bottom: 1px solid var(--vox-color-divider);
1887
+ }
1888
+
1889
+ ::slotted(a) {
1890
+ padding: var(--vox-space-2) var(--vox-space-4);
1891
+ margin-bottom: -1px;
1892
+ border-bottom: 2px solid transparent;
1893
+ color: var(--vox-color-text-2);
1894
+ font-size: 14px;
1895
+ font-weight: 500;
1896
+ text-decoration: none;
1897
+ white-space: nowrap;
1898
+ transition: color var(--vox-transition-fast);
1899
+ }
1900
+
1901
+ ::slotted(a:hover) {
1902
+ color: var(--vox-color-text-1);
1903
+ }
1904
+
1905
+ ::slotted(a[aria-current='page']) {
1906
+ color: var(--vox-color-brand-1);
1907
+ font-weight: 600;
1908
+ border-bottom-color: var(--vox-color-brand-1);
1909
+ }
1910
+ `;
1911
+ io([
1912
+ n()
1913
+ ], xe.prototype, "label", 2);
1914
+ xe = io([
1915
+ d("vox-subnav")
1916
+ ], xe);
1917
+ var Zo = Object.defineProperty, Jo = Object.getOwnPropertyDescriptor, P = (t, o, a, r) => {
1918
+ for (var e = r > 1 ? void 0 : r ? Jo(o, a) : o, s = t.length - 1, i; s >= 0; s--)
1919
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
1920
+ return r && e && Zo(o, a, e), e;
1921
+ };
1922
+ let Ee = class extends v {
1923
+ get tabs() {
1924
+ return [...this.querySelectorAll("vox-tab")];
1925
+ }
1926
+ get panels() {
1927
+ return [...this.querySelectorAll("vox-tab-panel")];
1928
+ }
1929
+ sync() {
1930
+ const t = this.tabs;
1931
+ t.length > 0 && !t.some((a) => a.selected) && (t[0].selected = !0);
1932
+ const o = t.find((a) => a.selected);
1933
+ this.panels.forEach((a) => {
1934
+ a.active = a.name === (o == null ? void 0 : o.panel);
1935
+ });
1936
+ }
1937
+ handleSelect(t) {
1938
+ const o = t.target;
1939
+ o.tagName === "VOX-TAB" && (this.tabs.forEach((a) => a.selected = a === o), this.sync(), this.dispatchEvent(
1940
+ new CustomEvent("vox-tab-change", {
1941
+ detail: { panel: o.panel },
1942
+ bubbles: !0,
1943
+ composed: !0
1944
+ })
1945
+ ));
1946
+ }
1947
+ handleKeydown(t) {
1948
+ const a = { ArrowRight: 1, ArrowLeft: -1 }[t.key];
1949
+ if (!a) return;
1950
+ t.preventDefault();
1951
+ const r = this.tabs, e = r.findIndex((i) => i.selected), s = r[(e + a + r.length) % r.length];
1952
+ s.select(), s.focusTab();
1953
+ }
1954
+ render() {
1955
+ return l`
1956
+ <div
1957
+ class="tablist"
1958
+ role="tablist"
1959
+ @vox-tab-select=${this.handleSelect}
1960
+ @keydown=${this.handleKeydown}
1961
+ >
1962
+ <slot name="tab" @slotchange=${this.sync}></slot>
1963
+ </div>
1964
+ <slot @slotchange=${this.sync}></slot>
1965
+ `;
1966
+ }
1967
+ };
1968
+ Ee.styles = c`
1969
+ :host {
1970
+ display: block;
1971
+ }
1972
+
1973
+ .tablist {
1974
+ display: flex;
1975
+ gap: var(--vox-space-1);
1976
+ border-bottom: 1px solid var(--vox-color-divider);
1977
+ }
1978
+ `;
1979
+ Ee = P([
1980
+ d("vox-tabs")
1981
+ ], Ee);
1982
+ let R = class extends v {
1983
+ constructor() {
1984
+ super(...arguments), this.panel = "", this.selected = !1;
1985
+ }
1986
+ select() {
1987
+ this.dispatchEvent(
1988
+ new CustomEvent("vox-tab-select", { bubbles: !0, composed: !0 })
1989
+ );
1990
+ }
1991
+ focusTab() {
1992
+ var t;
1993
+ (t = this.renderRoot.querySelector(".tab")) == null || t.focus();
1994
+ }
1995
+ render() {
1996
+ return l`
1997
+ <button
1998
+ class="tab"
1999
+ role="tab"
2000
+ aria-selected=${this.selected ? "true" : "false"}
2001
+ tabindex=${this.selected ? "0" : "-1"}
2002
+ @click=${this.select}
2003
+ >
2004
+ <slot></slot>
2005
+ </button>
2006
+ `;
2007
+ }
2008
+ };
2009
+ R.styles = c`
2010
+ :host {
2011
+ display: block;
2012
+ font-family: var(--vox-font-family-base);
2013
+ }
2014
+
2015
+ .tab {
2016
+ padding: var(--vox-space-2) var(--vox-space-4);
2017
+ margin-bottom: -1px;
2018
+ background: none;
2019
+ border: none;
2020
+ border-bottom: 2px solid transparent;
2021
+ color: var(--vox-color-text-2);
2022
+ font-family: inherit;
2023
+ font-size: 14px;
2024
+ font-weight: 600;
2025
+ cursor: pointer;
2026
+ transition: color var(--vox-transition-fast);
2027
+ }
2028
+
2029
+ .tab:hover {
2030
+ color: var(--vox-color-text-1);
2031
+ }
2032
+
2033
+ .tab:focus-visible {
2034
+ outline: 2px solid var(--vox-color-brand-1);
2035
+ outline-offset: -2px;
2036
+ border-radius: var(--vox-radius-sm);
2037
+ }
2038
+
2039
+ :host([selected]) .tab {
2040
+ color: var(--vox-color-brand-1);
2041
+ border-bottom-color: var(--vox-color-brand-1);
2042
+ }
2043
+ `;
2044
+ P([
2045
+ n()
2046
+ ], R.prototype, "panel", 2);
2047
+ P([
2048
+ n({ type: Boolean, reflect: !0 })
2049
+ ], R.prototype, "selected", 2);
2050
+ R = P([
2051
+ d("vox-tab")
2052
+ ], R);
2053
+ let H = class extends v {
2054
+ constructor() {
2055
+ super(...arguments), this.name = "", this.active = !1;
2056
+ }
2057
+ render() {
2058
+ return l`<div role="tabpanel"><slot></slot></div>`;
2059
+ }
2060
+ };
2061
+ H.styles = c`
2062
+ :host {
2063
+ display: none;
2064
+ font-family: var(--vox-font-family-base);
2065
+ font-size: 14px;
2066
+ line-height: 1.7;
2067
+ color: var(--vox-color-text-2);
2068
+ padding: var(--vox-space-4) 0;
2069
+ }
2070
+
2071
+ :host([active]) {
2072
+ display: block;
2073
+ }
2074
+ `;
2075
+ P([
2076
+ n()
2077
+ ], H.prototype, "name", 2);
2078
+ P([
2079
+ n({ type: Boolean, reflect: !0 })
2080
+ ], H.prototype, "active", 2);
2081
+ H = P([
2082
+ d("vox-tab-panel")
2083
+ ], H);
2084
+ var et = Object.defineProperty, ot = Object.getOwnPropertyDescriptor, ne = (t, o, a, r) => {
2085
+ for (var e = r > 1 ? void 0 : r ? ot(o, a) : o, s = t.length - 1, i; s >= 0; s--)
2086
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
2087
+ return r && e && et(o, a, e), e;
2088
+ };
2089
+ let w = class extends v {
2090
+ constructor() {
2091
+ super(...arguments), this.heading = "", this.open = !1, this.lightDismiss = !1, this.hasFooter = !1;
2092
+ }
2093
+ show() {
2094
+ this.open = !0;
2095
+ }
2096
+ close() {
2097
+ this.open = !1;
2098
+ }
2099
+ updated() {
2100
+ this.open && !this.dialogEl.open ? this.dialogEl.showModal() : !this.open && this.dialogEl.open && this.dialogEl.close();
2101
+ }
2102
+ handleNativeClose() {
2103
+ this.open = !1, this.dispatchEvent(
2104
+ new CustomEvent("vox-close", { bubbles: !0, composed: !0 })
2105
+ );
2106
+ }
2107
+ handleClick(t) {
2108
+ this.lightDismiss && t.target === this.dialogEl && this.close();
2109
+ }
2110
+ handleFooterSlotChange(t) {
2111
+ const o = t.target;
2112
+ this.hasFooter = o.assignedNodes({ flatten: !0 }).length > 0, this.requestUpdate();
2113
+ }
2114
+ render() {
2115
+ return l`
2116
+ <dialog
2117
+ aria-label=${this.heading || p}
2118
+ @close=${this.handleNativeClose}
2119
+ @click=${this.handleClick}
2120
+ >
2121
+ <div class="header">
2122
+ <h2 class="heading">${this.heading}</h2>
2123
+ <button class="close" aria-label="Close dialog" @click=${this.close}>
2124
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" aria-hidden="true">
2125
+ <path d="M18 6 6 18M6 6l12 12" />
2126
+ </svg>
2127
+ </button>
2128
+ </div>
2129
+ <div class="body"><slot></slot></div>
2130
+ <div class="footer ${this.hasFooter ? "has-content" : ""}">
2131
+ <slot name="footer" @slotchange=${this.handleFooterSlotChange}></slot>
2132
+ </div>
2133
+ </dialog>
2134
+ `;
2135
+ }
2136
+ };
2137
+ w.styles = c`
2138
+ dialog {
2139
+ box-sizing: border-box;
2140
+ width: min(90vw, 480px);
2141
+ padding: 0;
2142
+ border: 1px solid var(--vox-color-divider);
2143
+ border-radius: var(--vox-radius-lg);
2144
+ background-color: var(--vox-color-bg-elv);
2145
+ color: var(--vox-color-text-1);
2146
+ font-family: var(--vox-font-family-base);
2147
+ box-shadow: var(--vox-shadow-2);
2148
+ }
2149
+
2150
+ dialog::backdrop {
2151
+ background-color: rgba(0, 0, 0, 0.5);
2152
+ }
2153
+
2154
+ .header {
2155
+ display: flex;
2156
+ align-items: center;
2157
+ justify-content: space-between;
2158
+ gap: var(--vox-space-3);
2159
+ padding: var(--vox-space-4) var(--vox-space-6);
2160
+ border-bottom: 1px solid var(--vox-color-divider);
2161
+ }
2162
+
2163
+ .heading {
2164
+ margin: 0;
2165
+ font-size: 16px;
2166
+ font-weight: 600;
2167
+ }
2168
+
2169
+ .close {
2170
+ display: flex;
2171
+ align-items: center;
2172
+ justify-content: center;
2173
+ width: 28px;
2174
+ height: 28px;
2175
+ padding: 0;
2176
+ background: none;
2177
+ border: none;
2178
+ border-radius: var(--vox-radius-sm);
2179
+ color: var(--vox-color-text-2);
2180
+ cursor: pointer;
2181
+ }
2182
+
2183
+ .close:hover {
2184
+ color: var(--vox-color-text-1);
2185
+ background-color: var(--vox-color-bg-soft);
2186
+ }
2187
+
2188
+ .close:focus-visible {
2189
+ outline: 2px solid var(--vox-color-brand-1);
2190
+ }
2191
+
2192
+ .close svg {
2193
+ width: 16px;
2194
+ height: 16px;
2195
+ }
2196
+
2197
+ .body {
2198
+ padding: var(--vox-space-6);
2199
+ font-size: 14px;
2200
+ line-height: 1.7;
2201
+ color: var(--vox-color-text-2);
2202
+ }
2203
+
2204
+ .footer {
2205
+ display: flex;
2206
+ justify-content: flex-end;
2207
+ gap: var(--vox-space-3);
2208
+ padding: var(--vox-space-4) var(--vox-space-6);
2209
+ border-top: 1px solid var(--vox-color-divider);
2210
+ }
2211
+
2212
+ .footer:not(.has-content) {
2213
+ display: none;
2214
+ }
2215
+
2216
+ ::slotted(p:first-child) {
2217
+ margin-top: 0;
2218
+ }
2219
+
2220
+ ::slotted(p:last-child) {
2221
+ margin-bottom: 0;
2222
+ }
2223
+ `;
2224
+ ne([
2225
+ n()
2226
+ ], w.prototype, "heading", 2);
2227
+ ne([
2228
+ n({ type: Boolean })
2229
+ ], w.prototype, "open", 2);
2230
+ ne([
2231
+ n({ type: Boolean, attribute: "light-dismiss" })
2232
+ ], w.prototype, "lightDismiss", 2);
2233
+ ne([
2234
+ qe("dialog")
2235
+ ], w.prototype, "dialogEl", 2);
2236
+ w = ne([
2237
+ d("vox-dialog")
2238
+ ], w);
2239
+ var tt = Object.defineProperty, rt = Object.getOwnPropertyDescriptor, Re = (t, o, a, r) => {
2240
+ for (var e = r > 1 ? void 0 : r ? rt(o, a) : o, s = t.length - 1, i; s >= 0; s--)
2241
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
2242
+ return r && e && tt(o, a, e), e;
2243
+ };
2244
+ let U = class extends v {
2245
+ constructor() {
2246
+ super(...arguments), this.summary = "Show details", this.open = !1;
2247
+ }
2248
+ toggle() {
2249
+ this.open = !this.open, this.dispatchEvent(
2250
+ new CustomEvent("vox-toggle", { bubbles: !0, composed: !0 })
2251
+ );
2252
+ }
2253
+ render() {
2254
+ return l`
2255
+ <button
2256
+ class="trigger"
2257
+ aria-expanded=${this.open ? "true" : "false"}
2258
+ @click=${this.toggle}
2259
+ >
2260
+ <svg class="chevron" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
2261
+ <path d="m9 6 6 6-6 6" />
2262
+ </svg>
2263
+ ${this.summary}
2264
+ </button>
2265
+ <div class="panel" ?hidden=${!this.open}>
2266
+ <slot></slot>
2267
+ </div>
2268
+ `;
2269
+ }
2270
+ };
2271
+ U.styles = c`
2272
+ :host {
2273
+ display: block;
2274
+ font-family: var(--vox-font-family-base);
2275
+ }
2276
+
2277
+ .trigger {
2278
+ display: inline-flex;
2279
+ align-items: center;
2280
+ gap: var(--vox-space-2);
2281
+ padding: 0;
2282
+ background: none;
2283
+ border: none;
2284
+ color: var(--vox-color-brand-1);
2285
+ font-family: inherit;
2286
+ font-size: 14px;
2287
+ font-weight: 600;
2288
+ cursor: pointer;
2289
+ }
2290
+
2291
+ .trigger:hover {
2292
+ color: var(--vox-color-brand-2);
2293
+ text-decoration: underline;
2294
+ }
2295
+
2296
+ .trigger:focus-visible {
2297
+ outline: 2px solid var(--vox-color-brand-1);
2298
+ outline-offset: 2px;
2299
+ border-radius: var(--vox-radius-sm);
2300
+ }
2301
+
2302
+ .chevron {
2303
+ width: 14px;
2304
+ height: 14px;
2305
+ transition: transform var(--vox-transition-fast);
2306
+ }
2307
+
2308
+ :host([open]) .chevron {
2309
+ transform: rotate(90deg);
2310
+ }
2311
+
2312
+ .panel {
2313
+ margin-top: var(--vox-space-3);
2314
+ font-size: 14px;
2315
+ line-height: 1.7;
2316
+ color: var(--vox-color-text-2);
2317
+ }
2318
+
2319
+ .panel[hidden] {
2320
+ display: none;
2321
+ }
2322
+ `;
2323
+ Re([
2324
+ n()
2325
+ ], U.prototype, "summary", 2);
2326
+ Re([
2327
+ n({ type: Boolean, reflect: !0 })
2328
+ ], U.prototype, "open", 2);
2329
+ U = Re([
2330
+ d("vox-disclosure")
2331
+ ], U);
2332
+ var at = Object.defineProperty, st = Object.getOwnPropertyDescriptor, He = (t, o, a, r) => {
2333
+ for (var e = r > 1 ? void 0 : r ? st(o, a) : o, s = t.length - 1, i; s >= 0; s--)
2334
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
2335
+ return r && e && at(o, a, e), e;
2336
+ };
2337
+ let K = class extends v {
2338
+ constructor() {
2339
+ super(...arguments), this.label = "Menu", this.open = !1, this.handleOutsideClick = (t) => {
2340
+ this.open && !t.composedPath().includes(this) && (this.open = !1);
2341
+ }, this.handleKeydown = (t) => {
2342
+ var o;
2343
+ if (t.key === "Escape" && this.open) {
2344
+ this.open = !1, (o = this.renderRoot.querySelector(".trigger")) == null || o.focus();
2345
+ return;
2346
+ }
2347
+ if ((t.key === "ArrowDown" || t.key === "ArrowUp") && this.open) {
2348
+ t.preventDefault();
2349
+ const a = [...this.querySelectorAll("a, button")];
2350
+ if (a.length === 0) return;
2351
+ const r = document.activeElement, e = a.indexOf(r), s = t.key === "ArrowDown" ? 1 : -1;
2352
+ a[(Math.max(e, 0) + s + a.length) % a.length].focus();
2353
+ }
2354
+ };
2355
+ }
2356
+ connectedCallback() {
2357
+ super.connectedCallback(), document.addEventListener("click", this.handleOutsideClick), this.addEventListener("keydown", this.handleKeydown);
2358
+ }
2359
+ disconnectedCallback() {
2360
+ super.disconnectedCallback(), document.removeEventListener("click", this.handleOutsideClick), this.removeEventListener("keydown", this.handleKeydown);
2361
+ }
2362
+ toggle() {
2363
+ this.open = !this.open;
2364
+ }
2365
+ render() {
2366
+ return l`
2367
+ <button
2368
+ class="trigger"
2369
+ aria-expanded=${this.open ? "true" : "false"}
2370
+ aria-haspopup="true"
2371
+ @click=${this.toggle}
2372
+ >
2373
+ ${this.label}
2374
+ <svg class="chevron" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
2375
+ <path d="m6 9 6 6 6-6" />
2376
+ </svg>
2377
+ </button>
2378
+ <div class="menu">
2379
+ <slot @click=${() => this.open = !1}></slot>
2380
+ </div>
2381
+ `;
2382
+ }
2383
+ };
2384
+ K.styles = c`
2385
+ :host {
2386
+ position: relative;
2387
+ display: inline-block;
2388
+ font-family: var(--vox-font-family-base);
2389
+ }
2390
+
2391
+ .trigger {
2392
+ display: inline-flex;
2393
+ align-items: center;
2394
+ gap: var(--vox-space-2);
2395
+ padding: 0 var(--vox-space-4);
2396
+ height: 38px;
2397
+ background-color: var(--vox-color-bg-soft);
2398
+ border: 1px solid var(--vox-color-divider);
2399
+ border-radius: var(--vox-radius-md);
2400
+ color: var(--vox-color-text-1);
2401
+ font-family: inherit;
2402
+ font-size: 14px;
2403
+ font-weight: 600;
2404
+ cursor: pointer;
2405
+ transition:
2406
+ border-color var(--vox-transition-fast),
2407
+ color var(--vox-transition-fast);
2408
+ }
2409
+
2410
+ .trigger:hover {
2411
+ border-color: var(--vox-color-brand-1);
2412
+ color: var(--vox-color-brand-1);
2413
+ }
2414
+
2415
+ .trigger:focus-visible {
2416
+ outline: 2px solid var(--vox-color-brand-1);
2417
+ outline-offset: 2px;
2418
+ }
2419
+
2420
+ .chevron {
2421
+ width: 14px;
2422
+ height: 14px;
2423
+ transition: transform var(--vox-transition-fast);
2424
+ }
2425
+
2426
+ :host([open]) .chevron {
2427
+ transform: rotate(180deg);
2428
+ }
2429
+
2430
+ .menu {
2431
+ position: absolute;
2432
+ top: calc(100% + 4px);
2433
+ left: 0;
2434
+ z-index: 10;
2435
+ min-width: max(100%, 180px);
2436
+ display: none;
2437
+ flex-direction: column;
2438
+ padding: var(--vox-space-2);
2439
+ background-color: var(--vox-color-bg-elv);
2440
+ border: 1px solid var(--vox-color-divider);
2441
+ border-radius: var(--vox-radius-md);
2442
+ box-shadow: var(--vox-shadow-2);
2443
+ }
2444
+
2445
+ :host([open]) .menu {
2446
+ display: flex;
2447
+ }
2448
+
2449
+ ::slotted(a),
2450
+ ::slotted(button) {
2451
+ display: block;
2452
+ width: 100%;
2453
+ box-sizing: border-box;
2454
+ padding: var(--vox-space-2) var(--vox-space-3);
2455
+ background: none;
2456
+ border: none;
2457
+ border-radius: var(--vox-radius-sm);
2458
+ color: var(--vox-color-text-1);
2459
+ font-family: inherit;
2460
+ font-size: 14px;
2461
+ text-align: left;
2462
+ text-decoration: none;
2463
+ cursor: pointer;
2464
+ white-space: nowrap;
2465
+ }
2466
+
2467
+ ::slotted(a:hover),
2468
+ ::slotted(button:hover),
2469
+ ::slotted(a:focus-visible),
2470
+ ::slotted(button:focus-visible) {
2471
+ background-color: var(--vox-color-brand-soft);
2472
+ color: var(--vox-color-brand-1);
2473
+ outline: none;
2474
+ }
2475
+
2476
+ ::slotted(hr) {
2477
+ width: 100%;
2478
+ margin: var(--vox-space-1) 0;
2479
+ border: none;
2480
+ border-top: 1px solid var(--vox-color-divider);
2481
+ }
2482
+ `;
2483
+ He([
2484
+ n()
2485
+ ], K.prototype, "label", 2);
2486
+ He([
2487
+ n({ type: Boolean, reflect: !0 })
2488
+ ], K.prototype, "open", 2);
2489
+ K = He([
2490
+ d("vox-dropdown")
2491
+ ], K);
2492
+ var it = Object.defineProperty, nt = Object.getOwnPropertyDescriptor, le = (t, o, a, r) => {
2493
+ for (var e = r > 1 ? void 0 : r ? nt(o, a) : o, s = t.length - 1, i; s >= 0; s--)
2494
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
2495
+ return r && e && it(o, a, e), e;
2496
+ };
2497
+ let ue = class extends v {
2498
+ constructor() {
2499
+ super(...arguments), this.single = !1;
2500
+ }
2501
+ handleToggle(t) {
2502
+ if (!this.single) return;
2503
+ const o = t.target;
2504
+ o.open && this.querySelectorAll("vox-accordion-item").forEach(
2505
+ (a) => {
2506
+ a !== o && (a.open = !1);
2507
+ }
2508
+ );
2509
+ }
2510
+ render() {
2511
+ return l`<slot @vox-toggle=${this.handleToggle}></slot>`;
2512
+ }
2513
+ };
2514
+ ue.styles = c`
2515
+ :host {
2516
+ display: block;
2517
+ border: 1px solid var(--vox-color-divider);
2518
+ border-radius: var(--vox-radius-md);
2519
+ overflow: hidden;
2520
+ }
2521
+
2522
+ ::slotted(vox-accordion-item:not(:first-child)) {
2523
+ border-top: 1px solid var(--vox-color-divider);
2524
+ }
2525
+ `;
2526
+ le([
2527
+ n({ type: Boolean })
2528
+ ], ue.prototype, "single", 2);
2529
+ ue = le([
2530
+ d("vox-accordion")
2531
+ ], ue);
2532
+ let G = class extends v {
2533
+ constructor() {
2534
+ super(...arguments), this.heading = "", this.open = !1;
2535
+ }
2536
+ toggle() {
2537
+ this.open = !this.open, this.dispatchEvent(
2538
+ new CustomEvent("vox-toggle", { bubbles: !0, composed: !0 })
2539
+ );
2540
+ }
2541
+ render() {
2542
+ return l`
2543
+ <h3 style="margin:0">
2544
+ <button
2545
+ class="trigger"
2546
+ aria-expanded=${this.open ? "true" : "false"}
2547
+ @click=${this.toggle}
2548
+ >
2549
+ ${this.heading}
2550
+ <svg class="chevron" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
2551
+ <path d="m6 9 6 6 6-6" />
2552
+ </svg>
2553
+ </button>
2554
+ </h3>
2555
+ <div class="panel" ?hidden=${!this.open}>
2556
+ <slot></slot>
2557
+ </div>
2558
+ `;
2559
+ }
2560
+ };
2561
+ G.styles = c`
2562
+ :host {
2563
+ display: block;
2564
+ font-family: var(--vox-font-family-base);
2565
+ }
2566
+
2567
+ .trigger {
2568
+ display: flex;
2569
+ align-items: center;
2570
+ justify-content: space-between;
2571
+ gap: var(--vox-space-3);
2572
+ width: 100%;
2573
+ padding: var(--vox-space-4);
2574
+ background: none;
2575
+ border: none;
2576
+ color: var(--vox-color-text-1);
2577
+ font-family: inherit;
2578
+ font-size: 15px;
2579
+ font-weight: 600;
2580
+ text-align: left;
2581
+ cursor: pointer;
2582
+ }
2583
+
2584
+ .trigger:hover {
2585
+ color: var(--vox-color-brand-1);
2586
+ }
2587
+
2588
+ .trigger:focus-visible {
2589
+ outline: 2px solid var(--vox-color-brand-1);
2590
+ outline-offset: -2px;
2591
+ }
2592
+
2593
+ .chevron {
2594
+ flex: none;
2595
+ width: 16px;
2596
+ height: 16px;
2597
+ transition: transform var(--vox-transition-fast);
2598
+ }
2599
+
2600
+ :host([open]) .chevron {
2601
+ transform: rotate(180deg);
2602
+ }
2603
+
2604
+ .panel {
2605
+ padding: 0 var(--vox-space-4) var(--vox-space-4);
2606
+ font-size: 14px;
2607
+ line-height: 1.7;
2608
+ color: var(--vox-color-text-2);
2609
+ }
2610
+
2611
+ .panel[hidden] {
2612
+ display: none;
2613
+ }
2614
+
2615
+ ::slotted(p:first-child) {
2616
+ margin-top: 0;
2617
+ }
2618
+
2619
+ ::slotted(p:last-child) {
2620
+ margin-bottom: 0;
2621
+ }
2622
+ `;
2623
+ le([
2624
+ n()
2625
+ ], G.prototype, "heading", 2);
2626
+ le([
2627
+ n({ type: Boolean, reflect: !0 })
2628
+ ], G.prototype, "open", 2);
2629
+ G = le([
2630
+ d("vox-accordion-item")
2631
+ ], G);
2632
+ var lt = Object.defineProperty, ct = Object.getOwnPropertyDescriptor, ce = (t, o, a, r) => {
2633
+ for (var e = r > 1 ? void 0 : r ? ct(o, a) : o, s = t.length - 1, i; s >= 0; s--)
2634
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
2635
+ return r && e && lt(o, a, e), e;
2636
+ };
2637
+ let $ = class extends v {
2638
+ constructor() {
2639
+ super(...arguments), this.variant = "info", this.heading = "", this.dismissible = !1, this.open = !0;
2640
+ }
2641
+ dismiss() {
2642
+ this.open = !1, this.dispatchEvent(
2643
+ new CustomEvent("vox-dismiss", { bubbles: !0, composed: !0 })
2644
+ );
2645
+ }
2646
+ render() {
2647
+ return l`
2648
+ <div class="alert ${this.variant}" role="alert">
2649
+ <div class="body">
2650
+ ${this.heading ? l`<p class="heading">${this.heading}</p>` : p}
2651
+ <slot></slot>
2652
+ </div>
2653
+ ${this.dismissible ? l`
2654
+ <button class="close" aria-label="Dismiss" @click=${this.dismiss}>
2655
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" aria-hidden="true">
2656
+ <path d="M18 6 6 18M6 6l12 12" />
2657
+ </svg>
2658
+ </button>
2659
+ ` : p}
2660
+ </div>
2661
+ `;
2662
+ }
2663
+ };
2664
+ $.styles = c`
2665
+ :host {
2666
+ display: block;
2667
+ font-family: var(--vox-font-family-base);
2668
+ }
2669
+
2670
+ :host(:not([open])) {
2671
+ display: none;
2672
+ }
2673
+
2674
+ .alert {
2675
+ display: flex;
2676
+ gap: var(--vox-space-3);
2677
+ align-items: flex-start;
2678
+ padding: var(--vox-space-4);
2679
+ border-radius: var(--vox-radius-md);
2680
+ border-left: 4px solid;
2681
+ font-size: 14px;
2682
+ line-height: 1.6;
2683
+ color: var(--vox-color-text-1);
2684
+ }
2685
+
2686
+ .body {
2687
+ flex: 1 1 auto;
2688
+ }
2689
+
2690
+ .heading {
2691
+ margin: 0 0 var(--vox-space-1);
2692
+ font-size: 14px;
2693
+ font-weight: 600;
2694
+ }
2695
+
2696
+ .info {
2697
+ background-color: var(--vox-color-brand-soft);
2698
+ border-color: var(--vox-color-brand-1);
2699
+ }
2700
+ .info .heading {
2701
+ color: var(--vox-color-brand-1);
2702
+ }
2703
+
2704
+ .success {
2705
+ background-color: var(--vox-color-tip-soft);
2706
+ border-color: var(--vox-color-tip-1);
2707
+ }
2708
+ .success .heading {
2709
+ color: var(--vox-color-tip-1);
2710
+ }
2711
+
2712
+ .warning {
2713
+ background-color: var(--vox-color-warning-soft);
2714
+ border-color: var(--vox-color-warning-1);
2715
+ }
2716
+ .warning .heading {
2717
+ color: var(--vox-color-warning-1);
2718
+ }
2719
+
2720
+ .danger {
2721
+ background-color: var(--vox-color-danger-soft);
2722
+ border-color: var(--vox-color-danger-1);
2723
+ }
2724
+ .danger .heading {
2725
+ color: var(--vox-color-danger-1);
2726
+ }
2727
+
2728
+ .close {
2729
+ flex: none;
2730
+ display: flex;
2731
+ align-items: center;
2732
+ justify-content: center;
2733
+ width: 24px;
2734
+ height: 24px;
2735
+ padding: 0;
2736
+ background: none;
2737
+ border: none;
2738
+ border-radius: var(--vox-radius-sm);
2739
+ color: var(--vox-color-text-2);
2740
+ cursor: pointer;
2741
+ }
2742
+
2743
+ .close:hover {
2744
+ color: var(--vox-color-text-1);
2745
+ }
2746
+
2747
+ .close:focus-visible {
2748
+ outline: 2px solid var(--vox-color-brand-1);
2749
+ }
2750
+
2751
+ .close svg {
2752
+ width: 14px;
2753
+ height: 14px;
2754
+ }
2755
+
2756
+ ::slotted(p:first-child) {
2757
+ margin-top: 0;
2758
+ }
2759
+
2760
+ ::slotted(p:last-child) {
2761
+ margin-bottom: 0;
2762
+ }
2763
+ `;
2764
+ ce([
2765
+ n()
2766
+ ], $.prototype, "variant", 2);
2767
+ ce([
2768
+ n()
2769
+ ], $.prototype, "heading", 2);
2770
+ ce([
2771
+ n({ type: Boolean })
2772
+ ], $.prototype, "dismissible", 2);
2773
+ ce([
2774
+ n({ type: Boolean, reflect: !0 })
2775
+ ], $.prototype, "open", 2);
2776
+ $ = ce([
2777
+ d("vox-alert")
2778
+ ], $);
2779
+ var dt = Object.defineProperty, vt = Object.getOwnPropertyDescriptor, no = (t, o, a, r) => {
2780
+ for (var e = r > 1 ? void 0 : r ? vt(o, a) : o, s = t.length - 1, i; s >= 0; s--)
2781
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
2782
+ return r && e && dt(o, a, e), e;
2783
+ };
2784
+ let fe = class extends v {
2785
+ constructor() {
2786
+ super(...arguments), this.variant = "brand";
2787
+ }
2788
+ render() {
2789
+ return l`<span class="badge ${this.variant}"><slot></slot></span>`;
2790
+ }
2791
+ };
2792
+ fe.styles = c`
2793
+ :host {
2794
+ display: inline-block;
2795
+ }
2796
+
2797
+ .badge {
2798
+ display: inline-flex;
2799
+ align-items: center;
2800
+ padding: 2px 10px;
2801
+ border-radius: var(--vox-radius-full);
2802
+ font-family: var(--vox-font-family-base);
2803
+ font-size: 12px;
2804
+ font-weight: 600;
2805
+ line-height: 1.6;
2806
+ white-space: nowrap;
2807
+ }
2808
+
2809
+ .brand {
2810
+ background-color: var(--vox-color-brand-soft);
2811
+ color: var(--vox-color-brand-1);
2812
+ }
2813
+
2814
+ .tip {
2815
+ background-color: var(--vox-color-tip-soft);
2816
+ color: var(--vox-color-tip-1);
2817
+ }
2818
+
2819
+ .warning {
2820
+ background-color: var(--vox-color-warning-soft);
2821
+ color: var(--vox-color-warning-1);
2822
+ }
2823
+
2824
+ .danger {
2825
+ background-color: var(--vox-color-danger-soft);
2826
+ color: var(--vox-color-danger-1);
2827
+ }
2828
+
2829
+ .neutral {
2830
+ background-color: var(--vox-color-bg-soft);
2831
+ color: var(--vox-color-text-2);
2832
+ }
2833
+ `;
2834
+ no([
2835
+ n()
2836
+ ], fe.prototype, "variant", 2);
2837
+ fe = no([
2838
+ d("vox-badge")
2839
+ ], fe);
2840
+ var pt = Object.defineProperty, ht = Object.getOwnPropertyDescriptor, Ue = (t, o, a, r) => {
2841
+ for (var e = r > 1 ? void 0 : r ? ht(o, a) : o, s = t.length - 1, i; s >= 0; s--)
2842
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
2843
+ return r && e && pt(o, a, e), e;
2844
+ };
2845
+ let X = class extends v {
2846
+ constructor() {
2847
+ super(...arguments), this.date = "";
2848
+ }
2849
+ render() {
2850
+ const t = /* @__PURE__ */ new Date(`${this.date}T00:00:00`), o = !Number.isNaN(t.getTime()), a = o ? t.toLocaleString(this.locale, { month: "short" }) : "—", r = o ? t.getDate() : "–";
2851
+ return l`
2852
+ <time class="tile" datetime=${this.date}>
2853
+ <span class="month">${a}</span>
2854
+ <span class="day">${r}</span>
2855
+ </time>
2856
+ `;
2857
+ }
2858
+ };
2859
+ X.styles = c`
2860
+ :host {
2861
+ display: inline-block;
2862
+ font-family: var(--vox-font-family-base);
2863
+ }
2864
+
2865
+ .tile {
2866
+ display: flex;
2867
+ flex-direction: column;
2868
+ align-items: center;
2869
+ min-width: 56px;
2870
+ border: 1px solid var(--vox-color-divider);
2871
+ border-radius: var(--vox-radius-md);
2872
+ overflow: hidden;
2873
+ background-color: var(--vox-color-bg-elv);
2874
+ }
2875
+
2876
+ .month {
2877
+ align-self: stretch;
2878
+ padding: 2px var(--vox-space-2);
2879
+ background-color: var(--vox-color-brand-3);
2880
+ color: var(--vox-color-text-inverse);
2881
+ font-size: 11px;
2882
+ font-weight: 700;
2883
+ letter-spacing: 0.08em;
2884
+ text-transform: uppercase;
2885
+ text-align: center;
2886
+ }
2887
+
2888
+ .day {
2889
+ padding: var(--vox-space-1) var(--vox-space-2);
2890
+ font-size: 24px;
2891
+ font-weight: 700;
2892
+ color: var(--vox-color-text-1);
2893
+ }
2894
+ `;
2895
+ Ue([
2896
+ n()
2897
+ ], X.prototype, "date", 2);
2898
+ Ue([
2899
+ n()
2900
+ ], X.prototype, "locale", 2);
2901
+ X = Ue([
2902
+ d("vox-calendar-tile")
2903
+ ], X);
2904
+ var xt = Object.defineProperty, ut = Object.getOwnPropertyDescriptor, Ke = (t, o, a, r) => {
2905
+ for (var e = r > 1 ? void 0 : r ? ut(o, a) : o, s = t.length - 1, i; s >= 0; s--)
2906
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
2907
+ return r && e && xt(o, a, e), e;
2908
+ };
2909
+ const ft = {
2910
+ info: "Info",
2911
+ tip: "Tip",
2912
+ warning: "Warning",
2913
+ danger: "Danger"
2914
+ };
2915
+ let Q = class extends v {
2916
+ constructor() {
2917
+ super(...arguments), this.variant = "info";
2918
+ }
2919
+ render() {
2920
+ return l`
2921
+ <div class="callout ${this.variant}" role="note">
2922
+ <p class="heading">${this.heading ?? ft[this.variant]}</p>
2923
+ <slot></slot>
2924
+ </div>
2925
+ `;
2926
+ }
2927
+ };
2928
+ Q.styles = c`
2929
+ :host {
2930
+ display: block;
2931
+ }
2932
+
2933
+ .callout {
2934
+ border-radius: var(--vox-radius-md);
2935
+ padding: var(--vox-space-4);
2936
+ font-family: var(--vox-font-family-base);
2937
+ font-size: 14px;
2938
+ line-height: 1.7;
2939
+ color: var(--vox-color-text-2);
2940
+ }
2941
+
2942
+ .heading {
2943
+ margin: 0 0 var(--vox-space-2);
2944
+ font-size: 14px;
2945
+ font-weight: 600;
2946
+ }
2947
+
2948
+ .info {
2949
+ background-color: var(--vox-color-bg-soft);
2950
+ }
2951
+ .info .heading {
2952
+ color: var(--vox-color-text-1);
2953
+ }
2954
+
2955
+ .tip {
2956
+ background-color: var(--vox-color-tip-soft);
2957
+ }
2958
+ .tip .heading {
2959
+ color: var(--vox-color-tip-1);
2960
+ }
2961
+
2962
+ .warning {
2963
+ background-color: var(--vox-color-warning-soft);
2964
+ }
2965
+ .warning .heading {
2966
+ color: var(--vox-color-warning-1);
2967
+ }
2968
+
2969
+ .danger {
2970
+ background-color: var(--vox-color-danger-soft);
2971
+ }
2972
+ .danger .heading {
2973
+ color: var(--vox-color-danger-1);
2974
+ }
2975
+
2976
+ ::slotted(p:first-child) {
2977
+ margin-top: 0;
2978
+ }
2979
+
2980
+ ::slotted(p:last-child) {
2981
+ margin-bottom: 0;
2982
+ }
2983
+ `;
2984
+ Ke([
2985
+ n()
2986
+ ], Q.prototype, "variant", 2);
2987
+ Ke([
2988
+ n()
2989
+ ], Q.prototype, "heading", 2);
2990
+ Q = Ke([
2991
+ d("vox-callout")
2992
+ ], Q);
2993
+ var bt = Object.defineProperty, gt = Object.getOwnPropertyDescriptor, Oe = (t, o, a, r) => {
2994
+ for (var e = r > 1 ? void 0 : r ? gt(o, a) : o, s = t.length - 1, i; s >= 0; s--)
2995
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
2996
+ return r && e && bt(o, a, e), e;
2997
+ };
2998
+ let z = class extends v {
2999
+ constructor() {
3000
+ super(...arguments), this.heading = "", this.hasIcon = !1, this.hasBadge = !1, this.hasFooter = !1;
3001
+ }
3002
+ handleIconSlotChange(t) {
3003
+ const o = t.target;
3004
+ this.hasIcon = o.assignedNodes({ flatten: !0 }).length > 0, this.requestUpdate();
3005
+ }
3006
+ handleBadgeSlotChange(t) {
3007
+ const o = t.target;
3008
+ this.hasBadge = o.assignedNodes({ flatten: !0 }).length > 0, this.requestUpdate();
3009
+ }
3010
+ handleFooterSlotChange(t) {
3011
+ const o = t.target;
3012
+ this.hasFooter = o.assignedNodes({ flatten: !0 }).length > 0, this.requestUpdate();
3013
+ }
3014
+ render() {
3015
+ const t = l`
3016
+ <div class="badge ${this.hasBadge ? "has-badge" : ""}">
3017
+ <slot name="badge" @slotchange=${this.handleBadgeSlotChange}></slot>
3018
+ </div>
3019
+ <div class="icon ${this.hasIcon ? "has-icon" : ""}">
3020
+ <slot name="icon" @slotchange=${this.handleIconSlotChange}></slot>
3021
+ </div>
3022
+ <h3 class="heading">${this.heading}</h3>
3023
+ <div class="body"><slot></slot></div>
3024
+ <div class="footer ${this.hasFooter ? "has-footer" : ""}">
3025
+ <slot name="footer" @slotchange=${this.handleFooterSlotChange}></slot>
3026
+ </div>
3027
+ `;
3028
+ return this.href !== void 0 ? l`<a class="card" href=${this.href} target=${this.target ?? p}>${t}</a>` : l`<div class="card">${t}</div>`;
3029
+ }
3030
+ };
3031
+ z.styles = c`
3032
+ :host {
3033
+ display: block;
3034
+ }
3035
+
3036
+ .card {
3037
+ position: relative;
3038
+ display: flex;
3039
+ flex-direction: column;
3040
+ height: 100%;
3041
+ box-sizing: border-box;
3042
+ background-color: var(--vox-color-bg-soft);
3043
+ border: 1px solid var(--vox-color-bg-soft);
3044
+ border-radius: var(--vox-radius-lg);
3045
+ padding: var(--vox-space-6);
3046
+ font-family: var(--vox-font-family-base);
3047
+ text-decoration: none;
3048
+ transition: border-color var(--vox-transition-base);
3049
+ }
3050
+
3051
+ .badge {
3052
+ position: absolute;
3053
+ top: var(--vox-space-6);
3054
+ right: var(--vox-space-6);
3055
+ }
3056
+
3057
+ .badge:not(.has-badge) {
3058
+ display: none;
3059
+ }
3060
+
3061
+ a.card:hover,
3062
+ a.card:focus-visible {
3063
+ border-color: var(--vox-color-brand-1);
3064
+ }
3065
+
3066
+ a.card:focus-visible {
3067
+ outline: 2px solid var(--vox-color-brand-1);
3068
+ outline-offset: 2px;
3069
+ }
3070
+
3071
+ .icon {
3072
+ display: flex;
3073
+ align-items: center;
3074
+ justify-content: center;
3075
+ width: 48px;
3076
+ height: 48px;
3077
+ margin-bottom: var(--vox-space-4);
3078
+ background-color: var(--vox-color-bg-elv);
3079
+ border-radius: var(--vox-radius-md);
3080
+ font-size: 24px;
3081
+ }
3082
+
3083
+ .icon:not(.has-icon) {
3084
+ display: none;
3085
+ }
3086
+
3087
+ .heading {
3088
+ margin: 0;
3089
+ font-size: 16px;
3090
+ font-weight: 600;
3091
+ line-height: 1.5;
3092
+ color: var(--vox-color-text-1);
3093
+ }
3094
+
3095
+ .body {
3096
+ margin-top: var(--vox-space-2);
3097
+ font-size: 14px;
3098
+ line-height: 1.6;
3099
+ color: var(--vox-color-text-2);
3100
+ }
3101
+
3102
+ .footer {
3103
+ margin-top: auto;
3104
+ padding-top: var(--vox-space-4);
3105
+ }
3106
+
3107
+ .footer:not(.has-footer) {
3108
+ display: none;
3109
+ }
3110
+ `;
3111
+ Oe([
3112
+ n()
3113
+ ], z.prototype, "heading", 2);
3114
+ Oe([
3115
+ n()
3116
+ ], z.prototype, "href", 2);
3117
+ Oe([
3118
+ n()
3119
+ ], z.prototype, "target", 2);
3120
+ z = Oe([
3121
+ d("vox-card")
3122
+ ], z);
3123
+ var mt = Object.defineProperty, yt = Object.getOwnPropertyDescriptor, lo = (t, o, a, r) => {
3124
+ for (var e = r > 1 ? void 0 : r ? yt(o, a) : o, s = t.length - 1, i; s >= 0; s--)
3125
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
3126
+ return r && e && mt(o, a, e), e;
3127
+ };
3128
+ let be = class extends v {
3129
+ constructor() {
3130
+ super(...arguments), this.heading = "", this.hasBody = !1, this.hasActions = !1;
3131
+ }
3132
+ handleBodySlotChange(t) {
3133
+ const o = t.target;
3134
+ this.hasBody = o.assignedNodes({ flatten: !0 }).length > 0, this.requestUpdate();
3135
+ }
3136
+ handleActionsSlotChange(t) {
3137
+ const o = t.target;
3138
+ this.hasActions = o.assignedNodes({ flatten: !0 }).length > 0, this.requestUpdate();
3139
+ }
3140
+ render() {
3141
+ return l`
3142
+ <div class="band">
3143
+ ${this.heading ? l`<h2 class="heading">${this.heading}</h2>` : p}
3144
+ <div class="body ${this.hasBody ? "has-content" : ""}">
3145
+ <slot @slotchange=${this.handleBodySlotChange}></slot>
3146
+ </div>
3147
+ <div class="actions ${this.hasActions ? "has-content" : ""}">
3148
+ <slot name="actions" @slotchange=${this.handleActionsSlotChange}></slot>
3149
+ </div>
3150
+ </div>
3151
+ `;
3152
+ }
3153
+ };
3154
+ be.styles = c`
3155
+ :host {
3156
+ display: block;
3157
+ font-family: var(--vox-font-family-base);
3158
+ }
3159
+
3160
+ .band {
3161
+ text-align: center;
3162
+ padding: var(--vox-space-8);
3163
+ background-color: var(--vox-color-bg-soft);
3164
+ border-radius: var(--vox-radius-lg);
3165
+ }
3166
+
3167
+ .heading {
3168
+ margin: 0;
3169
+ font-family: var(--vox-font-family-display);
3170
+ font-size: 28px;
3171
+ font-weight: 600;
3172
+ line-height: 1.3;
3173
+ color: var(--vox-color-text-1);
3174
+ }
3175
+
3176
+ .body {
3177
+ max-width: 36rem;
3178
+ margin: var(--vox-space-3) auto 0;
3179
+ font-size: 16px;
3180
+ line-height: 1.6;
3181
+ color: var(--vox-color-text-2);
3182
+ }
3183
+
3184
+ .body:not(.has-content) {
3185
+ display: none;
3186
+ }
3187
+
3188
+ .body ::slotted(a) {
3189
+ color: var(--vox-color-brand-1);
3190
+ text-decoration: underline;
3191
+ }
3192
+
3193
+ .body ::slotted(a:hover) {
3194
+ color: var(--vox-color-brand-2);
3195
+ }
3196
+
3197
+ .actions {
3198
+ display: flex;
3199
+ gap: var(--vox-space-3);
3200
+ justify-content: center;
3201
+ flex-wrap: wrap;
3202
+ margin-top: var(--vox-space-6);
3203
+ }
3204
+
3205
+ .actions:not(.has-content) {
3206
+ display: none;
3207
+ }
3208
+ `;
3209
+ lo([
3210
+ n()
3211
+ ], be.prototype, "heading", 2);
3212
+ be = lo([
3213
+ d("vox-cta-band")
3214
+ ], be);
3215
+ var wt = Object.defineProperty, $t = Object.getOwnPropertyDescriptor, co = (t, o, a, r) => {
3216
+ for (var e = r > 1 ? void 0 : r ? $t(o, a) : o, s = t.length - 1, i; s >= 0; s--)
3217
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
3218
+ return r && e && wt(o, a, e), e;
3219
+ };
3220
+ let ge = class extends v {
3221
+ constructor() {
3222
+ super(...arguments), this.heading = "";
3223
+ }
3224
+ render() {
3225
+ return l`
3226
+ <div class="empty">
3227
+ <div class="icon"><slot name="icon"></slot></div>
3228
+ <h3 class="heading">${this.heading}</h3>
3229
+ <div class="body"><slot></slot></div>
3230
+ <div class="actions"><slot name="actions"></slot></div>
3231
+ </div>
3232
+ `;
3233
+ }
3234
+ };
3235
+ ge.styles = c`
3236
+ :host {
3237
+ display: block;
3238
+ font-family: var(--vox-font-family-base);
3239
+ }
3240
+
3241
+ .empty {
3242
+ display: flex;
3243
+ flex-direction: column;
3244
+ align-items: center;
3245
+ text-align: center;
3246
+ padding: var(--vox-space-8);
3247
+ border: 1px dashed var(--vox-color-border);
3248
+ border-radius: var(--vox-radius-lg);
3249
+ }
3250
+
3251
+ .icon {
3252
+ font-size: 32px;
3253
+ margin-bottom: var(--vox-space-3);
3254
+ }
3255
+
3256
+ .heading {
3257
+ margin: 0;
3258
+ font-size: 18px;
3259
+ font-weight: 600;
3260
+ color: var(--vox-color-text-1);
3261
+ }
3262
+
3263
+ .body {
3264
+ max-width: 32rem;
3265
+ margin-top: var(--vox-space-2);
3266
+ font-size: 14px;
3267
+ line-height: 1.6;
3268
+ color: var(--vox-color-text-2);
3269
+ }
3270
+
3271
+ .actions {
3272
+ display: flex;
3273
+ gap: var(--vox-space-3);
3274
+ flex-wrap: wrap;
3275
+ justify-content: center;
3276
+ margin-top: var(--vox-space-4);
3277
+ }
3278
+ `;
3279
+ co([
3280
+ n()
3281
+ ], ge.prototype, "heading", 2);
3282
+ ge = co([
3283
+ d("vox-empty-state")
3284
+ ], ge);
3285
+ var _t = Object.defineProperty, Ot = Object.getOwnPropertyDescriptor, Ge = (t, o, a, r) => {
3286
+ for (var e = r > 1 ? void 0 : r ? Ot(o, a) : o, s = t.length - 1, i; s >= 0; s--)
3287
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
3288
+ return r && e && _t(o, a, e), e;
3289
+ };
3290
+ let Se = class extends v {
3291
+ render() {
3292
+ return l`
3293
+ <footer>
3294
+ <div class="inner">
3295
+ <div class="columns"><slot></slot></div>
3296
+ <div class="bottom"><slot name="bottom"></slot></div>
3297
+ </div>
3298
+ </footer>
3299
+ `;
3300
+ }
3301
+ };
3302
+ Se.styles = c`
3303
+ :host {
3304
+ display: block;
3305
+ font-family: var(--vox-font-family-base);
3306
+ background-color: var(--vox-color-bg-alt);
3307
+ border-top: 1px solid var(--vox-color-divider);
3308
+ }
3309
+
3310
+ .inner {
3311
+ max-width: 1280px;
3312
+ margin: 0 auto;
3313
+ padding: var(--vox-space-8) var(--vox-space-6);
3314
+ }
3315
+
3316
+ .columns {
3317
+ display: grid;
3318
+ grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
3319
+ gap: var(--vox-space-6);
3320
+ }
3321
+
3322
+ .bottom {
3323
+ margin-top: var(--vox-space-8);
3324
+ padding-top: var(--vox-space-4);
3325
+ border-top: 1px solid var(--vox-color-divider);
3326
+ font-size: 13px;
3327
+ color: var(--vox-color-text-3);
3328
+ }
3329
+ `;
3330
+ Se = Ge([
3331
+ d("vox-footer")
3332
+ ], Se);
3333
+ let me = class extends v {
3334
+ constructor() {
3335
+ super(...arguments), this.heading = "";
3336
+ }
3337
+ render() {
3338
+ return l`
3339
+ <h3 class="heading">${this.heading}</h3>
3340
+ <div class="links"><slot></slot></div>
3341
+ `;
3342
+ }
3343
+ };
3344
+ me.styles = c`
3345
+ :host {
3346
+ display: block;
3347
+ font-family: var(--vox-font-family-base);
3348
+ }
3349
+
3350
+ .heading {
3351
+ margin: 0 0 var(--vox-space-3);
3352
+ font-size: 13px;
3353
+ font-weight: 600;
3354
+ letter-spacing: 0.05em;
3355
+ text-transform: uppercase;
3356
+ color: var(--vox-color-text-1);
3357
+ }
3358
+
3359
+ .links {
3360
+ display: flex;
3361
+ flex-direction: column;
3362
+ gap: var(--vox-space-2);
3363
+ }
3364
+
3365
+ ::slotted(a) {
3366
+ color: var(--vox-color-text-2);
3367
+ font-size: 14px;
3368
+ text-decoration: none;
3369
+ }
3370
+
3371
+ ::slotted(a:hover) {
3372
+ color: var(--vox-color-brand-1);
3373
+ text-decoration: underline;
3374
+ }
3375
+ `;
3376
+ Ge([
3377
+ n()
3378
+ ], me.prototype, "heading", 2);
3379
+ me = Ge([
3380
+ d("vox-footer-column")
3381
+ ], me);
3382
+ var Pt = Object.defineProperty, Ct = Object.getOwnPropertyDescriptor, Pe = (t, o, a, r) => {
3383
+ for (var e = r > 1 ? void 0 : r ? Ct(o, a) : o, s = t.length - 1, i; s >= 0; s--)
3384
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
3385
+ return r && e && Pt(o, a, e), e;
3386
+ };
3387
+ let E = class extends v {
3388
+ constructor() {
3389
+ super(...arguments), this.cols = 0, this.min = "240px", this.gap = "md";
3390
+ }
3391
+ updated() {
3392
+ this.style.gridTemplateColumns = this.cols > 0 ? `repeat(${this.cols}, minmax(0, 1fr))` : `repeat(auto-fit, minmax(min(${this.min}, 100%), 1fr))`;
3393
+ }
3394
+ render() {
3395
+ return l`<slot></slot>`;
3396
+ }
3397
+ };
3398
+ E.styles = c`
3399
+ :host {
3400
+ display: grid;
3401
+ }
3402
+
3403
+ :host([gap='sm']) {
3404
+ gap: var(--vox-space-2);
3405
+ }
3406
+
3407
+ :host([gap='md']) {
3408
+ gap: var(--vox-space-4);
3409
+ }
3410
+
3411
+ :host([gap='lg']) {
3412
+ gap: var(--vox-space-6);
3413
+ }
3414
+ `;
3415
+ Pe([
3416
+ n({ type: Number })
3417
+ ], E.prototype, "cols", 2);
3418
+ Pe([
3419
+ n()
3420
+ ], E.prototype, "min", 2);
3421
+ Pe([
3422
+ n({ reflect: !0 })
3423
+ ], E.prototype, "gap", 2);
3424
+ E = Pe([
3425
+ d("vox-grid")
3426
+ ], E);
3427
+ var jt = Object.defineProperty, Dt = Object.getOwnPropertyDescriptor, Xe = (t, o, a, r) => {
3428
+ for (var e = r > 1 ? void 0 : r ? Dt(o, a) : o, s = t.length - 1, i; s >= 0; s--)
3429
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
3430
+ return r && e && jt(o, a, e), e;
3431
+ };
3432
+ let W = class extends v {
3433
+ constructor() {
3434
+ super(...arguments), this.eyebrow = "", this.heading = "", this.hasActions = !1;
3435
+ }
3436
+ handleActionsSlotChange(t) {
3437
+ const o = t.target;
3438
+ this.hasActions = o.assignedNodes({ flatten: !0 }).length > 0, this.requestUpdate();
3439
+ }
3440
+ render() {
3441
+ return l`
3442
+ <header class="hero">
3443
+ ${this.eyebrow ? l`<p class="eyebrow">${this.eyebrow}</p>` : p}
3444
+ <h1 class="heading">${this.heading}</h1>
3445
+ <div class="body"><slot></slot></div>
3446
+ <div class="actions ${this.hasActions ? "has-content" : ""}">
3447
+ <slot name="actions" @slotchange=${this.handleActionsSlotChange}></slot>
3448
+ </div>
3449
+ </header>
3450
+ `;
3451
+ }
3452
+ };
3453
+ W.styles = c`
3454
+ :host {
3455
+ display: block;
3456
+ font-family: var(--vox-font-family-base);
3457
+ }
3458
+
3459
+ .hero {
3460
+ padding: var(--vox-space-8) 0;
3461
+ border-bottom: 1px solid var(--vox-color-divider);
3462
+ }
3463
+
3464
+ .eyebrow {
3465
+ margin: 0 0 var(--vox-space-2);
3466
+ font-size: 13px;
3467
+ font-weight: 600;
3468
+ letter-spacing: 0.05em;
3469
+ text-transform: uppercase;
3470
+ color: var(--vox-color-brand-1);
3471
+ }
3472
+
3473
+ .heading {
3474
+ margin: 0;
3475
+ font-family: var(--vox-font-family-display);
3476
+ font-size: 36px;
3477
+ font-weight: 600;
3478
+ line-height: 1.25;
3479
+ color: var(--vox-color-text-1);
3480
+ }
3481
+
3482
+ .body {
3483
+ max-width: 44rem;
3484
+ margin-top: var(--vox-space-3);
3485
+ font-size: 17px;
3486
+ line-height: 1.7;
3487
+ color: var(--vox-color-text-2);
3488
+ }
3489
+
3490
+ .body ::slotted(a) {
3491
+ color: var(--vox-color-brand-1);
3492
+ text-decoration: underline;
3493
+ }
3494
+
3495
+ .body ::slotted(a:hover) {
3496
+ color: var(--vox-color-brand-2);
3497
+ }
3498
+
3499
+ .actions {
3500
+ display: flex;
3501
+ gap: var(--vox-space-3);
3502
+ flex-wrap: wrap;
3503
+ margin-top: var(--vox-space-6);
3504
+ }
3505
+
3506
+ .actions:not(.has-content) {
3507
+ display: none;
3508
+ }
3509
+ `;
3510
+ Xe([
3511
+ n()
3512
+ ], W.prototype, "eyebrow", 2);
3513
+ Xe([
3514
+ n()
3515
+ ], W.prototype, "heading", 2);
3516
+ W = Xe([
3517
+ d("vox-hero")
3518
+ ], W);
3519
+ var kt = Object.defineProperty, zt = Object.getOwnPropertyDescriptor, Ce = (t, o, a, r) => {
3520
+ for (var e = r > 1 ? void 0 : r ? zt(o, a) : o, s = t.length - 1, i; s >= 0; s--)
3521
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
3522
+ return r && e && kt(o, a, e), e;
3523
+ };
3524
+ let Ve = class extends v {
3525
+ render() {
3526
+ return l`<slot></slot>`;
3527
+ }
3528
+ };
3529
+ Ve.styles = c`
3530
+ :host {
3531
+ display: grid;
3532
+ grid-template-columns: repeat(auto-fit, minmax(min(260px, 100%), 1fr));
3533
+ gap: var(--vox-space-4);
3534
+ }
3535
+ `;
3536
+ Ve = Ce([
3537
+ d("vox-link-hub")
3538
+ ], Ve);
3539
+ let Y = class extends v {
3540
+ constructor() {
3541
+ super(...arguments), this.href = "#", this.heading = "";
3542
+ }
3543
+ render() {
3544
+ return l`
3545
+ <a href=${this.href}>
3546
+ <span class="heading">
3547
+ ${this.heading}
3548
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
3549
+ <path d="M5 12h14" />
3550
+ <path d="m13 6 6 6-6 6" />
3551
+ </svg>
3552
+ </span>
3553
+ <span class="body"><slot></slot></span>
3554
+ </a>
3555
+ `;
3556
+ }
3557
+ };
3558
+ Y.styles = c`
3559
+ :host {
3560
+ display: block;
3561
+ font-family: var(--vox-font-family-base);
3562
+ }
3563
+
3564
+ a {
3565
+ display: block;
3566
+ height: 100%;
3567
+ box-sizing: border-box;
3568
+ padding: var(--vox-space-4);
3569
+ border-bottom: 2px solid var(--vox-color-divider);
3570
+ text-decoration: none;
3571
+ transition: border-color var(--vox-transition-base);
3572
+ }
3573
+
3574
+ a:hover,
3575
+ a:focus-visible {
3576
+ border-bottom-color: var(--vox-color-brand-1);
3577
+ }
3578
+
3579
+ a:focus-visible {
3580
+ outline: 2px solid var(--vox-color-brand-1);
3581
+ outline-offset: 2px;
3582
+ }
3583
+
3584
+ .heading {
3585
+ display: flex;
3586
+ align-items: center;
3587
+ gap: var(--vox-space-2);
3588
+ font-size: 16px;
3589
+ font-weight: 600;
3590
+ color: var(--vox-color-brand-1);
3591
+ }
3592
+
3593
+ .heading svg {
3594
+ width: 14px;
3595
+ height: 14px;
3596
+ transition: transform var(--vox-transition-fast);
3597
+ }
3598
+
3599
+ a:hover .heading svg {
3600
+ transform: translateX(3px);
3601
+ }
3602
+
3603
+ .body {
3604
+ margin-top: var(--vox-space-1);
3605
+ font-size: 14px;
3606
+ line-height: 1.6;
3607
+ color: var(--vox-color-text-2);
3608
+ }
3609
+ `;
3610
+ Ce([
3611
+ n()
3612
+ ], Y.prototype, "href", 2);
3613
+ Ce([
3614
+ n()
3615
+ ], Y.prototype, "heading", 2);
3616
+ Y = Ce([
3617
+ d("vox-link-hub-item")
3618
+ ], Y);
3619
+ var Et = Object.defineProperty, St = Object.getOwnPropertyDescriptor, Qe = (t, o, a, r) => {
3620
+ for (var e = r > 1 ? void 0 : r ? St(o, a) : o, s = t.length - 1, i; s >= 0; s--)
3621
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
3622
+ return r && e && Et(o, a, e), e;
3623
+ };
3624
+ let Z = class extends v {
3625
+ constructor() {
3626
+ super(...arguments), this.size = "md", this.label = "Loading";
3627
+ }
3628
+ render() {
3629
+ return l`
3630
+ <div role="status">
3631
+ <div class="spinner"></div>
3632
+ <span class="visually-hidden">${this.label}</span>
3633
+ </div>
3634
+ `;
3635
+ }
3636
+ };
3637
+ Z.styles = c`
3638
+ :host {
3639
+ display: inline-block;
3640
+ }
3641
+
3642
+ .spinner {
3643
+ box-sizing: border-box;
3644
+ border-radius: 50%;
3645
+ border-style: solid;
3646
+ border-color: var(--vox-color-brand-soft);
3647
+ border-top-color: var(--vox-color-brand-3);
3648
+ animation: spin 0.8s linear infinite;
3649
+ }
3650
+
3651
+ :host([size='sm']) .spinner {
3652
+ width: 16px;
3653
+ height: 16px;
3654
+ border-width: 2px;
3655
+ }
3656
+
3657
+ :host([size='md']) .spinner {
3658
+ width: 28px;
3659
+ height: 28px;
3660
+ border-width: 3px;
3661
+ }
3662
+
3663
+ :host([size='lg']) .spinner {
3664
+ width: 44px;
3665
+ height: 44px;
3666
+ border-width: 4px;
3667
+ }
3668
+
3669
+ @keyframes spin {
3670
+ to {
3671
+ transform: rotate(360deg);
3672
+ }
3673
+ }
3674
+
3675
+ @media (prefers-reduced-motion: reduce) {
3676
+ .spinner {
3677
+ animation-duration: 2.4s;
3678
+ }
3679
+ }
3680
+
3681
+ .visually-hidden {
3682
+ position: absolute;
3683
+ width: 1px;
3684
+ height: 1px;
3685
+ overflow: hidden;
3686
+ clip: rect(0 0 0 0);
3687
+ white-space: nowrap;
3688
+ }
3689
+ `;
3690
+ Qe([
3691
+ n({ reflect: !0 })
3692
+ ], Z.prototype, "size", 2);
3693
+ Qe([
3694
+ n()
3695
+ ], Z.prototype, "label", 2);
3696
+ Z = Qe([
3697
+ d("vox-loader")
3698
+ ], Z);
3699
+ var Vt = Object.defineProperty, Bt = Object.getOwnPropertyDescriptor, vo = (t, o, a, r) => {
3700
+ for (var e = r > 1 ? void 0 : r ? Bt(o, a) : o, s = t.length - 1, i; s >= 0; s--)
3701
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
3702
+ return r && e && Vt(o, a, e), e;
3703
+ };
3704
+ let ye = class extends v {
3705
+ constructor() {
3706
+ super(...arguments), this.label = "Pagination";
3707
+ }
3708
+ render() {
3709
+ return l`
3710
+ <nav aria-label=${this.label}>
3711
+ <slot></slot>
3712
+ </nav>
3713
+ `;
3714
+ }
3715
+ };
3716
+ ye.styles = c`
3717
+ :host {
3718
+ display: block;
3719
+ font-family: var(--vox-font-family-base);
3720
+ }
3721
+
3722
+ nav {
3723
+ display: flex;
3724
+ gap: var(--vox-space-1);
3725
+ flex-wrap: wrap;
3726
+ }
3727
+
3728
+ ::slotted(a) {
3729
+ display: inline-flex;
3730
+ align-items: center;
3731
+ justify-content: center;
3732
+ min-width: 34px;
3733
+ height: 34px;
3734
+ padding: 0 var(--vox-space-2);
3735
+ border-radius: var(--vox-radius-md);
3736
+ color: var(--vox-color-text-2);
3737
+ font-size: 14px;
3738
+ font-weight: 500;
3739
+ text-decoration: none;
3740
+ transition:
3741
+ color var(--vox-transition-fast),
3742
+ background-color var(--vox-transition-fast);
3743
+ }
3744
+
3745
+ ::slotted(a:hover) {
3746
+ color: var(--vox-color-brand-1);
3747
+ background-color: var(--vox-color-brand-soft);
3748
+ }
3749
+
3750
+ ::slotted(a[aria-current='page']) {
3751
+ background-color: var(--vox-color-brand-3);
3752
+ color: var(--vox-color-text-inverse);
3753
+ font-weight: 600;
3754
+ }
3755
+ `;
3756
+ vo([
3757
+ n()
3758
+ ], ye.prototype, "label", 2);
3759
+ ye = vo([
3760
+ d("vox-pagination")
3761
+ ], ye);
3762
+ var At = Object.defineProperty, qt = Object.getOwnPropertyDescriptor, We = (t, o, a, r) => {
3763
+ for (var e = r > 1 ? void 0 : r ? qt(o, a) : o, s = t.length - 1, i; s >= 0; s--)
3764
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
3765
+ return r && e && At(o, a, e), e;
3766
+ };
3767
+ let J = class extends v {
3768
+ constructor() {
3769
+ super(...arguments), this.attribution = "", this.detail = "";
3770
+ }
3771
+ render() {
3772
+ return l`
3773
+ <blockquote>
3774
+ <div class="text"><slot></slot></div>
3775
+ ${this.attribution ? l`
3776
+ <footer>
3777
+ <span class="attribution">${this.attribution}</span>
3778
+ ${this.detail ? l`<span class="detail"> — ${this.detail}</span>` : p}
3779
+ </footer>
3780
+ ` : p}
3781
+ </blockquote>
3782
+ `;
3783
+ }
3784
+ };
3785
+ J.styles = c`
3786
+ :host {
3787
+ display: block;
3788
+ font-family: var(--vox-font-family-base);
3789
+ }
3790
+
3791
+ blockquote {
3792
+ margin: 0;
3793
+ padding-left: var(--vox-space-6);
3794
+ border-left: 4px solid var(--vox-color-brand-3);
3795
+ }
3796
+
3797
+ .text {
3798
+ font-family: var(--vox-font-family-display);
3799
+ font-style: italic;
3800
+ font-size: 20px;
3801
+ line-height: 1.6;
3802
+ color: var(--vox-color-text-1);
3803
+ }
3804
+
3805
+ .text::before {
3806
+ content: '“';
3807
+ }
3808
+
3809
+ .text::after {
3810
+ content: '”';
3811
+ }
3812
+
3813
+ footer {
3814
+ margin-top: var(--vox-space-3);
3815
+ font-size: 14px;
3816
+ }
3817
+
3818
+ .attribution {
3819
+ font-weight: 600;
3820
+ color: var(--vox-color-text-1);
3821
+ }
3822
+
3823
+ .detail {
3824
+ color: var(--vox-color-text-2);
3825
+ }
3826
+ `;
3827
+ We([
3828
+ n()
3829
+ ], J.prototype, "attribution", 2);
3830
+ We([
3831
+ n()
3832
+ ], J.prototype, "detail", 2);
3833
+ J = We([
3834
+ d("vox-quote")
3835
+ ], J);
3836
+ var Lt = Object.defineProperty, Nt = Object.getOwnPropertyDescriptor, C = (t, o, a, r) => {
3837
+ for (var e = r > 1 ? void 0 : r ? Nt(o, a) : o, s = t.length - 1, i; s >= 0; s--)
3838
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
3839
+ return r && e && Lt(o, a, e), e;
3840
+ };
3841
+ let we = class extends v {
3842
+ constructor() {
3843
+ super(...arguments), this.heading = "", this.hasDescription = !1;
3844
+ }
3845
+ handleDescriptionSlotChange(t) {
3846
+ const o = t.target;
3847
+ this.hasDescription = o.assignedNodes({ flatten: !0 }).length > 0, this.requestUpdate();
3848
+ }
3849
+ render() {
3850
+ return l`
3851
+ <h2 class="heading">${this.heading}</h2>
3852
+ <div class="description ${this.hasDescription ? "has-content" : ""}">
3853
+ <slot
3854
+ name="description"
3855
+ @slotchange=${this.handleDescriptionSlotChange}
3856
+ ></slot>
3857
+ </div>
3858
+ <div class="grid">
3859
+ <slot></slot>
3860
+ </div>
3861
+ `;
3862
+ }
3863
+ };
3864
+ we.styles = c`
3865
+ :host {
3866
+ display: block;
3867
+ font-family: var(--vox-font-family-base);
3868
+ }
3869
+
3870
+ .heading {
3871
+ margin: 0;
3872
+ font-size: 22px;
3873
+ font-weight: 700;
3874
+ line-height: 1.3;
3875
+ color: var(--vox-color-text-1);
3876
+ }
3877
+
3878
+ .description {
3879
+ margin: var(--vox-space-2) 0 0;
3880
+ font-size: 15px;
3881
+ line-height: 1.7;
3882
+ color: var(--vox-color-text-2);
3883
+ }
3884
+
3885
+ .description:not(.has-content) {
3886
+ display: none;
3887
+ }
3888
+
3889
+ .grid {
3890
+ display: grid;
3891
+ grid-template-columns: repeat(auto-fit, minmax(min(220px, 100%), 1fr));
3892
+ gap: var(--vox-space-4);
3893
+ margin-top: var(--vox-space-6);
3894
+ }
3895
+ `;
3896
+ C([
3897
+ n()
3898
+ ], we.prototype, "heading", 2);
3899
+ we = C([
3900
+ d("vox-sponsor-tier")
3901
+ ], we);
3902
+ let _ = class extends v {
3903
+ constructor() {
3904
+ super(...arguments), this.name = "", this.hasBody = !1;
3905
+ }
3906
+ handleBodySlotChange(t) {
3907
+ const o = t.target;
3908
+ this.hasBody = o.assignedNodes({ flatten: !0 }).length > 0, this.requestUpdate();
3909
+ }
3910
+ render() {
3911
+ const t = l`
3912
+ <div class="logo ${this.logo ? "has-logo" : ""}">
3913
+ ${this.logo ? l`<img src=${this.logo} alt=${this.name} />` : p}
3914
+ </div>
3915
+ <span class="name">${this.name}</span>
3916
+ <div class="body ${this.hasBody ? "has-content" : ""}">
3917
+ <slot @slotchange=${this.handleBodySlotChange}></slot>
3918
+ </div>
3919
+ `;
3920
+ return this.href !== void 0 ? l`<a
3921
+ class="sponsor"
3922
+ href=${this.href}
3923
+ target=${this.target ?? p}
3924
+ >${t}</a
3925
+ >` : l`<div class="sponsor">${t}</div>`;
3926
+ }
3927
+ };
3928
+ _.styles = c`
3929
+ :host {
3930
+ display: block;
3931
+ }
3932
+
3933
+ .sponsor {
3934
+ display: flex;
3935
+ flex-direction: column;
3936
+ height: 100%;
3937
+ box-sizing: border-box;
3938
+ gap: var(--vox-space-3);
3939
+ padding: var(--vox-space-4);
3940
+ background-color: var(--vox-color-bg-soft);
3941
+ border: 1px solid var(--vox-color-bg-soft);
3942
+ border-radius: var(--vox-radius-lg);
3943
+ font-family: var(--vox-font-family-base);
3944
+ text-decoration: none;
3945
+ transition: border-color var(--vox-transition-base);
3946
+ }
3947
+
3948
+ a.sponsor:hover,
3949
+ a.sponsor:focus-visible {
3950
+ border-color: var(--vox-color-brand-1);
3951
+ }
3952
+
3953
+ a.sponsor:focus-visible {
3954
+ outline: 2px solid var(--vox-color-brand-1);
3955
+ outline-offset: 2px;
3956
+ }
3957
+
3958
+ .logo {
3959
+ display: flex;
3960
+ align-items: center;
3961
+ justify-content: center;
3962
+ height: 64px;
3963
+ background-color: var(--vox-color-bg-elv);
3964
+ border-radius: var(--vox-radius-md);
3965
+ }
3966
+
3967
+ .logo:not(.has-logo) {
3968
+ display: none;
3969
+ }
3970
+
3971
+ .logo img {
3972
+ max-width: 80%;
3973
+ max-height: 40px;
3974
+ object-fit: contain;
3975
+ }
3976
+
3977
+ .name {
3978
+ font-size: 15px;
3979
+ font-weight: 600;
3980
+ line-height: 1.4;
3981
+ color: var(--vox-color-text-1);
3982
+ }
3983
+
3984
+ .body {
3985
+ font-size: 13px;
3986
+ line-height: 1.6;
3987
+ color: var(--vox-color-text-2);
3988
+ }
3989
+
3990
+ .body:not(.has-content) {
3991
+ display: none;
3992
+ }
3993
+ `;
3994
+ C([
3995
+ n()
3996
+ ], _.prototype, "name", 2);
3997
+ C([
3998
+ n()
3999
+ ], _.prototype, "href", 2);
4000
+ C([
4001
+ n()
4002
+ ], _.prototype, "logo", 2);
4003
+ C([
4004
+ n()
4005
+ ], _.prototype, "target", 2);
4006
+ _ = C([
4007
+ d("vox-sponsor")
4008
+ ], _);
4009
+ var Mt = Object.defineProperty, Tt = Object.getOwnPropertyDescriptor, Ye = (t, o, a, r) => {
4010
+ for (var e = r > 1 ? void 0 : r ? Tt(o, a) : o, s = t.length - 1, i; s >= 0; s--)
4011
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
4012
+ return r && e && Mt(o, a, e), e;
4013
+ };
4014
+ let ee = class extends v {
4015
+ constructor() {
4016
+ super(...arguments), this.value = "", this.label = "";
4017
+ }
4018
+ render() {
4019
+ return l`
4020
+ <div class="value">${this.value}</div>
4021
+ <div class="label">${this.label}</div>
4022
+ <div class="description"><slot></slot></div>
4023
+ `;
4024
+ }
4025
+ };
4026
+ ee.styles = c`
4027
+ :host {
4028
+ display: block;
4029
+ font-family: var(--vox-font-family-base);
4030
+ }
4031
+
4032
+ .value {
4033
+ font-size: 40px;
4034
+ font-weight: 700;
4035
+ line-height: 1.1;
4036
+ color: var(--vox-color-brand-1);
4037
+ }
4038
+
4039
+ .label {
4040
+ margin-top: var(--vox-space-1);
4041
+ font-size: 14px;
4042
+ font-weight: 600;
4043
+ color: var(--vox-color-text-1);
4044
+ }
4045
+
4046
+ .description {
4047
+ margin-top: var(--vox-space-1);
4048
+ font-size: 13px;
4049
+ line-height: 1.6;
4050
+ color: var(--vox-color-text-2);
4051
+ }
4052
+ `;
4053
+ Ye([
4054
+ n()
4055
+ ], ee.prototype, "value", 2);
4056
+ Ye([
4057
+ n()
4058
+ ], ee.prototype, "label", 2);
4059
+ ee = Ye([
4060
+ d("vox-stat")
4061
+ ], ee);
4062
+ var Ft = Object.defineProperty, It = Object.getOwnPropertyDescriptor, de = (t, o, a, r) => {
4063
+ for (var e = r > 1 ? void 0 : r ? It(o, a) : o, s = t.length - 1, i; s >= 0; s--)
4064
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
4065
+ return r && e && Ft(o, a, e), e;
4066
+ };
4067
+ let Be = class extends v {
4068
+ numberSteps() {
4069
+ this.querySelectorAll("vox-step").forEach((t, o) => {
4070
+ t.number = o + 1;
4071
+ });
4072
+ }
4073
+ render() {
4074
+ return l`
4075
+ <div class="steps" role="list" aria-label="Progress">
4076
+ <slot @slotchange=${this.numberSteps}></slot>
4077
+ </div>
4078
+ `;
4079
+ }
4080
+ };
4081
+ Be.styles = c`
4082
+ :host {
4083
+ display: block;
4084
+ }
4085
+
4086
+ .steps {
4087
+ display: flex;
4088
+ align-items: flex-start;
4089
+ }
4090
+
4091
+ ::slotted(vox-step) {
4092
+ flex: 1 1 0;
4093
+ }
4094
+ `;
4095
+ Be = de([
4096
+ d("vox-step-indicator")
4097
+ ], Be);
4098
+ let S = class extends v {
4099
+ constructor() {
4100
+ super(...arguments), this.label = "", this.state = "upcoming", this.number = 1;
4101
+ }
4102
+ render() {
4103
+ return l`
4104
+ <div
4105
+ class="step"
4106
+ role="listitem"
4107
+ aria-current=${this.state === "current" ? "step" : "false"}
4108
+ >
4109
+ <span class="marker">
4110
+ ${this.state === "complete" ? l`<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
4111
+ <path d="m4 12 5 5L20 6" />
4112
+ </svg>` : this.number}
4113
+ </span>
4114
+ <span class="label">${this.label}</span>
4115
+ </div>
4116
+ `;
4117
+ }
4118
+ };
4119
+ S.styles = c`
4120
+ :host {
4121
+ display: block;
4122
+ font-family: var(--vox-font-family-base);
4123
+ }
4124
+
4125
+ .step {
4126
+ position: relative;
4127
+ display: flex;
4128
+ flex-direction: column;
4129
+ align-items: center;
4130
+ text-align: center;
4131
+ gap: var(--vox-space-2);
4132
+ padding: 0 var(--vox-space-2);
4133
+ }
4134
+
4135
+ /* Connector line to the previous step. */
4136
+ :host(:not(:first-child)) .step::before {
4137
+ content: '';
4138
+ position: absolute;
4139
+ top: 14px;
4140
+ right: 50%;
4141
+ width: 100%;
4142
+ height: 2px;
4143
+ background-color: var(--vox-color-divider);
4144
+ z-index: 0;
4145
+ }
4146
+
4147
+ :host([state='complete']) .step::before {
4148
+ background-color: var(--vox-color-brand-3);
4149
+ }
4150
+
4151
+ .marker {
4152
+ position: relative;
4153
+ z-index: 1;
4154
+ display: flex;
4155
+ align-items: center;
4156
+ justify-content: center;
4157
+ width: 28px;
4158
+ height: 28px;
4159
+ border-radius: 50%;
4160
+ border: 2px solid var(--vox-color-divider);
4161
+ background-color: var(--vox-color-bg);
4162
+ color: var(--vox-color-text-2);
4163
+ font-size: 13px;
4164
+ font-weight: 600;
4165
+ }
4166
+
4167
+ :host([state='complete']) .marker {
4168
+ background-color: var(--vox-color-brand-3);
4169
+ border-color: var(--vox-color-brand-3);
4170
+ color: var(--vox-color-text-inverse);
4171
+ }
4172
+
4173
+ :host([state='current']) .marker {
4174
+ border-color: var(--vox-color-brand-3);
4175
+ color: var(--vox-color-brand-1);
4176
+ }
4177
+
4178
+ .marker svg {
4179
+ width: 14px;
4180
+ height: 14px;
4181
+ }
4182
+
4183
+ .label {
4184
+ font-size: 13px;
4185
+ color: var(--vox-color-text-2);
4186
+ }
4187
+
4188
+ :host([state='current']) .label {
4189
+ font-weight: 600;
4190
+ color: var(--vox-color-text-1);
4191
+ }
4192
+ `;
4193
+ de([
4194
+ n()
4195
+ ], S.prototype, "label", 2);
4196
+ de([
4197
+ n({ reflect: !0 })
4198
+ ], S.prototype, "state", 2);
4199
+ de([
4200
+ n({ type: Number })
4201
+ ], S.prototype, "number", 2);
4202
+ S = de([
4203
+ d("vox-step")
4204
+ ], S);
4205
+ var Rt = Object.defineProperty, Ht = Object.getOwnPropertyDescriptor, je = (t, o, a, r) => {
4206
+ for (var e = r > 1 ? void 0 : r ? Ht(o, a) : o, s = t.length - 1, i; s >= 0; s--)
4207
+ (i = t[s]) && (e = (r ? i(o, a, e) : i(e)) || e);
4208
+ return r && e && Rt(o, a, e), e;
4209
+ };
4210
+ let Ae = class extends v {
4211
+ render() {
4212
+ return l`<slot></slot>`;
4213
+ }
4214
+ };
4215
+ Ae.styles = c`
4216
+ :host {
4217
+ display: block;
4218
+ }
4219
+ `;
4220
+ Ae = je([
4221
+ d("vox-timeline")
4222
+ ], Ae);
4223
+ let oe = class extends v {
4224
+ constructor() {
4225
+ super(...arguments), this.heading = "", this.date = "";
4226
+ }
4227
+ render() {
4228
+ return l`
4229
+ <div class="item">
4230
+ <span class="dot" aria-hidden="true"></span>
4231
+ ${this.date ? l`<div class="date">${this.date}</div>` : p}
4232
+ <h3 class="heading">${this.heading}</h3>
4233
+ <div class="body"><slot></slot></div>
4234
+ </div>
4235
+ `;
4236
+ }
4237
+ };
4238
+ oe.styles = c`
4239
+ :host {
4240
+ display: block;
4241
+ font-family: var(--vox-font-family-base);
4242
+ }
4243
+
4244
+ .item {
4245
+ position: relative;
4246
+ padding: 0 0 var(--vox-space-6) var(--vox-space-6);
4247
+ border-left: 2px solid var(--vox-color-divider);
4248
+ }
4249
+
4250
+ :host(:last-child) .item {
4251
+ border-left-color: transparent;
4252
+ padding-bottom: 0;
4253
+ }
4254
+
4255
+ .dot {
4256
+ position: absolute;
4257
+ top: 4px;
4258
+ left: -7px;
4259
+ width: 12px;
4260
+ height: 12px;
4261
+ border-radius: 50%;
4262
+ background-color: var(--vox-color-brand-3);
4263
+ border: 2px solid var(--vox-color-bg);
4264
+ }
4265
+
4266
+ .date {
4267
+ font-size: 12px;
4268
+ font-weight: 600;
4269
+ letter-spacing: 0.05em;
4270
+ text-transform: uppercase;
4271
+ color: var(--vox-color-text-3);
4272
+ }
4273
+
4274
+ .heading {
4275
+ margin: var(--vox-space-1) 0 0;
4276
+ font-size: 16px;
4277
+ font-weight: 600;
4278
+ color: var(--vox-color-text-1);
4279
+ }
4280
+
4281
+ .body {
4282
+ margin-top: var(--vox-space-1);
4283
+ font-size: 14px;
4284
+ line-height: 1.6;
4285
+ color: var(--vox-color-text-2);
4286
+ }
4287
+ `;
4288
+ je([
4289
+ n()
4290
+ ], oe.prototype, "heading", 2);
4291
+ je([
4292
+ n()
4293
+ ], oe.prototype, "date", 2);
4294
+ oe = je([
4295
+ d("vox-timeline-item")
4296
+ ], oe);
4297
+ export {
4298
+ ue as VoxAccordion,
4299
+ G as VoxAccordionItem,
4300
+ $ as VoxAlert,
4301
+ m as VoxAvatar,
4302
+ fe as VoxBadge,
4303
+ M as VoxBillboard,
4304
+ ze as VoxBreadcrumbs,
4305
+ x as VoxButton,
4306
+ X as VoxCalendarTile,
4307
+ Q as VoxCallout,
4308
+ z as VoxCard,
4309
+ q as VoxCheckbox,
4310
+ A as VoxCta,
4311
+ be as VoxCtaBand,
4312
+ w as VoxDialog,
4313
+ U as VoxDisclosure,
4314
+ K as VoxDropdown,
4315
+ ge as VoxEmptyState,
4316
+ u as VoxFileInput,
4317
+ Se as VoxFooter,
4318
+ me as VoxFooterColumn,
4319
+ E as VoxGrid,
4320
+ T as VoxHeader,
4321
+ W as VoxHero,
4322
+ f as VoxInput,
4323
+ ke as VoxInputGroup,
4324
+ Ve as VoxLinkHub,
4325
+ Y as VoxLinkHubItem,
4326
+ Z as VoxLoader,
4327
+ ye as VoxPagination,
4328
+ J as VoxQuote,
4329
+ k as VoxRadio,
4330
+ pe as VoxRadioGroup,
4331
+ L as VoxSelect,
4332
+ y as VoxSeriesNav,
4333
+ he as VoxSidenav,
4334
+ F as VoxSidenavGroup,
4335
+ I as VoxSidenavItem,
4336
+ _ as VoxSponsor,
4337
+ we as VoxSponsorTier,
4338
+ ee as VoxStat,
4339
+ S as VoxStep,
4340
+ Be as VoxStepIndicator,
4341
+ xe as VoxSubnav,
4342
+ N as VoxSwitch,
4343
+ R as VoxTab,
4344
+ H as VoxTabPanel,
4345
+ Ee as VoxTabs,
4346
+ g as VoxTextarea,
4347
+ D as VoxThemeToggle,
4348
+ Ae as VoxTimeline,
4349
+ oe as VoxTimelineItem
4350
+ };