@underverse-ui/underverse 0.2.9 → 0.2.11

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