@luxfi/ui 7.0.0 → 7.2.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 (70) hide show
  1. package/dist/alert.cjs +184 -335
  2. package/dist/alert.js +184 -335
  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/bank.d.cts +1 -1
  8. package/dist/bank.d.ts +1 -1
  9. package/dist/button.cjs +373 -484
  10. package/dist/button.d.cts +10 -7
  11. package/dist/button.d.ts +10 -7
  12. package/dist/button.js +373 -484
  13. package/dist/close-button.cjs +37 -18
  14. package/dist/close-button.d.cts +1 -1
  15. package/dist/close-button.d.ts +1 -1
  16. package/dist/close-button.js +37 -18
  17. package/dist/collapsible.cjs +125 -272
  18. package/dist/collapsible.js +125 -272
  19. package/dist/dialog.cjs +60 -44
  20. package/dist/dialog.d.cts +7 -8
  21. package/dist/dialog.d.ts +7 -8
  22. package/dist/dialog.js +60 -43
  23. package/dist/drawer.cjs +37 -13
  24. package/dist/drawer.js +37 -13
  25. package/dist/heading.cjs +3 -8
  26. package/dist/heading.js +3 -8
  27. package/dist/icon-button.cjs +213 -337
  28. package/dist/icon-button.d.cts +4 -4
  29. package/dist/icon-button.d.ts +4 -4
  30. package/dist/icon-button.js +213 -338
  31. package/dist/image.cjs +125 -272
  32. package/dist/image.js +125 -272
  33. package/dist/index.cjs +695 -858
  34. package/dist/index.d.cts +0 -3
  35. package/dist/index.d.ts +0 -3
  36. package/dist/index.js +695 -856
  37. package/dist/input.cjs +25 -36
  38. package/dist/input.js +25 -36
  39. package/dist/link.cjs +125 -272
  40. package/dist/link.js +125 -272
  41. package/dist/popover.cjs +55 -40
  42. package/dist/popover.js +55 -39
  43. package/dist/select.cjs +125 -272
  44. package/dist/select.js +125 -272
  45. package/dist/skeleton.cjs +125 -272
  46. package/dist/skeleton.js +125 -272
  47. package/dist/table.cjs +127 -274
  48. package/dist/table.js +127 -274
  49. package/dist/tag.cjs +199 -341
  50. package/dist/tag.js +199 -340
  51. package/dist/textarea.cjs +25 -36
  52. package/dist/textarea.js +25 -36
  53. package/dist/tooltip.cjs +22 -21
  54. package/dist/tooltip.d.cts +2 -3
  55. package/dist/tooltip.d.ts +2 -3
  56. package/dist/tooltip.js +22 -20
  57. package/package.json +9 -8
  58. package/src/alert.tsx +23 -51
  59. package/src/badge.tsx +20 -31
  60. package/src/button.tsx +304 -238
  61. package/src/close-button.tsx +48 -22
  62. package/src/dialog.tsx +37 -47
  63. package/src/heading.tsx +8 -19
  64. package/src/icon-button.tsx +129 -104
  65. package/src/input.tsx +27 -36
  66. package/src/popover.tsx +30 -44
  67. package/src/skeleton.tsx +96 -144
  68. package/src/tag.tsx +17 -35
  69. package/src/textarea.tsx +27 -36
  70. package/src/tooltip.tsx +54 -47
package/dist/index.cjs CHANGED
@@ -6,19 +6,19 @@ var tailwindMerge = require('tailwind-merge');
6
6
  var AccordionPrimitive = require('@radix-ui/react-accordion');
7
7
  var React29 = require('react');
8
8
  var jsxRuntime = require('react/jsx-runtime');
9
- var classVarianceAuthority = require('class-variance-authority');
9
+ var core = require('@hanzogui/core');
10
10
  var RadixAvatar = require('@radix-ui/react-avatar');
11
- var RadixTooltip = require('@radix-ui/react-tooltip');
11
+ var tooltip = require('@hanzogui/tooltip');
12
12
  var usehooks = require('@uidotdev/usehooks');
13
- var reactSlot = require('@radix-ui/react-slot');
14
13
  var RadixCheckbox = require('@radix-ui/react-checkbox');
15
14
  var Collapsible = require('@radix-ui/react-collapsible');
15
+ var dialog = require('@hanzogui/dialog');
16
16
  var RadixDialog = require('@radix-ui/react-dialog');
17
17
  var LabelPrimitive = require('@radix-ui/react-label');
18
18
  var esToolkit = require('es-toolkit');
19
19
  var DropdownMenu = require('@radix-ui/react-dropdown-menu');
20
20
  var lu = require('react-icons/lu');
21
- var RadixPopover = require('@radix-ui/react-popover');
21
+ var popover = require('@hanzogui/popover');
22
22
  var RadixProgress = require('@radix-ui/react-progress');
23
23
  var RadixRadioGroup = require('@radix-ui/react-radio-group');
24
24
  var RadixSelect = require('@radix-ui/react-select');
@@ -26,7 +26,6 @@ var RadixSlider = require('@radix-ui/react-slider');
26
26
  var RadixSwitch = require('@radix-ui/react-switch');
27
27
  var RadixTabs = require('@radix-ui/react-tabs');
28
28
  var sonner = require('sonner');
29
- var core = require('@hanzogui/core');
30
29
 
31
30
  function _interopNamespace(e) {
32
31
  if (e && e.__esModule) return e;
@@ -49,13 +48,11 @@ function _interopNamespace(e) {
49
48
  var AccordionPrimitive__namespace = /*#__PURE__*/_interopNamespace(AccordionPrimitive);
50
49
  var React29__namespace = /*#__PURE__*/_interopNamespace(React29);
51
50
  var RadixAvatar__namespace = /*#__PURE__*/_interopNamespace(RadixAvatar);
52
- var RadixTooltip__namespace = /*#__PURE__*/_interopNamespace(RadixTooltip);
53
51
  var RadixCheckbox__namespace = /*#__PURE__*/_interopNamespace(RadixCheckbox);
54
52
  var Collapsible__namespace = /*#__PURE__*/_interopNamespace(Collapsible);
55
53
  var RadixDialog__namespace = /*#__PURE__*/_interopNamespace(RadixDialog);
56
54
  var LabelPrimitive__namespace = /*#__PURE__*/_interopNamespace(LabelPrimitive);
57
55
  var DropdownMenu__namespace = /*#__PURE__*/_interopNamespace(DropdownMenu);
58
- var RadixPopover__namespace = /*#__PURE__*/_interopNamespace(RadixPopover);
59
56
  var RadixProgress__namespace = /*#__PURE__*/_interopNamespace(RadixProgress);
60
57
  var RadixRadioGroup__namespace = /*#__PURE__*/_interopNamespace(RadixRadioGroup);
61
58
  var RadixSelect__namespace = /*#__PURE__*/_interopNamespace(RadixSelect);
@@ -241,24 +238,47 @@ function useAccordion(items) {
241
238
  }, [value, onValueChange, scrollToItemFromUrl]);
242
239
  }
243
240
  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";
