@underverse-ui/underverse 0.2.13 → 0.2.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -2687,90 +2687,216 @@ var import_react_dom3 = require("react-dom");
2687
2687
 
2688
2688
  // ../../lib/utils/shadcn-animations.ts
2689
2689
  var shadcnAnimationStyles = `
2690
+ /* ============================================
2691
+ * DROPDOWN / POPOVER ANIMATIONS
2692
+ * Uses spring-like cubic-bezier for natural feel
2693
+ * ============================================ */
2694
+
2695
+ [data-state="open"][data-combobox-dropdown] {
2696
+ animation: comboboxOpen 280ms cubic-bezier(0.34, 1.56, 0.64, 1);
2697
+ transform-origin: top center;
2698
+ }
2699
+
2700
+ [data-state="closed"][data-combobox-dropdown] {
2701
+ animation: comboboxClose 200ms cubic-bezier(0.4, 0, 0.2, 1);
2702
+ transform-origin: top center;
2703
+ }
2704
+
2705
+ @keyframes comboboxOpen {
2706
+ 0% {
2707
+ opacity: 0;
2708
+ transform: translateY(-8px) scale(0.96);
2709
+ }
2710
+ 50% {
2711
+ opacity: 0.8;
2712
+ transform: translateY(2px) scale(1.01);
2713
+ }
2714
+ 100% {
2715
+ opacity: 1;
2716
+ transform: translateY(0) scale(1);
2717
+ }
2718
+ }
2719
+
2720
+ @keyframes comboboxClose {
2721
+ 0% {
2722
+ opacity: 1;
2723
+ transform: translateY(0) scale(1);
2724
+ }
2725
+ 100% {
2726
+ opacity: 0;
2727
+ transform: translateY(-6px) scale(0.97);
2728
+ }
2729
+ }
2730
+
2731
+ /* Generic dropdown open/close */
2690
2732
  [data-state="open"] {
2691
- animation: slideDownAndFade 200ms cubic-bezier(0.16, 1, 0.3, 1);
2733
+ animation: slideDownAndFade 220ms cubic-bezier(0.16, 1, 0.3, 1);
2692
2734
  }
2693
2735
 
2694
2736
  [data-state="closed"] {
2695
- animation: slideUpAndFade 150ms cubic-bezier(0.16, 1, 0.3, 1);
2737
+ animation: slideUpAndFade 180ms cubic-bezier(0.4, 0, 0.2, 1);
2696
2738
  }
2697
2739
 
2698
2740
  @keyframes slideDownAndFade {
2699
2741
  from {
2700
2742
  opacity: 0;
2701
- transform: translateY(-2px);
2743
+ transform: translateY(-4px) scale(0.98);
2702
2744
  }
2703
2745
  to {
2704
2746
  opacity: 1;
2705
- transform: translateY(0);
2747
+ transform: translateY(0) scale(1);
2706
2748
  }
2707
2749
  }
2708
2750
 
2709
2751
  @keyframes slideUpAndFade {
2710
2752
  from {
2711
2753
  opacity: 1;
2712
- transform: translateY(0);
2754
+ transform: translateY(0) scale(1);
2713
2755
  }
2714
2756
  to {
2715
2757
  opacity: 0;
2716
- transform: translateY(-2px);
2758
+ transform: translateY(-4px) scale(0.98);
2717
2759
  }
2718
2760
  }
2719
2761
 
2762
+ /* ============================================
2763
+ * DROPDOWN ITEMS - Staggered cascade effect
2764
+ * ============================================ */
2765
+
2720
2766
  .dropdown-item {
2721
2767
  opacity: 0;
2722
- animation: fadeInUp 200ms ease-out forwards;
2768
+ animation: itemSlideIn 200ms cubic-bezier(0.22, 1, 0.36, 1) forwards;
2769
+ will-change: opacity, transform;
2723
2770
  }
2724
2771
 
2725
- @keyframes fadeInUp {
2726
- from {
2772
+ @keyframes itemSlideIn {
2773
+ 0% {
2727
2774
  opacity: 0;
2728
- transform: translateY(4px);
2775
+ transform: translateX(-8px);
2729
2776
  }
2730
- to {
2777
+ 60% {
2778
+ opacity: 0.9;
2779
+ transform: translateX(2px);
2780
+ }
2781
+ 100% {
2731
2782
  opacity: 1;
2732
- transform: translateY(0);
2783
+ transform: translateX(0);
2733
2784
  }
2734
2785
  }
2735
2786
 
2736
- /* Tooltip specific animations */
2787
+ /* Hover effect for items */
2788
+ .dropdown-item {
2789
+ transition: background-color 150ms ease, transform 100ms ease;
2790
+ }
2791
+
2792
+ .dropdown-item:hover {
2793
+ transform: translateX(2px);
2794
+ }
2795
+
2796
+ .dropdown-item:active {
2797
+ transform: scale(0.98);
2798
+ }
2799
+
2800
+ /* ============================================
2801
+ * TOOLTIP / SIDE ANIMATIONS
2802
+ * ============================================ */
2803
+
2737
2804
  [data-side="top"] {
2738
- animation: slideDownAndFade 200ms cubic-bezier(0.16, 1, 0.3, 1);
2805
+ animation: slideFromBottom 200ms cubic-bezier(0.16, 1, 0.3, 1);
2739
2806
  }
2740
2807
 
2741
2808
  [data-side="bottom"] {
2742
- animation: slideUpAndFade 200ms cubic-bezier(0.16, 1, 0.3, 1);
2809
+ animation: slideFromTop 200ms cubic-bezier(0.16, 1, 0.3, 1);
2743
2810
  }
2744
2811
 
2745
2812
  [data-side="left"] {
2746
- animation: slideRightAndFade 200ms cubic-bezier(0.16, 1, 0.3, 1);
2813
+ animation: slideFromRight 200ms cubic-bezier(0.16, 1, 0.3, 1);
2747
2814
  }
2748
2815
 
2749
2816
  [data-side="right"] {
2750
- animation: slideLeftAndFade 200ms cubic-bezier(0.16, 1, 0.3, 1);
2817
+ animation: slideFromLeft 200ms cubic-bezier(0.16, 1, 0.3, 1);
2751
2818
  }
2752
2819
 
2753
- @keyframes slideLeftAndFade {
2820
+ @keyframes slideFromTop {
2754
2821
  from {
2755
2822
  opacity: 0;
2756
- transform: translateX(2px);
2823
+ transform: translateY(-6px) scale(0.96);
2757
2824
  }
2758
2825
  to {
2759
2826
  opacity: 1;
2760
- transform: translateX(0);
2827
+ transform: translateY(0) scale(1);
2761
2828
  }
2762
2829
  }
2763
2830
 
2764
- @keyframes slideRightAndFade {
2831
+ @keyframes slideFromBottom {
2765
2832
  from {
2766
2833
  opacity: 0;
2767
- transform: translateX(-2px);
2834
+ transform: translateY(6px) scale(0.96);
2768
2835
  }
2769
2836
  to {
2770
2837
  opacity: 1;
2771
- transform: translateX(0);
2838
+ transform: translateY(0) scale(1);
2839
+ }
2840
+ }
2841
+
2842
+ @keyframes slideFromLeft {
2843
+ from {
2844
+ opacity: 0;
2845
+ transform: translateX(-6px) scale(0.96);
2846
+ }
2847
+ to {
2848
+ opacity: 1;
2849
+ transform: translateX(0) scale(1);
2850
+ }
2851
+ }
2852
+
2853
+ @keyframes slideFromRight {
2854
+ from {
2855
+ opacity: 0;
2856
+ transform: translateX(6px) scale(0.96);
2857
+ }
2858
+ to {
2859
+ opacity: 1;
2860
+ transform: translateX(0) scale(1);
2861
+ }
2862
+ }
2863
+
2864
+ /* ============================================
2865
+ * UTILITY ANIMATIONS
2866
+ * ============================================ */
2867
+
2868
+ .animate-bounce-subtle {
2869
+ animation: bounceSubtle 600ms cubic-bezier(0.34, 1.56, 0.64, 1);
2870
+ }
2871
+
2872
+ @keyframes bounceSubtle {
2873
+ 0%, 100% {
2874
+ transform: translateY(0);
2875
+ }
2876
+ 50% {
2877
+ transform: translateY(-4px);
2772
2878
  }
2773
2879
  }
2880
+
2881
+ .animate-scale-in {
2882
+ animation: scaleIn 200ms cubic-bezier(0.34, 1.56, 0.64, 1);
2883
+ }
2884
+
2885
+ @keyframes scaleIn {
2886
+ from {
2887
+ opacity: 0;
2888
+ transform: scale(0.9);
2889
+ }
2890
+ to {
2891
+ opacity: 1;
2892
+ transform: scale(1);
2893
+ }
2894
+ }
2895
+
2896
+ /* Smooth backdrop blur transition */
2897
+ .backdrop-animate {
2898
+ transition: backdrop-filter 200ms ease, background-color 200ms ease;
2899
+ }
2774
2900
  `;
2775
2901
  var useShadCNAnimations = () => {
2776
2902
  if (typeof document !== "undefined") {
@@ -3166,25 +3292,7 @@ var SidebarSheet = ({ navigation, children, ...props }) => {
3166
3292
 
3167
3293
  // ../../components/ui/Alert.tsx
3168
3294
  var import_react8 = require("react");
3169
-
3170
- // ../../components/icons/AlertIcons.tsx
3171
3295
  var import_lucide_react8 = require("lucide-react");
3172
- var import_jsx_runtime18 = require("react/jsx-runtime");
3173
- function InfoIcon(props) {
3174
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react8.Info, { "aria-hidden": true, className: props.className });
3175
- }
3176
- function WarningIcon(props) {
3177
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react8.AlertTriangle, { "aria-hidden": true, className: props.className });
3178
- }
3179
- function CheckCircleIcon(props) {
3180
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react8.CheckCircle2, { "aria-hidden": true, className: props.className });
3181
- }
3182
- function ErrorIcon(props) {
3183
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react8.OctagonX, { "aria-hidden": true, className: props.className });
3184
- }
3185
-
3186
- // ../../components/ui/Alert.tsx
3187
- var import_lucide_react9 = require("lucide-react");
3188
3296
  var import_next_intl2 = require("next-intl");
3189
3297
 
3190
3298
  // ../../lib/constants/constants-ui/alert.ts
@@ -3198,13 +3306,13 @@ var VARIANT_STYLES_ALERT = {
3198
3306
  };
3199
3307
 
3200
3308
  // ../../components/ui/Alert.tsx
3201
- var import_jsx_runtime19 = require("react/jsx-runtime");
3309
+ var import_jsx_runtime18 = require("react/jsx-runtime");
3202
3310
  var variantIcons = {
3203
- default: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(InfoIcon, { className: "h-4 w-4 text-muted-foreground" }),
3204
- info: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(InfoIcon, { className: "h-4 w-4 text-info" }),
3205
- success: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(CheckCircleIcon, { className: "h-4 w-4 text-success" }),
3206
- warning: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(WarningIcon, { className: "h-4 w-4 text-warning" }),
3207
- error: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(ErrorIcon, { className: "h-4 w-4 text-destructive" })
3311
+ default: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react8.Info, { className: "h-4 w-4 text-muted-foreground" }),
3312
+ info: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react8.Info, { className: "h-4 w-4 text-info" }),
3313
+ success: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react8.CheckCircle, { className: "h-4 w-4 text-success" }),
3314
+ warning: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react8.AlertTriangle, { className: "h-4 w-4 text-warning" }),
3315
+ error: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react8.XCircle, { className: "h-4 w-4 text-destructive" })
3208
3316
  };
3209
3317
  var Alert = ({ title, description, variant = "default", className, icon, dismissible = false, onClose, actions, closeAriaLabel }) => {
3210
3318
  const [open, setOpen] = (0, import_react8.useState)(true);
@@ -3214,26 +3322,26 @@ var Alert = ({ title, description, variant = "default", className, icon, dismiss
3214
3322
  setOpen(false);
3215
3323
  onClose?.();
3216
3324
  };
3217
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
3325
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
3218
3326
  "div",
3219
3327
  {
3220
3328
  className: cn("w-full p-4 rounded-md flex items-start gap-3", VARIANT_STYLES_ALERT[variant], className),
3221
3329
  role: "alert",
3222
3330
  "aria-live": variant === "error" ? "assertive" : "polite",
3223
3331
  children: [
3224
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "pt-1", children: icon ?? variantIcons[variant] }),
3225
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "flex-1 min-w-0", children: [
3226
- title && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "font-semibold text-sm leading-none mb-1 text-foreground", children: title }),
3227
- description && (typeof description === "string" ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "text-sm text-muted-foreground leading-relaxed break-words", children: description }) : /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "text-sm text-muted-foreground leading-relaxed break-words", children: description })),
3228
- actions && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "mt-2 flex flex-wrap gap-2", children: actions })
3332
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "pt-1", children: icon ?? variantIcons[variant] }),
3333
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "flex-1 min-w-0", children: [
3334
+ title && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("p", { className: "font-semibold text-sm leading-none mb-1 text-foreground", children: title }),
3335
+ description && (typeof description === "string" ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("p", { className: "text-sm text-muted-foreground leading-relaxed break-words", children: description }) : /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "text-sm text-muted-foreground leading-relaxed break-words", children: description })),
3336
+ actions && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "mt-2 flex flex-wrap gap-2", children: actions })
3229
3337
  ] }),
3230
- dismissible && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
3338
+ dismissible && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
3231
3339
  "button",
3232
3340
  {
3233
3341
  onClick: handleClose,
3234
3342
  className: "rounded-md p-1 hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
3235
3343
  "aria-label": closeAriaLabel || t("closeAlert"),
3236
- children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react9.X, { className: "h-4 w-4" })
3344
+ children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_lucide_react8.X, { className: "h-4 w-4" })
3237
3345
  }
3238
3346
  )
3239
3347
  ]
@@ -3244,7 +3352,7 @@ var Alert_default = Alert;
3244
3352
 
3245
3353
  // ../../components/ui/GlobalLoading.tsx
3246
3354
  var import_react9 = __toESM(require("react"), 1);
3247
- var import_lucide_react10 = require("lucide-react");
3355
+ var import_lucide_react9 = require("lucide-react");
3248
3356
 
3249
3357
  // ../../lib/utils/loading.ts
3250
3358
  var LoadingManager = class {
@@ -3289,7 +3397,7 @@ var loading = new LoadingManager();
3289
3397
 
3290
3398
  // ../../components/ui/GlobalLoading.tsx
3291
3399
  var import_next_intl3 = require("next-intl");
3292
- var import_jsx_runtime20 = require("react/jsx-runtime");
3400
+ var import_jsx_runtime19 = require("react/jsx-runtime");
3293
3401
  var GlobalLoading = ({
3294
3402
  className,
3295
3403
  backdrop = true,
@@ -3302,7 +3410,7 @@ var GlobalLoading = ({
3302
3410
  return unsubscribe;
3303
3411
  }, []);
3304
3412
  if (!state.isVisible) return null;
3305
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
3413
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
3306
3414
  "div",
3307
3415
  {
3308
3416
  className: cn(
@@ -3314,9 +3422,9 @@ var GlobalLoading = ({
3314
3422
  role: "dialog",
3315
3423
  "aria-modal": true,
3316
3424
  "aria-label": "Loading",
3317
- children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("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: [
3318
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react10.Activity, { className: "w-6 h-6 animate-spin text-primary-background", "aria-hidden": true }),
3319
- state.text && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "text-base font-medium text-foreground", children: state.text })
3425
+ children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("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: [
3426
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react9.Activity, { className: "w-6 h-6 animate-spin text-primary-background", "aria-hidden": true }),
3427
+ state.text && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "text-base font-medium text-foreground", children: state.text })
3320
3428
  ] })
3321
3429
  }
3322
3430
  );
@@ -3327,14 +3435,14 @@ var PageLoading = ({
3327
3435
  }) => {
3328
3436
  const t = (0, import_next_intl3.useTranslations)("Loading");
3329
3437
  const defaultMessage = message || t("loadingPage");
3330
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: cn(
3438
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: cn(
3331
3439
  "min-h-screen flex items-center justify-center bg-background",
3332
3440
  className
3333
- ), children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "text-center space-y-4", children: [
3334
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react10.Activity, { className: "w-8 h-8 animate-spin text-primary mx-auto" }),
3335
- /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { children: [
3336
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { className: "text-lg font-medium text-foreground", children: defaultMessage }),
3337
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { className: "text-sm text-muted-foreground mt-2", children: t("pleaseWait") })
3441
+ ), children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "text-center space-y-4", children: [
3442
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react9.Activity, { className: "w-8 h-8 animate-spin text-primary mx-auto" }),
3443
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { children: [
3444
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "text-lg font-medium text-foreground", children: defaultMessage }),
3445
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "text-sm text-muted-foreground mt-2", children: t("pleaseWait") })
3338
3446
  ] })
3339
3447
  ] }) });
3340
3448
  };
@@ -3350,9 +3458,9 @@ var InlineLoading = ({
3350
3458
  md: "w-6 h-6",
3351
3459
  lg: "w-8 h-8"
3352
3460
  };
3353
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: cn("flex items-center justify-center space-x-2", className), children: [
3354
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react10.Activity, { className: cn("animate-spin text-primary", sizeClasses2[size]) }),
3355
- text && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "text-sm text-muted-foreground animate-pulse", children: text })
3461
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: cn("flex items-center justify-center space-x-2", className), children: [
3462
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react9.Activity, { className: cn("animate-spin text-primary", sizeClasses2[size]) }),
3463
+ text && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "text-sm text-muted-foreground animate-pulse", children: text })
3356
3464
  ] });
3357
3465
  };
3358
3466
  var ButtonLoading = ({
@@ -3366,7 +3474,7 @@ var ButtonLoading = ({
3366
3474
  disabled: (children.props?.disabled ?? false) || disabled || isLoading,
3367
3475
  "aria-busy": isLoading || void 0
3368
3476
  }) : children;
3369
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
3477
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
3370
3478
  "div",
3371
3479
  {
3372
3480
  className: cn(
@@ -3375,11 +3483,11 @@ var ButtonLoading = ({
3375
3483
  className
3376
3484
  ),
3377
3485
  children: [
3378
- isLoading && /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "absolute inset-0 flex items-center justify-center pointer-events-none", children: [
3379
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react10.Activity, { className: "w-4 h-4 animate-spin text-primary-foreground" }),
3380
- loadingText && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "ml-2 text-sm", children: loadingText })
3486
+ isLoading && /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "absolute inset-0 flex items-center justify-center pointer-events-none", children: [
3487
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_lucide_react9.Activity, { className: "w-4 h-4 animate-spin text-primary-foreground" }),
3488
+ loadingText && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "ml-2 text-sm", children: loadingText })
3381
3489
  ] }),
3382
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: cn(isLoading && "opacity-50 pointer-events-none"), children: child })
3490
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: cn(isLoading && "opacity-50 pointer-events-none"), children: child })
3383
3491
  ]
3384
3492
  }
3385
3493
  );
@@ -3388,8 +3496,8 @@ var ButtonLoading = ({
3388
3496
  // ../../components/ui/Breadcrumb.tsx
3389
3497
  var React15 = __toESM(require("react"), 1);
3390
3498
  var import_link = __toESM(require("next/link"), 1);
3391
- var import_lucide_react11 = require("lucide-react");
3392
- var import_jsx_runtime21 = require("react/jsx-runtime");
3499
+ var import_lucide_react10 = require("lucide-react");
3500
+ var import_jsx_runtime20 = require("react/jsx-runtime");
3393
3501
  var sizeStyles5 = {
3394
3502
  sm: {
3395
3503
  text: "text-xs",
@@ -3420,7 +3528,7 @@ var variantStyles4 = {
3420
3528
  var Breadcrumb = ({
3421
3529
  items,
3422
3530
  className,
3423
- separator = import_lucide_react11.ChevronRight,
3531
+ separator = import_lucide_react10.ChevronRight,
3424
3532
  size = "md",
3425
3533
  variant = "default",
3426
3534
  maxItems = 5,
@@ -3436,16 +3544,16 @@ var Breadcrumb = ({
3436
3544
  }, [items.length, maxItems, collapsible]);
3437
3545
  const getSeparator = () => {
3438
3546
  if (typeof separator === "string") {
3439
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "text-muted-foreground", children: separator });
3547
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "text-muted-foreground", children: separator });
3440
3548
  }
3441
3549
  if (variant === "slash") {
3442
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "text-muted-foreground", children: "/" });
3550
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "text-muted-foreground", children: "/" });
3443
3551
  }
3444
3552
  if (variant === "arrow") {
3445
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "text-muted-foreground", children: "\u2192" });
3553
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "text-muted-foreground", children: "\u2192" });
3446
3554
  }
3447
3555
  const SeparatorComponent = separator;
3448
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SeparatorComponent, { className: cn("text-muted-foreground", sizeStyles5[size].icon) });
3556
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(SeparatorComponent, { className: cn("text-muted-foreground", sizeStyles5[size].icon) });
3449
3557
  };
