blunt-ui 0.2.0 → 0.2.2

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.
package/dist/index.js CHANGED
@@ -1,19 +1,23 @@
1
- import { jsx as d, jsxs as S } from "react/jsx-runtime";
2
- import l, { css as s, keyframes as L, ThemeProvider as so } from "styled-components";
3
- import D, { useId as E, useState as C, useRef as M, useEffect as j, useContext as U, createContext as Z, forwardRef as X, createElement as R, useCallback as W, useMemo as to } from "react";
4
- import { createPortal as G } from "react-dom";
5
- const F = (o, r, n) => s`
1
+ import { jsx as l, jsxs as h } from "react/jsx-runtime";
2
+ import i, { css as s, keyframes as O, ThemeProvider as eo } from "styled-components";
3
+ import H, { useId as F, useState as z, useRef as M, useEffect as j, useContext as Z, createContext as X, forwardRef as G, createElement as P, useCallback as B, useMemo as ao } from "react";
4
+ import { createPortal as J } from "react-dom";
5
+ const L = (o, r, n) => s`
6
6
  background: ${r};
7
7
  color: ${n};
8
8
  border: ${o.brutalism.borderWidth} solid ${o.colors.neutral[900]};
9
9
  box-shadow: 2px 2px 0 ${o.colors.neutral[900]};
10
- `, eo = l.span`
10
+ `, lo = i.span`
11
11
  display: inline-flex;
12
12
  align-items: center;
13
13
  font-weight: 700;
14
14
  letter-spacing: 0.04em;
15
15
  cursor: default;
16
16
  border-radius: ${({ theme: o }) => o.radius.md};
17
+ white-space: nowrap;
18
+ overflow: hidden;
19
+ text-overflow: ellipsis;
20
+ max-width: 20ch;
17
21
 
18
22
  ${({ $size: o, theme: r }) => ({
19
23
  sm: s`
@@ -27,32 +31,32 @@ const F = (o, r, n) => s`
27
31
  })[o]}
28
32
 
