@timbal-ai/timbal-react 0.8.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/README.md +100 -6
  3. package/dist/app.cjs +2538 -1262
  4. package/dist/app.d.cts +11 -6
  5. package/dist/app.d.ts +11 -6
  6. package/dist/app.esm.js +43 -6
  7. package/dist/{button-ClSgD6OF.d.cts → button-BoyX5pM_.d.cts} +1 -1
  8. package/dist/{button-ClSgD6OF.d.ts → button-BoyX5pM_.d.ts} +1 -1
  9. package/dist/{chart-artifact-Bl67kre7.d.ts → chart-artifact-BZp7nmaf.d.ts} +430 -14
  10. package/dist/{chart-artifact-BzcvblDe.d.cts → chart-artifact-CX-rh9nq.d.cts} +430 -14
  11. package/dist/{chat-Bed4FQSl.d.cts → chat-DCms8pJ_.d.cts} +31 -4
  12. package/dist/{chat-Bed4FQSl.d.ts → chat-DCms8pJ_.d.ts} +31 -4
  13. package/dist/chat.cjs +1111 -776
  14. package/dist/chat.d.cts +1 -1
  15. package/dist/chat.d.ts +1 -1
  16. package/dist/chat.esm.js +3 -3
  17. package/dist/{chunk-QVAUCVQA.esm.js → chunk-4AKJ6FKE.esm.js} +277 -4
  18. package/dist/chunk-6HWMJNZT.esm.js +3439 -0
  19. package/dist/{chunk-VWHHKAHN.esm.js → chunk-FRZOEYBO.esm.js} +4 -4
  20. package/dist/chunk-JEAUF54A.esm.js +52 -0
  21. package/dist/{chunk-OISVICYF.esm.js → chunk-P3KDAYX6.esm.js} +1 -1
  22. package/dist/{chunk-6YVKCVEP.esm.js → chunk-TK2AGIME.esm.js} +1106 -298
  23. package/dist/{chunk-CFU3YDTV.esm.js → chunk-XCM3V6RK.esm.js} +5 -5
  24. package/dist/{chunk-5ZKLPWVN.esm.js → chunk-YXZ22OJN.esm.js} +849 -667
  25. package/dist/index.cjs +6070 -1605
  26. package/dist/index.d.cts +8 -6
  27. package/dist/index.d.ts +8 -6
  28. package/dist/index.esm.js +427 -11
  29. package/dist/pill-segmented-tabs-Ba5q0feL.d.cts +500 -0
  30. package/dist/pill-segmented-tabs-Ba5q0feL.d.ts +500 -0
  31. package/dist/studio.cjs +1333 -998
  32. package/dist/studio.d.cts +2 -2
  33. package/dist/studio.d.ts +2 -2
  34. package/dist/studio.esm.js +5 -5
  35. package/dist/styles.css +220 -0
  36. package/dist/ui.cjs +3592 -89
  37. package/dist/ui.d.cts +72 -96
  38. package/dist/ui.d.ts +72 -96
  39. package/dist/ui.esm.js +400 -6
  40. package/dist/{welcome-COOb05a5.d.cts → welcome-CRqOPKMp.d.cts} +1 -1
  41. package/dist/{welcome-DE08m9ca.d.ts → welcome-DlHUa3OL.d.ts} +1 -1
  42. package/package.json +9 -3
  43. package/dist/chunk-P4SN7M67.esm.js +0 -435
package/dist/ui.cjs CHANGED
@@ -30,10 +30,96 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
30
30
  // src/ui.ts
31
31
  var ui_exports = {};