3450
3558
  const processedItems = React15.useMemo(() => {
3451
3559
  let finalItems = [...items];
@@ -3453,7 +3561,7 @@ var Breadcrumb = ({
3453
3561
  finalItems.unshift({
3454
3562
  label: "Home",
3455
3563
  href: homeHref,
3456
- icon: import_lucide_react11.Home
3564
+ icon: import_lucide_react10.Home
3457
3565
  });
3458
3566
  }
3459
3567
  if (isCollapsed && finalItems.length > maxItems) {
@@ -3466,17 +3574,17 @@ var Breadcrumb = ({
3466
3574
  const handleCollapseToggle = () => {
3467
3575
  setIsCollapsed(!isCollapsed);
3468
3576
  };
3469
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
3577
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
3470
3578
  "nav",
3471
3579
  {
3472
3580
  className: cn("flex w-full items-center", sizeStyles5[size].text, className),
3473
3581
  "aria-label": "Breadcrumb navigation",
3474
- children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("ol", { className: cn("flex items-center", sizeStyles5[size].spacing), children: processedItems.map((item, index) => {
3582
+ children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("ol", { className: cn("flex items-center", sizeStyles5[size].spacing), children: processedItems.map((item, index) => {
3475
3583
  const isLast = index === processedItems.length - 1;
3476
3584
  const isCollapsedIndicator = item.label === "...";
3477
3585
  const Icon = item.icon;
3478
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("li", { className: "flex items-center", children: [
3479
- isCollapsedIndicator ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
3586
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("li", { className: "flex items-center", children: [
3587
+ isCollapsedIndicator ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
3480
3588
  "button",
3481
3589
  {
3482
3590
  onClick: handleCollapseToggle,
@@ -3487,9 +3595,9 @@ var Breadcrumb = ({
3487
3595
  "focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-1"
3488
3596
  ),
3489
3597
  "aria-label": "Show all breadcrumb items",
3490
- children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_lucide_react11.MoreHorizontal, { className: sizeStyles5[size].icon })
3598
+ children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react10.MoreHorizontal, { className: sizeStyles5[size].icon })
3491
3599
  }
3492
- ) : item.href && !isLast && !item.disabled ? /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
3600
+ ) : item.href && !isLast && !item.disabled ? /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
3493
3601
  import_link.default,
3494
3602
  {
3495
3603
  href: item.href,
@@ -3500,11 +3608,11 @@ var Breadcrumb = ({
3500
3608
  "focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-1 rounded-sm"
3501
3609
  ),
3502
3610
  children: [
3503
- Icon && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Icon, { className: sizeStyles5[size].icon }),
3504
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { children: item.label })
3611
+ Icon && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Icon, { className: sizeStyles5[size].icon }),
3612
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { children: item.label })
3505
3613
  ]
3506
3614
  }
3507
- ) : /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
3615
+ ) : /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
3508
3616
  "span",
3509
3617
  {
3510
3618
  className: cn(
@@ -3514,12 +3622,12 @@ var Breadcrumb = ({
3514
3622
  ),
3515
3623
  "aria-current": isLast ? "page" : void 0,
3516
3624
  children: [
3517
- Icon && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Icon, { className: sizeStyles5[size].icon }),
3518
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { children: item.label })
3625
+ Icon && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Icon, { className: sizeStyles5[size].icon }),
3626
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { children: item.label })
3519
3627
  ]
3520
3628
  }
3521
3629
  ),
3522
- !isLast && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
3630
+ !isLast && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
3523
3631
  "span",
3524
3632
  {
3525
3633
  className: cn("mx-1", sizeStyles5[size].spacing),
@@ -3537,7 +3645,7 @@ var Breadcrumb_default = Breadcrumb;
3537
3645
 
3538
3646
  // ../../components/ui/Tab.tsx
3539
3647
  var React16 = __toESM(require("react"), 1);
3540
- var import_jsx_runtime22 = require("react/jsx-runtime");
3648
+ var import_jsx_runtime21 = require("react/jsx-runtime");
3541
3649
  var sizeStyles6 = {
3542
3650
  sm: {
3543
3651
  tab: "py-1.5 px-3 text-xs",
@@ -3625,14 +3733,14 @@ var Tabs = ({
3625
3733
  className
3626
3734
  );
3627
3735
  const activeTab = tabs.find((tab) => tab.value === active);
3628
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: cn("w-full", orientation === "vertical" && "flex gap-6"), children: [
3629
- /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: containerClasses, role: "tablist", "aria-orientation": orientation, children: [
3736
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: cn("w-full", orientation === "vertical" && "flex gap-6"), children: [
3737
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: containerClasses, role: "tablist", "aria-orientation": orientation, children: [
3630
3738
  tabs.map((tab, index) => {
3631
3739
  const isActive = active === tab.value;
3632
3740
  const Icon = tab.icon;
3633
3741
  const tabId = `${baseId}-tab-${index}`;
3634
3742
  const panelId = `${baseId}-panel-${index}`;
3635
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
3743
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
3636
3744
  "button",
3637
3745
  {
3638
3746
  ref: (el) => {
@@ -3684,14 +3792,14 @@ var Tabs = ({
3684
3792
  }
3685
3793
  },
3686
3794
  children: [
3687
- Icon && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Icon, { className: "h-4 w-4" }),
3795
+ Icon && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Icon, { className: "h-4 w-4" }),
3688
3796
  tab.label
3689
3797
  ]
3690
3798
  },
3691
3799
  tab.value
3692
3800
  );
3693
3801
  }),
3694
- variant === "underline" && orientation === "horizontal" && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
3802
+ variant === "underline" && orientation === "horizontal" && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
3695
3803
  "div",
3696
3804
  {
3697
3805
  className: "absolute bottom-0 h-0.5 bg-primary transition-all duration-300 ease-out",
@@ -3699,7 +3807,7 @@ var Tabs = ({
3699
3807
  }
3700
3808
  )
3701
3809
  ] }),
3702
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
3810
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
3703
3811
  "div",
3704
3812
  {
3705
3813
  role: "tabpanel",
@@ -3717,7 +3825,7 @@ var Tabs = ({
3717
3825
  ] });
3718
3826
  };
3719
3827
  var SimpleTabs = ({ tabs, defaultValue, className }) => {
3720
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
3828
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
3721
3829
  Tabs,
3722
3830
  {
3723
3831
  tabs,
@@ -3729,7 +3837,7 @@ var SimpleTabs = ({ tabs, defaultValue, className }) => {
3729
3837
  );
3730
3838
  };
3731
3839
  var PillTabs = ({ contained = true, ...props }) => {
3732
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
3840
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
3733
3841
  Tabs,
3734
3842
  {
3735
3843
  ...props,
@@ -3743,7 +3851,7 @@ var VerticalTabs = ({
3743
3851
  className,
3744
3852
  ...props
3745
3853
  }) => {
3746
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: cn("flex gap-6", className), children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: cn(sidebarWidth, "flex-shrink-0"), children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
3854
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: cn("flex gap-6", className), children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: cn(sidebarWidth, "flex-shrink-0"), children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
3747
3855
  Tabs,
3748
3856
  {
3749
3857
  ...props,
@@ -3757,7 +3865,7 @@ var VerticalTabs = ({
3757
3865
  // ../../components/ui/DropdownMenu.tsx
3758
3866
  var import_react10 = __toESM(require("react"), 1);
3759
3867
  var import_react_dom5 = require("react-dom");
3760
- var import_jsx_runtime23 = require("react/jsx-runtime");
3868
+ var import_jsx_runtime22 = require("react/jsx-runtime");
3761
3869
  var DropdownMenu = ({
3762
3870
  trigger,
3763
3871
  children,
@@ -3879,28 +3987,24 @@ var DropdownMenu = ({
3879
3987
  setOpen(false);
3880
3988
  }
3881
3989
  };
3882
- const dropdownContent = open ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
3990
+ const dropdownContent = open ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
3883
3991
  "div",
3884
3992
  {
3885
3993
  "data-dropdown-menu": true,
3994
+ "data-combobox-dropdown": true,
3886
3995
  ref: contentRef,
3887
3996
  style: {
3888
3997
  position: "absolute",
3889
3998
  top: position?.top ?? -9999,
3890
3999
  left: position?.left ?? -9999,
3891
4000
  zIndex: 9999,
3892
- visibility: position ? "visible" : "hidden"
4001
+ visibility: position ? "visible" : "hidden",
4002
+ transformOrigin: "top center"
3893
4003
  },
3894
4004
  "data-state": open ? "open" : "closed",
3895
4005
  role: "menu",
3896
- className: cn(
3897
- "z-[9999] min-w-40",
3898
- // shadcn-like enter/exit animations
3899
- "data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
3900
- "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95",
3901
- className
3902
- ),
3903
- children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
4006
+ className: cn("z-9999 min-w-40", className),
4007
+ children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
3904
4008
  "div",
3905
4009
  {
3906
4010
  className: cn(
@@ -3910,7 +4014,7 @@ var DropdownMenu = ({
3910
4014
  ),
3911
4015
  children: items ? items.map((item, index) => {
3912
4016
  const IconComponent = item.icon;
3913
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
4017
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
3914
4018
  "button",
3915
4019
  {
3916
4020
  ref: (el) => {
@@ -3921,7 +4025,7 @@ var DropdownMenu = ({
3921
4025
  role: "menuitem",
3922
4026
  tabIndex: -1,
3923
4027
  style: {
3924
- animationDelay: open ? `${index * 25}ms` : "0ms"
4028
+ animationDelay: open ? `${Math.min(index * 20, 200)}ms` : "0ms"
3925
4029
  },
3926
4030
  className: cn(
3927
4031
  "dropdown-item flex w-full items-center gap-2 px-2.5 py-1.5 text-sm rounded-sm",
@@ -3932,7 +4036,7 @@ var DropdownMenu = ({
3932
4036
  item.destructive && "text-destructive hover:bg-destructive/10 focus:bg-destructive/10"
3933
4037
  ),
3934
4038
  children: [
3935
- IconComponent && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(IconComponent, { className: "h-4 w-4" }),
4039
+ IconComponent && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(IconComponent, { className: "h-4 w-4" }),
3936
4040
  item.label
3937
4041
  ]
3938
4042
  },
@@ -3943,7 +4047,7 @@ var DropdownMenu = ({
3943
4047
  )
3944
4048
  }
3945
4049
  ) : null;
3946
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_jsx_runtime23.Fragment, { children: [
4050
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_jsx_runtime22.Fragment, { children: [
3947
4051
  import_react10.default.cloneElement(trigger, {
3948
4052
  ref: triggerRef,
3949
4053
  onClick: handleTriggerClick,
@@ -3959,7 +4063,7 @@ var DropdownMenu = ({
3959
4063
  dropdownContent && typeof window !== "undefined" && (0, import_react_dom5.createPortal)(dropdownContent, document.body)
3960
4064
  ] });
3961
4065
  };
3962
- var DropdownMenuItem = ({ children, onClick, disabled, destructive, className }) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
4066
+ var DropdownMenuItem = ({ children, onClick, disabled, destructive, className }) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
3963
4067
  "button",
3964
4068
  {
3965
4069
  onClick,
@@ -3975,11 +4079,11 @@ var DropdownMenuItem = ({ children, onClick, disabled, destructive, className })
3975
4079
  children
3976
4080
  }
3977
4081
  );
3978
- var DropdownMenuSeparator = ({ className }) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: cn("h-px bg-border my-1", className) });
3979
- var SelectDropdown = ({ options, value, onChange, placeholder = "Select...", className }) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
4082
+ var DropdownMenuSeparator = ({ className }) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: cn("h-px bg-border my-1", className) });
4083
+ var SelectDropdown = ({ options, value, onChange, placeholder = "Select...", className }) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
3980
4084
  DropdownMenu,
3981
4085
  {
3982
- trigger: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
4086
+ trigger: /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
3983
4087
  "button",
3984
4088
  {
3985
4089
  className: cn(
@@ -3989,8 +4093,8 @@ var SelectDropdown = ({ options, value, onChange, placeholder = "Select...", cla
3989
4093
  className
3990
4094
  ),
3991
4095
  children: [
3992
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "truncate max-w-[16rem] text-foreground/90", children: value || placeholder }),
3993
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("svg", { width: "16", height: "16", viewBox: "0 0 20 20", fill: "none", className: "opacity-70", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "M6 8l4 4 4-4", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) })
4096
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "truncate max-w-64 text-foreground/90", children: value || placeholder }),
4097
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("svg", { width: "16", height: "16", viewBox: "0 0 20 20", fill: "none", className: "opacity-70", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("path", { d: "M6 8l4 4 4-4", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) })
3994
4098
  ]
3995
4099
  }
3996
4100
  ),
@@ -4004,14 +4108,14 @@ var DropdownMenu_default = DropdownMenu;
4004
4108
 
4005
4109
  // ../../components/ui/Pagination.tsx
4006
4110
  var React19 = __toESM(require("react"), 1);
4007
- var import_lucide_react13 = require("lucide-react");
4111
+ var import_lucide_react12 = require("lucide-react");
4008
4112
 
4009
4113
  // ../../components/ui/Combobox.tsx
4010
4114
  var React18 = __toESM(require("react"), 1);
4011
4115
  var import_react11 = require("react");
4012
4116
  var import_react_dom6 = require("react-dom");
4013
- var import_lucide_react12 = require("lucide-react");
4014
- var import_jsx_runtime24 = require("react/jsx-runtime");
4117
+ var import_lucide_react11 = require("lucide-react");
4118
+ var import_jsx_runtime23 = require("react/jsx-runtime");
4015
4119
  var getOptionLabel = (option) => {
4016
4120
  return typeof option === "string" ? option : option.label;
4017
4121
  };
@@ -4128,7 +4232,7 @@ var Combobox = ({
4128
4232
  }, [open, enableSearch]);
4129
4233
  const selectedOption = findOptionByValue(options, value);
4130
4234
  const displayValue = selectedOption ? getOptionLabel(selectedOption) : "";
4131
- const dropdownContent = /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
4235
+ const dropdownContent = /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
4132
4236
  "div",
4133
4237
  {
4134
4238
  "data-combobox-dropdown": true,
@@ -4138,20 +4242,17 @@ var Combobox = ({
4138
4242
  top: dropdownPosition?.top || 0,
4139
4243
  left: dropdownPosition?.left || 0,
4140
4244
  width: dropdownPosition?.width || 200,
4141
- zIndex: 9999
4245
+ zIndex: 9999,
4246
+ transformOrigin: "top center"
4142
4247
  },
4143
4248
  "data-state": open ? "open" : "closed",
4144
4249
  role: "listbox",
4145
4250
  id: `${resolvedId}-listbox`,
4146
- className: cn(
4147
- "z-[9999]",
4148
- "data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
4149
- "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95"
4150
- ),
4151
- children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: cn("rounded-md border bg-popover text-popover-foreground shadow-md", "backdrop-blur-sm bg-popover/95 border-border/60"), children: [
4152
- enableSearch && /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "relative p-3 border-b border-border/50 bg-muted/20", children: [
4153
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react12.Search, { className: "absolute left-6 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground transition-colors" }),
4154
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
4251
+ className: "z-9999",
4252
+ children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: cn("rounded-md border bg-popover text-popover-foreground shadow-md", "backdrop-blur-sm bg-popover/95 border-border/60"), children: [
4253
+ enableSearch && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "relative p-3 border-b border-border/50 bg-muted/20", children: [
4254
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react11.Search, { className: "absolute left-6 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground transition-colors" }),
4255
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
4155
4256
  "input",
4156
4257
  {
4157
4258
  ref: inputRef,
@@ -4190,14 +4291,14 @@ var Combobox = ({
4190
4291
  }
4191
4292
  )
4192
4293
  ] }),
4193
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "max-h-64 overflow-y-auto overscroll-contain", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("ul", { className: "p-1 space-y-1", children: loading2 ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("li", { className: "px-3 py-8 text-center", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex flex-col items-center gap-2 animate-in fade-in-0 zoom-in-95 duration-300", children: [
4194
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react12.Loader2, { className: "h-6 w-6 animate-spin text-primary" }),
4195
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "text-sm text-muted-foreground", children: loadingText || "Loading..." })
4294
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "max-h-64 overflow-y-auto overscroll-contain", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("ul", { className: "p-1 space-y-1", children: loading2 ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("li", { className: "px-3 py-8 text-center", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex flex-col items-center gap-2 animate-in fade-in-0 zoom-in-95 duration-300", children: [
4295
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react11.Loader2, { className: "h-6 w-6 animate-spin text-primary" }),
4296
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "text-sm text-muted-foreground", children: loadingText || "Loading..." })
4196
4297
  ] }) }) : filteredOptions.length > 0 ? filteredOptions.map((item, index) => {
4197
4298
  const itemValue = getOptionValue(item);
4198
4299
  const itemLabel = getOptionLabel(item);
4199
4300
  const isSelected = itemValue === value;
4200
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
4301
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
4201
4302
  "li",
4202
4303
  {
4203
4304
  ref: (node) => {
@@ -4209,7 +4310,7 @@ var Combobox = ({
4209
4310
  "aria-selected": isSelected,
4210
4311
  onClick: () => handleSelect(item),
4211
4312
  style: {
4212
- animationDelay: open ? `${index * 25}ms` : "0ms"
4313
+ animationDelay: open ? `${Math.min(index * 20, 200)}ms` : "0ms"
4213
4314
  },
4214
4315
  className: cn(
4215
4316
  "dropdown-item group flex cursor-pointer items-center justify-between rounded-sm px-2.5 py-1.5 text-sm",
@@ -4221,24 +4322,16 @@ var Combobox = ({
4221
4322
  isSelected && "bg-accent text-accent-foreground"
4222
4323
  ),
4223
4324
  children: [
4224
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "truncate", children: itemLabel }),
4225
- isSelected && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react12.Check, { className: "h-4 w-4 text-primary" })
4325
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "truncate", children: itemLabel }),
4326
+ isSelected && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react11.Check, { className: "h-4 w-4 text-primary" })
4226
4327
  ]
4227
4328
  },
4228
4329
  `${itemValue}-${index}`
4229
4330
  );
4230
- }) : /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("li", { className: "px-3 py-8 text-center text-muted-foreground text-sm", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex flex-col items-center gap-2 animate-in fade-in-0 zoom-in-95 duration-300", children: [
4231
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react12.SearchX, { className: "h-8 w-8 opacity-40 text-muted-foreground" }),
4232
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "text-sm", children: emptyText }),
4233
- query && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
4234
- "button",
4235
- {
4236
- type: "button",
4237
- onClick: () => setQuery(""),
4238
- className: "text-xs text-primary hover:underline",
4239
- children: "Clear search"
4240
- }
4241
- )
4331
+ }) : /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("li", { className: "px-3 py-8 text-center text-muted-foreground text-sm", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex flex-col items-center gap-2 animate-in fade-in-0 zoom-in-95 duration-300", children: [
4332
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react11.SearchX, { className: "h-8 w-8 opacity-40 text-muted-foreground" }),
4333
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "text-sm", children: emptyText }),
4334
+ query && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("button", { type: "button", onClick: () => setQuery(""), className: "text-xs text-primary hover:underline", children: "Clear search" })
4242
4335
  ] }) }) }) })
4243
4336
  ] })
4244
4337
  }
@@ -4252,8 +4345,8 @@ var Combobox = ({
4252
4345
  const labelSize = size === "sm" ? "text-xs" : size === "lg" ? "text-base" : "text-sm";
4253
4346
  const radiusClass = size === "sm" ? "rounded-md" : "rounded-lg";
4254
4347
  const verticalGap = size === "sm" ? "space-y-1.5" : "space-y-2";
4255
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: cn("w-full group", verticalGap), children: [
4256
- label && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
4348
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: cn("w-full group", verticalGap), children: [
4349
+ label && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
4257
4350
  "label",
4258
4351
  {
4259
4352
  id: labelId,
@@ -4265,11 +4358,11 @@ var Combobox = ({
4265
4358
  ),
4266
4359
  children: [
4267
4360
  label,
4268
- required && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "text-destructive ml-1", children: "*" })
4361
+ required && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "text-destructive ml-1", children: "*" })
4269
4362
  ]
4270
4363
  }
4271
4364
  ) }),
4272
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
4365
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
4273
4366
  "button",
4274
4367
  {
4275
4368
  ref: triggerRef,
@@ -4299,10 +4392,10 @@ var Combobox = ({
4299
4392
  className
4300
4393
  ),
4301
4394
  children: [
4302
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: cn("truncate", !displayValue && "text-muted-foreground", fontBold && "font-bold"), children: displayValue || placeholder }),
4303
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex items-center gap-1 ml-2", children: [
4395
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: cn("truncate", !displayValue && "text-muted-foreground", fontBold && "font-bold"), children: displayValue || placeholder }),
4396
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex items-center gap-1 ml-2", children: [
4304
4397
  allowClear && value && !disabled && // FIX: Use a div instead of a nested button
4305
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
4398
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
4306
4399
  "div",
4307
4400
  {
4308
4401
  role: "button",
@@ -4311,18 +4404,10 @@ var Combobox = ({
4311
4404
  onClick: handleClear,
4312
4405
  onKeyDown: (e) => (e.key === "Enter" || e.key === " ") && handleClear(e),
4313
4406
  className: "opacity-0 group-hover:opacity-100 transition-opacity p-0.5 rounded hover:bg-destructive/10 text-muted-foreground hover:text-destructive",
4314
- children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react12.X, { className: "h-3 w-3" })
4407
+ children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react11.X, { className: "h-3 w-3" })
4315
4408
  }
4316
4409
  ),
4317
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
4318
- import_lucide_react12.ChevronDown,
4319
- {
4320
- className: cn(
4321
- "h-4 w-4 text-muted-foreground transition-all duration-200",
4322
- open && "rotate-180 scale-110 text-primary"
4323
- )
4324
- }
4325
- )
4410
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_lucide_react11.ChevronDown, { className: cn("h-4 w-4 text-muted-foreground transition-all duration-200", open && "rotate-180 scale-110 text-primary") })
4326
4411
  ] })
4327
4412
  ]
4328
4413
  }
@@ -4333,7 +4418,7 @@ var Combobox = ({
4333
4418
 
4334
4419
  // ../../components/ui/Pagination.tsx
4335
4420
  var import_next_intl4 = require("next-intl");
4336
- var import_jsx_runtime25 = require("react/jsx-runtime");
4421
+ var import_jsx_runtime24 = require("react/jsx-runtime");
4337
4422
  var Pagination = ({
4338
4423
  page,
4339
4424
  totalPages,
@@ -4416,18 +4501,18 @@ var Pagination = ({
4416
4501
  }
4417
4502
  };
4418
4503
  if (totalPages <= 1) return null;
4419
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("nav", { className: cn("flex flex-col gap-4", className), "aria-label": labels?.navigationLabel || t("navigationLabel"), children: [
4420
- showInfo && totalItems && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("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 }) }),
4421
- /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: cn("flex items-center justify-between", {
4504
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("nav", { className: cn("flex flex-col gap-4", className), "aria-label": labels?.navigationLabel || t("navigationLabel"), children: [
4505
+ showInfo && totalItems && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("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 }) }),
4506
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: cn("flex items-center justify-between", {
4422
4507
  "flex-row-reverse": alignment === "right" || alignment === "center"
4423
4508
  }), children: [
4424
- /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: cn("flex items-center gap-1"), children: [
4425
- showFirstLast && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
4509
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: cn("flex items-center gap-1"), children: [
4510
+ showFirstLast && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
4426
4511
  Button_default,
4427
4512
  {
4428
4513
  variant: getButtonVariant(false),
4429
4514
  size,
4430
- icon: import_lucide_react13.ChevronsLeft,
4515
+ icon: import_lucide_react12.ChevronsLeft,
4431
4516
  onClick: () => onChange(1),
4432
4517
  disabled: disabled || page === 1,
4433
4518
  className: "hidden sm:flex",
@@ -4436,27 +4521,27 @@ var Pagination = ({
4436
4521
  "aria-disabled": disabled || page === 1
4437
4522
  }
4438
4523
  ),
4439
- showPrevNext && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
4524
+ showPrevNext && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
4440
4525
  Button_default,
4441
4526
  {
4442
4527
  variant: getButtonVariant(false),
4443
4528
  size,
4444
- icon: import_lucide_react13.ChevronLeft,
4529
+ icon: import_lucide_react12.ChevronLeft,
4445
4530
  onClick: () => onChange(Math.max(1, page - 1)),
4446
4531
  disabled: disabled || page === 1,
4447
4532
  title: labels?.previousPage || t("previousPage"),
4448
4533
  "aria-label": labels?.previousPage || t("previousPage"),
4449
4534
  "aria-disabled": disabled || page === 1,
4450
- children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "hidden sm:inline", children: labels?.previous || t("previous") })
4535
+ children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "hidden sm:inline", children: labels?.previous || t("previous") })
4451
4536
  }
4452
4537
  ),
4453
4538
  showPageNumbers && createPageArray().map((p, i) => {
4454
4539
  if (p === "...") {
4455
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Button_default, { variant: "ghost", size, disabled: true, icon: import_lucide_react13.MoreHorizontal, className: "cursor-default" }, i);
4540
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Button_default, { variant: "ghost", size, disabled: true, icon: import_lucide_react12.MoreHorizontal, className: "cursor-default" }, i);
4456
4541
  }
4457
4542
  const pageNumber = p;
4458
4543
  const isActive = page === pageNumber;
4459
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
4544
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
4460
4545
  Button_default,
4461
4546
  {
4462
4547
  variant: getButtonVariant(isActive),
@@ -4471,26 +4556,26 @@ var Pagination = ({
4471
4556
  i
4472
4557
  );
4473
4558
  }),
4474
- showPrevNext && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
4559
+ showPrevNext && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
4475
4560
  Button_default,
4476
4561
  {
4477
4562
  variant: getButtonVariant(false),
4478
4563
  size,
4479
- iconRight: import_lucide_react13.ChevronRight,
4564
+ iconRight: import_lucide_react12.ChevronRight,
4480
4565
  onClick: () => onChange(Math.min(totalPages, page + 1)),
4481
4566
  disabled: disabled || page === totalPages,
4482
4567
  title: labels?.nextPage || t("nextPage"),
4483
4568
  "aria-label": labels?.nextPage || t("nextPage"),
4484
4569
  "aria-disabled": disabled || page === totalPages,
4485
- children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "hidden sm:inline", children: labels?.next || t("next") })
4570
+ children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "hidden sm:inline", children: labels?.next || t("next") })
4486
4571
  }
4487
4572
  ),
4488
- showFirstLast && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
4573
+ showFirstLast && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
4489
4574
  Button_default,
4490
4575
  {
4491
4576
  variant: getButtonVariant(false),
4492
4577
  size,
4493
- icon: import_lucide_react13.ChevronsRight,
4578
+ icon: import_lucide_react12.ChevronsRight,
4494
4579
  onClick: () => onChange(totalPages),
4495
4580
  disabled: disabled || page === totalPages,
4496
4581
  className: "hidden sm:flex",
@@ -4500,12 +4585,12 @@ var Pagination = ({
4500
4585
  }
4501
4586
  )
4502
4587
  ] }),
4503
- pageSizeOptions && onPageSizeChange && /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: cn("flex items-center gap-2 text-sm"), children: [
4504
- /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("span", { className: "text-muted-foreground", children: [
4588
+ pageSizeOptions && onPageSizeChange && /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: cn("flex items-center gap-2 text-sm"), children: [
4589
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("span", { className: "text-muted-foreground", children: [
4505
4590
  labels?.itemsPerPage || t("itemsPerPage"),
4506
4591
  ":"
4507
4592
  ] }),
4508
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "w-20", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
4593
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "w-20", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
4509
4594
  Combobox,
4510
4595
  {
4511
4596
  options: pageSizeOptionsStrings,
@@ -4534,8 +4619,8 @@ var SimplePagination = ({
4534
4619
  pageSize = 10
4535
4620
  }) => {
4536
4621
  if (totalPages <= 1) return null;
4537
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: cn("flex flex-col gap-2", className), children: [
4538
- showInfo && totalItems && /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "text-sm text-muted-foreground text-center", children: [
4622
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: cn("flex flex-col gap-2", className), children: [
4623
+ showInfo && totalItems && /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "text-sm text-muted-foreground text-center", children: [
4539
4624
  "Page ",
4540
4625
  page,
4541
4626
  " of ",
@@ -4544,20 +4629,20 @@ var SimplePagination = ({
4544
4629
  totalItems,
4545
4630
  " total items)"
4546
4631
  ] }),
4547
- /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex items-center justify-between", children: [
4548
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Button_default, { variant, size, icon: import_lucide_react13.ChevronLeft, onClick: () => onChange(Math.max(1, page - 1)), disabled: disabled || page === 1, children: "Previous" }),
4549
- /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex items-center gap-2 text-sm text-muted-foreground", children: [
4550
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { children: "Page" }),
4551
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "font-medium text-foreground", children: page }),
4552
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { children: "of" }),
4553
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "font-medium text-foreground", children: totalPages })
4632
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex items-center justify-between", children: [
4633
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Button_default, { variant, size, icon: import_lucide_react12.ChevronLeft, onClick: () => onChange(Math.max(1, page - 1)), disabled: disabled || page === 1, children: "Previous" }),
4634
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex items-center gap-2 text-sm text-muted-foreground", children: [
4635
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { children: "Page" }),
4636
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "font-medium text-foreground", children: page }),
4637
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { children: "of" }),
4638
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "font-medium text-foreground", children: totalPages })
4554
4639
  ] }),
4555
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
4640
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
4556
4641
  Button_default,
4557
4642
  {
4558
4643
  variant,
4559
4644
  size,
4560
- iconRight: import_lucide_react13.ChevronRight,
4645
+ iconRight: import_lucide_react12.ChevronRight,
4561
4646
  onClick: () => onChange(Math.min(totalPages, page + 1)),
4562
4647
  disabled: disabled || page === totalPages,
4563
4648
  children: "Next"
@@ -4575,52 +4660,52 @@ var CompactPagination = ({
4575
4660
  disabled = false
4576
4661
  }) => {
4577
4662
  if (totalPages <= 1) return null;
4578
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("nav", { className: cn("flex items-center gap-1", className), "aria-label": "Compact Pagination", children: [
4579
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
4663
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("nav", { className: cn("flex items-center gap-1", className), "aria-label": "Compact Pagination", children: [
4664
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
4580
4665
  Button_default,
4581
4666
  {
4582
4667
  variant,
4583
4668
  size: "icon",
4584
- icon: import_lucide_react13.ChevronsLeft,
4669
+ icon: import_lucide_react12.ChevronsLeft,
4585
4670
  onClick: () => onChange(1),
4586
4671
  disabled: disabled || page === 1,
4587
4672
  title: "First page",
4588
4673
  "aria-label": "First page"
4589
4674
  }
4590
4675
  ),
4591
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
4676
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
4592
4677
  Button_default,
4593
4678
  {
4594
4679
  variant,
4595
4680
  size: "icon",
4596
- icon: import_lucide_react13.ChevronLeft,
4681
+ icon: import_lucide_react12.ChevronLeft,
4597
4682
  onClick: () => onChange(Math.max(1, page - 1)),
4598
4683
  disabled: disabled || page === 1,
4599
4684
  title: "Previous page"
4600
4685
  }
4601
4686
  ),
4602
- /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "px-2 py-1 text-sm text-muted-foreground min-w-[4rem] text-center", children: [
4687
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "px-2 py-1 text-sm text-muted-foreground min-w-[4rem] text-center", children: [
4603
4688
  page,
4604
4689
  " / ",
4605
4690
  totalPages
4606
4691
  ] }),
4607
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
4692
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
4608
4693
  Button_default,
4609
4694
  {
4610
4695
  variant,
4611
4696
  size: "icon",
4612
- icon: import_lucide_react13.ChevronRight,
4697
+ icon: import_lucide_react12.ChevronRight,
4613
4698
  onClick: () => onChange(Math.min(totalPages, page + 1)),
4614
4699
  disabled: disabled || page === totalPages,
4615
4700
  title: "Next page"
4616
4701
  }
4617
4702
  ),
4618
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
4703
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
4619
4704
  Button_default,
4620
4705
  {
4621
4706
  variant,
4622
4707
  size: "icon",
4623
- icon: import_lucide_react13.ChevronsRight,
4708
+ icon: import_lucide_react12.ChevronsRight,
4624
4709
  onClick: () => onChange(totalPages),
4625
4710
  disabled: disabled || page === totalPages,
4626
4711
  title: "Last page"
@@ -4631,7 +4716,7 @@ var CompactPagination = ({
4631
4716
 
4632
4717
  // ../../components/ui/Section.tsx
4633
4718
  var import_react12 = __toESM(require("react"), 1);
4634
- var import_jsx_runtime26 = require("react/jsx-runtime");
4719
+ var import_jsx_runtime25 = require("react/jsx-runtime");
4635
4720
  var Section = import_react12.default.forwardRef(
4636
4721
  ({
4637
4722
  children,
@@ -4654,7 +4739,7 @@ var Section = import_react12.default.forwardRef(
4654
4739
  lg: "py-12",
4655
4740
  xl: "py-16"
4656
4741
  };
4657
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
4742
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
4658
4743
  "section",
4659
4744
  {
4660
4745
  ref,
@@ -4676,9 +4761,9 @@ var Section_default = Section;
4676
4761
 
4677
4762
  // ../../components/ui/ScrollArea.tsx
4678
4763
  var import_react13 = require("react");
4679
- var import_jsx_runtime27 = require("react/jsx-runtime");
4764
+ var import_jsx_runtime26 = require("react/jsx-runtime");
4680
4765
  var ScrollArea = (0, import_react13.forwardRef)(({ className, children, ...props }, ref) => {
4681
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { ref, className: cn("relative overflow-hidden bg-background", className), ...props, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: cn("h-full w-full overflow-y-auto scroll-area-viewport"), children }) });
4766
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { ref, className: cn("relative overflow-hidden bg-background", className), ...props, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: cn("h-full w-full overflow-y-auto scroll-area-viewport"), children }) });
4682
4767
  });
4683
4768
  ScrollArea.displayName = "ScrollArea";
4684
4769
 
@@ -4686,7 +4771,7 @@ ScrollArea.displayName = "ScrollArea";
4686
4771
  var React21 = __toESM(require("react"), 1);
4687
4772
  var import_react14 = require("react");
4688
4773
  var import_react_dom7 = require("react-dom");
4689
- var import_lucide_react14 = require("lucide-react");
4774
+ var import_lucide_react13 = require("lucide-react");
4690
4775
  var import_next_intl5 = require("next-intl");
4691
4776
 
4692
4777
  // ../../lib/utils/date.ts
@@ -4869,7 +4954,7 @@ function formatDateWithDay(date) {
4869
4954
  }
4870
4955
 
4871
4956
  // ../../components/ui/DatePicker.tsx
4872
- var import_jsx_runtime28 = require("react/jsx-runtime");
4957
+ var import_jsx_runtime27 = require("react/jsx-runtime");
4873
4958
  var DatePicker = ({
4874
4959
  id,
4875
4960
  value,
@@ -4980,7 +5065,7 @@ var DatePicker = ({
4980
5065
  const firstDayOfMonth = getFirstDayOfMonth(viewDate);
4981
5066
  const days = [];
4982
5067
  for (let i = 0; i < firstDayOfMonth; i++) {
4983
- days.push(/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "w-8 h-8" }, `empty-${i}`));
5068
+ days.push(/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "w-8 h-8" }, `empty-${i}`));
4984
5069
  }
4985
5070
  for (let day = 1; day <= daysInMonth; day++) {
4986
5071
  const date = new Date(viewDate.getFullYear(), viewDate.getMonth(), day);
@@ -4989,7 +5074,7 @@ var DatePicker = ({
4989
5074
  const totalDaysFromStart = firstDayOfMonth + day - 1;
4990
5075
  const rowIndex = Math.floor(totalDaysFromStart / 7);
4991
5076
  days.push(
4992
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
5077
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
4993
5078
  "button",
4994
5079
  {
4995
5080
  onClick: () => handleDateSelect(date),
@@ -5011,7 +5096,7 @@ var DatePicker = ({
5011
5096
  }
5012
5097
  return days;
5013
5098
  };
5014
- const datePickerContent = isOpen && dropdownPosition ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
5099
+ const datePickerContent = isOpen && dropdownPosition ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
5015
5100
  "div",
5016
5101
  {
5017
5102
  "data-datepicker": true,
@@ -5029,7 +5114,7 @@ var DatePicker = ({
5029
5114
  "data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
5030
5115
  "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95"
5031
5116
  ),
5032
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
5117
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
5033
5118
  "div",
5034
5119
  {
5035
5120
  ref: dropdownRef,
@@ -5040,14 +5125,14 @@ var DatePicker = ({
5040
5125
  ),
5041
5126
  style: { pointerEvents: "auto" },
5042
5127
  children: [
5043
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex items-center justify-between mb-4", children: [
5044
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Button_default, { variant: "ghost", size: "sm", onClick: () => navigateMonth("prev"), className: "p-1 h-auto", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react14.ChevronLeft, { className: "h-4 w-4" }) }),
5045
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "text-sm font-semibold", children: viewDate.toLocaleDateString("en-US", { month: "long", year: "numeric" }) }),
5046
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Button_default, { variant: "ghost", size: "sm", onClick: () => navigateMonth("next"), className: "p-1 h-auto", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react14.ChevronRight, { className: "h-4 w-4" }) })
5128
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "flex items-center justify-between mb-4", children: [
5129
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Button_default, { variant: "ghost", size: "sm", onClick: () => navigateMonth("prev"), className: "p-1 h-auto", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react13.ChevronLeft, { className: "h-4 w-4" }) }),
5130
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "text-sm font-semibold", children: viewDate.toLocaleDateString("en-US", { month: "long", year: "numeric" }) }),
5131
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Button_default, { variant: "ghost", size: "sm", onClick: () => navigateMonth("next"), className: "p-1 h-auto", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react13.ChevronRight, { className: "h-4 w-4" }) })
5047
5132
  ] }),
5048
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("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__ */ (0, import_jsx_runtime28.jsx)("div", { className: cn("text-muted-foreground text-center font-medium", size === "sm" ? "text-[10px] py-0.5" : "text-xs py-1"), children: day }, day)) }),
5049
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "grid grid-cols-7 gap-1", children: renderCalendar() }),
5050
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "flex items-center justify-end mt-2", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
5133
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("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__ */ (0, import_jsx_runtime27.jsx)("div", { className: cn("text-muted-foreground text-center font-medium", size === "sm" ? "text-[10px] py-0.5" : "text-xs py-1"), children: day }, day)) }),
5134
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "grid grid-cols-7 gap-1", children: renderCalendar() }),
5135
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "flex items-center justify-end mt-2", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
5051
5136
  Button_default,
