@j3m-quantum/ui 1.3.0 → 1.4.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,4 +1,4 @@
1
- import * as React14 from 'react';
1
+ import * as React15 from 'react';
2
2
  import { useMemo } from 'react';
3
3
  import { Slot } from '@radix-ui/react-slot';
4
4
  import { cva } from 'class-variance-authority';
@@ -7,7 +7,7 @@ import { twMerge } from 'tailwind-merge';
7
7
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
8
8
  import * as SeparatorPrimitive from '@radix-ui/react-separator';
9
9
  import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
10
- import { SearchIcon, CheckIcon, CircleIcon, ChevronDownIcon, ChevronUpIcon, ChevronRightIcon, ChevronLeftIcon, ArrowLeft, ArrowRight, Loader2Icon, OctagonXIcon, TriangleAlertIcon, InfoIcon, CircleCheckIcon, ChevronRight, MoreHorizontal, MoreHorizontalIcon, XIcon, GripVerticalIcon, PanelLeftIcon, FolderIcon, ShareIcon, TrashIcon, ChevronsUpDownIcon, SparklesIcon, BadgeCheckIcon, CreditCardIcon, BellIcon, LogOutIcon, User, Calendar as Calendar$1, Clock, CalendarX2, ChevronLeft, List, Columns, Grid2x2, Grid3x3, CalendarRange, Plus, Info, Moon, Settings } from 'lucide-react';
10
+ import { SearchIcon, CheckIcon, CircleIcon, ChevronDownIcon, ChevronUpIcon, ChevronRightIcon, ChevronLeftIcon, ArrowLeft, ArrowRight, Loader2Icon, OctagonXIcon, TriangleAlertIcon, InfoIcon, CircleCheckIcon, ChevronRight, MoreHorizontal, MoreHorizontalIcon, XIcon, GripVerticalIcon, PanelLeftIcon, FolderIcon, ShareIcon, TrashIcon, ChevronsUpDownIcon, SparklesIcon, BadgeCheckIcon, CreditCardIcon, BellIcon, LogOutIcon, User, Calendar as Calendar$1, Clock, CalendarX2, ChevronLeft, List, Columns, Grid2x2, Grid3x3, CalendarRange, Settings, Plus, Info, Moon } from 'lucide-react';
11
11
  import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
12
12
  import * as SwitchPrimitive from '@radix-ui/react-switch';
13
13
  import * as SliderPrimitive from '@radix-ui/react-slider';
@@ -30,13 +30,13 @@ import * as TooltipPrimitive from '@radix-ui/react-tooltip';
30
30
  import { Toaster as Toaster$1 } from 'sonner';
31
31
  import { Command as Command$1 } from 'cmdk';
32
32
  import * as DialogPrimitive from '@radix-ui/react-dialog';
33
+ import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';
33
34
  import * as MenubarPrimitive from '@radix-ui/react-menubar';
34
35
  import * as NavigationMenuPrimitive from '@radix-ui/react-navigation-menu';
35
36
  import * as ContextMenuPrimitive from '@radix-ui/react-context-menu';
36
37
  import { Drawer as Drawer$1 } from 'vaul';
37
38
  import * as PopoverPrimitive from '@radix-ui/react-popover';
38
39
  import * as HoverCardPrimitive from '@radix-ui/react-hover-card';
39
- import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';
40
40
  import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';
41
41
  import * as ResizablePrimitive from 'react-resizable-panels';
42
42
  import { subMonths, subYears, subWeeks, subDays, addMonths, addYears, addWeeks, addDays, format, startOfWeek, endOfWeek, startOfMonth, endOfMonth, startOfYear, endOfYear, isSameMonth, isSameWeek, isSameDay, isSameYear, isWithinInterval, parseISO, differenceInMinutes, eachDayOfInterval, differenceInDays, startOfDay, setMinutes, setHours, eachHourOfInterval, endOfDay, getHours, getMinutes, addMinutes, isToday, areIntervalsOverlapping } from 'date-fns';
