@underverse-ui/underverse 0.1.13 → 0.1.15

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
@@ -1440,6 +1440,148 @@ var Skeleton = ({
1440
1440
  }
1441
1441
  );
1442
1442
  };
1443
+ var SkeletonAvatar = ({
1444
+ size = "md",
1445
+ className
1446
+ }) => {
1447
+ const sizeClasses2 = {
1448
+ sm: "w-8 h-8",
1449
+ md: "w-10 h-10",
1450
+ lg: "w-12 h-12"
1451
+ };
1452
+ return /* @__PURE__ */ jsx10(
1453
+ Skeleton,
1454
+ {
1455
+ variant: "circular",
1456
+ className: cn(sizeClasses2[size], className)
1457
+ }
1458
+ );
1459
+ };
1460
+ var SkeletonButton = ({
1461
+ size = "md",
1462
+ className
1463
+ }) => {
1464
+ const sizeClasses2 = {
1465
+ sm: "h-8 w-20",
1466
+ md: "h-10 w-24",
1467
+ lg: "h-12 w-28"
1468
+ };
1469
+ return /* @__PURE__ */ jsx10(
1470
+ Skeleton,
1471
+ {
1472
+ variant: "rounded",
1473
+ className: cn(sizeClasses2[size], className)
1474
+ }
1475
+ );
1476
+ };
1477
+ var SkeletonText = ({
1478
+ lines = 3,
1479
+ className,
1480
+ width = "100%"
1481
+ }) => {
1482
+ return /* @__PURE__ */ jsx10(
1483
+ Skeleton,
1484
+ {
1485
+ variant: "text",
1486
+ lines,
1487
+ width,
1488
+ className
1489
+ }
1490
+ );
1491
+ };
1492
+ var SkeletonCard = ({
1493
+ showAvatar = true,
1494
+ showImage = false,
1495
+ textLines = 3,
1496
+ className
1497
+ }) => {
1498
+ return /* @__PURE__ */ jsxs9("div", { className: cn("p-4 space-y-4 rounded-lg border bg-card", className), children: [
1499
+ showAvatar && /* @__PURE__ */ jsxs9("div", { className: "flex items-center space-x-3", children: [
1500
+ /* @__PURE__ */ jsx10(SkeletonAvatar, {}),
1501
+ /* @__PURE__ */ jsxs9("div", { className: "space-y-2", children: [
1502
+ /* @__PURE__ */ jsx10(Skeleton, { className: "h-4 w-24" }),
1503
+ /* @__PURE__ */ jsx10(Skeleton, { className: "h-3 w-16" })
1504
+ ] })
1505
+ ] }),
1506
+ showImage && /* @__PURE__ */ jsx10(Skeleton, { className: "h-48 w-full rounded-md" }),
1507
+ /* @__PURE__ */ jsx10(SkeletonText, { lines: textLines }),
1508
+ /* @__PURE__ */ jsxs9("div", { className: "flex space-x-2", children: [
1509
+ /* @__PURE__ */ jsx10(SkeletonButton, { size: "sm" }),
1510
+ /* @__PURE__ */ jsx10(SkeletonButton, { size: "sm" })
1511
+ ] })
1512
+ ] });
1513
+ };
1514
+ var SkeletonPost = ({ className }) => {
1515
+ return /* @__PURE__ */ jsxs9("div", { className: cn("p-6 space-y-4 rounded-xl border bg-card", className), children: [
1516
+ /* @__PURE__ */ jsxs9("div", { className: "flex items-center space-x-3", children: [
1517
+ /* @__PURE__ */ jsx10(SkeletonAvatar, { size: "lg" }),
1518
+ /* @__PURE__ */ jsxs9("div", { className: "space-y-2", children: [
1519
+ /* @__PURE__ */ jsx10(Skeleton, { className: "h-4 w-32" }),
1520
+ /* @__PURE__ */ jsx10(Skeleton, { className: "h-3 w-20" })
1521
+ ] })
1522
+ ] }),
1523
+ /* @__PURE__ */ jsx10(SkeletonText, { lines: 2 }),
1524
+ /* @__PURE__ */ jsx10(Skeleton, { className: "h-64 w-full rounded-lg" }),
1525
+ /* @__PURE__ */ jsxs9("div", { className: "flex items-center space-x-4", children: [
1526
+ /* @__PURE__ */ jsx10(Skeleton, { className: "h-3 w-16" }),
1527
+ /* @__PURE__ */ jsx10(Skeleton, { className: "h-3 w-20" }),
1528
+ /* @__PURE__ */ jsx10(Skeleton, { className: "h-3 w-12" })
1529
+ ] }),
1530
+ /* @__PURE__ */ jsx10("div", { className: "flex items-center justify-between pt-2 border-t border-border", children: /* @__PURE__ */ jsxs9("div", { className: "flex space-x-4", children: [
1531
+ /* @__PURE__ */ jsx10(Skeleton, { className: "h-8 w-16" }),
1532
+ /* @__PURE__ */ jsx10(Skeleton, { className: "h-8 w-20" }),
1533
+ /* @__PURE__ */ jsx10(Skeleton, { className: "h-8 w-16" })
1534
+ ] }) })
1535
+ ] });
1536
+ };
1537
+ var SkeletonMessage = ({
1538
+ own = false,
1539
+ showAvatar = true,
1540
+ className
1541
+ }) => {
1542
+ return /* @__PURE__ */ jsxs9("div", { className: cn(
1543
+ "flex items-end space-x-2",
1544
+ own && "flex-row-reverse space-x-reverse",
1545
+ className
1546
+ ), children: [
1547
+ showAvatar && !own && /* @__PURE__ */ jsx10(SkeletonAvatar, { size: "sm" }),
1548
+ /* @__PURE__ */ jsxs9("div", { className: cn(
1549
+ "max-w-xs space-y-1",
1550
+ own ? "items-end" : "items-start"
1551
+ ), children: [
1552
+ /* @__PURE__ */ jsx10(Skeleton, { className: cn(
1553
+ "h-10 rounded-2xl",
1554
+ own ? "w-32 bg-primary/20" : "w-40 bg-muted"
1555
+ ) }),
1556
+ /* @__PURE__ */ jsx10(Skeleton, { className: "h-3 w-12" })
1557
+ ] })
1558
+ ] });
1559
+ };
1560
+ var SkeletonList = ({
1561
+ items = 5,
1562
+ itemHeight = 60,
1563
+ showAvatar = true,
1564
+ className
1565
+ }) => {
1566
+ return /* @__PURE__ */ jsx10("div", { className: cn("space-y-3", className), children: Array.from({ length: items }).map((_, index) => /* @__PURE__ */ jsxs9("div", { className: "flex items-center space-x-3 p-3 rounded-lg", children: [
1567
+ showAvatar && /* @__PURE__ */ jsx10(SkeletonAvatar, {}),
1568
+ /* @__PURE__ */ jsxs9("div", { className: "flex-1 space-y-2", children: [
1569
+ /* @__PURE__ */ jsx10(Skeleton, { className: "h-4 w-3/4" }),
1570
+ /* @__PURE__ */ jsx10(Skeleton, { className: "h-3 w-1/2" })
1571
+ ] }),
1572
+ /* @__PURE__ */ jsx10(Skeleton, { className: "h-6 w-16" })
1573
+ ] }, index)) });
1574
+ };
1575
+ var SkeletonTable = ({
1576
+ rows = 5,
1577
+ columns = 4,
1578
+ className
1579
+ }) => {
1580
+ return /* @__PURE__ */ jsxs9("div", { className: cn("space-y-3", className), children: [
1581
+ /* @__PURE__ */ jsx10("div", { className: "flex space-x-4 p-3 border-b border-border", children: Array.from({ length: columns }).map((_, index) => /* @__PURE__ */ jsx10(Skeleton, { className: "h-4 flex-1" }, index)) }),
1582
+ Array.from({ length: rows }).map((_, rowIndex) => /* @__PURE__ */ jsx10("div", { className: "flex space-x-4 p-3", children: Array.from({ length: columns }).map((_2, colIndex) => /* @__PURE__ */ jsx10(Skeleton, { className: "h-4 flex-1" }, colIndex)) }, rowIndex))
1583
+ ] });
1584
+ };
1443
1585
  var Skeleton_default = Skeleton;
