@luxfi/ui 6.1.3 → 7.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (241) hide show
  1. package/dist/accordion.cjs +213 -0
  2. package/dist/accordion.d.cts +74 -0
  3. package/dist/accordion.d.ts +74 -0
  4. package/dist/accordion.js +186 -0
  5. package/dist/alert.cjs +430 -0
  6. package/dist/alert.d.cts +30 -0
  7. package/dist/alert.d.ts +30 -0
  8. package/dist/alert.js +408 -0
  9. package/dist/avatar.cjs +149 -0
  10. package/dist/avatar.d.cts +25 -0
  11. package/dist/avatar.d.ts +25 -0
  12. package/dist/avatar.js +125 -0
  13. package/dist/badge.cjs +452 -0
  14. package/dist/badge.d.cts +19 -0
  15. package/dist/badge.d.ts +19 -0
  16. package/dist/badge.js +431 -0
  17. package/dist/bank.cjs +272 -0
  18. package/dist/bank.d.cts +76 -0
  19. package/dist/bank.d.ts +76 -0
  20. package/dist/bank.js +258 -0
  21. package/dist/button.cjs +578 -0
  22. package/dist/button.d.cts +55 -0
  23. package/dist/button.d.ts +55 -0
  24. package/dist/button.js +553 -0
  25. package/dist/checkbox.cjs +265 -0
  26. package/dist/checkbox.d.cts +31 -0
  27. package/dist/checkbox.d.ts +31 -0
  28. package/dist/checkbox.js +241 -0
  29. package/dist/close-button.cjs +92 -0
  30. package/dist/close-button.d.cts +9 -0
  31. package/dist/close-button.d.ts +9 -0
  32. package/dist/close-button.js +70 -0
  33. package/dist/collapsible.cjs +555 -0
  34. package/dist/collapsible.d.cts +23 -0
  35. package/dist/collapsible.d.ts +23 -0
  36. package/dist/collapsible.js +532 -0
  37. package/dist/color-mode.cjs +96 -0
  38. package/dist/color-mode.d.cts +25 -0
  39. package/dist/color-mode.d.ts +25 -0
  40. package/dist/color-mode.js +72 -0
  41. package/dist/dialog.cjs +295 -0
  42. package/dist/dialog.d.cts +65 -0
  43. package/dist/dialog.d.ts +65 -0
  44. package/dist/dialog.js +263 -0
  45. package/dist/drawer.cjs +231 -0
  46. package/dist/drawer.d.cts +36 -0
  47. package/dist/drawer.d.ts +36 -0
  48. package/dist/drawer.js +199 -0
  49. package/dist/empty-state.cjs +93 -0
  50. package/dist/empty-state.d.cts +13 -0
  51. package/dist/empty-state.d.ts +13 -0
  52. package/dist/empty-state.js +71 -0
  53. package/dist/expiration-selector.cjs +138 -0
  54. package/dist/expiration-selector.d.cts +16 -0
  55. package/dist/expiration-selector.d.ts +16 -0
  56. package/dist/expiration-selector.js +116 -0
  57. package/dist/field.cjs +183 -0
  58. package/dist/field.d.cts +24 -0
  59. package/dist/field.d.ts +24 -0
  60. package/dist/field.js +160 -0
  61. package/dist/greeks-display.cjs +114 -0
  62. package/dist/greeks-display.d.cts +14 -0
  63. package/dist/greeks-display.d.ts +14 -0
  64. package/dist/greeks-display.js +92 -0
  65. package/dist/heading.cjs +41 -0
  66. package/dist/heading.d.cts +10 -0
  67. package/dist/heading.d.ts +10 -0
  68. package/dist/heading.js +35 -0
  69. package/dist/icon-button.cjs +367 -0
  70. package/dist/icon-button.d.cts +33 -0
  71. package/dist/icon-button.d.ts +33 -0
  72. package/dist/icon-button.js +345 -0
  73. package/dist/image.cjs +425 -0
  74. package/dist/image.d.cts +57 -0
  75. package/dist/image.d.ts +57 -0
  76. package/dist/image.js +404 -0
  77. package/dist/index.cjs +7220 -0
  78. package/dist/index.d.cts +55 -0
  79. package/dist/index.d.ts +55 -0
  80. package/dist/index.js +7043 -0
  81. package/dist/input-group.cjs +155 -0
  82. package/dist/input-group.d.cts +17 -0
  83. package/dist/input-group.d.ts +17 -0
  84. package/dist/input-group.js +133 -0
  85. package/dist/input.cjs +65 -0
  86. package/dist/input.d.cts +11 -0
  87. package/dist/input.d.ts +11 -0
  88. package/dist/input.js +59 -0
  89. package/dist/link.cjs +483 -0
  90. package/dist/link.d.cts +37 -0
  91. package/dist/link.d.ts +37 -0
  92. package/dist/link.js +459 -0
  93. package/dist/menu.cjs +305 -0
  94. package/dist/menu.d.cts +84 -0
  95. package/dist/menu.d.ts +84 -0
  96. package/dist/menu.js +269 -0
  97. package/dist/option-chain.cjs +221 -0
  98. package/dist/option-chain.d.cts +37 -0
  99. package/dist/option-chain.d.ts +37 -0
  100. package/dist/option-chain.js +199 -0
  101. package/dist/option-position.cjs +164 -0
  102. package/dist/option-position.d.cts +29 -0
  103. package/dist/option-position.d.ts +29 -0
  104. package/dist/option-position.js +142 -0
  105. package/dist/pin-input.cjs +182 -0
  106. package/dist/pin-input.d.cts +25 -0
  107. package/dist/pin-input.d.ts +25 -0
  108. package/dist/pin-input.js +160 -0
  109. package/dist/pnl-diagram.cjs +453 -0
  110. package/dist/pnl-diagram.d.cts +11 -0
  111. package/dist/pnl-diagram.d.ts +11 -0
  112. package/dist/pnl-diagram.js +431 -0
  113. package/dist/popover.cjs +342 -0
  114. package/dist/popover.d.cts +73 -0
  115. package/dist/popover.d.ts +73 -0
  116. package/dist/popover.js +310 -0
  117. package/dist/progress-circle.cjs +152 -0
  118. package/dist/progress-circle.d.cts +47 -0
  119. package/dist/progress-circle.d.ts +47 -0
  120. package/dist/progress-circle.js +128 -0
  121. package/dist/progress.cjs +117 -0
  122. package/dist/progress.d.cts +28 -0
  123. package/dist/progress.d.ts +28 -0
  124. package/dist/progress.js +94 -0
  125. package/dist/provider.cjs +62 -0
  126. package/dist/provider.d.cts +7 -0
  127. package/dist/provider.d.ts +7 -0
  128. package/dist/provider.js +40 -0
  129. package/dist/radio.cjs +177 -0
  130. package/dist/radio.d.cts +53 -0
  131. package/dist/radio.d.ts +53 -0
  132. package/dist/radio.js +153 -0
  133. package/dist/rating.cjs +80 -0
  134. package/dist/rating.d.cts +14 -0
  135. package/dist/rating.d.ts +14 -0
  136. package/dist/rating.js +58 -0
  137. package/dist/select.cjs +644 -0
  138. package/dist/select.d.cts +130 -0
  139. package/dist/select.d.ts +130 -0
  140. package/dist/select.js +610 -0
  141. package/dist/separator.cjs +57 -0
  142. package/dist/separator.d.cts +13 -0
  143. package/dist/separator.d.ts +13 -0
  144. package/dist/separator.js +51 -0
  145. package/dist/skeleton.cjs +223 -0
  146. package/dist/skeleton.d.cts +60 -0
  147. package/dist/skeleton.d.ts +60 -0
  148. package/dist/skeleton.js +199 -0
  149. package/dist/slider.cjs +138 -0
  150. package/dist/slider.d.cts +24 -0
  151. package/dist/slider.d.ts +24 -0
  152. package/dist/slider.js +115 -0
  153. package/dist/strategy-builder.cjs +373 -0
  154. package/dist/strategy-builder.d.cts +26 -0
  155. package/dist/strategy-builder.d.ts +26 -0
  156. package/dist/strategy-builder.js +351 -0
  157. package/dist/switch.cjs +163 -0
  158. package/dist/switch.d.cts +27 -0
  159. package/dist/switch.d.ts +27 -0
  160. package/dist/switch.js +140 -0
  161. package/dist/table.cjs +897 -0
  162. package/dist/table.d.cts +107 -0
  163. package/dist/table.d.ts +107 -0
  164. package/dist/table.js +866 -0
  165. package/dist/tabs.cjs +240 -0
  166. package/dist/tabs.d.cts +78 -0
  167. package/dist/tabs.d.ts +78 -0
  168. package/dist/tabs.js +213 -0
  169. package/dist/tag.cjs +529 -0
  170. package/dist/tag.d.cts +21 -0
  171. package/dist/tag.d.ts +21 -0
  172. package/dist/tag.js +507 -0
  173. package/dist/textarea.cjs +65 -0
  174. package/dist/textarea.d.cts +11 -0
  175. package/dist/textarea.d.ts +11 -0
  176. package/dist/textarea.js +59 -0
  177. package/dist/toaster.cjs +99 -0
  178. package/dist/toaster.d.cts +29 -0
  179. package/dist/toaster.d.ts +29 -0
  180. package/dist/toaster.js +96 -0
  181. package/dist/tooltip.cjs +172 -0
  182. package/dist/tooltip.d.cts +38 -0
  183. package/dist/tooltip.d.ts +38 -0
  184. package/dist/tooltip.js +150 -0
  185. package/dist/utils.cjs +11 -0
  186. package/dist/utils.d.cts +5 -0
  187. package/dist/utils.d.ts +5 -0
  188. package/dist/utils.js +9 -0
  189. package/package.json +284 -89
  190. package/src/accordion.tsx +285 -0
  191. package/src/alert.tsx +221 -0
  192. package/src/avatar.tsx +174 -0
  193. package/src/badge.tsx +147 -0
  194. package/src/bank.tsx +325 -0
  195. package/src/button.tsx +477 -0
  196. package/src/checkbox.tsx +307 -0
  197. package/src/close-button.tsx +77 -0
  198. package/src/collapsible.tsx +126 -0
  199. package/src/color-mode.tsx +125 -0
  200. package/src/dialog.tsx +346 -0
  201. package/src/drawer.tsx +186 -0
  202. package/src/empty-state.tsx +97 -0
  203. package/src/expiration-selector.tsx +163 -0
  204. package/src/field.tsx +202 -0
  205. package/src/greeks-display.tsx +138 -0
  206. package/src/heading.tsx +44 -0
  207. package/src/icon-button.tsx +217 -0
  208. package/src/image.tsx +280 -0
  209. package/src/index.ts +267 -138
  210. package/src/input-group.tsx +159 -0
  211. package/src/input.tsx +60 -0
  212. package/src/link.tsx +326 -0
  213. package/src/menu.tsx +471 -0
  214. package/src/option-chain.tsx +261 -0
  215. package/src/option-position.tsx +200 -0
  216. package/src/pin-input.tsx +187 -0
  217. package/src/pnl-diagram.tsx +458 -0
  218. package/src/popover.tsx +386 -0
  219. package/src/progress-circle.tsx +180 -0
  220. package/src/progress.tsx +109 -0
  221. package/src/provider.tsx +12 -0
  222. package/src/radio.tsx +175 -0
  223. package/src/rating.tsx +79 -0
  224. package/src/select.tsx +696 -0
  225. package/src/separator.tsx +59 -0
  226. package/src/skeleton.tsx +254 -0
  227. package/src/slider.tsx +152 -0
  228. package/src/strategy-builder.tsx +466 -0
  229. package/src/switch.tsx +158 -0
  230. package/src/table.tsx +621 -0
  231. package/src/tabs.tsx +354 -0
  232. package/src/tag.tsx +159 -0
  233. package/src/textarea.tsx +60 -0
  234. package/src/toaster.tsx +117 -0
  235. package/src/tokens.css +438 -0
  236. package/src/tooltip.tsx +191 -0
  237. package/src/utils/cn.ts +7 -0
  238. package/src/utils.ts +6 -0
  239. package/tokens.css +438 -0
  240. package/LICENSE +0 -122
  241. package/README.md +0 -109