241
+ var CloseButtonFrame = core.styled(core.View, {
242
+ name: "LuxCloseButton",
243
+ render: /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", "aria-label": "Close" }),
244
+ role: "button",
245
+ cursor: "pointer",
246
+ display: "inline-flex",
247
+ alignItems: "center",
248
+ justifyContent: "center",
249
+ width: 20,
250
+ height: 20,
251
+ minWidth: 0,
252
+ flexShrink: 1,
253
+ padding: 0,
254
+ borderRadius: 4,
255
+ borderWidth: 0,
256
+ overflow: "hidden",
257
+ backgroundColor: "transparent",
258
+ hoverStyle: {
259
+ backgroundColor: "transparent"
260
+ },
261
+ variants: {
262
+ disabled: {
263
+ true: {
264
+ opacity: 0.4,
265
+ pointerEvents: "none"
266
+ }
267
+ }
268
+ }
269
+ });
270
+ var CLOSE_BUTTON_CLASSES = [
271
+ "text-[var(--closeButton-fg,currentColor)]",
272
+ "hover:text-[var(--hover-color,currentColor)]",
273
+ "disabled:opacity-40"
274
+ ].join(" ");
244
275
  var CloseButton = React29__namespace.forwardRef(function CloseButton2(props, ref) {
245
276
  const { variant: _variant, size: _size, className, children, ...rest } = props;
246
277
  return /* @__PURE__ */ jsxRuntime.jsx(
247
- "button",
278
+ CloseButtonFrame,
248
279
  {
249
- type: "button",
250
- "aria-label": "Close",
251
280
  ref,
252
- className: cn(
253
- "inline-flex items-center justify-center",
254
- "size-5 min-w-0 shrink-0 p-0",
255
- "rounded-sm border-0 overflow-hidden",
256
- "bg-transparent text-[var(--closeButton-fg,currentColor)]",
257
- "hover:bg-transparent hover:text-[var(--hover-color,currentColor)]",
258
- "disabled:opacity-40",
259
- "cursor-pointer",
260
- className
261
- ),
281
+ className: [CLOSE_BUTTON_CLASSES, className].filter(Boolean).join(" "),
262
282
  ...rest,
263
283
  children: children ?? /* @__PURE__ */ jsxRuntime.jsx(
264
284
  "svg",
@@ -279,272 +299,137 @@ var CloseButton = React29__namespace.forwardRef(function CloseButton2(props, ref
279
299
  }
280
300
  );
281
301
  });
282
- var SPACING_SCALE = 4;
283
- function toStylePx(value) {
284
- if (value === void 0) return void 0;
285
- if (typeof value === "string") return value;
286
- return `${value * SPACING_SCALE}px`;
302
+ var SHIM_PROPS = [
303
+ "w",
304
+ "h",
305
+ "minW",
306
+ "maxW",
307
+ "display",
308
+ "flexGrow",
309
+ "flexShrink",
310
+ "flexBasis",
311
+ "fontWeight",
312
+ "textStyle",
313
+ "borderRadius",
314
+ "alignSelf",
315
+ "alignItems",
316
+ "justifyContent",
317
+ "color",
318
+ "mt",
319
+ "mb",
320
+ "ml",
321
+ "mr",
322
+ "height",
323
+ "overflow",
324
+ "whiteSpace",
325
+ "textOverflow",
326
+ "textTransform",
327
+ "gap",
328
+ "gridTemplateColumns",
329
+ "minWidth",
330
+ "boxSize",
331
+ "py",
332
+ "px",
333
+ "p",
334
+ "hideBelow",
335
+ "fontSize",
336
+ "flexWrap",
337
+ "wordBreak",
338
+ "lineHeight",
339
+ "marginRight",
340
+ "position",
341
+ "background"
342
+ ];
343
+ var S = 4;
344
+ function dim(v) {
345
+ if (v == null) return void 0;
346
+ if (typeof v === "number") return `${v * S}px`;
347
+ if (typeof v === "string") return v;
348
+ if (typeof v === "object") {
349
+ const o = v;
350
+ return o.base ?? o.lg ?? o.xl ?? Object.values(o)[0];
351
+ }
352
+ return void 0;
287
353
  }
288
- function extractSkeletonStyleProps(props) {
289
- const style = {};
290
- const rest = {};
291
- function resolveDimension(value) {
292
- if (value === void 0 || value === null) return void 0;
293
- if (typeof value === "number") return `${value * SPACING_SCALE}px`;
294
- if (typeof value === "string") return value;
295
- if (typeof value === "object") {
296
- const obj = value;
297
- return obj.base ?? obj.lg ?? obj.xl ?? Object.values(obj)[0];
298
- }
299
- return void 0;
354
+ function sp(v) {
355
+ if (v === void 0) return void 0;
356
+ return typeof v === "number" ? `${v * S}px` : v;
357
+ }
358
+ function shimToStyle(props) {
359
+ const s = {};
360
+ if (props.w !== void 0) s.width = dim(props.w);
361
+ if (props.h !== void 0) s.height = dim(props.h);
362
+ if (props.minW !== void 0) s.minWidth = dim(props.minW);
363
+ if (props.maxW !== void 0) s.maxWidth = dim(props.maxW);
364
+ if (props.display !== void 0) s.display = props.display;
365
+ if (props.flexGrow !== void 0) s.flexGrow = props.flexGrow;
366
+ if (props.flexShrink !== void 0) s.flexShrink = props.flexShrink;
367
+ if (props.flexBasis !== void 0) s.flexBasis = props.flexBasis;
368
+ if (props.fontWeight !== void 0) s.fontWeight = props.fontWeight;
369
+ if (props.borderRadius !== void 0) s.borderRadius = props.borderRadius;
370
+ if (props.alignSelf !== void 0) s.alignSelf = props.alignSelf;
371
+ if (props.alignItems !== void 0) s.alignItems = props.alignItems;
372
+ if (props.justifyContent !== void 0) s.justifyContent = props.justifyContent;
373
+ if (props.color !== void 0) s.color = props.color;
374
+ if (props.mt !== void 0) s.marginTop = sp(props.mt);
375
+ if (props.mb !== void 0) s.marginBottom = sp(props.mb);
376
+ if (props.ml !== void 0) s.marginLeft = sp(props.ml);
377
+ if (props.mr !== void 0) s.marginRight = sp(props.mr);
378
+ if (props.height !== void 0) s.height = props.height;
379
+ if (props.overflow !== void 0) s.overflow = props.overflow;
380
+ if (props.whiteSpace !== void 0) s.whiteSpace = props.whiteSpace;
381
+ if (props.textOverflow !== void 0) s.textOverflow = props.textOverflow;
382
+ if (props.textTransform !== void 0) s.textTransform = props.textTransform;
383
+ if (props.gap !== void 0) s.gap = sp(props.gap);
384
+ if (props.gridTemplateColumns !== void 0) s.gridTemplateColumns = props.gridTemplateColumns;
385
+ if (props.minWidth !== void 0) s.minWidth = props.minWidth;
386
+ if (props.boxSize !== void 0) {
387
+ const v = typeof props.boxSize === "number" ? `${props.boxSize * S}px` : props.boxSize;
388
+ s.width = v;
389
+ s.height = v;
300
390
  }
301
- for (const [key, value] of Object.entries(props)) {
302
- if (value === void 0) continue;
303
- switch (key) {
304
- case "w": {
305
- const v = resolveDimension(value);
306
- if (v) style.width = v;
307
- break;
308
- }
309
- case "h": {
310
- const v = resolveDimension(value);
311
- if (v) style.height = v;
312
- break;
313
- }
314
- case "minW": {
315
- const v = resolveDimension(value);
316
- if (v) style.minWidth = v;
317
- break;
318
- }
319
- case "maxW": {
320
- const v = resolveDimension(value);
321
- if (v) style.maxWidth = v;
322
- break;
323
- }
324
- case "height":
325
- style.height = value;
326
- break;
327
- case "display":
328
- style.display = value;
329
- break;
330
- case "flexGrow":
331
- style.flexGrow = value;
332
- break;
333
- case "flexShrink":
334
- style.flexShrink = value;
335
- break;
336
- case "flexBasis":
337
- style.flexBasis = value;
338
- break;
339
- case "fontWeight":
340
- style.fontWeight = value;
341
- break;
342
- case "borderRadius":
343
- style.borderRadius = value;
344
- break;
345
- case "alignSelf":
346
- style.alignSelf = value;
347
- break;
348
- case "alignItems":
349
- style.alignItems = value;
350
- break;
351
- case "justifyContent":
352
- style.justifyContent = value;
353
- break;
354
- case "color":
355
- style.color = value;
356
- break;
357
- case "mt":
358
- style.marginTop = toStylePx(value);
359
- break;
360
- case "mb":
361
- style.marginBottom = toStylePx(value);
362
- break;
363
- case "ml":
364
- style.marginLeft = toStylePx(value);
365
- break;
366
- case "mr":
367
- style.marginRight = toStylePx(value);
368
- break;
369
- case "overflow":
370
- style.overflow = value;
371
- break;
372
- case "whiteSpace":
373
- style.whiteSpace = value;
374
- break;
375
- case "textOverflow":
376
- style.textOverflow = value;
377
- break;
378
- case "textTransform":
379
- style.textTransform = value;
380
- break;
381
- case "gap":
382
- style.gap = typeof value === "number" ? `${value * SPACING_SCALE}px` : value;
383
- break;
384
- case "gridTemplateColumns":
385
- style.gridTemplateColumns = value;
386
- break;
387
- case "minWidth":
388
- style.minWidth = value;
389
- break;
390
- case "boxSize": {
391
- const s = typeof value === "number" ? `${value * SPACING_SCALE}px` : value;
392
- style.width = s;
393
- style.height = s;
394
- break;
395
- }
396
- case "py": {
397
- const v = toStylePx(value);
398
- style.paddingTop = v;
399
- style.paddingBottom = v;
400
- break;
401
- }
402
- case "px": {
403
- const v = toStylePx(value);
404
- style.paddingLeft = v;
405
- style.paddingRight = v;
406
- break;
407
- }
408
- case "p": {
409
- const v = toStylePx(value);
410
- style.padding = v;
411
- break;
412
- }
413
- case "hideBelow":
414
- break;
415
- // handled via className
416
- case "textStyle":
417
- break;
418
- // drop textStyle, not directly applicable
419
- case "fontSize":
420
- style.fontSize = value;
421
- break;
422
- case "flexWrap":
423
- style.flexWrap = value;
424
- break;
425
- case "wordBreak":
426
- style.wordBreak = value;
427
- break;
428
- case "lineHeight":
429
- style.lineHeight = value;
430
- break;
431
- case "marginRight":
432
- style.marginRight = value;
433
- break;
434
- case "position":
435
- style.position = value;
436
- break;
437
- case "background":
438
- style.background = value;
439
- break;
440
- default:
441
- rest[key] = value;
442
- break;
443
- }
391
+ if (props.py !== void 0) {
392
+ const v = sp(props.py);
393
+ s.paddingTop = v;
394
+ s.paddingBottom = v;
444
395
  }
445
- return { style, rest };
396
+ if (props.px !== void 0) {
397
+ const v = sp(props.px);
398
+ s.paddingLeft = v;
399
+ s.paddingRight = v;
400
+ }
401
+ if (props.p !== void 0) s.padding = sp(props.p);
402
+ if (props.fontSize !== void 0) s.fontSize = props.fontSize;
403
+ if (props.flexWrap !== void 0) s.flexWrap = props.flexWrap;
404
+ if (props.wordBreak !== void 0) s.wordBreak = props.wordBreak;
405
+ if (props.lineHeight !== void 0) s.lineHeight = props.lineHeight;
406
+ if (props.marginRight !== void 0) s.marginRight = props.marginRight;
407
+ if (props.position !== void 0) s.position = props.position;
408
+ if (props.background !== void 0) s.background = props.background;
409
+ return s;
410
+ }
411
+ function stripShims(props) {
412
+ const out = { ...props };
413
+ for (const k of SHIM_PROPS) delete out[k];
414
+ return out;
446
415
  }
416
+ var SKELETON_CLASSES = [
417
+ "animate-skeleton-shimmer rounded-sm",
418
+ "bg-[linear-gradient(90deg,var(--color-skeleton-start)_0%,var(--color-skeleton-end)_50%,var(--color-skeleton-start)_100%)]",
419
+ "bg-[length:200%_100%]"
420
+ ].join(" ");
421
+ var HIDE_BELOW_MAP = { lg: "lg:hidden", md: "md:hidden", sm: "sm:hidden" };
447
422
  var Skeleton = React29__namespace.forwardRef(
448
423
  function Skeleton2(props, ref) {
449
- const {
450
- loading = false,
451
- asChild,
452
- className,
453
- children,
454
- style: styleProp,
455
- // Destructure style-prop shims so they don't leak into DOM
456
- w: _w,
457
- h: _h,
458
- minW: _minW,
459
- maxW: _maxW,
460
- display: _display,
461
- flexGrow: _flexGrow,
462
- flexShrink: _flexShrink,
463
- flexBasis: _flexBasis,
464
- fontWeight: _fontWeight,
465
- textStyle: _textStyle,
466
- borderRadius: _borderRadius,
467
- alignSelf: _alignSelf,
468
- alignItems: _alignItems,
469
- justifyContent: _justifyContent,
470
- color: _color,
471
- mt: _mt,
472
- mb: _mb,
473
- ml: _ml,
474
- mr: _mr,
475
- height: _height,
476
- overflow: _overflow,
477
- whiteSpace: _whiteSpace,
478
- textOverflow: _textOverflow,
479
- textTransform: _textTransform,
480
- gap: _gap,
481
- gridTemplateColumns: _gridTemplateColumns,
482
- minWidth: _minWidth,
483
- boxSize: _boxSize,
484
- py: _py,
485
- px: _px,
486
- p: _p,
487
- hideBelow: _hideBelow,
488
- fontSize: _fontSize,
489
- flexWrap: _flexWrap,
490
- wordBreak: _wordBreak,
491
- lineHeight: _lineHeight,
492
- marginRight: _marginRight,
493
- position: _position,
494
- background: _background,
495
- as: Component = "div",
496
- ...htmlRest
497
- } = props;
498
- const { style: shimStyle } = extractSkeletonStyleProps({
499
- w: _w,
500
- h: _h,
501
- minW: _minW,
502
- maxW: _maxW,
503
- display: _display,
504
- flexGrow: _flexGrow,
505
- flexShrink: _flexShrink,
506
- flexBasis: _flexBasis,
507
- fontWeight: _fontWeight,
508
- textStyle: _textStyle,
509
- borderRadius: _borderRadius,
510
- alignSelf: _alignSelf,
511
- alignItems: _alignItems,
512
- justifyContent: _justifyContent,
513
- color: _color,
514
- mt: _mt,
515
- mb: _mb,
516
- ml: _ml,
517
- mr: _mr,
518
- height: _height,
519
- overflow: _overflow,
520
- whiteSpace: _whiteSpace,
521
- textOverflow: _textOverflow,
522
- textTransform: _textTransform,
523
- gap: _gap,
524
- gridTemplateColumns: _gridTemplateColumns,
525
- minWidth: _minWidth,
526
- boxSize: _boxSize,
527
- py: _py,
528
- px: _px,
529
- p: _p,
530
- hideBelow: _hideBelow,
531
- fontSize: _fontSize,
532
- flexWrap: _flexWrap,
533
- wordBreak: _wordBreak,
534
- lineHeight: _lineHeight,
535
- marginRight: _marginRight,
536
- position: _position,
537
- background: _background
538
- });
424
+ const { loading = false, asChild, className, children, style: styleProp, as: Component = "div", ...allRest } = props;
425
+ const shimStyle = shimToStyle(props);
539
426
  const mergedStyle = Object.keys(shimStyle).length > 0 || styleProp ? { ...shimStyle, ...styleProp } : void 0;
540
- const HIDE_BELOW_MAP = { lg: "lg:hidden", md: "md:hidden", sm: "sm:hidden" };
541
- const hideBelowClass = _hideBelow ? HIDE_BELOW_MAP[_hideBelow] : void 0;
542
- const finalClassName = hideBelowClass ? cn(className, hideBelowClass) : className;
427
+ const hideBelowClass = props.hideBelow ? HIDE_BELOW_MAP[props.hideBelow] : void 0;
428
+ const cls = hideBelowClass ? cn(className, hideBelowClass) : className;
429
+ const htmlRest = stripShims(allRest);
543
430
  if (!loading) {
544
- if (asChild && React29__namespace.isValidElement(children)) {
545
- return children;
546
- }
547
- return /* @__PURE__ */ jsxRuntime.jsx(Component, { ref, className: finalClassName, style: mergedStyle, ...htmlRest, children });
431
+ if (asChild && React29__namespace.isValidElement(children)) return children;
432
+ return /* @__PURE__ */ jsxRuntime.jsx(Component, { ref, className: cls, style: mergedStyle, ...htmlRest, children });
548
433
  }
549
434
  if (asChild && React29__namespace.isValidElement(children)) {
550
435
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -552,13 +437,7 @@ var Skeleton = React29__namespace.forwardRef(
552
437
  {
553
438
  ref,
554
439
  "data-loading": true,
555
- className: cn(
556
- "animate-skeleton-shimmer rounded-sm",
557
- "bg-[linear-gradient(90deg,var(--color-skeleton-start)_0%,var(--color-skeleton-end)_50%,var(--color-skeleton-start)_100%)]",
558
- "bg-[length:200%_100%]",
559
- "text-transparent [&_*]:invisible",
560
- finalClassName
561
- ),
440
+ className: cn(SKELETON_CLASSES, "text-transparent [&_*]:invisible", cls),
562
441
  style: mergedStyle,
563
442
  ...htmlRest,
564
443
  children
@@ -570,13 +449,7 @@ var Skeleton = React29__namespace.forwardRef(
570
449
  {
571
450
  ref,
572
451
  "data-loading": true,
573
- className: cn(
574
- "animate-skeleton-shimmer rounded-sm",
575
- "bg-[linear-gradient(90deg,var(--color-skeleton-start)_0%,var(--color-skeleton-end)_50%,var(--color-skeleton-start)_100%)]",
576
- "bg-[length:200%_100%]",
577
- children ? "text-transparent [&_*]:invisible" : "min-h-5",
578
- finalClassName
579
- ),
452
+ className: cn(SKELETON_CLASSES, children ? "text-transparent [&_*]:invisible" : "min-h-5", cls),
580
453
  style: mergedStyle,
581
454
  ...htmlRest,
582
455
  children
@@ -614,52 +487,22 @@ var SkeletonText = React29__namespace.forwardRef(
614
487
  }
615
488
  );
616
489
  var IndicatorIcon2 = ({ className }) => /* @__PURE__ */ jsxRuntime.jsx("svg", { className, viewBox: "0 0 20 20", fill: "currentColor", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsxRuntime.jsx("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M10 18a8 8 0 100-16 8 8 0 000 16zm.75-11.25a.75.75 0 11-1.5 0 .75.75 0 011.5 0zM9.25 10a.75.75 0 011.5 0v3a.75.75 0 01-1.5 0v-3z" }) });
617
- var alertRoot = classVarianceAuthority.cva(
618
- // base
619
- "w-full flex items-start relative rounded text-[var(--color-alert-fg)]",
620
- {
621
- variants: {
622
- status: {
623
- info: "bg-[var(--color-alert-bg-info)]",
624
- warning: "bg-[var(--color-alert-bg-warning)]",
625
- warning_table: "bg-[var(--color-alert-bg-warning-table)]",
626
- success: "bg-[var(--color-alert-bg-success)]",
627
- error: "bg-[var(--color-alert-bg-error)]"
628
- },
629
- size: {
630
- sm: "gap-2 px-2 py-2 text-xs",
631
- md: "gap-2 px-3 py-2 text-base"
632
- }
633
- },
634
- defaultVariants: {
635
- status: "info",
636
- size: "md"
637
- }
638
- }
639
- );
640
- var alertContent = classVarianceAuthority.cva("flex flex-1", {
641
- variants: {
642
- inline: {
643
- "true": "inline-flex flex-row items-center",
644
- "false": "flex flex-col"
645
- }
646
- },
647
- defaultVariants: {
648
- inline: true
649
- }
650
- });
651
- var INDICATOR_BASE = "inline-flex items-center justify-center shrink-0 w-5 h-5 text-[var(--color-alert-fg)] [&>svg]:w-full [&>svg]:h-full";
652
- var indicatorVariants = classVarianceAuthority.cva(INDICATOR_BASE, {
653
- variants: {
654
- size: {
655
- sm: "w-5 h-5 my-0",
656
- md: "w-5 h-5 my-[2px]"
657
- }
658
- },
659
- defaultVariants: {
660
- size: "md"
661
- }
662
- });
490
+ var ALERT_BASE = "w-full flex items-start relative rounded text-[var(--color-alert-fg)]";
491
+ var STATUS_CLASSES = {
492
+ info: "bg-[var(--color-alert-bg-info)]",
493
+ warning: "bg-[var(--color-alert-bg-warning)]",
494
+ warning_table: "bg-[var(--color-alert-bg-warning-table)]",
495
+ success: "bg-[var(--color-alert-bg-success)]",
496
+ error: "bg-[var(--color-alert-bg-error)]"
497
+ };
498
+ var SIZE_CLASSES = {
499
+ sm: "gap-2 px-2 py-2 text-xs",
500
+ md: "gap-2 px-3 py-2 text-base"
501
+ };
502
+ var INDICATOR_SIZE_CLASSES = {
503
+ sm: "w-5 h-5 my-0",
504
+ md: "w-5 h-5 my-[2px]"
505
+ };
663
506
  var Alert = React29__namespace.forwardRef(
664
507
  function Alert2(props, ref) {
665
508
  const {
@@ -695,7 +538,10 @@ var Alert = React29__namespace.forwardRef(
695
538
  if (!showIcon && icon === void 0) {
696
539
  return null;
697
540
  }
698
- return /* @__PURE__ */ jsxRuntime.jsx("span", { className: indicatorVariants({ size: resolvedSize }), children: icon || defaultIcon });
541
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn(
542
+ "inline-flex items-center justify-center shrink-0 text-[var(--color-alert-fg)] [&>svg]:w-full [&>svg]:h-full",
543
+ INDICATOR_SIZE_CLASSES[resolvedSize]
544
+ ), children: icon || defaultIcon });
699
545
  })();
700
546
  const handleClose = React29__namespace.useCallback(() => {
701
547
  setIsOpen(false);
@@ -728,12 +574,12 @@ var Alert = React29__namespace.forwardRef(
728
574
  "div",
729
575
  {
730
576
  ref,
731
- className: cn(alertRoot({ status, size: resolvedSize }), className),
577
+ className: cn(ALERT_BASE, STATUS_CLASSES[status], SIZE_CLASSES[resolvedSize], className),
732
578
  style: alertStyle,
733
579
  ...alertRest,
734
580
  children: [
735
581
  iconElement,
736
- children ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: alertContent({ inline }), children: [
582
+ children ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-1", inline ? "inline-flex flex-row items-center" : "flex flex-col"), children: [
737
583
  title && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-semibold", children: title }),
738
584
  /* @__PURE__ */ jsxRuntime.jsx(
739
585
  "div",
@@ -758,7 +604,7 @@ var Alert = React29__namespace.forwardRef(
758
604
  ) });
759
605
  }
760
606
  );
761
- var SIZE_CLASSES = {
607
+ var SIZE_CLASSES2 = {
762
608
  xs: "h-6 w-6 text-[10px]",
763
609
  sm: "h-8 w-8 text-xs",
764
610
  md: "h-10 w-10 text-sm",
@@ -803,7 +649,7 @@ var Avatar = React29__namespace.forwardRef(
803
649
  ref,
804
650
  className: cn(
805
651
  "relative inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full align-middle",
806
- SIZE_CLASSES[size],
652
+ SIZE_CLASSES2[size],
807
653
  VARIANT_CLASSES[variant],
808
654
  !isBorderless && "ring-2 ring-white dark:ring-gray-900",
809
655
  className
@@ -886,6 +732,10 @@ function useIsMobile() {
886
732
  }, []);
887
733
  return isMobile;
888
734
  }
735
+ function mapPlacement(p) {
736
+ if (!p) return void 0;
737
+ return p;
738
+ }
889
739
  var Tooltip = React29__namespace.forwardRef(
890
740
  function Tooltip2(props, ref) {
891
741
  const {
@@ -896,10 +746,8 @@ var Tooltip = React29__namespace.forwardRef(
896
746
  children,
897
747
  disabled,
898
748
  disableOnMobile,
899
- portalled = true,
900
749
  content,
901
750
  contentProps,
902
- portalRef,
903
751
  defaultOpen = false,
904
752
  triggerProps,
905
753
  closeDelay = 100,
@@ -947,36 +795,34 @@ var Tooltip = React29__namespace.forwardRef(
947
795
  if (disabled || disableOnMobile && isMobile) return children;
948
796
  const defaultShowArrow = variant === "popover" ? false : true;
949
797
  const showArrow = showArrowProp !== void 0 ? showArrowProp : defaultShowArrow;
950
- const placement = positioning?.placement ?? "top";
951
- const side = placement.split("-")[0];
952
- const align = placement.includes("-") ? placement.split("-")[1] : void 0;
953
- const sideOffset = positioning?.offset?.mainAxis ?? 4;
954
798
  const isPopover = variant === "popover";
955
- return /* @__PURE__ */ jsxRuntime.jsx(RadixTooltip__namespace.Provider, { delayDuration: openDelay, skipDelayDuration: 0, children: /* @__PURE__ */ jsxRuntime.jsxs(
956
- RadixTooltip__namespace.Root,
799
+ const placement = mapPlacement(positioning?.placement) ?? "top";
800
+ const offset = positioning?.offset?.mainAxis ?? 4;
801
+ return /* @__PURE__ */ jsxRuntime.jsx(tooltip.TooltipGroup, { delay: openDelay, children: /* @__PURE__ */ jsxRuntime.jsxs(
802
+ tooltip.Tooltip,
957
803
  {
958
804
  open,
959
805
  onOpenChange: handleOpenChange,
960
- delayDuration: openDelay,
806
+ delay: { open: openDelay, close: closeDelay },
807
+ placement,
808
+ offset,
809
+ unstyled: true,
961
810
  children: [
962
811
  /* @__PURE__ */ jsxRuntime.jsx(
963
- RadixTooltip__namespace.Trigger,
812
+ tooltip.Tooltip.Trigger,
964
813
  {
965
814
  ref: open ? triggerRef : void 0,
966
815
  asChild: true,
967
- onClick: isMobile ? handleTriggerClick : void 0,
816
+ ...isMobile ? { onPress: handleTriggerClick } : {},
968
817
  ...triggerProps,
969
818
  children
970
819
  }
971
820
  ),
972
- /* @__PURE__ */ jsxRuntime.jsx(RadixTooltip__namespace.Portal, { container: portalled ? portalRef?.current ?? void 0 : void 0, children: /* @__PURE__ */ jsxRuntime.jsxs(
973
- RadixTooltip__namespace.Content,
821
+ /* @__PURE__ */ jsxRuntime.jsxs(
822
+ tooltip.Tooltip.Content,
974
823
  {
975
824
  ref,
976
- side,
977
- align,
978
- sideOffset,
979
- onClick: interactive ? handleContentClick : void 0,
825
+ unstyled: true,
980
826
  className: cn(
981
827
  "z-[9999] overflow-hidden rounded-lg px-3 py-2 text-sm",
982
828
  "animate-in fade-in-0 zoom-in-95",
@@ -985,12 +831,14 @@ var Tooltip = React29__namespace.forwardRef(
985
831
  !isPopover && "bg-[var(--color-tooltip-bg)] text-[var(--color-tooltip-fg)] max-w-xs",
986
832
  contentProps?.className
987
833
  ),
834
+ onClick: interactive ? handleContentClick : void 0,
988
835
  ...selected ? { "data-selected": true } : {},
989
836
  ...contentProps,
990
837
  children: [
991
838
  showArrow && /* @__PURE__ */ jsxRuntime.jsx(
992
- RadixTooltip__namespace.Arrow,
839
+ tooltip.Tooltip.Arrow,
993
840
  {
841
+ unstyled: true,
994
842
  className: cn(
995
843
  isPopover ? "fill-[var(--color-popover-bg)]" : "fill-[var(--color-tooltip-bg)]"
996
844
  )
@@ -999,7 +847,7 @@ var Tooltip = React29__namespace.forwardRef(
999
847
  content
1000
848
  ]
1001
849
  }
1002
- ) })
850
+ )
1003
851
  ]
1004
852
  }
1005
853
  ) });
@@ -1008,26 +856,12 @@ var Tooltip = React29__namespace.forwardRef(
1008
856
  function TruncatedTextTooltip({ label, children }) {
1009
857
  return /* @__PURE__ */ jsxRuntime.jsx(Tooltip, { content: label, positioning: { placement: "top" }, children });
1010
858
  }
1011
- var badgeVariants = classVarianceAuthority.cva(
1012
- "inline-flex items-center rounded-sm gap-1 font-medium w-fit max-w-full whitespace-nowrap select-text",
1013
- {
1014
- variants: {
1015
- variant: {
1016
- subtle: "",
1017
- solid: ""
1018
- },
1019
- size: {
1020
- sm: "text-xs p-1 h-[18px] min-h-[18px]",
1021
- md: "text-sm px-1 py-0.5 min-h-6",
1022
- lg: "text-sm px-2 py-1 min-h-7 font-semibold"
1023
- }
1024
- },
1025
- defaultVariants: {
1026
- variant: "subtle",
1027
- size: "md"
1028
- }
1029
- }
1030
- );
859
+ var BASE_CLASSES = "inline-flex items-center rounded-sm gap-1 font-medium w-fit max-w-full whitespace-nowrap select-text";
860
+ var SIZE_CLASSES3 = {
861
+ sm: "text-xs p-1 h-[18px] min-h-[18px]",
862
+ md: "text-sm px-1 py-0.5 min-h-6",
863
+ lg: "text-sm px-2 py-1 min-h-7 font-semibold"
864
+ };
1031
865
  var COLOR_PALETTE_CLASSES = {
1032
866
  gray: "bg-badge-gray-bg text-badge-gray-fg",
1033
867
  green: "bg-badge-green-bg text-badge-green-fg",
@@ -1052,6 +886,7 @@ var COLOR_PALETTE_CLASSES = {
1052
886
  bright_purple: "bg-badge-bright-purple-bg text-badge-bright-purple-fg",
1053
887
  bright_pink: "bg-badge-bright-pink-bg text-badge-bright-pink-fg"
1054
888
  };
889
+ var S2 = 4;
1055
890
  var Badge = React29__namespace.default.forwardRef(
1056
891
  function Badge2(props, ref) {
1057
892
  const {
@@ -1060,8 +895,8 @@ var Badge = React29__namespace.default.forwardRef(
1060
895
  children,
1061
896
  truncated = false,
1062
897
  endElement,
1063
- variant,
1064
- size,
898
+ variant: _variant,
899
+ size = "md",
1065
900
  colorPalette = "gray",
1066
901
  className,
1067
902
  flexShrink: _flexShrink,
@@ -1073,16 +908,16 @@ var Badge = React29__namespace.default.forwardRef(
1073
908
  } = props;
1074
909
  const shimStyle = { ...styleProp };
1075
910
  if (_flexShrink !== void 0) shimStyle.flexShrink = _flexShrink;
1076
- if (_gap !== void 0) shimStyle.gap = typeof _gap === "number" ? `${_gap * 4}px` : _gap;
911
+ if (_gap !== void 0) shimStyle.gap = typeof _gap === "number" ? `${_gap * S2}px` : _gap;
1077
912
  if (_ml !== void 0) {
1078
913
  if (typeof _ml === "object") {
1079
914
  const obj = _ml;
1080
- shimStyle.marginLeft = `${(obj.base ?? obj.lg ?? 0) * 4}px`;
915
+ shimStyle.marginLeft = `${(obj.base ?? obj.lg ?? 0) * S2}px`;
1081
916
  } else {
1082
- shimStyle.marginLeft = typeof _ml === "number" ? `${_ml * 4}px` : _ml;
917
+ shimStyle.marginLeft = typeof _ml === "number" ? `${_ml * S2}px` : _ml;
1083
918
  }
1084
919
  }
1085
- if (_mr !== void 0) shimStyle.marginRight = typeof _mr === "number" ? `${_mr * 4}px` : _mr;
920
+ if (_mr !== void 0) shimStyle.marginRight = typeof _mr === "number" ? `${_mr * S2}px` : _mr;
1086
921
  const badgeStyle = Object.keys(shimStyle).length > 0 ? shimStyle : void 0;
1087
922
  const child = children ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "overflow-hidden text-ellipsis", children }) : null;
1088
923
  const childrenElement = truncated ? /* @__PURE__ */ jsxRuntime.jsx(TruncatedTextTooltip, { label: children, children: child }) : child;
@@ -1091,7 +926,8 @@ var Badge = React29__namespace.default.forwardRef(
1091
926
  {
1092
927
  ref,
1093
928
  className: cn(
1094
- badgeVariants({ variant, size }),
929
+ BASE_CLASSES,
930
+ SIZE_CLASSES3[size],
1095
931
  COLOR_PALETTE_CLASSES[colorPalette],
1096
932
  className
1097
933
  ),
@@ -1110,171 +946,202 @@ var Badge = React29__namespace.default.forwardRef(
1110
946
  return badgeElement;
1111
947
  }
1112
948
  );
1113
- var buttonVariants = classVarianceAuthority.cva(
1114
- // base styles (shared across all variants)
1115
- [
1116
- "inline-flex items-center justify-center",
1117
- "gap-0 font-semibold overflow-hidden rounded-md",
1118
- "cursor-pointer select-none whitespace-nowrap",
1119
- "transition-colors duration-150",
1120
- "disabled:opacity-[0.2] disabled:cursor-not-allowed"
1121
- ],
1122
- {
1123
- variants: {
1124
- variant: {
1125
- // --- Solid ---
1126
- solid: [
1127
- "bg-[var(--color-button-solid-bg)] text-[var(--color-button-solid-text)]",
1128
- "hover:bg-[var(--color-hover)]",
1129
- "data-[expanded]:bg-[var(--color-hover)]"
1130
- ],
1131
- // --- Solid Danger ---
1132
- solid_danger: [
1133
- "bg-red-600 text-[var(--color-button-solid-text)]",
1134
- "hover:bg-red-500",
1135
- "data-[expanded]:bg-red-500"
1136
- ],
1137
- // --- Outline ---
1138
- outline: [
1139
- "border-2 border-solid bg-transparent",
1140
- "text-[var(--color-button-outline-fg)] border-[var(--color-button-outline-fg)]",
1141
- "hover:bg-transparent hover:text-[var(--color-hover)] hover:border-[var(--color-hover)]"
1142
- ],
1143
- // --- Outline Danger ---
1144
- outline_danger: [
1145
- "border-2 border-solid bg-transparent",
1146
- "text-red-600 border-red-600",
1147
- "hover:bg-transparent hover:text-red-500 hover:border-red-500"
1148
- ],
1149
- // --- Dropdown ---
1150
- dropdown: [
1151
- "border-2 border-solid bg-transparent",
1152
- "text-[var(--color-button-dropdown-fg)] border-[var(--color-button-dropdown-border)]",
1153
- "hover:bg-transparent hover:text-[var(--color-hover)] hover:border-[var(--color-hover)]",
1154
- "data-[expanded]:bg-transparent data-[expanded]:text-[var(--color-hover)] data-[expanded]:border-[var(--color-hover)]",
1155
- "data-[selected]:bg-[var(--color-selected-control-bg)] data-[selected]:text-[var(--color-selected-control-text)] data-[selected]:border-transparent",
1156
- "data-[selected]:hover:bg-[var(--color-selected-control-bg)]",
1157
- "data-[selected]:hover:text-[var(--color-hover)] data-[selected]:hover:border-transparent",
1158
- "data-[selected]:data-[expanded]:text-[var(--color-hover)]"
1159
- ],
1160
- // --- Header ---
1161
- header: [
1162
- "bg-transparent border-2 border-solid",
1163
- "text-[var(--color-button-header-fg)] border-[var(--color-button-header-border)]",
1164
- "hover:bg-transparent hover:text-[var(--color-hover)] hover:border-[var(--color-hover)]",
1165
- // selected
1166
- "data-[selected]:bg-[var(--color-button-header-bg-selected)]",
1167
- "data-[selected]:text-[var(--color-button-header-fg-selected)] data-[selected]:border-transparent data-[selected]:border-0",
1168
- "data-[selected]:hover:bg-[var(--color-button-header-bg-selected)] data-[selected]:hover:text-[var(--color-hover)]",
1169
- "data-[selected]:data-[expanded]:text-[var(--color-hover)]",
1170
- // selected + highlighted
1171
- "data-[selected]:data-[highlighted]:bg-[var(--color-button-header-bg-highlighted)]",
1172
- "data-[selected]:data-[highlighted]:text-[var(--color-button-header-fg-highlighted)]",
1173
- "data-[selected]:data-[highlighted]:border-transparent data-[selected]:data-[highlighted]:border-0",
1174
- "data-[selected]:data-[highlighted]:hover:bg-[var(--color-button-header-bg-highlighted)]",
1175
- "data-[selected]:data-[highlighted]:hover:text-[var(--color-hover)]",
1176
- "data-[selected]:data-[highlighted]:data-[expanded]:text-[var(--color-hover)]"
1177
- ],
1178
- // --- Hero ---
1179
- hero: [
1180
- "bg-[var(--color-button-hero-bg)] text-[var(--color-button-hero-fg)]",
1181
- "hover:bg-[var(--color-button-hero-bg-hover)] hover:text-[var(--color-button-hero-fg-hover)]",
1182
- "data-[selected]:bg-[var(--color-button-hero-bg-selected)] data-[selected]:text-[var(--color-button-hero-fg-selected)]",
1183
- "data-[selected]:hover:bg-[var(--color-button-hero-bg-selected)] data-[selected]:hover:text-[var(--color-hover)]",
1184
- "data-[selected]:data-[expanded]:text-[var(--color-hover)]"
1185
- ],
1186
- // --- Segmented ---
1187
- segmented: [
1188
- "bg-transparent border-2 border-solid rounded-none",
1189
- "text-[var(--color-button-segmented-fg)] border-[var(--color-selected-control-bg)]",
1190
- "hover:text-[var(--color-hover)]",
1191
- // selected
1192
- "data-[selected]:bg-[var(--color-selected-control-bg)] data-[selected]:text-[var(--color-selected-control-text)]",
1193
- "data-[selected]:hover:bg-[var(--color-selected-control-bg)] data-[selected]:hover:text-[var(--color-selected-control-text)]",
1194
- // border collapse: hide right border except when selected; first/last get rounded
1195
- "[&:not(:last-child)]:border-r-0 data-[selected]:[&:not(:last-child)]:border-r-2",
1196
- "data-[selected]+*:border-l-0",
1197
- "first:rounded-l-md last:rounded-r-md"
1198
- ],
1199
- // --- Plain ---
1200
- plain: [
1201
- "bg-transparent text-inherit border-none",
1202
- "hover:bg-transparent"
1203
- ],
1204
- // --- Subtle ---
1205
- subtle: [
1206
- "bg-[var(--color-button-subtle-bg)] text-[var(--color-button-subtle-fg)]",
1207
- "hover:bg-[var(--color-button-subtle-bg)] hover:text-[var(--color-hover)]",
1208
- "disabled:bg-[var(--color-button-subtle-bg)] disabled:text-[var(--color-button-subtle-fg)]"
1209
- ],
1210
- // --- Link ---
1211
- link: [
1212
- "bg-transparent text-[var(--color-link-primary)] border-none font-normal",
1213
- "px-0 h-auto",
1214
- "hover:bg-transparent hover:text-[var(--color-link-primary-hover)]",
1215
- "disabled:text-[var(--color-text-secondary)]"
1216
- ],
1217
- // --- Icon Secondary ---
1218
- icon_secondary: [
1219
- "bg-transparent text-[var(--color-icon-secondary)] border-none",
1220
- "hover:text-[var(--color-hover)]",
1221
- "data-[selected]:bg-[var(--color-selected-control-bg)] data-[selected]:text-[var(--color-selected-control-text)]",
1222
- "data-[selected]:hover:bg-[var(--color-selected-control-bg)] data-[selected]:hover:text-[var(--color-hover)]",
1223
- "data-[selected]:data-[expanded]:text-[var(--color-hover)]",
1224
- "data-[expanded]:text-[var(--color-hover)]"
1225
- ],
1226
- // --- Icon Background ---
1227
- icon_background: [
1228
- "bg-[var(--color-button-icon-background-bg)] text-[var(--color-icon-secondary)] border-none",
1229
- "hover:text-[var(--color-hover)]",
1230
- "data-[selected]:bg-[var(--color-selected-control-bg)] data-[selected]:text-[var(--color-selected-control-text)]",
1231
- "data-[selected]:hover:bg-[var(--color-selected-control-bg)] data-[selected]:hover:text-[var(--color-hover)]",
1232
- "data-[selected]:data-[expanded]:text-[var(--color-hover)]",
1233
- "data-[expanded]:text-[var(--color-hover)]"
1234
- ],
1235
- // --- Pagination ---
1236
- pagination: [
1237
- "border-2 border-solid bg-transparent",
1238
- "text-[var(--color-button-pagination-fg)] border-[var(--color-button-pagination-border)]",
1239
- "hover:bg-transparent hover:text-[var(--color-hover)] hover:border-[var(--color-hover)]",
1240
- "data-[selected]:bg-[var(--color-selected-control-bg)] data-[selected]:text-[var(--color-selected-control-text)] data-[selected]:border-transparent",
1241
- "data-[selected]:hover:bg-[var(--color-selected-control-bg)]",
1242
- "data-[selected]:hover:text-[var(--color-selected-control-text)] data-[selected]:hover:border-transparent"
1243
- ]
1244
- },
1245
- size: {
1246
- "2xs": "px-2 h-5 min-w-5 text-xs rounded-sm gap-1",
1247
- xs: "px-2 h-6 min-w-6 text-sm rounded-sm gap-1",
1248
- sm: "px-3 h-8 min-w-8 text-sm rounded-md gap-1",
1249
- md: "px-3 h-10 min-w-10 text-base rounded-md gap-2"
1250
- }
1251
- },
1252
- defaultVariants: {
1253
- variant: "solid",
1254
- size: "md"
1255
- }
1256
- }
1257
- );
949
+ var SpinnerFrame = core.styled(core.View, {
950
+ name: "ButtonSpinner",
951
+ render: /* @__PURE__ */ jsxRuntime.jsx("span", {}),
952
+ width: 16,
953
+ height: 16,
954
+ borderRadius: 1e3,
955
+ borderWidth: 2,
956
+ borderColor: "currentColor",
957
+ borderBottomColor: "transparent",
958
+ borderLeftColor: "transparent"
959
+ });
1258
960
  function Spinner({ className }) {
1259
961
  return /* @__PURE__ */ jsxRuntime.jsx(
1260
- "span",
962
+ SpinnerFrame,
1261
963
  {
1262
- className: cn(
1263
- "inline-block h-4 w-4 animate-spin rounded-full",
1264
- "border-2 border-current border-b-transparent border-l-transparent",
1265
- className
1266
- ),
1267
964
  role: "status",
1268
- "aria-label": "Loading"
965
+ "aria-label": "Loading",
966
+ className: [
967
+ "animate-spin",
968
+ className
969
+ ].filter(Boolean).join(" ")
1269
970
  }
1270
971
  );
1271
972
  }
973
+ var ButtonFrame = core.styled(core.View, {
974
+ name: "LuxButton",
975
+ render: /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button" }),
976
+ role: "button",
977
+ tabIndex: 0,
978
+ cursor: "pointer",
979
+ userSelect: "none",
980
+ display: "inline-flex",
981
+ alignItems: "center",
982
+ justifyContent: "center",
983
+ gap: 0,
984
+ overflow: "hidden",
985
+ borderRadius: 6,
986
+ // Whitespace nowrap via className since hanzogui doesn't have a direct token
987
+ // Transition via className
988
+ variants: {
989
+ size: {
990
+ "2xs": { paddingHorizontal: 8, height: 20, minWidth: 20, fontSize: 12, borderRadius: 4, gap: 4 },
991
+ xs: { paddingHorizontal: 8, height: 24, minWidth: 24, fontSize: 14, borderRadius: 4, gap: 4 },
992
+ sm: { paddingHorizontal: 12, height: 32, minWidth: 32, fontSize: 14, borderRadius: 6, gap: 4 },
993
+ md: { paddingHorizontal: 12, height: 40, minWidth: 40, fontSize: 16, borderRadius: 6, gap: 8 }
994
+ },
995
+ disabled: {
996
+ true: {
997
+ opacity: 0.2,
998
+ cursor: "not-allowed",
999
+ pointerEvents: "none"
1000
+ }
1001
+ }
1002
+ },
1003
+ defaultVariants: {
1004
+ size: "md"
1005
+ }
1006
+ });
1007
+ var VARIANT_CLASSES2 = {
1008
+ solid: [
1009
+ "bg-[var(--color-button-solid-bg)] text-[var(--color-button-solid-text)]",
1010
+ "hover:bg-[var(--color-hover)]",
1011
+ "data-[expanded]:bg-[var(--color-hover)]"
1012
+ ].join(" "),
1013
+ solid_danger: [
1014
+ "bg-red-600 text-[var(--color-button-solid-text)]",
1015
+ "hover:bg-red-500",
1016
+ "data-[expanded]:bg-red-500"
1017
+ ].join(" "),
1018
+ outline: [
1019
+ "border-2 border-solid bg-transparent",
1020
+ "text-[var(--color-button-outline-fg)] border-[var(--color-button-outline-fg)]",
1021
+ "hover:bg-transparent hover:text-[var(--color-hover)] hover:border-[var(--color-hover)]"
1022
+ ].join(" "),
1023
+ outline_danger: [
1024
+ "border-2 border-solid bg-transparent",
1025
+ "text-red-600 border-red-600",
1026
+ "hover:bg-transparent hover:text-red-500 hover:border-red-500"
1027
+ ].join(" "),
1028
+ dropdown: [
1029
+ "border-2 border-solid bg-transparent",
1030
+ "text-[var(--color-button-dropdown-fg)] border-[var(--color-button-dropdown-border)]",
1031
+ "hover:bg-transparent hover:text-[var(--color-hover)] hover:border-[var(--color-hover)]",
1032
+ "data-[expanded]:bg-transparent data-[expanded]:text-[var(--color-hover)] data-[expanded]:border-[var(--color-hover)]",
1033
+ "data-[selected]:bg-[var(--color-selected-control-bg)] data-[selected]:text-[var(--color-selected-control-text)] data-[selected]:border-transparent",
1034
+ "data-[selected]:hover:bg-[var(--color-selected-control-bg)]",
1035
+ "data-[selected]:hover:text-[var(--color-hover)] data-[selected]:hover:border-transparent",
1036
+ "data-[selected]:data-[expanded]:text-[var(--color-hover)]"
1037
+ ].join(" "),
1038
+ header: [
1039
+ "bg-transparent border-2 border-solid",
1040
+ "text-[var(--color-button-header-fg)] border-[var(--color-button-header-border)]",
1041
+ "hover:bg-transparent hover:text-[var(--color-hover)] hover:border-[var(--color-hover)]",
1042
+ "data-[selected]:bg-[var(--color-button-header-bg-selected)]",
1043
+ "data-[selected]:text-[var(--color-button-header-fg-selected)] data-[selected]:border-transparent data-[selected]:border-0",
1044
+ "data-[selected]:hover:bg-[var(--color-button-header-bg-selected)] data-[selected]:hover:text-[var(--color-hover)]",
1045
+ "data-[selected]:data-[expanded]:text-[var(--color-hover)]",
1046
+ "data-[selected]:data-[highlighted]:bg-[var(--color-button-header-bg-highlighted)]",
1047
+ "data-[selected]:data-[highlighted]:text-[var(--color-button-header-fg-highlighted)]",
1048
+ "data-[selected]:data-[highlighted]:border-transparent data-[selected]:data-[highlighted]:border-0",
1049
+ "data-[selected]:data-[highlighted]:hover:bg-[var(--color-button-header-bg-highlighted)]",
1050
+ "data-[selected]:data-[highlighted]:hover:text-[var(--color-hover)]",
1051
+ "data-[selected]:data-[highlighted]:data-[expanded]:text-[var(--color-hover)]"
1052
+ ].join(" "),
1053
+ hero: [
1054
+ "bg-[var(--color-button-hero-bg)] text-[var(--color-button-hero-fg)]",
1055
+ "hover:bg-[var(--color-button-hero-bg-hover)] hover:text-[var(--color-button-hero-fg-hover)]",
1056
+ "data-[selected]:bg-[var(--color-button-hero-bg-selected)] data-[selected]:text-[var(--color-button-hero-fg-selected)]",
1057
+ "data-[selected]:hover:bg-[var(--color-button-hero-bg-selected)] data-[selected]:hover:text-[var(--color-hover)]",
1058
+ "data-[selected]:data-[expanded]:text-[var(--color-hover)]"
1059
+ ].join(" "),
1060
+ segmented: [
1061
+ "bg-transparent border-2 border-solid rounded-none",
1062
+ "text-[var(--color-button-segmented-fg)] border-[var(--color-selected-control-bg)]",
1063
+ "hover:text-[var(--color-hover)]",
1064
+ "data-[selected]:bg-[var(--color-selected-control-bg)] data-[selected]:text-[var(--color-selected-control-text)]",
1065
+ "data-[selected]:hover:bg-[var(--color-selected-control-bg)] data-[selected]:hover:text-[var(--color-selected-control-text)]",
1066
+ "[&:not(:last-child)]:border-r-0 data-[selected]:[&:not(:last-child)]:border-r-2",
1067
+ "data-[selected]+*:border-l-0",
1068
+ "first:rounded-l-md last:rounded-r-md"
1069
+ ].join(" "),
1070
+ plain: "bg-transparent text-inherit border-none hover:bg-transparent",
1071
+ subtle: [
1072
+ "bg-[var(--color-button-subtle-bg)] text-[var(--color-button-subtle-fg)]",
1073
+ "hover:bg-[var(--color-button-subtle-bg)] hover:text-[var(--color-hover)]",
1074
+ "disabled:bg-[var(--color-button-subtle-bg)] disabled:text-[var(--color-button-subtle-fg)]"
1075
+ ].join(" "),
1076
+ link: [
1077
+ "bg-transparent text-[var(--color-link-primary)] border-none font-normal",
1078
+ "px-0 h-auto",
1079
+ "hover:bg-transparent hover:text-[var(--color-link-primary-hover)]",
1080
+ "disabled:text-[var(--color-text-secondary)]"
1081
+ ].join(" "),
1082
+ icon_secondary: [
1083
+ "bg-transparent text-[var(--color-icon-secondary)] border-none",
1084
+ "hover:text-[var(--color-hover)]",
1085
+ "data-[selected]:bg-[var(--color-selected-control-bg)] data-[selected]:text-[var(--color-selected-control-text)]",
1086
+ "data-[selected]:hover:bg-[var(--color-selected-control-bg)] data-[selected]:hover:text-[var(--color-hover)]",
1087
+ "data-[selected]:data-[expanded]:text-[var(--color-hover)]",
1088
+ "data-[expanded]:text-[var(--color-hover)]"
1089
+ ].join(" "),
1090
+ icon_background: [
1091
+ "bg-[var(--color-button-icon-background-bg)] text-[var(--color-icon-secondary)] border-none",
1092
+ "hover:text-[var(--color-hover)]",
1093
+ "data-[selected]:bg-[var(--color-selected-control-bg)] data-[selected]:text-[var(--color-selected-control-text)]",
1094
+ "data-[selected]:hover:bg-[var(--color-selected-control-bg)] data-[selected]:hover:text-[var(--color-hover)]",
1095
+ "data-[selected]:data-[expanded]:text-[var(--color-hover)]",
1096
+ "data-[expanded]:text-[var(--color-hover)]"
1097
+ ].join(" "),
1098
+ pagination: [
1099
+ "border-2 border-solid bg-transparent",
1100
+ "text-[var(--color-button-pagination-fg)] border-[var(--color-button-pagination-border)]",
1101
+ "hover:bg-transparent hover:text-[var(--color-hover)] hover:border-[var(--color-hover)]",
1102
+ "data-[selected]:bg-[var(--color-selected-control-bg)] data-[selected]:text-[var(--color-selected-control-text)] data-[selected]:border-transparent",
1103
+ "data-[selected]:hover:bg-[var(--color-selected-control-bg)]",
1104
+ "data-[selected]:hover:text-[var(--color-selected-control-text)] data-[selected]:hover:border-transparent"
1105
+ ].join(" ")
1106
+ };
1107
+ var BASE_CLASSES2 = "font-semibold whitespace-nowrap transition-colors duration-150";
1108
+ var SP = 4;
1109
+ function buildShimStyle(props) {
1110
+ const s = { ...props.style };
1111
+ if (props.mt !== void 0) s.marginTop = typeof props.mt === "number" ? `${props.mt * SP}px` : props.mt;
1112
+ if (props.ml !== void 0) s.marginLeft = typeof props.ml === "number" ? `${props.ml * SP}px` : props.ml;
1113
+ if (props.mr !== void 0) s.marginRight = typeof props.mr === "number" ? `${props.mr * SP}px` : props.mr;
1114
+ if (props.px !== void 0) {
1115
+ const v = typeof props.px === "number" ? `${props.px * SP}px` : props.px;
1116
+ s.paddingLeft = v;
1117
+ s.paddingRight = v;
1118
+ }
1119
+ if (props.py !== void 0) {
1120
+ const v = typeof props.py === "number" ? `${props.py * SP}px` : props.py;
1121
+ s.paddingTop = v;
1122
+ s.paddingBottom = v;
1123
+ }
1124
+ if (props.fontWeight !== void 0) s.fontWeight = props.fontWeight;
1125
+ if (props.gap !== void 0) s.gap = typeof props.gap === "number" ? `${props.gap * SP}px` : props.gap;
1126
+ if (props.flexShrink !== void 0) s.flexShrink = props.flexShrink;
1127
+ if (props.columnGap !== void 0) s.columnGap = typeof props.columnGap === "number" ? `${props.columnGap * SP}px` : props.columnGap;
1128
+ if (props.gridColumn !== void 0) s.gridColumn = typeof props.gridColumn === "number" ? String(props.gridColumn) : props.gridColumn;
1129
+ if (props.gridRow) s.gridRow = props.gridRow;
1130
+ if (props.justifySelf) s.justifySelf = props.justifySelf;
1131
+ if (props.alignSelf) s.alignSelf = props.alignSelf;
1132
+ if (props.h) s.height = props.h;
1133
+ if (props.w) s.width = props.w;
1134
+ if (props.display) s.display = props.display;
1135
+ if (props.borderBottomRightRadius !== void 0) s.borderBottomRightRadius = typeof props.borderBottomRightRadius === "number" ? `${props.borderBottomRightRadius}px` : props.borderBottomRightRadius;
1136
+ if (props.borderTopRightRadius !== void 0) s.borderTopRightRadius = typeof props.borderTopRightRadius === "number" ? `${props.borderTopRightRadius}px` : props.borderTopRightRadius;
1137
+ return Object.keys(s).length > 0 ? s : void 0;
1138
+ }
1272
1139
  var Button = React29__namespace.forwardRef(
1273
1140
  function Button2(props, ref) {
1274
1141
  const {
1275
1142
  className,
1276
- variant,
1277
- size,
1143
+ variant = "solid",
1144
+ size = "md",
1278
1145
  asChild = false,
1279
1146
  loading = false,
1280
1147
  loadingText,
@@ -1286,57 +1153,48 @@ var Button = React29__namespace.forwardRef(
1286
1153
  children,
1287
1154
  style: styleProp,
1288
1155
  // Strip Chakra style props
1289
- mt: _mt,
1290
- ml: _ml,
1291
- mr: _mr,
1292
- px: _px,
1293
- py: _py,
1294
- fontWeight: _fontWeight,
1295
- gap: _gap,
1296
- flexShrink: _flexShrink,
1297
- columnGap: _columnGap,
1298
- gridColumn: _gridColumn,
1299
- gridRow: _gridRow,
1300
- justifySelf: _justifySelf,
1301
- alignSelf: _alignSelf,
1156
+ mt,
1157
+ ml,
1158
+ mr,
1159
+ px,
1160
+ py,
1161
+ fontWeight,
1162
+ gap,
1163
+ flexShrink,
1164
+ columnGap,
1165
+ gridColumn,
1166
+ gridRow,
1167
+ justifySelf,
1168
+ alignSelf,
1302
1169
  textStyle: _textStyle,
1303
- h: _h,
1304
- w: _w,
1305
- display: _display,
1306
- borderBottomRightRadius: _bbrr,
1307
- borderTopRightRadius: _btrr,
1170
+ h,
1171
+ w,
1172
+ display,
1173
+ borderBottomRightRadius,
1174
+ borderTopRightRadius,
1308
1175
  ...rest
1309
1176
  } = props;
1310
- const SP = 4;
1311
- const shimStyle = { ...styleProp };
1312
- if (_mt !== void 0) shimStyle.marginTop = typeof _mt === "number" ? `${_mt * SP}px` : _mt;
1313
- if (_ml !== void 0) shimStyle.marginLeft = typeof _ml === "number" ? `${_ml * SP}px` : _ml;
1314
- if (_mr !== void 0) shimStyle.marginRight = typeof _mr === "number" ? `${_mr * SP}px` : _mr;
1315
- if (_px !== void 0) {
1316
- const v = typeof _px === "number" ? `${_px * SP}px` : _px;
1317
- shimStyle.paddingLeft = v;
1318
- shimStyle.paddingRight = v;
1319
- }
1320
- if (_py !== void 0) {
1321
- const v = typeof _py === "number" ? `${_py * SP}px` : _py;
1322
- shimStyle.paddingTop = v;
1323
- shimStyle.paddingBottom = v;
1324
- }
1325
- if (_fontWeight !== void 0) shimStyle.fontWeight = _fontWeight;
1326
- if (_gap !== void 0) shimStyle.gap = typeof _gap === "number" ? `${_gap * SP}px` : _gap;
1327
- if (_flexShrink !== void 0) shimStyle.flexShrink = _flexShrink;
1328
- if (_columnGap !== void 0) shimStyle.columnGap = typeof _columnGap === "number" ? `${_columnGap * SP}px` : _columnGap;
1329
- if (_gridColumn !== void 0) shimStyle.gridColumn = typeof _gridColumn === "number" ? String(_gridColumn) : _gridColumn;
1330
- if (_gridRow) shimStyle.gridRow = _gridRow;
1331
- if (_justifySelf) shimStyle.justifySelf = _justifySelf;
1332
- if (_alignSelf) shimStyle.alignSelf = _alignSelf;
1333
- if (_h) shimStyle.height = _h;
1334
- if (_w) shimStyle.width = _w;
1335
- if (_display) shimStyle.display = _display;
1336
- if (_bbrr !== void 0) shimStyle.borderBottomRightRadius = typeof _bbrr === "number" ? `${_bbrr}px` : _bbrr;
1337
- if (_btrr !== void 0) shimStyle.borderTopRightRadius = typeof _btrr === "number" ? `${_btrr}px` : _btrr;
1338
- const mergedStyle = Object.keys(shimStyle).length > 0 ? shimStyle : void 0;
1339
- const Comp = asChild ? reactSlot.Slot : "button";
1177
+ const mergedStyle = buildShimStyle({
1178
+ style: styleProp,
1179
+ mt,
1180
+ ml,
1181
+ mr,
1182
+ px,
1183
+ py,
1184
+ fontWeight,
1185
+ gap,
1186
+ flexShrink,
1187
+ columnGap,
1188
+ gridColumn,
1189
+ gridRow,
1190
+ justifySelf,
1191
+ alignSelf,
1192
+ h,
1193
+ w,
1194
+ display,
1195
+ borderBottomRightRadius,
1196
+ borderTopRightRadius
1197
+ });
1340
1198
  const dataAttrs = {};
1341
1199
  if (expanded) dataAttrs["data-expanded"] = true;
1342
1200
  if (selected) dataAttrs["data-selected"] = true;
@@ -1345,15 +1203,19 @@ var Button = React29__namespace.forwardRef(
1345
1203
  const isDisabled = !loadingSkeleton && (loading || disabled);
1346
1204
  const inner = loading ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1347
1205
  /* @__PURE__ */ jsxRuntime.jsx(Spinner, {}),
1348
- loadingText != null && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-2", children: loadingText })
1206
+ loadingText != null && /* @__PURE__ */ jsxRuntime.jsx("span", { style: { marginLeft: 8 }, children: loadingText })
1349
1207
  ] }) : children;
1208
+ const variantClass = VARIANT_CLASSES2[variant] ?? VARIANT_CLASSES2.solid;
1209
+ const combinedClassName = [BASE_CLASSES2, variantClass, className].filter(Boolean).join(" ");
1350
1210
  const button = /* @__PURE__ */ jsxRuntime.jsx(
1351
- Comp,
1211
+ ButtonFrame,
1352
1212
  {
1353
1213
  ref,
1354
- className: cn(buttonVariants({ variant, size }), className),
1355
- style: mergedStyle,
1214
+ size,
1356
1215
  disabled: isDisabled || void 0,
1216
+ asChild: asChild || void 0,
1217
+ className: combinedClassName,
1218
+ style: mergedStyle,
1357
1219
  ...dataAttrs,
1358
1220
  ...rest,
1359
1221
  children: inner
@@ -1365,6 +1227,17 @@ var Button = React29__namespace.forwardRef(
1365
1227
  return button;
1366
1228
  }
1367
1229
  );
1230
+ var SIZE_CLASSES4 = {
1231
+ "2xs": "px-2 h-5 min-w-5 text-xs rounded-sm gap-1",
1232
+ xs: "px-2 h-6 min-w-6 text-sm rounded-sm gap-1",
1233
+ sm: "px-3 h-8 min-w-8 text-sm rounded-md gap-1",
1234
+ md: "px-3 h-10 min-w-10 text-base rounded-md gap-2"
1235
+ };
1236
+ function buttonVariants(opts) {
1237
+ const v = opts?.variant ?? "solid";
1238
+ const s = opts?.size ?? "md";
1239
+ return [BASE_CLASSES2, VARIANT_CLASSES2[v] ?? "", SIZE_CLASSES4[s] ?? ""].filter(Boolean).join(" ");
1240
+ }
1368
1241
  var ButtonGroup = React29__namespace.forwardRef(
1369
1242
  function ButtonGroup2(props, ref) {
1370
1243
  const { className, ...rest } = props;
@@ -1372,7 +1245,7 @@ var ButtonGroup = React29__namespace.forwardRef(
1372
1245
  "div",
1373
1246
  {
1374
1247
  ref,
1375
- className: cn("inline-flex", className),
1248
+ className: ["inline-flex", className].filter(Boolean).join(" "),
1376
1249
  role: "group",
1377
1250
  ...rest
1378
1251
  }
@@ -1413,11 +1286,11 @@ var ButtonGroupRadio = React29__namespace.forwardRef(
1413
1286
  "div",
1414
1287
  {
1415
1288
  ref,
1416
- className: cn(
1289
+ className: [
1417
1290
  "inline-flex gap-0",
1418
- equalWidth && "grid",
1291
+ equalWidth ? "grid" : "",
1419
1292
  className
1420
- ),
1293
+ ].filter(Boolean).join(" "),
1421
1294
  style: equalWidth ? { gridTemplateColumns: `repeat(${childrenLength}, 1fr)` } : void 0,
1422
1295
  role: "group",
1423
1296
  ...rest,
@@ -1480,7 +1353,7 @@ var CheckboxGroupBase = React29__namespace.forwardRef(
1480
1353
  }
1481
1354
  );
1482
1355
  var CheckboxGroup2 = CheckboxGroupBase;
1483
- var SIZE_CLASSES2 = {
1356
+ var SIZE_CLASSES5 = {
1484
1357
  sm: {
1485
1358
  root: "gap-1.5",
1486
1359
  control: "h-3.5 w-3.5 rounded-sm",
@@ -1590,7 +1463,7 @@ var CheckboxBase = React29__namespace.forwardRef(
1590
1463
  },
1591
1464
  [readOnly, isControlled, isInGroup, group, value, onCheckedChange, onChange]
1592
1465
  );
1593
- const sizeClasses2 = SIZE_CLASSES2[size];
1466
+ const sizeClasses2 = SIZE_CLASSES5[size];
1594
1467
  return /* @__PURE__ */ jsxRuntime.jsxs(
1595
1468
  "label",
1596
1469
  {
@@ -1666,7 +1539,7 @@ function stripUtmParams(url) {
1666
1539
  return url;
1667
1540
  }
1668
1541
  }
1669
- var VARIANT_CLASSES2 = {
1542
+ var VARIANT_CLASSES3 = {
1670
1543
  primary: cn(
1671
1544
  "text-[var(--color-link-primary)]",
1672
1545
  "hover:no-underline hover:text-[var(--color-link-primary-hover)]",
@@ -1706,7 +1579,7 @@ var VARIANT_CLASSES2 = {
1706
1579
  "data-[hover]:no-underline"
1707
1580
  )
1708
1581
  };
1709
- var BASE_CLASSES = "inline-flex items-center gap-0 cursor-pointer data-[disabled]:cursor-not-allowed";
1582
+ var BASE_CLASSES3 = "inline-flex items-center gap-0 cursor-pointer data-[disabled]:cursor-not-allowed";
1710
1583
  var LinkExternalIcon = ({ color }) => /* @__PURE__ */ jsxRuntime.jsx(
1711
1584
  ArrowIcon,
1712
1585
  {
@@ -1775,7 +1648,7 @@ var Link = React29__namespace.default.forwardRef(
1775
1648
  if (_minW !== void 0) shimStyle.minWidth = typeof _minW === "number" ? `${_minW * SPACING}px` : _minW;
1776
1649
  if (_justifyContent) shimStyle.justifyContent = _justifyContent;
1777
1650
  if (_position) shimStyle.position = _position;
1778
- const linkClasses = cn(BASE_CLASSES, VARIANT_CLASSES2[variant], className);
1651
+ const linkClasses = cn(BASE_CLASSES3, VARIANT_CLASSES3[variant], className);
1779
1652
  const linkStyle = Object.keys(shimStyle).length > 0 ? shimStyle : void 0;
1780
1653
  if (external) {
1781
1654
  const processedHref = typeof href === "string" ? stripUtmParams(href) : href;
@@ -1864,8 +1737,8 @@ var LinkOverlay = React29__namespace.default.forwardRef(
1864
1737
  ...rest
1865
1738
  } = props;
1866
1739
  const overlayClasses = cn(
1867
- BASE_CLASSES,
1868
- VARIANT_CLASSES2[variant],
1740
+ BASE_CLASSES3,
1741
+ VARIANT_CLASSES3[variant],
1869
1742
  // Static positioning with a ::before pseudo-element that covers the LinkBox
1870
1743
  "static",
1871
1744
  'before:absolute before:inset-0 before:z-0 before:content-[""]',
@@ -2063,9 +1936,9 @@ function BackToButton({ onClick }) {
2063
1936
  }
2064
1937
  );
2065
1938
  }
2066
- var DialogContext = React29__namespace.createContext({ size: "md" });
2067
- function useDialogContext() {
2068
- return React29__namespace.useContext(DialogContext);
1939
+ var DialogSizeContext = React29__namespace.createContext({ size: "md" });
1940
+ function useDialogSizeContext() {
1941
+ return React29__namespace.useContext(DialogSizeContext);
2069
1942
  }
2070
1943
  var CONTENT_SIZE_MAP = {
2071
1944
  sm: "max-w-[400px]",
@@ -2095,7 +1968,7 @@ var DialogRoot = ({
2095
1968
  onOpenChange,
2096
1969
  size = "md",
2097
1970
  modal = true
2098
- // motionPreset is intentionally unused kept for API compat
1971
+ // motionPreset is intentionally unused -- kept for API compat
2099
1972
  }) => {
2100
1973
  const handleOpenChange = React29__namespace.useCallback(
2101
1974
  (nextOpen) => {
@@ -2104,8 +1977,8 @@ var DialogRoot = ({
2104
1977
  [onOpenChange]
2105
1978
  );
2106
1979
  const ctx = React29__namespace.useMemo(() => ({ size }), [size]);
2107
- return /* @__PURE__ */ jsxRuntime.jsx(DialogContext.Provider, { value: ctx, children: /* @__PURE__ */ jsxRuntime.jsx(
2108
- RadixDialog__namespace.Root,
1980
+ return /* @__PURE__ */ jsxRuntime.jsx(DialogSizeContext.Provider, { value: ctx, children: /* @__PURE__ */ jsxRuntime.jsx(
1981
+ dialog.Dialog,
2109
1982
  {
2110
1983
  open,
2111
1984
  defaultOpen,
@@ -2118,8 +1991,8 @@ var DialogRoot = ({
2118
1991
  var DialogContent = React29__namespace.forwardRef(function DialogContent2(props, ref) {
2119
1992
  const {
2120
1993
  children,
2121
- portalled = true,
2122
- portalRef,
1994
+ portalled: _portalled = true,
1995
+ portalRef: _portalRef,
2123
1996
  backdrop = true,
2124
1997
  className,
2125
1998
  paddingTop: _paddingTop,
@@ -2130,21 +2003,12 @@ var DialogContent = React29__namespace.forwardRef(function DialogContent2(props,
2130
2003
  ...styleProp,
2131
2004
  ..._paddingTop !== void 0 ? { paddingTop: typeof _paddingTop === "number" ? `${_paddingTop * 4}px` : _paddingTop } : {}
2132
2005
  };
2133
- const { size } = useDialogContext();
2134
- let portalProps;
2135
- if (!portalled) {
2136
- portalProps = { container: void 0 };
2137
- } else if (portalRef) {
2138
- portalProps = { container: portalRef.current };
2139
- } else {
2140
- portalProps = {};
2141
- }
2142
- const Wrapper = portalled ? RadixDialog__namespace.Portal : React29__namespace.Fragment;
2143
- const wrapperProps = portalled ? portalProps : {};
2144
- return /* @__PURE__ */ jsxRuntime.jsxs(Wrapper, { ...wrapperProps, children: [
2006
+ const { size } = useDialogSizeContext();
2007
+ return /* @__PURE__ */ jsxRuntime.jsxs(dialog.Dialog.Portal, { children: [
2145
2008
  backdrop && /* @__PURE__ */ jsxRuntime.jsx(
2146
- RadixDialog__namespace.Overlay,
2009
+ dialog.Dialog.Overlay,
2147
2010
  {
2011
+ unstyled: true,
2148
2012
  className: "fixed inset-0 z-[1400] bg-black/80"
2149
2013
  }
2150
2014
  ),
@@ -2157,9 +2021,10 @@ var DialogContent = React29__namespace.forwardRef(function DialogContent2(props,
2157
2021
  "overflow-hidden"
2158
2022
  ),
2159
2023
  children: /* @__PURE__ */ jsxRuntime.jsx(
2160
- RadixDialog__namespace.Content,
2024
+ dialog.Dialog.Content,
2161
2025
  {
2162
2026
  ref,
2027
+ unstyled: true,
2163
2028
  className: cn(
2164
2029
  // Base content styles
2165
2030
  "relative flex flex-col w-full p-6 outline-none text-base",
@@ -2182,7 +2047,7 @@ var DialogContent = React29__namespace.forwardRef(function DialogContent2(props,
2182
2047
  });
2183
2048
  var DialogCloseTrigger = React29__namespace.forwardRef(function DialogCloseTrigger2(props, ref) {
2184
2049
  const { className, ...rest } = props;
2185
- return /* @__PURE__ */ jsxRuntime.jsx(RadixDialog__namespace.Close, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(CloseButton, { ref, className, ...rest, children: props.children }) });
2050
+ return /* @__PURE__ */ jsxRuntime.jsx(dialog.Dialog.Close, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(CloseButton, { ref, className, ...rest, children: props.children }) });
2186
2051
  });
2187
2052
  var DialogHeader = React29__namespace.forwardRef(function DialogHeader2(props, ref) {
2188
2053
  const { startElement: startElementProp, onBackToClick, className, children, ...rest } = props;
@@ -2199,8 +2064,9 @@ var DialogHeader = React29__namespace.forwardRef(function DialogHeader2(props, r
2199
2064
  children: [
2200
2065
  startElement,
2201
2066
  /* @__PURE__ */ jsxRuntime.jsx(
2202
- RadixDialog__namespace.Title,
2067
+ dialog.Dialog.Title,
2203
2068
  {
2069
+ unstyled: true,
2204
2070
  className: cn(
2205
2071
  "text-base lg:text-lg font-medium",
2206
2072
  "whitespace-nowrap overflow-hidden text-ellipsis"
@@ -2240,11 +2106,11 @@ var DialogFooter = React29__namespace.forwardRef(function DialogFooter2({ classN
2240
2106
  }
2241
2107
  );
2242
2108
  });
2243
- var DialogBackdrop = RadixDialog__namespace.Overlay;
2244
- var DialogTitle = RadixDialog__namespace.Title;
2245
- var DialogDescription = RadixDialog__namespace.Description;
2246
- var DialogTrigger = RadixDialog__namespace.Trigger;
2247
- var DialogActionTrigger = RadixDialog__namespace.Close;
2109
+ var DialogBackdrop = dialog.Dialog.Overlay;
2110
+ var DialogTitle = dialog.Dialog.Title;
2111
+ var DialogDescription = dialog.Dialog.Description;
2112
+ var DialogTrigger = dialog.Dialog.Trigger;
2113
+ var DialogActionTrigger = dialog.Dialog.Close;
2248
2114
  var DrawerPlacementContext = React29__namespace.createContext("right");
2249
2115
  var DrawerSizeContext = React29__namespace.createContext("md");
2250
2116
  var DrawerRoot = (props) => {
@@ -2293,7 +2159,7 @@ var PLACEMENT_CLASSES = {
2293
2159
  "data-[state=closed]:animate-out data-[state=closed]:slide-out-to-bottom"
2294
2160
  ].join(" ")
2295
2161
  };
2296
- var SIZE_CLASSES3 = {
2162
+ var SIZE_CLASSES6 = {
2297
2163
  right: { xs: "w-60", sm: "w-80", md: "w-96", lg: "w-[480px]", xl: "w-[640px]", full: "w-screen" },
2298
2164
  left: { xs: "w-60", sm: "w-80", md: "w-96", lg: "w-[480px]", xl: "w-[640px]", full: "w-screen" },
2299
2165
  top: { xs: "h-40", sm: "h-60", md: "h-80", lg: "h-96", xl: "h-[480px]", full: "h-screen" },
@@ -2322,7 +2188,7 @@ var DrawerContent = React29__namespace.forwardRef(
2322
2188
  className: cn(
2323
2189
  "fixed z-50 flex flex-col bg-[var(--color-drawer-bg)] shadow-[var(--shadow-drawer)] duration-300",
2324
2190
  PLACEMENT_CLASSES[placement] ?? PLACEMENT_CLASSES.right,
2325
- SIZE_CLASSES3[placement]?.[size] ?? SIZE_CLASSES3.right?.md,
2191
+ SIZE_CLASSES6[placement]?.[size] ?? SIZE_CLASSES6.right?.md,
2326
2192
  className
2327
2193
  ),
2328
2194
  ...rest,
@@ -2574,92 +2440,100 @@ var Field = React29__namespace.forwardRef(
2574
2440
  );
2575
2441
  }
2576
2442
  );
2577
- var LEVEL_TAG = {
2578
- "1": "h1",
2579
- "2": "h2",
2580
- "3": "h3"
2581
- };
2443
+ var LEVEL_TAG = { "1": "h1", "2": "h2", "3": "h3" };
2582
2444
  var LEVEL_CLASSES = {
2583
2445
  "1": "text-[18px] leading-[24px] font-medium lg:text-[32px] lg:leading-[40px] lg:tracking-[-0.5px]",
2584
2446
  "2": "text-[16px] leading-[24px] font-medium lg:text-[24px] lg:leading-[32px]",
2585
2447
  "3": "text-[14px] leading-[20px] font-semibold lg:text-[18px] lg:leading-[24px] lg:font-medium"
2586
2448
  };
2587
- var BASE_CLASSES2 = "font-heading text-heading";
2449
+ var BASE_CLASSES4 = "font-heading text-heading";
2588
2450
  var Heading = React29__namespace.default.forwardRef(
2589
2451
  function Heading2({ level, className, mb, size: _size, style: styleProp, ...rest }, ref) {
2590
2452
  const Tag3 = level ? LEVEL_TAG[level] : "h2";
2591
2453
  const levelClasses = level ? LEVEL_CLASSES[level] : void 0;
2592
- const shimStyle = { ...styleProp };
2593
- if (mb !== void 0) shimStyle.marginBottom = typeof mb === "number" ? `${mb * 4}px` : mb;
2454
+ const mergedStyle = mb !== void 0 ? { ...styleProp, marginBottom: typeof mb === "number" ? `${mb * 4}px` : mb } : styleProp;
2594
2455
  return /* @__PURE__ */ jsxRuntime.jsx(
2595
2456
  Tag3,
2596
2457
  {
2597
2458
  ref,
2598
- className: cn(BASE_CLASSES2, levelClasses, className),
2599
- style: Object.keys(shimStyle).length > 0 ? shimStyle : void 0,
2459
+ className: cn(BASE_CLASSES4, levelClasses, className),
2460
+ style: mergedStyle,
2600
2461
  ...rest
2601
2462
  }
2602
2463
  );
2603
2464
  }
2604
2465
  );
2605
- var iconButtonVariants = classVarianceAuthority.cva(
2606
- // base
2607
- [
2608
- "inline-flex items-center justify-center",
2609
- "p-0 min-w-auto shrink-0",
2610
- "cursor-pointer border-0 bg-transparent",
2611
- "disabled:opacity-[var(--opacity-control-disabled,0.4)] disabled:cursor-not-allowed"
2612
- ],
2613
- {
2614
- variants: {
2615
- variant: {
2616
- plain: "bg-transparent text-inherit border-none hover:bg-transparent",
2617
- icon_secondary: [
2618
- "bg-transparent text-icon-secondary border-none",
2619
- "hover:text-hover",
2620
- "data-[selected]:bg-selected-control-bg data-[selected]:text-selected-control-text",
2621
- "data-[selected]:hover:text-hover",
2622
- "data-[expanded]:text-hover"
2623
- ],
2624
- icon_background: [
2625
- "bg-[var(--color-button-icon-background-bg)] text-icon-secondary border-none",
2626
- "hover:text-hover",
2627
- "data-[selected]:bg-selected-control-bg data-[selected]:text-selected-control-text",
2628
- "data-[selected]:hover:text-hover",
2629
- "data-[expanded]:text-hover"
2630
- ],
2631
- link: [
2632
- "bg-transparent text-link-primary border-none font-normal px-0 h-auto",
2633
- "hover:bg-transparent hover:text-link-primary-hover",
2634
- "disabled:text-text-secondary"
2635
- ],
2636
- dropdown: [
2637
- "border-2 border-solid bg-transparent",
2638
- "text-[var(--color-button-dropdown-fg)] border-[var(--color-button-dropdown-border)]",
2639
- "hover:bg-transparent hover:text-hover hover:border-hover",
2640
- "data-[expanded]:bg-transparent data-[expanded]:text-hover data-[expanded]:border-hover",
2641
- "data-[selected]:bg-selected-control-bg data-[selected]:text-selected-control-text data-[selected]:border-transparent",
2642
- "data-[selected]:hover:text-hover"
2643
- ],
2644
- pagination: [
2645
- "border-2 border-solid bg-transparent",
2646
- "text-[var(--color-button-pagination-fg)] border-[var(--color-button-pagination-border)]",
2647
- "hover:bg-transparent hover:text-hover hover:border-hover",
2648
- "data-[selected]:bg-selected-control-bg data-[selected]:text-selected-control-text data-[selected]:border-transparent"
2649
- ]
2650
- },
2651
- size: {
2652
- "2xs": "size-5 rounded-sm [&_svg]:size-5",
2653
- "2xs_alt": "size-5 rounded-sm [&_svg]:size-3",
2654
- md: "size-8 rounded-[var(--radius-base,8px)] [&_svg]:size-5"
2655
- }
2466
+ var IconButtonFrame = core.styled(core.View, {
2467
+ name: "LuxIconButton",
2468
+ render: /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button" }),
2469
+ role: "button",
2470
+ cursor: "pointer",
2471
+ display: "inline-flex",
2472
+ alignItems: "center",
2473
+ justifyContent: "center",
2474
+ padding: 0,
2475
+ minWidth: "auto",
2476
+ flexShrink: 1,
2477
+ backgroundColor: "transparent",
2478
+ borderWidth: 0,
2479
+ variants: {
2480
+ size: {
2481
+ "2xs": { width: 20, height: 20, borderRadius: 4 },
2482
+ "2xs_alt": { width: 20, height: 20, borderRadius: 4 },
2483
+ md: { width: 32, height: 32, borderRadius: "var(--radius-base, 8px)" }
2656
2484
  },
2657
- defaultVariants: {
2658
- variant: "plain"
2485
+ disabled: {
2486
+ true: {
2487
+ opacity: 0.4,
2488
+ cursor: "not-allowed",
2489
+ pointerEvents: "none"
2490
+ }
2659
2491
  }
2660
2492
  }
2661
- );
2662
- var IconButton = React29__namespace.default.forwardRef(
2493
+ });
2494
+ var VARIANT_CLASSES4 = {
2495
+ plain: "bg-transparent text-inherit border-none hover:bg-transparent",
2496
+ icon_secondary: [
2497
+ "bg-transparent text-icon-secondary border-none",
2498
+ "hover:text-hover",
2499
+ "data-[selected]:bg-selected-control-bg data-[selected]:text-selected-control-text",
2500
+ "data-[selected]:hover:text-hover",
2501
+ "data-[expanded]:text-hover"
2502
+ ].join(" "),
2503
+ icon_background: [
2504
+ "bg-[var(--color-button-icon-background-bg)] text-icon-secondary border-none",
2505
+ "hover:text-hover",
2506
+ "data-[selected]:bg-selected-control-bg data-[selected]:text-selected-control-text",
2507
+ "data-[selected]:hover:text-hover",
2508
+ "data-[expanded]:text-hover"
2509
+ ].join(" "),
2510
+ link: [
2511
+ "bg-transparent text-link-primary border-none font-normal px-0 h-auto",
2512
+ "hover:bg-transparent hover:text-link-primary-hover",
2513
+ "disabled:text-text-secondary"
2514
+ ].join(" "),
2515
+ dropdown: [
2516
+ "border-2 border-solid bg-transparent",
2517
+ "text-[var(--color-button-dropdown-fg)] border-[var(--color-button-dropdown-border)]",
2518
+ "hover:bg-transparent hover:text-hover hover:border-hover",
2519
+ "data-[expanded]:bg-transparent data-[expanded]:text-hover data-[expanded]:border-hover",
2520
+ "data-[selected]:bg-selected-control-bg data-[selected]:text-selected-control-text data-[selected]:border-transparent",
2521
+ "data-[selected]:hover:text-hover"
2522
+ ].join(" "),
2523
+ pagination: [
2524
+ "border-2 border-solid bg-transparent",
2525
+ "text-[var(--color-button-pagination-fg)] border-[var(--color-button-pagination-border)]",
2526
+ "hover:bg-transparent hover:text-hover hover:border-hover",
2527
+ "data-[selected]:bg-selected-control-bg data-[selected]:text-selected-control-text data-[selected]:border-transparent"
2528
+ ].join(" ")
2529
+ };
2530
+ var ICON_SIZE_CLASSES = {
2531
+ "2xs": "[&_svg]:size-5",
2532
+ "2xs_alt": "[&_svg]:size-3",
2533
+ md: "[&_svg]:size-5"
2534
+ };
2535
+ var SP2 = 4;
2536
+ var IconButton = React29__namespace.forwardRef(
2663
2537
  function IconButton2(props, ref) {
2664
2538
  const {
2665
2539
  size,
@@ -2672,7 +2546,7 @@ var IconButton = React29__namespace.default.forwardRef(
2672
2546
  disabled,
2673
2547
  className,
2674
2548
  children,
2675
- as: Comp = "button",
2549
+ as: _as,
2676
2550
  style: styleProp,
2677
2551
  // Strip Chakra style props
2678
2552
  boxSize: _boxSize,
@@ -2685,37 +2559,47 @@ var IconButton = React29__namespace.default.forwardRef(
2685
2559
  _expanded,
2686
2560
  ...rest
2687
2561
  } = props;
2688
- const SP = 4;
2689
2562
  const shimStyle = { ...styleProp };
2690
2563
  if (_boxSize !== void 0) {
2691
- const bs = typeof _boxSize === "number" ? `${_boxSize * SP}px` : _boxSize;
2564
+ const bs = typeof _boxSize === "number" ? `${_boxSize * SP2}px` : _boxSize;
2692
2565
  shimStyle.width = bs;
2693
2566
  shimStyle.height = bs;
2694
2567
  }
2695
2568
  if (_color) shimStyle.color = _color;
2696
2569
  if (_px !== void 0) {
2697
- const v = typeof _px === "number" ? `${_px * SP}px` : _px;
2570
+ const v = typeof _px === "number" ? `${_px * SP2}px` : _px;
2698
2571
  shimStyle.paddingLeft = v;
2699
2572
  shimStyle.paddingRight = v;
2700
2573
  }
2701
2574
  if (_borderRadius) shimStyle.borderRadius = _borderRadius;
2702
- if (_ml !== void 0) shimStyle.marginLeft = typeof _ml === "number" ? `${_ml * SP}px` : _ml;
2703
- if (_mr !== void 0) shimStyle.marginRight = typeof _mr === "number" ? `${_mr * SP}px` : _mr;
2704
- const mergedBtnStyle = Object.keys(shimStyle).length > 0 ? shimStyle : void 0;
2575
+ if (_ml !== void 0) shimStyle.marginLeft = typeof _ml === "number" ? `${_ml * SP2}px` : _ml;
2576
+ if (_mr !== void 0) shimStyle.marginRight = typeof _mr === "number" ? `${_mr * SP2}px` : _mr;
2577
+ const mergedStyle = Object.keys(shimStyle).length > 0 ? shimStyle : void 0;
2578
+ const variantClass = VARIANT_CLASSES4[variant] ?? VARIANT_CLASSES4.plain;
2579
+ const iconSizeClass = size ? ICON_SIZE_CLASSES[size] ?? "" : "";
2580
+ const combinedClassName = [variantClass, iconSizeClass, className].filter(Boolean).join(" ");
2705
2581
  const button = /* @__PURE__ */ jsxRuntime.jsx(
2706
- Comp,
2582
+ IconButtonFrame,
2707
2583
  {
2708
2584
  ref,
2709
- type: Comp === "button" ? "button" : void 0,
2710
- disabled: !loadingSkeleton && (loading || disabled),
2711
- className: cn(iconButtonVariants({ variant, size }), className),
2712
- style: mergedBtnStyle,
2585
+ size,
2586
+ disabled: !loadingSkeleton && (loading || disabled) || void 0,
2587
+ render: _as ? React29__namespace.createElement(_as) : void 0,
2588
+ className: combinedClassName,
2589
+ style: mergedStyle,
2713
2590
  ...expanded ? { "data-expanded": true } : {},
2714
2591
  ...selected ? { "data-selected": true } : {},
2715
2592
  ...highlighted ? { "data-highlighted": true } : {},
2716
2593
  ...loadingSkeleton ? { "data-loading-skeleton": true } : {},
2717
2594
  ...rest,
2718
- 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
2595
+ children: loading ? /* @__PURE__ */ jsxRuntime.jsx(
2596
+ "span",
2597
+ {
2598
+ className: "inline-block size-5 animate-spin rounded-full border-2 border-current border-b-transparent border-l-transparent",
2599
+ role: "status",
2600
+ "aria-label": "Loading"
2601
+ }
2602
+ ) : children
2719
2603
  }
2720
2604
  );
2721
2605
  if (loadingSkeleton) {
@@ -2928,46 +2812,36 @@ var Image2 = React29__namespace.default.forwardRef(
2928
2812
  ] });
2929
2813
  }
2930
2814
  );
2931
- var inputVariants = classVarianceAuthority.cva(
2932
- [
2933
- "w-full appearance-none outline-none transition-colors",
2934
- "bg-[var(--color-input-bg)] text-[var(--color-input-fg)] border-[var(--color-input-border)]",
2935
- "placeholder:text-[var(--color-input-placeholder,theme(colors.gray.400))]",
2936
- "hover:border-[var(--color-input-border-hover,theme(colors.gray.400))]",
2937
- "focus:border-[var(--color-input-border-focus,theme(colors.blue.500))]",
2938
- "focus:placeholder:text-[var(--color-input-placeholder-focus,theme(colors.gray.300))]",
2939
- "disabled:opacity-40 disabled:cursor-not-allowed",
2940
- "read-only:opacity-70",
2941
- "data-[invalid]:border-[var(--color-input-border-invalid,theme(colors.red.500))]"
2942
- ].join(" "),
2943
- {
2944
- variants: {
2945
- size: {
2946
- xs: "h-6 px-2 text-xs rounded",
2947
- sm: "h-8 px-3 text-sm rounded-md",
2948
- md: "h-10 px-4 text-base rounded-md",
2949
- lg: "h-12 px-4 text-lg rounded-lg",
2950
- "2xl": "h-14 px-4 text-xl rounded-lg"
2951
- },
2952
- variant: {
2953
- outline: "border border-solid",
2954
- filled: "border-0 bg-[var(--color-input-filled-bg,theme(colors.gray.100))]",
2955
- unstyled: "border-0 bg-transparent p-0 h-auto"
2956
- }
2957
- },
2958
- defaultVariants: {
2959
- size: "md",
2960
- variant: "outline"
2961
- }
2962
- }
2963
- );
2815
+ var INPUT_BASE = [
2816
+ "w-full appearance-none outline-none transition-colors",
2817
+ "bg-[var(--color-input-bg)] text-[var(--color-input-fg)] border-[var(--color-input-border)]",
2818
+ "placeholder:text-[var(--color-input-placeholder,theme(colors.gray.400))]",
2819
+ "hover:border-[var(--color-input-border-hover,theme(colors.gray.400))]",
2820
+ "focus:border-[var(--color-input-border-focus,theme(colors.blue.500))]",
2821
+ "focus:placeholder:text-[var(--color-input-placeholder-focus,theme(colors.gray.300))]",
2822
+ "disabled:opacity-40 disabled:cursor-not-allowed",
2823
+ "read-only:opacity-70",
2824
+ "data-[invalid]:border-[var(--color-input-border-invalid,theme(colors.red.500))]"
2825
+ ].join(" ");
2826
+ var INPUT_SIZE_CLASSES = {
2827
+ xs: "h-6 px-2 text-xs rounded",
2828
+ sm: "h-8 px-3 text-sm rounded-md",
2829
+ md: "h-10 px-4 text-base rounded-md",
2830
+ lg: "h-12 px-4 text-lg rounded-lg",
2831
+ "2xl": "h-14 px-4 text-xl rounded-lg"
2832
+ };
2833
+ var INPUT_VARIANT_CLASSES = {
2834
+ outline: "border border-solid",
2835
+ filled: "border-0 bg-[var(--color-input-filled-bg,theme(colors.gray.100))]",
2836
+ unstyled: "border-0 bg-transparent p-0 h-auto"
2837
+ };
2964
2838
  var Input = React29__namespace.default.forwardRef(
2965
- ({ size, variant, className, ...rest }, ref) => {
2839
+ ({ size = "md", variant = "outline", className, ...rest }, ref) => {
2966
2840
  return /* @__PURE__ */ jsxRuntime.jsx(
2967
2841
  "input",
2968
2842
  {
2969
2843
  ref,
2970
- className: cn(inputVariants({ size, variant }), className),
2844
+ className: cn(INPUT_BASE, INPUT_SIZE_CLASSES[size], INPUT_VARIANT_CLASSES[variant], className),
2971
2845
  ...rest
2972
2846
  }
2973
2847
  );
@@ -3350,7 +3224,7 @@ var MenuTriggerItem = React29__namespace.forwardRef(function MenuTriggerItem2(pr
3350
3224
  }
3351
3225
  ) });
3352
3226
  });
3353
- var INPUT_BASE = [
3227
+ var INPUT_BASE2 = [
3354
3228
  "w-10 h-10",
3355
3229
  "text-center text-sm font-medium",
3356
3230
  "border-2 rounded-md",
@@ -3481,7 +3355,7 @@ var PinInput = React29__namespace.forwardRef(
3481
3355
  "aria-invalid": invalid || void 0,
3482
3356
  value: values[index] || "",
3483
3357
  className: cn(
3484
- INPUT_BASE,
3358
+ INPUT_BASE2,
3485
3359
  values[index] && INPUT_FILLED,
3486
3360
  invalid && INPUT_INVALID,
3487
3361
  attached && index > 0 && "-ml-0.5"
@@ -3531,8 +3405,7 @@ var PopoverRoot = (props) => {
3531
3405
  positioning,
3532
3406
  autoFocus = false,
3533
3407
  closeOnInteractOutside = true,
3534
- modal = false,
3535
- // lazyMount and unmountOnExit are handled via forceMount on Portal/Content
3408
+ // lazyMount and unmountOnExit are handled via keepChildrenMounted
3536
3409
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
3537
3410
  lazyMount: _lazyMount,
3538
3411
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -3568,23 +3441,27 @@ var PopoverRoot = (props) => {
3568
3441
  const handleOpenChange = React29__namespace.useCallback((isOpen) => {
3569
3442
  onOpenChange?.({ open: isOpen });
3570
3443
  }, [onOpenChange]);
3444
+ const placement = mergedPositioning.placement ?? "bottom-start";
3445
+ const offset = mergedPositioning.offset?.mainAxis ?? 4;
3571
3446
  return /* @__PURE__ */ jsxRuntime.jsx(PositioningContext2.Provider, { value: positioningValue, children: /* @__PURE__ */ jsxRuntime.jsx(
3572
- RadixPopover__namespace.Root,
3447
+ popover.Popover,
3573
3448
  {
3574
3449
  open,
3575
3450
  defaultOpen,
3576
3451
  onOpenChange: handleOpenChange,
3577
- modal,
3452
+ placement,
3453
+ offset,
3454
+ disableFocus: !autoFocus,
3578
3455
  children
3579
3456
  }
3580
3457
  ) });
3581
3458
  };
3582
3459
  var PopoverTrigger = React29__namespace.forwardRef(function PopoverTrigger2(props, ref) {
3583
3460
  const { asChild = true, ...rest } = props;
3584
- return /* @__PURE__ */ jsxRuntime.jsx(RadixPopover__namespace.Trigger, { asChild, ref, ...rest });
3461
+ return /* @__PURE__ */ jsxRuntime.jsx(popover.Popover.Trigger, { asChild: asChild ? "except-style" : void 0, ref, ...rest });
3585
3462
  });
3586
3463
  var PopoverContent = React29__namespace.forwardRef(function PopoverContent2(props, ref) {
3587
- const { portalled = true, portalRef, className, w, minW, maxW, paddingTop, style: styleProp, ...rest } = props;
3464
+ const { portalled = true, portalRef: _portalRef, className, w, minW, maxW, paddingTop, style: styleProp, ...rest } = props;
3588
3465
  const resolvedW = typeof w === "object" ? w.base ?? w.lg : w;
3589
3466
  const contentStyle = {
3590
3467
  ...styleProp,
@@ -3593,20 +3470,11 @@ var PopoverContent = React29__namespace.forwardRef(function PopoverContent2(prop
3593
3470
  ...maxW ? { maxWidth: maxW } : {},
3594
3471
  ...paddingTop !== void 0 ? { paddingTop: typeof paddingTop === "number" ? `${paddingTop * 4}px` : paddingTop } : {}
3595
3472
  };
3596
- const positioning = React29__namespace.useContext(PositioningContext2);
3597
- const preventFocus = React29__namespace.useCallback((e) => e.preventDefault(), []);
3598
- const preventInteract = React29__namespace.useCallback((e) => e.preventDefault(), []);
3599
- const content = /* @__PURE__ */ jsxRuntime.jsx(
3600
- RadixPopover__namespace.Content,
3473
+ return /* @__PURE__ */ jsxRuntime.jsx(
3474
+ popover.Popover.Content,
3601
3475
  {
3602
3476
  ref,
3603
- side: positioning.side,
3604
- align: positioning.align,
3605
- sideOffset: positioning.sideOffset,
3606
- alignOffset: positioning.alignOffset,
3607
- collisionPadding: positioning.collisionPadding,
3608
- onOpenAutoFocus: positioning.autoFocus ? void 0 : preventFocus,
3609
- onInteractOutside: positioning.closeOnInteractOutside ? void 0 : preventInteract,
3477
+ unstyled: true,
3610
3478
  className: cn(
3611
3479
  "z-50 rounded-lg border border-[var(--color-popover-border,var(--color-border-divider))]",
3612
3480
  "bg-[var(--color-popover-bg,var(--color-dialog-bg))]",
@@ -3622,17 +3490,14 @@ var PopoverContent = React29__namespace.forwardRef(function PopoverContent2(prop
3622
3490
  ...rest
3623
3491
  }
3624
3492
  );
3625
- if (!portalled) {
3626
- return content;
3627
- }
3628
- return /* @__PURE__ */ jsxRuntime.jsx(RadixPopover__namespace.Portal, { container: portalRef?.current ?? void 0, children: content });
3629
3493
  });
3630
3494
  var PopoverArrow = React29__namespace.forwardRef(function PopoverArrow2(props, ref) {
3631
3495
  const { className, ...rest } = props;
3632
3496
  return /* @__PURE__ */ jsxRuntime.jsx(
3633
- RadixPopover__namespace.Arrow,
3497
+ popover.Popover.Arrow,
3634
3498
  {
3635
3499
  ref,
3500
+ unstyled: true,
3636
3501
  className: cn("fill-[var(--color-popover-bg,var(--color-dialog-bg))]", className),
3637
3502
  ...rest
3638
3503
  }
@@ -3641,8 +3506,9 @@ var PopoverArrow = React29__namespace.forwardRef(function PopoverArrow2(props, r
3641
3506
  var PopoverCloseTrigger = React29__namespace.forwardRef(function PopoverCloseTrigger2(props, ref) {
3642
3507
  const { className, ...rest } = props;
3643
3508
  return /* @__PURE__ */ jsxRuntime.jsx(
3644
- RadixPopover__namespace.Close,
3509
+ popover.Popover.Close,
3645
3510
  {
3511
+ unstyled: true,
3646
3512
  className: cn("absolute top-1 right-1", className),
3647
3513
  ...rest,
3648
3514
  asChild: true,
@@ -3656,7 +3522,7 @@ var PopoverCloseTriggerWrapper = React29__namespace.forwardRef(function PopoverC
3656
3522
  if (disabled) {
3657
3523
  return children;
3658
3524
  }
3659
- return /* @__PURE__ */ jsxRuntime.jsx(RadixPopover__namespace.Close, { ref, ...rest, asChild: true, children });
3525
+ return /* @__PURE__ */ jsxRuntime.jsx(popover.Popover.Close, { ref, ...rest, asChild: true, children });
3660
3526
  });
3661
3527
  var PopoverBody = React29__namespace.forwardRef(function PopoverBody2(props, ref) {
3662
3528
  const {
@@ -3740,7 +3606,7 @@ var PopoverDescription = React29__namespace.forwardRef(function PopoverDescripti
3740
3606
  }
3741
3607
  );
3742
3608
  });
3743
- var SIZE_CLASSES4 = {
3609
+ var SIZE_CLASSES7 = {
3744
3610
  sm: "h-1",
3745
3611
  md: "h-2",
3746
3612
  lg: "h-3",
@@ -3798,7 +3664,7 @@ var Progress = React29__namespace.forwardRef(
3798
3664
  className: cn(
3799
3665
  "w-full overflow-hidden rounded-full",
3800
3666
  "bg-[var(--color-progress-track)]",
3801
- SIZE_CLASSES4[size],
3667
+ SIZE_CLASSES7[size],
3802
3668
  trackProps?.className
3803
3669
  ),
3804
3670
  style: trackStyle,
@@ -3937,7 +3803,7 @@ var ProgressCircleValueText = React29__namespace.forwardRef(function ProgressCir
3937
3803
  }
3938
3804
  );
3939
3805
  });
3940
- var SIZE_CLASSES5 = {
3806
+ var SIZE_CLASSES8 = {
3941
3807
  xs: {
3942
3808
  root: "gap-1.5",
3943
3809
  control: "h-3 w-3",
@@ -4018,7 +3884,7 @@ var RadioBase = React29__namespace.forwardRef(
4018
3884
  function Radio(props, ref) {
4019
3885
  const { children, inputProps, rootRef, value, disabled, className, ...rest } = props;
4020
3886
  const size = React29__namespace.useContext(RadioSizeContext);
4021
- const sizeClasses2 = SIZE_CLASSES5[size];
3887
+ const sizeClasses2 = SIZE_CLASSES8[size];
4022
3888
  return /* @__PURE__ */ jsxRuntime.jsxs(
4023
3889
  "label",
4024
3890
  {
@@ -4533,7 +4399,7 @@ var SelectAsync = React29__namespace.forwardRef((props, ref) => {
4533
4399
  }
4534
4400
  );
4535
4401
  });
4536
- var VARIANT_CLASSES3 = {
4402
+ var VARIANT_CLASSES5 = {
4537
4403
  solid: "border-solid",
4538
4404
  dashed: "border-dashed",
4539
4405
  dotted: "border-dotted"
@@ -4562,7 +4428,7 @@ var Separator2 = React29__namespace.default.forwardRef(
4562
4428
  className: cn(
4563
4429
  "border-[var(--color-border-divider)]",
4564
4430
  "border-0",
4565
- VARIANT_CLASSES3[variant],
4431
+ VARIANT_CLASSES5[variant],
4566
4432
  isVertical ? VERTICAL_SIZE_CLASSES[size] : HORIZONTAL_SIZE_CLASSES[size],
4567
4433
  isVertical ? "self-stretch h-auto w-0" : "w-full",
4568
4434
  className
@@ -4676,7 +4542,7 @@ function SliderMarks(props) {
4676
4542
  }
4677
4543
  var NOOP3 = () => {
4678
4544
  };
4679
- var SIZE_CLASSES6 = {
4545
+ var SIZE_CLASSES9 = {
4680
4546
  sm: {
4681
4547
  root: "h-4 w-7",
4682
4548
  thumb: "h-3 w-3 data-[state=checked]:translate-x-3",
@@ -4726,7 +4592,7 @@ var SwitchBase = React29__namespace.forwardRef(
4726
4592
  },
4727
4593
  [isControlled, onCheckedChange]
4728
4594
  );
4729
- const sizeClasses2 = SIZE_CLASSES6[size];
4595
+ const sizeClasses2 = SIZE_CLASSES9[size];
4730
4596
  const isRtl = direction === "rtl";
4731
4597
  return /* @__PURE__ */ jsxRuntime.jsxs(
4732
4598
  "label",
@@ -4802,11 +4668,11 @@ var SwitchBase = React29__namespace.forwardRef(
4802
4668
  );
4803
4669
  var Switch2 = SwitchBase;
4804
4670
  var ArrowIcon3 = ({ className }) => /* @__PURE__ */ jsxRuntime.jsx("svg", { className, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M5 12h14M12 5l7 7-7 7", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) });
4805
- var SPACING_SCALE2 = 4;
4671
+ var SPACING_SCALE = 4;
4806
4672
  function toPixels(value) {
4807
4673
  if (value === void 0) return void 0;
4808
4674
  if (typeof value === "string") return value;
4809
- return `${value * SPACING_SCALE2}px`;
4675
+ return `${value * SPACING_SCALE}px`;
4810
4676
  }
4811
4677
  function extractStyles(props) {
4812
4678
  const style = {};
@@ -5411,39 +5277,18 @@ var nbsp = String.fromCharCode(160);
5411
5277
  function TruncatedTextTooltip2({ label, children }) {
5412
5278
  return /* @__PURE__ */ jsxRuntime.jsx(Tooltip, { content: label, positioning: { placement: "top" }, children });
5413
5279
  }
5414
- var tagVariants = classVarianceAuthority.cva(
5415
- [
5416
- "inline-flex items-center align-top max-w-full select-text rounded-sm",
5417
- "focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-500"
5418
- ].join(" "),
5419
- {
5420
- variants: {
5421
- variant: {
5422
- subtle: "bg-[var(--color-tag-subtle-bg)] text-[var(--color-tag-subtle-fg)]",
5423
- clickable: [
5424
- "cursor-pointer",
5425
- "bg-[var(--color-tag-clickable-bg)] text-[var(--color-tag-clickable-fg)]",
5426
- "hover:opacity-76"
5427
- ].join(" "),
5428
- filter: "bg-[var(--color-tag-filter-bg)]",
5429
- select: [
5430
- "cursor-pointer",
5431
- "bg-[var(--color-tag-select-bg)] text-[var(--color-tag-select-fg)]",
5432
- "hover:text-[var(--color-hover)] hover:opacity-76"
5433
- ].join(" ")
5434
- },
5435
- size: {
5436
- sm: "px-1 py-0.5 min-h-5 gap-1 text-xs",
5437
- md: "px-1 py-0.5 min-h-6 gap-1 text-sm",
5438
- lg: "px-1.5 py-1.5 min-h-8 min-w-8 gap-1 text-sm"
5439
- }
5440
- },
5441
- defaultVariants: {
5442
- variant: "subtle",
5443
- size: "md"
5444
- }
5445
- }
5446
- );
5280
+ var TAG_BASE = "inline-flex items-center align-top max-w-full select-text rounded-sm focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-500";
5281
+ var TAG_VARIANT_CLASSES = {
5282
+ subtle: "bg-[var(--color-tag-subtle-bg)] text-[var(--color-tag-subtle-fg)]",
5283
+ clickable: "cursor-pointer bg-[var(--color-tag-clickable-bg)] text-[var(--color-tag-clickable-fg)] hover:opacity-76",
5284
+ filter: "bg-[var(--color-tag-filter-bg)]",
5285
+ select: "cursor-pointer bg-[var(--color-tag-select-bg)] text-[var(--color-tag-select-fg)] hover:text-[var(--color-hover)] hover:opacity-76"
5286
+ };
5287
+ var TAG_SIZE_CLASSES = {
5288
+ sm: "px-1 py-0.5 min-h-5 gap-1 text-xs",
5289
+ md: "px-1 py-0.5 min-h-6 gap-1 text-sm",
5290
+ lg: "px-1.5 py-1.5 min-h-8 min-w-8 gap-1 text-sm"
5291
+ };
5447
5292
  var TAG_SELECTED_CLASSES = [
5448
5293
  "bg-[var(--color-tag-select-selected-bg)]",
5449
5294
  "text-[var(--color-tag-select-selected-fg)]",
@@ -5485,7 +5330,9 @@ var Tag = React29__namespace.forwardRef(
5485
5330
  {
5486
5331
  ref,
5487
5332
  className: cn(
5488
- tagVariants({ variant, size }),
5333
+ TAG_BASE,
5334
+ TAG_VARIANT_CLASSES[variant ?? "subtle"],
5335
+ TAG_SIZE_CLASSES[size ?? "md"],
5489
5336
  selected && !loading && TAG_SELECTED_CLASSES,
5490
5337
  disabled && TAG_DISABLED_CLASSES,
5491
5338
  className
@@ -5513,46 +5360,36 @@ var Tag = React29__namespace.forwardRef(
5513
5360
  ) });
5514
5361
  }
5515
5362
  );
5516
- var textareaVariants = classVarianceAuthority.cva(
5517
- [
5518
- "w-full appearance-none outline-none transition-colors resize-y",
5519
- "bg-[var(--color-input-bg)] text-[var(--color-input-fg)] border-[var(--color-input-border)]",
5520
- "placeholder:text-[var(--color-input-placeholder,theme(colors.gray.400))]",
5521
- "hover:border-[var(--color-input-border-hover,theme(colors.gray.400))]",
5522
- "focus:border-[var(--color-input-border-focus,theme(colors.blue.500))]",
5523
- "focus:placeholder:text-[var(--color-input-placeholder-focus,theme(colors.gray.300))]",
5524
- "disabled:opacity-40 disabled:cursor-not-allowed",
5525
- "read-only:opacity-70",
5526
- "data-[invalid]:border-[var(--color-input-border-invalid,theme(colors.red.500))]"
5527
- ].join(" "),
5528
- {
5529
- variants: {
5530
- size: {
5531
- xs: "px-2 py-1 text-xs rounded",
5532
- sm: "px-3 py-2 text-sm rounded-md",
5533
- md: "px-4 py-2 text-base rounded-md",
5534
- lg: "px-4 py-3 text-lg rounded-lg",
5535
- "2xl": "px-4 py-3 text-xl rounded-lg"
5536
- },
5537
- variant: {
5538
- outline: "border border-solid",
5539
- filled: "border-0 bg-[var(--color-input-filled-bg,theme(colors.gray.100))]",
5540
- unstyled: "border-0 bg-transparent p-0"
5541
- }
5542
- },
5543
- defaultVariants: {
5544
- size: "md",
5545
- variant: "outline"
5546
- }
5547
- }
5548
- );
5363
+ var TEXTAREA_BASE = [
5364
+ "w-full appearance-none outline-none transition-colors resize-y",
5365
+ "bg-[var(--color-input-bg)] text-[var(--color-input-fg)] border-[var(--color-input-border)]",
5366
+ "placeholder:text-[var(--color-input-placeholder,theme(colors.gray.400))]",
5367
+ "hover:border-[var(--color-input-border-hover,theme(colors.gray.400))]",
5368
+ "focus:border-[var(--color-input-border-focus,theme(colors.blue.500))]",
5369
+ "focus:placeholder:text-[var(--color-input-placeholder-focus,theme(colors.gray.300))]",
5370
+ "disabled:opacity-40 disabled:cursor-not-allowed",
5371
+ "read-only:opacity-70",
5372
+ "data-[invalid]:border-[var(--color-input-border-invalid,theme(colors.red.500))]"
5373
+ ].join(" ");
5374
+ var TEXTAREA_SIZE_CLASSES = {
5375
+ xs: "px-2 py-1 text-xs rounded",
5376
+ sm: "px-3 py-2 text-sm rounded-md",
5377
+ md: "px-4 py-2 text-base rounded-md",
5378
+ lg: "px-4 py-3 text-lg rounded-lg",
5379
+ "2xl": "px-4 py-3 text-xl rounded-lg"
5380
+ };
5381
+ var TEXTAREA_VARIANT_CLASSES = {
5382
+ outline: "border border-solid",
5383
+ filled: "border-0 bg-[var(--color-input-filled-bg,theme(colors.gray.100))]",
5384
+ unstyled: "border-0 bg-transparent p-0"
5385
+ };
5549
5386
  var Textarea = React29__namespace.default.forwardRef(
5550
- ({ size, variant, className, ...rest }, ref) => {
5387
+ ({ size = "md", variant = "outline", className, ...rest }, ref) => {
5551
5388
  return /* @__PURE__ */ jsxRuntime.jsx(
5552
5389
  "textarea",
5553
5390
  {
5554
5391
  ref,
5555
- className: cn(textareaVariants({ size, variant }), className),
5392
+ className: cn(TEXTAREA_BASE, TEXTAREA_SIZE_CLASSES[size], TEXTAREA_VARIANT_CLASSES[variant], className),
5556
5393
  ...rest
5557
5394
  }
5558
5395
  );
@@ -5649,7 +5486,7 @@ var Toaster = () => {
5649
5486
  }
5650
5487
  );
5651
5488
  };
5652
- function Provider2(props) {
5489
+ function Provider(props) {
5653
5490
  return /* @__PURE__ */ jsxRuntime.jsx(ColorModeProvider, { ...props });
5654
5491
  }
5655
5492
  function fmt(n, decimals = 2) {
@@ -7264,7 +7101,7 @@ exports.Progress = Progress;
7264
7101
  exports.ProgressCircleRing = ProgressCircleRing;
7265
7102
  exports.ProgressCircleRoot = ProgressCircleRoot;
7266
7103
  exports.ProgressCircleValueText = ProgressCircleValueText;
7267
- exports.Provider = Provider2;
7104
+ exports.Provider = Provider;
7268
7105
  exports.Radio = Radio2;
7269
7106
  exports.RadioGroup = RadioGroup3;
7270
7107
  exports.Rating = Rating;