@cytario/design 7.0.0 → 7.2.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
@@ -150,6 +150,7 @@ import {
150
150
  Plug,
151
151
  Plus,
152
152
  RotateCcw,
153
+ RotateCw,
153
154
  Search,
154
155
  SearchX,
155
156
  Send,
@@ -242,6 +243,7 @@ var iconRegistry = {
242
243
  Plug,
243
244
  Plus,
244
245
  RotateCcw,
246
+ RotateCw,
245
247
  Search,
246
248
  SearchX,
247
249
  Send,
@@ -736,6 +738,7 @@ function IconButtonBase({
736
738
  isLoading = false,
737
739
  isDisabled,
738
740
  className,
741
+ ref,
739
742
  ...props
740
743
  }) {
741
744
  const cx = twMerge4(
@@ -751,6 +754,7 @@ function IconButtonBase({
751
754
  Component,
752
755
  {
753
756
  ...props,
757
+ ref,
754
758
  "aria-label": label,
755
759
  isDisabled: isDisabled || isLoading,
756
760
  className: cx,
@@ -1935,14 +1939,19 @@ import {
1935
1939
  MenuItem as AriaMenuItem,
1936
1940
  Popover as Popover2
1937
1941
  } from "react-aria-components";
1942
+ import { twMerge as twMerge10 } from "tailwind-merge";
1943
+
1944
+ // src/components/Menu/menuStyles.ts
1945
+ var popoverStyles = `
1946
+ bg-background rounded-md shadow-lg
1947
+ border border-border
1948
+ py-1 min-w-48
1949
+ entering:animate-in entering:fade-in entering:zoom-in-95
1950
+ exiting:animate-out exiting:fade-out exiting:zoom-out-95
1951
+ `;
1952
+
1953
+ // src/components/Menu/Menu.tsx
1938
1954
  import { jsx as jsx24, jsxs as jsxs18 } from "react/jsx-runtime";
1939
- var popoverStyles = [
1940
- "bg-background rounded-md",
1941
- "shadow-lg border border-border",
1942
- "py-1 min-w-48",
1943
- "entering:animate-in entering:fade-in entering:zoom-in-95",
1944
- "exiting:animate-out exiting:fade-out exiting:zoom-out-95"
1945
- ].join(" ");
1946
1955
  function Menu({
1947
1956
  items,
1948
1957
  content,
@@ -1957,61 +1966,161 @@ function Menu({
1957
1966
  const selectionProps = selectionMode && selectionMode !== "none" ? { selectionMode, selectedKeys, defaultSelectedKeys, onSelectionChange } : {};
1958
1967
  return /* @__PURE__ */ jsxs18(MenuTrigger, { children: [
1959
1968
  children,
1960
- /* @__PURE__ */ jsx24(
1961
- Popover2,
1969
+ /* @__PURE__ */ jsx24(Popover2, { className: twMerge10(popoverStyles, className), children: items ? /* @__PURE__ */ jsx24(
1970
+ AriaMenu,
1962
1971
  {
1963
- className: [popoverStyles, className].filter(Boolean).join(" "),
1964
- children: items ? /* @__PURE__ */ jsx24(
1965
- AriaMenu,
1972
+ items,
1973
+ onAction: (key) => {
1974
+ const item = items.find((i) => i.id === key);
1975
+ item?.onAction?.();
1976
+ onAction?.(key);
1977
+ },
1978
+ ...selectionProps,
1979
+ className: "outline-none",
1980
+ children: (item) => /* @__PURE__ */ jsxs18(
1981
+ AriaMenuItem,
1966
1982
  {
1967
- items,
1968
- onAction: (key) => {
1969
- const item = items.find((i) => i.id === key);
1970
- item?.onAction?.();
1971
- onAction?.(key);
1972
- },
1973
- ...selectionProps,
1974
- className: "outline-none",
1975
- children: (item) => /* @__PURE__ */ jsxs18(
1976
- AriaMenuItem,
1983
+ id: item.id,
1984
+ href: item.href,
1985
+ target: item.target,
1986
+ isDisabled: item.isDisabled,
1987
+ className: [
1988
+ "flex items-center gap-2 px-3 py-2 text-sm outline-none cursor-default",
1989
+ "transition-colors",
1990
+ "focus:bg-muted",
1991
+ "hover:bg-muted",
1992
+ "disabled:opacity-50 disabled:pointer-events-none",
1993
+ item.isDanger ? "text-destructive" : "text-foreground"
1994
+ ].filter(Boolean).join(" "),
1995
+ children: [
1996
+ item.icon && /* @__PURE__ */ jsx24(Icon, { icon: item.icon, size: "sm" }),
1997
+ /* @__PURE__ */ jsx24("span", { className: "flex-1", children: item.label }),
1998
+ item.endContent && /* @__PURE__ */ jsx24("span", { className: "ml-auto flex items-center", children: item.endContent })
1999
+ ]
2000
+ }
2001
+ )
2002
+ }
2003
+ ) : /* @__PURE__ */ jsx24(
2004
+ AriaMenu,
2005
+ {
2006
+ onAction: (key) => onAction?.(key),
2007
+ ...selectionProps,
2008
+ className: "outline-none",
2009
+ children: content
2010
+ }
2011
+ ) })
2012
+ ] });
2013
+ }
2014
+
2015
+ // src/components/Menu/useContextMenu.tsx
2016
+ import {
2017
+ useCallback as useCallback3,
2018
+ useEffect as useEffect3,
2019
+ useRef as useRef5,
2020
+ useState as useState7
2021
+ } from "react";
2022
+ import {
2023
+ Menu as AriaMenu2,
2024
+ MenuTrigger as MenuTrigger2,
2025
+ Popover as Popover3,
2026
+ Pressable
2027
+ } from "react-aria-components";
2028
+ import { twMerge as twMerge11 } from "tailwind-merge";
2029
+ import { jsx as jsx25, jsxs as jsxs19 } from "react/jsx-runtime";
2030
+ function useContextMenu({
2031
+ content,
2032
+ onAction,
2033
+ className
2034
+ }) {
2035
+ const [anchor, setAnchor] = useState7(null);
2036
+ const anchorRef = useRef5(null);
2037
+ const popoverRef = useRef5(null);
2038
+ const isOpen = anchor !== null;
2039
+ const close = useCallback3(() => setAnchor(null), []);
2040
+ const onContextMenu = useCallback3((event) => {
2041
+ event.preventDefault();
2042
+ setAnchor({ x: event.clientX, y: event.clientY });
2043
+ }, []);
2044
+ const onPress = useCallback3((event) => {
2045
+ const rect = event.target.getBoundingClientRect();
2046
+ setAnchor({ x: rect.left, y: rect.bottom });
2047
+ }, []);
2048
+ useEffect3(() => {
2049
+ if (!isOpen) return;
2050
+ const isInside = (target) => popoverRef.current?.contains(target) ?? false;
2051
+ const onPointerDown = (event) => {
2052
+ if (!isInside(event.target)) close();
2053
+ };
2054
+ const onOutsideContextMenu = (event) => {
2055
+ if (isInside(event.target)) return;
2056
+ event.preventDefault();
2057
+ close();
2058
+ };
2059
+ const onKeyDown = (event) => {
2060
+ if (event.key === "Escape") close();
2061
+ };
2062
+ document.addEventListener("pointerdown", onPointerDown, true);
2063
+ document.addEventListener("contextmenu", onOutsideContextMenu, true);
2064
+ document.addEventListener("keydown", onKeyDown, true);
2065
+ return () => {
2066
+ document.removeEventListener("pointerdown", onPointerDown, true);
2067
+ document.removeEventListener("contextmenu", onOutsideContextMenu, true);
2068
+ document.removeEventListener("keydown", onKeyDown, true);
2069
+ };
2070
+ }, [isOpen, close]);
2071
+ const menu = /* @__PURE__ */ jsxs19(
2072
+ MenuTrigger2,
2073
+ {
2074
+ isOpen,
2075
+ onOpenChange: (open) => {
2076
+ if (!open) close();
2077
+ },
2078
+ children: [
2079
+ /* @__PURE__ */ jsx25(Pressable, { children: /* @__PURE__ */ jsx25(
2080
+ "span",
2081
+ {
2082
+ ref: anchorRef,
2083
+ "aria-hidden": true,
2084
+ className: "pointer-events-none fixed h-0 w-0",
2085
+ style: { left: anchor?.x ?? 0, top: anchor?.y ?? 0 }
2086
+ }
2087
+ ) }),
2088
+ /* @__PURE__ */ jsx25(
2089
+ Popover3,
2090
+ {
2091
+ isNonModal: true,
2092
+ placement: "bottom start",
2093
+ ref: popoverRef,
2094
+ className: twMerge11(popoverStyles, className),
2095
+ children: /* @__PURE__ */ jsx25(
2096
+ AriaMenu2,
1977
2097
  {
1978
- id: item.id,
1979
- href: item.href,
1980
- target: item.target,
1981
- isDisabled: item.isDisabled,
1982
- className: [
1983
- "flex items-center gap-2 px-3 py-2 text-sm outline-none cursor-default",
1984
- "transition-colors",
1985
- "focus:bg-muted",
1986
- "hover:bg-muted",
1987
- "disabled:opacity-50 disabled:pointer-events-none",
1988
- item.isDanger ? "text-destructive" : "text-foreground"
1989
- ].filter(Boolean).join(" "),
1990
- children: [
1991
- item.icon && /* @__PURE__ */ jsx24(Icon, { icon: item.icon, size: "sm" }),
1992
- /* @__PURE__ */ jsx24("span", { className: "flex-1", children: item.label }),
1993
- item.endContent && /* @__PURE__ */ jsx24("span", { className: "ml-auto flex items-center", children: item.endContent })
1994
- ]
2098
+ autoFocus: "first",
2099
+ onAction: (key) => {
2100
+ onAction?.(String(key));
2101
+ close();
2102
+ },
2103
+ className: "outline-none",
2104
+ children: content
1995
2105
  }
1996
2106
  )
1997
2107
  }
1998
- ) : /* @__PURE__ */ jsx24(
1999
- AriaMenu,
2000
- {
2001
- onAction: (key) => onAction?.(key),
2002
- ...selectionProps,
2003
- className: "outline-none",
2004
- children: content
2005
- }
2006
2108
  )
2007
- }
2008
- )
2009
- ] });
2109
+ ]
2110
+ }
2111
+ );
2112
+ return {
2113
+ targetProps: { onContextMenu },
2114
+ triggerProps: { onPress },
2115
+ menu,
2116
+ isOpen,
2117
+ close
2118
+ };
2010
2119
  }
2011
2120
 
2012
2121
  // src/components/Menu/MenuItem.tsx
2013
2122
  import { MenuItem as AriaMenuItem2 } from "react-aria-components";
2014
- import { jsx as jsx25, jsxs as jsxs19 } from "react/jsx-runtime";
2123
+ import { jsx as jsx26, jsxs as jsxs20 } from "react/jsx-runtime";
2015
2124
  function MenuItem({
2016
2125
  id,
2017
2126
  children,
@@ -2025,7 +2134,7 @@ function MenuItem({
2025
2134
  textValue,
2026
2135
  className
2027
2136
  }) {
2028
- return /* @__PURE__ */ jsxs19(
2137
+ return /* @__PURE__ */ jsxs20(
2029
2138
  AriaMenuItem2,
2030
2139
  {
2031
2140
  id,
@@ -2044,9 +2153,9 @@ function MenuItem({
2044
2153
  className
2045
2154
  ].filter(Boolean).join(" "),
2046
2155
  children: [
2047
- icon && /* @__PURE__ */ jsx25(Icon, { icon, size: "sm" }),
2048
- /* @__PURE__ */ jsx25("span", { className: "flex-1", children }),
2049
- endContent && /* @__PURE__ */ jsx25("span", { className: "ml-auto flex items-center", children: endContent })
2156
+ icon && /* @__PURE__ */ jsx26(Icon, { icon, size: "sm" }),
2157
+ /* @__PURE__ */ jsx26("span", { className: "flex-1", children }),
2158
+ endContent && /* @__PURE__ */ jsx26("span", { className: "ml-auto flex items-center", children: endContent })
2050
2159
  ]
2051
2160
  }
2052
2161
  );
@@ -2055,7 +2164,7 @@ function MenuItem({
2055
2164
  // src/components/Menu/MenuCheckboxItem.tsx
2056
2165
  import { MenuItem as AriaMenuItem3 } from "react-aria-components";
2057
2166
  import { Check as Check4 } from "lucide-react";
2058
- import { Fragment as Fragment7, jsx as jsx26, jsxs as jsxs20 } from "react/jsx-runtime";
2167
+ import { Fragment as Fragment7, jsx as jsx27, jsxs as jsxs21 } from "react/jsx-runtime";
2059
2168
  function MenuCheckboxItem({
2060
2169
  id,
2061
2170
  children,
@@ -2063,7 +2172,7 @@ function MenuCheckboxItem({
2063
2172
  isDisabled,
2064
2173
  className
2065
2174
  }) {
2066
- return /* @__PURE__ */ jsx26(
2175
+ return /* @__PURE__ */ jsx27(
2067
2176
  AriaMenuItem3,
2068
2177
  {
2069
2178
  id,
@@ -2079,9 +2188,9 @@ function MenuCheckboxItem({
2079
2188
  isSelected ? "font-medium" : "",
2080
2189
  className
2081
2190
  ].filter(Boolean).join(" "),
2082
- children: ({ isSelected }) => /* @__PURE__ */ jsxs20(Fragment7, { children: [
2083
- /* @__PURE__ */ jsx26("span", { className: "flex items-center justify-center w-4 h-4 shrink-0", children: isSelected && /* @__PURE__ */ jsx26(Check4, { size: 14, className: "text-primary", "aria-hidden": "true" }) }),
2084
- /* @__PURE__ */ jsx26("span", { className: "flex-1", children })
2191
+ children: ({ isSelected }) => /* @__PURE__ */ jsxs21(Fragment7, { children: [
2192
+ /* @__PURE__ */ jsx27("span", { className: "flex items-center justify-center w-4 h-4 shrink-0", children: isSelected && /* @__PURE__ */ jsx27(Check4, { size: 14, className: "text-primary", "aria-hidden": "true" }) }),
2193
+ /* @__PURE__ */ jsx27("span", { className: "flex-1", children })
2085
2194
  ] })
2086
2195
  }
2087
2196
  );
@@ -2092,15 +2201,15 @@ import {
2092
2201
  MenuSection as AriaMenuSection,
2093
2202
  Header
2094
2203
  } from "react-aria-components";
2095
- import { jsx as jsx27, jsxs as jsxs21 } from "react/jsx-runtime";
2204
+ import { jsx as jsx28, jsxs as jsxs22 } from "react/jsx-runtime";
2096
2205
  function MenuSection({
2097
2206
  header,
2098
2207
  children,
2099
2208
  "aria-label": ariaLabel,
2100
2209
  className
2101
2210
  }) {
2102
- return /* @__PURE__ */ jsxs21(AriaMenuSection, { className, "aria-label": ariaLabel, children: [
2103
- header && /* @__PURE__ */ jsx27(
2211
+ return /* @__PURE__ */ jsxs22(AriaMenuSection, { className, "aria-label": ariaLabel, children: [
2212
+ header && /* @__PURE__ */ jsx28(
2104
2213
  Header,
2105
2214
  {
2106
2215
  className: [
@@ -2119,16 +2228,16 @@ function MenuSection({
2119
2228
 
2120
2229
  // src/components/Menu/MenuHeader.tsx
2121
2230
  import { Header as Header2 } from "react-aria-components";
2122
- import { jsx as jsx28 } from "react/jsx-runtime";
2231
+ import { jsx as jsx29 } from "react/jsx-runtime";
2123
2232
  function MenuHeader({ children, className }) {
2124
- return /* @__PURE__ */ jsx28(Header2, { className, children });
2233
+ return /* @__PURE__ */ jsx29(Header2, { className, children });
2125
2234
  }
2126
2235
 
2127
2236
  // src/components/Menu/MenuSeparator.tsx
2128
2237
  import { Separator } from "react-aria-components";
2129
- import { jsx as jsx29 } from "react/jsx-runtime";
2238
+ import { jsx as jsx30 } from "react/jsx-runtime";
2130
2239
  function MenuSeparator({ className }) {
2131
- return /* @__PURE__ */ jsx29(
2240
+ return /* @__PURE__ */ jsx30(
2132
2241
  Separator,
2133
2242
  {
2134
2243
  className: [
@@ -2145,17 +2254,17 @@ import {
2145
2254
  Popover as AriaPopover,
2146
2255
  Button as AriaButton3
2147
2256
  } from "react-aria-components";
2148
- import { twMerge as twMerge10 } from "tailwind-merge";
2149
- import { jsx as jsx30 } from "react/jsx-runtime";
2150
- function Popover3({ children, isOpen, onOpenChange }) {
2151
- return /* @__PURE__ */ jsx30(DialogTrigger, { isOpen, onOpenChange, children });
2257
+ import { twMerge as twMerge12 } from "tailwind-merge";
2258
+ import { jsx as jsx31 } from "react/jsx-runtime";
2259
+ function Popover4({ children, isOpen, onOpenChange }) {
2260
+ return /* @__PURE__ */ jsx31(DialogTrigger, { isOpen, onOpenChange, children });
2152
2261
  }
2153
2262
  function PopoverTrigger({ children, className }) {
2154
2263
  const cx = `
2155
2264
  inline-flex items-center bg-transparent border-none p-0 outline-none cursor-pointer
2156
2265
  focus-visible:ring-2 focus-visible:ring-ring focus-visible:rounded-sm
2157
2266
  `;
2158
- return /* @__PURE__ */ jsx30(AriaButton3, { className: twMerge10(cx, className), children });
2267
+ return /* @__PURE__ */ jsx31(AriaButton3, { className: twMerge12(cx, className), children });
2159
2268
  }
2160
2269
  function PopoverContent({
2161
2270
  placement = "bottom",
@@ -2176,13 +2285,13 @@ function PopoverContent({
2176
2285
  entering:placement-left:slide-in-from-right-1
2177
2286
  entering:placement-right:slide-in-from-left-1
2178
2287
  `;
2179
- return /* @__PURE__ */ jsx30(
2288
+ return /* @__PURE__ */ jsx31(
2180
2289
  AriaPopover,
2181
2290
  {
2182
2291
  ...rest,
2183
2292
  placement,
2184
2293
  offset: offsetPx,
2185
- className: twMerge10(cx, className),
2294
+ className: twMerge12(cx, className),
2186
2295
  children
2187
2296
  }
2188
2297
  );
@@ -2190,14 +2299,14 @@ function PopoverContent({
2190
2299
 
2191
2300
  // src/components/Tabs/Tabs.tsx
2192
2301
  import { createContext as createContext2, useContext as useContext2 } from "react";
2193
- import { twMerge as twMerge11 } from "tailwind-merge";
2302
+ import { twMerge as twMerge13 } from "tailwind-merge";
2194
2303
  import {
2195
2304
  Tabs as AriaTabs,
2196
2305
  TabList as AriaTabList,
2197
2306
  Tab as AriaTab,
2198
2307
  TabPanel as AriaTabPanel
2199
2308
  } from "react-aria-components";
2200
- import { jsx as jsx31 } from "react/jsx-runtime";
2309
+ import { jsx as jsx32 } from "react/jsx-runtime";
2201
2310
  var TabsContext = createContext2({
2202
2311
  variant: "underline",
2203
2312
  size: "md"
@@ -2215,12 +2324,12 @@ function Tabs({
2215
2324
  children,
2216
2325
  ...props
2217
2326
  }) {
2218
- return /* @__PURE__ */ jsx31(TabsContext.Provider, { value: { variant, size }, children: /* @__PURE__ */ jsx31(
2327
+ return /* @__PURE__ */ jsx32(TabsContext.Provider, { value: { variant, size }, children: /* @__PURE__ */ jsx32(
2219
2328
  AriaTabs,
2220
2329
  {
2221
2330
  ...props,
2222
2331
  orientation,
2223
- className: twMerge11(
2332
+ className: twMerge13(
2224
2333
  orientation === "vertical" ? "flex" : "",
2225
2334
  className
2226
2335
  ),
@@ -2235,11 +2344,11 @@ function TabList({
2235
2344
  const { variant } = useContext2(TabsContext);
2236
2345
  const baseStyles = variant === "unstyled" ? "flex items-center" : variant === "underline" ? "flex items-center border-b border-border" : "inline-flex items-center bg-muted rounded-lg p-1 gap-1";
2237
2346
  const verticalStyles = variant === "unstyled" ? "flex-col" : variant === "underline" ? "flex-col border-b-0 border-r border-border" : "flex-col";
2238
- return /* @__PURE__ */ jsx31(
2347
+ return /* @__PURE__ */ jsx32(
2239
2348
  AriaTabList,
2240
2349
  {
2241
2350
  ...props,
2242
- className: ({ orientation }) => twMerge11(
2351
+ className: ({ orientation }) => twMerge13(
2243
2352
  baseStyles,
2244
2353
  orientation === "vertical" ? verticalStyles : "",
2245
2354
  className
@@ -2249,20 +2358,20 @@ function TabList({
2249
2358
  }
2250
2359
  function Tab({ className, ...props }) {
2251
2360
  const { variant, size } = useContext2(TabsContext);
2252
- return /* @__PURE__ */ jsx31(
2361
+ return /* @__PURE__ */ jsx32(
2253
2362
  AriaTab,
2254
2363
  {
2255
2364
  ...props,
2256
2365
  className: ({ isSelected, isDisabled, isHovered, isPressed }) => {
2257
2366
  if (variant === "unstyled") {
2258
- return twMerge11(
2367
+ return twMerge13(
2259
2368
  "cursor-pointer outline-none",
2260
2369
  "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
2261
2370
  isDisabled ? "opacity-50 pointer-events-none" : "",
2262
2371
  className
2263
2372
  );
2264
2373
  }
2265
- return twMerge11(
2374
+ return twMerge13(
2266
2375
  // Base
2267
2376
  "cursor-pointer outline-none transition-colors",
2268
2377
  "font-medium",
@@ -2306,11 +2415,11 @@ function getTabVariantStyles(variant, state) {
2306
2415
  }
2307
2416
  function TabPanel({ className, ...props }) {
2308
2417
  const { variant } = useContext2(TabsContext);
2309
- return /* @__PURE__ */ jsx31(
2418
+ return /* @__PURE__ */ jsx32(
2310
2419
  AriaTabPanel,
2311
2420
  {
2312
2421
  ...props,
2313
- className: twMerge11(
2422
+ className: twMerge13(
2314
2423
  variant === "unstyled" ? "outline-none" : "mt-4 outline-none",
2315
2424
  className
2316
2425
  )
@@ -2328,12 +2437,12 @@ import {
2328
2437
 
2329
2438
  // src/components/SegmentedControl/SegmentedControl.tsx
2330
2439
  import { createContext as createContext3, useContext as useContext3 } from "react";
2331
- import { twMerge as twMerge12 } from "tailwind-merge";
2440
+ import { twMerge as twMerge14 } from "tailwind-merge";
2332
2441
  import {
2333
2442
  ToggleButtonGroup as AriaToggleButtonGroup,
2334
2443
  ToggleButton as AriaToggleButton3
2335
2444
  } from "react-aria-components";
2336
- import { jsx as jsx32 } from "react/jsx-runtime";
2445
+ import { jsx as jsx33 } from "react/jsx-runtime";
2337
2446
  var SegmentedControlContext = createContext3({
2338
2447
  size: "md"
2339
2448
  });
@@ -2353,7 +2462,7 @@ function SegmentedControl({
2353
2462
  ...props
2354
2463
  }) {
2355
2464
  const isNoneMode = selectionMode === "none";
2356
- return /* @__PURE__ */ jsx32(SegmentedControlContext.Provider, { value: { size }, children: /* @__PURE__ */ jsx32(
2465
+ return /* @__PURE__ */ jsx33(SegmentedControlContext.Provider, { value: { size }, children: /* @__PURE__ */ jsx33(
2357
2466
  AriaToggleButtonGroup,
2358
2467
  {
2359
2468
  ...props,
@@ -2361,7 +2470,7 @@ function SegmentedControl({
2361
2470
  selectedKeys: isNoneMode ? /* @__PURE__ */ new Set() : selectedKeys,
2362
2471
  defaultSelectedKeys: isNoneMode ? void 0 : defaultSelectedKeys,
2363
2472
  onSelectionChange: isNoneMode ? void 0 : onSelectionChange,
2364
- className: twMerge12(
2473
+ className: twMerge14(
2365
2474
  "inline-flex items-center rounded-lg border border-border bg-muted p-0.5 gap-0.5",
2366
2475
  className
2367
2476
  ),
@@ -2374,11 +2483,11 @@ function SegmentedControlItem({
2374
2483
  ...props
2375
2484
  }) {
2376
2485
  const { size } = useContext3(SegmentedControlContext);
2377
- return /* @__PURE__ */ jsx32(
2486
+ return /* @__PURE__ */ jsx33(
2378
2487
  AriaToggleButton3,
2379
2488
  {
2380
2489
  ...props,
2381
- className: ({ isSelected, isHovered, isPressed, isDisabled }) => twMerge12(
2490
+ className: ({ isSelected, isHovered, isPressed, isDisabled }) => twMerge14(
2382
2491
  // Base layout
2383
2492
  "inline-flex items-center justify-center",
2384
2493
  "rounded-md",
@@ -2399,8 +2508,8 @@ function SegmentedControlItem({
2399
2508
  }
2400
2509
 
2401
2510
  // src/components/Badge/Badge.tsx
2402
- import { twMerge as twMerge13 } from "tailwind-merge";
2403
- import { jsx as jsx33, jsxs as jsxs22 } from "react/jsx-runtime";
2511
+ import { twMerge as twMerge15 } from "tailwind-merge";
2512
+ import { jsx as jsx34, jsxs as jsxs23 } from "react/jsx-runtime";
2404
2513
  var variantStyles4 = {
2405
2514
  neutral: "bg-(--color-badge-neutral-bg) text-(--color-badge-neutral-text)",
2406
2515
  purple: "bg-(--color-badge-purple-bg) text-(--color-badge-purple-text)",
@@ -2421,18 +2530,18 @@ function Badge({
2421
2530
  icon,
2422
2531
  className
2423
2532
  }) {
2424
- return /* @__PURE__ */ jsxs22(
2533
+ return /* @__PURE__ */ jsxs23(
2425
2534
  "span",
2426
2535
  {
2427
- className: twMerge13(
2536
+ className: twMerge15(
2428
2537
  "inline-flex items-center gap-1 rounded-full",
2429
- "text-xs font-medium leading-tight",
2538
+ "text-xs font-medium leading-tight tracking-wider tabular-nums",
2430
2539
  variantStyles4[variant],
2431
2540
  sizeStyles6[size],
2432
2541
  className
2433
2542
  ),
2434
2543
  children: [
2435
- icon && /* @__PURE__ */ jsx33(Icon, { icon, size: "xs" }),
2544
+ icon && /* @__PURE__ */ jsx34(Icon, { icon, size: "xs" }),
2436
2545
  children
2437
2546
  ]
2438
2547
  }
@@ -2440,9 +2549,9 @@ function Badge({
2440
2549
  }
2441
2550
 
2442
2551
  // src/components/Card/Card.tsx
2443
- import { useCallback as useCallback3 } from "react";
2444
- import { twMerge as twMerge14 } from "tailwind-merge";
2445
- import { Fragment as Fragment8, jsx as jsx34, jsxs as jsxs23 } from "react/jsx-runtime";
2552
+ import { useCallback as useCallback4 } from "react";
2553
+ import { twMerge as twMerge16 } from "tailwind-merge";
2554
+ import { Fragment as Fragment8, jsx as jsx35, jsxs as jsxs24 } from "react/jsx-runtime";
2446
2555
  var paddingStyles = {
2447
2556
  none: "p-0",
2448
2557
  sm: "p-3",
@@ -2460,13 +2569,13 @@ function Card({
2460
2569
  className
2461
2570
  }) {
2462
2571
  const isInteractive = interactive || !!href || !!onPress;
2463
- const containerClass = twMerge14(
2572
+ const containerClass = twMerge16(
2464
2573
  "bg-background border border-border rounded-lg overflow-hidden shadow-sm",
2465
2574
  isInteractive && "transition-all hover:shadow-md hover:border-ring cursor-pointer",
2466
2575
  (href || onPress) && "block focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 outline-none",
2467
2576
  className
2468
2577
  );
2469
- const handleKeyDown = useCallback3(
2578
+ const handleKeyDown = useCallback4(
2470
2579
  (e) => {
2471
2580
  if (onPress && (e.key === "Enter" || e.key === " ")) {
2472
2581
  e.preventDefault();
@@ -2475,22 +2584,22 @@ function Card({
2475
2584
  },
2476
2585
  [onPress]
2477
2586
  );
2478
- const content = /* @__PURE__ */ jsxs23(Fragment8, { children: [
2479
- header && /* @__PURE__ */ jsx34(
2587
+ const content = /* @__PURE__ */ jsxs24(Fragment8, { children: [
2588
+ header && /* @__PURE__ */ jsx35(
2480
2589
  "div",
2481
2590
  {
2482
- className: twMerge14(
2591
+ className: twMerge16(
2483
2592
  "border-b border-border",
2484
2593
  paddingStyles[padding]
2485
2594
  ),
2486
2595
  children: header
2487
2596
  }
2488
2597
  ),
2489
- /* @__PURE__ */ jsx34("div", { className: paddingStyles[padding], children }),
2490
- footer && /* @__PURE__ */ jsx34(
2598
+ /* @__PURE__ */ jsx35("div", { className: paddingStyles[padding], children }),
2599
+ footer && /* @__PURE__ */ jsx35(
2491
2600
  "div",
2492
2601
  {
2493
- className: twMerge14(
2602
+ className: twMerge16(
2494
2603
  "border-t border-border",
2495
2604
  paddingStyles[padding]
2496
2605
  ),
@@ -2499,10 +2608,10 @@ function Card({
2499
2608
  )
2500
2609
  ] });
2501
2610
  if (href) {
2502
- return /* @__PURE__ */ jsx34("a", { href, className: containerClass, children: content });
2611
+ return /* @__PURE__ */ jsx35("a", { href, className: containerClass, children: content });
2503
2612
  }
2504
2613
  if (onPress) {
2505
- return /* @__PURE__ */ jsx34(
2614
+ return /* @__PURE__ */ jsx35(
2506
2615
  "div",
2507
2616
  {
2508
2617
  role: "button",
@@ -2514,13 +2623,13 @@ function Card({
2514
2623
  }
2515
2624
  );
2516
2625
  }
2517
- return /* @__PURE__ */ jsx34("div", { className: containerClass, children: content });
2626
+ return /* @__PURE__ */ jsx35("div", { className: containerClass, children: content });
2518
2627
  }
2519
2628
 
2520
2629
  // src/components/DeltaIndicator/DeltaIndicator.tsx
2521
2630
  import { ArrowUp as ArrowUp2, ArrowDown as ArrowDown2, Minus as Minus2 } from "lucide-react";
2522
- import { twMerge as twMerge15 } from "tailwind-merge";
2523
- import { jsx as jsx35, jsxs as jsxs24 } from "react/jsx-runtime";
2631
+ import { twMerge as twMerge17 } from "tailwind-merge";
2632
+ import { jsx as jsx36, jsxs as jsxs25 } from "react/jsx-runtime";
2524
2633
  function getDirection(current, previous) {
2525
2634
  const diff = current - previous;
2526
2635
  if (diff > 0) return "increase";
@@ -2573,16 +2682,16 @@ function DeltaIndicator({
2573
2682
  className
2574
2683
  }) {
2575
2684
  if (unavailable) {
2576
- return /* @__PURE__ */ jsxs24(
2685
+ return /* @__PURE__ */ jsxs25(
2577
2686
  "span",
2578
2687
  {
2579
- className: twMerge15(
2688
+ className: twMerge17(
2580
2689
  "inline-flex items-center gap-1 font-medium",
2581
2690
  "text-muted-foreground",
2582
2691
  className
2583
2692
  ),
2584
2693
  children: [
2585
- label && /* @__PURE__ */ jsx35("span", { className: "text-sm text-muted-foreground mr-1", children: label }),
2694
+ label && /* @__PURE__ */ jsx36("span", { className: "text-sm text-muted-foreground mr-1", children: label }),
2586
2695
  unavailableText
2587
2696
  ]
2588
2697
  }
@@ -2612,10 +2721,10 @@ function DeltaIndicator({
2612
2721
  }
2613
2722
  }
2614
2723
  const isPill = mode === "pill";
2615
- return /* @__PURE__ */ jsxs24(
2724
+ return /* @__PURE__ */ jsxs25(
2616
2725
  "span",
2617
2726
  {
2618
- className: twMerge15(
2727
+ className: twMerge17(
2619
2728
  "inline-flex items-center gap-1 font-medium",
2620
2729
  colorStyles2,
2621
2730
  isPill && [
@@ -2626,8 +2735,8 @@ function DeltaIndicator({
2626
2735
  className
2627
2736
  ),
2628
2737
  children: [
2629
- label && /* @__PURE__ */ jsx35("span", { className: "text-sm text-muted-foreground mr-1", children: label }),
2630
- /* @__PURE__ */ jsx35(IconComponent, { size: 14, "aria-hidden": true }),
2738
+ label && /* @__PURE__ */ jsx36("span", { className: "text-sm text-muted-foreground mr-1", children: label }),
2739
+ /* @__PURE__ */ jsx36(IconComponent, { size: 14, "aria-hidden": true }),
2631
2740
  valueText
2632
2741
  ]
2633
2742
  }
@@ -2635,8 +2744,8 @@ function DeltaIndicator({
2635
2744
  }
2636
2745
 
2637
2746
  // src/components/ProgressBar/ProgressBar.tsx
2638
- import { twMerge as twMerge16 } from "tailwind-merge";
2639
- import { jsx as jsx36, jsxs as jsxs25 } from "react/jsx-runtime";
2747
+ import { twMerge as twMerge18 } from "tailwind-merge";
2748
+ import { jsx as jsx37, jsxs as jsxs26 } from "react/jsx-runtime";
2640
2749
  var fillStyles = {
2641
2750
  brand: "bg-(--color-progress-fill)",
2642
2751
  success: "bg-(--color-progress-fill-success)",
@@ -2659,12 +2768,12 @@ function ProgressBar({
2659
2768
  className
2660
2769
  }) {
2661
2770
  const clampedValue = Math.min(100, Math.max(0, value));
2662
- return /* @__PURE__ */ jsxs25("div", { className: twMerge16("w-full", className), children: [
2663
- (label || description || showValue) && /* @__PURE__ */ jsxs25("div", { className: "flex items-center justify-between mb-2", children: [
2664
- /* @__PURE__ */ jsx36("span", { className: "text-sm font-medium text-foreground", children: label }),
2665
- /* @__PURE__ */ jsx36("span", { className: "text-sm text-muted-foreground", children: description ?? (showValue ? `${clampedValue}%` : null) })
2771
+ return /* @__PURE__ */ jsxs26("div", { className: twMerge18("w-full", className), children: [
2772
+ (label || description || showValue) && /* @__PURE__ */ jsxs26("div", { className: "flex items-center justify-between mb-2", children: [
2773
+ /* @__PURE__ */ jsx37("span", { className: "text-sm font-medium text-foreground", children: label }),
2774
+ /* @__PURE__ */ jsx37("span", { className: "text-sm text-muted-foreground", children: description ?? (showValue ? `${clampedValue}%` : null) })
2666
2775
  ] }),
2667
- /* @__PURE__ */ jsx36(
2776
+ /* @__PURE__ */ jsx37(
2668
2777
  "div",
2669
2778
  {
2670
2779
  role: "progressbar",
@@ -2672,14 +2781,14 @@ function ProgressBar({
2672
2781
  "aria-valuemin": 0,
2673
2782
  "aria-valuemax": 100,
2674
2783
  "aria-label": label ?? "Progress",
2675
- className: twMerge16(
2784
+ className: twMerge18(
2676
2785
  "w-full rounded-full bg-(--color-progress-track)",
2677
2786
  sizeStyles7[size]
2678
2787
  ),
2679
- children: /* @__PURE__ */ jsx36(
2788
+ children: /* @__PURE__ */ jsx37(
2680
2789
  "div",
2681
2790
  {
2682
- className: twMerge16(
2791
+ className: twMerge18(
2683
2792
  "h-full rounded-full transition-all duration-300",
2684
2793
  fillStyles[variant]
2685
2794
  ),
@@ -2692,15 +2801,15 @@ function ProgressBar({
2692
2801
  }
2693
2802
 
2694
2803
  // src/components/Banner/Banner.tsx
2695
- import { useState as useState7 } from "react";
2804
+ import { useState as useState8 } from "react";
2696
2805
  import {
2697
2806
  Info as Info3,
2698
2807
  AlertTriangle as AlertTriangle2,
2699
2808
  AlertCircle as AlertCircle2,
2700
2809
  CheckCircle2 as CheckCircle22
2701
2810
  } from "lucide-react";
2702
- import { twMerge as twMerge17 } from "tailwind-merge";
2703
- import { jsx as jsx37, jsxs as jsxs26 } from "react/jsx-runtime";
2811
+ import { twMerge as twMerge19 } from "tailwind-merge";
2812
+ import { jsx as jsx38, jsxs as jsxs27 } from "react/jsx-runtime";
2704
2813
  var variantConfig2 = {
2705
2814
  info: {
2706
2815
  icon: Info3,
@@ -2736,7 +2845,7 @@ function Banner({
2736
2845
  onDismiss,
2737
2846
  className
2738
2847
  }) {
2739
- const [dismissed, setDismissed] = useState7(false);
2848
+ const [dismissed, setDismissed] = useState8(false);
2740
2849
  if (dismissed) return null;
2741
2850
  const config = variantConfig2[variant];
2742
2851
  const resolvedIcon = icon ?? config.icon;
@@ -2744,40 +2853,40 @@ function Banner({
2744
2853
  setDismissed(true);
2745
2854
  onDismiss?.();
2746
2855
  };
2747
- return /* @__PURE__ */ jsxs26(
2856
+ return /* @__PURE__ */ jsxs27(
2748
2857
  "div",
2749
2858
  {
2750
2859
  role: config.role,
2751
- className: twMerge17(
2860
+ className: twMerge19(
2752
2861
  "flex items-start gap-3 rounded-lg border px-4 py-3",
2753
2862
  "text-sm",
2754
2863
  config.containerClass,
2755
2864
  className
2756
2865
  ),
2757
2866
  children: [
2758
- /* @__PURE__ */ jsx37(
2867
+ /* @__PURE__ */ jsx38(
2759
2868
  Icon,
2760
2869
  {
2761
2870
  icon: resolvedIcon,
2762
2871
  size: "md",
2763
- className: twMerge17("mt-0.5", config.iconClass)
2872
+ className: twMerge19("mt-0.5", config.iconClass)
2764
2873
  }
2765
2874
  ),
2766
- /* @__PURE__ */ jsxs26("div", { className: "flex-1", children: [
2767
- title && /* @__PURE__ */ jsxs26("span", { className: "font-medium", children: [
2875
+ /* @__PURE__ */ jsxs27("div", { className: "flex-1", children: [
2876
+ title && /* @__PURE__ */ jsxs27("span", { className: "font-medium", children: [
2768
2877
  title,
2769
2878
  " \u2014 "
2770
2879
  ] }),
2771
2880
  children
2772
2881
  ] }),
2773
- dismissible && /* @__PURE__ */ jsx37(
2882
+ dismissible && /* @__PURE__ */ jsx38(
2774
2883
  "button",
2775
2884
  {
2776
2885
  type: "button",
2777
2886
  onClick: handleDismiss,
2778
2887
  className: "shrink-0 rounded-sm p-0.5 opacity-70 hover:opacity-100 transition-opacity outline-none focus-visible:ring-2 focus-visible:ring-current",
2779
2888
  "aria-label": "Dismiss",
2780
- children: /* @__PURE__ */ jsx37(Icon, { icon: "X", size: "sm" })
2889
+ children: /* @__PURE__ */ jsx38(Icon, { icon: "X", size: "sm" })
2781
2890
  }
2782
2891
  )
2783
2892
  ]
@@ -2786,8 +2895,8 @@ function Banner({
2786
2895
  }
2787
2896
 
2788
2897
  // src/components/MetricCard/MetricCard.tsx
2789
- import { twMerge as twMerge18 } from "tailwind-merge";
2790
- import { Fragment as Fragment9, jsx as jsx38, jsxs as jsxs27 } from "react/jsx-runtime";
2898
+ import { twMerge as twMerge20 } from "tailwind-merge";
2899
+ import { Fragment as Fragment9, jsx as jsx39, jsxs as jsxs28 } from "react/jsx-runtime";
2791
2900
  var sizeConfig = {
2792
2901
  sm: {
2793
2902
  padding: "p-3",
@@ -2809,58 +2918,58 @@ function MetricCard({
2809
2918
  className
2810
2919
  }) {
2811
2920
  const config = sizeConfig[size];
2812
- const containerClass = twMerge18(
2921
+ const containerClass = twMerge20(
2813
2922
  "bg-background border border-border rounded-lg shadow-sm",
2814
2923
  config.padding,
2815
2924
  href && "block transition-shadow hover:shadow-md hover:border-ring focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 outline-none",
2816
2925
  className
2817
2926
  );
2818
- const content = /* @__PURE__ */ jsxs27(Fragment9, { children: [
2819
- /* @__PURE__ */ jsx38("div", { className: twMerge18(config.labelClass, "text-muted-foreground"), children: label }),
2820
- /* @__PURE__ */ jsx38(
2927
+ const content = /* @__PURE__ */ jsxs28(Fragment9, { children: [
2928
+ /* @__PURE__ */ jsx39("div", { className: twMerge20(config.labelClass, "text-muted-foreground"), children: label }),
2929
+ /* @__PURE__ */ jsx39(
2821
2930
  "div",
2822
2931
  {
2823
- className: twMerge18(
2932
+ className: twMerge20(
2824
2933
  config.valueClass,
2825
2934
  "font-semibold text-foreground mt-1 tabular-nums"
2826
2935
  ),
2827
2936
  children: value
2828
2937
  }
2829
2938
  ),
2830
- secondary && /* @__PURE__ */ jsx38("div", { className: "mt-1 text-sm", children: secondary })
2939
+ secondary && /* @__PURE__ */ jsx39("div", { className: "mt-1 text-sm", children: secondary })
2831
2940
  ] });
2832
2941
  if (href) {
2833
- return /* @__PURE__ */ jsx38("a", { href, className: containerClass, children: content });
2942
+ return /* @__PURE__ */ jsx39("a", { href, className: containerClass, children: content });
2834
2943
  }
2835
- return /* @__PURE__ */ jsx38("div", { className: containerClass, children: content });
2944
+ return /* @__PURE__ */ jsx39("div", { className: containerClass, children: content });
2836
2945
  }
2837
2946
 
2838
2947
  // src/components/SectionHeader/SectionHeader.tsx
2839
- import { twMerge as twMerge19 } from "tailwind-merge";
2840
- import { jsx as jsx39, jsxs as jsxs28 } from "react/jsx-runtime";
2948
+ import { twMerge as twMerge21 } from "tailwind-merge";
2949
+ import { jsx as jsx40, jsxs as jsxs29 } from "react/jsx-runtime";
2841
2950
  function SectionHeader({
2842
2951
  title,
2843
2952
  children,
2844
2953
  className
2845
2954
  }) {
2846
- return /* @__PURE__ */ jsxs28(
2955
+ return /* @__PURE__ */ jsxs29(
2847
2956
  "div",
2848
2957
  {
2849
- className: twMerge19(
2958
+ className: twMerge21(
2850
2959
  "flex flex-wrap items-center gap-3 py-4",
2851
2960
  className
2852
2961
  ),
2853
2962
  children: [
2854
- /* @__PURE__ */ jsx39(H2, { children: title }),
2855
- children && /* @__PURE__ */ jsx39("div", { className: "ml-auto flex flex-wrap items-center gap-2", children })
2963
+ /* @__PURE__ */ jsx40(H2, { children: title }),
2964
+ children && /* @__PURE__ */ jsx40("div", { className: "ml-auto flex flex-wrap items-center gap-2", children })
2856
2965
  ]
2857
2966
  }
2858
2967
  );
2859
2968
  }
2860
2969
 
2861
2970
  // src/components/Pill/Pill.tsx
2862
- import { twMerge as twMerge20 } from "tailwind-merge";
2863
- import { jsx as jsx40 } from "react/jsx-runtime";
2971
+ import { twMerge as twMerge22 } from "tailwind-merge";
2972
+ import { jsx as jsx41 } from "react/jsx-runtime";
2864
2973
  var hashColors = {
2865
2974
  purple: "bg-(--color-badge-purple-bg) text-(--color-badge-purple-text) border-(--color-badge-purple-text)/20",
2866
2975
  teal: "bg-(--color-badge-teal-bg) text-(--color-badge-teal-text) border-(--color-badge-teal-text)/20",
@@ -2886,7 +2995,7 @@ function Pill({
2886
2995
  className,
2887
2996
  ...rest
2888
2997
  }) {
2889
- const cx = twMerge20(
2998
+ const cx = twMerge22(
2890
2999
  `
2891
3000
  inline-flex items-center
2892
3001
  rounded-full
@@ -2898,12 +3007,12 @@ function Pill({
2898
3007
  colorStyles[color],
2899
3008
  className
2900
3009
  );
2901
- return /* @__PURE__ */ jsx40("span", { className: cx, ...rest, children });
3010
+ return /* @__PURE__ */ jsx41("span", { className: cx, ...rest, children });
2902
3011
  }
2903
3012
 
2904
3013
  // src/components/Pill/PathPill.tsx
2905
- import { twMerge as twMerge21 } from "tailwind-merge";
2906
- import { jsx as jsx41 } from "react/jsx-runtime";
3014
+ import { twMerge as twMerge23 } from "tailwind-merge";
3015
+ import { jsx as jsx42 } from "react/jsx-runtime";
2907
3016
  function PathPill({
2908
3017
  children,
2909
3018
  visibleCount,
@@ -2915,17 +3024,17 @@ function PathPill({
2915
3024
  const effectiveVisible = visibleCount ?? segments.length;
2916
3025
  const dotCount = Math.max(0, segments.length - effectiveVisible);
2917
3026
  const fullPath = segments.join(" / ");
2918
- return /* @__PURE__ */ jsx41(
3027
+ return /* @__PURE__ */ jsx42(
2919
3028
  "div",
2920
3029
  {
2921
- className: twMerge21("relative flex", className),
3030
+ className: twMerge23("relative flex", className),
2922
3031
  "aria-label": `Path: ${fullPath}`,
2923
3032
  children: segments.map((segment, i) => {
2924
3033
  const isCollapsed = i < dotCount;
2925
3034
  const isLast = i === segments.length - 1;
2926
- const cx = twMerge21(!isLast && "pr-5 -mr-4", isCollapsed && "pr-3");
3035
+ const cx = twMerge23(!isLast && "pr-5 -mr-4", isCollapsed && "pr-3");
2927
3036
  const color = colorFn ? colorFn(segment, i) : pillColorFromName(segment);
2928
- return /* @__PURE__ */ jsx41(
3037
+ return /* @__PURE__ */ jsx42(
2929
3038
  Pill,
2930
3039
  {
2931
3040
  className: cx,
@@ -2941,8 +3050,8 @@ function PathPill({
2941
3050
  }
2942
3051
 
2943
3052
  // src/components/FormWizard/FormWizard.tsx
2944
- import { createContext as createContext4, useContext as useContext4, useCallback as useCallback4, useMemo } from "react";
2945
- import { jsx as jsx42 } from "react/jsx-runtime";
3053
+ import { createContext as createContext4, useContext as useContext4, useCallback as useCallback5, useMemo } from "react";
3054
+ import { jsx as jsx43 } from "react/jsx-runtime";
2946
3055
  var FormWizardContext = createContext4({
2947
3056
  currentStep: 0,
2948
3057
  totalSteps: 1,
@@ -2962,7 +3071,7 @@ function FormWizard({
2962
3071
  }) {
2963
3072
  const canGoBack = currentStep > 0;
2964
3073
  const isLastStep = currentStep >= totalSteps - 1;
2965
- const goBack = useCallback4(() => {
3074
+ const goBack = useCallback5(() => {
2966
3075
  if (currentStep > 0) {
2967
3076
  onStepChange(currentStep - 1);
2968
3077
  }
@@ -2977,13 +3086,13 @@ function FormWizard({
2977
3086
  }),
2978
3087
  [currentStep, totalSteps, canGoBack, goBack, isLastStep]
2979
3088
  );
2980
- return /* @__PURE__ */ jsx42(FormWizardContext.Provider, { value, children });
3089
+ return /* @__PURE__ */ jsx43(FormWizardContext.Provider, { value, children });
2981
3090
  }
2982
3091
 
2983
3092
  // src/components/FormWizard/FormWizardProgress.tsx
2984
- import { jsx as jsx43, jsxs as jsxs29 } from "react/jsx-runtime";
3093
+ import { jsx as jsx44, jsxs as jsxs30 } from "react/jsx-runtime";
2985
3094
  function CheckIcon() {
2986
- return /* @__PURE__ */ jsx43(
3095
+ return /* @__PURE__ */ jsx44(
2987
3096
  "svg",
2988
3097
  {
2989
3098
  "aria-hidden": "true",
@@ -2994,24 +3103,24 @@ function CheckIcon() {
2994
3103
  strokeWidth: "2",
2995
3104
  strokeLinecap: "round",
2996
3105
  strokeLinejoin: "round",
2997
- children: /* @__PURE__ */ jsx43("path", { d: "M3 8.5l3.5 3.5 6.5-7" })
3106
+ children: /* @__PURE__ */ jsx44("path", { d: "M3 8.5l3.5 3.5 6.5-7" })
2998
3107
  }
2999
3108
  );
3000
3109
  }
3001
3110
  function FormWizardProgress({ labels }) {
3002
3111
  const { currentStep, totalSteps } = useFormWizard();
3003
- return /* @__PURE__ */ jsx43("nav", { "aria-label": "Form progress", children: /* @__PURE__ */ jsx43("ol", { className: "flex items-start", role: "list", children: labels.map((label, index) => {
3112
+ return /* @__PURE__ */ jsx44("nav", { "aria-label": "Form progress", children: /* @__PURE__ */ jsx44("ol", { className: "flex items-start", role: "list", children: labels.map((label, index) => {
3004
3113
  const isCompleted = index < currentStep;
3005
3114
  const isCurrent = index === currentStep;
3006
3115
  const isFuture = index > currentStep;
3007
- return /* @__PURE__ */ jsxs29(
3116
+ return /* @__PURE__ */ jsxs30(
3008
3117
  "li",
3009
3118
  {
3010
3119
  className: "flex flex-1 flex-col items-center",
3011
3120
  "aria-current": isCurrent ? "step" : void 0,
3012
3121
  children: [
3013
- /* @__PURE__ */ jsxs29("div", { className: "flex w-full items-center", children: [
3014
- index > 0 ? /* @__PURE__ */ jsx43(
3122
+ /* @__PURE__ */ jsxs30("div", { className: "flex w-full items-center", children: [
3123
+ index > 0 ? /* @__PURE__ */ jsx44(
3015
3124
  "div",
3016
3125
  {
3017
3126
  "aria-hidden": "true",
@@ -3020,8 +3129,8 @@ function FormWizardProgress({ labels }) {
3020
3129
  index <= currentStep ? "bg-primary" : "bg-border"
3021
3130
  ].join(" ")
3022
3131
  }
3023
- ) : /* @__PURE__ */ jsx43("div", { className: "flex-1", "aria-hidden": "true" }),
3024
- /* @__PURE__ */ jsx43(
3132
+ ) : /* @__PURE__ */ jsx44("div", { className: "flex-1", "aria-hidden": "true" }),
3133
+ /* @__PURE__ */ jsx44(
3025
3134
  "div",
3026
3135
  {
3027
3136
  className: [
@@ -3033,10 +3142,10 @@ function FormWizardProgress({ labels }) {
3033
3142
  isFuture ? "border-2 border-border bg-background text-muted-foreground" : ""
3034
3143
  ].join(" "),
3035
3144
  "aria-hidden": "true",
3036
- children: isCompleted ? /* @__PURE__ */ jsx43(CheckIcon, {}) : index + 1
3145
+ children: isCompleted ? /* @__PURE__ */ jsx44(CheckIcon, {}) : index + 1
3037
3146
  }
3038
3147
  ),
3039
- index < totalSteps - 1 ? /* @__PURE__ */ jsx43(
3148
+ index < totalSteps - 1 ? /* @__PURE__ */ jsx44(
3040
3149
  "div",
3041
3150
  {
3042
3151
  "aria-hidden": "true",
@@ -3045,9 +3154,9 @@ function FormWizardProgress({ labels }) {
3045
3154
  index < currentStep ? "bg-primary" : "bg-border"
3046
3155
  ].join(" ")
3047
3156
  }
3048
- ) : /* @__PURE__ */ jsx43("div", { className: "flex-1", "aria-hidden": "true" })
3157
+ ) : /* @__PURE__ */ jsx44("div", { className: "flex-1", "aria-hidden": "true" })
3049
3158
  ] }),
3050
- /* @__PURE__ */ jsx43(
3159
+ /* @__PURE__ */ jsx44(
3051
3160
  "span",
3052
3161
  {
3053
3162
  className: [
@@ -3065,15 +3174,15 @@ function FormWizardProgress({ labels }) {
3065
3174
  }
3066
3175
 
3067
3176
  // src/components/FormWizard/FormWizardNav.tsx
3068
- import { jsx as jsx44, jsxs as jsxs30 } from "react/jsx-runtime";
3177
+ import { jsx as jsx45, jsxs as jsxs31 } from "react/jsx-runtime";
3069
3178
  function FormWizardNav({
3070
3179
  onNext,
3071
3180
  isSubmitting = false,
3072
3181
  submitLabel = "Submit"
3073
3182
  }) {
3074
3183
  const { canGoBack, goBack, isLastStep } = useFormWizard();
3075
- return /* @__PURE__ */ jsxs30("div", { className: "flex items-center justify-end gap-3", children: [
3076
- canGoBack && /* @__PURE__ */ jsx44(
3184
+ return /* @__PURE__ */ jsxs31("div", { className: "flex items-center justify-end gap-3", children: [
3185
+ canGoBack && /* @__PURE__ */ jsx45(
3077
3186
  Button,
3078
3187
  {
3079
3188
  variant: "secondary",
@@ -3083,7 +3192,7 @@ function FormWizardNav({
3083
3192
  children: "Back"
3084
3193
  }
3085
3194
  ),
3086
- /* @__PURE__ */ jsx44(
3195
+ /* @__PURE__ */ jsx45(
3087
3196
  Button,
3088
3197
  {
3089
3198
  variant: "primary",
@@ -3513,7 +3622,7 @@ export {
3513
3622
  MetricCard,
3514
3623
  PathPill,
3515
3624
  Pill,
3516
- Popover3 as Popover,
3625
+ Popover4 as Popover,
3517
3626
  PopoverContent,
3518
3627
  PopoverTrigger,
3519
3628
  ProgressBar,
@@ -3554,6 +3663,7 @@ export {
3554
3663
  createToastBridge,
3555
3664
  iconRegistry,
3556
3665
  pillColorFromName,
3666
+ useContextMenu,
3557
3667
  useFormWizard,
3558
3668
  useToast
3559
3669
  };