29
33
  ${({ $variant: o, theme: r }) => r.brutalism ? {
30
- primary: F(
34
+ primary: L(
31
35
  r,
32
36
  r.colors.primary[500],
33
37
  r.colors.primary.contrast
34
38
  ),
35
- neutral: F(
39
+ neutral: L(
36
40
  r,
37
41
  r.colors.neutral[200],
38
42
  r.colors.neutral[900]
39
43
  ),
40
- success: F(
44
+ success: L(
41
45
  r,
42
46
  r.colors.success[50],
43
47
  r.colors.success[500]
44
48
  ),
45
- error: F(
49
+ error: L(
46
50
  r,
47
51
  r.colors.error[50],
48
52
  r.colors.error[500]
49
53
  ),
50
- warning: F(
54
+ warning: L(
51
55
  r,
52
56
  r.colors.warning[50],
53
57
  r.colors.warning[500]
54
58
  ),
55
- info: F(r, r.colors.info[50], r.colors.info[500])
59
+ info: L(r, r.colors.info[50], r.colors.info[500])
56
60
  }[o] : {
57
61
  primary: s`
58
62
  background: ${r.colors.primary[50]};
@@ -80,16 +84,16 @@ const F = (o, r, n) => s`
80
84
  `
81
85
  }[o]}
82
86
  `;
83
- function io({
87
+ function co({
84
88
  variant: o = "primary",
85
89
  size: r = "md",
86
90
  children: n,
87
91
  ...t
88
92
  }) {
89
- return /* @__PURE__ */ d(eo, { $variant: o, $size: r, ...t, children: n });
93
+ return /* @__PURE__ */ l(lo, { $variant: o, $size: r, ...t, children: n });
90
94
  }
91
- io.displayName = "Badge";
92
- const N = (o, r, n) => s`
95
+ co.displayName = "Badge";
96
+ const A = (o, r, n) => s`
93
97
  background-color: ${r};
94
98
  color: ${n};
95
99
  border: ${o.brutalism.borderWidth} solid ${o.colors.neutral[900]};
@@ -102,7 +106,7 @@ const N = (o, r, n) => s`
102
106
  transform: translate(2px, 2px);
103
107
  box-shadow: 2px 2px 0 ${o.colors.neutral[900]};
104
108
  }
105
- `, ao = l.button`
109
+ `, uo = i.button`
106
110
  display: inline-flex;
107
111
  align-items: center;
108
112
  justify-content: center;
@@ -122,17 +126,17 @@ const N = (o, r, n) => s`
122
126
  }
123
127
 
124
128
  ${({ $variant: o, theme: r }) => r.brutalism ? {
125
- primary: N(
129
+ primary: A(
126
130
  r,
127
131
  r.colors.primary[500],
128
132
  r.colors.primary.contrast
129
133
  ),
130
- secondary: N(
134
+ secondary: A(
131
135
  r,
132
136
  r.colors.neutral[100],
133
137
  r.colors.neutral[900]
134
138
  ),
135
- outline: N(
139
+ outline: A(
136
140
  r,
137
141
  r.colors.neutral[0],
138
142
  r.colors.neutral[900]
@@ -179,44 +183,44 @@ const N = (o, r, n) => s`
179
183
  `
180
184
  })[o]}
181
185
  `;
182
- function lo({
186
+ function fo({
183
187
  ref: o,
184
188
  as: r,
185
189
  href: n,
186
190
  variant: t = "primary",
187
- size: a = "md",
188
- isLoading: i,
191
+ size: c = "md",
192
+ isLoading: a,
189
193
  disabled: e,
190
- children: c,
191
- ...g
194
+ children: d,
195
+ ...p
192
196
  }) {
193
- return /* @__PURE__ */ d(
194
- ao,
197
+ return /* @__PURE__ */ l(
198
+ uo,
195
199
  {
196
200
  ref: o,
197
201
  as: r ?? (n ? "a" : "button"),
198
202
  href: n,
199
203
  $variant: t,
200
- $size: a,
201
- disabled: i || e,
202
- ...g,
203
- children: i ? "Loading..." : c
204
+ $size: c,
205
+ disabled: a || e,
206
+ ...p,
207
+ children: a ? "Loading..." : d
204
208
  }
205
209
  );
206
210
  }
207
- lo.displayName = "Button";
208
- const co = l.div`
211
+ fo.displayName = "Button";
212
+ const po = i.div`
209
213
  display: flex;
210
214
  flex-direction: column;
211
215
  gap: ${({ theme: o }) => o.spacing[1]};
212
216
  width: ${({ $fullWidth: o }) => o ? "100%" : "auto"};
213
- `, uo = l.label`
217
+ `, go = i.label`
214
218
  font-size: ${({ theme: o }) => o.fontSizes.sm};
215
219
  font-weight: ${({ theme: o }) => o.brutalism ? "700" : "500"};
216
- `, fo = l.span`
220
+ `, $o = i.span`
217
221
  font-size: ${({ theme: o }) => o.fontSizes.xs};
218
222
  color: ${({ $error: o, theme: r }) => o ? r.colors.error[500] : r.colors.neutral[500]};
219
- `, po = l.div`
223
+ `, bo = i.div`
220
224
  display: flex;
221
225
  align-items: center;
222
226
  border-radius: ${({ theme: o }) => o.radius.md};
@@ -269,7 +273,7 @@ const co = l.div`
269
273
  &:focus-within {
270
274
  box-shadow: ${({ theme: o }) => o.shadows.focusRing};
271
275
  }
272
- `, go = l.input`
276
+ `, xo = i.input`
273
277
  flex: 1;
274
278
  border: none;
275
279
  outline: none;
@@ -280,11 +284,11 @@ const co = l.div`
280
284
  cursor: not-allowed;
281
285
  opacity: 0.6;
282
286
  }
283
- `, _ = l.div`
287
+ `, _ = i.div`
284
288
  display: inline-flex;
285
289
  align-items: center;
286
290
  margin: 0 ${({ theme: o }) => o.spacing[1]};
287
- `, $o = l.button`
291
+ `, yo = i.button`
288
292
  display: inline-flex;
289
293
  align-items: center;
290
294
  margin: 0 ${({ theme: o }) => o.spacing[1]};
@@ -298,75 +302,75 @@ const co = l.div`
298
302
  opacity: 0.8;
299
303
  }
300
304
  `;
301
- function bo({
305
+ function wo({
302
306
  ref: o,
303
307
  type: r = "text",
304
308
  size: n = "md",
305
309
  variant: t = "default",
306
- label: a,
307
- helperText: i,
310
+ label: c,
311
+ helperText: a,
308
312
  error: e,
309
- leftElement: c,
310
- rightElement: g,
311
- clearable: f,
312
- onClear: x,
313
- fullWidth: k,
314
- id: v,
315
- value: b,
316
- defaultValue: h,
317
- onChange: z,
318
- ...w
313
+ leftElement: d,
314
+ rightElement: p,
315
+ clearable: u,
316
+ onClear: b,
317
+ fullWidth: m,
318
+ id: $,
319
+ value: x,
320
+ defaultValue: w,
321
+ onChange: S,
322
+ ...C
319
323
  }) {
320
- const m = E(), I = v ?? m, T = `${I}-hint`, [B, u] = C(h ?? ""), p = b !== void 0, $ = p ? b : B, y = typeof e == "string" ? e : void 0, O = !!(i || e), V = (Y) => {
321
- p || u(Y.target.value), z?.(Y);
322
- }, no = () => {
323
- p || u(""), x?.();
324
+ const k = F(), I = $ ?? k, T = `${I}-hint`, [W, f] = z(w ?? ""), g = x !== void 0, y = g ? x : W, v = typeof e == "string" ? e : void 0, E = !!(a || e), V = (D) => {
325
+ g || f(D.target.value), S?.(D);
326
+ }, io = () => {
327
+ g || f(""), b?.();
324
328
  };
325
- return /* @__PURE__ */ S(co, { $fullWidth: k, children: [
326
- a && /* @__PURE__ */ d(uo, { htmlFor: I, children: a }),
327
- /* @__PURE__ */ S(po, { $size: n, $variant: t, $error: !!e, children: [
328
- c && /* @__PURE__ */ d(_, { children: c }),
329
- /* @__PURE__ */ d(
330
- go,
329
+ return /* @__PURE__ */ h(po, { $fullWidth: m, children: [
330
+ c && /* @__PURE__ */ l(go, { htmlFor: I, children: c }),
331
+ /* @__PURE__ */ h(bo, { $size: n, $variant: t, $error: !!e, children: [
332
+ d && /* @__PURE__ */ l(_, { children: d }),
333
+ /* @__PURE__ */ l(
334
+ xo,
331
335
  {
332
336
  id: I,
333
337
  ref: o,
334
338
  type: r,
335
- value: $,
339
+ value: y,
336
340
  onChange: V,
337
- ...w,
341
+ ...C,
338
342
  "aria-invalid": !!e,
339
- "aria-describedby": O ? T : void 0
343
+ "aria-describedby": E ? T : void 0
340
344
  }
341
345
  ),
342
- f && $ && /* @__PURE__ */ d(
343
- $o,
346
+ u && y && /* @__PURE__ */ l(
347
+ yo,
344
348
  {
345
349
  type: "button",
346
- onClick: no,
350
+ onClick: io,
347
351
  "aria-label": "Clear input",
348
352
  children: "✕"
349
353
  }
350
354
  ),
351
- g && /* @__PURE__ */ d(_, { children: g })
355
+ p && /* @__PURE__ */ l(_, { children: p })
352
356
  ] }),
353
- O && /* @__PURE__ */ d(fo, { id: T, $error: !!e, children: y ?? i })
357
+ E && /* @__PURE__ */ l($o, { id: T, $error: !!e, children: v ?? a })
354
358
  ] });
355
359
  }
356
- bo.displayName = "Input";
357
- const xo = L`
360
+ wo.displayName = "Input";
361
+ const vo = O`
358
362
  from { opacity: 0; }
359
363
  to { opacity: 1; }
360
- `, yo = L`
364
+ `, mo = O`
361
365
  from { opacity: 1; }
362
366
  to { opacity: 0; }
363
- `, mo = L`
367
+ `, ko = O`
364
368
  from { opacity: 0; transform: scale(0.95) translateY(-8px); }
365
369
  to { opacity: 1; transform: scale(1) translateY(0); }
366
- `, vo = L`
370
+ `, ho = O`
367
371
  from { opacity: 1; transform: scale(1) translateY(0); }
368
372
  to { opacity: 0; transform: scale(0.95) translateY(-8px); }
369
- `, wo = l.div`
373
+ `, Co = i.div`
370
374
  position: fixed;
371
375
  inset: 0;
372
376
  background-color: rgba(0, 0, 0, 0.5);
@@ -374,9 +378,9 @@ const xo = L`
374
378
  align-items: center;
375
379
  justify-content: center;
376
380
  z-index: ${({ theme: o }) => o.zIndex.modal};
377
- animation: ${({ $closing: o }) => o ? yo : xo} 0.15s ease
381
+ animation: ${({ $closing: o }) => o ? mo : vo} 0.15s ease
378
382
  forwards;
379
- `, ko = l.div`
383
+ `, zo = i.div`
380
384
  position: relative;
381
385
  background: ${({ theme: o }) => o.colors.neutral[0]};
382
386
  border-radius: ${({ theme: o }) => o.radius.md};
@@ -385,7 +389,7 @@ const xo = L`
385
389
  display: flex;
386
390
  flex-direction: column;
387
391
  max-height: 90vh;
388
- animation: ${({ $closing: o }) => o ? vo : mo} 0.15s ease
392
+ animation: ${({ $closing: o }) => o ? ho : ko} 0.15s ease
389
393
  forwards;
390
394
 
391
395
  ${({ $size: o }) => o === "sm" && s`
@@ -403,19 +407,19 @@ const xo = L`
403
407
  max-height: 100vh;
404
408
  border-radius: 0;
405
409
  `}
406
- `, ho = l.div`
410
+ `, So = i.div`
407
411
  display: flex;
408
412
  align-items: center;
409
413
  gap: ${({ theme: o }) => o.spacing[2]};
410
414
  padding: ${({ theme: o }) => o.spacing[4]};
411
415
  border-bottom: 1px solid ${({ theme: o }) => o.colors.neutral[200]};
412
416
  flex-shrink: 0;
413
- `, zo = l.h2`
417
+ `, Io = i.h2`
414
418
  flex: 1;
415
419
  font-size: ${({ theme: o }) => o.fontSizes.lg};
416
420
  font-weight: 600;
417
421
  margin: 0;
418
- `, Co = l.button`
422
+ `, To = i.button`
419
423
  display: inline-flex;
420
424
  align-items: center;
421
425
  justify-content: center;
@@ -440,11 +444,11 @@ const xo = L`
440
444
  outline: 2px solid ${({ theme: o }) => o.colors.primary[500]};
441
445
  outline-offset: 2px;
442
446
  }
443
- `, So = l.div`
447
+ `, Wo = i.div`
444
448
  padding: ${({ theme: o }) => o.spacing[4]};
445
449
  overflow-y: auto;
446
450
  flex: 1;
447
- `, Io = l.div`
451
+ `, Bo = i.div`
448
452
  display: flex;
449
453
  align-items: center;
450
454
  justify-content: flex-end;
@@ -452,7 +456,7 @@ const xo = L`
452
456
  padding: ${({ theme: o }) => o.spacing[4]};
453
457
  border-top: 1px solid ${({ theme: o }) => o.colors.neutral[200]};
454
458
  flex-shrink: 0;
455
- `, To = [
459
+ `, Oo = [
456
460
  "button:not([disabled])",
457
461
  "input:not([disabled])",
458
462
  "select:not([disabled])",
@@ -460,89 +464,89 @@ const xo = L`
460
464
  "a[href]",
461
465
  '[tabindex]:not([tabindex="-1"])'
462
466
  ].join(", ");
463
- function H(o) {
467
+ function q(o) {
464
468
  return Array.from(
465
- o.querySelectorAll(To)
469
+ o.querySelectorAll(Oo)
466
470
  );
467
471
  }
468
- function Bo({
472
+ function Lo({
469
473
  open: o,
470
474
  onClose: r,
471
475
  title: n,
472
476
  children: t,
473
- footer: a,
474
- size: i = "md",
477
+ footer: c,
478
+ size: a = "md",
475
479
  closeOnBackdrop: e = !0,
476
- closeOnEscape: c = !0,
477
- ariaLabelledBy: g,
478
- ariaDescribedBy: f
480
+ closeOnEscape: d = !0,
481
+ ariaLabelledBy: p,
482
+ ariaDescribedBy: u
479
483
  }) {
480
- const x = M(null), k = E(), v = g ?? (n ? k : void 0), [b, h] = C(o), [z, w] = C(!1);
484
+ const b = M(null), m = F(), $ = p ?? (n ? m : void 0), [x, w] = z(o), [S, C] = z(!1);
481
485
  return j(() => {
482
486
  if (o)
483
- h(!0), w(!1);
484
- else if (b) {
485
- w(!0);
486
- const m = setTimeout(() => {
487
- h(!1), w(!1);
487
+ w(!0), C(!1);
488
+ else if (x) {
489
+ C(!0);
490
+ const k = setTimeout(() => {
491
+ w(!1), C(!1);
488
492
  }, 150);
489
- return () => clearTimeout(m);
493
+ return () => clearTimeout(k);
490
494
  }
491
- }, [o, b]), j(() => {
495
+ }, [o, x]), j(() => {
492
496
  if (!o)
493
497
  return;
494
- const m = document.body.style.overflow;
498
+ const k = document.body.style.overflow;
495
499
  return document.body.style.overflow = "hidden", () => {
496
- document.body.style.overflow = m;
500
+ document.body.style.overflow = k;
497
501
  };
498
502
  }, [o]), j(() => {
499
- if (!o || !x.current)
503
+ if (!o || !b.current)
500
504
  return;
501
- const m = x.current, I = document.activeElement;
502
- (H(m)[0] ?? m).focus();
503
- const B = (u) => {
504
- if (u.key === "Escape" && c) {
505
+ const k = b.current, I = document.activeElement;
506
+ (q(k)[0] ?? k).focus();
507
+ const W = (f) => {
508
+ if (f.key === "Escape" && d) {
505
509
  r();
506
510
  return;
507
511
  }
508
- if (u.key !== "Tab")
512
+ if (f.key !== "Tab")
509
513
  return;
510
- const p = H(m);
511
- if (p.length === 0) {
512
- u.preventDefault();
514
+ const g = q(k);
515
+ if (g.length === 0) {
516
+ f.preventDefault();
513
517
  return;
514
518
  }
515
- const $ = p[0], y = p[p.length - 1];
516
- u.shiftKey ? document.activeElement === $ && (u.preventDefault(), y.focus()) : document.activeElement === y && (u.preventDefault(), $.focus());
519
+ const y = g[0], v = g[g.length - 1];
520
+ f.shiftKey ? document.activeElement === y && (f.preventDefault(), v.focus()) : document.activeElement === v && (f.preventDefault(), y.focus());
517
521
  };
518
- return document.addEventListener("keydown", B), () => {
519
- document.removeEventListener("keydown", B), I?.focus();
522
+ return document.addEventListener("keydown", W), () => {
523
+ document.removeEventListener("keydown", W), I?.focus();
520
524
  };
521
- }, [o, c, r, b]), b ? G(
522
- /* @__PURE__ */ d(
523
- wo,
525
+ }, [o, d, r, x]), x ? J(
526
+ /* @__PURE__ */ l(
527
+ Co,
524
528
  {
525
- $closing: z,
529
+ $closing: S,
526
530
  onClick: e ? r : void 0,
527
- children: /* @__PURE__ */ S(
528
- ko,
531
+ children: /* @__PURE__ */ h(
532
+ zo,
529
533
  {
530
- ref: x,
534
+ ref: b,
531
535
  role: "dialog",
532
536
  "aria-modal": "true",
533
- "aria-labelledby": v,
534
- "aria-describedby": f,
535
- $size: i,
536
- $closing: z,
537
+ "aria-labelledby": $,
538
+ "aria-describedby": u,
539
+ $size: a,
540
+ $closing: S,
537
541
  tabIndex: -1,
538
- onClick: (m) => m.stopPropagation(),
542
+ onClick: (k) => k.stopPropagation(),
539
543
  children: [
540
- /* @__PURE__ */ S(ho, { children: [
541
- n && /* @__PURE__ */ d(zo, { id: k, children: n }),
542
- /* @__PURE__ */ d(Co, { onClick: r, "aria-label": "Close modal", children: "×" })
544
+ /* @__PURE__ */ h(So, { children: [
545
+ n && /* @__PURE__ */ l(Io, { id: m, children: n }),
546
+ /* @__PURE__ */ l(To, { onClick: r, "aria-label": "Close modal", children: "×" })
543
547
  ] }),
544
- /* @__PURE__ */ d(So, { children: t }),
545
- a && /* @__PURE__ */ d(Io, { children: a })
548
+ /* @__PURE__ */ l(Wo, { children: t }),
549
+ c && /* @__PURE__ */ l(Bo, { children: c })
546
550
  ]
547
551
  }
548
552
  )
@@ -551,17 +555,91 @@ function Bo({
551
555
  document.body
552
556
  ) : null;
553
557
  }
554
- Bo.displayName = "Modal";
555
- const Wo = L`
558
+ Lo.displayName = "Modal";
559
+ const Q = (...o) => o.filter((r, n, t) => !!r && r.trim() !== "" && t.indexOf(r) === n).join(" ").trim();
560
+ const jo = (o) => o.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
561
+ const Fo = (o) => o.replace(
562
+ /^([A-Z])|[\s-_]+(\w)/g,
563
+ (r, n, t) => t ? t.toUpperCase() : n.toLowerCase()
564
+ );
565
+ const K = (o) => {
566
+ const r = Fo(o);
567
+ return r.charAt(0).toUpperCase() + r.slice(1);
568
+ };
569
+ var R = {
570
+ xmlns: "http://www.w3.org/2000/svg",
571
+ width: 24,
572
+ height: 24,
573
+ viewBox: "0 0 24 24",
574
+ fill: "none",
575
+ stroke: "currentColor",
576
+ strokeWidth: 2,
577
+ strokeLinecap: "round",
578
+ strokeLinejoin: "round"
579
+ };
580
+ const Eo = (o) => {
581
+ for (const r in o)
582
+ if (r.startsWith("aria-") || r === "role" || r === "title")
583
+ return !0;
584
+ return !1;
585
+ }, No = X({}), Vo = () => Z(No), Ao = G(
586
+ ({ color: o, size: r, strokeWidth: n, absoluteStrokeWidth: t, className: c = "", children: a, iconNode: e, ...d }, p) => {
587
+ const {
588
+ size: u = 24,
589
+ strokeWidth: b = 2,
590
+ absoluteStrokeWidth: m = !1,
591
+ color: $ = "currentColor",
592
+ className: x = ""
593
+ } = Vo() ?? {}, w = t ?? m ? Number(n ?? b) * 24 / Number(r ?? u) : n ?? b;
594
+ return P(
595
+ "svg",
596
+ {
597
+ ref: p,
598
+ ...R,
599
+ width: r ?? u ?? R.width,
600
+ height: r ?? u ?? R.height,
601
+ stroke: o ?? $,
602
+ strokeWidth: w,
603
+ className: Q("lucide", x, c),
604
+ ...!a && !Eo(d) && { "aria-hidden": "true" },
605
+ ...d
606
+ },
607
+ [
608
+ ...e.map(([S, C]) => P(S, C)),
609
+ ...Array.isArray(a) ? a : [a]
610
+ ]
611
+ );
612
+ }
613
+ );
614
+ const oo = (o, r) => {
615
+ const n = G(
616
+ ({ className: t, ...c }, a) => P(Ao, {
617
+ ref: a,
618
+ iconNode: r,
619
+ className: Q(
620
+ `lucide-${jo(K(o))}`,
621
+ `lucide-${o}`,
622
+ t
623
+ ),
624
+ ...c
625
+ })
626
+ );
627
+ return n.displayName = K(o), n;
628
+ };
629
+ const Ro = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]], ro = oo("chevron-down", Ro);
630
+ const Mo = [
631
+ ["path", { d: "M18 6 6 18", key: "1bl5f8" }],
632
+ ["path", { d: "m6 6 12 12", key: "d8bk6v" }]
633
+ ], no = oo("x", Mo), Po = O`
556
634
  from { opacity: 0; transform: translateY(12px); }
557
635
  to { opacity: 1; transform: translateY(0); }
558
- `, Lo = L`
636
+ `, Yo = O`
559
637
  from { opacity: 0; transform: translateY(-12px); }
560
638
  to { opacity: 1; transform: translateY(0); }
561
- `, Fo = L`
639
+ `, Do = O`
562
640
  from { opacity: 1; }
563
641
  to { opacity: 0; }
564
- `, jo = l.div`
642
+ `, Ho = i.div`
565
643
  position: fixed;
566
644
  z-index: ${({ theme: o }) => o.zIndex.toast};
567
645
  display: flex;
@@ -571,14 +649,12 @@ const Wo = L`
571
649
  max-width: 400px;
572
650
  padding: ${({ theme: o }) => `${o.spacing[3]} ${o.spacing[4]}`};
573
651
  border-radius: ${({ theme: o }) => o.radius.md};
574
- border-left: 4px solid transparent;
575
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
576
652
  animation: ${({ $closing: o, $position: r }) => o ? s`
577
- ${Fo} 0.2s ease forwards
653
+ ${Do} 0.2s ease forwards
578
654
  ` : r.startsWith("top") ? s`
579
- ${Lo} 0.2s ease forwards
655
+ ${Yo} 0.2s ease forwards
580
656
  ` : s`
581
- ${Wo} 0.2s ease forwards
657
+ ${Po} 0.2s ease forwards
582
658
  `};
583
659
 
584
660
  ${({ $position: o, theme: r }) => ({
@@ -599,32 +675,59 @@ const Wo = L`
599
675
  left: ${r.spacing[6]};
600
676
  `
601
677
  })[o]}
602
- `, Oo = l(jo)`
603
- ${({ $variant: o, theme: r }) => ({
678
+ `, N = (o, r, n) => s`
679
+ background: ${r};
680
+ border: ${o.brutalism.borderWidth} solid ${n};
681
+ box-shadow: ${o.brutalism.shadowOffset} ${o.brutalism.shadowOffset}
682
+ 0 ${n};
683
+ `, _o = i(Ho)`
684
+ ${({ $variant: o, theme: r }) => r.brutalism ? {
685
+ success: N(
686
+ r,
687
+ r.colors.success[50],
688
+ r.colors.success[500]
689
+ ),
690
+ error: N(
691
+ r,
692
+ r.colors.error[50],
693
+ r.colors.error[500]
694
+ ),
695
+ warning: N(
696
+ r,
697
+ r.colors.warning[50],
698
+ r.colors.warning[500]
699
+ ),
700
+ info: N(r, r.colors.info[50], r.colors.info[500])
701
+ }[o] : {
604
702
  success: s`
605
703
  background: ${r.colors.success[50]};
606
- border-left-color: ${r.colors.success[500]};
704
+ border-left: 4px solid ${r.colors.success[500]};
705
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
607
706
  `,
608
707
  error: s`
609
708
  background: ${r.colors.error[50]};
610
- border-left-color: ${r.colors.error[500]};
709
+ border-left: 4px solid ${r.colors.error[500]};
710
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
611
711
  `,
612
712
  warning: s`
613
713
  background: ${r.colors.warning[50]};
614
- border-left-color: ${r.colors.warning[500]};
714
+ border-left: 4px solid ${r.colors.warning[500]};
715
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
615
716
  `,
616
717
  info: s`
617
718
  background: ${r.colors.info[50]};
618
- border-left-color: ${r.colors.info[500]};
719
+ border-left: 4px solid ${r.colors.info[500]};
720
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
619
721
  `
620
- })[o]}
621
- `, Eo = l.p`
722
+ }[o]}
723
+ `, qo = i.p`
622
724
  flex: 1;
623
725
  margin: 0;
624
726
  font-size: ${({ theme: o }) => o.fontSizes.sm};
727
+ font-weight: ${({ theme: o }) => o.brutalism ? 600 : 400};
625
728
  line-height: 1.5;
626
729
  color: ${({ theme: o }) => o.colors.neutral[900]};
627
- `, Vo = l.button`
730
+ `, Ko = i.button`
628
731
  flex-shrink: 0;
629
732
  display: inline-flex;
630
733
  align-items: center;
@@ -635,8 +738,6 @@ const Wo = L`
635
738
  background: none;
636
739
  cursor: pointer;
637
740
  border-radius: ${({ theme: o }) => o.radius.md};
638
- font-size: 18px;
639
- line-height: 1;
640
741
  color: ${({ theme: o }) => o.colors.neutral[500]};
641
742
 
642
743
  &:hover {
@@ -649,72 +750,72 @@ const Wo = L`
649
750
  outline-offset: 2px;
650
751
  }
651
752
  `;
652
- function J({
753
+ function so({
653
754
  open: o,
654
755
  onClose: r,
655
756
  message: n,
656
757
  variant: t = "info",
657
- duration: a = 4e3,
658
- position: i = "bottom-right"
758
+ duration: c = 4e3,
759
+ position: a = "bottom-right"
659
760
  }) {
660
- const [e, c] = C(o), [g, f] = C(!1);
761
+ const [e, d] = z(o), [p, u] = z(!1);
661
762
  return j(() => {
662
763
  if (o)
663
- c(!0), f(!1);
764
+ d(!0), u(!1);
664
765
  else if (e) {
665
- f(!0);
666
- const x = setTimeout(() => {
667
- c(!1), f(!1);
766
+ u(!0);
767
+ const b = setTimeout(() => {
768
+ d(!1), u(!1);
668
769
  }, 200);
669
- return () => clearTimeout(x);
770
+ return () => clearTimeout(b);
670
771
  }
671
772
  }, [o, e]), j(() => {
672
- if (!o || a === 0)
773
+ if (!o || c === 0)
673
774
  return;
674
- const x = setTimeout(r, a);
675
- return () => clearTimeout(x);
676
- }, [o, a, r]), e ? G(
677
- /* @__PURE__ */ S(
678
- Oo,
775
+ const b = setTimeout(r, c);
776
+ return () => clearTimeout(b);
777
+ }, [o, c, r]), e ? J(
778
+ /* @__PURE__ */ h(
779
+ _o,
679
780
  {
680
- $position: i,
781
+ $position: a,
681
782
  $variant: t,
682
- $closing: g,
783
+ $closing: p,
683
784
  role: "alert",
684
785
  "aria-live": "polite",
685
786
  children: [
686
- /* @__PURE__ */ d(Eo, { children: n }),
687
- /* @__PURE__ */ d(Vo, { onClick: r, "aria-label": "Close notification", children: "×" })
787
+ /* @__PURE__ */ l(qo, { children: n }),
788
+ /* @__PURE__ */ l(Ko, { onClick: r, "aria-label": "Close notification", children: /* @__PURE__ */ l(no, { size: 14, strokeWidth: 2.5 }) })
688
789
  ]
689
790
  }
690
791
  ),
691
792
  document.body
692
793
  ) : null;
693
794
  }
694
- J.displayName = "Toast";
695
- const No = l.form`
795
+ so.displayName = "Toast";
796
+ const Uo = i.form`
696
797
  display: flex;
697
798
  flex-direction: column;
698
799
  gap: ${({ theme: o }) => o.spacing[4]};
699
- `, Ao = l.div`
800
+ `, Zo = i.div`
700
801
  display: flex;
701
802
  flex-direction: column;
702
803
  gap: ${({ theme: o }) => o.spacing[1]};
703
- `, Mo = l.label`
804
+ `, Xo = i.label`
704
805
  font-size: ${({ theme: o }) => o.fontSizes.sm};
705
806
  font-weight: 500;
706
807
  color: ${({ theme: o }) => o.colors.neutral[900]};
707
- `, Ro = l.span`
808
+ `, Go = i.span`
708
809
  color: ${({ theme: o }) => o.colors.error[500]};
709
810
  margin-left: 2px;
710
811
  aria-hidden: true;
711
- `, Po = l.span`
812
+ `, Jo = i.span`
712
813
  font-size: ${({ theme: o }) => o.fontSizes.xs};
713
814
  color: ${({ $error: o, theme: r }) => o ? r.colors.error[500] : r.colors.neutral[500]};
714
815
  `;
715
- function Yo({ onSubmit: o, children: r, ...n }) {
716
- return /* @__PURE__ */ d(
717
- No,
816
+ function Qo({ onSubmit: o, children: r, ...n }) {
817
+ return /* @__PURE__ */ l(
818
+ Uo,
718
819
  {
719
820
  onSubmit: (t) => {
720
821
  t.preventDefault(), o?.(t);
@@ -725,119 +826,45 @@ function Yo({ onSubmit: o, children: r, ...n }) {
725
826
  }
726
827
  );
727
828
  }
728
- Yo.displayName = "Form";
729
- function Do({
829
+ Qo.displayName = "Form";
830
+ function or({
730
831
  label: o,
731
832
  error: r,
732
833
  helperText: n,
733
834
  required: t,
734
- children: a
835
+ children: c
735
836
  }) {
736
- const i = E(), e = `${i}-hint`, c = !!(r || n), g = typeof r == "string" ? r : void 0, f = D.isValidElement(a) ? D.cloneElement(
737
- a,
837
+ const a = F(), e = `${a}-hint`, d = !!(r || n), p = typeof r == "string" ? r : void 0, u = H.isValidElement(c) ? H.cloneElement(
838
+ c,
738
839
  {
739
- id: i,
740
- ...c && { "aria-describedby": e },
840
+ id: a,
841
+ ...d && { "aria-describedby": e },
741
842
  ...r && { "aria-invalid": !0 }
742
843
  }
743
- ) : a;
744
- return /* @__PURE__ */ S(Ao, { children: [
745
- o && /* @__PURE__ */ S(Mo, { htmlFor: i, children: [
844
+ ) : c;
845
+ return /* @__PURE__ */ h(Zo, { children: [
846
+ o && /* @__PURE__ */ h(Xo, { htmlFor: a, children: [
746
847
  o,
747
- t && /* @__PURE__ */ d(Ro, { "aria-hidden": "true", children: " *" })
848
+ t && /* @__PURE__ */ l(Go, { "aria-hidden": "true", children: " *" })
748
849
  ] }),
749
- f,
750
- c && /* @__PURE__ */ d(Po, { id: e, $error: !!r, children: g ?? n })
850
+ u,
851
+ d && /* @__PURE__ */ l(Jo, { id: e, $error: !!r, children: p ?? n })
751
852
  ] });
752
853
  }
753
- Do.displayName = "FormField";
754
- const Q = (...o) => o.filter((r, n, t) => !!r && r.trim() !== "" && t.indexOf(r) === n).join(" ").trim();
755
- const _o = (o) => o.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
756
- const Ho = (o) => o.replace(
757
- /^([A-Z])|[\s-_]+(\w)/g,
758
- (r, n, t) => t ? t.toUpperCase() : n.toLowerCase()
759
- );
760
- const q = (o) => {
761
- const r = Ho(o);
762
- return r.charAt(0).toUpperCase() + r.slice(1);
763
- };
764
- var A = {
765
- xmlns: "http://www.w3.org/2000/svg",
766
- width: 24,
767
- height: 24,
768
- viewBox: "0 0 24 24",
769
- fill: "none",
770
- stroke: "currentColor",
771
- strokeWidth: 2,
772
- strokeLinecap: "round",
773
- strokeLinejoin: "round"
774
- };
775
- const qo = (o) => {
776
- for (const r in o)
777
- if (r.startsWith("aria-") || r === "role" || r === "title")
778
- return !0;
779
- return !1;
780
- }, Ko = Z({}), Uo = () => U(Ko), Zo = X(
781
- ({ color: o, size: r, strokeWidth: n, absoluteStrokeWidth: t, className: a = "", children: i, iconNode: e, ...c }, g) => {
782
- const {
783
- size: f = 24,
784
- strokeWidth: x = 2,
785
- absoluteStrokeWidth: k = !1,
786
- color: v = "currentColor",
787
- className: b = ""
788
- } = Uo() ?? {}, h = t ?? k ? Number(n ?? x) * 24 / Number(r ?? f) : n ?? x;
789
- return R(
790
- "svg",
791
- {
792
- ref: g,
793
- ...A,
794
- width: r ?? f ?? A.width,
795
- height: r ?? f ?? A.height,
796
- stroke: o ?? v,
797
- strokeWidth: h,
798
- className: Q("lucide", b, a),
799
- ...!i && !qo(c) && { "aria-hidden": "true" },
800
- ...c
801
- },
802
- [
803
- ...e.map(([z, w]) => R(z, w)),
804
- ...Array.isArray(i) ? i : [i]
805
- ]
806
- );
807
- }
808
- );
809
- const oo = (o, r) => {
810
- const n = X(
811
- ({ className: t, ...a }, i) => R(Zo, {
812
- ref: i,
813
- iconNode: r,
814
- className: Q(
815
- `lucide-${_o(q(o))}`,
816
- `lucide-${o}`,
817
- t
818
- ),
819
- ...a
820
- })
821
- );
822
- return n.displayName = q(o), n;
823
- };
824
- const Xo = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]], Go = oo("chevron-down", Xo);
825
- const Jo = [
826
- ["path", { d: "M18 6 6 18", key: "1bl5f8" }],
827
- ["path", { d: "m6 6 12 12", key: "d8bk6v" }]
828
- ], Qo = oo("x", Jo), or = l.div`
854
+ or.displayName = "FormField";
855
+ const rr = i.div`
829
856
  display: inline-flex;
830
857
  flex-direction: column;
831
858
  gap: ${({ theme: o }) => o.spacing[1]};
832
859
  width: ${({ $fullWidth: o }) => o ? "100%" : "auto"};
833
- `, rr = l.div`
860
+ `, nr = i.div`
834
861
  position: relative;
835
862
  display: flex;
836
863
  width: 100%;
837
- `, nr = l.span`
864
+ `, sr = i.span`
838
865
  font-size: ${({ theme: o }) => o.fontSizes.xs};
839
866
  color: ${({ $error: o, theme: r }) => o ? r.colors.error[500] : r.colors.neutral[500]};
840
- `, sr = l.select`
867
+ `, tr = i.select`
841
868
  appearance: none;
842
869
  width: 100%;
843
870
  border-radius: ${({ theme: o }) => o.radius.md};
@@ -898,7 +925,7 @@ const Jo = [
898
925
  cursor: not-allowed;
899
926
  opacity: 0.6;
900
927
  }
901
- `, tr = l.button`
928
+ `, ir = i.button`
902
929
  position: absolute;
903
930
  right: ${({ theme: o }) => o.spacing[3]};
904
931
  top: 50%;
@@ -920,7 +947,7 @@ const Jo = [
920
947
  outline-offset: 2px;
921
948
  border-radius: 2px;
922
949
  }
923
- `, er = l.span`
950
+ `, er = i.span`
924
951
  position: absolute;
925
952
  right: ${({ theme: o }) => o.spacing[3]};
926
953
  top: 50%;
@@ -930,63 +957,63 @@ const Jo = [
930
957
  align-items: center;
931
958
  color: ${({ theme: o }) => o.colors.neutral[500]};
932
959
  `;
933
- function ir({
960
+ function ar({
934
961
  options: o,
935
962
  placeholder: r,
936
963
  size: n = "md",
937
964
  variant: t = "default",
938
- error: a,
939
- fullWidth: i,
965
+ error: c,
966
+ fullWidth: a,
940
967
  clearable: e,
941
- onClear: c,
942
- id: g,
943
- value: f,
944
- defaultValue: x,
945
- onChange: k,
946
- ...v
968
+ onClear: d,
969
+ id: p,
970
+ value: u,
971
+ defaultValue: b,
972
+ onChange: m,
973
+ ...$
947
974
  }) {
948
- const b = E(), h = g ?? b, z = `${h}-hint`, w = typeof a == "string" ? a : void 0, [m, I] = C(
949
- x ?? ""
950
- ), T = f !== void 0, B = T ? f : m, u = (y) => {
951
- T || I(y.target.value), k?.(y);
952
- }, p = () => {
953
- T || I(""), c?.();
954
- }, $ = e && !!B;
955
- return /* @__PURE__ */ S(or, { $fullWidth: i, children: [
956
- /* @__PURE__ */ S(rr, { children: [
957
- /* @__PURE__ */ S(
958
- sr,
975
+ const x = F(), w = p ?? x, S = `${w}-hint`, C = typeof c == "string" ? c : void 0, [k, I] = z(
976
+ b ?? ""
977
+ ), T = u !== void 0, W = T ? u : k, f = (v) => {
978
+ T || I(v.target.value), m?.(v);
979
+ }, g = () => {
980
+ T || I(""), d?.();
981
+ }, y = e && !!W;
982
+ return /* @__PURE__ */ h(rr, { $fullWidth: a, children: [
983
+ /* @__PURE__ */ h(nr, { children: [
984
+ /* @__PURE__ */ h(
985
+ tr,
959
986
  {
960
- id: h,
987
+ id: w,
961
988
  $size: n,
962
989
  $variant: t,
963
- $error: !!a,
964
- "aria-invalid": !!a,
965
- "aria-describedby": w ? z : void 0,
966
- value: B,
967
- onChange: u,
968
- ...v,
990
+ $error: !!c,
991
+ "aria-invalid": !!c,
992
+ "aria-describedby": C ? S : void 0,
993
+ value: W,
994
+ onChange: f,
995
+ ...$,
969
996
  children: [
970
- r && /* @__PURE__ */ d("option", { value: "", disabled: !0, children: r }),
971
- o.map((y) => /* @__PURE__ */ d("option", { value: y.value, disabled: y.disabled, children: y.label }, y.value))
997
+ r && /* @__PURE__ */ l("option", { value: "", disabled: !0, children: r }),
998
+ o.map((v) => /* @__PURE__ */ l("option", { value: v.value, disabled: v.disabled, children: v.label }, v.value))
972
999
  ]
973
1000
  }
974
1001
  ),
975
- $ ? /* @__PURE__ */ d(
976
- tr,
1002
+ y ? /* @__PURE__ */ l(
1003
+ ir,
977
1004
  {
978
1005
  type: "button",
979
- onClick: p,
1006
+ onClick: g,
980
1007
  "aria-label": "Clear selection",
981
- children: /* @__PURE__ */ d(Qo, { size: 14 })
1008
+ children: /* @__PURE__ */ l(no, { size: 14 })
982
1009
  }
983
- ) : /* @__PURE__ */ d(er, { "aria-hidden": "true", children: /* @__PURE__ */ d(Go, { size: 14 }) })
1010
+ ) : /* @__PURE__ */ l(er, { "aria-hidden": "true", children: /* @__PURE__ */ l(ro, { size: 14 }) })
984
1011
  ] }),
985
- w && /* @__PURE__ */ d(nr, { id: z, $error: !0, children: w })
1012
+ C && /* @__PURE__ */ l(sr, { id: S, $error: !0, children: C })
986
1013
  ] });
987
1014
  }
988
- ir.displayName = "Select";
989
- const ar = l.a`
1015
+ ar.displayName = "Select";
1016
+ const lr = i.a`
990
1017
  text-decoration: underline;
991
1018
  text-underline-offset: 2px;
992
1019
  transition: color 0.15s;
@@ -1012,14 +1039,14 @@ const ar = l.a`
1012
1039
  `
1013
1040
  })[o]}
1014
1041
  `;
1015
- function lr({
1042
+ function cr({
1016
1043
  variant: o = "default",
1017
1044
  external: r,
1018
1045
  children: n,
1019
1046
  ...t
1020
1047
  }) {
1021
- return /* @__PURE__ */ d(
1022
- ar,
1048
+ return /* @__PURE__ */ l(
1049
+ lr,
1023
1050
  {
1024
1051
  $variant: o,
1025
1052
  ...r && { target: "_blank", rel: "noreferrer" },
@@ -1028,19 +1055,148 @@ function lr({
1028
1055
  }
1029
1056
  );
1030
1057
  }
1031
- lr.displayName = "Link";
1032
- const ro = Z(null);
1033
- function yr({ children: o }) {
1034
- const [r, n] = C(null), t = W((i) => {
1035
- n({ ...i, id: Date.now() });
1036
- }, []), a = to(() => {
1037
- const i = (e) => t(e);
1038
- return i.success = (e, c) => t({ ...c, message: e, variant: "success" }), i.error = (e, c) => t({ ...c, message: e, variant: "error" }), i.warning = (e, c) => t({ ...c, message: e, variant: "warning" }), i.info = (e, c) => t({ ...c, message: e, variant: "info" }), i;
1058
+ cr.displayName = "Link";
1059
+ const dr = i.div`
1060
+ border-radius: ${({ theme: o }) => o.radius.md};
1061
+ background: ${({ theme: o }) => o.colors.neutral[0]};
1062
+ overflow: hidden;
1063
+
1064
+ ${({ theme: o, $accentColor: r }) => o.brutalism ? s`
1065
+ border: ${o.brutalism.borderWidth} solid
1066
+ ${r ?? o.colors.neutral[900]};
1067
+ box-shadow: ${o.brutalism.shadowOffset}
1068
+ ${o.brutalism.shadowOffset} 0
1069
+ ${r ?? o.colors.neutral[900]};
1070
+ ` : s`
1071
+ border: 1px solid ${r ?? o.colors.neutral[200]};
1072
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
1073
+ `}
1074
+ `, ur = i.button`
1075
+ width: 100%;
1076
+ display: flex;
1077
+ align-items: flex-start;
1078
+ gap: ${({ theme: o }) => o.spacing[3]};
1079
+ padding: ${({ theme: o }) => o.spacing[4]};
1080
+ background: ${({ theme: o }) => o.brutalism ? o.colors.neutral[100] : o.colors.neutral[0]};
1081
+ border: none;
1082
+ cursor: pointer;
1083
+ text-align: left;
1084
+
1085
+ &:hover {
1086
+ background: ${({ theme: o }) => o.colors.neutral[100]};
1087
+ }
1088
+
1089
+ &:focus-visible {
1090
+ outline: 2px solid
1091
+ ${({ theme: o, $accentColor: r }) => r ?? o.colors.primary[500]};
1092
+ outline-offset: -2px;
1093
+ }
1094
+ `, fr = i.div`
1095
+ flex: 1;
1096
+ min-width: 0;
1097
+ `, pr = i.span`
1098
+ display: block;
1099
+ font-size: ${({ theme: o }) => o.fontSizes.md};
1100
+ font-weight: 600;
1101
+ color: ${({ theme: o }) => o.colors.neutral[900]};
1102
+ `, gr = i.span`
1103
+ display: block;
1104
+ font-size: ${({ theme: o }) => o.fontSizes.sm};
1105
+ color: ${({ theme: o }) => o.colors.neutral[500]};
1106
+ `, $r = i.div`
1107
+ display: flex;
1108
+ flex-direction: row;
1109
+ align-items: center;
1110
+ justify-content: space-between;
1111
+ margin-top: ${({ theme: o }) => o.spacing[1]};
1112
+
1113
+ @media (max-width: 640px) {
1114
+ flex-direction: column;
1115
+ align-items: flex-start;
1116
+ gap: ${({ theme: o }) => o.spacing[2]};
1117
+ }
1118
+ `, br = i.div`
1119
+ display: flex;
1120
+ align-items: center;
1121
+ gap: ${({ theme: o }) => o.spacing[2]};
1122
+ `, xr = i.span`
1123
+ display: inline-flex;
1124
+ align-items: center;
1125
+ justify-content: center;
1126
+ flex-shrink: 0;
1127
+ transition: transform 0.2s ease;
1128
+ transform: ${({ $open: o }) => o ? "rotate(180deg)" : "rotate(0deg)"};
1129
+ color: ${({ theme: o, $accentColor: r }) => r ?? o.colors.neutral[500]};
1130
+ `, yr = i.div`
1131
+ display: grid;
1132
+ grid-template-rows: ${({ $open: o }) => o ? "1fr" : "0fr"};
1133
+ transition: grid-template-rows 0.2s ease;
1134
+ `, wr = i.div`
1135
+ overflow: hidden;
1136
+ `, vr = i.div`
1137
+ padding: ${({ theme: o }) => o.spacing[4]};
1138
+ border-top: 1px solid ${({ theme: o }) => o.colors.neutral[200]};
1139
+ `;
1140
+ function mr({
1141
+ title: o,
1142
+ children: r,
1143
+ defaultOpen: n = !1,
1144
+ open: t,
1145
+ onToggle: c,
1146
+ subtitle: a,
1147
+ headerActions: e,
1148
+ accentColor: d
1149
+ }) {
1150
+ const [p, u] = z(n), b = F(), m = t !== void 0, $ = m ? t : p;
1151
+ return /* @__PURE__ */ h(dr, { $accentColor: d, children: [
1152
+ /* @__PURE__ */ h(
1153
+ ur,
1154
+ {
1155
+ type: "button",
1156
+ $open: $,
1157
+ $accentColor: d,
1158
+ "aria-expanded": $,
1159
+ "aria-controls": b,
1160
+ onClick: () => {
1161
+ const w = !$;
1162
+ m || u(w), c?.(w);
1163
+ },
1164
+ children: [
1165
+ /* @__PURE__ */ h(fr, { children: [
1166
+ /* @__PURE__ */ l(pr, { children: o }),
1167
+ (a || e) && /* @__PURE__ */ h($r, { children: [
1168
+ a && /* @__PURE__ */ l(gr, { children: a }),
1169
+ e && /* @__PURE__ */ l(br, { onClick: (w) => w.stopPropagation(), children: e })
1170
+ ] })
1171
+ ] }),
1172
+ /* @__PURE__ */ l(
1173
+ xr,
1174
+ {
1175
+ $open: $,
1176
+ $accentColor: d,
1177
+ "aria-hidden": "true",
1178
+ children: /* @__PURE__ */ l(ro, { size: 18, strokeWidth: 2.5 })
1179
+ }
1180
+ )
1181
+ ]
1182
+ }
1183
+ ),
1184
+ /* @__PURE__ */ l(yr, { $open: $, children: /* @__PURE__ */ l(wr, { id: b, role: "region", "aria-label": o, children: /* @__PURE__ */ l(vr, { children: r }) }) })
1185
+ ] });
1186
+ }
1187
+ mr.displayName = "CollapsibleCard";
1188
+ const to = X(null);
1189
+ function Or({ children: o }) {
1190
+ const [r, n] = z(null), t = B((a) => {
1191
+ n({ ...a, id: Date.now() });
1192
+ }, []), c = ao(() => {
1193
+ const a = (e) => t(e);
1194
+ return a.success = (e, d) => t({ ...d, message: e, variant: "success" }), a.error = (e, d) => t({ ...d, message: e, variant: "error" }), a.warning = (e, d) => t({ ...d, message: e, variant: "warning" }), a.info = (e, d) => t({ ...d, message: e, variant: "info" }), a;
1039
1195
  }, [t]);
1040
- return /* @__PURE__ */ S(ro.Provider, { value: { toast: a }, children: [
1196
+ return /* @__PURE__ */ h(to.Provider, { value: { toast: c }, children: [
1041
1197
  o,
1042
- r && /* @__PURE__ */ d(
1043
- J,
1198
+ r && /* @__PURE__ */ l(
1199
+ so,
1044
1200
  {
1045
1201
  open: !0,
1046
1202
  onClose: () => n(null),
@@ -1053,89 +1209,89 @@ function yr({ children: o }) {
1053
1209
  )
1054
1210
  ] });
1055
1211
  }
1056
- function mr() {
1057
- const o = U(ro);
1212
+ function Lr() {
1213
+ const o = Z(to);
1058
1214
  if (!o)
1059
1215
  throw new Error("useToast must be used within a ToastProvider");
1060
1216
  return o;
1061
1217
  }
1062
- function vr({
1218
+ function jr({
1063
1219
  initialValues: o,
1064
1220
  validate: r,
1065
1221
  onSubmit: n,
1066
1222
  onError: t
1067
1223
  }) {
1068
- const [a, i] = C(o), [e, c] = C(
1224
+ const [c, a] = z(o), [e, d] = z(
1069
1225
  {}
1070
- ), [g, f] = C({}), [x, k] = C(!1), v = M(a);
1071
- v.current = a;
1072
- const b = W(
1073
- (u) => {
1226
+ ), [p, u] = z({}), [b, m] = z(!1), $ = M(c);
1227
+ $.current = c;
1228
+ const x = B(
1229
+ (f) => {
1074
1230
  if (!r)
1075
1231
  return {};
1076
- const p = r(u);
1232
+ const g = r(f);
1077
1233
  return Object.fromEntries(
1078
- Object.entries(p).filter(([, $]) => $ !== void 0)
1234
+ Object.entries(g).filter(([, y]) => y !== void 0)
1079
1235
  );
1080
1236
  },
1081
1237
  [r]
1082
- ), h = M(g);
1083
- h.current = g;
1084
- const z = W(
1085
- (u) => {
1086
- const { name: p, value: $ } = u.target, y = { ...v.current, [p]: $ };
1087
- i(y), h.current[p] && c(b(y));
1238
+ ), w = M(p);
1239
+ w.current = p;
1240
+ const S = B(
1241
+ (f) => {
1242
+ const { name: g, value: y } = f.target, v = { ...$.current, [g]: y };
1243
+ a(v), w.current[g] && d(x(v));
1088
1244
  },
1089
- [b]
1090
- ), w = W(
1091
- (u) => {
1092
- const { name: p } = u.target;
1093
- f(($) => ({ ...$, [p]: !0 })), c(b(v.current));
1245
+ [x]
1246
+ ), C = B(
1247
+ (f) => {
1248
+ const { name: g } = f.target;
1249
+ u((y) => ({ ...y, [g]: !0 })), d(x($.current));
1094
1250
  },
1095
- [b]
1096
- ), m = W(
1097
- (u) => {
1098
- u?.preventDefault();
1099
- const p = Object.keys(v.current).reduce(
1100
- (O, V) => ({ ...O, [V]: !0 }),
1251
+ [x]
1252
+ ), k = B(
1253
+ (f) => {
1254
+ f?.preventDefault();
1255
+ const g = Object.keys($.current).reduce(
1256
+ (E, V) => ({ ...E, [V]: !0 }),
1101
1257
  {}
1102
1258
  );
1103
- f(p);
1104
- const $ = b(v.current);
1105
- if (c($), Object.keys($).length > 0) {
1106
- t?.($);
1259
+ u(g);
1260
+ const y = x($.current);
1261
+ if (d(y), Object.keys(y).length > 0) {
1262
+ t?.(y);
1107
1263
  return;
1108
1264
  }
1109
1265
  (async () => {
1110
- k(!0);
1266
+ m(!0);
1111
1267
  try {
1112
- await n?.(v.current);
1268
+ await n?.($.current);
1113
1269
  } finally {
1114
- k(!1);
1270
+ m(!1);
1115
1271
  }
1116
1272
  })();
1117
1273
  },
1118
- [b, n, t]
1119
- ), I = W((u, p) => {
1120
- i(($) => ({ ...$, [u]: p }));
1121
- }, []), T = W(() => {
1122
- i(o), c({}), f({}), k(!1);
1123
- }, [o]), B = Object.fromEntries(
1124
- Object.entries(e).filter(([u]) => g[u])
1274
+ [x, n, t]
1275
+ ), I = B((f, g) => {
1276
+ a((y) => ({ ...y, [f]: g }));
1277
+ }, []), T = B(() => {
1278
+ a(o), d({}), u({}), m(!1);
1279
+ }, [o]), W = Object.fromEntries(
1280
+ Object.entries(e).filter(([f]) => p[f])
1125
1281
  );
1126
1282
  return {
1127
- values: a,
1128
- errors: B,
1129
- touched: g,
1130
- handleChange: z,
1131
- handleBlur: w,
1132
- handleSubmit: m,
1283
+ values: c,
1284
+ errors: W,
1285
+ touched: p,
1286
+ handleChange: S,
1287
+ handleBlur: C,
1288
+ handleSubmit: k,
1133
1289
  setFieldValue: I,
1134
1290
  reset: T,
1135
- isSubmitting: x
1291
+ isSubmitting: b
1136
1292
  };
1137
1293
  }
1138
- const K = {
1294
+ const U = {
1139
1295
  primary: {
1140
1296
  50: "#f0f8ff",
1141
1297
  500: "#0070f3",
@@ -1167,38 +1323,38 @@ const K = {
1167
1323
  50: "#eff6ff",
1168
1324
  500: "#2563eb"
1169
1325
  }
1170
- }, cr = {
1326
+ }, kr = {
1171
1327
  1: "4px",
1172
1328
  2: "8px",
1173
1329
  3: "12px",
1174
1330
  4: "16px",
1175
1331
  5: "20px",
1176
1332
  6: "24px"
1177
- }, dr = {
1333
+ }, hr = {
1178
1334
  md: "6px"
1179
- }, ur = {
1335
+ }, Cr = {
1180
1336
  modal: 1e3,
1181
1337
  toast: 1100
1182
- }, fr = {
1338
+ }, zr = {
1183
1339
  xs: "12px",
1184
1340
  sm: "14px",
1185
1341
  md: "16px",
1186
1342
  lg: "18px"
1187
- }, wr = {
1188
- colors: { ...K, primary: { ...K.primary, contrast: "#ffffff" } },
1189
- spacing: cr,
1190
- fontSizes: fr,
1191
- radius: dr,
1192
- zIndex: ur,
1343
+ }, Fr = {
1344
+ colors: { ...U, primary: { ...U.primary, contrast: "#ffffff" } },
1345
+ spacing: kr,
1346
+ fontSizes: zr,
1347
+ radius: hr,
1348
+ zIndex: Cr,
1193
1349
  shadows: {
1194
1350
  focusRing: "0 0 0 2px rgba(0, 112, 243, 0.25)"
1195
1351
  }
1196
1352
  };
1197
- function pr(o) {
1198
- const r = parseInt(o.slice(1, 3), 16) / 255, n = parseInt(o.slice(3, 5), 16) / 255, t = parseInt(o.slice(5, 7), 16) / 255, a = (e) => e <= 0.03928 ? e / 12.92 : ((e + 0.055) / 1.055) ** 2.4;
1199
- return 0.2126 * a(r) + 0.7152 * a(n) + 0.0722 * a(t) > 0.179 ? "#111111" : "#ffffff";
1353
+ function Sr(o) {
1354
+ const r = parseInt(o.slice(1, 3), 16) / 255, n = parseInt(o.slice(3, 5), 16) / 255, t = parseInt(o.slice(5, 7), 16) / 255, c = (e) => e <= 0.03928 ? e / 12.92 : ((e + 0.055) / 1.055) ** 2.4;
1355
+ return 0.2126 * c(r) + 0.7152 * c(n) + 0.0722 * c(t) > 0.179 ? "#111111" : "#ffffff";
1200
1356
  }
1201
- const P = {
1357
+ const Y = {
1202
1358
  colors: {
1203
1359
  primary: {
1204
1360
  50: "#fffde6",
@@ -1228,41 +1384,42 @@ const P = {
1228
1384
  shadows: { focusRing: "3px 3px 0 #111111" },
1229
1385
  brutalism: { borderWidth: "2px", shadowOffset: "4px" }
1230
1386
  };
1231
- function kr(o) {
1387
+ function Er(o) {
1232
1388
  return {
1233
- ...P,
1389
+ ...Y,
1234
1390
  colors: {
1235
- ...P.colors,
1391
+ ...Y.colors,
1236
1392
  primary: {
1237
1393
  50: "#fffff0",
1238
1394
  500: o,
1239
1395
  700: o,
1240
- contrast: pr(o)
1396
+ contrast: Sr(o)
1241
1397
  }
1242
1398
  }
1243
1399
  };
1244
1400
  }
1245
- function hr({
1246
- theme: o = P,
1401
+ function Nr({
1402
+ theme: o = Y,
1247
1403
  children: r
1248
1404
  }) {
1249
- return /* @__PURE__ */ d(so, { theme: o, children: r });
1405
+ return /* @__PURE__ */ l(eo, { theme: o, children: r });
1250
1406
  }
1251
1407
  export {
1252
- io as Badge,
1253
- lo as Button,
1254
- Yo as Form,
1255
- Do as FormField,
1256
- bo as Input,
1257
- lr as Link,
1258
- Bo as Modal,
1259
- ir as Select,
1260
- hr as ThemeProvider,
1261
- J as Toast,
1262
- yr as ToastProvider,
1263
- kr as createNeoBrutalTheme,
1264
- wr as defaultTheme,
1265
- P as neoBrutalTheme,
1266
- vr as useForm,
1267
- mr as useToast
1408
+ co as Badge,
1409
+ fo as Button,
1410
+ mr as CollapsibleCard,
1411
+ Qo as Form,
1412
+ or as FormField,
1413
+ wo as Input,
1414
+ cr as Link,
1415
+ Lo as Modal,
1416
+ ar as Select,
1417
+ Nr as ThemeProvider,
1418
+ so as Toast,
1419
+ Or as ToastProvider,
1420
+ Er as createNeoBrutalTheme,
1421
+ Fr as defaultTheme,
1422
+ Y as neoBrutalTheme,
1423
+ jr as useForm,
1424
+ Lr as useToast
1268
1425
  };