@cntyclub/ui-react 0.1.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,11 +1,11 @@
1
1
  import { cn, buttonVariants, Input, Button, SpinnerOnDemand } from './chunk-2HQPCV2L.js';
2
2
  export { Button, Calendar, Checkbox, CheckboxGroup, Field, FieldControl, FieldDescription, FieldError, FieldGroup, FieldItem, FieldLabel, FieldValidity, Input, InputGroup, InputGroupAddon, InputGroupInput, InputGroupText, InputGroupTextarea, Label, NumberField, NumberFieldDecrement, NumberFieldGroup, NumberFieldIncrement, NumberFieldInput, NumberFieldScrubArea, Popover, PopoverClose, PopoverPopup as PopoverContent, PopoverCreateHandle, PopoverDescription, PopoverPopup, PopoverTitle, PopoverTrigger, Select, SelectPopup as SelectContent, SelectGroup, SelectGroupLabel, SelectItem, SelectPopup, SelectSeparator, SelectTrigger, SelectValue, SpinnerOnDemand, Textarea, buttonVariants, cn } from './chunk-2HQPCV2L.js';
3
3
  import { Accordion as Accordion$1 } from '@base-ui/react/accordion';
4
- import { ChevronDownIcon, SunIcon, MoonIcon, ChevronsUpDownIcon, XIcon, CheckIcon, UserRoundIcon, PlusIcon, ChevronRight, MoreHorizontal, ArrowLeftIcon, ArrowRightIcon, SearchIcon, NfcIcon, ChevronRightIcon, FileQuestionIcon, ShieldAlertIcon, ShieldXIcon, TriangleAlertIcon, MinusIcon, ChevronLeftIcon, MoreHorizontalIcon, GripVerticalIcon, PanelLeftIcon, Loader2Icon, TrendingDownIcon, TrendingUpIcon, CircleCheckIcon, LoaderCircleIcon, InfoIcon, CircleAlertIcon, PlayIcon, PauseIcon, VolumeXIcon, Volume2Icon, Minimize2Icon, Maximize2Icon, UserIcon, CloudUploadIcon, TrashIcon, Undo2, Redo2, Bold, Italic, Strikethrough, List, ListOrdered, AlignLeft, AlignCenter, AlignRight, AlignJustify } from 'lucide-react';
4
+ import { ChevronDownIcon, SunIcon, MoonIcon, ChevronsUpDownIcon, XIcon, CheckIcon, UserRoundIcon, PlusIcon, ChevronRight, MoreHorizontal, ArrowLeftIcon, ArrowRightIcon, SparklesIcon, ArrowUpIcon, SearchIcon, NfcIcon, ChevronLeftIcon, ChevronRightIcon, MoreHorizontalIcon, FileQuestionIcon, ShieldAlertIcon, ShieldXIcon, TriangleAlertIcon, MinusIcon, GripVerticalIcon, PanelLeftIcon, Loader2Icon, TrendingDownIcon, TrendingUpIcon, CircleCheckIcon, LoaderCircleIcon, InfoIcon, CircleAlertIcon, PlayIcon, PauseIcon, VolumeXIcon, Volume2Icon, Minimize2Icon, Maximize2Icon, UserIcon, CloudUploadIcon, TrashIcon, Undo2, Redo2, Bold, Italic, Strikethrough, List, ListOrdered, AlignLeft, AlignCenter, AlignRight, AlignJustify } from 'lucide-react';
5
5
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
6
6
  import { cva } from 'class-variance-authority';
7
7
  import { AlertDialog as AlertDialog$1 } from '@base-ui/react/alert-dialog';
8
- import * as React15 from 'react';
8
+ import * as React17 from 'react';
9
9
  import { createContext, memo, forwardRef, useRef, useState, useMemo, useContext, useEffect, useCallback, useSyncExternalStore, isValidElement, useLayoutEffect } from 'react';
10
10
  import { flushSync } from 'react-dom';
11
11
  import { mergeProps } from '@base-ui/react/merge-props';
@@ -27,6 +27,8 @@ import { Transition } from '@headlessui/react';
27
27
  import { Slot, Slottable } from '@radix-ui/react-slot';
28
28
  import useResizeObserver from 'use-resize-observer';
29
29
  import { OTPInput, REGEXP_ONLY_DIGITS, OTPInputContext } from 'input-otp';
30
+ import ReactMarkdown from 'react-markdown';
31
+ import remarkGfm from 'remark-gfm';
30
32
  import { Menu as Menu$1 } from '@base-ui/react/menu';
31
33
  import { Menubar as Menubar$1 } from '@base-ui/react/menubar';
32
34
  import { Meter as Meter$1 } from '@base-ui/react/meter';
