@cytario/design 1.15.0 → 1.16.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.js CHANGED
@@ -1600,27 +1600,28 @@ import {
1600
1600
  Popover as Popover2
1601
1601
  } from "react-aria-components";
1602
1602
  import { jsx as jsx25, jsxs as jsxs18 } from "react/jsx-runtime";
1603
- function Menu({ items, children, className }) {
1603
+ var popoverStyles = [
1604
+ "bg-[var(--color-surface-default)] rounded-[var(--border-radius-md)]",
1605
+ "shadow-lg border border-[var(--color-border-default)]",
1606
+ "py-1 min-w-48",
1607
+ "entering:animate-in entering:fade-in entering:zoom-in-95",
1608
+ "exiting:animate-out exiting:fade-out exiting:zoom-out-95"
1609
+ ].join(" ");
1610
+ function Menu({ items, content, children, onAction, className }) {
1604
1611
  return /* @__PURE__ */ jsxs18(MenuTrigger, { children: [
1605
1612
  children,
1606
1613
  /* @__PURE__ */ jsx25(
1607
1614
  Popover2,
1608
1615
  {
1609
- className: [
1610
- "bg-[var(--color-surface-default)] rounded-[var(--border-radius-md)]",
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(
1616
+ className: [popoverStyles, className].filter(Boolean).join(" "),
1617
+ children: items ? /* @__PURE__ */ jsx25(
1618
1618
  AriaMenu,
1619
1619
  {
1620
1620
  items,
1621
1621
  onAction: (key) => {
1622
1622
  const item = items.find((i) => i.id === key);
1623
1623
  item?.onAction?.();
1624
+ onAction?.(key);
1624
1625
  },
1625
1626
  className: "outline-none",
1626
1627
  children: (item) => /* @__PURE__ */ jsxs18(
@@ -1640,17 +1641,120 @@ function Menu({ items, children, className }) {
1640
1641
  ].filter(Boolean).join(" "),
1641
1642
  children: [
1642
1643
  item.icon && /* @__PURE__ */ jsx25(Icon, { icon: item.icon, size: "sm" }),
1643
- item.label
1644
+ /* @__PURE__ */ jsx25("span", { className: "flex-1", children: item.label }),
1645
+ item.endContent && /* @__PURE__ */ jsx25("span", { className: "ml-auto flex items-center", children: item.endContent })
1644
1646
  ]
1645
1647
  }
1646
1648
  )
1647
1649
  }
1650
+ ) : /* @__PURE__ */ jsx25(
1651
+ AriaMenu,
1652
+ {
1653
+ onAction: (key) => onAction?.(key),
1654
+ className: "outline-none",
1655
+ children: content
1656
+ }
1648
1657
  )
1649
1658
  }
1650
1659
  )
1651
1660
  ] });
1652
1661
  }
1653
1662
 
1663
+ // src/components/Menu/MenuItem.tsx
1664
+ import { MenuItem as AriaMenuItem2 } from "react-aria-components";
1665
+ import { jsx as jsx26, jsxs as jsxs19 } from "react/jsx-runtime";
1666
+ function MenuItem({
1667
+ id,
1668
+ children,
1669
+ icon,
1670
+ endContent,
1671
+ onAction,
1672
+ href,
1673
+ target,
1674
+ isDisabled,
1675
+ isDanger,
1676
+ textValue,
1677
+ className
1678
+ }) {
1679
+ return /* @__PURE__ */ jsxs19(
1680
+ AriaMenuItem2,
1681
+ {
1682
+ id,
1683
+ href,
1684
+ target,
1685
+ isDisabled,
1686
+ onAction,
1687
+ textValue,
1688
+ className: [
1689
+ "flex items-center gap-2 px-3 py-2 text-sm outline-none cursor-default",
1690
+ "transition-colors",
1691
+ "focus:bg-[var(--color-surface-muted)]",
1692
+ "hover:bg-[var(--color-surface-muted)]",
1693
+ "disabled:opacity-50 disabled:pointer-events-none",
1694
+ isDanger ? "text-[var(--color-text-danger)]" : "text-[var(--color-text-primary)]",
1695
+ className
1696
+ ].filter(Boolean).join(" "),
1697
+ children: [
1698
+ icon && /* @__PURE__ */ jsx26(Icon, { icon, size: "sm" }),
1699
+ /* @__PURE__ */ jsx26("span", { className: "flex-1", children }),
1700
+ endContent && /* @__PURE__ */ jsx26("span", { className: "ml-auto flex items-center", children: endContent })
1701
+ ]
1702
+ }
1703
+ );
1704
+ }
1705
+
1706
+ // src/components/Menu/MenuSection.tsx
1707
+ import {
1708
+ MenuSection as AriaMenuSection,
1709
+ Header
1710
+ } from "react-aria-components";
1711
+ import { jsx as jsx27, jsxs as jsxs20 } from "react/jsx-runtime";
1712
+ function MenuSection({
1713
+ header,
1714
+ children,
1715
+ "aria-label": ariaLabel,
1716
+ className
1717
+ }) {
1718
+ return /* @__PURE__ */ jsxs20(AriaMenuSection, { className, "aria-label": ariaLabel, children: [
1719
+ header && /* @__PURE__ */ jsx27(
1720
+ Header,
1721
+ {
1722
+ className: [
1723
+ "px-3 py-1.5",
1724
+ "text-[length:var(--font-size-xs)] font-[number:var(--font-weight-semibold)]",
1725
+ "text-[var(--color-text-secondary)]",
1726
+ "uppercase tracking-wider",
1727
+ "select-none"
1728
+ ].join(" "),
1729
+ children: header
1730
+ }
1731
+ ),
1732
+ children
1733
+ ] });
1734
+ }
1735
+
1736
+ // src/components/Menu/MenuHeader.tsx
1737
+ import { Header as Header2 } from "react-aria-components";
1738
+ import { jsx as jsx28 } from "react/jsx-runtime";
1739
+ function MenuHeader({ children, className }) {
1740
+ return /* @__PURE__ */ jsx28(Header2, { className, children });
1741
+ }
1742
+
1743
+ // src/components/Menu/MenuSeparator.tsx
1744
+ import { Separator } from "react-aria-components";
1745
+ import { jsx as jsx29 } from "react/jsx-runtime";
1746
+ function MenuSeparator({ className }) {
1747
+ return /* @__PURE__ */ jsx29(
1748
+ Separator,
1749
+ {
1750
+ className: [
1751
+ "border-t border-[var(--color-border-default)] my-1",
1752
+ className
1753
+ ].filter(Boolean).join(" ")
1754
+ }
1755
+ );
1756
+ }
1757
+
1654
1758
  // src/components/Popover/Popover.tsx
1655
1759
  import {
1656
1760
  DialogTrigger,
@@ -1658,12 +1762,12 @@ import {
1658
1762
  Dialog as AriaDialog2,
1659
1763
  Button as AriaButton3
1660
1764
  } from "react-aria-components";
1661
- import { Fragment as Fragment7, jsx as jsx26 } from "react/jsx-runtime";
1765
+ import { Fragment as Fragment7, jsx as jsx30 } from "react/jsx-runtime";
1662
1766
  function Popover3({ children, isOpen, onOpenChange }) {
1663
- return /* @__PURE__ */ jsx26(DialogTrigger, { isOpen, onOpenChange, children });
1767
+ return /* @__PURE__ */ jsx30(DialogTrigger, { isOpen, onOpenChange, children });
1664
1768
  }
1665
1769
  function PopoverTrigger({ children, className }) {
1666
- return /* @__PURE__ */ jsx26(
1770
+ return /* @__PURE__ */ jsx30(
1667
1771
  AriaButton3,
1668
1772
  {
1669
1773
  className: [
@@ -1681,7 +1785,7 @@ function PopoverContent({
1681
1785
  className,
1682
1786
  children
1683
1787
  }) {
1684
- return /* @__PURE__ */ jsx26(
1788
+ return /* @__PURE__ */ jsx30(
1685
1789
  AriaPopover,
1686
1790
  {
1687
1791
  placement,
@@ -1698,7 +1802,7 @@ function PopoverContent({
1698
1802
  "entering:placement-right:slide-in-from-left-1",
1699
1803
  className
1700
1804
  ].filter(Boolean).join(" "),
1701
- children: /* @__PURE__ */ jsx26(AriaDialog2, { className: "outline-none", children: ({ close }) => /* @__PURE__ */ jsx26(Fragment7, { children: typeof children === "function" ? children({ close }) : children }) })
1805
+ children: /* @__PURE__ */ jsx30(AriaDialog2, { className: "outline-none", children: ({ close }) => /* @__PURE__ */ jsx30(Fragment7, { children: typeof children === "function" ? children({ close }) : children }) })
1702
1806
  }
1703
1807
  );
1704
1808
  }
@@ -1712,7 +1816,7 @@ import {
1712
1816
  Tab as AriaTab,
1713
1817
  TabPanel as AriaTabPanel
1714
1818
  } from "react-aria-components";
1715
- import { jsx as jsx27 } from "react/jsx-runtime";
1819
+ import { jsx as jsx31 } from "react/jsx-runtime";
1716
1820
  var TabsContext = createContext3({
1717
1821
  variant: "underline",
1718
1822
  size: "md"
@@ -1730,7 +1834,7 @@ function Tabs({
1730
1834
  children,
1731
1835
  ...props
1732
1836
  }) {
1733
- return /* @__PURE__ */ jsx27(TabsContext.Provider, { value: { variant, size }, children: /* @__PURE__ */ jsx27(
1837
+ return /* @__PURE__ */ jsx31(TabsContext.Provider, { value: { variant, size }, children: /* @__PURE__ */ jsx31(
1734
1838
  AriaTabs,
1735
1839
  {
1736
1840
  ...props,
@@ -1750,7 +1854,7 @@ function TabList({
1750
1854
  const { variant } = useContext3(TabsContext);
1751
1855
  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
1856
  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__ */ jsx27(
1857
+ return /* @__PURE__ */ jsx31(
1754
1858
  AriaTabList,
1755
1859
  {
1756
1860
  ...props,
@@ -1764,7 +1868,7 @@ function TabList({
1764
1868
  }
1765
1869
  function Tab({ className, ...props }) {
1766
1870
  const { variant, size } = useContext3(TabsContext);
1767
- return /* @__PURE__ */ jsx27(
1871
+ return /* @__PURE__ */ jsx31(
1768
1872
  AriaTab,
1769
1873
  {
1770
1874
  ...props,
@@ -1821,7 +1925,7 @@ function getTabVariantStyles(variant, state) {
1821
1925
  }
1822
1926
  function TabPanel({ className, ...props }) {
1823
1927
  const { variant } = useContext3(TabsContext);
1824
- return /* @__PURE__ */ jsx27(
1928
+ return /* @__PURE__ */ jsx31(
1825
1929
  AriaTabPanel,
1826
1930
  {
1827
1931
  ...props,
@@ -1846,7 +1950,7 @@ import { useCallback as useCallback2, useImperativeHandle, useRef as useRef2, us
1846
1950
  import { Tree as ArboristTree } from "react-arborist";
1847
1951
  import { ChevronRight as ChevronRight2, Folder, File } from "lucide-react";
1848
1952
  import { Check as Check2 } from "lucide-react";
1849
- import { jsx as jsx28, jsxs as jsxs19 } from "react/jsx-runtime";
1953
+ import { jsx as jsx32, jsxs as jsxs21 } from "react/jsx-runtime";
1850
1954
  var rowHeightMap = {
1851
1955
  compact: 32,
1852
1956
  comfortable: 40
@@ -1869,7 +1973,7 @@ function NodeRenderer({
1869
1973
  const isSelected = node.isSelected && !isCheckbox;
1870
1974
  const isCompact = size === "compact";
1871
1975
  const IconComponent = data.icon ? data.icon : node.isInternal ? Folder : File;
1872
- return /* @__PURE__ */ jsxs19(
1976
+ return /* @__PURE__ */ jsxs21(
1873
1977
  "div",
1874
1978
  {
1875
1979
  ref: dragHandle,
@@ -1904,7 +2008,7 @@ function NodeRenderer({
1904
2008
  }
1905
2009
  },
1906
2010
  children: [
1907
- /* @__PURE__ */ jsx28(
2011
+ /* @__PURE__ */ jsx32(
1908
2012
  "button",
1909
2013
  {
1910
2014
  type: "button",
@@ -1922,7 +2026,7 @@ function NodeRenderer({
1922
2026
  },
1923
2027
  tabIndex: -1,
1924
2028
  "aria-label": node.isOpen ? "Collapse" : "Expand",
1925
- children: /* @__PURE__ */ jsx28(
2029
+ children: /* @__PURE__ */ jsx32(
1926
2030
  ChevronRight2,
1927
2031
  {
1928
2032
  size: 14,
@@ -1934,7 +2038,7 @@ function NodeRenderer({
1934
2038
  )
1935
2039
  }
1936
2040
  ),
1937
- isCheckbox && /* @__PURE__ */ jsx28(
2041
+ isCheckbox && /* @__PURE__ */ jsx32(
1938
2042
  "div",
1939
2043
  {
1940
2044
  className: [
@@ -1945,7 +2049,7 @@ function NodeRenderer({
1945
2049
  role: "checkbox",
1946
2050
  "aria-checked": isChecked,
1947
2051
  "aria-label": `Select ${data.name}`,
1948
- children: isChecked && /* @__PURE__ */ jsx28(
2052
+ children: isChecked && /* @__PURE__ */ jsx32(
1949
2053
  Check2,
1950
2054
  {
1951
2055
  className: "w-3 h-3 text-[var(--color-text-inverse)]",
@@ -1954,7 +2058,7 @@ function NodeRenderer({
1954
2058
  )
1955
2059
  }
1956
2060
  ),
1957
- /* @__PURE__ */ jsx28(
2061
+ /* @__PURE__ */ jsx32(
1958
2062
  IconComponent,
1959
2063
  {
1960
2064
  size: 16,
@@ -1962,7 +2066,7 @@ function NodeRenderer({
1962
2066
  "aria-hidden": "true"
1963
2067
  }
1964
2068
  ),
1965
- /* @__PURE__ */ jsx28("span", { className: "truncate", children: data.name })
2069
+ /* @__PURE__ */ jsx32("span", { className: "truncate", children: data.name })
1966
2070
  ]
1967
2071
  }
1968
2072
  );
@@ -2028,13 +2132,13 @@ function Tree({
2028
2132
  );
2029
2133
  const arboristSearchMatch = searchMatch ? (node, term) => searchMatch(node.data, term) : void 0;
2030
2134
  const selectionProp = selectionMode === "single" && selectedIds && selectedIds.size > 0 ? [...selectedIds][0] : void 0;
2031
- return /* @__PURE__ */ jsx28(
2135
+ return /* @__PURE__ */ jsx32(
2032
2136
  "div",
2033
2137
  {
2034
2138
  role: "tree",
2035
2139
  "aria-label": ariaLabel,
2036
2140
  className: ["outline-none overflow-hidden", className].filter(Boolean).join(" "),
2037
- children: /* @__PURE__ */ jsx28(
2141
+ children: /* @__PURE__ */ jsx32(
2038
2142
  ArboristTree,
2039
2143
  {
2040
2144
  ref: internalRef,
@@ -2053,7 +2157,7 @@ function Tree({
2053
2157
  onSelect: handleSelect,
2054
2158
  onActivate: handleActivate,
2055
2159
  disableEdit: true,
2056
- children: (props) => /* @__PURE__ */ jsx28(
2160
+ children: (props) => /* @__PURE__ */ jsx32(
2057
2161
  NodeRenderer,
2058
2162
  {
2059
2163
  ...props,
@@ -2078,7 +2182,7 @@ import {
2078
2182
  ToggleButtonGroup as AriaToggleButtonGroup,
2079
2183
  ToggleButton as AriaToggleButton2
2080
2184
  } from "react-aria-components";
2081
- import { jsx as jsx29 } from "react/jsx-runtime";
2185
+ import { jsx as jsx33 } from "react/jsx-runtime";
2082
2186
  var SegmentedControlContext = createContext4({
2083
2187
  size: "md"
2084
2188
  });
@@ -2098,7 +2202,7 @@ function SegmentedControl({
2098
2202
  ...props
2099
2203
  }) {
2100
2204
  const isNoneMode = selectionMode === "none";
2101
- return /* @__PURE__ */ jsx29(SegmentedControlContext.Provider, { value: { size }, children: /* @__PURE__ */ jsx29(
2205
+ return /* @__PURE__ */ jsx33(SegmentedControlContext.Provider, { value: { size }, children: /* @__PURE__ */ jsx33(
2102
2206
  AriaToggleButtonGroup,
2103
2207
  {
2104
2208
  ...props,
@@ -2119,7 +2223,7 @@ function SegmentedControlItem({
2119
2223
  ...props
2120
2224
  }) {
2121
2225
  const { size } = useContext4(SegmentedControlContext);
2122
- return /* @__PURE__ */ jsx29(
2226
+ return /* @__PURE__ */ jsx33(
2123
2227
  AriaToggleButton2,
2124
2228
  {
2125
2229
  ...props,
@@ -2153,7 +2257,7 @@ import {
2153
2257
  Info as Info2,
2154
2258
  Microscope
2155
2259
  } from "lucide-react";
2156
- import { Fragment as Fragment8, jsx as jsx30, jsxs as jsxs20 } from "react/jsx-runtime";
2260
+ import { Fragment as Fragment8, jsx as jsx34, jsxs as jsxs22 } from "react/jsx-runtime";
2157
2261
  function getFileIcon(type, extension) {
2158
2262
  if (type === "directory") return Folder2;
2159
2263
  const ext = (extension ?? "").toLowerCase();
@@ -2179,7 +2283,7 @@ function FileIcon({
2179
2283
  size = 16
2180
2284
  }) {
2181
2285
  const IconComponent = getFileIcon(type, extension);
2182
- return /* @__PURE__ */ jsx30(
2286
+ return /* @__PURE__ */ jsx34(
2183
2287
  IconComponent,
2184
2288
  {
2185
2289
  size,
@@ -2224,14 +2328,14 @@ function FileCard({
2224
2328
  },
2225
2329
  [onPress]
2226
2330
  );
2227
- const cardContent = /* @__PURE__ */ jsxs20(Fragment8, { children: [
2228
- /* @__PURE__ */ jsxs20(
2331
+ const cardContent = /* @__PURE__ */ jsxs22(Fragment8, { children: [
2332
+ /* @__PURE__ */ jsxs22(
2229
2333
  "div",
2230
2334
  {
2231
2335
  className: `shrink-0 relative overflow-hidden bg-[var(--color-neutral-900)] ${thumbnailClass}`,
2232
2336
  children: [
2233
- children ? /* @__PURE__ */ jsx30("div", { className: "h-full w-full overflow-hidden", children }) : /* @__PURE__ */ jsx30("div", { className: "flex h-full w-full items-center justify-center", children: /* @__PURE__ */ jsx30(IconComponent, { size: iconSize, className: iconColor }) }),
2234
- onInfo && /* @__PURE__ */ jsx30(
2337
+ children ? /* @__PURE__ */ jsx34("div", { className: "h-full w-full overflow-hidden", children }) : /* @__PURE__ */ jsx34("div", { className: "flex h-full w-full items-center justify-center", children: /* @__PURE__ */ jsx34(IconComponent, { size: iconSize, className: iconColor }) }),
2338
+ onInfo && /* @__PURE__ */ jsx34(
2235
2339
  "div",
2236
2340
  {
2237
2341
  className: [
@@ -2239,7 +2343,7 @@ function FileCard({
2239
2343
  "transition-opacity duration-150",
2240
2344
  compact ? "bottom-1.5 right-1.5" : "bottom-2 right-2"
2241
2345
  ].join(" "),
2242
- children: /* @__PURE__ */ jsx30(
2346
+ children: /* @__PURE__ */ jsx34(
2243
2347
  "span",
2244
2348
  {
2245
2349
  onClick: handleInfoClick,
@@ -2249,7 +2353,7 @@ function FileCard({
2249
2353
  }
2250
2354
  },
2251
2355
  role: "presentation",
2252
- children: /* @__PURE__ */ jsx30(
2356
+ children: /* @__PURE__ */ jsx34(
2253
2357
  IconButton,
2254
2358
  {
2255
2359
  icon: Info2,
@@ -2267,7 +2371,7 @@ function FileCard({
2267
2371
  ]
2268
2372
  }
2269
2373
  ),
2270
- /* @__PURE__ */ jsx30(
2374
+ /* @__PURE__ */ jsx34(
2271
2375
  "div",
2272
2376
  {
2273
2377
  className: [
@@ -2275,12 +2379,12 @@ function FileCard({
2275
2379
  "bg-[var(--color-surface-default)]",
2276
2380
  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
2381
  ].join(" "),
2278
- children: compact ? /* @__PURE__ */ jsx30("span", { className: "text-xs font-medium text-[var(--color-text-primary)] truncate", children: name }) : /* @__PURE__ */ jsxs20(Fragment8, { children: [
2279
- /* @__PURE__ */ jsxs20("span", { className: "flex items-center gap-1.5", children: [
2280
- /* @__PURE__ */ jsx30(FileIcon, { type, extension, size: 16 }),
2281
- /* @__PURE__ */ jsx30("span", { className: "text-sm font-medium text-[var(--color-text-primary)] truncate", children: name })
2382
+ children: compact ? /* @__PURE__ */ jsx34("span", { className: "text-xs font-medium text-[var(--color-text-primary)] truncate", children: name }) : /* @__PURE__ */ jsxs22(Fragment8, { children: [
2383
+ /* @__PURE__ */ jsxs22("span", { className: "flex items-center gap-1.5", children: [
2384
+ /* @__PURE__ */ jsx34(FileIcon, { type, extension, size: 16 }),
2385
+ /* @__PURE__ */ jsx34("span", { className: "text-sm font-medium text-[var(--color-text-primary)] truncate", children: name })
2282
2386
  ] }),
2283
- size && /* @__PURE__ */ jsx30("span", { className: "text-xs text-[var(--color-text-secondary)] tabular-nums pl-[22px]", children: size })
2387
+ size && /* @__PURE__ */ jsx34("span", { className: "text-xs text-[var(--color-text-secondary)] tabular-nums pl-[22px]", children: size })
2284
2388
  ] })
2285
2389
  }
2286
2390
  )
@@ -2296,7 +2400,7 @@ function FileCard({
2296
2400
  className
2297
2401
  ].filter(Boolean).join(" ");
2298
2402
  if (href) {
2299
- return /* @__PURE__ */ jsx30(
2403
+ return /* @__PURE__ */ jsx34(
2300
2404
  "a",
2301
2405
  {
2302
2406
  href,
@@ -2307,7 +2411,7 @@ function FileCard({
2307
2411
  );
2308
2412
  }
2309
2413
  if (onPress) {
2310
- return /* @__PURE__ */ jsx30(
2414
+ return /* @__PURE__ */ jsx34(
2311
2415
  "div",
2312
2416
  {
2313
2417
  role: "button",
@@ -2320,7 +2424,7 @@ function FileCard({
2320
2424
  }
2321
2425
  );
2322
2426
  }
2323
- return /* @__PURE__ */ jsx30("div", { className: baseStyles, children: cardContent });
2427
+ return /* @__PURE__ */ jsx34("div", { className: baseStyles, children: cardContent });
2324
2428
  }
2325
2429
 
2326
2430
  // src/components/StorageConnectionCard/StorageConnectionCard.tsx
@@ -2330,7 +2434,7 @@ import { twMerge as twMerge9 } from "tailwind-merge";
2330
2434
 
2331
2435
  // src/components/Pill/Pill.tsx
2332
2436
  import { twMerge as twMerge7 } from "tailwind-merge";
2333
- import { jsx as jsx31 } from "react/jsx-runtime";
2437
+ import { jsx as jsx35 } from "react/jsx-runtime";
2334
2438
  var HASH_PALETTE = [
2335
2439
  "teal",
2336
2440
  // sky
@@ -2381,7 +2485,7 @@ function resolveColor(color, name) {
2381
2485
  }
2382
2486
  function Pill({ children, color, name, className }) {
2383
2487
  const resolved = resolveColor(color, name);
2384
- return /* @__PURE__ */ jsx31(
2488
+ return /* @__PURE__ */ jsx35(
2385
2489
  "span",
2386
2490
  {
2387
2491
  className: twMerge7(
@@ -2398,7 +2502,7 @@ function Pill({ children, color, name, className }) {
2398
2502
 
2399
2503
  // src/components/Pill/GroupPill.tsx
2400
2504
  import { twMerge as twMerge8 } from "tailwind-merge";
2401
- import { jsx as jsx32, jsxs as jsxs21 } from "react/jsx-runtime";
2505
+ import { jsx as jsx36, jsxs as jsxs23 } from "react/jsx-runtime";
2402
2506
  function GroupPill({
2403
2507
  path,
2404
2508
  visibleCount = 3,
@@ -2409,7 +2513,7 @@ function GroupPill({
2409
2513
  const hiddenCount = Math.max(0, segments.length - visibleCount);
2410
2514
  const hiddenSegments = segments.slice(0, hiddenCount);
2411
2515
  const visibleSegments = segments.slice(hiddenCount);
2412
- return /* @__PURE__ */ jsxs21(
2516
+ return /* @__PURE__ */ jsxs23(
2413
2517
  "span",
2414
2518
  {
2415
2519
  className: twMerge8(
@@ -2420,7 +2524,7 @@ function GroupPill({
2420
2524
  children: [
2421
2525
  hiddenSegments.map((segment, index) => {
2422
2526
  const color = pillColorFromName(segment);
2423
- return /* @__PURE__ */ jsx32(
2527
+ return /* @__PURE__ */ jsx36(
2424
2528
  "span",
2425
2529
  {
2426
2530
  className: twMerge8(
@@ -2433,14 +2537,14 @@ function GroupPill({
2433
2537
  `dot-${index}-${segment}`
2434
2538
  );
2435
2539
  }),
2436
- visibleSegments.map((segment, index) => /* @__PURE__ */ jsx32(Pill, { name: segment, children: segment }, `pill-${index}-${segment}`))
2540
+ visibleSegments.map((segment, index) => /* @__PURE__ */ jsx36(Pill, { name: segment, children: segment }, `pill-${index}-${segment}`))
2437
2541
  ]
2438
2542
  }
2439
2543
  );
2440
2544
  }
2441
2545
 
2442
2546
  // src/components/StorageConnectionCard/StorageConnectionCard.tsx
2443
- import { Fragment as Fragment9, jsx as jsx33, jsxs as jsxs22 } from "react/jsx-runtime";
2547
+ import { Fragment as Fragment9, jsx as jsx37, jsxs as jsxs24 } from "react/jsx-runtime";
2444
2548
  var statusDotStyles = {
2445
2549
  connected: "bg-[var(--color-status-success)]",
2446
2550
  error: "border-2 border-[var(--color-status-danger)] bg-transparent",
@@ -2456,7 +2560,7 @@ function ProviderBadge({ provider }) {
2456
2560
  const config = providerConfig[provider.toLowerCase()];
2457
2561
  const label = config?.label ?? provider;
2458
2562
  const color = config?.color ?? "neutral";
2459
- return /* @__PURE__ */ jsx33(Pill, { color, children: label });
2563
+ return /* @__PURE__ */ jsx37(Pill, { color, children: label });
2460
2564
  }
2461
2565
  function PreviewArea({
2462
2566
  status = "connected",
@@ -2464,11 +2568,11 @@ function PreviewArea({
2464
2568
  children
2465
2569
  }) {
2466
2570
  if (status === "loading") {
2467
- return /* @__PURE__ */ jsx33("div", { className: "flex h-full items-center justify-center", children: /* @__PURE__ */ jsx33(Spinner, { size: "lg", "aria-label": "Loading connection" }) });
2571
+ return /* @__PURE__ */ jsx37("div", { className: "flex h-full items-center justify-center", children: /* @__PURE__ */ jsx37(Spinner, { size: "lg", "aria-label": "Loading connection" }) });
2468
2572
  }
2469
2573
  if (status === "error") {
2470
- return /* @__PURE__ */ jsxs22("div", { className: "flex h-full flex-col items-center justify-center gap-2 bg-[var(--color-surface-danger)] px-4", children: [
2471
- /* @__PURE__ */ jsx33(
2574
+ return /* @__PURE__ */ jsxs24("div", { className: "flex h-full flex-col items-center justify-center gap-2 bg-[var(--color-surface-danger)] px-4", children: [
2575
+ /* @__PURE__ */ jsx37(
2472
2576
  Icon,
2473
2577
  {
2474
2578
  icon: AlertCircle,
@@ -2476,13 +2580,13 @@ function PreviewArea({
2476
2580
  className: "text-[var(--color-text-danger)]"
2477
2581
  }
2478
2582
  ),
2479
- errorMessage && /* @__PURE__ */ jsx33("p", { className: "text-center text-xs text-[var(--color-text-danger)]", children: errorMessage })
2583
+ errorMessage && /* @__PURE__ */ jsx37("p", { className: "text-center text-xs text-[var(--color-text-danger)]", children: errorMessage })
2480
2584
  ] });
2481
2585
  }
2482
2586
  if (children) {
2483
- return /* @__PURE__ */ jsx33("div", { className: "h-full w-full overflow-hidden", children });
2587
+ return /* @__PURE__ */ jsx37("div", { className: "h-full w-full overflow-hidden", children });
2484
2588
  }
2485
- return /* @__PURE__ */ jsx33("div", { className: "flex h-full items-center justify-center", children: /* @__PURE__ */ jsx33(
2589
+ return /* @__PURE__ */ jsx37("div", { className: "flex h-full items-center justify-center", children: /* @__PURE__ */ jsx37(
2486
2590
  Icon,
2487
2591
  {
2488
2592
  icon: Database,
@@ -2524,11 +2628,11 @@ function StorageConnectionCard({
2524
2628
  },
2525
2629
  [onPress]
2526
2630
  );
2527
- const cardContent = /* @__PURE__ */ jsxs22(Fragment9, { children: [
2528
- /* @__PURE__ */ jsx33("div", { className: "aspect-[4/3] bg-[var(--color-neutral-900)] overflow-hidden rounded-t-[var(--border-radius-lg)]", children: /* @__PURE__ */ jsx33(PreviewArea, { status, errorMessage, children }) }),
2529
- /* @__PURE__ */ jsxs22("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: [
2530
- /* @__PURE__ */ jsxs22("div", { className: "flex items-start gap-2", children: [
2531
- status && /* @__PURE__ */ jsx33(
2631
+ const cardContent = /* @__PURE__ */ jsxs24(Fragment9, { children: [
2632
+ /* @__PURE__ */ jsx37("div", { className: "aspect-[4/3] bg-[var(--color-neutral-900)] overflow-hidden rounded-t-[var(--border-radius-lg)]", children: /* @__PURE__ */ jsx37(PreviewArea, { status, errorMessage, children }) }),
2633
+ /* @__PURE__ */ jsxs24("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: [
2634
+ /* @__PURE__ */ jsxs24("div", { className: "flex items-start gap-2", children: [
2635
+ status && /* @__PURE__ */ jsx37(
2532
2636
  "span",
2533
2637
  {
2534
2638
  className: twMerge9(
@@ -2538,8 +2642,8 @@ function StorageConnectionCard({
2538
2642
  "aria-label": `Status: ${status}`
2539
2643
  }
2540
2644
  ),
2541
- /* @__PURE__ */ jsx33("span", { className: "min-w-0 flex-1 line-clamp-2 text-sm font-medium text-[var(--color-text-primary)]", children: name }),
2542
- onInfo && /* @__PURE__ */ jsx33(
2645
+ /* @__PURE__ */ jsx37("span", { className: "min-w-0 flex-1 line-clamp-2 text-sm font-medium text-[var(--color-text-primary)]", children: name }),
2646
+ onInfo && /* @__PURE__ */ jsx37(
2543
2647
  "span",
2544
2648
  {
2545
2649
  onClick: handleInfoPress,
@@ -2549,7 +2653,7 @@ function StorageConnectionCard({
2549
2653
  }
2550
2654
  },
2551
2655
  role: "presentation",
2552
- children: /* @__PURE__ */ jsx33(
2656
+ children: /* @__PURE__ */ jsx37(
2553
2657
  IconButton,
2554
2658
  {
2555
2659
  icon: Info3,
@@ -2563,10 +2667,10 @@ function StorageConnectionCard({
2563
2667
  }
2564
2668
  )
2565
2669
  ] }),
2566
- (provider || imageCount != null && (!status || status === "connected")) && /* @__PURE__ */ jsxs22("div", { className: twMerge9("flex items-center gap-2", status && "pl-4"), children: [
2567
- provider && /* @__PURE__ */ jsx33(ProviderBadge, { provider }),
2568
- provider && region && /* @__PURE__ */ jsx33("span", { className: "shrink-0 text-xs text-[var(--color-text-secondary)]", children: region }),
2569
- imageCount != null && (!status || status === "connected") && /* @__PURE__ */ jsxs22("span", { className: "ml-auto shrink-0 text-xs tabular-nums text-[var(--color-text-secondary)]", children: [
2670
+ (provider || imageCount != null && (!status || status === "connected")) && /* @__PURE__ */ jsxs24("div", { className: twMerge9("flex items-center gap-2", status && "pl-4"), children: [
2671
+ provider && /* @__PURE__ */ jsx37(ProviderBadge, { provider }),
2672
+ provider && region && /* @__PURE__ */ jsx37("span", { className: "shrink-0 text-xs text-[var(--color-text-secondary)]", children: region }),
2673
+ imageCount != null && (!status || status === "connected") && /* @__PURE__ */ jsxs24("span", { className: "ml-auto shrink-0 text-xs tabular-nums text-[var(--color-text-secondary)]", children: [
2570
2674
  imageCount,
2571
2675
  " ",
2572
2676
  imageCount === 1 ? "image" : "images"
@@ -2583,10 +2687,10 @@ function StorageConnectionCard({
2583
2687
  className
2584
2688
  );
2585
2689
  if (href) {
2586
- return /* @__PURE__ */ jsx33("a", { href, className: twMerge9(baseStyles, "no-underline"), children: cardContent });
2690
+ return /* @__PURE__ */ jsx37("a", { href, className: twMerge9(baseStyles, "no-underline"), children: cardContent });
2587
2691
  }
2588
2692
  if (onPress) {
2589
- return /* @__PURE__ */ jsx33(
2693
+ return /* @__PURE__ */ jsx37(
2590
2694
  "div",
2591
2695
  {
2592
2696
  role: "button",
@@ -2598,12 +2702,12 @@ function StorageConnectionCard({
2598
2702
  }
2599
2703
  );
2600
2704
  }
2601
- return /* @__PURE__ */ jsx33("div", { className: baseStyles, children: cardContent });
2705
+ return /* @__PURE__ */ jsx37("div", { className: baseStyles, children: cardContent });
2602
2706
  }
2603
2707
 
2604
2708
  // src/components/Badge/Badge.tsx
2605
2709
  import { twMerge as twMerge10 } from "tailwind-merge";
2606
- import { jsx as jsx34, jsxs as jsxs23 } from "react/jsx-runtime";
2710
+ import { jsx as jsx38, jsxs as jsxs25 } from "react/jsx-runtime";
2607
2711
  var variantStyles4 = {
2608
2712
  neutral: "bg-[var(--color-badge-neutral-bg)] text-[var(--color-badge-neutral-text)]",
2609
2713
  purple: "bg-[var(--color-badge-purple-bg)] text-[var(--color-badge-purple-text)]",
@@ -2628,7 +2732,7 @@ function Badge({
2628
2732
  icon: IconComponent,
2629
2733
  className
2630
2734
  }) {
2631
- return /* @__PURE__ */ jsxs23(
2735
+ return /* @__PURE__ */ jsxs25(
2632
2736
  "span",
2633
2737
  {
2634
2738
  className: twMerge10(
@@ -2639,7 +2743,7 @@ function Badge({
2639
2743
  className
2640
2744
  ),
2641
2745
  children: [
2642
- IconComponent && /* @__PURE__ */ jsx34(IconComponent, { size: iconSizeMap4[size], "aria-hidden": "true" }),
2746
+ IconComponent && /* @__PURE__ */ jsx38(IconComponent, { size: iconSizeMap4[size], "aria-hidden": "true" }),
2643
2747
  children
2644
2748
  ]
2645
2749
  }
@@ -2649,7 +2753,7 @@ function Badge({
2649
2753
  // src/components/Card/Card.tsx
2650
2754
  import { useCallback as useCallback5 } from "react";
2651
2755
  import { twMerge as twMerge11 } from "tailwind-merge";
2652
- import { Fragment as Fragment10, jsx as jsx35, jsxs as jsxs24 } from "react/jsx-runtime";
2756
+ import { Fragment as Fragment10, jsx as jsx39, jsxs as jsxs26 } from "react/jsx-runtime";
2653
2757
  var paddingStyles = {
2654
2758
  none: "p-0",
2655
2759
  sm: "p-3",
@@ -2682,8 +2786,8 @@ function Card({
2682
2786
  },
2683
2787
  [onPress]
2684
2788
  );
2685
- const content = /* @__PURE__ */ jsxs24(Fragment10, { children: [
2686
- header && /* @__PURE__ */ jsx35(
2789
+ const content = /* @__PURE__ */ jsxs26(Fragment10, { children: [
2790
+ header && /* @__PURE__ */ jsx39(
2687
2791
  "div",
2688
2792
  {
2689
2793
  className: twMerge11(
@@ -2693,8 +2797,8 @@ function Card({
2693
2797
  children: header
2694
2798
  }
2695
2799
  ),
2696
- /* @__PURE__ */ jsx35("div", { className: paddingStyles[padding], children }),
2697
- footer && /* @__PURE__ */ jsx35(
2800
+ /* @__PURE__ */ jsx39("div", { className: paddingStyles[padding], children }),
2801
+ footer && /* @__PURE__ */ jsx39(
2698
2802
  "div",
2699
2803
  {
2700
2804
  className: twMerge11(
@@ -2706,10 +2810,10 @@ function Card({
2706
2810
  )
2707
2811
  ] });
2708
2812
  if (href) {
2709
- return /* @__PURE__ */ jsx35("a", { href, className: containerClass, children: content });
2813
+ return /* @__PURE__ */ jsx39("a", { href, className: containerClass, children: content });
2710
2814
  }
2711
2815
  if (onPress) {
2712
- return /* @__PURE__ */ jsx35(
2816
+ return /* @__PURE__ */ jsx39(
2713
2817
  "div",
2714
2818
  {
2715
2819
  role: "button",
@@ -2721,13 +2825,13 @@ function Card({
2721
2825
  }
2722
2826
  );
2723
2827
  }
2724
- return /* @__PURE__ */ jsx35("div", { className: containerClass, children: content });
2828
+ return /* @__PURE__ */ jsx39("div", { className: containerClass, children: content });
2725
2829
  }
2726
2830
 
2727
2831
  // src/components/DeltaIndicator/DeltaIndicator.tsx
2728
2832
  import { ArrowUp, ArrowDown, Minus } from "lucide-react";
2729
2833
  import { twMerge as twMerge12 } from "tailwind-merge";
2730
- import { jsx as jsx36, jsxs as jsxs25 } from "react/jsx-runtime";
2834
+ import { jsx as jsx40, jsxs as jsxs27 } from "react/jsx-runtime";
2731
2835
  function getDirection(current, previous) {
2732
2836
  const diff = current - previous;
2733
2837
  if (diff > 0) return "increase";
@@ -2780,7 +2884,7 @@ function DeltaIndicator({
2780
2884
  className
2781
2885
  }) {
2782
2886
  if (unavailable) {
2783
- return /* @__PURE__ */ jsxs25(
2887
+ return /* @__PURE__ */ jsxs27(
2784
2888
  "span",
2785
2889
  {
2786
2890
  className: twMerge12(
@@ -2789,7 +2893,7 @@ function DeltaIndicator({
2789
2893
  className
2790
2894
  ),
2791
2895
  children: [
2792
- label && /* @__PURE__ */ jsx36("span", { className: "text-[length:var(--font-size-sm)] text-[var(--color-text-secondary)] mr-1", children: label }),
2896
+ label && /* @__PURE__ */ jsx40("span", { className: "text-[length:var(--font-size-sm)] text-[var(--color-text-secondary)] mr-1", children: label }),
2793
2897
  unavailableText
2794
2898
  ]
2795
2899
  }
@@ -2819,7 +2923,7 @@ function DeltaIndicator({
2819
2923
  }
2820
2924
  }
2821
2925
  const isPill = mode === "pill";
2822
- return /* @__PURE__ */ jsxs25(
2926
+ return /* @__PURE__ */ jsxs27(
2823
2927
  "span",
2824
2928
  {
2825
2929
  className: twMerge12(
@@ -2833,8 +2937,8 @@ function DeltaIndicator({
2833
2937
  className
2834
2938
  ),
2835
2939
  children: [
2836
- label && /* @__PURE__ */ jsx36("span", { className: "text-[length:var(--font-size-sm)] text-[var(--color-text-secondary)] mr-1", children: label }),
2837
- /* @__PURE__ */ jsx36(IconComponent, { size: 14, "aria-hidden": true }),
2940
+ label && /* @__PURE__ */ jsx40("span", { className: "text-[length:var(--font-size-sm)] text-[var(--color-text-secondary)] mr-1", children: label }),
2941
+ /* @__PURE__ */ jsx40(IconComponent, { size: 14, "aria-hidden": true }),
2838
2942
  valueText
2839
2943
  ]
2840
2944
  }
@@ -2843,7 +2947,7 @@ function DeltaIndicator({
2843
2947
 
2844
2948
  // src/components/ProgressBar/ProgressBar.tsx
2845
2949
  import { twMerge as twMerge13 } from "tailwind-merge";
2846
- import { jsx as jsx37, jsxs as jsxs26 } from "react/jsx-runtime";
2950
+ import { jsx as jsx41, jsxs as jsxs28 } from "react/jsx-runtime";
2847
2951
  var fillStyles = {
2848
2952
  brand: "bg-[var(--color-progress-fill)]",
2849
2953
  success: "bg-[var(--color-progress-fill-success)]",
@@ -2866,12 +2970,12 @@ function ProgressBar({
2866
2970
  className
2867
2971
  }) {
2868
2972
  const clampedValue = Math.min(100, Math.max(0, value));
2869
- return /* @__PURE__ */ jsxs26("div", { className: twMerge13("w-full", className), children: [
2870
- (label || description || showValue) && /* @__PURE__ */ jsxs26("div", { className: "flex items-center justify-between mb-2", children: [
2871
- /* @__PURE__ */ jsx37("span", { className: "text-[length:var(--font-size-sm)] font-[number:var(--font-weight-medium)] text-[var(--color-text-primary)]", children: label }),
2872
- /* @__PURE__ */ jsx37("span", { className: "text-[length:var(--font-size-sm)] text-[var(--color-text-secondary)]", children: description ?? (showValue ? `${clampedValue}%` : null) })
2973
+ return /* @__PURE__ */ jsxs28("div", { className: twMerge13("w-full", className), children: [
2974
+ (label || description || showValue) && /* @__PURE__ */ jsxs28("div", { className: "flex items-center justify-between mb-2", children: [
2975
+ /* @__PURE__ */ jsx41("span", { className: "text-[length:var(--font-size-sm)] font-[number:var(--font-weight-medium)] text-[var(--color-text-primary)]", children: label }),
2976
+ /* @__PURE__ */ jsx41("span", { className: "text-[length:var(--font-size-sm)] text-[var(--color-text-secondary)]", children: description ?? (showValue ? `${clampedValue}%` : null) })
2873
2977
  ] }),
2874
- /* @__PURE__ */ jsx37(
2978
+ /* @__PURE__ */ jsx41(
2875
2979
  "div",
2876
2980
  {
2877
2981
  role: "progressbar",
@@ -2883,7 +2987,7 @@ function ProgressBar({
2883
2987
  "w-full rounded-[var(--border-radius-full)] bg-[var(--color-progress-track)]",
2884
2988
  sizeStyles8[size]
2885
2989
  ),
2886
- children: /* @__PURE__ */ jsx37(
2990
+ children: /* @__PURE__ */ jsx41(
2887
2991
  "div",
2888
2992
  {
2889
2993
  className: twMerge13(
@@ -2908,7 +3012,7 @@ import {
2908
3012
  X as X3
2909
3013
  } from "lucide-react";
2910
3014
  import { twMerge as twMerge14 } from "tailwind-merge";
2911
- import { jsx as jsx38, jsxs as jsxs27 } from "react/jsx-runtime";
3015
+ import { jsx as jsx42, jsxs as jsxs29 } from "react/jsx-runtime";
2912
3016
  var variantConfig2 = {
2913
3017
  info: {
2914
3018
  icon: Info4,
@@ -2952,7 +3056,7 @@ function Banner({
2952
3056
  setDismissed(true);
2953
3057
  onDismiss?.();
2954
3058
  };
2955
- return /* @__PURE__ */ jsxs27(
3059
+ return /* @__PURE__ */ jsxs29(
2956
3060
  "div",
2957
3061
  {
2958
3062
  role: config.role,
@@ -2963,7 +3067,7 @@ function Banner({
2963
3067
  className
2964
3068
  ),
2965
3069
  children: [
2966
- /* @__PURE__ */ jsx38(
3070
+ /* @__PURE__ */ jsx42(
2967
3071
  IconComponent,
2968
3072
  {
2969
3073
  size: 20,
@@ -2971,21 +3075,21 @@ function Banner({
2971
3075
  "aria-hidden": "true"
2972
3076
  }
2973
3077
  ),
2974
- /* @__PURE__ */ jsxs27("div", { className: "flex-1", children: [
2975
- title && /* @__PURE__ */ jsxs27("span", { className: "font-[number:var(--font-weight-medium)]", children: [
3078
+ /* @__PURE__ */ jsxs29("div", { className: "flex-1", children: [
3079
+ title && /* @__PURE__ */ jsxs29("span", { className: "font-[number:var(--font-weight-medium)]", children: [
2976
3080
  title,
2977
3081
  " \u2014 "
2978
3082
  ] }),
2979
3083
  children
2980
3084
  ] }),
2981
- dismissible && /* @__PURE__ */ jsx38(
3085
+ dismissible && /* @__PURE__ */ jsx42(
2982
3086
  "button",
2983
3087
  {
2984
3088
  type: "button",
2985
3089
  onClick: handleDismiss,
2986
3090
  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
3091
  "aria-label": "Dismiss",
2988
- children: /* @__PURE__ */ jsx38(X3, { size: 16, "aria-hidden": "true" })
3092
+ children: /* @__PURE__ */ jsx42(X3, { size: 16, "aria-hidden": "true" })
2989
3093
  }
2990
3094
  )
2991
3095
  ]
@@ -2995,7 +3099,7 @@ function Banner({
2995
3099
 
2996
3100
  // src/components/MetricCard/MetricCard.tsx
2997
3101
  import { twMerge as twMerge15 } from "tailwind-merge";
2998
- import { Fragment as Fragment11, jsx as jsx39, jsxs as jsxs28 } from "react/jsx-runtime";
3102
+ import { Fragment as Fragment11, jsx as jsx43, jsxs as jsxs30 } from "react/jsx-runtime";
2999
3103
  var sizeConfig = {
3000
3104
  sm: {
3001
3105
  padding: "p-3",
@@ -3023,9 +3127,9 @@ function MetricCard({
3023
3127
  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
3128
  className
3025
3129
  );
3026
- const content = /* @__PURE__ */ jsxs28(Fragment11, { children: [
3027
- /* @__PURE__ */ jsx39("div", { className: twMerge15(config.labelClass, "text-[var(--color-text-secondary)]"), children: label }),
3028
- /* @__PURE__ */ jsx39(
3130
+ const content = /* @__PURE__ */ jsxs30(Fragment11, { children: [
3131
+ /* @__PURE__ */ jsx43("div", { className: twMerge15(config.labelClass, "text-[var(--color-text-secondary)]"), children: label }),
3132
+ /* @__PURE__ */ jsx43(
3029
3133
  "div",
3030
3134
  {
3031
3135
  className: twMerge15(
@@ -3035,23 +3139,23 @@ function MetricCard({
3035
3139
  children: value
3036
3140
  }
3037
3141
  ),
3038
- secondary && /* @__PURE__ */ jsx39("div", { className: "mt-1 text-sm", children: secondary })
3142
+ secondary && /* @__PURE__ */ jsx43("div", { className: "mt-1 text-sm", children: secondary })
3039
3143
  ] });
3040
3144
  if (href) {
3041
- return /* @__PURE__ */ jsx39("a", { href, className: containerClass, children: content });
3145
+ return /* @__PURE__ */ jsx43("a", { href, className: containerClass, children: content });
3042
3146
  }
3043
- return /* @__PURE__ */ jsx39("div", { className: containerClass, children: content });
3147
+ return /* @__PURE__ */ jsx43("div", { className: containerClass, children: content });
3044
3148
  }
3045
3149
 
3046
3150
  // src/components/SectionHeader/SectionHeader.tsx
3047
3151
  import { twMerge as twMerge16 } from "tailwind-merge";
3048
- import { jsx as jsx40, jsxs as jsxs29 } from "react/jsx-runtime";
3152
+ import { jsx as jsx44, jsxs as jsxs31 } from "react/jsx-runtime";
3049
3153
  function SectionHeader({
3050
3154
  title,
3051
3155
  children,
3052
3156
  className
3053
3157
  }) {
3054
- return /* @__PURE__ */ jsxs29(
3158
+ return /* @__PURE__ */ jsxs31(
3055
3159
  "div",
3056
3160
  {
3057
3161
  className: twMerge16(
@@ -3059,8 +3163,8 @@ function SectionHeader({
3059
3163
  className
3060
3164
  ),
3061
3165
  children: [
3062
- /* @__PURE__ */ jsx40(H2, { children: title }),
3063
- children && /* @__PURE__ */ jsx40("div", { className: "ml-auto flex flex-wrap items-center gap-[var(--spacing-2)]", children })
3166
+ /* @__PURE__ */ jsx44(H2, { children: title }),
3167
+ children && /* @__PURE__ */ jsx44("div", { className: "ml-auto flex flex-wrap items-center gap-[var(--spacing-2)]", children })
3064
3168
  ]
3065
3169
  }
3066
3170
  );
@@ -3068,7 +3172,7 @@ function SectionHeader({
3068
3172
 
3069
3173
  // src/components/FormWizard/FormWizard.tsx
3070
3174
  import { createContext as createContext5, useContext as useContext5, useCallback as useCallback6, useMemo } from "react";
3071
- import { jsx as jsx41 } from "react/jsx-runtime";
3175
+ import { jsx as jsx45 } from "react/jsx-runtime";
3072
3176
  var FormWizardContext = createContext5({
3073
3177
  currentStep: 0,
3074
3178
  totalSteps: 1,
@@ -3103,13 +3207,13 @@ function FormWizard({
3103
3207
  }),
3104
3208
  [currentStep, totalSteps, canGoBack, goBack, isLastStep]
3105
3209
  );
3106
- return /* @__PURE__ */ jsx41(FormWizardContext.Provider, { value, children });
3210
+ return /* @__PURE__ */ jsx45(FormWizardContext.Provider, { value, children });
3107
3211
  }
3108
3212
 
3109
3213
  // src/components/FormWizard/FormWizardProgress.tsx
3110
- import { jsx as jsx42, jsxs as jsxs30 } from "react/jsx-runtime";
3214
+ import { jsx as jsx46, jsxs as jsxs32 } from "react/jsx-runtime";
3111
3215
  function CheckIcon2() {
3112
- return /* @__PURE__ */ jsx42(
3216
+ return /* @__PURE__ */ jsx46(
3113
3217
  "svg",
3114
3218
  {
3115
3219
  "aria-hidden": "true",
@@ -3120,24 +3224,24 @@ function CheckIcon2() {
3120
3224
  strokeWidth: "2",
3121
3225
  strokeLinecap: "round",
3122
3226
  strokeLinejoin: "round",
3123
- children: /* @__PURE__ */ jsx42("path", { d: "M3 8.5l3.5 3.5 6.5-7" })
3227
+ children: /* @__PURE__ */ jsx46("path", { d: "M3 8.5l3.5 3.5 6.5-7" })
3124
3228
  }
3125
3229
  );
3126
3230
  }
3127
3231
  function FormWizardProgress({ labels }) {
3128
3232
  const { currentStep, totalSteps } = useFormWizard();
3129
- return /* @__PURE__ */ jsx42("nav", { "aria-label": "Form progress", children: /* @__PURE__ */ jsx42("ol", { className: "flex items-start", role: "list", children: labels.map((label, index) => {
3233
+ return /* @__PURE__ */ jsx46("nav", { "aria-label": "Form progress", children: /* @__PURE__ */ jsx46("ol", { className: "flex items-start", role: "list", children: labels.map((label, index) => {
3130
3234
  const isCompleted = index < currentStep;
3131
3235
  const isCurrent = index === currentStep;
3132
3236
  const isFuture = index > currentStep;
3133
- return /* @__PURE__ */ jsxs30(
3237
+ return /* @__PURE__ */ jsxs32(
3134
3238
  "li",
3135
3239
  {
3136
3240
  className: "flex flex-1 flex-col items-center",
3137
3241
  "aria-current": isCurrent ? "step" : void 0,
3138
3242
  children: [
3139
- /* @__PURE__ */ jsxs30("div", { className: "flex w-full items-center", children: [
3140
- index > 0 ? /* @__PURE__ */ jsx42(
3243
+ /* @__PURE__ */ jsxs32("div", { className: "flex w-full items-center", children: [
3244
+ index > 0 ? /* @__PURE__ */ jsx46(
3141
3245
  "div",
3142
3246
  {
3143
3247
  "aria-hidden": "true",
@@ -3146,8 +3250,8 @@ function FormWizardProgress({ labels }) {
3146
3250
  index <= currentStep ? "bg-[var(--color-brand-primary)]" : "bg-[var(--color-border-default)]"
3147
3251
  ].join(" ")
3148
3252
  }
3149
- ) : /* @__PURE__ */ jsx42("div", { className: "flex-1", "aria-hidden": "true" }),
3150
- /* @__PURE__ */ jsx42(
3253
+ ) : /* @__PURE__ */ jsx46("div", { className: "flex-1", "aria-hidden": "true" }),
3254
+ /* @__PURE__ */ jsx46(
3151
3255
  "div",
3152
3256
  {
3153
3257
  className: [
@@ -3159,10 +3263,10 @@ function FormWizardProgress({ labels }) {
3159
3263
  isFuture ? "border-2 border-[var(--color-border-default)] bg-[var(--color-surface-default)] text-[var(--color-text-tertiary)]" : ""
3160
3264
  ].join(" "),
3161
3265
  "aria-hidden": "true",
3162
- children: isCompleted ? /* @__PURE__ */ jsx42(CheckIcon2, {}) : index + 1
3266
+ children: isCompleted ? /* @__PURE__ */ jsx46(CheckIcon2, {}) : index + 1
3163
3267
  }
3164
3268
  ),
3165
- index < totalSteps - 1 ? /* @__PURE__ */ jsx42(
3269
+ index < totalSteps - 1 ? /* @__PURE__ */ jsx46(
3166
3270
  "div",
3167
3271
  {
3168
3272
  "aria-hidden": "true",
@@ -3171,9 +3275,9 @@ function FormWizardProgress({ labels }) {
3171
3275
  index < currentStep ? "bg-[var(--color-brand-primary)]" : "bg-[var(--color-border-default)]"
3172
3276
  ].join(" ")
3173
3277
  }
3174
- ) : /* @__PURE__ */ jsx42("div", { className: "flex-1", "aria-hidden": "true" })
3278
+ ) : /* @__PURE__ */ jsx46("div", { className: "flex-1", "aria-hidden": "true" })
3175
3279
  ] }),
3176
- /* @__PURE__ */ jsx42(
3280
+ /* @__PURE__ */ jsx46(
3177
3281
  "span",
3178
3282
  {
3179
3283
  className: [
@@ -3191,15 +3295,15 @@ function FormWizardProgress({ labels }) {
3191
3295
  }
3192
3296
 
3193
3297
  // src/components/FormWizard/FormWizardNav.tsx
3194
- import { jsx as jsx43, jsxs as jsxs31 } from "react/jsx-runtime";
3298
+ import { jsx as jsx47, jsxs as jsxs33 } from "react/jsx-runtime";
3195
3299
  function FormWizardNav({
3196
3300
  onNext,
3197
3301
  isSubmitting = false,
3198
3302
  submitLabel = "Submit"
3199
3303
  }) {
3200
3304
  const { canGoBack, goBack, isLastStep } = useFormWizard();
3201
- return /* @__PURE__ */ jsxs31("div", { className: "flex items-center justify-end gap-[var(--spacing-3)]", children: [
3202
- canGoBack && /* @__PURE__ */ jsx43(
3305
+ return /* @__PURE__ */ jsxs33("div", { className: "flex items-center justify-end gap-[var(--spacing-3)]", children: [
3306
+ canGoBack && /* @__PURE__ */ jsx47(
3203
3307
  Button,
3204
3308
  {
3205
3309
  variant: "secondary",
@@ -3209,7 +3313,7 @@ function FormWizardNav({
3209
3313
  children: "Back"
3210
3314
  }
3211
3315
  ),
3212
- /* @__PURE__ */ jsx43(
3316
+ /* @__PURE__ */ jsx47(
3213
3317
  Button,
3214
3318
  {
3215
3319
  variant: "primary",
@@ -3654,6 +3758,10 @@ export {
3654
3758
  LineHeightTight,
3655
3759
  Link,
3656
3760
  Menu,
3761
+ MenuHeader,
3762
+ MenuItem,
3763
+ MenuSection,
3764
+ MenuSeparator,
3657
3765
  MetricCard,
3658
3766
  Pill,
3659
3767
  Popover3 as Popover,