@lindle/linoardo 1.0.9 → 1.0.11

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,4 +1,4 @@
1
- import * as React5 from 'react';
1
+ import * as React4 from 'react';
2
2
  import { twMerge } from 'tailwind-merge';
3
3
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
4
4
 
@@ -8,60 +8,90 @@ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
8
8
  var iconBaseClasses = {
9
9
  mdi: ["mdi"]
10
10
  };
11
-
12
- // src/Containment/Button/states.button.ts
13
- 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";
14
- var blackAndWhiteVariantClass = "bg-white text-black border border-black focus-visible:ring-black/40 focus-visible:ring-offset-white";
11
+ 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";
12
+ var blackAndWhiteVariantClass = "bg-white text-black border border-black focus-visible:ring-black/40 focus-visible:ring-offset-white";
13
+ var blackAndWhitePaletteClasses = {
14
+ solid: twMerge(blackAndWhiteVariantClass, "bg-black text-white"),
15
+ outline: blackAndWhiteVariantClass,
16
+ ghost: "bg-neutral-300 text-white",
17
+ text: blackAndWhiteVariantClass,
18
+ filled: "bg-black text-white",
19
+ underlined: twMerge(blackAndWhiteVariantClass, "b"),
20
+ rounded: blackAndWhiteVariantClass,
21
+ sharp: "bg-black text-white rounded-none"
22
+ };
15
23
  var paletteVariantClasses = {
16
24
  primary: {
17
25
  solid: "bg-primary text-white hover:bg-primary/90 focus-visible:ring-primary",
26
+ sharp: "rounded-none bg-primary text-white hover:bg-primary/90 focus-visible:ring-primary",
18
27
  outline: "border border-primary text-primary bg-white hover:bg-primary hover:text-white focus-visible:ring-primary",
19
- ghost: "text-primary bg-primary/10 hover:bg-primary/20 focus-visible:ring-primary/40",
20
- text: "bg-transparent text-primary hover:bg-primary/10 focus-visible:ring-primary/30 underline-offset-2",
21
- bw: blackAndWhiteVariantClass
28
+ ghost: "text-primary bg-primary/10 hover:bg-primary/20 focus-visible:ring-primary/40 border border-transparent",
29
+ text: "bg-transparent text-primary hover:bg-primary/10 focus-visible:ring-primary/30 underline-offset-2 border border-transparent",
30
+ filled: "bg-primary/15 text-primary border border-primary/30 hover:bg-primary/25 focus-visible:ring-primary/25",
31
+ underlined: "bg-transparent text-primary border border-transparent underline decoration-2 underline-offset-4 hover:bg-primary/5 focus-visible:ring-primary/25",
32
+ rounded: "rounded-full border border-primary/60 bg-primary/10 text-primary hover:bg-primary/20 focus-visible:ring-primary/25"
22
33
  },
23
34
  neutral: {
24
35
  solid: "bg-gray-600 text-white hover:bg-gray-700 focus-visible:ring-gray-500",
36
+ sharp: "rounded-none bg-gray-600 text-white hover:bg-gray-700 focus-visible:ring-gray-500",
25
37
  outline: "border border-gray-400 text-gray-700 bg-white hover:bg-gray-700 hover:text-white focus-visible:ring-gray-400",
26
- ghost: "text-gray-700 bg-gray-100 hover:bg-gray-200 focus-visible:ring-gray-300",
27
- text: "bg-transparent text-gray-700 hover:bg-gray-100 focus-visible:ring-gray-200 underline-offset-2",
28
- bw: blackAndWhiteVariantClass
38
+ ghost: "text-gray-700 bg-gray-100 hover:bg-gray-200 focus-visible:ring-gray-300 border border-transparent",
39
+ text: "bg-transparent text-gray-700 hover:bg-gray-100 focus-visible:ring-gray-200 underline-offset-2 border border-transparent",
40
+ filled: "bg-gray-200 text-gray-900 border border-gray-300 hover:bg-gray-300 focus-visible:ring-gray-300",
41
+ underlined: "bg-transparent text-gray-900 border border-transparent underline decoration-2 underline-offset-4 hover:bg-gray-100 focus-visible:ring-gray-300",
42
+ rounded: "rounded-full border border-gray-400 bg-white text-gray-800 hover:bg-gray-100 focus-visible:ring-gray-300"
29
43
  },
30
44
  info: {
31
45
  solid: "bg-sky-500 text-white hover:bg-sky-600 focus-visible:ring-sky-400",
46
+ sharp: "rounded-none bg-sky-500 text-white hover:bg-sky-600 focus-visible:ring-sky-400",
32
47
  outline: "border border-sky-500 text-sky-600 bg-white hover:bg-sky-500 hover:text-white focus-visible:ring-sky-400",
33
- ghost: "text-sky-600 bg-sky-100 hover:bg-sky-200 focus-visible:ring-sky-300",
34
- text: "bg-transparent text-sky-600 hover:bg-sky-100 focus-visible:ring-sky-200 underline-offset-2",
35
- bw: blackAndWhiteVariantClass
48
+ ghost: "text-sky-600 bg-sky-100 hover:bg-sky-200 focus-visible:ring-sky-300 border border-transparent",
49
+ text: "bg-transparent text-sky-600 hover:bg-sky-100 focus-visible:ring-sky-200 underline-offset-2 border border-transparent",
50
+ filled: "bg-sky-100 text-sky-700 border border-sky-200 hover:bg-sky-200 focus-visible:ring-sky-200",
51
+ underlined: "bg-transparent text-sky-600 border border-transparent underline decoration-2 underline-offset-4 hover:bg-sky-50 focus-visible:ring-sky-200",
52
+ rounded: "rounded-full border border-sky-500/70 bg-sky-50 text-sky-700 hover:bg-sky-100 focus-visible:ring-sky-200"
36
53
  },
37
54
  success: {
38
55
  solid: "bg-emerald-500 text-white hover:bg-emerald-600 focus-visible:ring-emerald-400",
56
+ sharp: "rounded-none bg-emerald-500 text-white hover:bg-emerald-600 focus-visible:ring-emerald-400",
39
57
  outline: "border border-emerald-500 text-emerald-600 bg-white hover:bg-emerald-500 hover:text-white focus-visible:ring-emerald-400",
40
- ghost: "text-emerald-600 bg-emerald-100 hover:bg-emerald-200 focus-visible:ring-emerald-300",
41
- text: "bg-transparent text-emerald-600 hover:bg-emerald-100 focus-visible:ring-emerald-200 underline-offset-2",
42
- bw: blackAndWhiteVariantClass
58
+ ghost: "text-emerald-600 bg-emerald-100 hover:bg-emerald-200 focus-visible:ring-emerald-300 border border-transparent",
59
+ text: "bg-transparent text-emerald-600 hover:bg-emerald-100 focus-visible:ring-emerald-200 underline-offset-2 border border-transparent",
60
+ filled: "bg-emerald-100 text-emerald-700 border border-emerald-200 hover:bg-emerald-200 focus-visible:ring-emerald-200",
61
+ underlined: "bg-transparent text-emerald-600 border border-transparent underline decoration-2 underline-offset-4 hover:bg-emerald-50 focus-visible:ring-emerald-200",
62
+ rounded: "rounded-full border border-emerald-500/70 bg-emerald-50 text-emerald-700 hover:bg-emerald-100 focus-visible:ring-emerald-200"
43
63
  },
44
64
  warning: {
45
65
  solid: "bg-amber-500 text-white hover:bg-amber-600 focus-visible:ring-amber-400",
66
+ sharp: "rounded-none bg-amber-500 text-white hover:bg-amber-600 focus-visible:ring-amber-400",
46
67
  outline: "border border-amber-500 text-amber-600 bg-white hover:bg-amber-500 hover:text-white focus-visible:ring-amber-400",
47
- ghost: "text-amber-600 bg-amber-100 hover:bg-amber-200 focus-visible:ring-amber-300",
48
- text: "bg-transparent text-amber-600 hover:bg-amber-100 focus-visible:ring-amber-200 underline-offset-2",
49
- bw: blackAndWhiteVariantClass
68
+ ghost: "text-amber-600 bg-amber-100 hover:bg-amber-200 focus-visible:ring-amber-300 border border-transparent",
69
+ text: "bg-transparent text-amber-600 hover:bg-amber-100 focus-visible:ring-amber-200 underline-offset-2 border border-transparent",
70
+ filled: "bg-amber-100 text-amber-800 border border-amber-200 hover:bg-amber-200 focus-visible:ring-amber-200",
71
+ underlined: "bg-transparent text-amber-600 border border-transparent underline decoration-2 underline-offset-4 hover:bg-amber-50 focus-visible:ring-amber-200",
72
+ rounded: "rounded-full border border-amber-500/70 bg-amber-50 text-amber-700 hover:bg-amber-100 focus-visible:ring-amber-200"
50
73
  },
51
74
  danger: {
52
75
  solid: "bg-red-500 text-white hover:bg-red-600 focus-visible:ring-red-400",
76
+ sharp: "rounded-none bg-red-500 text-white hover:bg-red-600 focus-visible:ring-red-400",
53
77
  outline: "border border-red-500 text-red-600 bg-white hover:bg-red-500 hover:text-white focus-visible:ring-red-400",
54
- ghost: "text-red-600 bg-red-100 hover:bg-red-200 focus-visible:ring-red-300",
55
- text: "bg-transparent text-red-600 hover:bg-red-100 focus-visible:ring-red-200 underline-offset-2",
56
- bw: blackAndWhiteVariantClass
78
+ ghost: "text-red-600 bg-red-100 hover:bg-red-200 focus-visible:ring-red-300 border border-transparent",
79
+ text: "bg-transparent text-red-600 hover:bg-red-100 focus-visible:ring-red-200 underline-offset-2 border border-transparent",
80
+ filled: "bg-red-100 text-red-700 border border-red-200 hover:bg-red-200 focus-visible:ring-red-200",
81
+ underlined: "bg-transparent text-red-600 border border-transparent underline decoration-2 underline-offset-4 hover:bg-red-50 focus-visible:ring-red-200",
82
+ rounded: "rounded-full border border-red-500/70 bg-red-50 text-red-700 hover:bg-red-100 focus-visible:ring-red-200"
57
83
  },
58
84
  surface: {
59
85
  solid: "bg-white text-gray-900 border border-gray-200 hover:bg-gray-50 focus-visible:ring-gray-200",
86
+ sharp: "rounded-none bg-white text-gray-900 border border-gray-200 hover:bg-gray-50 focus-visible:ring-gray-200",
60
87
  outline: "border border-gray-300 text-gray-900 bg-white hover:bg-gray-100 focus-visible:ring-gray-200",
61
- ghost: "text-gray-900 bg-gray-100 hover:bg-gray-200 focus-visible:ring-gray-200",
62
- text: "bg-transparent text-gray-900 hover:bg-gray-100 focus-visible:ring-gray-200 underline-offset-2",
63
- bw: blackAndWhiteVariantClass
64
- }
88
+ ghost: "text-gray-900 bg-gray-100 hover:bg-gray-200 focus-visible:ring-gray-200 border border-transparent",
89
+ text: "bg-transparent text-gray-900 hover:bg-gray-100 focus-visible:ring-gray-200 underline-offset-2 border border-transparent",
90
+ filled: "bg-gray-50 text-gray-900 border border-gray-200 hover:bg-white focus-visible:ring-gray-200",
91
+ underlined: "bg-transparent text-gray-900 border border-transparent underline decoration-2 underline-offset-4 hover:bg-gray-100 focus-visible:ring-gray-200",
92
+ rounded: "rounded-full border border-gray-300 bg-white text-gray-900 hover:bg-gray-50 focus-visible:ring-gray-200"
93
+ },
94
+ bw: blackAndWhitePaletteClasses
65
95
  };