1444
1586
 
1445
1587
  // ../../components/ui/Progress.tsx
@@ -1538,7 +1680,356 @@ var Progress = ({
1538
1680
  )
1539
1681
  ] });
1540
1682
  };
1541
- var Progress_default = Progress;
1683
+ var CircularProgress = ({
1684
+ value,
1685
+ max = 100,
1686
+ size = 64,
1687
+ strokeWidth = 4,
1688
+ className,
1689
+ variant = "primary",
1690
+ showValue = false,
1691
+ children,
1692
+ indeterminate = false,
1693
+ status = "normal",
1694
+ trackColor = "stroke-muted/20"
1695
+ }) => {
1696
+ const percentage = Math.min(Math.max(value / max * 100, 0), 100);
1697
+ const radius = (size - strokeWidth) / 2;
1698
+ const circumference = radius * Math.PI * 2;
1699
+ const offset = circumference - percentage / 100 * circumference;
1700
+ const isComplete = status === "complete" || percentage >= 100;
1701
+ const isError = status === "error";
1702
+ const variantColors = {
1703
+ default: "stroke-muted-foreground",
1704
+ primary: "stroke-primary",
1705
+ success: "stroke-success",
1706
+ warning: "stroke-warning",
1707
+ danger: "stroke-destructive",
1708
+ info: "stroke-info"
1709
+ };
1710
+ const getContentIcon = () => {
1711
+ if (isComplete) return /* @__PURE__ */ jsx11(Check2, { className: "w-5 h-5 text-success" });
1712
+ if (isError) return /* @__PURE__ */ jsx11(X2, { className: "w-5 h-5 text-destructive" });
1713
+ return null;
1714
+ };
1715
+ return /* @__PURE__ */ jsxs10(
1716
+ "div",
1717
+ {
1718
+ className: cn("relative inline-flex items-center justify-center", className),
1719
+ role: "progressbar",
1720
+ "aria-valuemin": 0,
1721
+ "aria-valuemax": indeterminate ? void 0 : max,
1722
+ "aria-valuenow": indeterminate ? void 0 : Math.round(percentage),
1723
+ "aria-label": children ? void 0 : "Progress",
1724
+ children: [
1725
+ /* @__PURE__ */ jsxs10(
1726
+ "svg",
1727
+ {
1728
+ width: size,
1729
+ height: size,
1730
+ className: cn(
1731
+ "transform -rotate-90",
1732
+ indeterminate && "animate-spin"
1733
+ ),
1734
+ style: { animationDuration: indeterminate ? "2s" : void 0 },
1735
+ children: [
1736
+ /* @__PURE__ */ jsx11(
1737
+ "circle",
1738
+ {
1739
+ cx: size / 2,
1740
+ cy: size / 2,
1741
+ r: radius,
1742
+ stroke: "currentColor",
1743
+ strokeWidth,
1744
+ fill: "transparent",
1745
+ className: trackColor
1746
+ }
1747
+ ),
1748
+ /* @__PURE__ */ jsx11(
1749
+ "circle",
1750
+ {
1751
+ cx: size / 2,
1752
+ cy: size / 2,
1753
+ r: radius,
1754
+ strokeWidth,
1755
+ fill: "transparent",
1756
+ strokeDasharray: circumference,
1757
+ strokeDashoffset: indeterminate ? circumference * 0.25 : offset,
1758
+ className: cn(
1759
+ "transition-all duration-700 ease-out",
1760
+ isComplete ? "stroke-success" : isError ? "stroke-destructive" : variantColors[variant],
1761
+ "drop-shadow-sm"
1762
+ ),
1763
+ strokeLinecap: "round",
1764
+ style: {
1765
+ filter: `drop-shadow(0 0 4px ${isComplete ? "hsl(var(--success) / 0.3)" : isError ? "hsl(var(--destructive) / 0.3)" : "hsl(var(--primary) / 0.2)"})`
1766
+ }
1767
+ }
1768
+ )
1769
+ ]
1770
+ }
1771
+ ),
1772
+ /* @__PURE__ */ jsx11("div", { className: "absolute inset-0 flex flex-col items-center justify-center text-center", children: children ? children : /* @__PURE__ */ jsxs10(Fragment2, { children: [
1773
+ getContentIcon(),
1774
+ showValue && !indeterminate && /* @__PURE__ */ jsx11("span", { className: cn(
1775
+ "text-sm font-semibold",
1776
+ isComplete ? "text-success" : isError ? "text-destructive" : "text-foreground"
1777
+ ), children: isComplete ? "\u2713" : isError ? "\u2717" : `${Math.round(percentage)}%` }),
1778
+ indeterminate && /* @__PURE__ */ jsx11(Clock, { className: "w-4 h-4 text-muted-foreground animate-pulse" })
1779
+ ] }) })
1780
+ ]
1781
+ }
1782
+ );
1783
+ };
1784
+ var StepProgress = ({
1785
+ steps,
1786
+ currentStep,
1787
+ className,
1788
+ variant = "primary",
1789
+ size = "md"
1790
+ }) => {
1791
+ const stepSizes = {
1792
+ sm: "w-6 h-6 text-xs",
1793
+ md: "w-8 h-8 text-sm",
1794
+ lg: "w-10 h-10 text-base"
1795
+ };
1796
+ const getStepStatus = (stepIndex) => {
1797
+ if (stepIndex < currentStep) return "completed";
1798
+ if (stepIndex === currentStep) return "current";
1799
+ return "upcoming";
1800
+ };
1801
+ return /* @__PURE__ */ jsx11("div", { className: cn("w-full", className), role: "list", "aria-label": "Progress steps", children: /* @__PURE__ */ jsx11("div", { className: "flex items-center justify-between", children: steps.map((step, index) => {
1802
+ const status = getStepStatus(index);
1803
+ return /* @__PURE__ */ jsxs10("div", { className: "flex items-center", role: "listitem", "aria-current": status === "current" ? "step" : void 0, children: [
1804
+ /* @__PURE__ */ jsx11(
1805
+ "div",
1806
+ {
1807
+ className: cn(
1808
+ "rounded-full border-2 flex items-center justify-center font-medium transition-all duration-300",
1809
+ "shadow-sm hover:shadow-md",
1810
+ stepSizes[size],
1811
+ status === "completed" && [
1812
+ "border-success bg-success text-success-foreground",
1813
+ "shadow-success/20"
1814
+ ],
1815
+ status === "current" && [
1816
+ "border-primary bg-primary/10 text-primary",
1817
+ "ring-2 ring-primary/20 ring-offset-2",
1818
+ "shadow-primary/20"
1819
+ ],
1820
+ status === "upcoming" && [
1821
+ "border-muted-foreground/30 text-muted-foreground bg-background",
1822
+ "hover:border-muted-foreground/50"
1823
+ ]
1824
+ ),
1825
+ children: status === "completed" ? /* @__PURE__ */ jsx11(Check2, { className: "w-3 h-3" }) : index + 1
1826
+ }
1827
+ ),
1828
+ /* @__PURE__ */ jsx11(
1829
+ "span",
1830
+ {
1831
+ className: cn(
1832
+ "ml-2 text-sm font-medium transition-colors duration-200",
1833
+ status === "completed" && variantStyles2[variant].replace("bg-", "text-"),
1834
+ status === "current" && "text-foreground",
1835
+ status === "upcoming" && "text-muted-foreground"
1836
+ ),
1837
+ children: step
1838
+ }
1839
+ ),
1840
+ index < steps.length - 1 && /* @__PURE__ */ jsx11(
1841
+ "div",
1842
+ {
1843
+ className: cn(
1844
+ "flex-1 h-0.5 mx-4 transition-colors duration-200",
1845
+ index < currentStep ? variantStyles2[variant] : "bg-muted"
1846
+ )
1847
+ }
1848
+ )
1849
+ ] }, step);
1850
+ }) }) });
1851
+ };
1852
+ var MiniProgress = ({
1853
+ value,
1854
+ max = 100,
1855
+ className,
1856
+ variant = "primary",
1857
+ showValue = false
1858
+ }) => {
1859
+ const percentage = Math.min(Math.max(value / max * 100, 0), 100);
1860
+ return /* @__PURE__ */ jsxs10("div", { className: cn("flex items-center gap-2", className), children: [
1861
+ /* @__PURE__ */ jsx11(
1862
+ "div",
1863
+ {
1864
+ className: "flex-1 h-1.5 bg-muted/50 rounded-full overflow-hidden",
1865
+ role: "progressbar",
1866
+ "aria-valuemin": 0,
1867
+ "aria-valuemax": max,
1868
+ "aria-valuenow": Math.round(percentage),
1869
+ children: /* @__PURE__ */ jsx11(
1870
+ "div",
1871
+ {
1872
+ className: cn(
1873
+ "h-full transition-all duration-500 ease-out rounded-full",
1874
+ variantStyles2[variant]
1875
+ ),
1876
+ style: { width: `${percentage}%` }
1877
+ }
1878
+ )
1879
+ }
1880
+ ),
1881
+ showValue && /* @__PURE__ */ jsxs10("span", { className: "text-xs font-medium text-muted-foreground min-w-[2.5rem] text-right", children: [
1882
+ Math.round(percentage),
1883
+ "%"
1884
+ ] })
1885
+ ] });
1886
+ };
1887
+ var BatteryProgress = ({
1888
+ value,
1889
+ max = 100,
1890
+ className,
1891
+ charging = false,
1892
+ showValue = false
1893
+ }) => {
1894
+ const percentage = Math.min(Math.max(value / max * 100, 0), 100);
1895
+ const getVariant = () => {
1896
+ if (charging) return "info";
1897
+ if (percentage <= 20) return "danger";
1898
+ if (percentage <= 50) return "warning";
1899
+ return "success";
1900
+ };
1901
+ return /* @__PURE__ */ jsxs10("div", { className: cn("flex items-center gap-2", className), children: [
1902
+ /* @__PURE__ */ jsxs10("div", { className: "relative", role: "progressbar", "aria-label": "Battery level", "aria-valuemin": 0, "aria-valuemax": max, "aria-valuenow": Math.round(percentage), children: [
1903
+ /* @__PURE__ */ jsxs10("div", { className: "w-6 h-3 border-2 border-foreground/20 rounded-sm relative", children: [
1904
+ /* @__PURE__ */ jsx11("div", { className: "absolute -right-1 top-0.5 w-0.5 h-1 bg-foreground/20 rounded-r-sm" }),
1905
+ /* @__PURE__ */ jsx11(
1906
+ "div",
1907
+ {
1908
+ className: cn(
1909
+ "h-full transition-all duration-500 ease-out rounded-sm",
1910
+ variantStyles2[getVariant()],
1911
+ charging && "animate-pulse"
1912
+ ),
1913
+ style: { width: `${percentage}%` }
1914
+ }
1915
+ )
1916
+ ] }),
1917
+ charging && /* @__PURE__ */ jsx11("div", { className: "absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ jsx11("div", { className: "w-2 h-2 text-info-foreground", children: "\u26A1" }) })
1918
+ ] }),
1919
+ showValue && /* @__PURE__ */ jsxs10("span", { className: cn(
1920
+ "text-xs font-medium",
1921
+ percentage <= 20 ? "text-destructive" : "text-muted-foreground"
1922
+ ), children: [
1923
+ Math.round(percentage),
1924
+ "%"
1925
+ ] })
1926
+ ] });
1927
+ };
1928
+ var SegmentedProgress = ({
1929
+ segments,
1930
+ activeSegments,
1931
+ className,
1932
+ variant = "primary",
1933
+ size = "md"
1934
+ }) => {
1935
+ const segmentSizes = {
1936
+ sm: "h-1",
1937
+ md: "h-2",
1938
+ lg: "h-3"
1939
+ };
1940
+ return /* @__PURE__ */ jsx11(
1941
+ "div",
1942
+ {
1943
+ className: cn("flex gap-1", className),
1944
+ role: "progressbar",
1945
+ "aria-valuemin": 0,
1946
+ "aria-valuemax": segments,
1947
+ "aria-valuenow": activeSegments,
1948
+ children: Array.from({ length: segments }, (_, index) => /* @__PURE__ */ jsx11(
1949
+ "div",
1950
+ {
1951
+ className: cn(
1952
+ "flex-1 rounded-full transition-all duration-300",
1953
+ segmentSizes[size],
1954
+ index < activeSegments ? variantStyles2[variant] : "bg-muted/50"
1955
+ )
1956
+ },
1957
+ index
1958
+ ))
1959
+ }
1960
+ );
1961
+ };
1962
+ var LoadingProgress = ({
1963
+ value,
1964
+ max = 100,
1965
+ className,
1966
+ variant = "primary",
1967
+ label,
1968
+ status = "loading",
1969
+ speed,
1970
+ timeRemaining
1971
+ }) => {
1972
+ const percentage = Math.min(Math.max(value / max * 100, 0), 100);
1973
+ const getStatusIcon = () => {
1974
+ switch (status) {
1975
+ case "complete":
1976
+ return /* @__PURE__ */ jsx11(Check2, { className: "w-4 h-4 text-success" });
1977
+ case "error":
1978
+ return /* @__PURE__ */ jsx11(X2, { className: "w-4 h-4 text-destructive" });
1979
+ case "paused":
1980
+ return /* @__PURE__ */ jsx11(Clock, { className: "w-4 h-4 text-warning" });
1981
+ default:
1982
+ return /* @__PURE__ */ jsx11("div", { className: "w-2 h-2 bg-primary rounded-full animate-bounce" });
1983
+ }
1984
+ };
1985
+ const getStatusColor = () => {
1986
+ switch (status) {
1987
+ case "complete":
1988
+ return "success";
1989
+ case "error":
1990
+ return "danger";
1991
+ case "paused":
1992
+ return "warning";
1993
+ default:
1994
+ return variant;
1995
+ }
1996
+ };
1997
+ return /* @__PURE__ */ jsxs10("div", { className: cn("w-full space-y-2", className), children: [
1998
+ /* @__PURE__ */ jsxs10("div", { className: "flex items-center justify-between text-sm", children: [
1999
+ /* @__PURE__ */ jsxs10("div", { className: "flex items-center gap-2", children: [
2000
+ getStatusIcon(),
2001
+ label && /* @__PURE__ */ jsx11("span", { className: "font-medium text-foreground", children: label })
2002
+ ] }),
2003
+ /* @__PURE__ */ jsx11("span", { className: "text-muted-foreground", children: status === "complete" ? "Complete" : `${Math.round(percentage)}%` })
2004
+ ] }),
2005
+ /* @__PURE__ */ jsx11(
2006
+ "div",
2007
+ {
2008
+ className: "w-full h-2 bg-muted/50 rounded-full overflow-hidden",
2009
+ role: "progressbar",
2010
+ "aria-valuemin": 0,
2011
+ "aria-valuemax": max,
2012
+ "aria-valuenow": Math.round(percentage),
2013
+ "aria-label": label || "Loading progress",
2014
+ children: /* @__PURE__ */ jsx11(
2015
+ "div",
2016
+ {
2017
+ className: cn(
2018
+ "h-full transition-all duration-300 ease-out rounded-full",
2019
+ variantStyles2[getStatusColor()],
2020
+ status === "loading" && "animate-pulse"
2021
+ ),
2022
+ style: { width: `${percentage}%` }
2023
+ }
2024
+ )
2025
+ }
2026
+ ),
2027
+ (speed || timeRemaining) && /* @__PURE__ */ jsxs10("div", { className: "flex justify-between text-xs text-muted-foreground", children: [
2028
+ speed && /* @__PURE__ */ jsx11("span", { children: speed }),
2029
+ timeRemaining && /* @__PURE__ */ jsx11("span", { children: timeRemaining })
2030
+ ] })
2031
+ ] });
2032
+ };
1542
2033
 
1543
2034
  // ../../components/ui/Modal.tsx
1544
2035
  import * as React9 from "react";
@@ -3254,6 +3745,31 @@ var DropdownMenuItem = ({ children, onClick, disabled, destructive, className })
3254
3745
  children
3255
3746
  }
3256
3747
  );