@@ -923,7 +925,7 @@ function useSmoothWheel(ref, {
923
925
  multiplier = 0.8,
924
926
  ease = 0.12
925
927
  } = {}) {
926
- React15.useEffect(() => {
928
+ React17.useEffect(() => {
927
929
  if (!enabled) return;
928
930
  const el = ref.current;
929
931
  if (!el) return;
@@ -986,7 +988,7 @@ function SmoothScroll({
986
988
  ease,
987
989
  ...props
988
990
  }) {
989
- const ref = React15.useRef(null);
991
+ const ref = React17.useRef(null);
990
992
  useSmoothWheel(ref, { ease, horizontal, multiplier });
991
993
  return /* @__PURE__ */ jsx(
992
994
  "div",
@@ -1012,7 +1014,7 @@ function ScrollArea({
1012
1014
  viewportClassName,
1013
1015
  ...props
1014
1016
  }) {
1015
- const viewportRef = React15.useRef(null);
1017
+ const viewportRef = React17.useRef(null);
1016
1018
  useSmoothWheel(viewportRef, { enabled: wheelToHorizontal, horizontal: true });
1017
1019
  useSmoothWheel(viewportRef, {
1018
1020
  enabled: smooth && !wheelToHorizontal,
@@ -2143,9 +2145,9 @@ function CardFooter({
2143
2145
  render
2144
2146
  });
2145
2147
  }
2146
- var CarouselContext = React15.createContext(null);
2148
+ var CarouselContext = React17.createContext(null);
2147
2149
  function useCarousel() {
2148
- const context = React15.useContext(CarouselContext);
2150
+ const context = React17.useContext(CarouselContext);
2149
2151
  if (!context) {
2150
2152
  throw new Error("useCarousel must be used within a <Carousel />");
2151
2153
  }
@@ -2168,20 +2170,20 @@ function Carousel({
2168
2170
  },
2169
2171
  plugins
2170
2172
  );
2171
- const [canScrollPrev, setCanScrollPrev] = React15.useState(false);
2172
- const [canScrollNext, setCanScrollNext] = React15.useState(false);
2173
- const onSelect = React15.useCallback((api2) => {
2173
+ const [canScrollPrev, setCanScrollPrev] = React17.useState(false);
2174
+ const [canScrollNext, setCanScrollNext] = React17.useState(false);
2175
+ const onSelect = React17.useCallback((api2) => {
2174
2176
  if (!api2) return;
2175
2177
  setCanScrollPrev(api2.canScrollPrev());
2176
2178
  setCanScrollNext(api2.canScrollNext());
2177
2179
  }, []);
2178
- const scrollPrev = React15.useCallback(() => {
2180
+ const scrollPrev = React17.useCallback(() => {
2179
2181
  api?.scrollPrev();
2180
2182
  }, [api]);
2181
- const scrollNext = React15.useCallback(() => {
2183
+ const scrollNext = React17.useCallback(() => {
2182
2184
  api?.scrollNext();
2183
2185
  }, [api]);
2184
- const handleKeyDown = React15.useCallback(
2186
+ const handleKeyDown = React17.useCallback(
2185
2187
  (event) => {
2186
2188
  if (event.key === "ArrowLeft") {
2187
2189
  event.preventDefault();
@@ -2193,11 +2195,11 @@ function Carousel({
2193
2195
  },
2194
2196
  [scrollPrev, scrollNext]
2195
2197
  );
2196
- React15.useEffect(() => {
2198
+ React17.useEffect(() => {
2197
2199
  if (!api || !setApi) return;
2198
2200
  setApi(api);
2199
2201
  }, [api, setApi]);
2200
- React15.useEffect(() => {
2202
+ React17.useEffect(() => {
2201
2203
  if (!api) return;
2202
2204
  onSelect(api);
2203
2205
  api.on("reInit", onSelect);
@@ -2339,9 +2341,9 @@ function CarouselNext({
2339
2341
  );
2340
2342
  }
2341
2343
  var THEMES = { light: "", dark: '[data-theme="dark"]' };
2342
- var ChartContext = React15.createContext(null);
2344
+ var ChartContext = React17.createContext(null);
2343
2345
  function useChart() {
2344
- const context = React15.useContext(ChartContext);
2346
+ const context = React17.useContext(ChartContext);
2345
2347
  if (!context) {
2346
2348
  throw new Error("useChart must be used within a <ChartContainer />");
2347
2349
  }
@@ -2354,7 +2356,7 @@ function ChartContainer({
2354
2356
  config,
2355
2357
  ...props
2356
2358
  }) {
2357
- const uniqueId = React15.useId();
2359
+ const uniqueId = React17.useId();
2358
2360
  const chartId = `chart-${id || uniqueId.replace(/:/g, "")}`;
2359
2361
  return /* @__PURE__ */ jsx(ChartContext.Provider, { value: { config }, children: /* @__PURE__ */ jsxs(
2360
2362
  "div",
@@ -2415,7 +2417,7 @@ function ChartTooltipContent({
2415
2417
  labelKey
2416
2418
  }) {
2417
2419
  const { config } = useChart();
2418
- const tooltipLabel = React15.useMemo(() => {
2420
+ const tooltipLabel = React17.useMemo(() => {
2419
2421
  if (hideLabel || !payload?.length) {
2420
2422
  return null;
2421
2423
  }
@@ -2561,6 +2563,394 @@ function getPayloadConfigFromPayload(config, payload, key) {
2561
2563
  }
2562
2564
  return configLabelKey in config ? config[configLabelKey] : config[key];
2563
2565
  }
2566
+ function Chat({ className, ...props }) {
2567
+ return /* @__PURE__ */ jsx(
2568
+ "div",
2569
+ {
2570
+ className: cn("flex min-h-0 flex-1 flex-col", className),
2571
+ "data-slot": "chat",
2572
+ ...props
2573
+ }
2574
+ );
2575
+ }
2576
+ function ChatHeader({ className, ...props }) {
2577
+ return /* @__PURE__ */ jsx(
2578
+ "div",
2579
+ {
2580
+ className: cn(
2581
+ "flex shrink-0 items-center gap-1 border-border/72 border-b bg-background/95 px-3 py-2.5 backdrop-blur supports-backdrop-filter:bg-background/80",
2582
+ className
2583
+ ),
2584
+ "data-slot": "chat-header",
2585
+ ...props
2586
+ }
2587
+ );
2588
+ }
2589
+ function ChatHeaderAvatar({
2590
+ className,
2591
+ children,
2592
+ ...props
2593
+ }) {
2594
+ return /* @__PURE__ */ jsx(
2595
+ "span",
2596
+ {
2597
+ className: cn(
2598
+ "relative flex size-8 shrink-0 items-center justify-center rounded-full bg-linear-to-br from-primary to-primary/78 text-primary-foreground shadow-primary/24 shadow-xs after:absolute after:right-0 after:bottom-0 after:size-2 after:rounded-full after:bg-success after:ring-2 after:ring-background [&_svg:not([class*='size-'])]:size-4",
2599
+ className
2600
+ ),
2601
+ "data-slot": "chat-header-avatar",
2602
+ ...props,
2603
+ children: children ?? /* @__PURE__ */ jsx(SparklesIcon, {})
2604
+ }
2605
+ );
2606
+ }
2607
+ function ChatHeaderTitle({ className, ...props }) {
2608
+ return /* @__PURE__ */ jsx(
2609
+ "div",
2610
+ {
2611
+ className: cn("min-w-0 flex-1 leading-tight", className),
2612
+ "data-slot": "chat-header-title",
2613
+ ...props
2614
+ }
2615
+ );
2616
+ }
2617
+ function ChatHeaderActions({ className, ...props }) {
2618
+ return /* @__PURE__ */ jsx(
2619
+ "div",
2620
+ {
2621
+ className: cn("flex shrink-0 items-center gap-0.5", className),
2622
+ "data-slot": "chat-header-actions",
2623
+ ...props
2624
+ }
2625
+ );
2626
+ }
2627
+ function ChatMessages({
2628
+ autoScroll = true,
2629
+ className,
2630
+ children,
2631
+ ...props
2632
+ }) {
2633
+ const viewportRef = React17.useRef(null);
2634
+ const pinnedRef = React17.useRef(true);
2635
+ const handleScroll = React17.useCallback(() => {
2636
+ const viewport = viewportRef.current;
2637
+ if (!viewport) return;
2638
+ const distanceFromBottom = viewport.scrollHeight - viewport.scrollTop - viewport.clientHeight;
2639
+ pinnedRef.current = distanceFromBottom < 48;
2640
+ }, []);
2641
+ React17.useEffect(() => {
2642
+ const viewport = viewportRef.current;
2643
+ if (!viewport || !autoScroll || !pinnedRef.current) return;
2644
+ viewport.scrollTop = viewport.scrollHeight;
2645
+ }, [children, autoScroll]);
2646
+ return /* @__PURE__ */ jsx(
2647
+ "div",
2648
+ {
2649
+ className: cn(
2650
+ "flex min-h-0 flex-1 flex-col gap-3 overflow-y-auto scroll-smooth p-4",
2651
+ className
2652
+ ),
2653
+ "data-slot": "chat-messages",
2654
+ onScroll: handleScroll,
2655
+ ref: viewportRef,
2656
+ ...props,
2657
+ children
2658
+ }
2659
+ );
2660
+ }
2661
+ function ChatEmptyState({ className, ...props }) {
2662
+ return /* @__PURE__ */ jsx(
2663
+ "div",
2664
+ {
2665
+ className: cn(
2666
+ "flex flex-1 flex-col items-center justify-center gap-3 p-6 text-center",
2667
+ className
2668
+ ),
2669
+ "data-slot": "chat-empty-state",
2670
+ ...props
2671
+ }
2672
+ );
2673
+ }
2674
+ function ChatEmptyStateIcon({
2675
+ className,
2676
+ children,
2677
+ ...props
2678
+ }) {
2679
+ return /* @__PURE__ */ jsx(
2680
+ "span",
2681
+ {
2682
+ className: cn(
2683
+ "fade-in-0 zoom-in-90 relative flex size-13 shrink-0 animate-in items-center justify-center rounded-2xl bg-linear-to-br from-primary to-primary/78 text-primary-foreground shadow-lg shadow-primary/24 duration-500 before:absolute before:-inset-2.5 before:-z-10 before:rounded-3xl before:bg-primary/8 before:blur-lg [&_svg:not([class*='size-'])]:size-6",
2684
+ className
2685
+ ),
2686
+ "data-slot": "chat-empty-state-icon",
2687
+ ...props,
2688
+ children: children ?? /* @__PURE__ */ jsx(SparklesIcon, {})
2689
+ }
2690
+ );
2691
+ }
2692
+ function ChatEmptyStateTitle({ className, ...props }) {
2693
+ return /* @__PURE__ */ jsx(
2694
+ "p",
2695
+ {
2696
+ className: cn("mt-1 font-semibold text-base text-foreground", className),
2697
+ "data-slot": "chat-empty-state-title",
2698
+ ...props
2699
+ }
2700
+ );
2701
+ }
2702
+ function ChatEmptyStateDescription({
2703
+ className,
2704
+ ...props
2705
+ }) {
2706
+ return /* @__PURE__ */ jsx(
2707
+ "p",
2708
+ {
2709
+ className: cn(
2710
+ "max-w-72 text-muted-foreground text-sm leading-relaxed",
2711
+ className
2712
+ ),
2713
+ "data-slot": "chat-empty-state-description",
2714
+ ...props
2715
+ }
2716
+ );
2717
+ }
2718
+ function ChatSuggestions({ className, ...props }) {
2719
+ return /* @__PURE__ */ jsx(
2720
+ "div",
2721
+ {
2722
+ className: cn("mt-2 flex w-full max-w-sm flex-col gap-2", className),
2723
+ "data-slot": "chat-suggestions",
2724
+ ...props
2725
+ }
2726
+ );
2727
+ }
2728
+ function ChatSuggestion({
2729
+ className,
2730
+ children,
2731
+ icon,
2732
+ index = 0,
2733
+ style,
2734
+ ...props
2735
+ }) {
2736
+ return /* @__PURE__ */ jsxs(
2737
+ "button",
2738
+ {
2739
+ className: cn(
2740
+ "group fade-in-0 slide-in-from-bottom-2 flex w-full animate-in cursor-pointer items-center gap-2.5 fill-mode-both rounded-xl border border-border/72 bg-card px-3 py-2.5 text-left font-medium text-card-foreground text-sm shadow-xs outline-none transition-[border-color,background-color,box-shadow,transform] duration-200 hover:border-primary/24 hover:bg-accent/56 hover:shadow-sm focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background active:scale-[0.985] disabled:pointer-events-none disabled:opacity-64",
2741
+ className
2742
+ ),
2743
+ "data-slot": "chat-suggestion",
2744
+ style: { animationDelay: `${index * 80}ms`, ...style },
2745
+ type: "button",
2746
+ ...props,
2747
+ children: [
2748
+ /* @__PURE__ */ jsx("span", { className: "flex size-6.5 shrink-0 items-center justify-center rounded-lg bg-primary/8 text-primary transition-colors duration-200 group-hover:bg-primary group-hover:text-primary-foreground [&_svg:not([class*='size-'])]:size-3.5", children: icon ?? /* @__PURE__ */ jsx(SparklesIcon, {}) }),
2749
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1", children }),
2750
+ /* @__PURE__ */ jsx(ArrowRightIcon, { className: "-translate-x-1 size-3.5 shrink-0 text-muted-foreground opacity-0 transition-[opacity,translate] duration-200 group-hover:translate-x-0 group-hover:opacity-100" })
2751
+ ]
2752
+ }
2753
+ );
2754
+ }
2755
+ var chatMessageVariants = cva(
2756
+ "fade-in-0 slide-in-from-bottom-1 flex w-full animate-in flex-col gap-1 duration-200",
2757
+ {
2758
+ defaultVariants: {
2759
+ from: "assistant"
2760
+ },
2761
+ variants: {
2762
+ from: {
2763
+ assistant: "items-start",
2764
+ user: "items-end"
2765
+ }
2766
+ }
2767
+ }
2768
+ );
2769
+ function ChatMessage({ className, from, ...props }) {
2770
+ return /* @__PURE__ */ jsx(
2771
+ "div",
2772
+ {
2773
+ className: cn(chatMessageVariants({ className, from })),
2774
+ "data-from": from ?? "assistant",
2775
+ "data-slot": "chat-message",
2776
+ ...props
2777
+ }
2778
+ );
2779
+ }
2780
+ var chatMessageBubbleVariants = cva(
2781
+ "max-w-[85%] rounded-2xl px-3.5 py-2 text-sm leading-relaxed break-words",
2782
+ {
2783
+ defaultVariants: {
2784
+ from: "assistant"
2785
+ },
2786
+ variants: {
2787
+ from: {
2788
+ assistant: "rounded-bl-md bg-muted text-foreground",
2789
+ user: "rounded-br-md bg-primary text-primary-foreground shadow-primary/16 shadow-xs"
2790
+ }
2791
+ }
2792
+ }
2793
+ );
2794
+ function ChatMessageBubble({ className, from, ...props }) {
2795
+ return /* @__PURE__ */ jsx(
2796
+ "div",
2797
+ {
2798
+ className: cn(chatMessageBubbleVariants({ className, from })),
2799
+ "data-from": from ?? "assistant",
2800
+ "data-slot": "chat-message-bubble",
2801
+ ...props
2802
+ }
2803
+ );
2804
+ }
2805
+ function ChatToolChip({
2806
+ className,
2807
+ children,
2808
+ icon,
2809
+ ...props
2810
+ }) {
2811
+ return /* @__PURE__ */ jsxs(
2812
+ "div",
2813
+ {
2814
+ className: cn(
2815
+ "fade-in-0 flex w-fit max-w-full animate-in items-center gap-1.5 rounded-full border border-border/72 bg-muted/48 py-1 pr-3 pl-1.5 text-muted-foreground text-xs duration-200",
2816
+ className
2817
+ ),
2818
+ "data-slot": "chat-tool-chip",
2819
+ ...props,
2820
+ children: [
2821
+ icon ? /* @__PURE__ */ jsx("span", { className: "flex size-4.5 shrink-0 items-center justify-center rounded-full bg-background text-foreground/72 shadow-xs [&_svg:not([class*='size-'])]:size-2.5", children: icon }) : null,
2822
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate", children })
2823
+ ]
2824
+ }
2825
+ );
2826
+ }
2827
+ function ChatToolCard({ className, ...props }) {
2828
+ return /* @__PURE__ */ jsx(
2829
+ "div",
2830
+ {
2831
+ className: cn(
2832
+ "fade-in-0 slide-in-from-bottom-1 w-full max-w-[95%] animate-in rounded-xl border border-border bg-card p-3 text-card-foreground text-sm shadow-xs duration-200",
2833
+ className
2834
+ ),
2835
+ "data-slot": "chat-tool-card",
2836
+ ...props
2837
+ }
2838
+ );
2839
+ }
2840
+ function ChatToolCardHeader({ className, ...props }) {
2841
+ return /* @__PURE__ */ jsx(
2842
+ "div",
2843
+ {
2844
+ className: cn("flex items-center gap-2 font-medium", className),
2845
+ "data-slot": "chat-tool-card-header",
2846
+ ...props
2847
+ }
2848
+ );
2849
+ }
2850
+ function ChatToolCardActions({ className, ...props }) {
2851
+ return /* @__PURE__ */ jsx(
2852
+ "div",
2853
+ {
2854
+ className: cn("mt-3 flex items-center justify-end gap-2", className),
2855
+ "data-slot": "chat-tool-card-actions",
2856
+ ...props
2857
+ }
2858
+ );
2859
+ }
2860
+ function ChatTypingIndicator({ className, ...props }) {
2861
+ return /* @__PURE__ */ jsxs(
2862
+ "div",
2863
+ {
2864
+ "aria-label": "Assistant is typing",
2865
+ className: cn(
2866
+ "fade-in-0 flex w-fit animate-in items-center gap-1 rounded-2xl rounded-bl-md bg-muted px-3.5 py-2.5 duration-200",
2867
+ className
2868
+ ),
2869
+ "data-slot": "chat-typing-indicator",
2870
+ role: "status",
2871
+ ...props,
2872
+ children: [
2873
+ /* @__PURE__ */ jsx("span", { className: "size-1.5 animate-bounce rounded-full bg-muted-foreground/60 [animation-delay:0ms]" }),
2874
+ /* @__PURE__ */ jsx("span", { className: "size-1.5 animate-bounce rounded-full bg-muted-foreground/60 [animation-delay:150ms]" }),
2875
+ /* @__PURE__ */ jsx("span", { className: "size-1.5 animate-bounce rounded-full bg-muted-foreground/60 [animation-delay:300ms]" })
2876
+ ]
2877
+ }
2878
+ );
2879
+ }
2880
+ function ChatInput({
2881
+ className,
2882
+ disabled,
2883
+ onSubmit,
2884
+ onValueChange,
2885
+ placeholder = "Ask anything\u2026",
2886
+ value,
2887
+ ...props
2888
+ }) {
2889
+ const textareaRef = React17.useRef(null);
2890
+ const submit = React17.useCallback(() => {
2891
+ const trimmed = value.trim();
2892
+ if (!trimmed || disabled) return;
2893
+ onSubmit(trimmed);
2894
+ }, [disabled, onSubmit, value]);
2895
+ React17.useEffect(() => {
2896
+ const textarea = textareaRef.current;
2897
+ if (!textarea) return;
2898
+ textarea.style.height = "auto";
2899
+ textarea.style.height = `${Math.min(textarea.scrollHeight, 144)}px`;
2900
+ }, [value]);
2901
+ return /* @__PURE__ */ jsx(
2902
+ "form",
2903
+ {
2904
+ className: cn("shrink-0 bg-background p-3 pt-1.5", className),
2905
+ "data-slot": "chat-input",
2906
+ onSubmit: (event) => {
2907
+ event.preventDefault();
2908
+ submit();
2909
+ },
2910
+ children: /* @__PURE__ */ jsxs(
2911
+ "div",
2912
+ {
2913
+ className: cn(
2914
+ "flex items-end gap-1.5 rounded-2xl border border-input bg-popover p-1.5 pl-3.5 shadow-xs transition-[border-color,box-shadow] duration-150 focus-within:border-ring/64 focus-within:ring-2 focus-within:ring-ring/24 dark:bg-input/32",
2915
+ disabled && "opacity-64"
2916
+ ),
2917
+ children: [
2918
+ /* @__PURE__ */ jsx(
2919
+ "textarea",
2920
+ {
2921
+ className: "max-h-36 min-h-8 flex-1 resize-none self-center bg-transparent py-1.5 text-sm outline-none placeholder:text-muted-foreground",
2922
+ disabled,
2923
+ onChange: (event) => onValueChange(event.target.value),
2924
+ onKeyDown: (event) => {
2925
+ if (event.key === "Enter" && !event.shiftKey) {
2926
+ event.preventDefault();
2927
+ submit();
2928
+ }
2929
+ },
2930
+ placeholder,
2931
+ ref: textareaRef,
2932
+ rows: 1,
2933
+ value,
2934
+ ...props
2935
+ }
2936
+ ),
2937
+ /* @__PURE__ */ jsx(
2938
+ Button,
2939
+ {
2940
+ "aria-label": "Send message",
2941
+ className: "rounded-full before:rounded-full",
2942
+ disabled: disabled || !value.trim(),
2943
+ size: "icon-sm",
2944
+ type: "submit",
2945
+ children: /* @__PURE__ */ jsx(ArrowUpIcon, {})
2946
+ }
2947
+ )
2948
+ ]
2949
+ }
2950
+ )
2951
+ }
2952
+ );
2953
+ }
2564
2954
  function Collapsible({ ...props }) {
2565
2955
  return /* @__PURE__ */ jsx(Collapsible$1.Root, { "data-slot": "collapsible", ...props });
2566
2956
  }
@@ -2593,12 +2983,12 @@ function CollapsiblePanel({
2593
2983
  }
2594
2984
  );
2595
2985
  }
2596
- var ComboboxContext = React15.createContext({
2986
+ var ComboboxContext = React17.createContext({
2597
2987
  chipsRef: null,
2598
2988
  multiple: false
2599
2989
  });
2600
2990
  function Combobox(props) {
2601
- const chipsRef = React15.useRef(null);
2991
+ const chipsRef = React17.useRef(null);
2602
2992
  return /* @__PURE__ */ jsx(ComboboxContext.Provider, { value: { chipsRef, multiple: !!props.multiple }, children: /* @__PURE__ */ jsx(
2603
2993
  Combobox$1.Root,
2604
2994
  {
@@ -2614,7 +3004,7 @@ function ComboboxInput({
2614
3004
  size,
2615
3005
  ...props
2616
3006
  }) {
2617
- const { multiple } = React15.useContext(ComboboxContext);
3007
+ const { multiple } = React17.useContext(ComboboxContext);
2618
3008
  const sizeValue = size ?? "default";
2619
3009
  if (multiple) {
2620
3010
  return /* @__PURE__ */ jsx(
@@ -2703,7 +3093,7 @@ function ComboboxPopup({
2703
3093
  sideOffset = 4,
2704
3094
  ...props
2705
3095
  }) {
2706
- const { chipsRef } = React15.useContext(ComboboxContext);
3096
+ const { chipsRef } = React17.useContext(ComboboxContext);
2707
3097
  return /* @__PURE__ */ jsx(Combobox$1.Portal, { children: /* @__PURE__ */ jsx(
2708
3098
  Combobox$1.Positioner,
2709
3099
  {
@@ -2874,7 +3264,7 @@ function ComboboxChips({
2874
3264
  startAddon,
2875
3265
  ...props
2876
3266
  }) {
2877
- const { chipsRef } = React15.useContext(ComboboxContext);
3267
+ const { chipsRef } = React17.useContext(ComboboxContext);
2878
3268
  return /* @__PURE__ */ jsxs(
2879
3269
  Combobox$1.Chips,
2880
3270
  {
@@ -3267,72 +3657,421 @@ function CreditCard({
3267
3657
  return /* @__PURE__ */ jsx(
3268
3658
  "div",
3269
3659
  {
3270
- className: cn("relative shrink-0 select-none font-sans", className),
3271
- "data-slot": "credit-card",
3272
- "data-type": type,
3273
- style: { height: Math.round(BASE_HEIGHT * scale), width, ...style },
3274
- ...props,
3275
- children: /* @__PURE__ */ jsxs(
3276
- "div",
3660
+ className: cn("relative shrink-0 select-none font-sans", className),
3661
+ "data-slot": "credit-card",
3662
+ "data-type": type,
3663
+ style: { height: Math.round(BASE_HEIGHT * scale), width, ...style },
3664
+ ...props,
3665
+ children: /* @__PURE__ */ jsxs(
3666
+ "div",
3667
+ {
3668
+ className: cn(
3669
+ "absolute top-0 left-0 flex origin-top-left flex-col justify-between overflow-hidden rounded-[20px] p-5",
3670
+ variant.card
3671
+ ),
3672
+ style: {
3673
+ height: BASE_HEIGHT,
3674
+ transform: `scale(${scale})`,
3675
+ width: BASE_WIDTH
3676
+ },
3677
+ children: [
3678
+ variant.strip ? /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: cn("absolute", variant.strip) }) : null,
3679
+ /* @__PURE__ */ jsxs("div", { className: "relative flex items-start justify-between", children: [
3680
+ /* @__PURE__ */ jsx(
3681
+ "span",
3682
+ {
3683
+ className: "font-semibold text-base tracking-tight",
3684
+ "data-slot": "credit-card-company",
3685
+ children: company
3686
+ }
3687
+ ),
3688
+ /* @__PURE__ */ jsx(NfcIcon, { "aria-hidden": true, className: "size-5 opacity-70" })
3689
+ ] }),
3690
+ /* @__PURE__ */ jsxs("div", { className: "relative flex flex-col gap-2.5", children: [
3691
+ /* @__PURE__ */ jsx(
3692
+ "span",
3693
+ {
3694
+ className: "font-medium text-[0.9375rem] tabular-nums tracking-[0.12em]",
3695
+ "data-slot": "credit-card-number",
3696
+ children: cardNumber
3697
+ }
3698
+ ),
3699
+ /* @__PURE__ */ jsxs("div", { className: "flex items-end justify-between", children: [
3700
+ /* @__PURE__ */ jsxs("div", { className: "flex items-baseline gap-4", children: [
3701
+ /* @__PURE__ */ jsx(
3702
+ "span",
3703
+ {
3704
+ className: "font-medium text-[0.6875rem] uppercase tracking-[0.14em]",
3705
+ "data-slot": "credit-card-holder",
3706
+ children: cardHolder
3707
+ }
3708
+ ),
3709
+ /* @__PURE__ */ jsx(
3710
+ "span",
3711
+ {
3712
+ className: "font-medium text-[0.6875rem] tabular-nums tracking-[0.14em] opacity-80",
3713
+ "data-slot": "credit-card-expiration",
3714
+ children: cardExpiration
3715
+ }
3716
+ )
3717
+ ] }),
3718
+ /* @__PURE__ */ jsx(CreditCardLogo, { onDark: variant.onDark })
3719
+ ] })
3720
+ ] })
3721
+ ]
3722
+ }
3723
+ )
3724
+ }
3725
+ );
3726
+ }
3727
+ function Pagination({ className, ...props }) {
3728
+ return /* @__PURE__ */ jsx(
3729
+ "nav",
3730
+ {
3731
+ "aria-label": "pagination",
3732
+ className: cn("mx-auto flex w-full justify-center", className),
3733
+ "data-slot": "pagination",
3734
+ ...props
3735
+ }
3736
+ );
3737
+ }
3738
+ function PaginationContent({
3739
+ className,
3740
+ ...props
3741
+ }) {
3742
+ return /* @__PURE__ */ jsx(
3743
+ "ul",
3744
+ {
3745
+ className: cn("flex flex-row items-center gap-1", className),
3746
+ "data-slot": "pagination-content",
3747
+ ...props
3748
+ }
3749
+ );
3750
+ }
3751
+ function PaginationItem({ className, ...props }) {
3752
+ return /* @__PURE__ */ jsx(
3753
+ "li",
3754
+ {
3755
+ className: cn(
3756
+ "animate-in fade-in-0 zoom-in-95 duration-200 ease-out",
3757
+ className
3758
+ ),
3759
+ "data-slot": "pagination-item",
3760
+ ...props
3761
+ }
3762
+ );
3763
+ }
3764
+ function PaginationLink({
3765
+ className,
3766
+ isActive,
3767
+ disabled,
3768
+ size = "icon",
3769
+ render,
3770
+ ...props
3771
+ }) {
3772
+ const defaultProps = {
3773
+ "aria-current": isActive ? "page" : void 0,
3774
+ "aria-disabled": disabled || void 0,
3775
+ className: cn(
3776
+ buttonVariants({
3777
+ size,
3778
+ variant: isActive ? "outline" : "ghost"
3779
+ }),
3780
+ "transition-[opacity,box-shadow,filter] duration-200 ease-out",
3781
+ disabled && "pointer-events-none opacity-50",
3782
+ className
3783
+ ),
3784
+ "data-active": isActive,
3785
+ "data-disabled": disabled || void 0,
3786
+ "data-slot": "pagination-link",
3787
+ tabIndex: disabled ? -1 : void 0
3788
+ };
3789
+ return useRender({
3790
+ defaultTagName: "a",
3791
+ props: mergeProps(defaultProps, props),
3792
+ render
3793
+ });
3794
+ }
3795
+ function PaginationPrevious({
3796
+ className,
3797
+ ...props
3798
+ }) {
3799
+ return /* @__PURE__ */ jsxs(
3800
+ PaginationLink,
3801
+ {
3802
+ "aria-label": "Go to previous page",
3803
+ className: cn("max-sm:aspect-square max-sm:p-0", className),
3804
+ size: "default",
3805
+ ...props,
3806
+ children: [
3807
+ /* @__PURE__ */ jsx(ChevronLeftIcon, { className: "sm:-ms-1" }),
3808
+ /* @__PURE__ */ jsx("span", { className: "max-sm:hidden", children: "Previous" })
3809
+ ]
3810
+ }
3811
+ );
3812
+ }
3813
+ function PaginationNext({
3814
+ className,
3815
+ ...props
3816
+ }) {
3817
+ return /* @__PURE__ */ jsxs(
3818
+ PaginationLink,
3819
+ {
3820
+ "aria-label": "Go to next page",
3821
+ className: cn("max-sm:aspect-square max-sm:p-0", className),
3822
+ size: "default",
3823
+ ...props,
3824
+ children: [
3825
+ /* @__PURE__ */ jsx("span", { className: "max-sm:hidden", children: "Next" }),
3826
+ /* @__PURE__ */ jsx(ChevronRightIcon, { className: "sm:-me-1" })
3827
+ ]
3828
+ }
3829
+ );
3830
+ }
3831
+ function PaginationEllipsis({
3832
+ className,
3833
+ ...props
3834
+ }) {
3835
+ return /* @__PURE__ */ jsxs(
3836
+ "span",
3837
+ {
3838
+ "aria-hidden": true,
3839
+ className: cn("flex min-w-7 justify-center", className),
3840
+ "data-slot": "pagination-ellipsis",
3841
+ ...props,
3842
+ children: [
3843
+ /* @__PURE__ */ jsx(MoreHorizontalIcon, { className: "size-5 sm:size-4" }),
3844
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "More pages" })
3845
+ ]
3846
+ }
3847
+ );
3848
+ }
3849
+ function PaginationControls(props) {
3850
+ const { page, pageCount, renderPageLink } = props;
3851
+ if (pageCount <= 1) return null;
3852
+ return /* @__PURE__ */ jsx(Pagination, { children: /* @__PURE__ */ jsxs(PaginationContent, { children: [
3853
+ /* @__PURE__ */ jsx(PaginationItem, { children: /* @__PURE__ */ jsx(
3854
+ PaginationPrevious,
3855
+ {
3856
+ disabled: page <= 1,
3857
+ render: page > 1 ? renderPageLink(page - 1) : /* @__PURE__ */ jsx("span", {})
3858
+ }
3859
+ ) }),
3860
+ page > 1 && /* @__PURE__ */ jsx(PaginationItem, { children: /* @__PURE__ */ jsx(PaginationLink, { render: renderPageLink(1), children: "1" }) }),
3861
+ page > 2 && /* @__PURE__ */ jsx(PaginationItem, { children: /* @__PURE__ */ jsx(PaginationEllipsis, {}) }),
3862
+ /* @__PURE__ */ jsx(PaginationItem, { children: /* @__PURE__ */ jsx(PaginationLink, { render: renderPageLink(page), isActive: true, children: page }) }),
3863
+ pageCount > page + 1 && /* @__PURE__ */ jsx(PaginationItem, { children: /* @__PURE__ */ jsx(PaginationEllipsis, {}) }),
3864
+ pageCount > page && /* @__PURE__ */ jsx(PaginationItem, { children: /* @__PURE__ */ jsx(PaginationLink, { render: renderPageLink(pageCount), children: pageCount }) }),
3865
+ /* @__PURE__ */ jsx(PaginationItem, { children: /* @__PURE__ */ jsx(
3866
+ PaginationNext,
3867
+ {
3868
+ disabled: page >= pageCount,
3869
+ render: page < pageCount ? renderPageLink(page + 1) : /* @__PURE__ */ jsx("span", {})
3870
+ }
3871
+ ) })
3872
+ ] }) });
3873
+ }
3874
+ function Table({ className, ...props }) {
3875
+ return /* @__PURE__ */ jsx(
3876
+ "div",
3877
+ {
3878
+ className: "relative w-full overflow-x-auto",
3879
+ "data-slot": "table-container",
3880
+ children: /* @__PURE__ */ jsx(
3881
+ "table",
3882
+ {
3883
+ className: cn(
3884
+ "w-full caption-bottom in-data-[slot=frame]:border-separate in-data-[slot=frame]:border-spacing-0 text-sm",
3885
+ className
3886
+ ),
3887
+ "data-slot": "table",
3888
+ ...props
3889
+ }
3890
+ )
3891
+ }
3892
+ );
3893
+ }
3894
+ function TableHeader({ className, ...props }) {
3895
+ return /* @__PURE__ */ jsx(
3896
+ "thead",
3897
+ {
3898
+ className: cn(
3899
+ "[&_tr]:border-b in-data-[slot=frame]:**:[th]:h-9 in-data-[slot=frame]:*:[tr]:border-none in-data-[slot=frame]:*:[tr]:hover:bg-transparent",
3900
+ className
3901
+ ),
3902
+ "data-slot": "table-header",
3903
+ ...props
3904
+ }
3905
+ );
3906
+ }
3907
+ function TableBody({ className, ...props }) {
3908
+ return /* @__PURE__ */ jsx(
3909
+ "tbody",
3910
+ {
3911
+ className: cn(
3912
+ "relative in-data-[slot=frame]:rounded-xl in-data-[slot=frame]:shadow-xs/5 before:pointer-events-none before:absolute before:inset-px not-in-data-[slot=frame]:before:hidden before:rounded-[calc(var(--radius-xl)-1px)] before:shadow-[0_1px_--theme(--color-black/6%)] dark:before:shadow-[0_-1px_--theme(--color-white/8%)] [&_tr:last-child]:border-0 in-data-[slot=frame]:*:[tr]:border-0 in-data-[slot=frame]:*:[tr]:*:[td]:border-b in-data-[slot=frame]:*:[tr]:*:[td]:bg-background in-data-[slot=frame]:*:[tr]:*:[td]:bg-clip-padding in-data-[slot=frame]:*:[tr]:first:*:[td]:first:rounded-ss-xl in-data-[slot=frame]:*:[tr]:*:[td]:first:border-s in-data-[slot=frame]:*:[tr]:first:*:[td]:border-t in-data-[slot=frame]:*:[tr]:last:*:[td]:last:rounded-ee-xl in-data-[slot=frame]:*:[tr]:*:[td]:last:border-e in-data-[slot=frame]:*:[tr]:first:*:[td]:last:rounded-se-xl in-data-[slot=frame]:*:[tr]:last:*:[td]:first:rounded-es-xl in-data-[slot=frame]:*:[tr]:hover:*:[td]:bg-transparent in-data-[slot=frame]:*:[tr]:data-[state=selected]:*:[td]:bg-muted/72",
3913
+ className
3914
+ ),
3915
+ "data-slot": "table-body",
3916
+ ...props
3917
+ }
3918
+ );
3919
+ }
3920
+ function TableFooter({ className, ...props }) {
3921
+ return /* @__PURE__ */ jsx(
3922
+ "tfoot",
3923
+ {
3924
+ className: cn(
3925
+ "border-t in-data-[slot=frame]:border-none bg-muted/72 in-data-[slot=frame]:bg-transparent font-medium [&>tr]:last:border-b-0 in-data-[slot=frame]:*:[tr]:hover:bg-transparent",
3926
+ className
3927
+ ),
3928
+ "data-slot": "table-footer",
3929
+ ...props
3930
+ }
3931
+ );
3932
+ }
3933
+ function TableRow({ className, ...props }) {
3934
+ return /* @__PURE__ */ jsx(
3935
+ "tr",
3936
+ {
3937
+ className: cn(
3938
+ "border-b transition-colors hover:bg-muted/72 in-data-[slot=frame]:hover:bg-transparent data-[state=selected]:bg-muted/72 in-data-[slot=frame]:data-[state=selected]:bg-transparent",
3939
+ className
3940
+ ),
3941
+ "data-slot": "table-row",
3942
+ ...props
3943
+ }
3944
+ );
3945
+ }
3946
+ function TableHead({ className, ...props }) {
3947
+ return /* @__PURE__ */ jsx(
3948
+ "th",
3949
+ {
3950
+ className: cn(
3951
+ "h-10 whitespace-nowrap px-2.5 text-left align-middle font-medium text-muted-foreground leading-none has-[[role=checkbox]]:w-px has-[[role=checkbox]]:pe-0",
3952
+ className
3953
+ ),
3954
+ "data-slot": "table-head",
3955
+ ...props
3956
+ }
3957
+ );
3958
+ }
3959
+ function TableCell({ className, ...props }) {
3960
+ return /* @__PURE__ */ jsx(
3961
+ "td",
3962
+ {
3963
+ className: cn(
3964
+ "whitespace-nowrap p-2.5 align-middle leading-none in-data-[slot=frame]:first:p-[calc(--spacing(2.5)-1px)] in-data-[slot=frame]:last:p-[calc(--spacing(2.5)-1px)] has-[[role=checkbox]]:pe-0",
3965
+ className
3966
+ ),
3967
+ "data-slot": "table-cell",
3968
+ ...props
3969
+ }
3970
+ );
3971
+ }
3972
+ function TableCaption({
3973
+ className,
3974
+ ...props
3975
+ }) {
3976
+ return /* @__PURE__ */ jsx(
3977
+ "caption",
3978
+ {
3979
+ className: cn(
3980
+ "in-data-[slot=frame]:my-4 mt-4 text-muted-foreground text-sm",
3981
+ className
3982
+ ),
3983
+ "data-slot": "table-caption",
3984
+ ...props
3985
+ }
3986
+ );
3987
+ }
3988
+ function formatCell(value) {
3989
+ if (value === null || value === void 0 || value === "") return "\u2014";
3990
+ if (typeof value === "boolean") return value ? "Yes" : "No";
3991
+ if (React17.isValidElement(value)) return value;
3992
+ if (typeof value === "object") return JSON.stringify(value);
3993
+ return String(value);
3994
+ }
3995
+ function DataTablePaged({
3996
+ className,
3997
+ columns,
3998
+ emptyLabel = "No results",
3999
+ pageSize = 10,
4000
+ rows,
4001
+ searchable = true,
4002
+ searchPlaceholder = "Filter results\u2026",
4003
+ totalCount
4004
+ }) {
4005
+ const [page, setPage] = React17.useState(1);
4006
+ const [query, setQuery] = React17.useState("");
4007
+ const filteredRows = React17.useMemo(() => {
4008
+ const trimmed = query.trim().toLowerCase();
4009
+ if (!trimmed) return rows;
4010
+ return rows.filter(
4011
+ (row) => columns.some(
4012
+ (column) => String(row[column.key] ?? "").toLowerCase().includes(trimmed)
4013
+ )
4014
+ );
4015
+ }, [columns, query, rows]);
4016
+ const pageCount = Math.max(1, Math.ceil(filteredRows.length / pageSize));
4017
+ const safePage = Math.min(page, pageCount);
4018
+ const pageRows = filteredRows.slice((safePage - 1) * pageSize, safePage * pageSize);
4019
+ return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-2", className), "data-slot": "data-table-paged", children: [
4020
+ searchable && rows.length > pageSize && /* @__PURE__ */ jsxs("div", { className: "relative", children: [
4021
+ /* @__PURE__ */ jsx(SearchIcon, { className: "-translate-y-1/2 absolute top-1/2 left-2.5 size-4 text-muted-foreground" }),
4022
+ /* @__PURE__ */ jsx(
4023
+ Input,
3277
4024
  {
3278
- className: cn(
3279
- "absolute top-0 left-0 flex origin-top-left flex-col justify-between overflow-hidden rounded-[20px] p-5",
3280
- variant.card
3281
- ),
3282
- style: {
3283
- height: BASE_HEIGHT,
3284
- transform: `scale(${scale})`,
3285
- width: BASE_WIDTH
4025
+ className: "h-8 pl-8 text-sm",
4026
+ onChange: (event) => {
4027
+ setQuery(event.target.value);
4028
+ setPage(1);
3286
4029
  },
3287
- children: [
3288
- variant.strip ? /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: cn("absolute", variant.strip) }) : null,
3289
- /* @__PURE__ */ jsxs("div", { className: "relative flex items-start justify-between", children: [
3290
- /* @__PURE__ */ jsx(
3291
- "span",
3292
- {
3293
- className: "font-semibold text-base tracking-tight",
3294
- "data-slot": "credit-card-company",
3295
- children: company
3296
- }
3297
- ),
3298
- /* @__PURE__ */ jsx(NfcIcon, { "aria-hidden": true, className: "size-5 opacity-70" })
3299
- ] }),
3300
- /* @__PURE__ */ jsxs("div", { className: "relative flex flex-col gap-2.5", children: [
3301
- /* @__PURE__ */ jsx(
3302
- "span",
3303
- {
3304
- className: "font-medium text-[0.9375rem] tabular-nums tracking-[0.12em]",
3305
- "data-slot": "credit-card-number",
3306
- children: cardNumber
4030
+ placeholder: searchPlaceholder,
4031
+ value: query
4032
+ }
4033
+ )
4034
+ ] }),
4035
+ /* @__PURE__ */ jsx("div", { className: "overflow-x-auto rounded-lg border border-border", children: /* @__PURE__ */ jsxs(Table, { children: [
4036
+ /* @__PURE__ */ jsx(TableHeader, { children: /* @__PURE__ */ jsx(TableRow, { children: columns.map((column) => /* @__PURE__ */ jsx(TableHead, { className: "whitespace-nowrap", children: column.label ?? column.key.replaceAll("_", " ") }, column.key)) }) }),
4037
+ /* @__PURE__ */ jsx(TableBody, { children: pageRows.length === 0 ? /* @__PURE__ */ jsx(TableRow, { children: /* @__PURE__ */ jsx(
4038
+ TableCell,
4039
+ {
4040
+ className: "py-6 text-center text-muted-foreground",
4041
+ colSpan: columns.length,
4042
+ children: emptyLabel
4043
+ }
4044
+ ) }) : pageRows.map((row, rowIndex) => /* @__PURE__ */ jsx(TableRow, { children: columns.map((column) => /* @__PURE__ */ jsx(TableCell, { className: "max-w-56 truncate", children: formatCell(row[column.key]) }, column.key)) }, `${safePage}-${rowIndex}`)) })
4045
+ ] }) }),
4046
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center justify-between gap-2", children: [
4047
+ /* @__PURE__ */ jsxs("span", { className: "text-muted-foreground text-xs", children: [
4048
+ filteredRows.length,
4049
+ typeof totalCount === "number" && totalCount > rows.length ? ` of ${totalCount}` : "",
4050
+ " ",
4051
+ "rows"
4052
+ ] }),
4053
+ /* @__PURE__ */ jsx(
4054
+ PaginationControls,
4055
+ {
4056
+ page: safePage,
4057
+ pageCount,
4058
+ renderPageLink: (nextPage) => (
4059
+ // biome-ignore lint/a11y/useValidAnchor: client-side pagination
4060
+ /* @__PURE__ */ jsx(
4061
+ "a",
4062
+ {
4063
+ href: "#",
4064
+ onClick: (event) => {
4065
+ event.preventDefault();
4066
+ setPage(nextPage);
3307
4067
  }
3308
- ),
3309
- /* @__PURE__ */ jsxs("div", { className: "flex items-end justify-between", children: [
3310
- /* @__PURE__ */ jsxs("div", { className: "flex items-baseline gap-4", children: [
3311
- /* @__PURE__ */ jsx(
3312
- "span",
3313
- {
3314
- className: "font-medium text-[0.6875rem] uppercase tracking-[0.14em]",
3315
- "data-slot": "credit-card-holder",
3316
- children: cardHolder
3317
- }
3318
- ),
3319
- /* @__PURE__ */ jsx(
3320
- "span",
3321
- {
3322
- className: "font-medium text-[0.6875rem] tabular-nums tracking-[0.14em] opacity-80",
3323
- "data-slot": "credit-card-expiration",
3324
- children: cardExpiration
3325
- }
3326
- )
3327
- ] }),
3328
- /* @__PURE__ */ jsx(CreditCardLogo, { onDark: variant.onDark })
3329
- ] })
3330
- ] })
3331
- ]
4068
+ }
4069
+ )
4070
+ )
3332
4071
  }
3333
4072
  )
3334
- }
3335
- );
4073
+ ] })
4074
+ ] });
3336
4075
  }
3337
4076
  function Drawer(props) {
3338
4077
  return /* @__PURE__ */ jsx(Drawer$1.Root, { "data-slot": "drawer", ...props });
@@ -3940,6 +4679,33 @@ function EmptyContent({ className, ...props }) {
3940
4679
  }
3941
4680
  );
3942
4681
  }
4682
+ var fabVariants = cva(
4683
+ "fixed z-50 rounded-full shadow-lg transition-transform duration-150 hover:scale-105 active:scale-95 before:rounded-full",
4684
+ {
4685
+ defaultVariants: {
4686
+ position: "bottom-right"
4687
+ },
4688
+ variants: {
4689
+ position: {
4690
+ "bottom-right": "right-4 bottom-4 sm:right-6 sm:bottom-6",
4691
+ "bottom-left": "bottom-4 left-4 sm:bottom-6 sm:left-6",
4692
+ "top-right": "top-4 right-4 sm:top-6 sm:right-6",
4693
+ "top-left": "top-4 left-4 sm:top-6 sm:left-6"
4694
+ }
4695
+ }
4696
+ }
4697
+ );
4698
+ function Fab({ className, position, size = "icon-xl", ...props }) {
4699
+ return /* @__PURE__ */ jsx(
4700
+ Button,
4701
+ {
4702
+ className: cn(fabVariants({ className, position })),
4703
+ "data-slot": "fab",
4704
+ size,
4705
+ ...props
4706
+ }
4707
+ );
4708
+ }
3943
4709
  var featuredIconVariants = cva(
3944
4710
  "relative inline-flex shrink-0 select-none items-center justify-center align-middle [&_svg]:pointer-events-none [&_svg]:shrink-0",
3945
4711
  {
@@ -4576,7 +5342,7 @@ function InputOTPSlot({
4576
5342
  size,
4577
5343
  ...props
4578
5344
  }) {
4579
- const inputOTPContext = React15.useContext(OTPInputContext);
5345
+ const inputOTPContext = React17.useContext(OTPInputContext);
4580
5346
  const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {};
4581
5347
  return /* @__PURE__ */ jsxs(
4582
5348
  "div",
@@ -4785,6 +5551,81 @@ function KbdGroup({ className, ...props }) {
4785
5551
  }
4786
5552
  );
4787
5553
  }
5554
+ function Markdown({ children, className }) {
5555
+ return /* @__PURE__ */ jsx(
5556
+ "div",
5557
+ {
5558
+ className: cn(
5559
+ "space-y-2 break-words text-foreground text-sm leading-relaxed",
5560
+ className
5561
+ ),
5562
+ "data-slot": "markdown",
5563
+ children: /* @__PURE__ */ jsx(
5564
+ ReactMarkdown,
5565
+ {
5566
+ components: {
5567
+ a: ({ node: _node, ...props }) => /* @__PURE__ */ jsx(
5568
+ "a",
5569
+ {
5570
+ className: "font-medium text-primary underline underline-offset-2 hover:opacity-80",
5571
+ rel: "noreferrer noopener",
5572
+ target: "_blank",
5573
+ ...props
5574
+ }
5575
+ ),
5576
+ blockquote: ({ node: _node, ...props }) => /* @__PURE__ */ jsx(
5577
+ "blockquote",
5578
+ {
5579
+ className: "border-border border-l-2 pl-3 text-muted-foreground italic",
5580
+ ...props
5581
+ }
5582
+ ),
5583
+ code: ({ node: _node, className: codeClassName, ...props }) => {
5584
+ const isBlock = /language-/.test(codeClassName ?? "");
5585
+ return /* @__PURE__ */ jsx(
5586
+ "code",
5587
+ {
5588
+ className: cn(
5589
+ "rounded bg-muted font-mono text-[0.85em]",
5590
+ isBlock ? "block overflow-x-auto p-3" : "px-1 py-0.5",
5591
+ codeClassName
5592
+ ),
5593
+ ...props
5594
+ }
5595
+ );
5596
+ },
5597
+ h1: ({ node: _node, ...props }) => /* @__PURE__ */ jsx("h1", { className: "font-semibold text-base", ...props }),
5598
+ h2: ({ node: _node, ...props }) => /* @__PURE__ */ jsx("h2", { className: "font-semibold text-base", ...props }),
5599
+ h3: ({ node: _node, ...props }) => /* @__PURE__ */ jsx("h3", { className: "font-semibold text-sm", ...props }),
5600
+ hr: ({ node: _node, ...props }) => /* @__PURE__ */ jsx("hr", { className: "border-border", ...props }),
5601
+ li: ({ node: _node, ...props }) => /* @__PURE__ */ jsx("li", { className: "my-0.5", ...props }),
5602
+ ol: ({ node: _node, ...props }) => /* @__PURE__ */ jsx("ol", { className: "list-decimal space-y-1 pl-5", ...props }),
5603
+ pre: ({ node: _node, ...props }) => /* @__PURE__ */ jsx(
5604
+ "pre",
5605
+ {
5606
+ className: "overflow-x-auto rounded-lg bg-muted p-0 text-[0.85em]",
5607
+ ...props
5608
+ }
5609
+ ),
5610
+ table: ({ node: _node, ...props }) => /* @__PURE__ */ jsx("div", { className: "overflow-x-auto rounded-lg border border-border", children: /* @__PURE__ */ jsx("table", { className: "w-full text-left text-sm", ...props }) }),
5611
+ td: ({ node: _node, ...props }) => /* @__PURE__ */ jsx("td", { className: "border-border border-t px-3 py-1.5 align-top", ...props }),
5612
+ th: ({ node: _node, ...props }) => /* @__PURE__ */ jsx(
5613
+ "th",
5614
+ {
5615
+ className: "bg-muted px-3 py-1.5 font-medium text-muted-foreground",
5616
+ ...props
5617
+ }
5618
+ ),
5619
+ ul: ({ node: _node, ...props }) => /* @__PURE__ */ jsx("ul", { className: "list-disc space-y-1 pl-5", ...props })
5620
+ },
5621
+ remarkPlugins: [remarkGfm],
5622
+ skipHtml: true,
5623
+ children
5624
+ }
5625
+ )
5626
+ }
5627
+ );
5628
+ }
4788
5629
  var MenuCreateHandle = Menu$1.createHandle;
4789
5630
  var Menu = Menu$1.Root;
4790
5631
  var MenuPortal = Menu$1.Portal;
@@ -5152,10 +5993,10 @@ function MultiSelect({
5152
5993
  popupClassName,
5153
5994
  sideOffset = 4
5154
5995
  }) {
5155
- const [uncontrolledValue, setUncontrolledValue] = React15.useState(
5996
+ const [uncontrolledValue, setUncontrolledValue] = React17.useState(
5156
5997
  defaultValue ?? []
5157
5998
  );
5158
- const [search, setSearch] = React15.useState("");
5999
+ const [search, setSearch] = React17.useState("");
5159
6000
  const isControlled = valueProp !== void 0;
5160
6001
  const value = isControlled ? valueProp : uncontrolledValue;
5161
6002
  const setValue = (next) => {
@@ -5299,8 +6140,8 @@ function MultiSelectSearch({
5299
6140
  onChange,
5300
6141
  placeholder
5301
6142
  }) {
5302
- const inputRef = React15.useRef(null);
5303
- React15.useEffect(() => {
6143
+ const inputRef = React17.useRef(null);
6144
+ React17.useEffect(() => {
5304
6145
  const frame = requestAnimationFrame(() => inputRef.current?.focus());
5305
6146
  return () => cancelAnimationFrame(frame);
5306
6147
  }, []);
@@ -5398,251 +6239,104 @@ function NavigationMenu({
5398
6239
  className: "relative h-full w-full overflow-hidden",
5399
6240
  "data-slot": "navigation-menu-viewport"
5400
6241
  }
5401
- )
5402
- }
5403
- )
5404
- }
5405
- ) })
5406
- ]
5407
- }
5408
- );
5409
- }
5410
- function NavigationMenuList({
5411
- className,
5412
- ...props
5413
- }) {
5414
- return /* @__PURE__ */ jsx(
5415
- NavigationMenu$1.List,
5416
- {
5417
- className: cn(
5418
- "group flex flex-1 list-none items-center justify-center gap-1",
5419
- className
5420
- ),
5421
- "data-slot": "navigation-menu-list",
5422
- ...props
5423
- }
5424
- );
5425
- }
5426
- function NavigationMenuItem({
5427
- className,
5428
- ...props
5429
- }) {
5430
- return /* @__PURE__ */ jsx(
5431
- NavigationMenu$1.Item,
5432
- {
5433
- className: cn("relative", className),
5434
- "data-slot": "navigation-menu-item",
5435
- ...props
5436
- }
5437
- );
5438
- }
5439
- var navigationMenuTriggerStyle = cva(
5440
- "group inline-flex h-9 w-max cursor-pointer select-none items-center justify-center gap-1 rounded-lg bg-transparent px-3 py-2 font-medium text-base outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background data-popup-open:bg-accent/50 data-popup-open:text-accent-foreground disabled:pointer-events-none disabled:opacity-64 sm:h-8 sm:text-sm"
5441
- );
5442
- function NavigationMenuTrigger({
5443
- className,
5444
- children,
5445
- ...props
5446
- }) {
5447
- return /* @__PURE__ */ jsxs(
5448
- NavigationMenu$1.Trigger,
5449
- {
5450
- className: cn(navigationMenuTriggerStyle(), className),
5451
- "data-slot": "navigation-menu-trigger",
5452
- ...props,
5453
- children: [
5454
- children,
5455
- /* @__PURE__ */ jsx(
5456
- NavigationMenu$1.Icon,
5457
- {
5458
- className: "relative top-px transition-transform duration-300 ease-in-out group-data-popup-open:rotate-180",
5459
- "data-slot": "navigation-menu-icon",
5460
- children: /* @__PURE__ */ jsx(ChevronDownIcon, { className: "size-3.5 opacity-80" })
5461
- }
5462
- )
5463
- ]
5464
- }
5465
- );
5466
- }
5467
- function NavigationMenuContent({
5468
- className,
5469
- ...props
5470
- }) {
5471
- return /* @__PURE__ */ jsx(
5472
- NavigationMenu$1.Content,
5473
- {
5474
- className: cn(
5475
- "h-full w-max p-2 transition-[opacity,translate,transform] duration-300 ease-[cubic-bezier(0.22,1,0.36,1)] data-ending-style:opacity-0 data-starting-style:opacity-0 data-[activation-direction=left]:data-ending-style:translate-x-[50%] data-[activation-direction=left]:data-starting-style:translate-x-[-50%] data-[activation-direction=right]:data-ending-style:translate-x-[-50%] data-[activation-direction=right]:data-starting-style:translate-x-[50%]",
5476
- className
5477
- ),
5478
- "data-slot": "navigation-menu-content",
5479
- ...props
5480
- }
5481
- );
5482
- }
5483
- function NavigationMenuLink({
5484
- className,
5485
- ...props
5486
- }) {
5487
- return /* @__PURE__ */ jsx(
5488
- NavigationMenu$1.Link,
5489
- {
5490
- className: cn(
5491
- "flex cursor-pointer flex-col gap-1 rounded-md p-2 text-base no-underline outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background sm:text-sm [&_svg:not([class*='size-'])]:size-4",
5492
- className
5493
- ),
5494
- "data-slot": "navigation-menu-link",
5495
- ...props
5496
- }
5497
- );
5498
- }
5499
- function Pagination({ className, ...props }) {
5500
- return /* @__PURE__ */ jsx(
5501
- "nav",
5502
- {
5503
- "aria-label": "pagination",
5504
- className: cn("mx-auto flex w-full justify-center", className),
5505
- "data-slot": "pagination",
5506
- ...props
5507
- }
5508
- );
5509
- }
5510
- function PaginationContent({
5511
- className,
5512
- ...props
5513
- }) {
5514
- return /* @__PURE__ */ jsx(
5515
- "ul",
5516
- {
5517
- className: cn("flex flex-row items-center gap-1", className),
5518
- "data-slot": "pagination-content",
5519
- ...props
6242
+ )
6243
+ }
6244
+ )
6245
+ }
6246
+ ) })
6247
+ ]
5520
6248
  }
5521
6249
  );
5522
6250
  }
5523
- function PaginationItem({ className, ...props }) {
6251
+ function NavigationMenuList({
6252
+ className,
6253
+ ...props
6254
+ }) {
5524
6255
  return /* @__PURE__ */ jsx(
5525
- "li",
6256
+ NavigationMenu$1.List,
5526
6257
  {
5527
6258
  className: cn(
5528
- "animate-in fade-in-0 zoom-in-95 duration-200 ease-out",
6259
+ "group flex flex-1 list-none items-center justify-center gap-1",
5529
6260
  className
5530
6261
  ),
5531
- "data-slot": "pagination-item",
6262
+ "data-slot": "navigation-menu-list",
5532
6263
  ...props
5533
6264
  }
5534
6265
  );
5535
6266
  }
5536
- function PaginationLink({
6267
+ function NavigationMenuItem({
5537
6268
  className,
5538
- isActive,
5539
- disabled,
5540
- size = "icon",
5541
- render,
5542
6269
  ...props
5543
6270
  }) {
5544
- const defaultProps = {
5545
- "aria-current": isActive ? "page" : void 0,
5546
- "aria-disabled": disabled || void 0,
5547
- className: cn(
5548
- buttonVariants({
5549
- size,
5550
- variant: isActive ? "outline" : "ghost"
5551
- }),
5552
- "transition-[opacity,box-shadow,filter] duration-200 ease-out",
5553
- disabled && "pointer-events-none opacity-50",
5554
- className
5555
- ),
5556
- "data-active": isActive,
5557
- "data-disabled": disabled || void 0,
5558
- "data-slot": "pagination-link",
5559
- tabIndex: disabled ? -1 : void 0
5560
- };
5561
- return useRender({
5562
- defaultTagName: "a",
5563
- props: mergeProps(defaultProps, props),
5564
- render
5565
- });
6271
+ return /* @__PURE__ */ jsx(
6272
+ NavigationMenu$1.Item,
6273
+ {
6274
+ className: cn("relative", className),
6275
+ "data-slot": "navigation-menu-item",
6276
+ ...props
6277
+ }
6278
+ );
5566
6279
  }
5567
- function PaginationPrevious({
6280
+ var navigationMenuTriggerStyle = cva(
6281
+ "group inline-flex h-9 w-max cursor-pointer select-none items-center justify-center gap-1 rounded-lg bg-transparent px-3 py-2 font-medium text-base outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background data-popup-open:bg-accent/50 data-popup-open:text-accent-foreground disabled:pointer-events-none disabled:opacity-64 sm:h-8 sm:text-sm"
6282
+ );
6283
+ function NavigationMenuTrigger({
5568
6284
  className,
6285
+ children,
5569
6286
  ...props
5570
6287
  }) {
5571
6288
  return /* @__PURE__ */ jsxs(
5572
- PaginationLink,
6289
+ NavigationMenu$1.Trigger,
5573
6290
  {
5574
- "aria-label": "Go to previous page",
5575
- className: cn("max-sm:aspect-square max-sm:p-0", className),
5576
- size: "default",
6291
+ className: cn(navigationMenuTriggerStyle(), className),
6292
+ "data-slot": "navigation-menu-trigger",
5577
6293
  ...props,
5578
6294
  children: [
5579
- /* @__PURE__ */ jsx(ChevronLeftIcon, { className: "sm:-ms-1" }),
5580
- /* @__PURE__ */ jsx("span", { className: "max-sm:hidden", children: "Previous" })
6295
+ children,
6296
+ /* @__PURE__ */ jsx(
6297
+ NavigationMenu$1.Icon,
6298
+ {
6299
+ className: "relative top-px transition-transform duration-300 ease-in-out group-data-popup-open:rotate-180",
6300
+ "data-slot": "navigation-menu-icon",
6301
+ children: /* @__PURE__ */ jsx(ChevronDownIcon, { className: "size-3.5 opacity-80" })
6302
+ }
6303
+ )
5581
6304
  ]
5582
6305
  }
5583
6306
  );
5584
6307
  }
5585
- function PaginationNext({
6308
+ function NavigationMenuContent({
5586
6309
  className,
5587
6310
  ...props
5588
6311
  }) {
5589
- return /* @__PURE__ */ jsxs(
5590
- PaginationLink,
6312
+ return /* @__PURE__ */ jsx(
6313
+ NavigationMenu$1.Content,
5591
6314
  {
5592
- "aria-label": "Go to next page",
5593
- className: cn("max-sm:aspect-square max-sm:p-0", className),
5594
- size: "default",
5595
- ...props,
5596
- children: [
5597
- /* @__PURE__ */ jsx("span", { className: "max-sm:hidden", children: "Next" }),
5598
- /* @__PURE__ */ jsx(ChevronRightIcon, { className: "sm:-me-1" })
5599
- ]
6315
+ className: cn(
6316
+ "h-full w-max p-2 transition-[opacity,translate,transform] duration-300 ease-[cubic-bezier(0.22,1,0.36,1)] data-ending-style:opacity-0 data-starting-style:opacity-0 data-[activation-direction=left]:data-ending-style:translate-x-[50%] data-[activation-direction=left]:data-starting-style:translate-x-[-50%] data-[activation-direction=right]:data-ending-style:translate-x-[-50%] data-[activation-direction=right]:data-starting-style:translate-x-[50%]",
6317
+ className
6318
+ ),
6319
+ "data-slot": "navigation-menu-content",
6320
+ ...props
5600
6321
  }
5601
6322
  );
5602
6323
  }
5603
- function PaginationEllipsis({
6324
+ function NavigationMenuLink({
5604
6325
  className,
5605
6326
  ...props
5606
6327
  }) {
5607
- return /* @__PURE__ */ jsxs(
5608
- "span",
6328
+ return /* @__PURE__ */ jsx(
6329
+ NavigationMenu$1.Link,
5609
6330
  {
5610
- "aria-hidden": true,
5611
- className: cn("flex min-w-7 justify-center", className),
5612
- "data-slot": "pagination-ellipsis",
5613
- ...props,
5614
- children: [
5615
- /* @__PURE__ */ jsx(MoreHorizontalIcon, { className: "size-5 sm:size-4" }),
5616
- /* @__PURE__ */ jsx("span", { className: "sr-only", children: "More pages" })
5617
- ]
6331
+ className: cn(
6332
+ "flex cursor-pointer flex-col gap-1 rounded-md p-2 text-base no-underline outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background sm:text-sm [&_svg:not([class*='size-'])]:size-4",
6333
+ className
6334
+ ),
6335
+ "data-slot": "navigation-menu-link",
6336
+ ...props
5618
6337
  }
5619
6338
  );
5620
6339
  }
5621
- function PaginationControls(props) {
5622
- const { page, pageCount, renderPageLink } = props;
5623
- if (pageCount <= 1) return null;
5624
- return /* @__PURE__ */ jsx(Pagination, { children: /* @__PURE__ */ jsxs(PaginationContent, { children: [
5625
- /* @__PURE__ */ jsx(PaginationItem, { children: /* @__PURE__ */ jsx(
5626
- PaginationPrevious,
5627
- {
5628
- disabled: page <= 1,
5629
- render: page > 1 ? renderPageLink(page - 1) : /* @__PURE__ */ jsx("span", {})
5630
- }
5631
- ) }),
5632
- page > 1 && /* @__PURE__ */ jsx(PaginationItem, { children: /* @__PURE__ */ jsx(PaginationLink, { render: renderPageLink(1), children: "1" }) }),
5633
- page > 2 && /* @__PURE__ */ jsx(PaginationItem, { children: /* @__PURE__ */ jsx(PaginationEllipsis, {}) }),
5634
- /* @__PURE__ */ jsx(PaginationItem, { children: /* @__PURE__ */ jsx(PaginationLink, { render: renderPageLink(page), isActive: true, children: page }) }),
5635
- pageCount > page + 1 && /* @__PURE__ */ jsx(PaginationItem, { children: /* @__PURE__ */ jsx(PaginationEllipsis, {}) }),
5636
- pageCount > page && /* @__PURE__ */ jsx(PaginationItem, { children: /* @__PURE__ */ jsx(PaginationLink, { render: renderPageLink(pageCount), children: pageCount }) }),
5637
- /* @__PURE__ */ jsx(PaginationItem, { children: /* @__PURE__ */ jsx(
5638
- PaginationNext,
5639
- {
5640
- disabled: page >= pageCount,
5641
- render: page < pageCount ? renderPageLink(page + 1) : /* @__PURE__ */ jsx("span", {})
5642
- }
5643
- ) })
5644
- ] }) });
5645
- }
5646
6340
  var PreviewCard = PreviewCard$1.Root;
5647
6341
  function PreviewCardTrigger({ ...props }) {
5648
6342
  return /* @__PURE__ */ jsx(PreviewCard$1.Trigger, { "data-slot": "preview-card-trigger", ...props });
@@ -5938,8 +6632,8 @@ var qrCodeVariants = cva(
5938
6632
  }
5939
6633
  );
5940
6634
  function QRCode({ className, size, value, options, ...props }) {
5941
- const containerRef = React15.useRef(null);
5942
- React15.useEffect(() => {
6635
+ const containerRef = React17.useRef(null);
6636
+ React17.useEffect(() => {
5943
6637
  const container = containerRef.current;
5944
6638
  if (!container) return;
5945
6639
  let disposed = false;
@@ -6467,8 +7161,8 @@ function SocialButton({
6467
7161
  render
6468
7162
  });
6469
7163
  }
6470
- var StepperContext = React15.createContext({ orientation: "horizontal", value: 1 });
6471
- var StepperItemContext = React15.createContext({ state: "inactive", step: 1 });
7164
+ var StepperContext = React17.createContext({ orientation: "horizontal", value: 1 });
7165
+ var StepperItemContext = React17.createContext({ state: "inactive", step: 1 });
6472
7166
  function Stepper({
6473
7167
  value = 1,
6474
7168
  orientation = "horizontal",
@@ -6495,7 +7189,7 @@ function StepperItem({
6495
7189
  className,
6496
7190
  ...props
6497
7191
  }) {
6498
- const { value } = React15.useContext(StepperContext);
7192
+ const { value } = React17.useContext(StepperContext);
6499
7193
  const state = completed || value > step ? "completed" : value === step ? "active" : "inactive";
6500
7194
  return /* @__PURE__ */ jsx(StepperItemContext.Provider, { value: { state, step }, children: /* @__PURE__ */ jsx(
6501
7195
  "div",
@@ -6534,7 +7228,7 @@ function StepperIndicator({
6534
7228
  children,
6535
7229
  ...props
6536
7230
  }) {
6537
- const { step } = React15.useContext(StepperItemContext);
7231
+ const { step } = React17.useContext(StepperItemContext);
6538
7232
  return /* @__PURE__ */ jsxs(
6539
7233
  "span",
6540
7234
  {
@@ -6862,7 +7556,7 @@ function TooltipPopup({
6862
7556
  }
6863
7557
  ) });
6864
7558
  }
6865
- var useIsomorphicLayoutEffect = typeof window !== "undefined" ? React15.useLayoutEffect : React15.useEffect;
7559
+ var useIsomorphicLayoutEffect = typeof window !== "undefined" ? React17.useLayoutEffect : React17.useEffect;
6866
7560
  var SIDEBAR_COOKIE_NAME = "sidebar_state";
6867
7561
  var SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
6868
7562
  var SIDEBAR_WIDTH_LG = "18.5rem";
@@ -6870,9 +7564,9 @@ var SIDEBAR_WIDTH_MD = "14.5rem";
6870
7564
  var SIDEBAR_WIDTH_MOBILE = "18rem";
6871
7565
  var SIDEBAR_WIDTH_ICON = "3rem";
6872
7566
  var SIDEBAR_KEYBOARD_SHORTCUT = "b";
6873
- var SidebarContext = React15.createContext(null);
7567
+ var SidebarContext = React17.createContext(null);
6874
7568
  function useSidebar() {
6875
- const context = React15.useContext(SidebarContext);
7569
+ const context = React17.useContext(SidebarContext);
6876
7570
  if (!context) {
6877
7571
  throw new Error("useSidebar must be used within a SidebarProvider.");
6878
7572
  }
@@ -6887,7 +7581,7 @@ function SidebarProvider({
6887
7581
  children,
6888
7582
  ...props
6889
7583
  }) {
6890
- const [isMobile, setIsMobile] = React15.useState(false);
7584
+ const [isMobile, setIsMobile] = React17.useState(false);
6891
7585
  useIsomorphicLayoutEffect(() => {
6892
7586
  const mql = window.matchMedia("(max-width: 47.999rem)");
6893
7587
  const onChange = () => setIsMobile(mql.matches);
@@ -6895,10 +7589,10 @@ function SidebarProvider({
6895
7589
  mql.addEventListener("change", onChange);
6896
7590
  return () => mql.removeEventListener("change", onChange);
6897
7591
  }, []);
6898
- const [openMobile, setOpenMobile] = React15.useState(false);
6899
- const [_open, _setOpen] = React15.useState(defaultOpen);
7592
+ const [openMobile, setOpenMobile] = React17.useState(false);
7593
+ const [_open, _setOpen] = React17.useState(defaultOpen);
6900
7594
  const open = openProp ?? _open;
6901
- const setOpen = React15.useCallback(
7595
+ const setOpen = React17.useCallback(
6902
7596
  (value) => {
6903
7597
  const openState = typeof value === "function" ? value(open) : value;
6904
7598
  if (setOpenProp) {
@@ -6913,10 +7607,10 @@ function SidebarProvider({
6913
7607
  },
6914
7608
  [setOpenProp, open]
6915
7609
  );
6916
- const toggleSidebar = React15.useCallback(() => {
7610
+ const toggleSidebar = React17.useCallback(() => {
6917
7611
  return isMobile ? setOpenMobile((open2) => !open2) : setOpen((open2) => !open2);
6918
7612
  }, [isMobile, setOpen]);
6919
- React15.useEffect(() => {
7613
+ React17.useEffect(() => {
6920
7614
  const handleKeyDown = (event) => {
6921
7615
  if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {
6922
7616
  event.preventDefault();
@@ -6927,7 +7621,7 @@ function SidebarProvider({
6927
7621
  return () => window.removeEventListener("keydown", handleKeyDown);
6928
7622
  }, [toggleSidebar]);
6929
7623
  const state = open ? "expanded" : "collapsed";
6930
- const contextValue = React15.useMemo(
7624
+ const contextValue = React17.useMemo(
6931
7625
  () => ({
6932
7626
  isMobile,
6933
7627
  open,
@@ -7394,7 +8088,7 @@ function SidebarMenuSkeleton({
7394
8088
  showIcon = false,
7395
8089
  ...props
7396
8090
  }) {
7397
- const width = React15.useMemo(() => {
8091
+ const width = React17.useMemo(() => {
7398
8092
  return `${Math.floor(Math.random() * 40) + 50}%`;
7399
8093
  }, []);
7400
8094
  return /* @__PURE__ */ jsxs(
@@ -7493,7 +8187,7 @@ function Slider({
7493
8187
  formatLabel = (labelValue) => String(labelValue),
7494
8188
  ...props
7495
8189
  }) {
7496
- const _values = React15.useMemo(() => {
8190
+ const _values = React17.useMemo(() => {
7497
8191
  if (value !== void 0) {
7498
8192
  return Array.isArray(value) ? value : [value];
7499
8193
  }
@@ -7772,120 +8466,6 @@ function Switch({ className, size = "md", slim = false, ...props }) {
7772
8466
  }
7773
8467
  );
7774
8468
  }
7775
- function Table({ className, ...props }) {
7776
- return /* @__PURE__ */ jsx(
7777
- "div",
7778
- {
7779
- className: "relative w-full overflow-x-auto",
7780
- "data-slot": "table-container",
7781
- children: /* @__PURE__ */ jsx(
7782
- "table",
7783
- {
7784
- className: cn(
7785
- "w-full caption-bottom in-data-[slot=frame]:border-separate in-data-[slot=frame]:border-spacing-0 text-sm",
7786
- className
7787
- ),
7788
- "data-slot": "table",
7789
- ...props
7790
- }
7791
- )
7792
- }
7793
- );
7794
- }
7795
- function TableHeader({ className, ...props }) {
7796
- return /* @__PURE__ */ jsx(
7797
- "thead",
7798
- {
7799
- className: cn(
7800
- "[&_tr]:border-b in-data-[slot=frame]:**:[th]:h-9 in-data-[slot=frame]:*:[tr]:border-none in-data-[slot=frame]:*:[tr]:hover:bg-transparent",
7801
- className
7802
- ),
7803
- "data-slot": "table-header",
7804
- ...props
7805
- }
7806
- );
7807
- }
7808
- function TableBody({ className, ...props }) {
7809
- return /* @__PURE__ */ jsx(
7810
- "tbody",
7811
- {
7812
- className: cn(
7813
- "relative in-data-[slot=frame]:rounded-xl in-data-[slot=frame]:shadow-xs/5 before:pointer-events-none before:absolute before:inset-px not-in-data-[slot=frame]:before:hidden before:rounded-[calc(var(--radius-xl)-1px)] before:shadow-[0_1px_--theme(--color-black/6%)] dark:before:shadow-[0_-1px_--theme(--color-white/8%)] [&_tr:last-child]:border-0 in-data-[slot=frame]:*:[tr]:border-0 in-data-[slot=frame]:*:[tr]:*:[td]:border-b in-data-[slot=frame]:*:[tr]:*:[td]:bg-background in-data-[slot=frame]:*:[tr]:*:[td]:bg-clip-padding in-data-[slot=frame]:*:[tr]:first:*:[td]:first:rounded-ss-xl in-data-[slot=frame]:*:[tr]:*:[td]:first:border-s in-data-[slot=frame]:*:[tr]:first:*:[td]:border-t in-data-[slot=frame]:*:[tr]:last:*:[td]:last:rounded-ee-xl in-data-[slot=frame]:*:[tr]:*:[td]:last:border-e in-data-[slot=frame]:*:[tr]:first:*:[td]:last:rounded-se-xl in-data-[slot=frame]:*:[tr]:last:*:[td]:first:rounded-es-xl in-data-[slot=frame]:*:[tr]:hover:*:[td]:bg-transparent in-data-[slot=frame]:*:[tr]:data-[state=selected]:*:[td]:bg-muted/72",
7814
- className
7815
- ),
7816
- "data-slot": "table-body",
7817
- ...props
7818
- }
7819
- );
7820
- }
7821
- function TableFooter({ className, ...props }) {
7822
- return /* @__PURE__ */ jsx(
7823
- "tfoot",
7824
- {
7825
- className: cn(
7826
- "border-t in-data-[slot=frame]:border-none bg-muted/72 in-data-[slot=frame]:bg-transparent font-medium [&>tr]:last:border-b-0 in-data-[slot=frame]:*:[tr]:hover:bg-transparent",
7827
- className
7828
- ),
7829
- "data-slot": "table-footer",
7830
- ...props
7831
- }
7832
- );
7833
- }
7834
- function TableRow({ className, ...props }) {
7835
- return /* @__PURE__ */ jsx(
7836
- "tr",
7837
- {
7838
- className: cn(
7839
- "border-b transition-colors hover:bg-muted/72 in-data-[slot=frame]:hover:bg-transparent data-[state=selected]:bg-muted/72 in-data-[slot=frame]:data-[state=selected]:bg-transparent",
7840
- className
7841
- ),
7842
- "data-slot": "table-row",
7843
- ...props
7844
- }
7845
- );
7846
- }
7847
- function TableHead({ className, ...props }) {
7848
- return /* @__PURE__ */ jsx(
7849
- "th",
7850
- {
7851
- className: cn(
7852
- "h-10 whitespace-nowrap px-2.5 text-left align-middle font-medium text-muted-foreground leading-none has-[[role=checkbox]]:w-px has-[[role=checkbox]]:pe-0",
7853
- className
7854
- ),
7855
- "data-slot": "table-head",
7856
- ...props
7857
- }
7858
- );
7859
- }
7860
- function TableCell({ className, ...props }) {
7861
- return /* @__PURE__ */ jsx(
7862
- "td",
7863
- {
7864
- className: cn(
7865
- "whitespace-nowrap p-2.5 align-middle leading-none in-data-[slot=frame]:first:p-[calc(--spacing(2.5)-1px)] in-data-[slot=frame]:last:p-[calc(--spacing(2.5)-1px)] has-[[role=checkbox]]:pe-0",
7866
- className
7867
- ),
7868
- "data-slot": "table-cell",
7869
- ...props
7870
- }
7871
- );
7872
- }
7873
- function TableCaption({
7874
- className,
7875
- ...props
7876
- }) {
7877
- return /* @__PURE__ */ jsx(
7878
- "caption",
7879
- {
7880
- className: cn(
7881
- "in-data-[slot=frame]:my-4 mt-4 text-muted-foreground text-sm",
7882
- className
7883
- ),
7884
- "data-slot": "table-caption",
7885
- ...props
7886
- }
7887
- );
7888
- }
7889
8469
  function Tabs({ className, ...props }) {
7890
8470
  return /* @__PURE__ */ jsx(
7891
8471
  Tabs$1.Root,
@@ -8780,7 +9360,7 @@ function Toggle({
8780
9360
  }
8781
9361
  );
8782
9362
  }
8783
- var ToggleGroupContext = React15.createContext({
9363
+ var ToggleGroupContext = React17.createContext({
8784
9364
  size: "default",
8785
9365
  variant: "default"
8786
9366
  });
@@ -8817,7 +9397,7 @@ function Toggle2({
8817
9397
  size,
8818
9398
  ...props
8819
9399
  }) {
8820
- const context = React15.useContext(ToggleGroupContext);
9400
+ const context = React17.useContext(ToggleGroupContext);
8821
9401
  const resolvedVariant = context.variant || variant;
8822
9402
  const resolvedSize = context.size || size;
8823
9403
  return /* @__PURE__ */ jsx(
@@ -9093,30 +9673,30 @@ function VideoPlayer({
9093
9673
  loop = false,
9094
9674
  ...props
9095
9675
  }) {
9096
- const containerRef = React15.useRef(null);
9097
- const videoRef = React15.useRef(null);
9098
- const hideTimerRef = React15.useRef(null);
9099
- const [playing, setPlaying] = React15.useState(false);
9100
- const [currentTime, setCurrentTime] = React15.useState(0);
9101
- const [duration, setDuration] = React15.useState(0);
9102
- const [muted, setMuted] = React15.useState(false);
9103
- const [fullscreen, setFullscreen] = React15.useState(false);
9104
- const [controlsVisible, setControlsVisible] = React15.useState(true);
9676
+ const containerRef = React17.useRef(null);
9677
+ const videoRef = React17.useRef(null);
9678
+ const hideTimerRef = React17.useRef(null);
9679
+ const [playing, setPlaying] = React17.useState(false);
9680
+ const [currentTime, setCurrentTime] = React17.useState(0);
9681
+ const [duration, setDuration] = React17.useState(0);
9682
+ const [muted, setMuted] = React17.useState(false);
9683
+ const [fullscreen, setFullscreen] = React17.useState(false);
9684
+ const [controlsVisible, setControlsVisible] = React17.useState(true);
9105
9685
  const clearHideTimer = () => {
9106
9686
  if (hideTimerRef.current) clearTimeout(hideTimerRef.current);
9107
9687
  };
9108
- const scheduleHide = React15.useCallback(() => {
9688
+ const scheduleHide = React17.useCallback(() => {
9109
9689
  clearHideTimer();
9110
9690
  hideTimerRef.current = setTimeout(() => setControlsVisible(false), 2500);
9111
9691
  }, []);
9112
- React15.useEffect(() => () => clearHideTimer(), []);
9113
- React15.useEffect(() => {
9692
+ React17.useEffect(() => () => clearHideTimer(), []);
9693
+ React17.useEffect(() => {
9114
9694
  if (!playing) {
9115
9695
  clearHideTimer();
9116
9696
  setControlsVisible(true);
9117
9697
  }
9118
9698
  }, [playing]);
9119
- React15.useEffect(() => {
9699
+ React17.useEffect(() => {
9120
9700
  const handler = () => setFullscreen(!!document.fullscreenElement);
9121
9701
  document.addEventListener("fullscreenchange", handler);
9122
9702
  return () => document.removeEventListener("fullscreenchange", handler);
@@ -9686,6 +10266,6 @@ function useIs2xl({
9686
10266
  return is2xl;
9687
10267
  }
9688
10268
 
9689
- export { Accordion, AccordionPanel as AccordionContent, AccordionItem, AccordionPanel, AccordionTrigger, Alert, AlertAction, AlertDescription, AlertDialog, AlertDialogBackdrop, AlertDialogClose, AlertDialogPopup as AlertDialogContent, AlertDialogCreateHandle, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogBackdrop as AlertDialogOverlay, AlertDialogPopup, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertDialogViewport, AlertTitle, AnchoredToastProvider, AnimatedThemeToggler, AppGalleryLogoIcon, AppStoreButton, AppleLogoIcon, AspectRatio, Autocomplete, AutocompleteClear, AutocompleteCollection, AutocompleteEmpty, AutocompleteGroup, AutocompleteGroupLabel, AutocompleteInput, AutocompleteItem, AutocompleteList, AutocompletePopup, AutocompleteRow, AutocompleteSeparator, AutocompleteStatus, AutocompleteTrigger, AutocompleteValue, Avatar, AvatarAddButton, AvatarCompanyIcon, AvatarFallback, AvatarGroup, AvatarImage, AvatarLabelGroup, AvatarProfilePhoto, AvatarUploadBase, Badge, BadgeAvatar, BadgeCloseButton, BadgeDot, BadgeFlag, BadgeGroup, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Group as ButtonGroup, GroupSeparator as ButtonGroupSeparator, GroupText as ButtonGroupText, Card, CardAction, CardPanel as CardContent, CardDescription, CardFooter, CardFrame, CardFrameDescription, CardFrameFooter, CardFrameHeader, CardFrameTitle, CardHeader, CardPanel, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Collapsible, CollapsiblePanel as CollapsibleContent, CollapsiblePanel, CollapsibleTrigger, Combobox, ComboboxChip, ComboboxChips, ComboboxClear, ComboboxCollection, ComboboxEmpty, ComboboxGroup, ComboboxGroupLabel, ComboboxInput, ComboboxItem, ComboboxList, ComboboxPopup, ComboboxRow, ComboboxSeparator, ComboboxStatus, ComboboxTrigger, ComboboxValue, Command, CommandCollection, CommandCreateHandle, CommandDialog, CommandDialogPopup, CommandDialogTrigger, CommandEmpty, CommandFooter, CommandGroup, CommandGroupLabel, CommandInput, CommandItem, CommandList, CommandPanel, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, CreditCard, DashboardHeader, DashboardPanel, Dialog, DialogBackdrop, DialogClose, DialogPopup as DialogContent, DialogCreateHandle, DialogDescription, DialogFooter, DialogHeader, DialogBackdrop as DialogOverlay, DialogPanel, DialogPopup, DialogPortal, DialogTitle, DialogTrigger, DialogViewport, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DribbbleLogoIcon, Menu as DropdownMenu, MenuCheckboxItem as DropdownMenuCheckboxItem, MenuPopup as DropdownMenuContent, MenuCreateHandle as DropdownMenuCreateHandle, MenuGroup as DropdownMenuGroup, MenuItem as DropdownMenuItem, MenuGroupLabel as DropdownMenuLabel, MenuPortal as DropdownMenuPortal, MenuRadioGroup as DropdownMenuRadioGroup, MenuRadioItem as DropdownMenuRadioItem, MenuSeparator as DropdownMenuSeparator, MenuShortcut as DropdownMenuShortcut, MenuSub as DropdownMenuSub, MenuSubPopup as DropdownMenuSubContent, MenuSubTrigger as DropdownMenuSubTrigger, MenuTrigger as DropdownMenuTrigger, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, ErrorOrEmptyState, FacebookLogoIcon, FeaturedIcon, Fieldset, FieldsetLegend, FigmaLogoIcon, ForbiddenErrorState, Form, Frame, FrameDescription, FrameFooter, FrameHeader, FramePanel, FrameTitle, GalaxyStoreLogoIcon, GeneralErrorState, GoogleLogoIcon, GooglePlayLogoIcon, Group, GroupSeparator, GroupText, HorizontalScrollFader, HorizontalScrollFaderContent, HorizontalScrollFaderLeftScroller, HorizontalScrollFaderRightScroller, PreviewCard as HoverCard, PreviewCardPopup as HoverCardContent, PreviewCardTrigger as HoverCardTrigger, ImageUploadBase, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, InternalServerErrorState, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Kbd, KbdGroup, LeftScroller, Menu, MenuCheckboxItem, MenuCreateHandle, MenuGroup, MenuGroupLabel, MenuItem, MenuPopup, MenuPortal, MenuRadioGroup, MenuRadioItem, MenuSeparator, MenuShortcut, MenuSub, MenuSubPopup, MenuSubTrigger, MenuTrigger, Menubar, MenuCheckboxItem as MenubarCheckboxItem, MenubarContent, MenuGroup as MenubarGroup, MenuItem as MenubarItem, MenuGroupLabel as MenubarLabel, MenubarMenu, MenuPortal as MenubarPortal, MenuRadioGroup as MenubarRadioGroup, MenuRadioItem as MenubarRadioItem, MenuSeparator as MenubarSeparator, MenuShortcut as MenubarShortcut, MenuSub as MenubarSub, MenuSubPopup as MenubarSubContent, MenuSubTrigger as MenubarSubTrigger, MenubarTrigger, Meter, MeterIndicator, MeterLabel, MeterTrack, MeterValue, MultiSelect, NavigationMenu, NavigationMenuContent, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NotFoundErrorState, OfflineErrorState, Pagination, PaginationContent, PaginationControls, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, PreviewCard, PreviewCardPopup, PreviewCardTrigger, Progress, ProgressCircle, ProgressFloatingValue, ProgressHalfCircle, ProgressIndicator, ProgressLabel, ProgressTrack, ProgressValue, QRCode, QRCodeGradientScan, Radio, RadioGroup, Radio as RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, RightScroller, ScrollArea, ScrollBar, SectionHeader, Separator, Sheet, SheetBackdrop, SheetClose, SheetPopup as SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetBackdrop as SheetOverlay, SheetPanel, SheetPopup, SheetPortal, SheetTitle, SheetTrigger, SheetViewport, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Slider, SliderValue, SmoothScroll, SocialButton, Spinner, Stat, StatDescription, StatGroup, StatLabel, StatTrend, StatValue, Stepper, StepperDescription, StepperIndicator, StepperItem, StepperSeparator, StepperTitle, StepperTrigger, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsPanel as TabsContent, TabsList, TabsPanel, TabsTab, TabsTab as TabsTrigger, Tag, TagGroup, target_countdown_default as TargetCountdown, TextEditor, ThemeContextOverride, ThemeProvider, Timeline, TimelineContent, TimelineDescription, TimelineDot, TimelineItem, TimelineTime, TimelineTitle, ToastProvider, Toggle, ToggleGroup, Toggle2 as ToggleGroupItem, ToggleGroupSeparator, Toolbar, ToolbarButton, ToolbarGroup, ToolbarInput, ToolbarLink, ToolbarSeparator, Tooltip2 as Tooltip, TooltipPopup as TooltipContent, TooltipCreateHandle, TooltipDescription, TooltipPopup, TooltipProvider, TooltipTitle, TooltipTrigger, UnauthorizedErrorState, VerticalScrollFader, VerticalScrollFaderBottomScroller, VerticalScrollFaderContent, VerticalScrollFaderTopScroller, VideoPlayer, XLogoIcon, anchoredToastManager, appStoreButtonVariants, avatarGroupVariants, avatarVariants, badgeGroupVariants, badgeVariants, featuredIconVariants, groupVariants, itemVariants, navigationMenuTriggerStyle, qrCodeVariants, script, sectionHeaderDescriptionVariants, sectionHeaderTitleVariants, sheetPopupVariants, sheetViewportVariants, socialButtonVariants, statTrendVariants, statVariants, toastManager, toggleVariants, useAutocompleteFilter, use_callback_ref_default as useCallbackRef, useCarousel, useComboboxFilter, useFirstRender, useHover, useIs2xl, useIsLg, useIsMd, useIsSm, use_is_tab_active_default as useIsTabActive, useIsXl, useMediaQuery, useSidebar, useSmoothWheel, useSubscribeBreakpoints, useTheme, videoPlayerVariants };
10269
+ export { Accordion, AccordionPanel as AccordionContent, AccordionItem, AccordionPanel, AccordionTrigger, Alert, AlertAction, AlertDescription, AlertDialog, AlertDialogBackdrop, AlertDialogClose, AlertDialogPopup as AlertDialogContent, AlertDialogCreateHandle, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogBackdrop as AlertDialogOverlay, AlertDialogPopup, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertDialogViewport, AlertTitle, AnchoredToastProvider, AnimatedThemeToggler, AppGalleryLogoIcon, AppStoreButton, AppleLogoIcon, AspectRatio, Autocomplete, AutocompleteClear, AutocompleteCollection, AutocompleteEmpty, AutocompleteGroup, AutocompleteGroupLabel, AutocompleteInput, AutocompleteItem, AutocompleteList, AutocompletePopup, AutocompleteRow, AutocompleteSeparator, AutocompleteStatus, AutocompleteTrigger, AutocompleteValue, Avatar, AvatarAddButton, AvatarCompanyIcon, AvatarFallback, AvatarGroup, AvatarImage, AvatarLabelGroup, AvatarProfilePhoto, AvatarUploadBase, Badge, BadgeAvatar, BadgeCloseButton, BadgeDot, BadgeFlag, BadgeGroup, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Group as ButtonGroup, GroupSeparator as ButtonGroupSeparator, GroupText as ButtonGroupText, Card, CardAction, CardPanel as CardContent, CardDescription, CardFooter, CardFrame, CardFrameDescription, CardFrameFooter, CardFrameHeader, CardFrameTitle, CardHeader, CardPanel, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Chat, ChatEmptyState, ChatEmptyStateDescription, ChatEmptyStateIcon, ChatEmptyStateTitle, ChatHeader, ChatHeaderActions, ChatHeaderAvatar, ChatHeaderTitle, ChatInput, ChatMessage, ChatMessageBubble, ChatMessages, ChatSuggestion, ChatSuggestions, ChatToolCard, ChatToolCardActions, ChatToolCardHeader, ChatToolChip, ChatTypingIndicator, Collapsible, CollapsiblePanel as CollapsibleContent, CollapsiblePanel, CollapsibleTrigger, Combobox, ComboboxChip, ComboboxChips, ComboboxClear, ComboboxCollection, ComboboxEmpty, ComboboxGroup, ComboboxGroupLabel, ComboboxInput, ComboboxItem, ComboboxList, ComboboxPopup, ComboboxRow, ComboboxSeparator, ComboboxStatus, ComboboxTrigger, ComboboxValue, Command, CommandCollection, CommandCreateHandle, CommandDialog, CommandDialogPopup, CommandDialogTrigger, CommandEmpty, CommandFooter, CommandGroup, CommandGroupLabel, CommandInput, CommandItem, CommandList, CommandPanel, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, CreditCard, DashboardHeader, DashboardPanel, DataTablePaged, Dialog, DialogBackdrop, DialogClose, DialogPopup as DialogContent, DialogCreateHandle, DialogDescription, DialogFooter, DialogHeader, DialogBackdrop as DialogOverlay, DialogPanel, DialogPopup, DialogPortal, DialogTitle, DialogTrigger, DialogViewport, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DribbbleLogoIcon, Menu as DropdownMenu, MenuCheckboxItem as DropdownMenuCheckboxItem, MenuPopup as DropdownMenuContent, MenuCreateHandle as DropdownMenuCreateHandle, MenuGroup as DropdownMenuGroup, MenuItem as DropdownMenuItem, MenuGroupLabel as DropdownMenuLabel, MenuPortal as DropdownMenuPortal, MenuRadioGroup as DropdownMenuRadioGroup, MenuRadioItem as DropdownMenuRadioItem, MenuSeparator as DropdownMenuSeparator, MenuShortcut as DropdownMenuShortcut, MenuSub as DropdownMenuSub, MenuSubPopup as DropdownMenuSubContent, MenuSubTrigger as DropdownMenuSubTrigger, MenuTrigger as DropdownMenuTrigger, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, ErrorOrEmptyState, Fab, FacebookLogoIcon, FeaturedIcon, Fieldset, FieldsetLegend, FigmaLogoIcon, ForbiddenErrorState, Form, Frame, FrameDescription, FrameFooter, FrameHeader, FramePanel, FrameTitle, GalaxyStoreLogoIcon, GeneralErrorState, GoogleLogoIcon, GooglePlayLogoIcon, Group, GroupSeparator, GroupText, HorizontalScrollFader, HorizontalScrollFaderContent, HorizontalScrollFaderLeftScroller, HorizontalScrollFaderRightScroller, PreviewCard as HoverCard, PreviewCardPopup as HoverCardContent, PreviewCardTrigger as HoverCardTrigger, ImageUploadBase, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, InternalServerErrorState, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Kbd, KbdGroup, LeftScroller, Markdown, Menu, MenuCheckboxItem, MenuCreateHandle, MenuGroup, MenuGroupLabel, MenuItem, MenuPopup, MenuPortal, MenuRadioGroup, MenuRadioItem, MenuSeparator, MenuShortcut, MenuSub, MenuSubPopup, MenuSubTrigger, MenuTrigger, Menubar, MenuCheckboxItem as MenubarCheckboxItem, MenubarContent, MenuGroup as MenubarGroup, MenuItem as MenubarItem, MenuGroupLabel as MenubarLabel, MenubarMenu, MenuPortal as MenubarPortal, MenuRadioGroup as MenubarRadioGroup, MenuRadioItem as MenubarRadioItem, MenuSeparator as MenubarSeparator, MenuShortcut as MenubarShortcut, MenuSub as MenubarSub, MenuSubPopup as MenubarSubContent, MenuSubTrigger as MenubarSubTrigger, MenubarTrigger, Meter, MeterIndicator, MeterLabel, MeterTrack, MeterValue, MultiSelect, NavigationMenu, NavigationMenuContent, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NotFoundErrorState, OfflineErrorState, Pagination, PaginationContent, PaginationControls, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, PreviewCard, PreviewCardPopup, PreviewCardTrigger, Progress, ProgressCircle, ProgressFloatingValue, ProgressHalfCircle, ProgressIndicator, ProgressLabel, ProgressTrack, ProgressValue, QRCode, QRCodeGradientScan, Radio, RadioGroup, Radio as RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, RightScroller, ScrollArea, ScrollBar, SectionHeader, Separator, Sheet, SheetBackdrop, SheetClose, SheetPopup as SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetBackdrop as SheetOverlay, SheetPanel, SheetPopup, SheetPortal, SheetTitle, SheetTrigger, SheetViewport, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Slider, SliderValue, SmoothScroll, SocialButton, Spinner, Stat, StatDescription, StatGroup, StatLabel, StatTrend, StatValue, Stepper, StepperDescription, StepperIndicator, StepperItem, StepperSeparator, StepperTitle, StepperTrigger, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsPanel as TabsContent, TabsList, TabsPanel, TabsTab, TabsTab as TabsTrigger, Tag, TagGroup, target_countdown_default as TargetCountdown, TextEditor, ThemeContextOverride, ThemeProvider, Timeline, TimelineContent, TimelineDescription, TimelineDot, TimelineItem, TimelineTime, TimelineTitle, ToastProvider, Toggle, ToggleGroup, Toggle2 as ToggleGroupItem, ToggleGroupSeparator, Toolbar, ToolbarButton, ToolbarGroup, ToolbarInput, ToolbarLink, ToolbarSeparator, Tooltip2 as Tooltip, TooltipPopup as TooltipContent, TooltipCreateHandle, TooltipDescription, TooltipPopup, TooltipProvider, TooltipTitle, TooltipTrigger, UnauthorizedErrorState, VerticalScrollFader, VerticalScrollFaderBottomScroller, VerticalScrollFaderContent, VerticalScrollFaderTopScroller, VideoPlayer, XLogoIcon, anchoredToastManager, appStoreButtonVariants, avatarGroupVariants, avatarVariants, badgeGroupVariants, badgeVariants, chatMessageBubbleVariants, chatMessageVariants, fabVariants, featuredIconVariants, groupVariants, itemVariants, navigationMenuTriggerStyle, qrCodeVariants, script, sectionHeaderDescriptionVariants, sectionHeaderTitleVariants, sheetPopupVariants, sheetViewportVariants, socialButtonVariants, statTrendVariants, statVariants, toastManager, toggleVariants, useAutocompleteFilter, use_callback_ref_default as useCallbackRef, useCarousel, useComboboxFilter, useFirstRender, useHover, useIs2xl, useIsLg, useIsMd, useIsSm, use_is_tab_active_default as useIsTabActive, useIsXl, useMediaQuery, useSidebar, useSmoothWheel, useSubscribeBreakpoints, useTheme, videoPlayerVariants };
9690
10270
  //# sourceMappingURL=index.js.map
9691
10271
  //# sourceMappingURL=index.js.map