@rock.star/ui 1.1.2 → 1.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/ui/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() {
@@ -1225,6 +1227,44 @@ function getNativeThemePlugin() {
1225
1227
  return window.Capacitor?.Plugins?.NativeTheme ?? null;
1226
1228
  }
1227
1229
 
1230
+ // src/lib/compose-refs.ts
1231
+ import * as React from "react";
1232
+ function setRef(ref, value) {
1233
+ if (typeof ref === "function") {
1234
+ return ref(value);
1235
+ }
1236
+ if (ref !== null && ref !== void 0) {
1237
+ ref.current = value;
1238
+ }
1239
+ }
1240
+ function composeRefs(...refs) {
1241
+ return (node) => {
1242
+ let hasCleanup = false;
1243
+ const cleanups = refs.map((ref) => {
1244
+ const cleanup = setRef(ref, node);
1245
+ if (!hasCleanup && typeof cleanup === "function") {
1246
+ hasCleanup = true;
1247
+ }
1248
+ return cleanup;
1249
+ });
1250
+ if (hasCleanup) {
1251
+ return () => {
1252
+ for (let i = 0; i < cleanups.length; i++) {
1253
+ const cleanup = cleanups[i];
1254
+ if (typeof cleanup === "function") {
1255
+ cleanup();
1256
+ } else {
1257
+ setRef(refs[i], null);
1258
+ }
1259
+ }
1260
+ };
1261
+ }
1262
+ };
1263
+ }
1264
+ function useComposedRefs(...refs) {
1265
+ return React.useCallback(composeRefs(...refs), refs);
1266
+ }
1267
+
1228
1268
  // src/ui/bridge.tsx
1229
1269
  function getAppPath(value) {
1230
1270
  try {
@@ -1271,7 +1311,7 @@ function syncNativeAppearance() {
1271
1311
  }
1272
1312
  function NativeAppBridge() {
1273
1313
  const router = useRouter();
1274
- React.useEffect(() => {
1314
+ React2.useEffect(() => {
1275
1315
  if (!isNativeApp()) return;
1276
1316
  const root = document.documentElement;
1277
1317
  const platform = getNativePlatform();
@@ -1325,13 +1365,14 @@ function NativeAppBridge() {
1325
1365
  import { mergeProps as mergeProps2 } from "@base-ui/react/merge-props";
1326
1366
  import { useRender as useRender2 } from "@base-ui/react/use-render";
1327
1367
  import { cva as cva3 } from "class-variance-authority";
1368
+ import { cn as cn12 } from "cn";
1328
1369
  import { jsx as jsx12 } from "react/jsx-runtime";
1329
1370
  function BubbleGroup({ className, ...props }) {
1330
1371
  return /* @__PURE__ */ jsx12(
1331
1372
  "div",
1332
1373
  {
1333
1374
  "data-slot": "bubble-group",
1334
- className: cn("flex min-w-0 flex-col gap-2", className),
1375
+ className: cn12("flex min-w-0 flex-col gap-2", className),
1335
1376
  ...props
1336
1377
  }
1337
1378
  );
@@ -1367,7 +1408,7 @@ function Bubble({
1367
1408
  "data-slot": "bubble",
1368
1409
  "data-variant": variant,
1369
1410
  "data-align": align,
1370
- className: cn(bubbleVariants({ variant }), className),
1411
+ className: cn12(bubbleVariants({ variant }), className),
1371
1412
  ...props
1372
1413
  }
1373
1414
  );
@@ -1381,7 +1422,7 @@ function BubbleContent({
1381
1422
  defaultTagName: "div",
1382
1423
  props: mergeProps2(
1383
1424
  {
1384
- className: cn(
1425
+ className: cn12(
1385
1426
  "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",
1386
1427
  className
1387
1428
  )
@@ -1425,7 +1466,7 @@ function BubbleReactions({
1425
1466
  "data-slot": "bubble-reactions",
1426
1467
  "data-align": align,
1427
1468
  "data-side": side,
1428
- className: cn(bubbleReactionsVariants({ side, align }), className),
1469
+ className: cn12(bubbleReactionsVariants({ side, align }), className),
1429
1470
  ...props
1430
1471
  }
1431
1472
  );
@@ -1435,9 +1476,11 @@ function BubbleReactions({
1435
1476
  import { mergeProps as mergeProps3 } from "@base-ui/react/merge-props";
1436
1477
  import { useRender as useRender3 } from "@base-ui/react/use-render";
1437
1478
  import { cva as cva4 } from "class-variance-authority";
1479
+ import { cn as cn14 } from "cn";
1438
1480
 
1439
1481
  // src/ui/separator.tsx
1440
1482
  import { Separator as SeparatorPrimitive } from "@base-ui/react/separator";
1483
+ import { cn as cn13 } from "cn";
1441
1484
  import { jsx as jsx13 } from "react/jsx-runtime";
1442
1485
  function Separator({
1443
1486
  className,
@@ -1449,7 +1492,7 @@ function Separator({
1449
1492
  {
1450
1493
  "data-slot": "separator",
1451
1494
  orientation,
1452
- className: cn(
1495
+ className: cn13(
1453
1496
  "shrink-0 bg-border data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch",
1454
1497
  className
1455
1498
  ),
@@ -1485,7 +1528,7 @@ function ButtonGroup({
1485
1528
  role: "group",
1486
1529
  "data-slot": "button-group",
1487
1530
  "data-orientation": orientation,
1488
- className: cn(buttonGroupVariants({ orientation }), className),
1531
+ className: cn14(buttonGroupVariants({ orientation }), className),
1489
1532
  ...props
1490
1533
  }
1491
1534
  );
@@ -1499,7 +1542,7 @@ function ButtonGroupText({
1499
1542
  defaultTagName: "div",
1500
1543
  props: mergeProps3(
1501
1544
  {
1502
- className: cn(
1545
+ className: cn14(
1503
1546
  "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",
1504
1547
  className
1505
1548
  )
@@ -1522,7 +1565,7 @@ function ButtonGroupSeparator({
1522
1565
  {
1523
1566
  "data-slot": "button-group-separator",
1524
1567
  orientation,
1525
- className: cn(
1568
+ className: cn14(
1526
1569
  "relative self-stretch bg-input data-horizontal:mx-px data-horizontal:w-auto data-vertical:my-px data-vertical:h-auto",
1527
1570
  className
1528
1571
  ),
@@ -1532,16 +1575,17 @@ function ButtonGroupSeparator({
1532
1575
  }
1533
1576
 
1534
1577
  // src/ui/card.tsx
1535
- import * as React2 from "react";
1578
+ import * as React3 from "react";
1579
+ import { cn as cn15 } from "cn";
1536
1580
  import { jsx as jsx15 } from "react/jsx-runtime";
1537
- var Card = React2.forwardRef(function Card2({ className, size = "default", ...props }, ref) {
1581
+ var Card = React3.forwardRef(function Card2({ className, size = "default", ...props }, ref) {
1538
1582
  return /* @__PURE__ */ jsx15(
1539
1583
  "div",
1540
1584
  {
1541
1585
  ref,
1542
1586
  "data-slot": "card",
1543
1587
  "data-size": size,
1544
- className: cn(
1588
+ className: cn15(
1545
1589
  "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",
1546
1590
  className
1547
1591
  ),
@@ -1554,7 +1598,7 @@ function CardHeader({ className, ...props }) {
1554
1598
  "div",
1555
1599
  {
1556
1600
  "data-slot": "card-header",
1557
- className: cn(
1601
+ className: cn15(
1558
1602
  "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)",
1559
1603
  className
1560
1604
  ),
@@ -1567,7 +1611,7 @@ function CardTitle({ className, ...props }) {
1567
1611
  "div",
1568
1612
  {
1569
1613
  "data-slot": "card-title",
1570
- className: cn(
1614
+ className: cn15(
1571
1615
  "text-base leading-snug font-medium group-data-[size=sm]/card:text-sm",
1572
1616
  className
1573
1617
  ),
@@ -1580,7 +1624,7 @@ function CardDescription({ className, ...props }) {
1580
1624
  "div",
1581
1625
  {
1582
1626
  "data-slot": "card-description",
1583
- className: cn("text-sm text-muted-foreground", className),
1627
+ className: cn15("text-sm text-muted-foreground", className),
1584
1628
  ...props
1585
1629
  }
1586
1630
  );
@@ -1590,7 +1634,7 @@ function CardAction({ className, ...props }) {
1590
1634
  "div",
1591
1635
  {
1592
1636
  "data-slot": "card-action",
1593
- className: cn(
1637
+ className: cn15(
1594
1638
  "col-start-2 row-span-2 row-start-1 self-start justify-self-end",
1595
1639
  className
1596
1640
  ),
@@ -1603,7 +1647,7 @@ function CardContent({ className, ...props }) {
1603
1647
  "div",
1604
1648
  {
1605
1649
  "data-slot": "card-content",
1606
- className: cn("px-(--card-spacing)", className),
1650
+ className: cn15("px-(--card-spacing)", className),
1607
1651
  ...props
1608
1652
  }
1609
1653
  );
@@ -1613,7 +1657,7 @@ function CardFooter({ className, ...props }) {
1613
1657
  "div",
1614
1658
  {
1615
1659
  "data-slot": "card-footer",
1616
- className: cn(
1660
+ className: cn15(
1617
1661
  "flex items-center rounded-b-xl border-t bg-muted/50 p-(--card-spacing)",
1618
1662
  className
1619
1663
  ),
@@ -1625,11 +1669,12 @@ function CardFooter({ className, ...props }) {
1625
1669
  // src/ui/carousel.tsx
1626
1670
  import useEmblaCarousel from "embla-carousel-react";
1627
1671
  import { ChevronLeft, ChevronRight } from "lucide-react";
1628
- import * as React3 from "react";
1672
+ import * as React4 from "react";
1673
+ import { cn as cn16 } from "cn";
1629
1674
  import { jsx as jsx16, jsxs as jsxs8 } from "react/jsx-runtime";
1630
- var CarouselContext = React3.createContext(null);
1675
+ var CarouselContext = React4.createContext(null);
1631
1676
  function useCarousel() {
1632
- const context = React3.useContext(CarouselContext);
1677
+ const context = React4.useContext(CarouselContext);
1633
1678
  if (!context) {
1634
1679
  throw new Error("useCarousel must be used within a <Carousel />");
1635
1680
  }
@@ -1651,20 +1696,20 @@ function Carousel({
1651
1696
  },
1652
1697
  plugins
1653
1698
  );
1654
- const [canScrollPrev, setCanScrollPrev] = React3.useState(false);
1655
- const [canScrollNext, setCanScrollNext] = React3.useState(false);
1656
- const onSelect = React3.useCallback((api2) => {
1699
+ const [canScrollPrev, setCanScrollPrev] = React4.useState(false);
1700
+ const [canScrollNext, setCanScrollNext] = React4.useState(false);
1701
+ const onSelect = React4.useCallback((api2) => {
1657
1702
  if (!api2) return;
1658
1703
  setCanScrollPrev(api2.canScrollPrev());
1659
1704
  setCanScrollNext(api2.canScrollNext());
1660
1705
  }, []);
1661
- const scrollPrev = React3.useCallback(() => {
1706
+ const scrollPrev = React4.useCallback(() => {
1662
1707
  api?.scrollPrev();
1663
1708
  }, [api]);
1664
- const scrollNext = React3.useCallback(() => {
1709
+ const scrollNext = React4.useCallback(() => {
1665
1710
  api?.scrollNext();
1666
1711
  }, [api]);
1667
- const handleKeyDown = React3.useCallback(
1712
+ const handleKeyDown = React4.useCallback(
1668
1713
  (event) => {
1669
1714
  if (event.key === "ArrowLeft") {
1670
1715
  event.preventDefault();
@@ -1676,11 +1721,11 @@ function Carousel({
1676
1721
  },
1677
1722
  [scrollPrev, scrollNext]
1678
1723
  );
1679
- React3.useEffect(() => {
1724
+ React4.useEffect(() => {
1680
1725
  if (!api || !setApi) return;
1681
1726
  setApi(api);
1682
1727
  }, [api, setApi]);
1683
- React3.useEffect(() => {
1728
+ React4.useEffect(() => {
1684
1729
  if (!api) return;
1685
1730
  api.on("reInit", onSelect);
1686
1731
  api.on("select", onSelect);
@@ -1707,7 +1752,7 @@ function Carousel({
1707
1752
  "div",
1708
1753
  {
1709
1754
  onKeyDownCapture: handleKeyDown,
1710
- className: cn("relative", className),
1755
+ className: cn16("relative", className),
1711
1756
  role: "region",
1712
1757
  "aria-roledescription": "carousel",
1713
1758
  "data-slot": "carousel",
@@ -1729,7 +1774,7 @@ function CarouselContent({ className, ...props }) {
1729
1774
  children: /* @__PURE__ */ jsx16(
1730
1775
  "div",
1731
1776
  {
1732
- className: cn(
1777
+ className: cn16(
1733
1778
  "flex",
1734
1779
  orientation === "horizontal" ? "-ml-4" : "-mt-4 flex-col",
1735
1780
  className
@@ -1748,7 +1793,7 @@ function CarouselItem({ className, ...props }) {
1748
1793
  role: "group",
1749
1794
  "aria-roledescription": "slide",
1750
1795
  "data-slot": "carousel-item",
1751
- className: cn(
1796
+ className: cn16(
1752
1797
  "min-w-0 shrink-0 grow-0 basis-full",
1753
1798
  orientation === "horizontal" ? "pl-4" : "pt-4",
1754
1799
  className
@@ -1770,7 +1815,7 @@ function CarouselPrevious({
1770
1815
  "data-slot": "carousel-previous",
1771
1816
  variant,
1772
1817
  size,
1773
- className: cn(
1818
+ className: cn16(
1774
1819
  "absolute touch-manipulation rounded-full",
1775
1820
  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",
1776
1821
  className
@@ -1798,7 +1843,7 @@ function CarouselNext({
1798
1843
  "data-slot": "carousel-next",
1799
1844
  variant,
1800
1845
  size,
1801
- className: cn(
1846
+ className: cn16(
1802
1847
  "absolute touch-manipulation rounded-full",
1803
1848
  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",
1804
1849
  className
@@ -1815,14 +1860,15 @@ function CarouselNext({
1815
1860
  }
1816
1861
 
1817
1862
  // src/ui/chart.tsx
1818
- import * as React4 from "react";
1863
+ import * as React5 from "react";
1819
1864
  import * as RechartsPrimitive from "recharts";
1865
+ import { cn as cn17 } from "cn";
1820
1866
  import { Fragment, jsx as jsx17, jsxs as jsxs9 } from "react/jsx-runtime";
1821
1867
  var THEMES = { light: "", dark: ".dark" };
1822
1868
  var INITIAL_DIMENSION = { width: 320, height: 200 };
1823
- var ChartContext = React4.createContext(null);
1869
+ var ChartContext = React5.createContext(null);
1824
1870
  function useChart() {
1825
- const context = React4.useContext(ChartContext);
1871
+ const context = React5.useContext(ChartContext);
1826
1872
  if (!context) {
1827
1873
  throw new Error("useChart must be used within a <ChartContainer />");
1828
1874
  }
@@ -1836,14 +1882,14 @@ function ChartContainer({
1836
1882
  initialDimension = INITIAL_DIMENSION,
1837
1883
  ...props
1838
1884
  }) {
1839
- const uniqueId = React4.useId();
1885
+ const uniqueId = React5.useId();
1840
1886
  const chartId = `chart-${id ?? uniqueId.replace(/:/g, "")}`;
1841
1887
  return /* @__PURE__ */ jsx17(ChartContext.Provider, { value: { config }, children: /* @__PURE__ */ jsxs9(
1842
1888
  "div",
1843
1889
  {
1844
1890
  "data-slot": "chart",
1845
1891
  "data-chart": chartId,
1846
- className: cn(
1892
+ className: cn17(
1847
1893
  "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",
1848
1894
  className
1849
1895
  ),
@@ -1903,7 +1949,7 @@ function ChartTooltipContent({
1903
1949
  labelKey
1904
1950
  }) {
1905
1951
  const { config } = useChart();
1906
- const tooltipLabel = React4.useMemo(() => {
1952
+ const tooltipLabel = React5.useMemo(() => {
1907
1953
  if (hideLabel || !payload?.length) {
1908
1954
  return null;
1909
1955
  }
@@ -1912,12 +1958,12 @@ function ChartTooltipContent({
1912
1958
  const itemConfig = getPayloadConfigFromPayload(config, item, key);
1913
1959
  const value = !labelKey && typeof label === "string" ? config[label]?.label ?? label : itemConfig?.label;
1914
1960
  if (labelFormatter) {
1915
- return /* @__PURE__ */ jsx17("div", { className: cn("font-medium", labelClassName), children: labelFormatter(value, payload) });
1961
+ return /* @__PURE__ */ jsx17("div", { className: cn17("font-medium", labelClassName), children: labelFormatter(value, payload) });
1916
1962
  }
1917
1963
  if (!value) {
1918
1964
  return null;
1919
1965
  }
1920
- return /* @__PURE__ */ jsx17("div", { className: cn("font-medium", labelClassName), children: value });
1966
+ return /* @__PURE__ */ jsx17("div", { className: cn17("font-medium", labelClassName), children: value });
1921
1967
  }, [
1922
1968
  label,
1923
1969
  labelFormatter,
@@ -1934,7 +1980,7 @@ function ChartTooltipContent({
1934
1980
  return /* @__PURE__ */ jsxs9(
1935
1981
  "div",
1936
1982
  {
1937
- className: cn(
1983
+ className: cn17(
1938
1984
  "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",
1939
1985
  className
1940
1986
  ),
@@ -1947,7 +1993,7 @@ function ChartTooltipContent({
1947
1993
  return /* @__PURE__ */ jsx17(
1948
1994
  "div",
1949
1995
  {
1950
- className: cn(
1996
+ className: cn17(
1951
1997
  "flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground",
1952
1998
  indicator === "dot" && "items-center"
1953
1999
  ),
@@ -1955,7 +2001,7 @@ function ChartTooltipContent({
1955
2001
  itemConfig?.icon ? /* @__PURE__ */ jsx17(itemConfig.icon, {}) : !hideIndicator && /* @__PURE__ */ jsx17(
1956
2002
  "div",
1957
2003
  {
1958
- className: cn(
2004
+ className: cn17(
1959
2005
  "shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)",
1960
2006
  {
1961
2007
  "h-2.5 w-2.5": indicator === "dot",
@@ -1973,7 +2019,7 @@ function ChartTooltipContent({
1973
2019
  /* @__PURE__ */ jsxs9(
1974
2020
  "div",
1975
2021
  {
1976
- className: cn(
2022
+ className: cn17(
1977
2023
  "flex flex-1 justify-between leading-none",
1978
2024
  nestLabel ? "items-end" : "items-center"
1979
2025
  ),
@@ -2010,7 +2056,7 @@ function ChartLegendContent({
2010
2056
  return /* @__PURE__ */ jsx17(
2011
2057
  "div",
2012
2058
  {
2013
- className: cn(
2059
+ className: cn17(
2014
2060
  "flex items-center justify-center gap-4",
2015
2061
  verticalAlign === "top" ? "pb-3" : "pt-3",
2016
2062
  className
@@ -2021,7 +2067,7 @@ function ChartLegendContent({
2021
2067
  return /* @__PURE__ */ jsxs9(
2022
2068
  "div",
2023
2069
  {
2024
- className: cn(
2070
+ className: cn17(
2025
2071
  "flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground"
2026
2072
  ),
2027
2073
  children: [
@@ -2059,13 +2105,14 @@ function getPayloadConfigFromPayload(config, payload, key) {
2059
2105
 
2060
2106
  // src/ui/checkbox.tsx
2061
2107
  import { Checkbox as CheckboxPrimitive } from "@base-ui/react/checkbox";
2108
+ import { cn as cn18 } from "cn";
2062
2109
  import { jsx as jsx18 } from "react/jsx-runtime";
2063
2110
  function Checkbox({ className, children, ...props }) {
2064
2111
  return /* @__PURE__ */ jsx18(
2065
2112
  CheckboxPrimitive.Root,
2066
2113
  {
2067
2114
  "data-slot": "checkbox",
2068
- className: cn(
2115
+ className: cn18(
2069
2116
  "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",
2070
2117
  className
2071
2118
  ),
@@ -2084,20 +2131,23 @@ function Checkbox({ className, children, ...props }) {
2084
2131
 
2085
2132
  // src/ui/combobox.tsx
2086
2133
  import { Combobox as ComboboxPrimitive } from "@base-ui/react";
2087
- import * as React5 from "react";
2134
+ import * as React6 from "react";
2135
+ import { cn as cn21 } from "cn";
2088
2136
  import { Check, ChevronDown as ChevronDown2, Xmark as Xmark2 } from "@gravity-ui/icons";
2089
2137
 
2090
2138
  // src/ui/input-group.tsx
2091
2139
  import { cva as cva5 } from "class-variance-authority";
2140
+ import { cn as cn20 } from "cn";
2092
2141
 
2093
2142
  // src/ui/textarea.tsx
2143
+ import { cn as cn19 } from "cn";
2094
2144
  import { jsx as jsx19 } from "react/jsx-runtime";
2095
2145
  function Textarea({ className, ...props }) {
2096
2146
  return /* @__PURE__ */ jsx19(
2097
2147
  "textarea",
2098
2148
  {
2099
2149
  "data-slot": "textarea",
2100
- className: cn(
2150
+ className: cn19(
2101
2151
  "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",
2102
2152
  className
2103
2153
  ),
@@ -2114,7 +2164,7 @@ function InputGroup({ className, ...props }) {
2114
2164
  {
2115
2165
  "data-slot": "input-group",
2116
2166
  role: "group",
2117
- className: cn(
2167
+ className: cn20(
2118
2168
  "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",
2119
2169
  className
2120
2170
  ),
@@ -2150,7 +2200,7 @@ function InputGroupAddon({
2150
2200
  role: "group",
2151
2201
  "data-slot": "input-group-addon",
2152
2202
  "data-align": align,
2153
- className: cn(inputGroupAddonVariants({ align }), className),
2203
+ className: cn20(inputGroupAddonVariants({ align }), className),
2154
2204
  onClick: (e) => {
2155
2205
  if (e.target.closest("button")) {
2156
2206
  return;
@@ -2194,7 +2244,7 @@ function InputGroupButton({
2194
2244
  type,
2195
2245
  "data-size": size,
2196
2246
  variant,
2197
- className: cn(inputGroupButtonVariants({ size }), className),
2247
+ className: cn20(inputGroupButtonVariants({ size }), className),
2198
2248
  ...props
2199
2249
  }
2200
2250
  );
@@ -2203,7 +2253,7 @@ function InputGroupText({ className, ...props }) {
2203
2253
  return /* @__PURE__ */ jsx20(
2204
2254
  "span",
2205
2255
  {
2206
- className: cn(
2256
+ className: cn20(
2207
2257
  "flex items-center gap-2 text-sm text-muted-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4",
2208
2258
  className
2209
2259
  ),
@@ -2219,7 +2269,7 @@ function InputGroupInput({
2219
2269
  Input,
2220
2270
  {
2221
2271
  "data-slot": "input-group-control",
2222
- className: cn(
2272
+ className: cn20(
2223
2273
  "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",
2224
2274
  className
2225
2275
  ),
@@ -2235,7 +2285,7 @@ function InputGroupTextarea({
2235
2285
  Textarea,
2236
2286
  {
2237
2287
  "data-slot": "input-group-control",
2238
- className: cn(
2288
+ className: cn20(
2239
2289
  "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",
2240
2290
  className
2241
2291
  ),
@@ -2259,7 +2309,7 @@ function ComboboxTrigger({
2259
2309
  ComboboxPrimitive.Trigger,
2260
2310
  {
2261
2311
  "data-slot": "combobox-trigger",
2262
- className: cn("[&_svg:not([class*='size-'])]:size-4", className),
2312
+ className: cn21("[&_svg:not([class*='size-'])]:size-4", className),
2263
2313
  ...props,
2264
2314
  children: [
2265
2315
  children,
@@ -2274,7 +2324,7 @@ function ComboboxClear({ className, ...props }) {
2274
2324
  {
2275
2325
  "data-slot": "combobox-clear",
2276
2326
  render: /* @__PURE__ */ jsx21(InputGroupButton, { variant: "ghost", size: "icon-xs" }),
2277
- className: cn(className),
2327
+ className: cn21(className),
2278
2328
  ...props,
2279
2329
  children: /* @__PURE__ */ jsx21(Xmark2, { className: "pointer-events-none" })
2280
2330
  }
@@ -2290,7 +2340,7 @@ function ComboboxInput({
2290
2340
  endContent,
2291
2341
  ...props
2292
2342
  }) {
2293
- return /* @__PURE__ */ jsxs10(InputGroup, { className: cn("w-auto", className), children: [
2343
+ return /* @__PURE__ */ jsxs10(InputGroup, { className: cn21("w-auto", className), children: [
2294
2344
  /* @__PURE__ */ jsx21(
2295
2345
  ComboboxPrimitive.Input,
2296
2346
  {
@@ -2340,7 +2390,7 @@ function ComboboxContent({
2340
2390
  {
2341
2391
  "data-slot": "combobox-content",
2342
2392
  "data-chips": !!anchor,
2343
- className: cn(
2393
+ className: cn21(
2344
2394
  "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",
2345
2395
  className
2346
2396
  ),
@@ -2355,7 +2405,7 @@ function ComboboxList({ className, ...props }) {
2355
2405
  ComboboxPrimitive.List,
2356
2406
  {
2357
2407
  "data-slot": "combobox-list",
2358
- className: cn(
2408
+ className: cn21(
2359
2409
  "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",
2360
2410
  className
2361
2411
  ),
@@ -2372,7 +2422,7 @@ function ComboboxItem({
2372
2422
  ComboboxPrimitive.Item,
2373
2423
  {
2374
2424
  "data-slot": "combobox-item",
2375
- className: cn(
2425
+ className: cn21(
2376
2426
  "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",
2377
2427
  className
2378
2428
  ),
@@ -2395,7 +2445,7 @@ function ComboboxGroup({ className, ...props }) {
2395
2445
  ComboboxPrimitive.Group,
2396
2446
  {
2397
2447
  "data-slot": "combobox-group",
2398
- className: cn(className),
2448
+ className: cn21(className),
2399
2449
  ...props
2400
2450
  }
2401
2451
  );
@@ -2408,7 +2458,7 @@ function ComboboxLabel({
2408
2458
  ComboboxPrimitive.GroupLabel,
2409
2459
  {
2410
2460
  "data-slot": "combobox-label",
2411
- className: cn("px-2 py-1.5 text-xs text-muted-foreground", className),
2461
+ className: cn21("px-2 py-1.5 text-xs text-muted-foreground", className),
2412
2462
  ...props
2413
2463
  }
2414
2464
  );
@@ -2421,7 +2471,7 @@ function ComboboxEmpty({ className, ...props }) {
2421
2471
  ComboboxPrimitive.Empty,
2422
2472
  {
2423
2473
  "data-slot": "combobox-empty",
2424
- className: cn(
2474
+ className: cn21(
2425
2475
  "hidden w-full justify-center py-2 text-center text-sm text-muted-foreground group-data-empty/combobox-content:flex",
2426
2476
  className
2427
2477
  ),
@@ -2437,7 +2487,7 @@ function ComboboxSeparator({
2437
2487
  ComboboxPrimitive.Separator,
2438
2488
  {
2439
2489
  "data-slot": "combobox-separator",
2440
- className: cn("-mx-1 my-1 h-px bg-border", className),
2490
+ className: cn21("-mx-1 my-1 h-px bg-border", className),
2441
2491
  ...props
2442
2492
  }
2443
2493
  );
@@ -2450,7 +2500,7 @@ function ComboboxChips({
2450
2500
  ComboboxPrimitive.Chips,
2451
2501
  {
2452
2502
  "data-slot": "combobox-chips",
2453
- className: cn(
2503
+ className: cn21(
2454
2504
  "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",
2455
2505
  className
2456
2506
  ),
@@ -2468,7 +2518,7 @@ function ComboboxChip({
2468
2518
  ComboboxPrimitive.Chip,
2469
2519
  {
2470
2520
  "data-slot": "combobox-chip",
2471
- className: cn(
2521
+ className: cn21(
2472
2522
  "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",
2473
2523
  className
2474
2524
  ),
@@ -2496,21 +2546,23 @@ function ComboboxChipsInput({
2496
2546
  ComboboxPrimitive.Input,
2497
2547
  {
2498
2548
  "data-slot": "combobox-chip-input",
2499
- className: cn("min-w-16 flex-1 outline-none", className),
2549
+ className: cn21("min-w-16 flex-1 outline-none", className),
2500
2550
  ...props
2501
2551
  }
2502
2552
  );
2503
2553
  }
2504
2554
  function useComboboxAnchor() {
2505
- return React5.useRef(null);
2555
+ return React6.useRef(null);
2506
2556
  }
2507
2557
 
2508
2558
  // src/ui/command.tsx
2509
2559
  import { Command as CommandPrimitive } from "cmdk";
2560
+ import { cn as cn23 } from "cn";
2510
2561
  import { Magnifier } from "@gravity-ui/icons";
2511
2562
 
2512
2563
  // src/ui/dialog.tsx
2513
2564
  import { Dialog as DialogPrimitive } from "@base-ui/react/dialog";
2565
+ import { cn as cn22 } from "cn";
2514
2566
  import { Xmark as Xmark3 } from "@gravity-ui/icons";
2515
2567
  import { jsx as jsx22, jsxs as jsxs11 } from "react/jsx-runtime";
2516
2568
  function Dialog({ ...props }) {
@@ -2533,7 +2585,7 @@ function DialogOverlay({
2533
2585
  DialogPrimitive.Backdrop,
2534
2586
  {
2535
2587
  "data-slot": "dialog-overlay",
2536
- className: cn(
2588
+ className: cn22(
2537
2589
  "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",
2538
2590
  className
2539
2591
  ),
@@ -2553,7 +2605,7 @@ function DialogContent({
2553
2605
  DialogPrimitive.Popup,
2554
2606
  {
2555
2607
  "data-slot": "dialog-content",
2556
- className: cn(
2608
+ className: cn22(
2557
2609
  "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",
2558
2610
  className
2559
2611
  ),
@@ -2588,7 +2640,7 @@ function DialogHeader({ className, ...props }) {
2588
2640
  "div",
2589
2641
  {
2590
2642
  "data-slot": "dialog-header",
2591
- className: cn("flex flex-col gap-2", className),
2643
+ className: cn22("flex flex-col gap-2", className),
2592
2644
  ...props
2593
2645
  }
2594
2646
  );
@@ -2603,7 +2655,7 @@ function DialogFooter({
2603
2655
  "div",
2604
2656
  {
2605
2657
  "data-slot": "dialog-footer",
2606
- className: cn(
2658
+ className: cn22(
2607
2659
  "flex shrink-0 flex-col-reverse items-center justify-center gap-2 p-4 pt-0 sm:flex-row",
2608
2660
  className
2609
2661
  ),
@@ -2620,7 +2672,7 @@ function DialogTitle({ className, ...props }) {
2620
2672
  DialogPrimitive.Title,
2621
2673
  {
2622
2674
  "data-slot": "dialog-title",
2623
- className: cn("text-base leading-none font-medium", className),
2675
+ className: cn22("text-base leading-none font-medium", className),
2624
2676
  ...props
2625
2677
  }
2626
2678
  );
@@ -2633,7 +2685,7 @@ function DialogDescription({
2633
2685
  DialogPrimitive.Description,
2634
2686
  {
2635
2687
  "data-slot": "dialog-description",
2636
- className: cn(
2688
+ className: cn22(
2637
2689
  "text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground",
2638
2690
  className
2639
2691
  ),
@@ -2652,7 +2704,7 @@ function Command({
2652
2704
  CommandPrimitive,
2653
2705
  {
2654
2706
  "data-slot": "command",
2655
- className: cn(
2707
+ className: cn23(
2656
2708
  "flex size-full flex-col overflow-hidden rounded-xl! bg-background text-popover-foreground outline-none",
2657
2709
  className
2658
2710
  ),
@@ -2676,7 +2728,7 @@ function CommandDialog({
2676
2728
  /* @__PURE__ */ jsx23(
2677
2729
  DialogContent,
2678
2730
  {
2679
- className: cn(
2731
+ className: cn23(
2680
2732
  "top-1/3 translate-y-0 overflow-hidden rounded-xl! p-0",
2681
2733
  className
2682
2734
  ),
@@ -2697,7 +2749,7 @@ function CommandInput({
2697
2749
  InputGroup,
2698
2750
  {
2699
2751
  "data-slot": "command-input-wrapper",
2700
- className: cn(
2752
+ className: cn23(
2701
2753
  "h-8! border-input/30 bg-input/30 shadow-none! *:data-[slot=input-group-addon]:pl-2!",
2702
2754
  className
2703
2755
  ),
@@ -2726,7 +2778,7 @@ function CommandList({
2726
2778
  CommandPrimitive.List,
2727
2779
  {
2728
2780
  "data-slot": "command-list",
2729
- className: cn(
2781
+ className: cn23(
2730
2782
  "no-scrollbar max-h-72 scroll-py-1 overflow-x-hidden overflow-y-auto outline-none",
2731
2783
  className
2732
2784
  ),
@@ -2742,7 +2794,7 @@ function CommandEmpty({
2742
2794
  CommandPrimitive.Empty,
2743
2795
  {
2744
2796
  "data-slot": "command-empty",
2745
- className: cn("py-6 text-center text-sm", className),
2797
+ className: cn23("py-6 text-center text-sm", className),
2746
2798
  ...props
2747
2799
  }
2748
2800
  );
@@ -2755,7 +2807,7 @@ function CommandGroup({
2755
2807
  CommandPrimitive.Group,
2756
2808
  {
2757
2809
  "data-slot": "command-group",
2758
- className: cn(
2810
+ className: cn23(
2759
2811
  "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",
2760
2812
  className
2761
2813
  ),
@@ -2771,7 +2823,7 @@ function CommandSeparator({
2771
2823
  CommandPrimitive.Separator,
2772
2824
  {
2773
2825
  "data-slot": "command-separator",
2774
- className: cn("-mx-1 h-px bg-border", className),
2826
+ className: cn23("-mx-1 h-px bg-border", className),
2775
2827
  ...props
2776
2828
  }
2777
2829
  );
@@ -2785,7 +2837,7 @@ function CommandItem({
2785
2837
  CommandPrimitive.Item,
2786
2838
  {
2787
2839
  "data-slot": "command-item",
2788
- className: cn(
2840
+ className: cn23(
2789
2841
  "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",
2790
2842
  className
2791
2843
  ),
@@ -2802,7 +2854,7 @@ function CommandShortcut({
2802
2854
  "span",
2803
2855
  {
2804
2856
  "data-slot": "command-shortcut",
2805
- className: cn(
2857
+ className: cn23(
2806
2858
  "ml-auto text-xs tracking-widest text-muted-foreground group-data-selected/command-item:text-foreground",
2807
2859
  className
2808
2860
  ),
@@ -2812,7 +2864,8 @@ function CommandShortcut({
2812
2864
  }
2813
2865
 
2814
2866
  // src/ui/dashed.tsx
2815
- import * as React6 from "react";
2867
+ import * as React7 from "react";
2868
+ import { cn as cn24 } from "cn";
2816
2869
  import { jsx as jsx24 } from "react/jsx-runtime";
2817
2870
  function DashedSeparator({
2818
2871
  className,
@@ -2820,9 +2873,9 @@ function DashedSeparator({
2820
2873
  minimumGap = 8,
2821
2874
  thickness = 1
2822
2875
  }) {
2823
- const containerRef = React6.useRef(null);
2824
- const [dashCount, setDashCount] = React6.useState(0);
2825
- React6.useEffect(() => {
2876
+ const containerRef = React7.useRef(null);
2877
+ const [dashCount, setDashCount] = React7.useState(0);
2878
+ React7.useEffect(() => {
2826
2879
  const element = containerRef.current;
2827
2880
  if (!element) return;
2828
2881
  const updateDashCount = () => {
@@ -2843,7 +2896,7 @@ function DashedSeparator({
2843
2896
  {
2844
2897
  ref: containerRef,
2845
2898
  "aria-hidden": "true",
2846
- className: cn(
2899
+ className: cn24(
2847
2900
  "flex w-full items-center justify-between overflow-hidden text-border",
2848
2901
  className
2849
2902
  ),
@@ -2864,8 +2917,9 @@ function DashedSeparator({
2864
2917
  }
2865
2918
 
2866
2919
  // src/ui/dock.tsx
2920
+ import { cn as cn25 } from "cn";
2867
2921
  import { motion as motion4 } from "motion/react";
2868
- import * as React7 from "react";
2922
+ import * as React8 from "react";
2869
2923
  import { jsx as jsx25, jsxs as jsxs13 } from "react/jsx-runtime";
2870
2924
  var floatingAnimation = {
2871
2925
  initial: { y: 0 },
@@ -2878,7 +2932,7 @@ var floatingAnimation = {
2878
2932
  }
2879
2933
  }
2880
2934
  };
2881
- var DockIconButton = React7.forwardRef(
2935
+ var DockIconButton = React8.forwardRef(
2882
2936
  ({ icon: Icon, label, onClick, className }, ref) => {
2883
2937
  return /* @__PURE__ */ jsxs13(
2884
2938
  motion4.button,
@@ -2887,7 +2941,7 @@ var DockIconButton = React7.forwardRef(
2887
2941
  whileHover: { scale: 1.1, y: -2 },
2888
2942
  whileTap: { scale: 0.95 },
2889
2943
  onClick,
2890
- className: cn(
2944
+ className: cn25(
2891
2945
  "group relative rounded-lg p-3",
2892
2946
  "transition-colors hover:bg-secondary",
2893
2947
  className
@@ -2897,7 +2951,7 @@ var DockIconButton = React7.forwardRef(
2897
2951
  /* @__PURE__ */ jsx25(
2898
2952
  "span",
2899
2953
  {
2900
- className: cn(
2954
+ className: cn25(
2901
2955
  "absolute -top-8 left-1/2 -translate-x-1/2",
2902
2956
  "rounded px-2 py-1 text-xs",
2903
2957
  "bg-background text-popover-foreground",
@@ -2913,13 +2967,13 @@ var DockIconButton = React7.forwardRef(
2913
2967
  }
2914
2968
  );
2915
2969
  DockIconButton.displayName = "DockIconButton";
2916
- var Dock = React7.forwardRef(
2970
+ var Dock = React8.forwardRef(
2917
2971
  ({ items, className }, ref) => {
2918
2972
  return /* @__PURE__ */ jsx25(
2919
2973
  "div",
2920
2974
  {
2921
2975
  ref,
2922
- className: cn(
2976
+ className: cn25(
2923
2977
  "flex h-64 w-full items-center justify-center p-2",
2924
2978
  className
2925
2979
  ),
@@ -2929,7 +2983,7 @@ var Dock = React7.forwardRef(
2929
2983
  initial: "initial",
2930
2984
  animate: "animate",
2931
2985
  variants: floatingAnimation,
2932
- className: cn(
2986
+ className: cn25(
2933
2987
  "flex items-center gap-1 rounded-2xl p-2",
2934
2988
  "border shadow-lg backdrop-blur-lg",
2935
2989
  "border-border bg-background/90",
@@ -2946,11 +3000,12 @@ Dock.displayName = "Dock";
2946
3000
 
2947
3001
  // src/ui/drawer.tsx
2948
3002
  import { Drawer as DrawerPrimitive } from "@base-ui/react/drawer";
2949
- import * as React8 from "react";
3003
+ import * as React9 from "react";
3004
+ import { cn as cn26 } from "cn";
2950
3005
  import { jsx as jsx26, jsxs as jsxs14 } from "react/jsx-runtime";
2951
- var DrawerContext = React8.createContext(null);
3006
+ var DrawerContext = React9.createContext(null);
2952
3007
  function useDrawer() {
2953
- const context = React8.useContext(DrawerContext);
3008
+ const context = React9.useContext(DrawerContext);
2954
3009
  if (!context) {
2955
3010
  throw new Error("useDrawer must be used within a Drawer.");
2956
3011
  }
@@ -2965,7 +3020,7 @@ function Drawer({
2965
3020
  }) {
2966
3021
  const hasSnapPoints = snapPoints != null && snapPoints.length > 0;
2967
3022
  const resolvedShowSwipeHandle = showSwipeHandle ?? (swipeDirection === "down" || swipeDirection === "up");
2968
- const contextValue = React8.useMemo(
3023
+ const contextValue = React9.useMemo(
2969
3024
  () => ({
2970
3025
  hasSnapPoints,
2971
3026
  modal,
@@ -3002,7 +3057,7 @@ function DrawerOverlay({
3002
3057
  DrawerPrimitive.Backdrop,
3003
3058
  {
3004
3059
  "data-slot": "drawer-overlay",
3005
- className: cn(
3060
+ className: cn26(
3006
3061
  "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",
3007
3062
  className
3008
3063
  ),
@@ -3019,7 +3074,7 @@ function DrawerSwipeHandle({
3019
3074
  {
3020
3075
  "data-slot": "drawer-swipe-handle",
3021
3076
  "aria-hidden": "true",
3022
- className: cn(
3077
+ className: cn26(
3023
3078
  "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",
3024
3079
  className
3025
3080
  ),
@@ -3048,7 +3103,7 @@ function DrawerContent({
3048
3103
  "data-slot": "drawer-popup",
3049
3104
  "data-swipe-axis": swipeAxis,
3050
3105
  "data-snap-points": hasSnapPoints ? "" : void 0,
3051
- className: cn(
3106
+ className: cn26(
3052
3107
  // Base.
3053
3108
  "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",
3054
3109
  // Nested.
@@ -3082,7 +3137,7 @@ function DrawerContent({
3082
3137
  DrawerPrimitive.Content,
3083
3138
  {
3084
3139
  "data-slot": "drawer-content",
3085
- className: cn(
3140
+ className: cn26(
3086
3141
  "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"
3087
3142
  ),
3088
3143
  children
@@ -3100,7 +3155,7 @@ function DrawerHeader({ className, ...props }) {
3100
3155
  "div",
3101
3156
  {
3102
3157
  "data-slot": "drawer-header",
3103
- className: cn(
3158
+ className: cn26(
3104
3159
  "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",
3105
3160
  className
3106
3161
  ),
@@ -3113,7 +3168,7 @@ function DrawerFooter({ className, ...props }) {
3113
3168
  "div",
3114
3169
  {
3115
3170
  "data-slot": "drawer-footer",
3116
- className: cn("mt-auto flex shrink-0 flex-col gap-2 p-4 pt-0", className),
3171
+ className: cn26("mt-auto flex shrink-0 flex-col gap-2 p-4 pt-0", className),
3117
3172
  ...props
3118
3173
  }
3119
3174
  );
@@ -3123,7 +3178,7 @@ function DrawerTitle({ className, ...props }) {
3123
3178
  DrawerPrimitive.Title,
3124
3179
  {
3125
3180
  "data-slot": "drawer-title",
3126
- className: cn(
3181
+ className: cn26(
3127
3182
  "font-heading text-base font-medium text-foreground",
3128
3183
  className
3129
3184
  ),
@@ -3139,7 +3194,7 @@ function DrawerDescription({
3139
3194
  DrawerPrimitive.Description,
3140
3195
  {
3141
3196
  "data-slot": "drawer-description",
3142
- className: cn("text-sm text-balance text-muted-foreground", className),
3197
+ className: cn26("text-sm text-balance text-muted-foreground", className),
3143
3198
  ...props
3144
3199
  }
3145
3200
  );
@@ -3147,6 +3202,7 @@ function DrawerDescription({
3147
3202
 
3148
3203
  // src/ui/dropdown-menu.tsx
3149
3204
  import { Menu as MenuPrimitive } from "@base-ui/react/menu";
3205
+ import { cn as cn27 } from "cn";
3150
3206
  import { CheckIcon, ChevronRightIcon } from "lucide-react";
3151
3207
  import { jsx as jsx27, jsxs as jsxs15 } from "react/jsx-runtime";
3152
3208
  function DropdownMenu({ ...props }) {
@@ -3178,7 +3234,7 @@ function DropdownMenuContent({
3178
3234
  MenuPrimitive.Popup,
3179
3235
  {
3180
3236
  "data-slot": "dropdown-menu-content",
3181
- className: cn(
3237
+ className: cn27(
3182
3238
  "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",
3183
3239
  className
3184
3240
  ),
@@ -3201,7 +3257,7 @@ function DropdownMenuLabel({
3201
3257
  {
3202
3258
  "data-slot": "dropdown-menu-label",
3203
3259
  "data-inset": inset,
3204
- className: cn(
3260
+ className: cn27(
3205
3261
  "px-1.5 py-1 text-xs font-medium text-muted-foreground data-inset:pl-7",
3206
3262
  className
3207
3263
  ),
@@ -3221,7 +3277,7 @@ function DropdownMenuItem({
3221
3277
  "data-slot": "dropdown-menu-item",
3222
3278
  "data-inset": inset,
3223
3279
  "data-variant": variant,
3224
- className: cn(
3280
+ className: cn27(
3225
3281
  "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",
3226
3282
  className
3227
3283
  ),
@@ -3243,7 +3299,7 @@ function DropdownMenuSubTrigger({
3243
3299
  {
3244
3300
  "data-slot": "dropdown-menu-sub-trigger",
3245
3301
  "data-inset": inset,
3246
- className: cn(
3302
+ className: cn27(
3247
3303
  "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",
3248
3304
  className
3249
3305
  ),
@@ -3267,7 +3323,7 @@ function DropdownMenuSubContent({
3267
3323
  DropdownMenuContent,
3268
3324
  {
3269
3325
  "data-slot": "dropdown-menu-sub-content",
3270
- className: cn(
3326
+ className: cn27(
3271
3327
  "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",
3272
3328
  className
3273
3329
  ),
@@ -3291,7 +3347,7 @@ function DropdownMenuCheckboxItem({
3291
3347
  {
3292
3348
  "data-slot": "dropdown-menu-checkbox-item",
3293
3349
  "data-inset": inset,
3294
- className: cn(
3350
+ className: cn27(
3295
3351
  "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",
3296
3352
  className
3297
3353
  ),
@@ -3331,7 +3387,7 @@ function DropdownMenuRadioItem({
3331
3387
  {
3332
3388
  "data-slot": "dropdown-menu-radio-item",
3333
3389
  "data-inset": inset,
3334
- className: cn(
3390
+ className: cn27(
3335
3391
  "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",
3336
3392
  className
3337
3393
  ),
@@ -3358,7 +3414,7 @@ function DropdownMenuSeparator({
3358
3414
  MenuPrimitive.Separator,
3359
3415
  {
3360
3416
  "data-slot": "dropdown-menu-separator",
3361
- className: cn("-mx-1 my-1 h-px bg-border", className),
3417
+ className: cn27("-mx-1 my-1 h-px bg-border", className),
3362
3418
  ...props
3363
3419
  }
3364
3420
  );
@@ -3371,7 +3427,7 @@ function DropdownMenuShortcut({
3371
3427
  "span",
3372
3428
  {
3373
3429
  "data-slot": "dropdown-menu-shortcut",
3374
- className: cn(
3430
+ className: cn27(
3375
3431
  "ml-auto text-xs tracking-widest text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground",
3376
3432
  className
3377
3433
  ),
@@ -3382,13 +3438,14 @@ function DropdownMenuShortcut({
3382
3438
 
3383
3439
  // src/ui/empty.tsx
3384
3440
  import { cva as cva6 } from "class-variance-authority";
3441
+ import { cn as cn28 } from "cn";
3385
3442
  import { jsx as jsx28 } from "react/jsx-runtime";
3386
3443
  function Empty({ className, ...props }) {
3387
3444
  return /* @__PURE__ */ jsx28(
3388
3445
  "div",
3389
3446
  {
3390
3447
  "data-slot": "empty",
3391
- className: cn(
3448
+ className: cn28(
3392
3449
  "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",
3393
3450
  className
3394
3451
  ),
@@ -3401,7 +3458,7 @@ function EmptyHeader({ className, ...props }) {
3401
3458
  "div",
3402
3459
  {
3403
3460
  "data-slot": "empty-header",
3404
- className: cn("flex max-w-sm flex-col items-center gap-2", className),
3461
+ className: cn28("flex max-w-sm flex-col items-center gap-2", className),
3405
3462
  ...props
3406
3463
  }
3407
3464
  );
@@ -3430,7 +3487,7 @@ function EmptyMedia({
3430
3487
  {
3431
3488
  "data-slot": "empty-icon",
3432
3489
  "data-variant": variant,
3433
- className: cn(emptyMediaVariants({ variant, className })),
3490
+ className: cn28(emptyMediaVariants({ variant, className })),
3434
3491
  ...props
3435
3492
  }
3436
3493
  );
@@ -3440,7 +3497,7 @@ function EmptyTitle({ className, ...props }) {
3440
3497
  "div",
3441
3498
  {
3442
3499
  "data-slot": "empty-title",
3443
- className: cn("text-sm font-medium tracking-tight", className),
3500
+ className: cn28("text-sm font-medium tracking-tight", className),
3444
3501
  ...props
3445
3502
  }
3446
3503
  );
@@ -3450,7 +3507,7 @@ function EmptyDescription({ className, ...props }) {
3450
3507
  "div",
3451
3508
  {
3452
3509
  "data-slot": "empty-description",
3453
- className: cn(
3510
+ className: cn28(
3454
3511
  "text-sm/relaxed text-muted-foreground [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary",
3455
3512
  className
3456
3513
  ),
@@ -3463,7 +3520,7 @@ function EmptyContent({ className, ...props }) {
3463
3520
  "div",
3464
3521
  {
3465
3522
  "data-slot": "empty-content",
3466
- className: cn(
3523
+ className: cn28(
3467
3524
  "flex w-full max-w-sm min-w-0 flex-col items-center gap-2.5 text-sm text-balance",
3468
3525
  className
3469
3526
  ),
@@ -3472,6 +3529,51 @@ function EmptyContent({ className, ...props }) {
3472
3529
  );
3473
3530
  }
3474
3531
 
3532
+ // src/hooks/useMediaQuery.ts
3533
+ import { useEffect as useEffect4, useState as useState4 } from "react";
3534
+ function useMediaQuery(query) {
3535
+ const [matches, setMatches] = useState4(false);
3536
+ useEffect4(() => {
3537
+ const mediaQuery = window.matchMedia(query);
3538
+ const handleChange = () => setMatches(mediaQuery.matches);
3539
+ handleChange();
3540
+ mediaQuery.addEventListener("change", handleChange);
3541
+ return () => mediaQuery.removeEventListener("change", handleChange);
3542
+ }, [query]);
3543
+ return matches;
3544
+ }
3545
+
3546
+ // src/ui/farmer/div.tsx
3547
+ import { motion as motion5 } from "motion/react";
3548
+ import React10 from "react";
3549
+ import { jsx as jsx29 } from "react/jsx-runtime";
3550
+ var AnimatedDiv = React10.forwardRef(
3551
+ ({ variants, mobileVariants, className, children, infinity, ...motionProps }, ref) => {
3552
+ const isDesktop = useMediaQuery("(min-width: 768px)");
3553
+ const selectedVariants = !isDesktop && mobileVariants ? mobileVariants : variants;
3554
+ return /* @__PURE__ */ jsx29(
3555
+ motion5.div,
3556
+ {
3557
+ ref,
3558
+ layout: true,
3559
+ className,
3560
+ initial: "hidden",
3561
+ transition: {
3562
+ staggerChildren: 0.1,
3563
+ delayChildren: 0.2
3564
+ },
3565
+ variants: selectedVariants,
3566
+ viewport: { once: !infinity },
3567
+ whileInView: "visible",
3568
+ ...motionProps,
3569
+ children
3570
+ }
3571
+ );
3572
+ }
3573
+ );
3574
+ AnimatedDiv.displayName = "AnimatedDiv";
3575
+ var div_default = AnimatedDiv;
3576
+
3475
3577
  // src/ui/farmer/FramerMotionVariants.ts
3476
3578
  var activityItemAnimation = {
3477
3579
  hidden: {
@@ -3767,15 +3869,17 @@ var kanbanOrderCardLayoutTransition = {
3767
3869
  // src/ui/field.tsx
3768
3870
  import { cva as cva7 } from "class-variance-authority";
3769
3871
  import { useMemo as useMemo3 } from "react";
3872
+ import { cn as cn30 } from "cn";
3770
3873
 
3771
3874
  // src/ui/label.tsx
3772
- import { jsx as jsx29 } from "react/jsx-runtime";
3875
+ import { cn as cn29 } from "cn";
3876
+ import { jsx as jsx30 } from "react/jsx-runtime";
3773
3877
  function Label({ className, ...props }) {
3774
- return /* @__PURE__ */ jsx29(
3878
+ return /* @__PURE__ */ jsx30(
3775
3879
  "label",
3776
3880
  {
3777
3881
  "data-slot": "label",
3778
- className: cn(
3882
+ className: cn29(
3779
3883
  "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",
3780
3884
  className
3781
3885
  ),
@@ -3785,13 +3889,13 @@ function Label({ className, ...props }) {
3785
3889
  }
3786
3890
 
3787
3891
  // src/ui/field.tsx
3788
- import { jsx as jsx30, jsxs as jsxs16 } from "react/jsx-runtime";
3892
+ import { jsx as jsx31, jsxs as jsxs16 } from "react/jsx-runtime";
3789
3893
  function FieldSet({ className, ...props }) {
3790
- return /* @__PURE__ */ jsx30(
3894
+ return /* @__PURE__ */ jsx31(
3791
3895
  "fieldset",
3792
3896
  {
3793
3897
  "data-slot": "field-set",
3794
- className: cn(
3898
+ className: cn30(
3795
3899
  "flex flex-col gap-1 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3",
3796
3900
  className
3797
3901
  ),
@@ -3804,12 +3908,12 @@ function FieldLegend({
3804
3908
  variant = "legend",
3805
3909
  ...props
3806
3910
  }) {
3807
- return /* @__PURE__ */ jsx30(
3911
+ return /* @__PURE__ */ jsx31(
3808
3912
  "legend",
3809
3913
  {
3810
3914
  "data-slot": "field-legend",
3811
3915
  "data-variant": variant,
3812
- className: cn(
3916
+ className: cn30(
3813
3917
  "mb-1.5 font-medium data-[variant=label]:text-sm data-[variant=legend]:text-base",
3814
3918
  className
3815
3919
  ),
@@ -3818,11 +3922,11 @@ function FieldLegend({
3818
3922
  );
3819
3923
  }
3820
3924
  function FieldGroup({ className, ...props }) {
3821
- return /* @__PURE__ */ jsx30(
3925
+ return /* @__PURE__ */ jsx31(
3822
3926
  "div",
3823
3927
  {
3824
3928
  "data-slot": "field-group",
3825
- className: cn(
3929
+ className: cn30(
3826
3930
  "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",
3827
3931
  className
3828
3932
  ),
@@ -3850,23 +3954,23 @@ function Field({
3850
3954
  orientation = "vertical",
3851
3955
  ...props
3852
3956
  }) {
3853
- return /* @__PURE__ */ jsx30(
3957
+ return /* @__PURE__ */ jsx31(
3854
3958
  "div",
3855
3959
  {
3856
3960
  role: "group",
3857
3961
  "data-slot": "field",
3858
3962
  "data-orientation": orientation,
3859
- className: cn(fieldVariants({ orientation }), className),
3963
+ className: cn30(fieldVariants({ orientation }), className),
3860
3964
  ...props
3861
3965
  }
3862
3966
  );
3863
3967
  }
3864
3968
  function FieldContent({ className, ...props }) {
3865
- return /* @__PURE__ */ jsx30(
3969
+ return /* @__PURE__ */ jsx31(
3866
3970
  "div",
3867
3971
  {
3868
3972
  "data-slot": "field-content",
3869
- className: cn(
3973
+ className: cn30(
3870
3974
  "group/field-content flex flex-1 flex-col gap-0.5 leading-snug",
3871
3975
  className
3872
3976
  ),
@@ -3878,11 +3982,11 @@ function FieldLabel({
3878
3982
  className,
3879
3983
  ...props
3880
3984
  }) {
3881
- return /* @__PURE__ */ jsx30(
3985
+ return /* @__PURE__ */ jsx31(
3882
3986
  Label,
3883
3987
  {
3884
3988
  "data-slot": "field-label",
3885
- className: cn(
3989
+ className: cn30(
3886
3990
  "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",
3887
3991
  "has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col",
3888
3992
  className
@@ -3892,11 +3996,11 @@ function FieldLabel({
3892
3996
  );
3893
3997
  }
3894
3998
  function FieldTitle({ className, ...props }) {
3895
- return /* @__PURE__ */ jsx30(
3999
+ return /* @__PURE__ */ jsx31(
3896
4000
  "div",
3897
4001
  {
3898
4002
  "data-slot": "field-label",
3899
- className: cn(
4003
+ className: cn30(
3900
4004
  "flex w-fit items-center gap-2 text-sm font-medium group-data-[disabled=true]/field:opacity-50",
3901
4005
  className
3902
4006
  ),
@@ -3905,11 +4009,11 @@ function FieldTitle({ className, ...props }) {
3905
4009
  );
3906
4010
  }
3907
4011
  function FieldDescription({ className, ...props }) {
3908
- return /* @__PURE__ */ jsx30(
4012
+ return /* @__PURE__ */ jsx31(
3909
4013
  "p",
3910
4014
  {
3911
4015
  "data-slot": "field-description",
3912
- className: cn(
4016
+ className: cn30(
3913
4017
  "text-left text-[10px] leading-normal font-normal text-muted-foreground group-has-data-horizontal/field:text-balance [[data-variant=legend]+&]:-mt-1.5",
3914
4018
  "last:mt-0 nth-last-2:-mt-1",
3915
4019
  "[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary",
@@ -3929,14 +4033,14 @@ function FieldSeparator({
3929
4033
  {
3930
4034
  "data-slot": "field-separator",
3931
4035
  "data-content": !!children,
3932
- className: cn(
4036
+ className: cn30(
3933
4037
  "relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2",
3934
4038
  className
3935
4039
  ),
3936
4040
  ...props,
3937
4041
  children: [
3938
- /* @__PURE__ */ jsx30(Separator, { className: "absolute inset-0 top-1/2" }),
3939
- children && /* @__PURE__ */ jsx30(
4042
+ /* @__PURE__ */ jsx31(Separator, { className: "absolute inset-0 top-1/2" }),
4043
+ children && /* @__PURE__ */ jsx31(
3940
4044
  "span",
3941
4045
  {
3942
4046
  className: "relative mx-auto block w-fit px-2 text-muted-foreground",
@@ -3967,19 +4071,19 @@ function FieldError({
3967
4071
  if (uniqueErrors?.length == 1) {
3968
4072
  return uniqueErrors[0]?.message;
3969
4073
  }
3970
- return /* @__PURE__ */ jsx30("ul", { className: "ml-4 flex list-disc flex-col gap-1", children: uniqueErrors.map(
3971
- (error, index) => error?.message && /* @__PURE__ */ jsx30("li", { children: error.message }, index)
4074
+ return /* @__PURE__ */ jsx31("ul", { className: "ml-4 flex list-disc flex-col gap-1", children: uniqueErrors.map(
4075
+ (error, index) => error?.message && /* @__PURE__ */ jsx31("li", { children: error.message }, index)
3972
4076
  ) });
3973
4077
  }, [children, errors]);
3974
4078
  if (!content) {
3975
4079
  return null;
3976
4080
  }
3977
- return /* @__PURE__ */ jsx30(
4081
+ return /* @__PURE__ */ jsx31(
3978
4082
  "div",
3979
4083
  {
3980
4084
  role: "alert",
3981
4085
  "data-slot": "field-error",
3982
- className: cn("text-sm font-normal text-destructive", className),
4086
+ className: cn30("text-sm font-normal text-destructive", className),
3983
4087
  ...props,
3984
4088
  children: content
3985
4089
  }
@@ -3988,8 +4092,9 @@ function FieldError({
3988
4092
 
3989
4093
  // src/ui/image.tsx
3990
4094
  import NextImage from "next/image";
3991
- import { useCallback as useCallback2, useState as useState4 } from "react";
3992
- import { jsx as jsx31, jsxs as jsxs17 } from "react/jsx-runtime";
4095
+ import { useCallback as useCallback3, useState as useState5 } from "react";
4096
+ import { cn as cn31 } from "cn";
4097
+ import { jsx as jsx32, jsxs as jsxs17 } from "react/jsx-runtime";
3993
4098
  function srcValue(src) {
3994
4099
  if (!src) return null;
3995
4100
  if (typeof src === "string") return src;
@@ -4009,29 +4114,29 @@ function Image({
4009
4114
  onLoad,
4010
4115
  onError,
4011
4116
  children,
4012
- fallback = /* @__PURE__ */ jsx31(JellyMini, { mood: "curious", className: "size-full p-4" }),
4117
+ fallback = /* @__PURE__ */ jsx32(JellyMini, { mood: "curious", className: "size-full p-4" }),
4013
4118
  ...props
4014
4119
  }) {
4015
4120
  const currentSrc = srcValue(src);
4016
- const [loadedSrc, setLoadedSrc] = useState4(null);
4017
- const [failedSrc, setFailedSrc] = useState4(null);
4121
+ const [loadedSrc, setLoadedSrc] = useState5(null);
4122
+ const [failedSrc, setFailedSrc] = useState5(null);
4018
4123
  const hasSource = Boolean(currentSrc);
4019
4124
  const failed = hasSource && failedSrc === currentSrc;
4020
4125
  const loaded = hasSource && loadedSrc === currentSrc && !failed;
4021
4126
  const shouldPreload = preload ?? loading === "eager";
4022
4127
  const imageLoading = shouldPreload ? "eager" : loading;
4023
- const markLoaded = useCallback2(() => {
4128
+ const markLoaded = useCallback3(() => {
4024
4129
  if (!currentSrc) return;
4025
4130
  setFailedSrc(null);
4026
4131
  setLoadedSrc(currentSrc);
4027
4132
  }, [currentSrc]);
4028
- const markFailed = useCallback2(() => {
4133
+ const markFailed = useCallback3(() => {
4029
4134
  if (!currentSrc) return;
4030
4135
  setFailedSrc(currentSrc);
4031
4136
  }, [currentSrc]);
4032
- return /* @__PURE__ */ jsxs17("section", { className: cn("relative block overflow-hidden", wrapper), children: [
4033
- showSkeleton && !loaded && !failed && hasSource && /* @__PURE__ */ jsx31(Skeleton, { className: "absolute inset-0 size-full" }),
4034
- hasSource && !failed ? /* @__PURE__ */ jsx31(
4137
+ return /* @__PURE__ */ jsxs17("section", { className: cn31("relative block overflow-hidden", wrapper), children: [
4138
+ showSkeleton && !loaded && !failed && hasSource && /* @__PURE__ */ jsx32(Skeleton, { className: "absolute inset-0 size-full" }),
4139
+ hasSource && !failed ? /* @__PURE__ */ jsx32(
4035
4140
  NextImage,
4036
4141
  {
4037
4142
  ...props,
@@ -4041,7 +4146,7 @@ function Image({
4041
4146
  loading: imageLoading,
4042
4147
  preload: shouldPreload,
4043
4148
  fetchPriority: fetchPriority ?? (imageLoading === "eager" ? "high" : void 0),
4044
- className: cn(
4149
+ className: cn31(
4045
4150
  "transition-opacity duration-200",
4046
4151
  loaded ? "opacity-100" : "opacity-0",
4047
4152
  className
@@ -4061,35 +4166,36 @@ function Image({
4061
4166
  }
4062
4167
 
4063
4168
  // src/ui/input-otp.tsx
4064
- import * as React9 from "react";
4169
+ import * as React11 from "react";
4065
4170
  import { OTPInput, OTPInputContext } from "input-otp";
4171
+ import { cn as cn32 } from "cn";
4066
4172
  import { MinusIcon } from "lucide-react";
4067
- import { jsx as jsx32, jsxs as jsxs18 } from "react/jsx-runtime";
4173
+ import { jsx as jsx33, jsxs as jsxs18 } from "react/jsx-runtime";
4068
4174
  function InputOTP({
4069
4175
  className,
4070
4176
  containerClassName,
4071
4177
  ...props
4072
4178
  }) {
4073
- return /* @__PURE__ */ jsx32(
4179
+ return /* @__PURE__ */ jsx33(
4074
4180
  OTPInput,
4075
4181
  {
4076
4182
  "data-slot": "input-otp",
4077
- containerClassName: cn(
4183
+ containerClassName: cn32(
4078
4184
  "cn-input-otp flex items-center has-disabled:opacity-50",
4079
4185
  containerClassName
4080
4186
  ),
4081
4187
  spellCheck: false,
4082
- className: cn("disabled:cursor-not-allowed", className),
4188
+ className: cn32("disabled:cursor-not-allowed", className),
4083
4189
  ...props
4084
4190
  }
4085
4191
  );
4086
4192
  }
4087
4193
  function InputOTPGroup({ className, ...props }) {
4088
- return /* @__PURE__ */ jsx32(
4194
+ return /* @__PURE__ */ jsx33(
4089
4195
  "div",
4090
4196
  {
4091
4197
  "data-slot": "input-otp-group",
4092
- className: cn(
4198
+ className: cn32(
4093
4199
  "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",
4094
4200
  className
4095
4201
  ),
@@ -4102,34 +4208,34 @@ function InputOTPSlot({
4102
4208
  className,
4103
4209
  ...props
4104
4210
  }) {
4105
- const inputOTPContext = React9.useContext(OTPInputContext);
4211
+ const inputOTPContext = React11.useContext(OTPInputContext);
4106
4212
  const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {};
4107
4213
  return /* @__PURE__ */ jsxs18(
4108
4214
  "div",
4109
4215
  {
4110
4216
  "data-slot": "input-otp-slot",
4111
4217
  "data-active": isActive,
4112
- className: cn(
4218
+ className: cn32(
4113
4219
  "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",
4114
4220
  className
4115
4221
  ),
4116
4222
  ...props,
4117
4223
  children: [
4118
4224
  char,
4119
- hasFakeCaret && /* @__PURE__ */ jsx32("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ jsx32("div", { className: "h-4 w-px animate-caret-blink bg-foreground duration-1000" }) })
4225
+ hasFakeCaret && /* @__PURE__ */ jsx33("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ jsx33("div", { className: "h-4 w-px animate-caret-blink bg-foreground duration-1000" }) })
4120
4226
  ]
4121
4227
  }
4122
4228
  );
4123
4229
  }
4124
4230
  function InputOTPSeparator({ ...props }) {
4125
- return /* @__PURE__ */ jsx32(
4231
+ return /* @__PURE__ */ jsx33(
4126
4232
  "div",
4127
4233
  {
4128
4234
  "data-slot": "input-otp-separator",
4129
4235
  className: "flex items-center [&_svg:not([class*='size-'])]:size-4",
4130
4236
  role: "separator",
4131
4237
  ...props,
4132
- children: /* @__PURE__ */ jsx32(MinusIcon, {})
4238
+ children: /* @__PURE__ */ jsx33(MinusIcon, {})
4133
4239
  }
4134
4240
  );
4135
4241
  }
@@ -4138,14 +4244,15 @@ function InputOTPSeparator({ ...props }) {
4138
4244
  import { mergeProps as mergeProps4 } from "@base-ui/react/merge-props";
4139
4245
  import { useRender as useRender4 } from "@base-ui/react/use-render";
4140
4246
  import { cva as cva8 } from "class-variance-authority";
4141
- import { jsx as jsx33 } from "react/jsx-runtime";
4247
+ import { cn as cn33 } from "cn";
4248
+ import { jsx as jsx34 } from "react/jsx-runtime";
4142
4249
  function ItemGroup({ className, ...props }) {
4143
- return /* @__PURE__ */ jsx33(
4250
+ return /* @__PURE__ */ jsx34(
4144
4251
  "div",
4145
4252
  {
4146
4253
  role: "list",
4147
4254
  "data-slot": "item-group",
4148
- className: cn(
4255
+ className: cn33(
4149
4256
  "group/item-group flex w-full flex-col gap-4 has-data-[size=sm]:gap-2.5 has-data-[size=xs]:gap-2",
4150
4257
  className
4151
4258
  ),
@@ -4157,12 +4264,12 @@ function ItemSeparator({
4157
4264
  className,
4158
4265
  ...props
4159
4266
  }) {
4160
- return /* @__PURE__ */ jsx33(
4267
+ return /* @__PURE__ */ jsx34(
4161
4268
  Separator,
4162
4269
  {
4163
4270
  "data-slot": "item-separator",
4164
4271
  orientation: "horizontal",
4165
- className: cn("my-2", className),
4272
+ className: cn33("my-2", className),
4166
4273
  ...props
4167
4274
  }
4168
4275
  );
@@ -4199,7 +4306,7 @@ function Item({
4199
4306
  defaultTagName: "div",
4200
4307
  props: mergeProps4(
4201
4308
  {
4202
- className: cn(itemVariants({ variant, size, className }))
4309
+ className: cn33(itemVariants({ variant, size, className }))
4203
4310
  },
4204
4311
  props
4205
4312
  ),
@@ -4231,22 +4338,22 @@ function ItemMedia({
4231
4338
  variant = "default",
4232
4339
  ...props
4233
4340
  }) {
4234
- return /* @__PURE__ */ jsx33(
4341
+ return /* @__PURE__ */ jsx34(
4235
4342
  "div",
4236
4343
  {
4237
4344
  "data-slot": "item-media",
4238
4345
  "data-variant": variant,
4239
- className: cn(itemMediaVariants({ variant, className })),
4346
+ className: cn33(itemMediaVariants({ variant, className })),
4240
4347
  ...props
4241
4348
  }
4242
4349
  );
4243
4350
  }
4244
4351
  function ItemContent({ className, ...props }) {
4245
- return /* @__PURE__ */ jsx33(
4352
+ return /* @__PURE__ */ jsx34(
4246
4353
  "div",
4247
4354
  {
4248
4355
  "data-slot": "item-content",
4249
- className: cn(
4356
+ className: cn33(
4250
4357
  "flex flex-1 flex-col gap-1 group-data-[size=xs]/item:gap-0 [&+[data-slot=item-content]]:flex-none",
4251
4358
  className
4252
4359
  ),
@@ -4255,11 +4362,11 @@ function ItemContent({ className, ...props }) {
4255
4362
  );
4256
4363
  }
4257
4364
  function ItemTitle({ className, ...props }) {
4258
- return /* @__PURE__ */ jsx33(
4365
+ return /* @__PURE__ */ jsx34(
4259
4366
  "div",
4260
4367
  {
4261
4368
  "data-slot": "item-title",
4262
- className: cn(
4369
+ className: cn33(
4263
4370
  "line-clamp-1 flex w-fit items-center gap-2 text-sm leading-snug font-medium underline-offset-4",
4264
4371
  className
4265
4372
  ),
@@ -4268,11 +4375,11 @@ function ItemTitle({ className, ...props }) {
4268
4375
  );
4269
4376
  }
4270
4377
  function ItemDescription({ className, ...props }) {
4271
- return /* @__PURE__ */ jsx33(
4378
+ return /* @__PURE__ */ jsx34(
4272
4379
  "p",
4273
4380
  {
4274
4381
  "data-slot": "item-description",
4275
- className: cn(
4382
+ className: cn33(
4276
4383
  "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",
4277
4384
  className
4278
4385
  ),
@@ -4281,21 +4388,21 @@ function ItemDescription({ className, ...props }) {
4281
4388
  );
4282
4389
  }
4283
4390
  function ItemActions({ className, ...props }) {
4284
- return /* @__PURE__ */ jsx33(
4391
+ return /* @__PURE__ */ jsx34(
4285
4392
  "div",
4286
4393
  {
4287
4394
  "data-slot": "item-actions",
4288
- className: cn("flex items-center gap-2", className),
4395
+ className: cn33("flex items-center gap-2", className),
4289
4396
  ...props
4290
4397
  }
4291
4398
  );
4292
4399
  }
4293
4400
  function ItemHeader({ className, ...props }) {
4294
- return /* @__PURE__ */ jsx33(
4401
+ return /* @__PURE__ */ jsx34(
4295
4402
  "div",
4296
4403
  {
4297
4404
  "data-slot": "item-header",
4298
- className: cn(
4405
+ className: cn33(
4299
4406
  "flex basis-full items-center justify-between gap-2",
4300
4407
  className
4301
4408
  ),
@@ -4304,11 +4411,11 @@ function ItemHeader({ className, ...props }) {
4304
4411
  );
4305
4412
  }
4306
4413
  function ItemFooter({ className, ...props }) {
4307
- return /* @__PURE__ */ jsx33(
4414
+ return /* @__PURE__ */ jsx34(
4308
4415
  "div",
4309
4416
  {
4310
4417
  "data-slot": "item-footer",
4311
- className: cn(
4418
+ className: cn33(
4312
4419
  "flex basis-full items-center justify-between gap-2",
4313
4420
  className
4314
4421
  ),
@@ -4318,10 +4425,10 @@ function ItemFooter({ className, ...props }) {
4318
4425
  }
4319
4426
 
4320
4427
  // src/hooks/useMounted.ts
4321
- import { useEffect as useEffect4, useState as useState5 } from "react";
4428
+ import { useEffect as useEffect5, useState as useState6 } from "react";
4322
4429
  function useMounted() {
4323
- const [mounted, setMounted] = useState5(false);
4324
- useEffect4(() => {
4430
+ const [mounted, setMounted] = useState6(false);
4431
+ useEffect5(() => {
4325
4432
  setMounted(true);
4326
4433
  }, []);
4327
4434
  return { mounted };
@@ -4332,19 +4439,20 @@ import {
4332
4439
  BlobSpeech,
4333
4440
  JellyBlobMascot
4334
4441
  } from "feral-blob";
4335
- import * as React10 from "react";
4442
+ import * as React12 from "react";
4443
+ import { cn as cn34 } from "cn";
4336
4444
  import {
4337
4445
  BlobSpeech as BlobSpeech2,
4338
4446
  JellyBlobMascot as JellyBlobMascot2,
4339
4447
  JellyBlobMascotDemo
4340
4448
  } from "feral-blob";
4341
- import { jsx as jsx34, jsxs as jsxs19 } from "react/jsx-runtime";
4449
+ import { jsx as jsx35, jsxs as jsxs19 } from "react/jsx-runtime";
4342
4450
  function JellyBlob({ ...props }) {
4343
- return /* @__PURE__ */ jsx34("span", { className: "inline-block", children: /* @__PURE__ */ jsx34(
4451
+ return /* @__PURE__ */ jsx35("span", { className: "inline-block", children: /* @__PURE__ */ jsx35(
4344
4452
  JellyBlobMascot,
4345
4453
  {
4346
4454
  ...props,
4347
- className: cn("h-auto w-full", props.className)
4455
+ className: cn34("h-auto w-full", props.className)
4348
4456
  }
4349
4457
  ) });
4350
4458
  }
@@ -4370,15 +4478,15 @@ function JellyMini({
4370
4478
  ...props
4371
4479
  }) {
4372
4480
  const { mounted } = useMounted();
4373
- return /* @__PURE__ */ jsx34(
4481
+ return /* @__PURE__ */ jsx35(
4374
4482
  "span",
4375
4483
  {
4376
4484
  "aria-hidden": "true",
4377
- className: cn(
4485
+ className: cn34(
4378
4486
  "inline-flex size-5 shrink-0 items-center justify-center select-none",
4379
4487
  className
4380
4488
  ),
4381
- children: mounted ? /* @__PURE__ */ jsx34(
4489
+ children: mounted ? /* @__PURE__ */ jsx35(
4382
4490
  JellyBlobMascot,
4383
4491
  {
4384
4492
  ...props,
@@ -4390,10 +4498,10 @@ function JellyMini({
4390
4498
  }
4391
4499
  );
4392
4500
  }
4393
- var JellyMascotContext = React10.createContext(null);
4501
+ var JellyMascotContext = React12.createContext(null);
4394
4502
  function useJellyMood() {
4395
- const state = React10.useContext(JellyMascotContext);
4396
- return React10.useCallback(
4503
+ const state = React12.useContext(JellyMascotContext);
4504
+ return React12.useCallback(
4397
4505
  (mood) => {
4398
4506
  if (!mood || !state) return {};
4399
4507
  return {
@@ -4420,14 +4528,14 @@ function JellyAction({
4420
4528
  ...props
4421
4529
  }) {
4422
4530
  const preview = useJellyMood();
4423
- return /* @__PURE__ */ jsx34(Button, { ...props, ...withPreviewHandlers(preview, { ...props, mood }) });
4531
+ return /* @__PURE__ */ jsx35(Button, { ...props, ...withPreviewHandlers(preview, { ...props, mood }) });
4424
4532
  }
4425
4533
  function JellyLink({
4426
4534
  mood,
4427
4535
  ...props
4428
4536
  }) {
4429
4537
  const preview = useJellyMood();
4430
- return /* @__PURE__ */ jsx34("a", { ...props, ...withPreviewHandlers(preview, { ...props, mood }) });
4538
+ return /* @__PURE__ */ jsx35("a", { ...props, ...withPreviewHandlers(preview, { ...props, mood }) });
4431
4539
  }
4432
4540
  function JellyMascotProvider({
4433
4541
  mood = "neutral",
@@ -4436,7 +4544,7 @@ function JellyMascotProvider({
4436
4544
  ...blobProps
4437
4545
  }) {
4438
4546
  const { mounted } = useMounted();
4439
- const [previewMood, setPreviewMood] = React10.useState(
4547
+ const [previewMood, setPreviewMood] = React12.useState(
4440
4548
  null
4441
4549
  );
4442
4550
  const activeMood = previewMood ?? mood;
@@ -4449,7 +4557,7 @@ function JellyMascotProvider({
4449
4557
  blobProps,
4450
4558
  setPreview: setPreviewMood
4451
4559
  };
4452
- return /* @__PURE__ */ jsx34(JellyMascotContext.Provider, { value, children });
4560
+ return /* @__PURE__ */ jsx35(JellyMascotContext.Provider, { value, children });
4453
4561
  }
4454
4562
  var SIZE_WRAPPER = {
4455
4563
  sm: "w-20",
@@ -4461,26 +4569,26 @@ function JellyMascotFace({
4461
4569
  size = "md",
4462
4570
  className
4463
4571
  }) {
4464
- const mascot = React10.useContext(JellyMascotContext);
4572
+ const mascot = React12.useContext(JellyMascotContext);
4465
4573
  if (!mascot) return null;
4466
4574
  return /* @__PURE__ */ jsxs19(
4467
4575
  "div",
4468
4576
  {
4469
4577
  "aria-hidden": "true",
4470
- className: cn(
4578
+ className: cn34(
4471
4579
  "flex flex-col items-center select-none",
4472
4580
  SIZE_WRAPPER[size],
4473
4581
  className
4474
4582
  ),
4475
4583
  children: [
4476
- mascot.speech ? /* @__PURE__ */ jsx34(
4584
+ mascot.speech ? /* @__PURE__ */ jsx35(
4477
4585
  BlobSpeech,
4478
4586
  {
4479
4587
  mood: mascot.mood,
4480
4588
  messages: { [mascot.mood]: mascot.speech }
4481
4589
  }
4482
4590
  ) : null,
4483
- mascot.mounted ? /* @__PURE__ */ jsx34(
4591
+ mascot.mounted ? /* @__PURE__ */ jsx35(
4484
4592
  JellyBlobMascot,
4485
4593
  {
4486
4594
  ...mascot.blobProps,
@@ -4499,15 +4607,15 @@ function JellyMascot({
4499
4607
  className,
4500
4608
  ...config
4501
4609
  }) {
4502
- const existing = React10.useContext(JellyMascotContext);
4503
- if (existing) return /* @__PURE__ */ jsx34(JellyMascotFace, { size, className });
4504
- return /* @__PURE__ */ jsx34(JellyMascotProvider, { ...config, children: /* @__PURE__ */ jsx34(JellyMascotFace, { size, className }) });
4610
+ const existing = React12.useContext(JellyMascotContext);
4611
+ if (existing) return /* @__PURE__ */ jsx35(JellyMascotFace, { size, className });
4612
+ return /* @__PURE__ */ jsx35(JellyMascotProvider, { ...config, children: /* @__PURE__ */ jsx35(JellyMascotFace, { size, className }) });
4505
4613
  }
4506
4614
  function JellyGroup({
4507
4615
  children,
4508
4616
  ...config
4509
4617
  }) {
4510
- return /* @__PURE__ */ jsx34(JellyMascotProvider, { ...config, children });
4618
+ return /* @__PURE__ */ jsx35(JellyMascotProvider, { ...config, children });
4511
4619
  }
4512
4620
  function JellyEmpty({
4513
4621
  title,
@@ -4517,24 +4625,25 @@ function JellyEmpty({
4517
4625
  className,
4518
4626
  ...config
4519
4627
  }) {
4520
- return /* @__PURE__ */ jsx34(JellyMascotProvider, { ...config, children: /* @__PURE__ */ jsxs19(Empty, { className: cn("gap-4", className), children: [
4628
+ return /* @__PURE__ */ jsx35(JellyMascotProvider, { ...config, children: /* @__PURE__ */ jsxs19(Empty, { className: cn34("gap-4", className), children: [
4521
4629
  /* @__PURE__ */ jsxs19(EmptyHeader, { className: "gap-2", children: [
4522
- /* @__PURE__ */ jsx34(JellyMascotFace, { size }),
4523
- title ? /* @__PURE__ */ jsx34(EmptyTitle, { className: "text-base font-semibold sm:text-lg", children: title }) : null,
4524
- description ? /* @__PURE__ */ jsx34(EmptyDescription, { className: "max-w-sm", children: description }) : null
4630
+ /* @__PURE__ */ jsx35(JellyMascotFace, { size }),
4631
+ title ? /* @__PURE__ */ jsx35(EmptyTitle, { className: "text-base font-semibold sm:text-lg", children: title }) : null,
4632
+ description ? /* @__PURE__ */ jsx35(EmptyDescription, { className: "max-w-sm", children: description }) : null
4525
4633
  ] }),
4526
- actions ? /* @__PURE__ */ jsx34(EmptyContent, { children: actions }) : null
4634
+ actions ? /* @__PURE__ */ jsx35(EmptyContent, { children: actions }) : null
4527
4635
  ] }) });
4528
4636
  }
4529
4637
 
4530
4638
  // src/ui/kbd.tsx
4531
- import { jsx as jsx35 } from "react/jsx-runtime";
4639
+ import { cn as cn35 } from "cn";
4640
+ import { jsx as jsx36 } from "react/jsx-runtime";
4532
4641
  function Kbd({ className, ...props }) {
4533
- return /* @__PURE__ */ jsx35(
4642
+ return /* @__PURE__ */ jsx36(
4534
4643
  "kbd",
4535
4644
  {
4536
4645
  "data-slot": "kbd",
4537
- className: cn(
4646
+ className: cn35(
4538
4647
  "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",
4539
4648
  className
4540
4649
  ),
@@ -4543,24 +4652,25 @@ function Kbd({ className, ...props }) {
4543
4652
  );
4544
4653
  }
4545
4654
  function KbdGroup({ className, ...props }) {
4546
- return /* @__PURE__ */ jsx35(
4655
+ return /* @__PURE__ */ jsx36(
4547
4656
  "kbd",
4548
4657
  {
4549
4658
  "data-slot": "kbd-group",
4550
- className: cn("inline-flex items-center gap-1", className),
4659
+ className: cn35("inline-flex items-center gap-1", className),
4551
4660
  ...props
4552
4661
  }
4553
4662
  );
4554
4663
  }
4555
4664
 
4556
4665
  // src/ui/message.tsx
4557
- import { jsx as jsx36 } from "react/jsx-runtime";
4666
+ import { cn as cn36 } from "cn";
4667
+ import { jsx as jsx37 } from "react/jsx-runtime";
4558
4668
  function MessageGroup({ className, ...props }) {
4559
- return /* @__PURE__ */ jsx36(
4669
+ return /* @__PURE__ */ jsx37(
4560
4670
  "div",
4561
4671
  {
4562
4672
  "data-slot": "message-group",
4563
- className: cn("flex min-w-0 flex-col gap-2", className),
4673
+ className: cn36("flex min-w-0 flex-col gap-2", className),
4564
4674
  ...props
4565
4675
  }
4566
4676
  );
@@ -4570,12 +4680,12 @@ function Message({
4570
4680
  align = "start",
4571
4681
  ...props
4572
4682
  }) {
4573
- return /* @__PURE__ */ jsx36(
4683
+ return /* @__PURE__ */ jsx37(
4574
4684
  "div",
4575
4685
  {
4576
4686
  "data-slot": "message",
4577
4687
  "data-align": align,
4578
- className: cn(
4688
+ className: cn36(
4579
4689
  "group/message relative flex w-full min-w-0 gap-2 text-sm data-[align=end]:flex-row-reverse",
4580
4690
  className
4581
4691
  ),
@@ -4584,11 +4694,11 @@ function Message({
4584
4694
  );
4585
4695
  }
4586
4696
  function MessageAvatar({ className, ...props }) {
4587
- return /* @__PURE__ */ jsx36(
4697
+ return /* @__PURE__ */ jsx37(
4588
4698
  "div",
4589
4699
  {
4590
4700
  "data-slot": "message-avatar",
4591
- className: cn(
4701
+ className: cn36(
4592
4702
  "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",
4593
4703
  className
4594
4704
  ),
@@ -4597,11 +4707,11 @@ function MessageAvatar({ className, ...props }) {
4597
4707
  );
4598
4708
  }
4599
4709
  function MessageContent({ className, ...props }) {
4600
- return /* @__PURE__ */ jsx36(
4710
+ return /* @__PURE__ */ jsx37(
4601
4711
  "div",
4602
4712
  {
4603
4713
  "data-slot": "message-content",
4604
- className: cn(
4714
+ className: cn36(
4605
4715
  "flex w-full min-w-0 flex-col gap-2.5 wrap-break-word group-data-[align=end]/message:*:data-slot:self-end",
4606
4716
  className
4607
4717
  ),
@@ -4610,11 +4720,11 @@ function MessageContent({ className, ...props }) {
4610
4720
  );
4611
4721
  }
4612
4722
  function MessageHeader({ className, ...props }) {
4613
- return /* @__PURE__ */ jsx36(
4723
+ return /* @__PURE__ */ jsx37(
4614
4724
  "div",
4615
4725
  {
4616
4726
  "data-slot": "message-header",
4617
- className: cn(
4727
+ className: cn36(
4618
4728
  "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",
4619
4729
  className
4620
4730
  ),
@@ -4623,11 +4733,11 @@ function MessageHeader({ className, ...props }) {
4623
4733
  );
4624
4734
  }
4625
4735
  function MessageFooter({ className, ...props }) {
4626
- return /* @__PURE__ */ jsx36(
4736
+ return /* @__PURE__ */ jsx37(
4627
4737
  "div",
4628
4738
  {
4629
4739
  "data-slot": "message-footer",
4630
- className: cn(
4740
+ className: cn36(
4631
4741
  "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",
4632
4742
  className
4633
4743
  ),
@@ -4643,20 +4753,21 @@ import {
4643
4753
  useMessageScrollerScrollable,
4644
4754
  useMessageScrollerVisibility
4645
4755
  } from "@shadcn/react/message-scroller";
4756
+ import { cn as cn37 } from "cn";
4646
4757
  import { ArrowDownIcon } from "lucide-react";
4647
- import { Fragment as Fragment2, jsx as jsx37, jsxs as jsxs20 } from "react/jsx-runtime";
4758
+ import { Fragment as Fragment2, jsx as jsx38, jsxs as jsxs20 } from "react/jsx-runtime";
4648
4759
  function MessageScrollerProvider(props) {
4649
- return /* @__PURE__ */ jsx37(MessageScrollerPrimitive.Provider, { ...props });
4760
+ return /* @__PURE__ */ jsx38(MessageScrollerPrimitive.Provider, { ...props });
4650
4761
  }
4651
4762
  function MessageScroller({
4652
4763
  className,
4653
4764
  ...props
4654
4765
  }) {
4655
- return /* @__PURE__ */ jsx37(
4766
+ return /* @__PURE__ */ jsx38(
4656
4767
  MessageScrollerPrimitive.Root,
4657
4768
  {
4658
4769
  "data-slot": "message-scroller",
4659
- className: cn(
4770
+ className: cn37(
4660
4771
  "group/message-scroller relative flex size-full min-h-0 flex-col overflow-hidden",
4661
4772
  className
4662
4773
  ),
@@ -4668,11 +4779,11 @@ function MessageScrollerViewport({
4668
4779
  className,
4669
4780
  ...props
4670
4781
  }) {
4671
- return /* @__PURE__ */ jsx37(
4782
+ return /* @__PURE__ */ jsx38(
4672
4783
  MessageScrollerPrimitive.Viewport,
4673
4784
  {
4674
4785
  "data-slot": "message-scroller-viewport",
4675
- className: cn(
4786
+ className: cn37(
4676
4787
  "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",
4677
4788
  className
4678
4789
  ),
@@ -4684,11 +4795,11 @@ function MessageScrollerContent({
4684
4795
  className,
4685
4796
  ...props
4686
4797
  }) {
4687
- return /* @__PURE__ */ jsx37(
4798
+ return /* @__PURE__ */ jsx38(
4688
4799
  MessageScrollerPrimitive.Content,
4689
4800
  {
4690
4801
  "data-slot": "message-scroller-content",
4691
- className: cn("flex h-max min-h-full flex-col gap-6", className),
4802
+ className: cn37("flex h-max min-h-full flex-col gap-6", className),
4692
4803
  ...props
4693
4804
  }
4694
4805
  );
@@ -4698,12 +4809,12 @@ function MessageScrollerItem({
4698
4809
  scrollAnchor = false,
4699
4810
  ...props
4700
4811
  }) {
4701
- return /* @__PURE__ */ jsx37(
4812
+ return /* @__PURE__ */ jsx38(
4702
4813
  MessageScrollerPrimitive.Item,
4703
4814
  {
4704
4815
  "data-slot": "message-scroller-item",
4705
4816
  scrollAnchor,
4706
- className: cn(
4817
+ className: cn37(
4707
4818
  "min-w-0 shrink-0 [contain-intrinsic-size:auto_10rem] [content-visibility:auto]",
4708
4819
  className
4709
4820
  ),
@@ -4720,7 +4831,7 @@ function MessageScrollerButton({
4720
4831
  size = "icon-sm",
4721
4832
  ...props
4722
4833
  }) {
4723
- return /* @__PURE__ */ jsx37(
4834
+ return /* @__PURE__ */ jsx38(
4724
4835
  MessageScrollerPrimitive.Button,
4725
4836
  {
4726
4837
  "data-slot": "message-scroller-button",
@@ -4728,31 +4839,30 @@ function MessageScrollerButton({
4728
4839
  "data-variant": variant,
4729
4840
  "data-size": size,
4730
4841
  direction,
4731
- className: cn(
4842
+ className: cn37(
4732
4843
  "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",
4733
4844
  className
4734
4845
  ),
4735
- render: render ?? /* @__PURE__ */ jsx37(Button, { variant, size }),
4846
+ render: render ?? /* @__PURE__ */ jsx38(Button, { variant, size }),
4736
4847
  ...props,
4737
4848
  children: children ?? /* @__PURE__ */ jsxs20(Fragment2, { children: [
4738
- /* @__PURE__ */ jsx37(ArrowDownIcon, {}),
4739
- /* @__PURE__ */ jsx37("span", { className: "sr-only", children: direction === "end" ? "Scroll to end" : "Scroll to start" })
4849
+ /* @__PURE__ */ jsx38(ArrowDownIcon, {}),
4850
+ /* @__PURE__ */ jsx38("span", { className: "sr-only", children: direction === "end" ? "Scroll to end" : "Scroll to start" })
4740
4851
  ] })
4741
4852
  }
4742
4853
  );
4743
4854
  }
4744
4855
 
4745
4856
  // src/ui/otp.tsx
4746
- import { clsx as clsx2 } from "clsx";
4857
+ import { cn as cn38 } from "cn";
4747
4858
  import {
4748
4859
  AnimatePresence as AnimatePresence2,
4749
4860
  animate,
4750
- motion as motion5,
4861
+ motion as motion6,
4751
4862
  useReducedMotion
4752
4863
  } from "motion/react";
4753
- import { Fragment as Fragment3, useEffect as useEffect5, useId as useId2, useRef as useRef3, useState as useState7 } from "react";
4754
- import { twMerge as twMerge2 } from "tailwind-merge";
4755
- import { jsx as jsx38, jsxs as jsxs21 } from "react/jsx-runtime";
4864
+ import { Fragment as Fragment3, useEffect as useEffect6, useId as useId2, useRef as useRef3, useState as useState8 } from "react";
4865
+ import { jsx as jsx39, jsxs as jsxs21 } from "react/jsx-runtime";
4756
4866
  var EASE_OUT = [0.16, 1, 0.3, 1];
4757
4867
  var EASE_IN_OUT = [0.77, 0, 0.175, 1];
4758
4868
  var EASE_DRAWER = [0.32, 0.72, 0, 1];
@@ -4786,9 +4896,6 @@ var SPRING_MOUSE = {
4786
4896
  damping: 15,
4787
4897
  mass: 0.3
4788
4898
  };
4789
- function otpCn(...inputs) {
4790
- return twMerge2(clsx2(inputs));
4791
- }
4792
4899
  function OTPInput2({
4793
4900
  length = 6,
4794
4901
  value: controlledValue,
@@ -4812,15 +4919,15 @@ function OTPInput2({
4812
4919
  const inputRef = useRef3(null);
4813
4920
  const slotsRef = useRef3(null);
4814
4921
  const controlled = controlledValue !== void 0;
4815
- const [slots, setSlots] = useState7(
4922
+ const [slots, setSlots] = useState8(
4816
4923
  () => toSlots(controlled ? controlledValue : defaultValue, length)
4817
4924
  );
4818
- const [focused, setFocused] = useState7(false);
4819
- const [active, setActive] = useState7(0);
4925
+ const [focused, setFocused] = useState8(false);
4926
+ const [active, setActive] = useState8(0);
4820
4927
  const joined = slots.join("");
4821
4928
  const joinedRef = useRef3(joined);
4822
4929
  joinedRef.current = joined;
4823
- useEffect5(() => {
4930
+ useEffect6(() => {
4824
4931
  if (!controlled) return;
4825
4932
  const incoming = sanitize(controlledValue, length);
4826
4933
  if (incoming !== joinedRef.current) {
@@ -4904,7 +5011,7 @@ function OTPInput2({
4904
5011
  commit(toSlots(digits, length));
4905
5012
  setActive(Math.min(digits.length, length - 1));
4906
5013
  };
4907
- useEffect5(() => {
5014
+ useEffect6(() => {
4908
5015
  if (status !== "error" || reduce || !slotsRef.current) return;
4909
5016
  animate(
4910
5017
  slotsRef.current,
@@ -4920,8 +5027,8 @@ function OTPInput2({
4920
5027
  const showSuccess = status === "success";
4921
5028
  const activeIndex = focused ? active : -1;
4922
5029
  const message = showSuccess ? successMessage : status === "error" ? errorMessage : hint;
4923
- return /* @__PURE__ */ jsxs21("div", { className: otpCn("inline-flex flex-col gap-2", className), children: [
4924
- label ? /* @__PURE__ */ jsx38(
5030
+ return /* @__PURE__ */ jsxs21("div", { className: cn38("inline-flex flex-col gap-2", className), children: [
5031
+ label ? /* @__PURE__ */ jsx39(
4925
5032
  "label",
4926
5033
  {
4927
5034
  htmlFor: `${uid}-input`,
@@ -4942,7 +5049,7 @@ function OTPInput2({
4942
5049
  inputRef.current?.focus();
4943
5050
  },
4944
5051
  children: [
4945
- /* @__PURE__ */ jsx38(
5052
+ /* @__PURE__ */ jsx39(
4946
5053
  "input",
4947
5054
  {
4948
5055
  ref: inputRef,
@@ -4969,7 +5076,7 @@ function OTPInput2({
4969
5076
  className: "absolute inset-0 z-20 h-full w-full cursor-text bg-transparent text-transparent caret-transparent opacity-0 outline-none disabled:cursor-not-allowed"
4970
5077
  }
4971
5078
  ),
4972
- /* @__PURE__ */ jsx38("div", { ref: slotsRef, className: "flex items-center gap-3", children: Array.from({ length }, (_, i) => {
5079
+ /* @__PURE__ */ jsx39("div", { ref: slotsRef, className: "flex items-center gap-3", children: Array.from({ length }, (_, i) => {
4973
5080
  const char = slots[i] ?? "";
4974
5081
  const isActive = i === activeIndex;
4975
5082
  return /* @__PURE__ */ jsxs21(Fragment3, { children: [
@@ -4979,15 +5086,15 @@ function OTPInput2({
4979
5086
  "data-otp-slot": true,
4980
5087
  "data-active": isActive,
4981
5088
  "data-filled": char !== "",
4982
- className: otpCn(
5089
+ className: cn38(
4983
5090
  "relative grid size-11 place-items-center overflow-hidden rounded-xl border bg-card text-xl font-semibold tabular-nums transition-colors duration-200",
4984
5091
  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",
4985
5092
  isActive && !showSuccess && status !== "error" && "border-brand border-2 ring-0",
4986
5093
  disabled && "opacity-50"
4987
5094
  ),
4988
5095
  children: [
4989
- isActive && !showSuccess ? /* @__PURE__ */ jsx38(
4990
- motion5.span,
5096
+ isActive && !showSuccess ? /* @__PURE__ */ jsx39(
5097
+ motion6.span,
4991
5098
  {
4992
5099
  "aria-hidden": true,
4993
5100
  animate: reduce ? void 0 : { opacity: [1, 1, 0, 0] },
@@ -4996,14 +5103,14 @@ function OTPInput2({
4996
5103
  repeat: Number.POSITIVE_INFINITY,
4997
5104
  ease: "linear"
4998
5105
  },
4999
- className: otpCn(
5106
+ className: cn38(
5000
5107
  "bg-brand pointer-events-none absolute top-1/2 h-6 w-px -translate-y-1/2",
5001
5108
  char ? "right-3" : "left-1/2 -translate-x-1/2"
5002
5109
  )
5003
5110
  }
5004
5111
  ) : null,
5005
- /* @__PURE__ */ jsx38(AnimatePresence2, { initial: false, children: char ? /* @__PURE__ */ jsx38(
5006
- motion5.span,
5112
+ /* @__PURE__ */ jsx39(AnimatePresence2, { initial: false, children: char ? /* @__PURE__ */ jsx39(
5113
+ motion6.span,
5007
5114
  {
5008
5115
  initial: reduce ? {
5009
5116
  opacity: 0
@@ -5040,11 +5147,11 @@ function OTPInput2({
5040
5147
  ]
5041
5148
  }
5042
5149
  ),
5043
- i === 2 ? /* @__PURE__ */ jsx38("span", { "aria-hidden": "true", className: "h-0.5 w-4 bg-primary" }) : null
5150
+ i === 2 ? /* @__PURE__ */ jsx39("span", { "aria-hidden": "true", className: "h-0.5 w-4 bg-primary" }) : null
5044
5151
  ] }, `${uid}-${i}`);
5045
5152
  }) }),
5046
- /* @__PURE__ */ jsx38(AnimatePresence2, { children: showSuccess ? /* @__PURE__ */ jsx38(
5047
- motion5.span,
5153
+ /* @__PURE__ */ jsx39(AnimatePresence2, { children: showSuccess ? /* @__PURE__ */ jsx39(
5154
+ motion6.span,
5048
5155
  {
5049
5156
  initial: reduce ? {
5050
5157
  opacity: 0
@@ -5085,9 +5192,9 @@ function OTPInput2({
5085
5192
  strokeLinecap: "round",
5086
5193
  strokeLinejoin: "round",
5087
5194
  children: [
5088
- /* @__PURE__ */ jsx38("title", { children: "Verified" }),
5089
- /* @__PURE__ */ jsx38(
5090
- motion5.path,
5195
+ /* @__PURE__ */ jsx39("title", { children: "Verified" }),
5196
+ /* @__PURE__ */ jsx39(
5197
+ motion6.path,
5091
5198
  {
5092
5199
  d: "M5 13l4 4L19 7",
5093
5200
  initial: reduce ? {
@@ -5115,11 +5222,11 @@ function OTPInput2({
5115
5222
  ]
5116
5223
  }
5117
5224
  ),
5118
- message ? /* @__PURE__ */ jsx38(
5225
+ message ? /* @__PURE__ */ jsx39(
5119
5226
  "p",
5120
5227
  {
5121
5228
  "aria-live": "polite",
5122
- className: otpCn(
5229
+ className: cn38(
5123
5230
  "text-sm",
5124
5231
  showSuccess ? "text-emerald-500" : status === "error" ? "text-destructive" : "text-muted-foreground"
5125
5232
  ),
@@ -5138,12 +5245,13 @@ function toSlots(raw, length) {
5138
5245
 
5139
5246
  // src/ui/popover.tsx
5140
5247
  import { Popover as PopoverPrimitive } from "@base-ui/react/popover";
5141
- import { jsx as jsx39 } from "react/jsx-runtime";
5248
+ import { cn as cn39 } from "cn";
5249
+ import { jsx as jsx40 } from "react/jsx-runtime";
5142
5250
  function Popover({ ...props }) {
5143
- return /* @__PURE__ */ jsx39(PopoverPrimitive.Root, { "data-slot": "popover", ...props });
5251
+ return /* @__PURE__ */ jsx40(PopoverPrimitive.Root, { "data-slot": "popover", ...props });
5144
5252
  }
5145
5253
  function PopoverTrigger({ ...props }) {
5146
- return /* @__PURE__ */ jsx39(PopoverPrimitive.Trigger, { "data-slot": "popover-trigger", ...props });
5254
+ return /* @__PURE__ */ jsx40(PopoverPrimitive.Trigger, { "data-slot": "popover-trigger", ...props });
5147
5255
  }
5148
5256
  function PopoverContent({
5149
5257
  className,
@@ -5153,7 +5261,7 @@ function PopoverContent({
5153
5261
  sideOffset = 4,
5154
5262
  ...props
5155
5263
  }) {
5156
- return /* @__PURE__ */ jsx39(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx39(
5264
+ return /* @__PURE__ */ jsx40(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx40(
5157
5265
  PopoverPrimitive.Positioner,
5158
5266
  {
5159
5267
  align,
@@ -5161,11 +5269,11 @@ function PopoverContent({
5161
5269
  side,
5162
5270
  sideOffset,
5163
5271
  className: "isolate z-50",
5164
- children: /* @__PURE__ */ jsx39(
5272
+ children: /* @__PURE__ */ jsx40(
5165
5273
  PopoverPrimitive.Popup,
5166
5274
  {
5167
5275
  "data-slot": "popover-content",
5168
- className: cn(
5276
+ className: cn39(
5169
5277
  "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",
5170
5278
  className
5171
5279
  ),
@@ -5176,21 +5284,21 @@ function PopoverContent({
5176
5284
  ) });
5177
5285
  }
5178
5286
  function PopoverHeader({ className, ...props }) {
5179
- return /* @__PURE__ */ jsx39(
5287
+ return /* @__PURE__ */ jsx40(
5180
5288
  "div",
5181
5289
  {
5182
5290
  "data-slot": "popover-header",
5183
- className: cn("flex flex-col gap-0.5 text-sm", className),
5291
+ className: cn39("flex flex-col gap-0.5 text-sm", className),
5184
5292
  ...props
5185
5293
  }
5186
5294
  );
5187
5295
  }
5188
5296
  function PopoverTitle({ className, ...props }) {
5189
- return /* @__PURE__ */ jsx39(
5297
+ return /* @__PURE__ */ jsx40(
5190
5298
  PopoverPrimitive.Title,
5191
5299
  {
5192
5300
  "data-slot": "popover-title",
5193
- className: cn("font-medium", className),
5301
+ className: cn39("font-medium", className),
5194
5302
  ...props
5195
5303
  }
5196
5304
  );
@@ -5199,11 +5307,11 @@ function PopoverDescription({
5199
5307
  className,
5200
5308
  ...props
5201
5309
  }) {
5202
- return /* @__PURE__ */ jsx39(
5310
+ return /* @__PURE__ */ jsx40(
5203
5311
  PopoverPrimitive.Description,
5204
5312
  {
5205
5313
  "data-slot": "popover-description",
5206
- className: cn("text-muted-foreground", className),
5314
+ className: cn39("text-muted-foreground", className),
5207
5315
  ...props
5208
5316
  }
5209
5317
  );
@@ -5212,12 +5320,12 @@ function PopoverDescription({
5212
5320
  // src/ui/quantity.tsx
5213
5321
  import { NumberField } from "@base-ui/react/number-field";
5214
5322
  import { Minus, Plus } from "@gravity-ui/icons";
5215
- import * as React11 from "react";
5216
- import { jsx as jsx40, jsxs as jsxs22 } from "react/jsx-runtime";
5217
- var QuantityInput = React11.forwardRef(function QuantityInput2({ ...props }, ref) {
5218
- const id = React11.useId();
5219
- return /* @__PURE__ */ jsx40(NumberField.Root, { id, ...props, className: "flex flex-col items-start", children: /* @__PURE__ */ jsxs22(NumberField.Group, { className: "flex h-8 gap-1", children: [
5220
- /* @__PURE__ */ jsx40(
5323
+ import * as React13 from "react";
5324
+ import { jsx as jsx41, jsxs as jsxs22 } from "react/jsx-runtime";
5325
+ var QuantityInput = React13.forwardRef(function QuantityInput2({ ...props }, ref) {
5326
+ const id = React13.useId();
5327
+ 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: [
5328
+ /* @__PURE__ */ jsx41(
5221
5329
  NumberField.Decrement,
5222
5330
  {
5223
5331
  className: buttonVariants({
@@ -5225,10 +5333,10 @@ var QuantityInput = React11.forwardRef(function QuantityInput2({ ...props }, ref
5225
5333
  size: "icon-sm",
5226
5334
  className: "rounded-full! border-border!"
5227
5335
  }),
5228
- children: /* @__PURE__ */ jsx40(Minus, {})
5336
+ children: /* @__PURE__ */ jsx41(Minus, {})
5229
5337
  }
5230
5338
  ),
5231
- /* @__PURE__ */ jsx40(
5339
+ /* @__PURE__ */ jsx41(
5232
5340
  NumberField.Input,
5233
5341
  {
5234
5342
  ref,
@@ -5236,7 +5344,7 @@ var QuantityInput = React11.forwardRef(function QuantityInput2({ ...props }, ref
5236
5344
  "data-no-ring": true
5237
5345
  }
5238
5346
  ),
5239
- /* @__PURE__ */ jsx40(
5347
+ /* @__PURE__ */ jsx41(
5240
5348
  NumberField.Increment,
5241
5349
  {
5242
5350
  className: buttonVariants({
@@ -5244,7 +5352,7 @@ var QuantityInput = React11.forwardRef(function QuantityInput2({ ...props }, ref
5244
5352
  size: "icon-sm",
5245
5353
  className: "rounded-full! border-border!"
5246
5354
  }),
5247
- children: /* @__PURE__ */ jsx40(Plus, {})
5355
+ children: /* @__PURE__ */ jsx41(Plus, {})
5248
5356
  }
5249
5357
  )
5250
5358
  ] }) });
@@ -5253,33 +5361,34 @@ var QuantityInput = React11.forwardRef(function QuantityInput2({ ...props }, ref
5253
5361
  // src/ui/radio-group.tsx
5254
5362
  import { Radio as RadioPrimitive } from "@base-ui/react/radio";
5255
5363
  import { RadioGroup as RadioGroupPrimitive } from "@base-ui/react/radio-group";
5256
- import { jsx as jsx41 } from "react/jsx-runtime";
5364
+ import { cn as cn40 } from "cn";
5365
+ import { jsx as jsx42 } from "react/jsx-runtime";
5257
5366
  function RadioGroup({ className, ...props }) {
5258
- return /* @__PURE__ */ jsx41(
5367
+ return /* @__PURE__ */ jsx42(
5259
5368
  RadioGroupPrimitive,
5260
5369
  {
5261
5370
  "data-slot": "radio-group",
5262
- className: cn("grid w-full gap-2", className),
5371
+ className: cn40("grid w-full gap-2", className),
5263
5372
  ...props
5264
5373
  }
5265
5374
  );
5266
5375
  }
5267
5376
  function RadioGroupItem({ className, ...props }) {
5268
- return /* @__PURE__ */ jsx41(
5377
+ return /* @__PURE__ */ jsx42(
5269
5378
  RadioPrimitive.Root,
5270
5379
  {
5271
5380
  "data-slot": "radio-group-item",
5272
- className: cn(
5381
+ className: cn40(
5273
5382
  "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",
5274
5383
  className
5275
5384
  ),
5276
5385
  ...props,
5277
- children: /* @__PURE__ */ jsx41(
5386
+ children: /* @__PURE__ */ jsx42(
5278
5387
  RadioPrimitive.Indicator,
5279
5388
  {
5280
5389
  "data-slot": "radio-group-indicator",
5281
5390
  className: "flex size-4 items-center justify-center",
5282
- children: /* @__PURE__ */ jsx41("span", { className: "absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-primary-foreground" })
5391
+ children: /* @__PURE__ */ jsx42("span", { className: "absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full bg-primary-foreground" })
5283
5392
  }
5284
5393
  )
5285
5394
  }
@@ -5291,23 +5400,24 @@ import { useRender as useRender5 } from "@base-ui/react/use-render";
5291
5400
  import { cva as cva9 } from "class-variance-authority";
5292
5401
  import {
5293
5402
  createContext as createContext5,
5294
- useCallback as useCallback4,
5403
+ useCallback as useCallback5,
5295
5404
  useContext as useContext6,
5296
- useEffect as useEffect6,
5405
+ useEffect as useEffect7,
5297
5406
  useId as useId4,
5298
5407
  useMemo as useMemo4,
5299
5408
  useRef as useRef4,
5300
- useState as useState8
5409
+ useState as useState9
5301
5410
  } from "react";
5302
5411
 
5303
5412
  // src/ui/tooltip.tsx
5304
5413
  import { Tooltip as TooltipPrimitive } from "@base-ui/react/tooltip";
5305
- import { jsx as jsx42, jsxs as jsxs23 } from "react/jsx-runtime";
5414
+ import { cn as cn41 } from "cn";
5415
+ import { jsx as jsx43, jsxs as jsxs23 } from "react/jsx-runtime";
5306
5416
  function TooltipProvider({
5307
5417
  delay = 0,
5308
5418
  ...props
5309
5419
  }) {
5310
- return /* @__PURE__ */ jsx42(
5420
+ return /* @__PURE__ */ jsx43(
5311
5421
  TooltipPrimitive.Provider,
5312
5422
  {
5313
5423
  "data-slot": "tooltip-provider",
@@ -5317,10 +5427,10 @@ function TooltipProvider({
5317
5427
  );
5318
5428
  }
5319
5429
  function Tooltip2({ ...props }) {
5320
- return /* @__PURE__ */ jsx42(TooltipPrimitive.Root, { "data-slot": "tooltip", ...props });
5430
+ return /* @__PURE__ */ jsx43(TooltipPrimitive.Root, { "data-slot": "tooltip", ...props });
5321
5431
  }
5322
5432
  function TooltipTrigger({ ...props }) {
5323
- return /* @__PURE__ */ jsx42(TooltipPrimitive.Trigger, { "data-slot": "tooltip-trigger", ...props });
5433
+ return /* @__PURE__ */ jsx43(TooltipPrimitive.Trigger, { "data-slot": "tooltip-trigger", ...props });
5324
5434
  }
5325
5435
  function TooltipContent({
5326
5436
  className,
@@ -5331,7 +5441,7 @@ function TooltipContent({
5331
5441
  children,
5332
5442
  ...props
5333
5443
  }) {
5334
- return /* @__PURE__ */ jsx42(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsx42(
5444
+ return /* @__PURE__ */ jsx43(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsx43(
5335
5445
  TooltipPrimitive.Positioner,
5336
5446
  {
5337
5447
  align,
@@ -5343,14 +5453,14 @@ function TooltipContent({
5343
5453
  TooltipPrimitive.Popup,
5344
5454
  {
5345
5455
  "data-slot": "tooltip-content",
5346
- className: cn(
5456
+ className: cn41(
5347
5457
  "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",
5348
5458
  className
5349
5459
  ),
5350
5460
  ...props,
5351
5461
  children: [
5352
5462
  children,
5353
- /* @__PURE__ */ jsx42(TooltipPrimitive.Arrow, { className: "z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground data-[side=bottom]:top-1 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5" })
5463
+ /* @__PURE__ */ jsx43(TooltipPrimitive.Arrow, { className: "z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground data-[side=bottom]:top-1 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5" })
5354
5464
  ]
5355
5465
  }
5356
5466
  )
@@ -5359,8 +5469,9 @@ function TooltipContent({
5359
5469
  }
5360
5470
 
5361
5471
  // src/ui/reui/filters.tsx
5472
+ import { cn as cn42 } from "cn";
5362
5473
  import { AlertCircleIcon, CheckIcon as CheckIcon2, PlusIcon, XIcon } from "lucide-react";
5363
- import { Fragment as Fragment4, jsx as jsx43, jsxs as jsxs24 } from "react/jsx-runtime";
5474
+ import { Fragment as Fragment4, jsx as jsx44, jsxs as jsxs24 } from "react/jsx-runtime";
5364
5475
  var DEFAULT_I18N = {
5365
5476
  // UI Labels
5366
5477
  addFilter: "Filter",
@@ -5467,10 +5578,10 @@ function FilterInput({
5467
5578
  ...props
5468
5579
  }) {
5469
5580
  const context = useFilterContext();
5470
- const [isValid, setIsValid] = useState8(true);
5471
- const [validationMessage, setValidationMessage] = useState8("");
5581
+ const [isValid, setIsValid] = useState9(true);
5582
+ const [validationMessage, setValidationMessage] = useState9("");
5472
5583
  const inputRef = useRef4(null);
5473
- useEffect6(() => {
5584
+ useEffect7(() => {
5474
5585
  if (props.autoFocus) {
5475
5586
  const timer = setTimeout(() => {
5476
5587
  inputRef.current?.focus();
@@ -5529,7 +5640,7 @@ function FilterInput({
5529
5640
  return /* @__PURE__ */ jsxs24(
5530
5641
  InputGroup,
5531
5642
  {
5532
- className: cn(
5643
+ className: cn42(
5533
5644
  "w-36",
5534
5645
  // Height follows each style's own control ladder. `default` sets no
5535
5646
  // height on purpose so the style's `.cn-input-group` applies (h-8 nova,
@@ -5544,8 +5655,8 @@ function FilterInput({
5544
5655
  className
5545
5656
  ),
5546
5657
  children: [
5547
- field?.prefix && /* @__PURE__ */ jsx43(InputGroupAddon, { children: /* @__PURE__ */ jsx43(InputGroupText, { children: field.prefix }) }),
5548
- /* @__PURE__ */ jsx43(
5658
+ field?.prefix && /* @__PURE__ */ jsx44(InputGroupAddon, { children: /* @__PURE__ */ jsx44(InputGroupText, { children: field.prefix }) }),
5659
+ /* @__PURE__ */ jsx44(
5549
5660
  InputGroupInput,
5550
5661
  {
5551
5662
  ref: inputRef,
@@ -5553,29 +5664,29 @@ function FilterInput({
5553
5664
  "aria-describedby": !isValid && validationMessage ? `${field?.key || "input"}-error` : void 0,
5554
5665
  onBlur: handleBlur,
5555
5666
  onKeyDown: handleKeyDown,
5556
- className: cn(
5667
+ className: cn42(
5557
5668
  context.size == "sm" && "h-7! text-xs",
5558
5669
  context.size == "lg" && "h-9!"
5559
5670
  ),
5560
5671
  ...props
5561
5672
  }
5562
5673
  ),
5563
- !isValid && validationMessage && /* @__PURE__ */ jsx43(InputGroupAddon, { align: "inline-end", children: /* @__PURE__ */ jsxs24(Tooltip2, { children: [
5564
- /* @__PURE__ */ jsx43(TooltipTrigger, { render: /* @__PURE__ */ jsx43(InputGroupButton, { size: "icon-xs" }), children: /* @__PURE__ */ jsx43(AlertCircleIcon, { className: "size-3.5 text-destructive" }) }),
5565
- /* @__PURE__ */ jsx43(TooltipContent, { children: /* @__PURE__ */ jsx43("p", { className: "text-sm", children: validationMessage }) })
5674
+ !isValid && validationMessage && /* @__PURE__ */ jsx44(InputGroupAddon, { align: "inline-end", children: /* @__PURE__ */ jsxs24(Tooltip2, { children: [
5675
+ /* @__PURE__ */ jsx44(TooltipTrigger, { render: /* @__PURE__ */ jsx44(InputGroupButton, { size: "icon-xs" }), children: /* @__PURE__ */ jsx44(AlertCircleIcon, { className: "size-3.5 text-destructive" }) }),
5676
+ /* @__PURE__ */ jsx44(TooltipContent, { children: /* @__PURE__ */ jsx44("p", { className: "text-sm", children: validationMessage }) })
5566
5677
  ] }) }),
5567
- field?.suffix && /* @__PURE__ */ jsx43(InputGroupAddon, { align: "inline-end", children: /* @__PURE__ */ jsx43(InputGroupText, { children: field.suffix }) })
5678
+ field?.suffix && /* @__PURE__ */ jsx44(InputGroupAddon, { align: "inline-end", children: /* @__PURE__ */ jsx44(InputGroupText, { children: field.suffix }) })
5568
5679
  ]
5569
5680
  }
5570
5681
  );
5571
5682
  }
5572
5683
  function FilterRemoveButton({
5573
5684
  className,
5574
- icon = /* @__PURE__ */ jsx43(XIcon, {}),
5685
+ icon = /* @__PURE__ */ jsx44(XIcon, {}),
5575
5686
  ...props
5576
5687
  }) {
5577
5688
  const context = useFilterContext();
5578
- return /* @__PURE__ */ jsx43(
5689
+ return /* @__PURE__ */ jsx44(
5579
5690
  Button,
5580
5691
  {
5581
5692
  variant: "outline",
@@ -5633,9 +5744,9 @@ function useFieldOptions(field, searchInput, enabled) {
5633
5744
  cache.set(opt.value, opt);
5634
5745
  }
5635
5746
  }
5636
- const [state, setState] = useState8(() => ({ options: field.options ?? [], loading: false, error: false }));
5637
- const [debouncedQuery, setDebouncedQuery] = useState8(searchInput);
5638
- useEffect6(() => {
5747
+ const [state, setState] = useState9(() => ({ options: field.options ?? [], loading: false, error: false }));
5748
+ const [debouncedQuery, setDebouncedQuery] = useState9(searchInput);
5749
+ useEffect7(() => {
5639
5750
  if (!isAsync) return;
5640
5751
  const timer = setTimeout(() => setDebouncedQuery(searchInput), 250);
5641
5752
  return () => clearTimeout(timer);
@@ -5643,7 +5754,7 @@ function useFieldOptions(field, searchInput, enabled) {
5643
5754
  const requestIdRef = useRef4(0);
5644
5755
  const loaderRef = useRef4(field.loadOptions);
5645
5756
  loaderRef.current = field.loadOptions;
5646
- useEffect6(() => {
5757
+ useEffect7(() => {
5647
5758
  if (!isAsync || !enabled) return;
5648
5759
  const loader = loaderRef.current;
5649
5760
  if (!loader) return;
@@ -5663,7 +5774,7 @@ function useFieldOptions(field, searchInput, enabled) {
5663
5774
  cancelled = true;
5664
5775
  };
5665
5776
  }, [isAsync, enabled, debouncedQuery]);
5666
- const resolveSelected = useCallback4(
5777
+ const resolveSelected = useCallback5(
5667
5778
  (values) => {
5668
5779
  const cache = getFieldOptionCache(field);
5669
5780
  return values.map(
@@ -5747,10 +5858,10 @@ function FilterOperatorDropdown({
5747
5858
  );
5748
5859
  const operatorLabel = operators.find((op) => op.value === operator)?.label || context.i18n.helpers.formatOperator(operator);
5749
5860
  return /* @__PURE__ */ jsxs24(DropdownMenu, { children: [
5750
- /* @__PURE__ */ jsx43(
5861
+ /* @__PURE__ */ jsx44(
5751
5862
  DropdownMenuTrigger,
5752
5863
  {
5753
- render: /* @__PURE__ */ jsx43(
5864
+ render: /* @__PURE__ */ jsx44(
5754
5865
  Button,
5755
5866
  {
5756
5867
  variant: "outline",
@@ -5761,19 +5872,19 @@ function FilterOperatorDropdown({
5761
5872
  )
5762
5873
  }
5763
5874
  ),
5764
- /* @__PURE__ */ jsx43(DropdownMenuContent, { align: "start", className: "w-fit min-w-fit", children: operators.map((op) => /* @__PURE__ */ jsxs24(
5875
+ /* @__PURE__ */ jsx44(DropdownMenuContent, { align: "start", className: "w-fit min-w-fit", children: operators.map((op) => /* @__PURE__ */ jsxs24(
5765
5876
  DropdownMenuItem,
5766
5877
  {
5767
5878
  onClick: () => onChange(op.value),
5768
- className: cn(
5879
+ className: cn42(
5769
5880
  "flex items-center justify-between data-highlighted:bg-accent data-highlighted:text-accent-foreground"
5770
5881
  ),
5771
5882
  children: [
5772
- /* @__PURE__ */ jsx43("span", { children: op.label }),
5773
- /* @__PURE__ */ jsx43(
5883
+ /* @__PURE__ */ jsx44("span", { children: op.label }),
5884
+ /* @__PURE__ */ jsx44(
5774
5885
  CheckIcon2,
5775
5886
  {
5776
- className: cn(
5887
+ className: cn42(
5777
5888
  "ms-auto text-primary",
5778
5889
  op.value === operator ? "opacity-100" : "opacity-0"
5779
5890
  )
@@ -5792,21 +5903,21 @@ function SelectOptionsPopover({
5792
5903
  onClose,
5793
5904
  inline = false
5794
5905
  }) {
5795
- const [open, setOpen] = useState8(false);
5796
- const [searchInput, setSearchInput] = useState8("");
5797
- const [highlightedIndex, setHighlightedIndex] = useState8(-1);
5906
+ const [open, setOpen] = useState9(false);
5907
+ const [searchInput, setSearchInput] = useState9("");
5908
+ const [highlightedIndex, setHighlightedIndex] = useState9(-1);
5798
5909
  const inputRef = useRef4(null);
5799
5910
  const context = useFilterContext();
5800
5911
  const baseId = useId4();
5801
- useEffect6(() => {
5912
+ useEffect7(() => {
5802
5913
  if (open) {
5803
5914
  inputRef.current?.focus();
5804
5915
  }
5805
5916
  }, [open]);
5806
- useEffect6(() => {
5917
+ useEffect7(() => {
5807
5918
  setHighlightedIndex(-1);
5808
5919
  }, [searchInput, open]);
5809
- useEffect6(() => {
5920
+ useEffect7(() => {
5810
5921
  if (highlightedIndex >= 0 && open) {
5811
5922
  const element = document.getElementById(
5812
5923
  `${baseId}-item-${highlightedIndex}`
@@ -5863,7 +5974,7 @@ function SelectOptionsPopover({
5863
5974
  "data-highlighted": isHighlighted || void 0,
5864
5975
  onMouseEnter: () => setHighlightedIndex(overallIndex),
5865
5976
  checked: isSelected,
5866
- className: cn(
5977
+ className: cn42(
5867
5978
  "data-highlighted:bg-accent data-highlighted:text-accent-foreground",
5868
5979
  option.className
5869
5980
  ),
@@ -5873,7 +5984,7 @@ function SelectOptionsPopover({
5873
5984
  onCheckedChange: () => toggleOption(option),
5874
5985
  children: [
5875
5986
  option.icon && option.icon,
5876
- /* @__PURE__ */ jsx43("span", { className: "truncate", children: option.label })
5987
+ /* @__PURE__ */ jsx44("span", { className: "truncate", children: option.label })
5877
5988
  ]
5878
5989
  },
5879
5990
  String(option.value)
@@ -5881,7 +5992,7 @@ function SelectOptionsPopover({
5881
5992
  };
5882
5993
  const renderMenuContent = () => /* @__PURE__ */ jsxs24(Fragment4, { children: [
5883
5994
  field.searchable !== false && /* @__PURE__ */ jsxs24(Fragment4, { children: [
5884
- /* @__PURE__ */ jsx43(
5995
+ /* @__PURE__ */ jsx44(
5885
5996
  Input,
5886
5997
  {
5887
5998
  ref: inputRef,
@@ -5894,7 +6005,7 @@ function SelectOptionsPopover({
5894
6005
  placeholder: context.i18n.placeholders.searchField(
5895
6006
  field.label || ""
5896
6007
  ),
5897
- className: cn(
6008
+ className: cn42(
5898
6009
  "h-8 rounded-none border-0 border-input bg-transparent! px-2 text-sm shadow-none",
5899
6010
  "focus-visible:border-border focus-visible:ring-0 focus-visible:ring-offset-0",
5900
6011
  open && "placeholder:text-foreground"
@@ -5942,24 +6053,24 @@ function SelectOptionsPopover({
5942
6053
  }
5943
6054
  }
5944
6055
  ),
5945
- /* @__PURE__ */ jsx43(DropdownMenuSeparator, {})
6056
+ /* @__PURE__ */ jsx44(DropdownMenuSeparator, {})
5946
6057
  ] }),
5947
- /* @__PURE__ */ jsx43("div", { className: "relative flex max-h-full", children: /* @__PURE__ */ jsx43(
6058
+ /* @__PURE__ */ jsx44("div", { className: "relative flex max-h-full", children: /* @__PURE__ */ jsx44(
5948
6059
  "div",
5949
6060
  {
5950
6061
  className: "flex max-h-[min(var(--available-height),24rem)] w-full scroll-pt-2 scroll-pb-2 flex-col overscroll-contain",
5951
6062
  role: "listbox",
5952
6063
  id: `${baseId}-listbox`,
5953
- children: isAsync && loading && allFilteredOptions.length === 0 ? /* @__PURE__ */ jsx43("div", { className: "py-2 text-center text-sm text-muted-foreground", children: context.i18n.loadingOptions ?? DEFAULT_I18N.loadingOptions }) : isAsync && error ? /* @__PURE__ */ jsx43("div", { className: "py-2 text-center text-sm text-muted-foreground", children: context.i18n.errorLoadingOptions ?? DEFAULT_I18N.errorLoadingOptions }) : allFilteredOptions.length === 0 ? /* @__PURE__ */ jsx43("div", { className: "py-2 text-center text-sm text-muted-foreground", children: context.i18n.noResultsFound }) : field.renderOptionList ? field.renderOptionList({
6064
+ children: isAsync && loading && allFilteredOptions.length === 0 ? /* @__PURE__ */ jsx44("div", { className: "py-2 text-center text-sm text-muted-foreground", children: context.i18n.loadingOptions ?? DEFAULT_I18N.loadingOptions }) : isAsync && error ? /* @__PURE__ */ jsx44("div", { className: "py-2 text-center text-sm text-muted-foreground", children: context.i18n.errorLoadingOptions ?? DEFAULT_I18N.errorLoadingOptions }) : allFilteredOptions.length === 0 ? /* @__PURE__ */ jsx44("div", { className: "py-2 text-center text-sm text-muted-foreground", children: context.i18n.noResultsFound }) : field.renderOptionList ? field.renderOptionList({
5954
6065
  options: allFilteredOptions,
5955
6066
  highlightedIndex,
5956
6067
  renderOption: renderOptionItem
5957
6068
  }) : /* @__PURE__ */ jsxs24(ScrollArea, { className: "size-full min-h-0 **:data-[slot=scroll-area-scrollbar]:m-0 **:data-[slot=scroll-area-viewport]:h-full **:data-[slot=scroll-area-viewport]:overscroll-contain", children: [
5958
- filteredSelectedOptions.length > 0 && /* @__PURE__ */ jsx43(DropdownMenuGroup, { className: "px-1", children: filteredSelectedOptions.map(
6069
+ filteredSelectedOptions.length > 0 && /* @__PURE__ */ jsx44(DropdownMenuGroup, { className: "px-1", children: filteredSelectedOptions.map(
5959
6070
  (option, index) => renderOptionItem(option, index)
5960
6071
  ) }),
5961
- filteredSelectedOptions.length > 0 && filteredUnselectedOptions.length > 0 && /* @__PURE__ */ jsx43(DropdownMenuSeparator, { className: "mx-0" }),
5962
- filteredUnselectedOptions.length > 0 && /* @__PURE__ */ jsx43(DropdownMenuGroup, { className: "px-1", children: filteredUnselectedOptions.map(
6072
+ filteredSelectedOptions.length > 0 && filteredUnselectedOptions.length > 0 && /* @__PURE__ */ jsx44(DropdownMenuSeparator, { className: "mx-0" }),
6073
+ filteredUnselectedOptions.length > 0 && /* @__PURE__ */ jsx44(DropdownMenuGroup, { className: "px-1", children: filteredUnselectedOptions.map(
5963
6074
  (option, index) => renderOptionItem(
5964
6075
  option,
5965
6076
  index + filteredSelectedOptions.length
@@ -5970,7 +6081,7 @@ function SelectOptionsPopover({
5970
6081
  ) })
5971
6082
  ] });
5972
6083
  if (inline) {
5973
- return /* @__PURE__ */ jsx43("div", { className: "w-full", children: renderMenuContent() });
6084
+ return /* @__PURE__ */ jsx44("div", { className: "w-full", children: renderMenuContent() });
5974
6085
  }
5975
6086
  return /* @__PURE__ */ jsxs24(
5976
6087
  DropdownMenu,
@@ -5983,23 +6094,23 @@ function SelectOptionsPopover({
5983
6094
  }
5984
6095
  },
5985
6096
  children: [
5986
- /* @__PURE__ */ jsx43(
6097
+ /* @__PURE__ */ jsx44(
5987
6098
  DropdownMenuTrigger,
5988
6099
  {
5989
- render: /* @__PURE__ */ jsx43(Button, { variant: "outline", size: context.size, children: /* @__PURE__ */ jsx43("div", { className: "flex items-center gap-1.5", children: field.customValueRenderer ? field.customValueRenderer(
6100
+ render: /* @__PURE__ */ jsx44(Button, { variant: "outline", size: context.size, children: /* @__PURE__ */ jsx44("div", { className: "flex items-center gap-1.5", children: field.customValueRenderer ? field.customValueRenderer(
5990
6101
  values,
5991
6102
  isAsync ? resolveSelected(values) : field.options || []
5992
6103
  ) : /* @__PURE__ */ jsxs24(Fragment4, { children: [
5993
- selectedOptions.length > 0 && /* @__PURE__ */ jsx43("div", { className: "flex items-center -space-x-1.5", children: selectedOptions.slice(0, 3).map((option) => /* @__PURE__ */ jsx43("div", { children: option.icon }, String(option.value))) }),
6104
+ selectedOptions.length > 0 && /* @__PURE__ */ jsx44("div", { className: "flex items-center -space-x-1.5", children: selectedOptions.slice(0, 3).map((option) => /* @__PURE__ */ jsx44("div", { children: option.icon }, String(option.value))) }),
5994
6105
  selectedOptions.length === 1 ? selectedOptions[0].label : selectedOptions.length > 1 ? `${selectedOptions.length} ${context.i18n.selectedCount}` : context.i18n.select
5995
6106
  ] }) }) })
5996
6107
  }
5997
6108
  ),
5998
- /* @__PURE__ */ jsx43(
6109
+ /* @__PURE__ */ jsx44(
5999
6110
  DropdownMenuContent,
6000
6111
  {
6001
6112
  align: "start",
6002
- className: cn("w-50 px-0", field.className),
6113
+ className: cn42("w-50 px-0", field.className),
6003
6114
  children: renderMenuContent()
6004
6115
  }
6005
6116
  )
@@ -6018,10 +6129,10 @@ function FilterValueSelector({
6018
6129
  return null;
6019
6130
  }
6020
6131
  if (field.customRenderer) {
6021
- return /* @__PURE__ */ jsx43(ButtonGroupText, { className: "bg-background text-start whitespace-nowrap outline-hidden hover:bg-accent aria-expanded:bg-accent dark:bg-input/30", children: field.customRenderer({ field, values, onChange, operator }) });
6132
+ return /* @__PURE__ */ jsx44(ButtonGroupText, { className: "bg-background text-start whitespace-nowrap outline-hidden hover:bg-accent aria-expanded:bg-accent dark:bg-input/30", children: field.customRenderer({ field, values, onChange, operator }) });
6022
6133
  }
6023
6134
  if (field.type === "text") {
6024
- return /* @__PURE__ */ jsx43(
6135
+ return /* @__PURE__ */ jsx44(
6025
6136
  FilterInput,
6026
6137
  {
6027
6138
  type: "text",
@@ -6030,15 +6141,15 @@ function FilterValueSelector({
6030
6141
  placeholder: field.placeholder,
6031
6142
  pattern: field.pattern,
6032
6143
  field,
6033
- className: cn("w-36", field.className),
6144
+ className: cn42("w-36", field.className),
6034
6145
  autoFocus
6035
6146
  }
6036
6147
  );
6037
6148
  }
6038
6149
  if (field.type === "select" || field.type === "multiselect") {
6039
- return /* @__PURE__ */ jsx43(SelectOptionsPopover, { field, values, onChange });
6150
+ return /* @__PURE__ */ jsx44(SelectOptionsPopover, { field, values, onChange });
6040
6151
  }
6041
- return /* @__PURE__ */ jsx43(SelectOptionsPopover, { field, values, onChange });
6152
+ return /* @__PURE__ */ jsx44(SelectOptionsPopover, { field, values, onChange });
6042
6153
  }
6043
6154
  var FiltersContent = ({
6044
6155
  filters,
@@ -6047,7 +6158,7 @@ var FiltersContent = ({
6047
6158
  }) => {
6048
6159
  const context = useFilterContext();
6049
6160
  const fieldsMap = useMemo4(() => getFieldsMap(fields), [fields]);
6050
- const updateFilter = useCallback4(
6161
+ const updateFilter = useCallback5(
6051
6162
  (filterId, updates) => {
6052
6163
  onChange(
6053
6164
  filters.map((filter) => {
@@ -6064,16 +6175,16 @@ var FiltersContent = ({
6064
6175
  },
6065
6176
  [filters, onChange]
6066
6177
  );
6067
- const removeFilter = useCallback4(
6178
+ const removeFilter = useCallback5(
6068
6179
  (filterId) => {
6069
6180
  onChange(filters.filter((filter) => filter.id !== filterId));
6070
6181
  },
6071
6182
  [filters, onChange]
6072
6183
  );
6073
- return /* @__PURE__ */ jsx43(
6184
+ return /* @__PURE__ */ jsx44(
6074
6185
  "div",
6075
6186
  {
6076
- className: cn(
6187
+ className: cn42(
6077
6188
  filtersContainerVariants({
6078
6189
  variant: context.variant,
6079
6190
  size: context.size
@@ -6092,7 +6203,7 @@ var FiltersContent = ({
6092
6203
  field.icon && field.icon,
6093
6204
  field.label
6094
6205
  ] }),
6095
- /* @__PURE__ */ jsx43(
6206
+ /* @__PURE__ */ jsx44(
6096
6207
  FilterOperatorDropdown,
6097
6208
  {
6098
6209
  field,
@@ -6101,7 +6212,7 @@ var FiltersContent = ({
6101
6212
  onChange: (operator) => updateFilter(filter.id, { operator })
6102
6213
  }
6103
6214
  ),
6104
- /* @__PURE__ */ jsx43(
6215
+ /* @__PURE__ */ jsx44(
6105
6216
  FilterValueSelector,
6106
6217
  {
6107
6218
  field,
@@ -6111,7 +6222,7 @@ var FiltersContent = ({
6111
6222
  autoFocus: false
6112
6223
  }
6113
6224
  ),
6114
- /* @__PURE__ */ jsx43(FilterRemoveButton, { onClick: () => removeFilter(filter.id) })
6225
+ /* @__PURE__ */ jsx44(FilterRemoveButton, { onClick: () => removeFilter(filter.id) })
6115
6226
  ]
6116
6227
  },
6117
6228
  filter.id
@@ -6131,8 +6242,8 @@ function FilterSubmenuContent({
6131
6242
  onBack,
6132
6243
  onClose
6133
6244
  }) {
6134
- const [searchInput, setSearchInput] = useState8("");
6135
- const [highlightedIndex, setHighlightedIndex] = useState8(-1);
6245
+ const [searchInput, setSearchInput] = useState9("");
6246
+ const [highlightedIndex, setHighlightedIndex] = useState9(-1);
6136
6247
  const inputRef = useRef4(null);
6137
6248
  const baseId = useId4();
6138
6249
  const {
@@ -6142,7 +6253,7 @@ function FilterSubmenuContent({
6142
6253
  error,
6143
6254
  resolveSelected
6144
6255
  } = useFieldOptions(field, searchInput, true);
6145
- useEffect6(() => {
6256
+ useEffect7(() => {
6146
6257
  if (isActive) {
6147
6258
  if (field.searchable !== false) {
6148
6259
  inputRef.current?.focus();
@@ -6152,10 +6263,10 @@ function FilterSubmenuContent({
6152
6263
  }
6153
6264
  }
6154
6265
  }, [isActive, field.searchable, baseId]);
6155
- useEffect6(() => {
6266
+ useEffect7(() => {
6156
6267
  setHighlightedIndex(-1);
6157
6268
  }, [searchInput]);
6158
- useEffect6(() => {
6269
+ useEffect7(() => {
6159
6270
  if (highlightedIndex >= 0 && isActive) {
6160
6271
  const element = document.getElementById(
6161
6272
  `${baseId}-item-${highlightedIndex}`
@@ -6198,7 +6309,7 @@ function FilterSubmenuContent({
6198
6309
  "data-highlighted": isHighlighted || void 0,
6199
6310
  onMouseEnter: () => setHighlightedIndex(index),
6200
6311
  checked: isSelected,
6201
- className: cn(
6312
+ className: cn42(
6202
6313
  "data-highlighted:bg-accent data-highlighted:text-accent-foreground",
6203
6314
  option.className
6204
6315
  ),
@@ -6208,20 +6319,20 @@ function FilterSubmenuContent({
6208
6319
  onCheckedChange: () => onToggle(option.value, isSelected),
6209
6320
  children: [
6210
6321
  option.icon && option.icon,
6211
- /* @__PURE__ */ jsx43("span", { className: "truncate", children: option.label })
6322
+ /* @__PURE__ */ jsx44("span", { className: "truncate", children: option.label })
6212
6323
  ]
6213
6324
  },
6214
6325
  String(option.value)
6215
6326
  );
6216
6327
  };
6217
- useEffect6(() => {
6328
+ useEffect7(() => {
6218
6329
  if (isActive && filteredOptions.length > 0) {
6219
6330
  setHighlightedIndex(0);
6220
6331
  }
6221
6332
  }, [isActive, filteredOptions.length]);
6222
6333
  return /* @__PURE__ */ jsxs24("div", { className: "flex flex-col", onMouseEnter: onActive, children: [
6223
6334
  field.searchable !== false && /* @__PURE__ */ jsxs24(Fragment4, { children: [
6224
- /* @__PURE__ */ jsx43(
6335
+ /* @__PURE__ */ jsx44(
6225
6336
  Input,
6226
6337
  {
6227
6338
  ref: inputRef,
@@ -6232,7 +6343,7 @@ function FilterSubmenuContent({
6232
6343
  "aria-controls": `${baseId}-listbox`,
6233
6344
  "aria-activedescendant": highlightedIndex >= 0 ? `${baseId}-item-${highlightedIndex}` : void 0,
6234
6345
  placeholder: i18n.placeholders.searchField(field.label || ""),
6235
- className: cn(
6346
+ className: cn42(
6236
6347
  "h-8 rounded-none border-0 bg-transparent! px-2 text-sm shadow-none",
6237
6348
  "focus-visible:border-border focus-visible:ring-0 focus-visible:ring-offset-0",
6238
6349
  isActive && "placeholder:text-foreground"
@@ -6284,9 +6395,9 @@ function FilterSubmenuContent({
6284
6395
  }
6285
6396
  }
6286
6397
  ),
6287
- /* @__PURE__ */ jsx43(DropdownMenuSeparator, {})
6398
+ /* @__PURE__ */ jsx44(DropdownMenuSeparator, {})
6288
6399
  ] }),
6289
- /* @__PURE__ */ jsx43("div", { className: "relative flex max-h-full", children: /* @__PURE__ */ jsx43(
6400
+ /* @__PURE__ */ jsx44("div", { className: "relative flex max-h-full", children: /* @__PURE__ */ jsx44(
6290
6401
  "div",
6291
6402
  {
6292
6403
  className: "flex max-h-[min(var(--available-height),24rem)] w-full scroll-pt-2 scroll-pb-2 flex-col overscroll-contain outline-hidden",
@@ -6331,11 +6442,11 @@ function FilterSubmenuContent({
6331
6442
  e.stopPropagation();
6332
6443
  }
6333
6444
  },
6334
- children: isAsync && loading && filteredOptions.length === 0 ? /* @__PURE__ */ jsx43("div", { className: "py-2 text-center text-sm text-muted-foreground", children: i18n.loadingOptions ?? DEFAULT_I18N.loadingOptions }) : isAsync && error ? /* @__PURE__ */ jsx43("div", { className: "py-2 text-center text-sm text-muted-foreground", children: i18n.errorLoadingOptions ?? DEFAULT_I18N.errorLoadingOptions }) : filteredOptions.length === 0 ? /* @__PURE__ */ jsx43("div", { className: "py-2 text-center text-sm text-muted-foreground", children: i18n.noResultsFound }) : field.renderOptionList ? field.renderOptionList({
6445
+ children: isAsync && loading && filteredOptions.length === 0 ? /* @__PURE__ */ jsx44("div", { className: "py-2 text-center text-sm text-muted-foreground", children: i18n.loadingOptions ?? DEFAULT_I18N.loadingOptions }) : isAsync && error ? /* @__PURE__ */ jsx44("div", { className: "py-2 text-center text-sm text-muted-foreground", children: i18n.errorLoadingOptions ?? DEFAULT_I18N.errorLoadingOptions }) : filteredOptions.length === 0 ? /* @__PURE__ */ jsx44("div", { className: "py-2 text-center text-sm text-muted-foreground", children: i18n.noResultsFound }) : field.renderOptionList ? field.renderOptionList({
6335
6446
  options: filteredOptions,
6336
6447
  highlightedIndex,
6337
6448
  renderOption: renderOptionItem
6338
- }) : /* @__PURE__ */ jsx43(ScrollArea, { className: "size-full min-h-0 **:data-[slot=scroll-area-scrollbar]:m-0 **:data-[slot=scroll-area-viewport]:h-full **:data-[slot=scroll-area-viewport]:overscroll-contain", children: /* @__PURE__ */ jsx43(DropdownMenuGroup, { children: filteredOptions.map(
6449
+ }) : /* @__PURE__ */ jsx44(ScrollArea, { className: "size-full min-h-0 **:data-[slot=scroll-area-scrollbar]:m-0 **:data-[slot=scroll-area-viewport]:h-full **:data-[slot=scroll-area-viewport]:overscroll-contain", children: /* @__PURE__ */ jsx44(DropdownMenuGroup, { children: filteredOptions.map(
6339
6450
  (option, index) => renderOptionItem(option, index)
6340
6451
  ) }) })
6341
6452
  }
@@ -6359,17 +6470,17 @@ function Filters({
6359
6470
  shortcutKey = "f",
6360
6471
  shortcutLabel = "F"
6361
6472
  }) {
6362
- const [addFilterOpen, setAddFilterOpen] = useState8(false);
6363
- const [menuSearchInput, setMenuSearchInput] = useState8("");
6364
- const [activeMenu, setActiveMenu] = useState8("root");
6365
- const [openSubMenu, setOpenSubMenu] = useState8(null);
6366
- const [highlightedIndex, setHighlightedIndex] = useState8(-1);
6367
- const [lastAddedFilterId, setLastAddedFilterId] = useState8(
6473
+ const [addFilterOpen, setAddFilterOpen] = useState9(false);
6474
+ const [menuSearchInput, setMenuSearchInput] = useState9("");
6475
+ const [activeMenu, setActiveMenu] = useState9("root");
6476
+ const [openSubMenu, setOpenSubMenu] = useState9(null);
6477
+ const [highlightedIndex, setHighlightedIndex] = useState9(-1);
6478
+ const [lastAddedFilterId, setLastAddedFilterId] = useState9(
6368
6479
  null
6369
6480
  );
6370
6481
  const rootInputRef = useRef4(null);
6371
6482
  const rootId = useId4();
6372
- useEffect6(() => {
6483
+ useEffect7(() => {
6373
6484
  if (!enableShortcut) return;
6374
6485
  const handleKeyDown = (e) => {
6375
6486
  if (e.key.toLowerCase() === shortcutKey.toLowerCase() && !addFilterOpen && !(document.activeElement instanceof HTMLInputElement || document.activeElement instanceof HTMLTextAreaElement)) {
@@ -6380,15 +6491,15 @@ function Filters({
6380
6491
  window.addEventListener("keydown", handleKeyDown);
6381
6492
  return () => window.removeEventListener("keydown", handleKeyDown);
6382
6493
  }, [enableShortcut, shortcutKey, addFilterOpen]);
6383
- useEffect6(() => {
6494
+ useEffect7(() => {
6384
6495
  if (addFilterOpen && activeMenu === "root") {
6385
6496
  rootInputRef.current?.focus();
6386
6497
  }
6387
6498
  }, [addFilterOpen, activeMenu]);
6388
- useEffect6(() => {
6499
+ useEffect7(() => {
6389
6500
  setHighlightedIndex(-1);
6390
6501
  }, [menuSearchInput]);
6391
- useEffect6(() => {
6502
+ useEffect7(() => {
6392
6503
  if (highlightedIndex >= 0 && addFilterOpen) {
6393
6504
  const element = document.getElementById(
6394
6505
  `${rootId}-item-${highlightedIndex}`
@@ -6396,13 +6507,13 @@ function Filters({
6396
6507
  element?.scrollIntoView({ block: "nearest" });
6397
6508
  }
6398
6509
  }, [highlightedIndex, addFilterOpen, rootId]);
6399
- useEffect6(() => {
6510
+ useEffect7(() => {
6400
6511
  if (!addFilterOpen) {
6401
6512
  setOpenSubMenu(null);
6402
6513
  }
6403
6514
  }, [addFilterOpen]);
6404
- const [sessionFilterIds, setSessionFilterIds] = useState8({});
6405
- useEffect6(() => {
6515
+ const [sessionFilterIds, setSessionFilterIds] = useState9({});
6516
+ useEffect7(() => {
6406
6517
  if (lastAddedFilterId) {
6407
6518
  const timer = setTimeout(() => {
6408
6519
  setLastAddedFilterId(null);
@@ -6421,7 +6532,7 @@ function Filters({
6421
6532
  [i18n]
6422
6533
  );
6423
6534
  const fieldsMap = useMemo4(() => getFieldsMap(fields), [fields]);
6424
- const updateFilter = useCallback4(
6535
+ const updateFilter = useCallback5(
6425
6536
  (filterId, updates) => {
6426
6537
  onChange(
6427
6538
  filters.map((filter) => {
@@ -6438,13 +6549,13 @@ function Filters({
6438
6549
  },
6439
6550
  [filters, onChange]
6440
6551
  );
6441
- const removeFilter = useCallback4(
6552
+ const removeFilter = useCallback5(
6442
6553
  (filterId) => {
6443
6554
  onChange(filters.filter((filter) => filter.id !== filterId));
6444
6555
  },
6445
6556
  [filters, onChange]
6446
6557
  );
6447
- const addFilter = useCallback4(
6558
+ const addFilter = useCallback5(
6448
6559
  (fieldKey) => {
6449
6560
  const field = fieldsMap[fieldKey];
6450
6561
  if (field && field.key) {
@@ -6476,14 +6587,14 @@ function Filters({
6476
6587
  (f) => !menuSearchInput || f.label?.toLowerCase().includes(menuSearchInput.toLowerCase())
6477
6588
  );
6478
6589
  }, [selectableFields, menuSearchInput]);
6479
- useEffect6(() => {
6590
+ useEffect7(() => {
6480
6591
  if (addFilterOpen && filteredFields.length > 0) {
6481
6592
  setHighlightedIndex(0);
6482
6593
  }
6483
6594
  }, [addFilterOpen, filteredFields.length]);
6484
6595
  const triggerButton = useRender5({
6485
6596
  render: trigger ?? /* @__PURE__ */ jsxs24(Button, { variant: "outline", children: [
6486
- /* @__PURE__ */ jsx43(PlusIcon, {}),
6597
+ /* @__PURE__ */ jsx44(PlusIcon, {}),
6487
6598
  mergedI18n.addFilter
6488
6599
  ] }),
6489
6600
  defaultTagName: "button"
@@ -6500,10 +6611,10 @@ function Filters({
6500
6611
  }),
6501
6612
  [variant, size, radius, mergedI18n, className, trigger, allowMultiple]
6502
6613
  );
6503
- return /* @__PURE__ */ jsx43(FilterContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxs24(
6614
+ return /* @__PURE__ */ jsx44(FilterContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxs24(
6504
6615
  "div",
6505
6616
  {
6506
- className: cn(filtersContainerVariants({ variant, size }), className),
6617
+ className: cn42(filtersContainerVariants({ variant, size }), className),
6507
6618
  children: [
6508
6619
  selectableFields.length > 0 && /* @__PURE__ */ jsxs24(
6509
6620
  DropdownMenu,
@@ -6519,16 +6630,16 @@ function Filters({
6519
6630
  }
6520
6631
  },
6521
6632
  children: [
6522
- /* @__PURE__ */ jsx43(DropdownMenuTrigger, { render: triggerButton }),
6633
+ /* @__PURE__ */ jsx44(DropdownMenuTrigger, { render: triggerButton }),
6523
6634
  /* @__PURE__ */ jsxs24(
6524
6635
  DropdownMenuContent,
6525
6636
  {
6526
- className: cn("w-55", menuPopupClassName),
6637
+ className: cn42("w-55", menuPopupClassName),
6527
6638
  align: "start",
6528
6639
  children: [
6529
6640
  showSearchInput && /* @__PURE__ */ jsxs24(Fragment4, { children: [
6530
6641
  /* @__PURE__ */ jsxs24("div", { className: "relative", children: [
6531
- /* @__PURE__ */ jsx43(
6642
+ /* @__PURE__ */ jsx44(
6532
6643
  Input,
6533
6644
  {
6534
6645
  ref: rootInputRef,
@@ -6536,7 +6647,7 @@ function Filters({
6536
6647
  "aria-controls": `${rootId}-listbox`,
6537
6648
  "aria-activedescendant": highlightedIndex >= 0 ? `${rootId}-item-${highlightedIndex}` : void 0,
6538
6649
  placeholder: mergedI18n.searchFields,
6539
- className: cn(
6650
+ className: cn42(
6540
6651
  "h-8 rounded-none border-0 bg-transparent! px-2 text-sm shadow-none",
6541
6652
  "focus-visible:border-border focus-visible:ring-0 focus-visible:ring-offset-0",
6542
6653
  activeMenu === "root" && "placeholder:text-foreground"
@@ -6600,20 +6711,20 @@ function Filters({
6600
6711
  }
6601
6712
  }
6602
6713
  ),
6603
- enableShortcut && shortcutLabel && /* @__PURE__ */ jsx43(Kbd, { className: "absolute top-1/2 right-2 -translate-y-1/2 border bg-background", children: shortcutLabel })
6714
+ enableShortcut && shortcutLabel && /* @__PURE__ */ jsx44(Kbd, { className: "absolute top-1/2 right-2 -translate-y-1/2 border bg-background", children: shortcutLabel })
6604
6715
  ] }),
6605
- /* @__PURE__ */ jsx43(DropdownMenuSeparator, {})
6716
+ /* @__PURE__ */ jsx44(DropdownMenuSeparator, {})
6606
6717
  ] }),
6607
- /* @__PURE__ */ jsx43("div", { className: "relative flex max-h-full", children: /* @__PURE__ */ jsx43(
6718
+ /* @__PURE__ */ jsx44("div", { className: "relative flex max-h-full", children: /* @__PURE__ */ jsx44(
6608
6719
  "div",
6609
6720
  {
6610
6721
  className: "flex max-h-[min(var(--available-height),24rem)] w-full scroll-pt-2 scroll-pb-2 flex-col overscroll-contain",
6611
6722
  role: "listbox",
6612
6723
  id: `${rootId}-listbox`,
6613
6724
  onMouseEnter: () => setActiveMenu("root"),
6614
- children: /* @__PURE__ */ jsx43(ScrollArea, { className: "**:data-[slot=scroll-area-scrollbar]:m-0", children: (() => {
6725
+ children: /* @__PURE__ */ jsx44(ScrollArea, { className: "**:data-[slot=scroll-area-scrollbar]:m-0", children: (() => {
6615
6726
  if (filteredFields.length === 0) {
6616
- return /* @__PURE__ */ jsx43("div", { className: "py-2 text-center text-sm text-muted-foreground", children: mergedI18n.noFieldsFound });
6727
+ return /* @__PURE__ */ jsx44("div", { className: "py-2 text-center text-sm text-muted-foreground", children: mergedI18n.noFieldsFound });
6617
6728
  }
6618
6729
  return filteredFields.map((field, index) => {
6619
6730
  const isHighlighted = highlightedIndex === index;
@@ -6654,16 +6765,16 @@ function Filters({
6654
6765
  className: "data-highlighted:bg-accent data-highlighted:text-accent-foreground data-popup-open:bg-accent data-popup-open:text-accent-foreground",
6655
6766
  children: [
6656
6767
  field.icon,
6657
- /* @__PURE__ */ jsx43("span", { children: field.label })
6768
+ /* @__PURE__ */ jsx44("span", { children: field.label })
6658
6769
  ]
6659
6770
  }
6660
6771
  ),
6661
- /* @__PURE__ */ jsx43(
6772
+ /* @__PURE__ */ jsx44(
6662
6773
  DropdownMenuSubContent,
6663
6774
  {
6664
6775
  className: "w-50",
6665
6776
  side: "right",
6666
- children: /* @__PURE__ */ jsx43(
6777
+ children: /* @__PURE__ */ jsx44(
6667
6778
  FilterSubmenuContent,
6668
6779
  {
6669
6780
  field,
@@ -6748,7 +6859,7 @@ function Filters({
6748
6859
  className: "data-highlighted:bg-accent data-highlighted:text-accent-foreground",
6749
6860
  children: [
6750
6861
  field.icon,
6751
- /* @__PURE__ */ jsx43("span", { children: field.label })
6862
+ /* @__PURE__ */ jsx44("span", { children: field.label })
6752
6863
  ]
6753
6864
  },
6754
6865
  field.key
@@ -6775,7 +6886,7 @@ function Filters({
6775
6886
  field.icon && field.icon,
6776
6887
  field.label
6777
6888
  ] }),
6778
- /* @__PURE__ */ jsx43(
6889
+ /* @__PURE__ */ jsx44(
6779
6890
  FilterOperatorDropdown,
6780
6891
  {
6781
6892
  field,
@@ -6784,7 +6895,7 @@ function Filters({
6784
6895
  onChange: (operator) => updateFilter(filter.id, { operator })
6785
6896
  }
6786
6897
  ),
6787
- /* @__PURE__ */ jsx43(
6898
+ /* @__PURE__ */ jsx44(
6788
6899
  FilterValueSelector,
6789
6900
  {
6790
6901
  field,
@@ -6794,7 +6905,7 @@ function Filters({
6794
6905
  autoFocus: filter.id === lastAddedFilterId
6795
6906
  }
6796
6907
  ),
6797
- /* @__PURE__ */ jsx43(FilterRemoveButton, { onClick: () => removeFilter(filter.id) })
6908
+ /* @__PURE__ */ jsx44(FilterRemoveButton, { onClick: () => removeFilter(filter.id) })
6798
6909
  ]
6799
6910
  },
6800
6911
  filter.id
@@ -6819,25 +6930,26 @@ var createFilterGroup = (id, label, fields, initialFilters = []) => ({
6819
6930
 
6820
6931
  // src/ui/select.tsx
6821
6932
  import { Select as SelectPrimitive } from "@base-ui/react/select";
6933
+ import { cn as cn43 } from "cn";
6822
6934
  import { Check as Check2, ChevronDown as ChevronDown3, ChevronUp as ChevronUp2 } from "@gravity-ui/icons";
6823
- import { jsx as jsx44, jsxs as jsxs25 } from "react/jsx-runtime";
6935
+ import { jsx as jsx45, jsxs as jsxs25 } from "react/jsx-runtime";
6824
6936
  var Select = SelectPrimitive.Root;
6825
6937
  function SelectGroup({ className, ...props }) {
6826
- return /* @__PURE__ */ jsx44(
6938
+ return /* @__PURE__ */ jsx45(
6827
6939
  SelectPrimitive.Group,
6828
6940
  {
6829
6941
  "data-slot": "select-group",
6830
- className: cn("scroll-my-1 p-1", className),
6942
+ className: cn43("scroll-my-1 p-1", className),
6831
6943
  ...props
6832
6944
  }
6833
6945
  );
6834
6946
  }
6835
6947
  function SelectValue({ className, ...props }) {
6836
- return /* @__PURE__ */ jsx44(
6948
+ return /* @__PURE__ */ jsx45(
6837
6949
  SelectPrimitive.Value,
6838
6950
  {
6839
6951
  "data-slot": "select-value",
6840
- className: cn("flex flex-1 text-left", className),
6952
+ className: cn43("flex flex-1 text-left", className),
6841
6953
  ...props
6842
6954
  }
6843
6955
  );
@@ -6853,17 +6965,17 @@ function SelectTrigger({
6853
6965
  {
6854
6966
  "data-slot": "select-trigger",
6855
6967
  "data-size": size,
6856
- className: cn(
6968
+ className: cn43(
6857
6969
  "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",
6858
6970
  className
6859
6971
  ),
6860
6972
  ...props,
6861
6973
  children: [
6862
6974
  children,
6863
- /* @__PURE__ */ jsx44(
6975
+ /* @__PURE__ */ jsx45(
6864
6976
  SelectPrimitive.Icon,
6865
6977
  {
6866
- render: /* @__PURE__ */ jsx44(ChevronDown3, { className: "pointer-events-none size-4 text-muted-foreground" })
6978
+ render: /* @__PURE__ */ jsx45(ChevronDown3, { className: "pointer-events-none size-4 text-muted-foreground" })
6867
6979
  }
6868
6980
  )
6869
6981
  ]
@@ -6880,7 +6992,7 @@ function SelectContent({
6880
6992
  alignItemWithTrigger = true,
6881
6993
  ...props
6882
6994
  }) {
6883
- return /* @__PURE__ */ jsx44(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsx44(
6995
+ return /* @__PURE__ */ jsx45(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsx45(
6884
6996
  SelectPrimitive.Positioner,
6885
6997
  {
6886
6998
  side,
@@ -6894,15 +7006,15 @@ function SelectContent({
6894
7006
  {
6895
7007
  "data-slot": "select-content",
6896
7008
  "data-align-trigger": alignItemWithTrigger,
6897
- className: cn(
7009
+ className: cn43(
6898
7010
  "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",
6899
7011
  className
6900
7012
  ),
6901
7013
  ...props,
6902
7014
  children: [
6903
- /* @__PURE__ */ jsx44(SelectScrollUpButton, {}),
6904
- /* @__PURE__ */ jsx44(SelectPrimitive.List, { className: "p-1", children }),
6905
- /* @__PURE__ */ jsx44(SelectScrollDownButton, {})
7015
+ /* @__PURE__ */ jsx45(SelectScrollUpButton, {}),
7016
+ /* @__PURE__ */ jsx45(SelectPrimitive.List, { className: "p-1", children }),
7017
+ /* @__PURE__ */ jsx45(SelectScrollDownButton, {})
6906
7018
  ]
6907
7019
  }
6908
7020
  )
@@ -6913,11 +7025,11 @@ function SelectLabel({
6913
7025
  className,
6914
7026
  ...props
6915
7027
  }) {
6916
- return /* @__PURE__ */ jsx44(
7028
+ return /* @__PURE__ */ jsx45(
6917
7029
  SelectPrimitive.GroupLabel,
6918
7030
  {
6919
7031
  "data-slot": "select-label",
6920
- className: cn("px-1.5 py-1 text-xs text-muted-foreground", className),
7032
+ className: cn43("px-1.5 py-1 text-xs text-muted-foreground", className),
6921
7033
  ...props
6922
7034
  }
6923
7035
  );
@@ -6931,18 +7043,18 @@ function SelectItem({
6931
7043
  SelectPrimitive.Item,
6932
7044
  {
6933
7045
  "data-slot": "select-item",
6934
- className: cn(
7046
+ className: cn43(
6935
7047
  "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",
6936
7048
  className
6937
7049
  ),
6938
7050
  ...props,
6939
7051
  children: [
6940
- /* @__PURE__ */ jsx44(SelectPrimitive.ItemText, { className: "flex flex-1 shrink-0 gap-2 whitespace-nowrap", children }),
6941
- /* @__PURE__ */ jsx44(
7052
+ /* @__PURE__ */ jsx45(SelectPrimitive.ItemText, { className: "flex flex-1 shrink-0 gap-2 whitespace-nowrap", children }),
7053
+ /* @__PURE__ */ jsx45(
6942
7054
  SelectPrimitive.ItemIndicator,
6943
7055
  {
6944
- render: /* @__PURE__ */ jsx44("span", { className: "pointer-events-none absolute right-2 flex size-4 items-center justify-center" }),
6945
- children: /* @__PURE__ */ jsx44(Check2, { className: "pointer-events-none" })
7056
+ render: /* @__PURE__ */ jsx45("span", { className: "pointer-events-none absolute right-2 flex size-4 items-center justify-center" }),
7057
+ children: /* @__PURE__ */ jsx45(Check2, { className: "pointer-events-none" })
6946
7058
  }
6947
7059
  )
6948
7060
  ]
@@ -6953,11 +7065,11 @@ function SelectSeparator({
6953
7065
  className,
6954
7066
  ...props
6955
7067
  }) {
6956
- return /* @__PURE__ */ jsx44(
7068
+ return /* @__PURE__ */ jsx45(
6957
7069
  SelectPrimitive.Separator,
6958
7070
  {
6959
7071
  "data-slot": "select-separator",
6960
- className: cn("pointer-events-none -mx-1 my-1 h-px bg-border", className),
7072
+ className: cn43("pointer-events-none -mx-1 my-1 h-px bg-border", className),
6961
7073
  ...props
6962
7074
  }
6963
7075
  );
@@ -6966,16 +7078,16 @@ function SelectScrollUpButton({
6966
7078
  className,
6967
7079
  ...props
6968
7080
  }) {
6969
- return /* @__PURE__ */ jsx44(
7081
+ return /* @__PURE__ */ jsx45(
6970
7082
  SelectPrimitive.ScrollUpArrow,
6971
7083
  {
6972
7084
  "data-slot": "select-scroll-up-button",
6973
- className: cn(
7085
+ className: cn43(
6974
7086
  "top-0 z-10 flex w-full cursor-default items-center justify-center bg-background py-1 [&_svg:not([class*='size-'])]:size-4",
6975
7087
  className
6976
7088
  ),
6977
7089
  ...props,
6978
- children: /* @__PURE__ */ jsx44(ChevronUp2, {})
7090
+ children: /* @__PURE__ */ jsx45(ChevronUp2, {})
6979
7091
  }
6980
7092
  );
6981
7093
  }
@@ -6983,16 +7095,16 @@ function SelectScrollDownButton({
6983
7095
  className,
6984
7096
  ...props
6985
7097
  }) {
6986
- return /* @__PURE__ */ jsx44(
7098
+ return /* @__PURE__ */ jsx45(
6987
7099
  SelectPrimitive.ScrollDownArrow,
6988
7100
  {
6989
7101
  "data-slot": "select-scroll-down-button",
6990
- className: cn(
7102
+ className: cn43(
6991
7103
  "bottom-0 z-10 flex w-full cursor-default items-center justify-center bg-background py-1 [&_svg:not([class*='size-'])]:size-4",
6992
7104
  className
6993
7105
  ),
6994
7106
  ...props,
6995
- children: /* @__PURE__ */ jsx44(ChevronDown3, {})
7107
+ children: /* @__PURE__ */ jsx45(ChevronDown3, {})
6996
7108
  }
6997
7109
  );
6998
7110
  }
@@ -7002,7 +7114,8 @@ import {
7002
7114
  forwardRef as forwardRef4,
7003
7115
  useLayoutEffect
7004
7116
  } from "react";
7005
- import { jsx as jsx45 } from "react/jsx-runtime";
7117
+ import { cn as cn44 } from "cn";
7118
+ import { jsx as jsx46 } from "react/jsx-runtime";
7006
7119
  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)]";
7007
7120
  var STYLE_ID = "iconiq-skeleton-styles";
7008
7121
  var SKELETON_CSS = `
@@ -7123,10 +7236,10 @@ var Skeleton = forwardRef4(function Skeleton2({
7123
7236
  ...style,
7124
7237
  "--iconiq-skeleton-duration": `${variantDuration}s`
7125
7238
  } : style;
7126
- return /* @__PURE__ */ jsx45(
7239
+ return /* @__PURE__ */ jsx46(
7127
7240
  "div",
7128
7241
  {
7129
- className: cn(
7242
+ className: cn44(
7130
7243
  componentThemeClassName,
7131
7244
  "iconiq-skeleton-surface relative block h-4 w-full overflow-hidden",
7132
7245
  showFade && "iconiq-skeleton-fade-root",
@@ -7137,7 +7250,7 @@ var Skeleton = forwardRef4(function Skeleton2({
7137
7250
  style: animatedStyle,
7138
7251
  ...resolveSkeletonA11yProps({ animate: animate2, decorative, label }),
7139
7252
  ...props,
7140
- children: showShimmer ? /* @__PURE__ */ jsx45(
7253
+ children: showShimmer ? /* @__PURE__ */ jsx46(
7141
7254
  "span",
7142
7255
  {
7143
7256
  "aria-hidden": "true",
@@ -7152,10 +7265,10 @@ function SkeletonAvatar({
7152
7265
  className,
7153
7266
  ...props
7154
7267
  }) {
7155
- return /* @__PURE__ */ jsx45(
7268
+ return /* @__PURE__ */ jsx46(
7156
7269
  Skeleton,
7157
7270
  {
7158
- className: cn("size-10", className),
7271
+ className: cn44("size-10", className),
7159
7272
  decorative: true,
7160
7273
  rounded: "full",
7161
7274
  ...props
@@ -7163,16 +7276,16 @@ function SkeletonAvatar({
7163
7276
  );
7164
7277
  }
7165
7278
  function SkeletonText({ className, ...props }) {
7166
- return /* @__PURE__ */ jsx45(Skeleton, { className: cn("h-3", className), decorative: true, ...props });
7279
+ return /* @__PURE__ */ jsx46(Skeleton, { className: cn44("h-3", className), decorative: true, ...props });
7167
7280
  }
7168
7281
  function SkeletonButton({
7169
7282
  className,
7170
7283
  ...props
7171
7284
  }) {
7172
- return /* @__PURE__ */ jsx45(
7285
+ return /* @__PURE__ */ jsx46(
7173
7286
  Skeleton,
7174
7287
  {
7175
- className: cn("h-9 w-24", className),
7288
+ className: cn44("h-9 w-24", className),
7176
7289
  decorative: true,
7177
7290
  rounded: "lg",
7178
7291
  ...props
@@ -7184,11 +7297,11 @@ var ShimmerSkeleton = Skeleton;
7184
7297
  // src/ui/sonner.tsx
7185
7298
  import { GooeyToaster } from "goey-toast";
7186
7299
  import { useTheme } from "next-themes";
7187
- import { jsx as jsx46 } from "react/jsx-runtime";
7300
+ import { jsx as jsx47 } from "react/jsx-runtime";
7188
7301
  var Toaster = ({ closeButton = "top-left", ...props }) => {
7189
7302
  const { theme = "system" } = useTheme();
7190
7303
  const toasterTheme = theme === "dark" ? "dark" : "light";
7191
- return /* @__PURE__ */ jsx46(
7304
+ return /* @__PURE__ */ jsx47(
7192
7305
  GooeyToaster,
7193
7306
  {
7194
7307
  theme: toasterTheme,
@@ -7228,53 +7341,16 @@ import {
7228
7341
  verticalListSortingStrategy
7229
7342
  } from "@dnd-kit/sortable";
7230
7343
  import { CSS } from "@dnd-kit/utilities";
7231
- import * as React14 from "react";
7344
+ import * as React15 from "react";
7232
7345
  import * as ReactDOM from "react-dom";
7233
-
7234
- // src/lib/compose-refs.ts
7235
- import * as React12 from "react";
7236
- function setRef(ref, value) {
7237
- if (typeof ref === "function") {
7238
- return ref(value);
7239
- }
7240
- if (ref !== null && ref !== void 0) {
7241
- ref.current = value;
7242
- }
7243
- }
7244
- function composeRefs(...refs) {
7245
- return (node) => {
7246
- let hasCleanup = false;
7247
- const cleanups = refs.map((ref) => {
7248
- const cleanup = setRef(ref, node);
7249
- if (!hasCleanup && typeof cleanup === "function") {
7250
- hasCleanup = true;
7251
- }
7252
- return cleanup;
7253
- });
7254
- if (hasCleanup) {
7255
- return () => {
7256
- for (let i = 0; i < cleanups.length; i++) {
7257
- const cleanup = cleanups[i];
7258
- if (typeof cleanup === "function") {
7259
- cleanup();
7260
- } else {
7261
- setRef(refs[i], null);
7262
- }
7263
- }
7264
- };
7265
- }
7266
- };
7267
- }
7268
- function useComposedRefs(...refs) {
7269
- return React12.useCallback(composeRefs(...refs), refs);
7270
- }
7346
+ import { cn as cn45 } from "cn";
7271
7347
 
7272
7348
  // src/hooks/use-isomorphic-layout-effect.ts
7273
- import * as React13 from "react";
7274
- var useIsomorphicLayoutEffect = typeof window !== "undefined" ? React13.useLayoutEffect : React13.useEffect;
7349
+ import * as React14 from "react";
7350
+ var useIsomorphicLayoutEffect = typeof window !== "undefined" ? React14.useLayoutEffect : React14.useEffect;
7275
7351
 
7276
7352
  // src/ui/sortable.tsx
7277
- import { jsx as jsx47 } from "react/jsx-runtime";
7353
+ import { jsx as jsx48 } from "react/jsx-runtime";
7278
7354
  var orientationConfig = {
7279
7355
  vertical: {
7280
7356
  modifiers: [restrictToVerticalAxis, restrictToParentElement],
@@ -7297,9 +7373,9 @@ var CONTENT_NAME = "SortableContent";
7297
7373
  var ITEM_NAME = "SortableItem";
7298
7374
  var ITEM_HANDLE_NAME = "SortableItemHandle";
7299
7375
  var OVERLAY_NAME = "SortableOverlay";
7300
- var SortableRootContext = React14.createContext(null);
7376
+ var SortableRootContext = React15.createContext(null);
7301
7377
  function useSortableContext(consumerName) {
7302
- const context = React14.useContext(SortableRootContext);
7378
+ const context = React15.useContext(SortableRootContext);
7303
7379
  if (!context) {
7304
7380
  throw new Error(`\`${consumerName}\` must be used within \`${ROOT_NAME}\``);
7305
7381
  }
@@ -7319,8 +7395,8 @@ function Sortable(props) {
7319
7395
  accessibility,
7320
7396
  ...sortableProps
7321
7397
  } = props;
7322
- const id = React14.useId();
7323
- const [activeId, setActiveId] = React14.useState(null);
7398
+ const id = React15.useId();
7399
+ const [activeId, setActiveId] = React15.useState(null);
7324
7400
  const sensors = useSensors(
7325
7401
  useSensor(MouseSensor),
7326
7402
  useSensor(TouchSensor),
@@ -7328,11 +7404,11 @@ function Sortable(props) {
7328
7404
  coordinateGetter: sortableKeyboardCoordinates
7329
7405
  })
7330
7406
  );
7331
- const config = React14.useMemo(
7407
+ const config = React15.useMemo(
7332
7408
  () => orientationConfig[orientation],
7333
7409
  [orientation]
7334
7410
  );
7335
- const getItemValue = React14.useCallback(
7411
+ const getItemValue = React15.useCallback(
7336
7412
  (item) => {
7337
7413
  if (typeof item === "object" && !getItemValueProp) {
7338
7414
  throw new Error(
@@ -7343,10 +7419,10 @@ function Sortable(props) {
7343
7419
  },
7344
7420
  [getItemValueProp]
7345
7421
  );
7346
- const items = React14.useMemo(() => {
7422
+ const items = React15.useMemo(() => {
7347
7423
  return value.map((item) => getItemValue(item));
7348
7424
  }, [value, getItemValue]);
7349
- const onDragStart = React14.useCallback(
7425
+ const onDragStart = React15.useCallback(
7350
7426
  (event) => {
7351
7427
  sortableProps.onDragStart?.(event);
7352
7428
  if (event.activatorEvent.defaultPrevented) return;
@@ -7354,7 +7430,7 @@ function Sortable(props) {
7354
7430
  },
7355
7431
  [sortableProps.onDragStart]
7356
7432
  );
7357
- const onDragEnd = React14.useCallback(
7433
+ const onDragEnd = React15.useCallback(
7358
7434
  (event) => {
7359
7435
  sortableProps.onDragEnd?.(event);
7360
7436
  if (event.activatorEvent.defaultPrevented) return;
@@ -7376,7 +7452,7 @@ function Sortable(props) {
7376
7452
  },
7377
7453
  [value, onValueChange, onMove, getItemValue, sortableProps.onDragEnd]
7378
7454
  );
7379
- const onDragCancel = React14.useCallback(
7455
+ const onDragCancel = React15.useCallback(
7380
7456
  (event) => {
7381
7457
  sortableProps.onDragCancel?.(event);
7382
7458
  if (event.activatorEvent.defaultPrevented) return;
@@ -7384,7 +7460,7 @@ function Sortable(props) {
7384
7460
  },
7385
7461
  [sortableProps.onDragCancel]
7386
7462
  );
7387
- const announcements = React14.useMemo(
7463
+ const announcements = React15.useMemo(
7388
7464
  () => ({
7389
7465
  onDragStart({ active }) {
7390
7466
  const activeValue = active.id.toString();
@@ -7426,7 +7502,7 @@ function Sortable(props) {
7426
7502
  }),
7427
7503
  [value]
7428
7504
  );
7429
- const screenReaderInstructions = React14.useMemo(
7505
+ const screenReaderInstructions = React15.useMemo(
7430
7506
  () => ({
7431
7507
  draggable: `
7432
7508
  To pick up a sortable item, press space or enter.
@@ -7436,7 +7512,7 @@ function Sortable(props) {
7436
7512
  }),
7437
7513
  [orientation]
7438
7514
  );
7439
- const contextValue = React14.useMemo(
7515
+ const contextValue = React15.useMemo(
7440
7516
  () => ({
7441
7517
  id,
7442
7518
  items,
@@ -7459,11 +7535,11 @@ function Sortable(props) {
7459
7535
  flatCursor
7460
7536
  ]
7461
7537
  );
7462
- return /* @__PURE__ */ jsx47(
7538
+ return /* @__PURE__ */ jsx48(
7463
7539
  SortableRootContext.Provider,
7464
7540
  {
7465
7541
  value: contextValue,
7466
- children: /* @__PURE__ */ jsx47(
7542
+ children: /* @__PURE__ */ jsx48(
7467
7543
  DndContext,
7468
7544
  {
7469
7545
  collisionDetection: collisionDetection ?? config.collisionDetection,
@@ -7484,7 +7560,7 @@ function Sortable(props) {
7484
7560
  }
7485
7561
  );
7486
7562
  }
7487
- var SortableContentContext = React14.createContext(false);
7563
+ var SortableContentContext = React15.createContext(false);
7488
7564
  function SortableContent(props) {
7489
7565
  const {
7490
7566
  strategy: strategyProp,
@@ -7512,7 +7588,7 @@ function SortableContent(props) {
7512
7588
  },
7513
7589
  enabled: !withoutSlot
7514
7590
  });
7515
- return /* @__PURE__ */ jsx47(SortableContentContext.Provider, { value: true, children: /* @__PURE__ */ jsx47(
7591
+ return /* @__PURE__ */ jsx48(SortableContentContext.Provider, { value: true, children: /* @__PURE__ */ jsx48(
7516
7592
  SortableContext,
7517
7593
  {
7518
7594
  items: context.items,
@@ -7521,9 +7597,9 @@ function SortableContent(props) {
7521
7597
  }
7522
7598
  ) });
7523
7599
  }
7524
- var SortableItemContext = React14.createContext(null);
7600
+ var SortableItemContext = React15.createContext(null);
7525
7601
  function useSortableItemContext(consumerName) {
7526
- const context = React14.useContext(SortableItemContext);
7602
+ const context = React15.useContext(SortableItemContext);
7527
7603
  if (!context) {
7528
7604
  throw new Error(`\`${consumerName}\` must be used within \`${ITEM_NAME}\``);
7529
7605
  }
@@ -7540,8 +7616,8 @@ function SortableItem(props) {
7540
7616
  ref,
7541
7617
  ...itemProps
7542
7618
  } = props;
7543
- const inSortableContent = React14.useContext(SortableContentContext);
7544
- const inSortableOverlay = React14.useContext(SortableOverlayContext);
7619
+ const inSortableContent = React15.useContext(SortableContentContext);
7620
+ const inSortableOverlay = React15.useContext(SortableOverlayContext);
7545
7621
  if (!inSortableContent && !inSortableOverlay) {
7546
7622
  throw new Error(
7547
7623
  `\`${ITEM_NAME}\` must be used within \`${CONTENT_NAME}\` or \`${OVERLAY_NAME}\``
@@ -7551,7 +7627,7 @@ function SortableItem(props) {
7551
7627
  throw new Error(`\`${ITEM_NAME}\` value cannot be an empty string`);
7552
7628
  }
7553
7629
  const context = useSortableContext(ITEM_NAME);
7554
- const id = React14.useId();
7630
+ const id = React15.useId();
7555
7631
  const {
7556
7632
  attributes,
7557
7633
  listeners,
@@ -7561,7 +7637,7 @@ function SortableItem(props) {
7561
7637
  transition,
7562
7638
  isDragging
7563
7639
  } = useSortable({ id: value, disabled });
7564
- const onNodeRefChange = React14.useCallback(
7640
+ const onNodeRefChange = React15.useCallback(
7565
7641
  (node) => {
7566
7642
  if (disabled) return;
7567
7643
  setNodeRef(node);
@@ -7570,14 +7646,14 @@ function SortableItem(props) {
7570
7646
  [disabled, asHandle, setNodeRef, setActivatorNodeRef]
7571
7647
  );
7572
7648
  const composedRef = useComposedRefs(ref, onNodeRefChange);
7573
- const composedStyle = React14.useMemo(() => {
7649
+ const composedStyle = React15.useMemo(() => {
7574
7650
  return {
7575
7651
  transform: CSS.Translate.toString(transform),
7576
7652
  transition,
7577
7653
  ...style
7578
7654
  };
7579
7655
  }, [transform, transition, style]);
7580
- const itemContext = React14.useMemo(
7656
+ const itemContext = React15.useMemo(
7581
7657
  () => ({
7582
7658
  id,
7583
7659
  attributes,
@@ -7596,7 +7672,7 @@ function SortableItem(props) {
7596
7672
  id,
7597
7673
  ref: composedRef,
7598
7674
  style: composedStyle,
7599
- className: cn(
7675
+ className: cn45(
7600
7676
  "focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:outline-hidden",
7601
7677
  {
7602
7678
  "touch-none select-none": asHandle,
@@ -7619,7 +7695,7 @@ function SortableItem(props) {
7619
7695
  ...isDragging && { dragging: "" }
7620
7696
  }
7621
7697
  });
7622
- return /* @__PURE__ */ jsx47(SortableItemContext.Provider, { value: itemContext, children: element });
7698
+ return /* @__PURE__ */ jsx48(SortableItemContext.Provider, { value: itemContext, children: element });
7623
7699
  }
7624
7700
  function SortableItemHandle(props) {
7625
7701
  const { disabled, className, render, ref, ...itemHandleProps } = props;
@@ -7627,7 +7703,7 @@ function SortableItemHandle(props) {
7627
7703
  const itemContext = useSortableItemContext(ITEM_HANDLE_NAME);
7628
7704
  const isDisabled = disabled ?? itemContext.disabled;
7629
7705
  const { setActivatorNodeRef } = itemContext;
7630
- const onActivatorNodeRef = React14.useCallback(
7706
+ const onActivatorNodeRef = React15.useCallback(
7631
7707
  (node) => {
7632
7708
  if (isDisabled) return;
7633
7709
  setActivatorNodeRef(node);
@@ -7644,7 +7720,7 @@ function SortableItemHandle(props) {
7644
7720
  "aria-controls": itemContext.id,
7645
7721
  ref: composedRef,
7646
7722
  disabled: isDisabled,
7647
- className: cn(
7723
+ className: cn45(
7648
7724
  "select-none disabled:pointer-events-none disabled:opacity-50",
7649
7725
  context.flatCursor ? "cursor-default" : "cursor-grab data-dragging:cursor-grabbing",
7650
7726
  className
@@ -7661,7 +7737,7 @@ function SortableItemHandle(props) {
7661
7737
  }
7662
7738
  });
7663
7739
  }
7664
- var SortableOverlayContext = React14.createContext(false);
7740
+ var SortableOverlayContext = React15.createContext(false);
7665
7741
  var dropAnimation = {
7666
7742
  sideEffects: defaultDropAnimationSideEffects({
7667
7743
  styles: {
@@ -7674,19 +7750,19 @@ var dropAnimation = {
7674
7750
  function SortableOverlay(props) {
7675
7751
  const { container: containerProp, children, ...overlayProps } = props;
7676
7752
  const context = useSortableContext(OVERLAY_NAME);
7677
- const [mounted, setMounted] = React14.useState(false);
7753
+ const [mounted, setMounted] = React15.useState(false);
7678
7754
  useIsomorphicLayoutEffect(() => setMounted(true), []);
7679
7755
  const container = containerProp ?? (mounted ? globalThis.document?.body : null);
7680
7756
  if (!container) return null;
7681
7757
  return ReactDOM.createPortal(
7682
- /* @__PURE__ */ jsx47(
7758
+ /* @__PURE__ */ jsx48(
7683
7759
  DragOverlay,
7684
7760
  {
7685
7761
  dropAnimation,
7686
7762
  modifiers: context.modifiers,
7687
- className: cn(!context.flatCursor && "cursor-grabbing"),
7763
+ className: cn45(!context.flatCursor && "cursor-grabbing"),
7688
7764
  ...overlayProps,
7689
- children: /* @__PURE__ */ jsx47(SortableOverlayContext.Provider, { value: true, children: context.activeId ? typeof children === "function" ? children({ value: context.activeId }) : children : null })
7765
+ children: /* @__PURE__ */ jsx48(SortableOverlayContext.Provider, { value: true, children: context.activeId ? typeof children === "function" ? children({ value: context.activeId }) : children : null })
7690
7766
  }
7691
7767
  ),
7692
7768
  container
@@ -7695,23 +7771,24 @@ function SortableOverlay(props) {
7695
7771
 
7696
7772
  // src/ui/switch.tsx
7697
7773
  import { Switch as SwitchPrimitive } from "@base-ui/react/switch";
7698
- import { jsx as jsx48 } from "react/jsx-runtime";
7774
+ import { cn as cn46 } from "cn";
7775
+ import { jsx as jsx49 } from "react/jsx-runtime";
7699
7776
  function Switch({
7700
7777
  className,
7701
7778
  size = "default",
7702
7779
  ...props
7703
7780
  }) {
7704
- return /* @__PURE__ */ jsx48(
7781
+ return /* @__PURE__ */ jsx49(
7705
7782
  SwitchPrimitive.Root,
7706
7783
  {
7707
7784
  "data-slot": "switch",
7708
7785
  "data-size": size,
7709
- className: cn(
7786
+ className: cn46(
7710
7787
  "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",
7711
7788
  className
7712
7789
  ),
7713
7790
  ...props,
7714
- children: /* @__PURE__ */ jsx48(
7791
+ children: /* @__PURE__ */ jsx49(
7715
7792
  SwitchPrimitive.Thumb,
7716
7793
  {
7717
7794
  "data-slot": "switch-thumb",
@@ -7738,6 +7815,7 @@ export {
7738
7815
  AlertDialogPortal,
7739
7816
  AlertDialogTitle,
7740
7817
  AlertDialogTrigger,
7818
+ div_default as AnimatedDiv,
7741
7819
  Apple,
7742
7820
  Ariakit,
7743
7821
  Autocomplete,