3748
+ var DropdownMenuSeparator = ({ className }) => /* @__PURE__ */ jsx22("div", { className: cn("h-px bg-border my-1", className) });
3749
+ var SelectDropdown = ({ options, value, onChange, placeholder = "Select...", className }) => /* @__PURE__ */ jsx22(
3750
+ DropdownMenu,
3751
+ {
3752
+ trigger: /* @__PURE__ */ jsxs20(
3753
+ "button",
3754
+ {
3755
+ className: cn(
3756
+ "inline-flex items-center justify-between gap-2 px-3 py-2 text-sm rounded-md border bg-background",
3757
+ "hover:bg-accent/50",
3758
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
3759
+ className
3760
+ ),
3761
+ children: [
3762
+ /* @__PURE__ */ jsx22("span", { className: "truncate max-w-[16rem] text-foreground/90", children: value || placeholder }),
3763
+ /* @__PURE__ */ jsx22("svg", { width: "16", height: "16", viewBox: "0 0 20 20", fill: "none", className: "opacity-70", children: /* @__PURE__ */ jsx22("path", { d: "M6 8l4 4 4-4", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) })
3764
+ ]
3765
+ }
3766
+ ),
3767
+ items: options.map((option) => ({
3768
+ label: option,
3769
+ onClick: () => onChange(option)
3770
+ }))
3771
+ }
3772
+ );
3257
3773
  var DropdownMenu_default = DropdownMenu;
3258
3774
 
3259
3775
  // ../../components/ui/Pagination.tsx
@@ -5109,7 +5625,6 @@ var RadioGroupItem = React23.forwardRef(
5109
5625
  }
5110
5626
  );
