@nextlyhq/ui 0.0.2-alpha.33 → 0.0.2-alpha.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -6,8 +6,8 @@ import { clsx } from 'clsx';
6
6
  import { twMerge } from 'tailwind-merge';
7
7
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
8
8
  import { Root as Root$2 } from '@radix-ui/react-label';
9
- import { Info, Minus, Check, ChevronDown, X, ChevronRight, Circle, Search, Loader2, ChevronUp, XCircle, AlertTriangle, AlertCircle, CheckCircle2, FileQuestion, ChevronsLeft, ChevronLeft, ChevronsRight } from 'lucide-react';
10
- import { Content, Provider, Root, Trigger } from '@radix-ui/react-tooltip';
9
+ import { Info, Minus, Check, ChevronDown, X, ChevronRight, Circle, Search, Loader2, ChevronUp, XCircle, AlertTriangle, AlertCircle, CheckCircle2, FileQuestion } from 'lucide-react';
10
+ import { Portal, Content, Provider, Root, Trigger } from '@radix-ui/react-tooltip';
11
11
  import * as SeparatorPrimitive from '@radix-ui/react-separator';
12
12
  import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
13
13
  import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
@@ -43,13 +43,13 @@ var buttonVariants = cva(
43
43
  link: "text-primary border border-transparent underline-offset-4 hover:underline"
44
44
  },
45
45
  size: {
46
- default: "h-10 px-6 py-2",
47
- sm: "h-9 px-4 text-[13px]",
48
- md: "h-10 px-6 text-sm",
49
- lg: "h-11 px-8 text-base",
50
- icon: "h-10 w-10 p-0",
51
- "icon-sm": "h-9 w-9 p-0",
52
- "icon-lg": "h-11 w-11 p-0"
46
+ default: "h-[var(--nx-control-height)] px-6 py-2",
47
+ sm: "h-[var(--nx-control-height-md)] px-4 text-[13px]",
48
+ md: "h-[var(--nx-control-height)] px-6 text-sm",
49
+ lg: "h-[var(--nx-control-height-lg)] px-8 text-base",
50
+ icon: "h-[var(--nx-control-height)] w-[var(--nx-control-height)] p-0",
51
+ "icon-sm": "h-[var(--nx-control-height-md)] w-[var(--nx-control-height-md)] p-0",
52
+ "icon-lg": "h-[var(--nx-control-height-lg)] w-[var(--nx-control-height-lg)] p-0"
53
53
  }
54
54
  },