5052
5137
  {
5053
5138
  variant: "outline",
@@ -5071,8 +5156,8 @@ var DatePicker = ({
5071
5156
  const labelSize = size === "sm" ? "text-xs" : "text-sm";
5072
5157
  const radiusClass = size === "sm" ? "rounded-md" : "rounded-lg";
5073
5158
  const verticalGap = size === "sm" ? "space-y-1.5" : "space-y-2";
5074
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: cn("w-full group", verticalGap), children: [
5075
- label && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
5159
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: cn("w-full group", verticalGap), children: [
5160
+ label && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
5076
5161
  "label",
5077
5162
  {
5078
5163
  id: labelId,
@@ -5084,11 +5169,11 @@ var DatePicker = ({
5084
5169
  ),
5085
5170
  children: [
5086
5171
  label,
5087
- required && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "text-destructive ml-1", children: "*" })
5172
+ required && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "text-destructive ml-1", children: "*" })
5088
5173
  ]
5089
5174
  }
5090
5175
  ) }),
5091
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
5176
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
5092
5177
  "button",
5093
5178
  {
5094
5179
  ref: triggerRef,
@@ -5116,8 +5201,8 @@ var DatePicker = ({
5116
5201
  className
5117
5202
  ),
5118
5203
  children: [
5119
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: cn("truncate", !value && "text-muted-foreground"), children: value ? formatDateDisplay(value) : placeholder || t("placeholder") }),
5120
- value && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
5204
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: cn("truncate", !value && "text-muted-foreground"), children: value ? formatDateDisplay(value) : placeholder || t("placeholder") }),
5205
+ value && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
5121
5206
  "span",
5122
5207
  {
5123
5208
  role: "button",
@@ -5139,10 +5224,10 @@ var DatePicker = ({
5139
5224
  },
5140
5225
  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",
5141
5226
  style: { width: 20, height: 20 },
5142
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react14.X, { className: "h-3.5 w-3.5" })
5227
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react13.X, { className: "h-3.5 w-3.5" })
5143
5228
  }
5144
5229
  ),
5145
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react14.Calendar, { className: "h-4 w-4 text-muted-foreground ml-2" })
5230
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react13.Calendar, { className: "h-4 w-4 text-muted-foreground ml-2" })
5146
5231
  ]
5147
5232
  }
5148
5233
  ),
@@ -5227,7 +5312,7 @@ var DateRangePicker = ({ startDate, endDate, onChange, placeholder = "Select dat
5227
5312
  const nodes = [];
5228
5313
  const daysInMonth = getDaysInMonth(viewDate);
5229
5314
  const firstDay = getFirstDayOfMonth(viewDate);
5230
- for (let i = 0; i < firstDay; i++) nodes.push(/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "w-8 h-8" }, `e-${i}`));
5315
+ for (let i = 0; i < firstDay; i++) nodes.push(/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "w-8 h-8" }, `e-${i}`));
5231
5316
  for (let d = 1; d <= daysInMonth; d++) {
5232
5317
  const date = new Date(viewDate.getFullYear(), viewDate.getMonth(), d);
5233
5318
  const isSelectedStart = isSameDay2(date, tempStart);
@@ -5252,7 +5337,7 @@ var DateRangePicker = ({ startDate, endDate, onChange, placeholder = "Select dat
5252
5337
  }
5253
5338
  }
5254
5339
  nodes.push(
5255
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
5340
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
5256
5341
  "button",
5257
5342
  {
5258
5343
  onClick: () => handleSelect(date),
@@ -5282,7 +5367,7 @@ var DateRangePicker = ({ startDate, endDate, onChange, placeholder = "Select dat
5282
5367
  }
5283
5368
  return nodes;
5284
5369
  };
5285
- const panel = isOpen && dropdownPosition ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
5370
+ const panel = isOpen && dropdownPosition ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
5286
5371
  "div",
5287
5372
  {
5288
5373
  style: { position: "absolute", top: dropdownPosition.top, left: dropdownPosition.left, width: dropdownPosition.width || 256, zIndex: 9999 },
@@ -5292,37 +5377,37 @@ var DateRangePicker = ({ startDate, endDate, onChange, placeholder = "Select dat
5292
5377
  "data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
5293
5378
  "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95"
5294
5379
  ),
5295
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
5380
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
5296
5381
  "div",
5297
5382
  {
5298
5383
  ref: panelRef,
5299
5384
  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"),
5300
5385
  children: [
5301
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex items-center justify-between mb-3", children: [
5302
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
5386
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "flex items-center justify-between mb-3", children: [
5387
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
5303
5388
  Button_default,
5304
5389
  {
5305
5390
  variant: "ghost",
5306
5391
  size: "sm",
5307
5392
  onClick: () => setViewDate(new Date(viewDate.getFullYear(), viewDate.getMonth() - 1, 1)),
5308
5393
  className: "p-1 h-auto",
5309
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react14.ChevronLeft, { className: "h-4 w-4" })
5394
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react13.ChevronLeft, { className: "h-4 w-4" })
5310
5395
  }
5311
5396
  ),
5312
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "text-sm font-semibold", children: viewDate.toLocaleDateString("en-US", { month: "long", year: "numeric" }) }),
5313
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
5397
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "text-sm font-semibold", children: viewDate.toLocaleDateString("en-US", { month: "long", year: "numeric" }) }),
5398
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
5314
5399
  Button_default,
5315
5400
  {
5316
5401
  variant: "ghost",
5317
5402
  size: "sm",
5318
5403
  onClick: () => setViewDate(new Date(viewDate.getFullYear(), viewDate.getMonth() + 1, 1)),
5319
5404
  className: "p-1 h-auto",
5320
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react14.ChevronRight, { className: "h-4 w-4" })
5405
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react13.ChevronRight, { className: "h-4 w-4" })
5321
5406
  }
5322
5407
  )
5323
5408
  ] }),
5324
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "grid grid-cols-7 gap-1 mb-2", children: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"].map((d) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "text-xs text-muted-foreground text-center py-1 font-medium", children: d }, d)) }),
5325
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "grid grid-cols-7", children: renderGrid() })
5409
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "grid grid-cols-7 gap-1 mb-2", children: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"].map((d) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "text-xs text-muted-foreground text-center py-1 font-medium", children: d }, d)) }),
5410
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "grid grid-cols-7", children: renderGrid() })
5326
5411
  ]
5327
5412
  }
5328
5413
  )
@@ -5330,8 +5415,8 @@ var DateRangePicker = ({ startDate, endDate, onChange, placeholder = "Select dat
5330
5415
  ) : null;
5331
5416
  const displayFormat = (date) => formatDateShort(date);
5332
5417
  const label = tempStart && tempEnd ? `${displayFormat(tempStart)} - ${displayFormat(tempEnd)}` : tempStart ? `${displayFormat(tempStart)} - ...` : placeholder;
5333
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_jsx_runtime28.Fragment, { children: [
5334
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
5418
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
5419
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
5335
5420
  "button",
5336
5421
  {
5337
5422
  ref: triggerRef,
@@ -5350,8 +5435,8 @@ var DateRangePicker = ({ startDate, endDate, onChange, placeholder = "Select dat
5350
5435
  className
5351
5436
  ),
5352
5437
  children: [
5353
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: cn("truncate", !tempStart && !tempEnd && "text-muted-foreground"), children: label }),
5354
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react14.Calendar, { className: "h-4 w-4 text-muted-foreground ml-2" })
5438
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: cn("truncate", !tempStart && !tempEnd && "text-muted-foreground"), children: label }),
5439
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_lucide_react13.Calendar, { className: "h-4 w-4 text-muted-foreground ml-2" })
5355
5440
  ]
5356
5441
  }
5357
5442
  ),
@@ -5361,8 +5446,8 @@ var DateRangePicker = ({ startDate, endDate, onChange, placeholder = "Select dat
5361
5446
 
5362
5447
  // ../../components/ui/TimePicker.tsx
5363
5448
  var React22 = __toESM(require("react"), 1);
5364
- var import_lucide_react15 = require("lucide-react");
5365
- var import_jsx_runtime29 = require("react/jsx-runtime");
5449
+ var import_lucide_react14 = require("lucide-react");
5450
+ var import_jsx_runtime28 = require("react/jsx-runtime");
5366
5451
  var pad = (n) => n.toString().padStart(2, "0");
5367
5452
  function parseTime(input, fmt = "24", includeSeconds) {
5368
5453
  if (!input) return null;
@@ -5605,7 +5690,7 @@ function TimePicker({
5605
5690
  const sz = sizeClasses2[size];
5606
5691
  const radiusClass = size === "sm" ? "rounded-md" : "rounded-lg";
5607
5692
  const display = formatTime2(parts, format, includeSeconds);
5608
- const trigger = variant === "inline" ? null : /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
5693
+ const trigger = variant === "inline" ? null : /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
5609
5694
  "button",
5610
5695
  {
5611
5696
  type: "button",
@@ -5629,17 +5714,17 @@ function TimePicker({
5629
5714
  className
5630
5715
  ),
5631
5716
  children: [
5632
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "flex items-center gap-2", children: [
5633
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react15.Clock, { className: cn(sz.icon, error ? "text-destructive" : success ? "text-green-500" : "text-muted-foreground") }),
5634
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: cn("truncate", !value && !defaultValue && "text-muted-foreground"), children: value || defaultValue ? display : placeholder })
5717
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex items-center gap-2", children: [
5718
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react14.Clock, { className: cn(sz.icon, error ? "text-destructive" : success ? "text-green-500" : "text-muted-foreground") }),
5719
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: cn("truncate", !value && !defaultValue && "text-muted-foreground"), children: value || defaultValue ? display : placeholder })
5635
5720
  ] }),
5636
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: cn("ml-2 transition-transform duration-200", open && "rotate-180"), children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("svg", { className: sz.icon, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" }) }) })
5721
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: cn("ml-2 transition-transform duration-200", open && "rotate-180"), children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("svg", { className: sz.icon, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" }) }) })
5637
5722
  ]
5638
5723
  }
5639
5724
  );
5640
5725
  const contentWidth = variant === "compact" ? 240 : variant === "inline" ? 320 : includeSeconds ? 340 : 300;
5641
- const timePickerContent = /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "space-y-3", children: [
5642
- allowManualInput && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
5726
+ const timePickerContent = /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "space-y-3", children: [
5727
+ allowManualInput && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
5643
5728
  Input_default,
5644
5729
  {
5645
5730
  placeholder: format === "12" ? "02:30 PM" : "14:30",
@@ -5649,7 +5734,7 @@ function TimePicker({
5649
5734
  variant: "outlined"
5650
5735
  }
5651
5736
  ) }),
5652
- showPresets && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "grid grid-cols-2 gap-2", children: Object.keys(PRESETS).map((preset) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
5737
+ showPresets && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "grid grid-cols-2 gap-2", children: Object.keys(PRESETS).map((preset) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
5653
5738
  "button",
5654
5739
  {
5655
5740
  type: "button",
@@ -5663,7 +5748,7 @@ function TimePicker({
5663
5748
  },
5664
5749
  preset
5665
5750
  )) }),
5666
- customPresets && customPresets.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "grid grid-cols-2 gap-2", children: customPresets.map((preset, idx) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
5751
+ customPresets && customPresets.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "grid grid-cols-2 gap-2", children: customPresets.map((preset, idx) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
5667
5752
  "button",
5668
5753
  {
5669
5754
  type: "button",
@@ -5677,10 +5762,10 @@ function TimePicker({
5677
5762
  },
5678
5763
  idx
5679
5764
  )) }),
5680
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "flex gap-3", children: [
5681
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "flex-1 min-w-[70px]", children: [
5682
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "text-xs font-semibold text-muted-foreground mb-2 text-center", children: "Hour" }),
5683
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
5765
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex gap-3", children: [
5766
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex-1 min-w-[70px]", children: [
5767
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "text-xs font-semibold text-muted-foreground mb-2 text-center", children: "Hour" }),
5768
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
5684
5769
  "div",
5685
5770
  {
5686
5771
  ref: hourScrollRef,
@@ -5692,7 +5777,7 @@ function TimePicker({
5692
5777
  onFocus: () => setFocusedColumn("hour"),
5693
5778
  children: hours.map((h) => {
5694
5779
  const isSelected = format === "24" && parts.h === h || format === "12" && (parts.h % 12 || 12) === (h % 12 || 12);
5695
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
5780
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
5696
5781
  "button",
5697
5782
  {
5698
5783
  type: "button",
@@ -5719,10 +5804,10 @@ function TimePicker({
5719
5804
  }
5720
5805
  )
5721
5806
  ] }),
5722
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "w-px bg-border/50 self-stretch my-8" }),
5723
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "flex-1 min-w-[70px]", children: [
5724
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "text-xs font-semibold text-muted-foreground mb-2 text-center", children: "Min" }),
5725
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
5807
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "w-px bg-border/50 self-stretch my-8" }),
5808
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex-1 min-w-[70px]", children: [
5809
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "text-xs font-semibold text-muted-foreground mb-2 text-center", children: "Min" }),
5810
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
5726
5811
  "div",
5727
5812
  {
5728
5813
  ref: minuteScrollRef,
@@ -5734,7 +5819,7 @@ function TimePicker({
5734
5819
  onFocus: () => setFocusedColumn("minute"),
5735
5820
  children: minutes.map((m) => {
5736
5821
  const isSelected = parts.m === m;
5737
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
5822
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
5738
5823
  "button",
5739
5824
  {
5740
5825
  type: "button",
@@ -5760,11 +5845,11 @@ function TimePicker({
5760
5845
  }
5761
5846
  )
5762
5847
  ] }),
5763
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "w-px bg-border/50 self-stretch my-8" }),
5764
- includeSeconds && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_jsx_runtime29.Fragment, { children: [
5765
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "flex-1 min-w-[70px]", children: [
5766
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "text-xs font-semibold text-muted-foreground mb-2 text-center", children: "Sec" }),
5767
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
5848
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "w-px bg-border/50 self-stretch my-8" }),
5849
+ includeSeconds && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_jsx_runtime28.Fragment, { children: [
5850
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex-1 min-w-[70px]", children: [
5851
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "text-xs font-semibold text-muted-foreground mb-2 text-center", children: "Sec" }),
5852
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
5768
5853
  "div",
5769
5854
  {
5770
5855
  ref: secondScrollRef,
@@ -5776,7 +5861,7 @@ function TimePicker({
5776
5861
  onFocus: () => setFocusedColumn("second"),
5777
5862
  children: seconds.map((s) => {
5778
5863
  const isSelected = parts.s === s;
5779
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
5864
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
5780
5865
  "button",
5781
5866
  {
5782
5867
  type: "button",
@@ -5802,11 +5887,11 @@ function TimePicker({
5802
5887
  }
5803
5888
  )
5804
5889
  ] }),
5805
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "w-px bg-border/50 self-stretch my-8" })
5890
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "w-px bg-border/50 self-stretch my-8" })
5806
5891
  ] }),
5807
- format === "12" && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "w-20", children: [
5808
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "text-xs font-semibold text-muted-foreground mb-2 text-center", children: "Period" }),
5809
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
5892
+ format === "12" && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "w-20", children: [
5893
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "text-xs font-semibold text-muted-foreground mb-2 text-center", children: "Period" }),
5894
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
5810
5895
  "div",
5811
5896
  {
5812
5897
  className: "flex flex-col gap-2",
@@ -5817,7 +5902,7 @@ function TimePicker({
5817
5902
  onFocus: () => setFocusedColumn("period"),
5818
5903
  children: ["AM", "PM"].map((p) => {
5819
5904
  const isSelected = parts.p === p;
5820
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
5905
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
5821
5906
  "button",
5822
5907
  {
5823
5908
  type: "button",
@@ -5848,8 +5933,8 @@ function TimePicker({
5848
5933
  )
5849
5934
  ] })
5850
5935
  ] }),
5851
- (showNow || clearable) && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "flex items-center justify-between gap-2 pt-3 border-t border-border", children: [
5852
- showNow && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
5936
+ (showNow || clearable) && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex items-center justify-between gap-2 pt-3 border-t border-border", children: [
5937
+ showNow && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
5853
5938
  "button",
5854
5939
  {
5855
5940
  type: "button",
@@ -5863,13 +5948,13 @@ function TimePicker({
5863
5948
  },
5864
5949
  "aria-label": "Set current time",
5865
5950
  children: [
5866
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react15.Clock, { className: "w-3.5 h-3.5" }),
5951
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react14.Clock, { className: "w-3.5 h-3.5" }),
5867
5952
  "Now"
5868
5953
  ]
5869
5954
  }
5870
5955
  ),
5871
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "flex-1" }),
5872
- clearable && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
5956
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "flex-1" }),
5957
+ clearable && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
5873
5958
  "button",
5874
5959
  {
5875
5960
  type: "button",
@@ -5884,7 +5969,7 @@ function TimePicker({
5884
5969
  },
5885
5970
  "aria-label": "Clear selected time",
5886
5971
  children: [
5887
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react15.X, { className: "w-3.5 h-3.5" }),
5972
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react14.X, { className: "w-3.5 h-3.5" }),
5888
5973
  "Clear"
5889
5974
  ]
5890
5975
  }
@@ -5892,27 +5977,27 @@ function TimePicker({
5892
5977
  ] })
5893
5978
  ] });
5894
5979
  if (variant === "inline") {
5895
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "w-full", ...rest, children: [
5896
- label && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "flex items-center justify-between mb-2", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("label", { className: cn(sz.label, "font-medium", disabled ? "text-muted-foreground" : "text-foreground"), children: [
5980
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "w-full", ...rest, children: [
5981
+ label && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "flex items-center justify-between mb-2", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("label", { className: cn(sz.label, "font-medium", disabled ? "text-muted-foreground" : "text-foreground"), children: [
5897
5982
  label,
5898
- required && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: "text-destructive ml-1", children: "*" })
5983
+ required && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "text-destructive ml-1", children: "*" })
5899
5984
  ] }) }),
5900
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: cn("p-3 rounded-lg border border-border bg-card shadow-sm", className), children: timePickerContent })
5985
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: cn("p-3 rounded-lg border border-border bg-card shadow-sm", className), children: timePickerContent })
5901
5986
  ] });
5902
5987
  }
5903
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "w-full", ...rest, children: [
5904
- label && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "flex items-center justify-between mb-1.5", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
5988
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "w-full", ...rest, children: [
5989
+ label && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "flex items-center justify-between mb-1.5", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
5905
5990
  "label",
5906
5991
  {
5907
5992
  className: cn(sz.label, "font-medium", disabled ? "text-muted-foreground" : "text-foreground", "cursor-pointer"),
5908
5993
  onClick: () => !disabled && handleOpenChange(true),
5909
5994
  children: [
5910
5995
  label,
5911
- required && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: "text-destructive ml-1", children: "*" })
5996
+ required && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "text-destructive ml-1", children: "*" })
5912
5997
  ]
5913
5998
  }
5914
5999
  ) }),
5915
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
6000
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
5916
6001
  Popover,
5917
6002
  {
5918
6003
  trigger,
@@ -5931,24 +6016,24 @@ function TimePicker({
5931
6016
  children: timePickerContent
5932
6017
  }
5933
6018
  ),
5934
- (error || success || helperText) && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: cn("mt-1.5 flex items-start gap-1.5", sz.label), children: [
5935
- error && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "flex items-center gap-1.5 text-destructive", children: [
5936
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react15.X, { className: "w-3.5 h-3.5 flex-shrink-0" }),
5937
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { children: error })
6019
+ (error || success || helperText) && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: cn("mt-1.5 flex items-start gap-1.5", sz.label), children: [
6020
+ error && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex items-center gap-1.5 text-destructive", children: [
6021
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react14.X, { className: "w-3.5 h-3.5 flex-shrink-0" }),
6022
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { children: error })
5938
6023
  ] }),
5939
- success && !error && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "flex items-center gap-1.5 text-green-600", children: [
5940
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react15.Check, { className: "w-3.5 h-3.5 flex-shrink-0" }),
5941
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { children: "Valid time selected" })
6024
+ success && !error && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "flex items-center gap-1.5 text-green-600", children: [
6025
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react14.Check, { className: "w-3.5 h-3.5 flex-shrink-0" }),
6026
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { children: "Valid time selected" })
5942
6027
  ] }),
5943
- helperText && !error && !success && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: "text-muted-foreground", children: helperText })
6028
+ helperText && !error && !success && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "text-muted-foreground", children: helperText })
5944
6029
  ] })
5945
6030
  ] });
5946
6031
  }
5947
6032
 
5948
6033
  // ../../components/ui/Calendar.tsx
5949
6034
  var React23 = __toESM(require("react"), 1);
5950
- var import_lucide_react16 = require("lucide-react");
5951
- var import_jsx_runtime30 = require("react/jsx-runtime");
6035
+ var import_lucide_react15 = require("lucide-react");
6036
+ var import_jsx_runtime29 = require("react/jsx-runtime");
5952
6037
  function startOfMonth(d) {
5953
6038
  return new Date(d.getFullYear(), d.getMonth(), 1);
5954
6039
  }
@@ -6129,17 +6214,17 @@ function Calendar2({
6129
6214
  const renderMonth = (monthDate) => {
6130
6215
  const monthDays = getMonthGrid(monthDate, weekStartsOn);
6131
6216
  const monthLabel = labels?.month ? labels.month(monthDate) : monthDate.toLocaleDateString("en-US", { month: "long", year: "numeric" });
6132
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { children: [
6133
- months > 1 && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "flex items-center justify-center mb-2 text-sm font-semibold", children: monthLabel }),
6134
- showWeekdays && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: cn("grid grid-cols-7", sz.grid, "mb-1 text-center text-muted-foreground font-medium"), children: weekdays.map((w) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: cn(sz.head), children: w }, `${monthLabel}-${w}`)) }),
6135
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: cn("grid grid-cols-7", sz.grid), children: monthDays.map((d, idx) => {
6217
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { children: [
6218
+ months > 1 && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "flex items-center justify-center mb-2 text-sm font-semibold", children: monthLabel }),
6219
+ showWeekdays && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: cn("grid grid-cols-7", sz.grid, "mb-1 text-center text-muted-foreground font-medium"), children: weekdays.map((w) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: cn(sz.head), children: w }, `${monthLabel}-${w}`)) }),
6220
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: cn("grid grid-cols-7", sz.grid), children: monthDays.map((d, idx) => {
6136
6221
  const inMonth = d.getMonth() === monthDate.getMonth();
6137
6222
  const isToday2 = isSameDay(d, today);
6138
6223
  const selectedDay = isSelected(d);
6139
6224
  const k = `${d.getFullYear()}-${d.getMonth()}-${d.getDate()}`;
6140
6225
  const dayEvents = byDay.get(k) || [];
6141
6226
  const disabled = isDateDisabled(d);
6142
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
6227
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
6143
6228
  "button",
6144
6229
  {
6145
6230
  onClick: () => handleClickDay(d),
@@ -6156,7 +6241,7 @@ function Calendar2({
6156
6241
  title: d.toDateString(),
6157
6242
  children: [
6158
6243
  d.getDate(),
6159
- dayEvents.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "absolute -bottom-1 inline-flex gap-0.5", children: dayEvents.slice(0, 3).map((e, i) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "h-1.5 w-1.5 rounded-full", style: { backgroundColor: e.color || "hsl(var(--primary))" } }, i)) })
6244
+ dayEvents.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: "absolute -bottom-1 inline-flex gap-0.5", children: dayEvents.slice(0, 3).map((e, i) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: "h-1.5 w-1.5 rounded-full", style: { backgroundColor: e.color || "hsl(var(--primary))" } }, i)) })
6160
6245
  ]
6161
6246
  },
6162
6247
  `${monthLabel}-${idx}`
@@ -6186,22 +6271,22 @@ function Calendar2({
6186
6271
  const nextStart = startOfMonth(addMonths(view, 1));
6187
6272
  return nextStart > maxBound;
6188
6273
  }, [display, view, weekStartsOn, maxBound]);
6189
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: cn("w-full", className), ...rest, children: [
6190
- showHeader && /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "flex items-center justify-between mb-2", children: [
6191
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("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__ */ (0, import_jsx_runtime30.jsx)(import_lucide_react16.ChevronLeft, { className: "h-4 w-4" }) }),
6192
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("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" }) }),
6193
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("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__ */ (0, import_jsx_runtime30.jsx)(import_lucide_react16.ChevronRight, { className: "h-4 w-4" }) })
6274
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: cn("w-full", className), ...rest, children: [
6275
+ showHeader && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "flex items-center justify-between mb-2", children: [
6276
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("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__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react15.ChevronLeft, { className: "h-4 w-4" }) }),
6277
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("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" }) }),
6278
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("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__ */ (0, import_jsx_runtime29.jsx)(import_lucide_react15.ChevronRight, { className: "h-4 w-4" }) })
6194
6279
  ] }),
6195
- display === "week" ? /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_jsx_runtime30.Fragment, { children: [
6196
- showWeekdays && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: cn("grid grid-cols-7", sz.grid, "mb-1 text-center text-muted-foreground font-medium"), children: weekdays.map((w) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: cn(sz.head), children: w }, `w-${w}`)) }),
6197
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: cn("grid grid-cols-7", sz.grid), children: weekDays.map((d, idx) => {
6280
+ display === "week" ? /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_jsx_runtime29.Fragment, { children: [
6281
+ showWeekdays && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: cn("grid grid-cols-7", sz.grid, "mb-1 text-center text-muted-foreground font-medium"), children: weekdays.map((w) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: cn(sz.head), children: w }, `w-${w}`)) }),
6282
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: cn("grid grid-cols-7", sz.grid), children: weekDays.map((d, idx) => {
6198
6283
  const inMonth = true;
6199
6284
  const isToday2 = isSameDay(d, today);
6200
6285
  const selectedDay = isSelected(d);
6201
6286
  const k = `${d.getFullYear()}-${d.getMonth()}-${d.getDate()}`;
6202
6287
  const dayEvents = byDay.get(k) || [];
6203
6288
  const disabled = isDateDisabled(d);
6204
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
6289
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
6205
6290
  "button",
6206
6291
  {
6207
6292
  onClick: () => handleClickDay(d),
@@ -6217,13 +6302,13 @@ function Calendar2({
6217
6302
  title: d.toDateString(),
6218
6303
  children: [
6219
6304
  d.getDate(),
6220
- dayEvents.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "absolute -bottom-1 inline-flex gap-0.5", children: dayEvents.slice(0, 3).map((e, i) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "h-1.5 w-1.5 rounded-full", style: { backgroundColor: e.color || "hsl(var(--primary))" } }, i)) })
6305
+ dayEvents.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: "absolute -bottom-1 inline-flex gap-0.5", children: dayEvents.slice(0, 3).map((e, i) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: "h-1.5 w-1.5 rounded-full", style: { backgroundColor: e.color || "hsl(var(--primary))" } }, i)) })
6221
6306
  ]
6222
6307
  },
6223
6308
  `wd-${idx}`
6224
6309
  );
6225
6310
  }) })
6226
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("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__ */ (0, import_jsx_runtime30.jsx)(React23.Fragment, { children: renderMonth(addMonths(view, i)) }, `cal-month-${view.getFullYear()}-${view.getMonth()}-${i}`)) })
6311
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("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__ */ (0, import_jsx_runtime29.jsx)(React23.Fragment, { children: renderMonth(addMonths(view, i)) }, `cal-month-${view.getFullYear()}-${view.getMonth()}-${i}`)) })
6227
6312
  ] });
6228
6313
  }
6229
6314
 
@@ -6231,8 +6316,8 @@ function Calendar2({
6231
6316
  var React24 = __toESM(require("react"), 1);
6232
6317
  var import_react15 = require("react");
6233
6318
  var import_react_dom8 = require("react-dom");
6234
- var import_lucide_react17 = require("lucide-react");
6235
- var import_jsx_runtime31 = require("react/jsx-runtime");
6319
+ var import_lucide_react16 = require("lucide-react");
6320
+ var import_jsx_runtime30 = require("react/jsx-runtime");
6236
6321
  var MultiCombobox = ({
6237
6322
  id,
6238
6323
  options,
@@ -6377,8 +6462,8 @@ var MultiCombobox = ({
6377
6462
  const resolvedId = id ? String(id) : `multicombobox-${autoId}`;
6378
6463
  const labelId = label ? `${resolvedId}-label` : void 0;
6379
6464
  const labelSize = size === "sm" ? "text-xs" : size === "lg" ? "text-base" : "text-sm";
6380
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: cn("w-full space-y-2 group", className), children: [
6381
- title && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
6465
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: cn("w-full space-y-2 group", className), children: [
6466
+ title && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
6382
6467
  "label",
6383
6468
  {
6384
6469
  className: cn(
@@ -6388,11 +6473,11 @@ var MultiCombobox = ({
6388
6473
  ),
6389
6474
  children: [
6390
6475
  title,
6391
- required && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "text-destructive ml-1", children: "*" })
6476
+ required && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "text-destructive ml-1", children: "*" })
6392
6477
  ]
6393
6478
  }
6394
6479
  ) }),
6395
- label && /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
6480
+ label && /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
6396
6481
  "label",
6397
6482
  {
6398
6483
  id: labelId,
@@ -6404,12 +6489,12 @@ var MultiCombobox = ({
6404
6489
  ),
6405
6490
  children: [
6406
6491
  label,
6407
- required && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "text-destructive ml-1", children: "*" })
6492
+ required && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "text-destructive ml-1", children: "*" })
6408
6493
  ]
6409
6494
  }
6410
6495
  ),
6411
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "relative w-full" }),
6412
- /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
6496
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "relative w-full" }),
6497
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
6413
6498
  "button",
