@luxfi/ui 7.4.10 → 7.4.12

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 (137) hide show
  1. package/dist/accordion.cjs +107 -166
  2. package/dist/accordion.d.cts +18 -51
  3. package/dist/accordion.d.ts +18 -51
  4. package/dist/accordion.js +109 -166
  5. package/dist/alert.cjs +68 -46
  6. package/dist/alert.js +69 -46
  7. package/dist/avatar.cjs +49 -46
  8. package/dist/avatar.js +52 -48
  9. package/dist/badge.cjs +82 -49
  10. package/dist/badge.js +83 -50
  11. package/dist/checkbox.cjs +42 -75
  12. package/dist/checkbox.js +43 -76
  13. package/dist/chrome.cjs +196 -386
  14. package/dist/chrome.js +198 -386
  15. package/dist/close-button.cjs +3 -7
  16. package/dist/close-button.js +3 -7
  17. package/dist/collapsible.cjs +35 -26
  18. package/dist/collapsible.d.cts +2 -1
  19. package/dist/collapsible.d.ts +2 -1
  20. package/dist/collapsible.js +34 -24
  21. package/dist/dialog.cjs +3 -7
  22. package/dist/dialog.d.cts +1 -1
  23. package/dist/dialog.d.ts +1 -1
  24. package/dist/dialog.js +3 -7
  25. package/dist/drawer.cjs +95 -122
  26. package/dist/drawer.d.cts +43 -10
  27. package/dist/drawer.d.ts +43 -10
  28. package/dist/drawer.js +97 -122
  29. package/dist/empty-state.cjs +13 -13
  30. package/dist/empty-state.js +13 -13
  31. package/dist/expiration-selector.cjs +58 -63
  32. package/dist/expiration-selector.js +58 -63
  33. package/dist/field.cjs +60 -109
  34. package/dist/field.d.cts +0 -1
  35. package/dist/field.d.ts +0 -1
  36. package/dist/field.js +61 -109
  37. package/dist/greeks-display.cjs +48 -39
  38. package/dist/greeks-display.js +48 -39
  39. package/dist/heading.cjs +10 -17
  40. package/dist/heading.d.cts +0 -2
  41. package/dist/heading.d.ts +0 -2
  42. package/dist/heading.js +10 -17
  43. package/dist/icon-button.cjs +82 -82
  44. package/dist/icon-button.d.cts +16 -12
  45. package/dist/icon-button.d.ts +16 -12
  46. package/dist/icon-button.js +82 -82
  47. package/dist/index.cjs +1812 -2105
  48. package/dist/index.d.cts +1 -5
  49. package/dist/index.d.ts +1 -5
  50. package/dist/index.js +1814 -2100
  51. package/dist/input-group.cjs +11 -12
  52. package/dist/input-group.js +11 -12
  53. package/dist/input.cjs +27 -27
  54. package/dist/input.d.cts +21 -1
  55. package/dist/input.d.ts +21 -1
  56. package/dist/input.js +25 -28
  57. package/dist/menu.cjs +160 -271
  58. package/dist/menu.d.cts +41 -57
  59. package/dist/menu.d.ts +41 -57
  60. package/dist/menu.js +161 -251
  61. package/dist/option-chain.cjs +89 -67
  62. package/dist/option-chain.js +89 -67
  63. package/dist/option-position.cjs +88 -85
  64. package/dist/option-position.js +88 -85
  65. package/dist/pnl-diagram.cjs +20 -20
  66. package/dist/pnl-diagram.js +20 -20
  67. package/dist/popover.cjs +4 -8
  68. package/dist/popover.js +4 -8
  69. package/dist/progress.cjs +15 -22
  70. package/dist/progress.d.cts +6 -6
  71. package/dist/progress.d.ts +6 -6
  72. package/dist/progress.js +15 -22
  73. package/dist/radio.cjs +35 -67
  74. package/dist/radio.d.cts +18 -18
  75. package/dist/radio.d.ts +18 -18
  76. package/dist/radio.js +36 -68
  77. package/dist/select.cjs +40 -39
  78. package/dist/select.d.cts +35 -4
  79. package/dist/select.d.ts +35 -4
  80. package/dist/select.js +40 -38
  81. package/dist/separator.cjs +8 -33
  82. package/dist/separator.js +8 -33
  83. package/dist/slider.cjs +33 -49
  84. package/dist/slider.js +34 -50
  85. package/dist/switch.cjs +48 -55
  86. package/dist/switch.js +49 -56
  87. package/dist/tabs.cjs +108 -197
  88. package/dist/tabs.d.cts +16 -60
  89. package/dist/tabs.d.ts +16 -60
  90. package/dist/tabs.js +109 -196
  91. package/dist/tag.cjs +112 -69
  92. package/dist/tag.js +113 -69
  93. package/dist/textarea.cjs +56 -27
  94. package/dist/textarea.js +57 -28
  95. package/dist/toaster.cjs +97 -79
  96. package/dist/toaster.d.cts +7 -8
  97. package/dist/toaster.d.ts +7 -8
  98. package/dist/toaster.js +78 -80
  99. package/dist/tooltip.cjs +28 -17
  100. package/dist/tooltip.js +30 -18
  101. package/package.json +2 -16
  102. package/src/accordion.tsx +173 -227
  103. package/src/alert.tsx +78 -45
  104. package/src/avatar.tsx +54 -37
  105. package/src/badge.tsx +65 -44
  106. package/src/checkbox.tsx +70 -89
  107. package/src/close-button.tsx +3 -8
  108. package/src/collapsible.tsx +55 -52
  109. package/src/drawer.tsx +123 -115
  110. package/src/empty-state.tsx +21 -17
  111. package/src/expiration-selector.tsx +84 -66
  112. package/src/field.tsx +68 -124
  113. package/src/greeks-display.tsx +59 -51
  114. package/src/heading.tsx +22 -26
  115. package/src/icon-button.tsx +134 -141
  116. package/src/ink.tsx +37 -0
  117. package/src/input-group.tsx +59 -36
  118. package/src/input.tsx +41 -32
  119. package/src/menu.tsx +224 -397
  120. package/src/option-chain.tsx +154 -104
  121. package/src/option-position.tsx +136 -114
  122. package/src/pin-input.tsx +37 -29
  123. package/src/pnl-diagram.tsx +36 -28
  124. package/src/popover.tsx +1 -1
  125. package/src/progress.tsx +17 -21
  126. package/src/radio.tsx +56 -75
  127. package/src/select.tsx +80 -59
  128. package/src/separator.tsx +13 -34
  129. package/src/slider.tsx +43 -44
  130. package/src/strategy-builder.tsx +245 -156
  131. package/src/switch.tsx +63 -64
  132. package/src/tabs.tsx +166 -296
  133. package/src/tag.tsx +89 -51
  134. package/src/textarea.tsx +19 -29
  135. package/src/toaster.tsx +118 -86
  136. package/src/tooltip.tsx +21 -13
  137. package/tokens.css +79 -0
