@underverse-ui/underverse 0.2.60 → 0.2.62
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +263 -131
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +300 -168
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -267,7 +267,7 @@ var Badge = ({
|
|
|
267
267
|
}
|
|
268
268
|
);
|
|
269
269
|
}
|
|
270
|
-
return /* @__PURE__ */ jsxs2("span", { className: cn(baseClasses, "rounded-
|
|
270
|
+
return /* @__PURE__ */ jsxs2("span", { className: cn(baseClasses, "rounded-full gap-1", sizeStyles[size], className), onClick: handleClick, role: "status", children: [
|
|
271
271
|
Icon && /* @__PURE__ */ jsx2(
|
|
272
272
|
Icon,
|
|
273
273
|
{
|
|
@@ -1957,7 +1957,7 @@ function SmartImage({
|
|
|
1957
1957
|
alt,
|
|
1958
1958
|
className,
|
|
1959
1959
|
ratioClass,
|
|
1960
|
-
roundedClass = "rounded-
|
|
1960
|
+
roundedClass = "rounded-2xl md:rounded-3xl",
|
|
1961
1961
|
fill = true,
|
|
1962
1962
|
width,
|
|
1963
1963
|
height,
|
|
@@ -2147,10 +2147,10 @@ var Avatar_default = Avatar;
|
|
|
2147
2147
|
import { jsx as jsx13, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
2148
2148
|
var Skeleton = ({ className, width, height, variant = "rectangular", animation = "pulse", lines = 1 }) => {
|
|
2149
2149
|
const variantClasses2 = {
|
|
2150
|
-
rectangular: "rounded-md",
|
|
2150
|
+
rectangular: "rounded-2xl md:rounded-3xl",
|
|
2151
2151
|
circular: "rounded-full",
|
|
2152
|
-
rounded: "rounded-
|
|
2153
|
-
text: "rounded"
|
|
2152
|
+
rounded: "rounded-2xl md:rounded-3xl",
|
|
2153
|
+
text: "rounded-xl"
|
|
2154
2154
|
};
|
|
2155
2155
|
const animationClasses = {
|
|
2156
2156
|
pulse: "animate-pulse",
|
|
@@ -2199,9 +2199,9 @@ var SkeletonText = ({ lines = 3, className, width = "100%" }) => {
|
|
|
2199
2199
|
};
|
|
2200
2200
|
var SkeletonCard = ({ showAvatar = true, showImage = false, textLines = 3, className, children }) => {
|
|
2201
2201
|
if (children) {
|
|
2202
|
-
return /* @__PURE__ */ jsx13("div", { className: cn("p-4 space-y-4 rounded-
|
|
2202
|
+
return /* @__PURE__ */ jsx13("div", { className: cn("p-4 space-y-4 rounded-2xl md:rounded-3xl bg-card outline-none focus:outline-none", className), children });
|
|
2203
2203
|
}
|
|
2204
|
-
return /* @__PURE__ */ jsxs10("div", { className: cn("p-4 space-y-4 rounded-2xl bg-card outline-none focus:outline-none", className), children: [
|
|
2204
|
+
return /* @__PURE__ */ jsxs10("div", { className: cn("p-4 space-y-4 rounded-2xl md:rounded-3xl bg-card outline-none focus:outline-none", className), children: [
|
|
2205
2205
|
showAvatar && /* @__PURE__ */ jsxs10("div", { className: "flex items-center space-x-3", children: [
|
|
2206
2206
|
/* @__PURE__ */ jsx13(SkeletonAvatar, {}),
|
|
2207
2207
|
/* @__PURE__ */ jsxs10("div", { className: "space-y-2", children: [
|
|
@@ -2209,7 +2209,7 @@ var SkeletonCard = ({ showAvatar = true, showImage = false, textLines = 3, class
|
|
|
2209
2209
|
/* @__PURE__ */ jsx13(Skeleton, { className: "h-3 w-16" })
|
|
2210
2210
|
] })
|
|
2211
2211
|
] }),
|
|
2212
|
-
showImage && /* @__PURE__ */ jsx13(Skeleton, { className: "h-48 w-full rounded-
|
|
2212
|
+
showImage && /* @__PURE__ */ jsx13(Skeleton, { className: "h-48 w-full rounded-2xl md:rounded-3xl" }),
|
|
2213
2213
|
/* @__PURE__ */ jsx13(SkeletonText, { lines: textLines }),
|
|
2214
2214
|
/* @__PURE__ */ jsxs10("div", { className: "flex space-x-2", children: [
|
|
2215
2215
|
/* @__PURE__ */ jsx13(SkeletonButton, { size: "sm" }),
|
|
@@ -2218,7 +2218,7 @@ var SkeletonCard = ({ showAvatar = true, showImage = false, textLines = 3, class
|
|
|
2218
2218
|
] });
|
|
2219
2219
|
};
|
|
2220
2220
|
var SkeletonPost = ({ className }) => {
|
|
2221
|
-
return /* @__PURE__ */ jsxs10("div", { className: cn("p-6 space-y-4 rounded-3xl bg-card outline-none focus:outline-none", className), children: [
|
|
2221
|
+
return /* @__PURE__ */ jsxs10("div", { className: cn("p-6 space-y-4 rounded-2xl md:rounded-3xl bg-card outline-none focus:outline-none", className), children: [
|
|
2222
2222
|
/* @__PURE__ */ jsxs10("div", { className: "flex items-center space-x-3", children: [
|
|
2223
2223
|
/* @__PURE__ */ jsx13(SkeletonAvatar, { size: "lg" }),
|
|
2224
2224
|
/* @__PURE__ */ jsxs10("div", { className: "space-y-2", children: [
|
|
@@ -2250,7 +2250,7 @@ var SkeletonMessage = ({ own = false, showAvatar = true, className }) => {
|
|
|
2250
2250
|
] });
|
|
2251
2251
|
};
|
|
2252
2252
|
var SkeletonList = ({ items = 5, itemHeight = 60, showAvatar = true, className }) => {
|
|
2253
|
-
return /* @__PURE__ */ jsx13("div", { className: cn("space-y-3", className), children: Array.from({ length: items }).map((_, index) => /* @__PURE__ */ jsxs10("div", { className: "flex items-center space-x-3 p-3 rounded-
|
|
2253
|
+
return /* @__PURE__ */ jsx13("div", { className: cn("space-y-3", className), children: Array.from({ length: items }).map((_, index) => /* @__PURE__ */ jsxs10("div", { className: "flex items-center space-x-3 p-3 rounded-2xl md:rounded-3xl", children: [
|
|
2254
2254
|
showAvatar && /* @__PURE__ */ jsx13(SkeletonAvatar, {}),
|
|
2255
2255
|
/* @__PURE__ */ jsxs10("div", { className: "flex-1 space-y-2", children: [
|
|
2256
2256
|
/* @__PURE__ */ jsx13(Skeleton, { className: "h-4 w-3/4" }),
|
|
@@ -4338,7 +4338,7 @@ var sizeStyles6 = {
|
|
|
4338
4338
|
content: "mt-3 p-3"
|
|
4339
4339
|
},
|
|
4340
4340
|
md: {
|
|
4341
|
-
tab: "py-2 px-4 text-sm",
|
|
4341
|
+
tab: "py-2.5 px-4 text-sm",
|
|
4342
4342
|
content: "mt-4 p-4"
|
|
4343
4343
|
},
|
|
4344
4344
|
lg: {
|
|
@@ -4348,33 +4348,33 @@ var sizeStyles6 = {
|
|
|
4348
4348
|
};
|
|
4349
4349
|
var variantStyles5 = {
|
|
4350
4350
|
default: {
|
|
4351
|
-
container: "border-b border-border",
|
|
4352
|
-
tab: "border-b-2 border-transparent hover:
|
|
4353
|
-
activeTab: "border-primary text-primary",
|
|
4351
|
+
container: "border-b border-border/60 bg-muted/30 p-1 rounded-t-2xl",
|
|
4352
|
+
tab: "rounded-full border-b-2 border-transparent hover:bg-accent/40",
|
|
4353
|
+
activeTab: "border-primary bg-background text-primary shadow-sm",
|
|
4354
4354
|
inactiveTab: "text-muted-foreground hover:text-foreground"
|
|
4355
4355
|
},
|
|
4356
4356
|
pills: {
|
|
4357
|
-
container: "bg-muted p-1 rounded-
|
|
4358
|
-
tab: "rounded-
|
|
4359
|
-
activeTab: "bg-background text-foreground shadow-
|
|
4357
|
+
container: "bg-muted/50 backdrop-blur-sm p-1.5 rounded-2xl border border-border/40",
|
|
4358
|
+
tab: "rounded-full transition-all duration-200",
|
|
4359
|
+
activeTab: "bg-background text-foreground shadow-md border border-border/50",
|
|
4360
4360
|
inactiveTab: "text-muted-foreground hover:text-foreground hover:bg-background/50"
|
|
4361
4361
|
},
|
|
4362
4362
|
underline: {
|
|
4363
|
-
container: "relative border-b border-border",
|
|
4364
|
-
tab: "relative transition-colors duration-200 pb-3 border-b-2 border-transparent hover:border-
|
|
4365
|
-
activeTab: "text-primary border-primary font-
|
|
4363
|
+
container: "relative border-b border-border/60",
|
|
4364
|
+
tab: "relative transition-colors duration-200 pb-3 border-b-2 border-transparent hover:border-primary/30",
|
|
4365
|
+
activeTab: "text-primary border-primary font-semibold",
|
|
4366
4366
|
inactiveTab: "text-muted-foreground hover:text-foreground"
|
|
4367
4367
|
},
|
|
4368
4368
|
card: {
|
|
4369
|
-
container: "space-y-1",
|
|
4369
|
+
container: "space-y-1.5 bg-muted/20 p-2 rounded-2xl border border-border/30",
|
|
4370
4370
|
tab: "rounded-xl border border-transparent transition-all duration-200",
|
|
4371
|
-
activeTab: "bg-primary text-primary-foreground border-primary",
|
|
4372
|
-
inactiveTab: "text-muted-foreground hover:text-foreground hover:bg-accent/50 hover:border-border
|
|
4371
|
+
activeTab: "bg-primary text-primary-foreground border-primary shadow-md",
|
|
4372
|
+
inactiveTab: "text-muted-foreground hover:text-foreground hover:bg-accent/50 hover:border-border/50"
|
|
4373
4373
|
},
|
|
4374
4374
|
"underline-card": {
|
|
4375
|
-
container: "border-b border-border bg-card rounded-t-2xl",
|
|
4376
|
-
tab: "relative transition-all duration-200 pb-3 px-4 border-b-2 border-transparent hover:border-primary/
|
|
4377
|
-
activeTab: "text-primary border-primary font-
|
|
4375
|
+
container: "border-b border-border/60 bg-card/80 backdrop-blur-sm rounded-t-2xl p-1",
|
|
4376
|
+
tab: "relative transition-all duration-200 pb-3 px-4 rounded-t-xl border-b-2 border-transparent hover:border-primary/30 hover:bg-accent/30",
|
|
4377
|
+
activeTab: "text-primary border-primary font-semibold bg-accent/30",
|
|
4378
4378
|
inactiveTab: "text-muted-foreground hover:text-foreground"
|
|
4379
4379
|
}
|
|
4380
4380
|
};
|
|
@@ -4494,7 +4494,8 @@ var Tabs = ({
|
|
|
4494
4494
|
id: `${baseId}-panel-${tabs.findIndex((t) => t.value === active)}`,
|
|
4495
4495
|
"aria-labelledby": `${baseId}-tab-${tabs.findIndex((t) => t.value === active)}`,
|
|
4496
4496
|
className: cn(
|
|
4497
|
-
"bg-card rounded-
|
|
4497
|
+
"bg-card rounded-2xl md:rounded-3xl border border-border/60 shadow-sm text-card-foreground transition-all duration-200",
|
|
4498
|
+
"backdrop-blur-sm",
|
|
4498
4499
|
sizeStyles6[size].content,
|
|
4499
4500
|
orientation === "vertical" && "flex-1"
|
|
4500
4501
|
),
|
|
@@ -4835,6 +4836,7 @@ var Combobox = ({
|
|
|
4835
4836
|
const itemDescription = getOptionDescription(item);
|
|
4836
4837
|
const itemDisabled = getOptionDisabled(item);
|
|
4837
4838
|
const isSelected = itemValue === value;
|
|
4839
|
+
const isEven = index % 2 === 0;
|
|
4838
4840
|
return /* @__PURE__ */ jsxs22(
|
|
4839
4841
|
"li",
|
|
4840
4842
|
{
|
|
@@ -4851,11 +4853,12 @@ var Combobox = ({
|
|
|
4851
4853
|
animationDelay: open ? `${Math.min(index * 15, 150)}ms` : "0ms"
|
|
4852
4854
|
},
|
|
4853
4855
|
className: cn(
|
|
4854
|
-
"dropdown-item group flex cursor-pointer items-center gap-3 rounded-
|
|
4856
|
+
"dropdown-item group flex cursor-pointer items-center gap-3 rounded-lg px-3 py-2.5 text-sm",
|
|
4855
4857
|
"outline-none focus:outline-none focus-visible:outline-none",
|
|
4856
4858
|
"transition-all duration-150",
|
|
4857
|
-
|
|
4858
|
-
!itemDisabled && "
|
|
4859
|
+
isEven && "bg-muted/40",
|
|
4860
|
+
!itemDisabled && "hover:bg-accent/70 hover:shadow-sm",
|
|
4861
|
+
!itemDisabled && "focus:bg-accent/80 focus:text-accent-foreground",
|
|
4859
4862
|
index === activeIndex && !itemDisabled && "bg-accent/60",
|
|
4860
4863
|
isSelected && "bg-primary/10 text-primary font-medium",
|
|
4861
4864
|
itemDisabled && "opacity-50 cursor-not-allowed"
|
|
@@ -4933,11 +4936,17 @@ var Combobox = ({
|
|
|
4933
4936
|
/* @__PURE__ */ jsx25("div", { className: "relative", children: /* @__PURE__ */ jsx25("div", { className: "w-10 h-10 rounded-full border-2 border-primary/20 border-t-primary animate-spin" }) }),
|
|
4934
4937
|
/* @__PURE__ */ jsx25("span", { className: "text-sm text-muted-foreground", children: loadingText })
|
|
4935
4938
|
] }) }) : filteredOptions.length > 0 ? groupedOptions ? (
|
|
4936
|
-
// Render grouped options
|
|
4937
|
-
|
|
4938
|
-
|
|
4939
|
-
/* @__PURE__ */
|
|
4940
|
-
|
|
4939
|
+
// Render grouped options with global index tracking
|
|
4940
|
+
(() => {
|
|
4941
|
+
let globalIndex = 0;
|
|
4942
|
+
return Object.entries(groupedOptions).map(([group, items]) => /* @__PURE__ */ jsxs22("div", { className: cn(globalIndex > 0 && "mt-2 pt-2 border-t border-border/30"), children: [
|
|
4943
|
+
/* @__PURE__ */ jsx25("div", { className: "px-3 py-1.5 text-xs font-semibold text-muted-foreground uppercase tracking-wider", children: group }),
|
|
4944
|
+
/* @__PURE__ */ jsx25("ul", { className: "space-y-0.5", children: items.map((item) => {
|
|
4945
|
+
const index = globalIndex++;
|
|
4946
|
+
return renderOptionItem(item, index);
|
|
4947
|
+
}) })
|
|
4948
|
+
] }, group));
|
|
4949
|
+
})()
|
|
4941
4950
|
) : (
|
|
4942
4951
|
// Render flat options
|
|
4943
4952
|
/* @__PURE__ */ jsx25("ul", { className: "space-y-0.5", children: filteredOptions.map((item, index) => renderOptionItem(item, index)) })
|
|
@@ -5264,17 +5273,23 @@ var Pagination = ({
|
|
|
5264
5273
|
}
|
|
5265
5274
|
)
|
|
5266
5275
|
] }),
|
|
5267
|
-
pageSizeOptions && onPageSizeChange ? /* @__PURE__ */
|
|
5268
|
-
|
|
5269
|
-
|
|
5270
|
-
|
|
5271
|
-
|
|
5272
|
-
|
|
5273
|
-
|
|
5274
|
-
|
|
5275
|
-
|
|
5276
|
-
|
|
5277
|
-
|
|
5276
|
+
pageSizeOptions && onPageSizeChange ? /* @__PURE__ */ jsxs23("div", { className: "flex items-center gap-2", children: [
|
|
5277
|
+
/* @__PURE__ */ jsxs23("span", { className: "text-xs text-muted-foreground/70 hidden sm:inline", children: [
|
|
5278
|
+
t("itemsPerPage"),
|
|
5279
|
+
":"
|
|
5280
|
+
] }),
|
|
5281
|
+
/* @__PURE__ */ jsx26(
|
|
5282
|
+
Combobox,
|
|
5283
|
+
{
|
|
5284
|
+
options: pageSizeOptionsStrings,
|
|
5285
|
+
value: pageSize?.toString() || "10",
|
|
5286
|
+
onChange: handlePageSizeChange,
|
|
5287
|
+
size: "sm",
|
|
5288
|
+
className: "w-20 sm:w-24",
|
|
5289
|
+
disabled
|
|
5290
|
+
}
|
|
5291
|
+
)
|
|
5292
|
+
] }) : /* @__PURE__ */ jsx26("div", {})
|
|
5278
5293
|
]
|
|
5279
5294
|
}
|
|
5280
5295
|
);
|
|
@@ -5500,7 +5515,12 @@ var ScrollArea = forwardRef7(
|
|
|
5500
5515
|
"div",
|
|
5501
5516
|
{
|
|
5502
5517
|
ref,
|
|
5503
|
-
className: cn(
|
|
5518
|
+
className: cn(
|
|
5519
|
+
"relative overflow-hidden rounded-2xl md:rounded-3xl",
|
|
5520
|
+
variantClasses[variant],
|
|
5521
|
+
outlined && "border border-border/60",
|
|
5522
|
+
className
|
|
5523
|
+
),
|
|
5504
5524
|
...props,
|
|
5505
5525
|
children: /* @__PURE__ */ jsx28("div", { className: cn("h-full w-full overflow-y-auto scroll-area-viewport", contentClassName), children })
|
|
5506
5526
|
}
|
|
@@ -5527,7 +5547,7 @@ function formatDateShort(date) {
|
|
|
5527
5547
|
}
|
|
5528
5548
|
|
|
5529
5549
|
// ../../components/ui/DatePicker.tsx
|
|
5530
|
-
import { jsx as jsx29, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
5550
|
+
import { Fragment as Fragment6, jsx as jsx29, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
5531
5551
|
var DatePicker = ({
|
|
5532
5552
|
id,
|
|
5533
5553
|
value,
|
|
@@ -5547,6 +5567,7 @@ var DatePicker = ({
|
|
|
5547
5567
|
const locale = useLocale();
|
|
5548
5568
|
const [isOpen, setIsOpen] = React23.useState(false);
|
|
5549
5569
|
const [viewDate, setViewDate] = React23.useState(value || /* @__PURE__ */ new Date());
|
|
5570
|
+
const [viewMode, setViewMode] = React23.useState("calendar");
|
|
5550
5571
|
const triggerRef = React23.useRef(null);
|
|
5551
5572
|
const wheelContainerRef = React23.useRef(null);
|
|
5552
5573
|
const wheelDeltaRef = React23.useRef(0);
|
|
@@ -5558,6 +5579,11 @@ var DatePicker = ({
|
|
|
5558
5579
|
setViewDate(/* @__PURE__ */ new Date());
|
|
5559
5580
|
}
|
|
5560
5581
|
}, [value]);
|
|
5582
|
+
React23.useEffect(() => {
|
|
5583
|
+
if (!isOpen) {
|
|
5584
|
+
setViewMode("calendar");
|
|
5585
|
+
}
|
|
5586
|
+
}, [isOpen]);
|
|
5561
5587
|
const handleDateSelect = (date) => {
|
|
5562
5588
|
let selectedDate;
|
|
5563
5589
|
if (value && (value.getHours() !== 0 || value.getMinutes() !== 0 || value.getSeconds() !== 0)) {
|
|
@@ -5666,13 +5692,64 @@ var DatePicker = ({
|
|
|
5666
5692
|
}
|
|
5667
5693
|
return days;
|
|
5668
5694
|
};
|
|
5695
|
+
const renderMonthSelector = () => {
|
|
5696
|
+
const months = locale === "vi" ? ["Th1", "Th2", "Th3", "Th4", "Th5", "Th6", "Th7", "Th8", "Th9", "Th10", "Th11", "Th12"] : ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
|
|
5697
|
+
return /* @__PURE__ */ jsx29("div", { className: "grid grid-cols-3 gap-2 p-2", children: months.map((month, idx) => {
|
|
5698
|
+
const isSelected = viewDate.getMonth() === idx;
|
|
5699
|
+
return /* @__PURE__ */ jsx29(
|
|
5700
|
+
"button",
|
|
5701
|
+
{
|
|
5702
|
+
type: "button",
|
|
5703
|
+
onClick: () => {
|
|
5704
|
+
setViewDate(new Date(viewDate.getFullYear(), idx, 1));
|
|
5705
|
+
setViewMode("calendar");
|
|
5706
|
+
},
|
|
5707
|
+
className: cn(
|
|
5708
|
+
"py-2 px-3 rounded-lg text-sm font-medium transition-all duration-200",
|
|
5709
|
+
isSelected ? "bg-primary text-primary-foreground shadow-md" : "hover:bg-accent/80 text-foreground hover:scale-105"
|
|
5710
|
+
),
|
|
5711
|
+
children: month
|
|
5712
|
+
},
|
|
5713
|
+
month
|
|
5714
|
+
);
|
|
5715
|
+
}) });
|
|
5716
|
+
};
|
|
5717
|
+
const renderYearSelector = () => {
|
|
5718
|
+
const currentYear = viewDate.getFullYear();
|
|
5719
|
+
const startYear = Math.floor(currentYear / 12) * 12;
|
|
5720
|
+
const years = Array.from({ length: 12 }, (_, i) => startYear + i);
|
|
5721
|
+
return /* @__PURE__ */ jsx29("div", { className: "grid grid-cols-3 gap-2 p-2", children: years.map((year) => {
|
|
5722
|
+
const isSelected = viewDate.getFullYear() === year;
|
|
5723
|
+
return /* @__PURE__ */ jsx29(
|
|
5724
|
+
"button",
|
|
5725
|
+
{
|
|
5726
|
+
type: "button",
|
|
5727
|
+
onClick: () => {
|
|
5728
|
+
setViewDate(new Date(year, viewDate.getMonth(), 1));
|
|
5729
|
+
setViewMode("month");
|
|
5730
|
+
},
|
|
5731
|
+
className: cn(
|
|
5732
|
+
"py-2 px-3 rounded-lg text-sm font-medium transition-all duration-200",
|
|
5733
|
+
isSelected ? "bg-primary text-primary-foreground shadow-md" : "hover:bg-accent/80 text-foreground hover:scale-105"
|
|
5734
|
+
),
|
|
5735
|
+
children: year
|
|
5736
|
+
},
|
|
5737
|
+
year
|
|
5738
|
+
);
|
|
5739
|
+
}) });
|
|
5740
|
+
};
|
|
5741
|
+
const navigateYearRange = (direction) => {
|
|
5742
|
+
const currentYear = viewDate.getFullYear();
|
|
5743
|
+
const offset = direction === "next" ? 12 : -12;
|
|
5744
|
+
setViewDate(new Date(currentYear + offset, viewDate.getMonth(), 1));
|
|
5745
|
+
};
|
|
5669
5746
|
const datePickerContent = /* @__PURE__ */ jsxs24("div", { ref: wheelContainerRef, "data-datepicker": true, className: "w-full", children: [
|
|
5670
5747
|
/* @__PURE__ */ jsxs24("div", { className: "flex items-center justify-between mb-4 px-1", children: [
|
|
5671
5748
|
/* @__PURE__ */ jsx29(
|
|
5672
5749
|
"button",
|
|
5673
5750
|
{
|
|
5674
5751
|
type: "button",
|
|
5675
|
-
onClick: () => navigateMonth("prev"),
|
|
5752
|
+
onClick: () => viewMode === "year" ? navigateYearRange("prev") : navigateMonth("prev"),
|
|
5676
5753
|
className: cn(
|
|
5677
5754
|
"p-2 rounded-xl transition-all duration-200",
|
|
5678
5755
|
"bg-muted/50 hover:bg-muted text-muted-foreground hover:text-foreground",
|
|
@@ -5682,15 +5759,37 @@ var DatePicker = ({
|
|
|
5682
5759
|
children: /* @__PURE__ */ jsx29(ChevronLeft2, { className: "h-4 w-4" })
|
|
5683
5760
|
}
|
|
5684
5761
|
),
|
|
5685
|
-
/* @__PURE__ */ jsxs24("div", { className: "flex
|
|
5686
|
-
/* @__PURE__ */ jsx29(
|
|
5687
|
-
|
|
5762
|
+
/* @__PURE__ */ jsxs24("div", { className: "flex items-center gap-1", children: [
|
|
5763
|
+
/* @__PURE__ */ jsx29(
|
|
5764
|
+
"button",
|
|
5765
|
+
{
|
|
5766
|
+
type: "button",
|
|
5767
|
+
onClick: () => setViewMode(viewMode === "month" ? "calendar" : "month"),
|
|
5768
|
+
className: cn(
|
|
5769
|
+
"text-sm font-bold transition-all duration-200 px-2 py-1 rounded-lg",
|
|
5770
|
+
viewMode === "month" ? "bg-primary/15 text-primary" : "text-foreground hover:bg-accent/50"
|
|
5771
|
+
),
|
|
5772
|
+
children: viewDate.toLocaleDateString(locale === "vi" ? "vi-VN" : "en-US", { month: "long" })
|
|
5773
|
+
}
|
|
5774
|
+
),
|
|
5775
|
+
/* @__PURE__ */ jsx29(
|
|
5776
|
+
"button",
|
|
5777
|
+
{
|
|
5778
|
+
type: "button",
|
|
5779
|
+
onClick: () => setViewMode(viewMode === "year" ? "calendar" : "year"),
|
|
5780
|
+
className: cn(
|
|
5781
|
+
"text-sm font-bold transition-all duration-200 px-2 py-1 rounded-lg",
|
|
5782
|
+
viewMode === "year" ? "bg-primary/15 text-primary" : "text-foreground hover:bg-accent/50"
|
|
5783
|
+
),
|
|
5784
|
+
children: viewDate.getFullYear()
|
|
5785
|
+
}
|
|
5786
|
+
)
|
|
5688
5787
|
] }),
|
|
5689
5788
|
/* @__PURE__ */ jsx29(
|
|
5690
5789
|
"button",
|
|
5691
5790
|
{
|
|
5692
5791
|
type: "button",
|
|
5693
|
-
onClick: () => navigateMonth("next"),
|
|
5792
|
+
onClick: () => viewMode === "year" ? navigateYearRange("next") : navigateMonth("next"),
|
|
5694
5793
|
className: cn(
|
|
5695
5794
|
"p-2 rounded-xl transition-all duration-200",
|
|
5696
5795
|
"bg-muted/50 hover:bg-muted text-muted-foreground hover:text-foreground",
|
|
@@ -5701,22 +5800,26 @@ var DatePicker = ({
|
|
|
5701
5800
|
}
|
|
5702
5801
|
)
|
|
5703
5802
|
] }),
|
|
5704
|
-
/* @__PURE__ */
|
|
5705
|
-
(
|
|
5706
|
-
|
|
5707
|
-
|
|
5708
|
-
|
|
5709
|
-
|
|
5710
|
-
|
|
5711
|
-
|
|
5712
|
-
|
|
5713
|
-
|
|
5714
|
-
|
|
5715
|
-
|
|
5716
|
-
|
|
5717
|
-
|
|
5718
|
-
|
|
5719
|
-
|
|
5803
|
+
viewMode === "calendar" && /* @__PURE__ */ jsxs24(Fragment6, { children: [
|
|
5804
|
+
/* @__PURE__ */ jsx29("div", { className: cn("grid grid-cols-7 gap-1 mb-2 px-0.5"), children: (weekdayLabels || (locale === "vi" ? ["CN", "T2", "T3", "T4", "T5", "T6", "T7"] : ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"])).map(
|
|
5805
|
+
(day, idx) => /* @__PURE__ */ jsx29(
|
|
5806
|
+
"div",
|
|
5807
|
+
{
|
|
5808
|
+
className: cn(
|
|
5809
|
+
"text-center font-bold uppercase tracking-wide",
|
|
5810
|
+
size === "sm" ? "text-[9px] py-1" : "text-[10px] py-1.5",
|
|
5811
|
+
idx === 0 || idx === 6 ? "text-primary/70" : "text-muted-foreground/60"
|
|
5812
|
+
),
|
|
5813
|
+
children: day
|
|
5814
|
+
},
|
|
5815
|
+
day
|
|
5816
|
+
)
|
|
5817
|
+
) }),
|
|
5818
|
+
/* @__PURE__ */ jsx29("div", { className: "grid grid-cols-7 gap-1 p-1 rounded-xl bg-muted/20", children: renderCalendar() })
|
|
5819
|
+
] }),
|
|
5820
|
+
viewMode === "month" && renderMonthSelector(),
|
|
5821
|
+
viewMode === "year" && renderYearSelector(),
|
|
5822
|
+
/* @__PURE__ */ jsxs24("div", { className: cn("flex items-center gap-2 mt-4 pt-3 border-t border-border/50", size === "sm" && "mt-3 pt-2 gap-1.5"), children: [
|
|
5720
5823
|
/* @__PURE__ */ jsxs24(
|
|
5721
5824
|
"button",
|
|
5722
5825
|
{
|
|
@@ -5726,14 +5829,15 @@ var DatePicker = ({
|
|
|
5726
5829
|
handleDateSelect(today);
|
|
5727
5830
|
},
|
|
5728
5831
|
className: cn(
|
|
5729
|
-
"flex-1
|
|
5832
|
+
"flex-1 font-semibold rounded-xl",
|
|
5730
5833
|
"bg-linear-to-r from-primary/10 to-primary/5 border border-primary/30",
|
|
5731
5834
|
"text-primary hover:from-primary/20 hover:to-primary/10 hover:border-primary/50",
|
|
5732
|
-
"transition-all duration-300 flex items-center justify-center
|
|
5733
|
-
"hover:scale-[1.02] active:scale-[0.98] hover:shadow-md hover:shadow-primary/10"
|
|
5835
|
+
"transition-all duration-300 flex items-center justify-center",
|
|
5836
|
+
"hover:scale-[1.02] active:scale-[0.98] hover:shadow-md hover:shadow-primary/10",
|
|
5837
|
+
size === "sm" ? "px-2 py-1 text-[10px] gap-1" : "px-3 py-2 text-xs gap-2"
|
|
5734
5838
|
),
|
|
5735
5839
|
children: [
|
|
5736
|
-
/* @__PURE__ */ jsx29(Sparkles2, { className: "w-3.5 h-3.5" }),
|
|
5840
|
+
/* @__PURE__ */ jsx29(Sparkles2, { className: size === "sm" ? "w-2.5 h-2.5" : "w-3.5 h-3.5" }),
|
|
5737
5841
|
todayLabel || t("today")
|
|
5738
5842
|
]
|
|
5739
5843
|
}
|
|
@@ -5748,14 +5852,15 @@ var DatePicker = ({
|
|
|
5748
5852
|
setViewDate(/* @__PURE__ */ new Date());
|
|
5749
5853
|
},
|
|
5750
5854
|
className: cn(
|
|
5751
|
-
"flex-1
|
|
5855
|
+
"flex-1 font-semibold rounded-xl",
|
|
5752
5856
|
"bg-linear-to-r from-destructive/10 to-destructive/5 border border-destructive/30",
|
|
5753
5857
|
"text-destructive hover:from-destructive/20 hover:to-destructive/10 hover:border-destructive/50",
|
|
5754
|
-
"transition-all duration-300 flex items-center justify-center
|
|
5755
|
-
"hover:scale-[1.02] active:scale-[0.98] hover:shadow-md hover:shadow-destructive/10"
|
|
5858
|
+
"transition-all duration-300 flex items-center justify-center",
|
|
5859
|
+
"hover:scale-[1.02] active:scale-[0.98] hover:shadow-md hover:shadow-destructive/10",
|
|
5860
|
+
size === "sm" ? "px-2 py-1 text-[10px] gap-1" : "px-3 py-2 text-xs gap-2"
|
|
5756
5861
|
),
|
|
5757
5862
|
children: [
|
|
5758
|
-
/* @__PURE__ */ jsx29(XIcon, { className: "w-3.5 h-3.5" }),
|
|
5863
|
+
/* @__PURE__ */ jsx29(XIcon, { className: size === "sm" ? "w-2.5 h-2.5" : "w-3.5 h-3.5" }),
|
|
5759
5864
|
clearLabel || t("clear")
|
|
5760
5865
|
]
|
|
5761
5866
|
}
|
|
@@ -5888,20 +5993,25 @@ var DatePicker = ({
|
|
|
5888
5993
|
)
|
|
5889
5994
|
] });
|
|
5890
5995
|
};
|
|
5891
|
-
var DateRangePicker = ({ startDate, endDate, onChange, placeholder = "Select date range...", className, disablePastDates = false }) => {
|
|
5996
|
+
var DateRangePicker = ({ startDate, endDate, onChange, placeholder = "Select date range...", className, disablePastDates = false, size = "md" }) => {
|
|
5892
5997
|
const locale = useLocale();
|
|
5998
|
+
const t = useTranslations("DatePicker");
|
|
5893
5999
|
const [isOpen, setIsOpen] = React23.useState(false);
|
|
5894
6000
|
const wheelContainerRef = React23.useRef(null);
|
|
5895
6001
|
const wheelDeltaRef = React23.useRef(0);
|
|
6002
|
+
const normalizeToLocal = (date) => {
|
|
6003
|
+
if (!date) return null;
|
|
6004
|
+
return new Date(date.getFullYear(), date.getMonth(), date.getDate());
|
|
6005
|
+
};
|
|
5896
6006
|
const [viewDate, setViewDate] = React23.useState(startDate || /* @__PURE__ */ new Date());
|
|
5897
|
-
const [tempStart, setTempStart] = React23.useState(startDate
|
|
5898
|
-
const [tempEnd, setTempEnd] = React23.useState(endDate
|
|
6007
|
+
const [tempStart, setTempStart] = React23.useState(normalizeToLocal(startDate));
|
|
6008
|
+
const [tempEnd, setTempEnd] = React23.useState(normalizeToLocal(endDate));
|
|
5899
6009
|
const [hoveredDate, setHoveredDate] = React23.useState(null);
|
|
5900
6010
|
React23.useEffect(() => {
|
|
5901
|
-
setTempStart(startDate
|
|
6011
|
+
setTempStart(normalizeToLocal(startDate));
|
|
5902
6012
|
}, [startDate]);
|
|
5903
6013
|
React23.useEffect(() => {
|
|
5904
|
-
setTempEnd(endDate
|
|
6014
|
+
setTempEnd(normalizeToLocal(endDate));
|
|
5905
6015
|
}, [endDate]);
|
|
5906
6016
|
const isSameDay2 = (a, b) => {
|
|
5907
6017
|
if (!a || !b) return false;
|
|
@@ -6002,7 +6112,8 @@ var DateRangePicker = ({ startDate, endDate, onChange, placeholder = "Select dat
|
|
|
6002
6112
|
onMouseEnter: () => !isPastDate && tempStart && !tempEnd && setHoveredDate(date),
|
|
6003
6113
|
onMouseLeave: () => tempStart && !tempEnd && setHoveredDate(null),
|
|
6004
6114
|
className: cn(
|
|
6005
|
-
"
|
|
6115
|
+
"transition-all duration-200 focus:outline-none relative font-medium",
|
|
6116
|
+
size === "sm" ? "w-6 h-6 text-xs" : "w-8 h-8 text-sm",
|
|
6006
6117
|
// Disabled/past date state
|
|
6007
6118
|
isPastDate && "opacity-30 cursor-not-allowed text-muted-foreground",
|
|
6008
6119
|
// Default state
|
|
@@ -6028,24 +6139,25 @@ var DateRangePicker = ({ startDate, endDate, onChange, placeholder = "Select dat
|
|
|
6028
6139
|
return nodes;
|
|
6029
6140
|
};
|
|
6030
6141
|
const panel = /* @__PURE__ */ jsxs24("div", { ref: wheelContainerRef, className: "w-full", children: [
|
|
6031
|
-
/* @__PURE__ */ jsxs24("div", { className: "flex items-center justify-between mb-
|
|
6142
|
+
/* @__PURE__ */ jsxs24("div", { className: cn("flex items-center justify-between px-1", size === "sm" ? "mb-2" : "mb-4"), children: [
|
|
6032
6143
|
/* @__PURE__ */ jsx29(
|
|
6033
6144
|
"button",
|
|
6034
6145
|
{
|
|
6035
6146
|
type: "button",
|
|
6036
6147
|
onClick: () => navigateMonth("prev"),
|
|
6037
6148
|
className: cn(
|
|
6038
|
-
"
|
|
6149
|
+
"rounded-xl transition-all duration-200",
|
|
6150
|
+
size === "sm" ? "p-1.5" : "p-2",
|
|
6039
6151
|
"bg-muted/50 hover:bg-muted text-muted-foreground hover:text-foreground",
|
|
6040
6152
|
"hover:scale-110 active:scale-95 hover:shadow-md",
|
|
6041
6153
|
"focus:outline-none focus-visible:ring-2 focus-visible:ring-primary/50"
|
|
6042
6154
|
),
|
|
6043
|
-
children: /* @__PURE__ */ jsx29(ChevronLeft2, { className: "h-4 w-4" })
|
|
6155
|
+
children: /* @__PURE__ */ jsx29(ChevronLeft2, { className: cn(size === "sm" ? "h-3 w-3" : "h-4 w-4") })
|
|
6044
6156
|
}
|
|
6045
6157
|
),
|
|
6046
6158
|
/* @__PURE__ */ jsxs24("div", { className: "flex flex-col items-center", children: [
|
|
6047
|
-
/* @__PURE__ */ jsx29("span", { className: "text-sm
|
|
6048
|
-
/* @__PURE__ */ jsx29("span", { className: "text-
|
|
6159
|
+
/* @__PURE__ */ jsx29("span", { className: cn("font-bold text-foreground", size === "sm" ? "text-xs" : "text-sm"), children: viewDate.toLocaleDateString(locale === "vi" ? "vi-VN" : "en-US", { month: "long" }) }),
|
|
6160
|
+
/* @__PURE__ */ jsx29("span", { className: cn("text-muted-foreground font-medium", size === "sm" ? "text-[10px]" : "text-xs"), children: viewDate.getFullYear() })
|
|
6049
6161
|
] }),
|
|
6050
6162
|
/* @__PURE__ */ jsx29(
|
|
6051
6163
|
"button",
|
|
@@ -6053,20 +6165,22 @@ var DateRangePicker = ({ startDate, endDate, onChange, placeholder = "Select dat
|
|
|
6053
6165
|
type: "button",
|
|
6054
6166
|
onClick: () => navigateMonth("next"),
|
|
6055
6167
|
className: cn(
|
|
6056
|
-
"
|
|
6168
|
+
"rounded-xl transition-all duration-200",
|
|
6169
|
+
size === "sm" ? "p-1.5" : "p-2",
|
|
6057
6170
|
"bg-muted/50 hover:bg-muted text-muted-foreground hover:text-foreground",
|
|
6058
6171
|
"hover:scale-110 active:scale-95 hover:shadow-md",
|
|
6059
6172
|
"focus:outline-none focus-visible:ring-2 focus-visible:ring-primary/50"
|
|
6060
6173
|
),
|
|
6061
|
-
children: /* @__PURE__ */ jsx29(ChevronRight3, { className: "h-4 w-4" })
|
|
6174
|
+
children: /* @__PURE__ */ jsx29(ChevronRight3, { className: cn(size === "sm" ? "h-3 w-3" : "h-4 w-4") })
|
|
6062
6175
|
}
|
|
6063
6176
|
)
|
|
6064
6177
|
] }),
|
|
6065
|
-
/* @__PURE__ */ jsx29("div", { className: "grid grid-cols-7 gap-1
|
|
6178
|
+
/* @__PURE__ */ jsx29("div", { className: cn("grid grid-cols-7 gap-1 px-0.5", size === "sm" ? "mb-1" : "mb-2"), children: (locale === "vi" ? ["CN", "T2", "T3", "T4", "T5", "T6", "T7"] : ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"]).map((d, idx) => /* @__PURE__ */ jsx29(
|
|
6066
6179
|
"div",
|
|
6067
6180
|
{
|
|
6068
6181
|
className: cn(
|
|
6069
|
-
"text-
|
|
6182
|
+
"text-center font-bold uppercase tracking-wide",
|
|
6183
|
+
size === "sm" ? "text-[8px] py-1" : "text-[10px] py-1.5",
|
|
6070
6184
|
idx === 0 || idx === 6 ? "text-primary/70" : "text-muted-foreground/60"
|
|
6071
6185
|
),
|
|
6072
6186
|
children: d
|
|
@@ -6083,13 +6197,13 @@ var DateRangePicker = ({ startDate, endDate, onChange, placeholder = "Select dat
|
|
|
6083
6197
|
open: isOpen,
|
|
6084
6198
|
onOpenChange: setIsOpen,
|
|
6085
6199
|
placement: "bottom-start",
|
|
6086
|
-
contentWidth: 280,
|
|
6200
|
+
contentWidth: size === "sm" ? 240 : 280,
|
|
6087
6201
|
contentClassName: cn(
|
|
6088
6202
|
"p-0",
|
|
6089
6203
|
"backdrop-blur-xl bg-popover/95 border-border/40 shadow-2xl",
|
|
6090
6204
|
"rounded-2xl",
|
|
6091
6205
|
"max-w-[calc(100vw-1rem)] max-h-[calc(100vh-6rem)] overflow-auto overscroll-contain",
|
|
6092
|
-
"p-5",
|
|
6206
|
+
size === "sm" ? "p-3" : "p-5",
|
|
6093
6207
|
"animate-in fade-in-0 zoom-in-95 slide-in-from-top-2 duration-300"
|
|
6094
6208
|
),
|
|
6095
6209
|
trigger: /* @__PURE__ */ jsxs24(
|
|
@@ -6097,7 +6211,8 @@ var DateRangePicker = ({ startDate, endDate, onChange, placeholder = "Select dat
|
|
|
6097
6211
|
{
|
|
6098
6212
|
type: "button",
|
|
6099
6213
|
className: cn(
|
|
6100
|
-
"group flex w-full items-center justify-between rounded-full border bg-background/80 backdrop-blur-sm
|
|
6214
|
+
"group flex w-full items-center justify-between rounded-full border bg-background/80 backdrop-blur-sm",
|
|
6215
|
+
size === "sm" ? "px-2 py-1.5 text-xs" : "px-3 py-2.5 text-sm",
|
|
6101
6216
|
"border-border/60 hover:border-primary/40",
|
|
6102
6217
|
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/50 focus-visible:ring-offset-2 focus-visible:ring-offset-background",
|
|
6103
6218
|
"hover:bg-accent/10 hover:shadow-lg hover:shadow-primary/5 hover:-translate-y-0.5",
|
|
@@ -6106,15 +6221,16 @@ var DateRangePicker = ({ startDate, endDate, onChange, placeholder = "Select dat
|
|
|
6106
6221
|
className
|
|
6107
6222
|
),
|
|
6108
6223
|
children: [
|
|
6109
|
-
/* @__PURE__ */ jsxs24("div", { className: "flex items-center gap-2.5", children: [
|
|
6224
|
+
/* @__PURE__ */ jsxs24("div", { className: cn("flex items-center", size === "sm" ? "gap-1.5" : "gap-2.5"), children: [
|
|
6110
6225
|
/* @__PURE__ */ jsx29(
|
|
6111
6226
|
"div",
|
|
6112
6227
|
{
|
|
6113
6228
|
className: cn(
|
|
6114
|
-
"flex items-center justify-center rounded-lg
|
|
6229
|
+
"flex items-center justify-center rounded-lg transition-all duration-300",
|
|
6230
|
+
size === "sm" ? "p-1" : "p-1.5",
|
|
6115
6231
|
isOpen ? "bg-primary/15 text-primary" : "bg-muted/50 text-muted-foreground group-hover:bg-primary/10 group-hover:text-primary"
|
|
6116
6232
|
),
|
|
6117
|
-
children: /* @__PURE__ */ jsx29(Calendar, { className: cn("h-
|
|
6233
|
+
children: /* @__PURE__ */ jsx29(Calendar, { className: cn("transition-transform duration-300", size === "sm" ? "h-3 w-3" : "h-4 w-4", isOpen && "scale-110") })
|
|
6118
6234
|
}
|
|
6119
6235
|
),
|
|
6120
6236
|
/* @__PURE__ */ jsx29(
|
|
@@ -6129,7 +6245,7 @@ var DateRangePicker = ({ startDate, endDate, onChange, placeholder = "Select dat
|
|
|
6129
6245
|
}
|
|
6130
6246
|
)
|
|
6131
6247
|
] }),
|
|
6132
|
-
/* @__PURE__ */ jsx29("span", { className: cn("transition-all duration-300 text-muted-foreground group-hover:text-foreground", isOpen && "rotate-180 text-primary"), children: /* @__PURE__ */ jsx29("svg", { className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2.5, children: /* @__PURE__ */ jsx29("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" }) }) })
|
|
6248
|
+
/* @__PURE__ */ jsx29("span", { className: cn("transition-all duration-300 text-muted-foreground group-hover:text-foreground", isOpen && "rotate-180 text-primary"), children: /* @__PURE__ */ jsx29("svg", { className: cn(size === "sm" ? "h-3 w-3" : "h-4 w-4"), fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2.5, children: /* @__PURE__ */ jsx29("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" }) }) })
|
|
6133
6249
|
]
|
|
6134
6250
|
}
|
|
6135
6251
|
),
|
|
@@ -6145,7 +6261,7 @@ import { Calendar as CalendarIcon2, X as X10 } from "lucide-react";
|
|
|
6145
6261
|
// ../../components/ui/Calendar.tsx
|
|
6146
6262
|
import * as React24 from "react";
|
|
6147
6263
|
import { ChevronLeft as ChevronLeft3, ChevronRight as ChevronRight4 } from "lucide-react";
|
|
6148
|
-
import { Fragment as
|
|
6264
|
+
import { Fragment as Fragment8, jsx as jsx30, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
6149
6265
|
function startOfMonth(d) {
|
|
6150
6266
|
return new Date(d.getFullYear(), d.getMonth(), 1);
|
|
6151
6267
|
}
|
|
@@ -6410,7 +6526,7 @@ function Calendar2({
|
|
|
6410
6526
|
}
|
|
6411
6527
|
)
|
|
6412
6528
|
] }),
|
|
6413
|
-
display === "week" ? /* @__PURE__ */ jsxs25(
|
|
6529
|
+
display === "week" ? /* @__PURE__ */ jsxs25(Fragment8, { children: [
|
|
6414
6530
|
showWeekdays && /* @__PURE__ */ jsx30("div", { className: cn("grid grid-cols-7", sz.grid, "mb-1 text-center text-muted-foreground font-medium"), children: weekdays.map((w) => /* @__PURE__ */ jsx30("div", { className: cn(sz.head), children: w }, `w-${w}`)) }),
|
|
6415
6531
|
/* @__PURE__ */ jsx30("div", { className: cn("grid grid-cols-7", sz.grid), children: weekDays.map((d, idx) => {
|
|
6416
6532
|
const inMonth = true;
|
|
@@ -6448,7 +6564,7 @@ function Calendar2({
|
|
|
6448
6564
|
// ../../components/ui/TimePicker.tsx
|
|
6449
6565
|
import * as React25 from "react";
|
|
6450
6566
|
import { Clock as Clock2, X as X9, Check as Check4, Sun, Moon, Sunset, Coffee } from "lucide-react";
|
|
6451
|
-
import { Fragment as
|
|
6567
|
+
import { Fragment as Fragment9, jsx as jsx31, jsxs as jsxs26 } from "react/jsx-runtime";
|
|
6452
6568
|
var pad = (n) => n.toString().padStart(2, "0");
|
|
6453
6569
|
var WHEEL_ITEM_HEIGHT = {
|
|
6454
6570
|
sm: 30,
|
|
@@ -7024,7 +7140,7 @@ function TimePicker({
|
|
|
7024
7140
|
}
|
|
7025
7141
|
);
|
|
7026
7142
|
})(),
|
|
7027
|
-
includeSeconds && /* @__PURE__ */ jsxs26(
|
|
7143
|
+
includeSeconds && /* @__PURE__ */ jsxs26(Fragment9, { children: [
|
|
7028
7144
|
/* @__PURE__ */ jsx31("div", { className: "flex flex-col items-center justify-center pt-8", children: /* @__PURE__ */ jsxs26("div", { className: "flex flex-col gap-2", children: [
|
|
7029
7145
|
/* @__PURE__ */ jsx31("div", { className: "w-1.5 h-1.5 rounded-full bg-primary/60" }),
|
|
7030
7146
|
/* @__PURE__ */ jsx31("div", { className: "w-1.5 h-1.5 rounded-full bg-primary/60" })
|
|
@@ -7421,7 +7537,7 @@ var DateTimePicker = ({
|
|
|
7421
7537
|
import * as React27 from "react";
|
|
7422
7538
|
import { useId as useId5 } from "react";
|
|
7423
7539
|
import { ChevronDown as ChevronDown2, Search as Search4, Check as Check5, SearchX as SearchX2, Loader2 as Loader24, X as X11, Sparkles as Sparkles3 } from "lucide-react";
|
|
7424
|
-
import { Fragment as
|
|
7540
|
+
import { Fragment as Fragment11, jsx as jsx33, jsxs as jsxs28 } from "react/jsx-runtime";
|
|
7425
7541
|
var MultiCombobox = ({
|
|
7426
7542
|
id,
|
|
7427
7543
|
options,
|
|
@@ -7554,6 +7670,7 @@ var MultiCombobox = ({
|
|
|
7554
7670
|
const isDisabled = item.disabled || disabledOptions.includes(item.value);
|
|
7555
7671
|
const optionIcon = item.icon;
|
|
7556
7672
|
const optionDesc = item.description;
|
|
7673
|
+
const isEven = index % 2 === 0;
|
|
7557
7674
|
if (renderOption) {
|
|
7558
7675
|
return /* @__PURE__ */ jsx33(
|
|
7559
7676
|
"li",
|
|
@@ -7568,7 +7685,7 @@ var MultiCombobox = ({
|
|
|
7568
7685
|
inputRef.current?.focus();
|
|
7569
7686
|
},
|
|
7570
7687
|
style: { animationDelay: open ? `${Math.min(index * 20, 200)}ms` : "0ms" },
|
|
7571
|
-
className: cn("dropdown-item", isDisabled && "opacity-50 cursor-not-allowed pointer-events-none"),
|
|
7688
|
+
className: cn("dropdown-item", isEven && "bg-muted/25", isDisabled && "opacity-50 cursor-not-allowed pointer-events-none"),
|
|
7572
7689
|
children: renderOption(item, isSelected)
|
|
7573
7690
|
},
|
|
7574
7691
|
item.value
|
|
@@ -7588,11 +7705,12 @@ var MultiCombobox = ({
|
|
|
7588
7705
|
},
|
|
7589
7706
|
style: { animationDelay: open ? `${Math.min(index * 20, 200)}ms` : "0ms" },
|
|
7590
7707
|
className: cn(
|
|
7591
|
-
"dropdown-item flex cursor-pointer items-center gap-3 rounded-
|
|
7708
|
+
"dropdown-item flex cursor-pointer items-center gap-3 rounded-lg transition-all duration-200",
|
|
7592
7709
|
sizeStyles8[size].item,
|
|
7593
|
-
"
|
|
7594
|
-
|
|
7595
|
-
|
|
7710
|
+
isEven && "bg-muted/25",
|
|
7711
|
+
"hover:bg-accent/70 hover:shadow-sm",
|
|
7712
|
+
index === activeIndex && "bg-accent/60",
|
|
7713
|
+
isSelected && "bg-primary/10 text-primary font-medium",
|
|
7596
7714
|
isDisabled && "opacity-40 cursor-not-allowed pointer-events-none"
|
|
7597
7715
|
),
|
|
7598
7716
|
children: [
|
|
@@ -7729,7 +7847,7 @@ var MultiCombobox = ({
|
|
|
7729
7847
|
!!error && "border-destructive focus-visible:ring-destructive/30"
|
|
7730
7848
|
),
|
|
7731
7849
|
children: [
|
|
7732
|
-
/* @__PURE__ */ jsx33("div", { className: "flex items-center gap-1.5 flex-wrap min-h-6 flex-1", children: value.length > 0 ? showTags ? /* @__PURE__ */ jsxs28(
|
|
7850
|
+
/* @__PURE__ */ jsx33("div", { className: "flex items-center gap-1.5 flex-wrap min-h-6 flex-1", children: value.length > 0 ? showTags ? /* @__PURE__ */ jsxs28(Fragment11, { children: [
|
|
7733
7851
|
visibleTags.map((option) => {
|
|
7734
7852
|
if (renderTag) {
|
|
7735
7853
|
return /* @__PURE__ */ jsx33(React27.Fragment, { children: renderTag(option, () => handleRemove(option.value)) }, option.value);
|
|
@@ -8279,7 +8397,7 @@ Slider.displayName = "Slider";
|
|
|
8279
8397
|
// ../../components/ui/OverlayControls.tsx
|
|
8280
8398
|
import { Dot, Maximize2, Pause, Play, RotateCcw, RotateCw, Volume2, VolumeX } from "lucide-react";
|
|
8281
8399
|
import React30 from "react";
|
|
8282
|
-
import { Fragment as
|
|
8400
|
+
import { Fragment as Fragment12, jsx as jsx36, jsxs as jsxs31 } from "react/jsx-runtime";
|
|
8283
8401
|
function OverlayControls({
|
|
8284
8402
|
mode,
|
|
8285
8403
|
value,
|
|
@@ -8502,7 +8620,7 @@ function OverlayControls({
|
|
|
8502
8620
|
const handleSliderMouseLeave = () => {
|
|
8503
8621
|
setPreviewData(null);
|
|
8504
8622
|
};
|
|
8505
|
-
return /* @__PURE__ */ jsxs31(
|
|
8623
|
+
return /* @__PURE__ */ jsxs31(Fragment12, { children: [
|
|
8506
8624
|
keyboardFeedback && /* @__PURE__ */ jsx36(
|
|
8507
8625
|
"div",
|
|
8508
8626
|
{
|
|
@@ -8712,7 +8830,7 @@ function OverlayControls({
|
|
|
8712
8830
|
// ../../components/ui/CategoryTreeSelect.tsx
|
|
8713
8831
|
import { useState as useState26, useEffect as useEffect16 } from "react";
|
|
8714
8832
|
import { ChevronRight as ChevronRight5, ChevronDown as ChevronDown3, Check as Check6, FolderTree, Layers } from "lucide-react";
|
|
8715
|
-
import { Fragment as
|
|
8833
|
+
import { Fragment as Fragment13, jsx as jsx37, jsxs as jsxs32 } from "react/jsx-runtime";
|
|
8716
8834
|
var defaultLabels = {
|
|
8717
8835
|
emptyText: "No categories",
|
|
8718
8836
|
selectedText: (count) => `${count} selected`
|
|
@@ -8795,26 +8913,23 @@ function CategoryTreeSelect(props) {
|
|
|
8795
8913
|
const hasChildren = children.length > 0;
|
|
8796
8914
|
const isExpanded = expandedNodes.has(category.id);
|
|
8797
8915
|
const isSelected = valueArray.includes(category.id);
|
|
8916
|
+
const isParent = level === 0;
|
|
8798
8917
|
return /* @__PURE__ */ jsxs32("div", { className: "animate-in fade-in-50 duration-200", style: { animationDelay: `${level * 30}ms` }, children: [
|
|
8799
8918
|
/* @__PURE__ */ jsxs32(
|
|
8800
8919
|
"div",
|
|
8801
8920
|
{
|
|
8802
8921
|
className: cn(
|
|
8803
|
-
"relative flex items-center gap-2.5 px-3 py-2.5
|
|
8922
|
+
"relative flex items-center gap-2.5 px-3 py-2.5 transition-all duration-200",
|
|
8923
|
+
"border-l-4 border-l-transparent",
|
|
8924
|
+
// Parent level styling
|
|
8925
|
+
isParent && "bg-muted/25 font-medium",
|
|
8804
8926
|
!viewOnly && "cursor-pointer",
|
|
8805
8927
|
!viewOnly && !isSelected && "hover:bg-accent/60 hover:shadow-sm",
|
|
8806
8928
|
// Selected state
|
|
8807
|
-
!viewOnly && isSelected && "bg-
|
|
8929
|
+
!viewOnly && isSelected && "bg-accent/30 border-l-primary shadow-sm"
|
|
8808
8930
|
),
|
|
8809
8931
|
style: { paddingLeft: `${level * 1.25 + 0.75}rem` },
|
|
8810
8932
|
children: [
|
|
8811
|
-
!viewOnly && isSelected && /* @__PURE__ */ jsx37(
|
|
8812
|
-
"span",
|
|
8813
|
-
{
|
|
8814
|
-
"aria-hidden": true,
|
|
8815
|
-
className: "absolute left-0 top-2 bottom-2 w-1 rounded-full bg-linear-to-b from-primary to-primary/70 shadow-sm shadow-primary/30"
|
|
8816
|
-
}
|
|
8817
|
-
),
|
|
8818
8933
|
hasChildren ? /* @__PURE__ */ jsx37(
|
|
8819
8934
|
"button",
|
|
8820
8935
|
{
|
|
@@ -8954,7 +9069,7 @@ function CategoryTreeSelect(props) {
|
|
|
8954
9069
|
]
|
|
8955
9070
|
}
|
|
8956
9071
|
),
|
|
8957
|
-
isOpen && !disabled && /* @__PURE__ */ jsxs32(
|
|
9072
|
+
isOpen && !disabled && /* @__PURE__ */ jsxs32(Fragment13, { children: [
|
|
8958
9073
|
/* @__PURE__ */ jsx37("div", { className: "fixed inset-0 z-10", onClick: () => setIsOpen(false) }),
|
|
8959
9074
|
/* @__PURE__ */ jsx37(
|
|
8960
9075
|
"div",
|
|
@@ -9115,7 +9230,7 @@ function ImageUpload({
|
|
|
9115
9230
|
"div",
|
|
9116
9231
|
{
|
|
9117
9232
|
className: cn(
|
|
9118
|
-
"relative border-2 border-dashed rounded-
|
|
9233
|
+
"relative border-2 border-dashed rounded-2xl md:rounded-3xl p-8 text-center transition-all duration-200",
|
|
9119
9234
|
isDragging && !disabled ? "border-primary bg-primary/5 scale-[1.02]" : "border-border hover:border-primary/50",
|
|
9120
9235
|
disabled && "opacity-50 cursor-not-allowed",
|
|
9121
9236
|
uploading && "pointer-events-none"
|
|
@@ -9124,7 +9239,7 @@ function ImageUpload({
|
|
|
9124
9239
|
onDragLeave: handleDragLeave,
|
|
9125
9240
|
onDrop: handleDrop,
|
|
9126
9241
|
children: [
|
|
9127
|
-
uploading && /* @__PURE__ */ jsx38("div", { className: "absolute inset-0 bg-background/80 flex items-center justify-center rounded-
|
|
9242
|
+
uploading && /* @__PURE__ */ jsx38("div", { className: "absolute inset-0 bg-background/80 flex items-center justify-center rounded-2xl md:rounded-3xl", children: /* @__PURE__ */ jsxs33("div", { className: "flex items-center gap-3", children: [
|
|
9128
9243
|
/* @__PURE__ */ jsx38(Loader25, { className: "w-6 h-6 animate-spin text-primary" }),
|
|
9129
9244
|
/* @__PURE__ */ jsx38("span", { className: "text-sm font-medium", children: "Uploading..." })
|
|
9130
9245
|
] }) }),
|
|
@@ -9153,7 +9268,7 @@ function ImageUpload({
|
|
|
9153
9268
|
),
|
|
9154
9269
|
showPreview && uploadedImages.length > 0 && /* @__PURE__ */ jsxs33("div", { className: "space-y-3", children: [
|
|
9155
9270
|
/* @__PURE__ */ jsx38("h4", { className: "text-sm font-medium", children: "Uploaded Images" }),
|
|
9156
|
-
/* @__PURE__ */ jsx38("div", { className: "grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 gap-4", children: uploadedImages.map((image) => /* @__PURE__ */ jsxs33("div", { className: "relative group bg-card border border-border rounded-
|
|
9271
|
+
/* @__PURE__ */ jsx38("div", { className: "grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 gap-4", children: uploadedImages.map((image) => /* @__PURE__ */ jsxs33("div", { className: "relative group bg-card border border-border rounded-2xl md:rounded-3xl p-3", children: [
|
|
9157
9272
|
/* @__PURE__ */ jsx38(
|
|
9158
9273
|
Button_default,
|
|
9159
9274
|
{
|
|
@@ -9198,7 +9313,7 @@ function ImageUpload({
|
|
|
9198
9313
|
// ../../components/ui/Carousel.tsx
|
|
9199
9314
|
import * as React32 from "react";
|
|
9200
9315
|
import { ChevronLeft as ChevronLeft4, ChevronRight as ChevronRight6 } from "lucide-react";
|
|
9201
|
-
import { Fragment as
|
|
9316
|
+
import { Fragment as Fragment14, jsx as jsx39, jsxs as jsxs34 } from "react/jsx-runtime";
|
|
9202
9317
|
function Carousel({
|
|
9203
9318
|
children,
|
|
9204
9319
|
autoScroll = true,
|
|
@@ -9360,7 +9475,10 @@ function Carousel({
|
|
|
9360
9475
|
"div",
|
|
9361
9476
|
{
|
|
9362
9477
|
ref: carouselRef,
|
|
9363
|
-
className: cn(
|
|
9478
|
+
className: cn(
|
|
9479
|
+
"relative w-full overflow-hidden focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2 rounded-2xl md:rounded-3xl",
|
|
9480
|
+
className
|
|
9481
|
+
),
|
|
9364
9482
|
onMouseEnter: () => setIsPaused(true),
|
|
9365
9483
|
onMouseLeave: () => setIsPaused(false),
|
|
9366
9484
|
role: "region",
|
|
@@ -9407,7 +9525,7 @@ function Carousel({
|
|
|
9407
9525
|
))
|
|
9408
9526
|
}
|
|
9409
9527
|
),
|
|
9410
|
-
showArrows && totalSlides > slidesToShow && /* @__PURE__ */ jsxs34(
|
|
9528
|
+
showArrows && totalSlides > slidesToShow && /* @__PURE__ */ jsxs34(Fragment14, { children: [
|
|
9411
9529
|
/* @__PURE__ */ jsx39(
|
|
9412
9530
|
Button_default,
|
|
9413
9531
|
{
|
|
@@ -9769,7 +9887,7 @@ function FallingIcons({
|
|
|
9769
9887
|
// ../../components/ui/List.tsx
|
|
9770
9888
|
import * as React34 from "react";
|
|
9771
9889
|
import { ChevronRight as ChevronRight7 } from "lucide-react";
|
|
9772
|
-
import { Fragment as
|
|
9890
|
+
import { Fragment as Fragment15, jsx as jsx41, jsxs as jsxs36 } from "react/jsx-runtime";
|
|
9773
9891
|
var SIZE_STYLES2 = {
|
|
9774
9892
|
xs: { label: "text-xs", desc: "text-[11px]", icon: "h-3.5 w-3.5", avatar: "h-6 w-6" },
|
|
9775
9893
|
sm: { label: "text-[13px]", desc: "text-[12px]", icon: "h-4 w-4", avatar: "h-8 w-8" },
|
|
@@ -9817,12 +9935,12 @@ var ListRoot = React34.forwardRef(
|
|
|
9817
9935
|
const hasChildren = childCount > 0;
|
|
9818
9936
|
const variantClasses2 = {
|
|
9819
9937
|
plain: "",
|
|
9820
|
-
outlined: "rounded-
|
|
9821
|
-
soft: "rounded-
|
|
9822
|
-
bordered: "border border-border rounded-
|
|
9823
|
-
card: "rounded-
|
|
9938
|
+
outlined: "rounded-2xl md:rounded-3xl bg-card text-card-foreground border border-border shadow-sm",
|
|
9939
|
+
soft: "rounded-2xl md:rounded-3xl bg-muted/40 border border-border/60",
|
|
9940
|
+
bordered: "border border-border rounded-2xl md:rounded-3xl",
|
|
9941
|
+
card: "rounded-2xl md:rounded-3xl bg-card shadow-md border border-border",
|
|
9824
9942
|
flush: "",
|
|
9825
|
-
striped: "rounded-
|
|
9943
|
+
striped: "rounded-2xl md:rounded-3xl border border-border overflow-hidden"
|
|
9826
9944
|
};
|
|
9827
9945
|
if (loading2) {
|
|
9828
9946
|
return /* @__PURE__ */ jsx41(
|
|
@@ -9921,7 +10039,7 @@ var ListItem = React34.forwardRef(
|
|
|
9921
10039
|
}
|
|
9922
10040
|
}
|
|
9923
10041
|
} : {};
|
|
9924
|
-
const inner = /* @__PURE__ */ jsxs36(
|
|
10042
|
+
const inner = /* @__PURE__ */ jsxs36(Fragment15, { children: [
|
|
9925
10043
|
/* @__PURE__ */ jsxs36("div", { className: cn("flex items-center gap-3", contentClassName, "group/item relative"), ...headerProps, children: [
|
|
9926
10044
|
avatar && /* @__PURE__ */ jsx41("div", { className: cn("shrink-0", sz.avatar), children: typeof avatar === "string" ? /* @__PURE__ */ jsx41("img", { src: avatar, alt: "", className: cn("rounded-full object-cover", sz.avatar) }) : avatar }),
|
|
9927
10045
|
Left && !avatar && /* @__PURE__ */ jsx41("span", { className: cn("text-muted-foreground shrink-0", sz.icon), children: /* @__PURE__ */ jsx41(Left, { className: cn(sz.icon) }) }),
|
|
@@ -9966,7 +10084,7 @@ var List_default = List;
|
|
|
9966
10084
|
// ../../components/ui/Watermark.tsx
|
|
9967
10085
|
import * as React35 from "react";
|
|
9968
10086
|
import { createPortal as createPortal5 } from "react-dom";
|
|
9969
|
-
import { Fragment as
|
|
10087
|
+
import { Fragment as Fragment16, jsx as jsx42, jsxs as jsxs37 } from "react/jsx-runtime";
|
|
9970
10088
|
var PRESETS2 = {
|
|
9971
10089
|
confidential: { text: "CONFIDENTIAL", color: "rgba(220, 38, 38, 0.15)", rotate: -22, fontSize: 16, fontWeight: "bold" },
|
|
9972
10090
|
draft: { text: "DRAFT", color: "rgba(59, 130, 246, 0.15)", rotate: -22, fontSize: 18, fontWeight: "bold" },
|
|
@@ -10245,7 +10363,7 @@ var Watermark = ({
|
|
|
10245
10363
|
}
|
|
10246
10364
|
);
|
|
10247
10365
|
if (fullPage) {
|
|
10248
|
-
return /* @__PURE__ */ jsxs37(
|
|
10366
|
+
return /* @__PURE__ */ jsxs37(Fragment16, { children: [
|
|
10249
10367
|
children,
|
|
10250
10368
|
typeof window !== "undefined" ? createPortal5(overlay, document.body) : null
|
|
10251
10369
|
] });
|
|
@@ -11057,7 +11175,7 @@ function ColorPicker({
|
|
|
11057
11175
|
|
|
11058
11176
|
// ../../components/ui/Grid.tsx
|
|
11059
11177
|
import React38, { useId as useId7 } from "react";
|
|
11060
|
-
import { Fragment as
|
|
11178
|
+
import { Fragment as Fragment17, jsx as jsx45, jsxs as jsxs40 } from "react/jsx-runtime";
|
|
11061
11179
|
var BP_MIN = {
|
|
11062
11180
|
sm: 640,
|
|
11063
11181
|
md: 768,
|
|
@@ -11085,14 +11203,14 @@ function joinAreas(areas) {
|
|
|
11085
11203
|
}
|
|
11086
11204
|
function getVariantClasses(variant = "default", outlined) {
|
|
11087
11205
|
if (outlined) {
|
|
11088
|
-
return "rounded-
|
|
11206
|
+
return "rounded-2xl md:rounded-3xl bg-card text-card-foreground border border-border shadow-sm";
|
|
11089
11207
|
}
|
|
11090
11208
|
const variants = {
|
|
11091
11209
|
default: "",
|
|
11092
|
-
bordered: "border border-border rounded-
|
|
11093
|
-
card: "rounded-
|
|
11094
|
-
flat: "bg-muted/30 rounded-
|
|
11095
|
-
glass: "bg-background/80 backdrop-blur-sm border border-border/50 rounded-
|
|
11210
|
+
bordered: "border border-border rounded-2xl md:rounded-3xl",
|
|
11211
|
+
card: "rounded-2xl md:rounded-3xl bg-card text-card-foreground border border-border shadow-sm",
|
|
11212
|
+
flat: "bg-muted/30 rounded-2xl md:rounded-3xl",
|
|
11213
|
+
glass: "bg-background/80 backdrop-blur-sm border border-border/50 rounded-2xl md:rounded-3xl shadow-lg"
|
|
11096
11214
|
};
|
|
11097
11215
|
return variants[variant] || "";
|
|
11098
11216
|
}
|
|
@@ -11214,7 +11332,7 @@ var GridItem = React38.forwardRef(
|
|
|
11214
11332
|
st.opacity = 0;
|
|
11215
11333
|
st.animation = `uvGridItemFadeIn 0.5s ease-out forwards`;
|
|
11216
11334
|
}
|
|
11217
|
-
return /* @__PURE__ */ jsxs40(
|
|
11335
|
+
return /* @__PURE__ */ jsxs40(Fragment17, { children: [
|
|
11218
11336
|
animationDelay != null && /* @__PURE__ */ jsx45(
|
|
11219
11337
|
"style",
|
|
11220
11338
|
{
|
|
@@ -11227,7 +11345,11 @@ var GridItem = React38.forwardRef(
|
|
|
11227
11345
|
"div",
|
|
11228
11346
|
{
|
|
11229
11347
|
ref,
|
|
11230
|
-
className: cn(
|
|
11348
|
+
className: cn(
|
|
11349
|
+
"rounded-2xl md:rounded-3xl",
|
|
11350
|
+
hoverable && "transition-all duration-200 hover:scale-[1.02] hover:shadow-md cursor-pointer",
|
|
11351
|
+
className
|
|
11352
|
+
),
|
|
11231
11353
|
style: st,
|
|
11232
11354
|
...rest
|
|
11233
11355
|
}
|
|
@@ -11245,7 +11367,7 @@ import { useMemo as useMemo7, useState as useState34, useRef as useRef14 } from
|
|
|
11245
11367
|
// ../../components/ui/ChartTooltip.tsx
|
|
11246
11368
|
import { useEffect as useEffect20, useState as useState33 } from "react";
|
|
11247
11369
|
import { createPortal as createPortal6 } from "react-dom";
|
|
11248
|
-
import { Fragment as
|
|
11370
|
+
import { Fragment as Fragment18, jsx as jsx46, jsxs as jsxs41 } from "react/jsx-runtime";
|
|
11249
11371
|
function ChartTooltip({ x, y, visible, label, value, color, secondaryLabel, secondaryValue, items, containerRef }) {
|
|
11250
11372
|
const [isMounted, setIsMounted] = useState33(false);
|
|
11251
11373
|
const [position, setPosition] = useState33(null);
|
|
@@ -11292,7 +11414,7 @@ function ChartTooltip({ x, y, visible, label, value, color, secondaryLabel, seco
|
|
|
11292
11414
|
":"
|
|
11293
11415
|
] }),
|
|
11294
11416
|
/* @__PURE__ */ jsx46("span", { className: "font-semibold ml-auto", children: item.value })
|
|
11295
|
-
] }, i)) }) : /* @__PURE__ */ jsxs41(
|
|
11417
|
+
] }, i)) }) : /* @__PURE__ */ jsxs41(Fragment18, { children: [
|
|
11296
11418
|
/* @__PURE__ */ jsxs41("div", { className: "flex items-center gap-2", children: [
|
|
11297
11419
|
color && /* @__PURE__ */ jsx46("div", { className: "w-2 h-2 rounded-full shrink-0", style: { backgroundColor: color } }),
|
|
11298
11420
|
/* @__PURE__ */ jsx46("span", { className: "font-semibold", children: value })
|
|
@@ -11319,7 +11441,7 @@ function ChartTooltip({ x, y, visible, label, value, color, secondaryLabel, seco
|
|
|
11319
11441
|
}
|
|
11320
11442
|
|
|
11321
11443
|
// ../../components/ui/LineChart.tsx
|
|
11322
|
-
import { Fragment as
|
|
11444
|
+
import { Fragment as Fragment19, jsx as jsx47, jsxs as jsxs42 } from "react/jsx-runtime";
|
|
11323
11445
|
function LineChart({
|
|
11324
11446
|
data,
|
|
11325
11447
|
width = 400,
|
|
@@ -11384,7 +11506,7 @@ function LineChart({
|
|
|
11384
11506
|
}
|
|
11385
11507
|
return lines;
|
|
11386
11508
|
}, [minValue, maxValue, chartHeight, padding.top]);
|
|
11387
|
-
return /* @__PURE__ */ jsxs42(
|
|
11509
|
+
return /* @__PURE__ */ jsxs42(Fragment19, { children: [
|
|
11388
11510
|
/* @__PURE__ */ jsxs42("svg", { ref: svgRef, width, height, className: `overflow-visible ${className}`, style: { fontFamily: "inherit" }, children: [
|
|
11389
11511
|
showGrid && /* @__PURE__ */ jsx47("g", { className: "text-muted-foreground/20", children: gridLines.map((line, i) => /* @__PURE__ */ jsxs42("g", { children: [
|
|
11390
11512
|
/* @__PURE__ */ jsx47("line", { x1: padding.left, y1: line.y, x2: width - padding.right, y2: line.y, stroke: "currentColor", strokeDasharray: "4 4" }),
|
|
@@ -11493,7 +11615,7 @@ function LineChart({
|
|
|
11493
11615
|
|
|
11494
11616
|
// ../../components/ui/BarChart.tsx
|
|
11495
11617
|
import { useMemo as useMemo8, useState as useState35, useRef as useRef15 } from "react";
|
|
11496
|
-
import { Fragment as
|
|
11618
|
+
import { Fragment as Fragment20, jsx as jsx48, jsxs as jsxs43 } from "react/jsx-runtime";
|
|
11497
11619
|
function BarChart({
|
|
11498
11620
|
data,
|
|
11499
11621
|
width = 400,
|
|
@@ -11562,12 +11684,12 @@ function BarChart({
|
|
|
11562
11684
|
}
|
|
11563
11685
|
return { maxValue: max, bars: barsData, gridLines: lines };
|
|
11564
11686
|
}, [data, chartWidth, chartHeight, horizontal, barGap, padding, width, height]);
|
|
11565
|
-
return /* @__PURE__ */ jsxs43(
|
|
11687
|
+
return /* @__PURE__ */ jsxs43(Fragment20, { children: [
|
|
11566
11688
|
/* @__PURE__ */ jsxs43("svg", { ref: svgRef, width, height, className: `overflow-visible ${className}`, style: { fontFamily: "inherit" }, children: [
|
|
11567
|
-
showGrid && /* @__PURE__ */ jsx48("g", { className: "text-muted-foreground/20", children: gridLines.map((line, i) => /* @__PURE__ */ jsx48("g", { children: horizontal ? /* @__PURE__ */ jsxs43(
|
|
11689
|
+
showGrid && /* @__PURE__ */ jsx48("g", { className: "text-muted-foreground/20", children: gridLines.map((line, i) => /* @__PURE__ */ jsx48("g", { children: horizontal ? /* @__PURE__ */ jsxs43(Fragment20, { children: [
|
|
11568
11690
|
/* @__PURE__ */ jsx48("line", { x1: line.x, y1: line.y1, x2: line.x, y2: line.y2, stroke: "currentColor", strokeDasharray: "4 4" }),
|
|
11569
11691
|
/* @__PURE__ */ jsx48("text", { x: line.x, y: height - 8, textAnchor: "middle", fontSize: "10", className: "text-muted-foreground", fill: "currentColor", children: line.value.toFixed(0) })
|
|
11570
|
-
] }) : /* @__PURE__ */ jsxs43(
|
|
11692
|
+
] }) : /* @__PURE__ */ jsxs43(Fragment20, { children: [
|
|
11571
11693
|
/* @__PURE__ */ jsx48("line", { x1: line.x1, y1: line.y, x2: line.x2, y2: line.y, stroke: "currentColor", strokeDasharray: "4 4" }),
|
|
11572
11694
|
/* @__PURE__ */ jsx48("text", { x: padding.left - 8, y: line.y + 4, textAnchor: "end", fontSize: "10", className: "text-muted-foreground", fill: "currentColor", children: line.value.toFixed(0) })
|
|
11573
11695
|
] }) }, i)) }),
|
|
@@ -12605,16 +12727,16 @@ function GaugeChart({
|
|
|
12605
12727
|
|
|
12606
12728
|
// ../../components/ui/ClientOnly.tsx
|
|
12607
12729
|
import { useEffect as useEffect21, useState as useState39 } from "react";
|
|
12608
|
-
import { Fragment as
|
|
12730
|
+
import { Fragment as Fragment21, jsx as jsx54 } from "react/jsx-runtime";
|
|
12609
12731
|
function ClientOnly({ children, fallback = null }) {
|
|
12610
12732
|
const [hasMounted, setHasMounted] = useState39(false);
|
|
12611
12733
|
useEffect21(() => {
|
|
12612
12734
|
setHasMounted(true);
|
|
12613
12735
|
}, []);
|
|
12614
12736
|
if (!hasMounted) {
|
|
12615
|
-
return /* @__PURE__ */ jsx54(
|
|
12737
|
+
return /* @__PURE__ */ jsx54(Fragment21, { children: fallback });
|
|
12616
12738
|
}
|
|
12617
|
-
return /* @__PURE__ */ jsx54(
|
|
12739
|
+
return /* @__PURE__ */ jsx54(Fragment21, { children });
|
|
12618
12740
|
}
|
|
12619
12741
|
|
|
12620
12742
|
// ../../components/ui/Loading.tsx
|
|
@@ -12760,7 +12882,7 @@ TableCaption.displayName = "TableCaption";
|
|
|
12760
12882
|
// ../../components/ui/DataTable.tsx
|
|
12761
12883
|
import { Filter as FilterIcon } from "lucide-react";
|
|
12762
12884
|
import React48 from "react";
|
|
12763
|
-
import { Fragment as
|
|
12885
|
+
import { Fragment as Fragment22, jsx as jsx57, jsxs as jsxs51 } from "react/jsx-runtime";
|
|
12764
12886
|
function useDebounced(value, delay = 300) {
|
|
12765
12887
|
const [debounced, setDebounced] = React48.useState(value);
|
|
12766
12888
|
React48.useEffect(() => {
|
|
@@ -13018,10 +13140,10 @@ function DataTable({
|
|
|
13018
13140
|
isCenterAlign && "justify-center",
|
|
13019
13141
|
!isRightAlign && !isCenterAlign && "justify-between"
|
|
13020
13142
|
),
|
|
13021
|
-
children: isRightAlign ? /* @__PURE__ */ jsxs51(
|
|
13143
|
+
children: isRightAlign ? /* @__PURE__ */ jsxs51(Fragment22, { children: [
|
|
13022
13144
|
filterContent,
|
|
13023
13145
|
titleContent
|
|
13024
|
-
] }) : /* @__PURE__ */ jsxs51(
|
|
13146
|
+
] }) : /* @__PURE__ */ jsxs51(Fragment22, { children: [
|
|
13025
13147
|
titleContent,
|
|
13026
13148
|
filterContent
|
|
13027
13149
|
] })
|
|
@@ -13203,7 +13325,17 @@ function DataTable({
|
|
|
13203
13325
|
totalItems
|
|
13204
13326
|
] }),
|
|
13205
13327
|
/* @__PURE__ */ jsxs51("div", { className: "flex items-center gap-0.5", children: [
|
|
13206
|
-
/* @__PURE__ */ jsx57(
|
|
13328
|
+
/* @__PURE__ */ jsx57(
|
|
13329
|
+
Button_default,
|
|
13330
|
+
{
|
|
13331
|
+
variant: "ghost",
|
|
13332
|
+
size: "sm",
|
|
13333
|
+
className: "h-7 w-7 p-0 rounded-full",
|
|
13334
|
+
onClick: () => setCurPage(Math.max(1, curPage - 1)),
|
|
13335
|
+
disabled: curPage === 1,
|
|
13336
|
+
children: /* @__PURE__ */ jsx57("svg", { className: "h-4 w-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx57("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" }) })
|
|
13337
|
+
}
|
|
13338
|
+
),
|
|
13207
13339
|
(() => {
|
|
13208
13340
|
const totalPages = Math.ceil(totalItems / curPageSize);
|
|
13209
13341
|
const pages = [];
|
|
@@ -13224,7 +13356,7 @@ function DataTable({
|
|
|
13224
13356
|
{
|
|
13225
13357
|
onClick: () => setCurPage(p),
|
|
13226
13358
|
className: cn(
|
|
13227
|
-
"h-7 min-w-7 px-
|
|
13359
|
+
"h-7 min-w-7 px-2 rounded-full text-xs font-medium transition-colors",
|
|
13228
13360
|
curPage === p ? "bg-primary text-primary-foreground" : "hover:bg-accent hover:text-accent-foreground"
|
|
13229
13361
|
),
|
|
13230
13362
|
children: p
|
|
@@ -13238,7 +13370,7 @@ function DataTable({
|
|
|
13238
13370
|
{
|
|
13239
13371
|
variant: "ghost",
|
|
13240
13372
|
size: "sm",
|
|
13241
|
-
className: "h-7 w-7 p-0",
|
|
13373
|
+
className: "h-7 w-7 p-0 rounded-full",
|
|
13242
13374
|
onClick: () => setCurPage(Math.min(Math.ceil(totalItems / curPageSize), curPage + 1)),
|
|
13243
13375
|
disabled: curPage === Math.ceil(totalItems / curPageSize),
|
|
13244
13376
|
children: /* @__PURE__ */ jsx57("svg", { className: "h-4 w-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx57("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" }) })
|
|
@@ -13255,7 +13387,7 @@ function DataTable({
|
|
|
13255
13387
|
setCurPageSize(Number(v));
|
|
13256
13388
|
},
|
|
13257
13389
|
size: "sm",
|
|
13258
|
-
className: "w-
|
|
13390
|
+
className: "w-20"
|
|
13259
13391
|
}
|
|
13260
13392
|
)
|
|
13261
13393
|
] })
|
|
@@ -13578,7 +13710,7 @@ function AccessDenied({
|
|
|
13578
13710
|
import { Moon as Moon2, Sun as Sun2, Monitor } from "lucide-react";
|
|
13579
13711
|
import { useEffect as useEffect23, useRef as useRef19, useState as useState40 } from "react";
|
|
13580
13712
|
import { createPortal as createPortal7 } from "react-dom";
|
|
13581
|
-
import { Fragment as
|
|
13713
|
+
import { Fragment as Fragment23, jsx as jsx62, jsxs as jsxs56 } from "react/jsx-runtime";
|
|
13582
13714
|
function ThemeToggleHeadless({
|
|
13583
13715
|
theme,
|
|
13584
13716
|
onChange,
|
|
@@ -13629,7 +13761,7 @@ function ThemeToggleHeadless({
|
|
|
13629
13761
|
children: /* @__PURE__ */ jsx62(CurrentIcon, { className: "h-5 w-5" })
|
|
13630
13762
|
}
|
|
13631
13763
|
),
|
|
13632
|
-
isOpen && /* @__PURE__ */ jsxs56(
|
|
13764
|
+
isOpen && /* @__PURE__ */ jsxs56(Fragment23, { children: [
|
|
13633
13765
|
typeof window !== "undefined" && createPortal7(/* @__PURE__ */ jsx62("div", { className: "fixed inset-0 z-9998", onClick: () => setIsOpen(false) }), document.body),
|
|
13634
13766
|
typeof window !== "undefined" && dropdownPosition && createPortal7(
|
|
13635
13767
|
/* @__PURE__ */ jsx62(
|
|
@@ -13681,7 +13813,7 @@ function ThemeToggleHeadless({
|
|
|
13681
13813
|
import { useRef as useRef20, useState as useState41 } from "react";
|
|
13682
13814
|
import { createPortal as createPortal8 } from "react-dom";
|
|
13683
13815
|
import { Globe } from "lucide-react";
|
|
13684
|
-
import { Fragment as
|
|
13816
|
+
import { Fragment as Fragment24, jsx as jsx63, jsxs as jsxs57 } from "react/jsx-runtime";
|
|
13685
13817
|
function LanguageSwitcherHeadless({
|
|
13686
13818
|
locales,
|
|
13687
13819
|
currentLocale,
|
|
@@ -13726,7 +13858,7 @@ function LanguageSwitcherHeadless({
|
|
|
13726
13858
|
children: /* @__PURE__ */ jsx63(Globe, { className: "h-5 w-5" })
|
|
13727
13859
|
}
|
|
13728
13860
|
),
|
|
13729
|
-
isOpen && /* @__PURE__ */ jsxs57(
|
|
13861
|
+
isOpen && /* @__PURE__ */ jsxs57(Fragment24, { children: [
|
|
13730
13862
|
typeof window !== "undefined" && createPortal8(/* @__PURE__ */ jsx63("div", { className: "fixed inset-0 z-9998", onClick: () => setIsOpen(false) }), document.body),
|
|
13731
13863
|
typeof window !== "undefined" && dropdownPosition && createPortal8(
|
|
13732
13864
|
/* @__PURE__ */ jsx63(
|