32
32
  __export(ui_exports, {
33
+ Accordion: () => Accordion,
34
+ AccordionContent: () => AccordionContent,
35
+ AccordionItem: () => AccordionItem,
36
+ AccordionTrigger: () => AccordionTrigger,
37
+ Alert: () => Alert,
38
+ AlertDescription: () => AlertDescription,
39
+ AlertDialog: () => AlertDialog,
40
+ AlertDialogAction: () => AlertDialogAction,
41
+ AlertDialogCancel: () => AlertDialogCancel,
42
+ AlertDialogContent: () => AlertDialogContent,
43
+ AlertDialogDescription: () => AlertDialogDescription,
44
+ AlertDialogFooter: () => AlertDialogFooter,
45
+ AlertDialogHeader: () => AlertDialogHeader,
46
+ AlertDialogOverlay: () => AlertDialogOverlay,
47
+ AlertDialogPortal: () => AlertDialogPortal,
48
+ AlertDialogTitle: () => AlertDialogTitle,
49
+ AlertDialogTrigger: () => AlertDialogTrigger,
50
+ AlertTitle: () => AlertTitle,
51
+ AspectRatio: () => AspectRatio,
33
52
  Avatar: () => Avatar,
34
53
  AvatarFallback: () => AvatarFallback,
35
54
  AvatarImage: () => AvatarImage,
55
+ Badge: () => Badge,
56
+ Breadcrumb: () => Breadcrumb,
57
+ BreadcrumbEllipsis: () => BreadcrumbEllipsis,
58
+ BreadcrumbItem: () => BreadcrumbItem,
59
+ BreadcrumbLink: () => BreadcrumbLink,
60
+ BreadcrumbList: () => BreadcrumbList,
61
+ BreadcrumbPage: () => BreadcrumbPage,
62
+ BreadcrumbSeparator: () => BreadcrumbSeparator,
36
63
  Button: () => Button,
64
+ CONTROL_SIZE: () => CONTROL_SIZE,
65
+ Calendar: () => Calendar,
66
+ CalendarDayButton: () => CalendarDayButton,
67
+ Card: () => Card,
68
+ CardContent: () => CardContent,
69
+ CardDescription: () => CardDescription,
70
+ CardFooter: () => CardFooter,
71
+ CardHeader: () => CardHeader,
72
+ CardTitle: () => CardTitle,
73
+ ChartContainer: () => ChartContainer,
74
+ ChartLegend: () => ChartLegend,
75
+ ChartLegendContent: () => ChartLegendContent,
76
+ ChartStyle: () => ChartStyle,
77
+ ChartTooltip: () => ChartTooltip,
78
+ ChartTooltipContent: () => ChartTooltipContent,
79
+ Checkbox: () => Checkbox,
80
+ Collapsible: () => Collapsible,
81
+ CollapsibleContent: () => CollapsibleContent,
82
+ CollapsibleTrigger: () => CollapsibleTrigger,
83
+ Combobox: () => Combobox,
84
+ ComboboxAnchor: () => ComboboxAnchor,
85
+ ComboboxCommand: () => ComboboxCommand,
86
+ ComboboxContent: () => ComboboxContent,
87
+ ComboboxEmpty: () => ComboboxEmpty,
88
+ ComboboxGroup: () => ComboboxGroup,
89
+ ComboboxInput: () => ComboboxInput,
90
+ ComboboxItem: () => ComboboxItem,
91
+ ComboboxList: () => ComboboxList,
92
+ ComboboxSeparator: () => ComboboxSeparator,
93
+ ComboboxShortcut: () => ComboboxShortcut,
94
+ ComboboxTrigger: () => ComboboxTrigger,
95
+ Command: () => Command,
96
+ CommandDialog: () => CommandDialog,
97
+ CommandEmpty: () => CommandEmpty,
98
+ CommandGroup: () => CommandGroup,
99
+ CommandInput: () => CommandInput,
100
+ CommandItem: () => CommandItem,
101
+ CommandList: () => CommandList,
102
+ CommandSeparator: () => CommandSeparator,
103
+ CommandShortcut: () => CommandShortcut,
104
+ ContextMenu: () => ContextMenu,
105
+ ContextMenuCheckboxItem: () => ContextMenuCheckboxItem,
106
+ ContextMenuContent: () => ContextMenuContent,
107
+ ContextMenuGroup: () => ContextMenuGroup,
108
+ ContextMenuItem: () => ContextMenuItem,
109
+ ContextMenuLabel: () => ContextMenuLabel,
110
+ ContextMenuRadioGroup: () => ContextMenuRadioGroup,
111
+ ContextMenuRadioItem: () => ContextMenuRadioItem,
112
+ ContextMenuSeparator: () => ContextMenuSeparator,
113
+ ContextMenuShortcut: () => ContextMenuShortcut,
114
+ ContextMenuSub: () => ContextMenuSub,
115
+ ContextMenuSubContent: () => ContextMenuSubContent,
116
+ ContextMenuSubTrigger: () => ContextMenuSubTrigger,
117
+ ContextMenuTrigger: () => ContextMenuTrigger,
118
+ DatePicker: () => DatePicker,
119
+ DatePickerButton: () => DatePickerButton,
120
+ DatePickerCalendar: () => DatePickerCalendar,
121
+ DatePickerContent: () => DatePickerContent,
122
+ DatePickerTrigger: () => DatePickerTrigger,
37
123
  Dialog: () => Dialog,
38
124
  DialogClose: () => DialogClose,
39
125
  DialogContent: () => DialogContent,
@@ -58,12 +144,69 @@ __export(ui_exports, {
58
144
  DropdownMenuSubContent: () => DropdownMenuSubContent,
59
145
  DropdownMenuSubTrigger: () => DropdownMenuSubTrigger,
60
146
  DropdownMenuTrigger: () => DropdownMenuTrigger,
147
+ Form: () => Form,
148
+ FormControl: () => FormControl,
149
+ FormField: () => FormField,
150
+ FormItem: () => FormItem,
151
+ FormLabel: () => FormLabel,
152
+ FormMessage: () => FormMessage,
153
+ FormSubmit: () => FormSubmit,
154
+ HoverCard: () => HoverCard,
155
+ HoverCardContent: () => HoverCardContent,
156
+ HoverCardTrigger: () => HoverCardTrigger,
157
+ Input: () => Input,
158
+ InputGroup: () => InputGroup,
159
+ InputGroupAddon: () => InputGroupAddon,
160
+ InputGroupInput: () => InputGroupInput,
161
+ InputGroupText: () => InputGroupText,
162
+ InputOTP: () => InputOTP,
163
+ InputOTPGroup: () => InputOTPGroup,
164
+ InputOTPHiddenInput: () => InputOTPHiddenInput,
165
+ InputOTPSeparator: () => InputOTPSeparator,
166
+ InputOTPSlot: () => InputOTPSlot,
167
+ Kbd: () => Kbd,
168
+ KbdGroup: () => KbdGroup,
169
+ Label: () => Label,
61
170
  MemoPillSegmentedTabs: () => MemoPillSegmentedTabs,
171
+ Menubar: () => Menubar,
172
+ MenubarCheckboxItem: () => MenubarCheckboxItem,
173
+ MenubarContent: () => MenubarContent,
174
+ MenubarItem: () => MenubarItem,
175
+ MenubarLabel: () => MenubarLabel,
176
+ MenubarMenu: () => MenubarMenu,
177
+ MenubarRadioGroup: () => MenubarRadioGroup,
178
+ MenubarRadioItem: () => MenubarRadioItem,
179
+ MenubarSeparator: () => MenubarSeparator,
180
+ MenubarShortcut: () => MenubarShortcut,
181
+ MenubarSub: () => MenubarSub,
182
+ MenubarSubContent: () => MenubarSubContent,
183
+ MenubarSubTrigger: () => MenubarSubTrigger,
184
+ MenubarTrigger: () => MenubarTrigger,
185
+ NavigationMenu: () => NavigationMenu,
186
+ NavigationMenuContent: () => NavigationMenuContent,
187
+ NavigationMenuIndicator: () => NavigationMenuIndicator,
188
+ NavigationMenuItem: () => NavigationMenuItem,
189
+ NavigationMenuLink: () => NavigationMenuLink,
190
+ NavigationMenuList: () => NavigationMenuList,
191
+ NavigationMenuTrigger: () => NavigationMenuTrigger,
192
+ NavigationMenuViewport: () => NavigationMenuViewport,
193
+ Pagination: () => Pagination,
194
+ PaginationContent: () => PaginationContent,
195
+ PaginationEllipsis: () => PaginationEllipsis,
196
+ PaginationItem: () => PaginationItem,
197
+ PaginationLink: () => PaginationLink,
198
+ PaginationNext: () => PaginationNext,
199
+ PaginationPrevious: () => PaginationPrevious,
62
200
  PillSegmentedTabs: () => PillSegmentedTabs,
63
201
  Popover: () => Popover,
64
202
  PopoverAnchor: () => PopoverAnchor,
65
203
  PopoverContent: () => PopoverContent,
66
204
  PopoverTrigger: () => PopoverTrigger,
205
+ Progress: () => Progress,
206
+ RadioGroup: () => RadioGroup,
207
+ RadioGroupItem: () => RadioGroupItem,
208
+ ScrollArea: () => ScrollArea,
209
+ ScrollBar: () => ScrollBar,
67
210
  Select: () => Select,
68
211
  SelectContent: () => SelectContent,
69
212
  SelectGroup: () => SelectGroup,
@@ -74,12 +217,65 @@ __export(ui_exports, {
74
217
  SelectSeparator: () => SelectSeparator,
75
218
  SelectTrigger: () => SelectTrigger,
76
219
  SelectValue: () => SelectValue,
220
+ Separator: () => Separator,
221
+ Sheet: () => Sheet,
222
+ SheetClose: () => SheetClose,
223
+ SheetContent: () => SheetContent,
224
+ SheetDescription: () => SheetDescription,
225
+ SheetFooter: () => SheetFooter,
226
+ SheetHeader: () => SheetHeader,
227
+ SheetTitle: () => SheetTitle,
228
+ SheetTrigger: () => SheetTrigger,
77
229
  Shimmer: () => Shimmer,
230
+ Skeleton: () => Skeleton,
231
+ Slider: () => Slider,
232
+ Spinner: () => Spinner,
233
+ Switch: () => Switch,
234
+ Table: () => Table,
235
+ TableBody: () => TableBody,
236
+ TableCaption: () => TableCaption,
237
+ TableCell: () => TableCell,
238
+ TableFooter: () => TableFooter,
239
+ TableHead: () => TableHead,
240
+ TableHeader: () => TableHeader,
241
+ TableRow: () => TableRow,
242
+ Textarea: () => Textarea,
78
243
  TimbalV2Button: () => TimbalV2Button,
244
+ Toast: () => Toast,
245
+ ToastAction: () => ToastAction,
246
+ ToastClose: () => ToastClose,
247
+ ToastDescription: () => ToastDescription,
248
+ ToastProvider: () => ToastProvider,
249
+ ToastTitle: () => ToastTitle,
250
+ ToastViewport: () => ToastViewport,
251
+ Toaster: () => Toaster,
252
+ Toggle: () => Toggle,
253
+ ToggleGroup: () => ToggleGroup,
254
+ ToggleGroupItem: () => ToggleGroupItem,
255
+ Toolbar: () => Toolbar,
256
+ ToolbarButton: () => ToolbarButton,
257
+ ToolbarLink: () => ToolbarLink,
258
+ ToolbarSeparator: () => ToolbarSeparator,
259
+ ToolbarToggleGroup: () => ToolbarToggleGroup,
260
+ ToolbarToggleItem: () => ToolbarToggleItem,
79
261
  Tooltip: () => Tooltip,
80
262
  TooltipContent: () => TooltipContent,
81
263
  TooltipProvider: () => TooltipProvider,
82
- TooltipTrigger: () => TooltipTrigger
264
+ TooltipTrigger: () => TooltipTrigger,
265
+ alertVariants: () => alertVariants,
266
+ badgeVariants: () => badgeVariants,
267
+ controlClass: () => controlClass,
268
+ controlSurfaceClass: () => controlSurfaceClass,
269
+ formatPickerDate: () => formatPickerDate,
270
+ navigationMenuTriggerStyle: () => navigationMenuTriggerStyle,
271
+ overlayAnimationClass: () => overlayAnimationClass,
272
+ overlayItemClass: () => overlayItemClass,
273
+ overlayListPanelClass: () => overlayListPanelClass,
274
+ overlaySurfaceClass: () => overlaySurfaceClass,
275
+ toast: () => toast,
276
+ toggleVariants: () => toggleVariants,
277
+ useChart: () => useChart,
278
+ useToast: () => useToast
83
279
  });
84
280
  module.exports = __toCommonJS(ui_exports);
85
281
 
@@ -626,6 +822,41 @@ function DialogFooter({ className, ...props }) {
626
822
  // src/ui/dropdown-menu.tsx
627
823
  var import_radix_ui5 = require("radix-ui");
628
824
  var import_lucide_react2 = require("lucide-react");
825
+
826
+ // src/design/control-surface.ts
827
+ var CONTROL_SIZE = {
828
+ sm: "h-9 px-3",
829
+ default: "h-10 px-3"
830
+ };
831
+ var CONTROL_SHAPE = {
832
+ field: "rounded-lg",
833
+ pill: "rounded-full"
834
+ };
835
+ var controlSurfaceClass = cn(
836
+ TIMBAL_V2_SECONDARY_CHROME,
837
+ "text-sm text-foreground outline-none",
838
+ "placeholder:text-muted-foreground/70",
839
+ "focus-visible:ring-2 focus-visible:ring-foreground/10",
840
+ "focus-within:ring-2 focus-within:ring-foreground/10",
841
+ "disabled:cursor-not-allowed disabled:opacity-50",
842
+ "data-[placeholder]:text-muted-foreground"
843
+ );
844
+ function controlClass(options = {}, className) {
845
+ const { size = "default", shape = "field" } = options;
846
+ return cn(controlSurfaceClass, CONTROL_SIZE[size], CONTROL_SHAPE[shape], className);
847
+ }
848
+ var overlayAnimationClass = "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2";
849
+ var overlaySurfaceClass = cn(
850
+ "z-[80] border border-border bg-popover text-popover-foreground shadow-card",
851
+ overlayAnimationClass
852
+ );
853
+ var overlayListPanelClass = cn(
854
+ overlaySurfaceClass,
855
+ "overflow-hidden rounded-lg p-0 outline-hidden"
856
+ );
857
+ var overlayItemClass = "relative flex cursor-default items-center gap-2 rounded-md px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground";
858
+
859
+ // src/ui/dropdown-menu.tsx
629
860
  var import_jsx_runtime6 = require("react/jsx-runtime");
630
861
  function DropdownMenu({
631
862
  ...props
@@ -659,7 +890,8 @@ function DropdownMenuContent({
659
890
  "data-slot": "dropdown-menu-content",
660
891
  sideOffset,
661
892
  className: cn(
662
- "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-[80] max-h-[var(--radix-dropdown-menu-content-available-height)] min-w-[8rem] origin-[var(--radix-dropdown-menu-content-transform-origin)] overflow-x-hidden overflow-y-auto rounded-lg border border-border p-1 shadow-card",
893
+ overlayListPanelClass,
894
+ "max-h-[var(--radix-dropdown-menu-content-available-height)] min-w-[8rem] origin-[var(--radix-dropdown-menu-content-transform-origin)] overflow-x-hidden overflow-y-auto p-1",
663
895
  className
664
896
  ),
665
897
  ...props
@@ -679,7 +911,8 @@ function DropdownMenuItem({
679
911
  "data-inset": inset,
680
912
  "data-variant": variant,
681
913
  className: cn(
682
- "relative flex cursor-default items-center gap-2 rounded-md px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground",
914
+ overlayItemClass,
915
+ "data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10",
683
916
  className
684
917
  ),
685
918
  ...props
@@ -696,10 +929,7 @@ function DropdownMenuCheckboxItem({
696
929
  import_radix_ui5.DropdownMenu.CheckboxItem,
697
930
  {
698
931
  "data-slot": "dropdown-menu-checkbox-item",
699
- className: cn(
700
- "relative flex cursor-default items-center gap-2 rounded-md py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
701
- className
702
- ),
932
+ className: cn(overlayItemClass, "py-1.5 pr-2 pl-8", className),
703
933
  checked,
704
934
  ...props,
705
935
  children: [
@@ -729,10 +959,7 @@ function DropdownMenuRadioItem({
729
959
  import_radix_ui5.DropdownMenu.RadioItem,
730
960
  {
731
961
  "data-slot": "dropdown-menu-radio-item",
732
- className: cn(
733
- "relative flex cursor-default items-center gap-2 rounded-md py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
734
- className
735
- ),
962
+ className: cn(overlayItemClass, "py-1.5 pr-2 pl-8", className),
736
963
  ...props,
737
964
  children: [
738
965
  /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_radix_ui5.DropdownMenu.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_lucide_react2.CircleIcon, { className: "size-2 fill-current" }) }) }),
@@ -805,7 +1032,8 @@ function DropdownMenuSubTrigger({
805
1032
  "data-slot": "dropdown-menu-sub-trigger",
806
1033
  "data-inset": inset,
807
1034
  className: cn(
808
- "flex cursor-default items-center rounded-md px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground data-[inset]:pl-8",
1035
+ overlayItemClass,
1036
+ "data-[state=open]:bg-accent data-[state=open]:text-accent-foreground data-[inset]:pl-8",
809
1037
  className
810
1038
  ),
811
1039
  ...props,
@@ -825,7 +1053,8 @@ function DropdownMenuSubContent({
825
1053
  {
826
1054
  "data-slot": "dropdown-menu-sub-content",
827
1055
  className: cn(
828
- "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-[80] min-w-[8rem] origin-[var(--radix-dropdown-menu-content-transform-origin)] overflow-hidden rounded-lg border border-border p-1 shadow-card",
1056
+ overlayListPanelClass,
1057
+ "min-w-[8rem] origin-[var(--radix-dropdown-menu-content-transform-origin)] overflow-hidden p-1",
829
1058
  className
830
1059
  ),
831
1060
  ...props
@@ -855,16 +1084,24 @@ function PopoverContent({
855
1084
  className,
856
1085
  align = "center",
857
1086
  sideOffset = 4,
1087
+ variant = "default",
858
1088
  ...props
859
1089
  }) {
860
1090
  return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_radix_ui6.Popover.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
861
1091
  import_radix_ui6.Popover.Content,
862
1092
  {
863
1093
  "data-slot": "popover-content",
1094
+ "data-variant": variant,
864
1095
  align,
865
1096
  sideOffset,
866
1097
  className: cn(
867
- "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-[80] w-72 origin-[var(--radix-popover-content-transform-origin)] rounded-xl border border-border p-4 shadow-card outline-hidden",
1098
+ variant === "list" ? cn(
1099
+ overlayListPanelClass,
1100
+ "min-w-[8rem] origin-[var(--radix-popover-content-transform-origin)]"
1101
+ ) : cn(
1102
+ overlaySurfaceClass,
1103
+ "w-72 origin-[var(--radix-popover-content-transform-origin)] rounded-xl p-4 outline-hidden"
1104
+ ),
868
1105
  className
869
1106
  ),
870
1107
  ...props
@@ -903,7 +1140,8 @@ function SelectTrigger({
903
1140
  "data-slot": "select-trigger",
904
1141
  "data-size": size,
905
1142
  className: cn(
906
- "flex w-fit items-center justify-between gap-2 rounded-lg border border-input bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/40 disabled:cursor-not-allowed disabled:opacity-50 data-[placeholder]:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground",
1143
+ controlClass({ size }),
1144
+ "flex w-fit items-center justify-between gap-2 whitespace-nowrap *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground",
907
1145
  className
908
1146
  ),
909
1147
  ...props,
@@ -925,7 +1163,8 @@ function SelectContent({
925
1163
  {
926
1164
  "data-slot": "select-content",
927
1165
  className: cn(
928
- "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-[80] max-h-[var(--radix-select-content-available-height)] min-w-[8rem] origin-[var(--radix-select-content-transform-origin)] overflow-x-hidden overflow-y-auto rounded-lg border border-border shadow-card",
1166
+ overlayListPanelClass,
1167
+ "relative max-h-[var(--radix-select-content-available-height)] min-w-[8rem] origin-[var(--radix-select-content-transform-origin)] overflow-x-hidden overflow-y-auto",
929
1168
  position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
930
1169
  className
931
1170
  ),
@@ -971,7 +1210,8 @@ function SelectItem({
971
1210
  {
972
1211
  "data-slot": "select-item",
973
1212
  className: cn(
974
- "relative flex w-full cursor-default items-center gap-2 rounded-md py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground",
1213
+ overlayItemClass,
1214
+ "w-full py-1.5 pr-8 pl-2 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",
975
1215
  className
976
1216
  ),
977
1217
  ...props,
@@ -1024,85 +1264,3152 @@ function SelectScrollDownButton({
1024
1264
  );
1025
1265
  }
1026
1266
 
1027
- // src/ui/shimmer.tsx
1028
- var import_react = require("motion/react");
1029
- var import_react2 = require("react");
1267
+ // src/ui/input.tsx
1030
1268
  var import_jsx_runtime9 = require("react/jsx-runtime");
1031
- var ShimmerComponent = ({
1032
- children,
1033
- as: Component = "p",
1269
+ function Input({
1034
1270
  className,
1035
- duration = 2,
1036
- spread = 2
1037
- }) => {
1038
- const MotionComponent = import_react.motion.create(
1039
- Component
1271
+ type,
1272
+ controlSize,
1273
+ ...props
1274
+ }) {
1275
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1276
+ "input",
1277
+ {
1278
+ type,
1279
+ "data-slot": "input",
1280
+ className: cn(
1281
+ controlClass({ size: controlSize }),
1282
+ "w-full file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground",
1283
+ className
1284
+ ),
1285
+ ...props
1286
+ }
1040
1287
  );
1041
- const dynamicSpread = (0, import_react2.useMemo)(
1042
- () => (children?.length ?? 0) * spread,
1043
- [children, spread]
1288
+ }
1289
+
1290
+ // src/ui/textarea.tsx
1291
+ var import_jsx_runtime10 = require("react/jsx-runtime");
1292
+ function Textarea({ className, ...props }) {
1293
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1294
+ "textarea",
1295
+ {
1296
+ "data-slot": "textarea",
1297
+ className: cn(
1298
+ controlSurfaceClass,
1299
+ "min-h-16 w-full resize-y rounded-lg px-3 py-2 leading-relaxed",
1300
+ className
1301
+ ),
1302
+ ...props
1303
+ }
1044
1304
  );
1045
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1046
- MotionComponent,
1305
+ }
1306
+
1307
+ // src/ui/label.tsx
1308
+ var import_radix_ui8 = require("radix-ui");
1309
+ var import_jsx_runtime11 = require("react/jsx-runtime");
1310
+ function Label({
1311
+ className,
1312
+ ...props
1313
+ }) {
1314
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1315
+ import_radix_ui8.Label.Root,
1047
1316
  {
1048
- animate: { backgroundPosition: "0% center" },
1317
+ "data-slot": "label",
1049
1318
  className: cn(
1050
- "relative inline-block bg-[length:250%_100%,auto] bg-clip-text text-transparent",
1051
- "[--bg:linear-gradient(90deg,#0000_calc(50%-var(--spread)),var(--color-background),#0000_calc(50%+var(--spread)))] [background-repeat:no-repeat,padding-box]",
1319
+ "flex select-none items-center gap-2 text-sm font-medium text-foreground",
1320
+ "group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
1052
1321
  className
1053
1322
  ),
1054
- initial: { backgroundPosition: "100% center" },
1055
- style: {
1056
- "--spread": `${dynamicSpread}px`,
1057
- backgroundImage: "var(--bg), linear-gradient(var(--color-muted-foreground), var(--color-muted-foreground))"
1058
- },
1059
- transition: {
1060
- repeat: Number.POSITIVE_INFINITY,
1061
- duration,
1062
- ease: "linear"
1063
- },
1064
- children
1323
+ ...props
1065
1324
  }
1066
1325
  );
1067
- };
1068
- var Shimmer = (0, import_react2.memo)(ShimmerComponent);
1326
+ }
1069
1327
 
1070
- // src/ui/pill-segmented-tabs.tsx
1071
- var import_react3 = require("react");
1072
- var import_react4 = require("motion/react");
1328
+ // src/ui/checkbox.tsx
1329
+ var import_radix_ui9 = require("radix-ui");
1330
+ var import_lucide_react4 = require("lucide-react");
1331
+ var import_jsx_runtime12 = require("react/jsx-runtime");
1332
+ function Checkbox({
1333
+ className,
1334
+ ...props
1335
+ }) {
1336
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1337
+ import_radix_ui9.Checkbox.Root,
1338
+ {
1339
+ "data-slot": "checkbox",
1340
+ className: cn(
1341
+ "peer size-4 shrink-0 rounded-[4px] border border-border bg-gradient-to-b from-elevated-from to-elevated-to shadow-card outline-none transition-[box-shadow,background-color,border-color]",
1342
+ "focus-visible:ring-2 focus-visible:ring-foreground/10 disabled:cursor-not-allowed disabled:opacity-50",
1343
+ "data-[state=checked]:border-foreground/15 data-[state=checked]:from-primary-fill-from data-[state=checked]:to-primary-fill-to data-[state=checked]:text-primary-foreground",
1344
+ className
1345
+ ),
1346
+ ...props,
1347
+ children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1348
+ import_radix_ui9.Checkbox.Indicator,
1349
+ {
1350
+ "data-slot": "checkbox-indicator",
1351
+ className: "flex items-center justify-center text-current transition-none",
1352
+ children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react4.CheckIcon, { className: "size-3.5" })
1353
+ }
1354
+ )
1355
+ }
1356
+ );
1357
+ }
1073
1358
 
1074
- // src/design/pill-segmented-classes.ts
1075
- var pillSegmentedTrackBase = "inline-flex w-fit max-w-max shrink-0 self-start items-center rounded-full";
1076
- var pillSegmentedTrackSurface = cn(
1077
- "bg-pill-segmented-track border border-[var(--pill-segmented-track-border)]",
1078
- "shadow-[var(--pill-segmented-track-shadow)]"
1079
- );
1080
- var pillSegmentedTrackClass = cn(
1081
- pillSegmentedTrackBase,
1082
- pillSegmentedTrackSurface,
1083
- "gap-1 p-1"
1084
- );
1085
- var pillSegmentedTrackFlushClass = cn(
1086
- pillSegmentedTrackBase,
1087
- pillSegmentedTrackSurface,
1088
- "h-[var(--studio-chrome-pill-height)] items-center gap-0.5 overflow-visible p-0.5"
1089
- );
1090
- var pillSegmentedSegmentClass = cn(
1091
- "relative flex items-center gap-1.5 rounded-full px-4 py-1.5 text-xs font-normal transition-colors"
1092
- );
1093
- var pillSegmentedFlushSegmentClass = cn(
1094
- "relative box-border inline-flex h-9 min-h-9 items-center justify-center gap-1.5 rounded-full px-3.5 py-0",
1095
- "text-sm font-normal leading-tight transition-colors"
1096
- );
1097
- var pillSegmentedActiveIndicatorClass = cn(
1098
- "absolute inset-0 rounded-full",
1099
- "border border-[var(--pill-segmented-indicator-border)]",
1100
- "bg-gradient-to-b from-[var(--pill-segmented-indicator-from)] to-[var(--pill-segmented-indicator-to)]",
1101
- "shadow-[var(--pill-segmented-indicator-shadow)]"
1102
- );
1359
+ // src/ui/switch.tsx
1360
+ var import_radix_ui10 = require("radix-ui");
1361
+ var import_jsx_runtime13 = require("react/jsx-runtime");
1362
+ function Switch({
1363
+ className,
1364
+ ...props
1365
+ }) {
1366
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1367
+ import_radix_ui10.Switch.Root,
1368
+ {
1369
+ "data-slot": "switch",
1370
+ className: cn(
1371
+ "peer inline-flex h-5 w-9 shrink-0 items-center rounded-full outline-none transition-[background,box-shadow,border-color] duration-200",
1372
+ TIMBAL_V2_SWITCH_TRACK_OFF,
1373
+ "focus-visible:ring-2 focus-visible:ring-foreground/10 disabled:cursor-not-allowed disabled:opacity-50",
1374
+ "data-[state=checked]:border-foreground/15 data-[state=checked]:from-primary-fill-from data-[state=checked]:to-primary-fill-to data-[state=checked]:shadow-card",
1375
+ className
1376
+ ),
1377
+ ...props,
1378
+ children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1379
+ import_radix_ui10.Switch.Thumb,
1380
+ {
1381
+ "data-slot": "switch-thumb",
1382
+ className: cn(
1383
+ TIMBAL_V2_SWITCH_THUMB,
1384
+ "pointer-events-none block size-4 translate-x-0.5 rounded-full transition-transform data-[state=checked]:translate-x-4"
1385
+ )
1386
+ }
1387
+ )
1388
+ }
1389
+ );
1390
+ }
1103
1391
 
1104
- // src/ui/pill-segmented-tabs.tsx
1105
- var import_jsx_runtime10 = require("react/jsx-runtime");
1392
+ // src/ui/radio-group.tsx
1393
+ var import_radix_ui11 = require("radix-ui");
1394
+ var import_lucide_react5 = require("lucide-react");
1395
+ var import_jsx_runtime14 = require("react/jsx-runtime");
1396
+ function RadioGroup({
1397
+ className,
1398
+ ...props
1399
+ }) {
1400
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1401
+ import_radix_ui11.RadioGroup.Root,
1402
+ {
1403
+ "data-slot": "radio-group",
1404
+ className: cn("grid gap-2.5", className),
1405
+ ...props
1406
+ }
1407
+ );
1408
+ }
1409
+ function RadioGroupItem({
1410
+ className,
1411
+ ...props
1412
+ }) {
1413
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1414
+ import_radix_ui11.RadioGroup.Item,
1415
+ {
1416
+ "data-slot": "radio-group-item",
1417
+ className: cn(
1418
+ "aspect-square size-4 shrink-0 rounded-full border border-border bg-gradient-to-b from-elevated-from to-elevated-to shadow-card outline-none transition-[box-shadow,border-color]",
1419
+ "focus-visible:ring-2 focus-visible:ring-foreground/10 disabled:cursor-not-allowed disabled:opacity-50",
1420
+ "data-[state=checked]:border-foreground/30",
1421
+ className
1422
+ ),
1423
+ ...props,
1424
+ children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1425
+ import_radix_ui11.RadioGroup.Indicator,
1426
+ {
1427
+ "data-slot": "radio-group-indicator",
1428
+ className: "flex items-center justify-center",
1429
+ children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_lucide_react5.CircleIcon, { className: "size-2 fill-foreground text-foreground" })
1430
+ }
1431
+ )
1432
+ }
1433
+ );
1434
+ }
1435
+
1436
+ // src/ui/form.tsx
1437
+ var import_radix_ui12 = require("radix-ui");
1438
+ var import_jsx_runtime15 = require("react/jsx-runtime");
1439
+ function Form({ ...props }) {
1440
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_radix_ui12.Form.Root, { "data-slot": "form", ...props });
1441
+ }
1442
+ function FormField({
1443
+ ...props
1444
+ }) {
1445
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_radix_ui12.Form.Field, { "data-slot": "form-field", ...props });
1446
+ }
1447
+ function FormItem({ className, ...props }) {
1448
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1449
+ "div",
1450
+ {
1451
+ "data-slot": "form-item",
1452
+ className: cn("grid gap-1.5", className),
1453
+ ...props
1454
+ }
1455
+ );
1456
+ }
1457
+ function FormLabel({
1458
+ className,
1459
+ ...props
1460
+ }) {
1461
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_radix_ui12.Form.Label, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Label, { "data-slot": "form-label", className, ...props }) });
1462
+ }
1463
+ function FormControl({
1464
+ ...props
1465
+ }) {
1466
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_radix_ui12.Form.Control, { "data-slot": "form-control", ...props });
1467
+ }
1468
+ function FormMessage({
1469
+ className,
1470
+ ...props
1471
+ }) {
1472
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1473
+ import_radix_ui12.Form.Message,
1474
+ {
1475
+ "data-slot": "form-message",
1476
+ className: cn("text-xs text-destructive", className),
1477
+ ...props
1478
+ }
1479
+ );
1480
+ }
1481
+ function FormSubmit({
1482
+ className,
1483
+ ...props
1484
+ }) {
1485
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1486
+ import_radix_ui12.Form.Submit,
1487
+ {
1488
+ "data-slot": "form-submit",
1489
+ className,
1490
+ ...props
1491
+ }
1492
+ );
1493
+ }
1494
+
1495
+ // src/ui/aspect-ratio.tsx
1496
+ var import_radix_ui13 = require("radix-ui");
1497
+ var import_jsx_runtime16 = require("react/jsx-runtime");
1498
+ function AspectRatio({
1499
+ ...props
1500
+ }) {
1501
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_radix_ui13.AspectRatio.Root, { "data-slot": "aspect-ratio", ...props });
1502
+ }
1503
+
1504
+ // src/ui/breadcrumb.tsx
1505
+ var import_lucide_react6 = require("lucide-react");
1506
+ var import_radix_ui14 = require("radix-ui");
1507
+ var import_jsx_runtime17 = require("react/jsx-runtime");
1508
+ function Breadcrumb({ ...props }) {
1509
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("nav", { "data-slot": "breadcrumb", "aria-label": "Breadcrumb", ...props });
1510
+ }
1511
+ function BreadcrumbList({ className, ...props }) {
1512
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1513
+ "ol",
1514
+ {
1515
+ "data-slot": "breadcrumb-list",
1516
+ className: cn(
1517
+ "flex flex-wrap items-center gap-1.5 text-sm text-muted-foreground",
1518
+ className
1519
+ ),
1520
+ ...props
1521
+ }
1522
+ );
1523
+ }
1524
+ function BreadcrumbItem({ className, ...props }) {
1525
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1526
+ "li",
1527
+ {
1528
+ "data-slot": "breadcrumb-item",
1529
+ className: cn("inline-flex items-center gap-1.5", className),
1530
+ ...props
1531
+ }
1532
+ );
1533
+ }
1534
+ function BreadcrumbLink({
1535
+ className,
1536
+ asChild,
1537
+ ...props
1538
+ }) {
1539
+ const Comp = asChild ? import_radix_ui14.Slot.Root : "a";
1540
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1541
+ Comp,
1542
+ {
1543
+ "data-slot": "breadcrumb-link",
1544
+ className: cn("transition-colors hover:text-foreground", className),
1545
+ ...props
1546
+ }
1547
+ );
1548
+ }
1549
+ function BreadcrumbPage({ className, ...props }) {
1550
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1551
+ "span",
1552
+ {
1553
+ "data-slot": "breadcrumb-page",
1554
+ role: "link",
1555
+ "aria-disabled": "true",
1556
+ "aria-current": "page",
1557
+ className: cn("font-normal text-foreground", className),
1558
+ ...props
1559
+ }
1560
+ );
1561
+ }
1562
+ function BreadcrumbSeparator({
1563
+ children,
1564
+ className,
1565
+ ...props
1566
+ }) {
1567
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1568
+ "li",
1569
+ {
1570
+ "data-slot": "breadcrumb-separator",
1571
+ role: "presentation",
1572
+ "aria-hidden": "true",
1573
+ className: cn("[&>svg]:size-3.5", className),
1574
+ ...props,
1575
+ children: children ?? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react6.ChevronRightIcon, {})
1576
+ }
1577
+ );
1578
+ }
1579
+ function BreadcrumbEllipsis({
1580
+ className,
1581
+ ...props
1582
+ }) {
1583
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
1584
+ "span",
1585
+ {
1586
+ "data-slot": "breadcrumb-ellipsis",
1587
+ role: "presentation",
1588
+ "aria-hidden": "true",
1589
+ className: cn("flex size-9 items-center justify-center", className),
1590
+ ...props,
1591
+ children: [
1592
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_lucide_react6.MoreHorizontalIcon, { className: "size-4" }),
1593
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "sr-only", children: "More" })
1594
+ ]
1595
+ }
1596
+ );
1597
+ }
1598
+
1599
+ // src/ui/pagination.tsx
1600
+ var import_lucide_react7 = require("lucide-react");
1601
+ var import_jsx_runtime18 = require("react/jsx-runtime");
1602
+ function Pagination({ className, ...props }) {
1603
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1604
+ "nav",
1605
+ {
1606
+ "data-slot": "pagination",
1607
+ role: "navigation",
1608
+ "aria-label": "pagination",
1609
+ className: cn("mx-auto flex w-full justify-center", className),
1610
+ ...props
1611
+ }
1612
+ );
1613
+ }
1614
+ function PaginationContent({ className, ...props }) {
1615
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1616
+ "ul",
1617
+ {
1618
+ "data-slot": "pagination-content",
1619
+ className: cn("flex flex-row items-center gap-1", className),
1620
+ ...props
1621
+ }
1622
+ );
1623
+ }
1624
+ function PaginationItem({ ...props }) {
1625
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("li", { "data-slot": "pagination-item", ...props });
1626
+ }
1627
+ function PaginationLink({
1628
+ className,
1629
+ isActive,
1630
+ size = "icon",
1631
+ ...props
1632
+ }) {
1633
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Button, { asChild: true, variant: isActive ? "outline" : "ghost", size, className, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1634
+ "a",
1635
+ {
1636
+ "data-slot": "pagination-link",
1637
+ "aria-current": isActive ? "page" : void 0,
1638
+ ...props
1639
+ }
1640
+ ) });
1641
+ }
1642
+ function PaginationPrevious({
1643
+ className,
1644
+ ...props
1645
+ }) {
1646
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
1647
+ PaginationLink,
1648
+ {
1649
+ "aria-label": "Go to previous page",
1650
+ size: "default",
1651
+ className: cn("gap-1 px-2.5 sm:pl-2.5", className),
1652
+ ...props,
1653
+ children: [
1654
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react7.ChevronLeftIcon, { className: "size-4" }),
1655
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "hidden sm:block", children: "Previous" })
1656
+ ]
1657
+ }
1658
+ );
1659
+ }
1660
+ function PaginationNext({
1661
+ className,
1662
+ ...props
1663
+ }) {
1664
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
1665
+ PaginationLink,
1666
+ {
1667
+ "aria-label": "Go to next page",
1668
+ size: "default",
1669
+ className: cn("gap-1 px-2.5 sm:pr-2.5", className),
1670
+ ...props,
1671
+ children: [
1672
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "hidden sm:block", children: "Next" }),
1673
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react7.ChevronRightIcon, { className: "size-4" })
1674
+ ]
1675
+ }
1676
+ );
1677
+ }
1678
+ function PaginationEllipsis({
1679
+ className,
1680
+ ...props
1681
+ }) {
1682
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
1683
+ "span",
1684
+ {
1685
+ "data-slot": "pagination-ellipsis",
1686
+ "aria-hidden": true,
1687
+ className: cn("flex size-9 items-center justify-center", className),
1688
+ ...props,
1689
+ children: [
1690
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react7.MoreHorizontalIcon, { className: "size-4" }),
1691
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "sr-only", children: "More pages" })
1692
+ ]
1693
+ }
1694
+ );
1695
+ }
1696
+
1697
+ // src/ui/toolbar.tsx
1698
+ var import_radix_ui15 = require("radix-ui");
1699
+ var import_jsx_runtime19 = require("react/jsx-runtime");
1700
+ function Toolbar({
1701
+ className,
1702
+ ...props
1703
+ }) {
1704
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1705
+ import_radix_ui15.Toolbar.Root,
1706
+ {
1707
+ "data-slot": "toolbar",
1708
+ className: cn(
1709
+ "flex items-center gap-1 rounded-lg border border-border bg-gradient-to-b from-elevated-from to-elevated-to p-1 shadow-card",
1710
+ className
1711
+ ),
1712
+ ...props
1713
+ }
1714
+ );
1715
+ }
1716
+ function ToolbarButton({
1717
+ className,
1718
+ ...props
1719
+ }) {
1720
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1721
+ import_radix_ui15.Toolbar.Button,
1722
+ {
1723
+ "data-slot": "toolbar-button",
1724
+ className: cn(
1725
+ "inline-flex h-8 min-w-8 items-center justify-center rounded-md px-2 text-sm font-medium text-foreground outline-none transition-colors",
1726
+ "hover:bg-muted focus-visible:ring-2 focus-visible:ring-foreground/10 disabled:pointer-events-none disabled:opacity-50",
1727
+ className
1728
+ ),
1729
+ ...props
1730
+ }
1731
+ );
1732
+ }
1733
+ function ToolbarSeparator({
1734
+ className,
1735
+ ...props
1736
+ }) {
1737
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1738
+ import_radix_ui15.Toolbar.Separator,
1739
+ {
1740
+ "data-slot": "toolbar-separator",
1741
+ className: cn("mx-1 h-6 w-px bg-border", className),
1742
+ ...props
1743
+ }
1744
+ );
1745
+ }
1746
+ function ToolbarToggleGroup({
1747
+ className,
1748
+ ...props
1749
+ }) {
1750
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1751
+ import_radix_ui15.Toolbar.ToggleGroup,
1752
+ {
1753
+ "data-slot": "toolbar-toggle-group",
1754
+ className: cn("flex items-center gap-0.5", className),
1755
+ ...props
1756
+ }
1757
+ );
1758
+ }
1759
+ function ToolbarToggleItem({
1760
+ className,
1761
+ ...props
1762
+ }) {
1763
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1764
+ import_radix_ui15.Toolbar.ToggleItem,
1765
+ {
1766
+ "data-slot": "toolbar-toggle-item",
1767
+ className: cn(
1768
+ "inline-flex h-8 min-w-8 items-center justify-center rounded-md px-2 text-sm outline-none transition-colors",
1769
+ "hover:bg-muted focus-visible:ring-2 focus-visible:ring-foreground/10",
1770
+ "data-[state=on]:bg-accent data-[state=on]:text-accent-foreground",
1771
+ className
1772
+ ),
1773
+ ...props
1774
+ }
1775
+ );
1776
+ }
1777
+ function ToolbarLink({
1778
+ className,
1779
+ ...props
1780
+ }) {
1781
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1782
+ import_radix_ui15.Toolbar.Link,
1783
+ {
1784
+ "data-slot": "toolbar-link",
1785
+ className: cn(
1786
+ "inline-flex h-8 items-center rounded-md px-2 text-sm text-foreground outline-none transition-colors hover:bg-muted focus-visible:ring-2 focus-visible:ring-foreground/10",
1787
+ className
1788
+ ),
1789
+ ...props
1790
+ }
1791
+ );
1792
+ }
1793
+
1794
+ // src/ui/menubar.tsx
1795
+ var import_radix_ui16 = require("radix-ui");
1796
+ var import_lucide_react8 = require("lucide-react");
1797
+ var import_jsx_runtime20 = require("react/jsx-runtime");
1798
+ function Menubar({
1799
+ className,
1800
+ ...props
1801
+ }) {
1802
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1803
+ import_radix_ui16.Menubar.Root,
1804
+ {
1805
+ "data-slot": "menubar",
1806
+ className: cn(
1807
+ "flex h-9 items-center gap-1 rounded-lg border border-border bg-gradient-to-b from-elevated-from to-elevated-to p-1 shadow-card",
1808
+ className
1809
+ ),
1810
+ ...props
1811
+ }
1812
+ );
1813
+ }
1814
+ function MenubarMenu({
1815
+ ...props
1816
+ }) {
1817
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_radix_ui16.Menubar.Menu, { "data-slot": "menubar-menu", ...props });
1818
+ }
1819
+ function MenubarTrigger({
1820
+ className,
1821
+ ...props
1822
+ }) {
1823
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1824
+ import_radix_ui16.Menubar.Trigger,
1825
+ {
1826
+ "data-slot": "menubar-trigger",
1827
+ className: cn(
1828
+ "flex cursor-default items-center rounded-md px-2 py-1 text-sm font-medium outline-none select-none",
1829
+ "focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground",
1830
+ className
1831
+ ),
1832
+ ...props
1833
+ }
1834
+ );
1835
+ }
1836
+ function MenubarContent({
1837
+ className,
1838
+ align = "start",
1839
+ alignOffset = -4,
1840
+ sideOffset = 8,
1841
+ ...props
1842
+ }) {
1843
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_radix_ui16.Menubar.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1844
+ import_radix_ui16.Menubar.Content,
1845
+ {
1846
+ "data-slot": "menubar-content",
1847
+ align,
1848
+ alignOffset,
1849
+ sideOffset,
1850
+ className: cn(
1851
+ overlaySurfaceClass,
1852
+ "min-w-[12rem] origin-[var(--radix-menubar-content-transform-origin)] overflow-hidden rounded-lg p-1",
1853
+ className
1854
+ ),
1855
+ ...props
1856
+ }
1857
+ ) });
1858
+ }
1859
+ function MenubarItem({
1860
+ className,
1861
+ inset,
1862
+ variant = "default",
1863
+ ...props
1864
+ }) {
1865
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1866
+ import_radix_ui16.Menubar.Item,
1867
+ {
1868
+ "data-slot": "menubar-item",
1869
+ "data-inset": inset,
1870
+ "data-variant": variant,
1871
+ className: cn(
1872
+ overlayItemClass,
1873
+ "data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10",
1874
+ className
1875
+ ),
1876
+ ...props
1877
+ }
1878
+ );
1879
+ }
1880
+ function MenubarCheckboxItem({
1881
+ className,
1882
+ children,
1883
+ checked,
1884
+ ...props
1885
+ }) {
1886
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
1887
+ import_radix_ui16.Menubar.CheckboxItem,
1888
+ {
1889
+ "data-slot": "menubar-checkbox-item",
1890
+ className: cn(overlayItemClass, "py-1.5 pr-2 pl-8", className),
1891
+ checked,
1892
+ ...props,
1893
+ children: [
1894
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_radix_ui16.Menubar.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react8.CheckIcon, { className: "size-4" }) }) }),
1895
+ children
1896
+ ]
1897
+ }
1898
+ );
1899
+ }
1900
+ function MenubarRadioGroup({
1901
+ ...props
1902
+ }) {
1903
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_radix_ui16.Menubar.RadioGroup, { "data-slot": "menubar-radio-group", ...props });
1904
+ }
1905
+ function MenubarRadioItem({
1906
+ className,
1907
+ children,
1908
+ ...props
1909
+ }) {
1910
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
1911
+ import_radix_ui16.Menubar.RadioItem,
1912
+ {
1913
+ "data-slot": "menubar-radio-item",
1914
+ className: cn(overlayItemClass, "py-1.5 pr-2 pl-8", className),
1915
+ ...props,
1916
+ children: [
1917
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_radix_ui16.Menubar.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react8.CircleIcon, { className: "size-2 fill-current" }) }) }),
1918
+ children
1919
+ ]
1920
+ }
1921
+ );
1922
+ }
1923
+ function MenubarLabel({
1924
+ className,
1925
+ inset,
1926
+ ...props
1927
+ }) {
1928
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1929
+ import_radix_ui16.Menubar.Label,
1930
+ {
1931
+ "data-slot": "menubar-label",
1932
+ "data-inset": inset,
1933
+ className: cn(
1934
+ "px-2 py-1.5 text-xs font-medium text-muted-foreground data-[inset]:pl-8",
1935
+ className
1936
+ ),
1937
+ ...props
1938
+ }
1939
+ );
1940
+ }
1941
+ function MenubarSeparator({
1942
+ className,
1943
+ ...props
1944
+ }) {
1945
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1946
+ import_radix_ui16.Menubar.Separator,
1947
+ {
1948
+ "data-slot": "menubar-separator",
1949
+ className: cn("-mx-1 my-1 h-px bg-border", className),
1950
+ ...props
1951
+ }
1952
+ );
1953
+ }
1954
+ function MenubarShortcut({
1955
+ className,
1956
+ ...props
1957
+ }) {
1958
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1959
+ "span",
1960
+ {
1961
+ "data-slot": "menubar-shortcut",
1962
+ className: cn(
1963
+ "ml-auto text-xs tracking-widest text-muted-foreground",
1964
+ className
1965
+ ),
1966
+ ...props
1967
+ }
1968
+ );
1969
+ }
1970
+ function MenubarSub({
1971
+ ...props
1972
+ }) {
1973
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_radix_ui16.Menubar.Sub, { "data-slot": "menubar-sub", ...props });
1974
+ }
1975
+ function MenubarSubTrigger({
1976
+ className,
1977
+ inset,
1978
+ children,
1979
+ ...props
1980
+ }) {
1981
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
1982
+ import_radix_ui16.Menubar.SubTrigger,
1983
+ {
1984
+ "data-slot": "menubar-sub-trigger",
1985
+ "data-inset": inset,
1986
+ className: cn(
1987
+ overlayItemClass,
1988
+ "data-[state=open]:bg-accent data-[state=open]:text-accent-foreground data-[inset]:pl-8",
1989
+ className
1990
+ ),
1991
+ ...props,
1992
+ children: [
1993
+ children,
1994
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react8.ChevronRightIcon, { className: "ml-auto size-4" })
1995
+ ]
1996
+ }
1997
+ );
1998
+ }
1999
+ function MenubarSubContent({
2000
+ className,
2001
+ ...props
2002
+ }) {
2003
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2004
+ import_radix_ui16.Menubar.SubContent,
2005
+ {
2006
+ "data-slot": "menubar-sub-content",
2007
+ className: cn(
2008
+ overlaySurfaceClass,
2009
+ "min-w-[8rem] origin-[var(--radix-menubar-content-transform-origin)] overflow-hidden rounded-lg p-1",
2010
+ className
2011
+ ),
2012
+ ...props
2013
+ }
2014
+ );
2015
+ }
2016
+
2017
+ // src/ui/navigation-menu.tsx
2018
+ var import_radix_ui17 = require("radix-ui");
2019
+ var import_lucide_react9 = require("lucide-react");
2020
+ var import_class_variance_authority2 = require("class-variance-authority");
2021
+ var import_jsx_runtime21 = require("react/jsx-runtime");
2022
+ function NavigationMenu({
2023
+ className,
2024
+ children,
2025
+ viewport = true,
2026
+ ...props
2027
+ }) {
2028
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
2029
+ import_radix_ui17.NavigationMenu.Root,
2030
+ {
2031
+ "data-slot": "navigation-menu",
2032
+ "data-viewport": viewport,
2033
+ className: cn(
2034
+ "group/navigation-menu relative flex max-w-max flex-1 items-center justify-center",
2035
+ className
2036
+ ),
2037
+ ...props,
2038
+ children: [
2039
+ children,
2040
+ viewport ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(NavigationMenuViewport, {}) : null
2041
+ ]
2042
+ }
2043
+ );
2044
+ }
2045
+ function NavigationMenuList({
2046
+ className,
2047
+ ...props
2048
+ }) {
2049
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2050
+ import_radix_ui17.NavigationMenu.List,
2051
+ {
2052
+ "data-slot": "navigation-menu-list",
2053
+ className: cn(
2054
+ "group flex flex-1 list-none items-center justify-center gap-1",
2055
+ className
2056
+ ),
2057
+ ...props
2058
+ }
2059
+ );
2060
+ }
2061
+ function NavigationMenuItem({
2062
+ ...props
2063
+ }) {
2064
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_radix_ui17.NavigationMenu.Item, { "data-slot": "navigation-menu-item", ...props });
2065
+ }
2066
+ var navigationMenuTriggerStyle = (0, import_class_variance_authority2.cva)(
2067
+ "group inline-flex h-9 w-max items-center justify-center rounded-lg bg-transparent px-4 py-2 text-sm font-medium transition-colors hover:bg-muted hover:text-foreground focus:bg-muted focus:text-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[state=open]:bg-muted/80 data-[state=open]:text-foreground"
2068
+ );
2069
+ function NavigationMenuTrigger({
2070
+ className,
2071
+ children,
2072
+ ...props
2073
+ }) {
2074
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
2075
+ import_radix_ui17.NavigationMenu.Trigger,
2076
+ {
2077
+ "data-slot": "navigation-menu-trigger",
2078
+ className: cn(navigationMenuTriggerStyle(), "group", className),
2079
+ ...props,
2080
+ children: [
2081
+ children,
2082
+ " ",
2083
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2084
+ import_lucide_react9.ChevronDownIcon,
2085
+ {
2086
+ className: "relative top-px ml-1 size-3 transition duration-300 group-data-[state=open]:rotate-180",
2087
+ "aria-hidden": "true"
2088
+ }
2089
+ )
2090
+ ]
2091
+ }
2092
+ );
2093
+ }
2094
+ function NavigationMenuContent({
2095
+ className,
2096
+ ...props
2097
+ }) {
2098
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2099
+ import_radix_ui17.NavigationMenu.Content,
2100
+ {
2101
+ "data-slot": "navigation-menu-content",
2102
+ className: cn(
2103
+ "data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 top-0 left-0 w-full p-2 pr-2.5 md:absolute md:w-auto",
2104
+ "group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-[state=open]:animate-in group-data-[viewport=false]/navigation-menu:data-[state=closed]:animate-out group-data-[viewport=false]/navigation-menu:data-[state=closed]:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:zoom-in-95 group-data-[viewport=false]/navigation-menu:top-full group-data-[viewport=false]/navigation-menu:mt-1.5 group-data-[viewport=false]/navigation-menu:overflow-hidden group-data-[viewport=false]/navigation-menu:rounded-lg group-data-[viewport=false]/navigation-menu:border group-data-[viewport=false]/navigation-menu:border-border group-data-[viewport=false]/navigation-menu:shadow-card",
2105
+ className
2106
+ ),
2107
+ ...props
2108
+ }
2109
+ );
2110
+ }
2111
+ function NavigationMenuViewport({
2112
+ className,
2113
+ ...props
2114
+ }) {
2115
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: cn("absolute top-full left-0 isolate z-[80] flex justify-center"), children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2116
+ import_radix_ui17.NavigationMenu.Viewport,
2117
+ {
2118
+ "data-slot": "navigation-menu-viewport",
2119
+ className: cn(
2120
+ overlaySurfaceClass,
2121
+ "origin-top-center relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-lg md:w-[var(--radix-navigation-menu-viewport-width)]",
2122
+ className
2123
+ ),
2124
+ ...props
2125
+ }
2126
+ ) });
2127
+ }
2128
+ function NavigationMenuLink({
2129
+ className,
2130
+ ...props
2131
+ }) {
2132
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2133
+ import_radix_ui17.NavigationMenu.Link,
2134
+ {
2135
+ "data-slot": "navigation-menu-link",
2136
+ className: cn(
2137
+ "flex flex-col gap-1 rounded-md p-2 text-sm transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none data-[active=true]:bg-accent/50 data-[active=true]:text-accent-foreground [&_svg:not([class*='size-'])]:size-4",
2138
+ className
2139
+ ),
2140
+ ...props
2141
+ }
2142
+ );
2143
+ }
2144
+ function NavigationMenuIndicator({
2145
+ className,
2146
+ ...props
2147
+ }) {
2148
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2149
+ import_radix_ui17.NavigationMenu.Indicator,
2150
+ {
2151
+ "data-slot": "navigation-menu-indicator",
2152
+ className: cn(
2153
+ "top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:animate-in data-[state=visible]:fade-in",
2154
+ className
2155
+ ),
2156
+ ...props,
2157
+ children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-border shadow-md" })
2158
+ }
2159
+ );
2160
+ }
2161
+
2162
+ // src/ui/command.tsx
2163
+ var import_cmdk = require("cmdk");
2164
+ var import_lucide_react10 = require("lucide-react");
2165
+ var import_jsx_runtime22 = require("react/jsx-runtime");
2166
+ function Command({
2167
+ className,
2168
+ ...props
2169
+ }) {
2170
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2171
+ import_cmdk.Command,
2172
+ {
2173
+ "data-slot": "command",
2174
+ className: cn(
2175
+ "flex h-full w-full flex-col overflow-hidden bg-popover text-popover-foreground",
2176
+ className
2177
+ ),
2178
+ ...props
2179
+ }
2180
+ );
2181
+ }
2182
+ function CommandDialog({
2183
+ title = "Command palette",
2184
+ description = "Search for a command to run\u2026",
2185
+ children,
2186
+ className,
2187
+ showCloseButton = true,
2188
+ ...props
2189
+ }) {
2190
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(Dialog, { ...props, children: [
2191
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(DialogHeader, { className: "sr-only", children: [
2192
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(DialogTitle, { children: title }),
2193
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(DialogDescription, { children: description })
2194
+ ] }),
2195
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2196
+ DialogContent,
2197
+ {
2198
+ className: cn("overflow-hidden p-0", className),
2199
+ showCloseButton,
2200
+ children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Command, { className: "[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:size-4 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-2 [&_[cmdk-item]_svg]:size-4", children })
2201
+ }
2202
+ )
2203
+ ] });
2204
+ }
2205
+ function CommandInput({
2206
+ className,
2207
+ ...props
2208
+ }) {
2209
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
2210
+ "div",
2211
+ {
2212
+ "data-slot": "command-input-wrapper",
2213
+ className: "flex h-10 items-center gap-2 border-b border-border px-3",
2214
+ children: [
2215
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_lucide_react10.SearchIcon, { className: "size-4 shrink-0 text-muted-foreground" }),
2216
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2217
+ import_cmdk.Command.Input,
2218
+ {
2219
+ "data-slot": "command-input",
2220
+ className: cn(
2221
+ "flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground/70 disabled:cursor-not-allowed disabled:opacity-50",
2222
+ className
2223
+ ),
2224
+ ...props
2225
+ }
2226
+ )
2227
+ ]
2228
+ }
2229
+ );
2230
+ }
2231
+ function CommandList({
2232
+ className,
2233
+ ...props
2234
+ }) {
2235
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2236
+ import_cmdk.Command.List,
2237
+ {
2238
+ "data-slot": "command-list",
2239
+ className: cn("max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto", className),
2240
+ ...props
2241
+ }
2242
+ );
2243
+ }
2244
+ function CommandEmpty({
2245
+ ...props
2246
+ }) {
2247
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2248
+ import_cmdk.Command.Empty,
2249
+ {
2250
+ "data-slot": "command-empty",
2251
+ className: "py-6 text-center text-sm text-muted-foreground",
2252
+ ...props
2253
+ }
2254
+ );
2255
+ }
2256
+ function CommandGroup({
2257
+ className,
2258
+ ...props
2259
+ }) {
2260
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2261
+ import_cmdk.Command.Group,
2262
+ {
2263
+ "data-slot": "command-group",
2264
+ className: cn(
2265
+ "overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground",
2266
+ className
2267
+ ),
2268
+ ...props
2269
+ }
2270
+ );
2271
+ }
2272
+ function CommandSeparator({
2273
+ className,
2274
+ ...props
2275
+ }) {
2276
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2277
+ import_cmdk.Command.Separator,
2278
+ {
2279
+ "data-slot": "command-separator",
2280
+ className: cn("-mx-1 h-px bg-border", className),
2281
+ ...props
2282
+ }
2283
+ );
2284
+ }
2285
+ function CommandItem({
2286
+ className,
2287
+ ...props
2288
+ }) {
2289
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2290
+ import_cmdk.Command.Item,
2291
+ {
2292
+ "data-slot": "command-item",
2293
+ className: cn(
2294
+ overlayItemClass,
2295
+ "data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground",
2296
+ className
2297
+ ),
2298
+ ...props
2299
+ }
2300
+ );
2301
+ }
2302
+ function CommandShortcut({
2303
+ className,
2304
+ ...props
2305
+ }) {
2306
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2307
+ "span",
2308
+ {
2309
+ "data-slot": "command-shortcut",
2310
+ className: cn(
2311
+ "ml-auto text-xs tracking-widest text-muted-foreground",
2312
+ className
2313
+ ),
2314
+ ...props
2315
+ }
2316
+ );
2317
+ }
2318
+
2319
+ // src/ui/calendar.tsx
2320
+ var React2 = __toESM(require("react"), 1);
2321
+ var import_lucide_react11 = require("lucide-react");
2322
+ var import_react_day_picker = require("react-day-picker");
2323
+ var import_jsx_runtime23 = require("react/jsx-runtime");
2324
+ function Calendar({
2325
+ className,
2326
+ classNames,
2327
+ showOutsideDays = true,
2328
+ ...props
2329
+ }) {
2330
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2331
+ import_react_day_picker.DayPicker,
2332
+ {
2333
+ showOutsideDays,
2334
+ className: cn("p-3", className),
2335
+ classNames: {
2336
+ months: "flex flex-col gap-4 sm:flex-row sm:gap-4",
2337
+ month: "flex flex-col gap-4",
2338
+ month_caption: "relative flex items-center justify-center pt-1",
2339
+ caption_label: "text-sm font-medium",
2340
+ nav: "flex items-center gap-1",
2341
+ button_previous: cn(
2342
+ buttonVariants({ variant: "outline" }),
2343
+ "absolute left-1 size-7 bg-transparent p-0 opacity-70 hover:opacity-100"
2344
+ ),
2345
+ button_next: cn(
2346
+ buttonVariants({ variant: "outline" }),
2347
+ "absolute right-1 size-7 bg-transparent p-0 opacity-70 hover:opacity-100"
2348
+ ),
2349
+ month_grid: "w-full border-collapse",
2350
+ weekdays: "flex",
2351
+ weekday: "w-9 rounded-md text-[0.8rem] font-normal text-muted-foreground",
2352
+ week: "mt-2 flex w-full",
2353
+ day: cn(
2354
+ "relative size-9 p-0 text-center text-sm",
2355
+ "[&:has([aria-selected].day-range-end)]:rounded-r-md",
2356
+ "[&:has([aria-selected].day-outside)]:bg-accent/50",
2357
+ "[&:has([aria-selected])]:bg-accent",
2358
+ "first:[&:has([aria-selected])]:rounded-l-md",
2359
+ "last:[&:has([aria-selected])]:rounded-r-md",
2360
+ "focus-within:relative focus-within:z-10"
2361
+ ),
2362
+ day_button: cn(
2363
+ buttonVariants({ variant: "ghost" }),
2364
+ "size-9 p-0 font-normal aria-selected:opacity-100"
2365
+ ),
2366
+ range_start: "day-range-start rounded-l-md",
2367
+ range_middle: "day-range-middle aria-selected:bg-accent",
2368
+ range_end: "day-range-end rounded-r-md",
2369
+ selected: "bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground",
2370
+ today: "bg-accent text-accent-foreground",
2371
+ outside: "day-outside text-muted-foreground aria-selected:bg-accent/50 aria-selected:text-muted-foreground",
2372
+ disabled: "text-muted-foreground opacity-50",
2373
+ hidden: "invisible",
2374
+ ...classNames
2375
+ },
2376
+ components: {
2377
+ Chevron: ({ orientation, className: className2, ...chevronProps }) => {
2378
+ const Icon = orientation === "left" ? import_lucide_react11.ChevronLeftIcon : import_lucide_react11.ChevronRightIcon;
2379
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Icon, { className: cn("size-4", className2), ...chevronProps });
2380
+ },
2381
+ DayButton: CalendarDayButton
2382
+ },
2383
+ ...props
2384
+ }
2385
+ );
2386
+ }
2387
+ function CalendarDayButton({
2388
+ className,
2389
+ day,
2390
+ modifiers,
2391
+ ...props
2392
+ }) {
2393
+ const ref = React2.useRef(null);
2394
+ React2.useEffect(() => {
2395
+ if (modifiers.focused) ref.current?.focus();
2396
+ }, [modifiers.focused]);
2397
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2398
+ "button",
2399
+ {
2400
+ ref,
2401
+ type: "button",
2402
+ "data-day": day.date.toLocaleDateString(),
2403
+ "data-selected-single": modifiers.selected && !modifiers.range_start && !modifiers.range_end && !modifiers.range_middle,
2404
+ "data-range-start": modifiers.range_start,
2405
+ "data-range-end": modifiers.range_end,
2406
+ "data-range-middle": modifiers.range_middle,
2407
+ className: cn(
2408
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors",
2409
+ "hover:bg-accent hover:text-accent-foreground",
2410
+ "focus-visible:ring-2 focus-visible:ring-foreground/10 focus-visible:outline-none",
2411
+ "disabled:pointer-events-none disabled:opacity-50",
2412
+ "data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground",
2413
+ "data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground",
2414
+ "data-[range-start=true]:rounded-l-md data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground",
2415
+ "data-[range-end=true]:rounded-r-md data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground",
2416
+ className
2417
+ ),
2418
+ ...props
2419
+ }
2420
+ );
2421
+ }
2422
+
2423
+ // src/ui/combobox.tsx
2424
+ var import_lucide_react12 = require("lucide-react");
2425
+ var import_jsx_runtime24 = require("react/jsx-runtime");
2426
+ function Combobox({
2427
+ ...props
2428
+ }) {
2429
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Popover, { "data-slot": "combobox", ...props });
2430
+ }
2431
+ function ComboboxTrigger({
2432
+ className,
2433
+ size = "default",
2434
+ children,
2435
+ ...props
2436
+ }) {
2437
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
2438
+ PopoverTrigger,
2439
+ {
2440
+ "data-slot": "combobox-trigger",
2441
+ className: cn(
2442
+ controlClass({ size }),
2443
+ "flex w-full items-center justify-between gap-2 whitespace-nowrap font-normal",
2444
+ "[&_svg]:pointer-events-none [&_svg]:shrink-0",
2445
+ className
2446
+ ),
2447
+ ...props,
2448
+ children: [
2449
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "truncate", children }),
2450
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react12.ChevronDownIcon, { className: "size-4 shrink-0 opacity-50" })
2451
+ ]
2452
+ }
2453
+ );
2454
+ }
2455
+ function ComboboxAnchor({
2456
+ ...props
2457
+ }) {
2458
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(PopoverAnchor, { "data-slot": "combobox-anchor", ...props });
2459
+ }
2460
+ function ComboboxContent({
2461
+ className,
2462
+ align = "start",
2463
+ ...props
2464
+ }) {
2465
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2466
+ PopoverContent,
2467
+ {
2468
+ "data-slot": "combobox-content",
2469
+ variant: "list",
2470
+ align,
2471
+ className: cn(
2472
+ "w-[var(--radix-popover-trigger-width)] min-w-[8rem] p-0",
2473
+ className
2474
+ ),
2475
+ ...props
2476
+ }
2477
+ );
2478
+ }
2479
+ function ComboboxCommand({
2480
+ className,
2481
+ ...props
2482
+ }) {
2483
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2484
+ Command,
2485
+ {
2486
+ "data-slot": "combobox-command",
2487
+ className,
2488
+ ...props
2489
+ }
2490
+ );
2491
+ }
2492
+ function ComboboxInput({
2493
+ ...props
2494
+ }) {
2495
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(CommandInput, { "data-slot": "combobox-input", ...props });
2496
+ }
2497
+ function ComboboxList({
2498
+ ...props
2499
+ }) {
2500
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(CommandList, { "data-slot": "combobox-list", ...props });
2501
+ }
2502
+ function ComboboxEmpty({
2503
+ ...props
2504
+ }) {
2505
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(CommandEmpty, { "data-slot": "combobox-empty", ...props });
2506
+ }
2507
+ function ComboboxGroup({
2508
+ ...props
2509
+ }) {
2510
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(CommandGroup, { "data-slot": "combobox-group", ...props });
2511
+ }
2512
+ function ComboboxItem({
2513
+ ...props
2514
+ }) {
2515
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(CommandItem, { "data-slot": "combobox-item", ...props });
2516
+ }
2517
+ function ComboboxSeparator({
2518
+ ...props
2519
+ }) {
2520
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(CommandSeparator, { "data-slot": "combobox-separator", ...props });
2521
+ }
2522
+ function ComboboxShortcut({
2523
+ ...props
2524
+ }) {
2525
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(CommandShortcut, { "data-slot": "combobox-shortcut", ...props });
2526
+ }
2527
+
2528
+ // src/ui/date-picker.tsx
2529
+ var import_lucide_react13 = require("lucide-react");
2530
+ var import_jsx_runtime25 = require("react/jsx-runtime");
2531
+ function DatePicker({
2532
+ ...props
2533
+ }) {
2534
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Popover, { "data-slot": "date-picker", ...props });
2535
+ }
2536
+ function DatePickerTrigger({
2537
+ ...props
2538
+ }) {
2539
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(PopoverTrigger, { "data-slot": "date-picker-trigger", ...props });
2540
+ }
2541
+ function DatePickerContent({
2542
+ className,
2543
+ align = "start",
2544
+ ...props
2545
+ }) {
2546
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2547
+ PopoverContent,
2548
+ {
2549
+ "data-slot": "date-picker-content",
2550
+ align,
2551
+ className: cn("w-auto p-0", className),
2552
+ ...props
2553
+ }
2554
+ );
2555
+ }
2556
+ function DatePickerCalendar({
2557
+ className,
2558
+ ...props
2559
+ }) {
2560
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2561
+ Calendar,
2562
+ {
2563
+ "data-slot": "date-picker-calendar",
2564
+ className: cn("rounded-lg border-0", className),
2565
+ ...props
2566
+ }
2567
+ );
2568
+ }
2569
+ function formatPickerDate(date) {
2570
+ return date.toLocaleDateString(void 0, {
2571
+ month: "short",
2572
+ day: "numeric",
2573
+ year: "numeric"
2574
+ });
2575
+ }
2576
+ function DatePickerButton({
2577
+ date,
2578
+ placeholder = "Pick a date",
2579
+ className,
2580
+ ...props
2581
+ }) {
2582
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
2583
+ "button",
2584
+ {
2585
+ type: "button",
2586
+ "data-slot": "date-picker-button",
2587
+ className: cn(
2588
+ controlClass(),
2589
+ "flex w-full items-center justify-start gap-2 text-left font-normal",
2590
+ !date && "text-muted-foreground",
2591
+ className
2592
+ ),
2593
+ ...props,
2594
+ children: [
2595
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_lucide_react13.CalendarIcon, { className: "size-4 shrink-0 opacity-70" }),
2596
+ date ? formatPickerDate(date) : placeholder
2597
+ ]
2598
+ }
2599
+ );
2600
+ }
2601
+
2602
+ // src/ui/input-otp.tsx
2603
+ var import_lucide_react14 = require("lucide-react");
2604
+ var import_radix_ui18 = require("radix-ui");
2605
+ var import_jsx_runtime26 = require("react/jsx-runtime");
2606
+ function InputOTP({
2607
+ className,
2608
+ containerClassName,
2609
+ children,
2610
+ ...props
2611
+ }) {
2612
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2613
+ import_radix_ui18.unstable_OneTimePasswordField.Root,
2614
+ {
2615
+ "data-slot": "input-otp",
2616
+ className: cn(
2617
+ "flex items-center gap-2 has-disabled:opacity-50",
2618
+ containerClassName,
2619
+ className
2620
+ ),
2621
+ ...props,
2622
+ children
2623
+ }
2624
+ );
2625
+ }
2626
+ function InputOTPGroup({
2627
+ className,
2628
+ ...props
2629
+ }) {
2630
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2631
+ "div",
2632
+ {
2633
+ "data-slot": "input-otp-group",
2634
+ className: cn("flex items-center", className),
2635
+ ...props
2636
+ }
2637
+ );
2638
+ }
2639
+ function InputOTPSlot({
2640
+ className,
2641
+ ...props
2642
+ }) {
2643
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2644
+ import_radix_ui18.unstable_OneTimePasswordField.Input,
2645
+ {
2646
+ "data-slot": "input-otp-slot",
2647
+ className: cn(
2648
+ controlSurfaceClass,
2649
+ "relative size-9 rounded-none text-center text-sm tabular-nums",
2650
+ "-ms-px first:ms-0 first:rounded-s-lg last:rounded-e-lg",
2651
+ "focus-visible:z-10",
2652
+ className
2653
+ ),
2654
+ ...props
2655
+ }
2656
+ );
2657
+ }
2658
+ function InputOTPHiddenInput({
2659
+ ...props
2660
+ }) {
2661
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_radix_ui18.unstable_OneTimePasswordField.HiddenInput, { "data-slot": "input-otp-hidden-input", ...props });
2662
+ }
2663
+ function InputOTPSeparator({
2664
+ className,
2665
+ ...props
2666
+ }) {
2667
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2668
+ "div",
2669
+ {
2670
+ role: "separator",
2671
+ "data-slot": "input-otp-separator",
2672
+ "aria-hidden": true,
2673
+ className: cn("text-muted-foreground", className),
2674
+ ...props,
2675
+ children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_lucide_react14.MinusIcon, { className: "size-4" })
2676
+ }
2677
+ );
2678
+ }
2679
+
2680
+ // src/ui/kbd.tsx
2681
+ var import_jsx_runtime27 = require("react/jsx-runtime");
2682
+ function Kbd({ className, ...props }) {
2683
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2684
+ "kbd",
2685
+ {
2686
+ "data-slot": "kbd",
2687
+ className: cn(
2688
+ "pointer-events-none inline-flex h-5 min-w-5 items-center justify-center gap-1 rounded border border-border bg-muted px-1.5 font-mono text-[0.625rem] font-medium text-muted-foreground",
2689
+ className
2690
+ ),
2691
+ ...props
2692
+ }
2693
+ );
2694
+ }
2695
+ function KbdGroup({ className, ...props }) {
2696
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2697
+ "div",
2698
+ {
2699
+ "data-slot": "kbd-group",
2700
+ className: cn("inline-flex items-center gap-1", className),
2701
+ ...props
2702
+ }
2703
+ );
2704
+ }
2705
+
2706
+ // src/ui/spinner.tsx
2707
+ var import_jsx_runtime28 = require("react/jsx-runtime");
2708
+ function Spinner({
2709
+ className,
2710
+ ...props
2711
+ }) {
2712
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
2713
+ "svg",
2714
+ {
2715
+ "data-slot": "spinner",
2716
+ role: "status",
2717
+ "aria-label": "Loading",
2718
+ viewBox: "0 0 24 24",
2719
+ fill: "none",
2720
+ className: cn("size-4 animate-spin text-muted-foreground", className),
2721
+ ...props,
2722
+ children: [
2723
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2724
+ "circle",
2725
+ {
2726
+ className: "opacity-25",
2727
+ cx: "12",
2728
+ cy: "12",
2729
+ r: "10",
2730
+ stroke: "currentColor",
2731
+ strokeWidth: "3"
2732
+ }
2733
+ ),
2734
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2735
+ "path",
2736
+ {
2737
+ className: "opacity-75",
2738
+ fill: "currentColor",
2739
+ d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
2740
+ }
2741
+ )
2742
+ ]
2743
+ }
2744
+ );
2745
+ }
2746
+
2747
+ // src/ui/input-group.tsx
2748
+ var import_jsx_runtime29 = require("react/jsx-runtime");
2749
+ function InputGroup({
2750
+ className,
2751
+ ...props
2752
+ }) {
2753
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
2754
+ "div",
2755
+ {
2756
+ "data-slot": "input-group",
2757
+ className: cn(
2758
+ controlClass(),
2759
+ "flex w-full items-stretch overflow-hidden p-0",
2760
+ "has-[[data-slot=input-group-control]:disabled]:opacity-50",
2761
+ className
2762
+ ),
2763
+ ...props
2764
+ }
2765
+ );
2766
+ }
2767
+ function InputGroupAddon({
2768
+ className,
2769
+ align = "inline-start",
2770
+ ...props
2771
+ }) {
2772
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
2773
+ "div",
2774
+ {
2775
+ "data-slot": "input-group-addon",
2776
+ "data-align": align,
2777
+ className: cn(
2778
+ "flex shrink-0 items-center bg-transparent px-3 text-sm text-muted-foreground",
2779
+ align === "inline-start" && "border-r border-border",
2780
+ align === "inline-end" && "border-l border-border",
2781
+ className
2782
+ ),
2783
+ ...props
2784
+ }
2785
+ );
2786
+ }
2787
+ function InputGroupInput({
2788
+ className,
2789
+ ...props
2790
+ }) {
2791
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
2792
+ "input",
2793
+ {
2794
+ "data-slot": "input-group-control",
2795
+ className: cn(
2796
+ "min-w-0 flex-1 border-0 bg-transparent px-3 py-2 text-sm text-foreground shadow-none outline-none",
2797
+ "placeholder:text-muted-foreground/70 focus-visible:ring-0",
2798
+ className
2799
+ ),
2800
+ ...props
2801
+ }
2802
+ );
2803
+ }
2804
+ function InputGroupText({
2805
+ className,
2806
+ ...props
2807
+ }) {
2808
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
2809
+ "span",
2810
+ {
2811
+ "data-slot": "input-group-text",
2812
+ className: cn("text-sm text-muted-foreground", className),
2813
+ ...props
2814
+ }
2815
+ );
2816
+ }
2817
+
2818
+ // src/ui/accordion.tsx
2819
+ var import_radix_ui19 = require("radix-ui");
2820
+ var import_lucide_react15 = require("lucide-react");
2821
+ var import_jsx_runtime30 = require("react/jsx-runtime");
2822
+ function Accordion({
2823
+ ...props
2824
+ }) {
2825
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_radix_ui19.Accordion.Root, { "data-slot": "accordion", ...props });
2826
+ }
2827
+ function AccordionItem({
2828
+ className,
2829
+ ...props
2830
+ }) {
2831
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2832
+ import_radix_ui19.Accordion.Item,
2833
+ {
2834
+ "data-slot": "accordion-item",
2835
+ className: cn("border-b border-border last:border-b-0", className),
2836
+ ...props
2837
+ }
2838
+ );
2839
+ }
2840
+ function AccordionTrigger({
2841
+ className,
2842
+ children,
2843
+ ...props
2844
+ }) {
2845
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_radix_ui19.Accordion.Header, { className: "flex", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
2846
+ import_radix_ui19.Accordion.Trigger,
2847
+ {
2848
+ "data-slot": "accordion-trigger",
2849
+ className: cn(
2850
+ "flex flex-1 items-center justify-between gap-4 rounded-md py-4 text-left text-sm font-medium outline-none transition-all",
2851
+ "focus-visible:ring-2 focus-visible:ring-foreground/10 disabled:pointer-events-none disabled:opacity-50",
2852
+ "hover:underline [&[data-state=open]>svg]:rotate-180",
2853
+ className
2854
+ ),
2855
+ ...props,
2856
+ children: [
2857
+ children,
2858
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_lucide_react15.ChevronDownIcon, { className: "pointer-events-none size-4 shrink-0 text-muted-foreground transition-transform duration-200" })
2859
+ ]
2860
+ }
2861
+ ) });
2862
+ }
2863
+ function AccordionContent({
2864
+ className,
2865
+ children,
2866
+ ...props
2867
+ }) {
2868
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2869
+ import_radix_ui19.Accordion.Content,
2870
+ {
2871
+ "data-slot": "accordion-content",
2872
+ className: "overflow-hidden text-sm text-muted-foreground data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",
2873
+ ...props,
2874
+ children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: cn("pt-0 pb-4", className), children })
2875
+ }
2876
+ );
2877
+ }
2878
+
2879
+ // src/ui/separator.tsx
2880
+ var import_radix_ui20 = require("radix-ui");
2881
+ var import_jsx_runtime31 = require("react/jsx-runtime");
2882
+ function Separator({
2883
+ className,
2884
+ orientation = "horizontal",
2885
+ decorative = true,
2886
+ ...props
2887
+ }) {
2888
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2889
+ import_radix_ui20.Separator.Root,
2890
+ {
2891
+ "data-slot": "separator",
2892
+ decorative,
2893
+ orientation,
2894
+ className: cn(
2895
+ "shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",
2896
+ className
2897
+ ),
2898
+ ...props
2899
+ }
2900
+ );
2901
+ }
2902
+
2903
+ // src/ui/slider.tsx
2904
+ var React3 = __toESM(require("react"), 1);
2905
+ var import_radix_ui21 = require("radix-ui");
2906
+ var import_jsx_runtime32 = require("react/jsx-runtime");
2907
+ function Slider({
2908
+ className,
2909
+ defaultValue,
2910
+ value,
2911
+ min = 0,
2912
+ max = 100,
2913
+ ...props
2914
+ }) {
2915
+ const thumbs = React3.useMemo(() => {
2916
+ if (Array.isArray(value)) return value;
2917
+ if (Array.isArray(defaultValue)) return defaultValue;
2918
+ return [min];
2919
+ }, [value, defaultValue, min]);
2920
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
2921
+ import_radix_ui21.Slider.Root,
2922
+ {
2923
+ "data-slot": "slider",
2924
+ defaultValue,
2925
+ value,
2926
+ min,
2927
+ max,
2928
+ className: cn(
2929
+ "relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50",
2930
+ "data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col",
2931
+ className
2932
+ ),
2933
+ ...props,
2934
+ children: [
2935
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2936
+ import_radix_ui21.Slider.Track,
2937
+ {
2938
+ "data-slot": "slider-track",
2939
+ className: "relative grow overflow-hidden rounded-full bg-muted data-[orientation=horizontal]:h-1.5 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5",
2940
+ children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2941
+ import_radix_ui21.Slider.Range,
2942
+ {
2943
+ "data-slot": "slider-range",
2944
+ className: "absolute bg-gradient-to-b from-primary-fill-from to-primary-fill-to data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full"
2945
+ }
2946
+ )
2947
+ }
2948
+ ),
2949
+ Array.from({ length: thumbs.length }, (_, i) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2950
+ import_radix_ui21.Slider.Thumb,
2951
+ {
2952
+ "data-slot": "slider-thumb",
2953
+ className: "block size-4 shrink-0 rounded-full border border-border bg-gradient-to-b from-elevated-from to-elevated-to shadow-card outline-none transition-[box-shadow] focus-visible:ring-2 focus-visible:ring-foreground/10 disabled:pointer-events-none disabled:opacity-50"
2954
+ },
2955
+ i
2956
+ ))
2957
+ ]
2958
+ }
2959
+ );
2960
+ }
2961
+
2962
+ // src/ui/progress.tsx
2963
+ var import_radix_ui22 = require("radix-ui");
2964
+ var import_jsx_runtime33 = require("react/jsx-runtime");
2965
+ function Progress({
2966
+ className,
2967
+ value,
2968
+ ...props
2969
+ }) {
2970
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
2971
+ import_radix_ui22.Progress.Root,
2972
+ {
2973
+ "data-slot": "progress",
2974
+ className: cn(
2975
+ "relative h-2 w-full overflow-hidden rounded-full bg-muted",
2976
+ className
2977
+ ),
2978
+ ...props,
2979
+ children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
2980
+ import_radix_ui22.Progress.Indicator,
2981
+ {
2982
+ "data-slot": "progress-indicator",
2983
+ className: "h-full w-full flex-1 bg-gradient-to-b from-primary-fill-from to-primary-fill-to transition-transform",
2984
+ style: { transform: `translateX(-${100 - (value ?? 0)}%)` }
2985
+ }
2986
+ )
2987
+ }
2988
+ );
2989
+ }
2990
+
2991
+ // src/ui/badge.tsx
2992
+ var import_radix_ui23 = require("radix-ui");
2993
+ var import_class_variance_authority3 = require("class-variance-authority");
2994
+ var import_jsx_runtime34 = require("react/jsx-runtime");
2995
+ var badgeVariants = (0, import_class_variance_authority3.cva)(
2996
+ "inline-flex w-fit shrink-0 items-center justify-center gap-1 whitespace-nowrap rounded-md border px-2 py-0.5 text-xs font-medium [&>svg]:pointer-events-none [&>svg]:size-3",
2997
+ {
2998
+ variants: {
2999
+ variant: {
3000
+ default: "border-transparent bg-gradient-to-b from-primary-fill-from to-primary-fill-to text-primary-foreground",
3001
+ secondary: "border-border bg-gradient-to-b from-elevated-from to-elevated-to text-foreground shadow-card",
3002
+ destructive: "border-destructive/45 bg-destructive/10 text-destructive",
3003
+ outline: "border-border text-foreground"
3004
+ }
3005
+ },
3006
+ defaultVariants: {
3007
+ variant: "default"
3008
+ }
3009
+ }
3010
+ );
3011
+ function Badge({
3012
+ className,
3013
+ variant,
3014
+ asChild = false,
3015
+ ...props
3016
+ }) {
3017
+ const Comp = asChild ? import_radix_ui23.Slot.Root : "span";
3018
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
3019
+ Comp,
3020
+ {
3021
+ "data-slot": "badge",
3022
+ className: cn(badgeVariants({ variant }), className),
3023
+ ...props
3024
+ }
3025
+ );
3026
+ }
3027
+
3028
+ // src/ui/sheet.tsx
3029
+ var import_lucide_react16 = require("lucide-react");
3030
+ var import_radix_ui24 = require("radix-ui");
3031
+ var import_class_variance_authority4 = require("class-variance-authority");
3032
+ var import_jsx_runtime35 = require("react/jsx-runtime");
3033
+ function Sheet({ ...props }) {
3034
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_radix_ui24.Dialog.Root, { "data-slot": "sheet", ...props });
3035
+ }
3036
+ function SheetTrigger({
3037
+ ...props
3038
+ }) {
3039
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_radix_ui24.Dialog.Trigger, { "data-slot": "sheet-trigger", ...props });
3040
+ }
3041
+ function SheetClose({
3042
+ ...props
3043
+ }) {
3044
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_radix_ui24.Dialog.Close, { "data-slot": "sheet-close", ...props });
3045
+ }
3046
+ function SheetPortal({
3047
+ ...props
3048
+ }) {
3049
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_radix_ui24.Dialog.Portal, { "data-slot": "sheet-portal", ...props });
3050
+ }
3051
+ function SheetOverlay({
3052
+ className,
3053
+ ...props
3054
+ }) {
3055
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3056
+ import_radix_ui24.Dialog.Overlay,
3057
+ {
3058
+ "data-slot": "sheet-overlay",
3059
+ className: cn(
3060
+ "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-[70] bg-black/50",
3061
+ className
3062
+ ),
3063
+ ...props
3064
+ }
3065
+ );
3066
+ }
3067
+ var sheetContentVariants = (0, import_class_variance_authority4.cva)(
3068
+ cn(
3069
+ TIMBAL_V2_MODAL_SURFACE,
3070
+ "data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-[70] flex flex-col gap-4 shadow-card-elevated transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500"
3071
+ ),
3072
+ {
3073
+ variants: {
3074
+ side: {
3075
+ top: "data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 border-b p-6",
3076
+ bottom: "data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 border-t p-6",
3077
+ left: "data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r p-6 sm:max-w-sm",
3078
+ right: "data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 border-l p-6 sm:max-w-sm"
3079
+ }
3080
+ },
3081
+ defaultVariants: {
3082
+ side: "right"
3083
+ }
3084
+ }
3085
+ );
3086
+ function SheetContent({
3087
+ className,
3088
+ children,
3089
+ side = "right",
3090
+ showCloseButton = true,
3091
+ ...props
3092
+ }) {
3093
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(SheetPortal, { children: [
3094
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(SheetOverlay, {}),
3095
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
3096
+ import_radix_ui24.Dialog.Content,
3097
+ {
3098
+ "data-slot": "sheet-content",
3099
+ className: cn(sheetContentVariants({ side }), className),
3100
+ ...props,
3101
+ children: [
3102
+ children,
3103
+ showCloseButton ? /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_radix_ui24.Dialog.Close, { className: "absolute top-4 right-4 rounded-xs opacity-70 transition-[opacity,background-color] hover:bg-ghost-fill-hover hover:opacity-100 focus:ring-2 focus:ring-foreground/10 focus:outline-hidden disabled:pointer-events-none", children: [
3104
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_lucide_react16.XIcon, { className: "size-4" }),
3105
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "sr-only", children: "Close" })
3106
+ ] }) : null
3107
+ ]
3108
+ }
3109
+ )
3110
+ ] });
3111
+ }
3112
+ function SheetHeader({ className, ...props }) {
3113
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3114
+ "div",
3115
+ {
3116
+ "data-slot": "sheet-header",
3117
+ className: cn("flex flex-col gap-1.5 p-0", className),
3118
+ ...props
3119
+ }
3120
+ );
3121
+ }
3122
+ function SheetFooter({ className, ...props }) {
3123
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3124
+ "div",
3125
+ {
3126
+ "data-slot": "sheet-footer",
3127
+ className: cn("mt-auto flex flex-col gap-2 sm:flex-row sm:justify-end", className),
3128
+ ...props
3129
+ }
3130
+ );
3131
+ }
3132
+ function SheetTitle({
3133
+ className,
3134
+ ...props
3135
+ }) {
3136
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3137
+ import_radix_ui24.Dialog.Title,
3138
+ {
3139
+ "data-slot": "sheet-title",
3140
+ className: cn("text-lg font-semibold text-foreground", className),
3141
+ ...props
3142
+ }
3143
+ );
3144
+ }
3145
+ function SheetDescription({
3146
+ className,
3147
+ ...props
3148
+ }) {
3149
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
3150
+ import_radix_ui24.Dialog.Description,
3151
+ {
3152
+ "data-slot": "sheet-description",
3153
+ className: cn("text-sm text-muted-foreground", className),
3154
+ ...props
3155
+ }
3156
+ );
3157
+ }
3158
+
3159
+ // src/ui/alert-dialog.tsx
3160
+ var import_radix_ui25 = require("radix-ui");
3161
+ var import_jsx_runtime36 = require("react/jsx-runtime");
3162
+ function AlertDialog({
3163
+ ...props
3164
+ }) {
3165
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_radix_ui25.AlertDialog.Root, { "data-slot": "alert-dialog", ...props });
3166
+ }
3167
+ function AlertDialogTrigger({
3168
+ ...props
3169
+ }) {
3170
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_radix_ui25.AlertDialog.Trigger, { "data-slot": "alert-dialog-trigger", ...props });
3171
+ }
3172
+ function AlertDialogPortal({
3173
+ ...props
3174
+ }) {
3175
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_radix_ui25.AlertDialog.Portal, { "data-slot": "alert-dialog-portal", ...props });
3176
+ }
3177
+ function AlertDialogOverlay({
3178
+ className,
3179
+ ...props
3180
+ }) {
3181
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3182
+ import_radix_ui25.AlertDialog.Overlay,
3183
+ {
3184
+ "data-slot": "alert-dialog-overlay",
3185
+ className: cn(
3186
+ "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-[70] bg-black/50",
3187
+ className
3188
+ ),
3189
+ ...props
3190
+ }
3191
+ );
3192
+ }
3193
+ function AlertDialogContent({
3194
+ className,
3195
+ ...props
3196
+ }) {
3197
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(AlertDialogPortal, { children: [
3198
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(AlertDialogOverlay, {}),
3199
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3200
+ import_radix_ui25.AlertDialog.Content,
3201
+ {
3202
+ "data-slot": "alert-dialog-content",
3203
+ className: cn(
3204
+ TIMBAL_V2_MODAL_SURFACE,
3205
+ "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-[70] grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-xl p-6 duration-200 outline-none sm:max-w-lg",
3206
+ className
3207
+ ),
3208
+ ...props
3209
+ }
3210
+ )
3211
+ ] });
3212
+ }
3213
+ function AlertDialogHeader({ className, ...props }) {
3214
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3215
+ "div",
3216
+ {
3217
+ "data-slot": "alert-dialog-header",
3218
+ className: cn("flex flex-col gap-2 text-center sm:text-left", className),
3219
+ ...props
3220
+ }
3221
+ );
3222
+ }
3223
+ function AlertDialogFooter({ className, ...props }) {
3224
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3225
+ "div",
3226
+ {
3227
+ "data-slot": "alert-dialog-footer",
3228
+ className: cn(
3229
+ "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",
3230
+ className
3231
+ ),
3232
+ ...props
3233
+ }
3234
+ );
3235
+ }
3236
+ function AlertDialogTitle({
3237
+ className,
3238
+ ...props
3239
+ }) {
3240
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3241
+ import_radix_ui25.AlertDialog.Title,
3242
+ {
3243
+ "data-slot": "alert-dialog-title",
3244
+ className: cn("text-lg font-semibold", className),
3245
+ ...props
3246
+ }
3247
+ );
3248
+ }
3249
+ function AlertDialogDescription({
3250
+ className,
3251
+ ...props
3252
+ }) {
3253
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3254
+ import_radix_ui25.AlertDialog.Description,
3255
+ {
3256
+ "data-slot": "alert-dialog-description",
3257
+ className: cn("text-sm text-muted-foreground", className),
3258
+ ...props
3259
+ }
3260
+ );
3261
+ }
3262
+ function AlertDialogAction({
3263
+ className,
3264
+ ...props
3265
+ }) {
3266
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Button, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3267
+ import_radix_ui25.AlertDialog.Action,
3268
+ {
3269
+ "data-slot": "alert-dialog-action",
3270
+ className,
3271
+ ...props
3272
+ }
3273
+ ) });
3274
+ }
3275
+ function AlertDialogCancel({
3276
+ className,
3277
+ ...props
3278
+ }) {
3279
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Button, { asChild: true, variant: "outline", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
3280
+ import_radix_ui25.AlertDialog.Cancel,
3281
+ {
3282
+ "data-slot": "alert-dialog-cancel",
3283
+ className,
3284
+ ...props
3285
+ }
3286
+ ) });
3287
+ }
3288
+
3289
+ // src/ui/collapsible.tsx
3290
+ var import_radix_ui26 = require("radix-ui");
3291
+ var import_jsx_runtime37 = require("react/jsx-runtime");
3292
+ function Collapsible({
3293
+ ...props
3294
+ }) {
3295
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_radix_ui26.Collapsible.Root, { "data-slot": "collapsible", ...props });
3296
+ }
3297
+ function CollapsibleTrigger({
3298
+ ...props
3299
+ }) {
3300
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_radix_ui26.Collapsible.Trigger, { "data-slot": "collapsible-trigger", ...props });
3301
+ }
3302
+ function CollapsibleContent({
3303
+ className,
3304
+ ...props
3305
+ }) {
3306
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
3307
+ import_radix_ui26.Collapsible.Content,
3308
+ {
3309
+ "data-slot": "collapsible-content",
3310
+ className: cn(
3311
+ "overflow-hidden data-[state=closed]:animate-collapsible-up data-[state=open]:animate-collapsible-down",
3312
+ className
3313
+ ),
3314
+ ...props
3315
+ }
3316
+ );
3317
+ }
3318
+
3319
+ // src/ui/scroll-area.tsx
3320
+ var import_radix_ui27 = require("radix-ui");
3321
+ var import_jsx_runtime38 = require("react/jsx-runtime");
3322
+ function ScrollArea({
3323
+ className,
3324
+ children,
3325
+ ...props
3326
+ }) {
3327
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
3328
+ import_radix_ui27.ScrollArea.Root,
3329
+ {
3330
+ "data-slot": "scroll-area",
3331
+ className: cn("relative overflow-hidden", className),
3332
+ ...props,
3333
+ children: [
3334
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3335
+ import_radix_ui27.ScrollArea.Viewport,
3336
+ {
3337
+ "data-slot": "scroll-area-viewport",
3338
+ className: "size-full rounded-[inherit] outline-none transition-[color,box-shadow] focus-visible:ring-2 focus-visible:ring-foreground/10",
3339
+ children
3340
+ }
3341
+ ),
3342
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(ScrollBar, {}),
3343
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_radix_ui27.ScrollArea.Corner, {})
3344
+ ]
3345
+ }
3346
+ );
3347
+ }
3348
+ function ScrollBar({
3349
+ className,
3350
+ orientation = "vertical",
3351
+ ...props
3352
+ }) {
3353
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3354
+ import_radix_ui27.ScrollArea.ScrollAreaScrollbar,
3355
+ {
3356
+ "data-slot": "scroll-area-scrollbar",
3357
+ orientation,
3358
+ className: cn(
3359
+ "flex touch-none p-px transition-colors select-none",
3360
+ orientation === "vertical" && "h-full w-2.5 border-l border-l-transparent",
3361
+ orientation === "horizontal" && "h-2.5 flex-col border-t border-t-transparent",
3362
+ className
3363
+ ),
3364
+ ...props,
3365
+ children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
3366
+ import_radix_ui27.ScrollArea.ScrollAreaThumb,
3367
+ {
3368
+ "data-slot": "scroll-area-thumb",
3369
+ className: "relative flex-1 rounded-full bg-border"
3370
+ }
3371
+ )
3372
+ }
3373
+ );
3374
+ }
3375
+
3376
+ // src/ui/toggle.tsx
3377
+ var import_radix_ui28 = require("radix-ui");
3378
+ var import_class_variance_authority5 = require("class-variance-authority");
3379
+ var import_jsx_runtime39 = require("react/jsx-runtime");
3380
+ var toggleVariants = (0, import_class_variance_authority5.cva)(
3381
+ "inline-flex items-center justify-center gap-2 rounded-lg text-sm font-medium whitespace-nowrap outline-none transition-[color,box-shadow,background-color,border-color] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0",
3382
+ {
3383
+ variants: {
3384
+ variant: {
3385
+ default: cn(
3386
+ "border border-border bg-gradient-to-b from-elevated-from to-elevated-to shadow-card",
3387
+ "hover:from-secondary-fill-hover-from hover:to-secondary-fill-hover-to",
3388
+ "data-[state=on]:border-foreground/15 data-[state=on]:from-primary-fill-from data-[state=on]:to-primary-fill-to data-[state=on]:text-primary-foreground",
3389
+ "focus-visible:ring-2 focus-visible:ring-foreground/10"
3390
+ ),
3391
+ outline: cn(
3392
+ "border border-border bg-transparent",
3393
+ "hover:bg-muted hover:text-foreground",
3394
+ "data-[state=on]:bg-accent data-[state=on]:text-accent-foreground",
3395
+ "focus-visible:ring-2 focus-visible:ring-foreground/10"
3396
+ )
3397
+ },
3398
+ size: {
3399
+ default: "h-10 px-3 min-w-10",
3400
+ sm: "h-9 px-2.5 min-w-9",
3401
+ lg: "h-11 px-5 min-w-11"
3402
+ }
3403
+ },
3404
+ defaultVariants: {
3405
+ variant: "default",
3406
+ size: "default"
3407
+ }
3408
+ }
3409
+ );
3410
+ function Toggle({
3411
+ className,
3412
+ variant,
3413
+ size,
3414
+ ...props
3415
+ }) {
3416
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
3417
+ import_radix_ui28.Toggle.Root,
3418
+ {
3419
+ "data-slot": "toggle",
3420
+ className: cn(toggleVariants({ variant, size, className })),
3421
+ ...props
3422
+ }
3423
+ );
3424
+ }
3425
+
3426
+ // src/ui/toggle-group.tsx
3427
+ var import_radix_ui29 = require("radix-ui");
3428
+ var import_jsx_runtime40 = require("react/jsx-runtime");
3429
+ function ToggleGroup({
3430
+ className,
3431
+ ...props
3432
+ }) {
3433
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3434
+ import_radix_ui29.ToggleGroup.Root,
3435
+ {
3436
+ "data-slot": "toggle-group",
3437
+ className: cn("flex items-center gap-1", className),
3438
+ ...props
3439
+ }
3440
+ );
3441
+ }
3442
+ function ToggleGroupItem({
3443
+ className,
3444
+ ...props
3445
+ }) {
3446
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
3447
+ import_radix_ui29.ToggleGroup.Item,
3448
+ {
3449
+ "data-slot": "toggle-group-item",
3450
+ className: cn(toggleVariants({ variant: "default", size: "default" }), className),
3451
+ ...props
3452
+ }
3453
+ );
3454
+ }
3455
+
3456
+ // src/ui/hover-card.tsx
3457
+ var import_radix_ui30 = require("radix-ui");
3458
+ var import_jsx_runtime41 = require("react/jsx-runtime");
3459
+ function HoverCard({
3460
+ ...props
3461
+ }) {
3462
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_radix_ui30.HoverCard.Root, { "data-slot": "hover-card", ...props });
3463
+ }
3464
+ function HoverCardTrigger({
3465
+ ...props
3466
+ }) {
3467
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_radix_ui30.HoverCard.Trigger, { "data-slot": "hover-card-trigger", ...props });
3468
+ }
3469
+ function HoverCardContent({
3470
+ className,
3471
+ align = "center",
3472
+ sideOffset = 4,
3473
+ ...props
3474
+ }) {
3475
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_radix_ui30.HoverCard.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
3476
+ import_radix_ui30.HoverCard.Content,
3477
+ {
3478
+ "data-slot": "hover-card-content",
3479
+ align,
3480
+ sideOffset,
3481
+ className: cn(
3482
+ overlaySurfaceClass,
3483
+ "w-64 origin-[var(--radix-hover-card-content-transform-origin)] rounded-xl p-4 outline-hidden",
3484
+ className
3485
+ ),
3486
+ ...props
3487
+ }
3488
+ ) });
3489
+ }
3490
+
3491
+ // src/ui/context-menu.tsx
3492
+ var import_radix_ui31 = require("radix-ui");
3493
+ var import_lucide_react17 = require("lucide-react");
3494
+ var import_jsx_runtime42 = require("react/jsx-runtime");
3495
+ function ContextMenu({
3496
+ ...props
3497
+ }) {
3498
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_radix_ui31.ContextMenu.Root, { "data-slot": "context-menu", ...props });
3499
+ }
3500
+ function ContextMenuTrigger({
3501
+ ...props
3502
+ }) {
3503
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_radix_ui31.ContextMenu.Trigger, { "data-slot": "context-menu-trigger", ...props });
3504
+ }
3505
+ function ContextMenuGroup({
3506
+ ...props
3507
+ }) {
3508
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_radix_ui31.ContextMenu.Group, { "data-slot": "context-menu-group", ...props });
3509
+ }
3510
+ function ContextMenuContent({
3511
+ className,
3512
+ ...props
3513
+ }) {
3514
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_radix_ui31.ContextMenu.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3515
+ import_radix_ui31.ContextMenu.Content,
3516
+ {
3517
+ "data-slot": "context-menu-content",
3518
+ className: cn(
3519
+ overlaySurfaceClass,
3520
+ "max-h-[var(--radix-context-menu-content-available-height)] min-w-[8rem] origin-[var(--radix-context-menu-content-transform-origin)] overflow-x-hidden overflow-y-auto rounded-lg p-1",
3521
+ className
3522
+ ),
3523
+ ...props
3524
+ }
3525
+ ) });
3526
+ }
3527
+ function ContextMenuItem({
3528
+ className,
3529
+ inset,
3530
+ variant = "default",
3531
+ ...props
3532
+ }) {
3533
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3534
+ import_radix_ui31.ContextMenu.Item,
3535
+ {
3536
+ "data-slot": "context-menu-item",
3537
+ "data-inset": inset,
3538
+ "data-variant": variant,
3539
+ className: cn(
3540
+ overlayItemClass,
3541
+ "data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10",
3542
+ className
3543
+ ),
3544
+ ...props
3545
+ }
3546
+ );
3547
+ }
3548
+ function ContextMenuCheckboxItem({
3549
+ className,
3550
+ children,
3551
+ checked,
3552
+ ...props
3553
+ }) {
3554
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
3555
+ import_radix_ui31.ContextMenu.CheckboxItem,
3556
+ {
3557
+ "data-slot": "context-menu-checkbox-item",
3558
+ className: cn(overlayItemClass, "py-1.5 pr-2 pl-8", className),
3559
+ checked,
3560
+ ...props,
3561
+ children: [
3562
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_radix_ui31.ContextMenu.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react17.CheckIcon, { className: "size-4" }) }) }),
3563
+ children
3564
+ ]
3565
+ }
3566
+ );
3567
+ }
3568
+ function ContextMenuRadioGroup({
3569
+ ...props
3570
+ }) {
3571
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3572
+ import_radix_ui31.ContextMenu.RadioGroup,
3573
+ {
3574
+ "data-slot": "context-menu-radio-group",
3575
+ ...props
3576
+ }
3577
+ );
3578
+ }
3579
+ function ContextMenuRadioItem({
3580
+ className,
3581
+ children,
3582
+ ...props
3583
+ }) {
3584
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
3585
+ import_radix_ui31.ContextMenu.RadioItem,
3586
+ {
3587
+ "data-slot": "context-menu-radio-item",
3588
+ className: cn(overlayItemClass, "py-1.5 pr-2 pl-8", className),
3589
+ ...props,
3590
+ children: [
3591
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_radix_ui31.ContextMenu.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react17.CircleIcon, { className: "size-2 fill-current" }) }) }),
3592
+ children
3593
+ ]
3594
+ }
3595
+ );
3596
+ }
3597
+ function ContextMenuLabel({
3598
+ className,
3599
+ inset,
3600
+ ...props
3601
+ }) {
3602
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3603
+ import_radix_ui31.ContextMenu.Label,
3604
+ {
3605
+ "data-slot": "context-menu-label",
3606
+ "data-inset": inset,
3607
+ className: cn(
3608
+ "px-2 py-1.5 text-xs font-medium text-muted-foreground data-[inset]:pl-8",
3609
+ className
3610
+ ),
3611
+ ...props
3612
+ }
3613
+ );
3614
+ }
3615
+ function ContextMenuSeparator({
3616
+ className,
3617
+ ...props
3618
+ }) {
3619
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3620
+ import_radix_ui31.ContextMenu.Separator,
3621
+ {
3622
+ "data-slot": "context-menu-separator",
3623
+ className: cn("-mx-1 my-1 h-px bg-border", className),
3624
+ ...props
3625
+ }
3626
+ );
3627
+ }
3628
+ function ContextMenuShortcut({
3629
+ className,
3630
+ ...props
3631
+ }) {
3632
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3633
+ "span",
3634
+ {
3635
+ "data-slot": "context-menu-shortcut",
3636
+ className: cn(
3637
+ "ml-auto text-xs tracking-widest text-muted-foreground",
3638
+ className
3639
+ ),
3640
+ ...props
3641
+ }
3642
+ );
3643
+ }
3644
+ function ContextMenuSub({
3645
+ ...props
3646
+ }) {
3647
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_radix_ui31.ContextMenu.Sub, { "data-slot": "context-menu-sub", ...props });
3648
+ }
3649
+ function ContextMenuSubTrigger({
3650
+ className,
3651
+ inset,
3652
+ children,
3653
+ ...props
3654
+ }) {
3655
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
3656
+ import_radix_ui31.ContextMenu.SubTrigger,
3657
+ {
3658
+ "data-slot": "context-menu-sub-trigger",
3659
+ "data-inset": inset,
3660
+ className: cn(
3661
+ overlayItemClass,
3662
+ "data-[state=open]:bg-accent data-[state=open]:text-accent-foreground data-[inset]:pl-8",
3663
+ className
3664
+ ),
3665
+ ...props,
3666
+ children: [
3667
+ children,
3668
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react17.ChevronRightIcon, { className: "ml-auto size-4" })
3669
+ ]
3670
+ }
3671
+ );
3672
+ }
3673
+ function ContextMenuSubContent({
3674
+ className,
3675
+ ...props
3676
+ }) {
3677
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3678
+ import_radix_ui31.ContextMenu.SubContent,
3679
+ {
3680
+ "data-slot": "context-menu-sub-content",
3681
+ className: cn(
3682
+ overlaySurfaceClass,
3683
+ "min-w-[8rem] origin-[var(--radix-context-menu-content-transform-origin)] overflow-hidden rounded-lg p-1",
3684
+ className
3685
+ ),
3686
+ ...props
3687
+ }
3688
+ );
3689
+ }
3690
+
3691
+ // src/ui/alert.tsx
3692
+ var import_class_variance_authority6 = require("class-variance-authority");
3693
+ var import_jsx_runtime43 = require("react/jsx-runtime");
3694
+ var alertVariants = (0, import_class_variance_authority6.cva)(
3695
+ "relative grid w-full gap-1 rounded-xl border px-4 py-3 text-sm [&>svg]:absolute [&>svg]:top-3.5 [&>svg]:left-4 [&>svg]:size-4 [&>svg+div]:translate-y-[-3px] [&:has(svg)]:pl-11",
3696
+ {
3697
+ variants: {
3698
+ variant: {
3699
+ default: "border-border bg-gradient-to-b from-elevated-from to-elevated-to text-foreground shadow-card",
3700
+ destructive: "border-destructive/45 bg-destructive/10 text-destructive [&>svg]:text-destructive"
3701
+ }
3702
+ },
3703
+ defaultVariants: {
3704
+ variant: "default"
3705
+ }
3706
+ }
3707
+ );
3708
+ function Alert({
3709
+ className,
3710
+ variant,
3711
+ ...props
3712
+ }) {
3713
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
3714
+ "div",
3715
+ {
3716
+ "data-slot": "alert",
3717
+ role: "alert",
3718
+ className: cn(alertVariants({ variant }), className),
3719
+ ...props
3720
+ }
3721
+ );
3722
+ }
3723
+ function AlertTitle({ className, ...props }) {
3724
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
3725
+ "div",
3726
+ {
3727
+ "data-slot": "alert-title",
3728
+ className: cn("font-medium tracking-tight", className),
3729
+ ...props
3730
+ }
3731
+ );
3732
+ }
3733
+ function AlertDescription({ className, ...props }) {
3734
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
3735
+ "div",
3736
+ {
3737
+ "data-slot": "alert-description",
3738
+ className: cn("text-sm text-muted-foreground [&_p]:leading-relaxed", className),
3739
+ ...props
3740
+ }
3741
+ );
3742
+ }
3743
+
3744
+ // src/ui/card.tsx
3745
+ var import_jsx_runtime44 = require("react/jsx-runtime");
3746
+ function Card({ className, ...props }) {
3747
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
3748
+ "div",
3749
+ {
3750
+ "data-slot": "card",
3751
+ className: cn(
3752
+ TIMBAL_V2_ELEVATED_SURFACE,
3753
+ "flex flex-col gap-4 rounded-xl py-4 text-card-foreground",
3754
+ className
3755
+ ),
3756
+ ...props
3757
+ }
3758
+ );
3759
+ }
3760
+ function CardHeader({ className, ...props }) {
3761
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
3762
+ "div",
3763
+ {
3764
+ "data-slot": "card-header",
3765
+ className: cn("flex flex-col gap-1.5 px-4", className),
3766
+ ...props
3767
+ }
3768
+ );
3769
+ }
3770
+ function CardTitle({ className, ...props }) {
3771
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
3772
+ "div",
3773
+ {
3774
+ "data-slot": "card-title",
3775
+ className: cn("text-base font-semibold leading-none", className),
3776
+ ...props
3777
+ }
3778
+ );
3779
+ }
3780
+ function CardDescription({ className, ...props }) {
3781
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
3782
+ "div",
3783
+ {
3784
+ "data-slot": "card-description",
3785
+ className: cn("text-sm text-muted-foreground", className),
3786
+ ...props
3787
+ }
3788
+ );
3789
+ }
3790
+ function CardContent({ className, ...props }) {
3791
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { "data-slot": "card-content", className: cn("px-4", className), ...props });
3792
+ }
3793
+ function CardFooter({ className, ...props }) {
3794
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
3795
+ "div",
3796
+ {
3797
+ "data-slot": "card-footer",
3798
+ className: cn("flex items-center px-4", className),
3799
+ ...props
3800
+ }
3801
+ );
3802
+ }
3803
+
3804
+ // src/ui/skeleton.tsx
3805
+ var import_jsx_runtime45 = require("react/jsx-runtime");
3806
+ function Skeleton({ className, ...props }) {
3807
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
3808
+ "div",
3809
+ {
3810
+ "data-slot": "skeleton",
3811
+ className: cn("animate-pulse rounded-lg bg-muted", className),
3812
+ ...props
3813
+ }
3814
+ );
3815
+ }
3816
+
3817
+ // src/ui/chart.tsx
3818
+ var React4 = __toESM(require("react"), 1);
3819
+ var RechartsPrimitive = __toESM(require("recharts"), 1);
3820
+ var import_jsx_runtime46 = require("react/jsx-runtime");
3821
+ var THEMES = { light: "", dark: ".dark" };
3822
+ var ChartContext = React4.createContext(null);
3823
+ function useChart() {
3824
+ const context = React4.useContext(ChartContext);
3825
+ if (!context) {
3826
+ throw new Error("useChart must be used within a <ChartContainer />");
3827
+ }
3828
+ return context;
3829
+ }
3830
+ function ChartContainer({
3831
+ id,
3832
+ className,
3833
+ children,
3834
+ config,
3835
+ ...props
3836
+ }) {
3837
+ const uniqueId = React4.useId();
3838
+ const chartId = `chart-${id || uniqueId.replace(/:/g, "")}`;
3839
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(ChartContext.Provider, { value: { config }, children: /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(
3840
+ "div",
3841
+ {
3842
+ "data-slot": "chart",
3843
+ "data-chart": chartId,
3844
+ className: cn(
3845
+ "[&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border flex aspect-video justify-center text-xs [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden",
3846
+ className
3847
+ ),
3848
+ ...props,
3849
+ children: [
3850
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(ChartStyle, { id: chartId, config }),
3851
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(RechartsPrimitive.ResponsiveContainer, { children })
3852
+ ]
3853
+ }
3854
+ ) });
3855
+ }
3856
+ var ChartStyle = ({ id, config }) => {
3857
+ const colorConfig = Object.entries(config).filter(
3858
+ ([, c]) => c.theme || c.color
3859
+ );
3860
+ if (!colorConfig.length) {
3861
+ return null;
3862
+ }
3863
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
3864
+ "style",
3865
+ {
3866
+ dangerouslySetInnerHTML: {
3867
+ __html: Object.entries(THEMES).map(
3868
+ ([theme, prefix]) => `
3869
+ ${prefix} [data-chart=${id}] {
3870
+ ${colorConfig.map(([key, itemConfig]) => {
3871
+ const color = itemConfig.theme?.[theme] || itemConfig.color;
3872
+ return color ? ` --color-${key}: ${color};` : null;
3873
+ }).join("\n")}
3874
+ }
3875
+ `
3876
+ ).join("\n")
3877
+ }
3878
+ }
3879
+ );
3880
+ };
3881
+ var ChartTooltip = RechartsPrimitive.Tooltip;
3882
+ function ChartTooltipContent({
3883
+ active,
3884
+ payload,
3885
+ className,
3886
+ indicator = "dot",
3887
+ hideLabel = false,
3888
+ hideIndicator = false,
3889
+ label,
3890
+ labelFormatter,
3891
+ labelClassName,
3892
+ formatter,
3893
+ color,
3894
+ nameKey,
3895
+ labelKey
3896
+ }) {
3897
+ const { config } = useChart();
3898
+ const tooltipLabel = React4.useMemo(() => {
3899
+ if (hideLabel || !payload?.length) {
3900
+ return null;
3901
+ }
3902
+ const [item] = payload;
3903
+ const key = `${labelKey || item?.dataKey || item?.name || "value"}`;
3904
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
3905
+ const value = !labelKey && typeof label === "string" ? config[label]?.label || label : itemConfig?.label;
3906
+ if (labelFormatter) {
3907
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: cn("font-medium", labelClassName), children: labelFormatter(value, payload) });
3908
+ }
3909
+ if (!value) {
3910
+ return null;
3911
+ }
3912
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: cn("font-medium", labelClassName), children: value });
3913
+ }, [label, labelFormatter, payload, hideLabel, labelClassName, config, labelKey]);
3914
+ if (!active || !payload?.length) {
3915
+ return null;
3916
+ }
3917
+ const nestLabel = payload.length === 1 && indicator !== "dot";
3918
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(
3919
+ "div",
3920
+ {
3921
+ className: cn(
3922
+ "border-border/50 bg-background grid min-w-[8rem] items-start gap-1.5 rounded-lg border px-2.5 py-1.5 text-xs shadow-xl",
3923
+ "animate-in fade-in-0 zoom-in-95 duration-150",
3924
+ className
3925
+ ),
3926
+ children: [
3927
+ !nestLabel ? tooltipLabel : null,
3928
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "grid gap-1.5", children: payload.filter((item) => item.type !== "none").map((item, index) => {
3929
+ const key = `${nameKey || item.name || item.dataKey || "value"}`;
3930
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
3931
+ const indicatorColor = color || item.payload?.fill || item.color;
3932
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
3933
+ "div",
3934
+ {
3935
+ className: cn(
3936
+ "[&>svg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5",
3937
+ indicator === "dot" && "items-center"
3938
+ ),
3939
+ children: formatter && item?.value !== void 0 && item.name ? formatter(item.value, item.name, item, index, item.payload) : /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(import_jsx_runtime46.Fragment, { children: [
3940
+ itemConfig?.icon ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(itemConfig.icon, {}) : !hideIndicator && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
3941
+ "div",
3942
+ {
3943
+ className: cn(
3944
+ "shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)",
3945
+ {
3946
+ "h-2.5 w-2.5": indicator === "dot",
3947
+ "w-1": indicator === "line",
3948
+ "w-0 border-[1.5px] border-dashed bg-transparent": indicator === "dashed",
3949
+ "my-0.5": nestLabel && indicator === "dashed"
3950
+ }
3951
+ ),
3952
+ style: {
3953
+ "--color-bg": indicatorColor,
3954
+ "--color-border": indicatorColor
3955
+ }
3956
+ }
3957
+ ),
3958
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(
3959
+ "div",
3960
+ {
3961
+ className: cn(
3962
+ "flex flex-1 justify-between leading-none",
3963
+ nestLabel ? "items-end" : "items-center"
3964
+ ),
3965
+ children: [
3966
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "grid gap-1.5", children: [
3967
+ nestLabel ? tooltipLabel : null,
3968
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "text-muted-foreground", children: itemConfig?.label || item.name })
3969
+ ] }),
3970
+ item.value != null && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "text-foreground font-mono font-medium tabular-nums", children: typeof item.value === "number" ? item.value.toLocaleString() : String(item.value) })
3971
+ ]
3972
+ }
3973
+ )
3974
+ ] })
3975
+ },
3976
+ `${item.dataKey ?? index}`
3977
+ );
3978
+ }) })
3979
+ ]
3980
+ }
3981
+ );
3982
+ }
3983
+ var ChartLegend = RechartsPrimitive.Legend;
3984
+ function ChartLegendContent({
3985
+ className,
3986
+ hideIcon = false,
3987
+ payload,
3988
+ verticalAlign = "bottom",
3989
+ nameKey
3990
+ }) {
3991
+ const { config } = useChart();
3992
+ if (!payload?.length) {
3993
+ return null;
3994
+ }
3995
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
3996
+ "div",
3997
+ {
3998
+ className: cn(
3999
+ "flex items-center justify-center gap-4",
4000
+ verticalAlign === "top" ? "pb-3" : "pt-3",
4001
+ className
4002
+ ),
4003
+ children: payload.filter((item) => item.type !== "none").map((item, index) => {
4004
+ const key = `${nameKey || item.dataKey || "value"}`;
4005
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
4006
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(
4007
+ "div",
4008
+ {
4009
+ className: "[&>svg]:text-muted-foreground flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3",
4010
+ children: [
4011
+ itemConfig?.icon && !hideIcon ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(itemConfig.icon, {}) : /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
4012
+ "div",
4013
+ {
4014
+ className: "h-2 w-2 shrink-0 rounded-[2px]",
4015
+ style: { backgroundColor: item.color }
4016
+ }
4017
+ ),
4018
+ itemConfig?.label
4019
+ ]
4020
+ },
4021
+ `${item.value ?? index}`
4022
+ );
4023
+ })
4024
+ }
4025
+ );
4026
+ }
4027
+ function getPayloadConfigFromPayload(config, payload, key) {
4028
+ if (typeof payload !== "object" || payload === null) {
4029
+ return void 0;
4030
+ }
4031
+ const payloadPayload = "payload" in payload && typeof payload.payload === "object" && payload.payload !== null ? payload.payload : void 0;
4032
+ let configLabelKey = key;
4033
+ if (key in payload && typeof payload[key] === "string") {
4034
+ configLabelKey = payload[key];
4035
+ } else if (payloadPayload && key in payloadPayload && typeof payloadPayload[key] === "string") {
4036
+ configLabelKey = payloadPayload[key];
4037
+ }
4038
+ return configLabelKey in config ? config[configLabelKey] : config[key];
4039
+ }
4040
+
4041
+ // src/ui/table.tsx
4042
+ var import_jsx_runtime47 = require("react/jsx-runtime");
4043
+ function Table({ className, ...props }) {
4044
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { "data-slot": "table-container", className: "relative w-full overflow-x-auto", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4045
+ "table",
4046
+ {
4047
+ "data-slot": "table",
4048
+ className: cn("w-full caption-bottom text-sm", className),
4049
+ ...props
4050
+ }
4051
+ ) });
4052
+ }
4053
+ function TableHeader({ className, ...props }) {
4054
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4055
+ "thead",
4056
+ {
4057
+ "data-slot": "table-header",
4058
+ className: cn("[&_tr]:border-b [&_tr]:border-border", className),
4059
+ ...props
4060
+ }
4061
+ );
4062
+ }
4063
+ function TableBody({ className, ...props }) {
4064
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4065
+ "tbody",
4066
+ {
4067
+ "data-slot": "table-body",
4068
+ className: cn("[&_tr:last-child]:border-0", className),
4069
+ ...props
4070
+ }
4071
+ );
4072
+ }
4073
+ function TableFooter({ className, ...props }) {
4074
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4075
+ "tfoot",
4076
+ {
4077
+ "data-slot": "table-footer",
4078
+ className: cn(
4079
+ "border-t border-border bg-muted/50 font-medium [&>tr]:last:border-b-0",
4080
+ className
4081
+ ),
4082
+ ...props
4083
+ }
4084
+ );
4085
+ }
4086
+ function TableRow({ className, ...props }) {
4087
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4088
+ "tr",
4089
+ {
4090
+ "data-slot": "table-row",
4091
+ className: cn(
4092
+ "border-b border-border transition-colors hover:bg-muted/40 data-[state=selected]:bg-muted",
4093
+ className
4094
+ ),
4095
+ ...props
4096
+ }
4097
+ );
4098
+ }
4099
+ function TableHead({ className, ...props }) {
4100
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4101
+ "th",
4102
+ {
4103
+ "data-slot": "table-head",
4104
+ className: cn(
4105
+ "h-10 px-3 text-left align-middle text-xs font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0",
4106
+ className
4107
+ ),
4108
+ ...props
4109
+ }
4110
+ );
4111
+ }
4112
+ function TableCell({ className, ...props }) {
4113
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4114
+ "td",
4115
+ {
4116
+ "data-slot": "table-cell",
4117
+ className: cn(
4118
+ "p-3 align-middle text-sm [&:has([role=checkbox])]:pr-0",
4119
+ className
4120
+ ),
4121
+ ...props
4122
+ }
4123
+ );
4124
+ }
4125
+ function TableCaption({ className, ...props }) {
4126
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4127
+ "caption",
4128
+ {
4129
+ "data-slot": "table-caption",
4130
+ className: cn("mt-4 text-sm text-muted-foreground", className),
4131
+ ...props
4132
+ }
4133
+ );
4134
+ }
4135
+
4136
+ // src/ui/toast.tsx
4137
+ var import_radix_ui32 = require("radix-ui");
4138
+ var import_lucide_react18 = require("lucide-react");
4139
+ var import_jsx_runtime48 = require("react/jsx-runtime");
4140
+ function ToastProvider({
4141
+ ...props
4142
+ }) {
4143
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_radix_ui32.Toast.Provider, { "data-slot": "toast-provider", ...props });
4144
+ }
4145
+ function ToastViewport({
4146
+ className,
4147
+ ...props
4148
+ }) {
4149
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
4150
+ import_radix_ui32.Toast.Viewport,
4151
+ {
4152
+ "data-slot": "toast-viewport",
4153
+ className: cn(
4154
+ "fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse gap-2 p-4 sm:top-auto sm:right-0 sm:bottom-0 sm:max-w-[420px] sm:flex-col",
4155
+ className
4156
+ ),
4157
+ ...props
4158
+ }
4159
+ );
4160
+ }
4161
+ function Toast({
4162
+ className,
4163
+ variant = "default",
4164
+ ...props
4165
+ }) {
4166
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
4167
+ import_radix_ui32.Toast.Root,
4168
+ {
4169
+ "data-slot": "toast",
4170
+ className: cn(
4171
+ TIMBAL_V2_ELEVATED_SURFACE,
4172
+ "group pointer-events-auto relative flex w-full items-center justify-between gap-3 overflow-hidden rounded-xl p-4 pr-8 shadow-card-elevated transition-all",
4173
+ "data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-80 data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full data-[state=closed]:slide-out-to-right-full",
4174
+ variant === "destructive" && "border-destructive/45 bg-destructive/10 text-destructive",
4175
+ className
4176
+ ),
4177
+ ...props
4178
+ }
4179
+ );
4180
+ }
4181
+ function ToastAction({
4182
+ className,
4183
+ ...props
4184
+ }) {
4185
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
4186
+ import_radix_ui32.Toast.Action,
4187
+ {
4188
+ "data-slot": "toast-action",
4189
+ className: cn(
4190
+ "inline-flex h-8 shrink-0 items-center justify-center rounded-lg border border-border bg-transparent px-3 text-sm font-medium transition-colors hover:bg-muted focus:ring-2 focus:ring-foreground/10 focus:outline-hidden disabled:pointer-events-none disabled:opacity-50",
4191
+ className
4192
+ ),
4193
+ ...props
4194
+ }
4195
+ );
4196
+ }
4197
+ function ToastClose({
4198
+ className,
4199
+ ...props
4200
+ }) {
4201
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
4202
+ import_radix_ui32.Toast.Close,
4203
+ {
4204
+ "data-slot": "toast-close",
4205
+ className: cn(
4206
+ "absolute top-3 right-3 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-foreground/10 focus:outline-hidden",
4207
+ className
4208
+ ),
4209
+ "toast-close": "",
4210
+ ...props,
4211
+ children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react18.XIcon, { className: "size-4" })
4212
+ }
4213
+ );
4214
+ }
4215
+ function ToastTitle({
4216
+ className,
4217
+ ...props
4218
+ }) {
4219
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
4220
+ import_radix_ui32.Toast.Title,
4221
+ {
4222
+ "data-slot": "toast-title",
4223
+ className: cn("text-sm font-medium", className),
4224
+ ...props
4225
+ }
4226
+ );
4227
+ }
4228
+ function ToastDescription({
4229
+ className,
4230
+ ...props
4231
+ }) {
4232
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
4233
+ import_radix_ui32.Toast.Description,
4234
+ {
4235
+ "data-slot": "toast-description",
4236
+ className: cn("text-sm text-muted-foreground", className),
4237
+ ...props
4238
+ }
4239
+ );
4240
+ }
4241
+
4242
+ // src/ui/use-toast.ts
4243
+ var React5 = __toESM(require("react"), 1);
4244
+ var TOAST_LIMIT = 3;
4245
+ var TOAST_REMOVE_DELAY = 5e3;
4246
+ var listeners = /* @__PURE__ */ new Set();
4247
+ var memoryState = {
4248
+ toasts: [],
4249
+ add: () => "",
4250
+ dismiss: () => {
4251
+ },
4252
+ remove: () => {
4253
+ }
4254
+ };
4255
+ function dispatch(partial) {
4256
+ memoryState = { ...memoryState, ...partial };
4257
+ for (const listener of listeners) listener(memoryState);
4258
+ }
4259
+ function genId() {
4260
+ return `${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
4261
+ }
4262
+ var removeTimeouts = /* @__PURE__ */ new Map();
4263
+ function scheduleRemove(id, delay = TOAST_REMOVE_DELAY) {
4264
+ if (removeTimeouts.has(id)) return;
4265
+ const timeout = setTimeout(() => {
4266
+ removeTimeouts.delete(id);
4267
+ dispatch({
4268
+ toasts: memoryState.toasts.filter((t) => t.id !== id)
4269
+ });
4270
+ }, delay);
4271
+ removeTimeouts.set(id, timeout);
4272
+ }
4273
+ function addToast(toastInput) {
4274
+ const id = genId();
4275
+ dispatch({
4276
+ toasts: [{ ...toastInput, id }, ...memoryState.toasts].slice(0, TOAST_LIMIT)
4277
+ });
4278
+ scheduleRemove(id, toastInput.duration ?? TOAST_REMOVE_DELAY);
4279
+ return id;
4280
+ }
4281
+ function dismissToast(id) {
4282
+ scheduleRemove(id, 300);
4283
+ }
4284
+ memoryState = {
4285
+ toasts: [],
4286
+ add: addToast,
4287
+ dismiss: dismissToast,
4288
+ remove: (id) => {
4289
+ dispatch({ toasts: memoryState.toasts.filter((t) => t.id !== id) });
4290
+ }
4291
+ };
4292
+ function toast(input) {
4293
+ return memoryState.add(input);
4294
+ }
4295
+ function useToast() {
4296
+ const [state, setState] = React5.useState(memoryState);
4297
+ React5.useEffect(() => {
4298
+ listeners.add(setState);
4299
+ return () => {
4300
+ listeners.delete(setState);
4301
+ };
4302
+ }, []);
4303
+ return {
4304
+ toasts: state.toasts,
4305
+ toast,
4306
+ dismiss: state.dismiss
4307
+ };
4308
+ }
4309
+
4310
+ // src/ui/toaster.tsx
4311
+ var import_jsx_runtime49 = require("react/jsx-runtime");
4312
+ function Toaster() {
4313
+ const { toasts, dismiss } = useToast();
4314
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(ToastProvider, { children: [
4315
+ toasts.map(({ id, title, description, variant }) => /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
4316
+ Toast,
4317
+ {
4318
+ variant,
4319
+ onOpenChange: (open) => !open && dismiss(id),
4320
+ children: [
4321
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "grid gap-1", children: [
4322
+ title ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(ToastTitle, { children: title }) : null,
4323
+ description ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(ToastDescription, { children: description }) : null
4324
+ ] }),
4325
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(ToastClose, {})
4326
+ ]
4327
+ },
4328
+ id
4329
+ )),
4330
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(ToastViewport, {})
4331
+ ] });
4332
+ }
4333
+
4334
+ // src/ui/shimmer.tsx
4335
+ var import_react = require("motion/react");
4336
+ var import_react2 = require("react");
4337
+ var import_jsx_runtime50 = require("react/jsx-runtime");
4338
+ var ShimmerComponent = ({
4339
+ children,
4340
+ as: Component = "p",
4341
+ className,
4342
+ duration = 2,
4343
+ spread = 2
4344
+ }) => {
4345
+ const MotionComponent = import_react.motion.create(
4346
+ Component
4347
+ );
4348
+ const dynamicSpread = (0, import_react2.useMemo)(
4349
+ () => (children?.length ?? 0) * spread,
4350
+ [children, spread]
4351
+ );
4352
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
4353
+ MotionComponent,
4354
+ {
4355
+ animate: { backgroundPosition: "0% center" },
4356
+ className: cn(
4357
+ "relative inline-block bg-[length:250%_100%,auto] bg-clip-text text-transparent",
4358
+ "[--bg:linear-gradient(90deg,#0000_calc(50%-var(--spread)),var(--color-background),#0000_calc(50%+var(--spread)))] [background-repeat:no-repeat,padding-box]",
4359
+ className
4360
+ ),
4361
+ initial: { backgroundPosition: "100% center" },
4362
+ style: {
4363
+ "--spread": `${dynamicSpread}px`,
4364
+ backgroundImage: "var(--bg), linear-gradient(var(--color-muted-foreground), var(--color-muted-foreground))"
4365
+ },
4366
+ transition: {
4367
+ repeat: Number.POSITIVE_INFINITY,
4368
+ duration,
4369
+ ease: "linear"
4370
+ },
4371
+ children
4372
+ }
4373
+ );
4374
+ };
4375
+ var Shimmer = (0, import_react2.memo)(ShimmerComponent);
4376
+
4377
+ // src/ui/pill-segmented-tabs.tsx
4378
+ var import_react3 = require("react");
4379
+ var import_react4 = require("motion/react");
4380
+
4381
+ // src/design/pill-segmented-classes.ts
4382
+ var pillSegmentedTrackBase = "inline-flex w-fit max-w-max shrink-0 self-start items-center rounded-full";
4383
+ var pillSegmentedTrackSurface = cn(
4384
+ "bg-pill-segmented-track border border-[var(--pill-segmented-track-border)]",
4385
+ "shadow-[var(--pill-segmented-track-shadow)]"
4386
+ );
4387
+ var pillSegmentedTrackClass = cn(
4388
+ pillSegmentedTrackBase,
4389
+ pillSegmentedTrackSurface,
4390
+ "gap-1 p-1"
4391
+ );
4392
+ var pillSegmentedTrackFlushClass = cn(
4393
+ pillSegmentedTrackBase,
4394
+ pillSegmentedTrackSurface,
4395
+ "h-[var(--studio-chrome-pill-height)] items-center gap-0.5 overflow-visible p-0.5"
4396
+ );
4397
+ var pillSegmentedSegmentClass = cn(
4398
+ "relative flex items-center gap-1.5 rounded-full px-4 py-1.5 text-xs font-normal transition-colors"
4399
+ );
4400
+ var pillSegmentedFlushSegmentClass = cn(
4401
+ "relative box-border inline-flex h-9 min-h-9 items-center justify-center gap-1.5 rounded-full px-3.5 py-0",
4402
+ "text-sm font-normal leading-tight transition-colors"
4403
+ );
4404
+ var pillSegmentedActiveIndicatorClass = cn(
4405
+ "absolute inset-0 rounded-full",
4406
+ "border border-[var(--pill-segmented-indicator-border)]",
4407
+ "bg-gradient-to-b from-[var(--pill-segmented-indicator-from)] to-[var(--pill-segmented-indicator-to)]",
4408
+ "shadow-[var(--pill-segmented-indicator-shadow)]"
4409
+ );
4410
+
4411
+ // src/ui/pill-segmented-tabs.tsx
4412
+ var import_jsx_runtime51 = require("react/jsx-runtime");
1106
4413
  var PillTab = ({
1107
4414
  tabKey,
1108
4415
  label,
@@ -1116,7 +4423,7 @@ var PillTab = ({
1116
4423
  const handlePress = (0, import_react3.useCallback)(() => {
1117
4424
  if (!disabled) onSelect(tabKey);
1118
4425
  }, [disabled, onSelect, tabKey]);
1119
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
4426
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(
1120
4427
  "button",
1121
4428
  {
1122
4429
  type: "button",
@@ -1129,15 +4436,15 @@ var PillTab = ({
1129
4436
  !disabled && (isActive ? "text-foreground" : "text-muted-foreground hover:text-foreground")
1130
4437
  ),
1131
4438
  children: [
1132
- isActive && animateIndicator ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
4439
+ isActive && animateIndicator ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
1133
4440
  import_react4.motion.div,
1134
4441
  {
1135
4442
  layoutId,
1136
4443
  className: pillSegmentedActiveIndicatorClass,
1137
4444
  transition: { type: "spring", duration: 0.3, bounce: 0.15 }
1138
4445
  }
1139
- ) : isActive ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: pillSegmentedActiveIndicatorClass, "aria-hidden": true }) : null,
1140
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "relative z-10 whitespace-nowrap", children: label })
4446
+ ) : isActive ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: pillSegmentedActiveIndicatorClass, "aria-hidden": true }) : null,
4447
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: "relative z-10 whitespace-nowrap", children: label })
1141
4448
  ]
1142
4449
  }
1143
4450
  );
@@ -1157,7 +4464,7 @@ var PillSegmentedTabs = ({
1157
4464
  const isFlush = trackVariant === "flush";
1158
4465
  const trackClass = isFlush ? pillSegmentedTrackFlushClass : pillSegmentedTrackClass;
1159
4466
  const segmentClassName = isFlush ? pillSegmentedFlushSegmentClass : pillSegmentedSegmentClass;
1160
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { role: "group", "aria-label": ariaLabel, className: cn(trackClass, className), children: tabs.map((tab) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
4467
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { role: "group", "aria-label": ariaLabel, className: cn(trackClass, className), children: tabs.map((tab) => /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
1161
4468
  PillTab,
1162
4469
  {
1163
4470
  tabKey: tab.key,
@@ -1175,10 +4482,96 @@ var PillSegmentedTabs = ({
1175
4482
  var MemoPillSegmentedTabs = (0, import_react3.memo)(PillSegmentedTabs);
1176
4483
  // Annotate the CommonJS export names for ESM import in node:
1177
4484
  0 && (module.exports = {
4485
+ Accordion,
4486
+ AccordionContent,
4487
+ AccordionItem,
4488
+ AccordionTrigger,
4489
+ Alert,
4490
+ AlertDescription,
4491
+ AlertDialog,
4492
+ AlertDialogAction,
4493
+ AlertDialogCancel,
4494
+ AlertDialogContent,
4495
+ AlertDialogDescription,
4496
+ AlertDialogFooter,
4497
+ AlertDialogHeader,
4498
+ AlertDialogOverlay,
4499
+ AlertDialogPortal,
4500
+ AlertDialogTitle,
4501
+ AlertDialogTrigger,
4502
+ AlertTitle,
4503
+ AspectRatio,
1178
4504
  Avatar,
1179
4505
  AvatarFallback,
1180
4506
  AvatarImage,
4507
+ Badge,
4508
+ Breadcrumb,
4509
+ BreadcrumbEllipsis,
4510
+ BreadcrumbItem,
4511
+ BreadcrumbLink,
4512
+ BreadcrumbList,
4513
+ BreadcrumbPage,
4514
+ BreadcrumbSeparator,
1181
4515
  Button,
4516
+ CONTROL_SIZE,
4517
+ Calendar,
4518
+ CalendarDayButton,
4519
+ Card,
4520
+ CardContent,
4521
+ CardDescription,
4522
+ CardFooter,
4523
+ CardHeader,
4524
+ CardTitle,
4525
+ ChartContainer,
4526
+ ChartLegend,
4527
+ ChartLegendContent,
4528
+ ChartStyle,
4529
+ ChartTooltip,
4530
+ ChartTooltipContent,
4531
+ Checkbox,
4532
+ Collapsible,
4533
+ CollapsibleContent,
4534
+ CollapsibleTrigger,
4535
+ Combobox,
4536
+ ComboboxAnchor,
4537
+ ComboboxCommand,
4538
+ ComboboxContent,
4539
+ ComboboxEmpty,
4540
+ ComboboxGroup,
4541
+ ComboboxInput,
4542
+ ComboboxItem,
4543
+ ComboboxList,
4544
+ ComboboxSeparator,
4545
+ ComboboxShortcut,
4546
+ ComboboxTrigger,
4547
+ Command,
4548
+ CommandDialog,
4549
+ CommandEmpty,
4550
+ CommandGroup,
4551
+ CommandInput,
4552
+ CommandItem,
4553
+ CommandList,
4554
+ CommandSeparator,
4555
+ CommandShortcut,
4556
+ ContextMenu,
4557
+ ContextMenuCheckboxItem,
4558
+ ContextMenuContent,
4559
+ ContextMenuGroup,
4560
+ ContextMenuItem,
4561
+ ContextMenuLabel,
4562
+ ContextMenuRadioGroup,
4563
+ ContextMenuRadioItem,
4564
+ ContextMenuSeparator,
4565
+ ContextMenuShortcut,
4566
+ ContextMenuSub,
4567
+ ContextMenuSubContent,
4568
+ ContextMenuSubTrigger,
4569
+ ContextMenuTrigger,
4570
+ DatePicker,
4571
+ DatePickerButton,
4572
+ DatePickerCalendar,
4573
+ DatePickerContent,
4574
+ DatePickerTrigger,
1182
4575
  Dialog,
1183
4576
  DialogClose,
1184
4577
  DialogContent,
@@ -1203,12 +4596,69 @@ var MemoPillSegmentedTabs = (0, import_react3.memo)(PillSegmentedTabs);
1203
4596
  DropdownMenuSubContent,
1204
4597
  DropdownMenuSubTrigger,
1205
4598
  DropdownMenuTrigger,
4599
+ Form,
4600
+ FormControl,
4601
+ FormField,
4602
+ FormItem,
4603
+ FormLabel,
4604
+ FormMessage,
4605
+ FormSubmit,
4606
+ HoverCard,
4607
+ HoverCardContent,
4608
+ HoverCardTrigger,
4609
+ Input,
4610
+ InputGroup,
4611
+ InputGroupAddon,
4612
+ InputGroupInput,
4613
+ InputGroupText,
4614
+ InputOTP,
4615
+ InputOTPGroup,
4616
+ InputOTPHiddenInput,
4617
+ InputOTPSeparator,
4618
+ InputOTPSlot,
4619
+ Kbd,
4620
+ KbdGroup,
4621
+ Label,
1206
4622
  MemoPillSegmentedTabs,
4623
+ Menubar,
4624
+ MenubarCheckboxItem,
4625
+ MenubarContent,
4626
+ MenubarItem,
4627
+ MenubarLabel,
4628
+ MenubarMenu,
4629
+ MenubarRadioGroup,
4630
+ MenubarRadioItem,
4631
+ MenubarSeparator,
4632
+ MenubarShortcut,
4633
+ MenubarSub,
4634
+ MenubarSubContent,
4635
+ MenubarSubTrigger,
4636
+ MenubarTrigger,
4637
+ NavigationMenu,
4638
+ NavigationMenuContent,
4639
+ NavigationMenuIndicator,
4640
+ NavigationMenuItem,
4641
+ NavigationMenuLink,
4642
+ NavigationMenuList,
4643
+ NavigationMenuTrigger,
4644
+ NavigationMenuViewport,
4645
+ Pagination,
4646
+ PaginationContent,
4647
+ PaginationEllipsis,
4648
+ PaginationItem,
4649
+ PaginationLink,
4650
+ PaginationNext,
4651
+ PaginationPrevious,
1207
4652
  PillSegmentedTabs,
1208
4653
  Popover,
1209
4654
  PopoverAnchor,
1210
4655
  PopoverContent,
1211
4656
  PopoverTrigger,
4657
+ Progress,
4658
+ RadioGroup,
4659
+ RadioGroupItem,
4660
+ ScrollArea,
4661
+ ScrollBar,
1212
4662
  Select,
1213
4663
  SelectContent,
1214
4664
  SelectGroup,
@@ -1219,10 +4669,63 @@ var MemoPillSegmentedTabs = (0, import_react3.memo)(PillSegmentedTabs);
1219
4669
  SelectSeparator,
1220
4670
  SelectTrigger,
1221
4671
  SelectValue,
4672
+ Separator,
4673
+ Sheet,
4674
+ SheetClose,
4675
+ SheetContent,
4676
+ SheetDescription,
4677
+ SheetFooter,
4678
+ SheetHeader,
4679
+ SheetTitle,
4680
+ SheetTrigger,
1222
4681
  Shimmer,
4682
+ Skeleton,
4683
+ Slider,
4684
+ Spinner,
4685
+ Switch,
4686
+ Table,
4687
+ TableBody,
4688
+ TableCaption,
4689
+ TableCell,
4690
+ TableFooter,
4691
+ TableHead,
4692
+ TableHeader,
4693
+ TableRow,
4694
+ Textarea,
1223
4695
  TimbalV2Button,
4696
+ Toast,
4697
+ ToastAction,
4698
+ ToastClose,
4699
+ ToastDescription,
4700
+ ToastProvider,
4701
+ ToastTitle,
4702
+ ToastViewport,
4703
+ Toaster,
4704
+ Toggle,
4705
+ ToggleGroup,
4706
+ ToggleGroupItem,
4707
+ Toolbar,
4708
+ ToolbarButton,
4709
+ ToolbarLink,
4710
+ ToolbarSeparator,
4711
+ ToolbarToggleGroup,
4712
+ ToolbarToggleItem,
1224
4713
  Tooltip,
1225
4714
  TooltipContent,
1226
4715
  TooltipProvider,
1227
- TooltipTrigger
4716
+ TooltipTrigger,
4717
+ alertVariants,
4718
+ badgeVariants,
4719
+ controlClass,
4720
+ controlSurfaceClass,
4721
+ formatPickerDate,
4722
+ navigationMenuTriggerStyle,
4723
+ overlayAnimationClass,
4724
+ overlayItemClass,
4725
+ overlayListPanelClass,
4726
+ overlaySurfaceClass,
4727
+ toast,
4728
+ toggleVariants,
4729
+ useChart,
4730
+ useToast
1228
4731
  });