@luxfi/ui 7.0.0 → 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 (60) hide show
  1. package/dist/alert.cjs +162 -285
  2. package/dist/alert.js +162 -285
  3. package/dist/badge.cjs +162 -321
  4. package/dist/badge.d.cts +3 -7
  5. package/dist/badge.d.ts +3 -7
  6. package/dist/badge.js +162 -320
  7. package/dist/button.cjs +373 -484
  8. package/dist/button.d.cts +10 -7
  9. package/dist/button.d.ts +10 -7
  10. package/dist/button.js +373 -484
  11. package/dist/close-button.cjs +37 -18
  12. package/dist/close-button.d.cts +1 -1
  13. package/dist/close-button.d.ts +1 -1
  14. package/dist/close-button.js +37 -18
  15. package/dist/collapsible.cjs +125 -272
  16. package/dist/collapsible.js +125 -272
  17. package/dist/dialog.cjs +60 -44
  18. package/dist/dialog.d.cts +7 -8
  19. package/dist/dialog.d.ts +7 -8
  20. package/dist/dialog.js +60 -43
  21. package/dist/drawer.cjs +37 -13
  22. package/dist/drawer.js +37 -13
  23. package/dist/heading.cjs +3 -8
  24. package/dist/heading.js +3 -8
  25. package/dist/icon-button.cjs +213 -337
  26. package/dist/icon-button.d.cts +4 -4
  27. package/dist/icon-button.d.ts +4 -4
  28. package/dist/icon-button.js +213 -338
  29. package/dist/image.cjs +125 -272
  30. package/dist/image.js +125 -272
  31. package/dist/index.cjs +604 -700
  32. package/dist/index.d.cts +0 -3
  33. package/dist/index.d.ts +0 -3
  34. package/dist/index.js +604 -698
  35. package/dist/link.cjs +125 -272
  36. package/dist/link.js +125 -272
  37. package/dist/popover.cjs +55 -40
  38. package/dist/popover.js +55 -39
  39. package/dist/select.cjs +125 -272
  40. package/dist/select.js +125 -272
  41. package/dist/skeleton.cjs +125 -272
  42. package/dist/skeleton.js +125 -272
  43. package/dist/table.cjs +127 -274
  44. package/dist/table.js +127 -274
  45. package/dist/tag.cjs +184 -306
  46. package/dist/tag.js +184 -305
  47. package/dist/tooltip.cjs +22 -21
  48. package/dist/tooltip.d.cts +2 -3
  49. package/dist/tooltip.d.ts +2 -3
  50. package/dist/tooltip.js +22 -20
  51. package/package.json +9 -7
  52. package/src/badge.tsx +20 -31
  53. package/src/button.tsx +304 -238
  54. package/src/close-button.tsx +48 -22
  55. package/src/dialog.tsx +37 -47
  56. package/src/heading.tsx +8 -19
  57. package/src/icon-button.tsx +129 -104
  58. package/src/popover.tsx +30 -44
  59. package/src/skeleton.tsx +96 -144
  60. package/src/tooltip.tsx +54 -47
package/dist/alert.cjs CHANGED
@@ -5,6 +5,7 @@ var classVarianceAuthority = require('class-variance-authority');
5
5
  var React2 = require('react');
6
6
  var clsx = require('clsx');
7
7
  var tailwindMerge = require('tailwind-merge');
8
+ var core = require('@hanzogui/core');
8
9
  var jsxRuntime = require('react/jsx-runtime');
9
10
 
