soltana-ui 0.1.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 (104) hide show
  1. package/README.md +158 -0
  2. package/dist/config/index.d.ts +3 -0
  3. package/dist/config/index.js +7 -0
  4. package/dist/config/register.d.ts +27 -0
  5. package/dist/config/stylesheet.d.ts +13 -0
  6. package/dist/config/types.d.ts +177 -0
  7. package/dist/config/types.js +7 -0
  8. package/dist/config/validation.d.ts +29 -0
  9. package/dist/config/validation.js +59 -0
  10. package/dist/enhancers/accordion.d.ts +19 -0
  11. package/dist/enhancers/carousel.d.ts +21 -0
  12. package/dist/enhancers/collapsible.d.ts +14 -0
  13. package/dist/enhancers/color-picker.d.ts +20 -0
  14. package/dist/enhancers/combobox.d.ts +17 -0
  15. package/dist/enhancers/context-menu.d.ts +19 -0
  16. package/dist/enhancers/date-picker.d.ts +8 -0
  17. package/dist/enhancers/drawer.d.ts +11 -0
  18. package/dist/enhancers/dropdown.d.ts +17 -0
  19. package/dist/enhancers/hover-card.d.ts +15 -0
  20. package/dist/enhancers/index.d.ts +42 -0
  21. package/dist/enhancers/modal.d.ts +16 -0
  22. package/dist/enhancers/scroll-area.d.ts +14 -0
  23. package/dist/enhancers/tabs.d.ts +26 -0
  24. package/dist/enhancers/test-helpers.d.ts +20 -0
  25. package/dist/enhancers/test-utils.d.ts +10 -0
  26. package/dist/enhancers/toast.d.ts +24 -0
  27. package/dist/enhancers/tooltip.d.ts +15 -0
  28. package/dist/enhancers/tree.d.ts +24 -0
  29. package/dist/enhancers/utils/click-away.d.ts +7 -0
  30. package/dist/enhancers/utils/create-overlay-enhancer.d.ts +14 -0
  31. package/dist/enhancers/utils/focus-trap.d.ts +9 -0
  32. package/dist/enhancers/utils/generate-id.d.ts +6 -0
  33. package/dist/enhancers/utils/keyboard-nav.d.ts +21 -0
  34. package/dist/enhancers/utils/position.d.ts +30 -0
  35. package/dist/fonts/index.d.ts +20 -0
  36. package/dist/index.d.ts +9 -0
  37. package/dist/init.d.ts +16 -0
  38. package/dist/plugins/index.d.ts +2 -0
  39. package/dist/plugins/index.js +1 -0
  40. package/dist/plugins/postcss-soltana-treeshake.d.ts +10 -0
  41. package/dist/plugins/postcss-soltana-treeshake.js +149 -0
  42. package/dist/plugins/types.d.ts +9 -0
  43. package/dist/plugins/types.js +4 -0
  44. package/dist/soltana-ui.css +1 -0
  45. package/dist/soltana-ui.js +1702 -0
  46. package/dist/soltana-ui.umd.cjs +1 -0
  47. package/package.json +90 -0
  48. package/src/styles/_variables.scss +348 -0
  49. package/src/styles/base/_accessibility.scss +146 -0
  50. package/src/styles/base/_index.scss +12 -0
  51. package/src/styles/base/_register.scss +84 -0
  52. package/src/styles/base/_relief-system.scss +53 -0
  53. package/src/styles/base/_scrollbar.scss +40 -0
  54. package/src/styles/base/_transitions.scss +75 -0
  55. package/src/styles/base/_typography.scss +442 -0
  56. package/src/styles/components/_alert-dialogs.scss +75 -0
  57. package/src/styles/components/_badges.scss +215 -0
  58. package/src/styles/components/_buttons.scss +293 -0
  59. package/src/styles/components/_callouts.scss +99 -0
  60. package/src/styles/components/_cards.scss +97 -0
  61. package/src/styles/components/_carousels.scss +108 -0
  62. package/src/styles/components/_closes.scss +63 -0
  63. package/src/styles/components/_code.scss +75 -0
  64. package/src/styles/components/_collapsibles.scss +61 -0
  65. package/src/styles/components/_color-pickers.scss +211 -0
  66. package/src/styles/components/_comboboxes.scss +88 -0
  67. package/src/styles/components/_context-menus.scss +82 -0
  68. package/src/styles/components/_date-pickers.scss +165 -0
  69. package/src/styles/components/_feedback.scss +354 -0
  70. package/src/styles/components/_figures.scss +52 -0
  71. package/src/styles/components/_heros.scss +83 -0
  72. package/src/styles/components/_hover-cards.scss +55 -0
  73. package/src/styles/components/_images.scss +71 -0
  74. package/src/styles/components/_index.scss +41 -0
  75. package/src/styles/components/_indicators.scss +403 -0
  76. package/src/styles/components/_inputs.scss +409 -0
  77. package/src/styles/components/_layouts.scss +139 -0
  78. package/src/styles/components/_lists.scss +135 -0
  79. package/src/styles/components/_menus.scss +195 -0
  80. package/src/styles/components/_navigation.scss +325 -0
  81. package/src/styles/components/_overlays.scss +233 -0
  82. package/src/styles/components/_scroll-areas.scss +53 -0
  83. package/src/styles/components/_segmented-controls.scss +75 -0
  84. package/src/styles/components/_tables.scss +137 -0
  85. package/src/styles/components/_toasts.scss +111 -0
  86. package/src/styles/components/_toggles.scss +57 -0
  87. package/src/styles/components/_trees.scss +123 -0
  88. package/src/styles/decorative/_classical.scss +196 -0
  89. package/src/styles/decorative/_index.scss +7 -0
  90. package/src/styles/finishes/_index.scss +55 -0
  91. package/src/styles/index.scss +30 -0
  92. package/src/styles/reliefs/_index.scss +66 -0
  93. package/src/styles/reliefs/_neumorphic-tables.scss +92 -0
  94. package/src/styles/themes/_dark.scss +130 -0
  95. package/src/styles/themes/_index.scss +3 -0
  96. package/src/styles/themes/_light.scss +122 -0
  97. package/src/styles/themes/_sepia.scss +121 -0
  98. package/src/styles/utilities/_index.scss +13 -0
  99. package/src/styles/utilities/_layout.scss +100 -0
  100. package/src/styles/utilities/_mixins.scss +410 -0
  101. package/src/styles/utilities/_responsive.scss +46 -0
  102. package/src/styles/utilities/_sizing.scss +62 -0
  103. package/src/styles/utilities/_spacing.scss +12 -0
  104. package/src/styles/utilities/_visual.scss +436 -0