5111
5627
  RadioGroupItem.displayName = "RadioGroupItem";
5112
- var RadioGroup_default = RadioGroup;
5113
5628
 
5114
5629
  // ../../components/ui/Slider.tsx
5115
5630
  import * as React24 from "react";
@@ -8047,11 +8562,15 @@ var useFormField = () => {
8047
8562
  const fieldContext = React31.useContext(FormFieldContext);
8048
8563
  const itemContext = React31.useContext(FormItemContext);
8049
8564
  const { getFieldState, formState } = useFormContext();
8050
- const t = useTranslations8("Form");
8051
- const fieldState = getFieldState(fieldContext.name, formState);
8052
8565
  if (!fieldContext) {
8053
- throw new Error(t("validation.mustBeUsedWithinForm"));
8566
+ try {
8567
+ const t = useTranslations8("Form");
8568
+ throw new Error(t("validation.mustBeUsedWithinForm"));
8569
+ } catch {
8570
+ throw new Error("useFormField must be used within FormField");
8571
+ }
8054
8572
  }
8573
+ const fieldState = getFieldState(fieldContext.name, formState);
8055
8574
  const { id } = itemContext;
8056
8575
  return {
8057
8576
  id,
@@ -8815,6 +9334,7 @@ export {
8815
9334
  Avatar_default as Avatar,
8816
9335
  Badge_default as Badge,
8817
9336
  Badge as BadgeBase,
9337
+ BatteryProgress,
8818
9338
  BottomSheet,
8819
9339
  Breadcrumb_default as Breadcrumb,
8820
9340
  Button_default as Button,
@@ -8823,6 +9343,7 @@ export {
8823
9343
  Carousel,
8824
9344
  CategoryTreeSelect,
8825
9345
  Checkbox,
9346
+ CircularProgress,
8826
9347
  ClientOnly,
8827
9348
  Combobox,
8828
9349
  CompactPagination,
@@ -8832,6 +9353,8 @@ export {
8832
9353
  date_exports as DateUtils,
8833
9354
  Drawer,
8834
9355
  DropdownMenu_default as DropdownMenu,
9356
+ DropdownMenuItem,
9357
+ DropdownMenuSeparator,
8835
9358
  FloatingContacts,
8836
9359
  Form,
8837
9360
  FormActions,
@@ -8855,7 +9378,9 @@ export {
8855
9378
  LanguageSwitcherHeadless,
8856
9379
  LoadingBar,
8857
9380
  LoadingDots,
9381
+ LoadingProgress,
8858
9382
  LoadingSpinner,
9383
+ MiniProgress,
8859
9384
  Modal_default as Modal,
8860
9385
  MultiCombobox,
8861
9386
  NotificationBadge,
@@ -8866,21 +9391,34 @@ export {
8866
9391
  PasswordInput,
8867
9392
  PillTabs,
8868
9393
  Popover,
8869
- Progress_default as Progress,
9394
+ Progress,
8870
9395
  PulseBadge,
8871
- RadioGroup_default as RadioGroup,
9396
+ RadioGroup,
9397
+ RadioGroupItem,
8872
9398
  SIZE_STYLES_BTN,
8873
9399
  ScrollArea,
9400
+ SearchInput,
8874
9401
  Section_default as Section,
9402
+ SegmentedProgress,
9403
+ SelectDropdown,
8875
9404
  Sheet,
8876
9405
  SidebarSheet,
8877
9406
  SimplePagination,
8878
9407
  SimpleTabs,
8879
9408
  Skeleton_default as Skeleton,
9409
+ SkeletonAvatar,
9410
+ SkeletonButton,
9411
+ SkeletonCard,
9412
+ SkeletonList,
9413
+ SkeletonMessage,
9414
+ SkeletonPost,
9415
+ SkeletonTable,
9416
+ SkeletonText,
8880
9417
  SlideOver,
8881
9418
  Slider,
8882
9419
  SmartImage,
8883
9420
  StatusBadge,
9421
+ StepProgress,
8884
9422
  Switch_default as Switch,
8885
9423
  Table,
8886
9424
  TableBody,