@cytario/design 6.0.1 → 7.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -5,102 +5,298 @@ import { RouterProvider } from "react-aria-components";
5
5
 
6
6
  // src/components/Button/Button.tsx
7
7
  import {
8
- Button as AriaButton
8
+ Button as AriaButton,
9
+ Link as AriaLink
9
10
  } from "react-aria-components";
10
- import { twMerge } from "tailwind-merge";
11
+ import { twMerge as twMerge3 } from "tailwind-merge";
11
12
 
12
13
  // src/components/_shared/styles.ts
13
14
  var sizeStyles = {
14
- xs: "px-2 py-1 text-xs",
15
+ xs: "px-2 py-1.5 text-xs",
15
16
  sm: "px-3 py-1.5 text-sm",
16
17
  md: "px-4 py-2 text-base",
17
18
  lg: "px-6 py-3 text-lg"
18
19
  };
19
20
  var variantStyles = {
20
- primary: [
21
- "bg-primary text-primary-foreground",
22
- "hover:bg-primary-hover",
23
- "pressed:bg-primary-pressed"
24
- ].join(" "),
25
- secondary: [
26
- "bg-secondary text-secondary-foreground",
27
- "hover:bg-secondary-hover",
28
- "pressed:bg-secondary-pressed"
29
- ].join(" "),
30
- destructive: [
31
- "bg-destructive text-destructive-foreground",
32
- "hover:bg-destructive-hover",
33
- "pressed:bg-destructive-pressed"
34
- ].join(" "),
35
- success: [
36
- "bg-success text-success-foreground",
37
- "hover:bg-success-hover",
38
- "pressed:bg-success-pressed"
39
- ].join(" "),
40
- warning: [
41
- "bg-warning text-warning-foreground",
42
- "hover:bg-warning-hover",
43
- "pressed:bg-warning-pressed"
44
- ].join(" "),
45
- info: [
46
- "bg-info text-info-foreground",
47
- "hover:bg-info-hover",
48
- "pressed:bg-info-pressed"
49
- ].join(" "),
50
- neutral: [
51
- "bg-muted text-foreground",
52
- "hover:bg-accent",
53
- "pressed:bg-accent-pressed"
54
- ].join(" "),
55
- outline: [
56
- "bg-transparent text-foreground",
57
- "border border-border",
58
- "hover:bg-muted",
59
- "pressed:bg-accent-pressed"
60
- ].join(" "),
61
- ghost: [
62
- "bg-transparent text-foreground",
63
- "hover:bg-muted",
64
- "pressed:bg-accent-pressed"
65
- ].join(" ")
21
+ primary: `
22
+ bg-primary text-primary-foreground
23
+ hover:bg-primary-hover
24
+ pressed:bg-primary-pressed
25
+ `,
26
+ secondary: `
27
+ bg-secondary text-secondary-foreground
28
+ hover:bg-secondary-hover
29
+ pressed:bg-secondary-pressed
30
+ `,
31
+ destructive: `
32
+ bg-destructive text-destructive-foreground
33
+ hover:bg-destructive-hover
34
+ pressed:bg-destructive-pressed
35
+ `,
36
+ success: `
37
+ bg-success text-success-foreground
38
+ hover:bg-success-hover
39
+ pressed:bg-success-pressed
40
+ `,
41
+ warning: `
42
+ bg-warning text-warning-foreground
43
+ hover:bg-warning-hover
44
+ pressed:bg-warning-pressed
45
+ `,
46
+ info: `
47
+ bg-info text-info-foreground
48
+ hover:bg-info-hover
49
+ pressed:bg-info-pressed
50
+ `,
51
+ neutral: `
52
+ bg-muted text-foreground
53
+ hover:bg-accent
54
+ pressed:bg-accent-pressed
55
+ `,
56
+ outline: `
57
+ bg-transparent text-foreground
58
+ border border-border
59
+ hover:bg-muted
60
+ pressed:bg-accent-pressed
61
+ `,
62
+ ghost: `
63
+ bg-transparent text-foreground
64
+ hover:bg-muted
65
+ pressed:bg-accent-pressed
66
+ `
67
+ };
68
+ var selectedStyles = {
69
+ primary: "selected:bg-primary-pressed",
70
+ secondary: "selected:bg-secondary-pressed",
71
+ destructive: "selected:bg-destructive-pressed",
72
+ success: "selected:bg-success-pressed",
73
+ warning: "selected:bg-warning-pressed",
74
+ info: "selected:bg-info-pressed",
75
+ neutral: "selected:bg-accent-pressed",
76
+ outline: "selected:bg-accent-pressed",
77
+ ghost: "selected:bg-accent-pressed"
78
+ };
79
+
80
+ // src/components/Icon/Icon.tsx
81
+ import { twMerge } from "tailwind-merge";
82
+
83
+ // src/components/Icon/icon-registry.ts
84
+ import {
85
+ AlertCircle,
86
+ AlertTriangle,
87
+ AlignCenter,
88
+ AlignLeft,
89
+ AlignRight,
90
+ Archive,
91
+ ArrowDown,
92
+ ArrowRight,
93
+ ArrowUp,
94
+ Ban,
95
+ Bookmark,
96
+ BookmarkCheck,
97
+ Braces,
98
+ Check,
99
+ CheckCircle,
100
+ CheckCircle2,
101
+ ChevronDown,
102
+ ChevronRight,
103
+ ChevronUp,
104
+ Circle,
105
+ CircleDot,
106
+ Clock,
107
+ Cloud,
108
+ Columns2,
109
+ Columns3,
110
+ Copy,
111
+ Download,
112
+ Edit,
113
+ EllipsisVertical,
114
+ ExternalLink,
115
+ Eye,
116
+ EyeOff,
117
+ File,
118
+ FileSearch,
119
+ FileSpreadsheet,
120
+ FilterX,
121
+ Folder,
122
+ FolderPlus,
123
+ FolderTree,
124
+ Fullscreen,
125
+ Grid2x2,
126
+ Grid3x3,
127
+ Heart,
128
+ Image,
129
+ ImageOff,
130
+ Inbox,
131
+ Info,
132
+ Lasso,
133
+ Layers,
134
+ Layers2,
135
+ LayoutGrid,
136
+ List,
137
+ ListFilter,
138
+ LogOut,
139
+ Mail,
140
+ MapPin,
141
+ Maximize,
142
+ Microscope,
143
+ Minus,
144
+ MoreVertical,
145
+ PanelLeftClose,
146
+ PanelLeftOpen,
147
+ PanelRightClose,
148
+ PanelRightOpen,
149
+ Pencil,
150
+ Plug,
151
+ Plus,
152
+ RotateCcw,
153
+ Search,
154
+ SearchX,
155
+ Send,
156
+ Settings,
157
+ Shield,
158
+ ShieldCheck,
159
+ Spline,
160
+ Square,
161
+ Star,
162
+ Table,
163
+ Tag,
164
+ Trash2,
165
+ Unplug,
166
+ User,
167
+ UserMinus,
168
+ UserPlus,
169
+ Users,
170
+ UsersRound,
171
+ X,
172
+ XCircle,
173
+ ZoomIn,
174
+ ZoomOut
175
+ } from "lucide-react";
176
+ var iconRegistry = {
177
+ AlertCircle,
178
+ AlertTriangle,
179
+ AlignCenter,
180
+ AlignLeft,
181
+ AlignRight,
182
+ Archive,
183
+ ArrowDown,
184
+ ArrowRight,
185
+ ArrowUp,
186
+ Ban,
187
+ Bookmark,
188
+ BookmarkCheck,
189
+ Braces,
190
+ Check,
191
+ CheckCircle,
192
+ CheckCircle2,
193
+ ChevronDown,
194
+ ChevronRight,
195
+ ChevronUp,
196
+ Circle,
197
+ CircleDot,
198
+ Clock,
199
+ Cloud,
200
+ Columns2,
201
+ Columns3,
202
+ Copy,
203
+ Download,
204
+ Edit,
205
+ EllipsisVertical,
206
+ ExternalLink,
207
+ Eye,
208
+ EyeOff,
209
+ File,
210
+ FileSearch,
211
+ FileSpreadsheet,
212
+ FilterX,
213
+ Folder,
214
+ FolderPlus,
215
+ FolderTree,
216
+ Fullscreen,
217
+ Grid2x2,
218
+ Grid3x3,
219
+ Heart,
220
+ Image,
221
+ ImageOff,
222
+ Inbox,
223
+ Info,
224
+ Lasso,
225
+ Layers,
226
+ Layers2,
227
+ LayoutGrid,
228
+ List,
229
+ ListFilter,
230
+ LogOut,
231
+ Mail,
232
+ MapPin,
233
+ Maximize,
234
+ Microscope,
235
+ Minus,
236
+ MoreVertical,
237
+ PanelLeftClose,
238
+ PanelLeftOpen,
239
+ PanelRightClose,
240
+ PanelRightOpen,
241
+ Pencil,
242
+ Plug,
243
+ Plus,
244
+ RotateCcw,
245
+ Search,
246
+ SearchX,
247
+ Send,
248
+ Settings,
249
+ Shield,
250
+ ShieldCheck,
251
+ Spline,
252
+ Square,
253
+ Star,
254
+ Table,
255
+ Tag,
256
+ Trash2,
257
+ Unplug,
258
+ User,
259
+ UserMinus,
260
+ UserPlus,
261
+ Users,
262
+ UsersRound,
263
+ X,
264
+ XCircle,
265
+ ZoomIn,
266
+ ZoomOut
66
267
  };
67
268
 
68
269
  // src/components/Icon/Icon.tsx
69
270
  import { jsx } from "react/jsx-runtime";
70
271
  var sizeMap = {
272
+ xs: 14,
71
273
  sm: 16,
72
274
  md: 20,
73
275
  lg: 24,
74
276
  xl: 32
75
277
  };
76
278
  function Icon({
77
- icon: LucideComponent,
279
+ icon,
78
280
  size = "md",
79
- strokeWidth,
80
- "aria-label": ariaLabel,
281
+ strokeWidth = 2,
81
282
  className
82
283
  }) {
83
- const isDecorative = !ariaLabel;
284
+ const Component = typeof icon === "string" ? iconRegistry[icon] : icon;
84
285
  return /* @__PURE__ */ jsx(
85
- LucideComponent,
286
+ Component,
86
287
  {
87
288
  size: sizeMap[size],
88
289
  strokeWidth,
89
- role: isDecorative ? void 0 : "img",
90
- "aria-label": ariaLabel,
91
- "aria-hidden": isDecorative ? "true" : void 0,
92
- className
290
+ "aria-hidden": "true",
291
+ focusable: false,
292
+ className: twMerge("shrink-0", className)
93
293
  }
94
294
  );
95
295
  }
96
296
 
97
297
  // src/components/Spinner/Spinner.tsx
298
+ import { twMerge as twMerge2 } from "tailwind-merge";
98
299
  import { jsx as jsx2, jsxs } from "react/jsx-runtime";
