@underverse-ui/underverse 0.2.59 → 0.2.61

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
@@ -267,7 +267,7 @@ var Badge = ({
267
267
  }
268
268
  );
269
269
  }
270
- return /* @__PURE__ */ jsxs2("span", { className: cn(baseClasses, "rounded-lg gap-1", sizeStyles[size], className), onClick: handleClick, role: "status", children: [
270
+ return /* @__PURE__ */ jsxs2("span", { className: cn(baseClasses, "rounded-full gap-1", sizeStyles[size], className), onClick: handleClick, role: "status", children: [
271
271
  Icon && /* @__PURE__ */ jsx2(
272
272
  Icon,
273
273
  {
@@ -1957,7 +1957,7 @@ function SmartImage({
1957
1957
  alt,
1958
1958
  className,
1959
1959
  ratioClass,
1960
- roundedClass = "rounded-xl",
1960
+ roundedClass = "rounded-2xl md:rounded-3xl",
1961
1961
  fill = true,
1962
1962
  width,
1963
1963
  height,
@@ -2147,10 +2147,10 @@ var Avatar_default = Avatar;
2147
2147
  import { jsx as jsx13, jsxs as jsxs10 } from "react/jsx-runtime";
2148
2148
  var Skeleton = ({ className, width, height, variant = "rectangular", animation = "pulse", lines = 1 }) => {
2149
2149
  const variantClasses2 = {
2150
- rectangular: "rounded-md",
2150
+ rectangular: "rounded-2xl md:rounded-3xl",
2151
2151
  circular: "rounded-full",
2152
- rounded: "rounded-lg",
2153
- text: "rounded"
2152
+ rounded: "rounded-2xl md:rounded-3xl",
2153
+ text: "rounded-xl"
2154
2154
  };
2155
2155
  const animationClasses = {
2156
2156
  pulse: "animate-pulse",
@@ -2199,9 +2199,9 @@ var SkeletonText = ({ lines = 3, className, width = "100%" }) => {
2199
2199
  };
2200
2200
  var SkeletonCard = ({ showAvatar = true, showImage = false, textLines = 3, className, children }) => {
2201
2201
  if (children) {
2202
- return /* @__PURE__ */ jsx13("div", { className: cn("p-4 space-y-4 rounded-lg bg-card outline-none focus:outline-none", className), children });
2202
+ return /* @__PURE__ */ jsx13("div", { className: cn("p-4 space-y-4 rounded-2xl md:rounded-3xl bg-card outline-none focus:outline-none", className), children });
2203
2203
  }
2204
- return /* @__PURE__ */ jsxs10("div", { className: cn("p-4 space-y-4 rounded-2xl bg-card outline-none focus:outline-none", className), children: [
2204
+ return /* @__PURE__ */ jsxs10("div", { className: cn("p-4 space-y-4 rounded-2xl md:rounded-3xl bg-card outline-none focus:outline-none", className), children: [
2205
2205
  showAvatar && /* @__PURE__ */ jsxs10("div", { className: "flex items-center space-x-3", children: [
2206
2206
  /* @__PURE__ */ jsx13(SkeletonAvatar, {}),
2207
2207
  /* @__PURE__ */ jsxs10("div", { className: "space-y-2", children: [
@@ -2209,7 +2209,7 @@ var SkeletonCard = ({ showAvatar = true, showImage = false, textLines = 3, class
2209
2209
  /* @__PURE__ */ jsx13(Skeleton, { className: "h-3 w-16" })
2210
2210
  ] })
2211
2211
  ] }),
2212
- showImage && /* @__PURE__ */ jsx13(Skeleton, { className: "h-48 w-full rounded-xl" }),
2212
+ showImage && /* @__PURE__ */ jsx13(Skeleton, { className: "h-48 w-full rounded-2xl md:rounded-3xl" }),
2213
2213
  /* @__PURE__ */ jsx13(SkeletonText, { lines: textLines }),
2214
2214
  /* @__PURE__ */ jsxs10("div", { className: "flex space-x-2", children: [
2215
2215
  /* @__PURE__ */ jsx13(SkeletonButton, { size: "sm" }),
@@ -2218,7 +2218,7 @@ var SkeletonCard = ({ showAvatar = true, showImage = false, textLines = 3, class
2218
2218
  ] });
2219
2219
  };
2220
2220
  var SkeletonPost = ({ className }) => {
2221
- return /* @__PURE__ */ jsxs10("div", { className: cn("p-6 space-y-4 rounded-3xl bg-card outline-none focus:outline-none", className), children: [
2221
+ return /* @__PURE__ */ jsxs10("div", { className: cn("p-6 space-y-4 rounded-2xl md:rounded-3xl bg-card outline-none focus:outline-none", className), children: [
2222
2222
  /* @__PURE__ */ jsxs10("div", { className: "flex items-center space-x-3", children: [
2223
2223
  /* @__PURE__ */ jsx13(SkeletonAvatar, { size: "lg" }),
2224
2224
  /* @__PURE__ */ jsxs10("div", { className: "space-y-2", children: [
@@ -2250,7 +2250,7 @@ var SkeletonMessage = ({ own = false, showAvatar = true, className }) => {
2250
2250
  ] });
2251
2251
  };
2252
2252
  var SkeletonList = ({ items = 5, itemHeight = 60, showAvatar = true, className }) => {
2253
- return /* @__PURE__ */ jsx13("div", { className: cn("space-y-3", className), children: Array.from({ length: items }).map((_, index) => /* @__PURE__ */ jsxs10("div", { className: "flex items-center space-x-3 p-3 rounded-xl", children: [
2253
+ return /* @__PURE__ */ jsx13("div", { className: cn("space-y-3", className), children: Array.from({ length: items }).map((_, index) => /* @__PURE__ */ jsxs10("div", { className: "flex items-center space-x-3 p-3 rounded-2xl md:rounded-3xl", children: [
2254
2254
  showAvatar && /* @__PURE__ */ jsx13(SkeletonAvatar, {}),
2255
2255
  /* @__PURE__ */ jsxs10("div", { className: "flex-1 space-y-2", children: [
2256
2256
  /* @__PURE__ */ jsx13(Skeleton, { className: "h-4 w-3/4" }),
@@ -4338,7 +4338,7 @@ var sizeStyles6 = {
4338
4338
  content: "mt-3 p-3"
4339
4339
  },
4340
4340
  md: {
4341
- tab: "py-2 px-4 text-sm",
4341
+ tab: "py-2.5 px-4 text-sm",
4342
4342
  content: "mt-4 p-4"
4343
4343
  },
4344
4344
  lg: {
@@ -4348,33 +4348,33 @@ var sizeStyles6 = {
4348
4348
  };
4349
4349
  var variantStyles5 = {
4350
4350
  default: {
4351
- container: "border-b border-border",
4352
- tab: "border-b-2 border-transparent hover:border-border/60",
4353
- activeTab: "border-primary text-primary",
4351
+ container: "border-b border-border/60 bg-muted/30 p-1 rounded-t-2xl",
4352
+ tab: "rounded-full border-b-2 border-transparent hover:bg-accent/40",
4353
+ activeTab: "border-primary bg-background text-primary shadow-sm",
4354
4354
  inactiveTab: "text-muted-foreground hover:text-foreground"
4355
4355
  },
4356
4356
  pills: {
4357
- container: "bg-muted p-1 rounded-lg",
4358
- tab: "rounded-md transition-all duration-200",
4359
- activeTab: "bg-background text-foreground shadow-sm",
4357
+ container: "bg-muted/50 backdrop-blur-sm p-1.5 rounded-2xl border border-border/40",
4358
+ tab: "rounded-full transition-all duration-200",
4359
+ activeTab: "bg-background text-foreground shadow-md border border-border/50",
4360
4360
  inactiveTab: "text-muted-foreground hover:text-foreground hover:bg-background/50"
4361
4361
  },
4362
4362
  underline: {
4363
- container: "relative border-b border-border",
4364
- tab: "relative transition-colors duration-200 pb-3 border-b-2 border-transparent hover:border-border/60",
4365
- activeTab: "text-primary border-primary font-medium",
4363
+ container: "relative border-b border-border/60",
4364
+ tab: "relative transition-colors duration-200 pb-3 border-b-2 border-transparent hover:border-primary/30",
4365
+ activeTab: "text-primary border-primary font-semibold",
4366
4366
  inactiveTab: "text-muted-foreground hover:text-foreground"
4367
4367
  },
4368
4368
  card: {
4369
- container: "space-y-1",
4369
+ container: "space-y-1.5 bg-muted/20 p-2 rounded-2xl border border-border/30",
4370
4370
  tab: "rounded-xl border border-transparent transition-all duration-200",
4371
- activeTab: "bg-primary text-primary-foreground border-primary",
4372
- inactiveTab: "text-muted-foreground hover:text-foreground hover:bg-accent/50 hover:border-border hover:shadow-sm"
4371
+ activeTab: "bg-primary text-primary-foreground border-primary shadow-md",
4372
+ inactiveTab: "text-muted-foreground hover:text-foreground hover:bg-accent/50 hover:border-border/50"
4373
4373
  },
4374
4374
  "underline-card": {
4375
- container: "border-b border-border bg-card rounded-t-2xl",
4376
- tab: "relative transition-all duration-200 pb-3 px-4 border-b-2 border-transparent hover:border-primary/50 hover:bg-accent/30",
4377
- activeTab: "text-primary border-primary font-medium bg-accent/20",
4375
+ container: "border-b border-border/60 bg-card/80 backdrop-blur-sm rounded-t-2xl p-1",
4376
+ tab: "relative transition-all duration-200 pb-3 px-4 rounded-t-xl border-b-2 border-transparent hover:border-primary/30 hover:bg-accent/30",
4377
+ activeTab: "text-primary border-primary font-semibold bg-accent/30",
4378
4378
  inactiveTab: "text-muted-foreground hover:text-foreground"
4379
4379
  }
4380
4380
  };
@@ -4494,7 +4494,8 @@ var Tabs = ({
4494
4494
  id: `${baseId}-panel-${tabs.findIndex((t) => t.value === active)}`,
4495
4495
  "aria-labelledby": `${baseId}-tab-${tabs.findIndex((t) => t.value === active)}`,
4496
4496
  className: cn(
4497
- "bg-card rounded-xl border border-border shadow-sm text-card-foreground transition-all duration-200",
4497
+ "bg-card rounded-2xl md:rounded-3xl border border-border/60 shadow-sm text-card-foreground transition-all duration-200",
4498
+ "backdrop-blur-sm",
4498
4499
  sizeStyles6[size].content,
4499
4500
  orientation === "vertical" && "flex-1"
4500
4501
  ),
@@ -4657,20 +4658,42 @@ var DropdownMenu = ({
4657
4658
  }
4658
4659
  );
4659
4660
  };
4660
- var DropdownMenuItem = ({ children, onClick, disabled, destructive, className }) => /* @__PURE__ */ jsx24(
4661
+ var DropdownMenuItem = ({
4662
+ children,
4663
+ label,
4664
+ description,
4665
+ icon: Icon,
4666
+ onClick,
4667
+ disabled,
4668
+ destructive,
4669
+ active,
4670
+ shortcut,
4671
+ className
4672
+ }) => /* @__PURE__ */ jsxs21(
4661
4673
  "button",
4662
4674
  {
4663
4675
  onClick,
4664
4676
  disabled,
4677
+ onMouseDown: (e) => e.preventDefault(),
4665
4678
  className: cn(
4666
- "flex w-full items-center gap-2 px-3 py-2 text-sm rounded-lg transition-colors",
4679
+ "flex w-full items-center gap-2 px-3 py-2 text-sm rounded-lg transition-colors group",
4667
4680
  "hover:bg-accent hover:text-accent-foreground",
4668
4681
  "focus:bg-accent focus:text-accent-foreground focus:outline-none",
4669
4682
  "disabled:opacity-50 disabled:cursor-not-allowed",
4670
4683
  destructive && "text-destructive hover:bg-destructive/10 focus:bg-destructive/10",
4684
+ active && "bg-primary/10 text-primary",
4671
4685
  className
4672
4686
  ),
4673
- children
4687
+ children: [
4688
+ Icon && /* @__PURE__ */ jsx24(Icon, { className: cn("w-4 h-4 shrink-0", active ? "text-primary" : "opacity-60 group-hover:opacity-100") }),
4689
+ /* @__PURE__ */ jsxs21("div", { className: "flex-1 text-left", children: [
4690
+ label && /* @__PURE__ */ jsx24("div", { className: cn("font-medium", description && "leading-tight"), children: label }),
4691
+ description && /* @__PURE__ */ jsx24("div", { className: "text-xs text-muted-foreground", children: description }),
4692
+ children
4693
+ ] }),
4694
+ shortcut && /* @__PURE__ */ jsx24("span", { className: "ml-2 text-xs text-muted-foreground opacity-60", children: shortcut }),
4695
+ active && /* @__PURE__ */ jsx24("svg", { className: "w-4 h-4 text-primary shrink-0", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: /* @__PURE__ */ jsx24("polyline", { points: "20 6 9 17 4 12" }) })
4696
+ ]
4674
4697
  }
4675
4698
  );
4676
4699
  var DropdownMenuSeparator = ({ className }) => /* @__PURE__ */ jsx24("div", { className: cn("h-px bg-border my-1", className) });
@@ -4707,7 +4730,7 @@ import { ChevronLeft, ChevronRight as ChevronRight2, ChevronsLeft, ChevronsRight
4707
4730
  // ../../components/ui/Combobox.tsx
4708
4731
  import * as React20 from "react";
4709
4732
  import { useId as useId3 } from "react";
4710
- import { ChevronDown, Search as Search3, SearchX, Check as Check3, X as X8, Loader2 as Loader23 } from "lucide-react";
4733
+ import { ChevronDown, Search as Search3, SearchX, Check as Check3, X as X8 } from "lucide-react";
4711
4734
  import { Fragment as Fragment5, jsx as jsx25, jsxs as jsxs22 } from "react/jsx-runtime";
4712
4735
  var getOptionLabel = (option) => {
4713
4736
  return typeof option === "string" ? option : option.label;
@@ -4715,6 +4738,15 @@ var getOptionLabel = (option) => {
4715
4738
  var getOptionValue = (option) => {
4716
4739
  return typeof option === "string" ? option : option.value;
4717
4740
  };
4741
+ var getOptionIcon = (option) => {
4742
+ return typeof option === "string" ? void 0 : option.icon;
4743
+ };
4744
+ var getOptionDescription = (option) => {
4745
+ return typeof option === "string" ? void 0 : option.description;
4746
+ };
4747
+ var getOptionDisabled = (option) => {
4748
+ return typeof option === "string" ? false : option.disabled ?? false;
4749
+ };
4718
4750
  var findOptionByValue = (options, value) => {
4719
4751
  return options.find((opt) => getOptionValue(opt) === value);
4720
4752
  };
@@ -4729,13 +4761,21 @@ var Combobox = ({
4729
4761
  className,
4730
4762
  disabled = false,
4731
4763
  size = "md",
4764
+ variant = "default",
4732
4765
  allowClear = false,
4733
4766
  usePortal = true,
4734
4767
  label,
4735
4768
  required,
4736
4769
  fontBold = false,
4737
4770
  loading: loading2 = false,
4738
- loadingText = "Loading..."
4771
+ loadingText = "Loading...",
4772
+ showSelectedIcon = true,
4773
+ maxHeight = 280,
4774
+ groupBy,
4775
+ renderOption,
4776
+ renderValue,
4777
+ error,
4778
+ helperText
4739
4779
  }) => {
4740
4780
  const [open, setOpen] = React20.useState(false);
4741
4781
  const [query, setQuery] = React20.useState("");
@@ -4753,6 +4793,7 @@ var Combobox = ({
4753
4793
  );
4754
4794
  const triggerRef = React20.useRef(null);
4755
4795
  const handleSelect = (option) => {
4796
+ if (getOptionDisabled(option)) return;
4756
4797
  const val = getOptionValue(option);
4757
4798
  if (val !== void 0 && val !== null) {
4758
4799
  onChange(val);
@@ -4777,9 +4818,66 @@ var Combobox = ({
4777
4818
  }, [open, enableSearch]);
4778
4819
  const selectedOption = findOptionByValue(options, value);
4779
4820
  const displayValue = selectedOption ? getOptionLabel(selectedOption) : "";
4821
+ const selectedIcon = selectedOption ? getOptionIcon(selectedOption) : void 0;
4822
+ const groupedOptions = React20.useMemo(() => {
4823
+ if (!groupBy) return null;
4824
+ const groups = {};
4825
+ filteredOptions.forEach((opt) => {
4826
+ const group = groupBy(opt);
4827
+ if (!groups[group]) groups[group] = [];
4828
+ groups[group].push(opt);
4829
+ });
4830
+ return groups;
4831
+ }, [filteredOptions, groupBy]);
4832
+ const renderOptionItem = (item, index) => {
4833
+ const itemValue = getOptionValue(item);
4834
+ const itemLabel = getOptionLabel(item);
4835
+ const itemIcon = getOptionIcon(item);
4836
+ const itemDescription = getOptionDescription(item);
4837
+ const itemDisabled = getOptionDisabled(item);
4838
+ const isSelected = itemValue === value;
4839
+ const isEven = index % 2 === 0;
4840
+ return /* @__PURE__ */ jsxs22(
4841
+ "li",
4842
+ {
4843
+ ref: (node) => {
4844
+ listRef.current[index] = node;
4845
+ },
4846
+ id: `combobox-item-${index}`,
4847
+ role: "option",
4848
+ tabIndex: -1,
4849
+ "aria-selected": isSelected,
4850
+ "aria-disabled": itemDisabled,
4851
+ onClick: () => !itemDisabled && handleSelect(item),
4852
+ style: {
4853
+ animationDelay: open ? `${Math.min(index * 15, 150)}ms` : "0ms"
4854
+ },
4855
+ className: cn(
4856
+ "dropdown-item group flex cursor-pointer items-center gap-3 rounded-lg px-3 py-2.5 text-sm",
4857
+ "outline-none focus:outline-none focus-visible:outline-none",
4858
+ "transition-all duration-150",
4859
+ isEven && "bg-muted/40",
4860
+ !itemDisabled && "hover:bg-accent/70 hover:shadow-sm",
4861
+ !itemDisabled && "focus:bg-accent/80 focus:text-accent-foreground",
4862
+ index === activeIndex && !itemDisabled && "bg-accent/60",
4863
+ isSelected && "bg-primary/10 text-primary font-medium",
4864
+ itemDisabled && "opacity-50 cursor-not-allowed"
4865
+ ),
4866
+ children: [
4867
+ itemIcon && /* @__PURE__ */ jsx25("span", { className: cn("shrink-0 w-5 h-5 flex items-center justify-center", isSelected ? "text-primary" : "text-muted-foreground"), children: itemIcon }),
4868
+ renderOption ? /* @__PURE__ */ jsx25("div", { className: "flex-1 min-w-0", children: renderOption(item, isSelected) }) : /* @__PURE__ */ jsxs22("div", { className: "flex-1 min-w-0", children: [
4869
+ /* @__PURE__ */ jsx25("span", { className: "block truncate", children: itemLabel }),
4870
+ itemDescription && /* @__PURE__ */ jsx25("span", { className: "block text-xs text-muted-foreground truncate mt-0.5", children: itemDescription })
4871
+ ] }),
4872
+ isSelected && showSelectedIcon && /* @__PURE__ */ jsx25("span", { className: "shrink-0 ml-auto", children: /* @__PURE__ */ jsx25(Check3, { className: "h-4 w-4 text-primary" }) })
4873
+ ]
4874
+ },
4875
+ `${itemValue}-${index}`
4876
+ );
4877
+ };
4780
4878
  const dropdownBody = /* @__PURE__ */ jsxs22("div", { "data-combobox-dropdown": true, "data-state": open ? "open" : "closed", role: "listbox", id: `${resolvedId}-listbox`, className: "w-full", children: [
4781
- enableSearch && /* @__PURE__ */ jsxs22("div", { className: "relative p-3 border-b border-border/50 bg-muted/20", children: [
4782
- /* @__PURE__ */ jsx25(Search3, { className: "absolute left-6 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground transition-colors" }),
4879
+ enableSearch && /* @__PURE__ */ jsx25("div", { className: "relative p-2.5 border-b border-border/30", children: /* @__PURE__ */ jsxs22("div", { className: "relative", children: [
4880
+ /* @__PURE__ */ jsx25(Search3, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground/60 transition-colors peer-focus:text-primary" }),
4783
4881
  /* @__PURE__ */ jsx25(
4784
4882
  "input",
4785
4883
  {
@@ -4804,7 +4902,7 @@ var Combobox = ({
4804
4902
  });
4805
4903
  } else if (e.key === "Enter") {
4806
4904
  e.preventDefault();
4807
- if (activeIndex !== null && filteredOptions[activeIndex]) {
4905
+ if (activeIndex !== null && filteredOptions[activeIndex] && !getOptionDisabled(filteredOptions[activeIndex])) {
4808
4906
  handleSelect(filteredOptions[activeIndex]);
4809
4907
  }
4810
4908
  } else if (e.key === "Escape") {
@@ -4813,63 +4911,75 @@ var Combobox = ({
4813
4911
  }
4814
4912
  },
4815
4913
  placeholder: searchPlaceholder,
4816
- className: "w-full rounded-full bg-background/50 py-2 pl-8 pr-3 text-sm border-0 focus:outline-none focus:bg-background/80 transition-colors placeholder:text-muted-foreground/60",
4914
+ className: cn(
4915
+ "peer w-full rounded-xl bg-muted/40 py-2.5 pl-9 pr-3 text-sm",
4916
+ "border border-transparent",
4917
+ "focus:outline-none focus:bg-background focus:border-primary/30 focus:ring-2 focus:ring-primary/10",
4918
+ "transition-all duration-200",
4919
+ "placeholder:text-muted-foreground/50"
4920
+ ),
4817
4921
  "aria-autocomplete": "list",
4818
4922
  "aria-activedescendant": activeIndex != null ? `combobox-item-${activeIndex}` : void 0
4819
4923
  }
4924
+ ),
4925
+ query && /* @__PURE__ */ jsx25(
4926
+ "button",
4927
+ {
4928
+ type: "button",
4929
+ onClick: () => setQuery(""),
4930
+ className: "absolute right-3 top-1/2 -translate-y-1/2 p-0.5 rounded-md hover:bg-muted text-muted-foreground hover:text-foreground transition-colors",
4931
+ children: /* @__PURE__ */ jsx25(X8, { className: "h-3.5 w-3.5" })
4932
+ }
4820
4933
  )
4821
- ] }),
4822
- /* @__PURE__ */ jsx25("div", { className: "max-h-64 overflow-y-auto overscroll-contain", children: /* @__PURE__ */ jsx25("ul", { className: "p-1 space-y-1", children: loading2 ? /* @__PURE__ */ jsx25("li", { className: "px-3 py-8 text-center", children: /* @__PURE__ */ jsxs22("div", { className: "flex flex-col items-center gap-2 animate-in fade-in-0 zoom-in-95 duration-300", children: [
4823
- /* @__PURE__ */ jsx25(Loader23, { className: "h-6 w-6 animate-spin text-primary" }),
4824
- /* @__PURE__ */ jsx25("span", { className: "text-sm text-muted-foreground", children: loadingText || "Loading\u2026" })
4825
- ] }) }) : filteredOptions.length > 0 ? filteredOptions.map((item, index) => {
4826
- const itemValue = getOptionValue(item);
4827
- const itemLabel = getOptionLabel(item);
4828
- const isSelected = itemValue === value;
4829
- return /* @__PURE__ */ jsxs22(
4830
- "li",
4934
+ ] }) }),
4935
+ /* @__PURE__ */ jsx25("div", { className: "overflow-y-auto overscroll-contain", style: { maxHeight }, children: /* @__PURE__ */ jsx25("div", { className: "p-1.5", children: loading2 ? /* @__PURE__ */ jsx25("div", { className: "px-3 py-10 text-center", children: /* @__PURE__ */ jsxs22("div", { className: "flex flex-col items-center gap-3 animate-in fade-in-0 zoom-in-95 duration-300", children: [
4936
+ /* @__PURE__ */ jsx25("div", { className: "relative", children: /* @__PURE__ */ jsx25("div", { className: "w-10 h-10 rounded-full border-2 border-primary/20 border-t-primary animate-spin" }) }),
4937
+ /* @__PURE__ */ jsx25("span", { className: "text-sm text-muted-foreground", children: loadingText })
4938
+ ] }) }) : filteredOptions.length > 0 ? groupedOptions ? (
4939
+ // Render grouped options with global index tracking
4940
+ (() => {
4941
+ let globalIndex = 0;
4942
+ return Object.entries(groupedOptions).map(([group, items]) => /* @__PURE__ */ jsxs22("div", { className: cn(globalIndex > 0 && "mt-2 pt-2 border-t border-border/30"), children: [
4943
+ /* @__PURE__ */ jsx25("div", { className: "px-3 py-1.5 text-xs font-semibold text-muted-foreground uppercase tracking-wider", children: group }),
4944
+ /* @__PURE__ */ jsx25("ul", { className: "space-y-0.5", children: items.map((item) => {
4945
+ const index = globalIndex++;
4946
+ return renderOptionItem(item, index);
4947
+ }) })
4948
+ ] }, group));
4949
+ })()
4950
+ ) : (
4951
+ // Render flat options
4952
+ /* @__PURE__ */ jsx25("ul", { className: "space-y-0.5", children: filteredOptions.map((item, index) => renderOptionItem(item, index)) })
4953
+ ) : /* @__PURE__ */ jsx25("div", { className: "px-3 py-10 text-center", children: /* @__PURE__ */ jsxs22("div", { className: "flex flex-col items-center gap-3 animate-in fade-in-0 zoom-in-95 duration-300", children: [
4954
+ /* @__PURE__ */ jsx25("div", { className: "w-12 h-12 rounded-full bg-muted/50 flex items-center justify-center", children: /* @__PURE__ */ jsx25(SearchX, { className: "h-6 w-6 text-muted-foreground/60" }) }),
4955
+ /* @__PURE__ */ jsxs22("div", { className: "space-y-1", children: [
4956
+ /* @__PURE__ */ jsx25("span", { className: "block text-sm font-medium text-foreground", children: emptyText }),
4957
+ query && /* @__PURE__ */ jsx25("span", { className: "block text-xs text-muted-foreground", children: "Try a different search term" })
4958
+ ] }),
4959
+ query && /* @__PURE__ */ jsx25(
4960
+ "button",
4831
4961
  {
4832
- ref: (node) => {
4833
- listRef.current[index] = node;
4834
- },
4835
- id: `combobox-item-${index}`,
4836
- role: "option",
4837
- tabIndex: -1,
4838
- "aria-selected": isSelected,
4839
- onClick: () => handleSelect(item),
4840
- style: {
4841
- animationDelay: open ? `${Math.min(index * 20, 200)}ms` : "0ms"
4842
- },
4843
- className: cn(
4844
- "dropdown-item group flex cursor-pointer items-center justify-between rounded-lg px-2.5 py-1.5 text-sm",
4845
- "outline-none focus:outline-none focus-visible:outline-none",
4846
- "hover:bg-accent hover:text-accent-foreground",
4847
- "focus:bg-accent focus:text-accent-foreground",
4848
- "data-disabled:pointer-events-none data-disabled:opacity-50",
4849
- index === activeIndex && "bg-accent text-accent-foreground",
4850
- isSelected && "bg-accent text-accent-foreground"
4851
- ),
4852
- children: [
4853
- /* @__PURE__ */ jsx25("span", { className: "truncate", children: itemLabel }),
4854
- isSelected && /* @__PURE__ */ jsx25(Check3, { className: "h-4 w-4 text-primary" })
4855
- ]
4856
- },
4857
- `${itemValue}-${index}`
4858
- );
4859
- }) : /* @__PURE__ */ jsx25("li", { className: "px-3 py-8 text-center text-muted-foreground text-sm", children: /* @__PURE__ */ jsxs22("div", { className: "flex flex-col items-center gap-2 animate-in fade-in-0 zoom-in-95 duration-300", children: [
4860
- /* @__PURE__ */ jsx25(SearchX, { className: "h-8 w-8 opacity-40 text-muted-foreground" }),
4861
- /* @__PURE__ */ jsx25("span", { className: "text-sm", children: emptyText }),
4862
- query && /* @__PURE__ */ jsx25("button", { type: "button", onClick: () => setQuery(""), className: "text-xs text-primary hover:underline", children: "Clear" })
4962
+ type: "button",
4963
+ onClick: () => setQuery(""),
4964
+ className: "px-3 py-1.5 text-xs font-medium text-primary bg-primary/10 rounded-full hover:bg-primary/20 transition-colors",
4965
+ children: "Clear search"
4966
+ }
4967
+ )
4863
4968
  ] }) }) }) })
4864
4969
  ] });
4865
4970
  const sizeStyles8 = {
4866
- // Keep consistent with Input size heights
4867
4971
  sm: "h-8 py-1.5 text-sm md:h-7 md:text-xs",
4868
4972
  md: "h-10 py-2 text-sm",
4869
4973
  lg: "h-12 py-3 text-base"
4870
4974
  };
4975
+ const variantStyles6 = {
4976
+ default: "border border-input bg-background hover:bg-accent/5 hover:border-primary/40",
4977
+ outline: "border-2 border-input bg-transparent hover:border-primary/60",
4978
+ ghost: "border-0 bg-transparent hover:bg-accent/50",
4979
+ filled: "border-0 bg-muted/50 hover:bg-muted/80"
4980
+ };
4871
4981
  const labelSize = size === "sm" ? "text-xs" : size === "lg" ? "text-base" : "text-sm";
4872
- const radiusClass = size === "sm" ? "rounded-full" : "rounded-full";
4982
+ const radiusClass = size === "sm" ? "rounded-lg" : "rounded-xl";
4873
4983
  const verticalGap = size === "sm" ? "space-y-1.5" : "space-y-2";
4874
4984
  const triggerButtonBaseProps = {
4875
4985
  ref: triggerRef,
@@ -4879,6 +4989,7 @@ var Combobox = ({
4879
4989
  "aria-haspopup": "listbox",
4880
4990
  "aria-expanded": open,
4881
4991
  "aria-controls": `${resolvedId}-listbox`,
4992
+ "aria-invalid": !!error,
4882
4993
  id: resolvedId,
4883
4994
  "aria-labelledby": labelId,
4884
4995
  onKeyDown: (e) => {
@@ -4892,18 +5003,21 @@ var Combobox = ({
4892
5003
  }
4893
5004
  },
4894
5005
  className: cn(
4895
- "flex w-full items-center justify-between border border-input bg-background px-3",
5006
+ "group flex w-full items-center justify-between px-3 transition-all duration-200",
4896
5007
  radiusClass,
4897
5008
  sizeStyles8[size],
4898
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
5009
+ variantStyles6[variant],
5010
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/30 focus-visible:border-primary",
4899
5011
  "disabled:cursor-not-allowed disabled:opacity-50",
4900
- "hover:bg-accent/5 transition-colors hover:border-primary/40 focus:border-primary",
5012
+ open && "ring-2 ring-primary/20 border-primary",
5013
+ !!error && "border-destructive focus-visible:ring-destructive/30",
4901
5014
  className
4902
5015
  )
4903
5016
  };
4904
5017
  const triggerContents = /* @__PURE__ */ jsxs22(Fragment5, { children: [
4905
- /* @__PURE__ */ jsx25("span", { className: cn("truncate", !displayValue && "text-muted-foreground", fontBold && "font-bold"), children: displayValue || placeholder }),
4906
- /* @__PURE__ */ jsxs22("div", { className: "flex items-center gap-1 ml-2", children: [
5018
+ selectedIcon && /* @__PURE__ */ jsx25("span", { className: "shrink-0 w-5 h-5 mr-2 flex items-center justify-center text-primary", children: selectedIcon }),
5019
+ /* @__PURE__ */ jsx25("span", { className: cn("flex-1 truncate text-left", !displayValue && "text-muted-foreground", fontBold && "font-semibold"), children: renderValue && selectedOption ? renderValue(selectedOption) : displayValue || placeholder }),
5020
+ /* @__PURE__ */ jsxs22("div", { className: "flex items-center gap-1.5 ml-2 shrink-0", children: [
4907
5021
  allowClear && value && !disabled && /* @__PURE__ */ jsx25(
4908
5022
  "div",
4909
5023
  {
@@ -4912,11 +5026,23 @@ var Combobox = ({
4912
5026
  "aria-label": "Clear selection",
4913
5027
  onClick: handleClear,
4914
5028
  onKeyDown: (e) => (e.key === "Enter" || e.key === " ") && handleClear(e),
4915
- className: "opacity-0 group-hover:opacity-100 transition-opacity p-0.5 rounded-md hover:bg-destructive/10 text-muted-foreground hover:text-destructive",
4916
- children: /* @__PURE__ */ jsx25(X8, { className: "h-3 w-3" })
5029
+ className: cn(
5030
+ "opacity-0 group-hover:opacity-100 transition-all duration-200",
5031
+ "p-1 rounded-lg hover:bg-destructive/10 text-muted-foreground hover:text-destructive"
5032
+ ),
5033
+ children: /* @__PURE__ */ jsx25(X8, { className: "h-3.5 w-3.5" })
4917
5034
  }
4918
5035
  ),
4919
- /* @__PURE__ */ jsx25(ChevronDown, { className: cn("h-4 w-4 text-muted-foreground transition-all duration-200", open && "rotate-180 scale-110 text-primary") })
5036
+ /* @__PURE__ */ jsx25(
5037
+ ChevronDown,
5038
+ {
5039
+ className: cn(
5040
+ "h-4 w-4 text-muted-foreground transition-all duration-300 ease-out",
5041
+ open && "rotate-180 text-primary",
5042
+ !open && "group-hover:text-foreground"
5043
+ )
5044
+ }
5045
+ )
4920
5046
  ] })
4921
5047
  ] });
4922
5048
  const triggerButtonForPopover = /* @__PURE__ */ jsx25("button", { ...triggerButtonBaseProps, children: triggerContents });
@@ -4963,7 +5089,18 @@ var Combobox = ({
4963
5089
  }
4964
5090
  ) : /* @__PURE__ */ jsxs22("div", { className: "relative", children: [
4965
5091
  triggerButtonInline,
4966
- open && /* @__PURE__ */ jsx25("div", { className: "absolute left-0 top-full mt-1 z-50 w-full", children: /* @__PURE__ */ jsx25("div", { className: "rounded-2xl border bg-popover text-popover-foreground shadow-md backdrop-blur-sm bg-popover/95 border-border/60", children: dropdownBody }) })
5092
+ open && /* @__PURE__ */ jsx25("div", { className: "absolute left-0 top-full mt-1 z-50 w-full", children: /* @__PURE__ */ jsx25("div", { className: "rounded-2xl border text-popover-foreground shadow-md backdrop-blur-sm bg-popover/95 border-border/60", children: dropdownBody }) })
5093
+ ] }),
5094
+ (helperText || error) && /* @__PURE__ */ jsxs22("p", { className: cn("text-xs transition-colors duration-200 flex items-center gap-1.5", error ? "text-destructive" : "text-muted-foreground"), children: [
5095
+ error && /* @__PURE__ */ jsx25("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: "currentColor", className: "w-3.5 h-3.5 shrink-0", children: /* @__PURE__ */ jsx25(
5096
+ "path",
5097
+ {
5098
+ fillRule: "evenodd",
5099
+ d: "M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z",
5100
+ clipRule: "evenodd"
5101
+ }
5102
+ ) }),
5103
+ error || helperText
4967
5104
  ] })
4968
5105
  ] });
4969
5106
  };
@@ -5136,17 +5273,23 @@ var Pagination = ({
5136
5273
  }
5137
5274
  )
5138
5275
  ] }),
5139
- pageSizeOptions && onPageSizeChange ? /* @__PURE__ */ jsx26(
5140
- Combobox,
5141
- {
5142
- options: pageSizeOptionsStrings,
5143
- value: pageSize?.toString() || "10",
5144
- onChange: handlePageSizeChange,
5145
- size: "sm",
5146
- className: "w-14",
5147
- disabled
5148
- }
5149
- ) : /* @__PURE__ */ jsx26("div", {})
5276
+ pageSizeOptions && onPageSizeChange ? /* @__PURE__ */ jsxs23("div", { className: "flex items-center gap-2", children: [
5277
+ /* @__PURE__ */ jsxs23("span", { className: "text-xs text-muted-foreground/70 hidden sm:inline", children: [
5278
+ t("itemsPerPage"),
5279
+ ":"
5280
+ ] }),
5281
+ /* @__PURE__ */ jsx26(
5282
+ Combobox,
5283
+ {
5284
+ options: pageSizeOptionsStrings,
5285
+ value: pageSize?.toString() || "10",
5286
+ onChange: handlePageSizeChange,
5287
+ size: "sm",
5288
+ className: "w-20 sm:w-24",
5289
+ disabled
5290
+ }
5291
+ )
5292
+ ] }) : /* @__PURE__ */ jsx26("div", {})
5150
5293
  ]
5151
5294
  }
5152
5295
  );
@@ -5372,7 +5515,12 @@ var ScrollArea = forwardRef7(
5372
5515
  "div",
5373
5516
  {
5374
5517
  ref,
5375
- className: cn("relative overflow-hidden", variantClasses[variant], outlined && "rounded-xl border border-border/60", className),
5518
+ className: cn(
5519
+ "relative overflow-hidden rounded-2xl md:rounded-3xl",
5520
+ variantClasses[variant],
5521
+ outlined && "border border-border/60",
5522
+ className
5523
+ ),
5376
5524
  ...props,
5377
5525
  children: /* @__PURE__ */ jsx28("div", { className: cn("h-full w-full overflow-y-auto scroll-area-viewport", contentClassName), children })
5378
5526
  }
@@ -5384,7 +5532,7 @@ ScrollArea.displayName = "ScrollArea";
5384
5532
  // ../../components/ui/DatePicker.tsx
5385
5533
  import * as React23 from "react";
5386
5534
  import { useId as useId4 } from "react";
5387
- import { Calendar, ChevronLeft as ChevronLeft2, ChevronRight as ChevronRight3, X as XIcon, Sparkles } from "lucide-react";
5535
+ import { Calendar, ChevronLeft as ChevronLeft2, ChevronRight as ChevronRight3, X as XIcon, Sparkles as Sparkles2 } from "lucide-react";
5388
5536
 
5389
5537
  // ../../lib/utils/date.ts
5390
5538
  function formatDateShort(date) {
@@ -5605,7 +5753,7 @@ var DatePicker = ({
5605
5753
  "hover:scale-[1.02] active:scale-[0.98] hover:shadow-md hover:shadow-primary/10"
5606
5754
  ),
5607
5755
  children: [
5608
- /* @__PURE__ */ jsx29(Sparkles, { className: "w-3.5 h-3.5" }),
5756
+ /* @__PURE__ */ jsx29(Sparkles2, { className: "w-3.5 h-3.5" }),
5609
5757
  todayLabel || t("today")
5610
5758
  ]
5611
5759
  }
@@ -7292,14 +7440,15 @@ var DateTimePicker = ({
7292
7440
  // ../../components/ui/MultiCombobox.tsx
7293
7441
  import * as React27 from "react";
7294
7442
  import { useId as useId5 } from "react";
7295
- import { ChevronDown as ChevronDown2, Search as Search4, Check as Check5, SearchX as SearchX2, Loader2 as Loader24 } from "lucide-react";
7296
- import { jsx as jsx33, jsxs as jsxs28 } from "react/jsx-runtime";
7443
+ import { ChevronDown as ChevronDown2, Search as Search4, Check as Check5, SearchX as SearchX2, Loader2 as Loader24, X as X11, Sparkles as Sparkles3 } from "lucide-react";
7444
+ import { Fragment as Fragment10, jsx as jsx33, jsxs as jsxs28 } from "react/jsx-runtime";
7297
7445
  var MultiCombobox = ({
7298
7446
  id,
7299
7447
  options,
7300
7448
  value,
7301
7449
  onChange,
7302
- placeholder = "Search...",
7450
+ placeholder = "Select...",
7451
+ searchPlaceholder = "Search...",
7303
7452
  maxSelected,
7304
7453
  disabledOptions = [],
7305
7454
  showTags = true,
@@ -7307,13 +7456,22 @@ var MultiCombobox = ({
7307
7456
  className,
7308
7457
  disabled = false,
7309
7458
  size = "md",
7459
+ variant = "default",
7310
7460
  label,
7311
7461
  title,
7312
7462
  required,
7313
7463
  displayFormat = (option) => option.label,
7314
7464
  loading: loading2 = false,
7315
7465
  loadingText = "Loading...",
7316
- emptyText = "No results found"
7466
+ emptyText = "No results found",
7467
+ showSelectedIcons = true,
7468
+ maxHeight = 280,
7469
+ groupBy,
7470
+ renderOption,
7471
+ renderTag,
7472
+ error,
7473
+ helperText,
7474
+ maxTagsVisible = 3
7317
7475
  }) => {
7318
7476
  const [query, setQuery] = React27.useState("");
7319
7477
  const [open, setOpen] = React27.useState(false);
@@ -7323,16 +7481,31 @@ var MultiCombobox = ({
7323
7481
  const triggerRef = React27.useRef(null);
7324
7482
  useShadCNAnimations();
7325
7483
  const normalizedOptions = React27.useMemo(
7326
- () => options.map((o) => typeof o === "string" ? { value: o, label: o } : { value: o.value, label: o.label }),
7484
+ () => options.map(
7485
+ (o) => typeof o === "string" ? { value: o, label: o } : { value: o.value, label: o.label, icon: o.icon, description: o.description, disabled: o.disabled, group: o.group }
7486
+ ),
7327
7487
  [options]
7328
7488
  );
7329
7489
  const enableSearch = normalizedOptions.length > 10;
7330
7490
  const filtered = React27.useMemo(
7331
- () => enableSearch ? normalizedOptions.filter((opt) => opt.label.toLowerCase().includes(query.toLowerCase())) : normalizedOptions,
7491
+ () => enableSearch ? normalizedOptions.filter(
7492
+ (opt) => opt.label.toLowerCase().includes(query.toLowerCase()) || opt.description?.toLowerCase().includes(query.toLowerCase())
7493
+ ) : normalizedOptions,
7332
7494
  [normalizedOptions, query, enableSearch]
7333
7495
  );
7496
+ const groupedOptions = React27.useMemo(() => {
7497
+ if (!groupBy) return null;
7498
+ const groups = /* @__PURE__ */ new Map();
7499
+ filtered.forEach((opt) => {
7500
+ const group = groupBy(opt);
7501
+ if (!groups.has(group)) groups.set(group, []);
7502
+ groups.get(group).push(opt);
7503
+ });
7504
+ return groups;
7505
+ }, [filtered, groupBy]);
7334
7506
  const toggleSelect = (optionValue) => {
7335
- if (disabledOptions.includes(optionValue)) return;
7507
+ const option = normalizedOptions.find((o) => o.value === optionValue);
7508
+ if (option?.disabled || disabledOptions.includes(optionValue)) return;
7336
7509
  if (value.includes(optionValue)) {
7337
7510
  onChange(value.filter((v) => v !== optionValue));
7338
7511
  } else {
@@ -7374,39 +7547,123 @@ var MultiCombobox = ({
7374
7547
  md: {
7375
7548
  trigger: "h-10 px-4 py-2 text-sm",
7376
7549
  icon: "h-4 w-4",
7377
- search: "px-8 py-2 text-sm",
7550
+ search: "px-10 py-2 text-sm",
7378
7551
  item: "text-sm px-3 py-2",
7379
7552
  tag: "px-2 py-1 text-xs"
7380
7553
  },
7381
7554
  lg: {
7382
7555
  trigger: "h-12 px-5 py-3 text-base",
7383
7556
  icon: "h-5 w-5",
7384
- search: "px-8 py-3 text-base",
7557
+ search: "px-10 py-3 text-base",
7385
7558
  item: "text-base px-3 py-3",
7386
7559
  tag: "px-2.5 py-1 text-sm"
7387
7560
  }
7388
7561
  };
7562
+ const variantStyles6 = {
7563
+ default: "border border-input bg-background shadow-sm hover:border-primary/50",
7564
+ outline: "border-2 border-input bg-transparent hover:border-primary",
7565
+ ghost: "border border-transparent bg-muted/50 hover:bg-muted"
7566
+ };
7389
7567
  const autoId = useId5();
7390
7568
  const resolvedId = id ? String(id) : `multicombobox-${autoId}`;
7391
7569
  const labelId = label ? `${resolvedId}-label` : void 0;
7392
7570
  const labelSize = size === "sm" ? "text-xs" : size === "lg" ? "text-base" : "text-sm";
7393
7571
  const listboxId = `${resolvedId}-listbox`;
7394
- const dropdownBody = /* @__PURE__ */ jsxs28("div", { "data-combobox-dropdown": true, "data-state": open ? "open" : "closed", className: "w-full", children: [
7395
- showClear && value.length > 0 && /* @__PURE__ */ jsx33("div", { className: "px-3 py-2 border-b border-border/60 flex justify-end", children: /* @__PURE__ */ jsx33(
7396
- "button",
7572
+ const renderOptionItem = (item, index) => {
7573
+ const isSelected = value.includes(item.value);
7574
+ const isDisabled = item.disabled || disabledOptions.includes(item.value);
7575
+ const optionIcon = item.icon;
7576
+ const optionDesc = item.description;
7577
+ const isEven = index % 2 === 0;
7578
+ if (renderOption) {
7579
+ return /* @__PURE__ */ jsx33(
7580
+ "li",
7581
+ {
7582
+ ref: (node) => {
7583
+ listRef.current[index] = node;
7584
+ },
7585
+ onClick: (e) => {
7586
+ e.preventDefault();
7587
+ e.stopPropagation();
7588
+ if (!isDisabled) toggleSelect(item.value);
7589
+ inputRef.current?.focus();
7590
+ },
7591
+ style: { animationDelay: open ? `${Math.min(index * 20, 200)}ms` : "0ms" },
7592
+ className: cn("dropdown-item", isEven && "bg-muted/25", isDisabled && "opacity-50 cursor-not-allowed pointer-events-none"),
7593
+ children: renderOption(item, isSelected)
7594
+ },
7595
+ item.value
7596
+ );
7597
+ }
7598
+ return /* @__PURE__ */ jsxs28(
7599
+ "li",
7397
7600
  {
7398
- type: "button",
7601
+ ref: (node) => {
7602
+ listRef.current[index] = node;
7603
+ },
7399
7604
  onClick: (e) => {
7400
7605
  e.preventDefault();
7401
7606
  e.stopPropagation();
7402
- handleClearAll();
7607
+ if (!isDisabled) toggleSelect(item.value);
7608
+ inputRef.current?.focus();
7403
7609
  },
7404
- className: "text-xs text-muted-foreground hover:underline cursor-pointer",
7405
- children: "Clear all"
7406
- }
7407
- ) }),
7408
- enableSearch && /* @__PURE__ */ jsxs28("div", { className: "relative border-b border-border/60", children: [
7409
- /* @__PURE__ */ jsx33(Search4, { className: cn("absolute left-2 top-2.5 text-muted-foreground", sizeStyles8[size].icon) }),
7610
+ style: { animationDelay: open ? `${Math.min(index * 20, 200)}ms` : "0ms" },
7611
+ className: cn(
7612
+ "dropdown-item flex cursor-pointer items-center gap-3 rounded-lg transition-all duration-200",
7613
+ sizeStyles8[size].item,
7614
+ isEven && "bg-muted/25",
7615
+ "hover:bg-accent/70 hover:shadow-sm",
7616
+ index === activeIndex && "bg-accent/60",
7617
+ isSelected && "bg-primary/10 text-primary font-medium",
7618
+ isDisabled && "opacity-40 cursor-not-allowed pointer-events-none"
7619
+ ),
7620
+ children: [
7621
+ /* @__PURE__ */ jsx33(
7622
+ "span",
7623
+ {
7624
+ className: cn(
7625
+ "shrink-0 w-5 h-5 flex items-center justify-center rounded-md border-2 transition-all duration-200",
7626
+ isSelected ? "bg-primary border-primary text-primary-foreground" : "border-muted-foreground/30 bg-transparent"
7627
+ ),
7628
+ children: isSelected && /* @__PURE__ */ jsx33(Check5, { className: "w-3 h-3" })
7629
+ }
7630
+ ),
7631
+ optionIcon && /* @__PURE__ */ jsx33("span", { className: "shrink-0 w-5 h-5 flex items-center justify-center text-muted-foreground", children: optionIcon }),
7632
+ /* @__PURE__ */ jsxs28("div", { className: "flex-1 min-w-0", children: [
7633
+ /* @__PURE__ */ jsx33("div", { className: cn("truncate", isSelected && "font-medium text-primary"), children: item.label }),
7634
+ optionDesc && /* @__PURE__ */ jsx33("div", { className: "text-xs text-muted-foreground truncate mt-0.5", children: optionDesc })
7635
+ ] })
7636
+ ]
7637
+ },
7638
+ item.value
7639
+ );
7640
+ };
7641
+ const dropdownBody = /* @__PURE__ */ jsxs28("div", { "data-combobox-dropdown": true, "data-state": open ? "open" : "closed", className: "w-full", children: [
7642
+ value.length > 0 && /* @__PURE__ */ jsxs28("div", { className: "px-3 py-2 border-b border-border/40 flex items-center justify-between bg-muted/30", children: [
7643
+ /* @__PURE__ */ jsxs28("span", { className: "text-xs font-medium text-muted-foreground", children: [
7644
+ value.length,
7645
+ " selected",
7646
+ maxSelected && ` / ${maxSelected} max`
7647
+ ] }),
7648
+ showClear && /* @__PURE__ */ jsxs28(
7649
+ "button",
7650
+ {
7651
+ type: "button",
7652
+ onClick: (e) => {
7653
+ e.preventDefault();
7654
+ e.stopPropagation();
7655
+ handleClearAll();
7656
+ },
7657
+ className: "text-xs text-muted-foreground hover:text-destructive transition-colors cursor-pointer flex items-center gap-1",
7658
+ children: [
7659
+ /* @__PURE__ */ jsx33(X11, { className: "w-3 h-3" }),
7660
+ "Clear all"
7661
+ ]
7662
+ }
7663
+ )
7664
+ ] }),
7665
+ enableSearch && /* @__PURE__ */ jsxs28("div", { className: "relative border-b border-border/40", children: [
7666
+ /* @__PURE__ */ jsx33(Search4, { className: cn("absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground", sizeStyles8[size].icon) }),
7410
7667
  /* @__PURE__ */ jsx33(
7411
7668
  "input",
7412
7669
  {
@@ -7417,8 +7674,17 @@ var MultiCombobox = ({
7417
7674
  setActiveIndex(null);
7418
7675
  },
7419
7676
  onKeyDown: handleKeyDown,
7420
- placeholder,
7421
- className: cn("w-full rounded-t-xl bg-transparent focus:outline-none cursor-text", sizeStyles8[size].search)
7677
+ placeholder: searchPlaceholder,
7678
+ className: cn("w-full bg-transparent focus:outline-none cursor-text placeholder:text-muted-foreground/60", sizeStyles8[size].search)
7679
+ }
7680
+ ),
7681
+ query && /* @__PURE__ */ jsx33(
7682
+ "button",
7683
+ {
7684
+ type: "button",
7685
+ onClick: () => setQuery(""),
7686
+ className: "absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground transition-colors",
7687
+ children: /* @__PURE__ */ jsx33(X11, { className: "w-4 h-4" })
7422
7688
  }
7423
7689
  )
7424
7690
  ] }),
@@ -7427,50 +7693,41 @@ var MultiCombobox = ({
7427
7693
  {
7428
7694
  id: listboxId,
7429
7695
  role: "listbox",
7430
- className: cn("max-h-60 overflow-y-auto p-1", size === "lg" ? "text-base" : size === "sm" ? "text-xs" : "text-sm"),
7431
- children: loading2 ? /* @__PURE__ */ jsx33("li", { className: "px-3 py-8 text-center", children: /* @__PURE__ */ jsxs28("div", { className: "flex flex-col items-center gap-2 animate-in fade-in-0 zoom-in-95 duration-300", children: [
7432
- /* @__PURE__ */ jsx33(Loader24, { className: "h-6 w-6 animate-spin text-primary" }),
7433
- /* @__PURE__ */ jsx33("span", { className: "text-muted-foreground", children: loadingText })
7434
- ] }) }) : filtered.length ? filtered.map((item, index) => {
7435
- const isSelected = value.includes(item.value);
7436
- const isDisabled = disabledOptions.includes(item.value);
7437
- return /* @__PURE__ */ jsxs28(
7438
- "li",
7439
- {
7440
- ref: (node) => {
7441
- listRef.current[index] = node;
7442
- },
7443
- onClick: (e) => {
7444
- e.preventDefault();
7445
- e.stopPropagation();
7446
- toggleSelect(item.value);
7447
- inputRef.current?.focus();
7448
- },
7449
- style: {
7450
- animationDelay: open ? `${Math.min(index * 20, 200)}ms` : "0ms"
7451
- },
7452
- className: cn(
7453
- "dropdown-item flex cursor-pointer items-center justify-between rounded-lg transition-colors",
7454
- sizeStyles8[size].item,
7455
- "hover:bg-accent hover:text-accent-foreground",
7456
- index === activeIndex && "bg-accent text-accent-foreground",
7457
- isDisabled && "opacity-50 cursor-not-allowed pointer-events-none"
7458
- ),
7459
- children: [
7460
- item.label,
7461
- isSelected && /* @__PURE__ */ jsx33(Check5, { className: sizeStyles8[size].icon })
7462
- ]
7463
- },
7464
- item.value
7465
- );
7466
- }) : /* @__PURE__ */ jsx33("li", { className: cn("px-3 py-8 text-center text-muted-foreground", size === "lg" ? "text-base" : size === "sm" ? "text-xs" : "text-sm"), children: /* @__PURE__ */ jsxs28("div", { className: "flex flex-col items-center gap-2 animate-in fade-in-0 zoom-in-95 duration-300", children: [
7467
- /* @__PURE__ */ jsx33(SearchX2, { className: "h-8 w-8 opacity-40 text-muted-foreground" }),
7468
- /* @__PURE__ */ jsx33("span", { children: emptyText }),
7469
- query && /* @__PURE__ */ jsx33("button", { type: "button", onClick: () => setQuery(""), className: "text-xs text-primary hover:underline", children: "Clear search" })
7696
+ "aria-multiselectable": "true",
7697
+ style: { maxHeight },
7698
+ className: cn("overflow-y-auto p-1.5", size === "lg" ? "text-base" : size === "sm" ? "text-xs" : "text-sm"),
7699
+ children: loading2 ? /* @__PURE__ */ jsx33("li", { className: "px-3 py-8 text-center", children: /* @__PURE__ */ jsxs28("div", { className: "flex flex-col items-center gap-3 animate-in fade-in-0 zoom-in-95 duration-300", children: [
7700
+ /* @__PURE__ */ jsxs28("div", { className: "relative", children: [
7701
+ /* @__PURE__ */ jsx33(Loader24, { className: "h-8 w-8 animate-spin text-primary" }),
7702
+ /* @__PURE__ */ jsx33(Sparkles3, { className: "h-4 w-4 text-primary/60 absolute -top-1 -right-1 animate-pulse" })
7703
+ ] }),
7704
+ /* @__PURE__ */ jsx33("span", { className: "text-muted-foreground font-medium", children: loadingText })
7705
+ ] }) }) : filtered.length ? groupedOptions ? (
7706
+ // Render grouped options
7707
+ Array.from(groupedOptions.entries()).map(([group, items]) => /* @__PURE__ */ jsxs28("li", { className: "mb-2", children: [
7708
+ /* @__PURE__ */ jsx33("div", { className: "px-3 py-1.5 text-xs font-semibold text-muted-foreground uppercase tracking-wider sticky top-0 bg-popover/95 backdrop-blur-sm", children: group }),
7709
+ /* @__PURE__ */ jsx33("ul", { children: items.map((item) => renderOptionItem(item, filtered.indexOf(item))) })
7710
+ ] }, group))
7711
+ ) : (
7712
+ // Render flat options
7713
+ filtered.map((item, index) => renderOptionItem(item, index))
7714
+ ) : /* @__PURE__ */ jsx33("li", { className: cn("px-3 py-8 text-center text-muted-foreground"), children: /* @__PURE__ */ jsxs28("div", { className: "flex flex-col items-center gap-3 animate-in fade-in-0 zoom-in-95 duration-300", children: [
7715
+ /* @__PURE__ */ jsx33(SearchX2, { className: "h-10 w-10 opacity-30 text-muted-foreground" }),
7716
+ /* @__PURE__ */ jsxs28("div", { className: "space-y-1", children: [
7717
+ /* @__PURE__ */ jsx33("span", { className: "font-medium block", children: emptyText }),
7718
+ query && /* @__PURE__ */ jsx33("span", { className: "text-xs opacity-60", children: "Try a different search term" })
7719
+ ] }),
7720
+ query && /* @__PURE__ */ jsxs28("button", { type: "button", onClick: () => setQuery(""), className: "text-xs text-primary hover:underline flex items-center gap-1", children: [
7721
+ /* @__PURE__ */ jsx33(X11, { className: "w-3 h-3" }),
7722
+ "Clear search"
7723
+ ] })
7470
7724
  ] }) })
7471
7725
  }
7472
7726
  )
7473
7727
  ] });
7728
+ const selectedOptions = value.map((v) => normalizedOptions.find((o) => o.value === v)).filter(Boolean);
7729
+ const visibleTags = maxTagsVisible ? selectedOptions.slice(0, maxTagsVisible) : selectedOptions;
7730
+ const hiddenCount = maxTagsVisible ? Math.max(0, selectedOptions.length - maxTagsVisible) : 0;
7474
7731
  const triggerButton = /* @__PURE__ */ jsxs28(
7475
7732
  "button",
7476
7733
  {
@@ -7483,50 +7740,99 @@ var MultiCombobox = ({
7483
7740
  "aria-haspopup": "listbox",
7484
7741
  "aria-expanded": open,
7485
7742
  "aria-controls": listboxId,
7743
+ "aria-invalid": !!error,
7486
7744
  className: cn(
7487
- "flex w-full items-center gap-2 rounded-2xl border border-input bg-background shadow-sm min-h-10",
7745
+ "group flex w-full items-center gap-2 rounded-2xl min-h-10 transition-all duration-200",
7488
7746
  "px-3 py-2",
7489
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
7490
- "disabled:cursor-not-allowed disabled:opacity-50"
7747
+ variantStyles6[variant],
7748
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/30 focus-visible:border-primary",
7749
+ "disabled:cursor-not-allowed disabled:opacity-50",
7750
+ open && "ring-2 ring-primary/20 border-primary",
7751
+ !!error && "border-destructive focus-visible:ring-destructive/30"
7491
7752
  ),
7492
7753
  children: [
7493
- /* @__PURE__ */ jsx33("div", { className: "flex items-center gap-1 flex-wrap min-h-6 flex-1", children: value.length > 0 ? showTags ? value.map((itemValue) => {
7494
- const option = normalizedOptions.find((o) => o.value === itemValue);
7495
- return /* @__PURE__ */ jsxs28("span", { className: "inline-flex items-center gap-1 bg-accent text-accent-foreground rounded-lg px-2 py-1 text-xs", children: [
7496
- /* @__PURE__ */ jsx33("span", { className: "truncate max-w-30", children: option ? displayFormat(option) : itemValue }),
7497
- /* @__PURE__ */ jsx33(
7754
+ /* @__PURE__ */ jsx33("div", { className: "flex items-center gap-1.5 flex-wrap min-h-6 flex-1", children: value.length > 0 ? showTags ? /* @__PURE__ */ jsxs28(Fragment10, { children: [
7755
+ visibleTags.map((option) => {
7756
+ if (renderTag) {
7757
+ return /* @__PURE__ */ jsx33(React27.Fragment, { children: renderTag(option, () => handleRemove(option.value)) }, option.value);
7758
+ }
7759
+ return /* @__PURE__ */ jsxs28(
7498
7760
  "span",
7499
7761
  {
7500
- role: "button",
7501
- tabIndex: 0,
7502
- "aria-label": `Remove ${option ? displayFormat(option) : itemValue}`,
7503
- onClick: (e) => {
7504
- e.preventDefault();
7505
- e.stopPropagation();
7506
- handleRemove(itemValue);
7507
- },
7508
- onKeyDown: (e) => {
7509
- if (e.key === "Enter" || e.key === " ") {
7510
- e.preventDefault();
7511
- e.stopPropagation();
7512
- handleRemove(itemValue);
7513
- }
7514
- },
7515
- className: "hover:text-destructive transition-colors cursor-pointer select-none",
7516
- children: "\xD7"
7517
- }
7518
- )
7519
- ] }, itemValue);
7520
- }) : /* @__PURE__ */ jsxs28("span", { className: "truncate text-sm", children: [
7762
+ className: cn(
7763
+ "inline-flex items-center gap-1.5 bg-primary/10 text-primary rounded-lg transition-all duration-200",
7764
+ "hover:bg-primary/20",
7765
+ sizeStyles8[size].tag
7766
+ ),
7767
+ children: [
7768
+ showSelectedIcons && option.icon && /* @__PURE__ */ jsx33("span", { className: "shrink-0 w-3.5 h-3.5 flex items-center justify-center", children: option.icon }),
7769
+ /* @__PURE__ */ jsx33("span", { className: "truncate max-w-24", children: displayFormat(option) }),
7770
+ /* @__PURE__ */ jsx33(
7771
+ "span",
7772
+ {
7773
+ role: "button",
7774
+ tabIndex: 0,
7775
+ "aria-label": `Remove ${displayFormat(option)}`,
7776
+ onClick: (e) => {
7777
+ e.preventDefault();
7778
+ e.stopPropagation();
7779
+ handleRemove(option.value);
7780
+ },
7781
+ onKeyDown: (e) => {
7782
+ if (e.key === "Enter" || e.key === " ") {
7783
+ e.preventDefault();
7784
+ e.stopPropagation();
7785
+ handleRemove(option.value);
7786
+ }
7787
+ },
7788
+ className: "hover:text-destructive transition-colors cursor-pointer select-none hover:bg-destructive/10 rounded-full p-0.5",
7789
+ children: /* @__PURE__ */ jsx33(X11, { className: "w-3 h-3" })
7790
+ }
7791
+ )
7792
+ ]
7793
+ },
7794
+ option.value
7795
+ );
7796
+ }),
7797
+ hiddenCount > 0 && /* @__PURE__ */ jsxs28("span", { className: cn("inline-flex items-center bg-muted text-muted-foreground rounded-lg", sizeStyles8[size].tag), children: [
7798
+ "+",
7799
+ hiddenCount,
7800
+ " more"
7801
+ ] })
7802
+ ] }) : /* @__PURE__ */ jsxs28("span", { className: "truncate text-sm font-medium", children: [
7521
7803
  value.length,
7804
+ " item",
7805
+ value.length > 1 ? "s" : "",
7522
7806
  " selected"
7523
- ] }) : /* @__PURE__ */ jsx33("span", { className: "text-muted-foreground", children: placeholder || "Select..." }) }),
7524
- /* @__PURE__ */ jsx33(
7525
- ChevronDown2,
7526
- {
7527
- className: cn("opacity-50 transition-all duration-200", sizeStyles8[size].icon, open && "rotate-180 scale-110 text-primary opacity-100")
7528
- }
7529
- )
7807
+ ] }) : /* @__PURE__ */ jsx33("span", { className: "text-muted-foreground", children: placeholder }) }),
7808
+ /* @__PURE__ */ jsxs28("div", { className: "flex items-center gap-1.5 shrink-0", children: [
7809
+ showClear && value.length > 0 && /* @__PURE__ */ jsx33(
7810
+ "div",
7811
+ {
7812
+ role: "button",
7813
+ tabIndex: 0,
7814
+ "aria-label": "Clear all",
7815
+ onClick: (e) => {
7816
+ e.preventDefault();
7817
+ e.stopPropagation();
7818
+ handleClearAll();
7819
+ },
7820
+ onKeyDown: (e) => (e.key === "Enter" || e.key === " ") && handleClearAll(),
7821
+ className: "opacity-0 group-hover:opacity-100 transition-all duration-200 p-1 rounded-lg hover:bg-destructive/10 text-muted-foreground hover:text-destructive",
7822
+ children: /* @__PURE__ */ jsx33(X11, { className: "h-3.5 w-3.5" })
7823
+ }
7824
+ ),
7825
+ /* @__PURE__ */ jsx33(
7826
+ ChevronDown2,
7827
+ {
7828
+ className: cn(
7829
+ "h-4 w-4 text-muted-foreground transition-all duration-300 ease-out",
7830
+ open && "rotate-180 text-primary",
7831
+ !open && "group-hover:text-foreground"
7832
+ )
7833
+ }
7834
+ )
7835
+ ] })
7530
7836
  ]
7531
7837
  }
7532
7838
  );
@@ -7573,7 +7879,18 @@ var MultiCombobox = ({
7573
7879
  contentClassName: "p-0",
7574
7880
  children: dropdownBody
7575
7881
  }
7576
- )
7882
+ ),
7883
+ (helperText || error) && /* @__PURE__ */ jsxs28("p", { className: cn("text-xs transition-colors duration-200 flex items-center gap-1.5", error ? "text-destructive" : "text-muted-foreground"), children: [
7884
+ error && /* @__PURE__ */ jsx33("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: "currentColor", className: "w-3.5 h-3.5 shrink-0", children: /* @__PURE__ */ jsx33(
7885
+ "path",
7886
+ {
7887
+ fillRule: "evenodd",
7888
+ d: "M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z",
7889
+ clipRule: "evenodd"
7890
+ }
7891
+ ) }),
7892
+ error || helperText
7893
+ ] })
7577
7894
  ] });
7578
7895
  };
7579
7896
 
@@ -7984,7 +8301,7 @@ Slider.displayName = "Slider";
7984
8301
  // ../../components/ui/OverlayControls.tsx
7985
8302
  import { Dot, Maximize2, Pause, Play, RotateCcw, RotateCw, Volume2, VolumeX } from "lucide-react";
7986
8303
  import React30 from "react";
7987
- import { Fragment as Fragment9, jsx as jsx36, jsxs as jsxs31 } from "react/jsx-runtime";
8304
+ import { Fragment as Fragment11, jsx as jsx36, jsxs as jsxs31 } from "react/jsx-runtime";
7988
8305
  function OverlayControls({
7989
8306
  mode,
7990
8307
  value,
@@ -8207,7 +8524,7 @@ function OverlayControls({
8207
8524
  const handleSliderMouseLeave = () => {
8208
8525
  setPreviewData(null);
8209
8526
  };
8210
- return /* @__PURE__ */ jsxs31(Fragment9, { children: [
8527
+ return /* @__PURE__ */ jsxs31(Fragment11, { children: [
8211
8528
  keyboardFeedback && /* @__PURE__ */ jsx36(
8212
8529
  "div",
8213
8530
  {
@@ -8417,7 +8734,7 @@ function OverlayControls({
8417
8734
  // ../../components/ui/CategoryTreeSelect.tsx
8418
8735
  import { useState as useState26, useEffect as useEffect16 } from "react";
8419
8736
  import { ChevronRight as ChevronRight5, ChevronDown as ChevronDown3, Check as Check6, FolderTree, Layers } from "lucide-react";
8420
- import { Fragment as Fragment10, jsx as jsx37, jsxs as jsxs32 } from "react/jsx-runtime";
8737
+ import { Fragment as Fragment12, jsx as jsx37, jsxs as jsxs32 } from "react/jsx-runtime";
8421
8738
  var defaultLabels = {
8422
8739
  emptyText: "No categories",
8423
8740
  selectedText: (count) => `${count} selected`
@@ -8500,26 +8817,23 @@ function CategoryTreeSelect(props) {
8500
8817
  const hasChildren = children.length > 0;
8501
8818
  const isExpanded = expandedNodes.has(category.id);
8502
8819
  const isSelected = valueArray.includes(category.id);
8820
+ const isParent = level === 0;
8503
8821
  return /* @__PURE__ */ jsxs32("div", { className: "animate-in fade-in-50 duration-200", style: { animationDelay: `${level * 30}ms` }, children: [
8504
8822
  /* @__PURE__ */ jsxs32(
8505
8823
  "div",
8506
8824
  {
8507
8825
  className: cn(
8508
- "relative flex items-center gap-2.5 px-3 py-2.5 rounded-xl transition-all duration-200",
8826
+ "relative flex items-center gap-2.5 px-3 py-2.5 transition-all duration-200",
8827
+ "border-l-4 border-l-transparent",
8828
+ // Parent level styling
8829
+ isParent && "bg-muted/25 font-medium",
8509
8830
  !viewOnly && "cursor-pointer",
8510
8831
  !viewOnly && !isSelected && "hover:bg-accent/60 hover:shadow-sm",
8511
8832
  // Selected state
8512
- !viewOnly && isSelected && "bg-linear-to-r from-primary/15 via-primary/10 to-primary/5 shadow-sm"
8833
+ !viewOnly && isSelected && "bg-accent/30 border-l-primary shadow-sm"
8513
8834
  ),
8514
8835
  style: { paddingLeft: `${level * 1.25 + 0.75}rem` },
8515
8836
  children: [
8516
- !viewOnly && isSelected && /* @__PURE__ */ jsx37(
8517
- "span",
8518
- {
8519
- "aria-hidden": true,
8520
- className: "absolute left-0 top-2 bottom-2 w-1 rounded-full bg-linear-to-b from-primary to-primary/70 shadow-sm shadow-primary/30"
8521
- }
8522
- ),
8523
8837
  hasChildren ? /* @__PURE__ */ jsx37(
8524
8838
  "button",
8525
8839
  {
@@ -8659,7 +8973,7 @@ function CategoryTreeSelect(props) {
8659
8973
  ]
8660
8974
  }
8661
8975
  ),
8662
- isOpen && !disabled && /* @__PURE__ */ jsxs32(Fragment10, { children: [
8976
+ isOpen && !disabled && /* @__PURE__ */ jsxs32(Fragment12, { children: [
8663
8977
  /* @__PURE__ */ jsx37("div", { className: "fixed inset-0 z-10", onClick: () => setIsOpen(false) }),
8664
8978
  /* @__PURE__ */ jsx37(
8665
8979
  "div",
@@ -8680,7 +8994,7 @@ function CategoryTreeSelect(props) {
8680
8994
 
8681
8995
  // ../../components/ui/ImageUpload.tsx
8682
8996
  import { useState as useState27, useRef as useRef12, useCallback as useCallback9 } from "react";
8683
- import { Upload, X as X11, Image as ImageIcon, Loader2 as Loader25, Check as Check7 } from "lucide-react";
8997
+ import { Upload, X as X12, Image as ImageIcon, Loader2 as Loader25, Check as Check7 } from "lucide-react";
8684
8998
  import { jsx as jsx38, jsxs as jsxs33 } from "react/jsx-runtime";
8685
8999
  function ImageUpload({
8686
9000
  onUpload,
@@ -8820,7 +9134,7 @@ function ImageUpload({
8820
9134
  "div",
8821
9135
  {
8822
9136
  className: cn(
8823
- "relative border-2 border-dashed rounded-xl p-8 text-center transition-all duration-200",
9137
+ "relative border-2 border-dashed rounded-2xl md:rounded-3xl p-8 text-center transition-all duration-200",
8824
9138
  isDragging && !disabled ? "border-primary bg-primary/5 scale-[1.02]" : "border-border hover:border-primary/50",
8825
9139
  disabled && "opacity-50 cursor-not-allowed",
8826
9140
  uploading && "pointer-events-none"
@@ -8829,7 +9143,7 @@ function ImageUpload({
8829
9143
  onDragLeave: handleDragLeave,
8830
9144
  onDrop: handleDrop,
8831
9145
  children: [
8832
- uploading && /* @__PURE__ */ jsx38("div", { className: "absolute inset-0 bg-background/80 flex items-center justify-center rounded-xl", children: /* @__PURE__ */ jsxs33("div", { className: "flex items-center gap-3", children: [
9146
+ uploading && /* @__PURE__ */ jsx38("div", { className: "absolute inset-0 bg-background/80 flex items-center justify-center rounded-2xl md:rounded-3xl", children: /* @__PURE__ */ jsxs33("div", { className: "flex items-center gap-3", children: [
8833
9147
  /* @__PURE__ */ jsx38(Loader25, { className: "w-6 h-6 animate-spin text-primary" }),
8834
9148
  /* @__PURE__ */ jsx38("span", { className: "text-sm font-medium", children: "Uploading..." })
8835
9149
  ] }) }),
@@ -8858,7 +9172,7 @@ function ImageUpload({
8858
9172
  ),
8859
9173
  showPreview && uploadedImages.length > 0 && /* @__PURE__ */ jsxs33("div", { className: "space-y-3", children: [
8860
9174
  /* @__PURE__ */ jsx38("h4", { className: "text-sm font-medium", children: "Uploaded Images" }),
8861
- /* @__PURE__ */ jsx38("div", { className: "grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 gap-4", children: uploadedImages.map((image) => /* @__PURE__ */ jsxs33("div", { className: "relative group bg-card border border-border rounded-xl p-3", children: [
9175
+ /* @__PURE__ */ jsx38("div", { className: "grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 gap-4", children: uploadedImages.map((image) => /* @__PURE__ */ jsxs33("div", { className: "relative group bg-card border border-border rounded-2xl md:rounded-3xl p-3", children: [
8862
9176
  /* @__PURE__ */ jsx38(
8863
9177
  Button_default,
8864
9178
  {
@@ -8866,7 +9180,7 @@ function ImageUpload({
8866
9180
  size: "icon",
8867
9181
  className: "absolute -top-2 -right-2 w-6 h-6 opacity-0 group-hover:opacity-100 transition-opacity z-10",
8868
9182
  onClick: () => handleRemoveImage(image.id),
8869
- children: /* @__PURE__ */ jsx38(X11, { className: "w-3 h-3" })
9183
+ children: /* @__PURE__ */ jsx38(X12, { className: "w-3 h-3" })
8870
9184
  }
8871
9185
  ),
8872
9186
  /* @__PURE__ */ jsxs33("div", { className: cn("mx-auto mb-2 overflow-hidden rounded-lg", previewSizes[previewSize]), children: [
@@ -8903,7 +9217,7 @@ function ImageUpload({
8903
9217
  // ../../components/ui/Carousel.tsx
8904
9218
  import * as React32 from "react";
8905
9219
  import { ChevronLeft as ChevronLeft4, ChevronRight as ChevronRight6 } from "lucide-react";
8906
- import { Fragment as Fragment11, jsx as jsx39, jsxs as jsxs34 } from "react/jsx-runtime";
9220
+ import { Fragment as Fragment13, jsx as jsx39, jsxs as jsxs34 } from "react/jsx-runtime";
8907
9221
  function Carousel({
8908
9222
  children,
8909
9223
  autoScroll = true,
@@ -9065,7 +9379,10 @@ function Carousel({
9065
9379
  "div",
9066
9380
  {
9067
9381
  ref: carouselRef,
9068
- className: cn("relative w-full overflow-hidden focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2 rounded-2xl", className),
9382
+ className: cn(
9383
+ "relative w-full overflow-hidden focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2 rounded-2xl md:rounded-3xl",
9384
+ className
9385
+ ),
9069
9386
  onMouseEnter: () => setIsPaused(true),
9070
9387
  onMouseLeave: () => setIsPaused(false),
9071
9388
  role: "region",
@@ -9112,7 +9429,7 @@ function Carousel({
9112
9429
  ))
9113
9430
  }
9114
9431
  ),
9115
- showArrows && totalSlides > slidesToShow && /* @__PURE__ */ jsxs34(Fragment11, { children: [
9432
+ showArrows && totalSlides > slidesToShow && /* @__PURE__ */ jsxs34(Fragment13, { children: [
9116
9433
  /* @__PURE__ */ jsx39(
9117
9434
  Button_default,
9118
9435
  {
@@ -9474,7 +9791,7 @@ function FallingIcons({
9474
9791
  // ../../components/ui/List.tsx
9475
9792
  import * as React34 from "react";
9476
9793
  import { ChevronRight as ChevronRight7 } from "lucide-react";
9477
- import { Fragment as Fragment12, jsx as jsx41, jsxs as jsxs36 } from "react/jsx-runtime";
9794
+ import { Fragment as Fragment14, jsx as jsx41, jsxs as jsxs36 } from "react/jsx-runtime";
9478
9795
  var SIZE_STYLES2 = {
9479
9796
  xs: { label: "text-xs", desc: "text-[11px]", icon: "h-3.5 w-3.5", avatar: "h-6 w-6" },
9480
9797
  sm: { label: "text-[13px]", desc: "text-[12px]", icon: "h-4 w-4", avatar: "h-8 w-8" },
@@ -9522,12 +9839,12 @@ var ListRoot = React34.forwardRef(
9522
9839
  const hasChildren = childCount > 0;
9523
9840
  const variantClasses2 = {
9524
9841
  plain: "",
9525
- outlined: "rounded-xl md:rounded-2xl bg-card text-card-foreground border border-border shadow-sm",
9526
- soft: "rounded-xl bg-muted/40 border border-border/60",
9527
- bordered: "border border-border rounded-xl",
9528
- card: "rounded-xl bg-card shadow-md border border-border",
9842
+ outlined: "rounded-2xl md:rounded-3xl bg-card text-card-foreground border border-border shadow-sm",
9843
+ soft: "rounded-2xl md:rounded-3xl bg-muted/40 border border-border/60",
9844
+ bordered: "border border-border rounded-2xl md:rounded-3xl",
9845
+ card: "rounded-2xl md:rounded-3xl bg-card shadow-md border border-border",
9529
9846
  flush: "",
9530
- striped: "rounded-xl border border-border overflow-hidden"
9847
+ striped: "rounded-2xl md:rounded-3xl border border-border overflow-hidden"
9531
9848
  };
9532
9849
  if (loading2) {
9533
9850
  return /* @__PURE__ */ jsx41(
@@ -9626,7 +9943,7 @@ var ListItem = React34.forwardRef(
9626
9943
  }
9627
9944
  }
9628
9945
  } : {};
9629
- const inner = /* @__PURE__ */ jsxs36(Fragment12, { children: [
9946
+ const inner = /* @__PURE__ */ jsxs36(Fragment14, { children: [
9630
9947
  /* @__PURE__ */ jsxs36("div", { className: cn("flex items-center gap-3", contentClassName, "group/item relative"), ...headerProps, children: [
9631
9948
  avatar && /* @__PURE__ */ jsx41("div", { className: cn("shrink-0", sz.avatar), children: typeof avatar === "string" ? /* @__PURE__ */ jsx41("img", { src: avatar, alt: "", className: cn("rounded-full object-cover", sz.avatar) }) : avatar }),
9632
9949
  Left && !avatar && /* @__PURE__ */ jsx41("span", { className: cn("text-muted-foreground shrink-0", sz.icon), children: /* @__PURE__ */ jsx41(Left, { className: cn(sz.icon) }) }),
@@ -9671,7 +9988,7 @@ var List_default = List;
9671
9988
  // ../../components/ui/Watermark.tsx
9672
9989
  import * as React35 from "react";
9673
9990
  import { createPortal as createPortal5 } from "react-dom";
9674
- import { Fragment as Fragment13, jsx as jsx42, jsxs as jsxs37 } from "react/jsx-runtime";
9991
+ import { Fragment as Fragment15, jsx as jsx42, jsxs as jsxs37 } from "react/jsx-runtime";
9675
9992
  var PRESETS2 = {
9676
9993
  confidential: { text: "CONFIDENTIAL", color: "rgba(220, 38, 38, 0.15)", rotate: -22, fontSize: 16, fontWeight: "bold" },
9677
9994
  draft: { text: "DRAFT", color: "rgba(59, 130, 246, 0.15)", rotate: -22, fontSize: 18, fontWeight: "bold" },
@@ -9950,7 +10267,7 @@ var Watermark = ({
9950
10267
  }
9951
10268
  );
9952
10269
  if (fullPage) {
9953
- return /* @__PURE__ */ jsxs37(Fragment13, { children: [
10270
+ return /* @__PURE__ */ jsxs37(Fragment15, { children: [
9954
10271
  children,
9955
10272
  typeof window !== "undefined" ? createPortal5(overlay, document.body) : null
9956
10273
  ] });
@@ -10240,7 +10557,7 @@ var Timeline_default = Timeline;
10240
10557
 
10241
10558
  // ../../components/ui/ColorPicker.tsx
10242
10559
  import * as React37 from "react";
10243
- import { Pipette, X as X12, Copy, Check as Check8, Palette, History } from "lucide-react";
10560
+ import { Pipette, X as X13, Copy, Check as Check8, Palette, History } from "lucide-react";
10244
10561
  import { jsx as jsx44, jsxs as jsxs39 } from "react/jsx-runtime";
10245
10562
  var clamp3 = (n, min, max) => Math.max(min, Math.min(max, n));
10246
10563
  function hexToRgb(hex) {
@@ -10609,7 +10926,7 @@ function ColorPicker({
10609
10926
  onClick: clear,
10610
10927
  className: "ml-auto h-9 px-2 rounded-lg border border-border text-xs hover:bg-destructive/10 transition-colors flex items-center gap-1",
10611
10928
  children: [
10612
- /* @__PURE__ */ jsx44(X12, { className: "w-3.5 h-3.5" }),
10929
+ /* @__PURE__ */ jsx44(X13, { className: "w-3.5 h-3.5" }),
10613
10930
  variant === "full" && "Clear"
10614
10931
  ]
10615
10932
  }
@@ -10762,7 +11079,7 @@ function ColorPicker({
10762
11079
 
10763
11080
  // ../../components/ui/Grid.tsx
10764
11081
  import React38, { useId as useId7 } from "react";
10765
- import { Fragment as Fragment14, jsx as jsx45, jsxs as jsxs40 } from "react/jsx-runtime";
11082
+ import { Fragment as Fragment16, jsx as jsx45, jsxs as jsxs40 } from "react/jsx-runtime";
10766
11083
  var BP_MIN = {
10767
11084
  sm: 640,
10768
11085
  md: 768,
@@ -10790,14 +11107,14 @@ function joinAreas(areas) {
10790
11107
  }
10791
11108
  function getVariantClasses(variant = "default", outlined) {
10792
11109
  if (outlined) {
10793
- return "rounded-xl md:rounded-2xl bg-card text-card-foreground border border-border shadow-sm";
11110
+ return "rounded-2xl md:rounded-3xl bg-card text-card-foreground border border-border shadow-sm";
10794
11111
  }
10795
11112
  const variants = {
10796
11113
  default: "",
10797
- bordered: "border border-border rounded-xl",
10798
- card: "rounded-xl md:rounded-2xl bg-card text-card-foreground border border-border shadow-sm",
10799
- flat: "bg-muted/30 rounded-xl",
10800
- glass: "bg-background/80 backdrop-blur-sm border border-border/50 rounded-xl shadow-lg"
11114
+ bordered: "border border-border rounded-2xl md:rounded-3xl",
11115
+ card: "rounded-2xl md:rounded-3xl bg-card text-card-foreground border border-border shadow-sm",
11116
+ flat: "bg-muted/30 rounded-2xl md:rounded-3xl",
11117
+ glass: "bg-background/80 backdrop-blur-sm border border-border/50 rounded-2xl md:rounded-3xl shadow-lg"
10801
11118
  };
10802
11119
  return variants[variant] || "";
10803
11120
  }
@@ -10919,7 +11236,7 @@ var GridItem = React38.forwardRef(
10919
11236
  st.opacity = 0;
10920
11237
  st.animation = `uvGridItemFadeIn 0.5s ease-out forwards`;
10921
11238
  }
10922
- return /* @__PURE__ */ jsxs40(Fragment14, { children: [
11239
+ return /* @__PURE__ */ jsxs40(Fragment16, { children: [
10923
11240
  animationDelay != null && /* @__PURE__ */ jsx45(
10924
11241
  "style",
10925
11242
  {
@@ -10932,7 +11249,11 @@ var GridItem = React38.forwardRef(
10932
11249
  "div",
10933
11250
  {
10934
11251
  ref,
10935
- className: cn(hoverable && "transition-all duration-200 hover:scale-[1.02] hover:shadow-md cursor-pointer", className),
11252
+ className: cn(
11253
+ "rounded-2xl md:rounded-3xl",
11254
+ hoverable && "transition-all duration-200 hover:scale-[1.02] hover:shadow-md cursor-pointer",
11255
+ className
11256
+ ),
10936
11257
  style: st,
10937
11258
  ...rest
10938
11259
  }
@@ -10950,7 +11271,7 @@ import { useMemo as useMemo7, useState as useState34, useRef as useRef14 } from
10950
11271
  // ../../components/ui/ChartTooltip.tsx
10951
11272
  import { useEffect as useEffect20, useState as useState33 } from "react";
10952
11273
  import { createPortal as createPortal6 } from "react-dom";
10953
- import { Fragment as Fragment15, jsx as jsx46, jsxs as jsxs41 } from "react/jsx-runtime";
11274
+ import { Fragment as Fragment17, jsx as jsx46, jsxs as jsxs41 } from "react/jsx-runtime";
10954
11275
  function ChartTooltip({ x, y, visible, label, value, color, secondaryLabel, secondaryValue, items, containerRef }) {
10955
11276
  const [isMounted, setIsMounted] = useState33(false);
10956
11277
  const [position, setPosition] = useState33(null);
@@ -10997,7 +11318,7 @@ function ChartTooltip({ x, y, visible, label, value, color, secondaryLabel, seco
10997
11318
  ":"
10998
11319
  ] }),
10999
11320
  /* @__PURE__ */ jsx46("span", { className: "font-semibold ml-auto", children: item.value })
11000
- ] }, i)) }) : /* @__PURE__ */ jsxs41(Fragment15, { children: [
11321
+ ] }, i)) }) : /* @__PURE__ */ jsxs41(Fragment17, { children: [
11001
11322
  /* @__PURE__ */ jsxs41("div", { className: "flex items-center gap-2", children: [
11002
11323
  color && /* @__PURE__ */ jsx46("div", { className: "w-2 h-2 rounded-full shrink-0", style: { backgroundColor: color } }),
11003
11324
  /* @__PURE__ */ jsx46("span", { className: "font-semibold", children: value })
@@ -11024,7 +11345,7 @@ function ChartTooltip({ x, y, visible, label, value, color, secondaryLabel, seco
11024
11345
  }
11025
11346
 
11026
11347
  // ../../components/ui/LineChart.tsx
11027
- import { Fragment as Fragment16, jsx as jsx47, jsxs as jsxs42 } from "react/jsx-runtime";
11348
+ import { Fragment as Fragment18, jsx as jsx47, jsxs as jsxs42 } from "react/jsx-runtime";
11028
11349
  function LineChart({
11029
11350
  data,
11030
11351
  width = 400,
@@ -11089,7 +11410,7 @@ function LineChart({
11089
11410
  }
11090
11411
  return lines;
11091
11412
  }, [minValue, maxValue, chartHeight, padding.top]);
11092
- return /* @__PURE__ */ jsxs42(Fragment16, { children: [
11413
+ return /* @__PURE__ */ jsxs42(Fragment18, { children: [
11093
11414
  /* @__PURE__ */ jsxs42("svg", { ref: svgRef, width, height, className: `overflow-visible ${className}`, style: { fontFamily: "inherit" }, children: [
11094
11415
  showGrid && /* @__PURE__ */ jsx47("g", { className: "text-muted-foreground/20", children: gridLines.map((line, i) => /* @__PURE__ */ jsxs42("g", { children: [
11095
11416
  /* @__PURE__ */ jsx47("line", { x1: padding.left, y1: line.y, x2: width - padding.right, y2: line.y, stroke: "currentColor", strokeDasharray: "4 4" }),
@@ -11198,7 +11519,7 @@ function LineChart({
11198
11519
 
11199
11520
  // ../../components/ui/BarChart.tsx
11200
11521
  import { useMemo as useMemo8, useState as useState35, useRef as useRef15 } from "react";
11201
- import { Fragment as Fragment17, jsx as jsx48, jsxs as jsxs43 } from "react/jsx-runtime";
11522
+ import { Fragment as Fragment19, jsx as jsx48, jsxs as jsxs43 } from "react/jsx-runtime";
11202
11523
  function BarChart({
11203
11524
  data,
11204
11525
  width = 400,
@@ -11267,12 +11588,12 @@ function BarChart({
11267
11588
  }
11268
11589
  return { maxValue: max, bars: barsData, gridLines: lines };
11269
11590
  }, [data, chartWidth, chartHeight, horizontal, barGap, padding, width, height]);
11270
- return /* @__PURE__ */ jsxs43(Fragment17, { children: [
11591
+ return /* @__PURE__ */ jsxs43(Fragment19, { children: [
11271
11592
  /* @__PURE__ */ jsxs43("svg", { ref: svgRef, width, height, className: `overflow-visible ${className}`, style: { fontFamily: "inherit" }, children: [
11272
- showGrid && /* @__PURE__ */ jsx48("g", { className: "text-muted-foreground/20", children: gridLines.map((line, i) => /* @__PURE__ */ jsx48("g", { children: horizontal ? /* @__PURE__ */ jsxs43(Fragment17, { children: [
11593
+ showGrid && /* @__PURE__ */ jsx48("g", { className: "text-muted-foreground/20", children: gridLines.map((line, i) => /* @__PURE__ */ jsx48("g", { children: horizontal ? /* @__PURE__ */ jsxs43(Fragment19, { children: [
11273
11594
  /* @__PURE__ */ jsx48("line", { x1: line.x, y1: line.y1, x2: line.x, y2: line.y2, stroke: "currentColor", strokeDasharray: "4 4" }),
11274
11595
  /* @__PURE__ */ jsx48("text", { x: line.x, y: height - 8, textAnchor: "middle", fontSize: "10", className: "text-muted-foreground", fill: "currentColor", children: line.value.toFixed(0) })
11275
- ] }) : /* @__PURE__ */ jsxs43(Fragment17, { children: [
11596
+ ] }) : /* @__PURE__ */ jsxs43(Fragment19, { children: [
11276
11597
  /* @__PURE__ */ jsx48("line", { x1: line.x1, y1: line.y, x2: line.x2, y2: line.y, stroke: "currentColor", strokeDasharray: "4 4" }),
11277
11598
  /* @__PURE__ */ jsx48("text", { x: padding.left - 8, y: line.y + 4, textAnchor: "end", fontSize: "10", className: "text-muted-foreground", fill: "currentColor", children: line.value.toFixed(0) })
11278
11599
  ] }) }, i)) }),
@@ -12310,16 +12631,16 @@ function GaugeChart({
12310
12631
 
12311
12632
  // ../../components/ui/ClientOnly.tsx
12312
12633
  import { useEffect as useEffect21, useState as useState39 } from "react";
12313
- import { Fragment as Fragment18, jsx as jsx54 } from "react/jsx-runtime";
12634
+ import { Fragment as Fragment20, jsx as jsx54 } from "react/jsx-runtime";
12314
12635
  function ClientOnly({ children, fallback = null }) {
12315
12636
  const [hasMounted, setHasMounted] = useState39(false);
12316
12637
  useEffect21(() => {
12317
12638
  setHasMounted(true);
12318
12639
  }, []);
12319
12640
  if (!hasMounted) {
12320
- return /* @__PURE__ */ jsx54(Fragment18, { children: fallback });
12641
+ return /* @__PURE__ */ jsx54(Fragment20, { children: fallback });
12321
12642
  }
12322
- return /* @__PURE__ */ jsx54(Fragment18, { children });
12643
+ return /* @__PURE__ */ jsx54(Fragment20, { children });
12323
12644
  }
12324
12645
 
12325
12646
  // ../../components/ui/Loading.tsx
@@ -12465,7 +12786,7 @@ TableCaption.displayName = "TableCaption";
12465
12786
  // ../../components/ui/DataTable.tsx
12466
12787
  import { Filter as FilterIcon } from "lucide-react";
12467
12788
  import React48 from "react";
12468
- import { Fragment as Fragment19, jsx as jsx57, jsxs as jsxs51 } from "react/jsx-runtime";
12789
+ import { Fragment as Fragment21, jsx as jsx57, jsxs as jsxs51 } from "react/jsx-runtime";
12469
12790
  function useDebounced(value, delay = 300) {
12470
12791
  const [debounced, setDebounced] = React48.useState(value);
12471
12792
  React48.useEffect(() => {
@@ -12723,10 +13044,10 @@ function DataTable({
12723
13044
  isCenterAlign && "justify-center",
12724
13045
  !isRightAlign && !isCenterAlign && "justify-between"
12725
13046
  ),
12726
- children: isRightAlign ? /* @__PURE__ */ jsxs51(Fragment19, { children: [
13047
+ children: isRightAlign ? /* @__PURE__ */ jsxs51(Fragment21, { children: [
12727
13048
  filterContent,
12728
13049
  titleContent
12729
- ] }) : /* @__PURE__ */ jsxs51(Fragment19, { children: [
13050
+ ] }) : /* @__PURE__ */ jsxs51(Fragment21, { children: [
12730
13051
  titleContent,
12731
13052
  filterContent
12732
13053
  ] })
@@ -12908,7 +13229,17 @@ function DataTable({
12908
13229
  totalItems
12909
13230
  ] }),
12910
13231
  /* @__PURE__ */ jsxs51("div", { className: "flex items-center gap-0.5", children: [
12911
- /* @__PURE__ */ jsx57(Button_default, { variant: "ghost", size: "sm", className: "h-7 w-7 p-0", onClick: () => setCurPage(Math.max(1, curPage - 1)), disabled: curPage === 1, children: /* @__PURE__ */ jsx57("svg", { className: "h-4 w-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx57("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" }) }) }),
13232
+ /* @__PURE__ */ jsx57(
13233
+ Button_default,
13234
+ {
13235
+ variant: "ghost",
13236
+ size: "sm",
13237
+ className: "h-7 w-7 p-0 rounded-full",
13238
+ onClick: () => setCurPage(Math.max(1, curPage - 1)),
13239
+ disabled: curPage === 1,
13240
+ children: /* @__PURE__ */ jsx57("svg", { className: "h-4 w-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx57("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" }) })
13241
+ }
13242
+ ),
12912
13243
  (() => {
12913
13244
  const totalPages = Math.ceil(totalItems / curPageSize);
12914
13245
  const pages = [];
@@ -12929,7 +13260,7 @@ function DataTable({
12929
13260
  {
12930
13261
  onClick: () => setCurPage(p),
12931
13262
  className: cn(
12932
- "h-7 min-w-7 px-1.5 rounded-lg text-xs font-medium transition-colors",
13263
+ "h-7 min-w-7 px-2 rounded-full text-xs font-medium transition-colors",
12933
13264
  curPage === p ? "bg-primary text-primary-foreground" : "hover:bg-accent hover:text-accent-foreground"
12934
13265
  ),
12935
13266
  children: p
@@ -12943,7 +13274,7 @@ function DataTable({
12943
13274
  {
12944
13275
  variant: "ghost",
12945
13276
  size: "sm",
12946
- className: "h-7 w-7 p-0",
13277
+ className: "h-7 w-7 p-0 rounded-full",
12947
13278
  onClick: () => setCurPage(Math.min(Math.ceil(totalItems / curPageSize), curPage + 1)),
12948
13279
  disabled: curPage === Math.ceil(totalItems / curPageSize),
12949
13280
  children: /* @__PURE__ */ jsx57("svg", { className: "h-4 w-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx57("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" }) })
@@ -12960,7 +13291,7 @@ function DataTable({
12960
13291
  setCurPageSize(Number(v));
12961
13292
  },
12962
13293
  size: "sm",
12963
- className: "w-14 h-7"
13294
+ className: "w-20"
12964
13295
  }
12965
13296
  )
12966
13297
  ] })
@@ -13283,7 +13614,7 @@ function AccessDenied({
13283
13614
  import { Moon as Moon2, Sun as Sun2, Monitor } from "lucide-react";
13284
13615
  import { useEffect as useEffect23, useRef as useRef19, useState as useState40 } from "react";
13285
13616
  import { createPortal as createPortal7 } from "react-dom";
13286
- import { Fragment as Fragment20, jsx as jsx62, jsxs as jsxs56 } from "react/jsx-runtime";
13617
+ import { Fragment as Fragment22, jsx as jsx62, jsxs as jsxs56 } from "react/jsx-runtime";
13287
13618
  function ThemeToggleHeadless({
13288
13619
  theme,
13289
13620
  onChange,
@@ -13334,7 +13665,7 @@ function ThemeToggleHeadless({
13334
13665
  children: /* @__PURE__ */ jsx62(CurrentIcon, { className: "h-5 w-5" })
13335
13666
  }
13336
13667
  ),
13337
- isOpen && /* @__PURE__ */ jsxs56(Fragment20, { children: [
13668
+ isOpen && /* @__PURE__ */ jsxs56(Fragment22, { children: [
13338
13669
  typeof window !== "undefined" && createPortal7(/* @__PURE__ */ jsx62("div", { className: "fixed inset-0 z-9998", onClick: () => setIsOpen(false) }), document.body),
13339
13670
  typeof window !== "undefined" && dropdownPosition && createPortal7(
13340
13671
  /* @__PURE__ */ jsx62(
@@ -13386,7 +13717,7 @@ function ThemeToggleHeadless({
13386
13717
  import { useRef as useRef20, useState as useState41 } from "react";
13387
13718
  import { createPortal as createPortal8 } from "react-dom";
13388
13719
  import { Globe } from "lucide-react";
13389
- import { Fragment as Fragment21, jsx as jsx63, jsxs as jsxs57 } from "react/jsx-runtime";
13720
+ import { Fragment as Fragment23, jsx as jsx63, jsxs as jsxs57 } from "react/jsx-runtime";
13390
13721
  function LanguageSwitcherHeadless({
13391
13722
  locales,
13392
13723
  currentLocale,
@@ -13431,7 +13762,7 @@ function LanguageSwitcherHeadless({
13431
13762
  children: /* @__PURE__ */ jsx63(Globe, { className: "h-5 w-5" })
13432
13763
  }
13433
13764
  ),
13434
- isOpen && /* @__PURE__ */ jsxs57(Fragment21, { children: [
13765
+ isOpen && /* @__PURE__ */ jsxs57(Fragment23, { children: [
13435
13766
  typeof window !== "undefined" && createPortal8(/* @__PURE__ */ jsx63("div", { className: "fixed inset-0 z-9998", onClick: () => setIsOpen(false) }), document.body),
13436
13767
  typeof window !== "undefined" && dropdownPosition && createPortal8(
13437
13768
  /* @__PURE__ */ jsx63(