10
11
  function _interopNamespace(e) {
@@ -32,24 +33,47 @@ function cn(...inputs) {
32
33
  return tailwindMerge.twMerge(clsx.clsx(inputs));
33
34
  }
34
35
  var CLOSE_ICON_PATH = "M9.44 8.035a.791.791 0 0 0 1.12 0l3.802-3.803a.791.791 0 0 1 1.119 0l.287.287a.79.79 0 0 1 0 1.119L11.965 9.44a.79.79 0 0 0 0 1.118l3.803 3.803a.791.791 0 0 1 0 1.119l-.287.287a.791.791 0 0 1-1.119 0l-3.803-3.803a.79.79 0 0 0-1.118 0l-3.803 3.803a.79.79 0 0 1-1.119 0l-.287-.287a.791.791 0 0 1 0-1.119l3.803-3.803a.791.791 0 0 0 0-1.118L4.232 5.638a.791.791 0 0 1 0-1.119l.287-.287a.791.791 0 0 1 1.119 0L9.44 8.035Z";
36
+ var CloseButtonFrame = core.styled(core.View, {
37
+ name: "LuxCloseButton",
38
+ render: /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", "aria-label": "Close" }),
39
+ role: "button",
40
+ cursor: "pointer",
41
+ display: "inline-flex",
42
+ alignItems: "center",
43
+ justifyContent: "center",
44
+ width: 20,
45
+ height: 20,
46
+ minWidth: 0,
47
+ flexShrink: 1,
48
+ padding: 0,
49
+ borderRadius: 4,
50
+ borderWidth: 0,
51
+ overflow: "hidden",
52
+ backgroundColor: "transparent",
53
+ hoverStyle: {
54
+ backgroundColor: "transparent"
55
+ },
56
+ variants: {
57
+ disabled: {
58
+ true: {
59
+ opacity: 0.4,
60
+ pointerEvents: "none"
61
+ }
62
+ }
63
+ }
64
+ });
65
+ var CLOSE_BUTTON_CLASSES = [
66
+ "text-[var(--closeButton-fg,currentColor)]",
67
+ "hover:text-[var(--hover-color,currentColor)]",
68
+ "disabled:opacity-40"
69
+ ].join(" ");
35
70
  var CloseButton = React2__namespace.forwardRef(function CloseButton2(props, ref) {
36
71
  const { variant: _variant, size: _size, className, children, ...rest } = props;
37
72
  return /* @__PURE__ */ jsxRuntime.jsx(
38
- "button",
73
+ CloseButtonFrame,
39
74
  {
40
- type: "button",
41
- "aria-label": "Close",
42
75
  ref,
43
- className: cn(
44
- "inline-flex items-center justify-center",
45
- "size-5 min-w-0 shrink-0 p-0",
46
- "rounded-sm border-0 overflow-hidden",
47
- "bg-transparent text-[var(--closeButton-fg,currentColor)]",
48
- "hover:bg-transparent hover:text-[var(--hover-color,currentColor)]",
49
- "disabled:opacity-40",
50
- "cursor-pointer",
51
- className
52
- ),
76
+ className: [CLOSE_BUTTON_CLASSES, className].filter(Boolean).join(" "),
53
77
  ...rest,
54
78
  children: children ?? /* @__PURE__ */ jsxRuntime.jsx(
55
79
  "svg",
@@ -70,272 +94,137 @@ var CloseButton = React2__namespace.forwardRef(function CloseButton2(props, ref)
70
94
  }
71
95
  );
72
96
  });
73
- var SPACING_SCALE = 4;
74
- function toStylePx(value) {
75
- if (value === void 0) return void 0;
76
- if (typeof value === "string") return value;
77
- return `${value * SPACING_SCALE}px`;
97
+ var SHIM_PROPS = [
98
+ "w",
99
+ "h",
100
+ "minW",
101
+ "maxW",
102
+ "display",
103
+ "flexGrow",
104
+ "flexShrink",
105
+ "flexBasis",
106
+ "fontWeight",
107
+ "textStyle",
108
+ "borderRadius",
109
+ "alignSelf",
110
+ "alignItems",
111
+ "justifyContent",
112
+ "color",
113
+ "mt",
114
+ "mb",
115
+ "ml",
116
+ "mr",
117
+ "height",
118
+ "overflow",
119
+ "whiteSpace",
120
+ "textOverflow",
121
+ "textTransform",
122
+ "gap",
123
+ "gridTemplateColumns",
124
+ "minWidth",
125
+ "boxSize",
126
+ "py",
127
+ "px",
128
+ "p",
129
+ "hideBelow",
130
+ "fontSize",
131
+ "flexWrap",
132
+ "wordBreak",
133
+ "lineHeight",
134
+ "marginRight",
135
+ "position",
136
+ "background"
137
+ ];
138
+ var S = 4;
139
+ function dim(v) {
140
+ if (v == null) return void 0;
141
+ if (typeof v === "number") return `${v * S}px`;
142
+ if (typeof v === "string") return v;
143
+ if (typeof v === "object") {
144
+ const o = v;
145
+ return o.base ?? o.lg ?? o.xl ?? Object.values(o)[0];
146
+ }
147
+ return void 0;
78
148
  }
79
- function extractSkeletonStyleProps(props) {
80
- const style = {};
81
- const rest = {};
82
- function resolveDimension(value) {
83
- if (value === void 0 || value === null) return void 0;
84
- if (typeof value === "number") return `${value * SPACING_SCALE}px`;
85
- if (typeof value === "string") return value;
86
- if (typeof value === "object") {
87
- const obj = value;
88
- return obj.base ?? obj.lg ?? obj.xl ?? Object.values(obj)[0];
89
- }
90
- return void 0;
149
+ function sp(v) {
150
+ if (v === void 0) return void 0;
151
+ return typeof v === "number" ? `${v * S}px` : v;
152
+ }
153
+ function shimToStyle(props) {
154
+ const s = {};
155
+ if (props.w !== void 0) s.width = dim(props.w);
156
+ if (props.h !== void 0) s.height = dim(props.h);
157
+ if (props.minW !== void 0) s.minWidth = dim(props.minW);
158
+ if (props.maxW !== void 0) s.maxWidth = dim(props.maxW);
159
+ if (props.display !== void 0) s.display = props.display;
160
+ if (props.flexGrow !== void 0) s.flexGrow = props.flexGrow;
161
+ if (props.flexShrink !== void 0) s.flexShrink = props.flexShrink;
162
+ if (props.flexBasis !== void 0) s.flexBasis = props.flexBasis;
163
+ if (props.fontWeight !== void 0) s.fontWeight = props.fontWeight;
164
+ if (props.borderRadius !== void 0) s.borderRadius = props.borderRadius;
165
+ if (props.alignSelf !== void 0) s.alignSelf = props.alignSelf;
166
+ if (props.alignItems !== void 0) s.alignItems = props.alignItems;
167
+ if (props.justifyContent !== void 0) s.justifyContent = props.justifyContent;
168
+ if (props.color !== void 0) s.color = props.color;
169
+ if (props.mt !== void 0) s.marginTop = sp(props.mt);
170
+ if (props.mb !== void 0) s.marginBottom = sp(props.mb);
171
+ if (props.ml !== void 0) s.marginLeft = sp(props.ml);
172
+ if (props.mr !== void 0) s.marginRight = sp(props.mr);
173
+ if (props.height !== void 0) s.height = props.height;
174
+ if (props.overflow !== void 0) s.overflow = props.overflow;
175
+ if (props.whiteSpace !== void 0) s.whiteSpace = props.whiteSpace;
176
+ if (props.textOverflow !== void 0) s.textOverflow = props.textOverflow;
177
+ if (props.textTransform !== void 0) s.textTransform = props.textTransform;
178
+ if (props.gap !== void 0) s.gap = sp(props.gap);
179
+ if (props.gridTemplateColumns !== void 0) s.gridTemplateColumns = props.gridTemplateColumns;
180
+ if (props.minWidth !== void 0) s.minWidth = props.minWidth;
181
+ if (props.boxSize !== void 0) {
182
+ const v = typeof props.boxSize === "number" ? `${props.boxSize * S}px` : props.boxSize;
183
+ s.width = v;
184
+ s.height = v;
91
185
  }
92
- for (const [key, value] of Object.entries(props)) {
93
- if (value === void 0) continue;
94
- switch (key) {
95
- case "w": {
96
- const v = resolveDimension(value);
97
- if (v) style.width = v;
98
- break;
99
- }
100
- case "h": {
101
- const v = resolveDimension(value);
102
- if (v) style.height = v;
103
- break;
104
- }
105
- case "minW": {
106
- const v = resolveDimension(value);
107
- if (v) style.minWidth = v;
108
- break;
109
- }
110
- case "maxW": {
111
- const v = resolveDimension(value);
112
- if (v) style.maxWidth = v;
113
- break;
114
- }
115
- case "height":
116
- style.height = value;
117
- break;
118
- case "display":
119
- style.display = value;
120
- break;
121
- case "flexGrow":
122
- style.flexGrow = value;
123
- break;
124
- case "flexShrink":
125
- style.flexShrink = value;
126
- break;
127
- case "flexBasis":
128
- style.flexBasis = value;
129
- break;
130
- case "fontWeight":
131
- style.fontWeight = value;
132
- break;
133
- case "borderRadius":
134
- style.borderRadius = value;
135
- break;
136
- case "alignSelf":
137
- style.alignSelf = value;
138
- break;
139
- case "alignItems":
140
- style.alignItems = value;
141
- break;
142
- case "justifyContent":
143
- style.justifyContent = value;
144
- break;
145
- case "color":
146
- style.color = value;
147
- break;
148
- case "mt":
149
- style.marginTop = toStylePx(value);
150
- break;
151
- case "mb":
152
- style.marginBottom = toStylePx(value);
153
- break;
154
- case "ml":
155
- style.marginLeft = toStylePx(value);
156
- break;
157
- case "mr":
158
- style.marginRight = toStylePx(value);
159
- break;
160
- case "overflow":
161
- style.overflow = value;
162
- break;
163
- case "whiteSpace":
164
- style.whiteSpace = value;
165
- break;
166
- case "textOverflow":
167
- style.textOverflow = value;
168
- break;
169
- case "textTransform":
170
- style.textTransform = value;
171
- break;
172
- case "gap":
173
- style.gap = typeof value === "number" ? `${value * SPACING_SCALE}px` : value;
174
- break;
175
- case "gridTemplateColumns":
176
- style.gridTemplateColumns = value;
177
- break;
178
- case "minWidth":
179
- style.minWidth = value;
180
- break;
181
- case "boxSize": {
182
- const s = typeof value === "number" ? `${value * SPACING_SCALE}px` : value;
183
- style.width = s;
184
- style.height = s;
185
- break;
186
- }
187
- case "py": {
188
- const v = toStylePx(value);
189
- style.paddingTop = v;
190
- style.paddingBottom = v;
191
- break;
192
- }
193
- case "px": {
194
- const v = toStylePx(value);
195
- style.paddingLeft = v;
196
- style.paddingRight = v;
197
- break;
198
- }
199
- case "p": {
200
- const v = toStylePx(value);
201
- style.padding = v;
202
- break;
203
- }
204
- case "hideBelow":
205
- break;
206
- // handled via className
207
- case "textStyle":
208
- break;
209
- // drop textStyle, not directly applicable
210
- case "fontSize":
211
- style.fontSize = value;
212
- break;
213
- case "flexWrap":
214
- style.flexWrap = value;
215
- break;
216
- case "wordBreak":
217
- style.wordBreak = value;
218
- break;
219
- case "lineHeight":
220
- style.lineHeight = value;
221
- break;
222
- case "marginRight":
223
- style.marginRight = value;
224
- break;
225
- case "position":
226
- style.position = value;
227
- break;
228
- case "background":
229
- style.background = value;
230
- break;
231
- default:
232
- rest[key] = value;
233
- break;
234
- }
186
+ if (props.py !== void 0) {
187
+ const v = sp(props.py);
188
+ s.paddingTop = v;
189
+ s.paddingBottom = v;
190
+ }
191
+ if (props.px !== void 0) {
192
+ const v = sp(props.px);
193
+ s.paddingLeft = v;
194
+ s.paddingRight = v;
235
195
  }
236
- return { style, rest };
196
+ if (props.p !== void 0) s.padding = sp(props.p);
197
+ if (props.fontSize !== void 0) s.fontSize = props.fontSize;
198
+ if (props.flexWrap !== void 0) s.flexWrap = props.flexWrap;
199
+ if (props.wordBreak !== void 0) s.wordBreak = props.wordBreak;
200
+ if (props.lineHeight !== void 0) s.lineHeight = props.lineHeight;
201
+ if (props.marginRight !== void 0) s.marginRight = props.marginRight;
202
+ if (props.position !== void 0) s.position = props.position;
203
+ if (props.background !== void 0) s.background = props.background;
204
+ return s;
205
+ }
206
+ function stripShims(props) {
207
+ const out = { ...props };
208
+ for (const k of SHIM_PROPS) delete out[k];
209
+ return out;
237
210
  }
211
+ var SKELETON_CLASSES = [
212
+ "animate-skeleton-shimmer rounded-sm",
213
+ "bg-[linear-gradient(90deg,var(--color-skeleton-start)_0%,var(--color-skeleton-end)_50%,var(--color-skeleton-start)_100%)]",
214
+ "bg-[length:200%_100%]"
215
+ ].join(" ");
216
+ var HIDE_BELOW_MAP = { lg: "lg:hidden", md: "md:hidden", sm: "sm:hidden" };
238
217
  var Skeleton = React2__namespace.forwardRef(
239
218
  function Skeleton2(props, ref) {
240
- const {
241
- loading = false,
242
- asChild,
243
- className,
244
- children,
245
- style: styleProp,
246
- // Destructure style-prop shims so they don't leak into DOM
247
- w: _w,
248
- h: _h,
249
- minW: _minW,
250
- maxW: _maxW,
251
- display: _display,
252
- flexGrow: _flexGrow,
253
- flexShrink: _flexShrink,
254
- flexBasis: _flexBasis,
255
- fontWeight: _fontWeight,
256
- textStyle: _textStyle,
257
- borderRadius: _borderRadius,
258
- alignSelf: _alignSelf,
259
- alignItems: _alignItems,
260
- justifyContent: _justifyContent,
261
- color: _color,
262
- mt: _mt,
263
- mb: _mb,
264
- ml: _ml,
265
- mr: _mr,
266
- height: _height,
267
- overflow: _overflow,
268
- whiteSpace: _whiteSpace,
269
- textOverflow: _textOverflow,
270
- textTransform: _textTransform,
271
- gap: _gap,
272
- gridTemplateColumns: _gridTemplateColumns,
273
- minWidth: _minWidth,
274
- boxSize: _boxSize,
275
- py: _py,
276
- px: _px,
277
- p: _p,
278
- hideBelow: _hideBelow,
279
- fontSize: _fontSize,
280
- flexWrap: _flexWrap,
281
- wordBreak: _wordBreak,
282
- lineHeight: _lineHeight,
283
- marginRight: _marginRight,
284
- position: _position,
285
- background: _background,
286
- as: Component = "div",
287
- ...htmlRest
288
- } = props;
289
- const { style: shimStyle } = extractSkeletonStyleProps({
290
- w: _w,
291
- h: _h,
292
- minW: _minW,
293
- maxW: _maxW,
294
- display: _display,
295
- flexGrow: _flexGrow,
296
- flexShrink: _flexShrink,
297
- flexBasis: _flexBasis,
298
- fontWeight: _fontWeight,
299
- textStyle: _textStyle,
300
- borderRadius: _borderRadius,
301
- alignSelf: _alignSelf,
302
- alignItems: _alignItems,
303
- justifyContent: _justifyContent,
304
- color: _color,
305
- mt: _mt,
306
- mb: _mb,
307
- ml: _ml,
308
- mr: _mr,
309
- height: _height,
310
- overflow: _overflow,
311
- whiteSpace: _whiteSpace,
312
- textOverflow: _textOverflow,
313
- textTransform: _textTransform,
314
- gap: _gap,
315
- gridTemplateColumns: _gridTemplateColumns,
316
- minWidth: _minWidth,
317
- boxSize: _boxSize,
318
- py: _py,
319
- px: _px,
320
- p: _p,
321
- hideBelow: _hideBelow,
322
- fontSize: _fontSize,
323
- flexWrap: _flexWrap,
324
- wordBreak: _wordBreak,
325
- lineHeight: _lineHeight,
326
- marginRight: _marginRight,
327
- position: _position,
328
- background: _background
329
- });
219
+ const { loading = false, asChild, className, children, style: styleProp, as: Component = "div", ...allRest } = props;
220
+ const shimStyle = shimToStyle(props);
330
221
  const mergedStyle = Object.keys(shimStyle).length > 0 || styleProp ? { ...shimStyle, ...styleProp } : void 0;
331
- const HIDE_BELOW_MAP = { lg: "lg:hidden", md: "md:hidden", sm: "sm:hidden" };
332
- const hideBelowClass = _hideBelow ? HIDE_BELOW_MAP[_hideBelow] : void 0;
333
- const finalClassName = hideBelowClass ? cn(className, hideBelowClass) : className;
222
+ const hideBelowClass = props.hideBelow ? HIDE_BELOW_MAP[props.hideBelow] : void 0;
223
+ const cls = hideBelowClass ? cn(className, hideBelowClass) : className;
224
+ const htmlRest = stripShims(allRest);
334
225
  if (!loading) {
335
- if (asChild && React2__namespace.isValidElement(children)) {
336
- return children;
337
- }
338
- return /* @__PURE__ */ jsxRuntime.jsx(Component, { ref, className: finalClassName, style: mergedStyle, ...htmlRest, children });
226
+ if (asChild && React2__namespace.isValidElement(children)) return children;
227
+ return /* @__PURE__ */ jsxRuntime.jsx(Component, { ref, className: cls, style: mergedStyle, ...htmlRest, children });
339
228
  }
340
229
  if (asChild && React2__namespace.isValidElement(children)) {
341
230
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -343,13 +232,7 @@ var Skeleton = React2__namespace.forwardRef(
343
232
  {
344
233
  ref,
345
234
  "data-loading": true,
346
- className: cn(
347
- "animate-skeleton-shimmer rounded-sm",
348
- "bg-[linear-gradient(90deg,var(--color-skeleton-start)_0%,var(--color-skeleton-end)_50%,var(--color-skeleton-start)_100%)]",
349
- "bg-[length:200%_100%]",
350
- "text-transparent [&_*]:invisible",
351
- finalClassName
352
- ),
235
+ className: cn(SKELETON_CLASSES, "text-transparent [&_*]:invisible", cls),
353
236
  style: mergedStyle,
354
237
  ...htmlRest,
355
238
  children
@@ -361,13 +244,7 @@ var Skeleton = React2__namespace.forwardRef(
361
244
  {
362
245
  ref,
363
246
  "data-loading": true,
364
- className: cn(
365
- "animate-skeleton-shimmer rounded-sm",
366
- "bg-[linear-gradient(90deg,var(--color-skeleton-start)_0%,var(--color-skeleton-end)_50%,var(--color-skeleton-start)_100%)]",
367
- "bg-[length:200%_100%]",
368
- children ? "text-transparent [&_*]:invisible" : "min-h-5",
369
- finalClassName
370
- ),
247
+ className: cn(SKELETON_CLASSES, children ? "text-transparent [&_*]:invisible" : "min-h-5", cls),
371
248
  style: mergedStyle,
372
249
  ...htmlRest,
373
250
  children