@rock.star/ui 1.1.2 → 1.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,14 +1,6 @@
1
1
  // src/ui/accordion.tsx
2
2
  import { Accordion as AccordionPrimitive } from "@base-ui/react/accordion";
3
-
4
- // src/lib/utils.ts
5
- import { clsx } from "clsx";
6
- import { twMerge } from "tailwind-merge";
7
- function cn(...inputs) {
8
- return twMerge(clsx(inputs));
9
- }
10
-
11
- // src/ui/accordion.tsx
3
+ import { cn } from "cn";
12
4
  import { ChevronDown, ChevronUp } from "@gravity-ui/icons";
13
5
  import { jsx, jsxs } from "react/jsx-runtime";
14
6
  function Accordion({ className, ...props }) {
@@ -100,6 +92,7 @@ import { AlertDialog as AlertDialogPrimitive } from "@base-ui/react/alert-dialog
100
92
  // src/ui/button.tsx
101
93
  import { Button as ButtonPrimitive } from "@base-ui/react/button";
102
94
  import { cva } from "class-variance-authority";
95
+ import { cn as cn2 } from "cn";
103
96
  import { jsx as jsx2 } from "react/jsx-runtime";
104
97
  var buttonVariants = cva(
105
98
  "group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-[background-color,border-color,color,box-shadow,opacity,transform] duration-150 ease-[var(--ease-out)] outline-none select-none motion-reduce:transition-none focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:opacity-70 [&_svg:not([class*='size-'])]:size-4",
@@ -141,13 +134,14 @@ function Button({
141
134
  ButtonPrimitive,
142
135
  {
143
136
  "data-slot": "button",
144
- className: cn(buttonVariants({ variant, size, className })),
137
+ className: cn2(buttonVariants({ variant, size, className })),
145
138
  ...props
146
139
  }
147
140
  );
148
141
  }
149
142
 
150
143
  // src/ui/alert-dialog.tsx
144
+ import { cn as cn3 } from "cn";
151
145
  import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
152
146
  function AlertDialog({ ...props }) {
153
147
  return /* @__PURE__ */ jsx3(AlertDialogPrimitive.Root, { "data-slot": "alert-dialog", ...props });
@@ -166,7 +160,7 @@ function AlertDialogOverlay({
166
160
  AlertDialogPrimitive.Backdrop,
167
161
  {
168
162
  "data-slot": "alert-dialog-overlay",
169
- className: cn(
163
+ className: cn3(
170
164
  "fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",
171
165
  className
172
166
  ),
@@ -186,7 +180,7 @@ function AlertDialogContent({
186
180
  {
187
181
  "data-slot": "alert-dialog-content",
188
182
  "data-size": size,
189
- className: cn(
183
+ className: cn3(
190
184
  "group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-background p-4 text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
191
185
  className
192
186
  ),
@@ -203,7 +197,7 @@ function AlertDialogHeader({
203
197
  "div",
204
198
  {
205
199
  "data-slot": "alert-dialog-header",
206
- className: cn(
200
+ className: cn3(
207
201
  "grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-4 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]",
208
202
  className
209
203
  ),
@@ -219,7 +213,7 @@ function AlertDialogFooter({
219
213
  "div",
220
214
  {
221
215
  "data-slot": "alert-dialog-footer",
222
- className: cn(
216
+ className: cn3(
223
217
  "-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end",
224
218
  className
225
219
  ),
@@ -235,7 +229,7 @@ function AlertDialogMedia({
235
229
  "div",
236
230
  {
237
231
  "data-slot": "alert-dialog-media",
238
- className: cn(
232
+ className: cn3(
239
233
  "mb-2 inline-flex size-10 items-center justify-center rounded-md bg-muted sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-6",
240
234
  className
241
235
  ),
@@ -251,7 +245,7 @@ function AlertDialogTitle({
251
245
  AlertDialogPrimitive.Title,
252
246
  {
253
247
  "data-slot": "alert-dialog-title",
254
- className: cn(
248
+ className: cn3(
255
249
  "text-base font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2",
256
250
  className
257
251
  ),
@@ -267,7 +261,7 @@ function AlertDialogDescription({
267
261
  AlertDialogPrimitive.Description,
268
262
  {
269
263
  "data-slot": "alert-dialog-description",
270
- className: cn(
264
+ className: cn3(
271
265
  "text-sm text-balance text-muted-foreground md:text-pretty *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground",
272
266
  className
273
267
  ),
@@ -283,7 +277,7 @@ function AlertDialogAction({
283
277
  Button,
284
278
  {
285
279
  "data-slot": "alert-dialog-action",
286
- className: cn(className),
280
+ className: cn3(className),
287
281
  ...props
288
282
  }
289
283
  );
@@ -298,7 +292,7 @@ function AlertDialogCancel({
298
292
  AlertDialogPrimitive.Close,
299
293
  {
300
294
  "data-slot": "alert-dialog-cancel",
301
- className: cn(className),
295
+ className: cn3(className),
302
296
  render: /* @__PURE__ */ jsx3(Button, { variant, size }),
303
297
  ...props
304
298
  }
@@ -310,6 +304,7 @@ import { AnimatePresence } from "motion/react";
310
304
  import { useState } from "react";
311
305
 
312
306
  // src/ui/apple/english.tsx
307
+ import { cn as cn4 } from "cn";
313
308
  import { motion } from "motion/react";
314
309
  import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
315
310
  var initialProps = {
@@ -330,7 +325,7 @@ function AppleHelloEffectEnglish({
330
325
  return /* @__PURE__ */ jsxs3(
331
326
  motion.svg,
332
327
  {
333
- className: cn("h-20", className),
328
+ className: cn4("h-20", className),
334
329
  xmlns: "http://www.w3.org/2000/svg",
335
330
  viewBox: "0 0 638 200",
336
331
  fill: "none",
@@ -378,6 +373,7 @@ function AppleHelloEffectEnglish({
378
373
 
379
374
  // src/ui/apple/hindi.tsx
380
375
  import { motion as motion2 } from "motion/react";
376
+ import { cn as cn5 } from "cn";
381
377
  import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
382
378
  var initialProps2 = {
383
379
  pathLength: 0,
@@ -397,7 +393,7 @@ function AppleHelloEffectHindi({
397
393
  return /* @__PURE__ */ jsxs4(
398
394
  motion2.svg,
399
395
  {
400
- className: cn("h-20", className),
396
+ className: cn5("h-20", className),
401
397
  xmlns: "http://www.w3.org/2000/svg",
402
398
  viewBox: "0 0 605 273",
403
399
  fill: "none",
@@ -557,6 +553,7 @@ function AppleHelloEffectHindi({
557
553
 
558
554
  // src/ui/apple/spanish.tsx
559
555
  import { motion as motion3 } from "motion/react";
556
+ import { cn as cn6 } from "cn";
560
557
  import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
561
558
  var initialProps3 = {
562
559
  pathLength: 0,
@@ -576,7 +573,7 @@ function AppleHelloEffectSpanish({
576
573
  return /* @__PURE__ */ jsxs5(
577
574
  motion3.svg,
578
575
  {
579
- className: cn("h-20", className),
576
+ className: cn6("h-20", className),
580
577
  xmlns: "http://www.w3.org/2000/svg",
581
578
  viewBox: "0 0 562 200",
582
579
  fill: "none",
@@ -702,11 +699,13 @@ function Apple() {
702
699
  import * as Ariakit from "@ariakit/react";
703
700
 
704
701
  // src/ui/autocomplete.tsx
702
+ import { cn as cn9 } from "cn";
705
703
  import { Autocomplete as AutocompletePrimitive } from "@base-ui/react/autocomplete";
706
704
  import { ChevronsExpandVertical, Xmark } from "@gravity-ui/icons";
707
705
 
708
706
  // src/ui/input.tsx
709
707
  import { Input as InputPrimitive } from "@base-ui/react/input";
708
+ import { cn as cn7 } from "cn";
710
709
  import { jsx as jsx8 } from "react/jsx-runtime";
711
710
  function Input({
712
711
  className,
@@ -726,7 +725,7 @@ function Input({
726
725
  event.currentTarget.blur();
727
726
  onWheel?.(event);
728
727
  } : onWheel,
729
- className: cn(
728
+ className: cn7(
730
729
  "h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",
731
730
  isNumberInput && "[appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none",
732
731
  className
@@ -738,6 +737,7 @@ function Input({
738
737
 
739
738
  // src/ui/scroll-area.tsx
740
739
  import { ScrollArea as ScrollAreaPrimitive } from "@base-ui/react/scroll-area";
740
+ import { cn as cn8 } from "cn";
741
741
  import { jsx as jsx9, jsxs as jsxs6 } from "react/jsx-runtime";
742
742
  function ScrollArea({
743
743
  className,
@@ -748,7 +748,7 @@ function ScrollArea({
748
748
  ScrollAreaPrimitive.Root,
749
749
  {
750
750
  "data-slot": "scroll-area",
751
- className: cn("relative", className),
751
+ className: cn8("relative", className),
752
752
  ...props,
753
753
  children: [
754
754
  /* @__PURE__ */ jsx9(
@@ -776,7 +776,7 @@ function ScrollBar({
776
776
  "data-slot": "scroll-area-scrollbar",
777
777
  "data-orientation": orientation,
778
778
  orientation,
779
- className: cn(
779
+ className: cn8(
780
780
  "flex touch-none p-px transition-colors select-none data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent",
781
781
  className
782
782
  ),
@@ -824,7 +824,7 @@ function AutocompleteInput({
824
824
  /* @__PURE__ */ jsx10(
825
825
  AutocompletePrimitive.Input,
826
826
  {
827
- className: cn(
827
+ className: cn9(
828
828
  startAddon && "*:data-[slot=autocomplete-input]:ps-[calc(--spacing(8.5)-1px)] data-[size=sm]:*:data-[slot=autocomplete-input]:ps-[calc(--spacing(7.5)-1px)] sm:*:data-[slot=autocomplete-input]:ps-[calc(--spacing(8)-1px)] sm:data-[size=sm]:*:data-[slot=autocomplete-input]:ps-[calc(--spacing(7)-1px)]",
829
829
  sizeValue === "sm" ? "has-[+[data-slot=autocomplete-trigger],+[data-slot=autocomplete-clear]]:*:data-[slot=autocomplete-input]:pe-6.5" : "has-[+[data-slot=autocomplete-trigger],+[data-slot=autocomplete-clear]]:*:data-[slot=autocomplete-input]:pe-7",
830
830
  className
@@ -837,7 +837,7 @@ function AutocompleteInput({
837
837
  showTrigger && /* @__PURE__ */ jsx10(
838
838
  AutocompleteTrigger,
839
839
  {
840
- className: cn(
840
+ className: cn9(
841
841
  "absolute top-1/2 inline-flex size-8 shrink-0 -translate-y-1/2 cursor-pointer items-center justify-center rounded-md border border-transparent opacity-80 transition-colors outline-none hover:opacity-100 has-[+[data-slot=autocomplete-clear]]:hidden sm:size-7 pointer-coarse:after:absolute pointer-coarse:after:min-h-11 pointer-coarse:after:min-w-11 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4",
842
842
  sizeValue === "sm" ? "inset-e-0" : "inset-e-0.5"
843
843
  ),
@@ -848,7 +848,7 @@ function AutocompleteInput({
848
848
  showClear && /* @__PURE__ */ jsx10(
849
849
  AutocompleteClear,
850
850
  {
851
- className: cn(
851
+ className: cn9(
852
852
  "absolute top-1/2 inline-flex size-8 shrink-0 -translate-y-1/2 cursor-pointer items-center justify-center rounded-md border border-transparent opacity-80 transition-colors outline-none hover:opacity-100 has-[+[data-slot=autocomplete-clear]]:hidden sm:size-7 pointer-coarse:after:absolute pointer-coarse:after:min-h-11 pointer-coarse:after:min-w-11 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4",
853
853
  sizeValue === "sm" ? "inset-e-0" : "inset-e-0.5"
854
854
  ),
@@ -884,7 +884,7 @@ function AutocompletePopup({
884
884
  children: /* @__PURE__ */ jsx10(
885
885
  "span",
886
886
  {
887
- className: cn(
887
+ className: cn9(
888
888
  "relative flex max-h-full max-w-(--available-width) min-w-(--anchor-width) origin-(--transform-origin) rounded-lg border bg-background shadow-lg/5 transition-[scale,opacity] not-dark:bg-clip-padding before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-lg)-1px)] before:shadow-[0_1px_--theme(--color-black/4%)] dark:before:shadow-[0_-1px_--theme(--color-white/6%)]",
889
889
  className
890
890
  ),
@@ -910,7 +910,7 @@ function AutocompleteItem({
910
910
  return /* @__PURE__ */ jsx10(
911
911
  AutocompletePrimitive.Item,
912
912
  {
913
- className: cn(
913
+ className: cn9(
914
914
  "flex min-h-8 cursor-default items-center rounded-sm px-2 py-1 text-base outline-none select-none data-highlighted:bg-accent data-highlighted:text-accent-foreground sm:min-h-7 sm:text-sm data-disabled:pointer-events-none data-disabled:opacity-64",
915
915
  className
916
916
  ),
@@ -927,7 +927,7 @@ function AutocompleteSeparator({
927
927
  return /* @__PURE__ */ jsx10(
928
928
  AutocompletePrimitive.Separator,
929
929
  {
930
- className: cn("mx-2 my-1 h-px bg-border last:hidden", className),
930
+ className: cn9("mx-2 my-1 h-px bg-border last:hidden", className),
931
931
  "data-slot": "autocomplete-separator",
932
932
  ...props
933
933
  }
@@ -940,7 +940,7 @@ function AutocompleteGroup({
940
940
  return /* @__PURE__ */ jsx10(
941
941
  AutocompletePrimitive.Group,
942
942
  {
943
- className: cn("[[role=group]+&]:mt-1.5", className),
943
+ className: cn9("[[role=group]+&]:mt-1.5", className),
944
944
  "data-slot": "autocomplete-group",
945
945
  ...props
946
946
  }
@@ -953,7 +953,7 @@ function AutocompleteGroupLabel({
953
953
  return /* @__PURE__ */ jsx10(
954
954
  AutocompletePrimitive.GroupLabel,
955
955
  {
956
- className: cn(
956
+ className: cn9(
957
957
  "px-2 py-1.5 text-xs font-medium text-muted-foreground",
958
958
  className
959
959
  ),
@@ -969,7 +969,7 @@ function AutocompleteEmpty({
969
969
  return /* @__PURE__ */ jsx10(
970
970
  AutocompletePrimitive.Empty,
971
971
  {
972
- className: cn(
972
+ className: cn9(
973
973
  "text-center text-base text-muted-foreground not-empty:p-2 sm:text-sm",
974
974
  className
975
975
  ),
@@ -999,7 +999,7 @@ function AutocompleteList({
999
999
  return /* @__PURE__ */ jsx10(ScrollArea, { children: /* @__PURE__ */ jsx10(
1000
1000
  AutocompletePrimitive.List,
1001
1001
  {
1002
- className: cn(
1002
+ className: cn9(
1003
1003
  "not-empty:scroll-py-1 not-empty:p-1 in-data-has-overflow-y:pe-3",
1004
1004
  className
1005
1005
  ),
@@ -1015,7 +1015,7 @@ function AutocompleteClear({
1015
1015
  return /* @__PURE__ */ jsx10(
1016
1016
  AutocompletePrimitive.Clear,
1017
1017
  {
1018
- className: cn(
1018
+ className: cn9(
1019
1019
  "absolute inset-e-0.5 top-1/2 inline-flex size-8 shrink-0 -translate-y-1/2 cursor-pointer items-center justify-center rounded-md border border-transparent opacity-80 transition-[color,background-color,box-shadow,opacity] outline-none hover:opacity-100 sm:size-7 pointer-coarse:after:absolute pointer-coarse:after:min-h-11 pointer-coarse:after:min-w-11 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4",
1020
1020
  className
1021
1021
  ),
@@ -1032,7 +1032,7 @@ function AutocompleteStatus({
1032
1032
  return /* @__PURE__ */ jsx10(
1033
1033
  AutocompletePrimitive.Status,
1034
1034
  {
1035
- className: cn(
1035
+ className: cn9(
1036
1036
  "px-3 py-2 text-xs font-medium text-muted-foreground empty:m-0 empty:p-0",
1037
1037
  className
1038
1038
  ),
@@ -1061,6 +1061,7 @@ var useAutocompleteFilter = AutocompletePrimitive.useFilter;
1061
1061
 
1062
1062
  // src/ui/avatar.tsx
1063
1063
  import { Avatar as AvatarPrimitive } from "@base-ui/react/avatar";
1064
+ import { cn as cn10 } from "cn";
1064
1065
  import { jsx as jsx11 } from "react/jsx-runtime";
1065
1066
  function Avatar({
1066
1067
  className,
@@ -1072,7 +1073,7 @@ function Avatar({
1072
1073
  {
1073
1074
  "data-slot": "avatar",
1074
1075
  "data-size": size,
1075
- className: cn(
1076
+ className: cn10(
1076
1077
  "group/avatar relative flex size-8 shrink-0 rounded-full select-none after:absolute after:inset-0 after:rounded-full after:border after:border-border after:mix-blend-darken data-[size=lg]:size-10 data-[size=sm]:size-6 dark:after:mix-blend-lighten",
1077
1078
  className
1078
1079
  ),
@@ -1085,7 +1086,7 @@ function AvatarImage({ className, ...props }) {
1085
1086
  AvatarPrimitive.Image,
1086
1087
  {
1087
1088
  "data-slot": "avatar-image",
1088
- className: cn(
1089
+ className: cn10(
1089
1090
  "aspect-square size-full rounded-full object-cover",
1090
1091
  className
1091
1092
  ),
@@ -1101,7 +1102,7 @@ function AvatarFallback({
1101
1102
  AvatarPrimitive.Fallback,
1102
1103
  {
1103
1104
  "data-slot": "avatar-fallback",
1104
- className: cn(
1105
+ className: cn10(
1105
1106
  "flex size-full items-center justify-center rounded-full bg-muted text-sm text-muted-foreground group-data-[size=sm]/avatar:text-xs",
1106
1107
  className
1107
1108
  ),
@@ -1114,7 +1115,7 @@ function AvatarBadge({ className, ...props }) {
1114
1115
  "span",
1115
1116
  {
1116
1117
  "data-slot": "avatar-badge",
1117
- className: cn(
1118
+ className: cn10(
1118
1119
  "absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full bg-primary text-primary-foreground bg-blend-color ring-2 ring-background select-none",
1119
1120
  "group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden",
1120
1121
  "group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2",
@@ -1130,7 +1131,7 @@ function AvatarGroup({ className, ...props }) {
1130
1131
  "div",
1131
1132
  {
1132
1133
  "data-slot": "avatar-group",
1133
- className: cn(
1134
+ className: cn10(
1134
1135
  "group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background",
1135
1136
  className
1136
1137
  ),
@@ -1146,7 +1147,7 @@ function AvatarGroupCount({
1146
1147
  "div",
1147
1148
  {
1148
1149
  "data-slot": "avatar-group-count",
1149
- className: cn(
1150
+ className: cn10(
1150
1151
  "relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground ring-2 ring-background group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3",
1151
1152
  className
1152
1153
  ),
@@ -1159,6 +1160,7 @@ function AvatarGroupCount({
1159
1160
  import { mergeProps } from "@base-ui/react/merge-props";
1160
1161
  import { useRender } from "@base-ui/react/use-render";
1161
1162
  import { cva as cva2 } from "class-variance-authority";
1163
+ import { cn as cn11 } from "cn";
1162
1164
  var badgeVariants = cva2(
1163
1165
  "group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[background-color,border-color,color,box-shadow,opacity] duration-150 ease-[var(--ease-out)] motion-reduce:transition-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!",
1164
1166
  {
@@ -1187,7 +1189,7 @@ function Badge({
1187
1189
  defaultTagName: "span",
1188
1190
  props: mergeProps(
1189
1191
  {
1190
- className: cn(badgeVariants({ variant }), className)
1192
+ className: cn11(badgeVariants({ variant }), className)
1191
1193
  },
1192
1194
  props
1193
1195
  ),
@@ -1201,7 +1203,7 @@ function Badge({
1201
1203
 
1202
1204
  // src/ui/bridge.tsx
1203
1205
  import { useRouter } from "next/navigation";
1204
- import * as React from "react";
1206
+ import * as React2 from "react";
1205
1207
 
1206
1208
  // src/lib/capacitor.ts
1207
1209
  function isNativeApp() {
@@ -1220,10 +1222,226 @@ function getNativeStatusBarPlugin() {
1220
1222
  if (!isNativeApp()) return null;
1221
1223
  return window.Capacitor?.Plugins?.StatusBar ?? null;
1222
1224
  }
1225
+ function getNativeBrowserPlugin() {
1226
+ if (!isNativeApp()) return null;
1227
+ return window.Capacitor?.Plugins?.Browser ?? null;
1228
+ }
1229
+ function getNativeSharePlugin() {
1230
+ if (!isNativeApp()) return null;
1231
+ return window.Capacitor?.Plugins?.Share ?? null;
1232
+ }
1233
+ function getNativeCameraPlugin() {
1234
+ if (!isNativeApp()) return null;
1235
+ return window.Capacitor?.Plugins?.Camera ?? null;
1236
+ }
1237
+ function getNativeImagePickerPlugin() {
1238
+ if (!isNativeApp()) return null;
1239
+ return window.Capacitor?.Plugins?.NativeImagePicker ?? null;
1240
+ }
1241
+ function getNativeShareFilePlugin() {
1242
+ if (!isNativeApp()) return null;
1243
+ return window.Capacitor?.Plugins?.NativeShareFile ?? null;
1244
+ }
1223
1245
  function getNativeThemePlugin() {
1224
1246
  if (!isNativeApp()) return null;
1225
1247
  return window.Capacitor?.Plugins?.NativeTheme ?? null;
1226
1248
  }
1249
+ function getNativePaymentPlugin() {
1250
+ if (!isNativeApp()) return null;
1251
+ return window.Capacitor?.Plugins?.NativePayment ?? null;
1252
+ }
1253
+ function getNativeShareTargetPlugin() {
1254
+ if (!isNativeApp()) return null;
1255
+ return window.Capacitor?.Plugins?.NativeShareTarget ?? null;
1256
+ }
1257
+ function getNativeAppSettingsPlugin() {
1258
+ if (!isNativeApp()) return null;
1259
+ return window.Capacitor?.Plugins?.NativeAppSettings ?? null;
1260
+ }
1261
+ function getNativeInAppUpdatePlugin() {
1262
+ if (!isNativeApp()) return null;
1263
+ return window.Capacitor?.Plugins?.NativeInAppUpdate ?? null;
1264
+ }
1265
+ async function openNativeAppSettings() {
1266
+ const settings = getNativeAppSettingsPlugin();
1267
+ if (!settings?.openAppSettings) return false;
1268
+ try {
1269
+ await settings.openAppSettings();
1270
+ return true;
1271
+ } catch {
1272
+ return false;
1273
+ }
1274
+ }
1275
+ async function openUpiPaymentUrl(url, options = {}) {
1276
+ if (typeof window === "undefined") return false;
1277
+ if (options.isNative ?? isNativeApp()) {
1278
+ const payment = getNativePaymentPlugin();
1279
+ if (payment?.openUpiUrl) {
1280
+ const result = await payment.openUpiUrl({
1281
+ url,
1282
+ title: options.title
1283
+ });
1284
+ return result.opened;
1285
+ }
1286
+ }
1287
+ window.location.href = url;
1288
+ return true;
1289
+ }
1290
+ async function openExternalUrl(url, options = {}) {
1291
+ if (typeof window === "undefined") return false;
1292
+ if (options.isNative ?? isNativeApp()) {
1293
+ const browser = getNativeBrowserPlugin();
1294
+ if (browser?.open) {
1295
+ await browser.open({ url });
1296
+ return true;
1297
+ }
1298
+ }
1299
+ const opened = window.open(
1300
+ url,
1301
+ options.target ?? "_blank",
1302
+ options.features ?? "noopener,noreferrer"
1303
+ );
1304
+ return opened != null;
1305
+ }
1306
+ async function saveNativeShareImage(dataUrl, options = {}) {
1307
+ if (!(options.isNative ?? isNativeApp())) return null;
1308
+ const plugin = getNativeShareFilePlugin();
1309
+ if (!plugin?.saveImage) return null;
1310
+ try {
1311
+ const result = await plugin.saveImage({
1312
+ data: dataUrl,
1313
+ fileName: options.fileName
1314
+ });
1315
+ return result.path ?? null;
1316
+ } catch {
1317
+ return null;
1318
+ }
1319
+ }
1320
+ async function shareNativeOrWeb(data, options = {}) {
1321
+ if (typeof window === "undefined") return false;
1322
+ if (options.isNative ?? isNativeApp()) {
1323
+ const share = getNativeSharePlugin();
1324
+ if (share?.share) {
1325
+ await share.share(data);
1326
+ return true;
1327
+ }
1328
+ }
1329
+ const { files: _files, ...webData } = data;
1330
+ if (typeof navigator.share === "function") {
1331
+ await navigator.share(webData);
1332
+ return true;
1333
+ }
1334
+ return false;
1335
+ }
1336
+ function isNativePickerCancel(error) {
1337
+ if (!(error instanceof Error)) return false;
1338
+ const message = error.message.toLowerCase();
1339
+ return message.includes("cancel") || message.includes("dismiss") || message.includes("no image") || message.includes("user denied");
1340
+ }
1341
+ function imageTypeFromFormat(format, fallback) {
1342
+ if (!format) return fallback;
1343
+ const normalized = format.toLowerCase();
1344
+ if (normalized === "jpg") return "image/jpeg";
1345
+ if (normalized === "jpeg") return "image/jpeg";
1346
+ if (normalized === "png") return "image/png";
1347
+ if (normalized === "webp") return "image/webp";
1348
+ if (normalized === "heic") return "image/heic";
1349
+ if (normalized === "heif") return "image/heif";
1350
+ return fallback;
1351
+ }
1352
+ function imageExtensionFromType(type) {
1353
+ if (type.includes("png")) return "png";
1354
+ if (type.includes("webp")) return "webp";
1355
+ if (type.includes("heic")) return "heic";
1356
+ if (type.includes("heif")) return "heif";
1357
+ return "jpg";
1358
+ }
1359
+ function nativeSharedFileToFile(sharedFile, fallbackName = "native-image.jpg") {
1360
+ const binary = atob(sharedFile.data);
1361
+ const bytes = new Uint8Array(binary.length);
1362
+ for (let index = 0; index < binary.length; index++) {
1363
+ bytes[index] = binary.charCodeAt(index);
1364
+ }
1365
+ return new File([bytes], sharedFile.name || fallbackName, {
1366
+ type: sharedFile.type || "image/jpeg",
1367
+ lastModified: Date.now()
1368
+ });
1369
+ }
1370
+ async function nativePhotoToFile(photo, index, prefix) {
1371
+ const src = photo.webPath ?? photo.path;
1372
+ if (!src) {
1373
+ throw new Error("Unable to read selected image.");
1374
+ }
1375
+ const response = await fetch(src);
1376
+ if (!response.ok) {
1377
+ throw new Error("Unable to read selected image.");
1378
+ }
1379
+ const blob = await response.blob();
1380
+ const type = blob.type || imageTypeFromFormat(photo.format, "image/jpeg");
1381
+ const extension = imageExtensionFromType(type);
1382
+ return new File([blob], `${prefix}-${Date.now()}-${index}.${extension}`, {
1383
+ type,
1384
+ lastModified: Date.now()
1385
+ });
1386
+ }
1387
+ async function pickNativeImageFiles({
1388
+ isNative,
1389
+ multiple = false,
1390
+ limit = multiple ? 10 : 1,
1391
+ quality = 85,
1392
+ prefix = "image"
1393
+ }) {
1394
+ if (!(isNative ?? isNativeApp())) return null;
1395
+ const camera = getNativeCameraPlugin();
1396
+ if (!camera) return null;
1397
+ try {
1398
+ const photos = multiple && camera.pickImages ? (await camera.pickImages({ limit, quality })).photos : [
1399
+ await camera.getPhoto?.({
1400
+ allowEditing: false,
1401
+ quality,
1402
+ resultType: "uri",
1403
+ source: "PROMPT"
1404
+ })
1405
+ ].filter((photo) => Boolean(photo));
1406
+ return Promise.all(
1407
+ photos.slice(0, limit).map((photo, index) => nativePhotoToFile(photo, index, prefix))
1408
+ );
1409
+ } catch (error) {
1410
+ if (isNativePickerCancel(error)) return [];
1411
+ throw error;
1412
+ }
1413
+ }
1414
+ async function pickNativeChooserImageFiles({
1415
+ isNative,
1416
+ limit = 1,
1417
+ title = "Select image"
1418
+ }) {
1419
+ if (!(isNative ?? isNativeApp())) return null;
1420
+ const picker = getNativeImagePickerPlugin();
1421
+ if (!picker?.pickImages) return null;
1422
+ try {
1423
+ const result = await picker.pickImages({
1424
+ limit,
1425
+ title
1426
+ });
1427
+ return (result.files ?? []).filter((file) => file.type?.startsWith("image/")).slice(0, limit).map((file) => nativeSharedFileToFile(file));
1428
+ } catch (error) {
1429
+ if (isNativePickerCancel(error)) return [];
1430
+ throw error;
1431
+ }
1432
+ }
1433
+
1434
+ // src/lib/openai.ts
1435
+ import { OpenAI as AI } from "openai";
1436
+ var client;
1437
+ function getOpenAI() {
1438
+ const apiKey = process.env.OPENAI_API_KEY;
1439
+ if (!apiKey) {
1440
+ throw new Error("OPENAI_API_KEY is not configured");
1441
+ }
1442
+ client ??= new AI({ apiKey });
1443
+ return client;
1444
+ }
1227
1445
 
1228
1446
  // src/lib/parms.ts
1229
1447
  import {
@@ -1292,6 +1510,44 @@ function buildFlagSearchParamHref(pathname, searchParams2, key, enabled) {
1292
1510
  return query ? `${pathname}?${query}` : pathname;
1293
1511
  }
1294
1512
 
1513
+ // src/lib/compose-refs.ts
1514
+ import * as React from "react";
1515
+ function setRef(ref, value) {
1516
+ if (typeof ref === "function") {
1517
+ return ref(value);
1518
+ }
1519
+ if (ref !== null && ref !== void 0) {
1520
+ ref.current = value;
1521
+ }
1522
+ }
1523
+ function composeRefs(...refs) {
1524
+ return (node) => {
1525
+ let hasCleanup = false;
1526
+ const cleanups = refs.map((ref) => {
1527
+ const cleanup = setRef(ref, node);
1528
+ if (!hasCleanup && typeof cleanup === "function") {
1529
+ hasCleanup = true;
1530
+ }
1531
+ return cleanup;
1532
+ });
1533
+ if (hasCleanup) {
1534
+ return () => {
1535
+ for (let i = 0; i < cleanups.length; i++) {
1536
+ const cleanup = cleanups[i];
1537
+ if (typeof cleanup === "function") {
1538
+ cleanup();
1539
+ } else {
1540
+ setRef(refs[i], null);
1541
+ }
1542
+ }
1543
+ };
1544
+ }
1545
+ };
1546
+ }
1547
+ function useComposedRefs(...refs) {
1548
+ return React.useCallback(composeRefs(...refs), refs);
1549
+ }
1550
+
1295
1551
  // src/ui/bridge.tsx
1296
1552
  function getAppPath(value) {
1297
1553
  try {
@@ -1338,7 +1594,7 @@ function syncNativeAppearance() {
1338
1594
  }
1339
1595
  function NativeAppBridge() {
1340
1596
  const router = useRouter();
1341
- React.useEffect(() => {
1597
+ React2.useEffect(() => {
1342
1598
  if (!isNativeApp()) return;
1343
1599
  const root = document.documentElement;
1344
1600
  const platform = getNativePlatform();
@@ -1392,13 +1648,14 @@ function NativeAppBridge() {
1392
1648
  import { mergeProps as mergeProps2 } from "@base-ui/react/merge-props";
1393
1649
  import { useRender as useRender2 } from "@base-ui/react/use-render";
1394
1650
  import { cva as cva3 } from "class-variance-authority";
1651
+ import { cn as cn12 } from "cn";
1395
1652
  import { jsx as jsx12 } from "react/jsx-runtime";
1396
1653
  function BubbleGroup({ className, ...props }) {
1397
1654
  return /* @__PURE__ */ jsx12(
1398
1655
  "div",
1399
1656
  {
1400
1657
  "data-slot": "bubble-group",
1401
- className: cn("flex min-w-0 flex-col gap-2", className),
1658
+ className: cn12("flex min-w-0 flex-col gap-2", className),
1402
1659
  ...props
1403
1660
  }
1404
1661
  );
@@ -1434,7 +1691,7 @@ function Bubble({
1434
1691
  "data-slot": "bubble",
1435
1692
  "data-variant": variant,
1436
1693
  "data-align": align,
1437
- className: cn(bubbleVariants({ variant }), className),
1694
+ className: cn12(bubbleVariants({ variant }), className),
1438
1695
  ...props
1439
1696
  }
1440
1697
  );
@@ -1448,7 +1705,7 @@ function BubbleContent({
1448
1705
  defaultTagName: "div",
1449
1706
  props: mergeProps2(
1450
1707
  {
1451
- className: cn(
1708
+ className: cn12(
1452
1709
  "w-fit max-w-full min-w-0 overflow-hidden rounded-xl border border-transparent px-3 py-2 text-sm leading-relaxed wrap-break-word group-data-[align=end]/bubble:self-end [button]:text-left [button,a]:transition-colors [button,a]:outline-none [button,a]:focus-visible:border-ring [button,a]:focus-visible:ring-3 [button,a]:focus-visible:ring-ring/50",
1453
1710
  className
1454
1711
  )
@@ -1492,7 +1749,7 @@ function BubbleReactions({
1492
1749
  "data-slot": "bubble-reactions",
1493
1750
  "data-align": align,
1494
1751
  "data-side": side,
1495
- className: cn(bubbleReactionsVariants({ side, align }), className),
1752
+ className: cn12(bubbleReactionsVariants({ side, align }), className),
1496
1753
  ...props
1497
1754
  }
1498
1755
  );
@@ -1502,9 +1759,11 @@ function BubbleReactions({
1502
1759
  import { mergeProps as mergeProps3 } from "@base-ui/react/merge-props";
1503
1760
  import { useRender as useRender3 } from "@base-ui/react/use-render";
1504
1761
  import { cva as cva4 } from "class-variance-authority";
1762
+ import { cn as cn14 } from "cn";
1505
1763
 
1506
1764
  // src/ui/separator.tsx
1507
1765
  import { Separator as SeparatorPrimitive } from "@base-ui/react/separator";
1766
+ import { cn as cn13 } from "cn";
1508
1767
  import { jsx as jsx13 } from "react/jsx-runtime";
1509
1768
  function Separator({
1510
1769
  className,
@@ -1516,7 +1775,7 @@ function Separator({
1516
1775
  {
1517
1776
  "data-slot": "separator",
1518
1777
  orientation,
1519
- className: cn(
1778
+ className: cn13(
1520
1779
  "shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch",
1521
1780
  className
1522
1781
  ),
@@ -1552,7 +1811,7 @@ function ButtonGroup({
1552
1811
  role: "group",
1553
1812
  "data-slot": "button-group",
1554
1813
  "data-orientation": orientation,
1555
- className: cn(buttonGroupVariants({ orientation }), className),
1814
+ className: cn14(buttonGroupVariants({ orientation }), className),
1556
1815
  ...props
1557
1816
  }
1558
1817
  );
@@ -1566,7 +1825,7 @@ function ButtonGroupText({
1566
1825
  defaultTagName: "div",
1567
1826
  props: mergeProps3(
1568
1827
  {
1569
- className: cn(
1828
+ className: cn14(
1570
1829
  "flex items-center gap-2 rounded-lg border bg-muted px-2.5 text-sm font-medium [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4",
1571
1830
  className
1572
1831
  )
@@ -1589,7 +1848,7 @@ function ButtonGroupSeparator({
1589
1848
  {
1590
1849
  "data-slot": "button-group-separator",
1591
1850
  orientation,
1592
- className: cn(
1851
+ className: cn14(
1593
1852
  "relative self-stretch bg-input data-horizontal:mx-px data-horizontal:w-auto data-vertical:my-px data-vertical:h-auto",
1594
1853
  className
1595
1854
  ),
@@ -1599,16 +1858,17 @@ function ButtonGroupSeparator({
1599
1858
  }
1600
1859
 
1601
1860
  // src/ui/card.tsx
1602
- import * as React2 from "react";
1861
+ import * as React3 from "react";
1862
+ import { cn as cn15 } from "cn";
1603
1863
  import { jsx as jsx15 } from "react/jsx-runtime";
1604
- var Card = React2.forwardRef(function Card2({ className, size = "default", ...props }, ref) {
1864
+ var Card = React3.forwardRef(function Card2({ className, size = "default", ...props }, ref) {
1605
1865
  return /* @__PURE__ */ jsx15(
1606
1866
  "div",
1607
1867
  {
1608
1868
  ref,
1609
1869
  "data-slot": "card",
1610
1870
  "data-size": size,
1611
- className: cn(
1871
+ className: cn15(
1612
1872
  "group/card flex flex-col gap-(--card-spacing) overflow-hidden rounded-xl bg-card py-(--card-spacing) text-sm text-card-foreground ring-1 ring-foreground/10 [--card-spacing:--spacing(4)] has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(3)] data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl",
1613
1873
  className
1614
1874
  ),
@@ -1621,7 +1881,7 @@ function CardHeader({ className, ...props }) {
1621
1881
  "div",
1622
1882
  {
1623
1883
  "data-slot": "card-header",
1624
- className: cn(
1884
+ className: cn15(
1625
1885
  "group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-(--card-spacing) has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-(--card-spacing)",
1626
1886
  className
1627
1887
  ),
@@ -1634,7 +1894,7 @@ function CardTitle({ className, ...props }) {
1634
1894
  "div",
1635
1895
  {
1636
1896
  "data-slot": "card-title",
1637
- className: cn(
1897
+ className: cn15(
1638
1898
  "text-base leading-snug font-medium group-data-[size=sm]/card:text-sm",
1639
1899
  className
1640
1900
  ),
@@ -1647,7 +1907,7 @@ function CardDescription({ className, ...props }) {
1647
1907
  "div",
1648
1908
  {
1649
1909
  "data-slot": "card-description",
1650
- className: cn("text-sm text-muted-foreground", className),
1910
+ className: cn15("text-sm text-muted-foreground", className),
1651
1911
  ...props
1652
1912
  }
1653
1913
  );
@@ -1657,7 +1917,7 @@ function CardAction({ className, ...props }) {
1657
1917
  "div",
1658
1918
  {
1659
1919
  "data-slot": "card-action",
1660
- className: cn(
1920
+ className: cn15(
1661
1921
  "col-start-2 row-span-2 row-start-1 self-start justify-self-end",
1662
1922
  className
1663
1923
  ),
@@ -1670,7 +1930,7 @@ function CardContent({ className, ...props }) {
1670
1930
  "div",
1671
1931
  {
1672
1932
  "data-slot": "card-content",
1673
- className: cn("px-(--card-spacing)", className),
1933
+ className: cn15("px-(--card-spacing)", className),
1674
1934
  ...props
1675
1935
  }
1676
1936
  );
@@ -1680,7 +1940,7 @@ function CardFooter({ className, ...props }) {
1680
1940
  "div",
1681
1941
  {
1682
1942
  "data-slot": "card-footer",
1683
- className: cn(
1943
+ className: cn15(
1684
1944
  "flex items-center rounded-b-xl border-t bg-muted/50 p-(--card-spacing)",
1685
1945
  className
1686
1946
  ),
@@ -1692,11 +1952,12 @@ function CardFooter({ className, ...props }) {
1692
1952
  // src/ui/carousel.tsx
1693
1953
  import useEmblaCarousel from "embla-carousel-react";
1694
1954
  import { ChevronLeft, ChevronRight } from "lucide-react";
1695
- import * as React3 from "react";
1955
+ import * as React4 from "react";
1956
+ import { cn as cn16 } from "cn";
1696
1957
  import { jsx as jsx16, jsxs as jsxs8 } from "react/jsx-runtime";
1697
- var CarouselContext = React3.createContext(null);
1958
+ var CarouselContext = React4.createContext(null);
1698
1959
  function useCarousel() {
1699
- const context = React3.useContext(CarouselContext);
1960
+ const context = React4.useContext(CarouselContext);
1700
1961
  if (!context) {
1701
1962
  throw new Error("useCarousel must be used within a <Carousel />");
1702
1963
  }
@@ -1718,20 +1979,20 @@ function Carousel({
1718
1979
  },
1719
1980
  plugins
1720
1981
  );
1721
- const [canScrollPrev, setCanScrollPrev] = React3.useState(false);
1722
- const [canScrollNext, setCanScrollNext] = React3.useState(false);
1723
- const onSelect = React3.useCallback((api2) => {
1982
+ const [canScrollPrev, setCanScrollPrev] = React4.useState(false);
1983
+ const [canScrollNext, setCanScrollNext] = React4.useState(false);
1984
+ const onSelect = React4.useCallback((api2) => {
1724
1985
  if (!api2) return;
1725
1986
  setCanScrollPrev(api2.canScrollPrev());
1726
1987
  setCanScrollNext(api2.canScrollNext());
1727
1988
  }, []);
1728
- const scrollPrev = React3.useCallback(() => {
1989
+ const scrollPrev = React4.useCallback(() => {
1729
1990
  api?.scrollPrev();
1730
1991
  }, [api]);
1731
- const scrollNext = React3.useCallback(() => {
1992
+ const scrollNext = React4.useCallback(() => {
1732
1993
  api?.scrollNext();
1733
1994
  }, [api]);
1734
- const handleKeyDown = React3.useCallback(
1995
+ const handleKeyDown = React4.useCallback(
1735
1996
  (event) => {
1736
1997
  if (event.key === "ArrowLeft") {
1737
1998
  event.preventDefault();
@@ -1743,11 +2004,11 @@ function Carousel({
1743
2004
  },
1744
2005
  [scrollPrev, scrollNext]
1745
2006
  );
1746
- React3.useEffect(() => {
2007
+ React4.useEffect(() => {
1747
2008
  if (!api || !setApi) return;
1748
2009
  setApi(api);
1749
2010
  }, [api, setApi]);
1750
- React3.useEffect(() => {
2011
+ React4.useEffect(() => {
1751
2012
  if (!api) return;
1752
2013
  api.on("reInit", onSelect);
1753
2014
  api.on("select", onSelect);
@@ -1774,7 +2035,7 @@ function Carousel({
1774
2035
  "div",
1775
2036
  {
1776
2037
  onKeyDownCapture: handleKeyDown,
1777
- className: cn("relative", className),
2038
+ className: cn16("relative", className),
1778
2039
  role: "region",
1779
2040
  "aria-roledescription": "carousel",
1780
2041
  "data-slot": "carousel",
@@ -1796,7 +2057,7 @@ function CarouselContent({ className, ...props }) {
1796
2057
  children: /* @__PURE__ */ jsx16(
1797
2058
  "div",
1798
2059
  {
1799
- className: cn(
2060
+ className: cn16(
1800
2061
  "flex",
1801
2062
  orientation === "horizontal" ? "-ml-4" : "-mt-4 flex-col",
1802
2063
  className
@@ -1815,7 +2076,7 @@ function CarouselItem({ className, ...props }) {
1815
2076
  role: "group",
1816
2077
  "aria-roledescription": "slide",
1817
2078
  "data-slot": "carousel-item",
1818
- className: cn(
2079
+ className: cn16(
1819
2080
  "min-w-0 shrink-0 grow-0 basis-full",
1820
2081
  orientation === "horizontal" ? "pl-4" : "pt-4",
1821
2082
  className
@@ -1837,7 +2098,7 @@ function CarouselPrevious({
1837
2098
  "data-slot": "carousel-previous",
1838
2099
  variant,
1839
2100
  size,
1840
- className: cn(
2101
+ className: cn16(
1841
2102
  "absolute touch-manipulation rounded-full",
1842
2103
  orientation === "horizontal" ? "top-1/2 left-2 z-10 -translate-y-1/2 sm:left-3" : "top-2 left-1/2 -translate-x-1/2 rotate-90",
1843
2104
  className
@@ -1865,7 +2126,7 @@ function CarouselNext({
1865
2126
  "data-slot": "carousel-next",
1866
2127
  variant,
1867
2128
  size,
1868
- className: cn(
2129
+ className: cn16(
1869
2130
  "absolute touch-manipulation rounded-full",
1870
2131
  orientation === "horizontal" ? "top-1/2 right-2 z-10 -translate-y-1/2 sm:right-3" : "bottom-2 left-1/2 -translate-x-1/2 rotate-90",
1871
2132
  className
@@ -1882,14 +2143,15 @@ function CarouselNext({
1882
2143
  }
1883
2144
 
1884
2145
  // src/ui/chart.tsx
1885
- import * as React4 from "react";
2146
+ import * as React5 from "react";
1886
2147
  import * as RechartsPrimitive from "recharts";
2148
+ import { cn as cn17 } from "cn";
1887
2149
  import { Fragment, jsx as jsx17, jsxs as jsxs9 } from "react/jsx-runtime";
1888
2150
  var THEMES = { light: "", dark: ".dark" };
1889
2151
  var INITIAL_DIMENSION = { width: 320, height: 200 };
1890
- var ChartContext = React4.createContext(null);
2152
+ var ChartContext = React5.createContext(null);
1891
2153
  function useChart() {
1892
- const context = React4.useContext(ChartContext);
2154
+ const context = React5.useContext(ChartContext);
1893
2155
  if (!context) {
1894
2156
  throw new Error("useChart must be used within a <ChartContainer />");
1895
2157
  }
@@ -1903,14 +2165,14 @@ function ChartContainer({
1903
2165
  initialDimension = INITIAL_DIMENSION,
1904
2166
  ...props
1905
2167
  }) {
1906
- const uniqueId = React4.useId();
2168
+ const uniqueId = React5.useId();
1907
2169
  const chartId = `chart-${id ?? uniqueId.replace(/:/g, "")}`;
1908
2170
  return /* @__PURE__ */ jsx17(ChartContext.Provider, { value: { config }, children: /* @__PURE__ */ jsxs9(
1909
2171
  "div",
1910
2172
  {
1911
2173
  "data-slot": "chart",
1912
2174
  "data-chart": chartId,
1913
- className: cn(
2175
+ className: cn17(
1914
2176
  "flex aspect-video justify-center text-xs [&_.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-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.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 [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden",
1915
2177
  className
1916
2178
  ),
@@ -1970,7 +2232,7 @@ function ChartTooltipContent({
1970
2232
  labelKey
1971
2233
  }) {
1972
2234
  const { config } = useChart();
1973
- const tooltipLabel = React4.useMemo(() => {
2235
+ const tooltipLabel = React5.useMemo(() => {
1974
2236
  if (hideLabel || !payload?.length) {
1975
2237
  return null;
1976
2238
  }
@@ -1979,12 +2241,12 @@ function ChartTooltipContent({
1979
2241
  const itemConfig = getPayloadConfigFromPayload(config, item, key);
1980
2242
  const value = !labelKey && typeof label === "string" ? config[label]?.label ?? label : itemConfig?.label;
1981
2243
  if (labelFormatter) {
1982
- return /* @__PURE__ */ jsx17("div", { className: cn("font-medium", labelClassName), children: labelFormatter(value, payload) });
2244
+ return /* @__PURE__ */ jsx17("div", { className: cn17("font-medium", labelClassName), children: labelFormatter(value, payload) });
1983
2245
  }
1984
2246
  if (!value) {
1985
2247
  return null;
1986
2248
  }
1987
- return /* @__PURE__ */ jsx17("div", { className: cn("font-medium", labelClassName), children: value });
2249
+ return /* @__PURE__ */ jsx17("div", { className: cn17("font-medium", labelClassName), children: value });
1988
2250
  }, [
1989
2251
  label,
1990
2252
  labelFormatter,
@@ -2001,7 +2263,7 @@ function ChartTooltipContent({
2001
2263
  return /* @__PURE__ */ jsxs9(
2002
2264
  "div",
2003
2265
  {
2004
- className: cn(
2266
+ className: cn17(
2005
2267
  "grid min-w-32 items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl",
2006
2268
  className
2007
2269
  ),
@@ -2014,7 +2276,7 @@ function ChartTooltipContent({
2014
2276
  return /* @__PURE__ */ jsx17(
2015
2277
  "div",
2016
2278
  {
2017
- className: cn(
2279
+ className: cn17(
2018
2280
  "flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground",
2019
2281
  indicator === "dot" && "items-center"
2020
2282
  ),
@@ -2022,7 +2284,7 @@ function ChartTooltipContent({
2022
2284
  itemConfig?.icon ? /* @__PURE__ */ jsx17(itemConfig.icon, {}) : !hideIndicator && /* @__PURE__ */ jsx17(
2023
2285
  "div",
2024
2286
  {
2025
- className: cn(
2287
+ className: cn17(
2026
2288
  "shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)",
2027
2289
  {
2028
2290
  "h-2.5 w-2.5": indicator === "dot",
@@ -2040,7 +2302,7 @@ function ChartTooltipContent({
2040
2302
  /* @__PURE__ */ jsxs9(
2041
2303
  "div",
2042
2304
  {
2043
- className: cn(
2305
+ className: cn17(
2044
2306
  "flex flex-1 justify-between leading-none",
2045
2307
  nestLabel ? "items-end" : "items-center"
2046
2308
  ),
@@ -2077,7 +2339,7 @@ function ChartLegendContent({
2077
2339
  return /* @__PURE__ */ jsx17(
2078
2340
  "div",
2079
2341
  {
2080
- className: cn(
2342
+ className: cn17(
2081
2343
  "flex items-center justify-center gap-4",
2082
2344
  verticalAlign === "top" ? "pb-3" : "pt-3",
2083
2345
  className
@@ -2088,7 +2350,7 @@ function ChartLegendContent({
2088
2350
  return /* @__PURE__ */ jsxs9(
2089
2351
  "div",
2090
2352
  {
2091
- className: cn(
2353
+ className: cn17(
2092
2354
  "flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground"
2093
2355
  ),
2094
2356
  children: [
@@ -2126,13 +2388,14 @@ function getPayloadConfigFromPayload(config, payload, key) {
2126
2388
 
2127
2389
  // src/ui/checkbox.tsx
2128
2390
  import { Checkbox as CheckboxPrimitive } from "@base-ui/react/checkbox";
2391
+ import { cn as cn18 } from "cn";
2129
2392
  import { jsx as jsx18 } from "react/jsx-runtime";
2130
2393
  function Checkbox({ className, children, ...props }) {
2131
2394
  return /* @__PURE__ */ jsx18(
2132
2395
  CheckboxPrimitive.Root,
2133
2396
  {
2134
2397
  "data-slot": "checkbox",
2135
- className: cn(
2398
+ className: cn18(
2136
2399
  "peer inline-flex size-5 shrink-0 items-center justify-center rounded border border-border bg-background text-primary outline-none transition-[background-color,border-color,box-shadow,opacity] duration-150 ease-out focus-visible:ring-2 focus-visible:ring-ring/50 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground data-disabled:cursor-not-allowed data-disabled:opacity-50 motion-reduce:transition-none",
2137
2400
  className
2138
2401
  ),
@@ -2151,20 +2414,23 @@ function Checkbox({ className, children, ...props }) {
2151
2414
 
2152
2415
  // src/ui/combobox.tsx
2153
2416
  import { Combobox as ComboboxPrimitive } from "@base-ui/react";
2154
- import * as React5 from "react";
2417
+ import * as React6 from "react";
2418
+ import { cn as cn21 } from "cn";
2155
2419
  import { Check, ChevronDown as ChevronDown2, Xmark as Xmark2 } from "@gravity-ui/icons";
2156
2420
 
2157
2421
  // src/ui/input-group.tsx
2158
2422
  import { cva as cva5 } from "class-variance-authority";
2423
+ import { cn as cn20 } from "cn";
2159
2424
 
2160
2425
  // src/ui/textarea.tsx
2426
+ import { cn as cn19 } from "cn";
2161
2427
  import { jsx as jsx19 } from "react/jsx-runtime";
2162
2428
  function Textarea({ className, ...props }) {
2163
2429
  return /* @__PURE__ */ jsx19(
2164
2430
  "textarea",
2165
2431
  {
2166
2432
  "data-slot": "textarea",
2167
- className: cn(
2433
+ className: cn19(
2168
2434
  "flex field-sizing-content min-h-16 w-full rounded-lg border border-input bg-transparent px-2.5 py-2 text-base transition-colors outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",
2169
2435
  className
2170
2436
  ),
@@ -2181,7 +2447,7 @@ function InputGroup({ className, ...props }) {
2181
2447
  {
2182
2448
  "data-slot": "input-group",
2183
2449
  role: "group",
2184
- className: cn(
2450
+ className: cn20(
2185
2451
  "group/input-group relative flex h-8 w-full min-w-0 items-center rounded-lg border border-input transition-colors outline-none in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-disabled:bg-input/50 has-disabled:opacity-50 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-2 has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-2 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>textarea]:h-auto dark:bg-input/30 dark:has-disabled:bg-input/80 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5",
2186
2452
  className
2187
2453
  ),
@@ -2217,7 +2483,7 @@ function InputGroupAddon({
2217
2483
  role: "group",
2218
2484
  "data-slot": "input-group-addon",
2219
2485
  "data-align": align,
2220
- className: cn(inputGroupAddonVariants({ align }), className),
2486
+ className: cn20(inputGroupAddonVariants({ align }), className),
2221
2487
  onClick: (e) => {
2222
2488
  if (e.target.closest("button")) {
2223
2489
  return;
@@ -2261,7 +2527,7 @@ function InputGroupButton({
2261
2527
  type,
2262
2528
  "data-size": size,
2263
2529
  variant,
2264
- className: cn(inputGroupButtonVariants({ size }), className),
2530
+ className: cn20(inputGroupButtonVariants({ size }), className),
2265
2531
  ...props
2266
2532
  }
2267
2533
  );
@@ -2270,7 +2536,7 @@ function InputGroupText({ className, ...props }) {
2270
2536
  return /* @__PURE__ */ jsx20(
2271
2537
  "span",
2272
2538
  {
2273
- className: cn(
2539
+ className: cn20(
2274
2540
  "flex items-center gap-2 text-sm text-muted-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4",
2275
2541
  className
2276
2542
  ),
@@ -2286,7 +2552,7 @@ function InputGroupInput({
2286
2552
  Input,
2287
2553
  {
2288
2554
  "data-slot": "input-group-control",
2289
- className: cn(
2555
+ className: cn20(
2290
2556
  "flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent",
2291
2557
  className
2292
2558
  ),
@@ -2302,7 +2568,7 @@ function InputGroupTextarea({
2302
2568
  Textarea,
2303
2569
  {
2304
2570
  "data-slot": "input-group-control",
2305
- className: cn(
2571
+ className: cn20(
2306
2572
  "flex-1 resize-none rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent",
2307
2573
  className
2308
2574
  ),
@@ -2326,7 +2592,7 @@ function ComboboxTrigger({
2326
2592
  ComboboxPrimitive.Trigger,
2327
2593
  {
2328
2594
  "data-slot": "combobox-trigger",
2329
- className: cn("[&_svg:not([class*='size-'])]:size-4", className),
2595
+ className: cn21("[&_svg:not([class*='size-'])]:size-4", className),
2330
2596
  ...props,
2331
2597
  children: [
2332
2598
  children,
@@ -2341,7 +2607,7 @@ function ComboboxClear({ className, ...props }) {
2341
2607
  {
2342
2608
  "data-slot": "combobox-clear",
2343
2609
  render: /* @__PURE__ */ jsx21(InputGroupButton, { variant: "ghost", size: "icon-xs" }),
2344
- className: cn(className),
2610
+ className: cn21(className),
2345
2611
  ...props,
2346
2612
  children: /* @__PURE__ */ jsx21(Xmark2, { className: "pointer-events-none" })
2347
2613
  }
@@ -2357,7 +2623,7 @@ function ComboboxInput({
2357
2623
  endContent,
2358
2624
  ...props
2359
2625
  }) {
2360
- return /* @__PURE__ */ jsxs10(InputGroup, { className: cn("w-auto", className), children: [
2626
+ return /* @__PURE__ */ jsxs10(InputGroup, { className: cn21("w-auto", className), children: [
2361
2627
  /* @__PURE__ */ jsx21(
2362
2628
  ComboboxPrimitive.Input,
2363
2629
  {
@@ -2407,7 +2673,7 @@ function ComboboxContent({
2407
2673
  {
2408
2674
  "data-slot": "combobox-content",
2409
2675
  "data-chips": !!anchor,
2410
- className: cn(
2676
+ className: cn21(
2411
2677
  "group/combobox-content relative max-h-(--available-height) w-(--anchor-width) max-w-(--available-width) min-w-[calc(var(--anchor-width)+(--spacing(7)))] origin-(--transform-origin) overflow-hidden rounded-lg bg-background text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[chips=true]:min-w-(--anchor-width) data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-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 *:data-[slot=input-group]:m-1 *:data-[slot=input-group]:mb-0 *:data-[slot=input-group]:h-8 *:data-[slot=input-group]:border-input/30 *:data-[slot=input-group]:bg-input/30 *:data-[slot=input-group]:shadow-none data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
2412
2678
  className
2413
2679
  ),
@@ -2422,7 +2688,7 @@ function ComboboxList({ className, ...props }) {
2422
2688
  ComboboxPrimitive.List,
2423
2689
  {
2424
2690
  "data-slot": "combobox-list",
2425
- className: cn(
2691
+ className: cn21(
2426
2692
  "no-scrollbar max-h-[min(calc(--spacing(72)-(--spacing(9))),calc(var(--available-height)-(--spacing(9))))] scroll-py-1 overflow-y-auto overscroll-contain p-1 data-empty:p-0",
2427
2693
  className
2428
2694
  ),
@@ -2439,7 +2705,7 @@ function ComboboxItem({
2439
2705
  ComboboxPrimitive.Item,
2440
2706
  {
2441
2707
  "data-slot": "combobox-item",
2442
- className: cn(
2708
+ className: cn21(
2443
2709
  "relative flex w-full cursor-default items-center gap-2 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none data-highlighted:bg-accent data-highlighted:text-accent-foreground not-data-[variant=destructive]:data-highlighted:**: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",
2444
2710
  className
2445
2711
  ),
@@ -2462,7 +2728,7 @@ function ComboboxGroup({ className, ...props }) {
2462
2728
  ComboboxPrimitive.Group,
2463
2729
  {
2464
2730
  "data-slot": "combobox-group",
2465
- className: cn(className),
2731
+ className: cn21(className),
2466
2732
  ...props
2467
2733
  }
2468
2734
  );
@@ -2475,7 +2741,7 @@ function ComboboxLabel({
2475
2741
  ComboboxPrimitive.GroupLabel,
2476
2742
  {
2477
2743
  "data-slot": "combobox-label",
2478
- className: cn("px-2 py-1.5 text-xs text-muted-foreground", className),
2744
+ className: cn21("px-2 py-1.5 text-xs text-muted-foreground", className),
2479
2745
  ...props
2480
2746
  }
2481
2747
  );
@@ -2488,7 +2754,7 @@ function ComboboxEmpty({ className, ...props }) {
2488
2754
  ComboboxPrimitive.Empty,
2489
2755
  {
2490
2756
  "data-slot": "combobox-empty",
2491
- className: cn(
2757
+ className: cn21(
2492
2758
  "hidden w-full justify-center py-2 text-center text-sm text-muted-foreground group-data-empty/combobox-content:flex",
2493
2759
  className
2494
2760
  ),
@@ -2504,7 +2770,7 @@ function ComboboxSeparator({
2504
2770
  ComboboxPrimitive.Separator,
2505
2771
  {
2506
2772
  "data-slot": "combobox-separator",
2507
- className: cn("-mx-1 my-1 h-px bg-border", className),
2773
+ className: cn21("-mx-1 my-1 h-px bg-border", className),
2508
2774
  ...props
2509
2775
  }
2510
2776
  );
@@ -2517,7 +2783,7 @@ function ComboboxChips({
2517
2783
  ComboboxPrimitive.Chips,
2518
2784
  {
2519
2785
  "data-slot": "combobox-chips",
2520
- className: cn(
2786
+ className: cn21(
2521
2787
  "flex min-h-8 flex-wrap items-center gap-1 rounded-lg border border-input bg-transparent bg-clip-padding px-2.5 py-1 text-sm transition-colors focus-within:border-ring focus-within:ring-2 focus-within:ring-ring/50 has-aria-invalid:border-destructive has-aria-invalid:ring-2 has-aria-invalid:ring-destructive/20 has-data-[slot=combobox-chip]:px-1 dark:bg-input/30 dark:has-aria-invalid:border-destructive/50 dark:has-aria-invalid:ring-destructive/40",
2522
2788
  className
2523
2789
  ),
@@ -2535,7 +2801,7 @@ function ComboboxChip({
2535
2801
  ComboboxPrimitive.Chip,
2536
2802
  {
2537
2803
  "data-slot": "combobox-chip",
2538
- className: cn(
2804
+ className: cn21(
2539
2805
  "flex h-[calc(--spacing(5.25))] w-fit items-center justify-center gap-1 rounded-sm bg-muted px-1.5 text-xs font-medium whitespace-nowrap text-foreground has-disabled:pointer-events-none has-disabled:cursor-not-allowed has-disabled:opacity-50 has-data-[slot=combobox-chip-remove]:pr-0",
2540
2806
  className
2541
2807
  ),
@@ -2563,21 +2829,23 @@ function ComboboxChipsInput({
2563
2829
  ComboboxPrimitive.Input,
2564
2830
  {
2565
2831
  "data-slot": "combobox-chip-input",
2566
- className: cn("min-w-16 flex-1 outline-none", className),
2832
+ className: cn21("min-w-16 flex-1 outline-none", className),
2567
2833
  ...props
2568
2834
  }
2569
2835
  );
2570
2836
  }
2571
2837
  function useComboboxAnchor() {
2572
- return React5.useRef(null);
2838
+ return React6.useRef(null);
2573
2839
  }
2574
2840
 
2575
2841
  // src/ui/command.tsx
2576
2842
  import { Command as CommandPrimitive } from "cmdk";
2843
+ import { cn as cn23 } from "cn";
2577
2844
  import { Magnifier } from "@gravity-ui/icons";
2578
2845
 
2579
2846
  // src/ui/dialog.tsx
2580
2847
  import { Dialog as DialogPrimitive } from "@base-ui/react/dialog";
2848
+ import { cn as cn22 } from "cn";
2581
2849
  import { Xmark as Xmark3 } from "@gravity-ui/icons";
2582
2850
  import { jsx as jsx22, jsxs as jsxs11 } from "react/jsx-runtime";
2583
2851
  function Dialog({ ...props }) {
@@ -2600,7 +2868,7 @@ function DialogOverlay({
2600
2868
  DialogPrimitive.Backdrop,
2601
2869
  {
2602
2870
  "data-slot": "dialog-overlay",
2603
- className: cn(
2871
+ className: cn22(
2604
2872
  "fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",
2605
2873
  className
2606
2874
  ),
@@ -2620,7 +2888,7 @@ function DialogContent({
2620
2888
  DialogPrimitive.Popup,
2621
2889
  {
2622
2890
  "data-slot": "dialog-content",
2623
- className: cn(
2891
+ className: cn22(
2624
2892
  "fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-card p-4 text-sm text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
2625
2893
  className
2626
2894
  ),
@@ -2655,7 +2923,7 @@ function DialogHeader({ className, ...props }) {
2655
2923
  "div",
2656
2924
  {
2657
2925
  "data-slot": "dialog-header",
2658
- className: cn("flex flex-col gap-2", className),
2926
+ className: cn22("flex flex-col gap-2", className),
2659
2927
  ...props
2660
2928
  }
2661
2929
  );
@@ -2670,7 +2938,7 @@ function DialogFooter({
2670
2938
  "div",
2671
2939
  {
2672
2940
  "data-slot": "dialog-footer",
2673
- className: cn(
2941
+ className: cn22(
2674
2942
  "flex shrink-0 flex-col-reverse items-center justify-center gap-2 p-4 pt-0 sm:flex-row",
2675
2943
  className
2676
2944
  ),
@@ -2687,7 +2955,7 @@ function DialogTitle({ className, ...props }) {
2687
2955
  DialogPrimitive.Title,
2688
2956
  {
2689
2957
  "data-slot": "dialog-title",
2690
- className: cn("text-base leading-none font-medium", className),
2958
+ className: cn22("text-base leading-none font-medium", className),
2691
2959
  ...props
2692
2960
  }
2693
2961
  );
@@ -2700,7 +2968,7 @@ function DialogDescription({
2700
2968
  DialogPrimitive.Description,
2701
2969
  {
2702
2970
  "data-slot": "dialog-description",
2703
- className: cn(
2971
+ className: cn22(
2704
2972
  "text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground",
2705
2973
  className
2706
2974
  ),
@@ -2719,7 +2987,7 @@ function Command({
2719
2987
  CommandPrimitive,
2720
2988
  {
2721
2989
  "data-slot": "command",
2722
- className: cn(
2990
+ className: cn23(
2723
2991
  "flex size-full flex-col overflow-hidden rounded-xl! bg-background text-popover-foreground outline-none",
2724
2992
  className
2725
2993
  ),
@@ -2743,7 +3011,7 @@ function CommandDialog({
2743
3011
  /* @__PURE__ */ jsx23(
2744
3012
  DialogContent,
2745
3013
  {
2746
- className: cn(
3014
+ className: cn23(
2747
3015
  "top-1/3 translate-y-0 overflow-hidden rounded-xl! p-0",
2748
3016
  className
2749
3017
  ),
@@ -2764,7 +3032,7 @@ function CommandInput({
2764
3032
  InputGroup,
2765
3033
  {
2766
3034
  "data-slot": "command-input-wrapper",
2767
- className: cn(
3035
+ className: cn23(
2768
3036
  "h-8! border-input/30 bg-input/30 shadow-none! *:data-[slot=input-group-addon]:pl-2!",
2769
3037
  className
2770
3038
  ),
@@ -2793,7 +3061,7 @@ function CommandList({
2793
3061
  CommandPrimitive.List,
2794
3062
  {
2795
3063
  "data-slot": "command-list",
2796
- className: cn(
3064
+ className: cn23(
2797
3065
  "no-scrollbar max-h-72 scroll-py-1 overflow-x-hidden overflow-y-auto outline-none",
2798
3066
  className
2799
3067
  ),
@@ -2809,7 +3077,7 @@ function CommandEmpty({
2809
3077
  CommandPrimitive.Empty,
2810
3078
  {
2811
3079
  "data-slot": "command-empty",
2812
- className: cn("py-6 text-center text-sm", className),
3080
+ className: cn23("py-6 text-center text-sm", className),
2813
3081
  ...props
2814
3082
  }
2815
3083
  );
@@ -2822,7 +3090,7 @@ function CommandGroup({
2822
3090
  CommandPrimitive.Group,
2823
3091
  {
2824
3092
  "data-slot": "command-group",
2825
- className: cn(
3093
+ className: cn23(
2826
3094
  "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",
2827
3095
  className
2828
3096
  ),
@@ -2838,7 +3106,7 @@ function CommandSeparator({
2838
3106
  CommandPrimitive.Separator,
2839
3107
  {
2840
3108
  "data-slot": "command-separator",
2841
- className: cn("-mx-1 h-px bg-border", className),
3109
+ className: cn23("-mx-1 h-px bg-border", className),
2842
3110
  ...props
2843
3111
  }
2844
3112
  );
@@ -2852,7 +3120,7 @@ function CommandItem({
2852
3120
  CommandPrimitive.Item,
2853
3121
  {
2854
3122
  "data-slot": "command-item",
2855
- className: cn(
3123
+ className: cn23(
2856
3124
  "group/command-item relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none in-data-[slot=dialog-content]:rounded-lg! data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-selected:bg-muted data-selected:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-selected:*:[svg]:text-foreground",
2857
3125
  className
2858
3126
  ),
@@ -2869,7 +3137,7 @@ function CommandShortcut({
2869
3137
  "span",
2870
3138
  {
2871
3139
  "data-slot": "command-shortcut",
2872
- className: cn(
3140
+ className: cn23(
2873
3141
  "ml-auto text-xs tracking-widest text-muted-foreground group-data-selected/command-item:text-foreground",
2874
3142
  className
2875
3143
  ),
@@ -2879,7 +3147,8 @@ function CommandShortcut({
2879
3147
  }
2880
3148
 
2881
3149
  // src/ui/dashed.tsx
2882
- import * as React6 from "react";
3150
+ import * as React7 from "react";
3151
+ import { cn as cn24 } from "cn";
2883
3152
  import { jsx as jsx24 } from "react/jsx-runtime";
2884
3153
  function DashedSeparator({
2885
3154
  className,
@@ -2887,9 +3156,9 @@ function DashedSeparator({
2887
3156
  minimumGap = 8,
2888
3157
  thickness = 1
2889
3158
  }) {
2890
- const containerRef = React6.useRef(null);
2891
- const [dashCount, setDashCount] = React6.useState(0);
2892
- React6.useEffect(() => {
3159
+ const containerRef = React7.useRef(null);
3160
+ const [dashCount, setDashCount] = React7.useState(0);
3161
+ React7.useEffect(() => {
2893
3162
  const element = containerRef.current;
2894
3163
  if (!element) return;
2895
3164
  const updateDashCount = () => {
@@ -2910,7 +3179,7 @@ function DashedSeparator({
2910
3179
  {
2911
3180
  ref: containerRef,
2912
3181
  "aria-hidden": "true",
2913
- className: cn(
3182
+ className: cn24(
2914
3183
  "flex w-full items-center justify-between overflow-hidden text-border",
2915
3184
  className
2916
3185
  ),
@@ -2931,8 +3200,9 @@ function DashedSeparator({
2931
3200
  }
2932
3201
 
2933
3202
  // src/ui/dock.tsx
3203
+ import { cn as cn25 } from "cn";
2934
3204
  import { motion as motion4 } from "motion/react";
2935
- import * as React7 from "react";
3205
+ import * as React8 from "react";
2936
3206
  import { jsx as jsx25, jsxs as jsxs13 } from "react/jsx-runtime";
2937
3207
  var floatingAnimation = {
2938
3208
  initial: { y: 0 },
@@ -2945,7 +3215,7 @@ var floatingAnimation = {
2945
3215
  }
2946
3216
  }
2947
3217
  };
2948
- var DockIconButton = React7.forwardRef(
3218
+ var DockIconButton = React8.forwardRef(
2949
3219
  ({ icon: Icon, label, onClick, className }, ref) => {
2950
3220
  return /* @__PURE__ */ jsxs13(
2951
3221
  motion4.button,
@@ -2954,7 +3224,7 @@ var DockIconButton = React7.forwardRef(
2954
3224
  whileHover: { scale: 1.1, y: -2 },
2955
3225
  whileTap: { scale: 0.95 },
2956
3226
  onClick,
2957
- className: cn(
3227
+ className: cn25(
2958
3228
  "group relative rounded-lg p-3",
2959
3229
  "transition-colors hover:bg-secondary",
2960
3230
  className
@@ -2964,7 +3234,7 @@ var DockIconButton = React7.forwardRef(
2964
3234
  /* @__PURE__ */ jsx25(
2965
3235
  "span",
2966
3236
  {
2967
- className: cn(
3237
+ className: cn25(
2968
3238
  "absolute -top-8 left-1/2 -translate-x-1/2",
2969
3239
  "rounded px-2 py-1 text-xs",
2970
3240
  "bg-background text-popover-foreground",
@@ -2980,13 +3250,13 @@ var DockIconButton = React7.forwardRef(
2980
3250
  }
2981
3251
  );
2982
3252
  DockIconButton.displayName = "DockIconButton";
2983
- var Dock = React7.forwardRef(
3253
+ var Dock = React8.forwardRef(
2984
3254
  ({ items, className }, ref) => {
2985
3255
  return /* @__PURE__ */ jsx25(
2986
3256
  "div",
2987
3257
  {
2988
3258
  ref,
2989
- className: cn(
3259
+ className: cn25(
2990
3260
  "flex h-64 w-full items-center justify-center p-2",
2991
3261
  className
2992
3262
  ),
@@ -2996,7 +3266,7 @@ var Dock = React7.forwardRef(
2996
3266
  initial: "initial",
2997
3267
  animate: "animate",
2998
3268
  variants: floatingAnimation,
2999
- className: cn(
3269
+ className: cn25(
3000
3270
  "flex items-center gap-1 rounded-2xl p-2",
3001
3271
  "border shadow-lg backdrop-blur-lg",
3002
3272
  "border-border bg-background/90",
@@ -3013,11 +3283,12 @@ Dock.displayName = "Dock";
3013
3283
 
3014
3284
  // src/ui/drawer.tsx
3015
3285
  import { Drawer as DrawerPrimitive } from "@base-ui/react/drawer";
3016
- import * as React8 from "react";
3286
+ import * as React9 from "react";
3287
+ import { cn as cn26 } from "cn";
3017
3288
  import { jsx as jsx26, jsxs as jsxs14 } from "react/jsx-runtime";
3018
- var DrawerContext = React8.createContext(null);
3289
+ var DrawerContext = React9.createContext(null);
3019
3290
  function useDrawer() {
3020
- const context = React8.useContext(DrawerContext);
3291
+ const context = React9.useContext(DrawerContext);
3021
3292
  if (!context) {
3022
3293
  throw new Error("useDrawer must be used within a Drawer.");
3023
3294
  }
@@ -3032,7 +3303,7 @@ function Drawer({
3032
3303
  }) {
3033
3304
  const hasSnapPoints = snapPoints != null && snapPoints.length > 0;
3034
3305
  const resolvedShowSwipeHandle = showSwipeHandle ?? (swipeDirection === "down" || swipeDirection === "up");
3035
- const contextValue = React8.useMemo(
3306
+ const contextValue = React9.useMemo(
3036
3307
  () => ({
3037
3308
  hasSnapPoints,
3038
3309
  modal,
@@ -3069,7 +3340,7 @@ function DrawerOverlay({
3069
3340
  DrawerPrimitive.Backdrop,
3070
3341
  {
3071
3342
  "data-slot": "drawer-overlay",
3072
- className: cn(
3343
+ className: cn26(
3073
3344
  "ease-out-fluid fixed inset-0 z-50 min-h-dvh bg-black/10 opacity-[max(var(--drawer-overlay-min-opacity,0),calc(1-var(--drawer-swipe-progress)))] transition-opacity duration-450 select-none data-ending-style:pointer-events-none data-ending-style:opacity-0 data-ending-style:duration-[calc(var(--drawer-swipe-strength)*400ms)] data-snap-points:[--drawer-overlay-min-opacity:0.5] data-starting-style:opacity-0 data-swiping:duration-0 supports-backdrop-filter:backdrop-blur-xs supports-[-webkit-touch-callout:none]:absolute",
3074
3345
  className
3075
3346
  ),
@@ -3086,7 +3357,7 @@ function DrawerSwipeHandle({
3086
3357
  {
3087
3358
  "data-slot": "drawer-swipe-handle",
3088
3359
  "aria-hidden": "true",
3089
- className: cn(
3360
+ className: cn26(
3090
3361
  "flex shrink-0 cursor-grab transition-opacity duration-200 group-data-nested-drawer-open/drawer-popup:opacity-0 group-data-nested-drawer-swiping/drawer-popup:opacity-100 group-data-[swipe-axis=x]/drawer-popup:h-full group-data-[swipe-axis=x]/drawer-popup:w-3 group-data-[swipe-axis=x]/drawer-popup:items-center group-data-[swipe-axis=y]/drawer-popup:h-3 group-data-[swipe-axis=y]/drawer-popup:w-full group-data-[swipe-axis=y]/drawer-popup:justify-center group-data-[swipe-direction=down]/drawer-popup:items-end group-data-[swipe-direction=left]/drawer-popup:order-last group-data-[swipe-direction=left]/drawer-popup:justify-start group-data-[swipe-direction=right]/drawer-popup:justify-end group-data-[swipe-direction=up]/drawer-popup:order-last group-data-[swipe-direction=up]/drawer-popup:items-start after:block after:shrink-0 after:rounded-full after:bg-muted group-data-[swipe-axis=x]/drawer-popup:after:h-24 group-data-[swipe-axis=x]/drawer-popup:after:w-1 group-data-[swipe-axis=y]/drawer-popup:after:h-1 group-data-[swipe-axis=y]/drawer-popup:after:w-20 active:cursor-grabbing",
3091
3362
  className
3092
3363
  ),
@@ -3115,7 +3386,7 @@ function DrawerContent({
3115
3386
  "data-slot": "drawer-popup",
3116
3387
  "data-swipe-axis": swipeAxis,
3117
3388
  "data-snap-points": hasSnapPoints ? "" : void 0,
3118
- className: cn(
3389
+ className: cn26(
3119
3390
  // Base.
3120
3391
  "group/drawer-popup pointer-events-auto fixed z-50 m-(--drawer-inset,0px) flex h-(--drawer-content-height) max-h-(--drawer-content-max-height,none) min-h-0 w-(--drawer-content-width,auto) transform-[translate3d(var(--translate-x,0px),var(--translate-y,0px),0)_scale(var(--stack-scale))] flex-col rounded-4xl border bg-card text-sm text-popover-foreground transition-[transform,height,opacity,filter] duration-450 ease-[cubic-bezier(0.22,1,0.36,1)] will-change-transform outline-none select-none [--drawer-bleed-background:transparent] [--drawer-inset:--spacing(2)] [interpolate-size:allow-keywords] max-md:pb-(--app-safe-bottom) md:pb-0 dark:border-border",
3121
3392
  // Nested.
@@ -3149,7 +3420,7 @@ function DrawerContent({
3149
3420
  DrawerPrimitive.Content,
3150
3421
  {
3151
3422
  "data-slot": "drawer-content",
3152
- className: cn(
3423
+ className: cn26(
3153
3424
  "flex min-h-0 flex-1 flex-col overflow-hidden overscroll-contain rounded-[inherit] transition-opacity duration-300 ease-[cubic-bezier(0.45,1.005,0,1.005)] select-text group-data-nested-drawer-open/drawer-popup:opacity-0 group-data-nested-drawer-swiping/drawer-popup:opacity-100 group-data-swiping/drawer-popup:select-none"
3154
3425
  ),
3155
3426
  children
@@ -3167,7 +3438,7 @@ function DrawerHeader({ className, ...props }) {
3167
3438
  "div",
3168
3439
  {
3169
3440
  "data-slot": "drawer-header",
3170
- className: cn(
3441
+ className: cn26(
3171
3442
  "flex shrink-0 flex-col gap-0.5 p-4 pb-0 group-data-[swipe-axis=y]/drawer-popup:text-center md:gap-1.5 md:text-left",
3172
3443
  className
3173
3444
  ),
@@ -3180,7 +3451,7 @@ function DrawerFooter({ className, ...props }) {
3180
3451
  "div",
3181
3452
  {
3182
3453
  "data-slot": "drawer-footer",
3183
- className: cn("mt-auto flex shrink-0 flex-col gap-2 p-4 pt-0", className),
3454
+ className: cn26("mt-auto flex shrink-0 flex-col gap-2 p-4 pt-0", className),
3184
3455
  ...props
3185
3456
  }
3186
3457
  );
@@ -3190,7 +3461,7 @@ function DrawerTitle({ className, ...props }) {
3190
3461
  DrawerPrimitive.Title,
3191
3462
  {
3192
3463
  "data-slot": "drawer-title",
3193
- className: cn(
3464
+ className: cn26(
3194
3465
  "font-heading text-base font-medium text-foreground",
3195
3466
  className
3196
3467
  ),
@@ -3206,7 +3477,7 @@ function DrawerDescription({
3206
3477
  DrawerPrimitive.Description,
3207
3478
  {
3208
3479
  "data-slot": "drawer-description",
3209
- className: cn("text-sm text-balance text-muted-foreground", className),
3480
+ className: cn26("text-sm text-balance text-muted-foreground", className),
3210
3481
  ...props
3211
3482
  }
3212
3483
  );
@@ -3214,6 +3485,7 @@ function DrawerDescription({
3214
3485
 
3215
3486
  // src/ui/dropdown-menu.tsx
3216
3487
  import { Menu as MenuPrimitive } from "@base-ui/react/menu";
3488
+ import { cn as cn27 } from "cn";
3217
3489
  import { CheckIcon, ChevronRightIcon } from "lucide-react";
3218
3490
  import { jsx as jsx27, jsxs as jsxs15 } from "react/jsx-runtime";
3219
3491
  function DropdownMenu({ ...props }) {
@@ -3245,7 +3517,7 @@ function DropdownMenuContent({
3245
3517
  MenuPrimitive.Popup,
3246
3518
  {
3247
3519
  "data-slot": "dropdown-menu-content",
3248
- className: cn(
3520
+ className: cn27(
3249
3521
  "z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-background p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-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 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:overflow-hidden data-closed:fade-out-0 data-closed:zoom-out-95",
3250
3522
  className
3251
3523
  ),
@@ -3268,7 +3540,7 @@ function DropdownMenuLabel({
3268
3540
  {
3269
3541
  "data-slot": "dropdown-menu-label",
3270
3542
  "data-inset": inset,
3271
- className: cn(
3543
+ className: cn27(
3272
3544
  "px-1.5 py-1 text-xs font-medium text-muted-foreground data-inset:pl-7",
3273
3545
  className
3274
3546
  ),
@@ -3288,7 +3560,7 @@ function DropdownMenuItem({
3288
3560
  "data-slot": "dropdown-menu-item",
3289
3561
  "data-inset": inset,
3290
3562
  "data-variant": variant,
3291
- className: cn(
3563
+ className: cn27(
3292
3564
  "group/dropdown-menu-item relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive",
3293
3565
  className
3294
3566
  ),
@@ -3310,7 +3582,7 @@ function DropdownMenuSubTrigger({
3310
3582
  {
3311
3583
  "data-slot": "dropdown-menu-sub-trigger",
3312
3584
  "data-inset": inset,
3313
- className: cn(
3585
+ className: cn27(
3314
3586
  "flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-popup-open:bg-accent data-popup-open:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
3315
3587
  className
3316
3588
  ),
@@ -3334,7 +3606,7 @@ function DropdownMenuSubContent({
3334
3606
  DropdownMenuContent,
3335
3607
  {
3336
3608
  "data-slot": "dropdown-menu-sub-content",
3337
- className: cn(
3609
+ className: cn27(
3338
3610
  "w-auto min-w-[96px] rounded-lg bg-background p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 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 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
3339
3611
  className
3340
3612
  ),
@@ -3358,7 +3630,7 @@ function DropdownMenuCheckboxItem({
3358
3630
  {
3359
3631
  "data-slot": "dropdown-menu-checkbox-item",
3360
3632
  "data-inset": inset,
3361
- className: cn(
3633
+ className: cn27(
3362
3634
  "relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
3363
3635
  className
3364
3636
  ),
@@ -3398,7 +3670,7 @@ function DropdownMenuRadioItem({
3398
3670
  {
3399
3671
  "data-slot": "dropdown-menu-radio-item",
3400
3672
  "data-inset": inset,
3401
- className: cn(
3673
+ className: cn27(
3402
3674
  "relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
3403
3675
  className
3404
3676
  ),
@@ -3425,7 +3697,7 @@ function DropdownMenuSeparator({
3425
3697
  MenuPrimitive.Separator,
3426
3698
  {
3427
3699
  "data-slot": "dropdown-menu-separator",
3428
- className: cn("-mx-1 my-1 h-px bg-border", className),
3700
+ className: cn27("-mx-1 my-1 h-px bg-border", className),
3429
3701
  ...props
3430
3702
  }
3431
3703
  );
@@ -3438,7 +3710,7 @@ function DropdownMenuShortcut({
3438
3710
  "span",
3439
3711
  {
3440
3712
  "data-slot": "dropdown-menu-shortcut",
3441
- className: cn(
3713
+ className: cn27(
3442
3714
  "ml-auto text-xs tracking-widest text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground",
3443
3715
  className
3444
3716
  ),
@@ -3449,13 +3721,14 @@ function DropdownMenuShortcut({
3449
3721
 
3450
3722
  // src/ui/empty.tsx
3451
3723
  import { cva as cva6 } from "class-variance-authority";
3724
+ import { cn as cn28 } from "cn";
3452
3725
  import { jsx as jsx28 } from "react/jsx-runtime";
3453
3726
  function Empty({ className, ...props }) {
3454
3727
  return /* @__PURE__ */ jsx28(
3455
3728
  "div",
3456
3729
  {
3457
3730
  "data-slot": "empty",
3458
- className: cn(
3731
+ className: cn28(
3459
3732
  "flex w-full min-w-0 flex-1 flex-col items-center justify-center gap-4 rounded-xl border-dashed p-6 text-center text-balance",
3460
3733
  className
3461
3734
  ),
@@ -3468,7 +3741,7 @@ function EmptyHeader({ className, ...props }) {
3468
3741
  "div",
3469
3742
  {
3470
3743
  "data-slot": "empty-header",
3471
- className: cn("flex max-w-sm flex-col items-center gap-2", className),
3744
+ className: cn28("flex max-w-sm flex-col items-center gap-2", className),
3472
3745
  ...props
3473
3746
  }
3474
3747
  );
@@ -3497,7 +3770,7 @@ function EmptyMedia({
3497
3770
  {
3498
3771
  "data-slot": "empty-icon",
3499
3772
  "data-variant": variant,
3500
- className: cn(emptyMediaVariants({ variant, className })),
3773
+ className: cn28(emptyMediaVariants({ variant, className })),
3501
3774
  ...props
3502
3775
  }
3503
3776
  );
@@ -3507,7 +3780,7 @@ function EmptyTitle({ className, ...props }) {
3507
3780
  "div",
3508
3781
  {
3509
3782
  "data-slot": "empty-title",
3510
- className: cn("text-sm font-medium tracking-tight", className),
3783
+ className: cn28("text-sm font-medium tracking-tight", className),
3511
3784
  ...props
3512
3785
  }
3513
3786
  );
@@ -3517,7 +3790,7 @@ function EmptyDescription({ className, ...props }) {
3517
3790
  "div",
3518
3791
  {
3519
3792
  "data-slot": "empty-description",
3520
- className: cn(
3793
+ className: cn28(
3521
3794
  "text-sm/relaxed text-muted-foreground [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary",
3522
3795
  className
3523
3796
  ),
@@ -3530,7 +3803,7 @@ function EmptyContent({ className, ...props }) {
3530
3803
  "div",
3531
3804
  {
3532
3805
  "data-slot": "empty-content",
3533
- className: cn(
3806
+ className: cn28(
3534
3807
  "flex w-full max-w-sm min-w-0 flex-col items-center gap-2.5 text-sm text-balance",
3535
3808
  className
3536
3809
  ),
@@ -3553,6 +3826,37 @@ function useMediaQuery(query) {
3553
3826
  return matches;
3554
3827
  }
3555
3828
 
3829
+ // src/ui/farmer/div.tsx
3830
+ import { motion as motion5 } from "motion/react";
3831
+ import React10 from "react";
3832
+ import { jsx as jsx29 } from "react/jsx-runtime";
3833
+ var AnimatedDiv = React10.forwardRef(
3834
+ ({ variants, mobileVariants, className, children, infinity, ...motionProps }, ref) => {
3835
+ const isDesktop = useMediaQuery("(min-width: 768px)");
3836
+ const selectedVariants = !isDesktop && mobileVariants ? mobileVariants : variants;
3837
+ return /* @__PURE__ */ jsx29(
3838
+ motion5.div,
3839
+ {
3840
+ ref,
3841
+ layout: true,
3842
+ className,
3843
+ initial: "hidden",
3844
+ transition: {
3845
+ staggerChildren: 0.1,
3846
+ delayChildren: 0.2
3847
+ },
3848
+ variants: selectedVariants,
3849
+ viewport: { once: !infinity },
3850
+ whileInView: "visible",
3851
+ ...motionProps,
3852
+ children
3853
+ }
3854
+ );
3855
+ }
3856
+ );
3857
+ AnimatedDiv.displayName = "AnimatedDiv";
3858
+ var div_default = AnimatedDiv;
3859
+
3556
3860
  // src/ui/farmer/FramerMotionVariants.ts
3557
3861
  var activityItemAnimation = {
3558
3862
  hidden: {
@@ -3848,15 +4152,17 @@ var kanbanOrderCardLayoutTransition = {
3848
4152
  // src/ui/field.tsx
3849
4153
  import { cva as cva7 } from "class-variance-authority";
3850
4154
  import { useMemo as useMemo3 } from "react";
4155
+ import { cn as cn30 } from "cn";
3851
4156
 
3852
4157
  // src/ui/label.tsx
3853
- import { jsx as jsx29 } from "react/jsx-runtime";
4158
+ import { cn as cn29 } from "cn";
4159
+ import { jsx as jsx30 } from "react/jsx-runtime";
3854
4160
  function Label({ className, ...props }) {
3855
- return /* @__PURE__ */ jsx29(
4161
+ return /* @__PURE__ */ jsx30(
3856
4162
  "label",
3857
4163
  {
3858
4164
  "data-slot": "label",
3859
- className: cn(
4165
+ className: cn29(
3860
4166
  "flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
3861
4167
  className
3862
4168
  ),
@@ -3866,13 +4172,13 @@ function Label({ className, ...props }) {
3866
4172
  }
3867
4173
 
3868
4174
  // src/ui/field.tsx
3869
- import { jsx as jsx30, jsxs as jsxs16 } from "react/jsx-runtime";
4175
+ import { jsx as jsx31, jsxs as jsxs16 } from "react/jsx-runtime";
3870
4176
  function FieldSet({ className, ...props }) {
3871
- return /* @__PURE__ */ jsx30(
4177
+ return /* @__PURE__ */ jsx31(
3872
4178
  "fieldset",
3873
4179
  {
3874
4180
  "data-slot": "field-set",
3875
- className: cn(
4181
+ className: cn30(
3876
4182
  "flex flex-col gap-1 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3",
3877
4183
  className
3878
4184
  ),
@@ -3885,12 +4191,12 @@ function FieldLegend({
3885
4191
  variant = "legend",
3886
4192
  ...props
3887
4193
  }) {
3888
- return /* @__PURE__ */ jsx30(
4194
+ return /* @__PURE__ */ jsx31(
3889
4195
  "legend",
3890
4196
  {
3891
4197
  "data-slot": "field-legend",
3892
4198
  "data-variant": variant,
3893
- className: cn(
4199
+ className: cn30(
3894
4200
  "mb-1.5 font-medium data-[variant=label]:text-sm data-[variant=legend]:text-base",
3895
4201
  className
3896
4202
  ),
@@ -3899,11 +4205,11 @@ function FieldLegend({
3899
4205
  );
3900
4206
  }
3901
4207
  function FieldGroup({ className, ...props }) {
3902
- return /* @__PURE__ */ jsx30(
4208
+ return /* @__PURE__ */ jsx31(
3903
4209
  "div",
3904
4210
  {
3905
4211
  "data-slot": "field-group",
3906
- className: cn(
4212
+ className: cn30(
3907
4213
  "group/field-group @container/field-group flex w-full flex-col gap-2 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4",
3908
4214
  className
3909
4215
  ),
@@ -3931,23 +4237,23 @@ function Field({
3931
4237
  orientation = "vertical",
3932
4238
  ...props
3933
4239
  }) {
3934
- return /* @__PURE__ */ jsx30(
4240
+ return /* @__PURE__ */ jsx31(
3935
4241
  "div",
3936
4242
  {
3937
4243
  role: "group",
3938
4244
  "data-slot": "field",
3939
4245
  "data-orientation": orientation,
3940
- className: cn(fieldVariants({ orientation }), className),
4246
+ className: cn30(fieldVariants({ orientation }), className),
3941
4247
  ...props
3942
4248
  }
3943
4249
  );
3944
4250
  }
3945
4251
  function FieldContent({ className, ...props }) {
3946
- return /* @__PURE__ */ jsx30(
4252
+ return /* @__PURE__ */ jsx31(
3947
4253
  "div",
3948
4254
  {
3949
4255
  "data-slot": "field-content",
3950
- className: cn(
4256
+ className: cn30(
3951
4257
  "group/field-content flex flex-1 flex-col gap-0.5 leading-snug",
3952
4258
  className
3953
4259
  ),
@@ -3959,11 +4265,11 @@ function FieldLabel({
3959
4265
  className,
3960
4266
  ...props
3961
4267
  }) {
3962
- return /* @__PURE__ */ jsx30(
4268
+ return /* @__PURE__ */ jsx31(
3963
4269
  Label,
3964
4270
  {
3965
4271
  "data-slot": "field-label",
3966
- className: cn(
4272
+ className: cn30(
3967
4273
  "group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50 has-data-checked:border-primary/30 has-data-checked:bg-primary/5 has-[>[data-slot=field]]:rounded-lg has-[>[data-slot=field]]:border *:data-[slot=field]:p-2.5 dark:has-data-checked:border-primary/20 dark:has-data-checked:bg-primary/10",
3968
4274
  "has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col",
3969
4275
  className
@@ -3973,11 +4279,11 @@ function FieldLabel({
3973
4279
  );
3974
4280
  }
3975
4281
  function FieldTitle({ className, ...props }) {
3976
- return /* @__PURE__ */ jsx30(
4282
+ return /* @__PURE__ */ jsx31(
3977
4283
  "div",
3978
4284
  {
3979
4285
  "data-slot": "field-label",
3980
- className: cn(
4286
+ className: cn30(
3981
4287
  "flex w-fit items-center gap-2 text-sm font-medium group-data-[disabled=true]/field:opacity-50",
3982
4288
  className
3983
4289
  ),
@@ -3986,11 +4292,11 @@ function FieldTitle({ className, ...props }) {
3986
4292
  );
3987
4293
  }
3988
4294
  function FieldDescription({ className, ...props }) {
3989
- return /* @__PURE__ */ jsx30(
4295
+ return /* @__PURE__ */ jsx31(
3990
4296
  "p",
3991
4297
  {
3992
4298
  "data-slot": "field-description",
3993
- className: cn(
4299
+ className: cn30(
3994
4300
  "text-left text-[10px] leading-normal font-normal text-muted-foreground group-has-data-horizontal/field:text-balance [[data-variant=legend]+&]:-mt-1.5",
3995
4301
  "last:mt-0 nth-last-2:-mt-1",
3996
4302
  "[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary",
@@ -4010,14 +4316,14 @@ function FieldSeparator({
4010
4316
  {
4011
4317
  "data-slot": "field-separator",
4012
4318
  "data-content": !!children,
4013
- className: cn(
4319
+ className: cn30(
4014
4320
  "relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2",
4015
4321
  className
4016
4322
  ),
4017
4323
  ...props,
4018
4324
  children: [
4019
- /* @__PURE__ */ jsx30(Separator, { className: "absolute inset-0 top-1/2" }),
4020
- children && /* @__PURE__ */ jsx30(
4325
+ /* @__PURE__ */ jsx31(Separator, { className: "absolute inset-0 top-1/2" }),
4326
+ children && /* @__PURE__ */ jsx31(
4021
4327
  "span",
4022
4328
  {
4023
4329
  className: "relative mx-auto block w-fit px-2 text-muted-foreground",
@@ -4048,19 +4354,19 @@ function FieldError({
4048
4354
  if (uniqueErrors?.length == 1) {
4049
4355
  return uniqueErrors[0]?.message;
4050
4356
  }
4051
- return /* @__PURE__ */ jsx30("ul", { className: "ml-4 flex list-disc flex-col gap-1", children: uniqueErrors.map(
4052
- (error, index) => error?.message && /* @__PURE__ */ jsx30("li", { children: error.message }, index)
4357
+ return /* @__PURE__ */ jsx31("ul", { className: "ml-4 flex list-disc flex-col gap-1", children: uniqueErrors.map(
4358
+ (error, index) => error?.message && /* @__PURE__ */ jsx31("li", { children: error.message }, index)
4053
4359
  ) });
4054
4360
  }, [children, errors]);
4055
4361
  if (!content) {
4056
4362
  return null;
4057
4363
  }
4058
- return /* @__PURE__ */ jsx30(
4364
+ return /* @__PURE__ */ jsx31(
4059
4365
  "div",
4060
4366
  {
4061
4367
  role: "alert",
4062
4368
  "data-slot": "field-error",
4063
- className: cn("text-sm font-normal text-destructive", className),
4369
+ className: cn30("text-sm font-normal text-destructive", className),
4064
4370
  ...props,
4065
4371
  children: content
4066
4372
  }
@@ -4069,8 +4375,9 @@ function FieldError({
4069
4375
 
4070
4376
  // src/ui/image.tsx
4071
4377
  import NextImage from "next/image";
4072
- import { useCallback as useCallback2, useState as useState5 } from "react";
4073
- import { jsx as jsx31, jsxs as jsxs17 } from "react/jsx-runtime";
4378
+ import { useCallback as useCallback3, useState as useState5 } from "react";
4379
+ import { cn as cn31 } from "cn";
4380
+ import { jsx as jsx32, jsxs as jsxs17 } from "react/jsx-runtime";
4074
4381
  function srcValue(src) {
4075
4382
  if (!src) return null;
4076
4383
  if (typeof src === "string") return src;
@@ -4090,7 +4397,7 @@ function Image({
4090
4397
  onLoad,
4091
4398
  onError,
4092
4399
  children,
4093
- fallback = /* @__PURE__ */ jsx31(JellyMini, { mood: "curious", className: "size-full p-4" }),
4400
+ fallback = /* @__PURE__ */ jsx32(JellyMini, { mood: "curious", className: "size-full p-4" }),
4094
4401
  ...props
4095
4402
  }) {
4096
4403
  const currentSrc = srcValue(src);
@@ -4101,18 +4408,18 @@ function Image({
4101
4408
  const loaded = hasSource && loadedSrc === currentSrc && !failed;
4102
4409
  const shouldPreload = preload ?? loading === "eager";
4103
4410
  const imageLoading = shouldPreload ? "eager" : loading;
4104
- const markLoaded = useCallback2(() => {
4411
+ const markLoaded = useCallback3(() => {
4105
4412
  if (!currentSrc) return;
4106
4413
  setFailedSrc(null);
4107
4414
  setLoadedSrc(currentSrc);
4108
4415
  }, [currentSrc]);
4109
- const markFailed = useCallback2(() => {
4416
+ const markFailed = useCallback3(() => {
4110
4417
  if (!currentSrc) return;
4111
4418
  setFailedSrc(currentSrc);
4112
4419
  }, [currentSrc]);
4113
- return /* @__PURE__ */ jsxs17("section", { className: cn("relative block overflow-hidden", wrapper), children: [
4114
- showSkeleton && !loaded && !failed && hasSource && /* @__PURE__ */ jsx31(Skeleton, { className: "absolute inset-0 size-full" }),
4115
- hasSource && !failed ? /* @__PURE__ */ jsx31(
4420
+ return /* @__PURE__ */ jsxs17("section", { className: cn31("relative block overflow-hidden", wrapper), children: [
4421
+ showSkeleton && !loaded && !failed && hasSource && /* @__PURE__ */ jsx32(Skeleton, { className: "absolute inset-0 size-full" }),
4422
+ hasSource && !failed ? /* @__PURE__ */ jsx32(
4116
4423
  NextImage,
4117
4424
  {
4118
4425
  ...props,
@@ -4122,7 +4429,7 @@ function Image({
4122
4429
  loading: imageLoading,
4123
4430
  preload: shouldPreload,
4124
4431
  fetchPriority: fetchPriority ?? (imageLoading === "eager" ? "high" : void 0),
4125
- className: cn(
4432
+ className: cn31(
4126
4433
  "transition-opacity duration-200",
4127
4434
  loaded ? "opacity-100" : "opacity-0",
4128
4435
  className
@@ -4142,35 +4449,36 @@ function Image({
4142
4449
  }
4143
4450
 
4144
4451
  // src/ui/input-otp.tsx
4145
- import * as React9 from "react";
4452
+ import * as React11 from "react";
4146
4453
  import { OTPInput, OTPInputContext } from "input-otp";
4454
+ import { cn as cn32 } from "cn";
4147
4455
  import { MinusIcon } from "lucide-react";
4148
- import { jsx as jsx32, jsxs as jsxs18 } from "react/jsx-runtime";
4456
+ import { jsx as jsx33, jsxs as jsxs18 } from "react/jsx-runtime";
4149
4457
  function InputOTP({
4150
4458
  className,
4151
4459
  containerClassName,
4152
4460
  ...props
4153
4461
  }) {
4154
- return /* @__PURE__ */ jsx32(
4462
+ return /* @__PURE__ */ jsx33(
4155
4463
  OTPInput,
4156
4464
  {
4157
4465
  "data-slot": "input-otp",
4158
- containerClassName: cn(
4466
+ containerClassName: cn32(
4159
4467
  "cn-input-otp flex items-center has-disabled:opacity-50",
4160
4468
  containerClassName
4161
4469
  ),
4162
4470
  spellCheck: false,
4163
- className: cn("disabled:cursor-not-allowed", className),
4471
+ className: cn32("disabled:cursor-not-allowed", className),
4164
4472
  ...props
4165
4473
  }
4166
4474
  );
4167
4475
  }
4168
4476
  function InputOTPGroup({ className, ...props }) {
4169
- return /* @__PURE__ */ jsx32(
4477
+ return /* @__PURE__ */ jsx33(
4170
4478
  "div",
4171
4479
  {
4172
4480
  "data-slot": "input-otp-group",
4173
- className: cn(
4481
+ className: cn32(
4174
4482
  "flex items-center rounded-lg has-aria-invalid:border-destructive has-aria-invalid:ring-3 has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:ring-destructive/40",
4175
4483
  className
4176
4484
  ),
@@ -4183,34 +4491,34 @@ function InputOTPSlot({
4183
4491
  className,
4184
4492
  ...props
4185
4493
  }) {
4186
- const inputOTPContext = React9.useContext(OTPInputContext);
4494
+ const inputOTPContext = React11.useContext(OTPInputContext);
4187
4495
  const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {};
4188
4496
  return /* @__PURE__ */ jsxs18(
4189
4497
  "div",
4190
4498
  {
4191
4499
  "data-slot": "input-otp-slot",
4192
4500
  "data-active": isActive,
4193
- className: cn(
4501
+ className: cn32(
4194
4502
  "relative flex size-8 items-center justify-center border-y border-r border-input text-sm transition-[background-color,border-color,box-shadow,opacity] duration-150 ease-out outline-none motion-reduce:transition-none first:rounded-l-lg first:border-l last:rounded-r-lg aria-invalid:border-destructive data-[active=true]:z-10 data-[active=true]:border-ring data-[active=true]:ring-3 data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:border-destructive data-[active=true]:aria-invalid:ring-destructive/20 dark:bg-input/30 dark:data-[active=true]:aria-invalid:ring-destructive/40",
4195
4503
  className
4196
4504
  ),
4197
4505
  ...props,
4198
4506
  children: [
4199
4507
  char,
4200
- hasFakeCaret && /* @__PURE__ */ jsx32("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ jsx32("div", { className: "h-4 w-px animate-caret-blink bg-foreground duration-1000" }) })
4508
+ hasFakeCaret && /* @__PURE__ */ jsx33("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ jsx33("div", { className: "h-4 w-px animate-caret-blink bg-foreground duration-1000" }) })
4201
4509
  ]
4202
4510
  }
4203
4511
  );
4204
4512
  }
4205
4513
  function InputOTPSeparator({ ...props }) {
4206
- return /* @__PURE__ */ jsx32(
4514
+ return /* @__PURE__ */ jsx33(
4207
4515
  "div",
4208
4516
  {
4209
4517
  "data-slot": "input-otp-separator",
4210
4518
  className: "flex items-center [&_svg:not([class*='size-'])]:size-4",
4211
4519
  role: "separator",
4212
4520
  ...props,
4213
- children: /* @__PURE__ */ jsx32(MinusIcon, {})
4521
+ children: /* @__PURE__ */ jsx33(MinusIcon, {})
4214
4522
  }
4215
4523
  );
4216
4524
  }
@@ -4219,14 +4527,15 @@ function InputOTPSeparator({ ...props }) {
4219
4527
  import { mergeProps as mergeProps4 } from "@base-ui/react/merge-props";
4220
4528
  import { useRender as useRender4 } from "@base-ui/react/use-render";
4221
4529
  import { cva as cva8 } from "class-variance-authority";
4222
- import { jsx as jsx33 } from "react/jsx-runtime";
4530
+ import { cn as cn33 } from "cn";
4531
+ import { jsx as jsx34 } from "react/jsx-runtime";
4223
4532
  function ItemGroup({ className, ...props }) {
4224
- return /* @__PURE__ */ jsx33(
4533
+ return /* @__PURE__ */ jsx34(
4225
4534
  "div",
4226
4535
  {
4227
4536
  role: "list",
4228
4537
  "data-slot": "item-group",
4229
- className: cn(
4538
+ className: cn33(
4230
4539
  "group/item-group flex w-full flex-col gap-4 has-data-[size=sm]:gap-2.5 has-data-[size=xs]:gap-2",
4231
4540
  className
4232
4541
  ),
@@ -4238,12 +4547,12 @@ function ItemSeparator({
4238
4547
  className,
4239
4548
  ...props
4240
4549
  }) {
4241
- return /* @__PURE__ */ jsx33(
4550
+ return /* @__PURE__ */ jsx34(
4242
4551
  Separator,
4243
4552
  {
4244
4553
  "data-slot": "item-separator",
4245
4554
  orientation: "horizontal",
4246
- className: cn("my-2", className),
4555
+ className: cn33("my-2", className),
4247
4556
  ...props
4248
4557
  }
4249
4558
  );
@@ -4280,7 +4589,7 @@ function Item({
4280
4589
  defaultTagName: "div",
4281
4590
  props: mergeProps4(
4282
4591
  {
4283
- className: cn(itemVariants({ variant, size, className }))
4592
+ className: cn33(itemVariants({ variant, size, className }))
4284
4593
  },
4285
4594
  props
4286
4595
  ),
@@ -4312,22 +4621,22 @@ function ItemMedia({
4312
4621
  variant = "default",
4313
4622
  ...props
4314
4623
  }) {
4315
- return /* @__PURE__ */ jsx33(
4624
+ return /* @__PURE__ */ jsx34(
4316
4625
  "div",
4317
4626
  {
4318
4627
  "data-slot": "item-media",
4319
4628
  "data-variant": variant,
4320
- className: cn(itemMediaVariants({ variant, className })),
4629
+ className: cn33(itemMediaVariants({ variant, className })),
4321
4630
  ...props
4322
4631
  }
4323
4632
  );
4324
4633
  }
4325
4634
  function ItemContent({ className, ...props }) {
4326
- return /* @__PURE__ */ jsx33(
4635
+ return /* @__PURE__ */ jsx34(
4327
4636
  "div",
4328
4637
  {
4329
4638
  "data-slot": "item-content",
4330
- className: cn(
4639
+ className: cn33(
4331
4640
  "flex flex-1 flex-col gap-1 group-data-[size=xs]/item:gap-0 [&+[data-slot=item-content]]:flex-none",
4332
4641
  className
4333
4642
  ),
@@ -4336,11 +4645,11 @@ function ItemContent({ className, ...props }) {
4336
4645
  );
4337
4646
  }
4338
4647
  function ItemTitle({ className, ...props }) {
4339
- return /* @__PURE__ */ jsx33(
4648
+ return /* @__PURE__ */ jsx34(
4340
4649
  "div",
4341
4650
  {
4342
4651
  "data-slot": "item-title",
4343
- className: cn(
4652
+ className: cn33(
4344
4653
  "line-clamp-1 flex w-fit items-center gap-2 text-sm leading-snug font-medium underline-offset-4",
4345
4654
  className
4346
4655
  ),
@@ -4349,11 +4658,11 @@ function ItemTitle({ className, ...props }) {
4349
4658
  );
4350
4659
  }
4351
4660
  function ItemDescription({ className, ...props }) {
4352
- return /* @__PURE__ */ jsx33(
4661
+ return /* @__PURE__ */ jsx34(
4353
4662
  "p",
4354
4663
  {
4355
4664
  "data-slot": "item-description",
4356
- className: cn(
4665
+ className: cn33(
4357
4666
  "line-clamp-2 text-left text-sm leading-normal font-normal text-muted-foreground group-data-[size=xs]/item:text-xs [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary",
4358
4667
  className
4359
4668
  ),
@@ -4362,21 +4671,21 @@ function ItemDescription({ className, ...props }) {
4362
4671
  );
4363
4672
  }
4364
4673
  function ItemActions({ className, ...props }) {
4365
- return /* @__PURE__ */ jsx33(
4674
+ return /* @__PURE__ */ jsx34(
4366
4675
  "div",
4367
4676
  {
4368
4677
  "data-slot": "item-actions",
4369
- className: cn("flex items-center gap-2", className),
4678
+ className: cn33("flex items-center gap-2", className),
4370
4679
  ...props
4371
4680
  }
4372
4681
  );
4373
4682
  }
4374
4683
  function ItemHeader({ className, ...props }) {
4375
- return /* @__PURE__ */ jsx33(
4684
+ return /* @__PURE__ */ jsx34(
4376
4685
  "div",
4377
4686
  {
4378
4687
  "data-slot": "item-header",
4379
- className: cn(
4688
+ className: cn33(
4380
4689
  "flex basis-full items-center justify-between gap-2",
4381
4690
  className
4382
4691
  ),
@@ -4385,11 +4694,11 @@ function ItemHeader({ className, ...props }) {
4385
4694
  );
4386
4695
  }
4387
4696
  function ItemFooter({ className, ...props }) {
4388
- return /* @__PURE__ */ jsx33(
4697
+ return /* @__PURE__ */ jsx34(
4389
4698
  "div",
4390
4699
  {
4391
4700
  "data-slot": "item-footer",
4392
- className: cn(
4701
+ className: cn33(
4393
4702
  "flex basis-full items-center justify-between gap-2",
4394
4703
  className
4395
4704
  ),
@@ -4429,7 +4738,7 @@ import {
4429
4738
  useQueryStates
4430
4739
  } from "nuqs";
4431
4740
  import { NuqsAdapter } from "nuqs/adapters/next/app";
4432
- import * as React10 from "react";
4741
+ import * as React12 from "react";
4433
4742
  var SEARCH_DELAY = 500;
4434
4743
  var PRODUCT_SEARCH_DELAY = 800;
4435
4744
  function isSearchPath(pathname) {
@@ -4451,7 +4760,7 @@ function useSearchParams() {
4451
4760
  const pathname = usePathname();
4452
4761
  const router = useRouter2();
4453
4762
  const nativeSearchParams = useNextSearchParams();
4454
- const [isPending, startTransition] = React10.useTransition();
4763
+ const [isPending, startTransition] = React12.useTransition();
4455
4764
  const [params, setParams] = useQueryStates(searchParams, {
4456
4765
  urlKeys: searchParamKeys,
4457
4766
  history: "replace",
@@ -4459,18 +4768,18 @@ function useSearchParams() {
4459
4768
  scroll: false,
4460
4769
  startTransition
4461
4770
  });
4462
- const productQueryRef = React10.useRef(params.query);
4463
- const productNavigationQueuedRef = React10.useRef(false);
4771
+ const productQueryRef = React12.useRef(params.query);
4772
+ const productNavigationQueuedRef = React12.useRef(false);
4464
4773
  const onSearchPath = isSearchPath(pathname);
4465
4774
  const cart = hasFlagSearchParam(nativeSearchParams, "cart");
4466
4775
  const notification = hasFlagSearchParam(nativeSearchParams, "notification");
4467
- const updateParams = React10.useCallback(
4776
+ const updateParams = React12.useCallback(
4468
4777
  (values, options) => {
4469
4778
  void setParams(values, options);
4470
4779
  },
4471
4780
  [setParams]
4472
4781
  );
4473
- const setQuery = React10.useCallback(
4782
+ const setQuery = React12.useCallback(
4474
4783
  (value) => {
4475
4784
  const update = setParams(
4476
4785
  { query: value, page: 1 },
@@ -4497,13 +4806,13 @@ function useSearchParams() {
4497
4806
  },
4498
4807
  [onSearchPath, router, setParams]
4499
4808
  );
4500
- const commitQuery = React10.useCallback(() => {
4809
+ const commitQuery = React12.useCallback(() => {
4501
4810
  const query = params.query.trim();
4502
4811
  if (!query || onSearchPath) return;
4503
4812
  pendingSearchFocus = true;
4504
4813
  router.push(searchHref(query), { scroll: true });
4505
4814
  }, [onSearchPath, params.query, router]);
4506
- const setCategory = React10.useCallback(
4815
+ const setCategory = React12.useCallback(
4507
4816
  (value) => {
4508
4817
  updateParams(
4509
4818
  { category: value, page: 1 },
@@ -4512,7 +4821,7 @@ function useSearchParams() {
4512
4821
  },
4513
4822
  [updateParams]
4514
4823
  );
4515
- const setProductStatus = React10.useCallback(
4824
+ const setProductStatus = React12.useCallback(
4516
4825
  (value) => {
4517
4826
  updateParams(
4518
4827
  { productStatus: value, page: 1 },
@@ -4521,7 +4830,7 @@ function useSearchParams() {
4521
4830
  },
4522
4831
  [updateParams]
4523
4832
  );
4524
- const setUser = React10.useCallback(
4833
+ const setUser = React12.useCallback(
4525
4834
  (value) => {
4526
4835
  updateParams(
4527
4836
  { user: value },
@@ -4535,7 +4844,7 @@ function useSearchParams() {
4535
4844
  },
4536
4845
  [updateParams]
4537
4846
  );
4538
- const setPage = React10.useCallback(
4847
+ const setPage = React12.useCallback(
4539
4848
  (value) => {
4540
4849
  updateParams(
4541
4850
  { page: value },
@@ -4544,7 +4853,7 @@ function useSearchParams() {
4544
4853
  },
4545
4854
  [updateParams]
4546
4855
  );
4547
- const setUserTransaction = React10.useCallback(
4856
+ const setUserTransaction = React12.useCallback(
4548
4857
  (value) => {
4549
4858
  updateParams(
4550
4859
  { user: value, transaction: "", transactionPage: 1 },
@@ -4553,7 +4862,7 @@ function useSearchParams() {
4553
4862
  },
4554
4863
  [updateParams]
4555
4864
  );
4556
- const setTransactionDetail = React10.useCallback(
4865
+ const setTransactionDetail = React12.useCallback(
4557
4866
  (value) => {
4558
4867
  updateParams(
4559
4868
  { transaction: value },
@@ -4562,19 +4871,19 @@ function useSearchParams() {
4562
4871
  },
4563
4872
  [updateParams]
4564
4873
  );
4565
- const clearTransactionDetail = React10.useCallback(() => {
4874
+ const clearTransactionDetail = React12.useCallback(() => {
4566
4875
  updateParams(
4567
4876
  { transaction: "" },
4568
4877
  { history: "replace", shallow: false, scroll: false }
4569
4878
  );
4570
4879
  }, [updateParams]);
4571
- const clearUserTransaction = React10.useCallback(() => {
4880
+ const clearUserTransaction = React12.useCallback(() => {
4572
4881
  updateParams(
4573
4882
  { user: "", transaction: "", transactionPage: 1 },
4574
4883
  { history: "replace", shallow: false, scroll: false }
4575
4884
  );
4576
4885
  }, [updateParams]);
4577
- const clearAll = React10.useCallback(() => {
4886
+ const clearAll = React12.useCallback(() => {
4578
4887
  updateParams(
4579
4888
  {
4580
4889
  query: "",
@@ -4592,7 +4901,7 @@ function useSearchParams() {
4592
4901
  }
4593
4902
  );
4594
4903
  }, [updateParams]);
4595
- const setCart = React10.useCallback(
4904
+ const setCart = React12.useCallback(
4596
4905
  (value) => {
4597
4906
  window.history.replaceState(
4598
4907
  null,
@@ -4602,10 +4911,10 @@ function useSearchParams() {
4602
4911
  },
4603
4912
  [nativeSearchParams, pathname]
4604
4913
  );
4605
- const toggleCart = React10.useCallback(() => {
4914
+ const toggleCart = React12.useCallback(() => {
4606
4915
  setCart(!cart);
4607
4916
  }, [cart, setCart]);
4608
- const setNotification = React10.useCallback(
4917
+ const setNotification = React12.useCallback(
4609
4918
  (value) => {
4610
4919
  window.history.replaceState(
4611
4920
  null,
@@ -4663,19 +4972,20 @@ import {
4663
4972
  BlobSpeech,
4664
4973
  JellyBlobMascot
4665
4974
  } from "feral-blob";
4666
- import * as React11 from "react";
4975
+ import * as React13 from "react";
4976
+ import { cn as cn34 } from "cn";
4667
4977
  import {
4668
4978
  BlobSpeech as BlobSpeech2,
4669
4979
  JellyBlobMascot as JellyBlobMascot2,
4670
4980
  JellyBlobMascotDemo
4671
4981
  } from "feral-blob";
4672
- import { jsx as jsx34, jsxs as jsxs19 } from "react/jsx-runtime";
4982
+ import { jsx as jsx35, jsxs as jsxs19 } from "react/jsx-runtime";
4673
4983
  function JellyBlob({ ...props }) {
4674
- return /* @__PURE__ */ jsx34("span", { className: "inline-block", children: /* @__PURE__ */ jsx34(
4984
+ return /* @__PURE__ */ jsx35("span", { className: "inline-block", children: /* @__PURE__ */ jsx35(
4675
4985
  JellyBlobMascot,
4676
4986
  {
4677
4987
  ...props,
4678
- className: cn("h-auto w-full", props.className)
4988
+ className: cn34("h-auto w-full", props.className)
4679
4989
  }
4680
4990
  ) });
4681
4991
  }
@@ -4701,15 +5011,15 @@ function JellyMini({
4701
5011
  ...props
4702
5012
  }) {
4703
5013
  const { mounted } = useMounted();
4704
- return /* @__PURE__ */ jsx34(
5014
+ return /* @__PURE__ */ jsx35(
4705
5015
  "span",
4706
5016
  {
4707
5017
  "aria-hidden": "true",
4708
- className: cn(
5018
+ className: cn34(
4709
5019
  "inline-flex size-5 shrink-0 items-center justify-center select-none",
4710
5020
  className
4711
5021
  ),
4712
- children: mounted ? /* @__PURE__ */ jsx34(
5022
+ children: mounted ? /* @__PURE__ */ jsx35(
4713
5023
  JellyBlobMascot,
4714
5024
  {
4715
5025
  ...props,
@@ -4721,10 +5031,10 @@ function JellyMini({
4721
5031
  }
4722
5032
  );
4723
5033
  }
4724
- var JellyMascotContext = React11.createContext(null);
5034
+ var JellyMascotContext = React13.createContext(null);
4725
5035
  function useJellyMood() {
4726
- const state = React11.useContext(JellyMascotContext);
4727
- return React11.useCallback(
5036
+ const state = React13.useContext(JellyMascotContext);
5037
+ return React13.useCallback(
4728
5038
  (mood) => {
4729
5039
  if (!mood || !state) return {};
4730
5040
  return {
@@ -4751,14 +5061,14 @@ function JellyAction({
4751
5061
  ...props
4752
5062
  }) {
4753
5063
  const preview = useJellyMood();
4754
- return /* @__PURE__ */ jsx34(Button, { ...props, ...withPreviewHandlers(preview, { ...props, mood }) });
5064
+ return /* @__PURE__ */ jsx35(Button, { ...props, ...withPreviewHandlers(preview, { ...props, mood }) });
4755
5065
  }
4756
5066
  function JellyLink({
4757
5067
  mood,
4758
5068
  ...props
4759
5069
  }) {
4760
5070
  const preview = useJellyMood();
4761
- return /* @__PURE__ */ jsx34("a", { ...props, ...withPreviewHandlers(preview, { ...props, mood }) });
5071
+ return /* @__PURE__ */ jsx35("a", { ...props, ...withPreviewHandlers(preview, { ...props, mood }) });
4762
5072
  }
4763
5073
  function JellyMascotProvider({
4764
5074
  mood = "neutral",
@@ -4767,7 +5077,7 @@ function JellyMascotProvider({
4767
5077
  ...blobProps
4768
5078
  }) {
4769
5079
  const { mounted } = useMounted();
4770
- const [previewMood, setPreviewMood] = React11.useState(
5080
+ const [previewMood, setPreviewMood] = React13.useState(
4771
5081
  null
4772
5082
  );
4773
5083
  const activeMood = previewMood ?? mood;
@@ -4780,7 +5090,7 @@ function JellyMascotProvider({
4780
5090
  blobProps,
4781
5091
  setPreview: setPreviewMood
4782
5092
  };
4783
- return /* @__PURE__ */ jsx34(JellyMascotContext.Provider, { value, children });
5093
+ return /* @__PURE__ */ jsx35(JellyMascotContext.Provider, { value, children });
4784
5094
  }
4785
5095
  var SIZE_WRAPPER = {
4786
5096
  sm: "w-20",
@@ -4792,26 +5102,26 @@ function JellyMascotFace({
4792
5102
  size = "md",
4793
5103
  className
4794
5104
  }) {
4795
- const mascot = React11.useContext(JellyMascotContext);
5105
+ const mascot = React13.useContext(JellyMascotContext);
4796
5106
  if (!mascot) return null;
4797
5107
  return /* @__PURE__ */ jsxs19(
4798
5108
  "div",
4799
5109
  {
4800
5110
  "aria-hidden": "true",
4801
- className: cn(
5111
+ className: cn34(
4802
5112
  "flex flex-col items-center select-none",
4803
5113
  SIZE_WRAPPER[size],
4804
5114
  className
4805
5115
  ),
4806
5116
  children: [
4807
- mascot.speech ? /* @__PURE__ */ jsx34(
5117
+ mascot.speech ? /* @__PURE__ */ jsx35(
4808
5118
  BlobSpeech,
4809
5119
  {
4810
5120
  mood: mascot.mood,
4811
5121
  messages: { [mascot.mood]: mascot.speech }
4812
5122
  }
4813
5123
  ) : null,
4814
- mascot.mounted ? /* @__PURE__ */ jsx34(
5124
+ mascot.mounted ? /* @__PURE__ */ jsx35(
4815
5125
  JellyBlobMascot,
4816
5126
  {
4817
5127
  ...mascot.blobProps,
@@ -4830,15 +5140,15 @@ function JellyMascot({
4830
5140
  className,
4831
5141
  ...config
4832
5142
  }) {
4833
- const existing = React11.useContext(JellyMascotContext);
4834
- if (existing) return /* @__PURE__ */ jsx34(JellyMascotFace, { size, className });
4835
- return /* @__PURE__ */ jsx34(JellyMascotProvider, { ...config, children: /* @__PURE__ */ jsx34(JellyMascotFace, { size, className }) });
5143
+ const existing = React13.useContext(JellyMascotContext);
5144
+ if (existing) return /* @__PURE__ */ jsx35(JellyMascotFace, { size, className });
5145
+ return /* @__PURE__ */ jsx35(JellyMascotProvider, { ...config, children: /* @__PURE__ */ jsx35(JellyMascotFace, { size, className }) });
4836
5146
  }
4837
5147
  function JellyGroup({
4838
5148
  children,
4839
5149
  ...config
4840
5150
  }) {
4841
- return /* @__PURE__ */ jsx34(JellyMascotProvider, { ...config, children });
5151
+ return /* @__PURE__ */ jsx35(JellyMascotProvider, { ...config, children });
4842
5152
  }
4843
5153
  function JellyEmpty({
4844
5154
  title,
@@ -4848,24 +5158,25 @@ function JellyEmpty({
4848
5158
  className,
4849
5159
  ...config
4850
5160
  }) {
4851
- return /* @__PURE__ */ jsx34(JellyMascotProvider, { ...config, children: /* @__PURE__ */ jsxs19(Empty, { className: cn("gap-4", className), children: [
5161
+ return /* @__PURE__ */ jsx35(JellyMascotProvider, { ...config, children: /* @__PURE__ */ jsxs19(Empty, { className: cn34("gap-4", className), children: [
4852
5162
  /* @__PURE__ */ jsxs19(EmptyHeader, { className: "gap-2", children: [
4853
- /* @__PURE__ */ jsx34(JellyMascotFace, { size }),
4854
- title ? /* @__PURE__ */ jsx34(EmptyTitle, { className: "text-base font-semibold sm:text-lg", children: title }) : null,
4855
- description ? /* @__PURE__ */ jsx34(EmptyDescription, { className: "max-w-sm", children: description }) : null
5163
+ /* @__PURE__ */ jsx35(JellyMascotFace, { size }),
5164
+ title ? /* @__PURE__ */ jsx35(EmptyTitle, { className: "text-base font-semibold sm:text-lg", children: title }) : null,
5165
+ description ? /* @__PURE__ */ jsx35(EmptyDescription, { className: "max-w-sm", children: description }) : null
4856
5166
  ] }),
4857
- actions ? /* @__PURE__ */ jsx34(EmptyContent, { children: actions }) : null
5167
+ actions ? /* @__PURE__ */ jsx35(EmptyContent, { children: actions }) : null
4858
5168
  ] }) });
4859
5169
  }
4860
5170
 
4861
5171
  // src/ui/kbd.tsx
4862
- import { jsx as jsx35 } from "react/jsx-runtime";
5172
+ import { cn as cn35 } from "cn";
5173
+ import { jsx as jsx36 } from "react/jsx-runtime";
4863
5174
  function Kbd({ className, ...props }) {
4864
- return /* @__PURE__ */ jsx35(
5175
+ return /* @__PURE__ */ jsx36(
4865
5176
  "kbd",
4866
5177
  {
4867
5178
  "data-slot": "kbd",
4868
- className: cn(
5179
+ className: cn35(
4869
5180
  "pointer-events-none inline-flex h-5 w-fit min-w-5 items-center justify-center gap-1 rounded-sm bg-muted px-1 text-xs font-medium text-muted-foreground select-none in-data-[slot=tooltip-content]:bg-background/20 in-data-[slot=tooltip-content]:text-background dark:in-data-[slot=tooltip-content]:bg-background/10 [&_svg:not([class*='size-'])]:size-3",
4870
5181
  className
4871
5182
  ),
@@ -4874,24 +5185,25 @@ function Kbd({ className, ...props }) {
4874
5185
  );
4875
5186
  }
4876
5187
  function KbdGroup({ className, ...props }) {
4877
- return /* @__PURE__ */ jsx35(
5188
+ return /* @__PURE__ */ jsx36(
4878
5189
  "kbd",
4879
5190
  {
4880
5191
  "data-slot": "kbd-group",
4881
- className: cn("inline-flex items-center gap-1", className),
5192
+ className: cn35("inline-flex items-center gap-1", className),
4882
5193
  ...props
4883
5194
  }
4884
5195
  );
4885
5196
  }
4886
5197
 
4887
5198
  // src/ui/message.tsx
4888
- import { jsx as jsx36 } from "react/jsx-runtime";
5199
+ import { cn as cn36 } from "cn";
5200
+ import { jsx as jsx37 } from "react/jsx-runtime";
4889
5201
  function MessageGroup({ className, ...props }) {
4890
- return /* @__PURE__ */ jsx36(
5202
+ return /* @__PURE__ */ jsx37(
4891
5203
  "div",
4892
5204
  {
4893
5205
  "data-slot": "message-group",
4894
- className: cn("flex min-w-0 flex-col gap-2", className),
5206
+ className: cn36("flex min-w-0 flex-col gap-2", className),
4895
5207
  ...props
4896
5208
  }
4897
5209
  );
@@ -4901,12 +5213,12 @@ function Message({
4901
5213
  align = "start",
4902
5214
  ...props
4903
5215
  }) {
4904
- return /* @__PURE__ */ jsx36(
5216
+ return /* @__PURE__ */ jsx37(
4905
5217
  "div",
4906
5218
  {
4907
5219
  "data-slot": "message",
4908
5220
  "data-align": align,
4909
- className: cn(
5221
+ className: cn36(
4910
5222
  "group/message relative flex w-full min-w-0 gap-2 text-sm data-[align=end]:flex-row-reverse",
4911
5223
  className
4912
5224
  ),
@@ -4915,11 +5227,11 @@ function Message({
4915
5227
  );
4916
5228
  }
4917
5229
  function MessageAvatar({ className, ...props }) {
4918
- return /* @__PURE__ */ jsx36(
5230
+ return /* @__PURE__ */ jsx37(
4919
5231
  "div",
4920
5232
  {
4921
5233
  "data-slot": "message-avatar",
4922
- className: cn(
5234
+ className: cn36(
4923
5235
  "flex w-fit min-w-8 shrink-0 items-center justify-center self-end overflow-hidden rounded-full bg-muted group-has-data-[slot=message-footer]/message:-translate-y-8",
4924
5236
  className
4925
5237
  ),
@@ -4928,11 +5240,11 @@ function MessageAvatar({ className, ...props }) {
4928
5240
  );
4929
5241
  }
4930
5242
  function MessageContent({ className, ...props }) {
4931
- return /* @__PURE__ */ jsx36(
5243
+ return /* @__PURE__ */ jsx37(
4932
5244
  "div",
4933
5245
  {
4934
5246
  "data-slot": "message-content",
4935
- className: cn(
5247
+ className: cn36(
4936
5248
  "flex w-full min-w-0 flex-col gap-2.5 wrap-break-word group-data-[align=end]/message:*:data-slot:self-end",
4937
5249
  className
4938
5250
  ),
@@ -4941,11 +5253,11 @@ function MessageContent({ className, ...props }) {
4941
5253
  );
4942
5254
  }
4943
5255
  function MessageHeader({ className, ...props }) {
4944
- return /* @__PURE__ */ jsx36(
5256
+ return /* @__PURE__ */ jsx37(
4945
5257
  "div",
4946
5258
  {
4947
5259
  "data-slot": "message-header",
4948
- className: cn(
5260
+ className: cn36(
4949
5261
  "flex max-w-full min-w-0 items-center px-3 text-xs font-medium text-muted-foreground group-has-data-[variant=ghost]/message:px-0",
4950
5262
  className
4951
5263
  ),
@@ -4954,11 +5266,11 @@ function MessageHeader({ className, ...props }) {
4954
5266
  );
4955
5267
  }
4956
5268
  function MessageFooter({ className, ...props }) {
4957
- return /* @__PURE__ */ jsx36(
5269
+ return /* @__PURE__ */ jsx37(
4958
5270
  "div",
4959
5271
  {
4960
5272
  "data-slot": "message-footer",
4961
- className: cn(
5273
+ className: cn36(
4962
5274
  "flex max-w-full min-w-0 items-center px-3 text-xs font-medium text-muted-foreground group-has-data-[variant=ghost]/message:px-0 group-data-[align=end]/message:justify-end",
4963
5275
  className
4964
5276
  ),
@@ -4974,20 +5286,21 @@ import {
4974
5286
  useMessageScrollerScrollable,
4975
5287
  useMessageScrollerVisibility
4976
5288
  } from "@shadcn/react/message-scroller";
5289
+ import { cn as cn37 } from "cn";
4977
5290
  import { ArrowDownIcon } from "lucide-react";
4978
- import { Fragment as Fragment2, jsx as jsx37, jsxs as jsxs20 } from "react/jsx-runtime";
5291
+ import { Fragment as Fragment2, jsx as jsx38, jsxs as jsxs20 } from "react/jsx-runtime";
4979
5292
  function MessageScrollerProvider(props) {
4980
- return /* @__PURE__ */ jsx37(MessageScrollerPrimitive.Provider, { ...props });
5293
+ return /* @__PURE__ */ jsx38(MessageScrollerPrimitive.Provider, { ...props });
4981
5294
  }
4982
5295
  function MessageScroller({
4983
5296
  className,
4984
5297
  ...props
4985
5298
  }) {
4986
- return /* @__PURE__ */ jsx37(
5299
+ return /* @__PURE__ */ jsx38(
4987
5300
  MessageScrollerPrimitive.Root,
4988
5301
  {
4989
5302
  "data-slot": "message-scroller",
4990
- className: cn(
5303
+ className: cn37(
4991
5304
  "group/message-scroller relative flex size-full min-h-0 flex-col overflow-hidden",
4992
5305
  className
4993
5306
  ),
@@ -4999,11 +5312,11 @@ function MessageScrollerViewport({
4999
5312
  className,
5000
5313
  ...props
5001
5314
  }) {
5002
- return /* @__PURE__ */ jsx37(
5315
+ return /* @__PURE__ */ jsx38(
5003
5316
  MessageScrollerPrimitive.Viewport,
5004
5317
  {
5005
5318
  "data-slot": "message-scroller-viewport",
5006
- className: cn(
5319
+ className: cn37(
5007
5320
  "size-full min-h-0 min-w-0 scroll-fade scrollbar-thin scrollbar-gutter-stable overflow-y-auto overscroll-contain contain-content data-autoscrolling:scrollbar-thumb-transparent data-autoscrolling:scrollbar-track-transparent",
5008
5321
  className
5009
5322
  ),
@@ -5015,11 +5328,11 @@ function MessageScrollerContent({
5015
5328
  className,
5016
5329
  ...props
5017
5330
  }) {
5018
- return /* @__PURE__ */ jsx37(
5331
+ return /* @__PURE__ */ jsx38(
5019
5332
  MessageScrollerPrimitive.Content,
5020
5333
  {
5021
5334
  "data-slot": "message-scroller-content",
5022
- className: cn("flex h-max min-h-full flex-col gap-6", className),
5335
+ className: cn37("flex h-max min-h-full flex-col gap-6", className),
5023
5336
  ...props
5024
5337
  }
5025
5338
  );
@@ -5029,12 +5342,12 @@ function MessageScrollerItem({
5029
5342
  scrollAnchor = false,
5030
5343
  ...props
5031
5344
  }) {
5032
- return /* @__PURE__ */ jsx37(
5345
+ return /* @__PURE__ */ jsx38(
5033
5346
  MessageScrollerPrimitive.Item,
5034
5347
  {
5035
5348
  "data-slot": "message-scroller-item",
5036
5349
  scrollAnchor,
5037
- className: cn(
5350
+ className: cn37(
5038
5351
  "min-w-0 shrink-0 [contain-intrinsic-size:auto_10rem] [content-visibility:auto]",
5039
5352
  className
5040
5353
  ),
@@ -5051,7 +5364,7 @@ function MessageScrollerButton({
5051
5364
  size = "icon-sm",
5052
5365
  ...props
5053
5366
  }) {
5054
- return /* @__PURE__ */ jsx37(
5367
+ return /* @__PURE__ */ jsx38(
5055
5368
  MessageScrollerPrimitive.Button,
5056
5369
  {
5057
5370
  "data-slot": "message-scroller-button",
@@ -5059,31 +5372,30 @@ function MessageScrollerButton({
5059
5372
  "data-variant": variant,
5060
5373
  "data-size": size,
5061
5374
  direction,
5062
- className: cn(
5375
+ className: cn37(
5063
5376
  "data-[active=true]:ease-out-quint absolute inset-s-1/2 -translate-x-1/2 border-border bg-background text-foreground transition-[translate,scale,opacity] duration-200 hover:bg-muted hover:text-foreground data-[active=false]:pointer-events-none data-[active=false]:scale-95 data-[active=false]:opacity-0 data-[active=false]:duration-400 data-[active=false]:ease-[cubic-bezier(0.7,0,0.84,0)] data-[active=true]:translate-y-0 data-[active=true]:scale-100 data-[active=true]:opacity-100 data-[direction=end]:bottom-4 data-[direction=end]:data-[active=false]:translate-y-full data-[direction=start]:top-4 data-[direction=start]:data-[active=false]:-translate-y-full rtl:translate-x-1/2 data-[direction=start]:[&_svg]:rotate-180",
5064
5377
  className
5065
5378
  ),
5066
- render: render ?? /* @__PURE__ */ jsx37(Button, { variant, size }),
5379
+ render: render ?? /* @__PURE__ */ jsx38(Button, { variant, size }),
5067
5380
  ...props,
5068
5381
  children: children ?? /* @__PURE__ */ jsxs20(Fragment2, { children: [
5069
- /* @__PURE__ */ jsx37(ArrowDownIcon, {}),
5070
- /* @__PURE__ */ jsx37("span", { className: "sr-only", children: direction === "end" ? "Scroll to end" : "Scroll to start" })
5382
+ /* @__PURE__ */ jsx38(ArrowDownIcon, {}),
5383
+ /* @__PURE__ */ jsx38("span", { className: "sr-only", children: direction === "end" ? "Scroll to end" : "Scroll to start" })
5071
5384
  ] })
5072
5385
  }
5073
5386
  );
5074
5387
  }
5075
5388
 
5076
5389
  // src/ui/otp.tsx
5077
- import { clsx as clsx2 } from "clsx";
5390
+ import { cn as cn38 } from "cn";
5078
5391
  import {
5079
5392
  AnimatePresence as AnimatePresence2,
5080
5393
  animate,
5081
- motion as motion5,
5394
+ motion as motion6,
5082
5395
  useReducedMotion
5083
5396
  } from "motion/react";
5084
5397
  import { Fragment as Fragment3, useEffect as useEffect7, useId as useId2, useRef as useRef4, useState as useState9 } from "react";
5085
- import { twMerge as twMerge2 } from "tailwind-merge";
5086
- import { jsx as jsx38, jsxs as jsxs21 } from "react/jsx-runtime";
5398
+ import { jsx as jsx39, jsxs as jsxs21 } from "react/jsx-runtime";
5087
5399
  var EASE_OUT = [0.16, 1, 0.3, 1];
5088
5400
  var EASE_IN_OUT = [0.77, 0, 0.175, 1];
5089
5401
  var EASE_DRAWER = [0.32, 0.72, 0, 1];
@@ -5117,9 +5429,6 @@ var SPRING_MOUSE = {
5117
5429
  damping: 15,
5118
5430
  mass: 0.3
5119
5431
  };
5120
- function otpCn(...inputs) {
5121
- return twMerge2(clsx2(inputs));
5122
- }
5123
5432
  function OTPInput2({
5124
5433
  length = 6,
5125
5434
  value: controlledValue,
@@ -5251,8 +5560,8 @@ function OTPInput2({
5251
5560
  const showSuccess = status === "success";
5252
5561
  const activeIndex = focused ? active : -1;
5253
5562
  const message = showSuccess ? successMessage : status === "error" ? errorMessage : hint;
5254
- return /* @__PURE__ */ jsxs21("div", { className: otpCn("inline-flex flex-col gap-2", className), children: [
5255
- label ? /* @__PURE__ */ jsx38(
5563
+ return /* @__PURE__ */ jsxs21("div", { className: cn38("inline-flex flex-col gap-2", className), children: [
5564
+ label ? /* @__PURE__ */ jsx39(
5256
5565
  "label",
5257
5566
  {
5258
5567
  htmlFor: `${uid}-input`,
@@ -5273,7 +5582,7 @@ function OTPInput2({
5273
5582
  inputRef.current?.focus();
5274
5583
  },
5275
5584
  children: [
5276
- /* @__PURE__ */ jsx38(
5585
+ /* @__PURE__ */ jsx39(
5277
5586
  "input",
5278
5587
  {
5279
5588
  ref: inputRef,
@@ -5300,7 +5609,7 @@ function OTPInput2({
5300
5609
  className: "absolute inset-0 z-20 h-full w-full cursor-text bg-transparent text-transparent caret-transparent opacity-0 outline-none disabled:cursor-not-allowed"
5301
5610
  }
5302
5611
  ),
5303
- /* @__PURE__ */ jsx38("div", { ref: slotsRef, className: "flex items-center gap-3", children: Array.from({ length }, (_, i) => {
5612
+ /* @__PURE__ */ jsx39("div", { ref: slotsRef, className: "flex items-center gap-3", children: Array.from({ length }, (_, i) => {
5304
5613
  const char = slots[i] ?? "";
5305
5614
  const isActive = i === activeIndex;
5306
5615
  return /* @__PURE__ */ jsxs21(Fragment3, { children: [
@@ -5310,15 +5619,15 @@ function OTPInput2({
5310
5619
  "data-otp-slot": true,
5311
5620
  "data-active": isActive,
5312
5621
  "data-filled": char !== "",
5313
- className: otpCn(
5622
+ className: cn38(
5314
5623
  "relative grid size-11 place-items-center overflow-hidden rounded-xl border bg-card text-xl font-semibold tabular-nums transition-colors duration-200",
5315
5624
  showSuccess ? "border-emerald-500/60 text-foreground" : status === "error" ? "border-destructive/60 text-foreground" : char ? "border-border-strong text-foreground" : "border-border text-muted-foreground",
5316
5625
  isActive && !showSuccess && status !== "error" && "border-brand border-2 ring-0",
5317
5626
  disabled && "opacity-50"
5318
5627
  ),
5319
5628
  children: [
5320
- isActive && !showSuccess ? /* @__PURE__ */ jsx38(
5321
- motion5.span,
5629
+ isActive && !showSuccess ? /* @__PURE__ */ jsx39(
5630
+ motion6.span,
5322
5631
  {
5323
5632
  "aria-hidden": true,
5324
5633
  animate: reduce ? void 0 : { opacity: [1, 1, 0, 0] },
@@ -5327,14 +5636,14 @@ function OTPInput2({
5327
5636
  repeat: Number.POSITIVE_INFINITY,
5328
5637
  ease: "linear"
5329
5638
  },
5330
- className: otpCn(
5639
+ className: cn38(
5331
5640
  "bg-brand pointer-events-none absolute top-1/2 h-6 w-px -translate-y-1/2",
5332
5641
  char ? "right-3" : "left-1/2 -translate-x-1/2"
5333
5642
  )
5334
5643
  }
5335
5644
  ) : null,
5336
- /* @__PURE__ */ jsx38(AnimatePresence2, { initial: false, children: char ? /* @__PURE__ */ jsx38(
5337
- motion5.span,
5645
+ /* @__PURE__ */ jsx39(AnimatePresence2, { initial: false, children: char ? /* @__PURE__ */ jsx39(
5646
+ motion6.span,
5338
5647
  {
5339
5648
  initial: reduce ? {
5340
5649
  opacity: 0
@@ -5371,11 +5680,11 @@ function OTPInput2({
5371
5680
  ]
5372
5681
  }
5373
5682
  ),
5374
- i === 2 ? /* @__PURE__ */ jsx38("span", { "aria-hidden": "true", className: "h-0.5 w-4 bg-primary" }) : null
5683
+ i === 2 ? /* @__PURE__ */ jsx39("span", { "aria-hidden": "true", className: "h-0.5 w-4 bg-primary" }) : null
5375
5684
  ] }, `${uid}-${i}`);
5376
5685
  }) }),
5377
- /* @__PURE__ */ jsx38(AnimatePresence2, { children: showSuccess ? /* @__PURE__ */ jsx38(
5378
- motion5.span,
5686
+ /* @__PURE__ */ jsx39(AnimatePresence2, { children: showSuccess ? /* @__PURE__ */ jsx39(
5687
+ motion6.span,
5379
5688
  {
5380
5689
  initial: reduce ? {
5381
5690
  opacity: 0
@@ -5416,9 +5725,9 @@ function OTPInput2({
5416
5725
  strokeLinecap: "round",
5417
5726
  strokeLinejoin: "round",
5418
5727
  children: [
5419
- /* @__PURE__ */ jsx38("title", { children: "Verified" }),
5420
- /* @__PURE__ */ jsx38(
5421
- motion5.path,
5728
+ /* @__PURE__ */ jsx39("title", { children: "Verified" }),
5729
+ /* @__PURE__ */ jsx39(
5730
+ motion6.path,
5422
5731
  {
5423
5732
  d: "M5 13l4 4L19 7",
5424
5733
  initial: reduce ? {
@@ -5446,11 +5755,11 @@ function OTPInput2({
5446
5755
  ]
5447
5756
  }
5448
5757
  ),
5449
- message ? /* @__PURE__ */ jsx38(
5758
+ message ? /* @__PURE__ */ jsx39(
5450
5759
  "p",
5451
5760
  {
5452
5761
  "aria-live": "polite",
5453
- className: otpCn(
5762
+ className: cn38(
5454
5763
  "text-sm",
5455
5764
  showSuccess ? "text-emerald-500" : status === "error" ? "text-destructive" : "text-muted-foreground"
5456
5765
  ),
@@ -5469,12 +5778,13 @@ function toSlots(raw, length) {
5469
5778
 
5470
5779
  // src/ui/popover.tsx
5471
5780
  import { Popover as PopoverPrimitive } from "@base-ui/react/popover";
5472
- import { jsx as jsx39 } from "react/jsx-runtime";
5781
+ import { cn as cn39 } from "cn";
5782
+ import { jsx as jsx40 } from "react/jsx-runtime";
5473
5783
  function Popover({ ...props }) {
5474
- return /* @__PURE__ */ jsx39(PopoverPrimitive.Root, { "data-slot": "popover", ...props });
5784
+ return /* @__PURE__ */ jsx40(PopoverPrimitive.Root, { "data-slot": "popover", ...props });
5475
5785
  }
5476
5786
  function PopoverTrigger({ ...props }) {
5477
- return /* @__PURE__ */ jsx39(PopoverPrimitive.Trigger, { "data-slot": "popover-trigger", ...props });
5787
+ return /* @__PURE__ */ jsx40(PopoverPrimitive.Trigger, { "data-slot": "popover-trigger", ...props });
5478
5788
  }
5479
5789
  function PopoverContent({
5480
5790
  className,
@@ -5484,7 +5794,7 @@ function PopoverContent({
5484
5794
  sideOffset = 4,
5485
5795
  ...props
5486
5796
  }) {
5487
- return /* @__PURE__ */ jsx39(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx39(
5797
+ return /* @__PURE__ */ jsx40(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx40(
5488
5798
  PopoverPrimitive.Positioner,
5489
5799
  {
5490
5800
  align,
@@ -5492,11 +5802,11 @@ function PopoverContent({
5492
5802
  side,
5493
5803
  sideOffset,
5494
5804
  className: "isolate z-50",
5495
- children: /* @__PURE__ */ jsx39(
5805
+ children: /* @__PURE__ */ jsx40(
5496
5806
  PopoverPrimitive.Popup,
5497
5807
  {
5498
5808
  "data-slot": "popover-content",
5499
- className: cn(
5809
+ className: cn39(
5500
5810
  "z-50 flex w-72 origin-(--transform-origin) flex-col gap-2.5 rounded-lg bg-background p-2.5 text-sm text-popover-foreground shadow-md ring-1 ring-foreground/10 outline-hidden duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-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 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
5501
5811
  className
5502
5812
  ),
@@ -5507,21 +5817,21 @@ function PopoverContent({
5507
5817
  ) });
5508
5818
  }
5509
5819
  function PopoverHeader({ className, ...props }) {
5510
- return /* @__PURE__ */ jsx39(
5820
+ return /* @__PURE__ */ jsx40(
5511
5821
  "div",
5512
5822
  {
5513
5823
  "data-slot": "popover-header",
5514
- className: cn("flex flex-col gap-0.5 text-sm", className),
5824
+ className: cn39("flex flex-col gap-0.5 text-sm", className),
5515
5825
  ...props
5516
5826
  }
5517
5827
  );
5518
5828
  }
5519
5829
  function PopoverTitle({ className, ...props }) {
5520
- return /* @__PURE__ */ jsx39(
5830
+ return /* @__PURE__ */ jsx40(
5521
5831
  PopoverPrimitive.Title,
5522
5832
  {
5523
5833
  "data-slot": "popover-title",
5524
- className: cn("font-medium", className),
5834
+ className: cn39("font-medium", className),
5525
5835
  ...props
5526
5836
  }
5527
5837
  );
@@ -5530,11 +5840,11 @@ function PopoverDescription({
5530
5840
  className,
5531
5841
  ...props
5532
5842
  }) {
5533
- return /* @__PURE__ */ jsx39(
5843
+ return /* @__PURE__ */ jsx40(
5534
5844
  PopoverPrimitive.Description,
5535
5845
  {
5536
5846
  "data-slot": "popover-description",
5537
- className: cn("text-muted-foreground", className),
5847
+ className: cn39("text-muted-foreground", className),
5538
5848
  ...props
5539
5849
  }
5540
5850
  );
@@ -5543,12 +5853,12 @@ function PopoverDescription({
5543
5853
  // src/ui/quantity.tsx
5544
5854
  import { NumberField } from "@base-ui/react/number-field";
5545
5855
  import { Minus, Plus } from "@gravity-ui/icons";
5546
- import * as React12 from "react";
5547
- import { jsx as jsx40, jsxs as jsxs22 } from "react/jsx-runtime";
5548
- var QuantityInput = React12.forwardRef(function QuantityInput2({ ...props }, ref) {
5549
- const id = React12.useId();
5550
- return /* @__PURE__ */ jsx40(NumberField.Root, { id, ...props, className: "flex flex-col items-start", children: /* @__PURE__ */ jsxs22(NumberField.Group, { className: "flex h-8 gap-1", children: [
5551
- /* @__PURE__ */ jsx40(
5856
+ import * as React14 from "react";
5857
+ import { jsx as jsx41, jsxs as jsxs22 } from "react/jsx-runtime";
5858
+ var QuantityInput = React14.forwardRef(function QuantityInput2({ ...props }, ref) {
5859
+ const id = React14.useId();
5860
+ return /* @__PURE__ */ jsx41(NumberField.Root, { id, ...props, className: "flex flex-col items-start", children: /* @__PURE__ */ jsxs22(NumberField.Group, { className: "flex h-8 gap-1", children: [
5861
+ /* @__PURE__ */ jsx41(
5552
5862
  NumberField.Decrement,
5553
5863
  {
5554
5864
  className: buttonVariants({
@@ -5556,10 +5866,10 @@ var QuantityInput = React12.forwardRef(function QuantityInput2({ ...props }, ref
5556
5866
  size: "icon-sm",
5557
5867
  className: "rounded-full! border-border!"
5558
5868
  }),
5559
- children: /* @__PURE__ */ jsx40(Minus, {})
5869
+ children: /* @__PURE__ */ jsx41(Minus, {})
5560
5870
  }
5561
5871
  ),
5562
- /* @__PURE__ */ jsx40(
5872
+ /* @__PURE__ */ jsx41(
5563
5873
  NumberField.Input,
5564
5874
  {
5565
5875
  ref,
@@ -5567,7 +5877,7 @@ var QuantityInput = React12.forwardRef(function QuantityInput2({ ...props }, ref
5567
5877
  "data-no-ring": true
5568
5878
  }
5569
5879
  ),
5570
- /* @__PURE__ */ jsx40(
5880
+ /* @__PURE__ */ jsx41(
5571
5881
  NumberField.Increment,
5572
5882
  {
5573
5883
  className: buttonVariants({
@@ -5575,7 +5885,7 @@ var QuantityInput = React12.forwardRef(function QuantityInput2({ ...props }, ref
5575
5885
  size: "icon-sm",
5576
5886
  className: "rounded-full! border-border!"
5577
5887
  }),
5578
- children: /* @__PURE__ */ jsx40(Plus, {})
5888
+ children: /* @__PURE__ */ jsx41(Plus, {})
5579
5889
  }
5580
5890
  )
5581
5891
  ] }) });
@@ -5584,33 +5894,34 @@ var QuantityInput = React12.forwardRef(function QuantityInput2({ ...props }, ref
5584
5894
  // src/ui/radio-group.tsx
5585
5895
  import { Radio as RadioPrimitive } from "@base-ui/react/radio";
5586
5896
  import { RadioGroup as RadioGroupPrimitive } from "@base-ui/react/radio-group";
5587
- import { jsx as jsx41 } from "react/jsx-runtime";
5897
+ import { cn as cn40 } from "cn";
5898
+ import { jsx as jsx42 } from "react/jsx-runtime";
5588
5899
  function RadioGroup({ className, ...props }) {
5589
- return /* @__PURE__ */ jsx41(
5900
+ return /* @__PURE__ */ jsx42(
5590
5901
  RadioGroupPrimitive,
5591
5902
  {
5592
5903
  "data-slot": "radio-group",
5593
- className: cn("grid w-full gap-2", className),
5904
+ className: cn40("grid w-full gap-2", className),
5594
5905
  ...props
5595
5906
  }
5596
5907
  );
5597
5908
  }
5598
5909
  function RadioGroupItem({ className, ...props }) {
5599
- return /* @__PURE__ */ jsx41(
5910
+ return /* @__PURE__ */ jsx42(
5600
5911
  RadioPrimitive.Root,
5601
5912
  {
5602
5913
  "data-slot": "radio-group-item",
5603
- className: cn(
5914
+ className: cn40(
5604
5915
  "group/radio-group-item peer relative flex aspect-square size-4 shrink-0 rounded-full border border-input outline-none after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary",
5605
5916
  className
5606
5917
  ),
5607
5918
  ...props,
5608
- children: /* @__PURE__ */ jsx41(
5919
+ children: /* @__PURE__ */ jsx42(
5609
5920
  RadioPrimitive.Indicator,
5610
5921
  {
5611
5922
  "data-slot": "radio-group-indicator",
5612
5923
  className: "flex size-4 items-center justify-center",
5613
- children: /* @__PURE__ */ jsx41("span", { className: "absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-primary-foreground" })
5924
+ children: /* @__PURE__ */ jsx42("span", { className: "absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-primary-foreground" })
5614
5925
  }
5615
5926
  )
5616
5927
  }
@@ -5622,7 +5933,7 @@ import { useRender as useRender5 } from "@base-ui/react/use-render";
5622
5933
  import { cva as cva9 } from "class-variance-authority";
5623
5934
  import {
5624
5935
  createContext as createContext5,
5625
- useCallback as useCallback5,
5936
+ useCallback as useCallback6,
5626
5937
  useContext as useContext6,
5627
5938
  useEffect as useEffect8,
5628
5939
  useId as useId4,
@@ -5633,12 +5944,13 @@ import {
5633
5944
 
5634
5945
  // src/ui/tooltip.tsx
5635
5946
  import { Tooltip as TooltipPrimitive } from "@base-ui/react/tooltip";
5636
- import { jsx as jsx42, jsxs as jsxs23 } from "react/jsx-runtime";
5947
+ import { cn as cn41 } from "cn";
5948
+ import { jsx as jsx43, jsxs as jsxs23 } from "react/jsx-runtime";
5637
5949
  function TooltipProvider({
5638
5950
  delay = 0,
5639
5951
  ...props
5640
5952
  }) {
5641
- return /* @__PURE__ */ jsx42(
5953
+ return /* @__PURE__ */ jsx43(
5642
5954
  TooltipPrimitive.Provider,
5643
5955
  {
5644
5956
  "data-slot": "tooltip-provider",
@@ -5648,10 +5960,10 @@ function TooltipProvider({
5648
5960
  );
5649
5961
  }
5650
5962
  function Tooltip2({ ...props }) {
5651
- return /* @__PURE__ */ jsx42(TooltipPrimitive.Root, { "data-slot": "tooltip", ...props });
5963
+ return /* @__PURE__ */ jsx43(TooltipPrimitive.Root, { "data-slot": "tooltip", ...props });
5652
5964
  }
5653
5965
  function TooltipTrigger({ ...props }) {
5654
- return /* @__PURE__ */ jsx42(TooltipPrimitive.Trigger, { "data-slot": "tooltip-trigger", ...props });
5966
+ return /* @__PURE__ */ jsx43(TooltipPrimitive.Trigger, { "data-slot": "tooltip-trigger", ...props });
5655
5967
  }
5656
5968
  function TooltipContent({
5657
5969
  className,
@@ -5662,7 +5974,7 @@ function TooltipContent({
5662
5974
  children,
5663
5975
  ...props
5664
5976
  }) {
5665
- return /* @__PURE__ */ jsx42(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsx42(
5977
+ return /* @__PURE__ */ jsx43(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsx43(
5666
5978
  TooltipPrimitive.Positioner,
5667
5979
  {
5668
5980
  align,
@@ -5674,14 +5986,14 @@ function TooltipContent({
5674
5986
  TooltipPrimitive.Popup,
5675
5987
  {
5676
5988
  "data-slot": "tooltip-content",
5677
- className: cn(
5989
+ className: cn41(
5678
5990
  "z-50 inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-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 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
5679
5991
  className
5680
5992
  ),
5681
5993
  ...props,
5682
5994
  children: [
5683
5995
  children,
5684
- /* @__PURE__ */ jsx42(TooltipPrimitive.Arrow, { className: "z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground data-[side=bottom]:top-1 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5" })
5996
+ /* @__PURE__ */ jsx43(TooltipPrimitive.Arrow, { className: "z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground data-[side=bottom]:top-1 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5" })
5685
5997
  ]
5686
5998
  }
5687
5999
  )
@@ -5690,8 +6002,9 @@ function TooltipContent({
5690
6002
  }
5691
6003
 
5692
6004
  // src/ui/reui/filters.tsx
6005
+ import { cn as cn42 } from "cn";
5693
6006
  import { AlertCircleIcon, CheckIcon as CheckIcon2, PlusIcon, XIcon } from "lucide-react";
5694
- import { Fragment as Fragment4, jsx as jsx43, jsxs as jsxs24 } from "react/jsx-runtime";
6007
+ import { Fragment as Fragment4, jsx as jsx44, jsxs as jsxs24 } from "react/jsx-runtime";
5695
6008
  var DEFAULT_I18N = {
5696
6009
  // UI Labels
5697
6010
  addFilter: "Filter",
@@ -5860,7 +6173,7 @@ function FilterInput({
5860
6173
  return /* @__PURE__ */ jsxs24(
5861
6174
  InputGroup,
5862
6175
  {
5863
- className: cn(
6176
+ className: cn42(
5864
6177
  "w-36",
5865
6178
  // Height follows each style's own control ladder. `default` sets no
5866
6179
  // height on purpose so the style's `.cn-input-group` applies (h-8 nova,
@@ -5875,8 +6188,8 @@ function FilterInput({
5875
6188
  className
5876
6189
  ),
5877
6190
  children: [
5878
- field?.prefix && /* @__PURE__ */ jsx43(InputGroupAddon, { children: /* @__PURE__ */ jsx43(InputGroupText, { children: field.prefix }) }),
5879
- /* @__PURE__ */ jsx43(
6191
+ field?.prefix && /* @__PURE__ */ jsx44(InputGroupAddon, { children: /* @__PURE__ */ jsx44(InputGroupText, { children: field.prefix }) }),
6192
+ /* @__PURE__ */ jsx44(
5880
6193
  InputGroupInput,
5881
6194
  {
5882
6195
  ref: inputRef,
@@ -5884,29 +6197,29 @@ function FilterInput({
5884
6197
  "aria-describedby": !isValid && validationMessage ? `${field?.key || "input"}-error` : void 0,
5885
6198
  onBlur: handleBlur,
5886
6199
  onKeyDown: handleKeyDown,
5887
- className: cn(
6200
+ className: cn42(
5888
6201
  context.size == "sm" && "h-7! text-xs",
5889
6202
  context.size == "lg" && "h-9!"
5890
6203
  ),
5891
6204
  ...props
5892
6205
  }
5893
6206
  ),
5894
- !isValid && validationMessage && /* @__PURE__ */ jsx43(InputGroupAddon, { align: "inline-end", children: /* @__PURE__ */ jsxs24(Tooltip2, { children: [
5895
- /* @__PURE__ */ jsx43(TooltipTrigger, { render: /* @__PURE__ */ jsx43(InputGroupButton, { size: "icon-xs" }), children: /* @__PURE__ */ jsx43(AlertCircleIcon, { className: "size-3.5 text-destructive" }) }),
5896
- /* @__PURE__ */ jsx43(TooltipContent, { children: /* @__PURE__ */ jsx43("p", { className: "text-sm", children: validationMessage }) })
6207
+ !isValid && validationMessage && /* @__PURE__ */ jsx44(InputGroupAddon, { align: "inline-end", children: /* @__PURE__ */ jsxs24(Tooltip2, { children: [
6208
+ /* @__PURE__ */ jsx44(TooltipTrigger, { render: /* @__PURE__ */ jsx44(InputGroupButton, { size: "icon-xs" }), children: /* @__PURE__ */ jsx44(AlertCircleIcon, { className: "size-3.5 text-destructive" }) }),
6209
+ /* @__PURE__ */ jsx44(TooltipContent, { children: /* @__PURE__ */ jsx44("p", { className: "text-sm", children: validationMessage }) })
5897
6210
  ] }) }),
5898
- field?.suffix && /* @__PURE__ */ jsx43(InputGroupAddon, { align: "inline-end", children: /* @__PURE__ */ jsx43(InputGroupText, { children: field.suffix }) })
6211
+ field?.suffix && /* @__PURE__ */ jsx44(InputGroupAddon, { align: "inline-end", children: /* @__PURE__ */ jsx44(InputGroupText, { children: field.suffix }) })
5899
6212
  ]
5900
6213
  }
5901
6214
  );
5902
6215
  }
5903
6216
  function FilterRemoveButton({
5904
6217
  className,
5905
- icon = /* @__PURE__ */ jsx43(XIcon, {}),
6218
+ icon = /* @__PURE__ */ jsx44(XIcon, {}),
5906
6219
  ...props
5907
6220
  }) {
5908
6221
  const context = useFilterContext();
5909
- return /* @__PURE__ */ jsx43(
6222
+ return /* @__PURE__ */ jsx44(
5910
6223
  Button,
5911
6224
  {
5912
6225
  variant: "outline",
@@ -5994,7 +6307,7 @@ function useFieldOptions(field, searchInput, enabled) {
5994
6307
  cancelled = true;
5995
6308
  };
5996
6309
  }, [isAsync, enabled, debouncedQuery]);
5997
- const resolveSelected = useCallback5(
6310
+ const resolveSelected = useCallback6(
5998
6311
  (values) => {
5999
6312
  const cache = getFieldOptionCache(field);
6000
6313
  return values.map(
@@ -6078,10 +6391,10 @@ function FilterOperatorDropdown({
6078
6391
  );
6079
6392
  const operatorLabel = operators.find((op) => op.value === operator)?.label || context.i18n.helpers.formatOperator(operator);
6080
6393
  return /* @__PURE__ */ jsxs24(DropdownMenu, { children: [
6081
- /* @__PURE__ */ jsx43(
6394
+ /* @__PURE__ */ jsx44(
6082
6395
  DropdownMenuTrigger,
6083
6396
  {
6084
- render: /* @__PURE__ */ jsx43(
6397
+ render: /* @__PURE__ */ jsx44(
6085
6398
  Button,
6086
6399
  {
6087
6400
  variant: "outline",
@@ -6092,19 +6405,19 @@ function FilterOperatorDropdown({
6092
6405
  )
6093
6406
  }
6094
6407
  ),
6095
- /* @__PURE__ */ jsx43(DropdownMenuContent, { align: "start", className: "w-fit min-w-fit", children: operators.map((op) => /* @__PURE__ */ jsxs24(
6408
+ /* @__PURE__ */ jsx44(DropdownMenuContent, { align: "start", className: "w-fit min-w-fit", children: operators.map((op) => /* @__PURE__ */ jsxs24(
6096
6409
  DropdownMenuItem,
6097
6410
  {
6098
6411
  onClick: () => onChange(op.value),
6099
- className: cn(
6412
+ className: cn42(
6100
6413
  "flex items-center justify-between data-highlighted:bg-accent data-highlighted:text-accent-foreground"
6101
6414
  ),
6102
6415
  children: [
6103
- /* @__PURE__ */ jsx43("span", { children: op.label }),
6104
- /* @__PURE__ */ jsx43(
6416
+ /* @__PURE__ */ jsx44("span", { children: op.label }),
6417
+ /* @__PURE__ */ jsx44(
6105
6418
  CheckIcon2,
6106
6419
  {
6107
- className: cn(
6420
+ className: cn42(
6108
6421
  "ms-auto text-primary",
6109
6422
  op.value === operator ? "opacity-100" : "opacity-0"
6110
6423
  )
@@ -6194,7 +6507,7 @@ function SelectOptionsPopover({
6194
6507
  "data-highlighted": isHighlighted || void 0,
6195
6508
  onMouseEnter: () => setHighlightedIndex(overallIndex),
6196
6509
  checked: isSelected,
6197
- className: cn(
6510
+ className: cn42(
6198
6511
  "data-highlighted:bg-accent data-highlighted:text-accent-foreground",
6199
6512
  option.className
6200
6513
  ),
@@ -6204,7 +6517,7 @@ function SelectOptionsPopover({
6204
6517
  onCheckedChange: () => toggleOption(option),
6205
6518
  children: [
6206
6519
  option.icon && option.icon,
6207
- /* @__PURE__ */ jsx43("span", { className: "truncate", children: option.label })
6520
+ /* @__PURE__ */ jsx44("span", { className: "truncate", children: option.label })
6208
6521
  ]
6209
6522
  },
6210
6523
  String(option.value)
@@ -6212,7 +6525,7 @@ function SelectOptionsPopover({
6212
6525
  };
6213
6526
  const renderMenuContent = () => /* @__PURE__ */ jsxs24(Fragment4, { children: [
6214
6527
  field.searchable !== false && /* @__PURE__ */ jsxs24(Fragment4, { children: [
6215
- /* @__PURE__ */ jsx43(
6528
+ /* @__PURE__ */ jsx44(
6216
6529
  Input,
6217
6530
  {
6218
6531
  ref: inputRef,
@@ -6225,7 +6538,7 @@ function SelectOptionsPopover({
6225
6538
  placeholder: context.i18n.placeholders.searchField(
6226
6539
  field.label || ""
6227
6540
  ),
6228
- className: cn(
6541
+ className: cn42(
6229
6542
  "h-8 rounded-none border-0 border-input bg-transparent! px-2 text-sm shadow-none",
6230
6543
  "focus-visible:border-border focus-visible:ring-0 focus-visible:ring-offset-0",
6231
6544
  open && "placeholder:text-foreground"
@@ -6273,24 +6586,24 @@ function SelectOptionsPopover({
6273
6586
  }
6274
6587
  }
6275
6588
  ),
6276
- /* @__PURE__ */ jsx43(DropdownMenuSeparator, {})
6589
+ /* @__PURE__ */ jsx44(DropdownMenuSeparator, {})
6277
6590
  ] }),
6278
- /* @__PURE__ */ jsx43("div", { className: "relative flex max-h-full", children: /* @__PURE__ */ jsx43(
6591
+ /* @__PURE__ */ jsx44("div", { className: "relative flex max-h-full", children: /* @__PURE__ */ jsx44(
6279
6592
  "div",
6280
6593
  {
6281
6594
  className: "flex max-h-[min(var(--available-height),24rem)] w-full scroll-pt-2 scroll-pb-2 flex-col overscroll-contain",
6282
6595
  role: "listbox",
6283
6596
  id: `${baseId}-listbox`,
6284
- children: isAsync && loading && allFilteredOptions.length === 0 ? /* @__PURE__ */ jsx43("div", { className: "py-2 text-center text-sm text-muted-foreground", children: context.i18n.loadingOptions ?? DEFAULT_I18N.loadingOptions }) : isAsync && error ? /* @__PURE__ */ jsx43("div", { className: "py-2 text-center text-sm text-muted-foreground", children: context.i18n.errorLoadingOptions ?? DEFAULT_I18N.errorLoadingOptions }) : allFilteredOptions.length === 0 ? /* @__PURE__ */ jsx43("div", { className: "py-2 text-center text-sm text-muted-foreground", children: context.i18n.noResultsFound }) : field.renderOptionList ? field.renderOptionList({
6597
+ children: isAsync && loading && allFilteredOptions.length === 0 ? /* @__PURE__ */ jsx44("div", { className: "py-2 text-center text-sm text-muted-foreground", children: context.i18n.loadingOptions ?? DEFAULT_I18N.loadingOptions }) : isAsync && error ? /* @__PURE__ */ jsx44("div", { className: "py-2 text-center text-sm text-muted-foreground", children: context.i18n.errorLoadingOptions ?? DEFAULT_I18N.errorLoadingOptions }) : allFilteredOptions.length === 0 ? /* @__PURE__ */ jsx44("div", { className: "py-2 text-center text-sm text-muted-foreground", children: context.i18n.noResultsFound }) : field.renderOptionList ? field.renderOptionList({
6285
6598
  options: allFilteredOptions,
6286
6599
  highlightedIndex,
6287
6600
  renderOption: renderOptionItem
6288
6601
  }) : /* @__PURE__ */ jsxs24(ScrollArea, { className: "size-full min-h-0 **:data-[slot=scroll-area-scrollbar]:m-0 **:data-[slot=scroll-area-viewport]:h-full **:data-[slot=scroll-area-viewport]:overscroll-contain", children: [
6289
- filteredSelectedOptions.length > 0 && /* @__PURE__ */ jsx43(DropdownMenuGroup, { className: "px-1", children: filteredSelectedOptions.map(
6602
+ filteredSelectedOptions.length > 0 && /* @__PURE__ */ jsx44(DropdownMenuGroup, { className: "px-1", children: filteredSelectedOptions.map(
6290
6603
  (option, index) => renderOptionItem(option, index)
6291
6604
  ) }),
6292
- filteredSelectedOptions.length > 0 && filteredUnselectedOptions.length > 0 && /* @__PURE__ */ jsx43(DropdownMenuSeparator, { className: "mx-0" }),
6293
- filteredUnselectedOptions.length > 0 && /* @__PURE__ */ jsx43(DropdownMenuGroup, { className: "px-1", children: filteredUnselectedOptions.map(
6605
+ filteredSelectedOptions.length > 0 && filteredUnselectedOptions.length > 0 && /* @__PURE__ */ jsx44(DropdownMenuSeparator, { className: "mx-0" }),
6606
+ filteredUnselectedOptions.length > 0 && /* @__PURE__ */ jsx44(DropdownMenuGroup, { className: "px-1", children: filteredUnselectedOptions.map(
6294
6607
  (option, index) => renderOptionItem(
6295
6608
  option,
6296
6609
  index + filteredSelectedOptions.length
@@ -6301,7 +6614,7 @@ function SelectOptionsPopover({
6301
6614
  ) })
6302
6615
  ] });
6303
6616
  if (inline) {
6304
- return /* @__PURE__ */ jsx43("div", { className: "w-full", children: renderMenuContent() });
6617
+ return /* @__PURE__ */ jsx44("div", { className: "w-full", children: renderMenuContent() });
6305
6618
  }
6306
6619
  return /* @__PURE__ */ jsxs24(
6307
6620
  DropdownMenu,
@@ -6314,23 +6627,23 @@ function SelectOptionsPopover({
6314
6627
  }
6315
6628
  },
6316
6629
  children: [
6317
- /* @__PURE__ */ jsx43(
6630
+ /* @__PURE__ */ jsx44(
6318
6631
  DropdownMenuTrigger,
6319
6632
  {
6320
- render: /* @__PURE__ */ jsx43(Button, { variant: "outline", size: context.size, children: /* @__PURE__ */ jsx43("div", { className: "flex items-center gap-1.5", children: field.customValueRenderer ? field.customValueRenderer(
6633
+ render: /* @__PURE__ */ jsx44(Button, { variant: "outline", size: context.size, children: /* @__PURE__ */ jsx44("div", { className: "flex items-center gap-1.5", children: field.customValueRenderer ? field.customValueRenderer(
6321
6634
  values,
6322
6635
  isAsync ? resolveSelected(values) : field.options || []
6323
6636
  ) : /* @__PURE__ */ jsxs24(Fragment4, { children: [
6324
- selectedOptions.length > 0 && /* @__PURE__ */ jsx43("div", { className: "flex items-center -space-x-1.5", children: selectedOptions.slice(0, 3).map((option) => /* @__PURE__ */ jsx43("div", { children: option.icon }, String(option.value))) }),
6637
+ selectedOptions.length > 0 && /* @__PURE__ */ jsx44("div", { className: "flex items-center -space-x-1.5", children: selectedOptions.slice(0, 3).map((option) => /* @__PURE__ */ jsx44("div", { children: option.icon }, String(option.value))) }),
6325
6638
  selectedOptions.length === 1 ? selectedOptions[0].label : selectedOptions.length > 1 ? `${selectedOptions.length} ${context.i18n.selectedCount}` : context.i18n.select
6326
6639
  ] }) }) })
6327
6640
  }
6328
6641
  ),
6329
- /* @__PURE__ */ jsx43(
6642
+ /* @__PURE__ */ jsx44(
6330
6643
  DropdownMenuContent,
6331
6644
  {
6332
6645
  align: "start",
6333
- className: cn("w-50 px-0", field.className),
6646
+ className: cn42("w-50 px-0", field.className),
6334
6647
  children: renderMenuContent()
6335
6648
  }
6336
6649
  )
@@ -6349,10 +6662,10 @@ function FilterValueSelector({
6349
6662
  return null;
6350
6663
  }
6351
6664
  if (field.customRenderer) {
6352
- return /* @__PURE__ */ jsx43(ButtonGroupText, { className: "bg-background text-start whitespace-nowrap outline-hidden hover:bg-accent aria-expanded:bg-accent dark:bg-input/30", children: field.customRenderer({ field, values, onChange, operator }) });
6665
+ return /* @__PURE__ */ jsx44(ButtonGroupText, { className: "bg-background text-start whitespace-nowrap outline-hidden hover:bg-accent aria-expanded:bg-accent dark:bg-input/30", children: field.customRenderer({ field, values, onChange, operator }) });
6353
6666
  }
6354
6667
  if (field.type === "text") {
6355
- return /* @__PURE__ */ jsx43(
6668
+ return /* @__PURE__ */ jsx44(
6356
6669
  FilterInput,
6357
6670
  {
6358
6671
  type: "text",
@@ -6361,15 +6674,15 @@ function FilterValueSelector({
6361
6674
  placeholder: field.placeholder,
6362
6675
  pattern: field.pattern,
6363
6676
  field,
6364
- className: cn("w-36", field.className),
6677
+ className: cn42("w-36", field.className),
6365
6678
  autoFocus
6366
6679
  }
6367
6680
  );
6368
6681
  }
6369
6682
  if (field.type === "select" || field.type === "multiselect") {
6370
- return /* @__PURE__ */ jsx43(SelectOptionsPopover, { field, values, onChange });
6683
+ return /* @__PURE__ */ jsx44(SelectOptionsPopover, { field, values, onChange });
6371
6684
  }
6372
- return /* @__PURE__ */ jsx43(SelectOptionsPopover, { field, values, onChange });
6685
+ return /* @__PURE__ */ jsx44(SelectOptionsPopover, { field, values, onChange });
6373
6686
  }
6374
6687
  var FiltersContent = ({
6375
6688
  filters,
@@ -6378,7 +6691,7 @@ var FiltersContent = ({
6378
6691
  }) => {
6379
6692
  const context = useFilterContext();
6380
6693
  const fieldsMap = useMemo4(() => getFieldsMap(fields), [fields]);
6381
- const updateFilter = useCallback5(
6694
+ const updateFilter = useCallback6(
6382
6695
  (filterId, updates) => {
6383
6696
  onChange(
6384
6697
  filters.map((filter) => {
@@ -6395,16 +6708,16 @@ var FiltersContent = ({
6395
6708
  },
6396
6709
  [filters, onChange]
6397
6710
  );
6398
- const removeFilter = useCallback5(
6711
+ const removeFilter = useCallback6(
6399
6712
  (filterId) => {
6400
6713
  onChange(filters.filter((filter) => filter.id !== filterId));
6401
6714
  },
6402
6715
  [filters, onChange]
6403
6716
  );
6404
- return /* @__PURE__ */ jsx43(
6717
+ return /* @__PURE__ */ jsx44(
6405
6718
  "div",
6406
6719
  {
6407
- className: cn(
6720
+ className: cn42(
6408
6721
  filtersContainerVariants({
6409
6722
  variant: context.variant,
6410
6723
  size: context.size
@@ -6423,7 +6736,7 @@ var FiltersContent = ({
6423
6736
  field.icon && field.icon,
6424
6737
  field.label
6425
6738
  ] }),
6426
- /* @__PURE__ */ jsx43(
6739
+ /* @__PURE__ */ jsx44(
6427
6740
  FilterOperatorDropdown,
6428
6741
  {
6429
6742
  field,
@@ -6432,7 +6745,7 @@ var FiltersContent = ({
6432
6745
  onChange: (operator) => updateFilter(filter.id, { operator })
6433
6746
  }
6434
6747
  ),
6435
- /* @__PURE__ */ jsx43(
6748
+ /* @__PURE__ */ jsx44(
6436
6749
  FilterValueSelector,
6437
6750
  {
6438
6751
  field,
@@ -6442,7 +6755,7 @@ var FiltersContent = ({
6442
6755
  autoFocus: false
6443
6756
  }
6444
6757
  ),
6445
- /* @__PURE__ */ jsx43(FilterRemoveButton, { onClick: () => removeFilter(filter.id) })
6758
+ /* @__PURE__ */ jsx44(FilterRemoveButton, { onClick: () => removeFilter(filter.id) })
6446
6759
  ]
6447
6760
  },
6448
6761
  filter.id
@@ -6529,7 +6842,7 @@ function FilterSubmenuContent({
6529
6842
  "data-highlighted": isHighlighted || void 0,
6530
6843
  onMouseEnter: () => setHighlightedIndex(index),
6531
6844
  checked: isSelected,
6532
- className: cn(
6845
+ className: cn42(
6533
6846
  "data-highlighted:bg-accent data-highlighted:text-accent-foreground",
6534
6847
  option.className
6535
6848
  ),
@@ -6539,7 +6852,7 @@ function FilterSubmenuContent({
6539
6852
  onCheckedChange: () => onToggle(option.value, isSelected),
6540
6853
  children: [
6541
6854
  option.icon && option.icon,
6542
- /* @__PURE__ */ jsx43("span", { className: "truncate", children: option.label })
6855
+ /* @__PURE__ */ jsx44("span", { className: "truncate", children: option.label })
6543
6856
  ]
6544
6857
  },
6545
6858
  String(option.value)
@@ -6552,7 +6865,7 @@ function FilterSubmenuContent({
6552
6865
  }, [isActive, filteredOptions.length]);
6553
6866
  return /* @__PURE__ */ jsxs24("div", { className: "flex flex-col", onMouseEnter: onActive, children: [
6554
6867
  field.searchable !== false && /* @__PURE__ */ jsxs24(Fragment4, { children: [
6555
- /* @__PURE__ */ jsx43(
6868
+ /* @__PURE__ */ jsx44(
6556
6869
  Input,
6557
6870
  {
6558
6871
  ref: inputRef,
@@ -6563,7 +6876,7 @@ function FilterSubmenuContent({
6563
6876
  "aria-controls": `${baseId}-listbox`,
6564
6877
  "aria-activedescendant": highlightedIndex >= 0 ? `${baseId}-item-${highlightedIndex}` : void 0,
6565
6878
  placeholder: i18n.placeholders.searchField(field.label || ""),
6566
- className: cn(
6879
+ className: cn42(
6567
6880
  "h-8 rounded-none border-0 bg-transparent! px-2 text-sm shadow-none",
6568
6881
  "focus-visible:border-border focus-visible:ring-0 focus-visible:ring-offset-0",
6569
6882
  isActive && "placeholder:text-foreground"
@@ -6615,9 +6928,9 @@ function FilterSubmenuContent({
6615
6928
  }
6616
6929
  }
6617
6930
  ),
6618
- /* @__PURE__ */ jsx43(DropdownMenuSeparator, {})
6931
+ /* @__PURE__ */ jsx44(DropdownMenuSeparator, {})
6619
6932
  ] }),
6620
- /* @__PURE__ */ jsx43("div", { className: "relative flex max-h-full", children: /* @__PURE__ */ jsx43(
6933
+ /* @__PURE__ */ jsx44("div", { className: "relative flex max-h-full", children: /* @__PURE__ */ jsx44(
6621
6934
  "div",
6622
6935
  {
6623
6936
  className: "flex max-h-[min(var(--available-height),24rem)] w-full scroll-pt-2 scroll-pb-2 flex-col overscroll-contain outline-hidden",
@@ -6662,11 +6975,11 @@ function FilterSubmenuContent({
6662
6975
  e.stopPropagation();
6663
6976
  }
6664
6977
  },
6665
- children: isAsync && loading && filteredOptions.length === 0 ? /* @__PURE__ */ jsx43("div", { className: "py-2 text-center text-sm text-muted-foreground", children: i18n.loadingOptions ?? DEFAULT_I18N.loadingOptions }) : isAsync && error ? /* @__PURE__ */ jsx43("div", { className: "py-2 text-center text-sm text-muted-foreground", children: i18n.errorLoadingOptions ?? DEFAULT_I18N.errorLoadingOptions }) : filteredOptions.length === 0 ? /* @__PURE__ */ jsx43("div", { className: "py-2 text-center text-sm text-muted-foreground", children: i18n.noResultsFound }) : field.renderOptionList ? field.renderOptionList({
6978
+ children: isAsync && loading && filteredOptions.length === 0 ? /* @__PURE__ */ jsx44("div", { className: "py-2 text-center text-sm text-muted-foreground", children: i18n.loadingOptions ?? DEFAULT_I18N.loadingOptions }) : isAsync && error ? /* @__PURE__ */ jsx44("div", { className: "py-2 text-center text-sm text-muted-foreground", children: i18n.errorLoadingOptions ?? DEFAULT_I18N.errorLoadingOptions }) : filteredOptions.length === 0 ? /* @__PURE__ */ jsx44("div", { className: "py-2 text-center text-sm text-muted-foreground", children: i18n.noResultsFound }) : field.renderOptionList ? field.renderOptionList({
6666
6979
  options: filteredOptions,
6667
6980
  highlightedIndex,
6668
6981
  renderOption: renderOptionItem
6669
- }) : /* @__PURE__ */ jsx43(ScrollArea, { className: "size-full min-h-0 **:data-[slot=scroll-area-scrollbar]:m-0 **:data-[slot=scroll-area-viewport]:h-full **:data-[slot=scroll-area-viewport]:overscroll-contain", children: /* @__PURE__ */ jsx43(DropdownMenuGroup, { children: filteredOptions.map(
6982
+ }) : /* @__PURE__ */ jsx44(ScrollArea, { className: "size-full min-h-0 **:data-[slot=scroll-area-scrollbar]:m-0 **:data-[slot=scroll-area-viewport]:h-full **:data-[slot=scroll-area-viewport]:overscroll-contain", children: /* @__PURE__ */ jsx44(DropdownMenuGroup, { children: filteredOptions.map(
6670
6983
  (option, index) => renderOptionItem(option, index)
6671
6984
  ) }) })
6672
6985
  }
@@ -6752,7 +7065,7 @@ function Filters({
6752
7065
  [i18n]
6753
7066
  );
6754
7067
  const fieldsMap = useMemo4(() => getFieldsMap(fields), [fields]);
6755
- const updateFilter = useCallback5(
7068
+ const updateFilter = useCallback6(
6756
7069
  (filterId, updates) => {
6757
7070
  onChange(
6758
7071
  filters.map((filter) => {
@@ -6769,13 +7082,13 @@ function Filters({
6769
7082
  },
6770
7083
  [filters, onChange]
6771
7084
  );
6772
- const removeFilter = useCallback5(
7085
+ const removeFilter = useCallback6(
6773
7086
  (filterId) => {
6774
7087
  onChange(filters.filter((filter) => filter.id !== filterId));
6775
7088
  },
6776
7089
  [filters, onChange]
6777
7090
  );
6778
- const addFilter = useCallback5(
7091
+ const addFilter = useCallback6(
6779
7092
  (fieldKey) => {
6780
7093
  const field = fieldsMap[fieldKey];
6781
7094
  if (field && field.key) {
@@ -6814,7 +7127,7 @@ function Filters({
6814
7127
  }, [addFilterOpen, filteredFields.length]);
6815
7128
  const triggerButton = useRender5({
6816
7129
  render: trigger ?? /* @__PURE__ */ jsxs24(Button, { variant: "outline", children: [
6817
- /* @__PURE__ */ jsx43(PlusIcon, {}),
7130
+ /* @__PURE__ */ jsx44(PlusIcon, {}),
6818
7131
  mergedI18n.addFilter
6819
7132
  ] }),
6820
7133
  defaultTagName: "button"
@@ -6831,10 +7144,10 @@ function Filters({
6831
7144
  }),
6832
7145
  [variant, size, radius, mergedI18n, className, trigger, allowMultiple]
6833
7146
  );
6834
- return /* @__PURE__ */ jsx43(FilterContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxs24(
7147
+ return /* @__PURE__ */ jsx44(FilterContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxs24(
6835
7148
  "div",
6836
7149
  {
6837
- className: cn(filtersContainerVariants({ variant, size }), className),
7150
+ className: cn42(filtersContainerVariants({ variant, size }), className),
6838
7151
  children: [
6839
7152
  selectableFields.length > 0 && /* @__PURE__ */ jsxs24(
6840
7153
  DropdownMenu,
@@ -6850,16 +7163,16 @@ function Filters({
6850
7163
  }
6851
7164
  },
6852
7165
  children: [
6853
- /* @__PURE__ */ jsx43(DropdownMenuTrigger, { render: triggerButton }),
7166
+ /* @__PURE__ */ jsx44(DropdownMenuTrigger, { render: triggerButton }),
6854
7167
  /* @__PURE__ */ jsxs24(
6855
7168
  DropdownMenuContent,
6856
7169
  {
6857
- className: cn("w-55", menuPopupClassName),
7170
+ className: cn42("w-55", menuPopupClassName),
6858
7171
  align: "start",
6859
7172
  children: [
6860
7173
  showSearchInput && /* @__PURE__ */ jsxs24(Fragment4, { children: [
6861
7174
  /* @__PURE__ */ jsxs24("div", { className: "relative", children: [
6862
- /* @__PURE__ */ jsx43(
7175
+ /* @__PURE__ */ jsx44(
6863
7176
  Input,
6864
7177
  {
6865
7178
  ref: rootInputRef,
@@ -6867,7 +7180,7 @@ function Filters({
6867
7180
  "aria-controls": `${rootId}-listbox`,
6868
7181
  "aria-activedescendant": highlightedIndex >= 0 ? `${rootId}-item-${highlightedIndex}` : void 0,
6869
7182
  placeholder: mergedI18n.searchFields,
6870
- className: cn(
7183
+ className: cn42(
6871
7184
  "h-8 rounded-none border-0 bg-transparent! px-2 text-sm shadow-none",
6872
7185
  "focus-visible:border-border focus-visible:ring-0 focus-visible:ring-offset-0",
6873
7186
  activeMenu === "root" && "placeholder:text-foreground"
@@ -6931,20 +7244,20 @@ function Filters({
6931
7244
  }
6932
7245
  }
6933
7246
  ),
6934
- enableShortcut && shortcutLabel && /* @__PURE__ */ jsx43(Kbd, { className: "absolute top-1/2 right-2 -translate-y-1/2 border bg-background", children: shortcutLabel })
7247
+ enableShortcut && shortcutLabel && /* @__PURE__ */ jsx44(Kbd, { className: "absolute top-1/2 right-2 -translate-y-1/2 border bg-background", children: shortcutLabel })
6935
7248
  ] }),
6936
- /* @__PURE__ */ jsx43(DropdownMenuSeparator, {})
7249
+ /* @__PURE__ */ jsx44(DropdownMenuSeparator, {})
6937
7250
  ] }),
6938
- /* @__PURE__ */ jsx43("div", { className: "relative flex max-h-full", children: /* @__PURE__ */ jsx43(
7251
+ /* @__PURE__ */ jsx44("div", { className: "relative flex max-h-full", children: /* @__PURE__ */ jsx44(
6939
7252
  "div",
6940
7253
  {
6941
7254
  className: "flex max-h-[min(var(--available-height),24rem)] w-full scroll-pt-2 scroll-pb-2 flex-col overscroll-contain",
6942
7255
  role: "listbox",
6943
7256
  id: `${rootId}-listbox`,
6944
7257
  onMouseEnter: () => setActiveMenu("root"),
6945
- children: /* @__PURE__ */ jsx43(ScrollArea, { className: "**:data-[slot=scroll-area-scrollbar]:m-0", children: (() => {
7258
+ children: /* @__PURE__ */ jsx44(ScrollArea, { className: "**:data-[slot=scroll-area-scrollbar]:m-0", children: (() => {
6946
7259
  if (filteredFields.length === 0) {
6947
- return /* @__PURE__ */ jsx43("div", { className: "py-2 text-center text-sm text-muted-foreground", children: mergedI18n.noFieldsFound });
7260
+ return /* @__PURE__ */ jsx44("div", { className: "py-2 text-center text-sm text-muted-foreground", children: mergedI18n.noFieldsFound });
6948
7261
  }
6949
7262
  return filteredFields.map((field, index) => {
6950
7263
  const isHighlighted = highlightedIndex === index;
@@ -6985,16 +7298,16 @@ function Filters({
6985
7298
  className: "data-highlighted:bg-accent data-highlighted:text-accent-foreground data-popup-open:bg-accent data-popup-open:text-accent-foreground",
6986
7299
  children: [
6987
7300
  field.icon,
6988
- /* @__PURE__ */ jsx43("span", { children: field.label })
7301
+ /* @__PURE__ */ jsx44("span", { children: field.label })
6989
7302
  ]
6990
7303
  }
6991
7304
  ),
6992
- /* @__PURE__ */ jsx43(
7305
+ /* @__PURE__ */ jsx44(
6993
7306
  DropdownMenuSubContent,
6994
7307
  {
6995
7308
  className: "w-50",
6996
7309
  side: "right",
6997
- children: /* @__PURE__ */ jsx43(
7310
+ children: /* @__PURE__ */ jsx44(
6998
7311
  FilterSubmenuContent,
6999
7312
  {
7000
7313
  field,
@@ -7079,7 +7392,7 @@ function Filters({
7079
7392
  className: "data-highlighted:bg-accent data-highlighted:text-accent-foreground",
7080
7393
  children: [
7081
7394
  field.icon,
7082
- /* @__PURE__ */ jsx43("span", { children: field.label })
7395
+ /* @__PURE__ */ jsx44("span", { children: field.label })
7083
7396
  ]
7084
7397
  },
7085
7398
  field.key
@@ -7106,7 +7419,7 @@ function Filters({
7106
7419
  field.icon && field.icon,
7107
7420
  field.label
7108
7421
  ] }),
7109
- /* @__PURE__ */ jsx43(
7422
+ /* @__PURE__ */ jsx44(
7110
7423
  FilterOperatorDropdown,
7111
7424
  {
7112
7425
  field,
@@ -7115,7 +7428,7 @@ function Filters({
7115
7428
  onChange: (operator) => updateFilter(filter.id, { operator })
7116
7429
  }
7117
7430
  ),
7118
- /* @__PURE__ */ jsx43(
7431
+ /* @__PURE__ */ jsx44(
7119
7432
  FilterValueSelector,
7120
7433
  {
7121
7434
  field,
@@ -7125,7 +7438,7 @@ function Filters({
7125
7438
  autoFocus: filter.id === lastAddedFilterId
7126
7439
  }
7127
7440
  ),
7128
- /* @__PURE__ */ jsx43(FilterRemoveButton, { onClick: () => removeFilter(filter.id) })
7441
+ /* @__PURE__ */ jsx44(FilterRemoveButton, { onClick: () => removeFilter(filter.id) })
7129
7442
  ]
7130
7443
  },
7131
7444
  filter.id
@@ -7150,25 +7463,26 @@ var createFilterGroup = (id, label, fields, initialFilters = []) => ({
7150
7463
 
7151
7464
  // src/ui/select.tsx
7152
7465
  import { Select as SelectPrimitive } from "@base-ui/react/select";
7466
+ import { cn as cn43 } from "cn";
7153
7467
  import { Check as Check2, ChevronDown as ChevronDown3, ChevronUp as ChevronUp2 } from "@gravity-ui/icons";
7154
- import { jsx as jsx44, jsxs as jsxs25 } from "react/jsx-runtime";
7468
+ import { jsx as jsx45, jsxs as jsxs25 } from "react/jsx-runtime";
7155
7469
  var Select = SelectPrimitive.Root;
7156
7470
  function SelectGroup({ className, ...props }) {
7157
- return /* @__PURE__ */ jsx44(
7471
+ return /* @__PURE__ */ jsx45(
7158
7472
  SelectPrimitive.Group,
7159
7473
  {
7160
7474
  "data-slot": "select-group",
7161
- className: cn("scroll-my-1 p-1", className),
7475
+ className: cn43("scroll-my-1 p-1", className),
7162
7476
  ...props
7163
7477
  }
7164
7478
  );
7165
7479
  }
7166
7480
  function SelectValue({ className, ...props }) {
7167
- return /* @__PURE__ */ jsx44(
7481
+ return /* @__PURE__ */ jsx45(
7168
7482
  SelectPrimitive.Value,
7169
7483
  {
7170
7484
  "data-slot": "select-value",
7171
- className: cn("flex flex-1 text-left", className),
7485
+ className: cn43("flex flex-1 text-left", className),
7172
7486
  ...props
7173
7487
  }
7174
7488
  );
@@ -7184,17 +7498,17 @@ function SelectTrigger({
7184
7498
  {
7185
7499
  "data-slot": "select-trigger",
7186
7500
  "data-size": size,
7187
- className: cn(
7501
+ className: cn43(
7188
7502
  "flex w-fit items-center justify-between gap-1.5 rounded-lg border border-input bg-transparent py-2 pr-2 pl-2.5 text-sm whitespace-nowrap transition-colors outline-none select-none focus-visible:ring-2 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-placeholder:text-muted-foreground data-[size=default]:h-8 *:data-[slot=select-value]:line-clamp-1 dark:hover:bg-input/50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
7189
7503
  className
7190
7504
  ),
7191
7505
  ...props,
7192
7506
  children: [
7193
7507
  children,
7194
- /* @__PURE__ */ jsx44(
7508
+ /* @__PURE__ */ jsx45(
7195
7509
  SelectPrimitive.Icon,
7196
7510
  {
7197
- render: /* @__PURE__ */ jsx44(ChevronDown3, { className: "pointer-events-none size-4 text-muted-foreground" })
7511
+ render: /* @__PURE__ */ jsx45(ChevronDown3, { className: "pointer-events-none size-4 text-muted-foreground" })
7198
7512
  }
7199
7513
  )
7200
7514
  ]
@@ -7211,7 +7525,7 @@ function SelectContent({
7211
7525
  alignItemWithTrigger = true,
7212
7526
  ...props
7213
7527
  }) {
7214
- return /* @__PURE__ */ jsx44(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsx44(
7528
+ return /* @__PURE__ */ jsx45(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsx45(
7215
7529
  SelectPrimitive.Positioner,
7216
7530
  {
7217
7531
  side,
@@ -7225,15 +7539,15 @@ function SelectContent({
7225
7539
  {
7226
7540
  "data-slot": "select-content",
7227
7541
  "data-align-trigger": alignItemWithTrigger,
7228
- className: cn(
7542
+ className: cn43(
7229
7543
  "relative isolate z-50 max-h-(--available-height) w-(--anchor-width) min-w-36 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-background text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-open:fade-in-0 data-open:zoom-in-95 data-closed:fade-out-0 data-closed:zoom-out-95",
7230
7544
  className
7231
7545
  ),
7232
7546
  ...props,
7233
7547
  children: [
7234
- /* @__PURE__ */ jsx44(SelectScrollUpButton, {}),
7235
- /* @__PURE__ */ jsx44(SelectPrimitive.List, { className: "p-1", children }),
7236
- /* @__PURE__ */ jsx44(SelectScrollDownButton, {})
7548
+ /* @__PURE__ */ jsx45(SelectScrollUpButton, {}),
7549
+ /* @__PURE__ */ jsx45(SelectPrimitive.List, { className: "p-1", children }),
7550
+ /* @__PURE__ */ jsx45(SelectScrollDownButton, {})
7237
7551
  ]
7238
7552
  }
7239
7553
  )
@@ -7244,11 +7558,11 @@ function SelectLabel({
7244
7558
  className,
7245
7559
  ...props
7246
7560
  }) {
7247
- return /* @__PURE__ */ jsx44(
7561
+ return /* @__PURE__ */ jsx45(
7248
7562
  SelectPrimitive.GroupLabel,
7249
7563
  {
7250
7564
  "data-slot": "select-label",
7251
- className: cn("px-1.5 py-1 text-xs text-muted-foreground", className),
7565
+ className: cn43("px-1.5 py-1 text-xs text-muted-foreground", className),
7252
7566
  ...props
7253
7567
  }
7254
7568
  );
@@ -7262,18 +7576,18 @@ function SelectItem({
7262
7576
  SelectPrimitive.Item,
7263
7577
  {
7264
7578
  "data-slot": "select-item",
7265
- className: cn(
7579
+ className: cn43(
7266
7580
  "relative flex w-full cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-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]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
7267
7581
  className
7268
7582
  ),
7269
7583
  ...props,
7270
7584
  children: [
7271
- /* @__PURE__ */ jsx44(SelectPrimitive.ItemText, { className: "flex flex-1 shrink-0 gap-2 whitespace-nowrap", children }),
7272
- /* @__PURE__ */ jsx44(
7585
+ /* @__PURE__ */ jsx45(SelectPrimitive.ItemText, { className: "flex flex-1 shrink-0 gap-2 whitespace-nowrap", children }),
7586
+ /* @__PURE__ */ jsx45(
7273
7587
  SelectPrimitive.ItemIndicator,
7274
7588
  {
7275
- render: /* @__PURE__ */ jsx44("span", { className: "pointer-events-none absolute right-2 flex size-4 items-center justify-center" }),
7276
- children: /* @__PURE__ */ jsx44(Check2, { className: "pointer-events-none" })
7589
+ render: /* @__PURE__ */ jsx45("span", { className: "pointer-events-none absolute right-2 flex size-4 items-center justify-center" }),
7590
+ children: /* @__PURE__ */ jsx45(Check2, { className: "pointer-events-none" })
7277
7591
  }
7278
7592
  )
7279
7593
  ]
@@ -7284,11 +7598,11 @@ function SelectSeparator({
7284
7598
  className,
7285
7599
  ...props
7286
7600
  }) {
7287
- return /* @__PURE__ */ jsx44(
7601
+ return /* @__PURE__ */ jsx45(
7288
7602
  SelectPrimitive.Separator,
7289
7603
  {
7290
7604
  "data-slot": "select-separator",
7291
- className: cn("pointer-events-none -mx-1 my-1 h-px bg-border", className),
7605
+ className: cn43("pointer-events-none -mx-1 my-1 h-px bg-border", className),
7292
7606
  ...props
7293
7607
  }
7294
7608
  );
@@ -7297,16 +7611,16 @@ function SelectScrollUpButton({
7297
7611
  className,
7298
7612
  ...props
7299
7613
  }) {
7300
- return /* @__PURE__ */ jsx44(
7614
+ return /* @__PURE__ */ jsx45(
7301
7615
  SelectPrimitive.ScrollUpArrow,
7302
7616
  {
7303
7617
  "data-slot": "select-scroll-up-button",
7304
- className: cn(
7618
+ className: cn43(
7305
7619
  "top-0 z-10 flex w-full cursor-default items-center justify-center bg-background py-1 [&_svg:not([class*='size-'])]:size-4",
7306
7620
  className
7307
7621
  ),
7308
7622
  ...props,
7309
- children: /* @__PURE__ */ jsx44(ChevronUp2, {})
7623
+ children: /* @__PURE__ */ jsx45(ChevronUp2, {})
7310
7624
  }
7311
7625
  );
7312
7626
  }
@@ -7314,16 +7628,16 @@ function SelectScrollDownButton({
7314
7628
  className,
7315
7629
  ...props
7316
7630
  }) {
7317
- return /* @__PURE__ */ jsx44(
7631
+ return /* @__PURE__ */ jsx45(
7318
7632
  SelectPrimitive.ScrollDownArrow,
7319
7633
  {
7320
7634
  "data-slot": "select-scroll-down-button",
7321
- className: cn(
7635
+ className: cn43(
7322
7636
  "bottom-0 z-10 flex w-full cursor-default items-center justify-center bg-background py-1 [&_svg:not([class*='size-'])]:size-4",
7323
7637
  className
7324
7638
  ),
7325
7639
  ...props,
7326
- children: /* @__PURE__ */ jsx44(ChevronDown3, {})
7640
+ children: /* @__PURE__ */ jsx45(ChevronDown3, {})
7327
7641
  }
7328
7642
  );
7329
7643
  }
@@ -7333,7 +7647,8 @@ import {
7333
7647
  forwardRef as forwardRef4,
7334
7648
  useLayoutEffect
7335
7649
  } from "react";
7336
- import { jsx as jsx45 } from "react/jsx-runtime";
7650
+ import { cn as cn44 } from "cn";
7651
+ import { jsx as jsx46 } from "react/jsx-runtime";
7337
7652
  var componentThemeClassName = "[--ic-background:#ffffff] [--ic-foreground:#111111] [--ic-primary:#111111] [--ic-secondary:#646b75] [--ic-surface-border:#e9edf2] [--ic-border:#e3e7ec] [--ic-card:#ffffff] [--ic-card-foreground:#111111] [--ic-muted:#f5f7fa] [--ic-muted-foreground:#6d7480] [--ic-accent:#f3f5f8] [--color-accent:var(--ic-accent)] [--color-accent-foreground:var(--ic-accent-foreground)] [--ic-accent-foreground:#111111] [--ic-input:#e3e7ec] [--ic-ring:rgba(17,17,17,0.16)] [--ic-destructive:#dc2626] [--ic-paper:#fcfcfd] [--ic-popover-foreground:#111111] [--ic-brand:#0ea5e9] [--ic-brand-soft:#bae6fd] [--ic-shadow-soft:0_18px_38px_-24px_rgba(15,23,42,0.35)] [--ic-chart-1:oklch(0.52_0.19_254)] [--ic-chart-2:oklch(0.74_0.11_232)] [--ic-chart-3:oklch(0.42_0.16_262)] [--ic-chart-4:oklch(0.84_0.07_228)] [--ic-chart-5:oklch(0.62_0.14_240)] [--color-background:var(--ic-background)] [--color-foreground:var(--ic-foreground)] [--color-primary:var(--ic-primary)] [--color-secondary:var(--ic-secondary)] [--color-border:var(--ic-border)] [--color-card:var(--ic-card)] [--color-card-foreground:var(--ic-card-foreground)] [--color-muted:var(--ic-muted)] [--color-muted-foreground:var(--ic-muted-foreground)] [--color-accent:var(--ic-accent)] [--color-accent-foreground:var(--ic-accent-foreground)] [--color-input:var(--ic-input)] [--color-ring:var(--ic-ring)] [--color-destructive:var(--ic-destructive)] [--color-paper:var(--ic-paper)] [--color-popover-foreground:var(--ic-popover-foreground)] [--color-brand:var(--ic-brand)] [--color-brand-soft:var(--ic-brand-soft)] [--color-chart-1:var(--ic-chart-1)] [--color-chart-2:var(--ic-chart-2)] [--color-chart-3:var(--ic-chart-3)] [--color-chart-4:var(--ic-chart-4)] [--color-chart-5:var(--ic-chart-5)] dark:[--ic-background:#111111] dark:[--ic-foreground:#f6f3ec] dark:[--ic-primary:#f6f3ec] dark:[--ic-secondary:#cbc6bb] dark:[--ic-surface-border:#2a2a25] dark:[--ic-border:#2b2a25] dark:[--ic-card:#111111] dark:[--ic-card-foreground:#f6f3ec] dark:[--ic-muted:#171716] dark:[--ic-muted-foreground:#9a958a] dark:[--ic-accent:#1a1a18] [--color-accent:var(--ic-accent)] [--color-accent-foreground:var(--ic-accent-foreground)] dark:[--ic-accent-foreground:#f6f3ec] dark:[--ic-input:#2b2a25] dark:[--ic-ring:rgba(246,243,236,0.18)] dark:[--ic-destructive:#f87171] dark:[--ic-paper:#171716] dark:[--ic-popover-foreground:#f6f3ec] dark:[--ic-brand:#38bdf8] dark:[--ic-brand-soft:#0c4a6e] dark:[--ic-shadow-soft:0_20px_44px_-28px_rgba(0,0,0,0.6)] dark:[--ic-chart-1:oklch(0.68_0.17_250)] dark:[--ic-chart-2:oklch(0.82_0.09_225)] dark:[--ic-chart-3:oklch(0.58_0.15_260)] dark:[--ic-chart-4:oklch(0.75_0.12_235)] dark:[--ic-chart-5:oklch(0.88_0.06_220)]";
7338
7653
  var STYLE_ID = "iconiq-skeleton-styles";
7339
7654
  var SKELETON_CSS = `
@@ -7454,10 +7769,10 @@ var Skeleton = forwardRef4(function Skeleton2({
7454
7769
  ...style,
7455
7770
  "--iconiq-skeleton-duration": `${variantDuration}s`
7456
7771
  } : style;
7457
- return /* @__PURE__ */ jsx45(
7772
+ return /* @__PURE__ */ jsx46(
7458
7773
  "div",
7459
7774
  {
7460
- className: cn(
7775
+ className: cn44(
7461
7776
  componentThemeClassName,
7462
7777
  "iconiq-skeleton-surface relative block h-4 w-full overflow-hidden",
7463
7778
  showFade && "iconiq-skeleton-fade-root",
@@ -7468,7 +7783,7 @@ var Skeleton = forwardRef4(function Skeleton2({
7468
7783
  style: animatedStyle,
7469
7784
  ...resolveSkeletonA11yProps({ animate: animate2, decorative, label }),
7470
7785
  ...props,
7471
- children: showShimmer ? /* @__PURE__ */ jsx45(
7786
+ children: showShimmer ? /* @__PURE__ */ jsx46(
7472
7787
  "span",
7473
7788
  {
7474
7789
  "aria-hidden": "true",
@@ -7483,10 +7798,10 @@ function SkeletonAvatar({
7483
7798
  className,
7484
7799
  ...props
7485
7800
  }) {
7486
- return /* @__PURE__ */ jsx45(
7801
+ return /* @__PURE__ */ jsx46(
7487
7802
  Skeleton,
7488
7803
  {
7489
- className: cn("size-10", className),
7804
+ className: cn44("size-10", className),
7490
7805
  decorative: true,
7491
7806
  rounded: "full",
7492
7807
  ...props
@@ -7494,16 +7809,16 @@ function SkeletonAvatar({
7494
7809
  );
7495
7810
  }
7496
7811
  function SkeletonText({ className, ...props }) {
7497
- return /* @__PURE__ */ jsx45(Skeleton, { className: cn("h-3", className), decorative: true, ...props });
7812
+ return /* @__PURE__ */ jsx46(Skeleton, { className: cn44("h-3", className), decorative: true, ...props });
7498
7813
  }
7499
7814
  function SkeletonButton({
7500
7815
  className,
7501
7816
  ...props
7502
7817
  }) {
7503
- return /* @__PURE__ */ jsx45(
7818
+ return /* @__PURE__ */ jsx46(
7504
7819
  Skeleton,
7505
7820
  {
7506
- className: cn("h-9 w-24", className),
7821
+ className: cn44("h-9 w-24", className),
7507
7822
  decorative: true,
7508
7823
  rounded: "lg",
7509
7824
  ...props
@@ -7515,11 +7830,11 @@ var ShimmerSkeleton = Skeleton;
7515
7830
  // src/ui/sonner.tsx
7516
7831
  import { GooeyToaster } from "goey-toast";
7517
7832
  import { useTheme } from "next-themes";
7518
- import { jsx as jsx46 } from "react/jsx-runtime";
7833
+ import { jsx as jsx47 } from "react/jsx-runtime";
7519
7834
  var Toaster = ({ closeButton = "top-left", ...props }) => {
7520
7835
  const { theme = "system" } = useTheme();
7521
7836
  const toasterTheme = theme === "dark" ? "dark" : "light";
7522
- return /* @__PURE__ */ jsx46(
7837
+ return /* @__PURE__ */ jsx47(
7523
7838
  GooeyToaster,
7524
7839
  {
7525
7840
  theme: toasterTheme,
@@ -7559,53 +7874,16 @@ import {
7559
7874
  verticalListSortingStrategy
7560
7875
  } from "@dnd-kit/sortable";
7561
7876
  import { CSS } from "@dnd-kit/utilities";
7562
- import * as React15 from "react";
7877
+ import * as React16 from "react";
7563
7878
  import * as ReactDOM from "react-dom";
7564
-
7565
- // src/lib/compose-refs.ts
7566
- import * as React13 from "react";
7567
- function setRef(ref, value) {
7568
- if (typeof ref === "function") {
7569
- return ref(value);
7570
- }
7571
- if (ref !== null && ref !== void 0) {
7572
- ref.current = value;
7573
- }
7574
- }
7575
- function composeRefs(...refs) {
7576
- return (node) => {
7577
- let hasCleanup = false;
7578
- const cleanups = refs.map((ref) => {
7579
- const cleanup = setRef(ref, node);
7580
- if (!hasCleanup && typeof cleanup === "function") {
7581
- hasCleanup = true;
7582
- }
7583
- return cleanup;
7584
- });
7585
- if (hasCleanup) {
7586
- return () => {
7587
- for (let i = 0; i < cleanups.length; i++) {
7588
- const cleanup = cleanups[i];
7589
- if (typeof cleanup === "function") {
7590
- cleanup();
7591
- } else {
7592
- setRef(refs[i], null);
7593
- }
7594
- }
7595
- };
7596
- }
7597
- };
7598
- }
7599
- function useComposedRefs(...refs) {
7600
- return React13.useCallback(composeRefs(...refs), refs);
7601
- }
7879
+ import { cn as cn45 } from "cn";
7602
7880
 
7603
7881
  // src/hooks/use-isomorphic-layout-effect.ts
7604
- import * as React14 from "react";
7605
- var useIsomorphicLayoutEffect = typeof window !== "undefined" ? React14.useLayoutEffect : React14.useEffect;
7882
+ import * as React15 from "react";
7883
+ var useIsomorphicLayoutEffect = typeof window !== "undefined" ? React15.useLayoutEffect : React15.useEffect;
7606
7884
 
7607
7885
  // src/ui/sortable.tsx
7608
- import { jsx as jsx47 } from "react/jsx-runtime";
7886
+ import { jsx as jsx48 } from "react/jsx-runtime";
7609
7887
  var orientationConfig = {
7610
7888
  vertical: {
7611
7889
  modifiers: [restrictToVerticalAxis, restrictToParentElement],
@@ -7628,9 +7906,9 @@ var CONTENT_NAME = "SortableContent";
7628
7906
  var ITEM_NAME = "SortableItem";
7629
7907
  var ITEM_HANDLE_NAME = "SortableItemHandle";
7630
7908
  var OVERLAY_NAME = "SortableOverlay";
7631
- var SortableRootContext = React15.createContext(null);
7909
+ var SortableRootContext = React16.createContext(null);
7632
7910
  function useSortableContext(consumerName) {
7633
- const context = React15.useContext(SortableRootContext);
7911
+ const context = React16.useContext(SortableRootContext);
7634
7912
  if (!context) {
7635
7913
  throw new Error(`\`${consumerName}\` must be used within \`${ROOT_NAME}\``);
7636
7914
  }
@@ -7650,8 +7928,8 @@ function Sortable(props) {
7650
7928
  accessibility,
7651
7929
  ...sortableProps
7652
7930
  } = props;
7653
- const id = React15.useId();
7654
- const [activeId, setActiveId] = React15.useState(null);
7931
+ const id = React16.useId();
7932
+ const [activeId, setActiveId] = React16.useState(null);
7655
7933
  const sensors = useSensors(
7656
7934
  useSensor(MouseSensor),
7657
7935
  useSensor(TouchSensor),
@@ -7659,11 +7937,11 @@ function Sortable(props) {
7659
7937
  coordinateGetter: sortableKeyboardCoordinates
7660
7938
  })
7661
7939
  );
7662
- const config = React15.useMemo(
7940
+ const config = React16.useMemo(
7663
7941
  () => orientationConfig[orientation],
7664
7942
  [orientation]
7665
7943
  );
7666
- const getItemValue = React15.useCallback(
7944
+ const getItemValue = React16.useCallback(
7667
7945
  (item) => {
7668
7946
  if (typeof item === "object" && !getItemValueProp) {
7669
7947
  throw new Error(
@@ -7674,10 +7952,10 @@ function Sortable(props) {
7674
7952
  },
7675
7953
  [getItemValueProp]
7676
7954
  );
7677
- const items = React15.useMemo(() => {
7955
+ const items = React16.useMemo(() => {
7678
7956
  return value.map((item) => getItemValue(item));
7679
7957
  }, [value, getItemValue]);
7680
- const onDragStart = React15.useCallback(
7958
+ const onDragStart = React16.useCallback(
7681
7959
  (event) => {
7682
7960
  sortableProps.onDragStart?.(event);
7683
7961
  if (event.activatorEvent.defaultPrevented) return;
@@ -7685,7 +7963,7 @@ function Sortable(props) {
7685
7963
  },
7686
7964
  [sortableProps.onDragStart]
7687
7965
  );
7688
- const onDragEnd = React15.useCallback(
7966
+ const onDragEnd = React16.useCallback(
7689
7967
  (event) => {
7690
7968
  sortableProps.onDragEnd?.(event);
7691
7969
  if (event.activatorEvent.defaultPrevented) return;
@@ -7707,7 +7985,7 @@ function Sortable(props) {
7707
7985
  },
7708
7986
  [value, onValueChange, onMove, getItemValue, sortableProps.onDragEnd]
7709
7987
  );
7710
- const onDragCancel = React15.useCallback(
7988
+ const onDragCancel = React16.useCallback(
7711
7989
  (event) => {
7712
7990
  sortableProps.onDragCancel?.(event);
7713
7991
  if (event.activatorEvent.defaultPrevented) return;
@@ -7715,7 +7993,7 @@ function Sortable(props) {
7715
7993
  },
7716
7994
  [sortableProps.onDragCancel]
7717
7995
  );
7718
- const announcements = React15.useMemo(
7996
+ const announcements = React16.useMemo(
7719
7997
  () => ({
7720
7998
  onDragStart({ active }) {
7721
7999
  const activeValue = active.id.toString();
@@ -7757,7 +8035,7 @@ function Sortable(props) {
7757
8035
  }),
7758
8036
  [value]
7759
8037
  );
7760
- const screenReaderInstructions = React15.useMemo(
8038
+ const screenReaderInstructions = React16.useMemo(
7761
8039
  () => ({
7762
8040
  draggable: `
7763
8041
  To pick up a sortable item, press space or enter.
@@ -7767,7 +8045,7 @@ function Sortable(props) {
7767
8045
  }),
7768
8046
  [orientation]
7769
8047
  );
7770
- const contextValue = React15.useMemo(
8048
+ const contextValue = React16.useMemo(
7771
8049
  () => ({
7772
8050
  id,
7773
8051
  items,
@@ -7790,11 +8068,11 @@ function Sortable(props) {
7790
8068
  flatCursor
7791
8069
  ]
7792
8070
  );
7793
- return /* @__PURE__ */ jsx47(
8071
+ return /* @__PURE__ */ jsx48(
7794
8072
  SortableRootContext.Provider,
7795
8073
  {
7796
8074
  value: contextValue,
7797
- children: /* @__PURE__ */ jsx47(
8075
+ children: /* @__PURE__ */ jsx48(
7798
8076
  DndContext,
7799
8077
  {
7800
8078
  collisionDetection: collisionDetection ?? config.collisionDetection,
@@ -7815,7 +8093,7 @@ function Sortable(props) {
7815
8093
  }
7816
8094
  );
7817
8095
  }
7818
- var SortableContentContext = React15.createContext(false);
8096
+ var SortableContentContext = React16.createContext(false);
7819
8097
  function SortableContent(props) {
7820
8098
  const {
7821
8099
  strategy: strategyProp,
@@ -7843,7 +8121,7 @@ function SortableContent(props) {
7843
8121
  },
7844
8122
  enabled: !withoutSlot
7845
8123
  });
7846
- return /* @__PURE__ */ jsx47(SortableContentContext.Provider, { value: true, children: /* @__PURE__ */ jsx47(
8124
+ return /* @__PURE__ */ jsx48(SortableContentContext.Provider, { value: true, children: /* @__PURE__ */ jsx48(
7847
8125
  SortableContext,
7848
8126
  {
7849
8127
  items: context.items,
@@ -7852,9 +8130,9 @@ function SortableContent(props) {
7852
8130
  }
7853
8131
  ) });
7854
8132
  }
7855
- var SortableItemContext = React15.createContext(null);
8133
+ var SortableItemContext = React16.createContext(null);
7856
8134
  function useSortableItemContext(consumerName) {
7857
- const context = React15.useContext(SortableItemContext);
8135
+ const context = React16.useContext(SortableItemContext);
7858
8136
  if (!context) {
7859
8137
  throw new Error(`\`${consumerName}\` must be used within \`${ITEM_NAME}\``);
7860
8138
  }
@@ -7871,8 +8149,8 @@ function SortableItem(props) {
7871
8149
  ref,
7872
8150
  ...itemProps
7873
8151
  } = props;
7874
- const inSortableContent = React15.useContext(SortableContentContext);
7875
- const inSortableOverlay = React15.useContext(SortableOverlayContext);
8152
+ const inSortableContent = React16.useContext(SortableContentContext);
8153
+ const inSortableOverlay = React16.useContext(SortableOverlayContext);
7876
8154
  if (!inSortableContent && !inSortableOverlay) {
7877
8155
  throw new Error(
7878
8156
  `\`${ITEM_NAME}\` must be used within \`${CONTENT_NAME}\` or \`${OVERLAY_NAME}\``
@@ -7882,7 +8160,7 @@ function SortableItem(props) {
7882
8160
  throw new Error(`\`${ITEM_NAME}\` value cannot be an empty string`);
7883
8161
  }
7884
8162
  const context = useSortableContext(ITEM_NAME);
7885
- const id = React15.useId();
8163
+ const id = React16.useId();
7886
8164
  const {
7887
8165
  attributes,
7888
8166
  listeners,
@@ -7892,7 +8170,7 @@ function SortableItem(props) {
7892
8170
  transition,
7893
8171
  isDragging
7894
8172
  } = useSortable({ id: value, disabled });
7895
- const onNodeRefChange = React15.useCallback(
8173
+ const onNodeRefChange = React16.useCallback(
7896
8174
  (node) => {
7897
8175
  if (disabled) return;
7898
8176
  setNodeRef(node);
@@ -7901,14 +8179,14 @@ function SortableItem(props) {
7901
8179
  [disabled, asHandle, setNodeRef, setActivatorNodeRef]
7902
8180
  );
7903
8181
  const composedRef = useComposedRefs(ref, onNodeRefChange);
7904
- const composedStyle = React15.useMemo(() => {
8182
+ const composedStyle = React16.useMemo(() => {
7905
8183
  return {
7906
8184
  transform: CSS.Translate.toString(transform),
7907
8185
  transition,
7908
8186
  ...style
7909
8187
  };
7910
8188
  }, [transform, transition, style]);
7911
- const itemContext = React15.useMemo(
8189
+ const itemContext = React16.useMemo(
7912
8190
  () => ({
7913
8191
  id,
7914
8192
  attributes,
@@ -7927,7 +8205,7 @@ function SortableItem(props) {
7927
8205
  id,
7928
8206
  ref: composedRef,
7929
8207
  style: composedStyle,
7930
- className: cn(
8208
+ className: cn45(
7931
8209
  "focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:outline-hidden",
7932
8210
  {
7933
8211
  "touch-none select-none": asHandle,
@@ -7950,7 +8228,7 @@ function SortableItem(props) {
7950
8228
  ...isDragging && { dragging: "" }
7951
8229
  }
7952
8230
  });
7953
- return /* @__PURE__ */ jsx47(SortableItemContext.Provider, { value: itemContext, children: element });
8231
+ return /* @__PURE__ */ jsx48(SortableItemContext.Provider, { value: itemContext, children: element });
7954
8232
  }
7955
8233
  function SortableItemHandle(props) {
7956
8234
  const { disabled, className, render, ref, ...itemHandleProps } = props;
@@ -7958,7 +8236,7 @@ function SortableItemHandle(props) {
7958
8236
  const itemContext = useSortableItemContext(ITEM_HANDLE_NAME);
7959
8237
  const isDisabled = disabled ?? itemContext.disabled;
7960
8238
  const { setActivatorNodeRef } = itemContext;
7961
- const onActivatorNodeRef = React15.useCallback(
8239
+ const onActivatorNodeRef = React16.useCallback(
7962
8240
  (node) => {
7963
8241
  if (isDisabled) return;
7964
8242
  setActivatorNodeRef(node);
@@ -7975,7 +8253,7 @@ function SortableItemHandle(props) {
7975
8253
  "aria-controls": itemContext.id,
7976
8254
  ref: composedRef,
7977
8255
  disabled: isDisabled,
7978
- className: cn(
8256
+ className: cn45(
7979
8257
  "select-none disabled:pointer-events-none disabled:opacity-50",
7980
8258
  context.flatCursor ? "cursor-default" : "cursor-grab data-dragging:cursor-grabbing",
7981
8259
  className
@@ -7992,7 +8270,7 @@ function SortableItemHandle(props) {
7992
8270
  }
7993
8271
  });
7994
8272
  }
7995
- var SortableOverlayContext = React15.createContext(false);
8273
+ var SortableOverlayContext = React16.createContext(false);
7996
8274
  var dropAnimation = {
7997
8275
  sideEffects: defaultDropAnimationSideEffects({
7998
8276
  styles: {
@@ -8005,19 +8283,19 @@ var dropAnimation = {
8005
8283
  function SortableOverlay(props) {
8006
8284
  const { container: containerProp, children, ...overlayProps } = props;
8007
8285
  const context = useSortableContext(OVERLAY_NAME);
8008
- const [mounted, setMounted] = React15.useState(false);
8286
+ const [mounted, setMounted] = React16.useState(false);
8009
8287
  useIsomorphicLayoutEffect(() => setMounted(true), []);
8010
8288
  const container = containerProp ?? (mounted ? globalThis.document?.body : null);
8011
8289
  if (!container) return null;
8012
8290
  return ReactDOM.createPortal(
8013
- /* @__PURE__ */ jsx47(
8291
+ /* @__PURE__ */ jsx48(
8014
8292
  DragOverlay,
8015
8293
  {
8016
8294
  dropAnimation,
8017
8295
  modifiers: context.modifiers,
8018
- className: cn(!context.flatCursor && "cursor-grabbing"),
8296
+ className: cn45(!context.flatCursor && "cursor-grabbing"),
8019
8297
  ...overlayProps,
8020
- children: /* @__PURE__ */ jsx47(SortableOverlayContext.Provider, { value: true, children: context.activeId ? typeof children === "function" ? children({ value: context.activeId }) : children : null })
8298
+ children: /* @__PURE__ */ jsx48(SortableOverlayContext.Provider, { value: true, children: context.activeId ? typeof children === "function" ? children({ value: context.activeId }) : children : null })
8021
8299
  }
8022
8300
  ),
8023
8301
  container
@@ -8026,23 +8304,24 @@ function SortableOverlay(props) {
8026
8304
 
8027
8305
  // src/ui/switch.tsx
8028
8306
  import { Switch as SwitchPrimitive } from "@base-ui/react/switch";
8029
- import { jsx as jsx48 } from "react/jsx-runtime";
8307
+ import { cn as cn46 } from "cn";
8308
+ import { jsx as jsx49 } from "react/jsx-runtime";
8030
8309
  function Switch({
8031
8310
  className,
8032
8311
  size = "default",
8033
8312
  ...props
8034
8313
  }) {
8035
- return /* @__PURE__ */ jsx48(
8314
+ return /* @__PURE__ */ jsx49(
8036
8315
  SwitchPrimitive.Root,
8037
8316
  {
8038
8317
  "data-slot": "switch",
8039
8318
  "data-size": size,
8040
- className: cn(
8319
+ className: cn46(
8041
8320
  "peer group/switch relative inline-flex shrink-0 items-center rounded-full border border-transparent transition-[background-color,border-color,box-shadow,opacity] duration-150 ease-out outline-none after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-2 focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-[size=default]:h-[18.4px] data-[size=default]:w-8 data-[size=sm]:h-3.5 data-[size=sm]:w-6 motion-reduce:transition-none dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:bg-primary data-unchecked:bg-input dark:data-unchecked:bg-input/80 data-disabled:cursor-not-allowed data-disabled:opacity-50",
8042
8321
  className
8043
8322
  ),
8044
8323
  ...props,
8045
- children: /* @__PURE__ */ jsx48(
8324
+ children: /* @__PURE__ */ jsx49(
8046
8325
  SwitchPrimitive.Thumb,
8047
8326
  {
8048
8327
  "data-slot": "switch-thumb",
@@ -8054,6 +8333,7 @@ function Switch({
8054
8333
  }
8055
8334
 
8056
8335
  // src/icon/bell.tsx
8336
+ import { cn as cn47 } from "cn";
8057
8337
  import {
8058
8338
  LazyMotion,
8059
8339
  domMin,
@@ -8069,7 +8349,7 @@ import {
8069
8349
  useRef as useRef6,
8070
8350
  useState as useState12
8071
8351
  } from "react";
8072
- import { jsx as jsx49, jsxs as jsxs26 } from "react/jsx-runtime";
8352
+ import { jsx as jsx50, jsxs as jsxs26 } from "react/jsx-runtime";
8073
8353
  var BellIcon = forwardRef5(
8074
8354
  ({
8075
8355
  onMouseEnter,
@@ -8169,10 +8449,10 @@ var BellIcon = forwardRef5(
8169
8449
  }
8170
8450
  }
8171
8451
  };
8172
- return /* @__PURE__ */ jsx49(LazyMotion, { features: domMin, strict: true, children: /* @__PURE__ */ jsx49(
8452
+ return /* @__PURE__ */ jsx50(LazyMotion, { features: domMin, strict: true, children: /* @__PURE__ */ jsx50(
8173
8453
  m.div,
8174
8454
  {
8175
- className: cn("relative inline-flex", className),
8455
+ className: cn47("relative inline-flex", className),
8176
8456
  onMouseEnter: handleEnter,
8177
8457
  onMouseLeave: handleLeave,
8178
8458
  ...props,
@@ -8194,8 +8474,8 @@ var BellIcon = forwardRef5(
8194
8474
  variants: bellVariants,
8195
8475
  style: { transformOrigin: "top center" },
8196
8476
  children: [
8197
- /* @__PURE__ */ jsx49(m.path, { d: "M10.268 21a2 2 0 0 0 3.464 0", variants: clapperVariants }),
8198
- /* @__PURE__ */ jsx49("path", { d: "M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326" })
8477
+ /* @__PURE__ */ jsx50(m.path, { d: "M10.268 21a2 2 0 0 0 3.464 0", variants: clapperVariants }),
8478
+ /* @__PURE__ */ jsx50("path", { d: "M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326" })
8199
8479
  ]
8200
8480
  }
8201
8481
  )
@@ -8206,51 +8486,50 @@ var BellIcon = forwardRef5(
8206
8486
  BellIcon.displayName = "BellIcon";
8207
8487
 
8208
8488
  // src/icon/icon-swap.tsx
8209
- import { jsx as jsx50, jsxs as jsxs27 } from "react/jsx-runtime";
8489
+ import { cn as cn48 } from "cn";
8490
+ import { jsx as jsx51, jsxs as jsxs27 } from "react/jsx-runtime";
8210
8491
  function IconSwap({ active, first, second, className }) {
8211
8492
  return /* @__PURE__ */ jsxs27(
8212
8493
  "span",
8213
8494
  {
8214
8495
  "aria-hidden": "true",
8215
- className: cn("t-icon-swap", className),
8496
+ className: cn48("t-icon-swap", className),
8216
8497
  "data-state": active ? "b" : "a",
8217
8498
  children: [
8218
- /* @__PURE__ */ jsx50("span", { className: "t-icon", "data-icon": "a", children: first }),
8219
- /* @__PURE__ */ jsx50("span", { className: "t-icon", "data-icon": "b", children: second })
8499
+ /* @__PURE__ */ jsx51("span", { className: "t-icon", "data-icon": "a", children: first }),
8500
+ /* @__PURE__ */ jsx51("span", { className: "t-icon", "data-icon": "b", children: second })
8220
8501
  ]
8221
8502
  }
8222
8503
  );
8223
8504
  }
8224
8505
 
8225
8506
  // src/icon/loader.tsx
8226
- import React16 from "react";
8227
- import { jsx as jsx51 } from "react/jsx-runtime";
8228
- var Loader = React16.forwardRef(
8507
+ import { cn as cn49 } from "cn";
8508
+ import React17 from "react";
8509
+ import { jsx as jsx52 } from "react/jsx-runtime";
8510
+ var Loader = React17.forwardRef(
8229
8511
  ({ className, size = 16, color = "currentColor", style, ...props }, ref) => {
8230
8512
  const bars = Array(12).fill(0);
8231
- return /* @__PURE__ */ jsx51(
8513
+ return /* @__PURE__ */ jsx52(
8232
8514
  "div",
8233
8515
  {
8234
8516
  ref,
8235
- className: cn("loader-wrapper", className),
8517
+ className: cn49("loader-wrapper", className),
8236
8518
  style: {
8237
8519
  "--spinner-size": `${size}px`,
8238
8520
  "--spinner-color": color,
8239
8521
  ...style
8240
8522
  },
8241
8523
  ...props,
8242
- children: /* @__PURE__ */ jsx51("div", { className: "loader-spinner", children: bars.map((_, i) => /* @__PURE__ */ jsx51("div", { className: "loader-bar" }, `spinner-bar-${i}`)) })
8524
+ children: /* @__PURE__ */ jsx52("div", { className: "loader-spinner", children: bars.map((_, i) => /* @__PURE__ */ jsx52("div", { className: "loader-bar" }, `spinner-bar-${i}`)) })
8243
8525
  }
8244
8526
  );
8245
8527
  }
8246
8528
  );
8247
8529
  Loader.displayName = "SpellUI.Loader";
8248
8530
 
8249
- // src/utils/index.ts
8250
- function getCountryFlagUrl(countryCode, size = "24") {
8251
- if (!countryCode) return "";
8252
- return `https://flagcdn.com/${size}x${Math.floor(Number(size) * 0.75)}/${countryCode.toLowerCase()}.png`;
8253
- }
8531
+ // src/index.ts
8532
+ import { cn as cn50 } from "cn";
8254
8533
  export {
8255
8534
  Accordion,
8256
8535
  AccordionContent,
@@ -8268,6 +8547,7 @@ export {
8268
8547
  AlertDialogPortal,
8269
8548
  AlertDialogTitle,
8270
8549
  AlertDialogTrigger,
8550
+ div_default as AnimatedDiv,
8271
8551
  Apple,
8272
8552
  Ariakit,
8273
8553
  Autocomplete,
@@ -8479,6 +8759,7 @@ export {
8479
8759
  SPRING_SWAP,
8480
8760
  ScrollArea,
8481
8761
  ScrollBar,
8762
+ SearchParams,
8482
8763
  Select,
8483
8764
  SelectContent,
8484
8765
  SelectGroup,
@@ -8510,35 +8791,63 @@ export {
8510
8791
  Top,
8511
8792
  activityItemAnimation,
8512
8793
  badgeVariants,
8794
+ buildFlagSearchParamHref,
8513
8795
  buttonGroupVariants,
8514
8796
  buttonVariants,
8515
- cn,
8797
+ cn50 as cn,
8798
+ composeRefs,
8516
8799
  createFilter,
8517
8800
  createFilterGroup,
8518
8801
  fromLeftChildren,
8519
8802
  fromLeftVariant,
8520
8803
  fromRightVariant,
8521
8804
  fromTopVariant,
8522
- getCountryFlagUrl,
8805
+ getNativeAppPlugin,
8806
+ getNativeAppSettingsPlugin,
8807
+ getNativeBrowserPlugin,
8808
+ getNativeCameraPlugin,
8809
+ getNativeImagePickerPlugin,
8810
+ getNativeInAppUpdatePlugin,
8811
+ getNativePaymentPlugin,
8812
+ getNativePlatform,
8813
+ getNativeShareFilePlugin,
8814
+ getNativeSharePlugin,
8815
+ getNativeShareTargetPlugin,
8816
+ getNativeStatusBarPlugin,
8817
+ getNativeThemePlugin,
8818
+ getOpenAI,
8523
8819
  getSkeletonVariantDuration,
8524
8820
  hamFastFadeContainer,
8821
+ hasFlagSearchParam,
8525
8822
  headingFromLeft,
8823
+ isNativeApp,
8526
8824
  kanbanOrderCardAnimation,
8527
8825
  kanbanOrderCardLayoutTransition,
8528
8826
  kanbanOrderCardReducedMotionAnimation,
8529
8827
  mobileNavItemSideways,
8828
+ nativeSharedFileToFile,
8530
8829
  opacityVariant,
8830
+ openExternalUrl,
8831
+ openNativeAppSettings,
8832
+ openUpiPaymentUrl,
8833
+ pickNativeChooserImageFiles,
8834
+ pickNativeImageFiles,
8531
8835
  popUp,
8532
8836
  popUpFromBottomForText,
8533
8837
  resolveSkeletonA11yProps,
8838
+ saveNativeShareImage,
8534
8839
  searchBarSlideAnimation,
8535
8840
  searchFocus,
8841
+ searchParamKeys,
8842
+ searchParams,
8843
+ shareNativeOrWeb,
8536
8844
  skeletonRoundedClasses,
8537
8845
  skeletonVariantDefaultDuration,
8538
8846
  svgVariant,
8539
8847
  useAutocompleteFilter,
8540
8848
  useCarousel,
8541
8849
  useComboboxAnchor,
8850
+ useComposedRefs,
8542
8851
  useJellyMood,
8543
8852
  useMediaQuery,
8544
8853
  useMessageScroller,