66
96
  var resolveVariantClass = (variant, palette) => {
67
97
  const paletteVariants = paletteVariantClasses[palette] ?? paletteVariantClasses.primary;
@@ -99,7 +129,7 @@ var sizeClasses = {
99
129
  large: "px-6 py-3 text-lg",
100
130
  "x-large": "px-7 py-3.5 text-xl"
101
131
  };
102
- var Button = React5.forwardRef(
132
+ var Button = React4.forwardRef(
103
133
  ({
104
134
  variant = "solid",
105
135
  color = "primary",
@@ -134,7 +164,7 @@ var Button = React5.forwardRef(
134
164
  ref,
135
165
  onClick,
136
166
  disabled: isDisabled,
137
- className: twMerge(base, cursor, variantClass, sizeClass, blockClass, gapClass, className, "border-2 border-l"),
167
+ className: twMerge(base, cursor, variantClass, sizeClass, blockClass, gapClass, className),
138
168
  "data-loading": loading || void 0,
139
169
  "aria-busy": loading || void 0,
140
170
  children: [
@@ -158,56 +188,88 @@ var chipSizeClasses = {
158
188
  };
159
189
  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";
160
190
  var blackAndWhiteChipVariantClass = "bg-white text-black border border-black hover:bg-white focus-visible:ring-black/40 focus-visible:ring-offset-white";
191
+ var blackAndWhitePaletteClasses2 = {
192
+ solid: blackAndWhiteChipVariantClass,
193
+ outline: blackAndWhiteChipVariantClass,
194
+ ghost: blackAndWhiteChipVariantClass,
195
+ text: blackAndWhiteChipVariantClass,
196
+ filled: blackAndWhiteChipVariantClass,
197
+ underlined: blackAndWhiteChipVariantClass,
198
+ rounded: blackAndWhiteChipVariantClass,
199
+ sharp: `${blackAndWhiteChipVariantClass} rounded-none`
200
+ };
161
201
  var paletteVariantClasses2 = {
162
202
  primary: {
163
203
  solid: "bg-primary text-white border border-primary hover:bg-primary/90",
204
+ sharp: "rounded-none bg-primary text-white border border-primary hover:bg-primary/90",
164
205
  outline: "bg-transparent text-primary border border-primary hover:bg-primary/10",
165
206
  ghost: "bg-primary/15 text-primary border border-transparent hover:bg-primary/25",
166
207
  text: "bg-transparent text-primary border border-transparent hover:text-primary/80",
167
- bw: blackAndWhiteChipVariantClass
208
+ filled: "bg-primary/10 text-primary border border-primary/30 hover:bg-primary/20",
209
+ underlined: "bg-transparent text-primary border-0 border-b-2 border-primary px-0 rounded-none hover:text-primary/80",
210
+ rounded: "bg-white text-primary border border-primary/40 shadow-sm hover:bg-primary/5"
168
211
  },
169
212
  neutral: {
170
213
  solid: "bg-gray-900 text-white border border-gray-900 hover:bg-gray-800",
214
+ sharp: "rounded-none bg-gray-900 text-white border border-gray-900 hover:bg-gray-800",
171
215
  outline: "bg-transparent text-gray-900 border border-gray-500 hover:bg-gray-100",
172
216
  ghost: "bg-gray-100 text-gray-900 border border-transparent hover:bg-gray-200",
173
217
  text: "bg-transparent text-gray-900 border border-transparent hover:text-gray-700",
174
- bw: blackAndWhiteChipVariantClass
218
+ filled: "bg-gray-200 text-gray-900 border border-gray-300 hover:bg-gray-300",
219
+ underlined: "bg-transparent text-gray-900 border-0 border-b-2 border-gray-500 px-0 rounded-none hover:text-gray-700",
220
+ rounded: "bg-white text-gray-900 border border-gray-300 shadow-sm hover:bg-gray-100"
175
221
  },
176
222
  info: {
177
223
  solid: "bg-sky-500 text-white border border-sky-500 hover:bg-sky-600",
224
+ sharp: "rounded-none bg-sky-500 text-white border border-sky-500 hover:bg-sky-600",
178
225
  outline: "bg-transparent text-sky-600 border border-sky-500 hover:bg-sky-50",
179
226
  ghost: "bg-sky-100 text-sky-700 border border-transparent hover:bg-sky-200",
180
227
  text: "bg-transparent text-sky-600 border border-transparent hover:text-sky-700",
181
- bw: blackAndWhiteChipVariantClass
228
+ filled: "bg-sky-100 text-sky-700 border border-sky-200 hover:bg-sky-200",
229
+ underlined: "bg-transparent text-sky-600 border-0 border-b-2 border-sky-500 px-0 rounded-none hover:text-sky-700",
230
+ rounded: "bg-white text-sky-700 border border-sky-200 shadow-sm hover:bg-sky-50"
182
231
  },
183
232
  success: {
184
233
  solid: "bg-emerald-500 text-white border border-emerald-500 hover:bg-emerald-600",
234
+ sharp: "rounded-none bg-emerald-500 text-white border border-emerald-500 hover:bg-emerald-600",
185
235
  outline: "bg-transparent text-emerald-600 border border-emerald-500 hover:bg-emerald-50",
186
236
  ghost: "bg-emerald-100 text-emerald-700 border border-transparent hover:bg-emerald-200",
187
237
  text: "bg-transparent text-emerald-600 border border-transparent hover:text-emerald-700",
188
- bw: blackAndWhiteChipVariantClass
238
+ filled: "bg-emerald-100 text-emerald-700 border border-emerald-200 hover:bg-emerald-200",
239
+ underlined: "bg-transparent text-emerald-600 border-0 border-b-2 border-emerald-500 px-0 rounded-none hover:text-emerald-700",
240
+ rounded: "bg-white text-emerald-700 border border-emerald-200 shadow-sm hover:bg-emerald-50"
189
241
  },
190
242
  warning: {
191
243
  solid: "bg-amber-500 text-white border border-amber-500 hover:bg-amber-600",
244
+ sharp: "rounded-none bg-amber-500 text-white border border-amber-500 hover:bg-amber-600",
192
245
  outline: "bg-transparent text-amber-700 border border-amber-500 hover:bg-amber-50",
193
246
  ghost: "bg-amber-100 text-amber-800 border border-transparent hover:bg-amber-200",
194
247
  text: "bg-transparent text-amber-700 border border-transparent hover:text-amber-800",
195
- bw: blackAndWhiteChipVariantClass
248
+ filled: "bg-amber-100 text-amber-800 border border-amber-200 hover:bg-amber-200",
249
+ underlined: "bg-transparent text-amber-700 border-0 border-b-2 border-amber-500 px-0 rounded-none hover:text-amber-800",
250
+ rounded: "bg-white text-amber-700 border border-amber-200 shadow-sm hover:bg-amber-50"
196
251
  },
197
252
  danger: {
198
253
  solid: "bg-red-500 text-white border border-red-500 hover:bg-red-600",
254
+ sharp: "rounded-none bg-red-500 text-white border border-red-500 hover:bg-red-600",
199
255
  outline: "bg-transparent text-red-600 border border-red-500 hover:bg-red-50",
200
256
  ghost: "bg-red-100 text-red-700 border border-transparent hover:bg-red-200",
201
257
  text: "bg-transparent text-red-600 border border-transparent hover:text-red-700",
202
- bw: blackAndWhiteChipVariantClass
258
+ filled: "bg-red-100 text-red-700 border border-red-200 hover:bg-red-200",
259
+ underlined: "bg-transparent text-red-600 border-0 border-b-2 border-red-500 px-0 rounded-none hover:text-red-700",
260
+ rounded: "bg-white text-red-600 border border-red-200 shadow-sm hover:bg-red-50"
203
261
  },
204
262
  surface: {
205
263
  solid: "bg-white text-gray-900 border border-gray-200 hover:bg-gray-50",
264
+ sharp: "rounded-none bg-white text-gray-900 border border-gray-200 hover:bg-gray-50",
206
265
  outline: "bg-transparent text-gray-900 border border-gray-300 hover:bg-gray-50",
207
266
  ghost: "bg-gray-100 text-gray-900 border border-transparent hover:bg-gray-200",
208
267
  text: "bg-transparent text-gray-900 border border-transparent hover:text-gray-600",
209
- bw: blackAndWhiteChipVariantClass
210
- }
268
+ filled: "bg-gray-50 text-gray-900 border border-gray-200 hover:bg-white",
269
+ underlined: "bg-transparent text-gray-900 border-0 border-b-2 border-gray-400 px-0 rounded-none hover:text-gray-600",
270
+ rounded: "bg-white text-gray-900 border border-gray-200 shadow-sm hover:bg-gray-50"
271
+ },
272
+ bw: blackAndWhitePaletteClasses2
211
273
  };
212
274
  var resolveVariantClass2 = (variant, palette) => {
213
275
  const variants = paletteVariantClasses2[palette] ?? paletteVariantClasses2.primary;
@@ -238,7 +300,7 @@ var resolveIconClassName2 = (icon) => {
238
300
  const normalized = iconName.startsWith("mdi-") ? iconName : `mdi-${iconName}`;
239
301
  return Array.from(/* @__PURE__ */ new Set([...baseClasses, normalized])).join(" ");
240
302
  };
241
- var Chip = React5.forwardRef(
303
+ var Chip = React4.forwardRef(
242
304
  ({
243
305
  variant = "solid",
244
306
  color = "primary",
@@ -270,7 +332,7 @@ var Chip = React5.forwardRef(
270
332
  const appendIconClassName = resolveIconClassName2(appendIcon);
271
333
  const closeIconClassName = resolveIconClassName2(closeIcon);
272
334
  const filterIconClassName = filter && selected ? resolveIconClassName2(filterIcon) : void 0;
273
- const handleClick = React5.useCallback(
335
+ const handleClick = React4.useCallback(
274
336
  (event) => {
275
337
  if (disabled) {
276
338
  event.preventDefault();
@@ -281,7 +343,7 @@ var Chip = React5.forwardRef(
281
343
  },
282
344
  [disabled, onClick]
283
345
  );
284
- const handleKeyDown = React5.useCallback(
346
+ const handleKeyDown = React4.useCallback(
285
347
  (event) => {
286
348
  onKeyDown?.(event);
287
349
  if (event.defaultPrevented || disabled || !interactive) {
@@ -294,7 +356,7 @@ var Chip = React5.forwardRef(
294
356
  },
295
357
  [disabled, interactive, onKeyDown]
296
358
  );
297
- const handleCloseClick = React5.useCallback(
359
+ const handleCloseClick = React4.useCallback(
298
360
  (event) => {
299
361
  event.stopPropagation();
300
362
  if (disabled) {
@@ -305,7 +367,7 @@ var Chip = React5.forwardRef(
305
367
  },
306
368
  [disabled, onClose]
307
369
  );
308
- const handleCloseKeyDown = React5.useCallback((event) => {
370
+ const handleCloseKeyDown = React4.useCallback((event) => {
309
371
  if (event.key === " " || event.key === "Enter") {
310
372
  event.stopPropagation();
311
373
  }
@@ -374,9 +436,10 @@ var accentClasses = {
374
436
  success: { text: "text-emerald-600", bg: "bg-emerald-50", indicator: "bg-emerald-500" },
375
437
  warning: { text: "text-amber-700", bg: "bg-amber-50", indicator: "bg-amber-500" },
376
438
  danger: { text: "text-red-600", bg: "bg-red-50", indicator: "bg-red-500" },
377
- surface: { text: "text-gray-900", bg: "bg-gray-100", indicator: "bg-gray-900" }
439
+ surface: { text: "text-gray-900", bg: "bg-gray-100", indicator: "bg-gray-900" },
440
+ bw: { text: "text-gray-900", bg: "bg-gray-100", indicator: "bg-gray-900" }
378
441
  };
379
- var ListItem = React5.forwardRef((props, ref) => {
442
+ var ListItem = React4.forwardRef((props, ref) => {
380
443
  const {
381
444
  component,
382
445
  href,
@@ -396,6 +459,7 @@ var ListItem = React5.forwardRef((props, ref) => {
396
459
  nav: navOverride,
397
460
  divided: dividedOverride,
398
461
  color: colorOverride,
462
+ sharp: sharpOverride,
399
463
  className,
400
464
  children,
401
465
  tabIndex,
@@ -407,8 +471,9 @@ var ListItem = React5.forwardRef((props, ref) => {
407
471
  const nav = navOverride ?? false;
408
472
  const divided = dividedOverride ?? false;
409
473
  const color = colorOverride ?? "primary";
474
+ const sharp = sharpOverride ?? false;
410
475
  const accent = accentClasses[color] ?? accentClasses.primary;
411
- const shapeClass = divided ? "rounded-none" : "rounded-lg";
476
+ const shapeClass = divided || sharp ? "rounded-none" : "rounded-lg";
412
477
  const Component = component ?? (href ? "a" : "div");
413
478
  const interactive = typeof rest.onClick === "function" || Component === "a" || Component === "button";
414
479
  const resolvedRole = role ?? "listitem";
@@ -474,10 +539,13 @@ var Item_default = ListItem;
474
539
  var listBaseClasses = "flex w-full min-w-0 flex-col text-gray-900 transition-colors duration-150";
475
540
  var listVariantClasses = {
476
541
  solid: "bg-white border border-gray-200 shadow-sm shadow-gray-900/5",
542
+ sharp: "bg-white border border-gray-200 shadow-sm shadow-gray-900/5 rounded-none",
477
543
  outline: "bg-transparent border border-gray-300",
478
544
  ghost: "bg-gray-50 border border-transparent",
479
545
  text: "bg-transparent border border-transparent",
480
- bw: "bg-white text-black border border-black shadow-none"
546
+ filled: "bg-gray-50 border border-gray-200 shadow-inner shadow-gray-900/5",
547
+ underlined: "bg-transparent border border-transparent border-b border-gray-200 rounded-none",
548
+ rounded: "bg-white border border-gray-200 shadow-lg shadow-gray-900/10"
481
549
  };
482
550
  var listRoundedClasses = {
483
551
  none: "rounded-none",
@@ -488,13 +556,13 @@ var listRoundedClasses = {
488
556
  pill: "rounded-full"
489
557
  };
490
558
  var isListItemElement = (element) => {
491
- if (!React5.isValidElement(element)) {
559
+ if (!React4.isValidElement(element)) {
492
560
  return false;
493
561
  }
494
562
  const elementType = element.type;
495
563
  return element.type === Item_default || elementType.displayName === Item_default.displayName;
496
564
  };
497
- var List = React5.forwardRef((props, ref) => {
565
+ var List = React4.forwardRef((props, ref) => {
498
566
  const {
499
567
  variant = "solid",
500
568
  density = "default",
@@ -508,34 +576,36 @@ var List = React5.forwardRef((props, ref) => {
508
576
  children,
509
577
  ...rest
510
578
  } = props;
579
+ const isSharpVariant = variant === "sharp";
511
580
  const variantClass = listVariantClasses[variant] ?? listVariantClasses.solid;
512
- const roundedClass = listRoundedClasses[rounded] ?? listRoundedClasses.lg;
581
+ const roundedClass = isSharpVariant ? "rounded-none" : listRoundedClasses[rounded] ?? listRoundedClasses.lg;
513
582
  const dividerClass = divided ? "divide-y divide-gray-100" : void 0;
514
583
  const gapClass = divided ? "p-0" : "gap-1 p-1";
515
584
  const navClass = nav ? "py-1" : void 0;
516
- const accentColor = variant === "bw" ? "surface" : color;
585
+ const accentColor = color;
517
586
  const enhanceChild = (child) => {
518
- if (!React5.isValidElement(child)) {
587
+ if (!React4.isValidElement(child)) {
519
588
  return child;
520
589
  }
521
590
  if (isListItemElement(child)) {
522
- return React5.cloneElement(child, {
591
+ return React4.cloneElement(child, {
523
592
  density: child.props.density ?? density,
524
593
  lines: child.props.lines ?? lines,
525
594
  nav: child.props.nav ?? nav,
526
595
  divided: child.props.divided ?? divided,
527
- color: child.props.color ?? accentColor
596
+ color: child.props.color ?? accentColor,
597
+ sharp: child.props.sharp ?? isSharpVariant
528
598
  });
529
599
  }
530
600
  if (child.props && typeof child.props === "object" && "children" in child.props) {
531
- const nestedChildren = React5.Children.map(child.props.children, enhanceChild);
601
+ const nestedChildren = React4.Children.map(child.props.children, enhanceChild);
532
602
  if (nestedChildren !== child.props.children) {
533
- return React5.cloneElement(child, void 0, nestedChildren);
603
+ return React4.cloneElement(child, void 0, nestedChildren);
534
604
  }
535
605
  }
536
606
  return child;
537
607
  };
538
- const resolvedChildren = React5.Children.map(children, enhanceChild);
608
+ const resolvedChildren = React4.Children.map(children, enhanceChild);
539
609
  return /* @__PURE__ */ jsx(
540
610
  "div",
541
611
  {
@@ -549,8 +619,6 @@ var List = React5.forwardRef((props, ref) => {
549
619
  });
550
620
  List.displayName = "List";
551
621
  var List_default = List;
552
- var isBrowser = typeof window !== "undefined";
553
- var useIsomorphicLayoutEffect = isBrowser ? React5.useLayoutEffect : React5.useEffect;
554
622
  var placementClasses = {
555
623
  "bottom-start": "left-0 top-full origin-top-left",
556
624
  bottom: "left-1/2 top-full -translate-x-1/2 origin-top",
@@ -563,350 +631,75 @@ var offsetClasses = {
563
631
  top: "mb-2",
564
632
  bottom: "mt-2"
565
633
  };
566
- var menuBaseClasses = "absolute z-50 min-w-[10rem] rounded-xl border border-gray-200/80 bg-white/95 p-2 text-sm text-gray-700 shadow-lg shadow-gray-900/10 ring-1 ring-black/5 backdrop-blur-md transition-all duration-150 data-[state=closed]:pointer-events-none data-[state=closed]:opacity-0 data-[state=closed]:scale-95 data-[state=open]:opacity-100 data-[state=open]:scale-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40 focus-visible:ring-offset-2";
634
+ var menuBaseClasses = "absolute z-50 min-w-[10rem] rounded-xl border border-gray-200/80 bg-white/95 p-2 text-sm text-gray-700 shadow-lg shadow-gray-900/10 ring-1 ring-black/5 backdrop-blur-md transition-all duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40 focus-visible:ring-offset-2";
567
635
  var overlayBaseClasses = "fixed inset-0 z-40 bg-gray-900/30 backdrop-blur-[1px]";
568
- var Menu = React5.forwardRef((props, ref) => {
636
+ var Menu = React4.forwardRef((props, ref) => {
569
637
  const {
570
638
  activator,
571
639
  children,
572
- open: openProp,
573
- defaultOpen = false,
574
- onOpenChange,
575
640
  placement = "bottom-start",
576
- openOnHover = false,
577
- closeOnContentClick = true,
641
+ open,
642
+ openOnHover = true,
643
+ openOnFocus = true,
578
644
  matchActivatorWidth = false,
579
645
  keepMounted = false,
580
- disabled = false,
581
646
  scrim = false,
582
647
  contentClassName,
583
648
  contentProps,
584
649
  overlayClassName,
585
650
  className,
586
- onMouseEnter: rootMouseEnter,
587
- onMouseLeave: rootMouseLeave,
588
651
  ...rest
589
652
  } = props;
590
- const baseId = React5.useId();
591
- const menuId = `${baseId}-menu`;
592
- const activatorId = `${baseId}-activator`;
593
- const isControlled = typeof openProp === "boolean";
594
- const [internalOpen, setInternalOpen] = React5.useState(defaultOpen);
595
- const open = isControlled ? Boolean(openProp) : internalOpen;
596
- const localRootRef = React5.useRef(null);
597
- const menuRef = React5.useRef(null);
598
- const activatorRef = React5.useRef(null);
599
- const closeTimeoutRef = React5.useRef(null);
600
- const mergedRootRef = React5.useCallback(
601
- (node) => {
602
- localRootRef.current = node;
603
- if (typeof ref === "function") {
604
- ref(node);
605
- } else if (ref) {
606
- ref.current = node;
607
- }
608
- },
609
- [ref]
610
- );
611
- const [activatorWidth, setActivatorWidth] = React5.useState();
612
- const updateActivatorWidth = React5.useCallback(() => {
613
- if (!matchActivatorWidth) {
614
- setActivatorWidth(void 0);
615
- return;
616
- }
617
- const node = activatorRef.current;
618
- if (!node) {
619
- return;
620
- }
621
- setActivatorWidth(node.getBoundingClientRect().width);
622
- }, [matchActivatorWidth]);
623
- useIsomorphicLayoutEffect(() => {
624
- if (!matchActivatorWidth) {
625
- return;
626
- }
627
- updateActivatorWidth();
628
- if (!activatorRef.current || typeof ResizeObserver === "undefined") {
629
- return;
630
- }
631
- const observer = new ResizeObserver(() => updateActivatorWidth());
632
- observer.observe(activatorRef.current);
633
- return () => observer.disconnect();
634
- }, [matchActivatorWidth, updateActivatorWidth]);
635
- const setOpen = React5.useCallback(
636
- (nextOpen) => {
637
- if (disabled || open === nextOpen) {
638
- return;
639
- }
640
- if (!isControlled) {
641
- setInternalOpen(nextOpen);
642
- }
643
- onOpenChange?.(nextOpen);
644
- },
645
- [disabled, isControlled, onOpenChange, open]
646
- );
647
- React5.useEffect(() => {
648
- if (!disabled || !open) {
649
- return;
650
- }
651
- if (!isControlled) {
652
- setInternalOpen(false);
653
- }
654
- onOpenChange?.(false);
655
- }, [disabled, open, isControlled, onOpenChange]);
656
- React5.useEffect(() => {
657
- if (!open) {
658
- return;
659
- }
660
- const handlePointerDown = (event) => {
661
- const target = event.target;
662
- if (!target) {
663
- return;
664
- }
665
- if (localRootRef.current?.contains(target)) {
666
- return;
667
- }
668
- setOpen(false);
669
- };
670
- const handleKeyDown = (event) => {
671
- if (event.key === "Escape") {
672
- event.stopPropagation();
673
- setOpen(false);
674
- activatorRef.current?.focus();
675
- }
676
- };
677
- document.addEventListener("pointerdown", handlePointerDown);
678
- document.addEventListener("keydown", handleKeyDown);
679
- return () => {
680
- document.removeEventListener("pointerdown", handlePointerDown);
681
- document.removeEventListener("keydown", handleKeyDown);
682
- };
683
- }, [open, setOpen]);
684
- React5.useEffect(() => {
685
- if (!open) {
686
- return;
687
- }
688
- const node = menuRef.current;
689
- if (!node) {
690
- return;
691
- }
692
- const id = window.requestAnimationFrame(() => {
693
- node.focus({ preventScroll: true });
694
- });
695
- return () => window.cancelAnimationFrame(id);
696
- }, [open]);
697
- const setActivatorNode = React5.useCallback(
698
- (node) => {
699
- activatorRef.current = node;
700
- if (node && matchActivatorWidth) {
701
- setActivatorWidth(node.getBoundingClientRect().width);
702
- }
703
- },
704
- [matchActivatorWidth]
705
- );
706
- const handleActivatorClick = React5.useCallback(
707
- (event) => {
708
- event.preventDefault();
709
- if (disabled) {
710
- return;
711
- }
712
- setOpen(!open);
713
- },
714
- [disabled, open, setOpen]
715
- );
716
- const handleActivatorKeyDown = React5.useCallback(
717
- (event) => {
718
- if (event.key === "Enter" || event.key === " ") {
719
- event.preventDefault();
720
- setOpen(!open);
721
- }
722
- if (event.key === "ArrowDown") {
723
- event.preventDefault();
724
- setOpen(true);
725
- }
726
- },
727
- [open, setOpen]
728
- );
729
- const clearCloseTimeout = React5.useCallback(() => {
730
- if (closeTimeoutRef.current !== null) {
731
- if (isBrowser) {
732
- window.clearTimeout(closeTimeoutRef.current);
733
- }
734
- closeTimeoutRef.current = null;
735
- }
736
- }, []);
737
- const scheduleClose = React5.useCallback(() => {
738
- if (!isBrowser) {
739
- setOpen(false);
740
- return;
653
+ const hasContent = children !== void 0 && children !== null;
654
+ const manual = typeof open === "boolean";
655
+ const visible = Boolean(open);
656
+ const shouldRenderContent = hasContent && (keepMounted || visible || !manual && (openOnHover || openOnFocus));
657
+ const verticalPlacement = placement.startsWith("top") ? "top" : "bottom";
658
+ const visibilityClasses = (() => {
659
+ if (manual) {
660
+ return visible ? "pointer-events-auto opacity-100 scale-100" : "pointer-events-none opacity-0 scale-95";
741
661
  }
742
- clearCloseTimeout();
743
- closeTimeoutRef.current = window.setTimeout(() => {
744
- setOpen(false);
745
- closeTimeoutRef.current = null;
746
- }, 150);
747
- }, [clearCloseTimeout, setOpen]);
748
- React5.useEffect(() => {
749
- return () => clearCloseTimeout();
750
- }, [clearCloseTimeout]);
751
- const isMovingWithinMenu = React5.useCallback(
752
- (event) => {
753
- const nextTarget = event.relatedTarget;
754
- if (!nextTarget || !localRootRef.current) {
755
- return false;
756
- }
757
- return localRootRef.current.contains(nextTarget);
758
- },
759
- [localRootRef]
760
- );
761
- const handleRootMouseEnter = React5.useCallback(
762
- (event) => {
763
- rootMouseEnter?.(event);
764
- if (event.defaultPrevented) {
765
- return;
766
- }
767
- if (openOnHover) {
768
- clearCloseTimeout();
769
- setOpen(true);
770
- }
771
- },
772
- [clearCloseTimeout, openOnHover, rootMouseEnter, setOpen]
773
- );
774
- const handleRootMouseLeave = React5.useCallback(
775
- (event) => {
776
- rootMouseLeave?.(event);
777
- if (event.defaultPrevented) {
778
- return;
779
- }
780
- if (openOnHover) {
781
- if (isMovingWithinMenu(event)) {
782
- return;
783
- }
784
- scheduleClose();
785
- }
786
- },
787
- [isMovingWithinMenu, openOnHover, rootMouseLeave, scheduleClose]
788
- );
789
- const handleActivatorMouseEnter = React5.useCallback(
790
- (_event) => {
791
- if (disabled) {
792
- return;
793
- }
794
- clearCloseTimeout();
795
- setOpen(true);
796
- },
797
- [clearCloseTimeout, disabled, setOpen]
798
- );
799
- const handleActivatorMouseLeave = React5.useCallback(
800
- (event) => {
801
- if (disabled || !openOnHover) {
802
- return;
803
- }
804
- if (isMovingWithinMenu(event)) {
805
- return;
806
- }
807
- scheduleClose();
808
- },
809
- [disabled, isMovingWithinMenu, openOnHover, scheduleClose]
810
- );
662
+ const base2 = "pointer-events-none opacity-0 scale-95";
663
+ const hover = openOnHover ? " group-hover/menu:pointer-events-auto group-hover/menu:opacity-100 group-hover/menu:scale-100" : "";
664
+ const focus = openOnFocus ? " group-focus-within/menu:pointer-events-auto group-focus-within/menu:opacity-100 group-focus-within/menu:scale-100" : "";
665
+ return `${base2}${hover}${focus}`;
666
+ })();
811
667
  const {
812
- className: contentClass,
668
+ className: contentExtraClassName,
813
669
  style: contentStyle,
814
- onClick: contentOnClick,
815
- onMouseEnter: contentOnMouseEnter,
816
- onMouseLeave: contentOnMouseLeave,
817
670
  role: contentRole,
818
671
  tabIndex: contentTabIndex,
819
- ["aria-labelledby"]: ariaLabelledBy,
820
672
  ...restContentProps
821
673
  } = contentProps ?? {};
822
- const shouldRenderContent = open || keepMounted;
823
- const verticalPlacement = placement.startsWith("top") ? "top" : "bottom";
824
- const activatorElement = activator({
825
- ref: setActivatorNode,
826
- id: activatorId,
827
- "aria-haspopup": "menu",
828
- "aria-expanded": open,
829
- "aria-controls": menuId,
830
- onClick: handleActivatorClick,
831
- onKeyDown: handleActivatorKeyDown,
832
- onMouseEnter: openOnHover ? handleActivatorMouseEnter : void 0,
833
- onMouseLeave: openOnHover ? handleActivatorMouseLeave : void 0,
834
- disabled,
835
- open
836
- });
674
+ const overlayNode = scrim && visible ? /* @__PURE__ */ jsx("div", { className: twMerge(overlayBaseClasses, overlayClassName), "aria-hidden": true }) : null;
837
675
  return /* @__PURE__ */ jsxs(Fragment, { children: [
838
- scrim && open ? /* @__PURE__ */ jsx(
839
- "div",
840
- {
841
- className: twMerge(overlayBaseClasses, overlayClassName),
842
- "aria-hidden": true,
843
- onClick: () => setOpen(false),
844
- onMouseDown: (event) => event.preventDefault()
845
- }
846
- ) : null,
676
+ overlayNode,
847
677
  /* @__PURE__ */ jsxs(
848
678
  "div",
849
679
  {
850
680
  ...rest,
851
- ref: mergedRootRef,
852
- className: twMerge("relative inline-flex min-w-0", className),
853
- "data-open": open || void 0,
854
- onMouseEnter: openOnHover ? handleRootMouseEnter : rootMouseEnter,
855
- onMouseLeave: openOnHover ? handleRootMouseLeave : rootMouseLeave,
681
+ ref,
682
+ className: twMerge("relative inline-flex min-w-0 group/menu", className),
683
+ "data-open": visible || void 0,
856
684
  children: [
857
- activatorElement,
685
+ /* @__PURE__ */ jsx("div", { className: "inline-flex w-full min-w-0", children: activator }),
858
686
  shouldRenderContent ? /* @__PURE__ */ jsx(
859
687
  "div",
860
688
  {
861
689
  ...restContentProps,
862
- ref: menuRef,
863
- id: menuId,
864
- role: contentRole ?? "menu",
865
- tabIndex: contentTabIndex ?? -1,
866
- "aria-labelledby": ariaLabelledBy ?? activatorId,
867
- "data-state": open ? "open" : "closed",
868
690
  className: twMerge(
869
691
  menuBaseClasses,
870
692
  placementClasses[placement],
871
693
  offsetClasses[verticalPlacement],
694
+ matchActivatorWidth ? "min-w-full" : void 0,
695
+ visibilityClasses,
872
696
  contentClassName,
873
- contentClass
697
+ contentExtraClassName
874
698
  ),
875
- style: {
876
- ...contentStyle,
877
- ...matchActivatorWidth && activatorWidth ? { minWidth: activatorWidth, width: activatorWidth } : void 0
878
- },
879
- onMouseEnter: (event) => {
880
- contentOnMouseEnter?.(event);
881
- if (event.defaultPrevented) {
882
- return;
883
- }
884
- if (openOnHover) {
885
- clearCloseTimeout();
886
- setOpen(true);
887
- }
888
- },
889
- onMouseLeave: (event) => {
890
- contentOnMouseLeave?.(event);
891
- if (event.defaultPrevented) {
892
- return;
893
- }
894
- if (openOnHover) {
895
- if (isMovingWithinMenu(event)) {
896
- return;
897
- }
898
- scheduleClose();
899
- }
900
- },
901
- onClick: (event) => {
902
- contentOnClick?.(event);
903
- if (event.defaultPrevented) {
904
- return;
905
- }
906
- if (closeOnContentClick) {
907
- setOpen(false);
908
- }
909
- },
699
+ "data-state": visible ? "open" : "closed",
700
+ role: contentRole ?? "menu",
701
+ tabIndex: contentTabIndex ?? -1,
702
+ style: contentStyle,
910
703
  children
911
704
  }
912
705
  ) : null
@@ -917,6 +710,462 @@ var Menu = React5.forwardRef((props, ref) => {
917
710
  });
918
711
  Menu.displayName = "Menu";
919
712
  var Menu_default = Menu;
713
+ var ExpansionPanelContext = React4.createContext(null);
714
+ var densityClasses2 = {
715
+ comfortable: "py-5",
716
+ default: "py-4",
717
+ compact: "py-3"
718
+ };
719
+ var roundedClasses = {
720
+ none: "rounded-none",
721
+ sm: "rounded-sm",
722
+ md: "rounded-md",
723
+ lg: "rounded-lg",
724
+ xl: "rounded-xl"
725
+ };
726
+ var itemVariantClasses = {
727
+ elevated: "bg-white border border-gray-200 shadow-sm shadow-gray-900/5",
728
+ outlined: "bg-white border border-gray-200",
729
+ tonal: "bg-gray-50 border border-gray-100",
730
+ plain: "bg-transparent border border-transparent"
731
+ };
732
+ var accentClasses2 = {
733
+ primary: { text: "text-primary", bg: "bg-primary/5", border: "border-primary/30" },
734
+ neutral: { text: "text-gray-900", bg: "bg-gray-100", border: "border-gray-200" },
735
+ info: { text: "text-sky-600", bg: "bg-sky-50", border: "border-sky-200" },
736
+ success: { text: "text-emerald-600", bg: "bg-emerald-50", border: "border-emerald-200" },
737
+ warning: { text: "text-amber-600", bg: "bg-amber-50", border: "border-amber-200" },
738
+ danger: { text: "text-red-600", bg: "bg-red-50", border: "border-red-200" },
739
+ surface: { text: "text-gray-900", bg: "bg-gray-100", border: "border-gray-200" },
740
+ bw: { text: "text-gray-900", bg: "bg-gray-100", border: "border-gray-200" }
741
+ };
742
+ var ExpansionPanelItem = React4.forwardRef((props, ref) => {
743
+ const {
744
+ value,
745
+ title,
746
+ subtitle,
747
+ text,
748
+ prepend,
749
+ append,
750
+ expandIcon,
751
+ collapseIcon,
752
+ hideToggleIcon = false,
753
+ headerClassName,
754
+ contentClassName,
755
+ className,
756
+ disabled = false,
757
+ children,
758
+ color: colorOverride,
759
+ ...rest
760
+ } = props;
761
+ const context = React4.useContext(ExpansionPanelContext);
762
+ const generatedValue = React4.useId();
763
+ const panelValue = value ?? generatedValue;
764
+ const density = context?.density ?? "default";
765
+ const color = colorOverride ?? context?.color ?? "primary";
766
+ const divider = context?.divider ?? true;
767
+ const variant = context?.variant ?? "elevated";
768
+ const rounded = context?.rounded ?? "lg";
769
+ const accent = accentClasses2[color] ?? accentClasses2.primary;
770
+ const headerId = React4.useId();
771
+ const contentId = React4.useId();
772
+ const [standaloneExpanded, setStandaloneExpanded] = React4.useState(false);
773
+ const isExpanded = context ? context.expandedValues.includes(panelValue) : standaloneExpanded;
774
+ const handleToggle = () => {
775
+ if (disabled) {
776
+ return;
777
+ }
778
+ if (context) {
779
+ context.toggle(panelValue, disabled);
780
+ } else {
781
+ setStandaloneExpanded((prev) => !prev);
782
+ }
783
+ };
784
+ const rootSurface = divider ? "bg-transparent border-0 shadow-none" : itemVariantClasses[variant];
785
+ const shapeClass = divider ? void 0 : roundedClasses[rounded] ?? roundedClasses.lg;
786
+ const densityPadding = densityClasses2[density] ?? densityClasses2.default;
787
+ const disabledClass = disabled ? "cursor-not-allowed opacity-60" : "cursor-pointer";
788
+ const titleClass = isExpanded ? accent.text : void 0;
789
+ const activeBorderClass = twMerge("border-l-2 border-transparent", isExpanded ? accent.border : void 0);
790
+ const defaultToggleIcon = /* @__PURE__ */ jsx("i", { className: "mdi mdi-chevron-down text-lg leading-none transition-transform duration-200", "aria-hidden": true });
791
+ const hasContent = Boolean(children ?? text);
792
+ const contentAnimationClass = isExpanded ? "pb-5 opacity-100" : "pb-0 opacity-0";
793
+ const toggleIconNode = hideToggleIcon ? null : isExpanded && collapseIcon ? collapseIcon : expandIcon ?? defaultToggleIcon;
794
+ const shouldRotateDefaultIcon = !expandIcon && !collapseIcon && !hideToggleIcon;
795
+ const toggleWrapperClass = twMerge(
796
+ "ml-3 flex h-6 w-6 items-center justify-center text-gray-500 transition-transform duration-200",
797
+ shouldRotateDefaultIcon && isExpanded ? "rotate-180" : void 0
798
+ );
799
+ return /* @__PURE__ */ jsxs(
800
+ "div",
801
+ {
802
+ ...rest,
803
+ ref,
804
+ className: twMerge(
805
+ "expansion-panel-item flex flex-col overflow-hidden transition-colors duration-200",
806
+ rootSurface,
807
+ shapeClass,
808
+ className
809
+ ),
810
+ "data-state": isExpanded ? "open" : "closed",
811
+ "data-disabled": disabled || void 0,
812
+ children: [
813
+ /* @__PURE__ */ jsxs(
814
+ "button",
815
+ {
816
+ type: "button",
817
+ id: headerId,
818
+ onClick: handleToggle,
819
+ disabled,
820
+ "aria-expanded": isExpanded,
821
+ "aria-controls": hasContent ? contentId : void 0,
822
+ className: twMerge(
823
+ "flex w-full items-center gap-4 px-4 text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/40",
824
+ densityPadding,
825
+ disabledClass,
826
+ isExpanded ? accent.bg : void 0,
827
+ headerClassName
828
+ ),
829
+ "data-state": isExpanded ? "open" : "closed",
830
+ children: [
831
+ prepend && /* @__PURE__ */ jsx("span", { className: "flex h-10 w-10 items-center justify-center text-gray-500", children: prepend }),
832
+ /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-1 flex-col gap-0.5 text-left", children: [
833
+ title && /* @__PURE__ */ jsx("span", { className: twMerge("truncate font-medium text-gray-900", titleClass), children: title }),
834
+ subtitle && /* @__PURE__ */ jsx("span", { className: "text-sm text-gray-500", children: subtitle })
835
+ ] }),
836
+ append && /* @__PURE__ */ jsx("span", { className: "ml-auto flex items-center gap-2 text-sm text-gray-500", children: append }),
837
+ !hideToggleIcon && /* @__PURE__ */ jsx("span", { className: toggleWrapperClass, children: toggleIconNode })
838
+ ]
839
+ }
840
+ ),
841
+ hasContent && /* @__PURE__ */ jsx(
842
+ "div",
843
+ {
844
+ className: "grid overflow-hidden border-t border-gray-100 transition-all duration-200 ease-in-out",
845
+ style: { gridTemplateRows: isExpanded ? "1fr" : "0fr" },
846
+ "aria-hidden": isExpanded ? void 0 : true,
847
+ "data-state": isExpanded ? "open" : "closed",
848
+ children: /* @__PURE__ */ jsx(
849
+ "div",
850
+ {
851
+ id: contentId,
852
+ role: "region",
853
+ "aria-labelledby": headerId,
854
+ "data-state": isExpanded ? "open" : "closed",
855
+ className: twMerge(
856
+ "min-h-0 px-4 pt-0 text-sm text-gray-600 transition-all duration-200",
857
+ activeBorderClass,
858
+ contentAnimationClass,
859
+ isExpanded ? "pointer-events-auto" : "pointer-events-none",
860
+ contentClassName
861
+ ),
862
+ children: children ?? text
863
+ }
864
+ )
865
+ }
866
+ )
867
+ ]
868
+ }
869
+ );
870
+ });
871
+ ExpansionPanelItem.displayName = "ExpansionPanelItem";
872
+ var ExpansionPanelItem_default = ExpansionPanelItem;
873
+ var variantContainerClasses = {
874
+ elevated: "bg-white border border-gray-200 shadow-lg shadow-gray-900/10",
875
+ outlined: "bg-white border border-gray-200",
876
+ tonal: "bg-gray-50 border border-gray-100",
877
+ plain: "bg-transparent border border-transparent"
878
+ };
879
+ var roundedClasses2 = {
880
+ none: "rounded-none",
881
+ sm: "rounded-sm",
882
+ md: "rounded-md",
883
+ lg: "rounded-lg",
884
+ xl: "rounded-xl"
885
+ };
886
+ var uniqueValues = (values) => Array.from(new Set(values));
887
+ var normalizeValues = (value, allowMultiple) => {
888
+ if (value === void 0 || value === null) {
889
+ return [];
890
+ }
891
+ const normalized = Array.isArray(value) ? value : [value];
892
+ if (allowMultiple) {
893
+ return uniqueValues(normalized);
894
+ }
895
+ return normalized.length ? [normalized[0]] : [];
896
+ };
897
+ var clampValues = (values, allowMultiple) => allowMultiple ? uniqueValues(values) : values.length ? [values[0]] : [];
898
+ var ExpansionPanel = React4.forwardRef((props, ref) => {
899
+ const {
900
+ variant = "elevated",
901
+ rounded = "lg",
902
+ density = "default",
903
+ color = "primary",
904
+ divider = true,
905
+ multiple = false,
906
+ value,
907
+ defaultValue,
908
+ onChange,
909
+ className,
910
+ children,
911
+ ...rest
912
+ } = props;
913
+ const isControlled = value !== void 0;
914
+ const controlledValues = React4.useMemo(() => {
915
+ if (!isControlled) {
916
+ return void 0;
917
+ }
918
+ return normalizeValues(value, multiple);
919
+ }, [isControlled, value, multiple]);
920
+ const [internalValues, setInternalValues] = React4.useState(
921
+ () => normalizeValues(defaultValue, multiple)
922
+ );
923
+ const expandedValues = controlledValues ?? internalValues;
924
+ React4.useEffect(() => {
925
+ if (!isControlled) {
926
+ setInternalValues((prev) => clampValues(prev, multiple));
927
+ }
928
+ }, [multiple, isControlled]);
929
+ const handleValueChange = React4.useCallback(
930
+ (next) => {
931
+ if (!isControlled) {
932
+ setInternalValues(next);
933
+ }
934
+ if (onChange) {
935
+ if (multiple) {
936
+ onChange(next);
937
+ } else {
938
+ onChange(next[0] ?? null);
939
+ }
940
+ }
941
+ },
942
+ [isControlled, multiple, onChange]
943
+ );
944
+ const toggle = React4.useCallback(
945
+ (panelValue, disabled) => {
946
+ if (disabled) {
947
+ return;
948
+ }
949
+ const isActive = expandedValues.includes(panelValue);
950
+ const next = multiple ? isActive ? expandedValues.filter((v) => v !== panelValue) : [...expandedValues, panelValue] : isActive ? [] : [panelValue];
951
+ handleValueChange(next);
952
+ },
953
+ [expandedValues, handleValueChange, multiple]
954
+ );
955
+ const providerValue = React4.useMemo(
956
+ () => ({ expandedValues, toggle, density, color, divider, rounded, variant }),
957
+ [expandedValues, toggle, density, color, divider, rounded, variant]
958
+ );
959
+ const variantClass = divider ? variantContainerClasses[variant] : "bg-transparent border border-transparent shadow-none";
960
+ const shapeClass = roundedClasses2[rounded] ?? roundedClasses2.lg;
961
+ const layoutClass = divider ? "divide-y divide-gray-100 overflow-hidden" : "gap-4";
962
+ return /* @__PURE__ */ jsx(ExpansionPanelContext.Provider, { value: providerValue, children: /* @__PURE__ */ jsx(
963
+ "div",
964
+ {
965
+ ...rest,
966
+ ref,
967
+ className: twMerge("expansion-panel flex w-full flex-col text-gray-900", variantClass, shapeClass, layoutClass, className),
968
+ children
969
+ }
970
+ ) });
971
+ });
972
+ ExpansionPanel.displayName = "ExpansionPanel";
973
+ var ExpansionPanel_default = ExpansionPanel;
974
+ var containerBaseClasses = "fixed inset-0 z-[70] flex items-center justify-center p-4 sm:p-8 data-[state=closed]:pointer-events-none";
975
+ 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";
976
+ 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";
977
+ 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";
978
+ var resolveSizeValue = (value) => {
979
+ if (value === void 0) {
980
+ return void 0;
981
+ }
982
+ return typeof value === "number" ? `${value}px` : value;
983
+ };
984
+ var Dialog = React4.forwardRef((props, forwardedRef) => {
985
+ const {
986
+ activator,
987
+ children,
988
+ open = false,
989
+ keepMounted = false,
990
+ scrim = true,
991
+ fullscreen = false,
992
+ maxWidth = "32rem",
993
+ width,
994
+ containerClassName,
995
+ overlayClassName,
996
+ overlayProps,
997
+ className,
998
+ style,
999
+ role: roleProp = "dialog",
1000
+ tabIndex = -1,
1001
+ id,
1002
+ ["aria-modal"]: ariaModalProp,
1003
+ ...rest
1004
+ } = props;
1005
+ const state = open ? "open" : "closed";
1006
+ const shouldRenderDialog = keepMounted || open;
1007
+ const resolvedStyle = { ...style };
1008
+ if (fullscreen) {
1009
+ if (resolvedStyle.maxWidth === void 0) {
1010
+ resolvedStyle.maxWidth = "none";
1011
+ }
1012
+ if (resolvedStyle.width === void 0) {
1013
+ resolvedStyle.width = "100%";
1014
+ }
1015
+ if (resolvedStyle.height === void 0) {
1016
+ resolvedStyle.height = "100%";
1017
+ }
1018
+ if (resolvedStyle.maxHeight === void 0) {
1019
+ resolvedStyle.maxHeight = "100%";
1020
+ }
1021
+ } else {
1022
+ if (resolvedStyle.maxWidth === void 0) {
1023
+ resolvedStyle.maxWidth = resolveSizeValue(maxWidth);
1024
+ }
1025
+ if (width !== void 0 && resolvedStyle.width === void 0) {
1026
+ resolvedStyle.width = resolveSizeValue(width);
1027
+ }
1028
+ }
1029
+ const ariaModal = ariaModalProp ?? (roleProp === "dialog" || roleProp === "alertdialog" ? true : void 0);
1030
+ const { className: overlayExtraClassName, ...restOverlayProps } = overlayProps ?? {};
1031
+ const overlayNode = shouldRenderDialog && scrim ? /* @__PURE__ */ jsx(
1032
+ "div",
1033
+ {
1034
+ ...restOverlayProps,
1035
+ className: twMerge(overlayBaseClasses2, overlayClassName, overlayExtraClassName),
1036
+ "data-state": state,
1037
+ "aria-hidden": true
1038
+ }
1039
+ ) : null;
1040
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
1041
+ activator ? /* @__PURE__ */ jsx("div", { className: "inline-flex", children: activator }) : null,
1042
+ shouldRenderDialog ? /* @__PURE__ */ jsxs("div", { className: twMerge(containerBaseClasses, containerClassName), "data-state": state, "aria-hidden": !open, children: [
1043
+ overlayNode,
1044
+ /* @__PURE__ */ jsx("div", { className: twMerge(panelWrapperClasses, fullscreen ? "h-full items-stretch" : "mx-auto"), "data-state": state, children: /* @__PURE__ */ jsx(
1045
+ "div",
1046
+ {
1047
+ ...rest,
1048
+ ref: forwardedRef,
1049
+ id,
1050
+ role: roleProp,
1051
+ tabIndex,
1052
+ "aria-modal": ariaModal,
1053
+ className: twMerge(panelBaseClasses, fullscreen ? "h-full w-full max-w-none rounded-none" : void 0, className),
1054
+ style: resolvedStyle,
1055
+ "data-state": state,
1056
+ children
1057
+ }
1058
+ ) })
1059
+ ] }) : null
1060
+ ] });
1061
+ });
1062
+ Dialog.displayName = "Dialog";
1063
+ var Dialog_default = Dialog;
1064
+ 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";
1065
+ var wrapperBaseClasses = "relative inline-flex max-w-full align-middle";
1066
+ var arrowBaseClasses = "pointer-events-none absolute h-2 w-2 rotate-45 border border-white/10 bg-gray-900 shadow-lg shadow-black/20";
1067
+ var resolveSizeValue2 = (value) => {
1068
+ if (value === void 0) {
1069
+ return void 0;
1070
+ }
1071
+ return typeof value === "number" ? `${value}px` : value;
1072
+ };
1073
+ var placementClasses2 = {
1074
+ top: "bottom-full left-1/2 -translate-x-1/2 -translate-y-2 origin-bottom",
1075
+ "top-start": "bottom-full left-0 -translate-y-2 origin-bottom-left",
1076
+ "top-end": "bottom-full right-0 -translate-y-2 origin-bottom-right",
1077
+ bottom: "top-full left-1/2 -translate-x-1/2 translate-y-2 origin-top",
1078
+ "bottom-start": "top-full left-0 translate-y-2 origin-top-left",
1079
+ "bottom-end": "top-full right-0 translate-y-2 origin-top-right",
1080
+ left: "right-full top-1/2 -translate-y-1/2 -translate-x-2 origin-right",
1081
+ "left-start": "right-full top-0 -translate-x-2 origin-top-right",
1082
+ "left-end": "right-full bottom-0 -translate-x-2 origin-bottom-right",
1083
+ right: "left-full top-1/2 -translate-y-1/2 translate-x-2 origin-left",
1084
+ "right-start": "left-full top-0 translate-x-2 origin-top-left",
1085
+ "right-end": "left-full bottom-0 translate-x-2 origin-bottom-left"
1086
+ };
1087
+ var arrowPlacementClasses = {
1088
+ top: "left-1/2 top-full -translate-x-1/2 -translate-y-1/2",
1089
+ "top-start": "left-4 top-full -translate-y-1/2",
1090
+ "top-end": "right-4 top-full -translate-y-1/2",
1091
+ bottom: "left-1/2 bottom-full -translate-x-1/2 translate-y-1/2",
1092
+ "bottom-start": "left-4 bottom-full translate-y-1/2",
1093
+ "bottom-end": "right-4 bottom-full translate-y-1/2",
1094
+ left: "right-full top-1/2 -translate-y-1/2 translate-x-1/2",
1095
+ "left-start": "right-full top-4 translate-x-1/2",
1096
+ "left-end": "right-full bottom-4 translate-x-1/2",
1097
+ right: "left-full top-1/2 -translate-y-1/2 -translate-x-1/2",
1098
+ "right-start": "left-full top-4 -translate-x-1/2",
1099
+ "right-end": "left-full bottom-4 -translate-x-1/2"
1100
+ };
1101
+ var ToolTip = React4.forwardRef((props, forwardedRef) => {
1102
+ const {
1103
+ activator,
1104
+ children,
1105
+ placement = "top",
1106
+ arrow = true,
1107
+ disabled = false,
1108
+ persistent = false,
1109
+ showOnHover = true,
1110
+ showOnFocus = true,
1111
+ interactive = false,
1112
+ keepMounted = false,
1113
+ maxWidth = "18rem",
1114
+ wrapperClassName,
1115
+ className,
1116
+ style,
1117
+ id,
1118
+ ...rest
1119
+ } = props;
1120
+ const hasRenderableContent = children !== void 0 && children !== null;
1121
+ const shouldEnableTriggers = !disabled && (persistent || showOnHover || showOnFocus);
1122
+ const shouldRenderTooltip = hasRenderableContent && (shouldEnableTriggers || keepMounted);
1123
+ const resolvedStyle = { ...style };
1124
+ if (resolvedStyle.maxWidth === void 0) {
1125
+ resolvedStyle.maxWidth = resolveSizeValue2(maxWidth);
1126
+ }
1127
+ const baseVisibility = persistent ? "opacity-100 scale-100" : "opacity-0 scale-95";
1128
+ const hoverClasses = !persistent && showOnHover ? " group-hover/tooltip:opacity-100 group-hover/tooltip:scale-100" : "";
1129
+ const focusClasses = !persistent && showOnFocus ? " group-focus-within/tooltip:opacity-100 group-focus-within/tooltip:scale-100" : "";
1130
+ const visibilityClasses = `${baseVisibility}${hoverClasses}${focusClasses}`;
1131
+ const pointerClasses = (() => {
1132
+ if (persistent) {
1133
+ return "pointer-events-auto";
1134
+ }
1135
+ if (!interactive) {
1136
+ return "pointer-events-none";
1137
+ }
1138
+ const classes = ["pointer-events-none"];
1139
+ if (showOnHover) {
1140
+ classes.push("group-hover/tooltip:pointer-events-auto");
1141
+ }
1142
+ if (showOnFocus) {
1143
+ classes.push("group-focus-within/tooltip:pointer-events-auto");
1144
+ }
1145
+ return classes.join(" ");
1146
+ })();
1147
+ return /* @__PURE__ */ jsxs("span", { className: twMerge(wrapperBaseClasses, "group/tooltip", wrapperClassName), "data-disabled": disabled || void 0, children: [
1148
+ /* @__PURE__ */ jsx("span", { className: "inline-flex max-w-full", children: activator }),
1149
+ shouldRenderTooltip ? /* @__PURE__ */ jsxs(
1150
+ "div",
1151
+ {
1152
+ ...rest,
1153
+ ref: forwardedRef,
1154
+ role: "tooltip",
1155
+ id,
1156
+ "aria-hidden": persistent || disabled ? void 0 : true,
1157
+ className: twMerge(tooltipBaseClasses, placementClasses2[placement], visibilityClasses, pointerClasses, className),
1158
+ style: resolvedStyle,
1159
+ children: [
1160
+ children,
1161
+ arrow && /* @__PURE__ */ jsx("span", { className: twMerge(arrowBaseClasses, arrowPlacementClasses[placement]), "aria-hidden": true, "data-arrow": true })
1162
+ ]
1163
+ }
1164
+ ) : null
1165
+ ] });
1166
+ });
1167
+ ToolTip.displayName = "ToolTip";
1168
+ var ToolTip_default = ToolTip;
920
1169
 
921
1170
  // src/Form/Input/states.input.ts
922
1171
  var resolveIconClassName3 = (icon) => {
@@ -944,6 +1193,17 @@ var resolveIconClassName3 = (icon) => {
944
1193
  const classes = [...baseClasses, normalizedName];
945
1194
  return Array.from(new Set(classes)).join(" ");
946
1195
  };
1196
+
1197
+ // src/utils/helpers/randomStr.ts
1198
+ var characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
1199
+ function generateString(length = 5) {
1200
+ let result = "";
1201
+ const charactersLength = characters.length;
1202
+ for (let i = 0; i < length; i++) {
1203
+ result += characters.charAt(Math.floor(Math.random() * charactersLength));
1204
+ }
1205
+ return result;
1206
+ }
947
1207
  var Input = ({
948
1208
  variant = "outline",
949
1209
  success,
@@ -956,9 +1216,14 @@ var Input = ({
956
1216
  }) => {
957
1217
  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";
958
1218
  const variantClasses = {
959
- outline: "rounded border border-gray-300 focus:border-primary focus:ring-1 focus:ring-primary",
960
- filled: "rounded bg-gray-100 border border-gray-300 focus:border-primary focus:ring-1 focus:ring-primary",
961
- underlined: "border-b-1 border-gray-300 focus:border-red-400 focus:outline-none focus:ring-none"
1219
+ solid: "rounded border border-gray-400 bg-white shadow-sm focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/30",
1220
+ sharp: "rounded-none border border-gray-400 bg-white shadow-sm focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/30",
1221
+ outline: "rounded border border-gray-300 bg-transparent focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/30",
1222
+ 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",
1223
+ 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",
1224
+ filled: "rounded border border-gray-200 bg-gray-100 focus-visible:border-primary focus-visible:ring-2 focus-visible:ring-primary/25",
1225
+ 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",
1226
+ 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"
962
1227
  };
963
1228
  const status = error ? { tone: "error", message: error } : warn ? { tone: "warn", message: warn } : success ? { tone: "success", message: success } : void 0;
964
1229
  const statusClasses = {
@@ -975,16 +1240,24 @@ var Input = ({
975
1240
  const toneClass = status ? statusClasses[status.tone] : void 0;
976
1241
  const prependIconClass = resolveIconClassName3(icon);
977
1242
  const prependPadding = prependIconClass ? "pl-10" : void 0;
1243
+ const inputName = props.name || generateString();
978
1244
  return /* @__PURE__ */ jsxs("div", { className: twMerge("flex flex-col gap-1", wrapperClassName), children: [
979
1245
  /* @__PURE__ */ jsxs("div", { className: "relative flex items-center", children: [
980
1246
  prependIconClass && /* @__PURE__ */ jsx("i", { className: twMerge("pointer-events-none absolute left-3 ", prependIconClass), "aria-hidden": true }),
981
- /* @__PURE__ */ jsx("input", { ...props, className: twMerge(classBase, variantClass, toneClass, prependPadding, className) })
1247
+ /* @__PURE__ */ jsx(
1248
+ "input",
1249
+ {
1250
+ ...props,
1251
+ className: twMerge(classBase, variantClass, toneClass, prependPadding, className),
1252
+ name: inputName
1253
+ }
1254
+ )
982
1255
  ] }),
983
1256
  status?.message && /* @__PURE__ */ jsx("span", { className: twMerge("text-sm", statusMessageClasses[status.tone]), children: status.message })
984
1257
  ] });
985
1258
  };
986
1259
  var Input_default = Input;
987
1260
 
988
- export { Button_default as Button, Chip_default as Chip, Input_default as Input, List_default as List, Item_default as ListItem, Menu_default as Menu };
1261
+ export { Button_default as Button, Chip_default as Chip, Dialog_default as Dialog, ExpansionPanel_default as ExpansionPanel, ExpansionPanelItem_default as ExpansionPanelItem, Input_default as Input, List_default as List, Item_default as ListItem, Menu_default as Menu, ToolTip_default as ToolTip };
989
1262
  //# sourceMappingURL=index.js.map
990
1263
  //# sourceMappingURL=index.js.map