@rock.star/ui 1.1.4 → 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
  ),
@@ -3555,9 +3828,9 @@ function useMediaQuery(query) {
3555
3828
 
3556
3829
  // src/ui/farmer/div.tsx
3557
3830
  import { motion as motion5 } from "motion/react";
3558
- import React9 from "react";
3831
+ import React10 from "react";
3559
3832
  import { jsx as jsx29 } from "react/jsx-runtime";
3560
- var AnimatedDiv = React9.forwardRef(
3833
+ var AnimatedDiv = React10.forwardRef(
3561
3834
  ({ variants, mobileVariants, className, children, infinity, ...motionProps }, ref) => {
3562
3835
  const isDesktop = useMediaQuery("(min-width: 768px)");
3563
3836
  const selectedVariants = !isDesktop && mobileVariants ? mobileVariants : variants;
@@ -3879,15 +4152,17 @@ var kanbanOrderCardLayoutTransition = {
3879
4152
  // src/ui/field.tsx
3880
4153
  import { cva as cva7 } from "class-variance-authority";
3881
4154
  import { useMemo as useMemo3 } from "react";
4155
+ import { cn as cn30 } from "cn";
3882
4156
 
3883
4157
  // src/ui/label.tsx
4158
+ import { cn as cn29 } from "cn";
3884
4159
  import { jsx as jsx30 } from "react/jsx-runtime";
3885
4160
  function Label({ className, ...props }) {
3886
4161
  return /* @__PURE__ */ jsx30(
3887
4162
  "label",
3888
4163
  {
3889
4164
  "data-slot": "label",
3890
- className: cn(
4165
+ className: cn29(
3891
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",
3892
4167
  className
3893
4168
  ),
@@ -3903,7 +4178,7 @@ function FieldSet({ className, ...props }) {
3903
4178
  "fieldset",
3904
4179
  {
3905
4180
  "data-slot": "field-set",
3906
- className: cn(
4181
+ className: cn30(
3907
4182
  "flex flex-col gap-1 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3",
3908
4183
  className
3909
4184
  ),
@@ -3921,7 +4196,7 @@ function FieldLegend({
3921
4196
  {
3922
4197
  "data-slot": "field-legend",
3923
4198
  "data-variant": variant,
3924
- className: cn(
4199
+ className: cn30(
3925
4200
  "mb-1.5 font-medium data-[variant=label]:text-sm data-[variant=legend]:text-base",
3926
4201
  className
3927
4202
  ),
@@ -3934,7 +4209,7 @@ function FieldGroup({ className, ...props }) {
3934
4209
  "div",
3935
4210
  {
3936
4211
  "data-slot": "field-group",
3937
- className: cn(
4212
+ className: cn30(
3938
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",
3939
4214
  className
3940
4215
  ),
@@ -3968,7 +4243,7 @@ function Field({
3968
4243
  role: "group",
3969
4244
  "data-slot": "field",
3970
4245
  "data-orientation": orientation,
3971
- className: cn(fieldVariants({ orientation }), className),
4246
+ className: cn30(fieldVariants({ orientation }), className),
3972
4247
  ...props
3973
4248
  }
3974
4249
  );
@@ -3978,7 +4253,7 @@ function FieldContent({ className, ...props }) {
3978
4253
  "div",
3979
4254
  {
3980
4255
  "data-slot": "field-content",
3981
- className: cn(
4256
+ className: cn30(
3982
4257
  "group/field-content flex flex-1 flex-col gap-0.5 leading-snug",
3983
4258
  className
3984
4259
  ),
@@ -3994,7 +4269,7 @@ function FieldLabel({
3994
4269
  Label,
3995
4270
  {
3996
4271
  "data-slot": "field-label",
3997
- className: cn(
4272
+ className: cn30(
3998
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",
3999
4274
  "has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col",
4000
4275
  className
@@ -4008,7 +4283,7 @@ function FieldTitle({ className, ...props }) {
4008
4283
  "div",
4009
4284
  {
4010
4285
  "data-slot": "field-label",
4011
- className: cn(
4286
+ className: cn30(
4012
4287
  "flex w-fit items-center gap-2 text-sm font-medium group-data-[disabled=true]/field:opacity-50",
4013
4288
  className
4014
4289
  ),
@@ -4021,7 +4296,7 @@ function FieldDescription({ className, ...props }) {
4021
4296
  "p",
4022
4297
  {
4023
4298
  "data-slot": "field-description",
4024
- className: cn(
4299
+ className: cn30(
4025
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",
4026
4301
  "last:mt-0 nth-last-2:-mt-1",
4027
4302
  "[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary",
@@ -4041,7 +4316,7 @@ function FieldSeparator({
4041
4316
  {
4042
4317
  "data-slot": "field-separator",
4043
4318
  "data-content": !!children,
4044
- className: cn(
4319
+ className: cn30(
4045
4320
  "relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2",
4046
4321
  className
4047
4322
  ),
@@ -4091,7 +4366,7 @@ function FieldError({
4091
4366
  {
4092
4367
  role: "alert",
4093
4368
  "data-slot": "field-error",
4094
- className: cn("text-sm font-normal text-destructive", className),
4369
+ className: cn30("text-sm font-normal text-destructive", className),
4095
4370
  ...props,
4096
4371
  children: content
4097
4372
  }
@@ -4100,7 +4375,8 @@ function FieldError({
4100
4375
 
4101
4376
  // src/ui/image.tsx
4102
4377
  import NextImage from "next/image";
4103
- import { useCallback as useCallback2, useState as useState5 } from "react";
4378
+ import { useCallback as useCallback3, useState as useState5 } from "react";
4379
+ import { cn as cn31 } from "cn";
4104
4380
  import { jsx as jsx32, jsxs as jsxs17 } from "react/jsx-runtime";
4105
4381
  function srcValue(src) {
4106
4382
  if (!src) return null;
@@ -4132,16 +4408,16 @@ function Image({
4132
4408
  const loaded = hasSource && loadedSrc === currentSrc && !failed;
4133
4409
  const shouldPreload = preload ?? loading === "eager";
4134
4410
  const imageLoading = shouldPreload ? "eager" : loading;
4135
- const markLoaded = useCallback2(() => {
4411
+ const markLoaded = useCallback3(() => {
4136
4412
  if (!currentSrc) return;
4137
4413
  setFailedSrc(null);
4138
4414
  setLoadedSrc(currentSrc);
4139
4415
  }, [currentSrc]);
4140
- const markFailed = useCallback2(() => {
4416
+ const markFailed = useCallback3(() => {
4141
4417
  if (!currentSrc) return;
4142
4418
  setFailedSrc(currentSrc);
4143
4419
  }, [currentSrc]);
4144
- return /* @__PURE__ */ jsxs17("section", { className: cn("relative block overflow-hidden", wrapper), children: [
4420
+ return /* @__PURE__ */ jsxs17("section", { className: cn31("relative block overflow-hidden", wrapper), children: [
4145
4421
  showSkeleton && !loaded && !failed && hasSource && /* @__PURE__ */ jsx32(Skeleton, { className: "absolute inset-0 size-full" }),
4146
4422
  hasSource && !failed ? /* @__PURE__ */ jsx32(
4147
4423
  NextImage,
@@ -4153,7 +4429,7 @@ function Image({
4153
4429
  loading: imageLoading,
4154
4430
  preload: shouldPreload,
4155
4431
  fetchPriority: fetchPriority ?? (imageLoading === "eager" ? "high" : void 0),
4156
- className: cn(
4432
+ className: cn31(
4157
4433
  "transition-opacity duration-200",
4158
4434
  loaded ? "opacity-100" : "opacity-0",
4159
4435
  className
@@ -4173,8 +4449,9 @@ function Image({
4173
4449
  }
4174
4450
 
4175
4451
  // src/ui/input-otp.tsx
4176
- import * as React10 from "react";
4452
+ import * as React11 from "react";
4177
4453
  import { OTPInput, OTPInputContext } from "input-otp";
4454
+ import { cn as cn32 } from "cn";
4178
4455
  import { MinusIcon } from "lucide-react";
4179
4456
  import { jsx as jsx33, jsxs as jsxs18 } from "react/jsx-runtime";
4180
4457
  function InputOTP({
@@ -4186,12 +4463,12 @@ function InputOTP({
4186
4463
  OTPInput,
4187
4464
  {
4188
4465
  "data-slot": "input-otp",
4189
- containerClassName: cn(
4466
+ containerClassName: cn32(
4190
4467
  "cn-input-otp flex items-center has-disabled:opacity-50",
4191
4468
  containerClassName
4192
4469
  ),
4193
4470
  spellCheck: false,
4194
- className: cn("disabled:cursor-not-allowed", className),
4471
+ className: cn32("disabled:cursor-not-allowed", className),
4195
4472
  ...props
4196
4473
  }
4197
4474
  );
@@ -4201,7 +4478,7 @@ function InputOTPGroup({ className, ...props }) {
4201
4478
  "div",
4202
4479
  {
4203
4480
  "data-slot": "input-otp-group",
4204
- className: cn(
4481
+ className: cn32(
4205
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",
4206
4483
  className
4207
4484
  ),
@@ -4214,14 +4491,14 @@ function InputOTPSlot({
4214
4491
  className,
4215
4492
  ...props
4216
4493
  }) {
4217
- const inputOTPContext = React10.useContext(OTPInputContext);
4494
+ const inputOTPContext = React11.useContext(OTPInputContext);
4218
4495
  const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {};
4219
4496
  return /* @__PURE__ */ jsxs18(
4220
4497
  "div",
4221
4498
  {
4222
4499
  "data-slot": "input-otp-slot",
4223
4500
  "data-active": isActive,
4224
- className: cn(
4501
+ className: cn32(
4225
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",
4226
4503
  className
4227
4504
  ),
@@ -4250,6 +4527,7 @@ function InputOTPSeparator({ ...props }) {
4250
4527
  import { mergeProps as mergeProps4 } from "@base-ui/react/merge-props";
4251
4528
  import { useRender as useRender4 } from "@base-ui/react/use-render";
4252
4529
  import { cva as cva8 } from "class-variance-authority";
4530
+ import { cn as cn33 } from "cn";
4253
4531
  import { jsx as jsx34 } from "react/jsx-runtime";
4254
4532
  function ItemGroup({ className, ...props }) {
4255
4533
  return /* @__PURE__ */ jsx34(
@@ -4257,7 +4535,7 @@ function ItemGroup({ className, ...props }) {
4257
4535
  {
4258
4536
  role: "list",
4259
4537
  "data-slot": "item-group",
4260
- className: cn(
4538
+ className: cn33(
4261
4539
  "group/item-group flex w-full flex-col gap-4 has-data-[size=sm]:gap-2.5 has-data-[size=xs]:gap-2",
4262
4540
  className
4263
4541
  ),
@@ -4274,7 +4552,7 @@ function ItemSeparator({
4274
4552
  {
4275
4553
  "data-slot": "item-separator",
4276
4554
  orientation: "horizontal",
4277
- className: cn("my-2", className),
4555
+ className: cn33("my-2", className),
4278
4556
  ...props
4279
4557
  }
4280
4558
  );
@@ -4311,7 +4589,7 @@ function Item({
4311
4589
  defaultTagName: "div",
4312
4590
  props: mergeProps4(
4313
4591
  {
4314
- className: cn(itemVariants({ variant, size, className }))
4592
+ className: cn33(itemVariants({ variant, size, className }))
4315
4593
  },
4316
4594
  props
4317
4595
  ),
@@ -4348,7 +4626,7 @@ function ItemMedia({
4348
4626
  {
4349
4627
  "data-slot": "item-media",
4350
4628
  "data-variant": variant,
4351
- className: cn(itemMediaVariants({ variant, className })),
4629
+ className: cn33(itemMediaVariants({ variant, className })),
4352
4630
  ...props
4353
4631
  }
4354
4632
  );
@@ -4358,7 +4636,7 @@ function ItemContent({ className, ...props }) {
4358
4636
  "div",
4359
4637
  {
4360
4638
  "data-slot": "item-content",
4361
- className: cn(
4639
+ className: cn33(
4362
4640
  "flex flex-1 flex-col gap-1 group-data-[size=xs]/item:gap-0 [&+[data-slot=item-content]]:flex-none",
4363
4641
  className
4364
4642
  ),
@@ -4371,7 +4649,7 @@ function ItemTitle({ className, ...props }) {
4371
4649
  "div",
4372
4650
  {
4373
4651
  "data-slot": "item-title",
4374
- className: cn(
4652
+ className: cn33(
4375
4653
  "line-clamp-1 flex w-fit items-center gap-2 text-sm leading-snug font-medium underline-offset-4",
4376
4654
  className
4377
4655
  ),
@@ -4384,7 +4662,7 @@ function ItemDescription({ className, ...props }) {
4384
4662
  "p",
4385
4663
  {
4386
4664
  "data-slot": "item-description",
4387
- className: cn(
4665
+ className: cn33(
4388
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",
4389
4667
  className
4390
4668
  ),
@@ -4397,7 +4675,7 @@ function ItemActions({ className, ...props }) {
4397
4675
  "div",
4398
4676
  {
4399
4677
  "data-slot": "item-actions",
4400
- className: cn("flex items-center gap-2", className),
4678
+ className: cn33("flex items-center gap-2", className),
4401
4679
  ...props
4402
4680
  }
4403
4681
  );
@@ -4407,7 +4685,7 @@ function ItemHeader({ className, ...props }) {
4407
4685
  "div",
4408
4686
  {
4409
4687
  "data-slot": "item-header",
4410
- className: cn(
4688
+ className: cn33(
4411
4689
  "flex basis-full items-center justify-between gap-2",
4412
4690
  className
4413
4691
  ),
@@ -4420,7 +4698,7 @@ function ItemFooter({ className, ...props }) {
4420
4698
  "div",
4421
4699
  {
4422
4700
  "data-slot": "item-footer",
4423
- className: cn(
4701
+ className: cn33(
4424
4702
  "flex basis-full items-center justify-between gap-2",
4425
4703
  className
4426
4704
  ),
@@ -4460,7 +4738,7 @@ import {
4460
4738
  useQueryStates
4461
4739
  } from "nuqs";
4462
4740
  import { NuqsAdapter } from "nuqs/adapters/next/app";
4463
- import * as React11 from "react";
4741
+ import * as React12 from "react";
4464
4742
  var SEARCH_DELAY = 500;
4465
4743
  var PRODUCT_SEARCH_DELAY = 800;
4466
4744
  function isSearchPath(pathname) {
@@ -4482,7 +4760,7 @@ function useSearchParams() {
4482
4760
  const pathname = usePathname();
4483
4761
  const router = useRouter2();
4484
4762
  const nativeSearchParams = useNextSearchParams();
4485
- const [isPending, startTransition] = React11.useTransition();
4763
+ const [isPending, startTransition] = React12.useTransition();
4486
4764
  const [params, setParams] = useQueryStates(searchParams, {
4487
4765
  urlKeys: searchParamKeys,
4488
4766
  history: "replace",
@@ -4490,18 +4768,18 @@ function useSearchParams() {
4490
4768
  scroll: false,
4491
4769
  startTransition
4492
4770
  });
4493
- const productQueryRef = React11.useRef(params.query);
4494
- const productNavigationQueuedRef = React11.useRef(false);
4771
+ const productQueryRef = React12.useRef(params.query);
4772
+ const productNavigationQueuedRef = React12.useRef(false);
4495
4773
  const onSearchPath = isSearchPath(pathname);
4496
4774
  const cart = hasFlagSearchParam(nativeSearchParams, "cart");
4497
4775
  const notification = hasFlagSearchParam(nativeSearchParams, "notification");
4498
- const updateParams = React11.useCallback(
4776
+ const updateParams = React12.useCallback(
4499
4777
  (values, options) => {
4500
4778
  void setParams(values, options);
4501
4779
  },
4502
4780
  [setParams]
4503
4781
  );
4504
- const setQuery = React11.useCallback(
4782
+ const setQuery = React12.useCallback(
4505
4783
  (value) => {
4506
4784
  const update = setParams(
4507
4785
  { query: value, page: 1 },
@@ -4528,13 +4806,13 @@ function useSearchParams() {
4528
4806
  },
4529
4807
  [onSearchPath, router, setParams]
4530
4808
  );
4531
- const commitQuery = React11.useCallback(() => {
4809
+ const commitQuery = React12.useCallback(() => {
4532
4810
  const query = params.query.trim();
4533
4811
  if (!query || onSearchPath) return;
4534
4812
  pendingSearchFocus = true;
4535
4813
  router.push(searchHref(query), { scroll: true });
4536
4814
  }, [onSearchPath, params.query, router]);
4537
- const setCategory = React11.useCallback(
4815
+ const setCategory = React12.useCallback(
4538
4816
  (value) => {
4539
4817
  updateParams(
4540
4818
  { category: value, page: 1 },
@@ -4543,7 +4821,7 @@ function useSearchParams() {
4543
4821
  },
4544
4822
  [updateParams]
4545
4823
  );
4546
- const setProductStatus = React11.useCallback(
4824
+ const setProductStatus = React12.useCallback(
4547
4825
  (value) => {
4548
4826
  updateParams(
4549
4827
  { productStatus: value, page: 1 },
@@ -4552,7 +4830,7 @@ function useSearchParams() {
4552
4830
  },
4553
4831
  [updateParams]
4554
4832
  );
4555
- const setUser = React11.useCallback(
4833
+ const setUser = React12.useCallback(
4556
4834
  (value) => {
4557
4835
  updateParams(
4558
4836
  { user: value },
@@ -4566,7 +4844,7 @@ function useSearchParams() {
4566
4844
  },
4567
4845
  [updateParams]
4568
4846
  );
4569
- const setPage = React11.useCallback(
4847
+ const setPage = React12.useCallback(
4570
4848
  (value) => {
4571
4849
  updateParams(
4572
4850
  { page: value },
@@ -4575,7 +4853,7 @@ function useSearchParams() {
4575
4853
  },
4576
4854
  [updateParams]
4577
4855
  );
4578
- const setUserTransaction = React11.useCallback(
4856
+ const setUserTransaction = React12.useCallback(
4579
4857
  (value) => {
4580
4858
  updateParams(
4581
4859
  { user: value, transaction: "", transactionPage: 1 },
@@ -4584,7 +4862,7 @@ function useSearchParams() {
4584
4862
  },
4585
4863
  [updateParams]
4586
4864
  );
4587
- const setTransactionDetail = React11.useCallback(
4865
+ const setTransactionDetail = React12.useCallback(
4588
4866
  (value) => {
4589
4867
  updateParams(
4590
4868
  { transaction: value },
@@ -4593,19 +4871,19 @@ function useSearchParams() {
4593
4871
  },
4594
4872
  [updateParams]
4595
4873
  );
4596
- const clearTransactionDetail = React11.useCallback(() => {
4874
+ const clearTransactionDetail = React12.useCallback(() => {
4597
4875
  updateParams(
4598
4876
  { transaction: "" },
4599
4877
  { history: "replace", shallow: false, scroll: false }
4600
4878
  );
4601
4879
  }, [updateParams]);
4602
- const clearUserTransaction = React11.useCallback(() => {
4880
+ const clearUserTransaction = React12.useCallback(() => {
4603
4881
  updateParams(
4604
4882
  { user: "", transaction: "", transactionPage: 1 },
4605
4883
  { history: "replace", shallow: false, scroll: false }
4606
4884
  );
4607
4885
  }, [updateParams]);
4608
- const clearAll = React11.useCallback(() => {
4886
+ const clearAll = React12.useCallback(() => {
4609
4887
  updateParams(
4610
4888
  {
4611
4889
  query: "",
@@ -4623,7 +4901,7 @@ function useSearchParams() {
4623
4901
  }
4624
4902
  );
4625
4903
  }, [updateParams]);
4626
- const setCart = React11.useCallback(
4904
+ const setCart = React12.useCallback(
4627
4905
  (value) => {
4628
4906
  window.history.replaceState(
4629
4907
  null,
@@ -4633,10 +4911,10 @@ function useSearchParams() {
4633
4911
  },
4634
4912
  [nativeSearchParams, pathname]
4635
4913
  );
4636
- const toggleCart = React11.useCallback(() => {
4914
+ const toggleCart = React12.useCallback(() => {
4637
4915
  setCart(!cart);
4638
4916
  }, [cart, setCart]);
4639
- const setNotification = React11.useCallback(
4917
+ const setNotification = React12.useCallback(
4640
4918
  (value) => {
4641
4919
  window.history.replaceState(
4642
4920
  null,
@@ -4694,7 +4972,8 @@ import {
4694
4972
  BlobSpeech,
4695
4973
  JellyBlobMascot
4696
4974
  } from "feral-blob";
4697
- import * as React12 from "react";
4975
+ import * as React13 from "react";
4976
+ import { cn as cn34 } from "cn";
4698
4977
  import {
4699
4978
  BlobSpeech as BlobSpeech2,
4700
4979
  JellyBlobMascot as JellyBlobMascot2,
@@ -4706,7 +4985,7 @@ function JellyBlob({ ...props }) {
4706
4985
  JellyBlobMascot,
4707
4986
  {
4708
4987
  ...props,
4709
- className: cn("h-auto w-full", props.className)
4988
+ className: cn34("h-auto w-full", props.className)
4710
4989
  }
4711
4990
  ) });
4712
4991
  }
@@ -4736,7 +5015,7 @@ function JellyMini({
4736
5015
  "span",
4737
5016
  {
4738
5017
  "aria-hidden": "true",
4739
- className: cn(
5018
+ className: cn34(
4740
5019
  "inline-flex size-5 shrink-0 items-center justify-center select-none",
4741
5020
  className
4742
5021
  ),
@@ -4752,10 +5031,10 @@ function JellyMini({
4752
5031
  }
4753
5032
  );
4754
5033
  }
4755
- var JellyMascotContext = React12.createContext(null);
5034
+ var JellyMascotContext = React13.createContext(null);
4756
5035
  function useJellyMood() {
4757
- const state = React12.useContext(JellyMascotContext);
4758
- return React12.useCallback(
5036
+ const state = React13.useContext(JellyMascotContext);
5037
+ return React13.useCallback(
4759
5038
  (mood) => {
4760
5039
  if (!mood || !state) return {};
4761
5040
  return {
@@ -4798,7 +5077,7 @@ function JellyMascotProvider({
4798
5077
  ...blobProps
4799
5078
  }) {
4800
5079
  const { mounted } = useMounted();
4801
- const [previewMood, setPreviewMood] = React12.useState(
5080
+ const [previewMood, setPreviewMood] = React13.useState(
4802
5081
  null
4803
5082
  );
4804
5083
  const activeMood = previewMood ?? mood;
@@ -4823,13 +5102,13 @@ function JellyMascotFace({
4823
5102
  size = "md",
4824
5103
  className
4825
5104
  }) {
4826
- const mascot = React12.useContext(JellyMascotContext);
5105
+ const mascot = React13.useContext(JellyMascotContext);
4827
5106
  if (!mascot) return null;
4828
5107
  return /* @__PURE__ */ jsxs19(
4829
5108
  "div",
4830
5109
  {
4831
5110
  "aria-hidden": "true",
4832
- className: cn(
5111
+ className: cn34(
4833
5112
  "flex flex-col items-center select-none",
4834
5113
  SIZE_WRAPPER[size],
4835
5114
  className
@@ -4861,7 +5140,7 @@ function JellyMascot({
4861
5140
  className,
4862
5141
  ...config
4863
5142
  }) {
4864
- const existing = React12.useContext(JellyMascotContext);
5143
+ const existing = React13.useContext(JellyMascotContext);
4865
5144
  if (existing) return /* @__PURE__ */ jsx35(JellyMascotFace, { size, className });
4866
5145
  return /* @__PURE__ */ jsx35(JellyMascotProvider, { ...config, children: /* @__PURE__ */ jsx35(JellyMascotFace, { size, className }) });
4867
5146
  }
@@ -4879,7 +5158,7 @@ function JellyEmpty({
4879
5158
  className,
4880
5159
  ...config
4881
5160
  }) {
4882
- return /* @__PURE__ */ jsx35(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: [
4883
5162
  /* @__PURE__ */ jsxs19(EmptyHeader, { className: "gap-2", children: [
4884
5163
  /* @__PURE__ */ jsx35(JellyMascotFace, { size }),
4885
5164
  title ? /* @__PURE__ */ jsx35(EmptyTitle, { className: "text-base font-semibold sm:text-lg", children: title }) : null,
@@ -4890,13 +5169,14 @@ function JellyEmpty({
4890
5169
  }
4891
5170
 
4892
5171
  // src/ui/kbd.tsx
5172
+ import { cn as cn35 } from "cn";
4893
5173
  import { jsx as jsx36 } from "react/jsx-runtime";
4894
5174
  function Kbd({ className, ...props }) {
4895
5175
  return /* @__PURE__ */ jsx36(
4896
5176
  "kbd",
4897
5177
  {
4898
5178
  "data-slot": "kbd",
4899
- className: cn(
5179
+ className: cn35(
4900
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",
4901
5181
  className
4902
5182
  ),
@@ -4909,20 +5189,21 @@ function KbdGroup({ className, ...props }) {
4909
5189
  "kbd",
4910
5190
  {
4911
5191
  "data-slot": "kbd-group",
4912
- className: cn("inline-flex items-center gap-1", className),
5192
+ className: cn35("inline-flex items-center gap-1", className),
4913
5193
  ...props
4914
5194
  }
4915
5195
  );
4916
5196
  }
4917
5197
 
4918
5198
  // src/ui/message.tsx
5199
+ import { cn as cn36 } from "cn";
4919
5200
  import { jsx as jsx37 } from "react/jsx-runtime";
4920
5201
  function MessageGroup({ className, ...props }) {
4921
5202
  return /* @__PURE__ */ jsx37(
4922
5203
  "div",
4923
5204
  {
4924
5205
  "data-slot": "message-group",
4925
- className: cn("flex min-w-0 flex-col gap-2", className),
5206
+ className: cn36("flex min-w-0 flex-col gap-2", className),
4926
5207
  ...props
4927
5208
  }
4928
5209
  );
@@ -4937,7 +5218,7 @@ function Message({
4937
5218
  {
4938
5219
  "data-slot": "message",
4939
5220
  "data-align": align,
4940
- className: cn(
5221
+ className: cn36(
4941
5222
  "group/message relative flex w-full min-w-0 gap-2 text-sm data-[align=end]:flex-row-reverse",
4942
5223
  className
4943
5224
  ),
@@ -4950,7 +5231,7 @@ function MessageAvatar({ className, ...props }) {
4950
5231
  "div",
4951
5232
  {
4952
5233
  "data-slot": "message-avatar",
4953
- className: cn(
5234
+ className: cn36(
4954
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",
4955
5236
  className
4956
5237
  ),
@@ -4963,7 +5244,7 @@ function MessageContent({ className, ...props }) {
4963
5244
  "div",
4964
5245
  {
4965
5246
  "data-slot": "message-content",
4966
- className: cn(
5247
+ className: cn36(
4967
5248
  "flex w-full min-w-0 flex-col gap-2.5 wrap-break-word group-data-[align=end]/message:*:data-slot:self-end",
4968
5249
  className
4969
5250
  ),
@@ -4976,7 +5257,7 @@ function MessageHeader({ className, ...props }) {
4976
5257
  "div",
4977
5258
  {
4978
5259
  "data-slot": "message-header",
4979
- className: cn(
5260
+ className: cn36(
4980
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",
4981
5262
  className
4982
5263
  ),
@@ -4989,7 +5270,7 @@ function MessageFooter({ className, ...props }) {
4989
5270
  "div",
4990
5271
  {
4991
5272
  "data-slot": "message-footer",
4992
- className: cn(
5273
+ className: cn36(
4993
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",
4994
5275
  className
4995
5276
  ),
@@ -5005,6 +5286,7 @@ import {
5005
5286
  useMessageScrollerScrollable,
5006
5287
  useMessageScrollerVisibility
5007
5288
  } from "@shadcn/react/message-scroller";
5289
+ import { cn as cn37 } from "cn";
5008
5290
  import { ArrowDownIcon } from "lucide-react";
5009
5291
  import { Fragment as Fragment2, jsx as jsx38, jsxs as jsxs20 } from "react/jsx-runtime";
5010
5292
  function MessageScrollerProvider(props) {
@@ -5018,7 +5300,7 @@ function MessageScroller({
5018
5300
  MessageScrollerPrimitive.Root,
5019
5301
  {
5020
5302
  "data-slot": "message-scroller",
5021
- className: cn(
5303
+ className: cn37(
5022
5304
  "group/message-scroller relative flex size-full min-h-0 flex-col overflow-hidden",
5023
5305
  className
5024
5306
  ),
@@ -5034,7 +5316,7 @@ function MessageScrollerViewport({
5034
5316
  MessageScrollerPrimitive.Viewport,
5035
5317
  {
5036
5318
  "data-slot": "message-scroller-viewport",
5037
- className: cn(
5319
+ className: cn37(
5038
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",
5039
5321
  className
5040
5322
  ),
@@ -5050,7 +5332,7 @@ function MessageScrollerContent({
5050
5332
  MessageScrollerPrimitive.Content,
5051
5333
  {
5052
5334
  "data-slot": "message-scroller-content",
5053
- 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),
5054
5336
  ...props
5055
5337
  }
5056
5338
  );
@@ -5065,7 +5347,7 @@ function MessageScrollerItem({
5065
5347
  {
5066
5348
  "data-slot": "message-scroller-item",
5067
5349
  scrollAnchor,
5068
- className: cn(
5350
+ className: cn37(
5069
5351
  "min-w-0 shrink-0 [contain-intrinsic-size:auto_10rem] [content-visibility:auto]",
5070
5352
  className
5071
5353
  ),
@@ -5090,7 +5372,7 @@ function MessageScrollerButton({
5090
5372
  "data-variant": variant,
5091
5373
  "data-size": size,
5092
5374
  direction,
5093
- className: cn(
5375
+ className: cn37(
5094
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",
5095
5377
  className
5096
5378
  ),
@@ -5105,7 +5387,7 @@ function MessageScrollerButton({
5105
5387
  }
5106
5388
 
5107
5389
  // src/ui/otp.tsx
5108
- import { clsx as clsx2 } from "clsx";
5390
+ import { cn as cn38 } from "cn";
5109
5391
  import {
5110
5392
  AnimatePresence as AnimatePresence2,
5111
5393
  animate,
@@ -5113,7 +5395,6 @@ import {
5113
5395
  useReducedMotion
5114
5396
  } from "motion/react";
5115
5397
  import { Fragment as Fragment3, useEffect as useEffect7, useId as useId2, useRef as useRef4, useState as useState9 } from "react";
5116
- import { twMerge as twMerge2 } from "tailwind-merge";
5117
5398
  import { jsx as jsx39, jsxs as jsxs21 } from "react/jsx-runtime";
5118
5399
  var EASE_OUT = [0.16, 1, 0.3, 1];
5119
5400
  var EASE_IN_OUT = [0.77, 0, 0.175, 1];
@@ -5148,9 +5429,6 @@ var SPRING_MOUSE = {
5148
5429
  damping: 15,
5149
5430
  mass: 0.3
5150
5431
  };
5151
- function otpCn(...inputs) {
5152
- return twMerge2(clsx2(inputs));
5153
- }
5154
5432
  function OTPInput2({
5155
5433
  length = 6,
5156
5434
  value: controlledValue,
@@ -5282,7 +5560,7 @@ function OTPInput2({
5282
5560
  const showSuccess = status === "success";
5283
5561
  const activeIndex = focused ? active : -1;
5284
5562
  const message = showSuccess ? successMessage : status === "error" ? errorMessage : hint;
5285
- return /* @__PURE__ */ jsxs21("div", { className: otpCn("inline-flex flex-col gap-2", className), children: [
5563
+ return /* @__PURE__ */ jsxs21("div", { className: cn38("inline-flex flex-col gap-2", className), children: [
5286
5564
  label ? /* @__PURE__ */ jsx39(
5287
5565
  "label",
5288
5566
  {
@@ -5341,7 +5619,7 @@ function OTPInput2({
5341
5619
  "data-otp-slot": true,
5342
5620
  "data-active": isActive,
5343
5621
  "data-filled": char !== "",
5344
- className: otpCn(
5622
+ className: cn38(
5345
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",
5346
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",
5347
5625
  isActive && !showSuccess && status !== "error" && "border-brand border-2 ring-0",
@@ -5358,7 +5636,7 @@ function OTPInput2({
5358
5636
  repeat: Number.POSITIVE_INFINITY,
5359
5637
  ease: "linear"
5360
5638
  },
5361
- className: otpCn(
5639
+ className: cn38(
5362
5640
  "bg-brand pointer-events-none absolute top-1/2 h-6 w-px -translate-y-1/2",
5363
5641
  char ? "right-3" : "left-1/2 -translate-x-1/2"
5364
5642
  )
@@ -5481,7 +5759,7 @@ function OTPInput2({
5481
5759
  "p",
5482
5760
  {
5483
5761
  "aria-live": "polite",
5484
- className: otpCn(
5762
+ className: cn38(
5485
5763
  "text-sm",
5486
5764
  showSuccess ? "text-emerald-500" : status === "error" ? "text-destructive" : "text-muted-foreground"
5487
5765
  ),
@@ -5500,6 +5778,7 @@ function toSlots(raw, length) {
5500
5778
 
5501
5779
  // src/ui/popover.tsx
5502
5780
  import { Popover as PopoverPrimitive } from "@base-ui/react/popover";
5781
+ import { cn as cn39 } from "cn";
5503
5782
  import { jsx as jsx40 } from "react/jsx-runtime";
5504
5783
  function Popover({ ...props }) {
5505
5784
  return /* @__PURE__ */ jsx40(PopoverPrimitive.Root, { "data-slot": "popover", ...props });
@@ -5527,7 +5806,7 @@ function PopoverContent({
5527
5806
  PopoverPrimitive.Popup,
5528
5807
  {
5529
5808
  "data-slot": "popover-content",
5530
- className: cn(
5809
+ className: cn39(
5531
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",
5532
5811
  className
5533
5812
  ),
@@ -5542,7 +5821,7 @@ function PopoverHeader({ className, ...props }) {
5542
5821
  "div",
5543
5822
  {
5544
5823
  "data-slot": "popover-header",
5545
- className: cn("flex flex-col gap-0.5 text-sm", className),
5824
+ className: cn39("flex flex-col gap-0.5 text-sm", className),
5546
5825
  ...props
5547
5826
  }
5548
5827
  );
@@ -5552,7 +5831,7 @@ function PopoverTitle({ className, ...props }) {
5552
5831
  PopoverPrimitive.Title,
5553
5832
  {
5554
5833
  "data-slot": "popover-title",
5555
- className: cn("font-medium", className),
5834
+ className: cn39("font-medium", className),
5556
5835
  ...props
5557
5836
  }
5558
5837
  );
@@ -5565,7 +5844,7 @@ function PopoverDescription({
5565
5844
  PopoverPrimitive.Description,
5566
5845
  {
5567
5846
  "data-slot": "popover-description",
5568
- className: cn("text-muted-foreground", className),
5847
+ className: cn39("text-muted-foreground", className),
5569
5848
  ...props
5570
5849
  }
5571
5850
  );
@@ -5574,10 +5853,10 @@ function PopoverDescription({
5574
5853
  // src/ui/quantity.tsx
5575
5854
  import { NumberField } from "@base-ui/react/number-field";
5576
5855
  import { Minus, Plus } from "@gravity-ui/icons";
5577
- import * as React13 from "react";
5856
+ import * as React14 from "react";
5578
5857
  import { jsx as jsx41, jsxs as jsxs22 } from "react/jsx-runtime";
5579
- var QuantityInput = React13.forwardRef(function QuantityInput2({ ...props }, ref) {
5580
- const id = React13.useId();
5858
+ var QuantityInput = React14.forwardRef(function QuantityInput2({ ...props }, ref) {
5859
+ const id = React14.useId();
5581
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: [
5582
5861
  /* @__PURE__ */ jsx41(
5583
5862
  NumberField.Decrement,
@@ -5615,13 +5894,14 @@ var QuantityInput = React13.forwardRef(function QuantityInput2({ ...props }, ref
5615
5894
  // src/ui/radio-group.tsx
5616
5895
  import { Radio as RadioPrimitive } from "@base-ui/react/radio";
5617
5896
  import { RadioGroup as RadioGroupPrimitive } from "@base-ui/react/radio-group";
5897
+ import { cn as cn40 } from "cn";
5618
5898
  import { jsx as jsx42 } from "react/jsx-runtime";
5619
5899
  function RadioGroup({ className, ...props }) {
5620
5900
  return /* @__PURE__ */ jsx42(
5621
5901
  RadioGroupPrimitive,
5622
5902
  {
5623
5903
  "data-slot": "radio-group",
5624
- className: cn("grid w-full gap-2", className),
5904
+ className: cn40("grid w-full gap-2", className),
5625
5905
  ...props
5626
5906
  }
5627
5907
  );
@@ -5631,7 +5911,7 @@ function RadioGroupItem({ className, ...props }) {
5631
5911
  RadioPrimitive.Root,
5632
5912
  {
5633
5913
  "data-slot": "radio-group-item",
5634
- className: cn(
5914
+ className: cn40(
5635
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",
5636
5916
  className
5637
5917
  ),
@@ -5653,7 +5933,7 @@ import { useRender as useRender5 } from "@base-ui/react/use-render";
5653
5933
  import { cva as cva9 } from "class-variance-authority";
5654
5934
  import {
5655
5935
  createContext as createContext5,
5656
- useCallback as useCallback5,
5936
+ useCallback as useCallback6,
5657
5937
  useContext as useContext6,
5658
5938
  useEffect as useEffect8,
5659
5939
  useId as useId4,
@@ -5664,6 +5944,7 @@ import {
5664
5944
 
5665
5945
  // src/ui/tooltip.tsx
5666
5946
  import { Tooltip as TooltipPrimitive } from "@base-ui/react/tooltip";
5947
+ import { cn as cn41 } from "cn";
5667
5948
  import { jsx as jsx43, jsxs as jsxs23 } from "react/jsx-runtime";
5668
5949
  function TooltipProvider({
5669
5950
  delay = 0,
@@ -5705,7 +5986,7 @@ function TooltipContent({
5705
5986
  TooltipPrimitive.Popup,
5706
5987
  {
5707
5988
  "data-slot": "tooltip-content",
5708
- className: cn(
5989
+ className: cn41(
5709
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",
5710
5991
  className
5711
5992
  ),
@@ -5721,6 +6002,7 @@ function TooltipContent({
5721
6002
  }
5722
6003
 
5723
6004
  // src/ui/reui/filters.tsx
6005
+ import { cn as cn42 } from "cn";
5724
6006
  import { AlertCircleIcon, CheckIcon as CheckIcon2, PlusIcon, XIcon } from "lucide-react";
5725
6007
  import { Fragment as Fragment4, jsx as jsx44, jsxs as jsxs24 } from "react/jsx-runtime";
5726
6008
  var DEFAULT_I18N = {
@@ -5891,7 +6173,7 @@ function FilterInput({
5891
6173
  return /* @__PURE__ */ jsxs24(
5892
6174
  InputGroup,
5893
6175
  {
5894
- className: cn(
6176
+ className: cn42(
5895
6177
  "w-36",
5896
6178
  // Height follows each style's own control ladder. `default` sets no
5897
6179
  // height on purpose so the style's `.cn-input-group` applies (h-8 nova,
@@ -5915,7 +6197,7 @@ function FilterInput({
5915
6197
  "aria-describedby": !isValid && validationMessage ? `${field?.key || "input"}-error` : void 0,
5916
6198
  onBlur: handleBlur,
5917
6199
  onKeyDown: handleKeyDown,
5918
- className: cn(
6200
+ className: cn42(
5919
6201
  context.size == "sm" && "h-7! text-xs",
5920
6202
  context.size == "lg" && "h-9!"
5921
6203
  ),
@@ -6025,7 +6307,7 @@ function useFieldOptions(field, searchInput, enabled) {
6025
6307
  cancelled = true;
6026
6308
  };
6027
6309
  }, [isAsync, enabled, debouncedQuery]);
6028
- const resolveSelected = useCallback5(
6310
+ const resolveSelected = useCallback6(
6029
6311
  (values) => {
6030
6312
  const cache = getFieldOptionCache(field);
6031
6313
  return values.map(
@@ -6127,7 +6409,7 @@ function FilterOperatorDropdown({
6127
6409
  DropdownMenuItem,
6128
6410
  {
6129
6411
  onClick: () => onChange(op.value),
6130
- className: cn(
6412
+ className: cn42(
6131
6413
  "flex items-center justify-between data-highlighted:bg-accent data-highlighted:text-accent-foreground"
6132
6414
  ),
6133
6415
  children: [
@@ -6135,7 +6417,7 @@ function FilterOperatorDropdown({
6135
6417
  /* @__PURE__ */ jsx44(
6136
6418
  CheckIcon2,
6137
6419
  {
6138
- className: cn(
6420
+ className: cn42(
6139
6421
  "ms-auto text-primary",
6140
6422
  op.value === operator ? "opacity-100" : "opacity-0"
6141
6423
  )
@@ -6225,7 +6507,7 @@ function SelectOptionsPopover({
6225
6507
  "data-highlighted": isHighlighted || void 0,
6226
6508
  onMouseEnter: () => setHighlightedIndex(overallIndex),
6227
6509
  checked: isSelected,
6228
- className: cn(
6510
+ className: cn42(
6229
6511
  "data-highlighted:bg-accent data-highlighted:text-accent-foreground",
6230
6512
  option.className
6231
6513
  ),
@@ -6256,7 +6538,7 @@ function SelectOptionsPopover({
6256
6538
  placeholder: context.i18n.placeholders.searchField(
6257
6539
  field.label || ""
6258
6540
  ),
6259
- className: cn(
6541
+ className: cn42(
6260
6542
  "h-8 rounded-none border-0 border-input bg-transparent! px-2 text-sm shadow-none",
6261
6543
  "focus-visible:border-border focus-visible:ring-0 focus-visible:ring-offset-0",
6262
6544
  open && "placeholder:text-foreground"
@@ -6361,7 +6643,7 @@ function SelectOptionsPopover({
6361
6643
  DropdownMenuContent,
6362
6644
  {
6363
6645
  align: "start",
6364
- className: cn("w-50 px-0", field.className),
6646
+ className: cn42("w-50 px-0", field.className),
6365
6647
  children: renderMenuContent()
6366
6648
  }
6367
6649
  )
@@ -6392,7 +6674,7 @@ function FilterValueSelector({
6392
6674
  placeholder: field.placeholder,
6393
6675
  pattern: field.pattern,
6394
6676
  field,
6395
- className: cn("w-36", field.className),
6677
+ className: cn42("w-36", field.className),
6396
6678
  autoFocus
6397
6679
  }
6398
6680
  );
@@ -6409,7 +6691,7 @@ var FiltersContent = ({
6409
6691
  }) => {
6410
6692
  const context = useFilterContext();
6411
6693
  const fieldsMap = useMemo4(() => getFieldsMap(fields), [fields]);
6412
- const updateFilter = useCallback5(
6694
+ const updateFilter = useCallback6(
6413
6695
  (filterId, updates) => {
6414
6696
  onChange(
6415
6697
  filters.map((filter) => {
@@ -6426,7 +6708,7 @@ var FiltersContent = ({
6426
6708
  },
6427
6709
  [filters, onChange]
6428
6710
  );
6429
- const removeFilter = useCallback5(
6711
+ const removeFilter = useCallback6(
6430
6712
  (filterId) => {
6431
6713
  onChange(filters.filter((filter) => filter.id !== filterId));
6432
6714
  },
@@ -6435,7 +6717,7 @@ var FiltersContent = ({
6435
6717
  return /* @__PURE__ */ jsx44(
6436
6718
  "div",
6437
6719
  {
6438
- className: cn(
6720
+ className: cn42(
6439
6721
  filtersContainerVariants({
6440
6722
  variant: context.variant,
6441
6723
  size: context.size
@@ -6560,7 +6842,7 @@ function FilterSubmenuContent({
6560
6842
  "data-highlighted": isHighlighted || void 0,
6561
6843
  onMouseEnter: () => setHighlightedIndex(index),
6562
6844
  checked: isSelected,
6563
- className: cn(
6845
+ className: cn42(
6564
6846
  "data-highlighted:bg-accent data-highlighted:text-accent-foreground",
6565
6847
  option.className
6566
6848
  ),
@@ -6594,7 +6876,7 @@ function FilterSubmenuContent({
6594
6876
  "aria-controls": `${baseId}-listbox`,
6595
6877
  "aria-activedescendant": highlightedIndex >= 0 ? `${baseId}-item-${highlightedIndex}` : void 0,
6596
6878
  placeholder: i18n.placeholders.searchField(field.label || ""),
6597
- className: cn(
6879
+ className: cn42(
6598
6880
  "h-8 rounded-none border-0 bg-transparent! px-2 text-sm shadow-none",
6599
6881
  "focus-visible:border-border focus-visible:ring-0 focus-visible:ring-offset-0",
6600
6882
  isActive && "placeholder:text-foreground"
@@ -6783,7 +7065,7 @@ function Filters({
6783
7065
  [i18n]
6784
7066
  );
6785
7067
  const fieldsMap = useMemo4(() => getFieldsMap(fields), [fields]);
6786
- const updateFilter = useCallback5(
7068
+ const updateFilter = useCallback6(
6787
7069
  (filterId, updates) => {
6788
7070
  onChange(
6789
7071
  filters.map((filter) => {
@@ -6800,13 +7082,13 @@ function Filters({
6800
7082
  },
6801
7083
  [filters, onChange]
6802
7084
  );
6803
- const removeFilter = useCallback5(
7085
+ const removeFilter = useCallback6(
6804
7086
  (filterId) => {
6805
7087
  onChange(filters.filter((filter) => filter.id !== filterId));
6806
7088
  },
6807
7089
  [filters, onChange]
6808
7090
  );
6809
- const addFilter = useCallback5(
7091
+ const addFilter = useCallback6(
6810
7092
  (fieldKey) => {
6811
7093
  const field = fieldsMap[fieldKey];
6812
7094
  if (field && field.key) {
@@ -6865,7 +7147,7 @@ function Filters({
6865
7147
  return /* @__PURE__ */ jsx44(FilterContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxs24(
6866
7148
  "div",
6867
7149
  {
6868
- className: cn(filtersContainerVariants({ variant, size }), className),
7150
+ className: cn42(filtersContainerVariants({ variant, size }), className),
6869
7151
  children: [
6870
7152
  selectableFields.length > 0 && /* @__PURE__ */ jsxs24(
6871
7153
  DropdownMenu,
@@ -6885,7 +7167,7 @@ function Filters({
6885
7167
  /* @__PURE__ */ jsxs24(
6886
7168
  DropdownMenuContent,
6887
7169
  {
6888
- className: cn("w-55", menuPopupClassName),
7170
+ className: cn42("w-55", menuPopupClassName),
6889
7171
  align: "start",
6890
7172
  children: [
6891
7173
  showSearchInput && /* @__PURE__ */ jsxs24(Fragment4, { children: [
@@ -6898,7 +7180,7 @@ function Filters({
6898
7180
  "aria-controls": `${rootId}-listbox`,
6899
7181
  "aria-activedescendant": highlightedIndex >= 0 ? `${rootId}-item-${highlightedIndex}` : void 0,
6900
7182
  placeholder: mergedI18n.searchFields,
6901
- className: cn(
7183
+ className: cn42(
6902
7184
  "h-8 rounded-none border-0 bg-transparent! px-2 text-sm shadow-none",
6903
7185
  "focus-visible:border-border focus-visible:ring-0 focus-visible:ring-offset-0",
6904
7186
  activeMenu === "root" && "placeholder:text-foreground"
@@ -7181,6 +7463,7 @@ var createFilterGroup = (id, label, fields, initialFilters = []) => ({
7181
7463
 
7182
7464
  // src/ui/select.tsx
7183
7465
  import { Select as SelectPrimitive } from "@base-ui/react/select";
7466
+ import { cn as cn43 } from "cn";
7184
7467
  import { Check as Check2, ChevronDown as ChevronDown3, ChevronUp as ChevronUp2 } from "@gravity-ui/icons";
7185
7468
  import { jsx as jsx45, jsxs as jsxs25 } from "react/jsx-runtime";
7186
7469
  var Select = SelectPrimitive.Root;
@@ -7189,7 +7472,7 @@ function SelectGroup({ className, ...props }) {
7189
7472
  SelectPrimitive.Group,
7190
7473
  {
7191
7474
  "data-slot": "select-group",
7192
- className: cn("scroll-my-1 p-1", className),
7475
+ className: cn43("scroll-my-1 p-1", className),
7193
7476
  ...props
7194
7477
  }
7195
7478
  );
@@ -7199,7 +7482,7 @@ function SelectValue({ className, ...props }) {
7199
7482
  SelectPrimitive.Value,
7200
7483
  {
7201
7484
  "data-slot": "select-value",
7202
- className: cn("flex flex-1 text-left", className),
7485
+ className: cn43("flex flex-1 text-left", className),
7203
7486
  ...props
7204
7487
  }
7205
7488
  );
@@ -7215,7 +7498,7 @@ function SelectTrigger({
7215
7498
  {
7216
7499
  "data-slot": "select-trigger",
7217
7500
  "data-size": size,
7218
- className: cn(
7501
+ className: cn43(
7219
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",
7220
7503
  className
7221
7504
  ),
@@ -7256,7 +7539,7 @@ function SelectContent({
7256
7539
  {
7257
7540
  "data-slot": "select-content",
7258
7541
  "data-align-trigger": alignItemWithTrigger,
7259
- className: cn(
7542
+ className: cn43(
7260
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",
7261
7544
  className
7262
7545
  ),
@@ -7279,7 +7562,7 @@ function SelectLabel({
7279
7562
  SelectPrimitive.GroupLabel,
7280
7563
  {
7281
7564
  "data-slot": "select-label",
7282
- 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),
7283
7566
  ...props
7284
7567
  }
7285
7568
  );
@@ -7293,7 +7576,7 @@ function SelectItem({
7293
7576
  SelectPrimitive.Item,
7294
7577
  {
7295
7578
  "data-slot": "select-item",
7296
- className: cn(
7579
+ className: cn43(
7297
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",
7298
7581
  className
7299
7582
  ),
@@ -7319,7 +7602,7 @@ function SelectSeparator({
7319
7602
  SelectPrimitive.Separator,
7320
7603
  {
7321
7604
  "data-slot": "select-separator",
7322
- 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),
7323
7606
  ...props
7324
7607
  }
7325
7608
  );
@@ -7332,7 +7615,7 @@ function SelectScrollUpButton({
7332
7615
  SelectPrimitive.ScrollUpArrow,
7333
7616
  {
7334
7617
  "data-slot": "select-scroll-up-button",
7335
- className: cn(
7618
+ className: cn43(
7336
7619
  "top-0 z-10 flex w-full cursor-default items-center justify-center bg-background py-1 [&_svg:not([class*='size-'])]:size-4",
7337
7620
  className
7338
7621
  ),
@@ -7349,7 +7632,7 @@ function SelectScrollDownButton({
7349
7632
  SelectPrimitive.ScrollDownArrow,
7350
7633
  {
7351
7634
  "data-slot": "select-scroll-down-button",
7352
- className: cn(
7635
+ className: cn43(
7353
7636
  "bottom-0 z-10 flex w-full cursor-default items-center justify-center bg-background py-1 [&_svg:not([class*='size-'])]:size-4",
7354
7637
  className
7355
7638
  ),
@@ -7364,6 +7647,7 @@ import {
7364
7647
  forwardRef as forwardRef4,
7365
7648
  useLayoutEffect
7366
7649
  } from "react";
7650
+ import { cn as cn44 } from "cn";
7367
7651
  import { jsx as jsx46 } from "react/jsx-runtime";
7368
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)]";
7369
7653
  var STYLE_ID = "iconiq-skeleton-styles";
@@ -7488,7 +7772,7 @@ var Skeleton = forwardRef4(function Skeleton2({
7488
7772
  return /* @__PURE__ */ jsx46(
7489
7773
  "div",
7490
7774
  {
7491
- className: cn(
7775
+ className: cn44(
7492
7776
  componentThemeClassName,
7493
7777
  "iconiq-skeleton-surface relative block h-4 w-full overflow-hidden",
7494
7778
  showFade && "iconiq-skeleton-fade-root",
@@ -7517,7 +7801,7 @@ function SkeletonAvatar({
7517
7801
  return /* @__PURE__ */ jsx46(
7518
7802
  Skeleton,
7519
7803
  {
7520
- className: cn("size-10", className),
7804
+ className: cn44("size-10", className),
7521
7805
  decorative: true,
7522
7806
  rounded: "full",
7523
7807
  ...props
@@ -7525,7 +7809,7 @@ function SkeletonAvatar({
7525
7809
  );
7526
7810
  }
7527
7811
  function SkeletonText({ className, ...props }) {
7528
- return /* @__PURE__ */ jsx46(Skeleton, { className: cn("h-3", className), decorative: true, ...props });
7812
+ return /* @__PURE__ */ jsx46(Skeleton, { className: cn44("h-3", className), decorative: true, ...props });
7529
7813
  }
7530
7814
  function SkeletonButton({
7531
7815
  className,
@@ -7534,7 +7818,7 @@ function SkeletonButton({
7534
7818
  return /* @__PURE__ */ jsx46(
7535
7819
  Skeleton,
7536
7820
  {
7537
- className: cn("h-9 w-24", className),
7821
+ className: cn44("h-9 w-24", className),
7538
7822
  decorative: true,
7539
7823
  rounded: "lg",
7540
7824
  ...props
@@ -7592,44 +7876,7 @@ import {
7592
7876
  import { CSS } from "@dnd-kit/utilities";
7593
7877
  import * as React16 from "react";
7594
7878
  import * as ReactDOM from "react-dom";
7595
-
7596
- // src/lib/compose-refs.ts
7597
- import * as React14 from "react";
7598
- function setRef(ref, value) {
7599
- if (typeof ref === "function") {
7600
- return ref(value);
7601
- }
7602
- if (ref !== null && ref !== void 0) {
7603
- ref.current = value;
7604
- }
7605
- }
7606
- function composeRefs(...refs) {
7607
- return (node) => {
7608
- let hasCleanup = false;
7609
- const cleanups = refs.map((ref) => {
7610
- const cleanup = setRef(ref, node);
7611
- if (!hasCleanup && typeof cleanup === "function") {
7612
- hasCleanup = true;
7613
- }
7614
- return cleanup;
7615
- });
7616
- if (hasCleanup) {
7617
- return () => {
7618
- for (let i = 0; i < cleanups.length; i++) {
7619
- const cleanup = cleanups[i];
7620
- if (typeof cleanup === "function") {
7621
- cleanup();
7622
- } else {
7623
- setRef(refs[i], null);
7624
- }
7625
- }
7626
- };
7627
- }
7628
- };
7629
- }
7630
- function useComposedRefs(...refs) {
7631
- return React14.useCallback(composeRefs(...refs), refs);
7632
- }
7879
+ import { cn as cn45 } from "cn";
7633
7880
 
7634
7881
  // src/hooks/use-isomorphic-layout-effect.ts
7635
7882
  import * as React15 from "react";
@@ -7958,7 +8205,7 @@ function SortableItem(props) {
7958
8205
  id,
7959
8206
  ref: composedRef,
7960
8207
  style: composedStyle,
7961
- className: cn(
8208
+ className: cn45(
7962
8209
  "focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:outline-hidden",
7963
8210
  {
7964
8211
  "touch-none select-none": asHandle,
@@ -8006,7 +8253,7 @@ function SortableItemHandle(props) {
8006
8253
  "aria-controls": itemContext.id,
8007
8254
  ref: composedRef,
8008
8255
  disabled: isDisabled,
8009
- className: cn(
8256
+ className: cn45(
8010
8257
  "select-none disabled:pointer-events-none disabled:opacity-50",
8011
8258
  context.flatCursor ? "cursor-default" : "cursor-grab data-dragging:cursor-grabbing",
8012
8259
  className
@@ -8046,7 +8293,7 @@ function SortableOverlay(props) {
8046
8293
  {
8047
8294
  dropAnimation,
8048
8295
  modifiers: context.modifiers,
8049
- className: cn(!context.flatCursor && "cursor-grabbing"),
8296
+ className: cn45(!context.flatCursor && "cursor-grabbing"),
8050
8297
  ...overlayProps,
8051
8298
  children: /* @__PURE__ */ jsx48(SortableOverlayContext.Provider, { value: true, children: context.activeId ? typeof children === "function" ? children({ value: context.activeId }) : children : null })
8052
8299
  }
@@ -8057,6 +8304,7 @@ function SortableOverlay(props) {
8057
8304
 
8058
8305
  // src/ui/switch.tsx
8059
8306
  import { Switch as SwitchPrimitive } from "@base-ui/react/switch";
8307
+ import { cn as cn46 } from "cn";
8060
8308
  import { jsx as jsx49 } from "react/jsx-runtime";
8061
8309
  function Switch({
8062
8310
  className,
@@ -8068,7 +8316,7 @@ function Switch({
8068
8316
  {
8069
8317
  "data-slot": "switch",
8070
8318
  "data-size": size,
8071
- className: cn(
8319
+ className: cn46(
8072
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",
8073
8321
  className
8074
8322
  ),
@@ -8085,6 +8333,7 @@ function Switch({
8085
8333
  }
8086
8334
 
8087
8335
  // src/icon/bell.tsx
8336
+ import { cn as cn47 } from "cn";
8088
8337
  import {
8089
8338
  LazyMotion,
8090
8339
  domMin,
@@ -8203,7 +8452,7 @@ var BellIcon = forwardRef5(
8203
8452
  return /* @__PURE__ */ jsx50(LazyMotion, { features: domMin, strict: true, children: /* @__PURE__ */ jsx50(
8204
8453
  m.div,
8205
8454
  {
8206
- className: cn("relative inline-flex", className),
8455
+ className: cn47("relative inline-flex", className),
8207
8456
  onMouseEnter: handleEnter,
8208
8457
  onMouseLeave: handleLeave,
8209
8458
  ...props,
@@ -8237,13 +8486,14 @@ var BellIcon = forwardRef5(
8237
8486
  BellIcon.displayName = "BellIcon";
8238
8487
 
8239
8488
  // src/icon/icon-swap.tsx
8489
+ import { cn as cn48 } from "cn";
8240
8490
  import { jsx as jsx51, jsxs as jsxs27 } from "react/jsx-runtime";
8241
8491
  function IconSwap({ active, first, second, className }) {
8242
8492
  return /* @__PURE__ */ jsxs27(
8243
8493
  "span",
8244
8494
  {
8245
8495
  "aria-hidden": "true",
8246
- className: cn("t-icon-swap", className),
8496
+ className: cn48("t-icon-swap", className),
8247
8497
  "data-state": active ? "b" : "a",
8248
8498
  children: [
8249
8499
  /* @__PURE__ */ jsx51("span", { className: "t-icon", "data-icon": "a", children: first }),
@@ -8254,6 +8504,7 @@ function IconSwap({ active, first, second, className }) {
8254
8504
  }
8255
8505
 
8256
8506
  // src/icon/loader.tsx
8507
+ import { cn as cn49 } from "cn";
8257
8508
  import React17 from "react";
8258
8509
  import { jsx as jsx52 } from "react/jsx-runtime";
8259
8510
  var Loader = React17.forwardRef(
@@ -8263,7 +8514,7 @@ var Loader = React17.forwardRef(
8263
8514
  "div",
8264
8515
  {
8265
8516
  ref,
8266
- className: cn("loader-wrapper", className),
8517
+ className: cn49("loader-wrapper", className),
8267
8518
  style: {
8268
8519
  "--spinner-size": `${size}px`,
8269
8520
  "--spinner-color": color,
@@ -8277,11 +8528,8 @@ var Loader = React17.forwardRef(
8277
8528
  );
8278
8529
  Loader.displayName = "SpellUI.Loader";
8279
8530
 
8280
- // src/utils/index.ts
8281
- function getCountryFlagUrl(countryCode, size = "24") {
8282
- if (!countryCode) return "";
8283
- return `https://flagcdn.com/${size}x${Math.floor(Number(size) * 0.75)}/${countryCode.toLowerCase()}.png`;
8284
- }
8531
+ // src/index.ts
8532
+ import { cn as cn50 } from "cn";
8285
8533
  export {
8286
8534
  Accordion,
8287
8535
  AccordionContent,
@@ -8511,6 +8759,7 @@ export {
8511
8759
  SPRING_SWAP,
8512
8760
  ScrollArea,
8513
8761
  ScrollBar,
8762
+ SearchParams,
8514
8763
  Select,
8515
8764
  SelectContent,
8516
8765
  SelectGroup,
@@ -8542,35 +8791,63 @@ export {
8542
8791
  Top,
8543
8792
  activityItemAnimation,
8544
8793
  badgeVariants,
8794
+ buildFlagSearchParamHref,
8545
8795
  buttonGroupVariants,
8546
8796
  buttonVariants,
8547
- cn,
8797
+ cn50 as cn,
8798
+ composeRefs,
8548
8799
  createFilter,
8549
8800
  createFilterGroup,
8550
8801
  fromLeftChildren,
8551
8802
  fromLeftVariant,
8552
8803
  fromRightVariant,
8553
8804
  fromTopVariant,
8554
- 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,
8555
8819
  getSkeletonVariantDuration,
8556
8820
  hamFastFadeContainer,
8821
+ hasFlagSearchParam,
8557
8822
  headingFromLeft,
8823
+ isNativeApp,
8558
8824
  kanbanOrderCardAnimation,
8559
8825
  kanbanOrderCardLayoutTransition,
8560
8826
  kanbanOrderCardReducedMotionAnimation,
8561
8827
  mobileNavItemSideways,
8828
+ nativeSharedFileToFile,
8562
8829
  opacityVariant,
8830
+ openExternalUrl,
8831
+ openNativeAppSettings,
8832
+ openUpiPaymentUrl,
8833
+ pickNativeChooserImageFiles,
8834
+ pickNativeImageFiles,
8563
8835
  popUp,
8564
8836
  popUpFromBottomForText,
8565
8837
  resolveSkeletonA11yProps,
8838
+ saveNativeShareImage,
8566
8839
  searchBarSlideAnimation,
8567
8840
  searchFocus,
8841
+ searchParamKeys,
8842
+ searchParams,
8843
+ shareNativeOrWeb,
8568
8844
  skeletonRoundedClasses,
8569
8845
  skeletonVariantDefaultDuration,
8570
8846
  svgVariant,
8571
8847
  useAutocompleteFilter,
8572
8848
  useCarousel,
8573
8849
  useComboboxAnchor,
8850
+ useComposedRefs,
8574
8851
  useJellyMood,
8575
8852
  useMediaQuery,
8576
8853
  useMessageScroller,