@lindle/linoardo 1.0.9 → 1.0.10

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.cjs CHANGED
@@ -3,6 +3,7 @@
3
3
  var React5 = require('react');
4
4
  var tailwindMerge = require('tailwind-merge');
5
5
  var jsxRuntime = require('react/jsx-runtime');
6
+ var reactDom = require('react-dom');
6
7
 
7
8
  function _interopNamespace(e) {
8
9
  if (e && e.__esModule) return e;
@@ -30,60 +31,90 @@ var React5__namespace = /*#__PURE__*/_interopNamespace(React5);
30
31
  var iconBaseClasses = {
31
32
  mdi: ["mdi"]
32
33
  };
33
-
34
- // src/Containment/Button/states.button.ts
35
- var base = "btn-base focus-visible:outline-none focus-visible:ring-2 rounded-md transition-colors duration-200 font-medium disabled:opacity-50 disabled:cursor-not-allowed";
36
- var blackAndWhiteVariantClass = "bg-white text-black border border-black focus-visible:ring-black/40 focus-visible:ring-offset-white";
34
+ var base = "btn-base focus-visible:outline-none focus-visible:ring-2 rounded-lg transition-colors duration-200 font-medium disabled:opacity-50 disabled:cursor-not-allowed";
35
+ var blackAndWhiteVariantClass = "bg-white text-black border border-black focus-visible:ring-black/40 focus-visible:ring-offset-white";
36
+ var blackAndWhitePaletteClasses = {
37
+ solid: tailwindMerge.twMerge(blackAndWhiteVariantClass, "bg-black text-white"),
38
+ outline: blackAndWhiteVariantClass,
39
+ ghost: "bg-neutral-300 text-white",
40
+ text: blackAndWhiteVariantClass,
41
+ filled: "bg-black text-white",
42
+ underlined: tailwindMerge.twMerge(blackAndWhiteVariantClass, "b"),
43
+ rounded: blackAndWhiteVariantClass,
44
+ sharp: "bg-black text-white rounded-none"
45
+ };
37
46
  var paletteVariantClasses = {
38
47
  primary: {
39
48
  solid: "bg-primary text-white hover:bg-primary/90 focus-visible:ring-primary",
49
+ sharp: "rounded-none bg-primary text-white hover:bg-primary/90 focus-visible:ring-primary",
40
50
  outline: "border border-primary text-primary bg-white hover:bg-primary hover:text-white focus-visible:ring-primary",
41
- ghost: "text-primary bg-primary/10 hover:bg-primary/20 focus-visible:ring-primary/40",
42
- text: "bg-transparent text-primary hover:bg-primary/10 focus-visible:ring-primary/30 underline-offset-2",
43
- bw: blackAndWhiteVariantClass
51
+ ghost: "text-primary bg-primary/10 hover:bg-primary/20 focus-visible:ring-primary/40 border border-transparent",
52
+ text: "bg-transparent text-primary hover:bg-primary/10 focus-visible:ring-primary/30 underline-offset-2 border border-transparent",
53
+ filled: "bg-primary/15 text-primary border border-primary/30 hover:bg-primary/25 focus-visible:ring-primary/25",
54
+ underlined: "bg-transparent text-primary border border-transparent underline decoration-2 underline-offset-4 hover:bg-primary/5 focus-visible:ring-primary/25",
55
+ rounded: "rounded-full border border-primary/60 bg-primary/10 text-primary hover:bg-primary/20 focus-visible:ring-primary/25"
44
56
  },
45
57
  neutral: {
46
58
  solid: "bg-gray-600 text-white hover:bg-gray-700 focus-visible:ring-gray-500",
59
+ sharp: "rounded-none bg-gray-600 text-white hover:bg-gray-700 focus-visible:ring-gray-500",
47
60
  outline: "border border-gray-400 text-gray-700 bg-white hover:bg-gray-700 hover:text-white focus-visible:ring-gray-400",
48
- ghost: "text-gray-700 bg-gray-100 hover:bg-gray-200 focus-visible:ring-gray-300",
49
- text: "bg-transparent text-gray-700 hover:bg-gray-100 focus-visible:ring-gray-200 underline-offset-2",
50
- bw: blackAndWhiteVariantClass
61
+ ghost: "text-gray-700 bg-gray-100 hover:bg-gray-200 focus-visible:ring-gray-300 border border-transparent",
62
+ text: "bg-transparent text-gray-700 hover:bg-gray-100 focus-visible:ring-gray-200 underline-offset-2 border border-transparent",
63
+ filled: "bg-gray-200 text-gray-900 border border-gray-300 hover:bg-gray-300 focus-visible:ring-gray-300",
64
+ underlined: "bg-transparent text-gray-900 border border-transparent underline decoration-2 underline-offset-4 hover:bg-gray-100 focus-visible:ring-gray-300",
65
+ rounded: "rounded-full border border-gray-400 bg-white text-gray-800 hover:bg-gray-100 focus-visible:ring-gray-300"
51
66
  },
52
67
  info: {
53
68
  solid: "bg-sky-500 text-white hover:bg-sky-600 focus-visible:ring-sky-400",
69
+ sharp: "rounded-none bg-sky-500 text-white hover:bg-sky-600 focus-visible:ring-sky-400",
54
70
  outline: "border border-sky-500 text-sky-600 bg-white hover:bg-sky-500 hover:text-white focus-visible:ring-sky-400",
55
- ghost: "text-sky-600 bg-sky-100 hover:bg-sky-200 focus-visible:ring-sky-300",
56
- text: "bg-transparent text-sky-600 hover:bg-sky-100 focus-visible:ring-sky-200 underline-offset-2",
57
- bw: blackAndWhiteVariantClass
71
+ ghost: "text-sky-600 bg-sky-100 hover:bg-sky-200 focus-visible:ring-sky-300 border border-transparent",
72
+ text: "bg-transparent text-sky-600 hover:bg-sky-100 focus-visible:ring-sky-200 underline-offset-2 border border-transparent",
73
+ filled: "bg-sky-100 text-sky-700 border border-sky-200 hover:bg-sky-200 focus-visible:ring-sky-200",
74
+ underlined: "bg-transparent text-sky-600 border border-transparent underline decoration-2 underline-offset-4 hover:bg-sky-50 focus-visible:ring-sky-200",
75
+ rounded: "rounded-full border border-sky-500/70 bg-sky-50 text-sky-700 hover:bg-sky-100 focus-visible:ring-sky-200"
58
76
  },
59
77
  success: {
60
78
  solid: "bg-emerald-500 text-white hover:bg-emerald-600 focus-visible:ring-emerald-400",
79
+ sharp: "rounded-none bg-emerald-500 text-white hover:bg-emerald-600 focus-visible:ring-emerald-400",
61
80
  outline: "border border-emerald-500 text-emerald-600 bg-white hover:bg-emerald-500 hover:text-white focus-visible:ring-emerald-400",
62
- ghost: "text-emerald-600 bg-emerald-100 hover:bg-emerald-200 focus-visible:ring-emerald-300",
63
- text: "bg-transparent text-emerald-600 hover:bg-emerald-100 focus-visible:ring-emerald-200 underline-offset-2",
64
- bw: blackAndWhiteVariantClass
81
+ ghost: "text-emerald-600 bg-emerald-100 hover:bg-emerald-200 focus-visible:ring-emerald-300 border border-transparent",
82
+ text: "bg-transparent text-emerald-600 hover:bg-emerald-100 focus-visible:ring-emerald-200 underline-offset-2 border border-transparent",
83
+ filled: "bg-emerald-100 text-emerald-700 border border-emerald-200 hover:bg-emerald-200 focus-visible:ring-emerald-200",
84
+ underlined: "bg-transparent text-emerald-600 border border-transparent underline decoration-2 underline-offset-4 hover:bg-emerald-50 focus-visible:ring-emerald-200",
85
+ rounded: "rounded-full border border-emerald-500/70 bg-emerald-50 text-emerald-700 hover:bg-emerald-100 focus-visible:ring-emerald-200"
65
86
  },
66
87
  warning: {
67
88
  solid: "bg-amber-500 text-white hover:bg-amber-600 focus-visible:ring-amber-400",
89
+ sharp: "rounded-none bg-amber-500 text-white hover:bg-amber-600 focus-visible:ring-amber-400",
68
90
  outline: "border border-amber-500 text-amber-600 bg-white hover:bg-amber-500 hover:text-white focus-visible:ring-amber-400",
69
- ghost: "text-amber-600 bg-amber-100 hover:bg-amber-200 focus-visible:ring-amber-300",
70
- text: "bg-transparent text-amber-600 hover:bg-amber-100 focus-visible:ring-amber-200 underline-offset-2",
71
- bw: blackAndWhiteVariantClass
91
+ ghost: "text-amber-600 bg-amber-100 hover:bg-amber-200 focus-visible:ring-amber-300 border border-transparent",
92
+ text: "bg-transparent text-amber-600 hover:bg-amber-100 focus-visible:ring-amber-200 underline-offset-2 border border-transparent",
93
+ filled: "bg-amber-100 text-amber-800 border border-amber-200 hover:bg-amber-200 focus-visible:ring-amber-200",
94
+ underlined: "bg-transparent text-amber-600 border border-transparent underline decoration-2 underline-offset-4 hover:bg-amber-50 focus-visible:ring-amber-200",
95
+ rounded: "rounded-full border border-amber-500/70 bg-amber-50 text-amber-700 hover:bg-amber-100 focus-visible:ring-amber-200"
72
96
  },
73
97
  danger: {
74
98
  solid: "bg-red-500 text-white hover:bg-red-600 focus-visible:ring-red-400",
99
+ sharp: "rounded-none bg-red-500 text-white hover:bg-red-600 focus-visible:ring-red-400",
75
100
  outline: "border border-red-500 text-red-600 bg-white hover:bg-red-500 hover:text-white focus-visible:ring-red-400",
76
- ghost: "text-red-600 bg-red-100 hover:bg-red-200 focus-visible:ring-red-300",
77
- text: "bg-transparent text-red-600 hover:bg-red-100 focus-visible:ring-red-200 underline-offset-2",
78
- bw: blackAndWhiteVariantClass
101
+ ghost: "text-red-600 bg-red-100 hover:bg-red-200 focus-visible:ring-red-300 border border-transparent",
102
+ text: "bg-transparent text-red-600 hover:bg-red-100 focus-visible:ring-red-200 underline-offset-2 border border-transparent",
103
+ filled: "bg-red-100 text-red-700 border border-red-200 hover:bg-red-200 focus-visible:ring-red-200",
104
+ underlined: "bg-transparent text-red-600 border border-transparent underline decoration-2 underline-offset-4 hover:bg-red-50 focus-visible:ring-red-200",
105
+ rounded: "rounded-full border border-red-500/70 bg-red-50 text-red-700 hover:bg-red-100 focus-visible:ring-red-200"
79
106
  },
80
107
  surface: {
81
108
  solid: "bg-white text-gray-900 border border-gray-200 hover:bg-gray-50 focus-visible:ring-gray-200",
109
+ sharp: "rounded-none bg-white text-gray-900 border border-gray-200 hover:bg-gray-50 focus-visible:ring-gray-200",
82
110
  outline: "border border-gray-300 text-gray-900 bg-white hover:bg-gray-100 focus-visible:ring-gray-200",
83
- ghost: "text-gray-900 bg-gray-100 hover:bg-gray-200 focus-visible:ring-gray-200",
84
- text: "bg-transparent text-gray-900 hover:bg-gray-100 focus-visible:ring-gray-200 underline-offset-2",
85
- bw: blackAndWhiteVariantClass
86
- }
111
+ ghost: "text-gray-900 bg-gray-100 hover:bg-gray-200 focus-visible:ring-gray-200 border border-transparent",
112
+ text: "bg-transparent text-gray-900 hover:bg-gray-100 focus-visible:ring-gray-200 underline-offset-2 border border-transparent",
113
+ filled: "bg-gray-50 text-gray-900 border border-gray-200 hover:bg-white focus-visible:ring-gray-200",
114
+ underlined: "bg-transparent text-gray-900 border border-transparent underline decoration-2 underline-offset-4 hover:bg-gray-100 focus-visible:ring-gray-200",
115
+ rounded: "rounded-full border border-gray-300 bg-white text-gray-900 hover:bg-gray-50 focus-visible:ring-gray-200"
116
+ },
117
+ bw: blackAndWhitePaletteClasses
87
118
  };
