@schemavaults/ui 0.59.1 → 0.61.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/components/ui/alert-dialog/alert-dialog.d.ts +87 -0
- package/dist/components/ui/alert-dialog/alert-dialog.js +115 -0
- package/dist/components/ui/alert-dialog/alert-dialog.js.map +1 -0
- package/dist/components/ui/alert-dialog/index.d.ts +3 -0
- package/dist/components/ui/alert-dialog/index.js +3 -0
- package/dist/components/ui/alert-dialog/index.js.map +1 -0
- package/dist/components/ui/calendar/calendar.d.ts +68 -0
- package/dist/components/ui/calendar/calendar.js +420 -0
- package/dist/components/ui/calendar/calendar.js.map +1 -0
- package/dist/components/ui/calendar/index.d.ts +3 -0
- package/dist/components/ui/calendar/index.js +3 -0
- package/dist/components/ui/calendar/index.js.map +1 -0
- package/dist/components/ui/index.d.ts +4 -0
- package/dist/components/ui/index.js +2 -0
- package/dist/components/ui/index.js.map +1 -1
- package/dist/components/ui/number-ticker/number-ticker.d.ts +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { type ComponentPropsWithoutRef, type HTMLAttributes, type ReactElement, type ReactNode } from "react";
|
|
2
|
+
import * as DialogPrimitive from "@radix-ui/react-dialog";
|
|
3
|
+
import { type VariantProps } from "class-variance-authority";
|
|
4
|
+
/**
|
|
5
|
+
* Tone drives the accent styling of the optional leading icon and the default
|
|
6
|
+
* styling of {@link AlertDialogAction}. Destructive confirmations (e.g. delete)
|
|
7
|
+
* should use the `destructive` tone so the confirm button is unmistakably risky.
|
|
8
|
+
*/
|
|
9
|
+
export declare const alertDialogToneIds: readonly ["default", "destructive", "warning", "success", "info"];
|
|
10
|
+
export type AlertDialogToneId = (typeof alertDialogToneIds)[number];
|
|
11
|
+
/**
|
|
12
|
+
* Root of the alert dialog. A modal, focus-trapped dialog that interrupts the
|
|
13
|
+
* user to confirm a consequential action. Unlike {@link Dialog}, it renders
|
|
14
|
+
* with `role="alertdialog"`, omits the corner close button, and does not
|
|
15
|
+
* dismiss on an outside click — the user must pick an explicit action.
|
|
16
|
+
*/
|
|
17
|
+
declare const AlertDialog: import("react").FC<DialogPrimitive.DialogProps>;
|
|
18
|
+
declare const AlertDialogTrigger: import("react").ForwardRefExoticComponent<DialogPrimitive.DialogTriggerProps & import("react").RefAttributes<HTMLButtonElement>>;
|
|
19
|
+
declare const AlertDialogPortal: import("react").FC<DialogPrimitive.DialogPortalProps>;
|
|
20
|
+
declare const AlertDialogOverlay: {
|
|
21
|
+
({ className, ...props }: ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>): ReactElement;
|
|
22
|
+
displayName: string;
|
|
23
|
+
};
|
|
24
|
+
export interface AlertDialogContentProps extends ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {
|
|
25
|
+
/** Accent tone shared with the icon and default action button. */
|
|
26
|
+
tone?: AlertDialogToneId;
|
|
27
|
+
}
|
|
28
|
+
declare const AlertDialogContent: {
|
|
29
|
+
({ className, children, tone, onInteractOutside, ...props }: AlertDialogContentProps): ReactElement;
|
|
30
|
+
displayName: string;
|
|
31
|
+
};
|
|
32
|
+
declare const AlertDialogHeader: {
|
|
33
|
+
({ className, ...props }: HTMLAttributes<HTMLDivElement>): ReactElement;
|
|
34
|
+
displayName: string;
|
|
35
|
+
};
|
|
36
|
+
declare const AlertDialogFooter: {
|
|
37
|
+
({ className, ...props }: HTMLAttributes<HTMLDivElement>): ReactElement;
|
|
38
|
+
displayName: string;
|
|
39
|
+
};
|
|
40
|
+
declare const AlertDialogTitle: {
|
|
41
|
+
({ className, ...props }: ComponentPropsWithoutRef<typeof DialogPrimitive.Title>): ReactElement;
|
|
42
|
+
displayName: string;
|
|
43
|
+
};
|
|
44
|
+
declare const AlertDialogDescription: {
|
|
45
|
+
({ className, ...props }: ComponentPropsWithoutRef<typeof DialogPrimitive.Description>): ReactElement;
|
|
46
|
+
displayName: string;
|
|
47
|
+
};
|
|
48
|
+
declare const alertDialogIconVariants: (props?: ({
|
|
49
|
+
tone?: "default" | "info" | "warning" | "destructive" | "success" | null | undefined;
|
|
50
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
51
|
+
export interface AlertDialogIconProps extends Omit<HTMLAttributes<HTMLSpanElement>, "children">, VariantProps<typeof alertDialogIconVariants> {
|
|
52
|
+
/** Override the auto-selected tone icon with a custom node. */
|
|
53
|
+
children?: ReactNode;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Optional themed icon for the header. When no `children` are provided, a
|
|
57
|
+
* sensible icon is chosen from the surrounding {@link AlertDialogContent} tone.
|
|
58
|
+
*/
|
|
59
|
+
declare const AlertDialogIcon: {
|
|
60
|
+
({ className, tone: toneProp, children, ...props }: AlertDialogIconProps): ReactElement;
|
|
61
|
+
displayName: string;
|
|
62
|
+
};
|
|
63
|
+
declare const alertDialogActionVariants: (props?: ({
|
|
64
|
+
tone?: "default" | "info" | "warning" | "destructive" | "success" | null | undefined;
|
|
65
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
66
|
+
export interface AlertDialogActionProps extends ComponentPropsWithoutRef<typeof DialogPrimitive.Close> {
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* The confirm button. Clicking it runs the supplied `onClick` and then closes
|
|
70
|
+
* the dialog. By default it inherits the surrounding tone (e.g. a `destructive`
|
|
71
|
+
* tone yields a red confirm button); pass your own `className` to override.
|
|
72
|
+
*/
|
|
73
|
+
declare const AlertDialogAction: {
|
|
74
|
+
({ className, ...props }: AlertDialogActionProps): ReactElement;
|
|
75
|
+
displayName: string;
|
|
76
|
+
};
|
|
77
|
+
export interface AlertDialogCancelProps extends ComponentPropsWithoutRef<typeof DialogPrimitive.Close> {
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* The dismiss button. Closes the dialog without performing the action and is
|
|
81
|
+
* the focused element when the dialog opens, so pressing Enter is always safe.
|
|
82
|
+
*/
|
|
83
|
+
declare const AlertDialogCancel: {
|
|
84
|
+
({ className, ...props }: AlertDialogCancelProps): ReactElement;
|
|
85
|
+
displayName: string;
|
|
86
|
+
};
|
|
87
|
+
export { AlertDialog, AlertDialogPortal, AlertDialogOverlay, AlertDialogTrigger, AlertDialogContent, AlertDialogHeader, AlertDialogFooter, AlertDialogTitle, AlertDialogDescription, AlertDialogIcon, AlertDialogAction, AlertDialogCancel, alertDialogIconVariants, alertDialogActionVariants, };
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { createContext, useContext, } from "react";
|
|
4
|
+
import * as DialogPrimitive from "@radix-ui/react-dialog";
|
|
5
|
+
import { cva } from "class-variance-authority";
|
|
6
|
+
import { AlertTriangle, CheckCircle2, Info, TriangleAlert, } from "lucide-react";
|
|
7
|
+
import { cn } from "../../../lib/utils";
|
|
8
|
+
import { buttonVariants } from "../button";
|
|
9
|
+
/**
|
|
10
|
+
* Tone drives the accent styling of the optional leading icon and the default
|
|
11
|
+
* styling of {@link AlertDialogAction}. Destructive confirmations (e.g. delete)
|
|
12
|
+
* should use the `destructive` tone so the confirm button is unmistakably risky.
|
|
13
|
+
*/
|
|
14
|
+
export const alertDialogToneIds = [
|
|
15
|
+
"default",
|
|
16
|
+
"destructive",
|
|
17
|
+
"warning",
|
|
18
|
+
"success",
|
|
19
|
+
"info",
|
|
20
|
+
];
|
|
21
|
+
const AlertDialogContext = createContext({
|
|
22
|
+
tone: "default",
|
|
23
|
+
});
|
|
24
|
+
function useAlertDialogTone() {
|
|
25
|
+
return useContext(AlertDialogContext).tone;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Root of the alert dialog. A modal, focus-trapped dialog that interrupts the
|
|
29
|
+
* user to confirm a consequential action. Unlike {@link Dialog}, it renders
|
|
30
|
+
* with `role="alertdialog"`, omits the corner close button, and does not
|
|
31
|
+
* dismiss on an outside click — the user must pick an explicit action.
|
|
32
|
+
*/
|
|
33
|
+
const AlertDialog = DialogPrimitive.Root;
|
|
34
|
+
const AlertDialogTrigger = DialogPrimitive.Trigger;
|
|
35
|
+
const AlertDialogPortal = DialogPrimitive.Portal;
|
|
36
|
+
const AlertDialogOverlay = ({ className, ...props }) => (_jsx(DialogPrimitive.Overlay, { className: cn("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0", className), ...props }));
|
|
37
|
+
AlertDialogOverlay.displayName = "AlertDialogOverlay";
|
|
38
|
+
const AlertDialogContent = ({ className, children, tone = "default", onInteractOutside, ...props }) => (_jsx(AlertDialogContext.Provider, { value: { tone }, children: _jsxs(AlertDialogPortal, { children: [_jsx(AlertDialogOverlay, {}), _jsx(DialogPrimitive.Content, { role: "alertdialog", onInteractOutside: (event) => {
|
|
39
|
+
// Require an explicit choice — never dismiss on outside click.
|
|
40
|
+
event.preventDefault();
|
|
41
|
+
onInteractOutside?.(event);
|
|
42
|
+
}, className: cn("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg", className), ...props, children: children })] }) }));
|
|
43
|
+
AlertDialogContent.displayName = "AlertDialogContent";
|
|
44
|
+
const AlertDialogHeader = ({ className, ...props }) => (_jsx("div", { className: cn("flex flex-col space-y-2 text-center sm:text-left", className), ...props }));
|
|
45
|
+
AlertDialogHeader.displayName = "AlertDialogHeader";
|
|
46
|
+
const AlertDialogFooter = ({ className, ...props }) => (_jsx("div", { className: cn("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end sm:gap-2", className), ...props }));
|
|
47
|
+
AlertDialogFooter.displayName = "AlertDialogFooter";
|
|
48
|
+
const AlertDialogTitle = ({ className, ...props }) => (_jsx(DialogPrimitive.Title, { className: cn("text-lg font-semibold leading-none tracking-tight", className), ...props }));
|
|
49
|
+
AlertDialogTitle.displayName = "AlertDialogTitle";
|
|
50
|
+
const AlertDialogDescription = ({ className, ...props }) => (_jsx(DialogPrimitive.Description, { className: cn("text-sm text-muted-foreground", className), ...props }));
|
|
51
|
+
AlertDialogDescription.displayName = "AlertDialogDescription";
|
|
52
|
+
const alertDialogIconVariants = cva("mx-auto flex size-11 shrink-0 items-center justify-center rounded-full sm:mx-0 [&>svg]:size-5", {
|
|
53
|
+
variants: {
|
|
54
|
+
tone: {
|
|
55
|
+
default: "bg-muted text-foreground",
|
|
56
|
+
destructive: "bg-destructive/15 text-destructive",
|
|
57
|
+
warning: "bg-warning/20 text-warning-foreground",
|
|
58
|
+
success: "bg-emerald-500/15 text-emerald-600 dark:text-emerald-400",
|
|
59
|
+
info: "bg-schemavaults-brand-blue/15 text-schemavaults-brand-blue",
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
defaultVariants: {
|
|
63
|
+
tone: "default",
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
const toneIcons = {
|
|
67
|
+
default: Info,
|
|
68
|
+
destructive: TriangleAlert,
|
|
69
|
+
warning: AlertTriangle,
|
|
70
|
+
success: CheckCircle2,
|
|
71
|
+
info: Info,
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Optional themed icon for the header. When no `children` are provided, a
|
|
75
|
+
* sensible icon is chosen from the surrounding {@link AlertDialogContent} tone.
|
|
76
|
+
*/
|
|
77
|
+
const AlertDialogIcon = ({ className, tone: toneProp, children, ...props }) => {
|
|
78
|
+
const contextTone = useAlertDialogTone();
|
|
79
|
+
const tone = toneProp ?? contextTone;
|
|
80
|
+
const FallbackIcon = toneIcons[tone];
|
|
81
|
+
return (_jsx("span", { "aria-hidden": "true", "data-slot": "alert-dialog-icon", className: cn(alertDialogIconVariants({ tone }), className), ...props, children: children ?? _jsx(FallbackIcon, {}) }));
|
|
82
|
+
};
|
|
83
|
+
AlertDialogIcon.displayName = "AlertDialogIcon";
|
|
84
|
+
const alertDialogActionVariants = cva("", {
|
|
85
|
+
variants: {
|
|
86
|
+
tone: {
|
|
87
|
+
default: "",
|
|
88
|
+
destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
|
|
89
|
+
warning: "bg-warning text-warning-foreground hover:bg-warning/90",
|
|
90
|
+
success: "bg-emerald-600 text-white hover:bg-emerald-600/90 dark:bg-emerald-500 dark:hover:bg-emerald-500/90",
|
|
91
|
+
info: "bg-schemavaults-brand-blue text-primary-foreground hover:bg-schemavaults-brand-blue/90",
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
defaultVariants: {
|
|
95
|
+
tone: "default",
|
|
96
|
+
},
|
|
97
|
+
});
|
|
98
|
+
/**
|
|
99
|
+
* The confirm button. Clicking it runs the supplied `onClick` and then closes
|
|
100
|
+
* the dialog. By default it inherits the surrounding tone (e.g. a `destructive`
|
|
101
|
+
* tone yields a red confirm button); pass your own `className` to override.
|
|
102
|
+
*/
|
|
103
|
+
const AlertDialogAction = ({ className, ...props }) => {
|
|
104
|
+
const tone = useAlertDialogTone();
|
|
105
|
+
return (_jsx(DialogPrimitive.Close, { "data-slot": "alert-dialog-action", className: cn(buttonVariants({ variant: "default" }), alertDialogActionVariants({ tone }), className), ...props }));
|
|
106
|
+
};
|
|
107
|
+
AlertDialogAction.displayName = "AlertDialogAction";
|
|
108
|
+
/**
|
|
109
|
+
* The dismiss button. Closes the dialog without performing the action and is
|
|
110
|
+
* the focused element when the dialog opens, so pressing Enter is always safe.
|
|
111
|
+
*/
|
|
112
|
+
const AlertDialogCancel = ({ className, ...props }) => (_jsx(DialogPrimitive.Close, { "data-slot": "alert-dialog-cancel", className: cn(buttonVariants({ variant: "outline" }), "mt-2 sm:mt-0", className), ...props }));
|
|
113
|
+
AlertDialogCancel.displayName = "AlertDialogCancel";
|
|
114
|
+
export { AlertDialog, AlertDialogPortal, AlertDialogOverlay, AlertDialogTrigger, AlertDialogContent, AlertDialogHeader, AlertDialogFooter, AlertDialogTitle, AlertDialogDescription, AlertDialogIcon, AlertDialogAction, AlertDialogCancel, alertDialogIconVariants, alertDialogActionVariants, };
|
|
115
|
+
//# sourceMappingURL=alert-dialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alert-dialog.js","sourceRoot":"","sources":["../../../../src/components/ui/alert-dialog/alert-dialog.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EACL,aAAa,EACb,UAAU,GAKX,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,GAAG,EAAqB,MAAM,0BAA0B,CAAC;AAClE,OAAO,EACL,aAAa,EACb,YAAY,EACZ,IAAI,EACJ,aAAa,GACd,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,SAAS;IACT,aAAa;IACb,SAAS;IACT,SAAS;IACT,MAAM;CAC8B,CAAC;AAOvC,MAAM,kBAAkB,GAAG,aAAa,CAA0B;IAChE,IAAI,EAAE,SAAS;CAChB,CAAC,CAAC;AAEH,SAAS,kBAAkB;IACzB,OAAO,UAAU,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC;AAC7C,CAAC;AAED;;;;;GAKG;AACH,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC;AAEzC,MAAM,kBAAkB,GAAG,eAAe,CAAC,OAAO,CAAC;AAEnD,MAAM,iBAAiB,GAAG,eAAe,CAAC,MAAM,CAAC;AAEjD,MAAM,kBAAkB,GAAG,CAAC,EAC1B,SAAS,EACT,GAAG,KAAK,EACiD,EAAgB,EAAE,CAAC,CAC5E,KAAC,eAAe,CAAC,OAAO,IACtB,SAAS,EAAE,EAAE,CACX,wJAAwJ,EACxJ,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACF,kBAAkB,CAAC,WAAW,GAAG,oBAAoB,CAAC;AAQtD,MAAM,kBAAkB,GAAG,CAAC,EAC1B,SAAS,EACT,QAAQ,EACR,IAAI,GAAG,SAAS,EAChB,iBAAiB,EACjB,GAAG,KAAK,EACgB,EAAgB,EAAE,CAAC,CAC3C,KAAC,kBAAkB,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,IAAI,EAAE,YAC1C,MAAC,iBAAiB,eAChB,KAAC,kBAAkB,KAAG,EACtB,KAAC,eAAe,CAAC,OAAO,IACtB,IAAI,EAAC,aAAa,EAClB,iBAAiB,EAAE,CAAC,KAAK,EAAQ,EAAE;oBACjC,+DAA+D;oBAC/D,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,iBAAiB,EAAE,CAAC,KAAK,CAAC,CAAC;gBAC7B,CAAC,EACD,SAAS,EAAE,EAAE,CACX,6fAA6f,EAC7f,SAAS,CACV,KACG,KAAK,YAER,QAAQ,GACe,IACR,GACQ,CAC/B,CAAC;AACF,kBAAkB,CAAC,WAAW,GAAG,oBAAoB,CAAC;AAEtD,MAAM,iBAAiB,GAAG,CAAC,EACzB,SAAS,EACT,GAAG,KAAK,EACuB,EAAgB,EAAE,CAAC,CAClD,cACE,SAAS,EAAE,EAAE,CACX,kDAAkD,EAClD,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACF,iBAAiB,CAAC,WAAW,GAAG,mBAAmB,CAAC;AAEpD,MAAM,iBAAiB,GAAG,CAAC,EACzB,SAAS,EACT,GAAG,KAAK,EACuB,EAAgB,EAAE,CAAC,CAClD,cACE,SAAS,EAAE,EAAE,CACX,iEAAiE,EACjE,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACF,iBAAiB,CAAC,WAAW,GAAG,mBAAmB,CAAC;AAEpD,MAAM,gBAAgB,GAAG,CAAC,EACxB,SAAS,EACT,GAAG,KAAK,EAC+C,EAAgB,EAAE,CAAC,CAC1E,KAAC,eAAe,CAAC,KAAK,IACpB,SAAS,EAAE,EAAE,CACX,mDAAmD,EACnD,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACF,gBAAgB,CAAC,WAAW,GAAG,kBAAkB,CAAC;AAElD,MAAM,sBAAsB,GAAG,CAAC,EAC9B,SAAS,EACT,GAAG,KAAK,EAGT,EAAgB,EAAE,CAAC,CAClB,KAAC,eAAe,CAAC,WAAW,IAC1B,SAAS,EAAE,EAAE,CAAC,+BAA+B,EAAE,SAAS,CAAC,KACrD,KAAK,GACT,CACH,CAAC;AACF,sBAAsB,CAAC,WAAW,GAAG,wBAAwB,CAAC;AAE9D,MAAM,uBAAuB,GAAG,GAAG,CACjC,+FAA+F,EAC/F;IACE,QAAQ,EAAE;QACR,IAAI,EAAE;YACJ,OAAO,EAAE,0BAA0B;YACnC,WAAW,EAAE,oCAAoC;YACjD,OAAO,EAAE,uCAAuC;YAChD,OAAO,EAAE,0DAA0D;YACnE,IAAI,EAAE,4DAA4D;SACvB;KAC9C;IACD,eAAe,EAAE;QACf,IAAI,EAAE,SAAS;KAChB;CACF,CACF,CAAC;AAEF,MAAM,SAAS,GAAG;IAChB,OAAO,EAAE,IAAI;IACb,WAAW,EAAE,aAAa;IAC1B,OAAO,EAAE,aAAa;IACtB,OAAO,EAAE,YAAY;IACrB,IAAI,EAAE,IAAI;CACsC,CAAC;AASnD;;;GAGG;AACH,MAAM,eAAe,GAAG,CAAC,EACvB,SAAS,EACT,IAAI,EAAE,QAAQ,EACd,QAAQ,EACR,GAAG,KAAK,EACa,EAAgB,EAAE;IACvC,MAAM,WAAW,GAAG,kBAAkB,EAAE,CAAC;IACzC,MAAM,IAAI,GAAG,QAAQ,IAAI,WAAW,CAAC;IACrC,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAErC,OAAO,CACL,8BACc,MAAM,eACR,mBAAmB,EAC7B,SAAS,EAAE,EAAE,CAAC,uBAAuB,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,KACvD,KAAK,YAER,QAAQ,IAAI,KAAC,YAAY,KAAG,GACxB,CACR,CAAC;AACJ,CAAC,CAAC;AACF,eAAe,CAAC,WAAW,GAAG,iBAAiB,CAAC;AAEhD,MAAM,yBAAyB,GAAG,GAAG,CAAC,EAAE,EAAE;IACxC,QAAQ,EAAE;QACR,IAAI,EAAE;YACJ,OAAO,EAAE,EAAE;YACX,WAAW,EACT,oEAAoE;YACtE,OAAO,EAAE,wDAAwD;YACjE,OAAO,EACL,oGAAoG;YACtG,IAAI,EAAE,wFAAwF;SACnD;KAC9C;IACD,eAAe,EAAE;QACf,IAAI,EAAE,SAAS;KAChB;CACF,CAAC,CAAC;AAKH;;;;GAIG;AACH,MAAM,iBAAiB,GAAG,CAAC,EACzB,SAAS,EACT,GAAG,KAAK,EACe,EAAgB,EAAE;IACzC,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;IAClC,OAAO,CACL,KAAC,eAAe,CAAC,KAAK,iBACV,qBAAqB,EAC/B,SAAS,EAAE,EAAE,CACX,cAAc,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EACtC,yBAAyB,CAAC,EAAE,IAAI,EAAE,CAAC,EACnC,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC,CAAC;AACF,iBAAiB,CAAC,WAAW,GAAG,mBAAmB,CAAC;AAKpD;;;GAGG;AACH,MAAM,iBAAiB,GAAG,CAAC,EACzB,SAAS,EACT,GAAG,KAAK,EACe,EAAgB,EAAE,CAAC,CAC1C,KAAC,eAAe,CAAC,KAAK,iBACV,qBAAqB,EAC/B,SAAS,EAAE,EAAE,CACX,cAAc,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EACtC,cAAc,EACd,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACF,iBAAiB,CAAC,WAAW,GAAG,mBAAmB,CAAC;AAEpD,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,EACvB,yBAAyB,GAC1B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/ui/alert-dialog/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAG/B,OAAO,EAAE,WAAW,IAAI,OAAO,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { type ComponentProps, type ReactElement, type Ref } from "react";
|
|
2
|
+
import { type VariantProps } from "class-variance-authority";
|
|
3
|
+
export declare const calendarSizeIds: readonly ["sm", "default", "lg"];
|
|
4
|
+
export type CalendarSizeId = (typeof calendarSizeIds)[number];
|
|
5
|
+
export declare const calendarModeIds: readonly ["single", "multiple", "range"];
|
|
6
|
+
export type CalendarMode = (typeof calendarModeIds)[number];
|
|
7
|
+
/** A start/end date pair used by `mode="range"`. */
|
|
8
|
+
export interface DateRange {
|
|
9
|
+
from: Date | undefined;
|
|
10
|
+
to?: Date | undefined;
|
|
11
|
+
}
|
|
12
|
+
type WeekStartsOn = 0 | 1 | 2 | 3 | 4 | 5 | 6;
|
|
13
|
+
declare const calendarCellVariants: (props?: ({
|
|
14
|
+
size?: "sm" | "default" | "lg" | null | undefined;
|
|
15
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
16
|
+
declare const calendarDayVariants: (props?: ({
|
|
17
|
+
size?: "sm" | "default" | "lg" | null | undefined;
|
|
18
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
19
|
+
type CalendarBaseProps = Omit<ComponentProps<"div">, "onSelect"> & {
|
|
20
|
+
size?: CalendarSizeId;
|
|
21
|
+
/** Controlled displayed month (any day within it). */
|
|
22
|
+
month?: Date;
|
|
23
|
+
/** Initial displayed month when uncontrolled. */
|
|
24
|
+
defaultMonth?: Date;
|
|
25
|
+
/** Called when the user navigates to a different month. */
|
|
26
|
+
onMonthChange?: (month: Date) => void;
|
|
27
|
+
/** First day of the week: 0 (Sunday) … 6 (Saturday). Defaults to 0. */
|
|
28
|
+
weekStartsOn?: WeekStartsOn;
|
|
29
|
+
/** Earliest selectable day (inclusive). */
|
|
30
|
+
fromDate?: Date;
|
|
31
|
+
/** Latest selectable day (inclusive). */
|
|
32
|
+
toDate?: Date;
|
|
33
|
+
/** Predicate marking individual days as non-selectable. */
|
|
34
|
+
disabled?: (date: Date) => boolean;
|
|
35
|
+
/** Render leading/trailing days from adjacent months. Defaults to true. */
|
|
36
|
+
showOutsideDays?: boolean;
|
|
37
|
+
/** Always render six week rows for a stable height. Defaults to false. */
|
|
38
|
+
fixedWeeks?: boolean;
|
|
39
|
+
/** BCP-47 locale used for month/weekday labels. */
|
|
40
|
+
locale?: string;
|
|
41
|
+
ref?: Ref<HTMLDivElement>;
|
|
42
|
+
};
|
|
43
|
+
export interface CalendarSingleProps extends CalendarBaseProps {
|
|
44
|
+
mode?: "single";
|
|
45
|
+
selected?: Date;
|
|
46
|
+
defaultSelected?: Date;
|
|
47
|
+
onSelect?: (date: Date | undefined) => void;
|
|
48
|
+
}
|
|
49
|
+
export interface CalendarMultipleProps extends CalendarBaseProps {
|
|
50
|
+
mode: "multiple";
|
|
51
|
+
selected?: Date[];
|
|
52
|
+
defaultSelected?: Date[];
|
|
53
|
+
onSelect?: (dates: Date[]) => void;
|
|
54
|
+
}
|
|
55
|
+
export interface CalendarRangeProps extends CalendarBaseProps {
|
|
56
|
+
mode: "range";
|
|
57
|
+
selected?: DateRange;
|
|
58
|
+
defaultSelected?: DateRange;
|
|
59
|
+
onSelect?: (range: DateRange | undefined) => void;
|
|
60
|
+
}
|
|
61
|
+
export type CalendarProps = CalendarSingleProps | CalendarMultipleProps | CalendarRangeProps;
|
|
62
|
+
export type { VariantProps };
|
|
63
|
+
declare function Calendar(props: CalendarProps): ReactElement;
|
|
64
|
+
declare namespace Calendar {
|
|
65
|
+
var displayName: string;
|
|
66
|
+
}
|
|
67
|
+
export { Calendar, calendarCellVariants, calendarDayVariants };
|
|
68
|
+
export default Calendar;
|
|
@@ -0,0 +1,420 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useCallback, useEffect, useMemo, useRef, useState, } from "react";
|
|
4
|
+
import { ChevronLeft, ChevronRight } from "lucide-react";
|
|
5
|
+
import { cva } from "class-variance-authority";
|
|
6
|
+
import { cn } from "../../../lib/utils";
|
|
7
|
+
export const calendarSizeIds = [
|
|
8
|
+
"sm",
|
|
9
|
+
"default",
|
|
10
|
+
"lg",
|
|
11
|
+
];
|
|
12
|
+
export const calendarModeIds = [
|
|
13
|
+
"single",
|
|
14
|
+
"multiple",
|
|
15
|
+
"range",
|
|
16
|
+
];
|
|
17
|
+
/* -------------------------------------------------------------------------- */
|
|
18
|
+
/* Date helpers (no external dependency) */
|
|
19
|
+
/* -------------------------------------------------------------------------- */
|
|
20
|
+
function startOfDay(date) {
|
|
21
|
+
return new Date(date.getFullYear(), date.getMonth(), date.getDate());
|
|
22
|
+
}
|
|
23
|
+
function startOfMonth(date) {
|
|
24
|
+
return new Date(date.getFullYear(), date.getMonth(), 1);
|
|
25
|
+
}
|
|
26
|
+
function endOfMonth(date) {
|
|
27
|
+
return new Date(date.getFullYear(), date.getMonth() + 1, 0);
|
|
28
|
+
}
|
|
29
|
+
function addDays(date, amount) {
|
|
30
|
+
const next = startOfDay(date);
|
|
31
|
+
next.setDate(next.getDate() + amount);
|
|
32
|
+
return next;
|
|
33
|
+
}
|
|
34
|
+
/** Add whole months while clamping the day-of-month (Jan 31 + 1mo -> Feb 28). */
|
|
35
|
+
function addMonthsKeepDay(date, amount) {
|
|
36
|
+
const target = new Date(date.getFullYear(), date.getMonth() + amount, 1);
|
|
37
|
+
const lastDay = endOfMonth(target).getDate();
|
|
38
|
+
target.setDate(Math.min(date.getDate(), lastDay));
|
|
39
|
+
return startOfDay(target);
|
|
40
|
+
}
|
|
41
|
+
function startOfWeek(date, weekStartsOn) {
|
|
42
|
+
const day = startOfDay(date);
|
|
43
|
+
const diff = (day.getDay() - weekStartsOn + 7) % 7;
|
|
44
|
+
return addDays(day, -diff);
|
|
45
|
+
}
|
|
46
|
+
function isSameDay(a, b) {
|
|
47
|
+
if (!a || !b)
|
|
48
|
+
return false;
|
|
49
|
+
return (a.getFullYear() === b.getFullYear() &&
|
|
50
|
+
a.getMonth() === b.getMonth() &&
|
|
51
|
+
a.getDate() === b.getDate());
|
|
52
|
+
}
|
|
53
|
+
function isSameMonth(a, b) {
|
|
54
|
+
return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth();
|
|
55
|
+
}
|
|
56
|
+
/** Negative if `a` is an earlier day than `b`, positive if later, 0 if same. */
|
|
57
|
+
function compareDay(a, b) {
|
|
58
|
+
return startOfDay(a).getTime() - startOfDay(b).getTime();
|
|
59
|
+
}
|
|
60
|
+
function toISODateKey(date) {
|
|
61
|
+
const year = date.getFullYear();
|
|
62
|
+
const month = `${date.getMonth() + 1}`.padStart(2, "0");
|
|
63
|
+
const day = `${date.getDate()}`.padStart(2, "0");
|
|
64
|
+
return `${year}-${month}-${day}`;
|
|
65
|
+
}
|
|
66
|
+
function buildWeeks(month, weekStartsOn, fixedWeeks) {
|
|
67
|
+
const firstDay = startOfMonth(month);
|
|
68
|
+
const leading = (firstDay.getDay() - weekStartsOn + 7) % 7;
|
|
69
|
+
const gridStart = addDays(firstDay, -leading);
|
|
70
|
+
const daysInMonth = endOfMonth(month).getDate();
|
|
71
|
+
const span = leading + daysInMonth;
|
|
72
|
+
const weekCount = fixedWeeks ? 6 : Math.ceil(span / 7);
|
|
73
|
+
const weeks = [];
|
|
74
|
+
let cursor = gridStart;
|
|
75
|
+
for (let w = 0; w < weekCount; w++) {
|
|
76
|
+
const week = [];
|
|
77
|
+
for (let d = 0; d < 7; d++) {
|
|
78
|
+
week.push(cursor);
|
|
79
|
+
cursor = addDays(cursor, 1);
|
|
80
|
+
}
|
|
81
|
+
weeks.push(week);
|
|
82
|
+
}
|
|
83
|
+
return weeks;
|
|
84
|
+
}
|
|
85
|
+
function getWeekdayLabels(weekStartsOn, weekday, locale) {
|
|
86
|
+
const formatter = new Intl.DateTimeFormat(locale, { weekday });
|
|
87
|
+
// 2021-08-01 is a Sunday — a stable anchor for weekday names.
|
|
88
|
+
const sunday = new Date(2021, 7, 1);
|
|
89
|
+
const labels = [];
|
|
90
|
+
for (let i = 0; i < 7; i++) {
|
|
91
|
+
labels.push(formatter.format(addDays(sunday, weekStartsOn + i)));
|
|
92
|
+
}
|
|
93
|
+
return labels;
|
|
94
|
+
}
|
|
95
|
+
/* -------------------------------------------------------------------------- */
|
|
96
|
+
/* Variants */
|
|
97
|
+
/* -------------------------------------------------------------------------- */
|
|
98
|
+
const calendarCellVariants = cva("relative p-0 text-center", {
|
|
99
|
+
variants: {
|
|
100
|
+
size: {
|
|
101
|
+
sm: "h-8 w-8",
|
|
102
|
+
default: "h-9 w-9",
|
|
103
|
+
lg: "h-11 w-11",
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
defaultVariants: { size: "default" },
|
|
107
|
+
});
|
|
108
|
+
const calendarWeekdayVariants = cva("inline-flex items-center justify-center font-medium text-muted-foreground", {
|
|
109
|
+
variants: {
|
|
110
|
+
size: {
|
|
111
|
+
sm: "h-7 w-8 text-[0.65rem]",
|
|
112
|
+
default: "h-8 w-9 text-xs",
|
|
113
|
+
lg: "h-9 w-11 text-sm",
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
defaultVariants: { size: "default" },
|
|
117
|
+
});
|
|
118
|
+
const calendarDayVariants = cva("inline-flex h-full w-full items-center justify-center rounded-md font-normal text-foreground ring-offset-background transition-colors cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:z-20", {
|
|
119
|
+
variants: {
|
|
120
|
+
size: {
|
|
121
|
+
sm: "text-xs",
|
|
122
|
+
default: "text-sm",
|
|
123
|
+
lg: "text-base",
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
defaultVariants: { size: "default" },
|
|
127
|
+
});
|
|
128
|
+
const navButtonClass = "inline-flex h-7 w-7 items-center justify-center rounded-md border border-input bg-transparent text-foreground opacity-80 ring-offset-background transition-colors hover:bg-accent hover:text-accent-foreground hover:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-30";
|
|
129
|
+
const MODE_PROP_KEYS = new Set([
|
|
130
|
+
"mode",
|
|
131
|
+
"selected",
|
|
132
|
+
"defaultSelected",
|
|
133
|
+
"onSelect",
|
|
134
|
+
"children",
|
|
135
|
+
]);
|
|
136
|
+
/* -------------------------------------------------------------------------- */
|
|
137
|
+
/* Component */
|
|
138
|
+
/* -------------------------------------------------------------------------- */
|
|
139
|
+
function Calendar(props) {
|
|
140
|
+
const { className, size = "default", month: monthProp, defaultMonth, onMonthChange, weekStartsOn = 0, fromDate, toDate, disabled, showOutsideDays = true, fixedWeeks = false, locale, ref, ...rest } = props;
|
|
141
|
+
const mode = props.mode ?? "single";
|
|
142
|
+
/* ----------------------------- selection state ------------------------- */
|
|
143
|
+
const [internalSingle, setInternalSingle] = useState(() => props.mode === "multiple" || props.mode === "range"
|
|
144
|
+
? undefined
|
|
145
|
+
: props.defaultSelected);
|
|
146
|
+
const [internalMultiple, setInternalMultiple] = useState(() => props.mode === "multiple" ? (props.defaultSelected ?? []) : []);
|
|
147
|
+
const [internalRange, setInternalRange] = useState(() => props.mode === "range" ? props.defaultSelected : undefined);
|
|
148
|
+
const isControlled = "selected" in props;
|
|
149
|
+
let controlledSingle;
|
|
150
|
+
let controlledMultiple;
|
|
151
|
+
let controlledRange;
|
|
152
|
+
switch (props.mode) {
|
|
153
|
+
case "multiple":
|
|
154
|
+
controlledMultiple = props.selected;
|
|
155
|
+
break;
|
|
156
|
+
case "range":
|
|
157
|
+
controlledRange = props.selected;
|
|
158
|
+
break;
|
|
159
|
+
default:
|
|
160
|
+
controlledSingle = props.selected;
|
|
161
|
+
}
|
|
162
|
+
const currentSingle = isControlled ? controlledSingle : internalSingle;
|
|
163
|
+
const currentMultiple = useMemo(() => (isControlled ? (controlledMultiple ?? []) : internalMultiple), [isControlled, controlledMultiple, internalMultiple]);
|
|
164
|
+
const currentRange = isControlled ? controlledRange : internalRange;
|
|
165
|
+
/* ------------------------------- month state --------------------------- */
|
|
166
|
+
const [internalMonth, setInternalMonth] = useState(() => {
|
|
167
|
+
const basis = defaultMonth ??
|
|
168
|
+
(props.mode === "range"
|
|
169
|
+
? props.defaultSelected?.from
|
|
170
|
+
: props.mode === "multiple"
|
|
171
|
+
? props.defaultSelected?.[0]
|
|
172
|
+
: props.defaultSelected) ??
|
|
173
|
+
new Date();
|
|
174
|
+
return startOfMonth(basis);
|
|
175
|
+
});
|
|
176
|
+
const displayMonth = monthProp ? startOfMonth(monthProp) : internalMonth;
|
|
177
|
+
const goToMonth = useCallback((next) => {
|
|
178
|
+
const normalized = startOfMonth(next);
|
|
179
|
+
if (!monthProp)
|
|
180
|
+
setInternalMonth(normalized);
|
|
181
|
+
onMonthChange?.(normalized);
|
|
182
|
+
}, [monthProp, onMonthChange]);
|
|
183
|
+
/* ------------------------------- focus state --------------------------- */
|
|
184
|
+
const rootRef = useRef(null);
|
|
185
|
+
const [focusedDate, setFocusedDate] = useState(null);
|
|
186
|
+
const [hoveredDate, setHoveredDate] = useState(null);
|
|
187
|
+
const shouldFocusRef = useRef(false);
|
|
188
|
+
const setRootRef = useCallback((node) => {
|
|
189
|
+
rootRef.current = node;
|
|
190
|
+
if (typeof ref === "function")
|
|
191
|
+
ref(node);
|
|
192
|
+
else if (ref)
|
|
193
|
+
ref.current = node;
|
|
194
|
+
}, [ref]);
|
|
195
|
+
useEffect(() => {
|
|
196
|
+
if (!shouldFocusRef.current || !focusedDate || !rootRef.current)
|
|
197
|
+
return;
|
|
198
|
+
const selector = `[data-day="${toISODateKey(focusedDate)}"]`;
|
|
199
|
+
const el = rootRef.current.querySelector(selector);
|
|
200
|
+
el?.focus();
|
|
201
|
+
shouldFocusRef.current = false;
|
|
202
|
+
}, [focusedDate, displayMonth]);
|
|
203
|
+
/* ------------------------------- derived ------------------------------- */
|
|
204
|
+
const today = startOfDay(new Date());
|
|
205
|
+
const isDateDisabled = useCallback((day) => {
|
|
206
|
+
if (fromDate && compareDay(day, fromDate) < 0)
|
|
207
|
+
return true;
|
|
208
|
+
if (toDate && compareDay(day, toDate) > 0)
|
|
209
|
+
return true;
|
|
210
|
+
return disabled ? disabled(day) : false;
|
|
211
|
+
}, [fromDate, toDate, disabled]);
|
|
212
|
+
const weeks = useMemo(() => buildWeeks(displayMonth, weekStartsOn, fixedWeeks), [displayMonth, weekStartsOn, fixedWeeks]);
|
|
213
|
+
const weekdayShort = useMemo(() => getWeekdayLabels(weekStartsOn, "short", locale), [weekStartsOn, locale]);
|
|
214
|
+
const weekdayLong = useMemo(() => getWeekdayLabels(weekStartsOn, "long", locale), [weekStartsOn, locale]);
|
|
215
|
+
const monthLabel = useMemo(() => new Intl.DateTimeFormat(locale, {
|
|
216
|
+
month: "long",
|
|
217
|
+
year: "numeric",
|
|
218
|
+
}).format(displayMonth), [displayMonth, locale]);
|
|
219
|
+
const dayLabelFormatter = useMemo(() => new Intl.DateTimeFormat(locale, {
|
|
220
|
+
weekday: "long",
|
|
221
|
+
year: "numeric",
|
|
222
|
+
month: "long",
|
|
223
|
+
day: "numeric",
|
|
224
|
+
}), [locale]);
|
|
225
|
+
/** Range currently shown, including the in-progress hover preview. */
|
|
226
|
+
const displayRange = useMemo(() => {
|
|
227
|
+
if (mode !== "range")
|
|
228
|
+
return null;
|
|
229
|
+
const from = currentRange?.from;
|
|
230
|
+
const to = currentRange?.to;
|
|
231
|
+
if (from && to)
|
|
232
|
+
return { from, to };
|
|
233
|
+
if (from && hoveredDate && !to) {
|
|
234
|
+
return compareDay(hoveredDate, from) < 0
|
|
235
|
+
? { from: hoveredDate, to: from }
|
|
236
|
+
: { from, to: hoveredDate };
|
|
237
|
+
}
|
|
238
|
+
if (from)
|
|
239
|
+
return { from, to: from };
|
|
240
|
+
return null;
|
|
241
|
+
}, [mode, currentRange, hoveredDate]);
|
|
242
|
+
const tabStopDate = useMemo(() => {
|
|
243
|
+
if (focusedDate && isSameMonth(focusedDate, displayMonth)) {
|
|
244
|
+
return focusedDate;
|
|
245
|
+
}
|
|
246
|
+
const selectedCandidate = mode === "single"
|
|
247
|
+
? currentSingle
|
|
248
|
+
: mode === "range"
|
|
249
|
+
? currentRange?.from
|
|
250
|
+
: currentMultiple[0];
|
|
251
|
+
if (selectedCandidate &&
|
|
252
|
+
isSameMonth(selectedCandidate, displayMonth) &&
|
|
253
|
+
!isDateDisabled(selectedCandidate)) {
|
|
254
|
+
return startOfDay(selectedCandidate);
|
|
255
|
+
}
|
|
256
|
+
if (isSameMonth(today, displayMonth) && !isDateDisabled(today)) {
|
|
257
|
+
return today;
|
|
258
|
+
}
|
|
259
|
+
const last = endOfMonth(displayMonth).getDate();
|
|
260
|
+
for (let d = 1; d <= last; d++) {
|
|
261
|
+
const candidate = new Date(displayMonth.getFullYear(), displayMonth.getMonth(), d);
|
|
262
|
+
if (!isDateDisabled(candidate))
|
|
263
|
+
return candidate;
|
|
264
|
+
}
|
|
265
|
+
return startOfMonth(displayMonth);
|
|
266
|
+
}, [
|
|
267
|
+
focusedDate,
|
|
268
|
+
displayMonth,
|
|
269
|
+
mode,
|
|
270
|
+
currentSingle,
|
|
271
|
+
currentRange,
|
|
272
|
+
currentMultiple,
|
|
273
|
+
isDateDisabled,
|
|
274
|
+
today,
|
|
275
|
+
]);
|
|
276
|
+
/* ------------------------------- handlers ------------------------------ */
|
|
277
|
+
const handleSelectDay = useCallback((day) => {
|
|
278
|
+
switch (props.mode) {
|
|
279
|
+
case "multiple": {
|
|
280
|
+
const exists = currentMultiple.some((d) => isSameDay(d, day));
|
|
281
|
+
const next = exists
|
|
282
|
+
? currentMultiple.filter((d) => !isSameDay(d, day))
|
|
283
|
+
: [...currentMultiple, day];
|
|
284
|
+
if (!isControlled)
|
|
285
|
+
setInternalMultiple(next);
|
|
286
|
+
props.onSelect?.(next);
|
|
287
|
+
break;
|
|
288
|
+
}
|
|
289
|
+
case "range": {
|
|
290
|
+
const from = currentRange?.from;
|
|
291
|
+
const to = currentRange?.to;
|
|
292
|
+
let next;
|
|
293
|
+
if (!from || (from && to)) {
|
|
294
|
+
next = { from: day, to: undefined };
|
|
295
|
+
}
|
|
296
|
+
else {
|
|
297
|
+
next =
|
|
298
|
+
compareDay(day, from) < 0
|
|
299
|
+
? { from: day, to: from }
|
|
300
|
+
: { from, to: day };
|
|
301
|
+
}
|
|
302
|
+
if (!isControlled)
|
|
303
|
+
setInternalRange(next);
|
|
304
|
+
props.onSelect?.(next);
|
|
305
|
+
break;
|
|
306
|
+
}
|
|
307
|
+
default: {
|
|
308
|
+
if (!isControlled)
|
|
309
|
+
setInternalSingle(day);
|
|
310
|
+
props.onSelect?.(day);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}, [props, currentMultiple, currentRange, isControlled]);
|
|
314
|
+
const handleDayKeyDown = useCallback((event, day) => {
|
|
315
|
+
let next = null;
|
|
316
|
+
switch (event.key) {
|
|
317
|
+
case "ArrowLeft":
|
|
318
|
+
next = addDays(day, -1);
|
|
319
|
+
break;
|
|
320
|
+
case "ArrowRight":
|
|
321
|
+
next = addDays(day, 1);
|
|
322
|
+
break;
|
|
323
|
+
case "ArrowUp":
|
|
324
|
+
next = addDays(day, -7);
|
|
325
|
+
break;
|
|
326
|
+
case "ArrowDown":
|
|
327
|
+
next = addDays(day, 7);
|
|
328
|
+
break;
|
|
329
|
+
case "Home":
|
|
330
|
+
next = startOfWeek(day, weekStartsOn);
|
|
331
|
+
break;
|
|
332
|
+
case "End":
|
|
333
|
+
next = addDays(startOfWeek(day, weekStartsOn), 6);
|
|
334
|
+
break;
|
|
335
|
+
case "PageUp":
|
|
336
|
+
next = addMonthsKeepDay(day, event.shiftKey ? -12 : -1);
|
|
337
|
+
break;
|
|
338
|
+
case "PageDown":
|
|
339
|
+
next = addMonthsKeepDay(day, event.shiftKey ? 12 : 1);
|
|
340
|
+
break;
|
|
341
|
+
case "Enter":
|
|
342
|
+
case " ":
|
|
343
|
+
event.preventDefault();
|
|
344
|
+
if (!isDateDisabled(day))
|
|
345
|
+
handleSelectDay(day);
|
|
346
|
+
return;
|
|
347
|
+
default:
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
event.preventDefault();
|
|
351
|
+
setFocusedDate(next);
|
|
352
|
+
if (!isSameMonth(next, displayMonth))
|
|
353
|
+
goToMonth(next);
|
|
354
|
+
shouldFocusRef.current = true;
|
|
355
|
+
}, [weekStartsOn, isDateDisabled, handleSelectDay, displayMonth, goToMonth]);
|
|
356
|
+
/* ------------------------------- nav guards ---------------------------- */
|
|
357
|
+
const prevDisabled = fromDate
|
|
358
|
+
? compareDay(endOfMonth(addMonthsKeepDay(displayMonth, -1)), fromDate) < 0
|
|
359
|
+
: false;
|
|
360
|
+
const nextDisabled = toDate
|
|
361
|
+
? compareDay(startOfMonth(addMonthsKeepDay(displayMonth, 1)), toDate) > 0
|
|
362
|
+
: false;
|
|
363
|
+
/* ------------------------------- rendering ----------------------------- */
|
|
364
|
+
const divProps = {};
|
|
365
|
+
for (const key of Object.keys(rest)) {
|
|
366
|
+
if (MODE_PROP_KEYS.has(key))
|
|
367
|
+
continue;
|
|
368
|
+
divProps[key] = rest[key];
|
|
369
|
+
}
|
|
370
|
+
function renderDay(day) {
|
|
371
|
+
const key = toISODateKey(day);
|
|
372
|
+
const outside = !isSameMonth(day, displayMonth);
|
|
373
|
+
if (outside && !showOutsideDays) {
|
|
374
|
+
return (_jsx("div", { role: "gridcell", "aria-hidden": "true", className: cn(calendarCellVariants({ size })) }, key));
|
|
375
|
+
}
|
|
376
|
+
if (outside) {
|
|
377
|
+
return (_jsx("div", { role: "gridcell", "aria-hidden": "true", className: cn(calendarCellVariants({ size })), children: _jsx("span", { className: cn(calendarDayVariants({ size }), "cursor-default text-muted-foreground opacity-50"), children: day.getDate() }) }, key));
|
|
378
|
+
}
|
|
379
|
+
const isDisabled = isDateDisabled(day);
|
|
380
|
+
const isToday = isSameDay(day, today);
|
|
381
|
+
const inRange = displayRange
|
|
382
|
+
? compareDay(day, displayRange.from) >= 0 &&
|
|
383
|
+
compareDay(day, displayRange.to) <= 0
|
|
384
|
+
: false;
|
|
385
|
+
const isRangeStart = displayRange
|
|
386
|
+
? isSameDay(day, displayRange.from)
|
|
387
|
+
: false;
|
|
388
|
+
const isRangeEnd = displayRange ? isSameDay(day, displayRange.to) : false;
|
|
389
|
+
let isSelected = false;
|
|
390
|
+
if (mode === "single") {
|
|
391
|
+
isSelected = isSameDay(day, currentSingle);
|
|
392
|
+
}
|
|
393
|
+
else if (mode === "multiple") {
|
|
394
|
+
isSelected = currentMultiple.some((d) => isSameDay(d, day));
|
|
395
|
+
}
|
|
396
|
+
else {
|
|
397
|
+
isSelected =
|
|
398
|
+
isSameDay(day, currentRange?.from) || isSameDay(day, currentRange?.to);
|
|
399
|
+
}
|
|
400
|
+
const isRangeMiddle = mode === "range" && inRange && !isSelected;
|
|
401
|
+
const tabIndex = isSameDay(day, tabStopDate) ? 0 : -1;
|
|
402
|
+
const cellClass = cn(calendarCellVariants({ size }), mode === "range" && inRange && "bg-accent", mode === "range" && inRange && isRangeStart && "rounded-l-md", mode === "range" && inRange && isRangeEnd && "rounded-r-md");
|
|
403
|
+
const dayClass = cn(calendarDayVariants({ size }), "hover:bg-accent hover:text-accent-foreground", isToday && "border border-input", isRangeMiddle &&
|
|
404
|
+
"rounded-none bg-transparent text-accent-foreground hover:bg-accent/60", isSelected &&
|
|
405
|
+
"border-transparent bg-primary font-medium text-primary-foreground hover:bg-primary/90 focus-visible:bg-primary/90", isDisabled &&
|
|
406
|
+
"pointer-events-none text-muted-foreground opacity-40 hover:bg-transparent hover:text-muted-foreground");
|
|
407
|
+
return (_jsx("div", { role: "gridcell", "aria-selected": isSelected || undefined, className: cellClass, children: _jsx("button", { type: "button", "data-day": key, "data-slot": "calendar-day", "data-selected": isSelected || undefined, "data-today": isToday || undefined, "data-disabled": isDisabled || undefined, "aria-label": dayLabelFormatter.format(day), "aria-disabled": isDisabled || undefined, "aria-current": isToday ? "date" : undefined, tabIndex: tabIndex, className: dayClass, onClick: () => {
|
|
408
|
+
if (!isDisabled)
|
|
409
|
+
handleSelectDay(day);
|
|
410
|
+
}, onMouseEnter: () => {
|
|
411
|
+
if (mode === "range" && !isDisabled)
|
|
412
|
+
setHoveredDate(day);
|
|
413
|
+
}, onFocus: () => setFocusedDate(day), onKeyDown: (event) => handleDayKeyDown(event, day), children: day.getDate() }) }, key));
|
|
414
|
+
}
|
|
415
|
+
return (_jsxs("div", { ref: setRootRef, "data-slot": "calendar", "data-mode": mode, className: cn("inline-block w-fit select-none space-y-3 rounded-lg border border-border bg-popover p-3 text-popover-foreground shadow-sm", className), ...divProps, children: [_jsxs("div", { className: "flex items-center justify-between gap-2 px-0.5", children: [_jsx("button", { type: "button", "aria-label": "Go to previous month", disabled: prevDisabled, onClick: () => goToMonth(addMonthsKeepDay(displayMonth, -1)), className: navButtonClass, children: _jsx(ChevronLeft, { className: "size-4", "aria-hidden": "true" }) }), _jsx("div", { "aria-live": "polite", "aria-atomic": "true", className: "text-sm font-medium capitalize", children: monthLabel }), _jsx("button", { type: "button", "aria-label": "Go to next month", disabled: nextDisabled, onClick: () => goToMonth(addMonthsKeepDay(displayMonth, 1)), className: navButtonClass, children: _jsx(ChevronRight, { className: "size-4", "aria-hidden": "true" }) })] }), _jsxs("div", { role: "grid", "aria-label": monthLabel, "aria-multiselectable": mode !== "single" ? true : undefined, children: [_jsx("div", { role: "row", className: "flex", children: weekdayShort.map((label, index) => (_jsx("div", { role: "columnheader", "aria-label": weekdayLong[index], className: cn(calendarWeekdayVariants({ size })), children: label }, label + index))) }), _jsx("div", { onMouseLeave: () => setHoveredDate(null), children: weeks.map((week, index) => (_jsx("div", { role: "row", className: "mt-1 flex", children: week.map((day) => renderDay(day)) }, index))) })] })] }));
|
|
416
|
+
}
|
|
417
|
+
Calendar.displayName = "Calendar";
|
|
418
|
+
export { Calendar, calendarCellVariants, calendarDayVariants };
|
|
419
|
+
export default Calendar;
|
|
420
|
+
//# sourceMappingURL=calendar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calendar.js","sourceRoot":"","sources":["../../../../src/components/ui/calendar/calendar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { Calendar, calendarCellVariants, calendarDayVariants, calendarSizeIds, calendarModeIds, } from "./calendar";
|
|
2
|
+
export type { CalendarProps, CalendarSingleProps, CalendarMultipleProps, CalendarRangeProps, CalendarSizeId, CalendarMode, DateRange, } from "./calendar";
|
|
3
|
+
export { Calendar as default } from "./calendar";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/ui/calendar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,eAAe,GAChB,MAAM,YAAY,CAAC;AAUpB,OAAO,EAAE,QAAQ,IAAI,OAAO,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -48,6 +48,8 @@ export * from "./navigation-menu";
|
|
|
48
48
|
export type * from "./navigation-menu";
|
|
49
49
|
export * from "./dialog";
|
|
50
50
|
export type * from "./dialog";
|
|
51
|
+
export * from "./alert-dialog";
|
|
52
|
+
export type * from "./alert-dialog";
|
|
51
53
|
export * from "./popover";
|
|
52
54
|
export type * from "./popover";
|
|
53
55
|
export * from "./command";
|
|
@@ -174,3 +176,5 @@ export * from "./floating-action-button";
|
|
|
174
176
|
export type * from "./floating-action-button";
|
|
175
177
|
export * from "./notification-bell";
|
|
176
178
|
export type * from "./notification-bell";
|
|
179
|
+
export * from "./calendar";
|
|
180
|
+
export type * from "./calendar";
|
|
@@ -23,6 +23,7 @@ export * from "./dropdown-menu";
|
|
|
23
23
|
export * from "./tooltip";
|
|
24
24
|
export * from "./navigation-menu";
|
|
25
25
|
export * from "./dialog";
|
|
26
|
+
export * from "./alert-dialog";
|
|
26
27
|
export * from "./popover";
|
|
27
28
|
export * from "./command";
|
|
28
29
|
export * from "./combobox";
|
|
@@ -86,4 +87,5 @@ export * from "./carousel";
|
|
|
86
87
|
export * from "./countdown";
|
|
87
88
|
export * from "./floating-action-button";
|
|
88
89
|
export * from "./notification-bell";
|
|
90
|
+
export * from "./calendar";
|
|
89
91
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AAGzB,cAAc,uBAAuB,CAAC;AAGtC,cAAc,aAAa,CAAC;AAG5B,cAAc,SAAS,CAAC;AAGxB,cAAc,WAAW,CAAC;AAG1B,cAAc,SAAS,CAAC;AAGxB,cAAc,mBAAmB,CAAC;AAGlC,cAAc,0BAA0B,CAAC;AAGzC,cAAc,UAAU,CAAC;AAGzB,cAAc,SAAS,CAAC;AAGxB,cAAc,kBAAkB,CAAC;AAGjC,cAAc,aAAa,CAAC;AAG5B,cAAc,kCAAkC,CAAC;AAGjD,cAAc,cAAc,CAAC;AAG7B,cAAc,SAAS,CAAC;AAGxB,cAAc,SAAS,CAAC;AAExB,cAAc,WAAW,CAAC;AAG1B,cAAc,YAAY,CAAC;AAG3B,cAAc,QAAQ,CAAC;AAGvB,cAAc,QAAQ,CAAC;AAGvB,cAAc,aAAa,CAAC;AAG5B,cAAc,iBAAiB,CAAC;AAGhC,cAAc,WAAW,CAAC;AAG1B,cAAc,mBAAmB,CAAC;AAGlC,cAAc,UAAU,CAAC;AAGzB,cAAc,WAAW,CAAC;AAG1B,cAAc,WAAW,CAAC;AAG1B,cAAc,YAAY,CAAC;AAG3B,cAAc,SAAS,CAAC;AAGxB,cAAc,aAAa,CAAC;AAG5B,cAAc,YAAY,CAAC;AAG3B,cAAc,YAAY,CAAC;AAG3B,cAAc,cAAc,CAAC;AAG7B,cAAc,eAAe,CAAC;AAG9B,cAAc,YAAY,CAAC;AAG3B,cAAc,2BAA2B,CAAC;AAG1C,cAAc,kBAAkB,CAAC;AAGjC,cAAc,gBAAgB,CAAC;AAG/B,cAAc,eAAe,CAAC;AAG9B,cAAc,WAAW,CAAC;AAG1B,cAAc,gBAAgB,CAAC;AAG/B,cAAc,cAAc,CAAC;AAG7B,cAAc,SAAS,CAAC;AAGxB,cAAc,UAAU,CAAC;AAGzB,cAAc,eAAe,CAAC;AAG9B,cAAc,qBAAqB,CAAC;AAGpC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,QAAQ,CAAC;AAGvB,cAAc,QAAQ,CAAC;AAGvB,cAAc,UAAU,CAAC;AAGzB,cAAc,UAAU,CAAC;AAGzB,cAAc,gBAAgB,CAAC;AAG/B,cAAc,qBAAqB,CAAC;AAGpC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,SAAS,CAAC;AAGxB,cAAc,cAAc,CAAC;AAG7B,cAAc,cAAc,CAAC;AAG7B,cAAc,OAAO,CAAC;AAGtB,cAAc,eAAe,CAAC;AAG9B,cAAc,WAAW,CAAC;AAG1B,cAAc,UAAU,CAAC;AAGzB,cAAc,eAAe,CAAC;AAG9B,cAAc,aAAa,CAAC;AAG5B,cAAc,YAAY,CAAC;AAG3B,cAAc,UAAU,CAAC;AAGzB,cAAc,gBAAgB,CAAC;AAG/B,cAAc,cAAc,CAAC;AAG7B,cAAc,eAAe,CAAC;AAG9B,cAAc,qBAAqB,CAAC;AAGpC,cAAc,WAAW,CAAC;AAG1B,cAAc,UAAU,CAAC;AAGzB,cAAc,QAAQ,CAAC;AAGvB,cAAc,cAAc,CAAC;AAG7B,cAAc,iBAAiB,CAAC;AAGhC,cAAc,aAAa,CAAC;AAG5B,cAAc,gBAAgB,CAAC;AAG/B,cAAc,gBAAgB,CAAC;AAG/B,cAAc,oBAAoB,CAAC;AAGnC,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC;AAG5B,cAAc,qBAAqB,CAAC;AAGpC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,aAAa,CAAC;AAG5B,cAAc,YAAY,CAAC;AAG3B,cAAc,aAAa,CAAC;AAG5B,cAAc,0BAA0B,CAAC;AAGzC,cAAc,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AAGzB,cAAc,uBAAuB,CAAC;AAGtC,cAAc,aAAa,CAAC;AAG5B,cAAc,SAAS,CAAC;AAGxB,cAAc,WAAW,CAAC;AAG1B,cAAc,SAAS,CAAC;AAGxB,cAAc,mBAAmB,CAAC;AAGlC,cAAc,0BAA0B,CAAC;AAGzC,cAAc,UAAU,CAAC;AAGzB,cAAc,SAAS,CAAC;AAGxB,cAAc,kBAAkB,CAAC;AAGjC,cAAc,aAAa,CAAC;AAG5B,cAAc,kCAAkC,CAAC;AAGjD,cAAc,cAAc,CAAC;AAG7B,cAAc,SAAS,CAAC;AAGxB,cAAc,SAAS,CAAC;AAExB,cAAc,WAAW,CAAC;AAG1B,cAAc,YAAY,CAAC;AAG3B,cAAc,QAAQ,CAAC;AAGvB,cAAc,QAAQ,CAAC;AAGvB,cAAc,aAAa,CAAC;AAG5B,cAAc,iBAAiB,CAAC;AAGhC,cAAc,WAAW,CAAC;AAG1B,cAAc,mBAAmB,CAAC;AAGlC,cAAc,UAAU,CAAC;AAGzB,cAAc,gBAAgB,CAAC;AAG/B,cAAc,WAAW,CAAC;AAG1B,cAAc,WAAW,CAAC;AAG1B,cAAc,YAAY,CAAC;AAG3B,cAAc,SAAS,CAAC;AAGxB,cAAc,aAAa,CAAC;AAG5B,cAAc,YAAY,CAAC;AAG3B,cAAc,YAAY,CAAC;AAG3B,cAAc,cAAc,CAAC;AAG7B,cAAc,eAAe,CAAC;AAG9B,cAAc,YAAY,CAAC;AAG3B,cAAc,2BAA2B,CAAC;AAG1C,cAAc,kBAAkB,CAAC;AAGjC,cAAc,gBAAgB,CAAC;AAG/B,cAAc,eAAe,CAAC;AAG9B,cAAc,WAAW,CAAC;AAG1B,cAAc,gBAAgB,CAAC;AAG/B,cAAc,cAAc,CAAC;AAG7B,cAAc,SAAS,CAAC;AAGxB,cAAc,UAAU,CAAC;AAGzB,cAAc,eAAe,CAAC;AAG9B,cAAc,qBAAqB,CAAC;AAGpC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,QAAQ,CAAC;AAGvB,cAAc,QAAQ,CAAC;AAGvB,cAAc,UAAU,CAAC;AAGzB,cAAc,UAAU,CAAC;AAGzB,cAAc,gBAAgB,CAAC;AAG/B,cAAc,qBAAqB,CAAC;AAGpC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,SAAS,CAAC;AAGxB,cAAc,cAAc,CAAC;AAG7B,cAAc,cAAc,CAAC;AAG7B,cAAc,OAAO,CAAC;AAGtB,cAAc,eAAe,CAAC;AAG9B,cAAc,WAAW,CAAC;AAG1B,cAAc,UAAU,CAAC;AAGzB,cAAc,eAAe,CAAC;AAG9B,cAAc,aAAa,CAAC;AAG5B,cAAc,YAAY,CAAC;AAG3B,cAAc,UAAU,CAAC;AAGzB,cAAc,gBAAgB,CAAC;AAG/B,cAAc,cAAc,CAAC;AAG7B,cAAc,eAAe,CAAC;AAG9B,cAAc,qBAAqB,CAAC;AAGpC,cAAc,WAAW,CAAC;AAG1B,cAAc,UAAU,CAAC;AAGzB,cAAc,QAAQ,CAAC;AAGvB,cAAc,cAAc,CAAC;AAG7B,cAAc,iBAAiB,CAAC;AAGhC,cAAc,aAAa,CAAC;AAG5B,cAAc,gBAAgB,CAAC;AAG/B,cAAc,gBAAgB,CAAC;AAG/B,cAAc,oBAAoB,CAAC;AAGnC,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC;AAG5B,cAAc,qBAAqB,CAAC;AAGpC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,aAAa,CAAC;AAG5B,cAAc,YAAY,CAAC;AAG3B,cAAc,aAAa,CAAC;AAG5B,cAAc,0BAA0B,CAAC;AAGzC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,YAAY,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type VariantProps } from "class-variance-authority";
|
|
2
2
|
import { type ComponentProps, type ReactElement, type Ref } from "react";
|
|
3
3
|
declare const numberTickerVariants: (props?: ({
|
|
4
|
-
variant?: "default" | "warning" | "destructive" | "primary" | "
|
|
4
|
+
variant?: "default" | "warning" | "destructive" | "primary" | "success" | "muted" | null | undefined;
|
|
5
5
|
size?: "sm" | "default" | "lg" | "xl" | "2xl" | "3xl" | null | undefined;
|
|
6
6
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
7
7
|
export type NumberTickerEase = "linear" | "easeIn" | "easeOut" | "easeInOut" | "circIn" | "circOut" | "circInOut" | "backIn" | "backOut" | "backInOut" | "anticipate";
|