@refinn/core-ui 0.1.15 → 0.1.16

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.cjs CHANGED
@@ -1049,70 +1049,107 @@ Checkbox.displayName = "Checkbox";
1049
1049
  // src/components/Chip/Chip.tsx
1050
1050
  var import_react10 = require("react");
1051
1051
  var import_jsx_runtime10 = require("react/jsx-runtime");
1052
- var sizeClasses5 = {
1053
- sm: "h-32 text-label-medium px-12 py-6",
1054
- md: "h-40 text-label-large px-16 py-10",
1055
- lg: "h-48 text-label-large px-24 py-14"
1052
+ var sizeBaseClasses = {
1053
+ sm: "min-h-32 min-w-56 gap-4 py-2 text-label-medium",
1054
+ md: "min-h-40 min-w-56 gap-8 py-4 text-label-large",
1055
+ lg: "min-h-48 min-w-96 gap-8 py-8 text-label-large"
1056
1056
  };
1057
- var marginImgClasses = {
1058
- sm: "-ml-10 -my-4 h-28 w-28",
1059
- md: "-ml-12 -my-6 h-32 w-32",
1060
- lg: "-ml-18 -my-8 h-32 w-32"
1057
+ var paddingXClasses = {
1058
+ sm: "px-12",
1059
+ md: "px-16",
1060
+ lg: "px-24"
1061
1061
  };
1062
- var isOutlinedClasses = {
1063
- true: "border border-chip-border-enabled bg-chip-background-inverse",
1064
- false: "border-0 bg-chip-background-enabled"
1065
- };
1066
- var isDarkClasses = {
1067
- true: "!bg-chip-background-black-active !text-chip-text-inverse",
1068
- false: "!bg-chip-background-active !text-chip-text-inverse"
1062
+ var bankLogoPaddingXClasses = {
1063
+ md: "pl-4 pr-16",
1064
+ lg: "pl-8 pr-16"
1069
1065
  };
1066
+ function toneClasses(selected, outline, variant) {
1067
+ if (selected) {
1068
+ return variant === "dark" ? "bg-chip-background-black-active text-chip-text-inverse hover:bg-chip-background-black-active-hover group-disabled:bg-chip-background-active-disabled group-disabled:text-chip-text-inverse-disabled" : "bg-chip-background-active text-chip-text-inverse hover:bg-chip-background-active-hover group-disabled:bg-chip-background-active-disabled group-disabled:text-chip-text-inverse-disabled";
1069
+ }
1070
+ if (outline) {
1071
+ return "bg-chip-background-inverse text-chip-text-enabled border border-chip-border-enabled hover:bg-chip-background-hover hover:border-chip-border-hover group-disabled:text-chip-text-disabled";
1072
+ }
1073
+ return "bg-chip-background-enabled text-chip-text-enabled hover:bg-chip-background-hover group-disabled:bg-chip-background-disabled group-disabled:text-chip-text-disabled";
1074
+ }
1070
1075
  var Chip = (0, import_react10.forwardRef)(
1071
1076
  (_a, ref) => {
1072
1077
  var _b = _a, {
1073
1078
  size = "md",
1074
- src,
1075
- alt = "",
1076
1079
  label,
1077
- icon,
1078
- isOutlined = false,
1079
- isDark = false,
1080
- isSelected = false,
1080
+ variant = "brand",
1081
+ outline = false,
1082
+ selected,
1083
+ defaultSelected = false,
1084
+ onSelectedChange,
1085
+ startIcon,
1086
+ endIcon,
1087
+ bankLogoSrc,
1088
+ bankLogoAlt = "",
1081
1089
  disabled = false,
1090
+ onClick,
1082
1091
  className = ""
1083
1092
  } = _b, rest = __objRest(_b, [
1084
1093
  "size",
1085
- "src",
1086
- "alt",
1087
1094
  "label",
1088
- "icon",
1089
- "isOutlined",
1090
- "isDark",
1091
- "isSelected",
1095
+ "variant",
1096
+ "outline",
1097
+ "selected",
1098
+ "defaultSelected",
1099
+ "onSelectedChange",
1100
+ "startIcon",
1101
+ "endIcon",
1102
+ "bankLogoSrc",
1103
+ "bankLogoAlt",
1092
1104
  "disabled",
1105
+ "onClick",
1093
1106
  "className"
1094
1107
  ]);
1095
- const sz = sizeClasses5[size];
1096
- const outlinedClass = isOutlinedClasses[String(isOutlined)];
1097
- const darkClass = isDarkClasses[String(isDark)];
1098
- const containerClasses = [
1099
- "w-fit rounded-full flex flex-row gap-8 items-center justify-center text-chip-text-enabled",
1108
+ const [uncontrolledSelected, setUncontrolledSelected] = (0, import_react10.useState)(defaultSelected);
1109
+ const isSelected = selected != null ? selected : uncontrolledSelected;
1110
+ const showBankLogo = Boolean(bankLogoSrc) && size !== "sm";
1111
+ const handleClick = (event) => {
1112
+ onClick == null ? void 0 : onClick(event);
1113
+ if (event.defaultPrevented) return;
1114
+ const next = !isSelected;
1115
+ if (selected === void 0) setUncontrolledSelected(next);
1116
+ onSelectedChange == null ? void 0 : onSelectedChange(next);
1117
+ };
1118
+ const wrapperClasses = [
1119
+ "group rounded-full border-2 border-transparent p-2 outline-none",
1120
+ "transition-colors",
1100
1121
  disabled ? "cursor-not-allowed" : "cursor-pointer",
1101
- outlinedClass,
1102
- sz,
1103
- className,
1104
- isSelected ? darkClass : ""
1122
+ "focus-visible:border-chip-border-focus",
1123
+ className
1105
1124
  ].filter(Boolean).join(" ");
1106
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
1107
- "div",
1125
+ const baseClasses = [
1126
+ "flex items-center justify-center rounded-full transition-colors",
1127
+ sizeBaseClasses[size],
1128
+ showBankLogo ? bankLogoPaddingXClasses[size] : paddingXClasses[size],
1129
+ toneClasses(isSelected, outline && !isSelected, variant)
1130
+ ].filter(Boolean).join(" ");
1131
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1132
+ "button",
1108
1133
  __spreadProps(__spreadValues({
1109
1134
  ref,
1110
- className: containerClasses
1135
+ type: "button",
1136
+ disabled,
1137
+ "aria-pressed": isSelected,
1138
+ onClick: handleClick,
1139
+ className: wrapperClasses
1111
1140
  }, rest), {
1112
- children: [
1113
- icon ? icon : src && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("img", { src, alt, className: `${marginImgClasses[size]} rounded-full` }),
1114
- label
1115
- ]
1141
+ children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("span", { className: baseClasses, children: [
1142
+ showBankLogo ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1143
+ "img",
1144
+ {
1145
+ src: bankLogoSrc,
1146
+ alt: bankLogoAlt,
1147
+ className: "size-32 shrink-0 rounded-full object-contain"
1148
+ }
1149
+ ) : startIcon,
1150
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "min-w-0 truncate", children: label }),
1151
+ !showBankLogo && endIcon
1152
+ ] })
1116
1153
  })
1117
1154
  );
1118
1155
  }
@@ -2507,25 +2544,43 @@ Radio.displayName = "Radio";
2507
2544
  // src/components/SegmentControl/SegmentControl.tsx
2508
2545
  var import_react20 = require("react");
2509
2546
  var import_jsx_runtime20 = require("react/jsx-runtime");
2547
+ var itemSizeClasses = {
2548
+ sm: "min-h-32 px-8 py-6 text-label-medium",
2549
+ md: "min-h-40 px-12 py-8 text-label-large",
2550
+ lg: "min-h-48 px-16 py-8 text-label-large"
2551
+ };
2510
2552
  var SegmentControl = (0, import_react20.forwardRef)(
2511
2553
  (_a, ref) => {
2512
- var _b = _a, { size = "md", items, selected, setSelected, className = "" } = _b, rest = __objRest(_b, ["size", "items", "selected", "setSelected", "className"]);
2554
+ var _b = _a, { size = "md", items, selected, setSelected, onChange, className = "" } = _b, rest = __objRest(_b, ["size", "items", "selected", "setSelected", "onChange", "className"]);
2513
2555
  return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2514
2556
  "div",
2515
2557
  __spreadProps(__spreadValues({
2516
2558
  ref,
2517
- className: `bg-background-tertiary rounded-full flex flex-row items-center justify-center p-4 gap-4 ${className}`
2559
+ className: `bg-background-tertiary rounded-full flex flex-row items-center p-4 gap-4 ${className}`
2518
2560
  }, rest), {
2519
- children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2520
- "div",
2521
- {
2522
- onClick: () => setSelected == null ? void 0 : setSelected(item.value),
2523
- className: `cursor-pointer rounded-full text-center grow
2524
- ${size === "sm" ? "px-8 py-6 text-label-medium" : size === "md" ? "px-12 py-10 text-label-large" : "px-16 py-14 text-label-large"} ${selected === item.value ? "bg-segmented-control-background-active shadow-base text-segmented-control-text-primary hover:bg-segmented-control-background-active-hover" : "bg-segmented-control-background-enabled text-segmented-control-text-primary hover:bg-segmented-control-background-hover"} `,
2525
- children: item.label
2526
- },
2527
- item.value
2528
- ))
2561
+ children: items.map((item) => {
2562
+ const isSelected = selected === item.value;
2563
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2564
+ "button",
2565
+ {
2566
+ type: "button",
2567
+ "aria-pressed": isSelected,
2568
+ onClick: () => {
2569
+ setSelected == null ? void 0 : setSelected(item.value);
2570
+ onChange == null ? void 0 : onChange(item.value);
2571
+ },
2572
+ className: "group flex-1 min-w-0 rounded-full border-2 border-transparent p-2 outline-none cursor-pointer transition-colors focus-visible:border-segmented-control-border-focus",
2573
+ children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2574
+ "span",
2575
+ {
2576
+ className: `flex w-full items-center justify-center rounded-full text-center transition-colors ${itemSizeClasses[size]} ${isSelected ? "bg-segmented-control-background-active text-segmented-control-text-inverse shadow-small group-focus-visible:bg-segmented-control-background-active-focus group-focus-visible:text-segmented-control-text-primary" : "text-segmented-control-text-primary hover:bg-segmented-control-background-hover"}`,
2577
+ children: item.label
2578
+ }
2579
+ )
2580
+ },
2581
+ item.value
2582
+ );
2583
+ })
2529
2584
  })
