@caratlogic/design-system 0.1.3 → 0.1.5

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.
Files changed (30) hide show
  1. package/dist/components/molecules/Field/Field.d.ts.map +1 -1
  2. package/dist/components/molecules/MetricCard/MetricCard.d.ts +1 -1
  3. package/dist/components/molecules/MetricCard/MetricCard.d.ts.map +1 -1
  4. package/dist/components/molecules/MetricCard/MetricCard.types.d.ts +4 -0
  5. package/dist/components/molecules/MetricCard/MetricCard.types.d.ts.map +1 -1
  6. package/dist/components/molecules/SearchableSelect/SearchableSelect.d.ts.map +1 -1
  7. package/dist/components/molecules/SlideOut/SlideOut.parts.d.ts +1 -1
  8. package/dist/components/molecules/SlideOut/SlideOut.parts.d.ts.map +1 -1
  9. package/dist/components/organisms/FileUploader/FileCard.d.ts +1 -1
  10. package/dist/components/organisms/FileUploader/FileCard.d.ts.map +1 -1
  11. package/dist/components/organisms/FileUploader/FileUploader.utils.d.ts +10 -0
  12. package/dist/components/organisms/FileUploader/FileUploader.utils.d.ts.map +1 -1
  13. package/dist/components/ui/dialog.d.ts +1 -1
  14. package/dist/components/ui/dialog.d.ts.map +1 -1
  15. package/dist/components/ui/textarea.d.ts.map +1 -1
  16. package/dist/hooks/useOverlayBodyLockRelease.d.ts +9 -0
  17. package/dist/hooks/useOverlayBodyLockRelease.d.ts.map +1 -0
  18. package/dist/index.cjs.js +313 -169
  19. package/dist/index.cjs.js.map +1 -1
  20. package/dist/index.d.ts +1 -0
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.esm.js +313 -170
  23. package/dist/index.esm.js.map +1 -1
  24. package/dist/lib/overlayBodyLock.d.ts +12 -0
  25. package/dist/lib/overlayBodyLock.d.ts.map +1 -0
  26. package/dist/ui.cjs.js +79 -4
  27. package/dist/ui.cjs.js.map +1 -1
  28. package/dist/ui.esm.js +79 -4
  29. package/dist/ui.esm.js.map +1 -1
  30. package/package.json +1 -1