6414
6499
  {
6415
6500
  ref: triggerRef,
@@ -6432,11 +6517,11 @@ var MultiCombobox = ({
6432
6517
  "disabled:cursor-not-allowed disabled:opacity-50"
6433
6518
  ),
6434
6519
  children: [
6435
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "flex items-center gap-1 flex-wrap min-h-[1.5rem] flex-1", children: value.length > 0 ? showTags ? value.map((itemValue) => {
6520
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "flex items-center gap-1 flex-wrap min-h-[1.5rem] flex-1", children: value.length > 0 ? showTags ? value.map((itemValue) => {
6436
6521
  const option = normalizedOptions.find((o) => o.value === itemValue);
6437
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("span", { className: "inline-flex items-center gap-1 bg-accent text-accent-foreground rounded px-2 py-1 text-xs", children: [
6438
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "truncate max-w-[120px]", children: option ? displayFormat(option) : itemValue }),
6439
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
6522
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("span", { className: "inline-flex items-center gap-1 bg-accent text-accent-foreground rounded px-2 py-1 text-xs", children: [
6523
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "truncate max-w-[120px]", children: option ? displayFormat(option) : itemValue }),
6524
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
6440
6525
  "span",
6441
6526
  {
6442
6527
  role: "button",
@@ -6459,12 +6544,12 @@ var MultiCombobox = ({
6459
6544
  }
6460
6545
  )
6461
6546
  ] }, itemValue);
6462
- }) : /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("span", { className: "truncate text-sm", children: [
6547
+ }) : /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("span", { className: "truncate text-sm", children: [
6463
6548
  value.length,
6464
6549
  " selected"
6465
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "text-muted-foreground", children: placeholder || "Select..." }) }),
6466
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
6467
- import_lucide_react17.ChevronDown,
6550
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "text-muted-foreground", children: placeholder || "Select..." }) }),
6551
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
6552
+ import_lucide_react16.ChevronDown,
6468
6553
  {
6469
6554
  className: cn("opacity-50 transition-all duration-200", sizeStyles8[size].icon, open && "rotate-180 scale-110 text-primary opacity-100")
6470
6555
  }
@@ -6473,30 +6558,27 @@ var MultiCombobox = ({
6473
6558
  }
6474
6559
  ),
6475
6560
  open && dropdownPosition && typeof window !== "undefined" ? (0, import_react_dom8.createPortal)(
6476
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
6561
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
6477
6562
  "div",
6478
6563
  {
6479
6564
  ref: dropdownRef,
6480
- "data-dropdown": "multicombobox",
6565
+ "data-combobox-dropdown": true,
6481
6566
  style: {
6482
6567
  position: "absolute",
6483
6568
  top: dropdownPosition?.top || 0,
6484
6569
  left: dropdownPosition?.left || 0,
6485
6570
  width: dropdownPosition?.width || 200,
6486
- zIndex: 9999
6571
+ zIndex: 9999,
6572
+ transformOrigin: "top center"
6487
6573
  },
6488
6574
  "data-state": open ? "open" : "closed",
6489
- className: cn(
6490
- "z-[9999]",
6491
- "data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
6492
- "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95"
6493
- ),
6494
- children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
6575
+ className: "z-9999",
6576
+ children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
6495
6577
  "div",
6496
6578
  {
6497
6579
  className: cn("rounded-md border bg-popover text-popover-foreground shadow-md", "backdrop-blur-sm bg-popover/95 border-border/60"),
6498
6580
  children: [
6499
- showClear && value.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "px-3 py-2 border-b border-border/60 flex justify-end", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
6581
+ showClear && value.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "px-3 py-2 border-b border-border/60 flex justify-end", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
6500
6582
  "button",
6501
6583
  {
6502
6584
  type: "button",
@@ -6509,9 +6591,9 @@ var MultiCombobox = ({
6509
6591
  children: "Clear all"
6510
6592
  }
6511
6593
  ) }),
6512
- enableSearch && /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "relative border-b border-border/60", children: [
6513
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_lucide_react17.Search, { className: cn("absolute left-2 top-2.5 text-muted-foreground", sizeStyles8[size].icon) }),
6514
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
6594
+ enableSearch && /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "relative border-b border-border/60", children: [
6595
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_lucide_react16.Search, { className: cn("absolute left-2 top-2.5 text-muted-foreground", sizeStyles8[size].icon) }),
6596
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
6515
6597
  "input",
6516
6598
  {
6517
6599
  ref: inputRef,
@@ -6526,13 +6608,13 @@ var MultiCombobox = ({
6526
6608
  }
6527
6609
  )
6528
6610
  ] }),
6529
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("ul", { className: cn("max-h-60 overflow-y-auto p-1", size === "lg" ? "text-base" : size === "sm" ? "text-xs" : "text-sm"), children: loading2 ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("li", { className: "px-3 py-8 text-center", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "flex flex-col items-center gap-2 animate-in fade-in-0 zoom-in-95 duration-300", children: [
6530
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_lucide_react17.Loader2, { className: "h-6 w-6 animate-spin text-primary" }),
6531
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "text-muted-foreground", children: loadingText })
6611
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("ul", { className: cn("max-h-60 overflow-y-auto p-1", size === "lg" ? "text-base" : size === "sm" ? "text-xs" : "text-sm"), children: loading2 ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("li", { className: "px-3 py-8 text-center", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "flex flex-col items-center gap-2 animate-in fade-in-0 zoom-in-95 duration-300", children: [
6612
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_lucide_react16.Loader2, { className: "h-6 w-6 animate-spin text-primary" }),
6613
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "text-muted-foreground", children: loadingText })
6532
6614
  ] }) }) : filtered.length ? filtered.map((item, index) => {
6533
6615
  const isSelected = value.includes(item.value);
6534
6616
  const isDisabled = disabledOptions.includes(item.value);
6535
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
6617
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
6536
6618
  "li",
6537
6619
  {
6538
6620
  ref: (node) => {
@@ -6545,7 +6627,7 @@ var MultiCombobox = ({
6545
6627
  inputRef.current?.focus();
6546
6628
  },
6547
6629
  style: {
6548
- animationDelay: open ? `${index * 25}ms` : "0ms"
6630
+ animationDelay: open ? `${Math.min(index * 20, 200)}ms` : "0ms"
6549
6631
  },
6550
6632
  className: cn(
6551
6633
  "dropdown-item flex cursor-pointer items-center justify-between rounded-sm transition-colors",
@@ -6556,22 +6638,22 @@ var MultiCombobox = ({
6556
6638
  ),
6557
6639
  children: [
6558
6640
  item.label,
6559
- isSelected && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_lucide_react17.Check, { className: sizeStyles8[size].icon })
6641
+ isSelected && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_lucide_react16.Check, { className: sizeStyles8[size].icon })
6560
6642
  ]
6561
6643
  },
6562
6644
  item.value
6563
6645
  );
6564
- }) : /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
6646
+ }) : /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
6565
6647
  "li",
6566
6648
  {
6567
6649
  className: cn(
6568
6650
  "px-3 py-8 text-center text-muted-foreground",
6569
6651
  size === "lg" ? "text-base" : size === "sm" ? "text-xs" : "text-sm"
6570
6652
  ),
6571
- children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "flex flex-col items-center gap-2 animate-in fade-in-0 zoom-in-95 duration-300", children: [
6572
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_lucide_react17.SearchX, { className: "h-8 w-8 opacity-40 text-muted-foreground" }),
6573
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { children: emptyText }),
6574
- query && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("button", { type: "button", onClick: () => setQuery(""), className: "text-xs text-primary hover:underline", children: "Clear search" })
6653
+ children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "flex flex-col items-center gap-2 animate-in fade-in-0 zoom-in-95 duration-300", children: [
6654
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_lucide_react16.SearchX, { className: "h-8 w-8 opacity-40 text-muted-foreground" }),
6655
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { children: emptyText }),
6656
+ query && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("button", { type: "button", onClick: () => setQuery(""), className: "text-xs text-primary hover:underline", children: "Clear search" })
6575
6657
  ] })
6576
6658
  }
6577
6659
  ) })
@@ -6587,7 +6669,7 @@ var MultiCombobox = ({
6587
6669
 
6588
6670
  // ../../components/ui/RadioGroup.tsx
6589
6671
  var React25 = __toESM(require("react"), 1);
6590
- var import_jsx_runtime32 = require("react/jsx-runtime");
6672
+ var import_jsx_runtime31 = require("react/jsx-runtime");
6591
6673
  var RadioGroupContext = React25.createContext(void 0);
6592
6674
  var useRadioGroup = () => {
6593
6675
  const context = React25.useContext(RadioGroupContext);
@@ -6625,7 +6707,7 @@ var RadioGroup = React25.forwardRef(
6625
6707
  };
6626
6708
  const uniqueId = React25.useId();
6627
6709
  const radioName = name || `radio-group-${uniqueId}`;
6628
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
6710
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
6629
6711
  RadioGroupContext.Provider,
6630
6712
  {
6631
6713
  value: {
@@ -6636,8 +6718,8 @@ var RadioGroup = React25.forwardRef(
6636
6718
  size,
6637
6719
  variant
6638
6720
  },
6639
- children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "space-y-2", children: [
6640
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
6721
+ children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "space-y-2", children: [
6722
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
6641
6723
  "div",
6642
6724
  {
6643
6725
  ref,
@@ -6654,7 +6736,7 @@ var RadioGroup = React25.forwardRef(
6654
6736
  children
6655
6737
  }
6656
6738
  ),
6657
- error && errorMessage && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("p", { className: "text-sm text-destructive mt-1", children: errorMessage })
6739
+ error && errorMessage && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("p", { className: "text-sm text-destructive mt-1", children: errorMessage })
6658
6740
  ] })
6659
6741
  }
6660
6742
  );
@@ -6696,7 +6778,7 @@ var RadioGroupItem = React25.forwardRef(
6696
6778
  const Icon = icon;
6697
6779
  const radioId = id || `radio-${value}`;
6698
6780
  if (variant === "card") {
6699
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
6781
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
6700
6782
  "div",
6701
6783
  {
6702
6784
  className: cn(
@@ -6708,8 +6790,8 @@ var RadioGroupItem = React25.forwardRef(
6708
6790
  className
6709
6791
  ),
6710
6792
  children: [
6711
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex items-start gap-3", children: [
6712
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
6793
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "flex items-start gap-3", children: [
6794
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
6713
6795
  "button",
6714
6796
  {
6715
6797
  ref,
@@ -6728,22 +6810,22 @@ var RadioGroupItem = React25.forwardRef(
6728
6810
  sizeStyles7[size].radio
6729
6811
  ),
6730
6812
  onClick: () => onValueChange?.(value),
6731
- children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
6813
+ children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
6732
6814
  "span",
6733
6815
  {
6734
6816
  className: cn(
6735
6817
  "flex items-center justify-center w-full h-full rounded-full transition-all duration-200",
6736
6818
  isSelected && "bg-primary"
6737
6819
  ),
6738
- children: isSelected && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: cn("bg-primary-foreground rounded-full", sizeStyles7[size].dot) })
6820
+ children: isSelected && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: cn("bg-primary-foreground rounded-full", sizeStyles7[size].dot) })
6739
6821
  }
6740
6822
  )
6741
6823
  }
6742
6824
  ),
6743
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex-1 min-w-0", children: [
6744
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex items-center gap-2", children: [
6745
- Icon && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Icon, { className: "h-4 w-4 text-foreground" }),
6746
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
6825
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "flex-1 min-w-0", children: [
6826
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "flex items-center gap-2", children: [
6827
+ Icon && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Icon, { className: "h-4 w-4 text-foreground" }),
6828
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
6747
6829
  "label",
6748
6830
  {
6749
6831
  htmlFor: radioId,
@@ -6755,10 +6837,10 @@ var RadioGroupItem = React25.forwardRef(
6755
6837
  }
6756
6838
  )
6757
6839
  ] }),
6758
- description && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("p", { className: "text-muted-foreground mt-1 text-xs", children: description })
6840
+ description && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("p", { className: "text-muted-foreground mt-1 text-xs", children: description })
6759
6841
  ] })
6760
6842
  ] }),
6761
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
6843
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
6762
6844
  "input",
6763
6845
  {
6764
6846
  type: "radio",
@@ -6776,7 +6858,7 @@ var RadioGroupItem = React25.forwardRef(
6776
6858
  );
6777
6859
  }
6778
6860
  if (variant === "button") {
6779
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
6861
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
6780
6862
  "button",
6781
6863
  {
6782
6864
  ref,
@@ -6798,9 +6880,9 @@ var RadioGroupItem = React25.forwardRef(
6798
6880
  ),
6799
6881
  onClick: () => onValueChange?.(value),
6800
6882
  children: [
6801
- Icon && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Icon, { className: "h-4 w-4" }),
6883
+ Icon && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Icon, { className: "h-4 w-4" }),
6802
6884
  label || children,
6803
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
6885
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
6804
6886
  "input",
6805
6887
  {
6806
6888
  type: "radio",
@@ -6817,8 +6899,8 @@ var RadioGroupItem = React25.forwardRef(
6817
6899
  }
6818
6900
  );
6819
6901
  }
6820
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: cn("flex items-center gap-2", className), children: [
6821
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
6902
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: cn("flex items-center gap-2", className), children: [
6903
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
6822
6904
  "button",
6823
6905
  {
6824
6906
  ref,
@@ -6837,19 +6919,19 @@ var RadioGroupItem = React25.forwardRef(
6837
6919
  sizeStyles7[size].radio
6838
6920
  ),
6839
6921
  onClick: () => onValueChange?.(value),
6840
- children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
6922
+ children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
6841
6923
  "span",
6842
6924
  {
6843
6925
  className: cn(
6844
6926
  "flex items-center justify-center w-full h-full rounded-full transition-all duration-200",
6845
6927
  isSelected && "bg-primary"
6846
6928
  ),
6847
- children: isSelected && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: cn("bg-primary-foreground rounded-full", sizeStyles7[size].dot) })
6929
+ children: isSelected && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: cn("bg-primary-foreground rounded-full", sizeStyles7[size].dot) })
6848
6930
  }
6849
6931
  )
6850
6932
  }
6851
6933
  ),
6852
- (label || children) && /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
6934
+ (label || children) && /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
6853
6935
  "label",
6854
6936
  {
6855
6937
  htmlFor: radioId,
@@ -6860,15 +6942,15 @@ var RadioGroupItem = React25.forwardRef(
6860
6942
  isDisabled && "cursor-not-allowed opacity-50"
6861
6943
  ),
6862
6944
  children: [
6863
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex items-center gap-2", children: [
6864
- Icon && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Icon, { className: "h-4 w-4" }),
6865
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { children: label || children })
6945
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "flex items-center gap-2", children: [
6946
+ Icon && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Icon, { className: "h-4 w-4" }),
6947
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { children: label || children })
6866
6948
  ] }),
6867
- description && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("p", { className: "text-muted-foreground mt-0.5 text-xs", children: description })
6949
+ description && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("p", { className: "text-muted-foreground mt-0.5 text-xs", children: description })
6868
6950
  ]
6869
6951
  }
6870
6952
  ),
6871
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
6953
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
6872
6954
  "input",
6873
6955
  {
6874
6956
  type: "radio",
@@ -6888,7 +6970,7 @@ RadioGroupItem.displayName = "RadioGroupItem";
6888
6970
 
6889
6971
  // ../../components/ui/Slider.tsx
6890
6972
  var React26 = __toESM(require("react"), 1);
6891
- var import_jsx_runtime33 = require("react/jsx-runtime");
6973
+ var import_jsx_runtime32 = require("react/jsx-runtime");
6892
6974
  var SIZE_STYLES = {
6893
6975
  sm: {
6894
6976
  track: "h-1",
@@ -6948,20 +7030,20 @@ var Slider = React26.forwardRef(
6948
7030
  const displayValue = formatValue ? formatValue(currentValue) : currentValue.toString();
6949
7031
  if (orientation === "vertical") {
6950
7032
  }
6951
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: cn("w-full space-y-2", containerClassName), children: [
6952
- (label || showValue) && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex items-center justify-between", children: [
6953
- label && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("label", { className: cn("text-sm font-medium text-foreground", labelClassName), children: label }),
6954
- showValue && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: cn("text-xs font-mono text-muted-foreground min-w-[2rem] text-right", valueClassName), children: displayValue })
7033
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: cn("w-full space-y-2", containerClassName), children: [
7034
+ (label || showValue) && /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex items-center justify-between", children: [
7035
+ label && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("label", { className: cn("text-sm font-medium text-foreground", labelClassName), children: label }),
7036
+ showValue && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: cn("text-xs font-mono text-muted-foreground min-w-[2rem] text-right", valueClassName), children: displayValue })
6955
7037
  ] }),
6956
- /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: cn("relative flex items-center", sizeStyles8.container), children: [
6957
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: cn("w-full rounded-full bg-secondary relative overflow-hidden", sizeStyles8.track, trackClassName), children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
7038
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: cn("relative flex items-center", sizeStyles8.container), children: [
7039
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: cn("w-full rounded-full bg-secondary relative overflow-hidden", sizeStyles8.track, trackClassName), children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
6958
7040
  "div",
6959
7041
  {
6960
7042
  className: "absolute left-0 top-0 h-full bg-primary rounded-full transition-all duration-150 ease-out",
6961
7043
  style: { width: `${percentage}%` }
6962
7044
  }
6963
7045
  ) }),
6964
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
7046
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
6965
7047
  "input",
6966
7048
  {
6967
7049
  ref,
@@ -7025,9 +7107,9 @@ var Slider = React26.forwardRef(
7025
7107
  Slider.displayName = "Slider";
7026
7108
 
7027
7109
  // ../../components/ui/OverlayControls.tsx
7028
- var import_lucide_react18 = require("lucide-react");
7110
+ var import_lucide_react17 = require("lucide-react");
7029
7111
  var import_react16 = __toESM(require("react"), 1);
7030
- var import_jsx_runtime34 = require("react/jsx-runtime");
7112
+ var import_jsx_runtime33 = require("react/jsx-runtime");
7031
7113
  function OverlayControls({
7032
7114
  mode,
7033
7115
  value,
@@ -7250,41 +7332,41 @@ function OverlayControls({
7250
7332
  const handleSliderMouseLeave = () => {
7251
7333
  setPreviewData(null);
7252
7334
  };
7253
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_jsx_runtime34.Fragment, { children: [
7254
- keyboardFeedback && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
7335
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_jsx_runtime33.Fragment, { children: [
7336
+ keyboardFeedback && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
7255
7337
  "div",
7256
7338
  {
7257
7339
  className: cn(
7258
7340
  "absolute inset-0 flex items-center pointer-events-none z-50",
7259
7341
  keyboardFeedback.type === "seek" && (keyboardFeedback.value ?? 0) > 0 ? "justify-end pr-32" : keyboardFeedback.type === "seek" && (keyboardFeedback.value ?? 0) < 0 ? "justify-start pl-32" : "justify-center"
7260
7342
  ),
7261
- children: /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("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: [
7262
- keyboardFeedback.type === "play" && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_lucide_react18.Play, { className: "w-16 h-16 text-white", fill: "white" }),
7263
- keyboardFeedback.type === "pause" && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_lucide_react18.Pause, { className: "w-16 h-16 text-white", fill: "white" }),
7264
- keyboardFeedback.type === "seek" && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "flex items-center gap-3", children: [
7265
- (keyboardFeedback.value ?? 0) > 0 ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_lucide_react18.RotateCw, { className: "w-12 h-12 text-white" }) : /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_lucide_react18.RotateCcw, { className: "w-12 h-12 text-white" }),
7266
- /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("span", { className: "text-3xl font-bold text-white", children: [
7343
+ children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("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: [
7344
+ keyboardFeedback.type === "play" && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react17.Play, { className: "w-16 h-16 text-white", fill: "white" }),
7345
+ keyboardFeedback.type === "pause" && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react17.Pause, { className: "w-16 h-16 text-white", fill: "white" }),
7346
+ keyboardFeedback.type === "seek" && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex items-center gap-3", children: [
7347
+ (keyboardFeedback.value ?? 0) > 0 ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react17.RotateCw, { className: "w-12 h-12 text-white" }) : /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react17.RotateCcw, { className: "w-12 h-12 text-white" }),
7348
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("span", { className: "text-3xl font-bold text-white", children: [
7267
7349
  keyboardFeedback.value && keyboardFeedback.value > 0 ? "+" : "",
7268
7350
  keyboardFeedback.value,
7269
7351
  "s"
7270
7352
  ] })
7271
7353
  ] }),
7272
- keyboardFeedback.type === "volume" && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "flex items-center gap-3", children: [
7273
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_lucide_react18.Volume2, { className: "w-12 h-12 text-white" }),
7274
- /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "flex flex-col gap-1.5", children: [
7275
- /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("span", { className: "text-2xl font-bold text-white", children: [
7354
+ keyboardFeedback.type === "volume" && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex items-center gap-3", children: [
7355
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react17.Volume2, { className: "w-12 h-12 text-white" }),
7356
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex flex-col gap-1.5", children: [
7357
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("span", { className: "text-2xl font-bold text-white", children: [
7276
7358
  keyboardFeedback.value,
7277
7359
  "%"
7278
7360
  ] }),
7279
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: "w-32 h-1.5 bg-white/30 rounded-full overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: "h-full bg-white rounded-full transition-all", style: { width: `${keyboardFeedback.value}%` } }) })
7361
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "w-32 h-1.5 bg-white/30 rounded-full overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "h-full bg-white rounded-full transition-all", style: { width: `${keyboardFeedback.value}%` } }) })
7280
7362
  ] })
7281
7363
  ] }),
7282
- keyboardFeedback.type === "mute" && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_lucide_react18.VolumeX, { className: "w-16 h-16 text-white" }),
7283
- keyboardFeedback.type === "unmute" && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_lucide_react18.Volume2, { className: "w-16 h-16 text-white" })
7364
+ keyboardFeedback.type === "mute" && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react17.VolumeX, { className: "w-16 h-16 text-white" }),
7365
+ keyboardFeedback.type === "unmute" && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react17.Volume2, { className: "w-16 h-16 text-white" })
7284
7366
  ] })
7285
7367
  }
7286
7368
  ),
7287
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
7369
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
7288
7370
  "div",
7289
7371
  {
7290
7372
  className: cn(
@@ -7293,9 +7375,9 @@ function OverlayControls({
7293
7375
  autoHide && !controlsVisible && "opacity-0 pointer-events-none",
7294
7376
  className
7295
7377
  ),
7296
- children: /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "px-4", children: [
7297
- /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { ref: sliderRef, onMouseMove: handleSliderMouseMove, onMouseLeave: handleSliderMouseLeave, className: "relative", children: [
7298
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
7378
+ children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "px-4", children: [
7379
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { ref: sliderRef, onMouseMove: handleSliderMouseMove, onMouseLeave: handleSliderMouseLeave, className: "relative", children: [
7380
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
7299
7381
  Slider,
7300
7382
  {
7301
7383
  min: 0,
@@ -7320,14 +7402,14 @@ function OverlayControls({
7320
7402
  noFocus: true
7321
7403
  }
7322
7404
  ),
7323
- previewData && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("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__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "bg-background/95 backdrop-blur rounded-md border border-border shadow-lg overflow-hidden", children: [
7324
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("img", { src: previewData.url, alt: "Preview", className: "w-40 h-24 object-cover" }),
7325
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: "px-2 py-1 text-xs font-mono text-center bg-background/80", children: formatTime3(previewData.time) })
7326
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: "px-3 py-1.5 rounded-md bg-background/90 backdrop-blur border border-border shadow-lg", children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: "text-xs font-mono text-center", children: formatTime3(previewData.time) }) }) })
7405
+ previewData && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("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__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "bg-background/95 backdrop-blur rounded-md border border-border shadow-lg overflow-hidden", children: [
7406
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("img", { src: previewData.url, alt: "Preview", className: "w-40 h-24 object-cover" }),
7407
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "px-2 py-1 text-xs font-mono text-center bg-background/80", children: formatTime3(previewData.time) })
7408
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "px-3 py-1.5 rounded-md bg-background/90 backdrop-blur border border-border shadow-lg", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "text-xs font-mono text-center", children: formatTime3(previewData.time) }) }) })
7327
7409
  ] }),
7328
- showControlsBar && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "mt-2 flex items-center justify-between gap-2", children: [
7329
- /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "flex items-center gap-2", children: [
7330
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
7410
+ showControlsBar && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "mt-2 flex items-center justify-between gap-2", children: [
7411
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex items-center gap-2", children: [
7412
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
7331
7413
  Button_default,
7332
7414
  {
7333
7415
  variant: "ghost",
@@ -7335,10 +7417,10 @@ function OverlayControls({
7335
7417
  onClick: onTogglePlay,
7336
7418
  title: playing ? "T\u1EA1m d\u1EEBng" : "Ph\xE1t",
7337
7419
  className: "bg-background/60 hover:bg-background/80 border-transparent shadow-sm outline-none focus:outline-none focus:ring-0",
7338
- children: playing ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_lucide_react18.Pause, { className: "w-4 h-4" }) : /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_lucide_react18.Play, { className: "w-4 h-4" })
7420
+ children: playing ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react17.Pause, { className: "w-4 h-4" }) : /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react17.Play, { className: "w-4 h-4" })
7339
7421
  }
7340
7422
  ),
7341
- onSkip && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
7423
+ onSkip && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
7342
7424
  Button_default,
7343
7425
  {
7344
7426
  variant: "ghost",
@@ -7346,10 +7428,10 @@ function OverlayControls({
7346
7428
  onClick: () => onSkip(-skipSeconds),
7347
7429
  title: `L\xF9i ${skipSeconds}s`,
7348
7430
  className: "bg-background/60 hover:bg-background/80 border-transparent shadow-sm outline-none focus:outline-none focus:ring-0",
7349
- children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_lucide_react18.RotateCcw, { className: "w-4 h-4" })
7431
+ children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react17.RotateCcw, { className: "w-4 h-4" })
7350
7432
  }
7351
7433
  ),
7352
- onSkip && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
7434
+ onSkip && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
7353
7435
  Button_default,
7354
7436
  {
7355
7437
  variant: "ghost",
@@ -7357,16 +7439,16 @@ function OverlayControls({
7357
7439
  onClick: () => onSkip(skipSeconds),
7358
7440
  title: `Tua ${skipSeconds}s`,
7359
7441
  className: "bg-background/60 hover:bg-background/80 border-transparent shadow-sm outline-none focus:outline-none focus:ring-0",
7360
- children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_lucide_react18.RotateCw, { className: "w-4 h-4" })
7442
+ children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react17.RotateCw, { className: "w-4 h-4" })
7361
7443
  }
7362
7444
  ),
7363
- (showTime ?? true) && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("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: [
7445
+ (showTime ?? true) && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("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: [
7364
7446
  formatTime3(dragValue),
7365
7447
  " / ",
7366
7448
  formatTime3(max)
7367
7449
  ] }),
7368
- /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "flex items-center gap-2", children: [
7369
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
7450
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex items-center gap-2", children: [
7451
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
7370
7452
  Button_default,
7371
7453
  {
7372
7454
  variant: "ghost",
@@ -7374,10 +7456,10 @@ function OverlayControls({
7374
7456
  onClick: onToggleMute,
7375
7457
  title: muted ? "B\u1EADt ti\u1EBFng" : "T\u1EAFt ti\u1EBFng",
7376
7458
  className: "bg-background/60 hover:bg-background/80 border-transparent shadow-sm outline-none focus:outline-none focus:ring-0",
7377
- children: muted || (volume ?? 1) === 0 ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_lucide_react18.VolumeX, { className: "w-4 h-4" }) : /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_lucide_react18.Volume2, { className: "w-4 h-4" })
7459
+ children: muted || (volume ?? 1) === 0 ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react17.VolumeX, { className: "w-4 h-4" }) : /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react17.Volume2, { className: "w-4 h-4" })
7378
7460
  }
7379
7461
  ),
7380
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: "w-24", children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
7462
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "w-24", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
7381
7463
  Slider,
7382
7464
  {
7383
7465
  min: 0,
@@ -7392,8 +7474,8 @@ function OverlayControls({
7392
7474
  ) })
7393
7475
  ] })
7394
7476
  ] }),
7395
- /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "flex items-center gap-2 relative", children: [
7396
- onGoLive && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
7477
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex items-center gap-2 relative", children: [
7478
+ onGoLive && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
7397
7479
  Button_default,
7398
7480
  {
7399
7481
  variant: "ghost",
@@ -7402,13 +7484,13 @@ function OverlayControls({
7402
7484
  title: "Tr\u1EF1c ti\u1EBFp (v\u1EC1 Live)",
7403
7485
  className: "bg-background/60 hover:bg-background/80 border-transparent shadow-sm outline-none focus:outline-none focus:ring-0",
7404
7486
  children: [
7405
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_lucide_react18.Dot, { className: "w-10 h-10 text-destructive" }),
7487
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react17.Dot, { className: "w-10 h-10 text-destructive" }),
7406
7488
  "Tr\u1EF1c ti\u1EBFp"
7407
7489
  ]
7408
7490
  }
7409
7491
  ),
7410
- onChangeRate && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "relative", ref: rateWrapRef, children: [
7411
- /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
7492
+ onChangeRate && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "relative", ref: rateWrapRef, children: [
7493
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
7412
7494
  Button_default,
7413
7495
  {
7414
7496
  variant: "ghost",
@@ -7422,7 +7504,7 @@ function OverlayControls({
7422
7504
  ]
7423
7505
  }
7424
7506
  ),
7425
- rateOpen && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("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__ */ (0, import_jsx_runtime34.jsxs)(
7507
+ rateOpen && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("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__ */ (0, import_jsx_runtime33.jsxs)(
7426
7508
  "button",
7427
7509
  {
7428
7510
  onClick: () => {
@@ -7438,7 +7520,7 @@ function OverlayControls({
7438
7520
  r
7439
7521
  )) })
7440
7522
  ] }),
7441
- onToggleFullscreen && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
7523
+ onToggleFullscreen && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
7442
7524
  Button_default,
7443
7525
  {
7444
7526
  variant: "ghost",
@@ -7446,7 +7528,7 @@ function OverlayControls({
7446
7528
  onClick: onToggleFullscreen,
7447
7529
  title: "To\xE0n m\xE0n h\xECnh",
7448
7530
  className: "px-3 bg-background/60 hover:bg-background/80 border-transparent shadow-sm outline-none focus:outline-none focus:ring-0",
7449
- children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_lucide_react18.Maximize2, { className: "w-4 h-4" })
7531
+ children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_lucide_react17.Maximize2, { className: "w-4 h-4" })
7450
7532
  }
7451
7533
  )
7452
7534
  ] })
