@luxfi/ui 6.1.2 → 7.0.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 (240) 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 +553 -0
  6. package/dist/alert.d.cts +30 -0
  7. package/dist/alert.d.ts +30 -0
  8. package/dist/alert.js +531 -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 +611 -0
  14. package/dist/badge.d.cts +23 -0
  15. package/dist/badge.d.ts +23 -0
  16. package/dist/badge.js +589 -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 +689 -0
  22. package/dist/button.d.cts +52 -0
  23. package/dist/button.d.ts +52 -0
  24. package/dist/button.js +664 -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 +73 -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 +51 -0
  33. package/dist/collapsible.cjs +702 -0
  34. package/dist/collapsible.d.cts +23 -0
  35. package/dist/collapsible.d.ts +23 -0
  36. package/dist/collapsible.js +679 -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 +279 -0
  42. package/dist/dialog.d.cts +66 -0
  43. package/dist/dialog.d.ts +66 -0
  44. package/dist/dialog.js +246 -0
  45. package/dist/drawer.cjs +207 -0
  46. package/dist/drawer.d.cts +36 -0
  47. package/dist/drawer.d.ts +36 -0
  48. package/dist/drawer.js +175 -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 +46 -0
  66. package/dist/heading.d.cts +10 -0
  67. package/dist/heading.d.ts +10 -0
  68. package/dist/heading.js +40 -0
  69. package/dist/icon-button.cjs +491 -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 +470 -0
  73. package/dist/image.cjs +572 -0
  74. package/dist/image.d.cts +57 -0
  75. package/dist/image.d.ts +57 -0
  76. package/dist/image.js +551 -0
  77. package/dist/index.cjs +7316 -0
  78. package/dist/index.d.cts +58 -0
  79. package/dist/index.d.ts +58 -0
  80. package/dist/index.js +7137 -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 +630 -0
  90. package/dist/link.d.cts +37 -0
  91. package/dist/link.d.ts +37 -0
  92. package/dist/link.js +606 -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 +327 -0
  114. package/dist/popover.d.cts +73 -0
  115. package/dist/popover.d.ts +73 -0
  116. package/dist/popover.js +294 -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 +791 -0
  138. package/dist/select.d.cts +130 -0
  139. package/dist/select.d.ts +130 -0
  140. package/dist/select.js +757 -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 +370 -0
  146. package/dist/skeleton.d.cts +60 -0
  147. package/dist/skeleton.d.ts +60 -0
  148. package/dist/skeleton.js +346 -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 +1044 -0
  162. package/dist/table.d.cts +107 -0
  163. package/dist/table.d.ts +107 -0
  164. package/dist/table.js +1013 -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 +651 -0
  170. package/dist/tag.d.cts +21 -0
  171. package/dist/tag.d.ts +21 -0
  172. package/dist/tag.js +628 -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 +171 -0
  182. package/dist/tooltip.d.cts +39 -0
  183. package/dist/tooltip.d.ts +39 -0
  184. package/dist/tooltip.js +148 -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 -85
  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 +158 -0
  194. package/src/bank.tsx +325 -0
  195. package/src/button.tsx +411 -0
  196. package/src/checkbox.tsx +307 -0
  197. package/src/close-button.tsx +51 -0
  198. package/src/collapsible.tsx +126 -0
  199. package/src/color-mode.tsx +125 -0
  200. package/src/dialog.tsx +356 -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 +55 -0
  207. package/src/icon-button.tsx +192 -0
  208. package/src/image.tsx +280 -0
  209. package/src/index.ts +268 -0
  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 +400 -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 +302 -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 +184 -0
  237. package/src/utils/cn.ts +7 -0
  238. package/src/utils.ts +6 -0
  239. package/tokens.css +438 -0
  240. package/README.md +0 -109
