@underverse-ui/underverse 0.2.13 → 0.2.15
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 +1002 -1084
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +765 -847
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -2532,90 +2532,201 @@ import { createPortal as createPortal3 } from "react-dom";
|
|
|
2532
2532
|
|
|
2533
2533
|
// ../../lib/utils/shadcn-animations.ts
|
|
2534
2534
|
var shadcnAnimationStyles = `
|
|
2535
|
+
/* ============================================
|
|
2536
|
+
* DROPDOWN / POPOVER ANIMATIONS
|
|
2537
|
+
* Uses spring-like cubic-bezier for natural feel
|
|
2538
|
+
* ============================================ */
|
|
2539
|
+
|
|
2540
|
+
/* Native-like Combobox Animation - Mimics browser default select */
|
|
2541
|
+
[data-state="open"][data-combobox-dropdown] {
|
|
2542
|
+
animation: comboboxOpen 150ms cubic-bezier(0.2, 0, 0, 1);
|
|
2543
|
+
transform-origin: top center;
|
|
2544
|
+
}
|
|
2545
|
+
|
|
2546
|
+
[data-state="closed"][data-combobox-dropdown] {
|
|
2547
|
+
animation: comboboxClose 120ms cubic-bezier(0.4, 0, 1, 1);
|
|
2548
|
+
transform-origin: top center;
|
|
2549
|
+
}
|
|
2550
|
+
|
|
2551
|
+
@keyframes comboboxOpen {
|
|
2552
|
+
0% {
|
|
2553
|
+
opacity: 0;
|
|
2554
|
+
transform: translateY(-4px) scaleY(0.9);
|
|
2555
|
+
}
|
|
2556
|
+
100% {
|
|
2557
|
+
opacity: 1;
|
|
2558
|
+
transform: translateY(0) scaleY(1);
|
|
2559
|
+
}
|
|
2560
|
+
}
|
|
2561
|
+
|
|
2562
|
+
@keyframes comboboxClose {
|
|
2563
|
+
0% {
|
|
2564
|
+
opacity: 1;
|
|
2565
|
+
transform: translateY(0) scaleY(1);
|
|
2566
|
+
}
|
|
2567
|
+
100% {
|
|
2568
|
+
opacity: 0;
|
|
2569
|
+
transform: translateY(-4px) scaleY(0.9);
|
|
2570
|
+
}
|
|
2571
|
+
}
|
|
2572
|
+
|
|
2573
|
+
/* Generic dropdown open/close */
|
|
2535
2574
|
[data-state="open"] {
|
|
2536
|
-
animation: slideDownAndFade
|
|
2575
|
+
animation: slideDownAndFade 220ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
2537
2576
|
}
|
|
2538
2577
|
|
|
2539
2578
|
[data-state="closed"] {
|
|
2540
|
-
animation: slideUpAndFade
|
|
2579
|
+
animation: slideUpAndFade 180ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
2541
2580
|
}
|
|
2542
2581
|
|
|
2543
2582
|
@keyframes slideDownAndFade {
|
|
2544
2583
|
from {
|
|
2545
2584
|
opacity: 0;
|
|
2546
|
-
transform: translateY(-
|
|
2585
|
+
transform: translateY(-4px) scale(0.98);
|
|
2547
2586
|
}
|
|
2548
2587
|
to {
|
|
2549
2588
|
opacity: 1;
|
|
2550
|
-
transform: translateY(0);
|
|
2589
|
+
transform: translateY(0) scale(1);
|
|
2551
2590
|
}
|
|
2552
2591
|
}
|
|
2553
2592
|
|
|
2554
2593
|
@keyframes slideUpAndFade {
|
|
2555
2594
|
from {
|
|
2556
2595
|
opacity: 1;
|
|
2557
|
-
transform: translateY(0);
|
|
2596
|
+
transform: translateY(0) scale(1);
|
|
2558
2597
|
}
|
|
2559
2598
|
to {
|
|
2560
2599
|
opacity: 0;
|
|
2561
|
-
transform: translateY(-
|
|
2600
|
+
transform: translateY(-4px) scale(0.98);
|
|
2562
2601
|
}
|
|
2563
2602
|
}
|
|
2564
2603
|
|
|
2604
|
+
/* ============================================
|
|
2605
|
+
* DROPDOWN ITEMS - Native-like instant appearance
|
|
2606
|
+
* ============================================ */
|
|
2607
|
+
|
|
2608
|
+
/* Fast staggered animation for native feel */
|
|
2565
2609
|
.dropdown-item {
|
|
2566
2610
|
opacity: 0;
|
|
2567
|
-
animation:
|
|
2611
|
+
animation: itemFadeIn 120ms cubic-bezier(0.2, 0, 0, 1) forwards;
|
|
2568
2612
|
}
|
|
2569
|
-
|
|
2570
|
-
@keyframes
|
|
2571
|
-
|
|
2613
|
+
|
|
2614
|
+
@keyframes itemFadeIn {
|
|
2615
|
+
0% {
|
|
2572
2616
|
opacity: 0;
|
|
2573
|
-
transform: translateY(
|
|
2617
|
+
transform: translateY(-2px);
|
|
2574
2618
|
}
|
|
2575
|
-
|
|
2619
|
+
100% {
|
|
2576
2620
|
opacity: 1;
|
|
2577
2621
|
transform: translateY(0);
|
|
2578
2622
|
}
|
|
2579
2623
|
}
|
|
2624
|
+
|
|
2625
|
+
/* Subtle hover effect */
|
|
2626
|
+
.dropdown-item {
|
|
2627
|
+
transition: background-color 100ms ease;
|
|
2628
|
+
}
|
|
2629
|
+
|
|
2630
|
+
/* ============================================
|
|
2631
|
+
* TOOLTIP / SIDE ANIMATIONS
|
|
2632
|
+
* ============================================ */
|
|
2580
2633
|
|
|
2581
|
-
/* Tooltip specific animations */
|
|
2582
2634
|
[data-side="top"] {
|
|
2583
|
-
animation:
|
|
2635
|
+
animation: slideFromBottom 200ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
2584
2636
|
}
|
|
2585
2637
|
|
|
2586
2638
|
[data-side="bottom"] {
|
|
2587
|
-
animation:
|
|
2639
|
+
animation: slideFromTop 200ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
2588
2640
|
}
|
|
2589
2641
|
|
|
2590
2642
|
[data-side="left"] {
|
|
2591
|
-
animation:
|
|
2643
|
+
animation: slideFromRight 200ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
2592
2644
|
}
|
|
2593
2645
|
|
|
2594
2646
|
[data-side="right"] {
|
|
2595
|
-
animation:
|
|
2647
|
+
animation: slideFromLeft 200ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
2596
2648
|
}
|
|
2597
2649
|
|
|
2598
|
-
@keyframes
|
|
2650
|
+
@keyframes slideFromTop {
|
|
2599
2651
|
from {
|
|
2600
2652
|
opacity: 0;
|
|
2601
|
-
transform:
|
|
2653
|
+
transform: translateY(-6px) scale(0.96);
|
|
2602
2654
|
}
|
|
2603
2655
|
to {
|
|
2604
2656
|
opacity: 1;
|
|
2605
|
-
transform:
|
|
2657
|
+
transform: translateY(0) scale(1);
|
|
2658
|
+
}
|
|
2659
|
+
}
|
|
2660
|
+
|
|
2661
|
+
@keyframes slideFromBottom {
|
|
2662
|
+
from {
|
|
2663
|
+
opacity: 0;
|
|
2664
|
+
transform: translateY(6px) scale(0.96);
|
|
2665
|
+
}
|
|
2666
|
+
to {
|
|
2667
|
+
opacity: 1;
|
|
2668
|
+
transform: translateY(0) scale(1);
|
|
2669
|
+
}
|
|
2670
|
+
}
|
|
2671
|
+
|
|
2672
|
+
@keyframes slideFromLeft {
|
|
2673
|
+
from {
|
|
2674
|
+
opacity: 0;
|
|
2675
|
+
transform: translateX(-6px) scale(0.96);
|
|
2676
|
+
}
|
|
2677
|
+
to {
|
|
2678
|
+
opacity: 1;
|
|
2679
|
+
transform: translateX(0) scale(1);
|
|
2680
|
+
}
|
|
2681
|
+
}
|
|
2682
|
+
|
|
2683
|
+
@keyframes slideFromRight {
|
|
2684
|
+
from {
|
|
2685
|
+
opacity: 0;
|
|
2686
|
+
transform: translateX(6px) scale(0.96);
|
|
2687
|
+
}
|
|
2688
|
+
to {
|
|
2689
|
+
opacity: 1;
|
|
2690
|
+
transform: translateX(0) scale(1);
|
|
2691
|
+
}
|
|
2692
|
+
}
|
|
2693
|
+
|
|
2694
|
+
/* ============================================
|
|
2695
|
+
* UTILITY ANIMATIONS
|
|
2696
|
+
* ============================================ */
|
|
2697
|
+
|
|
2698
|
+
.animate-bounce-subtle {
|
|
2699
|
+
animation: bounceSubtle 600ms cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
2700
|
+
}
|
|
2701
|
+
|
|
2702
|
+
@keyframes bounceSubtle {
|
|
2703
|
+
0%, 100% {
|
|
2704
|
+
transform: translateY(0);
|
|
2705
|
+
}
|
|
2706
|
+
50% {
|
|
2707
|
+
transform: translateY(-4px);
|
|
2606
2708
|
}
|
|
2607
2709
|
}
|
|
2608
2710
|
|
|
2609
|
-
|
|
2711
|
+
.animate-scale-in {
|
|
2712
|
+
animation: scaleIn 200ms cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
2713
|
+
}
|
|
2714
|
+
|
|
2715
|
+
@keyframes scaleIn {
|
|
2610
2716
|
from {
|
|
2611
2717
|
opacity: 0;
|
|
2612
|
-
transform:
|
|
2718
|
+
transform: scale(0.9);
|
|
2613
2719
|
}
|
|
2614
2720
|
to {
|
|
2615
2721
|
opacity: 1;
|
|
2616
|
-
transform:
|
|
2722
|
+
transform: scale(1);
|
|
2617
2723
|
}
|
|
2618
2724
|
}
|
|
2725
|
+
|
|
2726
|
+
/* Smooth backdrop blur transition */
|
|
2727
|
+
.backdrop-animate {
|
|
2728
|
+
transition: backdrop-filter 200ms ease, background-color 200ms ease;
|
|
2729
|
+
}
|
|
2619
2730
|
`;
|
|
2620
2731
|
var useShadCNAnimations = () => {
|
|
2621
2732
|
if (typeof document !== "undefined") {
|
|
@@ -3011,25 +3122,7 @@ var SidebarSheet = ({ navigation, children, ...props }) => {
|
|
|
3011
3122
|
|
|
3012
3123
|
// ../../components/ui/Alert.tsx
|
|
3013
3124
|
import { useState as useState12 } from "react";
|
|
3014
|
-
|
|
3015
|
-
// ../../components/icons/AlertIcons.tsx
|
|
3016
|
-
import { Info as Info2, AlertTriangle as AlertTriangle3, CheckCircle2 as CheckCircle22, OctagonX } from "lucide-react";
|
|
3017
|
-
import { jsx as jsx18 } from "react/jsx-runtime";
|
|
3018
|
-
function InfoIcon(props) {
|
|
3019
|
-
return /* @__PURE__ */ jsx18(Info2, { "aria-hidden": true, className: props.className });
|
|
3020
|
-
}
|
|
3021
|
-
function WarningIcon(props) {
|
|
3022
|
-
return /* @__PURE__ */ jsx18(AlertTriangle3, { "aria-hidden": true, className: props.className });
|
|
3023
|
-
}
|
|
3024
|
-
function CheckCircleIcon(props) {
|
|
3025
|
-
return /* @__PURE__ */ jsx18(CheckCircle22, { "aria-hidden": true, className: props.className });
|
|
3026
|
-
}
|
|
3027
|
-
function ErrorIcon(props) {
|
|
3028
|
-
return /* @__PURE__ */ jsx18(OctagonX, { "aria-hidden": true, className: props.className });
|
|
3029
|
-
}
|
|
3030
|
-
|
|
3031
|
-
// ../../components/ui/Alert.tsx
|
|
3032
|
-
import { X as X6 } from "lucide-react";
|
|
3125
|
+
import { Info as Info2, AlertTriangle as AlertTriangle3, CheckCircle as CheckCircle3, XCircle, X as X6 } from "lucide-react";
|
|
3033
3126
|
import { useTranslations as useTranslations2 } from "next-intl";
|
|
3034
3127
|
|
|
3035
3128
|
// ../../lib/constants/constants-ui/alert.ts
|
|
@@ -3043,13 +3136,13 @@ var VARIANT_STYLES_ALERT = {
|
|
|
3043
3136
|
};
|
|
3044
3137
|
|
|
3045
3138
|
// ../../components/ui/Alert.tsx
|
|
3046
|
-
import { jsx as
|
|
3139
|
+
import { jsx as jsx18, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
3047
3140
|
var variantIcons = {
|
|
3048
|
-
default: /* @__PURE__ */
|
|
3049
|
-
info: /* @__PURE__ */
|
|
3050
|
-
success: /* @__PURE__ */
|
|
3051
|
-
warning: /* @__PURE__ */
|
|
3052
|
-
error: /* @__PURE__ */
|
|
3141
|
+
default: /* @__PURE__ */ jsx18(Info2, { className: "h-4 w-4 text-muted-foreground" }),
|
|
3142
|
+
info: /* @__PURE__ */ jsx18(Info2, { className: "h-4 w-4 text-info" }),
|
|
3143
|
+
success: /* @__PURE__ */ jsx18(CheckCircle3, { className: "h-4 w-4 text-success" }),
|
|
3144
|
+
warning: /* @__PURE__ */ jsx18(AlertTriangle3, { className: "h-4 w-4 text-warning" }),
|
|
3145
|
+
error: /* @__PURE__ */ jsx18(XCircle, { className: "h-4 w-4 text-destructive" })
|
|
3053
3146
|
};
|
|
3054
3147
|
var Alert = ({ title, description, variant = "default", className, icon, dismissible = false, onClose, actions, closeAriaLabel }) => {
|
|
3055
3148
|
const [open, setOpen] = useState12(true);
|
|
@@ -3066,19 +3159,19 @@ var Alert = ({ title, description, variant = "default", className, icon, dismiss
|
|
|
3066
3159
|
role: "alert",
|
|
3067
3160
|
"aria-live": variant === "error" ? "assertive" : "polite",
|
|
3068
3161
|
children: [
|
|
3069
|
-
/* @__PURE__ */
|
|
3162
|
+
/* @__PURE__ */ jsx18("div", { className: "pt-1", children: icon ?? variantIcons[variant] }),
|
|
3070
3163
|
/* @__PURE__ */ jsxs16("div", { className: "flex-1 min-w-0", children: [
|
|
3071
|
-
title && /* @__PURE__ */
|
|
3072
|
-
description && (typeof description === "string" ? /* @__PURE__ */
|
|
3073
|
-
actions && /* @__PURE__ */
|
|
3164
|
+
title && /* @__PURE__ */ jsx18("p", { className: "font-semibold text-sm leading-none mb-1 text-foreground", children: title }),
|
|
3165
|
+
description && (typeof description === "string" ? /* @__PURE__ */ jsx18("p", { className: "text-sm text-muted-foreground leading-relaxed break-words", children: description }) : /* @__PURE__ */ jsx18("div", { className: "text-sm text-muted-foreground leading-relaxed break-words", children: description })),
|
|
3166
|
+
actions && /* @__PURE__ */ jsx18("div", { className: "mt-2 flex flex-wrap gap-2", children: actions })
|
|
3074
3167
|
] }),
|
|
3075
|
-
dismissible && /* @__PURE__ */
|
|
3168
|
+
dismissible && /* @__PURE__ */ jsx18(
|
|
3076
3169
|
"button",
|
|
3077
3170
|
{
|
|
3078
3171
|
onClick: handleClose,
|
|
3079
3172
|
className: "rounded-md p-1 hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
3080
3173
|
"aria-label": closeAriaLabel || t("closeAlert"),
|
|
3081
|
-
children: /* @__PURE__ */
|
|
3174
|
+
children: /* @__PURE__ */ jsx18(X6, { className: "h-4 w-4" })
|
|
3082
3175
|
}
|
|
3083
3176
|
)
|
|
3084
3177
|
]
|
|
@@ -3134,7 +3227,7 @@ var loading = new LoadingManager();
|
|
|
3134
3227
|
|
|
3135
3228
|
// ../../components/ui/GlobalLoading.tsx
|
|
3136
3229
|
import { useTranslations as useTranslations3 } from "next-intl";
|
|
3137
|
-
import { jsx as
|
|
3230
|
+
import { jsx as jsx19, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
3138
3231
|
var GlobalLoading = ({
|
|
3139
3232
|
className,
|
|
3140
3233
|
backdrop = true,
|
|
@@ -3147,7 +3240,7 @@ var GlobalLoading = ({
|
|
|
3147
3240
|
return unsubscribe;
|
|
3148
3241
|
}, []);
|
|
3149
3242
|
if (!state.isVisible) return null;
|
|
3150
|
-
return /* @__PURE__ */
|
|
3243
|
+
return /* @__PURE__ */ jsx19(
|
|
3151
3244
|
"div",
|
|
3152
3245
|
{
|
|
3153
3246
|
className: cn(
|
|
@@ -3160,8 +3253,8 @@ var GlobalLoading = ({
|
|
|
3160
3253
|
"aria-modal": true,
|
|
3161
3254
|
"aria-label": "Loading",
|
|
3162
3255
|
children: /* @__PURE__ */ jsxs17("div", { className: "flex items-center justify-center space-x-3 backdrop-blur-sm rounded-lg px-6 py-4 shadow-lg", role: "status", "aria-live": "assertive", "aria-busy": true, children: [
|
|
3163
|
-
/* @__PURE__ */
|
|
3164
|
-
state.text && /* @__PURE__ */
|
|
3256
|
+
/* @__PURE__ */ jsx19(Activity2, { className: "w-6 h-6 animate-spin text-primary-background", "aria-hidden": true }),
|
|
3257
|
+
state.text && /* @__PURE__ */ jsx19("span", { className: "text-base font-medium text-foreground", children: state.text })
|
|
3165
3258
|
] })
|
|
3166
3259
|
}
|
|
3167
3260
|
);
|
|
@@ -3172,14 +3265,14 @@ var PageLoading = ({
|
|
|
3172
3265
|
}) => {
|
|
3173
3266
|
const t = useTranslations3("Loading");
|
|
3174
3267
|
const defaultMessage = message || t("loadingPage");
|
|
3175
|
-
return /* @__PURE__ */
|
|
3268
|
+
return /* @__PURE__ */ jsx19("div", { className: cn(
|
|
3176
3269
|
"min-h-screen flex items-center justify-center bg-background",
|
|
3177
3270
|
className
|
|
3178
3271
|
), children: /* @__PURE__ */ jsxs17("div", { className: "text-center space-y-4", children: [
|
|
3179
|
-
/* @__PURE__ */
|
|
3272
|
+
/* @__PURE__ */ jsx19(Activity2, { className: "w-8 h-8 animate-spin text-primary mx-auto" }),
|
|
3180
3273
|
/* @__PURE__ */ jsxs17("div", { children: [
|
|
3181
|
-
/* @__PURE__ */
|
|
3182
|
-
/* @__PURE__ */
|
|
3274
|
+
/* @__PURE__ */ jsx19("p", { className: "text-lg font-medium text-foreground", children: defaultMessage }),
|
|
3275
|
+
/* @__PURE__ */ jsx19("p", { className: "text-sm text-muted-foreground mt-2", children: t("pleaseWait") })
|
|
3183
3276
|
] })
|
|
3184
3277
|
] }) });
|
|
3185
3278
|
};
|
|
@@ -3196,8 +3289,8 @@ var InlineLoading = ({
|
|
|
3196
3289
|
lg: "w-8 h-8"
|
|
3197
3290
|
};
|
|
3198
3291
|
return /* @__PURE__ */ jsxs17("div", { className: cn("flex items-center justify-center space-x-2", className), children: [
|
|
3199
|
-
/* @__PURE__ */
|
|
3200
|
-
text && /* @__PURE__ */
|
|
3292
|
+
/* @__PURE__ */ jsx19(Activity2, { className: cn("animate-spin text-primary", sizeClasses2[size]) }),
|
|
3293
|
+
text && /* @__PURE__ */ jsx19("span", { className: "text-sm text-muted-foreground animate-pulse", children: text })
|
|
3201
3294
|
] });
|
|
3202
3295
|
};
|
|
3203
3296
|
var ButtonLoading = ({
|
|
@@ -3221,10 +3314,10 @@ var ButtonLoading = ({
|
|
|
3221
3314
|
),
|
|
3222
3315
|
children: [
|
|
3223
3316
|
isLoading && /* @__PURE__ */ jsxs17("div", { className: "absolute inset-0 flex items-center justify-center pointer-events-none", children: [
|
|
3224
|
-
/* @__PURE__ */
|
|
3225
|
-
loadingText && /* @__PURE__ */
|
|
3317
|
+
/* @__PURE__ */ jsx19(Activity2, { className: "w-4 h-4 animate-spin text-primary-foreground" }),
|
|
3318
|
+
loadingText && /* @__PURE__ */ jsx19("span", { className: "ml-2 text-sm", children: loadingText })
|
|
3226
3319
|
] }),
|
|
3227
|
-
/* @__PURE__ */
|
|
3320
|
+
/* @__PURE__ */ jsx19("div", { className: cn(isLoading && "opacity-50 pointer-events-none"), children: child })
|
|
3228
3321
|
]
|
|
3229
3322
|
}
|
|
3230
3323
|
);
|
|
@@ -3234,7 +3327,7 @@ var ButtonLoading = ({
|
|
|
3234
3327
|
import * as React15 from "react";
|
|
3235
3328
|
import Link from "next/link";
|
|
3236
3329
|
import { ChevronRight, Home, MoreHorizontal } from "lucide-react";
|
|
3237
|
-
import { jsx as
|
|
3330
|
+
import { jsx as jsx20, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
3238
3331
|
var sizeStyles5 = {
|
|
3239
3332
|
sm: {
|
|
3240
3333
|
text: "text-xs",
|
|
@@ -3281,16 +3374,16 @@ var Breadcrumb = ({
|
|
|
3281
3374
|
}, [items.length, maxItems, collapsible]);
|
|
3282
3375
|
const getSeparator = () => {
|
|
3283
3376
|
if (typeof separator === "string") {
|
|
3284
|
-
return /* @__PURE__ */
|
|
3377
|
+
return /* @__PURE__ */ jsx20("span", { className: "text-muted-foreground", children: separator });
|
|
3285
3378
|
}
|
|
3286
3379
|
if (variant === "slash") {
|
|
3287
|
-
return /* @__PURE__ */
|
|
3380
|
+
return /* @__PURE__ */ jsx20("span", { className: "text-muted-foreground", children: "/" });
|
|
3288
3381
|
}
|
|
3289
3382
|
if (variant === "arrow") {
|
|
3290
|
-
return /* @__PURE__ */
|
|
3383
|
+
return /* @__PURE__ */ jsx20("span", { className: "text-muted-foreground", children: "\u2192" });
|
|
3291
3384
|
}
|
|
3292
3385
|
const SeparatorComponent = separator;
|
|
3293
|
-
return /* @__PURE__ */
|
|
3386
|
+
return /* @__PURE__ */ jsx20(SeparatorComponent, { className: cn("text-muted-foreground", sizeStyles5[size].icon) });
|
|
3294
3387
|
};
|
|
3295
3388
|
const processedItems = React15.useMemo(() => {
|
|
3296
3389
|
let finalItems = [...items];
|
|
@@ -3311,17 +3404,17 @@ var Breadcrumb = ({
|
|
|
3311
3404
|
const handleCollapseToggle = () => {
|
|
3312
3405
|
setIsCollapsed(!isCollapsed);
|
|
3313
3406
|
};
|
|
3314
|
-
return /* @__PURE__ */
|
|
3407
|
+
return /* @__PURE__ */ jsx20(
|
|
3315
3408
|
"nav",
|
|
3316
3409
|
{
|
|
3317
3410
|
className: cn("flex w-full items-center", sizeStyles5[size].text, className),
|
|
3318
3411
|
"aria-label": "Breadcrumb navigation",
|
|
3319
|
-
children: /* @__PURE__ */
|
|
3412
|
+
children: /* @__PURE__ */ jsx20("ol", { className: cn("flex items-center", sizeStyles5[size].spacing), children: processedItems.map((item, index) => {
|
|
3320
3413
|
const isLast = index === processedItems.length - 1;
|
|
3321
3414
|
const isCollapsedIndicator = item.label === "...";
|
|
3322
3415
|
const Icon = item.icon;
|
|
3323
3416
|
return /* @__PURE__ */ jsxs18("li", { className: "flex items-center", children: [
|
|
3324
|
-
isCollapsedIndicator ? /* @__PURE__ */
|
|
3417
|
+
isCollapsedIndicator ? /* @__PURE__ */ jsx20(
|
|
3325
3418
|
"button",
|
|
3326
3419
|
{
|
|
3327
3420
|
onClick: handleCollapseToggle,
|
|
@@ -3332,7 +3425,7 @@ var Breadcrumb = ({
|
|
|
3332
3425
|
"focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-1"
|
|
3333
3426
|
),
|
|
3334
3427
|
"aria-label": "Show all breadcrumb items",
|
|
3335
|
-
children: /* @__PURE__ */
|
|
3428
|
+
children: /* @__PURE__ */ jsx20(MoreHorizontal, { className: sizeStyles5[size].icon })
|
|
3336
3429
|
}
|
|
3337
3430
|
) : item.href && !isLast && !item.disabled ? /* @__PURE__ */ jsxs18(
|
|
3338
3431
|
Link,
|
|
@@ -3345,8 +3438,8 @@ var Breadcrumb = ({
|
|
|
3345
3438
|
"focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-1 rounded-sm"
|
|
3346
3439
|
),
|
|
3347
3440
|
children: [
|
|
3348
|
-
Icon && /* @__PURE__ */
|
|
3349
|
-
/* @__PURE__ */
|
|
3441
|
+
Icon && /* @__PURE__ */ jsx20(Icon, { className: sizeStyles5[size].icon }),
|
|
3442
|
+
/* @__PURE__ */ jsx20("span", { children: item.label })
|
|
3350
3443
|
]
|
|
3351
3444
|
}
|
|
3352
3445
|
) : /* @__PURE__ */ jsxs18(
|
|
@@ -3359,12 +3452,12 @@ var Breadcrumb = ({
|
|
|
3359
3452
|
),
|
|
3360
3453
|
"aria-current": isLast ? "page" : void 0,
|
|
3361
3454
|
children: [
|
|
3362
|
-
Icon && /* @__PURE__ */
|
|
3363
|
-
/* @__PURE__ */
|
|
3455
|
+
Icon && /* @__PURE__ */ jsx20(Icon, { className: sizeStyles5[size].icon }),
|
|
3456
|
+
/* @__PURE__ */ jsx20("span", { children: item.label })
|
|
3364
3457
|
]
|
|
3365
3458
|
}
|
|
3366
3459
|
),
|
|
3367
|
-
!isLast && /* @__PURE__ */
|
|
3460
|
+
!isLast && /* @__PURE__ */ jsx20(
|
|
3368
3461
|
"span",
|
|
3369
3462
|
{
|
|
3370
3463
|
className: cn("mx-1", sizeStyles5[size].spacing),
|
|
@@ -3382,7 +3475,7 @@ var Breadcrumb_default = Breadcrumb;
|
|
|
3382
3475
|
|
|
3383
3476
|
// ../../components/ui/Tab.tsx
|
|
3384
3477
|
import * as React16 from "react";
|
|
3385
|
-
import { jsx as
|
|
3478
|
+
import { jsx as jsx21, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
3386
3479
|
var sizeStyles6 = {
|
|
3387
3480
|
sm: {
|
|
3388
3481
|
tab: "py-1.5 px-3 text-xs",
|
|
@@ -3529,14 +3622,14 @@ var Tabs = ({
|
|
|
3529
3622
|
}
|
|
3530
3623
|
},
|
|
3531
3624
|
children: [
|
|
3532
|
-
Icon && /* @__PURE__ */
|
|
3625
|
+
Icon && /* @__PURE__ */ jsx21(Icon, { className: "h-4 w-4" }),
|
|
3533
3626
|
tab.label
|
|
3534
3627
|
]
|
|
3535
3628
|
},
|
|
3536
3629
|
tab.value
|
|
3537
3630
|
);
|
|
3538
3631
|
}),
|
|
3539
|
-
variant === "underline" && orientation === "horizontal" && /* @__PURE__ */
|
|
3632
|
+
variant === "underline" && orientation === "horizontal" && /* @__PURE__ */ jsx21(
|
|
3540
3633
|
"div",
|
|
3541
3634
|
{
|
|
3542
3635
|
className: "absolute bottom-0 h-0.5 bg-primary transition-all duration-300 ease-out",
|
|
@@ -3544,7 +3637,7 @@ var Tabs = ({
|
|
|
3544
3637
|
}
|
|
3545
3638
|
)
|
|
3546
3639
|
] }),
|
|
3547
|
-
/* @__PURE__ */
|
|
3640
|
+
/* @__PURE__ */ jsx21(
|
|
3548
3641
|
"div",
|
|
3549
3642
|
{
|
|
3550
3643
|
role: "tabpanel",
|
|
@@ -3562,7 +3655,7 @@ var Tabs = ({
|
|
|
3562
3655
|
] });
|
|
3563
3656
|
};
|
|
3564
3657
|
var SimpleTabs = ({ tabs, defaultValue, className }) => {
|
|
3565
|
-
return /* @__PURE__ */
|
|
3658
|
+
return /* @__PURE__ */ jsx21(
|
|
3566
3659
|
Tabs,
|
|
3567
3660
|
{
|
|
3568
3661
|
tabs,
|
|
@@ -3574,7 +3667,7 @@ var SimpleTabs = ({ tabs, defaultValue, className }) => {
|
|
|
3574
3667
|
);
|
|
3575
3668
|
};
|
|
3576
3669
|
var PillTabs = ({ contained = true, ...props }) => {
|
|
3577
|
-
return /* @__PURE__ */
|
|
3670
|
+
return /* @__PURE__ */ jsx21(
|
|
3578
3671
|
Tabs,
|
|
3579
3672
|
{
|
|
3580
3673
|
...props,
|
|
@@ -3588,7 +3681,7 @@ var VerticalTabs = ({
|
|
|
3588
3681
|
className,
|
|
3589
3682
|
...props
|
|
3590
3683
|
}) => {
|
|
3591
|
-
return /* @__PURE__ */
|
|
3684
|
+
return /* @__PURE__ */ jsx21("div", { className: cn("flex gap-6", className), children: /* @__PURE__ */ jsx21("div", { className: cn(sidebarWidth, "flex-shrink-0"), children: /* @__PURE__ */ jsx21(
|
|
3592
3685
|
Tabs,
|
|
3593
3686
|
{
|
|
3594
3687
|
...props,
|
|
@@ -3602,7 +3695,7 @@ var VerticalTabs = ({
|
|
|
3602
3695
|
// ../../components/ui/DropdownMenu.tsx
|
|
3603
3696
|
import React17, { useState as useState16 } from "react";
|
|
3604
3697
|
import { createPortal as createPortal5 } from "react-dom";
|
|
3605
|
-
import { Fragment as Fragment5, jsx as
|
|
3698
|
+
import { Fragment as Fragment5, jsx as jsx22, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
3606
3699
|
var DropdownMenu = ({
|
|
3607
3700
|
trigger,
|
|
3608
3701
|
children,
|
|
@@ -3724,28 +3817,24 @@ var DropdownMenu = ({
|
|
|
3724
3817
|
setOpen(false);
|
|
3725
3818
|
}
|
|
3726
3819
|
};
|
|
3727
|
-
const dropdownContent = open ? /* @__PURE__ */
|
|
3820
|
+
const dropdownContent = open ? /* @__PURE__ */ jsx22(
|
|
3728
3821
|
"div",
|
|
3729
3822
|
{
|
|
3730
3823
|
"data-dropdown-menu": true,
|
|
3824
|
+
"data-combobox-dropdown": true,
|
|
3731
3825
|
ref: contentRef,
|
|
3732
3826
|
style: {
|
|
3733
3827
|
position: "absolute",
|
|
3734
3828
|
top: position?.top ?? -9999,
|
|
3735
3829
|
left: position?.left ?? -9999,
|
|
3736
3830
|
zIndex: 9999,
|
|
3737
|
-
visibility: position ? "visible" : "hidden"
|
|
3831
|
+
visibility: position ? "visible" : "hidden",
|
|
3832
|
+
transformOrigin: "top center"
|
|
3738
3833
|
},
|
|
3739
3834
|
"data-state": open ? "open" : "closed",
|
|
3740
3835
|
role: "menu",
|
|
3741
|
-
className: cn(
|
|
3742
|
-
|
|
3743
|
-
// shadcn-like enter/exit animations
|
|
3744
|
-
"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
|
|
3745
|
-
"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95",
|
|
3746
|
-
className
|
|
3747
|
-
),
|
|
3748
|
-
children: /* @__PURE__ */ jsx23(
|
|
3836
|
+
className: cn("z-9999 min-w-40", className),
|
|
3837
|
+
children: /* @__PURE__ */ jsx22(
|
|
3749
3838
|
"div",
|
|
3750
3839
|
{
|
|
3751
3840
|
className: cn(
|
|
@@ -3766,7 +3855,7 @@ var DropdownMenu = ({
|
|
|
3766
3855
|
role: "menuitem",
|
|
3767
3856
|
tabIndex: -1,
|
|
3768
3857
|
style: {
|
|
3769
|
-
animationDelay: open ? `${index *
|
|
3858
|
+
animationDelay: open ? `${Math.min(index * 20, 200)}ms` : "0ms"
|
|
3770
3859
|
},
|
|
3771
3860
|
className: cn(
|
|
3772
3861
|
"dropdown-item flex w-full items-center gap-2 px-2.5 py-1.5 text-sm rounded-sm",
|
|
@@ -3777,7 +3866,7 @@ var DropdownMenu = ({
|
|
|
3777
3866
|
item.destructive && "text-destructive hover:bg-destructive/10 focus:bg-destructive/10"
|
|
3778
3867
|
),
|
|
3779
3868
|
children: [
|
|
3780
|
-
IconComponent && /* @__PURE__ */
|
|
3869
|
+
IconComponent && /* @__PURE__ */ jsx22(IconComponent, { className: "h-4 w-4" }),
|
|
3781
3870
|
item.label
|
|
3782
3871
|
]
|
|
3783
3872
|
},
|
|
@@ -3804,7 +3893,7 @@ var DropdownMenu = ({
|
|
|
3804
3893
|
dropdownContent && typeof window !== "undefined" && createPortal5(dropdownContent, document.body)
|
|
3805
3894
|
] });
|
|
3806
3895
|
};
|
|
3807
|
-
var DropdownMenuItem = ({ children, onClick, disabled, destructive, className }) => /* @__PURE__ */
|
|
3896
|
+
var DropdownMenuItem = ({ children, onClick, disabled, destructive, className }) => /* @__PURE__ */ jsx22(
|
|
3808
3897
|
"button",
|
|
3809
3898
|
{
|
|
3810
3899
|
onClick,
|
|
@@ -3820,8 +3909,8 @@ var DropdownMenuItem = ({ children, onClick, disabled, destructive, className })
|
|
|
3820
3909
|
children
|
|
3821
3910
|
}
|
|
3822
3911
|
);
|
|
3823
|
-
var DropdownMenuSeparator = ({ className }) => /* @__PURE__ */
|
|
3824
|
-
var SelectDropdown = ({ options, value, onChange, placeholder = "Select...", className }) => /* @__PURE__ */
|
|
3912
|
+
var DropdownMenuSeparator = ({ className }) => /* @__PURE__ */ jsx22("div", { className: cn("h-px bg-border my-1", className) });
|
|
3913
|
+
var SelectDropdown = ({ options, value, onChange, placeholder = "Select...", className }) => /* @__PURE__ */ jsx22(
|
|
3825
3914
|
DropdownMenu,
|
|
3826
3915
|
{
|
|
3827
3916
|
trigger: /* @__PURE__ */ jsxs20(
|
|
@@ -3834,8 +3923,8 @@ var SelectDropdown = ({ options, value, onChange, placeholder = "Select...", cla
|
|
|
3834
3923
|
className
|
|
3835
3924
|
),
|
|
3836
3925
|
children: [
|
|
3837
|
-
/* @__PURE__ */
|
|
3838
|
-
/* @__PURE__ */
|
|
3926
|
+
/* @__PURE__ */ jsx22("span", { className: "truncate max-w-64 text-foreground/90", children: value || placeholder }),
|
|
3927
|
+
/* @__PURE__ */ jsx22("svg", { width: "16", height: "16", viewBox: "0 0 20 20", fill: "none", className: "opacity-70", children: /* @__PURE__ */ jsx22("path", { d: "M6 8l4 4 4-4", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) })
|
|
3839
3928
|
]
|
|
3840
3929
|
}
|
|
3841
3930
|
),
|
|
@@ -3856,7 +3945,7 @@ import * as React18 from "react";
|
|
|
3856
3945
|
import { useId as useId2 } from "react";
|
|
3857
3946
|
import { createPortal as createPortal6 } from "react-dom";
|
|
3858
3947
|
import { ChevronDown, Search as Search2, SearchX, Check as Check3, X as X7, Loader2 as Loader22 } from "lucide-react";
|
|
3859
|
-
import { jsx as
|
|
3948
|
+
import { jsx as jsx23, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
3860
3949
|
var getOptionLabel = (option) => {
|
|
3861
3950
|
return typeof option === "string" ? option : option.label;
|
|
3862
3951
|
};
|
|
@@ -3973,7 +4062,7 @@ var Combobox = ({
|
|
|
3973
4062
|
}, [open, enableSearch]);
|
|
3974
4063
|
const selectedOption = findOptionByValue(options, value);
|
|
3975
4064
|
const displayValue = selectedOption ? getOptionLabel(selectedOption) : "";
|
|
3976
|
-
const dropdownContent = /* @__PURE__ */
|
|
4065
|
+
const dropdownContent = /* @__PURE__ */ jsx23(
|
|
3977
4066
|
"div",
|
|
3978
4067
|
{
|
|
3979
4068
|
"data-combobox-dropdown": true,
|
|
@@ -3983,20 +4072,17 @@ var Combobox = ({
|
|
|
3983
4072
|
top: dropdownPosition?.top || 0,
|
|
3984
4073
|
left: dropdownPosition?.left || 0,
|
|
3985
4074
|
width: dropdownPosition?.width || 200,
|
|
3986
|
-
zIndex: 9999
|
|
4075
|
+
zIndex: 9999,
|
|
4076
|
+
transformOrigin: "top center"
|
|
3987
4077
|
},
|
|
3988
4078
|
"data-state": open ? "open" : "closed",
|
|
3989
4079
|
role: "listbox",
|
|
3990
4080
|
id: `${resolvedId}-listbox`,
|
|
3991
|
-
className:
|
|
3992
|
-
"z-[9999]",
|
|
3993
|
-
"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
|
|
3994
|
-
"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95"
|
|
3995
|
-
),
|
|
4081
|
+
className: "z-9999",
|
|
3996
4082
|
children: /* @__PURE__ */ jsxs21("div", { className: cn("rounded-md border bg-popover text-popover-foreground shadow-md", "backdrop-blur-sm bg-popover/95 border-border/60"), children: [
|
|
3997
4083
|
enableSearch && /* @__PURE__ */ jsxs21("div", { className: "relative p-3 border-b border-border/50 bg-muted/20", children: [
|
|
3998
|
-
/* @__PURE__ */
|
|
3999
|
-
/* @__PURE__ */
|
|
4084
|
+
/* @__PURE__ */ jsx23(Search2, { className: "absolute left-6 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground transition-colors" }),
|
|
4085
|
+
/* @__PURE__ */ jsx23(
|
|
4000
4086
|
"input",
|
|
4001
4087
|
{
|
|
4002
4088
|
ref: inputRef,
|
|
@@ -4035,9 +4121,9 @@ var Combobox = ({
|
|
|
4035
4121
|
}
|
|
4036
4122
|
)
|
|
4037
4123
|
] }),
|
|
4038
|
-
/* @__PURE__ */
|
|
4039
|
-
/* @__PURE__ */
|
|
4040
|
-
/* @__PURE__ */
|
|
4124
|
+
/* @__PURE__ */ jsx23("div", { className: "max-h-64 overflow-y-auto overscroll-contain", children: /* @__PURE__ */ jsx23("ul", { className: "p-1 space-y-1", children: loading2 ? /* @__PURE__ */ jsx23("li", { className: "px-3 py-8 text-center", children: /* @__PURE__ */ jsxs21("div", { className: "flex flex-col items-center gap-2 animate-in fade-in-0 zoom-in-95 duration-300", children: [
|
|
4125
|
+
/* @__PURE__ */ jsx23(Loader22, { className: "h-6 w-6 animate-spin text-primary" }),
|
|
4126
|
+
/* @__PURE__ */ jsx23("span", { className: "text-sm text-muted-foreground", children: loadingText || "Loading..." })
|
|
4041
4127
|
] }) }) : filteredOptions.length > 0 ? filteredOptions.map((item, index) => {
|
|
4042
4128
|
const itemValue = getOptionValue(item);
|
|
4043
4129
|
const itemLabel = getOptionLabel(item);
|
|
@@ -4054,7 +4140,7 @@ var Combobox = ({
|
|
|
4054
4140
|
"aria-selected": isSelected,
|
|
4055
4141
|
onClick: () => handleSelect(item),
|
|
4056
4142
|
style: {
|
|
4057
|
-
animationDelay: open ? `${index *
|
|
4143
|
+
animationDelay: open ? `${Math.min(index * 20, 200)}ms` : "0ms"
|
|
4058
4144
|
},
|
|
4059
4145
|
className: cn(
|
|
4060
4146
|
"dropdown-item group flex cursor-pointer items-center justify-between rounded-sm px-2.5 py-1.5 text-sm",
|
|
@@ -4066,24 +4152,16 @@ var Combobox = ({
|
|
|
4066
4152
|
isSelected && "bg-accent text-accent-foreground"
|
|
4067
4153
|
),
|
|
4068
4154
|
children: [
|
|
4069
|
-
/* @__PURE__ */
|
|
4070
|
-
isSelected && /* @__PURE__ */
|
|
4155
|
+
/* @__PURE__ */ jsx23("span", { className: "truncate", children: itemLabel }),
|
|
4156
|
+
isSelected && /* @__PURE__ */ jsx23(Check3, { className: "h-4 w-4 text-primary" })
|
|
4071
4157
|
]
|
|
4072
4158
|
},
|
|
4073
4159
|
`${itemValue}-${index}`
|
|
4074
4160
|
);
|
|
4075
|
-
}) : /* @__PURE__ */
|
|
4076
|
-
/* @__PURE__ */
|
|
4077
|
-
/* @__PURE__ */
|
|
4078
|
-
query && /* @__PURE__ */
|
|
4079
|
-
"button",
|
|
4080
|
-
{
|
|
4081
|
-
type: "button",
|
|
4082
|
-
onClick: () => setQuery(""),
|
|
4083
|
-
className: "text-xs text-primary hover:underline",
|
|
4084
|
-
children: "Clear search"
|
|
4085
|
-
}
|
|
4086
|
-
)
|
|
4161
|
+
}) : /* @__PURE__ */ jsx23("li", { className: "px-3 py-8 text-center text-muted-foreground text-sm", children: /* @__PURE__ */ jsxs21("div", { className: "flex flex-col items-center gap-2 animate-in fade-in-0 zoom-in-95 duration-300", children: [
|
|
4162
|
+
/* @__PURE__ */ jsx23(SearchX, { className: "h-8 w-8 opacity-40 text-muted-foreground" }),
|
|
4163
|
+
/* @__PURE__ */ jsx23("span", { className: "text-sm", children: emptyText }),
|
|
4164
|
+
query && /* @__PURE__ */ jsx23("button", { type: "button", onClick: () => setQuery(""), className: "text-xs text-primary hover:underline", children: "Clear search" })
|
|
4087
4165
|
] }) }) }) })
|
|
4088
4166
|
] })
|
|
4089
4167
|
}
|
|
@@ -4098,7 +4176,7 @@ var Combobox = ({
|
|
|
4098
4176
|
const radiusClass = size === "sm" ? "rounded-md" : "rounded-lg";
|
|
4099
4177
|
const verticalGap = size === "sm" ? "space-y-1.5" : "space-y-2";
|
|
4100
4178
|
return /* @__PURE__ */ jsxs21("div", { className: cn("w-full group", verticalGap), children: [
|
|
4101
|
-
label && /* @__PURE__ */
|
|
4179
|
+
label && /* @__PURE__ */ jsx23("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ jsxs21(
|
|
4102
4180
|
"label",
|
|
4103
4181
|
{
|
|
4104
4182
|
id: labelId,
|
|
@@ -4110,7 +4188,7 @@ var Combobox = ({
|
|
|
4110
4188
|
),
|
|
4111
4189
|
children: [
|
|
4112
4190
|
label,
|
|
4113
|
-
required && /* @__PURE__ */
|
|
4191
|
+
required && /* @__PURE__ */ jsx23("span", { className: "text-destructive ml-1", children: "*" })
|
|
4114
4192
|
]
|
|
4115
4193
|
}
|
|
4116
4194
|
) }),
|
|
@@ -4144,10 +4222,10 @@ var Combobox = ({
|
|
|
4144
4222
|
className
|
|
4145
4223
|
),
|
|
4146
4224
|
children: [
|
|
4147
|
-
/* @__PURE__ */
|
|
4225
|
+
/* @__PURE__ */ jsx23("span", { className: cn("truncate", !displayValue && "text-muted-foreground", fontBold && "font-bold"), children: displayValue || placeholder }),
|
|
4148
4226
|
/* @__PURE__ */ jsxs21("div", { className: "flex items-center gap-1 ml-2", children: [
|
|
4149
4227
|
allowClear && value && !disabled && // FIX: Use a div instead of a nested button
|
|
4150
|
-
/* @__PURE__ */
|
|
4228
|
+
/* @__PURE__ */ jsx23(
|
|
4151
4229
|
"div",
|
|
4152
4230
|
{
|
|
4153
4231
|
role: "button",
|
|
@@ -4156,18 +4234,10 @@ var Combobox = ({
|
|
|
4156
4234
|
onClick: handleClear,
|
|
4157
4235
|
onKeyDown: (e) => (e.key === "Enter" || e.key === " ") && handleClear(e),
|
|
4158
4236
|
className: "opacity-0 group-hover:opacity-100 transition-opacity p-0.5 rounded hover:bg-destructive/10 text-muted-foreground hover:text-destructive",
|
|
4159
|
-
children: /* @__PURE__ */
|
|
4237
|
+
children: /* @__PURE__ */ jsx23(X7, { className: "h-3 w-3" })
|
|
4160
4238
|
}
|
|
4161
4239
|
),
|
|
4162
|
-
/* @__PURE__ */
|
|
4163
|
-
ChevronDown,
|
|
4164
|
-
{
|
|
4165
|
-
className: cn(
|
|
4166
|
-
"h-4 w-4 text-muted-foreground transition-all duration-200",
|
|
4167
|
-
open && "rotate-180 scale-110 text-primary"
|
|
4168
|
-
)
|
|
4169
|
-
}
|
|
4170
|
-
)
|
|
4240
|
+
/* @__PURE__ */ jsx23(ChevronDown, { className: cn("h-4 w-4 text-muted-foreground transition-all duration-200", open && "rotate-180 scale-110 text-primary") })
|
|
4171
4241
|
] })
|
|
4172
4242
|
]
|
|
4173
4243
|
}
|
|
@@ -4178,7 +4248,7 @@ var Combobox = ({
|
|
|
4178
4248
|
|
|
4179
4249
|
// ../../components/ui/Pagination.tsx
|
|
4180
4250
|
import { useTranslations as useTranslations4 } from "next-intl";
|
|
4181
|
-
import { jsx as
|
|
4251
|
+
import { jsx as jsx24, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
4182
4252
|
var Pagination = ({
|
|
4183
4253
|
page,
|
|
4184
4254
|
totalPages,
|
|
@@ -4262,12 +4332,12 @@ var Pagination = ({
|
|
|
4262
4332
|
};
|
|
4263
4333
|
if (totalPages <= 1) return null;
|
|
4264
4334
|
return /* @__PURE__ */ jsxs22("nav", { className: cn("flex flex-col gap-4", className), "aria-label": labels?.navigationLabel || t("navigationLabel"), children: [
|
|
4265
|
-
showInfo && totalItems && /* @__PURE__ */
|
|
4335
|
+
showInfo && totalItems && /* @__PURE__ */ jsx24("div", { className: cn("text-sm text-muted-foreground", textAlignmentClass), children: labels?.showingResults ? labels.showingResults({ startItem: startItem || 0, endItem: endItem || 0, totalItems }) : t("showingResults", { startItem: startItem || 0, endItem: endItem || 0, totalItems }) }),
|
|
4266
4336
|
/* @__PURE__ */ jsxs22("div", { className: cn("flex items-center justify-between", {
|
|
4267
4337
|
"flex-row-reverse": alignment === "right" || alignment === "center"
|
|
4268
4338
|
}), children: [
|
|
4269
4339
|
/* @__PURE__ */ jsxs22("div", { className: cn("flex items-center gap-1"), children: [
|
|
4270
|
-
showFirstLast && /* @__PURE__ */
|
|
4340
|
+
showFirstLast && /* @__PURE__ */ jsx24(
|
|
4271
4341
|
Button_default,
|
|
4272
4342
|
{
|
|
4273
4343
|
variant: getButtonVariant(false),
|
|
@@ -4281,7 +4351,7 @@ var Pagination = ({
|
|
|
4281
4351
|
"aria-disabled": disabled || page === 1
|
|
4282
4352
|
}
|
|
4283
4353
|
),
|
|
4284
|
-
showPrevNext && /* @__PURE__ */
|
|
4354
|
+
showPrevNext && /* @__PURE__ */ jsx24(
|
|
4285
4355
|
Button_default,
|
|
4286
4356
|
{
|
|
4287
4357
|
variant: getButtonVariant(false),
|
|
@@ -4292,16 +4362,16 @@ var Pagination = ({
|
|
|
4292
4362
|
title: labels?.previousPage || t("previousPage"),
|
|
4293
4363
|
"aria-label": labels?.previousPage || t("previousPage"),
|
|
4294
4364
|
"aria-disabled": disabled || page === 1,
|
|
4295
|
-
children: /* @__PURE__ */
|
|
4365
|
+
children: /* @__PURE__ */ jsx24("span", { className: "hidden sm:inline", children: labels?.previous || t("previous") })
|
|
4296
4366
|
}
|
|
4297
4367
|
),
|
|
4298
4368
|
showPageNumbers && createPageArray().map((p, i) => {
|
|
4299
4369
|
if (p === "...") {
|
|
4300
|
-
return /* @__PURE__ */
|
|
4370
|
+
return /* @__PURE__ */ jsx24(Button_default, { variant: "ghost", size, disabled: true, icon: MoreHorizontal2, className: "cursor-default" }, i);
|
|
4301
4371
|
}
|
|
4302
4372
|
const pageNumber = p;
|
|
4303
4373
|
const isActive = page === pageNumber;
|
|
4304
|
-
return /* @__PURE__ */
|
|
4374
|
+
return /* @__PURE__ */ jsx24(
|
|
4305
4375
|
Button_default,
|
|
4306
4376
|
{
|
|
4307
4377
|
variant: getButtonVariant(isActive),
|
|
@@ -4316,7 +4386,7 @@ var Pagination = ({
|
|
|
4316
4386
|
i
|
|
4317
4387
|
);
|
|
4318
4388
|
}),
|
|
4319
|
-
showPrevNext && /* @__PURE__ */
|
|
4389
|
+
showPrevNext && /* @__PURE__ */ jsx24(
|
|
4320
4390
|
Button_default,
|
|
4321
4391
|
{
|
|
4322
4392
|
variant: getButtonVariant(false),
|
|
@@ -4327,10 +4397,10 @@ var Pagination = ({
|
|
|
4327
4397
|
title: labels?.nextPage || t("nextPage"),
|
|
4328
4398
|
"aria-label": labels?.nextPage || t("nextPage"),
|
|
4329
4399
|
"aria-disabled": disabled || page === totalPages,
|
|
4330
|
-
children: /* @__PURE__ */
|
|
4400
|
+
children: /* @__PURE__ */ jsx24("span", { className: "hidden sm:inline", children: labels?.next || t("next") })
|
|
4331
4401
|
}
|
|
4332
4402
|
),
|
|
4333
|
-
showFirstLast && /* @__PURE__ */
|
|
4403
|
+
showFirstLast && /* @__PURE__ */ jsx24(
|
|
4334
4404
|
Button_default,
|
|
4335
4405
|
{
|
|
4336
4406
|
variant: getButtonVariant(false),
|
|
@@ -4350,7 +4420,7 @@ var Pagination = ({
|
|
|
4350
4420
|
labels?.itemsPerPage || t("itemsPerPage"),
|
|
4351
4421
|
":"
|
|
4352
4422
|
] }),
|
|
4353
|
-
/* @__PURE__ */
|
|
4423
|
+
/* @__PURE__ */ jsx24("div", { className: "w-20", children: /* @__PURE__ */ jsx24(
|
|
4354
4424
|
Combobox,
|
|
4355
4425
|
{
|
|
4356
4426
|
options: pageSizeOptionsStrings,
|
|
@@ -4390,14 +4460,14 @@ var SimplePagination = ({
|
|
|
4390
4460
|
" total items)"
|
|
4391
4461
|
] }),
|
|
4392
4462
|
/* @__PURE__ */ jsxs22("div", { className: "flex items-center justify-between", children: [
|
|
4393
|
-
/* @__PURE__ */
|
|
4463
|
+
/* @__PURE__ */ jsx24(Button_default, { variant, size, icon: ChevronLeft, onClick: () => onChange(Math.max(1, page - 1)), disabled: disabled || page === 1, children: "Previous" }),
|
|
4394
4464
|
/* @__PURE__ */ jsxs22("div", { className: "flex items-center gap-2 text-sm text-muted-foreground", children: [
|
|
4395
|
-
/* @__PURE__ */
|
|
4396
|
-
/* @__PURE__ */
|
|
4397
|
-
/* @__PURE__ */
|
|
4398
|
-
/* @__PURE__ */
|
|
4465
|
+
/* @__PURE__ */ jsx24("span", { children: "Page" }),
|
|
4466
|
+
/* @__PURE__ */ jsx24("span", { className: "font-medium text-foreground", children: page }),
|
|
4467
|
+
/* @__PURE__ */ jsx24("span", { children: "of" }),
|
|
4468
|
+
/* @__PURE__ */ jsx24("span", { className: "font-medium text-foreground", children: totalPages })
|
|
4399
4469
|
] }),
|
|
4400
|
-
/* @__PURE__ */
|
|
4470
|
+
/* @__PURE__ */ jsx24(
|
|
4401
4471
|
Button_default,
|
|
4402
4472
|
{
|
|
4403
4473
|
variant,
|
|
@@ -4421,7 +4491,7 @@ var CompactPagination = ({
|
|
|
4421
4491
|
}) => {
|
|
4422
4492
|
if (totalPages <= 1) return null;
|
|
4423
4493
|
return /* @__PURE__ */ jsxs22("nav", { className: cn("flex items-center gap-1", className), "aria-label": "Compact Pagination", children: [
|
|
4424
|
-
/* @__PURE__ */
|
|
4494
|
+
/* @__PURE__ */ jsx24(
|
|
4425
4495
|
Button_default,
|
|
4426
4496
|
{
|
|
4427
4497
|
variant,
|
|
@@ -4433,7 +4503,7 @@ var CompactPagination = ({
|
|
|
4433
4503
|
"aria-label": "First page"
|
|
4434
4504
|
}
|
|
4435
4505
|
),
|
|
4436
|
-
/* @__PURE__ */
|
|
4506
|
+
/* @__PURE__ */ jsx24(
|
|
4437
4507
|
Button_default,
|
|
4438
4508
|
{
|
|
4439
4509
|
variant,
|
|
@@ -4449,7 +4519,7 @@ var CompactPagination = ({
|
|
|
4449
4519
|
" / ",
|
|
4450
4520
|
totalPages
|
|
4451
4521
|
] }),
|
|
4452
|
-
/* @__PURE__ */
|
|
4522
|
+
/* @__PURE__ */ jsx24(
|
|
4453
4523
|
Button_default,
|
|
4454
4524
|
{
|
|
4455
4525
|
variant,
|
|
@@ -4460,7 +4530,7 @@ var CompactPagination = ({
|
|
|
4460
4530
|
title: "Next page"
|
|
4461
4531
|
}
|
|
4462
4532
|
),
|
|
4463
|
-
/* @__PURE__ */
|
|
4533
|
+
/* @__PURE__ */ jsx24(
|
|
4464
4534
|
Button_default,
|
|
4465
4535
|
{
|
|
4466
4536
|
variant,
|
|
@@ -4476,7 +4546,7 @@ var CompactPagination = ({
|
|
|
4476
4546
|
|
|
4477
4547
|
// ../../components/ui/Section.tsx
|
|
4478
4548
|
import React20 from "react";
|
|
4479
|
-
import { jsx as
|
|
4549
|
+
import { jsx as jsx25 } from "react/jsx-runtime";
|
|
4480
4550
|
var Section = React20.forwardRef(
|
|
4481
4551
|
({
|
|
4482
4552
|
children,
|
|
@@ -4499,7 +4569,7 @@ var Section = React20.forwardRef(
|
|
|
4499
4569
|
lg: "py-12",
|
|
4500
4570
|
xl: "py-16"
|
|
4501
4571
|
};
|
|
4502
|
-
return /* @__PURE__ */
|
|
4572
|
+
return /* @__PURE__ */ jsx25(
|
|
4503
4573
|
"section",
|
|
4504
4574
|
{
|
|
4505
4575
|
ref,
|
|
@@ -4521,9 +4591,9 @@ var Section_default = Section;
|
|
|
4521
4591
|
|
|
4522
4592
|
// ../../components/ui/ScrollArea.tsx
|
|
4523
4593
|
import { forwardRef as forwardRef6 } from "react";
|
|
4524
|
-
import { jsx as
|
|
4594
|
+
import { jsx as jsx26 } from "react/jsx-runtime";
|
|
4525
4595
|
var ScrollArea = forwardRef6(({ className, children, ...props }, ref) => {
|
|
4526
|
-
return /* @__PURE__ */
|
|
4596
|
+
return /* @__PURE__ */ jsx26("div", { ref, className: cn("relative overflow-hidden bg-background", className), ...props, children: /* @__PURE__ */ jsx26("div", { className: cn("h-full w-full overflow-y-auto scroll-area-viewport"), children }) });
|
|
4527
4597
|
});
|
|
4528
4598
|
ScrollArea.displayName = "ScrollArea";
|
|
4529
4599
|
|
|
@@ -4714,7 +4784,7 @@ function formatDateWithDay(date) {
|
|
|
4714
4784
|
}
|
|
4715
4785
|
|
|
4716
4786
|
// ../../components/ui/DatePicker.tsx
|
|
4717
|
-
import { Fragment as Fragment6, jsx as
|
|
4787
|
+
import { Fragment as Fragment6, jsx as jsx27, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
4718
4788
|
var DatePicker = ({
|
|
4719
4789
|
id,
|
|
4720
4790
|
value,
|
|
@@ -4825,7 +4895,7 @@ var DatePicker = ({
|
|
|
4825
4895
|
const firstDayOfMonth = getFirstDayOfMonth(viewDate);
|
|
4826
4896
|
const days = [];
|
|
4827
4897
|
for (let i = 0; i < firstDayOfMonth; i++) {
|
|
4828
|
-
days.push(/* @__PURE__ */
|
|
4898
|
+
days.push(/* @__PURE__ */ jsx27("div", { className: "w-8 h-8" }, `empty-${i}`));
|
|
4829
4899
|
}
|
|
4830
4900
|
for (let day = 1; day <= daysInMonth; day++) {
|
|
4831
4901
|
const date = new Date(viewDate.getFullYear(), viewDate.getMonth(), day);
|
|
@@ -4834,7 +4904,7 @@ var DatePicker = ({
|
|
|
4834
4904
|
const totalDaysFromStart = firstDayOfMonth + day - 1;
|
|
4835
4905
|
const rowIndex = Math.floor(totalDaysFromStart / 7);
|
|
4836
4906
|
days.push(
|
|
4837
|
-
/* @__PURE__ */
|
|
4907
|
+
/* @__PURE__ */ jsx27(
|
|
4838
4908
|
"button",
|
|
4839
4909
|
{
|
|
4840
4910
|
onClick: () => handleDateSelect(date),
|
|
@@ -4856,7 +4926,7 @@ var DatePicker = ({
|
|
|
4856
4926
|
}
|
|
4857
4927
|
return days;
|
|
4858
4928
|
};
|
|
4859
|
-
const datePickerContent = isOpen && dropdownPosition ? /* @__PURE__ */
|
|
4929
|
+
const datePickerContent = isOpen && dropdownPosition ? /* @__PURE__ */ jsx27(
|
|
4860
4930
|
"div",
|
|
4861
4931
|
{
|
|
4862
4932
|
"data-datepicker": true,
|
|
@@ -4886,13 +4956,13 @@ var DatePicker = ({
|
|
|
4886
4956
|
style: { pointerEvents: "auto" },
|
|
4887
4957
|
children: [
|
|
4888
4958
|
/* @__PURE__ */ jsxs23("div", { className: "flex items-center justify-between mb-4", children: [
|
|
4889
|
-
/* @__PURE__ */
|
|
4890
|
-
/* @__PURE__ */
|
|
4891
|
-
/* @__PURE__ */
|
|
4959
|
+
/* @__PURE__ */ jsx27(Button_default, { variant: "ghost", size: "sm", onClick: () => navigateMonth("prev"), className: "p-1 h-auto", children: /* @__PURE__ */ jsx27(ChevronLeft2, { className: "h-4 w-4" }) }),
|
|
4960
|
+
/* @__PURE__ */ jsx27("div", { className: "text-sm font-semibold", children: viewDate.toLocaleDateString("en-US", { month: "long", year: "numeric" }) }),
|
|
4961
|
+
/* @__PURE__ */ jsx27(Button_default, { variant: "ghost", size: "sm", onClick: () => navigateMonth("next"), className: "p-1 h-auto", children: /* @__PURE__ */ jsx27(ChevronRight3, { className: "h-4 w-4" }) })
|
|
4892
4962
|
] }),
|
|
4893
|
-
/* @__PURE__ */
|
|
4894
|
-
/* @__PURE__ */
|
|
4895
|
-
/* @__PURE__ */
|
|
4963
|
+
/* @__PURE__ */ jsx27("div", { className: cn("grid grid-cols-7 gap-1", size === "sm" ? "mb-1" : "mb-2"), children: (weekdayLabels || ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"]).map((day) => /* @__PURE__ */ jsx27("div", { className: cn("text-muted-foreground text-center font-medium", size === "sm" ? "text-[10px] py-0.5" : "text-xs py-1"), children: day }, day)) }),
|
|
4964
|
+
/* @__PURE__ */ jsx27("div", { className: "grid grid-cols-7 gap-1", children: renderCalendar() }),
|
|
4965
|
+
/* @__PURE__ */ jsx27("div", { className: "flex items-center justify-end mt-2", children: /* @__PURE__ */ jsx27(
|
|
4896
4966
|
Button_default,
|
|
4897
4967
|
{
|
|
4898
4968
|
variant: "outline",
|
|
@@ -4917,7 +4987,7 @@ var DatePicker = ({
|
|
|
4917
4987
|
const radiusClass = size === "sm" ? "rounded-md" : "rounded-lg";
|
|
4918
4988
|
const verticalGap = size === "sm" ? "space-y-1.5" : "space-y-2";
|
|
4919
4989
|
return /* @__PURE__ */ jsxs23("div", { className: cn("w-full group", verticalGap), children: [
|
|
4920
|
-
label && /* @__PURE__ */
|
|
4990
|
+
label && /* @__PURE__ */ jsx27("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ jsxs23(
|
|
4921
4991
|
"label",
|
|
4922
4992
|
{
|
|
4923
4993
|
id: labelId,
|
|
@@ -4929,7 +4999,7 @@ var DatePicker = ({
|
|
|
4929
4999
|
),
|
|
4930
5000
|
children: [
|
|
4931
5001
|
label,
|
|
4932
|
-
required && /* @__PURE__ */
|
|
5002
|
+
required && /* @__PURE__ */ jsx27("span", { className: "text-destructive ml-1", children: "*" })
|
|
4933
5003
|
]
|
|
4934
5004
|
}
|
|
4935
5005
|
) }),
|
|
@@ -4961,8 +5031,8 @@ var DatePicker = ({
|
|
|
4961
5031
|
className
|
|
4962
5032
|
),
|
|
4963
5033
|
children: [
|
|
4964
|
-
/* @__PURE__ */
|
|
4965
|
-
value && /* @__PURE__ */
|
|
5034
|
+
/* @__PURE__ */ jsx27("span", { className: cn("truncate", !value && "text-muted-foreground"), children: value ? formatDateDisplay(value) : placeholder || t("placeholder") }),
|
|
5035
|
+
value && /* @__PURE__ */ jsx27(
|
|
4966
5036
|
"span",
|
|
4967
5037
|
{
|
|
4968
5038
|
role: "button",
|
|
@@ -4984,10 +5054,10 @@ var DatePicker = ({
|
|
|
4984
5054
|
},
|
|
4985
5055
|
className: "absolute right-8 inline-flex items-center justify-center rounded-sm text-muted-foreground hover:text-foreground hover:bg-accent/50 transition-colors cursor-pointer",
|
|
4986
5056
|
style: { width: 20, height: 20 },
|
|
4987
|
-
children: /* @__PURE__ */
|
|
5057
|
+
children: /* @__PURE__ */ jsx27(XIcon, { className: "h-3.5 w-3.5" })
|
|
4988
5058
|
}
|
|
4989
5059
|
),
|
|
4990
|
-
/* @__PURE__ */
|
|
5060
|
+
/* @__PURE__ */ jsx27(Calendar, { className: "h-4 w-4 text-muted-foreground ml-2" })
|
|
4991
5061
|
]
|
|
4992
5062
|
}
|
|
4993
5063
|
),
|
|
@@ -5072,7 +5142,7 @@ var DateRangePicker = ({ startDate, endDate, onChange, placeholder = "Select dat
|
|
|
5072
5142
|
const nodes = [];
|
|
5073
5143
|
const daysInMonth = getDaysInMonth(viewDate);
|
|
5074
5144
|
const firstDay = getFirstDayOfMonth(viewDate);
|
|
5075
|
-
for (let i = 0; i < firstDay; i++) nodes.push(/* @__PURE__ */
|
|
5145
|
+
for (let i = 0; i < firstDay; i++) nodes.push(/* @__PURE__ */ jsx27("div", { className: "w-8 h-8" }, `e-${i}`));
|
|
5076
5146
|
for (let d = 1; d <= daysInMonth; d++) {
|
|
5077
5147
|
const date = new Date(viewDate.getFullYear(), viewDate.getMonth(), d);
|
|
5078
5148
|
const isSelectedStart = isSameDay2(date, tempStart);
|
|
@@ -5097,7 +5167,7 @@ var DateRangePicker = ({ startDate, endDate, onChange, placeholder = "Select dat
|
|
|
5097
5167
|
}
|
|
5098
5168
|
}
|
|
5099
5169
|
nodes.push(
|
|
5100
|
-
/* @__PURE__ */
|
|
5170
|
+
/* @__PURE__ */ jsx27(
|
|
5101
5171
|
"button",
|
|
5102
5172
|
{
|
|
5103
5173
|
onClick: () => handleSelect(date),
|
|
@@ -5127,7 +5197,7 @@ var DateRangePicker = ({ startDate, endDate, onChange, placeholder = "Select dat
|
|
|
5127
5197
|
}
|
|
5128
5198
|
return nodes;
|
|
5129
5199
|
};
|
|
5130
|
-
const panel = isOpen && dropdownPosition ? /* @__PURE__ */
|
|
5200
|
+
const panel = isOpen && dropdownPosition ? /* @__PURE__ */ jsx27(
|
|
5131
5201
|
"div",
|
|
5132
5202
|
{
|
|
5133
5203
|
style: { position: "absolute", top: dropdownPosition.top, left: dropdownPosition.left, width: dropdownPosition.width || 256, zIndex: 9999 },
|
|
@@ -5144,30 +5214,30 @@ var DateRangePicker = ({ startDate, endDate, onChange, placeholder = "Select dat
|
|
|
5144
5214
|
className: cn("rounded-md border bg-popover text-popover-foreground shadow-md", "backdrop-blur-sm bg-popover/95 border-border/60 p-4 w-64"),
|
|
5145
5215
|
children: [
|
|
5146
5216
|
/* @__PURE__ */ jsxs23("div", { className: "flex items-center justify-between mb-3", children: [
|
|
5147
|
-
/* @__PURE__ */
|
|
5217
|
+
/* @__PURE__ */ jsx27(
|
|
5148
5218
|
Button_default,
|
|
5149
5219
|
{
|
|
5150
5220
|
variant: "ghost",
|
|
5151
5221
|
size: "sm",
|
|
5152
5222
|
onClick: () => setViewDate(new Date(viewDate.getFullYear(), viewDate.getMonth() - 1, 1)),
|
|
5153
5223
|
className: "p-1 h-auto",
|
|
5154
|
-
children: /* @__PURE__ */
|
|
5224
|
+
children: /* @__PURE__ */ jsx27(ChevronLeft2, { className: "h-4 w-4" })
|
|
5155
5225
|
}
|
|
5156
5226
|
),
|
|
5157
|
-
/* @__PURE__ */
|
|
5158
|
-
/* @__PURE__ */
|
|
5227
|
+
/* @__PURE__ */ jsx27("div", { className: "text-sm font-semibold", children: viewDate.toLocaleDateString("en-US", { month: "long", year: "numeric" }) }),
|
|
5228
|
+
/* @__PURE__ */ jsx27(
|
|
5159
5229
|
Button_default,
|
|
5160
5230
|
{
|
|
5161
5231
|
variant: "ghost",
|
|
5162
5232
|
size: "sm",
|
|
5163
5233
|
onClick: () => setViewDate(new Date(viewDate.getFullYear(), viewDate.getMonth() + 1, 1)),
|
|
5164
5234
|
className: "p-1 h-auto",
|
|
5165
|
-
children: /* @__PURE__ */
|
|
5235
|
+
children: /* @__PURE__ */ jsx27(ChevronRight3, { className: "h-4 w-4" })
|
|
5166
5236
|
}
|
|
5167
5237
|
)
|
|
5168
5238
|
] }),
|
|
5169
|
-
/* @__PURE__ */
|
|
5170
|
-
/* @__PURE__ */
|
|
5239
|
+
/* @__PURE__ */ jsx27("div", { className: "grid grid-cols-7 gap-1 mb-2", children: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"].map((d) => /* @__PURE__ */ jsx27("div", { className: "text-xs text-muted-foreground text-center py-1 font-medium", children: d }, d)) }),
|
|
5240
|
+
/* @__PURE__ */ jsx27("div", { className: "grid grid-cols-7", children: renderGrid() })
|
|
5171
5241
|
]
|
|
5172
5242
|
}
|
|
5173
5243
|
)
|
|
@@ -5195,8 +5265,8 @@ var DateRangePicker = ({ startDate, endDate, onChange, placeholder = "Select dat
|
|
|
5195
5265
|
className
|
|
5196
5266
|
),
|
|
5197
5267
|
children: [
|
|
5198
|
-
/* @__PURE__ */
|
|
5199
|
-
/* @__PURE__ */
|
|
5268
|
+
/* @__PURE__ */ jsx27("span", { className: cn("truncate", !tempStart && !tempEnd && "text-muted-foreground"), children: label }),
|
|
5269
|
+
/* @__PURE__ */ jsx27(Calendar, { className: "h-4 w-4 text-muted-foreground ml-2" })
|
|
5200
5270
|
]
|
|
5201
5271
|
}
|
|
5202
5272
|
),
|
|
@@ -5207,7 +5277,7 @@ var DateRangePicker = ({ startDate, endDate, onChange, placeholder = "Select dat
|
|
|
5207
5277
|
// ../../components/ui/TimePicker.tsx
|
|
5208
5278
|
import * as React22 from "react";
|
|
5209
5279
|
import { Clock as Clock2, X as X8, Check as Check4 } from "lucide-react";
|
|
5210
|
-
import { Fragment as Fragment7, jsx as
|
|
5280
|
+
import { Fragment as Fragment7, jsx as jsx28, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
5211
5281
|
var pad = (n) => n.toString().padStart(2, "0");
|
|
5212
5282
|
function parseTime(input, fmt = "24", includeSeconds) {
|
|
5213
5283
|
if (!input) return null;
|
|
@@ -5475,16 +5545,16 @@ function TimePicker({
|
|
|
5475
5545
|
),
|
|
5476
5546
|
children: [
|
|
5477
5547
|
/* @__PURE__ */ jsxs24("div", { className: "flex items-center gap-2", children: [
|
|
5478
|
-
/* @__PURE__ */
|
|
5479
|
-
/* @__PURE__ */
|
|
5548
|
+
/* @__PURE__ */ jsx28(Clock2, { className: cn(sz.icon, error ? "text-destructive" : success ? "text-green-500" : "text-muted-foreground") }),
|
|
5549
|
+
/* @__PURE__ */ jsx28("span", { className: cn("truncate", !value && !defaultValue && "text-muted-foreground"), children: value || defaultValue ? display : placeholder })
|
|
5480
5550
|
] }),
|
|
5481
|
-
/* @__PURE__ */
|
|
5551
|
+
/* @__PURE__ */ jsx28("span", { className: cn("ml-2 transition-transform duration-200", open && "rotate-180"), children: /* @__PURE__ */ jsx28("svg", { className: sz.icon, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ jsx28("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" }) }) })
|
|
5482
5552
|
]
|
|
5483
5553
|
}
|
|
5484
5554
|
);
|
|
5485
5555
|
const contentWidth = variant === "compact" ? 240 : variant === "inline" ? 320 : includeSeconds ? 340 : 300;
|
|
5486
5556
|
const timePickerContent = /* @__PURE__ */ jsxs24("div", { className: "space-y-3", children: [
|
|
5487
|
-
allowManualInput && /* @__PURE__ */
|
|
5557
|
+
allowManualInput && /* @__PURE__ */ jsx28("div", { children: /* @__PURE__ */ jsx28(
|
|
5488
5558
|
Input_default,
|
|
5489
5559
|
{
|
|
5490
5560
|
placeholder: format === "12" ? "02:30 PM" : "14:30",
|
|
@@ -5494,7 +5564,7 @@ function TimePicker({
|
|
|
5494
5564
|
variant: "outlined"
|
|
5495
5565
|
}
|
|
5496
5566
|
) }),
|
|
5497
|
-
showPresets && /* @__PURE__ */
|
|
5567
|
+
showPresets && /* @__PURE__ */ jsx28("div", { className: "grid grid-cols-2 gap-2", children: Object.keys(PRESETS).map((preset) => /* @__PURE__ */ jsx28(
|
|
5498
5568
|
"button",
|
|
5499
5569
|
{
|
|
5500
5570
|
type: "button",
|
|
@@ -5508,7 +5578,7 @@ function TimePicker({
|
|
|
5508
5578
|
},
|
|
5509
5579
|
preset
|
|
5510
5580
|
)) }),
|
|
5511
|
-
customPresets && customPresets.length > 0 && /* @__PURE__ */
|
|
5581
|
+
customPresets && customPresets.length > 0 && /* @__PURE__ */ jsx28("div", { className: "grid grid-cols-2 gap-2", children: customPresets.map((preset, idx) => /* @__PURE__ */ jsx28(
|
|
5512
5582
|
"button",
|
|
5513
5583
|
{
|
|
5514
5584
|
type: "button",
|
|
@@ -5524,8 +5594,8 @@ function TimePicker({
|
|
|
5524
5594
|
)) }),
|
|
5525
5595
|
/* @__PURE__ */ jsxs24("div", { className: "flex gap-3", children: [
|
|
5526
5596
|
/* @__PURE__ */ jsxs24("div", { className: "flex-1 min-w-[70px]", children: [
|
|
5527
|
-
/* @__PURE__ */
|
|
5528
|
-
/* @__PURE__ */
|
|
5597
|
+
/* @__PURE__ */ jsx28("div", { className: "text-xs font-semibold text-muted-foreground mb-2 text-center", children: "Hour" }),
|
|
5598
|
+
/* @__PURE__ */ jsx28(
|
|
5529
5599
|
"div",
|
|
5530
5600
|
{
|
|
5531
5601
|
ref: hourScrollRef,
|
|
@@ -5537,7 +5607,7 @@ function TimePicker({
|
|
|
5537
5607
|
onFocus: () => setFocusedColumn("hour"),
|
|
5538
5608
|
children: hours.map((h) => {
|
|
5539
5609
|
const isSelected = format === "24" && parts.h === h || format === "12" && (parts.h % 12 || 12) === (h % 12 || 12);
|
|
5540
|
-
return /* @__PURE__ */
|
|
5610
|
+
return /* @__PURE__ */ jsx28(
|
|
5541
5611
|
"button",
|
|
5542
5612
|
{
|
|
5543
5613
|
type: "button",
|
|
@@ -5564,10 +5634,10 @@ function TimePicker({
|
|
|
5564
5634
|
}
|
|
5565
5635
|
)
|
|
5566
5636
|
] }),
|
|
5567
|
-
/* @__PURE__ */
|
|
5637
|
+
/* @__PURE__ */ jsx28("div", { className: "w-px bg-border/50 self-stretch my-8" }),
|
|
5568
5638
|
/* @__PURE__ */ jsxs24("div", { className: "flex-1 min-w-[70px]", children: [
|
|
5569
|
-
/* @__PURE__ */
|
|
5570
|
-
/* @__PURE__ */
|
|
5639
|
+
/* @__PURE__ */ jsx28("div", { className: "text-xs font-semibold text-muted-foreground mb-2 text-center", children: "Min" }),
|
|
5640
|
+
/* @__PURE__ */ jsx28(
|
|
5571
5641
|
"div",
|
|
5572
5642
|
{
|
|
5573
5643
|
ref: minuteScrollRef,
|
|
@@ -5579,7 +5649,7 @@ function TimePicker({
|
|
|
5579
5649
|
onFocus: () => setFocusedColumn("minute"),
|
|
5580
5650
|
children: minutes.map((m) => {
|
|
5581
5651
|
const isSelected = parts.m === m;
|
|
5582
|
-
return /* @__PURE__ */
|
|
5652
|
+
return /* @__PURE__ */ jsx28(
|
|
5583
5653
|
"button",
|
|
5584
5654
|
{
|
|
5585
5655
|
type: "button",
|
|
@@ -5605,11 +5675,11 @@ function TimePicker({
|
|
|
5605
5675
|
}
|
|
5606
5676
|
)
|
|
5607
5677
|
] }),
|
|
5608
|
-
/* @__PURE__ */
|
|
5678
|
+
/* @__PURE__ */ jsx28("div", { className: "w-px bg-border/50 self-stretch my-8" }),
|
|
5609
5679
|
includeSeconds && /* @__PURE__ */ jsxs24(Fragment7, { children: [
|
|
5610
5680
|
/* @__PURE__ */ jsxs24("div", { className: "flex-1 min-w-[70px]", children: [
|
|
5611
|
-
/* @__PURE__ */
|
|
5612
|
-
/* @__PURE__ */
|
|
5681
|
+
/* @__PURE__ */ jsx28("div", { className: "text-xs font-semibold text-muted-foreground mb-2 text-center", children: "Sec" }),
|
|
5682
|
+
/* @__PURE__ */ jsx28(
|
|
5613
5683
|
"div",
|
|
5614
5684
|
{
|
|
5615
5685
|
ref: secondScrollRef,
|
|
@@ -5621,7 +5691,7 @@ function TimePicker({
|
|
|
5621
5691
|
onFocus: () => setFocusedColumn("second"),
|
|
5622
5692
|
children: seconds.map((s) => {
|
|
5623
5693
|
const isSelected = parts.s === s;
|
|
5624
|
-
return /* @__PURE__ */
|
|
5694
|
+
return /* @__PURE__ */ jsx28(
|
|
5625
5695
|
"button",
|
|
5626
5696
|
{
|
|
5627
5697
|
type: "button",
|
|
@@ -5647,11 +5717,11 @@ function TimePicker({
|
|
|
5647
5717
|
}
|
|
5648
5718
|
)
|
|
5649
5719
|
] }),
|
|
5650
|
-
/* @__PURE__ */
|
|
5720
|
+
/* @__PURE__ */ jsx28("div", { className: "w-px bg-border/50 self-stretch my-8" })
|
|
5651
5721
|
] }),
|
|
5652
5722
|
format === "12" && /* @__PURE__ */ jsxs24("div", { className: "w-20", children: [
|
|
5653
|
-
/* @__PURE__ */
|
|
5654
|
-
/* @__PURE__ */
|
|
5723
|
+
/* @__PURE__ */ jsx28("div", { className: "text-xs font-semibold text-muted-foreground mb-2 text-center", children: "Period" }),
|
|
5724
|
+
/* @__PURE__ */ jsx28(
|
|
5655
5725
|
"div",
|
|
5656
5726
|
{
|
|
5657
5727
|
className: "flex flex-col gap-2",
|
|
@@ -5662,7 +5732,7 @@ function TimePicker({
|
|
|
5662
5732
|
onFocus: () => setFocusedColumn("period"),
|
|
5663
5733
|
children: ["AM", "PM"].map((p) => {
|
|
5664
5734
|
const isSelected = parts.p === p;
|
|
5665
|
-
return /* @__PURE__ */
|
|
5735
|
+
return /* @__PURE__ */ jsx28(
|
|
5666
5736
|
"button",
|
|
5667
5737
|
{
|
|
5668
5738
|
type: "button",
|
|
@@ -5708,12 +5778,12 @@ function TimePicker({
|
|
|
5708
5778
|
},
|
|
5709
5779
|
"aria-label": "Set current time",
|
|
5710
5780
|
children: [
|
|
5711
|
-
/* @__PURE__ */
|
|
5781
|
+
/* @__PURE__ */ jsx28(Clock2, { className: "w-3.5 h-3.5" }),
|
|
5712
5782
|
"Now"
|
|
5713
5783
|
]
|
|
5714
5784
|
}
|
|
5715
5785
|
),
|
|
5716
|
-
/* @__PURE__ */
|
|
5786
|
+
/* @__PURE__ */ jsx28("div", { className: "flex-1" }),
|
|
5717
5787
|
clearable && /* @__PURE__ */ jsxs24(
|
|
5718
5788
|
"button",
|
|
5719
5789
|
{
|
|
@@ -5729,7 +5799,7 @@ function TimePicker({
|
|
|
5729
5799
|
},
|
|
5730
5800
|
"aria-label": "Clear selected time",
|
|
5731
5801
|
children: [
|
|
5732
|
-
/* @__PURE__ */
|
|
5802
|
+
/* @__PURE__ */ jsx28(X8, { className: "w-3.5 h-3.5" }),
|
|
5733
5803
|
"Clear"
|
|
5734
5804
|
]
|
|
5735
5805
|
}
|
|
@@ -5738,26 +5808,26 @@ function TimePicker({
|
|
|
5738
5808
|
] });
|
|
5739
5809
|
if (variant === "inline") {
|
|
5740
5810
|
return /* @__PURE__ */ jsxs24("div", { className: "w-full", ...rest, children: [
|
|
5741
|
-
label && /* @__PURE__ */
|
|
5811
|
+
label && /* @__PURE__ */ jsx28("div", { className: "flex items-center justify-between mb-2", children: /* @__PURE__ */ jsxs24("label", { className: cn(sz.label, "font-medium", disabled ? "text-muted-foreground" : "text-foreground"), children: [
|
|
5742
5812
|
label,
|
|
5743
|
-
required && /* @__PURE__ */
|
|
5813
|
+
required && /* @__PURE__ */ jsx28("span", { className: "text-destructive ml-1", children: "*" })
|
|
5744
5814
|
] }) }),
|
|
5745
|
-
/* @__PURE__ */
|
|
5815
|
+
/* @__PURE__ */ jsx28("div", { className: cn("p-3 rounded-lg border border-border bg-card shadow-sm", className), children: timePickerContent })
|
|
5746
5816
|
] });
|
|
5747
5817
|
}
|
|
5748
5818
|
return /* @__PURE__ */ jsxs24("div", { className: "w-full", ...rest, children: [
|
|
5749
|
-
label && /* @__PURE__ */
|
|
5819
|
+
label && /* @__PURE__ */ jsx28("div", { className: "flex items-center justify-between mb-1.5", children: /* @__PURE__ */ jsxs24(
|
|
5750
5820
|
"label",
|
|
5751
5821
|
{
|
|
5752
5822
|
className: cn(sz.label, "font-medium", disabled ? "text-muted-foreground" : "text-foreground", "cursor-pointer"),
|
|
5753
5823
|
onClick: () => !disabled && handleOpenChange(true),
|
|
5754
5824
|
children: [
|
|
5755
5825
|
label,
|
|
5756
|
-
required && /* @__PURE__ */
|
|
5826
|
+
required && /* @__PURE__ */ jsx28("span", { className: "text-destructive ml-1", children: "*" })
|
|
5757
5827
|
]
|
|
5758
5828
|
}
|
|
5759
5829
|
) }),
|
|
5760
|
-
/* @__PURE__ */
|
|
5830
|
+
/* @__PURE__ */ jsx28(
|
|
5761
5831
|
Popover,
|
|
5762
5832
|
{
|
|
5763
5833
|
trigger,
|
|
@@ -5778,14 +5848,14 @@ function TimePicker({
|
|
|
5778
5848
|
),
|
|
5779
5849
|
(error || success || helperText) && /* @__PURE__ */ jsxs24("div", { className: cn("mt-1.5 flex items-start gap-1.5", sz.label), children: [
|
|
5780
5850
|
error && /* @__PURE__ */ jsxs24("div", { className: "flex items-center gap-1.5 text-destructive", children: [
|
|
5781
|
-
/* @__PURE__ */
|
|
5782
|
-
/* @__PURE__ */
|
|
5851
|
+
/* @__PURE__ */ jsx28(X8, { className: "w-3.5 h-3.5 flex-shrink-0" }),
|
|
5852
|
+
/* @__PURE__ */ jsx28("span", { children: error })
|
|
5783
5853
|
] }),
|
|
5784
5854
|
success && !error && /* @__PURE__ */ jsxs24("div", { className: "flex items-center gap-1.5 text-green-600", children: [
|
|
5785
|
-
/* @__PURE__ */
|
|
5786
|
-
/* @__PURE__ */
|
|
5855
|
+
/* @__PURE__ */ jsx28(Check4, { className: "w-3.5 h-3.5 flex-shrink-0" }),
|
|
5856
|
+
/* @__PURE__ */ jsx28("span", { children: "Valid time selected" })
|
|
5787
5857
|
] }),
|
|
5788
|
-
helperText && !error && !success && /* @__PURE__ */
|
|
5858
|
+
helperText && !error && !success && /* @__PURE__ */ jsx28("span", { className: "text-muted-foreground", children: helperText })
|
|
5789
5859
|
] })
|
|
5790
5860
|
] });
|
|
5791
5861
|
}
|
|
@@ -5793,7 +5863,7 @@ function TimePicker({
|
|
|
5793
5863
|
// ../../components/ui/Calendar.tsx
|
|
5794
5864
|
import * as React23 from "react";
|
|
5795
5865
|
import { ChevronLeft as ChevronLeft3, ChevronRight as ChevronRight4 } from "lucide-react";
|
|
5796
|
-
import { Fragment as Fragment9, jsx as
|
|
5866
|
+
import { Fragment as Fragment9, jsx as jsx29, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
5797
5867
|
function startOfMonth(d) {
|
|
5798
5868
|
return new Date(d.getFullYear(), d.getMonth(), 1);
|
|
5799
5869
|
}
|
|
@@ -5975,9 +6045,9 @@ function Calendar2({
|
|
|
5975
6045
|
const monthDays = getMonthGrid(monthDate, weekStartsOn);
|
|
5976
6046
|
const monthLabel = labels?.month ? labels.month(monthDate) : monthDate.toLocaleDateString("en-US", { month: "long", year: "numeric" });
|
|
5977
6047
|
return /* @__PURE__ */ jsxs25("div", { children: [
|
|
5978
|
-
months > 1 && /* @__PURE__ */
|
|
5979
|
-
showWeekdays && /* @__PURE__ */
|
|
5980
|
-
/* @__PURE__ */
|
|
6048
|
+
months > 1 && /* @__PURE__ */ jsx29("div", { className: "flex items-center justify-center mb-2 text-sm font-semibold", children: monthLabel }),
|
|
6049
|
+
showWeekdays && /* @__PURE__ */ jsx29("div", { className: cn("grid grid-cols-7", sz.grid, "mb-1 text-center text-muted-foreground font-medium"), children: weekdays.map((w) => /* @__PURE__ */ jsx29("div", { className: cn(sz.head), children: w }, `${monthLabel}-${w}`)) }),
|
|
6050
|
+
/* @__PURE__ */ jsx29("div", { className: cn("grid grid-cols-7", sz.grid), children: monthDays.map((d, idx) => {
|
|
5981
6051
|
const inMonth = d.getMonth() === monthDate.getMonth();
|
|
5982
6052
|
const isToday2 = isSameDay(d, today);
|
|
5983
6053
|
const selectedDay = isSelected(d);
|
|
@@ -6001,7 +6071,7 @@ function Calendar2({
|
|
|
6001
6071
|
title: d.toDateString(),
|
|
6002
6072
|
children: [
|
|
6003
6073
|
d.getDate(),
|
|
6004
|
-
dayEvents.length > 0 && /* @__PURE__ */
|
|
6074
|
+
dayEvents.length > 0 && /* @__PURE__ */ jsx29("span", { className: "absolute -bottom-1 inline-flex gap-0.5", children: dayEvents.slice(0, 3).map((e, i) => /* @__PURE__ */ jsx29("span", { className: "h-1.5 w-1.5 rounded-full", style: { backgroundColor: e.color || "hsl(var(--primary))" } }, i)) })
|
|
6005
6075
|
]
|
|
6006
6076
|
},
|
|
6007
6077
|
`${monthLabel}-${idx}`
|
|
@@ -6033,13 +6103,13 @@ function Calendar2({
|
|
|
6033
6103
|
}, [display, view, weekStartsOn, maxBound]);
|
|
6034
6104
|
return /* @__PURE__ */ jsxs25("div", { className: cn("w-full", className), ...rest, children: [
|
|
6035
6105
|
showHeader && /* @__PURE__ */ jsxs25("div", { className: "flex items-center justify-between mb-2", children: [
|
|
6036
|
-
/* @__PURE__ */
|
|
6037
|
-
/* @__PURE__ */
|
|
6038
|
-
/* @__PURE__ */
|
|
6106
|
+
/* @__PURE__ */ jsx29("button", { onClick: () => goByView(-1), disabled: prevDisabled, className: cn("p-1 rounded-md hover:bg-accent", prevDisabled && "opacity-40 cursor-not-allowed hover:bg-transparent"), "aria-label": labels?.prev || (display === "week" ? "Previous week" : "Previous month"), children: /* @__PURE__ */ jsx29(ChevronLeft3, { className: "h-4 w-4" }) }),
|
|
6107
|
+
/* @__PURE__ */ jsx29("div", { className: "text-sm font-semibold", children: display === "week" ? `${labels?.month ? labels.month(weekDays[0]) : weekDays[0].toLocaleDateString("en-US", { month: "short" })} ${weekDays[0].getDate()} \u2013 ${labels?.month ? labels.month(weekDays[6]) : weekDays[6].toLocaleDateString("en-US", { month: "short" })} ${weekDays[6].getDate()}` : labels?.month ? labels.month(view) : view.toLocaleDateString("en-US", { month: "long", year: "numeric" }) }),
|
|
6108
|
+
/* @__PURE__ */ jsx29("button", { onClick: () => goByView(1), disabled: nextDisabled, className: cn("p-1 rounded-md hover:bg-accent", nextDisabled && "opacity-40 cursor-not-allowed hover:bg-transparent"), "aria-label": labels?.next || (display === "week" ? "Next week" : "Next month"), children: /* @__PURE__ */ jsx29(ChevronRight4, { className: "h-4 w-4" }) })
|
|
6039
6109
|
] }),
|
|
6040
6110
|
display === "week" ? /* @__PURE__ */ jsxs25(Fragment9, { children: [
|
|
6041
|
-
showWeekdays && /* @__PURE__ */
|
|
6042
|
-
/* @__PURE__ */
|
|
6111
|
+
showWeekdays && /* @__PURE__ */ jsx29("div", { className: cn("grid grid-cols-7", sz.grid, "mb-1 text-center text-muted-foreground font-medium"), children: weekdays.map((w) => /* @__PURE__ */ jsx29("div", { className: cn(sz.head), children: w }, `w-${w}`)) }),
|
|
6112
|
+
/* @__PURE__ */ jsx29("div", { className: cn("grid grid-cols-7", sz.grid), children: weekDays.map((d, idx) => {
|
|
6043
6113
|
const inMonth = true;
|
|
6044
6114
|
const isToday2 = isSameDay(d, today);
|
|
6045
6115
|
const selectedDay = isSelected(d);
|
|
@@ -6062,13 +6132,13 @@ function Calendar2({
|
|
|
6062
6132
|
title: d.toDateString(),
|
|
6063
6133
|
children: [
|
|
6064
6134
|
d.getDate(),
|
|
6065
|
-
dayEvents.length > 0 && /* @__PURE__ */
|
|
6135
|
+
dayEvents.length > 0 && /* @__PURE__ */ jsx29("span", { className: "absolute -bottom-1 inline-flex gap-0.5", children: dayEvents.slice(0, 3).map((e, i) => /* @__PURE__ */ jsx29("span", { className: "h-1.5 w-1.5 rounded-full", style: { backgroundColor: e.color || "hsl(var(--primary))" } }, i)) })
|
|
6066
6136
|
]
|
|
6067
6137
|
},
|
|
6068
6138
|
`wd-${idx}`
|
|
6069
6139
|
);
|
|
6070
6140
|
}) })
|
|
6071
|
-
] }) : /* @__PURE__ */
|
|
6141
|
+
] }) : /* @__PURE__ */ jsx29("div", { className: cn(months > 1 ? "grid md:grid-cols-2 lg:grid-cols-3 gap-4" : ""), children: Array.from({ length: Math.max(1, months) }, (_, i) => /* @__PURE__ */ jsx29(React23.Fragment, { children: renderMonth(addMonths(view, i)) }, `cal-month-${view.getFullYear()}-${view.getMonth()}-${i}`)) })
|
|
6072
6142
|
] });
|
|
6073
6143
|
}
|
|
6074
6144
|
|
|
@@ -6077,7 +6147,7 @@ import * as React24 from "react";
|
|
|
6077
6147
|
import { useId as useId4 } from "react";
|
|
6078
6148
|
import { createPortal as createPortal8 } from "react-dom";
|
|
6079
6149
|
import { ChevronDown as ChevronDown2, Search as Search3, Check as Check5, SearchX as SearchX2, Loader2 as Loader23 } from "lucide-react";
|
|
6080
|
-
import { jsx as
|
|
6150
|
+
import { jsx as jsx30, jsxs as jsxs26 } from "react/jsx-runtime";
|
|
6081
6151
|
var MultiCombobox = ({
|
|
6082
6152
|
id,
|
|
6083
6153
|
options,
|
|
@@ -6223,7 +6293,7 @@ var MultiCombobox = ({
|
|
|
6223
6293
|
const labelId = label ? `${resolvedId}-label` : void 0;
|
|
6224
6294
|
const labelSize = size === "sm" ? "text-xs" : size === "lg" ? "text-base" : "text-sm";
|
|
6225
6295
|
return /* @__PURE__ */ jsxs26("div", { className: cn("w-full space-y-2 group", className), children: [
|
|
6226
|
-
title && /* @__PURE__ */
|
|
6296
|
+
title && /* @__PURE__ */ jsx30("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ jsxs26(
|
|
6227
6297
|
"label",
|
|
6228
6298
|
{
|
|
6229
6299
|
className: cn(
|
|
@@ -6233,7 +6303,7 @@ var MultiCombobox = ({
|
|
|
6233
6303
|
),
|
|
6234
6304
|
children: [
|
|
6235
6305
|
title,
|
|
6236
|
-
required && /* @__PURE__ */
|
|
6306
|
+
required && /* @__PURE__ */ jsx30("span", { className: "text-destructive ml-1", children: "*" })
|
|
6237
6307
|
]
|
|
6238
6308
|
}
|
|
6239
6309
|
) }),
|
|
@@ -6249,11 +6319,11 @@ var MultiCombobox = ({
|
|
|
6249
6319
|
),
|
|
6250
6320
|
children: [
|
|
6251
6321
|
label,
|
|
6252
|
-
required && /* @__PURE__ */
|
|
6322
|
+
required && /* @__PURE__ */ jsx30("span", { className: "text-destructive ml-1", children: "*" })
|
|
6253
6323
|
]
|
|
6254
6324
|
}
|
|
6255
6325
|
),
|
|
6256
|
-
/* @__PURE__ */
|
|
6326
|
+
/* @__PURE__ */ jsx30("div", { className: "relative w-full" }),
|
|
6257
6327
|
/* @__PURE__ */ jsxs26(
|
|
6258
6328
|
"button",
|
|
6259
6329
|
{
|
|
@@ -6277,11 +6347,11 @@ var MultiCombobox = ({
|
|
|
6277
6347
|
"disabled:cursor-not-allowed disabled:opacity-50"
|
|
6278
6348
|
),
|
|
6279
6349
|
children: [
|
|
6280
|
-
/* @__PURE__ */
|
|
6350
|
+
/* @__PURE__ */ jsx30("div", { className: "flex items-center gap-1 flex-wrap min-h-[1.5rem] flex-1", children: value.length > 0 ? showTags ? value.map((itemValue) => {
|
|
6281
6351
|
const option = normalizedOptions.find((o) => o.value === itemValue);
|
|
6282
6352
|
return /* @__PURE__ */ jsxs26("span", { className: "inline-flex items-center gap-1 bg-accent text-accent-foreground rounded px-2 py-1 text-xs", children: [
|
|
6283
|
-
/* @__PURE__ */
|
|
6284
|
-
/* @__PURE__ */
|
|
6353
|
+
/* @__PURE__ */ jsx30("span", { className: "truncate max-w-[120px]", children: option ? displayFormat(option) : itemValue }),
|
|
6354
|
+
/* @__PURE__ */ jsx30(
|
|
6285
6355
|
"span",
|
|
6286
6356
|
{
|
|
6287
6357
|
role: "button",
|
|
@@ -6307,8 +6377,8 @@ var MultiCombobox = ({
|
|
|
6307
6377
|
}) : /* @__PURE__ */ jsxs26("span", { className: "truncate text-sm", children: [
|
|
6308
6378
|
value.length,
|
|
6309
6379
|
" selected"
|
|
6310
|
-
] }) : /* @__PURE__ */
|
|
6311
|
-
/* @__PURE__ */
|
|
6380
|
+
] }) : /* @__PURE__ */ jsx30("span", { className: "text-muted-foreground", children: placeholder || "Select..." }) }),
|
|
6381
|
+
/* @__PURE__ */ jsx30(
|
|
6312
6382
|
ChevronDown2,
|
|
6313
6383
|
{
|
|
6314
6384
|
className: cn("opacity-50 transition-all duration-200", sizeStyles8[size].icon, open && "rotate-180 scale-110 text-primary opacity-100")
|
|
@@ -6318,30 +6388,27 @@ var MultiCombobox = ({
|
|
|
6318
6388
|
}
|
|
6319
6389
|
),
|
|
6320
6390
|
open && dropdownPosition && typeof window !== "undefined" ? createPortal8(
|
|
6321
|
-
/* @__PURE__ */
|
|
6391
|
+
/* @__PURE__ */ jsx30(
|
|
6322
6392
|
"div",
|
|
6323
6393
|
{
|
|
6324
6394
|
ref: dropdownRef,
|
|
6325
|
-
"data-dropdown":
|
|
6395
|
+
"data-combobox-dropdown": true,
|
|
6326
6396
|
style: {
|
|
6327
6397
|
position: "absolute",
|
|
6328
6398
|
top: dropdownPosition?.top || 0,
|
|
6329
6399
|
left: dropdownPosition?.left || 0,
|
|
6330
6400
|
width: dropdownPosition?.width || 200,
|
|
6331
|
-
zIndex: 9999
|
|
6401
|
+
zIndex: 9999,
|
|
6402
|
+
transformOrigin: "top center"
|
|
6332
6403
|
},
|
|
6333
6404
|
"data-state": open ? "open" : "closed",
|
|
6334
|
-
className:
|
|
6335
|
-
"z-[9999]",
|
|
6336
|
-
"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
|
|
6337
|
-
"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95"
|
|
6338
|
-
),
|
|
6405
|
+
className: "z-9999",
|
|
6339
6406
|
children: /* @__PURE__ */ jsxs26(
|
|
6340
6407
|
"div",
|
|
6341
6408
|
{
|
|
6342
6409
|
className: cn("rounded-md border bg-popover text-popover-foreground shadow-md", "backdrop-blur-sm bg-popover/95 border-border/60"),
|
|
6343
6410
|
children: [
|
|
6344
|
-
showClear && value.length > 0 && /* @__PURE__ */
|
|
6411
|
+
showClear && value.length > 0 && /* @__PURE__ */ jsx30("div", { className: "px-3 py-2 border-b border-border/60 flex justify-end", children: /* @__PURE__ */ jsx30(
|
|
6345
6412
|
"button",
|
|
6346
6413
|
{
|
|
6347
6414
|
type: "button",
|
|
@@ -6355,8 +6422,8 @@ var MultiCombobox = ({
|
|
|
6355
6422
|
}
|
|
6356
6423
|
) }),
|
|
6357
6424
|
enableSearch && /* @__PURE__ */ jsxs26("div", { className: "relative border-b border-border/60", children: [
|
|
6358
|
-
/* @__PURE__ */
|
|
6359
|
-
/* @__PURE__ */
|
|
6425
|
+
/* @__PURE__ */ jsx30(Search3, { className: cn("absolute left-2 top-2.5 text-muted-foreground", sizeStyles8[size].icon) }),
|
|
6426
|
+
/* @__PURE__ */ jsx30(
|
|
6360
6427
|
"input",
|
|
6361
6428
|
{
|
|
6362
6429
|
ref: inputRef,
|
|
@@ -6371,9 +6438,9 @@ var MultiCombobox = ({
|
|
|
6371
6438
|
}
|
|
6372
6439
|
)
|
|
6373
6440
|
] }),
|
|
6374
|
-
/* @__PURE__ */
|
|
6375
|
-
/* @__PURE__ */
|
|
6376
|
-
/* @__PURE__ */
|
|
6441
|
+
/* @__PURE__ */ jsx30("ul", { className: cn("max-h-60 overflow-y-auto p-1", size === "lg" ? "text-base" : size === "sm" ? "text-xs" : "text-sm"), children: loading2 ? /* @__PURE__ */ jsx30("li", { className: "px-3 py-8 text-center", children: /* @__PURE__ */ jsxs26("div", { className: "flex flex-col items-center gap-2 animate-in fade-in-0 zoom-in-95 duration-300", children: [
|
|
6442
|
+
/* @__PURE__ */ jsx30(Loader23, { className: "h-6 w-6 animate-spin text-primary" }),
|
|
6443
|
+
/* @__PURE__ */ jsx30("span", { className: "text-muted-foreground", children: loadingText })
|
|
6377
6444
|
] }) }) : filtered.length ? filtered.map((item, index) => {
|
|
6378
6445
|
const isSelected = value.includes(item.value);
|
|
6379
6446
|
const isDisabled = disabledOptions.includes(item.value);
|
|
@@ -6390,7 +6457,7 @@ var MultiCombobox = ({
|
|
|
6390
6457
|
inputRef.current?.focus();
|
|
6391
6458
|
},
|
|
6392
6459
|
style: {
|
|
6393
|
-
animationDelay: open ? `${index *
|
|
6460
|
+
animationDelay: open ? `${Math.min(index * 20, 200)}ms` : "0ms"
|
|
6394
6461
|
},
|
|
6395
6462
|
className: cn(
|
|
6396
6463
|
"dropdown-item flex cursor-pointer items-center justify-between rounded-sm transition-colors",
|
|
@@ -6401,12 +6468,12 @@ var MultiCombobox = ({
|
|
|
6401
6468
|
),
|
|
6402
6469
|
children: [
|
|
6403
6470
|
item.label,
|
|
6404
|
-
isSelected && /* @__PURE__ */
|
|
6471
|
+
isSelected && /* @__PURE__ */ jsx30(Check5, { className: sizeStyles8[size].icon })
|
|
6405
6472
|
]
|
|
6406
6473
|
},
|
|
6407
6474
|
item.value
|
|
6408
6475
|
);
|
|
6409
|
-
}) : /* @__PURE__ */
|
|
6476
|
+
}) : /* @__PURE__ */ jsx30(
|
|
6410
6477
|
"li",
|
|
6411
6478
|
{
|
|
6412
6479
|
className: cn(
|
|
@@ -6414,9 +6481,9 @@ var MultiCombobox = ({
|
|
|
6414
6481
|
size === "lg" ? "text-base" : size === "sm" ? "text-xs" : "text-sm"
|
|
6415
6482
|
),
|
|
6416
6483
|
children: /* @__PURE__ */ jsxs26("div", { className: "flex flex-col items-center gap-2 animate-in fade-in-0 zoom-in-95 duration-300", children: [
|
|
6417
|
-
/* @__PURE__ */
|
|
6418
|
-
/* @__PURE__ */
|
|
6419
|
-
query && /* @__PURE__ */
|
|
6484
|
+
/* @__PURE__ */ jsx30(SearchX2, { className: "h-8 w-8 opacity-40 text-muted-foreground" }),
|
|
6485
|
+
/* @__PURE__ */ jsx30("span", { children: emptyText }),
|
|
6486
|
+
query && /* @__PURE__ */ jsx30("button", { type: "button", onClick: () => setQuery(""), className: "text-xs text-primary hover:underline", children: "Clear search" })
|
|
6420
6487
|
] })
|
|
6421
6488
|
}
|
|
6422
6489
|
) })
|
|
@@ -6432,7 +6499,7 @@ var MultiCombobox = ({
|
|
|
6432
6499
|
|
|
6433
6500
|
// ../../components/ui/RadioGroup.tsx
|
|
6434
6501
|
import * as React25 from "react";
|
|
6435
|
-
import { jsx as
|
|
6502
|
+
import { jsx as jsx31, jsxs as jsxs27 } from "react/jsx-runtime";
|
|
6436
6503
|
var RadioGroupContext = React25.createContext(void 0);
|
|
6437
6504
|
var useRadioGroup = () => {
|
|
6438
6505
|
const context = React25.useContext(RadioGroupContext);
|
|
@@ -6470,7 +6537,7 @@ var RadioGroup = React25.forwardRef(
|
|
|
6470
6537
|
};
|
|
6471
6538
|
const uniqueId = React25.useId();
|
|
6472
6539
|
const radioName = name || `radio-group-${uniqueId}`;
|
|
6473
|
-
return /* @__PURE__ */
|
|
6540
|
+
return /* @__PURE__ */ jsx31(
|
|
6474
6541
|
RadioGroupContext.Provider,
|
|
6475
6542
|
{
|
|
6476
6543
|
value: {
|
|
@@ -6482,7 +6549,7 @@ var RadioGroup = React25.forwardRef(
|
|
|
6482
6549
|
variant
|
|
6483
6550
|
},
|
|
6484
6551
|
children: /* @__PURE__ */ jsxs27("div", { className: "space-y-2", children: [
|
|
6485
|
-
/* @__PURE__ */
|
|
6552
|
+
/* @__PURE__ */ jsx31(
|
|
6486
6553
|
"div",
|
|
6487
6554
|
{
|
|
6488
6555
|
ref,
|
|
@@ -6499,7 +6566,7 @@ var RadioGroup = React25.forwardRef(
|
|
|
6499
6566
|
children
|
|
6500
6567
|
}
|
|
6501
6568
|
),
|
|
6502
|
-
error && errorMessage && /* @__PURE__ */
|
|
6569
|
+
error && errorMessage && /* @__PURE__ */ jsx31("p", { className: "text-sm text-destructive mt-1", children: errorMessage })
|
|
6503
6570
|
] })
|
|
6504
6571
|
}
|
|
6505
6572
|
);
|
|
@@ -6554,7 +6621,7 @@ var RadioGroupItem = React25.forwardRef(
|
|
|
6554
6621
|
),
|
|
6555
6622
|
children: [
|
|
6556
6623
|
/* @__PURE__ */ jsxs27("div", { className: "flex items-start gap-3", children: [
|
|
6557
|
-
/* @__PURE__ */
|
|
6624
|
+
/* @__PURE__ */ jsx31(
|
|
6558
6625
|
"button",
|
|
6559
6626
|
{
|
|
6560
6627
|
ref,
|
|
@@ -6573,22 +6640,22 @@ var RadioGroupItem = React25.forwardRef(
|
|
|
6573
6640
|
sizeStyles7[size].radio
|
|
6574
6641
|
),
|
|
6575
6642
|
onClick: () => onValueChange?.(value),
|
|
6576
|
-
children: /* @__PURE__ */
|
|
6643
|
+
children: /* @__PURE__ */ jsx31(
|
|
6577
6644
|
"span",
|
|
6578
6645
|
{
|
|
6579
6646
|
className: cn(
|
|
6580
6647
|
"flex items-center justify-center w-full h-full rounded-full transition-all duration-200",
|
|
6581
6648
|
isSelected && "bg-primary"
|
|
6582
6649
|
),
|
|
6583
|
-
children: isSelected && /* @__PURE__ */
|
|
6650
|
+
children: isSelected && /* @__PURE__ */ jsx31("span", { className: cn("bg-primary-foreground rounded-full", sizeStyles7[size].dot) })
|
|
6584
6651
|
}
|
|
6585
6652
|
)
|
|
6586
6653
|
}
|
|
6587
6654
|
),
|
|
6588
6655
|
/* @__PURE__ */ jsxs27("div", { className: "flex-1 min-w-0", children: [
|
|
6589
6656
|
/* @__PURE__ */ jsxs27("div", { className: "flex items-center gap-2", children: [
|
|
6590
|
-
Icon && /* @__PURE__ */
|
|
6591
|
-
/* @__PURE__ */
|
|
6657
|
+
Icon && /* @__PURE__ */ jsx31(Icon, { className: "h-4 w-4 text-foreground" }),
|
|
6658
|
+
/* @__PURE__ */ jsx31(
|
|
6592
6659
|
"label",
|
|
6593
6660
|
{
|
|
6594
6661
|
htmlFor: radioId,
|
|
@@ -6600,10 +6667,10 @@ var RadioGroupItem = React25.forwardRef(
|
|
|
6600
6667
|
}
|
|
6601
6668
|
)
|
|
6602
6669
|
] }),
|
|
6603
|
-
description && /* @__PURE__ */
|
|
6670
|
+
description && /* @__PURE__ */ jsx31("p", { className: "text-muted-foreground mt-1 text-xs", children: description })
|
|
6604
6671
|
] })
|
|
6605
6672
|
] }),
|
|
6606
|
-
/* @__PURE__ */
|
|
6673
|
+
/* @__PURE__ */ jsx31(
|
|
6607
6674
|
"input",
|
|
6608
6675
|
{
|
|
6609
6676
|
type: "radio",
|
|
@@ -6643,9 +6710,9 @@ var RadioGroupItem = React25.forwardRef(
|
|
|
6643
6710
|
),
|
|
6644
6711
|
onClick: () => onValueChange?.(value),
|
|
6645
6712
|
children: [
|
|
6646
|
-
Icon && /* @__PURE__ */
|
|
6713
|
+
Icon && /* @__PURE__ */ jsx31(Icon, { className: "h-4 w-4" }),
|
|
6647
6714
|
label || children,
|
|
6648
|
-
/* @__PURE__ */
|
|
6715
|
+
/* @__PURE__ */ jsx31(
|
|
6649
6716
|
"input",
|
|
6650
6717
|
{
|
|
6651
6718
|
type: "radio",
|
|
@@ -6663,7 +6730,7 @@ var RadioGroupItem = React25.forwardRef(
|
|
|
6663
6730
|
);
|
|
6664
6731
|
}
|
|
6665
6732
|
return /* @__PURE__ */ jsxs27("div", { className: cn("flex items-center gap-2", className), children: [
|
|
6666
|
-
/* @__PURE__ */
|
|
6733
|
+
/* @__PURE__ */ jsx31(
|
|
6667
6734
|
"button",
|
|
6668
6735
|
{
|
|
6669
6736
|
ref,
|
|
@@ -6682,14 +6749,14 @@ var RadioGroupItem = React25.forwardRef(
|
|
|
6682
6749
|
sizeStyles7[size].radio
|
|
6683
6750
|
),
|
|
6684
6751
|
onClick: () => onValueChange?.(value),
|
|
6685
|
-
children: /* @__PURE__ */
|
|
6752
|
+
children: /* @__PURE__ */ jsx31(
|
|
6686
6753
|
"span",
|
|
6687
6754
|
{
|
|
6688
6755
|
className: cn(
|
|
6689
6756
|
"flex items-center justify-center w-full h-full rounded-full transition-all duration-200",
|
|
6690
6757
|
isSelected && "bg-primary"
|
|
6691
6758
|
),
|
|
6692
|
-
children: isSelected && /* @__PURE__ */
|
|
6759
|
+
children: isSelected && /* @__PURE__ */ jsx31("span", { className: cn("bg-primary-foreground rounded-full", sizeStyles7[size].dot) })
|
|
6693
6760
|
}
|
|
6694
6761
|
)
|
|
6695
6762
|
}
|
|
@@ -6706,14 +6773,14 @@ var RadioGroupItem = React25.forwardRef(
|
|
|
6706
6773
|
),
|
|
6707
6774
|
children: [
|
|
6708
6775
|
/* @__PURE__ */ jsxs27("div", { className: "flex items-center gap-2", children: [
|
|
6709
|
-
Icon && /* @__PURE__ */
|
|
6710
|
-
/* @__PURE__ */
|
|
6776
|
+
Icon && /* @__PURE__ */ jsx31(Icon, { className: "h-4 w-4" }),
|
|
6777
|
+
/* @__PURE__ */ jsx31("span", { children: label || children })
|
|
6711
6778
|
] }),
|
|
6712
|
-
description && /* @__PURE__ */
|
|
6779
|
+
description && /* @__PURE__ */ jsx31("p", { className: "text-muted-foreground mt-0.5 text-xs", children: description })
|
|
6713
6780
|
]
|
|
6714
6781
|
}
|
|
6715
6782
|
),
|
|
6716
|
-
/* @__PURE__ */
|
|
6783
|
+
/* @__PURE__ */ jsx31(
|
|
6717
6784
|
"input",
|
|
6718
6785
|
{
|
|
6719
6786
|
type: "radio",
|
|
@@ -6733,7 +6800,7 @@ RadioGroupItem.displayName = "RadioGroupItem";
|
|
|
6733
6800
|
|
|
6734
6801
|
// ../../components/ui/Slider.tsx
|
|
6735
6802
|
import * as React26 from "react";
|
|
6736
|
-
import { jsx as
|
|
6803
|
+
import { jsx as jsx32, jsxs as jsxs28 } from "react/jsx-runtime";
|
|
6737
6804
|
var SIZE_STYLES = {
|
|
6738
6805
|
sm: {
|
|
6739
6806
|
track: "h-1",
|
|
@@ -6795,18 +6862,18 @@ var Slider = React26.forwardRef(
|
|
|
6795
6862
|
}
|
|
6796
6863
|
return /* @__PURE__ */ jsxs28("div", { className: cn("w-full space-y-2", containerClassName), children: [
|
|
6797
6864
|
(label || showValue) && /* @__PURE__ */ jsxs28("div", { className: "flex items-center justify-between", children: [
|
|
6798
|
-
label && /* @__PURE__ */
|
|
6799
|
-
showValue && /* @__PURE__ */
|
|
6865
|
+
label && /* @__PURE__ */ jsx32("label", { className: cn("text-sm font-medium text-foreground", labelClassName), children: label }),
|
|
6866
|
+
showValue && /* @__PURE__ */ jsx32("span", { className: cn("text-xs font-mono text-muted-foreground min-w-[2rem] text-right", valueClassName), children: displayValue })
|
|
6800
6867
|
] }),
|
|
6801
6868
|
/* @__PURE__ */ jsxs28("div", { className: cn("relative flex items-center", sizeStyles8.container), children: [
|
|
6802
|
-
/* @__PURE__ */
|
|
6869
|
+
/* @__PURE__ */ jsx32("div", { className: cn("w-full rounded-full bg-secondary relative overflow-hidden", sizeStyles8.track, trackClassName), children: /* @__PURE__ */ jsx32(
|
|
6803
6870
|
"div",
|
|
6804
6871
|
{
|
|
6805
6872
|
className: "absolute left-0 top-0 h-full bg-primary rounded-full transition-all duration-150 ease-out",
|
|
6806
6873
|
style: { width: `${percentage}%` }
|
|
6807
6874
|
}
|
|
6808
6875
|
) }),
|
|
6809
|
-
/* @__PURE__ */
|
|
6876
|
+
/* @__PURE__ */ jsx32(
|
|
6810
6877
|
"input",
|
|
6811
6878
|
{
|
|
6812
6879
|
ref,
|
|
@@ -6872,7 +6939,7 @@ Slider.displayName = "Slider";
|
|
|
6872
6939
|
// ../../components/ui/OverlayControls.tsx
|
|
6873
6940
|
import { Dot, Maximize2, Pause, Play, RotateCcw, RotateCw, Volume2, VolumeX } from "lucide-react";
|
|
6874
6941
|
import React27 from "react";
|
|
6875
|
-
import { Fragment as Fragment10, jsx as
|
|
6942
|
+
import { Fragment as Fragment10, jsx as jsx33, jsxs as jsxs29 } from "react/jsx-runtime";
|
|
6876
6943
|
function OverlayControls({
|
|
6877
6944
|
mode,
|
|
6878
6945
|
value,
|
|
@@ -7096,7 +7163,7 @@ function OverlayControls({
|
|
|
7096
7163
|
setPreviewData(null);
|
|
7097
7164
|
};
|
|
7098
7165
|
return /* @__PURE__ */ jsxs29(Fragment10, { children: [
|
|
7099
|
-
keyboardFeedback && /* @__PURE__ */
|
|
7166
|
+
keyboardFeedback && /* @__PURE__ */ jsx33(
|
|
7100
7167
|
"div",
|
|
7101
7168
|
{
|
|
7102
7169
|
className: cn(
|
|
@@ -7104,10 +7171,10 @@ function OverlayControls({
|
|
|
7104
7171
|
keyboardFeedback.type === "seek" && (keyboardFeedback.value ?? 0) > 0 ? "justify-end pr-32" : keyboardFeedback.type === "seek" && (keyboardFeedback.value ?? 0) < 0 ? "justify-start pl-32" : "justify-center"
|
|
7105
7172
|
),
|
|
7106
7173
|
children: /* @__PURE__ */ jsxs29("div", { className: "bg-black/50 backdrop-blur-sm rounded-xl px-6 py-4 shadow-xl border border-white/10 animate-in fade-in zoom-in duration-200", children: [
|
|
7107
|
-
keyboardFeedback.type === "play" && /* @__PURE__ */
|
|
7108
|
-
keyboardFeedback.type === "pause" && /* @__PURE__ */
|
|
7174
|
+
keyboardFeedback.type === "play" && /* @__PURE__ */ jsx33(Play, { className: "w-16 h-16 text-white", fill: "white" }),
|
|
7175
|
+
keyboardFeedback.type === "pause" && /* @__PURE__ */ jsx33(Pause, { className: "w-16 h-16 text-white", fill: "white" }),
|
|
7109
7176
|
keyboardFeedback.type === "seek" && /* @__PURE__ */ jsxs29("div", { className: "flex items-center gap-3", children: [
|
|
7110
|
-
(keyboardFeedback.value ?? 0) > 0 ? /* @__PURE__ */
|
|
7177
|
+
(keyboardFeedback.value ?? 0) > 0 ? /* @__PURE__ */ jsx33(RotateCw, { className: "w-12 h-12 text-white" }) : /* @__PURE__ */ jsx33(RotateCcw, { className: "w-12 h-12 text-white" }),
|
|
7111
7178
|
/* @__PURE__ */ jsxs29("span", { className: "text-3xl font-bold text-white", children: [
|
|
7112
7179
|
keyboardFeedback.value && keyboardFeedback.value > 0 ? "+" : "",
|
|
7113
7180
|
keyboardFeedback.value,
|
|
@@ -7115,21 +7182,21 @@ function OverlayControls({
|
|
|
7115
7182
|
] })
|
|
7116
7183
|
] }),
|
|
7117
7184
|
keyboardFeedback.type === "volume" && /* @__PURE__ */ jsxs29("div", { className: "flex items-center gap-3", children: [
|
|
7118
|
-
/* @__PURE__ */
|
|
7185
|
+
/* @__PURE__ */ jsx33(Volume2, { className: "w-12 h-12 text-white" }),
|
|
7119
7186
|
/* @__PURE__ */ jsxs29("div", { className: "flex flex-col gap-1.5", children: [
|
|
7120
7187
|
/* @__PURE__ */ jsxs29("span", { className: "text-2xl font-bold text-white", children: [
|
|
7121
7188
|
keyboardFeedback.value,
|
|
7122
7189
|
"%"
|
|
7123
7190
|
] }),
|
|
7124
|
-
/* @__PURE__ */
|
|
7191
|
+
/* @__PURE__ */ jsx33("div", { className: "w-32 h-1.5 bg-white/30 rounded-full overflow-hidden", children: /* @__PURE__ */ jsx33("div", { className: "h-full bg-white rounded-full transition-all", style: { width: `${keyboardFeedback.value}%` } }) })
|
|
7125
7192
|
] })
|
|
7126
7193
|
] }),
|
|
7127
|
-
keyboardFeedback.type === "mute" && /* @__PURE__ */
|
|
7128
|
-
keyboardFeedback.type === "unmute" && /* @__PURE__ */
|
|
7194
|
+
keyboardFeedback.type === "mute" && /* @__PURE__ */ jsx33(VolumeX, { className: "w-16 h-16 text-white" }),
|
|
7195
|
+
keyboardFeedback.type === "unmute" && /* @__PURE__ */ jsx33(Volume2, { className: "w-16 h-16 text-white" })
|
|
7129
7196
|
] })
|
|
7130
7197
|
}
|
|
7131
7198
|
),
|
|
7132
|
-
/* @__PURE__ */
|
|
7199
|
+
/* @__PURE__ */ jsx33(
|
|
7133
7200
|
"div",
|
|
7134
7201
|
{
|
|
7135
7202
|
className: cn(
|
|
@@ -7140,7 +7207,7 @@ function OverlayControls({
|
|
|
7140
7207
|
),
|
|
7141
7208
|
children: /* @__PURE__ */ jsxs29("div", { className: "px-4", children: [
|
|
7142
7209
|
/* @__PURE__ */ jsxs29("div", { ref: sliderRef, onMouseMove: handleSliderMouseMove, onMouseLeave: handleSliderMouseLeave, className: "relative", children: [
|
|
7143
|
-
/* @__PURE__ */
|
|
7210
|
+
/* @__PURE__ */ jsx33(
|
|
7144
7211
|
Slider,
|
|
7145
7212
|
{
|
|
7146
7213
|
min: 0,
|
|
@@ -7165,14 +7232,14 @@ function OverlayControls({
|
|
|
7165
7232
|
noFocus: true
|
|
7166
7233
|
}
|
|
7167
7234
|
),
|
|
7168
|
-
previewData && /* @__PURE__ */
|
|
7169
|
-
/* @__PURE__ */
|
|
7170
|
-
/* @__PURE__ */
|
|
7171
|
-
] }) : /* @__PURE__ */
|
|
7235
|
+
previewData && /* @__PURE__ */ jsx33("div", { className: "absolute bottom-full mb-2 transform -translate-x-1/2 pointer-events-none z-30", style: { left: `${previewData.x}px` }, children: previewData.url ? /* @__PURE__ */ jsxs29("div", { className: "bg-background/95 backdrop-blur rounded-md border border-border shadow-lg overflow-hidden", children: [
|
|
7236
|
+
/* @__PURE__ */ jsx33("img", { src: previewData.url, alt: "Preview", className: "w-40 h-24 object-cover" }),
|
|
7237
|
+
/* @__PURE__ */ jsx33("div", { className: "px-2 py-1 text-xs font-mono text-center bg-background/80", children: formatTime3(previewData.time) })
|
|
7238
|
+
] }) : /* @__PURE__ */ jsx33("div", { className: "px-3 py-1.5 rounded-md bg-background/90 backdrop-blur border border-border shadow-lg", children: /* @__PURE__ */ jsx33("div", { className: "text-xs font-mono text-center", children: formatTime3(previewData.time) }) }) })
|
|
7172
7239
|
] }),
|
|
7173
7240
|
showControlsBar && /* @__PURE__ */ jsxs29("div", { className: "mt-2 flex items-center justify-between gap-2", children: [
|
|
7174
7241
|
/* @__PURE__ */ jsxs29("div", { className: "flex items-center gap-2", children: [
|
|
7175
|
-
/* @__PURE__ */
|
|
7242
|
+
/* @__PURE__ */ jsx33(
|
|
7176
7243
|
Button_default,
|
|
7177
7244
|
{
|
|
7178
7245
|
variant: "ghost",
|
|
@@ -7180,10 +7247,10 @@ function OverlayControls({
|
|
|
7180
7247
|
onClick: onTogglePlay,
|
|
7181
7248
|
title: playing ? "T\u1EA1m d\u1EEBng" : "Ph\xE1t",
|
|
7182
7249
|
className: "bg-background/60 hover:bg-background/80 border-transparent shadow-sm outline-none focus:outline-none focus:ring-0",
|
|
7183
|
-
children: playing ? /* @__PURE__ */
|
|
7250
|
+
children: playing ? /* @__PURE__ */ jsx33(Pause, { className: "w-4 h-4" }) : /* @__PURE__ */ jsx33(Play, { className: "w-4 h-4" })
|
|
7184
7251
|
}
|
|
7185
7252
|
),
|
|
7186
|
-
onSkip && /* @__PURE__ */
|
|
7253
|
+
onSkip && /* @__PURE__ */ jsx33(
|
|
7187
7254
|
Button_default,
|
|
7188
7255
|
{
|
|
7189
7256
|
variant: "ghost",
|
|
@@ -7191,10 +7258,10 @@ function OverlayControls({
|
|
|
7191
7258
|
onClick: () => onSkip(-skipSeconds),
|
|
7192
7259
|
title: `L\xF9i ${skipSeconds}s`,
|
|
7193
7260
|
className: "bg-background/60 hover:bg-background/80 border-transparent shadow-sm outline-none focus:outline-none focus:ring-0",
|
|
7194
|
-
children: /* @__PURE__ */
|
|
7261
|
+
children: /* @__PURE__ */ jsx33(RotateCcw, { className: "w-4 h-4" })
|
|
7195
7262
|
}
|
|
7196
7263
|
),
|
|
7197
|
-
onSkip && /* @__PURE__ */
|
|
7264
|
+
onSkip && /* @__PURE__ */ jsx33(
|
|
7198
7265
|
Button_default,
|
|
7199
7266
|
{
|
|
7200
7267
|
variant: "ghost",
|
|
@@ -7202,7 +7269,7 @@ function OverlayControls({
|
|
|
7202
7269
|
onClick: () => onSkip(skipSeconds),
|
|
7203
7270
|
title: `Tua ${skipSeconds}s`,
|
|
7204
7271
|
className: "bg-background/60 hover:bg-background/80 border-transparent shadow-sm outline-none focus:outline-none focus:ring-0",
|
|
7205
|
-
children: /* @__PURE__ */
|
|
7272
|
+
children: /* @__PURE__ */ jsx33(RotateCw, { className: "w-4 h-4" })
|
|
7206
7273
|
}
|
|
7207
7274
|
),
|
|
7208
7275
|
(showTime ?? true) && /* @__PURE__ */ jsxs29("span", { className: "px-3 py-1 rounded-full text-xs font-mono bg-background/60 text-foreground shadow-sm border border-border whitespace-nowrap", children: [
|
|
@@ -7211,7 +7278,7 @@ function OverlayControls({
|
|
|
7211
7278
|
formatTime3(max)
|
|
7212
7279
|
] }),
|
|
7213
7280
|
/* @__PURE__ */ jsxs29("div", { className: "flex items-center gap-2", children: [
|
|
7214
|
-
/* @__PURE__ */
|
|
7281
|
+
/* @__PURE__ */ jsx33(
|
|
7215
7282
|
Button_default,
|
|
7216
7283
|
{
|
|
7217
7284
|
variant: "ghost",
|
|
@@ -7219,10 +7286,10 @@ function OverlayControls({
|
|
|
7219
7286
|
onClick: onToggleMute,
|
|
7220
7287
|
title: muted ? "B\u1EADt ti\u1EBFng" : "T\u1EAFt ti\u1EBFng",
|
|
7221
7288
|
className: "bg-background/60 hover:bg-background/80 border-transparent shadow-sm outline-none focus:outline-none focus:ring-0",
|
|
7222
|
-
children: muted || (volume ?? 1) === 0 ? /* @__PURE__ */
|
|
7289
|
+
children: muted || (volume ?? 1) === 0 ? /* @__PURE__ */ jsx33(VolumeX, { className: "w-4 h-4" }) : /* @__PURE__ */ jsx33(Volume2, { className: "w-4 h-4" })
|
|
7223
7290
|
}
|
|
7224
7291
|
),
|
|
7225
|
-
/* @__PURE__ */
|
|
7292
|
+
/* @__PURE__ */ jsx33("div", { className: "w-24", children: /* @__PURE__ */ jsx33(
|
|
7226
7293
|
Slider,
|
|
7227
7294
|
{
|
|
7228
7295
|
min: 0,
|
|
@@ -7247,7 +7314,7 @@ function OverlayControls({
|
|
|
7247
7314
|
title: "Tr\u1EF1c ti\u1EBFp (v\u1EC1 Live)",
|
|
7248
7315
|
className: "bg-background/60 hover:bg-background/80 border-transparent shadow-sm outline-none focus:outline-none focus:ring-0",
|
|
7249
7316
|
children: [
|
|
7250
|
-
/* @__PURE__ */
|
|
7317
|
+
/* @__PURE__ */ jsx33(Dot, { className: "w-10 h-10 text-destructive" }),
|
|
7251
7318
|
"Tr\u1EF1c ti\u1EBFp"
|
|
7252
7319
|
]
|
|
7253
7320
|
}
|
|
@@ -7267,7 +7334,7 @@ function OverlayControls({
|
|
|
7267
7334
|
]
|
|
7268
7335
|
}
|
|
7269
7336
|
),
|
|
7270
|
-
rateOpen && /* @__PURE__ */
|
|
7337
|
+
rateOpen && /* @__PURE__ */ jsx33("div", { className: "absolute bottom-9 right-0 bg-background/90 backdrop-blur rounded-md border border-border shadow-lg p-1 z-30", children: [0.5, 0.75, 1, 1.25, 1.5].map((r) => /* @__PURE__ */ jsxs29(
|
|
7271
7338
|
"button",
|
|
7272
7339
|
{
|
|
7273
7340
|
onClick: () => {
|
|
@@ -7283,7 +7350,7 @@ function OverlayControls({
|
|
|
7283
7350
|
r
|
|
7284
7351
|
)) })
|
|
7285
7352
|
] }),
|
|
7286
|
-
onToggleFullscreen && /* @__PURE__ */
|
|
7353
|
+
onToggleFullscreen && /* @__PURE__ */ jsx33(
|
|
7287
7354
|
Button_default,
|
|
7288
7355
|
{
|
|
7289
7356
|
variant: "ghost",
|
|
@@ -7291,7 +7358,7 @@ function OverlayControls({
|
|
|
7291
7358
|
onClick: onToggleFullscreen,
|
|
7292
7359
|
title: "To\xE0n m\xE0n h\xECnh",
|
|
7293
7360
|
className: "px-3 bg-background/60 hover:bg-background/80 border-transparent shadow-sm outline-none focus:outline-none focus:ring-0",
|
|
7294
|
-
children: /* @__PURE__ */
|
|
7361
|
+
children: /* @__PURE__ */ jsx33(Maximize2, { className: "w-4 h-4" })
|
|
7295
7362
|
}
|
|
7296
7363
|
)
|
|
7297
7364
|
] })
|
|
@@ -7305,7 +7372,7 @@ function OverlayControls({
|
|
|
7305
7372
|
// ../../components/ui/CategoryTreeSelect.tsx
|
|
7306
7373
|
import { useState as useState24 } from "react";
|
|
7307
7374
|
import { ChevronRight as ChevronRight5, ChevronDown as ChevronDown3, Check as Check6 } from "lucide-react";
|
|
7308
|
-
import { Fragment as Fragment11, jsx as
|
|
7375
|
+
import { Fragment as Fragment11, jsx as jsx34, jsxs as jsxs30 } from "react/jsx-runtime";
|
|
7309
7376
|
function CategoryTreeSelect({ categories, value, onChange, placeholder = "Ch\u1ECDn danh m\u1EE5c", disabled }) {
|
|
7310
7377
|
const [isOpen, setIsOpen] = useState24(false);
|
|
7311
7378
|
const [expandedNodes, setExpandedNodes] = useState24(/* @__PURE__ */ new Set());
|
|
@@ -7359,14 +7426,14 @@ function CategoryTreeSelect({ categories, value, onChange, placeholder = "Ch\u1E
|
|
|
7359
7426
|
),
|
|
7360
7427
|
style: { paddingLeft: `${level * 1.5 + 0.75}rem` },
|
|
7361
7428
|
children: [
|
|
7362
|
-
isSelected && /* @__PURE__ */
|
|
7429
|
+
isSelected && /* @__PURE__ */ jsx34(
|
|
7363
7430
|
"span",
|
|
7364
7431
|
{
|
|
7365
7432
|
"aria-hidden": true,
|
|
7366
7433
|
className: "absolute left-0 top-0 bottom-0 w-1 bg-primary"
|
|
7367
7434
|
}
|
|
7368
7435
|
),
|
|
7369
|
-
hasChildren ? /* @__PURE__ */
|
|
7436
|
+
hasChildren ? /* @__PURE__ */ jsx34(
|
|
7370
7437
|
"button",
|
|
7371
7438
|
{
|
|
7372
7439
|
type: "button",
|
|
@@ -7375,33 +7442,33 @@ function CategoryTreeSelect({ categories, value, onChange, placeholder = "Ch\u1E
|
|
|
7375
7442
|
toggleExpand(category.id);
|
|
7376
7443
|
},
|
|
7377
7444
|
className: "p-0.5 hover:bg-accent rounded",
|
|
7378
|
-
children: isExpanded ? /* @__PURE__ */
|
|
7445
|
+
children: isExpanded ? /* @__PURE__ */ jsx34(ChevronDown3, { className: "w-4 h-4" }) : /* @__PURE__ */ jsx34(ChevronRight5, { className: "w-4 h-4" })
|
|
7379
7446
|
}
|
|
7380
|
-
) : /* @__PURE__ */
|
|
7447
|
+
) : /* @__PURE__ */ jsx34("span", { className: "w-5" }),
|
|
7381
7448
|
/* @__PURE__ */ jsxs30(
|
|
7382
7449
|
"div",
|
|
7383
7450
|
{
|
|
7384
7451
|
onClick: () => handleSelect(category.id, category),
|
|
7385
7452
|
className: "flex items-center gap-2 flex-1",
|
|
7386
7453
|
children: [
|
|
7387
|
-
/* @__PURE__ */
|
|
7454
|
+
/* @__PURE__ */ jsx34(
|
|
7388
7455
|
"div",
|
|
7389
7456
|
{
|
|
7390
7457
|
className: cn(
|
|
7391
7458
|
"w-4 h-4 border-2 rounded flex items-center justify-center transition-colors",
|
|
7392
7459
|
isSelected ? "bg-primary border-primary" : "border-muted-foreground/30"
|
|
7393
7460
|
),
|
|
7394
|
-
children: isSelected && /* @__PURE__ */
|
|
7461
|
+
children: isSelected && /* @__PURE__ */ jsx34(Check6, { className: "w-3 h-3 text-primary-foreground" })
|
|
7395
7462
|
}
|
|
7396
7463
|
),
|
|
7397
|
-
/* @__PURE__ */
|
|
7464
|
+
/* @__PURE__ */ jsx34("span", { className: cn("text-sm", isSelected && "font-medium text-primary"), children: category.name })
|
|
7398
7465
|
]
|
|
7399
7466
|
}
|
|
7400
7467
|
)
|
|
7401
7468
|
]
|
|
7402
7469
|
}
|
|
7403
7470
|
),
|
|
7404
|
-
hasChildren && isExpanded && /* @__PURE__ */
|
|
7471
|
+
hasChildren && isExpanded && /* @__PURE__ */ jsx34("div", { children: children.map((child) => renderCategory(child, level + 1)) })
|
|
7405
7472
|
] }, category.id);
|
|
7406
7473
|
};
|
|
7407
7474
|
const selectedCount = value.length;
|
|
@@ -7423,14 +7490,14 @@ function CategoryTreeSelect({ categories, value, onChange, placeholder = "Ch\u1E
|
|
|
7423
7490
|
isOpen && "border-primary"
|
|
7424
7491
|
),
|
|
7425
7492
|
children: [
|
|
7426
|
-
/* @__PURE__ */
|
|
7427
|
-
/* @__PURE__ */
|
|
7493
|
+
/* @__PURE__ */ jsx34("span", { className: cn("text-sm", selectedCount === 0 && "text-muted-foreground"), children: displayText }),
|
|
7494
|
+
/* @__PURE__ */ jsx34(ChevronDown3, { className: cn("w-4 h-4 transition-transform", isOpen && "transform rotate-180") })
|
|
7428
7495
|
]
|
|
7429
7496
|
}
|
|
7430
7497
|
),
|
|
7431
7498
|
isOpen && !disabled && /* @__PURE__ */ jsxs30(Fragment11, { children: [
|
|
7432
|
-
/* @__PURE__ */
|
|
7433
|
-
/* @__PURE__ */
|
|
7499
|
+
/* @__PURE__ */ jsx34("div", { className: "fixed inset-0 z-10", onClick: () => setIsOpen(false) }),
|
|
7500
|
+
/* @__PURE__ */ jsx34(
|
|
7434
7501
|
"div",
|
|
7435
7502
|
{
|
|
7436
7503
|
className: cn(
|
|
@@ -7438,7 +7505,7 @@ function CategoryTreeSelect({ categories, value, onChange, placeholder = "Ch\u1E
|
|
|
7438
7505
|
"rounded-md border bg-popover text-popover-foreground shadow-md",
|
|
7439
7506
|
"backdrop-blur-sm bg-popover/95 border-border/60"
|
|
7440
7507
|
),
|
|
7441
|
-
children: /* @__PURE__ */
|
|
7508
|
+
children: /* @__PURE__ */ jsx34("div", { className: "p-1", children: parentCategories.length === 0 ? /* @__PURE__ */ jsx34("div", { className: "px-3 py-2 text-sm text-muted-foreground", children: "Kh\xF4ng c\xF3 danh m\u1EE5c n\xE0o" }) : parentCategories.map((cat) => renderCategory(cat)) })
|
|
7442
7509
|
}
|
|
7443
7510
|
)
|
|
7444
7511
|
] })
|
|
@@ -7449,7 +7516,7 @@ function CategoryTreeSelect({ categories, value, onChange, placeholder = "Ch\u1E
|
|
|
7449
7516
|
import { useState as useState25, useRef as useRef10, useCallback as useCallback9 } from "react";
|
|
7450
7517
|
import { Upload, X as X9, Image as ImageIcon, Loader2 as Loader24, Check as Check7 } from "lucide-react";
|
|
7451
7518
|
import { useTranslations as useTranslations6 } from "next-intl";
|
|
7452
|
-
import { jsx as
|
|
7519
|
+
import { jsx as jsx35, jsxs as jsxs31 } from "react/jsx-runtime";
|
|
7453
7520
|
function ImageUpload({
|
|
7454
7521
|
onUpload,
|
|
7455
7522
|
onRemove,
|
|
@@ -7476,94 +7543,106 @@ function ImageUpload({
|
|
|
7476
7543
|
md: "w-24 h-24",
|
|
7477
7544
|
lg: "w-32 h-32"
|
|
7478
7545
|
};
|
|
7479
|
-
const handleDragOver = useCallback9(
|
|
7480
|
-
e
|
|
7481
|
-
|
|
7482
|
-
|
|
7483
|
-
|
|
7484
|
-
|
|
7546
|
+
const handleDragOver = useCallback9(
|
|
7547
|
+
(e) => {
|
|
7548
|
+
e.preventDefault();
|
|
7549
|
+
if (!disabled) {
|
|
7550
|
+
setIsDragging(true);
|
|
7551
|
+
}
|
|
7552
|
+
},
|
|
7553
|
+
[disabled]
|
|
7554
|
+
);
|
|
7485
7555
|
const handleDragLeave = useCallback9((e) => {
|
|
7486
7556
|
e.preventDefault();
|
|
7487
7557
|
setIsDragging(false);
|
|
7488
7558
|
}, []);
|
|
7489
|
-
const handleFiles = useCallback9(
|
|
7490
|
-
|
|
7491
|
-
|
|
7492
|
-
|
|
7493
|
-
|
|
7494
|
-
|
|
7495
|
-
|
|
7496
|
-
|
|
7497
|
-
|
|
7498
|
-
|
|
7499
|
-
|
|
7559
|
+
const handleFiles = useCallback9(
|
|
7560
|
+
async (files) => {
|
|
7561
|
+
if (files.length === 0) return;
|
|
7562
|
+
const validFiles = files.filter((file) => {
|
|
7563
|
+
if (file.size > maxSize * 1024 * 1024) {
|
|
7564
|
+
addToast({
|
|
7565
|
+
type: "error",
|
|
7566
|
+
message: `File "${file.name}" is too large. Max size: ${maxSize}MB`
|
|
7567
|
+
});
|
|
7568
|
+
return false;
|
|
7569
|
+
}
|
|
7570
|
+
if (!file.type.startsWith("image/")) {
|
|
7571
|
+
addToast({
|
|
7572
|
+
type: "error",
|
|
7573
|
+
message: `File "${file.name}" is not a valid image`
|
|
7574
|
+
});
|
|
7575
|
+
return false;
|
|
7576
|
+
}
|
|
7577
|
+
return true;
|
|
7578
|
+
});
|
|
7579
|
+
if (validFiles.length === 0) return;
|
|
7580
|
+
setUploading(true);
|
|
7581
|
+
try {
|
|
7582
|
+
for (const file of validFiles) {
|
|
7583
|
+
const formData = new FormData();
|
|
7584
|
+
formData.append("file", file);
|
|
7585
|
+
const response = {
|
|
7586
|
+
id: Date.now(),
|
|
7587
|
+
path: "",
|
|
7588
|
+
url: URL.createObjectURL(file),
|
|
7589
|
+
originalName: file.name,
|
|
7590
|
+
size: file.size,
|
|
7591
|
+
mimeType: file.type,
|
|
7592
|
+
width: 0,
|
|
7593
|
+
height: 0,
|
|
7594
|
+
formattedSize: `${(file.size / 1024).toFixed(1)} KB`
|
|
7595
|
+
};
|
|
7596
|
+
const newImage = {
|
|
7597
|
+
id: response.id,
|
|
7598
|
+
path: response.path,
|
|
7599
|
+
url: response.url,
|
|
7600
|
+
originalName: response.originalName,
|
|
7601
|
+
size: response.size,
|
|
7602
|
+
mimeType: response.mimeType,
|
|
7603
|
+
width: response.width,
|
|
7604
|
+
height: response.height,
|
|
7605
|
+
formattedSize: response.formattedSize
|
|
7606
|
+
};
|
|
7607
|
+
setUploadedImages((prev) => [...prev, newImage]);
|
|
7608
|
+
onUpload?.(newImage);
|
|
7609
|
+
addToast({
|
|
7610
|
+
type: "success",
|
|
7611
|
+
message: `"${file.name}" uploaded successfully`
|
|
7612
|
+
});
|
|
7613
|
+
}
|
|
7614
|
+
} catch (error) {
|
|
7615
|
+
console.error("Upload error:", error);
|
|
7500
7616
|
addToast({
|
|
7501
7617
|
type: "error",
|
|
7502
|
-
message:
|
|
7618
|
+
message: error.message || "Upload failed"
|
|
7503
7619
|
});
|
|
7504
|
-
|
|
7620
|
+
} finally {
|
|
7621
|
+
setUploading(false);
|
|
7505
7622
|
}
|
|
7506
|
-
|
|
7507
|
-
|
|
7508
|
-
|
|
7509
|
-
|
|
7510
|
-
|
|
7511
|
-
|
|
7512
|
-
|
|
7513
|
-
|
|
7514
|
-
|
|
7515
|
-
|
|
7516
|
-
|
|
7517
|
-
|
|
7518
|
-
|
|
7519
|
-
|
|
7520
|
-
|
|
7521
|
-
|
|
7522
|
-
|
|
7523
|
-
|
|
7524
|
-
|
|
7525
|
-
const newImage = {
|
|
7526
|
-
id: response.id,
|
|
7527
|
-
path: response.path,
|
|
7528
|
-
url: response.url,
|
|
7529
|
-
originalName: response.originalName,
|
|
7530
|
-
size: response.size,
|
|
7531
|
-
mimeType: response.mimeType,
|
|
7532
|
-
width: response.width,
|
|
7533
|
-
height: response.height,
|
|
7534
|
-
formattedSize: response.formattedSize
|
|
7535
|
-
};
|
|
7536
|
-
setUploadedImages((prev) => [...prev, newImage]);
|
|
7537
|
-
onUpload?.(newImage);
|
|
7538
|
-
addToast({
|
|
7539
|
-
type: "success",
|
|
7540
|
-
message: `"${file.name}" uploaded successfully`
|
|
7541
|
-
});
|
|
7623
|
+
},
|
|
7624
|
+
[maxSize, addToast, onUpload]
|
|
7625
|
+
);
|
|
7626
|
+
const handleDrop = useCallback9(
|
|
7627
|
+
(e) => {
|
|
7628
|
+
e.preventDefault();
|
|
7629
|
+
setIsDragging(false);
|
|
7630
|
+
if (disabled) return;
|
|
7631
|
+
const files = Array.from(e.dataTransfer.files);
|
|
7632
|
+
handleFiles(files);
|
|
7633
|
+
},
|
|
7634
|
+
[disabled, handleFiles]
|
|
7635
|
+
);
|
|
7636
|
+
const handleFileSelect = useCallback9(
|
|
7637
|
+
(e) => {
|
|
7638
|
+
const files = Array.from(e.target.files || []);
|
|
7639
|
+
handleFiles(files);
|
|
7640
|
+
if (fileInputRef.current) {
|
|
7641
|
+
fileInputRef.current.value = "";
|
|
7542
7642
|
}
|
|
7543
|
-
}
|
|
7544
|
-
|
|
7545
|
-
|
|
7546
|
-
type: "error",
|
|
7547
|
-
message: error.message || "Upload failed"
|
|
7548
|
-
});
|
|
7549
|
-
} finally {
|
|
7550
|
-
setUploading(false);
|
|
7551
|
-
}
|
|
7552
|
-
}, [maxSize, addToast, onUpload]);
|
|
7553
|
-
const handleDrop = useCallback9((e) => {
|
|
7554
|
-
e.preventDefault();
|
|
7555
|
-
setIsDragging(false);
|
|
7556
|
-
if (disabled) return;
|
|
7557
|
-
const files = Array.from(e.dataTransfer.files);
|
|
7558
|
-
handleFiles(files);
|
|
7559
|
-
}, [disabled, handleFiles]);
|
|
7560
|
-
const handleFileSelect = useCallback9((e) => {
|
|
7561
|
-
const files = Array.from(e.target.files || []);
|
|
7562
|
-
handleFiles(files);
|
|
7563
|
-
if (fileInputRef.current) {
|
|
7564
|
-
fileInputRef.current.value = "";
|
|
7565
|
-
}
|
|
7566
|
-
}, [handleFiles]);
|
|
7643
|
+
},
|
|
7644
|
+
[handleFiles]
|
|
7645
|
+
);
|
|
7567
7646
|
const handleRemoveImage = (imageId) => {
|
|
7568
7647
|
setUploadedImages((prev) => prev.filter((img) => img.id !== Number(imageId)));
|
|
7569
7648
|
onRemove?.(String(imageId));
|
|
@@ -7585,29 +7664,19 @@ function ImageUpload({
|
|
|
7585
7664
|
onDragLeave: handleDragLeave,
|
|
7586
7665
|
onDrop: handleDrop,
|
|
7587
7666
|
children: [
|
|
7588
|
-
uploading && /* @__PURE__ */
|
|
7589
|
-
/* @__PURE__ */
|
|
7590
|
-
/* @__PURE__ */
|
|
7667
|
+
uploading && /* @__PURE__ */ jsx35("div", { className: "absolute inset-0 bg-background/80 flex items-center justify-center rounded-lg", children: /* @__PURE__ */ jsxs31("div", { className: "flex items-center gap-3", children: [
|
|
7668
|
+
/* @__PURE__ */ jsx35(Loader24, { className: "w-6 h-6 animate-spin text-primary" }),
|
|
7669
|
+
/* @__PURE__ */ jsx35("span", { className: "text-sm font-medium", children: "Uploading..." })
|
|
7591
7670
|
] }) }),
|
|
7592
7671
|
/* @__PURE__ */ jsxs31("div", { className: "space-y-4", children: [
|
|
7593
|
-
/* @__PURE__ */
|
|
7672
|
+
/* @__PURE__ */ jsx35("div", { className: "mx-auto w-12 h-12 bg-primary/10 rounded-full flex items-center justify-center", children: /* @__PURE__ */ jsx35(Upload, { className: "w-6 h-6 text-primary" }) }),
|
|
7594
7673
|
/* @__PURE__ */ jsxs31("div", { className: "space-y-2", children: [
|
|
7595
|
-
/* @__PURE__ */
|
|
7596
|
-
/* @__PURE__ */
|
|
7597
|
-
Button_default,
|
|
7598
|
-
{
|
|
7599
|
-
type: "button",
|
|
7600
|
-
variant: "outline",
|
|
7601
|
-
size: "sm",
|
|
7602
|
-
onClick: handleBrowseClick,
|
|
7603
|
-
disabled: disabled || uploading,
|
|
7604
|
-
children: browseText || t("browseFiles")
|
|
7605
|
-
}
|
|
7606
|
-
)
|
|
7674
|
+
/* @__PURE__ */ jsx35("p", { className: "text-muted-foreground", children: dragDropText || t("dragDropText") }),
|
|
7675
|
+
/* @__PURE__ */ jsx35(Button_default, { type: "button", variant: "outline", size: "sm", onClick: handleBrowseClick, disabled: disabled || uploading, children: browseText || t("browseFiles") })
|
|
7607
7676
|
] }),
|
|
7608
|
-
/* @__PURE__ */
|
|
7677
|
+
/* @__PURE__ */ jsx35("p", { className: "text-xs text-muted-foreground", children: supportedFormatsText || t("supportedFormats") })
|
|
7609
7678
|
] }),
|
|
7610
|
-
/* @__PURE__ */
|
|
7679
|
+
/* @__PURE__ */ jsx35(
|
|
7611
7680
|
"input",
|
|
7612
7681
|
{
|
|
7613
7682
|
ref: fileInputRef,
|
|
@@ -7623,52 +7692,45 @@ function ImageUpload({
|
|
|
7623
7692
|
}
|
|
7624
7693
|
),
|
|
7625
7694
|
showPreview && uploadedImages.length > 0 && /* @__PURE__ */ jsxs31("div", { className: "space-y-3", children: [
|
|
7626
|
-
/* @__PURE__ */
|
|
7627
|
-
/* @__PURE__ */
|
|
7628
|
-
|
|
7629
|
-
|
|
7630
|
-
|
|
7631
|
-
|
|
7632
|
-
|
|
7633
|
-
|
|
7634
|
-
|
|
7635
|
-
|
|
7636
|
-
|
|
7637
|
-
|
|
7638
|
-
|
|
7639
|
-
|
|
7695
|
+
/* @__PURE__ */ jsx35("h4", { className: "text-sm font-medium", children: "Uploaded Images" }),
|
|
7696
|
+
/* @__PURE__ */ jsx35("div", { className: "grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 gap-4", children: uploadedImages.map((image) => /* @__PURE__ */ jsxs31("div", { className: "relative group bg-card border border-border rounded-lg p-3", children: [
|
|
7697
|
+
/* @__PURE__ */ jsx35(
|
|
7698
|
+
Button_default,
|
|
7699
|
+
{
|
|
7700
|
+
variant: "danger",
|
|
7701
|
+
size: "icon",
|
|
7702
|
+
className: "absolute -top-2 -right-2 w-6 h-6 opacity-0 group-hover:opacity-100 transition-opacity z-10",
|
|
7703
|
+
onClick: () => handleRemoveImage(image.id),
|
|
7704
|
+
children: /* @__PURE__ */ jsx35(X9, { className: "w-3 h-3" })
|
|
7705
|
+
}
|
|
7706
|
+
),
|
|
7707
|
+
/* @__PURE__ */ jsxs31("div", { className: cn("mx-auto mb-2 overflow-hidden rounded-md", previewSizes[previewSize]), children: [
|
|
7708
|
+
/* @__PURE__ */ jsx35(
|
|
7709
|
+
"img",
|
|
7710
|
+
{
|
|
7711
|
+
src: image.url,
|
|
7712
|
+
alt: image.originalName,
|
|
7713
|
+
className: "w-full h-full object-cover",
|
|
7714
|
+
onError: (e) => {
|
|
7715
|
+
const target = e.target;
|
|
7716
|
+
target.style.display = "none";
|
|
7717
|
+
target.nextElementSibling?.classList.remove("hidden");
|
|
7640
7718
|
}
|
|
7641
|
-
|
|
7642
|
-
|
|
7643
|
-
|
|
7644
|
-
|
|
7645
|
-
|
|
7646
|
-
|
|
7647
|
-
|
|
7648
|
-
|
|
7649
|
-
|
|
7650
|
-
|
|
7651
|
-
|
|
7652
|
-
|
|
7653
|
-
|
|
7654
|
-
|
|
7655
|
-
|
|
7656
|
-
/* @__PURE__ */ jsx36("div", { className: "hidden w-full h-full bg-muted flex items-center justify-center", children: /* @__PURE__ */ jsx36(ImageIcon, { className: "w-8 h-8 text-muted-foreground" }) })
|
|
7657
|
-
] }),
|
|
7658
|
-
/* @__PURE__ */ jsxs31("div", { className: "space-y-1", children: [
|
|
7659
|
-
/* @__PURE__ */ jsx36("p", { className: "text-xs font-medium truncate", title: image.originalName, children: image.originalName }),
|
|
7660
|
-
/* @__PURE__ */ jsx36("p", { className: "text-xs text-muted-foreground", children: image.formattedSize }),
|
|
7661
|
-
image.width && image.height && /* @__PURE__ */ jsxs31("p", { className: "text-xs text-muted-foreground", children: [
|
|
7662
|
-
image.width,
|
|
7663
|
-
" \xD7 ",
|
|
7664
|
-
image.height
|
|
7665
|
-
] })
|
|
7666
|
-
] }),
|
|
7667
|
-
/* @__PURE__ */ jsx36("div", { className: "absolute top-1 left-1 w-5 h-5 bg-success rounded-full flex items-center justify-center", children: /* @__PURE__ */ jsx36(Check7, { className: "w-3 h-3 text-success-foreground" }) })
|
|
7668
|
-
]
|
|
7669
|
-
},
|
|
7670
|
-
image.id
|
|
7671
|
-
)) })
|
|
7719
|
+
}
|
|
7720
|
+
),
|
|
7721
|
+
/* @__PURE__ */ jsx35("div", { className: "hidden w-full h-full bg-muted flex items-center justify-center", children: /* @__PURE__ */ jsx35(ImageIcon, { className: "w-8 h-8 text-muted-foreground" }) })
|
|
7722
|
+
] }),
|
|
7723
|
+
/* @__PURE__ */ jsxs31("div", { className: "space-y-1", children: [
|
|
7724
|
+
/* @__PURE__ */ jsx35("p", { className: "text-xs font-medium truncate", title: image.originalName, children: image.originalName }),
|
|
7725
|
+
/* @__PURE__ */ jsx35("p", { className: "text-xs text-muted-foreground", children: image.formattedSize }),
|
|
7726
|
+
image.width && image.height && /* @__PURE__ */ jsxs31("p", { className: "text-xs text-muted-foreground", children: [
|
|
7727
|
+
image.width,
|
|
7728
|
+
" \xD7 ",
|
|
7729
|
+
image.height
|
|
7730
|
+
] })
|
|
7731
|
+
] }),
|
|
7732
|
+
/* @__PURE__ */ jsx35("div", { className: "absolute top-1 left-1 w-5 h-5 bg-success rounded-full flex items-center justify-center", children: /* @__PURE__ */ jsx35(Check7, { className: "w-3 h-3 text-success-foreground" }) })
|
|
7733
|
+
] }, image.id)) })
|
|
7672
7734
|
] })
|
|
7673
7735
|
] });
|
|
7674
7736
|
}
|
|
@@ -7676,7 +7738,7 @@ function ImageUpload({
|
|
|
7676
7738
|
// ../../components/ui/Carousel.tsx
|
|
7677
7739
|
import * as React29 from "react";
|
|
7678
7740
|
import { ChevronLeft as ChevronLeft4, ChevronRight as ChevronRight6 } from "lucide-react";
|
|
7679
|
-
import { Fragment as Fragment12, jsx as
|
|
7741
|
+
import { Fragment as Fragment12, jsx as jsx36, jsxs as jsxs32 } from "react/jsx-runtime";
|
|
7680
7742
|
function Carousel({
|
|
7681
7743
|
children,
|
|
7682
7744
|
autoScroll = true,
|
|
@@ -7846,8 +7908,8 @@ function Carousel({
|
|
|
7846
7908
|
"aria-roledescription": "carousel",
|
|
7847
7909
|
tabIndex: 0,
|
|
7848
7910
|
children: [
|
|
7849
|
-
showProgress && autoScroll && /* @__PURE__ */
|
|
7850
|
-
/* @__PURE__ */
|
|
7911
|
+
showProgress && autoScroll && /* @__PURE__ */ jsx36("div", { className: "absolute top-0 left-0 right-0 h-1 bg-muted z-20", children: /* @__PURE__ */ jsx36("div", { ref: progressElRef, className: "h-full bg-primary", style: { width: "0%" } }) }),
|
|
7912
|
+
/* @__PURE__ */ jsx36(
|
|
7851
7913
|
"div",
|
|
7852
7914
|
{
|
|
7853
7915
|
className: cn("flex", isHorizontal ? "flex-row" : "flex-col", containerClassName),
|
|
@@ -7862,7 +7924,7 @@ function Carousel({
|
|
|
7862
7924
|
role: "group",
|
|
7863
7925
|
"aria-atomic": "false",
|
|
7864
7926
|
"aria-live": autoScroll ? "off" : "polite",
|
|
7865
|
-
children: React29.Children.map(children, (child, idx) => /* @__PURE__ */
|
|
7927
|
+
children: React29.Children.map(children, (child, idx) => /* @__PURE__ */ jsx36(
|
|
7866
7928
|
"div",
|
|
7867
7929
|
{
|
|
7868
7930
|
className: cn(
|
|
@@ -7886,7 +7948,7 @@ function Carousel({
|
|
|
7886
7948
|
}
|
|
7887
7949
|
),
|
|
7888
7950
|
showArrows && totalSlides > slidesToShow && /* @__PURE__ */ jsxs32(Fragment12, { children: [
|
|
7889
|
-
/* @__PURE__ */
|
|
7951
|
+
/* @__PURE__ */ jsx36(
|
|
7890
7952
|
Button_default,
|
|
7891
7953
|
{
|
|
7892
7954
|
onClick: scrollPrev,
|
|
@@ -7902,7 +7964,7 @@ function Carousel({
|
|
|
7902
7964
|
"aria-label": "Previous slide"
|
|
7903
7965
|
}
|
|
7904
7966
|
),
|
|
7905
|
-
/* @__PURE__ */
|
|
7967
|
+
/* @__PURE__ */ jsx36(
|
|
7906
7968
|
Button_default,
|
|
7907
7969
|
{
|
|
7908
7970
|
onClick: scrollNext,
|
|
@@ -7919,7 +7981,7 @@ function Carousel({
|
|
|
7919
7981
|
}
|
|
7920
7982
|
)
|
|
7921
7983
|
] }),
|
|
7922
|
-
showDots && totalSlides > slidesToShow && /* @__PURE__ */
|
|
7984
|
+
showDots && totalSlides > slidesToShow && /* @__PURE__ */ jsx36(
|
|
7923
7985
|
"div",
|
|
7924
7986
|
{
|
|
7925
7987
|
className: cn(
|
|
@@ -7928,7 +7990,7 @@ function Carousel({
|
|
|
7928
7990
|
),
|
|
7929
7991
|
role: "tablist",
|
|
7930
7992
|
"aria-label": "Carousel pagination",
|
|
7931
|
-
children: Array.from({ length: maxIndex + 1 }, (_, idx) => /* @__PURE__ */
|
|
7993
|
+
children: Array.from({ length: maxIndex + 1 }, (_, idx) => /* @__PURE__ */ jsx36(
|
|
7932
7994
|
"button",
|
|
7933
7995
|
{
|
|
7934
7996
|
onClick: () => scrollTo(idx),
|
|
@@ -7945,14 +8007,14 @@ function Carousel({
|
|
|
7945
8007
|
))
|
|
7946
8008
|
}
|
|
7947
8009
|
),
|
|
7948
|
-
showThumbnails && totalSlides > slidesToShow && /* @__PURE__ */
|
|
8010
|
+
showThumbnails && totalSlides > slidesToShow && /* @__PURE__ */ jsx36(
|
|
7949
8011
|
"div",
|
|
7950
8012
|
{
|
|
7951
8013
|
className: cn(
|
|
7952
8014
|
"absolute bottom-0 left-0 right-0 flex gap-2 p-4 bg-gradient-to-t from-black/50 to-transparent overflow-x-auto",
|
|
7953
8015
|
isHorizontal ? "flex-row" : "flex-col"
|
|
7954
8016
|
),
|
|
7955
|
-
children: React29.Children.map(children, (child, idx) => /* @__PURE__ */
|
|
8017
|
+
children: React29.Children.map(children, (child, idx) => /* @__PURE__ */ jsx36(
|
|
7956
8018
|
"button",
|
|
7957
8019
|
{
|
|
7958
8020
|
onClick: () => scrollTo(idx),
|
|
@@ -7974,7 +8036,7 @@ function Carousel({
|
|
|
7974
8036
|
|
|
7975
8037
|
// ../../components/ui/FallingIcons.tsx
|
|
7976
8038
|
import React30 from "react";
|
|
7977
|
-
import { jsx as
|
|
8039
|
+
import { jsx as jsx37, jsxs as jsxs33 } from "react/jsx-runtime";
|
|
7978
8040
|
var DEFAULT_COUNT = 24;
|
|
7979
8041
|
var DEFAULT_SPEED_RANGE = [6, 14];
|
|
7980
8042
|
var DEFAULT_SIZE_RANGE = [14, 28];
|
|
@@ -8069,8 +8131,8 @@ function FallingIcons({
|
|
|
8069
8131
|
filter: `drop-shadow(0 0 ${4 * intensity}px ${glowColor}) drop-shadow(0 0 ${8 * intensity}px ${glowColor})`
|
|
8070
8132
|
};
|
|
8071
8133
|
}, [glow, glowColor, glowIntensity]);
|
|
8072
|
-
const FallbackIcon = React30.useMemo(() => (props) => /* @__PURE__ */
|
|
8073
|
-
const TheIcon = imageUrl ? ({ className: imgClassName }) => /* @__PURE__ */
|
|
8134
|
+
const FallbackIcon = React30.useMemo(() => (props) => /* @__PURE__ */ jsx37("svg", { viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", ...props, children: /* @__PURE__ */ jsx37("circle", { cx: "12", cy: "12", r: "10" }) }), []);
|
|
8135
|
+
const TheIcon = imageUrl ? ({ className: imgClassName }) => /* @__PURE__ */ jsx37(
|
|
8074
8136
|
"img",
|
|
8075
8137
|
{
|
|
8076
8138
|
src: imageUrl,
|
|
@@ -8089,7 +8151,7 @@ function FallingIcons({
|
|
|
8089
8151
|
),
|
|
8090
8152
|
style: { zIndex },
|
|
8091
8153
|
children: [
|
|
8092
|
-
/* @__PURE__ */
|
|
8154
|
+
/* @__PURE__ */ jsx37("style", { children: `
|
|
8093
8155
|
@keyframes ${FallName} {
|
|
8094
8156
|
0% { transform: translate3d(0, -10vh, 0); opacity: 0; }
|
|
8095
8157
|
10% { opacity: 1; }
|
|
@@ -8122,7 +8184,7 @@ function FallingIcons({
|
|
|
8122
8184
|
}
|
|
8123
8185
|
}
|
|
8124
8186
|
` }),
|
|
8125
|
-
/* @__PURE__ */
|
|
8187
|
+
/* @__PURE__ */ jsx37(
|
|
8126
8188
|
"div",
|
|
8127
8189
|
{
|
|
8128
8190
|
className: cn(
|
|
@@ -8148,7 +8210,7 @@ function FallingIcons({
|
|
|
8148
8210
|
const trailDelay = p.delay - (trailIndex + 1) * 0.15;
|
|
8149
8211
|
const trailOpacity = 1 - (trailIndex + 1) * (1 / (trailParticles.length + 1));
|
|
8150
8212
|
const trailScale = 1 - (trailIndex + 1) * 0.15;
|
|
8151
|
-
return /* @__PURE__ */
|
|
8213
|
+
return /* @__PURE__ */ jsx37(
|
|
8152
8214
|
"span",
|
|
8153
8215
|
{
|
|
8154
8216
|
className: cn("absolute top-0 will-change-transform pointer-events-none uv-falling-particle", colorClassName),
|
|
@@ -8162,7 +8224,7 @@ function FallingIcons({
|
|
|
8162
8224
|
opacity: trailOpacity * 0.4,
|
|
8163
8225
|
["--fall"]: `${fallDist ?? (typeof window !== "undefined" ? window.innerHeight + 200 : 1200)}px`
|
|
8164
8226
|
},
|
|
8165
|
-
children: /* @__PURE__ */
|
|
8227
|
+
children: /* @__PURE__ */ jsx37(
|
|
8166
8228
|
"span",
|
|
8167
8229
|
{
|
|
8168
8230
|
className: "inline-block uv-sway",
|
|
@@ -8174,7 +8236,7 @@ function FallingIcons({
|
|
|
8174
8236
|
animationIterationCount: "infinite",
|
|
8175
8237
|
["--amp"]: `${Math.round(p.driftAmp)}px`
|
|
8176
8238
|
},
|
|
8177
|
-
children: /* @__PURE__ */
|
|
8239
|
+
children: /* @__PURE__ */ jsx37(
|
|
8178
8240
|
"span",
|
|
8179
8241
|
{
|
|
8180
8242
|
className: "block",
|
|
@@ -8183,7 +8245,7 @@ function FallingIcons({
|
|
|
8183
8245
|
height: p.size,
|
|
8184
8246
|
...glowStyles
|
|
8185
8247
|
},
|
|
8186
|
-
children: /* @__PURE__ */
|
|
8248
|
+
children: /* @__PURE__ */ jsx37(TheIcon, { className: cn("w-full h-full text-primary/70", colorClassName) })
|
|
8187
8249
|
}
|
|
8188
8250
|
)
|
|
8189
8251
|
}
|
|
@@ -8192,7 +8254,7 @@ function FallingIcons({
|
|
|
8192
8254
|
`${p.key}-trail-${trailIndex}`
|
|
8193
8255
|
);
|
|
8194
8256
|
}),
|
|
8195
|
-
/* @__PURE__ */
|
|
8257
|
+
/* @__PURE__ */ jsx37(
|
|
8196
8258
|
"span",
|
|
8197
8259
|
{
|
|
8198
8260
|
className: cn("absolute top-0 will-change-transform pointer-events-auto uv-falling-particle", colorClassName),
|
|
@@ -8218,7 +8280,7 @@ function FallingIcons({
|
|
|
8218
8280
|
return next;
|
|
8219
8281
|
});
|
|
8220
8282
|
},
|
|
8221
|
-
children: /* @__PURE__ */
|
|
8283
|
+
children: /* @__PURE__ */ jsx37(
|
|
8222
8284
|
"span",
|
|
8223
8285
|
{
|
|
8224
8286
|
className: "inline-block uv-sway",
|
|
@@ -8230,7 +8292,7 @@ function FallingIcons({
|
|
|
8230
8292
|
animationIterationCount: "infinite",
|
|
8231
8293
|
["--amp"]: `${Math.round(p.driftAmp)}px`
|
|
8232
8294
|
},
|
|
8233
|
-
children: /* @__PURE__ */
|
|
8295
|
+
children: /* @__PURE__ */ jsx37(
|
|
8234
8296
|
"span",
|
|
8235
8297
|
{
|
|
8236
8298
|
className: cn(
|
|
@@ -8246,7 +8308,7 @@ function FallingIcons({
|
|
|
8246
8308
|
["--popName"]: PopName,
|
|
8247
8309
|
...glowStyles
|
|
8248
8310
|
},
|
|
8249
|
-
children: /* @__PURE__ */
|
|
8311
|
+
children: /* @__PURE__ */ jsx37(TheIcon, { className: cn("w-full h-full text-primary/70", colorClassName) })
|
|
8250
8312
|
}
|
|
8251
8313
|
)
|
|
8252
8314
|
}
|
|
@@ -8265,7 +8327,7 @@ function FallingIcons({
|
|
|
8265
8327
|
// ../../components/ui/List.tsx
|
|
8266
8328
|
import * as React31 from "react";
|
|
8267
8329
|
import { ChevronRight as ChevronRight7 } from "lucide-react";
|
|
8268
|
-
import { Fragment as Fragment13, jsx as
|
|
8330
|
+
import { Fragment as Fragment13, jsx as jsx38, jsxs as jsxs34 } from "react/jsx-runtime";
|
|
8269
8331
|
var SIZE_STYLES2 = {
|
|
8270
8332
|
xs: { itemPad: "px-2 py-1.5", densePad: "px-2 py-1", label: "text-xs", desc: "text-[11px]", icon: "h-3.5 w-3.5", avatar: "h-6 w-6" },
|
|
8271
8333
|
sm: { itemPad: "px-3 py-2", densePad: "px-3 py-1.5", label: "text-[13px]", desc: "text-[12px]", icon: "h-4 w-4", avatar: "h-8 w-8" },
|
|
@@ -8282,10 +8344,10 @@ var BADGE_VARIANTS = {
|
|
|
8282
8344
|
var ListItemSkeleton = ({ size }) => {
|
|
8283
8345
|
const sz = SIZE_STYLES2[size];
|
|
8284
8346
|
return /* @__PURE__ */ jsxs34("div", { className: cn("flex items-center gap-3 animate-pulse", sz.itemPad), children: [
|
|
8285
|
-
/* @__PURE__ */
|
|
8347
|
+
/* @__PURE__ */ jsx38("div", { className: cn("rounded-full bg-muted shrink-0", sz.avatar) }),
|
|
8286
8348
|
/* @__PURE__ */ jsxs34("div", { className: "flex-1 space-y-2", children: [
|
|
8287
|
-
/* @__PURE__ */
|
|
8288
|
-
/* @__PURE__ */
|
|
8349
|
+
/* @__PURE__ */ jsx38("div", { className: "h-4 bg-muted rounded w-3/4" }),
|
|
8350
|
+
/* @__PURE__ */ jsx38("div", { className: "h-3 bg-muted rounded w-1/2" })
|
|
8289
8351
|
] })
|
|
8290
8352
|
] });
|
|
8291
8353
|
};
|
|
@@ -8319,12 +8381,12 @@ var ListRoot = React31.forwardRef(
|
|
|
8319
8381
|
striped: "rounded-lg border border-border overflow-hidden"
|
|
8320
8382
|
};
|
|
8321
8383
|
if (loading2) {
|
|
8322
|
-
return /* @__PURE__ */
|
|
8384
|
+
return /* @__PURE__ */ jsx38(Comp, { ref, className: cn("group/list", variantClasses[variant], inset && "p-1.5 md:p-2", divided && "divide-y divide-border/60", className), ...rest, children: Array.from({ length: loadingCount }).map((_, i) => /* @__PURE__ */ jsx38(ListItemSkeleton, { size }, i)) });
|
|
8323
8385
|
}
|
|
8324
8386
|
if (!hasChildren && emptyText) {
|
|
8325
|
-
return /* @__PURE__ */
|
|
8387
|
+
return /* @__PURE__ */ jsx38(Comp, { ref, className: cn("group/list", variantClasses[variant], inset && "p-1.5 md:p-2", className), ...rest, children: /* @__PURE__ */ jsx38("div", { className: "text-center py-8 text-muted-foreground text-sm", children: emptyText }) });
|
|
8326
8388
|
}
|
|
8327
|
-
return /* @__PURE__ */
|
|
8389
|
+
return /* @__PURE__ */ jsx38(
|
|
8328
8390
|
Comp,
|
|
8329
8391
|
{
|
|
8330
8392
|
ref,
|
|
@@ -8414,18 +8476,18 @@ var ListItem = React31.forwardRef(
|
|
|
8414
8476
|
className: cn("flex items-center gap-3", padding, "group/item relative"),
|
|
8415
8477
|
...headerProps,
|
|
8416
8478
|
children: [
|
|
8417
|
-
avatar && /* @__PURE__ */
|
|
8418
|
-
Left && !avatar && /* @__PURE__ */
|
|
8479
|
+
avatar && /* @__PURE__ */ jsx38("div", { className: cn("shrink-0", sz.avatar), children: typeof avatar === "string" ? /* @__PURE__ */ jsx38("img", { src: avatar, alt: "", className: cn("rounded-full object-cover", sz.avatar) }) : avatar }),
|
|
8480
|
+
Left && !avatar && /* @__PURE__ */ jsx38("span", { className: cn("text-muted-foreground shrink-0", sz.icon), children: /* @__PURE__ */ jsx38(Left, { className: cn(sz.icon) }) }),
|
|
8419
8481
|
/* @__PURE__ */ jsxs34("div", { className: "min-w-0 flex-1", children: [
|
|
8420
8482
|
/* @__PURE__ */ jsxs34("div", { className: "flex items-center gap-2", children: [
|
|
8421
|
-
label && /* @__PURE__ */
|
|
8422
|
-
badge && /* @__PURE__ */
|
|
8483
|
+
label && /* @__PURE__ */ jsx38("div", { className: cn(sz.label, "text-foreground font-medium truncate"), children: label }),
|
|
8484
|
+
badge && /* @__PURE__ */ jsx38("span", { className: cn("px-2 py-0.5 rounded-full text-[11px] font-medium shrink-0", BADGE_VARIANTS[badgeVariant]), children: badge })
|
|
8423
8485
|
] }),
|
|
8424
|
-
description && /* @__PURE__ */
|
|
8425
|
-
children && /* @__PURE__ */
|
|
8486
|
+
description && /* @__PURE__ */ jsx38("div", { className: cn(sz.desc, "text-muted-foreground truncate mt-0.5"), children: description }),
|
|
8487
|
+
children && /* @__PURE__ */ jsx38("div", { className: "mt-1", children })
|
|
8426
8488
|
] }),
|
|
8427
|
-
action && /* @__PURE__ */
|
|
8428
|
-
collapsible ? /* @__PURE__ */
|
|
8489
|
+
action && /* @__PURE__ */ jsx38("div", { className: "opacity-0 group-hover/item:opacity-100 transition-opacity shrink-0", children: action }),
|
|
8490
|
+
collapsible ? /* @__PURE__ */ jsx38(
|
|
8429
8491
|
"span",
|
|
8430
8492
|
{
|
|
8431
8493
|
className: cn(
|
|
@@ -8433,13 +8495,13 @@ var ListItem = React31.forwardRef(
|
|
|
8433
8495
|
sz.icon,
|
|
8434
8496
|
isExpanded && "rotate-90"
|
|
8435
8497
|
),
|
|
8436
|
-
children: /* @__PURE__ */
|
|
8498
|
+
children: /* @__PURE__ */ jsx38(ChevronRight7, { className: cn(sz.icon) })
|
|
8437
8499
|
}
|
|
8438
|
-
) : Right && /* @__PURE__ */
|
|
8500
|
+
) : Right && /* @__PURE__ */ jsx38("span", { className: cn("text-muted-foreground shrink-0", sz.icon), children: /* @__PURE__ */ jsx38(Right, { className: cn(sz.icon) }) })
|
|
8439
8501
|
]
|
|
8440
8502
|
}
|
|
8441
8503
|
),
|
|
8442
|
-
collapsible && isExpanded && expandContent && /* @__PURE__ */
|
|
8504
|
+
collapsible && isExpanded && expandContent && /* @__PURE__ */ jsx38("div", { className: cn("border-t border-border/50 bg-muted/20", padding, "pt-3"), children: expandContent })
|
|
8443
8505
|
] });
|
|
8444
8506
|
const baseCls = cn(
|
|
8445
8507
|
"relative w-full",
|
|
@@ -8449,10 +8511,10 @@ var ListItem = React31.forwardRef(
|
|
|
8449
8511
|
);
|
|
8450
8512
|
if (href) {
|
|
8451
8513
|
const A = as === "a" ? "a" : "a";
|
|
8452
|
-
return /* @__PURE__ */
|
|
8514
|
+
return /* @__PURE__ */ jsx38(A, { ref, href, className: cn(baseCls, "block"), ...rest, children: inner });
|
|
8453
8515
|
}
|
|
8454
8516
|
if (as === "button" && !collapsible) {
|
|
8455
|
-
return /* @__PURE__ */
|
|
8517
|
+
return /* @__PURE__ */ jsx38(
|
|
8456
8518
|
"button",
|
|
8457
8519
|
{
|
|
8458
8520
|
ref,
|
|
@@ -8464,7 +8526,7 @@ var ListItem = React31.forwardRef(
|
|
|
8464
8526
|
);
|
|
8465
8527
|
}
|
|
8466
8528
|
if (collapsible) {
|
|
8467
|
-
return /* @__PURE__ */
|
|
8529
|
+
return /* @__PURE__ */ jsx38(
|
|
8468
8530
|
"div",
|
|
8469
8531
|
{
|
|
8470
8532
|
ref,
|
|
@@ -8475,7 +8537,7 @@ var ListItem = React31.forwardRef(
|
|
|
8475
8537
|
);
|
|
8476
8538
|
}
|
|
8477
8539
|
const Comp = as;
|
|
8478
|
-
return /* @__PURE__ */
|
|
8540
|
+
return /* @__PURE__ */ jsx38(Comp, { ref, className: baseCls, ...rest, children: inner });
|
|
8479
8541
|
}
|
|
8480
8542
|
);
|
|
8481
8543
|
ListItem.displayName = "List.Item";
|
|
@@ -8485,7 +8547,7 @@ var List_default = List;
|
|
|
8485
8547
|
// ../../components/ui/Watermark.tsx
|
|
8486
8548
|
import * as React32 from "react";
|
|
8487
8549
|
import { createPortal as createPortal9 } from "react-dom";
|
|
8488
|
-
import { Fragment as Fragment14, jsx as
|
|
8550
|
+
import { Fragment as Fragment14, jsx as jsx39, jsxs as jsxs35 } from "react/jsx-runtime";
|
|
8489
8551
|
var PRESETS2 = {
|
|
8490
8552
|
confidential: { text: "CONFIDENTIAL", color: "rgba(220, 38, 38, 0.15)", rotate: -22, fontSize: 16, fontWeight: "bold" },
|
|
8491
8553
|
draft: { text: "DRAFT", color: "rgba(59, 130, 246, 0.15)", rotate: -22, fontSize: 18, fontWeight: "bold" },
|
|
@@ -8740,7 +8802,7 @@ var Watermark = ({
|
|
|
8740
8802
|
if (dataURL) overlayStyle.backgroundImage = `url(${dataURL})`;
|
|
8741
8803
|
const animationClass = animate ? getAnimationClass(animationVariant, visible) : "";
|
|
8742
8804
|
const blurClass = blur ? `backdrop-blur-[${blurAmount}px]` : "";
|
|
8743
|
-
const overlay = /* @__PURE__ */
|
|
8805
|
+
const overlay = /* @__PURE__ */ jsx39(
|
|
8744
8806
|
"div",
|
|
8745
8807
|
{
|
|
8746
8808
|
role: interactive ? "button" : void 0,
|
|
@@ -8779,7 +8841,7 @@ var Watermark_default = Watermark;
|
|
|
8779
8841
|
// ../../components/ui/Timeline.tsx
|
|
8780
8842
|
import * as React33 from "react";
|
|
8781
8843
|
import { ChevronDown as ChevronDown4 } from "lucide-react";
|
|
8782
|
-
import { jsx as
|
|
8844
|
+
import { jsx as jsx40, jsxs as jsxs36 } from "react/jsx-runtime";
|
|
8783
8845
|
var SIZE_STYLE = {
|
|
8784
8846
|
sm: { dot: "h-2.5 w-2.5", iconDot: "h-6 w-6", padY: "py-3", densePadY: "py-2", title: "text-sm", desc: "text-xs", time: "text-[11px]", icon: "h-3.5 w-3.5" },
|
|
8785
8847
|
md: { dot: "h-3 w-3", iconDot: "h-8 w-8", padY: "py-4", densePadY: "py-2.5", title: "text-base", desc: "text-sm", time: "text-xs", icon: "h-4 w-4" },
|
|
@@ -8805,21 +8867,21 @@ var Marker = ({ index, last, size, color, status = "default", lineColor, lineSty
|
|
|
8805
8867
|
const dotColor = color ? `background:${color}` : void 0;
|
|
8806
8868
|
const cls = color ? void 0 : STATUS_COLOR[status];
|
|
8807
8869
|
return /* @__PURE__ */ jsxs36("div", { className: "flex flex-col items-center", children: [
|
|
8808
|
-
dot ? /* @__PURE__ */
|
|
8870
|
+
dot ? /* @__PURE__ */ jsx40("div", { className: "flex items-center justify-center", children: dot }) : Icon ? /* @__PURE__ */ jsx40(
|
|
8809
8871
|
"div",
|
|
8810
8872
|
{
|
|
8811
8873
|
className: cn("rounded-full ring-2 ring-background flex items-center justify-center", sz.iconDot, cls, active && "ring-primary/40 ring-4"),
|
|
8812
8874
|
style: dotColor ? { background: color } : void 0,
|
|
8813
|
-
children: /* @__PURE__ */
|
|
8875
|
+
children: /* @__PURE__ */ jsx40(Icon, { className: cn("text-white", sz.icon) })
|
|
8814
8876
|
}
|
|
8815
|
-
) : /* @__PURE__ */
|
|
8877
|
+
) : /* @__PURE__ */ jsx40(
|
|
8816
8878
|
"div",
|
|
8817
8879
|
{
|
|
8818
8880
|
className: cn("rounded-full ring-2 ring-background", sz.dot, cls, active && "ring-primary/40 ring-4 scale-125"),
|
|
8819
8881
|
style: dotColor ? { background: color } : void 0
|
|
8820
8882
|
}
|
|
8821
8883
|
),
|
|
8822
|
-
!last && showLine && /* @__PURE__ */
|
|
8884
|
+
!last && showLine && /* @__PURE__ */ jsx40(
|
|
8823
8885
|
"div",
|
|
8824
8886
|
{
|
|
8825
8887
|
className: cn("flex-1 border-l-2", LINE_STYLE_MAP[lineStyle]),
|
|
@@ -8845,8 +8907,8 @@ var TimelineRoot = React33.forwardRef(
|
|
|
8845
8907
|
children,
|
|
8846
8908
|
...rest
|
|
8847
8909
|
}, ref) => {
|
|
8848
|
-
const content = items ? items.map((it, i) => /* @__PURE__ */
|
|
8849
|
-
return /* @__PURE__ */
|
|
8910
|
+
const content = items ? items.map((it, i) => /* @__PURE__ */ jsx40(TimelineItem, { ...it, className: cn(itemClassName, it.className), "data-index": i, "data-last": i === (items?.length ?? 0) - 1 }, i)) : children;
|
|
8911
|
+
return /* @__PURE__ */ jsx40(TimelineContext.Provider, { value: { align, variant, size, mode, lineColor, lineStyle, itemClassName, animate, dense, showLine }, children: /* @__PURE__ */ jsx40(
|
|
8850
8912
|
"div",
|
|
8851
8913
|
{
|
|
8852
8914
|
ref,
|
|
@@ -8857,7 +8919,7 @@ var TimelineRoot = React33.forwardRef(
|
|
|
8857
8919
|
className
|
|
8858
8920
|
),
|
|
8859
8921
|
...rest,
|
|
8860
|
-
children: mode === "vertical" ? /* @__PURE__ */
|
|
8922
|
+
children: mode === "vertical" ? /* @__PURE__ */ jsx40("div", { className: "space-y-0", children: content }) : content
|
|
8861
8923
|
}
|
|
8862
8924
|
) });
|
|
8863
8925
|
}
|
|
@@ -8909,33 +8971,33 @@ var TimelineItem = React33.forwardRef(
|
|
|
8909
8971
|
/* @__PURE__ */ jsxs36("div", { className: "flex items-start justify-between gap-2", children: [
|
|
8910
8972
|
/* @__PURE__ */ jsxs36("div", { className: "flex-1 min-w-0", children: [
|
|
8911
8973
|
title && /* @__PURE__ */ jsxs36("div", { className: "flex items-center gap-2", children: [
|
|
8912
|
-
/* @__PURE__ */
|
|
8913
|
-
badge && /* @__PURE__ */
|
|
8974
|
+
/* @__PURE__ */ jsx40("div", { className: cn("font-semibold text-foreground", sz.title), children: title }),
|
|
8975
|
+
badge && /* @__PURE__ */ jsx40("span", { className: "px-2 py-0.5 rounded-full text-[10px] font-medium bg-primary/10 text-primary", children: badge })
|
|
8914
8976
|
] }),
|
|
8915
|
-
description && /* @__PURE__ */
|
|
8916
|
-
children && /* @__PURE__ */
|
|
8977
|
+
description && /* @__PURE__ */ jsx40("div", { className: cn("text-muted-foreground mt-1", sz.desc), children: description }),
|
|
8978
|
+
children && /* @__PURE__ */ jsx40("div", { className: "mt-2", children })
|
|
8917
8979
|
] }),
|
|
8918
|
-
collapsible && /* @__PURE__ */
|
|
8980
|
+
collapsible && /* @__PURE__ */ jsx40(
|
|
8919
8981
|
"button",
|
|
8920
8982
|
{
|
|
8921
8983
|
type: "button",
|
|
8922
8984
|
onClick: toggleExpanded,
|
|
8923
8985
|
className: cn("text-muted-foreground hover:text-foreground transition-transform p-1", isExpanded && "rotate-180"),
|
|
8924
|
-
children: /* @__PURE__ */
|
|
8986
|
+
children: /* @__PURE__ */ jsx40(ChevronDown4, { className: "h-4 w-4" })
|
|
8925
8987
|
}
|
|
8926
8988
|
)
|
|
8927
8989
|
] }),
|
|
8928
|
-
time && /* @__PURE__ */
|
|
8929
|
-
collapsible && isExpanded && expandContent && /* @__PURE__ */
|
|
8990
|
+
time && /* @__PURE__ */ jsx40("div", { className: cn("mt-2 text-muted-foreground flex items-center gap-1", sz.time), children: time }),
|
|
8991
|
+
collapsible && isExpanded && expandContent && /* @__PURE__ */ jsx40("div", { className: "mt-3 pt-3 border-t border-border/50 text-sm", children: expandContent })
|
|
8930
8992
|
] });
|
|
8931
8993
|
const markerWidth = Icon || dot ? "w-auto" : "w-6";
|
|
8932
8994
|
const leftSide = /* @__PURE__ */ jsxs36("div", { className: cn("flex items-stretch gap-4", padding, ctx.animate && "animate-in slide-in-from-left duration-500"), style: { animationDelay: ctx.animate ? `${(idx ?? 0) * 100}ms` : void 0 }, children: [
|
|
8933
|
-
/* @__PURE__ */
|
|
8934
|
-
/* @__PURE__ */
|
|
8995
|
+
/* @__PURE__ */ jsx40("div", { className: cn("flex-shrink-0 flex items-stretch", markerWidth), children: /* @__PURE__ */ jsx40(Marker, { index: idx ?? 0, last: isLast, size: ctx.size, color, status, lineColor: ctx.lineColor, lineStyle: ctx.lineStyle, active, dot, icon: Icon, showLine: ctx.showLine }) }),
|
|
8996
|
+
/* @__PURE__ */ jsx40("div", { className: "flex-1", children: contentBox })
|
|
8935
8997
|
] });
|
|
8936
8998
|
const rightSide = /* @__PURE__ */ jsxs36("div", { className: cn("flex items-stretch gap-4", padding, ctx.animate && "animate-in slide-in-from-right duration-500"), style: { animationDelay: ctx.animate ? `${(idx ?? 0) * 100}ms` : void 0 }, children: [
|
|
8937
|
-
/* @__PURE__ */
|
|
8938
|
-
/* @__PURE__ */
|
|
8999
|
+
/* @__PURE__ */ jsx40("div", { className: "flex-1 flex justify-end", children: contentBox }),
|
|
9000
|
+
/* @__PURE__ */ jsx40("div", { className: cn("flex-shrink-0 flex items-stretch", markerWidth), children: /* @__PURE__ */ jsx40(Marker, { index: idx ?? 0, last: isLast, size: ctx.size, color, status, lineColor: ctx.lineColor, lineStyle: ctx.lineStyle, active, dot, icon: Icon, showLine: ctx.showLine }) })
|
|
8939
9001
|
] });
|
|
8940
9002
|
const horizontalItem = /* @__PURE__ */ jsxs36(
|
|
8941
9003
|
"div",
|
|
@@ -8946,19 +9008,19 @@ var TimelineItem = React33.forwardRef(
|
|
|
8946
9008
|
),
|
|
8947
9009
|
style: { animationDelay: ctx.animate ? `${(idx ?? 0) * 100}ms` : void 0 },
|
|
8948
9010
|
children: [
|
|
8949
|
-
/* @__PURE__ */
|
|
8950
|
-
!isLast && ctx.showLine && /* @__PURE__ */
|
|
9011
|
+
/* @__PURE__ */ jsx40(Marker, { index: idx ?? 0, last: isLast, size: ctx.size, color, status, lineColor: ctx.lineColor, lineStyle: ctx.lineStyle, active, dot, icon: Icon, showLine: false }),
|
|
9012
|
+
!isLast && ctx.showLine && /* @__PURE__ */ jsx40("div", { className: cn("h-px w-full border-t-2", LINE_STYLE_MAP[ctx.lineStyle]), style: { borderColor: ctx.lineColor || "hsl(var(--border))" } }),
|
|
8951
9013
|
contentBox
|
|
8952
9014
|
]
|
|
8953
9015
|
}
|
|
8954
9016
|
);
|
|
8955
9017
|
if (ctx.mode === "horizontal") {
|
|
8956
|
-
return /* @__PURE__ */
|
|
9018
|
+
return /* @__PURE__ */ jsx40("div", { ref, className: cn("relative", className), ...rest, children: horizontalItem });
|
|
8957
9019
|
}
|
|
8958
9020
|
let row = leftSide;
|
|
8959
9021
|
if (ctx.align === "right") row = rightSide;
|
|
8960
9022
|
if (ctx.align === "alternate") row = (idx ?? 0) % 2 === 0 ? leftSide : rightSide;
|
|
8961
|
-
return /* @__PURE__ */
|
|
9023
|
+
return /* @__PURE__ */ jsx40("div", { ref, className: cn("relative", className), ...rest, children: row });
|
|
8962
9024
|
}
|
|
8963
9025
|
);
|
|
8964
9026
|
TimelineItem.displayName = "Timeline.Item";
|
|
@@ -8968,7 +9030,7 @@ var Timeline_default = Timeline;
|
|
|
8968
9030
|
// ../../components/ui/ColorPicker.tsx
|
|
8969
9031
|
import * as React34 from "react";
|
|
8970
9032
|
import { Pipette, X as X10, Copy, Check as Check8, Palette, History } from "lucide-react";
|
|
8971
|
-
import { jsx as
|
|
9033
|
+
import { jsx as jsx41, jsxs as jsxs37 } from "react/jsx-runtime";
|
|
8972
9034
|
var clamp = (n, min, max) => Math.max(min, Math.min(max, n));
|
|
8973
9035
|
function hexToRgb(hex) {
|
|
8974
9036
|
const str = hex.replace(/^#/, "").trim();
|
|
@@ -9127,7 +9189,7 @@ var Swatch = ({
|
|
|
9127
9189
|
md: "h-6 w-6",
|
|
9128
9190
|
lg: "h-8 w-8"
|
|
9129
9191
|
};
|
|
9130
|
-
return /* @__PURE__ */
|
|
9192
|
+
return /* @__PURE__ */ jsx41(
|
|
9131
9193
|
"button",
|
|
9132
9194
|
{
|
|
9133
9195
|
type: "button",
|
|
@@ -9266,7 +9328,7 @@ function ColorPicker({
|
|
|
9266
9328
|
"aria-label": "Open color picker",
|
|
9267
9329
|
children: [
|
|
9268
9330
|
/* @__PURE__ */ jsxs37("div", { className: "flex items-center gap-2", children: [
|
|
9269
|
-
/* @__PURE__ */
|
|
9331
|
+
/* @__PURE__ */ jsx41(
|
|
9270
9332
|
"span",
|
|
9271
9333
|
{
|
|
9272
9334
|
className: cn(
|
|
@@ -9276,9 +9338,9 @@ function ColorPicker({
|
|
|
9276
9338
|
style: { backgroundColor: withAlpha ? `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})` : hexForInput }
|
|
9277
9339
|
}
|
|
9278
9340
|
),
|
|
9279
|
-
/* @__PURE__ */
|
|
9341
|
+
/* @__PURE__ */ jsx41("span", { className: "font-mono text-muted-foreground", children: text })
|
|
9280
9342
|
] }),
|
|
9281
|
-
/* @__PURE__ */
|
|
9343
|
+
/* @__PURE__ */ jsx41(Pipette, { className: cn(size === "sm" ? "w-3.5 h-3.5" : size === "lg" ? "w-5 h-5" : "w-4 h-4", "text-muted-foreground") })
|
|
9282
9344
|
]
|
|
9283
9345
|
}
|
|
9284
9346
|
);
|
|
@@ -9288,7 +9350,7 @@ function ColorPicker({
|
|
|
9288
9350
|
default: 320,
|
|
9289
9351
|
full: 360
|
|
9290
9352
|
};
|
|
9291
|
-
return /* @__PURE__ */
|
|
9353
|
+
return /* @__PURE__ */ jsx41("div", { className: cn("inline-block w-full", className), ...rest, children: /* @__PURE__ */ jsx41(
|
|
9292
9354
|
Popover,
|
|
9293
9355
|
{
|
|
9294
9356
|
trigger,
|
|
@@ -9300,7 +9362,7 @@ function ColorPicker({
|
|
|
9300
9362
|
contentClassName: cn("p-3 rounded-lg border border-border bg-card shadow-lg", contentClassName),
|
|
9301
9363
|
children: /* @__PURE__ */ jsxs37("div", { className: "space-y-3", children: [
|
|
9302
9364
|
variant !== "minimal" && /* @__PURE__ */ jsxs37("div", { className: "flex items-center gap-2", children: [
|
|
9303
|
-
/* @__PURE__ */
|
|
9365
|
+
/* @__PURE__ */ jsx41("input", { type: "color", value: hexForInput, onChange: handleNativeChange, className: "h-9 w-9 rounded-md cursor-pointer border border-border" }),
|
|
9304
9366
|
/* @__PURE__ */ jsxs37(
|
|
9305
9367
|
"button",
|
|
9306
9368
|
{
|
|
@@ -9308,7 +9370,7 @@ function ColorPicker({
|
|
|
9308
9370
|
onClick: tryEyedropper,
|
|
9309
9371
|
className: cn("h-9 px-3 rounded-md border border-border text-xs hover:bg-accent/10 transition-colors flex items-center gap-1.5"),
|
|
9310
9372
|
children: [
|
|
9311
|
-
/* @__PURE__ */
|
|
9373
|
+
/* @__PURE__ */ jsx41(Pipette, { className: "w-3.5 h-3.5" }),
|
|
9312
9374
|
variant === "full" && "Pick"
|
|
9313
9375
|
]
|
|
9314
9376
|
}
|
|
@@ -9323,7 +9385,7 @@ function ColorPicker({
|
|
|
9323
9385
|
copied && "bg-green-500/10 border-green-500/30"
|
|
9324
9386
|
),
|
|
9325
9387
|
children: [
|
|
9326
|
-
copied ? /* @__PURE__ */
|
|
9388
|
+
copied ? /* @__PURE__ */ jsx41(Check8, { className: "w-3.5 h-3.5 text-green-600" }) : /* @__PURE__ */ jsx41(Copy, { className: "w-3.5 h-3.5" }),
|
|
9327
9389
|
variant === "full" && (copied ? "Copied!" : "Copy")
|
|
9328
9390
|
]
|
|
9329
9391
|
}
|
|
@@ -9335,14 +9397,14 @@ function ColorPicker({
|
|
|
9335
9397
|
onClick: clear,
|
|
9336
9398
|
className: "ml-auto h-9 px-2 rounded-md border border-border text-xs hover:bg-destructive/10 transition-colors flex items-center gap-1",
|
|
9337
9399
|
children: [
|
|
9338
|
-
/* @__PURE__ */
|
|
9400
|
+
/* @__PURE__ */ jsx41(X10, { className: "w-3.5 h-3.5" }),
|
|
9339
9401
|
variant === "full" && "Clear"
|
|
9340
9402
|
]
|
|
9341
9403
|
}
|
|
9342
9404
|
)
|
|
9343
9405
|
] }),
|
|
9344
9406
|
/* @__PURE__ */ jsxs37("div", { className: "flex items-center gap-2", children: [
|
|
9345
|
-
/* @__PURE__ */
|
|
9407
|
+
/* @__PURE__ */ jsx41(
|
|
9346
9408
|
Input_default,
|
|
9347
9409
|
{
|
|
9348
9410
|
value: text,
|
|
@@ -9353,7 +9415,7 @@ function ColorPicker({
|
|
|
9353
9415
|
className: "flex-1"
|
|
9354
9416
|
}
|
|
9355
9417
|
),
|
|
9356
|
-
variant === "minimal" && copyable && /* @__PURE__ */
|
|
9418
|
+
variant === "minimal" && copyable && /* @__PURE__ */ jsx41(
|
|
9357
9419
|
"button",
|
|
9358
9420
|
{
|
|
9359
9421
|
type: "button",
|
|
@@ -9362,17 +9424,17 @@ function ColorPicker({
|
|
|
9362
9424
|
"h-9 w-9 rounded-md border border-border hover:bg-accent/10 transition-colors flex items-center justify-center",
|
|
9363
9425
|
copied && "bg-green-500/10 border-green-500/30"
|
|
9364
9426
|
),
|
|
9365
|
-
children: copied ? /* @__PURE__ */
|
|
9427
|
+
children: copied ? /* @__PURE__ */ jsx41(Check8, { className: "w-3.5 h-3.5 text-green-600" }) : /* @__PURE__ */ jsx41(Copy, { className: "w-3.5 h-3.5" })
|
|
9366
9428
|
}
|
|
9367
9429
|
)
|
|
9368
9430
|
] }),
|
|
9369
|
-
withAlpha && /* @__PURE__ */
|
|
9431
|
+
withAlpha && /* @__PURE__ */ jsx41("div", { className: "pt-1", children: /* @__PURE__ */ jsx41(Slider, { min: 0, max: 100, step: 1, value: alphaPct, onChange: (v) => setAlpha(v), label: "Alpha", showValue: true, formatValue: (v) => `${v}%`, size: "sm" }) }),
|
|
9370
9432
|
variant !== "minimal" && /* @__PURE__ */ jsxs37("div", { children: [
|
|
9371
9433
|
/* @__PURE__ */ jsxs37("div", { className: "text-xs font-medium text-muted-foreground mb-2 flex items-center gap-1.5", children: [
|
|
9372
|
-
/* @__PURE__ */
|
|
9434
|
+
/* @__PURE__ */ jsx41(Palette, { className: "w-3.5 h-3.5" }),
|
|
9373
9435
|
" Presets"
|
|
9374
9436
|
] }),
|
|
9375
|
-
/* @__PURE__ */
|
|
9437
|
+
/* @__PURE__ */ jsx41("div", { className: "grid grid-cols-8 gap-2", children: swatches.map((c) => /* @__PURE__ */ jsx41(
|
|
9376
9438
|
Swatch,
|
|
9377
9439
|
{
|
|
9378
9440
|
color: c,
|
|
@@ -9390,10 +9452,10 @@ function ColorPicker({
|
|
|
9390
9452
|
] }),
|
|
9391
9453
|
showRecent && recentColors.length > 0 && /* @__PURE__ */ jsxs37("div", { children: [
|
|
9392
9454
|
/* @__PURE__ */ jsxs37("div", { className: "text-xs font-medium text-muted-foreground mb-2 flex items-center gap-1.5", children: [
|
|
9393
|
-
/* @__PURE__ */
|
|
9455
|
+
/* @__PURE__ */ jsx41(History, { className: "w-3.5 h-3.5" }),
|
|
9394
9456
|
" Recent"
|
|
9395
9457
|
] }),
|
|
9396
|
-
/* @__PURE__ */
|
|
9458
|
+
/* @__PURE__ */ jsx41("div", { className: "flex gap-2 flex-wrap", children: recentColors.map((c, i) => /* @__PURE__ */ jsx41(
|
|
9397
9459
|
Swatch,
|
|
9398
9460
|
{
|
|
9399
9461
|
color: c,
|
|
@@ -9410,11 +9472,11 @@ function ColorPicker({
|
|
|
9410
9472
|
)) })
|
|
9411
9473
|
] }),
|
|
9412
9474
|
showHarmony && harmony && variant !== "minimal" && /* @__PURE__ */ jsxs37("div", { children: [
|
|
9413
|
-
/* @__PURE__ */
|
|
9475
|
+
/* @__PURE__ */ jsx41("div", { className: "text-xs font-medium text-muted-foreground mb-2", children: "Harmony" }),
|
|
9414
9476
|
/* @__PURE__ */ jsxs37("div", { className: "space-y-2", children: [
|
|
9415
9477
|
/* @__PURE__ */ jsxs37("div", { className: "flex items-center gap-2", children: [
|
|
9416
|
-
/* @__PURE__ */
|
|
9417
|
-
/* @__PURE__ */
|
|
9478
|
+
/* @__PURE__ */ jsx41("span", { className: "text-xs text-muted-foreground w-24", children: "Complementary" }),
|
|
9479
|
+
/* @__PURE__ */ jsx41(
|
|
9418
9480
|
Swatch,
|
|
9419
9481
|
{
|
|
9420
9482
|
color: harmony.complementary,
|
|
@@ -9428,11 +9490,11 @@ function ColorPicker({
|
|
|
9428
9490
|
}
|
|
9429
9491
|
}
|
|
9430
9492
|
),
|
|
9431
|
-
/* @__PURE__ */
|
|
9493
|
+
/* @__PURE__ */ jsx41("span", { className: "text-xs font-mono text-muted-foreground", children: harmony.complementary })
|
|
9432
9494
|
] }),
|
|
9433
9495
|
/* @__PURE__ */ jsxs37("div", { className: "flex items-center gap-2", children: [
|
|
9434
|
-
/* @__PURE__ */
|
|
9435
|
-
/* @__PURE__ */
|
|
9496
|
+
/* @__PURE__ */ jsx41("span", { className: "text-xs text-muted-foreground w-24", children: "Triadic" }),
|
|
9497
|
+
/* @__PURE__ */ jsx41("div", { className: "flex gap-2", children: harmony.triadic.map((c) => /* @__PURE__ */ jsx41(
|
|
9436
9498
|
Swatch,
|
|
9437
9499
|
{
|
|
9438
9500
|
color: c,
|
|
@@ -9449,8 +9511,8 @@ function ColorPicker({
|
|
|
9449
9511
|
)) })
|
|
9450
9512
|
] }),
|
|
9451
9513
|
/* @__PURE__ */ jsxs37("div", { className: "flex items-center gap-2", children: [
|
|
9452
|
-
/* @__PURE__ */
|
|
9453
|
-
/* @__PURE__ */
|
|
9514
|
+
/* @__PURE__ */ jsx41("span", { className: "text-xs text-muted-foreground w-24", children: "Analogous" }),
|
|
9515
|
+
/* @__PURE__ */ jsx41("div", { className: "flex gap-2", children: harmony.analogous.map((c) => /* @__PURE__ */ jsx41(
|
|
9454
9516
|
Swatch,
|
|
9455
9517
|
{
|
|
9456
9518
|
color: c,
|
|
@@ -9475,7 +9537,7 @@ function ColorPicker({
|
|
|
9475
9537
|
|
|
9476
9538
|
// ../../components/ui/Grid.tsx
|
|
9477
9539
|
import React35, { useId as useId6 } from "react";
|
|
9478
|
-
import { Fragment as Fragment15, jsx as
|
|
9540
|
+
import { Fragment as Fragment15, jsx as jsx42, jsxs as jsxs38 } from "react/jsx-runtime";
|
|
9479
9541
|
var BP_MIN = {
|
|
9480
9542
|
sm: 640,
|
|
9481
9543
|
md: 768,
|
|
@@ -9595,7 +9657,7 @@ var GridRoot = React35.forwardRef(
|
|
|
9595
9657
|
style,
|
|
9596
9658
|
...rest,
|
|
9597
9659
|
children: [
|
|
9598
|
-
/* @__PURE__ */
|
|
9660
|
+
/* @__PURE__ */ jsx42("style", { dangerouslySetInnerHTML: { __html: css } }),
|
|
9599
9661
|
children
|
|
9600
9662
|
]
|
|
9601
9663
|
}
|
|
@@ -9638,7 +9700,7 @@ var GridItem = React35.forwardRef(
|
|
|
9638
9700
|
st.animation = `uvGridItemFadeIn 0.5s ease-out forwards`;
|
|
9639
9701
|
}
|
|
9640
9702
|
return /* @__PURE__ */ jsxs38(Fragment15, { children: [
|
|
9641
|
-
animationDelay != null && /* @__PURE__ */
|
|
9703
|
+
animationDelay != null && /* @__PURE__ */ jsx42(
|
|
9642
9704
|
"style",
|
|
9643
9705
|
{
|
|
9644
9706
|
dangerouslySetInnerHTML: {
|
|
@@ -9646,7 +9708,7 @@ var GridItem = React35.forwardRef(
|
|
|
9646
9708
|
}
|
|
9647
9709
|
}
|
|
9648
9710
|
),
|
|
9649
|
-
/* @__PURE__ */
|
|
9711
|
+
/* @__PURE__ */ jsx42(
|
|
9650
9712
|
"div",
|
|
9651
9713
|
{
|
|
9652
9714
|
ref,
|
|
@@ -9667,21 +9729,21 @@ var Grid_default = Grid;
|
|
|
9667
9729
|
|
|
9668
9730
|
// ../../components/ui/ClientOnly.tsx
|
|
9669
9731
|
import { useEffect as useEffect18, useState as useState31 } from "react";
|
|
9670
|
-
import { Fragment as Fragment16, jsx as
|
|
9732
|
+
import { Fragment as Fragment16, jsx as jsx43 } from "react/jsx-runtime";
|
|
9671
9733
|
function ClientOnly({ children, fallback = null }) {
|
|
9672
9734
|
const [hasMounted, setHasMounted] = useState31(false);
|
|
9673
9735
|
useEffect18(() => {
|
|
9674
9736
|
setHasMounted(true);
|
|
9675
9737
|
}, []);
|
|
9676
9738
|
if (!hasMounted) {
|
|
9677
|
-
return /* @__PURE__ */
|
|
9739
|
+
return /* @__PURE__ */ jsx43(Fragment16, { children: fallback });
|
|
9678
9740
|
}
|
|
9679
|
-
return /* @__PURE__ */
|
|
9741
|
+
return /* @__PURE__ */ jsx43(Fragment16, { children });
|
|
9680
9742
|
}
|
|
9681
9743
|
|
|
9682
9744
|
// ../../components/ui/Loading.tsx
|
|
9683
9745
|
import { Activity as Activity3 } from "lucide-react";
|
|
9684
|
-
import { jsx as
|
|
9746
|
+
import { jsx as jsx44, jsxs as jsxs39 } from "react/jsx-runtime";
|
|
9685
9747
|
var LoadingSpinner = ({
|
|
9686
9748
|
size = "md",
|
|
9687
9749
|
className,
|
|
@@ -9697,7 +9759,7 @@ var LoadingSpinner = ({
|
|
|
9697
9759
|
foreground: "text-foreground",
|
|
9698
9760
|
muted: "text-muted-foreground"
|
|
9699
9761
|
};
|
|
9700
|
-
return /* @__PURE__ */
|
|
9762
|
+
return /* @__PURE__ */ jsx44(
|
|
9701
9763
|
Activity3,
|
|
9702
9764
|
{
|
|
9703
9765
|
className: cn(
|
|
@@ -9718,7 +9780,7 @@ var LoadingDots = ({
|
|
|
9718
9780
|
foreground: "bg-foreground",
|
|
9719
9781
|
muted: "bg-muted-foreground"
|
|
9720
9782
|
};
|
|
9721
|
-
return /* @__PURE__ */
|
|
9783
|
+
return /* @__PURE__ */ jsx44("div", { className: cn("flex items-center space-x-1", className), children: [0, 1, 2].map((i) => /* @__PURE__ */ jsx44(
|
|
9722
9784
|
"div",
|
|
9723
9785
|
{
|
|
9724
9786
|
className: cn(
|
|
@@ -9740,7 +9802,7 @@ var LoadingBar = ({
|
|
|
9740
9802
|
label
|
|
9741
9803
|
}) => {
|
|
9742
9804
|
const pct = progress ? Math.min(Math.max(progress, 0), 100) : void 0;
|
|
9743
|
-
return /* @__PURE__ */
|
|
9805
|
+
return /* @__PURE__ */ jsx44(
|
|
9744
9806
|
"div",
|
|
9745
9807
|
{
|
|
9746
9808
|
className: cn("w-full bg-muted rounded-full h-2", className),
|
|
@@ -9749,7 +9811,7 @@ var LoadingBar = ({
|
|
|
9749
9811
|
"aria-valuemax": pct === void 0 ? void 0 : 100,
|
|
9750
9812
|
"aria-valuenow": pct === void 0 ? void 0 : Math.round(pct),
|
|
9751
9813
|
"aria-label": label || "Loading",
|
|
9752
|
-
children: /* @__PURE__ */
|
|
9814
|
+
children: /* @__PURE__ */ jsx44(
|
|
9753
9815
|
"div",
|
|
9754
9816
|
{
|
|
9755
9817
|
className: cn(
|
|
@@ -9767,9 +9829,9 @@ var LoadingBar = ({
|
|
|
9767
9829
|
|
|
9768
9830
|
// ../../components/ui/Table.tsx
|
|
9769
9831
|
import React36 from "react";
|
|
9770
|
-
import { jsx as
|
|
9832
|
+
import { jsx as jsx45, jsxs as jsxs40 } from "react/jsx-runtime";
|
|
9771
9833
|
var Table = React36.forwardRef(
|
|
9772
|
-
({ className, containerClassName, ...props }, ref) => /* @__PURE__ */
|
|
9834
|
+
({ className, containerClassName, ...props }, ref) => /* @__PURE__ */ jsx45(
|
|
9773
9835
|
"div",
|
|
9774
9836
|
{
|
|
9775
9837
|
className: cn(
|
|
@@ -9779,7 +9841,7 @@ var Table = React36.forwardRef(
|
|
|
9779
9841
|
"backdrop-blur-sm transition-all duration-300",
|
|
9780
9842
|
containerClassName
|
|
9781
9843
|
),
|
|
9782
|
-
children: /* @__PURE__ */
|
|
9844
|
+
children: /* @__PURE__ */ jsx45(
|
|
9783
9845
|
"table",
|
|
9784
9846
|
{
|
|
9785
9847
|
ref,
|
|
@@ -9810,7 +9872,7 @@ var TableHeader = React36.forwardRef(
|
|
|
9810
9872
|
)
|
|
9811
9873
|
);
|
|
9812
9874
|
TableHeader.displayName = "TableHeader";
|
|
9813
|
-
var TableBody = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
9875
|
+
var TableBody = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx45(
|
|
9814
9876
|
"tbody",
|
|
9815
9877
|
{
|
|
9816
9878
|
ref,
|
|
@@ -9819,7 +9881,7 @@ var TableBody = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE_
|
|
|
9819
9881
|
}
|
|
9820
9882
|
));
|
|
9821
9883
|
TableBody.displayName = "TableBody";
|
|
9822
|
-
var TableFooter = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
9884
|
+
var TableFooter = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx45(
|
|
9823
9885
|
"tfoot",
|
|
9824
9886
|
{
|
|
9825
9887
|
ref,
|
|
@@ -9831,7 +9893,7 @@ var TableFooter = React36.forwardRef(({ className, ...props }, ref) => /* @__PUR
|
|
|
9831
9893
|
}
|
|
9832
9894
|
));
|
|
9833
9895
|
TableFooter.displayName = "TableFooter";
|
|
9834
|
-
var TableRow = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
9896
|
+
var TableRow = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx45(
|
|
9835
9897
|
"tr",
|
|
9836
9898
|
{
|
|
9837
9899
|
ref,
|
|
@@ -9845,7 +9907,7 @@ var TableRow = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__
|
|
|
9845
9907
|
}
|
|
9846
9908
|
));
|
|
9847
9909
|
TableRow.displayName = "TableRow";
|
|
9848
|
-
var TableHead = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
9910
|
+
var TableHead = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx45(
|
|
9849
9911
|
"th",
|
|
9850
9912
|
{
|
|
9851
9913
|
ref,
|
|
@@ -9857,7 +9919,7 @@ var TableHead = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE_
|
|
|
9857
9919
|
}
|
|
9858
9920
|
));
|
|
9859
9921
|
TableHead.displayName = "TableHead";
|
|
9860
|
-
var TableCell = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
9922
|
+
var TableCell = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx45(
|
|
9861
9923
|
"td",
|
|
9862
9924
|
{
|
|
9863
9925
|
ref,
|
|
@@ -9866,7 +9928,7 @@ var TableCell = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE_
|
|
|
9866
9928
|
}
|
|
9867
9929
|
));
|
|
9868
9930
|
TableCell.displayName = "TableCell";
|
|
9869
|
-
var TableCaption = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
9931
|
+
var TableCaption = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx45(
|
|
9870
9932
|
"caption",
|
|
9871
9933
|
{
|
|
9872
9934
|
ref,
|
|
@@ -9880,7 +9942,7 @@ TableCaption.displayName = "TableCaption";
|
|
|
9880
9942
|
import { Filter as FilterIcon } from "lucide-react";
|
|
9881
9943
|
import React37 from "react";
|
|
9882
9944
|
import { useTranslations as useTranslations7 } from "next-intl";
|
|
9883
|
-
import { Fragment as Fragment17, jsx as
|
|
9945
|
+
import { Fragment as Fragment17, jsx as jsx46, jsxs as jsxs41 } from "react/jsx-runtime";
|
|
9884
9946
|
function useDebounced(value, delay = 300) {
|
|
9885
9947
|
const [debounced, setDebounced] = React37.useState(value);
|
|
9886
9948
|
React37.useEffect(() => {
|
|
@@ -9944,7 +10006,7 @@ function DataTable({
|
|
|
9944
10006
|
className: "h-8 w-full text-sm"
|
|
9945
10007
|
};
|
|
9946
10008
|
if (col.filter.type === "text") {
|
|
9947
|
-
return /* @__PURE__ */
|
|
10009
|
+
return /* @__PURE__ */ jsx46(
|
|
9948
10010
|
Input_default,
|
|
9949
10011
|
{
|
|
9950
10012
|
...commonProps,
|
|
@@ -9959,7 +10021,7 @@ function DataTable({
|
|
|
9959
10021
|
}
|
|
9960
10022
|
if (col.filter.type === "select") {
|
|
9961
10023
|
const options = col.filter.options || [];
|
|
9962
|
-
return /* @__PURE__ */
|
|
10024
|
+
return /* @__PURE__ */ jsx46(
|
|
9963
10025
|
Combobox,
|
|
9964
10026
|
{
|
|
9965
10027
|
options: ["", ...options],
|
|
@@ -9975,7 +10037,7 @@ function DataTable({
|
|
|
9975
10037
|
);
|
|
9976
10038
|
}
|
|
9977
10039
|
if (col.filter.type === "date") {
|
|
9978
|
-
return /* @__PURE__ */
|
|
10040
|
+
return /* @__PURE__ */ jsx46(
|
|
9979
10041
|
DatePicker,
|
|
9980
10042
|
{
|
|
9981
10043
|
placeholder: col.filter.placeholder || `Select ${String(col.title)}`,
|
|
@@ -9989,7 +10051,7 @@ function DataTable({
|
|
|
9989
10051
|
}
|
|
9990
10052
|
return null;
|
|
9991
10053
|
};
|
|
9992
|
-
const renderHeader = /* @__PURE__ */
|
|
10054
|
+
const renderHeader = /* @__PURE__ */ jsx46(TableRow, { children: visibleColumns.map((col, colIdx) => /* @__PURE__ */ jsx46(
|
|
9993
10055
|
TableHead,
|
|
9994
10056
|
{
|
|
9995
10057
|
style: { width: col.width },
|
|
@@ -10003,8 +10065,8 @@ function DataTable({
|
|
|
10003
10065
|
const isRightAlign = col.align === "right" || !col.align && headerAlign === "right";
|
|
10004
10066
|
const isCenterAlign = col.align === "center" || !col.align && headerAlign === "center";
|
|
10005
10067
|
const titleContent = /* @__PURE__ */ jsxs41("div", { className: "flex items-center gap-1 min-w-0 flex-shrink", children: [
|
|
10006
|
-
/* @__PURE__ */
|
|
10007
|
-
col.sortable && /* @__PURE__ */
|
|
10068
|
+
/* @__PURE__ */ jsx46("span", { className: "truncate font-medium text-sm", children: col.title }),
|
|
10069
|
+
col.sortable && /* @__PURE__ */ jsx46(
|
|
10008
10070
|
"button",
|
|
10009
10071
|
{
|
|
10010
10072
|
className: cn(
|
|
@@ -10022,7 +10084,7 @@ function DataTable({
|
|
|
10022
10084
|
"aria-label": "Sort",
|
|
10023
10085
|
title: `Sort by ${String(col.title)}`,
|
|
10024
10086
|
children: /* @__PURE__ */ jsxs41("svg", { width: "14", height: "14", viewBox: "0 0 20 20", fill: "none", className: "inline-block", children: [
|
|
10025
|
-
/* @__PURE__ */
|
|
10087
|
+
/* @__PURE__ */ jsx46(
|
|
10026
10088
|
"path",
|
|
10027
10089
|
{
|
|
10028
10090
|
d: "M7 8l3-3 3 3",
|
|
@@ -10033,7 +10095,7 @@ function DataTable({
|
|
|
10033
10095
|
opacity: sort?.key === col.key && sort.order === "asc" ? 1 : 0.4
|
|
10034
10096
|
}
|
|
10035
10097
|
),
|
|
10036
|
-
/* @__PURE__ */
|
|
10098
|
+
/* @__PURE__ */ jsx46(
|
|
10037
10099
|
"path",
|
|
10038
10100
|
{
|
|
10039
10101
|
d: "M7 12l3 3 3-3",
|
|
@@ -10048,11 +10110,11 @@ function DataTable({
|
|
|
10048
10110
|
}
|
|
10049
10111
|
)
|
|
10050
10112
|
] });
|
|
10051
|
-
const filterContent = col.filter && /* @__PURE__ */
|
|
10113
|
+
const filterContent = col.filter && /* @__PURE__ */ jsx46(
|
|
10052
10114
|
Popover,
|
|
10053
10115
|
{
|
|
10054
10116
|
placement: isRightAlign ? "bottom-end" : "bottom-start",
|
|
10055
|
-
trigger: /* @__PURE__ */
|
|
10117
|
+
trigger: /* @__PURE__ */ jsx46(
|
|
10056
10118
|
"button",
|
|
10057
10119
|
{
|
|
10058
10120
|
className: cn(
|
|
@@ -10062,7 +10124,7 @@ function DataTable({
|
|
|
10062
10124
|
),
|
|
10063
10125
|
"aria-label": "Filter",
|
|
10064
10126
|
title: "Filter",
|
|
10065
|
-
children: /* @__PURE__ */
|
|
10127
|
+
children: /* @__PURE__ */ jsx46(FilterIcon, { className: "h-4 w-4" })
|
|
10066
10128
|
}
|
|
10067
10129
|
),
|
|
10068
10130
|
children: /* @__PURE__ */ jsxs41("div", { className: "w-48 p-2 space-y-2", children: [
|
|
@@ -10071,7 +10133,7 @@ function DataTable({
|
|
|
10071
10133
|
col.title
|
|
10072
10134
|
] }),
|
|
10073
10135
|
renderFilterControl(col),
|
|
10074
|
-
filters[col.key] && /* @__PURE__ */
|
|
10136
|
+
filters[col.key] && /* @__PURE__ */ jsx46(
|
|
10075
10137
|
"button",
|
|
10076
10138
|
{
|
|
10077
10139
|
onClick: () => {
|
|
@@ -10089,7 +10151,7 @@ function DataTable({
|
|
|
10089
10151
|
] })
|
|
10090
10152
|
}
|
|
10091
10153
|
);
|
|
10092
|
-
return /* @__PURE__ */
|
|
10154
|
+
return /* @__PURE__ */ jsx46(
|
|
10093
10155
|
"div",
|
|
10094
10156
|
{
|
|
10095
10157
|
className: cn(
|
|
@@ -10152,13 +10214,13 @@ function DataTable({
|
|
|
10152
10214
|
}, [processedData, curPage, curPageSize]);
|
|
10153
10215
|
return /* @__PURE__ */ jsxs41("div", { className: cn("space-y-2", className), children: [
|
|
10154
10216
|
/* @__PURE__ */ jsxs41("div", { className: "flex items-center justify-between gap-4 mb-1", children: [
|
|
10155
|
-
/* @__PURE__ */
|
|
10217
|
+
/* @__PURE__ */ jsx46("div", { className: "text-sm text-muted-foreground", children: caption }),
|
|
10156
10218
|
/* @__PURE__ */ jsxs41("div", { className: "flex items-center gap-2", children: [
|
|
10157
|
-
enableDensityToggle && /* @__PURE__ */
|
|
10219
|
+
enableDensityToggle && /* @__PURE__ */ jsx46(
|
|
10158
10220
|
DropdownMenu_default,
|
|
10159
10221
|
{
|
|
10160
10222
|
trigger: /* @__PURE__ */ jsxs41(Button_default, { variant: "ghost", size: "sm", className: "h-8 px-2", children: [
|
|
10161
|
-
/* @__PURE__ */
|
|
10223
|
+
/* @__PURE__ */ jsx46("svg", { className: "w-4 h-4 mr-1", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx46("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 6h16M4 10h16M4 14h16M4 18h16" }) }),
|
|
10162
10224
|
labels?.density || t("density")
|
|
10163
10225
|
] }),
|
|
10164
10226
|
items: [
|
|
@@ -10168,11 +10230,11 @@ function DataTable({
|
|
|
10168
10230
|
]
|
|
10169
10231
|
}
|
|
10170
10232
|
),
|
|
10171
|
-
enableColumnVisibilityToggle && /* @__PURE__ */
|
|
10233
|
+
enableColumnVisibilityToggle && /* @__PURE__ */ jsx46(
|
|
10172
10234
|
DropdownMenu_default,
|
|
10173
10235
|
{
|
|
10174
10236
|
trigger: /* @__PURE__ */ jsxs41(Button_default, { variant: "ghost", size: "sm", className: "h-8 px-2", children: [
|
|
10175
|
-
/* @__PURE__ */
|
|
10237
|
+
/* @__PURE__ */ jsx46("svg", { className: "w-4 h-4 mr-1", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx46(
|
|
10176
10238
|
"path",
|
|
10177
10239
|
{
|
|
10178
10240
|
strokeLinecap: "round",
|
|
@@ -10190,19 +10252,19 @@ function DataTable({
|
|
|
10190
10252
|
setVisibleCols((prev) => prev.includes(c.key) ? prev.filter((k) => k !== c.key) : [...prev, c.key]);
|
|
10191
10253
|
},
|
|
10192
10254
|
children: [
|
|
10193
|
-
/* @__PURE__ */
|
|
10194
|
-
/* @__PURE__ */
|
|
10255
|
+
/* @__PURE__ */ jsx46("input", { type: "checkbox", className: "mr-2 rounded border-border", readOnly: true, checked: visibleCols.includes(c.key) }),
|
|
10256
|
+
/* @__PURE__ */ jsx46("span", { className: "truncate", children: c.title })
|
|
10195
10257
|
]
|
|
10196
10258
|
},
|
|
10197
10259
|
c.key
|
|
10198
10260
|
))
|
|
10199
10261
|
}
|
|
10200
10262
|
),
|
|
10201
|
-
enableHeaderAlignToggle && /* @__PURE__ */
|
|
10263
|
+
enableHeaderAlignToggle && /* @__PURE__ */ jsx46(
|
|
10202
10264
|
DropdownMenu_default,
|
|
10203
10265
|
{
|
|
10204
10266
|
trigger: /* @__PURE__ */ jsxs41(Button_default, { variant: "ghost", size: "sm", className: "h-8 px-2", children: [
|
|
10205
|
-
/* @__PURE__ */
|
|
10267
|
+
/* @__PURE__ */ jsx46("svg", { className: "w-4 h-4 mr-1", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx46("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 6h16M4 12h10M4 18h16" }) }),
|
|
10206
10268
|
labels?.headerAlign || t("headerAlign")
|
|
10207
10269
|
] }),
|
|
10208
10270
|
items: [
|
|
@@ -10215,17 +10277,17 @@ function DataTable({
|
|
|
10215
10277
|
toolbar
|
|
10216
10278
|
] })
|
|
10217
10279
|
] }),
|
|
10218
|
-
/* @__PURE__ */
|
|
10280
|
+
/* @__PURE__ */ jsx46("div", { className: cn("relative rounded-md border border-border/50 overflow-hidden", loading2 && "opacity-60 pointer-events-none"), children: /* @__PURE__ */ jsxs41(
|
|
10219
10281
|
Table,
|
|
10220
10282
|
{
|
|
10221
10283
|
containerClassName: "border-0 md:border-0 rounded-none md:rounded-none shadow-none bg-transparent",
|
|
10222
10284
|
className: "[&_thead]:sticky [&_thead]:top-0 [&_thead]:z-[5] [&_thead]:bg-background [&_thead]:backdrop-blur-sm",
|
|
10223
10285
|
children: [
|
|
10224
|
-
/* @__PURE__ */
|
|
10225
|
-
/* @__PURE__ */
|
|
10286
|
+
/* @__PURE__ */ jsx46(TableHeader, { children: renderHeader }),
|
|
10287
|
+
/* @__PURE__ */ jsx46(TableBody, { children: loading2 ? /* @__PURE__ */ jsx46(TableRow, { children: /* @__PURE__ */ jsx46(TableCell, { colSpan: visibleColumns.length, className: "text-center py-8", children: /* @__PURE__ */ jsxs41("div", { className: "flex items-center justify-center gap-2 text-muted-foreground", children: [
|
|
10226
10288
|
/* @__PURE__ */ jsxs41("svg", { className: "animate-spin h-4 w-4", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", children: [
|
|
10227
|
-
/* @__PURE__ */
|
|
10228
|
-
/* @__PURE__ */
|
|
10289
|
+
/* @__PURE__ */ jsx46("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }),
|
|
10290
|
+
/* @__PURE__ */ jsx46(
|
|
10229
10291
|
"path",
|
|
10230
10292
|
{
|
|
10231
10293
|
className: "opacity-75",
|
|
@@ -10234,12 +10296,12 @@ function DataTable({
|
|
|
10234
10296
|
}
|
|
10235
10297
|
)
|
|
10236
10298
|
] }),
|
|
10237
|
-
/* @__PURE__ */
|
|
10238
|
-
] }) }) }) : !displayedData || displayedData.length === 0 ? /* @__PURE__ */
|
|
10299
|
+
/* @__PURE__ */ jsx46("span", { className: "text-sm", children: "Loading..." })
|
|
10300
|
+
] }) }) }) : !displayedData || displayedData.length === 0 ? /* @__PURE__ */ jsx46(TableRow, { children: /* @__PURE__ */ jsx46(TableCell, { colSpan: visibleColumns.length, className: "text-center py-6 text-muted-foreground", children: "No data" }) }) : displayedData.map((row, idx) => {
|
|
10239
10301
|
const isLastRow = idx === displayedData.length - 1;
|
|
10240
|
-
return /* @__PURE__ */
|
|
10302
|
+
return /* @__PURE__ */ jsx46(TableRow, { className: cn(densityRowClass, striped && idx % 2 === 0 && "bg-muted/30"), children: visibleColumns.map((col, colIdx) => {
|
|
10241
10303
|
const value = col.dataIndex ? row[col.dataIndex] : void 0;
|
|
10242
|
-
return /* @__PURE__ */
|
|
10304
|
+
return /* @__PURE__ */ jsx46(
|
|
10243
10305
|
TableCell,
|
|
10244
10306
|
{
|
|
10245
10307
|
className: cn(
|
|
@@ -10259,7 +10321,7 @@ function DataTable({
|
|
|
10259
10321
|
]
|
|
10260
10322
|
}
|
|
10261
10323
|
) }),
|
|
10262
|
-
totalItems > 0 && /* @__PURE__ */
|
|
10324
|
+
totalItems > 0 && /* @__PURE__ */ jsx46("div", { className: "border-t bg-muted/30 p-4 rounded-b-md", children: /* @__PURE__ */ jsx46(
|
|
10263
10325
|
Pagination,
|
|
10264
10326
|
{
|
|
10265
10327
|
page: curPage,
|
|
@@ -12049,7 +12111,7 @@ function useForm(props = {}) {
|
|
|
12049
12111
|
|
|
12050
12112
|
// ../../components/ui/Form.tsx
|
|
12051
12113
|
import { useTranslations as useTranslations8 } from "next-intl";
|
|
12052
|
-
import { jsx as
|
|
12114
|
+
import { jsx as jsx47, jsxs as jsxs42 } from "react/jsx-runtime";
|
|
12053
12115
|
var FormConfigContext = React39.createContext({ size: "md" });
|
|
12054
12116
|
var FormWrapper = ({
|
|
12055
12117
|
children,
|
|
@@ -12069,14 +12131,14 @@ var FormWrapper = ({
|
|
|
12069
12131
|
}
|
|
12070
12132
|
}, [JSON.stringify(initialValues)]);
|
|
12071
12133
|
const { validationSchema: _, ...formProps } = props;
|
|
12072
|
-
return /* @__PURE__ */
|
|
12134
|
+
return /* @__PURE__ */ jsx47(FormProvider, { ...methods, children: /* @__PURE__ */ jsx47(FormConfigContext.Provider, { value: { size }, children: /* @__PURE__ */ jsx47("form", { onSubmit: methods.handleSubmit(onSubmit), className, ...formProps, children }) }) });
|
|
12073
12135
|
};
|
|
12074
12136
|
var Form = FormWrapper;
|
|
12075
12137
|
var FormFieldContext = React39.createContext({});
|
|
12076
12138
|
var FormField = ({
|
|
12077
12139
|
...props
|
|
12078
12140
|
}) => {
|
|
12079
|
-
return /* @__PURE__ */
|
|
12141
|
+
return /* @__PURE__ */ jsx47(FormFieldContext.Provider, { value: { name: props.name }, children: /* @__PURE__ */ jsx47(Controller, { ...props }) });
|
|
12080
12142
|
};
|
|
12081
12143
|
var useFormField = () => {
|
|
12082
12144
|
const fieldContext = React39.useContext(FormFieldContext);
|
|
@@ -12104,7 +12166,7 @@ var useFormField = () => {
|
|
|
12104
12166
|
var FormItemContext = React39.createContext({});
|
|
12105
12167
|
var FormItem = React39.forwardRef(({ className, ...props }, ref) => {
|
|
12106
12168
|
const id = React39.useId();
|
|
12107
|
-
return /* @__PURE__ */
|
|
12169
|
+
return /* @__PURE__ */ jsx47(FormItemContext.Provider, { value: { id }, children: /* @__PURE__ */ jsx47("div", { ref, className: cn("space-y-2", className), ...props }) });
|
|
12108
12170
|
});
|
|
12109
12171
|
FormItem.displayName = "FormItem";
|
|
12110
12172
|
var FormLabel = React39.forwardRef(({ className, children, required, ...props }, ref) => {
|
|
@@ -12120,7 +12182,7 @@ var FormLabel = React39.forwardRef(({ className, children, required, ...props },
|
|
|
12120
12182
|
...props,
|
|
12121
12183
|
children: [
|
|
12122
12184
|
children,
|
|
12123
|
-
required && /* @__PURE__ */
|
|
12185
|
+
required && /* @__PURE__ */ jsx47("span", { className: "text-destructive ml-1", children: "*" })
|
|
12124
12186
|
]
|
|
12125
12187
|
}
|
|
12126
12188
|
);
|
|
@@ -12128,7 +12190,7 @@ var FormLabel = React39.forwardRef(({ className, children, required, ...props },
|
|
|
12128
12190
|
FormLabel.displayName = "FormLabel";
|
|
12129
12191
|
var FormControl = React39.forwardRef(({ ...props }, ref) => {
|
|
12130
12192
|
const { error, formItemId, formDescriptionId, formMessageId } = useFormField();
|
|
12131
|
-
return /* @__PURE__ */
|
|
12193
|
+
return /* @__PURE__ */ jsx47(
|
|
12132
12194
|
"div",
|
|
12133
12195
|
{
|
|
12134
12196
|
ref,
|
|
@@ -12142,7 +12204,7 @@ var FormControl = React39.forwardRef(({ ...props }, ref) => {
|
|
|
12142
12204
|
FormControl.displayName = "FormControl";
|
|
12143
12205
|
var FormDescription = React39.forwardRef(({ className, ...props }, ref) => {
|
|
12144
12206
|
const { formDescriptionId } = useFormField();
|
|
12145
|
-
return /* @__PURE__ */
|
|
12207
|
+
return /* @__PURE__ */ jsx47("p", { ref, id: formDescriptionId, className: cn("text-sm text-muted-foreground", className), ...props });
|
|
12146
12208
|
});
|
|
12147
12209
|
FormDescription.displayName = "FormDescription";
|
|
12148
12210
|
var FormMessage = React39.forwardRef(({ className, children, ...props }, ref) => {
|
|
@@ -12151,26 +12213,26 @@ var FormMessage = React39.forwardRef(({ className, children, ...props }, ref) =>
|
|
|
12151
12213
|
if (!body) {
|
|
12152
12214
|
return null;
|
|
12153
12215
|
}
|
|
12154
|
-
return /* @__PURE__ */
|
|
12216
|
+
return /* @__PURE__ */ jsx47("p", { ref, id: formMessageId, className: cn("text-sm font-medium text-destructive", className), ...props, children: body });
|
|
12155
12217
|
});
|
|
12156
12218
|
FormMessage.displayName = "FormMessage";
|
|
12157
|
-
var FormInput = React39.forwardRef(({ name, ...props }, ref) => /* @__PURE__ */
|
|
12219
|
+
var FormInput = React39.forwardRef(({ name, ...props }, ref) => /* @__PURE__ */ jsx47(FormConfigContext.Consumer, { children: ({ size }) => /* @__PURE__ */ jsx47(
|
|
12158
12220
|
FormField,
|
|
12159
12221
|
{
|
|
12160
12222
|
name,
|
|
12161
12223
|
render: ({ field }) => /* @__PURE__ */ jsxs42(FormItem, { children: [
|
|
12162
|
-
/* @__PURE__ */
|
|
12163
|
-
/* @__PURE__ */
|
|
12224
|
+
/* @__PURE__ */ jsx47(FormControl, { children: /* @__PURE__ */ jsx47(Input_default, { size: props.size ?? size, ...field, ...props }) }),
|
|
12225
|
+
/* @__PURE__ */ jsx47(FormMessage, {})
|
|
12164
12226
|
] })
|
|
12165
12227
|
}
|
|
12166
12228
|
) }));
|
|
12167
12229
|
FormInput.displayName = "FormInput";
|
|
12168
|
-
var FormCheckbox = React39.forwardRef(({ name, ...props }, ref) => /* @__PURE__ */
|
|
12230
|
+
var FormCheckbox = React39.forwardRef(({ name, ...props }, ref) => /* @__PURE__ */ jsx47(FormConfigContext.Consumer, { children: ({ size }) => /* @__PURE__ */ jsx47(
|
|
12169
12231
|
FormField,
|
|
12170
12232
|
{
|
|
12171
12233
|
name,
|
|
12172
12234
|
render: ({ field }) => /* @__PURE__ */ jsxs42(FormItem, { children: [
|
|
12173
|
-
/* @__PURE__ */
|
|
12235
|
+
/* @__PURE__ */ jsx47(FormControl, { children: /* @__PURE__ */ jsx47(
|
|
12174
12236
|
Checkbox,
|
|
12175
12237
|
{
|
|
12176
12238
|
ref,
|
|
@@ -12184,20 +12246,20 @@ var FormCheckbox = React39.forwardRef(({ name, ...props }, ref) => /* @__PURE__
|
|
|
12184
12246
|
...props
|
|
12185
12247
|
}
|
|
12186
12248
|
) }),
|
|
12187
|
-
/* @__PURE__ */
|
|
12249
|
+
/* @__PURE__ */ jsx47(FormMessage, {})
|
|
12188
12250
|
] })
|
|
12189
12251
|
}
|
|
12190
12252
|
) }));
|
|
12191
12253
|
FormCheckbox.displayName = "FormCheckbox";
|
|
12192
|
-
var FormActions = React39.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
12254
|
+
var FormActions = React39.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx47("div", { ref, className: cn("flex gap-2 justify-end", className), ...props }));
|
|
12193
12255
|
FormActions.displayName = "FormActions";
|
|
12194
|
-
var FormSubmitButton = React39.forwardRef(({ children, loading: loading2, ...props }, ref) => /* @__PURE__ */
|
|
12256
|
+
var FormSubmitButton = React39.forwardRef(({ children, loading: loading2, ...props }, ref) => /* @__PURE__ */ jsx47(FormConfigContext.Consumer, { children: ({ size }) => /* @__PURE__ */ jsx47(Button_default, { ref, type: "submit", size: props.size ?? size, disabled: loading2, ...props, children }) }));
|
|
12195
12257
|
FormSubmitButton.displayName = "FormSubmitButton";
|
|
12196
12258
|
|
|
12197
12259
|
// ../../components/ui/NotificationModal.tsx
|
|
12198
12260
|
import { ExternalLink } from "lucide-react";
|
|
12199
12261
|
import { useTranslations as useTranslations9 } from "next-intl";
|
|
12200
|
-
import { jsx as
|
|
12262
|
+
import { jsx as jsx48, jsxs as jsxs43 } from "react/jsx-runtime";
|
|
12201
12263
|
function NotificationModal({ isOpen, onClose, notification, titleText, openLinkText, closeText }) {
|
|
12202
12264
|
const t = useTranslations9("Common");
|
|
12203
12265
|
if (!notification) return null;
|
|
@@ -12218,7 +12280,7 @@ function NotificationModal({ isOpen, onClose, notification, titleText, openLinkT
|
|
|
12218
12280
|
onClose();
|
|
12219
12281
|
}
|
|
12220
12282
|
};
|
|
12221
|
-
return /* @__PURE__ */
|
|
12283
|
+
return /* @__PURE__ */ jsx48(
|
|
12222
12284
|
Modal_default,
|
|
12223
12285
|
{
|
|
12224
12286
|
isOpen,
|
|
@@ -12227,15 +12289,15 @@ function NotificationModal({ isOpen, onClose, notification, titleText, openLinkT
|
|
|
12227
12289
|
size: "md",
|
|
12228
12290
|
children: /* @__PURE__ */ jsxs43("div", { className: "space-y-4", children: [
|
|
12229
12291
|
/* @__PURE__ */ jsxs43("div", { className: "flex items-center gap-2 pb-2 border-b border-border", children: [
|
|
12230
|
-
/* @__PURE__ */
|
|
12292
|
+
/* @__PURE__ */ jsx48("div", { className: cn(
|
|
12231
12293
|
"w-2 h-2 rounded-full",
|
|
12232
12294
|
!notification.is_read ? "bg-primary" : "bg-border"
|
|
12233
12295
|
) }),
|
|
12234
|
-
/* @__PURE__ */
|
|
12296
|
+
/* @__PURE__ */ jsx48("span", { className: "text-xs text-muted-foreground", children: !notification.is_read ? t("newNotification") : t("readStatus") })
|
|
12235
12297
|
] }),
|
|
12236
|
-
notification.title && /* @__PURE__ */
|
|
12237
|
-
notification.body && /* @__PURE__ */
|
|
12238
|
-
/* @__PURE__ */
|
|
12298
|
+
notification.title && /* @__PURE__ */ jsx48("h3", { className: "text-lg font-semibold text-foreground", children: notification.title }),
|
|
12299
|
+
notification.body && /* @__PURE__ */ jsx48("div", { className: "text-sm text-muted-foreground whitespace-pre-wrap leading-relaxed", children: notification.body }),
|
|
12300
|
+
/* @__PURE__ */ jsx48("div", { className: "text-xs text-muted-foreground border-t border-border pt-2", children: formatTime3(notification.created_at) }),
|
|
12239
12301
|
/* @__PURE__ */ jsxs43("div", { className: "flex gap-2 justify-end pt-2", children: [
|
|
12240
12302
|
hasLink && /* @__PURE__ */ jsxs43(
|
|
12241
12303
|
Button_default,
|
|
@@ -12245,12 +12307,12 @@ function NotificationModal({ isOpen, onClose, notification, titleText, openLinkT
|
|
|
12245
12307
|
onClick: handleLinkClick,
|
|
12246
12308
|
className: "gap-2",
|
|
12247
12309
|
children: [
|
|
12248
|
-
/* @__PURE__ */
|
|
12310
|
+
/* @__PURE__ */ jsx48(ExternalLink, { className: "w-4 h-4" }),
|
|
12249
12311
|
openLinkText || t("openLink")
|
|
12250
12312
|
]
|
|
12251
12313
|
}
|
|
12252
12314
|
),
|
|
12253
|
-
/* @__PURE__ */
|
|
12315
|
+
/* @__PURE__ */ jsx48(
|
|
12254
12316
|
Button_default,
|
|
12255
12317
|
{
|
|
12256
12318
|
variant: "ghost",
|
|
@@ -12270,159 +12332,9 @@ var NotificationModal_default = NotificationModal;
|
|
|
12270
12332
|
import Link2 from "next/link";
|
|
12271
12333
|
import { usePathname } from "next/navigation";
|
|
12272
12334
|
import { Phone } from "lucide-react";
|
|
12273
|
-
|
|
12274
|
-
// ../../node_modules/react-icons/lib/iconBase.mjs
|
|
12275
|
-
import React41 from "react";
|
|
12276
|
-
|
|
12277
|
-
// ../../node_modules/react-icons/lib/iconContext.mjs
|
|
12278
|
-
import React40 from "react";
|
|
12279
|
-
var DefaultContext = {
|
|
12280
|
-
color: void 0,
|
|
12281
|
-
size: void 0,
|
|
12282
|
-
className: void 0,
|
|
12283
|
-
style: void 0,
|
|
12284
|
-
attr: void 0
|
|
12285
|
-
};
|
|
12286
|
-
var IconContext = React40.createContext && /* @__PURE__ */ React40.createContext(DefaultContext);
|
|
12287
|
-
|
|
12288
|
-
// ../../node_modules/react-icons/lib/iconBase.mjs
|
|
12289
|
-
var _excluded = ["attr", "size", "title"];
|
|
12290
|
-
function _objectWithoutProperties(source, excluded) {
|
|
12291
|
-
if (source == null) return {};
|
|
12292
|
-
var target = _objectWithoutPropertiesLoose(source, excluded);
|
|
12293
|
-
var key, i;
|
|
12294
|
-
if (Object.getOwnPropertySymbols) {
|
|
12295
|
-
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
|
|
12296
|
-
for (i = 0; i < sourceSymbolKeys.length; i++) {
|
|
12297
|
-
key = sourceSymbolKeys[i];
|
|
12298
|
-
if (excluded.indexOf(key) >= 0) continue;
|
|
12299
|
-
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
|
12300
|
-
target[key] = source[key];
|
|
12301
|
-
}
|
|
12302
|
-
}
|
|
12303
|
-
return target;
|
|
12304
|
-
}
|
|
12305
|
-
function _objectWithoutPropertiesLoose(source, excluded) {
|
|
12306
|
-
if (source == null) return {};
|
|
12307
|
-
var target = {};
|
|
12308
|
-
for (var key in source) {
|
|
12309
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
12310
|
-
if (excluded.indexOf(key) >= 0) continue;
|
|
12311
|
-
target[key] = source[key];
|
|
12312
|
-
}
|
|
12313
|
-
}
|
|
12314
|
-
return target;
|
|
12315
|
-
}
|
|
12316
|
-
function _extends() {
|
|
12317
|
-
_extends = Object.assign ? Object.assign.bind() : function(target) {
|
|
12318
|
-
for (var i = 1; i < arguments.length; i++) {
|
|
12319
|
-
var source = arguments[i];
|
|
12320
|
-
for (var key in source) {
|
|
12321
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
12322
|
-
target[key] = source[key];
|
|
12323
|
-
}
|
|
12324
|
-
}
|
|
12325
|
-
}
|
|
12326
|
-
return target;
|
|
12327
|
-
};
|
|
12328
|
-
return _extends.apply(this, arguments);
|
|
12329
|
-
}
|
|
12330
|
-
function ownKeys(e, r) {
|
|
12331
|
-
var t = Object.keys(e);
|
|
12332
|
-
if (Object.getOwnPropertySymbols) {
|
|
12333
|
-
var o = Object.getOwnPropertySymbols(e);
|
|
12334
|
-
r && (o = o.filter(function(r2) {
|
|
12335
|
-
return Object.getOwnPropertyDescriptor(e, r2).enumerable;
|
|
12336
|
-
})), t.push.apply(t, o);
|
|
12337
|
-
}
|
|
12338
|
-
return t;
|
|
12339
|
-
}
|
|
12340
|
-
function _objectSpread(e) {
|
|
12341
|
-
for (var r = 1; r < arguments.length; r++) {
|
|
12342
|
-
var t = null != arguments[r] ? arguments[r] : {};
|
|
12343
|
-
r % 2 ? ownKeys(Object(t), true).forEach(function(r2) {
|
|
12344
|
-
_defineProperty(e, r2, t[r2]);
|
|
12345
|
-
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function(r2) {
|
|
12346
|
-
Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t, r2));
|
|
12347
|
-
});
|
|
12348
|
-
}
|
|
12349
|
-
return e;
|
|
12350
|
-
}
|
|
12351
|
-
function _defineProperty(obj, key, value) {
|
|
12352
|
-
key = _toPropertyKey(key);
|
|
12353
|
-
if (key in obj) {
|
|
12354
|
-
Object.defineProperty(obj, key, { value, enumerable: true, configurable: true, writable: true });
|
|
12355
|
-
} else {
|
|
12356
|
-
obj[key] = value;
|
|
12357
|
-
}
|
|
12358
|
-
return obj;
|
|
12359
|
-
}
|
|
12360
|
-
function _toPropertyKey(t) {
|
|
12361
|
-
var i = _toPrimitive(t, "string");
|
|
12362
|
-
return "symbol" == typeof i ? i : i + "";
|
|
12363
|
-
}
|
|
12364
|
-
function _toPrimitive(t, r) {
|
|
12365
|
-
if ("object" != typeof t || !t) return t;
|
|
12366
|
-
var e = t[Symbol.toPrimitive];
|
|
12367
|
-
if (void 0 !== e) {
|
|
12368
|
-
var i = e.call(t, r || "default");
|
|
12369
|
-
if ("object" != typeof i) return i;
|
|
12370
|
-
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
12371
|
-
}
|
|
12372
|
-
return ("string" === r ? String : Number)(t);
|
|
12373
|
-
}
|
|
12374
|
-
function Tree2Element(tree) {
|
|
12375
|
-
return tree && tree.map((node, i) => /* @__PURE__ */ React41.createElement(node.tag, _objectSpread({
|
|
12376
|
-
key: i
|
|
12377
|
-
}, node.attr), Tree2Element(node.child)));
|
|
12378
|
-
}
|
|
12379
|
-
function GenIcon(data) {
|
|
12380
|
-
return (props) => /* @__PURE__ */ React41.createElement(IconBase, _extends({
|
|
12381
|
-
attr: _objectSpread({}, data.attr)
|
|
12382
|
-
}, props), Tree2Element(data.child));
|
|
12383
|
-
}
|
|
12384
|
-
function IconBase(props) {
|
|
12385
|
-
var elem = (conf) => {
|
|
12386
|
-
var {
|
|
12387
|
-
attr,
|
|
12388
|
-
size,
|
|
12389
|
-
title
|
|
12390
|
-
} = props, svgProps = _objectWithoutProperties(props, _excluded);
|
|
12391
|
-
var computedSize = size || conf.size || "1em";
|
|
12392
|
-
var className;
|
|
12393
|
-
if (conf.className) className = conf.className;
|
|
12394
|
-
if (props.className) className = (className ? className + " " : "") + props.className;
|
|
12395
|
-
return /* @__PURE__ */ React41.createElement("svg", _extends({
|
|
12396
|
-
stroke: "currentColor",
|
|
12397
|
-
fill: "currentColor",
|
|
12398
|
-
strokeWidth: "0"
|
|
12399
|
-
}, conf.attr, attr, svgProps, {
|
|
12400
|
-
className,
|
|
12401
|
-
style: _objectSpread(_objectSpread({
|
|
12402
|
-
color: props.color || conf.color
|
|
12403
|
-
}, conf.style), props.style),
|
|
12404
|
-
height: computedSize,
|
|
12405
|
-
width: computedSize,
|
|
12406
|
-
xmlns: "http://www.w3.org/2000/svg"
|
|
12407
|
-
}), title && /* @__PURE__ */ React41.createElement("title", null, title), props.children);
|
|
12408
|
-
};
|
|
12409
|
-
return IconContext !== void 0 ? /* @__PURE__ */ React41.createElement(IconContext.Consumer, null, (conf) => elem(conf)) : elem(DefaultContext);
|
|
12410
|
-
}
|
|
12411
|
-
|
|
12412
|
-
// ../../node_modules/react-icons/fa/index.mjs
|
|
12413
|
-
function FaInstagram(props) {
|
|
12414
|
-
return GenIcon({ "tag": "svg", "attr": { "viewBox": "0 0 448 512" }, "child": [{ "tag": "path", "attr": { "d": "M224.1 141c-63.6 0-114.9 51.3-114.9 114.9s51.3 114.9 114.9 114.9S339 319.5 339 255.9 287.7 141 224.1 141zm0 189.6c-41.1 0-74.7-33.5-74.7-74.7s33.5-74.7 74.7-74.7 74.7 33.5 74.7 74.7-33.6 74.7-74.7 74.7zm146.4-194.3c0 14.9-12 26.8-26.8 26.8-14.9 0-26.8-12-26.8-26.8s12-26.8 26.8-26.8 26.8 12 26.8 26.8zm76.1 27.2c-1.7-35.9-9.9-67.7-36.2-93.9-26.2-26.2-58-34.4-93.9-36.2-37-2.1-147.9-2.1-184.9 0-35.8 1.7-67.6 9.9-93.9 36.1s-34.4 58-36.2 93.9c-2.1 37-2.1 147.9 0 184.9 1.7 35.9 9.9 67.7 36.2 93.9s58 34.4 93.9 36.2c37 2.1 147.9 2.1 184.9 0 35.9-1.7 67.7-9.9 93.9-36.2 26.2-26.2 34.4-58 36.2-93.9 2.1-37 2.1-147.8 0-184.8zM398.8 388c-7.8 19.6-22.9 34.7-42.6 42.6-29.5 11.7-99.5 9-132.1 9s-102.7 2.6-132.1-9c-19.6-7.8-34.7-22.9-42.6-42.6-11.7-29.5-9-99.5-9-132.1s-2.6-102.7 9-132.1c7.8-19.6 22.9-34.7 42.6-42.6 29.5-11.7 99.5-9 132.1-9s102.7-2.6 132.1 9c19.6 7.8 34.7 22.9 42.6 42.6 11.7 29.5 9 99.5 9 132.1s2.7 102.7-9 132.1z" }, "child": [] }] })(props);
|
|
12415
|
-
}
|
|
12416
|
-
|
|
12417
|
-
// ../../node_modules/react-icons/si/index.mjs
|
|
12418
|
-
function SiZalo(props) {
|
|
12419
|
-
return GenIcon({ "tag": "svg", "attr": { "role": "img", "viewBox": "0 0 24 24" }, "child": [{ "tag": "path", "attr": { "d": "M12.49 10.2722v-.4496h1.3467v6.3218h-.7704a.576.576 0 01-.5763-.5729l-.0006.0005a3.273 3.273 0 01-1.9372.6321c-1.8138 0-3.2844-1.4697-3.2844-3.2823 0-1.8125 1.4706-3.2822 3.2844-3.2822a3.273 3.273 0 011.9372.6321l.0006.0005zM6.9188 7.7896v.205c0 .3823-.051.6944-.2995 1.0605l-.03.0343c-.0542.0615-.1815.206-.2421.2843L2.024 14.8h4.8948v.7682a.5764.5764 0 01-.5767.5761H0v-.3622c0-.4436.1102-.6414.2495-.8476L4.8582 9.23H.1922V7.7896h6.7266zm8.5513 8.3548a.4805.4805 0 01-.4803-.4798v-7.875h1.4416v8.3548H15.47zM20.6934 9.6C22.52 9.6 24 11.0807 24 12.9044c0 1.8252-1.4801 3.306-3.3066 3.306-1.8264 0-3.3066-1.4808-3.3066-3.306 0-1.8237 1.4802-3.3044 3.3066-3.3044zm-10.1412 5.253c1.0675 0 1.9324-.8645 1.9324-1.9312 0-1.065-.865-1.9295-1.9324-1.9295s-1.9324.8644-1.9324 1.9295c0 1.0667.865 1.9312 1.9324 1.9312zm10.1412-.0033c1.0737 0 1.945-.8707 1.945-1.9453 0-1.073-.8713-1.9436-1.945-1.9436-1.0753 0-1.945.8706-1.945 1.9436 0 1.0746.8697 1.9453 1.945 1.9453z" }, "child": [] }] })(props);
|
|
12420
|
-
}
|
|
12421
|
-
|
|
12422
|
-
// ../../components/ui/FloatingContacts.tsx
|
|
12423
|
-
import { jsx as jsx50, jsxs as jsxs44 } from "react/jsx-runtime";
|
|
12335
|
+
import { jsx as jsx49, jsxs as jsxs44 } from "react/jsx-runtime";
|
|
12424
12336
|
function MessengerIcon(props) {
|
|
12425
|
-
return /* @__PURE__ */
|
|
12337
|
+
return /* @__PURE__ */ jsx49("svg", { viewBox: "0 0 24 24", width: 24, height: 24, "aria-hidden": "true", ...props, children: /* @__PURE__ */ jsx49(
|
|
12426
12338
|
"path",
|
|
12427
12339
|
{
|
|
12428
12340
|
d: "M12 2C6.477 2 2 6.145 2 11.235c0 2.93 1.35 5.542 3.464 7.25v3.515l3.344-1.836c.894.247 1.843.375 2.192.375 5.523 0 10-4.145 10-9.235S17.523 2 12 2zm.994 12.444l-2.563-2.73-5.004 2.73 5.507-5.84 2.626 2.729 4.942-2.729-5.508 5.84z",
|
|
@@ -12431,10 +12343,16 @@ function MessengerIcon(props) {
|
|
|
12431
12343
|
) });
|
|
12432
12344
|
}
|
|
12433
12345
|
function ZaloIcon(props) {
|
|
12434
|
-
return /* @__PURE__ */
|
|
12346
|
+
return /* @__PURE__ */ jsx49("svg", { viewBox: "0 0 48 48", width: 20, height: 20, "aria-hidden": "true", ...props, children: /* @__PURE__ */ jsx49(
|
|
12347
|
+
"path",
|
|
12348
|
+
{
|
|
12349
|
+
fill: "white",
|
|
12350
|
+
d: "M24 4C12.954 4 4 12.954 4 24s8.954 20 20 20 20-8.954 20-20S35.046 4 24 4zm6.164 27.602h-4.239c-.405 0-.732-.328-.732-.732v-7.596l-2.646 7.933c-.096.288-.366.482-.67.482h-1.773c-.304 0-.574-.194-.67-.482l-2.647-7.933v7.596c0 .405-.327.732-.732.732h-2.873c-.405 0-.732-.328-.732-.732V17.134c0-.405.327-.732.732-.732h3.91c.32 0 .602.208.698.514l2.68 8.042 2.68-8.042c.096-.306.378-.514.698-.514h3.91c.405 0 .732.327.732.732v14.466c0 .404-.327.732-.732.732z"
|
|
12351
|
+
}
|
|
12352
|
+
) });
|
|
12435
12353
|
}
|
|
12436
12354
|
function InstagramIcon(props) {
|
|
12437
|
-
return /* @__PURE__ */
|
|
12355
|
+
return /* @__PURE__ */ jsx49("svg", { viewBox: "0 0 24 24", width: 20, height: 20, "aria-hidden": "true", fill: "white", ...props, children: /* @__PURE__ */ jsx49("path", { d: "M12 2.163c3.204 0 3.584.012 4.85.07 3.252.148 4.771 1.691 4.919 4.919.058 1.265.069 1.645.069 4.849 0 3.205-.012 3.584-.069 4.849-.149 3.225-1.664 4.771-4.919 4.919-1.266.058-1.644.07-4.85.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.07-1.644-.07-4.849 0-3.204.013-3.583.07-4.849.149-3.227 1.664-4.771 4.919-4.919 1.266-.057 1.645-.069 4.849-.069zm0-2.163c-3.259 0-3.667.014-4.947.072-4.358.2-6.78 2.618-6.98 6.98-.059 1.281-.073 1.689-.073 4.948 0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98 1.281.058 1.689.072 4.948.072 3.259 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.979-6.98.059-1.28.073-1.689.073-4.948 0-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98-1.281-.059-1.69-.073-4.949-.073zm0 5.838c-3.403 0-6.162 2.759-6.162 6.162s2.759 6.163 6.162 6.163 6.162-2.759 6.162-6.163c0-3.403-2.759-6.162-6.162-6.162zm0 10.162c-2.209 0-4-1.79-4-4 0-2.209 1.791-4 4-4s4 1.791 4 4c0 2.21-1.791 4-4 4zm6.406-11.845c-.796 0-1.441.645-1.441 1.44s.645 1.44 1.441 1.44c.795 0 1.439-.645 1.439-1.44s-.644-1.44-1.439-1.44z" }) });
|
|
12438
12356
|
}
|
|
12439
12357
|
function FloatingContacts({ className }) {
|
|
12440
12358
|
const pathname = usePathname();
|
|
@@ -12470,7 +12388,7 @@ function FloatingContacts({ className }) {
|
|
|
12470
12388
|
}
|
|
12471
12389
|
];
|
|
12472
12390
|
return /* @__PURE__ */ jsxs44("div", { className: cn("fixed bottom-6 right-4 z-[100000]", "flex flex-col items-end gap-3", className), "aria-label": "Quick contacts", children: [
|
|
12473
|
-
/* @__PURE__ */
|
|
12391
|
+
/* @__PURE__ */ jsx49(
|
|
12474
12392
|
Link2,
|
|
12475
12393
|
{
|
|
12476
12394
|
href: `tel:${hotline.replace(/\D/g, "")}`,
|
|
@@ -12481,10 +12399,10 @@ function FloatingContacts({ className }) {
|
|
|
12481
12399
|
"hover:scale-105 active:scale-95 transition-transform",
|
|
12482
12400
|
"bg-[#22c55e]"
|
|
12483
12401
|
),
|
|
12484
|
-
children: /* @__PURE__ */
|
|
12402
|
+
children: /* @__PURE__ */ jsx49(Phone, { className: "w-6 h-6" })
|
|
12485
12403
|
}
|
|
12486
12404
|
),
|
|
12487
|
-
moreItems.map(({ key, href, label, bg, Icon, external }) => /* @__PURE__ */
|
|
12405
|
+
moreItems.map(({ key, href, label, bg, Icon, external }) => /* @__PURE__ */ jsx49(
|
|
12488
12406
|
Link2,
|
|
12489
12407
|
{
|
|
12490
12408
|
href,
|
|
@@ -12496,7 +12414,7 @@ function FloatingContacts({ className }) {
|
|
|
12496
12414
|
"hover:scale-105 active:scale-95 transition-transform",
|
|
12497
12415
|
bg
|
|
12498
12416
|
),
|
|
12499
|
-
children: /* @__PURE__ */
|
|
12417
|
+
children: /* @__PURE__ */ jsx49(Icon, { className: "w-6 h-6" })
|
|
12500
12418
|
},
|
|
12501
12419
|
key
|
|
12502
12420
|
))
|
|
@@ -12505,7 +12423,7 @@ function FloatingContacts({ className }) {
|
|
|
12505
12423
|
|
|
12506
12424
|
// ../../components/ui/AccessDenied.tsx
|
|
12507
12425
|
import { Lock, ShieldAlert, Ban } from "lucide-react";
|
|
12508
|
-
import { jsx as
|
|
12426
|
+
import { jsx as jsx50, jsxs as jsxs45 } from "react/jsx-runtime";
|
|
12509
12427
|
var VARIANT_STYLES = {
|
|
12510
12428
|
destructive: { bg: "bg-destructive/5", border: "border-destructive/20", text: "text-destructive" },
|
|
12511
12429
|
warning: { bg: "bg-warning/5", border: "border-warning/20", text: "text-warning" },
|
|
@@ -12526,13 +12444,13 @@ function AccessDenied({
|
|
|
12526
12444
|
}) {
|
|
12527
12445
|
const styles = VARIANT_STYLES[variant];
|
|
12528
12446
|
const UsedIcon = Icon || DEFAULT_ICONS[variant];
|
|
12529
|
-
return /* @__PURE__ */
|
|
12530
|
-
/* @__PURE__ */
|
|
12447
|
+
return /* @__PURE__ */ jsx50(Card_default, { className: cn("p-8 text-center shadow-sm", styles.bg, styles.border, className), children: /* @__PURE__ */ jsxs45("div", { className: "flex flex-col items-center gap-4", children: [
|
|
12448
|
+
/* @__PURE__ */ jsx50("div", { className: cn("p-3 rounded-lg", styles.bg.replace("/5", "/10")), children: /* @__PURE__ */ jsx50(UsedIcon, { className: cn("w-8 h-8", styles.text) }) }),
|
|
12531
12449
|
/* @__PURE__ */ jsxs45("div", { children: [
|
|
12532
|
-
/* @__PURE__ */
|
|
12533
|
-
/* @__PURE__ */
|
|
12450
|
+
/* @__PURE__ */ jsx50("h3", { className: cn("font-semibold mb-2", styles.text), children: title }),
|
|
12451
|
+
/* @__PURE__ */ jsx50("p", { className: cn(styles.text.replace("text-", "text-") + "/80", "text-sm"), children: description })
|
|
12534
12452
|
] }),
|
|
12535
|
-
children && /* @__PURE__ */
|
|
12453
|
+
children && /* @__PURE__ */ jsx50("div", { className: "mt-2 flex flex-wrap gap-2 justify-center", children })
|
|
12536
12454
|
] }) });
|
|
12537
12455
|
}
|
|
12538
12456
|
|
|
@@ -12540,7 +12458,7 @@ function AccessDenied({
|
|
|
12540
12458
|
import { Moon, Sun, Monitor } from "lucide-react";
|
|
12541
12459
|
import { useEffect as useEffect20, useRef as useRef12, useState as useState32 } from "react";
|
|
12542
12460
|
import { createPortal as createPortal10 } from "react-dom";
|
|
12543
|
-
import { Fragment as Fragment18, jsx as
|
|
12461
|
+
import { Fragment as Fragment18, jsx as jsx51, jsxs as jsxs46 } from "react/jsx-runtime";
|
|
12544
12462
|
function ThemeToggleHeadless({
|
|
12545
12463
|
theme,
|
|
12546
12464
|
onChange,
|
|
@@ -12570,7 +12488,7 @@ function ThemeToggleHeadless({
|
|
|
12570
12488
|
return { top, left, width };
|
|
12571
12489
|
};
|
|
12572
12490
|
return /* @__PURE__ */ jsxs46("div", { className: cn("relative", className), children: [
|
|
12573
|
-
/* @__PURE__ */
|
|
12491
|
+
/* @__PURE__ */ jsx51(
|
|
12574
12492
|
Button_default,
|
|
12575
12493
|
{
|
|
12576
12494
|
variant: "ghost",
|
|
@@ -12588,13 +12506,13 @@ function ThemeToggleHeadless({
|
|
|
12588
12506
|
"aria-haspopup": "menu",
|
|
12589
12507
|
"aria-expanded": isOpen,
|
|
12590
12508
|
"aria-label": labels?.heading ?? "Theme",
|
|
12591
|
-
children: /* @__PURE__ */
|
|
12509
|
+
children: /* @__PURE__ */ jsx51(CurrentIcon, { className: "h-5 w-5" })
|
|
12592
12510
|
}
|
|
12593
12511
|
),
|
|
12594
12512
|
isOpen && /* @__PURE__ */ jsxs46(Fragment18, { children: [
|
|
12595
|
-
typeof window !== "undefined" && createPortal10(/* @__PURE__ */
|
|
12513
|
+
typeof window !== "undefined" && createPortal10(/* @__PURE__ */ jsx51("div", { className: "fixed inset-0 z-[9998]", onClick: () => setIsOpen(false) }), document.body),
|
|
12596
12514
|
typeof window !== "undefined" && dropdownPosition && createPortal10(
|
|
12597
|
-
/* @__PURE__ */
|
|
12515
|
+
/* @__PURE__ */ jsx51(
|
|
12598
12516
|
"div",
|
|
12599
12517
|
{
|
|
12600
12518
|
className: "z-[9999] bg-card border border-border rounded-lg shadow-lg overflow-hidden",
|
|
@@ -12602,7 +12520,7 @@ function ThemeToggleHeadless({
|
|
|
12602
12520
|
onMouseDown: (e) => e.stopPropagation(),
|
|
12603
12521
|
role: "menu",
|
|
12604
12522
|
children: /* @__PURE__ */ jsxs46("div", { className: "p-2", children: [
|
|
12605
|
-
/* @__PURE__ */
|
|
12523
|
+
/* @__PURE__ */ jsx51("div", { className: "px-3 py-2 text-sm font-medium text-muted-foreground border-b border-border mb-2", children: labels?.heading ?? "Theme" }),
|
|
12606
12524
|
themes.map((opt) => {
|
|
12607
12525
|
const Icon = opt.icon;
|
|
12608
12526
|
const active = theme === opt.value;
|
|
@@ -12622,9 +12540,9 @@ function ThemeToggleHeadless({
|
|
|
12622
12540
|
role: "menuitemradio",
|
|
12623
12541
|
"aria-checked": active,
|
|
12624
12542
|
children: [
|
|
12625
|
-
/* @__PURE__ */
|
|
12626
|
-
/* @__PURE__ */
|
|
12627
|
-
active && /* @__PURE__ */
|
|
12543
|
+
/* @__PURE__ */ jsx51(Icon, { className: "h-4 w-4" }),
|
|
12544
|
+
/* @__PURE__ */ jsx51("span", { className: "flex-1 text-left", children: opt.label }),
|
|
12545
|
+
active && /* @__PURE__ */ jsx51("div", { className: "w-2 h-2 rounded-full bg-primary" })
|
|
12628
12546
|
]
|
|
12629
12547
|
},
|
|
12630
12548
|
opt.value
|
|
@@ -12643,7 +12561,7 @@ function ThemeToggleHeadless({
|
|
|
12643
12561
|
import { useRef as useRef13, useState as useState33 } from "react";
|
|
12644
12562
|
import { createPortal as createPortal11 } from "react-dom";
|
|
12645
12563
|
import { Globe } from "lucide-react";
|
|
12646
|
-
import { Fragment as Fragment19, jsx as
|
|
12564
|
+
import { Fragment as Fragment19, jsx as jsx52, jsxs as jsxs47 } from "react/jsx-runtime";
|
|
12647
12565
|
function LanguageSwitcherHeadless({
|
|
12648
12566
|
locales,
|
|
12649
12567
|
currentLocale,
|
|
@@ -12666,7 +12584,7 @@ function LanguageSwitcherHeadless({
|
|
|
12666
12584
|
return { top, left, width };
|
|
12667
12585
|
};
|
|
12668
12586
|
return /* @__PURE__ */ jsxs47("div", { className: cn("relative", className), children: [
|
|
12669
|
-
/* @__PURE__ */
|
|
12587
|
+
/* @__PURE__ */ jsx52(
|
|
12670
12588
|
Button_default,
|
|
12671
12589
|
{
|
|
12672
12590
|
variant: "ghost",
|
|
@@ -12685,13 +12603,13 @@ function LanguageSwitcherHeadless({
|
|
|
12685
12603
|
"aria-expanded": isOpen,
|
|
12686
12604
|
"aria-label": labels?.heading ?? "Language",
|
|
12687
12605
|
title: labels?.heading ?? "Language",
|
|
12688
|
-
children: /* @__PURE__ */
|
|
12606
|
+
children: /* @__PURE__ */ jsx52(Globe, { className: "h-5 w-5" })
|
|
12689
12607
|
}
|
|
12690
12608
|
),
|
|
12691
12609
|
isOpen && /* @__PURE__ */ jsxs47(Fragment19, { children: [
|
|
12692
|
-
typeof window !== "undefined" && createPortal11(/* @__PURE__ */
|
|
12610
|
+
typeof window !== "undefined" && createPortal11(/* @__PURE__ */ jsx52("div", { className: "fixed inset-0 z-[9998]", onClick: () => setIsOpen(false) }), document.body),
|
|
12693
12611
|
typeof window !== "undefined" && dropdownPosition && createPortal11(
|
|
12694
|
-
/* @__PURE__ */
|
|
12612
|
+
/* @__PURE__ */ jsx52(
|
|
12695
12613
|
"div",
|
|
12696
12614
|
{
|
|
12697
12615
|
className: "z-[9999] bg-card border border-border rounded-lg shadow-lg overflow-hidden",
|
|
@@ -12699,7 +12617,7 @@ function LanguageSwitcherHeadless({
|
|
|
12699
12617
|
onMouseDown: (e) => e.stopPropagation(),
|
|
12700
12618
|
role: "menu",
|
|
12701
12619
|
children: /* @__PURE__ */ jsxs47("div", { className: "p-2", children: [
|
|
12702
|
-
/* @__PURE__ */
|
|
12620
|
+
/* @__PURE__ */ jsx52("div", { className: "px-3 py-2 text-sm font-medium text-muted-foreground border-b border-border mb-2", children: labels?.heading ?? "Language" }),
|
|
12703
12621
|
locales.map((language) => /* @__PURE__ */ jsxs47(
|
|
12704
12622
|
Button_default,
|
|
12705
12623
|
{
|
|
@@ -12713,9 +12631,9 @@ function LanguageSwitcherHeadless({
|
|
|
12713
12631
|
role: "menuitemradio",
|
|
12714
12632
|
"aria-checked": currentLocale === language.code,
|
|
12715
12633
|
children: [
|
|
12716
|
-
language.flag && /* @__PURE__ */
|
|
12717
|
-
/* @__PURE__ */
|
|
12718
|
-
currentLocale === language.code && /* @__PURE__ */
|
|
12634
|
+
language.flag && /* @__PURE__ */ jsx52("span", { className: "text-lg", children: language.flag }),
|
|
12635
|
+
/* @__PURE__ */ jsx52("span", { className: "flex-1 text-left", children: language.name }),
|
|
12636
|
+
currentLocale === language.code && /* @__PURE__ */ jsx52("div", { className: "w-2 h-2 rounded-full bg-primary" })
|
|
12719
12637
|
]
|
|
12720
12638
|
},
|
|
12721
12639
|
language.code
|