@sth87/shadcn-design-system 0.1.0 → 0.1.1
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/cjs/components/Checkbox/Checkbox.cjs +1 -1
- package/dist/cjs/components/Checkbox/Checkbox.cjs.map +1 -1
- package/dist/cjs/components/Input/Input.cjs +1 -1
- package/dist/cjs/components/Input/Input.cjs.map +1 -1
- package/dist/cjs/components/Rate/Rate.cjs +1 -1
- package/dist/cjs/components/Rate/Rate.cjs.map +1 -1
- package/dist/cjs/components/Sheet/Sheet.cjs +1 -1
- package/dist/cjs/components/Sheet/Sheet.cjs.map +1 -1
- package/dist/cjs/components/Slider/Slider.cjs +1 -1
- package/dist/cjs/components/Slider/Slider.cjs.map +1 -1
- package/dist/cjs/components/Stepper/Stepper.cjs +1 -1
- package/dist/cjs/components/Stepper/Stepper.cjs.map +1 -1
- package/dist/cjs/components/Stepper/StepperWrapper.cjs +1 -1
- package/dist/cjs/components/Stepper/StepperWrapper.cjs.map +1 -1
- package/dist/cjs/components/Switch/Switch.cjs +1 -1
- package/dist/cjs/components/Switch/Switch.cjs.map +1 -1
- package/dist/cjs/components/Table/data-table-column-header.cjs +1 -1
- package/dist/cjs/components/Table/data-table-column-header.cjs.map +1 -1
- package/dist/cjs/components/Tabs/classes.cjs +1 -1
- package/dist/cjs/components/Tabs/classes.cjs.map +1 -1
- package/dist/cjs/components/TimeGridView.cjs +1 -1
- package/dist/cjs/components/TimeGridView.cjs.map +1 -1
- package/dist/cjs/components/Toast/Toast.cjs +1 -1
- package/dist/cjs/components/Toast/Toast.cjs.map +1 -1
- package/dist/cjs/components/WheelColumn.cjs +1 -1
- package/dist/cjs/components/WheelColumn.cjs.map +1 -1
- package/dist/cjs/packages/ui/src/components/calendar.cjs +1 -1
- package/dist/cjs/packages/ui/src/components/calendar.cjs.map +1 -1
- package/dist/cjs/styles/index.css +1 -1
- package/dist/esm/components/Checkbox/Checkbox.js +20 -20
- package/dist/esm/components/Checkbox/Checkbox.js.map +1 -1
- package/dist/esm/components/Input/Input.js +43 -43
- package/dist/esm/components/Input/Input.js.map +1 -1
- package/dist/esm/components/Rate/Rate.js +15 -15
- package/dist/esm/components/Rate/Rate.js.map +1 -1
- package/dist/esm/components/Sheet/Sheet.js +25 -25
- package/dist/esm/components/Sheet/Sheet.js.map +1 -1
- package/dist/esm/components/Slider/Slider.js +139 -139
- package/dist/esm/components/Slider/Slider.js.map +1 -1
- package/dist/esm/components/Stepper/Stepper.js +52 -52
- package/dist/esm/components/Stepper/Stepper.js.map +1 -1
- package/dist/esm/components/Stepper/StepperWrapper.js +25 -25
- package/dist/esm/components/Stepper/StepperWrapper.js.map +1 -1
- package/dist/esm/components/Switch/Switch.js +19 -19
- package/dist/esm/components/Switch/Switch.js.map +1 -1
- package/dist/esm/components/Table/data-table-column-header.js +22 -22
- package/dist/esm/components/Table/data-table-column-header.js.map +1 -1
- package/dist/esm/components/Tabs/classes.js +128 -128
- package/dist/esm/components/Tabs/classes.js.map +1 -1
- package/dist/esm/components/TimeGridView.js +27 -27
- package/dist/esm/components/TimeGridView.js.map +1 -1
- package/dist/esm/components/Toast/Toast.js +26 -26
- package/dist/esm/components/Toast/Toast.js.map +1 -1
- package/dist/esm/components/WheelColumn.js +9 -9
- package/dist/esm/components/WheelColumn.js.map +1 -1
- package/dist/esm/packages/ui/src/components/calendar.js +73 -73
- package/dist/esm/packages/ui/src/components/calendar.js.map +1 -1
- package/dist/esm/styles/index.css +1 -1
- package/package.json +1 -1
|
@@ -49,36 +49,36 @@ const h = {
|
|
|
49
49
|
default: null,
|
|
50
50
|
primary: /* @__PURE__ */ t(i, { className: "ds:w-4 ds:h-4 ds:shrink-0" }),
|
|
51
51
|
secondary: /* @__PURE__ */ t(i, { className: "ds:w-4 ds:h-4 ds:shrink-0" })
|
|
52
|
-
},
|
|
52
|
+
}, d = (r, s) => /* @__PURE__ */ p(
|
|
53
53
|
"div",
|
|
54
54
|
{
|
|
55
55
|
className: g(
|
|
56
56
|
"ds:flex ds:items-center ds:gap-2 ds:rounded-md ds:px-3 ds:py-2 ds:shadow-md ds:text-sm ds:font-medium",
|
|
57
|
-
h[
|
|
57
|
+
h[r]
|
|
58
58
|
),
|
|
59
59
|
children: [
|
|
60
|
-
w[
|
|
61
|
-
/* @__PURE__ */ t("span", { children:
|
|
60
|
+
w[r],
|
|
61
|
+
/* @__PURE__ */ t("span", { children: s })
|
|
62
62
|
]
|
|
63
63
|
}
|
|
64
|
-
),
|
|
65
|
-
(...
|
|
66
|
-
const [
|
|
67
|
-
return o.custom(() =>
|
|
64
|
+
), ss = Object.assign(
|
|
65
|
+
(...r) => {
|
|
66
|
+
const [s] = r, e = typeof s == "function" ? s() : s ?? "Notification";
|
|
67
|
+
return o.custom(() => d("default", e));
|
|
68
68
|
},
|
|
69
69
|
{
|
|
70
|
-
success: (
|
|
71
|
-
error: (
|
|
72
|
-
warning: (
|
|
73
|
-
info: (
|
|
74
|
-
primary: (
|
|
75
|
-
secondary: (
|
|
70
|
+
success: (r, s) => o.custom(() => d("success", r), s),
|
|
71
|
+
error: (r, s) => o.custom(() => d("error", r), s),
|
|
72
|
+
warning: (r, s) => o.custom(() => d("warning", r), s),
|
|
73
|
+
info: (r, s) => o.custom(() => d("info", r), s),
|
|
74
|
+
primary: (r, s) => o.custom(() => d("primary", r), s),
|
|
75
|
+
secondary: (r, s) => o.custom(() => d("secondary", r), s)
|
|
76
76
|
}
|
|
77
77
|
);
|
|
78
|
-
function
|
|
79
|
-
position:
|
|
80
|
-
richColors:
|
|
81
|
-
closeButton:
|
|
78
|
+
function rs({
|
|
79
|
+
position: r = "top-right",
|
|
80
|
+
richColors: s = !0,
|
|
81
|
+
closeButton: e = !1,
|
|
82
82
|
expand: m = !1,
|
|
83
83
|
visibleToasts: n = 3,
|
|
84
84
|
duration: a = 4e3,
|
|
@@ -88,24 +88,24 @@ function sr({
|
|
|
88
88
|
u,
|
|
89
89
|
{
|
|
90
90
|
...c,
|
|
91
|
-
position:
|
|
92
|
-
richColors:
|
|
93
|
-
closeButton:
|
|
91
|
+
position: r,
|
|
92
|
+
richColors: s,
|
|
93
|
+
closeButton: e,
|
|
94
94
|
expand: m,
|
|
95
95
|
visibleToasts: n,
|
|
96
96
|
toastOptions: {
|
|
97
97
|
duration: a,
|
|
98
98
|
classNames: {
|
|
99
|
-
toast: "rounded-md shadow-md border-none text-sm font-medium backdrop-blur-sm text-black dark:text-white",
|
|
100
|
-
description: "text-muted-foreground",
|
|
101
|
-
actionButton: "bg-white/10"
|
|
99
|
+
toast: "ds:rounded-md ds:shadow-md ds:border-none ds:text-sm ds:font-medium ds:backdrop-blur-sm ds:text-black ds:dark:text-white",
|
|
100
|
+
description: "ds:text-muted-foreground",
|
|
101
|
+
actionButton: "ds:bg-white/10"
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
104
|
}
|
|
105
105
|
);
|
|
106
106
|
}
|
|
107
107
|
export {
|
|
108
|
-
|
|
109
|
-
|
|
108
|
+
rs as Toaster,
|
|
109
|
+
ss as toast
|
|
110
110
|
};
|
|
111
111
|
//# sourceMappingURL=Toast.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Toast.js","sources":["../../../../src/components/Toast/Toast.tsx"],"sourcesContent":["import {\n Toaster as SonnerToaster,\n toast as sonnerToast,\n type ToasterProps as SonnerToasterProps,\n} from \"sonner\";\nimport { CheckCircle, XCircle, Info, AlertTriangle } from \"lucide-react\";\nimport { cn } from \"@dsui/ui/index\";\n\nconst variantStyles = {\n default: \"ds:bg-neutral-800 ds:text-white ds:border ds:border-neutral-700\",\n success: \"ds:bg-success ds:text-white ds:border ds:border-success/20\",\n error: \"ds:bg-error ds:text-white ds:border ds:border-error/20\",\n warning: \"ds:bg-warning ds:text-black ds:border ds:border-warning/20\",\n info: \"ds:bg-info ds:text-foreground\",\n primary: \"ds:bg-primary ds:text-primary-foreground ds:border ds:border-primary/20\",\n secondary:\n \"ds:bg-secondary ds:text-secondary-foreground ds:border ds:border-secondary/20\",\n};\n\nconst variantIcons = {\n success: <CheckCircle className=\"ds:w-4 ds:h-4 ds:shrink-0\" />,\n error: <XCircle className=\"ds:w-4 ds:h-4 ds:shrink-0\" />,\n warning: <AlertTriangle className=\"ds:w-4 ds:h-4 ds:shrink-0\" />,\n info: <Info className=\"ds:w-4 ds:h-4 ds:shrink-0\" />,\n default: null,\n primary: <Info className=\"ds:w-4 ds:h-4 ds:shrink-0\" />,\n secondary: <Info className=\"ds:w-4 ds:h-4 ds:shrink-0\" />,\n};\n\ntype Variant = keyof typeof variantStyles;\n\nconst renderToastContent = (variant: Variant, message: React.ReactNode) => (\n <div\n className={cn(\n \"ds:flex ds:items-center ds:gap-2 ds:rounded-md ds:px-3 ds:py-2 ds:shadow-md ds:text-sm ds:font-medium\",\n variantStyles[variant]\n )}\n >\n {variantIcons[variant]}\n <span>{message}</span>\n </div>\n);\n\nconst toast = Object.assign(\n (...args: Parameters<typeof sonnerToast>) => {\n const [message] = args;\n const content =\n typeof message === \"function\" ? message() : (message ?? \"Notification\");\n\n return sonnerToast.custom(() => renderToastContent(\"default\", content));\n },\n {\n success: (\n message: React.ReactNode,\n opts?: Parameters<typeof sonnerToast>[1]\n ) => sonnerToast.custom(() => renderToastContent(\"success\", message), opts),\n\n error: (\n message: React.ReactNode,\n opts?: Parameters<typeof sonnerToast>[1]\n ) => sonnerToast.custom(() => renderToastContent(\"error\", message), opts),\n\n warning: (\n message: React.ReactNode,\n opts?: Parameters<typeof sonnerToast>[1]\n ) => sonnerToast.custom(() => renderToastContent(\"warning\", message), opts),\n\n info: (\n message: React.ReactNode,\n opts?: Parameters<typeof sonnerToast>[1]\n ) => sonnerToast.custom(() => renderToastContent(\"info\", message), opts),\n\n primary: (\n message: React.ReactNode,\n opts?: Parameters<typeof sonnerToast>[1]\n ) => sonnerToast.custom(() => renderToastContent(\"primary\", message), opts),\n\n secondary: (\n message: React.ReactNode,\n opts?: Parameters<typeof sonnerToast>[1]\n ) =>\n sonnerToast.custom(() => renderToastContent(\"secondary\", message), opts),\n }\n) as any;\n\nfunction Toaster({\n position = \"top-right\",\n richColors = true,\n closeButton = false,\n expand = false,\n visibleToasts = 3,\n duration = 4000,\n ...props\n}: SonnerToasterProps) {\n return (\n <SonnerToaster\n {...props}\n position={position}\n richColors={richColors}\n closeButton={closeButton}\n expand={expand}\n visibleToasts={visibleToasts}\n toastOptions={{\n duration: duration,\n classNames: {\n toast:\n \"rounded-md shadow-md border-none text-sm font-medium backdrop-blur-sm text-black dark:text-white\",\n description: \"text-muted-foreground\",\n actionButton: \"bg-white/10\",\n },\n }}\n />\n );\n}\n\nexport { toast, Toaster };\n"],"names":["variantStyles","variantIcons","jsx","CheckCircle","XCircle","AlertTriangle","Info","renderToastContent","variant","message","jsxs","cn","toast","args","content","sonnerToast","opts","Toaster","position","richColors","closeButton","expand","visibleToasts","duration","props","SonnerToaster"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,MAAMA,IAAgB;AAAA,EACpB,SAAS;AAAA,EACT,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AAAA,EACT,MAAM;AAAA,EACN,SAAS;AAAA,EACT,WACE;AACJ,GAEMC,IAAe;AAAA,EACnB,SAAS,gBAAAC,EAACC,GAAA,EAAY,WAAU,4BAAA,CAA4B;AAAA,EAC5D,OAAO,gBAAAD,EAACE,GAAA,EAAQ,WAAU,4BAAA,CAA4B;AAAA,EACtD,SAAS,gBAAAF,EAACG,GAAA,EAAc,WAAU,4BAAA,CAA4B;AAAA,EAC9D,MAAM,gBAAAH,EAACI,GAAA,EAAK,WAAU,4BAAA,CAA4B;AAAA,EAClD,SAAS;AAAA,EACT,SAAS,gBAAAJ,EAACI,GAAA,EAAK,WAAU,4BAAA,CAA4B;AAAA,EACrD,WAAW,gBAAAJ,EAACI,GAAA,EAAK,WAAU,4BAAA,CAA4B;AACzD,GAIMC,IAAqB,CAACC,GAAkBC,MAC5C,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAWC;AAAA,MACT;AAAA,MACAX,EAAcQ,CAAO;AAAA,IAAA;AAAA,IAGtB,UAAA;AAAA,MAAAP,EAAaO,CAAO;AAAA,MACrB,gBAAAN,EAAC,UAAM,UAAAO,EAAA,CAAQ;AAAA,IAAA;AAAA,EAAA;AACjB,GAGIG,KAAQ,OAAO;AAAA,EACnB,IAAIC,MAAyC;AAC3C,UAAM,CAACJ,CAAO,IAAII,GACZC,IACJ,OAAOL,KAAY,aAAaA,EAAA,IAAaA,KAAW;AAE1D,WAAOM,EAAY,OAAO,MAAMR,EAAmB,WAAWO,CAAO,CAAC;AAAA,EACxE;AAAA,EACA;AAAA,IACE,SAAS,CACPL,GACAO,MACGD,EAAY,OAAO,MAAMR,EAAmB,WAAWE,CAAO,GAAGO,CAAI;AAAA,IAE1E,OAAO,CACLP,GACAO,MACGD,EAAY,OAAO,MAAMR,EAAmB,SAASE,CAAO,GAAGO,CAAI;AAAA,IAExE,SAAS,CACPP,GACAO,MACGD,EAAY,OAAO,MAAMR,EAAmB,WAAWE,CAAO,GAAGO,CAAI;AAAA,IAE1E,MAAM,CACJP,GACAO,MACGD,EAAY,OAAO,MAAMR,EAAmB,QAAQE,CAAO,GAAGO,CAAI;AAAA,IAEvE,SAAS,CACPP,GACAO,MACGD,EAAY,OAAO,MAAMR,EAAmB,WAAWE,CAAO,GAAGO,CAAI;AAAA,IAE1E,WAAW,CACTP,GACAO,MAEAD,EAAY,OAAO,MAAMR,EAAmB,aAAaE,CAAO,GAAGO,CAAI;AAAA,EAAA;AAE7E;AAEA,SAASC,GAAQ;AAAA,EACf,UAAAC,IAAW;AAAA,EACX,YAAAC,IAAa;AAAA,EACb,aAAAC,IAAc;AAAA,EACd,QAAAC,IAAS;AAAA,EACT,eAAAC,IAAgB;AAAA,EAChB,UAAAC,IAAW;AAAA,EACX,GAAGC;AACL,GAAuB;AACrB,SACE,gBAAAtB;AAAA,IAACuB;AAAAA,IAAA;AAAA,MACE,GAAGD;AAAA,MACJ,UAAAN;AAAA,MACA,YAAAC;AAAA,MACA,aAAAC;AAAA,MACA,QAAAC;AAAA,MACA,eAAAC;AAAA,MACA,cAAc;AAAA,QACZ,UAAAC;AAAA,QACA,YAAY;AAAA,UACV,OACE;AAAA,UACF,aAAa;AAAA,UACb,cAAc;AAAA,QAAA;AAAA,MAChB;AAAA,IACF;AAAA,EAAA;AAGN;"}
|
|
1
|
+
{"version":3,"file":"Toast.js","sources":["../../../../src/components/Toast/Toast.tsx"],"sourcesContent":["import {\n Toaster as SonnerToaster,\n toast as sonnerToast,\n type ToasterProps as SonnerToasterProps,\n} from \"sonner\";\nimport { CheckCircle, XCircle, Info, AlertTriangle } from \"lucide-react\";\nimport { cn } from \"@dsui/ui/index\";\n\nconst variantStyles = {\n default: \"ds:bg-neutral-800 ds:text-white ds:border ds:border-neutral-700\",\n success: \"ds:bg-success ds:text-white ds:border ds:border-success/20\",\n error: \"ds:bg-error ds:text-white ds:border ds:border-error/20\",\n warning: \"ds:bg-warning ds:text-black ds:border ds:border-warning/20\",\n info: \"ds:bg-info ds:text-foreground\",\n primary: \"ds:bg-primary ds:text-primary-foreground ds:border ds:border-primary/20\",\n secondary:\n \"ds:bg-secondary ds:text-secondary-foreground ds:border ds:border-secondary/20\",\n};\n\nconst variantIcons = {\n success: <CheckCircle className=\"ds:w-4 ds:h-4 ds:shrink-0\" />,\n error: <XCircle className=\"ds:w-4 ds:h-4 ds:shrink-0\" />,\n warning: <AlertTriangle className=\"ds:w-4 ds:h-4 ds:shrink-0\" />,\n info: <Info className=\"ds:w-4 ds:h-4 ds:shrink-0\" />,\n default: null,\n primary: <Info className=\"ds:w-4 ds:h-4 ds:shrink-0\" />,\n secondary: <Info className=\"ds:w-4 ds:h-4 ds:shrink-0\" />,\n};\n\ntype Variant = keyof typeof variantStyles;\n\nconst renderToastContent = (variant: Variant, message: React.ReactNode) => (\n <div\n className={cn(\n \"ds:flex ds:items-center ds:gap-2 ds:rounded-md ds:px-3 ds:py-2 ds:shadow-md ds:text-sm ds:font-medium\",\n variantStyles[variant]\n )}\n >\n {variantIcons[variant]}\n <span>{message}</span>\n </div>\n);\n\nconst toast = Object.assign(\n (...args: Parameters<typeof sonnerToast>) => {\n const [message] = args;\n const content =\n typeof message === \"function\" ? message() : (message ?? \"Notification\");\n\n return sonnerToast.custom(() => renderToastContent(\"default\", content));\n },\n {\n success: (\n message: React.ReactNode,\n opts?: Parameters<typeof sonnerToast>[1]\n ) => sonnerToast.custom(() => renderToastContent(\"success\", message), opts),\n\n error: (\n message: React.ReactNode,\n opts?: Parameters<typeof sonnerToast>[1]\n ) => sonnerToast.custom(() => renderToastContent(\"error\", message), opts),\n\n warning: (\n message: React.ReactNode,\n opts?: Parameters<typeof sonnerToast>[1]\n ) => sonnerToast.custom(() => renderToastContent(\"warning\", message), opts),\n\n info: (\n message: React.ReactNode,\n opts?: Parameters<typeof sonnerToast>[1]\n ) => sonnerToast.custom(() => renderToastContent(\"info\", message), opts),\n\n primary: (\n message: React.ReactNode,\n opts?: Parameters<typeof sonnerToast>[1]\n ) => sonnerToast.custom(() => renderToastContent(\"primary\", message), opts),\n\n secondary: (\n message: React.ReactNode,\n opts?: Parameters<typeof sonnerToast>[1]\n ) =>\n sonnerToast.custom(() => renderToastContent(\"secondary\", message), opts),\n }\n) as any;\n\nfunction Toaster({\n position = \"top-right\",\n richColors = true,\n closeButton = false,\n expand = false,\n visibleToasts = 3,\n duration = 4000,\n ...props\n}: SonnerToasterProps) {\n return (\n <SonnerToaster\n {...props}\n position={position}\n richColors={richColors}\n closeButton={closeButton}\n expand={expand}\n visibleToasts={visibleToasts}\n toastOptions={{\n duration: duration,\n classNames: {\n toast:\n \"ds:rounded-md ds:shadow-md ds:border-none ds:text-sm ds:font-medium ds:backdrop-blur-sm ds:text-black ds:dark:text-white\",\n description: \"ds:text-muted-foreground\",\n actionButton: \"ds:bg-white/10\",\n },\n }}\n />\n );\n}\n\nexport { toast, Toaster };\n"],"names":["variantStyles","variantIcons","jsx","CheckCircle","XCircle","AlertTriangle","Info","renderToastContent","variant","message","jsxs","cn","toast","args","content","sonnerToast","opts","Toaster","position","richColors","closeButton","expand","visibleToasts","duration","props","SonnerToaster"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,MAAMA,IAAgB;AAAA,EACpB,SAAS;AAAA,EACT,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AAAA,EACT,MAAM;AAAA,EACN,SAAS;AAAA,EACT,WACE;AACJ,GAEMC,IAAe;AAAA,EACnB,SAAS,gBAAAC,EAACC,GAAA,EAAY,WAAU,4BAAA,CAA4B;AAAA,EAC5D,OAAO,gBAAAD,EAACE,GAAA,EAAQ,WAAU,4BAAA,CAA4B;AAAA,EACtD,SAAS,gBAAAF,EAACG,GAAA,EAAc,WAAU,4BAAA,CAA4B;AAAA,EAC9D,MAAM,gBAAAH,EAACI,GAAA,EAAK,WAAU,4BAAA,CAA4B;AAAA,EAClD,SAAS;AAAA,EACT,SAAS,gBAAAJ,EAACI,GAAA,EAAK,WAAU,4BAAA,CAA4B;AAAA,EACrD,WAAW,gBAAAJ,EAACI,GAAA,EAAK,WAAU,4BAAA,CAA4B;AACzD,GAIMC,IAAqB,CAACC,GAAkBC,MAC5C,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAWC;AAAA,MACT;AAAA,MACAX,EAAcQ,CAAO;AAAA,IAAA;AAAA,IAGtB,UAAA;AAAA,MAAAP,EAAaO,CAAO;AAAA,MACrB,gBAAAN,EAAC,UAAM,UAAAO,EAAA,CAAQ;AAAA,IAAA;AAAA,EAAA;AACjB,GAGIG,KAAQ,OAAO;AAAA,EACnB,IAAIC,MAAyC;AAC3C,UAAM,CAACJ,CAAO,IAAII,GACZC,IACJ,OAAOL,KAAY,aAAaA,EAAA,IAAaA,KAAW;AAE1D,WAAOM,EAAY,OAAO,MAAMR,EAAmB,WAAWO,CAAO,CAAC;AAAA,EACxE;AAAA,EACA;AAAA,IACE,SAAS,CACPL,GACAO,MACGD,EAAY,OAAO,MAAMR,EAAmB,WAAWE,CAAO,GAAGO,CAAI;AAAA,IAE1E,OAAO,CACLP,GACAO,MACGD,EAAY,OAAO,MAAMR,EAAmB,SAASE,CAAO,GAAGO,CAAI;AAAA,IAExE,SAAS,CACPP,GACAO,MACGD,EAAY,OAAO,MAAMR,EAAmB,WAAWE,CAAO,GAAGO,CAAI;AAAA,IAE1E,MAAM,CACJP,GACAO,MACGD,EAAY,OAAO,MAAMR,EAAmB,QAAQE,CAAO,GAAGO,CAAI;AAAA,IAEvE,SAAS,CACPP,GACAO,MACGD,EAAY,OAAO,MAAMR,EAAmB,WAAWE,CAAO,GAAGO,CAAI;AAAA,IAE1E,WAAW,CACTP,GACAO,MAEAD,EAAY,OAAO,MAAMR,EAAmB,aAAaE,CAAO,GAAGO,CAAI;AAAA,EAAA;AAE7E;AAEA,SAASC,GAAQ;AAAA,EACf,UAAAC,IAAW;AAAA,EACX,YAAAC,IAAa;AAAA,EACb,aAAAC,IAAc;AAAA,EACd,QAAAC,IAAS;AAAA,EACT,eAAAC,IAAgB;AAAA,EAChB,UAAAC,IAAW;AAAA,EACX,GAAGC;AACL,GAAuB;AACrB,SACE,gBAAAtB;AAAA,IAACuB;AAAAA,IAAA;AAAA,MACE,GAAGD;AAAA,MACJ,UAAAN;AAAA,MACA,YAAAC;AAAA,MACA,aAAAC;AAAA,MACA,QAAAC;AAAA,MACA,eAAAC;AAAA,MACA,cAAc;AAAA,QACZ,UAAAC;AAAA,QACA,YAAY;AAAA,UACV,OACE;AAAA,UACF,aAAa;AAAA,UACb,cAAc;AAAA,QAAA;AAAA,MAChB;AAAA,IACF;AAAA,EAAA;AAGN;"}
|
|
@@ -34,15 +34,15 @@ import "@radix-ui/react-slider";
|
|
|
34
34
|
import "../packages/ui/src/components/tabs.js";
|
|
35
35
|
import "../packages/ui/src/components/toggle.js";
|
|
36
36
|
const F = (r) => String(r).padStart(2, "0"), P = (r = "primary") => ({
|
|
37
|
-
primary: "text-primary",
|
|
38
|
-
secondary: "text-secondary",
|
|
39
|
-
accent: "text-accent",
|
|
40
|
-
destructive: "text-destructive",
|
|
41
|
-
muted: "text-muted-foreground",
|
|
42
|
-
success: "text-success",
|
|
43
|
-
error: "text-error",
|
|
44
|
-
warning: "text-warning",
|
|
45
|
-
foreground: "text-foreground"
|
|
37
|
+
primary: "ds:text-primary",
|
|
38
|
+
secondary: "ds:text-secondary",
|
|
39
|
+
accent: "ds:text-accent",
|
|
40
|
+
destructive: "ds:text-destructive",
|
|
41
|
+
muted: "ds:text-muted-foreground",
|
|
42
|
+
success: "ds:text-success",
|
|
43
|
+
error: "ds:text-error",
|
|
44
|
+
warning: "ds:text-warning",
|
|
45
|
+
foreground: "ds:text-foreground"
|
|
46
46
|
})[r], W = O(
|
|
47
47
|
Y.forwardRef(
|
|
48
48
|
({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WheelColumn.js","sources":["../../../src/components/WheelColumn.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { memo, useCallback, useEffect, useRef, useState } from \"react\";\nimport { cn } from \"@dsui/ui/index\";\nimport type { CalendarColor } from \"./Calendar/Calendar\";\n\nconst pad = (num: number): string => String(num).padStart(2, \"0\");\n\n// Color variants for time picker items\nconst getColorClass = (color: CalendarColor = \"primary\"): string => {\n const colorMap = {\n primary: \"text-primary\",\n secondary: \"text-secondary\",\n accent: \"text-accent\",\n destructive: \"text-destructive\",\n muted: \"text-muted-foreground\",\n success: \"text-success\",\n error: \"text-error\",\n warning: \"text-warning\",\n foreground: \"text-foreground\",\n };\n return colorMap[color];\n};\n\ntype TimeColumnwheelProps = {\n items: number[];\n value: number | undefined;\n onChange: (val: number) => void;\n timeLabel?: string;\n itemClassName?: string;\n isItemDisabled: (item: number) => boolean;\n disabled: boolean;\n color?: CalendarColor;\n};\n\nexport const TimeColumnwheel = memo(\n React.forwardRef<HTMLDivElement, TimeColumnwheelProps>(\n (\n {\n items,\n value: selectedValue,\n onChange: onChangeCol,\n timeLabel,\n itemClassName,\n isItemDisabled,\n disabled,\n color = \"primary\",\n },\n ref\n ) => {\n const debounceTimerRef = useRef<ReturnType<typeof setTimeout> | null>(\n null\n );\n const containerRef = useRef<HTMLDivElement | null>(null);\n const [scrollTop, setScrollTop] = useState(0);\n\n // Debounced scroll handler\n const handleScroll = useCallback(() => {\n if (!containerRef.current || disabled) return;\n\n const container = containerRef.current;\n const currentScrollTop = container.scrollTop;\n setScrollTop(currentScrollTop);\n\n // Clear previous timer\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n\n // Set new timer\n debounceTimerRef.current = setTimeout(() => {\n const scrollTop = container.scrollTop;\n const itemHeight = 40; // h-10 = 40px\n const containerHeight = container.clientHeight;\n const dividerCenter = containerHeight / 2; // Divider lines ở giữa container\n\n // Calculate which item is at the divider center\n // Account for top spacer (h-30 = 120px)\n const adjustedScrollTop = scrollTop - 120;\n const dividerPosition = adjustedScrollTop + dividerCenter;\n\n // Find the item whose center is closest to divider center\n let closestItem = items[0];\n let minDistance = Infinity;\n\n items.forEach((item, index) => {\n const itemTop = index * itemHeight;\n const itemCenter = itemTop + itemHeight / 2;\n const distance = Math.abs(itemCenter - dividerPosition);\n\n if (distance < minDistance) {\n minDistance = distance;\n closestItem = item;\n }\n });\n\n // Only trigger change if different from current value and not disabled\n if (!isItemDisabled(closestItem)) {\n // Always update if item is different, or snap to correct position\n if (closestItem !== selectedValue) {\n onChangeCol(closestItem);\n } else {\n // Re-trigger to ensure input reflects the snapped value\n // This handles cases where user scrolled slightly but ended on same value\n const itemIndex = items.indexOf(closestItem);\n const targetScrollTop =\n 120 +\n itemIndex * itemHeight -\n containerHeight / 2 +\n itemHeight / 2;\n\n if (Math.abs(container.scrollTop - targetScrollTop) > 5) {\n container.scrollTo({\n top: targetScrollTop,\n behavior: \"smooth\",\n });\n }\n }\n }\n }, 100); // 100ms debounce for faster response\n }, [items, selectedValue, onChangeCol, isItemDisabled, disabled]);\n\n // Set up scroll listener\n useEffect(() => {\n const container = containerRef.current;\n if (container) {\n container.addEventListener(\"scroll\", handleScroll, { passive: true });\n return () => {\n container.removeEventListener(\"scroll\", handleScroll);\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }\n }, [handleScroll]);\n\n // Scroll to selected value when it changes or on mount\n useEffect(() => {\n if (containerRef.current && selectedValue !== undefined) {\n const itemIndex = items.indexOf(selectedValue);\n if (itemIndex !== -1) {\n const itemHeight = 40;\n const containerHeight = containerRef.current.clientHeight;\n const targetScrollTop =\n 120 +\n itemIndex * itemHeight -\n containerHeight / 2 +\n itemHeight / 2;\n\n containerRef.current.scrollTo({\n top: targetScrollTop,\n behavior: \"smooth\",\n });\n }\n }\n }, [selectedValue, items]);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }, []);\n\n const getItemStyle = (index: number, isSelected: boolean) => {\n const itemHeight = 40;\n const containerHeight = 256; // h-64 = 256px\n const centerY = containerHeight / 2;\n const itemCenterY = 120 + index * itemHeight + itemHeight / 2; // 120px spacer + item position\n const distanceFromCenter = Math.abs(\n itemCenterY - (scrollTop + centerY)\n );\n const maxDistance = containerHeight / 2;\n\n // Calculate opacity and scale based on distance\n const opacity = Math.max(\n 0.3,\n 1 - (distanceFromCenter / maxDistance) * 0.7\n );\n const fontSize = isSelected ? \"1.3rem\" : \"1rem\";\n\n return {\n opacity,\n fontSize,\n transition: \"opacity 0.2s ease, transform 0.2s ease\",\n };\n };\n\n return (\n <div className=\"ds:flex ds:flex-col ds:items-center ds:gap-2 ds:w-full ds:h-full ds:max-h-72\">\n {timeLabel && (\n <div className=\"ds:text-xs ds:font-semibold ds:text-muted-foreground ds:uppercase ds:p-2 ds:border-b ds:w-full ds:text-center ds:h-8\">\n {timeLabel}\n </div>\n )}\n <div\n className={cn(\n \"ds:relative ds:w-full\",\n timeLabel ? \"ds:h-[calc(100%_-_2rem)]\" : \" ds:h-full\"\n )}\n >\n {/* wheel style divider lines */}\n <div className=\"ds:absolute ds:top-1/2 ds:left-0 ds:right-0 ds:h-10 ds:-translate-y-1/2 ds:border-t ds:border-b ds:border-border ds:pointer-events-none ds:z-10\" />\n\n <div\n ref={(el) => {\n containerRef.current = el;\n if (typeof ref === \"function\") {\n ref(el);\n } else if (ref) {\n ref.current = el;\n }\n }}\n className={cn(\n \"ds:relative ds:h-full ds:w-full ds:min-w-20 ds:min-h-60 ds:overflow-y-scroll ds:scroll-smooth\",\n \"ds:[&::-webkit-scrollbar]:w-1 ds:[&::-webkit-scrollbar-track]:bg-transparent\",\n \"ds:[&::-webkit-scrollbar-thumb]:bg-border ds:[&::-webkit-scrollbar-thumb]:rounded\",\n \"ds:flex ds:flex-col ds:snap-y ds:snap-mandatory\",\n itemClassName\n )}\n style={{\n maskImage: `linear-gradient(to bottom, transparent 0%, black 15%, black 85%, transparent 100%)`,\n WebkitMaskImage: `linear-gradient(to bottom, transparent 0%, black 15%, black 85%, transparent 100%)`,\n }}\n >\n {/* Spacer Top */}\n <div className=\"ds:h-[calc(50%-1.25rem)] ds:flex-shrink-0\" />\n\n {items.map((item, index) => {\n const itemDisabled = isItemDisabled(item);\n const isSelected =\n selectedValue !== undefined && item === selectedValue;\n const itemStyle = getItemStyle(index, isSelected);\n\n return (\n <div\n key={item}\n onClick={\n disabled || itemDisabled\n ? undefined\n : () => onChangeCol(item)\n }\n data-selected={isSelected || undefined}\n className={cn(\n \"ds:h-10 ds:flex-shrink-0 ds:flex ds:items-center ds:justify-center ds:transition-all ds:snap-center\",\n \"ds:cursor-pointer ds:text-lg ds:font-medium ds:select-none\",\n \"ds:disabled:opacity-30 ds:disabled:cursor-not-allowed ds:disabled:line-through\",\n isSelected\n ? `${getColorClass(color)} ds:font-bold`\n : \"ds:text-muted-foreground\"\n )}\n style={itemStyle}\n >\n {pad(item)}\n </div>\n );\n })}\n\n {/* Spacer Bottom */}\n <div className=\"ds:h-[calc(50%-1.25rem)] ds:flex-shrink-0\" />\n </div>\n </div>\n </div>\n );\n }\n )\n);\n\nTimeColumnwheel.displayName = \"TimeColumnwheel\";\n"],"names":["pad","num","getColorClass","color","TimeColumnwheel","memo","React","items","selectedValue","onChangeCol","timeLabel","itemClassName","isItemDisabled","disabled","ref","debounceTimerRef","useRef","containerRef","scrollTop","setScrollTop","useState","handleScroll","useCallback","container","currentScrollTop","itemHeight","containerHeight","dividerCenter","dividerPosition","closestItem","minDistance","item","index","itemCenter","distance","targetScrollTop","useEffect","itemIndex","getItemStyle","isSelected","itemCenterY","distanceFromCenter","maxDistance","jsxs","jsx","cn","el","itemDisabled","itemStyle"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"WheelColumn.js","sources":["../../../src/components/WheelColumn.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { memo, useCallback, useEffect, useRef, useState } from \"react\";\nimport { cn } from \"@dsui/ui/index\";\nimport type { CalendarColor } from \"./Calendar/Calendar\";\n\nconst pad = (num: number): string => String(num).padStart(2, \"0\");\n\n// Color variants for time picker items\nconst getColorClass = (color: CalendarColor = \"primary\"): string => {\n const colorMap = {\n primary: \"ds:text-primary\",\n secondary: \"ds:text-secondary\",\n accent: \"ds:text-accent\",\n destructive: \"ds:text-destructive\",\n muted: \"ds:text-muted-foreground\",\n success: \"ds:text-success\",\n error: \"ds:text-error\",\n warning: \"ds:text-warning\",\n foreground: \"ds:text-foreground\",\n };\n return colorMap[color];\n};\n\ntype TimeColumnwheelProps = {\n items: number[];\n value: number | undefined;\n onChange: (val: number) => void;\n timeLabel?: string;\n itemClassName?: string;\n isItemDisabled: (item: number) => boolean;\n disabled: boolean;\n color?: CalendarColor;\n};\n\nexport const TimeColumnwheel = memo(\n React.forwardRef<HTMLDivElement, TimeColumnwheelProps>(\n (\n {\n items,\n value: selectedValue,\n onChange: onChangeCol,\n timeLabel,\n itemClassName,\n isItemDisabled,\n disabled,\n color = \"primary\",\n },\n ref\n ) => {\n const debounceTimerRef = useRef<ReturnType<typeof setTimeout> | null>(\n null\n );\n const containerRef = useRef<HTMLDivElement | null>(null);\n const [scrollTop, setScrollTop] = useState(0);\n\n // Debounced scroll handler\n const handleScroll = useCallback(() => {\n if (!containerRef.current || disabled) return;\n\n const container = containerRef.current;\n const currentScrollTop = container.scrollTop;\n setScrollTop(currentScrollTop);\n\n // Clear previous timer\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n\n // Set new timer\n debounceTimerRef.current = setTimeout(() => {\n const scrollTop = container.scrollTop;\n const itemHeight = 40; // h-10 = 40px\n const containerHeight = container.clientHeight;\n const dividerCenter = containerHeight / 2; // Divider lines ở giữa container\n\n // Calculate which item is at the divider center\n // Account for top spacer (h-30 = 120px)\n const adjustedScrollTop = scrollTop - 120;\n const dividerPosition = adjustedScrollTop + dividerCenter;\n\n // Find the item whose center is closest to divider center\n let closestItem = items[0];\n let minDistance = Infinity;\n\n items.forEach((item, index) => {\n const itemTop = index * itemHeight;\n const itemCenter = itemTop + itemHeight / 2;\n const distance = Math.abs(itemCenter - dividerPosition);\n\n if (distance < minDistance) {\n minDistance = distance;\n closestItem = item;\n }\n });\n\n // Only trigger change if different from current value and not disabled\n if (!isItemDisabled(closestItem)) {\n // Always update if item is different, or snap to correct position\n if (closestItem !== selectedValue) {\n onChangeCol(closestItem);\n } else {\n // Re-trigger to ensure input reflects the snapped value\n // This handles cases where user scrolled slightly but ended on same value\n const itemIndex = items.indexOf(closestItem);\n const targetScrollTop =\n 120 +\n itemIndex * itemHeight -\n containerHeight / 2 +\n itemHeight / 2;\n\n if (Math.abs(container.scrollTop - targetScrollTop) > 5) {\n container.scrollTo({\n top: targetScrollTop,\n behavior: \"smooth\",\n });\n }\n }\n }\n }, 100); // 100ms debounce for faster response\n }, [items, selectedValue, onChangeCol, isItemDisabled, disabled]);\n\n // Set up scroll listener\n useEffect(() => {\n const container = containerRef.current;\n if (container) {\n container.addEventListener(\"scroll\", handleScroll, { passive: true });\n return () => {\n container.removeEventListener(\"scroll\", handleScroll);\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }\n }, [handleScroll]);\n\n // Scroll to selected value when it changes or on mount\n useEffect(() => {\n if (containerRef.current && selectedValue !== undefined) {\n const itemIndex = items.indexOf(selectedValue);\n if (itemIndex !== -1) {\n const itemHeight = 40;\n const containerHeight = containerRef.current.clientHeight;\n const targetScrollTop =\n 120 +\n itemIndex * itemHeight -\n containerHeight / 2 +\n itemHeight / 2;\n\n containerRef.current.scrollTo({\n top: targetScrollTop,\n behavior: \"smooth\",\n });\n }\n }\n }, [selectedValue, items]);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current);\n }\n };\n }, []);\n\n const getItemStyle = (index: number, isSelected: boolean) => {\n const itemHeight = 40;\n const containerHeight = 256; // h-64 = 256px\n const centerY = containerHeight / 2;\n const itemCenterY = 120 + index * itemHeight + itemHeight / 2; // 120px spacer + item position\n const distanceFromCenter = Math.abs(\n itemCenterY - (scrollTop + centerY)\n );\n const maxDistance = containerHeight / 2;\n\n // Calculate opacity and scale based on distance\n const opacity = Math.max(\n 0.3,\n 1 - (distanceFromCenter / maxDistance) * 0.7\n );\n const fontSize = isSelected ? \"1.3rem\" : \"1rem\";\n\n return {\n opacity,\n fontSize,\n transition: \"opacity 0.2s ease, transform 0.2s ease\",\n };\n };\n\n return (\n <div className=\"ds:flex ds:flex-col ds:items-center ds:gap-2 ds:w-full ds:h-full ds:max-h-72\">\n {timeLabel && (\n <div className=\"ds:text-xs ds:font-semibold ds:text-muted-foreground ds:uppercase ds:p-2 ds:border-b ds:w-full ds:text-center ds:h-8\">\n {timeLabel}\n </div>\n )}\n <div\n className={cn(\n \"ds:relative ds:w-full\",\n timeLabel ? \"ds:h-[calc(100%_-_2rem)]\" : \" ds:h-full\"\n )}\n >\n {/* wheel style divider lines */}\n <div className=\"ds:absolute ds:top-1/2 ds:left-0 ds:right-0 ds:h-10 ds:-translate-y-1/2 ds:border-t ds:border-b ds:border-border ds:pointer-events-none ds:z-10\" />\n\n <div\n ref={(el) => {\n containerRef.current = el;\n if (typeof ref === \"function\") {\n ref(el);\n } else if (ref) {\n ref.current = el;\n }\n }}\n className={cn(\n \"ds:relative ds:h-full ds:w-full ds:min-w-20 ds:min-h-60 ds:overflow-y-scroll ds:scroll-smooth\",\n \"ds:[&::-webkit-scrollbar]:w-1 ds:[&::-webkit-scrollbar-track]:bg-transparent\",\n \"ds:[&::-webkit-scrollbar-thumb]:bg-border ds:[&::-webkit-scrollbar-thumb]:rounded\",\n \"ds:flex ds:flex-col ds:snap-y ds:snap-mandatory\",\n itemClassName\n )}\n style={{\n maskImage: `linear-gradient(to bottom, transparent 0%, black 15%, black 85%, transparent 100%)`,\n WebkitMaskImage: `linear-gradient(to bottom, transparent 0%, black 15%, black 85%, transparent 100%)`,\n }}\n >\n {/* Spacer Top */}\n <div className=\"ds:h-[calc(50%-1.25rem)] ds:flex-shrink-0\" />\n\n {items.map((item, index) => {\n const itemDisabled = isItemDisabled(item);\n const isSelected =\n selectedValue !== undefined && item === selectedValue;\n const itemStyle = getItemStyle(index, isSelected);\n\n return (\n <div\n key={item}\n onClick={\n disabled || itemDisabled\n ? undefined\n : () => onChangeCol(item)\n }\n data-selected={isSelected || undefined}\n className={cn(\n \"ds:h-10 ds:flex-shrink-0 ds:flex ds:items-center ds:justify-center ds:transition-all ds:snap-center\",\n \"ds:cursor-pointer ds:text-lg ds:font-medium ds:select-none\",\n \"ds:disabled:opacity-30 ds:disabled:cursor-not-allowed ds:disabled:line-through\",\n isSelected\n ? `${getColorClass(color)} ds:font-bold`\n : \"ds:text-muted-foreground\"\n )}\n style={itemStyle}\n >\n {pad(item)}\n </div>\n );\n })}\n\n {/* Spacer Bottom */}\n <div className=\"ds:h-[calc(50%-1.25rem)] ds:flex-shrink-0\" />\n </div>\n </div>\n </div>\n );\n }\n )\n);\n\nTimeColumnwheel.displayName = \"TimeColumnwheel\";\n"],"names":["pad","num","getColorClass","color","TimeColumnwheel","memo","React","items","selectedValue","onChangeCol","timeLabel","itemClassName","isItemDisabled","disabled","ref","debounceTimerRef","useRef","containerRef","scrollTop","setScrollTop","useState","handleScroll","useCallback","container","currentScrollTop","itemHeight","containerHeight","dividerCenter","dividerPosition","closestItem","minDistance","item","index","itemCenter","distance","targetScrollTop","useEffect","itemIndex","getItemStyle","isSelected","itemCenterY","distanceFromCenter","maxDistance","jsxs","jsx","cn","el","itemDisabled","itemStyle"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsx as
|
|
1
|
+
import { jsx as t } from "react/jsx-runtime";
|
|
2
2
|
import * as x from "react";
|
|
3
3
|
import { ChevronLeftIcon as y, ChevronRightIcon as w, ChevronDownIcon as k } from "lucide-react";
|
|
4
4
|
import { getDefaultClassNames as v, DayPicker as z } from "react-day-picker";
|
|
@@ -16,8 +16,8 @@ function j({
|
|
|
16
16
|
components: b,
|
|
17
17
|
...p
|
|
18
18
|
}) {
|
|
19
|
-
const
|
|
20
|
-
return /* @__PURE__ */
|
|
19
|
+
const s = v(), m = h(f);
|
|
20
|
+
return /* @__PURE__ */ t(
|
|
21
21
|
z,
|
|
22
22
|
{
|
|
23
23
|
showOutsideDays: d,
|
|
@@ -29,117 +29,117 @@ function j({
|
|
|
29
29
|
),
|
|
30
30
|
captionLayout: g,
|
|
31
31
|
formatters: {
|
|
32
|
-
formatMonthDropdown: (
|
|
32
|
+
formatMonthDropdown: (r) => r.toLocaleString("default", { month: "short" }),
|
|
33
33
|
...n
|
|
34
34
|
},
|
|
35
35
|
classNames: {
|
|
36
|
-
root: e("ds:w-fit",
|
|
36
|
+
root: e("ds:w-fit", s.root),
|
|
37
37
|
months: e(
|
|
38
38
|
"ds:flex ds:gap-4 ds:flex-col ds:md:flex-row ds:relative",
|
|
39
|
-
|
|
39
|
+
s.months
|
|
40
40
|
),
|
|
41
|
-
month: e("ds:flex ds:flex-col ds:w-full ds:gap-4",
|
|
41
|
+
month: e("ds:flex ds:flex-col ds:w-full ds:gap-4", s.month),
|
|
42
42
|
nav: e(
|
|
43
43
|
"ds:flex ds:items-center ds:gap-1 ds:w-full ds:absolute ds:top-0 ds:inset-x-0 ds:justify-between",
|
|
44
|
-
|
|
44
|
+
s.nav
|
|
45
45
|
),
|
|
46
46
|
button_previous: e(
|
|
47
47
|
_({ variant: i }),
|
|
48
48
|
"ds:size-(--cell-size) ds:aria-disabled:opacity-50 ds:p-0 ds:select-none",
|
|
49
|
-
|
|
49
|
+
s.button_previous
|
|
50
50
|
),
|
|
51
51
|
button_next: e(
|
|
52
52
|
_({ variant: i }),
|
|
53
53
|
"ds:size-(--cell-size) ds:aria-disabled:opacity-50 ds:p-0 ds:select-none",
|
|
54
|
-
|
|
54
|
+
s.button_next
|
|
55
55
|
),
|
|
56
56
|
month_caption: e(
|
|
57
57
|
"ds:flex ds:items-center ds:justify-center ds:h-(--cell-size) ds:w-full ds:px-(--cell-size)",
|
|
58
|
-
|
|
58
|
+
s.month_caption
|
|
59
59
|
),
|
|
60
60
|
dropdowns: e(
|
|
61
61
|
"ds:w-full ds:flex ds:items-center ds:text-sm ds:font-medium ds:justify-center ds:h-(--cell-size) ds:gap-1.5",
|
|
62
|
-
|
|
62
|
+
s.dropdowns
|
|
63
63
|
),
|
|
64
64
|
dropdown_root: e(
|
|
65
65
|
"ds:relative ds:has-focus:border-ring ds:border ds:border-input ds:shadow-xs ds:has-focus:ring-ring/50 ds:has-focus:ring-[3px] ds:rounded-md",
|
|
66
|
-
|
|
66
|
+
s.dropdown_root
|
|
67
67
|
),
|
|
68
68
|
dropdown: e(
|
|
69
69
|
"ds:absolute ds:bg-popover ds:inset-0 ds:opacity-0",
|
|
70
|
-
|
|
70
|
+
s.dropdown
|
|
71
71
|
),
|
|
72
72
|
caption_label: e(
|
|
73
73
|
"ds:select-none ds:font-medium",
|
|
74
74
|
g === "label" ? "ds:text-sm" : "ds:rounded-md ds:pl-2 ds:pr-1 ds:flex ds:items-center ds:gap-1 ds:text-sm ds:h-8 ds:[&>svg]:text-muted-foreground ds:[&>svg]:size-3.5",
|
|
75
|
-
|
|
75
|
+
s.caption_label
|
|
76
76
|
),
|
|
77
|
-
table: "w-full border-collapse",
|
|
78
|
-
weekdays: e("ds:flex",
|
|
77
|
+
table: "ds:w-full ds:border-collapse",
|
|
78
|
+
weekdays: e("ds:flex", s.weekdays),
|
|
79
79
|
weekday: e(
|
|
80
80
|
"ds:text-muted-foreground ds:rounded-md ds:flex-1 ds:font-normal ds:text-[0.8rem] ds:select-none",
|
|
81
|
-
|
|
81
|
+
s.weekday
|
|
82
82
|
),
|
|
83
|
-
week: e("ds:flex ds:w-full ds:mt-2",
|
|
83
|
+
week: e("ds:flex ds:w-full ds:mt-2", s.week),
|
|
84
84
|
week_number_header: e(
|
|
85
85
|
"ds:select-none ds:w-(--cell-size)",
|
|
86
|
-
|
|
86
|
+
s.week_number_header
|
|
87
87
|
),
|
|
88
88
|
week_number: e(
|
|
89
89
|
"ds:text-[0.8rem] ds:select-none ds:text-muted-foreground",
|
|
90
|
-
|
|
90
|
+
s.week_number
|
|
91
91
|
),
|
|
92
92
|
day: e(
|
|
93
93
|
"ds:relative ds:w-full ds:h-full ds:p-0 ds:text-center ds:[&:last-child[data-selected=true]_button]:rounded-r-md ds:group/day ds:aspect-square ds:select-none",
|
|
94
94
|
p.showWeekNumber ? "ds:[&:nth-child(2)[data-selected=true]_button]:rounded-l-md" : "ds:[&:first-child[data-selected=true]_button]:rounded-l-md",
|
|
95
|
-
|
|
95
|
+
s.day
|
|
96
96
|
),
|
|
97
97
|
range_start: e(
|
|
98
98
|
a === "rounded" ? `${m.rangeBg} ds:rounded-l-full` : "ds:rounded-l-md ds:bg-accent",
|
|
99
|
-
|
|
99
|
+
s.range_start
|
|
100
100
|
),
|
|
101
101
|
range_middle: e(
|
|
102
102
|
"ds:rounded-none",
|
|
103
|
-
|
|
103
|
+
s.range_middle
|
|
104
104
|
),
|
|
105
105
|
range_end: e(
|
|
106
106
|
a === "rounded" ? `${m.rangeBg} ds:rounded-r-full` : "ds:rounded-r-md ds:bg-accent",
|
|
107
|
-
|
|
107
|
+
s.range_end
|
|
108
108
|
),
|
|
109
109
|
today: e(
|
|
110
110
|
a === "rounded" ? `ds:rounded-full ds:bg-accent ds:data-[selected=true]:rounded-l-none ds:data-[selected=true]:${m.rangeBg} ds:[&_button[data-range-middle=true]]:bg-transparent` : "ds:bg-accent ds:text-accent-foreground ds:rounded-md ds:data-[selected=true]:rounded-none",
|
|
111
|
-
|
|
111
|
+
s.today
|
|
112
112
|
),
|
|
113
113
|
outside: e(
|
|
114
114
|
"ds:text-muted-foreground ds:aria-selected:text-muted-foreground",
|
|
115
|
-
|
|
115
|
+
s.outside
|
|
116
116
|
),
|
|
117
117
|
disabled: e(
|
|
118
118
|
"ds:text-muted-foreground ds:opacity-50",
|
|
119
|
-
|
|
119
|
+
s.disabled
|
|
120
120
|
),
|
|
121
|
-
hidden: e("ds:invisible",
|
|
121
|
+
hidden: e("ds:invisible", s.hidden),
|
|
122
122
|
...l
|
|
123
123
|
},
|
|
124
124
|
components: {
|
|
125
|
-
Root: ({ className:
|
|
125
|
+
Root: ({ className: r, rootRef: o, ...c }) => /* @__PURE__ */ t(
|
|
126
126
|
"div",
|
|
127
127
|
{
|
|
128
128
|
"data-slot": "calendar",
|
|
129
129
|
ref: o,
|
|
130
|
-
className: e(
|
|
130
|
+
className: e(r),
|
|
131
131
|
...c
|
|
132
132
|
}
|
|
133
133
|
),
|
|
134
|
-
Chevron: ({ className:
|
|
134
|
+
Chevron: ({ className: r, orientation: o, ...c }) => o === "left" ? /* @__PURE__ */ t(y, { className: e("ds:size-4", r), ...c }) : o === "right" ? /* @__PURE__ */ t(
|
|
135
135
|
w,
|
|
136
136
|
{
|
|
137
|
-
className: e("ds:size-4",
|
|
137
|
+
className: e("ds:size-4", r),
|
|
138
138
|
...c
|
|
139
139
|
}
|
|
140
|
-
) : /* @__PURE__ */
|
|
141
|
-
DayButton: (
|
|
142
|
-
WeekNumber: ({ children:
|
|
140
|
+
) : /* @__PURE__ */ t(k, { className: e("ds:size-4", r), ...c }),
|
|
141
|
+
DayButton: (r) => /* @__PURE__ */ t(R, { ...r, variant: a, color: f }),
|
|
142
|
+
WeekNumber: ({ children: r, ...o }) => /* @__PURE__ */ t("td", { ...o, children: /* @__PURE__ */ t("div", { className: "ds:flex ds:size-(--cell-size) ds:items-center ds:justify-center ds:text-center", children: r }) }),
|
|
143
143
|
...b
|
|
144
144
|
},
|
|
145
145
|
...p
|
|
@@ -148,58 +148,58 @@ function j({
|
|
|
148
148
|
}
|
|
149
149
|
const h = (u = "foreground") => ({
|
|
150
150
|
primary: {
|
|
151
|
-
selected: "bg-primary text-primary-foreground",
|
|
152
|
-
selectedHover: "hover:bg-primary/90",
|
|
153
|
-
rangeBg: "bg-primary/20 dark:bg-primary/10",
|
|
154
|
-
focusRing: "ring-primary/20 dark:ring-primary/40"
|
|
151
|
+
selected: "ds:bg-primary ds:text-primary-foreground",
|
|
152
|
+
selectedHover: "ds:hover:bg-primary/90",
|
|
153
|
+
rangeBg: "ds:bg-primary/20 dark:ds:bg-primary/10",
|
|
154
|
+
focusRing: "ds:ring-primary/20 dark:ds:ring-primary/40"
|
|
155
155
|
},
|
|
156
156
|
secondary: {
|
|
157
|
-
selected: "bg-secondary text-secondary-foreground",
|
|
158
|
-
selectedHover: "hover:bg-secondary/90",
|
|
159
|
-
rangeBg: "bg-secondary/20 dark:bg-secondary/10",
|
|
160
|
-
focusRing: "ring-secondary/20 dark:ring-secondary/40"
|
|
157
|
+
selected: "ds:bg-secondary ds:text-secondary-foreground",
|
|
158
|
+
selectedHover: "ds:hover:bg-secondary/90",
|
|
159
|
+
rangeBg: "ds:bg-secondary/20 dark:ds:bg-secondary/10",
|
|
160
|
+
focusRing: "ds:ring-secondary/20 dark:ds:ring-secondary/40"
|
|
161
161
|
},
|
|
162
162
|
accent: {
|
|
163
|
-
selected: "bg-accent text-accent-foreground",
|
|
164
|
-
selectedHover: "hover:bg-accent/90",
|
|
165
|
-
rangeBg: "bg-accent/20 dark:bg-accent/10",
|
|
166
|
-
focusRing: "ring-accent/20 dark:ring-accent/40"
|
|
163
|
+
selected: "ds:bg-accent ds:text-accent-foreground",
|
|
164
|
+
selectedHover: "ds:hover:bg-accent/90",
|
|
165
|
+
rangeBg: "ds:bg-accent/20 dark:ds:bg-accent/10",
|
|
166
|
+
focusRing: "ds:ring-accent/20 dark:ds:ring-accent/40"
|
|
167
167
|
},
|
|
168
168
|
destructive: {
|
|
169
|
-
selected: "bg-destructive text-destructive-foreground",
|
|
170
|
-
selectedHover: "hover:bg-destructive/90",
|
|
171
|
-
rangeBg: "bg-destructive/20 dark:bg-destructive/10",
|
|
172
|
-
focusRing: "ring-destructive/20 dark:ring-destructive/40"
|
|
169
|
+
selected: "ds:bg-destructive ds:text-destructive-foreground",
|
|
170
|
+
selectedHover: "ds:hover:bg-destructive/90",
|
|
171
|
+
rangeBg: "ds:bg-destructive/20 dark:ds:bg-destructive/10",
|
|
172
|
+
focusRing: "ds:ring-destructive/20 dark:ds:ring-destructive/40"
|
|
173
173
|
},
|
|
174
174
|
muted: {
|
|
175
|
-
selected: "bg-muted text-muted-foreground",
|
|
176
|
-
selectedHover: "hover:bg-muted/90",
|
|
177
|
-
rangeBg: "bg-muted/30 dark:bg-muted/20",
|
|
178
|
-
focusRing: "ring-muted/20 dark:ring-muted/40"
|
|
175
|
+
selected: "ds:bg-muted ds:text-muted-foreground",
|
|
176
|
+
selectedHover: "ds:hover:bg-muted/90",
|
|
177
|
+
rangeBg: "ds:bg-muted/30 dark:ds:bg-muted/20",
|
|
178
|
+
focusRing: "ds:ring-muted/20 dark:ds:ring-muted/40"
|
|
179
179
|
},
|
|
180
180
|
success: {
|
|
181
|
-
selected: "bg-success text-success-foreground",
|
|
182
|
-
selectedHover: "hover:bg-success/90",
|
|
183
|
-
rangeBg: "bg-success/20 dark:bg-success/10",
|
|
184
|
-
focusRing: "ring-success/20 dark:ring-success/40"
|
|
181
|
+
selected: "ds:bg-success ds:text-success-foreground",
|
|
182
|
+
selectedHover: "ds:hover:bg-success/90",
|
|
183
|
+
rangeBg: "ds:bg-success/20 dark:ds:bg-success/10",
|
|
184
|
+
focusRing: "ds:ring-success/20 dark:ds:ring-success/40"
|
|
185
185
|
},
|
|
186
186
|
error: {
|
|
187
|
-
selected: "bg-error text-error-foreground",
|
|
188
|
-
selectedHover: "hover:bg-error/90",
|
|
189
|
-
rangeBg: "bg-error/20 dark:bg-error/10",
|
|
190
|
-
focusRing: "ring-error/20 dark:ring-error/40"
|
|
187
|
+
selected: "ds:bg-error ds:text-error-foreground",
|
|
188
|
+
selectedHover: "ds:hover:bg-error/90",
|
|
189
|
+
rangeBg: "ds:bg-error/20 dark:ds:bg-error/10",
|
|
190
|
+
focusRing: "ds:ring-error/20 dark:ds:ring-error/40"
|
|
191
191
|
},
|
|
192
192
|
warning: {
|
|
193
|
-
selected: "bg-warning text-warning-foreground",
|
|
194
|
-
selectedHover: "hover:bg-warning/90",
|
|
195
|
-
rangeBg: "bg-warning/20 dark:bg-warning/10",
|
|
196
|
-
focusRing: "ring-warning/20 dark:ring-warning/40"
|
|
193
|
+
selected: "ds:bg-warning ds:text-warning-foreground",
|
|
194
|
+
selectedHover: "ds:hover:bg-warning/90",
|
|
195
|
+
rangeBg: "ds:bg-warning/20 dark:ds:bg-warning/10",
|
|
196
|
+
focusRing: "ds:ring-warning/20 dark:ds:ring-warning/40"
|
|
197
197
|
},
|
|
198
198
|
foreground: {
|
|
199
|
-
selected: "bg-foreground text-background",
|
|
200
|
-
selectedHover: "hover:bg-foreground/90",
|
|
201
|
-
rangeBg: "bg-foreground/10 dark:bg-foreground/5",
|
|
202
|
-
focusRing: "ring-foreground/20 dark:ring-foreground/40"
|
|
199
|
+
selected: "ds:bg-foreground ds:text-background",
|
|
200
|
+
selectedHover: "ds:hover:bg-foreground/90",
|
|
201
|
+
rangeBg: "ds:bg-foreground/10 dark:ds:bg-foreground/5",
|
|
202
|
+
focusRing: "ds:ring-foreground/20 dark:ds:ring-foreground/40"
|
|
203
203
|
}
|
|
204
204
|
})[u];
|
|
205
205
|
function R({
|
|
@@ -213,7 +213,7 @@ function R({
|
|
|
213
213
|
const f = v(), n = h(i), b = x.useRef(null);
|
|
214
214
|
return x.useEffect(() => {
|
|
215
215
|
d.focused && b.current?.focus();
|
|
216
|
-
}, [d.focused]), /* @__PURE__ */
|
|
216
|
+
}, [d.focused]), /* @__PURE__ */ t(
|
|
217
217
|
B,
|
|
218
218
|
{
|
|
219
219
|
ref: b,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calendar.js","sources":["../../../../../../../../packages/ui/src/components/calendar.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n ChevronDownIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n} from \"lucide-react\";\nimport { DayButton, DayPicker, getDefaultClassNames } from \"react-day-picker\";\n\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport { Button, buttonVariants } from \"@dsui/ui/components/button\";\n\ntype CalendarColor =\n | \"primary\"\n | \"secondary\"\n | \"accent\"\n | \"destructive\"\n | \"muted\"\n | \"success\"\n | \"error\"\n | \"warning\"\n | \"foreground\";\n\ntype CalendarProps = React.ComponentProps<typeof DayPicker> & {\n buttonVariant?: React.ComponentProps<typeof Button>[\"variant\"];\n variant?: \"default\" | \"rounded\";\n color?: CalendarColor;\n};\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = \"label\",\n buttonVariant = \"ghost\",\n variant = \"default\",\n color = \"primary\",\n formatters,\n components,\n ...props\n}: CalendarProps) {\n const defaultClassNames = getDefaultClassNames();\n const colorClasses = getColorClasses(color);\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n \"ds:bg-background ds:group/calendar ds:p-3 ds:[--cell-size:--spacing(8)] ds:[[data-slot=card-content]_&]:bg-transparent ds:[[data-slot=popover-content]_&]:bg-transparent\",\n String.raw`ds:rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\n String.raw`ds:rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className\n )}\n captionLayout={captionLayout}\n formatters={{\n formatMonthDropdown: (date) =>\n date.toLocaleString(\"default\", { month: \"short\" }),\n ...formatters,\n }}\n classNames={{\n root: cn(\"ds:w-fit\", defaultClassNames.root),\n months: cn(\n \"ds:flex ds:gap-4 ds:flex-col ds:md:flex-row ds:relative\",\n defaultClassNames.months\n ),\n month: cn(\"ds:flex ds:flex-col ds:w-full ds:gap-4\", defaultClassNames.month),\n nav: cn(\n \"ds:flex ds:items-center ds:gap-1 ds:w-full ds:absolute ds:top-0 ds:inset-x-0 ds:justify-between\",\n defaultClassNames.nav\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n \"ds:size-(--cell-size) ds:aria-disabled:opacity-50 ds:p-0 ds:select-none\",\n defaultClassNames.button_previous\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n \"ds:size-(--cell-size) ds:aria-disabled:opacity-50 ds:p-0 ds:select-none\",\n defaultClassNames.button_next\n ),\n month_caption: cn(\n \"ds:flex ds:items-center ds:justify-center ds:h-(--cell-size) ds:w-full ds:px-(--cell-size)\",\n defaultClassNames.month_caption\n ),\n dropdowns: cn(\n \"ds:w-full ds:flex ds:items-center ds:text-sm ds:font-medium ds:justify-center ds:h-(--cell-size) ds:gap-1.5\",\n defaultClassNames.dropdowns\n ),\n dropdown_root: cn(\n \"ds:relative ds:has-focus:border-ring ds:border ds:border-input ds:shadow-xs ds:has-focus:ring-ring/50 ds:has-focus:ring-[3px] ds:rounded-md\",\n defaultClassNames.dropdown_root\n ),\n dropdown: cn(\n \"ds:absolute ds:bg-popover ds:inset-0 ds:opacity-0\",\n defaultClassNames.dropdown\n ),\n caption_label: cn(\n \"ds:select-none ds:font-medium\",\n captionLayout === \"label\"\n ? \"ds:text-sm\"\n : \"ds:rounded-md ds:pl-2 ds:pr-1 ds:flex ds:items-center ds:gap-1 ds:text-sm ds:h-8 ds:[&>svg]:text-muted-foreground ds:[&>svg]:size-3.5\",\n defaultClassNames.caption_label\n ),\n table: \"w-full border-collapse\",\n weekdays: cn(\"ds:flex\", defaultClassNames.weekdays),\n weekday: cn(\n \"ds:text-muted-foreground ds:rounded-md ds:flex-1 ds:font-normal ds:text-[0.8rem] ds:select-none\",\n defaultClassNames.weekday\n ),\n week: cn(\"ds:flex ds:w-full ds:mt-2\", defaultClassNames.week),\n week_number_header: cn(\n \"ds:select-none ds:w-(--cell-size)\",\n defaultClassNames.week_number_header\n ),\n week_number: cn(\n \"ds:text-[0.8rem] ds:select-none ds:text-muted-foreground\",\n defaultClassNames.week_number\n ),\n day: cn(\n \"ds:relative ds:w-full ds:h-full ds:p-0 ds:text-center ds:[&:last-child[data-selected=true]_button]:rounded-r-md ds:group/day ds:aspect-square ds:select-none\",\n props.showWeekNumber\n ? \"ds:[&:nth-child(2)[data-selected=true]_button]:rounded-l-md\"\n : \"ds:[&:first-child[data-selected=true]_button]:rounded-l-md\",\n defaultClassNames.day\n ),\n range_start: cn(\n variant === \"rounded\"\n ? `${colorClasses.rangeBg} ds:rounded-l-full`\n : \"ds:rounded-l-md ds:bg-accent\",\n defaultClassNames.range_start\n ),\n range_middle: cn(\n variant === \"rounded\" ? \"ds:rounded-none\" : \"ds:rounded-none\",\n defaultClassNames.range_middle\n ),\n range_end: cn(\n variant === \"rounded\"\n ? `${colorClasses.rangeBg} ds:rounded-r-full`\n : \"ds:rounded-r-md ds:bg-accent\",\n defaultClassNames.range_end\n ),\n today: cn(\n variant === \"rounded\"\n ? `ds:rounded-full ds:bg-accent ds:data-[selected=true]:rounded-l-none ds:data-[selected=true]:${colorClasses.rangeBg} ds:[&_button[data-range-middle=true]]:bg-transparent`\n : \"ds:bg-accent ds:text-accent-foreground ds:rounded-md ds:data-[selected=true]:rounded-none\",\n defaultClassNames.today\n ),\n outside: cn(\n \"ds:text-muted-foreground ds:aria-selected:text-muted-foreground\",\n defaultClassNames.outside\n ),\n disabled: cn(\n \"ds:text-muted-foreground ds:opacity-50\",\n defaultClassNames.disabled\n ),\n hidden: cn(\"ds:invisible\", defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: ({ className, rootRef, ...props }) => {\n return (\n <div\n data-slot=\"calendar\"\n ref={rootRef}\n className={cn(className)}\n {...props}\n />\n );\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === \"left\") {\n return (\n <ChevronLeftIcon className={cn(\"ds:size-4\", className)} {...props} />\n );\n }\n\n if (orientation === \"right\") {\n return (\n <ChevronRightIcon\n className={cn(\"ds:size-4\", className)}\n {...props}\n />\n );\n }\n\n return (\n <ChevronDownIcon className={cn(\"ds:size-4\", className)} {...props} />\n );\n },\n DayButton: (props) => (\n <CalendarDayButton {...props} variant={variant} color={color} />\n ),\n WeekNumber: ({ children, ...props }) => {\n return (\n <td {...props}>\n <div className=\"ds:flex ds:size-(--cell-size) ds:items-center ds:justify-center ds:text-center\">\n {children}\n </div>\n </td>\n );\n },\n ...components,\n }}\n {...props}\n />\n );\n}\n\ntype CalendarDayButtonProps = Omit<\n React.ComponentProps<typeof DayButton>,\n \"color\"\n> & {\n variant?: \"default\" | \"rounded\";\n color?: CalendarColor;\n};\n\n// Color variants for calendar day buttons\nconst getColorClasses = (color: CalendarColor = \"foreground\") => {\n const colorMap = {\n primary: {\n selected: \"bg-primary text-primary-foreground\",\n selectedHover: \"hover:bg-primary/90\",\n rangeBg: \"bg-primary/20 dark:bg-primary/10\",\n focusRing: \"ring-primary/20 dark:ring-primary/40\",\n },\n secondary: {\n selected: \"bg-secondary text-secondary-foreground\",\n selectedHover: \"hover:bg-secondary/90\",\n rangeBg: \"bg-secondary/20 dark:bg-secondary/10\",\n focusRing: \"ring-secondary/20 dark:ring-secondary/40\",\n },\n accent: {\n selected: \"bg-accent text-accent-foreground\",\n selectedHover: \"hover:bg-accent/90\",\n rangeBg: \"bg-accent/20 dark:bg-accent/10\",\n focusRing: \"ring-accent/20 dark:ring-accent/40\",\n },\n destructive: {\n selected: \"bg-destructive text-destructive-foreground\",\n selectedHover: \"hover:bg-destructive/90\",\n rangeBg: \"bg-destructive/20 dark:bg-destructive/10\",\n focusRing: \"ring-destructive/20 dark:ring-destructive/40\",\n },\n muted: {\n selected: \"bg-muted text-muted-foreground\",\n selectedHover: \"hover:bg-muted/90\",\n rangeBg: \"bg-muted/30 dark:bg-muted/20\",\n focusRing: \"ring-muted/20 dark:ring-muted/40\",\n },\n success: {\n selected: \"bg-success text-success-foreground\",\n selectedHover: \"hover:bg-success/90\",\n rangeBg: \"bg-success/20 dark:bg-success/10\",\n focusRing: \"ring-success/20 dark:ring-success/40\",\n },\n error: {\n selected: \"bg-error text-error-foreground\",\n selectedHover: \"hover:bg-error/90\",\n rangeBg: \"bg-error/20 dark:bg-error/10\",\n focusRing: \"ring-error/20 dark:ring-error/40\",\n },\n warning: {\n selected: \"bg-warning text-warning-foreground\",\n selectedHover: \"hover:bg-warning/90\",\n rangeBg: \"bg-warning/20 dark:bg-warning/10\",\n focusRing: \"ring-warning/20 dark:ring-warning/40\",\n },\n foreground: {\n selected: \"bg-foreground text-background\",\n selectedHover: \"hover:bg-foreground/90\",\n rangeBg: \"bg-foreground/10 dark:bg-foreground/5\",\n focusRing: \"ring-foreground/20 dark:ring-foreground/40\",\n },\n };\n\n return colorMap[color];\n};\n\nfunction CalendarDayButton({\n className,\n day,\n modifiers,\n variant = \"default\",\n color = \"foreground\",\n ...props\n}: CalendarDayButtonProps) {\n const defaultClassNames = getDefaultClassNames();\n const colorClasses = getColorClasses(color);\n\n const ref = React.useRef<HTMLButtonElement>(null);\n React.useEffect(() => {\n if (modifiers.focused) ref.current?.focus();\n }, [modifiers.focused]);\n\n return (\n <Button\n ref={ref}\n variant=\"ghost\"\n size=\"icon\"\n data-day={day.date.toLocaleDateString()}\n data-selected-single={\n modifiers.selected &&\n !modifiers.range_start &&\n !modifiers.range_end &&\n !modifiers.range_middle\n }\n data-range-start={modifiers.range_start}\n data-range-end={modifiers.range_end}\n data-range-middle={modifiers.range_middle}\n className={cn(\n \"ds:flex ds:aspect-square ds:size-auto ds:w-full ds:min-w-(--cell-size) ds:flex-col ds:gap-1 ds:leading-none ds:font-normal\",\n \"ds:group-data-[focused=true]/day:relative ds:group-data-[focused=true]/day:z-10 ds:group-data-[focused=true]/day:ring-[3px]\",\n \"ds:group-data-[focused=true]/day:border-ring ds:group-data-[focused=true]/day:ring-ring/50\",\n \"ds:[&>span]:text-xs ds:[&>span]:opacity-70\",\n // Hover effect chỉ khi chưa selected\n !modifiers.selected &&\n !modifiers.range_start &&\n !modifiers.range_end &&\n !modifiers.range_middle &&\n \"ds:hover:bg-accent ds:hover:text-accent-foreground ds:dark:hover:text-accent-foreground\",\n // Selected single day - chỉ apply color khi selected\n modifiers.selected &&\n !modifiers.range_start &&\n !modifiers.range_end &&\n !modifiers.range_middle &&\n colorClasses.selected,\n // Range start/end - chỉ apply color khi là range start/end\n modifiers.range_start && colorClasses.selected,\n modifiers.range_end && colorClasses.selected,\n // Range middle - apply rangeBg nhưng giữ text color mặc định\n modifiers.range_middle &&\n `${colorClasses.rangeBg} ds:text-accent-foreground`,\n variant === \"default\" && [\n \"ds:data-[range-end=true]:rounded-md ds:data-[range-end=true]:rounded-r-md\",\n \"ds:data-[range-middle=true]:rounded-none\",\n \"ds:data-[range-start=true]:rounded-md ds:data-[range-start=true]:rounded-l-md\",\n ],\n variant === \"rounded\" && [\n \"ds:data-[selected-single=true]:rounded-full\",\n \"ds:data-[range-end=true]:rounded-full\",\n \"ds:data-[range-start=true]:rounded-full\",\n modifiers.range_start &&\n `ds:group-data-[focused=true]/day:${colorClasses.focusRing}`,\n modifiers.range_end &&\n `ds:group-data-[focused=true]/day:${colorClasses.focusRing}`,\n modifiers.range_middle && \"ds:rounded-none\",\n // Chỉ hover:rounded-full khi chưa selected\n !modifiers.selected &&\n !modifiers.range_start &&\n !modifiers.range_end &&\n !modifiers.range_middle &&\n \"ds:hover:rounded-full\",\n ],\n defaultClassNames.day,\n className\n )}\n {...props}\n />\n );\n}\n\nexport {\n Calendar,\n CalendarDayButton,\n type CalendarProps,\n type CalendarDayButtonProps,\n type CalendarColor,\n};\n"],"names":["Calendar","className","classNames","showOutsideDays","captionLayout","buttonVariant","variant","color","formatters","components","props","defaultClassNames","getDefaultClassNames","colorClasses","getColorClasses","jsx","DayPicker","cn","date","buttonVariants","rootRef","orientation","ChevronLeftIcon","ChevronRightIcon","ChevronDownIcon","CalendarDayButton","children","day","modifiers","ref","React","Button"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"calendar.js","sources":["../../../../../../../../packages/ui/src/components/calendar.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n ChevronDownIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n} from \"lucide-react\";\nimport { DayButton, DayPicker, getDefaultClassNames } from \"react-day-picker\";\n\nimport { cn } from \"@dsui/ui/lib/utils\";\nimport { Button, buttonVariants } from \"@dsui/ui/components/button\";\n\ntype CalendarColor =\n | \"primary\"\n | \"secondary\"\n | \"accent\"\n | \"destructive\"\n | \"muted\"\n | \"success\"\n | \"error\"\n | \"warning\"\n | \"foreground\";\n\ntype CalendarProps = React.ComponentProps<typeof DayPicker> & {\n buttonVariant?: React.ComponentProps<typeof Button>[\"variant\"];\n variant?: \"default\" | \"rounded\";\n color?: CalendarColor;\n};\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = \"label\",\n buttonVariant = \"ghost\",\n variant = \"default\",\n color = \"primary\",\n formatters,\n components,\n ...props\n}: CalendarProps) {\n const defaultClassNames = getDefaultClassNames();\n const colorClasses = getColorClasses(color);\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n \"ds:bg-background ds:group/calendar ds:p-3 ds:[--cell-size:--spacing(8)] ds:[[data-slot=card-content]_&]:bg-transparent ds:[[data-slot=popover-content]_&]:bg-transparent\",\n String.raw`ds:rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\n String.raw`ds:rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className\n )}\n captionLayout={captionLayout}\n formatters={{\n formatMonthDropdown: (date) =>\n date.toLocaleString(\"default\", { month: \"short\" }),\n ...formatters,\n }}\n classNames={{\n root: cn(\"ds:w-fit\", defaultClassNames.root),\n months: cn(\n \"ds:flex ds:gap-4 ds:flex-col ds:md:flex-row ds:relative\",\n defaultClassNames.months\n ),\n month: cn(\"ds:flex ds:flex-col ds:w-full ds:gap-4\", defaultClassNames.month),\n nav: cn(\n \"ds:flex ds:items-center ds:gap-1 ds:w-full ds:absolute ds:top-0 ds:inset-x-0 ds:justify-between\",\n defaultClassNames.nav\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n \"ds:size-(--cell-size) ds:aria-disabled:opacity-50 ds:p-0 ds:select-none\",\n defaultClassNames.button_previous\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n \"ds:size-(--cell-size) ds:aria-disabled:opacity-50 ds:p-0 ds:select-none\",\n defaultClassNames.button_next\n ),\n month_caption: cn(\n \"ds:flex ds:items-center ds:justify-center ds:h-(--cell-size) ds:w-full ds:px-(--cell-size)\",\n defaultClassNames.month_caption\n ),\n dropdowns: cn(\n \"ds:w-full ds:flex ds:items-center ds:text-sm ds:font-medium ds:justify-center ds:h-(--cell-size) ds:gap-1.5\",\n defaultClassNames.dropdowns\n ),\n dropdown_root: cn(\n \"ds:relative ds:has-focus:border-ring ds:border ds:border-input ds:shadow-xs ds:has-focus:ring-ring/50 ds:has-focus:ring-[3px] ds:rounded-md\",\n defaultClassNames.dropdown_root\n ),\n dropdown: cn(\n \"ds:absolute ds:bg-popover ds:inset-0 ds:opacity-0\",\n defaultClassNames.dropdown\n ),\n caption_label: cn(\n \"ds:select-none ds:font-medium\",\n captionLayout === \"label\"\n ? \"ds:text-sm\"\n : \"ds:rounded-md ds:pl-2 ds:pr-1 ds:flex ds:items-center ds:gap-1 ds:text-sm ds:h-8 ds:[&>svg]:text-muted-foreground ds:[&>svg]:size-3.5\",\n defaultClassNames.caption_label\n ),\n table: \"ds:w-full ds:border-collapse\",\n weekdays: cn(\"ds:flex\", defaultClassNames.weekdays),\n weekday: cn(\n \"ds:text-muted-foreground ds:rounded-md ds:flex-1 ds:font-normal ds:text-[0.8rem] ds:select-none\",\n defaultClassNames.weekday\n ),\n week: cn(\"ds:flex ds:w-full ds:mt-2\", defaultClassNames.week),\n week_number_header: cn(\n \"ds:select-none ds:w-(--cell-size)\",\n defaultClassNames.week_number_header\n ),\n week_number: cn(\n \"ds:text-[0.8rem] ds:select-none ds:text-muted-foreground\",\n defaultClassNames.week_number\n ),\n day: cn(\n \"ds:relative ds:w-full ds:h-full ds:p-0 ds:text-center ds:[&:last-child[data-selected=true]_button]:rounded-r-md ds:group/day ds:aspect-square ds:select-none\",\n props.showWeekNumber\n ? \"ds:[&:nth-child(2)[data-selected=true]_button]:rounded-l-md\"\n : \"ds:[&:first-child[data-selected=true]_button]:rounded-l-md\",\n defaultClassNames.day\n ),\n range_start: cn(\n variant === \"rounded\"\n ? `${colorClasses.rangeBg} ds:rounded-l-full`\n : \"ds:rounded-l-md ds:bg-accent\",\n defaultClassNames.range_start\n ),\n range_middle: cn(\n variant === \"rounded\" ? \"ds:rounded-none\" : \"ds:rounded-none\",\n defaultClassNames.range_middle\n ),\n range_end: cn(\n variant === \"rounded\"\n ? `${colorClasses.rangeBg} ds:rounded-r-full`\n : \"ds:rounded-r-md ds:bg-accent\",\n defaultClassNames.range_end\n ),\n today: cn(\n variant === \"rounded\"\n ? `ds:rounded-full ds:bg-accent ds:data-[selected=true]:rounded-l-none ds:data-[selected=true]:${colorClasses.rangeBg} ds:[&_button[data-range-middle=true]]:bg-transparent`\n : \"ds:bg-accent ds:text-accent-foreground ds:rounded-md ds:data-[selected=true]:rounded-none\",\n defaultClassNames.today\n ),\n outside: cn(\n \"ds:text-muted-foreground ds:aria-selected:text-muted-foreground\",\n defaultClassNames.outside\n ),\n disabled: cn(\n \"ds:text-muted-foreground ds:opacity-50\",\n defaultClassNames.disabled\n ),\n hidden: cn(\"ds:invisible\", defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: ({ className, rootRef, ...props }) => {\n return (\n <div\n data-slot=\"calendar\"\n ref={rootRef}\n className={cn(className)}\n {...props}\n />\n );\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === \"left\") {\n return (\n <ChevronLeftIcon className={cn(\"ds:size-4\", className)} {...props} />\n );\n }\n\n if (orientation === \"right\") {\n return (\n <ChevronRightIcon\n className={cn(\"ds:size-4\", className)}\n {...props}\n />\n );\n }\n\n return (\n <ChevronDownIcon className={cn(\"ds:size-4\", className)} {...props} />\n );\n },\n DayButton: (props) => (\n <CalendarDayButton {...props} variant={variant} color={color} />\n ),\n WeekNumber: ({ children, ...props }) => {\n return (\n <td {...props}>\n <div className=\"ds:flex ds:size-(--cell-size) ds:items-center ds:justify-center ds:text-center\">\n {children}\n </div>\n </td>\n );\n },\n ...components,\n }}\n {...props}\n />\n );\n}\n\ntype CalendarDayButtonProps = Omit<\n React.ComponentProps<typeof DayButton>,\n \"color\"\n> & {\n variant?: \"default\" | \"rounded\";\n color?: CalendarColor;\n};\n\n// Color variants for calendar day buttons\nconst getColorClasses = (color: CalendarColor = \"foreground\") => {\n const colorMap = {\n primary: {\n selected: \"ds:bg-primary ds:text-primary-foreground\",\n selectedHover: \"ds:hover:bg-primary/90\",\n rangeBg: \"ds:bg-primary/20 dark:ds:bg-primary/10\",\n focusRing: \"ds:ring-primary/20 dark:ds:ring-primary/40\",\n },\n secondary: {\n selected: \"ds:bg-secondary ds:text-secondary-foreground\",\n selectedHover: \"ds:hover:bg-secondary/90\",\n rangeBg: \"ds:bg-secondary/20 dark:ds:bg-secondary/10\",\n focusRing: \"ds:ring-secondary/20 dark:ds:ring-secondary/40\",\n },\n accent: {\n selected: \"ds:bg-accent ds:text-accent-foreground\",\n selectedHover: \"ds:hover:bg-accent/90\",\n rangeBg: \"ds:bg-accent/20 dark:ds:bg-accent/10\",\n focusRing: \"ds:ring-accent/20 dark:ds:ring-accent/40\",\n },\n destructive: {\n selected: \"ds:bg-destructive ds:text-destructive-foreground\",\n selectedHover: \"ds:hover:bg-destructive/90\",\n rangeBg: \"ds:bg-destructive/20 dark:ds:bg-destructive/10\",\n focusRing: \"ds:ring-destructive/20 dark:ds:ring-destructive/40\",\n },\n muted: {\n selected: \"ds:bg-muted ds:text-muted-foreground\",\n selectedHover: \"ds:hover:bg-muted/90\",\n rangeBg: \"ds:bg-muted/30 dark:ds:bg-muted/20\",\n focusRing: \"ds:ring-muted/20 dark:ds:ring-muted/40\",\n },\n success: {\n selected: \"ds:bg-success ds:text-success-foreground\",\n selectedHover: \"ds:hover:bg-success/90\",\n rangeBg: \"ds:bg-success/20 dark:ds:bg-success/10\",\n focusRing: \"ds:ring-success/20 dark:ds:ring-success/40\",\n },\n error: {\n selected: \"ds:bg-error ds:text-error-foreground\",\n selectedHover: \"ds:hover:bg-error/90\",\n rangeBg: \"ds:bg-error/20 dark:ds:bg-error/10\",\n focusRing: \"ds:ring-error/20 dark:ds:ring-error/40\",\n },\n warning: {\n selected: \"ds:bg-warning ds:text-warning-foreground\",\n selectedHover: \"ds:hover:bg-warning/90\",\n rangeBg: \"ds:bg-warning/20 dark:ds:bg-warning/10\",\n focusRing: \"ds:ring-warning/20 dark:ds:ring-warning/40\",\n },\n foreground: {\n selected: \"ds:bg-foreground ds:text-background\",\n selectedHover: \"ds:hover:bg-foreground/90\",\n rangeBg: \"ds:bg-foreground/10 dark:ds:bg-foreground/5\",\n focusRing: \"ds:ring-foreground/20 dark:ds:ring-foreground/40\",\n },\n };\n\n return colorMap[color];\n};\n\nfunction CalendarDayButton({\n className,\n day,\n modifiers,\n variant = \"default\",\n color = \"foreground\",\n ...props\n}: CalendarDayButtonProps) {\n const defaultClassNames = getDefaultClassNames();\n const colorClasses = getColorClasses(color);\n\n const ref = React.useRef<HTMLButtonElement>(null);\n React.useEffect(() => {\n if (modifiers.focused) ref.current?.focus();\n }, [modifiers.focused]);\n\n return (\n <Button\n ref={ref}\n variant=\"ghost\"\n size=\"icon\"\n data-day={day.date.toLocaleDateString()}\n data-selected-single={\n modifiers.selected &&\n !modifiers.range_start &&\n !modifiers.range_end &&\n !modifiers.range_middle\n }\n data-range-start={modifiers.range_start}\n data-range-end={modifiers.range_end}\n data-range-middle={modifiers.range_middle}\n className={cn(\n \"ds:flex ds:aspect-square ds:size-auto ds:w-full ds:min-w-(--cell-size) ds:flex-col ds:gap-1 ds:leading-none ds:font-normal\",\n \"ds:group-data-[focused=true]/day:relative ds:group-data-[focused=true]/day:z-10 ds:group-data-[focused=true]/day:ring-[3px]\",\n \"ds:group-data-[focused=true]/day:border-ring ds:group-data-[focused=true]/day:ring-ring/50\",\n \"ds:[&>span]:text-xs ds:[&>span]:opacity-70\",\n // Hover effect chỉ khi chưa selected\n !modifiers.selected &&\n !modifiers.range_start &&\n !modifiers.range_end &&\n !modifiers.range_middle &&\n \"ds:hover:bg-accent ds:hover:text-accent-foreground ds:dark:hover:text-accent-foreground\",\n // Selected single day - chỉ apply color khi selected\n modifiers.selected &&\n !modifiers.range_start &&\n !modifiers.range_end &&\n !modifiers.range_middle &&\n colorClasses.selected,\n // Range start/end - chỉ apply color khi là range start/end\n modifiers.range_start && colorClasses.selected,\n modifiers.range_end && colorClasses.selected,\n // Range middle - apply rangeBg nhưng giữ text color mặc định\n modifiers.range_middle &&\n `${colorClasses.rangeBg} ds:text-accent-foreground`,\n variant === \"default\" && [\n \"ds:data-[range-end=true]:rounded-md ds:data-[range-end=true]:rounded-r-md\",\n \"ds:data-[range-middle=true]:rounded-none\",\n \"ds:data-[range-start=true]:rounded-md ds:data-[range-start=true]:rounded-l-md\",\n ],\n variant === \"rounded\" && [\n \"ds:data-[selected-single=true]:rounded-full\",\n \"ds:data-[range-end=true]:rounded-full\",\n \"ds:data-[range-start=true]:rounded-full\",\n modifiers.range_start &&\n `ds:group-data-[focused=true]/day:${colorClasses.focusRing}`,\n modifiers.range_end &&\n `ds:group-data-[focused=true]/day:${colorClasses.focusRing}`,\n modifiers.range_middle && \"ds:rounded-none\",\n // Chỉ hover:rounded-full khi chưa selected\n !modifiers.selected &&\n !modifiers.range_start &&\n !modifiers.range_end &&\n !modifiers.range_middle &&\n \"ds:hover:rounded-full\",\n ],\n defaultClassNames.day,\n className\n )}\n {...props}\n />\n );\n}\n\nexport {\n Calendar,\n CalendarDayButton,\n type CalendarProps,\n type CalendarDayButtonProps,\n type CalendarColor,\n};\n"],"names":["Calendar","className","classNames","showOutsideDays","captionLayout","buttonVariant","variant","color","formatters","components","props","defaultClassNames","getDefaultClassNames","colorClasses","getColorClasses","jsx","DayPicker","cn","date","buttonVariants","rootRef","orientation","ChevronLeftIcon","ChevronRightIcon","ChevronDownIcon","CalendarDayButton","children","day","modifiers","ref","React","Button"],"mappings":"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"}
|