@cytario/design 9.5.0 → 9.5.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.
package/dist/index.d.ts CHANGED
@@ -358,7 +358,7 @@ interface RadioButtonProps extends Omit<RadioProps$1, "children" | "className">
358
358
  children: React__default.ReactNode;
359
359
  className?: string;
360
360
  }
361
- declare function RadioGroup({ children, className, ...props }: RadioGroupProps): react_jsx_runtime.JSX.Element;
361
+ declare function RadioGroup({ children, className, orientation, ...props }: RadioGroupProps): react_jsx_runtime.JSX.Element;
362
362
  declare function Radio({ children, className, ...props }: RadioProps): react_jsx_runtime.JSX.Element;
363
363
  declare function RadioButton({ children, className, ...props }: RadioButtonProps): react_jsx_runtime.JSX.Element;
364
364
 
package/dist/index.js CHANGED
@@ -1840,17 +1840,24 @@ import {
1840
1840
  RadioGroup as AriaRadioGroup,
1841
1841
  Radio as AriaRadio
1842
1842
  } from "react-aria-components";
1843
+ import { twMerge as twMerge13 } from "tailwind-merge";
1843
1844
  import { Fragment as Fragment5, jsx as jsx24, jsxs as jsxs15 } from "react/jsx-runtime";
1844
- function RadioGroup({ children, className, ...props }) {
1845
+ function RadioGroup({
1846
+ children,
1847
+ className,
1848
+ orientation = "vertical",
1849
+ ...props
1850
+ }) {
1845
1851
  return /* @__PURE__ */ jsx24(
1846
1852
  AriaRadioGroup,
1847
1853
  {
1848
1854
  ...props,
1849
- className: [
1850
- "flex flex-col gap-2",
1851
- "disabled:opacity-50",
1855
+ orientation,
1856
+ className: twMerge13(
1857
+ "flex gap-2 disabled:opacity-50",
1858
+ orientation === "horizontal" ? "flex-row" : "flex-col",
1852
1859
  className
1853
- ].filter(Boolean).join(" "),
1860
+ ),
1854
1861
  children
1855
1862
  }
1856
1863
  );
@@ -2033,7 +2040,7 @@ function Breadcrumbs({ items, className }) {
2033
2040
  import {
2034
2041
  ToggleButton as AriaToggleButton2
2035
2042
  } from "react-aria-components";
2036
- import { twMerge as twMerge13 } from "tailwind-merge";
2043
+ import { twMerge as twMerge14 } from "tailwind-merge";
2037
2044
  import { jsx as jsx28 } from "react/jsx-runtime";
2038
2045
  var squareSizeStyles2 = {
2039
2046
  xs: "h-6 w-6 text-xs",
@@ -2083,7 +2090,7 @@ function ToggleButton({
2083
2090
  AriaToggleButton2,
2084
2091
  {
2085
2092
  ...props,
2086
- className: ({ isSelected }) => twMerge13(
2093
+ className: ({ isSelected }) => twMerge14(
2087
2094
  "inline-flex items-center justify-center gap-2 cursor-pointer",
2088
2095
  isSquare ? "rounded-none" : "rounded-md",
2089
2096
  "font-medium",
@@ -2106,7 +2113,7 @@ import {
2106
2113
  MenuItem as AriaMenuItem,
2107
2114
  Popover as Popover2
2108
2115
  } from "react-aria-components";
2109
- import { twMerge as twMerge14 } from "tailwind-merge";
2116
+ import { twMerge as twMerge15 } from "tailwind-merge";
2110
2117
 
2111
2118
  // src/components/Menu/menuStyles.ts
2112
2119
  var popoverStyles = `
@@ -2133,7 +2140,7 @@ function Menu2({
2133
2140
  const selectionProps = selectionMode && selectionMode !== "none" ? { selectionMode, selectedKeys, defaultSelectedKeys, onSelectionChange } : {};
2134
2141
  return /* @__PURE__ */ jsxs18(MenuTrigger, { children: [
2135
2142
  children,
2136
- /* @__PURE__ */ jsx29(Popover2, { className: twMerge14(popoverStyles, className), children: items ? /* @__PURE__ */ jsx29(
2143
+ /* @__PURE__ */ jsx29(Popover2, { className: twMerge15(popoverStyles, className), children: items ? /* @__PURE__ */ jsx29(
2137
2144
  AriaMenu,
2138
2145
  {
2139
2146
  items,
@@ -2192,7 +2199,7 @@ import {
2192
2199
  Popover as Popover3,
2193
2200
  Pressable
2194
2201
  } from "react-aria-components";
2195
- import { twMerge as twMerge15 } from "tailwind-merge";
2202
+ import { twMerge as twMerge16 } from "tailwind-merge";
2196
2203
  import { jsx as jsx30, jsxs as jsxs19 } from "react/jsx-runtime";
2197
2204
  function useContextMenu({
2198
2205
  content,
@@ -2258,7 +2265,7 @@ function useContextMenu({
2258
2265
  isNonModal: true,
2259
2266
  placement: "bottom start",
2260
2267
  ref: popoverRef,
2261
- className: twMerge15(popoverStyles, className),
2268
+ className: twMerge16(popoverStyles, className),
2262
2269
  children: /* @__PURE__ */ jsx30(
2263
2270
  AriaMenu2,
2264
2271
  {
@@ -2421,7 +2428,7 @@ import {
2421
2428
  Popover as AriaPopover,
2422
2429
  Button as AriaButton3
2423
2430
  } from "react-aria-components";
2424
- import { twMerge as twMerge16 } from "tailwind-merge";
2431
+ import { twMerge as twMerge17 } from "tailwind-merge";
2425
2432
  import { jsx as jsx36 } from "react/jsx-runtime";
2426
2433
  function Popover4({ children, isOpen, onOpenChange }) {
2427
2434
  return /* @__PURE__ */ jsx36(DialogTrigger, { isOpen, onOpenChange, children });
@@ -2431,7 +2438,7 @@ function PopoverTrigger({ children, className }) {
2431
2438
  inline-flex items-center bg-transparent border-none p-0 outline-none cursor-pointer
2432
2439
  focus-visible:ring-2 focus-visible:ring-ring focus-visible:rounded-sm
2433
2440
  `;
2434
- return /* @__PURE__ */ jsx36(AriaButton3, { className: twMerge16(cx, className), children });
2441
+ return /* @__PURE__ */ jsx36(AriaButton3, { className: twMerge17(cx, className), children });
2435
2442
  }
2436
2443
  function PopoverContent({
2437
2444
  placement = "bottom",
@@ -2458,7 +2465,7 @@ function PopoverContent({
2458
2465
  ...rest,
2459
2466
  placement,
2460
2467
  offset: offsetPx,
2461
- className: twMerge16(cx, className),
2468
+ className: twMerge17(cx, className),
2462
2469
  children
2463
2470
  }
2464
2471
  );
@@ -2466,7 +2473,7 @@ function PopoverContent({
2466
2473
 
2467
2474
  // src/components/Tabs/Tabs.tsx
2468
2475
  import { createContext as createContext2, useContext as useContext2 } from "react";
2469
- import { twMerge as twMerge17 } from "tailwind-merge";
2476
+ import { twMerge as twMerge18 } from "tailwind-merge";
2470
2477
  import {
2471
2478
  Tabs as AriaTabs,
2472
2479
  TabList as AriaTabList,
@@ -2496,7 +2503,7 @@ function Tabs({
2496
2503
  {
2497
2504
  ...props,
2498
2505
  orientation,
2499
- className: twMerge17(
2506
+ className: twMerge18(
2500
2507
  orientation === "vertical" ? "flex" : "",
2501
2508
  className
2502
2509
  ),
@@ -2515,7 +2522,7 @@ function TabList({
2515
2522
  AriaTabList,
2516
2523
  {
2517
2524
  ...props,
2518
- className: ({ orientation }) => twMerge17(
2525
+ className: ({ orientation }) => twMerge18(
2519
2526
  baseStyles,
2520
2527
  orientation === "vertical" ? verticalStyles : "",
2521
2528
  className
@@ -2531,14 +2538,14 @@ function Tab({ className, ...props }) {
2531
2538
  ...props,
2532
2539
  className: ({ isSelected, isDisabled, isHovered, isPressed }) => {
2533
2540
  if (variant === "unstyled") {
2534
- return twMerge17(
2541
+ return twMerge18(
2535
2542
  "cursor-pointer outline-none",
2536
2543
  "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
2537
2544
  isDisabled ? "opacity-50 pointer-events-none" : "",
2538
2545
  className
2539
2546
  );
2540
2547
  }
2541
- return twMerge17(
2548
+ return twMerge18(
2542
2549
  // Base
2543
2550
  "cursor-pointer outline-none transition-colors",
2544
2551
  "font-medium",
@@ -2586,7 +2593,7 @@ function TabPanel({ className, ...props }) {
2586
2593
  AriaTabPanel,
2587
2594
  {
2588
2595
  ...props,
2589
- className: twMerge17(
2596
+ className: twMerge18(
2590
2597
  variant === "unstyled" ? "outline-none" : "mt-4 outline-none",
2591
2598
  className
2592
2599
  )
@@ -2604,7 +2611,7 @@ import {
2604
2611
 
2605
2612
  // src/components/SegmentedControl/SegmentedControl.tsx
2606
2613
  import { createContext as createContext3, useContext as useContext3 } from "react";
2607
- import { twMerge as twMerge18 } from "tailwind-merge";
2614
+ import { twMerge as twMerge19 } from "tailwind-merge";
2608
2615
  import {
2609
2616
  ToggleButtonGroup as AriaToggleButtonGroup,
2610
2617
  ToggleButton as AriaToggleButton3
@@ -2637,7 +2644,7 @@ function SegmentedControl({
2637
2644
  selectedKeys: isNoneMode ? /* @__PURE__ */ new Set() : selectedKeys,
2638
2645
  defaultSelectedKeys: isNoneMode ? void 0 : defaultSelectedKeys,
2639
2646
  onSelectionChange: isNoneMode ? void 0 : onSelectionChange,
2640
- className: twMerge18(
2647
+ className: twMerge19(
2641
2648
  "inline-flex items-center rounded-lg border border-border bg-muted p-0.5 gap-0.5",
2642
2649
  className
2643
2650
  ),
@@ -2654,7 +2661,7 @@ function SegmentedControlItem({
2654
2661
  AriaToggleButton3,
2655
2662
  {
2656
2663
  ...props,
2657
- className: ({ isSelected, isHovered, isPressed, isDisabled }) => twMerge18(
2664
+ className: ({ isSelected, isHovered, isPressed, isDisabled }) => twMerge19(
2658
2665
  // Base layout
2659
2666
  "inline-flex items-center justify-center",
2660
2667
  "rounded-md",
@@ -2675,13 +2682,13 @@ function SegmentedControlItem({
2675
2682
  }
2676
2683
 
2677
2684
  // src/components/Badge/Badge.tsx
2678
- import { twMerge as twMerge20 } from "tailwind-merge";
2685
+ import { twMerge as twMerge21 } from "tailwind-merge";
2679
2686
 
2680
2687
  // src/components/MetricText/MetricText.tsx
2681
- import { twMerge as twMerge19 } from "tailwind-merge";
2688
+ import { twMerge as twMerge20 } from "tailwind-merge";
2682
2689
  import { jsx as jsx39 } from "react/jsx-runtime";
2683
2690
  function MetricText({ className, ...rest }) {
2684
- const cx = twMerge19(
2691
+ const cx = twMerge20(
2685
2692
  "text-xs font-medium leading-none tracking-wider tabular-nums",
2686
2693
  className
2687
2694
  );
@@ -2715,7 +2722,7 @@ function Badge({
2715
2722
  return /* @__PURE__ */ jsxs23(
2716
2723
  MetricText,
2717
2724
  {
2718
- className: twMerge20(
2725
+ className: twMerge21(
2719
2726
  "inline-flex items-center gap-1 rounded-full border",
2720
2727
  colorStyles[color],
2721
2728
  sizeStyles6[size],
@@ -2731,10 +2738,10 @@ function Badge({
2731
2738
  }
2732
2739
 
2733
2740
  // src/components/Card/Card.tsx
2734
- import { twMerge as twMerge21 } from "tailwind-merge";
2741
+ import { twMerge as twMerge22 } from "tailwind-merge";
2735
2742
  import { jsx as jsx41, jsxs as jsxs24 } from "react/jsx-runtime";
2736
2743
  function Card({ children, header, footer, className }) {
2737
- const cx = twMerge21(
2744
+ const cx = twMerge22(
2738
2745
  `
2739
2746
  bg-card p-8
2740
2747
  border border-border
@@ -2752,7 +2759,7 @@ function Card({ children, header, footer, className }) {
2752
2759
 
2753
2760
  // src/components/DeltaIndicator/DeltaIndicator.tsx
2754
2761
  import { ArrowUp as ArrowUp2, ArrowDown as ArrowDown2, Minus as Minus2 } from "lucide-react";
2755
- import { twMerge as twMerge22 } from "tailwind-merge";
2762
+ import { twMerge as twMerge23 } from "tailwind-merge";
2756
2763
  import { jsx as jsx42, jsxs as jsxs25 } from "react/jsx-runtime";
2757
2764
  function getDirection(current, previous) {
2758
2765
  const diff = current - previous;
@@ -2809,7 +2816,7 @@ function DeltaIndicator({
2809
2816
  return /* @__PURE__ */ jsxs25(
2810
2817
  "span",
2811
2818
  {
2812
- className: twMerge22(
2819
+ className: twMerge23(
2813
2820
  "inline-flex items-center gap-1 font-medium",
2814
2821
  "text-muted-foreground",
2815
2822
  className
@@ -2848,7 +2855,7 @@ function DeltaIndicator({
2848
2855
  return /* @__PURE__ */ jsxs25(
2849
2856
  "span",
2850
2857
  {
2851
- className: twMerge22(
2858
+ className: twMerge23(
2852
2859
  "inline-flex items-center gap-1 font-medium",
2853
2860
  colorStyles2,
2854
2861
  isPill && [
@@ -2868,7 +2875,7 @@ function DeltaIndicator({
2868
2875
  }
2869
2876
 
2870
2877
  // src/components/ProgressBar/ProgressBar.tsx
2871
- import { twMerge as twMerge23 } from "tailwind-merge";
2878
+ import { twMerge as twMerge24 } from "tailwind-merge";
2872
2879
  import { jsx as jsx43, jsxs as jsxs26 } from "react/jsx-runtime";
2873
2880
  var fillStyles = {
2874
2881
  brand: "bg-progress-fill",
@@ -2892,7 +2899,7 @@ function ProgressBar({
2892
2899
  className
2893
2900
  }) {
2894
2901
  const clampedValue = Math.min(100, Math.max(0, value));
2895
- return /* @__PURE__ */ jsxs26("div", { className: twMerge23("w-full", className), children: [
2902
+ return /* @__PURE__ */ jsxs26("div", { className: twMerge24("w-full", className), children: [
2896
2903
  (label || description || showValue) && /* @__PURE__ */ jsxs26("div", { className: "flex items-center justify-between mb-2", children: [
2897
2904
  /* @__PURE__ */ jsx43("span", { className: "text-sm font-medium text-foreground", children: label }),
2898
2905
  /* @__PURE__ */ jsx43("span", { className: "text-sm text-muted-foreground", children: description ?? (showValue ? `${clampedValue}%` : null) })
@@ -2905,14 +2912,14 @@ function ProgressBar({
2905
2912
  "aria-valuemin": 0,
2906
2913
  "aria-valuemax": 100,
2907
2914
  "aria-label": label ?? "Progress",
2908
- className: twMerge23(
2915
+ className: twMerge24(
2909
2916
  "w-full rounded-full bg-progress-track",
2910
2917
  sizeStyles7[size]
2911
2918
  ),
2912
2919
  children: /* @__PURE__ */ jsx43(
2913
2920
  "div",
2914
2921
  {
2915
- className: twMerge23(
2922
+ className: twMerge24(
2916
2923
  "h-full rounded-full transition-all duration-300",
2917
2924
  fillStyles[variant]
2918
2925
  ),
@@ -2932,7 +2939,7 @@ import {
2932
2939
  AlertCircle as AlertCircle2,
2933
2940
  CheckCircle2 as CheckCircle22
2934
2941
  } from "lucide-react";
2935
- import { twMerge as twMerge24 } from "tailwind-merge";
2942
+ import { twMerge as twMerge25 } from "tailwind-merge";
2936
2943
  import { jsx as jsx44, jsxs as jsxs27 } from "react/jsx-runtime";
2937
2944
  var variantConfig2 = {
2938
2945
  info: {
@@ -2981,7 +2988,7 @@ function Banner({
2981
2988
  "div",
2982
2989
  {
2983
2990
  role: config.role,
2984
- className: twMerge24(
2991
+ className: twMerge25(
2985
2992
  "flex items-start gap-3 rounded-lg border px-4 py-3",
2986
2993
  "text-sm",
2987
2994
  config.containerClass,
@@ -2993,7 +3000,7 @@ function Banner({
2993
3000
  {
2994
3001
  icon: resolvedIcon,
2995
3002
  size: "md",
2996
- className: twMerge24("mt-0.5", config.iconClass)
3003
+ className: twMerge25("mt-0.5", config.iconClass)
2997
3004
  }
2998
3005
  ),
2999
3006
  /* @__PURE__ */ jsxs27("div", { className: "flex-1", children: [
@@ -3019,7 +3026,7 @@ function Banner({
3019
3026
  }
3020
3027
 
3021
3028
  // src/components/MetricCard/MetricCard.tsx
3022
- import { twMerge as twMerge25 } from "tailwind-merge";
3029
+ import { twMerge as twMerge26 } from "tailwind-merge";
3023
3030
  import { Fragment as Fragment8, jsx as jsx45, jsxs as jsxs28 } from "react/jsx-runtime";
3024
3031
  var sizeConfig = {
3025
3032
  sm: {
@@ -3042,18 +3049,18 @@ function MetricCard({
3042
3049
  className
3043
3050
  }) {
3044
3051
  const config = sizeConfig[size];
3045
- const containerClass = twMerge25(
3052
+ const containerClass = twMerge26(
3046
3053
  "bg-background border border-border rounded-lg shadow-sm",
3047
3054
  config.padding,
3048
3055
  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",
3049
3056
  className
3050
3057
  );
3051
3058
  const content = /* @__PURE__ */ jsxs28(Fragment8, { children: [
3052
- /* @__PURE__ */ jsx45("div", { className: twMerge25(config.labelClass, "text-muted-foreground"), children: label }),
3059
+ /* @__PURE__ */ jsx45("div", { className: twMerge26(config.labelClass, "text-muted-foreground"), children: label }),
3053
3060
  /* @__PURE__ */ jsx45(
3054
3061
  "div",
3055
3062
  {
3056
- className: twMerge25(
3063
+ className: twMerge26(
3057
3064
  config.valueClass,
3058
3065
  "font-semibold text-foreground mt-1 tabular-nums"
3059
3066
  ),
@@ -3070,7 +3077,7 @@ function MetricCard({
3070
3077
 
3071
3078
  // src/components/SectionHeader/SectionHeader.tsx
3072
3079
  import { forwardRef as forwardRef7 } from "react";
3073
- import { twMerge as twMerge26 } from "tailwind-merge";
3080
+ import { twMerge as twMerge27 } from "tailwind-merge";
3074
3081
  import { jsx as jsx46, jsxs as jsxs29 } from "react/jsx-runtime";
3075
3082
  var SectionHeader = forwardRef7(
3076
3083
  function SectionHeader2({ title, as = "h2", children, className, ...rest }, ref) {
@@ -3078,7 +3085,7 @@ var SectionHeader = forwardRef7(
3078
3085
  "div",
3079
3086
  {
3080
3087
  ref,
3081
- className: twMerge26(
3088
+ className: twMerge27(
3082
3089
  "flex flex-wrap items-center gap-3 pt-0 pb-4",
3083
3090
  className
3084
3091
  ),
@@ -3139,7 +3146,7 @@ function DescriptionListItem({
3139
3146
  DescriptionList.Item = DescriptionListItem;
3140
3147
 
3141
3148
  // src/components/PathPill/PathPill.tsx
3142
- import { twMerge as twMerge27 } from "tailwind-merge";
3149
+ import { twMerge as twMerge28 } from "tailwind-merge";
3143
3150
  import { jsx as jsx48 } from "react/jsx-runtime";
3144
3151
  var hashColors = [
3145
3152
  "purple",
@@ -3169,12 +3176,12 @@ function PathPill({
3169
3176
  return /* @__PURE__ */ jsx48(
3170
3177
  "div",
3171
3178
  {
3172
- className: twMerge27("relative flex", className),
3179
+ className: twMerge28("relative flex", className),
3173
3180
  "aria-label": `Path: ${fullPath}`,
3174
3181
  children: segments.map((segment, i) => {
3175
3182
  const isCollapsed = i < dotCount;
3176
3183
  const isLast = i === segments.length - 1;
3177
- const cx = twMerge27(!isLast && "pr-5 -mr-4", isCollapsed && "pr-3");
3184
+ const cx = twMerge28(!isLast && "pr-5 -mr-4", isCollapsed && "pr-3");
3178
3185
  const color = colorFn ? colorFn(segment, i) : pillColorFromName(segment);
3179
3186
  return /* @__PURE__ */ jsx48(
3180
3187
  Badge,