@@ -1,12 +1,8 @@
1
1
  "use client";
2
+ import { View, XStack, Text } from '@hanzo/gui';
2
3
  import * as React from 'react';
3
- import { clsx } from 'clsx';
4
- import { twMerge } from 'tailwind-merge';
5
4
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
6
5
 
7
- function cn(...inputs) {
8
- return twMerge(clsx(inputs));
9
- }
10
6
  function calcLegPnl(leg, price, multiplier) {
11
7
  const premium = leg.premium ?? 0;
12
8
  let intrinsic;
@@ -138,19 +134,21 @@ var PnlDiagram = React.forwardRef(
138
134
  chartH
139
135
  );
140
136
  return /* @__PURE__ */ jsxs(
141
- "div",
137
+ View,
142
138
  {
143
139
  ref,
144
- className: cn("w-full", className),
140
+ unstyled: true,
141
+ width: "100%",
142
+ className,
145
143
  ...rest,
146
144
  children: [
147
- /* @__PURE__ */ jsx("div", { ref: containerRef, className: "w-full h-full min-h-[200px]", children: /* @__PURE__ */ jsxs(
145
+ /* @__PURE__ */ jsx(View, { unstyled: true, ref: containerRef, width: "100%", height: "100%", minHeight: 200, children: /* @__PURE__ */ jsxs(
148
146
  "svg",
149
147
  {
150
148
  width,
151
149
  height,
152
150
  viewBox: `0 0 ${width} ${height}`,
153
- className: "select-none",
151
+ style: { userSelect: "none" },
154
152
  onMouseMove: handleMouseMove,
155
153
  onMouseLeave: handleMouseLeave,
156
154
  children: [
@@ -389,16 +387,18 @@ var PnlDiagram = React.forwardRef(
389
387
  ]
390
388
  }
391
389
  ) }),
392
- /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center gap-4 px-2 pt-1", children: [
393
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
394
- /* @__PURE__ */ jsx("div", { className: "h-0.5 w-4 bg-zinc-200 rounded" }),
395
- /* @__PURE__ */ jsx("span", { className: "text-[10px] text-zinc-400", children: "Combined" })
390
+ /* @__PURE__ */ jsxs(XStack, { flexWrap: "wrap", alignItems: "center", gap: 16, paddingHorizontal: 8, paddingTop: 4, children: [
391
+ /* @__PURE__ */ jsxs(XStack, { alignItems: "center", gap: 6, children: [
392
+ /* @__PURE__ */ jsx(View, { height: 2, width: 16, borderRadius: 4, backgroundColor: "var(--color-gray-200)" }),
393
+ /* @__PURE__ */ jsx(Text, { fontSize: 10, color: "var(--color-text-secondary)", children: "Combined" })
396
394
  ] }),
397
- legs.map((leg, i) => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
395
+ legs.map((leg, i) => /* @__PURE__ */ jsxs(XStack, { alignItems: "center", gap: 6, children: [
398
396
  /* @__PURE__ */ jsx(
399
- "div",
397
+ View,
400
398
  {
401
- className: "h-0.5 w-4 rounded",
399
+ height: 2,
400
+ width: 16,
401
+ borderRadius: 4,
402
402
  style: {
403
403
  backgroundColor: LEG_COLORS[i % LEG_COLORS.length],
404
404
  opacity: 0.6,
@@ -406,7 +406,7 @@ var PnlDiagram = React.forwardRef(
406
406
  }
407
407
  }
408
408
  ),
409
- /* @__PURE__ */ jsxs("span", { className: "text-[10px] text-zinc-500", children: [
409
+ /* @__PURE__ */ jsxs(Text, { fontSize: 10, color: "var(--color-text-secondary)", children: [
410
410
  leg.action === "buy" ? "B" : "S",
411
411
  " ",
412
412
  leg.quantity,
@@ -416,9 +416,9 @@ var PnlDiagram = React.forwardRef(
416
416
  leg.type === "call" ? "C" : "P"
417
417
  ] })
418
418
  ] }, i)),
419
- breakevens.length > 0 && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
420
- /* @__PURE__ */ jsx("div", { className: "h-1.5 w-1.5 rounded-full", style: { background: BREAKEVEN_COLOR } }),
421
- /* @__PURE__ */ jsxs("span", { className: "text-[10px] text-zinc-500", children: [
419
+ breakevens.length > 0 && /* @__PURE__ */ jsxs(XStack, { alignItems: "center", gap: 6, children: [
420
+ /* @__PURE__ */ jsx(View, { width: 6, height: 6, borderRadius: 9999, style: { background: BREAKEVEN_COLOR } }),
421
+ /* @__PURE__ */ jsxs(Text, { fontSize: 10, color: "var(--color-text-secondary)", children: [
422
422
  "BE: ",
423
423
  breakevens.map((b) => b.toFixed(1)).join(", ")
424
424
  ] })
package/dist/popover.cjs CHANGED
@@ -61,23 +61,19 @@ var CloseButtonFrame = gui.styled(gui.View, {
61
61
  }
62
62
  }
63
63
  });
64
- var CLOSE_BUTTON_CLASSES = [
65
- "text-[var(--closeButton-fg,currentColor)]",
66
- "hover:text-[var(--hover-color,currentColor)]",
67
- "disabled:opacity-40"
68
- ].join(" ");
69
64
  var CloseButton = React2__namespace.forwardRef(function CloseButton2(props, ref) {
70
65
  const { variant: _variant, size: _size, className, children, ...rest } = props;
71
66
  return /* @__PURE__ */ jsxRuntime.jsx(
72
67
  CloseButtonFrame,
73
68
  {
74
69
  ref,
75
- className: [CLOSE_BUTTON_CLASSES, className].filter(Boolean).join(" "),
70
+ className,
76
71
  ...rest,
77
72
  children: children ?? /* @__PURE__ */ jsxRuntime.jsx(
78
73
  "svg",
79
74
  {
80
- className: "size-5",
75
+ width: 20,
76
+ height: 20,
81
77
  viewBox: "0 0 20 20",
82
78
  fill: "none",
83
79
  "aria-hidden": "true",
@@ -199,7 +195,7 @@ var PopoverContent = React2__namespace.forwardRef(function PopoverContent2(props
199
195
  className: cn(
200
196
  "z-50 rounded-lg border border-[var(--color-popover-border,var(--color-border-divider))]",
201
197
  "bg-[var(--color-popover-bg,var(--color-dialog-bg))]",
202
- "shadow-[var(--shadow-popover,var(--shadow-lg))]",
198
+ "shadow-[var(--shadow-popover)]",
203
199
  "outline-none",
204
200
  "data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
205
201
  "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95",
package/dist/popover.js CHANGED
@@ -39,23 +39,19 @@ var CloseButtonFrame = styled(View, {
39
39
  }
40
40
  }
41
41
  });
42
- var CLOSE_BUTTON_CLASSES = [
43
- "text-[var(--closeButton-fg,currentColor)]",
44
- "hover:text-[var(--hover-color,currentColor)]",
45
- "disabled:opacity-40"
46
- ].join(" ");
47
42
  var CloseButton = React2.forwardRef(function CloseButton2(props, ref) {
48
43
  const { variant: _variant, size: _size, className, children, ...rest } = props;
49
44
  return /* @__PURE__ */ jsx(
50
45
  CloseButtonFrame,
51
46
  {
52
47
  ref,
53
- className: [CLOSE_BUTTON_CLASSES, className].filter(Boolean).join(" "),
48
+ className,
54
49
  ...rest,
55
50
  children: children ?? /* @__PURE__ */ jsx(
56
51
  "svg",
57
52
  {
58
- className: "size-5",
53
+ width: 20,
54
+ height: 20,
59
55
  viewBox: "0 0 20 20",
60
56
  fill: "none",
61
57
  "aria-hidden": "true",
@@ -177,7 +173,7 @@ var PopoverContent = React2.forwardRef(function PopoverContent2(props, ref) {
177
173
  className: cn(
178
174
  "z-50 rounded-lg border border-[var(--color-popover-border,var(--color-border-divider))]",
179
175
  "bg-[var(--color-popover-bg,var(--color-dialog-bg))]",
180
- "shadow-[var(--shadow-popover,var(--shadow-lg))]",
176
+ "shadow-[var(--shadow-popover)]",
181
177
  "outline-none",
182
178
  "data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
183
179
  "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95",
package/dist/progress.cjs CHANGED
@@ -3,8 +3,6 @@
3
3
 
4
4
  var gui = require('@hanzo/gui');
5
5
  var React = require('react');
6
- var clsx = require('clsx');
7
- var tailwindMerge = require('tailwind-merge');
8
6
  var jsxRuntime = require('react/jsx-runtime');
9
7
 
10
8
  function _interopNamespace(e) {
@@ -28,14 +26,11 @@ function _interopNamespace(e) {
28
26
  var React__namespace = /*#__PURE__*/_interopNamespace(React);
29
27
 
30
28
  // src/progress.tsx
31
- function cn(...inputs) {
32
- return tailwindMerge.twMerge(clsx.clsx(inputs));
33
- }
34
- var SIZE_CLASSES = {
35
- sm: "h-1",
36
- md: "h-2",
37
- lg: "h-3",
38
- xl: "h-4"
29
+ var SIZE = {
30
+ sm: 4,
31
+ md: 8,
32
+ lg: 12,
33
+ xl: 16
39
34
  };
40
35
  function normalizeValue(value, min, max) {
41
36
  if (value == null) return 0;
@@ -51,7 +46,6 @@ var Progress = React__namespace.forwardRef(
51
46
  size = "md",
52
47
  color,
53
48
  trackProps,
54
- className,
55
49
  style,
56
50
  w,
57
51
  flex,
@@ -70,6 +64,7 @@ var Progress = React__namespace.forwardRef(
70
64
  }
71
65
  };
72
66
  const rootStyle = {
67
+ position: "relative",
73
68
  ...style,
74
69
  ...w !== void 0 && { width: w === "full" ? "100%" : w },
75
70
  ...flex !== void 0 && { flex }
@@ -78,7 +73,6 @@ var Progress = React__namespace.forwardRef(
78
73
  "div",
79
74
  {
80
75
  ref,
81
- className: cn("relative", className),
82
76
  style: rootStyle,
83
77
  ...rest,
84
78
  children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -87,22 +81,21 @@ var Progress = React__namespace.forwardRef(
87
81
  value: percent,
88
82
  max: 100,
89
83
  unstyled: true,
90
- className: cn(
91
- "w-full overflow-hidden rounded-full",
92
- "bg-[var(--color-progress-track)]",
93
- SIZE_CLASSES[size],
94
- trackProps?.className
95
- ),
84
+ className: trackProps?.className,
85
+ width: "100%",
86
+ overflow: "hidden",
87
+ borderRadius: 9999,
88
+ height: SIZE[size],
89
+ backgroundColor: "var(--color-progress-track)",
96
90
  style: trackStyle,
97
91
  children: /* @__PURE__ */ jsxRuntime.jsx(
98
92
  gui.Progress.Indicator,
99
93
  {
100
94
  unstyled: true,
101
95
  transition: "slow",
102
- className: cn(
103
- "h-full rounded-full",
104
- !color && "bg-[var(--color-progress-indicator)]"
105
- ),
96
+ height: "100%",
97
+ borderRadius: 9999,
98
+ backgroundColor: color ? void 0 : "var(--color-progress-indicator)",
106
99
  style: {
107
100
  ...color && { backgroundColor: `var(--color-${color.replace(".", "-")}, ${color})` }
108
101
  }
@@ -1,12 +1,12 @@
1
1
  import * as React from 'react';
2
2
 
3
- declare const SIZE_CLASSES: {
4
- readonly sm: "h-1";
5
- readonly md: "h-2";
6
- readonly lg: "h-3";
7
- readonly xl: "h-4";
3
+ declare const SIZE: {
4
+ readonly sm: 4;
5
+ readonly md: 8;
6
+ readonly lg: 12;
7
+ readonly xl: 16;
8
8
  };
9
- type Size = keyof typeof SIZE_CLASSES;
9
+ type Size = keyof typeof SIZE;
10
10
  interface TrackProps {
11
11
  readonly borderStartRadius?: number | string;
12
12
  readonly borderEndRadius?: number | string;
@@ -1,12 +1,12 @@
1
1
  import * as React from 'react';
2
2
 
3
- declare const SIZE_CLASSES: {
4
- readonly sm: "h-1";
5
- readonly md: "h-2";
6
- readonly lg: "h-3";
7
- readonly xl: "h-4";
3
+ declare const SIZE: {
4
+ readonly sm: 4;
5
+ readonly md: 8;
6
+ readonly lg: 12;
7
+ readonly xl: 16;
8
8
  };
9
- type Size = keyof typeof SIZE_CLASSES;
9
+ type Size = keyof typeof SIZE;
10
10
  interface TrackProps {
11
11
  readonly borderStartRadius?: number | string;
12
12
  readonly borderEndRadius?: number | string;
package/dist/progress.js CHANGED
@@ -1,19 +1,14 @@
1
1
  "use client";
2
2
  import { Progress as Progress$1 } from '@hanzo/gui';
3
3
  import * as React from 'react';
4
- import { clsx } from 'clsx';
5
- import { twMerge } from 'tailwind-merge';
6
4
  import { jsx } from 'react/jsx-runtime';
7
5
 
8
6
  // src/progress.tsx
9
- function cn(...inputs) {
10
- return twMerge(clsx(inputs));
11
- }
12
- var SIZE_CLASSES = {
13
- sm: "h-1",
14
- md: "h-2",
15
- lg: "h-3",
16
- xl: "h-4"
7
+ var SIZE = {
8
+ sm: 4,
9
+ md: 8,
10
+ lg: 12,
11
+ xl: 16
17
12
  };
18
13
  function normalizeValue(value, min, max) {
19
14
  if (value == null) return 0;
@@ -29,7 +24,6 @@ var Progress = React.forwardRef(
29
24
  size = "md",
30
25
  color,
31
26
  trackProps,
32
- className,
33
27
  style,
34
28
  w,
35
29
  flex,
@@ -48,6 +42,7 @@ var Progress = React.forwardRef(
48
42
  }
49
43
  };
50
44
  const rootStyle = {
45
+ position: "relative",
51
46
  ...style,
52
47
  ...w !== void 0 && { width: w === "full" ? "100%" : w },
53
48
  ...flex !== void 0 && { flex }
@@ -56,7 +51,6 @@ var Progress = React.forwardRef(
56
51
  "div",
57
52
  {
58
53
  ref,
59
- className: cn("relative", className),
60
54
  style: rootStyle,
61
55
  ...rest,
62
56
  children: /* @__PURE__ */ jsx(
@@ -65,22 +59,21 @@ var Progress = React.forwardRef(
65
59
  value: percent,
66
60
  max: 100,
67
61
  unstyled: true,
68
- className: cn(
69
- "w-full overflow-hidden rounded-full",
70
- "bg-[var(--color-progress-track)]",
71
- SIZE_CLASSES[size],
72
- trackProps?.className
73
- ),
62
+ className: trackProps?.className,
63
+ width: "100%",
64
+ overflow: "hidden",
65
+ borderRadius: 9999,
66
+ height: SIZE[size],
67
+ backgroundColor: "var(--color-progress-track)",
74
68
  style: trackStyle,
75
69
  children: /* @__PURE__ */ jsx(
76
70
  Progress$1.Indicator,
77
71
  {
78
72
  unstyled: true,
79
73
  transition: "slow",
80
- className: cn(
81
- "h-full rounded-full",
82
- !color && "bg-[var(--color-progress-indicator)]"
83
- ),
74
+ height: "100%",
75
+ borderRadius: 9999,
76
+ backgroundColor: color ? void 0 : "var(--color-progress-indicator)",
84
77
  style: {
85
78
  ...color && { backgroundColor: `var(--color-${color.replace(".", "-")}, ${color})` }
86
79
  }
package/dist/radio.cjs CHANGED
@@ -3,8 +3,6 @@
3
3
 
4
4
  var gui = require('@hanzo/gui');
5
5
  var React = require('react');
6
- var clsx = require('clsx');
7
- var tailwindMerge = require('tailwind-merge');
8
6
  var jsxRuntime = require('react/jsx-runtime');
9
7
 
10
8
  function _interopNamespace(e) {
@@ -28,35 +26,15 @@ function _interopNamespace(e) {
28
26
  var React__namespace = /*#__PURE__*/_interopNamespace(React);
29
27
 
30
28
  // src/radio.tsx
31
- function cn(...inputs) {
32
- return tailwindMerge.twMerge(clsx.clsx(inputs));
33
- }
34
- var SIZE_CLASSES = {
35
- xs: {
36
- root: "gap-1.5",
37
- control: "h-3 w-3",
38
- indicator: "h-1.5 w-1.5",
39
- label: "text-xs"
40
- },
41
- sm: {
42
- root: "gap-1.5",
43
- control: "h-3.5 w-3.5",
44
- indicator: "h-1.5 w-1.5",
45
- label: "text-xs"
46
- },
47
- md: {
48
- root: "gap-2",
49
- control: "h-4 w-4",
50
- indicator: "h-2 w-2",
51
- label: "text-sm"
52
- },
53
- lg: {
54
- root: "gap-2.5",
55
- control: "h-5 w-5",
56
- indicator: "h-2.5 w-2.5",
57
- label: "text-base"
58
- }
29
+ var SIZE = {
30
+ xs: { rootGap: 6, control: 12, indicator: 6, label: 12 },
31
+ sm: { rootGap: 6, control: 14, indicator: 6, label: 12 },
32
+ md: { rootGap: 8, control: 16, indicator: 8, label: 14 },
33
+ lg: { rootGap: 10, control: 20, indicator: 10, label: 16 }
59
34
  };
35
+ var INK = "var(--color-text-primary)";
36
+ var RESTING_BORDER = "var(--color-input-border)";
37
+ var OUTLINE = "var(--color-gray-500)";
60
38
  var RadioSizeContext = React__namespace.createContext("md");
61
39
  var RadioGroupBase = React__namespace.forwardRef(
62
40
  function RadioGroup(props, ref) {
@@ -73,7 +51,6 @@ var RadioGroupBase = React__namespace.forwardRef(
73
51
  value,
74
52
  onValueChange,
75
53
  size = "md",
76
- className,
77
54
  ...rest
78
55
  } = props;
79
56
  const handleValueChange = React__namespace.useCallback(
@@ -95,11 +72,9 @@ var RadioGroupBase = React__namespace.forwardRef(
95
72
  defaultValue,
96
73
  value: value ?? void 0,
97
74
  onValueChange: handleValueChange,
98
- className: cn(
99
- "flex",
100
- orientation === "vertical" ? "flex-col gap-3" : "flex-row gap-6",
101
- className
102
- ),
75
+ display: "flex",
76
+ flexDirection: orientation === "vertical" ? "column" : "row",
77
+ gap: orientation === "vertical" ? 12 : 24,
103
78
  ...rest,
104
79
  children
105
80
  }
@@ -111,19 +86,20 @@ var NOOP = () => {
111
86
  };
112
87
  var RadioBase = React__namespace.forwardRef(
113
88
  function Radio(props, ref) {
114
- const { children, inputProps, rootRef, value, disabled, className, ...rest } = props;
89
+ const { children, inputProps, rootRef, value, disabled, ...rest } = props;
115
90
  const size = React__namespace.useContext(RadioSizeContext);
116
- const sizeClasses = SIZE_CLASSES[size];
91
+ const s = SIZE[size];
117
92
  return /* @__PURE__ */ jsxRuntime.jsxs(
118
- "label",
93
+ gui.Label,
119
94
  {
120
95
  ref: rootRef,
121
- className: cn(
122
- "inline-flex items-center cursor-pointer select-none",
123
- sizeClasses.root,
124
- disabled && "opacity-50 cursor-not-allowed",
125
- className
126
- ),
96
+ unstyled: true,
97
+ flexDirection: "row",
98
+ alignItems: "center",
99
+ gap: s.rootGap,
100
+ cursor: disabled ? "not-allowed" : "pointer",
101
+ userSelect: "none",
102
+ opacity: disabled ? 0.5 : 1,
127
103
  "data-disabled": disabled || void 0,
128
104
  ...rest,
129
105
  children: [
@@ -133,32 +109,24 @@ var RadioBase = React__namespace.forwardRef(
133
109
  unstyled: true,
134
110
  value,
135
111
  disabled,
136
- className: cn(
137
- "inline-flex items-center justify-center shrink-0 rounded-full",
138
- "border-2 border-current/30",
139
- "data-[state=checked]:border-gray-800 dark:border-white",
140
- "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-500",
141
- "transition-colors duration-150",
142
- sizeClasses.control
143
- ),
144
- children: /* @__PURE__ */ jsxRuntime.jsx(
145
- gui.RadioGroup.Indicator,
146
- {
147
- unstyled: true,
148
- className: cn(
149
- "block rounded-full bg-gray-800 dark:bg-white",
150
- sizeClasses.indicator
151
- )
152
- }
153
- )
112
+ flexShrink: 0,
113
+ alignItems: "center",
114
+ justifyContent: "center",
115
+ width: s.control,
116
+ height: s.control,
117
+ borderRadius: 9999,
118
+ borderWidth: 2,
119
+ borderColor: RESTING_BORDER,
120
+ transition: "quicker",
121
+ focusStyle: { outlineWidth: 2, outlineStyle: "solid", outlineColor: OUTLINE, outlineOffset: 2 },
122
+ children: /* @__PURE__ */ jsxRuntime.jsx(gui.RadioGroup.Indicator, { unstyled: true, borderRadius: 9999, width: s.indicator, height: s.indicator, backgroundColor: INK })
154
123
  }
155
124
  ),
156
- /* @__PURE__ */ jsxRuntime.jsx(
125
+ /* @__PURE__ */ jsxRuntime.jsx(gui.VisuallyHidden, { children: /* @__PURE__ */ jsxRuntime.jsx(
157
126
  "input",
158
127
  {
159
128
  ref,
160
129
  type: "radio",
161
- className: "sr-only",
162
130
  value,
163
131
  disabled,
164
132
  tabIndex: -1,
@@ -166,8 +134,8 @@ var RadioBase = React__namespace.forwardRef(
166
134
  onChange: NOOP,
167
135
  ...inputProps
168
136
  }
169
- ),
170
- children != null && /* @__PURE__ */ jsxRuntime.jsx("span", { className: sizeClasses.label, children })
137
+ ) }),
138
+ children != null && /* @__PURE__ */ jsxRuntime.jsx(gui.Text, { fontSize: s.label, children })
171
139
  ]
172
140
  }
173
141
  );
package/dist/radio.d.cts CHANGED
@@ -1,32 +1,32 @@
1
1
  import * as React from 'react';
2
2
 
3
- declare const SIZE_CLASSES: {
3
+ declare const SIZE: {
4
4
  readonly xs: {
5
- readonly root: "gap-1.5";
6
- readonly control: "h-3 w-3";
7
- readonly indicator: "h-1.5 w-1.5";
8
- readonly label: "text-xs";
5
+ readonly rootGap: 6;
6
+ readonly control: 12;
7
+ readonly indicator: 6;
8
+ readonly label: 12;
9
9
  };
10
10
  readonly sm: {
11
- readonly root: "gap-1.5";
12
- readonly control: "h-3.5 w-3.5";
13
- readonly indicator: "h-1.5 w-1.5";
14
- readonly label: "text-xs";
11
+ readonly rootGap: 6;
12
+ readonly control: 14;
13
+ readonly indicator: 6;
14
+ readonly label: 12;
15
15
  };
16
16
  readonly md: {
17
- readonly root: "gap-2";
18
- readonly control: "h-4 w-4";
19
- readonly indicator: "h-2 w-2";
20
- readonly label: "text-sm";
17
+ readonly rootGap: 8;
18
+ readonly control: 16;
19
+ readonly indicator: 8;
20
+ readonly label: 14;
21
21
  };
22
22
  readonly lg: {
23
- readonly root: "gap-2.5";
24
- readonly control: "h-5 w-5";
25
- readonly indicator: "h-2.5 w-2.5";
26
- readonly label: "text-base";
23
+ readonly rootGap: 10;
24
+ readonly control: 20;
25
+ readonly indicator: 10;
26
+ readonly label: 16;
27
27
  };
28
28
  };
29
- type RadioSize = keyof typeof SIZE_CLASSES;
29
+ type RadioSize = keyof typeof SIZE;
30
30
  interface RadioGroupProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'defaultValue' | 'dir'> {
31
31
  name?: string;
32
32
  required?: boolean;
package/dist/radio.d.ts CHANGED
@@ -1,32 +1,32 @@
1
1
  import * as React from 'react';
2
2
 
3
- declare const SIZE_CLASSES: {
3
+ declare const SIZE: {
4
4
  readonly xs: {
5
- readonly root: "gap-1.5";
6
- readonly control: "h-3 w-3";
7
- readonly indicator: "h-1.5 w-1.5";
8
- readonly label: "text-xs";
5
+ readonly rootGap: 6;
6
+ readonly control: 12;
7
+ readonly indicator: 6;
8
+ readonly label: 12;
9
9
  };
10
10
  readonly sm: {
11
- readonly root: "gap-1.5";
12
- readonly control: "h-3.5 w-3.5";
13
- readonly indicator: "h-1.5 w-1.5";
14
- readonly label: "text-xs";
11
+ readonly rootGap: 6;
12
+ readonly control: 14;
13
+ readonly indicator: 6;
14
+ readonly label: 12;
15
15
  };
16
16
  readonly md: {
17
- readonly root: "gap-2";
18
- readonly control: "h-4 w-4";
19
- readonly indicator: "h-2 w-2";
20
- readonly label: "text-sm";
17
+ readonly rootGap: 8;
18
+ readonly control: 16;
19
+ readonly indicator: 8;
20
+ readonly label: 14;
21
21
  };
22
22
  readonly lg: {
23
- readonly root: "gap-2.5";
24
- readonly control: "h-5 w-5";
25
- readonly indicator: "h-2.5 w-2.5";
26
- readonly label: "text-base";
23
+ readonly rootGap: 10;
24
+ readonly control: 20;
25
+ readonly indicator: 10;
26
+ readonly label: 16;
27
27
  };
28
28
  };
29
- type RadioSize = keyof typeof SIZE_CLASSES;
29
+ type RadioSize = keyof typeof SIZE;
30
30
  interface RadioGroupProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'defaultValue' | 'dir'> {
31
31
  name?: string;
32
32
  required?: boolean;