@underverse-ui/underverse 2.0.7 → 2.0.8

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
@@ -854,7 +854,7 @@ function useOverlayScrollbarTarget(targetRef, options = {}) {
854
854
  var OverlayScrollbarProvider_default = OverlayScrollbarProvider;
855
855
 
856
856
  // src/components/Input.tsx
857
- import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
857
+ import { Fragment as Fragment2, jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
858
858
  var Input = forwardRef3(
859
859
  ({
860
860
  label,
@@ -877,6 +877,7 @@ var Input = forwardRef3(
877
877
  value,
878
878
  maxLength,
879
879
  rightAddon,
880
+ rightSection,
880
881
  borderMode,
881
882
  ...rest
882
883
  }, ref) => {
@@ -1048,7 +1049,7 @@ var Input = forwardRef3(
1048
1049
  radiusClass,
1049
1050
  // Icon padding adjustments
1050
1051
  LeftIcon && "pl-10",
1051
- (RightIcon || showPasswordToggle || clearable || loading2 || success || errMsg) && "pr-10",
1052
+ (RightIcon || showPasswordToggle || clearable || loading2 || success || errMsg || rightSection) && "pr-10",
1052
1053
  // Variant styles
1053
1054
  variantStyles5[variant].container,
1054
1055
  errMsg ? variantStyles5[variant].error : variantStyles5[variant].focus,
@@ -1061,45 +1062,57 @@ var Input = forwardRef3(
1061
1062
  ...restInput
1062
1063
  }
1063
1064
  ),
1064
- /* @__PURE__ */ jsxs5("div", { className: "absolute right-3 top-1/2 -translate-y-1/2 flex items-center gap-1", children: [
1065
- getStatusIcon(),
1066
- RightIcon && !loading2 && !success && !errMsg && /* @__PURE__ */ jsx6(RightIcon, { className: cn("text-muted-foreground", sizeStyles7[size].icon) }),
1067
- clearable && hasValue && !loading2 && /* @__PURE__ */ jsx6(
1068
- "button",
1069
- {
1070
- type: "button",
1071
- onClick: () => {
1072
- if (onClear) return onClear();
1073
- rest.onChange?.({ target: { value: "" } });
1074
- },
1075
- className: cn(
1076
- "flex items-center justify-center text-muted-foreground hover:text-foreground transition-colors rounded-md",
1077
- "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1",
1078
- "active:bg-accent active:text-accent-foreground",
1079
- sizeStyles7[size].iconButton
1080
- ),
1081
- tabIndex: 0,
1082
- "aria-label": gi18n.clearInput ?? "Clear input",
1083
- children: /* @__PURE__ */ jsx6(X, { className: sizeStyles7[size].icon })
1084
- }
1085
- ),
1086
- showPasswordToggle && /* @__PURE__ */ jsx6(
1087
- "button",
1088
- {
1089
- type: "button",
1090
- onClick: () => setShowPassword(!showPassword),
1091
- className: cn(
1092
- "flex items-center justify-center text-muted-foreground hover:text-foreground transition-colors rounded-full",
1093
- "focus:outline-none focus-visible:ring-1 focus-visible:ring-ring/40",
1094
- "active:bg-accent/50 active:text-accent-foreground",
1095
- sizeStyles7[size].iconButton
1096
- ),
1097
- tabIndex: 0,
1098
- "aria-label": showPassword ? gi18n.hidePassword ?? "Hide password" : gi18n.showPassword ?? "Show password",
1099
- children: showPassword ? /* @__PURE__ */ jsx6(EyeOff, { className: sizeStyles7[size].icon }) : /* @__PURE__ */ jsx6(Eye, { className: sizeStyles7[size].icon })
1100
- }
1101
- )
1102
- ] }),
1065
+ /* @__PURE__ */ jsxs5(
1066
+ "div",
1067
+ {
1068
+ className: cn(
1069
+ "absolute z-10 flex items-center gap-1",
1070
+ rightSection ? "inset-y-0 right-0" : "right-3 top-1/2 -translate-y-1/2"
1071
+ ),
1072
+ children: [
1073
+ /* @__PURE__ */ jsxs5("div", { className: cn("flex items-center gap-1", rightSection && "px-1"), children: [
1074
+ getStatusIcon(),
1075
+ RightIcon && !loading2 && !success && !errMsg && /* @__PURE__ */ jsx6(RightIcon, { className: cn("text-muted-foreground", sizeStyles7[size].icon) }),
1076
+ clearable && hasValue && !loading2 && /* @__PURE__ */ jsx6(
1077
+ "button",
1078
+ {
1079
+ type: "button",
1080
+ onClick: () => {
1081
+ if (onClear) return onClear();
1082
+ rest.onChange?.({ target: { value: "" } });
1083
+ },
1084
+ className: cn(
1085
+ "flex items-center justify-center text-muted-foreground hover:text-foreground transition-colors rounded-md",
1086
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1",
1087
+ "active:bg-accent active:text-accent-foreground",
1088
+ sizeStyles7[size].iconButton
1089
+ ),
1090
+ tabIndex: 0,
1091
+ "aria-label": gi18n.clearInput ?? "Clear input",
1092
+ children: /* @__PURE__ */ jsx6(X, { className: sizeStyles7[size].icon })
1093
+ }
1094
+ ),
1095
+ showPasswordToggle && /* @__PURE__ */ jsx6(
1096
+ "button",
1097
+ {
1098
+ type: "button",
1099
+ onClick: () => setShowPassword(!showPassword),
1100
+ className: cn(
1101
+ "flex items-center justify-center text-muted-foreground hover:text-foreground transition-colors rounded-full",
1102
+ "focus:outline-none focus-visible:ring-1 focus-visible:ring-ring/40",
1103
+ "active:bg-accent/50 active:text-accent-foreground",
1104
+ sizeStyles7[size].iconButton
1105
+ ),
1106
+ tabIndex: 0,
1107
+ "aria-label": showPassword ? gi18n.hidePassword ?? "Hide password" : gi18n.showPassword ?? "Show password",
1108
+ children: showPassword ? /* @__PURE__ */ jsx6(EyeOff, { className: sizeStyles7[size].icon }) : /* @__PURE__ */ jsx6(Eye, { className: sizeStyles7[size].icon })
1109
+ }
1110
+ )
1111
+ ] }),
1112
+ rightSection
1113
+ ]
1114
+ }
1115
+ ),
1103
1116
  rightAddon,
1104
1117
  variant === "minimal" && /* @__PURE__ */ jsx6(
1105
1118
  "div",
@@ -1134,27 +1147,128 @@ var Input = forwardRef3(
1134
1147
  }
1135
1148
  );
1136
1149
  Input.displayName = "Input";
1150
+ var searchButtonWidthStyles = {
1151
+ xs: "w-6",
1152
+ sm: "w-8",
1153
+ md: "w-10",
1154
+ lg: "w-12",
1155
+ xl: "w-14"
1156
+ };
1157
+ var searchButtonPaddingStyles = {
1158
+ xs: "pr-14",
1159
+ sm: "pr-18",
1160
+ md: "pr-20",
1161
+ lg: "pr-24",
1162
+ xl: "pr-28"
1163
+ };
1164
+ var searchButtonRadiusStyles = {
1165
+ none: "rounded-r-none",
1166
+ sm: "rounded-r-sm",
1167
+ md: "rounded-r-md",
1168
+ lg: "rounded-r-lg",
1169
+ xl: "rounded-r-xl",
1170
+ "2xl": "rounded-r-2xl",
1171
+ "3xl": "rounded-r-3xl",
1172
+ full: "rounded-r-full",
1173
+ daewoo: "rounded-r",
1174
+ infiniq: "rounded-r-full"
1175
+ };
1137
1176
  var SearchInput = forwardRef3(
1138
- ({ onSearch, searchDelay = 300, placeholder = "Search\u2026", ...props }, ref) => {
1139
- const [searchValue, setSearchValue] = useState3(props.value || "");
1177
+ ({
1178
+ mode = "default",
1179
+ onSearch,
1180
+ searchDelay = 300,
1181
+ searchButtonLabel = "Search",
1182
+ placeholder = "Search\u2026",
1183
+ value,
1184
+ defaultValue,
1185
+ onChange,
1186
+ onClear,
1187
+ onKeyDown,
1188
+ clearable = true,
1189
+ size = "md",
1190
+ className,
1191
+ disabled,
1192
+ loading: loading2 = false,
1193
+ rightSection,
1194
+ borderMode,
1195
+ ...props
1196
+ }, ref) => {
1197
+ const [uncontrolledValue, setUncontrolledValue] = useState3(defaultValue ?? "");
1198
+ const isControlled = value !== void 0;
1199
+ const searchValue = isControlled ? value : uncontrolledValue;
1200
+ const searchText = String(searchValue ?? "");
1201
+ const globalConfig = useUnderverseUIConfig();
1202
+ const resolvedBorderMode = borderMode ?? globalConfig.input?.borderMode ?? globalConfig.borderMode ?? "full";
1203
+ const searchButtonRadiusClass = searchButtonRadiusStyles[resolvedBorderMode] ?? getBorderRadiusClass(resolvedBorderMode);
1204
+ const triggerSearch = useCallback2(() => {
1205
+ onSearch?.(searchText);
1206
+ }, [onSearch, searchText]);
1140
1207
  React5.useEffect(() => {
1141
- if (!onSearch) return;
1208
+ if (!onSearch || mode !== "default") return;
1142
1209
  const timer = setTimeout(() => {
1143
- onSearch(searchValue);
1210
+ onSearch(searchText);
1144
1211
  }, searchDelay);
1145
1212
  return () => clearTimeout(timer);
1146
- }, [searchValue, onSearch, searchDelay]);
1213
+ }, [mode, onSearch, searchDelay, searchText]);
1214
+ const searchButton = mode === "button" ? /* @__PURE__ */ jsx6(
1215
+ "button",
1216
+ {
1217
+ type: "button",
1218
+ onClick: triggerSearch,
1219
+ disabled: disabled || loading2,
1220
+ className: cn(
1221
+ "flex h-full shrink-0 cursor-pointer items-center justify-center border-l border-border bg-transparent text-foreground",
1222
+ "transition-colors hover:bg-accent hover:text-accent-foreground",
1223
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring",
1224
+ "disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:bg-transparent",
1225
+ searchButtonWidthStyles[size],
1226
+ searchButtonRadiusClass
1227
+ ),
1228
+ "aria-label": searchButtonLabel,
1229
+ children: /* @__PURE__ */ jsx6(Search, { className: formControlSizeStyles[size].icon, "aria-hidden": "true" })
1230
+ }
1231
+ ) : null;
1147
1232
  return /* @__PURE__ */ jsx6(
1148
1233
  Input,
1149
1234
  {
1150
1235
  ref,
1151
1236
  type: "search",
1152
- leftIcon: Search,
1237
+ leftIcon: mode === "default" ? Search : void 0,
1153
1238
  placeholder,
1154
- clearable: true,
1239
+ clearable,
1155
1240
  value: searchValue,
1156
- onChange: (e) => setSearchValue(e.target.value),
1157
- onClear: () => setSearchValue(""),
1241
+ onChange: (event) => {
1242
+ if (!isControlled) setUncontrolledValue(event.target.value);
1243
+ onChange?.(event);
1244
+ },
1245
+ onClear: () => {
1246
+ if (!isControlled) {
1247
+ setUncontrolledValue("");
1248
+ } else if (!onClear && onChange) {
1249
+ onChange({ target: { value: "" }, currentTarget: { value: "" } });
1250
+ }
1251
+ onClear?.();
1252
+ },
1253
+ onKeyDown: (event) => {
1254
+ onKeyDown?.(event);
1255
+ if (mode === "button" && event.key === "Enter" && !event.defaultPrevented && !event.nativeEvent.isComposing) {
1256
+ triggerSearch();
1257
+ }
1258
+ },
1259
+ size,
1260
+ className: cn(
1261
+ "[&::-webkit-search-cancel-button]:appearance-none [&::-webkit-search-decoration]:appearance-none",
1262
+ mode === "button" && searchButtonPaddingStyles[size],
1263
+ className
1264
+ ),
1265
+ disabled,
1266
+ loading: loading2,
1267
+ rightSection: mode === "button" ? /* @__PURE__ */ jsxs5(Fragment2, { children: [
1268
+ rightSection,
1269
+ searchButton
1270
+ ] }) : rightSection,
1271
+ borderMode,
1158
1272
  ...props
1159
1273
  }
1160
1274
  );
@@ -2996,7 +3110,7 @@ var Skeleton_default = Skeleton;
2996
3110
  // src/components/Progress.tsx
2997
3111
  import React13 from "react";
2998
3112
  import { Check as Check2, X as X4, Clock } from "lucide-react";
2999
- import { Fragment as Fragment2, jsx as jsx15, jsxs as jsxs11 } from "react/jsx-runtime";
3113
+ import { Fragment as Fragment3, jsx as jsx15, jsxs as jsxs11 } from "react/jsx-runtime";
3000
3114
  var variantStyles2 = {
3001
3115
  default: "bg-muted-foreground",
3002
3116
  primary: "bg-linear-to-r from-primary via-primary/90 to-primary",
@@ -3157,7 +3271,7 @@ var CircularProgress = ({
3157
3271
  ]
3158
3272
  }
3159
3273
  ),
3160
- /* @__PURE__ */ jsx15("div", { className: "absolute inset-0 flex flex-col items-center justify-center text-center", children: children ? children : /* @__PURE__ */ jsxs11(Fragment2, { children: [
3274
+ /* @__PURE__ */ jsx15("div", { className: "absolute inset-0 flex flex-col items-center justify-center text-center", children: children ? children : /* @__PURE__ */ jsxs11(Fragment3, { children: [
3161
3275
  getContentIcon(),
3162
3276
  showValue && !indeterminate && /* @__PURE__ */ jsx15("span", { className: cn("text-sm font-semibold", isComplete ? "text-success" : isError ? "text-destructive" : "text-foreground"), children: isComplete ? "\u2713" : isError ? "\u2717" : `${Math.round(percentage)}%` }),
3163
3277
  indeterminate && /* @__PURE__ */ jsx15(Clock, { className: "w-4 h-4 text-muted-foreground animate-pulse" })
@@ -4473,7 +4587,7 @@ import * as React19 from "react";
4473
4587
  import { useId as useId4 } from "react";
4474
4588
  import { useVirtualizer } from "@tanstack/react-virtual";
4475
4589
  import { ChevronDown, Search as Search4, SearchX, Check as Check3, X as X8 } from "lucide-react";
4476
- import { Fragment as Fragment3, jsx as jsx22, jsxs as jsxs18 } from "react/jsx-runtime";
4590
+ import { Fragment as Fragment4, jsx as jsx22, jsxs as jsxs18 } from "react/jsx-runtime";
4477
4591
  var getOptionLabel = (option) => {
4478
4592
  return typeof option === "string" ? option : option.label;
4479
4593
  };
@@ -4966,7 +5080,7 @@ var Combobox = ({
4966
5080
  className
4967
5081
  )
4968
5082
  };
4969
- const triggerContents = /* @__PURE__ */ jsxs18(Fragment3, { children: [
5083
+ const triggerContents = /* @__PURE__ */ jsxs18(Fragment4, { children: [
4970
5084
  selectedIcon && /* @__PURE__ */ jsx22("span", { className: cn("mr-2 flex shrink-0 items-center justify-center overflow-hidden text-primary", formControlSizeStyles[size].icon), children: selectedIcon }),
4971
5085
  /* @__PURE__ */ jsx22("span", { className: cn(formControlValueClass, "text-left", !displayValue && "text-muted-foreground", fontBold && "font-semibold"), children: renderValue && selectedOption ? renderValue(selectedOption) : displayValue || placeholder }),
4972
5086
  /* @__PURE__ */ jsxs18("div", { className: "flex items-center gap-1.5 ml-2 shrink-0", children: [
@@ -5814,7 +5928,7 @@ function parseDateString(str, locale = "en") {
5814
5928
  import { Calendar, ChevronLeft as ChevronLeft2, ChevronRight as ChevronRight3, Sparkles, X as XIcon } from "lucide-react";
5815
5929
  import * as React23 from "react";
5816
5930
  import { useId as useId5 } from "react";
5817
- import { Fragment as Fragment4, jsx as jsx27, jsxs as jsxs20 } from "react/jsx-runtime";
5931
+ import { Fragment as Fragment5, jsx as jsx27, jsxs as jsxs20 } from "react/jsx-runtime";
5818
5932
  function normalizeToLocalDate(date) {
5819
5933
  if (!date) return null;
5820
5934
  return new Date(date.getFullYear(), date.getMonth(), date.getDate());
@@ -6205,7 +6319,7 @@ var DatePicker = ({
6205
6319
  }
6206
6320
  )
6207
6321
  ] }),
6208
- viewMode === "calendar" && /* @__PURE__ */ jsxs20(Fragment4, { children: [
6322
+ viewMode === "calendar" && /* @__PURE__ */ jsxs20(Fragment5, { children: [
6209
6323
  /* @__PURE__ */ jsx27("div", { className: cn("grid grid-cols-7 gap-1 mb-2 px-0.5"), children: (weekdayLabels || (locale === "vi" ? ["CN", "T2", "T3", "T4", "T5", "T6", "T7"] : ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"])).map(
6210
6324
  (day, idx) => /* @__PURE__ */ jsx27(
6211
6325
  "div",
@@ -6976,7 +7090,7 @@ var DateRangePicker = ({
6976
7090
  }
6977
7091
  )
6978
7092
  ] }),
6979
- viewMode === "calendar" && /* @__PURE__ */ jsxs20(Fragment4, { children: [
7093
+ viewMode === "calendar" && /* @__PURE__ */ jsxs20(Fragment5, { children: [
6980
7094
  /* @__PURE__ */ jsx27("div", { className: cn("grid grid-cols-7 gap-1 px-0.5", size === "sm" ? "mb-1" : size === "lg" ? "mb-3" : "mb-2"), children: (locale === "vi" ? ["CN", "T2", "T3", "T4", "T5", "T6", "T7"] : ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"]).map((d, idx) => /* @__PURE__ */ jsx27(
6981
7095
  "div",
6982
7096
  {
@@ -7400,7 +7514,7 @@ function getLeapMonthOffset(a11, timeZone) {
7400
7514
  }
7401
7515
 
7402
7516
  // src/components/LunarDatePicker.tsx
7403
- import { Fragment as Fragment5, jsx as jsx28, jsxs as jsxs21 } from "react/jsx-runtime";
7517
+ import { Fragment as Fragment6, jsx as jsx28, jsxs as jsxs21 } from "react/jsx-runtime";
7404
7518
  function toSolarDate(value) {
7405
7519
  if (!value) return null;
7406
7520
  const solar = lunarToSolar({
@@ -7904,7 +8018,7 @@ var LunarDatePicker = ({
7904
8018
  }
7905
8019
  )
7906
8020
  ] }),
7907
- viewMode === "calendar" && /* @__PURE__ */ jsxs21(Fragment5, { children: [
8021
+ viewMode === "calendar" && /* @__PURE__ */ jsxs21(Fragment6, { children: [
7908
8022
  /* @__PURE__ */ jsx28("div", { className: cn("grid grid-cols-7 gap-1 mb-2 px-0.5"), children: (weekdayLabels || (locale === "vi" ? ["CN", "T2", "T3", "T4", "T5", "T6", "T7"] : ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"])).map(
7909
8023
  (day, idx) => /* @__PURE__ */ jsx28(
7910
8024
  "div",
@@ -8544,7 +8658,7 @@ var LunarDateRangePicker = ({
8544
8658
  }
8545
8659
  )
8546
8660
  ] }),
8547
- viewMode === "calendar" && /* @__PURE__ */ jsxs21(Fragment5, { children: [
8661
+ viewMode === "calendar" && /* @__PURE__ */ jsxs21(Fragment6, { children: [
8548
8662
  /* @__PURE__ */ jsx28("div", { className: cn("grid grid-cols-7 gap-1 px-0.5", size === "sm" ? "mb-1" : size === "lg" ? "mb-3" : "mb-2"), children: (locale === "vi" ? ["CN", "T2", "T3", "T4", "T5", "T6", "T7"] : ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"]).map((d, idx) => /* @__PURE__ */ jsx28(
8549
8663
  "div",
8550
8664
  {
@@ -9611,7 +9725,7 @@ function MonthYearPicker({
9611
9725
  }
9612
9726
 
9613
9727
  // src/components/Calendar.tsx
9614
- import { Fragment as Fragment7, jsx as jsx30, jsxs as jsxs23 } from "react/jsx-runtime";
9728
+ import { Fragment as Fragment8, jsx as jsx30, jsxs as jsxs23 } from "react/jsx-runtime";
9615
9729
  var VIETNAM_HOLIDAYS = [
9616
9730
  { date: "01-01", name: "T\u1EBFt D\u01B0\u01A1ng l\u1ECBch", recurring: true },
9617
9731
  { date: "04-30", name: "Gi\u1EA3i ph\xF3ng mi\u1EC1n Nam", recurring: true },
@@ -10106,7 +10220,7 @@ function Calendar4({
10106
10220
  }
10107
10221
  )
10108
10222
  ] }),
10109
- display === "week" ? /* @__PURE__ */ jsxs23(Fragment7, { children: [
10223
+ display === "week" ? /* @__PURE__ */ jsxs23(Fragment8, { children: [
10110
10224
  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}`)) }),
10111
10225
  /* @__PURE__ */ jsx30("div", { className: cn("grid grid-cols-7", sz.grid), children: weekDays.map((d, idx) => {
10112
10226
  const inMonth = true;
@@ -10262,7 +10376,7 @@ function Calendar4({
10262
10376
  // src/components/TimePicker.tsx
10263
10377
  import * as React27 from "react";
10264
10378
  import { Clock as Clock2, X as X10, Check as Check5, Sun, Moon, Sunset, Coffee } from "lucide-react";
10265
- import { Fragment as Fragment8, jsx as jsx31, jsxs as jsxs24 } from "react/jsx-runtime";
10379
+ import { Fragment as Fragment9, jsx as jsx31, jsxs as jsxs24 } from "react/jsx-runtime";
10266
10380
  var pad = (n) => n.toString().padStart(2, "0");
10267
10381
  var clamp2 = (n, min, max) => Math.min(max, Math.max(min, n));
10268
10382
  var WHEEL_ITEM_HEIGHT2 = {
@@ -11299,7 +11413,7 @@ function TimePicker({
11299
11413
  }
11300
11414
  );
11301
11415
  })(),
11302
- includeSeconds && /* @__PURE__ */ jsxs24(Fragment8, { children: [
11416
+ includeSeconds && /* @__PURE__ */ jsxs24(Fragment9, { children: [
11303
11417
  /* @__PURE__ */ jsx31("div", { className: cn("flex flex-col items-center justify-center", panelSz.separatorPad, compactPanel && "pt-6"), children: /* @__PURE__ */ jsxs24("div", { className: "flex flex-col gap-2", children: [
11304
11418
  /* @__PURE__ */ jsx31("div", { className: "w-1.5 h-1.5 rounded-full bg-primary/60" }),
11305
11419
  /* @__PURE__ */ jsx31("div", { className: "w-1.5 h-1.5 rounded-full bg-primary/60" })
@@ -13286,7 +13400,7 @@ function useVisibleSlotRange(args) {
13286
13400
  }
13287
13401
 
13288
13402
  // src/components/CalendarTimeline/CalendarTimeline.tsx
13289
- import { Fragment as Fragment10, jsx as jsx38, jsxs as jsxs31 } from "react/jsx-runtime";
13403
+ import { Fragment as Fragment11, jsx as jsx38, jsxs as jsxs31 } from "react/jsx-runtime";
13290
13404
  function CalendarTimeline({
13291
13405
  resources,
13292
13406
  events,
@@ -14612,7 +14726,7 @@ function CalendarTimeline({
14612
14726
  ]
14613
14727
  }
14614
14728
  ),
14615
- !isViewOnly && (interactions?.resizableEvents ?? true) && ev.resizable !== false ? /* @__PURE__ */ jsxs31(Fragment10, { children: [
14729
+ !isViewOnly && (interactions?.resizableEvents ?? true) && ev.resizable !== false ? /* @__PURE__ */ jsxs31(Fragment11, { children: [
14616
14730
  /* @__PURE__ */ jsx38(
14617
14731
  "div",
14618
14732
  {
@@ -14792,7 +14906,7 @@ import * as React35 from "react";
14792
14906
  import { useId as useId10 } from "react";
14793
14907
  import { useVirtualizer as useVirtualizer2 } from "@tanstack/react-virtual";
14794
14908
  import { ChevronDown as ChevronDown4, Search as Search5, Check as Check6, SearchX as SearchX2, Loader2 as Loader23, X as X12, Sparkles as Sparkles3 } from "lucide-react";
14795
- import { Fragment as Fragment11, jsx as jsx39, jsxs as jsxs32 } from "react/jsx-runtime";
14909
+ import { Fragment as Fragment12, jsx as jsx39, jsxs as jsxs32 } from "react/jsx-runtime";
14796
14910
  var comboboxScrollClassName2 = [
14797
14911
  "scrollbar-thin",
14798
14912
  "[scrollbar-width:thin]",
@@ -15271,7 +15385,7 @@ var MultiCombobox = ({
15271
15385
  !!effectiveError && "border-destructive focus-visible:ring-destructive/30"
15272
15386
  ),
15273
15387
  children: [
15274
- /* @__PURE__ */ jsx39("div", { className: "flex min-h-0 min-w-0 flex-1 items-center gap-1.5 overflow-hidden", children: value.length > 0 ? showTags ? /* @__PURE__ */ jsxs32(Fragment11, { children: [
15388
+ /* @__PURE__ */ jsx39("div", { className: "flex min-h-0 min-w-0 flex-1 items-center gap-1.5 overflow-hidden", children: value.length > 0 ? showTags ? /* @__PURE__ */ jsxs32(Fragment12, { children: [
15275
15389
  visibleTags.map((option) => {
15276
15390
  if (renderTag) {
15277
15391
  return /* @__PURE__ */ jsx39("span", { className: "inline-flex max-h-full min-w-0 shrink overflow-hidden", children: renderTag(option, () => handleRemove(option.value)) }, option.value);
@@ -15873,7 +15987,7 @@ var ToggleGroup = (props) => {
15873
15987
 
15874
15988
  // src/components/Slider.tsx
15875
15989
  import * as React37 from "react";
15876
- import { Fragment as Fragment12, jsx as jsx41, jsxs as jsxs34 } from "react/jsx-runtime";
15990
+ import { Fragment as Fragment13, jsx as jsx41, jsxs as jsxs34 } from "react/jsx-runtime";
15877
15991
  var SIZE_STYLES = {
15878
15992
  sm: {
15879
15993
  track: "h-1",
@@ -16131,7 +16245,7 @@ var Slider = React37.forwardRef(
16131
16245
  tooltipClassName
16132
16246
  }
16133
16247
  ),
16134
- isRange && /* @__PURE__ */ jsxs34(Fragment12, { children: [
16248
+ isRange && /* @__PURE__ */ jsxs34(Fragment13, { children: [
16135
16249
  /* @__PURE__ */ jsx41(
16136
16250
  SliderTooltip,
16137
16251
  {
@@ -16227,7 +16341,7 @@ var Slider = React37.forwardRef(
16227
16341
  }
16228
16342
  const minZ = activeThumb === "min" ? "z-20" : "z-10";
16229
16343
  const maxZ = activeThumb === "max" ? "z-20" : "z-10";
16230
- return /* @__PURE__ */ jsxs34(Fragment12, { children: [
16344
+ return /* @__PURE__ */ jsxs34(Fragment13, { children: [
16231
16345
  /* @__PURE__ */ jsx41(
16232
16346
  "div",
16233
16347
  {
@@ -16290,7 +16404,7 @@ Slider.displayName = "Slider";
16290
16404
  // src/components/OverlayControls.tsx
16291
16405
  import { Dot as Dot2, Maximize2, Pause, Play, RotateCcw, RotateCw, Volume2, VolumeX } from "lucide-react";
16292
16406
  import React38 from "react";
16293
- import { Fragment as Fragment13, jsx as jsx42, jsxs as jsxs35 } from "react/jsx-runtime";
16407
+ import { Fragment as Fragment14, jsx as jsx42, jsxs as jsxs35 } from "react/jsx-runtime";
16294
16408
  function resolveKeyboardEventElement(target) {
16295
16409
  if (target instanceof Element) return target;
16296
16410
  if (target instanceof Node) return target.parentElement;
@@ -16535,7 +16649,7 @@ function OverlayControls({
16535
16649
  const handleSliderMouseLeave = () => {
16536
16650
  setPreviewData(null);
16537
16651
  };
16538
- return /* @__PURE__ */ jsxs35(Fragment13, { children: [
16652
+ return /* @__PURE__ */ jsxs35(Fragment14, { children: [
16539
16653
  keyboardFeedback && /* @__PURE__ */ jsx42(
16540
16654
  "div",
16541
16655
  {
@@ -17959,7 +18073,7 @@ import {
17959
18073
  Upload as Upload2
17960
18074
  } from "lucide-react";
17961
18075
  import { useCallback as useCallback16, useMemo as useMemo19, useRef as useRef19, useState as useState29 } from "react";
17962
- import { Fragment as Fragment14, jsx as jsx45, jsxs as jsxs38 } from "react/jsx-runtime";
18076
+ import { Fragment as Fragment15, jsx as jsx45, jsxs as jsxs38 } from "react/jsx-runtime";
17963
18077
  var formatFileSize = (bytes) => {
17964
18078
  if (bytes === 0) return "0 Bytes";
17965
18079
  const k = 1024;
@@ -18390,7 +18504,7 @@ function FileUpload({
18390
18504
  ] }),
18391
18505
  /* @__PURE__ */ jsx45("p", { className: cn("text-muted-foreground", size === "lg" ? "text-sm" : "text-xs"), children: supportedFormatsText || t("supportedFormats") || `Max ${maxSize}MB per file \u2022 Up to ${maxFiles} files` })
18392
18506
  ] }),
18393
- variant === "compact" && /* @__PURE__ */ jsxs38(Fragment14, { children: [
18507
+ variant === "compact" && /* @__PURE__ */ jsxs38(Fragment15, { children: [
18394
18508
  /* @__PURE__ */ jsx45("div", { className: cn("shrink-0 rounded-lg flex items-center justify-center", "bg-primary/10", currentSize.iconSize), children: /* @__PURE__ */ jsx45(Upload2, { className: cn("text-primary", size === "sm" ? "w-4 h-4" : "w-5 h-5") }) }),
18395
18509
  /* @__PURE__ */ jsxs38("div", { className: "flex-1 min-w-0", children: [
18396
18510
  /* @__PURE__ */ jsx45("p", { className: cn("font-medium truncate", currentSize.text), children: dragDropText || t("dragDropText") || "Drop files here or" }),
@@ -18457,7 +18571,7 @@ function FileUpload({
18457
18571
  // src/components/Carousel.tsx
18458
18572
  import * as React40 from "react";
18459
18573
  import { ChevronLeft as ChevronLeft6, ChevronRight as ChevronRight8 } from "lucide-react";
18460
- import { Fragment as Fragment15, jsx as jsx46, jsxs as jsxs39 } from "react/jsx-runtime";
18574
+ import { Fragment as Fragment16, jsx as jsx46, jsxs as jsxs39 } from "react/jsx-runtime";
18461
18575
  function Carousel({
18462
18576
  children,
18463
18577
  autoScroll = true,
@@ -18887,7 +19001,7 @@ function Carousel({
18887
19001
  })
18888
19002
  }
18889
19003
  ),
18890
- shouldShowArrows && totalSlides > effectiveSlidesToShow && /* @__PURE__ */ jsxs39(Fragment15, { children: [
19004
+ shouldShowArrows && totalSlides > effectiveSlidesToShow && /* @__PURE__ */ jsxs39(Fragment16, { children: [
18891
19005
  /* @__PURE__ */ jsx46(
18892
19006
  Button_default,
18893
19007
  {
@@ -19258,7 +19372,7 @@ function FallingIcons({
19258
19372
  // src/components/List.tsx
19259
19373
  import * as React42 from "react";
19260
19374
  import { ChevronRight as ChevronRight9 } from "lucide-react";
19261
- import { Fragment as Fragment16, jsx as jsx48, jsxs as jsxs41 } from "react/jsx-runtime";
19375
+ import { Fragment as Fragment17, jsx as jsx48, jsxs as jsxs41 } from "react/jsx-runtime";
19262
19376
  var SIZE_STYLES2 = {
19263
19377
  xs: { label: "text-xs", desc: "text-[11px]", icon: "h-3.5 w-3.5", avatar: "h-6 w-6" },
19264
19378
  sm: { label: "text-[13px]", desc: "text-xs", icon: "h-4 w-4", avatar: "h-8 w-8" },
@@ -19427,7 +19541,7 @@ var ListItem = React42.forwardRef(
19427
19541
  }
19428
19542
  }
19429
19543
  } : {};
19430
- const inner = /* @__PURE__ */ jsxs41(Fragment16, { children: [
19544
+ const inner = /* @__PURE__ */ jsxs41(Fragment17, { children: [
19431
19545
  /* @__PURE__ */ jsxs41("div", { className: cn("flex items-center gap-3 group/item relative max-md:gap-2.5", contentClassName), ...headerProps, children: [
19432
19546
  avatar && /* @__PURE__ */ jsx48("div", { className: cn("shrink-0", sz.avatar), children: typeof avatar === "string" ? /* @__PURE__ */ jsx48("img", { src: avatar, alt: "", className: cn("rounded-full object-cover", sz.avatar) }) : avatar }),
19433
19547
  Left && !avatar && /* @__PURE__ */ jsx48("span", { className: cn("text-muted-foreground shrink-0", sz.icon), children: /* @__PURE__ */ jsx48(Left, { className: cn(sz.icon) }) }),
@@ -19472,7 +19586,7 @@ var List_default = List;
19472
19586
  // src/components/Watermark.tsx
19473
19587
  import * as React43 from "react";
19474
19588
  import { createPortal as createPortal2 } from "react-dom";
19475
- import { Fragment as Fragment17, jsx as jsx49, jsxs as jsxs42 } from "react/jsx-runtime";
19589
+ import { Fragment as Fragment18, jsx as jsx49, jsxs as jsxs42 } from "react/jsx-runtime";
19476
19590
  var PRESETS2 = {
19477
19591
  confidential: { text: "CONFIDENTIAL", color: "rgba(220, 38, 38, 0.15)", rotate: -22, fontSize: 16, fontWeight: "bold" },
19478
19592
  draft: { text: "DRAFT", color: "rgba(59, 130, 246, 0.15)", rotate: -22, fontSize: 18, fontWeight: "bold" },
@@ -19751,7 +19865,7 @@ var Watermark = ({
19751
19865
  }
19752
19866
  );
19753
19867
  if (fullPage) {
19754
- return /* @__PURE__ */ jsxs42(Fragment17, { children: [
19868
+ return /* @__PURE__ */ jsxs42(Fragment18, { children: [
19755
19869
  children,
19756
19870
  typeof window !== "undefined" ? createPortal2(overlay, document.body) : null
19757
19871
  ] });
@@ -20938,7 +21052,7 @@ var MusicPlayer_default = MusicPlayer;
20938
21052
 
20939
21053
  // src/components/Grid.tsx
20940
21054
  import React47, { useId as useId13 } from "react";
20941
- import { Fragment as Fragment18, jsx as jsx53, jsxs as jsxs46 } from "react/jsx-runtime";
21055
+ import { Fragment as Fragment19, jsx as jsx53, jsxs as jsxs46 } from "react/jsx-runtime";
20942
21056
  var BP_MIN = {
20943
21057
  sm: 640,
20944
21058
  md: 768,
@@ -21095,7 +21209,7 @@ var GridItem = React47.forwardRef(
21095
21209
  st.opacity = 0;
21096
21210
  st.animation = `uvGridItemFadeIn 0.5s ease-out forwards`;
21097
21211
  }
21098
- return /* @__PURE__ */ jsxs46(Fragment18, { children: [
21212
+ return /* @__PURE__ */ jsxs46(Fragment19, { children: [
21099
21213
  animationDelay != null && /* @__PURE__ */ jsx53(
21100
21214
  "style",
21101
21215
  {
@@ -21125,13 +21239,13 @@ var Grid = Object.assign(GridRoot, { Item: GridItem });
21125
21239
  var Grid_default = Grid;
21126
21240
 
21127
21241
  // src/components/ClientOnly.tsx
21128
- import { Fragment as Fragment19, jsx as jsx54 } from "react/jsx-runtime";
21242
+ import { Fragment as Fragment20, jsx as jsx54 } from "react/jsx-runtime";
21129
21243
  function ClientOnly({ children, fallback = null }) {
21130
21244
  const hasMounted = useHydrated();
21131
21245
  if (!hasMounted) {
21132
- return /* @__PURE__ */ jsx54(Fragment19, { children: fallback });
21246
+ return /* @__PURE__ */ jsx54(Fragment20, { children: fallback });
21133
21247
  }
21134
- return /* @__PURE__ */ jsx54(Fragment19, { children });
21248
+ return /* @__PURE__ */ jsx54(Fragment20, { children });
21135
21249
  }
21136
21250
 
21137
21251
  // src/components/Loading.tsx
@@ -21313,7 +21427,7 @@ import React58 from "react";
21313
21427
 
21314
21428
  // src/components/DataTable/components/DataTableBody.tsx
21315
21429
  import React49 from "react";
21316
- import { Fragment as Fragment20, jsx as jsx57, jsxs as jsxs49 } from "react/jsx-runtime";
21430
+ import { Fragment as Fragment21, jsx as jsx57, jsxs as jsxs49 } from "react/jsx-runtime";
21317
21431
  function DataTableOverflowText({
21318
21432
  text,
21319
21433
  align
@@ -21408,7 +21522,7 @@ function DataTableBodyRows({
21408
21522
  t("loading"),
21409
21523
  "\u2026"
21410
21524
  ] })
21411
- ] }) }) }) : displayedData.length === 0 ? /* @__PURE__ */ jsx57(TableRow, { className: "!border-border/10", children: /* @__PURE__ */ jsx57(TableCell, { colSpan: leafColumns.length, className: "text-center py-6 text-muted-foreground", children: labels?.noData || t("noData") }) }) : /* @__PURE__ */ jsxs49(Fragment20, { children: [
21525
+ ] }) }) }) : displayedData.length === 0 ? /* @__PURE__ */ jsx57(TableRow, { className: "!border-border/10", children: /* @__PURE__ */ jsx57(TableCell, { colSpan: leafColumns.length, className: "text-center py-6 text-muted-foreground", children: labels?.noData || t("noData") }) }) : /* @__PURE__ */ jsxs49(Fragment21, { children: [
21412
21526
  virtualPaddingTop > 0 && /* @__PURE__ */ jsx57(TableRow, { "aria-hidden": "true", className: "border-0 hover:bg-transparent hover:shadow-none", children: /* @__PURE__ */ jsx57(TableCell, { colSpan: leafColumns.length, className: "p-0", style: { height: virtualPaddingTop } }) }),
21413
21527
  rowsToRender.map(({ row, idx, virtualRow }) => {
21414
21528
  const isStripedRow = striped && idx % 2 === 0;
@@ -21542,7 +21656,7 @@ function groupColumnsByColorTag(leafCols, colorGroups) {
21542
21656
  }
21543
21657
 
21544
21658
  // src/components/DataTable/components/DataTableHeader.tsx
21545
- import { Fragment as Fragment21, jsx as jsx58, jsxs as jsxs50 } from "react/jsx-runtime";
21659
+ import { Fragment as Fragment22, jsx as jsx58, jsxs as jsxs50 } from "react/jsx-runtime";
21546
21660
  function getColumnLabel(title) {
21547
21661
  if (typeof title === "string" || typeof title === "number") {
21548
21662
  return String(title).replace(/\s+/g, " ").trim();
@@ -21786,10 +21900,10 @@ function DataTableHeader({
21786
21900
  !isRightAlign && !isCenterAlign && "justify-start",
21787
21901
  useEndIcon && "w-full"
21788
21902
  ),
21789
- children: isRightAlign ? /* @__PURE__ */ jsxs50(Fragment21, { children: [
21903
+ children: isRightAlign ? /* @__PURE__ */ jsxs50(Fragment22, { children: [
21790
21904
  filterContent,
21791
21905
  titleContent
21792
- ] }) : /* @__PURE__ */ jsxs50(Fragment21, { children: [
21906
+ ] }) : /* @__PURE__ */ jsxs50(Fragment22, { children: [
21793
21907
  titleContent,
21794
21908
  filterContent
21795
21909
  ] })
@@ -21812,7 +21926,7 @@ function DataTableHeader({
21812
21926
  t
21813
21927
  ]
21814
21928
  );
21815
- return /* @__PURE__ */ jsx58(Fragment21, { children: headerRows.map((row, rowIndex) => /* @__PURE__ */ jsx58(TableRow, { className: "!border-border/10", children: row.map((headerCell, cellIndex) => {
21929
+ return /* @__PURE__ */ jsx58(Fragment22, { children: headerRows.map((row, rowIndex) => /* @__PURE__ */ jsx58(TableRow, { className: "!border-border/10", children: row.map((headerCell, cellIndex) => {
21816
21930
  const { column: col, colSpan, rowSpan, isLeaf } = headerCell;
21817
21931
  const prevCell = cellIndex > 0 ? row[cellIndex - 1] : null;
21818
21932
  const prevCol = prevCell?.column;
@@ -23455,7 +23569,7 @@ function AccessDenied({
23455
23569
  import { Moon as Moon2, Sun as Sun2, Monitor } from "lucide-react";
23456
23570
  import { useRef as useRef23, useState as useState37 } from "react";
23457
23571
  import { createPortal as createPortal3 } from "react-dom";
23458
- import { Fragment as Fragment22, jsx as jsx65, jsxs as jsxs57 } from "react/jsx-runtime";
23572
+ import { Fragment as Fragment23, jsx as jsx65, jsxs as jsxs57 } from "react/jsx-runtime";
23459
23573
  function ThemeToggleHeadless({
23460
23574
  theme,
23461
23575
  onChange,
@@ -23505,7 +23619,7 @@ function ThemeToggleHeadless({
23505
23619
  children: /* @__PURE__ */ jsx65(CurrentIcon, { className: "h-5 w-5" })
23506
23620
  }
23507
23621
  ),
23508
- isOpen && /* @__PURE__ */ jsxs57(Fragment22, { children: [
23622
+ isOpen && /* @__PURE__ */ jsxs57(Fragment23, { children: [
23509
23623
  typeof window !== "undefined" && createPortal3(/* @__PURE__ */ jsx65("div", { className: "fixed inset-0 z-[99998]", onClick: () => setIsOpen(false) }), document.body),
23510
23624
  typeof window !== "undefined" && dropdownPosition && createPortal3(
23511
23625
  /* @__PURE__ */ jsx65(
@@ -23557,7 +23671,7 @@ function ThemeToggleHeadless({
23557
23671
  import { useRef as useRef24, useState as useState38 } from "react";
23558
23672
  import { createPortal as createPortal4 } from "react-dom";
23559
23673
  import { Globe } from "lucide-react";
23560
- import { Fragment as Fragment23, jsx as jsx66, jsxs as jsxs58 } from "react/jsx-runtime";
23674
+ import { Fragment as Fragment24, jsx as jsx66, jsxs as jsxs58 } from "react/jsx-runtime";
23561
23675
  function LanguageSwitcherHeadless({
23562
23676
  locales,
23563
23677
  currentLocale,
@@ -23602,7 +23716,7 @@ function LanguageSwitcherHeadless({
23602
23716
  children: /* @__PURE__ */ jsx66(Globe, { className: "h-5 w-5" })
23603
23717
  }
23604
23718
  ),
23605
- isOpen && /* @__PURE__ */ jsxs58(Fragment23, { children: [
23719
+ isOpen && /* @__PURE__ */ jsxs58(Fragment24, { children: [
23606
23720
  typeof window !== "undefined" && createPortal4(/* @__PURE__ */ jsx66("div", { className: "fixed inset-0 z-[99998]", onClick: () => setIsOpen(false) }), document.body),
23607
23721
  typeof window !== "undefined" && dropdownPosition && createPortal4(
23608
23722
  /* @__PURE__ */ jsx66(