@@ -0,0 +1,10 @@
1
+ import React__default from 'react';
2
+
3
+ interface HeadingProps extends React__default.ComponentPropsWithoutRef<'h1'> {
4
+ level?: '1' | '2' | '3';
5
+ mb?: number | string;
6
+ size?: string;
7
+ }
8
+ declare const Heading: React__default.ForwardRefExoticComponent<HeadingProps & React__default.RefAttributes<HTMLHeadingElement>>;
9
+
10
+ export { Heading, type HeadingProps };
@@ -0,0 +1,40 @@
1
+ "use client";
2
+ import React from 'react';
3
+ import { clsx } from 'clsx';
4
+ import { twMerge } from 'tailwind-merge';
5
+ import { jsx } from 'react/jsx-runtime';
6
+
7
+ // src/heading.tsx
8
+ function cn(...inputs) {
9
+ return twMerge(clsx(inputs));
10
+ }
11
+ var LEVEL_TAG = {
12
+ "1": "h1",
13
+ "2": "h2",
14
+ "3": "h3"
15
+ };
16
+ var LEVEL_CLASSES = {
17
+ "1": "text-[18px] leading-[24px] font-medium lg:text-[32px] lg:leading-[40px] lg:tracking-[-0.5px]",
18
+ "2": "text-[16px] leading-[24px] font-medium lg:text-[24px] lg:leading-[32px]",
19
+ "3": "text-[14px] leading-[20px] font-semibold lg:text-[18px] lg:leading-[24px] lg:font-medium"
20
+ };
21
+ var BASE_CLASSES = "font-heading text-heading";
22
+ var Heading = React.forwardRef(
23
+ function Heading2({ level, className, mb, size: _size, style: styleProp, ...rest }, ref) {
24
+ const Tag = level ? LEVEL_TAG[level] : "h2";
25
+ const levelClasses = level ? LEVEL_CLASSES[level] : void 0;
26
+ const shimStyle = { ...styleProp };
27
+ if (mb !== void 0) shimStyle.marginBottom = typeof mb === "number" ? `${mb * 4}px` : mb;
28
+ return /* @__PURE__ */ jsx(
29
+ Tag,
30
+ {
31
+ ref,
32
+ className: cn(BASE_CLASSES, levelClasses, className),
33
+ style: Object.keys(shimStyle).length > 0 ? shimStyle : void 0,
34
+ ...rest
35
+ }
36
+ );
37
+ }
38
+ );
39
+
40
+ export { Heading };
@@ -0,0 +1,491 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var classVarianceAuthority = require('class-variance-authority');
5
+ var React = 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 React__namespace = /*#__PURE__*/_interopNamespace(React);
29
+
30
+ // src/icon-button.tsx
31
+ function cn(...inputs) {
32
+ return tailwindMerge.twMerge(clsx.clsx(inputs));
33
+ }
34
+ var SPACING_SCALE = 4;
35
+ function toStylePx(value) {
36
+ if (value === void 0) return void 0;
37
+ if (typeof value === "string") return value;
38
+ return `${value * SPACING_SCALE}px`;
39
+ }
40
+ function extractSkeletonStyleProps(props) {
41
+ const style = {};
42
+ const rest = {};
43
+ function resolveDimension(value) {
44
+ if (value === void 0 || value === null) return void 0;
45
+ if (typeof value === "number") return `${value * SPACING_SCALE}px`;
46
+ if (typeof value === "string") return value;
47
+ if (typeof value === "object") {
48
+ const obj = value;
49
+ return obj.base ?? obj.lg ?? obj.xl ?? Object.values(obj)[0];
50
+ }
51
+ return void 0;
52
+ }
53
+ for (const [key, value] of Object.entries(props)) {
54
+ if (value === void 0) continue;
55
+ switch (key) {
56
+ case "w": {
57
+ const v = resolveDimension(value);
58
+ if (v) style.width = v;
59
+ break;
60
+ }
61
+ case "h": {
62
+ const v = resolveDimension(value);
63
+ if (v) style.height = v;
64
+ break;
65
+ }
66
+ case "minW": {
67
+ const v = resolveDimension(value);
68
+ if (v) style.minWidth = v;
69
+ break;
70
+ }
71
+ case "maxW": {
72
+ const v = resolveDimension(value);
73
+ if (v) style.maxWidth = v;
74
+ break;
75
+ }
76
+ case "height":
77
+ style.height = value;
78
+ break;
79
+ case "display":
80
+ style.display = value;
81
+ break;
82
+ case "flexGrow":
83
+ style.flexGrow = value;
84
+ break;
85
+ case "flexShrink":
86
+ style.flexShrink = value;
87
+ break;
88
+ case "flexBasis":
89
+ style.flexBasis = value;
90
+ break;
91
+ case "fontWeight":
92
+ style.fontWeight = value;
93
+ break;
94
+ case "borderRadius":
95
+ style.borderRadius = value;
96
+ break;
97
+ case "alignSelf":
98
+ style.alignSelf = value;
99
+ break;
100
+ case "alignItems":
101
+ style.alignItems = value;
102
+ break;
103
+ case "justifyContent":
104
+ style.justifyContent = value;
105
+ break;
106
+ case "color":
107
+ style.color = value;
108
+ break;
109
+ case "mt":
110
+ style.marginTop = toStylePx(value);
111
+ break;
112
+ case "mb":
113
+ style.marginBottom = toStylePx(value);
114
+ break;
115
+ case "ml":
116
+ style.marginLeft = toStylePx(value);
117
+ break;
118
+ case "mr":
119
+ style.marginRight = toStylePx(value);
120
+ break;
121
+ case "overflow":
122
+ style.overflow = value;
123
+ break;
124
+ case "whiteSpace":
125
+ style.whiteSpace = value;
126
+ break;
127
+ case "textOverflow":
128
+ style.textOverflow = value;
129
+ break;
130
+ case "textTransform":
131
+ style.textTransform = value;
132
+ break;
133
+ case "gap":
134
+ style.gap = typeof value === "number" ? `${value * SPACING_SCALE}px` : value;
135
+ break;
136
+ case "gridTemplateColumns":
137
+ style.gridTemplateColumns = value;
138
+ break;
139
+ case "minWidth":
140
+ style.minWidth = value;
141
+ break;
142
+ case "boxSize": {
143
+ const s = typeof value === "number" ? `${value * SPACING_SCALE}px` : value;
144
+ style.width = s;
145
+ style.height = s;
146
+ break;
147
+ }
148
+ case "py": {
149
+ const v = toStylePx(value);
150
+ style.paddingTop = v;
151
+ style.paddingBottom = v;
152
+ break;
153
+ }
154
+ case "px": {
155
+ const v = toStylePx(value);
156
+ style.paddingLeft = v;
157
+ style.paddingRight = v;
158
+ break;
159
+ }
160
+ case "p": {
161
+ const v = toStylePx(value);
162
+ style.padding = v;
163
+ break;
164
+ }
165
+ case "hideBelow":
166
+ break;
167
+ // handled via className
168
+ case "textStyle":
169
+ break;
170
+ // drop textStyle, not directly applicable
171
+ case "fontSize":
172
+ style.fontSize = value;
173
+ break;
174
+ case "flexWrap":
175
+ style.flexWrap = value;
176
+ break;
177
+ case "wordBreak":
178
+ style.wordBreak = value;
179
+ break;
180
+ case "lineHeight":
181
+ style.lineHeight = value;
182
+ break;
183
+ case "marginRight":
184
+ style.marginRight = value;
185
+ break;
186
+ case "position":
187
+ style.position = value;
188
+ break;
189
+ case "background":
190
+ style.background = value;
191
+ break;
192
+ default:
193
+ rest[key] = value;
194
+ break;
195
+ }
196
+ }
197
+ return { style, rest };
198
+ }
199
+ var Skeleton = React__namespace.forwardRef(
200
+ function Skeleton2(props, ref) {
201
+ const {
202
+ loading = false,
203
+ asChild,
204
+ className,
205
+ children,
206
+ style: styleProp,
207
+ // Destructure style-prop shims so they don't leak into DOM
208
+ w: _w,
209
+ h: _h,
210
+ minW: _minW,
211
+ maxW: _maxW,
212
+ display: _display,
213
+ flexGrow: _flexGrow,
214
+ flexShrink: _flexShrink,
215
+ flexBasis: _flexBasis,
216
+ fontWeight: _fontWeight,
217
+ textStyle: _textStyle,
218
+ borderRadius: _borderRadius,
219
+ alignSelf: _alignSelf,
220
+ alignItems: _alignItems,
221
+ justifyContent: _justifyContent,
222
+ color: _color,
223
+ mt: _mt,
224
+ mb: _mb,
225
+ ml: _ml,
226
+ mr: _mr,
227
+ height: _height,
228
+ overflow: _overflow,
229
+ whiteSpace: _whiteSpace,
230
+ textOverflow: _textOverflow,
231
+ textTransform: _textTransform,
232
+ gap: _gap,
233
+ gridTemplateColumns: _gridTemplateColumns,
234
+ minWidth: _minWidth,
235
+ boxSize: _boxSize,
236
+ py: _py,
237
+ px: _px,
238
+ p: _p,
239
+ hideBelow: _hideBelow,
240
+ fontSize: _fontSize,
241
+ flexWrap: _flexWrap,
242
+ wordBreak: _wordBreak,
243
+ lineHeight: _lineHeight,
244
+ marginRight: _marginRight,
245
+ position: _position,
246
+ background: _background,
247
+ as: Component = "div",
248
+ ...htmlRest
249
+ } = props;
250
+ const { style: shimStyle } = extractSkeletonStyleProps({
251
+ w: _w,
252
+ h: _h,
253
+ minW: _minW,
254
+ maxW: _maxW,
255
+ display: _display,
256
+ flexGrow: _flexGrow,
257
+ flexShrink: _flexShrink,
258
+ flexBasis: _flexBasis,
259
+ fontWeight: _fontWeight,
260
+ textStyle: _textStyle,
261
+ borderRadius: _borderRadius,
262
+ alignSelf: _alignSelf,
263
+ alignItems: _alignItems,
264
+ justifyContent: _justifyContent,
265
+ color: _color,
266
+ mt: _mt,
267
+ mb: _mb,
268
+ ml: _ml,
269
+ mr: _mr,
270
+ height: _height,
271
+ overflow: _overflow,
272
+ whiteSpace: _whiteSpace,
273
+ textOverflow: _textOverflow,
274
+ textTransform: _textTransform,
275
+ gap: _gap,
276
+ gridTemplateColumns: _gridTemplateColumns,
277
+ minWidth: _minWidth,
278
+ boxSize: _boxSize,
279
+ py: _py,
280
+ px: _px,
281
+ p: _p,
282
+ hideBelow: _hideBelow,
283
+ fontSize: _fontSize,
284
+ flexWrap: _flexWrap,
285
+ wordBreak: _wordBreak,
286
+ lineHeight: _lineHeight,
287
+ marginRight: _marginRight,
288
+ position: _position,
289
+ background: _background
290
+ });
291
+ const mergedStyle = Object.keys(shimStyle).length > 0 || styleProp ? { ...shimStyle, ...styleProp } : void 0;
292
+ const HIDE_BELOW_MAP = { lg: "lg:hidden", md: "md:hidden", sm: "sm:hidden" };
293
+ const hideBelowClass = _hideBelow ? HIDE_BELOW_MAP[_hideBelow] : void 0;
294
+ const finalClassName = hideBelowClass ? cn(className, hideBelowClass) : className;
295
+ if (!loading) {
296
+ if (asChild && React__namespace.isValidElement(children)) {
297
+ return children;
298
+ }
299
+ return /* @__PURE__ */ jsxRuntime.jsx(Component, { ref, className: finalClassName, style: mergedStyle, ...htmlRest, children });
300
+ }
301
+ if (asChild && React__namespace.isValidElement(children)) {
302
+ return /* @__PURE__ */ jsxRuntime.jsx(
303
+ Component,
304
+ {
305
+ ref,
306
+ "data-loading": true,
307
+ className: cn(
308
+ "animate-skeleton-shimmer rounded-sm",
309
+ "bg-[linear-gradient(90deg,var(--color-skeleton-start)_0%,var(--color-skeleton-end)_50%,var(--color-skeleton-start)_100%)]",
310
+ "bg-[length:200%_100%]",
311
+ "text-transparent [&_*]:invisible",
312
+ finalClassName
313
+ ),
314
+ style: mergedStyle,
315
+ ...htmlRest,
316
+ children
317
+ }
318
+ );
319
+ }
320
+ return /* @__PURE__ */ jsxRuntime.jsx(
321
+ Component,
322
+ {
323
+ ref,
324
+ "data-loading": true,
325
+ className: cn(
326
+ "animate-skeleton-shimmer rounded-sm",
327
+ "bg-[linear-gradient(90deg,var(--color-skeleton-start)_0%,var(--color-skeleton-end)_50%,var(--color-skeleton-start)_100%)]",
328
+ "bg-[length:200%_100%]",
329
+ children ? "text-transparent [&_*]:invisible" : "min-h-5",
330
+ finalClassName
331
+ ),
332
+ style: mergedStyle,
333
+ ...htmlRest,
334
+ children
335
+ }
336
+ );
337
+ }
338
+ );
339
+ React__namespace.forwardRef(
340
+ function SkeletonCircle2(props, ref) {
341
+ const { size = 40, loading = true, className, ...rest } = props;
342
+ const dimension = typeof size === "number" ? `${size}px` : size;
343
+ return /* @__PURE__ */ jsxRuntime.jsx(
344
+ Skeleton,
345
+ {
346
+ ref,
347
+ loading,
348
+ className: cn("rounded-full shrink-0", className),
349
+ style: { width: dimension, height: dimension, ...rest.style },
350
+ ...rest
351
+ }
352
+ );
353
+ }
354
+ );
355
+ React__namespace.forwardRef(
356
+ function SkeletonText2(props, ref) {
357
+ const { noOfLines = 3, loading = true, className, ...rest } = props;
358
+ 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(
359
+ Skeleton,
360
+ {
361
+ loading,
362
+ className: cn("h-4", index === noOfLines - 1 && "max-w-[80%]")
363
+ },
364
+ index
365
+ )) });
366
+ }
367
+ );
368
+ var iconButtonVariants = classVarianceAuthority.cva(
369
+ // base
370
+ [
371
+ "inline-flex items-center justify-center",
372
+ "p-0 min-w-auto shrink-0",
373
+ "cursor-pointer border-0 bg-transparent",
374
+ "disabled:opacity-[var(--opacity-control-disabled,0.4)] disabled:cursor-not-allowed"
375
+ ],
376
+ {
377
+ variants: {
378
+ variant: {
379
+ plain: "bg-transparent text-inherit border-none hover:bg-transparent",
380
+ icon_secondary: [
381
+ "bg-transparent text-icon-secondary border-none",
382
+ "hover:text-hover",
383
+ "data-[selected]:bg-selected-control-bg data-[selected]:text-selected-control-text",
384
+ "data-[selected]:hover:text-hover",
385
+ "data-[expanded]:text-hover"
386
+ ],
387
+ icon_background: [
388
+ "bg-[var(--color-button-icon-background-bg)] text-icon-secondary border-none",
389
+ "hover:text-hover",
390
+ "data-[selected]:bg-selected-control-bg data-[selected]:text-selected-control-text",
391
+ "data-[selected]:hover:text-hover",
392
+ "data-[expanded]:text-hover"
393
+ ],
394
+ link: [
395
+ "bg-transparent text-link-primary border-none font-normal px-0 h-auto",
396
+ "hover:bg-transparent hover:text-link-primary-hover",
397
+ "disabled:text-text-secondary"
398
+ ],
399
+ dropdown: [
400
+ "border-2 border-solid bg-transparent",
401
+ "text-[var(--color-button-dropdown-fg)] border-[var(--color-button-dropdown-border)]",
402
+ "hover:bg-transparent hover:text-hover hover:border-hover",
403
+ "data-[expanded]:bg-transparent data-[expanded]:text-hover data-[expanded]:border-hover",
404
+ "data-[selected]:bg-selected-control-bg data-[selected]:text-selected-control-text data-[selected]:border-transparent",
405
+ "data-[selected]:hover:text-hover"
406
+ ],
407
+ pagination: [
408
+ "border-2 border-solid bg-transparent",
409
+ "text-[var(--color-button-pagination-fg)] border-[var(--color-button-pagination-border)]",
410
+ "hover:bg-transparent hover:text-hover hover:border-hover",
411
+ "data-[selected]:bg-selected-control-bg data-[selected]:text-selected-control-text data-[selected]:border-transparent"
412
+ ]
413
+ },
414
+ size: {
415
+ "2xs": "size-5 rounded-sm [&_svg]:size-5",
416
+ "2xs_alt": "size-5 rounded-sm [&_svg]:size-3",
417
+ md: "size-8 rounded-[var(--radius-base,8px)] [&_svg]:size-5"
418
+ }
419
+ },
420
+ defaultVariants: {
421
+ variant: "plain"
422
+ }
423
+ }
424
+ );
425
+ var IconButton = React__namespace.default.forwardRef(
426
+ function IconButton2(props, ref) {
427
+ const {
428
+ size,
429
+ variant = "plain",
430
+ loading,
431
+ loadingSkeleton = false,
432
+ expanded,
433
+ selected,
434
+ highlighted,
435
+ disabled,
436
+ className,
437
+ children,
438
+ as: Comp = "button",
439
+ style: styleProp,
440
+ // Strip Chakra style props
441
+ boxSize: _boxSize,
442
+ color: _color,
443
+ px: _px,
444
+ borderRadius: _borderRadius,
445
+ ml: _ml,
446
+ mr: _mr,
447
+ _hover,
448
+ _expanded,
449
+ ...rest
450
+ } = props;
451
+ const SP = 4;
452
+ const shimStyle = { ...styleProp };
453
+ if (_boxSize !== void 0) {
454
+ const bs = typeof _boxSize === "number" ? `${_boxSize * SP}px` : _boxSize;
455
+ shimStyle.width = bs;
456
+ shimStyle.height = bs;
457
+ }
458
+ if (_color) shimStyle.color = _color;
459
+ if (_px !== void 0) {
460
+ const v = typeof _px === "number" ? `${_px * SP}px` : _px;
461
+ shimStyle.paddingLeft = v;
462
+ shimStyle.paddingRight = v;
463
+ }
464
+ if (_borderRadius) shimStyle.borderRadius = _borderRadius;
465
+ if (_ml !== void 0) shimStyle.marginLeft = typeof _ml === "number" ? `${_ml * SP}px` : _ml;
466
+ if (_mr !== void 0) shimStyle.marginRight = typeof _mr === "number" ? `${_mr * SP}px` : _mr;
467
+ const mergedBtnStyle = Object.keys(shimStyle).length > 0 ? shimStyle : void 0;
468
+ const button = /* @__PURE__ */ jsxRuntime.jsx(
469
+ Comp,
470
+ {
471
+ ref,
472
+ type: Comp === "button" ? "button" : void 0,
473
+ disabled: !loadingSkeleton && (loading || disabled),
474
+ className: cn(iconButtonVariants({ variant, size }), className),
475
+ style: mergedBtnStyle,
476
+ ...expanded ? { "data-expanded": true } : {},
477
+ ...selected ? { "data-selected": true } : {},
478
+ ...highlighted ? { "data-highlighted": true } : {},
479
+ ...loadingSkeleton ? { "data-loading-skeleton": true } : {},
480
+ ...rest,
481
+ children: loading ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-block size-5 animate-spin rounded-full border-2 border-current border-b-transparent border-l-transparent" }) : children
482
+ }
483
+ );
484
+ if (loadingSkeleton) {
485
+ return /* @__PURE__ */ jsxRuntime.jsx(Skeleton, { loading: loadingSkeleton, asChild: true, ref, children: button });
486
+ }
487
+ return button;
488
+ }
489
+ );
490
+
491
+ exports.IconButton = IconButton;
@@ -0,0 +1,33 @@
1
+ import React__default from 'react';
2
+
3
+ type Variant = 'plain' | 'icon_secondary' | 'icon_background' | 'link' | 'dropdown' | 'pagination';
4
+ type Size = '2xs' | '2xs_alt' | 'md';
5
+ interface IconButtonProps extends React__default.ButtonHTMLAttributes<HTMLButtonElement> {
6
+ /** Visual variant */
7
+ variant?: Variant;
8
+ /** Icon-button size */
9
+ size?: Size;
10
+ /** Show a loading spinner (disables button) */
11
+ loading?: boolean;
12
+ /** Render a skeleton placeholder instead of the button */
13
+ loadingSkeleton?: boolean;
14
+ /** Maps to data-expanded for popover trigger styling */
15
+ expanded?: boolean;
16
+ /** Maps to data-selected for toggle styling */
17
+ selected?: boolean;
18
+ /** Maps to data-highlighted */
19
+ highlighted?: boolean;
20
+ /** Polymorphic element type (e.g. "div") */
21
+ as?: React__default.ElementType;
22
+ boxSize?: number | string;
23
+ color?: string;
24
+ px?: string | number;
25
+ borderRadius?: string;
26
+ ml?: number | string;
27
+ mr?: number | string;
28
+ _hover?: Record<string, string>;
29
+ _expanded?: Record<string, string>;
30
+ }
31
+ declare const IconButton: React__default.ForwardRefExoticComponent<IconButtonProps & React__default.RefAttributes<HTMLButtonElement>>;
32
+
33
+ export { IconButton, type IconButtonProps };
@@ -0,0 +1,33 @@
1
+ import React__default from 'react';
2
+
3
+ type Variant = 'plain' | 'icon_secondary' | 'icon_background' | 'link' | 'dropdown' | 'pagination';
4
+ type Size = '2xs' | '2xs_alt' | 'md';
5
+ interface IconButtonProps extends React__default.ButtonHTMLAttributes<HTMLButtonElement> {
6
+ /** Visual variant */
7
+ variant?: Variant;
8
+ /** Icon-button size */
9
+ size?: Size;
10
+ /** Show a loading spinner (disables button) */
11
+ loading?: boolean;
12
+ /** Render a skeleton placeholder instead of the button */
13
+ loadingSkeleton?: boolean;
14
+ /** Maps to data-expanded for popover trigger styling */
15
+ expanded?: boolean;
16
+ /** Maps to data-selected for toggle styling */
17
+ selected?: boolean;
18
+ /** Maps to data-highlighted */
19
+ highlighted?: boolean;
20
+ /** Polymorphic element type (e.g. "div") */
21
+ as?: React__default.ElementType;
22
+ boxSize?: number | string;
23
+ color?: string;
24
+ px?: string | number;
25
+ borderRadius?: string;
26
+ ml?: number | string;
27
+ mr?: number | string;
28
+ _hover?: Record<string, string>;
29
+ _expanded?: Record<string, string>;
30
+ }
31
+ declare const IconButton: React__default.ForwardRefExoticComponent<IconButtonProps & React__default.RefAttributes<HTMLButtonElement>>;
32
+
33
+ export { IconButton, type IconButtonProps };