2530
2585
  );
2531
2586
  }
package/dist/index.d.mts CHANGED
@@ -92,18 +92,24 @@ interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "siz
92
92
  declare const Checkbox: react.ForwardRefExoticComponent<CheckboxProps & react.RefAttributes<HTMLInputElement>>;
93
93
 
94
94
  type ChipSize = "sm" | "md" | "lg";
95
- interface ChipProps extends HTMLAttributes<HTMLDivElement> {
95
+ type ChipVariant = "brand" | "dark";
96
+ interface ChipProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, "onChange"> {
96
97
  size?: ChipSize;
97
- src?: string;
98
- alt?: string;
99
98
  label: string;
100
- icon?: ReactNode;
101
- isOutlined?: boolean;
102
- isDark?: boolean;
103
- isSelected?: boolean;
104
- disabled?: boolean;
99
+ /** Only affects the selected appearance — unselected chips look the same for both variants. */
100
+ variant?: ChipVariant;
101
+ /** Ignored while selected — selection always renders as a solid chip. */
102
+ outline?: boolean;
103
+ selected?: boolean;
104
+ defaultSelected?: boolean;
105
+ onSelectedChange?: (selected: boolean) => void;
106
+ startIcon?: ReactNode;
107
+ endIcon?: ReactNode;
108
+ /** Renders a circular financial-institution logo in place of startIcon. Not supported at size "sm". */
109
+ bankLogoSrc?: string;
110
+ bankLogoAlt?: string;
105
111
  }
106
- declare const Chip: react.ForwardRefExoticComponent<ChipProps & react.RefAttributes<HTMLDivElement>>;
112
+ declare const Chip: react.ForwardRefExoticComponent<ChipProps & react.RefAttributes<HTMLButtonElement>>;
107
113
 
108
114
  type TextFieldSize = "md" | "lg";
109
115
  interface TextFieldProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "size" | "prefix"> {
@@ -270,7 +276,7 @@ interface RadioProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "size"
270
276
  declare const Radio: react.ForwardRefExoticComponent<RadioProps & react.RefAttributes<HTMLInputElement>>;
271
277
 
272
278
  type SegmentControlSize = "sm" | "md" | "lg";
273
- interface SegmentControlProps extends HTMLAttributes<HTMLDivElement> {
279
+ interface SegmentControlProps extends Omit<HTMLAttributes<HTMLDivElement>, "onChange"> {
274
280
  size?: SegmentControlSize;
275
281
  items: {
276
282
  label: string;
@@ -278,6 +284,7 @@ interface SegmentControlProps extends HTMLAttributes<HTMLDivElement> {
278
284
  }[];
279
285
  selected: string;
280
286
  setSelected?: (value: string) => void;
287
+ onChange?: (value: string) => void;
281
288
  }
282
289
  declare const SegmentControl: react.ForwardRefExoticComponent<SegmentControlProps & react.RefAttributes<HTMLDivElement>>;
283
290
 
package/dist/index.d.ts CHANGED
@@ -92,18 +92,24 @@ interface CheckboxProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "siz
92
92
  declare const Checkbox: react.ForwardRefExoticComponent<CheckboxProps & react.RefAttributes<HTMLInputElement>>;
93
93
 
94
94
  type ChipSize = "sm" | "md" | "lg";
95
- interface ChipProps extends HTMLAttributes<HTMLDivElement> {
95
+ type ChipVariant = "brand" | "dark";
96
+ interface ChipProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, "onChange"> {
96
97
  size?: ChipSize;
97
- src?: string;
98
- alt?: string;
99
98
  label: string;
100
- icon?: ReactNode;
101
- isOutlined?: boolean;
102
- isDark?: boolean;
103
- isSelected?: boolean;
104
- disabled?: boolean;
99
+ /** Only affects the selected appearance — unselected chips look the same for both variants. */
100
+ variant?: ChipVariant;
101
+ /** Ignored while selected — selection always renders as a solid chip. */
102
+ outline?: boolean;
103
+ selected?: boolean;
104
+ defaultSelected?: boolean;
105
+ onSelectedChange?: (selected: boolean) => void;
106
+ startIcon?: ReactNode;
107
+ endIcon?: ReactNode;
108
+ /** Renders a circular financial-institution logo in place of startIcon. Not supported at size "sm". */
109
+ bankLogoSrc?: string;
110
+ bankLogoAlt?: string;
105
111
  }
106
- declare const Chip: react.ForwardRefExoticComponent<ChipProps & react.RefAttributes<HTMLDivElement>>;
112
+ declare const Chip: react.ForwardRefExoticComponent<ChipProps & react.RefAttributes<HTMLButtonElement>>;
107
113
 
108
114
  type TextFieldSize = "md" | "lg";
109
115
  interface TextFieldProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "size" | "prefix"> {
@@ -270,7 +276,7 @@ interface RadioProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "size"
270
276
  declare const Radio: react.ForwardRefExoticComponent<RadioProps & react.RefAttributes<HTMLInputElement>>;
271
277
 
272
278
  type SegmentControlSize = "sm" | "md" | "lg";
273
- interface SegmentControlProps extends HTMLAttributes<HTMLDivElement> {
279
+ interface SegmentControlProps extends Omit<HTMLAttributes<HTMLDivElement>, "onChange"> {
274
280
  size?: SegmentControlSize;
275
281
  items: {
276
282
  label: string;
@@ -278,6 +284,7 @@ interface SegmentControlProps extends HTMLAttributes<HTMLDivElement> {
278
284
  }[];
279
285
  selected: string;
280
286
  setSelected?: (value: string) => void;
287
+ onChange?: (value: string) => void;
281
288
  }
282
289
  declare const SegmentControl: react.ForwardRefExoticComponent<SegmentControlProps & react.RefAttributes<HTMLDivElement>>;
283
290
 
package/dist/index.js CHANGED
@@ -1011,73 +1011,111 @@ Checkbox.displayName = "Checkbox";
1011
1011
 
1012
1012
  // src/components/Chip/Chip.tsx
1013
1013
  import {
1014
- forwardRef as forwardRef10
1014
+ forwardRef as forwardRef10,
1015
+ useState as useState3
1015
1016
  } from "react";
1016
1017
  import { jsx as jsx10, jsxs as jsxs9 } from "react/jsx-runtime";
1017
- var sizeClasses5 = {
1018
- sm: "h-32 text-label-medium px-12 py-6",
1019
- md: "h-40 text-label-large px-16 py-10",
1020
- lg: "h-48 text-label-large px-24 py-14"
1018
+ var sizeBaseClasses = {
1019
+ sm: "min-h-32 min-w-56 gap-4 py-2 text-label-medium",
1020
+ md: "min-h-40 min-w-56 gap-8 py-4 text-label-large",
1021
+ lg: "min-h-48 min-w-96 gap-8 py-8 text-label-large"
1021
1022
  };
1022
- var marginImgClasses = {
1023
- sm: "-ml-10 -my-4 h-28 w-28",
1024
- md: "-ml-12 -my-6 h-32 w-32",
1025
- lg: "-ml-18 -my-8 h-32 w-32"
1023
+ var paddingXClasses = {
1024
+ sm: "px-12",
1025
+ md: "px-16",
1026
+ lg: "px-24"
1026
1027
  };
1027
- var isOutlinedClasses = {
1028
- true: "border border-chip-border-enabled bg-chip-background-inverse",
1029
- false: "border-0 bg-chip-background-enabled"
1030
- };
1031
- var isDarkClasses = {
1032
- true: "!bg-chip-background-black-active !text-chip-text-inverse",
1033
- false: "!bg-chip-background-active !text-chip-text-inverse"
1028
+ var bankLogoPaddingXClasses = {
1029
+ md: "pl-4 pr-16",
1030
+ lg: "pl-8 pr-16"
1034
1031
  };
1032
+ function toneClasses(selected, outline, variant) {
1033
+ if (selected) {
1034
+ return variant === "dark" ? "bg-chip-background-black-active text-chip-text-inverse hover:bg-chip-background-black-active-hover group-disabled:bg-chip-background-active-disabled group-disabled:text-chip-text-inverse-disabled" : "bg-chip-background-active text-chip-text-inverse hover:bg-chip-background-active-hover group-disabled:bg-chip-background-active-disabled group-disabled:text-chip-text-inverse-disabled";
1035
+ }
1036
+ if (outline) {
1037
+ return "bg-chip-background-inverse text-chip-text-enabled border border-chip-border-enabled hover:bg-chip-background-hover hover:border-chip-border-hover group-disabled:text-chip-text-disabled";
1038
+ }
1039
+ return "bg-chip-background-enabled text-chip-text-enabled hover:bg-chip-background-hover group-disabled:bg-chip-background-disabled group-disabled:text-chip-text-disabled";
1040
+ }
1035
1041
  var Chip = forwardRef10(
1036
1042
  (_a, ref) => {
1037
1043
  var _b = _a, {
1038
1044
  size = "md",
1039
- src,
1040
- alt = "",
1041
1045
  label,
1042
- icon,
1043
- isOutlined = false,
1044
- isDark = false,
1045
- isSelected = false,
1046
+ variant = "brand",
1047
+ outline = false,
1048
+ selected,
1049
+ defaultSelected = false,
1050
+ onSelectedChange,
1051
+ startIcon,
1052
+ endIcon,
1053
+ bankLogoSrc,
1054
+ bankLogoAlt = "",
1046
1055
  disabled = false,
1056
+ onClick,
1047
1057
  className = ""
1048
1058
  } = _b, rest = __objRest(_b, [
1049
1059
  "size",
1050
- "src",
1051
- "alt",
1052
1060
  "label",
1053
- "icon",
1054
- "isOutlined",
1055
- "isDark",
1056
- "isSelected",
1061
+ "variant",
1062
+ "outline",
1063
+ "selected",
1064
+ "defaultSelected",
1065
+ "onSelectedChange",
1066
+ "startIcon",
1067
+ "endIcon",
1068
+ "bankLogoSrc",
1069
+ "bankLogoAlt",
1057
1070
  "disabled",
1071
+ "onClick",
1058
1072
  "className"
1059
1073
  ]);
1060
- const sz = sizeClasses5[size];
1061
- const outlinedClass = isOutlinedClasses[String(isOutlined)];
1062
- const darkClass = isDarkClasses[String(isDark)];
1063
- const containerClasses = [
1064
- "w-fit rounded-full flex flex-row gap-8 items-center justify-center text-chip-text-enabled",
1074
+ const [uncontrolledSelected, setUncontrolledSelected] = useState3(defaultSelected);
1075
+ const isSelected = selected != null ? selected : uncontrolledSelected;
1076
+ const showBankLogo = Boolean(bankLogoSrc) && size !== "sm";
1077
+ const handleClick = (event) => {
1078
+ onClick == null ? void 0 : onClick(event);
1079
+ if (event.defaultPrevented) return;
1080
+ const next = !isSelected;
1081
+ if (selected === void 0) setUncontrolledSelected(next);
1082
+ onSelectedChange == null ? void 0 : onSelectedChange(next);
1083
+ };
1084
+ const wrapperClasses = [
1085
+ "group rounded-full border-2 border-transparent p-2 outline-none",
1086
+ "transition-colors",
1065
1087
  disabled ? "cursor-not-allowed" : "cursor-pointer",
1066
- outlinedClass,
1067
- sz,
1068
- className,
1069
- isSelected ? darkClass : ""
1088
+ "focus-visible:border-chip-border-focus",
1089
+ className
1070
1090
  ].filter(Boolean).join(" ");
1071
- return /* @__PURE__ */ jsxs9(
1072
- "div",
1091
+ const baseClasses = [
1092
+ "flex items-center justify-center rounded-full transition-colors",
1093
+ sizeBaseClasses[size],
1094
+ showBankLogo ? bankLogoPaddingXClasses[size] : paddingXClasses[size],
1095
+ toneClasses(isSelected, outline && !isSelected, variant)
1096
+ ].filter(Boolean).join(" ");
1097
+ return /* @__PURE__ */ jsx10(
1098
+ "button",
1073
1099
  __spreadProps(__spreadValues({
1074
1100
  ref,
1075
- className: containerClasses
1101
+ type: "button",
1102
+ disabled,
1103
+ "aria-pressed": isSelected,
1104
+ onClick: handleClick,
1105
+ className: wrapperClasses
1076
1106
  }, rest), {
1077
- children: [
1078
- icon ? icon : src && /* @__PURE__ */ jsx10("img", { src, alt, className: `${marginImgClasses[size]} rounded-full` }),
1079
- label
1080
- ]
1107
+ children: /* @__PURE__ */ jsxs9("span", { className: baseClasses, children: [
1108
+ showBankLogo ? /* @__PURE__ */ jsx10(
1109
+ "img",
1110
+ {
1111
+ src: bankLogoSrc,
1112
+ alt: bankLogoAlt,
1113
+ className: "size-32 shrink-0 rounded-full object-contain"
1114
+ }
1115
+ ) : startIcon,
1116
+ /* @__PURE__ */ jsx10("span", { className: "min-w-0 truncate", children: label }),
1117
+ !showBankLogo && endIcon
1118
+ ] })
1081
1119
  })
1082
1120
  );
1083
1121
  }
@@ -2499,29 +2537,45 @@ var Radio = forwardRef19(
2499
2537
  Radio.displayName = "Radio";
2500
2538
 
2501
2539
  // src/components/SegmentControl/SegmentControl.tsx
2502
- import {
2503
- forwardRef as forwardRef20
2504
- } from "react";
2540
+ import { forwardRef as forwardRef20 } from "react";
2505
2541
  import { jsx as jsx20 } from "react/jsx-runtime";
2542
+ var itemSizeClasses = {
2543
+ sm: "min-h-32 px-8 py-6 text-label-medium",
2544
+ md: "min-h-40 px-12 py-8 text-label-large",
2545
+ lg: "min-h-48 px-16 py-8 text-label-large"
2546
+ };
2506
2547
  var SegmentControl = forwardRef20(
2507
2548
  (_a, ref) => {
2508
- var _b = _a, { size = "md", items, selected, setSelected, className = "" } = _b, rest = __objRest(_b, ["size", "items", "selected", "setSelected", "className"]);
2549
+ var _b = _a, { size = "md", items, selected, setSelected, onChange, className = "" } = _b, rest = __objRest(_b, ["size", "items", "selected", "setSelected", "onChange", "className"]);
2509
2550
  return /* @__PURE__ */ jsx20(
2510
2551
  "div",
2511
2552
  __spreadProps(__spreadValues({
2512
2553
  ref,
2513
- className: `bg-background-tertiary rounded-full flex flex-row items-center justify-center p-4 gap-4 ${className}`
2554
+ className: `bg-background-tertiary rounded-full flex flex-row items-center p-4 gap-4 ${className}`
2514
2555
  }, rest), {
2515
- children: items.map((item) => /* @__PURE__ */ jsx20(
2516
- "div",
2517
- {
2518
- onClick: () => setSelected == null ? void 0 : setSelected(item.value),
2519
- className: `cursor-pointer rounded-full text-center grow
2520
- ${size === "sm" ? "px-8 py-6 text-label-medium" : size === "md" ? "px-12 py-10 text-label-large" : "px-16 py-14 text-label-large"} ${selected === item.value ? "bg-segmented-control-background-active shadow-base text-segmented-control-text-primary hover:bg-segmented-control-background-active-hover" : "bg-segmented-control-background-enabled text-segmented-control-text-primary hover:bg-segmented-control-background-hover"} `,
2521
- children: item.label
2522
- },
2523
- item.value
2524
- ))
2556
+ children: items.map((item) => {
2557
+ const isSelected = selected === item.value;
2558
+ return /* @__PURE__ */ jsx20(
2559
+ "button",
2560
+ {
2561
+ type: "button",
2562
+ "aria-pressed": isSelected,
2563
+ onClick: () => {
2564
+ setSelected == null ? void 0 : setSelected(item.value);
2565
+ onChange == null ? void 0 : onChange(item.value);
2566
+ },
2567
+ className: "group flex-1 min-w-0 rounded-full border-2 border-transparent p-2 outline-none cursor-pointer transition-colors focus-visible:border-segmented-control-border-focus",
2568
+ children: /* @__PURE__ */ jsx20(
2569
+ "span",
2570
+ {
2571
+ className: `flex w-full items-center justify-center rounded-full text-center transition-colors ${itemSizeClasses[size]} ${isSelected ? "bg-segmented-control-background-active text-segmented-control-text-inverse shadow-small group-focus-visible:bg-segmented-control-background-active-focus group-focus-visible:text-segmented-control-text-primary" : "text-segmented-control-text-primary hover:bg-segmented-control-background-hover"}`,
2572
+ children: item.label
2573
+ }
2574
+ )
2575
+ },
2576
+ item.value
2577
+ );
2578
+ })
2525
2579
  })
2526
2580
  );
2527
2581
  }
@@ -2533,7 +2587,7 @@ import {
2533
2587
  forwardRef as forwardRef21,
2534
2588
  useCallback as useCallback2,
2535
2589
  useId as useId5,
2536
- useState as useState10
2590
+ useState as useState9
2537
2591
  } from "react";
2538
2592
  import { jsx as jsx21, jsxs as jsxs17 } from "react/jsx-runtime";
2539
2593
  var sizeConfig = {
@@ -2641,7 +2695,7 @@ var Slider = forwardRef21(
2641
2695
  const ariaLabel = ariaLabelProp != null ? ariaLabelProp : typeof label === "string" ? void 0 : "Slider";
2642
2696
  const ariaDescriptionId = description ? `${inputId}-description` : void 0;
2643
2697
  const isControlled = controlledValue !== void 0;
2644
- const [internalValue, setInternalValue] = useState10(defaultValue != null ? defaultValue : min);
2698
+ const [internalValue, setInternalValue] = useState9(defaultValue != null ? defaultValue : min);
2645
2699
  const currentValue = isControlled ? controlledValue : internalValue;
2646
2700
  const handleChange = useCallback2(
2647
2701
  (e) => {
@@ -2812,7 +2866,7 @@ Tab.displayName = "Tab";
2812
2866
 
2813
2867
  // src/components/TextArea/TextArea.tsx
2814
2868
  import {
2815
- useState as useState11,
2869
+ useState as useState10,
2816
2870
  forwardRef as forwardRef23
2817
2871
  } from "react";
2818
2872
  import { Fragment as Fragment5, jsx as jsx23, jsxs as jsxs18 } from "react/jsx-runtime";
@@ -2856,7 +2910,7 @@ var TextArea = forwardRef23(
2856
2910
  "className"
2857
2911
  ]);
2858
2912
  var _a2;
2859
- const [isFocused, setIsFocused] = useState11(false);
2913
+ const [isFocused, setIsFocused] = useState10(false);
2860
2914
  const isActive = isFocused && !!value;
2861
2915
  return /* @__PURE__ */ jsxs18("div", { className: "w-full flex flex-col gap-4 font-sans", children: [
2862
2916
  label || showCounter ? /* @__PURE__ */ jsxs18("div", { className: "w-full flex justify-between items-center gap-8", children: [
@@ -3134,7 +3188,7 @@ ToggleSwitch.displayName = "ToggleSwitch";
3134
3188
 
3135
3189
  // src/components/Tooltip/Tooltip.tsx
3136
3190
  import {
3137
- useState as useState12,
3191
+ useState as useState11,
3138
3192
  useEffect as useEffect5,
3139
3193
  useRef as useRef4,
3140
3194
  forwardRef as forwardRef26
@@ -3158,8 +3212,8 @@ var Tooltip = forwardRef26(
3158
3212
  "className"
3159
3213
  ]);
3160
3214
  const wrapperRef = useRef4(null);
3161
- const [isVisible, setIsVisible] = useState12(false);
3162
- const [isHovered, setIsHovered] = useState12(false);
3215
+ const [isVisible, setIsVisible] = useState11(false);
3216
+ const [isHovered, setIsHovered] = useState11(false);
3163
3217
  useEffect5(() => {
3164
3218
  const handleClickOutside = (event) => {
3165
3219
  if (wrapperRef.current && !wrapperRef.current.contains(event.target)) {
package/dist/theme.css CHANGED
@@ -401,8 +401,8 @@
401
401
  --color-button-background-primary-hover: var(--color-blue-700);
402
402
  --color-button-background-primary-active: var(--color-blue-800);
403
403
  --color-button-background-primary-focus: var(--color-blue-600);
404
- --color-button-background-primary-disabled: var(--color-blue-600 / 40%);
405
- --color-button-background-primary-pending: var(--color-blue-600 / 40%);
404
+ --color-button-background-primary-disabled: color-mix(in oklab, var(--color-blue-600) 40%, transparent);
405
+ --color-button-background-primary-pending: color-mix(in oklab, var(--color-blue-600) 40%, transparent);
406
406
  --color-button-background-secondary-enabled: var(--color-gray-100);
407
407
  --color-button-background-secondary-hover: var(--color-gray-200);
408
408
  --color-button-background-secondary-active: var(--color-gray-300);
@@ -433,7 +433,7 @@
433
433
  --color-button-text-brand: var(--color-blue-600);
434
434
  --color-button-text-inverse: var(--color-white-100);
435
435
  --color-button-text-inverse-disabled: var(--color-white-40);
436
- --color-button-text-brand-pending: var(--color-blue-600 / 40%);
436
+ --color-button-text-brand-pending: color-mix(in oklab, var(--color-blue-600) 40%, transparent);
437
437
  --color-button-border-focus: var(--color-blue-500);
438
438
  --color-button-border-inverse: var(--color-white-100);
439
439
  --color-accordion-background-enabled: var(--color-white-100);
@@ -472,7 +472,7 @@
472
472
  --color-icon-button-icon-disabled: var(--color-gray-400);
473
473
  --color-icon-button-icon-inverse-disabled: var(--color-white-40);
474
474
  --color-icon-button-icon-brand: var(--color-blue-600);
475
- --color-icon-button-icon-brand-disabled: var(--color-blue-600 / 40%);
475
+ --color-icon-button-icon-brand-disabled: color-mix(in oklab, var(--color-blue-600) 40%, transparent);
476
476
  --color-icon-button-icon-danger: var(--color-red-500);
477
477
  --color-icon-button-icon-inverse-danger: var(--color-red-400);
478
478
  --color-icon-button-border-focus: var(--color-blue-500);
@@ -482,7 +482,7 @@
482
482
  --color-toggle-switch-background-focus: var(--color-gray-200);
483
483
  --color-toggle-switch-background-disabled: var(--color-gray-100);
484
484
  --color-toggle-switch-background-active-hover: var(--color-green-700);
485
- --color-toggle-switch-background-active-disabled: var(--color-green-600 / 40%);
485
+ --color-toggle-switch-background-active-disabled: color-mix(in oklab, var(--color-green-600) 40%, transparent);
486
486
  --color-toggle-switch-background-toggle: var(--color-white-100);
487
487
  --color-toggle-switch-background-active-focus: var(--color-green-600);
488
488
  --color-toggle-switch-text-primary: var(--color-gray-900);
@@ -686,7 +686,7 @@
686
686
  --color-chip-background-inverse: var(--color-white-100);
687
687
  --color-chip-background-black-active: var(--color-blue-950);
688
688
  --color-chip-background-black-active-hover: var(--color-blue-900);
689
- --color-chip-background-active-disabled: var(--color-blue-600 / 40%);
689
+ --color-chip-background-active-disabled: color-mix(in oklab, var(--color-blue-600) 40%, transparent);
690
690
  --color-chip-text-disabled: var(--color-gray-400);
691
691
  --color-chip-text-inverse-disabled: var(--color-white-65);
692
692
  --color-chip-text-inverse: var(--color-white-100);
@@ -725,7 +725,7 @@
725
725
  * ======================================== */
726
726
  --color-background-primary: var(--color-white-100);
727
727
  --color-background-tertiary: var(--color-gray-100);
728
- --color-background-overlay: var(--color-gray-900 / 50%);
728
+ --color-background-overlay: color-mix(in oklab, var(--color-gray-900) 50%, transparent);
729
729
  --color-background-disabled: var(--color-gray-100);
730
730
  --color-background-secondary: var(--color-gray-50);
731
731
  --color-background-inverse: var(--color-gray-900);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@refinn/core-ui",
3
- "version": "0.1.15",
3
+ "version": "0.1.16",
4
4
  "description": "Refinn Design System — UI components + Tailwind v4 theme preset",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.js",