@@ -7459,8 +7541,8 @@ function OverlayControls({
7459
7541
 
7460
7542
  // ../../components/ui/CategoryTreeSelect.tsx
7461
7543
  var import_react17 = require("react");
7462
- var import_lucide_react19 = require("lucide-react");
7463
- var import_jsx_runtime35 = require("react/jsx-runtime");
7544
+ var import_lucide_react18 = require("lucide-react");
7545
+ var import_jsx_runtime34 = require("react/jsx-runtime");
7464
7546
  function CategoryTreeSelect({ categories, value, onChange, placeholder = "Ch\u1ECDn danh m\u1EE5c", disabled }) {
7465
7547
  const [isOpen, setIsOpen] = (0, import_react17.useState)(false);
7466
7548
  const [expandedNodes, setExpandedNodes] = (0, import_react17.useState)(/* @__PURE__ */ new Set());
@@ -7502,8 +7584,8 @@ function CategoryTreeSelect({ categories, value, onChange, placeholder = "Ch\u1E
7502
7584
  const hasChildren = children.length > 0;
7503
7585
  const isExpanded = expandedNodes.has(category.id);
7504
7586
  const isSelected = value.includes(category.id);
7505
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { children: [
7506
- /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
7587
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { children: [
7588
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
7507
7589
  "div",
7508
7590
  {
7509
7591
  className: cn(
@@ -7514,14 +7596,14 @@ function CategoryTreeSelect({ categories, value, onChange, placeholder = "Ch\u1E
7514
7596
  ),
7515
7597
  style: { paddingLeft: `${level * 1.5 + 0.75}rem` },
7516
7598
  children: [
7517
- isSelected && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
7599
+ isSelected && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
7518
7600
  "span",
7519
7601
  {
7520
7602
  "aria-hidden": true,
7521
7603
  className: "absolute left-0 top-0 bottom-0 w-1 bg-primary"
7522
7604
  }
7523
7605
  ),
7524
- hasChildren ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
7606
+ hasChildren ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
7525
7607
  "button",
7526
7608
  {
7527
7609
  type: "button",
@@ -7530,39 +7612,39 @@ function CategoryTreeSelect({ categories, value, onChange, placeholder = "Ch\u1E
7530
7612
  toggleExpand(category.id);
7531
7613
  },
7532
7614
  className: "p-0.5 hover:bg-accent rounded",
7533
- children: isExpanded ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_lucide_react19.ChevronDown, { className: "w-4 h-4" }) : /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_lucide_react19.ChevronRight, { className: "w-4 h-4" })
7615
+ children: isExpanded ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_lucide_react18.ChevronDown, { className: "w-4 h-4" }) : /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_lucide_react18.ChevronRight, { className: "w-4 h-4" })
7534
7616
  }
7535
- ) : /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "w-5" }),
7536
- /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
7617
+ ) : /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "w-5" }),
7618
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
7537
7619
  "div",
7538
7620
  {
7539
7621
  onClick: () => handleSelect(category.id, category),
7540
7622
  className: "flex items-center gap-2 flex-1",
7541
7623
  children: [
7542
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
7624
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
7543
7625
  "div",
7544
7626
  {
7545
7627
  className: cn(
7546
7628
  "w-4 h-4 border-2 rounded flex items-center justify-center transition-colors",
7547
7629
  isSelected ? "bg-primary border-primary" : "border-muted-foreground/30"
7548
7630
  ),
7549
- children: isSelected && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_lucide_react19.Check, { className: "w-3 h-3 text-primary-foreground" })
7631
+ children: isSelected && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_lucide_react18.Check, { className: "w-3 h-3 text-primary-foreground" })
7550
7632
  }
7551
7633
  ),
7552
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: cn("text-sm", isSelected && "font-medium text-primary"), children: category.name })
7634
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: cn("text-sm", isSelected && "font-medium text-primary"), children: category.name })
7553
7635
  ]
7554
7636
  }
7555
7637
  )
7556
7638
  ]
7557
7639
  }
7558
7640
  ),
7559
- hasChildren && isExpanded && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { children: children.map((child) => renderCategory(child, level + 1)) })
7641
+ hasChildren && isExpanded && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { children: children.map((child) => renderCategory(child, level + 1)) })
7560
7642
  ] }, category.id);
7561
7643
  };
7562
7644
  const selectedCount = value.length;
7563
7645
  const displayText = selectedCount > 0 ? `\u0110\xE3 ch\u1ECDn ${selectedCount} danh m\u1EE5c` : placeholder;
7564
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "relative", children: [
7565
- /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
7646
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "relative", children: [
7647
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
7566
7648
  "button",
7567
7649
  {
7568
7650
  type: "button",
@@ -7578,14 +7660,14 @@ function CategoryTreeSelect({ categories, value, onChange, placeholder = "Ch\u1E
7578
7660
  isOpen && "border-primary"
7579
7661
  ),
7580
7662
  children: [
7581
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: cn("text-sm", selectedCount === 0 && "text-muted-foreground"), children: displayText }),
7582
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_lucide_react19.ChevronDown, { className: cn("w-4 h-4 transition-transform", isOpen && "transform rotate-180") })
7663
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: cn("text-sm", selectedCount === 0 && "text-muted-foreground"), children: displayText }),
7664
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_lucide_react18.ChevronDown, { className: cn("w-4 h-4 transition-transform", isOpen && "transform rotate-180") })
7583
7665
  ]
7584
7666
  }
7585
7667
  ),
7586
- isOpen && !disabled && /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_jsx_runtime35.Fragment, { children: [
7587
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "fixed inset-0 z-10", onClick: () => setIsOpen(false) }),
7588
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
7668
+ isOpen && !disabled && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_jsx_runtime34.Fragment, { children: [
7669
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: "fixed inset-0 z-10", onClick: () => setIsOpen(false) }),
7670
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
7589
7671
  "div",
7590
7672
  {
7591
7673
  className: cn(
@@ -7593,7 +7675,7 @@ function CategoryTreeSelect({ categories, value, onChange, placeholder = "Ch\u1E
7593
7675
  "rounded-md border bg-popover text-popover-foreground shadow-md",
7594
7676
  "backdrop-blur-sm bg-popover/95 border-border/60"
7595
7677
  ),
7596
- children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "p-1", children: parentCategories.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("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)) })
7678
+ children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: "p-1", children: parentCategories.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("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)) })
7597
7679
  }
7598
7680
  )
7599
7681
  ] })
@@ -7602,9 +7684,9 @@ function CategoryTreeSelect({ categories, value, onChange, placeholder = "Ch\u1E
7602
7684
 
7603
7685
  // ../../components/ui/ImageUpload.tsx
7604
7686
  var import_react18 = require("react");
7605
- var import_lucide_react20 = require("lucide-react");
7687
+ var import_lucide_react19 = require("lucide-react");
7606
7688
  var import_next_intl6 = require("next-intl");
7607
- var import_jsx_runtime36 = require("react/jsx-runtime");
7689
+ var import_jsx_runtime35 = require("react/jsx-runtime");
7608
7690
  function ImageUpload({
7609
7691
  onUpload,
7610
7692
  onRemove,
@@ -7631,94 +7713,106 @@ function ImageUpload({
7631
7713
  md: "w-24 h-24",
7632
7714
  lg: "w-32 h-32"
7633
7715
  };
7634
- const handleDragOver = (0, import_react18.useCallback)((e) => {
7635
- e.preventDefault();
7636
- if (!disabled) {
7637
- setIsDragging(true);
7638
- }
7639
- }, [disabled]);
7716
+ const handleDragOver = (0, import_react18.useCallback)(
7717
+ (e) => {
7718
+ e.preventDefault();
7719
+ if (!disabled) {
7720
+ setIsDragging(true);
7721
+ }
7722
+ },
7723
+ [disabled]
7724
+ );
7640
7725
  const handleDragLeave = (0, import_react18.useCallback)((e) => {
7641
7726
  e.preventDefault();
7642
7727
  setIsDragging(false);
7643
7728
  }, []);
7644
- const handleFiles = (0, import_react18.useCallback)(async (files) => {
7645
- if (files.length === 0) return;
7646
- const validFiles = files.filter((file) => {
7647
- if (file.size > maxSize * 1024 * 1024) {
7648
- addToast({
7649
- type: "error",
7650
- message: `File "${file.name}" is too large. Max size: ${maxSize}MB`
7651
- });
7652
- return false;
7653
- }
7654
- if (!file.type.startsWith("image/")) {
7729
+ const handleFiles = (0, import_react18.useCallback)(
7730
+ async (files) => {
7731
+ if (files.length === 0) return;
7732
+ const validFiles = files.filter((file) => {
7733
+ if (file.size > maxSize * 1024 * 1024) {
7734
+ addToast({
7735
+ type: "error",
7736
+ message: `File "${file.name}" is too large. Max size: ${maxSize}MB`
7737
+ });
7738
+ return false;
7739
+ }
7740
+ if (!file.type.startsWith("image/")) {
7741
+ addToast({
7742
+ type: "error",
7743
+ message: `File "${file.name}" is not a valid image`
7744
+ });
7745
+ return false;
7746
+ }
7747
+ return true;
7748
+ });
7749
+ if (validFiles.length === 0) return;
7750
+ setUploading(true);
7751
+ try {
7752
+ for (const file of validFiles) {
7753
+ const formData = new FormData();
7754
+ formData.append("file", file);
7755
+ const response = {
7756
+ id: Date.now(),
7757
+ path: "",
7758
+ url: URL.createObjectURL(file),
7759
+ originalName: file.name,
7760
+ size: file.size,
7761
+ mimeType: file.type,
7762
+ width: 0,
7763
+ height: 0,
7764
+ formattedSize: `${(file.size / 1024).toFixed(1)} KB`
7765
+ };
7766
+ const newImage = {
7767
+ id: response.id,
7768
+ path: response.path,
7769
+ url: response.url,
7770
+ originalName: response.originalName,
7771
+ size: response.size,
7772
+ mimeType: response.mimeType,
7773
+ width: response.width,
7774
+ height: response.height,
7775
+ formattedSize: response.formattedSize
7776
+ };
7777
+ setUploadedImages((prev) => [...prev, newImage]);
7778
+ onUpload?.(newImage);
7779
+ addToast({
7780
+ type: "success",
7781
+ message: `"${file.name}" uploaded successfully`
7782
+ });
7783
+ }
7784
+ } catch (error) {
7785
+ console.error("Upload error:", error);
7655
7786
  addToast({
7656
7787
  type: "error",
7657
- message: `File "${file.name}" is not a valid image`
7788
+ message: error.message || "Upload failed"
7658
7789
  });
7659
- return false;
7790
+ } finally {
7791
+ setUploading(false);
7660
7792
  }
7661
- return true;
7662
- });
7663
- if (validFiles.length === 0) return;
7664
- setUploading(true);
7665
- try {
7666
- for (const file of validFiles) {
7667
- const formData = new FormData();
7668
- formData.append("file", file);
7669
- const response = {
7670
- id: Date.now(),
7671
- path: "",
7672
- url: URL.createObjectURL(file),
7673
- originalName: file.name,
7674
- size: file.size,
7675
- mimeType: file.type,
7676
- width: 0,
7677
- height: 0,
7678
- formattedSize: `${(file.size / 1024).toFixed(1)} KB`
7679
- };
7680
- const newImage = {
7681
- id: response.id,
7682
- path: response.path,
7683
- url: response.url,
7684
- originalName: response.originalName,
7685
- size: response.size,
7686
- mimeType: response.mimeType,
7687
- width: response.width,
7688
- height: response.height,
7689
- formattedSize: response.formattedSize
7690
- };
7691
- setUploadedImages((prev) => [...prev, newImage]);
7692
- onUpload?.(newImage);
7693
- addToast({
7694
- type: "success",
7695
- message: `"${file.name}" uploaded successfully`
7696
- });
7793
+ },
7794
+ [maxSize, addToast, onUpload]
7795
+ );
7796
+ const handleDrop = (0, import_react18.useCallback)(
7797
+ (e) => {
7798
+ e.preventDefault();
7799
+ setIsDragging(false);
7800
+ if (disabled) return;
7801
+ const files = Array.from(e.dataTransfer.files);
7802
+ handleFiles(files);
7803
+ },
7804
+ [disabled, handleFiles]
7805
+ );
7806
+ const handleFileSelect = (0, import_react18.useCallback)(
7807
+ (e) => {
7808
+ const files = Array.from(e.target.files || []);
7809
+ handleFiles(files);
7810
+ if (fileInputRef.current) {
7811
+ fileInputRef.current.value = "";
7697
7812
  }
7698
- } catch (error) {
7699
- console.error("Upload error:", error);
7700
- addToast({
7701
- type: "error",
7702
- message: error.message || "Upload failed"
7703
- });
7704
- } finally {
7705
- setUploading(false);
7706
- }
7707
- }, [maxSize, addToast, onUpload]);
7708
- const handleDrop = (0, import_react18.useCallback)((e) => {
7709
- e.preventDefault();
7710
- setIsDragging(false);
7711
- if (disabled) return;
7712
- const files = Array.from(e.dataTransfer.files);
7713
- handleFiles(files);
7714
- }, [disabled, handleFiles]);
7715
- const handleFileSelect = (0, import_react18.useCallback)((e) => {
7716
- const files = Array.from(e.target.files || []);
7717
- handleFiles(files);
7718
- if (fileInputRef.current) {
7719
- fileInputRef.current.value = "";
7720
- }
7721
- }, [handleFiles]);
7813
+ },
7814
+ [handleFiles]
7815
+ );
7722
7816
  const handleRemoveImage = (imageId) => {
7723
7817
  setUploadedImages((prev) => prev.filter((img) => img.id !== Number(imageId)));
7724
7818
  onRemove?.(String(imageId));
@@ -7726,8 +7820,8 @@ function ImageUpload({
7726
7820
  const handleBrowseClick = () => {
7727
7821
  fileInputRef.current?.click();
7728
7822
  };
7729
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: cn("space-y-4", className), children: [
7730
- /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
7823
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: cn("space-y-4", className), children: [
7824
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
7731
7825
  "div",
7732
7826
  {
7733
7827
  className: cn(
@@ -7740,29 +7834,19 @@ function ImageUpload({
7740
7834
  onDragLeave: handleDragLeave,
7741
7835
  onDrop: handleDrop,
7742
7836
  children: [
7743
- uploading && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "absolute inset-0 bg-background/80 flex items-center justify-center rounded-lg", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "flex items-center gap-3", children: [
7744
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_lucide_react20.Loader2, { className: "w-6 h-6 animate-spin text-primary" }),
7745
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "text-sm font-medium", children: "Uploading..." })
7837
+ uploading && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "absolute inset-0 bg-background/80 flex items-center justify-center rounded-lg", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "flex items-center gap-3", children: [
7838
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_lucide_react19.Loader2, { className: "w-6 h-6 animate-spin text-primary" }),
7839
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "text-sm font-medium", children: "Uploading..." })
7746
7840
  ] }) }),
7747
- /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "space-y-4", children: [
7748
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "mx-auto w-12 h-12 bg-primary/10 rounded-full flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_lucide_react20.Upload, { className: "w-6 h-6 text-primary" }) }),
7749
- /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "space-y-2", children: [
7750
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { className: "text-muted-foreground", children: dragDropText || t("dragDropText") }),
7751
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
7752
- Button_default,
7753
- {
7754
- type: "button",
7755
- variant: "outline",
7756
- size: "sm",
7757
- onClick: handleBrowseClick,
7758
- disabled: disabled || uploading,
7759
- children: browseText || t("browseFiles")
7760
- }
7761
- )
7841
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "space-y-4", children: [
7842
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "mx-auto w-12 h-12 bg-primary/10 rounded-full flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_lucide_react19.Upload, { className: "w-6 h-6 text-primary" }) }),
7843
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "space-y-2", children: [
7844
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("p", { className: "text-muted-foreground", children: dragDropText || t("dragDropText") }),
7845
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Button_default, { type: "button", variant: "outline", size: "sm", onClick: handleBrowseClick, disabled: disabled || uploading, children: browseText || t("browseFiles") })
7762
7846
  ] }),
7763
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { className: "text-xs text-muted-foreground", children: supportedFormatsText || t("supportedFormats") })
7847
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("p", { className: "text-xs text-muted-foreground", children: supportedFormatsText || t("supportedFormats") })
7764
7848
  ] }),
7765
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
7849
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
7766
7850
  "input",
7767
7851
  {
7768
7852
  ref: fileInputRef,
@@ -7777,61 +7861,54 @@ function ImageUpload({
7777
7861
  ]
7778
7862
  }
7779
7863
  ),
7780
- showPreview && uploadedImages.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "space-y-3", children: [
7781
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("h4", { className: "text-sm font-medium", children: "Uploaded Images" }),
7782
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 gap-4", children: uploadedImages.map((image) => /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
7783
- "div",
7784
- {
7785
- className: "relative group bg-card border border-border rounded-lg p-3",
7786
- children: [
7787
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
7788
- Button_default,
7789
- {
7790
- variant: "danger",
7791
- size: "icon",
7792
- className: "absolute -top-2 -right-2 w-6 h-6 opacity-0 group-hover:opacity-100 transition-opacity z-10",
7793
- onClick: () => handleRemoveImage(image.id),
7794
- children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_lucide_react20.X, { className: "w-3 h-3" })
7864
+ showPreview && uploadedImages.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "space-y-3", children: [
7865
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("h4", { className: "text-sm font-medium", children: "Uploaded Images" }),
7866
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 gap-4", children: uploadedImages.map((image) => /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "relative group bg-card border border-border rounded-lg p-3", children: [
7867
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
7868
+ Button_default,
7869
+ {
7870
+ variant: "danger",
7871
+ size: "icon",
7872
+ className: "absolute -top-2 -right-2 w-6 h-6 opacity-0 group-hover:opacity-100 transition-opacity z-10",
7873
+ onClick: () => handleRemoveImage(image.id),
7874
+ children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_lucide_react19.X, { className: "w-3 h-3" })
7875
+ }
7876
+ ),
7877
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: cn("mx-auto mb-2 overflow-hidden rounded-md", previewSizes[previewSize]), children: [
7878
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
7879
+ "img",
7880
+ {
7881
+ src: image.url,
7882
+ alt: image.originalName,
7883
+ className: "w-full h-full object-cover",
7884
+ onError: (e) => {
7885
+ const target = e.target;
7886
+ target.style.display = "none";
7887
+ target.nextElementSibling?.classList.remove("hidden");
7795
7888
  }
7796
- ),
7797
- /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: cn("mx-auto mb-2 overflow-hidden rounded-md", previewSizes[previewSize]), children: [
7798
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
7799
- "img",
7800
- {
7801
- src: image.url,
7802
- alt: image.originalName,
7803
- className: "w-full h-full object-cover",
7804
- onError: (e) => {
7805
- const target = e.target;
7806
- target.style.display = "none";
7807
- target.nextElementSibling?.classList.remove("hidden");
7808
- }
7809
- }
7810
- ),
7811
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "hidden w-full h-full bg-muted flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_lucide_react20.Image, { className: "w-8 h-8 text-muted-foreground" }) })
7812
- ] }),
7813
- /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "space-y-1", children: [
7814
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { className: "text-xs font-medium truncate", title: image.originalName, children: image.originalName }),
7815
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { className: "text-xs text-muted-foreground", children: image.formattedSize }),
7816
- image.width && image.height && /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("p", { className: "text-xs text-muted-foreground", children: [
7817
- image.width,
7818
- " \xD7 ",
7819
- image.height
7820
- ] })
7821
- ] }),
7822
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "absolute top-1 left-1 w-5 h-5 bg-success rounded-full flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_lucide_react20.Check, { className: "w-3 h-3 text-success-foreground" }) })
7823
- ]
7824
- },
7825
- image.id
7826
- )) })
7889
+ }
7890
+ ),
7891
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "hidden w-full h-full bg-muted flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_lucide_react19.Image, { className: "w-8 h-8 text-muted-foreground" }) })
7892
+ ] }),
7893
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "space-y-1", children: [
7894
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("p", { className: "text-xs font-medium truncate", title: image.originalName, children: image.originalName }),
7895
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("p", { className: "text-xs text-muted-foreground", children: image.formattedSize }),
7896
+ image.width && image.height && /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("p", { className: "text-xs text-muted-foreground", children: [
7897
+ image.width,
7898
+ " \xD7 ",
7899
+ image.height
7900
+ ] })
7901
+ ] }),
7902
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "absolute top-1 left-1 w-5 h-5 bg-success rounded-full flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_lucide_react19.Check, { className: "w-3 h-3 text-success-foreground" }) })
7903
+ ] }, image.id)) })
7827
7904
  ] })
7828
7905
  ] });
7829
7906
  }
7830
7907
 
7831
7908
  // ../../components/ui/Carousel.tsx
7832
7909
  var React29 = __toESM(require("react"), 1);
7833
- var import_lucide_react21 = require("lucide-react");
7834
- var import_jsx_runtime37 = require("react/jsx-runtime");
7910
+ var import_lucide_react20 = require("lucide-react");
7911
+ var import_jsx_runtime36 = require("react/jsx-runtime");
7835
7912
  function Carousel({
7836
7913
  children,
7837
7914
  autoScroll = true,
@@ -7989,7 +8066,7 @@ function Carousel({
7989
8066
  };
7990
8067
  };
7991
8068
  const slideWidth = 100 / slidesToShow;
7992
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
8069
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
7993
8070
  "div",
7994
8071
  {
7995
8072
  ref: carouselRef,
@@ -8001,8 +8078,8 @@ function Carousel({
8001
8078
  "aria-roledescription": "carousel",
8002
8079
  tabIndex: 0,
8003
8080
  children: [
8004
- showProgress && autoScroll && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "absolute top-0 left-0 right-0 h-1 bg-muted z-20", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { ref: progressElRef, className: "h-full bg-primary", style: { width: "0%" } }) }),
8005
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
8081
+ showProgress && autoScroll && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "absolute top-0 left-0 right-0 h-1 bg-muted z-20", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { ref: progressElRef, className: "h-full bg-primary", style: { width: "0%" } }) }),
8082
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
8006
8083
  "div",
