@cytario/design 1.15.0 → 1.17.0
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.d.ts +94 -7
- package/dist/index.js +463 -208
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -837,12 +837,26 @@ var variantConfig = {
|
|
|
837
837
|
iconClass: "text-[var(--color-text-info)]"
|
|
838
838
|
}
|
|
839
839
|
};
|
|
840
|
+
var PlacementContext = createContext2("bottom-right");
|
|
841
|
+
var exitAnimationByPlacement = {
|
|
842
|
+
"top-center": "-translate-y-full opacity-0",
|
|
843
|
+
"top-right": "translate-x-full opacity-0",
|
|
844
|
+
"bottom-center": "translate-y-full opacity-0",
|
|
845
|
+
"bottom-right": "translate-x-full opacity-0"
|
|
846
|
+
};
|
|
847
|
+
var enterAnimationByPlacement = {
|
|
848
|
+
"top-center": "translate-y-0 opacity-100 animate-in slide-in-from-top",
|
|
849
|
+
"top-right": "translate-x-0 opacity-100 animate-in slide-in-from-right",
|
|
850
|
+
"bottom-center": "translate-y-0 opacity-100 animate-in slide-in-from-bottom",
|
|
851
|
+
"bottom-right": "translate-x-0 opacity-100 animate-in slide-in-from-right"
|
|
852
|
+
};
|
|
840
853
|
function ToastItem({
|
|
841
854
|
toast,
|
|
842
855
|
onRemove
|
|
843
856
|
}) {
|
|
844
857
|
const [isExiting, setIsExiting] = useState(false);
|
|
845
858
|
const timerRef = useRef(null);
|
|
859
|
+
const placement = useContext2(PlacementContext);
|
|
846
860
|
const config = variantConfig[toast.variant];
|
|
847
861
|
const IconComponent = config.icon;
|
|
848
862
|
const dismiss = useCallback(() => {
|
|
@@ -865,7 +879,7 @@ function ToastItem({
|
|
|
865
879
|
"flex items-start gap-[var(--spacing-3)] rounded-[var(--border-radius-lg)] border px-[var(--spacing-4)] py-[var(--spacing-3)] shadow-md",
|
|
866
880
|
"min-w-[320px] max-w-[420px]",
|
|
867
881
|
"transition-all duration-200",
|
|
868
|
-
isExiting ?
|
|
882
|
+
isExiting ? exitAnimationByPlacement[placement] : enterAnimationByPlacement[placement],
|
|
869
883
|
config.containerClass
|
|
870
884
|
].join(" "),
|
|
871
885
|
children: [
|
|
@@ -885,10 +899,20 @@ function ToastItem({
|
|
|
885
899
|
}
|
|
886
900
|
);
|
|
887
901
|
}
|
|
888
|
-
|
|
902
|
+
var containerPositionStyles = {
|
|
903
|
+
"top-center": "fixed top-4 left-1/2 -translate-x-1/2 z-50 flex flex-col-reverse gap-2 items-center",
|
|
904
|
+
"top-right": "fixed top-4 right-4 z-50 flex flex-col-reverse gap-2",
|
|
905
|
+
"bottom-center": "fixed bottom-4 left-1/2 -translate-x-1/2 z-50 flex flex-col gap-2 items-center",
|
|
906
|
+
"bottom-right": "fixed bottom-4 right-4 z-50 flex flex-col gap-2"
|
|
907
|
+
};
|
|
908
|
+
function ToastContainer({
|
|
909
|
+
toasts,
|
|
910
|
+
removeToast,
|
|
911
|
+
placement = "bottom-right"
|
|
912
|
+
}) {
|
|
889
913
|
if (toasts.length === 0) return null;
|
|
890
914
|
return createPortal(
|
|
891
|
-
/* @__PURE__ */ jsx10(
|
|
915
|
+
/* @__PURE__ */ jsx10(PlacementContext.Provider, { value: placement, children: /* @__PURE__ */ jsx10("div", { className: containerPositionStyles[placement], children: toasts.map((toast) => /* @__PURE__ */ jsx10(ToastItem, { toast, onRemove: removeToast }, toast.id)) }) }),
|
|
892
916
|
document.body
|
|
893
917
|
);
|
|
894
918
|
}
|
|
@@ -906,7 +930,7 @@ function createToastBridge() {
|
|
|
906
930
|
}
|
|
907
931
|
};
|
|
908
932
|
}
|
|
909
|
-
function ToastProvider({ children, bridge }) {
|
|
933
|
+
function ToastProvider({ children, bridge, placement = "bottom-right" }) {
|
|
910
934
|
const [toasts, setToasts] = useState([]);
|
|
911
935
|
const addToast = useCallback((toast) => {
|
|
912
936
|
const id = `toast-${++toastCounter}`;
|
|
@@ -921,7 +945,7 @@ function ToastProvider({ children, bridge }) {
|
|
|
921
945
|
}, [bridge, addToast]);
|
|
922
946
|
return /* @__PURE__ */ jsxs8(ToastContext.Provider, { value: { toasts, addToast, removeToast }, children: [
|
|
923
947
|
children,
|
|
924
|
-
/* @__PURE__ */ jsx10(ToastContainer, { toasts, removeToast })
|
|
948
|
+
/* @__PURE__ */ jsx10(ToastContainer, { toasts, removeToast, placement })
|
|
925
949
|
] });
|
|
926
950
|
}
|
|
927
951
|
function useToast() {
|
|
@@ -1592,6 +1616,78 @@ function ToggleButton({
|
|
|
1592
1616
|
);
|
|
1593
1617
|
}
|
|
1594
1618
|
|
|
1619
|
+
// src/components/ToggleButtonGroup/ToggleButtonGroup.tsx
|
|
1620
|
+
import { createContext as createContext3, useContext as useContext3 } from "react";
|
|
1621
|
+
import { twMerge as twMerge5 } from "tailwind-merge";
|
|
1622
|
+
import {
|
|
1623
|
+
RadioGroup as AriaRadioGroup2,
|
|
1624
|
+
Radio as AriaRadio2
|
|
1625
|
+
} from "react-aria-components";
|
|
1626
|
+
import { jsx as jsx25 } from "react/jsx-runtime";
|
|
1627
|
+
var ToggleButtonGroupContext = createContext3({
|
|
1628
|
+
size: "md"
|
|
1629
|
+
});
|
|
1630
|
+
var sizeStyles5 = {
|
|
1631
|
+
sm: "px-2.5 py-1 text-xs gap-1",
|
|
1632
|
+
md: "px-3 py-1.5 text-sm gap-1.5",
|
|
1633
|
+
lg: "px-4 py-2 text-base gap-2"
|
|
1634
|
+
};
|
|
1635
|
+
var iconOnlySizeStyles = {
|
|
1636
|
+
sm: "p-1",
|
|
1637
|
+
md: "p-1.5",
|
|
1638
|
+
lg: "p-2"
|
|
1639
|
+
};
|
|
1640
|
+
function ToggleButtonGroup({
|
|
1641
|
+
size = "md",
|
|
1642
|
+
className,
|
|
1643
|
+
children,
|
|
1644
|
+
...props
|
|
1645
|
+
}) {
|
|
1646
|
+
return /* @__PURE__ */ jsx25(ToggleButtonGroupContext.Provider, { value: { size }, children: /* @__PURE__ */ jsx25(
|
|
1647
|
+
AriaRadioGroup2,
|
|
1648
|
+
{
|
|
1649
|
+
...props,
|
|
1650
|
+
orientation: "horizontal",
|
|
1651
|
+
className: twMerge5(
|
|
1652
|
+
"inline-flex items-center rounded-[var(--border-radius-lg)] border border-[var(--color-border-default)] bg-[var(--color-surface-muted)] p-0.5 gap-0.5",
|
|
1653
|
+
className
|
|
1654
|
+
),
|
|
1655
|
+
children
|
|
1656
|
+
}
|
|
1657
|
+
) });
|
|
1658
|
+
}
|
|
1659
|
+
function ToggleButtonGroupItem({
|
|
1660
|
+
children,
|
|
1661
|
+
isIconOnly,
|
|
1662
|
+
className,
|
|
1663
|
+
...props
|
|
1664
|
+
}) {
|
|
1665
|
+
const { size } = useContext3(ToggleButtonGroupContext);
|
|
1666
|
+
return /* @__PURE__ */ jsx25(
|
|
1667
|
+
AriaRadio2,
|
|
1668
|
+
{
|
|
1669
|
+
...props,
|
|
1670
|
+
className: ({ isSelected, isHovered, isPressed, isDisabled }) => twMerge5(
|
|
1671
|
+
// Base layout
|
|
1672
|
+
"inline-flex items-center justify-center",
|
|
1673
|
+
"rounded-[var(--border-radius-md)]",
|
|
1674
|
+
"font-[var(--font-weight-medium)]",
|
|
1675
|
+
"outline-none transition-colors cursor-pointer",
|
|
1676
|
+
// Focus ring
|
|
1677
|
+
"focus-visible:ring-2 focus-visible:ring-[var(--color-border-focus)] focus-visible:ring-offset-1",
|
|
1678
|
+
// Disabled
|
|
1679
|
+
isDisabled && "opacity-50 pointer-events-none",
|
|
1680
|
+
// Size
|
|
1681
|
+
isIconOnly ? iconOnlySizeStyles[size] : sizeStyles5[size],
|
|
1682
|
+
// Selected state
|
|
1683
|
+
isSelected ? "bg-[var(--color-surface-default)] text-[var(--color-text-primary)] shadow-sm font-[var(--font-weight-semibold)]" : isPressed ? "bg-[var(--color-surface-subtle)] text-[var(--color-text-primary)]" : isHovered ? "bg-[var(--color-surface-subtle)] text-[var(--color-text-primary)]" : "bg-transparent text-[var(--color-text-secondary)]",
|
|
1684
|
+
className
|
|
1685
|
+
),
|
|
1686
|
+
children
|
|
1687
|
+
}
|
|
1688
|
+
);
|
|
1689
|
+
}
|
|
1690
|
+
|
|
1595
1691
|
// src/components/Menu/Menu.tsx
|
|
1596
1692
|
import {
|
|
1597
1693
|
MenuTrigger,
|
|
@@ -1599,29 +1695,42 @@ import {
|
|
|
1599
1695
|
MenuItem as AriaMenuItem,
|
|
1600
1696
|
Popover as Popover2
|
|
1601
1697
|
} from "react-aria-components";
|
|
1602
|
-
import { jsx as
|
|
1603
|
-
|
|
1698
|
+
import { jsx as jsx26, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
1699
|
+
var popoverStyles = [
|
|
1700
|
+
"bg-[var(--color-surface-default)] rounded-[var(--border-radius-md)]",
|
|
1701
|
+
"shadow-lg border border-[var(--color-border-default)]",
|
|
1702
|
+
"py-1 min-w-48",
|
|
1703
|
+
"entering:animate-in entering:fade-in entering:zoom-in-95",
|
|
1704
|
+
"exiting:animate-out exiting:fade-out exiting:zoom-out-95"
|
|
1705
|
+
].join(" ");
|
|
1706
|
+
function Menu({
|
|
1707
|
+
items,
|
|
1708
|
+
content,
|
|
1709
|
+
children,
|
|
1710
|
+
onAction,
|
|
1711
|
+
selectionMode,
|
|
1712
|
+
selectedKeys,
|
|
1713
|
+
defaultSelectedKeys,
|
|
1714
|
+
onSelectionChange,
|
|
1715
|
+
className
|
|
1716
|
+
}) {
|
|
1717
|
+
const selectionProps = selectionMode && selectionMode !== "none" ? { selectionMode, selectedKeys, defaultSelectedKeys, onSelectionChange } : {};
|
|
1604
1718
|
return /* @__PURE__ */ jsxs18(MenuTrigger, { children: [
|
|
1605
1719
|
children,
|
|
1606
|
-
/* @__PURE__ */
|
|
1720
|
+
/* @__PURE__ */ jsx26(
|
|
1607
1721
|
Popover2,
|
|
1608
1722
|
{
|
|
1609
|
-
className: [
|
|
1610
|
-
|
|
1611
|
-
"shadow-lg border border-[var(--color-border-default)]",
|
|
1612
|
-
"py-1 min-w-48",
|
|
1613
|
-
"entering:animate-in entering:fade-in entering:zoom-in-95",
|
|
1614
|
-
"exiting:animate-out exiting:fade-out exiting:zoom-out-95",
|
|
1615
|
-
className
|
|
1616
|
-
].filter(Boolean).join(" "),
|
|
1617
|
-
children: /* @__PURE__ */ jsx25(
|
|
1723
|
+
className: [popoverStyles, className].filter(Boolean).join(" "),
|
|
1724
|
+
children: items ? /* @__PURE__ */ jsx26(
|
|
1618
1725
|
AriaMenu,
|
|
1619
1726
|
{
|
|
1620
1727
|
items,
|
|
1621
1728
|
onAction: (key) => {
|
|
1622
1729
|
const item = items.find((i) => i.id === key);
|
|
1623
1730
|
item?.onAction?.();
|
|
1731
|
+
onAction?.(key);
|
|
1624
1732
|
},
|
|
1733
|
+
...selectionProps,
|
|
1625
1734
|
className: "outline-none",
|
|
1626
1735
|
children: (item) => /* @__PURE__ */ jsxs18(
|
|
1627
1736
|
AriaMenuItem,
|
|
@@ -1639,18 +1748,157 @@ function Menu({ items, children, className }) {
|
|
|
1639
1748
|
item.isDanger ? "text-[var(--color-text-danger)]" : "text-[var(--color-text-primary)]"
|
|
1640
1749
|
].filter(Boolean).join(" "),
|
|
1641
1750
|
children: [
|
|
1642
|
-
item.icon && /* @__PURE__ */
|
|
1643
|
-
item.label
|
|
1751
|
+
item.icon && /* @__PURE__ */ jsx26(Icon, { icon: item.icon, size: "sm" }),
|
|
1752
|
+
/* @__PURE__ */ jsx26("span", { className: "flex-1", children: item.label }),
|
|
1753
|
+
item.endContent && /* @__PURE__ */ jsx26("span", { className: "ml-auto flex items-center", children: item.endContent })
|
|
1644
1754
|
]
|
|
1645
1755
|
}
|
|
1646
1756
|
)
|
|
1647
1757
|
}
|
|
1758
|
+
) : /* @__PURE__ */ jsx26(
|
|
1759
|
+
AriaMenu,
|
|
1760
|
+
{
|
|
1761
|
+
onAction: (key) => onAction?.(key),
|
|
1762
|
+
...selectionProps,
|
|
1763
|
+
className: "outline-none",
|
|
1764
|
+
children: content
|
|
1765
|
+
}
|
|
1648
1766
|
)
|
|
1649
1767
|
}
|
|
1650
1768
|
)
|
|
1651
1769
|
] });
|
|
1652
1770
|
}
|
|
1653
1771
|
|
|
1772
|
+
// src/components/Menu/MenuItem.tsx
|
|
1773
|
+
import { MenuItem as AriaMenuItem2 } from "react-aria-components";
|
|
1774
|
+
import { jsx as jsx27, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
1775
|
+
function MenuItem({
|
|
1776
|
+
id,
|
|
1777
|
+
children,
|
|
1778
|
+
icon,
|
|
1779
|
+
endContent,
|
|
1780
|
+
onAction,
|
|
1781
|
+
href,
|
|
1782
|
+
target,
|
|
1783
|
+
isDisabled,
|
|
1784
|
+
isDanger,
|
|
1785
|
+
textValue,
|
|
1786
|
+
className
|
|
1787
|
+
}) {
|
|
1788
|
+
return /* @__PURE__ */ jsxs19(
|
|
1789
|
+
AriaMenuItem2,
|
|
1790
|
+
{
|
|
1791
|
+
id,
|
|
1792
|
+
href,
|
|
1793
|
+
target,
|
|
1794
|
+
isDisabled,
|
|
1795
|
+
onAction,
|
|
1796
|
+
textValue,
|
|
1797
|
+
className: [
|
|
1798
|
+
"flex items-center gap-2 px-3 py-2 text-sm outline-none cursor-default",
|
|
1799
|
+
"transition-colors",
|
|
1800
|
+
"focus:bg-[var(--color-surface-muted)]",
|
|
1801
|
+
"hover:bg-[var(--color-surface-muted)]",
|
|
1802
|
+
"disabled:opacity-50 disabled:pointer-events-none",
|
|
1803
|
+
isDanger ? "text-[var(--color-text-danger)]" : "text-[var(--color-text-primary)]",
|
|
1804
|
+
className
|
|
1805
|
+
].filter(Boolean).join(" "),
|
|
1806
|
+
children: [
|
|
1807
|
+
icon && /* @__PURE__ */ jsx27(Icon, { icon, size: "sm" }),
|
|
1808
|
+
/* @__PURE__ */ jsx27("span", { className: "flex-1", children }),
|
|
1809
|
+
endContent && /* @__PURE__ */ jsx27("span", { className: "ml-auto flex items-center", children: endContent })
|
|
1810
|
+
]
|
|
1811
|
+
}
|
|
1812
|
+
);
|
|
1813
|
+
}
|
|
1814
|
+
|
|
1815
|
+
// src/components/Menu/MenuCheckboxItem.tsx
|
|
1816
|
+
import { MenuItem as AriaMenuItem3 } from "react-aria-components";
|
|
1817
|
+
import { Check as Check2 } from "lucide-react";
|
|
1818
|
+
import { Fragment as Fragment7, jsx as jsx28, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
1819
|
+
function MenuCheckboxItem({
|
|
1820
|
+
id,
|
|
1821
|
+
children,
|
|
1822
|
+
textValue,
|
|
1823
|
+
isDisabled,
|
|
1824
|
+
className
|
|
1825
|
+
}) {
|
|
1826
|
+
return /* @__PURE__ */ jsx28(
|
|
1827
|
+
AriaMenuItem3,
|
|
1828
|
+
{
|
|
1829
|
+
id,
|
|
1830
|
+
textValue,
|
|
1831
|
+
isDisabled,
|
|
1832
|
+
className: ({ isSelected }) => [
|
|
1833
|
+
"flex items-center gap-2 px-3 py-2 text-sm outline-none cursor-default",
|
|
1834
|
+
"transition-colors",
|
|
1835
|
+
"focus:bg-[var(--color-surface-muted)]",
|
|
1836
|
+
"hover:bg-[var(--color-surface-muted)]",
|
|
1837
|
+
"disabled:opacity-50 disabled:pointer-events-none",
|
|
1838
|
+
"text-[var(--color-text-primary)]",
|
|
1839
|
+
isSelected ? "font-[number:var(--font-weight-medium)]" : "",
|
|
1840
|
+
className
|
|
1841
|
+
].filter(Boolean).join(" "),
|
|
1842
|
+
children: ({ isSelected }) => /* @__PURE__ */ jsxs20(Fragment7, { children: [
|
|
1843
|
+
/* @__PURE__ */ jsx28("span", { className: "flex items-center justify-center w-4 h-4 shrink-0", children: isSelected && /* @__PURE__ */ jsx28(Check2, { size: 14, className: "text-[var(--color-action-primary)]", "aria-hidden": "true" }) }),
|
|
1844
|
+
/* @__PURE__ */ jsx28("span", { className: "flex-1", children })
|
|
1845
|
+
] })
|
|
1846
|
+
}
|
|
1847
|
+
);
|
|
1848
|
+
}
|
|
1849
|
+
|
|
1850
|
+
// src/components/Menu/MenuSection.tsx
|
|
1851
|
+
import {
|
|
1852
|
+
MenuSection as AriaMenuSection,
|
|
1853
|
+
Header
|
|
1854
|
+
} from "react-aria-components";
|
|
1855
|
+
import { jsx as jsx29, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
1856
|
+
function MenuSection({
|
|
1857
|
+
header,
|
|
1858
|
+
children,
|
|
1859
|
+
"aria-label": ariaLabel,
|
|
1860
|
+
className
|
|
1861
|
+
}) {
|
|
1862
|
+
return /* @__PURE__ */ jsxs21(AriaMenuSection, { className, "aria-label": ariaLabel, children: [
|
|
1863
|
+
header && /* @__PURE__ */ jsx29(
|
|
1864
|
+
Header,
|
|
1865
|
+
{
|
|
1866
|
+
className: [
|
|
1867
|
+
"px-3 py-1.5",
|
|
1868
|
+
"text-[length:var(--font-size-xs)] font-[number:var(--font-weight-semibold)]",
|
|
1869
|
+
"text-[var(--color-text-secondary)]",
|
|
1870
|
+
"uppercase tracking-wider",
|
|
1871
|
+
"select-none"
|
|
1872
|
+
].join(" "),
|
|
1873
|
+
children: header
|
|
1874
|
+
}
|
|
1875
|
+
),
|
|
1876
|
+
children
|
|
1877
|
+
] });
|
|
1878
|
+
}
|
|
1879
|
+
|
|
1880
|
+
// src/components/Menu/MenuHeader.tsx
|
|
1881
|
+
import { Header as Header2 } from "react-aria-components";
|
|
1882
|
+
import { jsx as jsx30 } from "react/jsx-runtime";
|
|
1883
|
+
function MenuHeader({ children, className }) {
|
|
1884
|
+
return /* @__PURE__ */ jsx30(Header2, { className, children });
|
|
1885
|
+
}
|
|
1886
|
+
|
|
1887
|
+
// src/components/Menu/MenuSeparator.tsx
|
|
1888
|
+
import { Separator } from "react-aria-components";
|
|
1889
|
+
import { jsx as jsx31 } from "react/jsx-runtime";
|
|
1890
|
+
function MenuSeparator({ className }) {
|
|
1891
|
+
return /* @__PURE__ */ jsx31(
|
|
1892
|
+
Separator,
|
|
1893
|
+
{
|
|
1894
|
+
className: [
|
|
1895
|
+
"border-t border-[var(--color-border-default)] my-1",
|
|
1896
|
+
className
|
|
1897
|
+
].filter(Boolean).join(" ")
|
|
1898
|
+
}
|
|
1899
|
+
);
|
|
1900
|
+
}
|
|
1901
|
+
|
|
1654
1902
|
// src/components/Popover/Popover.tsx
|
|
1655
1903
|
import {
|
|
1656
1904
|
DialogTrigger,
|
|
@@ -1658,12 +1906,12 @@ import {
|
|
|
1658
1906
|
Dialog as AriaDialog2,
|
|
1659
1907
|
Button as AriaButton3
|
|
1660
1908
|
} from "react-aria-components";
|
|
1661
|
-
import { Fragment as
|
|
1909
|
+
import { Fragment as Fragment8, jsx as jsx32 } from "react/jsx-runtime";
|
|
1662
1910
|
function Popover3({ children, isOpen, onOpenChange }) {
|
|
1663
|
-
return /* @__PURE__ */
|
|
1911
|
+
return /* @__PURE__ */ jsx32(DialogTrigger, { isOpen, onOpenChange, children });
|
|
1664
1912
|
}
|
|
1665
1913
|
function PopoverTrigger({ children, className }) {
|
|
1666
|
-
return /* @__PURE__ */
|
|
1914
|
+
return /* @__PURE__ */ jsx32(
|
|
1667
1915
|
AriaButton3,
|
|
1668
1916
|
{
|
|
1669
1917
|
className: [
|
|
@@ -1681,7 +1929,7 @@ function PopoverContent({
|
|
|
1681
1929
|
className,
|
|
1682
1930
|
children
|
|
1683
1931
|
}) {
|
|
1684
|
-
return /* @__PURE__ */
|
|
1932
|
+
return /* @__PURE__ */ jsx32(
|
|
1685
1933
|
AriaPopover,
|
|
1686
1934
|
{
|
|
1687
1935
|
placement,
|
|
@@ -1698,26 +1946,26 @@ function PopoverContent({
|
|
|
1698
1946
|
"entering:placement-right:slide-in-from-left-1",
|
|
1699
1947
|
className
|
|
1700
1948
|
].filter(Boolean).join(" "),
|
|
1701
|
-
children: /* @__PURE__ */
|
|
1949
|
+
children: /* @__PURE__ */ jsx32(AriaDialog2, { className: "outline-none", children: ({ close }) => /* @__PURE__ */ jsx32(Fragment8, { children: typeof children === "function" ? children({ close }) : children }) })
|
|
1702
1950
|
}
|
|
1703
1951
|
);
|
|
1704
1952
|
}
|
|
1705
1953
|
|
|
1706
1954
|
// src/components/Tabs/Tabs.tsx
|
|
1707
|
-
import { createContext as
|
|
1708
|
-
import { twMerge as
|
|
1955
|
+
import { createContext as createContext4, useContext as useContext4 } from "react";
|
|
1956
|
+
import { twMerge as twMerge6 } from "tailwind-merge";
|
|
1709
1957
|
import {
|
|
1710
1958
|
Tabs as AriaTabs,
|
|
1711
1959
|
TabList as AriaTabList,
|
|
1712
1960
|
Tab as AriaTab,
|
|
1713
1961
|
TabPanel as AriaTabPanel
|
|
1714
1962
|
} from "react-aria-components";
|
|
1715
|
-
import { jsx as
|
|
1716
|
-
var TabsContext =
|
|
1963
|
+
import { jsx as jsx33 } from "react/jsx-runtime";
|
|
1964
|
+
var TabsContext = createContext4({
|
|
1717
1965
|
variant: "underline",
|
|
1718
1966
|
size: "md"
|
|
1719
1967
|
});
|
|
1720
|
-
var
|
|
1968
|
+
var sizeStyles6 = {
|
|
1721
1969
|
sm: "px-3 py-1.5 text-sm",
|
|
1722
1970
|
md: "px-4 py-2 text-base",
|
|
1723
1971
|
lg: "px-6 py-3 text-lg"
|
|
@@ -1730,12 +1978,12 @@ function Tabs({
|
|
|
1730
1978
|
children,
|
|
1731
1979
|
...props
|
|
1732
1980
|
}) {
|
|
1733
|
-
return /* @__PURE__ */
|
|
1981
|
+
return /* @__PURE__ */ jsx33(TabsContext.Provider, { value: { variant, size }, children: /* @__PURE__ */ jsx33(
|
|
1734
1982
|
AriaTabs,
|
|
1735
1983
|
{
|
|
1736
1984
|
...props,
|
|
1737
1985
|
orientation,
|
|
1738
|
-
className:
|
|
1986
|
+
className: twMerge6(
|
|
1739
1987
|
orientation === "vertical" ? "flex" : "",
|
|
1740
1988
|
className
|
|
1741
1989
|
),
|
|
@@ -1747,14 +1995,14 @@ function TabList({
|
|
|
1747
1995
|
className,
|
|
1748
1996
|
...props
|
|
1749
1997
|
}) {
|
|
1750
|
-
const { variant } =
|
|
1998
|
+
const { variant } = useContext4(TabsContext);
|
|
1751
1999
|
const baseStyles = variant === "unstyled" ? "flex items-center" : variant === "underline" ? "flex items-center border-b border-[var(--color-border-default)]" : "inline-flex items-center bg-[var(--color-surface-muted)] rounded-[var(--border-radius-lg)] p-1 gap-1";
|
|
1752
2000
|
const verticalStyles = variant === "unstyled" ? "flex-col" : variant === "underline" ? "flex-col border-b-0 border-r border-[var(--color-border-default)]" : "flex-col";
|
|
1753
|
-
return /* @__PURE__ */
|
|
2001
|
+
return /* @__PURE__ */ jsx33(
|
|
1754
2002
|
AriaTabList,
|
|
1755
2003
|
{
|
|
1756
2004
|
...props,
|
|
1757
|
-
className: ({ orientation }) =>
|
|
2005
|
+
className: ({ orientation }) => twMerge6(
|
|
1758
2006
|
baseStyles,
|
|
1759
2007
|
orientation === "vertical" ? verticalStyles : "",
|
|
1760
2008
|
className
|
|
@@ -1763,21 +2011,21 @@ function TabList({
|
|
|
1763
2011
|
);
|
|
1764
2012
|
}
|
|
1765
2013
|
function Tab({ className, ...props }) {
|
|
1766
|
-
const { variant, size } =
|
|
1767
|
-
return /* @__PURE__ */
|
|
2014
|
+
const { variant, size } = useContext4(TabsContext);
|
|
2015
|
+
return /* @__PURE__ */ jsx33(
|
|
1768
2016
|
AriaTab,
|
|
1769
2017
|
{
|
|
1770
2018
|
...props,
|
|
1771
2019
|
className: ({ isSelected, isDisabled, isHovered, isPressed }) => {
|
|
1772
2020
|
if (variant === "unstyled") {
|
|
1773
|
-
return
|
|
2021
|
+
return twMerge6(
|
|
1774
2022
|
"cursor-pointer outline-none",
|
|
1775
2023
|
"focus-visible:ring-2 focus-visible:ring-[var(--color-border-focus)] focus-visible:ring-offset-2",
|
|
1776
2024
|
isDisabled ? "opacity-50 pointer-events-none" : "",
|
|
1777
2025
|
className
|
|
1778
2026
|
);
|
|
1779
2027
|
}
|
|
1780
|
-
return
|
|
2028
|
+
return twMerge6(
|
|
1781
2029
|
// Base
|
|
1782
2030
|
"cursor-pointer outline-none transition-colors",
|
|
1783
2031
|
"font-[var(--font-weight-medium)]",
|
|
@@ -1786,7 +2034,7 @@ function Tab({ className, ...props }) {
|
|
|
1786
2034
|
// Disabled
|
|
1787
2035
|
isDisabled ? "opacity-50 pointer-events-none" : "",
|
|
1788
2036
|
// Size
|
|
1789
|
-
|
|
2037
|
+
sizeStyles6[size],
|
|
1790
2038
|
...getTabVariantStyles(variant, {
|
|
1791
2039
|
isSelected,
|
|
1792
2040
|
isHovered,
|
|
@@ -1820,12 +2068,12 @@ function getTabVariantStyles(variant, state) {
|
|
|
1820
2068
|
];
|
|
1821
2069
|
}
|
|
1822
2070
|
function TabPanel({ className, ...props }) {
|
|
1823
|
-
const { variant } =
|
|
1824
|
-
return /* @__PURE__ */
|
|
2071
|
+
const { variant } = useContext4(TabsContext);
|
|
2072
|
+
return /* @__PURE__ */ jsx33(
|
|
1825
2073
|
AriaTabPanel,
|
|
1826
2074
|
{
|
|
1827
2075
|
...props,
|
|
1828
|
-
className:
|
|
2076
|
+
className: twMerge6(
|
|
1829
2077
|
variant === "unstyled" ? "outline-none" : "mt-4 outline-none",
|
|
1830
2078
|
className
|
|
1831
2079
|
)
|
|
@@ -1845,8 +2093,8 @@ import {
|
|
|
1845
2093
|
import { useCallback as useCallback2, useImperativeHandle, useRef as useRef2, useState as useState2 } from "react";
|
|
1846
2094
|
import { Tree as ArboristTree } from "react-arborist";
|
|
1847
2095
|
import { ChevronRight as ChevronRight2, Folder, File } from "lucide-react";
|
|
1848
|
-
import { Check as
|
|
1849
|
-
import { jsx as
|
|
2096
|
+
import { Check as Check3 } from "lucide-react";
|
|
2097
|
+
import { jsx as jsx34, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
1850
2098
|
var rowHeightMap = {
|
|
1851
2099
|
compact: 32,
|
|
1852
2100
|
comfortable: 40
|
|
@@ -1869,7 +2117,7 @@ function NodeRenderer({
|
|
|
1869
2117
|
const isSelected = node.isSelected && !isCheckbox;
|
|
1870
2118
|
const isCompact = size === "compact";
|
|
1871
2119
|
const IconComponent = data.icon ? data.icon : node.isInternal ? Folder : File;
|
|
1872
|
-
return /* @__PURE__ */
|
|
2120
|
+
return /* @__PURE__ */ jsxs22(
|
|
1873
2121
|
"div",
|
|
1874
2122
|
{
|
|
1875
2123
|
ref: dragHandle,
|
|
@@ -1904,7 +2152,7 @@ function NodeRenderer({
|
|
|
1904
2152
|
}
|
|
1905
2153
|
},
|
|
1906
2154
|
children: [
|
|
1907
|
-
/* @__PURE__ */
|
|
2155
|
+
/* @__PURE__ */ jsx34(
|
|
1908
2156
|
"button",
|
|
1909
2157
|
{
|
|
1910
2158
|
type: "button",
|
|
@@ -1922,7 +2170,7 @@ function NodeRenderer({
|
|
|
1922
2170
|
},
|
|
1923
2171
|
tabIndex: -1,
|
|
1924
2172
|
"aria-label": node.isOpen ? "Collapse" : "Expand",
|
|
1925
|
-
children: /* @__PURE__ */
|
|
2173
|
+
children: /* @__PURE__ */ jsx34(
|
|
1926
2174
|
ChevronRight2,
|
|
1927
2175
|
{
|
|
1928
2176
|
size: 14,
|
|
@@ -1934,7 +2182,7 @@ function NodeRenderer({
|
|
|
1934
2182
|
)
|
|
1935
2183
|
}
|
|
1936
2184
|
),
|
|
1937
|
-
isCheckbox && /* @__PURE__ */
|
|
2185
|
+
isCheckbox && /* @__PURE__ */ jsx34(
|
|
1938
2186
|
"div",
|
|
1939
2187
|
{
|
|
1940
2188
|
className: [
|
|
@@ -1945,8 +2193,8 @@ function NodeRenderer({
|
|
|
1945
2193
|
role: "checkbox",
|
|
1946
2194
|
"aria-checked": isChecked,
|
|
1947
2195
|
"aria-label": `Select ${data.name}`,
|
|
1948
|
-
children: isChecked && /* @__PURE__ */
|
|
1949
|
-
|
|
2196
|
+
children: isChecked && /* @__PURE__ */ jsx34(
|
|
2197
|
+
Check3,
|
|
1950
2198
|
{
|
|
1951
2199
|
className: "w-3 h-3 text-[var(--color-text-inverse)]",
|
|
1952
2200
|
strokeWidth: 3
|
|
@@ -1954,7 +2202,7 @@ function NodeRenderer({
|
|
|
1954
2202
|
)
|
|
1955
2203
|
}
|
|
1956
2204
|
),
|
|
1957
|
-
/* @__PURE__ */
|
|
2205
|
+
/* @__PURE__ */ jsx34(
|
|
1958
2206
|
IconComponent,
|
|
1959
2207
|
{
|
|
1960
2208
|
size: 16,
|
|
@@ -1962,7 +2210,7 @@ function NodeRenderer({
|
|
|
1962
2210
|
"aria-hidden": "true"
|
|
1963
2211
|
}
|
|
1964
2212
|
),
|
|
1965
|
-
/* @__PURE__ */
|
|
2213
|
+
/* @__PURE__ */ jsx34("span", { className: "truncate", children: data.name })
|
|
1966
2214
|
]
|
|
1967
2215
|
}
|
|
1968
2216
|
);
|
|
@@ -2028,13 +2276,13 @@ function Tree({
|
|
|
2028
2276
|
);
|
|
2029
2277
|
const arboristSearchMatch = searchMatch ? (node, term) => searchMatch(node.data, term) : void 0;
|
|
2030
2278
|
const selectionProp = selectionMode === "single" && selectedIds && selectedIds.size > 0 ? [...selectedIds][0] : void 0;
|
|
2031
|
-
return /* @__PURE__ */
|
|
2279
|
+
return /* @__PURE__ */ jsx34(
|
|
2032
2280
|
"div",
|
|
2033
2281
|
{
|
|
2034
2282
|
role: "tree",
|
|
2035
2283
|
"aria-label": ariaLabel,
|
|
2036
2284
|
className: ["outline-none overflow-hidden", className].filter(Boolean).join(" "),
|
|
2037
|
-
children: /* @__PURE__ */
|
|
2285
|
+
children: /* @__PURE__ */ jsx34(
|
|
2038
2286
|
ArboristTree,
|
|
2039
2287
|
{
|
|
2040
2288
|
ref: internalRef,
|
|
@@ -2053,7 +2301,7 @@ function Tree({
|
|
|
2053
2301
|
onSelect: handleSelect,
|
|
2054
2302
|
onActivate: handleActivate,
|
|
2055
2303
|
disableEdit: true,
|
|
2056
|
-
children: (props) => /* @__PURE__ */
|
|
2304
|
+
children: (props) => /* @__PURE__ */ jsx34(
|
|
2057
2305
|
NodeRenderer,
|
|
2058
2306
|
{
|
|
2059
2307
|
...props,
|
|
@@ -2072,17 +2320,17 @@ function Tree({
|
|
|
2072
2320
|
}
|
|
2073
2321
|
|
|
2074
2322
|
// src/components/SegmentedControl/SegmentedControl.tsx
|
|
2075
|
-
import { createContext as
|
|
2076
|
-
import { twMerge as
|
|
2323
|
+
import { createContext as createContext5, useContext as useContext5 } from "react";
|
|
2324
|
+
import { twMerge as twMerge7 } from "tailwind-merge";
|
|
2077
2325
|
import {
|
|
2078
2326
|
ToggleButtonGroup as AriaToggleButtonGroup,
|
|
2079
2327
|
ToggleButton as AriaToggleButton2
|
|
2080
2328
|
} from "react-aria-components";
|
|
2081
|
-
import { jsx as
|
|
2082
|
-
var SegmentedControlContext =
|
|
2329
|
+
import { jsx as jsx35 } from "react/jsx-runtime";
|
|
2330
|
+
var SegmentedControlContext = createContext5({
|
|
2083
2331
|
size: "md"
|
|
2084
2332
|
});
|
|
2085
|
-
var
|
|
2333
|
+
var sizeStyles7 = {
|
|
2086
2334
|
sm: "px-2.5 py-1 text-xs",
|
|
2087
2335
|
md: "px-3 py-1.5 text-sm",
|
|
2088
2336
|
lg: "px-4 py-2 text-base"
|
|
@@ -2098,7 +2346,7 @@ function SegmentedControl({
|
|
|
2098
2346
|
...props
|
|
2099
2347
|
}) {
|
|
2100
2348
|
const isNoneMode = selectionMode === "none";
|
|
2101
|
-
return /* @__PURE__ */
|
|
2349
|
+
return /* @__PURE__ */ jsx35(SegmentedControlContext.Provider, { value: { size }, children: /* @__PURE__ */ jsx35(
|
|
2102
2350
|
AriaToggleButtonGroup,
|
|
2103
2351
|
{
|
|
2104
2352
|
...props,
|
|
@@ -2106,7 +2354,7 @@ function SegmentedControl({
|
|
|
2106
2354
|
selectedKeys: isNoneMode ? /* @__PURE__ */ new Set() : selectedKeys,
|
|
2107
2355
|
defaultSelectedKeys: isNoneMode ? void 0 : defaultSelectedKeys,
|
|
2108
2356
|
onSelectionChange: isNoneMode ? void 0 : onSelectionChange,
|
|
2109
|
-
className:
|
|
2357
|
+
className: twMerge7(
|
|
2110
2358
|
"inline-flex items-center rounded-[var(--border-radius-lg)] border border-[var(--color-border-default)] bg-[var(--color-surface-muted)] p-0.5 gap-0.5",
|
|
2111
2359
|
className
|
|
2112
2360
|
),
|
|
@@ -2118,12 +2366,12 @@ function SegmentedControlItem({
|
|
|
2118
2366
|
className,
|
|
2119
2367
|
...props
|
|
2120
2368
|
}) {
|
|
2121
|
-
const { size } =
|
|
2122
|
-
return /* @__PURE__ */
|
|
2369
|
+
const { size } = useContext5(SegmentedControlContext);
|
|
2370
|
+
return /* @__PURE__ */ jsx35(
|
|
2123
2371
|
AriaToggleButton2,
|
|
2124
2372
|
{
|
|
2125
2373
|
...props,
|
|
2126
|
-
className: ({ isSelected, isHovered, isPressed, isDisabled }) =>
|
|
2374
|
+
className: ({ isSelected, isHovered, isPressed, isDisabled }) => twMerge7(
|
|
2127
2375
|
// Base layout
|
|
2128
2376
|
"inline-flex items-center justify-center",
|
|
2129
2377
|
"rounded-[var(--border-radius-md)]",
|
|
@@ -2134,7 +2382,7 @@ function SegmentedControlItem({
|
|
|
2134
2382
|
// Disabled
|
|
2135
2383
|
isDisabled && "opacity-50 pointer-events-none",
|
|
2136
2384
|
// Size
|
|
2137
|
-
|
|
2385
|
+
sizeStyles7[size],
|
|
2138
2386
|
// Selected state
|
|
2139
2387
|
isSelected ? "bg-[var(--color-surface-default)] text-[var(--color-text-primary)] shadow-sm font-[var(--font-weight-semibold)]" : isPressed ? "bg-[var(--color-surface-subtle)] text-[var(--color-text-primary)]" : isHovered ? "bg-[var(--color-surface-subtle)] text-[var(--color-text-primary)]" : "bg-transparent text-[var(--color-text-secondary)]",
|
|
2140
2388
|
className
|
|
@@ -2153,7 +2401,7 @@ import {
|
|
|
2153
2401
|
Info as Info2,
|
|
2154
2402
|
Microscope
|
|
2155
2403
|
} from "lucide-react";
|
|
2156
|
-
import { Fragment as
|
|
2404
|
+
import { Fragment as Fragment9, jsx as jsx36, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
2157
2405
|
function getFileIcon(type, extension) {
|
|
2158
2406
|
if (type === "directory") return Folder2;
|
|
2159
2407
|
const ext = (extension ?? "").toLowerCase();
|
|
@@ -2179,7 +2427,7 @@ function FileIcon({
|
|
|
2179
2427
|
size = 16
|
|
2180
2428
|
}) {
|
|
2181
2429
|
const IconComponent = getFileIcon(type, extension);
|
|
2182
|
-
return /* @__PURE__ */
|
|
2430
|
+
return /* @__PURE__ */ jsx36(
|
|
2183
2431
|
IconComponent,
|
|
2184
2432
|
{
|
|
2185
2433
|
size,
|
|
@@ -2224,14 +2472,14 @@ function FileCard({
|
|
|
2224
2472
|
},
|
|
2225
2473
|
[onPress]
|
|
2226
2474
|
);
|
|
2227
|
-
const cardContent = /* @__PURE__ */
|
|
2228
|
-
/* @__PURE__ */
|
|
2475
|
+
const cardContent = /* @__PURE__ */ jsxs23(Fragment9, { children: [
|
|
2476
|
+
/* @__PURE__ */ jsxs23(
|
|
2229
2477
|
"div",
|
|
2230
2478
|
{
|
|
2231
2479
|
className: `shrink-0 relative overflow-hidden bg-[var(--color-neutral-900)] ${thumbnailClass}`,
|
|
2232
2480
|
children: [
|
|
2233
|
-
children ? /* @__PURE__ */
|
|
2234
|
-
onInfo && /* @__PURE__ */
|
|
2481
|
+
children ? /* @__PURE__ */ jsx36("div", { className: "h-full w-full overflow-hidden", children }) : /* @__PURE__ */ jsx36("div", { className: "flex h-full w-full items-center justify-center", children: /* @__PURE__ */ jsx36(IconComponent, { size: iconSize, className: iconColor }) }),
|
|
2482
|
+
onInfo && /* @__PURE__ */ jsx36(
|
|
2235
2483
|
"div",
|
|
2236
2484
|
{
|
|
2237
2485
|
className: [
|
|
@@ -2239,7 +2487,7 @@ function FileCard({
|
|
|
2239
2487
|
"transition-opacity duration-150",
|
|
2240
2488
|
compact ? "bottom-1.5 right-1.5" : "bottom-2 right-2"
|
|
2241
2489
|
].join(" "),
|
|
2242
|
-
children: /* @__PURE__ */
|
|
2490
|
+
children: /* @__PURE__ */ jsx36(
|
|
2243
2491
|
"span",
|
|
2244
2492
|
{
|
|
2245
2493
|
onClick: handleInfoClick,
|
|
@@ -2249,7 +2497,7 @@ function FileCard({
|
|
|
2249
2497
|
}
|
|
2250
2498
|
},
|
|
2251
2499
|
role: "presentation",
|
|
2252
|
-
children: /* @__PURE__ */
|
|
2500
|
+
children: /* @__PURE__ */ jsx36(
|
|
2253
2501
|
IconButton,
|
|
2254
2502
|
{
|
|
2255
2503
|
icon: Info2,
|
|
@@ -2267,7 +2515,7 @@ function FileCard({
|
|
|
2267
2515
|
]
|
|
2268
2516
|
}
|
|
2269
2517
|
),
|
|
2270
|
-
/* @__PURE__ */
|
|
2518
|
+
/* @__PURE__ */ jsx36(
|
|
2271
2519
|
"div",
|
|
2272
2520
|
{
|
|
2273
2521
|
className: [
|
|
@@ -2275,12 +2523,12 @@ function FileCard({
|
|
|
2275
2523
|
"bg-[var(--color-surface-default)]",
|
|
2276
2524
|
compact ? "px-2 py-1.5 rounded-b-[var(--border-radius-md)]" : "gap-0.5 px-3 py-2 rounded-b-[var(--border-radius-lg)]"
|
|
2277
2525
|
].join(" "),
|
|
2278
|
-
children: compact ? /* @__PURE__ */
|
|
2279
|
-
/* @__PURE__ */
|
|
2280
|
-
/* @__PURE__ */
|
|
2281
|
-
/* @__PURE__ */
|
|
2526
|
+
children: compact ? /* @__PURE__ */ jsx36("span", { className: "text-xs font-medium text-[var(--color-text-primary)] truncate", children: name }) : /* @__PURE__ */ jsxs23(Fragment9, { children: [
|
|
2527
|
+
/* @__PURE__ */ jsxs23("span", { className: "flex items-center gap-1.5", children: [
|
|
2528
|
+
/* @__PURE__ */ jsx36(FileIcon, { type, extension, size: 16 }),
|
|
2529
|
+
/* @__PURE__ */ jsx36("span", { className: "text-sm font-medium text-[var(--color-text-primary)] truncate", children: name })
|
|
2282
2530
|
] }),
|
|
2283
|
-
size && /* @__PURE__ */
|
|
2531
|
+
size && /* @__PURE__ */ jsx36("span", { className: "text-xs text-[var(--color-text-secondary)] tabular-nums pl-[22px]", children: size })
|
|
2284
2532
|
] })
|
|
2285
2533
|
}
|
|
2286
2534
|
)
|
|
@@ -2296,7 +2544,7 @@ function FileCard({
|
|
|
2296
2544
|
className
|
|
2297
2545
|
].filter(Boolean).join(" ");
|
|
2298
2546
|
if (href) {
|
|
2299
|
-
return /* @__PURE__ */
|
|
2547
|
+
return /* @__PURE__ */ jsx36(
|
|
2300
2548
|
"a",
|
|
2301
2549
|
{
|
|
2302
2550
|
href,
|
|
@@ -2307,7 +2555,7 @@ function FileCard({
|
|
|
2307
2555
|
);
|
|
2308
2556
|
}
|
|
2309
2557
|
if (onPress) {
|
|
2310
|
-
return /* @__PURE__ */
|
|
2558
|
+
return /* @__PURE__ */ jsx36(
|
|
2311
2559
|
"div",
|
|
2312
2560
|
{
|
|
2313
2561
|
role: "button",
|
|
@@ -2320,17 +2568,17 @@ function FileCard({
|
|
|
2320
2568
|
}
|
|
2321
2569
|
);
|
|
2322
2570
|
}
|
|
2323
|
-
return /* @__PURE__ */
|
|
2571
|
+
return /* @__PURE__ */ jsx36("div", { className: baseStyles, children: cardContent });
|
|
2324
2572
|
}
|
|
2325
2573
|
|
|
2326
2574
|
// src/components/StorageConnectionCard/StorageConnectionCard.tsx
|
|
2327
2575
|
import { useCallback as useCallback4 } from "react";
|
|
2328
2576
|
import { AlertCircle, Database, Info as Info3 } from "lucide-react";
|
|
2329
|
-
import { twMerge as
|
|
2577
|
+
import { twMerge as twMerge10 } from "tailwind-merge";
|
|
2330
2578
|
|
|
2331
2579
|
// src/components/Pill/Pill.tsx
|
|
2332
|
-
import { twMerge as
|
|
2333
|
-
import { jsx as
|
|
2580
|
+
import { twMerge as twMerge8 } from "tailwind-merge";
|
|
2581
|
+
import { jsx as jsx37 } from "react/jsx-runtime";
|
|
2334
2582
|
var HASH_PALETTE = [
|
|
2335
2583
|
"teal",
|
|
2336
2584
|
// sky
|
|
@@ -2381,10 +2629,10 @@ function resolveColor(color, name) {
|
|
|
2381
2629
|
}
|
|
2382
2630
|
function Pill({ children, color, name, className }) {
|
|
2383
2631
|
const resolved = resolveColor(color, name);
|
|
2384
|
-
return /* @__PURE__ */
|
|
2632
|
+
return /* @__PURE__ */ jsx37(
|
|
2385
2633
|
"span",
|
|
2386
2634
|
{
|
|
2387
|
-
className:
|
|
2635
|
+
className: twMerge8(
|
|
2388
2636
|
"inline-flex items-center rounded-full",
|
|
2389
2637
|
"px-2 py-0.5",
|
|
2390
2638
|
"text-[length:var(--font-size-xs)] font-[number:var(--font-weight-medium)] leading-[var(--line-height-tight)]",
|
|
@@ -2397,8 +2645,8 @@ function Pill({ children, color, name, className }) {
|
|
|
2397
2645
|
}
|
|
2398
2646
|
|
|
2399
2647
|
// src/components/Pill/GroupPill.tsx
|
|
2400
|
-
import { twMerge as
|
|
2401
|
-
import { jsx as
|
|
2648
|
+
import { twMerge as twMerge9 } from "tailwind-merge";
|
|
2649
|
+
import { jsx as jsx38, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
2402
2650
|
function GroupPill({
|
|
2403
2651
|
path,
|
|
2404
2652
|
visibleCount = 3,
|
|
@@ -2409,10 +2657,10 @@ function GroupPill({
|
|
|
2409
2657
|
const hiddenCount = Math.max(0, segments.length - visibleCount);
|
|
2410
2658
|
const hiddenSegments = segments.slice(0, hiddenCount);
|
|
2411
2659
|
const visibleSegments = segments.slice(hiddenCount);
|
|
2412
|
-
return /* @__PURE__ */
|
|
2660
|
+
return /* @__PURE__ */ jsxs24(
|
|
2413
2661
|
"span",
|
|
2414
2662
|
{
|
|
2415
|
-
className:
|
|
2663
|
+
className: twMerge9(
|
|
2416
2664
|
"inline-flex items-center gap-1",
|
|
2417
2665
|
className
|
|
2418
2666
|
),
|
|
@@ -2420,10 +2668,10 @@ function GroupPill({
|
|
|
2420
2668
|
children: [
|
|
2421
2669
|
hiddenSegments.map((segment, index) => {
|
|
2422
2670
|
const color = pillColorFromName(segment);
|
|
2423
|
-
return /* @__PURE__ */
|
|
2671
|
+
return /* @__PURE__ */ jsx38(
|
|
2424
2672
|
"span",
|
|
2425
2673
|
{
|
|
2426
|
-
className:
|
|
2674
|
+
className: twMerge9(
|
|
2427
2675
|
"inline-block size-2 shrink-0 rounded-full",
|
|
2428
2676
|
dotColorStyles[color]
|
|
2429
2677
|
),
|
|
@@ -2433,14 +2681,14 @@ function GroupPill({
|
|
|
2433
2681
|
`dot-${index}-${segment}`
|
|
2434
2682
|
);
|
|
2435
2683
|
}),
|
|
2436
|
-
visibleSegments.map((segment, index) => /* @__PURE__ */
|
|
2684
|
+
visibleSegments.map((segment, index) => /* @__PURE__ */ jsx38(Pill, { name: segment, children: segment }, `pill-${index}-${segment}`))
|
|
2437
2685
|
]
|
|
2438
2686
|
}
|
|
2439
2687
|
);
|
|
2440
2688
|
}
|
|
2441
2689
|
|
|
2442
2690
|
// src/components/StorageConnectionCard/StorageConnectionCard.tsx
|
|
2443
|
-
import { Fragment as
|
|
2691
|
+
import { Fragment as Fragment10, jsx as jsx39, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
2444
2692
|
var statusDotStyles = {
|
|
2445
2693
|
connected: "bg-[var(--color-status-success)]",
|
|
2446
2694
|
error: "border-2 border-[var(--color-status-danger)] bg-transparent",
|
|
@@ -2456,7 +2704,7 @@ function ProviderBadge({ provider }) {
|
|
|
2456
2704
|
const config = providerConfig[provider.toLowerCase()];
|
|
2457
2705
|
const label = config?.label ?? provider;
|
|
2458
2706
|
const color = config?.color ?? "neutral";
|
|
2459
|
-
return /* @__PURE__ */
|
|
2707
|
+
return /* @__PURE__ */ jsx39(Pill, { color, children: label });
|
|
2460
2708
|
}
|
|
2461
2709
|
function PreviewArea({
|
|
2462
2710
|
status = "connected",
|
|
@@ -2464,11 +2712,11 @@ function PreviewArea({
|
|
|
2464
2712
|
children
|
|
2465
2713
|
}) {
|
|
2466
2714
|
if (status === "loading") {
|
|
2467
|
-
return /* @__PURE__ */
|
|
2715
|
+
return /* @__PURE__ */ jsx39("div", { className: "flex h-full items-center justify-center", children: /* @__PURE__ */ jsx39(Spinner, { size: "lg", "aria-label": "Loading connection" }) });
|
|
2468
2716
|
}
|
|
2469
2717
|
if (status === "error") {
|
|
2470
|
-
return /* @__PURE__ */
|
|
2471
|
-
/* @__PURE__ */
|
|
2718
|
+
return /* @__PURE__ */ jsxs25("div", { className: "flex h-full flex-col items-center justify-center gap-2 bg-[var(--color-surface-danger)] px-4", children: [
|
|
2719
|
+
/* @__PURE__ */ jsx39(
|
|
2472
2720
|
Icon,
|
|
2473
2721
|
{
|
|
2474
2722
|
icon: AlertCircle,
|
|
@@ -2476,13 +2724,13 @@ function PreviewArea({
|
|
|
2476
2724
|
className: "text-[var(--color-text-danger)]"
|
|
2477
2725
|
}
|
|
2478
2726
|
),
|
|
2479
|
-
errorMessage && /* @__PURE__ */
|
|
2727
|
+
errorMessage && /* @__PURE__ */ jsx39("p", { className: "text-center text-xs text-[var(--color-text-danger)]", children: errorMessage })
|
|
2480
2728
|
] });
|
|
2481
2729
|
}
|
|
2482
2730
|
if (children) {
|
|
2483
|
-
return /* @__PURE__ */
|
|
2731
|
+
return /* @__PURE__ */ jsx39("div", { className: "h-full w-full overflow-hidden", children });
|
|
2484
2732
|
}
|
|
2485
|
-
return /* @__PURE__ */
|
|
2733
|
+
return /* @__PURE__ */ jsx39("div", { className: "flex h-full items-center justify-center", children: /* @__PURE__ */ jsx39(
|
|
2486
2734
|
Icon,
|
|
2487
2735
|
{
|
|
2488
2736
|
icon: Database,
|
|
@@ -2524,22 +2772,22 @@ function StorageConnectionCard({
|
|
|
2524
2772
|
},
|
|
2525
2773
|
[onPress]
|
|
2526
2774
|
);
|
|
2527
|
-
const cardContent = /* @__PURE__ */
|
|
2528
|
-
/* @__PURE__ */
|
|
2529
|
-
/* @__PURE__ */
|
|
2530
|
-
/* @__PURE__ */
|
|
2531
|
-
status && /* @__PURE__ */
|
|
2775
|
+
const cardContent = /* @__PURE__ */ jsxs25(Fragment10, { children: [
|
|
2776
|
+
/* @__PURE__ */ jsx39("div", { className: "aspect-[4/3] bg-[var(--color-neutral-900)] overflow-hidden rounded-t-[var(--border-radius-lg)]", children: /* @__PURE__ */ jsx39(PreviewArea, { status, errorMessage, children }) }),
|
|
2777
|
+
/* @__PURE__ */ jsxs25("div", { className: "flex flex-col gap-1.5 border-t border-[var(--color-border-default)] bg-[var(--color-surface-default)] px-3 py-2.5 rounded-b-[var(--border-radius-lg)]", children: [
|
|
2778
|
+
/* @__PURE__ */ jsxs25("div", { className: "flex items-start gap-2", children: [
|
|
2779
|
+
status && /* @__PURE__ */ jsx39(
|
|
2532
2780
|
"span",
|
|
2533
2781
|
{
|
|
2534
|
-
className:
|
|
2782
|
+
className: twMerge10(
|
|
2535
2783
|
"mt-1.5 h-2 w-2 shrink-0 rounded-full",
|
|
2536
2784
|
statusDotStyles[status]
|
|
2537
2785
|
),
|
|
2538
2786
|
"aria-label": `Status: ${status}`
|
|
2539
2787
|
}
|
|
2540
2788
|
),
|
|
2541
|
-
/* @__PURE__ */
|
|
2542
|
-
onInfo && /* @__PURE__ */
|
|
2789
|
+
/* @__PURE__ */ jsx39("span", { className: "min-w-0 flex-1 line-clamp-2 text-sm font-medium text-[var(--color-text-primary)]", children: name }),
|
|
2790
|
+
onInfo && /* @__PURE__ */ jsx39(
|
|
2543
2791
|
"span",
|
|
2544
2792
|
{
|
|
2545
2793
|
onClick: handleInfoPress,
|
|
@@ -2549,7 +2797,7 @@ function StorageConnectionCard({
|
|
|
2549
2797
|
}
|
|
2550
2798
|
},
|
|
2551
2799
|
role: "presentation",
|
|
2552
|
-
children: /* @__PURE__ */
|
|
2800
|
+
children: /* @__PURE__ */ jsx39(
|
|
2553
2801
|
IconButton,
|
|
2554
2802
|
{
|
|
2555
2803
|
icon: Info3,
|
|
@@ -2563,10 +2811,10 @@ function StorageConnectionCard({
|
|
|
2563
2811
|
}
|
|
2564
2812
|
)
|
|
2565
2813
|
] }),
|
|
2566
|
-
(provider || imageCount != null && (!status || status === "connected")) && /* @__PURE__ */
|
|
2567
|
-
provider && /* @__PURE__ */
|
|
2568
|
-
provider && region && /* @__PURE__ */
|
|
2569
|
-
imageCount != null && (!status || status === "connected") && /* @__PURE__ */
|
|
2814
|
+
(provider || imageCount != null && (!status || status === "connected")) && /* @__PURE__ */ jsxs25("div", { className: twMerge10("flex items-center gap-2", status && "pl-4"), children: [
|
|
2815
|
+
provider && /* @__PURE__ */ jsx39(ProviderBadge, { provider }),
|
|
2816
|
+
provider && region && /* @__PURE__ */ jsx39("span", { className: "shrink-0 text-xs text-[var(--color-text-secondary)]", children: region }),
|
|
2817
|
+
imageCount != null && (!status || status === "connected") && /* @__PURE__ */ jsxs25("span", { className: "ml-auto shrink-0 text-xs tabular-nums text-[var(--color-text-secondary)]", children: [
|
|
2570
2818
|
imageCount,
|
|
2571
2819
|
" ",
|
|
2572
2820
|
imageCount === 1 ? "image" : "images"
|
|
@@ -2574,7 +2822,7 @@ function StorageConnectionCard({
|
|
|
2574
2822
|
] })
|
|
2575
2823
|
] })
|
|
2576
2824
|
] });
|
|
2577
|
-
const baseStyles =
|
|
2825
|
+
const baseStyles = twMerge10(
|
|
2578
2826
|
"flex flex-col overflow-hidden rounded-[var(--border-radius-lg)]",
|
|
2579
2827
|
"border border-[var(--color-border-default)]",
|
|
2580
2828
|
"shadow-sm transition-all",
|
|
@@ -2583,10 +2831,10 @@ function StorageConnectionCard({
|
|
|
2583
2831
|
className
|
|
2584
2832
|
);
|
|
2585
2833
|
if (href) {
|
|
2586
|
-
return /* @__PURE__ */
|
|
2834
|
+
return /* @__PURE__ */ jsx39("a", { href, className: twMerge10(baseStyles, "no-underline"), children: cardContent });
|
|
2587
2835
|
}
|
|
2588
2836
|
if (onPress) {
|
|
2589
|
-
return /* @__PURE__ */
|
|
2837
|
+
return /* @__PURE__ */ jsx39(
|
|
2590
2838
|
"div",
|
|
2591
2839
|
{
|
|
2592
2840
|
role: "button",
|
|
@@ -2598,12 +2846,12 @@ function StorageConnectionCard({
|
|
|
2598
2846
|
}
|
|
2599
2847
|
);
|
|
2600
2848
|
}
|
|
2601
|
-
return /* @__PURE__ */
|
|
2849
|
+
return /* @__PURE__ */ jsx39("div", { className: baseStyles, children: cardContent });
|
|
2602
2850
|
}
|
|
2603
2851
|
|
|
2604
2852
|
// src/components/Badge/Badge.tsx
|
|
2605
|
-
import { twMerge as
|
|
2606
|
-
import { jsx as
|
|
2853
|
+
import { twMerge as twMerge11 } from "tailwind-merge";
|
|
2854
|
+
import { jsx as jsx40, jsxs as jsxs26 } from "react/jsx-runtime";
|
|
2607
2855
|
var variantStyles4 = {
|
|
2608
2856
|
neutral: "bg-[var(--color-badge-neutral-bg)] text-[var(--color-badge-neutral-text)]",
|
|
2609
2857
|
purple: "bg-[var(--color-badge-purple-bg)] text-[var(--color-badge-purple-text)]",
|
|
@@ -2613,7 +2861,7 @@ var variantStyles4 = {
|
|
|
2613
2861
|
green: "bg-[var(--color-badge-green-bg)] text-[var(--color-badge-green-text)]",
|
|
2614
2862
|
amber: "bg-[var(--color-badge-amber-bg)] text-[var(--color-badge-amber-text)]"
|
|
2615
2863
|
};
|
|
2616
|
-
var
|
|
2864
|
+
var sizeStyles8 = {
|
|
2617
2865
|
sm: "px-1.5 py-0.5",
|
|
2618
2866
|
md: "px-2 py-0.5"
|
|
2619
2867
|
};
|
|
@@ -2628,18 +2876,18 @@ function Badge({
|
|
|
2628
2876
|
icon: IconComponent,
|
|
2629
2877
|
className
|
|
2630
2878
|
}) {
|
|
2631
|
-
return /* @__PURE__ */
|
|
2879
|
+
return /* @__PURE__ */ jsxs26(
|
|
2632
2880
|
"span",
|
|
2633
2881
|
{
|
|
2634
|
-
className:
|
|
2882
|
+
className: twMerge11(
|
|
2635
2883
|
"inline-flex items-center gap-1 rounded-[var(--border-radius-full)]",
|
|
2636
2884
|
"text-[length:var(--font-size-xs)] font-[number:var(--font-weight-medium)] leading-[var(--line-height-tight)]",
|
|
2637
2885
|
variantStyles4[variant],
|
|
2638
|
-
|
|
2886
|
+
sizeStyles8[size],
|
|
2639
2887
|
className
|
|
2640
2888
|
),
|
|
2641
2889
|
children: [
|
|
2642
|
-
IconComponent && /* @__PURE__ */
|
|
2890
|
+
IconComponent && /* @__PURE__ */ jsx40(IconComponent, { size: iconSizeMap4[size], "aria-hidden": "true" }),
|
|
2643
2891
|
children
|
|
2644
2892
|
]
|
|
2645
2893
|
}
|
|
@@ -2648,8 +2896,8 @@ function Badge({
|
|
|
2648
2896
|
|
|
2649
2897
|
// src/components/Card/Card.tsx
|
|
2650
2898
|
import { useCallback as useCallback5 } from "react";
|
|
2651
|
-
import { twMerge as
|
|
2652
|
-
import { Fragment as
|
|
2899
|
+
import { twMerge as twMerge12 } from "tailwind-merge";
|
|
2900
|
+
import { Fragment as Fragment11, jsx as jsx41, jsxs as jsxs27 } from "react/jsx-runtime";
|
|
2653
2901
|
var paddingStyles = {
|
|
2654
2902
|
none: "p-0",
|
|
2655
2903
|
sm: "p-3",
|
|
@@ -2667,7 +2915,7 @@ function Card({
|
|
|
2667
2915
|
className
|
|
2668
2916
|
}) {
|
|
2669
2917
|
const isInteractive = interactive || !!href || !!onPress;
|
|
2670
|
-
const containerClass =
|
|
2918
|
+
const containerClass = twMerge12(
|
|
2671
2919
|
"bg-[var(--color-surface-default)] border border-[var(--color-border-default)] rounded-[var(--border-radius-lg)] overflow-hidden shadow-sm",
|
|
2672
2920
|
isInteractive && "transition-all hover:shadow-md hover:border-[var(--color-border-focus)] cursor-pointer",
|
|
2673
2921
|
(href || onPress) && "block focus-visible:ring-2 focus-visible:ring-[var(--color-border-focus)] focus-visible:ring-offset-2 outline-none",
|
|
@@ -2682,22 +2930,22 @@ function Card({
|
|
|
2682
2930
|
},
|
|
2683
2931
|
[onPress]
|
|
2684
2932
|
);
|
|
2685
|
-
const content = /* @__PURE__ */
|
|
2686
|
-
header && /* @__PURE__ */
|
|
2933
|
+
const content = /* @__PURE__ */ jsxs27(Fragment11, { children: [
|
|
2934
|
+
header && /* @__PURE__ */ jsx41(
|
|
2687
2935
|
"div",
|
|
2688
2936
|
{
|
|
2689
|
-
className:
|
|
2937
|
+
className: twMerge12(
|
|
2690
2938
|
"border-b border-[var(--color-border-default)]",
|
|
2691
2939
|
paddingStyles[padding]
|
|
2692
2940
|
),
|
|
2693
2941
|
children: header
|
|
2694
2942
|
}
|
|
2695
2943
|
),
|
|
2696
|
-
/* @__PURE__ */
|
|
2697
|
-
footer && /* @__PURE__ */
|
|
2944
|
+
/* @__PURE__ */ jsx41("div", { className: paddingStyles[padding], children }),
|
|
2945
|
+
footer && /* @__PURE__ */ jsx41(
|
|
2698
2946
|
"div",
|
|
2699
2947
|
{
|
|
2700
|
-
className:
|
|
2948
|
+
className: twMerge12(
|
|
2701
2949
|
"border-t border-[var(--color-border-default)]",
|
|
2702
2950
|
paddingStyles[padding]
|
|
2703
2951
|
),
|
|
@@ -2706,10 +2954,10 @@ function Card({
|
|
|
2706
2954
|
)
|
|
2707
2955
|
] });
|
|
2708
2956
|
if (href) {
|
|
2709
|
-
return /* @__PURE__ */
|
|
2957
|
+
return /* @__PURE__ */ jsx41("a", { href, className: containerClass, children: content });
|
|
2710
2958
|
}
|
|
2711
2959
|
if (onPress) {
|
|
2712
|
-
return /* @__PURE__ */
|
|
2960
|
+
return /* @__PURE__ */ jsx41(
|
|
2713
2961
|
"div",
|
|
2714
2962
|
{
|
|
2715
2963
|
role: "button",
|
|
@@ -2721,13 +2969,13 @@ function Card({
|
|
|
2721
2969
|
}
|
|
2722
2970
|
);
|
|
2723
2971
|
}
|
|
2724
|
-
return /* @__PURE__ */
|
|
2972
|
+
return /* @__PURE__ */ jsx41("div", { className: containerClass, children: content });
|
|
2725
2973
|
}
|
|
2726
2974
|
|
|
2727
2975
|
// src/components/DeltaIndicator/DeltaIndicator.tsx
|
|
2728
2976
|
import { ArrowUp, ArrowDown, Minus } from "lucide-react";
|
|
2729
|
-
import { twMerge as
|
|
2730
|
-
import { jsx as
|
|
2977
|
+
import { twMerge as twMerge13 } from "tailwind-merge";
|
|
2978
|
+
import { jsx as jsx42, jsxs as jsxs28 } from "react/jsx-runtime";
|
|
2731
2979
|
function getDirection(current, previous) {
|
|
2732
2980
|
const diff = current - previous;
|
|
2733
2981
|
if (diff > 0) return "increase";
|
|
@@ -2780,16 +3028,16 @@ function DeltaIndicator({
|
|
|
2780
3028
|
className
|
|
2781
3029
|
}) {
|
|
2782
3030
|
if (unavailable) {
|
|
2783
|
-
return /* @__PURE__ */
|
|
3031
|
+
return /* @__PURE__ */ jsxs28(
|
|
2784
3032
|
"span",
|
|
2785
3033
|
{
|
|
2786
|
-
className:
|
|
3034
|
+
className: twMerge13(
|
|
2787
3035
|
"inline-flex items-center gap-1 font-[number:var(--font-weight-medium)]",
|
|
2788
3036
|
"text-[var(--color-text-tertiary)]",
|
|
2789
3037
|
className
|
|
2790
3038
|
),
|
|
2791
3039
|
children: [
|
|
2792
|
-
label && /* @__PURE__ */
|
|
3040
|
+
label && /* @__PURE__ */ jsx42("span", { className: "text-[length:var(--font-size-sm)] text-[var(--color-text-secondary)] mr-1", children: label }),
|
|
2793
3041
|
unavailableText
|
|
2794
3042
|
]
|
|
2795
3043
|
}
|
|
@@ -2819,10 +3067,10 @@ function DeltaIndicator({
|
|
|
2819
3067
|
}
|
|
2820
3068
|
}
|
|
2821
3069
|
const isPill = mode === "pill";
|
|
2822
|
-
return /* @__PURE__ */
|
|
3070
|
+
return /* @__PURE__ */ jsxs28(
|
|
2823
3071
|
"span",
|
|
2824
3072
|
{
|
|
2825
|
-
className:
|
|
3073
|
+
className: twMerge13(
|
|
2826
3074
|
"inline-flex items-center gap-1 font-[number:var(--font-weight-medium)]",
|
|
2827
3075
|
colorStyles2,
|
|
2828
3076
|
isPill && [
|
|
@@ -2833,8 +3081,8 @@ function DeltaIndicator({
|
|
|
2833
3081
|
className
|
|
2834
3082
|
),
|
|
2835
3083
|
children: [
|
|
2836
|
-
label && /* @__PURE__ */
|
|
2837
|
-
/* @__PURE__ */
|
|
3084
|
+
label && /* @__PURE__ */ jsx42("span", { className: "text-[length:var(--font-size-sm)] text-[var(--color-text-secondary)] mr-1", children: label }),
|
|
3085
|
+
/* @__PURE__ */ jsx42(IconComponent, { size: 14, "aria-hidden": true }),
|
|
2838
3086
|
valueText
|
|
2839
3087
|
]
|
|
2840
3088
|
}
|
|
@@ -2842,8 +3090,8 @@ function DeltaIndicator({
|
|
|
2842
3090
|
}
|
|
2843
3091
|
|
|
2844
3092
|
// src/components/ProgressBar/ProgressBar.tsx
|
|
2845
|
-
import { twMerge as
|
|
2846
|
-
import { jsx as
|
|
3093
|
+
import { twMerge as twMerge14 } from "tailwind-merge";
|
|
3094
|
+
import { jsx as jsx43, jsxs as jsxs29 } from "react/jsx-runtime";
|
|
2847
3095
|
var fillStyles = {
|
|
2848
3096
|
brand: "bg-[var(--color-progress-fill)]",
|
|
2849
3097
|
success: "bg-[var(--color-progress-fill-success)]",
|
|
@@ -2851,7 +3099,7 @@ var fillStyles = {
|
|
|
2851
3099
|
danger: "bg-[var(--color-progress-fill-danger)]",
|
|
2852
3100
|
neutral: "bg-[var(--color-text-secondary)]"
|
|
2853
3101
|
};
|
|
2854
|
-
var
|
|
3102
|
+
var sizeStyles9 = {
|
|
2855
3103
|
sm: "h-1.5",
|
|
2856
3104
|
md: "h-3",
|
|
2857
3105
|
lg: "h-4"
|
|
@@ -2866,12 +3114,12 @@ function ProgressBar({
|
|
|
2866
3114
|
className
|
|
2867
3115
|
}) {
|
|
2868
3116
|
const clampedValue = Math.min(100, Math.max(0, value));
|
|
2869
|
-
return /* @__PURE__ */
|
|
2870
|
-
(label || description || showValue) && /* @__PURE__ */
|
|
2871
|
-
/* @__PURE__ */
|
|
2872
|
-
/* @__PURE__ */
|
|
3117
|
+
return /* @__PURE__ */ jsxs29("div", { className: twMerge14("w-full", className), children: [
|
|
3118
|
+
(label || description || showValue) && /* @__PURE__ */ jsxs29("div", { className: "flex items-center justify-between mb-2", children: [
|
|
3119
|
+
/* @__PURE__ */ jsx43("span", { className: "text-[length:var(--font-size-sm)] font-[number:var(--font-weight-medium)] text-[var(--color-text-primary)]", children: label }),
|
|
3120
|
+
/* @__PURE__ */ jsx43("span", { className: "text-[length:var(--font-size-sm)] text-[var(--color-text-secondary)]", children: description ?? (showValue ? `${clampedValue}%` : null) })
|
|
2873
3121
|
] }),
|
|
2874
|
-
/* @__PURE__ */
|
|
3122
|
+
/* @__PURE__ */ jsx43(
|
|
2875
3123
|
"div",
|
|
2876
3124
|
{
|
|
2877
3125
|
role: "progressbar",
|
|
@@ -2879,14 +3127,14 @@ function ProgressBar({
|
|
|
2879
3127
|
"aria-valuemin": 0,
|
|
2880
3128
|
"aria-valuemax": 100,
|
|
2881
3129
|
"aria-label": label ?? "Progress",
|
|
2882
|
-
className:
|
|
3130
|
+
className: twMerge14(
|
|
2883
3131
|
"w-full rounded-[var(--border-radius-full)] bg-[var(--color-progress-track)]",
|
|
2884
|
-
|
|
3132
|
+
sizeStyles9[size]
|
|
2885
3133
|
),
|
|
2886
|
-
children: /* @__PURE__ */
|
|
3134
|
+
children: /* @__PURE__ */ jsx43(
|
|
2887
3135
|
"div",
|
|
2888
3136
|
{
|
|
2889
|
-
className:
|
|
3137
|
+
className: twMerge14(
|
|
2890
3138
|
"h-full rounded-[var(--border-radius-full)] transition-all duration-300",
|
|
2891
3139
|
fillStyles[variant]
|
|
2892
3140
|
),
|
|
@@ -2907,8 +3155,8 @@ import {
|
|
|
2907
3155
|
CheckCircle2,
|
|
2908
3156
|
X as X3
|
|
2909
3157
|
} from "lucide-react";
|
|
2910
|
-
import { twMerge as
|
|
2911
|
-
import { jsx as
|
|
3158
|
+
import { twMerge as twMerge15 } from "tailwind-merge";
|
|
3159
|
+
import { jsx as jsx44, jsxs as jsxs30 } from "react/jsx-runtime";
|
|
2912
3160
|
var variantConfig2 = {
|
|
2913
3161
|
info: {
|
|
2914
3162
|
icon: Info4,
|
|
@@ -2952,40 +3200,40 @@ function Banner({
|
|
|
2952
3200
|
setDismissed(true);
|
|
2953
3201
|
onDismiss?.();
|
|
2954
3202
|
};
|
|
2955
|
-
return /* @__PURE__ */
|
|
3203
|
+
return /* @__PURE__ */ jsxs30(
|
|
2956
3204
|
"div",
|
|
2957
3205
|
{
|
|
2958
3206
|
role: config.role,
|
|
2959
|
-
className:
|
|
3207
|
+
className: twMerge15(
|
|
2960
3208
|
"flex items-start gap-[var(--spacing-3)] rounded-[var(--border-radius-lg)] border px-[var(--spacing-4)] py-[var(--spacing-3)]",
|
|
2961
3209
|
"text-[length:var(--font-size-sm)]",
|
|
2962
3210
|
config.containerClass,
|
|
2963
3211
|
className
|
|
2964
3212
|
),
|
|
2965
3213
|
children: [
|
|
2966
|
-
/* @__PURE__ */
|
|
3214
|
+
/* @__PURE__ */ jsx44(
|
|
2967
3215
|
IconComponent,
|
|
2968
3216
|
{
|
|
2969
3217
|
size: 20,
|
|
2970
|
-
className:
|
|
3218
|
+
className: twMerge15("shrink-0 mt-0.5", config.iconClass),
|
|
2971
3219
|
"aria-hidden": "true"
|
|
2972
3220
|
}
|
|
2973
3221
|
),
|
|
2974
|
-
/* @__PURE__ */
|
|
2975
|
-
title && /* @__PURE__ */
|
|
3222
|
+
/* @__PURE__ */ jsxs30("div", { className: "flex-1", children: [
|
|
3223
|
+
title && /* @__PURE__ */ jsxs30("span", { className: "font-[number:var(--font-weight-medium)]", children: [
|
|
2976
3224
|
title,
|
|
2977
3225
|
" \u2014 "
|
|
2978
3226
|
] }),
|
|
2979
3227
|
children
|
|
2980
3228
|
] }),
|
|
2981
|
-
dismissible && /* @__PURE__ */
|
|
3229
|
+
dismissible && /* @__PURE__ */ jsx44(
|
|
2982
3230
|
"button",
|
|
2983
3231
|
{
|
|
2984
3232
|
type: "button",
|
|
2985
3233
|
onClick: handleDismiss,
|
|
2986
3234
|
className: "shrink-0 rounded-[var(--border-radius-sm)] p-0.5 opacity-70 hover:opacity-100 transition-opacity outline-none focus-visible:ring-2 focus-visible:ring-current",
|
|
2987
3235
|
"aria-label": "Dismiss",
|
|
2988
|
-
children: /* @__PURE__ */
|
|
3236
|
+
children: /* @__PURE__ */ jsx44(X3, { size: 16, "aria-hidden": "true" })
|
|
2989
3237
|
}
|
|
2990
3238
|
)
|
|
2991
3239
|
]
|
|
@@ -2994,8 +3242,8 @@ function Banner({
|
|
|
2994
3242
|
}
|
|
2995
3243
|
|
|
2996
3244
|
// src/components/MetricCard/MetricCard.tsx
|
|
2997
|
-
import { twMerge as
|
|
2998
|
-
import { Fragment as
|
|
3245
|
+
import { twMerge as twMerge16 } from "tailwind-merge";
|
|
3246
|
+
import { Fragment as Fragment12, jsx as jsx45, jsxs as jsxs31 } from "react/jsx-runtime";
|
|
2999
3247
|
var sizeConfig = {
|
|
3000
3248
|
sm: {
|
|
3001
3249
|
padding: "p-3",
|
|
@@ -3017,59 +3265,59 @@ function MetricCard({
|
|
|
3017
3265
|
className
|
|
3018
3266
|
}) {
|
|
3019
3267
|
const config = sizeConfig[size];
|
|
3020
|
-
const containerClass =
|
|
3268
|
+
const containerClass = twMerge16(
|
|
3021
3269
|
"bg-[var(--color-surface-default)] border border-[var(--color-border-default)] rounded-[var(--border-radius-lg)] shadow-sm",
|
|
3022
3270
|
config.padding,
|
|
3023
3271
|
href && "block transition-shadow hover:shadow-md hover:border-[var(--color-border-focus)] focus-visible:ring-2 focus-visible:ring-[var(--color-border-focus)] focus-visible:ring-offset-2 outline-none",
|
|
3024
3272
|
className
|
|
3025
3273
|
);
|
|
3026
|
-
const content = /* @__PURE__ */
|
|
3027
|
-
/* @__PURE__ */
|
|
3028
|
-
/* @__PURE__ */
|
|
3274
|
+
const content = /* @__PURE__ */ jsxs31(Fragment12, { children: [
|
|
3275
|
+
/* @__PURE__ */ jsx45("div", { className: twMerge16(config.labelClass, "text-[var(--color-text-secondary)]"), children: label }),
|
|
3276
|
+
/* @__PURE__ */ jsx45(
|
|
3029
3277
|
"div",
|
|
3030
3278
|
{
|
|
3031
|
-
className:
|
|
3279
|
+
className: twMerge16(
|
|
3032
3280
|
config.valueClass,
|
|
3033
3281
|
"font-[number:var(--font-weight-semibold)] text-[var(--color-text-primary)] mt-1 tabular-nums"
|
|
3034
3282
|
),
|
|
3035
3283
|
children: value
|
|
3036
3284
|
}
|
|
3037
3285
|
),
|
|
3038
|
-
secondary && /* @__PURE__ */
|
|
3286
|
+
secondary && /* @__PURE__ */ jsx45("div", { className: "mt-1 text-sm", children: secondary })
|
|
3039
3287
|
] });
|
|
3040
3288
|
if (href) {
|
|
3041
|
-
return /* @__PURE__ */
|
|
3289
|
+
return /* @__PURE__ */ jsx45("a", { href, className: containerClass, children: content });
|
|
3042
3290
|
}
|
|
3043
|
-
return /* @__PURE__ */
|
|
3291
|
+
return /* @__PURE__ */ jsx45("div", { className: containerClass, children: content });
|
|
3044
3292
|
}
|
|
3045
3293
|
|
|
3046
3294
|
// src/components/SectionHeader/SectionHeader.tsx
|
|
3047
|
-
import { twMerge as
|
|
3048
|
-
import { jsx as
|
|
3295
|
+
import { twMerge as twMerge17 } from "tailwind-merge";
|
|
3296
|
+
import { jsx as jsx46, jsxs as jsxs32 } from "react/jsx-runtime";
|
|
3049
3297
|
function SectionHeader({
|
|
3050
3298
|
title,
|
|
3051
3299
|
children,
|
|
3052
3300
|
className
|
|
3053
3301
|
}) {
|
|
3054
|
-
return /* @__PURE__ */
|
|
3302
|
+
return /* @__PURE__ */ jsxs32(
|
|
3055
3303
|
"div",
|
|
3056
3304
|
{
|
|
3057
|
-
className:
|
|
3305
|
+
className: twMerge17(
|
|
3058
3306
|
"flex flex-wrap items-center gap-[var(--spacing-3)] py-[var(--spacing-4)]",
|
|
3059
3307
|
className
|
|
3060
3308
|
),
|
|
3061
3309
|
children: [
|
|
3062
|
-
/* @__PURE__ */
|
|
3063
|
-
children && /* @__PURE__ */
|
|
3310
|
+
/* @__PURE__ */ jsx46(H2, { children: title }),
|
|
3311
|
+
children && /* @__PURE__ */ jsx46("div", { className: "ml-auto flex flex-wrap items-center gap-[var(--spacing-2)]", children })
|
|
3064
3312
|
]
|
|
3065
3313
|
}
|
|
3066
3314
|
);
|
|
3067
3315
|
}
|
|
3068
3316
|
|
|
3069
3317
|
// src/components/FormWizard/FormWizard.tsx
|
|
3070
|
-
import { createContext as
|
|
3071
|
-
import { jsx as
|
|
3072
|
-
var FormWizardContext =
|
|
3318
|
+
import { createContext as createContext6, useContext as useContext6, useCallback as useCallback6, useMemo } from "react";
|
|
3319
|
+
import { jsx as jsx47 } from "react/jsx-runtime";
|
|
3320
|
+
var FormWizardContext = createContext6({
|
|
3073
3321
|
currentStep: 0,
|
|
3074
3322
|
totalSteps: 1,
|
|
3075
3323
|
canGoBack: false,
|
|
@@ -3078,7 +3326,7 @@ var FormWizardContext = createContext5({
|
|
|
3078
3326
|
isLastStep: true
|
|
3079
3327
|
});
|
|
3080
3328
|
function useFormWizard() {
|
|
3081
|
-
return
|
|
3329
|
+
return useContext6(FormWizardContext);
|
|
3082
3330
|
}
|
|
3083
3331
|
function FormWizard({
|
|
3084
3332
|
currentStep,
|
|
@@ -3103,13 +3351,13 @@ function FormWizard({
|
|
|
3103
3351
|
}),
|
|
3104
3352
|
[currentStep, totalSteps, canGoBack, goBack, isLastStep]
|
|
3105
3353
|
);
|
|
3106
|
-
return /* @__PURE__ */
|
|
3354
|
+
return /* @__PURE__ */ jsx47(FormWizardContext.Provider, { value, children });
|
|
3107
3355
|
}
|
|
3108
3356
|
|
|
3109
3357
|
// src/components/FormWizard/FormWizardProgress.tsx
|
|
3110
|
-
import { jsx as
|
|
3358
|
+
import { jsx as jsx48, jsxs as jsxs33 } from "react/jsx-runtime";
|
|
3111
3359
|
function CheckIcon2() {
|
|
3112
|
-
return /* @__PURE__ */
|
|
3360
|
+
return /* @__PURE__ */ jsx48(
|
|
3113
3361
|
"svg",
|
|
3114
3362
|
{
|
|
3115
3363
|
"aria-hidden": "true",
|
|
@@ -3120,24 +3368,24 @@ function CheckIcon2() {
|
|
|
3120
3368
|
strokeWidth: "2",
|
|
3121
3369
|
strokeLinecap: "round",
|
|
3122
3370
|
strokeLinejoin: "round",
|
|
3123
|
-
children: /* @__PURE__ */
|
|
3371
|
+
children: /* @__PURE__ */ jsx48("path", { d: "M3 8.5l3.5 3.5 6.5-7" })
|
|
3124
3372
|
}
|
|
3125
3373
|
);
|
|
3126
3374
|
}
|
|
3127
3375
|
function FormWizardProgress({ labels }) {
|
|
3128
3376
|
const { currentStep, totalSteps } = useFormWizard();
|
|
3129
|
-
return /* @__PURE__ */
|
|
3377
|
+
return /* @__PURE__ */ jsx48("nav", { "aria-label": "Form progress", children: /* @__PURE__ */ jsx48("ol", { className: "flex items-start", role: "list", children: labels.map((label, index) => {
|
|
3130
3378
|
const isCompleted = index < currentStep;
|
|
3131
3379
|
const isCurrent = index === currentStep;
|
|
3132
3380
|
const isFuture = index > currentStep;
|
|
3133
|
-
return /* @__PURE__ */
|
|
3381
|
+
return /* @__PURE__ */ jsxs33(
|
|
3134
3382
|
"li",
|
|
3135
3383
|
{
|
|
3136
3384
|
className: "flex flex-1 flex-col items-center",
|
|
3137
3385
|
"aria-current": isCurrent ? "step" : void 0,
|
|
3138
3386
|
children: [
|
|
3139
|
-
/* @__PURE__ */
|
|
3140
|
-
index > 0 ? /* @__PURE__ */
|
|
3387
|
+
/* @__PURE__ */ jsxs33("div", { className: "flex w-full items-center", children: [
|
|
3388
|
+
index > 0 ? /* @__PURE__ */ jsx48(
|
|
3141
3389
|
"div",
|
|
3142
3390
|
{
|
|
3143
3391
|
"aria-hidden": "true",
|
|
@@ -3146,8 +3394,8 @@ function FormWizardProgress({ labels }) {
|
|
|
3146
3394
|
index <= currentStep ? "bg-[var(--color-brand-primary)]" : "bg-[var(--color-border-default)]"
|
|
3147
3395
|
].join(" ")
|
|
3148
3396
|
}
|
|
3149
|
-
) : /* @__PURE__ */
|
|
3150
|
-
/* @__PURE__ */
|
|
3397
|
+
) : /* @__PURE__ */ jsx48("div", { className: "flex-1", "aria-hidden": "true" }),
|
|
3398
|
+
/* @__PURE__ */ jsx48(
|
|
3151
3399
|
"div",
|
|
3152
3400
|
{
|
|
3153
3401
|
className: [
|
|
@@ -3159,10 +3407,10 @@ function FormWizardProgress({ labels }) {
|
|
|
3159
3407
|
isFuture ? "border-2 border-[var(--color-border-default)] bg-[var(--color-surface-default)] text-[var(--color-text-tertiary)]" : ""
|
|
3160
3408
|
].join(" "),
|
|
3161
3409
|
"aria-hidden": "true",
|
|
3162
|
-
children: isCompleted ? /* @__PURE__ */
|
|
3410
|
+
children: isCompleted ? /* @__PURE__ */ jsx48(CheckIcon2, {}) : index + 1
|
|
3163
3411
|
}
|
|
3164
3412
|
),
|
|
3165
|
-
index < totalSteps - 1 ? /* @__PURE__ */
|
|
3413
|
+
index < totalSteps - 1 ? /* @__PURE__ */ jsx48(
|
|
3166
3414
|
"div",
|
|
3167
3415
|
{
|
|
3168
3416
|
"aria-hidden": "true",
|
|
@@ -3171,9 +3419,9 @@ function FormWizardProgress({ labels }) {
|
|
|
3171
3419
|
index < currentStep ? "bg-[var(--color-brand-primary)]" : "bg-[var(--color-border-default)]"
|
|
3172
3420
|
].join(" ")
|
|
3173
3421
|
}
|
|
3174
|
-
) : /* @__PURE__ */
|
|
3422
|
+
) : /* @__PURE__ */ jsx48("div", { className: "flex-1", "aria-hidden": "true" })
|
|
3175
3423
|
] }),
|
|
3176
|
-
/* @__PURE__ */
|
|
3424
|
+
/* @__PURE__ */ jsx48(
|
|
3177
3425
|
"span",
|
|
3178
3426
|
{
|
|
3179
3427
|
className: [
|
|
@@ -3191,15 +3439,15 @@ function FormWizardProgress({ labels }) {
|
|
|
3191
3439
|
}
|
|
3192
3440
|
|
|
3193
3441
|
// src/components/FormWizard/FormWizardNav.tsx
|
|
3194
|
-
import { jsx as
|
|
3442
|
+
import { jsx as jsx49, jsxs as jsxs34 } from "react/jsx-runtime";
|
|
3195
3443
|
function FormWizardNav({
|
|
3196
3444
|
onNext,
|
|
3197
3445
|
isSubmitting = false,
|
|
3198
3446
|
submitLabel = "Submit"
|
|
3199
3447
|
}) {
|
|
3200
3448
|
const { canGoBack, goBack, isLastStep } = useFormWizard();
|
|
3201
|
-
return /* @__PURE__ */
|
|
3202
|
-
canGoBack && /* @__PURE__ */
|
|
3449
|
+
return /* @__PURE__ */ jsxs34("div", { className: "flex items-center justify-end gap-[var(--spacing-3)]", children: [
|
|
3450
|
+
canGoBack && /* @__PURE__ */ jsx49(
|
|
3203
3451
|
Button,
|
|
3204
3452
|
{
|
|
3205
3453
|
variant: "secondary",
|
|
@@ -3209,7 +3457,7 @@ function FormWizardNav({
|
|
|
3209
3457
|
children: "Back"
|
|
3210
3458
|
}
|
|
3211
3459
|
),
|
|
3212
|
-
/* @__PURE__ */
|
|
3460
|
+
/* @__PURE__ */ jsx49(
|
|
3213
3461
|
Button,
|
|
3214
3462
|
{
|
|
3215
3463
|
variant: "primary",
|
|
@@ -3654,6 +3902,11 @@ export {
|
|
|
3654
3902
|
LineHeightTight,
|
|
3655
3903
|
Link,
|
|
3656
3904
|
Menu,
|
|
3905
|
+
MenuCheckboxItem,
|
|
3906
|
+
MenuHeader,
|
|
3907
|
+
MenuItem,
|
|
3908
|
+
MenuSection,
|
|
3909
|
+
MenuSeparator,
|
|
3657
3910
|
MetricCard,
|
|
3658
3911
|
Pill,
|
|
3659
3912
|
Popover3 as Popover,
|
|
@@ -3689,6 +3942,8 @@ export {
|
|
|
3689
3942
|
Tabs,
|
|
3690
3943
|
ToastProvider,
|
|
3691
3944
|
ToggleButton,
|
|
3945
|
+
ToggleButtonGroup,
|
|
3946
|
+
ToggleButtonGroupItem,
|
|
3692
3947
|
Tooltip,
|
|
3693
3948
|
Tree,
|
|
3694
3949
|
Tab2 as UnstyledTab,
|