@trackunit/react-components 2.13.0 → 2.13.1

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.
Files changed (53) hide show
  1. package/index.cjs.js +579 -468
  2. package/index.esm.js +580 -469
  3. package/package.json +6 -6
  4. package/src/components/Alert/Alert.variants.d.ts +220 -21
  5. package/src/components/Badge/Badge.variants.d.ts +82 -6
  6. package/src/components/Breadcrumb/Breadcrumb.variant.d.ts +45 -6
  7. package/src/components/Card/Card.variants.d.ts +202 -20
  8. package/src/components/Clickable/Clickable.variants.d.ts +27 -3
  9. package/src/components/Collapse/Collapse.variants.d.ts +248 -24
  10. package/src/components/CopyableText/CopyableText.variants.d.ts +41 -4
  11. package/src/components/DetailsList/DetailsList.variants.d.ts +30 -4
  12. package/src/components/EmptyState/EmptyState.variants.d.ts +12 -2
  13. package/src/components/EmptyValue/EmptyValue.variants.d.ts +6 -1
  14. package/src/components/ExternalLink/ExternalLink.variants.d.ts +27 -3
  15. package/src/components/Heading/Heading.variants.d.ts +66 -5
  16. package/src/components/Highlight/Highlight.variants.d.ts +59 -5
  17. package/src/components/HorizontalOverflowScroller/HorizontalOverflowScroller.variants.d.ts +12 -2
  18. package/src/components/HorizontalOverflowScroller/OverflowIndicator.variants.d.ts +56 -8
  19. package/src/components/Icon/Icon.variants.d.ts +174 -5
  20. package/src/components/Indicator/Indicator.variants.d.ts +340 -14
  21. package/src/components/InteractableItem/InteractableItem.variants.d.ts +95 -6
  22. package/src/components/KPI/KPI.variants.d.ts +66 -6
  23. package/src/components/KPICard/KPICard.variants.d.ts +84 -9
  24. package/src/components/LabeledValue/LabeledValue.variants.d.ts +72 -9
  25. package/src/components/List/List.variants.d.ts +81 -8
  26. package/src/components/ListItem/ListItem.variants.d.ts +64 -10
  27. package/src/components/Menu/MenuContent/MenuContent.variants.d.ts +51 -7
  28. package/src/components/Menu/MenuItem/MenuItem.variants.d.ts +224 -20
  29. package/src/components/Menu/MoreMenu/MoreMenu.variants.d.ts +6 -1
  30. package/src/components/Notice/Notice.variants.d.ts +92 -8
  31. package/src/components/Page/Page.variants.d.ts +63 -6
  32. package/src/components/Page/PageContent.d.ts +4 -0
  33. package/src/components/PageHeader/PageHeader.variants.d.ts +34 -5
  34. package/src/components/Pagination/Pagination.variants.d.ts +12 -2
  35. package/src/components/Popover/Popover.variants.d.ts +34 -5
  36. package/src/components/PreferenceCard/PreferenceCard.variants.d.ts +187 -20
  37. package/src/components/Sheet/Sheet.variants.d.ts +101 -10
  38. package/src/components/Sidebar/Sidebar.variants.d.ts +43 -4
  39. package/src/components/SidebarContentLayout/SidebarContentLayout.variants.d.ts +111 -9
  40. package/src/components/Skeleton/Skeleton.variants.d.ts +55 -3
  41. package/src/components/SkeletonLines/SkeletonLines.variants.d.ts +6 -1
  42. package/src/components/Spacer/Spacer.variants.d.ts +44 -4
  43. package/src/components/Spinner/Spinner.variants.d.ts +100 -10
  44. package/src/components/Tabs/Tabs.variants.d.ts +45 -6
  45. package/src/components/Tag/Tag.variants.d.ts +157 -11
  46. package/src/components/Text/Text.variants.d.ts +127 -11
  47. package/src/components/ToggleGroup/ToggleGroup.variants.d.ts +178 -17
  48. package/src/components/Tooltip/Tooltip.variants.d.ts +135 -12
  49. package/src/components/ValueBar/SegmentedValueBar.variants.d.ts +57 -6
  50. package/src/components/ValueBar/ValueBar.shared.d.ts +27 -3
  51. package/src/components/ValueBar/ValueBar.variants.d.ts +30 -3
  52. package/src/components/ZStack/ZStack.variants.d.ts +12 -2
  53. package/src/components/buttons/shared/Button.variants.d.ts +389 -20
package/index.esm.js CHANGED
@@ -11,7 +11,7 @@ import IconSpriteMini from '@trackunit/ui-icons/icons-sprite-mini.svg';
11
11
  import IconSpriteOutline from '@trackunit/ui-icons/icons-sprite-outline.svg';
12
12
  import IconSpriteSolid from '@trackunit/ui-icons/icons-sprite-solid.svg';
13
13
  import { snakeCase, titleCase } from 'string-ts';
14
- import { cvaMerge } from '@trackunit/css-class-variance-utilities';
14
+ import { cva } from '@trackunit/css-class-variance-utilities';
15
15
  import { FloatingTree, useFloatingNodeId, useFloatingParentNodeId, useFloatingTree, offset, flip, shift, size, useFloating, autoUpdate, useClick, useDismiss, useHover as useHover$1, safePolygon, useRole, useInteractions, FloatingNode, FloatingPortal, useMergeRefs as useMergeRefs$1, FloatingFocusManager, arrow, useTransitionStatus, FloatingArrow, useListNavigation, useTypeahead, FloatingList, useListItem } from '@floating-ui/react';
16
16
  import { Slot, Slottable } from '@radix-ui/react-slot';
17
17
  import { omit, isEqual } from 'es-toolkit';
@@ -73,7 +73,8 @@ const setupLibraryTranslations = () => {
73
73
  registerTranslations(translations);
74
74
  };
75
75
 
