@underverse-ui/underverse 0.2.11 → 0.2.13

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