99
- var sizeMap2 = {
100
- sm: "h-4 w-4",
101
- md: "h-5 w-5",
102
- lg: "h-6 w-6"
103
- };
104
300
  function Spinner({
105
301
  size = "md",
106
302
  "aria-label": ariaLabel,
@@ -113,9 +309,11 @@ function Spinner({
113
309
  role: isDecorative ? void 0 : "status",
114
310
  "aria-label": ariaLabel,
115
311
  "aria-hidden": isDecorative ? "true" : void 0,
116
- className: [sizeMap2[size], "animate-spin", className].filter(Boolean).join(" "),
312
+ className: twMerge2("animate-spin", className),
117
313
  viewBox: "0 0 24 24",
118
314
  fill: "none",
315
+ width: sizeMap[size],
316
+ height: sizeMap[size],
119
317
  children: [
120
318
  /* @__PURE__ */ jsx2(
121
319
  "circle",
@@ -141,37 +339,19 @@ function Spinner({
141
339
  );
142
340
  }
143
341
 
144
- // src/components/Form/InputGroup/InputGroupContext.ts
145
- import { createContext, useContext } from "react";
146
- var InputGroupContext = createContext({
147
- inGroup: false,
148
- position: "standalone"
149
- });
150
- function useInputGroup() {
151
- return useContext(InputGroupContext);
152
- }
153
-
154
342
  // src/components/Button/Button.tsx
155
343
  import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
156
- var iconSizeMap = {
157
- xs: "sm",
158
- sm: "sm",
159
- md: "sm",
160
- lg: "md"
161
- };
162
- function groupRadiusClass(position) {
163
- switch (position) {
164
- case "start":
165
- return "rounded-l-md rounded-r-none";
166
- case "middle":
167
- return "rounded-none";
168
- case "end":
169
- return "rounded-r-md rounded-l-none";
170
- default:
171
- return "rounded-md";
172
- }
173
- }
174
- function Button({
344
+ var buttonBaseClass = `
345
+ inline-flex items-center justify-center gap-2 shrink-0 cursor-pointer
346
+ rounded-full
347
+ font-medium
348
+ leading-tight
349
+ outline-none transition-colors no-underline
350
+ focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2
351
+ disabled:opacity-50 disabled:pointer-events-none
352
+ `;
353
+ function ButtonBase({
354
+ as: Component,
175
355
  variant = "primary",
176
356
  size = "md",
177
357
  isLoading = false,
@@ -182,38 +362,25 @@ function Button({
182
362
  children,
183
363
  ...props
184
364
  }) {
185
- const { inGroup, position } = useInputGroup();
186
- const groupGhost = inGroup && variant === "ghost" ? "bg-background text-muted-foreground border border-border hover:bg-accent hover:text-foreground hover:border-border pressed:bg-accent pressed:text-foreground" : "";
187
- const radiusClass = inGroup ? groupRadiusClass(position) : "rounded-md";
188
- const marginClass = inGroup && position !== "start" && position !== "standalone" ? "-ml-px" : "";
189
- const focusRing = inGroup ? "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-0 focus-visible:z-10" : "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2";
190
- return /* @__PURE__ */ jsxs2(
191
- AriaButton,
192
- {
193
- ...props,
194
- isDisabled: isDisabled || isLoading,
195
- className: twMerge(
196
- "inline-flex items-center justify-center gap-2 shrink-0 cursor-pointer",
197
- radiusClass,
198
- "font-medium",
199
- "leading-tight",
200
- "outline-none transition-colors",
201
- focusRing,
202
- "disabled:opacity-50 disabled:pointer-events-none",
203
- isLoading ? "pointer-events-none" : "",
204
- groupGhost || variantStyles[variant],
205
- sizeStyles[size],
206
- marginClass,
207
- className
208
- ),
209
- children: [
210
- isLoading && /* @__PURE__ */ jsx3(Spinner, { size: iconSizeMap[size] }),
211
- !isLoading && iconLeft && /* @__PURE__ */ jsx3(Icon, { icon: iconLeft, size: iconSizeMap[size] }),
212
- children,
213
- !isLoading && iconRight && /* @__PURE__ */ jsx3(Icon, { icon: iconRight, size: iconSizeMap[size] })
214
- ]
215
- }
365
+ const cx = twMerge3(
366
+ buttonBaseClass,
367
+ isLoading ? "pointer-events-none" : "",
368
+ variantStyles[variant],
369
+ sizeStyles[size],
370
+ className
216
371
  );
372
+ return /* @__PURE__ */ jsxs2(Component, { ...props, isDisabled: isDisabled || isLoading, className: cx, children: [
373
+ isLoading && /* @__PURE__ */ jsx3(Spinner, { size }),
374
+ !isLoading && iconLeft && /* @__PURE__ */ jsx3(Icon, { icon: iconLeft, size }),
375
+ children,
376
+ !isLoading && iconRight && /* @__PURE__ */ jsx3(Icon, { icon: iconRight, size })
377
+ ] });
378
+ }
379
+ function Button(props) {
380
+ return /* @__PURE__ */ jsx3(ButtonBase, { as: AriaButton, ...props });
381
+ }
382
+ function ButtonLink(props) {
383
+ return /* @__PURE__ */ jsx3(ButtonBase, { as: AriaLink, ...props });
217
384
  }
218
385
 
219
386
  // src/components/Tooltip/Tooltip.tsx
@@ -544,80 +711,63 @@ var TruncatedText = ({ children, ellipsis = "right", copyValue }) => {
544
711
 
545
712
  // src/components/IconButton/IconButton.tsx
546
713
  import {
547
- Button as AriaButton2
714
+ Button as AriaButton2,
715
+ Link as AriaLink2,
716
+ ToggleButton as AriaToggleButton
548
717
  } from "react-aria-components";
718
+ import { twMerge as twMerge4 } from "tailwind-merge";
549
719
  import { jsx as jsx6 } from "react/jsx-runtime";
550
720
  var squareSizeStyles = {
551
721
  xs: "h-7 w-7",
722
+ // 28px
552
723
  sm: "h-8 w-8",
724
+ // 32px
553
725
  md: "h-10 w-10",
726
+ // 40px
554
727
  lg: "h-12 w-12"
728
+ // 48px
555
729
  };
556
- var squareWidthOnly = {
557
- xs: "w-7",
558
- sm: "w-8",
559
- md: "w-10",
560
- lg: "w-12"
561
- };
562
- var iconSizeMap2 = {
563
- xs: "sm",
564
- sm: "sm",
565
- md: "sm",
566
- lg: "md"
567
- };
568
- function groupRadiusClass2(position) {
569
- switch (position) {
570
- case "start":
571
- return "rounded-l-md rounded-r-none";
572
- case "middle":
573
- return "rounded-none";
574
- case "end":
575
- return "rounded-r-md rounded-l-none";
576
- default:
577
- return "rounded-md";
578
- }
579
- }
580
- function IconButton({
730
+ function IconButtonBase({
731
+ as: Component,
581
732
  icon,
582
- "aria-label": ariaLabel,
733
+ label,
583
734
  variant = "ghost",
584
735
  size = "md",
585
- showTooltip = true,
586
736
  isLoading = false,
587
737
  isDisabled,
588
738
  className,
739
+ ref,
589
740
  ...props
590
741
  }) {
591
- const { inGroup, position } = useInputGroup();
592
- const groupGhost = inGroup && variant === "ghost" ? "bg-background text-muted-foreground border border-border hover:bg-accent hover:text-foreground hover:border-border pressed:bg-accent pressed:text-foreground" : "";
593
- const radiusClass = inGroup ? groupRadiusClass2(position) : "rounded-md";
594
- const marginClass = inGroup && position !== "start" && position !== "standalone" ? "-ml-px" : "";
595
- const focusRing = inGroup ? "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-0 focus-visible:z-10" : "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2";
596
- const button = /* @__PURE__ */ jsx6(
597
- AriaButton2,
742
+ const cx = twMerge4(
743
+ buttonBaseClass,
744
+ isLoading ? "pointer-events-none" : "",
745
+ variantStyles[variant],
746
+ // No-op unless the wrapper is a ToggleButton (react-aria sets data-selected).
747
+ selectedStyles[variant],
748
+ squareSizeStyles[size],
749
+ className
750
+ );
751
+ return /* @__PURE__ */ jsx6(Tooltip, { content: label, children: /* @__PURE__ */ jsx6(
752
+ Component,
598
753
  {
599
754
  ...props,
600
- "aria-label": ariaLabel,
755
+ ref,
756
+ "aria-label": label,
601
757
  isDisabled: isDisabled || isLoading,
602
- className: [
603
- "inline-flex items-center justify-center shrink-0 cursor-pointer",
604
- radiusClass,
605
- "outline-none transition-colors",
606
- focusRing,
607
- "disabled:opacity-50 disabled:pointer-events-none",
608
- isLoading ? "pointer-events-none" : "",
609
- groupGhost || variantStyles[variant],
610
- inGroup ? squareWidthOnly[size] : squareSizeStyles[size],
611
- marginClass,
612
- className
613
- ].filter(Boolean).join(" "),
614
- children: isLoading ? /* @__PURE__ */ jsx6(Spinner, { size: iconSizeMap2[size] }) : /* @__PURE__ */ jsx6(Icon, { icon, size: iconSizeMap2[size] })
758
+ className: cx,
759
+ children: isLoading ? /* @__PURE__ */ jsx6(Spinner, { size }) : /* @__PURE__ */ jsx6(Icon, { icon, size })
615
760
  }
616
- );
617
- if (showTooltip) {
618
- return /* @__PURE__ */ jsx6(Tooltip, { content: ariaLabel, children: button });
619
- }
620
- return button;
761
+ ) });
762
+ }
763
+ function IconButton(props) {
764
+ return /* @__PURE__ */ jsx6(IconButtonBase, { as: AriaButton2, ...props });
765
+ }
766
+ function IconButtonLink(props) {
767
+ return /* @__PURE__ */ jsx6(IconButtonBase, { as: AriaLink2, ...props });
768
+ }
769
+ function IconButtonToggle(props) {
770
+ return /* @__PURE__ */ jsx6(IconButtonBase, { as: AriaToggleButton, ...props });
621
771
  }
622
772
 
623
773
  // src/components/Form/Input/Input.tsx
@@ -626,7 +776,7 @@ import {
626
776
  Input as AriaInput,
627
777
  Text
628
778
  } from "react-aria-components";
629
- import { twMerge as twMerge2 } from "tailwind-merge";
779
+ import { twMerge as twMerge5 } from "tailwind-merge";
630
780
 
631
781
  // src/components/Form/Label/Label.tsx
632
782
  import {
@@ -666,18 +816,6 @@ var alignClasses = {
666
816
  center: "text-center",
667
817
  right: "text-right"
668
818
  };
669
- function groupRadiusClasses(position) {
670
- switch (position) {
671
- case "start":
672
- return "rounded-l-(--border-radius-md) rounded-r-none";
673
- case "middle":
674
- return "rounded-none";
675
- case "end":
676
- return "rounded-r-(--border-radius-md) rounded-l-none";
677
- default:
678
- return "rounded-md";
679
- }
680
- }
681
819
  function Input({
682
820
  as: FieldProp = TextField,
683
821
  label,
@@ -695,10 +833,8 @@ function Input({
695
833
  }) {
696
834
  const Field = FieldProp;
697
835
  const isInvalid = !!errorMessage;
698
- const { inGroup, position } = useInputGroup();
699
836
  const borderColor = isInvalid ? "border-destructive-border" : "border-border hover:border-border";
700
- const radiusClass = inGroup ? groupRadiusClasses(position) : "rounded-md";
701
- const marginClass = inGroup && position !== "start" && position !== "standalone" ? "-ml-px" : "";
837
+ const radiusClass = "rounded-md";
702
838
  return /* @__PURE__ */ jsxs6(
703
839
  Field,
704
840
  {
@@ -707,18 +843,13 @@ function Input({
707
843
  isDisabled,
708
844
  isRequired,
709
845
  isInvalid,
710
- className: twMerge2(
711
- "flex w-full flex-col gap-1",
712
- inGroup ? "min-w-0 flex-1" : "",
713
- marginClass,
714
- className
715
- ),
846
+ className: twMerge5("flex w-full flex-col gap-1", className),
716
847
  children: [
717
848
  label && /* @__PURE__ */ jsx8(Label, { isRequired, children: label }),
718
849
  prefix ? /* @__PURE__ */ jsxs6(
719
850
  "div",
720
851
  {
721
- className: twMerge2(
852
+ className: twMerge5(
722
853
  "flex items-center overflow-hidden",
723
854
  radiusClass,
724
855
  "border",
@@ -726,14 +857,13 @@ function Input({
726
857
  "outline-none transition-colors",
727
858
  borderColor,
728
859
  "focus-within:ring-2 focus-within:ring-ring focus-within:border-ring",
729
- inGroup && "focus-within:z-10",
730
860
  isDisabled && "opacity-50 pointer-events-none"
731
861
  ),
732
862
  children: [
733
863
  /* @__PURE__ */ jsx8(
734
864
  "span",
735
865
  {
736
- className: twMerge2(
866
+ className: twMerge5(
737
867
  "self-stretch flex items-center shrink-0 select-none",
738
868
  "bg-card",
739
869
  "border-r border-r-border",
@@ -747,7 +877,7 @@ function Input({
747
877
  AriaInput,
748
878
  {
749
879
  placeholder,
750
- className: twMerge2(
880
+ className: twMerge5(
751
881
  "w-full bg-transparent",
752
882
  sizeStyles[size],
753
883
  alignClasses[align],
@@ -763,7 +893,7 @@ function Input({
763
893
  AriaInput,
764
894
  {
765
895
  placeholder,
766
- className: twMerge2(
896
+ className: twMerge5(
767
897
  "w-full",
768
898
  sizeStyles[size],
769
899
  alignClasses[align],
@@ -775,19 +905,11 @@ function Input({
775
905
  "outline-none transition-colors",
776
906
  borderColor,
777
907
  "focus:ring-2 focus:ring-ring focus:border-ring",
778
- inGroup && "focus:z-10",
779
908
  "disabled:opacity-50 disabled:pointer-events-none"
780
909
  )
781
910
  }
782
911
  ),
783
- description && /* @__PURE__ */ jsx8(
784
- Text,
785
- {
786
- slot: "description",
787
- className: "text-sm text-muted-foreground",
788
- children: description
789
- }
790
- ),
912
+ description && /* @__PURE__ */ jsx8(Text, { slot: "description", className: "text-sm text-muted-foreground", children: description }),
791
913
  isInvalid && /* @__PURE__ */ jsx8(
792
914
  Text,
793
915
  {
@@ -802,8 +924,106 @@ function Input({
802
924
  );
803
925
  }
804
926
 
927
+ // src/components/Form/InputPassword/InputPassword.tsx
928
+ import { forwardRef, useId, useState as useState5 } from "react";
929
+ import { Eye as Eye2, EyeOff as EyeOff2 } from "lucide-react";
930
+ import { twMerge as twMerge6 } from "tailwind-merge";
931
+ import { jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
932
+ var InputPassword = forwardRef(
933
+ function InputPassword2({
934
+ label,
935
+ description,
936
+ errorMessage,
937
+ size = "md",
938
+ isRequired,
939
+ isDisabled,
940
+ isToggleDisabled,
941
+ showPasswordLabel = "Show password",
942
+ hidePasswordLabel = "Hide password",
943
+ id,
944
+ className,
945
+ "aria-invalid": ariaInvalidProp,
946
+ "aria-describedby": ariaDescribedByProp,
947
+ ...inputProps
948
+ }, ref) {
949
+ const [visible, setVisible] = useState5(false);
950
+ const generatedId = useId();
951
+ const inputId = id ?? generatedId;
952
+ const isInvalid = !!errorMessage;
953
+ const descId = description ? `${inputId}-description` : void 0;
954
+ const errId = isInvalid ? `${inputId}-error` : void 0;
955
+ const describedBy = [descId, errId, ariaDescribedByProp].filter(Boolean).join(" ") || void 0;
956
+ const toggleDisabled = isToggleDisabled ?? isDisabled;
957
+ return /* @__PURE__ */ jsxs7("div", { className: twMerge6("flex w-full flex-col gap-1", className), children: [
958
+ label && /* @__PURE__ */ jsxs7(
959
+ "label",
960
+ {
961
+ htmlFor: inputId,
962
+ className: "text-sm font-medium text-foreground",
963
+ children: [
964
+ label,
965
+ isRequired && /* @__PURE__ */ jsx9("span", { "aria-hidden": "true", className: "ml-0.5 text-destructive", children: "*" })
966
+ ]
967
+ }
968
+ ),
969
+ /* @__PURE__ */ jsxs7(
970
+ "div",
971
+ {
972
+ className: twMerge6(
973
+ "flex items-center overflow-hidden rounded-md border bg-background",
974
+ "outline-none transition-colors",
975
+ isInvalid ? "border-destructive-border" : "border-border",
976
+ "focus-within:ring-2 focus-within:ring-ring focus-within:border-ring",
977
+ isDisabled && "opacity-50 pointer-events-none"
978
+ ),
979
+ children: [
980
+ /* @__PURE__ */ jsx9(
981
+ "input",
982
+ {
983
+ ...inputProps,
984
+ ref,
985
+ id: inputId,
986
+ type: visible ? "text" : "password",
987
+ required: isRequired,
988
+ disabled: isDisabled,
989
+ "aria-invalid": isInvalid || ariaInvalidProp,
990
+ "aria-describedby": describedBy,
991
+ className: twMerge6(
992
+ "w-full bg-transparent text-foreground",
993
+ "placeholder:text-muted-foreground",
994
+ "outline-none border-none",
995
+ sizeStyles[size]
996
+ )
997
+ }
998
+ ),
999
+ /* @__PURE__ */ jsx9(
1000
+ "button",
1001
+ {
1002
+ type: "button",
1003
+ "aria-label": visible ? hidePasswordLabel : showPasswordLabel,
1004
+ disabled: toggleDisabled,
1005
+ tabIndex: toggleDisabled ? -1 : void 0,
1006
+ onClick: () => setVisible((v) => !v),
1007
+ className: twMerge6(
1008
+ "flex items-center justify-center shrink-0 self-stretch px-3 cursor-pointer",
1009
+ "text-muted-foreground hover:text-foreground transition-colors",
1010
+ "outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-inset",
1011
+ "disabled:cursor-not-allowed disabled:opacity-50"
1012
+ ),
1013
+ children: /* @__PURE__ */ jsx9(Icon, { icon: visible ? EyeOff2 : Eye2, size: "sm" })
1014
+ }
1015
+ )
1016
+ ]
1017
+ }
1018
+ ),
1019
+ description && /* @__PURE__ */ jsx9("p", { id: descId, className: "text-sm text-muted-foreground", children: description }),
1020
+ isInvalid && /* @__PURE__ */ jsx9("p", { id: errId, role: "alert", className: "text-sm text-destructive", children: errorMessage })
1021
+ ] });
1022
+ }
1023
+ );
1024
+
805
1025
  // src/components/Form/Select/Select.tsx
806
- import { Check, ChevronDown } from "lucide-react";
1026
+ import { Check as Check2, ChevronDown as ChevronDown2 } from "lucide-react";
807
1027
  import {
808
1028
  Button as Button2,
809
1029
  ListBox,
@@ -813,8 +1033,8 @@ import {
813
1033
  SelectValue,
814
1034
  Text as Text2
815
1035
  } from "react-aria-components";
816
- import { twMerge as twMerge3 } from "tailwind-merge";
817
- import { Fragment, jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
1036
+ import { twMerge as twMerge7 } from "tailwind-merge";
1037
+ import { Fragment, jsx as jsx10, jsxs as jsxs8 } from "react/jsx-runtime";
818
1038
  function Select({
819
1039
  label,
820
1040
  items,
@@ -829,21 +1049,21 @@ function Select({
829
1049
  ...props
830
1050
  }) {
831
1051
  const hasError = Boolean(errorMessage);
832
- return /* @__PURE__ */ jsxs7(
1052
+ return /* @__PURE__ */ jsxs8(
833
1053
  AriaSelect,
834
1054
  {
835
1055
  ...props,
836
1056
  isDisabled,
837
1057
  isRequired,
838
1058
  isInvalid: hasError,
839
- className: twMerge3("flex flex-col gap-1", className),
1059
+ className: twMerge7("flex flex-col gap-1", className),
840
1060
  children: [
841
- label && /* @__PURE__ */ jsx9(Label, { isRequired, children: label }),
842
- /* @__PURE__ */ jsxs7(
1061
+ label && /* @__PURE__ */ jsx10(Label, { isRequired, children: label }),
1062
+ /* @__PURE__ */ jsxs8(
843
1063
  Button2,
844
1064
  {
845
1065
  "aria-required": isRequired || void 0,
846
- className: twMerge3(
1066
+ className: twMerge7(
847
1067
  `
848
1068
  inline-flex items-center justify-between
849
1069
  w-full rounded-md
@@ -857,10 +1077,10 @@ function Select({
857
1077
  hasError ? "border-destructive-border" : "border-border"
858
1078
  ),
859
1079
  children: [
860
- /* @__PURE__ */ jsx9(
1080
+ /* @__PURE__ */ jsx10(
861
1081
  SelectValue,
862
1082
  {
863
- className: twMerge3(
1083
+ className: twMerge7(
864
1084
  renderItem ? "min-w-0" : "truncate",
865
1085
  "data-placeholder:text-muted-foreground"
866
1086
  ),
@@ -871,11 +1091,11 @@ function Select({
871
1091
  }
872
1092
  }
873
1093
  ),
874
- /* @__PURE__ */ jsx9(
875
- ChevronDown,
1094
+ /* @__PURE__ */ jsx10(
1095
+ ChevronDown2,
876
1096
  {
877
1097
  "aria-hidden": true,
878
- className: twMerge3(
1098
+ className: twMerge7(
879
1099
  "shrink-0 text-muted-foreground",
880
1100
  size === "sm" ? "h-3.5 w-3.5" : "h-4 w-4"
881
1101
  )
@@ -884,8 +1104,8 @@ function Select({
884
1104
  ]
885
1105
  }
886
1106
  ),
887
- description && /* @__PURE__ */ jsx9(Text2, { slot: "description", className: "text-sm text-muted-foreground", children: description }),
888
- hasError && /* @__PURE__ */ jsx9(
1107
+ description && /* @__PURE__ */ jsx10(Text2, { slot: "description", className: "text-sm text-muted-foreground", children: description }),
1108
+ hasError && /* @__PURE__ */ jsx10(
889
1109
  Text2,
890
1110
  {
891
1111
  slot: "errorMessage",
@@ -894,10 +1114,10 @@ function Select({
894
1114
  children: errorMessage
895
1115
  }
896
1116
  ),
897
- /* @__PURE__ */ jsx9(
1117
+ /* @__PURE__ */ jsx10(
898
1118
  Popover,
899
1119
  {
900
- className: twMerge3(
1120
+ className: twMerge7(
901
1121
  "w-(--trigger-width)",
902
1122
  "rounded-md",
903
1123
  "border border-border",
@@ -907,12 +1127,12 @@ function Select({
907
1127
  "entering:animate-in entering:fade-in",
908
1128
  "exiting:animate-out exiting:fade-out"
909
1129
  ),
910
- children: /* @__PURE__ */ jsx9(ListBox, { className: "p-1 outline-none", items, children: (item) => /* @__PURE__ */ jsx9(
1130
+ children: /* @__PURE__ */ jsx10(ListBox, { className: "p-1 outline-none", items, children: (item) => /* @__PURE__ */ jsx10(
911
1131
  ListBoxItem,
912
1132
  {
913
1133
  id: item.id,
914
1134
  textValue: item.name,
915
- className: twMerge3(
1135
+ className: twMerge7(
916
1136
  `
917
1137
  flex items-center justify-between gap-2
918
1138
  rounded-sm
@@ -924,9 +1144,9 @@ function Select({
924
1144
  `,
925
1145
  sizeStyles[size]
926
1146
  ),
927
- children: ({ isSelected }) => /* @__PURE__ */ jsxs7(Fragment, { children: [
928
- /* @__PURE__ */ jsx9("span", { className: renderItem ? "min-w-0 flex-1" : "truncate", children: renderItem ? renderItem(item) : item.name }),
929
- isSelected && /* @__PURE__ */ jsx9(Check, { className: "h-4 w-4 shrink-0 text-primary" })
1147
+ children: ({ isSelected }) => /* @__PURE__ */ jsxs8(Fragment, { children: [
1148
+ /* @__PURE__ */ jsx10("span", { className: renderItem ? "min-w-0 flex-1" : "truncate", children: renderItem ? renderItem(item) : item.name }),
1149
+ isSelected && /* @__PURE__ */ jsx10(Check2, { className: "h-4 w-4 shrink-0 text-primary" })
930
1150
  ] })
931
1151
  }
932
1152
  ) })
@@ -946,13 +1166,13 @@ import {
946
1166
  TableBody as AriaTableBody,
947
1167
  TableHeader as AriaTableHeader
948
1168
  } from "react-aria-components";
949
- import { jsx as jsx10, jsxs as jsxs8 } from "react/jsx-runtime";
1169
+ import { jsx as jsx11, jsxs as jsxs9 } from "react/jsx-runtime";
950
1170
  var tableSizeClass = {
951
1171
  compact: "[--table-row-py:theme(spacing.1)]",
952
1172
  comfortable: "[--table-row-py:theme(spacing.3)]"
953
1173
  };
954
- function Table({ size = "comfortable", className, ...props }) {
955
- return /* @__PURE__ */ jsx10(
1174
+ function Table2({ size = "comfortable", className, ...props }) {
1175
+ return /* @__PURE__ */ jsx11(
956
1176
  AriaTable,
957
1177
  {
958
1178
  ...props,
@@ -965,10 +1185,10 @@ function Table({ size = "comfortable", className, ...props }) {
965
1185
  );
966
1186
  }
967
1187
  function TableHeader(props) {
968
- return /* @__PURE__ */ jsx10(AriaTableHeader, { ...props });
1188
+ return /* @__PURE__ */ jsx11(AriaTableHeader, { ...props });
969
1189
  }
970
1190
  function Column(props) {
971
- return /* @__PURE__ */ jsx10(
1191
+ return /* @__PURE__ */ jsx11(
972
1192
  AriaColumn,
973
1193
  {
974
1194
  ...props,
@@ -978,18 +1198,18 @@ function Column(props) {
978
1198
  "cursor-default select-none outline-none",
979
1199
  "focus-visible:outline-2 focus-visible:outline-ring focus-visible:outline-offset-[-2px]"
980
1200
  ].join(" "),
981
- children: ({ allowsSorting, sortDirection }) => /* @__PURE__ */ jsxs8("span", { className: "inline-flex items-center gap-1", children: [
1201
+ children: ({ allowsSorting, sortDirection }) => /* @__PURE__ */ jsxs9("span", { className: "inline-flex items-center gap-1", children: [
982
1202
  props.children,
983
- allowsSorting && /* @__PURE__ */ jsx10("span", { "aria-hidden": "true", className: "text-muted-foreground", children: sortDirection === "ascending" ? "\u25B2" : sortDirection === "descending" ? "\u25BC" : "\u25B4" })
1203
+ allowsSorting && /* @__PURE__ */ jsx11("span", { "aria-hidden": "true", className: "text-muted-foreground", children: sortDirection === "ascending" ? "\u25B2" : sortDirection === "descending" ? "\u25BC" : "\u25B4" })
984
1204
  ] })
985
1205
  }
986
1206
  );
987
1207
  }
988
1208
  function TableBody(props) {
989
- return /* @__PURE__ */ jsx10(AriaTableBody, { ...props });
1209
+ return /* @__PURE__ */ jsx11(AriaTableBody, { ...props });
990
1210
  }
991
1211
  function Row(props) {
992
- return /* @__PURE__ */ jsx10(
1212
+ return /* @__PURE__ */ jsx11(
993
1213
  AriaRow,
994
1214
  {
995
1215
  ...props,
@@ -1005,7 +1225,7 @@ function Row(props) {
1005
1225
  );
1006
1226
  }
1007
1227
  function Cell(props) {
1008
- return /* @__PURE__ */ jsx10(
1228
+ return /* @__PURE__ */ jsx11(
1009
1229
  AriaCell,
1010
1230
  {
1011
1231
  ...props,
@@ -1026,8 +1246,8 @@ import {
1026
1246
  Dialog as AriaDialog,
1027
1247
  Heading
1028
1248
  } from "react-aria-components";
1029
- import { X } from "lucide-react";
1030
- import { Fragment as Fragment2, jsx as jsx11, jsxs as jsxs9 } from "react/jsx-runtime";
1249
+ import { X as X2 } from "lucide-react";
1250
+ import { Fragment as Fragment2, jsx as jsx12, jsxs as jsxs10 } from "react/jsx-runtime";
1031
1251
  var sizeStyles2 = {
1032
1252
  sm: "max-w-md",
1033
1253
  md: "max-w-lg",
@@ -1043,7 +1263,7 @@ function Dialog({
1043
1263
  children,
1044
1264
  className
1045
1265
  }) {
1046
- return /* @__PURE__ */ jsx11(
1266
+ return /* @__PURE__ */ jsx12(
1047
1267
  ModalOverlay,
1048
1268
  {
1049
1269
  isOpen,
@@ -1055,7 +1275,7 @@ function Dialog({
1055
1275
  "entering:animate-in entering:fade-in",
1056
1276
  "exiting:animate-out exiting:fade-out"
1057
1277
  ].join(" "),
1058
- children: /* @__PURE__ */ jsx11(
1278
+ children: /* @__PURE__ */ jsx12(
1059
1279
  Modal,
1060
1280
  {
1061
1281
  className: [
@@ -1066,9 +1286,9 @@ function Dialog({
1066
1286
  "exiting:animate-out exiting:zoom-out-95 exiting:fade-out",
1067
1287
  className
1068
1288
  ].filter(Boolean).join(" "),
1069
- children: /* @__PURE__ */ jsx11(AriaDialog, { className: "outline-none flex flex-col max-h-[85vh]", children: ({ close }) => /* @__PURE__ */ jsxs9(Fragment2, { children: [
1070
- /* @__PURE__ */ jsxs9("div", { className: "flex items-center justify-between px-6 py-4 border-b border-border", children: [
1071
- /* @__PURE__ */ jsx11(
1289
+ children: /* @__PURE__ */ jsx12(AriaDialog, { className: "outline-none flex flex-col max-h-[85vh]", children: ({ close }) => /* @__PURE__ */ jsxs10(Fragment2, { children: [
1290
+ /* @__PURE__ */ jsxs10("div", { className: "flex items-center justify-between px-6 py-4 border-b border-border", children: [
1291
+ /* @__PURE__ */ jsx12(
1072
1292
  Heading,
1073
1293
  {
1074
1294
  slot: "title",
@@ -1076,7 +1296,7 @@ function Dialog({
1076
1296
  children: title
1077
1297
  }
1078
1298
  ),
1079
- /* @__PURE__ */ jsx11(
1299
+ /* @__PURE__ */ jsx12(
1080
1300
  "button",
1081
1301
  {
1082
1302
  type: "button",
@@ -1088,11 +1308,11 @@ function Dialog({
1088
1308
  "transition-colors"
1089
1309
  ].join(" "),
1090
1310
  "aria-label": "Close",
1091
- children: /* @__PURE__ */ jsx11(X, { size: 20, "aria-hidden": "true" })
1311
+ children: /* @__PURE__ */ jsx12(X2, { size: 20, "aria-hidden": "true" })
1092
1312
  }
1093
1313
  )
1094
1314
  ] }),
1095
- /* @__PURE__ */ jsx11("div", { className: "px-6 py-4 overflow-y-auto", children })
1315
+ /* @__PURE__ */ jsx12("div", { className: "px-6 py-4 overflow-y-auto", children })
1096
1316
  ] }) })
1097
1317
  }
1098
1318
  )
@@ -1101,21 +1321,21 @@ function Dialog({
1101
1321
  }
1102
1322
 
1103
1323
  // src/components/Dialog/DialogFooter.tsx
1104
- import { jsx as jsx12 } from "react/jsx-runtime";
1324
+ import { jsx as jsx13 } from "react/jsx-runtime";
1105
1325
 
1106
1326
  // src/components/Toast/Toast.tsx
1107
1327
  import {
1108
- createContext as createContext2,
1328
+ createContext,
1109
1329
  useCallback as useCallback2,
1110
- useContext as useContext2,
1330
+ useContext,
1111
1331
  useEffect as useEffect2,
1112
1332
  useRef as useRef4,
1113
- useState as useState5
1333
+ useState as useState6
1114
1334
  } from "react";
1115
1335
  import { createPortal as createPortal2 } from "react-dom";
1116
- import { CheckCircle, XCircle, Info, X as X2 } from "lucide-react";
1117
- import { jsx as jsx13, jsxs as jsxs10 } from "react/jsx-runtime";
1118
- var ToastContext = createContext2(null);
1336
+ import { CheckCircle as CheckCircle3, XCircle as XCircle2, Info as Info2, X as X3 } from "lucide-react";
1337
+ import { jsx as jsx14, jsxs as jsxs11 } from "react/jsx-runtime";
1338
+ var ToastContext = createContext(null);
1119
1339
  var toastCounter = 0;
1120
1340
  var defaultDuration = {
1121
1341
  success: 5e3,
@@ -1124,22 +1344,22 @@ var defaultDuration = {
1124
1344
  };
1125
1345
  var variantConfig = {
1126
1346
  success: {
1127
- icon: CheckCircle,
1347
+ icon: CheckCircle3,
1128
1348
  containerClass: "bg-success-surface border-success-border text-success",
1129
1349
  iconClass: "text-success"
1130
1350
  },
1131
1351
  error: {
1132
- icon: XCircle,
1352
+ icon: XCircle2,
1133
1353
  containerClass: "bg-destructive-surface border-destructive-border text-destructive",
1134
1354
  iconClass: "text-destructive"
1135
1355
  },
1136
1356
  info: {
1137
- icon: Info,
1357
+ icon: Info2,
1138
1358
  containerClass: "bg-info-surface border-info-border text-info",
1139
1359
  iconClass: "text-info"
1140
1360
  }
1141
1361
  };
1142
- var PlacementContext = createContext2("bottom-right");
1362
+ var PlacementContext = createContext("bottom-right");
1143
1363
  var exitAnimationByPlacement = {
1144
1364
  "top-center": "-translate-y-full opacity-0",
1145
1365
  "top-right": "translate-x-full opacity-0",
@@ -1156,9 +1376,9 @@ function ToastItem({
1156
1376
  toast,
1157
1377
  onRemove
1158
1378
  }) {
1159
- const [isExiting, setIsExiting] = useState5(false);
1379
+ const [isExiting, setIsExiting] = useState6(false);
1160
1380
  const timerRef = useRef4(null);
1161
- const placement = useContext2(PlacementContext);
1381
+ const placement = useContext(PlacementContext);
1162
1382
  const config = variantConfig[toast.variant];
1163
1383
  const IconComponent = config.icon;
1164
1384
  const dismiss = useCallback2(() => {
@@ -1172,7 +1392,7 @@ function ToastItem({
1172
1392
  if (timerRef.current) clearTimeout(timerRef.current);
1173
1393
  };
1174
1394
  }, [toast.duration, toast.variant, dismiss]);
1175
- return /* @__PURE__ */ jsxs10(
1395
+ return /* @__PURE__ */ jsxs11(
1176
1396
  "div",
1177
1397
  {
1178
1398
  role: "status",
@@ -1185,16 +1405,16 @@ function ToastItem({
1185
1405
  config.containerClass
1186
1406
  ].join(" "),
1187
1407
  children: [
1188
- /* @__PURE__ */ jsx13(IconComponent, { size: 20, className: ["shrink-0 mt-0.5", config.iconClass].join(" "), "aria-hidden": "true" }),
1189
- /* @__PURE__ */ jsx13("p", { className: "flex-1 text-sm font-medium", children: toast.message }),
1190
- /* @__PURE__ */ jsx13(
1408
+ /* @__PURE__ */ jsx14(IconComponent, { size: 20, className: ["shrink-0 mt-0.5", config.iconClass].join(" "), "aria-hidden": "true" }),
1409
+ /* @__PURE__ */ jsx14("p", { className: "flex-1 text-sm font-medium", children: toast.message }),
1410
+ /* @__PURE__ */ jsx14(
1191
1411
  "button",
1192
1412
  {
1193
1413
  type: "button",
1194
1414
  onClick: dismiss,
1195
1415
  className: "shrink-0 rounded-sm p-0.5 opacity-70 hover:opacity-100 transition-opacity outline-none focus-visible:ring-2 focus-visible:ring-current",
1196
1416
  "aria-label": "Dismiss",
1197
- children: /* @__PURE__ */ jsx13(X2, { size: 16, "aria-hidden": "true" })
1417
+ children: /* @__PURE__ */ jsx14(X3, { size: 16, "aria-hidden": "true" })
1198
1418
  }
1199
1419
  )
1200
1420
  ]
@@ -1214,7 +1434,7 @@ function ToastContainer({
1214
1434
  }) {
1215
1435
  if (toasts.length === 0) return null;
1216
1436
  return createPortal2(
1217
- /* @__PURE__ */ jsx13(PlacementContext.Provider, { value: placement, children: /* @__PURE__ */ jsx13("div", { className: containerPositionStyles[placement], children: toasts.map((toast) => /* @__PURE__ */ jsx13(ToastItem, { toast, onRemove: removeToast }, toast.id)) }) }),
1437
+ /* @__PURE__ */ jsx14(PlacementContext.Provider, { value: placement, children: /* @__PURE__ */ jsx14("div", { className: containerPositionStyles[placement], children: toasts.map((toast) => /* @__PURE__ */ jsx14(ToastItem, { toast, onRemove: removeToast }, toast.id)) }) }),
1218
1438
  document.body
1219
1439
  );
1220
1440
  }
@@ -1233,7 +1453,7 @@ function createToastBridge() {
1233
1453
  };
1234
1454
  }
1235
1455
  function ToastProvider({ children, bridge, placement = "bottom-right" }) {
1236
- const [toasts, setToasts] = useState5([]);
1456
+ const [toasts, setToasts] = useState6([]);
1237
1457
  const addToast = useCallback2((toast) => {
1238
1458
  const id = `toast-${++toastCounter}`;
1239
1459
  setToasts((prev) => [...prev, { ...toast, id }]);
@@ -1245,13 +1465,13 @@ function ToastProvider({ children, bridge, placement = "bottom-right" }) {
1245
1465
  if (!bridge) return;
1246
1466
  return bridge.subscribe(addToast);
1247
1467
  }, [bridge, addToast]);
1248
- return /* @__PURE__ */ jsxs10(ToastContext.Provider, { value: { toasts, addToast, removeToast }, children: [
1468
+ return /* @__PURE__ */ jsxs11(ToastContext.Provider, { value: { toasts, addToast, removeToast }, children: [
1249
1469
  children,
1250
- /* @__PURE__ */ jsx13(ToastContainer, { toasts, removeToast, placement })
1470
+ /* @__PURE__ */ jsx14(ToastContainer, { toasts, removeToast, placement })
1251
1471
  ] });
1252
1472
  }
1253
1473
  function useToast() {
1254
- const context = useContext2(ToastContext);
1474
+ const context = useContext(ToastContext);
1255
1475
  if (!context) {
1256
1476
  throw new Error("useToast must be used within a ToastProvider");
1257
1477
  }
@@ -1263,7 +1483,7 @@ function useToast() {
1263
1483
  }
1264
1484
 
1265
1485
  // src/components/EmptyState/EmptyState.tsx
1266
- import { jsx as jsx14, jsxs as jsxs11 } from "react/jsx-runtime";
1486
+ import { jsx as jsx15, jsxs as jsxs12 } from "react/jsx-runtime";
1267
1487
  function EmptyState({
1268
1488
  icon,
1269
1489
  title,
@@ -1271,7 +1491,7 @@ function EmptyState({
1271
1491
  action,
1272
1492
  className
1273
1493
  }) {
1274
- return /* @__PURE__ */ jsxs11(
1494
+ return /* @__PURE__ */ jsxs12(
1275
1495
  "div",
1276
1496
  {
1277
1497
  className: [
@@ -1279,10 +1499,10 @@ function EmptyState({
1279
1499
  className
1280
1500
  ].filter(Boolean).join(" "),
1281
1501
  children: [
1282
- icon && /* @__PURE__ */ jsx14(Icon, { icon, size: "xl", className: "text-muted-foreground" }),
1283
- /* @__PURE__ */ jsx14("h3", { className: "text-lg font-semibold text-foreground mt-4", children: title }),
1284
- description && /* @__PURE__ */ jsx14("p", { className: "text-sm text-muted-foreground mt-2 max-w-sm", children: description }),
1285
- action && /* @__PURE__ */ jsx14("div", { className: "mt-6", children: action })
1502
+ icon && /* @__PURE__ */ jsx15(Icon, { icon, size: "xl", className: "text-muted-foreground" }),
1503
+ /* @__PURE__ */ jsx15("h3", { className: "text-lg font-semibold text-foreground mt-4", children: title }),
1504
+ description && /* @__PURE__ */ jsx15("p", { className: "text-sm text-muted-foreground mt-2 max-w-sm", children: description }),
1505
+ action && /* @__PURE__ */ jsx15("div", { className: "mt-6", children: action })
1286
1506
  ]
1287
1507
  }
1288
1508
  );
@@ -1292,10 +1512,10 @@ function EmptyState({
1292
1512
  import {
1293
1513
  Checkbox as AriaCheckbox
1294
1514
  } from "react-aria-components";
1295
- import { Check as Check2 } from "lucide-react";
1296
- import { Fragment as Fragment3, jsx as jsx15, jsxs as jsxs12 } from "react/jsx-runtime";
1515
+ import { Check as Check3 } from "lucide-react";
1516
+ import { Fragment as Fragment3, jsx as jsx16, jsxs as jsxs13 } from "react/jsx-runtime";
1297
1517
  function Checkbox({ children, className, ...props }) {
1298
- return /* @__PURE__ */ jsx15(
1518
+ return /* @__PURE__ */ jsx16(
1299
1519
  AriaCheckbox,
1300
1520
  {
1301
1521
  ...props,
@@ -1304,8 +1524,8 @@ function Checkbox({ children, className, ...props }) {
1304
1524
  "disabled:opacity-50 disabled:cursor-default",
1305
1525
  className
1306
1526
  ].filter(Boolean).join(" "),
1307
- children: ({ isSelected, isIndeterminate }) => /* @__PURE__ */ jsxs12(Fragment3, { children: [
1308
- /* @__PURE__ */ jsxs12(
1527
+ children: ({ isSelected, isIndeterminate }) => /* @__PURE__ */ jsxs13(Fragment3, { children: [
1528
+ /* @__PURE__ */ jsxs13(
1309
1529
  "div",
1310
1530
  {
1311
1531
  className: [
@@ -1315,12 +1535,12 @@ function Checkbox({ children, className, ...props }) {
1315
1535
  isSelected || isIndeterminate ? "bg-primary border-primary" : "bg-background border-border group-hover:border-border"
1316
1536
  ].join(" "),
1317
1537
  children: [
1318
- isSelected && /* @__PURE__ */ jsx15(Check2, { className: "w-4 h-4 text-primary-foreground", strokeWidth: 3 }),
1319
- isIndeterminate && /* @__PURE__ */ jsx15("div", { className: "w-3 h-0.5 bg-primary-foreground rounded-full" })
1538
+ isSelected && /* @__PURE__ */ jsx16(Check3, { className: "w-4 h-4 text-primary-foreground", strokeWidth: 3 }),
1539
+ isIndeterminate && /* @__PURE__ */ jsx16("div", { className: "w-3 h-0.5 bg-primary-foreground rounded-full" })
1320
1540
  ]
1321
1541
  }
1322
1542
  ),
1323
- children && /* @__PURE__ */ jsx15("span", { children })
1543
+ children && /* @__PURE__ */ jsx16("span", { children })
1324
1544
  ] })
1325
1545
  }
1326
1546
  );
@@ -1330,7 +1550,7 @@ function Checkbox({ children, className, ...props }) {
1330
1550
  import {
1331
1551
  Switch as AriaSwitch
1332
1552
  } from "react-aria-components";
1333
- import { Fragment as Fragment4, jsx as jsx16, jsxs as jsxs13 } from "react/jsx-runtime";
1553
+ import { Fragment as Fragment4, jsx as jsx17, jsxs as jsxs14 } from "react/jsx-runtime";
1334
1554
  var trackColorMap = {
1335
1555
  primary: "bg-primary",
1336
1556
  success: "bg-success",
@@ -1347,7 +1567,7 @@ function Switch({
1347
1567
  ...props
1348
1568
  }) {
1349
1569
  const isPreset = isPresetColor(color);
1350
- return /* @__PURE__ */ jsx16(
1570
+ return /* @__PURE__ */ jsx17(
1351
1571
  AriaSwitch,
1352
1572
  {
1353
1573
  ...props,
@@ -1356,8 +1576,8 @@ function Switch({
1356
1576
  "disabled:opacity-50 disabled:cursor-default",
1357
1577
  className
1358
1578
  ].filter(Boolean).join(" "),
1359
- children: ({ isSelected }) => /* @__PURE__ */ jsxs13(Fragment4, { children: [
1360
- /* @__PURE__ */ jsx16(
1579
+ children: ({ isSelected }) => /* @__PURE__ */ jsxs14(Fragment4, { children: [
1580
+ /* @__PURE__ */ jsx17(
1361
1581
  "div",
1362
1582
  {
1363
1583
  className: [
@@ -1366,7 +1586,7 @@ function Switch({
1366
1586
  isSelected && isPreset ? trackColorMap[color] : !isSelected ? "bg-border" : ""
1367
1587
  ].join(" "),
1368
1588
  style: isSelected && !isPreset ? { backgroundColor: color } : void 0,
1369
- children: /* @__PURE__ */ jsx16(
1589
+ children: /* @__PURE__ */ jsx17(
1370
1590
  "div",
1371
1591
  {
1372
1592
  className: [
@@ -1377,7 +1597,7 @@ function Switch({
1377
1597
  )
1378
1598
  }
1379
1599
  ),
1380
- children && /* @__PURE__ */ jsx16("span", { children })
1600
+ children && /* @__PURE__ */ jsx17("span", { children })
1381
1601
  ] })
1382
1602
  }
1383
1603
  );
@@ -1388,9 +1608,9 @@ import {
1388
1608
  RadioGroup as AriaRadioGroup,
1389
1609
  Radio as AriaRadio
1390
1610
  } from "react-aria-components";
1391
- import { Fragment as Fragment5, jsx as jsx17, jsxs as jsxs14 } from "react/jsx-runtime";
1611
+ import { Fragment as Fragment5, jsx as jsx18, jsxs as jsxs15 } from "react/jsx-runtime";
1392
1612
  function RadioGroup({ children, className, ...props }) {
1393
- return /* @__PURE__ */ jsx17(
1613
+ return /* @__PURE__ */ jsx18(
1394
1614
  AriaRadioGroup,
1395
1615
  {
1396
1616
  ...props,
@@ -1404,7 +1624,7 @@ function RadioGroup({ children, className, ...props }) {
1404
1624
  );
1405
1625
  }
1406
1626
  function Radio({ children, className, ...props }) {
1407
- return /* @__PURE__ */ jsx17(
1627
+ return /* @__PURE__ */ jsx18(
1408
1628
  AriaRadio,
1409
1629
  {
1410
1630
  ...props,
@@ -1413,8 +1633,8 @@ function Radio({ children, className, ...props }) {
1413
1633
  "disabled:opacity-50 disabled:cursor-default",
1414
1634
  className
1415
1635
  ].filter(Boolean).join(" "),
1416
- children: ({ isSelected }) => /* @__PURE__ */ jsxs14(Fragment5, { children: [
1417
- /* @__PURE__ */ jsx17(
1636
+ children: ({ isSelected }) => /* @__PURE__ */ jsxs15(Fragment5, { children: [
1637
+ /* @__PURE__ */ jsx18(
1418
1638
  "div",
1419
1639
  {
1420
1640
  className: [
@@ -1423,16 +1643,16 @@ function Radio({ children, className, ...props }) {
1423
1643
  "group-focus-visible:ring-2 group-focus-visible:ring-ring group-focus-visible:ring-offset-2",
1424
1644
  isSelected ? "border-primary" : "border-border group-hover:border-border"
1425
1645
  ].join(" "),
1426
- children: isSelected && /* @__PURE__ */ jsx17("div", { className: "w-2.5 h-2.5 rounded-full bg-primary" })
1646
+ children: isSelected && /* @__PURE__ */ jsx18("div", { className: "w-2.5 h-2.5 rounded-full bg-primary" })
1427
1647
  }
1428
1648
  ),
1429
- children && /* @__PURE__ */ jsx17("span", { children })
1649
+ children && /* @__PURE__ */ jsx18("span", { children })
1430
1650
  ] })
1431
1651
  }
1432
1652
  );
1433
1653
  }
1434
1654
  function RadioButton({ children, className, ...props }) {
1435
- return /* @__PURE__ */ jsx17(
1655
+ return /* @__PURE__ */ jsx18(
1436
1656
  AriaRadio,
1437
1657
  {
1438
1658
  ...props,
@@ -1441,7 +1661,7 @@ function RadioButton({ children, className, ...props }) {
1441
1661
  "disabled:opacity-50 disabled:cursor-default",
1442
1662
  className
1443
1663
  ].filter(Boolean).join(" "),
1444
- children: ({ isSelected }) => /* @__PURE__ */ jsx17(
1664
+ children: ({ isSelected }) => /* @__PURE__ */ jsx18(
1445
1665
  "div",
1446
1666
  {
1447
1667
  className: [
@@ -1458,9 +1678,9 @@ function RadioButton({ children, className, ...props }) {
1458
1678
  }
1459
1679
 
1460
1680
  // src/components/Form/Fieldset/Fieldset.tsx
1461
- import { jsx as jsx18, jsxs as jsxs15 } from "react/jsx-runtime";
1681
+ import { jsx as jsx19, jsxs as jsxs16 } from "react/jsx-runtime";
1462
1682
  function Fieldset({ legend, children, className }) {
1463
- return /* @__PURE__ */ jsxs15(
1683
+ return /* @__PURE__ */ jsxs16(
1464
1684
  "fieldset",
1465
1685
  {
1466
1686
  className: [
@@ -1469,7 +1689,7 @@ function Fieldset({ legend, children, className }) {
1469
1689
  className
1470
1690
  ].filter(Boolean).join(" "),
1471
1691
  children: [
1472
- legend && /* @__PURE__ */ jsx18(
1692
+ legend && /* @__PURE__ */ jsx19(
1473
1693
  "legend",
1474
1694
  {
1475
1695
  className: [
@@ -1487,71 +1707,9 @@ function Fieldset({ legend, children, className }) {
1487
1707
  );
1488
1708
  }
1489
1709
 
1490
- // src/components/Form/InputGroup/InputGroup.tsx
1491
- import React from "react";
1492
- import { jsx as jsx19 } from "react/jsx-runtime";
1493
- function InputGroup({ children, className }) {
1494
- const childArray = React.Children.toArray(children).filter(
1495
- React.isValidElement
1496
- );
1497
- return /* @__PURE__ */ jsx19(
1498
- "div",
1499
- {
1500
- className: ["flex items-stretch", className].filter(Boolean).join(" "),
1501
- children: childArray.map((child, index) => {
1502
- const position = childArray.length === 1 ? "standalone" : index === 0 ? "start" : index === childArray.length - 1 ? "end" : "middle";
1503
- return /* @__PURE__ */ jsx19(
1504
- InputGroupContext.Provider,
1505
- {
1506
- value: { inGroup: true, position },
1507
- children: child
1508
- },
1509
- index
1510
- );
1511
- })
1512
- }
1513
- );
1514
- }
1515
-
1516
- // src/components/Form/InputAddon/InputAddon.tsx
1517
- import { jsx as jsx20 } from "react/jsx-runtime";
1518
- function groupRadiusClass3(position) {
1519
- switch (position) {
1520
- case "start":
1521
- return "rounded-l-(--border-radius-md) rounded-r-none";
1522
- case "middle":
1523
- return "rounded-none";
1524
- case "end":
1525
- return "rounded-r-(--border-radius-md) rounded-l-none";
1526
- default:
1527
- return "rounded-md";
1528
- }
1529
- }
1530
- function InputAddon({ children, className }) {
1531
- const { inGroup, position } = useInputGroup();
1532
- const radiusClass = inGroup ? groupRadiusClass3(position) : "rounded-md";
1533
- const marginClass = inGroup && position !== "start" && position !== "standalone" ? "-ml-px" : "";
1534
- return /* @__PURE__ */ jsx20(
1535
- "div",
1536
- {
1537
- className: [
1538
- "flex items-center self-stretch shrink-0 select-none",
1539
- "px-3 py-2 text-base",
1540
- "bg-card",
1541
- "text-muted-foreground",
1542
- "border border-border",
1543
- radiusClass,
1544
- marginClass,
1545
- className
1546
- ].filter(Boolean).join(" "),
1547
- children
1548
- }
1549
- );
1550
- }
1551
-
1552
1710
  // src/components/Heading/Heading.tsx
1553
- import { twMerge as twMerge4 } from "tailwind-merge";
1554
- import { jsx as jsx21 } from "react/jsx-runtime";
1711
+ import { twMerge as twMerge8 } from "tailwind-merge";
1712
+ import { jsx as jsx20 } from "react/jsx-runtime";
1555
1713
  var defaultSizeMap = {
1556
1714
  h1: "2xl",
1557
1715
  h2: "xl",
@@ -1574,17 +1732,17 @@ var weightStyles = {
1574
1732
  bold: "font-bold"
1575
1733
  };
1576
1734
  function Heading2({
1577
- as: Tag = "h2",
1735
+ as: Tag2 = "h2",
1578
1736
  size,
1579
1737
  weight = "semibold",
1580
1738
  className,
1581
1739
  children
1582
1740
  }) {
1583
- const resolvedSize = size ?? defaultSizeMap[Tag];
1584
- return /* @__PURE__ */ jsx21(
1585
- Tag,
1741
+ const resolvedSize = size ?? defaultSizeMap[Tag2];
1742
+ return /* @__PURE__ */ jsx20(
1743
+ Tag2,
1586
1744
  {
1587
- className: twMerge4(
1745
+ className: twMerge8(
1588
1746
  weightStyles[weight],
1589
1747
  "text-foreground",
1590
1748
  sizeStyles3[resolvedSize],
@@ -1595,7 +1753,7 @@ function Heading2({
1595
1753
  );
1596
1754
  }
1597
1755
  function H1(props) {
1598
- return /* @__PURE__ */ jsx21(
1756
+ return /* @__PURE__ */ jsx20(
1599
1757
  Heading2,
1600
1758
  {
1601
1759
  ...props,
@@ -1606,17 +1764,17 @@ function H1(props) {
1606
1764
  );
1607
1765
  }
1608
1766
  function H2(props) {
1609
- return /* @__PURE__ */ jsx21(Heading2, { ...props, as: "h2", size: props.size ?? "xl" });
1767
+ return /* @__PURE__ */ jsx20(Heading2, { ...props, as: "h2", size: props.size ?? "xl" });
1610
1768
  }
1611
1769
  function H3(props) {
1612
- return /* @__PURE__ */ jsx21(Heading2, { ...props, as: "h3", size: props.size ?? "lg" });
1770
+ return /* @__PURE__ */ jsx20(Heading2, { ...props, as: "h3", size: props.size ?? "lg" });
1613
1771
  }
1614
1772
 
1615
1773
  // src/components/Link/Link.tsx
1616
1774
  import {
1617
- Link as AriaLink
1775
+ Link as AriaLink3
1618
1776
  } from "react-aria-components";
1619
- import { jsx as jsx22 } from "react/jsx-runtime";
1777
+ import { jsx as jsx21 } from "react/jsx-runtime";
1620
1778
  var variantStyles2 = {
1621
1779
  default: [
1622
1780
  "text-teal-700 underline",
@@ -1632,8 +1790,8 @@ function Link({
1632
1790
  className,
1633
1791
  ...props
1634
1792
  }) {
1635
- return /* @__PURE__ */ jsx22(
1636
- AriaLink,
1793
+ return /* @__PURE__ */ jsx21(
1794
+ AriaLink3,
1637
1795
  {
1638
1796
  ...props,
1639
1797
  className: [
@@ -1652,21 +1810,21 @@ import {
1652
1810
  Breadcrumb as AriaBreadcrumb,
1653
1811
  Link as Link2
1654
1812
  } from "react-aria-components";
1655
- import { ChevronRight } from "lucide-react";
1656
- import { Fragment as Fragment6, jsx as jsx23, jsxs as jsxs16 } from "react/jsx-runtime";
1813
+ import { ChevronRight as ChevronRight2 } from "lucide-react";
1814
+ import { Fragment as Fragment6, jsx as jsx22, jsxs as jsxs17 } from "react/jsx-runtime";
1657
1815
  function Breadcrumbs({ items, className }) {
1658
- return /* @__PURE__ */ jsx23(
1816
+ return /* @__PURE__ */ jsx22(
1659
1817
  "nav",
1660
1818
  {
1661
1819
  "aria-label": "Breadcrumb",
1662
1820
  className,
1663
- children: /* @__PURE__ */ jsx23(
1821
+ children: /* @__PURE__ */ jsx22(
1664
1822
  AriaBreadcrumbs,
1665
1823
  {
1666
1824
  className: "flex items-center gap-1 text-sm min-w-0",
1667
1825
  children: items.map((item, index) => {
1668
1826
  const isLast = index === items.length - 1;
1669
- return /* @__PURE__ */ jsx23(
1827
+ return /* @__PURE__ */ jsx22(
1670
1828
  AriaBreadcrumb,
1671
1829
  {
1672
1830
  id: item.id,
@@ -1674,8 +1832,8 @@ function Breadcrumbs({ items, className }) {
1674
1832
  "flex items-center gap-1",
1675
1833
  isLast ? "min-w-0" : "shrink-0"
1676
1834
  ].join(" "),
1677
- children: isLast ? /* @__PURE__ */ jsx23("span", { className: "font-medium text-foreground truncate", children: item.label }) : /* @__PURE__ */ jsxs16(Fragment6, { children: [
1678
- /* @__PURE__ */ jsx23(
1835
+ children: isLast ? /* @__PURE__ */ jsx22("span", { className: "font-medium text-foreground truncate", children: item.label }) : /* @__PURE__ */ jsxs17(Fragment6, { children: [
1836
+ /* @__PURE__ */ jsx22(
1679
1837
  Link2,
1680
1838
  {
1681
1839
  href: item.href,
@@ -1683,8 +1841,8 @@ function Breadcrumbs({ items, className }) {
1683
1841
  children: item.label
1684
1842
  }
1685
1843
  ),
1686
- /* @__PURE__ */ jsx23(
1687
- ChevronRight,
1844
+ /* @__PURE__ */ jsx22(
1845
+ ChevronRight2,
1688
1846
  {
1689
1847
  className: "shrink-0 text-neutral-400",
1690
1848
  size: 16,
@@ -1702,94 +1860,13 @@ function Breadcrumbs({ items, className }) {
1702
1860
  );
1703
1861
  }
1704
1862
 
1705
- // src/components/ButtonLink/ButtonLink.tsx
1706
- import {
1707
- Link as AriaLink2
1708
- } from "react-aria-components";
1709
- import { twMerge as twMerge5 } from "tailwind-merge";
1710
- import { jsx as jsx24, jsxs as jsxs17 } from "react/jsx-runtime";
1711
- var iconSizeMap3 = {
1712
- xs: "sm",
1713
- sm: "sm",
1714
- md: "sm",
1715
- lg: "md"
1716
- };
1717
- function ButtonLink({
1718
- variant = "primary",
1719
- size = "md",
1720
- iconLeft,
1721
- iconRight,
1722
- className,
1723
- children,
1724
- ...props
1725
- }) {
1726
- return /* @__PURE__ */ jsxs17(
1727
- AriaLink2,
1728
- {
1729
- ...props,
1730
- className: twMerge5(
1731
- "inline-flex items-center justify-center gap-2 cursor-pointer",
1732
- "rounded-md",
1733
- "font-medium",
1734
- "leading-tight",
1735
- "outline-none transition-colors no-underline",
1736
- "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
1737
- variantStyles[variant],
1738
- sizeStyles[size],
1739
- className
1740
- ),
1741
- children: [
1742
- iconLeft && /* @__PURE__ */ jsx24(Icon, { icon: iconLeft, size: iconSizeMap3[size] }),
1743
- children,
1744
- iconRight && /* @__PURE__ */ jsx24(Icon, { icon: iconRight, size: iconSizeMap3[size] })
1745
- ]
1746
- }
1747
- );
1748
- }
1749
- var squareSizeStyles2 = {
1750
- sm: "h-8 w-8",
1751
- md: "h-10 w-10",
1752
- lg: "h-12 w-12"
1753
- };
1754
- function IconButtonLink({
1755
- icon,
1756
- "aria-label": ariaLabel,
1757
- variant = "ghost",
1758
- size = "md",
1759
- showTooltip = true,
1760
- className,
1761
- ...props
1762
- }) {
1763
- const link = /* @__PURE__ */ jsx24(
1764
- AriaLink2,
1765
- {
1766
- ...props,
1767
- "aria-label": ariaLabel,
1768
- className: twMerge5(
1769
- "inline-flex items-center justify-center cursor-pointer",
1770
- "rounded-md",
1771
- "outline-none transition-colors no-underline",
1772
- "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
1773
- variantStyles[variant],
1774
- squareSizeStyles2[size],
1775
- className
1776
- ),
1777
- children: /* @__PURE__ */ jsx24(Icon, { icon, size: iconSizeMap3[size] })
1778
- }
1779
- );
1780
- if (showTooltip) {
1781
- return /* @__PURE__ */ jsx24(Tooltip, { content: ariaLabel, children: link });
1782
- }
1783
- return link;
1784
- }
1785
-
1786
1863
  // src/components/ToggleButton/ToggleButton.tsx
1787
1864
  import {
1788
- ToggleButton as AriaToggleButton
1865
+ ToggleButton as AriaToggleButton2
1789
1866
  } from "react-aria-components";
1790
- import { twMerge as twMerge6 } from "tailwind-merge";
1791
- import { jsx as jsx25 } from "react/jsx-runtime";
1792
- var squareSizeStyles3 = {
1867
+ import { twMerge as twMerge9 } from "tailwind-merge";
1868
+ import { jsx as jsx23 } from "react/jsx-runtime";
1869
+ var squareSizeStyles2 = {
1793
1870
  xs: "h-6 w-6 text-xs",
1794
1871
  sm: "h-7 w-7 text-sm",
1795
1872
  md: "h-8 w-8 text-base",
@@ -1833,11 +1910,11 @@ function ToggleButton({
1833
1910
  ...props
1834
1911
  }) {
1835
1912
  const styles = variantStyles3[variant];
1836
- return /* @__PURE__ */ jsx25(
1837
- AriaToggleButton,
1913
+ return /* @__PURE__ */ jsx23(
1914
+ AriaToggleButton2,
1838
1915
  {
1839
1916
  ...props,
1840
- className: ({ isSelected }) => twMerge6(
1917
+ className: ({ isSelected }) => twMerge9(
1841
1918
  "inline-flex items-center justify-center gap-2 cursor-pointer",
1842
1919
  isSquare ? "rounded-none" : "rounded-md",
1843
1920
  "font-medium",
@@ -1845,7 +1922,7 @@ function ToggleButton({
1845
1922
  "outline-none transition-colors",
1846
1923
  "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
1847
1924
  "disabled:opacity-50 disabled:pointer-events-none",
1848
- isSquare ? squareSizeStyles3[size] : sizeStyles[size],
1925
+ isSquare ? squareSizeStyles2[size] : sizeStyles[size],
1849
1926
  isSelected ? styles.selected : styles.base,
1850
1927
  className
1851
1928
  )
@@ -1853,78 +1930,6 @@ function ToggleButton({
1853
1930
  );
1854
1931
  }
1855
1932
 
1856
- // src/components/ToggleButtonGroup/ToggleButtonGroup.tsx
1857
- import { createContext as createContext3, useContext as useContext3 } from "react";
1858
- import { twMerge as twMerge7 } from "tailwind-merge";
1859
- import {
1860
- RadioGroup as AriaRadioGroup2,
1861
- Radio as AriaRadio2
1862
- } from "react-aria-components";
1863
- import { jsx as jsx26 } from "react/jsx-runtime";
1864
- var ToggleButtonGroupContext = createContext3({
1865
- size: "md"
1866
- });
1867
- var sizeStyles4 = {
1868
- sm: "px-2.5 py-1 text-xs gap-1",
1869
- md: "px-3 py-1.5 text-sm gap-1.5",
1870
- lg: "px-4 py-2 text-base gap-2"
1871
- };
1872
- var iconOnlySizeStyles = {
1873
- sm: "p-1",
1874
- md: "p-1.5",
1875
- lg: "p-2"
1876
- };
1877
- function ToggleButtonGroup({
1878
- size = "md",
1879
- className,
1880
- children,
1881
- ...props
1882
- }) {
1883
- return /* @__PURE__ */ jsx26(ToggleButtonGroupContext.Provider, { value: { size }, children: /* @__PURE__ */ jsx26(
1884
- AriaRadioGroup2,
1885
- {
1886
- ...props,
1887
- orientation: "horizontal",
1888
- className: twMerge7(
1889
- "inline-flex items-center rounded-lg border border-border bg-muted p-0.5 gap-0.5",
1890
- className
1891
- ),
1892
- children
1893
- }
1894
- ) });
1895
- }
1896
- function ToggleButtonGroupItem({
1897
- children,
1898
- isIconOnly,
1899
- className,
1900
- ...props
1901
- }) {
1902
- const { size } = useContext3(ToggleButtonGroupContext);
1903
- return /* @__PURE__ */ jsx26(
1904
- AriaRadio2,
1905
- {
1906
- ...props,
1907
- className: ({ isSelected, isHovered, isPressed, isDisabled }) => twMerge7(
1908
- // Base layout
1909
- "inline-flex items-center justify-center",
1910
- "rounded-md",
1911
- "font-medium",
1912
- "outline-none transition-colors cursor-pointer",
1913
- // Focus ring
1914
- "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1",
1915
- // Disabled
1916
- isDisabled && "opacity-50 pointer-events-none",
1917
- // Size
1918
- isIconOnly ? iconOnlySizeStyles[size] : sizeStyles4[size],
1919
- // Selected state
1920
- isSelected ? "bg-background text-foreground shadow-sm font-semibold" : isPressed ? "bg-card text-foreground" : isHovered ? "bg-card text-foreground" : "bg-transparent text-muted-foreground",
1921
- className
1922
- ),
1923
- children
1924
- }
1925
- );
1926
- }
1927
-
1928
1933
  // src/components/Menu/Menu.tsx
1929
1934
  import {
1930
1935
  MenuTrigger,
@@ -1932,14 +1937,19 @@ import {
1932
1937
  MenuItem as AriaMenuItem,
1933
1938
  Popover as Popover2
1934
1939
  } from "react-aria-components";
1935
- import { jsx as jsx27, jsxs as jsxs18 } from "react/jsx-runtime";
1936
- var popoverStyles = [
1937
- "bg-background rounded-md",
1938
- "shadow-lg border border-border",
1939
- "py-1 min-w-48",
1940
- "entering:animate-in entering:fade-in entering:zoom-in-95",
1941
- "exiting:animate-out exiting:fade-out exiting:zoom-out-95"
1942
- ].join(" ");
1940
+ import { twMerge as twMerge10 } from "tailwind-merge";
1941
+
1942
+ // src/components/Menu/menuStyles.ts
1943
+ var popoverStyles = `
1944
+ bg-background rounded-md shadow-lg
1945
+ border border-border
1946
+ py-1 min-w-48
1947
+ entering:animate-in entering:fade-in entering:zoom-in-95
1948
+ exiting:animate-out exiting:fade-out exiting:zoom-out-95
1949
+ `;
1950
+
1951
+ // src/components/Menu/Menu.tsx
1952
+ import { jsx as jsx24, jsxs as jsxs18 } from "react/jsx-runtime";
1943
1953
  function Menu({
1944
1954
  items,
1945
1955
  content,
@@ -1954,61 +1964,161 @@ function Menu({
1954
1964
  const selectionProps = selectionMode && selectionMode !== "none" ? { selectionMode, selectedKeys, defaultSelectedKeys, onSelectionChange } : {};
1955
1965
  return /* @__PURE__ */ jsxs18(MenuTrigger, { children: [
1956
1966
  children,
1957
- /* @__PURE__ */ jsx27(
1958
- Popover2,
1967
+ /* @__PURE__ */ jsx24(Popover2, { className: twMerge10(popoverStyles, className), children: items ? /* @__PURE__ */ jsx24(
1968
+ AriaMenu,
1959
1969
  {
1960
- className: [popoverStyles, className].filter(Boolean).join(" "),
1961
- children: items ? /* @__PURE__ */ jsx27(
1962
- AriaMenu,
1970
+ items,
1971
+ onAction: (key) => {
1972
+ const item = items.find((i) => i.id === key);
1973
+ item?.onAction?.();
1974
+ onAction?.(key);
1975
+ },
1976
+ ...selectionProps,
1977
+ className: "outline-none",
1978
+ children: (item) => /* @__PURE__ */ jsxs18(
1979
+ AriaMenuItem,
1980
+ {
1981
+ id: item.id,
1982
+ href: item.href,
1983
+ target: item.target,
1984
+ isDisabled: item.isDisabled,
1985
+ className: [
1986
+ "flex items-center gap-2 px-3 py-2 text-sm outline-none cursor-default",
1987
+ "transition-colors",
1988
+ "focus:bg-muted",
1989
+ "hover:bg-muted",
1990
+ "disabled:opacity-50 disabled:pointer-events-none",
1991
+ item.isDanger ? "text-destructive" : "text-foreground"
1992
+ ].filter(Boolean).join(" "),
1993
+ children: [
1994
+ item.icon && /* @__PURE__ */ jsx24(Icon, { icon: item.icon, size: "sm" }),
1995
+ /* @__PURE__ */ jsx24("span", { className: "flex-1", children: item.label }),
1996
+ item.endContent && /* @__PURE__ */ jsx24("span", { className: "ml-auto flex items-center", children: item.endContent })
1997
+ ]
1998
+ }
1999
+ )
2000
+ }
2001
+ ) : /* @__PURE__ */ jsx24(
2002
+ AriaMenu,
2003
+ {
2004
+ onAction: (key) => onAction?.(key),
2005
+ ...selectionProps,
2006
+ className: "outline-none",
2007
+ children: content
2008
+ }
2009
+ ) })
2010
+ ] });
2011
+ }
2012
+
2013
+ // src/components/Menu/useContextMenu.tsx
2014
+ import {
2015
+ useCallback as useCallback3,
2016
+ useEffect as useEffect3,
2017
+ useRef as useRef5,
2018
+ useState as useState7
2019
+ } from "react";
2020
+ import {
2021
+ Menu as AriaMenu2,
2022
+ MenuTrigger as MenuTrigger2,
2023
+ Popover as Popover3,
2024
+ Pressable
2025
+ } from "react-aria-components";
2026
+ import { twMerge as twMerge11 } from "tailwind-merge";
2027
+ import { jsx as jsx25, jsxs as jsxs19 } from "react/jsx-runtime";
2028
+ function useContextMenu({
2029
+ content,
2030
+ onAction,
2031
+ className
2032
+ }) {
2033
+ const [anchor, setAnchor] = useState7(null);
2034
+ const anchorRef = useRef5(null);
2035
+ const popoverRef = useRef5(null);
2036
+ const isOpen = anchor !== null;
2037
+ const close = useCallback3(() => setAnchor(null), []);
2038
+ const onContextMenu = useCallback3((event) => {
2039
+ event.preventDefault();
2040
+ setAnchor({ x: event.clientX, y: event.clientY });
2041
+ }, []);
2042
+ const onPress = useCallback3((event) => {
2043
+ const rect = event.target.getBoundingClientRect();
2044
+ setAnchor({ x: rect.left, y: rect.bottom });
2045
+ }, []);
2046
+ useEffect3(() => {
2047
+ if (!isOpen) return;
2048
+ const isInside = (target) => popoverRef.current?.contains(target) ?? false;
2049
+ const onPointerDown = (event) => {
2050
+ if (!isInside(event.target)) close();
2051
+ };
2052
+ const onOutsideContextMenu = (event) => {
2053
+ if (isInside(event.target)) return;
2054
+ event.preventDefault();
2055
+ close();
2056
+ };
2057
+ const onKeyDown = (event) => {
2058
+ if (event.key === "Escape") close();
2059
+ };
2060
+ document.addEventListener("pointerdown", onPointerDown, true);
2061
+ document.addEventListener("contextmenu", onOutsideContextMenu, true);
2062
+ document.addEventListener("keydown", onKeyDown, true);
2063
+ return () => {
2064
+ document.removeEventListener("pointerdown", onPointerDown, true);
2065
+ document.removeEventListener("contextmenu", onOutsideContextMenu, true);
2066
+ document.removeEventListener("keydown", onKeyDown, true);
2067
+ };
2068
+ }, [isOpen, close]);
2069
+ const menu = /* @__PURE__ */ jsxs19(
2070
+ MenuTrigger2,
2071
+ {
2072
+ isOpen,
2073
+ onOpenChange: (open) => {
2074
+ if (!open) close();
2075
+ },
2076
+ children: [
2077
+ /* @__PURE__ */ jsx25(Pressable, { children: /* @__PURE__ */ jsx25(
2078
+ "span",
1963
2079
  {
1964
- items,
1965
- onAction: (key) => {
1966
- const item = items.find((i) => i.id === key);
1967
- item?.onAction?.();
1968
- onAction?.(key);
1969
- },
1970
- ...selectionProps,
1971
- className: "outline-none",
1972
- children: (item) => /* @__PURE__ */ jsxs18(
1973
- AriaMenuItem,
2080
+ ref: anchorRef,
2081
+ "aria-hidden": true,
2082
+ className: "pointer-events-none fixed h-0 w-0",
2083
+ style: { left: anchor?.x ?? 0, top: anchor?.y ?? 0 }
2084
+ }
2085
+ ) }),
2086
+ /* @__PURE__ */ jsx25(
2087
+ Popover3,
2088
+ {
2089
+ isNonModal: true,
2090
+ placement: "bottom start",
2091
+ ref: popoverRef,
2092
+ className: twMerge11(popoverStyles, className),
2093
+ children: /* @__PURE__ */ jsx25(
2094
+ AriaMenu2,
1974
2095
  {
1975
- id: item.id,
1976
- href: item.href,
1977
- target: item.target,
1978
- isDisabled: item.isDisabled,
1979
- className: [
1980
- "flex items-center gap-2 px-3 py-2 text-sm outline-none cursor-default",
1981
- "transition-colors",
1982
- "focus:bg-muted",
1983
- "hover:bg-muted",
1984
- "disabled:opacity-50 disabled:pointer-events-none",
1985
- item.isDanger ? "text-destructive" : "text-foreground"
1986
- ].filter(Boolean).join(" "),
1987
- children: [
1988
- item.icon && /* @__PURE__ */ jsx27(Icon, { icon: item.icon, size: "sm" }),
1989
- /* @__PURE__ */ jsx27("span", { className: "flex-1", children: item.label }),
1990
- item.endContent && /* @__PURE__ */ jsx27("span", { className: "ml-auto flex items-center", children: item.endContent })
1991
- ]
2096
+ autoFocus: "first",
2097
+ onAction: (key) => {
2098
+ onAction?.(String(key));
2099
+ close();
2100
+ },
2101
+ className: "outline-none",
2102
+ children: content
1992
2103
  }
1993
2104
  )
1994
2105
  }
1995
- ) : /* @__PURE__ */ jsx27(
1996
- AriaMenu,
1997
- {
1998
- onAction: (key) => onAction?.(key),
1999
- ...selectionProps,
2000
- className: "outline-none",
2001
- children: content
2002
- }
2003
2106
  )
2004
- }
2005
- )
2006
- ] });
2107
+ ]
2108
+ }
2109
+ );
2110
+ return {
2111
+ targetProps: { onContextMenu },
2112
+ triggerProps: { onPress },
2113
+ menu,
2114
+ isOpen,
2115
+ close
2116
+ };
2007
2117
  }
2008
2118
 
2009
2119
  // src/components/Menu/MenuItem.tsx
2010
2120
  import { MenuItem as AriaMenuItem2 } from "react-aria-components";
2011
- import { jsx as jsx28, jsxs as jsxs19 } from "react/jsx-runtime";
2121
+ import { jsx as jsx26, jsxs as jsxs20 } from "react/jsx-runtime";
2012
2122
  function MenuItem({
2013
2123
  id,
2014
2124
  children,
@@ -2022,7 +2132,7 @@ function MenuItem({
2022
2132
  textValue,
2023
2133
  className
2024
2134
  }) {
2025
- return /* @__PURE__ */ jsxs19(
2135
+ return /* @__PURE__ */ jsxs20(
2026
2136
  AriaMenuItem2,
2027
2137
  {
2028
2138
  id,
@@ -2041,9 +2151,9 @@ function MenuItem({
2041
2151
  className
2042
2152
  ].filter(Boolean).join(" "),
2043
2153
  children: [
2044
- icon && /* @__PURE__ */ jsx28(Icon, { icon, size: "sm" }),
2045
- /* @__PURE__ */ jsx28("span", { className: "flex-1", children }),
2046
- endContent && /* @__PURE__ */ jsx28("span", { className: "ml-auto flex items-center", children: endContent })
2154
+ icon && /* @__PURE__ */ jsx26(Icon, { icon, size: "sm" }),
2155
+ /* @__PURE__ */ jsx26("span", { className: "flex-1", children }),
2156
+ endContent && /* @__PURE__ */ jsx26("span", { className: "ml-auto flex items-center", children: endContent })
2047
2157
  ]
2048
2158
  }
2049
2159
  );
@@ -2051,8 +2161,8 @@ function MenuItem({
2051
2161
 
2052
2162
  // src/components/Menu/MenuCheckboxItem.tsx
2053
2163
  import { MenuItem as AriaMenuItem3 } from "react-aria-components";
2054
- import { Check as Check3 } from "lucide-react";
2055
- import { Fragment as Fragment7, jsx as jsx29, jsxs as jsxs20 } from "react/jsx-runtime";
2164
+ import { Check as Check4 } from "lucide-react";
2165
+ import { Fragment as Fragment7, jsx as jsx27, jsxs as jsxs21 } from "react/jsx-runtime";
2056
2166
  function MenuCheckboxItem({
2057
2167
  id,
2058
2168
  children,
@@ -2060,7 +2170,7 @@ function MenuCheckboxItem({
2060
2170
  isDisabled,
2061
2171
  className
2062
2172
  }) {
2063
- return /* @__PURE__ */ jsx29(
2173
+ return /* @__PURE__ */ jsx27(
2064
2174
  AriaMenuItem3,
2065
2175
  {
2066
2176
  id,
@@ -2076,9 +2186,9 @@ function MenuCheckboxItem({
2076
2186
  isSelected ? "font-medium" : "",
2077
2187
  className
2078
2188
  ].filter(Boolean).join(" "),
2079
- children: ({ isSelected }) => /* @__PURE__ */ jsxs20(Fragment7, { children: [
2080
- /* @__PURE__ */ jsx29("span", { className: "flex items-center justify-center w-4 h-4 shrink-0", children: isSelected && /* @__PURE__ */ jsx29(Check3, { size: 14, className: "text-primary", "aria-hidden": "true" }) }),
2081
- /* @__PURE__ */ jsx29("span", { className: "flex-1", children })
2189
+ children: ({ isSelected }) => /* @__PURE__ */ jsxs21(Fragment7, { children: [
2190
+ /* @__PURE__ */ jsx27("span", { className: "flex items-center justify-center w-4 h-4 shrink-0", children: isSelected && /* @__PURE__ */ jsx27(Check4, { size: 14, className: "text-primary", "aria-hidden": "true" }) }),
2191
+ /* @__PURE__ */ jsx27("span", { className: "flex-1", children })
2082
2192
  ] })
2083
2193
  }
2084
2194
  );
@@ -2089,15 +2199,15 @@ import {
2089
2199
  MenuSection as AriaMenuSection,
2090
2200
  Header
2091
2201
  } from "react-aria-components";
2092
- import { jsx as jsx30, jsxs as jsxs21 } from "react/jsx-runtime";
2202
+ import { jsx as jsx28, jsxs as jsxs22 } from "react/jsx-runtime";
2093
2203
  function MenuSection({
2094
2204
  header,
2095
2205
  children,
2096
2206
  "aria-label": ariaLabel,
2097
2207
  className
2098
2208
  }) {
2099
- return /* @__PURE__ */ jsxs21(AriaMenuSection, { className, "aria-label": ariaLabel, children: [
2100
- header && /* @__PURE__ */ jsx30(
2209
+ return /* @__PURE__ */ jsxs22(AriaMenuSection, { className, "aria-label": ariaLabel, children: [
2210
+ header && /* @__PURE__ */ jsx28(
2101
2211
  Header,
2102
2212
  {
2103
2213
  className: [
@@ -2116,16 +2226,16 @@ function MenuSection({
2116
2226
 
2117
2227
  // src/components/Menu/MenuHeader.tsx
2118
2228
  import { Header as Header2 } from "react-aria-components";
2119
- import { jsx as jsx31 } from "react/jsx-runtime";
2229
+ import { jsx as jsx29 } from "react/jsx-runtime";
2120
2230
  function MenuHeader({ children, className }) {
2121
- return /* @__PURE__ */ jsx31(Header2, { className, children });
2231
+ return /* @__PURE__ */ jsx29(Header2, { className, children });
2122
2232
  }
2123
2233
 
2124
2234
  // src/components/Menu/MenuSeparator.tsx
2125
2235
  import { Separator } from "react-aria-components";
2126
- import { jsx as jsx32 } from "react/jsx-runtime";
2236
+ import { jsx as jsx30 } from "react/jsx-runtime";
2127
2237
  function MenuSeparator({ className }) {
2128
- return /* @__PURE__ */ jsx32(
2238
+ return /* @__PURE__ */ jsx30(
2129
2239
  Separator,
2130
2240
  {
2131
2241
  className: [
@@ -2142,17 +2252,17 @@ import {
2142
2252
  Popover as AriaPopover,
2143
2253
  Button as AriaButton3
2144
2254
  } from "react-aria-components";
2145
- import { twMerge as twMerge8 } from "tailwind-merge";
2146
- import { jsx as jsx33 } from "react/jsx-runtime";
2147
- function Popover3({ children, isOpen, onOpenChange }) {
2148
- return /* @__PURE__ */ jsx33(DialogTrigger, { isOpen, onOpenChange, children });
2255
+ import { twMerge as twMerge12 } from "tailwind-merge";
2256
+ import { jsx as jsx31 } from "react/jsx-runtime";
2257
+ function Popover4({ children, isOpen, onOpenChange }) {
2258
+ return /* @__PURE__ */ jsx31(DialogTrigger, { isOpen, onOpenChange, children });
2149
2259
  }
2150
2260
  function PopoverTrigger({ children, className }) {
2151
2261
  const cx = `
2152
2262
  inline-flex items-center bg-transparent border-none p-0 outline-none cursor-pointer
2153
2263
  focus-visible:ring-2 focus-visible:ring-ring focus-visible:rounded-sm
2154
2264
  `;
2155
- return /* @__PURE__ */ jsx33(AriaButton3, { className: twMerge8(cx, className), children });
2265
+ return /* @__PURE__ */ jsx31(AriaButton3, { className: twMerge12(cx, className), children });
2156
2266
  }
2157
2267
  function PopoverContent({
2158
2268
  placement = "bottom",
@@ -2173,33 +2283,33 @@ function PopoverContent({
2173
2283
  entering:placement-left:slide-in-from-right-1
2174
2284
  entering:placement-right:slide-in-from-left-1
2175
2285
  `;
2176
- return /* @__PURE__ */ jsx33(
2286
+ return /* @__PURE__ */ jsx31(
2177
2287
  AriaPopover,
2178
2288
  {
2179
2289
  ...rest,
2180
2290
  placement,
2181
2291
  offset: offsetPx,
2182
- className: twMerge8(cx, className),
2292
+ className: twMerge12(cx, className),
2183
2293
  children
2184
2294
  }
2185
2295
  );
2186
2296
  }
2187
2297
 
2188
2298
  // src/components/Tabs/Tabs.tsx
2189
- import { createContext as createContext4, useContext as useContext4 } from "react";
2190
- import { twMerge as twMerge9 } from "tailwind-merge";
2299
+ import { createContext as createContext2, useContext as useContext2 } from "react";
2300
+ import { twMerge as twMerge13 } from "tailwind-merge";
2191
2301
  import {
2192
2302
  Tabs as AriaTabs,
2193
2303
  TabList as AriaTabList,
2194
2304
  Tab as AriaTab,
2195
2305
  TabPanel as AriaTabPanel
2196
2306
  } from "react-aria-components";
2197
- import { jsx as jsx34 } from "react/jsx-runtime";
2198
- var TabsContext = createContext4({
2307
+ import { jsx as jsx32 } from "react/jsx-runtime";
2308
+ var TabsContext = createContext2({
2199
2309
  variant: "underline",
2200
2310
  size: "md"
2201
2311
  });
2202
- var sizeStyles5 = {
2312
+ var sizeStyles4 = {
2203
2313
  sm: "px-3 py-1.5 text-sm",
2204
2314
  md: "px-4 py-2 text-base",
2205
2315
  lg: "px-6 py-3 text-lg"
@@ -2212,12 +2322,12 @@ function Tabs({
2212
2322
  children,
2213
2323
  ...props
2214
2324
  }) {
2215
- return /* @__PURE__ */ jsx34(TabsContext.Provider, { value: { variant, size }, children: /* @__PURE__ */ jsx34(
2325
+ return /* @__PURE__ */ jsx32(TabsContext.Provider, { value: { variant, size }, children: /* @__PURE__ */ jsx32(
2216
2326
  AriaTabs,
2217
2327
  {
2218
2328
  ...props,
2219
2329
  orientation,
2220
- className: twMerge9(
2330
+ className: twMerge13(
2221
2331
  orientation === "vertical" ? "flex" : "",
2222
2332
  className
2223
2333
  ),
@@ -2229,14 +2339,14 @@ function TabList({
2229
2339
  className,
2230
2340
  ...props
2231
2341
  }) {
2232
- const { variant } = useContext4(TabsContext);
2342
+ const { variant } = useContext2(TabsContext);
2233
2343
  const baseStyles = variant === "unstyled" ? "flex items-center" : variant === "underline" ? "flex items-center border-b border-border" : "inline-flex items-center bg-muted rounded-lg p-1 gap-1";
2234
2344
  const verticalStyles = variant === "unstyled" ? "flex-col" : variant === "underline" ? "flex-col border-b-0 border-r border-border" : "flex-col";
2235
- return /* @__PURE__ */ jsx34(
2345
+ return /* @__PURE__ */ jsx32(
2236
2346
  AriaTabList,
2237
2347
  {
2238
2348
  ...props,
2239
- className: ({ orientation }) => twMerge9(
2349
+ className: ({ orientation }) => twMerge13(
2240
2350
  baseStyles,
2241
2351
  orientation === "vertical" ? verticalStyles : "",
2242
2352
  className
@@ -2245,21 +2355,21 @@ function TabList({
2245
2355
  );
2246
2356
  }
2247
2357
  function Tab({ className, ...props }) {
2248
- const { variant, size } = useContext4(TabsContext);
2249
- return /* @__PURE__ */ jsx34(
2358
+ const { variant, size } = useContext2(TabsContext);
2359
+ return /* @__PURE__ */ jsx32(
2250
2360
  AriaTab,
2251
2361
  {
2252
2362
  ...props,
2253
2363
  className: ({ isSelected, isDisabled, isHovered, isPressed }) => {
2254
2364
  if (variant === "unstyled") {
2255
- return twMerge9(
2365
+ return twMerge13(
2256
2366
  "cursor-pointer outline-none",
2257
2367
  "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
2258
2368
  isDisabled ? "opacity-50 pointer-events-none" : "",
2259
2369
  className
2260
2370
  );
2261
2371
  }
2262
- return twMerge9(
2372
+ return twMerge13(
2263
2373
  // Base
2264
2374
  "cursor-pointer outline-none transition-colors",
2265
2375
  "font-medium",
@@ -2268,7 +2378,7 @@ function Tab({ className, ...props }) {
2268
2378
  // Disabled
2269
2379
  isDisabled ? "opacity-50 pointer-events-none" : "",
2270
2380
  // Size
2271
- sizeStyles5[size],
2381
+ sizeStyles4[size],
2272
2382
  ...getTabVariantStyles(variant, {
2273
2383
  isSelected,
2274
2384
  isHovered,
@@ -2302,12 +2412,12 @@ function getTabVariantStyles(variant, state) {
2302
2412
  ];
2303
2413
  }
2304
2414
  function TabPanel({ className, ...props }) {
2305
- const { variant } = useContext4(TabsContext);
2306
- return /* @__PURE__ */ jsx34(
2415
+ const { variant } = useContext2(TabsContext);
2416
+ return /* @__PURE__ */ jsx32(
2307
2417
  AriaTabPanel,
2308
2418
  {
2309
2419
  ...props,
2310
- className: twMerge9(
2420
+ className: twMerge13(
2311
2421
  variant === "unstyled" ? "outline-none" : "mt-4 outline-none",
2312
2422
  className
2313
2423
  )
@@ -2324,17 +2434,17 @@ import {
2324
2434
  } from "react-aria-components";
2325
2435
 
2326
2436
  // src/components/SegmentedControl/SegmentedControl.tsx
2327
- import { createContext as createContext5, useContext as useContext5 } from "react";
2328
- import { twMerge as twMerge10 } from "tailwind-merge";
2437
+ import { createContext as createContext3, useContext as useContext3 } from "react";
2438
+ import { twMerge as twMerge14 } from "tailwind-merge";
2329
2439
  import {
2330
2440
  ToggleButtonGroup as AriaToggleButtonGroup,
2331
- ToggleButton as AriaToggleButton2
2441
+ ToggleButton as AriaToggleButton3
2332
2442
  } from "react-aria-components";
2333
- import { jsx as jsx35 } from "react/jsx-runtime";
2334
- var SegmentedControlContext = createContext5({
2443
+ import { jsx as jsx33 } from "react/jsx-runtime";
2444
+ var SegmentedControlContext = createContext3({
2335
2445
  size: "md"
2336
2446
  });
2337
- var sizeStyles6 = {
2447
+ var sizeStyles5 = {
2338
2448
  sm: "px-2.5 py-1 text-xs",
2339
2449
  md: "px-3 py-1.5 text-sm",
2340
2450
  lg: "px-4 py-2 text-base"
@@ -2350,7 +2460,7 @@ function SegmentedControl({
2350
2460
  ...props
2351
2461
  }) {
2352
2462
  const isNoneMode = selectionMode === "none";
2353
- return /* @__PURE__ */ jsx35(SegmentedControlContext.Provider, { value: { size }, children: /* @__PURE__ */ jsx35(
2463
+ return /* @__PURE__ */ jsx33(SegmentedControlContext.Provider, { value: { size }, children: /* @__PURE__ */ jsx33(
2354
2464
  AriaToggleButtonGroup,
2355
2465
  {
2356
2466
  ...props,
@@ -2358,7 +2468,7 @@ function SegmentedControl({
2358
2468
  selectedKeys: isNoneMode ? /* @__PURE__ */ new Set() : selectedKeys,
2359
2469
  defaultSelectedKeys: isNoneMode ? void 0 : defaultSelectedKeys,
2360
2470
  onSelectionChange: isNoneMode ? void 0 : onSelectionChange,
2361
- className: twMerge10(
2471
+ className: twMerge14(
2362
2472
  "inline-flex items-center rounded-lg border border-border bg-muted p-0.5 gap-0.5",
2363
2473
  className
2364
2474
  ),
@@ -2370,12 +2480,12 @@ function SegmentedControlItem({
2370
2480
  className,
2371
2481
  ...props
2372
2482
  }) {
2373
- const { size } = useContext5(SegmentedControlContext);
2374
- return /* @__PURE__ */ jsx35(
2375
- AriaToggleButton2,
2483
+ const { size } = useContext3(SegmentedControlContext);
2484
+ return /* @__PURE__ */ jsx33(
2485
+ AriaToggleButton3,
2376
2486
  {
2377
2487
  ...props,
2378
- className: ({ isSelected, isHovered, isPressed, isDisabled }) => twMerge10(
2488
+ className: ({ isSelected, isHovered, isPressed, isDisabled }) => twMerge14(
2379
2489
  // Base layout
2380
2490
  "inline-flex items-center justify-center",
2381
2491
  "rounded-md",
@@ -2386,7 +2496,7 @@ function SegmentedControlItem({
2386
2496
  // Disabled
2387
2497
  isDisabled && "opacity-50 pointer-events-none",
2388
2498
  // Size
2389
- sizeStyles6[size],
2499
+ sizeStyles5[size],
2390
2500
  // Selected state
2391
2501
  isSelected ? "bg-background text-foreground shadow-sm font-semibold" : isPressed ? "bg-card text-foreground" : isHovered ? "bg-card text-foreground" : "bg-transparent text-muted-foreground",
2392
2502
  className
@@ -2396,8 +2506,8 @@ function SegmentedControlItem({
2396
2506
  }
2397
2507
 
2398
2508
  // src/components/Badge/Badge.tsx
2399
- import { twMerge as twMerge11 } from "tailwind-merge";
2400
- import { jsx as jsx36, jsxs as jsxs22 } from "react/jsx-runtime";
2509
+ import { twMerge as twMerge15 } from "tailwind-merge";
2510
+ import { jsx as jsx34, jsxs as jsxs23 } from "react/jsx-runtime";
2401
2511
  var variantStyles4 = {
2402
2512
  neutral: "bg-(--color-badge-neutral-bg) text-(--color-badge-neutral-text)",
2403
2513
  purple: "bg-(--color-badge-purple-bg) text-(--color-badge-purple-text)",
@@ -2407,33 +2517,29 @@ var variantStyles4 = {
2407
2517
  green: "bg-(--color-badge-green-bg) text-(--color-badge-green-text)",
2408
2518
  amber: "bg-(--color-badge-amber-bg) text-(--color-badge-amber-text)"
2409
2519
  };
2410
- var sizeStyles7 = {
2520
+ var sizeStyles6 = {
2411
2521
  sm: "px-1.5 py-0.5",
2412
2522
  md: "px-2 py-0.5"
2413
2523
  };
2414
- var iconSizeMap4 = {
2415
- sm: 12,
2416
- md: 14
2417
- };
2418
2524
  function Badge({
2419
2525
  children,
2420
2526
  variant = "neutral",
2421
2527
  size = "sm",
2422
- icon: IconComponent,
2528
+ icon,
2423
2529
  className
2424
2530
  }) {
2425
- return /* @__PURE__ */ jsxs22(
2531
+ return /* @__PURE__ */ jsxs23(
2426
2532
  "span",
2427
2533
  {
2428
- className: twMerge11(
2534
+ className: twMerge15(
2429
2535
  "inline-flex items-center gap-1 rounded-full",
2430
- "text-xs font-medium leading-tight",
2536
+ "text-xs font-medium leading-tight tracking-wider tabular-nums",
2431
2537
  variantStyles4[variant],
2432
- sizeStyles7[size],
2538
+ sizeStyles6[size],
2433
2539
  className
2434
2540
  ),
2435
2541
  children: [
2436
- IconComponent && /* @__PURE__ */ jsx36(IconComponent, { size: iconSizeMap4[size], "aria-hidden": "true" }),
2542
+ icon && /* @__PURE__ */ jsx34(Icon, { icon, size: "xs" }),
2437
2543
  children
2438
2544
  ]
2439
2545
  }
@@ -2441,9 +2547,9 @@ function Badge({
2441
2547
  }
2442
2548
 
2443
2549
  // src/components/Card/Card.tsx
2444
- import { useCallback as useCallback3 } from "react";
2445
- import { twMerge as twMerge12 } from "tailwind-merge";
2446
- import { Fragment as Fragment8, jsx as jsx37, jsxs as jsxs23 } from "react/jsx-runtime";
2550
+ import { useCallback as useCallback4 } from "react";
2551
+ import { twMerge as twMerge16 } from "tailwind-merge";
2552
+ import { Fragment as Fragment8, jsx as jsx35, jsxs as jsxs24 } from "react/jsx-runtime";
2447
2553
  var paddingStyles = {
2448
2554
  none: "p-0",
2449
2555
  sm: "p-3",
@@ -2461,13 +2567,13 @@ function Card({
2461
2567
  className
2462
2568
  }) {
2463
2569
  const isInteractive = interactive || !!href || !!onPress;
2464
- const containerClass = twMerge12(
2570
+ const containerClass = twMerge16(
2465
2571
  "bg-background border border-border rounded-lg overflow-hidden shadow-sm",
2466
2572
  isInteractive && "transition-all hover:shadow-md hover:border-ring cursor-pointer",
2467
2573
  (href || onPress) && "block focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 outline-none",
2468
2574
  className
2469
2575
  );
2470
- const handleKeyDown = useCallback3(
2576
+ const handleKeyDown = useCallback4(
2471
2577
  (e) => {
2472
2578
  if (onPress && (e.key === "Enter" || e.key === " ")) {
2473
2579
  e.preventDefault();
@@ -2476,22 +2582,22 @@ function Card({
2476
2582
  },
2477
2583
  [onPress]
2478
2584
  );
2479
- const content = /* @__PURE__ */ jsxs23(Fragment8, { children: [
2480
- header && /* @__PURE__ */ jsx37(
2585
+ const content = /* @__PURE__ */ jsxs24(Fragment8, { children: [
2586
+ header && /* @__PURE__ */ jsx35(
2481
2587
  "div",
2482
2588
  {
2483
- className: twMerge12(
2589
+ className: twMerge16(
2484
2590
  "border-b border-border",
2485
2591
  paddingStyles[padding]
2486
2592
  ),
2487
2593
  children: header
2488
2594
  }
2489
2595
  ),
2490
- /* @__PURE__ */ jsx37("div", { className: paddingStyles[padding], children }),
2491
- footer && /* @__PURE__ */ jsx37(
2596
+ /* @__PURE__ */ jsx35("div", { className: paddingStyles[padding], children }),
2597
+ footer && /* @__PURE__ */ jsx35(
2492
2598
  "div",
2493
2599
  {
2494
- className: twMerge12(
2600
+ className: twMerge16(
2495
2601
  "border-t border-border",
2496
2602
  paddingStyles[padding]
2497
2603
  ),
@@ -2500,10 +2606,10 @@ function Card({
2500
2606
  )
2501
2607
  ] });
2502
2608
  if (href) {
2503
- return /* @__PURE__ */ jsx37("a", { href, className: containerClass, children: content });
2609
+ return /* @__PURE__ */ jsx35("a", { href, className: containerClass, children: content });
2504
2610
  }
2505
2611
  if (onPress) {
2506
- return /* @__PURE__ */ jsx37(
2612
+ return /* @__PURE__ */ jsx35(
2507
2613
  "div",
2508
2614
  {
2509
2615
  role: "button",
@@ -2515,13 +2621,13 @@ function Card({
2515
2621
  }
2516
2622
  );
2517
2623
  }
2518
- return /* @__PURE__ */ jsx37("div", { className: containerClass, children: content });
2624
+ return /* @__PURE__ */ jsx35("div", { className: containerClass, children: content });
2519
2625
  }
2520
2626
 
2521
2627
  // src/components/DeltaIndicator/DeltaIndicator.tsx
2522
- import { ArrowUp, ArrowDown, Minus } from "lucide-react";
2523
- import { twMerge as twMerge13 } from "tailwind-merge";
2524
- import { jsx as jsx38, jsxs as jsxs24 } from "react/jsx-runtime";
2628
+ import { ArrowUp as ArrowUp2, ArrowDown as ArrowDown2, Minus as Minus2 } from "lucide-react";
2629
+ import { twMerge as twMerge17 } from "tailwind-merge";
2630
+ import { jsx as jsx36, jsxs as jsxs25 } from "react/jsx-runtime";
2525
2631
  function getDirection(current, previous) {
2526
2632
  const diff = current - previous;
2527
2633
  if (diff > 0) return "increase";
@@ -2553,9 +2659,9 @@ var reverseDirectionColors = {
2553
2659
  flat: "text-(--color-delta-flat-text)"
2554
2660
  };
2555
2661
  var directionIcons = {
2556
- increase: ArrowUp,
2557
- decrease: ArrowDown,
2558
- flat: Minus
2662
+ increase: ArrowUp2,
2663
+ decrease: ArrowDown2,
2664
+ flat: Minus2
2559
2665
  };
2560
2666
  var directionBgColors = {
2561
2667
  increase: "bg-(--color-delta-increase-bg)",
@@ -2574,16 +2680,16 @@ function DeltaIndicator({
2574
2680
  className
2575
2681
  }) {
2576
2682
  if (unavailable) {
2577
- return /* @__PURE__ */ jsxs24(
2683
+ return /* @__PURE__ */ jsxs25(
2578
2684
  "span",
2579
2685
  {
2580
- className: twMerge13(
2686
+ className: twMerge17(
2581
2687
  "inline-flex items-center gap-1 font-medium",
2582
2688
  "text-muted-foreground",
2583
2689
  className
2584
2690
  ),
2585
2691
  children: [
2586
- label && /* @__PURE__ */ jsx38("span", { className: "text-sm text-muted-foreground mr-1", children: label }),
2692
+ label && /* @__PURE__ */ jsx36("span", { className: "text-sm text-muted-foreground mr-1", children: label }),
2587
2693
  unavailableText
2588
2694
  ]
2589
2695
  }
@@ -2613,10 +2719,10 @@ function DeltaIndicator({
2613
2719
  }
2614
2720
  }
2615
2721
  const isPill = mode === "pill";
2616
- return /* @__PURE__ */ jsxs24(
2722
+ return /* @__PURE__ */ jsxs25(
2617
2723
  "span",
2618
2724
  {
2619
- className: twMerge13(
2725
+ className: twMerge17(
2620
2726
  "inline-flex items-center gap-1 font-medium",
2621
2727
  colorStyles2,
2622
2728
  isPill && [
@@ -2627,8 +2733,8 @@ function DeltaIndicator({
2627
2733
  className
2628
2734
  ),
2629
2735
  children: [
2630
- label && /* @__PURE__ */ jsx38("span", { className: "text-sm text-muted-foreground mr-1", children: label }),
2631
- /* @__PURE__ */ jsx38(IconComponent, { size: 14, "aria-hidden": true }),
2736
+ label && /* @__PURE__ */ jsx36("span", { className: "text-sm text-muted-foreground mr-1", children: label }),
2737
+ /* @__PURE__ */ jsx36(IconComponent, { size: 14, "aria-hidden": true }),
2632
2738
  valueText
2633
2739
  ]
2634
2740
  }
@@ -2636,8 +2742,8 @@ function DeltaIndicator({
2636
2742
  }
2637
2743
 
2638
2744
  // src/components/ProgressBar/ProgressBar.tsx
2639
- import { twMerge as twMerge14 } from "tailwind-merge";
2640
- import { jsx as jsx39, jsxs as jsxs25 } from "react/jsx-runtime";
2745
+ import { twMerge as twMerge18 } from "tailwind-merge";
2746
+ import { jsx as jsx37, jsxs as jsxs26 } from "react/jsx-runtime";
2641
2747
  var fillStyles = {
2642
2748
  brand: "bg-(--color-progress-fill)",
2643
2749
  success: "bg-(--color-progress-fill-success)",
@@ -2645,7 +2751,7 @@ var fillStyles = {
2645
2751
  danger: "bg-(--color-progress-fill-danger)",
2646
2752
  neutral: "bg-muted-foreground"
2647
2753
  };
2648
- var sizeStyles8 = {
2754
+ var sizeStyles7 = {
2649
2755
  sm: "h-1.5",
2650
2756
  md: "h-3",
2651
2757
  lg: "h-4"
@@ -2660,12 +2766,12 @@ function ProgressBar({
2660
2766
  className
2661
2767
  }) {
2662
2768
  const clampedValue = Math.min(100, Math.max(0, value));
2663
- return /* @__PURE__ */ jsxs25("div", { className: twMerge14("w-full", className), children: [
2664
- (label || description || showValue) && /* @__PURE__ */ jsxs25("div", { className: "flex items-center justify-between mb-2", children: [
2665
- /* @__PURE__ */ jsx39("span", { className: "text-sm font-medium text-foreground", children: label }),
2666
- /* @__PURE__ */ jsx39("span", { className: "text-sm text-muted-foreground", children: description ?? (showValue ? `${clampedValue}%` : null) })
2769
+ return /* @__PURE__ */ jsxs26("div", { className: twMerge18("w-full", className), children: [
2770
+ (label || description || showValue) && /* @__PURE__ */ jsxs26("div", { className: "flex items-center justify-between mb-2", children: [
2771
+ /* @__PURE__ */ jsx37("span", { className: "text-sm font-medium text-foreground", children: label }),
2772
+ /* @__PURE__ */ jsx37("span", { className: "text-sm text-muted-foreground", children: description ?? (showValue ? `${clampedValue}%` : null) })
2667
2773
  ] }),
2668
- /* @__PURE__ */ jsx39(
2774
+ /* @__PURE__ */ jsx37(
2669
2775
  "div",
2670
2776
  {
2671
2777
  role: "progressbar",
@@ -2673,14 +2779,14 @@ function ProgressBar({
2673
2779
  "aria-valuemin": 0,
2674
2780
  "aria-valuemax": 100,
2675
2781
  "aria-label": label ?? "Progress",
2676
- className: twMerge14(
2782
+ className: twMerge18(
2677
2783
  "w-full rounded-full bg-(--color-progress-track)",
2678
- sizeStyles8[size]
2784
+ sizeStyles7[size]
2679
2785
  ),
2680
- children: /* @__PURE__ */ jsx39(
2786
+ children: /* @__PURE__ */ jsx37(
2681
2787
  "div",
2682
2788
  {
2683
- className: twMerge14(
2789
+ className: twMerge18(
2684
2790
  "h-full rounded-full transition-all duration-300",
2685
2791
  fillStyles[variant]
2686
2792
  ),
@@ -2693,37 +2799,36 @@ function ProgressBar({
2693
2799
  }
2694
2800
 
2695
2801
  // src/components/Banner/Banner.tsx
2696
- import { useState as useState6 } from "react";
2802
+ import { useState as useState8 } from "react";
2697
2803
  import {
2698
- Info as Info2,
2699
- AlertTriangle,
2700
- AlertCircle,
2701
- CheckCircle2,
2702
- X as X3
2804
+ Info as Info3,
2805
+ AlertTriangle as AlertTriangle2,
2806
+ AlertCircle as AlertCircle2,
2807
+ CheckCircle2 as CheckCircle22
2703
2808
  } from "lucide-react";
2704
- import { twMerge as twMerge15 } from "tailwind-merge";
2705
- import { jsx as jsx40, jsxs as jsxs26 } from "react/jsx-runtime";
2809
+ import { twMerge as twMerge19 } from "tailwind-merge";
2810
+ import { jsx as jsx38, jsxs as jsxs27 } from "react/jsx-runtime";
2706
2811
  var variantConfig2 = {
2707
2812
  info: {
2708
- icon: Info2,
2813
+ icon: Info3,
2709
2814
  containerClass: "bg-info-surface border-info-border text-info-surface-foreground",
2710
2815
  iconClass: "text-info",
2711
2816
  role: "status"
2712
2817
  },
2713
2818
  warning: {
2714
- icon: AlertTriangle,
2819
+ icon: AlertTriangle2,
2715
2820
  containerClass: "bg-warning-surface border-warning-border text-warning-surface-foreground",
2716
2821
  iconClass: "text-warning",
2717
2822
  role: "alert"
2718
2823
  },
2719
2824
  danger: {
2720
- icon: AlertCircle,
2825
+ icon: AlertCircle2,
2721
2826
  containerClass: "bg-destructive-surface border-destructive-border text-destructive-surface-foreground",
2722
2827
  iconClass: "text-destructive",
2723
2828
  role: "alert"
2724
2829
  },
2725
2830
  success: {
2726
- icon: CheckCircle2,
2831
+ icon: CheckCircle22,
2727
2832
  containerClass: "bg-success-surface border-success-border text-success-surface-foreground",
2728
2833
  iconClass: "text-success",
2729
2834
  role: "status"
@@ -2738,48 +2843,48 @@ function Banner({
2738
2843
  onDismiss,
2739
2844
  className
2740
2845
  }) {
2741
- const [dismissed, setDismissed] = useState6(false);
2846
+ const [dismissed, setDismissed] = useState8(false);
2742
2847
  if (dismissed) return null;
2743
2848
  const config = variantConfig2[variant];
2744
- const IconComponent = icon ?? config.icon;
2849
+ const resolvedIcon = icon ?? config.icon;
2745
2850
  const handleDismiss = () => {
2746
2851
  setDismissed(true);
2747
2852
  onDismiss?.();
2748
2853
  };
2749
- return /* @__PURE__ */ jsxs26(
2854
+ return /* @__PURE__ */ jsxs27(
2750
2855
  "div",
2751
2856
  {
2752
2857
  role: config.role,
2753
- className: twMerge15(
2858
+ className: twMerge19(
2754
2859
  "flex items-start gap-3 rounded-lg border px-4 py-3",
2755
2860
  "text-sm",
2756
2861
  config.containerClass,
2757
2862
  className
2758
2863
  ),
2759
2864
  children: [
2760
- /* @__PURE__ */ jsx40(
2761
- IconComponent,
2865
+ /* @__PURE__ */ jsx38(
2866
+ Icon,
2762
2867
  {
2763
- size: 20,
2764
- className: twMerge15("shrink-0 mt-0.5", config.iconClass),
2765
- "aria-hidden": "true"
2868
+ icon: resolvedIcon,
2869
+ size: "md",
2870
+ className: twMerge19("mt-0.5", config.iconClass)
2766
2871
  }
2767
2872
  ),
2768
- /* @__PURE__ */ jsxs26("div", { className: "flex-1", children: [
2769
- title && /* @__PURE__ */ jsxs26("span", { className: "font-medium", children: [
2873
+ /* @__PURE__ */ jsxs27("div", { className: "flex-1", children: [
2874
+ title && /* @__PURE__ */ jsxs27("span", { className: "font-medium", children: [
2770
2875
  title,
2771
2876
  " \u2014 "
2772
2877
  ] }),
2773
2878
  children
2774
2879
  ] }),
2775
- dismissible && /* @__PURE__ */ jsx40(
2880
+ dismissible && /* @__PURE__ */ jsx38(
2776
2881
  "button",
2777
2882
  {
2778
2883
  type: "button",
2779
2884
  onClick: handleDismiss,
2780
2885
  className: "shrink-0 rounded-sm p-0.5 opacity-70 hover:opacity-100 transition-opacity outline-none focus-visible:ring-2 focus-visible:ring-current",
2781
2886
  "aria-label": "Dismiss",
2782
- children: /* @__PURE__ */ jsx40(X3, { size: 16, "aria-hidden": "true" })
2887
+ children: /* @__PURE__ */ jsx38(Icon, { icon: "X", size: "sm" })
2783
2888
  }
2784
2889
  )
2785
2890
  ]
@@ -2788,8 +2893,8 @@ function Banner({
2788
2893
  }
2789
2894
 
2790
2895
  // src/components/MetricCard/MetricCard.tsx
2791
- import { twMerge as twMerge16 } from "tailwind-merge";
2792
- import { Fragment as Fragment9, jsx as jsx41, jsxs as jsxs27 } from "react/jsx-runtime";
2896
+ import { twMerge as twMerge20 } from "tailwind-merge";
2897
+ import { Fragment as Fragment9, jsx as jsx39, jsxs as jsxs28 } from "react/jsx-runtime";
2793
2898
  var sizeConfig = {
2794
2899
  sm: {
2795
2900
  padding: "p-3",
@@ -2811,58 +2916,58 @@ function MetricCard({
2811
2916
  className
2812
2917
  }) {
2813
2918
  const config = sizeConfig[size];
2814
- const containerClass = twMerge16(
2919
+ const containerClass = twMerge20(
2815
2920
  "bg-background border border-border rounded-lg shadow-sm",
2816
2921
  config.padding,
2817
2922
  href && "block transition-shadow hover:shadow-md hover:border-ring focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 outline-none",
2818
2923
  className
2819
2924
  );
2820
- const content = /* @__PURE__ */ jsxs27(Fragment9, { children: [
2821
- /* @__PURE__ */ jsx41("div", { className: twMerge16(config.labelClass, "text-muted-foreground"), children: label }),
2822
- /* @__PURE__ */ jsx41(
2925
+ const content = /* @__PURE__ */ jsxs28(Fragment9, { children: [
2926
+ /* @__PURE__ */ jsx39("div", { className: twMerge20(config.labelClass, "text-muted-foreground"), children: label }),
2927
+ /* @__PURE__ */ jsx39(
2823
2928
  "div",
2824
2929
  {
2825
- className: twMerge16(
2930
+ className: twMerge20(
2826
2931
  config.valueClass,
2827
2932
  "font-semibold text-foreground mt-1 tabular-nums"
2828
2933
  ),
2829
2934
  children: value
2830
2935
  }
2831
2936
  ),
2832
- secondary && /* @__PURE__ */ jsx41("div", { className: "mt-1 text-sm", children: secondary })
2937
+ secondary && /* @__PURE__ */ jsx39("div", { className: "mt-1 text-sm", children: secondary })
2833
2938
  ] });
2834
2939
  if (href) {
2835
- return /* @__PURE__ */ jsx41("a", { href, className: containerClass, children: content });
2940
+ return /* @__PURE__ */ jsx39("a", { href, className: containerClass, children: content });
2836
2941
  }
2837
- return /* @__PURE__ */ jsx41("div", { className: containerClass, children: content });
2942
+ return /* @__PURE__ */ jsx39("div", { className: containerClass, children: content });
2838
2943
  }
2839
2944
 
2840
2945
  // src/components/SectionHeader/SectionHeader.tsx
2841
- import { twMerge as twMerge17 } from "tailwind-merge";
2842
- import { jsx as jsx42, jsxs as jsxs28 } from "react/jsx-runtime";
2946
+ import { twMerge as twMerge21 } from "tailwind-merge";
2947
+ import { jsx as jsx40, jsxs as jsxs29 } from "react/jsx-runtime";
2843
2948
  function SectionHeader({
2844
2949
  title,
2845
2950
  children,
2846
2951
  className
2847
2952
  }) {
2848
- return /* @__PURE__ */ jsxs28(
2953
+ return /* @__PURE__ */ jsxs29(
2849
2954
  "div",
2850
2955
  {
2851
- className: twMerge17(
2956
+ className: twMerge21(
2852
2957
  "flex flex-wrap items-center gap-3 py-4",
2853
2958
  className
2854
2959
  ),
2855
2960
  children: [
2856
- /* @__PURE__ */ jsx42(H2, { children: title }),
2857
- children && /* @__PURE__ */ jsx42("div", { className: "ml-auto flex flex-wrap items-center gap-2", children })
2961
+ /* @__PURE__ */ jsx40(H2, { children: title }),
2962
+ children && /* @__PURE__ */ jsx40("div", { className: "ml-auto flex flex-wrap items-center gap-2", children })
2858
2963
  ]
2859
2964
  }
2860
2965
  );
2861
2966
  }
2862
2967
 
2863
2968
  // src/components/Pill/Pill.tsx
2864
- import { twMerge as twMerge18 } from "tailwind-merge";
2865
- import { jsx as jsx43 } from "react/jsx-runtime";
2969
+ import { twMerge as twMerge22 } from "tailwind-merge";
2970
+ import { jsx as jsx41 } from "react/jsx-runtime";
2866
2971
  var hashColors = {
2867
2972
  purple: "bg-(--color-badge-purple-bg) text-(--color-badge-purple-text) border-(--color-badge-purple-text)/20",
2868
2973
  teal: "bg-(--color-badge-teal-bg) text-(--color-badge-teal-text) border-(--color-badge-teal-text)/20",
@@ -2888,7 +2993,7 @@ function Pill({
2888
2993
  className,
2889
2994
  ...rest
2890
2995
  }) {
2891
- const cx = twMerge18(
2996
+ const cx = twMerge22(
2892
2997
  `
2893
2998
  inline-flex items-center
2894
2999
  rounded-full
@@ -2900,12 +3005,12 @@ function Pill({
2900
3005
  colorStyles[color],
2901
3006
  className
2902
3007
  );
2903
- return /* @__PURE__ */ jsx43("span", { className: cx, ...rest, children });
3008
+ return /* @__PURE__ */ jsx41("span", { className: cx, ...rest, children });
2904
3009
  }
2905
3010
 
2906
3011
  // src/components/Pill/PathPill.tsx
2907
- import { twMerge as twMerge19 } from "tailwind-merge";
2908
- import { jsx as jsx44 } from "react/jsx-runtime";
3012
+ import { twMerge as twMerge23 } from "tailwind-merge";
3013
+ import { jsx as jsx42 } from "react/jsx-runtime";
2909
3014
  function PathPill({
2910
3015
  children,
2911
3016
  visibleCount,
@@ -2917,17 +3022,17 @@ function PathPill({
2917
3022
  const effectiveVisible = visibleCount ?? segments.length;
2918
3023
  const dotCount = Math.max(0, segments.length - effectiveVisible);
2919
3024
  const fullPath = segments.join(" / ");
2920
- return /* @__PURE__ */ jsx44(
3025
+ return /* @__PURE__ */ jsx42(
2921
3026
  "div",
2922
3027
  {
2923
- className: twMerge19("relative flex", className),
3028
+ className: twMerge23("relative flex", className),
2924
3029
  "aria-label": `Path: ${fullPath}`,
2925
3030
  children: segments.map((segment, i) => {
2926
3031
  const isCollapsed = i < dotCount;
2927
3032
  const isLast = i === segments.length - 1;
2928
- const cx = twMerge19(!isLast && "pr-5 -mr-4", isCollapsed && "pr-3");
3033
+ const cx = twMerge23(!isLast && "pr-5 -mr-4", isCollapsed && "pr-3");
2929
3034
  const color = colorFn ? colorFn(segment, i) : pillColorFromName(segment);
2930
- return /* @__PURE__ */ jsx44(
3035
+ return /* @__PURE__ */ jsx42(
2931
3036
  Pill,
2932
3037
  {
2933
3038
  className: cx,
@@ -2943,9 +3048,9 @@ function PathPill({
2943
3048
  }
2944
3049
 
2945
3050
  // src/components/FormWizard/FormWizard.tsx
2946
- import { createContext as createContext6, useContext as useContext6, useCallback as useCallback4, useMemo } from "react";
2947
- import { jsx as jsx45 } from "react/jsx-runtime";
2948
- var FormWizardContext = createContext6({
3051
+ import { createContext as createContext4, useContext as useContext4, useCallback as useCallback5, useMemo } from "react";
3052
+ import { jsx as jsx43 } from "react/jsx-runtime";
3053
+ var FormWizardContext = createContext4({
2949
3054
  currentStep: 0,
2950
3055
  totalSteps: 1,
2951
3056
  canGoBack: false,
@@ -2954,7 +3059,7 @@ var FormWizardContext = createContext6({
2954
3059
  isLastStep: true
2955
3060
  });
2956
3061
  function useFormWizard() {
2957
- return useContext6(FormWizardContext);
3062
+ return useContext4(FormWizardContext);
2958
3063
  }
2959
3064
  function FormWizard({
2960
3065
  currentStep,
@@ -2964,7 +3069,7 @@ function FormWizard({
2964
3069
  }) {
2965
3070
  const canGoBack = currentStep > 0;
2966
3071
  const isLastStep = currentStep >= totalSteps - 1;
2967
- const goBack = useCallback4(() => {
3072
+ const goBack = useCallback5(() => {
2968
3073
  if (currentStep > 0) {
2969
3074
  onStepChange(currentStep - 1);
2970
3075
  }
@@ -2979,13 +3084,13 @@ function FormWizard({
2979
3084
  }),
2980
3085
  [currentStep, totalSteps, canGoBack, goBack, isLastStep]
2981
3086
  );
2982
- return /* @__PURE__ */ jsx45(FormWizardContext.Provider, { value, children });
3087
+ return /* @__PURE__ */ jsx43(FormWizardContext.Provider, { value, children });
2983
3088
  }
2984
3089
 
2985
3090
  // src/components/FormWizard/FormWizardProgress.tsx
2986
- import { jsx as jsx46, jsxs as jsxs29 } from "react/jsx-runtime";
3091
+ import { jsx as jsx44, jsxs as jsxs30 } from "react/jsx-runtime";
2987
3092
  function CheckIcon() {
2988
- return /* @__PURE__ */ jsx46(
3093
+ return /* @__PURE__ */ jsx44(
2989
3094
  "svg",
2990
3095
  {
2991
3096
  "aria-hidden": "true",
@@ -2996,24 +3101,24 @@ function CheckIcon() {
2996
3101
  strokeWidth: "2",
2997
3102
  strokeLinecap: "round",
2998
3103
  strokeLinejoin: "round",
2999
- children: /* @__PURE__ */ jsx46("path", { d: "M3 8.5l3.5 3.5 6.5-7" })
3104
+ children: /* @__PURE__ */ jsx44("path", { d: "M3 8.5l3.5 3.5 6.5-7" })
3000
3105
  }
3001
3106
  );
3002
3107
  }
3003
3108
  function FormWizardProgress({ labels }) {
3004
3109
  const { currentStep, totalSteps } = useFormWizard();
3005
- return /* @__PURE__ */ jsx46("nav", { "aria-label": "Form progress", children: /* @__PURE__ */ jsx46("ol", { className: "flex items-start", role: "list", children: labels.map((label, index) => {
3110
+ return /* @__PURE__ */ jsx44("nav", { "aria-label": "Form progress", children: /* @__PURE__ */ jsx44("ol", { className: "flex items-start", role: "list", children: labels.map((label, index) => {
3006
3111
  const isCompleted = index < currentStep;
3007
3112
  const isCurrent = index === currentStep;
3008
3113
  const isFuture = index > currentStep;
3009
- return /* @__PURE__ */ jsxs29(
3114
+ return /* @__PURE__ */ jsxs30(
3010
3115
  "li",
3011
3116
  {
3012
3117
  className: "flex flex-1 flex-col items-center",
3013
3118
  "aria-current": isCurrent ? "step" : void 0,
3014
3119
  children: [
3015
- /* @__PURE__ */ jsxs29("div", { className: "flex w-full items-center", children: [
3016
- index > 0 ? /* @__PURE__ */ jsx46(
3120
+ /* @__PURE__ */ jsxs30("div", { className: "flex w-full items-center", children: [
3121
+ index > 0 ? /* @__PURE__ */ jsx44(
3017
3122
  "div",
3018
3123
  {
3019
3124
  "aria-hidden": "true",
@@ -3022,8 +3127,8 @@ function FormWizardProgress({ labels }) {
3022
3127
  index <= currentStep ? "bg-primary" : "bg-border"
3023
3128
  ].join(" ")
3024
3129
  }
3025
- ) : /* @__PURE__ */ jsx46("div", { className: "flex-1", "aria-hidden": "true" }),
3026
- /* @__PURE__ */ jsx46(
3130
+ ) : /* @__PURE__ */ jsx44("div", { className: "flex-1", "aria-hidden": "true" }),
3131
+ /* @__PURE__ */ jsx44(
3027
3132
  "div",
3028
3133
  {
3029
3134
  className: [
@@ -3035,10 +3140,10 @@ function FormWizardProgress({ labels }) {
3035
3140
  isFuture ? "border-2 border-border bg-background text-muted-foreground" : ""
3036
3141
  ].join(" "),
3037
3142
  "aria-hidden": "true",
3038
- children: isCompleted ? /* @__PURE__ */ jsx46(CheckIcon, {}) : index + 1
3143
+ children: isCompleted ? /* @__PURE__ */ jsx44(CheckIcon, {}) : index + 1
3039
3144
  }
3040
3145
  ),
3041
- index < totalSteps - 1 ? /* @__PURE__ */ jsx46(
3146
+ index < totalSteps - 1 ? /* @__PURE__ */ jsx44(
3042
3147
  "div",
3043
3148
  {
3044
3149
  "aria-hidden": "true",
@@ -3047,9 +3152,9 @@ function FormWizardProgress({ labels }) {
3047
3152
  index < currentStep ? "bg-primary" : "bg-border"
3048
3153
  ].join(" ")
3049
3154
  }
3050
- ) : /* @__PURE__ */ jsx46("div", { className: "flex-1", "aria-hidden": "true" })
3155
+ ) : /* @__PURE__ */ jsx44("div", { className: "flex-1", "aria-hidden": "true" })
3051
3156
  ] }),
3052
- /* @__PURE__ */ jsx46(
3157
+ /* @__PURE__ */ jsx44(
3053
3158
  "span",
3054
3159
  {
3055
3160
  className: [
@@ -3067,15 +3172,15 @@ function FormWizardProgress({ labels }) {
3067
3172
  }
3068
3173
 
3069
3174
  // src/components/FormWizard/FormWizardNav.tsx
3070
- import { jsx as jsx47, jsxs as jsxs30 } from "react/jsx-runtime";
3175
+ import { jsx as jsx45, jsxs as jsxs31 } from "react/jsx-runtime";
3071
3176
  function FormWizardNav({
3072
3177
  onNext,
3073
3178
  isSubmitting = false,
3074
3179
  submitLabel = "Submit"
3075
3180
  }) {
3076
3181
  const { canGoBack, goBack, isLastStep } = useFormWizard();
3077
- return /* @__PURE__ */ jsxs30("div", { className: "flex items-center justify-end gap-3", children: [
3078
- canGoBack && /* @__PURE__ */ jsx47(
3182
+ return /* @__PURE__ */ jsxs31("div", { className: "flex items-center justify-end gap-3", children: [
3183
+ canGoBack && /* @__PURE__ */ jsx45(
3079
3184
  Button,
3080
3185
  {
3081
3186
  variant: "secondary",
@@ -3085,7 +3190,7 @@ function FormWizardNav({
3085
3190
  children: "Back"
3086
3191
  }
3087
3192
  ),
3088
- /* @__PURE__ */ jsx47(
3193
+ /* @__PURE__ */ jsx45(
3089
3194
  Button,
3090
3195
  {
3091
3196
  variant: "primary",
@@ -3498,10 +3603,9 @@ export {
3498
3603
  Icon,
3499
3604
  IconButton,
3500
3605
  IconButtonLink,
3606
+ IconButtonToggle,
3501
3607
  Input,
3502
- InputAddon,
3503
- InputGroup,
3504
- InputGroupContext,
3608
+ InputPassword,
3505
3609
  Label,
3506
3610
  LineHeightNormal,
3507
3611
  LineHeightRelaxed,
@@ -3516,7 +3620,7 @@ export {
3516
3620
  MetricCard,
3517
3621
  PathPill,
3518
3622
  Pill,
3519
- Popover3 as Popover,
3623
+ Popover4 as Popover,
3520
3624
  PopoverContent,
3521
3625
  PopoverTrigger,
3522
3626
  ProgressBar,
@@ -3542,14 +3646,12 @@ export {
3542
3646
  Tab,
3543
3647
  TabList,
3544
3648
  TabPanel,
3545
- Table,
3649
+ Table2 as Table,
3546
3650
  TableBody,
3547
3651
  TableHeader,
3548
3652
  Tabs,
3549
3653
  ToastProvider,
3550
3654
  ToggleButton,
3551
- ToggleButtonGroup,
3552
- ToggleButtonGroupItem,
3553
3655
  Tooltip,
3554
3656
  TruncatedText,
3555
3657
  Tab2 as UnstyledTab,
@@ -3557,9 +3659,10 @@ export {
3557
3659
  TabPanel2 as UnstyledTabPanel,
3558
3660
  Tabs2 as UnstyledTabs,
3559
3661
  createToastBridge,
3662
+ iconRegistry,
3560
3663
  pillColorFromName,
3664
+ useContextMenu,
3561
3665
  useFormWizard,
3562
- useInputGroup,
3563
3666
  useToast
3564
3667
  };
3565
3668
  //# sourceMappingURL=index.js.map