76
- const cvaIcon = cvaMerge(["aspect-square", "inline-grid", "relative", "shrink-0"], {
76
+ const cvaIcon = cva({
77
+ base: ["aspect-square", "inline-grid", "relative", "shrink-0"],
77
78
  variants: {
78
79
  color: {
79
80
  primary: "text-primary-600",
@@ -1362,8 +1363,9 @@ const isElementVisible = (element) => {
1362
1363
  return true;
1363
1364
  };
1364
1365
 
1365
- const cvaPopoverContainer = cvaMerge(["z-popover", "animate-fade-in-fast"]);
1366
- const cvaPopoverTitleContainer = cvaMerge(["flex", "items-center", "px-2", "py-1"], {
1366
+ const cvaPopoverContainer = cva({ base: ["z-popover", "animate-fade-in-fast"] });
1367
+ const cvaPopoverTitleContainer = cva({
1368
+ base: ["flex", "items-center", "px-2", "py-1"],
1367
1369
  variants: {
1368
1370
  divider: {
1369
1371
  true: ["border-b", "border-solid", "border-b-neutral-100", "mb-1"],
@@ -1371,7 +1373,7 @@ const cvaPopoverTitleContainer = cvaMerge(["flex", "items-center", "px-2", "py-1
1371
1373
  },
1372
1374
  },
1373
1375
  });
1374
- const cvaPopoverTitleText = cvaMerge(["flex-1", "text-neutral-500"]);
1376
+ const cvaPopoverTitleText = cva({ base: ["flex-1", "text-neutral-500"] });
1375
1377
 
1376
1378
  /**
1377
1379
  * Wraps a `returnFocus` ref so Floating UI's live `ref.current` read at close time (see
@@ -1443,7 +1445,8 @@ const PopoverContent = function PopoverContent({ className, "data-testid": dataT
1443
1445
  }, ...context.getFloatingProps(props), children: typeof children === "function" ? children(() => context.setIsOpen(false)) : children }) })) : null }));
1444
1446
  };
1445
1447
 
1446
- const cvaSpinner = cvaMerge(["bg-transparent", "rounded-full", "border-2", "border-solid", "inline-block", "animate-spin", "cursor-wait"], {
1448
+ const cvaSpinner = cva({
1449
+ base: ["bg-transparent", "rounded-full", "border-2", "border-solid", "inline-block", "animate-spin", "cursor-wait"],
1447
1450
  variants: {
1448
1451
  size: {
1449
1452
  small: ["w-4", "h-4"],
@@ -1460,8 +1463,9 @@ const cvaSpinner = cvaMerge(["bg-transparent", "rounded-full", "border-2", "bord
1460
1463
  mode: "light",
1461
1464
  },
1462
1465
  });
1463
- const cvaSpinnerContainerInner = cvaMerge(["gap-responsive-space-sm", "grid", "place-items-center"]);
1464
- const cvaSpinnerContainer = cvaMerge(["box-border", "p-0.5", "overflow-hidden"], {
1466
+ const cvaSpinnerContainerInner = cva({ base: ["gap-responsive-space-sm", "grid", "place-items-center"] });
1467
+ const cvaSpinnerContainer = cva({
1468
+ base: ["box-border", "p-0.5", "overflow-hidden"],
1465
1469
  variants: {
1466
1470
  centering: {
1467
1471
  centered: ["grid", "h-full", "w-full", "place-items-center"],
@@ -1478,7 +1482,7 @@ const cvaSpinnerContainer = cvaMerge(["box-border", "p-0.5", "overflow-hidden"],
1478
1482
  mode: "light",
1479
1483
  },
1480
1484
  });
1481
- const cvaSpinnerLabel = cvaMerge(["self-center", "text-center", "text-current"]);
1485
+ const cvaSpinnerLabel = cva({ base: ["self-center", "text-center", "text-current"] });
1482
1486
 
1483
1487
  /**
1484
1488
  * Spinner provides visual feedback that data is being processed. It reassures users that their action is being handled
@@ -1519,27 +1523,28 @@ const Spinner = ({ mode = "light", size = "medium", centering = "centered", clas
1519
1523
  return (jsx("div", { className: cvaSpinnerContainer({ centering, className: containerClassName }), ref: ref, style: style, children: jsxs("div", { className: cvaSpinnerContainerInner(), children: [jsx("div", { className: cvaSpinner({ size, mode, className }), "data-testid": dataTestId, role: "spinbutton" }), label ? jsx("span", { className: cvaSpinnerLabel(), children: label }) : null] }) }));
1520
1524
  };
1521
1525
 
1522
- const cvaButton = cvaMerge([
1523
- "flex-row",
1524
- "inline-flex",
1525
- "gap-2",
1526
- "box-border",
1527
- "justify-center",
1528
- "items-center",
1529
- "whitespace-nowrap",
1530
- "max-w-full",
1531
- "transition-all",
1532
- "ease-in-out",
1533
- "cursor-pointer",
1534
- "flex-none",
1535
- "component-button-border",
1536
- "component-button-padding",
1537
- "component-button-height",
1538
- "disabled:cursor-not-allowed",
1539
- "font-medium",
1540
- "align-middle",
1541
- "rounded-md",
1542
- ], {
1526
+ const cvaButton = cva({
1527
+ base: [
1528
+ "flex-row",
1529
+ "inline-flex",
1530
+ "gap-2",
1531
+ "box-border",
1532
+ "justify-center",
1533
+ "items-center",
1534
+ "whitespace-nowrap",
1535
+ "max-w-full",
1536
+ "transition-all",
1537
+ "ease-in-out",
1538
+ "cursor-pointer",
1539
+ "flex-none",
1540
+ "component-button-border",
1541
+ "component-button-padding",
1542
+ "component-button-height",
1543
+ "disabled:cursor-not-allowed",
1544
+ "font-medium",
1545
+ "align-middle",
1546
+ "rounded-md",
1547
+ ],
1543
1548
  variants: {
1544
1549
  variant: {
1545
1550
  primary: [
@@ -1734,8 +1739,9 @@ const cvaButton = cvaMerge([
1734
1739
  disabled: false,
1735
1740
  },
1736
1741
  });
1737
- const cvaButtonSpinnerContainer = cvaMerge(["p-0", "h-auto"]);
1738
- const cvaButtonSpinner = cvaMerge([], {
1742
+ const cvaButtonSpinnerContainer = cva({ base: ["p-0", "h-auto"] });
1743
+ const cvaButtonSpinner = cva({
1744
+ base: [],
1739
1745
  variants: {
1740
1746
  variant: {
1741
1747
  primary: ["border-white/[0.32]", "border-b-white"],
@@ -1751,7 +1757,8 @@ const cvaButtonSpinner = cvaMerge([], {
1751
1757
  variant: "primary",
1752
1758
  },
1753
1759
  });
1754
- const cvaButtonPrefixSuffix = cvaMerge(["flex", "items-center"], {
1760
+ const cvaButtonPrefixSuffix = cva({
1761
+ base: ["flex", "items-center"],
1755
1762
  variants: {
1756
1763
  size: {
1757
1764
  small: ["h-4"],
@@ -1820,7 +1827,8 @@ const cvaButtonPrefixSuffix = cvaMerge(["flex", "items-center"], {
1820
1827
  disabled: false,
1821
1828
  },
1822
1829
  });
1823
- const cvaIconButton = cvaMerge([], {
1830
+ const cvaIconButton = cva({
1831
+ base: [],
1824
1832
  variants: {
1825
1833
  size: {
1826
1834
  /**
@@ -1969,7 +1977,8 @@ const PopoverTrigger = function PopoverTrigger({ children, renderButton = false,
1969
1977
  return (jsx(Button, { "data-state": dataState, ref: ref, type: "button", ...buttonProps, className: tree !== null ? twMerge(props.className, "pointer-events-auto") : props.className, children: children }));
1970
1978
  };
1971
1979
 
1972
- const cvaText = cvaMerge(["text-black", "m-0", "relative", "text-sm", "font-normal"], {
1980
+ const cvaText = cva({
1981
+ base: ["text-black", "m-0", "relative", "text-sm", "font-normal"],
1973
1982
  variants: {
1974
1983
  align: {
1975
1984
  left: "text-left",
@@ -2078,7 +2087,8 @@ const Text = ({ children, type = "p", size = "medium", align = "left", weight =
2078
2087
  };
2079
2088
  Text.displayName = "Text";
2080
2089
 
2081
- const cvaTooltipIcon = cvaMerge(["text-neutral-300", "transition", "hover:cursor-pointer", "hover:text-neutral-400"], {
2090
+ const cvaTooltipIcon = cva({
2091
+ base: ["text-neutral-300", "transition", "hover:cursor-pointer", "hover:text-neutral-400"],
2082
2092
  variants: {
2083
2093
  color: {
2084
2094
  light: "hover:text-white",
@@ -2089,8 +2099,9 @@ const cvaTooltipIcon = cvaMerge(["text-neutral-300", "transition", "hover:cursor
2089
2099
  },
2090
2100
  },
2091
2101
  });
2092
- const cvaTooltipPopover = cvaMerge(["origin-center"]);
2093
- const cvaTooltipPopoverTail = cvaMerge("", {
2102
+ const cvaTooltipPopover = cva({ base: ["origin-center"] });
2103
+ const cvaTooltipPopoverTail = cva({
2104
+ base: "",
2094
2105
  variants: {
2095
2106
  placement: {
2096
2107
  top: "left-2/4 top-full ml-[-5px]",
@@ -2116,7 +2127,8 @@ const cvaTooltipPopoverTail = cvaMerge("", {
2116
2127
  mode: "dark",
2117
2128
  },
2118
2129
  });
2119
- const cvaTooltipPopoverContent = cvaMerge(["max-w-sm", "rounded", "p-2"], {
2130
+ const cvaTooltipPopoverContent = cva({
2131
+ base: ["max-w-sm", "rounded", "p-2"],
2120
2132
  variants: {
2121
2133
  color: {
2122
2134
  light: "bg-white shadow-lg",
@@ -2210,26 +2222,27 @@ const Tooltip = ({ children, "data-testid": dataTestId, disabled = false, label,
2210
2222
  * This is the source of truth - use parseTailwindArbitraryValue to derive the numeric value.
2211
2223
  */
2212
2224
  const TAG_TEXT_MIN_WIDTH_CLASS = "min-w-[80px]";
2213
- const cvaTag = cvaMerge([
2214
- "grid",
2215
- "grid-cols-[1fr]",
2216
- "has-[[data-slot=icon]]:grid-cols-[auto_1fr]",
2217
- "has-[[data-slot=dismiss]]:grid-cols-[1fr_auto]",
2218
- "has-[[data-slot=icon]]:has-[[data-slot=dismiss]]:grid-cols-[auto_1fr_auto]",
2219
- "justify-center",
2220
- "items-center",
2221
- "rounded-full",
2222
- "py-1",
2223
- "px-2",
2224
- "text-center",
2225
- "h-min",
2226
- "font-medium",
2227
- "max-w-full",
2228
- "w-fit",
2229
- "overflow-hidden",
2230
- "min-w-min",
2231
- "text-xs",
2232
- ], {
2225
+ const cvaTag = cva({
2226
+ base: [
2227
+ "grid",
2228
+ "grid-cols-[1fr]",
2229
+ "has-[[data-slot=icon]]:grid-cols-[auto_1fr]",
2230
+ "has-[[data-slot=dismiss]]:grid-cols-[1fr_auto]",
2231
+ "has-[[data-slot=icon]]:has-[[data-slot=dismiss]]:grid-cols-[auto_1fr_auto]",
2232
+ "justify-center",
2233
+ "items-center",
2234
+ "rounded-full",
2235
+ "py-1",
2236
+ "px-2",
2237
+ "text-center",
2238
+ "h-min",
2239
+ "font-medium",
2240
+ "max-w-full",
2241
+ "w-fit",
2242
+ "overflow-hidden",
2243
+ "min-w-min",
2244
+ "text-xs",
2245
+ ],
2233
2246
  variants: {
2234
2247
  size: {
2235
2248
  small: "px-2 py-px",
@@ -2271,7 +2284,8 @@ const cvaTag = cvaMerge([
2271
2284
  color: "info",
2272
2285
  },
2273
2286
  });
2274
- const cvaTagText = cvaMerge(["whitespace-nowrap"], {
2287
+ const cvaTagText = cva({
2288
+ base: ["whitespace-nowrap"],
2275
2289
  variants: {
2276
2290
  truncate: {
2277
2291
  true: ["truncate", TAG_TEXT_MIN_WIDTH_CLASS],
@@ -2282,8 +2296,10 @@ const cvaTagText = cvaMerge(["whitespace-nowrap"], {
2282
2296
  truncate: true,
2283
2297
  },
2284
2298
  });
2285
- const cvaTagIconContainer = cvaMerge(["shrink-0", "inline-flex", "self-center"]);
2286
- const cvaTagIcon = cvaMerge(["cursor-pointer", "transition-opacity", "hover:opacity-70", "text-neutral-500"]);
2299
+ const cvaTagIconContainer = cva({ base: ["shrink-0", "inline-flex", "self-center"] });
2300
+ const cvaTagIcon = cva({
2301
+ base: ["cursor-pointer", "transition-opacity", "hover:opacity-70", "text-neutral-500"],
2302
+ });
2287
2303
 
2288
2304
  const TAG_TEXT_MIN_WIDTH_PX = parseTailwindArbitraryValue(TAG_TEXT_MIN_WIDTH_CLASS);
2289
2305
  /**
@@ -2591,7 +2607,8 @@ const IconButton = ({ icon, size = "medium", square = true, loading = false, dis
2591
2607
  };
2592
2608
  IconButton.displayName = "IconButton";
2593
2609
 
2594
- const cvaAlert = cvaMerge(["flex", "flex-col", "gap-3", "relative", "p-3", "rounded-lg", "@container"], {
2610
+ const cvaAlert = cva({
2611
+ base: ["flex", "flex-col", "gap-3", "relative", "p-3", "rounded-lg", "@container"],
2595
2612
  variants: {
2596
2613
  color: {
2597
2614
  danger: ["bg-danger-100"],
@@ -2610,7 +2627,8 @@ const cvaAlert = cvaMerge(["flex", "flex-col", "gap-3", "relative", "p-3", "roun
2610
2627
  actionsInline: false,
2611
2628
  },
2612
2629
  });
2613
- const cvaAlertActionsContainer = cvaMerge(["flex", "gap-2"], {
2630
+ const cvaAlertActionsContainer = cva({
2631
+ base: ["flex", "gap-2"],
2614
2632
  variants: {
2615
2633
  inline: {
2616
2634
  true: ["flex-row", "shrink-0"],
@@ -2626,8 +2644,9 @@ const cvaAlertActionsContainer = cvaMerge(["flex", "gap-2"], {
2626
2644
  actionsInline: false,
2627
2645
  },
2628
2646
  });
2629
- const cvaContent = cvaMerge(["flex-grow"]);
2630
- const cvaAlertContentContainer = cvaMerge(["flex", "flex-row", "h-full", "gap-2"], {
2647
+ const cvaContent = cva({ base: ["flex-grow"] });
2648
+ const cvaAlertContentContainer = cva({
2649
+ base: ["flex", "flex-row", "h-full", "gap-2"],
2631
2650
  variants: {
2632
2651
  inline: {
2633
2652
  true: ["items-center", "justify-between"],
@@ -2643,7 +2662,8 @@ const cvaAlertContentContainer = cvaMerge(["flex", "flex-row", "h-full", "gap-2"
2643
2662
  actionsInline: false,
2644
2663
  },
2645
2664
  });
2646
- const cvaAlertCloseButtonContainer = cvaMerge(["flex", "w-min", "shrink-0"], {
2665
+ const cvaAlertCloseButtonContainer = cva({
2666
+ base: ["flex", "w-min", "shrink-0"],
2647
2667
  variants: {
2648
2668
  inline: {
2649
2669
  true: ["self-center"],
@@ -2659,7 +2679,8 @@ const cvaAlertCloseButtonContainer = cvaMerge(["flex", "w-min", "shrink-0"], {
2659
2679
  actionsInline: false,
2660
2680
  },
2661
2681
  });
2662
- const cvaAlertIconContainer = cvaMerge(["shrink-0", "grid", "w-min", "flex"], {
2682
+ const cvaAlertIconContainer = cva({
2683
+ base: ["shrink-0", "grid", "w-min", "flex"],
2663
2684
  variants: {
2664
2685
  inline: {
2665
2686
  true: ["self-center"],
@@ -2784,19 +2805,20 @@ const getIconName = (color) => {
2784
2805
  }
2785
2806
  };
2786
2807
 
2787
- const cvaBadge = cvaMerge([
2788
- "box-border",
2789
- "whitespace-nowrap",
2790
- "overflow-hidden",
2791
- "text-ellipsis",
2792
- "inline-flex",
2793
- "items-center",
2794
- "justify-center",
2795
- "rounded-full",
2796
- "font-bold",
2797
- "text-center",
2798
- "tabular-nums",
2799
- ], {
2808
+ const cvaBadge = cva({
2809
+ base: [
2810
+ "box-border",
2811
+ "whitespace-nowrap",
2812
+ "overflow-hidden",
2813
+ "text-ellipsis",
2814
+ "inline-flex",
2815
+ "items-center",
2816
+ "justify-center",
2817
+ "rounded-full",
2818
+ "font-bold",
2819
+ "text-center",
2820
+ "tabular-nums",
2821
+ ],
2800
2822
  variants: {
2801
2823
  color: {
2802
2824
  primary: "bg-primary-600 text-white",
@@ -2806,11 +2828,11 @@ const cvaBadge = cvaMerge([
2806
2828
  },
2807
2829
  compact: {
2808
2830
  true: "size-2",
2809
- false: "h-fit min-h-4 w-fit min-w-4",
2831
+ false: "min-h-4 min-w-4 h-fit w-fit",
2810
2832
  },
2811
2833
  size: {
2812
2834
  default: "text-xs",
2813
- condensed: "h-3.5 min-h-3.5 min-w-3.5 text-[10px]",
2835
+ condensed: "min-h-3.5 min-w-3.5 h-3.5 text-[10px]",
2814
2836
  },
2815
2837
  isSingleChar: {
2816
2838
  true: "aspect-square",
@@ -2887,10 +2909,11 @@ const Badge = ({ color = "primary", size = "default", compact = false, className
2887
2909
  return (jsx("span", { className: cvaBadge({ color, size, className, compact, isSingleChar }), "data-testid": dataTestId, ref: ref, style: style, children: compact ? null : displayedCount }));
2888
2910
  };
2889
2911
 
2890
- const cvaBreadcrumb = cvaMerge(["my-4", "flex", "place-items-center"]);
2891
- const cvaBreadcrumbItem = cvaMerge(["flex", "items-center"]);
2892
- const cvaBreadcrumbForLargeScreen = cvaMerge(["flex", "flex-nowrap", "items-center"]);
2893
- const cvaBreadcrumbForMediumScreen = cvaMerge(["flex", "items-center"], {
2912
+ const cvaBreadcrumb = cva({ base: ["my-4", "flex", "place-items-center"] });
2913
+ const cvaBreadcrumbItem = cva({ base: ["flex", "items-center"] });
2914
+ const cvaBreadcrumbForLargeScreen = cva({ base: ["flex", "flex-nowrap", "items-center"] });
2915
+ const cvaBreadcrumbForMediumScreen = cva({
2916
+ base: ["flex", "items-center"],
2894
2917
  variants: {
2895
2918
  expanded: {
2896
2919
  true: "flex-wrap",
@@ -3142,18 +3165,19 @@ const StarButton = ({ starred, onClick, className, "data-testid": dataTestId, st
3142
3165
  return (jsx("div", { className: className, "data-testid": dataTestId ?? "starred-filter", onClick: onClick, ref: ref, style: style, children: jsx(Icon, { color: starred ? "primary" : "neutral", name: "Star", size: "medium" }) }));
3143
3166
  };
3144
3167
 
3145
- const cvaCard = cvaMerge([
3146
- "flex",
3147
- "border",
3148
- "flex-col",
3149
- "relative",
3150
- "bg-white",
3151
- "component-card-shadow",
3152
- "component-card-border",
3153
- "transition-colors",
3154
- "ease-in-out",
3155
- "overflow-clip", //otherwise rounded corners are not respected (clip is preferable to hidden since it doesn't create a scroll clipping box. )
3156
- ], {
3168
+ const cvaCard = cva({
3169
+ base: [
3170
+ "flex",
3171
+ "border",
3172
+ "flex-col",
3173
+ "relative",
3174
+ "bg-white",
3175
+ "component-card-shadow",
3176
+ "component-card-border",
3177
+ "transition-colors",
3178
+ "ease-in-out",
3179
+ "overflow-clip", //otherwise rounded corners are not respected (clip is preferable to hidden since it doesn't create a scroll clipping box. )
3180
+ ],
3157
3181
  variants: {
3158
3182
  clickable: {
3159
3183
  false: "",
@@ -3169,7 +3193,8 @@ const cvaCard = cvaMerge([
3169
3193
  fullHeight: false,
3170
3194
  },
3171
3195
  });
3172
- const cvaCardFooterContainerRoot = cvaMerge(["flex", "border-t", "border-neutral-200", "justify-end", "flex-row"], {
3196
+ const cvaCardFooterContainerRoot = cva({
3197
+ base: ["flex", "border-t", "border-neutral-200", "justify-end", "flex-row"],
3173
3198
  variants: {
3174
3199
  border: {
3175
3200
  default: "",
@@ -3185,10 +3210,13 @@ const cvaCardFooterContainerRoot = cvaMerge(["flex", "border-t", "border-neutral
3185
3210
  padding: "default",
3186
3211
  },
3187
3212
  });
3188
- const cvaCardFooterContainer = cvaMerge(["justify-self-end", "grid", "auto-cols-max", "grid-flow-col", "gap-2"]);
3189
- const cvaCardHeader = cvaMerge(["flex", "justify-between", "flex-1"]);
3190
- const cvaCardHeaderHeadingContainer = cvaMerge(["flex", "gap-4", "items-center"]);
3191
- const cvaCardHeaderContainer = cvaMerge(["flex", "border-b", "border-neutral-200"], {
3213
+ const cvaCardFooterContainer = cva({
3214
+ base: ["justify-self-end", "grid", "auto-cols-max", "grid-flow-col", "gap-2"],
3215
+ });
3216
+ const cvaCardHeader = cva({ base: ["flex", "justify-between", "flex-1"] });
3217
+ const cvaCardHeaderHeadingContainer = cva({ base: ["flex", "gap-4", "items-center"] });
3218
+ const cvaCardHeaderContainer = cva({
3219
+ base: ["flex", "border-b", "border-neutral-200"],
3192
3220
  variants: {
3193
3221
  border: {
3194
3222
  default: "",
@@ -3204,7 +3232,8 @@ const cvaCardHeaderContainer = cvaMerge(["flex", "border-b", "border-neutral-200
3204
3232
  padding: "default",
3205
3233
  },
3206
3234
  });
3207
- const cvaCardBodyContainer = cvaMerge(["flex", "flex-grow", "overflow-auto"], {
3235
+ const cvaCardBodyContainer = cva({
3236
+ base: ["flex", "flex-grow", "overflow-auto"],
3208
3237
  variants: {
3209
3238
  direction: {
3210
3239
  row: "flex-row",
@@ -3390,7 +3419,8 @@ const CardFooter = ({ "data-testid": dataTestId, className, children, padding =
3390
3419
  }), "data-card-footer": true, "data-testid": dataTestId, ref: ref, style: style, children: jsx("div", { className: cvaCardFooterContainer(), children: children }) }));
3391
3420
  };
3392
3421
 
3393
- const cvaHeading = cvaMerge(["m-0", "leading-normal", "text-black"], {
3422
+ const cvaHeading = cva({
3423
+ base: ["m-0", "leading-normal", "text-black"],
3394
3424
  variants: {
3395
3425
  subtle: {
3396
3426
  true: "text-neutral-600",
@@ -3518,17 +3548,18 @@ const CardHeader = ({ heading, headingVariant = "secondary", subHeading, "data-t
3518
3548
  }), "data-card-header": true, "data-testid": dataTestId, ref: ref, style: style, children: jsxs("div", { className: cvaCardHeader(), children: [jsxs("div", { children: [jsxs("div", { className: cvaCardHeaderHeadingContainer(), children: [jsx(Heading, { className: "self-center", variant: headingVariant, children: heading }), accessories] }), subHeading !== null && subHeading !== undefined ? (jsx(Heading, { subtle: true, variant: "subtitle", children: subHeading })) : null, children] }), jsx("div", { className: "flex place-items-center gap-x-2 gap-y-1", children: actions })] }) }));
3519
3549
  };
3520
3550
 
3521
- const cvaClickable = cvaMerge([
3522
- "rounded-lg",
3523
- "p-3",
3524
- "bg-neutral-50",
3525
- "transition-all",
3526
- "border-2",
3527
- "border-solid",
3528
- "border-neutral-100",
3529
- "cursor-pointer",
3530
- "hover:border-neutral-300",
3531
- ], {
3551
+ const cvaClickable = cva({
3552
+ base: [
3553
+ "rounded-lg",
3554
+ "p-3",
3555
+ "bg-neutral-50",
3556
+ "transition-all",
3557
+ "border-2",
3558
+ "border-solid",
3559
+ "border-neutral-100",
3560
+ "cursor-pointer",
3561
+ "hover:border-neutral-300",
3562
+ ],
3532
3563
  variants: {
3533
3564
  disabled: {
3534
3565
  false: "",
@@ -3614,7 +3645,8 @@ const useMeasure = ({ skip = false, onChange, } = {}) => {
3614
3645
  return useMemo(() => ({ geometry, ref, element }), [geometry, ref, element]);
3615
3646
  };
3616
3647
 
3617
- const cvaCollapse = cvaMerge(["flex", "flex-col", "overflow-hidden"], {
3648
+ const cvaCollapse = cva({
3649
+ base: ["flex", "flex-col", "overflow-hidden"],
3618
3650
  variants: {
3619
3651
  variant: {
3620
3652
  primary: ["border", "border-solid", "border-neutral-300", "rounded-md", "bg-white"],
@@ -3622,7 +3654,8 @@ const cvaCollapse = cvaMerge(["flex", "flex-col", "overflow-hidden"], {
3622
3654
  },
3623
3655
  },
3624
3656
  });
3625
- const cvaCollapseHeader = cvaMerge(["flex", "items-center", "cursor-pointer", "transition-all", "group/collapse"], {
3657
+ const cvaCollapseHeader = cva({
3658
+ base: ["flex", "items-center", "cursor-pointer", "transition-all", "group/collapse"],
3626
3659
  variants: {
3627
3660
  expanded: { true: [], false: [] },
3628
3661
  variant: {
@@ -3667,7 +3700,8 @@ const cvaCollapseHeader = cvaMerge(["flex", "items-center", "cursor-pointer", "t
3667
3700
  },
3668
3701
  ],
3669
3702
  });
3670
- const cvaCollapseLabelContainer = cvaMerge(["flex", "items-center"], {
3703
+ const cvaCollapseLabelContainer = cva({
3704
+ base: ["flex", "items-center"],
3671
3705
  variants: {
3672
3706
  variant: {
3673
3707
  primary: ["w-full", "justify-between"],
@@ -3675,7 +3709,8 @@ const cvaCollapseLabelContainer = cvaMerge(["flex", "items-center"], {
3675
3709
  },
3676
3710
  },
3677
3711
  });
3678
- const cvaCollapseLabel = cvaMerge([""], {
3712
+ const cvaCollapseLabel = cva({
3713
+ base: [""],
3679
3714
  variants: {
3680
3715
  variant: {
3681
3716
  primary: [""],
@@ -3683,7 +3718,8 @@ const cvaCollapseLabel = cvaMerge([""], {
3683
3718
  },
3684
3719
  },
3685
3720
  });
3686
- const cvaCollapsible = cvaMerge(["block", "relative"], {
3721
+ const cvaCollapsible = cva({
3722
+ base: ["block", "relative"],
3687
3723
  variants: {
3688
3724
  variant: {
3689
3725
  primary: [],
@@ -3717,7 +3753,8 @@ const cvaCollapsible = cvaMerge(["block", "relative"], {
3717
3753
  },
3718
3754
  ],
3719
3755
  });
3720
- const cvaCollapseAnimated = cvaMerge(["overflow-y-hidden", "transition-all"], {
3756
+ const cvaCollapseAnimated = cva({
3757
+ base: ["overflow-y-hidden", "transition-all"],
3721
3758
  variants: {
3722
3759
  expanded: {
3723
3760
  true: "block",
@@ -3728,7 +3765,8 @@ const cvaCollapseAnimated = cvaMerge(["overflow-y-hidden", "transition-all"], {
3728
3765
  expanded: false,
3729
3766
  },
3730
3767
  });
3731
- const cvaChevronIcon = cvaMerge(["transition-transform"], {
3768
+ const cvaChevronIcon = cva({
3769
+ base: ["transition-transform"],
3732
3770
  variants: {
3733
3771
  expanded: {
3734
3772
  true: "rotate-180",
@@ -3950,21 +3988,22 @@ const useHover = ({ debounced = false, delay = 100, direction = "out" } = { debo
3950
3988
  }), [onMouseEnter, onMouseLeave, value]);
3951
3989
  };
3952
3990
 
3953
- const cvaCopyableText = cvaMerge([
3954
- "rounded",
3955
- "cursor-pointer",
3956
- "transition-all",
3957
- "ease-in-out",
3958
- "inline-flex",
3959
- "items-center",
3960
- "gap-1",
3961
- "bg-transparent",
3962
- "border-none",
3963
- "outline-none",
3964
- "hover:bg-neutral-200",
3965
- "py-0.5",
3966
- "px-1",
3967
- ], {
3991
+ const cvaCopyableText = cva({
3992
+ base: [
3993
+ "rounded",
3994
+ "cursor-pointer",
3995
+ "transition-all",
3996
+ "ease-in-out",
3997
+ "inline-flex",
3998
+ "items-center",
3999
+ "gap-1",
4000
+ "bg-transparent",
4001
+ "border-none",
4002
+ "outline-none",
4003
+ "hover:bg-neutral-200",
4004
+ "py-0.5",
4005
+ "px-1",
4006
+ ],
3968
4007
  variants: {
3969
4008
  animating: {
3970
4009
  false: "",
@@ -4130,7 +4169,8 @@ const CopyButton = ({ value, copyLabel, copiedLabel, size = "small", label, vari
4130
4169
  CopyButton.displayName = "CopyButton";
4131
4170
  const COPIED_FEEDBACK_DURATION_MS = 2000;
4132
4171
 
4133
- const cvaDetailsList = cvaMerge(["flex", "w-full", "min-w-0", "items-center", "truncate", "text-xs", "text-neutral-600", "font-medium", "pt-0"], {
4172
+ const cvaDetailsList = cva({
4173
+ base: ["flex", "w-full", "min-w-0", "items-center", "truncate", "text-xs", "text-neutral-600", "font-medium", "pt-0"],
4134
4174
  variants: {
4135
4175
  hasLink: {
4136
4176
  true: "pl-1",
@@ -4140,7 +4180,7 @@ const cvaDetailsList = cvaMerge(["flex", "w-full", "min-w-0", "items-center", "t
4140
4180
  hasLink: false,
4141
4181
  },
4142
4182
  });
4143
- const cvaDetailsListItem = cvaMerge(["last:truncate"]);
4183
+ const cvaDetailsListItem = cva({ base: ["last:truncate"] });
4144
4184
 
4145
4185
  /**
4146
4186
  * DetailsList renders a one-line list of text values separated by slash icons.
@@ -4278,31 +4318,32 @@ const useRandomCSSLengths = ({ count, min, max, unit = "%", }) => {
4278
4318
  return useMemo(() => Array.from({ length: count }, () => getRandomCSSLength({ min, max, unit })), [count, min, max, unit]);
4279
4319
  };
4280
4320
 
4281
- const cvaSkeleton = cvaMerge([
4282
- "relative",
4283
- "overflow-hidden",
4284
- "rounded-lg",
4285
- // Gradient background
4286
- "bg-linear-to-r",
4287
- "from-neutral-200/80",
4288
- "via-neutral-300/60",
4289
- "to-neutral-200/80",
4290
- // Pulse animation
4291
- "animate-pulse",
4292
- // Shimmer overlay
4293
- "before:absolute",
4294
- "before:inset-0",
4295
- "before:bg-linear-to-r",
4296
- "before:from-transparent",
4297
- "before:via-white/50",
4298
- "before:to-transparent",
4299
- "before:opacity-0",
4300
- "before:animate-pulse",
4301
- // Smooth transitions for accessibility
4302
- "transition-all",
4303
- "duration-300",
4304
- "ease-in-out",
4305
- ], {
4321
+ const cvaSkeleton = cva({
4322
+ base: [
4323
+ "relative",
4324
+ "overflow-hidden",
4325
+ "rounded-lg",
4326
+ // Gradient background
4327
+ "bg-linear-to-r",
4328
+ "from-neutral-200/80",
4329
+ "via-neutral-300/60",
4330
+ "to-neutral-200/80",
4331
+ // Pulse animation
4332
+ "animate-pulse",
4333
+ // Shimmer overlay
4334
+ "before:absolute",
4335
+ "before:inset-0",
4336
+ "before:bg-linear-to-r",
4337
+ "before:from-transparent",
4338
+ "before:via-white/50",
4339
+ "before:to-transparent",
4340
+ "before:opacity-0",
4341
+ "before:animate-pulse",
4342
+ // Smooth transitions for accessibility
4343
+ "transition-all",
4344
+ "duration-300",
4345
+ "ease-in-out",
4346
+ ],
4306
4347
  variants: {
4307
4348
  textSize: {
4308
4349
  "text-xs": ["my-[calc((var(--line-height-xs)-var(--font-size-xs)*0.7)/2)]"],
@@ -4359,20 +4400,22 @@ const SkeletonLabel = memo((props) => {
4359
4400
  });
4360
4401
  SkeletonLabel.displayName = "SkeletonLabel";
4361
4402
 
4362
- const cvaContainerStyles = cvaMerge([
4363
- "flex",
4364
- "flex-col",
4365
- "items-center",
4366
- "gap-0",
4367
- "p-4",
4368
- "sm:p-6",
4369
- "md:p-12",
4370
- "text-center",
4371
- "justify-center",
4372
- "h-full",
4373
- "self-center",
4374
- ]);
4375
- const cvaImgStyles = cvaMerge(["w-full", "min-w-[60px]", "max-w-[200px]"]);
4403
+ const cvaContainerStyles = cva({
4404
+ base: [
4405
+ "flex",
4406
+ "flex-col",
4407
+ "items-center",
4408
+ "gap-0",
4409
+ "p-4",
4410
+ "sm:p-6",
4411
+ "md:p-12",
4412
+ "text-center",
4413
+ "justify-center",
4414
+ "h-full",
4415
+ "self-center",
4416
+ ],
4417
+ });
4418
+ const cvaImgStyles = cva({ base: ["w-full", "min-w-[60px]", "max-w-[200px]"] });
4376
4419
 
4377
4420
  /**
4378
4421
  * The Graphic for the BuildingError EmptyState
@@ -4492,7 +4535,7 @@ const EmptyState = ({ description, altText, image = "SEARCH_DOCUMENT", customIma
4492
4535
  return (jsx("div", { className: cvaContainerStyles({ className }), "data-testid": dataTestId ?? "empty-state", ref: ref, style: style, children: loading ? (jsxs("div", { className: "flex w-full flex-col items-center gap-4", children: [jsx(Spinner, { centering: "centered", "data-testid": "spinner" }), jsx(SkeletonLabel, { textSize: "text-base", width: "clamp(20%, 200px, 80%)" })] })) : (jsxs(Fragment, { children: [customImageSrc !== null && customImageSrc !== undefined ? (typeof customImageSrc === "string" ? (jsx("img", { alt: altText, className: cvaImgStyles(), height: 200, src: customImageSrc, width: 200 })) : (customImageSrc)) : (typeof ImageSource !== "undefined" && (jsx(ImageSource, { "data-testid": "empty-state-image", height: 200, width: 200 }, image))), description !== undefined && description !== "" ? (jsx(Text, { align: "center", size: "medium", children: description })) : null, jsxs("div", { className: "mt-4 grid gap-3", children: [jsxs("div", { className: "flex gap-3", children: [secondaryAction ? (jsx(Button, { "data-testid": "empty-state-secondary-button", disabled: secondaryAction.disabled, onClick: secondaryAction.onClick, variant: "secondary", children: secondaryAction.to ? (jsx(Link, { params: secondaryAction.to.parameters, to: secondaryAction.to.pathname, children: secondaryAction.title })) : (secondaryAction.title) })) : null, primaryAction ? (jsx(Button, { "data-testid": "empty-state-primary-button", disabled: primaryAction.disabled, onClick: primaryAction.onClick, children: primaryAction.to ? (jsx(Link, { params: primaryAction.to.parameters, to: primaryAction.to.pathname, children: primaryAction.title })) : (primaryAction.title) })) : null] }), additionalHelpAction?.to ? (jsx(Button, { asChild: true, "data-testid": "empty-state-additional-button", disabled: additionalHelpAction.disabled, onClick: additionalHelpAction.onClick, suffix: jsx(Icon, { name: "ArrowTopRightOnSquare", size: "small" }), variant: "ghost", children: jsx(Link, { params: additionalHelpAction.to.parameters, target: additionalHelpAction.to.target, to: additionalHelpAction.to.pathname, children: additionalHelpAction.title }) })) : null] })] })) }));
4493
4536
  };
4494
4537
 
4495
- const cvaEmptyValue = cvaMerge(["text-neutral-400"]);
4538
+ const cvaEmptyValue = cva({ base: ["text-neutral-400"] });
4496
4539
 
4497
4540
  /**
4498
4541
  * EmptyValue renders a consistent dash symbol ("–") to represent missing, null, undefined, or not applicable values.
@@ -4522,7 +4565,8 @@ const EmptyValue = ({ className, "data-testid": dataTestId, style, ref }) => {
4522
4565
  return (jsx("div", { className: cvaEmptyValue({ className }), "data-testid": dataTestId, ref: ref, style: style, children: "-" }));
4523
4566
  };
4524
4567
 
4525
- const cvaExternalLink = cvaMerge(["underline", "decoration-[1.5px]", "underline-offset-2", "text-sm"], {
4568
+ const cvaExternalLink = cva({
4569
+ base: ["underline", "decoration-[1.5px]", "underline-offset-2", "text-sm"],
4526
4570
  variants: {
4527
4571
  color: {
4528
4572
  primary: [
@@ -5344,21 +5388,22 @@ function useGridAreas(config) {
5344
5388
  }, [id, config, validationRef]);
5345
5389
  }
5346
5390
 
5347
- const cvaHighlight = cvaMerge([
5348
- "inline-flex",
5349
- "justify-center",
5350
- "items-center",
5351
- "rounded",
5352
- "py-0.5",
5353
- "px-1",
5354
- "text-center",
5355
- "h-min",
5356
- "min-w-[1.5rem]",
5357
- "font-medium",
5358
- "truncate",
5359
- "max-w-full",
5360
- "w-fit",
5361
- ], {
5391
+ const cvaHighlight = cva({
5392
+ base: [
5393
+ "inline-flex",
5394
+ "justify-center",
5395
+ "items-center",
5396
+ "rounded",
5397
+ "py-0.5",
5398
+ "px-1",
5399
+ "text-center",
5400
+ "h-min",
5401
+ "min-w-[1.5rem]",
5402
+ "font-medium",
5403
+ "truncate",
5404
+ "max-w-full",
5405
+ "w-fit",
5406
+ ],
5362
5407
  variants: {
5363
5408
  size: {
5364
5409
  small: ["text-xs"],
@@ -5378,7 +5423,7 @@ const cvaHighlight = cvaMerge([
5378
5423
  color: "warning",
5379
5424
  },
5380
5425
  });
5381
- const cvaHighlightText = cvaMerge(["truncate"]);
5426
+ const cvaHighlightText = cva({ base: ["truncate"] });
5382
5427
 
5383
5428
  /**
5384
5429
  * Highlight draws visual attention to data values that may require user action, monitoring, or investigation.
@@ -5701,8 +5746,8 @@ const useScrollDetection = (options) => {
5701
5746
  }), [ref, element, scrollState]);
5702
5747
  };
5703
5748
 
5704
- const cvaZStackContainer = cvaMerge(["grid", "grid-cols-1", "grid-rows-1", "isolate"]);
5705
- const cvaZStackItem = cvaMerge(["col-start-1", "col-end-1", "row-start-1", "row-end-2"]);
5749
+ const cvaZStackContainer = cva({ base: ["grid", "grid-cols-1", "grid-rows-1", "isolate"] });
5750
+ const cvaZStackItem = cva({ base: ["col-start-1", "col-end-1", "row-start-1", "row-end-2"] });
5706
5751
 
5707
5752
  /**
5708
5753
  * ZStack stacks its children on the z-axis (overlaying them on top of each other).
@@ -5742,28 +5787,25 @@ const ZStack = ({ children, className, "data-testid": dataTestId, style, ref })
5742
5787
  }) }));
5743
5788
  };
5744
5789
 
5745
- const cvaHorizontalOverflowScroller = cvaMerge([
5746
- "flex",
5747
- "flex-nowrap",
5748
- "gap-1",
5749
- "overflow-y-hidden",
5750
- "overflow-x-scroll",
5751
- "w-full",
5752
- "no-scrollbar",
5753
- ]);
5754
- const cvaHorizontalOverflowScrollerAndIndicatorsContainer = cvaMerge(["group", "w-full", "overflow-clip"]);
5755
-
5756
- const cvaOverflowIndicatorContainer = cvaMerge(["pointer-events-none", "h-full", "w-full", "isolate", "pb-px"]);
5757
- const cvaOverflowIndicatorGradient = cvaMerge([
5758
- "pointer-events-none",
5759
- "self-stretch",
5760
- "w-16",
5761
- "opacity-0",
5762
- "transition-opacity",
5763
- "duration-200",
5764
- "group-hover:opacity-100",
5765
- "group-focus-within:opacity-100",
5766
- ], {
5790
+ const cvaHorizontalOverflowScroller = cva({
5791
+ base: ["flex", "flex-nowrap", "gap-1", "overflow-y-hidden", "overflow-x-scroll", "w-full", "no-scrollbar"],
5792
+ });
5793
+ const cvaHorizontalOverflowScrollerAndIndicatorsContainer = cva({ base: ["group", "w-full", "overflow-clip"] });
5794
+
5795
+ const cvaOverflowIndicatorContainer = cva({
5796
+ base: ["pointer-events-none", "h-full", "w-full", "isolate", "pb-px"],
5797
+ });
5798
+ const cvaOverflowIndicatorGradient = cva({
5799
+ base: [
5800
+ "pointer-events-none",
5801
+ "self-stretch",
5802
+ "w-16",
5803
+ "opacity-0",
5804
+ "transition-opacity",
5805
+ "duration-200",
5806
+ "group-hover:opacity-100",
5807
+ "group-focus-within:opacity-100",
5808
+ ],
5767
5809
  variants: {
5768
5810
  direction: {
5769
5811
  left: ["bg-gradient-to-r", "from-white", "from-30%", "to-transparent"],
@@ -5771,7 +5813,8 @@ const cvaOverflowIndicatorGradient = cvaMerge([
5771
5813
  },
5772
5814
  },
5773
5815
  });
5774
- const cvaJustificationContainer = cvaMerge(["flex", "w-full", "items-center", "pointer-events-none"], {
5816
+ const cvaJustificationContainer = cva({
5817
+ base: ["flex", "w-full", "items-center", "pointer-events-none"],
5775
5818
  variants: {
5776
5819
  direction: {
5777
5820
  left: ["justify-start"],
@@ -5779,18 +5822,20 @@ const cvaJustificationContainer = cvaMerge(["flex", "w-full", "items-center", "p
5779
5822
  },
5780
5823
  },
5781
5824
  });
5782
- const cvaOverflowIndicatorButton = cvaMerge([
5783
- "shadow-md",
5784
- "opacity-0",
5785
- "transition-opacity",
5786
- "duration-200",
5787
- "pointer-events-auto",
5788
- "starting:opacity-0",
5789
- "group-hover:opacity-100",
5790
- "group-focus-within:opacity-100",
5791
- "rounded-full",
5792
- "mx-1",
5793
- ]);
5825
+ const cvaOverflowIndicatorButton = cva({
5826
+ base: [
5827
+ "shadow-md",
5828
+ "opacity-0",
5829
+ "transition-opacity",
5830
+ "duration-200",
5831
+ "pointer-events-auto",
5832
+ "starting:opacity-0",
5833
+ "group-hover:opacity-100",
5834
+ "group-focus-within:opacity-100",
5835
+ "rounded-full",
5836
+ "mx-1",
5837
+ ],
5838
+ });
5794
5839
 
5795
5840
  /**
5796
5841
  * Overflow indicator component that shows visual cues when content extends beyond visible area
@@ -5865,9 +5910,10 @@ const HorizontalOverflowScroller = ({ className, "data-testid": dataTestId, chil
5865
5910
  return (jsxs(ZStack, { className: cvaHorizontalOverflowScrollerAndIndicatorsContainer({ className }), style: style, children: [jsx("div", { className: cvaHorizontalOverflowScroller(), "data-testid": dataTestId, ref: mergedRef, children: childrenArray.map((child, index) => (jsx(Fragment$1, { children: child }, index))) }), isScrollable && !isAtBeginning ? (jsx(OverflowIndicator, { "data-testid": `${dataTestId}-left-indicator`, direction: "left", onClickScroll: handleScrollLeft })) : null, isScrollable && !isAtEnd ? (jsx(OverflowIndicator, { "data-testid": `${dataTestId}-right-indicator`, direction: "right", onClickScroll: handleScrollRight })) : null] }));
5866
5911
  };
5867
5912
 
5868
- const cvaIndicator = cvaMerge(["inline-flex", "items-center"]);
5869
- const cvaIndicatorIcon = cvaMerge(["mr-2"]);
5870
- const cvaIndicatorLabel = cvaMerge(["capitalize"], {
5913
+ const cvaIndicator = cva({ base: ["inline-flex", "items-center"] });
5914
+ const cvaIndicatorIcon = cva({ base: ["mr-2"] });
5915
+ const cvaIndicatorLabel = cva({
5916
+ base: ["capitalize"],
5871
5917
  variants: {
5872
5918
  size: {
5873
5919
  small: "text-xs",
@@ -5888,7 +5934,17 @@ const cvaIndicatorLabel = cvaMerge(["capitalize"], {
5888
5934
  background: "visible",
5889
5935
  },
5890
5936
  });
5891
- const cvaIndicatorPing = cvaMerge(["animate-ping-sm", "absolute", "inline-flex", "h-full", "w-full", "rounded-full", "opacity-75", "bg-neutral-600"], {
5937
+ const cvaIndicatorPing = cva({
5938
+ base: [
5939
+ "animate-ping-sm",
5940
+ "absolute",
5941
+ "inline-flex",
5942
+ "h-full",
5943
+ "w-full",
5944
+ "rounded-full",
5945
+ "opacity-75",
5946
+ "bg-neutral-600",
5947
+ ],
5892
5948
  variants: {
5893
5949
  color: {
5894
5950
  primary: "bg-primary-600",
@@ -5931,7 +5987,8 @@ const cvaIndicatorPing = cvaMerge(["animate-ping-sm", "absolute", "inline-flex",
5931
5987
  },
5932
5988
  },
5933
5989
  });
5934
- const cvaIndicatorIconBackground = cvaMerge(["rounded-full", "items-center", "justify-center", "flex", "relative"], {
5990
+ const cvaIndicatorIconBackground = cva({
5991
+ base: ["rounded-full", "items-center", "justify-center", "flex", "relative"],
5935
5992
  variants: {
5936
5993
  color: {
5937
5994
  primary: "bg-primary-100 text-primary-600",
@@ -6038,7 +6095,8 @@ const Indicator = ({ "data-testid": dataTestId, icon, label, color = "unknown",
6038
6095
  *
6039
6096
  * @returns tailwind class names on the basis on the provided props.
6040
6097
  */
6041
- const cvaInteractableItem = cvaMerge(["transition-colors", "duration-100", "ease-in-out"], {
6098
+ const cvaInteractableItem = cva({
6099
+ base: ["transition-colors", "duration-100", "ease-in-out"],
6042
6100
  variants: {
6043
6101
  cursor: {
6044
6102
  pointer: "cursor-pointer",
@@ -6085,7 +6143,8 @@ const cvaInteractableItem = cvaMerge(["transition-colors", "duration-100", "ease
6085
6143
  },
6086
6144
  });
6087
6145
 
6088
- const cvaKPI = cvaMerge(["flex", "flex-col"], {
6146
+ const cvaKPI = cva({
6147
+ base: ["flex", "flex-col"],
6089
6148
  variants: {
6090
6149
  variant: {
6091
6150
  small: ["px-3", "py-2"],
@@ -6097,7 +6156,8 @@ const cvaKPI = cvaMerge(["flex", "flex-col"], {
6097
6156
  variant: "default",
6098
6157
  },
6099
6158
  });
6100
- const cvaKPITrendPercentage = cvaMerge([""], {
6159
+ const cvaKPITrendPercentage = cva({
6160
+ base: [""],
6101
6161
  variants: {
6102
6162
  color: {
6103
6163
  success: ["text-success-600"],
@@ -6211,7 +6271,8 @@ const TrendIndicators = ({ trends, "data-testid": dataTestId, className, style,
6211
6271
  };
6212
6272
 
6213
6273
  const valueBarContainerClassName = "relative flex w-full items-center gap-2";
6214
- const cvaValueBarText = cvaMerge(["whitespace-nowrap"], {
6274
+ const cvaValueBarText = cva({
6275
+ base: ["whitespace-nowrap"],
6215
6276
  variants: {
6216
6277
  size: {
6217
6278
  small: "leading-xs text-xs font-medium text-neutral-600",
@@ -6223,16 +6284,17 @@ const cvaValueBarText = cvaMerge(["whitespace-nowrap"], {
6223
6284
  },
6224
6285
  });
6225
6286
 
6226
- const cvaValueBar = cvaMerge([
6227
- "w-full",
6228
- "overflow-hidden",
6229
- "rounded",
6230
- "bg-neutral-100",
6231
- "appearance-none",
6232
- "[&::-webkit-progress-bar]:bg-transparent",
6233
- "[&::-webkit-progress-value]:bg-current",
6234
- "[&::-moz-progress-bar]:bg-current",
6235
- ], {
6287
+ const cvaValueBar = cva({
6288
+ base: [
6289
+ "w-full",
6290
+ "overflow-hidden",
6291
+ "rounded",
6292
+ "bg-neutral-100",
6293
+ "appearance-none",
6294
+ "[&::-webkit-progress-bar]:bg-transparent",
6295
+ "[&::-webkit-progress-value]:bg-current",
6296
+ "[&::-moz-progress-bar]:bg-current",
6297
+ ],
6236
6298
  variants: {
6237
6299
  size: {
6238
6300
  extraSmall: "h-1",
@@ -6361,11 +6423,12 @@ const ValueBar = ({ value, min = 0, max = 100, unit, size = "small", levelColors
6361
6423
  return (jsxs("span", { className: valueBarContainerClassName, "data-testid": dataTestId, ref: ref, style: style, children: [jsx("progress", { "aria-label": valueText, className: cvaValueBar({ className, size }), max: 100, style: { color: barFillColor }, value: score * 100 }), showValue && (size === "small" || size === "large") ? (jsx(Text, { className: cvaValueBarText({ size }), "data-testid": dataTestId ? `${dataTestId}-value` : undefined, children: jsx("span", { style: valueColor ? { color: valueColor } : undefined, children: valueText }) })) : null] }));
6362
6424
  };
6363
6425
 
6364
- const cvaKPICard = cvaMerge([
6365
- "inline-flex",
6366
- "gap-1",
6367
- "hover:shadow-none", // overwriting the Card hover shadow when wrapped in a KPICard
6368
- ], {
6426
+ const cvaKPICard = cva({
6427
+ base: [
6428
+ "inline-flex",
6429
+ "gap-1",
6430
+ "hover:shadow-none", // overwriting the Card hover shadow when wrapped in a KPICard
6431
+ ],
6369
6432
  variants: {
6370
6433
  isClickable: {
6371
6434
  true: ["hover:bg-neutral-50", "component-card-border"],
@@ -6381,9 +6444,10 @@ const cvaKPICard = cvaMerge([
6381
6444
  isActive: false,
6382
6445
  },
6383
6446
  });
6384
- const cvaKPICardBody = cvaMerge(["grid", "gap-2", "px-3", "pb-2", "pt-3"]);
6385
- const cvaKPICardHeader = cvaMerge(["grid", "grid-cols-[1fr_auto]", "justify-between", "gap-2"]);
6386
- const cvaKPIIconContainer = cvaMerge(["flex", "items-center", "justify-center", "w-7", "h-7", "rounded-md", "text-white"], {
6447
+ const cvaKPICardBody = cva({ base: ["grid", "gap-2", "px-3", "pb-2", "pt-3"] });
6448
+ const cvaKPICardHeader = cva({ base: ["grid", "grid-cols-[1fr_auto]", "justify-between", "gap-2"] });
6449
+ const cvaKPIIconContainer = cva({
6450
+ base: ["flex", "items-center", "justify-center", "w-7", "h-7", "rounded-md", "text-white"],
6387
6451
  variants: {
6388
6452
  iconColor: {
6389
6453
  success: ["bg-success-600"],
@@ -6522,7 +6586,8 @@ const KPICardSkeleton = ({ hasIcon = false, hasTrends = false, hasValueBar = fal
6522
6586
  return (jsx(Card, { className: cvaKPICard({ className }), "data-testid": dataTestId, ref: ref, style: style, ...rest, children: jsxs(CardBody, { className: cvaKPICardBody(), gap: "none", padding: "none", children: [jsxs("div", { className: cvaKPICardHeader(), children: [jsx(KPISkeleton, { className: "p-0", "data-testid": dataTestId ? `${dataTestId}-kpi` : undefined }), hasIcon ? (jsx(SkeletonBlock, { "data-testid": dataTestId ? `${dataTestId}-icon-loading` : undefined, height: 28, width: 28 })) : null] }), hasTrends ? (jsx(SkeletonLabel, { "data-testid": dataTestId ? `${dataTestId}-trend-indicator-loading` : undefined, textSize: "text-xs", width: "100%" })) : null, hasValueBar ? (jsx(SkeletonLabel, { "data-testid": dataTestId ? `${dataTestId}-value-bar-loading` : undefined, textSize: "text-xs", width: "100%" })) : null, hasNotice ? (jsx(SkeletonLabel, { "data-testid": dataTestId ? `${dataTestId}-notice-loading` : undefined, textSize: "text-xs", width: "100%" })) : null, children] }) }));
6523
6587
  };
6524
6588
 
6525
- const cvaLabeledValue = cvaMerge(["flex", "text-sm"], {
6589
+ const cvaLabeledValue = cva({
6590
+ base: ["flex", "text-sm"],
6526
6591
  variants: {
6527
6592
  orientation: {
6528
6593
  horizontal: ["flex-row", "items-start", "gap-6"],
@@ -6533,7 +6598,8 @@ const cvaLabeledValue = cvaMerge(["flex", "text-sm"], {
6533
6598
  orientation: "horizontal",
6534
6599
  },
6535
6600
  });
6536
- const cvaLabeledValueLabel = cvaMerge(["font-medium", "text-neutral-500"], {
6601
+ const cvaLabeledValueLabel = cva({
6602
+ base: ["font-medium", "text-neutral-500"],
6537
6603
  variants: {
6538
6604
  orientation: {
6539
6605
  horizontal: ["min-w-[40%]", "max-w-[40%]"],
@@ -6544,9 +6610,9 @@ const cvaLabeledValueLabel = cvaMerge(["font-medium", "text-neutral-500"], {
6544
6610
  orientation: "horizontal",
6545
6611
  },
6546
6612
  });
6547
- const cvaLabeledValueValue = cvaMerge(["min-w-0", "font-medium", "text-neutral-900"]);
6548
- const cvaLabeledValueList = cvaMerge(["flex", "flex-col", "gap-4"]);
6549
- const cvaLabeledValueTooltip = cvaMerge(["ml-1", "inline-flex", "align-sub"]);
6613
+ const cvaLabeledValueValue = cva({ base: ["min-w-0", "font-medium", "text-neutral-900"] });
6614
+ const cvaLabeledValueList = cva({ base: ["flex", "flex-col", "gap-4"] });
6615
+ const cvaLabeledValueTooltip = cva({ base: ["ml-1", "inline-flex", "align-sub"] });
6550
6616
 
6551
6617
  /**
6552
6618
  * LabeledValue displays a single piece of labeled information, pairing a descriptive label with its corresponding value.
@@ -6609,7 +6675,8 @@ const LabeledValueList = ({ items, orientation = "horizontal", className, "data-
6609
6675
  return (jsx("div", { className: cvaLabeledValueList({ className }), "data-testid": dataTestId, ref: ref, style: style, children: items.map((item, index) => (jsx(LabeledValue, { orientation: orientation, ...item }, item["data-testid"] ?? `${item.label}-${index}`))) }));
6610
6676
  };
6611
6677
 
6612
- const cvaListContainer = cvaMerge(["overflow-y-auto", "overflow-x-hidden", "h-full"], {
6678
+ const cvaListContainer = cva({
6679
+ base: ["overflow-y-auto", "overflow-x-hidden", "h-full"],
6613
6680
  variants: {
6614
6681
  withTopSeparator: {
6615
6682
  true: ["border-t", "border-neutral-200", "transition-colors duration-200 ease-in"],
@@ -6620,8 +6687,9 @@ const cvaListContainer = cvaMerge(["overflow-y-auto", "overflow-x-hidden", "h-fu
6620
6687
  withTopSeparator: false,
6621
6688
  },
6622
6689
  });
6623
- const cvaList = cvaMerge(["relative"]);
6624
- const cvaListItem$1 = cvaMerge(["absolute", "top-0", "left-0", "w-full"], {
6690
+ const cvaList = cva({ base: ["relative"] });
6691
+ const cvaListItem$1 = cva({
6692
+ base: ["absolute", "top-0", "left-0", "w-full"],
6625
6693
  variants: {
6626
6694
  separator: {
6627
6695
  line: "border-neutral-200",
@@ -6649,8 +6717,11 @@ const cvaListItem$1 = cvaMerge(["absolute", "top-0", "left-0", "w-full"], {
6649
6717
  },
6650
6718
  });
6651
6719
 
6652
- const cvaListItem = cvaMerge(["py-3", "px-4", "min-h-14", "w-full", "flex", "justify-between", "items-center"]);
6653
- const cvaMainInformationClass = cvaMerge(["grid", "items-center", "text-sm", "gap-2"], {
6720
+ const cvaListItem = cva({
6721
+ base: ["py-3", "px-4", "min-h-14", "w-full", "flex", "justify-between", "items-center"],
6722
+ });
6723
+ const cvaMainInformationClass = cva({
6724
+ base: ["grid", "items-center", "text-sm", "gap-2"],
6654
6725
  variants: {
6655
6726
  hasThumbnail: {
6656
6727
  true: "grid-cols-min-fr",
@@ -6658,20 +6729,20 @@ const cvaMainInformationClass = cvaMerge(["grid", "items-center", "text-sm", "ga
6658
6729
  },
6659
6730
  },
6660
6731
  });
6661
- const cvaThumbnailContainer = cvaMerge([
6662
- "flex",
6663
- "h-8",
6664
- "w-8",
6665
- "items-center",
6666
- "justify-center",
6667
- "overflow-hidden",
6668
- "rounded-md",
6669
- ]);
6670
- const cvaTextContainer = cvaMerge(["grid-rows-min-fr", "grid", "items-center", "text-sm"]);
6671
- const cvaTitleRow = cvaMerge(["gap-responsive-space-sm", "flex", "w-full", "min-w-0", "items-center", "text-sm"]);
6672
- const cvaDescriptionRow = cvaMerge(["gap-responsive-space-sm", "flex", "w-full", "min-w-0", "items-center"]);
6673
- const cvaMetaRow = cvaMerge(["gap-responsive-space-sm", "flex", "w-full", "min-w-0", "items-center", "pt-0.5"]);
6674
- const cvaDetailsContainer = cvaMerge(["flex", "items-center", "gap-0.5", "text-nowrap", "pl-2"]);
6732
+ const cvaThumbnailContainer = cva({
6733
+ base: ["flex", "h-8", "w-8", "items-center", "justify-center", "overflow-hidden", "rounded-md"],
6734
+ });
6735
+ const cvaTextContainer = cva({ base: ["grid-rows-min-fr", "grid", "items-center", "text-sm"] });
6736
+ const cvaTitleRow = cva({
6737
+ base: ["gap-responsive-space-sm", "flex", "w-full", "min-w-0", "items-center", "text-sm"],
6738
+ });
6739
+ const cvaDescriptionRow = cva({
6740
+ base: ["gap-responsive-space-sm", "flex", "w-full", "min-w-0", "items-center"],
6741
+ });
6742
+ const cvaMetaRow = cva({
6743
+ base: ["gap-responsive-space-sm", "flex", "w-full", "min-w-0", "items-center", "pt-0.5"],
6744
+ });
6745
+ const cvaDetailsContainer = cva({ base: ["flex", "items-center", "gap-0.5", "text-nowrap", "pl-2"] });
6675
6746
 
6676
6747
  /**
6677
6748
  * Default property values for ListItemSkeleton component.
@@ -7290,17 +7361,18 @@ const useListItemHeight = () => {
7290
7361
 
7291
7362
  // These must be two separate divs (menu and menulist) so that the overflow-clip can be applied to the parent and the overflow-y-auto can be applied to the child.
7292
7363
  // * Note that the cvaMenu is also used for Select component
7293
- const cvaMenu = cvaMerge([
7294
- "shadow",
7295
- "rounded-lg",
7296
- "bg-white",
7297
- "border",
7298
- "border-neutral-300",
7299
- "z-popover",
7300
- "grid",
7301
- "min-w-[200px]",
7302
- "overflow-clip",
7303
- ], {
7364
+ const cvaMenu = cva({
7365
+ base: [
7366
+ "shadow",
7367
+ "rounded-lg",
7368
+ "bg-white",
7369
+ "border",
7370
+ "border-neutral-300",
7371
+ "z-popover",
7372
+ "grid",
7373
+ "min-w-[200px]",
7374
+ "overflow-clip",
7375
+ ],
7304
7376
  variants: {
7305
7377
  limitWidth: {
7306
7378
  true: "max-w-[300px]",
@@ -7312,20 +7384,18 @@ const cvaMenu = cvaMerge([
7312
7384
  },
7313
7385
  });
7314
7386
  // * Note that the cvaMenuList is also used for Select component
7315
- const cvaMenuList = cvaMerge([
7316
- "p-1",
7317
- "gap-y-0.5",
7318
- "grid",
7319
- "max-h-[max(40dvh,var(--spacing-64))]",
7320
- "overflow-y-auto",
7321
- ]);
7322
- const cvaMenuListDivider = cvaMerge(["mx-[-4px]", "my-0.5", "min-h-px", "bg-neutral-300"]);
7323
- const cvaMenuListMultiSelect = cvaMerge([
7324
- "!has-[:checked]:bg-primary-100",
7325
- "!hover:has-[:checked]:bg-primary-200",
7326
- "!focus-within:has-[:checked]:bg-primary-100",
7327
- ]);
7328
- const cvaMenuListItem = cvaMerge("max-w-full");
7387
+ const cvaMenuList = cva({
7388
+ base: ["p-1", "gap-y-0.5", "grid", "max-h-[max(40dvh,var(--spacing-64))]", "overflow-y-auto"],
7389
+ });
7390
+ const cvaMenuListDivider = cva({ base: ["mx-[-4px]", "my-0.5", "min-h-px", "bg-neutral-300"] });
7391
+ const cvaMenuListMultiSelect = cva({
7392
+ base: [
7393
+ "!has-[:checked]:bg-primary-100",
7394
+ "!hover:has-[:checked]:bg-primary-200",
7395
+ "!focus-within:has-[:checked]:bg-primary-100",
7396
+ ],
7397
+ });
7398
+ const cvaMenuListItem = cva({ base: "max-w-full" });
7329
7399
 
7330
7400
  const MenuContentContext = createContext(null);
7331
7401
  /**
@@ -7759,44 +7829,44 @@ const cvaMenuItem = (props) => {
7759
7829
  focus: focused === true ? "focused" : "unfocused",
7760
7830
  }), className);
7761
7831
  };
7762
- const cvaMenuItemStyle = cvaMerge(
7763
- // `min-w-0` overrides the flex/grid item default of `min-width: auto`, which otherwise refuses to
7764
- // shrink this row below the intrinsic (unwrapped) width of its `truncate`d label -- without it, the
7765
- // label's ellipsis truncation never kicks in and the ancestor menu list scrolls horizontally instead.
7766
- //
7767
- // `outline-hidden`: `MenuContent`'s roving-tabindex keyboard nav calls this element's own `.focus()`
7768
- // on hover too (to keep keyboard nav in sync with the pointer -- see `onMouseMove` on `MenuItemProps`),
7769
- // and Chromium's `:focus-visible` heuristic treats a script-triggered `.focus()` on a non-native
7770
- // control as visible-by-default, so the browser's native ring was showing on every hover. The active
7771
- // item is already indicated by `cvaInteractableItem`'s `hover:`/`focus-within:` background tint, so the
7772
- // native ring is redundant (and, via hover, actively misleading) for both mouse and keyboard users.
7773
- //
7774
- // `data-[state=open]:…` / `data-hover-scroll-suppressed`: a submenu trigger's open state is held still
7775
- // across scroll-induced phantom `:hover` flips (see `hoverScrollGuard`). Non-open rows freeze their
7776
- // *hover* tint back to their own resting background (added per-`selected` value below, since that
7777
- // resting background differs) while the guard's root attribute is set -- matching the open-state
7778
- // freeze without a React render per scroll tick, and *without* `pointer-events-none`: an earlier
7779
- // version took the row out of hit-testing entirely, which silently swallowed real clicks landing
7780
- // within the same ~100ms window (not just the phantom hover this guards against) -- see the
7781
- // "Service Management Edit notification" e2e flake this caused. Excludes `:focus-within`
7782
- // (`:not(:focus-within)`): the frozen background is `!important`, so without the exclusion it would
7783
- // outrank `cvaInteractableItem`'s plain `focus-within:` tint whenever the hovered row is also the
7784
- // keyboard-navigated one (the common case, since `MenuContent`'s roving tabindex focuses the row
7785
- // under the cursor) -- blanking the keyboard-navigated row's only visual indicator (the native ring
7786
- // is suppressed by `outline-hidden` above) for the whole scroll-suppression window.
7787
- [
7788
- "px-2",
7789
- "h-auto",
7790
- "flex",
7791
- "flex-row",
7792
- "items-center",
7793
- "gap-x-2",
7794
- "select-none",
7795
- "rounded",
7796
- "min-w-0",
7797
- "outline-hidden",
7798
- "data-[state=open]:bg-neutral-600/5",
7799
- ], {
7832
+ const cvaMenuItemStyle = cva({
7833
+ // `min-w-0` overrides the flex/grid item default of `min-width: auto`, which otherwise refuses to
7834
+ // shrink this row below the intrinsic (unwrapped) width of its `truncate`d label -- without it, the
7835
+ // label's ellipsis truncation never kicks in and the ancestor menu list scrolls horizontally instead.
7836
+ //
7837
+ // `outline-hidden`: `MenuContent`'s roving-tabindex keyboard nav calls this element's own `.focus()`
7838
+ // on hover too (to keep keyboard nav in sync with the pointer -- see `onMouseMove` on `MenuItemProps`),
7839
+ // and Chromium's `:focus-visible` heuristic treats a script-triggered `.focus()` on a non-native
7840
+ // control as visible-by-default, so the browser's native ring was showing on every hover. The active
7841
+ // item is already indicated by `cvaInteractableItem`'s `hover:`/`focus-within:` background tint, so the
7842
+ // native ring is redundant (and, via hover, actively misleading) for both mouse and keyboard users.
7843
+ //
7844
+ // `data-[state=open]:…` / `data-hover-scroll-suppressed`: a submenu trigger's open state is held still
7845
+ // across scroll-induced phantom `:hover` flips (see `hoverScrollGuard`). Non-open rows freeze their
7846
+ // *hover* tint back to their own resting background (added per-`selected` value below, since that
7847
+ // resting background differs) while the guard's root attribute is set -- matching the open-state
7848
+ // freeze without a React render per scroll tick, and *without* `pointer-events-none`: an earlier
7849
+ // version took the row out of hit-testing entirely, which silently swallowed real clicks landing
7850
+ // within the same ~100ms window (not just the phantom hover this guards against) -- see the
7851
+ // "Service Management Edit notification" e2e flake this caused. Excludes `:focus-within`
7852
+ // (`:not(:focus-within)`): the frozen background is `!important`, so without the exclusion it would
7853
+ // outrank `cvaInteractableItem`'s plain `focus-within:` tint whenever the hovered row is also the
7854
+ // keyboard-navigated one (the common case, since `MenuContent`'s roving tabindex focuses the row
7855
+ // under the cursor) -- blanking the keyboard-navigated row's only visual indicator (the native ring
7856
+ // is suppressed by `outline-hidden` above) for the whole scroll-suppression window.
7857
+ base: [
7858
+ "px-2",
7859
+ "h-auto",
7860
+ "flex",
7861
+ "flex-row",
7862
+ "items-center",
7863
+ "gap-x-2",
7864
+ "select-none",
7865
+ "rounded",
7866
+ "min-w-0",
7867
+ "outline-hidden",
7868
+ "data-[state=open]:bg-neutral-600/5",
7869
+ ],
7800
7870
  variants: {
7801
7871
  fieldSize: {
7802
7872
  small: ["text-xs", "py-1.5"],
@@ -7819,9 +7889,7 @@ const cvaMenuItemStyle = cvaMerge(
7819
7889
  // `cvaInteractableItem`), everything else rests transparent. The `selected` + `variant="danger"`
7820
7890
  // compound below rests on `!bg-white` instead and gets its own freeze override there.
7821
7891
  selected: {
7822
- true: [
7823
- "[:root[data-hover-scroll-suppressed]_&:not([data-state=open]):not(:focus-within)]:hover:!bg-primary-50",
7824
- ],
7892
+ true: ["[:root[data-hover-scroll-suppressed]_&:not([data-state=open]):not(:focus-within)]:hover:!bg-primary-50"],
7825
7893
  false: [
7826
7894
  "[:root[data-hover-scroll-suppressed]_&:not([data-state=open]):not(:focus-within)]:hover:!bg-transparent",
7827
7895
  ],
@@ -7851,12 +7919,12 @@ const cvaMenuItemStyle = cvaMerge(
7851
7919
  disabled: false,
7852
7920
  },
7853
7921
  });
7854
- const cvaMenuItemLabel = cvaMerge(
7855
- // No `truncate` here: `text-overflow: ellipsis` only applies to block containers, not flex containers,
7856
- // and this wrapper is `flex` (to align prefix/label/description). The actual truncation lives on the
7857
- // nested label `<span>` in `MenuItem.tsx`, which gets auto-blockified for being a flex item. `min-w-0`
7858
- // (rather than `truncate`'s `overflow-hidden`) is what lets this wrapper shrink below its content size.
7859
- ["flex-grow", "min-w-0", "text-black", "font-normal", "flex", "items-center"], {
7922
+ const cvaMenuItemLabel = cva({
7923
+ // No `truncate` here: `text-overflow: ellipsis` only applies to block containers, not flex containers,
7924
+ // and this wrapper is `flex` (to align prefix/label/description). The actual truncation lives on the
7925
+ // nested label `<span>` in `MenuItem.tsx`, which gets auto-blockified for being a flex item. `min-w-0`
7926
+ // (rather than `truncate`'s `overflow-hidden`) is what lets this wrapper shrink below its content size.
7927
+ base: ["flex-grow", "min-w-0", "text-black", "font-normal", "flex", "items-center"],
7860
7928
  variants: {
7861
7929
  variant: {
7862
7930
  primary: [],
@@ -7872,15 +7940,16 @@ const cvaMenuItemLabel = cvaMerge(
7872
7940
  disabled: false,
7873
7941
  },
7874
7942
  });
7875
- const cvaMenuItemPrefix = cvaMerge([
7876
- "text-neutral-400",
7877
- "hover:text-neutral-500",
7878
- "focus:text-neutral-500",
7879
- "h-min",
7880
- "leading-[0]",
7881
- "flex",
7882
- "items-center",
7883
- ], {
7943
+ const cvaMenuItemPrefix = cva({
7944
+ base: [
7945
+ "text-neutral-400",
7946
+ "hover:text-neutral-500",
7947
+ "focus:text-neutral-500",
7948
+ "h-min",
7949
+ "leading-[0]",
7950
+ "flex",
7951
+ "items-center",
7952
+ ],
7884
7953
  variants: {
7885
7954
  selected: {
7886
7955
  true: "text-primary-600",
@@ -7900,7 +7969,8 @@ const cvaMenuItemPrefix = cvaMerge([
7900
7969
  disabled: false,
7901
7970
  },
7902
7971
  });
7903
- const cvaMenuItemSuffix = cvaMerge(["text-neutral-400", "text-sm", "flex", "items-center"], {
7972
+ const cvaMenuItemSuffix = cva({
7973
+ base: ["text-neutral-400", "text-sm", "flex", "items-center"],
7904
7974
  variants: {
7905
7975
  selected: {
7906
7976
  true: "text-neutral-600",
@@ -8208,7 +8278,7 @@ const MenuItem = ({ className, "data-testid": dataTestId, label, children, selec
8208
8278
  return (jsxs(Popover, { activation: { click: !disabled, hover: disabled ? false : { delayed: true } }, isOpen: submenuOpen, onOpenStateChange: setSubmenuOpen, placement: "right-start", sizing: submenuSizing, children: [jsx(PopoverTrigger, { ref: mergedTriggerRef, children: jsx(MenuItemRow, { ...itemRowProps, "aria-expanded": submenuOpen, "aria-haspopup": "menu" }) }), jsx(PopoverContent, { initialFocus: 1, returnFocus: returnFocusRef, children: submenu })] }));
8209
8279
  };
8210
8280
 
8211
- const cvaMoreMenu = cvaMerge(["p-0"]);
8281
+ const cvaMoreMenu = cva({ base: ["p-0"] });
8212
8282
 
8213
8283
  /**
8214
8284
  * MoreMenu (kebab menu) renders a three-dot button that opens a popover with a list of actions.
@@ -8268,8 +8338,9 @@ const MoreMenu = ({ className, "data-testid": dataTestId, popoverProps, iconProp
8268
8338
  return (jsx("div", { className: cvaMoreMenu({ className }), "data-testid": dataTestId ? dataTestId : undefined, ref: mergedRef, style: style, children: jsx(MenuTree, { children: jsx(Popover, { placement: "bottom-end", ...popoverProps, children: modalState => (jsxs(Fragment, { children: [jsx(PopoverTrigger, { children: customButton ?? (jsx(IconButton, { ...iconButtonProps, "data-testid": iconButtonProps["data-testid"] ?? "more-menu-icon", icon: jsx(Icon, { name: "EllipsisHorizontal", ...iconProps }), ...(modalState.isOpen ? { ariaLabel: resolvedButtonLabel } : { title: resolvedButtonLabel }) })) }), jsx(PopoverContent, { portalId: customPortalId, children: close => (typeof children === "function" ? children(close) : children) })] })) }) }) }));
8269
8339
  };
8270
8340
 
8271
- const cvaNotice = cvaMerge(["flex", "items-center", "gap-1"]);
8272
- const cvaNoticeLabel = cvaMerge(["font-medium", "text-sm", "overflow-hidden", "text-ellipsis", "whitespace-nowrap"], {
8341
+ const cvaNotice = cva({ base: ["flex", "items-center", "gap-1"] });
8342
+ const cvaNoticeLabel = cva({
8343
+ base: ["font-medium", "text-sm", "overflow-hidden", "text-ellipsis", "whitespace-nowrap"],
8273
8344
  variants: {
8274
8345
  color: {
8275
8346
  neutral: "text-neutral-400",
@@ -8288,7 +8359,8 @@ const cvaNoticeLabel = cvaMerge(["font-medium", "text-sm", "overflow-hidden", "t
8288
8359
  size: "medium",
8289
8360
  },
8290
8361
  });
8291
- const cvaNoticeIcon = cvaMerge(["rounded-full", "items-center", "justify-center", "flex", "relative"], {
8362
+ const cvaNoticeIcon = cva({
8363
+ base: ["rounded-full", "items-center", "justify-center", "flex", "relative"],
8292
8364
  variants: {
8293
8365
  color: {
8294
8366
  neutral: "text-neutral-400",
@@ -8347,7 +8419,8 @@ const Notice = ({ "data-testid": dataTestId, iconName = undefined, iconSize = "m
8347
8419
  return (jsxs("div", { "aria-label": label, className: cvaNotice({ className }), "data-testid": dataTestId, ref: ref, ...rest, children: [nonNullable(iconName) ? (jsx("div", { className: cvaNoticeIcon({ color: iconColor || color }), "data-testid": dataTestId ? `${dataTestId}-icon` : "notice-icon", children: jsx(Icon, { name: iconName, size: iconSize }) })) : null, label && withLabel ? (jsx("div", { className: cvaNoticeLabel({ color, size }), "data-testid": dataTestId ? `${dataTestId}-label` : "notice-label", children: label })) : null] }));
8348
8420
  };
8349
8421
 
8350
- const cvaPage = cvaMerge(["grid", "h-full"], {
8422
+ const cvaPage = cva({
8423
+ base: ["grid", "h-full"],
8351
8424
  variants: {
8352
8425
  layout: {
8353
8426
  content: ["grid-rows-1"],
@@ -8360,7 +8433,8 @@ const cvaPage = cvaMerge(["grid", "h-full"], {
8360
8433
  layout: "none",
8361
8434
  },
8362
8435
  });
8363
- const cvaPageContent = cvaMerge(["overflow-auto", "page-content", "grid", "gap-4"], {
8436
+ const cvaPageContent = cva({
8437
+ base: ["overflow-auto", "page-content", "grid", "gap-4"],
8364
8438
  variants: {
8365
8439
  layout: {
8366
8440
  content: "grid-rows-fr",
@@ -8491,7 +8565,7 @@ const PRESET_CONFIGURATIONS = {
8491
8565
  ],
8492
8566
  };
8493
8567
 
8494
- const cvaSkeletonContainer = cvaMerge(["flex", "flex-col"]);
8568
+ const cvaSkeletonContainer = cva({ base: ["flex", "flex-col"] });
8495
8569
 
8496
8570
  /**
8497
8571
  * SkeletonLines renders multiple animated placeholder text lines before data loads.
@@ -8693,7 +8767,8 @@ const useIsTextTruncated = (text, { skip = false } = {}) => {
8693
8767
  return useMemo(() => ({ ref, isTextTruncated }), [isTextTruncated]);
8694
8768
  };
8695
8769
 
8696
- const cvaPageHeaderContainer = cvaMerge(["bg-white", "tu-page-header"], {
8770
+ const cvaPageHeaderContainer = cva({
8771
+ base: ["bg-white", "tu-page-header"],
8697
8772
  variants: {
8698
8773
  withBorder: {
8699
8774
  true: ["border-b", "border-b-neutral-200"],
@@ -8701,8 +8776,8 @@ const cvaPageHeaderContainer = cvaMerge(["bg-white", "tu-page-header"], {
8701
8776
  },
8702
8777
  },
8703
8778
  });
8704
- const cvaPageHeader = cvaMerge(["box-border", "py-4", "px-4", "flex", "items-center", "gap-y-1"]);
8705
- const cvaPageHeaderHeading = cvaMerge(["text-neutral-900", "text-xl", "font-semibold", "truncate"]);
8779
+ const cvaPageHeader = cva({ base: ["box-border", "py-4", "px-4", "flex", "items-center", "gap-y-1"] });
8780
+ const cvaPageHeaderHeading = cva({ base: ["text-neutral-900", "text-xl", "font-semibold", "truncate"] });
8706
8781
 
8707
8782
  /**
8708
8783
  * The PageHeaderTitle component is used to display the title of the page header.
@@ -8794,8 +8869,8 @@ const PageHeader = ({ className, "data-testid": dataTestId, showLoading = false,
8794
8869
  discriminatedProps.primaryAction.tooltipLabel === "", label: discriminatedProps.primaryAction.tooltipLabel, children: jsx(Button, { "data-testid": discriminatedProps.primaryAction["data-testid"], disabled: discriminatedProps.primaryAction.disabled, loading: discriminatedProps.primaryAction.loading, onClick: () => discriminatedProps.primaryAction?.actionCallback?.(), prefix: discriminatedProps.primaryAction.prefixIconName !== undefined ? (jsx(Icon, { name: discriminatedProps.primaryAction.prefixIconName, size: "small" })) : undefined, size: "small", style: discriminatedProps.primaryAction.style, variant: discriminatedProps.primaryAction.variant, children: discriminatedProps.primaryAction.actionText }) })) : null] })] }), tabsList] }));
8795
8870
  };
8796
8871
 
8797
- const cvaPagination = cvaMerge(["flex", "items-center", "gap-1"]);
8798
- const cvaPaginationText = cvaMerge("whitespace-nowrap");
8872
+ const cvaPagination = cva({ base: ["flex", "items-center", "gap-1"] });
8873
+ const cvaPaginationText = cva({ base: "whitespace-nowrap" });
8799
8874
 
8800
8875
  /**
8801
8876
  * Pagination provides previous/next page navigation with an optional page counter and jump-to-page input.
@@ -8976,20 +9051,21 @@ const PopoverTitle = ({ children, action, divider = false, className, "data-test
8976
9051
  return (jsxs("div", { className: cvaPopoverTitleContainer({ divider, className }), "data-testid": dataTestId, ref: ref, style: style, children: [jsx(Text, { className: cvaPopoverTitleText(), size: "small", subtle: true, type: "div", uppercase: true, weight: "bold", children: children }), action] }));
8977
9052
  };
8978
9053
 
8979
- const cvaPreferenceCard = cvaMerge([
8980
- "rounded-lg",
8981
- "border",
8982
- "border-neutral-200",
8983
- "bg-white",
8984
- "w-full",
8985
- "grid",
8986
- "gap-y-2",
8987
- "@container",
8988
- "grid-rows-1",
8989
- "grid-cols-1",
8990
- "[&:has([data-slot=input-container])]:grid-cols-min-fr", // When the input container is present, the grid columns are set to min-fr
8991
- "[&:has([data-slot=input-container]_:focus-visible)]:outline-native",
8992
- ], {
9054
+ const cvaPreferenceCard = cva({
9055
+ base: [
9056
+ "rounded-lg",
9057
+ "border",
9058
+ "border-neutral-200",
9059
+ "bg-white",
9060
+ "w-full",
9061
+ "grid",
9062
+ "gap-y-2",
9063
+ "@container",
9064
+ "grid-rows-1",
9065
+ "grid-cols-1",
9066
+ "[&:has([data-slot=input-container])]:grid-cols-min-fr", // When the input container is present, the grid columns are set to min-fr
9067
+ "[&:has([data-slot=input-container]_:focus-visible)]:outline-native",
9068
+ ],
8993
9069
  variants: {
8994
9070
  disabled: {
8995
9071
  true: "",
@@ -9012,7 +9088,8 @@ const cvaPreferenceCard = cvaMerge([
9012
9088
  clickable: false,
9013
9089
  },
9014
9090
  });
9015
- const cvaInputContainer = cvaMerge(["flex", "p-4", "rounded-l-lg", "border", "border-transparent", "bg-neutral-50", "border-r-neutral-200"], {
9091
+ const cvaInputContainer = cva({
9092
+ base: ["flex", "p-4", "rounded-l-lg", "border", "border-transparent", "bg-neutral-50", "border-r-neutral-200"],
9016
9093
  variants: {
9017
9094
  itemPlacement: {
9018
9095
  center: "items-center",
@@ -9023,11 +9100,12 @@ const cvaInputContainer = cvaMerge(["flex", "p-4", "rounded-l-lg", "border", "bo
9023
9100
  itemPlacement: "start",
9024
9101
  },
9025
9102
  });
9026
- const cvaContentContainer = cvaMerge([
9027
- "grid",
9028
- "gap-x-3",
9029
- //* Grid template areas are applied with GridAreas component)
9030
- ], {
9103
+ const cvaContentContainer = cva({
9104
+ base: [
9105
+ "grid",
9106
+ "gap-x-3",
9107
+ //* Grid template areas are applied with GridAreas component)
9108
+ ],
9031
9109
  variants: {
9032
9110
  itemPlacement: {
9033
9111
  center: "items-center",
@@ -9038,7 +9116,8 @@ const cvaContentContainer = cvaMerge([
9038
9116
  itemPlacement: "start",
9039
9117
  },
9040
9118
  });
9041
- const cvaTitleCard = cvaMerge(["min-w-0", "overflow-hidden", "text-ellipsis", "whitespace-nowrap"], {
9119
+ const cvaTitleCard = cva({
9120
+ base: ["min-w-0", "overflow-hidden", "text-ellipsis", "whitespace-nowrap"],
9042
9121
  variants: {
9043
9122
  disabled: {
9044
9123
  true: "text-neutral-400",
@@ -9049,7 +9128,8 @@ const cvaTitleCard = cvaMerge(["min-w-0", "overflow-hidden", "text-ellipsis", "w
9049
9128
  disabled: false,
9050
9129
  },
9051
9130
  });
9052
- const cvaDescriptionCard = cvaMerge([], {
9131
+ const cvaDescriptionCard = cva({
9132
+ base: [],
9053
9133
  variants: {
9054
9134
  disabled: {
9055
9135
  true: "text-neutral-400",
@@ -9060,7 +9140,8 @@ const cvaDescriptionCard = cvaMerge([], {
9060
9140
  disabled: false,
9061
9141
  },
9062
9142
  });
9063
- const cvaIconBackground = cvaMerge(["flex", "h-8", "w-8", "items-center", "justify-center", "rounded-md", "shrink-0"], {
9143
+ const cvaIconBackground = cva({
9144
+ base: ["flex", "h-8", "w-8", "items-center", "justify-center", "rounded-md", "shrink-0"],
9064
9145
  variants: {
9065
9146
  disabled: {
9066
9147
  true: "bg-neutral-200",
@@ -9071,7 +9152,7 @@ const cvaIconBackground = cvaMerge(["flex", "h-8", "w-8", "items-center", "justi
9071
9152
  disabled: false,
9072
9153
  },
9073
9154
  });
9074
- const cvaContentWrapper = cvaMerge(["grid", "gap-2", "px-4", "py-3"]);
9155
+ const cvaContentWrapper = cva({ base: ["grid", "gap-2", "px-4", "py-3"] });
9075
9156
 
9076
9157
  const CENTER_INPUT_HEIGHT_THRESHOLD = 92;
9077
9158
  /**
@@ -9305,7 +9386,8 @@ const Prompt = ({ when, message }) => {
9305
9386
  return null;
9306
9387
  };
9307
9388
 
9308
- const cvaSpacer = cvaMerge([], {
9389
+ const cvaSpacer = cva({
9390
+ base: [],
9309
9391
  variants: {
9310
9392
  border: {
9311
9393
  true: ["border-t", "border-solid", "border-neutral-100", "min-h-[1px]"],
@@ -9511,7 +9593,8 @@ const getSnapLevelCssHeight = (levelIndex, totalLevels, dockingEnabled, dockedHe
9511
9593
  *
9512
9594
  * Always absolutely positioned within the provided container element.
9513
9595
  */
9514
- const cvaSheetContainer = cvaMerge(["absolute", "inset-0", "z-overlay", "overflow-clip", "[container-type:size]"], {
9596
+ const cvaSheetContainer = cva({
9597
+ base: ["absolute", "inset-0", "z-overlay", "overflow-clip", "[container-type:size]"],
9515
9598
  variants: {
9516
9599
  docked: {
9517
9600
  true: ["pointer-events-none"],
@@ -9538,7 +9621,17 @@ const cvaSheetContainer = cvaMerge(["absolute", "inset-0", "z-overlay", "overflo
9538
9621
  * During drag, the gesture hook sets `--sheet-drag-height` and `transition: none`
9539
9622
  * directly on the element for immediate visual feedback, then restores on release.
9540
9623
  */
9541
- const cvaSheetPanel = cvaMerge(["absolute", "bottom-0", "flex", "flex-col", "pointer-events-auto", "rounded-b-none", "rounded-t-xl", "z-overlay"], {
9624
+ const cvaSheetPanel = cva({
9625
+ base: [
9626
+ "absolute",
9627
+ "bottom-0",
9628
+ "flex",
9629
+ "flex-col",
9630
+ "pointer-events-auto",
9631
+ "rounded-b-none",
9632
+ "rounded-t-xl",
9633
+ "z-overlay",
9634
+ ],
9542
9635
  variants: {
9543
9636
  anchor: {
9544
9637
  center: ["inset-x-0", "mx-auto", "max-w-3xl"],
@@ -9566,7 +9659,8 @@ const cvaSheetPanel = cvaMerge(["absolute", "bottom-0", "flex", "flex-col", "poi
9566
9659
  * for fit mode so that `scrollHeight` reflects natural content height rather
9567
9660
  * than the stretched layout — critical for correct fit-height measurement.
9568
9661
  */
9569
- const cvaSheetScrollArea = cvaMerge(["flex", "flex-col", "min-h-0", "overflow-x-hidden", "overflow-y-auto"], {
9662
+ const cvaSheetScrollArea = cva({
9663
+ base: ["flex", "flex-col", "min-h-0", "overflow-x-hidden", "overflow-y-auto"],
9570
9664
  variants: {
9571
9665
  fillHeight: {
9572
9666
  true: ["flex-grow"],
@@ -9696,17 +9790,18 @@ const HANDLE_VISUALS = {
9696
9790
  proximityWeight: 0.5,
9697
9791
  },
9698
9792
  };
9699
- const cvaSheetHandle = cvaMerge([
9700
- "flex",
9701
- "items-center",
9702
- "justify-center",
9703
- "w-full",
9704
- "py-3",
9705
- "touch-action-none",
9706
- "select-none",
9707
- "shrink-0",
9708
- "bg-white",
9709
- ], {
9793
+ const cvaSheetHandle = cva({
9794
+ base: [
9795
+ "flex",
9796
+ "items-center",
9797
+ "justify-center",
9798
+ "w-full",
9799
+ "py-3",
9800
+ "touch-action-none",
9801
+ "select-none",
9802
+ "shrink-0",
9803
+ "bg-white",
9804
+ ],
9710
9805
  variants: {
9711
9806
  isDragging: {
9712
9807
  true: ["cursor-grabbing", "[--handle-interaction:0.25]"],
@@ -9722,7 +9817,8 @@ const cvaSheetHandle = cvaMerge([
9722
9817
  isDragging: false,
9723
9818
  },
9724
9819
  });
9725
- const cvaSheetHandleLine = cvaMerge(["w-8", "h-1", "rounded-full", "origin-center"], {
9820
+ const cvaSheetHandleLine = cva({
9821
+ base: ["w-8", "h-1", "rounded-full", "origin-center"],
9726
9822
  variants: {
9727
9823
  isDragging: {
9728
9824
  true: [],
@@ -9763,7 +9859,14 @@ const SheetHandle = ({ onPointerDown, onPointerMove, onPointerUp, onLostPointerC
9763
9859
  } }) }));
9764
9860
  };
9765
9861
 
9766
- const cvaSheetOverlay = cvaMerge(["absolute", "inset-0", "transition-opacity", "duration-300", "[transition-timing-function:cubic-bezier(0.2,0,0,1)]"], {
9862
+ const cvaSheetOverlay = cva({
9863
+ base: [
9864
+ "absolute",
9865
+ "inset-0",
9866
+ "transition-opacity",
9867
+ "duration-300",
9868
+ "[transition-timing-function:cubic-bezier(0.2,0,0,1)]",
9869
+ ],
9767
9870
  variants: {
9768
9871
  visible: {
9769
9872
  true: ["bg-black/50", "pointer-events-auto"],
@@ -11449,8 +11552,9 @@ const useSheet = (props) => {
11449
11552
  }), [isOpen, state, variant, open, close, snap, floatingUi, onGeometryChange, onSnap, onClickHandle, onCloseGesture]);
11450
11553
  };
11451
11554
 
11452
- const cvaSidebar = cvaMerge(["apply", "grid", "grid-cols-fr-min", "items-center"]);
11453
- const cvaSidebarChildContainer = cvaMerge(["apply", "flex", "overflow-hidden", "gap-2", "p-1", "max-w-full"], {
11555
+ const cvaSidebar = cva({ base: ["apply", "grid", "grid-cols-fr-min", "items-center"] });
11556
+ const cvaSidebarChildContainer = cva({
11557
+ base: ["apply", "flex", "overflow-hidden", "gap-2", "p-1", "max-w-full"],
11454
11558
  variants: {
11455
11559
  breakpoint: {
11456
11560
  xs: ["xs:overflow-visible", "xs:p-0", "xs:grid", "xs:grid-cols-1", "xs:w-full"],
@@ -11658,7 +11762,8 @@ const Sidebar = ({ childContainerClassName, children, breakpoint = "lg", classNa
11658
11762
  * would never appear as a complete literal string anywhere in this file and so would silently fail
11659
11763
  * to generate any CSS at all.
11660
11764
  */
11661
- const cvaSidebarContentLayout = cvaMerge(["grid", "min-h-0", "flex-1", "grid-rows-[min-content_minmax(0px,1fr)]"], {
11765
+ const cvaSidebarContentLayout = cva({
11766
+ base: ["grid", "min-h-0", "flex-1", "grid-rows-[min-content_minmax(0px,1fr)]"],
11662
11767
  variants: {
11663
11768
  breakpoint: {
11664
11769
  xs: ["grid-cols-1", "xs:grid-cols-[200px_minmax(0px,1fr)]", "xs:grid-rows-none"],
@@ -11714,7 +11819,8 @@ const cvaSidebarContentLayout = cvaMerge(["grid", "min-h-0", "flex-1", "grid-row
11714
11819
  * `p-content-space` already owns - it is deliberately *not* zero, but not enough to look like a second
11715
11820
  * gap either.
11716
11821
  */
11717
- const cvaSidebarContentLayoutSidebar = cvaMerge(["pt-4", "pl-4", "pr-4"], {
11822
+ const cvaSidebarContentLayoutSidebar = cva({
11823
+ base: ["pt-4", "pl-4", "pr-4"],
11718
11824
  variants: {
11719
11825
  breakpoint: {
11720
11826
  xs: ["xs:pr-2", "xs:h-full", "xs:min-h-0", "xs:overflow-y-auto", "xs:[scrollbar-gutter:stable]"],
@@ -11741,7 +11847,8 @@ const cvaSidebarContentLayoutSidebar = cvaMerge(["pt-4", "pl-4", "pr-4"], {
11741
11847
  * ancestor. Callers rendering a route that must sit flush (e.g. a full-page extension iframe) opt
11742
11848
  * out with `contentSpace={false}`.
11743
11849
  */
11744
- const cvaSidebarContentLayoutContent = cvaMerge(["relative", "h-full", "min-h-0", "overflow-y-auto"], {
11850
+ const cvaSidebarContentLayoutContent = cva({
11851
+ base: ["relative", "h-full", "min-h-0", "overflow-y-auto"],
11745
11852
  variants: {
11746
11853
  contentSpace: {
11747
11854
  true: ["p-content-space"],
@@ -11793,42 +11900,38 @@ const SidebarContentLayout = ({ breakpoint = "lg", className, content, contentSp
11793
11900
  return (jsxs("div", { className: cvaSidebarContentLayout({ breakpoint, className }), "data-testid": dataTestId, ref: ref, style: style, children: [jsx("div", { className: cvaSidebarContentLayoutSidebar({ breakpoint }), "data-testid": `${dataTestId}-sidebar`, children: jsx(Sidebar, { breakpoint: breakpoint, children: sidebar }) }), jsx("div", { className: cvaSidebarContentLayoutContent({ contentSpace }), "data-testid": `${dataTestId}-content`, children: content })] }));
11794
11901
  };
11795
11902
 
11796
- const cvaTabsRoot = cvaMerge([]);
11797
- const cvaTabList = cvaMerge([
11798
- "flex",
11799
- "flex-row",
11800
- "border-b",
11801
- "border-b-neutral-200",
11802
- "overflow-auto",
11803
- "no-scrollbar",
11804
- ]);
11805
- const cvaTabContent = cvaMerge([]);
11806
- const cvaTab = cvaMerge([
11807
- "flex",
11808
- "items-center",
11809
- "justify-center",
11810
- "gap-2",
11811
- "text-sm",
11812
- "px-4",
11813
- "py-2",
11814
- "cursor-pointer",
11815
- "transition",
11816
- "duration-200",
11817
- "ease-in-out",
11818
- "whitespace-nowrap",
11819
- "border-b-2",
11820
- "border-b-transparent",
11821
- "hover:border-b-transparent",
11822
- "data-[state=active]:border-b-primary-600",
11823
- "data-[state=active]:font-semibold",
11824
- "data-[state=active]:text-neutral-900",
11825
- "data-[state=inactive]:font-medium",
11826
- "data-[state=inactive]:text-neutral-700",
11827
- "data-[state=inactive]:hover:text-neutral-900",
11828
- "disabled:cursor-not-allowed",
11829
- "data-[state=active]disabled:text-neutral-400",
11830
- "data-[state=inactive]:disabled:text-neutral-400",
11831
- ], {
11903
+ const cvaTabsRoot = cva({ base: [] });
11904
+ const cvaTabList = cva({
11905
+ base: ["flex", "flex-row", "border-b", "border-b-neutral-200", "overflow-auto", "no-scrollbar"],
11906
+ });
11907
+ const cvaTabContent = cva({ base: [] });
11908
+ const cvaTab = cva({
11909
+ base: [
11910
+ "flex",
11911
+ "items-center",
11912
+ "justify-center",
11913
+ "gap-2",
11914
+ "text-sm",
11915
+ "px-4",
11916
+ "py-2",
11917
+ "cursor-pointer",
11918
+ "transition",
11919
+ "duration-200",
11920
+ "ease-in-out",
11921
+ "whitespace-nowrap",
11922
+ "border-b-2",
11923
+ "border-b-transparent",
11924
+ "hover:border-b-transparent",
11925
+ "data-[state=active]:border-b-primary-600",
11926
+ "data-[state=active]:font-semibold",
11927
+ "data-[state=active]:text-neutral-900",
11928
+ "data-[state=inactive]:font-medium",
11929
+ "data-[state=inactive]:text-neutral-700",
11930
+ "data-[state=inactive]:hover:text-neutral-900",
11931
+ "disabled:cursor-not-allowed",
11932
+ "data-[state=active]disabled:text-neutral-400",
11933
+ "data-[state=inactive]:disabled:text-neutral-400",
11934
+ ],
11832
11935
  variants: {
11833
11936
  isFullWidth: {
11834
11937
  true: "w-full",
@@ -12063,8 +12166,11 @@ const Tabs = ({ children, forceRender, className, "data-testid": dataTestId, ful
12063
12166
  return (jsx(Root, { className: cvaTabsRoot({ className }), "data-testid": dataTestId, ref: ref, ...rest, children: children }));
12064
12167
  };
12065
12168
 
12066
- const cvaToggleGroup = cvaMerge(["inline-flex", "p-0.5", "bg-neutral-200", "rounded-md", "gap-1", "relative"]);
12067
- const cvaToggleItem = cvaMerge(["z-10", "group"], {
12169
+ const cvaToggleGroup = cva({
12170
+ base: ["inline-flex", "p-0.5", "bg-neutral-200", "rounded-md", "gap-1", "relative"],
12171
+ });
12172
+ const cvaToggleItem = cva({
12173
+ base: ["z-10", "group"],
12068
12174
  variants: {
12069
12175
  selected: {
12070
12176
  true: [],
@@ -12083,7 +12189,8 @@ const cvaToggleItem = cvaMerge(["z-10", "group"], {
12083
12189
  },
12084
12190
  ],
12085
12191
  });
12086
- const cvaToggleGroupWithSlidingBackground = cvaMerge([], {
12192
+ const cvaToggleGroupWithSlidingBackground = cva({
12193
+ base: [],
12087
12194
  variants: {
12088
12195
  isMounted: {
12089
12196
  true: [
@@ -12104,7 +12211,8 @@ const cvaToggleGroupWithSlidingBackground = cvaMerge([], {
12104
12211
  },
12105
12212
  },
12106
12213
  });
12107
- const cvaToggleItemText = cvaMerge(["text-ellipsis", "truncate", "flex-grow", "font-medium"], {
12214
+ const cvaToggleItemText = cva({
12215
+ base: ["text-ellipsis", "truncate", "flex-grow", "font-medium"],
12108
12216
  variants: {
12109
12217
  maxWidth: {
12110
12218
  sm: ["max-w-[80px]"],
@@ -12142,7 +12250,8 @@ const cvaToggleItemText = cvaMerge(["text-ellipsis", "truncate", "flex-grow", "f
12142
12250
  },
12143
12251
  ],
12144
12252
  });
12145
- const cvaToggleItemContent = cvaMerge([], {
12253
+ const cvaToggleItemContent = cva({
12254
+ base: [],
12146
12255
  variants: {
12147
12256
  selected: {
12148
12257
  true: [],
@@ -12296,7 +12405,8 @@ const ToggleButton = ({ title, size, children, "data-testid": dataTestId, classN
12296
12405
  return (jsx("button", { ...rest, className: twMerge("flex items-center justify-center gap-1 self-stretch", paddingClasses, className), "data-testid": dataTestId, title: isIconOnly ? title : undefined, type: "button", children: isIconOnly ? (icon) : (jsxs(Fragment, { children: [iconPrefix, children] })) }));
12297
12406
  };
12298
12407
 
12299
- const cvaSegmentedValueBar = cvaMerge(["flex-1", "overflow-hidden", "rounded", "bg-neutral-100", "flex"], {
12408
+ const cvaSegmentedValueBar = cva({
12409
+ base: ["flex-1", "overflow-hidden", "rounded", "bg-neutral-100", "flex"],
12300
12410
  variants: {
12301
12411
  size: {
12302
12412
  extraSmall: "h-1",
@@ -12308,7 +12418,8 @@ const cvaSegmentedValueBar = cvaMerge(["flex-1", "overflow-hidden", "rounded", "
12308
12418
  size: "small",
12309
12419
  },
12310
12420
  });
12311
- const cvaSegmentedValueBarText = cvaMerge(["whitespace-nowrap", "tabular-nums", "shrink-0"], {
12421
+ const cvaSegmentedValueBarText = cva({
12422
+ base: ["whitespace-nowrap", "tabular-nums", "shrink-0"],
12312
12423
  variants: {
12313
12424
  size: {
12314
12425
  small: "leading-xs text-xs font-medium text-neutral-600",