8007
8084
  {
8008
8085
  className: cn("flex", isHorizontal ? "flex-row" : "flex-col", containerClassName),
@@ -8017,7 +8094,7 @@ function Carousel({
8017
8094
  role: "group",
8018
8095
  "aria-atomic": "false",
8019
8096
  "aria-live": autoScroll ? "off" : "polite",
8020
- children: React29.Children.map(children, (child, idx) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
8097
+ children: React29.Children.map(children, (child, idx) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
8021
8098
  "div",
8022
8099
  {
8023
8100
  className: cn(
@@ -8040,14 +8117,14 @@ function Carousel({
8040
8117
  ))
8041
8118
  }
8042
8119
  ),
8043
- showArrows && totalSlides > slidesToShow && /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_jsx_runtime37.Fragment, { children: [
8044
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
8120
+ showArrows && totalSlides > slidesToShow && /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_jsx_runtime36.Fragment, { children: [
8121
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
8045
8122
  Button_default,
8046
8123
  {
8047
8124
  onClick: scrollPrev,
8048
8125
  variant: "ghost",
8049
8126
  size: "icon",
8050
- icon: import_lucide_react21.ChevronLeft,
8127
+ icon: import_lucide_react20.ChevronLeft,
8051
8128
  noHoverOverlay: true,
8052
8129
  disabled: !loop && currentIndex === 0,
8053
8130
  className: cn(
@@ -8057,13 +8134,13 @@ function Carousel({
8057
8134
  "aria-label": "Previous slide"
8058
8135
  }
8059
8136
  ),
8060
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
8137
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
8061
8138
  Button_default,
8062
8139
  {
8063
8140
  onClick: scrollNext,
8064
8141
  variant: "ghost",
8065
8142
  size: "icon",
8066
- icon: import_lucide_react21.ChevronRight,
8143
+ icon: import_lucide_react20.ChevronRight,
8067
8144
  noHoverOverlay: true,
8068
8145
  disabled: !loop && currentIndex >= maxIndex,
8069
8146
  className: cn(
@@ -8074,7 +8151,7 @@ function Carousel({
8074
8151
  }
8075
8152
  )
8076
8153
  ] }),
8077
- showDots && totalSlides > slidesToShow && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
8154
+ showDots && totalSlides > slidesToShow && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
8078
8155
  "div",
8079
8156
  {
8080
8157
  className: cn(
@@ -8083,7 +8160,7 @@ function Carousel({
8083
8160
  ),
8084
8161
  role: "tablist",
8085
8162
  "aria-label": "Carousel pagination",
8086
- children: Array.from({ length: maxIndex + 1 }, (_, idx) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
8163
+ children: Array.from({ length: maxIndex + 1 }, (_, idx) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
8087
8164
  "button",
8088
8165
  {
8089
8166
  onClick: () => scrollTo(idx),
@@ -8100,14 +8177,14 @@ function Carousel({
8100
8177
  ))
8101
8178
  }
8102
8179
  ),
8103
- showThumbnails && totalSlides > slidesToShow && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
8180
+ showThumbnails && totalSlides > slidesToShow && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
8104
8181
  "div",
8105
8182
  {
8106
8183
  className: cn(
8107
8184
  "absolute bottom-0 left-0 right-0 flex gap-2 p-4 bg-gradient-to-t from-black/50 to-transparent overflow-x-auto",
8108
8185
  isHorizontal ? "flex-row" : "flex-col"
8109
8186
  ),
8110
- children: React29.Children.map(children, (child, idx) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
8187
+ children: React29.Children.map(children, (child, idx) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
8111
8188
  "button",
8112
8189
  {
8113
8190
  onClick: () => scrollTo(idx),
@@ -8129,7 +8206,7 @@ function Carousel({
8129
8206
 
8130
8207
  // ../../components/ui/FallingIcons.tsx
8131
8208
  var import_react19 = __toESM(require("react"), 1);
8132
- var import_jsx_runtime38 = require("react/jsx-runtime");
8209
+ var import_jsx_runtime37 = require("react/jsx-runtime");
8133
8210
  var DEFAULT_COUNT = 24;
8134
8211
  var DEFAULT_SPEED_RANGE = [6, 14];
8135
8212
  var DEFAULT_SIZE_RANGE = [14, 28];
@@ -8224,8 +8301,8 @@ function FallingIcons({
8224
8301
  filter: `drop-shadow(0 0 ${4 * intensity}px ${glowColor}) drop-shadow(0 0 ${8 * intensity}px ${glowColor})`
8225
8302
  };
8226
8303
  }, [glow, glowColor, glowIntensity]);
8227
- const FallbackIcon = import_react19.default.useMemo(() => (props) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("svg", { viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", ...props, children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("circle", { cx: "12", cy: "12", r: "10" }) }), []);
8228
- const TheIcon = imageUrl ? ({ className: imgClassName }) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
8304
+ const FallbackIcon = import_react19.default.useMemo(() => (props) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("svg", { viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", ...props, children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("circle", { cx: "12", cy: "12", r: "10" }) }), []);
8305
+ const TheIcon = imageUrl ? ({ className: imgClassName }) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
8229
8306
  "img",
8230
8307
  {
8231
8308
  src: imageUrl,
@@ -8234,7 +8311,7 @@ function FallingIcons({
8234
8311
  draggable: false
8235
8312
  }
8236
8313
  ) : Icon || FallbackIcon;
8237
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
8314
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
8238
8315
  "div",
8239
8316
  {
8240
8317
  ref: containerRef,
@@ -8244,7 +8321,7 @@ function FallingIcons({
8244
8321
  ),
8245
8322
  style: { zIndex },
8246
8323
  children: [
8247
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("style", { children: `
8324
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("style", { children: `
8248
8325
  @keyframes ${FallName} {
8249
8326
  0% { transform: translate3d(0, -10vh, 0); opacity: 0; }
8250
8327
  10% { opacity: 1; }
@@ -8277,7 +8354,7 @@ function FallingIcons({
8277
8354
  }
8278
8355
  }
8279
8356
  ` }),
8280
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
8357
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
8281
8358
  "div",
8282
8359
  {
8283
8360
  className: cn(
@@ -8298,12 +8375,12 @@ function FallingIcons({
8298
8375
  });
8299
8376
  };
8300
8377
  const trailParticles = trail ? Array.from({ length: Math.min(5, Math.max(1, trailLength)) }) : [];
8301
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_react19.default.Fragment, { children: [
8378
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_react19.default.Fragment, { children: [
8302
8379
  trail && trailParticles.map((_, trailIndex) => {
8303
8380
  const trailDelay = p.delay - (trailIndex + 1) * 0.15;
8304
8381
  const trailOpacity = 1 - (trailIndex + 1) * (1 / (trailParticles.length + 1));
8305
8382
  const trailScale = 1 - (trailIndex + 1) * 0.15;
8306
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
8383
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
8307
8384
  "span",
8308
8385
  {
8309
8386
  className: cn("absolute top-0 will-change-transform pointer-events-none uv-falling-particle", colorClassName),
@@ -8317,7 +8394,7 @@ function FallingIcons({
8317
8394
  opacity: trailOpacity * 0.4,
8318
8395
  ["--fall"]: `${fallDist ?? (typeof window !== "undefined" ? window.innerHeight + 200 : 1200)}px`
8319
8396
  },
8320
- children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
8397
+ children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
8321
8398
  "span",
8322
8399
  {
8323
8400
  className: "inline-block uv-sway",
@@ -8329,7 +8406,7 @@ function FallingIcons({
8329
8406
  animationIterationCount: "infinite",
8330
8407
  ["--amp"]: `${Math.round(p.driftAmp)}px`
8331
8408
  },
8332
- children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
8409
+ children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
8333
8410
  "span",
8334
8411
  {
8335
8412
  className: "block",
@@ -8338,7 +8415,7 @@ function FallingIcons({
8338
8415
  height: p.size,
8339
8416
  ...glowStyles
8340
8417
  },
8341
- children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(TheIcon, { className: cn("w-full h-full text-primary/70", colorClassName) })
8418
+ children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(TheIcon, { className: cn("w-full h-full text-primary/70", colorClassName) })
8342
8419
  }
8343
8420
  )
8344
8421
  }
@@ -8347,7 +8424,7 @@ function FallingIcons({
8347
8424
  `${p.key}-trail-${trailIndex}`
8348
8425
  );
8349
8426
  }),
8350
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
8427
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
8351
8428
  "span",
8352
8429
  {
8353
8430
  className: cn("absolute top-0 will-change-transform pointer-events-auto uv-falling-particle", colorClassName),
@@ -8373,7 +8450,7 @@ function FallingIcons({
8373
8450
  return next;
8374
8451
  });
8375
8452
  },
8376
- children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
8453
+ children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
8377
8454
  "span",
8378
8455
  {
8379
8456
  className: "inline-block uv-sway",
@@ -8385,7 +8462,7 @@ function FallingIcons({
8385
8462
  animationIterationCount: "infinite",
8386
8463
  ["--amp"]: `${Math.round(p.driftAmp)}px`
8387
8464
  },
8388
- children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
8465
+ children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
8389
8466
  "span",
8390
8467
  {
8391
8468
  className: cn(
@@ -8401,7 +8478,7 @@ function FallingIcons({
8401
8478
  ["--popName"]: PopName,
8402
8479
  ...glowStyles
8403
8480
  },
8404
- children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(TheIcon, { className: cn("w-full h-full text-primary/70", colorClassName) })
8481
+ children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(TheIcon, { className: cn("w-full h-full text-primary/70", colorClassName) })
8405
8482
  }
8406
8483
  )
8407
8484
  }
@@ -8419,8 +8496,8 @@ function FallingIcons({
8419
8496
 
8420
8497
  // ../../components/ui/List.tsx
8421
8498
  var React31 = __toESM(require("react"), 1);
8422
- var import_lucide_react22 = require("lucide-react");
8423
- var import_jsx_runtime39 = require("react/jsx-runtime");
8499
+ var import_lucide_react21 = require("lucide-react");
8500
+ var import_jsx_runtime38 = require("react/jsx-runtime");
8424
8501
  var SIZE_STYLES2 = {
8425
8502
  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" },
8426
8503
  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" },
@@ -8436,11 +8513,11 @@ var BADGE_VARIANTS = {
8436
8513
  };
8437
8514
  var ListItemSkeleton = ({ size }) => {
8438
8515
  const sz = SIZE_STYLES2[size];
8439
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { className: cn("flex items-center gap-3 animate-pulse", sz.itemPad), children: [
8440
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: cn("rounded-full bg-muted shrink-0", sz.avatar) }),
8441
- /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { className: "flex-1 space-y-2", children: [
8442
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: "h-4 bg-muted rounded w-3/4" }),
8443
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: "h-3 bg-muted rounded w-1/2" })
8516
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: cn("flex items-center gap-3 animate-pulse", sz.itemPad), children: [
8517
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: cn("rounded-full bg-muted shrink-0", sz.avatar) }),
8518
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "flex-1 space-y-2", children: [
8519
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "h-4 bg-muted rounded w-3/4" }),
8520
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "h-3 bg-muted rounded w-1/2" })
8444
8521
  ] })
8445
8522
  ] });
8446
8523
  };
@@ -8474,12 +8551,12 @@ var ListRoot = React31.forwardRef(
8474
8551
  striped: "rounded-lg border border-border overflow-hidden"
8475
8552
  };
8476
8553
  if (loading2) {
8477
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(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__ */ (0, import_jsx_runtime39.jsx)(ListItemSkeleton, { size }, i)) });
8554
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(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__ */ (0, import_jsx_runtime38.jsx)(ListItemSkeleton, { size }, i)) });
8478
8555
  }
8479
8556
  if (!hasChildren && emptyText) {
8480
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(Comp, { ref, className: cn("group/list", variantClasses[variant], inset && "p-1.5 md:p-2", className), ...rest, children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: "text-center py-8 text-muted-foreground text-sm", children: emptyText }) });
8557
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Comp, { ref, className: cn("group/list", variantClasses[variant], inset && "p-1.5 md:p-2", className), ...rest, children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "text-center py-8 text-muted-foreground text-sm", children: emptyText }) });
8481
8558
  }
8482
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
8559
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
8483
8560
  Comp,
8484
8561
  {
8485
8562
  ref,
@@ -8562,25 +8639,25 @@ var ListItem = React31.forwardRef(
8562
8639
  }
8563
8640
  }
8564
8641
  } : {};
8565
- const inner = /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_jsx_runtime39.Fragment, { children: [
8566
- /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(
8642
+ const inner = /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
8643
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
8567
8644
  "div",
8568
8645
  {
8569
8646
  className: cn("flex items-center gap-3", padding, "group/item relative"),
8570
8647
  ...headerProps,
8571
8648
  children: [
8572
- avatar && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: cn("shrink-0", sz.avatar), children: typeof avatar === "string" ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("img", { src: avatar, alt: "", className: cn("rounded-full object-cover", sz.avatar) }) : avatar }),
8573
- Left && !avatar && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { className: cn("text-muted-foreground shrink-0", sz.icon), children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(Left, { className: cn(sz.icon) }) }),
8574
- /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { className: "min-w-0 flex-1", children: [
8575
- /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { className: "flex items-center gap-2", children: [
8576
- label && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: cn(sz.label, "text-foreground font-medium truncate"), children: label }),
8577
- badge && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { className: cn("px-2 py-0.5 rounded-full text-[11px] font-medium shrink-0", BADGE_VARIANTS[badgeVariant]), children: badge })
8649
+ avatar && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: cn("shrink-0", sz.avatar), children: typeof avatar === "string" ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("img", { src: avatar, alt: "", className: cn("rounded-full object-cover", sz.avatar) }) : avatar }),
8650
+ Left && !avatar && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: cn("text-muted-foreground shrink-0", sz.icon), children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Left, { className: cn(sz.icon) }) }),
8651
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "min-w-0 flex-1", children: [
8652
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "flex items-center gap-2", children: [
8653
+ label && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: cn(sz.label, "text-foreground font-medium truncate"), children: label }),
8654
+ badge && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: cn("px-2 py-0.5 rounded-full text-[11px] font-medium shrink-0", BADGE_VARIANTS[badgeVariant]), children: badge })
8578
8655
  ] }),
8579
- description && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: cn(sz.desc, "text-muted-foreground truncate mt-0.5"), children: description }),
8580
- children && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: "mt-1", children })
8656
+ description && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: cn(sz.desc, "text-muted-foreground truncate mt-0.5"), children: description }),
8657
+ children && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "mt-1", children })
8581
8658
  ] }),
8582
- action && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: "opacity-0 group-hover/item:opacity-100 transition-opacity shrink-0", children: action }),
8583
- collapsible ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
8659
+ action && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "opacity-0 group-hover/item:opacity-100 transition-opacity shrink-0", children: action }),
8660
+ collapsible ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
8584
8661
  "span",
8585
8662
  {
8586
8663
  className: cn(
@@ -8588,13 +8665,13 @@ var ListItem = React31.forwardRef(
8588
8665
  sz.icon,
8589
8666
  isExpanded && "rotate-90"
8590
8667
  ),
8591
- children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react22.ChevronRight, { className: cn(sz.icon) })
8668
+ children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_lucide_react21.ChevronRight, { className: cn(sz.icon) })
8592
8669
  }
8593
- ) : Right && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { className: cn("text-muted-foreground shrink-0", sz.icon), children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(Right, { className: cn(sz.icon) }) })
8670
+ ) : Right && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: cn("text-muted-foreground shrink-0", sz.icon), children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Right, { className: cn(sz.icon) }) })
8594
8671
  ]
8595
8672
  }
8596
8673
  ),
8597
- collapsible && isExpanded && expandContent && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: cn("border-t border-border/50 bg-muted/20", padding, "pt-3"), children: expandContent })
8674
+ collapsible && isExpanded && expandContent && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: cn("border-t border-border/50 bg-muted/20", padding, "pt-3"), children: expandContent })
8598
8675
  ] });
8599
8676
  const baseCls = cn(
8600
8677
  "relative w-full",
@@ -8604,10 +8681,10 @@ var ListItem = React31.forwardRef(
8604
8681
  );
8605
8682
  if (href) {
8606
8683
  const A = as === "a" ? "a" : "a";
8607
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(A, { ref, href, className: cn(baseCls, "block"), ...rest, children: inner });
8684
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(A, { ref, href, className: cn(baseCls, "block"), ...rest, children: inner });
8608
8685
  }
8609
8686
  if (as === "button" && !collapsible) {
8610
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
8687
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
8611
8688
  "button",
8612
8689
  {
8613
8690
  ref,
@@ -8619,7 +8696,7 @@ var ListItem = React31.forwardRef(
8619
8696
  );
8620
8697
  }
8621
8698
  if (collapsible) {
8622
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
8699
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
8623
8700
  "div",
8624
8701
  {
8625
8702
  ref,
@@ -8630,7 +8707,7 @@ var ListItem = React31.forwardRef(
8630
8707
  );
8631
8708
  }
8632
8709
  const Comp = as;
8633
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(Comp, { ref, className: baseCls, ...rest, children: inner });
8710
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Comp, { ref, className: baseCls, ...rest, children: inner });
8634
8711
  }
8635
8712
  );
8636
8713
  ListItem.displayName = "List.Item";
@@ -8640,7 +8717,7 @@ var List_default = List;
8640
8717
  // ../../components/ui/Watermark.tsx
8641
8718
  var React32 = __toESM(require("react"), 1);
8642
8719
  var import_react_dom9 = require("react-dom");
8643
- var import_jsx_runtime40 = require("react/jsx-runtime");
8720
+ var import_jsx_runtime39 = require("react/jsx-runtime");
8644
8721
  var PRESETS2 = {
8645
8722
  confidential: { text: "CONFIDENTIAL", color: "rgba(220, 38, 38, 0.15)", rotate: -22, fontSize: 16, fontWeight: "bold" },
8646
8723
  draft: { text: "DRAFT", color: "rgba(59, 130, 246, 0.15)", rotate: -22, fontSize: 18, fontWeight: "bold" },
@@ -8895,7 +8972,7 @@ var Watermark = ({
8895
8972
  if (dataURL) overlayStyle.backgroundImage = `url(${dataURL})`;
8896
8973
  const animationClass = animate ? getAnimationClass(animationVariant, visible) : "";
8897
8974
  const blurClass = blur ? `backdrop-blur-[${blurAmount}px]` : "";
8898
- const overlay = /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
8975
+ const overlay = /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
8899
8976
  "div",
8900
8977
  {
8901
8978
  role: interactive ? "button" : void 0,
@@ -8919,12 +8996,12 @@ var Watermark = ({
8919
8996
  }
8920
8997
  );
8921
8998
  if (fullPage) {
8922
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_jsx_runtime40.Fragment, { children: [
8999
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_jsx_runtime39.Fragment, { children: [
8923
9000
  children,
8924
9001
  typeof window !== "undefined" ? (0, import_react_dom9.createPortal)(overlay, document.body) : null
8925
9002
  ] });
8926
9003
  }
8927
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { className: cn("relative", className), style, ...rest, children: [
9004
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { className: cn("relative", className), style, ...rest, children: [
8928
9005
  children,
8929
9006
  overlay
8930
9007
  ] });
@@ -8933,8 +9010,8 @@ var Watermark_default = Watermark;
8933
9010
 
8934
9011
  // ../../components/ui/Timeline.tsx
8935
9012
  var React33 = __toESM(require("react"), 1);
8936
- var import_lucide_react23 = require("lucide-react");
8937
- var import_jsx_runtime41 = require("react/jsx-runtime");
9013
+ var import_lucide_react22 = require("lucide-react");
9014
+ var import_jsx_runtime40 = require("react/jsx-runtime");
8938
9015
  var SIZE_STYLE = {
8939
9016
  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" },
8940
9017
  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" },
@@ -8959,22 +9036,22 @@ var Marker = ({ index, last, size, color, status = "default", lineColor, lineSty
8959
9036
  const sz = SIZE_STYLE[size];
8960
9037
  const dotColor = color ? `background:${color}` : void 0;
8961
9038
  const cls = color ? void 0 : STATUS_COLOR[status];
8962
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: "flex flex-col items-center", children: [
8963
- dot ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "flex items-center justify-center", children: dot }) : Icon ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
9039
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { className: "flex flex-col items-center", children: [
9040
+ dot ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "flex items-center justify-center", children: dot }) : Icon ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
8964
9041
  "div",
8965
9042
  {
8966
9043
  className: cn("rounded-full ring-2 ring-background flex items-center justify-center", sz.iconDot, cls, active && "ring-primary/40 ring-4"),
8967
9044
  style: dotColor ? { background: color } : void 0,
8968
- children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Icon, { className: cn("text-white", sz.icon) })
9045
+ children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Icon, { className: cn("text-white", sz.icon) })
8969
9046
  }
8970
- ) : /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
9047
+ ) : /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
8971
9048
  "div",
8972
9049
  {
8973
9050
  className: cn("rounded-full ring-2 ring-background", sz.dot, cls, active && "ring-primary/40 ring-4 scale-125"),
8974
9051
  style: dotColor ? { background: color } : void 0
8975
9052
  }
8976
9053
  ),
8977
- !last && showLine && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
9054
+ !last && showLine && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
8978
9055
  "div",
8979
9056
  {
8980
9057
  className: cn("flex-1 border-l-2", LINE_STYLE_MAP[lineStyle]),
@@ -9000,8 +9077,8 @@ var TimelineRoot = React33.forwardRef(
9000
9077
  children,
9001
9078
  ...rest
9002
9079
  }, ref) => {
9003
- const content = items ? items.map((it, i) => /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(TimelineItem, { ...it, className: cn(itemClassName, it.className), "data-index": i, "data-last": i === (items?.length ?? 0) - 1 }, i)) : children;
9004
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(TimelineContext.Provider, { value: { align, variant, size, mode, lineColor, lineStyle, itemClassName, animate, dense, showLine }, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
9080
+ const content = items ? items.map((it, i) => /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(TimelineItem, { ...it, className: cn(itemClassName, it.className), "data-index": i, "data-last": i === (items?.length ?? 0) - 1 }, i)) : children;
9081
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(TimelineContext.Provider, { value: { align, variant, size, mode, lineColor, lineStyle, itemClassName, animate, dense, showLine }, children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
9005
9082
  "div",
9006
9083
  {
9007
9084
  ref,
@@ -9012,7 +9089,7 @@ var TimelineRoot = React33.forwardRef(
9012
9089
  className
9013
9090
  ),
9014
9091
  ...rest,
9015
- children: mode === "vertical" ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "space-y-0", children: content }) : content
9092
+ children: mode === "vertical" ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "space-y-0", children: content }) : content
9016
9093
  }
9017
9094
  ) });
9018
9095
  }
@@ -9060,39 +9137,39 @@ var TimelineItem = React33.forwardRef(
9060
9137
  modern: "rounded-lg bg-gradient-to-r from-card to-muted/20 border border-border/50 px-5 py-4 backdrop-blur-sm",
9061
9138
  gradient: "rounded-xl bg-gradient-to-br from-primary/10 via-card to-accent/10 border border-primary/20 px-5 py-4 shadow-lg"
9062
9139
  };
9063
- const contentBox = /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: cn("min-w-0 flex-1", variantClasses[ctx.variant]), children: [
9064
- /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: "flex items-start justify-between gap-2", children: [
9065
- /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: "flex-1 min-w-0", children: [
9066
- title && /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: "flex items-center gap-2", children: [
9067
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: cn("font-semibold text-foreground", sz.title), children: title }),
9068
- badge && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { className: "px-2 py-0.5 rounded-full text-[10px] font-medium bg-primary/10 text-primary", children: badge })
9140
+ const contentBox = /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { className: cn("min-w-0 flex-1", variantClasses[ctx.variant]), children: [
9141
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { className: "flex items-start justify-between gap-2", children: [
9142
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { className: "flex-1 min-w-0", children: [
9143
+ title && /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { className: "flex items-center gap-2", children: [
9144
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: cn("font-semibold text-foreground", sz.title), children: title }),
9145
+ badge && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: "px-2 py-0.5 rounded-full text-[10px] font-medium bg-primary/10 text-primary", children: badge })
9069
9146
  ] }),
9070
- description && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: cn("text-muted-foreground mt-1", sz.desc), children: description }),
9071
- children && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "mt-2", children })
9147
+ description && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: cn("text-muted-foreground mt-1", sz.desc), children: description }),
9148
+ children && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "mt-2", children })
9072
9149
  ] }),
9073
- collapsible && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
9150
+ collapsible && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
9074
9151
  "button",
9075
9152
  {
9076
9153
  type: "button",
9077
9154
  onClick: toggleExpanded,
9078
9155
  className: cn("text-muted-foreground hover:text-foreground transition-transform p-1", isExpanded && "rotate-180"),
9079
- children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_lucide_react23.ChevronDown, { className: "h-4 w-4" })
9156
+ children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_lucide_react22.ChevronDown, { className: "h-4 w-4" })
9080
9157
  }
9081
9158
  )
9082
9159
  ] }),
9083
- time && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: cn("mt-2 text-muted-foreground flex items-center gap-1", sz.time), children: time }),
9084
- collapsible && isExpanded && expandContent && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "mt-3 pt-3 border-t border-border/50 text-sm", children: expandContent })
9160
+ time && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: cn("mt-2 text-muted-foreground flex items-center gap-1", sz.time), children: time }),
9161
+ collapsible && isExpanded && expandContent && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "mt-3 pt-3 border-t border-border/50 text-sm", children: expandContent })
9085
9162
  ] });
9086
9163
  const markerWidth = Icon || dot ? "w-auto" : "w-6";
9087
- const leftSide = /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("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: [
9088
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: cn("flex-shrink-0 flex items-stretch", markerWidth), children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Marker, { index: idx ?? 0, last: isLast, size: ctx.size, color, status, lineColor: ctx.lineColor, lineStyle: ctx.lineStyle, active, dot, icon: Icon, showLine: ctx.showLine }) }),
9089
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "flex-1", children: contentBox })
9164
+ const leftSide = /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("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: [
9165
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: cn("flex-shrink-0 flex items-stretch", markerWidth), children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Marker, { index: idx ?? 0, last: isLast, size: ctx.size, color, status, lineColor: ctx.lineColor, lineStyle: ctx.lineStyle, active, dot, icon: Icon, showLine: ctx.showLine }) }),
9166
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "flex-1", children: contentBox })
9090
9167
  ] });
9091
- const rightSide = /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("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: [
9092
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "flex-1 flex justify-end", children: contentBox }),
9093
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: cn("flex-shrink-0 flex items-stretch", markerWidth), children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Marker, { index: idx ?? 0, last: isLast, size: ctx.size, color, status, lineColor: ctx.lineColor, lineStyle: ctx.lineStyle, active, dot, icon: Icon, showLine: ctx.showLine }) })
9168
+ const rightSide = /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("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: [
9169
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "flex-1 flex justify-end", children: contentBox }),
9170
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: cn("flex-shrink-0 flex items-stretch", markerWidth), children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Marker, { index: idx ?? 0, last: isLast, size: ctx.size, color, status, lineColor: ctx.lineColor, lineStyle: ctx.lineStyle, active, dot, icon: Icon, showLine: ctx.showLine }) })
9094
9171
  ] });
9095
- const horizontalItem = /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
9172
+ const horizontalItem = /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
9096
9173
  "div",
9097
9174
  {
9098
9175
  className: cn(
@@ -9101,19 +9178,19 @@ var TimelineItem = React33.forwardRef(
9101
9178
  ),
9102
9179
  style: { animationDelay: ctx.animate ? `${(idx ?? 0) * 100}ms` : void 0 },
9103
9180
  children: [
9104
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Marker, { index: idx ?? 0, last: isLast, size: ctx.size, color, status, lineColor: ctx.lineColor, lineStyle: ctx.lineStyle, active, dot, icon: Icon, showLine: false }),
9105
- !isLast && ctx.showLine && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: cn("h-px w-full border-t-2", LINE_STYLE_MAP[ctx.lineStyle]), style: { borderColor: ctx.lineColor || "hsl(var(--border))" } }),
9181
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Marker, { index: idx ?? 0, last: isLast, size: ctx.size, color, status, lineColor: ctx.lineColor, lineStyle: ctx.lineStyle, active, dot, icon: Icon, showLine: false }),
9182
+ !isLast && ctx.showLine && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: cn("h-px w-full border-t-2", LINE_STYLE_MAP[ctx.lineStyle]), style: { borderColor: ctx.lineColor || "hsl(var(--border))" } }),
9106
9183
  contentBox
9107
9184
  ]
9108
9185
  }
9109
9186
  );
9110
9187
  if (ctx.mode === "horizontal") {
9111
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { ref, className: cn("relative", className), ...rest, children: horizontalItem });
9188
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { ref, className: cn("relative", className), ...rest, children: horizontalItem });
9112
9189
  }
9113
9190
  let row = leftSide;
9114
9191
  if (ctx.align === "right") row = rightSide;
9115
9192
  if (ctx.align === "alternate") row = (idx ?? 0) % 2 === 0 ? leftSide : rightSide;
9116
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { ref, className: cn("relative", className), ...rest, children: row });
9193
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { ref, className: cn("relative", className), ...rest, children: row });
9117
9194
  }
9118
9195
  );
9119
9196
  TimelineItem.displayName = "Timeline.Item";
@@ -9122,8 +9199,8 @@ var Timeline_default = Timeline;
9122
9199
 
9123
9200
  // ../../components/ui/ColorPicker.tsx
9124
9201
  var React34 = __toESM(require("react"), 1);
9125
- var import_lucide_react24 = require("lucide-react");
9126
- var import_jsx_runtime42 = require("react/jsx-runtime");
9202
+ var import_lucide_react23 = require("lucide-react");
9203
+ var import_jsx_runtime41 = require("react/jsx-runtime");
9127
9204
  var clamp = (n, min, max) => Math.max(min, Math.min(max, n));
9128
9205
  function hexToRgb(hex) {
9129
9206
  const str = hex.replace(/^#/, "").trim();
@@ -9282,7 +9359,7 @@ var Swatch = ({
9282
9359
  md: "h-6 w-6",
9283
9360
  lg: "h-8 w-8"
9284
9361
  };
9285
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
9362
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
9286
9363
  "button",
9287
9364
  {
9288
9365
  type: "button",
@@ -9406,7 +9483,7 @@ function ColorPicker({
9406
9483
  lg: "h-12 text-base"
9407
9484
  };
9408
9485
  const swatchSize = size === "sm" ? "sm" : size === "lg" ? "lg" : "md";
9409
- const trigger = /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
9486
+ const trigger = /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
9410
9487
  "button",
9411
9488
  {
9412
9489
  type: "button",
@@ -9420,8 +9497,8 @@ function ColorPicker({
9420
9497
  ),
9421
9498
  "aria-label": "Open color picker",
9422
9499
  children: [
9423
- /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { className: "flex items-center gap-2", children: [
9424
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
9500
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: "flex items-center gap-2", children: [
9501
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
9425
9502
  "span",
9426
9503
  {
9427
9504
  className: cn(
@@ -9431,9 +9508,9 @@ function ColorPicker({
9431
9508
  style: { backgroundColor: withAlpha ? `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})` : hexForInput }
9432
9509
  }
9433
9510
  ),
9434
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "font-mono text-muted-foreground", children: text })
9511
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { className: "font-mono text-muted-foreground", children: text })
9435
9512
  ] }),
9436
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react24.Pipette, { className: cn(size === "sm" ? "w-3.5 h-3.5" : size === "lg" ? "w-5 h-5" : "w-4 h-4", "text-muted-foreground") })
9513
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_lucide_react23.Pipette, { className: cn(size === "sm" ? "w-3.5 h-3.5" : size === "lg" ? "w-5 h-5" : "w-4 h-4", "text-muted-foreground") })
9437
9514
  ]
9438
9515
  }
9439
9516
  );
@@ -9443,7 +9520,7 @@ function ColorPicker({
9443
9520
  default: 320,
9444
9521
  full: 360
9445
9522
  };
9446
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: cn("inline-block w-full", className), ...rest, children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
9523
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: cn("inline-block w-full", className), ...rest, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
9447
9524
  Popover,
9448
9525
  {
9449
9526
  trigger,
@@ -9453,22 +9530,22 @@ function ColorPicker({
9453
9530
  matchTriggerWidth: variant === "minimal",
9454
9531
  contentWidth: contentWidthByVariant[variant],
9455
9532
  contentClassName: cn("p-3 rounded-lg border border-border bg-card shadow-lg", contentClassName),
9456
- children: /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { className: "space-y-3", children: [
9457
- variant !== "minimal" && /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { className: "flex items-center gap-2", children: [
9458
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("input", { type: "color", value: hexForInput, onChange: handleNativeChange, className: "h-9 w-9 rounded-md cursor-pointer border border-border" }),
9459
- /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
9533
+ children: /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: "space-y-3", children: [
9534
+ variant !== "minimal" && /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: "flex items-center gap-2", children: [
9535
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("input", { type: "color", value: hexForInput, onChange: handleNativeChange, className: "h-9 w-9 rounded-md cursor-pointer border border-border" }),
9536
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
9460
9537
  "button",
9461
9538
  {
9462
9539
  type: "button",
9463
9540
  onClick: tryEyedropper,
9464
9541
  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"),
9465
9542
  children: [
9466
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react24.Pipette, { className: "w-3.5 h-3.5" }),
9543
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_lucide_react23.Pipette, { className: "w-3.5 h-3.5" }),
9467
9544
  variant === "full" && "Pick"
9468
9545
  ]
9469
9546
  }
9470
9547
  ),
9471
- copyable && /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
9548
+ copyable && /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
9472
9549
  "button",
9473
9550
  {
9474
9551
  type: "button",
@@ -9478,26 +9555,26 @@ function ColorPicker({
9478
9555
  copied && "bg-green-500/10 border-green-500/30"
9479
9556
  ),
9480
9557
  children: [
9481
- copied ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react24.Check, { className: "w-3.5 h-3.5 text-green-600" }) : /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react24.Copy, { className: "w-3.5 h-3.5" }),
9558
+ copied ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_lucide_react23.Check, { className: "w-3.5 h-3.5 text-green-600" }) : /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_lucide_react23.Copy, { className: "w-3.5 h-3.5" }),
9482
9559
  variant === "full" && (copied ? "Copied!" : "Copy")
9483
9560
  ]
9484
9561
  }
9485
9562
  ),
9486
- clearable && /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
9563
+ clearable && /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
9487
9564
  "button",
9488
9565
  {
9489
9566
  type: "button",
9490
9567
  onClick: clear,
9491
9568
  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",
9492
9569
  children: [
9493
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react24.X, { className: "w-3.5 h-3.5" }),
9570
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_lucide_react23.X, { className: "w-3.5 h-3.5" }),
9494
9571
  variant === "full" && "Clear"
9495
9572
  ]
9496
9573
  }
9497
9574
  )
9498
9575
  ] }),
9499
- /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { className: "flex items-center gap-2", children: [
9500
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
9576
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: "flex items-center gap-2", children: [
9577
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
9501
9578
  Input_default,
9502
9579
  {
9503
9580
  value: text,
@@ -9508,7 +9585,7 @@ function ColorPicker({
9508
9585
  className: "flex-1"
9509
9586
  }
9510
9587
  ),
9511
- variant === "minimal" && copyable && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
9588
+ variant === "minimal" && copyable && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
9512
9589
  "button",
9513
9590
  {
9514
9591
  type: "button",
@@ -9517,17 +9594,17 @@ function ColorPicker({
9517
9594
  "h-9 w-9 rounded-md border border-border hover:bg-accent/10 transition-colors flex items-center justify-center",
9518
9595
  copied && "bg-green-500/10 border-green-500/30"
9519
9596
  ),
9520
- children: copied ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react24.Check, { className: "w-3.5 h-3.5 text-green-600" }) : /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react24.Copy, { className: "w-3.5 h-3.5" })
9597
+ children: copied ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_lucide_react23.Check, { className: "w-3.5 h-3.5 text-green-600" }) : /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_lucide_react23.Copy, { className: "w-3.5 h-3.5" })
9521
9598
  }
9522
9599
  )
9523
9600
  ] }),
9524
- withAlpha && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "pt-1", children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Slider, { min: 0, max: 100, step: 1, value: alphaPct, onChange: (v) => setAlpha(v), label: "Alpha", showValue: true, formatValue: (v) => `${v}%`, size: "sm" }) }),
9525
- variant !== "minimal" && /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { children: [
9526
- /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { className: "text-xs font-medium text-muted-foreground mb-2 flex items-center gap-1.5", children: [
9527
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react24.Palette, { className: "w-3.5 h-3.5" }),
9601
+ withAlpha && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "pt-1", children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Slider, { min: 0, max: 100, step: 1, value: alphaPct, onChange: (v) => setAlpha(v), label: "Alpha", showValue: true, formatValue: (v) => `${v}%`, size: "sm" }) }),
9602
+ variant !== "minimal" && /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { children: [
9603
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: "text-xs font-medium text-muted-foreground mb-2 flex items-center gap-1.5", children: [
9604
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_lucide_react23.Palette, { className: "w-3.5 h-3.5" }),
9528
9605
  " Presets"
9529
9606
  ] }),
9530
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "grid grid-cols-8 gap-2", children: swatches.map((c) => /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
9607
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "grid grid-cols-8 gap-2", children: swatches.map((c) => /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
9531
9608
  Swatch,
9532
9609
  {
9533
9610
  color: c,
@@ -9543,12 +9620,12 @@ function ColorPicker({
9543
9620
  c
9544
9621
  )) })
9545
9622
  ] }),
9546
- showRecent && recentColors.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { children: [
9547
- /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { className: "text-xs font-medium text-muted-foreground mb-2 flex items-center gap-1.5", children: [
9548
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react24.History, { className: "w-3.5 h-3.5" }),
9623
+ showRecent && recentColors.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { children: [
9624
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: "text-xs font-medium text-muted-foreground mb-2 flex items-center gap-1.5", children: [
9625
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_lucide_react23.History, { className: "w-3.5 h-3.5" }),
9549
9626
  " Recent"
9550
9627
  ] }),
9551
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "flex gap-2 flex-wrap", children: recentColors.map((c, i) => /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
9628
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "flex gap-2 flex-wrap", children: recentColors.map((c, i) => /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
9552
9629
  Swatch,
9553
9630
  {
9554
9631
  color: c,
@@ -9564,12 +9641,12 @@ function ColorPicker({
9564
9641
  `${c}-${i}`
9565
9642
  )) })
9566
9643
  ] }),
9567
- showHarmony && harmony && variant !== "minimal" && /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { children: [
9568
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "text-xs font-medium text-muted-foreground mb-2", children: "Harmony" }),
9569
- /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { className: "space-y-2", children: [
9570
- /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { className: "flex items-center gap-2", children: [
9571
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "text-xs text-muted-foreground w-24", children: "Complementary" }),
9572
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
9644
+ showHarmony && harmony && variant !== "minimal" && /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { children: [
9645
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "text-xs font-medium text-muted-foreground mb-2", children: "Harmony" }),
9646
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: "space-y-2", children: [
9647
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: "flex items-center gap-2", children: [
9648
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { className: "text-xs text-muted-foreground w-24", children: "Complementary" }),
9649
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
9573
9650
  Swatch,
9574
9651
  {
9575
9652
  color: harmony.complementary,
@@ -9583,11 +9660,11 @@ function ColorPicker({
9583
9660
  }
9584
9661
  }
9585
9662
  ),
9586
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "text-xs font-mono text-muted-foreground", children: harmony.complementary })
9663
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { className: "text-xs font-mono text-muted-foreground", children: harmony.complementary })
9587
9664
  ] }),
9588
- /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { className: "flex items-center gap-2", children: [
9589
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "text-xs text-muted-foreground w-24", children: "Triadic" }),
9590
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "flex gap-2", children: harmony.triadic.map((c) => /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
9665
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: "flex items-center gap-2", children: [
9666
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { className: "text-xs text-muted-foreground w-24", children: "Triadic" }),
9667
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "flex gap-2", children: harmony.triadic.map((c) => /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
9591
9668
  Swatch,
9592
9669
  {
9593
9670
  color: c,
@@ -9603,9 +9680,9 @@ function ColorPicker({
9603
9680
  c
9604
9681
  )) })
9605
9682
  ] }),
9606
- /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { className: "flex items-center gap-2", children: [
9607
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "text-xs text-muted-foreground w-24", children: "Analogous" }),
9608
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "flex gap-2", children: harmony.analogous.map((c) => /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
9683
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: "flex items-center gap-2", children: [
9684
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { className: "text-xs text-muted-foreground w-24", children: "Analogous" }),
9685
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "flex gap-2", children: harmony.analogous.map((c) => /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
9609
9686
  Swatch,
9610
9687
  {
9611
9688
  color: c,
@@ -9630,7 +9707,7 @@ function ColorPicker({
9630
9707
 
9631
9708
  // ../../components/ui/Grid.tsx
9632
9709
  var import_react20 = __toESM(require("react"), 1);
9633
- var import_jsx_runtime43 = require("react/jsx-runtime");
9710
+ var import_jsx_runtime42 = require("react/jsx-runtime");
9634
9711
  var BP_MIN = {
9635
9712
  sm: 640,
9636
9713
  md: 768,
@@ -9737,7 +9814,7 @@ var GridRoot = import_react20.default.forwardRef(
9737
9814
  css += `}}`;
9738
9815
  });
9739
9816
  }
9740
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(
9817
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
9741
9818
  "div",
9742
9819
  {
9743
9820
  ref,
@@ -9750,7 +9827,7 @@ var GridRoot = import_react20.default.forwardRef(
9750
9827
  style,
9751
9828
  ...rest,
9752
9829
  children: [
9753
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("style", { dangerouslySetInnerHTML: { __html: css } }),
9830
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("style", { dangerouslySetInnerHTML: { __html: css } }),
9754
9831
  children
9755
9832
  ]
9756
9833
  }
@@ -9792,8 +9869,8 @@ var GridItem = import_react20.default.forwardRef(
9792
9869
  st.opacity = 0;
9793
9870
  st.animation = `uvGridItemFadeIn 0.5s ease-out forwards`;
9794
9871
  }
9795
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(import_jsx_runtime43.Fragment, { children: [
9796
- animationDelay != null && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
9872
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_jsx_runtime42.Fragment, { children: [
9873
+ animationDelay != null && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
9797
9874
  "style",
9798
9875
  {
9799
9876
  dangerouslySetInnerHTML: {
@@ -9801,7 +9878,7 @@ var GridItem = import_react20.default.forwardRef(
9801
9878
  }
9802
9879
  }
9803
9880
  ),
9804
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
9881
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
9805
9882
  "div",
9806
9883
  {
9807
9884
  ref,
@@ -9822,21 +9899,21 @@ var Grid_default = Grid;
9822
9899
 
9823
9900
  // ../../components/ui/ClientOnly.tsx
9824
9901
  var import_react21 = require("react");
9825
- var import_jsx_runtime44 = require("react/jsx-runtime");
9902
+ var import_jsx_runtime43 = require("react/jsx-runtime");
9826
9903
  function ClientOnly({ children, fallback = null }) {
9827
9904
  const [hasMounted, setHasMounted] = (0, import_react21.useState)(false);
9828
9905
  (0, import_react21.useEffect)(() => {
9829
9906
  setHasMounted(true);
9830
9907
  }, []);
9831
9908
  if (!hasMounted) {
9832
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_jsx_runtime44.Fragment, { children: fallback });
9909
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_jsx_runtime43.Fragment, { children: fallback });
9833
9910
  }
9834
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_jsx_runtime44.Fragment, { children });
9911
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_jsx_runtime43.Fragment, { children });
9835
9912
  }
9836
9913
 
9837
9914
  // ../../components/ui/Loading.tsx
9838
- var import_lucide_react25 = require("lucide-react");
9839
- var import_jsx_runtime45 = require("react/jsx-runtime");
9915
+ var import_lucide_react24 = require("lucide-react");
9916
+ var import_jsx_runtime44 = require("react/jsx-runtime");
9840
9917
  var LoadingSpinner = ({
9841
9918
  size = "md",
9842
9919
  className,
@@ -9852,8 +9929,8 @@ var LoadingSpinner = ({
9852
9929
  foreground: "text-foreground",
9853
9930
  muted: "text-muted-foreground"
9854
9931
  };
9855
- return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
9856
- import_lucide_react25.Activity,
9932
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
9933
+ import_lucide_react24.Activity,
9857
9934
  {
9858
9935
  className: cn(
9859
9936
  "animate-spin",
@@ -9873,7 +9950,7 @@ var LoadingDots = ({
9873
9950
  foreground: "bg-foreground",
9874
9951
  muted: "bg-muted-foreground"
9875
9952
  };
9876
- return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: cn("flex items-center space-x-1", className), children: [0, 1, 2].map((i) => /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
9953
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { className: cn("flex items-center space-x-1", className), children: [0, 1, 2].map((i) => /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
9877
9954
  "div",
9878
9955
  {
9879
9956
  className: cn(
@@ -9895,7 +9972,7 @@ var LoadingBar = ({
9895
9972
  label
9896
9973
  }) => {
9897
9974
  const pct = progress ? Math.min(Math.max(progress, 0), 100) : void 0;
9898
- return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
9975
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
9899
9976
  "div",
9900
9977
  {
9901
9978
  className: cn("w-full bg-muted rounded-full h-2", className),
@@ -9904,7 +9981,7 @@ var LoadingBar = ({
9904
9981
  "aria-valuemax": pct === void 0 ? void 0 : 100,
9905
9982
  "aria-valuenow": pct === void 0 ? void 0 : Math.round(pct),
9906
9983
  "aria-label": label || "Loading",
9907
- children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
9984
+ children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
9908
9985
  "div",
9909
9986
  {
9910
9987
  className: cn(
@@ -9922,9 +9999,9 @@ var LoadingBar = ({
9922
9999
 
9923
10000
  // ../../components/ui/Table.tsx
9924
10001
  var import_react22 = __toESM(require("react"), 1);
9925
- var import_jsx_runtime46 = require("react/jsx-runtime");
10002
+ var import_jsx_runtime45 = require("react/jsx-runtime");
9926
10003
  var Table = import_react22.default.forwardRef(
9927
- ({ className, containerClassName, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
10004
+ ({ className, containerClassName, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
9928
10005
  "div",
9929
10006
  {
9930
10007
  className: cn(
@@ -9934,7 +10011,7 @@ var Table = import_react22.default.forwardRef(
9934
10011
  "backdrop-blur-sm transition-all duration-300",
9935
10012
  containerClassName
9936
10013
  ),
9937
- children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
10014
+ children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
9938
10015
  "table",
9939
10016
  {
9940
10017
  ref,
@@ -9947,7 +10024,7 @@ var Table = import_react22.default.forwardRef(
9947
10024
  );
9948
10025
  Table.displayName = "Table";
9949
10026
  var TableHeader = import_react22.default.forwardRef(
9950
- ({ className, children, filterRow, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(
10027
+ ({ className, children, filterRow, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
9951
10028
  "thead",
9952
10029
  {
9953
10030
  ref,
@@ -9965,7 +10042,7 @@ var TableHeader = import_react22.default.forwardRef(
9965
10042
  )
9966
10043
  );
9967
10044
  TableHeader.displayName = "TableHeader";
9968
- var TableBody = import_react22.default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
10045
+ var TableBody = import_react22.default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
9969
10046
  "tbody",
9970
10047
  {
9971
10048
  ref,
@@ -9974,7 +10051,7 @@ var TableBody = import_react22.default.forwardRef(({ className, ...props }, ref)
9974
10051
  }
9975
10052
  ));
9976
10053
  TableBody.displayName = "TableBody";
9977
- var TableFooter = import_react22.default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
10054
+ var TableFooter = import_react22.default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
9978
10055
  "tfoot",
9979
10056
  {
9980
10057
  ref,
@@ -9986,7 +10063,7 @@ var TableFooter = import_react22.default.forwardRef(({ className, ...props }, re
9986
10063
  }
9987
10064
  ));
9988
10065
  TableFooter.displayName = "TableFooter";
9989
- var TableRow = import_react22.default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
10066
+ var TableRow = import_react22.default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
9990
10067
  "tr",
9991
10068
  {
9992
10069
  ref,
@@ -10000,7 +10077,7 @@ var TableRow = import_react22.default.forwardRef(({ className, ...props }, ref)
10000
10077
  }
10001
10078
  ));
10002
10079
  TableRow.displayName = "TableRow";
10003
- var TableHead = import_react22.default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
10080
+ var TableHead = import_react22.default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
10004
10081
  "th",
10005
10082
  {
10006
10083
  ref,
@@ -10012,7 +10089,7 @@ var TableHead = import_react22.default.forwardRef(({ className, ...props }, ref)
10012
10089
  }
10013
10090
  ));
10014
10091
  TableHead.displayName = "TableHead";
10015
- var TableCell = import_react22.default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
10092
+ var TableCell = import_react22.default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
10016
10093
  "td",
10017
10094
  {
10018
10095
  ref,
@@ -10021,7 +10098,7 @@ var TableCell = import_react22.default.forwardRef(({ className, ...props }, ref)
10021
10098
  }
10022
10099
  ));
10023
10100
  TableCell.displayName = "TableCell";
10024
- var TableCaption = import_react22.default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
10101
+ var TableCaption = import_react22.default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
10025
10102
  "caption",
10026
10103
  {
10027
10104
  ref,
@@ -10032,10 +10109,10 @@ var TableCaption = import_react22.default.forwardRef(({ className, ...props }, r
10032
10109
  TableCaption.displayName = "TableCaption";
10033
10110
 
10034
10111
  // ../../components/ui/DataTable.tsx
10035
- var import_lucide_react26 = require("lucide-react");
10112
+ var import_lucide_react25 = require("lucide-react");
10036
10113
  var import_react23 = __toESM(require("react"), 1);
10037
10114
  var import_next_intl7 = require("next-intl");
10038
- var import_jsx_runtime47 = require("react/jsx-runtime");
10115
+ var import_jsx_runtime46 = require("react/jsx-runtime");
10039
10116
  function useDebounced(value, delay = 300) {
10040
10117
  const [debounced, setDebounced] = import_react23.default.useState(value);
10041
10118
  import_react23.default.useEffect(() => {
@@ -10099,7 +10176,7 @@ function DataTable({
10099
10176
  className: "h-8 w-full text-sm"
10100
10177
  };
10101
10178
  if (col.filter.type === "text") {
10102
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
10179
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
10103
10180
  Input_default,
10104
10181
  {
10105
10182
  ...commonProps,
@@ -10114,7 +10191,7 @@ function DataTable({
10114
10191
  }
10115
10192
  if (col.filter.type === "select") {
10116
10193
  const options = col.filter.options || [];
10117
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
10194
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
10118
10195
  Combobox,
10119
10196
  {
10120
10197
  options: ["", ...options],
@@ -10130,7 +10207,7 @@ function DataTable({
10130
10207
  );
10131
10208
  }
10132
10209
  if (col.filter.type === "date") {
10133
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
10210
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
10134
10211
  DatePicker,
10135
10212
  {
10136
10213
  placeholder: col.filter.placeholder || `Select ${String(col.title)}`,
@@ -10144,7 +10221,7 @@ function DataTable({
10144
10221
  }
10145
10222
  return null;
10146
10223
  };
10147
- const renderHeader = /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(TableRow, { children: visibleColumns.map((col, colIdx) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
10224
+ const renderHeader = /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(TableRow, { children: visibleColumns.map((col, colIdx) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
10148
10225
  TableHead,
10149
10226
  {
10150
10227
  style: { width: col.width },
@@ -10157,9 +10234,9 @@ function DataTable({
10157
10234
  children: (() => {
10158
10235
  const isRightAlign = col.align === "right" || !col.align && headerAlign === "right";
10159
10236
  const isCenterAlign = col.align === "center" || !col.align && headerAlign === "center";
10160
- const titleContent = /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex items-center gap-1 min-w-0 flex-shrink", children: [
10161
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "truncate font-medium text-sm", children: col.title }),
10162
- col.sortable && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
10237
+ const titleContent = /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "flex items-center gap-1 min-w-0 flex-shrink", children: [
10238
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "truncate font-medium text-sm", children: col.title }),
10239
+ col.sortable && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
10163
10240
  "button",
10164
10241
  {
10165
10242
  className: cn(
@@ -10176,8 +10253,8 @@ function DataTable({
10176
10253
  },
10177
10254
  "aria-label": "Sort",
10178
10255
  title: `Sort by ${String(col.title)}`,
10179
- children: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("svg", { width: "14", height: "14", viewBox: "0 0 20 20", fill: "none", className: "inline-block", children: [
10180
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
10256
+ children: /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("svg", { width: "14", height: "14", viewBox: "0 0 20 20", fill: "none", className: "inline-block", children: [
10257
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
10181
10258
  "path",
10182
10259
  {
10183
10260
  d: "M7 8l3-3 3 3",
@@ -10188,7 +10265,7 @@ function DataTable({
10188
10265
  opacity: sort?.key === col.key && sort.order === "asc" ? 1 : 0.4
10189
10266
  }
10190
10267
  ),
10191
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
10268
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
10192
10269
  "path",
10193
10270
  {
10194
10271
  d: "M7 12l3 3 3-3",
@@ -10203,11 +10280,11 @@ function DataTable({
10203
10280
  }
10204
10281
  )
10205
10282
  ] });
10206
- const filterContent = col.filter && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
10283
+ const filterContent = col.filter && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
10207
10284
  Popover,
10208
10285
  {
10209
10286
  placement: isRightAlign ? "bottom-end" : "bottom-start",
10210
- trigger: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
10287
+ trigger: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
10211
10288
  "button",
10212
10289
  {
10213
10290
  className: cn(
@@ -10217,16 +10294,16 @@ function DataTable({
10217
10294
  ),
10218
10295
  "aria-label": "Filter",
10219
10296
  title: "Filter",
10220
- children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react26.Filter, { className: "h-4 w-4" })
10297
+ children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react25.Filter, { className: "h-4 w-4" })
10221
10298
  }
10222
10299
  ),
10223
- children: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "w-48 p-2 space-y-2", children: [
10224
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "text-xs font-medium text-muted-foreground mb-2", children: [
10300
+ children: /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "w-48 p-2 space-y-2", children: [
10301
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "text-xs font-medium text-muted-foreground mb-2", children: [
10225
10302
  "Filter ",
10226
10303
  col.title
10227
10304
  ] }),
10228
10305
  renderFilterControl(col),
10229
- filters[col.key] && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
10306
+ filters[col.key] && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
10230
10307
  "button",
10231
10308
  {
10232
10309
  onClick: () => {
@@ -10244,7 +10321,7 @@ function DataTable({
10244
10321
  ] })
10245
10322
  }
10246
10323
  );
10247
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
10324
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
10248
10325
  "div",
10249
10326
  {
10250
10327
  className: cn(
@@ -10253,10 +10330,10 @@ function DataTable({
10253
10330
  isCenterAlign && "justify-center",
10254
10331
  !isRightAlign && !isCenterAlign && "justify-between"
10255
10332
  ),
10256
- children: isRightAlign ? /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_jsx_runtime47.Fragment, { children: [
10333
+ children: isRightAlign ? /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(import_jsx_runtime46.Fragment, { children: [
10257
10334
  filterContent,
10258
10335
  titleContent
10259
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_jsx_runtime47.Fragment, { children: [
10336
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(import_jsx_runtime46.Fragment, { children: [
10260
10337
  titleContent,
10261
10338
  filterContent
10262
10339
  ] })
@@ -10305,15 +10382,15 @@ function DataTable({
10305
10382
  }
10306
10383
  return processedData.slice(start, start + curPageSize);
10307
10384
  }, [processedData, curPage, curPageSize]);
10308
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: cn("space-y-2", className), children: [
10309
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex items-center justify-between gap-4 mb-1", children: [
10310
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "text-sm text-muted-foreground", children: caption }),
10311
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex items-center gap-2", children: [
10312
- enableDensityToggle && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
10385
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: cn("space-y-2", className), children: [
10386
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "flex items-center justify-between gap-4 mb-1", children: [
10387
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "text-sm text-muted-foreground", children: caption }),
10388
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "flex items-center gap-2", children: [
10389
+ enableDensityToggle && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
10313
10390
  DropdownMenu_default,
10314
10391
  {
10315
- trigger: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(Button_default, { variant: "ghost", size: "sm", className: "h-8 px-2", children: [
10316
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("svg", { className: "w-4 h-4 mr-1", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 6h16M4 10h16M4 14h16M4 18h16" }) }),
10392
+ trigger: /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(Button_default, { variant: "ghost", size: "sm", className: "h-8 px-2", children: [
10393
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("svg", { className: "w-4 h-4 mr-1", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 6h16M4 10h16M4 14h16M4 18h16" }) }),
10317
10394
  labels?.density || t("density")
10318
10395
  ] }),
10319
10396
  items: [
@@ -10323,11 +10400,11 @@ function DataTable({
10323
10400
  ]
10324
10401
  }
10325
10402
  ),
10326
- enableColumnVisibilityToggle && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
10403
+ enableColumnVisibilityToggle && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
10327
10404
  DropdownMenu_default,
10328
10405
  {
10329
- trigger: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(Button_default, { variant: "ghost", size: "sm", className: "h-8 px-2", children: [
10330
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("svg", { className: "w-4 h-4 mr-1", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
10406
+ trigger: /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(Button_default, { variant: "ghost", size: "sm", className: "h-8 px-2", children: [
10407
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("svg", { className: "w-4 h-4 mr-1", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
10331
10408
  "path",
10332
10409
  {
10333
10410
  strokeLinecap: "round",
@@ -10338,26 +10415,26 @@ function DataTable({
10338
10415
  ) }),
10339
10416
  labels?.columns || t("columns")
10340
10417
  ] }),
10341
- children: columns.map((c) => /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
10418
+ children: columns.map((c) => /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(
10342
10419
  DropdownMenuItem,
10343
10420
  {
10344
10421
  onClick: () => {
10345
10422
  setVisibleCols((prev) => prev.includes(c.key) ? prev.filter((k) => k !== c.key) : [...prev, c.key]);
10346
10423
  },
10347
10424
  children: [
10348
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("input", { type: "checkbox", className: "mr-2 rounded border-border", readOnly: true, checked: visibleCols.includes(c.key) }),
10349
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "truncate", children: c.title })
10425
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("input", { type: "checkbox", className: "mr-2 rounded border-border", readOnly: true, checked: visibleCols.includes(c.key) }),
10426
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "truncate", children: c.title })
10350
10427
  ]
10351
10428
  },
10352
10429
  c.key
10353
10430
  ))
10354
10431
  }
10355
10432
  ),
10356
- enableHeaderAlignToggle && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
10433
+ enableHeaderAlignToggle && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
10357
10434
  DropdownMenu_default,
10358
10435
  {
10359
- trigger: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(Button_default, { variant: "ghost", size: "sm", className: "h-8 px-2", children: [
10360
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("svg", { className: "w-4 h-4 mr-1", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 6h16M4 12h10M4 18h16" }) }),
10436
+ trigger: /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(Button_default, { variant: "ghost", size: "sm", className: "h-8 px-2", children: [
10437
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("svg", { className: "w-4 h-4 mr-1", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 6h16M4 12h10M4 18h16" }) }),
10361
10438
  labels?.headerAlign || t("headerAlign")
10362
10439
  ] }),
10363
10440
  items: [
@@ -10370,17 +10447,17 @@ function DataTable({
10370
10447
  toolbar
10371
10448
  ] })
10372
10449
  ] }),
10373
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: cn("relative rounded-md border border-border/50 overflow-hidden", loading2 && "opacity-60 pointer-events-none"), children: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
10450
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: cn("relative rounded-md border border-border/50 overflow-hidden", loading2 && "opacity-60 pointer-events-none"), children: /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(
10374
10451
  Table,
10375
10452
  {
10376
10453
  containerClassName: "border-0 md:border-0 rounded-none md:rounded-none shadow-none bg-transparent",
10377
10454
  className: "[&_thead]:sticky [&_thead]:top-0 [&_thead]:z-[5] [&_thead]:bg-background [&_thead]:backdrop-blur-sm",
10378
10455
  children: [
10379
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(TableHeader, { children: renderHeader }),
10380
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(TableBody, { children: loading2 ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(TableRow, { children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(TableCell, { colSpan: visibleColumns.length, className: "text-center py-8", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex items-center justify-center gap-2 text-muted-foreground", children: [
10381
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("svg", { className: "animate-spin h-4 w-4", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", children: [
10382
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }),
10383
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
10456
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(TableHeader, { children: renderHeader }),
10457
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(TableBody, { children: loading2 ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(TableRow, { children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(TableCell, { colSpan: visibleColumns.length, className: "text-center py-8", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "flex items-center justify-center gap-2 text-muted-foreground", children: [
10458
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("svg", { className: "animate-spin h-4 w-4", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", children: [
10459
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }),
10460
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
10384
10461
  "path",
10385
10462
  {
10386
10463
  className: "opacity-75",
@@ -10389,12 +10466,12 @@ function DataTable({
10389
10466
  }
10390
10467
  )
10391
10468
  ] }),
10392
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "text-sm", children: "Loading..." })
10393
- ] }) }) }) : !displayedData || displayedData.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(TableRow, { children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(TableCell, { colSpan: visibleColumns.length, className: "text-center py-6 text-muted-foreground", children: "No data" }) }) : displayedData.map((row, idx) => {
10469
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "text-sm", children: "Loading..." })
10470
+ ] }) }) }) : !displayedData || displayedData.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(TableRow, { children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(TableCell, { colSpan: visibleColumns.length, className: "text-center py-6 text-muted-foreground", children: "No data" }) }) : displayedData.map((row, idx) => {
10394
10471
  const isLastRow = idx === displayedData.length - 1;
10395
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(TableRow, { className: cn(densityRowClass, striped && idx % 2 === 0 && "bg-muted/30"), children: visibleColumns.map((col, colIdx) => {
10472
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(TableRow, { className: cn(densityRowClass, striped && idx % 2 === 0 && "bg-muted/30"), children: visibleColumns.map((col, colIdx) => {
10396
10473
  const value = col.dataIndex ? row[col.dataIndex] : void 0;
10397
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
10474
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
10398
10475
  TableCell,
10399
10476
  {
10400
10477
  className: cn(
@@ -10414,7 +10491,7 @@ function DataTable({
10414
10491
  ]
10415
10492
  }
10416
10493
  ) }),
10417
- totalItems > 0 && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "border-t bg-muted/30 p-4 rounded-b-md", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
10494
+ totalItems > 0 && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "border-t bg-muted/30 p-4 rounded-b-md", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
10418
10495
  Pagination,
10419
10496
  {
10420
10497
  page: curPage,
@@ -12204,7 +12281,7 @@ function useForm(props = {}) {
12204
12281
 
12205
12282
  // ../../components/ui/Form.tsx
12206
12283
  var import_next_intl8 = require("next-intl");
12207
- var import_jsx_runtime48 = require("react/jsx-runtime");
12284
+ var import_jsx_runtime47 = require("react/jsx-runtime");
12208
12285
  var FormConfigContext = React39.createContext({ size: "md" });
12209
12286
  var FormWrapper = ({
12210
12287
  children,
@@ -12224,14 +12301,14 @@ var FormWrapper = ({
12224
12301
  }
12225
12302
  }, [JSON.stringify(initialValues)]);
12226
12303
  const { validationSchema: _, ...formProps } = props;
12227
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(FormProvider, { ...methods, children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(FormConfigContext.Provider, { value: { size }, children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("form", { onSubmit: methods.handleSubmit(onSubmit), className, ...formProps, children }) }) });
12304
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(FormProvider, { ...methods, children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(FormConfigContext.Provider, { value: { size }, children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("form", { onSubmit: methods.handleSubmit(onSubmit), className, ...formProps, children }) }) });
12228
12305
  };
12229
12306
  var Form = FormWrapper;
12230
12307
  var FormFieldContext = React39.createContext({});
12231
12308
  var FormField = ({
12232
12309
  ...props
12233
12310
  }) => {
12234
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(FormFieldContext.Provider, { value: { name: props.name }, children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Controller, { ...props }) });
12311
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(FormFieldContext.Provider, { value: { name: props.name }, children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Controller, { ...props }) });
12235
12312
  };
12236
12313
  var useFormField = () => {
12237
12314
  const fieldContext = React39.useContext(FormFieldContext);
@@ -12259,14 +12336,14 @@ var useFormField = () => {
12259
12336
  var FormItemContext = React39.createContext({});
12260
12337
  var FormItem = React39.forwardRef(({ className, ...props }, ref) => {
12261
12338
  const id = React39.useId();
12262
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(FormItemContext.Provider, { value: { id }, children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { ref, className: cn("space-y-2", className), ...props }) });
12339
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(FormItemContext.Provider, { value: { id }, children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { ref, className: cn("space-y-2", className), ...props }) });
12263
12340
  });
12264
12341
  FormItem.displayName = "FormItem";
12265
12342
  var FormLabel = React39.forwardRef(({ className, children, required, ...props }, ref) => {
12266
12343
  const { error, formItemId } = useFormField();
12267
12344
  const config = React39.useContext(FormConfigContext);
12268
12345
  const sizeClass = config.size === "sm" ? "text-xs" : config.size === "lg" ? "text-base" : "text-sm";
12269
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
12346
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
12270
12347
  Label,
12271
12348
  {
12272
12349
  ref,
@@ -12275,7 +12352,7 @@ var FormLabel = React39.forwardRef(({ className, children, required, ...props },
12275
12352
  ...props,
12276
12353
  children: [
12277
12354
  children,
12278
- required && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "text-destructive ml-1", children: "*" })
12355
+ required && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "text-destructive ml-1", children: "*" })
12279
12356
  ]
12280
12357
  }
12281
12358
  );
@@ -12283,7 +12360,7 @@ var FormLabel = React39.forwardRef(({ className, children, required, ...props },
12283
12360
  FormLabel.displayName = "FormLabel";
12284
12361
  var FormControl = React39.forwardRef(({ ...props }, ref) => {
12285
12362
  const { error, formItemId, formDescriptionId, formMessageId } = useFormField();
12286
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
12363
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
12287
12364
  "div",
12288
12365
  {
12289
12366
  ref,
@@ -12297,7 +12374,7 @@ var FormControl = React39.forwardRef(({ ...props }, ref) => {
12297
12374
  FormControl.displayName = "FormControl";
12298
12375
  var FormDescription = React39.forwardRef(({ className, ...props }, ref) => {
12299
12376
  const { formDescriptionId } = useFormField();
12300
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("p", { ref, id: formDescriptionId, className: cn("text-sm text-muted-foreground", className), ...props });
12377
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { ref, id: formDescriptionId, className: cn("text-sm text-muted-foreground", className), ...props });
12301
12378
  });
12302
12379
  FormDescription.displayName = "FormDescription";
12303
12380
  var FormMessage = React39.forwardRef(({ className, children, ...props }, ref) => {
@@ -12306,26 +12383,26 @@ var FormMessage = React39.forwardRef(({ className, children, ...props }, ref) =>
12306
12383
  if (!body) {
12307
12384
  return null;
12308
12385
  }
12309
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("p", { ref, id: formMessageId, className: cn("text-sm font-medium text-destructive", className), ...props, children: body });
12386
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { ref, id: formMessageId, className: cn("text-sm font-medium text-destructive", className), ...props, children: body });
12310
12387
  });
12311
12388
  FormMessage.displayName = "FormMessage";
12312
- var FormInput = React39.forwardRef(({ name, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(FormConfigContext.Consumer, { children: ({ size }) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
12389
+ var FormInput = React39.forwardRef(({ name, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(FormConfigContext.Consumer, { children: ({ size }) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
12313
12390
  FormField,
12314
12391
  {
12315
12392
  name,
12316
- render: ({ field }) => /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(FormItem, { children: [
12317
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(FormControl, { children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Input_default, { size: props.size ?? size, ...field, ...props }) }),
12318
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(FormMessage, {})
12393
+ render: ({ field }) => /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(FormItem, { children: [
12394
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(FormControl, { children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Input_default, { size: props.size ?? size, ...field, ...props }) }),
12395
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(FormMessage, {})
12319
12396
  ] })
12320
12397
  }
12321
12398
  ) }));
12322
12399
  FormInput.displayName = "FormInput";
12323
- var FormCheckbox = React39.forwardRef(({ name, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(FormConfigContext.Consumer, { children: ({ size }) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
12400
+ var FormCheckbox = React39.forwardRef(({ name, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(FormConfigContext.Consumer, { children: ({ size }) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
12324
12401
  FormField,
12325
12402
  {
12326
12403
  name,
12327
- render: ({ field }) => /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(FormItem, { children: [
12328
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(FormControl, { children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
12404
+ render: ({ field }) => /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(FormItem, { children: [
12405
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(FormControl, { children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
12329
12406
  Checkbox,
12330
12407
  {
12331
12408
  ref,
@@ -12339,20 +12416,20 @@ var FormCheckbox = React39.forwardRef(({ name, ...props }, ref) => /* @__PURE__
12339
12416
  ...props
12340
12417
  }
12341
12418
  ) }),
12342
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(FormMessage, {})
12419
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(FormMessage, {})
12343
12420
  ] })
12344
12421
  }
12345
12422
  ) }));
12346
12423
  FormCheckbox.displayName = "FormCheckbox";
12347
- var FormActions = React39.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { ref, className: cn("flex gap-2 justify-end", className), ...props }));
12424
+ var FormActions = React39.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { ref, className: cn("flex gap-2 justify-end", className), ...props }));
12348
12425
  FormActions.displayName = "FormActions";
12349
- var FormSubmitButton = React39.forwardRef(({ children, loading: loading2, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(FormConfigContext.Consumer, { children: ({ size }) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(Button_default, { ref, type: "submit", size: props.size ?? size, disabled: loading2, ...props, children }) }));
12426
+ var FormSubmitButton = React39.forwardRef(({ children, loading: loading2, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(FormConfigContext.Consumer, { children: ({ size }) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Button_default, { ref, type: "submit", size: props.size ?? size, disabled: loading2, ...props, children }) }));
12350
12427
  FormSubmitButton.displayName = "FormSubmitButton";
12351
12428
 
12352
12429
  // ../../components/ui/NotificationModal.tsx
12353
- var import_lucide_react27 = require("lucide-react");
12430
+ var import_lucide_react26 = require("lucide-react");
12354
12431
  var import_next_intl9 = require("next-intl");
12355
- var import_jsx_runtime49 = require("react/jsx-runtime");
12432
+ var import_jsx_runtime48 = require("react/jsx-runtime");
12356
12433
  function NotificationModal({ isOpen, onClose, notification, titleText, openLinkText, closeText }) {
12357
12434
  const t = (0, import_next_intl9.useTranslations)("Common");
12358
12435
  if (!notification) return null;
@@ -12373,26 +12450,26 @@ function NotificationModal({ isOpen, onClose, notification, titleText, openLinkT
12373
12450
  onClose();
12374
12451
  }
12375
12452
  };
12376
- return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
12453
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
12377
12454
  Modal_default,
12378
12455
  {
12379
12456
  isOpen,
12380
12457
  onClose,
12381
12458
  title: titleText || t("notifications"),
12382
12459
  size: "md",
12383
- children: /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "space-y-4", children: [
12384
- /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex items-center gap-2 pb-2 border-b border-border", children: [
12385
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: cn(
12460
+ children: /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "space-y-4", children: [
12461
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex items-center gap-2 pb-2 border-b border-border", children: [
12462
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: cn(
12386
12463
  "w-2 h-2 rounded-full",
12387
12464
  !notification.is_read ? "bg-primary" : "bg-border"
12388
12465
  ) }),
12389
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "text-xs text-muted-foreground", children: !notification.is_read ? t("newNotification") : t("readStatus") })
12466
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "text-xs text-muted-foreground", children: !notification.is_read ? t("newNotification") : t("readStatus") })
12390
12467
  ] }),
12391
- notification.title && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("h3", { className: "text-lg font-semibold text-foreground", children: notification.title }),
12392
- notification.body && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "text-sm text-muted-foreground whitespace-pre-wrap leading-relaxed", children: notification.body }),
12393
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "text-xs text-muted-foreground border-t border-border pt-2", children: formatTime3(notification.created_at) }),
12394
- /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "flex gap-2 justify-end pt-2", children: [
12395
- hasLink && /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
12468
+ notification.title && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("h3", { className: "text-lg font-semibold text-foreground", children: notification.title }),
12469
+ notification.body && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "text-sm text-muted-foreground whitespace-pre-wrap leading-relaxed", children: notification.body }),
12470
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "text-xs text-muted-foreground border-t border-border pt-2", children: formatTime3(notification.created_at) }),
12471
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "flex gap-2 justify-end pt-2", children: [
12472
+ hasLink && /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
12396
12473
  Button_default,
12397
12474
  {
12398
12475
  variant: "primary",
@@ -12400,12 +12477,12 @@ function NotificationModal({ isOpen, onClose, notification, titleText, openLinkT
12400
12477
  onClick: handleLinkClick,
12401
12478
  className: "gap-2",
12402
12479
  children: [
12403
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_lucide_react27.ExternalLink, { className: "w-4 h-4" }),
12480
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react26.ExternalLink, { className: "w-4 h-4" }),
12404
12481
  openLinkText || t("openLink")
12405
12482
  ]
12406
12483
  }
12407
12484
  ),
12408
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
12485
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
12409
12486
  Button_default,
12410
12487
  {
12411
12488
  variant: "ghost",
@@ -12424,160 +12501,10 @@ var NotificationModal_default = NotificationModal;
12424
12501
  // ../../components/ui/FloatingContacts.tsx
12425
12502
  var import_link2 = __toESM(require("next/link"), 1);
12426
12503
  var import_navigation = require("next/navigation");
12427
- var import_lucide_react28 = require("lucide-react");
12428
-
12429
- // ../../node_modules/react-icons/lib/iconBase.mjs
12430
- var import_react26 = __toESM(require("react"), 1);
12431
-
12432
- // ../../node_modules/react-icons/lib/iconContext.mjs
12433
- var import_react25 = __toESM(require("react"), 1);
12434
- var DefaultContext = {
12435
- color: void 0,
12436
- size: void 0,
12437
- className: void 0,
12438
- style: void 0,
12439
- attr: void 0
12440
- };
12441
- var IconContext = import_react25.default.createContext && /* @__PURE__ */ import_react25.default.createContext(DefaultContext);
12442
-
12443
- // ../../node_modules/react-icons/lib/iconBase.mjs
12444
- var _excluded = ["attr", "size", "title"];
12445
- function _objectWithoutProperties(source, excluded) {
12446
- if (source == null) return {};
12447
- var target = _objectWithoutPropertiesLoose(source, excluded);
12448
- var key, i;
12449
- if (Object.getOwnPropertySymbols) {
12450
- var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
12451
- for (i = 0; i < sourceSymbolKeys.length; i++) {
12452
- key = sourceSymbolKeys[i];
12453
- if (excluded.indexOf(key) >= 0) continue;
12454
- if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
12455
- target[key] = source[key];
12456
- }
12457
- }
12458
- return target;
12459
- }
12460
- function _objectWithoutPropertiesLoose(source, excluded) {
12461
- if (source == null) return {};
12462
- var target = {};
12463
- for (var key in source) {
12464
- if (Object.prototype.hasOwnProperty.call(source, key)) {
12465
- if (excluded.indexOf(key) >= 0) continue;
12466
- target[key] = source[key];
12467
- }
12468
- }
12469
- return target;
12470
- }
12471
- function _extends() {
12472
- _extends = Object.assign ? Object.assign.bind() : function(target) {
12473
- for (var i = 1; i < arguments.length; i++) {
12474
- var source = arguments[i];
12475
- for (var key in source) {
12476
- if (Object.prototype.hasOwnProperty.call(source, key)) {
12477
- target[key] = source[key];
12478
- }
12479
- }
12480
- }
12481
- return target;
12482
- };
12483
- return _extends.apply(this, arguments);
12484
- }
12485
- function ownKeys(e, r) {
12486
- var t = Object.keys(e);
12487
- if (Object.getOwnPropertySymbols) {
12488
- var o = Object.getOwnPropertySymbols(e);
12489
- r && (o = o.filter(function(r2) {
12490
- return Object.getOwnPropertyDescriptor(e, r2).enumerable;
12491
- })), t.push.apply(t, o);
12492
- }
12493
- return t;
12494
- }
12495
- function _objectSpread(e) {
12496
- for (var r = 1; r < arguments.length; r++) {
12497
- var t = null != arguments[r] ? arguments[r] : {};
12498
- r % 2 ? ownKeys(Object(t), true).forEach(function(r2) {
12499
- _defineProperty(e, r2, t[r2]);
12500
- }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function(r2) {
12501
- Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t, r2));
12502
- });
12503
- }
12504
- return e;
12505
- }
12506
- function _defineProperty(obj, key, value) {
12507
- key = _toPropertyKey(key);
12508
- if (key in obj) {
12509
- Object.defineProperty(obj, key, { value, enumerable: true, configurable: true, writable: true });
12510
- } else {
12511
- obj[key] = value;
12512
- }
12513
- return obj;
12514
- }
12515
- function _toPropertyKey(t) {
12516
- var i = _toPrimitive(t, "string");
12517
- return "symbol" == typeof i ? i : i + "";
12518
- }
12519
- function _toPrimitive(t, r) {
12520
- if ("object" != typeof t || !t) return t;
12521
- var e = t[Symbol.toPrimitive];
12522
- if (void 0 !== e) {
12523
- var i = e.call(t, r || "default");
12524
- if ("object" != typeof i) return i;
12525
- throw new TypeError("@@toPrimitive must return a primitive value.");
12526
- }
12527
- return ("string" === r ? String : Number)(t);
12528
- }
12529
- function Tree2Element(tree) {
12530
- return tree && tree.map((node, i) => /* @__PURE__ */ import_react26.default.createElement(node.tag, _objectSpread({
12531
- key: i
12532
- }, node.attr), Tree2Element(node.child)));
12533
- }
12534
- function GenIcon(data) {
12535
- return (props) => /* @__PURE__ */ import_react26.default.createElement(IconBase, _extends({
12536
- attr: _objectSpread({}, data.attr)
12537
- }, props), Tree2Element(data.child));
12538
- }
12539
- function IconBase(props) {
12540
- var elem = (conf) => {
12541
- var {
12542
- attr,
12543
- size,
12544
- title
12545
- } = props, svgProps = _objectWithoutProperties(props, _excluded);
12546
- var computedSize = size || conf.size || "1em";
12547
- var className;
12548
- if (conf.className) className = conf.className;
12549
- if (props.className) className = (className ? className + " " : "") + props.className;
12550
- return /* @__PURE__ */ import_react26.default.createElement("svg", _extends({
12551
- stroke: "currentColor",
12552
- fill: "currentColor",
12553
- strokeWidth: "0"
12554
- }, conf.attr, attr, svgProps, {
12555
- className,
12556
- style: _objectSpread(_objectSpread({
12557
- color: props.color || conf.color
12558
- }, conf.style), props.style),
12559
- height: computedSize,
12560
- width: computedSize,
12561
- xmlns: "http://www.w3.org/2000/svg"
12562
- }), title && /* @__PURE__ */ import_react26.default.createElement("title", null, title), props.children);
12563
- };
12564
- return IconContext !== void 0 ? /* @__PURE__ */ import_react26.default.createElement(IconContext.Consumer, null, (conf) => elem(conf)) : elem(DefaultContext);
12565
- }
12566
-
12567
- // ../../node_modules/react-icons/fa/index.mjs
12568
- function FaInstagram(props) {
12569
- 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);
12570
- }
12571
-
12572
- // ../../node_modules/react-icons/si/index.mjs
12573
- function SiZalo(props) {
12574
- 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);
12575
- }
12576
-
12577
- // ../../components/ui/FloatingContacts.tsx
12578
- var import_jsx_runtime50 = require("react/jsx-runtime");
12504
+ var import_lucide_react27 = require("lucide-react");
12505
+ var import_jsx_runtime49 = require("react/jsx-runtime");
12579
12506
  function MessengerIcon(props) {
12580
- return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("svg", { viewBox: "0 0 24 24", width: 24, height: 24, "aria-hidden": "true", ...props, children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
12507
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("svg", { viewBox: "0 0 24 24", width: 24, height: 24, "aria-hidden": "true", ...props, children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
12581
12508
  "path",
12582
12509
  {
12583
12510
  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",
@@ -12586,10 +12513,16 @@ function MessengerIcon(props) {
12586
12513
  ) });
12587
12514
  }
12588
12515
  function ZaloIcon(props) {
12589
- return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(SiZalo, { size: 20, ...props });
12516
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("svg", { viewBox: "0 0 48 48", width: 20, height: 20, "aria-hidden": "true", ...props, children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
12517
+ "path",
12518
+ {
12519
+ fill: "white",
12520
+ 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"
12521
+ }
12522
+ ) });
12590
12523
  }
12591
12524
  function InstagramIcon(props) {
12592
- return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(FaInstagram, { size: 20, ...props });
12525
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("svg", { viewBox: "0 0 24 24", width: 20, height: 20, "aria-hidden": "true", fill: "white", ...props, children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("path", { d: "M12 2.163c3.204 0 3.584.012 4.85.07 3.252.148 4.771 1.691 4.919 4.919.058 1.265.069 1.645.069 4.849 0 3.205-.012 3.584-.069 4.849-.149 3.225-1.664 4.771-4.919 4.919-1.266.058-1.644.07-4.85.07-3.204 0-3.584-.012-4.849-.07-3.26-.149-4.771-1.699-4.919-4.92-.058-1.265-.07-1.644-.07-4.849 0-3.204.013-3.583.07-4.849.149-3.227 1.664-4.771 4.919-4.919 1.266-.057 1.645-.069 4.849-.069zm0-2.163c-3.259 0-3.667.014-4.947.072-4.358.2-6.78 2.618-6.98 6.98-.059 1.281-.073 1.689-.073 4.948 0 3.259.014 3.668.072 4.948.2 4.358 2.618 6.78 6.98 6.98 1.281.058 1.689.072 4.948.072 3.259 0 3.668-.014 4.948-.072 4.354-.2 6.782-2.618 6.979-6.98.059-1.28.073-1.689.073-4.948 0-3.259-.014-3.667-.072-4.947-.196-4.354-2.617-6.78-6.979-6.98-1.281-.059-1.69-.073-4.949-.073zm0 5.838c-3.403 0-6.162 2.759-6.162 6.162s2.759 6.163 6.162 6.163 6.162-2.759 6.162-6.163c0-3.403-2.759-6.162-6.162-6.162zm0 10.162c-2.209 0-4-1.79-4-4 0-2.209 1.791-4 4-4s4 1.791 4 4c0 2.21-1.791 4-4 4zm6.406-11.845c-.796 0-1.441.645-1.441 1.44s.645 1.44 1.441 1.44c.795 0 1.439-.645 1.439-1.44s-.644-1.44-1.439-1.44z" }) });
12593
12526
  }
12594
12527
  function FloatingContacts({ className }) {
12595
12528
  const pathname = (0, import_navigation.usePathname)();
@@ -12624,8 +12557,8 @@ function FloatingContacts({ className }) {
12624
12557
  external: true
12625
12558
  }
12626
12559
  ];
12627
- return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: cn("fixed bottom-6 right-4 z-[100000]", "flex flex-col items-end gap-3", className), "aria-label": "Quick contacts", children: [
12628
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
12560
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: cn("fixed bottom-6 right-4 z-[100000]", "flex flex-col items-end gap-3", className), "aria-label": "Quick contacts", children: [
12561
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
12629
12562
  import_link2.default,
12630
12563
  {
12631
12564
  href: `tel:${hotline.replace(/\D/g, "")}`,
@@ -12636,10 +12569,10 @@ function FloatingContacts({ className }) {
12636
12569
  "hover:scale-105 active:scale-95 transition-transform",
12637
12570
  "bg-[#22c55e]"
12638
12571
  ),
12639
- children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_lucide_react28.Phone, { className: "w-6 h-6" })
12572
+ children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_lucide_react27.Phone, { className: "w-6 h-6" })
12640
12573
  }
12641
12574
  ),
12642
- moreItems.map(({ key, href, label, bg, Icon, external }) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
12575
+ moreItems.map(({ key, href, label, bg, Icon, external }) => /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
12643
12576
  import_link2.default,
12644
12577
  {
12645
12578
  href,
@@ -12651,7 +12584,7 @@ function FloatingContacts({ className }) {
12651
12584
  "hover:scale-105 active:scale-95 transition-transform",
12652
12585
  bg
12653
12586
  ),
12654
- children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Icon, { className: "w-6 h-6" })
12587
+ children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Icon, { className: "w-6 h-6" })
12655
12588
  },
12656
12589
  key
12657
12590
  ))
@@ -12659,17 +12592,17 @@ function FloatingContacts({ className }) {
12659
12592
  }
12660
12593
 
12661
12594
  // ../../components/ui/AccessDenied.tsx
12662
- var import_lucide_react29 = require("lucide-react");
12663
- var import_jsx_runtime51 = require("react/jsx-runtime");
12595
+ var import_lucide_react28 = require("lucide-react");
12596
+ var import_jsx_runtime50 = require("react/jsx-runtime");
12664
12597
  var VARIANT_STYLES = {
12665
12598
  destructive: { bg: "bg-destructive/5", border: "border-destructive/20", text: "text-destructive" },
12666
12599
  warning: { bg: "bg-warning/5", border: "border-warning/20", text: "text-warning" },
12667
12600
  info: { bg: "bg-info/5", border: "border-info/20", text: "text-info" }
12668
12601
  };
12669
12602
  var DEFAULT_ICONS = {
12670
- destructive: import_lucide_react29.ShieldAlert,
12671
- warning: import_lucide_react29.Ban,
12672
- info: import_lucide_react29.Lock
12603
+ destructive: import_lucide_react28.ShieldAlert,
12604
+ warning: import_lucide_react28.Ban,
12605
+ info: import_lucide_react28.Lock
12673
12606
  };
12674
12607
  function AccessDenied({
12675
12608
  title = "Access Restricted",
@@ -12681,36 +12614,36 @@ function AccessDenied({
12681
12614
  }) {
12682
12615
  const styles = VARIANT_STYLES[variant];
12683
12616
  const UsedIcon = Icon || DEFAULT_ICONS[variant];
12684
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Card_default, { className: cn("p-8 text-center shadow-sm", styles.bg, styles.border, className), children: /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: "flex flex-col items-center gap-4", children: [
12685
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: cn("p-3 rounded-lg", styles.bg.replace("/5", "/10")), children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(UsedIcon, { className: cn("w-8 h-8", styles.text) }) }),
12686
- /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { children: [
12687
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("h3", { className: cn("font-semibold mb-2", styles.text), children: title }),
12688
- /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("p", { className: cn(styles.text.replace("text-", "text-") + "/80", "text-sm"), children: description })
12617
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Card_default, { className: cn("p-8 text-center shadow-sm", styles.bg, styles.border, className), children: /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "flex flex-col items-center gap-4", children: [
12618
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: cn("p-3 rounded-lg", styles.bg.replace("/5", "/10")), children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(UsedIcon, { className: cn("w-8 h-8", styles.text) }) }),
12619
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { children: [
12620
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("h3", { className: cn("font-semibold mb-2", styles.text), children: title }),
12621
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("p", { className: cn(styles.text.replace("text-", "text-") + "/80", "text-sm"), children: description })
12689
12622
  ] }),
12690
- children && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "mt-2 flex flex-wrap gap-2 justify-center", children })
12623
+ children && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: "mt-2 flex flex-wrap gap-2 justify-center", children })
12691
12624
  ] }) });
12692
12625
  }
12693
12626
 
12694
12627
  // ../../components/ui/ThemeToggleHeadless.tsx
12695
- var import_lucide_react30 = require("lucide-react");
12696
- var import_react27 = require("react");
12628
+ var import_lucide_react29 = require("lucide-react");
12629
+ var import_react25 = require("react");
12697
12630
  var import_react_dom10 = require("react-dom");
12698
- var import_jsx_runtime52 = require("react/jsx-runtime");
12631
+ var import_jsx_runtime51 = require("react/jsx-runtime");
12699
12632
  function ThemeToggleHeadless({
12700
12633
  theme,
12701
12634
  onChange,
12702
12635
  labels,
12703
12636
  className
12704
12637
  }) {
12705
- const [isOpen, setIsOpen] = (0, import_react27.useState)(false);
12706
- const [mounted, setMounted] = (0, import_react27.useState)(false);
12707
- const triggerRef = (0, import_react27.useRef)(null);
12708
- const [dropdownPosition, setDropdownPosition] = (0, import_react27.useState)(null);
12709
- (0, import_react27.useEffect)(() => setMounted(true), []);
12638
+ const [isOpen, setIsOpen] = (0, import_react25.useState)(false);
12639
+ const [mounted, setMounted] = (0, import_react25.useState)(false);
12640
+ const triggerRef = (0, import_react25.useRef)(null);
12641
+ const [dropdownPosition, setDropdownPosition] = (0, import_react25.useState)(null);
12642
+ (0, import_react25.useEffect)(() => setMounted(true), []);
12710
12643
  const themes = [
12711
- { value: "light", label: labels?.light ?? "Light", icon: import_lucide_react30.Sun },
12712
- { value: "dark", label: labels?.dark ?? "Dark", icon: import_lucide_react30.Moon },
12713
- { value: "system", label: labels?.system ?? "System", icon: import_lucide_react30.Monitor }
12644
+ { value: "light", label: labels?.light ?? "Light", icon: import_lucide_react29.Sun },
12645
+ { value: "dark", label: labels?.dark ?? "Dark", icon: import_lucide_react29.Moon },
12646
+ { value: "system", label: labels?.system ?? "System", icon: import_lucide_react29.Monitor }
12714
12647
  ];
12715
12648
  const current = mounted ? themes.find((t) => t.value === theme) || themes[2] : themes[2];
12716
12649
  const CurrentIcon = current.icon;
@@ -12724,8 +12657,8 @@ function ThemeToggleHeadless({
12724
12657
  const top = rect.bottom + scrollTop + 8;
12725
12658
  return { top, left, width };
12726
12659
  };
12727
- return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: cn("relative", className), children: [
12728
- /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
12660
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: cn("relative", className), children: [
12661
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
12729
12662
  Button_default,
12730
12663
  {
12731
12664
  variant: "ghost",
@@ -12743,25 +12676,25 @@ function ThemeToggleHeadless({
12743
12676
  "aria-haspopup": "menu",
12744
12677
  "aria-expanded": isOpen,
12745
12678
  "aria-label": labels?.heading ?? "Theme",
12746
- children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(CurrentIcon, { className: "h-5 w-5" })
12679
+ children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(CurrentIcon, { className: "h-5 w-5" })
12747
12680
  }
12748
12681
  ),
12749
- isOpen && /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(import_jsx_runtime52.Fragment, { children: [
12750
- typeof window !== "undefined" && (0, import_react_dom10.createPortal)(/* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "fixed inset-0 z-[9998]", onClick: () => setIsOpen(false) }), document.body),
12682
+ isOpen && /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(import_jsx_runtime51.Fragment, { children: [
12683
+ typeof window !== "undefined" && (0, import_react_dom10.createPortal)(/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "fixed inset-0 z-[9998]", onClick: () => setIsOpen(false) }), document.body),
12751
12684
  typeof window !== "undefined" && dropdownPosition && (0, import_react_dom10.createPortal)(
12752
- /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
12685
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
12753
12686
  "div",
12754
12687
  {
12755
12688
  className: "z-[9999] bg-card border border-border rounded-lg shadow-lg overflow-hidden",
12756
12689
  style: { position: "absolute", top: dropdownPosition.top, left: dropdownPosition.left, width: dropdownPosition.width },
12757
12690
  onMouseDown: (e) => e.stopPropagation(),
12758
12691
  role: "menu",
12759
- children: /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: "p-2", children: [
12760
- /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "px-3 py-2 text-sm font-medium text-muted-foreground border-b border-border mb-2", children: labels?.heading ?? "Theme" }),
12692
+ children: /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: "p-2", children: [
12693
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "px-3 py-2 text-sm font-medium text-muted-foreground border-b border-border mb-2", children: labels?.heading ?? "Theme" }),
12761
12694
  themes.map((opt) => {
12762
12695
  const Icon = opt.icon;
12763
12696
  const active = theme === opt.value;
12764
- return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(
12697
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(
12765
12698
  Button_default,
12766
12699
  {
12767
12700
  variant: "ghost",
@@ -12777,9 +12710,9 @@ function ThemeToggleHeadless({
12777
12710
  role: "menuitemradio",
12778
12711
  "aria-checked": active,
12779
12712
  children: [
12780
- /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(Icon, { className: "h-4 w-4" }),
12781
- /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { className: "flex-1 text-left", children: opt.label }),
12782
- active && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "w-2 h-2 rounded-full bg-primary" })
12713
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Icon, { className: "h-4 w-4" }),
12714
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: "flex-1 text-left", children: opt.label }),
12715
+ active && /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "w-2 h-2 rounded-full bg-primary" })
12783
12716
  ]
12784
12717
  },
12785
12718
  opt.value
@@ -12795,10 +12728,10 @@ function ThemeToggleHeadless({
12795
12728
  }
12796
12729
 
12797
12730
  // ../../components/ui/LanguageSwitcherHeadless.tsx
12798
- var import_react28 = require("react");
12731
+ var import_react26 = require("react");
12799
12732
  var import_react_dom11 = require("react-dom");
12800
- var import_lucide_react31 = require("lucide-react");
12801
- var import_jsx_runtime53 = require("react/jsx-runtime");
12733
+ var import_lucide_react30 = require("lucide-react");
12734
+ var import_jsx_runtime52 = require("react/jsx-runtime");
12802
12735
  function LanguageSwitcherHeadless({
12803
12736
  locales,
12804
12737
  currentLocale,
@@ -12806,9 +12739,9 @@ function LanguageSwitcherHeadless({
12806
12739
  labels,
12807
12740
  className
12808
12741
  }) {
12809
- const [isOpen, setIsOpen] = (0, import_react28.useState)(false);
12810
- const [dropdownPosition, setDropdownPosition] = (0, import_react28.useState)(null);
12811
- const triggerButtonRef = (0, import_react28.useRef)(null);
12742
+ const [isOpen, setIsOpen] = (0, import_react26.useState)(false);
12743
+ const [dropdownPosition, setDropdownPosition] = (0, import_react26.useState)(null);
12744
+ const triggerButtonRef = (0, import_react26.useRef)(null);
12812
12745
  const currentLanguage = locales.find((l) => l.code === currentLocale) || locales[0];
12813
12746
  const calculatePosition = () => {
12814
12747
  const rect = triggerButtonRef.current?.getBoundingClientRect();
@@ -12820,8 +12753,8 @@ function LanguageSwitcherHeadless({
12820
12753
  const top = rect.bottom + scrollTop + 8;
12821
12754
  return { top, left, width };
12822
12755
  };
12823
- return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: cn("relative", className), children: [
12824
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
12756
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: cn("relative", className), children: [
12757
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
12825
12758
  Button_default,
12826
12759
  {
12827
12760
  variant: "ghost",
@@ -12840,22 +12773,22 @@ function LanguageSwitcherHeadless({
12840
12773
  "aria-expanded": isOpen,
12841
12774
  "aria-label": labels?.heading ?? "Language",
12842
12775
  title: labels?.heading ?? "Language",
12843
- children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_lucide_react31.Globe, { className: "h-5 w-5" })
12776
+ children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_lucide_react30.Globe, { className: "h-5 w-5" })
12844
12777
  }
12845
12778
  ),
12846
- isOpen && /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(import_jsx_runtime53.Fragment, { children: [
12847
- typeof window !== "undefined" && (0, import_react_dom11.createPortal)(/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "fixed inset-0 z-[9998]", onClick: () => setIsOpen(false) }), document.body),
12779
+ isOpen && /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(import_jsx_runtime52.Fragment, { children: [
12780
+ typeof window !== "undefined" && (0, import_react_dom11.createPortal)(/* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "fixed inset-0 z-[9998]", onClick: () => setIsOpen(false) }), document.body),
12848
12781
  typeof window !== "undefined" && dropdownPosition && (0, import_react_dom11.createPortal)(
12849
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
12782
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
12850
12783
  "div",
12851
12784
  {
12852
12785
  className: "z-[9999] bg-card border border-border rounded-lg shadow-lg overflow-hidden",
12853
12786
  style: { position: "absolute", top: dropdownPosition.top, left: dropdownPosition.left, width: dropdownPosition.width },
12854
12787
  onMouseDown: (e) => e.stopPropagation(),
12855
12788
  role: "menu",
12856
- children: /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "p-2", children: [
12857
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "px-3 py-2 text-sm font-medium text-muted-foreground border-b border-border mb-2", children: labels?.heading ?? "Language" }),
12858
- locales.map((language) => /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(
12789
+ children: /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", { className: "p-2", children: [
12790
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "px-3 py-2 text-sm font-medium text-muted-foreground border-b border-border mb-2", children: labels?.heading ?? "Language" }),
12791
+ locales.map((language) => /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(
12859
12792
  Button_default,
12860
12793
  {
12861
12794
  variant: "ghost",
@@ -12868,9 +12801,9 @@ function LanguageSwitcherHeadless({
12868
12801
  role: "menuitemradio",
12869
12802
  "aria-checked": currentLocale === language.code,
12870
12803
  children: [
12871
- language.flag && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "text-lg", children: language.flag }),
12872
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("span", { className: "flex-1 text-left", children: language.name }),
12873
- currentLocale === language.code && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "w-2 h-2 rounded-full bg-primary" })
12804
+ language.flag && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { className: "text-lg", children: language.flag }),
12805
+ /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { className: "flex-1 text-left", children: language.name }),
12806
+ currentLocale === language.code && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "w-2 h-2 rounded-full bg-primary" })
12874
12807
  ]
12875
12808
  },
12876
12809
  language.code