package/dist/index.cjs.js CHANGED
@@ -2698,12 +2698,12 @@ const createLucideIcon = (iconName, iconNode) => {
2698
2698
  */
2699
2699
 
2700
2700
 
2701
- const __iconNode$16 = [
2701
+ const __iconNode$17 = [
2702
2702
  ["rect", { width: "20", height: "5", x: "2", y: "3", rx: "1", key: "1wp1u1" }],
2703
2703
  ["path", { d: "M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8", key: "1s80jp" }],
2704
2704
  ["path", { d: "M10 12h4", key: "a56b0p" }]
2705
2705
  ];
2706
- const Archive = createLucideIcon("archive", __iconNode$16);
2706
+ const Archive = createLucideIcon("archive", __iconNode$17);
2707
2707
 
2708
2708
  /**
2709
2709
  * @license lucide-react v0.539.0 - ISC
@@ -2713,11 +2713,11 @@ const Archive = createLucideIcon("archive", __iconNode$16);
2713
2713
  */
2714
2714
 
2715
2715
 
2716
- const __iconNode$15 = [
2716
+ const __iconNode$16 = [
2717
2717
  ["path", { d: "m12 19-7-7 7-7", key: "1l729n" }],
2718
2718
  ["path", { d: "M19 12H5", key: "x3x0zl" }]
2719
2719
  ];
2720
- const ArrowLeft = createLucideIcon("arrow-left", __iconNode$15);
2720
+ const ArrowLeft = createLucideIcon("arrow-left", __iconNode$16);
2721
2721
 
2722
2722
  /**
2723
2723
  * @license lucide-react v0.539.0 - ISC
@@ -2727,11 +2727,11 @@ const ArrowLeft = createLucideIcon("arrow-left", __iconNode$15);
2727
2727
  */
2728
2728
 
2729
2729
 
2730
- const __iconNode$14 = [
2730
+ const __iconNode$15 = [
2731
2731
  ["path", { d: "M5 12h14", key: "1ays0h" }],
2732
2732
  ["path", { d: "m12 5 7 7-7 7", key: "xquz4c" }]
2733
2733
  ];
2734
- const ArrowRight = createLucideIcon("arrow-right", __iconNode$14);
2734
+ const ArrowRight = createLucideIcon("arrow-right", __iconNode$15);
2735
2735
 
2736
2736
  /**
2737
2737
  * @license lucide-react v0.539.0 - ISC
@@ -2741,11 +2741,11 @@ const ArrowRight = createLucideIcon("arrow-right", __iconNode$14);
2741
2741
  */
2742
2742
 
2743
2743
 
2744
- const __iconNode$13 = [
2744
+ const __iconNode$14 = [
2745
2745
  ["path", { d: "M4.929 4.929 19.07 19.071", key: "196cmz" }],
2746
2746
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }]
2747
2747
  ];
2748
- const Ban = createLucideIcon("ban", __iconNode$13);
2748
+ const Ban = createLucideIcon("ban", __iconNode$14);
2749
2749
 
2750
2750
  /**
2751
2751
  * @license lucide-react v0.539.0 - ISC
@@ -2755,7 +2755,7 @@ const Ban = createLucideIcon("ban", __iconNode$13);
2755
2755
  */
2756
2756
 
2757
2757
 
2758
- const __iconNode$12 = [
2758
+ const __iconNode$13 = [
2759
2759
  ["path", { d: "M10.268 21a2 2 0 0 0 3.464 0", key: "vwvbt9" }],
2760
2760
  [
2761
2761
  "path",
@@ -2765,7 +2765,7 @@ const __iconNode$12 = [
2765
2765
  }
2766
2766
  ]
2767
2767
  ];
2768
- const Bell = createLucideIcon("bell", __iconNode$12);
2768
+ const Bell = createLucideIcon("bell", __iconNode$13);
2769
2769
 
2770
2770
  /**
2771
2771
  * @license lucide-react v0.539.0 - ISC
@@ -2775,13 +2775,13 @@ const Bell = createLucideIcon("bell", __iconNode$12);
2775
2775
  */
2776
2776
 
2777
2777
 
2778
- const __iconNode$11 = [
2778
+ const __iconNode$12 = [
2779
2779
  [
2780
2780
  "path",
2781
2781
  { d: "M6 12h9a4 4 0 0 1 0 8H7a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h7a4 4 0 0 1 0 8", key: "mg9rjx" }
2782
2782
  ]
2783
2783
  ];
2784
- const Bold$1 = createLucideIcon("bold", __iconNode$11);
2784
+ const Bold$1 = createLucideIcon("bold", __iconNode$12);
2785
2785
 
2786
2786
  /**
2787
2787
  * @license lucide-react v0.539.0 - ISC
@@ -2791,7 +2791,7 @@ const Bold$1 = createLucideIcon("bold", __iconNode$11);
2791
2791
  */
2792
2792
 
2793
2793
 
2794
- const __iconNode$10 = [
2794
+ const __iconNode$11 = [
2795
2795
  ["path", { d: "M8 2v4", key: "1cmpym" }],
2796
2796
  ["path", { d: "M16 2v4", key: "4m81vk" }],
2797
2797
  ["rect", { width: "18", height: "18", x: "3", y: "4", rx: "2", key: "1hopcy" }],
@@ -2803,7 +2803,7 @@ const __iconNode$10 = [
2803
2803
  ["path", { d: "M12 18h.01", key: "mhygvu" }],
2804
2804
  ["path", { d: "M16 18h.01", key: "kzsmim" }]
2805
2805
  ];
2806
- const CalendarDays = createLucideIcon("calendar-days", __iconNode$10);
2806
+ const CalendarDays = createLucideIcon("calendar-days", __iconNode$11);
2807
2807
 
2808
2808
  /**
2809
2809
  * @license lucide-react v0.539.0 - ISC
@@ -2813,13 +2813,13 @@ const CalendarDays = createLucideIcon("calendar-days", __iconNode$10);
2813
2813
  */
2814
2814
 
2815
2815
 
2816
- const __iconNode$$ = [
2816
+ const __iconNode$10 = [
2817
2817
  ["path", { d: "M8 2v4", key: "1cmpym" }],
2818
2818
  ["path", { d: "M16 2v4", key: "4m81vk" }],
2819
2819
  ["rect", { width: "18", height: "18", x: "3", y: "4", rx: "2", key: "1hopcy" }],
2820
2820
  ["path", { d: "M3 10h18", key: "8toen8" }]
2821
2821
  ];
2822
- const Calendar$1 = createLucideIcon("calendar", __iconNode$$);
2822
+ const Calendar$1 = createLucideIcon("calendar", __iconNode$10);
2823
2823
 
2824
2824
  /**
2825
2825
  * @license lucide-react v0.539.0 - ISC
@@ -2829,11 +2829,11 @@ const Calendar$1 = createLucideIcon("calendar", __iconNode$$);
2829
2829
  */
2830
2830
 
2831
2831
 
2832
- const __iconNode$_ = [
2832
+ const __iconNode$$ = [
2833
2833
  ["path", { d: "M18 6 7 17l-5-5", key: "116fxf" }],
2834
2834
  ["path", { d: "m22 10-7.5 7.5L13 16", key: "ke71qq" }]
2835
2835
  ];
2836
- const CheckCheck = createLucideIcon("check-check", __iconNode$_);
2836
+ const CheckCheck = createLucideIcon("check-check", __iconNode$$);
2837
2837
 
2838
2838
  /**
2839
2839
  * @license lucide-react v0.539.0 - ISC
@@ -2843,8 +2843,8 @@ const CheckCheck = createLucideIcon("check-check", __iconNode$_);
2843
2843
  */
2844
2844
 
2845
2845
 
2846
- const __iconNode$Z = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
2847
- const Check = createLucideIcon("check", __iconNode$Z);
2846
+ const __iconNode$_ = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
2847
+ const Check = createLucideIcon("check", __iconNode$_);
2848
2848
 
2849
2849
  /**
2850
2850
  * @license lucide-react v0.539.0 - ISC
@@ -2854,8 +2854,8 @@ const Check = createLucideIcon("check", __iconNode$Z);
2854
2854
  */
2855
2855
 
2856
2856
 
2857
- const __iconNode$Y = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
2858
- const ChevronDown = createLucideIcon("chevron-down", __iconNode$Y);
2857
+ const __iconNode$Z = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
2858
+ const ChevronDown = createLucideIcon("chevron-down", __iconNode$Z);
2859
2859
 
2860
2860
  /**
2861
2861
  * @license lucide-react v0.539.0 - ISC
@@ -2865,8 +2865,8 @@ const ChevronDown = createLucideIcon("chevron-down", __iconNode$Y);
2865
2865
  */
2866
2866
 
2867
2867
 
2868
- const __iconNode$X = [["path", { d: "m15 18-6-6 6-6", key: "1wnfg3" }]];
2869
- const ChevronLeft = createLucideIcon("chevron-left", __iconNode$X);
2868
+ const __iconNode$Y = [["path", { d: "m15 18-6-6 6-6", key: "1wnfg3" }]];
2869
+ const ChevronLeft = createLucideIcon("chevron-left", __iconNode$Y);
2870
2870
 
2871
2871
  /**
2872
2872
  * @license lucide-react v0.539.0 - ISC
@@ -2876,8 +2876,8 @@ const ChevronLeft = createLucideIcon("chevron-left", __iconNode$X);
2876
2876
  */
2877
2877
 
2878
2878
 
2879
- const __iconNode$W = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
2880
- const ChevronRight = createLucideIcon("chevron-right", __iconNode$W);
2879
+ const __iconNode$X = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
2880
+ const ChevronRight = createLucideIcon("chevron-right", __iconNode$X);
2881
2881
 
2882
2882
  /**
2883
2883
  * @license lucide-react v0.539.0 - ISC
@@ -2887,8 +2887,8 @@ const ChevronRight = createLucideIcon("chevron-right", __iconNode$W);
2887
2887
  */
2888
2888
 
2889
2889
 
2890
- const __iconNode$V = [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]];
2891
- const ChevronUp = createLucideIcon("chevron-up", __iconNode$V);
2890
+ const __iconNode$W = [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]];
2891
+ const ChevronUp = createLucideIcon("chevron-up", __iconNode$W);
2892
2892
 
2893
2893
  /**
2894
2894
  * @license lucide-react v0.539.0 - ISC
@@ -2898,11 +2898,11 @@ const ChevronUp = createLucideIcon("chevron-up", __iconNode$V);
2898
2898
  */
2899
2899
 
2900
2900
 
2901
- const __iconNode$U = [
2901
+ const __iconNode$V = [
2902
2902
  ["path", { d: "m11 17-5-5 5-5", key: "13zhaf" }],
2903
2903
  ["path", { d: "m18 17-5-5 5-5", key: "h8a8et" }]
2904
2904
  ];
2905
- const ChevronsLeft = createLucideIcon("chevrons-left", __iconNode$U);
2905
+ const ChevronsLeft = createLucideIcon("chevrons-left", __iconNode$V);
2906
2906
 
2907
2907
  /**
2908
2908
  * @license lucide-react v0.539.0 - ISC
@@ -2912,11 +2912,11 @@ const ChevronsLeft = createLucideIcon("chevrons-left", __iconNode$U);
2912
2912
  */
2913
2913
 
2914
2914
 
2915
- const __iconNode$T = [
2915
+ const __iconNode$U = [
2916
2916
  ["path", { d: "m6 17 5-5-5-5", key: "xnjwq" }],
2917
2917
  ["path", { d: "m13 17 5-5-5-5", key: "17xmmf" }]
2918
2918
  ];
2919
- const ChevronsRight = createLucideIcon("chevrons-right", __iconNode$T);
2919
+ const ChevronsRight = createLucideIcon("chevrons-right", __iconNode$U);
2920
2920
 
2921
2921
  /**
2922
2922
  * @license lucide-react v0.539.0 - ISC
@@ -2926,12 +2926,12 @@ const ChevronsRight = createLucideIcon("chevrons-right", __iconNode$T);
2926
2926
  */
2927
2927
 
2928
2928
 
2929
- const __iconNode$S = [
2929
+ const __iconNode$T = [
2930
2930
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
2931
2931
  ["line", { x1: "12", x2: "12", y1: "8", y2: "12", key: "1pkeuh" }],
2932
2932
  ["line", { x1: "12", x2: "12.01", y1: "16", y2: "16", key: "4dfq90" }]
2933
2933
  ];
2934
- const CircleAlert = createLucideIcon("circle-alert", __iconNode$S);
2934
+ const CircleAlert = createLucideIcon("circle-alert", __iconNode$T);
2935
2935
 
2936
2936
  /**
2937
2937
  * @license lucide-react v0.539.0 - ISC
@@ -2941,11 +2941,11 @@ const CircleAlert = createLucideIcon("circle-alert", __iconNode$S);
2941
2941
  */
2942
2942
 
2943
2943
 
2944
- const __iconNode$R = [
2944
+ const __iconNode$S = [
2945
2945
  ["path", { d: "M21.801 10A10 10 0 1 1 17 3.335", key: "yps3ct" }],
2946
2946
  ["path", { d: "m9 11 3 3L22 4", key: "1pflzl" }]
2947
2947
  ];
2948
- const CircleCheckBig = createLucideIcon("circle-check-big", __iconNode$R);
2948
+ const CircleCheckBig = createLucideIcon("circle-check-big", __iconNode$S);
2949
2949
 
2950
2950
  /**
2951
2951
  * @license lucide-react v0.539.0 - ISC
@@ -2955,11 +2955,11 @@ const CircleCheckBig = createLucideIcon("circle-check-big", __iconNode$R);
2955
2955
  */
2956
2956
 
2957
2957
 
2958
- const __iconNode$Q = [
2958
+ const __iconNode$R = [
2959
2959
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
2960
2960
  ["path", { d: "m9 12 2 2 4-4", key: "dzmm74" }]
2961
2961
  ];
2962
- const CircleCheck = createLucideIcon("circle-check", __iconNode$Q);
2962
+ const CircleCheck = createLucideIcon("circle-check", __iconNode$R);
2963
2963
 
2964
2964
  /**
2965
2965
  * @license lucide-react v0.539.0 - ISC
@@ -2969,12 +2969,12 @@ const CircleCheck = createLucideIcon("circle-check", __iconNode$Q);
2969
2969
  */
2970
2970
 
2971
2971
 
2972
- const __iconNode$P = [
2972
+ const __iconNode$Q = [
2973
2973
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
2974
2974
  ["path", { d: "m15 9-6 6", key: "1uzhvr" }],
2975
2975
  ["path", { d: "m9 9 6 6", key: "z0biqf" }]
2976
2976
  ];
2977
- const CircleX = createLucideIcon("circle-x", __iconNode$P);
2977
+ const CircleX = createLucideIcon("circle-x", __iconNode$Q);
2978
2978
 
2979
2979
  /**
2980
2980
  * @license lucide-react v0.539.0 - ISC
@@ -2984,8 +2984,8 @@ const CircleX = createLucideIcon("circle-x", __iconNode$P);
2984
2984
  */
2985
2985
 
2986
2986
 
2987
- const __iconNode$O = [["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }]];
2988
- const Circle = createLucideIcon("circle", __iconNode$O);
2987
+ const __iconNode$P = [["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }]];
2988
+ const Circle = createLucideIcon("circle", __iconNode$P);
2989
2989
 
2990
2990
  /**
2991
2991
  * @license lucide-react v0.539.0 - ISC
@@ -2995,11 +2995,11 @@ const Circle = createLucideIcon("circle", __iconNode$O);
2995
2995
  */
2996
2996
 
2997
2997
 
2998
- const __iconNode$N = [
2998
+ const __iconNode$O = [
2999
2999
  ["path", { d: "M12 6v6l4 2", key: "mmk7yg" }],
3000
3000
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }]
3001
3001
  ];
3002
- const Clock = createLucideIcon("clock", __iconNode$N);
3002
+ const Clock = createLucideIcon("clock", __iconNode$O);
3003
3003
 
3004
3004
  /**
3005
3005
  * @license lucide-react v0.539.0 - ISC
@@ -3009,11 +3009,11 @@ const Clock = createLucideIcon("clock", __iconNode$N);
3009
3009
  */
3010
3010
 
3011
3011
 
3012
- const __iconNode$M = [
3012
+ const __iconNode$N = [
3013
3013
  ["rect", { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2", key: "17jyea" }],
3014
3014
  ["path", { d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2", key: "zix9uf" }]
3015
3015
  ];
3016
- const Copy = createLucideIcon("copy", __iconNode$M);
3016
+ const Copy = createLucideIcon("copy", __iconNode$N);
3017
3017
 
3018
3018
  /**
3019
3019
  * @license lucide-react v0.539.0 - ISC
@@ -3023,11 +3023,11 @@ const Copy = createLucideIcon("copy", __iconNode$M);
3023
3023
  */
3024
3024
 
3025
3025
 
3026
- const __iconNode$L = [
3026
+ const __iconNode$M = [
3027
3027
  ["path", { d: "M6 2v14a2 2 0 0 0 2 2h14", key: "ron5a4" }],
3028
3028
  ["path", { d: "M18 22V8a2 2 0 0 0-2-2H2", key: "7s9ehn" }]
3029
3029
  ];
3030
- const Crop = createLucideIcon("crop", __iconNode$L);
3030
+ const Crop = createLucideIcon("crop", __iconNode$M);
3031
3031
 
3032
3032
  /**
3033
3033
  * @license lucide-react v0.539.0 - ISC
@@ -3037,12 +3037,12 @@ const Crop = createLucideIcon("crop", __iconNode$L);
3037
3037
  */
3038
3038
 
3039
3039
 
3040
- const __iconNode$K = [
3040
+ const __iconNode$L = [
3041
3041
  ["path", { d: "M12 15V3", key: "m9g1x1" }],
3042
3042
  ["path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4", key: "ih7n3h" }],
3043
3043
  ["path", { d: "m7 10 5 5 5-5", key: "brsn70" }]
3044
3044
  ];
3045
- const Download = createLucideIcon("download", __iconNode$K);
3045
+ const Download = createLucideIcon("download", __iconNode$L);
3046
3046
 
3047
3047
  /**
3048
3048
  * @license lucide-react v0.539.0 - ISC
@@ -3052,12 +3052,12 @@ const Download = createLucideIcon("download", __iconNode$K);
3052
3052
  */
3053
3053
 
3054
3054
 
3055
- const __iconNode$J = [
3055
+ const __iconNode$K = [
3056
3056
  ["circle", { cx: "12", cy: "12", r: "1", key: "41hilf" }],
3057
3057
  ["circle", { cx: "12", cy: "5", r: "1", key: "gxeob9" }],
3058
3058
  ["circle", { cx: "12", cy: "19", r: "1", key: "lyex9k" }]
3059
3059
  ];
3060
- const EllipsisVertical = createLucideIcon("ellipsis-vertical", __iconNode$J);
3060
+ const EllipsisVertical = createLucideIcon("ellipsis-vertical", __iconNode$K);
3061
3061
 
3062
3062
  /**
3063
3063
  * @license lucide-react v0.539.0 - ISC
@@ -3067,12 +3067,12 @@ const EllipsisVertical = createLucideIcon("ellipsis-vertical", __iconNode$J);
3067
3067
  */
3068
3068
 
3069
3069
 
3070
- const __iconNode$I = [
3070
+ const __iconNode$J = [
3071
3071
  ["circle", { cx: "12", cy: "12", r: "1", key: "41hilf" }],
3072
3072
  ["circle", { cx: "19", cy: "12", r: "1", key: "1wjl8i" }],
3073
3073
  ["circle", { cx: "5", cy: "12", r: "1", key: "1pcz8c" }]
3074
3074
  ];
3075
- const Ellipsis = createLucideIcon("ellipsis", __iconNode$I);
3075
+ const Ellipsis = createLucideIcon("ellipsis", __iconNode$J);
3076
3076
 
3077
3077
  /**
3078
3078
  * @license lucide-react v0.539.0 - ISC
@@ -3082,12 +3082,12 @@ const Ellipsis = createLucideIcon("ellipsis", __iconNode$I);
3082
3082
  */
3083
3083
 
3084
3084
 
3085
- const __iconNode$H = [
3085
+ const __iconNode$I = [
3086
3086
  ["path", { d: "M15 3h6v6", key: "1q9fwt" }],
3087
3087
  ["path", { d: "M10 14 21 3", key: "gplh6r" }],
3088
3088
  ["path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6", key: "a6xqqp" }]
3089
3089
  ];
3090
- const ExternalLink = createLucideIcon("external-link", __iconNode$H);
3090
+ const ExternalLink = createLucideIcon("external-link", __iconNode$I);
3091
3091
 
3092
3092
  /**
3093
3093
  * @license lucide-react v0.539.0 - ISC
@@ -3097,7 +3097,7 @@ const ExternalLink = createLucideIcon("external-link", __iconNode$H);
3097
3097
  */
3098
3098
 
3099
3099
 
3100
- const __iconNode$G = [
3100
+ const __iconNode$H = [
3101
3101
  [
3102
3102
  "path",
3103
3103
  {
@@ -3107,7 +3107,7 @@ const __iconNode$G = [
3107
3107
  ],
3108
3108
  ["circle", { cx: "12", cy: "12", r: "3", key: "1v7zrd" }]
3109
3109
  ];
3110
- const Eye = createLucideIcon("eye", __iconNode$G);
3110
+ const Eye = createLucideIcon("eye", __iconNode$H);
3111
3111
 
3112
3112
  /**
3113
3113
  * @license lucide-react v0.539.0 - ISC
@@ -3117,13 +3117,13 @@ const Eye = createLucideIcon("eye", __iconNode$G);
3117
3117
  */
3118
3118
 
3119
3119
 
3120
- const __iconNode$F = [
3120
+ const __iconNode$G = [
3121
3121
  [
3122
3122
  "path",
3123
3123
  { d: "M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z", key: "1jg4f8" }
3124
3124
  ]
3125
3125
  ];
3126
- const Facebook = createLucideIcon("facebook", __iconNode$F);
3126
+ const Facebook = createLucideIcon("facebook", __iconNode$G);
3127
3127
 
3128
3128
  /**
3129
3129
  * @license lucide-react v0.539.0 - ISC
@@ -3133,7 +3133,7 @@ const Facebook = createLucideIcon("facebook", __iconNode$F);
3133
3133
  */
3134
3134
 
3135
3135
 
3136
- const __iconNode$E = [
3136
+ const __iconNode$F = [
3137
3137
  ["path", { d: "M12 22h6a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v3.072", key: "n6s66f" }],
3138
3138
  ["path", { d: "M14 2v4a2 2 0 0 0 2 2h4", key: "tnqrlb" }],
3139
3139
  [
@@ -3145,7 +3145,7 @@ const __iconNode$E = [
3145
3145
  ],
3146
3146
  ["circle", { cx: "5", cy: "14", r: "3", key: "ufru5t" }]
3147
3147
  ];
3148
- const FileBadge = createLucideIcon("file-badge", __iconNode$E);
3148
+ const FileBadge = createLucideIcon("file-badge", __iconNode$F);
3149
3149
 
3150
3150
  /**
3151
3151
  * @license lucide-react v0.539.0 - ISC
@@ -3155,14 +3155,14 @@ const FileBadge = createLucideIcon("file-badge", __iconNode$E);
3155
3155
  */
3156
3156
 
3157
3157
 
3158
- const __iconNode$D = [
3158
+ const __iconNode$E = [
3159
3159
  ["path", { d: "M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z", key: "1rqfz7" }],
3160
3160
  ["path", { d: "M14 2v4a2 2 0 0 0 2 2h4", key: "tnqrlb" }],
3161
3161
  ["path", { d: "M10 9H8", key: "b1mrlr" }],
3162
3162
  ["path", { d: "M16 13H8", key: "t4e002" }],
3163
3163
  ["path", { d: "M16 17H8", key: "z1uh3a" }]
3164
3164
  ];
3165
- const FileText = createLucideIcon("file-text", __iconNode$D);
3165
+ const FileText = createLucideIcon("file-text", __iconNode$E);
3166
3166
 
3167
3167
  /**
3168
3168
  * @license lucide-react v0.539.0 - ISC
@@ -3172,7 +3172,7 @@ const FileText = createLucideIcon("file-text", __iconNode$D);
3172
3172
  */
3173
3173
 
3174
3174
 
3175
- const __iconNode$C = [
3175
+ const __iconNode$D = [
3176
3176
  [
3177
3177
  "path",
3178
3178
  {
@@ -3181,7 +3181,7 @@ const __iconNode$C = [
3181
3181
  }
3182
3182
  ]
3183
3183
  ];
3184
- const Funnel = createLucideIcon("funnel", __iconNode$C);
3184
+ const Funnel = createLucideIcon("funnel", __iconNode$D);
3185
3185
 
3186
3186
  /**
3187
3187
  * @license lucide-react v0.539.0 - ISC
@@ -3191,7 +3191,7 @@ const Funnel = createLucideIcon("funnel", __iconNode$C);
3191
3191
  */
3192
3192
 
3193
3193
 
3194
- const __iconNode$B = [
3194
+ const __iconNode$C = [
3195
3195
  ["circle", { cx: "12", cy: "9", r: "1", key: "124mty" }],
3196
3196
  ["circle", { cx: "19", cy: "9", r: "1", key: "1ruzo2" }],
3197
3197
  ["circle", { cx: "5", cy: "9", r: "1", key: "1a8b28" }],
@@ -3199,7 +3199,7 @@ const __iconNode$B = [
3199
3199
  ["circle", { cx: "19", cy: "15", r: "1", key: "1a92ep" }],
3200
3200
  ["circle", { cx: "5", cy: "15", r: "1", key: "5r1jwy" }]
3201
3201
  ];
3202
- const GripHorizontal = createLucideIcon("grip-horizontal", __iconNode$B);
3202
+ const GripHorizontal = createLucideIcon("grip-horizontal", __iconNode$C);
3203
3203
 
3204
3204
  /**
3205
3205
  * @license lucide-react v0.539.0 - ISC
@@ -3209,7 +3209,7 @@ const GripHorizontal = createLucideIcon("grip-horizontal", __iconNode$B);
3209
3209
  */
3210
3210
 
3211
3211
 
3212
- const __iconNode$A = [
3212
+ const __iconNode$B = [
3213
3213
  ["circle", { cx: "9", cy: "12", r: "1", key: "1vctgf" }],
3214
3214
  ["circle", { cx: "9", cy: "5", r: "1", key: "hp0tcf" }],
3215
3215
  ["circle", { cx: "9", cy: "19", r: "1", key: "fkjjf6" }],
@@ -3217,7 +3217,7 @@ const __iconNode$A = [
3217
3217
  ["circle", { cx: "15", cy: "5", r: "1", key: "19l28e" }],
3218
3218
  ["circle", { cx: "15", cy: "19", r: "1", key: "f4zoj3" }]
3219
3219
  ];
3220
- const GripVertical = createLucideIcon("grip-vertical", __iconNode$A);
3220
+ const GripVertical = createLucideIcon("grip-vertical", __iconNode$B);
3221
3221
 
3222
3222
  /**
3223
3223
  * @license lucide-react v0.539.0 - ISC
@@ -3227,13 +3227,13 @@ const GripVertical = createLucideIcon("grip-vertical", __iconNode$A);
3227
3227
  */
3228
3228
 
3229
3229
 
3230
- const __iconNode$z = [
3230
+ const __iconNode$A = [
3231
3231
  ["path", { d: "M4 12h8", key: "17cfdx" }],
3232
3232
  ["path", { d: "M4 18V6", key: "1rz3zl" }],
3233
3233
  ["path", { d: "M12 18V6", key: "zqpxq5" }],
3234
3234
  ["path", { d: "m17 12 3-2v8", key: "1hhhft" }]
3235
3235
  ];
3236
- const Heading1 = createLucideIcon("heading-1", __iconNode$z);
3236
+ const Heading1 = createLucideIcon("heading-1", __iconNode$A);
3237
3237
 
3238
3238
  /**
3239
3239
  * @license lucide-react v0.539.0 - ISC
@@ -3243,13 +3243,13 @@ const Heading1 = createLucideIcon("heading-1", __iconNode$z);
3243
3243
  */
3244
3244
 
3245
3245
 
3246
- const __iconNode$y = [
3246
+ const __iconNode$z = [
3247
3247
  ["path", { d: "M4 12h8", key: "17cfdx" }],
3248
3248
  ["path", { d: "M4 18V6", key: "1rz3zl" }],
3249
3249
  ["path", { d: "M12 18V6", key: "zqpxq5" }],
3250
3250
  ["path", { d: "M21 18h-4c0-4 4-3 4-6 0-1.5-2-2.5-4-1", key: "9jr5yi" }]
3251
3251
  ];
3252
- const Heading2 = createLucideIcon("heading-2", __iconNode$y);
3252
+ const Heading2 = createLucideIcon("heading-2", __iconNode$z);
3253
3253
 
3254
3254
  /**
3255
3255
  * @license lucide-react v0.539.0 - ISC
@@ -3259,14 +3259,14 @@ const Heading2 = createLucideIcon("heading-2", __iconNode$y);
3259
3259
  */
3260
3260
 
3261
3261
 
3262
- const __iconNode$x = [
3262
+ const __iconNode$y = [
3263
3263
  ["path", { d: "M4 12h8", key: "17cfdx" }],
3264
3264
  ["path", { d: "M4 18V6", key: "1rz3zl" }],
3265
3265
  ["path", { d: "M12 18V6", key: "zqpxq5" }],
3266
3266
  ["path", { d: "M17.5 10.5c1.7-1 3.5 0 3.5 1.5a2 2 0 0 1-2 2", key: "68ncm8" }],
3267
3267
  ["path", { d: "M17 17.5c2 1.5 4 .3 4-1.5a2 2 0 0 0-2-2", key: "1ejuhz" }]
3268
3268
  ];
3269
- const Heading3 = createLucideIcon("heading-3", __iconNode$x);
3269
+ const Heading3 = createLucideIcon("heading-3", __iconNode$y);
3270
3270
 
3271
3271
  /**
3272
3272
  * @license lucide-react v0.539.0 - ISC
@@ -3276,12 +3276,12 @@ const Heading3 = createLucideIcon("heading-3", __iconNode$x);
3276
3276
  */
3277
3277
 
3278
3278
 
3279
- const __iconNode$w = [
3279
+ const __iconNode$x = [
3280
3280
  ["path", { d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8", key: "1357e3" }],
3281
3281
  ["path", { d: "M3 3v5h5", key: "1xhq8a" }],
3282
3282
  ["path", { d: "M12 7v5l4 2", key: "1fdv2h" }]
3283
3283
  ];
3284
- const History = createLucideIcon("history", __iconNode$w);
3284
+ const History = createLucideIcon("history", __iconNode$x);
3285
3285
 
3286
3286
  /**
3287
3287
  * @license lucide-react v0.539.0 - ISC
@@ -3291,12 +3291,12 @@ const History = createLucideIcon("history", __iconNode$w);
3291
3291
  */
3292
3292
 
3293
3293
 
3294
- const __iconNode$v = [
3294
+ const __iconNode$w = [
3295
3295
  ["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", ry: "2", key: "1m3agn" }],
3296
3296
  ["circle", { cx: "9", cy: "9", r: "2", key: "af1f0g" }],
3297
3297
  ["path", { d: "m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21", key: "1xmnt7" }]
3298
3298
  ];
3299
- const Image$1 = createLucideIcon("image", __iconNode$v);
3299
+ const Image$1 = createLucideIcon("image", __iconNode$w);
3300
3300
 
3301
3301
  /**
3302
3302
  * @license lucide-react v0.539.0 - ISC
@@ -3306,12 +3306,12 @@ const Image$1 = createLucideIcon("image", __iconNode$v);
3306
3306
  */
3307
3307
 
3308
3308
 
3309
- const __iconNode$u = [
3309
+ const __iconNode$v = [
3310
3310
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
3311
3311
  ["path", { d: "M12 16v-4", key: "1dtifu" }],
3312
3312
  ["path", { d: "M12 8h.01", key: "e9boi3" }]
3313
3313
  ];
3314
- const Info = createLucideIcon("info", __iconNode$u);
3314
+ const Info = createLucideIcon("info", __iconNode$v);
3315
3315
 
3316
3316
  /**
3317
3317
  * @license lucide-react v0.539.0 - ISC
@@ -3321,12 +3321,12 @@ const Info = createLucideIcon("info", __iconNode$u);
3321
3321
  */
3322
3322
 
3323
3323
 
3324
- const __iconNode$t = [
3324
+ const __iconNode$u = [
3325
3325
  ["line", { x1: "19", x2: "10", y1: "4", y2: "4", key: "15jd3p" }],
3326
3326
  ["line", { x1: "14", x2: "5", y1: "20", y2: "20", key: "bu0au3" }],
3327
3327
  ["line", { x1: "15", x2: "9", y1: "4", y2: "20", key: "uljnxc" }]
3328
3328
  ];
3329
- const Italic$1 = createLucideIcon("italic", __iconNode$t);
3329
+ const Italic$1 = createLucideIcon("italic", __iconNode$u);
3330
3330
 
3331
3331
  /**
3332
3332
  * @license lucide-react v0.539.0 - ISC
@@ -3336,12 +3336,12 @@ const Italic$1 = createLucideIcon("italic", __iconNode$t);
3336
3336
  */
3337
3337
 
3338
3338
 
3339
- const __iconNode$s = [
3339
+ const __iconNode$t = [
3340
3340
  ["path", { d: "M9 17H7A5 5 0 0 1 7 7h2", key: "8i5ue5" }],
3341
3341
  ["path", { d: "M15 7h2a5 5 0 1 1 0 10h-2", key: "1b9ql8" }],
3342
3342
  ["line", { x1: "8", x2: "16", y1: "12", y2: "12", key: "1jonct" }]
3343
3343
  ];
3344
- const Link2 = createLucideIcon("link-2", __iconNode$s);
3344
+ const Link2 = createLucideIcon("link-2", __iconNode$t);
3345
3345
 
3346
3346
  /**
3347
3347
  * @license lucide-react v0.539.0 - ISC
@@ -3351,7 +3351,7 @@ const Link2 = createLucideIcon("link-2", __iconNode$s);
3351
3351
  */
3352
3352
 
3353
3353
 
3354
- const __iconNode$r = [
3354
+ const __iconNode$s = [
3355
3355
  ["path", { d: "M10 12h11", key: "6m4ad9" }],
3356
3356
  ["path", { d: "M10 18h11", key: "11hvi2" }],
3357
3357
  ["path", { d: "M10 6h11", key: "c7qv1k" }],
@@ -3359,7 +3359,7 @@ const __iconNode$r = [
3359
3359
  ["path", { d: "M4 6h1v4", key: "cnovpq" }],
3360
3360
  ["path", { d: "M6 18H4c0-1 2-2 2-3s-1-1.5-2-1", key: "m9a95d" }]
3361
3361
  ];
3362
- const ListOrdered = createLucideIcon("list-ordered", __iconNode$r);
3362
+ const ListOrdered = createLucideIcon("list-ordered", __iconNode$s);
3363
3363
 
3364
3364
  /**
3365
3365
  * @license lucide-react v0.539.0 - ISC
@@ -3369,7 +3369,7 @@ const ListOrdered = createLucideIcon("list-ordered", __iconNode$r);
3369
3369
  */
3370
3370
 
3371
3371
 
3372
- const __iconNode$q = [
3372
+ const __iconNode$r = [
3373
3373
  ["path", { d: "M3 12h.01", key: "nlz23k" }],
3374
3374
  ["path", { d: "M3 18h.01", key: "1tta3j" }],
3375
3375
  ["path", { d: "M3 6h.01", key: "1rqtza" }],
@@ -3377,7 +3377,7 @@ const __iconNode$q = [
3377
3377
  ["path", { d: "M8 18h13", key: "1lx6n3" }],
3378
3378
  ["path", { d: "M8 6h13", key: "ik3vkj" }]
3379
3379
  ];
3380
- const List = createLucideIcon("list", __iconNode$q);
3380
+ const List = createLucideIcon("list", __iconNode$r);
3381
3381
 
3382
3382
  /**
3383
3383
  * @license lucide-react v0.539.0 - ISC
@@ -3387,8 +3387,8 @@ const List = createLucideIcon("list", __iconNode$q);
3387
3387
  */
3388
3388
 
3389
3389
 
3390
- const __iconNode$p = [["path", { d: "M21 12a9 9 0 1 1-6.219-8.56", key: "13zald" }]];
3391
- const LoaderCircle = createLucideIcon("loader-circle", __iconNode$p);
3390
+ const __iconNode$q = [["path", { d: "M21 12a9 9 0 1 1-6.219-8.56", key: "13zald" }]];
3391
+ const LoaderCircle = createLucideIcon("loader-circle", __iconNode$q);
3392
3392
 
3393
3393
  /**
3394
3394
  * @license lucide-react v0.539.0 - ISC
@@ -3398,7 +3398,7 @@ const LoaderCircle = createLucideIcon("loader-circle", __iconNode$p);
3398
3398
  */
3399
3399
 
3400
3400
 
3401
- const __iconNode$o = [
3401
+ const __iconNode$p = [
3402
3402
  ["path", { d: "M12 2v4", key: "3427ic" }],
3403
3403
  ["path", { d: "m16.2 7.8 2.9-2.9", key: "r700ao" }],
3404
3404
  ["path", { d: "M18 12h4", key: "wj9ykh" }],
@@ -3408,7 +3408,7 @@ const __iconNode$o = [
3408
3408
  ["path", { d: "M2 12h4", key: "j09sii" }],
3409
3409
  ["path", { d: "m4.9 4.9 2.9 2.9", key: "giyufr" }]
3410
3410
  ];
3411
- const Loader = createLucideIcon("loader", __iconNode$o);
3411
+ const Loader = createLucideIcon("loader", __iconNode$p);
3412
3412
 
3413
3413
  /**
3414
3414
  * @license lucide-react v0.539.0 - ISC
@@ -3418,12 +3418,12 @@ const Loader = createLucideIcon("loader", __iconNode$o);
3418
3418
  */
3419
3419
 
3420
3420
 
3421
- const __iconNode$n = [
3421
+ const __iconNode$o = [
3422
3422
  ["path", { d: "m16 17 5-5-5-5", key: "1bji2h" }],
3423
3423
  ["path", { d: "M21 12H9", key: "dn1m92" }],
3424
3424
  ["path", { d: "M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4", key: "1uf3rs" }]
3425
3425
  ];
3426
- const LogOut = createLucideIcon("log-out", __iconNode$n);
3426
+ const LogOut = createLucideIcon("log-out", __iconNode$o);
3427
3427
 
3428
3428
  /**
3429
3429
  * @license lucide-react v0.539.0 - ISC
@@ -3433,12 +3433,12 @@ const LogOut = createLucideIcon("log-out", __iconNode$n);
3433
3433
  */
3434
3434
 
3435
3435
 
3436
- const __iconNode$m = [
3436
+ const __iconNode$n = [
3437
3437
  ["path", { d: "M4 12h16", key: "1lakjw" }],
3438
3438
  ["path", { d: "M4 18h16", key: "19g7jn" }],
3439
3439
  ["path", { d: "M4 6h16", key: "1o0s65" }]
3440
3440
  ];
3441
- const Menu = createLucideIcon("menu", __iconNode$m);
3441
+ const Menu = createLucideIcon("menu", __iconNode$n);
3442
3442
 
3443
3443
  /**
3444
3444
  * @license lucide-react v0.539.0 - ISC
@@ -3448,7 +3448,7 @@ const Menu = createLucideIcon("menu", __iconNode$m);
3448
3448
  */
3449
3449
 
3450
3450
 
3451
- const __iconNode$l = [
3451
+ const __iconNode$m = [
3452
3452
  [
3453
3453
  "path",
3454
3454
  {
@@ -3457,7 +3457,7 @@ const __iconNode$l = [
3457
3457
  }
3458
3458
  ]
3459
3459
  ];
3460
- const Moon = createLucideIcon("moon", __iconNode$l);
3460
+ const Moon = createLucideIcon("moon", __iconNode$m);
3461
3461
 
3462
3462
  /**
3463
3463
  * @license lucide-react v0.539.0 - ISC
@@ -3467,7 +3467,7 @@ const Moon = createLucideIcon("moon", __iconNode$l);
3467
3467
  */
3468
3468
 
3469
3469
 
3470
- const __iconNode$k = [
3470
+ const __iconNode$l = [
3471
3471
  [
3472
3472
  "path",
3473
3473
  {
@@ -3480,7 +3480,7 @@ const __iconNode$k = [
3480
3480
  ["circle", { cx: "6.5", cy: "12.5", r: ".5", fill: "currentColor", key: "qy21gx" }],
3481
3481
  ["circle", { cx: "8.5", cy: "7.5", r: ".5", fill: "currentColor", key: "fotxhn" }]
3482
3482
  ];
3483
- const Palette = createLucideIcon("palette", __iconNode$k);
3483
+ const Palette = createLucideIcon("palette", __iconNode$l);
3484
3484
 
3485
3485
  /**
3486
3486
  * @license lucide-react v0.539.0 - ISC
@@ -3490,12 +3490,12 @@ const Palette = createLucideIcon("palette", __iconNode$k);
3490
3490
  */
3491
3491
 
3492
3492
 
3493
- const __iconNode$j = [
3493
+ const __iconNode$k = [
3494
3494
  ["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }],
3495
3495
  ["path", { d: "M9 3v18", key: "fh3hqa" }],
3496
3496
  ["path", { d: "m16 15-3-3 3-3", key: "14y99z" }]
3497
3497
  ];
3498
- const PanelLeftClose = createLucideIcon("panel-left-close", __iconNode$j);
3498
+ const PanelLeftClose = createLucideIcon("panel-left-close", __iconNode$k);
3499
3499
 
3500
3500
  /**
3501
3501
  * @license lucide-react v0.539.0 - ISC
@@ -3505,7 +3505,7 @@ const PanelLeftClose = createLucideIcon("panel-left-close", __iconNode$j);
3505
3505
  */
3506
3506
 
3507
3507
 
3508
- const __iconNode$i = [
3508
+ const __iconNode$j = [
3509
3509
  [
3510
3510
  "path",
3511
3511
  {
@@ -3515,7 +3515,26 @@ const __iconNode$i = [
3515
3515
  ],
3516
3516
  ["path", { d: "m15 5 4 4", key: "1mk7zo" }]
3517
3517
  ];
3518
- const Pencil = createLucideIcon("pencil", __iconNode$i);
3518
+ const Pencil = createLucideIcon("pencil", __iconNode$j);
3519
+
3520
+ /**
3521
+ * @license lucide-react v0.539.0 - ISC
3522
+ *
3523
+ * This source code is licensed under the ISC license.
3524
+ * See the LICENSE file in the root directory of this source tree.
3525
+ */
3526
+
3527
+
3528
+ const __iconNode$i = [
3529
+ [
3530
+ "path",
3531
+ {
3532
+ d: "M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z",
3533
+ key: "10ikf1"
3534
+ }
3535
+ ]
3536
+ ];
3537
+ const Play = createLucideIcon("play", __iconNode$i);
3519
3538
 
3520
3539
  /**
3521
3540
  * @license lucide-react v0.539.0 - ISC
@@ -4356,6 +4375,40 @@ const notify = {
4356
4375
  promise: sonner.toast.promise.bind(sonner.toast),
4357
4376
  };
4358
4377
 
4378
+ const OVERLAY_CONTENT_SELECTOR = [
4379
+ '[data-slot="dialog-content"]',
4380
+ '[role="dialog"]',
4381
+ '[role="alertdialog"]',
4382
+ '[role="menu"]',
4383
+ '[role="listbox"]',
4384
+ '[data-radix-popper-content-wrapper]',
4385
+ ].join(',');
4386
+ /**
4387
+ * `@radix-ui/react-dismissable-layer` keeps the value it must restore to
4388
+ * `<body>` in a single module-level variable shared by every layer. When two
4389
+ * layers overlap — a modal menu whose item opens a dialog, a select inside a
4390
+ * dialog — the second layer saves `pointer-events: none` and its close writes
4391
+ * that back instead of clearing it, leaving the page unclickable until reload.
4392
+ *
4393
+ * Clearing is only safe once nothing is on screen, so this is a no-op while any
4394
+ * overlay content is still mounted.
4395
+ */
4396
+ function releaseStaleOverlayBodyLock() {
4397
+ if (typeof document === 'undefined')
4398
+ return;
4399
+ if (document.querySelector(OVERLAY_CONTENT_SELECTOR))
4400
+ return;
4401
+ const { body } = document;
4402
+ if (body.style.pointerEvents === 'none') {
4403
+ body.style.pointerEvents = '';
4404
+ }
4405
+ if (body.hasAttribute('data-scroll-locked')) {
4406
+ body.removeAttribute('data-scroll-locked');
4407
+ body.style.overflow = '';
4408
+ body.style.paddingRight = '';
4409
+ }
4410
+ }
4411
+
4359
4412
  const TooltipProvider = ({ children, delayDuration = 200, }) => (jsxRuntime.jsx(TooltipPrimitive__namespace.Provider, { delayDuration: delayDuration, children: children }));
4360
4413
  const Tooltip = TooltipPrimitive__namespace.Root;
4361
4414
  const TooltipTrigger = TooltipPrimitive__namespace.Trigger;
@@ -4770,7 +4823,7 @@ const CopyButton = ({ value, className }) => {
4770
4823
  };
4771
4824
 
4772
4825
  function Input({ className, type, ...props }) {
4773
- return (jsxRuntime.jsx("input", { type: type, "data-slot": "input", className: cn('file:text-foreground placeholder:text-placeholder placeholder:text-sm selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input-border flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-[0_1px_2px_0_rgba(0,0,0,0.05)] transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:cursor-not-allowed disabled:opacity-50 md:text-sm', 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]', 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive', className), ...props }));
4826
+ return (jsxRuntime.jsx("input", { type: type, "data-slot": "input", className: cn('file:text-foreground placeholder:text-placeholder placeholder:text-sm selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input-border flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-[0_1px_2px_0_rgba(0,0,0,0.05)] transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:cursor-not-allowed disabled:bg-muted/50 disabled:text-label md:text-sm', 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]', 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive', className), ...props }));
4774
4827
  }
4775
4828
 
4776
4829
  localStorage.getItem('ims_token');
@@ -5721,10 +5774,50 @@ var U=1,Y$1=.9,H$1=.8,J=.17,p=.1,u=.999,$$1=.9999;var k$2=.99,m$1=/[\\\/_+.#"@\[
5721
5774
 
5722
5775
  var N$1='[cmdk-group=""]',Y='[cmdk-group-items=""]',be='[cmdk-group-heading=""]',le='[cmdk-item=""]',ce=`${le}:not([aria-disabled="true"])`,Z="cmdk-item-select",T="data-value",Re=(r,o,n)=>W(r,o,n),ue=React__namespace.createContext(void 0),K=()=>React__namespace.useContext(ue),de=React__namespace.createContext(void 0),ee=()=>React__namespace.useContext(de),fe=React__namespace.createContext(void 0),me=React__namespace.forwardRef((r,o)=>{let n=L$1(()=>{var e,a;return {search:"",value:(a=(e=r.value)!=null?e:r.defaultValue)!=null?a:"",selectedItemId:void 0,filtered:{count:0,items:new Map,groups:new Set}}}),u=L$1(()=>new Set),c=L$1(()=>new Map),d=L$1(()=>new Map),f=L$1(()=>new Set),p=pe(r),{label:b,children:m,value:R,onValueChange:x,filter:C,shouldFilter:S,loop:A,disablePointerSelection:ge=false,vimBindings:j=true,...O}=r,$=reactId.useId(),q=reactId.useId(),_=reactId.useId(),I=React__namespace.useRef(null),v=ke();k$1(()=>{if(R!==void 0){let e=R.trim();n.current.value=e,E.emit();}},[R]),k$1(()=>{v(6,ne);},[]);let E=React__namespace.useMemo(()=>({subscribe:e=>(f.current.add(e),()=>f.current.delete(e)),snapshot:()=>n.current,setState:(e,a,s)=>{var i,l,g,y;if(!Object.is(n.current[e],a)){if(n.current[e]=a,e==="search")J(),z(),v(1,W);else if(e==="value"){if(document.activeElement.hasAttribute("cmdk-input")||document.activeElement.hasAttribute("cmdk-root")){let h=document.getElementById(_);h?h.focus():(i=document.getElementById($))==null||i.focus();}if(v(7,()=>{var h;n.current.selectedItemId=(h=M())==null?void 0:h.id,E.emit();}),s||v(5,ne),((l=p.current)==null?void 0:l.value)!==void 0){let h=a!=null?a:"";(y=(g=p.current).onValueChange)==null||y.call(g,h);return}}E.emit();}},emit:()=>{f.current.forEach(e=>e());}}),[]),U=React__namespace.useMemo(()=>({value:(e,a,s)=>{var i;a!==((i=d.current.get(e))==null?void 0:i.value)&&(d.current.set(e,{value:a,keywords:s}),n.current.filtered.items.set(e,te(a,s)),v(2,()=>{z(),E.emit();}));},item:(e,a)=>(u.current.add(e),a&&(c.current.has(a)?c.current.get(a).add(e):c.current.set(a,new Set([e]))),v(3,()=>{J(),z(),n.current.value||W(),E.emit();}),()=>{d.current.delete(e),u.current.delete(e),n.current.filtered.items.delete(e);let s=M();v(4,()=>{J(),(s==null?void 0:s.getAttribute("id"))===e&&W(),E.emit();});}),group:e=>(c.current.has(e)||c.current.set(e,new Set),()=>{d.current.delete(e),c.current.delete(e);}),filter:()=>p.current.shouldFilter,label:b||r["aria-label"],getDisablePointerSelection:()=>p.current.disablePointerSelection,listId:$,inputId:_,labelId:q,listInnerRef:I}),[]);function te(e,a){var i,l;let s=(l=(i=p.current)==null?void 0:i.filter)!=null?l:Re;return e?s(e,n.current.search,a):0}function z(){if(!n.current.search||p.current.shouldFilter===false)return;let e=n.current.filtered.items,a=[];n.current.filtered.groups.forEach(i=>{let l=c.current.get(i),g=0;l.forEach(y=>{let h=e.get(y);g=Math.max(h,g);}),a.push([i,g]);});let s=I.current;V().sort((i,l)=>{var h,F;let g=i.getAttribute("id"),y=l.getAttribute("id");return ((h=e.get(y))!=null?h:0)-((F=e.get(g))!=null?F:0)}).forEach(i=>{let l=i.closest(Y);l?l.appendChild(i.parentElement===l?i:i.closest(`${Y} > *`)):s.appendChild(i.parentElement===s?i:i.closest(`${Y} > *`));}),a.sort((i,l)=>l[1]-i[1]).forEach(i=>{var g;let l=(g=I.current)==null?void 0:g.querySelector(`${N$1}[${T}="${encodeURIComponent(i[0])}"]`);l==null||l.parentElement.appendChild(l);});}function W(){let e=V().find(s=>s.getAttribute("aria-disabled")!=="true"),a=e==null?void 0:e.getAttribute(T);E.setState("value",a||void 0);}function J(){var a,s,i,l;if(!n.current.search||p.current.shouldFilter===false){n.current.filtered.count=u.current.size;return}n.current.filtered.groups=new Set;let e=0;for(let g of u.current){let y=(s=(a=d.current.get(g))==null?void 0:a.value)!=null?s:"",h=(l=(i=d.current.get(g))==null?void 0:i.keywords)!=null?l:[],F=te(y,h);n.current.filtered.items.set(g,F),F>0&&e++;}for(let[g,y]of c.current)for(let h of y)if(n.current.filtered.items.get(h)>0){n.current.filtered.groups.add(g);break}n.current.filtered.count=e;}function ne(){var a,s,i;let e=M();e&&(((a=e.parentElement)==null?void 0:a.firstChild)===e&&((i=(s=e.closest(N$1))==null?void 0:s.querySelector(be))==null||i.scrollIntoView({block:"nearest"})),e.scrollIntoView({block:"nearest"}));}function M(){var e;return (e=I.current)==null?void 0:e.querySelector(`${le}[aria-selected="true"]`)}function V(){var e;return Array.from(((e=I.current)==null?void 0:e.querySelectorAll(ce))||[])}function X(e){let s=V()[e];s&&E.setState("value",s.getAttribute(T));}function Q(e){var g;let a=M(),s=V(),i=s.findIndex(y=>y===a),l=s[i+e];(g=p.current)!=null&&g.loop&&(l=i+e<0?s[s.length-1]:i+e===s.length?s[0]:s[i+e]),l&&E.setState("value",l.getAttribute(T));}function re(e){let a=M(),s=a==null?void 0:a.closest(N$1),i;for(;s&&!i;)s=e>0?we(s,N$1):De(s,N$1),i=s==null?void 0:s.querySelector(ce);i?E.setState("value",i.getAttribute(T)):Q(e);}let oe=()=>X(V().length-1),ie=e=>{e.preventDefault(),e.metaKey?oe():e.altKey?re(1):Q(1);},se=e=>{e.preventDefault(),e.metaKey?X(0):e.altKey?re(-1):Q(-1);};return React__namespace.createElement(reactPrimitive.Primitive.div,{ref:o,tabIndex:-1,...O,"cmdk-root":"",onKeyDown:e=>{var s;(s=O.onKeyDown)==null||s.call(O,e);let a=e.nativeEvent.isComposing||e.keyCode===229;if(!(e.defaultPrevented||a))switch(e.key){case "n":case "j":{j&&e.ctrlKey&&ie(e);break}case "ArrowDown":{ie(e);break}case "p":case "k":{j&&e.ctrlKey&&se(e);break}case "ArrowUp":{se(e);break}case "Home":{e.preventDefault(),X(0);break}case "End":{e.preventDefault(),oe();break}case "Enter":{e.preventDefault();let i=M();if(i){let l=new Event(Z);i.dispatchEvent(l);}}}}},React__namespace.createElement("label",{"cmdk-label":"",htmlFor:U.inputId,id:U.labelId,style:Te},b),B$1(r,e=>React__namespace.createElement(de.Provider,{value:E},React__namespace.createElement(ue.Provider,{value:U},e))))}),he=React__namespace.forwardRef((r,o)=>{var _,I;let n=reactId.useId(),u=React__namespace.useRef(null),c=React__namespace.useContext(fe),d=K(),f=pe(r),p=(I=(_=f.current)==null?void 0:_.forceMount)!=null?I:c==null?void 0:c.forceMount;k$1(()=>{if(!p)return d.item(n,c==null?void 0:c.id)},[p]);let b=ve(n,u,[r.value,r.children,u],r.keywords),m=ee(),R=P(v=>v.value&&v.value===b.current),x=P(v=>p||d.filter()===false?true:v.search?v.filtered.items.get(n)>0:true);React__namespace.useEffect(()=>{let v=u.current;if(!(!v||r.disabled))return v.addEventListener(Z,C),()=>v.removeEventListener(Z,C)},[x,r.onSelect,r.disabled]);function C(){var v,E;S(),(E=(v=f.current).onSelect)==null||E.call(v,b.current);}function S(){m.setState("value",b.current,true);}if(!x)return null;let{disabled:A,value:ge,onSelect:j,forceMount:O,keywords:$,...q}=r;return React__namespace.createElement(reactPrimitive.Primitive.div,{ref:reactComposeRefs.composeRefs(u,o),...q,id:n,"cmdk-item":"",role:"option","aria-disabled":!!A,"aria-selected":!!R,"data-disabled":!!A,"data-selected":!!R,onPointerMove:A||d.getDisablePointerSelection()?void 0:S,onClick:A?void 0:C},r.children)}),Ee=React__namespace.forwardRef((r,o)=>{let{heading:n,children:u,forceMount:c,...d}=r,f=reactId.useId(),p=React__namespace.useRef(null),b=React__namespace.useRef(null),m=reactId.useId(),R=K(),x=P(S=>c||R.filter()===false?true:S.search?S.filtered.groups.has(f):true);k$1(()=>R.group(f),[]),ve(f,p,[r.value,r.heading,b]);let C=React__namespace.useMemo(()=>({id:f,forceMount:c}),[c]);return React__namespace.createElement(reactPrimitive.Primitive.div,{ref:reactComposeRefs.composeRefs(p,o),...d,"cmdk-group":"",role:"presentation",hidden:x?void 0:true},n&&React__namespace.createElement("div",{ref:b,"cmdk-group-heading":"","aria-hidden":true,id:m},n),B$1(r,S=>React__namespace.createElement("div",{"cmdk-group-items":"",role:"group","aria-labelledby":n?m:void 0},React__namespace.createElement(fe.Provider,{value:C},S))))}),ye=React__namespace.forwardRef((r,o)=>{let{alwaysRender:n,...u}=r,c=React__namespace.useRef(null),d=P(f=>!f.search);return !n&&!d?null:React__namespace.createElement(reactPrimitive.Primitive.div,{ref:reactComposeRefs.composeRefs(c,o),...u,"cmdk-separator":"",role:"separator"})}),Se=React__namespace.forwardRef((r,o)=>{let{onValueChange:n,...u}=r,c=r.value!=null,d=ee(),f=P(m=>m.search),p=P(m=>m.selectedItemId),b=K();return React__namespace.useEffect(()=>{r.value!=null&&d.setState("search",r.value);},[r.value]),React__namespace.createElement(reactPrimitive.Primitive.input,{ref:o,...u,"cmdk-input":"",autoComplete:"off",autoCorrect:"off",spellCheck:false,"aria-autocomplete":"list",role:"combobox","aria-expanded":true,"aria-controls":b.listId,"aria-labelledby":b.labelId,"aria-activedescendant":p,id:b.inputId,type:"text",value:c?r.value:f,onChange:m=>{c||d.setState("search",m.target.value),n==null||n(m.target.value);}})}),Ce=React__namespace.forwardRef((r,o)=>{let{children:n,label:u="Suggestions",...c}=r,d=React__namespace.useRef(null),f=React__namespace.useRef(null),p=P(m=>m.selectedItemId),b=K();return React__namespace.useEffect(()=>{if(f.current&&d.current){let m=f.current,R=d.current,x,C=new ResizeObserver(()=>{x=requestAnimationFrame(()=>{let S=m.offsetHeight;R.style.setProperty("--cmdk-list-height",S.toFixed(1)+"px");});});return C.observe(m),()=>{cancelAnimationFrame(x),C.unobserve(m);}}},[]),React__namespace.createElement(reactPrimitive.Primitive.div,{ref:reactComposeRefs.composeRefs(d,o),...c,"cmdk-list":"",role:"listbox",tabIndex:-1,"aria-activedescendant":p,"aria-label":u,id:b.listId},B$1(r,m=>React__namespace.createElement("div",{ref:reactComposeRefs.composeRefs(f,b.listInnerRef),"cmdk-list-sizer":""},m)))}),xe=React__namespace.forwardRef((r,o)=>{let{open:n,onOpenChange:u,overlayClassName:c,contentClassName:d,container:f,...p}=r;return React__namespace.createElement(DialogPrimitive__namespace.Root,{open:n,onOpenChange:u},React__namespace.createElement(DialogPrimitive__namespace.Portal,{container:f},React__namespace.createElement(DialogPrimitive__namespace.Overlay,{"cmdk-overlay":"",className:c}),React__namespace.createElement(DialogPrimitive__namespace.Content,{"aria-label":r.label,"cmdk-dialog":"",className:d},React__namespace.createElement(me,{ref:o,...p}))))}),Ie=React__namespace.forwardRef((r,o)=>P(u=>u.filtered.count===0)?React__namespace.createElement(reactPrimitive.Primitive.div,{ref:o,...r,"cmdk-empty":"",role:"presentation"}):null),Pe=React__namespace.forwardRef((r,o)=>{let{progress:n,children:u,label:c="Loading...",...d}=r;return React__namespace.createElement(reactPrimitive.Primitive.div,{ref:o,...d,"cmdk-loading":"",role:"progressbar","aria-valuenow":n,"aria-valuemin":0,"aria-valuemax":100,"aria-label":c},B$1(r,f=>React__namespace.createElement("div",{"aria-hidden":true},f)))}),_e=Object.assign(me,{List:Ce,Item:he,Input:Se,Group:Ee,Separator:ye,Dialog:xe,Empty:Ie,Loading:Pe});function we(r,o){let n=r.nextElementSibling;for(;n;){if(n.matches(o))return n;n=n.nextElementSibling;}}function De(r,o){let n=r.previousElementSibling;for(;n;){if(n.matches(o))return n;n=n.previousElementSibling;}}function pe(r){let o=React__namespace.useRef(r);return k$1(()=>{o.current=r;}),o}var k$1=typeof window=="undefined"?React__namespace.useEffect:React__namespace.useLayoutEffect;function L$1(r){let o=React__namespace.useRef();return o.current===void 0&&(o.current=r()),o}function P(r){let o=ee(),n=()=>r(o.snapshot());return React__namespace.useSyncExternalStore(o.subscribe,n,n)}function ve(r,o,n,u=[]){let c=React__namespace.useRef(),d=K();return k$1(()=>{var b;let f=(()=>{var m;for(let R of n){if(typeof R=="string")return R.trim();if(typeof R=="object"&&"current"in R)return R.current?(m=R.current.textContent)==null?void 0:m.trim():c.current}})(),p=u.map(m=>m.trim());d.value(r,f,p),(b=o.current)==null||b.setAttribute(T,f),c.current=f;}),c}var ke=()=>{let[r,o]=React__namespace.useState(),n=L$1(()=>new Map);return k$1(()=>{n.current.forEach(u=>u()),n.current=new Map;},[r]),(u,c)=>{n.current.set(u,c),o({});}};function Me(r){let o=r.type;return typeof o=="function"?o(r.props):"render"in o?o.render(r.props):r}function B$1({asChild:r,children:o},n){return r&&React__namespace.isValidElement(o)?React__namespace.cloneElement(Me(o),{ref:o.ref},n(o.props.children)):n(o)}var Te={position:"absolute",width:"1px",height:"1px",padding:"0",margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0"};
5723
5776
 
5777
+ /** Long enough for the overlay exit animation (200ms) plus a margin. */
5778
+ const EXIT_GRACE_MS = 400;
5779
+ /**
5780
+ * Clears a leaked Radix `<body>` lock after an overlay closes or unmounts.
5781
+ * Returns a scheduler for overlays that are uncontrolled (no `open` prop), so
5782
+ * their `onOpenChange(false)` can trigger the same check.
5783
+ *
5784
+ * @see releaseStaleOverlayBodyLock for why the lock leaks.
5785
+ */
5786
+ function useOverlayBodyLockRelease(open) {
5787
+ const scheduleRelease = React__namespace.useCallback(() => {
5788
+ requestAnimationFrame(() => releaseStaleOverlayBodyLock());
5789
+ window.setTimeout(() => releaseStaleOverlayBodyLock(), EXIT_GRACE_MS);
5790
+ }, []);
5791
+ const wasOpen = React__namespace.useRef(false);
5792
+ React__namespace.useEffect(() => {
5793
+ if (open) {
5794
+ wasOpen.current = true;
5795
+ return;
5796
+ }
5797
+ if (!wasOpen.current)
5798
+ return;
5799
+ wasOpen.current = false;
5800
+ scheduleRelease();
5801
+ }, [open, scheduleRelease]);
5802
+ // Unmounting while open (route change, parent re-render) skips Radix's own
5803
+ // close path entirely, so the check has to outlive this component.
5804
+ React__namespace.useEffect(() => {
5805
+ return () => {
5806
+ window.setTimeout(() => releaseStaleOverlayBodyLock(), EXIT_GRACE_MS);
5807
+ };
5808
+ }, []);
5809
+ return scheduleRelease;
5810
+ }
5811
+
5724
5812
  // Utility to merge classes
5725
5813
  // Root
5726
- function Dialog({ ...props }) {
5727
- return jsxRuntime.jsx(DialogPrimitive__namespace.Root, { "data-slot": "dialog", ...props });
5814
+ function Dialog({ open, onOpenChange, ...props }) {
5815
+ const scheduleLockRelease = useOverlayBodyLockRelease(open);
5816
+ return (jsxRuntime.jsx(DialogPrimitive__namespace.Root, { "data-slot": "dialog", ...props, open: open, onOpenChange: (next) => {
5817
+ onOpenChange?.(next);
5818
+ if (!next)
5819
+ scheduleLockRelease();
5820
+ } }));
5728
5821
  }
5729
5822
  // Portal
5730
5823
  function DialogPortal({ ...props }) {
@@ -6040,7 +6133,10 @@ function SearchableSelect({ selectedItem, onChange, getOptionKey, getOptionLabel
6040
6133
  ? String(getOptionLabel(selectedItem))
6041
6134
  : undefined, children: getOptionLabel(selectedItem) }));
6042
6135
  }, [renderTrigger, selectedItem, searchPlaceholder, getOptionLabel]);
6043
- return (jsxRuntime.jsxs(Popover, { open: open, onOpenChange: handleOpenChange, modal: modal, children: [jsxRuntime.jsx(PopoverTrigger, { asChild: true, children: jsxRuntime.jsxs(Button$1, { type: "button", variant: "outline", role: "combobox", "aria-expanded": open, "aria-label": ariaLabel, disabled: disabled, className: cn('w-full justify-start min-w-40 px-3 py-1.5', className), children: [jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2 text-left", children: [!selectedItem && !hideTriggerSearchIcon && (jsxRuntime.jsx(Search, { "aria-hidden": "true", className: "h-4 w-4 shrink-0 text-muted-foreground" })), triggerNode] }), jsxRuntime.jsx(ChevronDown, { "aria-hidden": "true", className: "h-4 w-4 shrink-0 text-muted-foreground opacity-60" })] }) }), jsxRuntime.jsx(PopoverContent, { style: { width: 'var(--radix-popover-trigger-width)' }, className: cn('p-0', popoverClassName), align: align, children: jsxRuntime.jsxs(Command, { shouldFilter: false, children: [jsxRuntime.jsx(CommandInput, { placeholder: searchPlaceholder, value: search, onValueChange: setSearch }), headerSlot, jsxRuntime.jsx(CommandList, { ref: listRef, onScroll: handleScroll, className: LIST_MAX_HEIGHT_CLASS, children: loading ? (jsxRuntime.jsxs("div", { className: "flex items-center justify-center gap-2 p-3 text-sm text-muted-foreground", children: [jsxRuntime.jsx(LoaderCircle, { className: "h-4 w-4 animate-spin" }), "Loading\u2026"] })) : visibleItems.length === 0 ? (jsxRuntime.jsx(CommandEmpty, { children: emptyMessage })) : (jsxRuntime.jsxs(CommandGroup, { className: "p-1", children: [visibleItems.map((item) => {
6136
+ return (jsxRuntime.jsxs(Popover, { open: open, onOpenChange: handleOpenChange, modal: modal, children: [jsxRuntime.jsx(PopoverTrigger, { asChild: true, children: jsxRuntime.jsxs(Button$1, { type: "button", variant: "outline", role: "combobox", "aria-expanded": open, "aria-label": ariaLabel, disabled: disabled, className: cn('w-full justify-start min-w-40 px-3 py-1.5',
6137
+ // This trigger is a form control, not an action, so it takes the
6138
+ // input disabled treatment instead of the Button's opacity fade.
6139
+ 'disabled:bg-muted/50 disabled:text-label disabled:opacity-100', className), children: [jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2 text-left", children: [!selectedItem && !hideTriggerSearchIcon && (jsxRuntime.jsx(Search, { "aria-hidden": "true", className: "h-4 w-4 shrink-0 text-muted-foreground" })), triggerNode] }), jsxRuntime.jsx(ChevronDown, { "aria-hidden": "true", className: "h-4 w-4 shrink-0 text-muted-foreground opacity-60" })] }) }), jsxRuntime.jsx(PopoverContent, { style: { width: 'var(--radix-popover-trigger-width)' }, className: cn('p-0', popoverClassName), align: align, children: jsxRuntime.jsxs(Command, { shouldFilter: false, children: [jsxRuntime.jsx(CommandInput, { placeholder: searchPlaceholder, value: search, onValueChange: setSearch }), headerSlot, jsxRuntime.jsx(CommandList, { ref: listRef, onScroll: handleScroll, className: LIST_MAX_HEIGHT_CLASS, children: loading ? (jsxRuntime.jsxs("div", { className: "flex items-center justify-center gap-2 p-3 text-sm text-muted-foreground", children: [jsxRuntime.jsx(LoaderCircle, { className: "h-4 w-4 animate-spin" }), "Loading\u2026"] })) : visibleItems.length === 0 ? (jsxRuntime.jsx(CommandEmpty, { children: emptyMessage })) : (jsxRuntime.jsxs(CommandGroup, { className: "p-1", children: [visibleItems.map((item) => {
6044
6140
  const key = getOptionKey(item);
6045
6141
  const isSelected = selectedKey === key;
6046
6142
  if (renderOption) {
@@ -27776,7 +27872,7 @@ function DateInput({ value, onChange, onBlur, name, className, min, max, disable
27776
27872
  return (jsxRuntime.jsxs(Popover, { open: open, onOpenChange: handleOpenChange, modal: true, children: [jsxRuntime.jsx(PopoverAnchor, { asChild: true, children: jsxRuntime.jsxs("button", { type: "button", name: name, onBlur: onBlur, disabled: disabled, "aria-haspopup": "dialog", "aria-expanded": open, onClick: () => {
27777
27873
  if (!disabled)
27778
27874
  handleOpenChange(!open);
27779
- }, "data-slot": "input", "data-empty": !value || undefined, className: cn('border-input-border flex h-9 w-full min-w-0 cursor-pointer items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-1 text-left shadow-[0_1px_2px_0_#0000000d] transition-[color,box-shadow] outline-none', 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]', 'aria-invalid:ring-destructive/20 aria-invalid:border-destructive', disabled && 'cursor-not-allowed bg-muted text-label', className), children: [jsxRuntime.jsx("span", { className: cn('truncate text-sm md:text-sm', value ? 'text-foreground' : 'text-placeholder'), children: value ? moment(value).format('DD/MM/YYYY') : placeholder }), jsxRuntime.jsx("span", { className: "inline-flex h-4 w-4 shrink-0 items-center justify-center text-muted-foreground", children: jsxRuntime.jsx(CalendarDays, { className: "h-4 w-4 stroke-[1.75]" }) })] }) }), jsxRuntime.jsx(PopoverContent, { align: "start", className: "date-range-picker-popover w-auto p-4", children: jsxRuntime.jsx(DatePicker, { inline: true, selected: value ?? null, minDate: minDate ? moment(minDate, 'YYYY-MM-DD').toDate() : undefined, maxDate: maxDate ? moment(maxDate, 'YYYY-MM-DD').toDate() : undefined, onChange: (date) => {
27875
+ }, "data-slot": "input", "data-empty": !value || undefined, className: cn('border-input-border flex h-9 w-full min-w-0 cursor-pointer items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-1 text-left shadow-[0_1px_2px_0_#0000000d] transition-[color,box-shadow] outline-none', 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]', 'aria-invalid:ring-destructive/20 aria-invalid:border-destructive', disabled && 'cursor-not-allowed bg-muted/50 text-label', className), children: [jsxRuntime.jsx("span", { className: cn('truncate text-sm md:text-sm', value ? 'text-foreground' : 'text-placeholder'), children: value ? moment(value).format('DD/MM/YYYY') : placeholder }), jsxRuntime.jsx("span", { className: "inline-flex h-4 w-4 shrink-0 items-center justify-center text-muted-foreground", children: jsxRuntime.jsx(CalendarDays, { className: "h-4 w-4 stroke-[1.75]" }) })] }) }), jsxRuntime.jsx(PopoverContent, { align: "start", className: "date-range-picker-popover w-auto p-4", children: jsxRuntime.jsx(DatePicker, { inline: true, selected: value ?? null, minDate: minDate ? moment(minDate, 'YYYY-MM-DD').toDate() : undefined, maxDate: maxDate ? moment(maxDate, 'YYYY-MM-DD').toDate() : undefined, onChange: (date) => {
27780
27876
  onChange(date ?? undefined);
27781
27877
  if (date)
27782
27878
  setOpen(false);
@@ -27840,7 +27936,7 @@ const EntityHeader = ({ title, meta, status, description, descriptionLimit = 180
27840
27936
  };
27841
27937
 
27842
27938
  const Field = ({ label, required, error, icon, input, className, isSwitch = false, labelRight, }) => {
27843
- return (jsxRuntime.jsxs("div", { className: cn('space-y-1', className), children: [jsxRuntime.jsxs("label", { className: "flex items-center justify-between gap-2 text-[13px] text-label", children: [jsxRuntime.jsxs("div", { children: [label, required && jsxRuntime.jsx("span", { className: "text-destructive", children: "*" })] }), isSwitch && labelRight] }), jsxRuntime.jsxs("div", { "data-error": error ? 'true' : undefined, className: "relative", children: [icon, input] }), error && jsxRuntime.jsx("p", { className: "text-sm text-destructive", children: error })] }));
27939
+ return (jsxRuntime.jsxs("div", { className: cn('space-y-1', className), children: [jsxRuntime.jsxs("label", { className: cn('flex items-center justify-between gap-2 text-[13px]', error ? 'text-destructive' : 'text-label'), children: [jsxRuntime.jsxs("div", { children: [label, required && jsxRuntime.jsx("span", { className: "text-destructive", children: "*" })] }), isSwitch && labelRight] }), jsxRuntime.jsxs("div", { "data-error": error ? 'true' : undefined, className: "relative", children: [icon, input] }), error && jsxRuntime.jsx("p", { className: "text-sm text-destructive", children: error })] }));
27844
27940
  };
27845
27941
 
27846
27942
  const SelectSearchContext = React__namespace.createContext(null);
@@ -27876,7 +27972,7 @@ function SelectValue({ className, ...props }) {
27876
27972
  return (jsxRuntime.jsx(SelectPrimitive__namespace.Value, { "data-slot": "select-value", className: cn('data-[placeholder]:!text-[var(--placeholder)] data-[placeholder]:!text-sm', className), ...props }));
27877
27973
  }
27878
27974
  function SelectTrigger({ className, size = 'default', children, ...props }) {
27879
- return (jsxRuntime.jsxs(SelectPrimitive__namespace.Trigger, { "data-slot": "select-trigger", "data-size": size, className: cn("border-input-border cursor-pointer data-[placeholder]:!text-[var(--placeholder)] data-[placeholder]:!text-sm [&_[data-placeholder]]:!text-[var(--placeholder)] [&_[data-placeholder]]:!text-sm [&_span[data-placeholder]]:!text-[var(--placeholder)] [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-full items-center justify-between gap-2 rounded-md border bg-input-background px-3 py-2 text-sm whitespace-nowrap shadow-[0_1px_2px_0_rgba(0,0,0,0.05)] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className), ...props, children: [children, jsxRuntime.jsx(SelectPrimitive__namespace.Icon, { asChild: true, children: jsxRuntime.jsx(ChevronDown, { className: "size-4 text-gray-600" }) })] }));
27975
+ return (jsxRuntime.jsxs(SelectPrimitive__namespace.Trigger, { "data-slot": "select-trigger", "data-size": size, className: cn("border-input-border cursor-pointer data-[placeholder]:!text-[var(--placeholder)] data-[placeholder]:!text-sm [&_[data-placeholder]]:!text-[var(--placeholder)] [&_[data-placeholder]]:!text-sm [&_span[data-placeholder]]:!text-[var(--placeholder)] [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-full items-center justify-between gap-2 rounded-md border bg-input-background px-3 py-2 text-sm whitespace-nowrap shadow-[0_1px_2px_0_rgba(0,0,0,0.05)] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:bg-muted/50 disabled:text-label data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className), ...props, children: [children, jsxRuntime.jsx(SelectPrimitive__namespace.Icon, { asChild: true, children: jsxRuntime.jsx(ChevronDown, { className: "size-4 text-gray-600" }) })] }));
27880
27976
  }
27881
27977
  function SelectContent({ className, children, position = 'popper', searchable = true, // default: all selects are searchable
27882
27978
  searchPlaceholder = 'Search...', ...props }) {
@@ -28439,10 +28535,15 @@ const ICON_TONE_CLASSES = {
28439
28535
  indigo: 'bg-indigo-100 text-indigo-600',
28440
28536
  amber: 'bg-amber-100 text-amber-600',
28441
28537
  };
28442
- const MetricCard = ({ value, label, tone = 'neutral', icon, iconTone = 'blue', className, }) => {
28538
+ const MetricCard = ({ value, label, tone = 'neutral', icon, iconTone = 'blue', orientation = 'vertical', className, }) => {
28443
28539
  // ── Icon variant — matches the new financial-summary card design ──
28444
28540
  if (icon) {
28445
- return (jsxRuntime.jsxs("div", { style: { boxShadow: '0 1px 2px 0 rgba(0, 0, 0, 0.05)' }, className: cn('flex min-w-[180px] flex-1 flex-col gap-3 rounded-xl border border-border bg-card p-4', className), children: [jsxRuntime.jsx("span", { className: cn('inline-flex h-[38px] w-[38px] items-center justify-center rounded-lg [&_svg]:h-5 [&_svg]:w-5', ICON_TONE_CLASSES[iconTone]), children: icon }), jsxRuntime.jsxs("div", { className: "flex flex-col gap-1", children: [jsxRuntime.jsx("span", { className: "text-xl font-semibold leading-none text-foreground", children: value }), jsxRuntime.jsx("span", { className: "text-sm font-light text-label", children: label })] })] }));
28541
+ const isHorizontal = orientation === 'horizontal';
28542
+ return (jsxRuntime.jsxs("div", { style: { boxShadow: '0 1px 2px 0 rgba(0, 0, 0, 0.05)' }, className: cn('flex min-w-[180px] flex-1 rounded-xl border border-border bg-card', isHorizontal
28543
+ ? 'items-center gap-3 px-3.5 py-2.5'
28544
+ : 'flex-col gap-3 p-4', className), children: [jsxRuntime.jsx("span", { className: cn('inline-flex shrink-0 items-center justify-center rounded-lg', isHorizontal
28545
+ ? 'h-9 w-9 [&_svg]:h-[18px] [&_svg]:w-[18px]'
28546
+ : 'h-[38px] w-[38px] [&_svg]:h-5 [&_svg]:w-5', ICON_TONE_CLASSES[iconTone]), children: icon }), jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-col gap-1", children: [jsxRuntime.jsx("span", { className: cn('font-semibold leading-none text-foreground', isHorizontal ? 'text-lg' : 'text-xl'), children: value }), jsxRuntime.jsx("span", { className: cn('font-light leading-none text-label', isHorizontal ? 'text-xs' : 'text-sm'), children: label })] })] }));
28446
28547
  }
28447
28548
  // ── Compact variant (original) ──
28448
28549
  const isHighlighted = tone === 'highlighted';
@@ -57470,7 +57571,14 @@ function DetailPageSkeleton({ sections = 3, }) {
57470
57571
  return (jsxRuntime.jsxs("div", { className: "space-y-5", children: [jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-4", children: [jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [jsxRuntime.jsx(SquareSkeleton, { height: 32, width: 32, rounded: "md" }), jsxRuntime.jsxs("div", { className: "space-y-1.5", children: [jsxRuntime.jsx(SquareSkeleton, { height: 20, width: 192, rounded: "full" }), jsxRuntime.jsx(SquareSkeleton, { height: 12, width: 128, rounded: "full" })] })] }), jsxRuntime.jsx(SquareSkeleton, { height: 36, width: 128, rounded: "md" })] }), Array.from({ length: sections }).map((_, s) => (jsxRuntime.jsxs("div", { className: "overflow-hidden rounded-xl border border-border bg-card", children: [jsxRuntime.jsxs("div", { className: "flex items-center gap-3 border-b border-border bg-secondary px-5 py-4", children: [jsxRuntime.jsx(SquareSkeleton, { height: 32, width: 32, rounded: "lg" }), jsxRuntime.jsx(SquareSkeleton, { height: 16, width: 160, rounded: "full" })] }), jsxRuntime.jsx("div", { className: "grid grid-cols-1 gap-5 p-5 md:grid-cols-3", children: Array.from({ length: 6 }).map((_, i) => (jsxRuntime.jsxs("div", { className: "space-y-1.5", children: [jsxRuntime.jsx(SquareSkeleton, { height: 10, width: 80, rounded: "full" }), jsxRuntime.jsx(SquareSkeleton, { height: 14, width: 128, rounded: "full" })] }, i))) })] }, s)))] }));
57471
57572
  }
57472
57573
 
57473
- const SlideOut = DialogPrimitive__namespace.Root;
57574
+ const SlideOut = ({ open, onOpenChange, ...props }) => {
57575
+ const scheduleLockRelease = useOverlayBodyLockRelease(open);
57576
+ return (jsxRuntime.jsx(DialogPrimitive__namespace.Root, { ...props, open: open, onOpenChange: (next) => {
57577
+ onOpenChange?.(next);
57578
+ if (!next)
57579
+ scheduleLockRelease();
57580
+ } }));
57581
+ };
57474
57582
  const SlideOutTrigger = DialogPrimitive__namespace.Trigger;
57475
57583
  const SlideOutClose = DialogPrimitive__namespace.Close;
57476
57584
  const SlideOutPortal = DialogPrimitive__namespace.Portal;
@@ -64144,6 +64252,76 @@ const DropZone = ({ uploadSubject, supportedFormats, maxSize, maxFiles, accept,
64144
64252
  } }), jsxRuntime.jsx("span", { className: "inline-flex h-10 w-10 items-center justify-center text-foreground", children: jsxRuntime.jsx(Upload, { className: "h-10 w-10", strokeWidth: 1 }) }), jsxRuntime.jsxs("p", { className: "text-sm text-foreground", children: ["Drag & Drop or", ' ', jsxRuntime.jsx("span", { className: "font-medium text-primary", children: "Click to upload" }), ' ', uploadSubject] }), jsxRuntime.jsxs("div", { className: "space-y-1 text-xs text-label", children: [supportedFormats && (jsxRuntime.jsx("p", { className: "font-semibold text-label", children: supportedFormats })), jsxRuntime.jsxs("p", { children: ["Max: ", maxSize, "MB \u00A0\u2022\u00A0 Maximum ", maxFiles, " file", maxFiles === 1 ? '' : 's'] })] })] }));
64145
64253
  };
64146
64254
 
64255
+ const FILE_TYPE_PATTERNS = {
64256
+ PDF: /\.pdf($|\?)/i,
64257
+ IMAGE: /\.(jpg|jpeg|png|gif|bmp|webp|svg|heic|heif)($|\?)/i,
64258
+ DOCUMENT: /\.(doc|docx|xls|xlsx|ppt|pptx)($|\?)/i,
64259
+ VIDEO: /\.(mp4|m4v|avi|mov|wmv|flv|webm|mkv|ogv|mpe?g|3gp)($|\?)/i,
64260
+ AUDIO: /\.(mp3|wav|flac|aac|ogg)($|\?)/i,
64261
+ };
64262
+ const isFileType = {
64263
+ pdf: (url) => FILE_TYPE_PATTERNS.PDF.test(url),
64264
+ image: (url) => FILE_TYPE_PATTERNS.IMAGE.test(url),
64265
+ document: (url) => FILE_TYPE_PATTERNS.DOCUMENT.test(url),
64266
+ video: (url) => FILE_TYPE_PATTERNS.VIDEO.test(url),
64267
+ audio: (url) => FILE_TYPE_PATTERNS.AUDIO.test(url),
64268
+ };
64269
+
64270
+ /** Seek to ~1st frame for static video thumbnails (HTML5 media fragment). */
64271
+ const videoThumbnailSrc = (src) => {
64272
+ if (!src)
64273
+ return src;
64274
+ const [base] = src.split('#');
64275
+ return `${base}#t=0.1`;
64276
+ };
64277
+ const createVideoMediaItem = (src, index, idPrefix = 'vid') => ({
64278
+ id: `${idPrefix}-${index}`,
64279
+ kind: 'video',
64280
+ src,
64281
+ thumbSrc: videoThumbnailSrc(src),
64282
+ });
64283
+ const isPdfMediaItem = (item) => item.isPdf === true ||
64284
+ isFileType.pdf(item.src) ||
64285
+ (item.kind === 'certificate' && !isFileType.image(item.src));
64286
+ const MEDIA_KIND_ORDER = ['image', 'video', 'certificate'];
64287
+ const MEDIA_KIND_LABEL = {
64288
+ image: 'Images',
64289
+ video: 'Videos',
64290
+ certificate: 'Certificates',
64291
+ };
64292
+ const groupItemsByKind = (items) => {
64293
+ const out = {
64294
+ image: [],
64295
+ video: [],
64296
+ certificate: [],
64297
+ };
64298
+ for (const item of items) {
64299
+ out[item.kind].push(item);
64300
+ }
64301
+ return out;
64302
+ };
64303
+ const availableKinds = (items) => MEDIA_KIND_ORDER.filter((kind) => items.some((m) => m.kind === kind));
64304
+
64305
+ /**
64306
+ * What a card should render as. The MIME type decides when we have one, but it
64307
+ * can't be trusted alone: browsers report an empty `type` for some files, and
64308
+ * URL-imported items carry the short forms `'image'`/`'video'` from
64309
+ * `inferTypeFromUrl`. Extension patterns are the fallback so a video never
64310
+ * lands in the image branch and paints a broken thumbnail.
64311
+ */
64312
+ const fileKind = (file) => {
64313
+ const type = file.type ?? '';
64314
+ if (type.startsWith('video/') || type === 'video')
64315
+ return 'video';
64316
+ if (type.startsWith('image/') || type === 'image')
64317
+ return 'image';
64318
+ const ref = file.name || file.url || '';
64319
+ if (isFileType.video(ref))
64320
+ return 'video';
64321
+ if (isFileType.image(ref))
64322
+ return 'image';
64323
+ return 'other';
64324
+ };
64147
64325
  const formatFileSize = (bytes) => {
64148
64326
  if (!bytes && bytes !== 0)
64149
64327
  return '';
@@ -64195,15 +64373,30 @@ const validateFile = (file, maxSize, accept) => {
64195
64373
  const generateId = () => Math.random().toString(36).slice(2, 11);
64196
64374
  const fileNameFromUrl = (url) => url.split('/').pop()?.trim() || 'URL File';
64197
64375
 
64376
+ const KIND_ICON$1 = {
64377
+ image: Image$1,
64378
+ video: Video,
64379
+ other: FileText,
64380
+ };
64198
64381
  const FileCard = ({ file, sortable, disabled = false, onRemove, onPreview, }) => {
64199
64382
  const { attributes, listeners, setNodeRef, transform, transition, isDragging, } = useSortable({ id: file.id, disabled: disabled || !sortable });
64200
64383
  const style = {
64201
64384
  transform: CSS$1.Transform.toString(transform),
64202
64385
  transition,
64203
64386
  };
64204
- const isImage = file.type.startsWith('image/') || file.type === 'image' || !!file.preview;
64205
- const isVideo = file.type.startsWith('video/') || file.type === 'video';
64206
- return (jsxRuntime.jsxs("div", { ref: setNodeRef, style: style, className: cn('group relative w-[148px] shrink-0 rounded-xl border border-border bg-muted p-2', isDragging && 'opacity-60 shadow-lg ring-2 ring-primary/20'), children: [jsxRuntime.jsxs("div", { className: "flex items-center justify-between px-1 pt-0.5 pb-1.5", children: [sortable ? (jsxRuntime.jsx("button", { type: "button", ...attributes, ...listeners, disabled: disabled, className: "inline-flex h-5 w-5 cursor-grab items-center justify-center rounded text-muted-foreground hover:text-foreground active:cursor-grabbing touch-none", "aria-label": `Reorder ${file.name}`, children: jsxRuntime.jsx(GripHorizontal, { className: "h-3.5 w-3.5" }) })) : (jsxRuntime.jsx("span", { "aria-hidden": "true", className: "inline-block h-5 w-5" })), jsxRuntime.jsx("button", { type: "button", onClick: () => onRemove(file.id), disabled: disabled, className: "inline-flex h-5 w-5 cursor-pointer items-center justify-center rounded text-muted-foreground hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50", "aria-label": `Remove ${file.name}`, children: jsxRuntime.jsx(X$2, { className: "h-3.5 w-3.5" }) })] }), jsxRuntime.jsxs("div", { className: cn('relative aspect-square overflow-hidden rounded-lg bg-muted', onPreview && 'cursor-pointer'), onClick: onPreview ? () => onPreview(file) : undefined, role: onPreview ? 'button' : undefined, tabIndex: onPreview ? 0 : undefined, children: [isImage && file.preview ? (jsxRuntime.jsx("img", { src: file.preview, alt: file.name, className: "h-full w-full object-cover" })) : isVideo && (file.preview ?? file.url) ? (jsxRuntime.jsxs("div", { className: "relative h-full w-full", children: [jsxRuntime.jsx("video", { src: file.preview ?? file.url, muted: true, className: "h-full w-full object-cover" }), jsxRuntime.jsx("div", { className: "absolute inset-0 flex items-center justify-center bg-black/30", children: jsxRuntime.jsx(Video, { className: "h-5 w-5 text-white" }) })] })) : (jsxRuntime.jsx("div", { className: "flex h-full w-full items-center justify-center", children: jsxRuntime.jsx(FileText, { className: "h-10 w-10 text-muted-foreground" }) })), jsxRuntime.jsx("span", { className: "absolute left-1.5 top-1.5 inline-flex h-5 w-5 items-center justify-center rounded bg-black/40 text-white", children: isVideo ? (jsxRuntime.jsx(Video, { className: "h-3 w-3" })) : (jsxRuntime.jsx(Image$1, { className: "h-3 w-3" })) })] }), jsxRuntime.jsxs("div", { className: "mt-2 space-y-0.5 px-0.5", children: [jsxRuntime.jsx("p", { className: "truncate text-sm font-medium text-foreground", title: file.name, children: file.name }), jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: file.size
64387
+ const kind = fileKind(file);
64388
+ const previewSrc = file.preview ?? file.url;
64389
+ const KindIcon = KIND_ICON$1[kind];
64390
+ // Falls back to the icon tile when the media itself won't load, so a dead
64391
+ // object URL or an expired link never renders as a broken thumbnail.
64392
+ const [mediaFailed, setMediaFailed] = React.useState(false);
64393
+ React.useEffect(() => setMediaFailed(false), [previewSrc]);
64394
+ const showMedia = !!previewSrc && !mediaFailed;
64395
+ return (jsxRuntime.jsxs("div", { ref: setNodeRef, style: style, className: cn('group relative w-[148px] shrink-0 rounded-xl border border-border bg-muted p-2', isDragging && 'opacity-60 shadow-lg ring-2 ring-primary/20'), children: [jsxRuntime.jsxs("div", { className: "flex items-center justify-between px-1 pt-0.5 pb-1.5", children: [sortable ? (jsxRuntime.jsx("button", { type: "button", ...attributes, ...listeners, disabled: disabled, className: "inline-flex h-5 w-5 cursor-grab items-center justify-center rounded text-muted-foreground hover:text-foreground active:cursor-grabbing touch-none", "aria-label": `Reorder ${file.name}`, children: jsxRuntime.jsx(GripHorizontal, { className: "h-3.5 w-3.5" }) })) : (jsxRuntime.jsx("span", { "aria-hidden": "true", className: "inline-block h-5 w-5" })), jsxRuntime.jsx("button", { type: "button", onClick: () => onRemove(file.id), disabled: disabled, className: "inline-flex h-5 w-5 cursor-pointer items-center justify-center rounded text-muted-foreground hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50", "aria-label": `Remove ${file.name}`, children: jsxRuntime.jsx(X$2, { className: "h-3.5 w-3.5" }) })] }), jsxRuntime.jsxs("div", { className: cn('relative aspect-square overflow-hidden rounded-lg bg-muted', onPreview && 'cursor-pointer'), onClick: onPreview ? () => onPreview(file) : undefined, role: onPreview ? 'button' : undefined, tabIndex: onPreview ? 0 : undefined, children: [kind === 'image' && showMedia ? (jsxRuntime.jsx("img", { src: previewSrc, alt: file.name, onError: () => setMediaFailed(true), className: "h-full w-full object-cover" })) : kind === 'video' && showMedia ? (jsxRuntime.jsxs("div", { className: "relative h-full w-full", children: [jsxRuntime.jsx("video", { src: videoThumbnailSrc(previewSrc), muted: true, playsInline: true, preload: "metadata", onLoadedMetadata: (e) => {
64396
+ if (e.currentTarget.currentTime === 0) {
64397
+ e.currentTarget.currentTime = 0.1;
64398
+ }
64399
+ }, onError: () => setMediaFailed(true), className: "h-full w-full bg-black object-cover" }), jsxRuntime.jsx("span", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: jsxRuntime.jsx("span", { className: "inline-flex h-7 w-7 items-center justify-center rounded-full bg-black/55", children: jsxRuntime.jsx(Play, { className: "h-3.5 w-3.5 translate-x-[1px] fill-white text-white" }) }) })] })) : (jsxRuntime.jsx("div", { className: "flex h-full w-full items-center justify-center", children: jsxRuntime.jsx(KindIcon, { className: "h-10 w-10 text-muted-foreground" }) })), jsxRuntime.jsx("span", { className: "absolute left-1.5 top-1.5 inline-flex h-5 w-5 items-center justify-center rounded bg-black/40 text-white", children: jsxRuntime.jsx(KindIcon, { className: "h-3 w-3" }) })] }), jsxRuntime.jsxs("div", { className: "mt-2 space-y-0.5 px-0.5", children: [jsxRuntime.jsx("p", { className: "truncate text-sm font-medium text-foreground", title: file.name, children: file.name }), jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: file.size
64207
64400
  ? formatFileSize(file.size)
64208
64401
  : file.source === 'url'
64209
64402
  ? 'URL'
@@ -65070,56 +65263,6 @@ const InventoryItemCard = ({ stockId, status, name, description, imageUrl, onCli
65070
65263
  valueLabel !== undefined) && (jsxRuntime.jsxs("div", { className: "mt-3 grid grid-cols-3 gap-3 border-t border-border pt-3", children: [items !== undefined && (jsxRuntime.jsxs("div", { className: "min-w-0", children: [jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: "Items" }), jsxRuntime.jsx("p", { className: "mt-0.5 truncate text-sm font-normal tabular-nums text-foreground", children: items })] })), totalCarat !== undefined && (jsxRuntime.jsxs("div", { className: "min-w-0", children: [jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: "Total ct" }), jsxRuntime.jsxs("p", { className: "mt-0.5 truncate text-sm font-normal tabular-nums text-foreground", children: [totalCarat.toFixed(2), " ct"] })] })), valueLabel !== undefined && (jsxRuntime.jsxs("div", { className: "min-w-0", children: [jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: "Value" }), jsxRuntime.jsx(TooltipProvider, { delayDuration: 200, children: jsxRuntime.jsxs(Tooltip, { children: [jsxRuntime.jsx(TooltipTrigger, { asChild: true, children: jsxRuntime.jsx("p", { className: "mt-0.5 cursor-default truncate text-sm font-medium tabular-nums text-foreground", children: valueLabel }) }), jsxRuntime.jsx(TooltipContent, { side: "top", children: valueLabel })] }) })] }))] }))] }), (modifiedLabel || onView || onDuplicate || menu) && (jsxRuntime.jsxs("div", { className: "flex items-center justify-between border-t border-border px-4 py-2", children: [modifiedLabel ? (jsxRuntime.jsxs("p", { className: "text-xs text-muted-foreground tabular-nums", children: ["Modified: ", modifiedLabel] })) : (jsxRuntime.jsx("span", {})), jsxRuntime.jsxs("div", { className: "flex items-center gap-1", onClick: (e) => e.stopPropagation(), children: [onView && (jsxRuntime.jsx("button", { type: "button", "aria-label": "View", onClick: stop(onView), className: "inline-flex h-7 w-7 cursor-pointer items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground", children: jsxRuntime.jsx(Eye, { className: "h-4 w-4" }) })), onDuplicate && (jsxRuntime.jsx("button", { type: "button", "aria-label": "Duplicate", onClick: stop(onDuplicate), className: "inline-flex h-7 w-7 cursor-pointer items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-muted hover:text-foreground", children: jsxRuntime.jsx(Copy, { className: "h-4 w-4" }) })), menu] })] }))] }));
65071
65264
  };
65072
65265
 
65073
- const FILE_TYPE_PATTERNS = {
65074
- PDF: /\.pdf($|\?)/i,
65075
- IMAGE: /\.(jpg|jpeg|png|gif|bmp|webp|svg|heic|heif)($|\?)/i,
65076
- DOCUMENT: /\.(doc|docx|xls|xlsx|ppt|pptx)($|\?)/i,
65077
- VIDEO: /\.(mp4|avi|mov|wmv|flv|webm)($|\?)/i,
65078
- AUDIO: /\.(mp3|wav|flac|aac|ogg)($|\?)/i,
65079
- };
65080
- const isFileType = {
65081
- pdf: (url) => FILE_TYPE_PATTERNS.PDF.test(url),
65082
- image: (url) => FILE_TYPE_PATTERNS.IMAGE.test(url),
65083
- document: (url) => FILE_TYPE_PATTERNS.DOCUMENT.test(url),
65084
- video: (url) => FILE_TYPE_PATTERNS.VIDEO.test(url),
65085
- audio: (url) => FILE_TYPE_PATTERNS.AUDIO.test(url),
65086
- };
65087
-
65088
- /** Seek to ~1st frame for static video thumbnails (HTML5 media fragment). */
65089
- const videoThumbnailSrc = (src) => {
65090
- if (!src)
65091
- return src;
65092
- const [base] = src.split('#');
65093
- return `${base}#t=0.1`;
65094
- };
65095
- const createVideoMediaItem = (src, index, idPrefix = 'vid') => ({
65096
- id: `${idPrefix}-${index}`,
65097
- kind: 'video',
65098
- src,
65099
- thumbSrc: videoThumbnailSrc(src),
65100
- });
65101
- const isPdfMediaItem = (item) => item.isPdf === true ||
65102
- isFileType.pdf(item.src) ||
65103
- (item.kind === 'certificate' && !isFileType.image(item.src));
65104
- const MEDIA_KIND_ORDER = ['image', 'video', 'certificate'];
65105
- const MEDIA_KIND_LABEL = {
65106
- image: 'Images',
65107
- video: 'Videos',
65108
- certificate: 'Certificates',
65109
- };
65110
- const groupItemsByKind = (items) => {
65111
- const out = {
65112
- image: [],
65113
- video: [],
65114
- certificate: [],
65115
- };
65116
- for (const item of items) {
65117
- out[item.kind].push(item);
65118
- }
65119
- return out;
65120
- };
65121
- const availableKinds = (items) => MEDIA_KIND_ORDER.filter((kind) => items.some((m) => m.kind === kind));
65122
-
65123
65266
  const useMediaGallery = (items) => {
65124
65267
  const itemsByKind = React.useMemo(() => groupItemsByKind(items), [items]);
65125
65268
  const kinds = React.useMemo(() => availableKinds(items), [items]);
@@ -67739,6 +67882,7 @@ exports.getInitials = getInitials;
67739
67882
  exports.iconButtonVariants = iconButtonVariants;
67740
67883
  exports.isPathActive = isPathActive;
67741
67884
  exports.notify = notify;
67885
+ exports.releaseStaleOverlayBodyLock = releaseStaleOverlayBodyLock;
67742
67886
  exports.renderBadge = renderBadge;
67743
67887
  exports.useAuditShowMore = useAuditShowMore;
67744
67888
  exports.useBadge = useBadge;