55
55
  defaultVariants: {
@@ -86,13 +86,13 @@ var Button = forwardRef(
86
86
  );
87
87
  Button.displayName = "Button";
88
88
  var inputVariants = cva(
89
- "file:text-foreground placeholder:text-muted-foreground placeholder:opacity-50 selection:bg-primary selection:text-primary-foreground w-full min-w-0 rounded-none border border-input bg-background text-sm transition-all duration-150 outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 focus:ring-0 focus:ring-offset-0 focus:outline-none focus:!border-primary focus-visible:!border-primary aria-invalid:border-destructive aria-invalid:focus:!border-destructive data-[invalid=true]:border-destructive data-[invalid=true]:focus:!border-destructive",
89
+ "file:text-foreground placeholder:text-muted-foreground placeholder:opacity-50 selection:bg-primary selection:text-primary-foreground w-full min-w-0 rounded-none border border-input bg-background text-sm transition-all duration-150 outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 focus:ring-0 focus:ring-offset-0 focus:outline-none focus:border-primary! focus-visible:border-primary! aria-invalid:border-destructive aria-invalid:focus:border-destructive! data-[invalid=true]:border-destructive data-[invalid=true]:focus:border-destructive!",
90
90
  {
91
91
  variants: {
92
92
  size: {
93
- sm: "h-8 px-2.5 py-2 text-sm",
94
- default: "h-10 px-3 py-2.5 text-sm",
95
- lg: "h-11 px-4 py-3 text-base"
93
+ sm: "h-[var(--nx-control-height-sm)] px-2.5 py-2 text-sm",
94
+ default: "h-[var(--nx-control-height)] px-3 py-2.5 text-sm",
95
+ lg: "h-[var(--nx-control-height-lg)] px-4 py-3 text-base"
96
96
  }
97
97
  },
98
98
  defaultVariants: {
@@ -121,8 +121,8 @@ var Textarea = forwardRef(({ className, ...props }, ref) => {
121
121
  {
122
122
  "data-slot": "textarea",
123
123
  className: cn(
124
- "flex min-h-[80px] w-full rounded-none border border-input bg-background px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground placeholder:opacity-50 transition-all duration-200 focus:!border-primary focus-visible:!border-primary focus:outline-none hover:border-primary/30 disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-primary/5 resize-y",
125
- "aria-invalid:border-destructive aria-invalid:focus:!border-destructive",
124
+ "flex min-h-[80px] w-full rounded-none border border-input bg-background px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground placeholder:opacity-50 transition-all duration-200 focus:border-primary! focus-visible:border-primary! focus:outline-none hover:border-primary/30 disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-primary/5 resize-y",
125
+ "aria-invalid:border-destructive aria-invalid:focus:border-destructive!",
126
126
  className
127
127
  ),
128
128
  ref,
@@ -144,22 +144,41 @@ function Label({ className, ...props }) {
144
144
  }
145
145
  );
146
146
  }
147
+ var PortalContext = createContext({ container: null });
148
+ function PortalProvider({ container, children }) {
149
+ return /* @__PURE__ */ jsx(PortalContext.Provider, { value: { container }, children });
150
+ }
151
+ function usePortalContainer() {
152
+ const { container } = useContext(PortalContext);
153
+ return container ?? void 0;
154
+ }
147
155
  var TooltipProvider = Provider;
148
156
  var Tooltip = Root;
149
157
  var TooltipTrigger = Trigger;
150
- var TooltipContent = forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(
151
- Content,
152
- {
153
- ref,
154
- sideOffset,
155
- "data-slot": "tooltip-content",
156
- className: cn(
157
- "z-50 overflow-hidden rounded-none px-3 py-1.5 text-xs shadow-lg border border-primary/5 bg-popover text-popover-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
158
- className
159
- ),
160
- ...props
161
- }
162
- ));
158
+ var TooltipContent = forwardRef(({ className, sideOffset = 4, ...props }, ref) => {
159
+ const portalContainer = usePortalContainer();
160
+ return (
161
+ // Portalled for the same reason as every other overlay here, plus one
162
+ // specific to the tooltip: the positioner measures against the nearest
163
+ // containing block, and it counts `container-type` as one while the
164
+ // browser does not. Left inline under a `@container` element, the content
165
+ // is offset by that element's own position. Portalling lifts it out of any
166
+ // such ancestor, so the two agree again.
167
+ /* @__PURE__ */ jsx(Portal, { container: portalContainer, children: /* @__PURE__ */ jsx(
168
+ Content,
169
+ {
170
+ ref,
171
+ sideOffset,
172
+ "data-slot": "tooltip-content",
173
+ className: cn(
174
+ "z-50 overflow-hidden rounded-none px-3 py-1.5 text-xs shadow-lg border border-border bg-popover text-popover-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
175
+ className
176
+ ),
177
+ ...props
178
+ }
179
+ ) })
180
+ );
181
+ });
163
182
  TooltipContent.displayName = Content.displayName;
164
183
  var FormLabelWithTooltip = React6.forwardRef(
165
184
  ({
@@ -194,7 +213,7 @@ var FormLabelWithTooltip = React6.forwardRef(
194
213
  {
195
214
  side: "right",
196
215
  className: cn(
197
- "max-w-[250px] text-[12px] break-words relative z-[100] shadow-md border border-primary/5 bg-black text-white dark:bg-zinc-800 dark:text-zinc-50 px-3 py-2 rounded-none",
216
+ "max-w-[250px] text-[12px] break-words relative z-[100] shadow-md border border-border bg-primary text-primary-foreground px-3 py-2 rounded-none",
198
217
  tooltipClassName
199
218
  ),
200
219
  children: description
@@ -210,12 +229,14 @@ var badgeVariants = cva(
210
229
  {
211
230
  variants: {
212
231
  variant: {
213
- default: "bg-primary/5 text-slate-900 dark:bg-slate-800 dark:text-slate-100",
214
- primary: "bg-primary/5 text-primary dark:bg-primary/20 dark:text-primary-foreground/90",
215
- success: "bg-green-100 text-green-700 dark:bg-green-900 dark:text-green-100",
216
- warning: "bg-amber-100 text-amber-700 dark:bg-amber-900 dark:text-amber-100",
217
- destructive: "bg-red-100 text-red-700 dark:bg-red-900 dark:text-red-100",
218
- outline: "border !border-primary/5 bg-transparent text-slate-700 dark:text-slate-300 dark:!border-primary/5"
232
+ // Clear, legible chip in both modes (was bg-primary/5 at ~5% opacity,
233
+ // which was nearly invisible on dark backgrounds).
234
+ default: "bg-muted text-foreground",
235
+ primary: "bg-primary/10 text-primary dark:bg-primary/20",
236
+ success: "bg-success-100 text-success-700 dark:bg-success-900 dark:text-success-100",
237
+ warning: "bg-warning-100 text-warning-700 dark:bg-warning-900 dark:text-warning-100",
238
+ destructive: "bg-destructive-100 text-destructive-700 dark:bg-destructive-900 dark:text-destructive-100",
239
+ outline: "border border-border! bg-transparent text-foreground dark:text-muted-foreground dark:border-border!"
219
240
  }
220
241
  },
221
242
  defaultVariants: {
@@ -234,7 +255,7 @@ function Badge({ className, variant = "default", ...props }) {
234
255
  );
235
256
  }
236
257
  var cardVariants = cva(
237
- "bg-card text-foreground rounded-none border border-primary/5 transition-all duration-200",
258
+ "bg-card text-foreground rounded-none border border-border transition-all duration-200",
238
259
  {
239
260
  variants: {
240
261
  variant: {
@@ -271,7 +292,7 @@ var CardHeader = forwardRef(
271
292
  "data-slot": "card-header",
272
293
  className: cn(
273
294
  "flex flex-col p-4",
274
- !noBorder && "border-b border-primary/5",
295
+ !noBorder && "border-b border-border",
275
296
  className
276
297
  ),
277
298
  ...props
@@ -344,7 +365,7 @@ var CardFooter = forwardRef(
344
365
  ref,
345
366
  "data-slot": "card-footer",
346
367
  className: cn(
347
- "flex items-center px-6 py-4 border-t border-primary/5 bg-primary/5",
368
+ "flex items-center px-6 py-4 border-t border-border bg-primary/5",
348
369
  className
349
370
  ),
350
371
  ...props
@@ -354,14 +375,14 @@ var CardFooter = forwardRef(
354
375
  );
355
376
  CardFooter.displayName = "CardFooter";
356
377
  var alertVariants = cva(
357
- "relative flex items-start gap-3 rounded-none border border-primary/5 p-4 text-sm transition-colors duration-150",
378
+ "relative flex items-start gap-3 rounded-none border border-border p-4 text-sm transition-colors duration-150",
358
379
  {
359
380
  variants: {
360
381
  variant: {
361
- info: "border-primary/5 bg-primary/5 text-primary dark:border-primary/30 dark:bg-primary/5 dark:text-primary-foreground/90",
362
- success: "border-green-200 bg-green-50 text-green-900 dark:border-green-900 dark:bg-green-950 dark:text-green-100",
363
- warning: "border-amber-200 bg-amber-50 text-amber-900 dark:border-amber-900 dark:bg-amber-950 dark:text-amber-100",
364
- destructive: "border-red-200 bg-red-50 text-red-900 dark:border-red-900 dark:bg-red-950 dark:text-red-100"
382
+ info: "border-border bg-primary/5 text-primary dark:border-primary/30 dark:bg-primary/5 dark:text-primary-foreground/90",
383
+ success: "border-success-200 bg-success-50 text-success-900 border-l-4 border-l-success dark:border-success-900 dark:bg-success-950 dark:text-success-100",
384
+ warning: "border-warning-200 bg-warning-50 text-warning-900 border-l-4 border-l-warning dark:border-warning-900 dark:bg-warning-950 dark:text-warning-100",
385
+ destructive: "border-destructive-200 bg-destructive-50 text-destructive-900 border-l-4 border-l-destructive dark:border-destructive-900 dark:bg-destructive-950 dark:text-destructive-100"
365
386
  }
366
387
  },
367
388
  defaultVariants: {
@@ -457,7 +478,7 @@ var progressVariants = cva("h-full rounded-none transition-all", {
457
478
  variants: {
458
479
  variant: {
459
480
  default: "bg-primary-500",
460
- success: "bg-green-500",
481
+ success: "bg-success-500",
461
482
  error: "bg-destructive"
462
483
  }
463
484
  },
@@ -511,7 +532,22 @@ var Checkbox = forwardRef(({ className, indeterminate, ...props }, ref) => /* @_
511
532
  ref,
512
533
  "data-slot": "checkbox",
513
534
  className: cn(
514
- "peer h-4 w-4 shrink-0 rounded-none border border-primary/5 ring-offset-background focus:!border-primary focus-visible:!border-primary focus:outline-none focus-visible:outline-none aria-invalid:border-destructive aria-invalid:focus:!border-destructive aria-invalid:focus-visible:!border-destructive disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=checked]:border-primary transition-all duration-200",
535
+ // Unchecked outline uses primary/50: measured 3.95:1 on the light row and
536
+ // 5.32:1 on the dark one. WCAG 1.4.11 asks 3:1 of a control's boundary and
537
+ // the earlier values did not reach it — primary/40 came out at 2.85, close
538
+ // enough to look deliberate and still short. Callers must not override the
539
+ // border: passing `border-border` puts the divider token here, which
540
+ // measured 1.35:1 and 1.14:1, and a divider is meant to go unnoticed.
541
+ // Checked and indeterminate share the filled appearance; declaring both
542
+ // here keeps the control self-sufficient without host overrides.
543
+ //
544
+ // The box stays 16px and the target does not: `before` stretches an
545
+ // invisible 24px square from the centre, which is WCAG 2.5.8's floor.
546
+ // The exemption for a bare browser checkbox does not cover a styled one,
547
+ // and this is styled. Growing the box instead would make every dense
548
+ // table heavier for a rule about pointers, so the box and the thing you
549
+ // can hit are allowed to differ.
550
+ "peer relative h-4 w-4 shrink-0 rounded-none border border-primary/50 ring-offset-background before:absolute before:left-1/2 before:top-1/2 before:h-6 before:w-6 before:-translate-x-1/2 before:-translate-y-1/2 before:content-[''] focus:border-primary! focus-visible:border-primary! focus:outline-none focus-visible:outline-none aria-invalid:border-destructive aria-invalid:focus:border-destructive! aria-invalid:focus-visible:border-destructive! disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=checked]:border-primary data-[state=indeterminate]:bg-primary data-[state=indeterminate]:text-primary-foreground data-[state=indeterminate]:border-primary transition-all duration-200",
515
551
  className
516
552
  ),
517
553
  ...props,
@@ -544,7 +580,9 @@ var RadioGroupItem = forwardRef(({ className, ...props }, ref) => {
544
580
  ref,
545
581
  "data-slot": "radio-group-item",
546
582
  className: cn(
547
- "peer h-4 w-4 shrink-0 rounded-none border border-primary/5 bg-background cursor-pointer transition-all duration-150 focus:!border-primary focus-visible:!border-primary focus:outline-none focus-visible:outline-none aria-invalid:border-destructive aria-invalid:focus:!border-destructive aria-invalid:focus-visible:!border-destructive disabled:cursor-not-allowed disabled:opacity-50 hover:border-primary/30 data-[state=checked]:border-primary data-[state=checked]:border-[5px]",
583
+ // Unchecked outline uses primary/40 (clearly visible) instead of primary/5
584
+ // (~5% opacity, effectively invisible); hover strengthens above the resting state.
585
+ "peer h-4 w-4 shrink-0 rounded-none border border-primary/40 bg-background cursor-pointer transition-all duration-150 focus:border-primary! focus-visible:border-primary! focus:outline-none focus-visible:outline-none aria-invalid:border-destructive aria-invalid:focus:border-destructive! aria-invalid:focus-visible:border-destructive! disabled:cursor-not-allowed disabled:opacity-50 hover:border-primary/70 data-[state=checked]:border-primary data-[state=checked]:border-[5px]",
548
586
  className
549
587
  ),
550
588
  ...props,
@@ -559,9 +597,9 @@ function Switch({ className, ...props }) {
559
597
  {
560
598
  "data-slot": "switch",
561
599
  className: cn(
562
- "peer inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-none border border-primary/5 transition-all outline-none focus-visible:border-primary aria-invalid:border-destructive aria-invalid:focus-visible:!border-destructive disabled:cursor-not-allowed disabled:opacity-50",
563
- "data-[state=checked]:bg-primary data-[state=checked]:!border-primary",
564
- "data-[state=unchecked]:bg-input data-[state=unchecked]:border-primary/5 dark:data-[state=unchecked]:bg-input/80",
600
+ "peer inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-none border border-border transition-all outline-none focus-visible:border-primary aria-invalid:border-destructive aria-invalid:focus-visible:border-destructive! disabled:cursor-not-allowed disabled:opacity-50",
601
+ "data-[state=checked]:bg-primary data-[state=checked]:border-primary!",
602
+ "data-[state=unchecked]:bg-input data-[state=unchecked]:border-border dark:data-[state=unchecked]:bg-input/80",
565
603
  className
566
604
  ),
567
605
  ...props,
@@ -606,7 +644,7 @@ var AccordionTrigger = forwardRef(
606
644
  ...props,
607
645
  children: [
608
646
  children,
609
- /* @__PURE__ */ jsx(ChevronDown, { className: "h-4 w-4 shrink-0 transition-transform duration-150" })
647
+ /* @__PURE__ */ jsx(ChevronDown, { className: "h-4 w-4 shrink-0 transition-transform duration-150 will-change-transform" })
610
648
  ]
611
649
  }
612
650
  ) })
@@ -618,7 +656,7 @@ var AccordionContent = forwardRef(
618
656
  {
619
657
  ref,
620
658
  "data-slot": "accordion-content",
621
- className: "overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",
659
+ className: "overflow-hidden text-sm transition-all will-change-[height] transform-[translateZ(0)] data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",
622
660
  ...props,
623
661
  children: /* @__PURE__ */ jsx("div", { className: cn("pb-4 pt-0", className), children })
624
662
  }
@@ -727,7 +765,7 @@ var TabsTrigger = forwardRef(
727
765
  ref,
728
766
  "data-slot": "tabs-trigger",
729
767
  className: cn(
730
- "inline-flex items-center justify-center whitespace-nowrap rounded-none bg-transparent px-4 py-2 text-sm font-medium cursor-pointer transition-all duration-200 border-b-2 relative -mb-0.5 data-[state=active]:!border-b-primary data-[state=active]:text-primary data-[state=inactive]:border-transparent data-[state=inactive]:text-muted-foreground hover:text-primary hover:border-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/20 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed",
768
+ "inline-flex items-center justify-center whitespace-nowrap rounded-none bg-transparent px-4 py-2 text-sm font-medium cursor-pointer transition-all duration-200 border-b-2 relative -mb-0.5 data-[state=active]:border-b-primary! data-[state=active]:text-primary data-[state=inactive]:border-transparent data-[state=inactive]:text-muted-foreground hover:text-primary hover:border-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/20 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed",
731
769
  className
732
770
  ),
733
771
  ...props
@@ -750,14 +788,6 @@ var TabsContent = forwardRef(
750
788
  )
751
789
  );
752
790
  TabsContent.displayName = Content$1.displayName;
753
- var PortalContext = createContext({ container: null });
754
- function PortalProvider({ container, children }) {
755
- return /* @__PURE__ */ jsx(PortalContext.Provider, { value: { container }, children });
756
- }
757
- function usePortalContainer() {
758
- const { container } = useContext(PortalContext);
759
- return container ?? void 0;
760
- }
761
791
  var Popover = PopoverPrimitive.Root;
762
792
  var PopoverTrigger = PopoverPrimitive.Trigger;
763
793
  var PopoverAnchor = PopoverPrimitive.Anchor;
@@ -771,7 +801,7 @@ var PopoverContent = React6.forwardRef(({ className, align = "center", sideOffse
771
801
  sideOffset,
772
802
  "data-slot": "popover-content",
773
803
  className: cn(
774
- "z-[100] w-72 rounded-none border border-primary/5 bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-popover-content-transform-origin]",
804
+ "z-[100] w-72 rounded-none border border-border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-popover-content-transform-origin]",
775
805
  className
776
806
  ),
777
807
  ...props
@@ -820,7 +850,7 @@ var DialogContent = forwardRef(({ className, children, size, ...props }, ref) =>
820
850
  ref,
821
851
  "data-slot": "dialog-content",
822
852
  className: cn(
823
- "fixed left-[50%] top-[50%] z-[51] grid w-full translate-x-[-50%] translate-y-[-50%] gap-4 border border-primary/5 bg-background p-6 shadow-xl rounded-none duration-150 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]",
853
+ "fixed left-[50%] top-[50%] z-[51] grid w-full translate-x-[-50%] translate-y-[-50%] gap-4 border border-border bg-background p-6 shadow-xl rounded-none duration-150 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]",
824
854
  dialogContentVariants({ size }),
825
855
  className
826
856
  ),
@@ -917,7 +947,7 @@ var AlertDialogContent = forwardRef(({ className, ...props }, ref) => {
917
947
  {
918
948
  ref,
919
949
  className: cn(
920
- "fixed left-[50%] top-[50%] z-[51] grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-primary/5 bg-background p-6 shadow-xl rounded-none duration-150 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]",
950
+ "fixed left-[50%] top-[50%] z-[51] grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-border bg-background p-6 shadow-xl rounded-none duration-150 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]",
921
951
  className
922
952
  ),
923
953
  ...props
@@ -1005,12 +1035,14 @@ var DropdownMenuGroup = DropdownMenuPrimitive.Group;
1005
1035
  var DropdownMenuPortal = DropdownMenuPrimitive.Portal;
1006
1036
  var DropdownMenuSub = DropdownMenuPrimitive.Sub;
1007
1037
  var DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
1038
+ var menuItemBase = "cursor-pointer transition-colors data-[highlighted]:bg-muted data-[highlighted]:text-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50";
1008
1039
  var DropdownMenuSubTrigger = React6.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs(
1009
1040
  DropdownMenuPrimitive.SubTrigger,
1010
1041
  {
1011
1042
  ref,
1012
1043
  className: cn(
1013
- "flex cursor-default select-none items-center gap-2 rounded-none px-2 py-1.5 text-sm outline-none hover-unified focus:bg-primary/5 focus:text-primary data-[state=open]:bg-primary/5 data-[state=open]:text-primary [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
1044
+ "flex select-none items-center gap-2 rounded-none px-2 py-1.5 text-sm outline-none data-[state=open]:bg-muted data-[state=open]:text-foreground [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
1045
+ menuItemBase,
1014
1046
  inset && "pl-8",
1015
1047
  className
1016
1048
  ),
@@ -1027,7 +1059,7 @@ var DropdownMenuSubContent = React6.forwardRef(({ className, ...props }, ref) =>
1027
1059
  {
1028
1060
  ref,
1029
1061
  className: cn(
1030
- "z-50 min-w-[8rem] overflow-hidden rounded-none border border-primary/5 bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]",
1062
+ "z-50 min-w-[8rem] overflow-hidden rounded-none border border-border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]",
1031
1063
  className
1032
1064
  ),
1033
1065
  ...props
@@ -1042,7 +1074,7 @@ var DropdownMenuContent = React6.forwardRef(({ className, sideOffset = 4, ...pro
1042
1074
  ref,
1043
1075
  sideOffset,
1044
1076
  className: cn(
1045
- "z-50 max-h-[var(--radix-dropdown-menu-content-available-height)] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-none border border-primary/5 bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]",
1077
+ "z-50 max-h-[var(--radix-dropdown-menu-content-available-height)] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-none border border-border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]",
1046
1078
  className
1047
1079
  ),
1048
1080
  ...props
@@ -1055,7 +1087,8 @@ var DropdownMenuItem = React6.forwardRef(({ className, inset, ...props }, ref) =
1055
1087
  {
1056
1088
  ref,
1057
1089
  className: cn(
1058
- "relative flex cursor-pointer select-none items-center gap-2 rounded-none px-2 py-1.5 text-sm outline-none transition-colors hover-unified focus:bg-primary/5 focus:text-primary data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
1090
+ "relative flex select-none items-center gap-2 rounded-none px-2 py-1.5 text-sm outline-none [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
1091
+ menuItemBase,
1059
1092
  inset && "pl-8",
1060
1093
  className
1061
1094
  ),
@@ -1068,7 +1101,8 @@ var DropdownMenuCheckboxItem = React6.forwardRef(({ className, children, checked
1068
1101
  {
1069
1102
  ref,
1070
1103
  className: cn(
1071
- "relative flex cursor-default select-none items-center rounded-none py-1.5 pl-8 pr-2 text-sm outline-none transition-colors hover-primary-light focus:bg-primary/5 focus:text-primary data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
1104
+ "relative flex select-none items-center rounded-none py-1.5 pl-8 pr-2 text-sm outline-none",
1105
+ menuItemBase,
1072
1106
  className
1073
1107
  ),
1074
1108
  checked,
@@ -1085,7 +1119,8 @@ var DropdownMenuRadioItem = React6.forwardRef(({ className, children, ...props }
1085
1119
  {
1086
1120
  ref,
1087
1121
  className: cn(
1088
- "relative flex cursor-default select-none items-center rounded-none py-1.5 pl-8 pr-2 text-sm outline-none transition-colors hover-primary-light focus:bg-primary/5 focus:text-primary data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
1122
+ "relative flex select-none items-center rounded-none py-1.5 pl-8 pr-2 text-sm outline-none",
1123
+ menuItemBase,
1089
1124
  className
1090
1125
  ),
1091
1126
  ...props,
@@ -1143,13 +1178,13 @@ function SelectValue({
1143
1178
  return /* @__PURE__ */ jsx(SelectPrimitive.Value, { "data-slot": "select-value", ...props });
1144
1179
  }
1145
1180
  var selectTriggerVariants = cva(
1146
- "flex w-full items-center justify-between gap-2 rounded-none border border-input bg-background px-3 text-sm text-foreground cursor-pointer transition-all duration-150 focus:!border-primary focus-visible:!border-primary focus:outline-none hover:border-primary/30 disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-primary/5 data-[placeholder]:text-muted-foreground aria-[invalid=true]:border-destructive aria-[invalid=true]:focus:!border-destructive [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:size-4",
1181
+ "flex w-full items-center justify-between gap-2 rounded-none border border-input bg-background px-3 text-sm text-foreground cursor-pointer transition-all duration-150 focus:border-primary! focus-visible:border-primary! focus:outline-none hover:border-primary/30 disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-primary/5 data-[placeholder]:text-muted-foreground aria-[invalid=true]:border-destructive aria-[invalid=true]:focus:border-destructive! [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:size-4",
1147
1182
  {
1148
1183
  variants: {
1149
1184
  size: {
1150
- sm: "h-8 text-sm",
1151
- default: "h-10 text-sm",
1152
- lg: "h-11 text-base"
1185
+ sm: "h-[var(--nx-control-height-sm)] text-sm",
1186
+ default: "h-[var(--nx-control-height)] text-sm",
1187
+ lg: "h-[var(--nx-control-height-lg)] text-base"
1153
1188
  }
1154
1189
  },
1155
1190
  defaultVariants: {
@@ -1185,7 +1220,7 @@ function SelectContent({
1185
1220
  {
1186
1221
  "data-slot": "select-content",
1187
1222
  className: cn(
1188
- "bg-popover text-popover-foreground border border-primary/5 shadow-none rounded-none z-9999 max-h-(--radix-select-content-available-height) min-w-32 overflow-hidden data-[state=open]:animate-zoom-in-95 data-[state=closed]:animate-zoom-out-95 data-[side=bottom]:animate-slide-in-from-top-2 data-[side=left]:animate-slide-in-from-right-2 data-[side=right]:animate-slide-in-from-left-2 data-[side=top]:animate-slide-in-from-bottom-2",
1223
+ "bg-popover text-popover-foreground border border-border shadow-none rounded-none z-9999 max-h-(--radix-select-content-available-height) min-w-32 overflow-hidden data-[state=open]:animate-zoom-in-95 data-[state=closed]:animate-zoom-out-95 data-[side=bottom]:animate-slide-in-from-top-2 data-[side=left]:animate-slide-in-from-right-2 data-[side=right]:animate-slide-in-from-left-2 data-[side=top]:animate-slide-in-from-bottom-2",
1189
1224
  position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
1190
1225
  className
1191
1226
  ),
@@ -1312,10 +1347,10 @@ var sheetVariants = cva(
1312
1347
  {
1313
1348
  variants: {
1314
1349
  side: {
1315
- top: "inset-x-0 top-0 border-b border-primary/5 data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
1316
- bottom: "inset-x-0 bottom-0 border-t border-primary/5 data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",
1317
- left: "inset-y-0 left-0 h-full w-3/4 border-r border-primary/5 data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm",
1318
- right: "inset-y-0 right-0 h-full w-3/4 border-l border-primary/5 data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm"
1350
+ top: "inset-x-0 top-0 border-b border-border data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
1351
+ bottom: "inset-x-0 bottom-0 border-t border-border data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",
1352
+ left: "inset-y-0 left-0 h-full w-3/4 border-r border-border data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm",
1353
+ right: "inset-y-0 right-0 h-full w-3/4 border-l border-border data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm"
1319
1354
  }
1320
1355
  },
1321
1356
  defaultVariants: {
@@ -1439,7 +1474,7 @@ var CommandDialog = ({ children, ...props }) => {
1439
1474
  "m-4 sm:m-0",
1440
1475
  // 16px margin on mobile, no margin on desktop
1441
1476
  // Visual
1442
- "overflow-hidden rounded-none border border-primary/5 bg-background shadow-xl",
1477
+ "overflow-hidden rounded-none border border-border bg-background shadow-xl",
1443
1478
  // Animation
1444
1479
  "duration-200",
1445
1480
  "data-[state=open]:animate-in data-[state=closed]:animate-out",
@@ -1455,7 +1490,7 @@ var CommandDialog = ({ children, ...props }) => {
1455
1490
  var CommandInput = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs(
1456
1491
  "div",
1457
1492
  {
1458
- className: "flex items-center border-b border-primary/5 px-4",
1493
+ className: "flex items-center border-b border-border px-4",
1459
1494
  "cmdk-input-wrapper": "",
1460
1495
  children: [
1461
1496
  /* @__PURE__ */ jsx(Search, { className: "mr-3 h-5 w-5 shrink-0 text-muted-foreground" }),
@@ -1574,7 +1609,7 @@ var CommandShortcut = forwardRef(
1574
1609
  "text-xs font-mono",
1575
1610
  // Visual
1576
1611
  "text-muted-foreground bg-primary/5",
1577
- "border border-primary/5 rounded-none",
1612
+ "border border-border rounded-none",
1578
1613
  // Spacing
1579
1614
  "px-1.5 py-0.5",
1580
1615
  className
@@ -1617,7 +1652,7 @@ function Toaster({ theme = "system", ...props }) {
1617
1652
  Toaster$1,
1618
1653
  {
1619
1654
  theme,
1620
- className: "toaster group !bg-transparent !overflow-visible !z-[9999]",
1655
+ className: "toaster group bg-transparent! overflow-visible! z-[9999]!",
1621
1656
  "data-slot": "toaster",
1622
1657
  toastOptions: {
1623
1658
  classNames: {
@@ -1632,9 +1667,9 @@ function Toaster({ theme = "system", ...props }) {
1632
1667
  loading: /* @__PURE__ */ jsx(Loader2, { className: "h-4 w-4 animate-spin" })
1633
1668
  },
1634
1669
  style: {
1635
- "--normal-bg": "hsl(var(--popover, 0 0% 100%))",
1636
- "--normal-text": "hsl(var(--popover-foreground, 222.2 84% 4.9%))",
1637
- "--normal-border": "hsl(var(--border, 214.3 31.8% 91.4%))",
1670
+ "--normal-bg": "var(--nx-popover)",
1671
+ "--normal-text": "var(--nx-popover-foreground)",
1672
+ "--normal-border": "var(--nx-border)",
1638
1673
  "--border-radius": "0px"
1639
1674
  },
1640
1675
  ...props
@@ -1650,7 +1685,14 @@ var Table = React6.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
1650
1685
  }
1651
1686
  ) }));
1652
1687
  Table.displayName = "Table";
1653
- var TableHeader = React6.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("thead", { ref, className: cn("[&_tr] :border-b border-primary/5", className), ...props }));
1688
+ var TableHeader = React6.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1689
+ "thead",
1690
+ {
1691
+ ref,
1692
+ className: cn("[&_tr]:border-b border-border", className),
1693
+ ...props
1694
+ }
1695
+ ));
1654
1696
  TableHeader.displayName = "TableHeader";
1655
1697
  var TableBody = React6.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1656
1698
  "tbody",
@@ -1665,7 +1707,10 @@ var TableFooter = React6.forwardRef(({ className, ...props }, ref) => /* @__PURE
1665
1707
  "tfoot",
1666
1708
  {
1667
1709
  ref,
1668
- className: cn("border-t border-primary/5 font-medium [&>tr]:last:border-b-0", className),
1710
+ className: cn(
1711
+ "border-t border-border font-medium [&>tr]:last:border-b-0",
1712
+ className
1713
+ ),
1669
1714
  ...props
1670
1715
  }
1671
1716
  ));
@@ -1675,7 +1720,7 @@ var TableRow = React6.forwardRef(({ className, ...props }, ref) => /* @__PURE__
1675
1720
  {
1676
1721
  ref,
1677
1722
  className: cn(
1678
- "border-b border-primary/5 transition-colors data-[state=selected]:bg-primary/5",
1723
+ "border-b border-border transition-colors data-[state=selected]:bg-primary/5",
1679
1724
  className
1680
1725
  ),
1681
1726
  ...props
@@ -1734,7 +1779,7 @@ function TableSearch({
1734
1779
  value,
1735
1780
  onChange: (e) => onChange(e.target.value),
1736
1781
  "aria-busy": isLoading,
1737
- className: "h-10 w-full rounded-none border border-primary/5 bg-background pl-10 pr-10 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 transition-all"
1782
+ className: "h-10 w-full rounded-none border border-border bg-background pl-10 pr-10 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 transition-all"
1738
1783
  }
1739
1784
  ),
1740
1785
  (value || isLoading) && /* @__PURE__ */ jsxs("div", { className: "absolute right-3 top-1/2 -translate-y-1/2 flex items-center gap-2", children: [
@@ -1772,212 +1817,6 @@ function TableEmpty({ message = "No records found" }) {
1772
1817
  /* @__PURE__ */ jsx("span", { className: "text-sm font-medium", children: message })
1773
1818
  ] });
1774
1819
  }
1775
- function renderPageNumbers(currentPage, totalPages, maxVisiblePages, onPageChange) {
1776
- const getBtnClass = (active) => `flex h-8 w-8 items-center justify-center border-y border-primary/5 border-r border-primary/5 text-xs z-10 -ml-px transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring ${active ? "!bg-primary !text-primary-foreground !border-primary z-20" : "!bg-background !border-primary/5 hover-muted disabled:opacity-50"}`;
1777
- if (totalPages <= maxVisiblePages) {
1778
- return Array.from({ length: totalPages }).map((_, i) => /* @__PURE__ */ jsx(
1779
- "button",
1780
- {
1781
- onClick: () => onPageChange(i),
1782
- "aria-label": `Go to page ${i + 1}`,
1783
- "aria-current": currentPage === i ? "page" : void 0,
1784
- className: getBtnClass(currentPage === i),
1785
- children: i + 1
1786
- },
1787
- `page-${i}`
1788
- ));
1789
- }
1790
- const pages = [];
1791
- const startPage = Math.max(0, currentPage - Math.floor(maxVisiblePages / 2));
1792
- const endPage = Math.min(totalPages - 1, startPage + maxVisiblePages - 1);
1793
- if (startPage > 0) {
1794
- pages.push(
1795
- /* @__PURE__ */ jsx(
1796
- "button",
1797
- {
1798
- onClick: () => onPageChange(0),
1799
- "aria-label": "Go to page 1",
1800
- className: getBtnClass(currentPage === 0),
1801
- children: "1"
1802
- },
1803
- "page-0"
1804
- )
1805
- );
1806
- if (startPage > 1) {
1807
- pages.push(
1808
- /* @__PURE__ */ jsx(
1809
- "span",
1810
- {
1811
- className: "flex h-8 w-8 items-center justify-center border-y border-primary/5 border-r border-primary/5 !border-primary/5 !bg-background text-muted-foreground text-xs -ml-px",
1812
- "aria-hidden": "true",
1813
- children: "..."
1814
- },
1815
- "ellipsis-start"
1816
- )
1817
- );
1818
- }
1819
- }
1820
- for (let i = startPage; i <= endPage; i++) {
1821
- pages.push(
1822
- /* @__PURE__ */ jsx(
1823
- "button",
1824
- {
1825
- onClick: () => onPageChange(i),
1826
- "aria-label": `Go to page ${i + 1}`,
1827
- "aria-current": currentPage === i ? "page" : void 0,
1828
- className: getBtnClass(currentPage === i),
1829
- children: i + 1
1830
- },
1831
- i
1832
- )
1833
- );
1834
- }
1835
- if (endPage < totalPages - 1) {
1836
- if (endPage < totalPages - 2) {
1837
- pages.push(
1838
- /* @__PURE__ */ jsx(
1839
- "span",
1840
- {
1841
- className: "flex h-8 w-8 items-center justify-center border-y border-primary/5 border-r border-primary/5 !border-primary/5 !bg-background text-muted-foreground text-xs -ml-px",
1842
- "aria-hidden": "true",
1843
- children: "..."
1844
- },
1845
- "ellipsis-end"
1846
- )
1847
- );
1848
- }
1849
- pages.push(
1850
- /* @__PURE__ */ jsx(
1851
- "button",
1852
- {
1853
- onClick: () => onPageChange(totalPages - 1),
1854
- "aria-label": `Go to page ${totalPages}`,
1855
- className: getBtnClass(currentPage === totalPages - 1),
1856
- children: totalPages
1857
- },
1858
- totalPages - 1
1859
- )
1860
- );
1861
- }
1862
- return pages;
1863
- }
1864
- function TablePagination({
1865
- meta,
1866
- onPageChange,
1867
- onPageSizeChange,
1868
- config,
1869
- isLoading = false
1870
- }) {
1871
- const {
1872
- showPageSizeSelector = true,
1873
- pageSizeOptions = [10, 20, 30, 50],
1874
- maxVisiblePages = 5
1875
- } = config || {};
1876
- return /* @__PURE__ */ jsxs("div", { className: "flex flex-col sm:flex-row w-full items-center justify-between gap-4 text-xs sm:text-sm text-muted-foreground p-4 border-t border-primary/5", children: [
1877
- /* @__PURE__ */ jsxs("div", { className: "whitespace-nowrap order-2 sm:order-1", children: [
1878
- "Showing ",
1879
- (meta.page - 1) * meta.limit + 1,
1880
- "-",
1881
- Math.min(meta.page * meta.limit, meta.total),
1882
- " of ",
1883
- meta.total,
1884
- " entries"
1885
- ] }),
1886
- /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center justify-center gap-4 sm:gap-6 lg:gap-8 order-1 sm:order-2", children: [
1887
- showPageSizeSelector && /* @__PURE__ */ jsxs("div", { className: "flex items-center space-x-2", children: [
1888
- /* @__PURE__ */ jsx("span", { className: "whitespace-nowrap hidden sm:inline-block", children: "Rows per page" }),
1889
- /* @__PURE__ */ jsxs("div", { className: "relative", children: [
1890
- /* @__PURE__ */ jsx(
1891
- "select",
1892
- {
1893
- id: "pageSize",
1894
- value: meta.limit,
1895
- onChange: (e) => {
1896
- const newPageSize = Number(e.target.value);
1897
- onPageSizeChange(newPageSize);
1898
- },
1899
- className: "h-8 w-[70px] appearance-none rounded-none border border-primary/5 bg-background px-2 py-1 text-sm font-medium focus-visible:outline-none focus:ring-1 focus:ring-ring disabled:opacity-50 hover-muted cursor-pointer",
1900
- disabled: isLoading,
1901
- children: pageSizeOptions.map((size) => /* @__PURE__ */ jsx("option", { value: size, children: size }, size))
1902
- }
1903
- ),
1904
- /* @__PURE__ */ jsx("div", { className: "pointer-events-none absolute inset-y-0 right-0 flex items-center px-2 text-muted-foreground", children: /* @__PURE__ */ jsx(
1905
- "svg",
1906
- {
1907
- className: "h-3 w-3",
1908
- fill: "none",
1909
- viewBox: "0 0 24 24",
1910
- stroke: "currentColor",
1911
- children: /* @__PURE__ */ jsx(
1912
- "path",
1913
- {
1914
- strokeLinecap: "round",
1915
- strokeLinejoin: "round",
1916
- strokeWidth: 2,
1917
- d: "M19 9l-7 7-7-7"
1918
- }
1919
- )
1920
- }
1921
- ) })
1922
- ] })
1923
- ] }),
1924
- /* @__PURE__ */ jsxs("div", { className: "flex items-center -space-x-px", children: [
1925
- /* @__PURE__ */ jsx(
1926
- "button",
1927
- {
1928
- onClick: () => onPageChange(0),
1929
- disabled: meta.page === 0 || isLoading,
1930
- className: "hidden sm:flex h-8 w-8 items-center justify-center rounded-none border border-primary/5 bg-background hover-muted disabled:opacity-50 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring z-10",
1931
- "aria-label": "First page",
1932
- children: /* @__PURE__ */ jsx(ChevronsLeft, { className: "h-4 w-4" })
1933
- }
1934
- ),
1935
- /* @__PURE__ */ jsx(
1936
- "button",
1937
- {
1938
- onClick: () => onPageChange(meta.page - 1),
1939
- disabled: meta.page === 0 || isLoading,
1940
- className: "flex h-8 w-8 items-center justify-center rounded-none sm:rounded-none border border-primary/5 bg-background hover-muted disabled:opacity-50 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring z-10",
1941
- "aria-label": "Previous page",
1942
- children: /* @__PURE__ */ jsx(ChevronLeft, { className: "h-4 w-4" })
1943
- }
1944
- ),
1945
- /* @__PURE__ */ jsx("div", { className: "flex", children: renderPageNumbers(
1946
- meta.page,
1947
- meta.totalPages,
1948
- maxVisiblePages,
1949
- onPageChange
1950
- ) }),
1951
- /* @__PURE__ */ jsx(
1952
- "button",
1953
- {
1954
- onClick: () => onPageChange(meta.page + 1),
1955
- disabled: meta.page >= meta.totalPages - 1 || isLoading,
1956
- className: "flex h-8 w-8 items-center justify-center rounded-none sm:rounded-none border-y border-primary/5 border-x border-primary/5 sm :border-r border-primary/5 bg-background hover-muted disabled:opacity-50 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring z-10",
1957
- "aria-label": "Next page",
1958
- children: /* @__PURE__ */ jsx(ChevronRight, { className: "h-4 w-4" })
1959
- }
1960
- ),
1961
- /* @__PURE__ */ jsx(
1962
- "button",
1963
- {
1964
- onClick: () => onPageChange(meta.totalPages - 1),
1965
- disabled: meta.page >= meta.totalPages - 1 || isLoading,
1966
- className: "hidden sm:flex h-8 w-8 items-center justify-center rounded-none border border-primary/5 bg-background hover-muted disabled:opacity-50 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring z-10",
1967
- "aria-label": "Last page",
1968
- children: /* @__PURE__ */ jsx(ChevronsRight, { className: "h-4 w-4" })
1969
- }
1970
- )
1971
- ] }),
1972
- /* @__PURE__ */ jsxs("div", { className: "whitespace-nowrap hidden sm:block", children: [
1973
- "Page ",
1974
- meta.page + 1,
1975
- " of ",
1976
- meta.totalPages
1977
- ] })
1978
- ] })
1979
- ] });
1980
- }
1981
1820
  var GrayBar = ({ className }) => /* @__PURE__ */ jsx(Skeleton, { className });
1982
1821
  var TableSkeleton = ({
1983
1822
  columns = 5,
@@ -1988,7 +1827,7 @@ var TableSkeleton = ({
1988
1827
  const content = /* @__PURE__ */ jsxs(Fragment, { children: [
1989
1828
  /* @__PURE__ */ jsx("div", { className: "border-0 rounded-none shadow-none", children: /* @__PURE__ */ jsxs(Table, { children: [
1990
1829
  /* @__PURE__ */ jsx(TableHeader, { children: /* @__PURE__ */ jsx(TableRow, { children: Array.from({ length: columns }).map((_, colIdx) => /* @__PURE__ */ jsx(TableHead, { className: "py-3", children: colIdx === 0 ? /* @__PURE__ */ jsx(GrayBar, { className: "h-4 w-4" }) : colIdx === columns - 1 ? /* @__PURE__ */ jsx("div", { className: "flex justify-center", children: /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-4 rounded-none" }) }) : colIdx === 1 ? /* @__PURE__ */ jsx(GrayBar, { className: "h-4 w-[70%] max-w-[180px]" }) : /* @__PURE__ */ jsx(GrayBar, { className: "h-4 w-[60%] max-w-[120px]" }) }, `skeleton-header-${colIdx}`)) }) }),
1991
- /* @__PURE__ */ jsx(TableBody, { children: Array.from({ length: rowCount }).map((_, rowIdx) => /* @__PURE__ */ jsx(TableRow, { className: "border-b border-primary/5", children: Array.from({ length: columns }).map((_2, colIdx) => /* @__PURE__ */ jsx(TableCell, { className: "py-3", children: colIdx === 0 ? /* @__PURE__ */ jsx(GrayBar, { className: "h-4 w-4" }) : colIdx === columns - 1 ? /* @__PURE__ */ jsx("div", { className: "flex justify-center", children: /* @__PURE__ */ jsx(Skeleton, { className: "h-8 w-8 rounded-none" }) }) : colIdx === 1 ? /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
1830
+ /* @__PURE__ */ jsx(TableBody, { children: Array.from({ length: rowCount }).map((_, rowIdx) => /* @__PURE__ */ jsx(TableRow, { className: "border-b border-border", children: Array.from({ length: columns }).map((_2, colIdx) => /* @__PURE__ */ jsx(TableCell, { className: "py-3", children: colIdx === 0 ? /* @__PURE__ */ jsx(GrayBar, { className: "h-4 w-4" }) : colIdx === columns - 1 ? /* @__PURE__ */ jsx("div", { className: "flex justify-center", children: /* @__PURE__ */ jsx(Skeleton, { className: "h-8 w-8 rounded-none" }) }) : colIdx === 1 ? /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
1992
1831
  /* @__PURE__ */ jsx(Skeleton, { className: "w-9 rounded-none shrink-0" }),
1993
1832
  /* @__PURE__ */ jsxs("div", { className: "space-y-1.5 flex-1", children: [
1994
1833
  /* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-[120px]" }),
@@ -1996,7 +1835,7 @@ var TableSkeleton = ({
1996
1835
  ] })
1997
1836
  ] }) : /* @__PURE__ */ jsx(GrayBar, { className: "h-4 w-[60%] max-w-[120px]" }) }, colIdx)) }, rowIdx)) })
1998
1837
  ] }) }),
1999
- !hideFooter && /* @__PURE__ */ jsx("div", { className: "table-footer border-t border-primary/5", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-2 py-4 p-4", children: [
1838
+ !hideFooter && /* @__PURE__ */ jsx("div", { className: "table-footer border-t border-border", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-2 py-4 p-4", children: [
2000
1839
  /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2 text-sm", children: /* @__PURE__ */ jsx(GrayBar, { className: "h-4 w-[120px]" }) }),
2001
1840
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-6", children: [
2002
1841
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
@@ -2017,232 +1856,55 @@ var TableSkeleton = ({
2017
1856
  if (hideWrapper) {
2018
1857
  return content;
2019
1858
  }
2020
- return /* @__PURE__ */ jsx("div", { className: "table-wrapper rounded-none border border-primary/5 bg-card overflow-hidden", children: content });
1859
+ return /* @__PURE__ */ jsx("div", { className: "table-wrapper rounded-none border border-border bg-card overflow-hidden", children: content });
2021
1860
  };
2022
1861
  TableSkeleton.displayName = "TableSkeleton";
2023
- function ResponsiveTableInner({
2024
- data,
2025
- columns,
2026
- onRowClick,
2027
- renderMobileCard,
2028
- className,
2029
- emptyMessage = "No results found.",
2030
- ariaLabel,
2031
- tableWrapperClassName,
2032
- footer
2033
- }, ref) {
2034
- const visibleMobileColumns = React6.useMemo(
2035
- () => columns.filter((col) => !col.hideOnMobile),
2036
- [columns]
2037
- );
2038
- const primaryColumn = React6.useMemo(() => {
2039
- return visibleMobileColumns.find(
2040
- (col) => col.key !== "select" && col.key !== "actions"
2041
- ) || visibleMobileColumns[0];
2042
- }, [visibleMobileColumns]);
2043
- const secondaryColumns = React6.useMemo(
2044
- () => visibleMobileColumns.filter((col) => col.key !== primaryColumn?.key),
2045
- [visibleMobileColumns, primaryColumn]
2046
- );
2047
- React6.useEffect(() => {
2048
- const isDev = typeof globalThis !== "undefined" && globalThis.process && globalThis.process.env?.NODE_ENV === "development";
2049
- if (isDev && visibleMobileColumns.length === 0) {
2050
- console.warn(
2051
- "ResponsiveTable: All columns are hidden on mobile (hideOnMobile: true). Consider showing at least one column for better mobile UX. Users will see empty card borders on mobile devices."
2052
- );
2053
- }
2054
- }, [visibleMobileColumns.length]);
2055
- const handleItemClick = React6.useCallback(
2056
- (item, e) => {
2057
- if (!onRowClick) return;
2058
- if (e) {
2059
- const target = e.target;
2060
- if (target.closest('[role="checkbox"]') || target.closest("button") || target.closest("a") || target.closest('[role^="menuitem"]') || target.closest("[data-actions]")) {
2061
- return;
2062
- }
2063
- }
2064
- onRowClick(item);
2065
- },
2066
- [onRowClick]
2067
- );
2068
- const handleCardKeyDown = React6.useCallback(
2069
- (item) => (e) => {
2070
- if (onRowClick && (e.key === "Enter" || e.key === " ")) {
2071
- e.preventDefault();
2072
- handleItemClick(item, e);
2073
- }
2074
- },
2075
- [handleItemClick, onRowClick]
2076
- );
2077
- if (data.length === 0) {
2078
- return /* @__PURE__ */ jsx(
2079
- "div",
2080
- {
2081
- ref,
2082
- className: cn(
2083
- "p-8 text-center",
2084
- className
2085
- ),
2086
- children: /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: emptyMessage })
2087
- }
2088
- );
2089
- }
2090
- return /* @__PURE__ */ jsxs("div", { ref, className: cn("w-full", className), children: [
2091
- /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-4 md:hidden", children: data.map((item) => {
2092
- const primaryValue = primaryColumn ? String(item[primaryColumn.key]) : String(item.id);
2093
- if (renderMobileCard) {
2094
- return /* @__PURE__ */ jsx(
2095
- "div",
2096
- {
2097
- onClick: (e) => handleItemClick(item, e),
2098
- role: onRowClick ? "button" : void 0,
2099
- tabIndex: onRowClick ? 0 : void 0,
2100
- onKeyDown: onRowClick ? handleCardKeyDown(item) : void 0,
2101
- className: onRowClick ? "cursor-pointer" : void 0,
2102
- "aria-label": onRowClick ? `View details for ${primaryValue}` : void 0,
2103
- children: renderMobileCard(item, visibleMobileColumns)
2104
- },
2105
- item.id
2106
- );
2107
- }
2108
- return /* @__PURE__ */ jsxs(
2109
- Card,
2110
- {
2111
- variant: onRowClick ? "interactive" : "default",
2112
- className: cn(
2113
- onRowClick && "cursor-pointer",
2114
- "transition-all duration-150"
2115
- ),
2116
- onClick: (e) => handleItemClick(item, e),
2117
- role: onRowClick ? "button" : void 0,
2118
- tabIndex: onRowClick ? 0 : void 0,
2119
- onKeyDown: onRowClick ? handleCardKeyDown(item) : void 0,
2120
- "aria-label": onRowClick ? `View details for ${primaryValue}` : void 0,
2121
- children: [
2122
- primaryColumn ? /* @__PURE__ */ jsx(CardHeader, { className: "pb-3", children: /* @__PURE__ */ jsx(CardTitle, { className: "text-base", children: primaryColumn.render ? primaryColumn.render(item[primaryColumn.key], item) : String(item[primaryColumn.key]) }) }) : null,
2123
- secondaryColumns.length > 0 && /* @__PURE__ */ jsx(CardContent, { className: "pb-3", children: /* @__PURE__ */ jsx("dl", { className: "flex flex-col gap-2", children: secondaryColumns.map((column) => /* @__PURE__ */ jsxs(
2124
- "div",
2125
- {
2126
- className: "flex items-start justify-between gap-4 text-sm",
2127
- children: [
2128
- !column.hideLabelOnMobile && /* @__PURE__ */ jsxs("dt", { className: "text-muted-foreground min-w-[80px] shrink-0", children: [
2129
- column.label,
2130
- ":"
2131
- ] }),
2132
- /* @__PURE__ */ jsx(
2133
- "dd",
2134
- {
2135
- className: cn(
2136
- "font-medium flex-1",
2137
- !column.hideLabelOnMobile ? "text-right" : "text-left"
2138
- ),
2139
- children: column.render ? column.render(item[column.key], item) : String(item[column.key])
2140
- }
2141
- )
2142
- ]
2143
- },
2144
- String(column.key)
2145
- )) }) })
2146
- ]
2147
- },
2148
- item.id
2149
- );
2150
- }) }),
2151
- /* @__PURE__ */ jsx(
2152
- "div",
2153
- {
2154
- className: cn(
2155
- "table-wrapper hidden md:block overflow-hidden rounded-none border border-primary/5",
2156
- tableWrapperClassName
2157
- ),
2158
- children: /* @__PURE__ */ jsxs(Table, { "aria-label": ariaLabel || "Data table", children: [
2159
- /* @__PURE__ */ jsx(TableHeader, { className: "bg-[hsl(var(--table-header-bg))]", children: /* @__PURE__ */ jsx(TableRow, { children: columns.map((column) => /* @__PURE__ */ jsx(
2160
- TableHead,
2161
- {
2162
- className: column.headerClassName,
2163
- children: column.label
2164
- },
2165
- String(column.key)
2166
- )) }) }),
2167
- /* @__PURE__ */ jsx(TableBody, { children: data.map((item) => {
2168
- const primaryValue = primaryColumn ? String(item[primaryColumn.key]) : String(item.id);
2169
- return /* @__PURE__ */ jsx(
2170
- TableRow,
2171
- {
2172
- className: cn(
2173
- "hover-unified-table-row",
2174
- onRowClick && "cursor-pointer"
2175
- ),
2176
- onClick: (e) => handleItemClick(item, e),
2177
- role: onRowClick ? "button" : void 0,
2178
- tabIndex: onRowClick ? 0 : void 0,
2179
- onKeyDown: onRowClick ? handleCardKeyDown(item) : void 0,
2180
- "aria-label": onRowClick ? `View details for ${primaryValue}` : void 0,
2181
- children: columns.map((column) => /* @__PURE__ */ jsx(
2182
- TableCell,
2183
- {
2184
- className: column.cellClassName,
2185
- children: column.render ? column.render(item[column.key], item) : String(item[column.key])
2186
- },
2187
- String(column.key)
2188
- ))
2189
- },
2190
- item.id
2191
- );
2192
- }) })
2193
- ] })
2194
- }
2195
- ),
2196
- footer && /* @__PURE__ */ jsx("div", { className: "table-footer border-t border-primary/5 bg-[hsl(var(--table-header-bg))]", children: footer })
2197
- ] });
2198
- }
2199
- var ResponsiveTable = React6.forwardRef(ResponsiveTableInner);
2200
1862
 
2201
1863
  // src/tailwind-preset.ts
2202
1864
  var uiPreset = {
2203
1865
  theme: {
2204
1866
  extend: {
2205
1867
  colors: {
2206
- border: "hsl(var(--border))",
2207
- input: "hsl(var(--input))",
2208
- ring: "hsl(var(--ring))",
2209
- background: "hsl(var(--background))",
2210
- foreground: "hsl(var(--foreground))",
1868
+ border: "var(--nx-border)",
1869
+ input: "var(--nx-input)",
1870
+ ring: "var(--nx-ring)",
1871
+ background: "var(--nx-background)",
1872
+ foreground: "var(--nx-foreground)",
2211
1873
  primary: {
2212
- DEFAULT: "hsl(var(--primary))",
2213
- foreground: "hsl(var(--primary-foreground))"
1874
+ DEFAULT: "var(--nx-primary)",
1875
+ foreground: "var(--nx-primary-foreground)"
2214
1876
  },
2215
1877
  secondary: {
2216
- DEFAULT: "hsl(var(--secondary))",
2217
- foreground: "hsl(var(--secondary-foreground))"
1878
+ DEFAULT: "var(--nx-secondary)",
1879
+ foreground: "var(--nx-secondary-foreground)"
2218
1880
  },
2219
1881
  destructive: {
2220
- DEFAULT: "hsl(var(--destructive))",
2221
- foreground: "hsl(var(--destructive-foreground))"
1882
+ DEFAULT: "var(--nx-destructive)",
1883
+ foreground: "var(--nx-destructive-foreground)"
2222
1884
  },
2223
1885
  success: {
2224
- DEFAULT: "hsl(var(--success))",
2225
- foreground: "hsl(var(--success-foreground))"
1886
+ DEFAULT: "var(--nx-success)",
1887
+ foreground: "var(--nx-success-foreground)"
2226
1888
  },
2227
1889
  warning: {
2228
- DEFAULT: "hsl(var(--warning))",
2229
- foreground: "hsl(var(--warning-foreground))"
1890
+ DEFAULT: "var(--nx-warning)",
1891
+ foreground: "var(--nx-warning-foreground)"
2230
1892
  },
2231
1893
  muted: {
2232
- DEFAULT: "hsl(var(--muted))",
2233
- foreground: "hsl(var(--muted-foreground))"
1894
+ DEFAULT: "var(--nx-muted)",
1895
+ foreground: "var(--nx-muted-foreground)"
2234
1896
  },
2235
1897
  accent: {
2236
- DEFAULT: "hsl(var(--accent))",
2237
- foreground: "hsl(var(--accent-foreground))"
1898
+ DEFAULT: "var(--nx-accent)",
1899
+ foreground: "var(--nx-accent-foreground)"
2238
1900
  },
2239
1901
  popover: {
2240
- DEFAULT: "hsl(var(--popover))",
2241
- foreground: "hsl(var(--popover-foreground))"
1902
+ DEFAULT: "var(--nx-popover)",
1903
+ foreground: "var(--nx-popover-foreground)"
2242
1904
  },
2243
1905
  card: {
2244
- DEFAULT: "hsl(var(--card))",
2245
- foreground: "hsl(var(--card-foreground))"
1906
+ DEFAULT: "var(--nx-card)",
1907
+ foreground: "var(--nx-card-foreground)"
2246
1908
  }
2247
1909
  },
2248
1910
  borderRadius: {
@@ -2269,6 +1931,6 @@ var uiPreset = {
2269
1931
  };
2270
1932
  var tailwind_preset_default = uiPreset;
2271
1933
 
2272
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, Avatar, AvatarFallback, AvatarImage, Badge, Button, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, Collapsible, CollapsibleContent2 as CollapsibleContent, CollapsibleTrigger2 as CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, FormLabelWithTooltip, Input, Label, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, PortalProvider, Progress, RadioGroup, RadioGroupItem, ResponsiveTable, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Skeleton, Spinner, Switch, Table, TableBody, TableCaption, TableCell, TableEmpty, TableError, TableFooter, TableHead, TableHeader, TableLoading, TablePagination, TableRow, TableSearch, TableSkeleton, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Toaster, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, alertVariants, avatarVariants, badgeVariants, buttonVariants, cardVariants, cn, dialogContentVariants, inputVariants, progressVariants, selectTriggerVariants, sheetVariants, spinnerVariants, tailwind_preset_default as uiPreset, usePortalContainer };
1934
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, Avatar, AvatarFallback, AvatarImage, Badge, Button, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, Collapsible, CollapsibleContent2 as CollapsibleContent, CollapsibleTrigger2 as CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, FormLabelWithTooltip, Input, Label, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, PortalProvider, Progress, RadioGroup, RadioGroupItem, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Skeleton, Spinner, Switch, Table, TableBody, TableCaption, TableCell, TableEmpty, TableError, TableFooter, TableHead, TableHeader, TableLoading, TableRow, TableSearch, TableSkeleton, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Toaster, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, alertVariants, avatarVariants, badgeVariants, buttonVariants, cardVariants, cn, dialogContentVariants, inputVariants, progressVariants, selectTriggerVariants, sheetVariants, spinnerVariants, tailwind_preset_default as uiPreset, usePortalContainer };
2273
1935
  //# sourceMappingURL=index.mjs.map
2274
1936
  //# sourceMappingURL=index.mjs.map