88
119
  var resolveVariantClass = (variant, palette) => {
89
120
  const paletteVariants = paletteVariantClasses[palette] ?? paletteVariantClasses.primary;
@@ -156,7 +187,7 @@ var Button = React5__namespace.forwardRef(
156
187
  ref,
157
188
  onClick,
158
189
  disabled: isDisabled,
159
- className: tailwindMerge.twMerge(base, cursor, variantClass, sizeClass, blockClass, gapClass, className, "border-2 border-l"),
190
+ className: tailwindMerge.twMerge(base, cursor, variantClass, sizeClass, blockClass, gapClass, className),
160
191
  "data-loading": loading || void 0,
161
192
  "aria-busy": loading || void 0,
162
193
  children: [
@@ -180,56 +211,88 @@ var chipSizeClasses = {
180
211
  };
181
212
  var closeButtonClasses = "ml-1 flex h-5 w-5 shrink-0 items-center justify-center rounded-full border border-transparent text-current/70 transition-colors duration-200 hover:bg-current/10 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-current/30 focus-visible:ring-offset-2";
182
213
  var blackAndWhiteChipVariantClass = "bg-white text-black border border-black hover:bg-white focus-visible:ring-black/40 focus-visible:ring-offset-white";
214
+ var blackAndWhitePaletteClasses2 = {
215
+ solid: blackAndWhiteChipVariantClass,
216
+ outline: blackAndWhiteChipVariantClass,
217
+ ghost: blackAndWhiteChipVariantClass,
218
+ text: blackAndWhiteChipVariantClass,
219
+ filled: blackAndWhiteChipVariantClass,
220
+ underlined: blackAndWhiteChipVariantClass,
221
+ rounded: blackAndWhiteChipVariantClass,
222
+ sharp: `${blackAndWhiteChipVariantClass} rounded-none`
223
+ };
183
224
  var paletteVariantClasses2 = {
184
225
  primary: {
185
226
  solid: "bg-primary text-white border border-primary hover:bg-primary/90",
227
+ sharp: "rounded-none bg-primary text-white border border-primary hover:bg-primary/90",
186
228
  outline: "bg-transparent text-primary border border-primary hover:bg-primary/10",
187
229
  ghost: "bg-primary/15 text-primary border border-transparent hover:bg-primary/25",
188
230
  text: "bg-transparent text-primary border border-transparent hover:text-primary/80",
189
- bw: blackAndWhiteChipVariantClass
231
+ filled: "bg-primary/10 text-primary border border-primary/30 hover:bg-primary/20",
232
+ underlined: "bg-transparent text-primary border-0 border-b-2 border-primary px-0 rounded-none hover:text-primary/80",
233
+ rounded: "bg-white text-primary border border-primary/40 shadow-sm hover:bg-primary/5"
190
234
  },
191
235
  neutral: {
192
236
  solid: "bg-gray-900 text-white border border-gray-900 hover:bg-gray-800",
237
+ sharp: "rounded-none bg-gray-900 text-white border border-gray-900 hover:bg-gray-800",
193
238
  outline: "bg-transparent text-gray-900 border border-gray-500 hover:bg-gray-100",
194
239
  ghost: "bg-gray-100 text-gray-900 border border-transparent hover:bg-gray-200",
195
240
  text: "bg-transparent text-gray-900 border border-transparent hover:text-gray-700",
196
- bw: blackAndWhiteChipVariantClass
241
+ filled: "bg-gray-200 text-gray-900 border border-gray-300 hover:bg-gray-300",
242
+ underlined: "bg-transparent text-gray-900 border-0 border-b-2 border-gray-500 px-0 rounded-none hover:text-gray-700",
243
+ rounded: "bg-white text-gray-900 border border-gray-300 shadow-sm hover:bg-gray-100"
197
244
  },
198
245
  info: {
199
246
  solid: "bg-sky-500 text-white border border-sky-500 hover:bg-sky-600",
247
+ sharp: "rounded-none bg-sky-500 text-white border border-sky-500 hover:bg-sky-600",
200
248
  outline: "bg-transparent text-sky-600 border border-sky-500 hover:bg-sky-50",
201
249
  ghost: "bg-sky-100 text-sky-700 border border-transparent hover:bg-sky-200",
202
250
  text: "bg-transparent text-sky-600 border border-transparent hover:text-sky-700",
203
- bw: blackAndWhiteChipVariantClass
251
+ filled: "bg-sky-100 text-sky-700 border border-sky-200 hover:bg-sky-200",
252
+ underlined: "bg-transparent text-sky-600 border-0 border-b-2 border-sky-500 px-0 rounded-none hover:text-sky-700",
253
+ rounded: "bg-white text-sky-700 border border-sky-200 shadow-sm hover:bg-sky-50"
204
254
  },
205
255
  success: {
206
256
  solid: "bg-emerald-500 text-white border border-emerald-500 hover:bg-emerald-600",
257
+ sharp: "rounded-none bg-emerald-500 text-white border border-emerald-500 hover:bg-emerald-600",
207
258
  outline: "bg-transparent text-emerald-600 border border-emerald-500 hover:bg-emerald-50",
208
259
  ghost: "bg-emerald-100 text-emerald-700 border border-transparent hover:bg-emerald-200",
209
260
  text: "bg-transparent text-emerald-600 border border-transparent hover:text-emerald-700",
210
- bw: blackAndWhiteChipVariantClass
261
+ filled: "bg-emerald-100 text-emerald-700 border border-emerald-200 hover:bg-emerald-200",
262
+ underlined: "bg-transparent text-emerald-600 border-0 border-b-2 border-emerald-500 px-0 rounded-none hover:text-emerald-700",
263
+ rounded: "bg-white text-emerald-700 border border-emerald-200 shadow-sm hover:bg-emerald-50"
211
264
  },
212
265
  warning: {
213
266
  solid: "bg-amber-500 text-white border border-amber-500 hover:bg-amber-600",
267
+ sharp: "rounded-none bg-amber-500 text-white border border-amber-500 hover:bg-amber-600",
214
268
  outline: "bg-transparent text-amber-700 border border-amber-500 hover:bg-amber-50",
215
269
  ghost: "bg-amber-100 text-amber-800 border border-transparent hover:bg-amber-200",
216
270
  text: "bg-transparent text-amber-700 border border-transparent hover:text-amber-800",
217
- bw: blackAndWhiteChipVariantClass
271
+ filled: "bg-amber-100 text-amber-800 border border-amber-200 hover:bg-amber-200",
272
+ underlined: "bg-transparent text-amber-700 border-0 border-b-2 border-amber-500 px-0 rounded-none hover:text-amber-800",
273
+ rounded: "bg-white text-amber-700 border border-amber-200 shadow-sm hover:bg-amber-50"
218
274
  },
219
275
  danger: {
220
276
  solid: "bg-red-500 text-white border border-red-500 hover:bg-red-600",
277
+ sharp: "rounded-none bg-red-500 text-white border border-red-500 hover:bg-red-600",
221
278
  outline: "bg-transparent text-red-600 border border-red-500 hover:bg-red-50",
222
279
  ghost: "bg-red-100 text-red-700 border border-transparent hover:bg-red-200",
223
280
  text: "bg-transparent text-red-600 border border-transparent hover:text-red-700",
224
- bw: blackAndWhiteChipVariantClass
281
+ filled: "bg-red-100 text-red-700 border border-red-200 hover:bg-red-200",
282
+ underlined: "bg-transparent text-red-600 border-0 border-b-2 border-red-500 px-0 rounded-none hover:text-red-700",
283
+ rounded: "bg-white text-red-600 border border-red-200 shadow-sm hover:bg-red-50"
225
284
  },
226
285
  surface: {
227
286
  solid: "bg-white text-gray-900 border border-gray-200 hover:bg-gray-50",
287
+ sharp: "rounded-none bg-white text-gray-900 border border-gray-200 hover:bg-gray-50",
228
288
  outline: "bg-transparent text-gray-900 border border-gray-300 hover:bg-gray-50",
229
289
  ghost: "bg-gray-100 text-gray-900 border border-transparent hover:bg-gray-200",
230
290
  text: "bg-transparent text-gray-900 border border-transparent hover:text-gray-600",
231
- bw: blackAndWhiteChipVariantClass
232
- }
291
+ filled: "bg-gray-50 text-gray-900 border border-gray-200 hover:bg-white",
292
+ underlined: "bg-transparent text-gray-900 border-0 border-b-2 border-gray-400 px-0 rounded-none hover:text-gray-600",
293
+ rounded: "bg-white text-gray-900 border border-gray-200 shadow-sm hover:bg-gray-50"
294
+ },
295
+ bw: blackAndWhitePaletteClasses2
233
296
  };
234
297
  var resolveVariantClass2 = (variant, palette) => {
235
298
  const variants = paletteVariantClasses2[palette] ?? paletteVariantClasses2.primary;
@@ -396,7 +459,8 @@ var accentClasses = {
396
459
  success: { text: "text-emerald-600", bg: "bg-emerald-50", indicator: "bg-emerald-500" },
397
460
  warning: { text: "text-amber-700", bg: "bg-amber-50", indicator: "bg-amber-500" },
398
461
  danger: { text: "text-red-600", bg: "bg-red-50", indicator: "bg-red-500" },
399
- surface: { text: "text-gray-900", bg: "bg-gray-100", indicator: "bg-gray-900" }
462
+ surface: { text: "text-gray-900", bg: "bg-gray-100", indicator: "bg-gray-900" },
463
+ bw: { text: "text-gray-900", bg: "bg-gray-100", indicator: "bg-gray-900" }
400
464
  };
401
465
  var ListItem = React5__namespace.forwardRef((props, ref) => {
402
466
  const {
@@ -418,6 +482,7 @@ var ListItem = React5__namespace.forwardRef((props, ref) => {
418
482
  nav: navOverride,
419
483
  divided: dividedOverride,
420
484
  color: colorOverride,
485
+ sharp: sharpOverride,
421
486
  className,
422
487
  children,
423
488
  tabIndex,
@@ -429,8 +494,9 @@ var ListItem = React5__namespace.forwardRef((props, ref) => {
429
494
  const nav = navOverride ?? false;
430
495
  const divided = dividedOverride ?? false;
431
496
  const color = colorOverride ?? "primary";
497
+ const sharp = sharpOverride ?? false;
432
498
  const accent = accentClasses[color] ?? accentClasses.primary;
433
- const shapeClass = divided ? "rounded-none" : "rounded-lg";
499
+ const shapeClass = divided || sharp ? "rounded-none" : "rounded-lg";
434
500
  const Component = component ?? (href ? "a" : "div");
435
501
  const interactive = typeof rest.onClick === "function" || Component === "a" || Component === "button";
436
502
  const resolvedRole = role ?? "listitem";
@@ -496,10 +562,13 @@ var Item_default = ListItem;
496
562
  var listBaseClasses = "flex w-full min-w-0 flex-col text-gray-900 transition-colors duration-150";
497
563
  var listVariantClasses = {
498
564
  solid: "bg-white border border-gray-200 shadow-sm shadow-gray-900/5",
565
+ sharp: "bg-white border border-gray-200 shadow-sm shadow-gray-900/5 rounded-none",
499
566
  outline: "bg-transparent border border-gray-300",
500
567
  ghost: "bg-gray-50 border border-transparent",
501
568
  text: "bg-transparent border border-transparent",
502
- bw: "bg-white text-black border border-black shadow-none"
569
+ filled: "bg-gray-50 border border-gray-200 shadow-inner shadow-gray-900/5",
570
+ underlined: "bg-transparent border border-transparent border-b border-gray-200 rounded-none",
571
+ rounded: "bg-white border border-gray-200 shadow-lg shadow-gray-900/10"
503
572
  };
504
573
  var listRoundedClasses = {
505
574
  none: "rounded-none",
@@ -530,12 +599,13 @@ var List = React5__namespace.forwardRef((props, ref) => {
530
599
  children,
531
600
  ...rest
532
601
  } = props;
602
+ const isSharpVariant = variant === "sharp";
533
603
  const variantClass = listVariantClasses[variant] ?? listVariantClasses.solid;
534
- const roundedClass = listRoundedClasses[rounded] ?? listRoundedClasses.lg;
604
+ const roundedClass = isSharpVariant ? "rounded-none" : listRoundedClasses[rounded] ?? listRoundedClasses.lg;
535
605
  const dividerClass = divided ? "divide-y divide-gray-100" : void 0;
536
606
  const gapClass = divided ? "p-0" : "gap-1 p-1";
537
607
  const navClass = nav ? "py-1" : void 0;
538
- const accentColor = variant === "bw" ? "surface" : color;
608
+ const accentColor = color;
539
609
  const enhanceChild = (child) => {
540
610
  if (!React5__namespace.isValidElement(child)) {
541
611
  return child;
@@ -546,7 +616,8 @@ var List = React5__namespace.forwardRef((props, ref) => {
546
616
  lines: child.props.lines ?? lines,
547
617
  nav: child.props.nav ?? nav,
548
618
  divided: child.props.divided ?? divided,
549
- color: child.props.color ?? accentColor
619
+ color: child.props.color ?? accentColor,
620
+ sharp: child.props.sharp ?? isSharpVariant
550
621
  });
551
622
  }
552
623
  if (child.props && typeof child.props === "object" && "children" in child.props) {
@@ -939,6 +1010,847 @@ var Menu = React5__namespace.forwardRef((props, ref) => {
939
1010
  });
940
1011
  Menu.displayName = "Menu";
941
1012
  var Menu_default = Menu;
1013
+ var ExpansionPanelContext = React5__namespace.createContext(null);
1014
+ var densityClasses2 = {
1015
+ comfortable: "py-5",
1016
+ default: "py-4",
1017
+ compact: "py-3"
1018
+ };
1019
+ var roundedClasses = {
1020
+ none: "rounded-none",
1021
+ sm: "rounded-sm",
1022
+ md: "rounded-md",
1023
+ lg: "rounded-lg",
1024
+ xl: "rounded-xl"
1025
+ };
1026
+ var itemVariantClasses = {
1027
+ elevated: "bg-white border border-gray-200 shadow-sm shadow-gray-900/5",
1028
+ outlined: "bg-white border border-gray-200",
1029
+ tonal: "bg-gray-50 border border-gray-100",
1030
+ plain: "bg-transparent border border-transparent"
1031
+ };
1032
+ var accentClasses2 = {
1033
+ primary: { text: "text-primary", bg: "bg-primary/5", border: "border-primary/30" },
1034
+ neutral: { text: "text-gray-900", bg: "bg-gray-100", border: "border-gray-200" },
1035
+ info: { text: "text-sky-600", bg: "bg-sky-50", border: "border-sky-200" },
1036
+ success: { text: "text-emerald-600", bg: "bg-emerald-50", border: "border-emerald-200" },
1037
+ warning: { text: "text-amber-600", bg: "bg-amber-50", border: "border-amber-200" },
1038
+ danger: { text: "text-red-600", bg: "bg-red-50", border: "border-red-200" },
1039
+ surface: { text: "text-gray-900", bg: "bg-gray-100", border: "border-gray-200" },
1040
+ bw: { text: "text-gray-900", bg: "bg-gray-100", border: "border-gray-200" }
1041
+ };
1042
+ var ExpansionPanelItem = React5__namespace.forwardRef((props, ref) => {
1043
+ const {
1044
+ value,
1045
+ title,
1046
+ subtitle,
1047
+ text,
1048
+ prepend,
1049
+ append,
1050
+ expandIcon,
1051
+ collapseIcon,
1052
+ hideToggleIcon = false,
1053
+ headerClassName,
1054
+ contentClassName,
1055
+ className,
1056
+ disabled = false,
1057
+ children,
1058
+ color: colorOverride,
1059
+ ...rest
1060
+ } = props;
1061
+ const context = React5__namespace.useContext(ExpansionPanelContext);
1062
+ const generatedValue = React5__namespace.useId();
1063
+ const panelValue = value ?? generatedValue;
1064
+ const density = context?.density ?? "default";
1065
+ const color = colorOverride ?? context?.color ?? "primary";
1066
+ const divider = context?.divider ?? true;
1067
+ const variant = context?.variant ?? "elevated";
1068
+ const rounded = context?.rounded ?? "lg";
1069
+ const accent = accentClasses2[color] ?? accentClasses2.primary;
1070
+ const headerId = React5__namespace.useId();
1071
+ const contentId = React5__namespace.useId();
1072
+ const [standaloneExpanded, setStandaloneExpanded] = React5__namespace.useState(false);
1073
+ const isExpanded = context ? context.expandedValues.includes(panelValue) : standaloneExpanded;
1074
+ const handleToggle = () => {
1075
+ if (disabled) {
1076
+ return;
1077
+ }
1078
+ if (context) {
1079
+ context.toggle(panelValue, disabled);
1080
+ } else {
1081
+ setStandaloneExpanded((prev) => !prev);
1082
+ }
1083
+ };
1084
+ const rootSurface = divider ? "bg-transparent border-0 shadow-none" : itemVariantClasses[variant];
1085
+ const shapeClass = divider ? void 0 : roundedClasses[rounded] ?? roundedClasses.lg;
1086
+ const densityPadding = densityClasses2[density] ?? densityClasses2.default;
1087
+ const disabledClass = disabled ? "cursor-not-allowed opacity-60" : "cursor-pointer";
1088
+ const titleClass = isExpanded ? accent.text : void 0;
1089
+ const activeBorderClass = tailwindMerge.twMerge("border-l-2 border-transparent", isExpanded ? accent.border : void 0);
1090
+ const defaultToggleIcon = /* @__PURE__ */ jsxRuntime.jsx("i", { className: "mdi mdi-chevron-down text-lg leading-none transition-transform duration-200", "aria-hidden": true });
1091
+ const hasContent = Boolean(children ?? text);
1092
+ const contentAnimationClass = isExpanded ? "pb-5 opacity-100" : "pb-0 opacity-0";
1093
+ const toggleIconNode = hideToggleIcon ? null : isExpanded && collapseIcon ? collapseIcon : expandIcon ?? defaultToggleIcon;
1094
+ const shouldRotateDefaultIcon = !expandIcon && !collapseIcon && !hideToggleIcon;
1095
+ const toggleWrapperClass = tailwindMerge.twMerge(
1096
+ "ml-3 flex h-6 w-6 items-center justify-center text-gray-500 transition-transform duration-200",
1097
+ shouldRotateDefaultIcon && isExpanded ? "rotate-180" : void 0
1098
+ );
1099
+ return /* @__PURE__ */ jsxRuntime.jsxs(
1100
+ "div",
1101
+ {
1102
+ ...rest,
1103
+ ref,
1104
+ className: tailwindMerge.twMerge(
1105
+ "expansion-panel-item flex flex-col overflow-hidden transition-colors duration-200",
1106
+ rootSurface,
1107
+ shapeClass,
1108
+ className
1109
+ ),
1110
+ "data-state": isExpanded ? "open" : "closed",
1111
+ "data-disabled": disabled || void 0,
1112
+ children: [
1113
+ /* @__PURE__ */ jsxRuntime.jsxs(
1114
+ "button",
1115
+ {
1116
+ type: "button",
1117
+ id: headerId,
1118
+ onClick: handleToggle,
1119
+ disabled,
1120
+ "aria-expanded": isExpanded,
1121
+ "aria-controls": hasContent ? contentId : void 0,
1122
+ className: tailwindMerge.twMerge(
1123
+ "flex w-full items-center gap-4 px-4 text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40",
1124
+ densityPadding,
1125
+ disabledClass,
1126
+ isExpanded ? accent.bg : void 0,
1127
+ headerClassName
1128
+ ),
1129
+ "data-state": isExpanded ? "open" : "closed",
1130
+ children: [
1131
+ prepend && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex h-10 w-10 items-center justify-center text-gray-500", children: prepend }),
1132
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex min-w-0 flex-1 flex-col gap-0.5 text-left", children: [
1133
+ title && /* @__PURE__ */ jsxRuntime.jsx("span", { className: tailwindMerge.twMerge("truncate font-medium text-gray-900", titleClass), children: title }),
1134
+ subtitle && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-gray-500", children: subtitle })
1135
+ ] }),
1136
+ append && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-auto flex items-center gap-2 text-sm text-gray-500", children: append }),
1137
+ !hideToggleIcon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: toggleWrapperClass, children: toggleIconNode })
1138
+ ]
1139
+ }
1140
+ ),
1141
+ hasContent && /* @__PURE__ */ jsxRuntime.jsx(
1142
+ "div",
1143
+ {
1144
+ className: "grid overflow-hidden border-t border-gray-100 transition-all duration-200 ease-in-out",
1145
+ style: { gridTemplateRows: isExpanded ? "1fr" : "0fr" },
1146
+ "aria-hidden": isExpanded ? void 0 : true,
1147
+ "data-state": isExpanded ? "open" : "closed",
1148
+ children: /* @__PURE__ */ jsxRuntime.jsx(
1149
+ "div",
1150
+ {
1151
+ id: contentId,
1152
+ role: "region",
1153
+ "aria-labelledby": headerId,
1154
+ "data-state": isExpanded ? "open" : "closed",
1155
+ className: tailwindMerge.twMerge(
1156
+ "min-h-0 px-4 pt-0 text-sm text-gray-600 transition-all duration-200",
1157
+ activeBorderClass,
1158
+ contentAnimationClass,
1159
+ isExpanded ? "pointer-events-auto" : "pointer-events-none",
1160
+ contentClassName
1161
+ ),
1162
+ children: children ?? text
1163
+ }
1164
+ )
1165
+ }
1166
+ )
1167
+ ]
1168
+ }
1169
+ );
1170
+ });
1171
+ ExpansionPanelItem.displayName = "ExpansionPanelItem";
1172
+ var ExpansionPanelItem_default = ExpansionPanelItem;
1173
+ var variantContainerClasses = {
1174
+ elevated: "bg-white border border-gray-200 shadow-lg shadow-gray-900/10",
1175
+ outlined: "bg-white border border-gray-200",
1176
+ tonal: "bg-gray-50 border border-gray-100",
1177
+ plain: "bg-transparent border border-transparent"
1178
+ };
1179
+ var roundedClasses2 = {
1180
+ none: "rounded-none",
1181
+ sm: "rounded-sm",
1182
+ md: "rounded-md",
1183
+ lg: "rounded-lg",
1184
+ xl: "rounded-xl"
1185
+ };
1186
+ var uniqueValues = (values) => Array.from(new Set(values));
1187
+ var normalizeValues = (value, allowMultiple) => {
1188
+ if (value === void 0 || value === null) {
1189
+ return [];
1190
+ }
1191
+ const normalized = Array.isArray(value) ? value : [value];
1192
+ if (allowMultiple) {
1193
+ return uniqueValues(normalized);
1194
+ }
1195
+ return normalized.length ? [normalized[0]] : [];
1196
+ };
1197
+ var clampValues = (values, allowMultiple) => allowMultiple ? uniqueValues(values) : values.length ? [values[0]] : [];
1198
+ var ExpansionPanel = React5__namespace.forwardRef((props, ref) => {
1199
+ const {
1200
+ variant = "elevated",
1201
+ rounded = "lg",
1202
+ density = "default",
1203
+ color = "primary",
1204
+ divider = true,
1205
+ multiple = false,
1206
+ value,
1207
+ defaultValue,
1208
+ onChange,
1209
+ className,
1210
+ children,
1211
+ ...rest
1212
+ } = props;
1213
+ const isControlled = value !== void 0;
1214
+ const controlledValues = React5__namespace.useMemo(() => {
1215
+ if (!isControlled) {
1216
+ return void 0;
1217
+ }
1218
+ return normalizeValues(value, multiple);
1219
+ }, [isControlled, value, multiple]);
1220
+ const [internalValues, setInternalValues] = React5__namespace.useState(
1221
+ () => normalizeValues(defaultValue, multiple)
1222
+ );
1223
+ const expandedValues = controlledValues ?? internalValues;
1224
+ React5__namespace.useEffect(() => {
1225
+ if (!isControlled) {
1226
+ setInternalValues((prev) => clampValues(prev, multiple));
1227
+ }
1228
+ }, [multiple, isControlled]);
1229
+ const handleValueChange = React5__namespace.useCallback(
1230
+ (next) => {
1231
+ if (!isControlled) {
1232
+ setInternalValues(next);
1233
+ }
1234
+ if (onChange) {
1235
+ if (multiple) {
1236
+ onChange(next);
1237
+ } else {
1238
+ onChange(next[0] ?? null);
1239
+ }
1240
+ }
1241
+ },
1242
+ [isControlled, multiple, onChange]
1243
+ );
1244
+ const toggle = React5__namespace.useCallback(
1245
+ (panelValue, disabled) => {
1246
+ if (disabled) {
1247
+ return;
1248
+ }
1249
+ const isActive = expandedValues.includes(panelValue);
1250
+ const next = multiple ? isActive ? expandedValues.filter((v) => v !== panelValue) : [...expandedValues, panelValue] : isActive ? [] : [panelValue];
1251
+ handleValueChange(next);
1252
+ },
1253
+ [expandedValues, handleValueChange, multiple]
1254
+ );
1255
+ const providerValue = React5__namespace.useMemo(
1256
+ () => ({ expandedValues, toggle, density, color, divider, rounded, variant }),
1257
+ [expandedValues, toggle, density, color, divider, rounded, variant]
1258
+ );
1259
+ const variantClass = divider ? variantContainerClasses[variant] : "bg-transparent border border-transparent shadow-none";
1260
+ const shapeClass = roundedClasses2[rounded] ?? roundedClasses2.lg;
1261
+ const layoutClass = divider ? "divide-y divide-gray-100 overflow-hidden" : "gap-4";
1262
+ return /* @__PURE__ */ jsxRuntime.jsx(ExpansionPanelContext.Provider, { value: providerValue, children: /* @__PURE__ */ jsxRuntime.jsx(
1263
+ "div",
1264
+ {
1265
+ ...rest,
1266
+ ref,
1267
+ className: tailwindMerge.twMerge("expansion-panel flex w-full flex-col text-gray-900", variantClass, shapeClass, layoutClass, className),
1268
+ children
1269
+ }
1270
+ ) });
1271
+ });
1272
+ ExpansionPanel.displayName = "ExpansionPanel";
1273
+ var ExpansionPanel_default = ExpansionPanel;
1274
+ var isBrowser2 = typeof window !== "undefined";
1275
+ var useIsomorphicLayoutEffect2 = isBrowser2 ? React5__namespace.useLayoutEffect : React5__namespace.useEffect;
1276
+ var containerBaseClasses = "fixed inset-0 z-[70] flex items-center justify-center p-4 sm:p-8 data-[state=closed]:pointer-events-none";
1277
+ var overlayBaseClasses2 = "absolute inset-0 bg-gray-900/55 backdrop-blur-[2px] transition-opacity duration-200 data-[state=closed]:opacity-0 data-[state=open]:opacity-100";
1278
+ var panelWrapperClasses = "relative z-10 flex w-full max-h-[95vh] justify-center transition-transform transition-opacity duration-200 data-[state=closed]:translate-y-4 data-[state=closed]:opacity-0 data-[state=open]:translate-y-0 data-[state=open]:opacity-100";
1279
+ var panelBaseClasses = "pointer-events-auto w-full max-h-[90vh] overflow-auto rounded-2xl bg-white p-6 text-gray-900 shadow-2xl shadow-black/20 ring-1 ring-black/10 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40";
1280
+ var resolveSizeValue = (value) => {
1281
+ if (value === void 0) {
1282
+ return void 0;
1283
+ }
1284
+ return typeof value === "number" ? `${value}px` : value;
1285
+ };
1286
+ var Dialog = React5__namespace.forwardRef((props, forwardedRef) => {
1287
+ const {
1288
+ activator,
1289
+ children,
1290
+ open: openProp,
1291
+ defaultOpen = false,
1292
+ onOpenChange,
1293
+ persistent = false,
1294
+ closeOnEsc = true,
1295
+ closeOnOutsideClick = true,
1296
+ closeOnContentClick = false,
1297
+ scrim = true,
1298
+ keepMounted = false,
1299
+ fullscreen = false,
1300
+ maxWidth = "32rem",
1301
+ width,
1302
+ containerClassName,
1303
+ overlayClassName,
1304
+ overlayProps,
1305
+ scrollLock = true,
1306
+ disabled = false,
1307
+ className,
1308
+ style,
1309
+ tabIndex: tabIndexProp,
1310
+ role: roleProp,
1311
+ id: idProp,
1312
+ ["aria-modal"]: ariaModalProp,
1313
+ ...rest
1314
+ } = props;
1315
+ const { onClick: panelOnClick, ...panelProps } = rest;
1316
+ const {
1317
+ className: overlayPropsClassName,
1318
+ onPointerDown: overlayOnPointerDown,
1319
+ ...overlayRestProps
1320
+ } = overlayProps ?? {};
1321
+ const baseId = React5__namespace.useId();
1322
+ const panelId = idProp ?? `${baseId}-dialog`;
1323
+ const activatorId = `${panelId}-activator`;
1324
+ const role = roleProp ?? "dialog";
1325
+ const resolvedTabIndex = tabIndexProp ?? -1;
1326
+ const isControlled = typeof openProp === "boolean";
1327
+ const [internalOpen, setInternalOpen] = React5__namespace.useState(defaultOpen);
1328
+ const open = isControlled ? Boolean(openProp) : internalOpen;
1329
+ const state = open ? "open" : "closed";
1330
+ const panelRef = React5__namespace.useRef(null);
1331
+ const activatorRef = React5__namespace.useRef(null);
1332
+ const previouslyFocusedElement = React5__namespace.useRef(null);
1333
+ const [mounted, setMounted] = React5__namespace.useState(false);
1334
+ useIsomorphicLayoutEffect2(() => {
1335
+ setMounted(true);
1336
+ }, []);
1337
+ const setPanelRef = React5__namespace.useCallback(
1338
+ (node) => {
1339
+ panelRef.current = node;
1340
+ if (typeof forwardedRef === "function") {
1341
+ forwardedRef(node);
1342
+ } else if (forwardedRef) {
1343
+ forwardedRef.current = node;
1344
+ }
1345
+ },
1346
+ [forwardedRef]
1347
+ );
1348
+ const setActivatorNode = React5__namespace.useCallback((node) => {
1349
+ activatorRef.current = node;
1350
+ }, []);
1351
+ const updateOpen = React5__namespace.useCallback(
1352
+ (nextOpen, options) => {
1353
+ if (disabled && nextOpen) {
1354
+ return;
1355
+ }
1356
+ if (!options?.force && !nextOpen && persistent) {
1357
+ return;
1358
+ }
1359
+ if (!isControlled) {
1360
+ setInternalOpen(nextOpen);
1361
+ }
1362
+ onOpenChange?.(nextOpen);
1363
+ },
1364
+ [disabled, isControlled, onOpenChange, persistent]
1365
+ );
1366
+ React5__namespace.useEffect(() => {
1367
+ if (!disabled || !open) {
1368
+ return;
1369
+ }
1370
+ updateOpen(false, { force: true });
1371
+ }, [disabled, open, updateOpen]);
1372
+ React5__namespace.useEffect(() => {
1373
+ if (!isBrowser2) {
1374
+ return;
1375
+ }
1376
+ if (open) {
1377
+ previouslyFocusedElement.current = document.activeElement;
1378
+ const node = panelRef.current;
1379
+ if (node) {
1380
+ if (!node.hasAttribute("tabindex")) {
1381
+ node.setAttribute("tabindex", resolvedTabIndex.toString());
1382
+ }
1383
+ requestAnimationFrame(() => node.focus({ preventScroll: true }));
1384
+ }
1385
+ return;
1386
+ }
1387
+ const previous = previouslyFocusedElement.current ?? activatorRef.current;
1388
+ if (previous && typeof previous.focus === "function") {
1389
+ previous.focus();
1390
+ }
1391
+ }, [open, resolvedTabIndex]);
1392
+ React5__namespace.useEffect(() => {
1393
+ if (!open || !closeOnEsc || persistent || !isBrowser2) {
1394
+ return;
1395
+ }
1396
+ const handleKeyDown = (event) => {
1397
+ if (event.key !== "Escape") {
1398
+ return;
1399
+ }
1400
+ event.stopPropagation();
1401
+ updateOpen(false);
1402
+ };
1403
+ document.addEventListener("keydown", handleKeyDown);
1404
+ return () => document.removeEventListener("keydown", handleKeyDown);
1405
+ }, [closeOnEsc, open, persistent, updateOpen]);
1406
+ React5__namespace.useEffect(() => {
1407
+ if (!scrollLock || !open || !isBrowser2) {
1408
+ return;
1409
+ }
1410
+ const { body, documentElement } = document;
1411
+ const previousOverflow = body.style.overflow;
1412
+ const previousPaddingRight = body.style.paddingRight;
1413
+ const scrollbarWidth = window.innerWidth - documentElement.clientWidth;
1414
+ body.style.overflow = "hidden";
1415
+ if (scrollbarWidth > 0) {
1416
+ const computedPaddingRight = parseFloat(window.getComputedStyle(body).paddingRight) || 0;
1417
+ body.style.paddingRight = `${computedPaddingRight + scrollbarWidth}px`;
1418
+ }
1419
+ return () => {
1420
+ body.style.overflow = previousOverflow;
1421
+ body.style.paddingRight = previousPaddingRight;
1422
+ };
1423
+ }, [open, scrollLock]);
1424
+ const handleOverlayPointerDown = React5__namespace.useCallback(
1425
+ (event) => {
1426
+ overlayOnPointerDown?.(event);
1427
+ if (event.defaultPrevented) {
1428
+ return;
1429
+ }
1430
+ if (!closeOnOutsideClick || event.button > 0) {
1431
+ return;
1432
+ }
1433
+ updateOpen(false);
1434
+ },
1435
+ [closeOnOutsideClick, overlayOnPointerDown, updateOpen]
1436
+ );
1437
+ const handleContentClick = React5__namespace.useCallback(
1438
+ (event) => {
1439
+ panelOnClick?.(event);
1440
+ if (event.defaultPrevented) {
1441
+ return;
1442
+ }
1443
+ if (closeOnContentClick) {
1444
+ updateOpen(false, { force: true });
1445
+ }
1446
+ },
1447
+ [closeOnContentClick, panelOnClick, updateOpen]
1448
+ );
1449
+ const handleActivatorClick = React5__namespace.useCallback(
1450
+ (event) => {
1451
+ if (disabled) {
1452
+ event.preventDefault();
1453
+ event.stopPropagation();
1454
+ return;
1455
+ }
1456
+ updateOpen(!open, { force: true });
1457
+ },
1458
+ [disabled, open, updateOpen]
1459
+ );
1460
+ const handleActivatorKeyDown = React5__namespace.useCallback(
1461
+ (event) => {
1462
+ if (event.key !== "Enter" && event.key !== " ") {
1463
+ return;
1464
+ }
1465
+ event.preventDefault();
1466
+ if (disabled) {
1467
+ return;
1468
+ }
1469
+ updateOpen(!open, { force: true });
1470
+ },
1471
+ [disabled, open, updateOpen]
1472
+ );
1473
+ const shouldRenderOverlay = (scrim || closeOnOutsideClick) && isBrowser2;
1474
+ const portalReady = mounted && isBrowser2 && (open || keepMounted);
1475
+ const resolvedPanelStyle = React5__namespace.useMemo(() => {
1476
+ const nextStyle = { ...style };
1477
+ if (fullscreen) {
1478
+ if (nextStyle.maxWidth === void 0) {
1479
+ nextStyle.maxWidth = "none";
1480
+ }
1481
+ if (nextStyle.width === void 0) {
1482
+ nextStyle.width = "100%";
1483
+ }
1484
+ if (nextStyle.height === void 0) {
1485
+ nextStyle.height = "100%";
1486
+ }
1487
+ if (nextStyle.maxHeight === void 0) {
1488
+ nextStyle.maxHeight = "100%";
1489
+ }
1490
+ } else {
1491
+ if (nextStyle.maxWidth === void 0) {
1492
+ nextStyle.maxWidth = resolveSizeValue(maxWidth);
1493
+ }
1494
+ if (width !== void 0 && nextStyle.width === void 0) {
1495
+ nextStyle.width = resolveSizeValue(width);
1496
+ }
1497
+ }
1498
+ return nextStyle;
1499
+ }, [fullscreen, maxWidth, style, width]);
1500
+ const ariaModal = ariaModalProp ?? (role === "dialog" || role === "alertdialog" ? true : void 0);
1501
+ const overlayNode = shouldRenderOverlay && portalReady ? /* @__PURE__ */ jsxRuntime.jsx(
1502
+ "div",
1503
+ {
1504
+ ...overlayRestProps,
1505
+ className: tailwindMerge.twMerge(
1506
+ overlayBaseClasses2,
1507
+ scrim ? void 0 : "bg-transparent backdrop-blur-none",
1508
+ overlayClassName,
1509
+ overlayPropsClassName
1510
+ ),
1511
+ "data-state": state,
1512
+ "aria-hidden": true,
1513
+ onPointerDown: handleOverlayPointerDown
1514
+ }
1515
+ ) : null;
1516
+ const dialogNode = portalReady && document.body ? reactDom.createPortal(
1517
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: tailwindMerge.twMerge(containerBaseClasses, containerClassName), "data-state": state, "aria-hidden": !open, children: [
1518
+ overlayNode,
1519
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: tailwindMerge.twMerge(panelWrapperClasses, fullscreen ? "h-full items-stretch" : "mx-auto"), "data-state": state, children: /* @__PURE__ */ jsxRuntime.jsx(
1520
+ "div",
1521
+ {
1522
+ ...panelProps,
1523
+ ref: setPanelRef,
1524
+ id: panelId,
1525
+ role,
1526
+ tabIndex: resolvedTabIndex,
1527
+ "aria-modal": ariaModal,
1528
+ className: tailwindMerge.twMerge(
1529
+ panelBaseClasses,
1530
+ fullscreen ? "h-full w-full max-w-none rounded-none" : void 0,
1531
+ className
1532
+ ),
1533
+ style: resolvedPanelStyle,
1534
+ "data-state": state,
1535
+ onClick: handleContentClick,
1536
+ children
1537
+ }
1538
+ ) })
1539
+ ] }),
1540
+ document.body
1541
+ ) : null;
1542
+ const activatorNode = activator ? activator({
1543
+ ref: setActivatorNode,
1544
+ id: activatorId,
1545
+ disabled,
1546
+ open,
1547
+ "aria-haspopup": "dialog",
1548
+ "aria-expanded": open,
1549
+ "aria-controls": panelId,
1550
+ onClick: handleActivatorClick,
1551
+ onKeyDown: handleActivatorKeyDown
1552
+ }) : null;
1553
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1554
+ activatorNode,
1555
+ dialogNode
1556
+ ] });
1557
+ });
1558
+ Dialog.displayName = "Dialog";
1559
+ var Dialog_default = Dialog;
1560
+ var tooltipBaseClasses = "absolute z-[60] max-w-xs rounded-lg border border-white/10 bg-gray-900 px-3 py-2 text-xs font-medium text-white shadow-lg shadow-black/30 ring-1 ring-black/40 transition-all duration-150 data-[state=closed]:pointer-events-none data-[state=closed]:scale-95 data-[state=closed]:opacity-0 data-[state=open]:opacity-100 data-[state=open]:scale-100";
1561
+ var wrapperBaseClasses = "relative inline-flex max-w-full align-middle";
1562
+ var arrowBaseClasses = "pointer-events-none absolute h-2 w-2 rotate-45 border border-white/10 bg-gray-900 shadow-lg shadow-black/20";
1563
+ var resolveSizeValue2 = (value) => {
1564
+ if (value === void 0) {
1565
+ return void 0;
1566
+ }
1567
+ return typeof value === "number" ? `${value}px` : value;
1568
+ };
1569
+ var placementClasses2 = {
1570
+ top: "bottom-full left-1/2 -translate-x-1/2 -translate-y-2 origin-bottom",
1571
+ "top-start": "bottom-full left-0 -translate-y-2 origin-bottom-left",
1572
+ "top-end": "bottom-full right-0 -translate-y-2 origin-bottom-right",
1573
+ bottom: "top-full left-1/2 -translate-x-1/2 translate-y-2 origin-top",
1574
+ "bottom-start": "top-full left-0 translate-y-2 origin-top-left",
1575
+ "bottom-end": "top-full right-0 translate-y-2 origin-top-right",
1576
+ left: "right-full top-1/2 -translate-y-1/2 -translate-x-2 origin-right",
1577
+ "left-start": "right-full top-0 -translate-x-2 origin-top-right",
1578
+ "left-end": "right-full bottom-0 -translate-x-2 origin-bottom-right",
1579
+ right: "left-full top-1/2 -translate-y-1/2 translate-x-2 origin-left",
1580
+ "right-start": "left-full top-0 translate-x-2 origin-top-left",
1581
+ "right-end": "left-full bottom-0 translate-x-2 origin-bottom-left"
1582
+ };
1583
+ var arrowPlacementClasses = {
1584
+ top: "left-1/2 top-full -translate-x-1/2 -translate-y-1/2",
1585
+ "top-start": "left-4 top-full -translate-y-1/2",
1586
+ "top-end": "right-4 top-full -translate-y-1/2",
1587
+ bottom: "left-1/2 bottom-full -translate-x-1/2 translate-y-1/2",
1588
+ "bottom-start": "left-4 bottom-full translate-y-1/2",
1589
+ "bottom-end": "right-4 bottom-full translate-y-1/2",
1590
+ left: "right-full top-1/2 -translate-y-1/2 translate-x-1/2",
1591
+ "left-start": "right-full top-4 translate-x-1/2",
1592
+ "left-end": "right-full bottom-4 translate-x-1/2",
1593
+ right: "left-full top-1/2 -translate-y-1/2 -translate-x-1/2",
1594
+ "right-start": "left-full top-4 -translate-x-1/2",
1595
+ "right-end": "left-full bottom-4 -translate-x-1/2"
1596
+ };
1597
+ var ToolTip = React5__namespace.forwardRef((props, forwardedRef) => {
1598
+ const {
1599
+ activator,
1600
+ children,
1601
+ open: openProp,
1602
+ defaultOpen = false,
1603
+ onOpenChange,
1604
+ placement = "top",
1605
+ openDelay = 120,
1606
+ closeDelay = 100,
1607
+ openOnHover = true,
1608
+ openOnFocus = true,
1609
+ openOnClick = false,
1610
+ interactive = false,
1611
+ arrow = true,
1612
+ disabled = false,
1613
+ keepMounted = false,
1614
+ maxWidth = "18rem",
1615
+ wrapperClassName,
1616
+ closeOnContentClick = false,
1617
+ className,
1618
+ style,
1619
+ id: idProp,
1620
+ ...rest
1621
+ } = props;
1622
+ const { onPointerEnter: tooltipPointerEnter, onPointerLeave: tooltipPointerLeave, onClick: tooltipOnClick, ...tooltipProps } = rest;
1623
+ const baseId = React5__namespace.useId();
1624
+ const tooltipId = idProp ?? `${baseId}-tooltip`;
1625
+ const isControlled = typeof openProp === "boolean";
1626
+ const [internalOpen, setInternalOpen] = React5__namespace.useState(defaultOpen);
1627
+ const open = isControlled ? Boolean(openProp) : internalOpen;
1628
+ const state = open ? "open" : "closed";
1629
+ const describedBy = open || keepMounted ? tooltipId : void 0;
1630
+ const openTimeoutRef = React5__namespace.useRef(null);
1631
+ const closeTimeoutRef = React5__namespace.useRef(null);
1632
+ const clearOpenTimer = React5__namespace.useCallback(() => {
1633
+ if (openTimeoutRef.current !== null) {
1634
+ window.clearTimeout(openTimeoutRef.current);
1635
+ openTimeoutRef.current = null;
1636
+ }
1637
+ }, []);
1638
+ const clearCloseTimer = React5__namespace.useCallback(() => {
1639
+ if (closeTimeoutRef.current !== null) {
1640
+ window.clearTimeout(closeTimeoutRef.current);
1641
+ closeTimeoutRef.current = null;
1642
+ }
1643
+ }, []);
1644
+ const setOpen = React5__namespace.useCallback(
1645
+ (nextOpen) => {
1646
+ if (!isControlled) {
1647
+ setInternalOpen(nextOpen);
1648
+ }
1649
+ onOpenChange?.(nextOpen);
1650
+ },
1651
+ [isControlled, onOpenChange]
1652
+ );
1653
+ const scheduleOpen = React5__namespace.useCallback(
1654
+ (source) => {
1655
+ if (disabled) {
1656
+ return;
1657
+ }
1658
+ clearCloseTimer();
1659
+ const delay = source === "click" ? 0 : openDelay;
1660
+ if (delay <= 0) {
1661
+ setOpen(true);
1662
+ return;
1663
+ }
1664
+ openTimeoutRef.current = window.setTimeout(() => setOpen(true), delay);
1665
+ },
1666
+ [clearCloseTimer, disabled, openDelay, setOpen]
1667
+ );
1668
+ const scheduleClose = React5__namespace.useCallback(
1669
+ (source) => {
1670
+ clearOpenTimer();
1671
+ const delay = source === "click" ? 0 : closeDelay;
1672
+ if (delay <= 0) {
1673
+ setOpen(false);
1674
+ return;
1675
+ }
1676
+ closeTimeoutRef.current = window.setTimeout(() => setOpen(false), delay);
1677
+ },
1678
+ [clearOpenTimer, closeDelay, setOpen]
1679
+ );
1680
+ React5__namespace.useEffect(() => {
1681
+ if (!disabled) {
1682
+ return;
1683
+ }
1684
+ clearOpenTimer();
1685
+ clearCloseTimer();
1686
+ if (open) {
1687
+ setOpen(false);
1688
+ }
1689
+ }, [clearCloseTimer, clearOpenTimer, disabled, open, setOpen]);
1690
+ React5__namespace.useEffect(
1691
+ () => () => {
1692
+ clearOpenTimer();
1693
+ clearCloseTimer();
1694
+ },
1695
+ [clearCloseTimer, clearOpenTimer]
1696
+ );
1697
+ const handleActivatorPointerEnter = React5__namespace.useCallback(
1698
+ (event) => {
1699
+ if (event.pointerType === "touch") {
1700
+ return;
1701
+ }
1702
+ if (openOnHover) {
1703
+ scheduleOpen("hover");
1704
+ }
1705
+ },
1706
+ [openOnHover, scheduleOpen]
1707
+ );
1708
+ const handleActivatorPointerLeave = React5__namespace.useCallback(
1709
+ (event) => {
1710
+ if (event.pointerType === "touch") {
1711
+ return;
1712
+ }
1713
+ if (openOnHover) {
1714
+ scheduleClose("hover");
1715
+ }
1716
+ },
1717
+ [openOnHover, scheduleClose]
1718
+ );
1719
+ const handleActivatorFocus = React5__namespace.useCallback(
1720
+ () => {
1721
+ if (openOnFocus) {
1722
+ scheduleOpen("focus");
1723
+ }
1724
+ },
1725
+ [openOnFocus, scheduleOpen]
1726
+ );
1727
+ const handleActivatorBlur = React5__namespace.useCallback(
1728
+ () => {
1729
+ if (openOnFocus) {
1730
+ scheduleClose("focus");
1731
+ }
1732
+ },
1733
+ [openOnFocus, scheduleClose]
1734
+ );
1735
+ const handleActivatorClick = React5__namespace.useCallback(
1736
+ (event) => {
1737
+ if (!openOnClick) {
1738
+ return;
1739
+ }
1740
+ event.preventDefault();
1741
+ event.stopPropagation();
1742
+ if (disabled) {
1743
+ return;
1744
+ }
1745
+ if (open) {
1746
+ scheduleClose("click");
1747
+ } else {
1748
+ scheduleOpen("click");
1749
+ }
1750
+ },
1751
+ [disabled, open, openOnClick, scheduleClose, scheduleOpen]
1752
+ );
1753
+ const handleActivatorKeyDown = React5__namespace.useCallback(
1754
+ (event) => {
1755
+ if (!openOnClick) {
1756
+ return;
1757
+ }
1758
+ if (event.key !== "Enter" && event.key !== " ") {
1759
+ return;
1760
+ }
1761
+ event.preventDefault();
1762
+ if (open) {
1763
+ scheduleClose("click");
1764
+ } else {
1765
+ scheduleOpen("click");
1766
+ }
1767
+ },
1768
+ [open, openOnClick, scheduleClose, scheduleOpen]
1769
+ );
1770
+ const handleTooltipPointerEnter = React5__namespace.useCallback(
1771
+ (event) => {
1772
+ tooltipPointerEnter?.(event);
1773
+ if (event.defaultPrevented) {
1774
+ return;
1775
+ }
1776
+ if (interactive) {
1777
+ clearCloseTimer();
1778
+ }
1779
+ },
1780
+ [clearCloseTimer, interactive, tooltipPointerEnter]
1781
+ );
1782
+ const handleTooltipPointerLeave = React5__namespace.useCallback(
1783
+ (event) => {
1784
+ tooltipPointerLeave?.(event);
1785
+ if (event.defaultPrevented) {
1786
+ return;
1787
+ }
1788
+ if (interactive) {
1789
+ scheduleClose("hover");
1790
+ }
1791
+ },
1792
+ [interactive, scheduleClose, tooltipPointerLeave]
1793
+ );
1794
+ const handleTooltipClick = React5__namespace.useCallback(
1795
+ (event) => {
1796
+ tooltipOnClick?.(event);
1797
+ if (event.defaultPrevented) {
1798
+ return;
1799
+ }
1800
+ if (closeOnContentClick) {
1801
+ scheduleClose("click");
1802
+ }
1803
+ },
1804
+ [closeOnContentClick, scheduleClose, tooltipOnClick]
1805
+ );
1806
+ const hasRenderableContent = children !== void 0 && children !== null;
1807
+ const shouldRenderTooltip = hasRenderableContent && (open || keepMounted);
1808
+ const pointerClass = interactive ? "pointer-events-auto" : "pointer-events-none";
1809
+ const resolvedStyle = React5__namespace.useMemo(() => {
1810
+ const nextStyle = { ...style };
1811
+ if (nextStyle.maxWidth === void 0) {
1812
+ nextStyle.maxWidth = resolveSizeValue2(maxWidth);
1813
+ }
1814
+ return nextStyle;
1815
+ }, [maxWidth, style]);
1816
+ const activatorNode = activator({
1817
+ id: `${tooltipId}-activator`,
1818
+ open,
1819
+ disabled,
1820
+ "aria-describedby": describedBy,
1821
+ onPointerEnter: handleActivatorPointerEnter,
1822
+ onPointerLeave: handleActivatorPointerLeave,
1823
+ onFocus: handleActivatorFocus,
1824
+ onBlur: handleActivatorBlur,
1825
+ onClick: openOnClick ? handleActivatorClick : void 0,
1826
+ onKeyDown: openOnClick ? handleActivatorKeyDown : void 0
1827
+ });
1828
+ return /* @__PURE__ */ jsxRuntime.jsxs("span", { className: tailwindMerge.twMerge(wrapperBaseClasses, wrapperClassName), children: [
1829
+ activatorNode,
1830
+ shouldRenderTooltip && /* @__PURE__ */ jsxRuntime.jsxs(
1831
+ "div",
1832
+ {
1833
+ ...tooltipProps,
1834
+ ref: forwardedRef,
1835
+ role: "tooltip",
1836
+ id: tooltipId,
1837
+ "aria-hidden": !open,
1838
+ "data-state": state,
1839
+ className: tailwindMerge.twMerge(tooltipBaseClasses, placementClasses2[placement], pointerClass, className),
1840
+ style: resolvedStyle,
1841
+ onPointerEnter: handleTooltipPointerEnter,
1842
+ onPointerLeave: handleTooltipPointerLeave,
1843
+ onClick: handleTooltipClick,
1844
+ children: [
1845
+ children,
1846
+ arrow && /* @__PURE__ */ jsxRuntime.jsx("span", { className: tailwindMerge.twMerge(arrowBaseClasses, arrowPlacementClasses[placement]), "aria-hidden": true, "data-arrow": true })
1847
+ ]
1848
+ }
1849
+ )
1850
+ ] });
1851
+ });
1852
+ ToolTip.displayName = "ToolTip";
1853
+ var ToolTip_default = ToolTip;
942
1854
 
943
1855
  // src/Form/Input/states.input.ts
944
1856
  var resolveIconClassName3 = (icon) => {
@@ -966,6 +1878,17 @@ var resolveIconClassName3 = (icon) => {
966
1878
  const classes = [...baseClasses, normalizedName];
967
1879
  return Array.from(new Set(classes)).join(" ");
968
1880
  };
1881
+
1882
+ // src/utils/helpers/randomStr.ts
1883
+ var characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
1884
+ function generateString(length = 5) {
1885
+ let result = "";
1886
+ const charactersLength = characters.length;
1887
+ for (let i = 0; i < length; i++) {
1888
+ result += characters.charAt(Math.floor(Math.random() * charactersLength));
1889
+ }
1890
+ return result;
1891
+ }
969
1892
  var Input = ({
970
1893
  variant = "outline",
971
1894
  success,
@@ -978,9 +1901,14 @@ var Input = ({
978
1901
  }) => {
979
1902
  const classBase = "input-base px-3 py-2 focus-visible:outline-none focus-visible:ring-primary transition-colors duration-200 disabled:opacity-50 disabled:cursor-not-allowed w-full";
980
1903
  const variantClasses = {
981
- outline: "rounded border border-gray-300 focus:border-primary focus:ring-1 focus:ring-primary",
982
- filled: "rounded bg-gray-100 border border-gray-300 focus:border-primary focus:ring-1 focus:ring-primary",
983
- underlined: "border-b-1 border-gray-300 focus:border-red-400 focus:outline-none focus:ring-none"
1904
+ solid: "rounded border border-gray-400 bg-white shadow-sm focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/30",
1905
+ sharp: "rounded-none border border-gray-400 bg-white shadow-sm focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/30",
1906
+ outline: "rounded border border-gray-300 bg-transparent focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/30",
1907
+ text: "rounded-none border-0 border-b border-transparent px-0 bg-transparent focus-visible:border-primary focus-visible:ring-0 focus-visible:ring-transparent",
1908
+ ghost: "rounded border border-transparent bg-gray-50 text-gray-900 focus-visible:bg-white focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/15",
1909
+ filled: "rounded border border-gray-200 bg-gray-100 focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/25",
1910
+ underlined: "rounded-none border-0 border-b border-gray-300 px-0 bg-transparent focus-visible:border-primary focus-visible:ring-0 focus-visible:ring-transparent",
1911
+ rounded: "rounded-full px-4 border border-gray-300 bg-white focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/20 shadow-sm"
984
1912
  };
985
1913
  const status = error ? { tone: "error", message: error } : warn ? { tone: "warn", message: warn } : success ? { tone: "success", message: success } : void 0;
986
1914
  const statusClasses = {
@@ -997,10 +1925,18 @@ var Input = ({
997
1925
  const toneClass = status ? statusClasses[status.tone] : void 0;
998
1926
  const prependIconClass = resolveIconClassName3(icon);
999
1927
  const prependPadding = prependIconClass ? "pl-10" : void 0;
1928
+ const inputName = props.name || generateString();
1000
1929
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: tailwindMerge.twMerge("flex flex-col gap-1", wrapperClassName), children: [
1001
1930
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex items-center", children: [
1002
1931
  prependIconClass && /* @__PURE__ */ jsxRuntime.jsx("i", { className: tailwindMerge.twMerge("pointer-events-none absolute left-3 ", prependIconClass), "aria-hidden": true }),
1003
- /* @__PURE__ */ jsxRuntime.jsx("input", { ...props, className: tailwindMerge.twMerge(classBase, variantClass, toneClass, prependPadding, className) })
1932
+ /* @__PURE__ */ jsxRuntime.jsx(
1933
+ "input",
1934
+ {
1935
+ ...props,
1936
+ className: tailwindMerge.twMerge(classBase, variantClass, toneClass, prependPadding, className),
1937
+ name: inputName
1938
+ }
1939
+ )
1004
1940
  ] }),
1005
1941
  status?.message && /* @__PURE__ */ jsxRuntime.jsx("span", { className: tailwindMerge.twMerge("text-sm", statusMessageClasses[status.tone]), children: status.message })
1006
1942
  ] });
@@ -1009,9 +1945,13 @@ var Input_default = Input;
1009
1945
 
1010
1946
  exports.Button = Button_default;
1011
1947
  exports.Chip = Chip_default;
1948
+ exports.Dialog = Dialog_default;
1949
+ exports.ExpansionPanel = ExpansionPanel_default;
1950
+ exports.ExpansionPanelItem = ExpansionPanelItem_default;
1012
1951
  exports.Input = Input_default;
1013
1952
  exports.List = List_default;
1014
1953
  exports.ListItem = Item_default;
1015
1954
  exports.Menu = Menu_default;
1955
+ exports.ToolTip = ToolTip_default;
1016
1956
  //# sourceMappingURL=index.cjs.map
1017
1957
  //# sourceMappingURL=index.cjs.map