@@ -0,0 +1,578 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var core = require('@hanzogui/core');
5
+ var React2 = require('react');
6
+ var clsx = require('clsx');
7
+ var tailwindMerge = require('tailwind-merge');
8
+ var jsxRuntime = require('react/jsx-runtime');
9
+
10
+ function _interopNamespace(e) {
11
+ if (e && e.__esModule) return e;
12
+ var n = Object.create(null);
13
+ if (e) {
14
+ Object.keys(e).forEach(function (k) {
15
+ if (k !== 'default') {
16
+ var d = Object.getOwnPropertyDescriptor(e, k);
17
+ Object.defineProperty(n, k, d.get ? d : {
18
+ enumerable: true,
19
+ get: function () { return e[k]; }
20
+ });
21
+ }
22
+ });
23
+ }
24
+ n.default = e;
25
+ return Object.freeze(n);
26
+ }
27
+
28
+ var React2__namespace = /*#__PURE__*/_interopNamespace(React2);
29
+
30
+ // src/button.tsx
31
+ function cn(...inputs) {
32
+ return tailwindMerge.twMerge(clsx.clsx(inputs));
33
+ }
34
+ var SHIM_PROPS = [
35
+ "w",
36
+ "h",
37
+ "minW",
38
+ "maxW",
39
+ "display",
40
+ "flexGrow",
41
+ "flexShrink",
42
+ "flexBasis",
43
+ "fontWeight",
44
+ "textStyle",
45
+ "borderRadius",
46
+ "alignSelf",
47
+ "alignItems",
48
+ "justifyContent",
49
+ "color",
50
+ "mt",
51
+ "mb",
52
+ "ml",
53
+ "mr",
54
+ "height",
55
+ "overflow",
56
+ "whiteSpace",
57
+ "textOverflow",
58
+ "textTransform",
59
+ "gap",
60
+ "gridTemplateColumns",
61
+ "minWidth",
62
+ "boxSize",
63
+ "py",
64
+ "px",
65
+ "p",
66
+ "hideBelow",
67
+ "fontSize",
68
+ "flexWrap",
69
+ "wordBreak",
70
+ "lineHeight",
71
+ "marginRight",
72
+ "position",
73
+ "background"
74
+ ];
75
+ var S = 4;
76
+ function dim(v) {
77
+ if (v == null) return void 0;
78
+ if (typeof v === "number") return `${v * S}px`;
79
+ if (typeof v === "string") return v;
80
+ if (typeof v === "object") {
81
+ const o = v;
82
+ return o.base ?? o.lg ?? o.xl ?? Object.values(o)[0];
83
+ }
84
+ return void 0;
85
+ }
86
+ function sp(v) {
87
+ if (v === void 0) return void 0;
88
+ return typeof v === "number" ? `${v * S}px` : v;
89
+ }
90
+ function shimToStyle(props) {
91
+ const s = {};
92
+ if (props.w !== void 0) s.width = dim(props.w);
93
+ if (props.h !== void 0) s.height = dim(props.h);
94
+ if (props.minW !== void 0) s.minWidth = dim(props.minW);
95
+ if (props.maxW !== void 0) s.maxWidth = dim(props.maxW);
96
+ if (props.display !== void 0) s.display = props.display;
97
+ if (props.flexGrow !== void 0) s.flexGrow = props.flexGrow;
98
+ if (props.flexShrink !== void 0) s.flexShrink = props.flexShrink;
99
+ if (props.flexBasis !== void 0) s.flexBasis = props.flexBasis;
100
+ if (props.fontWeight !== void 0) s.fontWeight = props.fontWeight;
101
+ if (props.borderRadius !== void 0) s.borderRadius = props.borderRadius;
102
+ if (props.alignSelf !== void 0) s.alignSelf = props.alignSelf;
103
+ if (props.alignItems !== void 0) s.alignItems = props.alignItems;
104
+ if (props.justifyContent !== void 0) s.justifyContent = props.justifyContent;
105
+ if (props.color !== void 0) s.color = props.color;
106
+ if (props.mt !== void 0) s.marginTop = sp(props.mt);
107
+ if (props.mb !== void 0) s.marginBottom = sp(props.mb);
108
+ if (props.ml !== void 0) s.marginLeft = sp(props.ml);
109
+ if (props.mr !== void 0) s.marginRight = sp(props.mr);
110
+ if (props.height !== void 0) s.height = props.height;
111
+ if (props.overflow !== void 0) s.overflow = props.overflow;
112
+ if (props.whiteSpace !== void 0) s.whiteSpace = props.whiteSpace;
113
+ if (props.textOverflow !== void 0) s.textOverflow = props.textOverflow;
114
+ if (props.textTransform !== void 0) s.textTransform = props.textTransform;
115
+ if (props.gap !== void 0) s.gap = sp(props.gap);
116
+ if (props.gridTemplateColumns !== void 0) s.gridTemplateColumns = props.gridTemplateColumns;
117
+ if (props.minWidth !== void 0) s.minWidth = props.minWidth;
118
+ if (props.boxSize !== void 0) {
119
+ const v = typeof props.boxSize === "number" ? `${props.boxSize * S}px` : props.boxSize;
120
+ s.width = v;
121
+ s.height = v;
122
+ }
123
+ if (props.py !== void 0) {
124
+ const v = sp(props.py);
125
+ s.paddingTop = v;
126
+ s.paddingBottom = v;
127
+ }
128
+ if (props.px !== void 0) {
129
+ const v = sp(props.px);
130
+ s.paddingLeft = v;
131
+ s.paddingRight = v;
132
+ }
133
+ if (props.p !== void 0) s.padding = sp(props.p);
134
+ if (props.fontSize !== void 0) s.fontSize = props.fontSize;
135
+ if (props.flexWrap !== void 0) s.flexWrap = props.flexWrap;
136
+ if (props.wordBreak !== void 0) s.wordBreak = props.wordBreak;
137
+ if (props.lineHeight !== void 0) s.lineHeight = props.lineHeight;
138
+ if (props.marginRight !== void 0) s.marginRight = props.marginRight;
139
+ if (props.position !== void 0) s.position = props.position;
140
+ if (props.background !== void 0) s.background = props.background;
141
+ return s;
142
+ }
143
+ function stripShims(props) {
144
+ const out = { ...props };
145
+ for (const k of SHIM_PROPS) delete out[k];
146
+ return out;
147
+ }
148
+ var SKELETON_CLASSES = [
149
+ "animate-skeleton-shimmer rounded-sm",
150
+ "bg-[linear-gradient(90deg,var(--color-skeleton-start)_0%,var(--color-skeleton-end)_50%,var(--color-skeleton-start)_100%)]",
151
+ "bg-[length:200%_100%]"
152
+ ].join(" ");
153
+ var HIDE_BELOW_MAP = { lg: "lg:hidden", md: "md:hidden", sm: "sm:hidden" };
154
+ var Skeleton = React2__namespace.forwardRef(
155
+ function Skeleton2(props, ref) {
156
+ const { loading = false, asChild, className, children, style: styleProp, as: Component = "div", ...allRest } = props;
157
+ const shimStyle = shimToStyle(props);
158
+ const mergedStyle = Object.keys(shimStyle).length > 0 || styleProp ? { ...shimStyle, ...styleProp } : void 0;
159
+ const hideBelowClass = props.hideBelow ? HIDE_BELOW_MAP[props.hideBelow] : void 0;
160
+ const cls = hideBelowClass ? cn(className, hideBelowClass) : className;
161
+ const htmlRest = stripShims(allRest);
162
+ if (!loading) {
163
+ if (asChild && React2__namespace.isValidElement(children)) return children;
164
+ return /* @__PURE__ */ jsxRuntime.jsx(Component, { ref, className: cls, style: mergedStyle, ...htmlRest, children });
165
+ }
166
+ if (asChild && React2__namespace.isValidElement(children)) {
167
+ return /* @__PURE__ */ jsxRuntime.jsx(
168
+ Component,
169
+ {
170
+ ref,
171
+ "data-loading": true,
172
+ className: cn(SKELETON_CLASSES, "text-transparent [&_*]:invisible", cls),
173
+ style: mergedStyle,
174
+ ...htmlRest,
175
+ children
176
+ }
177
+ );
178
+ }
179
+ return /* @__PURE__ */ jsxRuntime.jsx(
180
+ Component,
181
+ {
182
+ ref,
183
+ "data-loading": true,
184
+ className: cn(SKELETON_CLASSES, children ? "text-transparent [&_*]:invisible" : "min-h-5", cls),
185
+ style: mergedStyle,
186
+ ...htmlRest,
187
+ children
188
+ }
189
+ );
190
+ }
191
+ );
192
+ React2__namespace.forwardRef(
193
+ function SkeletonCircle2(props, ref) {
194
+ const { size = 40, loading = true, className, ...rest } = props;
195
+ const dimension = typeof size === "number" ? `${size}px` : size;
196
+ return /* @__PURE__ */ jsxRuntime.jsx(
197
+ Skeleton,
198
+ {
199
+ ref,
200
+ loading,
201
+ className: cn("rounded-full shrink-0", className),
202
+ style: { width: dimension, height: dimension, ...rest.style },
203
+ ...rest
204
+ }
205
+ );
206
+ }
207
+ );
208
+ React2__namespace.forwardRef(
209
+ function SkeletonText2(props, ref) {
210
+ const { noOfLines = 3, loading = true, className, ...rest } = props;
211
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: cn("flex w-full flex-col gap-2", className), ...rest, children: Array.from({ length: noOfLines }).map((_, index) => /* @__PURE__ */ jsxRuntime.jsx(
212
+ Skeleton,
213
+ {
214
+ loading,
215
+ className: cn("h-4", index === noOfLines - 1 && "max-w-[80%]")
216
+ },
217
+ index
218
+ )) });
219
+ }
220
+ );
221
+ var SpinnerFrame = core.styled(core.View, {
222
+ name: "ButtonSpinner",
223
+ render: /* @__PURE__ */ jsxRuntime.jsx("span", {}),
224
+ width: 16,
225
+ height: 16,
226
+ borderRadius: 1e3,
227
+ borderWidth: 2,
228
+ borderColor: "currentColor",
229
+ borderBottomColor: "transparent",
230
+ borderLeftColor: "transparent"
231
+ });
232
+ function Spinner({ className }) {
233
+ return /* @__PURE__ */ jsxRuntime.jsx(
234
+ SpinnerFrame,
235
+ {
236
+ role: "status",
237
+ "aria-label": "Loading",
238
+ className: [
239
+ "animate-spin",
240
+ className
241
+ ].filter(Boolean).join(" ")
242
+ }
243
+ );
244
+ }
245
+ var ButtonFrame = core.styled(core.View, {
246
+ name: "LuxButton",
247
+ render: /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button" }),
248
+ role: "button",
249
+ tabIndex: 0,
250
+ cursor: "pointer",
251
+ userSelect: "none",
252
+ display: "inline-flex",
253
+ alignItems: "center",
254
+ justifyContent: "center",
255
+ gap: 0,
256
+ overflow: "hidden",
257
+ borderRadius: 6,
258
+ // Whitespace nowrap via className since hanzogui doesn't have a direct token
259
+ // Transition via className
260
+ variants: {
261
+ size: {
262
+ "2xs": { paddingHorizontal: 8, height: 20, minWidth: 20, fontSize: 12, borderRadius: 4, gap: 4 },
263
+ xs: { paddingHorizontal: 8, height: 24, minWidth: 24, fontSize: 14, borderRadius: 4, gap: 4 },
264
+ sm: { paddingHorizontal: 12, height: 32, minWidth: 32, fontSize: 14, borderRadius: 6, gap: 4 },
265
+ md: { paddingHorizontal: 12, height: 40, minWidth: 40, fontSize: 16, borderRadius: 6, gap: 8 }
266
+ },
267
+ disabled: {
268
+ true: {
269
+ opacity: 0.2,
270
+ cursor: "not-allowed",
271
+ pointerEvents: "none"
272
+ }
273
+ }
274
+ },
275
+ defaultVariants: {
276
+ size: "md"
277
+ }
278
+ });
279
+ var VARIANT_CLASSES = {
280
+ solid: [
281
+ "bg-[var(--color-button-solid-bg)] text-[var(--color-button-solid-text)]",
282
+ "hover:bg-[var(--color-hover)]",
283
+ "data-[expanded]:bg-[var(--color-hover)]"
284
+ ].join(" "),
285
+ solid_danger: [
286
+ "bg-red-600 text-[var(--color-button-solid-text)]",
287
+ "hover:bg-red-500",
288
+ "data-[expanded]:bg-red-500"
289
+ ].join(" "),
290
+ outline: [
291
+ "border-2 border-solid bg-transparent",
292
+ "text-[var(--color-button-outline-fg)] border-[var(--color-button-outline-fg)]",
293
+ "hover:bg-transparent hover:text-[var(--color-hover)] hover:border-[var(--color-hover)]"
294
+ ].join(" "),
295
+ outline_danger: [
296
+ "border-2 border-solid bg-transparent",
297
+ "text-red-600 border-red-600",
298
+ "hover:bg-transparent hover:text-red-500 hover:border-red-500"
299
+ ].join(" "),
300
+ dropdown: [
301
+ "border-2 border-solid bg-transparent",
302
+ "text-[var(--color-button-dropdown-fg)] border-[var(--color-button-dropdown-border)]",
303
+ "hover:bg-transparent hover:text-[var(--color-hover)] hover:border-[var(--color-hover)]",
304
+ "data-[expanded]:bg-transparent data-[expanded]:text-[var(--color-hover)] data-[expanded]:border-[var(--color-hover)]",
305
+ "data-[selected]:bg-[var(--color-selected-control-bg)] data-[selected]:text-[var(--color-selected-control-text)] data-[selected]:border-transparent",
306
+ "data-[selected]:hover:bg-[var(--color-selected-control-bg)]",
307
+ "data-[selected]:hover:text-[var(--color-hover)] data-[selected]:hover:border-transparent",
308
+ "data-[selected]:data-[expanded]:text-[var(--color-hover)]"
309
+ ].join(" "),
310
+ header: [
311
+ "bg-transparent border-2 border-solid",
312
+ "text-[var(--color-button-header-fg)] border-[var(--color-button-header-border)]",
313
+ "hover:bg-transparent hover:text-[var(--color-hover)] hover:border-[var(--color-hover)]",
314
+ "data-[selected]:bg-[var(--color-button-header-bg-selected)]",
315
+ "data-[selected]:text-[var(--color-button-header-fg-selected)] data-[selected]:border-transparent data-[selected]:border-0",
316
+ "data-[selected]:hover:bg-[var(--color-button-header-bg-selected)] data-[selected]:hover:text-[var(--color-hover)]",
317
+ "data-[selected]:data-[expanded]:text-[var(--color-hover)]",
318
+ "data-[selected]:data-[highlighted]:bg-[var(--color-button-header-bg-highlighted)]",
319
+ "data-[selected]:data-[highlighted]:text-[var(--color-button-header-fg-highlighted)]",
320
+ "data-[selected]:data-[highlighted]:border-transparent data-[selected]:data-[highlighted]:border-0",
321
+ "data-[selected]:data-[highlighted]:hover:bg-[var(--color-button-header-bg-highlighted)]",
322
+ "data-[selected]:data-[highlighted]:hover:text-[var(--color-hover)]",
323
+ "data-[selected]:data-[highlighted]:data-[expanded]:text-[var(--color-hover)]"
324
+ ].join(" "),
325
+ hero: [
326
+ "bg-[var(--color-button-hero-bg)] text-[var(--color-button-hero-fg)]",
327
+ "hover:bg-[var(--color-button-hero-bg-hover)] hover:text-[var(--color-button-hero-fg-hover)]",
328
+ "data-[selected]:bg-[var(--color-button-hero-bg-selected)] data-[selected]:text-[var(--color-button-hero-fg-selected)]",
329
+ "data-[selected]:hover:bg-[var(--color-button-hero-bg-selected)] data-[selected]:hover:text-[var(--color-hover)]",
330
+ "data-[selected]:data-[expanded]:text-[var(--color-hover)]"
331
+ ].join(" "),
332
+ segmented: [
333
+ "bg-transparent border-2 border-solid rounded-none",
334
+ "text-[var(--color-button-segmented-fg)] border-[var(--color-selected-control-bg)]",
335
+ "hover:text-[var(--color-hover)]",
336
+ "data-[selected]:bg-[var(--color-selected-control-bg)] data-[selected]:text-[var(--color-selected-control-text)]",
337
+ "data-[selected]:hover:bg-[var(--color-selected-control-bg)] data-[selected]:hover:text-[var(--color-selected-control-text)]",
338
+ "[&:not(:last-child)]:border-r-0 data-[selected]:[&:not(:last-child)]:border-r-2",
339
+ "data-[selected]+*:border-l-0",
340
+ "first:rounded-l-md last:rounded-r-md"
341
+ ].join(" "),
342
+ plain: "bg-transparent text-inherit border-none hover:bg-transparent",
343
+ subtle: [
344
+ "bg-[var(--color-button-subtle-bg)] text-[var(--color-button-subtle-fg)]",
345
+ "hover:bg-[var(--color-button-subtle-bg)] hover:text-[var(--color-hover)]",
346
+ "disabled:bg-[var(--color-button-subtle-bg)] disabled:text-[var(--color-button-subtle-fg)]"
347
+ ].join(" "),
348
+ link: [
349
+ "bg-transparent text-[var(--color-link-primary)] border-none font-normal",
350
+ "px-0 h-auto",
351
+ "hover:bg-transparent hover:text-[var(--color-link-primary-hover)]",
352
+ "disabled:text-[var(--color-text-secondary)]"
353
+ ].join(" "),
354
+ icon_secondary: [
355
+ "bg-transparent text-[var(--color-icon-secondary)] border-none",
356
+ "hover:text-[var(--color-hover)]",
357
+ "data-[selected]:bg-[var(--color-selected-control-bg)] data-[selected]:text-[var(--color-selected-control-text)]",
358
+ "data-[selected]:hover:bg-[var(--color-selected-control-bg)] data-[selected]:hover:text-[var(--color-hover)]",
359
+ "data-[selected]:data-[expanded]:text-[var(--color-hover)]",
360
+ "data-[expanded]:text-[var(--color-hover)]"
361
+ ].join(" "),
362
+ icon_background: [
363
+ "bg-[var(--color-button-icon-background-bg)] text-[var(--color-icon-secondary)] border-none",
364
+ "hover:text-[var(--color-hover)]",
365
+ "data-[selected]:bg-[var(--color-selected-control-bg)] data-[selected]:text-[var(--color-selected-control-text)]",
366
+ "data-[selected]:hover:bg-[var(--color-selected-control-bg)] data-[selected]:hover:text-[var(--color-hover)]",
367
+ "data-[selected]:data-[expanded]:text-[var(--color-hover)]",
368
+ "data-[expanded]:text-[var(--color-hover)]"
369
+ ].join(" "),
370
+ pagination: [
371
+ "border-2 border-solid bg-transparent",
372
+ "text-[var(--color-button-pagination-fg)] border-[var(--color-button-pagination-border)]",
373
+ "hover:bg-transparent hover:text-[var(--color-hover)] hover:border-[var(--color-hover)]",
374
+ "data-[selected]:bg-[var(--color-selected-control-bg)] data-[selected]:text-[var(--color-selected-control-text)] data-[selected]:border-transparent",
375
+ "data-[selected]:hover:bg-[var(--color-selected-control-bg)]",
376
+ "data-[selected]:hover:text-[var(--color-selected-control-text)] data-[selected]:hover:border-transparent"
377
+ ].join(" ")
378
+ };
379
+ var BASE_CLASSES = "font-semibold whitespace-nowrap transition-colors duration-150";
380
+ var SP = 4;
381
+ function buildShimStyle(props) {
382
+ const s = { ...props.style };
383
+ if (props.mt !== void 0) s.marginTop = typeof props.mt === "number" ? `${props.mt * SP}px` : props.mt;
384
+ if (props.ml !== void 0) s.marginLeft = typeof props.ml === "number" ? `${props.ml * SP}px` : props.ml;
385
+ if (props.mr !== void 0) s.marginRight = typeof props.mr === "number" ? `${props.mr * SP}px` : props.mr;
386
+ if (props.px !== void 0) {
387
+ const v = typeof props.px === "number" ? `${props.px * SP}px` : props.px;
388
+ s.paddingLeft = v;
389
+ s.paddingRight = v;
390
+ }
391
+ if (props.py !== void 0) {
392
+ const v = typeof props.py === "number" ? `${props.py * SP}px` : props.py;
393
+ s.paddingTop = v;
394
+ s.paddingBottom = v;
395
+ }
396
+ if (props.fontWeight !== void 0) s.fontWeight = props.fontWeight;
397
+ if (props.gap !== void 0) s.gap = typeof props.gap === "number" ? `${props.gap * SP}px` : props.gap;
398
+ if (props.flexShrink !== void 0) s.flexShrink = props.flexShrink;
399
+ if (props.columnGap !== void 0) s.columnGap = typeof props.columnGap === "number" ? `${props.columnGap * SP}px` : props.columnGap;
400
+ if (props.gridColumn !== void 0) s.gridColumn = typeof props.gridColumn === "number" ? String(props.gridColumn) : props.gridColumn;
401
+ if (props.gridRow) s.gridRow = props.gridRow;
402
+ if (props.justifySelf) s.justifySelf = props.justifySelf;
403
+ if (props.alignSelf) s.alignSelf = props.alignSelf;
404
+ if (props.h) s.height = props.h;
405
+ if (props.w) s.width = props.w;
406
+ if (props.display) s.display = props.display;
407
+ if (props.borderBottomRightRadius !== void 0) s.borderBottomRightRadius = typeof props.borderBottomRightRadius === "number" ? `${props.borderBottomRightRadius}px` : props.borderBottomRightRadius;
408
+ if (props.borderTopRightRadius !== void 0) s.borderTopRightRadius = typeof props.borderTopRightRadius === "number" ? `${props.borderTopRightRadius}px` : props.borderTopRightRadius;
409
+ return Object.keys(s).length > 0 ? s : void 0;
410
+ }
411
+ var Button = React2__namespace.forwardRef(
412
+ function Button2(props, ref) {
413
+ const {
414
+ className,
415
+ variant = "solid",
416
+ size = "md",
417
+ asChild = false,
418
+ loading = false,
419
+ loadingText,
420
+ loadingSkeleton = false,
421
+ expanded,
422
+ selected,
423
+ highlighted,
424
+ disabled,
425
+ children,
426
+ style: styleProp,
427
+ // Strip Chakra style props
428
+ mt,
429
+ ml,
430
+ mr,
431
+ px,
432
+ py,
433
+ fontWeight,
434
+ gap,
435
+ flexShrink,
436
+ columnGap,
437
+ gridColumn,
438
+ gridRow,
439
+ justifySelf,
440
+ alignSelf,
441
+ textStyle: _textStyle,
442
+ h,
443
+ w,
444
+ display,
445
+ borderBottomRightRadius,
446
+ borderTopRightRadius,
447
+ ...rest
448
+ } = props;
449
+ const mergedStyle = buildShimStyle({
450
+ style: styleProp,
451
+ mt,
452
+ ml,
453
+ mr,
454
+ px,
455
+ py,
456
+ fontWeight,
457
+ gap,
458
+ flexShrink,
459
+ columnGap,
460
+ gridColumn,
461
+ gridRow,
462
+ justifySelf,
463
+ alignSelf,
464
+ h,
465
+ w,
466
+ display,
467
+ borderBottomRightRadius,
468
+ borderTopRightRadius
469
+ });
470
+ const dataAttrs = {};
471
+ if (expanded) dataAttrs["data-expanded"] = true;
472
+ if (selected) dataAttrs["data-selected"] = true;
473
+ if (highlighted) dataAttrs["data-highlighted"] = true;
474
+ if (loadingSkeleton) dataAttrs["data-loading-skeleton"] = true;
475
+ const isDisabled = !loadingSkeleton && (loading || disabled);
476
+ const inner = loading ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
477
+ /* @__PURE__ */ jsxRuntime.jsx(Spinner, {}),
478
+ loadingText != null && /* @__PURE__ */ jsxRuntime.jsx("span", { style: { marginLeft: 8 }, children: loadingText })
479
+ ] }) : children;
480
+ const variantClass = VARIANT_CLASSES[variant] ?? VARIANT_CLASSES.solid;
481
+ const combinedClassName = [BASE_CLASSES, variantClass, className].filter(Boolean).join(" ");
482
+ const button = /* @__PURE__ */ jsxRuntime.jsx(
483
+ ButtonFrame,
484
+ {
485
+ ref,
486
+ size,
487
+ disabled: isDisabled || void 0,
488
+ asChild: asChild || void 0,
489
+ className: combinedClassName,
490
+ style: mergedStyle,
491
+ ...dataAttrs,
492
+ ...rest,
493
+ children: inner
494
+ }
495
+ );
496
+ if (loadingSkeleton) {
497
+ return /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { loading: loadingSkeleton, asChild: true, ref, children: button });
498
+ }
499
+ return button;
500
+ }
501
+ );
502
+ var SIZE_CLASSES = {
503
+ "2xs": "px-2 h-5 min-w-5 text-xs rounded-sm gap-1",
504
+ xs: "px-2 h-6 min-w-6 text-sm rounded-sm gap-1",
505
+ sm: "px-3 h-8 min-w-8 text-sm rounded-md gap-1",
506
+ md: "px-3 h-10 min-w-10 text-base rounded-md gap-2"
507
+ };
508
+ function buttonVariants(opts) {
509
+ const v = opts?.variant ?? "solid";
510
+ const s = opts?.size ?? "md";
511
+ return [BASE_CLASSES, VARIANT_CLASSES[v] ?? "", SIZE_CLASSES[s] ?? ""].filter(Boolean).join(" ");
512
+ }
513
+ var ButtonGroup = React2__namespace.forwardRef(
514
+ function ButtonGroup2(props, ref) {
515
+ const { className, ...rest } = props;
516
+ return /* @__PURE__ */ jsxRuntime.jsx(
517
+ "div",
518
+ {
519
+ ref,
520
+ className: ["inline-flex", className].filter(Boolean).join(" "),
521
+ role: "group",
522
+ ...rest
523
+ }
524
+ );
525
+ }
526
+ );
527
+ var ButtonGroupRadio = React2__namespace.forwardRef(
528
+ function ButtonGroupRadio2(props, ref) {
529
+ const {
530
+ children,
531
+ onChange,
532
+ variant = "segmented",
533
+ defaultValue,
534
+ loading = false,
535
+ equalWidth = false,
536
+ className,
537
+ ...rest
538
+ } = props;
539
+ const firstChildValue = React2__namespace.useMemo(() => {
540
+ const firstChild = Array.isArray(children) ? children[0] : void 0;
541
+ return typeof firstChild?.props.value === "string" ? firstChild.props.value : void 0;
542
+ }, [children]);
543
+ const [value, setValue] = React2__namespace.useState(defaultValue ?? firstChildValue);
544
+ const handleItemClick = React2__namespace.useCallback((event) => {
545
+ const v = event.currentTarget.value;
546
+ setValue(v);
547
+ onChange?.(v);
548
+ }, [onChange]);
549
+ const clonedChildren = React2__namespace.Children.map(children, (child) => {
550
+ return React2__namespace.cloneElement(child, {
551
+ onClick: handleItemClick,
552
+ selected: value === child.props.value,
553
+ variant
554
+ });
555
+ });
556
+ const childrenLength = React2__namespace.Children.count(children);
557
+ return /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { loading, children: /* @__PURE__ */ jsxRuntime.jsx(
558
+ "div",
559
+ {
560
+ ref,
561
+ className: [
562
+ "inline-flex gap-0",
563
+ equalWidth ? "grid" : "",
564
+ className
565
+ ].filter(Boolean).join(" "),
566
+ style: equalWidth ? { gridTemplateColumns: `repeat(${childrenLength}, 1fr)` } : void 0,
567
+ role: "group",
568
+ ...rest,
569
+ children: clonedChildren
570
+ }
571
+ ) });
572
+ }
573
+ );
574
+
575
+ exports.Button = Button;
576
+ exports.ButtonGroup = ButtonGroup;
577
+ exports.ButtonGroupRadio = ButtonGroupRadio;
578
+ exports.buttonVariants = buttonVariants;
@@ -0,0 +1,55 @@
1
+ import * as React from 'react';
2
+
3
+ declare const VARIANT_CLASSES: Record<string, string>;
4
+ type ButtonVariant = keyof typeof VARIANT_CLASSES;
5
+ type ButtonSize = '2xs' | 'xs' | 'sm' | 'md';
6
+ interface ButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'size'> {
7
+ readonly variant?: ButtonVariant;
8
+ readonly size?: ButtonSize;
9
+ readonly asChild?: boolean;
10
+ readonly loading?: boolean;
11
+ readonly loadingText?: React.ReactNode;
12
+ readonly loadingSkeleton?: boolean;
13
+ readonly expanded?: boolean;
14
+ readonly selected?: boolean;
15
+ readonly highlighted?: boolean;
16
+ readonly mt?: number | string;
17
+ readonly ml?: number | string;
18
+ readonly mr?: number | string;
19
+ readonly px?: number | string;
20
+ readonly py?: number | string;
21
+ readonly fontWeight?: number | string;
22
+ readonly gap?: number | string;
23
+ readonly flexShrink?: number;
24
+ readonly columnGap?: number | string;
25
+ readonly gridColumn?: number | string;
26
+ readonly gridRow?: string;
27
+ readonly justifySelf?: string;
28
+ readonly alignSelf?: string;
29
+ readonly textStyle?: string;
30
+ readonly h?: string;
31
+ readonly w?: string;
32
+ readonly display?: string;
33
+ readonly borderBottomRightRadius?: number | string;
34
+ readonly borderTopRightRadius?: number | string;
35
+ readonly 'data-call-strategy'?: string;
36
+ }
37
+ declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
38
+ declare function buttonVariants(opts?: {
39
+ variant?: string;
40
+ size?: string;
41
+ }): string;
42
+ interface ButtonGroupProps extends React.HTMLAttributes<HTMLDivElement> {
43
+ }
44
+ declare const ButtonGroup: React.ForwardRefExoticComponent<ButtonGroupProps & React.RefAttributes<HTMLDivElement>>;
45
+ interface ButtonGroupRadioProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children' | 'onChange'> {
46
+ children: Array<React.ReactElement<ButtonProps>>;
47
+ onChange?: (value: string) => void;
48
+ defaultValue?: string;
49
+ loading?: boolean;
50
+ equalWidth?: boolean;
51
+ variant?: ButtonProps['variant'];
52
+ }
53
+ declare const ButtonGroupRadio: React.ForwardRefExoticComponent<ButtonGroupRadioProps & React.RefAttributes<HTMLDivElement>>;
54
+
55
+ export { Button, ButtonGroup, type ButtonGroupProps, ButtonGroupRadio, type ButtonGroupRadioProps, type ButtonProps, buttonVariants };
@@ -0,0 +1,55 @@
1
+ import * as React from 'react';
2
+
3
+ declare const VARIANT_CLASSES: Record<string, string>;
4
+ type ButtonVariant = keyof typeof VARIANT_CLASSES;
5
+ type ButtonSize = '2xs' | 'xs' | 'sm' | 'md';
6
+ interface ButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'size'> {
7
+ readonly variant?: ButtonVariant;
8
+ readonly size?: ButtonSize;
9
+ readonly asChild?: boolean;
10
+ readonly loading?: boolean;
11
+ readonly loadingText?: React.ReactNode;
12
+ readonly loadingSkeleton?: boolean;
13
+ readonly expanded?: boolean;
14
+ readonly selected?: boolean;
15
+ readonly highlighted?: boolean;
16
+ readonly mt?: number | string;
17
+ readonly ml?: number | string;
18
+ readonly mr?: number | string;
19
+ readonly px?: number | string;
20
+ readonly py?: number | string;
21
+ readonly fontWeight?: number | string;
22
+ readonly gap?: number | string;
23
+ readonly flexShrink?: number;
24
+ readonly columnGap?: number | string;
25
+ readonly gridColumn?: number | string;
26
+ readonly gridRow?: string;
27
+ readonly justifySelf?: string;
28
+ readonly alignSelf?: string;
29
+ readonly textStyle?: string;
30
+ readonly h?: string;
31
+ readonly w?: string;
32
+ readonly display?: string;
33
+ readonly borderBottomRightRadius?: number | string;
34
+ readonly borderTopRightRadius?: number | string;
35
+ readonly 'data-call-strategy'?: string;
36
+ }
37
+ declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
38
+ declare function buttonVariants(opts?: {
39
+ variant?: string;
40
+ size?: string;
41
+ }): string;
42
+ interface ButtonGroupProps extends React.HTMLAttributes<HTMLDivElement> {
43
+ }
44
+ declare const ButtonGroup: React.ForwardRefExoticComponent<ButtonGroupProps & React.RefAttributes<HTMLDivElement>>;
45
+ interface ButtonGroupRadioProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children' | 'onChange'> {
46
+ children: Array<React.ReactElement<ButtonProps>>;
47
+ onChange?: (value: string) => void;
48
+ defaultValue?: string;
49
+ loading?: boolean;
50
+ equalWidth?: boolean;
51
+ variant?: ButtonProps['variant'];
52
+ }
53
+ declare const ButtonGroupRadio: React.ForwardRefExoticComponent<ButtonGroupRadioProps & React.RefAttributes<HTMLDivElement>>;
54
+
55
+ export { Button, ButtonGroup, type ButtonGroupProps, ButtonGroupRadio, type ButtonGroupRadioProps, type ButtonProps, buttonVariants };