@@ -0,0 +1,1702 @@
1
+ const ze = ["dark", "light", "sepia"], We = ["flat", "glassmorphic", "skeuomorphic", "neumorphic"], Ge = ["matte", "frosted", "tinted", "glossy"], $e = [...ze, "auto"], qe = [...We], De = [...Ge], _e = {
2
+ theme: $e,
3
+ relief: qe,
4
+ finish: De
5
+ };
6
+ function Re(e, t) {
7
+ const i = _e[e];
8
+ i.includes(t) || i.push(t);
9
+ }
10
+ function Me(e, t) {
11
+ const i = _e[e], r = i.indexOf(t);
12
+ r !== -1 && i.splice(r, 1);
13
+ }
14
+ const fe = $e, he = qe, be = De, Ie = 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])';
15
+ function Pe(e, t) {
16
+ const i = Array.from(new Set(e.querySelectorAll(Ie)));
17
+ if (i.length === 0) return;
18
+ const r = i[0], o = i[i.length - 1];
19
+ t.shiftKey && document.activeElement === r ? (t.preventDefault(), o.focus()) : !t.shiftKey && document.activeElement === o && (t.preventDefault(), r.focus());
20
+ }
21
+ function Ne(e) {
22
+ let t = null, i = 0;
23
+ function r(n) {
24
+ n.classList.contains("active") || (n.classList.add("active"), e.childElementsToActivate.forEach((s) => {
25
+ n.querySelector(s)?.classList.add("active");
26
+ }), n.setAttribute("aria-hidden", "false"), i++, document.body.classList.add(e.bodyOpenClass), requestAnimationFrame(() => {
27
+ const s = n.querySelector(e.contentSelector);
28
+ (s?.querySelector(Ie) ?? s)?.focus();
29
+ }));
30
+ }
31
+ function o(n) {
32
+ n.classList.remove("active"), e.childElementsToActivate.forEach((s) => {
33
+ n.querySelector(s)?.classList.remove("active");
34
+ }), n.setAttribute("aria-hidden", "true"), i = Math.max(0, i - 1), i === 0 && document.body.classList.remove(e.bodyOpenClass);
35
+ }
36
+ return function(s) {
37
+ t?.abort(), t = new AbortController(), i = 0, document.body.classList.remove(e.bodyOpenClass);
38
+ const { signal: c } = t, l = s?.root ?? document, d = `[${e.openTriggerAttr}]`, a = `[${e.closeTriggerAttr}]`;
39
+ return l.querySelectorAll(s?.selector ?? d).forEach((u) => {
40
+ u.addEventListener(
41
+ "click",
42
+ () => {
43
+ const f = u.getAttribute(e.openTriggerAttr);
44
+ if (!f) return;
45
+ const b = document.getElementById(f);
46
+ b?.hasAttribute(e.overlaySelector.slice(1, -1)) && r(b);
47
+ },
48
+ { signal: c }
49
+ );
50
+ }), l.querySelectorAll(e.overlaySelector).forEach((u) => {
51
+ e.setupAria?.(u), u.querySelectorAll(a).forEach((b) => {
52
+ b.addEventListener(
53
+ "click",
54
+ () => {
55
+ o(u);
56
+ },
57
+ { signal: c }
58
+ );
59
+ });
60
+ const f = e.checkOverlayAsBackdrop && u.matches(e.backdropSelector) ? u : u.querySelector(e.backdropSelector);
61
+ f?.addEventListener(
62
+ "click",
63
+ (b) => {
64
+ b.target === f && o(u);
65
+ },
66
+ { signal: c }
67
+ ), u.addEventListener(
68
+ "keydown",
69
+ (b) => {
70
+ if (b.key === "Escape") {
71
+ o(u);
72
+ return;
73
+ }
74
+ if (b.key === "Tab") {
75
+ const h = u.querySelector(e.contentSelector);
76
+ h && Pe(h, b);
77
+ }
78
+ },
79
+ { signal: c }
80
+ );
81
+ }), {
82
+ destroy() {
83
+ t?.abort(), t = null, i = 0, document.body.classList.remove(e.bodyOpenClass);
84
+ }
85
+ };
86
+ };
87
+ }
88
+ const Je = "[data-sol-modal]", nr = "[data-modal-open]", Xe = Ne({
89
+ overlaySelector: Je,
90
+ openTriggerAttr: "data-modal-open",
91
+ closeTriggerAttr: "data-modal-close",
92
+ bodyOpenClass: "sol-modal-open",
93
+ contentSelector: ".modal__content, .modal",
94
+ childElementsToActivate: [".modal"],
95
+ checkOverlayAsBackdrop: !0,
96
+ backdropSelector: ".modal-backdrop"
97
+ });
98
+ function W() {
99
+ return Math.random().toString(36).slice(2, 7);
100
+ }
101
+ const Ze = "[data-sol-tabs]";
102
+ let $ = null;
103
+ function re(e, t) {
104
+ const i = e.querySelectorAll('[role="tab"]'), r = e.querySelectorAll('[role="tabpanel"]');
105
+ i.forEach((o, n) => {
106
+ const s = n === t;
107
+ o.setAttribute("aria-selected", String(s)), o.setAttribute("tabindex", s ? "0" : "-1"), o.classList.toggle("active", s);
108
+ }), r.forEach((o, n) => {
109
+ const s = n === t;
110
+ o.hidden = !s, o.classList.toggle("active", s);
111
+ });
112
+ }
113
+ function me(e) {
114
+ const t = e.querySelectorAll('[role="tab"]');
115
+ for (let i = 0; i < t.length; i++)
116
+ if (t[i].getAttribute("aria-selected") === "true") return i;
117
+ return 0;
118
+ }
119
+ function Qe(e) {
120
+ $?.abort(), $ = new AbortController();
121
+ const { signal: t } = $;
122
+ return (e?.root ?? document).querySelectorAll(e?.selector ?? Ze).forEach((r) => {
123
+ const o = r.querySelectorAll('[role="tab"]'), n = o.length;
124
+ if (n === 0) return;
125
+ const s = r.id || `sol-tabs-${W()}`, c = r.querySelectorAll('[role="tabpanel"]');
126
+ o.forEach((d, a) => {
127
+ const u = `${s}-tab-${String(a)}`, f = `${s}-panel-${String(a)}`;
128
+ d.id = u, d.setAttribute("aria-controls", f);
129
+ const b = c[a];
130
+ b && (b.id = f, b.setAttribute("aria-labelledby", u));
131
+ }), re(r, me(r)), o.forEach((d, a) => {
132
+ d.addEventListener(
133
+ "click",
134
+ () => {
135
+ re(r, a), d.focus();
136
+ },
137
+ { signal: t }
138
+ );
139
+ }), r.querySelector('[role="tablist"]')?.addEventListener(
140
+ "keydown",
141
+ (d) => {
142
+ const a = me(r);
143
+ let u = a;
144
+ switch (d.key) {
145
+ case "ArrowRight":
146
+ case "ArrowDown":
147
+ d.preventDefault(), u = (a + 1) % n;
148
+ break;
149
+ case "ArrowLeft":
150
+ case "ArrowUp":
151
+ d.preventDefault(), u = (a - 1 + n) % n;
152
+ break;
153
+ case "Home":
154
+ d.preventDefault(), u = 0;
155
+ break;
156
+ case "End":
157
+ d.preventDefault(), u = n - 1;
158
+ break;
159
+ default:
160
+ return;
161
+ }
162
+ re(r, u), o[u].focus();
163
+ },
164
+ { signal: t }
165
+ );
166
+ }), {
167
+ destroy() {
168
+ $?.abort(), $ = null;
169
+ }
170
+ };
171
+ }
172
+ const pe = {
173
+ top: "bottom",
174
+ bottom: "top",
175
+ left: "right",
176
+ right: "left"
177
+ };
178
+ function et(e) {
179
+ return e instanceof HTMLElement ? e.getBoundingClientRect() : { top: e.y, bottom: e.y, left: e.x, right: e.x, width: 0, height: 0 };
180
+ }
181
+ function ve(e, t, i, r) {
182
+ let o = 0, n = 0;
183
+ switch (i) {
184
+ case "top":
185
+ o = e.top - t.height - r, n = e.left + e.width / 2 - t.width / 2;
186
+ break;
187
+ case "bottom":
188
+ o = e.bottom + r, n = e.left + e.width / 2 - t.width / 2;
189
+ break;
190
+ case "left":
191
+ o = e.top + e.height / 2 - t.height / 2, n = e.left - t.width - r;
192
+ break;
193
+ case "right":
194
+ o = e.top + e.height / 2 - t.height / 2, n = e.right + r;
195
+ break;
196
+ }
197
+ return { top: o, left: n };
198
+ }
199
+ function ge(e, t, i, r) {
200
+ switch (i) {
201
+ case "top":
202
+ return e.top < r;
203
+ case "bottom":
204
+ return e.top + t.height > window.innerHeight - r;
205
+ case "left":
206
+ return e.left < r;
207
+ case "right":
208
+ return e.left + t.width > window.innerWidth - r;
209
+ }
210
+ }
211
+ function de(e) {
212
+ const { anchor: t, floating: i, placement: r, gap: o = 8, viewportPadding: n = 4, flip: s = !0 } = e, c = et(t), l = i.getBoundingClientRect();
213
+ let d = ve(c, l, r, o);
214
+ if (s && ge(d, l, r, n)) {
215
+ const a = ve(c, l, pe[r], o);
216
+ ge(a, l, pe[r], n) || (d = a);
217
+ }
218
+ return d.left = Math.max(
219
+ n,
220
+ Math.min(d.left, window.innerWidth - l.width - n)
221
+ ), d.top = Math.max(
222
+ n,
223
+ Math.min(d.top, window.innerHeight - l.height - n)
224
+ ), d;
225
+ }
226
+ const tt = "[data-sol-tooltip]";
227
+ let q = null, k = null, w = null;
228
+ function rt() {
229
+ return k?.isConnected || (k = document.createElement("div"), k.className = "tooltip", k.setAttribute("role", "tooltip"), document.body.appendChild(k)), k;
230
+ }
231
+ function ye(e) {
232
+ const t = e.getAttribute("data-sol-tooltip");
233
+ if (!t) return;
234
+ w && w !== e && w.removeAttribute("aria-describedby");
235
+ const i = rt();
236
+ i.textContent = t, i.classList.add("active"), w = e, i.id || (i.id = `sol-tooltip-${W()}`), e.setAttribute("aria-describedby", i.id), requestAnimationFrame(() => {
237
+ ot(e, i);
238
+ });
239
+ }
240
+ function oe() {
241
+ k && k.classList.remove("active"), w && (w.removeAttribute("aria-describedby"), w = null);
242
+ }
243
+ function ot(e, t) {
244
+ const i = e.getAttribute("data-tooltip-position") ?? "top", { top: r, left: o } = de({
245
+ anchor: e,
246
+ floating: t,
247
+ placement: i
248
+ });
249
+ t.style.setProperty("--tooltip-top", `${String(r)}px`), t.style.setProperty("--tooltip-left", `${String(o)}px`);
250
+ }
251
+ function nt(e) {
252
+ q?.abort(), q = new AbortController();
253
+ const { signal: t } = q;
254
+ return (e?.root ?? document).querySelectorAll(e?.selector ?? tt).forEach((r) => {
255
+ r.addEventListener(
256
+ "mouseenter",
257
+ () => {
258
+ ye(r);
259
+ },
260
+ { signal: t }
261
+ ), r.addEventListener(
262
+ "focus",
263
+ () => {
264
+ ye(r);
265
+ },
266
+ { signal: t }
267
+ ), r.addEventListener("mouseleave", oe, { signal: t }), r.addEventListener("blur", oe, { signal: t }), r.addEventListener(
268
+ "keydown",
269
+ (o) => {
270
+ o.key === "Escape" && oe();
271
+ },
272
+ { signal: t }
273
+ );
274
+ }), {
275
+ destroy() {
276
+ q?.abort(), q = null, k?.isConnected && k.remove(), k = null, w && (w.removeAttribute("aria-describedby"), w = null);
277
+ }
278
+ };
279
+ }
280
+ function te(e, t) {
281
+ const { container: i, itemSelector: r, orientation: o, wrap: n = !0, onActivate: s } = e, c = Array.from(i.querySelectorAll(r));
282
+ if (c.length === 0) return !1;
283
+ const l = c.indexOf(document.activeElement);
284
+ let d = l;
285
+ const a = o === "vertical" || o === "both", u = o === "horizontal" || o === "both";
286
+ switch (t.key) {
287
+ case "ArrowDown":
288
+ if (!a) return !1;
289
+ t.preventDefault(), d = l + 1;
290
+ break;
291
+ case "ArrowUp":
292
+ if (!a) return !1;
293
+ t.preventDefault(), d = l - 1;
294
+ break;
295
+ case "ArrowRight":
296
+ if (!u) return !1;
297
+ t.preventDefault(), d = l + 1;
298
+ break;
299
+ case "ArrowLeft":
300
+ if (!u) return !1;
301
+ t.preventDefault(), d = l - 1;
302
+ break;
303
+ case "Home":
304
+ t.preventDefault(), d = 0;
305
+ break;
306
+ case "End":
307
+ t.preventDefault(), d = c.length - 1;
308
+ break;
309
+ case "Enter":
310
+ case " ":
311
+ return l >= 0 && s && (t.preventDefault(), s(c[l])), l >= 0;
312
+ default:
313
+ return !1;
314
+ }
315
+ return n ? d = (d + c.length) % c.length : d = Math.max(0, Math.min(d, c.length - 1)), c[d]?.focus(), !0;
316
+ }
317
+ const st = "[data-sol-accordion]";
318
+ let D = null;
319
+ function Ee(e, t) {
320
+ e.classList.toggle("active", t);
321
+ const i = e.querySelector(".accordion-header"), r = e.querySelector(".accordion-body");
322
+ i?.setAttribute("aria-expanded", String(t)), r && (t ? (r.style.setProperty("--accordion-height", `${String(r.scrollHeight)}px`), r.hidden = !1) : (r.style.setProperty("--accordion-height", "0"), r.addEventListener(
323
+ "transitionend",
324
+ () => {
325
+ r.hidden = !0;
326
+ },
327
+ { once: !0 }
328
+ )));
329
+ }
330
+ function it(e) {
331
+ D?.abort(), D = new AbortController();
332
+ const { signal: t } = D;
333
+ return (e?.root ?? document).querySelectorAll(e?.selector ?? st).forEach((r) => {
334
+ const o = r.hasAttribute("data-accordion-exclusive"), n = r.querySelectorAll(".accordion-item");
335
+ n.forEach((s, c) => {
336
+ const l = s.querySelector(".accordion-header"), d = s.querySelector(".accordion-body");
337
+ if (!l || !d) return;
338
+ const a = r.id || `sol-accordion-${W()}`, u = `${a}-header-${String(c)}`, f = `${a}-panel-${String(c)}`;
339
+ l.id = u, l.setAttribute("role", "button"), l.setAttribute("tabindex", "0"), l.setAttribute("aria-controls", f), d.id = f, d.setAttribute("role", "region"), d.setAttribute("aria-labelledby", u);
340
+ const b = s.classList.contains("active");
341
+ l.setAttribute("aria-expanded", String(b)), b ? d.style.setProperty("--accordion-height", `${String(d.scrollHeight)}px`) : (d.style.setProperty("--accordion-height", "0"), d.hidden = !0), l.addEventListener(
342
+ "click",
343
+ () => {
344
+ const h = !s.classList.contains("active");
345
+ o && h && n.forEach((g) => {
346
+ g !== s && g.classList.contains("active") && Ee(g, !1);
347
+ }), Ee(s, h);
348
+ },
349
+ { signal: t }
350
+ ), l.addEventListener(
351
+ "keydown",
352
+ (h) => {
353
+ (h.key === "Enter" || h.key === " ") && (h.preventDefault(), l.click());
354
+ },
355
+ { signal: t }
356
+ );
357
+ }), r.addEventListener(
358
+ "keydown",
359
+ (s) => {
360
+ te(
361
+ {
362
+ container: r,
363
+ itemSelector: ".accordion-header",
364
+ orientation: "vertical"
365
+ },
366
+ s
367
+ );
368
+ },
369
+ { signal: t }
370
+ );
371
+ }), {
372
+ destroy() {
373
+ D?.abort(), D = null;
374
+ }
375
+ };
376
+ }
377
+ function G(e, t, i) {
378
+ document.addEventListener(
379
+ "mousedown",
380
+ (r) => {
381
+ e.contains(r.target) || t();
382
+ },
383
+ { signal: i }
384
+ );
385
+ }
386
+ const ct = "[data-sol-dropdown]";
387
+ let _ = null;
388
+ function Ae(e, t) {
389
+ t.classList.add("active"), e.setAttribute("aria-expanded", "true"), e.focus(), requestAnimationFrame(() => {
390
+ t.querySelector('[role="menuitem"]')?.focus();
391
+ });
392
+ }
393
+ function R(e, t) {
394
+ t.classList.remove("active"), e.setAttribute("aria-expanded", "false");
395
+ }
396
+ function lt(e) {
397
+ _?.abort(), _ = new AbortController();
398
+ const { signal: t } = _;
399
+ return (e?.root ?? document).querySelectorAll(e?.selector ?? ct).forEach((r) => {
400
+ const o = r.querySelector(".dropdown-toggle"), n = r.querySelector(".dropdown-menu");
401
+ !o || !n || (o.setAttribute("aria-haspopup", "menu"), o.setAttribute("aria-expanded", "false"), n.getAttribute("role") || n.setAttribute("role", "menu"), n.querySelectorAll(".dropdown-item").forEach((s) => {
402
+ s.getAttribute("role") || s.setAttribute("role", "menuitem"), s.setAttribute("tabindex", "-1");
403
+ }), o.addEventListener(
404
+ "click",
405
+ () => {
406
+ n.classList.contains("active") ? R(o, n) : Ae(o, n);
407
+ },
408
+ { signal: t }
409
+ ), G(
410
+ r,
411
+ () => {
412
+ n.classList.contains("active") && R(o, n);
413
+ },
414
+ t
415
+ ), r.addEventListener(
416
+ "keydown",
417
+ (s) => {
418
+ const c = n.classList.contains("active");
419
+ if (s.key === "Escape" && c) {
420
+ s.preventDefault(), R(o, n), requestAnimationFrame(() => {
421
+ o.focus();
422
+ });
423
+ return;
424
+ }
425
+ if (s.key === "Tab" && c) {
426
+ R(o, n);
427
+ return;
428
+ }
429
+ if ((s.key === "ArrowDown" || s.key === "Enter" || s.key === " ") && document.activeElement === o && !c) {
430
+ s.preventDefault(), Ae(o, n);
431
+ return;
432
+ }
433
+ c && te(
434
+ {
435
+ container: n,
436
+ itemSelector: '[role="menuitem"]',
437
+ orientation: "vertical",
438
+ onActivate: (l) => {
439
+ l.click(), R(o, n), o.focus();
440
+ }
441
+ },
442
+ s
443
+ );
444
+ },
445
+ { signal: t }
446
+ ));
447
+ }), {
448
+ destroy() {
449
+ _?.abort(), _ = null;
450
+ }
451
+ };
452
+ }
453
+ const at = "[data-sol-drawer]", sr = "[data-drawer-open]", dt = Ne({
454
+ overlaySelector: at,
455
+ openTriggerAttr: "data-drawer-open",
456
+ closeTriggerAttr: "data-drawer-close",
457
+ bodyOpenClass: "sol-drawer-open",
458
+ contentSelector: ".drawer",
459
+ childElementsToActivate: [".drawer-backdrop", ".drawer"],
460
+ checkOverlayAsBackdrop: !1,
461
+ backdropSelector: ".drawer-backdrop",
462
+ setupAria: (e) => {
463
+ e.getAttribute("role") || e.querySelector(".drawer")?.setAttribute("role", "dialog");
464
+ }
465
+ }), ut = "[data-sol-toast-container]";
466
+ let M = null, x = null;
467
+ function ft(e) {
468
+ const t = document.querySelector(
469
+ `.toast-container-${e}[data-sol-toast-container]`
470
+ );
471
+ if (t) return t;
472
+ if (x?.isConnected && x.classList.contains(`toast-container-${e}`))
473
+ return x;
474
+ const i = document.createElement("div");
475
+ return i.className = `toast-container toast-container-${e}`, i.setAttribute("data-sol-toast-container", ""), i.setAttribute("role", "status"), i.setAttribute("aria-live", "polite"), document.body.appendChild(i), x = i, i;
476
+ }
477
+ function ht(e) {
478
+ const t = document.createElement("div"), i = e.type ? ` toast-${e.type}` : "";
479
+ t.className = `toast${i}`;
480
+ const r = document.createElement("div");
481
+ r.className = "toast-header";
482
+ const o = document.createElement("strong");
483
+ o.className = "text-sm", o.textContent = e.type ? e.type.charAt(0).toUpperCase() + e.type.slice(1) : "Notice";
484
+ const n = document.createElement("button");
485
+ n.className = "close close-sm", n.setAttribute("aria-label", "Dismiss"), r.appendChild(o), r.appendChild(n);
486
+ const s = document.createElement("div");
487
+ return s.className = "toast-body text-sm", s.textContent = e.message, t.appendChild(r), t.appendChild(s), t;
488
+ }
489
+ function ir(e) {
490
+ const { duration: t = 5e3, position: i = "top-right" } = e, r = ft(i), o = ht(e);
491
+ r.appendChild(o), requestAnimationFrame(() => {
492
+ o.classList.add("active");
493
+ });
494
+ const n = o.querySelector(".close"), s = () => {
495
+ o.classList.remove("active"), o.addEventListener(
496
+ "transitionend",
497
+ () => {
498
+ o.remove();
499
+ },
500
+ { once: !0 }
501
+ ), setTimeout(() => {
502
+ o.isConnected && o.remove();
503
+ }, 500);
504
+ };
505
+ return n?.addEventListener("click", s), t > 0 && setTimeout(s, t), o;
506
+ }
507
+ function bt(e) {
508
+ e.classList.remove("active"), e.addEventListener(
509
+ "transitionend",
510
+ () => {
511
+ e.remove();
512
+ },
513
+ { once: !0 }
514
+ ), setTimeout(() => {
515
+ e.isConnected && e.remove();
516
+ }, 500);
517
+ }
518
+ function mt(e) {
519
+ M?.abort(), M = new AbortController();
520
+ const { signal: t } = M;
521
+ return (e?.root ?? document).querySelectorAll(e?.selector ?? ut).forEach((r) => {
522
+ r.getAttribute("role") || r.setAttribute("role", "status"), r.getAttribute("aria-live") || r.setAttribute("aria-live", "polite"), r.querySelectorAll(".toast .close").forEach((o) => {
523
+ o.addEventListener(
524
+ "click",
525
+ () => {
526
+ const n = o.closest(".toast");
527
+ n && bt(n);
528
+ },
529
+ { signal: t }
530
+ );
531
+ });
532
+ }), {
533
+ destroy() {
534
+ M?.abort(), M = null, x?.isConnected && x.remove(), x = null;
535
+ }
536
+ };
537
+ }
538
+ const pt = "[data-sol-collapsible]";
539
+ let I = null;
540
+ function vt(e) {
541
+ I?.abort(), I = new AbortController();
542
+ const { signal: t } = I;
543
+ return (e?.root ?? document).querySelectorAll(e?.selector ?? pt).forEach((r) => {
544
+ const o = r.querySelector(".collapsible-trigger"), n = r.querySelector(".collapsible-content");
545
+ if (!o || !n) return;
546
+ const s = r.hasAttribute("data-collapsible-open");
547
+ o.setAttribute("aria-expanded", String(s)), n.setAttribute("aria-hidden", String(!s)), s ? n.style.setProperty("--collapsible-height", `${String(n.scrollHeight)}px`) : n.style.setProperty("--collapsible-height", "0"), n.id || (n.id = `sol-collapsible-${W()}`), o.setAttribute("aria-controls", n.id), o.addEventListener(
548
+ "click",
549
+ () => {
550
+ const l = !(o.getAttribute("aria-expanded") === "true");
551
+ o.setAttribute("aria-expanded", String(l)), n.setAttribute("aria-hidden", String(!l)), l ? (n.style.setProperty("--collapsible-height", `${String(n.scrollHeight)}px`), r.setAttribute("data-collapsible-open", "")) : (n.style.setProperty("--collapsible-height", "0"), r.removeAttribute("data-collapsible-open"));
552
+ },
553
+ { signal: t }
554
+ );
555
+ }), {
556
+ destroy() {
557
+ I?.abort(), I = null;
558
+ }
559
+ };
560
+ }
561
+ const gt = "[data-sol-combobox]";
562
+ let P = null;
563
+ function yt(e) {
564
+ return (e.getAttribute("data-value") ?? e.textContent ?? "").toLowerCase();
565
+ }
566
+ function Et(e) {
567
+ P?.abort(), P = new AbortController();
568
+ const { signal: t } = P;
569
+ return (e?.root ?? document).querySelectorAll(e?.selector ?? gt).forEach((r) => {
570
+ const o = r.querySelector(".combobox-input"), n = r.querySelector(".combobox-listbox");
571
+ if (!o || !n) return;
572
+ const s = o, c = n, l = Array.from(c.querySelectorAll(".combobox-option")), d = c.querySelector(".combobox-empty");
573
+ s.setAttribute("role", "combobox"), s.setAttribute("aria-expanded", "false"), s.setAttribute("aria-autocomplete", "list"), c.id || (c.id = `sol-combobox-list-${W()}`), s.setAttribute("aria-controls", c.id), c.setAttribute("role", "listbox"), l.forEach((h) => {
574
+ h.setAttribute("role", "option"), h.setAttribute("tabindex", "-1");
575
+ });
576
+ function a() {
577
+ c.classList.add("active"), s.setAttribute("aria-expanded", "true");
578
+ }
579
+ function u() {
580
+ c.classList.remove("active"), s.setAttribute("aria-expanded", "false"), s.removeAttribute("aria-activedescendant"), l.forEach((h) => {
581
+ h.classList.remove("active");
582
+ });
583
+ }
584
+ function f(h) {
585
+ const g = h.toLowerCase();
586
+ let E = 0;
587
+ l.forEach((m) => {
588
+ const p = yt(m), v = g === "" || p.includes(g);
589
+ m.hidden = !v, m.classList.remove("active"), v && E++;
590
+ }), d && (d.hidden = E > 0 || g === "");
591
+ }
592
+ function b(h) {
593
+ const E = h.getAttribute("data-value") ?? (h.textContent || "").trim();
594
+ s.value = E, l.forEach((m) => {
595
+ m.classList.remove("selected");
596
+ }), h.classList.add("selected"), h.setAttribute("aria-selected", "true"), u(), s.focus();
597
+ }
598
+ s.addEventListener(
599
+ "input",
600
+ () => {
601
+ f(s.value), c.classList.contains("active") || a();
602
+ },
603
+ { signal: t }
604
+ ), s.addEventListener(
605
+ "focus",
606
+ () => {
607
+ f(s.value), a();
608
+ },
609
+ { signal: t }
610
+ ), l.forEach((h) => {
611
+ h.addEventListener(
612
+ "click",
613
+ () => {
614
+ b(h);
615
+ },
616
+ { signal: t }
617
+ );
618
+ }), G(
619
+ r,
620
+ () => {
621
+ c.classList.contains("active") && u();
622
+ },
623
+ t
624
+ ), r.addEventListener(
625
+ "keydown",
626
+ (h) => {
627
+ const g = c.classList.contains("active");
628
+ if (h.key === "Escape" && g) {
629
+ h.preventDefault(), u(), s.focus();
630
+ return;
631
+ }
632
+ if (h.key === "ArrowDown" && !g) {
633
+ h.preventDefault(), a();
634
+ return;
635
+ }
636
+ g && te(
637
+ {
638
+ container: c,
639
+ itemSelector: ".combobox-option:not([hidden])",
640
+ orientation: "vertical",
641
+ onActivate: b
642
+ },
643
+ h
644
+ );
645
+ },
646
+ { signal: t }
647
+ );
648
+ }), {
649
+ destroy() {
650
+ P?.abort(), P = null;
651
+ }
652
+ };
653
+ }
654
+ const At = "[data-sol-hover-card]";
655
+ let N = null;
656
+ function St(e) {
657
+ N?.abort(), N = new AbortController();
658
+ const { signal: t } = N;
659
+ return (e?.root ?? document).querySelectorAll(e?.selector ?? At).forEach((r) => {
660
+ const o = r.querySelector(".hover-card-trigger"), n = r.querySelector(".hover-card-content");
661
+ if (!o || !n) return;
662
+ const s = o, c = n, l = Number(r.getAttribute("data-hover-show-delay") ?? "200"), d = Number(r.getAttribute("data-hover-hide-delay") ?? "300"), a = r.getAttribute("data-hover-placement") ?? "bottom";
663
+ let u = null, f = null;
664
+ function b() {
665
+ f && (clearTimeout(f), f = null), u = setTimeout(() => {
666
+ const g = de({ anchor: s, floating: c, placement: a });
667
+ c.style.setProperty(
668
+ "--hover-card-top",
669
+ `${String(g.top - r.getBoundingClientRect().top)}px`
670
+ ), c.style.setProperty(
671
+ "--hover-card-left",
672
+ `${String(g.left - r.getBoundingClientRect().left)}px`
673
+ ), c.classList.add("active");
674
+ }, l);
675
+ }
676
+ function h() {
677
+ u && (clearTimeout(u), u = null), f = setTimeout(() => {
678
+ c.classList.remove("active");
679
+ }, d);
680
+ }
681
+ s.addEventListener("mouseenter", b, { signal: t }), s.addEventListener("mouseleave", h, { signal: t }), c.addEventListener(
682
+ "mouseenter",
683
+ () => {
684
+ f && (clearTimeout(f), f = null);
685
+ },
686
+ { signal: t }
687
+ ), c.addEventListener("mouseleave", h, { signal: t }), s.addEventListener("focus", b, { signal: t }), s.addEventListener("blur", h, { signal: t });
688
+ }), {
689
+ destroy() {
690
+ N?.abort(), N = null;
691
+ }
692
+ };
693
+ }
694
+ const kt = "[data-sol-context-menu]";
695
+ let F = null;
696
+ function wt(e) {
697
+ F?.abort(), F = new AbortController();
698
+ const { signal: t } = F;
699
+ return (e?.root ?? document).querySelectorAll(e?.selector ?? kt).forEach((r) => {
700
+ const o = r.querySelector(".context-menu");
701
+ if (!o) return;
702
+ const n = o;
703
+ n.getAttribute("role") || n.setAttribute("role", "menu"), n.querySelectorAll(".context-menu-item").forEach((c) => {
704
+ c.getAttribute("role") || c.setAttribute("role", "menuitem"), c.setAttribute("tabindex", "-1");
705
+ });
706
+ function s() {
707
+ n.classList.remove("active");
708
+ }
709
+ r.addEventListener(
710
+ "contextmenu",
711
+ (c) => {
712
+ c.preventDefault();
713
+ const l = de({
714
+ anchor: { x: c.clientX, y: c.clientY },
715
+ floating: n,
716
+ placement: "right",
717
+ gap: 0
718
+ });
719
+ n.style.setProperty("--context-menu-top", `${String(l.top)}px`), n.style.setProperty("--context-menu-left", `${String(l.left)}px`), n.classList.add("active"), requestAnimationFrame(() => {
720
+ n.querySelector('[role="menuitem"]')?.focus();
721
+ });
722
+ },
723
+ { signal: t }
724
+ ), G(n, s, t), n.addEventListener(
725
+ "keydown",
726
+ (c) => {
727
+ if (c.key === "Escape") {
728
+ c.preventDefault(), s();
729
+ return;
730
+ }
731
+ te(
732
+ {
733
+ container: n,
734
+ itemSelector: '[role="menuitem"]',
735
+ orientation: "vertical",
736
+ onActivate: (l) => {
737
+ l.click(), s();
738
+ }
739
+ },
740
+ c
741
+ );
742
+ },
743
+ { signal: t }
744
+ );
745
+ }), {
746
+ destroy() {
747
+ F?.abort(), F = null;
748
+ }
749
+ };
750
+ }
751
+ const Lt = "[data-sol-carousel]";
752
+ let B = null;
753
+ function Ct(e) {
754
+ B?.abort(), B = new AbortController();
755
+ const { signal: t } = B, i = [];
756
+ return (e?.root ?? document).querySelectorAll(e?.selector ?? Lt).forEach((o) => {
757
+ const n = o.querySelector(".carousel-track"), s = Array.from(o.querySelectorAll(".carousel-slide")), c = o.querySelector(".carousel-prev"), l = o.querySelector(".carousel-next"), d = o.querySelector(".carousel-dots");
758
+ if (!n || s.length === 0) return;
759
+ const a = n, u = o.hasAttribute("data-carousel-loop"), f = o.hasAttribute("data-carousel-autoplay"), b = Number(o.getAttribute("data-carousel-interval") ?? "5000");
760
+ let h = 0;
761
+ o.setAttribute("role", "region"), o.setAttribute("aria-roledescription", "carousel"), s.forEach((m, p) => {
762
+ m.setAttribute("role", "group"), m.setAttribute("aria-roledescription", "slide"), m.setAttribute("aria-label", `Slide ${String(p + 1)} of ${String(s.length)}`);
763
+ });
764
+ const g = [];
765
+ d && s.forEach((m, p) => {
766
+ const v = document.createElement("button");
767
+ v.className = p === 0 ? "carousel-dot active" : "carousel-dot", v.setAttribute("aria-label", `Go to slide ${String(p + 1)}`), d.appendChild(v), g.push(v);
768
+ });
769
+ function E(m) {
770
+ u ? h = (m + s.length) % s.length : h = Math.max(0, Math.min(m, s.length - 1)), a.style.setProperty("--carousel-offset", `-${String(h * 100)}%`), g.forEach((p, v) => p.classList.toggle("active", v === h)), u || (c?.toggleAttribute("disabled", h === 0), l?.toggleAttribute("disabled", h === s.length - 1));
771
+ }
772
+ if (E(0), c?.addEventListener(
773
+ "click",
774
+ () => {
775
+ E(h - 1);
776
+ },
777
+ { signal: t }
778
+ ), l?.addEventListener(
779
+ "click",
780
+ () => {
781
+ E(h + 1);
782
+ },
783
+ { signal: t }
784
+ ), g.forEach((m, p) => {
785
+ m.addEventListener(
786
+ "click",
787
+ () => {
788
+ E(p);
789
+ },
790
+ { signal: t }
791
+ );
792
+ }), o.addEventListener(
793
+ "keydown",
794
+ (m) => {
795
+ m.key === "ArrowLeft" ? (m.preventDefault(), E(h - 1)) : m.key === "ArrowRight" && (m.preventDefault(), E(h + 1));
796
+ },
797
+ { signal: t }
798
+ ), f) {
799
+ const m = setInterval(() => {
800
+ E(h + 1);
801
+ }, b);
802
+ i.push(m), o.addEventListener(
803
+ "mouseenter",
804
+ () => {
805
+ clearInterval(m);
806
+ },
807
+ { signal: t }
808
+ ), o.addEventListener(
809
+ "mouseleave",
810
+ () => {
811
+ const p = setInterval(() => {
812
+ E(h + 1);
813
+ }, b);
814
+ i.push(p);
815
+ },
816
+ { signal: t }
817
+ );
818
+ }
819
+ }), {
820
+ destroy() {
821
+ B?.abort(), B = null, i.forEach(clearInterval);
822
+ }
823
+ };
824
+ }
825
+ const xt = "[data-sol-scroll-area]";
826
+ let H = null;
827
+ function Tt(e) {
828
+ H?.abort(), H = new AbortController();
829
+ const { signal: t } = H;
830
+ return (e?.root ?? document).querySelectorAll(e?.selector ?? xt).forEach((r) => {
831
+ let o = null;
832
+ r.addEventListener(
833
+ "scroll",
834
+ () => {
835
+ r.classList.add("scrolling"), o && clearTimeout(o), o = setTimeout(() => {
836
+ r.classList.remove("scrolling");
837
+ }, 1200);
838
+ },
839
+ { signal: t, passive: !0 }
840
+ ), r.setAttribute("tabindex", "0"), r.setAttribute("role", "region"), r.getAttribute("aria-label") || r.setAttribute("aria-label", "Scrollable content");
841
+ }), {
842
+ destroy() {
843
+ H?.abort(), H = null;
844
+ }
845
+ };
846
+ }
847
+ const Ot = "[data-sol-date-picker]";
848
+ let U = null;
849
+ const $t = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], Se = [
850
+ "January",
851
+ "February",
852
+ "March",
853
+ "April",
854
+ "May",
855
+ "June",
856
+ "July",
857
+ "August",
858
+ "September",
859
+ "October",
860
+ "November",
861
+ "December"
862
+ ];
863
+ function ke(e, t) {
864
+ return new Date(e, t + 1, 0).getDate();
865
+ }
866
+ function qt(e, t) {
867
+ return new Date(e, t, 1).getDay();
868
+ }
869
+ function we(e, t) {
870
+ return e.getFullYear() === t.getFullYear() && e.getMonth() === t.getMonth() && e.getDate() === t.getDate();
871
+ }
872
+ function Dt(e) {
873
+ const t = String(e.getFullYear()), i = String(e.getMonth() + 1).padStart(2, "0"), r = String(e.getDate()).padStart(2, "0");
874
+ return `${t}-${i}-${r}`;
875
+ }
876
+ function _t(e, t, i, r) {
877
+ let o = e.querySelector(".date-picker-grid");
878
+ o || (o = document.createElement("div"), o.className = "date-picker-grid", o.setAttribute("role", "grid"), e.appendChild(o)), o.innerHTML = "";
879
+ for (const a of $t) {
880
+ const u = document.createElement("div");
881
+ u.className = "date-picker-weekday", u.textContent = a, o.appendChild(u);
882
+ }
883
+ const n = ke(t.viewYear, t.viewMonth), s = qt(t.viewYear, t.viewMonth), c = ke(
884
+ t.viewMonth === 0 ? t.viewYear - 1 : t.viewYear,
885
+ t.viewMonth === 0 ? 11 : t.viewMonth - 1
886
+ );
887
+ for (let a = s - 1; a >= 0; a--) {
888
+ const u = document.createElement("button");
889
+ u.className = "date-picker-cell date-picker-cell-other", u.textContent = String(c - a), u.setAttribute("tabindex", "-1"), u.setAttribute("role", "gridcell"), u.disabled = !0, o.appendChild(u);
890
+ }
891
+ for (let a = 1; a <= n; a++) {
892
+ const u = new Date(t.viewYear, t.viewMonth, a), f = document.createElement("button");
893
+ f.className = "date-picker-cell", f.textContent = String(a), f.setAttribute("tabindex", "-1"), f.setAttribute("role", "gridcell"), we(u, i) && f.classList.add("today"), t.selected && we(u, t.selected) && (f.classList.add("selected"), f.setAttribute("aria-selected", "true"), f.setAttribute("tabindex", "0")), f.addEventListener("click", () => {
894
+ r(u);
895
+ }), o.appendChild(f);
896
+ }
897
+ const l = s + n, d = l % 7 === 0 ? 0 : 7 - l % 7;
898
+ for (let a = 1; a <= d; a++) {
899
+ const u = document.createElement("button");
900
+ u.className = "date-picker-cell date-picker-cell-other", u.textContent = String(a), u.setAttribute("tabindex", "-1"), u.setAttribute("role", "gridcell"), u.disabled = !0, o.appendChild(u);
901
+ }
902
+ }
903
+ function Rt(e, t) {
904
+ const i = e.querySelector(".date-picker-title");
905
+ i && (i.textContent = `${Se[t.viewMonth]} ${String(t.viewYear)}`), e.setAttribute("aria-label", `${Se[t.viewMonth]} ${String(t.viewYear)}`);
906
+ }
907
+ function Mt(e) {
908
+ U?.abort(), U = new AbortController();
909
+ const { signal: t } = U;
910
+ return (e?.root ?? document).querySelectorAll(e?.selector ?? Ot).forEach((r) => {
911
+ if (r.hasAttribute("data-sol-date-native")) return;
912
+ const o = r.querySelector(".date-picker-input");
913
+ if (!o) return;
914
+ const n = o, s = /* @__PURE__ */ new Date(), c = {
915
+ viewYear: s.getFullYear(),
916
+ viewMonth: s.getMonth(),
917
+ selected: null
918
+ }, l = document.createElement("div");
919
+ l.className = "date-picker-popup", l.setAttribute("role", "dialog"), l.setAttribute("aria-modal", "true");
920
+ const d = document.createElement("div");
921
+ d.className = "date-picker-header";
922
+ const a = document.createElement("button");
923
+ a.className = "date-picker-nav", a.setAttribute("aria-label", "Previous month"), a.innerHTML = "&#8249;";
924
+ const u = document.createElement("span");
925
+ u.className = "date-picker-title";
926
+ const f = document.createElement("button");
927
+ f.className = "date-picker-nav", f.setAttribute("aria-label", "Next month"), f.innerHTML = "&#8250;", d.appendChild(a), d.appendChild(u), d.appendChild(f), l.appendChild(d), r.appendChild(l);
928
+ function b() {
929
+ Rt(l, c), _t(l, c, s, E);
930
+ }
931
+ function h() {
932
+ l.classList.add("active"), b(), requestAnimationFrame(() => {
933
+ (l.querySelector(".date-picker-cell.selected") ?? l.querySelector(".date-picker-cell.today") ?? l.querySelector(".date-picker-cell:not(.date-picker-cell-other)"))?.focus();
934
+ });
935
+ }
936
+ function g() {
937
+ l.classList.remove("active"), n.focus();
938
+ }
939
+ function E(m) {
940
+ c.selected = m, n.value = Dt(m), n.dispatchEvent(new Event("change", { bubbles: !0 })), g();
941
+ }
942
+ a.addEventListener(
943
+ "click",
944
+ () => {
945
+ c.viewMonth--, c.viewMonth < 0 && (c.viewMonth = 11, c.viewYear--), b();
946
+ },
947
+ { signal: t }
948
+ ), f.addEventListener(
949
+ "click",
950
+ () => {
951
+ c.viewMonth++, c.viewMonth > 11 && (c.viewMonth = 0, c.viewYear++), b();
952
+ },
953
+ { signal: t }
954
+ ), n.addEventListener(
955
+ "click",
956
+ () => {
957
+ l.classList.contains("active") ? g() : h();
958
+ },
959
+ { signal: t }
960
+ ), G(
961
+ r,
962
+ () => {
963
+ l.classList.contains("active") && g();
964
+ },
965
+ t
966
+ ), l.addEventListener(
967
+ "keydown",
968
+ (m) => {
969
+ if (m.key === "Escape") {
970
+ m.preventDefault(), g();
971
+ return;
972
+ }
973
+ if (m.key === "Tab") {
974
+ Pe(l, m);
975
+ return;
976
+ }
977
+ const p = Array.from(
978
+ l.querySelectorAll(".date-picker-cell:not(.date-picker-cell-other)")
979
+ ), v = p.indexOf(document.activeElement);
980
+ let y = v;
981
+ switch (m.key) {
982
+ case "ArrowRight":
983
+ m.preventDefault(), y = v + 1;
984
+ break;
985
+ case "ArrowLeft":
986
+ m.preventDefault(), y = v - 1;
987
+ break;
988
+ case "ArrowDown":
989
+ m.preventDefault(), y = v + 7;
990
+ break;
991
+ case "ArrowUp":
992
+ m.preventDefault(), y = v - 7;
993
+ break;
994
+ case "Home":
995
+ m.preventDefault(), y = v - v % 7;
996
+ break;
997
+ case "End":
998
+ m.preventDefault(), y = v + (6 - v % 7);
999
+ break;
1000
+ case "PageDown":
1001
+ m.preventDefault(), f.click();
1002
+ return;
1003
+ case "PageUp":
1004
+ m.preventDefault(), a.click();
1005
+ return;
1006
+ case "Enter":
1007
+ case " ":
1008
+ v >= 0 && (m.preventDefault(), p[v].click());
1009
+ return;
1010
+ default:
1011
+ return;
1012
+ }
1013
+ y >= 0 && y < p.length && p[y].focus();
1014
+ },
1015
+ { signal: t }
1016
+ ), b();
1017
+ }), {
1018
+ destroy() {
1019
+ U?.abort(), U = null;
1020
+ }
1021
+ };
1022
+ }
1023
+ const It = "[data-sol-color-picker]";
1024
+ let Y = null;
1025
+ function Fe(e) {
1026
+ const { h: t, s: i, v: r } = e, o = r * i, n = o * (1 - Math.abs(t / 60 % 2 - 1)), s = r - o;
1027
+ let c = 0, l = 0, d = 0;
1028
+ return t < 60 ? (c = o, l = n) : t < 120 ? (c = n, l = o) : t < 180 ? (l = o, d = n) : t < 240 ? (l = n, d = o) : t < 300 ? (c = n, d = o) : (c = o, d = n), [Math.round((c + s) * 255), Math.round((l + s) * 255), Math.round((d + s) * 255)];
1029
+ }
1030
+ function Be(e, t, i) {
1031
+ return "#" + [e, t, i].map((r) => r.toString(16).padStart(2, "0")).join("");
1032
+ }
1033
+ function ne(e) {
1034
+ const t = e.replace("#", "").match(/.{2}/g);
1035
+ if (!t) return { h: 0, s: 0, v: 0 };
1036
+ const [i, r, o] = t.map((d) => parseInt(d, 16) / 255), n = Math.max(i, r, o), s = Math.min(i, r, o), c = n - s;
1037
+ let l = 0;
1038
+ return c > 0 && (n === i ? l = ((r - o) / c + 6) % 6 : n === r ? l = (o - i) / c + 2 : l = (i - r) / c + 4, l *= 60), {
1039
+ h: l,
1040
+ s: n === 0 ? 0 : c / n,
1041
+ v: n
1042
+ };
1043
+ }
1044
+ function Le(e) {
1045
+ const [t, i, r] = Fe(e);
1046
+ return Be(t, i, r);
1047
+ }
1048
+ function Pt(e) {
1049
+ Y?.abort(), Y = new AbortController();
1050
+ const { signal: t } = Y;
1051
+ return (e?.root ?? document).querySelectorAll(e?.selector ?? It).forEach((r) => {
1052
+ const o = r.querySelector(".color-picker-trigger"), n = r.querySelector(".color-picker-popup"), s = r.querySelector(".color-picker-area"), c = r.querySelector(".color-picker-hue"), l = r.querySelector(".color-picker-input");
1053
+ if (!o || !n) return;
1054
+ const d = o, a = n, u = l?.value ?? "#d4a843";
1055
+ let f = ne(u), b = s?.querySelector(".color-picker-area-thumb");
1056
+ s && !b && (b = document.createElement("div"), b.className = "color-picker-area-thumb", s.appendChild(b));
1057
+ let h = c?.querySelector(".color-picker-slider-thumb");
1058
+ c && !h && (h = document.createElement("div"), h.className = "color-picker-slider-thumb", c.appendChild(h));
1059
+ function g() {
1060
+ const p = Le(f), [v, y, S] = Fe({ h: f.h, s: 1, v: 1 }), O = Be(v, y, S);
1061
+ d.style.setProperty("--cp-trigger-bg", p), l && (l.value = p), s && s.style.setProperty("--cp-area-bg", O), b && (b.style.setProperty("--cp-thumb-x", `${String(f.s * 100)}%`), b.style.setProperty("--cp-thumb-y", `${String((1 - f.v) * 100)}%`), b.style.setProperty("--cp-thumb-bg", p)), h && h.style.setProperty("--cp-hue-x", `${String(f.h / 360 * 100)}%`);
1062
+ }
1063
+ function E() {
1064
+ r.dispatchEvent(
1065
+ new CustomEvent("color-change", {
1066
+ bubbles: !0,
1067
+ detail: { hex: Le(f), hsv: { ...f } }
1068
+ })
1069
+ );
1070
+ }
1071
+ if (d.addEventListener(
1072
+ "click",
1073
+ () => {
1074
+ a.classList.toggle("active"), a.classList.contains("active") && g();
1075
+ },
1076
+ { signal: t }
1077
+ ), G(
1078
+ r,
1079
+ () => {
1080
+ a.classList.remove("active");
1081
+ },
1082
+ t
1083
+ ), s) {
1084
+ let p = function(v) {
1085
+ if (!s) return;
1086
+ const y = s.getBoundingClientRect();
1087
+ f.s = Math.max(0, Math.min(1, (v.clientX - y.left) / y.width)), f.v = Math.max(0, Math.min(1, 1 - (v.clientY - y.top) / y.height)), g(), E();
1088
+ };
1089
+ s.addEventListener(
1090
+ "pointerdown",
1091
+ (v) => {
1092
+ p(v);
1093
+ const y = (O) => {
1094
+ p(O);
1095
+ }, S = () => {
1096
+ document.removeEventListener("pointermove", y), document.removeEventListener("pointerup", S);
1097
+ };
1098
+ document.addEventListener("pointermove", y), document.addEventListener("pointerup", S);
1099
+ },
1100
+ { signal: t }
1101
+ );
1102
+ }
1103
+ if (c) {
1104
+ let p = function(v) {
1105
+ if (!c) return;
1106
+ const y = c.getBoundingClientRect();
1107
+ f.h = Math.max(0, Math.min(360, (v.clientX - y.left) / y.width * 360)), g(), E();
1108
+ };
1109
+ c.addEventListener(
1110
+ "pointerdown",
1111
+ (v) => {
1112
+ p(v);
1113
+ const y = (O) => {
1114
+ p(O);
1115
+ }, S = () => {
1116
+ document.removeEventListener("pointermove", y), document.removeEventListener("pointerup", S);
1117
+ };
1118
+ document.addEventListener("pointermove", y), document.addEventListener("pointerup", S);
1119
+ },
1120
+ { signal: t }
1121
+ );
1122
+ }
1123
+ l?.addEventListener(
1124
+ "change",
1125
+ () => {
1126
+ const p = l.value.trim();
1127
+ /^#[0-9a-fA-F]{6}$/.test(p) && (f = ne(p), g(), E());
1128
+ },
1129
+ { signal: t }
1130
+ );
1131
+ const m = r.querySelector(".color-picker-swatches");
1132
+ if (m) {
1133
+ const p = m.getAttribute("data-swatches");
1134
+ let v = [];
1135
+ if (p)
1136
+ try {
1137
+ v = JSON.parse(p);
1138
+ } catch {
1139
+ console.warn("[soltana] Invalid JSON in data-swatches attribute:", p);
1140
+ }
1141
+ v.forEach((y) => {
1142
+ const S = document.createElement("button");
1143
+ S.className = "color-picker-swatch", S.style.setProperty("--cp-swatch-bg", y), S.setAttribute("aria-label", y), S.addEventListener(
1144
+ "click",
1145
+ () => {
1146
+ f = ne(y), g(), E();
1147
+ },
1148
+ { signal: t }
1149
+ ), m.appendChild(S);
1150
+ });
1151
+ }
1152
+ a.addEventListener(
1153
+ "keydown",
1154
+ (p) => {
1155
+ p.key === "Escape" && (a.classList.remove("active"), d.focus());
1156
+ },
1157
+ { signal: t }
1158
+ ), g();
1159
+ }), {
1160
+ destroy() {
1161
+ Y?.abort(), Y = null;
1162
+ }
1163
+ };
1164
+ }
1165
+ const Nt = "[data-sol-tree]";
1166
+ let j = null;
1167
+ function Ft(e) {
1168
+ return Array.from(e.querySelectorAll(".tree-node-content")).filter((t) => !t.closest(".tree-branch:not(.active) > .tree-children"));
1169
+ }
1170
+ function se(e, t) {
1171
+ e.classList.toggle("active", t), e.querySelector(":scope > .tree-node-content")?.setAttribute("aria-expanded", String(t));
1172
+ }
1173
+ function Bt(e) {
1174
+ j?.abort(), j = new AbortController();
1175
+ const { signal: t } = j;
1176
+ return (e?.root ?? document).querySelectorAll(e?.selector ?? Nt).forEach((r) => {
1177
+ r.getAttribute("role") || r.setAttribute("role", "tree"), r.querySelectorAll(".tree-node").forEach((n) => {
1178
+ n.getAttribute("role") || n.setAttribute("role", "treeitem");
1179
+ }), r.querySelectorAll(".tree-branch").forEach((n) => {
1180
+ const s = n.querySelector(":scope > .tree-node-content"), c = n.classList.contains("active");
1181
+ s?.setAttribute("aria-expanded", String(c)), s?.setAttribute("tabindex", "-1");
1182
+ const l = n.querySelector(":scope > .tree-node-content .tree-toggle"), d = () => {
1183
+ se(n, !n.classList.contains("active"));
1184
+ };
1185
+ l && l.addEventListener(
1186
+ "click",
1187
+ (a) => {
1188
+ a.stopPropagation(), d();
1189
+ },
1190
+ { signal: t }
1191
+ ), s?.addEventListener("click", d, { signal: t });
1192
+ }), r.querySelectorAll(".tree-leaf .tree-node-content").forEach((n) => {
1193
+ n.setAttribute("tabindex", "-1"), n.addEventListener(
1194
+ "click",
1195
+ () => {
1196
+ r.querySelectorAll(".tree-node-content.selected").forEach((s) => {
1197
+ s.classList.remove("selected");
1198
+ }), n.classList.add("selected");
1199
+ },
1200
+ { signal: t }
1201
+ );
1202
+ });
1203
+ const o = r.querySelector(".tree-node-content");
1204
+ o && o.setAttribute("tabindex", "0"), r.addEventListener(
1205
+ "keydown",
1206
+ (n) => {
1207
+ const s = document.activeElement;
1208
+ if (!s.classList.contains("tree-node-content")) return;
1209
+ const c = Ft(r), l = c.indexOf(s);
1210
+ if (l === -1) return;
1211
+ const d = s.closest(".tree-branch");
1212
+ switch (n.key) {
1213
+ case "ArrowDown":
1214
+ n.preventDefault(), l < c.length - 1 && c[l + 1].focus();
1215
+ break;
1216
+ case "ArrowUp":
1217
+ n.preventDefault(), l > 0 && c[l - 1].focus();
1218
+ break;
1219
+ case "ArrowRight":
1220
+ n.preventDefault(), d && !d.classList.contains("active") ? se(d, !0) : d?.classList.contains("active") && d.querySelector(
1221
+ ":scope > .tree-children > .tree-node > .tree-node-content"
1222
+ )?.focus();
1223
+ break;
1224
+ case "ArrowLeft":
1225
+ n.preventDefault(), d?.classList.contains("active") ? se(d, !1) : s.closest(".tree-children")?.closest(".tree-branch")?.querySelector(
1226
+ ":scope > .tree-node-content"
1227
+ )?.focus();
1228
+ break;
1229
+ case "Home":
1230
+ n.preventDefault(), c[0]?.focus();
1231
+ break;
1232
+ case "End":
1233
+ n.preventDefault(), c[c.length - 1]?.focus();
1234
+ break;
1235
+ case "Enter":
1236
+ case " ":
1237
+ n.preventDefault(), s.click();
1238
+ break;
1239
+ }
1240
+ },
1241
+ { signal: t }
1242
+ );
1243
+ }), {
1244
+ destroy() {
1245
+ j?.abort(), j = null;
1246
+ }
1247
+ };
1248
+ }
1249
+ function Ht(e) {
1250
+ const t = Xe(e), i = Qe(e), r = nt(e), o = it(e), n = lt(e), s = dt(e), c = mt(e), l = vt(e), d = Et(e), a = St(e), u = wt(e), f = Ct(e), b = Tt(e), h = Mt(e), g = Pt(e), E = Bt(e);
1251
+ return {
1252
+ destroy() {
1253
+ t.destroy(), i.destroy(), r.destroy(), o.destroy(), n.destroy(), s.destroy(), c.destroy(), l.destroy(), d.destroy(), a.destroy(), u.destroy(), f.destroy(), b.destroy(), h.destroy(), g.destroy(), E.destroy();
1254
+ }
1255
+ };
1256
+ }
1257
+ let A = null, L = null;
1258
+ function Ut() {
1259
+ try {
1260
+ return new CSSStyleSheet(), typeof document.adoptedStyleSheets < "u";
1261
+ } catch {
1262
+ return !1;
1263
+ }
1264
+ }
1265
+ function Yt() {
1266
+ if (A) return A;
1267
+ if (Ut())
1268
+ A = new CSSStyleSheet(), document.adoptedStyleSheets = [...document.adoptedStyleSheets, A];
1269
+ else {
1270
+ if (L = document.createElement("style"), L.id = "soltana-custom", document.head.appendChild(L), !L.sheet)
1271
+ throw new Error("[soltana] Failed to create stylesheet — styleElement.sheet is null");
1272
+ A = L.sheet;
1273
+ }
1274
+ return A;
1275
+ }
1276
+ function He(e) {
1277
+ const t = Yt(), i = t.insertRule(e, t.cssRules.length);
1278
+ return t.cssRules[i];
1279
+ }
1280
+ function Ue(e) {
1281
+ if (!A) return;
1282
+ const t = [];
1283
+ for (let i = 0; i < A.cssRules.length; i++)
1284
+ e.includes(A.cssRules[i]) && t.push(i);
1285
+ for (let i = t.length - 1; i >= 0; i--)
1286
+ A.deleteRule(t[i]);
1287
+ }
1288
+ function Ce() {
1289
+ A && L ? L.remove() : A && (document.adoptedStyleSheets = document.adoptedStyleSheets.filter((e) => e !== A)), A = null, L = null;
1290
+ }
1291
+ function J(e, t, i) {
1292
+ const { isDark: r, mix: o, mixSrgb: n, fallbacks: s } = i, [c, l, d] = r ? s.dark : s.light;
1293
+ return {
1294
+ [`--color-${e}`]: t ?? c,
1295
+ [`--color-${e}-subtle`]: t ? n(t, r ? 12 : 8) : l,
1296
+ [`--color-${e}-text`]: t ? r ? o(t, "white", 25) : o(t, "black", 25) : d
1297
+ };
1298
+ }
1299
+ function jt(e) {
1300
+ const t = e.surfaceBg, i = e.textPrimary, r = e.accentPrimary, o = e.accentDecorative ?? r, s = (e.colorScheme ?? "dark") === "dark", c = (u, f, b) => `color-mix(in oklch, ${u}, ${f} ${String(b)}%)`, l = (u, f) => `color-mix(in srgb, ${u} ${String(f)}%, transparent)`, d = s ? "white" : "black";
1301
+ return {
1302
+ // --- Surface ---
1303
+ "--surface-bg": t,
1304
+ "--surface-1": s ? c(t, "white", 5) : c(t, "white", 50),
1305
+ "--surface-2": s ? c(t, "white", 10) : c(t, "black", 5),
1306
+ "--surface-3": s ? c(t, "white", 15) : c(t, "black", 10),
1307
+ "--surface-4": s ? c(t, "white", 20) : c(t, "black", 15),
1308
+ // --- Text ---
1309
+ "--text-primary": i,
1310
+ "--text-secondary": c(i, t, 25),
1311
+ "--text-tertiary": c(i, t, 45),
1312
+ "--text-muted": c(i, t, 55),
1313
+ "--text-inverse": t,
1314
+ // --- Border ---
1315
+ "--border-default": l(i, s ? 6 : 12),
1316
+ "--border-subtle": l(i, s ? 3 : 7),
1317
+ "--border-strong": l(i, s ? 10 : 20),
1318
+ // --- Accent ---
1319
+ "--accent-primary": r,
1320
+ "--accent-primary-hover": c(r, d, 15),
1321
+ "--accent-primary-active": c(r, "black", 25),
1322
+ // Secondary: hue-rotated complement
1323
+ "--accent-secondary": `oklch(from ${r} l c calc(h + 120))`,
1324
+ "--accent-secondary-hover": `oklch(from ${c(r, d, 15)} l c calc(h + 120))`,
1325
+ "--accent-secondary-active": `oklch(from ${c(r, "black", 25)} l c calc(h + 120))`,
1326
+ // --- Decorative accent ---
1327
+ "--accent-decorative": o,
1328
+ "--accent-decorative-hover": c(o, d, 15),
1329
+ "--accent-decorative-subtle": l(o, 10),
1330
+ "--border-decorative": l(o, s ? 20 : 25),
1331
+ "--border-decorative-strong": l(o, s ? 35 : 40),
1332
+ // --- Semantic colors ---
1333
+ ...J("success", e.colorSuccess, {
1334
+ isDark: s,
1335
+ mix: c,
1336
+ mixSrgb: l,
1337
+ fallbacks: {
1338
+ dark: ["#10b981", "rgb(16 185 129 / 12%)", "#34d399"],
1339
+ light: ["#0d6b4e", "rgb(13 107 78 / 8%)", "#065f46"]
1340
+ }
1341
+ }),
1342
+ ...J("warning", e.colorWarning, {
1343
+ isDark: s,
1344
+ mix: c,
1345
+ mixSrgb: l,
1346
+ fallbacks: {
1347
+ dark: ["#fcd34d", "rgb(252 211 77 / 12%)", "#fde68a"],
1348
+ light: ["#855c0a", "rgb(133 92 10 / 8%)", "#6b4a08"]
1349
+ }
1350
+ }),
1351
+ ...J("error", e.colorError, {
1352
+ isDark: s,
1353
+ mix: c,
1354
+ mixSrgb: l,
1355
+ fallbacks: {
1356
+ dark: ["#ef4444", "rgb(239 68 68 / 12%)", "#f87171"],
1357
+ light: ["#991b1b", "rgb(153 27 27 / 8%)", "#7f1d1d"]
1358
+ }
1359
+ }),
1360
+ ...J("info", e.colorInfo, {
1361
+ isDark: s,
1362
+ mix: c,
1363
+ mixSrgb: l,
1364
+ fallbacks: {
1365
+ dark: ["#3b82f6", "rgb(59 130 246 / 12%)", "#60a5fa"],
1366
+ light: ["#1e40af", "rgb(30 64 175 / 8%)", "#1e3a8a"]
1367
+ }
1368
+ }),
1369
+ // --- Interactive states ---
1370
+ "--state-hover": l(r, s ? 8 : 6),
1371
+ "--state-active": l(r, s ? 14 : 12),
1372
+ "--state-focus-ring": l(r, s ? 40 : 35),
1373
+ "--state-disabled-bg": s ? c(t, "white", 10) : c(t, "black", 10),
1374
+ "--state-disabled-text": c(i, t, 55),
1375
+ // --- Channel tokens ---
1376
+ "--shadow-color": "0 0 0",
1377
+ "--highlight-color": e.highlightColor ?? "255 255 255",
1378
+ "--accent-glow": l(r, s ? 15 : 10),
1379
+ "--channel-sheen-color": s ? "255 255 255" : "0 0 0",
1380
+ "--channel-tint-color": Vt(r),
1381
+ // --- Bridge tokens ---
1382
+ "--glass-opacity": s ? "0.5" : "0.35",
1383
+ "--mesh-color-1": "var(--accent-primary)",
1384
+ "--mesh-color-2": "var(--accent-secondary)",
1385
+ "--mesh-color-3": "var(--accent-decorative)",
1386
+ "--surface-deep": "var(--surface-2)",
1387
+ "--neu-shadow": s ? "rgb(var(--shadow-color) / 65%)" : "rgb(var(--shadow-color) / 35%)",
1388
+ "--neu-light": s ? "rgb(var(--highlight-color) / 12%)" : "rgb(var(--highlight-color) / 88%)",
1389
+ // --- Component tokens ---
1390
+ "--input-bg": s ? l("white", 4) : "white",
1391
+ "--input-border": l(i, s ? 8 : 14),
1392
+ "--input-border-focus": "var(--accent-primary)",
1393
+ "--input-placeholder": c(i, t, 55),
1394
+ "--card-bg": s ? `color-mix(in srgb, ${c(t, "white", 5)} 60%, transparent)` : "color-mix(in srgb, white 78%, transparent)",
1395
+ "--card-border": l(i, s ? 6 : 10),
1396
+ "--badge-bg": l(r, s ? 10 : 8),
1397
+ "--tooltip-bg": s ? t : i,
1398
+ "--tooltip-text": s ? i : c(t, "white", 50),
1399
+ "--scrollbar-thumb": l(i, s ? 12 : 15),
1400
+ "--scrollbar-track": l(i, 3),
1401
+ "--code-bg": s ? "rgb(0 0 0 / 35%)" : c(t, "black", 5),
1402
+ "--toast-bg": "var(--surface-1)",
1403
+ "--toast-text": "var(--text-primary)",
1404
+ "--drawer-bg": "var(--surface-1)",
1405
+ "--popover-bg": "var(--surface-1)",
1406
+ "--popover-border": "var(--border-default)",
1407
+ "--kbd-bg": "var(--surface-2)",
1408
+ "--kbd-border": "var(--border-strong)",
1409
+ "--modal-bg": "var(--surface-1)",
1410
+ "--overlay-backdrop-bg": "rgb(var(--shadow-color) / 60%)"
1411
+ };
1412
+ }
1413
+ const Kt = /^#?[0-9a-fA-F]{3}([0-9a-fA-F]{3})?$/;
1414
+ function Vt(e) {
1415
+ if (!Kt.test(e)) {
1416
+ const n = /^rgb\(\s*(\d+)[, ]\s*(\d+)[, ]\s*(\d+)\s*\)$/.exec(e);
1417
+ if (n)
1418
+ return `${n[1]} ${n[2]} ${n[3]}`;
1419
+ throw new Error(
1420
+ `[soltana] Invalid color "${e}". Expected hex format (#RGB or #RRGGBB) or rgb(r, g, b).`
1421
+ );
1422
+ }
1423
+ let t = e.replace("#", "");
1424
+ t.length === 3 && (t = t[0] + t[0] + t[1] + t[1] + t[2] + t[2]);
1425
+ const i = String(parseInt(t.slice(0, 2), 16)), r = String(parseInt(t.slice(2, 4), 16)), o = String(parseInt(t.slice(4, 6), 16));
1426
+ return `${i} ${r} ${o}`;
1427
+ }
1428
+ const zt = /^[a-zA-Z][a-zA-Z0-9_-]*$/;
1429
+ function Ye(e) {
1430
+ if (!e || !zt.test(e))
1431
+ throw new Error(
1432
+ `[soltana] Invalid tier name "${e}". Must be a non-empty CSS identifier (letters, digits, hyphens, underscores; starting with a letter).`
1433
+ );
1434
+ }
1435
+ function je(e) {
1436
+ return Object.entries(e).map(([t, i]) => `${t}: ${i}`).join("; ");
1437
+ }
1438
+ function Wt(e, t) {
1439
+ Ye(e);
1440
+ const i = jt(t.seed), r = t.tokens ? { ...i, ...t.tokens } : i, o = je(r), n = [];
1441
+ return n.push(
1442
+ He(
1443
+ `[data-theme='${e}'], .theme-${e} { color-scheme: ${t.seed.colorScheme ?? "dark"}; ${o} }`
1444
+ )
1445
+ ), Re("theme", e), {
1446
+ name: e,
1447
+ tier: "theme",
1448
+ unregister() {
1449
+ Ue(n), Me("theme", e);
1450
+ }
1451
+ };
1452
+ }
1453
+ const Gt = [
1454
+ "--relief-bg",
1455
+ "--relief-shadow-sm",
1456
+ "--relief-shadow",
1457
+ "--relief-shadow-lg",
1458
+ "--relief-shadow-inset-sm",
1459
+ "--relief-shadow-inset",
1460
+ "--relief-shadow-inset-lg",
1461
+ "--relief-border"
1462
+ ], Jt = [
1463
+ "--finish-blur",
1464
+ "--finish-saturation",
1465
+ "--finish-opacity",
1466
+ "--finish-overlay",
1467
+ "--finish-sheen"
1468
+ ], Xt = {
1469
+ relief: Gt,
1470
+ finish: Jt
1471
+ };
1472
+ function Zt(e, t, i) {
1473
+ const o = Xt[e].filter((n) => !(n in i));
1474
+ if (o.length > 0)
1475
+ throw new Error(
1476
+ `[soltana] register${e[0].toUpperCase()}${e.slice(1)}("${t}") missing required tokens: ${o.join(", ")}`
1477
+ );
1478
+ }
1479
+ function Ke(e, t, i) {
1480
+ Ye(t), Zt(e, t, i);
1481
+ const r = je(i), o = [];
1482
+ return o.push(He(`[data-${e}='${t}'], .${e}-${t} { ${r} }`)), Re(e, t), {
1483
+ name: t,
1484
+ tier: e,
1485
+ unregister() {
1486
+ Ue(o), Me(e, t);
1487
+ }
1488
+ };
1489
+ }
1490
+ function Qt(e, t) {
1491
+ return Ke("relief", e, t.tokens);
1492
+ }
1493
+ function er(e, t) {
1494
+ return Ke("finish", e, t.tokens);
1495
+ }
1496
+ const tr = "https://fonts.googleapis.com/css2?family=Cinzel:wght@400;500;600;700;800;900&family=Cinzel+Decorative:wght@400;700;900&family=Raleway:ital,wght@0,100..900;1,400;1,500&family=JetBrains+Mono:wght@400;500;600&display=swap";
1497
+ let le = !1;
1498
+ const K = [];
1499
+ function cr(e) {
1500
+ if (le || typeof document > "u") return;
1501
+ le = !0;
1502
+ const t = e ?? tr, i = document.head;
1503
+ if (t.startsWith("https://fonts.googleapis.com")) {
1504
+ const o = document.createElement("link");
1505
+ o.rel = "preconnect", o.href = "https://fonts.googleapis.com", i.appendChild(o), K.push(o);
1506
+ const n = document.createElement("link");
1507
+ n.rel = "preconnect", n.href = "https://fonts.gstatic.com", n.crossOrigin = "", i.appendChild(n), K.push(n);
1508
+ }
1509
+ const r = document.createElement("link");
1510
+ r.rel = "stylesheet", r.href = t, r.onerror = () => {
1511
+ console.warn("[soltana] Failed to load fonts from Google Fonts CDN");
1512
+ }, i.appendChild(r), K.push(r);
1513
+ }
1514
+ function rr() {
1515
+ for (const e of K)
1516
+ e.remove();
1517
+ K.length = 0, le = !1;
1518
+ }
1519
+ const X = Object.freeze({
1520
+ theme: "auto",
1521
+ relief: "flat",
1522
+ finish: "matte",
1523
+ overrides: {}
1524
+ }), xe = {
1525
+ enhancers: !1,
1526
+ strict: !1
1527
+ };
1528
+ let V = null, z = null, Z = null;
1529
+ const ee = /* @__PURE__ */ new Set(), or = /^--[a-zA-Z][-_a-zA-Z0-9]*$/;
1530
+ function ie(e, t) {
1531
+ if (or.test(e)) return !0;
1532
+ const i = `[soltana] Override key "${e}" is not a valid CSS custom property (must match --<ident>)`;
1533
+ if (t) throw new Error(i);
1534
+ return console.error(i), !1;
1535
+ }
1536
+ function ue(e) {
1537
+ return e !== "auto" ? e : typeof window > "u" || typeof window.matchMedia != "function" ? "dark" : window.matchMedia("(prefers-color-scheme: light)").matches ? "light" : "dark";
1538
+ }
1539
+ function Ve(e) {
1540
+ const t = document.documentElement;
1541
+ for (const [i, r] of Object.entries(e))
1542
+ t.style.setProperty(i, r), ee.add(i);
1543
+ }
1544
+ function Te() {
1545
+ const e = document.documentElement;
1546
+ for (const t of ee)
1547
+ e.style.removeProperty(t);
1548
+ ee.clear();
1549
+ }
1550
+ function Oe(e) {
1551
+ const t = document.documentElement;
1552
+ t.setAttribute("data-theme", ue(e.theme)), t.setAttribute("data-relief", e.relief), t.setAttribute("data-finish", e.finish), Ve(e.overrides);
1553
+ }
1554
+ function ae() {
1555
+ V && z && V.removeEventListener("change", z), V = null, z = null;
1556
+ }
1557
+ function ce(e) {
1558
+ ae(), !(typeof window > "u" || typeof window.matchMedia != "function" || e.theme !== "auto") && (V = window.matchMedia("(prefers-color-scheme: light)"), z = () => {
1559
+ e.theme === "auto" && document.documentElement.setAttribute("data-theme", ue("auto"));
1560
+ }, V.addEventListener("change", z));
1561
+ }
1562
+ function T(e, t, i, r) {
1563
+ if (!i.includes(t)) {
1564
+ const o = `[soltana] Unknown ${e} "${t}". Built-in options: ${i.join(", ")}`;
1565
+ if (r) throw new Error(o);
1566
+ console.warn(o);
1567
+ }
1568
+ }
1569
+ function Q(e) {
1570
+ if (Z)
1571
+ try {
1572
+ Z.destroy();
1573
+ } finally {
1574
+ Z = null;
1575
+ }
1576
+ e && (Z = Ht());
1577
+ }
1578
+ function C(e, t) {
1579
+ document.documentElement.dispatchEvent(
1580
+ new CustomEvent("soltana:change", { detail: { type: e, value: t } })
1581
+ );
1582
+ }
1583
+ function lr(e = {}) {
1584
+ const { enhancers: t, strict: i, ...r } = e, o = { ...X, ...r }, n = {
1585
+ enhancers: t ?? xe.enhancers,
1586
+ strict: i ?? xe.strict
1587
+ };
1588
+ o.overrides = Object.fromEntries(
1589
+ Object.entries(o.overrides).filter(([a]) => ie(a, n.strict))
1590
+ ), T("theme", o.theme, fe, n.strict), T("relief", o.relief, he, n.strict), T("finish", o.finish, be, n.strict), Oe(o), ce(o), Q(n.enhancers);
1591
+ const s = [];
1592
+ function c(a) {
1593
+ T("theme", a, fe, n.strict), o.theme = a, document.documentElement.setAttribute("data-theme", ue(a)), ce(o), C("theme", a);
1594
+ }
1595
+ function l(a) {
1596
+ T("relief", a, he, n.strict), o.relief = a, document.documentElement.setAttribute("data-relief", a), C("relief", a);
1597
+ }
1598
+ function d(a) {
1599
+ T("finish", a, be, n.strict), o.finish = a, document.documentElement.setAttribute("data-finish", a), C("finish", a);
1600
+ }
1601
+ return {
1602
+ getState() {
1603
+ return { ...o, overrides: { ...o.overrides } };
1604
+ },
1605
+ setTheme: c,
1606
+ setRelief: l,
1607
+ setFinish: d,
1608
+ setOverrides(a) {
1609
+ const u = {};
1610
+ for (const [f, b] of Object.entries(a))
1611
+ ie(f, n.strict) && (u[f] = b);
1612
+ o.overrides = { ...o.overrides, ...u }, Ve(u), C("overrides", u);
1613
+ },
1614
+ removeOverrides(a) {
1615
+ const u = a.filter((b) => ie(b, n.strict)), f = document.documentElement;
1616
+ for (const b of u)
1617
+ f.style.removeProperty(b), ee.delete(b);
1618
+ o.overrides = Object.fromEntries(
1619
+ Object.entries(o.overrides).filter(([b]) => !u.includes(b))
1620
+ ), C("overrides", null);
1621
+ },
1622
+ registerTheme(a, u) {
1623
+ const f = Wt(a, u);
1624
+ return s.push(f), f;
1625
+ },
1626
+ registerRelief(a, u) {
1627
+ const f = Qt(a, u);
1628
+ return s.push(f), f;
1629
+ },
1630
+ registerFinish(a, u) {
1631
+ const f = er(a, u);
1632
+ return s.push(f), f;
1633
+ },
1634
+ reinitEnhancers() {
1635
+ Q(n.enhancers);
1636
+ },
1637
+ reset() {
1638
+ for (const a of s.splice(0))
1639
+ a.unregister();
1640
+ Ce(), o.theme = X.theme, o.relief = X.relief, o.finish = X.finish, o.overrides = {}, ae(), Te(), Oe(o), ce(o), Q(n.enhancers), C("reset", null);
1641
+ },
1642
+ destroy() {
1643
+ C("destroy", null);
1644
+ for (const u of s.splice(0))
1645
+ u.unregister();
1646
+ Ce(), ae(), Q(!1), rr();
1647
+ const a = document.documentElement;
1648
+ a.removeAttribute("data-theme"), a.removeAttribute("data-relief"), a.removeAttribute("data-finish"), Te();
1649
+ }
1650
+ };
1651
+ }
1652
+ const ar = "0.1.0";
1653
+ export {
1654
+ st as ACCORDION_SELECTOR,
1655
+ Ge as BUILT_IN_FINISHES,
1656
+ We as BUILT_IN_RELIEFS,
1657
+ ze as BUILT_IN_THEMES,
1658
+ Lt as CAROUSEL_SELECTOR,
1659
+ pt as COLLAPSIBLE_SELECTOR,
1660
+ It as COLOR_PICKER_SELECTOR,
1661
+ gt as COMBOBOX_SELECTOR,
1662
+ kt as CONTEXT_MENU_SELECTOR,
1663
+ Ot as DATE_PICKER_SELECTOR,
1664
+ tr as DEFAULT_FONT_URL,
1665
+ X as DEFAULT_STATE,
1666
+ sr as DRAWER_OPEN_SELECTOR,
1667
+ at as DRAWER_SELECTOR,
1668
+ ct as DROPDOWN_SELECTOR,
1669
+ At as HOVER_CARD_SELECTOR,
1670
+ nr as MODAL_OPEN_SELECTOR,
1671
+ Je as MODAL_SELECTOR,
1672
+ xt as SCROLL_AREA_SELECTOR,
1673
+ Ze as TABS_SELECTOR,
1674
+ ut as TOAST_CONTAINER_SELECTOR,
1675
+ tt as TOOLTIP_SELECTOR,
1676
+ Nt as TREE_SELECTOR,
1677
+ be as VALID_FINISHES,
1678
+ he as VALID_RELIEFS,
1679
+ fe as VALID_THEMES,
1680
+ bt as dismissToast,
1681
+ it as initAccordions,
1682
+ Ht as initAll,
1683
+ Ct as initCarousels,
1684
+ vt as initCollapsibles,
1685
+ Pt as initColorPickers,
1686
+ Et as initComboboxes,
1687
+ wt as initContextMenus,
1688
+ Mt as initDatePickers,
1689
+ dt as initDrawers,
1690
+ lt as initDropdowns,
1691
+ St as initHoverCards,
1692
+ Xe as initModals,
1693
+ Tt as initScrollAreas,
1694
+ lr as initSoltana,
1695
+ Qe as initTabs,
1696
+ mt as initToasts,
1697
+ nt as initTooltips,
1698
+ Bt as initTrees,
1699
+ cr as loadSoltanaFonts,
1700
+ ir as showToast,
1701
+ ar as version
1702
+ };