@@ -45,8 +45,8 @@ export { areIntervalsOverlapping, format, getDay, isSameDay, isSameMonth, isToda
45
45
  // src/hooks/use-mobile.ts
46
46
  var MOBILE_BREAKPOINT = 768;
47
47
  function useIsMobile() {
48
- const [isMobile, setIsMobile] = React14.useState(void 0);
49
- React14.useEffect(() => {
48
+ const [isMobile, setIsMobile] = React15.useState(void 0);
49
+ React15.useEffect(() => {
50
50
  const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);
51
51
  const onChange = () => {
52
52
  setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
@@ -87,7 +87,7 @@ var buttonVariants = cva(
87
87
  }
88
88
  }
89
89
  );
90
- var Button = React14.forwardRef(
90
+ var Button = React15.forwardRef(
91
91
  ({ className, variant, size, asChild = false, ...props }, ref) => {
92
92
  const Comp = asChild ? Slot : "button";
93
93
  return /* @__PURE__ */ jsx(
@@ -195,7 +195,7 @@ function Input({ className, type, ...props }) {
195
195
  type,
196
196
  "data-slot": "input",
197
197
  className: cn(
198
- "file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] 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 md:text-sm",
198
+ "file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-4 text-base shadow-xs transition-[color,box-shadow] 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 md:text-sm",
199
199
  "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
200
200
  "aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
201
201
  className
@@ -451,7 +451,7 @@ function Slider({
451
451
  max = 100,
452
452
  ...props
453
453
  }) {
454
- const _values = React14.useMemo(
454
+ const _values = React15.useMemo(
455
455
  () => Array.isArray(value) ? value : Array.isArray(defaultValue) ? defaultValue : [min, max],
456
456
  [value, defaultValue, min, max]
457
457
  );
@@ -737,7 +737,7 @@ function Toggle({
737
737
  }
738
738
  );
739
739
  }
740
- var ToggleGroupContext = React14.createContext({
740
+ var ToggleGroupContext = React15.createContext({
741
741
  size: "default",
742
742
  variant: "default",
743
743
  spacing: 0
@@ -774,7 +774,7 @@ function ToggleGroupItem({
774
774
  size,
775
775
  ...props
776
776
  }) {
777
- const context = React14.useContext(ToggleGroupContext);
777
+ const context = React15.useContext(ToggleGroupContext);
778
778
  return /* @__PURE__ */ jsx(
779
779
  ToggleGroupPrimitive.Item,
780
780
  {
@@ -796,6 +796,125 @@ function ToggleGroupItem({
796
796
  }
797
797
  );
798
798
  }
799
+ function ThemeSwitch({
800
+ checked,
801
+ defaultChecked = false,
802
+ onCheckedChange,
803
+ disabled = false,
804
+ className,
805
+ size = "default"
806
+ }) {
807
+ const [isChecked, setIsChecked] = React15.useState(defaultChecked);
808
+ const isControlled = checked !== void 0;
809
+ const currentChecked = isControlled ? checked : isChecked;
810
+ const handleClick = () => {
811
+ if (disabled) return;
812
+ const newValue = !currentChecked;
813
+ if (!isControlled) {
814
+ setIsChecked(newValue);
815
+ }
816
+ onCheckedChange?.(newValue);
817
+ };
818
+ const sizeClasses = {
819
+ sm: {
820
+ track: "h-5 w-9",
821
+ thumb: "size-4",
822
+ icon: "h-2.5 w-2.5",
823
+ translate: "data-[state=checked]:translate-x-4"
824
+ },
825
+ default: {
826
+ track: "h-6 w-11",
827
+ thumb: "size-5",
828
+ icon: "h-3 w-3",
829
+ translate: "data-[state=checked]:translate-x-5"
830
+ },
831
+ lg: {
832
+ track: "h-7 w-14",
833
+ thumb: "size-6",
834
+ icon: "h-3.5 w-3.5",
835
+ translate: "data-[state=checked]:translate-x-7"
836
+ }
837
+ };
838
+ const sizes = sizeClasses[size];
839
+ return /* @__PURE__ */ jsx(
840
+ "button",
841
+ {
842
+ type: "button",
843
+ role: "switch",
844
+ "aria-checked": currentChecked,
845
+ "aria-label": currentChecked ? "Switch to light mode" : "Switch to dark mode",
846
+ "data-slot": "theme-switch",
847
+ "data-state": currentChecked ? "checked" : "unchecked",
848
+ disabled,
849
+ onClick: handleClick,
850
+ className: cn(
851
+ "peer inline-flex shrink-0 cursor-pointer items-center rounded-full",
852
+ "border border-transparent shadow-xs transition-all outline-none",
853
+ "focus-visible:ring-[3px] focus-visible:ring-ring/50",
854
+ "disabled:cursor-not-allowed disabled:opacity-50",
855
+ "bg-input data-[state=checked]:bg-primary",
856
+ sizes.track,
857
+ className
858
+ ),
859
+ children: /* @__PURE__ */ jsx(
860
+ "span",
861
+ {
862
+ "data-state": currentChecked ? "checked" : "unchecked",
863
+ className: cn(
864
+ "pointer-events-none flex items-center justify-center rounded-full",
865
+ "bg-white shadow-lg ring-0 transition-transform",
866
+ "data-[state=unchecked]:translate-x-0.5",
867
+ sizes.thumb,
868
+ sizes.translate
869
+ ),
870
+ children: currentChecked ? /* @__PURE__ */ jsx(MoonIcon, { className: cn(sizes.icon, "text-primary") }) : /* @__PURE__ */ jsx(SunIcon, { className: cn(sizes.icon, "text-muted-foreground") })
871
+ }
872
+ )
873
+ }
874
+ );
875
+ }
876
+ function SunIcon({ className }) {
877
+ return /* @__PURE__ */ jsxs(
878
+ "svg",
879
+ {
880
+ xmlns: "http://www.w3.org/2000/svg",
881
+ viewBox: "0 0 24 24",
882
+ fill: "none",
883
+ stroke: "currentColor",
884
+ strokeWidth: "2",
885
+ strokeLinecap: "round",
886
+ strokeLinejoin: "round",
887
+ className,
888
+ children: [
889
+ /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "4" }),
890
+ /* @__PURE__ */ jsx("path", { d: "M12 2v2" }),
891
+ /* @__PURE__ */ jsx("path", { d: "M12 20v2" }),
892
+ /* @__PURE__ */ jsx("path", { d: "m4.93 4.93 1.41 1.41" }),
893
+ /* @__PURE__ */ jsx("path", { d: "m17.66 17.66 1.41 1.41" }),
894
+ /* @__PURE__ */ jsx("path", { d: "M2 12h2" }),
895
+ /* @__PURE__ */ jsx("path", { d: "M20 12h2" }),
896
+ /* @__PURE__ */ jsx("path", { d: "m6.34 17.66-1.41 1.41" }),
897
+ /* @__PURE__ */ jsx("path", { d: "m19.07 4.93-1.41 1.41" })
898
+ ]
899
+ }
900
+ );
901
+ }
902
+ function MoonIcon({ className }) {
903
+ return /* @__PURE__ */ jsx(
904
+ "svg",
905
+ {
906
+ xmlns: "http://www.w3.org/2000/svg",
907
+ viewBox: "0 0 24 24",
908
+ fill: "none",
909
+ stroke: "currentColor",
910
+ strokeWidth: "2",
911
+ strokeLinecap: "round",
912
+ strokeLinejoin: "round",
913
+ className,
914
+ children: /* @__PURE__ */ jsx("path", { d: "M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z" })
915
+ }
916
+ );
917
+ }
799
918
  function ToolBarCanvas({
800
919
  className,
801
920
  ...props
@@ -1105,7 +1224,7 @@ function Label2({
1105
1224
  );
1106
1225
  }
1107
1226
  var Form = FormProvider;
1108
- var FormFieldContext = React14.createContext(
1227
+ var FormFieldContext = React15.createContext(
1109
1228
  {}
1110
1229
  );
1111
1230
  var FormField = ({
@@ -1114,8 +1233,8 @@ var FormField = ({
1114
1233
  return /* @__PURE__ */ jsx(FormFieldContext.Provider, { value: { name: props.name }, children: /* @__PURE__ */ jsx(Controller, { ...props }) });
1115
1234
  };
1116
1235
  var useFormField = () => {
1117
- const fieldContext = React14.useContext(FormFieldContext);
1118
- const itemContext = React14.useContext(FormItemContext);
1236
+ const fieldContext = React15.useContext(FormFieldContext);
1237
+ const itemContext = React15.useContext(FormItemContext);
1119
1238
  const { getFieldState } = useFormContext();
1120
1239
  const formState = useFormState({ name: fieldContext.name });
1121
1240
  const fieldState = getFieldState(fieldContext.name, formState);
@@ -1132,11 +1251,11 @@ var useFormField = () => {
1132
1251
  ...fieldState
1133
1252
  };
1134
1253
  };
1135
- var FormItemContext = React14.createContext(
1254
+ var FormItemContext = React15.createContext(
1136
1255
  {}
1137
1256
  );
1138
1257
  function FormItem({ className, ...props }) {
1139
- const id = React14.useId();
1258
+ const id = React15.useId();
1140
1259
  return /* @__PURE__ */ jsx(FormItemContext.Provider, { value: { id }, children: /* @__PURE__ */ jsx(
1141
1260
  "div",
1142
1261
  {
@@ -2053,7 +2172,7 @@ function TabsList({
2053
2172
  {
2054
2173
  "data-slot": "tabs-list",
2055
2174
  className: cn(
2056
- "bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px] dark:bg-[#1a1a1a]",
2175
+ "bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px]",
2057
2176
  className
2058
2177
  ),
2059
2178
  ...props
@@ -2238,8 +2357,8 @@ function CalendarDayButton({
2238
2357
  modifiers,
2239
2358
  ...props
2240
2359
  }) {
2241
- const ref = React14.useRef(null);
2242
- React14.useEffect(() => {
2360
+ const ref = React15.useRef(null);
2361
+ React15.useEffect(() => {
2243
2362
  if (modifiers.focused) ref.current?.focus();
2244
2363
  }, [modifiers.focused]);
2245
2364
  return /* @__PURE__ */ jsx(
@@ -2260,9 +2379,9 @@ function CalendarDayButton({
2260
2379
  }
2261
2380
  );
2262
2381
  }
2263
- var CarouselContext = React14.createContext(null);
2382
+ var CarouselContext = React15.createContext(null);
2264
2383
  function useCarousel() {
2265
- const context = React14.useContext(CarouselContext);
2384
+ const context = React15.useContext(CarouselContext);
2266
2385
  if (!context) {
2267
2386
  throw new Error("useCarousel must be used within a <Carousel />");
2268
2387
  }
@@ -2284,20 +2403,20 @@ function Carousel({
2284
2403
  },
2285
2404
  plugins
2286
2405
  );
2287
- const [canScrollPrev, setCanScrollPrev] = React14.useState(false);
2288
- const [canScrollNext, setCanScrollNext] = React14.useState(false);
2289
- const onSelect = React14.useCallback((api2) => {
2406
+ const [canScrollPrev, setCanScrollPrev] = React15.useState(false);
2407
+ const [canScrollNext, setCanScrollNext] = React15.useState(false);
2408
+ const onSelect = React15.useCallback((api2) => {
2290
2409
  if (!api2) return;
2291
2410
  setCanScrollPrev(api2.canScrollPrev());
2292
2411
  setCanScrollNext(api2.canScrollNext());
2293
2412
  }, []);
2294
- const scrollPrev = React14.useCallback(() => {
2413
+ const scrollPrev = React15.useCallback(() => {
2295
2414
  api?.scrollPrev();
2296
2415
  }, [api]);
2297
- const scrollNext = React14.useCallback(() => {
2416
+ const scrollNext = React15.useCallback(() => {
2298
2417
  api?.scrollNext();
2299
2418
  }, [api]);
2300
- const handleKeyDown = React14.useCallback(
2419
+ const handleKeyDown = React15.useCallback(
2301
2420
  (event) => {
2302
2421
  if (event.key === "ArrowLeft") {
2303
2422
  event.preventDefault();
@@ -2309,11 +2428,11 @@ function Carousel({
2309
2428
  },
2310
2429
  [scrollPrev, scrollNext]
2311
2430
  );
2312
- React14.useEffect(() => {
2431
+ React15.useEffect(() => {
2313
2432
  if (!api || !setApi) return;
2314
2433
  setApi(api);
2315
2434
  }, [api, setApi]);
2316
- React14.useEffect(() => {
2435
+ React15.useEffect(() => {
2317
2436
  if (!api) return;
2318
2437
  onSelect(api);
2319
2438
  api.on("reInit", onSelect);
@@ -2446,9 +2565,9 @@ function CarouselNext({
2446
2565
  );
2447
2566
  }
2448
2567
  var THEMES = { light: "", dark: ".dark" };
2449
- var ChartContext = React14.createContext(null);
2568
+ var ChartContext = React15.createContext(null);
2450
2569
  function useChart() {
2451
- const context = React14.useContext(ChartContext);
2570
+ const context = React15.useContext(ChartContext);
2452
2571
  if (!context) {
2453
2572
  throw new Error("useChart must be used within a <ChartContainer />");
2454
2573
  }
@@ -2461,7 +2580,7 @@ function ChartContainer({
2461
2580
  config,
2462
2581
  ...props
2463
2582
  }) {
2464
- const uniqueId = React14.useId();
2583
+ const uniqueId = React15.useId();
2465
2584
  const chartId = `chart-${id || uniqueId.replace(/:/g, "")}`;
2466
2585
  return /* @__PURE__ */ jsx(ChartContext.Provider, { value: { config }, children: /* @__PURE__ */ jsxs(
2467
2586
  "div",
@@ -2522,7 +2641,7 @@ function ChartTooltipContent({
2522
2641
  labelKey
2523
2642
  }) {
2524
2643
  const { config } = useChart();
2525
- const tooltipLabel = React14.useMemo(() => {
2644
+ const tooltipLabel = React15.useMemo(() => {
2526
2645
  if (hideLabel || !payload?.length) {
2527
2646
  return null;
2528
2647
  }
@@ -3225,8 +3344,8 @@ function TooltipContent({
3225
3344
  ) });
3226
3345
  }
3227
3346
  function useDetectTheme() {
3228
- const [theme, setTheme] = React14.useState("light");
3229
- React14.useEffect(() => {
3347
+ const [theme, setTheme] = React15.useState("light");
3348
+ React15.useEffect(() => {
3230
3349
  const isDark = document.documentElement.classList.contains("dark");
3231
3350
  setTheme(isDark ? "dark" : "light");
3232
3351
  const observer = new MutationObserver((mutations) => {
@@ -3593,6 +3712,59 @@ function DialogDescription({
3593
3712
  }
3594
3713
  );
3595
3714
  }
3715
+ function ScrollArea({
3716
+ className,
3717
+ children,
3718
+ ...props
3719
+ }) {
3720
+ return /* @__PURE__ */ jsxs(
3721
+ ScrollAreaPrimitive.Root,
3722
+ {
3723
+ "data-slot": "scroll-area",
3724
+ className: cn("relative", className),
3725
+ ...props,
3726
+ children: [
3727
+ /* @__PURE__ */ jsx(
3728
+ ScrollAreaPrimitive.Viewport,
3729
+ {
3730
+ "data-slot": "scroll-area-viewport",
3731
+ className: "focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1",
3732
+ children
3733
+ }
3734
+ ),
3735
+ /* @__PURE__ */ jsx(ScrollBar, {}),
3736
+ /* @__PURE__ */ jsx(ScrollAreaPrimitive.Corner, {})
3737
+ ]
3738
+ }
3739
+ );
3740
+ }
3741
+ function ScrollBar({
3742
+ className,
3743
+ orientation = "vertical",
3744
+ ...props
3745
+ }) {
3746
+ return /* @__PURE__ */ jsx(
3747
+ ScrollAreaPrimitive.ScrollAreaScrollbar,
3748
+ {
3749
+ "data-slot": "scroll-area-scrollbar",
3750
+ orientation,
3751
+ className: cn(
3752
+ "flex touch-none p-px transition-colors select-none",
3753
+ orientation === "vertical" && "h-full w-2.5 border-l border-l-transparent",
3754
+ orientation === "horizontal" && "h-2.5 flex-col border-t border-t-transparent",
3755
+ className
3756
+ ),
3757
+ ...props,
3758
+ children: /* @__PURE__ */ jsx(
3759
+ ScrollAreaPrimitive.ScrollAreaThumb,
3760
+ {
3761
+ "data-slot": "scroll-area-thumb",
3762
+ className: "bg-border relative flex-1 rounded-full"
3763
+ }
3764
+ )
3765
+ }
3766
+ );
3767
+ }
3596
3768
  function Command({
3597
3769
  className,
3598
3770
  ...props
@@ -3662,17 +3834,17 @@ function CommandList({
3662
3834
  className,
3663
3835
  ...props
3664
3836
  }) {
3665
- return /* @__PURE__ */ jsx(
3837
+ return /* @__PURE__ */ jsx(ScrollArea, { className: "max-h-[300px]", children: /* @__PURE__ */ jsx(
3666
3838
  Command$1.List,
3667
3839
  {
3668
3840
  "data-slot": "command-list",
3669
3841
  className: cn(
3670
- "max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto",
3842
+ "scroll-py-1",
3671
3843
  className
3672
3844
  ),
3673
3845
  ...props
3674
3846
  }
3675
- );
3847
+ ) });
3676
3848
  }
3677
3849
  function CommandEmpty({
3678
3850
  ...props
@@ -3747,7 +3919,7 @@ function CommandShortcut({
3747
3919
  }
3748
3920
  );
3749
3921
  }
3750
- var SearchTrigger = React14.forwardRef(
3922
+ var SearchTrigger = React15.forwardRef(
3751
3923
  ({
3752
3924
  className,
3753
3925
  placeholder = "Search...",
@@ -3783,7 +3955,7 @@ var SearchTrigger = React14.forwardRef(
3783
3955
  );
3784
3956
  SearchTrigger.displayName = "SearchTrigger";
3785
3957
  function useSearchShortcut(onOpen, key = "k") {
3786
- React14.useEffect(() => {
3958
+ React15.useEffect(() => {
3787
3959
  const down = (e) => {
3788
3960
  if (e.key.toLowerCase() === key.toLowerCase() && (e.metaKey || e.ctrlKey)) {
3789
3961
  e.preventDefault();
@@ -4679,59 +4851,6 @@ function HoverCardContent({
4679
4851
  }
4680
4852
  ) });
4681
4853
  }
4682
- function ScrollArea({
4683
- className,
4684
- children,
4685
- ...props
4686
- }) {
4687
- return /* @__PURE__ */ jsxs(
4688
- ScrollAreaPrimitive.Root,
4689
- {
4690
- "data-slot": "scroll-area",
4691
- className: cn("relative", className),
4692
- ...props,
4693
- children: [
4694
- /* @__PURE__ */ jsx(
4695
- ScrollAreaPrimitive.Viewport,
4696
- {
4697
- "data-slot": "scroll-area-viewport",
4698
- className: "focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1",
4699
- children
4700
- }
4701
- ),
4702
- /* @__PURE__ */ jsx(ScrollBar, {}),
4703
- /* @__PURE__ */ jsx(ScrollAreaPrimitive.Corner, {})
4704
- ]
4705
- }
4706
- );
4707
- }
4708
- function ScrollBar({
4709
- className,
4710
- orientation = "vertical",
4711
- ...props
4712
- }) {
4713
- return /* @__PURE__ */ jsx(
4714
- ScrollAreaPrimitive.ScrollAreaScrollbar,
4715
- {
4716
- "data-slot": "scroll-area-scrollbar",
4717
- orientation,
4718
- className: cn(
4719
- "flex touch-none p-px transition-colors select-none",
4720
- orientation === "vertical" && "h-full w-2.5 border-l border-l-transparent",
4721
- orientation === "horizontal" && "h-2.5 flex-col border-t border-t-transparent",
4722
- className
4723
- ),
4724
- ...props,
4725
- children: /* @__PURE__ */ jsx(
4726
- ScrollAreaPrimitive.ScrollAreaThumb,
4727
- {
4728
- "data-slot": "scroll-area-thumb",
4729
- className: "bg-border relative flex-1 rounded-full"
4730
- }
4731
- )
4732
- }
4733
- );
4734
- }
4735
4854
  function Collapsible({
4736
4855
  ...props
4737
4856
  }) {
@@ -4811,9 +4930,9 @@ var SIDEBAR_WIDTH = "16rem";
4811
4930
  var SIDEBAR_WIDTH_MOBILE = "18rem";
4812
4931
  var SIDEBAR_WIDTH_ICON = "3rem";
4813
4932
  var SIDEBAR_KEYBOARD_SHORTCUT = "b";
4814
- var SidebarContext = React14.createContext(null);
4933
+ var SidebarContext = React15.createContext(null);
4815
4934
  function useSidebar() {
4816
- const context = React14.useContext(SidebarContext);
4935
+ const context = React15.useContext(SidebarContext);
4817
4936
  if (!context) {
4818
4937
  throw new Error("useSidebar must be used within a SidebarProvider.");
4819
4938
  }
@@ -4829,10 +4948,10 @@ function SidebarProvider({
4829
4948
  ...props
4830
4949
  }) {
4831
4950
  const isMobile = useIsMobile();
4832
- const [openMobile, setOpenMobile] = React14.useState(false);
4833
- const [_open, _setOpen] = React14.useState(defaultOpen);
4951
+ const [openMobile, setOpenMobile] = React15.useState(false);
4952
+ const [_open, _setOpen] = React15.useState(defaultOpen);
4834
4953
  const open = openProp ?? _open;
4835
- const setOpen = React14.useCallback(
4954
+ const setOpen = React15.useCallback(
4836
4955
  (value) => {
4837
4956
  const openState = typeof value === "function" ? value(open) : value;
4838
4957
  if (setOpenProp) {
@@ -4844,10 +4963,10 @@ function SidebarProvider({
4844
4963
  },
4845
4964
  [setOpenProp, open]
4846
4965
  );
4847
- const toggleSidebar = React14.useCallback(() => {
4966
+ const toggleSidebar = React15.useCallback(() => {
4848
4967
  return isMobile ? setOpenMobile((open2) => !open2) : setOpen((open2) => !open2);
4849
4968
  }, [isMobile, setOpen, setOpenMobile]);
4850
- React14.useEffect(() => {
4969
+ React15.useEffect(() => {
4851
4970
  const handleKeyDown = (event) => {
4852
4971
  if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {
4853
4972
  event.preventDefault();
@@ -4858,7 +4977,7 @@ function SidebarProvider({
4858
4977
  return () => window.removeEventListener("keydown", handleKeyDown);
4859
4978
  }, [toggleSidebar]);
4860
4979
  const state = open ? "expanded" : "collapsed";
4861
- const contextValue = React14.useMemo(
4980
+ const contextValue = React15.useMemo(
4862
4981
  () => ({
4863
4982
  state,
4864
4983
  open,
@@ -5316,7 +5435,7 @@ function SidebarMenuSkeleton({
5316
5435
  showIcon = false,
5317
5436
  ...props
5318
5437
  }) {
5319
- const width = React14.useMemo(() => {
5438
+ const width = React15.useMemo(() => {
5320
5439
  return `${Math.floor(Math.random() * 40) + 50}%`;
5321
5440
  }, []);
5322
5441
  return /* @__PURE__ */ jsxs(
@@ -5459,7 +5578,7 @@ var sectionVariants = cva(
5459
5578
  }
5460
5579
  );
5461
5580
  var isGlassVariant = (variant) => variant?.startsWith("glass-") ?? false;
5462
- var Section = React14.forwardRef(
5581
+ var Section = React15.forwardRef(
5463
5582
  ({ className, variant, ...props }, ref) => /* @__PURE__ */ jsx(
5464
5583
  "section",
5465
5584
  {
@@ -5471,7 +5590,7 @@ var Section = React14.forwardRef(
5471
5590
  )
5472
5591
  );
5473
5592
  Section.displayName = "Section";
5474
- var SectionHeader = React14.forwardRef(
5593
+ var SectionHeader = React15.forwardRef(
5475
5594
  ({ className, ...props }, ref) => /* @__PURE__ */ jsx(
5476
5595
  "div",
5477
5596
  {
@@ -5486,7 +5605,7 @@ var SectionHeader = React14.forwardRef(
5486
5605
  )
5487
5606
  );
5488
5607
  SectionHeader.displayName = "SectionHeader";
5489
- var SectionTitle = React14.forwardRef(
5608
+ var SectionTitle = React15.forwardRef(
5490
5609
  ({ className, ...props }, ref) => /* @__PURE__ */ jsx(
5491
5610
  "h2",
5492
5611
  {
@@ -5500,7 +5619,7 @@ var SectionTitle = React14.forwardRef(
5500
5619
  )
5501
5620
  );
5502
5621
  SectionTitle.displayName = "SectionTitle";
5503
- var SectionDescription = React14.forwardRef(
5622
+ var SectionDescription = React15.forwardRef(
5504
5623
  ({ className, ...props }, ref) => /* @__PURE__ */ jsx(
5505
5624
  "p",
5506
5625
  {
@@ -5514,7 +5633,7 @@ var SectionDescription = React14.forwardRef(
5514
5633
  )
5515
5634
  );
5516
5635
  SectionDescription.displayName = "SectionDescription";
5517
- var SectionContent = React14.forwardRef(
5636
+ var SectionContent = React15.forwardRef(
5518
5637
  ({ className, ...props }, ref) => /* @__PURE__ */ jsx(
5519
5638
  "div",
5520
5639
  {
@@ -5528,7 +5647,7 @@ var SectionContent = React14.forwardRef(
5528
5647
  )
5529
5648
  );
5530
5649
  SectionContent.displayName = "SectionContent";
5531
- var SectionFooter = React14.forwardRef(
5650
+ var SectionFooter = React15.forwardRef(
5532
5651
  ({ className, ...props }, ref) => /* @__PURE__ */ jsx(
5533
5652
  "div",
5534
5653
  {
@@ -5579,7 +5698,7 @@ function SiteHeader({
5579
5698
  children: /* @__PURE__ */ jsxs("div", { className: "flex h-[var(--header-height,3.5rem)] w-full items-center gap-[var(--j3m-spacing-s)] px-[var(--j3m-spacing-m)]", children: [
5580
5699
  trigger,
5581
5700
  trigger && /* @__PURE__ */ jsx(Separator, { orientation: "vertical", className: "mr-[var(--j3m-spacing-s)] h-4" }),
5582
- /* @__PURE__ */ jsx(Breadcrumb, { className: "hidden sm:block", children: /* @__PURE__ */ jsx(BreadcrumbList, { children: breadcrumbs.map((item, index) => /* @__PURE__ */ jsxs(React14.Fragment, { children: [
5701
+ /* @__PURE__ */ jsx(Breadcrumb, { className: "hidden sm:block", children: /* @__PURE__ */ jsx(BreadcrumbList, { children: breadcrumbs.map((item, index) => /* @__PURE__ */ jsxs(React15.Fragment, { children: [
5583
5702
  index > 0 && /* @__PURE__ */ jsx(BreadcrumbSeparator, {}),
5584
5703
  /* @__PURE__ */ jsx(BreadcrumbItem, { children: item.href ? /* @__PURE__ */ jsx(BreadcrumbLink, { href: item.href, children: item.label }) : /* @__PURE__ */ jsx(BreadcrumbPage, { children: item.label }) })
5585
5704
  ] }, index)) }) }),
@@ -5791,7 +5910,7 @@ var BADGE_VARIANT_LABELS = {
5791
5910
  colored: "Colored",
5792
5911
  mixed: "Mixed"
5793
5912
  };
5794
- var CalendarContext = React14.createContext(null);
5913
+ var CalendarContext = React15.createContext(null);
5795
5914
  function EventCalendarProvider({
5796
5915
  children,
5797
5916
  events: initialEvents = [],
@@ -5806,38 +5925,38 @@ function EventCalendarProvider({
5806
5925
  onEventUpdate,
5807
5926
  onEventDelete
5808
5927
  }) {
5809
- const [selectedDate, setSelectedDate] = React14.useState(defaultDate);
5810
- const [selectedUserId, setSelectedUserId] = React14.useState(defaultUserId);
5811
- const [events, setEventsState] = React14.useState(initialEvents);
5812
- const [users] = React14.useState(initialUsers);
5813
- const [badgeVariant, setBadgeVariant] = React14.useState(defaultBadgeVariant);
5814
- const [view, setView] = React14.useState(defaultView);
5815
- const [workingHours, setWorkingHours] = React14.useState(defaultWorkingHours);
5816
- const [visibleHours, setVisibleHours] = React14.useState(defaultVisibleHours);
5817
- React14.useEffect(() => {
5928
+ const [selectedDate, setSelectedDate] = React15.useState(defaultDate);
5929
+ const [selectedUserId, setSelectedUserId] = React15.useState(defaultUserId);
5930
+ const [events, setEventsState] = React15.useState(initialEvents);
5931
+ const [users] = React15.useState(initialUsers);
5932
+ const [badgeVariant, setBadgeVariant] = React15.useState(defaultBadgeVariant);
5933
+ const [view, setView] = React15.useState(defaultView);
5934
+ const [workingHours, setWorkingHours] = React15.useState(defaultWorkingHours);
5935
+ const [visibleHours, setVisibleHours] = React15.useState(defaultVisibleHours);
5936
+ React15.useEffect(() => {
5818
5937
  setEventsState(initialEvents);
5819
5938
  }, [initialEvents]);
5820
- const setEvents = React14.useCallback((newEvents) => {
5939
+ const setEvents = React15.useCallback((newEvents) => {
5821
5940
  setEventsState(newEvents);
5822
5941
  }, []);
5823
- const addEvent = React14.useCallback((event) => {
5942
+ const addEvent = React15.useCallback((event) => {
5824
5943
  setEventsState((prev) => [...prev, event]);
5825
5944
  onEventAdd?.(event);
5826
5945
  }, [onEventAdd]);
5827
- const updateEvent = React14.useCallback((event) => {
5946
+ const updateEvent = React15.useCallback((event) => {
5828
5947
  setEventsState(
5829
5948
  (prev) => prev.map((e) => e.id === event.id ? event : e)
5830
5949
  );
5831
5950
  onEventUpdate?.(event);
5832
5951
  }, [onEventUpdate]);
5833
- const deleteEvent = React14.useCallback((eventId) => {
5952
+ const deleteEvent = React15.useCallback((eventId) => {
5834
5953
  setEventsState((prev) => prev.filter((e) => e.id !== eventId));
5835
5954
  onEventDelete?.(eventId);
5836
5955
  }, [onEventDelete]);
5837
- const goToToday = React14.useCallback(() => {
5956
+ const goToToday = React15.useCallback(() => {
5838
5957
  setSelectedDate(/* @__PURE__ */ new Date());
5839
5958
  }, []);
5840
- const goToPrevious = React14.useCallback(() => {
5959
+ const goToPrevious = React15.useCallback(() => {
5841
5960
  setSelectedDate((current) => {
5842
5961
  switch (view) {
5843
5962
  case "day":
@@ -5855,7 +5974,7 @@ function EventCalendarProvider({
5855
5974
  }
5856
5975
  });
5857
5976
  }, [view]);
5858
- const goToNext = React14.useCallback(() => {
5977
+ const goToNext = React15.useCallback(() => {
5859
5978
  setSelectedDate((current) => {
5860
5979
  switch (view) {
5861
5980
  case "day":
@@ -5873,7 +5992,7 @@ function EventCalendarProvider({
5873
5992
  }
5874
5993
  });
5875
5994
  }, [view]);
5876
- const contextValue = React14.useMemo(
5995
+ const contextValue = React15.useMemo(
5877
5996
  () => ({
5878
5997
  // State
5879
5998
  selectedDate,
@@ -5920,7 +6039,7 @@ function EventCalendarProvider({
5920
6039
  return /* @__PURE__ */ jsx(CalendarContext.Provider, { value: contextValue, children });
5921
6040
  }
5922
6041
  function useEventCalendar() {
5923
- const context = React14.useContext(CalendarContext);
6042
+ const context = React15.useContext(CalendarContext);
5924
6043
  if (!context) {
5925
6044
  throw new Error("useEventCalendar must be used within an EventCalendarProvider");
5926
6045
  }
@@ -5928,14 +6047,14 @@ function useEventCalendar() {
5928
6047
  }
5929
6048
  function useFilteredEvents() {
5930
6049
  const { events, selectedUserId } = useEventCalendar();
5931
- return React14.useMemo(() => {
6050
+ return React15.useMemo(() => {
5932
6051
  if (!selectedUserId) return events;
5933
6052
  return events.filter((event) => event.user.id === selectedUserId);
5934
6053
  }, [events, selectedUserId]);
5935
6054
  }
5936
6055
  function useEventsInRange(startDate, endDate) {
5937
6056
  const filteredEvents = useFilteredEvents();
5938
- return React14.useMemo(() => {
6057
+ return React15.useMemo(() => {
5939
6058
  return filteredEvents.filter((event) => {
5940
6059
  const eventStart = new Date(event.startDate);
5941
6060
  const eventEnd = new Date(event.endDate);
@@ -6493,8 +6612,8 @@ function MoreEvents({ count, onClick, className }) {
6493
6612
  );
6494
6613
  }
6495
6614
  function TimeIndicator({ className }) {
6496
- const [now, setNow] = React14.useState(/* @__PURE__ */ new Date());
6497
- React14.useEffect(() => {
6615
+ const [now, setNow] = React15.useState(/* @__PURE__ */ new Date());
6616
+ React15.useEffect(() => {
6498
6617
  const interval = setInterval(() => setNow(/* @__PURE__ */ new Date()), 6e4);
6499
6618
  return () => clearInterval(interval);
6500
6619
  }, []);
@@ -6531,24 +6650,24 @@ function DateBadge({ date, className }) {
6531
6650
  }
6532
6651
  );
6533
6652
  }
6534
- var DragContext = React14.createContext(null);
6653
+ var DragContext = React15.createContext(null);
6535
6654
  function DragProvider({
6536
6655
  children,
6537
6656
  snapMinutes = 15,
6538
6657
  onDragStart,
6539
6658
  onDragEnd
6540
6659
  }) {
6541
- const [draggedEvent, setDraggedEventState] = React14.useState(null);
6542
- const [isDragging, setIsDragging] = React14.useState(false);
6660
+ const [draggedEvent, setDraggedEventState] = React15.useState(null);
6661
+ const [isDragging, setIsDragging] = React15.useState(false);
6543
6662
  const { updateEvent } = useEventCalendar();
6544
- const setDraggedEvent = React14.useCallback((event) => {
6663
+ const setDraggedEvent = React15.useCallback((event) => {
6545
6664
  setDraggedEventState(event);
6546
6665
  setIsDragging(!!event);
6547
6666
  if (event) {
6548
6667
  onDragStart?.(event);
6549
6668
  }
6550
6669
  }, [onDragStart]);
6551
- const handleDrop = React14.useCallback((newStartDate) => {
6670
+ const handleDrop = React15.useCallback((newStartDate) => {
6552
6671
  if (!draggedEvent) return;
6553
6672
  const snappedDate = snapToInterval(newStartDate, snapMinutes);
6554
6673
  const { startDate, endDate } = calculateDropDates(draggedEvent, snappedDate);
@@ -6561,7 +6680,7 @@ function DragProvider({
6561
6680
  onDragEnd?.(updatedEvent, new Date(startDate), new Date(endDate));
6562
6681
  setDraggedEvent(null);
6563
6682
  }, [draggedEvent, snapMinutes, updateEvent, onDragEnd, setDraggedEvent]);
6564
- const contextValue = React14.useMemo(
6683
+ const contextValue = React15.useMemo(
6565
6684
  () => ({
6566
6685
  draggedEvent,
6567
6686
  setDraggedEvent,
@@ -6572,7 +6691,7 @@ function DragProvider({
6572
6691
  return /* @__PURE__ */ jsx(DragContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(DragDropHandler, { onDrop: handleDrop, children }) });
6573
6692
  }
6574
6693
  function useDrag() {
6575
- const context = React14.useContext(DragContext);
6694
+ const context = React15.useContext(DragContext);
6576
6695
  if (!context) {
6577
6696
  throw new Error("useDrag must be used within a DragProvider");
6578
6697
  }
@@ -6617,7 +6736,7 @@ function DroppableZone({
6617
6736
  }) {
6618
6737
  const { draggedEvent, setDraggedEvent } = useDrag();
6619
6738
  const { updateEvent } = useEventCalendar();
6620
- const [isOver, setIsOver] = React14.useState(false);
6739
+ const [isOver, setIsOver] = React15.useState(false);
6621
6740
  const handleDragOver = (e) => {
6622
6741
  e.preventDefault();
6623
6742
  e.dataTransfer.dropEffect = "move";
@@ -6655,23 +6774,23 @@ function DroppableZone({
6655
6774
  function useDroppable({ date, hour, minute = 0, onDrop }) {
6656
6775
  const { draggedEvent, setDraggedEvent } = useDrag();
6657
6776
  const { updateEvent } = useEventCalendar();
6658
- const [isOver, setIsOver] = React14.useState(false);
6659
- const dropTargetDate = React14.useMemo(() => {
6777
+ const [isOver, setIsOver] = React15.useState(false);
6778
+ const dropTargetDate = React15.useMemo(() => {
6660
6779
  const targetDate = new Date(date);
6661
6780
  if (hour !== void 0) {
6662
6781
  targetDate.setHours(hour, minute, 0, 0);
6663
6782
  }
6664
6783
  return targetDate;
6665
6784
  }, [date, hour, minute]);
6666
- const handleDragOver = React14.useCallback((e) => {
6785
+ const handleDragOver = React15.useCallback((e) => {
6667
6786
  e.preventDefault();
6668
6787
  e.dataTransfer.dropEffect = "move";
6669
6788
  if (!isOver) setIsOver(true);
6670
6789
  }, [isOver]);
6671
- const handleDragLeave = React14.useCallback(() => {
6790
+ const handleDragLeave = React15.useCallback(() => {
6672
6791
  setIsOver(false);
6673
6792
  }, []);
6674
- const handleDrop = React14.useCallback((e) => {
6793
+ const handleDrop = React15.useCallback((e) => {
6675
6794
  e.preventDefault();
6676
6795
  setIsOver(false);
6677
6796
  if (!draggedEvent) return;
@@ -6698,13 +6817,13 @@ function useDroppable({ date, hour, minute = 0, onDrop }) {
6698
6817
  function useDraggable(event, disabled = false) {
6699
6818
  const { setDraggedEvent, draggedEvent } = useDrag();
6700
6819
  const isDragged = draggedEvent?.id === event.id;
6701
- const handleDragStart = React14.useCallback((e) => {
6820
+ const handleDragStart = React15.useCallback((e) => {
6702
6821
  if (disabled) return;
6703
6822
  e.dataTransfer.effectAllowed = "move";
6704
6823
  e.dataTransfer.setData("text/plain", event.id);
6705
6824
  setDraggedEvent(event);
6706
6825
  }, [disabled, event, setDraggedEvent]);
6707
- const handleDragEnd = React14.useCallback(() => {
6826
+ const handleDragEnd = React15.useCallback(() => {
6708
6827
  setDraggedEvent(null);
6709
6828
  }, [setDraggedEvent]);
6710
6829
  return {
@@ -6745,15 +6864,15 @@ function MonthView({
6745
6864
  }) {
6746
6865
  const { selectedDate, badgeVariant, setSelectedDate, setView } = useEventCalendar();
6747
6866
  const filteredEvents = useFilteredEvents();
6748
- const { singleDayEvents, multiDayEvents } = React14.useMemo(
6867
+ const { singleDayEvents, multiDayEvents } = React15.useMemo(
6749
6868
  () => splitEventsByDuration(filteredEvents),
6750
6869
  [filteredEvents]
6751
6870
  );
6752
- const cells = React14.useMemo(
6871
+ const cells = React15.useMemo(
6753
6872
  () => getCalendarCells(selectedDate),
6754
6873
  [selectedDate]
6755
6874
  );
6756
- const eventPositions = React14.useMemo(
6875
+ const eventPositions = React15.useMemo(
6757
6876
  () => calculateMonthEventPositions(multiDayEvents, singleDayEvents, selectedDate),
6758
6877
  [multiDayEvents, singleDayEvents, selectedDate]
6759
6878
  );
@@ -6935,7 +7054,7 @@ function WeekView({
6935
7054
  visibleHours
6936
7055
  } = useEventCalendar();
6937
7056
  const filteredEvents = useFilteredEvents();
6938
- const { singleDayEvents, multiDayEvents } = React14.useMemo(
7057
+ const { singleDayEvents, multiDayEvents } = React15.useMemo(
6939
7058
  () => splitEventsByDuration(filteredEvents),
6940
7059
  [filteredEvents]
6941
7060
  );
@@ -7141,8 +7260,8 @@ function CalendarTimeline({
7141
7260
  firstVisibleHour,
7142
7261
  lastVisibleHour
7143
7262
  }) {
7144
- const [currentTime, setCurrentTime] = React14.useState(/* @__PURE__ */ new Date());
7145
- React14.useEffect(() => {
7263
+ const [currentTime, setCurrentTime] = React15.useState(/* @__PURE__ */ new Date());
7264
+ React15.useEffect(() => {
7146
7265
  const interval = setInterval(() => {
7147
7266
  setCurrentTime(/* @__PURE__ */ new Date());
7148
7267
  }, 6e4);
@@ -7225,7 +7344,7 @@ function DayView({
7225
7344
  visibleHours
7226
7345
  } = useEventCalendar();
7227
7346
  const filteredEvents = useFilteredEvents();
7228
- const { singleDayEvents, multiDayEvents } = React14.useMemo(
7347
+ const { singleDayEvents, multiDayEvents } = React15.useMemo(
7229
7348
  () => splitEventsByDuration(filteredEvents),
7230
7349
  [filteredEvents]
7231
7350
  );
@@ -7233,7 +7352,7 @@ function DayView({
7233
7352
  visibleHours,
7234
7353
  singleDayEvents
7235
7354
  );
7236
- const currentEvents = React14.useMemo(() => {
7355
+ const currentEvents = React15.useMemo(() => {
7237
7356
  if (!isToday(selectedDate)) return [];
7238
7357
  return getCurrentEvents(singleDayEvents);
7239
7358
  }, [singleDayEvents, selectedDate]);
@@ -7457,8 +7576,8 @@ function CalendarTimeline2({
7457
7576
  firstVisibleHour,
7458
7577
  lastVisibleHour
7459
7578
  }) {
7460
- const [currentTime, setCurrentTime] = React14.useState(/* @__PURE__ */ new Date());
7461
- React14.useEffect(() => {
7579
+ const [currentTime, setCurrentTime] = React15.useState(/* @__PURE__ */ new Date());
7580
+ React15.useEffect(() => {
7462
7581
  const interval = setInterval(() => {
7463
7582
  setCurrentTime(/* @__PURE__ */ new Date());
7464
7583
  }, 6e4);
@@ -7492,7 +7611,7 @@ function YearView({
7492
7611
  }) {
7493
7612
  const { selectedDate, setSelectedDate, setView } = useEventCalendar();
7494
7613
  const filteredEvents = useFilteredEvents();
7495
- const months = React14.useMemo(() => {
7614
+ const months = React15.useMemo(() => {
7496
7615
  const yearStart = startOfYear(selectedDate);
7497
7616
  return Array.from({ length: 12 }, (_, i) => addMonths(yearStart, i));
7498
7617
  }, [selectedDate]);
@@ -7615,11 +7734,11 @@ function AgendaView({
7615
7734
  }) {
7616
7735
  const { selectedDate, setSelectedDate, setView } = useEventCalendar();
7617
7736
  const filteredEvents = useFilteredEvents();
7618
- const { singleDayEvents, multiDayEvents } = React14.useMemo(
7737
+ const { singleDayEvents, multiDayEvents } = React15.useMemo(
7619
7738
  () => splitEventsByDuration(filteredEvents),
7620
7739
  [filteredEvents]
7621
7740
  );
7622
- const eventsByDay = React14.useMemo(() => {
7741
+ const eventsByDay = React15.useMemo(() => {
7623
7742
  const allDates = /* @__PURE__ */ new Map();
7624
7743
  singleDayEvents.forEach((event) => {
7625
7744
  const eventDate = parseISO(event.startDate);
@@ -7792,7 +7911,9 @@ function CalendarHeader({
7792
7911
  // Hidden by default, controlled via settings
7793
7912
  showToday = true,
7794
7913
  showAddButton = true,
7795
- onAddClick
7914
+ showSettings = true,
7915
+ onAddClick,
7916
+ onSettingsClick
7796
7917
  }) {
7797
7918
  const {
7798
7919
  selectedDate,
@@ -7941,9 +8062,22 @@ function CalendarHeader({
7941
8062
  }
7942
8063
  )
7943
8064
  ] }),
7944
- showAddButton && /* @__PURE__ */ jsxs(Button, { onClick: onAddClick, className: "w-full sm:w-auto", children: [
7945
- /* @__PURE__ */ jsx(Plus, {}),
7946
- "Add Event"
8065
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
8066
+ showSettings && /* @__PURE__ */ jsx(
8067
+ Button,
8068
+ {
8069
+ variant: "outline",
8070
+ size: "icon",
8071
+ onClick: onSettingsClick,
8072
+ className: "shrink-0",
8073
+ "aria-label": "Calendar settings",
8074
+ children: /* @__PURE__ */ jsx(Settings, { className: "size-4" })
8075
+ }
8076
+ ),
8077
+ showAddButton && /* @__PURE__ */ jsxs(Button, { onClick: onAddClick, className: "w-full sm:w-auto", children: [
8078
+ /* @__PURE__ */ jsx(Plus, {}),
8079
+ "Add Event"
8080
+ ] })
7947
8081
  ] })
7948
8082
  ] })
7949
8083
  ]
@@ -7953,7 +8087,9 @@ function CalendarHeader({
7953
8087
  function CalendarHeaderCompact({
7954
8088
  className,
7955
8089
  showAddButton = true,
7956
- onAddClick
8090
+ showSettings = true,
8091
+ onAddClick,
8092
+ onSettingsClick
7957
8093
  }) {
7958
8094
  const {
7959
8095
  selectedDate,
@@ -8033,7 +8169,18 @@ function CalendarHeaderCompact({
8033
8169
  }
8034
8170
  )
8035
8171
  ] }),
8036
- showAddButton && /* @__PURE__ */ jsx(Button, { size: "sm", onClick: onAddClick, className: "ml-2 size-8 p-0", children: /* @__PURE__ */ jsx(Plus, { className: "size-4" }) })
8172
+ showSettings && /* @__PURE__ */ jsx(
8173
+ Button,
8174
+ {
8175
+ variant: "outline",
8176
+ size: "icon",
8177
+ onClick: onSettingsClick,
8178
+ className: "ml-2 size-8",
8179
+ "aria-label": "Calendar settings",
8180
+ children: /* @__PURE__ */ jsx(Settings, { className: "size-4" })
8181
+ }
8182
+ ),
8183
+ showAddButton && /* @__PURE__ */ jsx(Button, { size: "sm", onClick: onAddClick, className: "size-8 p-0", children: /* @__PURE__ */ jsx(Plus, { className: "size-4" }) })
8037
8184
  ] })
8038
8185
  ]
8039
8186
  }
@@ -8056,16 +8203,16 @@ function EventDialog({
8056
8203
  defaultUserId
8057
8204
  }) {
8058
8205
  const { addEvent, updateEvent, deleteEvent, users } = useEventCalendar();
8059
- const [title, setTitle] = React14.useState("");
8060
- const [description, setDescription] = React14.useState("");
8061
- const [startDate, setStartDate] = React14.useState("");
8062
- const [startTime, setStartTime] = React14.useState("");
8063
- const [endDate, setEndDate] = React14.useState("");
8064
- const [endTime, setEndTime] = React14.useState("");
8065
- const [color, setColor] = React14.useState("blue");
8066
- const [userId, setUserId] = React14.useState("");
8067
- const [isSubmitting, setIsSubmitting] = React14.useState(false);
8068
- React14.useEffect(() => {
8206
+ const [title, setTitle] = React15.useState("");
8207
+ const [description, setDescription] = React15.useState("");
8208
+ const [startDate, setStartDate] = React15.useState("");
8209
+ const [startTime, setStartTime] = React15.useState("");
8210
+ const [endDate, setEndDate] = React15.useState("");
8211
+ const [endTime, setEndTime] = React15.useState("");
8212
+ const [color, setColor] = React15.useState("blue");
8213
+ const [userId, setUserId] = React15.useState("");
8214
+ const [isSubmitting, setIsSubmitting] = React15.useState(false);
8215
+ React15.useEffect(() => {
8069
8216
  if (open) {
8070
8217
  if (mode === "edit" && event) {
8071
8218
  const start = parseISO(event.startDate);
@@ -8288,7 +8435,7 @@ function QuickAddEvent({
8288
8435
  onOpenDialog,
8289
8436
  onClose
8290
8437
  }) {
8291
- const [title, setTitle] = React14.useState("");
8438
+ const [title, setTitle] = React15.useState("");
8292
8439
  const { users } = useEventCalendar();
8293
8440
  const handleSubmit = (e) => {
8294
8441
  e.preventDefault();
@@ -8355,8 +8502,8 @@ var HOUR_OPTIONS = Array.from({ length: 25 }, (_, i) => {
8355
8502
  });
8356
8503
  function ChangeVisibleHoursInput() {
8357
8504
  const { visibleHours, setVisibleHours } = useEventCalendar();
8358
- const [from, setFrom] = React14.useState(visibleHours.from);
8359
- const [to, setTo] = React14.useState(visibleHours.to);
8505
+ const [from, setFrom] = React15.useState(visibleHours.from);
8506
+ const [to, setTo] = React15.useState(visibleHours.to);
8360
8507
  const handleApply = () => {
8361
8508
  const toHour = to === 0 ? 24 : to;
8362
8509
  setVisibleHours({ from, to: toHour });
@@ -8402,7 +8549,7 @@ var HOUR_OPTIONS2 = Array.from({ length: 25 }, (_, i) => {
8402
8549
  });
8403
8550
  function ChangeWorkingHoursInput() {
8404
8551
  const { workingHours, setWorkingHours } = useEventCalendar();
8405
- const [localWorkingHours, setLocalWorkingHours] = React14.useState({
8552
+ const [localWorkingHours, setLocalWorkingHours] = React15.useState({
8406
8553
  ...workingHours
8407
8554
  });
8408
8555
  const handleToggleDay = (dayId) => {
@@ -8497,27 +8644,62 @@ function ChangeWorkingHoursInput() {
8497
8644
  /* @__PURE__ */ jsx(Button, { className: "mt-4 w-fit", onClick: handleSave, children: "Apply" })
8498
8645
  ] });
8499
8646
  }
8500
- function CalendarSettingsPanel({
8647
+ function CalendarSettingsContent({
8501
8648
  className,
8502
8649
  showBadgeVariant = true,
8503
8650
  showVisibleHours = true,
8504
8651
  showWorkingHours = true
8505
8652
  }) {
8506
- return /* @__PURE__ */ jsx(Accordion, { type: "single", collapsible: true, className: cn("relative z-10 bg-background", className), children: /* @__PURE__ */ jsxs(AccordionItem, { value: "settings", className: "border-none", children: [
8507
- /* @__PURE__ */ jsx(AccordionTrigger, { className: "flex-none gap-2 py-0 hover:no-underline", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
8508
- /* @__PURE__ */ jsx(Settings, { className: "size-4" }),
8509
- /* @__PURE__ */ jsx("p", { className: "text-base font-semibold", children: "Calendar settings" })
8510
- ] }) }),
8511
- /* @__PURE__ */ jsx(AccordionContent, { children: /* @__PURE__ */ jsxs("div", { className: "mt-4 flex flex-col gap-6", children: [
8512
- showBadgeVariant && /* @__PURE__ */ jsx(ChangeBadgeVariantInput, {}),
8513
- showVisibleHours && /* @__PURE__ */ jsx(ChangeVisibleHoursInput, {}),
8514
- showWorkingHours && /* @__PURE__ */ jsx(ChangeWorkingHoursInput, {})
8515
- ] }) })
8653
+ return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-6", className), children: [
8654
+ showBadgeVariant && /* @__PURE__ */ jsx(ChangeBadgeVariantInput, {}),
8655
+ showVisibleHours && /* @__PURE__ */ jsx(ChangeVisibleHoursInput, {}),
8656
+ showWorkingHours && /* @__PURE__ */ jsx(ChangeWorkingHoursInput, {})
8657
+ ] });
8658
+ }
8659
+ function CalendarSettingsDialog({
8660
+ open,
8661
+ onOpenChange,
8662
+ showBadgeVariant = true,
8663
+ showVisibleHours = true,
8664
+ showWorkingHours = true
8665
+ }) {
8666
+ return /* @__PURE__ */ jsx(Dialog, { open, onOpenChange, children: /* @__PURE__ */ jsxs(DialogContent, { className: "max-w-md", children: [
8667
+ /* @__PURE__ */ jsxs(DialogHeader, { children: [
8668
+ /* @__PURE__ */ jsxs(DialogTitle, { className: "flex items-center gap-2", children: [
8669
+ /* @__PURE__ */ jsx(Settings, { className: "size-5" }),
8670
+ "Calendar Settings"
8671
+ ] }),
8672
+ /* @__PURE__ */ jsx(DialogDescription, { children: "Customize your calendar view and preferences." })
8673
+ ] }),
8674
+ /* @__PURE__ */ jsx(
8675
+ CalendarSettingsContent,
8676
+ {
8677
+ showBadgeVariant,
8678
+ showVisibleHours,
8679
+ showWorkingHours
8680
+ }
8681
+ )
8516
8682
  ] }) });
8517
8683
  }
8684
+ function CalendarSettingsButton({
8685
+ onClick,
8686
+ className
8687
+ }) {
8688
+ return /* @__PURE__ */ jsx(
8689
+ Button,
8690
+ {
8691
+ variant: "outline",
8692
+ size: "icon",
8693
+ onClick,
8694
+ className: cn("shrink-0", className),
8695
+ "aria-label": "Calendar settings",
8696
+ children: /* @__PURE__ */ jsx(Settings, { className: "size-4" })
8697
+ }
8698
+ );
8699
+ }
8518
8700
  function useMediaQuery(query) {
8519
- const [matches, setMatches] = React14.useState(false);
8520
- React14.useEffect(() => {
8701
+ const [matches, setMatches] = React15.useState(false);
8702
+ React15.useEffect(() => {
8521
8703
  const media = window.matchMedia(query);
8522
8704
  setMatches(media.matches);
8523
8705
  const listener = (event) => {
@@ -8569,10 +8751,11 @@ function BigCalendarInner({
8569
8751
  maxEventsPerDay
8570
8752
  }) {
8571
8753
  const { view, setView } = useEventCalendar();
8572
- const [dialogOpen, setDialogOpen] = React14.useState(false);
8573
- const [selectedEvent, setSelectedEvent] = React14.useState(null);
8574
- const [dialogMode, setDialogMode] = React14.useState("add");
8575
- const [defaultDate, setDefaultDate] = React14.useState(/* @__PURE__ */ new Date());
8754
+ const [dialogOpen, setDialogOpen] = React15.useState(false);
8755
+ const [settingsDialogOpen, setSettingsDialogOpen] = React15.useState(false);
8756
+ const [selectedEvent, setSelectedEvent] = React15.useState(null);
8757
+ const [dialogMode, setDialogMode] = React15.useState("add");
8758
+ const [defaultDate, setDefaultDate] = React15.useState(/* @__PURE__ */ new Date());
8576
8759
  const isMobile = useMediaQuery("(max-width: 768px)");
8577
8760
  const isCompact = compact === "auto" ? isMobile : compact;
8578
8761
  const handleAddClick = () => {
@@ -8581,6 +8764,9 @@ function BigCalendarInner({
8581
8764
  setDefaultDate(/* @__PURE__ */ new Date());
8582
8765
  setDialogOpen(true);
8583
8766
  };
8767
+ const handleSettingsClick = () => {
8768
+ setSettingsDialogOpen(true);
8769
+ };
8584
8770
  const handleEventClick = (event) => {
8585
8771
  setSelectedEvent(event);
8586
8772
  setDialogMode("edit");
@@ -8604,45 +8790,46 @@ function BigCalendarInner({
8604
8790
  const Wrapper = bordered ? Card : "div";
8605
8791
  const Content14 = bordered ? CardContent : "div";
8606
8792
  return /* @__PURE__ */ jsxs(Fragment, { children: [
8607
- /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-4 relative", className), children: [
8608
- /* @__PURE__ */ jsxs(
8609
- Wrapper,
8610
- {
8611
- className: cn(
8612
- "flex min-h-[600px] flex-col overflow-hidden rounded-sm",
8613
- !bordered && "border border-border bg-card"
8614
- ),
8615
- children: [
8616
- showHeader && (isCompact ? /* @__PURE__ */ jsx(
8617
- CalendarHeaderCompact,
8618
- {
8619
- showAddButton,
8620
- onAddClick: handleAddClick
8621
- }
8622
- ) : /* @__PURE__ */ jsx(
8623
- CalendarHeader,
8624
- {
8625
- showAddButton,
8626
- onAddClick: handleAddClick
8627
- }
8628
- )),
8629
- /* @__PURE__ */ jsx(Content14, { className: cn("flex-1 overflow-hidden", bordered ? "p-0" : ""), children: /* @__PURE__ */ jsx(
8630
- CalendarView,
8631
- {
8632
- view,
8633
- weekStartsOn,
8634
- maxEventsPerDay,
8635
- onEventClick: handleEventClick,
8636
- onDateClick: handleDateClick,
8637
- onMoreClick: handleMoreClick,
8638
- onTimeClick: handleTimeClick
8639
- }
8640
- ) })
8641
- ]
8642
- }
8643
- ),
8644
- showSettings && /* @__PURE__ */ jsx(CalendarSettingsPanel, {})
8645
- ] }),
8793
+ /* @__PURE__ */ jsx("div", { className: cn("flex flex-col gap-4 relative", className), children: /* @__PURE__ */ jsxs(
8794
+ Wrapper,
8795
+ {
8796
+ className: cn(
8797
+ "flex min-h-[600px] flex-col overflow-hidden rounded-sm",
8798
+ !bordered && "border border-border bg-card"
8799
+ ),
8800
+ children: [
8801
+ showHeader && (isCompact ? /* @__PURE__ */ jsx(
8802
+ CalendarHeaderCompact,
8803
+ {
8804
+ showAddButton,
8805
+ showSettings,
8806
+ onAddClick: handleAddClick,
8807
+ onSettingsClick: handleSettingsClick
8808
+ }
8809
+ ) : /* @__PURE__ */ jsx(
8810
+ CalendarHeader,
8811
+ {
8812
+ showAddButton,
8813
+ showSettings,
8814
+ onAddClick: handleAddClick,
8815
+ onSettingsClick: handleSettingsClick
8816
+ }
8817
+ )),
8818
+ /* @__PURE__ */ jsx(Content14, { className: cn("flex-1 overflow-hidden", bordered ? "p-0" : ""), children: /* @__PURE__ */ jsx(
8819
+ CalendarView,
8820
+ {
8821
+ view,
8822
+ weekStartsOn,
8823
+ maxEventsPerDay,
8824
+ onEventClick: handleEventClick,
8825
+ onDateClick: handleDateClick,
8826
+ onMoreClick: handleMoreClick,
8827
+ onTimeClick: handleTimeClick
8828
+ }
8829
+ ) })
8830
+ ]
8831
+ }
8832
+ ) }),
8646
8833
  /* @__PURE__ */ jsx(
8647
8834
  EventDialog,
8648
8835
  {
@@ -8652,6 +8839,13 @@ function BigCalendarInner({
8652
8839
  event: selectedEvent,
8653
8840
  defaultDate
8654
8841
  }
8842
+ ),
8843
+ showSettings && /* @__PURE__ */ jsx(
8844
+ CalendarSettingsDialog,
8845
+ {
8846
+ open: settingsDialogOpen,
8847
+ onOpenChange: setSettingsDialogOpen
8848
+ }
8655
8849
  )
8656
8850
  ] });
8657
8851
  }
@@ -8720,6 +8914,6 @@ function CalendarView({
8720
8914
  }
8721
8915
  }
8722
8916
 
8723
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, AgendaView, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AspectRatio, Avatar, AvatarFallback, AvatarImage, BADGE_VARIANT_LABELS, Badge, BigCalendar, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, Calendar, CalendarContext, CalendarDayButton, CalendarHeader, CalendarHeaderCompact, CalendarSettingsPanel, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChangeBadgeVariantInput, ChangeVisibleHoursInput, ChangeWorkingHoursInput, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox, Collapsible, CollapsibleContent2 as CollapsibleContent, CollapsibleTrigger2 as CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DEFAULT_VISIBLE_HOURS, DEFAULT_WORKING_HOURS, DateBadge, DayView, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DragContext, DragProvider, DraggableEvent, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, DroppableZone, EVENT_COLORS, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, EventBadge, EventCalendarProvider, EventDialog, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, HoverCard, HoverCardContent, HoverCardTrigger, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, Item6 as Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Kbd, KbdGroup, Label2 as Label, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, MonthView, MoreEvents, NativeSelect, NativeSelectOptGroup, NativeSelectOption, NavMain, NavProjects, NavSecondary, NavUser, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, PlayerCanvas, PlayerCanvasActionButton, PlayerCanvasControls, PlayerCanvasDivider, PlayerCanvasInfo, PlayerCanvasLabel, PlayerCanvasPlayButton, PlayerCanvasProgress, PlayerCanvasSkipButton, PlayerCanvasTitle, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, Progress, QuickAddEvent, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, ScrollArea, ScrollBar, SearchForm, SearchTrigger, Section, SectionContent, SectionDescription, SectionFooter, SectionHeader, SectionTitle, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetBody, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, SiteHeader, Skeleton, Slider, Spinner, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, TimeIndicator, Toaster, Toggle, ToggleGroup, ToggleGroupItem, ToolBarCanvas, ToolBarCanvasButton, ToolBarCanvasDivider, ToolBarCanvasGroup, Tooltip2 as Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, UserAvatarsDropdown, VIEW_LABELS, WeekView, YearView, badgeVariants, buttonGroupVariants, buttonVariants, calculateDropDates, calculateMonthEventPositions, cardVariants, createDefaultEvent, formatDateRange, formatTime, generateEventId, getCalendarCells, getCurrentEvents, getDayHours, getEventBlockStyle, getEventDuration, getEventDurationMinutes, getEventsCount, getEventsForDate, getEventsInRange, getHeaderLabel, getMonthCellEvents, getMonthDays, getTimeHeight, getTimePosition, getViewDateRange, getVisibleHours, getWeekDayNames, getWeekDays, getYearMonths, groupEvents, isMultiDayEvent, isWorkingHour, navigateDate, navigationMenuTriggerStyle, playerCanvasPlayButtonVariants, playerCanvasSkipButtonVariants, rangeText, sectionVariants, snapToInterval, sortEvents, splitEventsByDuration, toggleVariants, toolBarCanvasButtonVariants, useDrag, useDraggable, useDroppable, useEventCalendar, useEventsInRange, useFilteredEvents, useFormField, useIsMobile, useSearchShortcut, useSidebar };
8917
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, AgendaView, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AspectRatio, Avatar, AvatarFallback, AvatarImage, BADGE_VARIANT_LABELS, Badge, BigCalendar, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, Calendar, CalendarContext, CalendarDayButton, CalendarHeader, CalendarHeaderCompact, CalendarSettingsButton, CalendarSettingsContent, CalendarSettingsDialog, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChangeBadgeVariantInput, ChangeVisibleHoursInput, ChangeWorkingHoursInput, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox, Collapsible, CollapsibleContent2 as CollapsibleContent, CollapsibleTrigger2 as CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DEFAULT_VISIBLE_HOURS, DEFAULT_WORKING_HOURS, DateBadge, DayView, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DragContext, DragProvider, DraggableEvent, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, DroppableZone, EVENT_COLORS, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, EventBadge, EventCalendarProvider, EventDialog, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, HoverCard, HoverCardContent, HoverCardTrigger, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, Item6 as Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Kbd, KbdGroup, Label2 as Label, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, MonthView, MoreEvents, NativeSelect, NativeSelectOptGroup, NativeSelectOption, NavMain, NavProjects, NavSecondary, NavUser, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, PlayerCanvas, PlayerCanvasActionButton, PlayerCanvasControls, PlayerCanvasDivider, PlayerCanvasInfo, PlayerCanvasLabel, PlayerCanvasPlayButton, PlayerCanvasProgress, PlayerCanvasSkipButton, PlayerCanvasTitle, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, Progress, QuickAddEvent, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, ScrollArea, ScrollBar, SearchForm, SearchTrigger, Section, SectionContent, SectionDescription, SectionFooter, SectionHeader, SectionTitle, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetBody, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, SiteHeader, Skeleton, Slider, Spinner, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThemeSwitch, TimeIndicator, Toaster, Toggle, ToggleGroup, ToggleGroupItem, ToolBarCanvas, ToolBarCanvasButton, ToolBarCanvasDivider, ToolBarCanvasGroup, Tooltip2 as Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, UserAvatarsDropdown, VIEW_LABELS, WeekView, YearView, badgeVariants, buttonGroupVariants, buttonVariants, calculateDropDates, calculateMonthEventPositions, cardVariants, createDefaultEvent, formatDateRange, formatTime, generateEventId, getCalendarCells, getCurrentEvents, getDayHours, getEventBlockStyle, getEventDuration, getEventDurationMinutes, getEventsCount, getEventsForDate, getEventsInRange, getHeaderLabel, getMonthCellEvents, getMonthDays, getTimeHeight, getTimePosition, getViewDateRange, getVisibleHours, getWeekDayNames, getWeekDays, getYearMonths, groupEvents, isMultiDayEvent, isWorkingHour, navigateDate, navigationMenuTriggerStyle, playerCanvasPlayButtonVariants, playerCanvasSkipButtonVariants, rangeText, sectionVariants, snapToInterval, sortEvents, splitEventsByDuration, toggleVariants, toolBarCanvasButtonVariants, useDrag, useDraggable, useDroppable, useEventCalendar, useEventsInRange, useFilteredEvents, useFormField, useIsMobile, useSearchShortcut, useSidebar };
8724
8918
  //# sourceMappingURL=index.js.map
8725
8919
  //# sourceMappingURL=index.js.map