@bizapps/ui 1.0.0 → 1.2.2
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/README.md +235 -137
- package/dist/main.cjs +1381 -465
- package/dist/main.cjs.map +1 -1
- package/dist/main.css +1 -1
- package/dist/main.d.cts +325 -241
- package/dist/main.d.ts +325 -241
- package/dist/main.js +1343 -467
- package/dist/main.js.map +1 -1
- package/package.json +15 -12
package/dist/main.cjs
CHANGED
|
@@ -8,13 +8,13 @@ var tailwindMerge = require('tailwind-merge');
|
|
|
8
8
|
var jsxRuntime = require('react/jsx-runtime');
|
|
9
9
|
var react = require('react');
|
|
10
10
|
var radixUi = require('radix-ui');
|
|
11
|
-
var reactDayPicker = require('react-day-picker');
|
|
12
11
|
var dateFns = require('date-fns');
|
|
13
12
|
var useEmblaCarousel = require('embla-carousel-react');
|
|
14
13
|
var react$1 = require('motion/react');
|
|
15
14
|
var cmdk = require('cmdk');
|
|
16
15
|
var reactDropzone = require('react-dropzone');
|
|
17
16
|
var Color = require('color');
|
|
17
|
+
var reactDayPicker = require('react-day-picker');
|
|
18
18
|
var react$2 = require('@schedule-x/react');
|
|
19
19
|
var calendar = require('@schedule-x/calendar');
|
|
20
20
|
var eventsService = require('@schedule-x/events-service');
|
|
@@ -457,174 +457,6 @@ function Button({
|
|
|
457
457
|
}
|
|
458
458
|
);
|
|
459
459
|
}
|
|
460
|
-
function Calendar({
|
|
461
|
-
className,
|
|
462
|
-
classNames,
|
|
463
|
-
showOutsideDays = true,
|
|
464
|
-
captionLayout = "dropdown",
|
|
465
|
-
buttonVariant = "ghost",
|
|
466
|
-
locale,
|
|
467
|
-
formatters,
|
|
468
|
-
components,
|
|
469
|
-
fromYear,
|
|
470
|
-
toYear,
|
|
471
|
-
...props
|
|
472
|
-
}) {
|
|
473
|
-
const defaultClassNames = reactDayPicker.getDefaultClassNames();
|
|
474
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
475
|
-
reactDayPicker.DayPicker,
|
|
476
|
-
{
|
|
477
|
-
showOutsideDays,
|
|
478
|
-
className: cn(
|
|
479
|
-
"group/calendar bg-background p-3 font-sans [--cell-radius:var(--radius-md)] [--cell-size:--spacing(7)] in-data-[slot=card-content]:bg-transparent in-data-[slot=popover-content]:bg-transparent",
|
|
480
|
-
String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,
|
|
481
|
-
String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,
|
|
482
|
-
className
|
|
483
|
-
),
|
|
484
|
-
captionLayout,
|
|
485
|
-
startMonth: new Date(fromYear ?? 1900, 0),
|
|
486
|
-
endMonth: new Date(toYear ?? 2100, 11),
|
|
487
|
-
locale,
|
|
488
|
-
formatters: {
|
|
489
|
-
formatMonthDropdown: (date) => date.toLocaleString(locale?.code, { month: "short" }),
|
|
490
|
-
...formatters
|
|
491
|
-
},
|
|
492
|
-
classNames: {
|
|
493
|
-
root: cn("w-fit", defaultClassNames.root),
|
|
494
|
-
months: cn("relative flex flex-col gap-3 md:flex-row", defaultClassNames.months),
|
|
495
|
-
month: cn("flex w-full flex-col gap-3", defaultClassNames.month),
|
|
496
|
-
nav: cn(
|
|
497
|
-
"absolute inset-x-0 top-0 flex w-full items-center justify-between gap-2",
|
|
498
|
-
defaultClassNames.nav
|
|
499
|
-
),
|
|
500
|
-
button_previous: cn(
|
|
501
|
-
buttonVariants({ variant: buttonVariant }),
|
|
502
|
-
"size-7 p-0 select-none opacity-50 aria-disabled:opacity-30 transition-opacity duration-150 hover:opacity-100",
|
|
503
|
-
defaultClassNames.button_previous
|
|
504
|
-
),
|
|
505
|
-
button_next: cn(
|
|
506
|
-
buttonVariants({ variant: buttonVariant }),
|
|
507
|
-
"size-7 p-0 select-none opacity-50 aria-disabled:opacity-30 transition-opacity duration-150 hover:opacity-100",
|
|
508
|
-
defaultClassNames.button_next
|
|
509
|
-
),
|
|
510
|
-
month_caption: cn(
|
|
511
|
-
"flex h-(--cell-size) w-full items-center justify-center px-(--cell-size) tracking-tight",
|
|
512
|
-
defaultClassNames.month_caption
|
|
513
|
-
),
|
|
514
|
-
dropdowns: cn(
|
|
515
|
-
"flex h-(--cell-size) w-full items-center justify-center gap-1.5 text-sm font-semibold",
|
|
516
|
-
defaultClassNames.dropdowns
|
|
517
|
-
),
|
|
518
|
-
dropdown_root: cn(
|
|
519
|
-
"relative rounded-(--cell-radius)",
|
|
520
|
-
defaultClassNames.dropdown_root
|
|
521
|
-
),
|
|
522
|
-
dropdown: cn("absolute inset-0 bg-popover opacity-0", defaultClassNames.dropdown),
|
|
523
|
-
caption_label: cn(
|
|
524
|
-
"font-semibold select-none",
|
|
525
|
-
captionLayout === "label" ? "text-sm" : "flex items-center gap-1 rounded-(--cell-radius) text-sm [&>svg]:size-3.5 [&>svg]:text-muted-foreground",
|
|
526
|
-
defaultClassNames.caption_label
|
|
527
|
-
),
|
|
528
|
-
weekdays: cn("flex gap-1", defaultClassNames.weekdays),
|
|
529
|
-
weekday: cn(
|
|
530
|
-
"flex-1 rounded-(--cell-radius) text-[0.75rem] font-semibold text-muted-foreground/70 select-none tracking-wide",
|
|
531
|
-
defaultClassNames.weekday
|
|
532
|
-
),
|
|
533
|
-
week: cn("mt-2 flex w-full gap-1", defaultClassNames.week),
|
|
534
|
-
week_number_header: cn(
|
|
535
|
-
"w-(--cell-size) select-none",
|
|
536
|
-
defaultClassNames.week_number_header
|
|
537
|
-
),
|
|
538
|
-
week_number: cn(
|
|
539
|
-
"text-[0.75rem] text-muted-foreground/50 select-none",
|
|
540
|
-
defaultClassNames.week_number
|
|
541
|
-
),
|
|
542
|
-
day: cn(
|
|
543
|
-
"group/day relative aspect-square h-full w-full rounded-(--cell-radius) p-0 text-center select-none [&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius)",
|
|
544
|
-
props.showWeekNumber ? "[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)" : "[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)",
|
|
545
|
-
defaultClassNames.day
|
|
546
|
-
),
|
|
547
|
-
range_start: cn(
|
|
548
|
-
"relative isolate z-0 rounded-l-md bg-primary/8 after:absolute after:inset-y-0 after:right-0 after:w-3 after:bg-primary/8",
|
|
549
|
-
defaultClassNames.range_start
|
|
550
|
-
),
|
|
551
|
-
range_middle: cn("rounded-none bg-primary/8", defaultClassNames.range_middle),
|
|
552
|
-
range_end: cn(
|
|
553
|
-
"relative isolate z-0 rounded-r-md bg-primary/8 after:absolute after:inset-y-0 after:left-0 after:w-3 after:bg-primary/8",
|
|
554
|
-
defaultClassNames.range_end
|
|
555
|
-
),
|
|
556
|
-
today: cn("rounded-md bg-accent text-accent-foreground", defaultClassNames.today),
|
|
557
|
-
outside: cn(
|
|
558
|
-
"text-muted-foreground/50 aria-selected:text-muted-foreground/50",
|
|
559
|
-
defaultClassNames.outside
|
|
560
|
-
),
|
|
561
|
-
disabled: cn("text-muted-foreground/40 opacity-50", defaultClassNames.disabled),
|
|
562
|
-
hidden: cn("invisible", defaultClassNames.hidden),
|
|
563
|
-
...classNames
|
|
564
|
-
},
|
|
565
|
-
components: {
|
|
566
|
-
Root: ({ className: className2, rootRef, ...props2 }) => {
|
|
567
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
568
|
-
"div",
|
|
569
|
-
{
|
|
570
|
-
"data-slot": "calendar",
|
|
571
|
-
ref: rootRef,
|
|
572
|
-
className: cn(className2),
|
|
573
|
-
...props2
|
|
574
|
-
}
|
|
575
|
-
);
|
|
576
|
-
},
|
|
577
|
-
Chevron: ({ className: className2, orientation, ...props2 }) => {
|
|
578
|
-
if (orientation === "left") {
|
|
579
|
-
return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeftIcon, { className: cn("size-4", className2), ...props2 });
|
|
580
|
-
}
|
|
581
|
-
if (orientation === "right") {
|
|
582
|
-
return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRightIcon, { className: cn("size-4", className2), ...props2 });
|
|
583
|
-
}
|
|
584
|
-
return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDownIcon, { className: cn("size-4", className2), ...props2 });
|
|
585
|
-
},
|
|
586
|
-
DayButton: ({ ...props2 }) => /* @__PURE__ */ jsxRuntime.jsx(CalendarDayButton, { locale, ...props2 }),
|
|
587
|
-
WeekNumber: ({ children, ...props2 }) => {
|
|
588
|
-
return /* @__PURE__ */ jsxRuntime.jsx("td", { ...props2, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex size-(--cell-size) items-center justify-center text-center", children }) });
|
|
589
|
-
},
|
|
590
|
-
...components
|
|
591
|
-
},
|
|
592
|
-
...props
|
|
593
|
-
}
|
|
594
|
-
);
|
|
595
|
-
}
|
|
596
|
-
function CalendarDayButton({
|
|
597
|
-
className,
|
|
598
|
-
day,
|
|
599
|
-
modifiers,
|
|
600
|
-
locale,
|
|
601
|
-
...props
|
|
602
|
-
}) {
|
|
603
|
-
const defaultClassNames = reactDayPicker.getDefaultClassNames();
|
|
604
|
-
const ref = react.useRef(null);
|
|
605
|
-
react.useEffect(() => {
|
|
606
|
-
if (modifiers.focused) ref.current?.focus();
|
|
607
|
-
}, [modifiers.focused]);
|
|
608
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
609
|
-
Button,
|
|
610
|
-
{
|
|
611
|
-
ref,
|
|
612
|
-
variant: "ghost",
|
|
613
|
-
size: "icon-sm",
|
|
614
|
-
"data-day": day.date.toLocaleDateString(locale?.code),
|
|
615
|
-
"data-selected-single": modifiers.selected && !modifiers.range_start && !modifiers.range_end && !modifiers.range_middle,
|
|
616
|
-
"data-range-start": modifiers.range_start,
|
|
617
|
-
"data-range-end": modifiers.range_end,
|
|
618
|
-
"data-range-middle": modifiers.range_middle,
|
|
619
|
-
className: cn(
|
|
620
|
-
"group-data-[focused=true]/day:ring-primary/40 data-[range-end=true]:!bg-primary data-[range-end=true]:text-primary-foreground data-[range-middle=true]:!bg-primary/8 data-[range-middle=true]:text-foreground data-[range-start=true]:!bg-primary data-[range-start=true]:text-primary-foreground data-[selected-single=true]:!bg-primary data-[selected-single=true]:text-primary-foreground relative isolate z-10 flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 !rounded-md border-0 !bg-transparent leading-none font-normal transition-colors duration-150 group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:rounded-md group-data-[focused=true]/day:ring-[2px] hover:!bg-transparent data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md data-[selected-single=true]:rounded-md [&>span]:text-xs [&>span]:font-medium [&>span]:opacity-75",
|
|
621
|
-
defaultClassNames.day,
|
|
622
|
-
className
|
|
623
|
-
),
|
|
624
|
-
...props
|
|
625
|
-
}
|
|
626
|
-
);
|
|
627
|
-
}
|
|
628
460
|
function useControllableState({
|
|
629
461
|
prop,
|
|
630
462
|
defaultProp,
|
|
@@ -1110,6 +942,22 @@ function Input({ className, type, ...props }) {
|
|
|
1110
942
|
}
|
|
1111
943
|
);
|
|
1112
944
|
}
|
|
945
|
+
function Label({ className, ...props }) {
|
|
946
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
947
|
+
radixUi.Label.Root,
|
|
948
|
+
{
|
|
949
|
+
"data-slot": "label",
|
|
950
|
+
className: cn(
|
|
951
|
+
"text-foreground text-sm leading-6 font-medium transition-colors select-none",
|
|
952
|
+
"group-has-disabled/field:cursor-not-allowed group-has-disabled/field:opacity-50",
|
|
953
|
+
"peer-disabled:cursor-not-allowed peer-disabled:opacity-50",
|
|
954
|
+
"aria-invalid:text-destructive dark:aria-invalid:text-destructive/90",
|
|
955
|
+
className
|
|
956
|
+
),
|
|
957
|
+
...props
|
|
958
|
+
}
|
|
959
|
+
);
|
|
960
|
+
}
|
|
1113
961
|
|
|
1114
962
|
// src/utils/urlSecurity.ts
|
|
1115
963
|
var SAFE_HREF_PROTOCOLS = /* @__PURE__ */ new Set(["https:", "http:", "mailto:", "tel:"]);
|
|
@@ -1585,7 +1433,7 @@ var progressVariants = classVarianceAuthority.cva("relative flex w-full items-ce
|
|
|
1585
1433
|
size: "md"
|
|
1586
1434
|
}
|
|
1587
1435
|
});
|
|
1588
|
-
var progressIndicatorVariants = classVarianceAuthority.cva("size-full flex-1 transition-all", {
|
|
1436
|
+
var progressIndicatorVariants = classVarianceAuthority.cva("size-full flex-1 transition-all rounded-[5px]", {
|
|
1589
1437
|
variants: {
|
|
1590
1438
|
variant: {
|
|
1591
1439
|
default: "bg-[var(--color-main-blue-primary)]",
|
|
@@ -4144,49 +3992,217 @@ var ColorPickerPresets = ({ colors, className, ...props }) => {
|
|
|
4144
3992
|
}) });
|
|
4145
3993
|
};
|
|
4146
3994
|
ColorPickerPresets.displayName = "ColorPickerPresets";
|
|
4147
|
-
function
|
|
4148
|
-
mode = "single",
|
|
4149
|
-
selected,
|
|
4150
|
-
onSelect,
|
|
4151
|
-
placeholder = "Pick a date",
|
|
4152
|
-
disabled = false,
|
|
3995
|
+
function Calendar({
|
|
4153
3996
|
className,
|
|
4154
|
-
|
|
4155
|
-
|
|
3997
|
+
classNames,
|
|
3998
|
+
showOutsideDays = true,
|
|
3999
|
+
captionLayout = "dropdown",
|
|
4000
|
+
buttonVariant = "ghost",
|
|
4001
|
+
locale,
|
|
4002
|
+
formatters,
|
|
4003
|
+
components,
|
|
4004
|
+
fromYear,
|
|
4005
|
+
toYear,
|
|
4006
|
+
...props
|
|
4156
4007
|
}) {
|
|
4157
|
-
const
|
|
4158
|
-
|
|
4159
|
-
|
|
4160
|
-
|
|
4161
|
-
|
|
4162
|
-
|
|
4163
|
-
|
|
4164
|
-
|
|
4165
|
-
|
|
4166
|
-
|
|
4167
|
-
|
|
4168
|
-
|
|
4169
|
-
|
|
4170
|
-
|
|
4171
|
-
|
|
4172
|
-
|
|
4173
|
-
|
|
4174
|
-
|
|
4175
|
-
|
|
4176
|
-
|
|
4177
|
-
|
|
4178
|
-
|
|
4179
|
-
|
|
4180
|
-
|
|
4008
|
+
const defaultClassNames = reactDayPicker.getDefaultClassNames();
|
|
4009
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
4010
|
+
reactDayPicker.DayPicker,
|
|
4011
|
+
{
|
|
4012
|
+
showOutsideDays,
|
|
4013
|
+
className: cn(
|
|
4014
|
+
"group/calendar bg-background p-3 font-sans [--cell-radius:var(--radius-md)] [--cell-size:--spacing(7)] in-data-[slot=card-content]:bg-transparent in-data-[slot=popover-content]:bg-transparent",
|
|
4015
|
+
String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,
|
|
4016
|
+
String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,
|
|
4017
|
+
className
|
|
4018
|
+
),
|
|
4019
|
+
captionLayout,
|
|
4020
|
+
startMonth: new Date(fromYear ?? 1900, 0),
|
|
4021
|
+
endMonth: new Date(toYear ?? 2100, 11),
|
|
4022
|
+
locale,
|
|
4023
|
+
formatters: {
|
|
4024
|
+
formatMonthDropdown: (date) => date.toLocaleString(locale?.code, { month: "short" }),
|
|
4025
|
+
...formatters
|
|
4026
|
+
},
|
|
4027
|
+
classNames: {
|
|
4028
|
+
root: cn("w-fit", defaultClassNames.root),
|
|
4029
|
+
months: cn("relative flex flex-col gap-3 md:flex-row", defaultClassNames.months),
|
|
4030
|
+
month: cn("flex w-full flex-col gap-3", defaultClassNames.month),
|
|
4031
|
+
nav: cn(
|
|
4032
|
+
"absolute inset-x-0 top-0 flex w-full items-center justify-between gap-2",
|
|
4033
|
+
defaultClassNames.nav
|
|
4181
4034
|
),
|
|
4182
|
-
|
|
4183
|
-
|
|
4184
|
-
|
|
4185
|
-
|
|
4186
|
-
|
|
4187
|
-
|
|
4188
|
-
|
|
4189
|
-
|
|
4035
|
+
button_previous: cn(
|
|
4036
|
+
buttonVariants({ variant: buttonVariant }),
|
|
4037
|
+
"size-7 p-0 select-none opacity-50 aria-disabled:opacity-30 transition-opacity duration-150 hover:opacity-100",
|
|
4038
|
+
defaultClassNames.button_previous
|
|
4039
|
+
),
|
|
4040
|
+
button_next: cn(
|
|
4041
|
+
buttonVariants({ variant: buttonVariant }),
|
|
4042
|
+
"size-7 p-0 select-none opacity-50 aria-disabled:opacity-30 transition-opacity duration-150 hover:opacity-100",
|
|
4043
|
+
defaultClassNames.button_next
|
|
4044
|
+
),
|
|
4045
|
+
month_caption: cn(
|
|
4046
|
+
"flex h-(--cell-size) w-full items-center justify-center px-(--cell-size) tracking-tight",
|
|
4047
|
+
defaultClassNames.month_caption
|
|
4048
|
+
),
|
|
4049
|
+
dropdowns: cn(
|
|
4050
|
+
"flex h-(--cell-size) w-full items-center justify-center gap-1.5 text-sm font-semibold",
|
|
4051
|
+
defaultClassNames.dropdowns
|
|
4052
|
+
),
|
|
4053
|
+
dropdown_root: cn(
|
|
4054
|
+
"relative rounded-(--cell-radius)",
|
|
4055
|
+
defaultClassNames.dropdown_root
|
|
4056
|
+
),
|
|
4057
|
+
dropdown: cn("absolute inset-0 bg-popover opacity-0", defaultClassNames.dropdown),
|
|
4058
|
+
caption_label: cn(
|
|
4059
|
+
"font-semibold select-none",
|
|
4060
|
+
captionLayout === "label" ? "text-sm" : "flex items-center gap-1 rounded-(--cell-radius) text-sm [&>svg]:size-3.5 [&>svg]:text-muted-foreground",
|
|
4061
|
+
defaultClassNames.caption_label
|
|
4062
|
+
),
|
|
4063
|
+
weekdays: cn("flex gap-1", defaultClassNames.weekdays),
|
|
4064
|
+
weekday: cn(
|
|
4065
|
+
"flex-1 rounded-(--cell-radius) text-[0.75rem] font-semibold text-muted-foreground/70 select-none tracking-wide",
|
|
4066
|
+
defaultClassNames.weekday
|
|
4067
|
+
),
|
|
4068
|
+
week: cn("mt-2 flex w-full gap-1", defaultClassNames.week),
|
|
4069
|
+
week_number_header: cn(
|
|
4070
|
+
"w-(--cell-size) select-none",
|
|
4071
|
+
defaultClassNames.week_number_header
|
|
4072
|
+
),
|
|
4073
|
+
week_number: cn(
|
|
4074
|
+
"text-[0.75rem] text-muted-foreground/50 select-none",
|
|
4075
|
+
defaultClassNames.week_number
|
|
4076
|
+
),
|
|
4077
|
+
day: cn(
|
|
4078
|
+
"group/day relative aspect-square h-full w-full rounded-(--cell-radius) p-0 text-center select-none [&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius)",
|
|
4079
|
+
props.showWeekNumber ? "[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)" : "[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)",
|
|
4080
|
+
defaultClassNames.day
|
|
4081
|
+
),
|
|
4082
|
+
range_start: cn(
|
|
4083
|
+
"relative isolate z-0 rounded-l-md bg-primary/8 after:absolute after:inset-y-0 after:right-0 after:w-3 after:bg-primary/8",
|
|
4084
|
+
defaultClassNames.range_start
|
|
4085
|
+
),
|
|
4086
|
+
range_middle: cn("rounded-none bg-primary/8", defaultClassNames.range_middle),
|
|
4087
|
+
range_end: cn(
|
|
4088
|
+
"relative isolate z-0 rounded-r-md bg-primary/8 after:absolute after:inset-y-0 after:left-0 after:w-3 after:bg-primary/8",
|
|
4089
|
+
defaultClassNames.range_end
|
|
4090
|
+
),
|
|
4091
|
+
today: cn("rounded-md bg-accent text-accent-foreground", defaultClassNames.today),
|
|
4092
|
+
outside: cn(
|
|
4093
|
+
"text-muted-foreground/50 aria-selected:text-muted-foreground/50",
|
|
4094
|
+
defaultClassNames.outside
|
|
4095
|
+
),
|
|
4096
|
+
disabled: cn("text-muted-foreground/40 opacity-50", defaultClassNames.disabled),
|
|
4097
|
+
hidden: cn("invisible", defaultClassNames.hidden),
|
|
4098
|
+
...classNames
|
|
4099
|
+
},
|
|
4100
|
+
components: {
|
|
4101
|
+
Root: ({ className: className2, rootRef, ...props2 }) => {
|
|
4102
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
4103
|
+
"div",
|
|
4104
|
+
{
|
|
4105
|
+
"data-slot": "calendar",
|
|
4106
|
+
ref: rootRef,
|
|
4107
|
+
className: cn(className2),
|
|
4108
|
+
...props2
|
|
4109
|
+
}
|
|
4110
|
+
);
|
|
4111
|
+
},
|
|
4112
|
+
Chevron: ({ className: className2, orientation, ...props2 }) => {
|
|
4113
|
+
if (orientation === "left") {
|
|
4114
|
+
return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeftIcon, { className: cn("size-4", className2), ...props2 });
|
|
4115
|
+
}
|
|
4116
|
+
if (orientation === "right") {
|
|
4117
|
+
return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRightIcon, { className: cn("size-4", className2), ...props2 });
|
|
4118
|
+
}
|
|
4119
|
+
return /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDownIcon, { className: cn("size-4", className2), ...props2 });
|
|
4120
|
+
},
|
|
4121
|
+
DayButton: ({ ...props2 }) => /* @__PURE__ */ jsxRuntime.jsx(CalendarDayButton, { locale, ...props2 }),
|
|
4122
|
+
WeekNumber: ({ children, ...props2 }) => {
|
|
4123
|
+
return /* @__PURE__ */ jsxRuntime.jsx("td", { ...props2, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex size-(--cell-size) items-center justify-center text-center", children }) });
|
|
4124
|
+
},
|
|
4125
|
+
...components
|
|
4126
|
+
},
|
|
4127
|
+
...props
|
|
4128
|
+
}
|
|
4129
|
+
);
|
|
4130
|
+
}
|
|
4131
|
+
function CalendarDayButton({
|
|
4132
|
+
className,
|
|
4133
|
+
day,
|
|
4134
|
+
modifiers,
|
|
4135
|
+
locale,
|
|
4136
|
+
...props
|
|
4137
|
+
}) {
|
|
4138
|
+
const defaultClassNames = reactDayPicker.getDefaultClassNames();
|
|
4139
|
+
const ref = react.useRef(null);
|
|
4140
|
+
react.useEffect(() => {
|
|
4141
|
+
if (modifiers.focused) ref.current?.focus();
|
|
4142
|
+
}, [modifiers.focused]);
|
|
4143
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
4144
|
+
Button,
|
|
4145
|
+
{
|
|
4146
|
+
ref,
|
|
4147
|
+
variant: "ghost",
|
|
4148
|
+
size: "icon-sm",
|
|
4149
|
+
"data-day": day.date.toLocaleDateString(locale?.code),
|
|
4150
|
+
"data-selected-single": modifiers.selected && !modifiers.range_start && !modifiers.range_end && !modifiers.range_middle,
|
|
4151
|
+
"data-range-start": modifiers.range_start,
|
|
4152
|
+
"data-range-end": modifiers.range_end,
|
|
4153
|
+
"data-range-middle": modifiers.range_middle,
|
|
4154
|
+
className: cn(
|
|
4155
|
+
"group-data-[focused=true]/day:ring-primary/40 data-[range-end=true]:!bg-primary data-[range-end=true]:text-primary-foreground data-[range-middle=true]:!bg-primary/8 data-[range-middle=true]:text-foreground data-[range-start=true]:!bg-primary data-[range-start=true]:text-primary-foreground data-[selected-single=true]:!bg-primary data-[selected-single=true]:text-primary-foreground relative isolate z-10 flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 !rounded-md border-0 !bg-transparent leading-none font-normal transition-colors duration-150 group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:rounded-md group-data-[focused=true]/day:ring-[2px] hover:!bg-transparent data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md data-[selected-single=true]:rounded-md [&>span]:text-xs [&>span]:font-medium [&>span]:opacity-75",
|
|
4156
|
+
defaultClassNames.day,
|
|
4157
|
+
className
|
|
4158
|
+
),
|
|
4159
|
+
...props
|
|
4160
|
+
}
|
|
4161
|
+
);
|
|
4162
|
+
}
|
|
4163
|
+
function DatePicker({
|
|
4164
|
+
mode = "single",
|
|
4165
|
+
selected,
|
|
4166
|
+
onSelect,
|
|
4167
|
+
placeholder = "Pick a date",
|
|
4168
|
+
disabled = false,
|
|
4169
|
+
className,
|
|
4170
|
+
fromDate,
|
|
4171
|
+
toDate
|
|
4172
|
+
}) {
|
|
4173
|
+
const [open, setOpen] = react.useState(false);
|
|
4174
|
+
const label = react.useMemo(() => {
|
|
4175
|
+
if (mode === "range") {
|
|
4176
|
+
const range = selected;
|
|
4177
|
+
if (range?.from && range?.to)
|
|
4178
|
+
return `${dateFns.format(range.from, "MMM d, yyyy")} \u2013 ${dateFns.format(range.to, "MMM d, yyyy")}`;
|
|
4179
|
+
if (range?.from) return `${dateFns.format(range.from, "MMM d, yyyy")} \u2013 \u2026`;
|
|
4180
|
+
return placeholder;
|
|
4181
|
+
}
|
|
4182
|
+
const date = selected;
|
|
4183
|
+
return date ? dateFns.format(date, "MMM d, yyyy") : placeholder;
|
|
4184
|
+
}, [mode, selected, placeholder]);
|
|
4185
|
+
const hasValue = mode === "range" ? !!selected?.from : !!selected;
|
|
4186
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(Popover, { open, onOpenChange: setOpen, children: [
|
|
4187
|
+
/* @__PURE__ */ jsxRuntime.jsx(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
4188
|
+
Button,
|
|
4189
|
+
{
|
|
4190
|
+
"data-slot": "date-picker-trigger",
|
|
4191
|
+
variant: "primary",
|
|
4192
|
+
disabled,
|
|
4193
|
+
className: cn(
|
|
4194
|
+
"w-60 justify-start gap-2 font-normal",
|
|
4195
|
+
!hasValue && "text-white",
|
|
4196
|
+
className
|
|
4197
|
+
),
|
|
4198
|
+
children: [
|
|
4199
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.CalendarIcon, { className: "size-4 shrink-0" }),
|
|
4200
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: label })
|
|
4201
|
+
]
|
|
4202
|
+
}
|
|
4203
|
+
) }),
|
|
4204
|
+
/* @__PURE__ */ jsxRuntime.jsx(PopoverContent, { "data-slot": "date-picker-content", className: "w-auto p-0", align: "start", children: mode === "range" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
4205
|
+
Calendar,
|
|
4190
4206
|
{
|
|
4191
4207
|
...{
|
|
4192
4208
|
mode: "range",
|
|
@@ -4339,6 +4355,7 @@ var Navbar = react.forwardRef(
|
|
|
4339
4355
|
notifications,
|
|
4340
4356
|
avatarSrc,
|
|
4341
4357
|
avatarFallback,
|
|
4358
|
+
showUtilityBar = true,
|
|
4342
4359
|
onNavLinkClick,
|
|
4343
4360
|
onSearchClick,
|
|
4344
4361
|
onHelpClick,
|
|
@@ -4410,7 +4427,7 @@ var Navbar = react.forwardRef(
|
|
|
4410
4427
|
] }),
|
|
4411
4428
|
/* @__PURE__ */ jsxRuntime.jsx("nav", { className: "ml-auto flex h-full items-center", children: navigationLinks.map((link, i) => /* @__PURE__ */ jsxRuntime.jsx(NavLinkItem, { link, onNavLinkClick }, i)) })
|
|
4412
4429
|
] }) }),
|
|
4413
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-background border-border border-b px-4 md:px-6", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto flex h-9 max-w-screen-2xl items-center justify-between", children: [
|
|
4430
|
+
showUtilityBar && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-background border-border border-b px-4 md:px-6", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mx-auto flex h-9 max-w-screen-2xl items-center justify-between", children: [
|
|
4414
4431
|
/* @__PURE__ */ jsxRuntime.jsx("nav", { className: "flex items-center", children: utilityLinks.map((link, i) => /* @__PURE__ */ jsxRuntime.jsxs(react.Fragment, { children: [
|
|
4415
4432
|
i > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-border mx-3 select-none", children: "|" }),
|
|
4416
4433
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -4733,220 +4750,723 @@ function CanNot({ permission, mode = "any", fallback = null, children }) {
|
|
|
4733
4750
|
return /* @__PURE__ */ jsxRuntime.jsx(Can, { permission, mode, negate: true, fallback, children });
|
|
4734
4751
|
}
|
|
4735
4752
|
CanNot.displayName = "CanNot";
|
|
4736
|
-
|
|
4737
|
-
|
|
4738
|
-
|
|
4739
|
-
|
|
4740
|
-
|
|
4741
|
-
|
|
4742
|
-
|
|
4743
|
-
|
|
4753
|
+
function useMediaQuery(query) {
|
|
4754
|
+
const [matches, setMatches] = react.useState(false);
|
|
4755
|
+
react.useEffect(() => {
|
|
4756
|
+
if (typeof window === "undefined") return;
|
|
4757
|
+
const mql = window.matchMedia(query);
|
|
4758
|
+
setMatches(mql.matches);
|
|
4759
|
+
const handler = (e) => setMatches(e.matches);
|
|
4760
|
+
mql.addEventListener("change", handler);
|
|
4761
|
+
return () => mql.removeEventListener("change", handler);
|
|
4762
|
+
}, [query]);
|
|
4763
|
+
return matches;
|
|
4744
4764
|
}
|
|
4745
|
-
|
|
4746
|
-
|
|
4747
|
-
|
|
4748
|
-
|
|
4749
|
-
|
|
4750
|
-
|
|
4751
|
-
|
|
4752
|
-
|
|
4753
|
-
|
|
4754
|
-
|
|
4755
|
-
|
|
4756
|
-
|
|
4757
|
-
|
|
4758
|
-
|
|
4759
|
-
|
|
4760
|
-
|
|
4761
|
-
|
|
4762
|
-
|
|
4763
|
-
|
|
4764
|
-
|
|
4765
|
-
|
|
4766
|
-
|
|
4767
|
-
|
|
4768
|
-
|
|
4769
|
-
"
|
|
4770
|
-
|
|
4771
|
-
|
|
4772
|
-
|
|
4773
|
-
|
|
4774
|
-
|
|
4775
|
-
|
|
4776
|
-
|
|
4777
|
-
|
|
4778
|
-
|
|
4779
|
-
|
|
4780
|
-
|
|
4781
|
-
|
|
4782
|
-
|
|
4783
|
-
|
|
4784
|
-
|
|
4785
|
-
|
|
4786
|
-
|
|
4787
|
-
|
|
4788
|
-
|
|
4765
|
+
|
|
4766
|
+
// src/hooks/use-mobile.ts
|
|
4767
|
+
function useIsMobile() {
|
|
4768
|
+
return useMediaQuery("(max-width: 767px)");
|
|
4769
|
+
}
|
|
4770
|
+
function Sheet({ ...props }) {
|
|
4771
|
+
return /* @__PURE__ */ jsxRuntime.jsx(radixUi.Dialog.Root, { "data-slot": "sheet", ...props });
|
|
4772
|
+
}
|
|
4773
|
+
function SheetTrigger({ ...props }) {
|
|
4774
|
+
return /* @__PURE__ */ jsxRuntime.jsx(radixUi.Dialog.Trigger, { "data-slot": "sheet-trigger", ...props });
|
|
4775
|
+
}
|
|
4776
|
+
function SheetClose({ ...props }) {
|
|
4777
|
+
return /* @__PURE__ */ jsxRuntime.jsx(radixUi.Dialog.Close, { "data-slot": "sheet-close", ...props });
|
|
4778
|
+
}
|
|
4779
|
+
function SheetPortal({ ...props }) {
|
|
4780
|
+
return /* @__PURE__ */ jsxRuntime.jsx(radixUi.Dialog.Portal, { "data-slot": "sheet-portal", ...props });
|
|
4781
|
+
}
|
|
4782
|
+
function SheetOverlay({
|
|
4783
|
+
className,
|
|
4784
|
+
...props
|
|
4785
|
+
}) {
|
|
4786
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
4787
|
+
radixUi.Dialog.Overlay,
|
|
4788
|
+
{
|
|
4789
|
+
"data-slot": "sheet-overlay",
|
|
4790
|
+
className: cn(
|
|
4791
|
+
"fixed inset-0 z-50 bg-black/30 duration-100 supports-backdrop-filter:backdrop-blur-sm data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",
|
|
4792
|
+
className
|
|
4793
|
+
),
|
|
4794
|
+
...props
|
|
4795
|
+
}
|
|
4796
|
+
);
|
|
4797
|
+
}
|
|
4798
|
+
function SheetContent({
|
|
4799
|
+
className,
|
|
4800
|
+
children,
|
|
4801
|
+
side = "right",
|
|
4802
|
+
showCloseButton = true,
|
|
4803
|
+
...props
|
|
4804
|
+
}) {
|
|
4805
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(SheetPortal, { children: [
|
|
4806
|
+
/* @__PURE__ */ jsxRuntime.jsx(SheetOverlay, {}),
|
|
4807
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
4808
|
+
radixUi.Dialog.Content,
|
|
4789
4809
|
{
|
|
4790
|
-
|
|
4791
|
-
"data-
|
|
4810
|
+
"data-slot": "sheet-content",
|
|
4811
|
+
"data-side": side,
|
|
4792
4812
|
className: cn(
|
|
4793
|
-
"bg-
|
|
4794
|
-
open ? "w-64" : collapsible === "icon" ? "w-12" : "w-0 overflow-hidden",
|
|
4813
|
+
"fixed z-50 flex flex-col bg-popover bg-clip-padding text-sm text-popover-foreground shadow-xl transition duration-200 ease-in-out data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-[side=bottom]:data-open:slide-in-from-bottom-10 data-[side=left]:data-open:slide-in-from-left-10 data-[side=right]:data-open:slide-in-from-right-10 data-[side=top]:data-open:slide-in-from-top-10 data-closed:animate-out data-closed:fade-out-0 data-[side=bottom]:data-closed:slide-out-to-bottom-10 data-[side=left]:data-closed:slide-out-to-left-10 data-[side=right]:data-closed:slide-out-to-right-10 data-[side=top]:data-closed:slide-out-to-top-10",
|
|
4795
4814
|
className
|
|
4796
4815
|
),
|
|
4797
4816
|
...props,
|
|
4798
|
-
children
|
|
4817
|
+
children: [
|
|
4818
|
+
children,
|
|
4819
|
+
showCloseButton && /* @__PURE__ */ jsxRuntime.jsx(radixUi.Dialog.Close, { "data-slot": "sheet-close", asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "ghost", className: "absolute top-4 right-4 bg-secondary", size: "icon-sm", children: [
|
|
4820
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.XIcon, {}),
|
|
4821
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "Close" })
|
|
4822
|
+
] }) })
|
|
4823
|
+
]
|
|
4799
4824
|
}
|
|
4800
|
-
)
|
|
4801
|
-
}
|
|
4802
|
-
|
|
4803
|
-
|
|
4804
|
-
|
|
4805
|
-
|
|
4806
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
4807
|
-
Button,
|
|
4825
|
+
)
|
|
4826
|
+
] });
|
|
4827
|
+
}
|
|
4828
|
+
function SheetHeader({ className, ...props }) {
|
|
4829
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
4830
|
+
"div",
|
|
4808
4831
|
{
|
|
4809
|
-
|
|
4810
|
-
|
|
4811
|
-
|
|
4812
|
-
className: cn("shrink-0", className),
|
|
4813
|
-
onClick: (e) => {
|
|
4814
|
-
onClick?.(e);
|
|
4815
|
-
setOpen(!open);
|
|
4816
|
-
},
|
|
4817
|
-
...props,
|
|
4818
|
-
children: [
|
|
4819
|
-
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Menu, { className: "size-4" }),
|
|
4820
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "Toggle sidebar" })
|
|
4821
|
-
]
|
|
4832
|
+
"data-slot": "sheet-header",
|
|
4833
|
+
className: cn("flex flex-col gap-1.5 p-6", className),
|
|
4834
|
+
...props
|
|
4822
4835
|
}
|
|
4823
4836
|
);
|
|
4824
|
-
}
|
|
4825
|
-
|
|
4826
|
-
|
|
4827
|
-
({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
4837
|
+
}
|
|
4838
|
+
function SheetFooter({ className, ...props }) {
|
|
4839
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
4828
4840
|
"div",
|
|
4829
4841
|
{
|
|
4830
|
-
|
|
4831
|
-
|
|
4832
|
-
className: cn("flex shrink-0 flex-col gap-2 p-3", className),
|
|
4842
|
+
"data-slot": "sheet-footer",
|
|
4843
|
+
className: cn("mt-auto flex flex-col gap-2 p-6", className),
|
|
4833
4844
|
...props
|
|
4834
4845
|
}
|
|
4835
|
-
)
|
|
4836
|
-
|
|
4837
|
-
|
|
4838
|
-
|
|
4839
|
-
|
|
4840
|
-
|
|
4841
|
-
|
|
4842
|
-
|
|
4843
|
-
|
|
4844
|
-
"
|
|
4845
|
-
className
|
|
4846
|
-
|
|
4847
|
-
|
|
4846
|
+
);
|
|
4847
|
+
}
|
|
4848
|
+
function SheetTitle({
|
|
4849
|
+
className,
|
|
4850
|
+
...props
|
|
4851
|
+
}) {
|
|
4852
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
4853
|
+
radixUi.Dialog.Title,
|
|
4854
|
+
{
|
|
4855
|
+
"data-slot": "sheet-title",
|
|
4856
|
+
className: cn("text-base font-medium text-foreground", className),
|
|
4857
|
+
...props
|
|
4858
|
+
}
|
|
4859
|
+
);
|
|
4860
|
+
}
|
|
4861
|
+
function SheetDescription({
|
|
4862
|
+
className,
|
|
4863
|
+
...props
|
|
4864
|
+
}) {
|
|
4865
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
4866
|
+
radixUi.Dialog.Description,
|
|
4867
|
+
{
|
|
4868
|
+
"data-slot": "sheet-description",
|
|
4869
|
+
className: cn("text-sm text-muted-foreground", className),
|
|
4870
|
+
...props
|
|
4871
|
+
}
|
|
4872
|
+
);
|
|
4873
|
+
}
|
|
4874
|
+
var SIDEBAR_COOKIE_NAME = "sidebar_state";
|
|
4875
|
+
var SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
|
|
4876
|
+
var SIDEBAR_WIDTH = "16rem";
|
|
4877
|
+
var SIDEBAR_WIDTH_MOBILE = "18rem";
|
|
4878
|
+
var SIDEBAR_WIDTH_ICON = "3rem";
|
|
4879
|
+
var SIDEBAR_KEYBOARD_SHORTCUT = "b";
|
|
4880
|
+
var SidebarContext = react.createContext(null);
|
|
4881
|
+
function useSidebar() {
|
|
4882
|
+
const context = react.useContext(SidebarContext);
|
|
4883
|
+
if (!context) {
|
|
4884
|
+
throw new Error("useSidebar must be used within a SidebarProvider.");
|
|
4848
4885
|
}
|
|
4849
|
-
|
|
4850
|
-
|
|
4851
|
-
|
|
4852
|
-
|
|
4886
|
+
return context;
|
|
4887
|
+
}
|
|
4888
|
+
function SidebarProvider({
|
|
4889
|
+
defaultOpen = true,
|
|
4890
|
+
open: openProp,
|
|
4891
|
+
onOpenChange: setOpenProp,
|
|
4892
|
+
className,
|
|
4893
|
+
style,
|
|
4894
|
+
children,
|
|
4895
|
+
...props
|
|
4896
|
+
}) {
|
|
4897
|
+
const isMobile = useIsMobile();
|
|
4898
|
+
const [openMobile, setOpenMobile] = react.useState(false);
|
|
4899
|
+
const [_open, _setOpen] = react.useState(defaultOpen);
|
|
4900
|
+
const open = openProp ?? _open;
|
|
4901
|
+
const setOpen = react.useCallback(
|
|
4902
|
+
(value) => {
|
|
4903
|
+
const openState = typeof value === "function" ? value(open) : value;
|
|
4904
|
+
if (setOpenProp) {
|
|
4905
|
+
setOpenProp(openState);
|
|
4906
|
+
} else {
|
|
4907
|
+
_setOpen(openState);
|
|
4908
|
+
}
|
|
4909
|
+
document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}; SameSite=Lax; Secure`;
|
|
4910
|
+
},
|
|
4911
|
+
[setOpenProp, open]
|
|
4912
|
+
);
|
|
4913
|
+
const toggleSidebar = react.useCallback(() => {
|
|
4914
|
+
return isMobile ? setOpenMobile((open2) => !open2) : setOpen((open2) => !open2);
|
|
4915
|
+
}, [isMobile, setOpen, setOpenMobile]);
|
|
4916
|
+
react.useEffect(() => {
|
|
4917
|
+
const handleKeyDown = (event) => {
|
|
4918
|
+
if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {
|
|
4919
|
+
const target = event.target;
|
|
4920
|
+
if (target.isContentEditable || target.tagName === "INPUT" || target.tagName === "TEXTAREA" || target.tagName === "SELECT") {
|
|
4921
|
+
return;
|
|
4922
|
+
}
|
|
4923
|
+
event.preventDefault();
|
|
4924
|
+
toggleSidebar();
|
|
4925
|
+
}
|
|
4926
|
+
};
|
|
4927
|
+
window.addEventListener("keydown", handleKeyDown);
|
|
4928
|
+
return () => window.removeEventListener("keydown", handleKeyDown);
|
|
4929
|
+
}, [toggleSidebar]);
|
|
4930
|
+
const state = open ? "expanded" : "collapsed";
|
|
4931
|
+
const contextValue = react.useMemo(
|
|
4932
|
+
() => ({
|
|
4933
|
+
state,
|
|
4934
|
+
open,
|
|
4935
|
+
setOpen,
|
|
4936
|
+
isMobile,
|
|
4937
|
+
openMobile,
|
|
4938
|
+
setOpenMobile,
|
|
4939
|
+
toggleSidebar
|
|
4940
|
+
}),
|
|
4941
|
+
[state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar]
|
|
4942
|
+
);
|
|
4943
|
+
return /* @__PURE__ */ jsxRuntime.jsx(SidebarContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
4944
|
+
"div",
|
|
4945
|
+
{
|
|
4946
|
+
"data-slot": "sidebar-wrapper",
|
|
4947
|
+
style: {
|
|
4948
|
+
"--sidebar-width": SIDEBAR_WIDTH,
|
|
4949
|
+
"--sidebar-width-icon": SIDEBAR_WIDTH_ICON,
|
|
4950
|
+
...style
|
|
4951
|
+
},
|
|
4952
|
+
className: cn(
|
|
4953
|
+
"group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-dvh w-full",
|
|
4954
|
+
className
|
|
4955
|
+
),
|
|
4956
|
+
...props,
|
|
4957
|
+
children
|
|
4958
|
+
}
|
|
4959
|
+
) });
|
|
4960
|
+
}
|
|
4961
|
+
function SidebarResizeHandle() {
|
|
4962
|
+
const dragRef = react.useRef(null);
|
|
4963
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
4964
|
+
"div",
|
|
4965
|
+
{
|
|
4966
|
+
"data-slot": "sidebar-resize-handle",
|
|
4967
|
+
className: "absolute inset-y-0 right-0 w-1 cursor-col-resize opacity-0 transition-opacity hover:opacity-100 hover:bg-sidebar-border group-data-[state=collapsed]:hidden",
|
|
4968
|
+
onPointerDown: (e) => {
|
|
4969
|
+
e.preventDefault();
|
|
4970
|
+
const wrapper = e.currentTarget.closest('[data-slot="sidebar-wrapper"]');
|
|
4971
|
+
if (!wrapper) return;
|
|
4972
|
+
const container = e.currentTarget.closest('[data-slot="sidebar-container"]');
|
|
4973
|
+
const gap = container?.parentElement?.querySelector('[data-slot="sidebar-gap"]') ?? null;
|
|
4974
|
+
const currentWidth = container ? parseFloat(getComputedStyle(container).width) : 256;
|
|
4975
|
+
if (container) container.style.transition = "none";
|
|
4976
|
+
if (gap) gap.style.transition = "none";
|
|
4977
|
+
dragRef.current = { startX: e.clientX, startWidth: currentWidth, wrapper, container: container ?? null, gap };
|
|
4978
|
+
e.currentTarget.setPointerCapture(e.pointerId);
|
|
4979
|
+
},
|
|
4980
|
+
onPointerMove: (e) => {
|
|
4981
|
+
if (!dragRef.current) return;
|
|
4982
|
+
const { startX, startWidth, wrapper } = dragRef.current;
|
|
4983
|
+
const newWidth = Math.max(160, Math.min(480, startWidth + (e.clientX - startX)));
|
|
4984
|
+
wrapper.style.setProperty("--sidebar-width", `${newWidth}px`);
|
|
4985
|
+
},
|
|
4986
|
+
onPointerUp: () => {
|
|
4987
|
+
if (dragRef.current?.container) dragRef.current.container.style.transition = "";
|
|
4988
|
+
if (dragRef.current?.gap) dragRef.current.gap.style.transition = "";
|
|
4989
|
+
dragRef.current = null;
|
|
4990
|
+
}
|
|
4991
|
+
}
|
|
4992
|
+
);
|
|
4993
|
+
}
|
|
4994
|
+
function Sidebar({
|
|
4995
|
+
side = "left",
|
|
4996
|
+
variant = "sidebar",
|
|
4997
|
+
collapsible = "offcanvas",
|
|
4998
|
+
className,
|
|
4999
|
+
children,
|
|
5000
|
+
dir,
|
|
5001
|
+
...props
|
|
5002
|
+
}) {
|
|
5003
|
+
const { isMobile, state, openMobile, setOpenMobile } = useSidebar();
|
|
5004
|
+
if (collapsible === "none") {
|
|
5005
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
5006
|
+
"div",
|
|
5007
|
+
{
|
|
5008
|
+
"data-slot": "sidebar",
|
|
5009
|
+
className: cn(
|
|
5010
|
+
"bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col",
|
|
5011
|
+
className
|
|
5012
|
+
),
|
|
5013
|
+
...props,
|
|
5014
|
+
children
|
|
5015
|
+
}
|
|
5016
|
+
);
|
|
5017
|
+
}
|
|
5018
|
+
if (isMobile) {
|
|
5019
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Sheet, { open: openMobile, onOpenChange: setOpenMobile, ...props, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
5020
|
+
SheetContent,
|
|
5021
|
+
{
|
|
5022
|
+
dir,
|
|
5023
|
+
"data-sidebar": "sidebar",
|
|
5024
|
+
"data-slot": "sidebar",
|
|
5025
|
+
"data-mobile": "true",
|
|
5026
|
+
showCloseButton: false,
|
|
5027
|
+
className: "bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0",
|
|
5028
|
+
style: {
|
|
5029
|
+
"--sidebar-width": SIDEBAR_WIDTH_MOBILE
|
|
5030
|
+
},
|
|
5031
|
+
side,
|
|
5032
|
+
children: [
|
|
5033
|
+
/* @__PURE__ */ jsxRuntime.jsxs(SheetHeader, { className: "sr-only", children: [
|
|
5034
|
+
/* @__PURE__ */ jsxRuntime.jsx(SheetTitle, { children: "Sidebar" }),
|
|
5035
|
+
/* @__PURE__ */ jsxRuntime.jsx(SheetDescription, { children: "Displays the mobile sidebar." })
|
|
5036
|
+
] }),
|
|
5037
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-full w-full flex-col", children })
|
|
5038
|
+
]
|
|
5039
|
+
}
|
|
5040
|
+
) });
|
|
5041
|
+
}
|
|
5042
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
5043
|
+
"div",
|
|
5044
|
+
{
|
|
5045
|
+
className: "group peer text-sidebar-foreground hidden md:block",
|
|
5046
|
+
"data-state": state,
|
|
5047
|
+
"data-collapsible": state === "collapsed" ? collapsible : "",
|
|
5048
|
+
"data-variant": variant,
|
|
5049
|
+
"data-side": side,
|
|
5050
|
+
"data-slot": "sidebar",
|
|
5051
|
+
children: [
|
|
5052
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5053
|
+
"div",
|
|
5054
|
+
{
|
|
5055
|
+
"data-slot": "sidebar-gap",
|
|
5056
|
+
className: cn(
|
|
5057
|
+
"relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear",
|
|
5058
|
+
"group-data-[collapsible=offcanvas]:w-0",
|
|
5059
|
+
"group-data-[side=right]:rotate-180",
|
|
5060
|
+
variant === "floating" || variant === "inset" ? "group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon)"
|
|
5061
|
+
)
|
|
5062
|
+
}
|
|
5063
|
+
),
|
|
5064
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
5065
|
+
"div",
|
|
5066
|
+
{
|
|
5067
|
+
"data-slot": "sidebar-container",
|
|
5068
|
+
"data-side": side,
|
|
5069
|
+
className: cn(
|
|
5070
|
+
"fixed inset-y-0 z-10 hidden h-dvh w-(--sidebar-width) overflow-hidden transition-[left,right,width] duration-200 ease-linear data-[side=left]:left-0 data-[side=left]:group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)] data-[side=right]:right-0 data-[side=right]:group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)] md:flex",
|
|
5071
|
+
// Adjust the padding for floating and inset variants.
|
|
5072
|
+
variant === "floating" || variant === "inset" ? "p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l",
|
|
5073
|
+
className
|
|
5074
|
+
),
|
|
5075
|
+
...props,
|
|
5076
|
+
children: [
|
|
5077
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5078
|
+
"div",
|
|
5079
|
+
{
|
|
5080
|
+
"data-sidebar": "sidebar",
|
|
5081
|
+
"data-slot": "sidebar-inner",
|
|
5082
|
+
className: "bg-sidebar group-data-[variant=floating]:ring-sidebar-border flex size-full flex-col group-data-[variant=floating]:rounded-2xl group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1",
|
|
5083
|
+
children
|
|
5084
|
+
}
|
|
5085
|
+
),
|
|
5086
|
+
/* @__PURE__ */ jsxRuntime.jsx(SidebarResizeHandle, {})
|
|
5087
|
+
]
|
|
5088
|
+
}
|
|
5089
|
+
)
|
|
5090
|
+
]
|
|
5091
|
+
}
|
|
5092
|
+
);
|
|
5093
|
+
}
|
|
5094
|
+
function SidebarTrigger({ className, onClick, ...props }) {
|
|
5095
|
+
const { toggleSidebar } = useSidebar();
|
|
5096
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
5097
|
+
Button,
|
|
5098
|
+
{
|
|
5099
|
+
"data-sidebar": "trigger",
|
|
5100
|
+
"data-slot": "sidebar-trigger",
|
|
5101
|
+
variant: "ghost",
|
|
5102
|
+
size: "icon-sm",
|
|
5103
|
+
className: cn(className),
|
|
5104
|
+
onClick: (event) => {
|
|
5105
|
+
onClick?.(event);
|
|
5106
|
+
toggleSidebar();
|
|
5107
|
+
},
|
|
5108
|
+
...props,
|
|
5109
|
+
children: [
|
|
5110
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.MenuIcon, {}),
|
|
5111
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "Toggle Sidebar" })
|
|
5112
|
+
]
|
|
5113
|
+
}
|
|
5114
|
+
);
|
|
5115
|
+
}
|
|
5116
|
+
function SidebarRail({ className, ...props }) {
|
|
5117
|
+
const { toggleSidebar } = useSidebar();
|
|
5118
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
5119
|
+
"button",
|
|
5120
|
+
{
|
|
5121
|
+
"data-sidebar": "rail",
|
|
5122
|
+
"data-slot": "sidebar-rail",
|
|
5123
|
+
"aria-label": "Toggle Sidebar",
|
|
5124
|
+
tabIndex: -1,
|
|
5125
|
+
onClick: toggleSidebar,
|
|
5126
|
+
title: "Toggle Sidebar",
|
|
5127
|
+
className: cn(
|
|
5128
|
+
"hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:start-1/2 after:w-[2px] sm:flex ltr:-translate-x-1/2 rtl:-translate-x-1/2",
|
|
5129
|
+
"in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize",
|
|
5130
|
+
"[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize",
|
|
5131
|
+
"hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full",
|
|
5132
|
+
"[[data-side=left][data-collapsible=offcanvas]_&]:-right-2",
|
|
5133
|
+
"[[data-side=right][data-collapsible=offcanvas]_&]:-left-2",
|
|
5134
|
+
className
|
|
5135
|
+
),
|
|
5136
|
+
...props
|
|
5137
|
+
}
|
|
5138
|
+
);
|
|
5139
|
+
}
|
|
5140
|
+
function SidebarInset({ className, ...props }) {
|
|
5141
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
5142
|
+
"main",
|
|
5143
|
+
{
|
|
5144
|
+
"data-slot": "sidebar-inset",
|
|
5145
|
+
className: cn(
|
|
5146
|
+
"bg-background relative flex w-full flex-1 flex-col md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-2xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2",
|
|
5147
|
+
className
|
|
5148
|
+
),
|
|
5149
|
+
...props
|
|
5150
|
+
}
|
|
5151
|
+
);
|
|
5152
|
+
}
|
|
5153
|
+
function SidebarInput({ className, ...props }) {
|
|
5154
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
5155
|
+
Input,
|
|
5156
|
+
{
|
|
5157
|
+
"data-slot": "sidebar-input",
|
|
5158
|
+
"data-sidebar": "input",
|
|
5159
|
+
className: cn("bg-input/50 h-8 w-full shadow-none", className),
|
|
5160
|
+
...props
|
|
5161
|
+
}
|
|
5162
|
+
);
|
|
5163
|
+
}
|
|
5164
|
+
function SidebarHeader({ className, ...props }) {
|
|
5165
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
5166
|
+
"div",
|
|
5167
|
+
{
|
|
5168
|
+
"data-slot": "sidebar-header",
|
|
5169
|
+
"data-sidebar": "header",
|
|
5170
|
+
className: cn("flex flex-col gap-2 p-2 [--radius:var(--radius-xl)]", className),
|
|
5171
|
+
...props
|
|
5172
|
+
}
|
|
5173
|
+
);
|
|
5174
|
+
}
|
|
5175
|
+
function SidebarFooter({ className, ...props }) {
|
|
5176
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
4853
5177
|
"div",
|
|
4854
5178
|
{
|
|
4855
|
-
ref,
|
|
4856
5179
|
"data-slot": "sidebar-footer",
|
|
4857
|
-
|
|
5180
|
+
"data-sidebar": "footer",
|
|
5181
|
+
className: cn("flex flex-col gap-2 p-2", className),
|
|
5182
|
+
...props
|
|
5183
|
+
}
|
|
5184
|
+
);
|
|
5185
|
+
}
|
|
5186
|
+
function SidebarSeparator({ className, ...props }) {
|
|
5187
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
5188
|
+
Separator,
|
|
5189
|
+
{
|
|
5190
|
+
"data-slot": "sidebar-separator",
|
|
5191
|
+
"data-sidebar": "separator",
|
|
5192
|
+
className: cn("bg-sidebar-border mx-2 w-auto", className),
|
|
5193
|
+
...props
|
|
5194
|
+
}
|
|
5195
|
+
);
|
|
5196
|
+
}
|
|
5197
|
+
function SidebarContent({ className, ...props }) {
|
|
5198
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
5199
|
+
"div",
|
|
5200
|
+
{
|
|
5201
|
+
"data-slot": "sidebar-content",
|
|
5202
|
+
"data-sidebar": "content",
|
|
5203
|
+
className: cn(
|
|
5204
|
+
"no-scrollbar flex min-h-0 flex-1 flex-col gap-2 overflow-y-auto overflow-x-hidden [--radius:var(--radius-xl)] group-data-[collapsible=icon]:overflow-hidden",
|
|
5205
|
+
className
|
|
5206
|
+
),
|
|
5207
|
+
...props
|
|
5208
|
+
}
|
|
5209
|
+
);
|
|
5210
|
+
}
|
|
5211
|
+
function SidebarGroup({ className, ...props }) {
|
|
5212
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
5213
|
+
"div",
|
|
5214
|
+
{
|
|
5215
|
+
"data-slot": "sidebar-group",
|
|
5216
|
+
"data-sidebar": "group",
|
|
5217
|
+
className: cn("relative flex w-full min-w-0 flex-col p-2", className),
|
|
5218
|
+
...props
|
|
5219
|
+
}
|
|
5220
|
+
);
|
|
5221
|
+
}
|
|
5222
|
+
function SidebarGroupLabel({
|
|
5223
|
+
className,
|
|
5224
|
+
asChild = false,
|
|
5225
|
+
...props
|
|
5226
|
+
}) {
|
|
5227
|
+
const Comp = asChild ? radixUi.Slot.Root : "div";
|
|
5228
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
5229
|
+
Comp,
|
|
5230
|
+
{
|
|
5231
|
+
"data-slot": "sidebar-group-label",
|
|
5232
|
+
"data-sidebar": "group-label",
|
|
5233
|
+
className: cn(
|
|
5234
|
+
"text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-xl px-3 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0",
|
|
5235
|
+
className
|
|
5236
|
+
),
|
|
5237
|
+
...props
|
|
5238
|
+
}
|
|
5239
|
+
);
|
|
5240
|
+
}
|
|
5241
|
+
function SidebarGroupAction({
|
|
5242
|
+
className,
|
|
5243
|
+
asChild = false,
|
|
5244
|
+
...props
|
|
5245
|
+
}) {
|
|
5246
|
+
const Comp = asChild ? radixUi.Slot.Root : "button";
|
|
5247
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
5248
|
+
Comp,
|
|
5249
|
+
{
|
|
5250
|
+
"data-slot": "sidebar-group-action",
|
|
5251
|
+
"data-sidebar": "group-action",
|
|
5252
|
+
className: cn(
|
|
5253
|
+
"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-xl p-0 outline-hidden transition-transform group-data-[collapsible=icon]:hidden after:absolute after:-inset-2 focus-visible:ring-2 md:after:hidden [&>svg]:size-4 [&>svg]:shrink-0",
|
|
5254
|
+
className
|
|
5255
|
+
),
|
|
5256
|
+
...props
|
|
5257
|
+
}
|
|
5258
|
+
);
|
|
5259
|
+
}
|
|
5260
|
+
function SidebarGroupContent({ className, ...props }) {
|
|
5261
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
5262
|
+
"div",
|
|
5263
|
+
{
|
|
5264
|
+
"data-slot": "sidebar-group-content",
|
|
5265
|
+
"data-sidebar": "group-content",
|
|
5266
|
+
className: cn("w-full text-sm", className),
|
|
5267
|
+
...props
|
|
5268
|
+
}
|
|
5269
|
+
);
|
|
5270
|
+
}
|
|
5271
|
+
function SidebarMenu({ className, ...props }) {
|
|
5272
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
5273
|
+
"ul",
|
|
5274
|
+
{
|
|
5275
|
+
"data-slot": "sidebar-menu",
|
|
5276
|
+
"data-sidebar": "menu",
|
|
5277
|
+
className: cn("flex w-full min-w-0 flex-col gap-0.5", className),
|
|
5278
|
+
...props
|
|
5279
|
+
}
|
|
5280
|
+
);
|
|
5281
|
+
}
|
|
5282
|
+
function SidebarMenuItem({ className, ...props }) {
|
|
5283
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
5284
|
+
"li",
|
|
5285
|
+
{
|
|
5286
|
+
"data-slot": "sidebar-menu-item",
|
|
5287
|
+
"data-sidebar": "menu-item",
|
|
5288
|
+
className: cn("group/menu-item relative", className),
|
|
5289
|
+
...props
|
|
5290
|
+
}
|
|
5291
|
+
);
|
|
5292
|
+
}
|
|
5293
|
+
var sidebarMenuButtonVariants = classVarianceAuthority.cva(
|
|
5294
|
+
"peer/menu-button group/menu-button flex w-full items-center gap-2 overflow-hidden rounded-xl px-3 py-2 text-left text-sm ring-sidebar-ring outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:font-medium data-active:text-sidebar-accent-foreground [&_svg]:size-4 [&_svg]:shrink-0 [&>span:last-child]:truncate",
|
|
5295
|
+
{
|
|
5296
|
+
variants: {
|
|
5297
|
+
variant: {
|
|
5298
|
+
default: "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
|
|
5299
|
+
outline: "bg-background shadow-[0_0_0_1px_var(--sidebar-border)] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_var(--sidebar-accent)]"
|
|
5300
|
+
},
|
|
5301
|
+
size: {
|
|
5302
|
+
default: "h-9 text-sm",
|
|
5303
|
+
sm: "h-8 text-xs",
|
|
5304
|
+
lg: "h-14 px-3 text-sm group-data-[collapsible=icon]:p-0!"
|
|
5305
|
+
}
|
|
5306
|
+
},
|
|
5307
|
+
defaultVariants: {
|
|
5308
|
+
variant: "default",
|
|
5309
|
+
size: "default"
|
|
5310
|
+
}
|
|
5311
|
+
}
|
|
5312
|
+
);
|
|
5313
|
+
function SidebarMenuButton({
|
|
5314
|
+
asChild = false,
|
|
5315
|
+
isActive = false,
|
|
5316
|
+
variant = "default",
|
|
5317
|
+
size = "default",
|
|
5318
|
+
tooltip,
|
|
5319
|
+
className,
|
|
5320
|
+
...props
|
|
5321
|
+
}) {
|
|
5322
|
+
const Comp = asChild ? radixUi.Slot.Root : "button";
|
|
5323
|
+
const { isMobile, state } = useSidebar();
|
|
5324
|
+
const button = /* @__PURE__ */ jsxRuntime.jsx(
|
|
5325
|
+
Comp,
|
|
5326
|
+
{
|
|
5327
|
+
"data-slot": "sidebar-menu-button",
|
|
5328
|
+
"data-sidebar": "menu-button",
|
|
5329
|
+
"data-size": size,
|
|
5330
|
+
"data-active": isActive,
|
|
5331
|
+
className: cn(sidebarMenuButtonVariants({ variant, size }), className),
|
|
5332
|
+
...props
|
|
5333
|
+
}
|
|
5334
|
+
);
|
|
5335
|
+
if (!tooltip) {
|
|
5336
|
+
return button;
|
|
5337
|
+
}
|
|
5338
|
+
if (typeof tooltip === "string") {
|
|
5339
|
+
tooltip = {
|
|
5340
|
+
children: tooltip
|
|
5341
|
+
};
|
|
5342
|
+
}
|
|
5343
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(Tooltip, { children: [
|
|
5344
|
+
/* @__PURE__ */ jsxRuntime.jsx(TooltipTrigger, { asChild: true, children: button }),
|
|
5345
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5346
|
+
TooltipContent,
|
|
5347
|
+
{
|
|
5348
|
+
side: "right",
|
|
5349
|
+
align: "center",
|
|
5350
|
+
hidden: state !== "collapsed" || isMobile,
|
|
5351
|
+
...tooltip
|
|
5352
|
+
}
|
|
5353
|
+
)
|
|
5354
|
+
] });
|
|
5355
|
+
}
|
|
5356
|
+
function SidebarMenuAction({
|
|
5357
|
+
className,
|
|
5358
|
+
asChild = false,
|
|
5359
|
+
showOnHover = false,
|
|
5360
|
+
...props
|
|
5361
|
+
}) {
|
|
5362
|
+
const Comp = asChild ? radixUi.Slot.Root : "button";
|
|
5363
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
5364
|
+
Comp,
|
|
5365
|
+
{
|
|
5366
|
+
"data-slot": "sidebar-menu-action",
|
|
5367
|
+
"data-sidebar": "menu-action",
|
|
5368
|
+
className: cn(
|
|
5369
|
+
"text-sidebar-foreground ring-sidebar-ring peer-hover/menu-button:text-sidebar-accent-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-xl p-0 outline-hidden transition-transform group-data-[collapsible=icon]:hidden peer-data-[size=default]/menu-button:top-2 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 after:absolute after:-inset-2 focus-visible:ring-2 md:after:hidden [&>svg]:size-4 [&>svg]:shrink-0",
|
|
5370
|
+
showOnHover && "peer-data-active/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 aria-expanded:opacity-100 md:opacity-0",
|
|
5371
|
+
className
|
|
5372
|
+
),
|
|
5373
|
+
...props
|
|
5374
|
+
}
|
|
5375
|
+
);
|
|
5376
|
+
}
|
|
5377
|
+
function SidebarMenuBadge({ className, ...props }) {
|
|
5378
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
5379
|
+
"div",
|
|
5380
|
+
{
|
|
5381
|
+
"data-slot": "sidebar-menu-badge",
|
|
5382
|
+
"data-sidebar": "menu-badge",
|
|
5383
|
+
className: cn(
|
|
5384
|
+
"text-sidebar-foreground peer-hover/menu-button:text-sidebar-accent-foreground peer-data-active/menu-button:text-sidebar-accent-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-xl px-1 text-xs font-medium tabular-nums select-none group-data-[collapsible=icon]:hidden peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1",
|
|
5385
|
+
className
|
|
5386
|
+
),
|
|
5387
|
+
...props
|
|
5388
|
+
}
|
|
5389
|
+
);
|
|
5390
|
+
}
|
|
5391
|
+
function SidebarMenuSkeleton({
|
|
5392
|
+
className,
|
|
5393
|
+
showIcon = false,
|
|
5394
|
+
...props
|
|
5395
|
+
}) {
|
|
5396
|
+
const [width] = react.useState(() => {
|
|
5397
|
+
return `${Math.floor(Math.random() * 40) + 50}%`;
|
|
5398
|
+
});
|
|
5399
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
5400
|
+
"div",
|
|
5401
|
+
{
|
|
5402
|
+
"data-slot": "sidebar-menu-skeleton",
|
|
5403
|
+
"data-sidebar": "menu-skeleton",
|
|
5404
|
+
className: cn("flex h-8 items-center gap-2 rounded-xl px-2", className),
|
|
5405
|
+
...props,
|
|
5406
|
+
children: [
|
|
5407
|
+
showIcon && /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { className: "size-4 rounded-xl", "data-sidebar": "menu-skeleton-icon" }),
|
|
5408
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5409
|
+
Skeleton,
|
|
5410
|
+
{
|
|
5411
|
+
className: "h-4 max-w-(--skeleton-width) flex-1",
|
|
5412
|
+
"data-sidebar": "menu-skeleton-text",
|
|
5413
|
+
style: {
|
|
5414
|
+
"--skeleton-width": width
|
|
5415
|
+
}
|
|
5416
|
+
}
|
|
5417
|
+
)
|
|
5418
|
+
]
|
|
5419
|
+
}
|
|
5420
|
+
);
|
|
5421
|
+
}
|
|
5422
|
+
function SidebarMenuSub({ className, ...props }) {
|
|
5423
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
5424
|
+
"ul",
|
|
5425
|
+
{
|
|
5426
|
+
"data-slot": "sidebar-menu-sub",
|
|
5427
|
+
"data-sidebar": "menu-sub",
|
|
5428
|
+
className: cn(
|
|
5429
|
+
"border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5 group-data-[collapsible=icon]:hidden",
|
|
5430
|
+
className
|
|
5431
|
+
),
|
|
4858
5432
|
...props
|
|
4859
5433
|
}
|
|
4860
|
-
)
|
|
4861
|
-
|
|
4862
|
-
|
|
4863
|
-
|
|
4864
|
-
|
|
4865
|
-
"div",
|
|
5434
|
+
);
|
|
5435
|
+
}
|
|
5436
|
+
function SidebarMenuSubItem({ className, ...props }) {
|
|
5437
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
5438
|
+
"li",
|
|
4866
5439
|
{
|
|
4867
|
-
|
|
4868
|
-
"data-
|
|
4869
|
-
className: cn("
|
|
5440
|
+
"data-slot": "sidebar-menu-sub-item",
|
|
5441
|
+
"data-sidebar": "menu-sub-item",
|
|
5442
|
+
className: cn("group/menu-sub-item relative", className),
|
|
4870
5443
|
...props
|
|
4871
5444
|
}
|
|
4872
|
-
)
|
|
4873
|
-
|
|
4874
|
-
|
|
4875
|
-
|
|
4876
|
-
"
|
|
4877
|
-
|
|
4878
|
-
|
|
4879
|
-
|
|
4880
|
-
|
|
4881
|
-
|
|
4882
|
-
|
|
4883
|
-
|
|
4884
|
-
}
|
|
4885
|
-
));
|
|
4886
|
-
SidebarGroupLabel.displayName = "SidebarGroupLabel";
|
|
4887
|
-
var SidebarGroupContent = react.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
4888
|
-
"div",
|
|
4889
|
-
{
|
|
4890
|
-
ref,
|
|
4891
|
-
"data-slot": "sidebar-group-content",
|
|
4892
|
-
className: cn("flex flex-col gap-0.5", className),
|
|
4893
|
-
...props
|
|
4894
|
-
}
|
|
4895
|
-
));
|
|
4896
|
-
SidebarGroupContent.displayName = "SidebarGroupContent";
|
|
4897
|
-
var SidebarMenu = react.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
4898
|
-
"ul",
|
|
4899
|
-
{
|
|
4900
|
-
ref,
|
|
4901
|
-
"data-slot": "sidebar-menu",
|
|
4902
|
-
className: cn("m-0 flex list-none flex-col gap-0.5 p-0", className),
|
|
4903
|
-
...props
|
|
4904
|
-
}
|
|
4905
|
-
));
|
|
4906
|
-
SidebarMenu.displayName = "SidebarMenu";
|
|
4907
|
-
var SidebarMenuItem = react.forwardRef(
|
|
4908
|
-
({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
4909
|
-
"li",
|
|
5445
|
+
);
|
|
5446
|
+
}
|
|
5447
|
+
function SidebarMenuSubButton({
|
|
5448
|
+
asChild = false,
|
|
5449
|
+
size = "md",
|
|
5450
|
+
isActive = false,
|
|
5451
|
+
className,
|
|
5452
|
+
...props
|
|
5453
|
+
}) {
|
|
5454
|
+
const Comp = asChild ? radixUi.Slot.Root : "a";
|
|
5455
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
5456
|
+
Comp,
|
|
4910
5457
|
{
|
|
4911
|
-
|
|
4912
|
-
"data-
|
|
4913
|
-
|
|
5458
|
+
"data-slot": "sidebar-menu-sub-button",
|
|
5459
|
+
"data-sidebar": "menu-sub-button",
|
|
5460
|
+
"data-size": size,
|
|
5461
|
+
"data-active": isActive,
|
|
5462
|
+
className: cn(
|
|
5463
|
+
"text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-xl px-3 outline-hidden group-data-[collapsible=icon]:hidden focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[size=md]:text-sm data-[size=sm]:text-xs [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0",
|
|
5464
|
+
className
|
|
5465
|
+
),
|
|
4914
5466
|
...props
|
|
4915
5467
|
}
|
|
4916
|
-
)
|
|
4917
|
-
|
|
4918
|
-
SidebarMenuItem.displayName = "SidebarMenuItem";
|
|
4919
|
-
var SidebarMenuButton = react.forwardRef(
|
|
4920
|
-
({ asChild, isActive, className, children, ...props }, ref) => {
|
|
4921
|
-
const { open } = useSidebar();
|
|
4922
|
-
const Comp = asChild ? radixUi.Slot.Root : "button";
|
|
4923
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
4924
|
-
Comp,
|
|
4925
|
-
{
|
|
4926
|
-
ref,
|
|
4927
|
-
"data-active": isActive || void 0,
|
|
4928
|
-
className: cn(
|
|
4929
|
-
"flex w-full cursor-pointer items-center gap-2 rounded-lg px-3 py-2 text-sm font-normal transition-colors outline-none",
|
|
4930
|
-
"text-sidebar-foreground/70 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
|
|
4931
|
-
"data-[active]:bg-sidebar-primary/10 data-[active]:text-sidebar-primary data-[active]:font-normal",
|
|
4932
|
-
!open && "justify-center px-2",
|
|
4933
|
-
className
|
|
4934
|
-
),
|
|
4935
|
-
...props,
|
|
4936
|
-
children: react.Children.map(children, (child, i) => {
|
|
4937
|
-
if (i === 0 && react.isValidElement(child)) {
|
|
4938
|
-
return react.cloneElement(child, {
|
|
4939
|
-
className: cn("size-4 shrink-0", child.props.className)
|
|
4940
|
-
});
|
|
4941
|
-
}
|
|
4942
|
-
if (i > 0 && !open) return null;
|
|
4943
|
-
return child;
|
|
4944
|
-
})
|
|
4945
|
-
}
|
|
4946
|
-
);
|
|
4947
|
-
}
|
|
4948
|
-
);
|
|
4949
|
-
SidebarMenuButton.displayName = "SidebarMenuButton";
|
|
5468
|
+
);
|
|
5469
|
+
}
|
|
4950
5470
|
var defaultItems = [
|
|
4951
5471
|
{ label: "Home", icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.House, {}) },
|
|
4952
5472
|
{ label: "Vacations", icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Plane, {}) },
|
|
@@ -4954,11 +5474,20 @@ var defaultItems = [
|
|
|
4954
5474
|
{ label: "Apps", icon: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.LayoutDashboardIcon, {}) }
|
|
4955
5475
|
];
|
|
4956
5476
|
function SidebarBrand({ brandName }) {
|
|
4957
|
-
const {
|
|
4958
|
-
|
|
5477
|
+
const { state } = useSidebar();
|
|
5478
|
+
const collapsed = state === "collapsed";
|
|
4959
5479
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
4960
5480
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-primary text-primary-foreground flex size-7 shrink-0 items-center justify-center rounded-md text-xs font-bold", children: brandName.charAt(0) }),
|
|
4961
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5481
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
5482
|
+
"span",
|
|
5483
|
+
{
|
|
5484
|
+
className: cn(
|
|
5485
|
+
"truncate text-sm font-semibold transition-opacity duration-200",
|
|
5486
|
+
collapsed ? "opacity-0 pointer-events-none w-0 overflow-hidden" : "opacity-100"
|
|
5487
|
+
),
|
|
5488
|
+
children: brandName
|
|
5489
|
+
}
|
|
5490
|
+
)
|
|
4962
5491
|
] });
|
|
4963
5492
|
}
|
|
4964
5493
|
function AppShell({
|
|
@@ -4967,48 +5496,65 @@ function AppShell({
|
|
|
4967
5496
|
onItemClick,
|
|
4968
5497
|
brandName = "Total Portal",
|
|
4969
5498
|
showHeader = true,
|
|
5499
|
+
header,
|
|
5500
|
+
open,
|
|
5501
|
+
onOpenChange,
|
|
5502
|
+
defaultOpen,
|
|
4970
5503
|
className,
|
|
4971
5504
|
mainClassName,
|
|
4972
5505
|
children
|
|
4973
5506
|
}) {
|
|
4974
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
4975
|
-
|
|
4976
|
-
|
|
4977
|
-
|
|
4978
|
-
|
|
4979
|
-
|
|
4980
|
-
|
|
4981
|
-
|
|
4982
|
-
|
|
4983
|
-
{
|
|
4984
|
-
|
|
4985
|
-
|
|
4986
|
-
|
|
4987
|
-
|
|
4988
|
-
|
|
4989
|
-
|
|
4990
|
-
|
|
4991
|
-
|
|
4992
|
-
|
|
4993
|
-
|
|
4994
|
-
|
|
4995
|
-
|
|
4996
|
-
|
|
4997
|
-
|
|
4998
|
-
|
|
4999
|
-
|
|
5000
|
-
|
|
5001
|
-
|
|
5002
|
-
|
|
5003
|
-
|
|
5004
|
-
|
|
5005
|
-
|
|
5006
|
-
|
|
5007
|
-
|
|
5008
|
-
|
|
5009
|
-
|
|
5010
|
-
|
|
5011
|
-
|
|
5507
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
5508
|
+
SidebarProvider,
|
|
5509
|
+
{
|
|
5510
|
+
className: cn("h-dvh overflow-hidden", className),
|
|
5511
|
+
open,
|
|
5512
|
+
onOpenChange,
|
|
5513
|
+
defaultOpen,
|
|
5514
|
+
children: [
|
|
5515
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Sidebar, { collapsible: "icon", children: [
|
|
5516
|
+
/* @__PURE__ */ jsxRuntime.jsxs(SidebarHeader, { className: "flex flex-row items-center gap-2 p-2", children: [
|
|
5517
|
+
/* @__PURE__ */ jsxRuntime.jsx(SidebarTrigger, { variant: "ghost", className: "size-8 shrink-0" }),
|
|
5518
|
+
/* @__PURE__ */ jsxRuntime.jsx(SidebarBrand, { brandName })
|
|
5519
|
+
] }),
|
|
5520
|
+
/* @__PURE__ */ jsxRuntime.jsx(SidebarContent, { className: "overflow-x:hidden", children: /* @__PURE__ */ jsxRuntime.jsx(SidebarGroup, { children: /* @__PURE__ */ jsxRuntime.jsx(SidebarGroupContent, { children: /* @__PURE__ */ jsxRuntime.jsx(SidebarMenu, { children: items.map((item) => {
|
|
5521
|
+
const menuItem = /* @__PURE__ */ jsxRuntime.jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
5522
|
+
SidebarMenuButton,
|
|
5523
|
+
{
|
|
5524
|
+
tooltip: item.label,
|
|
5525
|
+
isActive: activeItem === item.label || item.active,
|
|
5526
|
+
onClick: () => {
|
|
5527
|
+
item.onClick?.();
|
|
5528
|
+
onItemClick?.(item.label);
|
|
5529
|
+
},
|
|
5530
|
+
children: [
|
|
5531
|
+
item.icon,
|
|
5532
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: item.label })
|
|
5533
|
+
]
|
|
5534
|
+
}
|
|
5535
|
+
) }, item.label);
|
|
5536
|
+
if (!item.permission) return menuItem;
|
|
5537
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
5538
|
+
Can,
|
|
5539
|
+
{
|
|
5540
|
+
permission: item.permission,
|
|
5541
|
+
mode: item.permissionMode,
|
|
5542
|
+
children: menuItem
|
|
5543
|
+
},
|
|
5544
|
+
item.label
|
|
5545
|
+
);
|
|
5546
|
+
}) }) }) }) })
|
|
5547
|
+
] }),
|
|
5548
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-1 flex-col overflow-hidden", children: [
|
|
5549
|
+
header ? header : showHeader ? /* @__PURE__ */ jsxRuntime.jsxs("header", { className: "flex h-14 items-center gap-2 border-b px-4", children: [
|
|
5550
|
+
/* @__PURE__ */ jsxRuntime.jsx(SidebarTrigger, { variant: "ghost", className: "size-8 shrink-0 md:hidden" }),
|
|
5551
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium", children: brandName })
|
|
5552
|
+
] }) : /* @__PURE__ */ jsxRuntime.jsx(SidebarTrigger, { variant: "ghost", className: "size-8 shrink-0 md:hidden" }),
|
|
5553
|
+
/* @__PURE__ */ jsxRuntime.jsx("main", { className: cn("overflow-y-auto flex-1 p-6", mainClassName), children })
|
|
5554
|
+
] })
|
|
5555
|
+
]
|
|
5556
|
+
}
|
|
5557
|
+
);
|
|
5012
5558
|
}
|
|
5013
5559
|
function Textarea({ className, ...props }) {
|
|
5014
5560
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -5614,14 +6160,9 @@ var eventCalendarStyles = `
|
|
|
5614
6160
|
font-weight: 600;
|
|
5615
6161
|
}
|
|
5616
6162
|
|
|
5617
|
-
/* \u2500\u2500 Event modal \
|
|
6163
|
+
/* \u2500\u2500 Event modal \u2014 hidden; replaced by TCCE Popover in event-calendar.tsx \u2500\u2500 */
|
|
5618
6164
|
.sx-tcce .sx__event-modal {
|
|
5619
|
-
|
|
5620
|
-
border: 1px solid var(--color-border);
|
|
5621
|
-
font-size: 13px;
|
|
5622
|
-
min-width: 220px;
|
|
5623
|
-
max-width: 300px;
|
|
5624
|
-
background: var(--color-background);
|
|
6165
|
+
display: none !important;
|
|
5625
6166
|
}
|
|
5626
6167
|
.sx-tcce .sx__event-modal__title {
|
|
5627
6168
|
font-size: 14px;
|
|
@@ -5766,8 +6307,43 @@ function useEventCalendar({
|
|
|
5766
6307
|
return () => unsubscribe?.();
|
|
5767
6308
|
}, []);
|
|
5768
6309
|
return {
|
|
5769
|
-
calendarApp: calendarApp.current
|
|
6310
|
+
calendarApp: calendarApp.current,
|
|
6311
|
+
eventModal: eventModal$1.current
|
|
6312
|
+
};
|
|
6313
|
+
}
|
|
6314
|
+
var EVENT_COLOR = {
|
|
6315
|
+
default: "#22205f",
|
|
6316
|
+
primary: "#22205f",
|
|
6317
|
+
success: "#00a824",
|
|
6318
|
+
warning: "#c8a23b",
|
|
6319
|
+
danger: "#ea3a3d"
|
|
6320
|
+
};
|
|
6321
|
+
function getFixedAnchorRect(el) {
|
|
6322
|
+
const rect = el.getBoundingClientRect();
|
|
6323
|
+
let ancestor = el.parentElement;
|
|
6324
|
+
while (ancestor && ancestor !== document.documentElement) {
|
|
6325
|
+
if (window.getComputedStyle(ancestor).transform !== "none") {
|
|
6326
|
+
const cb = ancestor.getBoundingClientRect();
|
|
6327
|
+
return new DOMRect(rect.left - cb.left, rect.top - cb.top, rect.width, rect.height);
|
|
6328
|
+
}
|
|
6329
|
+
ancestor = ancestor.parentElement;
|
|
6330
|
+
}
|
|
6331
|
+
return rect;
|
|
6332
|
+
}
|
|
6333
|
+
function formatEventTime(start, end) {
|
|
6334
|
+
const isAllDay = start.length === 10;
|
|
6335
|
+
if (isAllDay) {
|
|
6336
|
+
const date = /* @__PURE__ */ new Date(`${start}T00:00:00`);
|
|
6337
|
+
return date.toLocaleDateString("en-US", { month: "long", day: "numeric", year: "numeric" });
|
|
6338
|
+
}
|
|
6339
|
+
const fmt = (s) => {
|
|
6340
|
+
const [, time] = s.split(" ");
|
|
6341
|
+
const [h, m] = time.split(":").map(Number);
|
|
6342
|
+
const ampm = h >= 12 ? "PM" : "AM";
|
|
6343
|
+
const hour = h % 12 || 12;
|
|
6344
|
+
return `${hour}:${m.toString().padStart(2, "0")} ${ampm}`;
|
|
5770
6345
|
};
|
|
6346
|
+
return `${fmt(start)} \u2013 ${fmt(end)}`;
|
|
5771
6347
|
}
|
|
5772
6348
|
function EventCalendar({
|
|
5773
6349
|
events,
|
|
@@ -5780,6 +6356,9 @@ function EventCalendar({
|
|
|
5780
6356
|
className
|
|
5781
6357
|
}) {
|
|
5782
6358
|
const [currentView, setCurrentView] = react.useState(defaultView);
|
|
6359
|
+
const [selectedEvent, setSelectedEvent] = react.useState(null);
|
|
6360
|
+
const [anchorRect, setAnchorRect] = react.useState(null);
|
|
6361
|
+
const clickedEventElRef = react.useRef(false);
|
|
5783
6362
|
const handleViewChange = react.useCallback(
|
|
5784
6363
|
(view) => {
|
|
5785
6364
|
setCurrentView(view);
|
|
@@ -5787,19 +6366,106 @@ function EventCalendar({
|
|
|
5787
6366
|
},
|
|
5788
6367
|
[onViewChange]
|
|
5789
6368
|
);
|
|
5790
|
-
const
|
|
6369
|
+
const handleEventClick = react.useCallback(
|
|
6370
|
+
(event) => {
|
|
6371
|
+
setSelectedEvent(event);
|
|
6372
|
+
onEventClick?.(event);
|
|
6373
|
+
},
|
|
6374
|
+
[onEventClick]
|
|
6375
|
+
);
|
|
6376
|
+
const { calendarApp, eventModal } = useEventCalendar({
|
|
5791
6377
|
events,
|
|
5792
6378
|
defaultView,
|
|
5793
6379
|
defaultDate,
|
|
5794
6380
|
locale,
|
|
5795
|
-
onEventClick,
|
|
6381
|
+
onEventClick: handleEventClick,
|
|
5796
6382
|
onEventCreate,
|
|
5797
6383
|
onViewChange: handleViewChange
|
|
5798
6384
|
});
|
|
6385
|
+
react.useEffect(() => {
|
|
6386
|
+
const unsub = eventModal.calendarEventElement.subscribe((el) => {
|
|
6387
|
+
if (!el) {
|
|
6388
|
+
if (clickedEventElRef.current) {
|
|
6389
|
+
clickedEventElRef.current = false;
|
|
6390
|
+
} else {
|
|
6391
|
+
setSelectedEvent(null);
|
|
6392
|
+
setAnchorRect(null);
|
|
6393
|
+
}
|
|
6394
|
+
} else {
|
|
6395
|
+
setAnchorRect(getFixedAnchorRect(el));
|
|
6396
|
+
}
|
|
6397
|
+
});
|
|
6398
|
+
return unsub;
|
|
6399
|
+
}, [eventModal]);
|
|
6400
|
+
const handlePopoverOpenChange = react.useCallback(
|
|
6401
|
+
(open) => {
|
|
6402
|
+
if (!open) {
|
|
6403
|
+
eventModal.close();
|
|
6404
|
+
setSelectedEvent(null);
|
|
6405
|
+
setAnchorRect(null);
|
|
6406
|
+
}
|
|
6407
|
+
},
|
|
6408
|
+
[eventModal]
|
|
6409
|
+
);
|
|
5799
6410
|
const contextValue = react.useMemo(() => ({ currentView }), [currentView]);
|
|
5800
6411
|
return /* @__PURE__ */ jsxRuntime.jsxs(EventCalendarContext.Provider, { value: contextValue, children: [
|
|
5801
6412
|
/* @__PURE__ */ jsxRuntime.jsx("style", { href: "tcce-event-calendar", precedence: "default", children: eventCalendarStyles }),
|
|
5802
|
-
/* @__PURE__ */ jsxRuntime.
|
|
6413
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Popover, { open: !!selectedEvent && !!anchorRect, onOpenChange: handlePopoverOpenChange, children: [
|
|
6414
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "event-calendar", className: cn("sx-tcce w-full", className), children: /* @__PURE__ */ jsxRuntime.jsx(react$2.ScheduleXCalendar, { calendarApp: calendarApp ?? null }) }),
|
|
6415
|
+
anchorRect && /* @__PURE__ */ jsxRuntime.jsx(PopoverAnchor, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
6416
|
+
"span",
|
|
6417
|
+
{
|
|
6418
|
+
style: {
|
|
6419
|
+
position: "fixed",
|
|
6420
|
+
top: anchorRect.top,
|
|
6421
|
+
left: anchorRect.left,
|
|
6422
|
+
width: anchorRect.width,
|
|
6423
|
+
height: anchorRect.height,
|
|
6424
|
+
pointerEvents: "none"
|
|
6425
|
+
}
|
|
6426
|
+
}
|
|
6427
|
+
) }),
|
|
6428
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6429
|
+
PopoverContent,
|
|
6430
|
+
{
|
|
6431
|
+
side: "right",
|
|
6432
|
+
align: "start",
|
|
6433
|
+
className: "w-65 gap-2",
|
|
6434
|
+
onPointerDownOutside: (e) => {
|
|
6435
|
+
const target = e.target;
|
|
6436
|
+
const isEventEl = target.closest(
|
|
6437
|
+
".sx__month-grid-event, .sx__time-grid-event, .sx__month-agenda-event"
|
|
6438
|
+
);
|
|
6439
|
+
if (isEventEl) {
|
|
6440
|
+
e.preventDefault();
|
|
6441
|
+
clickedEventElRef.current = true;
|
|
6442
|
+
}
|
|
6443
|
+
},
|
|
6444
|
+
children: selectedEvent && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
6445
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start justify-between gap-2", children: [
|
|
6446
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
6447
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6448
|
+
"span",
|
|
6449
|
+
{
|
|
6450
|
+
className: "size-2 shrink-0 rounded-full",
|
|
6451
|
+
style: {
|
|
6452
|
+
backgroundColor: EVENT_COLOR[selectedEvent.color ?? "default"]
|
|
6453
|
+
}
|
|
6454
|
+
}
|
|
6455
|
+
),
|
|
6456
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-heading text-sm font-semibold leading-tight", children: selectedEvent.title })
|
|
6457
|
+
] }),
|
|
6458
|
+
/* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "ghost", size: "icon-sm", "aria-label": "Edit event", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Pencil, { size: 14 }) })
|
|
6459
|
+
] }),
|
|
6460
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 text-xs text-muted-foreground", children: [
|
|
6461
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.Clock, { size: 13, className: "shrink-0" }),
|
|
6462
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: formatEventTime(selectedEvent.start, selectedEvent.end) })
|
|
6463
|
+
] }),
|
|
6464
|
+
selectedEvent.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: selectedEvent.description })
|
|
6465
|
+
] })
|
|
6466
|
+
}
|
|
6467
|
+
)
|
|
6468
|
+
] })
|
|
5803
6469
|
] });
|
|
5804
6470
|
}
|
|
5805
6471
|
function useAppForm(schema, options) {
|
|
@@ -6141,18 +6807,6 @@ function TablePaginationBase({
|
|
|
6141
6807
|
);
|
|
6142
6808
|
}
|
|
6143
6809
|
var TablePagination = react.memo(TablePaginationBase);
|
|
6144
|
-
function useMediaQuery(query) {
|
|
6145
|
-
const [matches, setMatches] = react.useState(false);
|
|
6146
|
-
react.useEffect(() => {
|
|
6147
|
-
if (typeof window === "undefined") return;
|
|
6148
|
-
const mql = window.matchMedia(query);
|
|
6149
|
-
setMatches(mql.matches);
|
|
6150
|
-
const handler = (e) => setMatches(e.matches);
|
|
6151
|
-
mql.addEventListener("change", handler);
|
|
6152
|
-
return () => mql.removeEventListener("change", handler);
|
|
6153
|
-
}, [query]);
|
|
6154
|
-
return matches;
|
|
6155
|
-
}
|
|
6156
6810
|
var TableContext = react.createContext(null);
|
|
6157
6811
|
function useTableContext() {
|
|
6158
6812
|
const ctx = react.useContext(TableContext);
|
|
@@ -7710,6 +8364,228 @@ function DataTableSearch({
|
|
|
7710
8364
|
)
|
|
7711
8365
|
] });
|
|
7712
8366
|
}
|
|
8367
|
+
var DrawerContext = react.createContext(false);
|
|
8368
|
+
function Drawer({ children, open, onOpenChange, ...props }) {
|
|
8369
|
+
const [internalOpen, setInternalOpen] = react.useState(props.defaultOpen ?? false);
|
|
8370
|
+
const isOpen = open !== void 0 ? open : internalOpen;
|
|
8371
|
+
return /* @__PURE__ */ jsxRuntime.jsx(DrawerContext.Provider, { value: isOpen, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
8372
|
+
radixUi.Dialog.Root,
|
|
8373
|
+
{
|
|
8374
|
+
"data-slot": "drawer",
|
|
8375
|
+
...props,
|
|
8376
|
+
open: isOpen,
|
|
8377
|
+
onOpenChange: (v) => {
|
|
8378
|
+
setInternalOpen(v);
|
|
8379
|
+
onOpenChange?.(v);
|
|
8380
|
+
},
|
|
8381
|
+
children
|
|
8382
|
+
}
|
|
8383
|
+
) });
|
|
8384
|
+
}
|
|
8385
|
+
function DrawerTrigger({ ...props }) {
|
|
8386
|
+
return /* @__PURE__ */ jsxRuntime.jsx(radixUi.Dialog.Trigger, { "data-slot": "drawer-trigger", ...props });
|
|
8387
|
+
}
|
|
8388
|
+
function DrawerClose({ ...props }) {
|
|
8389
|
+
return /* @__PURE__ */ jsxRuntime.jsx(radixUi.Dialog.Close, { "data-slot": "drawer-close", ...props });
|
|
8390
|
+
}
|
|
8391
|
+
function DrawerPortal({ children, ...props }) {
|
|
8392
|
+
const isOpen = react.useContext(DrawerContext);
|
|
8393
|
+
return /* @__PURE__ */ jsxRuntime.jsx(radixUi.Dialog.Portal, { forceMount: true, ...props, children: /* @__PURE__ */ jsxRuntime.jsx(react$1.AnimatePresence, { mode: "sync", children: isOpen && children }) });
|
|
8394
|
+
}
|
|
8395
|
+
function DrawerOverlay({ className, ...props }) {
|
|
8396
|
+
return /* @__PURE__ */ jsxRuntime.jsx(radixUi.Dialog.Overlay, { "data-slot": "drawer-overlay", asChild: true, forceMount: true, ...props, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
8397
|
+
react$1.motion.div,
|
|
8398
|
+
{
|
|
8399
|
+
className: cn(
|
|
8400
|
+
"fixed inset-0 isolate z-50 bg-black/30 supports-backdrop-filter:backdrop-blur-sm",
|
|
8401
|
+
className
|
|
8402
|
+
),
|
|
8403
|
+
initial: { opacity: 0 },
|
|
8404
|
+
animate: { opacity: 1 },
|
|
8405
|
+
exit: { opacity: 0 },
|
|
8406
|
+
transition: { duration: duration.normal, ease: ease.smooth }
|
|
8407
|
+
}
|
|
8408
|
+
) });
|
|
8409
|
+
}
|
|
8410
|
+
var sizeClasses = {
|
|
8411
|
+
sm: "w-64",
|
|
8412
|
+
md: "w-80",
|
|
8413
|
+
lg: "w-96",
|
|
8414
|
+
xl: "w-[30rem]",
|
|
8415
|
+
full: "w-screen"
|
|
8416
|
+
};
|
|
8417
|
+
function DrawerContent({
|
|
8418
|
+
className,
|
|
8419
|
+
children,
|
|
8420
|
+
side = "right",
|
|
8421
|
+
size = "md",
|
|
8422
|
+
showCloseButton = true,
|
|
8423
|
+
resizable = false,
|
|
8424
|
+
...props
|
|
8425
|
+
}) {
|
|
8426
|
+
const isHorizontal = side === "left" || side === "right";
|
|
8427
|
+
const xInitial = side === "right" ? "100%" : side === "left" ? "-100%" : 0;
|
|
8428
|
+
const yInitial = side === "bottom" ? "100%" : side === "top" ? "-100%" : 0;
|
|
8429
|
+
const dragRef = react.useRef(null);
|
|
8430
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(DrawerPortal, { children: [
|
|
8431
|
+
/* @__PURE__ */ jsxRuntime.jsx(DrawerOverlay, {}),
|
|
8432
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
8433
|
+
radixUi.Dialog.Content,
|
|
8434
|
+
{
|
|
8435
|
+
"data-slot": "drawer-content",
|
|
8436
|
+
"data-side": side,
|
|
8437
|
+
asChild: true,
|
|
8438
|
+
forceMount: true,
|
|
8439
|
+
className: cn(
|
|
8440
|
+
"fixed z-50 flex flex-col bg-popover text-popover-foreground shadow-xl outline-none",
|
|
8441
|
+
side === "left" && "inset-y-0 left-0",
|
|
8442
|
+
side === "right" && "inset-y-0 right-0",
|
|
8443
|
+
side === "top" && "inset-x-0 top-0",
|
|
8444
|
+
side === "bottom" && "inset-x-0 bottom-0",
|
|
8445
|
+
isHorizontal && sizeClasses[size],
|
|
8446
|
+
!isHorizontal && "h-auto min-h-40",
|
|
8447
|
+
className
|
|
8448
|
+
),
|
|
8449
|
+
...props,
|
|
8450
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
8451
|
+
react$1.motion.div,
|
|
8452
|
+
{
|
|
8453
|
+
className: cn("flex flex-col", isHorizontal && "h-full"),
|
|
8454
|
+
initial: { x: xInitial, y: yInitial, opacity: 0 },
|
|
8455
|
+
animate: { x: 0, y: 0, opacity: 1 },
|
|
8456
|
+
exit: { x: xInitial, y: yInitial, opacity: 0 },
|
|
8457
|
+
transition: transition.sidebar,
|
|
8458
|
+
children: [
|
|
8459
|
+
children,
|
|
8460
|
+
showCloseButton && /* @__PURE__ */ jsxRuntime.jsx(radixUi.Dialog.Close, { "data-slot": "drawer-close", asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
8461
|
+
Button,
|
|
8462
|
+
{
|
|
8463
|
+
variant: "ghost",
|
|
8464
|
+
className: "absolute top-4 right-4",
|
|
8465
|
+
size: "icon-sm",
|
|
8466
|
+
children: [
|
|
8467
|
+
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.XIcon, {}),
|
|
8468
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "Close" })
|
|
8469
|
+
]
|
|
8470
|
+
}
|
|
8471
|
+
) }),
|
|
8472
|
+
resizable && /* @__PURE__ */ jsxRuntime.jsx(
|
|
8473
|
+
"div",
|
|
8474
|
+
{
|
|
8475
|
+
"data-slot": "drawer-resize-handle",
|
|
8476
|
+
className: cn(
|
|
8477
|
+
"absolute opacity-0 transition-opacity hover:opacity-100 hover:bg-border",
|
|
8478
|
+
side === "right" && "inset-y-0 left-0 w-1 cursor-col-resize",
|
|
8479
|
+
side === "left" && "inset-y-0 right-0 w-1 cursor-col-resize",
|
|
8480
|
+
side === "top" && "inset-x-0 bottom-0 h-1 cursor-row-resize",
|
|
8481
|
+
side === "bottom" && "inset-x-0 top-0 h-1 cursor-row-resize"
|
|
8482
|
+
),
|
|
8483
|
+
onPointerDown: (e) => {
|
|
8484
|
+
e.preventDefault();
|
|
8485
|
+
const content = e.currentTarget.parentElement;
|
|
8486
|
+
if (!content) return;
|
|
8487
|
+
const startSize = isHorizontal ? parseFloat(getComputedStyle(content).width) : parseFloat(getComputedStyle(content).height);
|
|
8488
|
+
content.style.transition = "none";
|
|
8489
|
+
dragRef.current = {
|
|
8490
|
+
startPos: isHorizontal ? e.clientX : e.clientY,
|
|
8491
|
+
startSize,
|
|
8492
|
+
content
|
|
8493
|
+
};
|
|
8494
|
+
e.currentTarget.setPointerCapture(e.pointerId);
|
|
8495
|
+
},
|
|
8496
|
+
onPointerMove: (e) => {
|
|
8497
|
+
if (!dragRef.current) return;
|
|
8498
|
+
const { startPos, startSize, content } = dragRef.current;
|
|
8499
|
+
const delta = (isHorizontal ? e.clientX : e.clientY) - startPos;
|
|
8500
|
+
let newSize;
|
|
8501
|
+
if (side === "right") {
|
|
8502
|
+
newSize = Math.max(160, Math.min(window.innerWidth * 0.9, startSize - delta));
|
|
8503
|
+
} else if (side === "left") {
|
|
8504
|
+
newSize = Math.max(160, Math.min(window.innerWidth * 0.9, startSize + delta));
|
|
8505
|
+
} else if (side === "bottom") {
|
|
8506
|
+
newSize = Math.max(80, Math.min(window.innerHeight * 0.9, startSize - delta));
|
|
8507
|
+
} else {
|
|
8508
|
+
newSize = Math.max(80, Math.min(window.innerHeight * 0.9, startSize + delta));
|
|
8509
|
+
}
|
|
8510
|
+
content.style[isHorizontal ? "width" : "height"] = `${newSize}px`;
|
|
8511
|
+
},
|
|
8512
|
+
onPointerUp: () => {
|
|
8513
|
+
if (dragRef.current?.content) {
|
|
8514
|
+
dragRef.current.content.style.transition = "";
|
|
8515
|
+
}
|
|
8516
|
+
dragRef.current = null;
|
|
8517
|
+
},
|
|
8518
|
+
onPointerCancel: () => {
|
|
8519
|
+
if (dragRef.current?.content) {
|
|
8520
|
+
dragRef.current.content.style.transition = "";
|
|
8521
|
+
}
|
|
8522
|
+
dragRef.current = null;
|
|
8523
|
+
}
|
|
8524
|
+
}
|
|
8525
|
+
)
|
|
8526
|
+
]
|
|
8527
|
+
}
|
|
8528
|
+
)
|
|
8529
|
+
}
|
|
8530
|
+
)
|
|
8531
|
+
] });
|
|
8532
|
+
}
|
|
8533
|
+
function DrawerHeader({ className, ...props }) {
|
|
8534
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
8535
|
+
"div",
|
|
8536
|
+
{
|
|
8537
|
+
"data-slot": "drawer-header",
|
|
8538
|
+
className: cn("flex shrink-0 flex-col gap-1.5 p-6", className),
|
|
8539
|
+
...props
|
|
8540
|
+
}
|
|
8541
|
+
);
|
|
8542
|
+
}
|
|
8543
|
+
function DrawerBody({ className, ...props }) {
|
|
8544
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
8545
|
+
"div",
|
|
8546
|
+
{
|
|
8547
|
+
"data-slot": "drawer-body",
|
|
8548
|
+
className: cn("flex-1 overflow-y-auto px-6 pb-6", className),
|
|
8549
|
+
...props
|
|
8550
|
+
}
|
|
8551
|
+
);
|
|
8552
|
+
}
|
|
8553
|
+
function DrawerFooter({ className, ...props }) {
|
|
8554
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
8555
|
+
"div",
|
|
8556
|
+
{
|
|
8557
|
+
"data-slot": "drawer-footer",
|
|
8558
|
+
className: cn(
|
|
8559
|
+
"border-border mt-auto flex shrink-0 flex-wrap items-center justify-end gap-2 border-t px-6 py-4",
|
|
8560
|
+
className
|
|
8561
|
+
),
|
|
8562
|
+
...props
|
|
8563
|
+
}
|
|
8564
|
+
);
|
|
8565
|
+
}
|
|
8566
|
+
function DrawerTitle({ className, ...props }) {
|
|
8567
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
8568
|
+
radixUi.Dialog.Title,
|
|
8569
|
+
{
|
|
8570
|
+
"data-slot": "drawer-title",
|
|
8571
|
+
className: cn("font-heading text-base leading-none font-semibold", className),
|
|
8572
|
+
...props
|
|
8573
|
+
}
|
|
8574
|
+
);
|
|
8575
|
+
}
|
|
8576
|
+
function DrawerDescription({
|
|
8577
|
+
className,
|
|
8578
|
+
...props
|
|
8579
|
+
}) {
|
|
8580
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
8581
|
+
radixUi.Dialog.Description,
|
|
8582
|
+
{
|
|
8583
|
+
"data-slot": "drawer-description",
|
|
8584
|
+
className: cn("text-sm text-muted-foreground", className),
|
|
8585
|
+
...props
|
|
8586
|
+
}
|
|
8587
|
+
);
|
|
8588
|
+
}
|
|
7713
8589
|
function TCCEProvider({
|
|
7714
8590
|
children,
|
|
7715
8591
|
permissions,
|
|
@@ -7767,8 +8643,6 @@ exports.BreadcrumbList = BreadcrumbList;
|
|
|
7767
8643
|
exports.BreadcrumbPage = BreadcrumbPage;
|
|
7768
8644
|
exports.BreadcrumbSeparator = BreadcrumbSeparator;
|
|
7769
8645
|
exports.Button = Button;
|
|
7770
|
-
exports.Calendar = Calendar;
|
|
7771
|
-
exports.CalendarDayButton = CalendarDayButton;
|
|
7772
8646
|
exports.Can = Can;
|
|
7773
8647
|
exports.CanNot = CanNot;
|
|
7774
8648
|
exports.Card = Card;
|
|
@@ -7814,6 +8688,17 @@ exports.DialogOverlay = DialogOverlay;
|
|
|
7814
8688
|
exports.DialogPortal = DialogPortal;
|
|
7815
8689
|
exports.DialogTitle = DialogTitle;
|
|
7816
8690
|
exports.DialogTrigger = DialogTrigger;
|
|
8691
|
+
exports.Drawer = Drawer;
|
|
8692
|
+
exports.DrawerBody = DrawerBody;
|
|
8693
|
+
exports.DrawerClose = DrawerClose;
|
|
8694
|
+
exports.DrawerContent = DrawerContent;
|
|
8695
|
+
exports.DrawerDescription = DrawerDescription;
|
|
8696
|
+
exports.DrawerFooter = DrawerFooter;
|
|
8697
|
+
exports.DrawerHeader = DrawerHeader;
|
|
8698
|
+
exports.DrawerOverlay = DrawerOverlay;
|
|
8699
|
+
exports.DrawerPortal = DrawerPortal;
|
|
8700
|
+
exports.DrawerTitle = DrawerTitle;
|
|
8701
|
+
exports.DrawerTrigger = DrawerTrigger;
|
|
7817
8702
|
exports.DropdownMenu = DropdownMenu;
|
|
7818
8703
|
exports.DropdownMenuCheckboxItem = DropdownMenuCheckboxItem;
|
|
7819
8704
|
exports.DropdownMenuContent = DropdownMenuContent;
|
|
@@ -7856,6 +8741,7 @@ exports.ItemHeader = ItemHeader;
|
|
|
7856
8741
|
exports.ItemMedia = ItemMedia;
|
|
7857
8742
|
exports.ItemSeparator = ItemSeparator;
|
|
7858
8743
|
exports.ItemTitle = ItemTitle;
|
|
8744
|
+
exports.Label = Label;
|
|
7859
8745
|
exports.Link = Link;
|
|
7860
8746
|
exports.Logo = Logo;
|
|
7861
8747
|
exports.MiniCalendar = MiniCalendar;
|
|
@@ -7902,7 +8788,36 @@ exports.SelectSeparator = SelectSeparator;
|
|
|
7902
8788
|
exports.SelectTrigger = SelectTrigger;
|
|
7903
8789
|
exports.SelectValue = SelectValue;
|
|
7904
8790
|
exports.Separator = Separator;
|
|
8791
|
+
exports.Sheet = Sheet;
|
|
8792
|
+
exports.SheetClose = SheetClose;
|
|
8793
|
+
exports.SheetContent = SheetContent;
|
|
8794
|
+
exports.SheetDescription = SheetDescription;
|
|
8795
|
+
exports.SheetFooter = SheetFooter;
|
|
8796
|
+
exports.SheetHeader = SheetHeader;
|
|
8797
|
+
exports.SheetTitle = SheetTitle;
|
|
8798
|
+
exports.SheetTrigger = SheetTrigger;
|
|
8799
|
+
exports.Sidebar = Sidebar;
|
|
8800
|
+
exports.SidebarContent = SidebarContent;
|
|
8801
|
+
exports.SidebarFooter = SidebarFooter;
|
|
8802
|
+
exports.SidebarGroup = SidebarGroup;
|
|
8803
|
+
exports.SidebarGroupAction = SidebarGroupAction;
|
|
8804
|
+
exports.SidebarGroupContent = SidebarGroupContent;
|
|
8805
|
+
exports.SidebarGroupLabel = SidebarGroupLabel;
|
|
8806
|
+
exports.SidebarHeader = SidebarHeader;
|
|
8807
|
+
exports.SidebarInput = SidebarInput;
|
|
8808
|
+
exports.SidebarInset = SidebarInset;
|
|
8809
|
+
exports.SidebarMenu = SidebarMenu;
|
|
8810
|
+
exports.SidebarMenuAction = SidebarMenuAction;
|
|
8811
|
+
exports.SidebarMenuBadge = SidebarMenuBadge;
|
|
8812
|
+
exports.SidebarMenuButton = SidebarMenuButton;
|
|
8813
|
+
exports.SidebarMenuItem = SidebarMenuItem;
|
|
8814
|
+
exports.SidebarMenuSkeleton = SidebarMenuSkeleton;
|
|
8815
|
+
exports.SidebarMenuSub = SidebarMenuSub;
|
|
8816
|
+
exports.SidebarMenuSubButton = SidebarMenuSubButton;
|
|
8817
|
+
exports.SidebarMenuSubItem = SidebarMenuSubItem;
|
|
7905
8818
|
exports.SidebarProvider = SidebarProvider;
|
|
8819
|
+
exports.SidebarRail = SidebarRail;
|
|
8820
|
+
exports.SidebarSeparator = SidebarSeparator;
|
|
7906
8821
|
exports.SidebarTrigger = SidebarTrigger;
|
|
7907
8822
|
exports.Skeleton = Skeleton;
|
|
7908
8823
|
exports.Slider = Slider;
|
|
@@ -7990,6 +8905,7 @@ exports.useCan = useCan;
|
|
|
7990
8905
|
exports.useCarousel = useCarousel;
|
|
7991
8906
|
exports.useColorPicker = useColorPicker;
|
|
7992
8907
|
exports.useColumnFilter = useColumnFilter;
|
|
8908
|
+
exports.useSidebar = useSidebar;
|
|
7993
8909
|
exports.useTableContext = useTableContext;
|
|
7994
8910
|
exports.useTableData = useTableData;
|
|
7995
8911
|
exports.useTableFiltering = useTableFiltering;
|