@underverse-ui/underverse 0.2.11 → 0.2.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -0
- package/dist/index.cjs +1132 -1092
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +5 -3
- package/dist/index.d.ts +5 -3
- package/dist/index.js +896 -856
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -2532,216 +2532,90 @@ 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
|
-
[data-state="open"][data-combobox-dropdown] {
|
|
2541
|
-
animation: comboboxOpen 280ms cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
2542
|
-
transform-origin: top center;
|
|
2543
|
-
}
|
|
2544
|
-
|
|
2545
|
-
[data-state="closed"][data-combobox-dropdown] {
|
|
2546
|
-
animation: comboboxClose 200ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
2547
|
-
transform-origin: top center;
|
|
2548
|
-
}
|
|
2549
|
-
|
|
2550
|
-
@keyframes comboboxOpen {
|
|
2551
|
-
0% {
|
|
2552
|
-
opacity: 0;
|
|
2553
|
-
transform: translateY(-8px) scale(0.96);
|
|
2554
|
-
}
|
|
2555
|
-
50% {
|
|
2556
|
-
opacity: 0.8;
|
|
2557
|
-
transform: translateY(2px) scale(1.01);
|
|
2558
|
-
}
|
|
2559
|
-
100% {
|
|
2560
|
-
opacity: 1;
|
|
2561
|
-
transform: translateY(0) scale(1);
|
|
2562
|
-
}
|
|
2563
|
-
}
|
|
2564
|
-
|
|
2565
|
-
@keyframes comboboxClose {
|
|
2566
|
-
0% {
|
|
2567
|
-
opacity: 1;
|
|
2568
|
-
transform: translateY(0) scale(1);
|
|
2569
|
-
}
|
|
2570
|
-
100% {
|
|
2571
|
-
opacity: 0;
|
|
2572
|
-
transform: translateY(-6px) scale(0.97);
|
|
2573
|
-
}
|
|
2574
|
-
}
|
|
2575
|
-
|
|
2576
|
-
/* Generic dropdown open/close */
|
|
2577
2535
|
[data-state="open"] {
|
|
2578
|
-
animation: slideDownAndFade
|
|
2536
|
+
animation: slideDownAndFade 200ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
2579
2537
|
}
|
|
2580
2538
|
|
|
2581
2539
|
[data-state="closed"] {
|
|
2582
|
-
animation: slideUpAndFade
|
|
2540
|
+
animation: slideUpAndFade 150ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
2583
2541
|
}
|
|
2584
2542
|
|
|
2585
2543
|
@keyframes slideDownAndFade {
|
|
2586
2544
|
from {
|
|
2587
2545
|
opacity: 0;
|
|
2588
|
-
transform: translateY(-
|
|
2546
|
+
transform: translateY(-2px);
|
|
2589
2547
|
}
|
|
2590
2548
|
to {
|
|
2591
2549
|
opacity: 1;
|
|
2592
|
-
transform: translateY(0)
|
|
2550
|
+
transform: translateY(0);
|
|
2593
2551
|
}
|
|
2594
2552
|
}
|
|
2595
2553
|
|
|
2596
2554
|
@keyframes slideUpAndFade {
|
|
2597
2555
|
from {
|
|
2598
2556
|
opacity: 1;
|
|
2599
|
-
transform: translateY(0)
|
|
2557
|
+
transform: translateY(0);
|
|
2600
2558
|
}
|
|
2601
2559
|
to {
|
|
2602
2560
|
opacity: 0;
|
|
2603
|
-
transform: translateY(-
|
|
2561
|
+
transform: translateY(-2px);
|
|
2604
2562
|
}
|
|
2605
2563
|
}
|
|
2606
2564
|
|
|
2607
|
-
/* ============================================
|
|
2608
|
-
* DROPDOWN ITEMS - Staggered cascade effect
|
|
2609
|
-
* ============================================ */
|
|
2610
|
-
|
|
2611
2565
|
.dropdown-item {
|
|
2612
2566
|
opacity: 0;
|
|
2613
|
-
animation:
|
|
2614
|
-
will-change: opacity, transform;
|
|
2567
|
+
animation: fadeInUp 200ms ease-out forwards;
|
|
2615
2568
|
}
|
|
2616
2569
|
|
|
2617
|
-
@keyframes
|
|
2618
|
-
|
|
2570
|
+
@keyframes fadeInUp {
|
|
2571
|
+
from {
|
|
2619
2572
|
opacity: 0;
|
|
2620
|
-
transform:
|
|
2573
|
+
transform: translateY(4px);
|
|
2621
2574
|
}
|
|
2622
|
-
|
|
2623
|
-
opacity: 0.9;
|
|
2624
|
-
transform: translateX(2px);
|
|
2625
|
-
}
|
|
2626
|
-
100% {
|
|
2575
|
+
to {
|
|
2627
2576
|
opacity: 1;
|
|
2628
|
-
transform:
|
|
2577
|
+
transform: translateY(0);
|
|
2629
2578
|
}
|
|
2630
2579
|
}
|
|
2631
2580
|
|
|
2632
|
-
/*
|
|
2633
|
-
.dropdown-item {
|
|
2634
|
-
transition: background-color 150ms ease, transform 100ms ease;
|
|
2635
|
-
}
|
|
2636
|
-
|
|
2637
|
-
.dropdown-item:hover {
|
|
2638
|
-
transform: translateX(2px);
|
|
2639
|
-
}
|
|
2640
|
-
|
|
2641
|
-
.dropdown-item:active {
|
|
2642
|
-
transform: scale(0.98);
|
|
2643
|
-
}
|
|
2644
|
-
|
|
2645
|
-
/* ============================================
|
|
2646
|
-
* TOOLTIP / SIDE ANIMATIONS
|
|
2647
|
-
* ============================================ */
|
|
2648
|
-
|
|
2581
|
+
/* Tooltip specific animations */
|
|
2649
2582
|
[data-side="top"] {
|
|
2650
|
-
animation:
|
|
2583
|
+
animation: slideDownAndFade 200ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
2651
2584
|
}
|
|
2652
2585
|
|
|
2653
2586
|
[data-side="bottom"] {
|
|
2654
|
-
animation:
|
|
2587
|
+
animation: slideUpAndFade 200ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
2655
2588
|
}
|
|
2656
2589
|
|
|
2657
2590
|
[data-side="left"] {
|
|
2658
|
-
animation:
|
|
2591
|
+
animation: slideRightAndFade 200ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
2659
2592
|
}
|
|
2660
2593
|
|
|
2661
2594
|
[data-side="right"] {
|
|
2662
|
-
animation:
|
|
2595
|
+
animation: slideLeftAndFade 200ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
2663
2596
|
}
|
|
2664
2597
|
|
|
2665
|
-
@keyframes
|
|
2598
|
+
@keyframes slideLeftAndFade {
|
|
2666
2599
|
from {
|
|
2667
2600
|
opacity: 0;
|
|
2668
|
-
transform:
|
|
2669
|
-
}
|
|
2670
|
-
to {
|
|
2671
|
-
opacity: 1;
|
|
2672
|
-
transform: translateY(0) scale(1);
|
|
2673
|
-
}
|
|
2674
|
-
}
|
|
2675
|
-
|
|
2676
|
-
@keyframes slideFromBottom {
|
|
2677
|
-
from {
|
|
2678
|
-
opacity: 0;
|
|
2679
|
-
transform: translateY(6px) scale(0.96);
|
|
2680
|
-
}
|
|
2681
|
-
to {
|
|
2682
|
-
opacity: 1;
|
|
2683
|
-
transform: translateY(0) scale(1);
|
|
2684
|
-
}
|
|
2685
|
-
}
|
|
2686
|
-
|
|
2687
|
-
@keyframes slideFromLeft {
|
|
2688
|
-
from {
|
|
2689
|
-
opacity: 0;
|
|
2690
|
-
transform: translateX(-6px) scale(0.96);
|
|
2691
|
-
}
|
|
2692
|
-
to {
|
|
2693
|
-
opacity: 1;
|
|
2694
|
-
transform: translateX(0) scale(1);
|
|
2695
|
-
}
|
|
2696
|
-
}
|
|
2697
|
-
|
|
2698
|
-
@keyframes slideFromRight {
|
|
2699
|
-
from {
|
|
2700
|
-
opacity: 0;
|
|
2701
|
-
transform: translateX(6px) scale(0.96);
|
|
2601
|
+
transform: translateX(2px);
|
|
2702
2602
|
}
|
|
2703
2603
|
to {
|
|
2704
2604
|
opacity: 1;
|
|
2705
|
-
transform: translateX(0)
|
|
2706
|
-
}
|
|
2707
|
-
}
|
|
2708
|
-
|
|
2709
|
-
/* ============================================
|
|
2710
|
-
* UTILITY ANIMATIONS
|
|
2711
|
-
* ============================================ */
|
|
2712
|
-
|
|
2713
|
-
.animate-bounce-subtle {
|
|
2714
|
-
animation: bounceSubtle 600ms cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
2715
|
-
}
|
|
2716
|
-
|
|
2717
|
-
@keyframes bounceSubtle {
|
|
2718
|
-
0%, 100% {
|
|
2719
|
-
transform: translateY(0);
|
|
2720
|
-
}
|
|
2721
|
-
50% {
|
|
2722
|
-
transform: translateY(-4px);
|
|
2605
|
+
transform: translateX(0);
|
|
2723
2606
|
}
|
|
2724
2607
|
}
|
|
2725
2608
|
|
|
2726
|
-
|
|
2727
|
-
animation: scaleIn 200ms cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
2728
|
-
}
|
|
2729
|
-
|
|
2730
|
-
@keyframes scaleIn {
|
|
2609
|
+
@keyframes slideRightAndFade {
|
|
2731
2610
|
from {
|
|
2732
2611
|
opacity: 0;
|
|
2733
|
-
transform:
|
|
2612
|
+
transform: translateX(-2px);
|
|
2734
2613
|
}
|
|
2735
2614
|
to {
|
|
2736
2615
|
opacity: 1;
|
|
2737
|
-
transform:
|
|
2616
|
+
transform: translateX(0);
|
|
2738
2617
|
}
|
|
2739
2618
|
}
|
|
2740
|
-
|
|
2741
|
-
/* Smooth backdrop blur transition */
|
|
2742
|
-
.backdrop-animate {
|
|
2743
|
-
transition: backdrop-filter 200ms ease, background-color 200ms ease;
|
|
2744
|
-
}
|
|
2745
2619
|
`;
|
|
2746
2620
|
var useShadCNAnimations = () => {
|
|
2747
2621
|
if (typeof document !== "undefined") {
|
|
@@ -3137,7 +3011,25 @@ var SidebarSheet = ({ navigation, children, ...props }) => {
|
|
|
3137
3011
|
|
|
3138
3012
|
// ../../components/ui/Alert.tsx
|
|
3139
3013
|
import { useState as useState12 } from "react";
|
|
3140
|
-
|
|
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";
|
|
3141
3033
|
import { useTranslations as useTranslations2 } from "next-intl";
|
|
3142
3034
|
|
|
3143
3035
|
// ../../lib/constants/constants-ui/alert.ts
|
|
@@ -3151,13 +3043,13 @@ var VARIANT_STYLES_ALERT = {
|
|
|
3151
3043
|
};
|
|
3152
3044
|
|
|
3153
3045
|
// ../../components/ui/Alert.tsx
|
|
3154
|
-
import { jsx as
|
|
3046
|
+
import { jsx as jsx19, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
3155
3047
|
var variantIcons = {
|
|
3156
|
-
default: /* @__PURE__ */
|
|
3157
|
-
info: /* @__PURE__ */
|
|
3158
|
-
success: /* @__PURE__ */
|
|
3159
|
-
warning: /* @__PURE__ */
|
|
3160
|
-
error: /* @__PURE__ */
|
|
3048
|
+
default: /* @__PURE__ */ jsx19(InfoIcon, { className: "h-4 w-4 text-muted-foreground" }),
|
|
3049
|
+
info: /* @__PURE__ */ jsx19(InfoIcon, { className: "h-4 w-4 text-info" }),
|
|
3050
|
+
success: /* @__PURE__ */ jsx19(CheckCircleIcon, { className: "h-4 w-4 text-success" }),
|
|
3051
|
+
warning: /* @__PURE__ */ jsx19(WarningIcon, { className: "h-4 w-4 text-warning" }),
|
|
3052
|
+
error: /* @__PURE__ */ jsx19(ErrorIcon, { className: "h-4 w-4 text-destructive" })
|
|
3161
3053
|
};
|
|
3162
3054
|
var Alert = ({ title, description, variant = "default", className, icon, dismissible = false, onClose, actions, closeAriaLabel }) => {
|
|
3163
3055
|
const [open, setOpen] = useState12(true);
|
|
@@ -3174,19 +3066,19 @@ var Alert = ({ title, description, variant = "default", className, icon, dismiss
|
|
|
3174
3066
|
role: "alert",
|
|
3175
3067
|
"aria-live": variant === "error" ? "assertive" : "polite",
|
|
3176
3068
|
children: [
|
|
3177
|
-
/* @__PURE__ */
|
|
3069
|
+
/* @__PURE__ */ jsx19("div", { className: "pt-1", children: icon ?? variantIcons[variant] }),
|
|
3178
3070
|
/* @__PURE__ */ jsxs16("div", { className: "flex-1 min-w-0", children: [
|
|
3179
|
-
title && /* @__PURE__ */
|
|
3180
|
-
description && (typeof description === "string" ? /* @__PURE__ */
|
|
3181
|
-
actions && /* @__PURE__ */
|
|
3071
|
+
title && /* @__PURE__ */ jsx19("p", { className: "font-semibold text-sm leading-none mb-1 text-foreground", children: title }),
|
|
3072
|
+
description && (typeof description === "string" ? /* @__PURE__ */ jsx19("p", { className: "text-sm text-muted-foreground leading-relaxed break-words", children: description }) : /* @__PURE__ */ jsx19("div", { className: "text-sm text-muted-foreground leading-relaxed break-words", children: description })),
|
|
3073
|
+
actions && /* @__PURE__ */ jsx19("div", { className: "mt-2 flex flex-wrap gap-2", children: actions })
|
|
3182
3074
|
] }),
|
|
3183
|
-
dismissible && /* @__PURE__ */
|
|
3075
|
+
dismissible && /* @__PURE__ */ jsx19(
|
|
3184
3076
|
"button",
|
|
3185
3077
|
{
|
|
3186
3078
|
onClick: handleClose,
|
|
3187
3079
|
className: "rounded-md p-1 hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
3188
3080
|
"aria-label": closeAriaLabel || t("closeAlert"),
|
|
3189
|
-
children: /* @__PURE__ */
|
|
3081
|
+
children: /* @__PURE__ */ jsx19(X6, { className: "h-4 w-4" })
|
|
3190
3082
|
}
|
|
3191
3083
|
)
|
|
3192
3084
|
]
|
|
@@ -3242,7 +3134,7 @@ var loading = new LoadingManager();
|
|
|
3242
3134
|
|
|
3243
3135
|
// ../../components/ui/GlobalLoading.tsx
|
|
3244
3136
|
import { useTranslations as useTranslations3 } from "next-intl";
|
|
3245
|
-
import { jsx as
|
|
3137
|
+
import { jsx as jsx20, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
3246
3138
|
var GlobalLoading = ({
|
|
3247
3139
|
className,
|
|
3248
3140
|
backdrop = true,
|
|
@@ -3255,7 +3147,7 @@ var GlobalLoading = ({
|
|
|
3255
3147
|
return unsubscribe;
|
|
3256
3148
|
}, []);
|
|
3257
3149
|
if (!state.isVisible) return null;
|
|
3258
|
-
return /* @__PURE__ */
|
|
3150
|
+
return /* @__PURE__ */ jsx20(
|
|
3259
3151
|
"div",
|
|
3260
3152
|
{
|
|
3261
3153
|
className: cn(
|
|
@@ -3268,8 +3160,8 @@ var GlobalLoading = ({
|
|
|
3268
3160
|
"aria-modal": true,
|
|
3269
3161
|
"aria-label": "Loading",
|
|
3270
3162
|
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: [
|
|
3271
|
-
/* @__PURE__ */
|
|
3272
|
-
state.text && /* @__PURE__ */
|
|
3163
|
+
/* @__PURE__ */ jsx20(Activity2, { className: "w-6 h-6 animate-spin text-primary-background", "aria-hidden": true }),
|
|
3164
|
+
state.text && /* @__PURE__ */ jsx20("span", { className: "text-base font-medium text-foreground", children: state.text })
|
|
3273
3165
|
] })
|
|
3274
3166
|
}
|
|
3275
3167
|
);
|
|
@@ -3280,14 +3172,14 @@ var PageLoading = ({
|
|
|
3280
3172
|
}) => {
|
|
3281
3173
|
const t = useTranslations3("Loading");
|
|
3282
3174
|
const defaultMessage = message || t("loadingPage");
|
|
3283
|
-
return /* @__PURE__ */
|
|
3175
|
+
return /* @__PURE__ */ jsx20("div", { className: cn(
|
|
3284
3176
|
"min-h-screen flex items-center justify-center bg-background",
|
|
3285
3177
|
className
|
|
3286
3178
|
), children: /* @__PURE__ */ jsxs17("div", { className: "text-center space-y-4", children: [
|
|
3287
|
-
/* @__PURE__ */
|
|
3179
|
+
/* @__PURE__ */ jsx20(Activity2, { className: "w-8 h-8 animate-spin text-primary mx-auto" }),
|
|
3288
3180
|
/* @__PURE__ */ jsxs17("div", { children: [
|
|
3289
|
-
/* @__PURE__ */
|
|
3290
|
-
/* @__PURE__ */
|
|
3181
|
+
/* @__PURE__ */ jsx20("p", { className: "text-lg font-medium text-foreground", children: defaultMessage }),
|
|
3182
|
+
/* @__PURE__ */ jsx20("p", { className: "text-sm text-muted-foreground mt-2", children: t("pleaseWait") })
|
|
3291
3183
|
] })
|
|
3292
3184
|
] }) });
|
|
3293
3185
|
};
|
|
@@ -3304,8 +3196,8 @@ var InlineLoading = ({
|
|
|
3304
3196
|
lg: "w-8 h-8"
|
|
3305
3197
|
};
|
|
3306
3198
|
return /* @__PURE__ */ jsxs17("div", { className: cn("flex items-center justify-center space-x-2", className), children: [
|
|
3307
|
-
/* @__PURE__ */
|
|
3308
|
-
text && /* @__PURE__ */
|
|
3199
|
+
/* @__PURE__ */ jsx20(Activity2, { className: cn("animate-spin text-primary", sizeClasses2[size]) }),
|
|
3200
|
+
text && /* @__PURE__ */ jsx20("span", { className: "text-sm text-muted-foreground animate-pulse", children: text })
|
|
3309
3201
|
] });
|
|
3310
3202
|
};
|
|
3311
3203
|
var ButtonLoading = ({
|
|
@@ -3329,10 +3221,10 @@ var ButtonLoading = ({
|
|
|
3329
3221
|
),
|
|
3330
3222
|
children: [
|
|
3331
3223
|
isLoading && /* @__PURE__ */ jsxs17("div", { className: "absolute inset-0 flex items-center justify-center pointer-events-none", children: [
|
|
3332
|
-
/* @__PURE__ */
|
|
3333
|
-
loadingText && /* @__PURE__ */
|
|
3224
|
+
/* @__PURE__ */ jsx20(Activity2, { className: "w-4 h-4 animate-spin text-primary-foreground" }),
|
|
3225
|
+
loadingText && /* @__PURE__ */ jsx20("span", { className: "ml-2 text-sm", children: loadingText })
|
|
3334
3226
|
] }),
|
|
3335
|
-
/* @__PURE__ */
|
|
3227
|
+
/* @__PURE__ */ jsx20("div", { className: cn(isLoading && "opacity-50 pointer-events-none"), children: child })
|
|
3336
3228
|
]
|
|
3337
3229
|
}
|
|
3338
3230
|
);
|
|
@@ -3342,7 +3234,7 @@ var ButtonLoading = ({
|
|
|
3342
3234
|
import * as React15 from "react";
|
|
3343
3235
|
import Link from "next/link";
|
|
3344
3236
|
import { ChevronRight, Home, MoreHorizontal } from "lucide-react";
|
|
3345
|
-
import { jsx as
|
|
3237
|
+
import { jsx as jsx21, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
3346
3238
|
var sizeStyles5 = {
|
|
3347
3239
|
sm: {
|
|
3348
3240
|
text: "text-xs",
|
|
@@ -3389,16 +3281,16 @@ var Breadcrumb = ({
|
|
|
3389
3281
|
}, [items.length, maxItems, collapsible]);
|
|
3390
3282
|
const getSeparator = () => {
|
|
3391
3283
|
if (typeof separator === "string") {
|
|
3392
|
-
return /* @__PURE__ */
|
|
3284
|
+
return /* @__PURE__ */ jsx21("span", { className: "text-muted-foreground", children: separator });
|
|
3393
3285
|
}
|
|
3394
3286
|
if (variant === "slash") {
|
|
3395
|
-
return /* @__PURE__ */
|
|
3287
|
+
return /* @__PURE__ */ jsx21("span", { className: "text-muted-foreground", children: "/" });
|
|
3396
3288
|
}
|
|
3397
3289
|
if (variant === "arrow") {
|
|
3398
|
-
return /* @__PURE__ */
|
|
3290
|
+
return /* @__PURE__ */ jsx21("span", { className: "text-muted-foreground", children: "\u2192" });
|
|
3399
3291
|
}
|
|
3400
3292
|
const SeparatorComponent = separator;
|
|
3401
|
-
return /* @__PURE__ */
|
|
3293
|
+
return /* @__PURE__ */ jsx21(SeparatorComponent, { className: cn("text-muted-foreground", sizeStyles5[size].icon) });
|
|
3402
3294
|
};
|
|
3403
3295
|
const processedItems = React15.useMemo(() => {
|
|
3404
3296
|
let finalItems = [...items];
|
|
@@ -3419,17 +3311,17 @@ var Breadcrumb = ({
|
|
|
3419
3311
|
const handleCollapseToggle = () => {
|
|
3420
3312
|
setIsCollapsed(!isCollapsed);
|
|
3421
3313
|
};
|
|
3422
|
-
return /* @__PURE__ */
|
|
3314
|
+
return /* @__PURE__ */ jsx21(
|
|
3423
3315
|
"nav",
|
|
3424
3316
|
{
|
|
3425
3317
|
className: cn("flex w-full items-center", sizeStyles5[size].text, className),
|
|
3426
3318
|
"aria-label": "Breadcrumb navigation",
|
|
3427
|
-
children: /* @__PURE__ */
|
|
3319
|
+
children: /* @__PURE__ */ jsx21("ol", { className: cn("flex items-center", sizeStyles5[size].spacing), children: processedItems.map((item, index) => {
|
|
3428
3320
|
const isLast = index === processedItems.length - 1;
|
|
3429
3321
|
const isCollapsedIndicator = item.label === "...";
|
|
3430
3322
|
const Icon = item.icon;
|
|
3431
3323
|
return /* @__PURE__ */ jsxs18("li", { className: "flex items-center", children: [
|
|
3432
|
-
isCollapsedIndicator ? /* @__PURE__ */
|
|
3324
|
+
isCollapsedIndicator ? /* @__PURE__ */ jsx21(
|
|
3433
3325
|
"button",
|
|
3434
3326
|
{
|
|
3435
3327
|
onClick: handleCollapseToggle,
|
|
@@ -3440,7 +3332,7 @@ var Breadcrumb = ({
|
|
|
3440
3332
|
"focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-1"
|
|
3441
3333
|
),
|
|
3442
3334
|
"aria-label": "Show all breadcrumb items",
|
|
3443
|
-
children: /* @__PURE__ */
|
|
3335
|
+
children: /* @__PURE__ */ jsx21(MoreHorizontal, { className: sizeStyles5[size].icon })
|
|
3444
3336
|
}
|
|
3445
3337
|
) : item.href && !isLast && !item.disabled ? /* @__PURE__ */ jsxs18(
|
|
3446
3338
|
Link,
|
|
@@ -3453,8 +3345,8 @@ var Breadcrumb = ({
|
|
|
3453
3345
|
"focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-1 rounded-sm"
|
|
3454
3346
|
),
|
|
3455
3347
|
children: [
|
|
3456
|
-
Icon && /* @__PURE__ */
|
|
3457
|
-
/* @__PURE__ */
|
|
3348
|
+
Icon && /* @__PURE__ */ jsx21(Icon, { className: sizeStyles5[size].icon }),
|
|
3349
|
+
/* @__PURE__ */ jsx21("span", { children: item.label })
|
|
3458
3350
|
]
|
|
3459
3351
|
}
|
|
3460
3352
|
) : /* @__PURE__ */ jsxs18(
|
|
@@ -3467,12 +3359,12 @@ var Breadcrumb = ({
|
|
|
3467
3359
|
),
|
|
3468
3360
|
"aria-current": isLast ? "page" : void 0,
|
|
3469
3361
|
children: [
|
|
3470
|
-
Icon && /* @__PURE__ */
|
|
3471
|
-
/* @__PURE__ */
|
|
3362
|
+
Icon && /* @__PURE__ */ jsx21(Icon, { className: sizeStyles5[size].icon }),
|
|
3363
|
+
/* @__PURE__ */ jsx21("span", { children: item.label })
|
|
3472
3364
|
]
|
|
3473
3365
|
}
|
|
3474
3366
|
),
|
|
3475
|
-
!isLast && /* @__PURE__ */
|
|
3367
|
+
!isLast && /* @__PURE__ */ jsx21(
|
|
3476
3368
|
"span",
|
|
3477
3369
|
{
|
|
3478
3370
|
className: cn("mx-1", sizeStyles5[size].spacing),
|
|
@@ -3490,7 +3382,7 @@ var Breadcrumb_default = Breadcrumb;
|
|
|
3490
3382
|
|
|
3491
3383
|
// ../../components/ui/Tab.tsx
|
|
3492
3384
|
import * as React16 from "react";
|
|
3493
|
-
import { jsx as
|
|
3385
|
+
import { jsx as jsx22, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
3494
3386
|
var sizeStyles6 = {
|
|
3495
3387
|
sm: {
|
|
3496
3388
|
tab: "py-1.5 px-3 text-xs",
|
|
@@ -3637,14 +3529,14 @@ var Tabs = ({
|
|
|
3637
3529
|
}
|
|
3638
3530
|
},
|
|
3639
3531
|
children: [
|
|
3640
|
-
Icon && /* @__PURE__ */
|
|
3532
|
+
Icon && /* @__PURE__ */ jsx22(Icon, { className: "h-4 w-4" }),
|
|
3641
3533
|
tab.label
|
|
3642
3534
|
]
|
|
3643
3535
|
},
|
|
3644
3536
|
tab.value
|
|
3645
3537
|
);
|
|
3646
3538
|
}),
|
|
3647
|
-
variant === "underline" && orientation === "horizontal" && /* @__PURE__ */
|
|
3539
|
+
variant === "underline" && orientation === "horizontal" && /* @__PURE__ */ jsx22(
|
|
3648
3540
|
"div",
|
|
3649
3541
|
{
|
|
3650
3542
|
className: "absolute bottom-0 h-0.5 bg-primary transition-all duration-300 ease-out",
|
|
@@ -3652,7 +3544,7 @@ var Tabs = ({
|
|
|
3652
3544
|
}
|
|
3653
3545
|
)
|
|
3654
3546
|
] }),
|
|
3655
|
-
/* @__PURE__ */
|
|
3547
|
+
/* @__PURE__ */ jsx22(
|
|
3656
3548
|
"div",
|
|
3657
3549
|
{
|
|
3658
3550
|
role: "tabpanel",
|
|
@@ -3670,7 +3562,7 @@ var Tabs = ({
|
|
|
3670
3562
|
] });
|
|
3671
3563
|
};
|
|
3672
3564
|
var SimpleTabs = ({ tabs, defaultValue, className }) => {
|
|
3673
|
-
return /* @__PURE__ */
|
|
3565
|
+
return /* @__PURE__ */ jsx22(
|
|
3674
3566
|
Tabs,
|
|
3675
3567
|
{
|
|
3676
3568
|
tabs,
|
|
@@ -3682,7 +3574,7 @@ var SimpleTabs = ({ tabs, defaultValue, className }) => {
|
|
|
3682
3574
|
);
|
|
3683
3575
|
};
|
|
3684
3576
|
var PillTabs = ({ contained = true, ...props }) => {
|
|
3685
|
-
return /* @__PURE__ */
|
|
3577
|
+
return /* @__PURE__ */ jsx22(
|
|
3686
3578
|
Tabs,
|
|
3687
3579
|
{
|
|
3688
3580
|
...props,
|
|
@@ -3696,7 +3588,7 @@ var VerticalTabs = ({
|
|
|
3696
3588
|
className,
|
|
3697
3589
|
...props
|
|
3698
3590
|
}) => {
|
|
3699
|
-
return /* @__PURE__ */
|
|
3591
|
+
return /* @__PURE__ */ jsx22("div", { className: cn("flex gap-6", className), children: /* @__PURE__ */ jsx22("div", { className: cn(sidebarWidth, "flex-shrink-0"), children: /* @__PURE__ */ jsx22(
|
|
3700
3592
|
Tabs,
|
|
3701
3593
|
{
|
|
3702
3594
|
...props,
|
|
@@ -3710,7 +3602,7 @@ var VerticalTabs = ({
|
|
|
3710
3602
|
// ../../components/ui/DropdownMenu.tsx
|
|
3711
3603
|
import React17, { useState as useState16 } from "react";
|
|
3712
3604
|
import { createPortal as createPortal5 } from "react-dom";
|
|
3713
|
-
import { Fragment as Fragment5, jsx as
|
|
3605
|
+
import { Fragment as Fragment5, jsx as jsx23, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
3714
3606
|
var DropdownMenu = ({
|
|
3715
3607
|
trigger,
|
|
3716
3608
|
children,
|
|
@@ -3832,24 +3724,28 @@ var DropdownMenu = ({
|
|
|
3832
3724
|
setOpen(false);
|
|
3833
3725
|
}
|
|
3834
3726
|
};
|
|
3835
|
-
const dropdownContent = open ? /* @__PURE__ */
|
|
3727
|
+
const dropdownContent = open ? /* @__PURE__ */ jsx23(
|
|
3836
3728
|
"div",
|
|
3837
3729
|
{
|
|
3838
3730
|
"data-dropdown-menu": true,
|
|
3839
|
-
"data-combobox-dropdown": true,
|
|
3840
3731
|
ref: contentRef,
|
|
3841
3732
|
style: {
|
|
3842
3733
|
position: "absolute",
|
|
3843
3734
|
top: position?.top ?? -9999,
|
|
3844
3735
|
left: position?.left ?? -9999,
|
|
3845
3736
|
zIndex: 9999,
|
|
3846
|
-
visibility: position ? "visible" : "hidden"
|
|
3847
|
-
transformOrigin: "top center"
|
|
3737
|
+
visibility: position ? "visible" : "hidden"
|
|
3848
3738
|
},
|
|
3849
3739
|
"data-state": open ? "open" : "closed",
|
|
3850
3740
|
role: "menu",
|
|
3851
|
-
className: cn(
|
|
3852
|
-
|
|
3741
|
+
className: cn(
|
|
3742
|
+
"z-[9999] min-w-40",
|
|
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(
|
|
3853
3749
|
"div",
|
|
3854
3750
|
{
|
|
3855
3751
|
className: cn(
|
|
@@ -3870,7 +3766,7 @@ var DropdownMenu = ({
|
|
|
3870
3766
|
role: "menuitem",
|
|
3871
3767
|
tabIndex: -1,
|
|
3872
3768
|
style: {
|
|
3873
|
-
animationDelay: open ? `${
|
|
3769
|
+
animationDelay: open ? `${index * 25}ms` : "0ms"
|
|
3874
3770
|
},
|
|
3875
3771
|
className: cn(
|
|
3876
3772
|
"dropdown-item flex w-full items-center gap-2 px-2.5 py-1.5 text-sm rounded-sm",
|
|
@@ -3881,7 +3777,7 @@ var DropdownMenu = ({
|
|
|
3881
3777
|
item.destructive && "text-destructive hover:bg-destructive/10 focus:bg-destructive/10"
|
|
3882
3778
|
),
|
|
3883
3779
|
children: [
|
|
3884
|
-
IconComponent && /* @__PURE__ */
|
|
3780
|
+
IconComponent && /* @__PURE__ */ jsx23(IconComponent, { className: "h-4 w-4" }),
|
|
3885
3781
|
item.label
|
|
3886
3782
|
]
|
|
3887
3783
|
},
|
|
@@ -3908,7 +3804,7 @@ var DropdownMenu = ({
|
|
|
3908
3804
|
dropdownContent && typeof window !== "undefined" && createPortal5(dropdownContent, document.body)
|
|
3909
3805
|
] });
|
|
3910
3806
|
};
|
|
3911
|
-
var DropdownMenuItem = ({ children, onClick, disabled, destructive, className }) => /* @__PURE__ */
|
|
3807
|
+
var DropdownMenuItem = ({ children, onClick, disabled, destructive, className }) => /* @__PURE__ */ jsx23(
|
|
3912
3808
|
"button",
|
|
3913
3809
|
{
|
|
3914
3810
|
onClick,
|
|
@@ -3924,8 +3820,8 @@ var DropdownMenuItem = ({ children, onClick, disabled, destructive, className })
|
|
|
3924
3820
|
children
|
|
3925
3821
|
}
|
|
3926
3822
|
);
|
|
3927
|
-
var DropdownMenuSeparator = ({ className }) => /* @__PURE__ */
|
|
3928
|
-
var SelectDropdown = ({ options, value, onChange, placeholder = "Select...", className }) => /* @__PURE__ */
|
|
3823
|
+
var DropdownMenuSeparator = ({ className }) => /* @__PURE__ */ jsx23("div", { className: cn("h-px bg-border my-1", className) });
|
|
3824
|
+
var SelectDropdown = ({ options, value, onChange, placeholder = "Select...", className }) => /* @__PURE__ */ jsx23(
|
|
3929
3825
|
DropdownMenu,
|
|
3930
3826
|
{
|
|
3931
3827
|
trigger: /* @__PURE__ */ jsxs20(
|
|
@@ -3938,8 +3834,8 @@ var SelectDropdown = ({ options, value, onChange, placeholder = "Select...", cla
|
|
|
3938
3834
|
className
|
|
3939
3835
|
),
|
|
3940
3836
|
children: [
|
|
3941
|
-
/* @__PURE__ */
|
|
3942
|
-
/* @__PURE__ */
|
|
3837
|
+
/* @__PURE__ */ jsx23("span", { className: "truncate max-w-[16rem] text-foreground/90", children: value || placeholder }),
|
|
3838
|
+
/* @__PURE__ */ jsx23("svg", { width: "16", height: "16", viewBox: "0 0 20 20", fill: "none", className: "opacity-70", children: /* @__PURE__ */ jsx23("path", { d: "M6 8l4 4 4-4", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) })
|
|
3943
3839
|
]
|
|
3944
3840
|
}
|
|
3945
3841
|
),
|
|
@@ -3960,7 +3856,7 @@ import * as React18 from "react";
|
|
|
3960
3856
|
import { useId as useId2 } from "react";
|
|
3961
3857
|
import { createPortal as createPortal6 } from "react-dom";
|
|
3962
3858
|
import { ChevronDown, Search as Search2, SearchX, Check as Check3, X as X7, Loader2 as Loader22 } from "lucide-react";
|
|
3963
|
-
import { jsx as
|
|
3859
|
+
import { jsx as jsx24, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
3964
3860
|
var getOptionLabel = (option) => {
|
|
3965
3861
|
return typeof option === "string" ? option : option.label;
|
|
3966
3862
|
};
|
|
@@ -4077,7 +3973,7 @@ var Combobox = ({
|
|
|
4077
3973
|
}, [open, enableSearch]);
|
|
4078
3974
|
const selectedOption = findOptionByValue(options, value);
|
|
4079
3975
|
const displayValue = selectedOption ? getOptionLabel(selectedOption) : "";
|
|
4080
|
-
const dropdownContent = /* @__PURE__ */
|
|
3976
|
+
const dropdownContent = /* @__PURE__ */ jsx24(
|
|
4081
3977
|
"div",
|
|
4082
3978
|
{
|
|
4083
3979
|
"data-combobox-dropdown": true,
|
|
@@ -4087,17 +3983,20 @@ var Combobox = ({
|
|
|
4087
3983
|
top: dropdownPosition?.top || 0,
|
|
4088
3984
|
left: dropdownPosition?.left || 0,
|
|
4089
3985
|
width: dropdownPosition?.width || 200,
|
|
4090
|
-
zIndex: 9999
|
|
4091
|
-
transformOrigin: "top center"
|
|
3986
|
+
zIndex: 9999
|
|
4092
3987
|
},
|
|
4093
3988
|
"data-state": open ? "open" : "closed",
|
|
4094
3989
|
role: "listbox",
|
|
4095
3990
|
id: `${resolvedId}-listbox`,
|
|
4096
|
-
className:
|
|
3991
|
+
className: cn(
|
|
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
|
+
),
|
|
4097
3996
|
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: [
|
|
4098
3997
|
enableSearch && /* @__PURE__ */ jsxs21("div", { className: "relative p-3 border-b border-border/50 bg-muted/20", children: [
|
|
4099
|
-
/* @__PURE__ */
|
|
4100
|
-
/* @__PURE__ */
|
|
3998
|
+
/* @__PURE__ */ jsx24(Search2, { className: "absolute left-6 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground transition-colors" }),
|
|
3999
|
+
/* @__PURE__ */ jsx24(
|
|
4101
4000
|
"input",
|
|
4102
4001
|
{
|
|
4103
4002
|
ref: inputRef,
|
|
@@ -4136,9 +4035,9 @@ var Combobox = ({
|
|
|
4136
4035
|
}
|
|
4137
4036
|
)
|
|
4138
4037
|
] }),
|
|
4139
|
-
/* @__PURE__ */
|
|
4140
|
-
/* @__PURE__ */
|
|
4141
|
-
/* @__PURE__ */
|
|
4038
|
+
/* @__PURE__ */ jsx24("div", { className: "max-h-64 overflow-y-auto overscroll-contain", children: /* @__PURE__ */ jsx24("ul", { className: "p-1 space-y-1", children: loading2 ? /* @__PURE__ */ jsx24("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: [
|
|
4039
|
+
/* @__PURE__ */ jsx24(Loader22, { className: "h-6 w-6 animate-spin text-primary" }),
|
|
4040
|
+
/* @__PURE__ */ jsx24("span", { className: "text-sm text-muted-foreground", children: loadingText || "Loading..." })
|
|
4142
4041
|
] }) }) : filteredOptions.length > 0 ? filteredOptions.map((item, index) => {
|
|
4143
4042
|
const itemValue = getOptionValue(item);
|
|
4144
4043
|
const itemLabel = getOptionLabel(item);
|
|
@@ -4155,7 +4054,7 @@ var Combobox = ({
|
|
|
4155
4054
|
"aria-selected": isSelected,
|
|
4156
4055
|
onClick: () => handleSelect(item),
|
|
4157
4056
|
style: {
|
|
4158
|
-
animationDelay: open ? `${
|
|
4057
|
+
animationDelay: open ? `${index * 25}ms` : "0ms"
|
|
4159
4058
|
},
|
|
4160
4059
|
className: cn(
|
|
4161
4060
|
"dropdown-item group flex cursor-pointer items-center justify-between rounded-sm px-2.5 py-1.5 text-sm",
|
|
@@ -4167,16 +4066,24 @@ var Combobox = ({
|
|
|
4167
4066
|
isSelected && "bg-accent text-accent-foreground"
|
|
4168
4067
|
),
|
|
4169
4068
|
children: [
|
|
4170
|
-
/* @__PURE__ */
|
|
4171
|
-
isSelected && /* @__PURE__ */
|
|
4069
|
+
/* @__PURE__ */ jsx24("span", { className: "truncate", children: itemLabel }),
|
|
4070
|
+
isSelected && /* @__PURE__ */ jsx24(Check3, { className: "h-4 w-4 text-primary" })
|
|
4172
4071
|
]
|
|
4173
4072
|
},
|
|
4174
4073
|
`${itemValue}-${index}`
|
|
4175
4074
|
);
|
|
4176
|
-
}) : /* @__PURE__ */
|
|
4177
|
-
/* @__PURE__ */
|
|
4178
|
-
/* @__PURE__ */
|
|
4179
|
-
query && /* @__PURE__ */
|
|
4075
|
+
}) : /* @__PURE__ */ jsx24("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: [
|
|
4076
|
+
/* @__PURE__ */ jsx24(SearchX, { className: "h-8 w-8 opacity-40 text-muted-foreground" }),
|
|
4077
|
+
/* @__PURE__ */ jsx24("span", { className: "text-sm", children: emptyText }),
|
|
4078
|
+
query && /* @__PURE__ */ jsx24(
|
|
4079
|
+
"button",
|
|
4080
|
+
{
|
|
4081
|
+
type: "button",
|
|
4082
|
+
onClick: () => setQuery(""),
|
|
4083
|
+
className: "text-xs text-primary hover:underline",
|
|
4084
|
+
children: "Clear search"
|
|
4085
|
+
}
|
|
4086
|
+
)
|
|
4180
4087
|
] }) }) }) })
|
|
4181
4088
|
] })
|
|
4182
4089
|
}
|
|
@@ -4191,7 +4098,7 @@ var Combobox = ({
|
|
|
4191
4098
|
const radiusClass = size === "sm" ? "rounded-md" : "rounded-lg";
|
|
4192
4099
|
const verticalGap = size === "sm" ? "space-y-1.5" : "space-y-2";
|
|
4193
4100
|
return /* @__PURE__ */ jsxs21("div", { className: cn("w-full group", verticalGap), children: [
|
|
4194
|
-
label && /* @__PURE__ */
|
|
4101
|
+
label && /* @__PURE__ */ jsx24("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ jsxs21(
|
|
4195
4102
|
"label",
|
|
4196
4103
|
{
|
|
4197
4104
|
id: labelId,
|
|
@@ -4203,7 +4110,7 @@ var Combobox = ({
|
|
|
4203
4110
|
),
|
|
4204
4111
|
children: [
|
|
4205
4112
|
label,
|
|
4206
|
-
required && /* @__PURE__ */
|
|
4113
|
+
required && /* @__PURE__ */ jsx24("span", { className: "text-destructive ml-1", children: "*" })
|
|
4207
4114
|
]
|
|
4208
4115
|
}
|
|
4209
4116
|
) }),
|
|
@@ -4237,10 +4144,10 @@ var Combobox = ({
|
|
|
4237
4144
|
className
|
|
4238
4145
|
),
|
|
4239
4146
|
children: [
|
|
4240
|
-
/* @__PURE__ */
|
|
4147
|
+
/* @__PURE__ */ jsx24("span", { className: cn("truncate", !displayValue && "text-muted-foreground", fontBold && "font-bold"), children: displayValue || placeholder }),
|
|
4241
4148
|
/* @__PURE__ */ jsxs21("div", { className: "flex items-center gap-1 ml-2", children: [
|
|
4242
4149
|
allowClear && value && !disabled && // FIX: Use a div instead of a nested button
|
|
4243
|
-
/* @__PURE__ */
|
|
4150
|
+
/* @__PURE__ */ jsx24(
|
|
4244
4151
|
"div",
|
|
4245
4152
|
{
|
|
4246
4153
|
role: "button",
|
|
@@ -4249,10 +4156,18 @@ var Combobox = ({
|
|
|
4249
4156
|
onClick: handleClear,
|
|
4250
4157
|
onKeyDown: (e) => (e.key === "Enter" || e.key === " ") && handleClear(e),
|
|
4251
4158
|
className: "opacity-0 group-hover:opacity-100 transition-opacity p-0.5 rounded hover:bg-destructive/10 text-muted-foreground hover:text-destructive",
|
|
4252
|
-
children: /* @__PURE__ */
|
|
4159
|
+
children: /* @__PURE__ */ jsx24(X7, { className: "h-3 w-3" })
|
|
4253
4160
|
}
|
|
4254
4161
|
),
|
|
4255
|
-
/* @__PURE__ */
|
|
4162
|
+
/* @__PURE__ */ jsx24(
|
|
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
|
+
)
|
|
4256
4171
|
] })
|
|
4257
4172
|
]
|
|
4258
4173
|
}
|
|
@@ -4263,7 +4178,7 @@ var Combobox = ({
|
|
|
4263
4178
|
|
|
4264
4179
|
// ../../components/ui/Pagination.tsx
|
|
4265
4180
|
import { useTranslations as useTranslations4 } from "next-intl";
|
|
4266
|
-
import { jsx as
|
|
4181
|
+
import { jsx as jsx25, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
4267
4182
|
var Pagination = ({
|
|
4268
4183
|
page,
|
|
4269
4184
|
totalPages,
|
|
@@ -4347,12 +4262,12 @@ var Pagination = ({
|
|
|
4347
4262
|
};
|
|
4348
4263
|
if (totalPages <= 1) return null;
|
|
4349
4264
|
return /* @__PURE__ */ jsxs22("nav", { className: cn("flex flex-col gap-4", className), "aria-label": labels?.navigationLabel || t("navigationLabel"), children: [
|
|
4350
|
-
showInfo && totalItems && /* @__PURE__ */
|
|
4265
|
+
showInfo && totalItems && /* @__PURE__ */ jsx25("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 }) }),
|
|
4351
4266
|
/* @__PURE__ */ jsxs22("div", { className: cn("flex items-center justify-between", {
|
|
4352
4267
|
"flex-row-reverse": alignment === "right" || alignment === "center"
|
|
4353
4268
|
}), children: [
|
|
4354
4269
|
/* @__PURE__ */ jsxs22("div", { className: cn("flex items-center gap-1"), children: [
|
|
4355
|
-
showFirstLast && /* @__PURE__ */
|
|
4270
|
+
showFirstLast && /* @__PURE__ */ jsx25(
|
|
4356
4271
|
Button_default,
|
|
4357
4272
|
{
|
|
4358
4273
|
variant: getButtonVariant(false),
|
|
@@ -4366,7 +4281,7 @@ var Pagination = ({
|
|
|
4366
4281
|
"aria-disabled": disabled || page === 1
|
|
4367
4282
|
}
|
|
4368
4283
|
),
|
|
4369
|
-
showPrevNext && /* @__PURE__ */
|
|
4284
|
+
showPrevNext && /* @__PURE__ */ jsx25(
|
|
4370
4285
|
Button_default,
|
|
4371
4286
|
{
|
|
4372
4287
|
variant: getButtonVariant(false),
|
|
@@ -4377,16 +4292,16 @@ var Pagination = ({
|
|
|
4377
4292
|
title: labels?.previousPage || t("previousPage"),
|
|
4378
4293
|
"aria-label": labels?.previousPage || t("previousPage"),
|
|
4379
4294
|
"aria-disabled": disabled || page === 1,
|
|
4380
|
-
children: /* @__PURE__ */
|
|
4295
|
+
children: /* @__PURE__ */ jsx25("span", { className: "hidden sm:inline", children: labels?.previous || t("previous") })
|
|
4381
4296
|
}
|
|
4382
4297
|
),
|
|
4383
4298
|
showPageNumbers && createPageArray().map((p, i) => {
|
|
4384
4299
|
if (p === "...") {
|
|
4385
|
-
return /* @__PURE__ */
|
|
4300
|
+
return /* @__PURE__ */ jsx25(Button_default, { variant: "ghost", size, disabled: true, icon: MoreHorizontal2, className: "cursor-default" }, i);
|
|
4386
4301
|
}
|
|
4387
4302
|
const pageNumber = p;
|
|
4388
4303
|
const isActive = page === pageNumber;
|
|
4389
|
-
return /* @__PURE__ */
|
|
4304
|
+
return /* @__PURE__ */ jsx25(
|
|
4390
4305
|
Button_default,
|
|
4391
4306
|
{
|
|
4392
4307
|
variant: getButtonVariant(isActive),
|
|
@@ -4401,7 +4316,7 @@ var Pagination = ({
|
|
|
4401
4316
|
i
|
|
4402
4317
|
);
|
|
4403
4318
|
}),
|
|
4404
|
-
showPrevNext && /* @__PURE__ */
|
|
4319
|
+
showPrevNext && /* @__PURE__ */ jsx25(
|
|
4405
4320
|
Button_default,
|
|
4406
4321
|
{
|
|
4407
4322
|
variant: getButtonVariant(false),
|
|
@@ -4412,10 +4327,10 @@ var Pagination = ({
|
|
|
4412
4327
|
title: labels?.nextPage || t("nextPage"),
|
|
4413
4328
|
"aria-label": labels?.nextPage || t("nextPage"),
|
|
4414
4329
|
"aria-disabled": disabled || page === totalPages,
|
|
4415
|
-
children: /* @__PURE__ */
|
|
4330
|
+
children: /* @__PURE__ */ jsx25("span", { className: "hidden sm:inline", children: labels?.next || t("next") })
|
|
4416
4331
|
}
|
|
4417
4332
|
),
|
|
4418
|
-
showFirstLast && /* @__PURE__ */
|
|
4333
|
+
showFirstLast && /* @__PURE__ */ jsx25(
|
|
4419
4334
|
Button_default,
|
|
4420
4335
|
{
|
|
4421
4336
|
variant: getButtonVariant(false),
|
|
@@ -4435,7 +4350,7 @@ var Pagination = ({
|
|
|
4435
4350
|
labels?.itemsPerPage || t("itemsPerPage"),
|
|
4436
4351
|
":"
|
|
4437
4352
|
] }),
|
|
4438
|
-
/* @__PURE__ */
|
|
4353
|
+
/* @__PURE__ */ jsx25("div", { className: "w-20", children: /* @__PURE__ */ jsx25(
|
|
4439
4354
|
Combobox,
|
|
4440
4355
|
{
|
|
4441
4356
|
options: pageSizeOptionsStrings,
|
|
@@ -4475,14 +4390,14 @@ var SimplePagination = ({
|
|
|
4475
4390
|
" total items)"
|
|
4476
4391
|
] }),
|
|
4477
4392
|
/* @__PURE__ */ jsxs22("div", { className: "flex items-center justify-between", children: [
|
|
4478
|
-
/* @__PURE__ */
|
|
4393
|
+
/* @__PURE__ */ jsx25(Button_default, { variant, size, icon: ChevronLeft, onClick: () => onChange(Math.max(1, page - 1)), disabled: disabled || page === 1, children: "Previous" }),
|
|
4479
4394
|
/* @__PURE__ */ jsxs22("div", { className: "flex items-center gap-2 text-sm text-muted-foreground", children: [
|
|
4480
|
-
/* @__PURE__ */
|
|
4481
|
-
/* @__PURE__ */
|
|
4482
|
-
/* @__PURE__ */
|
|
4483
|
-
/* @__PURE__ */
|
|
4395
|
+
/* @__PURE__ */ jsx25("span", { children: "Page" }),
|
|
4396
|
+
/* @__PURE__ */ jsx25("span", { className: "font-medium text-foreground", children: page }),
|
|
4397
|
+
/* @__PURE__ */ jsx25("span", { children: "of" }),
|
|
4398
|
+
/* @__PURE__ */ jsx25("span", { className: "font-medium text-foreground", children: totalPages })
|
|
4484
4399
|
] }),
|
|
4485
|
-
/* @__PURE__ */
|
|
4400
|
+
/* @__PURE__ */ jsx25(
|
|
4486
4401
|
Button_default,
|
|
4487
4402
|
{
|
|
4488
4403
|
variant,
|
|
@@ -4506,7 +4421,7 @@ var CompactPagination = ({
|
|
|
4506
4421
|
}) => {
|
|
4507
4422
|
if (totalPages <= 1) return null;
|
|
4508
4423
|
return /* @__PURE__ */ jsxs22("nav", { className: cn("flex items-center gap-1", className), "aria-label": "Compact Pagination", children: [
|
|
4509
|
-
/* @__PURE__ */
|
|
4424
|
+
/* @__PURE__ */ jsx25(
|
|
4510
4425
|
Button_default,
|
|
4511
4426
|
{
|
|
4512
4427
|
variant,
|
|
@@ -4518,7 +4433,7 @@ var CompactPagination = ({
|
|
|
4518
4433
|
"aria-label": "First page"
|
|
4519
4434
|
}
|
|
4520
4435
|
),
|
|
4521
|
-
/* @__PURE__ */
|
|
4436
|
+
/* @__PURE__ */ jsx25(
|
|
4522
4437
|
Button_default,
|
|
4523
4438
|
{
|
|
4524
4439
|
variant,
|
|
@@ -4534,7 +4449,7 @@ var CompactPagination = ({
|
|
|
4534
4449
|
" / ",
|
|
4535
4450
|
totalPages
|
|
4536
4451
|
] }),
|
|
4537
|
-
/* @__PURE__ */
|
|
4452
|
+
/* @__PURE__ */ jsx25(
|
|
4538
4453
|
Button_default,
|
|
4539
4454
|
{
|
|
4540
4455
|
variant,
|
|
@@ -4545,7 +4460,7 @@ var CompactPagination = ({
|
|
|
4545
4460
|
title: "Next page"
|
|
4546
4461
|
}
|
|
4547
4462
|
),
|
|
4548
|
-
/* @__PURE__ */
|
|
4463
|
+
/* @__PURE__ */ jsx25(
|
|
4549
4464
|
Button_default,
|
|
4550
4465
|
{
|
|
4551
4466
|
variant,
|
|
@@ -4561,7 +4476,7 @@ var CompactPagination = ({
|
|
|
4561
4476
|
|
|
4562
4477
|
// ../../components/ui/Section.tsx
|
|
4563
4478
|
import React20 from "react";
|
|
4564
|
-
import { jsx as
|
|
4479
|
+
import { jsx as jsx26 } from "react/jsx-runtime";
|
|
4565
4480
|
var Section = React20.forwardRef(
|
|
4566
4481
|
({
|
|
4567
4482
|
children,
|
|
@@ -4584,7 +4499,7 @@ var Section = React20.forwardRef(
|
|
|
4584
4499
|
lg: "py-12",
|
|
4585
4500
|
xl: "py-16"
|
|
4586
4501
|
};
|
|
4587
|
-
return /* @__PURE__ */
|
|
4502
|
+
return /* @__PURE__ */ jsx26(
|
|
4588
4503
|
"section",
|
|
4589
4504
|
{
|
|
4590
4505
|
ref,
|
|
@@ -4606,9 +4521,9 @@ var Section_default = Section;
|
|
|
4606
4521
|
|
|
4607
4522
|
// ../../components/ui/ScrollArea.tsx
|
|
4608
4523
|
import { forwardRef as forwardRef6 } from "react";
|
|
4609
|
-
import { jsx as
|
|
4524
|
+
import { jsx as jsx27 } from "react/jsx-runtime";
|
|
4610
4525
|
var ScrollArea = forwardRef6(({ className, children, ...props }, ref) => {
|
|
4611
|
-
return /* @__PURE__ */
|
|
4526
|
+
return /* @__PURE__ */ jsx27("div", { ref, className: cn("relative overflow-hidden bg-background", className), ...props, children: /* @__PURE__ */ jsx27("div", { className: cn("h-full w-full overflow-y-auto scroll-area-viewport"), children }) });
|
|
4612
4527
|
});
|
|
4613
4528
|
ScrollArea.displayName = "ScrollArea";
|
|
4614
4529
|
|
|
@@ -4799,7 +4714,7 @@ function formatDateWithDay(date) {
|
|
|
4799
4714
|
}
|
|
4800
4715
|
|
|
4801
4716
|
// ../../components/ui/DatePicker.tsx
|
|
4802
|
-
import { Fragment as Fragment6, jsx as
|
|
4717
|
+
import { Fragment as Fragment6, jsx as jsx28, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
4803
4718
|
var DatePicker = ({
|
|
4804
4719
|
id,
|
|
4805
4720
|
value,
|
|
@@ -4910,7 +4825,7 @@ var DatePicker = ({
|
|
|
4910
4825
|
const firstDayOfMonth = getFirstDayOfMonth(viewDate);
|
|
4911
4826
|
const days = [];
|
|
4912
4827
|
for (let i = 0; i < firstDayOfMonth; i++) {
|
|
4913
|
-
days.push(/* @__PURE__ */
|
|
4828
|
+
days.push(/* @__PURE__ */ jsx28("div", { className: "w-8 h-8" }, `empty-${i}`));
|
|
4914
4829
|
}
|
|
4915
4830
|
for (let day = 1; day <= daysInMonth; day++) {
|
|
4916
4831
|
const date = new Date(viewDate.getFullYear(), viewDate.getMonth(), day);
|
|
@@ -4919,7 +4834,7 @@ var DatePicker = ({
|
|
|
4919
4834
|
const totalDaysFromStart = firstDayOfMonth + day - 1;
|
|
4920
4835
|
const rowIndex = Math.floor(totalDaysFromStart / 7);
|
|
4921
4836
|
days.push(
|
|
4922
|
-
/* @__PURE__ */
|
|
4837
|
+
/* @__PURE__ */ jsx28(
|
|
4923
4838
|
"button",
|
|
4924
4839
|
{
|
|
4925
4840
|
onClick: () => handleDateSelect(date),
|
|
@@ -4941,7 +4856,7 @@ var DatePicker = ({
|
|
|
4941
4856
|
}
|
|
4942
4857
|
return days;
|
|
4943
4858
|
};
|
|
4944
|
-
const datePickerContent = isOpen && dropdownPosition ? /* @__PURE__ */
|
|
4859
|
+
const datePickerContent = isOpen && dropdownPosition ? /* @__PURE__ */ jsx28(
|
|
4945
4860
|
"div",
|
|
4946
4861
|
{
|
|
4947
4862
|
"data-datepicker": true,
|
|
@@ -4971,13 +4886,13 @@ var DatePicker = ({
|
|
|
4971
4886
|
style: { pointerEvents: "auto" },
|
|
4972
4887
|
children: [
|
|
4973
4888
|
/* @__PURE__ */ jsxs23("div", { className: "flex items-center justify-between mb-4", children: [
|
|
4974
|
-
/* @__PURE__ */
|
|
4975
|
-
/* @__PURE__ */
|
|
4976
|
-
/* @__PURE__ */
|
|
4889
|
+
/* @__PURE__ */ jsx28(Button_default, { variant: "ghost", size: "sm", onClick: () => navigateMonth("prev"), className: "p-1 h-auto", children: /* @__PURE__ */ jsx28(ChevronLeft2, { className: "h-4 w-4" }) }),
|
|
4890
|
+
/* @__PURE__ */ jsx28("div", { className: "text-sm font-semibold", children: viewDate.toLocaleDateString("en-US", { month: "long", year: "numeric" }) }),
|
|
4891
|
+
/* @__PURE__ */ jsx28(Button_default, { variant: "ghost", size: "sm", onClick: () => navigateMonth("next"), className: "p-1 h-auto", children: /* @__PURE__ */ jsx28(ChevronRight3, { className: "h-4 w-4" }) })
|
|
4977
4892
|
] }),
|
|
4978
|
-
/* @__PURE__ */
|
|
4979
|
-
/* @__PURE__ */
|
|
4980
|
-
/* @__PURE__ */
|
|
4893
|
+
/* @__PURE__ */ jsx28("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__ */ jsx28("div", { className: cn("text-muted-foreground text-center font-medium", size === "sm" ? "text-[10px] py-0.5" : "text-xs py-1"), children: day }, day)) }),
|
|
4894
|
+
/* @__PURE__ */ jsx28("div", { className: "grid grid-cols-7 gap-1", children: renderCalendar() }),
|
|
4895
|
+
/* @__PURE__ */ jsx28("div", { className: "flex items-center justify-end mt-2", children: /* @__PURE__ */ jsx28(
|
|
4981
4896
|
Button_default,
|
|
4982
4897
|
{
|
|
4983
4898
|
variant: "outline",
|
|
@@ -5002,7 +4917,7 @@ var DatePicker = ({
|
|
|
5002
4917
|
const radiusClass = size === "sm" ? "rounded-md" : "rounded-lg";
|
|
5003
4918
|
const verticalGap = size === "sm" ? "space-y-1.5" : "space-y-2";
|
|
5004
4919
|
return /* @__PURE__ */ jsxs23("div", { className: cn("w-full group", verticalGap), children: [
|
|
5005
|
-
label && /* @__PURE__ */
|
|
4920
|
+
label && /* @__PURE__ */ jsx28("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ jsxs23(
|
|
5006
4921
|
"label",
|
|
5007
4922
|
{
|
|
5008
4923
|
id: labelId,
|
|
@@ -5014,7 +4929,7 @@ var DatePicker = ({
|
|
|
5014
4929
|
),
|
|
5015
4930
|
children: [
|
|
5016
4931
|
label,
|
|
5017
|
-
required && /* @__PURE__ */
|
|
4932
|
+
required && /* @__PURE__ */ jsx28("span", { className: "text-destructive ml-1", children: "*" })
|
|
5018
4933
|
]
|
|
5019
4934
|
}
|
|
5020
4935
|
) }),
|
|
@@ -5046,8 +4961,8 @@ var DatePicker = ({
|
|
|
5046
4961
|
className
|
|
5047
4962
|
),
|
|
5048
4963
|
children: [
|
|
5049
|
-
/* @__PURE__ */
|
|
5050
|
-
value && /* @__PURE__ */
|
|
4964
|
+
/* @__PURE__ */ jsx28("span", { className: cn("truncate", !value && "text-muted-foreground"), children: value ? formatDateDisplay(value) : placeholder || t("placeholder") }),
|
|
4965
|
+
value && /* @__PURE__ */ jsx28(
|
|
5051
4966
|
"span",
|
|
5052
4967
|
{
|
|
5053
4968
|
role: "button",
|
|
@@ -5069,10 +4984,10 @@ var DatePicker = ({
|
|
|
5069
4984
|
},
|
|
5070
4985
|
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",
|
|
5071
4986
|
style: { width: 20, height: 20 },
|
|
5072
|
-
children: /* @__PURE__ */
|
|
4987
|
+
children: /* @__PURE__ */ jsx28(XIcon, { className: "h-3.5 w-3.5" })
|
|
5073
4988
|
}
|
|
5074
4989
|
),
|
|
5075
|
-
/* @__PURE__ */
|
|
4990
|
+
/* @__PURE__ */ jsx28(Calendar, { className: "h-4 w-4 text-muted-foreground ml-2" })
|
|
5076
4991
|
]
|
|
5077
4992
|
}
|
|
5078
4993
|
),
|
|
@@ -5157,7 +5072,7 @@ var DateRangePicker = ({ startDate, endDate, onChange, placeholder = "Select dat
|
|
|
5157
5072
|
const nodes = [];
|
|
5158
5073
|
const daysInMonth = getDaysInMonth(viewDate);
|
|
5159
5074
|
const firstDay = getFirstDayOfMonth(viewDate);
|
|
5160
|
-
for (let i = 0; i < firstDay; i++) nodes.push(/* @__PURE__ */
|
|
5075
|
+
for (let i = 0; i < firstDay; i++) nodes.push(/* @__PURE__ */ jsx28("div", { className: "w-8 h-8" }, `e-${i}`));
|
|
5161
5076
|
for (let d = 1; d <= daysInMonth; d++) {
|
|
5162
5077
|
const date = new Date(viewDate.getFullYear(), viewDate.getMonth(), d);
|
|
5163
5078
|
const isSelectedStart = isSameDay2(date, tempStart);
|
|
@@ -5182,7 +5097,7 @@ var DateRangePicker = ({ startDate, endDate, onChange, placeholder = "Select dat
|
|
|
5182
5097
|
}
|
|
5183
5098
|
}
|
|
5184
5099
|
nodes.push(
|
|
5185
|
-
/* @__PURE__ */
|
|
5100
|
+
/* @__PURE__ */ jsx28(
|
|
5186
5101
|
"button",
|
|
5187
5102
|
{
|
|
5188
5103
|
onClick: () => handleSelect(date),
|
|
@@ -5212,7 +5127,7 @@ var DateRangePicker = ({ startDate, endDate, onChange, placeholder = "Select dat
|
|
|
5212
5127
|
}
|
|
5213
5128
|
return nodes;
|
|
5214
5129
|
};
|
|
5215
|
-
const panel = isOpen && dropdownPosition ? /* @__PURE__ */
|
|
5130
|
+
const panel = isOpen && dropdownPosition ? /* @__PURE__ */ jsx28(
|
|
5216
5131
|
"div",
|
|
5217
5132
|
{
|
|
5218
5133
|
style: { position: "absolute", top: dropdownPosition.top, left: dropdownPosition.left, width: dropdownPosition.width || 256, zIndex: 9999 },
|
|
@@ -5229,30 +5144,30 @@ var DateRangePicker = ({ startDate, endDate, onChange, placeholder = "Select dat
|
|
|
5229
5144
|
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"),
|
|
5230
5145
|
children: [
|
|
5231
5146
|
/* @__PURE__ */ jsxs23("div", { className: "flex items-center justify-between mb-3", children: [
|
|
5232
|
-
/* @__PURE__ */
|
|
5147
|
+
/* @__PURE__ */ jsx28(
|
|
5233
5148
|
Button_default,
|
|
5234
5149
|
{
|
|
5235
5150
|
variant: "ghost",
|
|
5236
5151
|
size: "sm",
|
|
5237
5152
|
onClick: () => setViewDate(new Date(viewDate.getFullYear(), viewDate.getMonth() - 1, 1)),
|
|
5238
5153
|
className: "p-1 h-auto",
|
|
5239
|
-
children: /* @__PURE__ */
|
|
5154
|
+
children: /* @__PURE__ */ jsx28(ChevronLeft2, { className: "h-4 w-4" })
|
|
5240
5155
|
}
|
|
5241
5156
|
),
|
|
5242
|
-
/* @__PURE__ */
|
|
5243
|
-
/* @__PURE__ */
|
|
5157
|
+
/* @__PURE__ */ jsx28("div", { className: "text-sm font-semibold", children: viewDate.toLocaleDateString("en-US", { month: "long", year: "numeric" }) }),
|
|
5158
|
+
/* @__PURE__ */ jsx28(
|
|
5244
5159
|
Button_default,
|
|
5245
5160
|
{
|
|
5246
5161
|
variant: "ghost",
|
|
5247
5162
|
size: "sm",
|
|
5248
5163
|
onClick: () => setViewDate(new Date(viewDate.getFullYear(), viewDate.getMonth() + 1, 1)),
|
|
5249
5164
|
className: "p-1 h-auto",
|
|
5250
|
-
children: /* @__PURE__ */
|
|
5165
|
+
children: /* @__PURE__ */ jsx28(ChevronRight3, { className: "h-4 w-4" })
|
|
5251
5166
|
}
|
|
5252
5167
|
)
|
|
5253
5168
|
] }),
|
|
5254
|
-
/* @__PURE__ */
|
|
5255
|
-
/* @__PURE__ */
|
|
5169
|
+
/* @__PURE__ */ jsx28("div", { className: "grid grid-cols-7 gap-1 mb-2", children: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"].map((d) => /* @__PURE__ */ jsx28("div", { className: "text-xs text-muted-foreground text-center py-1 font-medium", children: d }, d)) }),
|
|
5170
|
+
/* @__PURE__ */ jsx28("div", { className: "grid grid-cols-7", children: renderGrid() })
|
|
5256
5171
|
]
|
|
5257
5172
|
}
|
|
5258
5173
|
)
|
|
@@ -5280,8 +5195,8 @@ var DateRangePicker = ({ startDate, endDate, onChange, placeholder = "Select dat
|
|
|
5280
5195
|
className
|
|
5281
5196
|
),
|
|
5282
5197
|
children: [
|
|
5283
|
-
/* @__PURE__ */
|
|
5284
|
-
/* @__PURE__ */
|
|
5198
|
+
/* @__PURE__ */ jsx28("span", { className: cn("truncate", !tempStart && !tempEnd && "text-muted-foreground"), children: label }),
|
|
5199
|
+
/* @__PURE__ */ jsx28(Calendar, { className: "h-4 w-4 text-muted-foreground ml-2" })
|
|
5285
5200
|
]
|
|
5286
5201
|
}
|
|
5287
5202
|
),
|
|
@@ -5292,7 +5207,7 @@ var DateRangePicker = ({ startDate, endDate, onChange, placeholder = "Select dat
|
|
|
5292
5207
|
// ../../components/ui/TimePicker.tsx
|
|
5293
5208
|
import * as React22 from "react";
|
|
5294
5209
|
import { Clock as Clock2, X as X8, Check as Check4 } from "lucide-react";
|
|
5295
|
-
import { Fragment as Fragment7, jsx as
|
|
5210
|
+
import { Fragment as Fragment7, jsx as jsx29, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
5296
5211
|
var pad = (n) => n.toString().padStart(2, "0");
|
|
5297
5212
|
function parseTime(input, fmt = "24", includeSeconds) {
|
|
5298
5213
|
if (!input) return null;
|
|
@@ -5560,16 +5475,16 @@ function TimePicker({
|
|
|
5560
5475
|
),
|
|
5561
5476
|
children: [
|
|
5562
5477
|
/* @__PURE__ */ jsxs24("div", { className: "flex items-center gap-2", children: [
|
|
5563
|
-
/* @__PURE__ */
|
|
5564
|
-
/* @__PURE__ */
|
|
5478
|
+
/* @__PURE__ */ jsx29(Clock2, { className: cn(sz.icon, error ? "text-destructive" : success ? "text-green-500" : "text-muted-foreground") }),
|
|
5479
|
+
/* @__PURE__ */ jsx29("span", { className: cn("truncate", !value && !defaultValue && "text-muted-foreground"), children: value || defaultValue ? display : placeholder })
|
|
5565
5480
|
] }),
|
|
5566
|
-
/* @__PURE__ */
|
|
5481
|
+
/* @__PURE__ */ jsx29("span", { className: cn("ml-2 transition-transform duration-200", open && "rotate-180"), children: /* @__PURE__ */ jsx29("svg", { className: sz.icon, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ jsx29("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" }) }) })
|
|
5567
5482
|
]
|
|
5568
5483
|
}
|
|
5569
5484
|
);
|
|
5570
5485
|
const contentWidth = variant === "compact" ? 240 : variant === "inline" ? 320 : includeSeconds ? 340 : 300;
|
|
5571
5486
|
const timePickerContent = /* @__PURE__ */ jsxs24("div", { className: "space-y-3", children: [
|
|
5572
|
-
allowManualInput && /* @__PURE__ */
|
|
5487
|
+
allowManualInput && /* @__PURE__ */ jsx29("div", { children: /* @__PURE__ */ jsx29(
|
|
5573
5488
|
Input_default,
|
|
5574
5489
|
{
|
|
5575
5490
|
placeholder: format === "12" ? "02:30 PM" : "14:30",
|
|
@@ -5579,7 +5494,7 @@ function TimePicker({
|
|
|
5579
5494
|
variant: "outlined"
|
|
5580
5495
|
}
|
|
5581
5496
|
) }),
|
|
5582
|
-
showPresets && /* @__PURE__ */
|
|
5497
|
+
showPresets && /* @__PURE__ */ jsx29("div", { className: "grid grid-cols-2 gap-2", children: Object.keys(PRESETS).map((preset) => /* @__PURE__ */ jsx29(
|
|
5583
5498
|
"button",
|
|
5584
5499
|
{
|
|
5585
5500
|
type: "button",
|
|
@@ -5593,7 +5508,7 @@ function TimePicker({
|
|
|
5593
5508
|
},
|
|
5594
5509
|
preset
|
|
5595
5510
|
)) }),
|
|
5596
|
-
customPresets && customPresets.length > 0 && /* @__PURE__ */
|
|
5511
|
+
customPresets && customPresets.length > 0 && /* @__PURE__ */ jsx29("div", { className: "grid grid-cols-2 gap-2", children: customPresets.map((preset, idx) => /* @__PURE__ */ jsx29(
|
|
5597
5512
|
"button",
|
|
5598
5513
|
{
|
|
5599
5514
|
type: "button",
|
|
@@ -5609,8 +5524,8 @@ function TimePicker({
|
|
|
5609
5524
|
)) }),
|
|
5610
5525
|
/* @__PURE__ */ jsxs24("div", { className: "flex gap-3", children: [
|
|
5611
5526
|
/* @__PURE__ */ jsxs24("div", { className: "flex-1 min-w-[70px]", children: [
|
|
5612
|
-
/* @__PURE__ */
|
|
5613
|
-
/* @__PURE__ */
|
|
5527
|
+
/* @__PURE__ */ jsx29("div", { className: "text-xs font-semibold text-muted-foreground mb-2 text-center", children: "Hour" }),
|
|
5528
|
+
/* @__PURE__ */ jsx29(
|
|
5614
5529
|
"div",
|
|
5615
5530
|
{
|
|
5616
5531
|
ref: hourScrollRef,
|
|
@@ -5622,7 +5537,7 @@ function TimePicker({
|
|
|
5622
5537
|
onFocus: () => setFocusedColumn("hour"),
|
|
5623
5538
|
children: hours.map((h) => {
|
|
5624
5539
|
const isSelected = format === "24" && parts.h === h || format === "12" && (parts.h % 12 || 12) === (h % 12 || 12);
|
|
5625
|
-
return /* @__PURE__ */
|
|
5540
|
+
return /* @__PURE__ */ jsx29(
|
|
5626
5541
|
"button",
|
|
5627
5542
|
{
|
|
5628
5543
|
type: "button",
|
|
@@ -5649,10 +5564,10 @@ function TimePicker({
|
|
|
5649
5564
|
}
|
|
5650
5565
|
)
|
|
5651
5566
|
] }),
|
|
5652
|
-
/* @__PURE__ */
|
|
5567
|
+
/* @__PURE__ */ jsx29("div", { className: "w-px bg-border/50 self-stretch my-8" }),
|
|
5653
5568
|
/* @__PURE__ */ jsxs24("div", { className: "flex-1 min-w-[70px]", children: [
|
|
5654
|
-
/* @__PURE__ */
|
|
5655
|
-
/* @__PURE__ */
|
|
5569
|
+
/* @__PURE__ */ jsx29("div", { className: "text-xs font-semibold text-muted-foreground mb-2 text-center", children: "Min" }),
|
|
5570
|
+
/* @__PURE__ */ jsx29(
|
|
5656
5571
|
"div",
|
|
5657
5572
|
{
|
|
5658
5573
|
ref: minuteScrollRef,
|
|
@@ -5664,7 +5579,7 @@ function TimePicker({
|
|
|
5664
5579
|
onFocus: () => setFocusedColumn("minute"),
|
|
5665
5580
|
children: minutes.map((m) => {
|
|
5666
5581
|
const isSelected = parts.m === m;
|
|
5667
|
-
return /* @__PURE__ */
|
|
5582
|
+
return /* @__PURE__ */ jsx29(
|
|
5668
5583
|
"button",
|
|
5669
5584
|
{
|
|
5670
5585
|
type: "button",
|
|
@@ -5690,11 +5605,11 @@ function TimePicker({
|
|
|
5690
5605
|
}
|
|
5691
5606
|
)
|
|
5692
5607
|
] }),
|
|
5693
|
-
/* @__PURE__ */
|
|
5608
|
+
/* @__PURE__ */ jsx29("div", { className: "w-px bg-border/50 self-stretch my-8" }),
|
|
5694
5609
|
includeSeconds && /* @__PURE__ */ jsxs24(Fragment7, { children: [
|
|
5695
5610
|
/* @__PURE__ */ jsxs24("div", { className: "flex-1 min-w-[70px]", children: [
|
|
5696
|
-
/* @__PURE__ */
|
|
5697
|
-
/* @__PURE__ */
|
|
5611
|
+
/* @__PURE__ */ jsx29("div", { className: "text-xs font-semibold text-muted-foreground mb-2 text-center", children: "Sec" }),
|
|
5612
|
+
/* @__PURE__ */ jsx29(
|
|
5698
5613
|
"div",
|
|
5699
5614
|
{
|
|
5700
5615
|
ref: secondScrollRef,
|
|
@@ -5706,7 +5621,7 @@ function TimePicker({
|
|
|
5706
5621
|
onFocus: () => setFocusedColumn("second"),
|
|
5707
5622
|
children: seconds.map((s) => {
|
|
5708
5623
|
const isSelected = parts.s === s;
|
|
5709
|
-
return /* @__PURE__ */
|
|
5624
|
+
return /* @__PURE__ */ jsx29(
|
|
5710
5625
|
"button",
|
|
5711
5626
|
{
|
|
5712
5627
|
type: "button",
|
|
@@ -5732,11 +5647,11 @@ function TimePicker({
|
|
|
5732
5647
|
}
|
|
5733
5648
|
)
|
|
5734
5649
|
] }),
|
|
5735
|
-
/* @__PURE__ */
|
|
5650
|
+
/* @__PURE__ */ jsx29("div", { className: "w-px bg-border/50 self-stretch my-8" })
|
|
5736
5651
|
] }),
|
|
5737
5652
|
format === "12" && /* @__PURE__ */ jsxs24("div", { className: "w-20", children: [
|
|
5738
|
-
/* @__PURE__ */
|
|
5739
|
-
/* @__PURE__ */
|
|
5653
|
+
/* @__PURE__ */ jsx29("div", { className: "text-xs font-semibold text-muted-foreground mb-2 text-center", children: "Period" }),
|
|
5654
|
+
/* @__PURE__ */ jsx29(
|
|
5740
5655
|
"div",
|
|
5741
5656
|
{
|
|
5742
5657
|
className: "flex flex-col gap-2",
|
|
@@ -5747,7 +5662,7 @@ function TimePicker({
|
|
|
5747
5662
|
onFocus: () => setFocusedColumn("period"),
|
|
5748
5663
|
children: ["AM", "PM"].map((p) => {
|
|
5749
5664
|
const isSelected = parts.p === p;
|
|
5750
|
-
return /* @__PURE__ */
|
|
5665
|
+
return /* @__PURE__ */ jsx29(
|
|
5751
5666
|
"button",
|
|
5752
5667
|
{
|
|
5753
5668
|
type: "button",
|
|
@@ -5793,12 +5708,12 @@ function TimePicker({
|
|
|
5793
5708
|
},
|
|
5794
5709
|
"aria-label": "Set current time",
|
|
5795
5710
|
children: [
|
|
5796
|
-
/* @__PURE__ */
|
|
5711
|
+
/* @__PURE__ */ jsx29(Clock2, { className: "w-3.5 h-3.5" }),
|
|
5797
5712
|
"Now"
|
|
5798
5713
|
]
|
|
5799
5714
|
}
|
|
5800
5715
|
),
|
|
5801
|
-
/* @__PURE__ */
|
|
5716
|
+
/* @__PURE__ */ jsx29("div", { className: "flex-1" }),
|
|
5802
5717
|
clearable && /* @__PURE__ */ jsxs24(
|
|
5803
5718
|
"button",
|
|
5804
5719
|
{
|
|
@@ -5814,7 +5729,7 @@ function TimePicker({
|
|
|
5814
5729
|
},
|
|
5815
5730
|
"aria-label": "Clear selected time",
|
|
5816
5731
|
children: [
|
|
5817
|
-
/* @__PURE__ */
|
|
5732
|
+
/* @__PURE__ */ jsx29(X8, { className: "w-3.5 h-3.5" }),
|
|
5818
5733
|
"Clear"
|
|
5819
5734
|
]
|
|
5820
5735
|
}
|
|
@@ -5823,26 +5738,26 @@ function TimePicker({
|
|
|
5823
5738
|
] });
|
|
5824
5739
|
if (variant === "inline") {
|
|
5825
5740
|
return /* @__PURE__ */ jsxs24("div", { className: "w-full", ...rest, children: [
|
|
5826
|
-
label && /* @__PURE__ */
|
|
5741
|
+
label && /* @__PURE__ */ jsx29("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: [
|
|
5827
5742
|
label,
|
|
5828
|
-
required && /* @__PURE__ */
|
|
5743
|
+
required && /* @__PURE__ */ jsx29("span", { className: "text-destructive ml-1", children: "*" })
|
|
5829
5744
|
] }) }),
|
|
5830
|
-
/* @__PURE__ */
|
|
5745
|
+
/* @__PURE__ */ jsx29("div", { className: cn("p-3 rounded-lg border border-border bg-card shadow-sm", className), children: timePickerContent })
|
|
5831
5746
|
] });
|
|
5832
5747
|
}
|
|
5833
5748
|
return /* @__PURE__ */ jsxs24("div", { className: "w-full", ...rest, children: [
|
|
5834
|
-
label && /* @__PURE__ */
|
|
5749
|
+
label && /* @__PURE__ */ jsx29("div", { className: "flex items-center justify-between mb-1.5", children: /* @__PURE__ */ jsxs24(
|
|
5835
5750
|
"label",
|
|
5836
5751
|
{
|
|
5837
5752
|
className: cn(sz.label, "font-medium", disabled ? "text-muted-foreground" : "text-foreground", "cursor-pointer"),
|
|
5838
5753
|
onClick: () => !disabled && handleOpenChange(true),
|
|
5839
5754
|
children: [
|
|
5840
5755
|
label,
|
|
5841
|
-
required && /* @__PURE__ */
|
|
5756
|
+
required && /* @__PURE__ */ jsx29("span", { className: "text-destructive ml-1", children: "*" })
|
|
5842
5757
|
]
|
|
5843
5758
|
}
|
|
5844
5759
|
) }),
|
|
5845
|
-
/* @__PURE__ */
|
|
5760
|
+
/* @__PURE__ */ jsx29(
|
|
5846
5761
|
Popover,
|
|
5847
5762
|
{
|
|
5848
5763
|
trigger,
|
|
@@ -5863,14 +5778,14 @@ function TimePicker({
|
|
|
5863
5778
|
),
|
|
5864
5779
|
(error || success || helperText) && /* @__PURE__ */ jsxs24("div", { className: cn("mt-1.5 flex items-start gap-1.5", sz.label), children: [
|
|
5865
5780
|
error && /* @__PURE__ */ jsxs24("div", { className: "flex items-center gap-1.5 text-destructive", children: [
|
|
5866
|
-
/* @__PURE__ */
|
|
5867
|
-
/* @__PURE__ */
|
|
5781
|
+
/* @__PURE__ */ jsx29(X8, { className: "w-3.5 h-3.5 flex-shrink-0" }),
|
|
5782
|
+
/* @__PURE__ */ jsx29("span", { children: error })
|
|
5868
5783
|
] }),
|
|
5869
5784
|
success && !error && /* @__PURE__ */ jsxs24("div", { className: "flex items-center gap-1.5 text-green-600", children: [
|
|
5870
|
-
/* @__PURE__ */
|
|
5871
|
-
/* @__PURE__ */
|
|
5785
|
+
/* @__PURE__ */ jsx29(Check4, { className: "w-3.5 h-3.5 flex-shrink-0" }),
|
|
5786
|
+
/* @__PURE__ */ jsx29("span", { children: "Valid time selected" })
|
|
5872
5787
|
] }),
|
|
5873
|
-
helperText && !error && !success && /* @__PURE__ */
|
|
5788
|
+
helperText && !error && !success && /* @__PURE__ */ jsx29("span", { className: "text-muted-foreground", children: helperText })
|
|
5874
5789
|
] })
|
|
5875
5790
|
] });
|
|
5876
5791
|
}
|
|
@@ -5878,7 +5793,7 @@ function TimePicker({
|
|
|
5878
5793
|
// ../../components/ui/Calendar.tsx
|
|
5879
5794
|
import * as React23 from "react";
|
|
5880
5795
|
import { ChevronLeft as ChevronLeft3, ChevronRight as ChevronRight4 } from "lucide-react";
|
|
5881
|
-
import { Fragment as Fragment9, jsx as
|
|
5796
|
+
import { Fragment as Fragment9, jsx as jsx30, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
5882
5797
|
function startOfMonth(d) {
|
|
5883
5798
|
return new Date(d.getFullYear(), d.getMonth(), 1);
|
|
5884
5799
|
}
|
|
@@ -6060,9 +5975,9 @@ function Calendar2({
|
|
|
6060
5975
|
const monthDays = getMonthGrid(monthDate, weekStartsOn);
|
|
6061
5976
|
const monthLabel = labels?.month ? labels.month(monthDate) : monthDate.toLocaleDateString("en-US", { month: "long", year: "numeric" });
|
|
6062
5977
|
return /* @__PURE__ */ jsxs25("div", { children: [
|
|
6063
|
-
months > 1 && /* @__PURE__ */
|
|
6064
|
-
showWeekdays && /* @__PURE__ */
|
|
6065
|
-
/* @__PURE__ */
|
|
5978
|
+
months > 1 && /* @__PURE__ */ jsx30("div", { className: "flex items-center justify-center mb-2 text-sm font-semibold", children: monthLabel }),
|
|
5979
|
+
showWeekdays && /* @__PURE__ */ jsx30("div", { className: cn("grid grid-cols-7", sz.grid, "mb-1 text-center text-muted-foreground font-medium"), children: weekdays.map((w) => /* @__PURE__ */ jsx30("div", { className: cn(sz.head), children: w }, `${monthLabel}-${w}`)) }),
|
|
5980
|
+
/* @__PURE__ */ jsx30("div", { className: cn("grid grid-cols-7", sz.grid), children: monthDays.map((d, idx) => {
|
|
6066
5981
|
const inMonth = d.getMonth() === monthDate.getMonth();
|
|
6067
5982
|
const isToday2 = isSameDay(d, today);
|
|
6068
5983
|
const selectedDay = isSelected(d);
|
|
@@ -6086,7 +6001,7 @@ function Calendar2({
|
|
|
6086
6001
|
title: d.toDateString(),
|
|
6087
6002
|
children: [
|
|
6088
6003
|
d.getDate(),
|
|
6089
|
-
dayEvents.length > 0 && /* @__PURE__ */
|
|
6004
|
+
dayEvents.length > 0 && /* @__PURE__ */ jsx30("span", { className: "absolute -bottom-1 inline-flex gap-0.5", children: dayEvents.slice(0, 3).map((e, i) => /* @__PURE__ */ jsx30("span", { className: "h-1.5 w-1.5 rounded-full", style: { backgroundColor: e.color || "hsl(var(--primary))" } }, i)) })
|
|
6090
6005
|
]
|
|
6091
6006
|
},
|
|
6092
6007
|
`${monthLabel}-${idx}`
|
|
@@ -6118,13 +6033,13 @@ function Calendar2({
|
|
|
6118
6033
|
}, [display, view, weekStartsOn, maxBound]);
|
|
6119
6034
|
return /* @__PURE__ */ jsxs25("div", { className: cn("w-full", className), ...rest, children: [
|
|
6120
6035
|
showHeader && /* @__PURE__ */ jsxs25("div", { className: "flex items-center justify-between mb-2", children: [
|
|
6121
|
-
/* @__PURE__ */
|
|
6122
|
-
/* @__PURE__ */
|
|
6123
|
-
/* @__PURE__ */
|
|
6036
|
+
/* @__PURE__ */ jsx30("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__ */ jsx30(ChevronLeft3, { className: "h-4 w-4" }) }),
|
|
6037
|
+
/* @__PURE__ */ jsx30("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" }) }),
|
|
6038
|
+
/* @__PURE__ */ jsx30("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__ */ jsx30(ChevronRight4, { className: "h-4 w-4" }) })
|
|
6124
6039
|
] }),
|
|
6125
6040
|
display === "week" ? /* @__PURE__ */ jsxs25(Fragment9, { children: [
|
|
6126
|
-
showWeekdays && /* @__PURE__ */
|
|
6127
|
-
/* @__PURE__ */
|
|
6041
|
+
showWeekdays && /* @__PURE__ */ jsx30("div", { className: cn("grid grid-cols-7", sz.grid, "mb-1 text-center text-muted-foreground font-medium"), children: weekdays.map((w) => /* @__PURE__ */ jsx30("div", { className: cn(sz.head), children: w }, `w-${w}`)) }),
|
|
6042
|
+
/* @__PURE__ */ jsx30("div", { className: cn("grid grid-cols-7", sz.grid), children: weekDays.map((d, idx) => {
|
|
6128
6043
|
const inMonth = true;
|
|
6129
6044
|
const isToday2 = isSameDay(d, today);
|
|
6130
6045
|
const selectedDay = isSelected(d);
|
|
@@ -6147,13 +6062,13 @@ function Calendar2({
|
|
|
6147
6062
|
title: d.toDateString(),
|
|
6148
6063
|
children: [
|
|
6149
6064
|
d.getDate(),
|
|
6150
|
-
dayEvents.length > 0 && /* @__PURE__ */
|
|
6065
|
+
dayEvents.length > 0 && /* @__PURE__ */ jsx30("span", { className: "absolute -bottom-1 inline-flex gap-0.5", children: dayEvents.slice(0, 3).map((e, i) => /* @__PURE__ */ jsx30("span", { className: "h-1.5 w-1.5 rounded-full", style: { backgroundColor: e.color || "hsl(var(--primary))" } }, i)) })
|
|
6151
6066
|
]
|
|
6152
6067
|
},
|
|
6153
6068
|
`wd-${idx}`
|
|
6154
6069
|
);
|
|
6155
6070
|
}) })
|
|
6156
|
-
] }) : /* @__PURE__ */
|
|
6071
|
+
] }) : /* @__PURE__ */ jsx30("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__ */ jsx30(React23.Fragment, { children: renderMonth(addMonths(view, i)) }, `cal-month-${view.getFullYear()}-${view.getMonth()}-${i}`)) })
|
|
6157
6072
|
] });
|
|
6158
6073
|
}
|
|
6159
6074
|
|
|
@@ -6162,7 +6077,7 @@ import * as React24 from "react";
|
|
|
6162
6077
|
import { useId as useId4 } from "react";
|
|
6163
6078
|
import { createPortal as createPortal8 } from "react-dom";
|
|
6164
6079
|
import { ChevronDown as ChevronDown2, Search as Search3, Check as Check5, SearchX as SearchX2, Loader2 as Loader23 } from "lucide-react";
|
|
6165
|
-
import { jsx as
|
|
6080
|
+
import { jsx as jsx31, jsxs as jsxs26 } from "react/jsx-runtime";
|
|
6166
6081
|
var MultiCombobox = ({
|
|
6167
6082
|
id,
|
|
6168
6083
|
options,
|
|
@@ -6308,7 +6223,7 @@ var MultiCombobox = ({
|
|
|
6308
6223
|
const labelId = label ? `${resolvedId}-label` : void 0;
|
|
6309
6224
|
const labelSize = size === "sm" ? "text-xs" : size === "lg" ? "text-base" : "text-sm";
|
|
6310
6225
|
return /* @__PURE__ */ jsxs26("div", { className: cn("w-full space-y-2 group", className), children: [
|
|
6311
|
-
title && /* @__PURE__ */
|
|
6226
|
+
title && /* @__PURE__ */ jsx31("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ jsxs26(
|
|
6312
6227
|
"label",
|
|
6313
6228
|
{
|
|
6314
6229
|
className: cn(
|
|
@@ -6318,7 +6233,7 @@ var MultiCombobox = ({
|
|
|
6318
6233
|
),
|
|
6319
6234
|
children: [
|
|
6320
6235
|
title,
|
|
6321
|
-
required && /* @__PURE__ */
|
|
6236
|
+
required && /* @__PURE__ */ jsx31("span", { className: "text-destructive ml-1", children: "*" })
|
|
6322
6237
|
]
|
|
6323
6238
|
}
|
|
6324
6239
|
) }),
|
|
@@ -6334,11 +6249,11 @@ var MultiCombobox = ({
|
|
|
6334
6249
|
),
|
|
6335
6250
|
children: [
|
|
6336
6251
|
label,
|
|
6337
|
-
required && /* @__PURE__ */
|
|
6252
|
+
required && /* @__PURE__ */ jsx31("span", { className: "text-destructive ml-1", children: "*" })
|
|
6338
6253
|
]
|
|
6339
6254
|
}
|
|
6340
6255
|
),
|
|
6341
|
-
/* @__PURE__ */
|
|
6256
|
+
/* @__PURE__ */ jsx31("div", { className: "relative w-full" }),
|
|
6342
6257
|
/* @__PURE__ */ jsxs26(
|
|
6343
6258
|
"button",
|
|
6344
6259
|
{
|
|
@@ -6362,11 +6277,11 @@ var MultiCombobox = ({
|
|
|
6362
6277
|
"disabled:cursor-not-allowed disabled:opacity-50"
|
|
6363
6278
|
),
|
|
6364
6279
|
children: [
|
|
6365
|
-
/* @__PURE__ */
|
|
6280
|
+
/* @__PURE__ */ jsx31("div", { className: "flex items-center gap-1 flex-wrap min-h-[1.5rem] flex-1", children: value.length > 0 ? showTags ? value.map((itemValue) => {
|
|
6366
6281
|
const option = normalizedOptions.find((o) => o.value === itemValue);
|
|
6367
6282
|
return /* @__PURE__ */ jsxs26("span", { className: "inline-flex items-center gap-1 bg-accent text-accent-foreground rounded px-2 py-1 text-xs", children: [
|
|
6368
|
-
/* @__PURE__ */
|
|
6369
|
-
/* @__PURE__ */
|
|
6283
|
+
/* @__PURE__ */ jsx31("span", { className: "truncate max-w-[120px]", children: option ? displayFormat(option) : itemValue }),
|
|
6284
|
+
/* @__PURE__ */ jsx31(
|
|
6370
6285
|
"span",
|
|
6371
6286
|
{
|
|
6372
6287
|
role: "button",
|
|
@@ -6392,8 +6307,8 @@ var MultiCombobox = ({
|
|
|
6392
6307
|
}) : /* @__PURE__ */ jsxs26("span", { className: "truncate text-sm", children: [
|
|
6393
6308
|
value.length,
|
|
6394
6309
|
" selected"
|
|
6395
|
-
] }) : /* @__PURE__ */
|
|
6396
|
-
/* @__PURE__ */
|
|
6310
|
+
] }) : /* @__PURE__ */ jsx31("span", { className: "text-muted-foreground", children: placeholder || "Select..." }) }),
|
|
6311
|
+
/* @__PURE__ */ jsx31(
|
|
6397
6312
|
ChevronDown2,
|
|
6398
6313
|
{
|
|
6399
6314
|
className: cn("opacity-50 transition-all duration-200", sizeStyles8[size].icon, open && "rotate-180 scale-110 text-primary opacity-100")
|
|
@@ -6403,27 +6318,30 @@ var MultiCombobox = ({
|
|
|
6403
6318
|
}
|
|
6404
6319
|
),
|
|
6405
6320
|
open && dropdownPosition && typeof window !== "undefined" ? createPortal8(
|
|
6406
|
-
/* @__PURE__ */
|
|
6321
|
+
/* @__PURE__ */ jsx31(
|
|
6407
6322
|
"div",
|
|
6408
6323
|
{
|
|
6409
6324
|
ref: dropdownRef,
|
|
6410
|
-
"data-
|
|
6325
|
+
"data-dropdown": "multicombobox",
|
|
6411
6326
|
style: {
|
|
6412
6327
|
position: "absolute",
|
|
6413
6328
|
top: dropdownPosition?.top || 0,
|
|
6414
6329
|
left: dropdownPosition?.left || 0,
|
|
6415
6330
|
width: dropdownPosition?.width || 200,
|
|
6416
|
-
zIndex: 9999
|
|
6417
|
-
transformOrigin: "top center"
|
|
6331
|
+
zIndex: 9999
|
|
6418
6332
|
},
|
|
6419
6333
|
"data-state": open ? "open" : "closed",
|
|
6420
|
-
className:
|
|
6334
|
+
className: cn(
|
|
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
|
+
),
|
|
6421
6339
|
children: /* @__PURE__ */ jsxs26(
|
|
6422
6340
|
"div",
|
|
6423
6341
|
{
|
|
6424
6342
|
className: cn("rounded-md border bg-popover text-popover-foreground shadow-md", "backdrop-blur-sm bg-popover/95 border-border/60"),
|
|
6425
6343
|
children: [
|
|
6426
|
-
showClear && value.length > 0 && /* @__PURE__ */
|
|
6344
|
+
showClear && value.length > 0 && /* @__PURE__ */ jsx31("div", { className: "px-3 py-2 border-b border-border/60 flex justify-end", children: /* @__PURE__ */ jsx31(
|
|
6427
6345
|
"button",
|
|
6428
6346
|
{
|
|
6429
6347
|
type: "button",
|
|
@@ -6437,8 +6355,8 @@ var MultiCombobox = ({
|
|
|
6437
6355
|
}
|
|
6438
6356
|
) }),
|
|
6439
6357
|
enableSearch && /* @__PURE__ */ jsxs26("div", { className: "relative border-b border-border/60", children: [
|
|
6440
|
-
/* @__PURE__ */
|
|
6441
|
-
/* @__PURE__ */
|
|
6358
|
+
/* @__PURE__ */ jsx31(Search3, { className: cn("absolute left-2 top-2.5 text-muted-foreground", sizeStyles8[size].icon) }),
|
|
6359
|
+
/* @__PURE__ */ jsx31(
|
|
6442
6360
|
"input",
|
|
6443
6361
|
{
|
|
6444
6362
|
ref: inputRef,
|
|
@@ -6453,9 +6371,9 @@ var MultiCombobox = ({
|
|
|
6453
6371
|
}
|
|
6454
6372
|
)
|
|
6455
6373
|
] }),
|
|
6456
|
-
/* @__PURE__ */
|
|
6457
|
-
/* @__PURE__ */
|
|
6458
|
-
/* @__PURE__ */
|
|
6374
|
+
/* @__PURE__ */ jsx31("ul", { className: cn("max-h-60 overflow-y-auto p-1", size === "lg" ? "text-base" : size === "sm" ? "text-xs" : "text-sm"), children: loading2 ? /* @__PURE__ */ jsx31("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: [
|
|
6375
|
+
/* @__PURE__ */ jsx31(Loader23, { className: "h-6 w-6 animate-spin text-primary" }),
|
|
6376
|
+
/* @__PURE__ */ jsx31("span", { className: "text-muted-foreground", children: loadingText })
|
|
6459
6377
|
] }) }) : filtered.length ? filtered.map((item, index) => {
|
|
6460
6378
|
const isSelected = value.includes(item.value);
|
|
6461
6379
|
const isDisabled = disabledOptions.includes(item.value);
|
|
@@ -6472,7 +6390,7 @@ var MultiCombobox = ({
|
|
|
6472
6390
|
inputRef.current?.focus();
|
|
6473
6391
|
},
|
|
6474
6392
|
style: {
|
|
6475
|
-
animationDelay: open ? `${
|
|
6393
|
+
animationDelay: open ? `${index * 25}ms` : "0ms"
|
|
6476
6394
|
},
|
|
6477
6395
|
className: cn(
|
|
6478
6396
|
"dropdown-item flex cursor-pointer items-center justify-between rounded-sm transition-colors",
|
|
@@ -6483,12 +6401,12 @@ var MultiCombobox = ({
|
|
|
6483
6401
|
),
|
|
6484
6402
|
children: [
|
|
6485
6403
|
item.label,
|
|
6486
|
-
isSelected && /* @__PURE__ */
|
|
6404
|
+
isSelected && /* @__PURE__ */ jsx31(Check5, { className: sizeStyles8[size].icon })
|
|
6487
6405
|
]
|
|
6488
6406
|
},
|
|
6489
6407
|
item.value
|
|
6490
6408
|
);
|
|
6491
|
-
}) : /* @__PURE__ */
|
|
6409
|
+
}) : /* @__PURE__ */ jsx31(
|
|
6492
6410
|
"li",
|
|
6493
6411
|
{
|
|
6494
6412
|
className: cn(
|
|
@@ -6496,9 +6414,9 @@ var MultiCombobox = ({
|
|
|
6496
6414
|
size === "lg" ? "text-base" : size === "sm" ? "text-xs" : "text-sm"
|
|
6497
6415
|
),
|
|
6498
6416
|
children: /* @__PURE__ */ jsxs26("div", { className: "flex flex-col items-center gap-2 animate-in fade-in-0 zoom-in-95 duration-300", children: [
|
|
6499
|
-
/* @__PURE__ */
|
|
6500
|
-
/* @__PURE__ */
|
|
6501
|
-
query && /* @__PURE__ */
|
|
6417
|
+
/* @__PURE__ */ jsx31(SearchX2, { className: "h-8 w-8 opacity-40 text-muted-foreground" }),
|
|
6418
|
+
/* @__PURE__ */ jsx31("span", { children: emptyText }),
|
|
6419
|
+
query && /* @__PURE__ */ jsx31("button", { type: "button", onClick: () => setQuery(""), className: "text-xs text-primary hover:underline", children: "Clear search" })
|
|
6502
6420
|
] })
|
|
6503
6421
|
}
|
|
6504
6422
|
) })
|
|
@@ -6514,7 +6432,7 @@ var MultiCombobox = ({
|
|
|
6514
6432
|
|
|
6515
6433
|
// ../../components/ui/RadioGroup.tsx
|
|
6516
6434
|
import * as React25 from "react";
|
|
6517
|
-
import { jsx as
|
|
6435
|
+
import { jsx as jsx32, jsxs as jsxs27 } from "react/jsx-runtime";
|
|
6518
6436
|
var RadioGroupContext = React25.createContext(void 0);
|
|
6519
6437
|
var useRadioGroup = () => {
|
|
6520
6438
|
const context = React25.useContext(RadioGroupContext);
|
|
@@ -6552,7 +6470,7 @@ var RadioGroup = React25.forwardRef(
|
|
|
6552
6470
|
};
|
|
6553
6471
|
const uniqueId = React25.useId();
|
|
6554
6472
|
const radioName = name || `radio-group-${uniqueId}`;
|
|
6555
|
-
return /* @__PURE__ */
|
|
6473
|
+
return /* @__PURE__ */ jsx32(
|
|
6556
6474
|
RadioGroupContext.Provider,
|
|
6557
6475
|
{
|
|
6558
6476
|
value: {
|
|
@@ -6564,7 +6482,7 @@ var RadioGroup = React25.forwardRef(
|
|
|
6564
6482
|
variant
|
|
6565
6483
|
},
|
|
6566
6484
|
children: /* @__PURE__ */ jsxs27("div", { className: "space-y-2", children: [
|
|
6567
|
-
/* @__PURE__ */
|
|
6485
|
+
/* @__PURE__ */ jsx32(
|
|
6568
6486
|
"div",
|
|
6569
6487
|
{
|
|
6570
6488
|
ref,
|
|
@@ -6581,7 +6499,7 @@ var RadioGroup = React25.forwardRef(
|
|
|
6581
6499
|
children
|
|
6582
6500
|
}
|
|
6583
6501
|
),
|
|
6584
|
-
error && errorMessage && /* @__PURE__ */
|
|
6502
|
+
error && errorMessage && /* @__PURE__ */ jsx32("p", { className: "text-sm text-destructive mt-1", children: errorMessage })
|
|
6585
6503
|
] })
|
|
6586
6504
|
}
|
|
6587
6505
|
);
|
|
@@ -6636,7 +6554,7 @@ var RadioGroupItem = React25.forwardRef(
|
|
|
6636
6554
|
),
|
|
6637
6555
|
children: [
|
|
6638
6556
|
/* @__PURE__ */ jsxs27("div", { className: "flex items-start gap-3", children: [
|
|
6639
|
-
/* @__PURE__ */
|
|
6557
|
+
/* @__PURE__ */ jsx32(
|
|
6640
6558
|
"button",
|
|
6641
6559
|
{
|
|
6642
6560
|
ref,
|
|
@@ -6655,22 +6573,22 @@ var RadioGroupItem = React25.forwardRef(
|
|
|
6655
6573
|
sizeStyles7[size].radio
|
|
6656
6574
|
),
|
|
6657
6575
|
onClick: () => onValueChange?.(value),
|
|
6658
|
-
children: /* @__PURE__ */
|
|
6576
|
+
children: /* @__PURE__ */ jsx32(
|
|
6659
6577
|
"span",
|
|
6660
6578
|
{
|
|
6661
6579
|
className: cn(
|
|
6662
6580
|
"flex items-center justify-center w-full h-full rounded-full transition-all duration-200",
|
|
6663
6581
|
isSelected && "bg-primary"
|
|
6664
6582
|
),
|
|
6665
|
-
children: isSelected && /* @__PURE__ */
|
|
6583
|
+
children: isSelected && /* @__PURE__ */ jsx32("span", { className: cn("bg-primary-foreground rounded-full", sizeStyles7[size].dot) })
|
|
6666
6584
|
}
|
|
6667
6585
|
)
|
|
6668
6586
|
}
|
|
6669
6587
|
),
|
|
6670
6588
|
/* @__PURE__ */ jsxs27("div", { className: "flex-1 min-w-0", children: [
|
|
6671
6589
|
/* @__PURE__ */ jsxs27("div", { className: "flex items-center gap-2", children: [
|
|
6672
|
-
Icon && /* @__PURE__ */
|
|
6673
|
-
/* @__PURE__ */
|
|
6590
|
+
Icon && /* @__PURE__ */ jsx32(Icon, { className: "h-4 w-4 text-foreground" }),
|
|
6591
|
+
/* @__PURE__ */ jsx32(
|
|
6674
6592
|
"label",
|
|
6675
6593
|
{
|
|
6676
6594
|
htmlFor: radioId,
|
|
@@ -6682,10 +6600,10 @@ var RadioGroupItem = React25.forwardRef(
|
|
|
6682
6600
|
}
|
|
6683
6601
|
)
|
|
6684
6602
|
] }),
|
|
6685
|
-
description && /* @__PURE__ */
|
|
6603
|
+
description && /* @__PURE__ */ jsx32("p", { className: "text-muted-foreground mt-1 text-xs", children: description })
|
|
6686
6604
|
] })
|
|
6687
6605
|
] }),
|
|
6688
|
-
/* @__PURE__ */
|
|
6606
|
+
/* @__PURE__ */ jsx32(
|
|
6689
6607
|
"input",
|
|
6690
6608
|
{
|
|
6691
6609
|
type: "radio",
|
|
@@ -6725,9 +6643,9 @@ var RadioGroupItem = React25.forwardRef(
|
|
|
6725
6643
|
),
|
|
6726
6644
|
onClick: () => onValueChange?.(value),
|
|
6727
6645
|
children: [
|
|
6728
|
-
Icon && /* @__PURE__ */
|
|
6646
|
+
Icon && /* @__PURE__ */ jsx32(Icon, { className: "h-4 w-4" }),
|
|
6729
6647
|
label || children,
|
|
6730
|
-
/* @__PURE__ */
|
|
6648
|
+
/* @__PURE__ */ jsx32(
|
|
6731
6649
|
"input",
|
|
6732
6650
|
{
|
|
6733
6651
|
type: "radio",
|
|
@@ -6745,7 +6663,7 @@ var RadioGroupItem = React25.forwardRef(
|
|
|
6745
6663
|
);
|
|
6746
6664
|
}
|
|
6747
6665
|
return /* @__PURE__ */ jsxs27("div", { className: cn("flex items-center gap-2", className), children: [
|
|
6748
|
-
/* @__PURE__ */
|
|
6666
|
+
/* @__PURE__ */ jsx32(
|
|
6749
6667
|
"button",
|
|
6750
6668
|
{
|
|
6751
6669
|
ref,
|
|
@@ -6764,14 +6682,14 @@ var RadioGroupItem = React25.forwardRef(
|
|
|
6764
6682
|
sizeStyles7[size].radio
|
|
6765
6683
|
),
|
|
6766
6684
|
onClick: () => onValueChange?.(value),
|
|
6767
|
-
children: /* @__PURE__ */
|
|
6685
|
+
children: /* @__PURE__ */ jsx32(
|
|
6768
6686
|
"span",
|
|
6769
6687
|
{
|
|
6770
6688
|
className: cn(
|
|
6771
6689
|
"flex items-center justify-center w-full h-full rounded-full transition-all duration-200",
|
|
6772
6690
|
isSelected && "bg-primary"
|
|
6773
6691
|
),
|
|
6774
|
-
children: isSelected && /* @__PURE__ */
|
|
6692
|
+
children: isSelected && /* @__PURE__ */ jsx32("span", { className: cn("bg-primary-foreground rounded-full", sizeStyles7[size].dot) })
|
|
6775
6693
|
}
|
|
6776
6694
|
)
|
|
6777
6695
|
}
|
|
@@ -6788,14 +6706,14 @@ var RadioGroupItem = React25.forwardRef(
|
|
|
6788
6706
|
),
|
|
6789
6707
|
children: [
|
|
6790
6708
|
/* @__PURE__ */ jsxs27("div", { className: "flex items-center gap-2", children: [
|
|
6791
|
-
Icon && /* @__PURE__ */
|
|
6792
|
-
/* @__PURE__ */
|
|
6709
|
+
Icon && /* @__PURE__ */ jsx32(Icon, { className: "h-4 w-4" }),
|
|
6710
|
+
/* @__PURE__ */ jsx32("span", { children: label || children })
|
|
6793
6711
|
] }),
|
|
6794
|
-
description && /* @__PURE__ */
|
|
6712
|
+
description && /* @__PURE__ */ jsx32("p", { className: "text-muted-foreground mt-0.5 text-xs", children: description })
|
|
6795
6713
|
]
|
|
6796
6714
|
}
|
|
6797
6715
|
),
|
|
6798
|
-
/* @__PURE__ */
|
|
6716
|
+
/* @__PURE__ */ jsx32(
|
|
6799
6717
|
"input",
|
|
6800
6718
|
{
|
|
6801
6719
|
type: "radio",
|
|
@@ -6815,7 +6733,7 @@ RadioGroupItem.displayName = "RadioGroupItem";
|
|
|
6815
6733
|
|
|
6816
6734
|
// ../../components/ui/Slider.tsx
|
|
6817
6735
|
import * as React26 from "react";
|
|
6818
|
-
import { jsx as
|
|
6736
|
+
import { jsx as jsx33, jsxs as jsxs28 } from "react/jsx-runtime";
|
|
6819
6737
|
var SIZE_STYLES = {
|
|
6820
6738
|
sm: {
|
|
6821
6739
|
track: "h-1",
|
|
@@ -6877,18 +6795,18 @@ var Slider = React26.forwardRef(
|
|
|
6877
6795
|
}
|
|
6878
6796
|
return /* @__PURE__ */ jsxs28("div", { className: cn("w-full space-y-2", containerClassName), children: [
|
|
6879
6797
|
(label || showValue) && /* @__PURE__ */ jsxs28("div", { className: "flex items-center justify-between", children: [
|
|
6880
|
-
label && /* @__PURE__ */
|
|
6881
|
-
showValue && /* @__PURE__ */
|
|
6798
|
+
label && /* @__PURE__ */ jsx33("label", { className: cn("text-sm font-medium text-foreground", labelClassName), children: label }),
|
|
6799
|
+
showValue && /* @__PURE__ */ jsx33("span", { className: cn("text-xs font-mono text-muted-foreground min-w-[2rem] text-right", valueClassName), children: displayValue })
|
|
6882
6800
|
] }),
|
|
6883
6801
|
/* @__PURE__ */ jsxs28("div", { className: cn("relative flex items-center", sizeStyles8.container), children: [
|
|
6884
|
-
/* @__PURE__ */
|
|
6802
|
+
/* @__PURE__ */ jsx33("div", { className: cn("w-full rounded-full bg-secondary relative overflow-hidden", sizeStyles8.track, trackClassName), children: /* @__PURE__ */ jsx33(
|
|
6885
6803
|
"div",
|
|
6886
6804
|
{
|
|
6887
6805
|
className: "absolute left-0 top-0 h-full bg-primary rounded-full transition-all duration-150 ease-out",
|
|
6888
6806
|
style: { width: `${percentage}%` }
|
|
6889
6807
|
}
|
|
6890
6808
|
) }),
|
|
6891
|
-
/* @__PURE__ */
|
|
6809
|
+
/* @__PURE__ */ jsx33(
|
|
6892
6810
|
"input",
|
|
6893
6811
|
{
|
|
6894
6812
|
ref,
|
|
@@ -6954,7 +6872,7 @@ Slider.displayName = "Slider";
|
|
|
6954
6872
|
// ../../components/ui/OverlayControls.tsx
|
|
6955
6873
|
import { Dot, Maximize2, Pause, Play, RotateCcw, RotateCw, Volume2, VolumeX } from "lucide-react";
|
|
6956
6874
|
import React27 from "react";
|
|
6957
|
-
import { Fragment as Fragment10, jsx as
|
|
6875
|
+
import { Fragment as Fragment10, jsx as jsx34, jsxs as jsxs29 } from "react/jsx-runtime";
|
|
6958
6876
|
function OverlayControls({
|
|
6959
6877
|
mode,
|
|
6960
6878
|
value,
|
|
@@ -7178,7 +7096,7 @@ function OverlayControls({
|
|
|
7178
7096
|
setPreviewData(null);
|
|
7179
7097
|
};
|
|
7180
7098
|
return /* @__PURE__ */ jsxs29(Fragment10, { children: [
|
|
7181
|
-
keyboardFeedback && /* @__PURE__ */
|
|
7099
|
+
keyboardFeedback && /* @__PURE__ */ jsx34(
|
|
7182
7100
|
"div",
|
|
7183
7101
|
{
|
|
7184
7102
|
className: cn(
|
|
@@ -7186,10 +7104,10 @@ function OverlayControls({
|
|
|
7186
7104
|
keyboardFeedback.type === "seek" && (keyboardFeedback.value ?? 0) > 0 ? "justify-end pr-32" : keyboardFeedback.type === "seek" && (keyboardFeedback.value ?? 0) < 0 ? "justify-start pl-32" : "justify-center"
|
|
7187
7105
|
),
|
|
7188
7106
|
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: [
|
|
7189
|
-
keyboardFeedback.type === "play" && /* @__PURE__ */
|
|
7190
|
-
keyboardFeedback.type === "pause" && /* @__PURE__ */
|
|
7107
|
+
keyboardFeedback.type === "play" && /* @__PURE__ */ jsx34(Play, { className: "w-16 h-16 text-white", fill: "white" }),
|
|
7108
|
+
keyboardFeedback.type === "pause" && /* @__PURE__ */ jsx34(Pause, { className: "w-16 h-16 text-white", fill: "white" }),
|
|
7191
7109
|
keyboardFeedback.type === "seek" && /* @__PURE__ */ jsxs29("div", { className: "flex items-center gap-3", children: [
|
|
7192
|
-
(keyboardFeedback.value ?? 0) > 0 ? /* @__PURE__ */
|
|
7110
|
+
(keyboardFeedback.value ?? 0) > 0 ? /* @__PURE__ */ jsx34(RotateCw, { className: "w-12 h-12 text-white" }) : /* @__PURE__ */ jsx34(RotateCcw, { className: "w-12 h-12 text-white" }),
|
|
7193
7111
|
/* @__PURE__ */ jsxs29("span", { className: "text-3xl font-bold text-white", children: [
|
|
7194
7112
|
keyboardFeedback.value && keyboardFeedback.value > 0 ? "+" : "",
|
|
7195
7113
|
keyboardFeedback.value,
|
|
@@ -7197,21 +7115,21 @@ function OverlayControls({
|
|
|
7197
7115
|
] })
|
|
7198
7116
|
] }),
|
|
7199
7117
|
keyboardFeedback.type === "volume" && /* @__PURE__ */ jsxs29("div", { className: "flex items-center gap-3", children: [
|
|
7200
|
-
/* @__PURE__ */
|
|
7118
|
+
/* @__PURE__ */ jsx34(Volume2, { className: "w-12 h-12 text-white" }),
|
|
7201
7119
|
/* @__PURE__ */ jsxs29("div", { className: "flex flex-col gap-1.5", children: [
|
|
7202
7120
|
/* @__PURE__ */ jsxs29("span", { className: "text-2xl font-bold text-white", children: [
|
|
7203
7121
|
keyboardFeedback.value,
|
|
7204
7122
|
"%"
|
|
7205
7123
|
] }),
|
|
7206
|
-
/* @__PURE__ */
|
|
7124
|
+
/* @__PURE__ */ jsx34("div", { className: "w-32 h-1.5 bg-white/30 rounded-full overflow-hidden", children: /* @__PURE__ */ jsx34("div", { className: "h-full bg-white rounded-full transition-all", style: { width: `${keyboardFeedback.value}%` } }) })
|
|
7207
7125
|
] })
|
|
7208
7126
|
] }),
|
|
7209
|
-
keyboardFeedback.type === "mute" && /* @__PURE__ */
|
|
7210
|
-
keyboardFeedback.type === "unmute" && /* @__PURE__ */
|
|
7127
|
+
keyboardFeedback.type === "mute" && /* @__PURE__ */ jsx34(VolumeX, { className: "w-16 h-16 text-white" }),
|
|
7128
|
+
keyboardFeedback.type === "unmute" && /* @__PURE__ */ jsx34(Volume2, { className: "w-16 h-16 text-white" })
|
|
7211
7129
|
] })
|
|
7212
7130
|
}
|
|
7213
7131
|
),
|
|
7214
|
-
/* @__PURE__ */
|
|
7132
|
+
/* @__PURE__ */ jsx34(
|
|
7215
7133
|
"div",
|
|
7216
7134
|
{
|
|
7217
7135
|
className: cn(
|
|
@@ -7222,7 +7140,7 @@ function OverlayControls({
|
|
|
7222
7140
|
),
|
|
7223
7141
|
children: /* @__PURE__ */ jsxs29("div", { className: "px-4", children: [
|
|
7224
7142
|
/* @__PURE__ */ jsxs29("div", { ref: sliderRef, onMouseMove: handleSliderMouseMove, onMouseLeave: handleSliderMouseLeave, className: "relative", children: [
|
|
7225
|
-
/* @__PURE__ */
|
|
7143
|
+
/* @__PURE__ */ jsx34(
|
|
7226
7144
|
Slider,
|
|
7227
7145
|
{
|
|
7228
7146
|
min: 0,
|
|
@@ -7247,14 +7165,14 @@ function OverlayControls({
|
|
|
7247
7165
|
noFocus: true
|
|
7248
7166
|
}
|
|
7249
7167
|
),
|
|
7250
|
-
previewData && /* @__PURE__ */
|
|
7251
|
-
/* @__PURE__ */
|
|
7252
|
-
/* @__PURE__ */
|
|
7253
|
-
] }) : /* @__PURE__ */
|
|
7168
|
+
previewData && /* @__PURE__ */ jsx34("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: [
|
|
7169
|
+
/* @__PURE__ */ jsx34("img", { src: previewData.url, alt: "Preview", className: "w-40 h-24 object-cover" }),
|
|
7170
|
+
/* @__PURE__ */ jsx34("div", { className: "px-2 py-1 text-xs font-mono text-center bg-background/80", children: formatTime3(previewData.time) })
|
|
7171
|
+
] }) : /* @__PURE__ */ jsx34("div", { className: "px-3 py-1.5 rounded-md bg-background/90 backdrop-blur border border-border shadow-lg", children: /* @__PURE__ */ jsx34("div", { className: "text-xs font-mono text-center", children: formatTime3(previewData.time) }) }) })
|
|
7254
7172
|
] }),
|
|
7255
7173
|
showControlsBar && /* @__PURE__ */ jsxs29("div", { className: "mt-2 flex items-center justify-between gap-2", children: [
|
|
7256
7174
|
/* @__PURE__ */ jsxs29("div", { className: "flex items-center gap-2", children: [
|
|
7257
|
-
/* @__PURE__ */
|
|
7175
|
+
/* @__PURE__ */ jsx34(
|
|
7258
7176
|
Button_default,
|
|
7259
7177
|
{
|
|
7260
7178
|
variant: "ghost",
|
|
@@ -7262,10 +7180,10 @@ function OverlayControls({
|
|
|
7262
7180
|
onClick: onTogglePlay,
|
|
7263
7181
|
title: playing ? "T\u1EA1m d\u1EEBng" : "Ph\xE1t",
|
|
7264
7182
|
className: "bg-background/60 hover:bg-background/80 border-transparent shadow-sm outline-none focus:outline-none focus:ring-0",
|
|
7265
|
-
children: playing ? /* @__PURE__ */
|
|
7183
|
+
children: playing ? /* @__PURE__ */ jsx34(Pause, { className: "w-4 h-4" }) : /* @__PURE__ */ jsx34(Play, { className: "w-4 h-4" })
|
|
7266
7184
|
}
|
|
7267
7185
|
),
|
|
7268
|
-
onSkip && /* @__PURE__ */
|
|
7186
|
+
onSkip && /* @__PURE__ */ jsx34(
|
|
7269
7187
|
Button_default,
|
|
7270
7188
|
{
|
|
7271
7189
|
variant: "ghost",
|
|
@@ -7273,10 +7191,10 @@ function OverlayControls({
|
|
|
7273
7191
|
onClick: () => onSkip(-skipSeconds),
|
|
7274
7192
|
title: `L\xF9i ${skipSeconds}s`,
|
|
7275
7193
|
className: "bg-background/60 hover:bg-background/80 border-transparent shadow-sm outline-none focus:outline-none focus:ring-0",
|
|
7276
|
-
children: /* @__PURE__ */
|
|
7194
|
+
children: /* @__PURE__ */ jsx34(RotateCcw, { className: "w-4 h-4" })
|
|
7277
7195
|
}
|
|
7278
7196
|
),
|
|
7279
|
-
onSkip && /* @__PURE__ */
|
|
7197
|
+
onSkip && /* @__PURE__ */ jsx34(
|
|
7280
7198
|
Button_default,
|
|
7281
7199
|
{
|
|
7282
7200
|
variant: "ghost",
|
|
@@ -7284,7 +7202,7 @@ function OverlayControls({
|
|
|
7284
7202
|
onClick: () => onSkip(skipSeconds),
|
|
7285
7203
|
title: `Tua ${skipSeconds}s`,
|
|
7286
7204
|
className: "bg-background/60 hover:bg-background/80 border-transparent shadow-sm outline-none focus:outline-none focus:ring-0",
|
|
7287
|
-
children: /* @__PURE__ */
|
|
7205
|
+
children: /* @__PURE__ */ jsx34(RotateCw, { className: "w-4 h-4" })
|
|
7288
7206
|
}
|
|
7289
7207
|
),
|
|
7290
7208
|
(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: [
|
|
@@ -7293,7 +7211,7 @@ function OverlayControls({
|
|
|
7293
7211
|
formatTime3(max)
|
|
7294
7212
|
] }),
|
|
7295
7213
|
/* @__PURE__ */ jsxs29("div", { className: "flex items-center gap-2", children: [
|
|
7296
|
-
/* @__PURE__ */
|
|
7214
|
+
/* @__PURE__ */ jsx34(
|
|
7297
7215
|
Button_default,
|
|
7298
7216
|
{
|
|
7299
7217
|
variant: "ghost",
|
|
@@ -7301,10 +7219,10 @@ function OverlayControls({
|
|
|
7301
7219
|
onClick: onToggleMute,
|
|
7302
7220
|
title: muted ? "B\u1EADt ti\u1EBFng" : "T\u1EAFt ti\u1EBFng",
|
|
7303
7221
|
className: "bg-background/60 hover:bg-background/80 border-transparent shadow-sm outline-none focus:outline-none focus:ring-0",
|
|
7304
|
-
children: muted || (volume ?? 1) === 0 ? /* @__PURE__ */
|
|
7222
|
+
children: muted || (volume ?? 1) === 0 ? /* @__PURE__ */ jsx34(VolumeX, { className: "w-4 h-4" }) : /* @__PURE__ */ jsx34(Volume2, { className: "w-4 h-4" })
|
|
7305
7223
|
}
|
|
7306
7224
|
),
|
|
7307
|
-
/* @__PURE__ */
|
|
7225
|
+
/* @__PURE__ */ jsx34("div", { className: "w-24", children: /* @__PURE__ */ jsx34(
|
|
7308
7226
|
Slider,
|
|
7309
7227
|
{
|
|
7310
7228
|
min: 0,
|
|
@@ -7329,7 +7247,7 @@ function OverlayControls({
|
|
|
7329
7247
|
title: "Tr\u1EF1c ti\u1EBFp (v\u1EC1 Live)",
|
|
7330
7248
|
className: "bg-background/60 hover:bg-background/80 border-transparent shadow-sm outline-none focus:outline-none focus:ring-0",
|
|
7331
7249
|
children: [
|
|
7332
|
-
/* @__PURE__ */
|
|
7250
|
+
/* @__PURE__ */ jsx34(Dot, { className: "w-10 h-10 text-destructive" }),
|
|
7333
7251
|
"Tr\u1EF1c ti\u1EBFp"
|
|
7334
7252
|
]
|
|
7335
7253
|
}
|
|
@@ -7349,7 +7267,7 @@ function OverlayControls({
|
|
|
7349
7267
|
]
|
|
7350
7268
|
}
|
|
7351
7269
|
),
|
|
7352
|
-
rateOpen && /* @__PURE__ */
|
|
7270
|
+
rateOpen && /* @__PURE__ */ jsx34("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(
|
|
7353
7271
|
"button",
|
|
7354
7272
|
{
|
|
7355
7273
|
onClick: () => {
|
|
@@ -7365,7 +7283,7 @@ function OverlayControls({
|
|
|
7365
7283
|
r
|
|
7366
7284
|
)) })
|
|
7367
7285
|
] }),
|
|
7368
|
-
onToggleFullscreen && /* @__PURE__ */
|
|
7286
|
+
onToggleFullscreen && /* @__PURE__ */ jsx34(
|
|
7369
7287
|
Button_default,
|
|
7370
7288
|
{
|
|
7371
7289
|
variant: "ghost",
|
|
@@ -7373,7 +7291,7 @@ function OverlayControls({
|
|
|
7373
7291
|
onClick: onToggleFullscreen,
|
|
7374
7292
|
title: "To\xE0n m\xE0n h\xECnh",
|
|
7375
7293
|
className: "px-3 bg-background/60 hover:bg-background/80 border-transparent shadow-sm outline-none focus:outline-none focus:ring-0",
|
|
7376
|
-
children: /* @__PURE__ */
|
|
7294
|
+
children: /* @__PURE__ */ jsx34(Maximize2, { className: "w-4 h-4" })
|
|
7377
7295
|
}
|
|
7378
7296
|
)
|
|
7379
7297
|
] })
|
|
@@ -7387,7 +7305,7 @@ function OverlayControls({
|
|
|
7387
7305
|
// ../../components/ui/CategoryTreeSelect.tsx
|
|
7388
7306
|
import { useState as useState24 } from "react";
|
|
7389
7307
|
import { ChevronRight as ChevronRight5, ChevronDown as ChevronDown3, Check as Check6 } from "lucide-react";
|
|
7390
|
-
import { Fragment as Fragment11, jsx as
|
|
7308
|
+
import { Fragment as Fragment11, jsx as jsx35, jsxs as jsxs30 } from "react/jsx-runtime";
|
|
7391
7309
|
function CategoryTreeSelect({ categories, value, onChange, placeholder = "Ch\u1ECDn danh m\u1EE5c", disabled }) {
|
|
7392
7310
|
const [isOpen, setIsOpen] = useState24(false);
|
|
7393
7311
|
const [expandedNodes, setExpandedNodes] = useState24(/* @__PURE__ */ new Set());
|
|
@@ -7441,14 +7359,14 @@ function CategoryTreeSelect({ categories, value, onChange, placeholder = "Ch\u1E
|
|
|
7441
7359
|
),
|
|
7442
7360
|
style: { paddingLeft: `${level * 1.5 + 0.75}rem` },
|
|
7443
7361
|
children: [
|
|
7444
|
-
isSelected && /* @__PURE__ */
|
|
7362
|
+
isSelected && /* @__PURE__ */ jsx35(
|
|
7445
7363
|
"span",
|
|
7446
7364
|
{
|
|
7447
7365
|
"aria-hidden": true,
|
|
7448
7366
|
className: "absolute left-0 top-0 bottom-0 w-1 bg-primary"
|
|
7449
7367
|
}
|
|
7450
7368
|
),
|
|
7451
|
-
hasChildren ? /* @__PURE__ */
|
|
7369
|
+
hasChildren ? /* @__PURE__ */ jsx35(
|
|
7452
7370
|
"button",
|
|
7453
7371
|
{
|
|
7454
7372
|
type: "button",
|
|
@@ -7457,33 +7375,33 @@ function CategoryTreeSelect({ categories, value, onChange, placeholder = "Ch\u1E
|
|
|
7457
7375
|
toggleExpand(category.id);
|
|
7458
7376
|
},
|
|
7459
7377
|
className: "p-0.5 hover:bg-accent rounded",
|
|
7460
|
-
children: isExpanded ? /* @__PURE__ */
|
|
7378
|
+
children: isExpanded ? /* @__PURE__ */ jsx35(ChevronDown3, { className: "w-4 h-4" }) : /* @__PURE__ */ jsx35(ChevronRight5, { className: "w-4 h-4" })
|
|
7461
7379
|
}
|
|
7462
|
-
) : /* @__PURE__ */
|
|
7380
|
+
) : /* @__PURE__ */ jsx35("span", { className: "w-5" }),
|
|
7463
7381
|
/* @__PURE__ */ jsxs30(
|
|
7464
7382
|
"div",
|
|
7465
7383
|
{
|
|
7466
7384
|
onClick: () => handleSelect(category.id, category),
|
|
7467
7385
|
className: "flex items-center gap-2 flex-1",
|
|
7468
7386
|
children: [
|
|
7469
|
-
/* @__PURE__ */
|
|
7387
|
+
/* @__PURE__ */ jsx35(
|
|
7470
7388
|
"div",
|
|
7471
7389
|
{
|
|
7472
7390
|
className: cn(
|
|
7473
7391
|
"w-4 h-4 border-2 rounded flex items-center justify-center transition-colors",
|
|
7474
7392
|
isSelected ? "bg-primary border-primary" : "border-muted-foreground/30"
|
|
7475
7393
|
),
|
|
7476
|
-
children: isSelected && /* @__PURE__ */
|
|
7394
|
+
children: isSelected && /* @__PURE__ */ jsx35(Check6, { className: "w-3 h-3 text-primary-foreground" })
|
|
7477
7395
|
}
|
|
7478
7396
|
),
|
|
7479
|
-
/* @__PURE__ */
|
|
7397
|
+
/* @__PURE__ */ jsx35("span", { className: cn("text-sm", isSelected && "font-medium text-primary"), children: category.name })
|
|
7480
7398
|
]
|
|
7481
7399
|
}
|
|
7482
7400
|
)
|
|
7483
7401
|
]
|
|
7484
7402
|
}
|
|
7485
7403
|
),
|
|
7486
|
-
hasChildren && isExpanded && /* @__PURE__ */
|
|
7404
|
+
hasChildren && isExpanded && /* @__PURE__ */ jsx35("div", { children: children.map((child) => renderCategory(child, level + 1)) })
|
|
7487
7405
|
] }, category.id);
|
|
7488
7406
|
};
|
|
7489
7407
|
const selectedCount = value.length;
|
|
@@ -7505,14 +7423,14 @@ function CategoryTreeSelect({ categories, value, onChange, placeholder = "Ch\u1E
|
|
|
7505
7423
|
isOpen && "border-primary"
|
|
7506
7424
|
),
|
|
7507
7425
|
children: [
|
|
7508
|
-
/* @__PURE__ */
|
|
7509
|
-
/* @__PURE__ */
|
|
7426
|
+
/* @__PURE__ */ jsx35("span", { className: cn("text-sm", selectedCount === 0 && "text-muted-foreground"), children: displayText }),
|
|
7427
|
+
/* @__PURE__ */ jsx35(ChevronDown3, { className: cn("w-4 h-4 transition-transform", isOpen && "transform rotate-180") })
|
|
7510
7428
|
]
|
|
7511
7429
|
}
|
|
7512
7430
|
),
|
|
7513
7431
|
isOpen && !disabled && /* @__PURE__ */ jsxs30(Fragment11, { children: [
|
|
7514
|
-
/* @__PURE__ */
|
|
7515
|
-
/* @__PURE__ */
|
|
7432
|
+
/* @__PURE__ */ jsx35("div", { className: "fixed inset-0 z-10", onClick: () => setIsOpen(false) }),
|
|
7433
|
+
/* @__PURE__ */ jsx35(
|
|
7516
7434
|
"div",
|
|
7517
7435
|
{
|
|
7518
7436
|
className: cn(
|
|
@@ -7520,7 +7438,7 @@ function CategoryTreeSelect({ categories, value, onChange, placeholder = "Ch\u1E
|
|
|
7520
7438
|
"rounded-md border bg-popover text-popover-foreground shadow-md",
|
|
7521
7439
|
"backdrop-blur-sm bg-popover/95 border-border/60"
|
|
7522
7440
|
),
|
|
7523
|
-
children: /* @__PURE__ */
|
|
7441
|
+
children: /* @__PURE__ */ jsx35("div", { className: "p-1", children: parentCategories.length === 0 ? /* @__PURE__ */ jsx35("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)) })
|
|
7524
7442
|
}
|
|
7525
7443
|
)
|
|
7526
7444
|
] })
|
|
@@ -7531,7 +7449,7 @@ function CategoryTreeSelect({ categories, value, onChange, placeholder = "Ch\u1E
|
|
|
7531
7449
|
import { useState as useState25, useRef as useRef10, useCallback as useCallback9 } from "react";
|
|
7532
7450
|
import { Upload, X as X9, Image as ImageIcon, Loader2 as Loader24, Check as Check7 } from "lucide-react";
|
|
7533
7451
|
import { useTranslations as useTranslations6 } from "next-intl";
|
|
7534
|
-
import { jsx as
|
|
7452
|
+
import { jsx as jsx36, jsxs as jsxs31 } from "react/jsx-runtime";
|
|
7535
7453
|
function ImageUpload({
|
|
7536
7454
|
onUpload,
|
|
7537
7455
|
onRemove,
|
|
@@ -7558,106 +7476,94 @@ function ImageUpload({
|
|
|
7558
7476
|
md: "w-24 h-24",
|
|
7559
7477
|
lg: "w-32 h-32"
|
|
7560
7478
|
};
|
|
7561
|
-
const handleDragOver = useCallback9(
|
|
7562
|
-
(
|
|
7563
|
-
|
|
7564
|
-
|
|
7565
|
-
|
|
7566
|
-
|
|
7567
|
-
},
|
|
7568
|
-
[disabled]
|
|
7569
|
-
);
|
|
7479
|
+
const handleDragOver = useCallback9((e) => {
|
|
7480
|
+
e.preventDefault();
|
|
7481
|
+
if (!disabled) {
|
|
7482
|
+
setIsDragging(true);
|
|
7483
|
+
}
|
|
7484
|
+
}, [disabled]);
|
|
7570
7485
|
const handleDragLeave = useCallback9((e) => {
|
|
7571
7486
|
e.preventDefault();
|
|
7572
7487
|
setIsDragging(false);
|
|
7573
7488
|
}, []);
|
|
7574
|
-
const handleFiles = useCallback9(
|
|
7575
|
-
|
|
7576
|
-
|
|
7577
|
-
|
|
7578
|
-
if (file.size > maxSize * 1024 * 1024) {
|
|
7579
|
-
addToast({
|
|
7580
|
-
type: "error",
|
|
7581
|
-
message: `File "${file.name}" is too large. Max size: ${maxSize}MB`
|
|
7582
|
-
});
|
|
7583
|
-
return false;
|
|
7584
|
-
}
|
|
7585
|
-
if (!file.type.startsWith("image/")) {
|
|
7586
|
-
addToast({
|
|
7587
|
-
type: "error",
|
|
7588
|
-
message: `File "${file.name}" is not a valid image`
|
|
7589
|
-
});
|
|
7590
|
-
return false;
|
|
7591
|
-
}
|
|
7592
|
-
return true;
|
|
7593
|
-
});
|
|
7594
|
-
if (validFiles.length === 0) return;
|
|
7595
|
-
setUploading(true);
|
|
7596
|
-
try {
|
|
7597
|
-
for (const file of validFiles) {
|
|
7598
|
-
const formData = new FormData();
|
|
7599
|
-
formData.append("file", file);
|
|
7600
|
-
const response = {
|
|
7601
|
-
id: Date.now(),
|
|
7602
|
-
path: "",
|
|
7603
|
-
url: URL.createObjectURL(file),
|
|
7604
|
-
originalName: file.name,
|
|
7605
|
-
size: file.size,
|
|
7606
|
-
mimeType: file.type,
|
|
7607
|
-
width: 0,
|
|
7608
|
-
height: 0,
|
|
7609
|
-
formattedSize: `${(file.size / 1024).toFixed(1)} KB`
|
|
7610
|
-
};
|
|
7611
|
-
const newImage = {
|
|
7612
|
-
id: response.id,
|
|
7613
|
-
path: response.path,
|
|
7614
|
-
url: response.url,
|
|
7615
|
-
originalName: response.originalName,
|
|
7616
|
-
size: response.size,
|
|
7617
|
-
mimeType: response.mimeType,
|
|
7618
|
-
width: response.width,
|
|
7619
|
-
height: response.height,
|
|
7620
|
-
formattedSize: response.formattedSize
|
|
7621
|
-
};
|
|
7622
|
-
setUploadedImages((prev) => [...prev, newImage]);
|
|
7623
|
-
onUpload?.(newImage);
|
|
7624
|
-
addToast({
|
|
7625
|
-
type: "success",
|
|
7626
|
-
message: `"${file.name}" uploaded successfully`
|
|
7627
|
-
});
|
|
7628
|
-
}
|
|
7629
|
-
} catch (error) {
|
|
7630
|
-
console.error("Upload error:", error);
|
|
7489
|
+
const handleFiles = useCallback9(async (files) => {
|
|
7490
|
+
if (files.length === 0) return;
|
|
7491
|
+
const validFiles = files.filter((file) => {
|
|
7492
|
+
if (file.size > maxSize * 1024 * 1024) {
|
|
7631
7493
|
addToast({
|
|
7632
7494
|
type: "error",
|
|
7633
|
-
message:
|
|
7495
|
+
message: `File "${file.name}" is too large. Max size: ${maxSize}MB`
|
|
7634
7496
|
});
|
|
7635
|
-
|
|
7636
|
-
setUploading(false);
|
|
7497
|
+
return false;
|
|
7637
7498
|
}
|
|
7638
|
-
|
|
7639
|
-
|
|
7640
|
-
|
|
7641
|
-
|
|
7642
|
-
|
|
7643
|
-
|
|
7644
|
-
setIsDragging(false);
|
|
7645
|
-
if (disabled) return;
|
|
7646
|
-
const files = Array.from(e.dataTransfer.files);
|
|
7647
|
-
handleFiles(files);
|
|
7648
|
-
},
|
|
7649
|
-
[disabled, handleFiles]
|
|
7650
|
-
);
|
|
7651
|
-
const handleFileSelect = useCallback9(
|
|
7652
|
-
(e) => {
|
|
7653
|
-
const files = Array.from(e.target.files || []);
|
|
7654
|
-
handleFiles(files);
|
|
7655
|
-
if (fileInputRef.current) {
|
|
7656
|
-
fileInputRef.current.value = "";
|
|
7499
|
+
if (!file.type.startsWith("image/")) {
|
|
7500
|
+
addToast({
|
|
7501
|
+
type: "error",
|
|
7502
|
+
message: `File "${file.name}" is not a valid image`
|
|
7503
|
+
});
|
|
7504
|
+
return false;
|
|
7657
7505
|
}
|
|
7658
|
-
|
|
7659
|
-
|
|
7660
|
-
|
|
7506
|
+
return true;
|
|
7507
|
+
});
|
|
7508
|
+
if (validFiles.length === 0) return;
|
|
7509
|
+
setUploading(true);
|
|
7510
|
+
try {
|
|
7511
|
+
for (const file of validFiles) {
|
|
7512
|
+
const formData = new FormData();
|
|
7513
|
+
formData.append("file", file);
|
|
7514
|
+
const response = {
|
|
7515
|
+
id: Date.now(),
|
|
7516
|
+
path: "",
|
|
7517
|
+
url: URL.createObjectURL(file),
|
|
7518
|
+
originalName: file.name,
|
|
7519
|
+
size: file.size,
|
|
7520
|
+
mimeType: file.type,
|
|
7521
|
+
width: 0,
|
|
7522
|
+
height: 0,
|
|
7523
|
+
formattedSize: `${(file.size / 1024).toFixed(1)} KB`
|
|
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
|
+
});
|
|
7542
|
+
}
|
|
7543
|
+
} catch (error) {
|
|
7544
|
+
console.error("Upload error:", error);
|
|
7545
|
+
addToast({
|
|
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]);
|
|
7661
7567
|
const handleRemoveImage = (imageId) => {
|
|
7662
7568
|
setUploadedImages((prev) => prev.filter((img) => img.id !== Number(imageId)));
|
|
7663
7569
|
onRemove?.(String(imageId));
|
|
@@ -7679,19 +7585,29 @@ function ImageUpload({
|
|
|
7679
7585
|
onDragLeave: handleDragLeave,
|
|
7680
7586
|
onDrop: handleDrop,
|
|
7681
7587
|
children: [
|
|
7682
|
-
uploading && /* @__PURE__ */
|
|
7683
|
-
/* @__PURE__ */
|
|
7684
|
-
/* @__PURE__ */
|
|
7588
|
+
uploading && /* @__PURE__ */ jsx36("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: [
|
|
7589
|
+
/* @__PURE__ */ jsx36(Loader24, { className: "w-6 h-6 animate-spin text-primary" }),
|
|
7590
|
+
/* @__PURE__ */ jsx36("span", { className: "text-sm font-medium", children: "Uploading..." })
|
|
7685
7591
|
] }) }),
|
|
7686
7592
|
/* @__PURE__ */ jsxs31("div", { className: "space-y-4", children: [
|
|
7687
|
-
/* @__PURE__ */
|
|
7593
|
+
/* @__PURE__ */ jsx36("div", { className: "mx-auto w-12 h-12 bg-primary/10 rounded-full flex items-center justify-center", children: /* @__PURE__ */ jsx36(Upload, { className: "w-6 h-6 text-primary" }) }),
|
|
7688
7594
|
/* @__PURE__ */ jsxs31("div", { className: "space-y-2", children: [
|
|
7689
|
-
/* @__PURE__ */
|
|
7690
|
-
/* @__PURE__ */
|
|
7595
|
+
/* @__PURE__ */ jsx36("p", { className: "text-muted-foreground", children: dragDropText || t("dragDropText") }),
|
|
7596
|
+
/* @__PURE__ */ jsx36(
|
|
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
|
+
)
|
|
7691
7607
|
] }),
|
|
7692
|
-
/* @__PURE__ */
|
|
7608
|
+
/* @__PURE__ */ jsx36("p", { className: "text-xs text-muted-foreground", children: supportedFormatsText || t("supportedFormats") })
|
|
7693
7609
|
] }),
|
|
7694
|
-
/* @__PURE__ */
|
|
7610
|
+
/* @__PURE__ */ jsx36(
|
|
7695
7611
|
"input",
|
|
7696
7612
|
{
|
|
7697
7613
|
ref: fileInputRef,
|
|
@@ -7707,45 +7623,52 @@ function ImageUpload({
|
|
|
7707
7623
|
}
|
|
7708
7624
|
),
|
|
7709
7625
|
showPreview && uploadedImages.length > 0 && /* @__PURE__ */ jsxs31("div", { className: "space-y-3", children: [
|
|
7710
|
-
/* @__PURE__ */
|
|
7711
|
-
/* @__PURE__ */
|
|
7712
|
-
|
|
7713
|
-
|
|
7714
|
-
|
|
7715
|
-
|
|
7716
|
-
|
|
7717
|
-
|
|
7718
|
-
|
|
7719
|
-
|
|
7720
|
-
|
|
7721
|
-
|
|
7722
|
-
|
|
7723
|
-
|
|
7724
|
-
"img",
|
|
7725
|
-
{
|
|
7726
|
-
src: image.url,
|
|
7727
|
-
alt: image.originalName,
|
|
7728
|
-
className: "w-full h-full object-cover",
|
|
7729
|
-
onError: (e) => {
|
|
7730
|
-
const target = e.target;
|
|
7731
|
-
target.style.display = "none";
|
|
7732
|
-
target.nextElementSibling?.classList.remove("hidden");
|
|
7626
|
+
/* @__PURE__ */ jsx36("h4", { className: "text-sm font-medium", children: "Uploaded Images" }),
|
|
7627
|
+
/* @__PURE__ */ jsx36("div", { className: "grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 gap-4", children: uploadedImages.map((image) => /* @__PURE__ */ jsxs31(
|
|
7628
|
+
"div",
|
|
7629
|
+
{
|
|
7630
|
+
className: "relative group bg-card border border-border rounded-lg p-3",
|
|
7631
|
+
children: [
|
|
7632
|
+
/* @__PURE__ */ jsx36(
|
|
7633
|
+
Button_default,
|
|
7634
|
+
{
|
|
7635
|
+
variant: "danger",
|
|
7636
|
+
size: "icon",
|
|
7637
|
+
className: "absolute -top-2 -right-2 w-6 h-6 opacity-0 group-hover:opacity-100 transition-opacity z-10",
|
|
7638
|
+
onClick: () => handleRemoveImage(image.id),
|
|
7639
|
+
children: /* @__PURE__ */ jsx36(X9, { className: "w-3 h-3" })
|
|
7733
7640
|
}
|
|
7734
|
-
|
|
7735
|
-
|
|
7736
|
-
|
|
7737
|
-
|
|
7738
|
-
|
|
7739
|
-
|
|
7740
|
-
|
|
7741
|
-
|
|
7742
|
-
|
|
7743
|
-
|
|
7744
|
-
|
|
7745
|
-
|
|
7746
|
-
|
|
7747
|
-
|
|
7748
|
-
|
|
7641
|
+
),
|
|
7642
|
+
/* @__PURE__ */ jsxs31("div", { className: cn("mx-auto mb-2 overflow-hidden rounded-md", previewSizes[previewSize]), children: [
|
|
7643
|
+
/* @__PURE__ */ jsx36(
|
|
7644
|
+
"img",
|
|
7645
|
+
{
|
|
7646
|
+
src: image.url,
|
|
7647
|
+
alt: image.originalName,
|
|
7648
|
+
className: "w-full h-full object-cover",
|
|
7649
|
+
onError: (e) => {
|
|
7650
|
+
const target = e.target;
|
|
7651
|
+
target.style.display = "none";
|
|
7652
|
+
target.nextElementSibling?.classList.remove("hidden");
|
|
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
|
+
)) })
|
|
7749
7672
|
] })
|
|
7750
7673
|
] });
|
|
7751
7674
|
}
|
|
@@ -7753,7 +7676,7 @@ function ImageUpload({
|
|
|
7753
7676
|
// ../../components/ui/Carousel.tsx
|
|
7754
7677
|
import * as React29 from "react";
|
|
7755
7678
|
import { ChevronLeft as ChevronLeft4, ChevronRight as ChevronRight6 } from "lucide-react";
|
|
7756
|
-
import { Fragment as Fragment12, jsx as
|
|
7679
|
+
import { Fragment as Fragment12, jsx as jsx37, jsxs as jsxs32 } from "react/jsx-runtime";
|
|
7757
7680
|
function Carousel({
|
|
7758
7681
|
children,
|
|
7759
7682
|
autoScroll = true,
|
|
@@ -7923,8 +7846,8 @@ function Carousel({
|
|
|
7923
7846
|
"aria-roledescription": "carousel",
|
|
7924
7847
|
tabIndex: 0,
|
|
7925
7848
|
children: [
|
|
7926
|
-
showProgress && autoScroll && /* @__PURE__ */
|
|
7927
|
-
/* @__PURE__ */
|
|
7849
|
+
showProgress && autoScroll && /* @__PURE__ */ jsx37("div", { className: "absolute top-0 left-0 right-0 h-1 bg-muted z-20", children: /* @__PURE__ */ jsx37("div", { ref: progressElRef, className: "h-full bg-primary", style: { width: "0%" } }) }),
|
|
7850
|
+
/* @__PURE__ */ jsx37(
|
|
7928
7851
|
"div",
|
|
7929
7852
|
{
|
|
7930
7853
|
className: cn("flex", isHorizontal ? "flex-row" : "flex-col", containerClassName),
|
|
@@ -7939,7 +7862,7 @@ function Carousel({
|
|
|
7939
7862
|
role: "group",
|
|
7940
7863
|
"aria-atomic": "false",
|
|
7941
7864
|
"aria-live": autoScroll ? "off" : "polite",
|
|
7942
|
-
children: React29.Children.map(children, (child, idx) => /* @__PURE__ */
|
|
7865
|
+
children: React29.Children.map(children, (child, idx) => /* @__PURE__ */ jsx37(
|
|
7943
7866
|
"div",
|
|
7944
7867
|
{
|
|
7945
7868
|
className: cn(
|
|
@@ -7963,7 +7886,7 @@ function Carousel({
|
|
|
7963
7886
|
}
|
|
7964
7887
|
),
|
|
7965
7888
|
showArrows && totalSlides > slidesToShow && /* @__PURE__ */ jsxs32(Fragment12, { children: [
|
|
7966
|
-
/* @__PURE__ */
|
|
7889
|
+
/* @__PURE__ */ jsx37(
|
|
7967
7890
|
Button_default,
|
|
7968
7891
|
{
|
|
7969
7892
|
onClick: scrollPrev,
|
|
@@ -7979,7 +7902,7 @@ function Carousel({
|
|
|
7979
7902
|
"aria-label": "Previous slide"
|
|
7980
7903
|
}
|
|
7981
7904
|
),
|
|
7982
|
-
/* @__PURE__ */
|
|
7905
|
+
/* @__PURE__ */ jsx37(
|
|
7983
7906
|
Button_default,
|
|
7984
7907
|
{
|
|
7985
7908
|
onClick: scrollNext,
|
|
@@ -7996,7 +7919,7 @@ function Carousel({
|
|
|
7996
7919
|
}
|
|
7997
7920
|
)
|
|
7998
7921
|
] }),
|
|
7999
|
-
showDots && totalSlides > slidesToShow && /* @__PURE__ */
|
|
7922
|
+
showDots && totalSlides > slidesToShow && /* @__PURE__ */ jsx37(
|
|
8000
7923
|
"div",
|
|
8001
7924
|
{
|
|
8002
7925
|
className: cn(
|
|
@@ -8005,7 +7928,7 @@ function Carousel({
|
|
|
8005
7928
|
),
|
|
8006
7929
|
role: "tablist",
|
|
8007
7930
|
"aria-label": "Carousel pagination",
|
|
8008
|
-
children: Array.from({ length: maxIndex + 1 }, (_, idx) => /* @__PURE__ */
|
|
7931
|
+
children: Array.from({ length: maxIndex + 1 }, (_, idx) => /* @__PURE__ */ jsx37(
|
|
8009
7932
|
"button",
|
|
8010
7933
|
{
|
|
8011
7934
|
onClick: () => scrollTo(idx),
|
|
@@ -8022,14 +7945,14 @@ function Carousel({
|
|
|
8022
7945
|
))
|
|
8023
7946
|
}
|
|
8024
7947
|
),
|
|
8025
|
-
showThumbnails && totalSlides > slidesToShow && /* @__PURE__ */
|
|
7948
|
+
showThumbnails && totalSlides > slidesToShow && /* @__PURE__ */ jsx37(
|
|
8026
7949
|
"div",
|
|
8027
7950
|
{
|
|
8028
7951
|
className: cn(
|
|
8029
7952
|
"absolute bottom-0 left-0 right-0 flex gap-2 p-4 bg-gradient-to-t from-black/50 to-transparent overflow-x-auto",
|
|
8030
7953
|
isHorizontal ? "flex-row" : "flex-col"
|
|
8031
7954
|
),
|
|
8032
|
-
children: React29.Children.map(children, (child, idx) => /* @__PURE__ */
|
|
7955
|
+
children: React29.Children.map(children, (child, idx) => /* @__PURE__ */ jsx37(
|
|
8033
7956
|
"button",
|
|
8034
7957
|
{
|
|
8035
7958
|
onClick: () => scrollTo(idx),
|
|
@@ -8051,7 +7974,7 @@ function Carousel({
|
|
|
8051
7974
|
|
|
8052
7975
|
// ../../components/ui/FallingIcons.tsx
|
|
8053
7976
|
import React30 from "react";
|
|
8054
|
-
import { jsx as
|
|
7977
|
+
import { jsx as jsx38, jsxs as jsxs33 } from "react/jsx-runtime";
|
|
8055
7978
|
var DEFAULT_COUNT = 24;
|
|
8056
7979
|
var DEFAULT_SPEED_RANGE = [6, 14];
|
|
8057
7980
|
var DEFAULT_SIZE_RANGE = [14, 28];
|
|
@@ -8146,8 +8069,8 @@ function FallingIcons({
|
|
|
8146
8069
|
filter: `drop-shadow(0 0 ${4 * intensity}px ${glowColor}) drop-shadow(0 0 ${8 * intensity}px ${glowColor})`
|
|
8147
8070
|
};
|
|
8148
8071
|
}, [glow, glowColor, glowIntensity]);
|
|
8149
|
-
const FallbackIcon = React30.useMemo(() => (props) => /* @__PURE__ */
|
|
8150
|
-
const TheIcon = imageUrl ? ({ className: imgClassName }) => /* @__PURE__ */
|
|
8072
|
+
const FallbackIcon = React30.useMemo(() => (props) => /* @__PURE__ */ jsx38("svg", { viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", ...props, children: /* @__PURE__ */ jsx38("circle", { cx: "12", cy: "12", r: "10" }) }), []);
|
|
8073
|
+
const TheIcon = imageUrl ? ({ className: imgClassName }) => /* @__PURE__ */ jsx38(
|
|
8151
8074
|
"img",
|
|
8152
8075
|
{
|
|
8153
8076
|
src: imageUrl,
|
|
@@ -8166,7 +8089,7 @@ function FallingIcons({
|
|
|
8166
8089
|
),
|
|
8167
8090
|
style: { zIndex },
|
|
8168
8091
|
children: [
|
|
8169
|
-
/* @__PURE__ */
|
|
8092
|
+
/* @__PURE__ */ jsx38("style", { children: `
|
|
8170
8093
|
@keyframes ${FallName} {
|
|
8171
8094
|
0% { transform: translate3d(0, -10vh, 0); opacity: 0; }
|
|
8172
8095
|
10% { opacity: 1; }
|
|
@@ -8199,7 +8122,7 @@ function FallingIcons({
|
|
|
8199
8122
|
}
|
|
8200
8123
|
}
|
|
8201
8124
|
` }),
|
|
8202
|
-
/* @__PURE__ */
|
|
8125
|
+
/* @__PURE__ */ jsx38(
|
|
8203
8126
|
"div",
|
|
8204
8127
|
{
|
|
8205
8128
|
className: cn(
|
|
@@ -8225,7 +8148,7 @@ function FallingIcons({
|
|
|
8225
8148
|
const trailDelay = p.delay - (trailIndex + 1) * 0.15;
|
|
8226
8149
|
const trailOpacity = 1 - (trailIndex + 1) * (1 / (trailParticles.length + 1));
|
|
8227
8150
|
const trailScale = 1 - (trailIndex + 1) * 0.15;
|
|
8228
|
-
return /* @__PURE__ */
|
|
8151
|
+
return /* @__PURE__ */ jsx38(
|
|
8229
8152
|
"span",
|
|
8230
8153
|
{
|
|
8231
8154
|
className: cn("absolute top-0 will-change-transform pointer-events-none uv-falling-particle", colorClassName),
|
|
@@ -8239,7 +8162,7 @@ function FallingIcons({
|
|
|
8239
8162
|
opacity: trailOpacity * 0.4,
|
|
8240
8163
|
["--fall"]: `${fallDist ?? (typeof window !== "undefined" ? window.innerHeight + 200 : 1200)}px`
|
|
8241
8164
|
},
|
|
8242
|
-
children: /* @__PURE__ */
|
|
8165
|
+
children: /* @__PURE__ */ jsx38(
|
|
8243
8166
|
"span",
|
|
8244
8167
|
{
|
|
8245
8168
|
className: "inline-block uv-sway",
|
|
@@ -8251,7 +8174,7 @@ function FallingIcons({
|
|
|
8251
8174
|
animationIterationCount: "infinite",
|
|
8252
8175
|
["--amp"]: `${Math.round(p.driftAmp)}px`
|
|
8253
8176
|
},
|
|
8254
|
-
children: /* @__PURE__ */
|
|
8177
|
+
children: /* @__PURE__ */ jsx38(
|
|
8255
8178
|
"span",
|
|
8256
8179
|
{
|
|
8257
8180
|
className: "block",
|
|
@@ -8260,7 +8183,7 @@ function FallingIcons({
|
|
|
8260
8183
|
height: p.size,
|
|
8261
8184
|
...glowStyles
|
|
8262
8185
|
},
|
|
8263
|
-
children: /* @__PURE__ */
|
|
8186
|
+
children: /* @__PURE__ */ jsx38(TheIcon, { className: cn("w-full h-full text-primary/70", colorClassName) })
|
|
8264
8187
|
}
|
|
8265
8188
|
)
|
|
8266
8189
|
}
|
|
@@ -8269,7 +8192,7 @@ function FallingIcons({
|
|
|
8269
8192
|
`${p.key}-trail-${trailIndex}`
|
|
8270
8193
|
);
|
|
8271
8194
|
}),
|
|
8272
|
-
/* @__PURE__ */
|
|
8195
|
+
/* @__PURE__ */ jsx38(
|
|
8273
8196
|
"span",
|
|
8274
8197
|
{
|
|
8275
8198
|
className: cn("absolute top-0 will-change-transform pointer-events-auto uv-falling-particle", colorClassName),
|
|
@@ -8295,7 +8218,7 @@ function FallingIcons({
|
|
|
8295
8218
|
return next;
|
|
8296
8219
|
});
|
|
8297
8220
|
},
|
|
8298
|
-
children: /* @__PURE__ */
|
|
8221
|
+
children: /* @__PURE__ */ jsx38(
|
|
8299
8222
|
"span",
|
|
8300
8223
|
{
|
|
8301
8224
|
className: "inline-block uv-sway",
|
|
@@ -8307,7 +8230,7 @@ function FallingIcons({
|
|
|
8307
8230
|
animationIterationCount: "infinite",
|
|
8308
8231
|
["--amp"]: `${Math.round(p.driftAmp)}px`
|
|
8309
8232
|
},
|
|
8310
|
-
children: /* @__PURE__ */
|
|
8233
|
+
children: /* @__PURE__ */ jsx38(
|
|
8311
8234
|
"span",
|
|
8312
8235
|
{
|
|
8313
8236
|
className: cn(
|
|
@@ -8323,7 +8246,7 @@ function FallingIcons({
|
|
|
8323
8246
|
["--popName"]: PopName,
|
|
8324
8247
|
...glowStyles
|
|
8325
8248
|
},
|
|
8326
|
-
children: /* @__PURE__ */
|
|
8249
|
+
children: /* @__PURE__ */ jsx38(TheIcon, { className: cn("w-full h-full text-primary/70", colorClassName) })
|
|
8327
8250
|
}
|
|
8328
8251
|
)
|
|
8329
8252
|
}
|
|
@@ -8342,7 +8265,7 @@ function FallingIcons({
|
|
|
8342
8265
|
// ../../components/ui/List.tsx
|
|
8343
8266
|
import * as React31 from "react";
|
|
8344
8267
|
import { ChevronRight as ChevronRight7 } from "lucide-react";
|
|
8345
|
-
import { Fragment as Fragment13, jsx as
|
|
8268
|
+
import { Fragment as Fragment13, jsx as jsx39, jsxs as jsxs34 } from "react/jsx-runtime";
|
|
8346
8269
|
var SIZE_STYLES2 = {
|
|
8347
8270
|
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" },
|
|
8348
8271
|
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" },
|
|
@@ -8359,10 +8282,10 @@ var BADGE_VARIANTS = {
|
|
|
8359
8282
|
var ListItemSkeleton = ({ size }) => {
|
|
8360
8283
|
const sz = SIZE_STYLES2[size];
|
|
8361
8284
|
return /* @__PURE__ */ jsxs34("div", { className: cn("flex items-center gap-3 animate-pulse", sz.itemPad), children: [
|
|
8362
|
-
/* @__PURE__ */
|
|
8285
|
+
/* @__PURE__ */ jsx39("div", { className: cn("rounded-full bg-muted shrink-0", sz.avatar) }),
|
|
8363
8286
|
/* @__PURE__ */ jsxs34("div", { className: "flex-1 space-y-2", children: [
|
|
8364
|
-
/* @__PURE__ */
|
|
8365
|
-
/* @__PURE__ */
|
|
8287
|
+
/* @__PURE__ */ jsx39("div", { className: "h-4 bg-muted rounded w-3/4" }),
|
|
8288
|
+
/* @__PURE__ */ jsx39("div", { className: "h-3 bg-muted rounded w-1/2" })
|
|
8366
8289
|
] })
|
|
8367
8290
|
] });
|
|
8368
8291
|
};
|
|
@@ -8396,12 +8319,12 @@ var ListRoot = React31.forwardRef(
|
|
|
8396
8319
|
striped: "rounded-lg border border-border overflow-hidden"
|
|
8397
8320
|
};
|
|
8398
8321
|
if (loading2) {
|
|
8399
|
-
return /* @__PURE__ */
|
|
8322
|
+
return /* @__PURE__ */ jsx39(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__ */ jsx39(ListItemSkeleton, { size }, i)) });
|
|
8400
8323
|
}
|
|
8401
8324
|
if (!hasChildren && emptyText) {
|
|
8402
|
-
return /* @__PURE__ */
|
|
8325
|
+
return /* @__PURE__ */ jsx39(Comp, { ref, className: cn("group/list", variantClasses[variant], inset && "p-1.5 md:p-2", className), ...rest, children: /* @__PURE__ */ jsx39("div", { className: "text-center py-8 text-muted-foreground text-sm", children: emptyText }) });
|
|
8403
8326
|
}
|
|
8404
|
-
return /* @__PURE__ */
|
|
8327
|
+
return /* @__PURE__ */ jsx39(
|
|
8405
8328
|
Comp,
|
|
8406
8329
|
{
|
|
8407
8330
|
ref,
|
|
@@ -8491,18 +8414,18 @@ var ListItem = React31.forwardRef(
|
|
|
8491
8414
|
className: cn("flex items-center gap-3", padding, "group/item relative"),
|
|
8492
8415
|
...headerProps,
|
|
8493
8416
|
children: [
|
|
8494
|
-
avatar && /* @__PURE__ */
|
|
8495
|
-
Left && !avatar && /* @__PURE__ */
|
|
8417
|
+
avatar && /* @__PURE__ */ jsx39("div", { className: cn("shrink-0", sz.avatar), children: typeof avatar === "string" ? /* @__PURE__ */ jsx39("img", { src: avatar, alt: "", className: cn("rounded-full object-cover", sz.avatar) }) : avatar }),
|
|
8418
|
+
Left && !avatar && /* @__PURE__ */ jsx39("span", { className: cn("text-muted-foreground shrink-0", sz.icon), children: /* @__PURE__ */ jsx39(Left, { className: cn(sz.icon) }) }),
|
|
8496
8419
|
/* @__PURE__ */ jsxs34("div", { className: "min-w-0 flex-1", children: [
|
|
8497
8420
|
/* @__PURE__ */ jsxs34("div", { className: "flex items-center gap-2", children: [
|
|
8498
|
-
label && /* @__PURE__ */
|
|
8499
|
-
badge && /* @__PURE__ */
|
|
8421
|
+
label && /* @__PURE__ */ jsx39("div", { className: cn(sz.label, "text-foreground font-medium truncate"), children: label }),
|
|
8422
|
+
badge && /* @__PURE__ */ jsx39("span", { className: cn("px-2 py-0.5 rounded-full text-[11px] font-medium shrink-0", BADGE_VARIANTS[badgeVariant]), children: badge })
|
|
8500
8423
|
] }),
|
|
8501
|
-
description && /* @__PURE__ */
|
|
8502
|
-
children && /* @__PURE__ */
|
|
8424
|
+
description && /* @__PURE__ */ jsx39("div", { className: cn(sz.desc, "text-muted-foreground truncate mt-0.5"), children: description }),
|
|
8425
|
+
children && /* @__PURE__ */ jsx39("div", { className: "mt-1", children })
|
|
8503
8426
|
] }),
|
|
8504
|
-
action && /* @__PURE__ */
|
|
8505
|
-
collapsible ? /* @__PURE__ */
|
|
8427
|
+
action && /* @__PURE__ */ jsx39("div", { className: "opacity-0 group-hover/item:opacity-100 transition-opacity shrink-0", children: action }),
|
|
8428
|
+
collapsible ? /* @__PURE__ */ jsx39(
|
|
8506
8429
|
"span",
|
|
8507
8430
|
{
|
|
8508
8431
|
className: cn(
|
|
@@ -8510,13 +8433,13 @@ var ListItem = React31.forwardRef(
|
|
|
8510
8433
|
sz.icon,
|
|
8511
8434
|
isExpanded && "rotate-90"
|
|
8512
8435
|
),
|
|
8513
|
-
children: /* @__PURE__ */
|
|
8436
|
+
children: /* @__PURE__ */ jsx39(ChevronRight7, { className: cn(sz.icon) })
|
|
8514
8437
|
}
|
|
8515
|
-
) : Right && /* @__PURE__ */
|
|
8438
|
+
) : Right && /* @__PURE__ */ jsx39("span", { className: cn("text-muted-foreground shrink-0", sz.icon), children: /* @__PURE__ */ jsx39(Right, { className: cn(sz.icon) }) })
|
|
8516
8439
|
]
|
|
8517
8440
|
}
|
|
8518
8441
|
),
|
|
8519
|
-
collapsible && isExpanded && expandContent && /* @__PURE__ */
|
|
8442
|
+
collapsible && isExpanded && expandContent && /* @__PURE__ */ jsx39("div", { className: cn("border-t border-border/50 bg-muted/20", padding, "pt-3"), children: expandContent })
|
|
8520
8443
|
] });
|
|
8521
8444
|
const baseCls = cn(
|
|
8522
8445
|
"relative w-full",
|
|
@@ -8526,10 +8449,10 @@ var ListItem = React31.forwardRef(
|
|
|
8526
8449
|
);
|
|
8527
8450
|
if (href) {
|
|
8528
8451
|
const A = as === "a" ? "a" : "a";
|
|
8529
|
-
return /* @__PURE__ */
|
|
8452
|
+
return /* @__PURE__ */ jsx39(A, { ref, href, className: cn(baseCls, "block"), ...rest, children: inner });
|
|
8530
8453
|
}
|
|
8531
8454
|
if (as === "button" && !collapsible) {
|
|
8532
|
-
return /* @__PURE__ */
|
|
8455
|
+
return /* @__PURE__ */ jsx39(
|
|
8533
8456
|
"button",
|
|
8534
8457
|
{
|
|
8535
8458
|
ref,
|
|
@@ -8541,7 +8464,7 @@ var ListItem = React31.forwardRef(
|
|
|
8541
8464
|
);
|
|
8542
8465
|
}
|
|
8543
8466
|
if (collapsible) {
|
|
8544
|
-
return /* @__PURE__ */
|
|
8467
|
+
return /* @__PURE__ */ jsx39(
|
|
8545
8468
|
"div",
|
|
8546
8469
|
{
|
|
8547
8470
|
ref,
|
|
@@ -8552,7 +8475,7 @@ var ListItem = React31.forwardRef(
|
|
|
8552
8475
|
);
|
|
8553
8476
|
}
|
|
8554
8477
|
const Comp = as;
|
|
8555
|
-
return /* @__PURE__ */
|
|
8478
|
+
return /* @__PURE__ */ jsx39(Comp, { ref, className: baseCls, ...rest, children: inner });
|
|
8556
8479
|
}
|
|
8557
8480
|
);
|
|
8558
8481
|
ListItem.displayName = "List.Item";
|
|
@@ -8562,7 +8485,7 @@ var List_default = List;
|
|
|
8562
8485
|
// ../../components/ui/Watermark.tsx
|
|
8563
8486
|
import * as React32 from "react";
|
|
8564
8487
|
import { createPortal as createPortal9 } from "react-dom";
|
|
8565
|
-
import { Fragment as Fragment14, jsx as
|
|
8488
|
+
import { Fragment as Fragment14, jsx as jsx40, jsxs as jsxs35 } from "react/jsx-runtime";
|
|
8566
8489
|
var PRESETS2 = {
|
|
8567
8490
|
confidential: { text: "CONFIDENTIAL", color: "rgba(220, 38, 38, 0.15)", rotate: -22, fontSize: 16, fontWeight: "bold" },
|
|
8568
8491
|
draft: { text: "DRAFT", color: "rgba(59, 130, 246, 0.15)", rotate: -22, fontSize: 18, fontWeight: "bold" },
|
|
@@ -8817,7 +8740,7 @@ var Watermark = ({
|
|
|
8817
8740
|
if (dataURL) overlayStyle.backgroundImage = `url(${dataURL})`;
|
|
8818
8741
|
const animationClass = animate ? getAnimationClass(animationVariant, visible) : "";
|
|
8819
8742
|
const blurClass = blur ? `backdrop-blur-[${blurAmount}px]` : "";
|
|
8820
|
-
const overlay = /* @__PURE__ */
|
|
8743
|
+
const overlay = /* @__PURE__ */ jsx40(
|
|
8821
8744
|
"div",
|
|
8822
8745
|
{
|
|
8823
8746
|
role: interactive ? "button" : void 0,
|
|
@@ -8856,7 +8779,7 @@ var Watermark_default = Watermark;
|
|
|
8856
8779
|
// ../../components/ui/Timeline.tsx
|
|
8857
8780
|
import * as React33 from "react";
|
|
8858
8781
|
import { ChevronDown as ChevronDown4 } from "lucide-react";
|
|
8859
|
-
import { jsx as
|
|
8782
|
+
import { jsx as jsx41, jsxs as jsxs36 } from "react/jsx-runtime";
|
|
8860
8783
|
var SIZE_STYLE = {
|
|
8861
8784
|
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" },
|
|
8862
8785
|
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" },
|
|
@@ -8882,21 +8805,21 @@ var Marker = ({ index, last, size, color, status = "default", lineColor, lineSty
|
|
|
8882
8805
|
const dotColor = color ? `background:${color}` : void 0;
|
|
8883
8806
|
const cls = color ? void 0 : STATUS_COLOR[status];
|
|
8884
8807
|
return /* @__PURE__ */ jsxs36("div", { className: "flex flex-col items-center", children: [
|
|
8885
|
-
dot ? /* @__PURE__ */
|
|
8808
|
+
dot ? /* @__PURE__ */ jsx41("div", { className: "flex items-center justify-center", children: dot }) : Icon ? /* @__PURE__ */ jsx41(
|
|
8886
8809
|
"div",
|
|
8887
8810
|
{
|
|
8888
8811
|
className: cn("rounded-full ring-2 ring-background flex items-center justify-center", sz.iconDot, cls, active && "ring-primary/40 ring-4"),
|
|
8889
8812
|
style: dotColor ? { background: color } : void 0,
|
|
8890
|
-
children: /* @__PURE__ */
|
|
8813
|
+
children: /* @__PURE__ */ jsx41(Icon, { className: cn("text-white", sz.icon) })
|
|
8891
8814
|
}
|
|
8892
|
-
) : /* @__PURE__ */
|
|
8815
|
+
) : /* @__PURE__ */ jsx41(
|
|
8893
8816
|
"div",
|
|
8894
8817
|
{
|
|
8895
8818
|
className: cn("rounded-full ring-2 ring-background", sz.dot, cls, active && "ring-primary/40 ring-4 scale-125"),
|
|
8896
8819
|
style: dotColor ? { background: color } : void 0
|
|
8897
8820
|
}
|
|
8898
8821
|
),
|
|
8899
|
-
!last && showLine && /* @__PURE__ */
|
|
8822
|
+
!last && showLine && /* @__PURE__ */ jsx41(
|
|
8900
8823
|
"div",
|
|
8901
8824
|
{
|
|
8902
8825
|
className: cn("flex-1 border-l-2", LINE_STYLE_MAP[lineStyle]),
|
|
@@ -8922,8 +8845,8 @@ var TimelineRoot = React33.forwardRef(
|
|
|
8922
8845
|
children,
|
|
8923
8846
|
...rest
|
|
8924
8847
|
}, ref) => {
|
|
8925
|
-
const content = items ? items.map((it, i) => /* @__PURE__ */
|
|
8926
|
-
return /* @__PURE__ */
|
|
8848
|
+
const content = items ? items.map((it, i) => /* @__PURE__ */ jsx41(TimelineItem, { ...it, className: cn(itemClassName, it.className), "data-index": i, "data-last": i === (items?.length ?? 0) - 1 }, i)) : children;
|
|
8849
|
+
return /* @__PURE__ */ jsx41(TimelineContext.Provider, { value: { align, variant, size, mode, lineColor, lineStyle, itemClassName, animate, dense, showLine }, children: /* @__PURE__ */ jsx41(
|
|
8927
8850
|
"div",
|
|
8928
8851
|
{
|
|
8929
8852
|
ref,
|
|
@@ -8934,7 +8857,7 @@ var TimelineRoot = React33.forwardRef(
|
|
|
8934
8857
|
className
|
|
8935
8858
|
),
|
|
8936
8859
|
...rest,
|
|
8937
|
-
children: mode === "vertical" ? /* @__PURE__ */
|
|
8860
|
+
children: mode === "vertical" ? /* @__PURE__ */ jsx41("div", { className: "space-y-0", children: content }) : content
|
|
8938
8861
|
}
|
|
8939
8862
|
) });
|
|
8940
8863
|
}
|
|
@@ -8986,33 +8909,33 @@ var TimelineItem = React33.forwardRef(
|
|
|
8986
8909
|
/* @__PURE__ */ jsxs36("div", { className: "flex items-start justify-between gap-2", children: [
|
|
8987
8910
|
/* @__PURE__ */ jsxs36("div", { className: "flex-1 min-w-0", children: [
|
|
8988
8911
|
title && /* @__PURE__ */ jsxs36("div", { className: "flex items-center gap-2", children: [
|
|
8989
|
-
/* @__PURE__ */
|
|
8990
|
-
badge && /* @__PURE__ */
|
|
8912
|
+
/* @__PURE__ */ jsx41("div", { className: cn("font-semibold text-foreground", sz.title), children: title }),
|
|
8913
|
+
badge && /* @__PURE__ */ jsx41("span", { className: "px-2 py-0.5 rounded-full text-[10px] font-medium bg-primary/10 text-primary", children: badge })
|
|
8991
8914
|
] }),
|
|
8992
|
-
description && /* @__PURE__ */
|
|
8993
|
-
children && /* @__PURE__ */
|
|
8915
|
+
description && /* @__PURE__ */ jsx41("div", { className: cn("text-muted-foreground mt-1", sz.desc), children: description }),
|
|
8916
|
+
children && /* @__PURE__ */ jsx41("div", { className: "mt-2", children })
|
|
8994
8917
|
] }),
|
|
8995
|
-
collapsible && /* @__PURE__ */
|
|
8918
|
+
collapsible && /* @__PURE__ */ jsx41(
|
|
8996
8919
|
"button",
|
|
8997
8920
|
{
|
|
8998
8921
|
type: "button",
|
|
8999
8922
|
onClick: toggleExpanded,
|
|
9000
8923
|
className: cn("text-muted-foreground hover:text-foreground transition-transform p-1", isExpanded && "rotate-180"),
|
|
9001
|
-
children: /* @__PURE__ */
|
|
8924
|
+
children: /* @__PURE__ */ jsx41(ChevronDown4, { className: "h-4 w-4" })
|
|
9002
8925
|
}
|
|
9003
8926
|
)
|
|
9004
8927
|
] }),
|
|
9005
|
-
time && /* @__PURE__ */
|
|
9006
|
-
collapsible && isExpanded && expandContent && /* @__PURE__ */
|
|
8928
|
+
time && /* @__PURE__ */ jsx41("div", { className: cn("mt-2 text-muted-foreground flex items-center gap-1", sz.time), children: time }),
|
|
8929
|
+
collapsible && isExpanded && expandContent && /* @__PURE__ */ jsx41("div", { className: "mt-3 pt-3 border-t border-border/50 text-sm", children: expandContent })
|
|
9007
8930
|
] });
|
|
9008
8931
|
const markerWidth = Icon || dot ? "w-auto" : "w-6";
|
|
9009
8932
|
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: [
|
|
9010
|
-
/* @__PURE__ */
|
|
9011
|
-
/* @__PURE__ */
|
|
8933
|
+
/* @__PURE__ */ jsx41("div", { className: cn("flex-shrink-0 flex items-stretch", markerWidth), children: /* @__PURE__ */ jsx41(Marker, { index: idx ?? 0, last: isLast, size: ctx.size, color, status, lineColor: ctx.lineColor, lineStyle: ctx.lineStyle, active, dot, icon: Icon, showLine: ctx.showLine }) }),
|
|
8934
|
+
/* @__PURE__ */ jsx41("div", { className: "flex-1", children: contentBox })
|
|
9012
8935
|
] });
|
|
9013
8936
|
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: [
|
|
9014
|
-
/* @__PURE__ */
|
|
9015
|
-
/* @__PURE__ */
|
|
8937
|
+
/* @__PURE__ */ jsx41("div", { className: "flex-1 flex justify-end", children: contentBox }),
|
|
8938
|
+
/* @__PURE__ */ jsx41("div", { className: cn("flex-shrink-0 flex items-stretch", markerWidth), children: /* @__PURE__ */ jsx41(Marker, { index: idx ?? 0, last: isLast, size: ctx.size, color, status, lineColor: ctx.lineColor, lineStyle: ctx.lineStyle, active, dot, icon: Icon, showLine: ctx.showLine }) })
|
|
9016
8939
|
] });
|
|
9017
8940
|
const horizontalItem = /* @__PURE__ */ jsxs36(
|
|
9018
8941
|
"div",
|
|
@@ -9023,19 +8946,19 @@ var TimelineItem = React33.forwardRef(
|
|
|
9023
8946
|
),
|
|
9024
8947
|
style: { animationDelay: ctx.animate ? `${(idx ?? 0) * 100}ms` : void 0 },
|
|
9025
8948
|
children: [
|
|
9026
|
-
/* @__PURE__ */
|
|
9027
|
-
!isLast && ctx.showLine && /* @__PURE__ */
|
|
8949
|
+
/* @__PURE__ */ jsx41(Marker, { index: idx ?? 0, last: isLast, size: ctx.size, color, status, lineColor: ctx.lineColor, lineStyle: ctx.lineStyle, active, dot, icon: Icon, showLine: false }),
|
|
8950
|
+
!isLast && ctx.showLine && /* @__PURE__ */ jsx41("div", { className: cn("h-px w-full border-t-2", LINE_STYLE_MAP[ctx.lineStyle]), style: { borderColor: ctx.lineColor || "hsl(var(--border))" } }),
|
|
9028
8951
|
contentBox
|
|
9029
8952
|
]
|
|
9030
8953
|
}
|
|
9031
8954
|
);
|
|
9032
8955
|
if (ctx.mode === "horizontal") {
|
|
9033
|
-
return /* @__PURE__ */
|
|
8956
|
+
return /* @__PURE__ */ jsx41("div", { ref, className: cn("relative", className), ...rest, children: horizontalItem });
|
|
9034
8957
|
}
|
|
9035
8958
|
let row = leftSide;
|
|
9036
8959
|
if (ctx.align === "right") row = rightSide;
|
|
9037
8960
|
if (ctx.align === "alternate") row = (idx ?? 0) % 2 === 0 ? leftSide : rightSide;
|
|
9038
|
-
return /* @__PURE__ */
|
|
8961
|
+
return /* @__PURE__ */ jsx41("div", { ref, className: cn("relative", className), ...rest, children: row });
|
|
9039
8962
|
}
|
|
9040
8963
|
);
|
|
9041
8964
|
TimelineItem.displayName = "Timeline.Item";
|
|
@@ -9045,7 +8968,7 @@ var Timeline_default = Timeline;
|
|
|
9045
8968
|
// ../../components/ui/ColorPicker.tsx
|
|
9046
8969
|
import * as React34 from "react";
|
|
9047
8970
|
import { Pipette, X as X10, Copy, Check as Check8, Palette, History } from "lucide-react";
|
|
9048
|
-
import { jsx as
|
|
8971
|
+
import { jsx as jsx42, jsxs as jsxs37 } from "react/jsx-runtime";
|
|
9049
8972
|
var clamp = (n, min, max) => Math.max(min, Math.min(max, n));
|
|
9050
8973
|
function hexToRgb(hex) {
|
|
9051
8974
|
const str = hex.replace(/^#/, "").trim();
|
|
@@ -9204,7 +9127,7 @@ var Swatch = ({
|
|
|
9204
9127
|
md: "h-6 w-6",
|
|
9205
9128
|
lg: "h-8 w-8"
|
|
9206
9129
|
};
|
|
9207
|
-
return /* @__PURE__ */
|
|
9130
|
+
return /* @__PURE__ */ jsx42(
|
|
9208
9131
|
"button",
|
|
9209
9132
|
{
|
|
9210
9133
|
type: "button",
|
|
@@ -9343,7 +9266,7 @@ function ColorPicker({
|
|
|
9343
9266
|
"aria-label": "Open color picker",
|
|
9344
9267
|
children: [
|
|
9345
9268
|
/* @__PURE__ */ jsxs37("div", { className: "flex items-center gap-2", children: [
|
|
9346
|
-
/* @__PURE__ */
|
|
9269
|
+
/* @__PURE__ */ jsx42(
|
|
9347
9270
|
"span",
|
|
9348
9271
|
{
|
|
9349
9272
|
className: cn(
|
|
@@ -9353,9 +9276,9 @@ function ColorPicker({
|
|
|
9353
9276
|
style: { backgroundColor: withAlpha ? `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})` : hexForInput }
|
|
9354
9277
|
}
|
|
9355
9278
|
),
|
|
9356
|
-
/* @__PURE__ */
|
|
9279
|
+
/* @__PURE__ */ jsx42("span", { className: "font-mono text-muted-foreground", children: text })
|
|
9357
9280
|
] }),
|
|
9358
|
-
/* @__PURE__ */
|
|
9281
|
+
/* @__PURE__ */ jsx42(Pipette, { className: cn(size === "sm" ? "w-3.5 h-3.5" : size === "lg" ? "w-5 h-5" : "w-4 h-4", "text-muted-foreground") })
|
|
9359
9282
|
]
|
|
9360
9283
|
}
|
|
9361
9284
|
);
|
|
@@ -9365,7 +9288,7 @@ function ColorPicker({
|
|
|
9365
9288
|
default: 320,
|
|
9366
9289
|
full: 360
|
|
9367
9290
|
};
|
|
9368
|
-
return /* @__PURE__ */
|
|
9291
|
+
return /* @__PURE__ */ jsx42("div", { className: cn("inline-block w-full", className), ...rest, children: /* @__PURE__ */ jsx42(
|
|
9369
9292
|
Popover,
|
|
9370
9293
|
{
|
|
9371
9294
|
trigger,
|
|
@@ -9377,7 +9300,7 @@ function ColorPicker({
|
|
|
9377
9300
|
contentClassName: cn("p-3 rounded-lg border border-border bg-card shadow-lg", contentClassName),
|
|
9378
9301
|
children: /* @__PURE__ */ jsxs37("div", { className: "space-y-3", children: [
|
|
9379
9302
|
variant !== "minimal" && /* @__PURE__ */ jsxs37("div", { className: "flex items-center gap-2", children: [
|
|
9380
|
-
/* @__PURE__ */
|
|
9303
|
+
/* @__PURE__ */ jsx42("input", { type: "color", value: hexForInput, onChange: handleNativeChange, className: "h-9 w-9 rounded-md cursor-pointer border border-border" }),
|
|
9381
9304
|
/* @__PURE__ */ jsxs37(
|
|
9382
9305
|
"button",
|
|
9383
9306
|
{
|
|
@@ -9385,7 +9308,7 @@ function ColorPicker({
|
|
|
9385
9308
|
onClick: tryEyedropper,
|
|
9386
9309
|
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"),
|
|
9387
9310
|
children: [
|
|
9388
|
-
/* @__PURE__ */
|
|
9311
|
+
/* @__PURE__ */ jsx42(Pipette, { className: "w-3.5 h-3.5" }),
|
|
9389
9312
|
variant === "full" && "Pick"
|
|
9390
9313
|
]
|
|
9391
9314
|
}
|
|
@@ -9400,7 +9323,7 @@ function ColorPicker({
|
|
|
9400
9323
|
copied && "bg-green-500/10 border-green-500/30"
|
|
9401
9324
|
),
|
|
9402
9325
|
children: [
|
|
9403
|
-
copied ? /* @__PURE__ */
|
|
9326
|
+
copied ? /* @__PURE__ */ jsx42(Check8, { className: "w-3.5 h-3.5 text-green-600" }) : /* @__PURE__ */ jsx42(Copy, { className: "w-3.5 h-3.5" }),
|
|
9404
9327
|
variant === "full" && (copied ? "Copied!" : "Copy")
|
|
9405
9328
|
]
|
|
9406
9329
|
}
|
|
@@ -9412,14 +9335,14 @@ function ColorPicker({
|
|
|
9412
9335
|
onClick: clear,
|
|
9413
9336
|
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",
|
|
9414
9337
|
children: [
|
|
9415
|
-
/* @__PURE__ */
|
|
9338
|
+
/* @__PURE__ */ jsx42(X10, { className: "w-3.5 h-3.5" }),
|
|
9416
9339
|
variant === "full" && "Clear"
|
|
9417
9340
|
]
|
|
9418
9341
|
}
|
|
9419
9342
|
)
|
|
9420
9343
|
] }),
|
|
9421
9344
|
/* @__PURE__ */ jsxs37("div", { className: "flex items-center gap-2", children: [
|
|
9422
|
-
/* @__PURE__ */
|
|
9345
|
+
/* @__PURE__ */ jsx42(
|
|
9423
9346
|
Input_default,
|
|
9424
9347
|
{
|
|
9425
9348
|
value: text,
|
|
@@ -9430,7 +9353,7 @@ function ColorPicker({
|
|
|
9430
9353
|
className: "flex-1"
|
|
9431
9354
|
}
|
|
9432
9355
|
),
|
|
9433
|
-
variant === "minimal" && copyable && /* @__PURE__ */
|
|
9356
|
+
variant === "minimal" && copyable && /* @__PURE__ */ jsx42(
|
|
9434
9357
|
"button",
|
|
9435
9358
|
{
|
|
9436
9359
|
type: "button",
|
|
@@ -9439,17 +9362,17 @@ function ColorPicker({
|
|
|
9439
9362
|
"h-9 w-9 rounded-md border border-border hover:bg-accent/10 transition-colors flex items-center justify-center",
|
|
9440
9363
|
copied && "bg-green-500/10 border-green-500/30"
|
|
9441
9364
|
),
|
|
9442
|
-
children: copied ? /* @__PURE__ */
|
|
9365
|
+
children: copied ? /* @__PURE__ */ jsx42(Check8, { className: "w-3.5 h-3.5 text-green-600" }) : /* @__PURE__ */ jsx42(Copy, { className: "w-3.5 h-3.5" })
|
|
9443
9366
|
}
|
|
9444
9367
|
)
|
|
9445
9368
|
] }),
|
|
9446
|
-
withAlpha && /* @__PURE__ */
|
|
9369
|
+
withAlpha && /* @__PURE__ */ jsx42("div", { className: "pt-1", children: /* @__PURE__ */ jsx42(Slider, { min: 0, max: 100, step: 1, value: alphaPct, onChange: (v) => setAlpha(v), label: "Alpha", showValue: true, formatValue: (v) => `${v}%`, size: "sm" }) }),
|
|
9447
9370
|
variant !== "minimal" && /* @__PURE__ */ jsxs37("div", { children: [
|
|
9448
9371
|
/* @__PURE__ */ jsxs37("div", { className: "text-xs font-medium text-muted-foreground mb-2 flex items-center gap-1.5", children: [
|
|
9449
|
-
/* @__PURE__ */
|
|
9372
|
+
/* @__PURE__ */ jsx42(Palette, { className: "w-3.5 h-3.5" }),
|
|
9450
9373
|
" Presets"
|
|
9451
9374
|
] }),
|
|
9452
|
-
/* @__PURE__ */
|
|
9375
|
+
/* @__PURE__ */ jsx42("div", { className: "grid grid-cols-8 gap-2", children: swatches.map((c) => /* @__PURE__ */ jsx42(
|
|
9453
9376
|
Swatch,
|
|
9454
9377
|
{
|
|
9455
9378
|
color: c,
|
|
@@ -9467,10 +9390,10 @@ function ColorPicker({
|
|
|
9467
9390
|
] }),
|
|
9468
9391
|
showRecent && recentColors.length > 0 && /* @__PURE__ */ jsxs37("div", { children: [
|
|
9469
9392
|
/* @__PURE__ */ jsxs37("div", { className: "text-xs font-medium text-muted-foreground mb-2 flex items-center gap-1.5", children: [
|
|
9470
|
-
/* @__PURE__ */
|
|
9393
|
+
/* @__PURE__ */ jsx42(History, { className: "w-3.5 h-3.5" }),
|
|
9471
9394
|
" Recent"
|
|
9472
9395
|
] }),
|
|
9473
|
-
/* @__PURE__ */
|
|
9396
|
+
/* @__PURE__ */ jsx42("div", { className: "flex gap-2 flex-wrap", children: recentColors.map((c, i) => /* @__PURE__ */ jsx42(
|
|
9474
9397
|
Swatch,
|
|
9475
9398
|
{
|
|
9476
9399
|
color: c,
|
|
@@ -9487,11 +9410,11 @@ function ColorPicker({
|
|
|
9487
9410
|
)) })
|
|
9488
9411
|
] }),
|
|
9489
9412
|
showHarmony && harmony && variant !== "minimal" && /* @__PURE__ */ jsxs37("div", { children: [
|
|
9490
|
-
/* @__PURE__ */
|
|
9413
|
+
/* @__PURE__ */ jsx42("div", { className: "text-xs font-medium text-muted-foreground mb-2", children: "Harmony" }),
|
|
9491
9414
|
/* @__PURE__ */ jsxs37("div", { className: "space-y-2", children: [
|
|
9492
9415
|
/* @__PURE__ */ jsxs37("div", { className: "flex items-center gap-2", children: [
|
|
9493
|
-
/* @__PURE__ */
|
|
9494
|
-
/* @__PURE__ */
|
|
9416
|
+
/* @__PURE__ */ jsx42("span", { className: "text-xs text-muted-foreground w-24", children: "Complementary" }),
|
|
9417
|
+
/* @__PURE__ */ jsx42(
|
|
9495
9418
|
Swatch,
|
|
9496
9419
|
{
|
|
9497
9420
|
color: harmony.complementary,
|
|
@@ -9505,11 +9428,11 @@ function ColorPicker({
|
|
|
9505
9428
|
}
|
|
9506
9429
|
}
|
|
9507
9430
|
),
|
|
9508
|
-
/* @__PURE__ */
|
|
9431
|
+
/* @__PURE__ */ jsx42("span", { className: "text-xs font-mono text-muted-foreground", children: harmony.complementary })
|
|
9509
9432
|
] }),
|
|
9510
9433
|
/* @__PURE__ */ jsxs37("div", { className: "flex items-center gap-2", children: [
|
|
9511
|
-
/* @__PURE__ */
|
|
9512
|
-
/* @__PURE__ */
|
|
9434
|
+
/* @__PURE__ */ jsx42("span", { className: "text-xs text-muted-foreground w-24", children: "Triadic" }),
|
|
9435
|
+
/* @__PURE__ */ jsx42("div", { className: "flex gap-2", children: harmony.triadic.map((c) => /* @__PURE__ */ jsx42(
|
|
9513
9436
|
Swatch,
|
|
9514
9437
|
{
|
|
9515
9438
|
color: c,
|
|
@@ -9526,8 +9449,8 @@ function ColorPicker({
|
|
|
9526
9449
|
)) })
|
|
9527
9450
|
] }),
|
|
9528
9451
|
/* @__PURE__ */ jsxs37("div", { className: "flex items-center gap-2", children: [
|
|
9529
|
-
/* @__PURE__ */
|
|
9530
|
-
/* @__PURE__ */
|
|
9452
|
+
/* @__PURE__ */ jsx42("span", { className: "text-xs text-muted-foreground w-24", children: "Analogous" }),
|
|
9453
|
+
/* @__PURE__ */ jsx42("div", { className: "flex gap-2", children: harmony.analogous.map((c) => /* @__PURE__ */ jsx42(
|
|
9531
9454
|
Swatch,
|
|
9532
9455
|
{
|
|
9533
9456
|
color: c,
|
|
@@ -9552,7 +9475,7 @@ function ColorPicker({
|
|
|
9552
9475
|
|
|
9553
9476
|
// ../../components/ui/Grid.tsx
|
|
9554
9477
|
import React35, { useId as useId6 } from "react";
|
|
9555
|
-
import { Fragment as Fragment15, jsx as
|
|
9478
|
+
import { Fragment as Fragment15, jsx as jsx43, jsxs as jsxs38 } from "react/jsx-runtime";
|
|
9556
9479
|
var BP_MIN = {
|
|
9557
9480
|
sm: 640,
|
|
9558
9481
|
md: 768,
|
|
@@ -9672,7 +9595,7 @@ var GridRoot = React35.forwardRef(
|
|
|
9672
9595
|
style,
|
|
9673
9596
|
...rest,
|
|
9674
9597
|
children: [
|
|
9675
|
-
/* @__PURE__ */
|
|
9598
|
+
/* @__PURE__ */ jsx43("style", { dangerouslySetInnerHTML: { __html: css } }),
|
|
9676
9599
|
children
|
|
9677
9600
|
]
|
|
9678
9601
|
}
|
|
@@ -9715,7 +9638,7 @@ var GridItem = React35.forwardRef(
|
|
|
9715
9638
|
st.animation = `uvGridItemFadeIn 0.5s ease-out forwards`;
|
|
9716
9639
|
}
|
|
9717
9640
|
return /* @__PURE__ */ jsxs38(Fragment15, { children: [
|
|
9718
|
-
animationDelay != null && /* @__PURE__ */
|
|
9641
|
+
animationDelay != null && /* @__PURE__ */ jsx43(
|
|
9719
9642
|
"style",
|
|
9720
9643
|
{
|
|
9721
9644
|
dangerouslySetInnerHTML: {
|
|
@@ -9723,7 +9646,7 @@ var GridItem = React35.forwardRef(
|
|
|
9723
9646
|
}
|
|
9724
9647
|
}
|
|
9725
9648
|
),
|
|
9726
|
-
/* @__PURE__ */
|
|
9649
|
+
/* @__PURE__ */ jsx43(
|
|
9727
9650
|
"div",
|
|
9728
9651
|
{
|
|
9729
9652
|
ref,
|
|
@@ -9744,21 +9667,21 @@ var Grid_default = Grid;
|
|
|
9744
9667
|
|
|
9745
9668
|
// ../../components/ui/ClientOnly.tsx
|
|
9746
9669
|
import { useEffect as useEffect18, useState as useState31 } from "react";
|
|
9747
|
-
import { Fragment as Fragment16, jsx as
|
|
9670
|
+
import { Fragment as Fragment16, jsx as jsx44 } from "react/jsx-runtime";
|
|
9748
9671
|
function ClientOnly({ children, fallback = null }) {
|
|
9749
9672
|
const [hasMounted, setHasMounted] = useState31(false);
|
|
9750
9673
|
useEffect18(() => {
|
|
9751
9674
|
setHasMounted(true);
|
|
9752
9675
|
}, []);
|
|
9753
9676
|
if (!hasMounted) {
|
|
9754
|
-
return /* @__PURE__ */
|
|
9677
|
+
return /* @__PURE__ */ jsx44(Fragment16, { children: fallback });
|
|
9755
9678
|
}
|
|
9756
|
-
return /* @__PURE__ */
|
|
9679
|
+
return /* @__PURE__ */ jsx44(Fragment16, { children });
|
|
9757
9680
|
}
|
|
9758
9681
|
|
|
9759
9682
|
// ../../components/ui/Loading.tsx
|
|
9760
9683
|
import { Activity as Activity3 } from "lucide-react";
|
|
9761
|
-
import { jsx as
|
|
9684
|
+
import { jsx as jsx45, jsxs as jsxs39 } from "react/jsx-runtime";
|
|
9762
9685
|
var LoadingSpinner = ({
|
|
9763
9686
|
size = "md",
|
|
9764
9687
|
className,
|
|
@@ -9774,7 +9697,7 @@ var LoadingSpinner = ({
|
|
|
9774
9697
|
foreground: "text-foreground",
|
|
9775
9698
|
muted: "text-muted-foreground"
|
|
9776
9699
|
};
|
|
9777
|
-
return /* @__PURE__ */
|
|
9700
|
+
return /* @__PURE__ */ jsx45(
|
|
9778
9701
|
Activity3,
|
|
9779
9702
|
{
|
|
9780
9703
|
className: cn(
|
|
@@ -9795,7 +9718,7 @@ var LoadingDots = ({
|
|
|
9795
9718
|
foreground: "bg-foreground",
|
|
9796
9719
|
muted: "bg-muted-foreground"
|
|
9797
9720
|
};
|
|
9798
|
-
return /* @__PURE__ */
|
|
9721
|
+
return /* @__PURE__ */ jsx45("div", { className: cn("flex items-center space-x-1", className), children: [0, 1, 2].map((i) => /* @__PURE__ */ jsx45(
|
|
9799
9722
|
"div",
|
|
9800
9723
|
{
|
|
9801
9724
|
className: cn(
|
|
@@ -9817,7 +9740,7 @@ var LoadingBar = ({
|
|
|
9817
9740
|
label
|
|
9818
9741
|
}) => {
|
|
9819
9742
|
const pct = progress ? Math.min(Math.max(progress, 0), 100) : void 0;
|
|
9820
|
-
return /* @__PURE__ */
|
|
9743
|
+
return /* @__PURE__ */ jsx45(
|
|
9821
9744
|
"div",
|
|
9822
9745
|
{
|
|
9823
9746
|
className: cn("w-full bg-muted rounded-full h-2", className),
|
|
@@ -9826,7 +9749,7 @@ var LoadingBar = ({
|
|
|
9826
9749
|
"aria-valuemax": pct === void 0 ? void 0 : 100,
|
|
9827
9750
|
"aria-valuenow": pct === void 0 ? void 0 : Math.round(pct),
|
|
9828
9751
|
"aria-label": label || "Loading",
|
|
9829
|
-
children: /* @__PURE__ */
|
|
9752
|
+
children: /* @__PURE__ */ jsx45(
|
|
9830
9753
|
"div",
|
|
9831
9754
|
{
|
|
9832
9755
|
className: cn(
|
|
@@ -9844,9 +9767,9 @@ var LoadingBar = ({
|
|
|
9844
9767
|
|
|
9845
9768
|
// ../../components/ui/Table.tsx
|
|
9846
9769
|
import React36 from "react";
|
|
9847
|
-
import { jsx as
|
|
9770
|
+
import { jsx as jsx46, jsxs as jsxs40 } from "react/jsx-runtime";
|
|
9848
9771
|
var Table = React36.forwardRef(
|
|
9849
|
-
({ className, containerClassName, ...props }, ref) => /* @__PURE__ */
|
|
9772
|
+
({ className, containerClassName, ...props }, ref) => /* @__PURE__ */ jsx46(
|
|
9850
9773
|
"div",
|
|
9851
9774
|
{
|
|
9852
9775
|
className: cn(
|
|
@@ -9856,7 +9779,7 @@ var Table = React36.forwardRef(
|
|
|
9856
9779
|
"backdrop-blur-sm transition-all duration-300",
|
|
9857
9780
|
containerClassName
|
|
9858
9781
|
),
|
|
9859
|
-
children: /* @__PURE__ */
|
|
9782
|
+
children: /* @__PURE__ */ jsx46(
|
|
9860
9783
|
"table",
|
|
9861
9784
|
{
|
|
9862
9785
|
ref,
|
|
@@ -9887,7 +9810,7 @@ var TableHeader = React36.forwardRef(
|
|
|
9887
9810
|
)
|
|
9888
9811
|
);
|
|
9889
9812
|
TableHeader.displayName = "TableHeader";
|
|
9890
|
-
var TableBody = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
9813
|
+
var TableBody = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx46(
|
|
9891
9814
|
"tbody",
|
|
9892
9815
|
{
|
|
9893
9816
|
ref,
|
|
@@ -9896,7 +9819,7 @@ var TableBody = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE_
|
|
|
9896
9819
|
}
|
|
9897
9820
|
));
|
|
9898
9821
|
TableBody.displayName = "TableBody";
|
|
9899
|
-
var TableFooter = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
9822
|
+
var TableFooter = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx46(
|
|
9900
9823
|
"tfoot",
|
|
9901
9824
|
{
|
|
9902
9825
|
ref,
|
|
@@ -9908,7 +9831,7 @@ var TableFooter = React36.forwardRef(({ className, ...props }, ref) => /* @__PUR
|
|
|
9908
9831
|
}
|
|
9909
9832
|
));
|
|
9910
9833
|
TableFooter.displayName = "TableFooter";
|
|
9911
|
-
var TableRow = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
9834
|
+
var TableRow = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx46(
|
|
9912
9835
|
"tr",
|
|
9913
9836
|
{
|
|
9914
9837
|
ref,
|
|
@@ -9922,7 +9845,7 @@ var TableRow = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__
|
|
|
9922
9845
|
}
|
|
9923
9846
|
));
|
|
9924
9847
|
TableRow.displayName = "TableRow";
|
|
9925
|
-
var TableHead = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
9848
|
+
var TableHead = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx46(
|
|
9926
9849
|
"th",
|
|
9927
9850
|
{
|
|
9928
9851
|
ref,
|
|
@@ -9934,7 +9857,7 @@ var TableHead = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE_
|
|
|
9934
9857
|
}
|
|
9935
9858
|
));
|
|
9936
9859
|
TableHead.displayName = "TableHead";
|
|
9937
|
-
var TableCell = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
9860
|
+
var TableCell = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx46(
|
|
9938
9861
|
"td",
|
|
9939
9862
|
{
|
|
9940
9863
|
ref,
|
|
@@ -9943,7 +9866,7 @@ var TableCell = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE_
|
|
|
9943
9866
|
}
|
|
9944
9867
|
));
|
|
9945
9868
|
TableCell.displayName = "TableCell";
|
|
9946
|
-
var TableCaption = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
9869
|
+
var TableCaption = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx46(
|
|
9947
9870
|
"caption",
|
|
9948
9871
|
{
|
|
9949
9872
|
ref,
|
|
@@ -9957,7 +9880,7 @@ TableCaption.displayName = "TableCaption";
|
|
|
9957
9880
|
import { Filter as FilterIcon } from "lucide-react";
|
|
9958
9881
|
import React37 from "react";
|
|
9959
9882
|
import { useTranslations as useTranslations7 } from "next-intl";
|
|
9960
|
-
import { Fragment as Fragment17, jsx as
|
|
9883
|
+
import { Fragment as Fragment17, jsx as jsx47, jsxs as jsxs41 } from "react/jsx-runtime";
|
|
9961
9884
|
function useDebounced(value, delay = 300) {
|
|
9962
9885
|
const [debounced, setDebounced] = React37.useState(value);
|
|
9963
9886
|
React37.useEffect(() => {
|
|
@@ -10021,7 +9944,7 @@ function DataTable({
|
|
|
10021
9944
|
className: "h-8 w-full text-sm"
|
|
10022
9945
|
};
|
|
10023
9946
|
if (col.filter.type === "text") {
|
|
10024
|
-
return /* @__PURE__ */
|
|
9947
|
+
return /* @__PURE__ */ jsx47(
|
|
10025
9948
|
Input_default,
|
|
10026
9949
|
{
|
|
10027
9950
|
...commonProps,
|
|
@@ -10036,7 +9959,7 @@ function DataTable({
|
|
|
10036
9959
|
}
|
|
10037
9960
|
if (col.filter.type === "select") {
|
|
10038
9961
|
const options = col.filter.options || [];
|
|
10039
|
-
return /* @__PURE__ */
|
|
9962
|
+
return /* @__PURE__ */ jsx47(
|
|
10040
9963
|
Combobox,
|
|
10041
9964
|
{
|
|
10042
9965
|
options: ["", ...options],
|
|
@@ -10052,7 +9975,7 @@ function DataTable({
|
|
|
10052
9975
|
);
|
|
10053
9976
|
}
|
|
10054
9977
|
if (col.filter.type === "date") {
|
|
10055
|
-
return /* @__PURE__ */
|
|
9978
|
+
return /* @__PURE__ */ jsx47(
|
|
10056
9979
|
DatePicker,
|
|
10057
9980
|
{
|
|
10058
9981
|
placeholder: col.filter.placeholder || `Select ${String(col.title)}`,
|
|
@@ -10066,7 +9989,7 @@ function DataTable({
|
|
|
10066
9989
|
}
|
|
10067
9990
|
return null;
|
|
10068
9991
|
};
|
|
10069
|
-
const renderHeader = /* @__PURE__ */
|
|
9992
|
+
const renderHeader = /* @__PURE__ */ jsx47(TableRow, { children: visibleColumns.map((col, colIdx) => /* @__PURE__ */ jsx47(
|
|
10070
9993
|
TableHead,
|
|
10071
9994
|
{
|
|
10072
9995
|
style: { width: col.width },
|
|
@@ -10080,8 +10003,8 @@ function DataTable({
|
|
|
10080
10003
|
const isRightAlign = col.align === "right" || !col.align && headerAlign === "right";
|
|
10081
10004
|
const isCenterAlign = col.align === "center" || !col.align && headerAlign === "center";
|
|
10082
10005
|
const titleContent = /* @__PURE__ */ jsxs41("div", { className: "flex items-center gap-1 min-w-0 flex-shrink", children: [
|
|
10083
|
-
/* @__PURE__ */
|
|
10084
|
-
col.sortable && /* @__PURE__ */
|
|
10006
|
+
/* @__PURE__ */ jsx47("span", { className: "truncate font-medium text-sm", children: col.title }),
|
|
10007
|
+
col.sortable && /* @__PURE__ */ jsx47(
|
|
10085
10008
|
"button",
|
|
10086
10009
|
{
|
|
10087
10010
|
className: cn(
|
|
@@ -10099,7 +10022,7 @@ function DataTable({
|
|
|
10099
10022
|
"aria-label": "Sort",
|
|
10100
10023
|
title: `Sort by ${String(col.title)}`,
|
|
10101
10024
|
children: /* @__PURE__ */ jsxs41("svg", { width: "14", height: "14", viewBox: "0 0 20 20", fill: "none", className: "inline-block", children: [
|
|
10102
|
-
/* @__PURE__ */
|
|
10025
|
+
/* @__PURE__ */ jsx47(
|
|
10103
10026
|
"path",
|
|
10104
10027
|
{
|
|
10105
10028
|
d: "M7 8l3-3 3 3",
|
|
@@ -10110,7 +10033,7 @@ function DataTable({
|
|
|
10110
10033
|
opacity: sort?.key === col.key && sort.order === "asc" ? 1 : 0.4
|
|
10111
10034
|
}
|
|
10112
10035
|
),
|
|
10113
|
-
/* @__PURE__ */
|
|
10036
|
+
/* @__PURE__ */ jsx47(
|
|
10114
10037
|
"path",
|
|
10115
10038
|
{
|
|
10116
10039
|
d: "M7 12l3 3 3-3",
|
|
@@ -10125,11 +10048,11 @@ function DataTable({
|
|
|
10125
10048
|
}
|
|
10126
10049
|
)
|
|
10127
10050
|
] });
|
|
10128
|
-
const filterContent = col.filter && /* @__PURE__ */
|
|
10051
|
+
const filterContent = col.filter && /* @__PURE__ */ jsx47(
|
|
10129
10052
|
Popover,
|
|
10130
10053
|
{
|
|
10131
10054
|
placement: isRightAlign ? "bottom-end" : "bottom-start",
|
|
10132
|
-
trigger: /* @__PURE__ */
|
|
10055
|
+
trigger: /* @__PURE__ */ jsx47(
|
|
10133
10056
|
"button",
|
|
10134
10057
|
{
|
|
10135
10058
|
className: cn(
|
|
@@ -10139,7 +10062,7 @@ function DataTable({
|
|
|
10139
10062
|
),
|
|
10140
10063
|
"aria-label": "Filter",
|
|
10141
10064
|
title: "Filter",
|
|
10142
|
-
children: /* @__PURE__ */
|
|
10065
|
+
children: /* @__PURE__ */ jsx47(FilterIcon, { className: "h-4 w-4" })
|
|
10143
10066
|
}
|
|
10144
10067
|
),
|
|
10145
10068
|
children: /* @__PURE__ */ jsxs41("div", { className: "w-48 p-2 space-y-2", children: [
|
|
@@ -10148,7 +10071,7 @@ function DataTable({
|
|
|
10148
10071
|
col.title
|
|
10149
10072
|
] }),
|
|
10150
10073
|
renderFilterControl(col),
|
|
10151
|
-
filters[col.key] && /* @__PURE__ */
|
|
10074
|
+
filters[col.key] && /* @__PURE__ */ jsx47(
|
|
10152
10075
|
"button",
|
|
10153
10076
|
{
|
|
10154
10077
|
onClick: () => {
|
|
@@ -10166,7 +10089,7 @@ function DataTable({
|
|
|
10166
10089
|
] })
|
|
10167
10090
|
}
|
|
10168
10091
|
);
|
|
10169
|
-
return /* @__PURE__ */
|
|
10092
|
+
return /* @__PURE__ */ jsx47(
|
|
10170
10093
|
"div",
|
|
10171
10094
|
{
|
|
10172
10095
|
className: cn(
|
|
@@ -10229,13 +10152,13 @@ function DataTable({
|
|
|
10229
10152
|
}, [processedData, curPage, curPageSize]);
|
|
10230
10153
|
return /* @__PURE__ */ jsxs41("div", { className: cn("space-y-2", className), children: [
|
|
10231
10154
|
/* @__PURE__ */ jsxs41("div", { className: "flex items-center justify-between gap-4 mb-1", children: [
|
|
10232
|
-
/* @__PURE__ */
|
|
10155
|
+
/* @__PURE__ */ jsx47("div", { className: "text-sm text-muted-foreground", children: caption }),
|
|
10233
10156
|
/* @__PURE__ */ jsxs41("div", { className: "flex items-center gap-2", children: [
|
|
10234
|
-
enableDensityToggle && /* @__PURE__ */
|
|
10157
|
+
enableDensityToggle && /* @__PURE__ */ jsx47(
|
|
10235
10158
|
DropdownMenu_default,
|
|
10236
10159
|
{
|
|
10237
10160
|
trigger: /* @__PURE__ */ jsxs41(Button_default, { variant: "ghost", size: "sm", className: "h-8 px-2", children: [
|
|
10238
|
-
/* @__PURE__ */
|
|
10161
|
+
/* @__PURE__ */ jsx47("svg", { className: "w-4 h-4 mr-1", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx47("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 6h16M4 10h16M4 14h16M4 18h16" }) }),
|
|
10239
10162
|
labels?.density || t("density")
|
|
10240
10163
|
] }),
|
|
10241
10164
|
items: [
|
|
@@ -10245,11 +10168,11 @@ function DataTable({
|
|
|
10245
10168
|
]
|
|
10246
10169
|
}
|
|
10247
10170
|
),
|
|
10248
|
-
enableColumnVisibilityToggle && /* @__PURE__ */
|
|
10171
|
+
enableColumnVisibilityToggle && /* @__PURE__ */ jsx47(
|
|
10249
10172
|
DropdownMenu_default,
|
|
10250
10173
|
{
|
|
10251
10174
|
trigger: /* @__PURE__ */ jsxs41(Button_default, { variant: "ghost", size: "sm", className: "h-8 px-2", children: [
|
|
10252
|
-
/* @__PURE__ */
|
|
10175
|
+
/* @__PURE__ */ jsx47("svg", { className: "w-4 h-4 mr-1", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx47(
|
|
10253
10176
|
"path",
|
|
10254
10177
|
{
|
|
10255
10178
|
strokeLinecap: "round",
|
|
@@ -10267,19 +10190,19 @@ function DataTable({
|
|
|
10267
10190
|
setVisibleCols((prev) => prev.includes(c.key) ? prev.filter((k) => k !== c.key) : [...prev, c.key]);
|
|
10268
10191
|
},
|
|
10269
10192
|
children: [
|
|
10270
|
-
/* @__PURE__ */
|
|
10271
|
-
/* @__PURE__ */
|
|
10193
|
+
/* @__PURE__ */ jsx47("input", { type: "checkbox", className: "mr-2 rounded border-border", readOnly: true, checked: visibleCols.includes(c.key) }),
|
|
10194
|
+
/* @__PURE__ */ jsx47("span", { className: "truncate", children: c.title })
|
|
10272
10195
|
]
|
|
10273
10196
|
},
|
|
10274
10197
|
c.key
|
|
10275
10198
|
))
|
|
10276
10199
|
}
|
|
10277
10200
|
),
|
|
10278
|
-
enableHeaderAlignToggle && /* @__PURE__ */
|
|
10201
|
+
enableHeaderAlignToggle && /* @__PURE__ */ jsx47(
|
|
10279
10202
|
DropdownMenu_default,
|
|
10280
10203
|
{
|
|
10281
10204
|
trigger: /* @__PURE__ */ jsxs41(Button_default, { variant: "ghost", size: "sm", className: "h-8 px-2", children: [
|
|
10282
|
-
/* @__PURE__ */
|
|
10205
|
+
/* @__PURE__ */ jsx47("svg", { className: "w-4 h-4 mr-1", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx47("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 6h16M4 12h10M4 18h16" }) }),
|
|
10283
10206
|
labels?.headerAlign || t("headerAlign")
|
|
10284
10207
|
] }),
|
|
10285
10208
|
items: [
|
|
@@ -10292,17 +10215,17 @@ function DataTable({
|
|
|
10292
10215
|
toolbar
|
|
10293
10216
|
] })
|
|
10294
10217
|
] }),
|
|
10295
|
-
/* @__PURE__ */
|
|
10218
|
+
/* @__PURE__ */ jsx47("div", { className: cn("relative rounded-md border border-border/50 overflow-hidden", loading2 && "opacity-60 pointer-events-none"), children: /* @__PURE__ */ jsxs41(
|
|
10296
10219
|
Table,
|
|
10297
10220
|
{
|
|
10298
10221
|
containerClassName: "border-0 md:border-0 rounded-none md:rounded-none shadow-none bg-transparent",
|
|
10299
10222
|
className: "[&_thead]:sticky [&_thead]:top-0 [&_thead]:z-[5] [&_thead]:bg-background [&_thead]:backdrop-blur-sm",
|
|
10300
10223
|
children: [
|
|
10301
|
-
/* @__PURE__ */
|
|
10302
|
-
/* @__PURE__ */
|
|
10224
|
+
/* @__PURE__ */ jsx47(TableHeader, { children: renderHeader }),
|
|
10225
|
+
/* @__PURE__ */ jsx47(TableBody, { children: loading2 ? /* @__PURE__ */ jsx47(TableRow, { children: /* @__PURE__ */ jsx47(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: [
|
|
10303
10226
|
/* @__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: [
|
|
10304
|
-
/* @__PURE__ */
|
|
10305
|
-
/* @__PURE__ */
|
|
10227
|
+
/* @__PURE__ */ jsx47("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }),
|
|
10228
|
+
/* @__PURE__ */ jsx47(
|
|
10306
10229
|
"path",
|
|
10307
10230
|
{
|
|
10308
10231
|
className: "opacity-75",
|
|
@@ -10311,12 +10234,12 @@ function DataTable({
|
|
|
10311
10234
|
}
|
|
10312
10235
|
)
|
|
10313
10236
|
] }),
|
|
10314
|
-
/* @__PURE__ */
|
|
10315
|
-
] }) }) }) : !displayedData || displayedData.length === 0 ? /* @__PURE__ */
|
|
10237
|
+
/* @__PURE__ */ jsx47("span", { className: "text-sm", children: "Loading..." })
|
|
10238
|
+
] }) }) }) : !displayedData || displayedData.length === 0 ? /* @__PURE__ */ jsx47(TableRow, { children: /* @__PURE__ */ jsx47(TableCell, { colSpan: visibleColumns.length, className: "text-center py-6 text-muted-foreground", children: "No data" }) }) : displayedData.map((row, idx) => {
|
|
10316
10239
|
const isLastRow = idx === displayedData.length - 1;
|
|
10317
|
-
return /* @__PURE__ */
|
|
10240
|
+
return /* @__PURE__ */ jsx47(TableRow, { className: cn(densityRowClass, striped && idx % 2 === 0 && "bg-muted/30"), children: visibleColumns.map((col, colIdx) => {
|
|
10318
10241
|
const value = col.dataIndex ? row[col.dataIndex] : void 0;
|
|
10319
|
-
return /* @__PURE__ */
|
|
10242
|
+
return /* @__PURE__ */ jsx47(
|
|
10320
10243
|
TableCell,
|
|
10321
10244
|
{
|
|
10322
10245
|
className: cn(
|
|
@@ -10336,7 +10259,7 @@ function DataTable({
|
|
|
10336
10259
|
]
|
|
10337
10260
|
}
|
|
10338
10261
|
) }),
|
|
10339
|
-
totalItems > 0 && /* @__PURE__ */
|
|
10262
|
+
totalItems > 0 && /* @__PURE__ */ jsx47("div", { className: "border-t bg-muted/30 p-4 rounded-b-md", children: /* @__PURE__ */ jsx47(
|
|
10340
10263
|
Pagination,
|
|
10341
10264
|
{
|
|
10342
10265
|
page: curPage,
|
|
@@ -10520,7 +10443,7 @@ var generateWatchOutput = (names, _names, formValues, isGlobal, defaultValue) =>
|
|
|
10520
10443
|
var isPrimitive = (value) => isNullOrUndefined(value) || !isObjectType(value);
|
|
10521
10444
|
function deepEqual(object1, object2, _internal_visited = /* @__PURE__ */ new WeakSet()) {
|
|
10522
10445
|
if (isPrimitive(object1) || isPrimitive(object2)) {
|
|
10523
|
-
return
|
|
10446
|
+
return object1 === object2;
|
|
10524
10447
|
}
|
|
10525
10448
|
if (isDateObject(object1) && isDateObject(object2)) {
|
|
10526
10449
|
return object1.getTime() === object2.getTime();
|
|
@@ -10542,7 +10465,7 @@ function deepEqual(object1, object2, _internal_visited = /* @__PURE__ */ new Wea
|
|
|
10542
10465
|
}
|
|
10543
10466
|
if (key !== "ref") {
|
|
10544
10467
|
const val2 = object2[key];
|
|
10545
|
-
if (isDateObject(val1) && isDateObject(val2) || isObject(val1) && isObject(val2) || Array.isArray(val1) && Array.isArray(val2) ? !deepEqual(val1, val2, _internal_visited) :
|
|
10468
|
+
if (isDateObject(val1) && isDateObject(val2) || isObject(val1) && isObject(val2) || Array.isArray(val1) && Array.isArray(val2) ? !deepEqual(val1, val2, _internal_visited) : val1 !== val2) {
|
|
10546
10469
|
return false;
|
|
10547
10470
|
}
|
|
10548
10471
|
}
|
|
@@ -10555,76 +10478,48 @@ function useWatch(props) {
|
|
|
10555
10478
|
const _defaultValue = React38.useRef(defaultValue);
|
|
10556
10479
|
const _compute = React38.useRef(compute);
|
|
10557
10480
|
const _computeFormValues = React38.useRef(void 0);
|
|
10558
|
-
const _prevControl = React38.useRef(control);
|
|
10559
|
-
const _prevName = React38.useRef(name);
|
|
10560
10481
|
_compute.current = compute;
|
|
10561
|
-
const
|
|
10562
|
-
|
|
10563
|
-
|
|
10564
|
-
|
|
10565
|
-
|
|
10566
|
-
|
|
10567
|
-
|
|
10568
|
-
|
|
10569
|
-
|
|
10570
|
-
|
|
10571
|
-
|
|
10572
|
-
|
|
10573
|
-
|
|
10574
|
-
|
|
10575
|
-
|
|
10576
|
-
|
|
10482
|
+
const defaultValueMemo = React38.useMemo(() => control._getWatch(name, _defaultValue.current), [control, name]);
|
|
10483
|
+
const [value, updateValue] = React38.useState(_compute.current ? _compute.current(defaultValueMemo) : defaultValueMemo);
|
|
10484
|
+
useIsomorphicLayoutEffect(() => control._subscribe({
|
|
10485
|
+
name,
|
|
10486
|
+
formState: {
|
|
10487
|
+
values: true
|
|
10488
|
+
},
|
|
10489
|
+
exact,
|
|
10490
|
+
callback: (formState) => {
|
|
10491
|
+
if (!disabled) {
|
|
10492
|
+
const formValues = generateWatchOutput(name, control._names, formState.values || control._formValues, false, _defaultValue.current);
|
|
10493
|
+
if (_compute.current) {
|
|
10494
|
+
const computedFormValues = _compute.current(formValues);
|
|
10495
|
+
if (!deepEqual(computedFormValues, _computeFormValues.current)) {
|
|
10496
|
+
updateValue(computedFormValues);
|
|
10497
|
+
_computeFormValues.current = computedFormValues;
|
|
10498
|
+
}
|
|
10499
|
+
} else {
|
|
10500
|
+
updateValue(formValues);
|
|
10577
10501
|
}
|
|
10578
|
-
} else {
|
|
10579
|
-
updateValue(formValues);
|
|
10580
10502
|
}
|
|
10581
10503
|
}
|
|
10582
|
-
}, [control
|
|
10583
|
-
useIsomorphicLayoutEffect(() => {
|
|
10584
|
-
if (_prevControl.current !== control || !deepEqual(_prevName.current, name)) {
|
|
10585
|
-
_prevControl.current = control;
|
|
10586
|
-
_prevName.current = name;
|
|
10587
|
-
refreshValue();
|
|
10588
|
-
}
|
|
10589
|
-
return control._subscribe({
|
|
10590
|
-
name,
|
|
10591
|
-
formState: {
|
|
10592
|
-
values: true
|
|
10593
|
-
},
|
|
10594
|
-
exact,
|
|
10595
|
-
callback: (formState) => {
|
|
10596
|
-
refreshValue(formState.values);
|
|
10597
|
-
}
|
|
10598
|
-
});
|
|
10599
|
-
}, [control, exact, name, refreshValue]);
|
|
10504
|
+
}), [control, disabled, name, exact]);
|
|
10600
10505
|
React38.useEffect(() => control._removeUnmounted());
|
|
10601
|
-
|
|
10602
|
-
const prevName = _prevName.current;
|
|
10603
|
-
const computedOutput = React38.useMemo(() => {
|
|
10604
|
-
if (disabled) {
|
|
10605
|
-
return null;
|
|
10606
|
-
}
|
|
10607
|
-
const nameChanged = !controlChanged && !deepEqual(prevName, name);
|
|
10608
|
-
const shouldReturnImmediate = controlChanged || nameChanged;
|
|
10609
|
-
return shouldReturnImmediate ? getCurrentOutput() : null;
|
|
10610
|
-
}, [disabled, controlChanged, name, prevName, getCurrentOutput]);
|
|
10611
|
-
return computedOutput !== null ? computedOutput : value;
|
|
10506
|
+
return value;
|
|
10612
10507
|
}
|
|
10613
10508
|
function useController(props) {
|
|
10614
10509
|
const methods = useFormContext();
|
|
10615
|
-
const { name, disabled, control = methods.control, shouldUnregister, defaultValue
|
|
10510
|
+
const { name, disabled, control = methods.control, shouldUnregister, defaultValue } = props;
|
|
10616
10511
|
const isArrayField = isNameInFieldArray(control._names.array, name);
|
|
10617
10512
|
const defaultValueMemo = React38.useMemo(() => get(control._formValues, name, get(control._defaultValues, name, defaultValue)), [control, name, defaultValue]);
|
|
10618
10513
|
const value = useWatch({
|
|
10619
10514
|
control,
|
|
10620
10515
|
name,
|
|
10621
10516
|
defaultValue: defaultValueMemo,
|
|
10622
|
-
exact
|
|
10517
|
+
exact: true
|
|
10623
10518
|
});
|
|
10624
10519
|
const formState = useFormState({
|
|
10625
10520
|
control,
|
|
10626
10521
|
name,
|
|
10627
|
-
exact
|
|
10522
|
+
exact: true
|
|
10628
10523
|
});
|
|
10629
10524
|
const _props = React38.useRef(props);
|
|
10630
10525
|
const _previousNameRef = React38.useRef(void 0);
|
|
@@ -10841,11 +10736,10 @@ function isTraversable(value) {
|
|
|
10841
10736
|
}
|
|
10842
10737
|
function markFieldsDirty(data, fields = {}) {
|
|
10843
10738
|
for (const key in data) {
|
|
10844
|
-
|
|
10845
|
-
|
|
10846
|
-
|
|
10847
|
-
|
|
10848
|
-
} else if (!isUndefined(value)) {
|
|
10739
|
+
if (isTraversable(data[key])) {
|
|
10740
|
+
fields[key] = Array.isArray(data[key]) ? [] : {};
|
|
10741
|
+
markFieldsDirty(data[key], fields[key]);
|
|
10742
|
+
} else if (!isUndefined(data[key])) {
|
|
10849
10743
|
fields[key] = true;
|
|
10850
10744
|
}
|
|
10851
10745
|
}
|
|
@@ -10856,16 +10750,14 @@ function getDirtyFields(data, formValues, dirtyFieldsFromValues) {
|
|
|
10856
10750
|
dirtyFieldsFromValues = markFieldsDirty(formValues);
|
|
10857
10751
|
}
|
|
10858
10752
|
for (const key in data) {
|
|
10859
|
-
|
|
10860
|
-
if (isTraversable(value)) {
|
|
10753
|
+
if (isTraversable(data[key])) {
|
|
10861
10754
|
if (isUndefined(formValues) || isPrimitive(dirtyFieldsFromValues[key])) {
|
|
10862
|
-
dirtyFieldsFromValues[key] = markFieldsDirty(
|
|
10755
|
+
dirtyFieldsFromValues[key] = markFieldsDirty(data[key], Array.isArray(data[key]) ? [] : {});
|
|
10863
10756
|
} else {
|
|
10864
|
-
getDirtyFields(
|
|
10757
|
+
getDirtyFields(data[key], isNullOrUndefined(formValues) ? {} : formValues[key], dirtyFieldsFromValues[key]);
|
|
10865
10758
|
}
|
|
10866
10759
|
} else {
|
|
10867
|
-
|
|
10868
|
-
dirtyFieldsFromValues[key] = !deepEqual(value, formValue);
|
|
10760
|
+
dirtyFieldsFromValues[key] = !deepEqual(data[key], formValues[key]);
|
|
10869
10761
|
}
|
|
10870
10762
|
}
|
|
10871
10763
|
return dirtyFieldsFromValues;
|
|
@@ -11320,7 +11212,7 @@ function createFormControl(props = {}) {
|
|
|
11320
11212
|
if (field) {
|
|
11321
11213
|
const defaultValue = get(_formValues, name, isUndefined(value) ? get(_defaultValues, name) : value);
|
|
11322
11214
|
isUndefined(defaultValue) || ref && ref.defaultChecked || shouldSkipSetValueAs ? set(_formValues, name, shouldSkipSetValueAs ? defaultValue : getFieldValue(field._f)) : setFieldValue(name, defaultValue);
|
|
11323
|
-
_state.mount &&
|
|
11215
|
+
_state.mount && _setValid();
|
|
11324
11216
|
}
|
|
11325
11217
|
};
|
|
11326
11218
|
const updateTouchAndDirty = (name, fieldValue, isBlurEvent, shouldDirty, shouldRender) => {
|
|
@@ -11931,12 +11823,8 @@ function createFormControl(props = {}) {
|
|
|
11931
11823
|
watchAll: false,
|
|
11932
11824
|
focus: ""
|
|
11933
11825
|
};
|
|
11934
|
-
_state.mount = !_proxyFormState.isValid || !!keepStateOptions.keepIsValid || !!keepStateOptions.keepDirtyValues
|
|
11826
|
+
_state.mount = !_proxyFormState.isValid || !!keepStateOptions.keepIsValid || !!keepStateOptions.keepDirtyValues;
|
|
11935
11827
|
_state.watch = !!_options.shouldUnregister;
|
|
11936
|
-
_state.action = false;
|
|
11937
|
-
if (!keepStateOptions.keepErrors) {
|
|
11938
|
-
_formState.errors = {};
|
|
11939
|
-
}
|
|
11940
11828
|
_subjects.state.next({
|
|
11941
11829
|
submitCount: keepStateOptions.keepSubmitCount ? _formState.submitCount : 0,
|
|
11942
11830
|
isDirty: isEmptyResetValues ? false : keepStateOptions.keepDirty ? _formState.isDirty : !!(keepStateOptions.keepDefaultValues && !deepEqual(formValues, _defaultValues)),
|
|
@@ -12133,15 +12021,11 @@ function useForm(props = {}) {
|
|
|
12133
12021
|
}
|
|
12134
12022
|
}, [control, formState.isDirty]);
|
|
12135
12023
|
React38.useEffect(() => {
|
|
12136
|
-
var _a;
|
|
12137
12024
|
if (props.values && !deepEqual(props.values, _values.current)) {
|
|
12138
12025
|
control._reset(props.values, {
|
|
12139
12026
|
keepFieldsRef: true,
|
|
12140
12027
|
...control._options.resetOptions
|
|
12141
12028
|
});
|
|
12142
|
-
if (!((_a = control._options.resetOptions) === null || _a === void 0 ? void 0 : _a.keepIsValid)) {
|
|
12143
|
-
control._setValid();
|
|
12144
|
-
}
|
|
12145
12029
|
_values.current = props.values;
|
|
12146
12030
|
updateFormState((state) => ({ ...state }));
|
|
12147
12031
|
} else {
|
|
@@ -12165,7 +12049,7 @@ function useForm(props = {}) {
|
|
|
12165
12049
|
|
|
12166
12050
|
// ../../components/ui/Form.tsx
|
|
12167
12051
|
import { useTranslations as useTranslations8 } from "next-intl";
|
|
12168
|
-
import { jsx as
|
|
12052
|
+
import { jsx as jsx48, jsxs as jsxs42 } from "react/jsx-runtime";
|
|
12169
12053
|
var FormConfigContext = React39.createContext({ size: "md" });
|
|
12170
12054
|
var FormWrapper = ({
|
|
12171
12055
|
children,
|
|
@@ -12185,14 +12069,14 @@ var FormWrapper = ({
|
|
|
12185
12069
|
}
|
|
12186
12070
|
}, [JSON.stringify(initialValues)]);
|
|
12187
12071
|
const { validationSchema: _, ...formProps } = props;
|
|
12188
|
-
return /* @__PURE__ */
|
|
12072
|
+
return /* @__PURE__ */ jsx48(FormProvider, { ...methods, children: /* @__PURE__ */ jsx48(FormConfigContext.Provider, { value: { size }, children: /* @__PURE__ */ jsx48("form", { onSubmit: methods.handleSubmit(onSubmit), className, ...formProps, children }) }) });
|
|
12189
12073
|
};
|
|
12190
12074
|
var Form = FormWrapper;
|
|
12191
12075
|
var FormFieldContext = React39.createContext({});
|
|
12192
12076
|
var FormField = ({
|
|
12193
12077
|
...props
|
|
12194
12078
|
}) => {
|
|
12195
|
-
return /* @__PURE__ */
|
|
12079
|
+
return /* @__PURE__ */ jsx48(FormFieldContext.Provider, { value: { name: props.name }, children: /* @__PURE__ */ jsx48(Controller, { ...props }) });
|
|
12196
12080
|
};
|
|
12197
12081
|
var useFormField = () => {
|
|
12198
12082
|
const fieldContext = React39.useContext(FormFieldContext);
|
|
@@ -12220,19 +12104,31 @@ var useFormField = () => {
|
|
|
12220
12104
|
var FormItemContext = React39.createContext({});
|
|
12221
12105
|
var FormItem = React39.forwardRef(({ className, ...props }, ref) => {
|
|
12222
12106
|
const id = React39.useId();
|
|
12223
|
-
return /* @__PURE__ */
|
|
12107
|
+
return /* @__PURE__ */ jsx48(FormItemContext.Provider, { value: { id }, children: /* @__PURE__ */ jsx48("div", { ref, className: cn("space-y-2", className), ...props }) });
|
|
12224
12108
|
});
|
|
12225
12109
|
FormItem.displayName = "FormItem";
|
|
12226
|
-
var FormLabel = React39.forwardRef(({ className, ...props }, ref) => {
|
|
12110
|
+
var FormLabel = React39.forwardRef(({ className, children, required, ...props }, ref) => {
|
|
12227
12111
|
const { error, formItemId } = useFormField();
|
|
12228
12112
|
const config = React39.useContext(FormConfigContext);
|
|
12229
12113
|
const sizeClass = config.size === "sm" ? "text-xs" : config.size === "lg" ? "text-base" : "text-sm";
|
|
12230
|
-
return /* @__PURE__ */
|
|
12114
|
+
return /* @__PURE__ */ jsxs42(
|
|
12115
|
+
Label,
|
|
12116
|
+
{
|
|
12117
|
+
ref,
|
|
12118
|
+
className: cn(sizeClass, error && "text-destructive", className),
|
|
12119
|
+
htmlFor: formItemId,
|
|
12120
|
+
...props,
|
|
12121
|
+
children: [
|
|
12122
|
+
children,
|
|
12123
|
+
required && /* @__PURE__ */ jsx48("span", { className: "text-destructive ml-1", children: "*" })
|
|
12124
|
+
]
|
|
12125
|
+
}
|
|
12126
|
+
);
|
|
12231
12127
|
});
|
|
12232
12128
|
FormLabel.displayName = "FormLabel";
|
|
12233
12129
|
var FormControl = React39.forwardRef(({ ...props }, ref) => {
|
|
12234
12130
|
const { error, formItemId, formDescriptionId, formMessageId } = useFormField();
|
|
12235
|
-
return /* @__PURE__ */
|
|
12131
|
+
return /* @__PURE__ */ jsx48(
|
|
12236
12132
|
"div",
|
|
12237
12133
|
{
|
|
12238
12134
|
ref,
|
|
@@ -12246,7 +12142,7 @@ var FormControl = React39.forwardRef(({ ...props }, ref) => {
|
|
|
12246
12142
|
FormControl.displayName = "FormControl";
|
|
12247
12143
|
var FormDescription = React39.forwardRef(({ className, ...props }, ref) => {
|
|
12248
12144
|
const { formDescriptionId } = useFormField();
|
|
12249
|
-
return /* @__PURE__ */
|
|
12145
|
+
return /* @__PURE__ */ jsx48("p", { ref, id: formDescriptionId, className: cn("text-sm text-muted-foreground", className), ...props });
|
|
12250
12146
|
});
|
|
12251
12147
|
FormDescription.displayName = "FormDescription";
|
|
12252
12148
|
var FormMessage = React39.forwardRef(({ className, children, ...props }, ref) => {
|
|
@@ -12255,26 +12151,26 @@ var FormMessage = React39.forwardRef(({ className, children, ...props }, ref) =>
|
|
|
12255
12151
|
if (!body) {
|
|
12256
12152
|
return null;
|
|
12257
12153
|
}
|
|
12258
|
-
return /* @__PURE__ */
|
|
12154
|
+
return /* @__PURE__ */ jsx48("p", { ref, id: formMessageId, className: cn("text-sm font-medium text-destructive", className), ...props, children: body });
|
|
12259
12155
|
});
|
|
12260
12156
|
FormMessage.displayName = "FormMessage";
|
|
12261
|
-
var FormInput = React39.forwardRef(({ name, ...props }, ref) => /* @__PURE__ */
|
|
12157
|
+
var FormInput = React39.forwardRef(({ name, ...props }, ref) => /* @__PURE__ */ jsx48(FormConfigContext.Consumer, { children: ({ size }) => /* @__PURE__ */ jsx48(
|
|
12262
12158
|
FormField,
|
|
12263
12159
|
{
|
|
12264
12160
|
name,
|
|
12265
12161
|
render: ({ field }) => /* @__PURE__ */ jsxs42(FormItem, { children: [
|
|
12266
|
-
/* @__PURE__ */
|
|
12267
|
-
/* @__PURE__ */
|
|
12162
|
+
/* @__PURE__ */ jsx48(FormControl, { children: /* @__PURE__ */ jsx48(Input_default, { size: props.size ?? size, ...field, ...props }) }),
|
|
12163
|
+
/* @__PURE__ */ jsx48(FormMessage, {})
|
|
12268
12164
|
] })
|
|
12269
12165
|
}
|
|
12270
12166
|
) }));
|
|
12271
12167
|
FormInput.displayName = "FormInput";
|
|
12272
|
-
var FormCheckbox = React39.forwardRef(({ name, ...props }, ref) => /* @__PURE__ */
|
|
12168
|
+
var FormCheckbox = React39.forwardRef(({ name, ...props }, ref) => /* @__PURE__ */ jsx48(FormConfigContext.Consumer, { children: ({ size }) => /* @__PURE__ */ jsx48(
|
|
12273
12169
|
FormField,
|
|
12274
12170
|
{
|
|
12275
12171
|
name,
|
|
12276
12172
|
render: ({ field }) => /* @__PURE__ */ jsxs42(FormItem, { children: [
|
|
12277
|
-
/* @__PURE__ */
|
|
12173
|
+
/* @__PURE__ */ jsx48(FormControl, { children: /* @__PURE__ */ jsx48(
|
|
12278
12174
|
Checkbox,
|
|
12279
12175
|
{
|
|
12280
12176
|
ref,
|
|
@@ -12288,20 +12184,20 @@ var FormCheckbox = React39.forwardRef(({ name, ...props }, ref) => /* @__PURE__
|
|
|
12288
12184
|
...props
|
|
12289
12185
|
}
|
|
12290
12186
|
) }),
|
|
12291
|
-
/* @__PURE__ */
|
|
12187
|
+
/* @__PURE__ */ jsx48(FormMessage, {})
|
|
12292
12188
|
] })
|
|
12293
12189
|
}
|
|
12294
12190
|
) }));
|
|
12295
12191
|
FormCheckbox.displayName = "FormCheckbox";
|
|
12296
|
-
var FormActions = React39.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
|
|
12192
|
+
var FormActions = React39.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx48("div", { ref, className: cn("flex gap-2 justify-end", className), ...props }));
|
|
12297
12193
|
FormActions.displayName = "FormActions";
|
|
12298
|
-
var FormSubmitButton = React39.forwardRef(({ children, loading: loading2, ...props }, ref) => /* @__PURE__ */
|
|
12194
|
+
var FormSubmitButton = React39.forwardRef(({ children, loading: loading2, ...props }, ref) => /* @__PURE__ */ jsx48(FormConfigContext.Consumer, { children: ({ size }) => /* @__PURE__ */ jsx48(Button_default, { ref, type: "submit", size: props.size ?? size, disabled: loading2, ...props, children }) }));
|
|
12299
12195
|
FormSubmitButton.displayName = "FormSubmitButton";
|
|
12300
12196
|
|
|
12301
12197
|
// ../../components/ui/NotificationModal.tsx
|
|
12302
12198
|
import { ExternalLink } from "lucide-react";
|
|
12303
12199
|
import { useTranslations as useTranslations9 } from "next-intl";
|
|
12304
|
-
import { jsx as
|
|
12200
|
+
import { jsx as jsx49, jsxs as jsxs43 } from "react/jsx-runtime";
|
|
12305
12201
|
function NotificationModal({ isOpen, onClose, notification, titleText, openLinkText, closeText }) {
|
|
12306
12202
|
const t = useTranslations9("Common");
|
|
12307
12203
|
if (!notification) return null;
|
|
@@ -12322,7 +12218,7 @@ function NotificationModal({ isOpen, onClose, notification, titleText, openLinkT
|
|
|
12322
12218
|
onClose();
|
|
12323
12219
|
}
|
|
12324
12220
|
};
|
|
12325
|
-
return /* @__PURE__ */
|
|
12221
|
+
return /* @__PURE__ */ jsx49(
|
|
12326
12222
|
Modal_default,
|
|
12327
12223
|
{
|
|
12328
12224
|
isOpen,
|
|
@@ -12331,15 +12227,15 @@ function NotificationModal({ isOpen, onClose, notification, titleText, openLinkT
|
|
|
12331
12227
|
size: "md",
|
|
12332
12228
|
children: /* @__PURE__ */ jsxs43("div", { className: "space-y-4", children: [
|
|
12333
12229
|
/* @__PURE__ */ jsxs43("div", { className: "flex items-center gap-2 pb-2 border-b border-border", children: [
|
|
12334
|
-
/* @__PURE__ */
|
|
12230
|
+
/* @__PURE__ */ jsx49("div", { className: cn(
|
|
12335
12231
|
"w-2 h-2 rounded-full",
|
|
12336
12232
|
!notification.is_read ? "bg-primary" : "bg-border"
|
|
12337
12233
|
) }),
|
|
12338
|
-
/* @__PURE__ */
|
|
12234
|
+
/* @__PURE__ */ jsx49("span", { className: "text-xs text-muted-foreground", children: !notification.is_read ? t("newNotification") : t("readStatus") })
|
|
12339
12235
|
] }),
|
|
12340
|
-
notification.title && /* @__PURE__ */
|
|
12341
|
-
notification.body && /* @__PURE__ */
|
|
12342
|
-
/* @__PURE__ */
|
|
12236
|
+
notification.title && /* @__PURE__ */ jsx49("h3", { className: "text-lg font-semibold text-foreground", children: notification.title }),
|
|
12237
|
+
notification.body && /* @__PURE__ */ jsx49("div", { className: "text-sm text-muted-foreground whitespace-pre-wrap leading-relaxed", children: notification.body }),
|
|
12238
|
+
/* @__PURE__ */ jsx49("div", { className: "text-xs text-muted-foreground border-t border-border pt-2", children: formatTime3(notification.created_at) }),
|
|
12343
12239
|
/* @__PURE__ */ jsxs43("div", { className: "flex gap-2 justify-end pt-2", children: [
|
|
12344
12240
|
hasLink && /* @__PURE__ */ jsxs43(
|
|
12345
12241
|
Button_default,
|
|
@@ -12349,12 +12245,12 @@ function NotificationModal({ isOpen, onClose, notification, titleText, openLinkT
|
|
|
12349
12245
|
onClick: handleLinkClick,
|
|
12350
12246
|
className: "gap-2",
|
|
12351
12247
|
children: [
|
|
12352
|
-
/* @__PURE__ */
|
|
12248
|
+
/* @__PURE__ */ jsx49(ExternalLink, { className: "w-4 h-4" }),
|
|
12353
12249
|
openLinkText || t("openLink")
|
|
12354
12250
|
]
|
|
12355
12251
|
}
|
|
12356
12252
|
),
|
|
12357
|
-
/* @__PURE__ */
|
|
12253
|
+
/* @__PURE__ */ jsx49(
|
|
12358
12254
|
Button_default,
|
|
12359
12255
|
{
|
|
12360
12256
|
variant: "ghost",
|
|
@@ -12374,9 +12270,159 @@ var NotificationModal_default = NotificationModal;
|
|
|
12374
12270
|
import Link2 from "next/link";
|
|
12375
12271
|
import { usePathname } from "next/navigation";
|
|
12376
12272
|
import { Phone } from "lucide-react";
|
|
12377
|
-
|
|
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";
|
|
12378
12424
|
function MessengerIcon(props) {
|
|
12379
|
-
return /* @__PURE__ */
|
|
12425
|
+
return /* @__PURE__ */ jsx50("svg", { viewBox: "0 0 24 24", width: 24, height: 24, "aria-hidden": "true", ...props, children: /* @__PURE__ */ jsx50(
|
|
12380
12426
|
"path",
|
|
12381
12427
|
{
|
|
12382
12428
|
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",
|
|
@@ -12385,16 +12431,10 @@ function MessengerIcon(props) {
|
|
|
12385
12431
|
) });
|
|
12386
12432
|
}
|
|
12387
12433
|
function ZaloIcon(props) {
|
|
12388
|
-
return /* @__PURE__ */
|
|
12389
|
-
"path",
|
|
12390
|
-
{
|
|
12391
|
-
fill: "white",
|
|
12392
|
-
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"
|
|
12393
|
-
}
|
|
12394
|
-
) });
|
|
12434
|
+
return /* @__PURE__ */ jsx50(SiZalo, { size: 20, ...props });
|
|
12395
12435
|
}
|
|
12396
12436
|
function InstagramIcon(props) {
|
|
12397
|
-
return /* @__PURE__ */
|
|
12437
|
+
return /* @__PURE__ */ jsx50(FaInstagram, { size: 20, ...props });
|
|
12398
12438
|
}
|
|
12399
12439
|
function FloatingContacts({ className }) {
|
|
12400
12440
|
const pathname = usePathname();
|
|
@@ -12430,7 +12470,7 @@ function FloatingContacts({ className }) {
|
|
|
12430
12470
|
}
|
|
12431
12471
|
];
|
|
12432
12472
|
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: [
|
|
12433
|
-
/* @__PURE__ */
|
|
12473
|
+
/* @__PURE__ */ jsx50(
|
|
12434
12474
|
Link2,
|
|
12435
12475
|
{
|
|
12436
12476
|
href: `tel:${hotline.replace(/\D/g, "")}`,
|
|
@@ -12441,10 +12481,10 @@ function FloatingContacts({ className }) {
|
|
|
12441
12481
|
"hover:scale-105 active:scale-95 transition-transform",
|
|
12442
12482
|
"bg-[#22c55e]"
|
|
12443
12483
|
),
|
|
12444
|
-
children: /* @__PURE__ */
|
|
12484
|
+
children: /* @__PURE__ */ jsx50(Phone, { className: "w-6 h-6" })
|
|
12445
12485
|
}
|
|
12446
12486
|
),
|
|
12447
|
-
moreItems.map(({ key, href, label, bg, Icon, external }) => /* @__PURE__ */
|
|
12487
|
+
moreItems.map(({ key, href, label, bg, Icon, external }) => /* @__PURE__ */ jsx50(
|
|
12448
12488
|
Link2,
|
|
12449
12489
|
{
|
|
12450
12490
|
href,
|
|
@@ -12456,7 +12496,7 @@ function FloatingContacts({ className }) {
|
|
|
12456
12496
|
"hover:scale-105 active:scale-95 transition-transform",
|
|
12457
12497
|
bg
|
|
12458
12498
|
),
|
|
12459
|
-
children: /* @__PURE__ */
|
|
12499
|
+
children: /* @__PURE__ */ jsx50(Icon, { className: "w-6 h-6" })
|
|
12460
12500
|
},
|
|
12461
12501
|
key
|
|
12462
12502
|
))
|
|
@@ -12465,7 +12505,7 @@ function FloatingContacts({ className }) {
|
|
|
12465
12505
|
|
|
12466
12506
|
// ../../components/ui/AccessDenied.tsx
|
|
12467
12507
|
import { Lock, ShieldAlert, Ban } from "lucide-react";
|
|
12468
|
-
import { jsx as
|
|
12508
|
+
import { jsx as jsx51, jsxs as jsxs45 } from "react/jsx-runtime";
|
|
12469
12509
|
var VARIANT_STYLES = {
|
|
12470
12510
|
destructive: { bg: "bg-destructive/5", border: "border-destructive/20", text: "text-destructive" },
|
|
12471
12511
|
warning: { bg: "bg-warning/5", border: "border-warning/20", text: "text-warning" },
|
|
@@ -12486,13 +12526,13 @@ function AccessDenied({
|
|
|
12486
12526
|
}) {
|
|
12487
12527
|
const styles = VARIANT_STYLES[variant];
|
|
12488
12528
|
const UsedIcon = Icon || DEFAULT_ICONS[variant];
|
|
12489
|
-
return /* @__PURE__ */
|
|
12490
|
-
/* @__PURE__ */
|
|
12529
|
+
return /* @__PURE__ */ jsx51(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: [
|
|
12530
|
+
/* @__PURE__ */ jsx51("div", { className: cn("p-3 rounded-lg", styles.bg.replace("/5", "/10")), children: /* @__PURE__ */ jsx51(UsedIcon, { className: cn("w-8 h-8", styles.text) }) }),
|
|
12491
12531
|
/* @__PURE__ */ jsxs45("div", { children: [
|
|
12492
|
-
/* @__PURE__ */
|
|
12493
|
-
/* @__PURE__ */
|
|
12532
|
+
/* @__PURE__ */ jsx51("h3", { className: cn("font-semibold mb-2", styles.text), children: title }),
|
|
12533
|
+
/* @__PURE__ */ jsx51("p", { className: cn(styles.text.replace("text-", "text-") + "/80", "text-sm"), children: description })
|
|
12494
12534
|
] }),
|
|
12495
|
-
children && /* @__PURE__ */
|
|
12535
|
+
children && /* @__PURE__ */ jsx51("div", { className: "mt-2 flex flex-wrap gap-2 justify-center", children })
|
|
12496
12536
|
] }) });
|
|
12497
12537
|
}
|
|
12498
12538
|
|
|
@@ -12500,7 +12540,7 @@ function AccessDenied({
|
|
|
12500
12540
|
import { Moon, Sun, Monitor } from "lucide-react";
|
|
12501
12541
|
import { useEffect as useEffect20, useRef as useRef12, useState as useState32 } from "react";
|
|
12502
12542
|
import { createPortal as createPortal10 } from "react-dom";
|
|
12503
|
-
import { Fragment as Fragment18, jsx as
|
|
12543
|
+
import { Fragment as Fragment18, jsx as jsx52, jsxs as jsxs46 } from "react/jsx-runtime";
|
|
12504
12544
|
function ThemeToggleHeadless({
|
|
12505
12545
|
theme,
|
|
12506
12546
|
onChange,
|
|
@@ -12530,7 +12570,7 @@ function ThemeToggleHeadless({
|
|
|
12530
12570
|
return { top, left, width };
|
|
12531
12571
|
};
|
|
12532
12572
|
return /* @__PURE__ */ jsxs46("div", { className: cn("relative", className), children: [
|
|
12533
|
-
/* @__PURE__ */
|
|
12573
|
+
/* @__PURE__ */ jsx52(
|
|
12534
12574
|
Button_default,
|
|
12535
12575
|
{
|
|
12536
12576
|
variant: "ghost",
|
|
@@ -12548,13 +12588,13 @@ function ThemeToggleHeadless({
|
|
|
12548
12588
|
"aria-haspopup": "menu",
|
|
12549
12589
|
"aria-expanded": isOpen,
|
|
12550
12590
|
"aria-label": labels?.heading ?? "Theme",
|
|
12551
|
-
children: /* @__PURE__ */
|
|
12591
|
+
children: /* @__PURE__ */ jsx52(CurrentIcon, { className: "h-5 w-5" })
|
|
12552
12592
|
}
|
|
12553
12593
|
),
|
|
12554
12594
|
isOpen && /* @__PURE__ */ jsxs46(Fragment18, { children: [
|
|
12555
|
-
typeof window !== "undefined" && createPortal10(/* @__PURE__ */
|
|
12595
|
+
typeof window !== "undefined" && createPortal10(/* @__PURE__ */ jsx52("div", { className: "fixed inset-0 z-[9998]", onClick: () => setIsOpen(false) }), document.body),
|
|
12556
12596
|
typeof window !== "undefined" && dropdownPosition && createPortal10(
|
|
12557
|
-
/* @__PURE__ */
|
|
12597
|
+
/* @__PURE__ */ jsx52(
|
|
12558
12598
|
"div",
|
|
12559
12599
|
{
|
|
12560
12600
|
className: "z-[9999] bg-card border border-border rounded-lg shadow-lg overflow-hidden",
|
|
@@ -12562,7 +12602,7 @@ function ThemeToggleHeadless({
|
|
|
12562
12602
|
onMouseDown: (e) => e.stopPropagation(),
|
|
12563
12603
|
role: "menu",
|
|
12564
12604
|
children: /* @__PURE__ */ jsxs46("div", { className: "p-2", children: [
|
|
12565
|
-
/* @__PURE__ */
|
|
12605
|
+
/* @__PURE__ */ jsx52("div", { className: "px-3 py-2 text-sm font-medium text-muted-foreground border-b border-border mb-2", children: labels?.heading ?? "Theme" }),
|
|
12566
12606
|
themes.map((opt) => {
|
|
12567
12607
|
const Icon = opt.icon;
|
|
12568
12608
|
const active = theme === opt.value;
|
|
@@ -12582,9 +12622,9 @@ function ThemeToggleHeadless({
|
|
|
12582
12622
|
role: "menuitemradio",
|
|
12583
12623
|
"aria-checked": active,
|
|
12584
12624
|
children: [
|
|
12585
|
-
/* @__PURE__ */
|
|
12586
|
-
/* @__PURE__ */
|
|
12587
|
-
active && /* @__PURE__ */
|
|
12625
|
+
/* @__PURE__ */ jsx52(Icon, { className: "h-4 w-4" }),
|
|
12626
|
+
/* @__PURE__ */ jsx52("span", { className: "flex-1 text-left", children: opt.label }),
|
|
12627
|
+
active && /* @__PURE__ */ jsx52("div", { className: "w-2 h-2 rounded-full bg-primary" })
|
|
12588
12628
|
]
|
|
12589
12629
|
},
|
|
12590
12630
|
opt.value
|
|
@@ -12603,7 +12643,7 @@ function ThemeToggleHeadless({
|
|
|
12603
12643
|
import { useRef as useRef13, useState as useState33 } from "react";
|
|
12604
12644
|
import { createPortal as createPortal11 } from "react-dom";
|
|
12605
12645
|
import { Globe } from "lucide-react";
|
|
12606
|
-
import { Fragment as Fragment19, jsx as
|
|
12646
|
+
import { Fragment as Fragment19, jsx as jsx53, jsxs as jsxs47 } from "react/jsx-runtime";
|
|
12607
12647
|
function LanguageSwitcherHeadless({
|
|
12608
12648
|
locales,
|
|
12609
12649
|
currentLocale,
|
|
@@ -12626,7 +12666,7 @@ function LanguageSwitcherHeadless({
|
|
|
12626
12666
|
return { top, left, width };
|
|
12627
12667
|
};
|
|
12628
12668
|
return /* @__PURE__ */ jsxs47("div", { className: cn("relative", className), children: [
|
|
12629
|
-
/* @__PURE__ */
|
|
12669
|
+
/* @__PURE__ */ jsx53(
|
|
12630
12670
|
Button_default,
|
|
12631
12671
|
{
|
|
12632
12672
|
variant: "ghost",
|
|
@@ -12645,13 +12685,13 @@ function LanguageSwitcherHeadless({
|
|
|
12645
12685
|
"aria-expanded": isOpen,
|
|
12646
12686
|
"aria-label": labels?.heading ?? "Language",
|
|
12647
12687
|
title: labels?.heading ?? "Language",
|
|
12648
|
-
children: /* @__PURE__ */
|
|
12688
|
+
children: /* @__PURE__ */ jsx53(Globe, { className: "h-5 w-5" })
|
|
12649
12689
|
}
|
|
12650
12690
|
),
|
|
12651
12691
|
isOpen && /* @__PURE__ */ jsxs47(Fragment19, { children: [
|
|
12652
|
-
typeof window !== "undefined" && createPortal11(/* @__PURE__ */
|
|
12692
|
+
typeof window !== "undefined" && createPortal11(/* @__PURE__ */ jsx53("div", { className: "fixed inset-0 z-[9998]", onClick: () => setIsOpen(false) }), document.body),
|
|
12653
12693
|
typeof window !== "undefined" && dropdownPosition && createPortal11(
|
|
12654
|
-
/* @__PURE__ */
|
|
12694
|
+
/* @__PURE__ */ jsx53(
|
|
12655
12695
|
"div",
|
|
12656
12696
|
{
|
|
12657
12697
|
className: "z-[9999] bg-card border border-border rounded-lg shadow-lg overflow-hidden",
|
|
@@ -12659,7 +12699,7 @@ function LanguageSwitcherHeadless({
|
|
|
12659
12699
|
onMouseDown: (e) => e.stopPropagation(),
|
|
12660
12700
|
role: "menu",
|
|
12661
12701
|
children: /* @__PURE__ */ jsxs47("div", { className: "p-2", children: [
|
|
12662
|
-
/* @__PURE__ */
|
|
12702
|
+
/* @__PURE__ */ jsx53("div", { className: "px-3 py-2 text-sm font-medium text-muted-foreground border-b border-border mb-2", children: labels?.heading ?? "Language" }),
|
|
12663
12703
|
locales.map((language) => /* @__PURE__ */ jsxs47(
|
|
12664
12704
|
Button_default,
|
|
12665
12705
|
{
|
|
@@ -12673,9 +12713,9 @@ function LanguageSwitcherHeadless({
|
|
|
12673
12713
|
role: "menuitemradio",
|
|
12674
12714
|
"aria-checked": currentLocale === language.code,
|
|
12675
12715
|
children: [
|
|
12676
|
-
language.flag && /* @__PURE__ */
|
|
12677
|
-
/* @__PURE__ */
|
|
12678
|
-
currentLocale === language.code && /* @__PURE__ */
|
|
12716
|
+
language.flag && /* @__PURE__ */ jsx53("span", { className: "text-lg", children: language.flag }),
|
|
12717
|
+
/* @__PURE__ */ jsx53("span", { className: "flex-1 text-left", children: language.name }),
|
|
12718
|
+
currentLocale === language.code && /* @__PURE__ */ jsx53("div", { className: "w-2 h-2 rounded-full bg-primary" })
|
|
12679
12719
|
]
|
|
12680
12720
|
},
|
|
12681
12721
|
language.code
|