@luxfi/ui 7.3.2 → 7.4.2

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 (154) hide show
  1. package/dist/alert.cjs +2 -2
  2. package/dist/alert.js +1 -1
  3. package/dist/avatar.cjs +7 -6
  4. package/dist/avatar.js +7 -5
  5. package/dist/badge.cjs +36 -38
  6. package/dist/badge.js +31 -33
  7. package/dist/bank.cjs +13 -13
  8. package/dist/bank.d.cts +31 -24
  9. package/dist/bank.d.ts +31 -24
  10. package/dist/bank.js +1 -1
  11. package/dist/button.cjs +3 -3
  12. package/dist/button.js +1 -1
  13. package/dist/checkbox.cjs +4 -4
  14. package/dist/checkbox.d.cts +3 -2
  15. package/dist/checkbox.d.ts +3 -2
  16. package/dist/checkbox.js +5 -4
  17. package/dist/chrome.cjs +950 -0
  18. package/dist/chrome.d.cts +93 -0
  19. package/dist/chrome.d.ts +93 -0
  20. package/dist/chrome.js +921 -0
  21. package/dist/close-button.cjs +2 -2
  22. package/dist/close-button.js +1 -1
  23. package/dist/dialog.cjs +13 -14
  24. package/dist/dialog.d.cts +58 -5
  25. package/dist/dialog.d.ts +58 -5
  26. package/dist/dialog.js +1 -2
  27. package/dist/drawer.cjs +87 -21
  28. package/dist/drawer.js +85 -19
  29. package/dist/expiration-selector.cjs +3 -2
  30. package/dist/expiration-selector.js +3 -2
  31. package/dist/greeks-display.cjs +6 -6
  32. package/dist/greeks-display.js +6 -6
  33. package/dist/gui.cjs +13 -0
  34. package/dist/gui.d.cts +2 -0
  35. package/dist/gui.d.ts +2 -0
  36. package/dist/gui.js +2 -0
  37. package/dist/heading.cjs +4 -2
  38. package/dist/heading.js +4 -2
  39. package/dist/iam.cjs +206 -0
  40. package/dist/iam.d.cts +65 -0
  41. package/dist/iam.d.ts +65 -0
  42. package/dist/iam.js +201 -0
  43. package/dist/icon-button.cjs +2 -2
  44. package/dist/icon-button.js +1 -1
  45. package/dist/icons.cjs +13 -0
  46. package/dist/icons.d.cts +1 -0
  47. package/dist/icons.d.ts +1 -0
  48. package/dist/icons.js +2 -0
  49. package/dist/identity.cjs +420 -0
  50. package/dist/identity.d.cts +64 -0
  51. package/dist/identity.d.ts +64 -0
  52. package/dist/identity.js +398 -0
  53. package/dist/index.cjs +1699 -860
  54. package/dist/index.d.cts +12 -4
  55. package/dist/index.d.ts +12 -4
  56. package/dist/index.js +1618 -802
  57. package/dist/input.cjs +13 -3
  58. package/dist/input.d.cts +6 -0
  59. package/dist/input.d.ts +6 -0
  60. package/dist/input.js +13 -3
  61. package/dist/lux.config.cjs +77 -0
  62. package/dist/lux.config.d.cts +433 -0
  63. package/dist/lux.config.d.ts +433 -0
  64. package/dist/lux.config.js +69 -0
  65. package/dist/menu.cjs +4 -4
  66. package/dist/menu.js +4 -4
  67. package/dist/next.cjs +99 -0
  68. package/dist/next.d.cts +29 -0
  69. package/dist/next.d.ts +29 -0
  70. package/dist/next.js +96 -0
  71. package/dist/option-chain.cjs +1 -1
  72. package/dist/option-chain.js +1 -1
  73. package/dist/option-position.cjs +2 -1
  74. package/dist/option-position.js +2 -1
  75. package/dist/pnl-diagram.cjs +8 -6
  76. package/dist/pnl-diagram.js +8 -6
  77. package/dist/popover.cjs +8 -9
  78. package/dist/popover.js +1 -2
  79. package/dist/progress.cjs +7 -6
  80. package/dist/progress.js +7 -5
  81. package/dist/provider.cjs +199 -5
  82. package/dist/provider.d.cts +16 -3
  83. package/dist/provider.d.ts +16 -3
  84. package/dist/provider.js +195 -6
  85. package/dist/radio.cjs +9 -7
  86. package/dist/radio.js +10 -7
  87. package/dist/separator.cjs +3 -1
  88. package/dist/separator.js +3 -1
  89. package/dist/slider.cjs +28 -16
  90. package/dist/slider.js +28 -15
  91. package/dist/strategy-builder.cjs +2 -1
  92. package/dist/strategy-builder.js +2 -1
  93. package/dist/switch.cjs +11 -12
  94. package/dist/switch.js +12 -12
  95. package/dist/tag.cjs +38 -41
  96. package/dist/tag.js +31 -34
  97. package/dist/textarea.cjs +13 -3
  98. package/dist/textarea.d.cts +2 -0
  99. package/dist/textarea.d.ts +2 -0
  100. package/dist/textarea.js +13 -3
  101. package/dist/tooltip.cjs +31 -33
  102. package/dist/tooltip.js +25 -27
  103. package/dist/use-narrow.cjs +46 -0
  104. package/dist/use-narrow.d.cts +12 -0
  105. package/dist/use-narrow.d.ts +12 -0
  106. package/dist/use-narrow.js +20 -0
  107. package/dist/vite.cjs +40 -0
  108. package/dist/vite.d.cts +29 -0
  109. package/dist/vite.d.ts +29 -0
  110. package/dist/vite.js +38 -0
  111. package/dist/white-label.cjs +132 -0
  112. package/dist/white-label.d.cts +59 -0
  113. package/dist/white-label.d.ts +59 -0
  114. package/dist/white-label.js +124 -0
  115. package/package.json +95 -17
  116. package/src/avatar.tsx +22 -16
  117. package/src/bank.tsx +2 -2
  118. package/src/button.tsx +1 -1
  119. package/src/checkbox.tsx +15 -10
  120. package/src/chrome.tsx +459 -0
  121. package/src/close-button.tsx +1 -1
  122. package/src/dialog.tsx +1 -1
  123. package/src/drawer.tsx +83 -10
  124. package/src/expiration-selector.tsx +3 -2
  125. package/src/greeks-display.tsx +9 -6
  126. package/src/gui.ts +17 -0
  127. package/src/heading.tsx +12 -8
  128. package/src/iam.ts +170 -0
  129. package/src/icon-button.tsx +1 -1
  130. package/src/icons.ts +18 -0
  131. package/src/identity.tsx +318 -0
  132. package/src/index.ts +50 -1
  133. package/src/input.tsx +24 -4
  134. package/src/lux.config.ts +82 -0
  135. package/src/menu.tsx +4 -4
  136. package/src/next.ts +142 -0
  137. package/src/option-chain.tsx +1 -1
  138. package/src/option-position.tsx +2 -1
  139. package/src/pnl-diagram.tsx +11 -6
  140. package/src/popover.tsx +1 -1
  141. package/src/progress.tsx +15 -8
  142. package/src/provider.tsx +92 -12
  143. package/src/radio.tsx +15 -11
  144. package/src/separator.tsx +8 -3
  145. package/src/slider.tsx +35 -19
  146. package/src/strategy-builder.tsx +3 -2
  147. package/src/switch.tsx +17 -16
  148. package/src/textarea.tsx +18 -4
  149. package/src/tooltip.tsx +4 -23
  150. package/src/use-narrow.ts +40 -0
  151. package/src/vite.ts +78 -0
  152. package/src/white-label.ts +240 -0
  153. package/tokens.css +544 -319
  154. package/src/tokens.css +0 -438
package/dist/switch.cjs CHANGED
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var RadixSwitch = require('@radix-ui/react-switch');
4
+ var gui = require('@hanzo/gui');
5
5
  var React = require('react');
6
6
  var clsx = require('clsx');
7
7
  var tailwindMerge = require('tailwind-merge');
@@ -25,7 +25,6 @@ function _interopNamespace(e) {
25
25
  return Object.freeze(n);
26
26
  }
27
27
 
28
- var RadixSwitch__namespace = /*#__PURE__*/_interopNamespace(RadixSwitch);
29
28
  var React__namespace = /*#__PURE__*/_interopNamespace(React);
30
29
 
31
30
  // src/switch.tsx
@@ -37,17 +36,17 @@ var NOOP = () => {
37
36
  var SIZE_CLASSES = {
38
37
  sm: {
39
38
  root: "h-4 w-7",
40
- thumb: "h-3 w-3 data-[state=checked]:translate-x-3",
39
+ thumb: "h-3 w-3",
41
40
  label: "text-xs"
42
41
  },
43
42
  md: {
44
43
  root: "h-5 w-9",
45
- thumb: "h-4 w-4 data-[state=checked]:translate-x-4",
44
+ thumb: "h-4 w-4",
46
45
  label: "text-sm"
47
46
  },
48
47
  lg: {
49
48
  root: "h-6 w-11",
50
- thumb: "h-5 w-5 data-[state=checked]:translate-x-5",
49
+ thumb: "h-5 w-5",
51
50
  label: "text-base"
52
51
  }
53
52
  };
@@ -78,9 +77,7 @@ var SwitchBase = React__namespace.forwardRef(
78
77
  if (!isControlled) {
79
78
  setInternalChecked(nextChecked);
80
79
  }
81
- if (onCheckedChange) {
82
- onCheckedChange({ checked: nextChecked });
83
- }
80
+ onCheckedChange?.({ checked: nextChecked });
84
81
  },
85
82
  [isControlled, onCheckedChange]
86
83
  );
@@ -101,8 +98,9 @@ var SwitchBase = React__namespace.forwardRef(
101
98
  ...rest,
102
99
  children: [
103
100
  /* @__PURE__ */ jsxRuntime.jsxs(
104
- RadixSwitch__namespace.Root,
101
+ gui.Switch,
105
102
  {
103
+ unstyled: true,
106
104
  checked: checkedState,
107
105
  onCheckedChange: handleCheckedChange,
108
106
  disabled,
@@ -117,12 +115,13 @@ var SwitchBase = React__namespace.forwardRef(
117
115
  children: [
118
116
  trackLabel && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute inset-0 flex items-center justify-center text-[8px] font-bold text-white pointer-events-none", children: checkedState ? trackLabel.on : trackLabel.off }),
119
117
  /* @__PURE__ */ jsxRuntime.jsx(
120
- RadixSwitch__namespace.Thumb,
118
+ gui.Switch.Thumb,
121
119
  {
120
+ unstyled: true,
121
+ "data-thumb": true,
122
+ transition: "quicker",
122
123
  className: cn(
123
124
  "block rounded-full bg-white shadow-sm",
124
- "transition-transform duration-200",
125
- "translate-x-0.5",
126
125
  sizeClasses.thumb
127
126
  ),
128
127
  children: thumbLabel && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex items-center justify-center h-full w-full text-[8px]", children: checkedState ? thumbLabel.on : thumbLabel.off })
package/dist/switch.js CHANGED
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import * as RadixSwitch from '@radix-ui/react-switch';
2
+ import { Switch } from '@hanzo/gui';
3
3
  import * as React from 'react';
4
4
  import { clsx } from 'clsx';
5
5
  import { twMerge } from 'tailwind-merge';
@@ -14,22 +14,22 @@ var NOOP = () => {
14
14
  var SIZE_CLASSES = {
15
15
  sm: {
16
16
  root: "h-4 w-7",
17
- thumb: "h-3 w-3 data-[state=checked]:translate-x-3",
17
+ thumb: "h-3 w-3",
18
18
  label: "text-xs"
19
19
  },
20
20
  md: {
21
21
  root: "h-5 w-9",
22
- thumb: "h-4 w-4 data-[state=checked]:translate-x-4",
22
+ thumb: "h-4 w-4",
23
23
  label: "text-sm"
24
24
  },
25
25
  lg: {
26
26
  root: "h-6 w-11",
27
- thumb: "h-5 w-5 data-[state=checked]:translate-x-5",
27
+ thumb: "h-5 w-5",
28
28
  label: "text-base"
29
29
  }
30
30
  };
31
31
  var SwitchBase = React.forwardRef(
32
- function Switch(props, ref) {
32
+ function Switch$1(props, ref) {
33
33
  const {
34
34
  inputProps,
35
35
  children,
@@ -55,9 +55,7 @@ var SwitchBase = React.forwardRef(
55
55
  if (!isControlled) {
56
56
  setInternalChecked(nextChecked);
57
57
  }
58
- if (onCheckedChange) {
59
- onCheckedChange({ checked: nextChecked });
60
- }
58
+ onCheckedChange?.({ checked: nextChecked });
61
59
  },
62
60
  [isControlled, onCheckedChange]
63
61
  );
@@ -78,8 +76,9 @@ var SwitchBase = React.forwardRef(
78
76
  ...rest,
79
77
  children: [
80
78
  /* @__PURE__ */ jsxs(
81
- RadixSwitch.Root,
79
+ Switch,
82
80
  {
81
+ unstyled: true,
83
82
  checked: checkedState,
84
83
  onCheckedChange: handleCheckedChange,
85
84
  disabled,
@@ -94,12 +93,13 @@ var SwitchBase = React.forwardRef(
94
93
  children: [
95
94
  trackLabel && /* @__PURE__ */ jsx("span", { className: "absolute inset-0 flex items-center justify-center text-[8px] font-bold text-white pointer-events-none", children: checkedState ? trackLabel.on : trackLabel.off }),
96
95
  /* @__PURE__ */ jsx(
97
- RadixSwitch.Thumb,
96
+ Switch.Thumb,
98
97
  {
98
+ unstyled: true,
99
+ "data-thumb": true,
100
+ transition: "quicker",
99
101
  className: cn(
100
102
  "block rounded-full bg-white shadow-sm",
101
- "transition-transform duration-200",
102
- "translate-x-0.5",
103
103
  sizeClasses.thumb
104
104
  ),
105
105
  children: thumbLabel && /* @__PURE__ */ jsx("span", { className: "flex items-center justify-center h-full w-full text-[8px]", children: checkedState ? thumbLabel.on : thumbLabel.off })
package/dist/tag.cjs CHANGED
@@ -1,12 +1,11 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var React3 = require('react');
4
+ var React4 = require('react');
5
5
  var clsx = require('clsx');
6
6
  var tailwindMerge = require('tailwind-merge');
7
- var core = require('@hanzogui/core');
7
+ var gui = require('@hanzo/gui');
8
8
  var jsxRuntime = require('react/jsx-runtime');
9
- var tooltip = require('@hanzogui/tooltip');
10
9
  var usehooks = require('@uidotdev/usehooks');
11
10
 
12
11
  function _interopNamespace(e) {
@@ -27,14 +26,14 @@ function _interopNamespace(e) {
27
26
  return Object.freeze(n);
28
27
  }
29
28
 
30
- var React3__namespace = /*#__PURE__*/_interopNamespace(React3);
29
+ var React4__namespace = /*#__PURE__*/_interopNamespace(React4);
31
30
 
32
31
  // src/tag.tsx
33
32
  function cn(...inputs) {
34
33
  return tailwindMerge.twMerge(clsx.clsx(inputs));
35
34
  }
36
35
  var CLOSE_ICON_PATH = "M9.44 8.035a.791.791 0 0 0 1.12 0l3.802-3.803a.791.791 0 0 1 1.119 0l.287.287a.79.79 0 0 1 0 1.119L11.965 9.44a.79.79 0 0 0 0 1.118l3.803 3.803a.791.791 0 0 1 0 1.119l-.287.287a.791.791 0 0 1-1.119 0l-3.803-3.803a.79.79 0 0 0-1.118 0l-3.803 3.803a.79.79 0 0 1-1.119 0l-.287-.287a.791.791 0 0 1 0-1.119l3.803-3.803a.791.791 0 0 0 0-1.118L4.232 5.638a.791.791 0 0 1 0-1.119l.287-.287a.791.791 0 0 1 1.119 0L9.44 8.035Z";
37
- var CloseButtonFrame = core.styled(core.View, {
36
+ var CloseButtonFrame = gui.styled(gui.View, {
38
37
  name: "LuxCloseButton",
39
38
  render: /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", "aria-label": "Close" }),
40
39
  role: "button",
@@ -68,7 +67,7 @@ var CLOSE_BUTTON_CLASSES = [
68
67
  "hover:text-[var(--hover-color,currentColor)]",
69
68
  "disabled:opacity-40"
70
69
  ].join(" ");
71
- var CloseButton = React3__namespace.forwardRef(function CloseButton2(props, ref) {
70
+ var CloseButton = React4__namespace.forwardRef(function CloseButton2(props, ref) {
72
71
  const { variant: _variant, size: _size, className, children, ...rest } = props;
73
72
  return /* @__PURE__ */ jsxRuntime.jsx(
74
73
  CloseButtonFrame,
@@ -215,7 +214,7 @@ var SKELETON_CLASSES = [
215
214
  "bg-[length:200%_100%]"
216
215
  ].join(" ");
217
216
  var HIDE_BELOW_MAP = { lg: "lg:hidden", md: "md:hidden", sm: "sm:hidden" };
218
- var Skeleton = React3__namespace.forwardRef(
217
+ var Skeleton = React4__namespace.forwardRef(
219
218
  function Skeleton2(props, ref) {
220
219
  const { loading = false, asChild, className, children, style: styleProp, as: Component = "div", ...allRest } = props;
221
220
  const shimStyle = shimToStyle(props);
@@ -224,10 +223,10 @@ var Skeleton = React3__namespace.forwardRef(
224
223
  const cls = hideBelowClass ? cn(className, hideBelowClass) : className;
225
224
  const htmlRest = stripShims(allRest);
226
225
  if (!loading) {
227
- if (asChild && React3__namespace.isValidElement(children)) return children;
226
+ if (asChild && React4__namespace.isValidElement(children)) return children;
228
227
  return /* @__PURE__ */ jsxRuntime.jsx(Component, { ref, className: cls, style: mergedStyle, ...htmlRest, children });
229
228
  }
230
- if (asChild && React3__namespace.isValidElement(children)) {
229
+ if (asChild && React4__namespace.isValidElement(children)) {
231
230
  return /* @__PURE__ */ jsxRuntime.jsx(
232
231
  Component,
233
232
  {
@@ -253,7 +252,7 @@ var Skeleton = React3__namespace.forwardRef(
253
252
  );
254
253
  }
255
254
  );
256
- React3__namespace.forwardRef(
255
+ React4__namespace.forwardRef(
257
256
  function SkeletonCircle2(props, ref) {
258
257
  const { size = 40, loading = true, className, ...rest } = props;
259
258
  const dimension = typeof size === "number" ? `${size}px` : size;
@@ -269,7 +268,7 @@ React3__namespace.forwardRef(
269
268
  );
270
269
  }
271
270
  );
272
- React3__namespace.forwardRef(
271
+ React4__namespace.forwardRef(
273
272
  function SkeletonText2(props, ref) {
274
273
  const { noOfLines = 3, loading = true, className, ...rest } = props;
275
274
  return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: cn("flex w-full flex-col gap-2", className), ...rest, children: Array.from({ length: noOfLines }).map((_, index) => /* @__PURE__ */ jsxRuntime.jsx(
@@ -282,26 +281,24 @@ React3__namespace.forwardRef(
282
281
  )) });
283
282
  }
284
283
  );
285
- var LG_BREAKPOINT = 1024;
286
- function useIsMobile() {
287
- const [isMobile, setIsMobile] = React3__namespace.useState(() => {
288
- if (typeof window === "undefined") return false;
289
- return window.innerWidth < LG_BREAKPOINT;
290
- });
291
- React3__namespace.useEffect(() => {
292
- const mql = window.matchMedia(`(max-width: ${LG_BREAKPOINT - 1}px)`);
293
- const handler = (e) => setIsMobile(e.matches);
294
- setIsMobile(mql.matches);
295
- mql.addEventListener("change", handler);
296
- return () => mql.removeEventListener("change", handler);
297
- }, []);
298
- return isMobile;
284
+ var TOUCH_PX = 1024;
285
+ function useBelow(px) {
286
+ const [below, setBelow] = React4__namespace.useState(false);
287
+ React4__namespace.useEffect(() => {
288
+ const mql = window.matchMedia(`(max-width: ${px - 1}px)`);
289
+ const apply = () => setBelow(mql.matches);
290
+ apply();
291
+ mql.addEventListener("change", apply);
292
+ return () => mql.removeEventListener("change", apply);
293
+ }, [px]);
294
+ return below;
299
295
  }
296
+ var useIsTouch = () => useBelow(TOUCH_PX);
300
297
  function mapPlacement(p) {
301
298
  if (!p) return void 0;
302
299
  return p;
303
300
  }
304
- var Tooltip = React3__namespace.forwardRef(
301
+ var Tooltip = React4__namespace.forwardRef(
305
302
  function Tooltip2(props, ref) {
306
303
  const {
307
304
  showArrow: showArrowProp,
@@ -320,28 +317,28 @@ var Tooltip = React3__namespace.forwardRef(
320
317
  interactive,
321
318
  positioning
322
319
  } = props;
323
- const [open, setOpen] = React3__namespace.useState(defaultOpen);
324
- const timeoutRef = React3__namespace.useRef(null);
325
- const isMobile = useIsMobile();
326
- const handleOpenChange = React3__namespace.useCallback((nextOpen) => {
320
+ const [open, setOpen] = React4__namespace.useState(defaultOpen);
321
+ const timeoutRef = React4__namespace.useRef(null);
322
+ const isMobile = useIsTouch();
323
+ const handleOpenChange = React4__namespace.useCallback((nextOpen) => {
327
324
  setOpen(nextOpen);
328
325
  onOpenChange?.({ open: nextOpen });
329
326
  }, [onOpenChange]);
330
- const handleOpenChangeManual = React3__namespace.useCallback((nextOpen) => {
327
+ const handleOpenChangeManual = React4__namespace.useCallback((nextOpen) => {
331
328
  timeoutRef.current && window.clearTimeout(timeoutRef.current);
332
329
  timeoutRef.current = window.setTimeout(() => {
333
330
  setOpen(nextOpen);
334
331
  onOpenChange?.({ open: nextOpen });
335
332
  }, nextOpen ? openDelay : closeDelay);
336
333
  }, [closeDelay, openDelay, onOpenChange]);
337
- const handleClickAway = React3__namespace.useCallback(() => {
334
+ const handleClickAway = React4__namespace.useCallback(() => {
338
335
  handleOpenChangeManual(false);
339
336
  }, [handleOpenChangeManual]);
340
337
  const triggerRef = usehooks.useClickAway(handleClickAway);
341
- const handleTriggerClick = React3__namespace.useCallback(() => {
338
+ const handleTriggerClick = React4__namespace.useCallback(() => {
342
339
  handleOpenChangeManual(!open);
343
340
  }, [handleOpenChangeManual, open]);
344
- const handleContentClick = React3__namespace.useCallback((event) => {
341
+ const handleContentClick = React4__namespace.useCallback((event) => {
345
342
  event.stopPropagation();
346
343
  if (interactive) {
347
344
  const closestLink = event.target?.closest("a");
@@ -350,7 +347,7 @@ var Tooltip = React3__namespace.forwardRef(
350
347
  }
351
348
  }
352
349
  }, [interactive, handleOpenChangeManual]);
353
- React3__namespace.useEffect(() => {
350
+ React4__namespace.useEffect(() => {
354
351
  return () => {
355
352
  if (timeoutRef.current) {
356
353
  clearTimeout(timeoutRef.current);
@@ -363,8 +360,8 @@ var Tooltip = React3__namespace.forwardRef(
363
360
  const isPopover = variant === "popover";
364
361
  const placement = mapPlacement(positioning?.placement) ?? "top";
365
362
  const offset = positioning?.offset?.mainAxis ?? 4;
366
- return /* @__PURE__ */ jsxRuntime.jsx(tooltip.TooltipGroup, { delay: openDelay, children: /* @__PURE__ */ jsxRuntime.jsxs(
367
- tooltip.Tooltip,
363
+ return /* @__PURE__ */ jsxRuntime.jsx(gui.TooltipGroup, { delay: openDelay, children: /* @__PURE__ */ jsxRuntime.jsxs(
364
+ gui.Tooltip,
368
365
  {
369
366
  open,
370
367
  onOpenChange: handleOpenChange,
@@ -374,7 +371,7 @@ var Tooltip = React3__namespace.forwardRef(
374
371
  unstyled: true,
375
372
  children: [
376
373
  /* @__PURE__ */ jsxRuntime.jsx(
377
- tooltip.Tooltip.Trigger,
374
+ gui.Tooltip.Trigger,
378
375
  {
379
376
  ref: open ? triggerRef : void 0,
380
377
  asChild: true,
@@ -384,7 +381,7 @@ var Tooltip = React3__namespace.forwardRef(
384
381
  }
385
382
  ),
386
383
  /* @__PURE__ */ jsxRuntime.jsxs(
387
- tooltip.Tooltip.Content,
384
+ gui.Tooltip.Content,
388
385
  {
389
386
  ref,
390
387
  unstyled: true,
@@ -401,7 +398,7 @@ var Tooltip = React3__namespace.forwardRef(
401
398
  ...contentProps,
402
399
  children: [
403
400
  showArrow && /* @__PURE__ */ jsxRuntime.jsx(
404
- tooltip.Tooltip.Arrow,
401
+ gui.Tooltip.Arrow,
405
402
  {
406
403
  unstyled: true,
407
404
  className: cn(
@@ -441,7 +438,7 @@ var TAG_SELECTED_CLASSES = [
441
438
  "hover:opacity-76"
442
439
  ].join(" ");
443
440
  var TAG_DISABLED_CLASSES = "opacity-40 pointer-events-none cursor-not-allowed";
444
- var Tag = React3__namespace.forwardRef(
441
+ var Tag = React4__namespace.forwardRef(
445
442
  function Tag2(props, ref) {
446
443
  const {
447
444
  variant,
package/dist/tag.js CHANGED
@@ -1,10 +1,9 @@
1
1
  "use client";
2
- import * as React3 from 'react';
2
+ import * as React4 from 'react';
3
3
  import { clsx } from 'clsx';
4
4
  import { twMerge } from 'tailwind-merge';
5
- import { styled, View } from '@hanzogui/core';
5
+ import { styled, View, TooltipGroup, Tooltip as Tooltip$1 } from '@hanzo/gui';
6
6
  import { jsx, jsxs } from 'react/jsx-runtime';
7
- import { TooltipGroup, Tooltip as Tooltip$1 } from '@hanzogui/tooltip';
8
7
  import { useClickAway } from '@uidotdev/usehooks';
9
8
 
10
9
  // src/tag.tsx
@@ -46,7 +45,7 @@ var CLOSE_BUTTON_CLASSES = [
46
45
  "hover:text-[var(--hover-color,currentColor)]",
47
46
  "disabled:opacity-40"
48
47
  ].join(" ");
49
- var CloseButton = React3.forwardRef(function CloseButton2(props, ref) {
48
+ var CloseButton = React4.forwardRef(function CloseButton2(props, ref) {
50
49
  const { variant: _variant, size: _size, className, children, ...rest } = props;
51
50
  return /* @__PURE__ */ jsx(
52
51
  CloseButtonFrame,
@@ -193,7 +192,7 @@ var SKELETON_CLASSES = [
193
192
  "bg-[length:200%_100%]"
194
193
  ].join(" ");
195
194
  var HIDE_BELOW_MAP = { lg: "lg:hidden", md: "md:hidden", sm: "sm:hidden" };
196
- var Skeleton = React3.forwardRef(
195
+ var Skeleton = React4.forwardRef(
197
196
  function Skeleton2(props, ref) {
198
197
  const { loading = false, asChild, className, children, style: styleProp, as: Component = "div", ...allRest } = props;
199
198
  const shimStyle = shimToStyle(props);
@@ -202,10 +201,10 @@ var Skeleton = React3.forwardRef(
202
201
  const cls = hideBelowClass ? cn(className, hideBelowClass) : className;
203
202
  const htmlRest = stripShims(allRest);
204
203
  if (!loading) {
205
- if (asChild && React3.isValidElement(children)) return children;
204
+ if (asChild && React4.isValidElement(children)) return children;
206
205
  return /* @__PURE__ */ jsx(Component, { ref, className: cls, style: mergedStyle, ...htmlRest, children });
207
206
  }
208
- if (asChild && React3.isValidElement(children)) {
207
+ if (asChild && React4.isValidElement(children)) {
209
208
  return /* @__PURE__ */ jsx(
210
209
  Component,
211
210
  {
@@ -231,7 +230,7 @@ var Skeleton = React3.forwardRef(
231
230
  );
232
231
  }
233
232
  );
234
- React3.forwardRef(
233
+ React4.forwardRef(
235
234
  function SkeletonCircle2(props, ref) {
236
235
  const { size = 40, loading = true, className, ...rest } = props;
237
236
  const dimension = typeof size === "number" ? `${size}px` : size;
@@ -247,7 +246,7 @@ React3.forwardRef(
247
246
  );
248
247
  }
249
248
  );
250
- React3.forwardRef(
249
+ React4.forwardRef(
251
250
  function SkeletonText2(props, ref) {
252
251
  const { noOfLines = 3, loading = true, className, ...rest } = props;
253
252
  return /* @__PURE__ */ jsx("div", { ref, className: cn("flex w-full flex-col gap-2", className), ...rest, children: Array.from({ length: noOfLines }).map((_, index) => /* @__PURE__ */ jsx(
@@ -260,26 +259,24 @@ React3.forwardRef(
260
259
  )) });
261
260
  }
262
261
  );
263
- var LG_BREAKPOINT = 1024;
264
- function useIsMobile() {
265
- const [isMobile, setIsMobile] = React3.useState(() => {
266
- if (typeof window === "undefined") return false;
267
- return window.innerWidth < LG_BREAKPOINT;
268
- });
269
- React3.useEffect(() => {
270
- const mql = window.matchMedia(`(max-width: ${LG_BREAKPOINT - 1}px)`);
271
- const handler = (e) => setIsMobile(e.matches);
272
- setIsMobile(mql.matches);
273
- mql.addEventListener("change", handler);
274
- return () => mql.removeEventListener("change", handler);
275
- }, []);
276
- return isMobile;
262
+ var TOUCH_PX = 1024;
263
+ function useBelow(px) {
264
+ const [below, setBelow] = React4.useState(false);
265
+ React4.useEffect(() => {
266
+ const mql = window.matchMedia(`(max-width: ${px - 1}px)`);
267
+ const apply = () => setBelow(mql.matches);
268
+ apply();
269
+ mql.addEventListener("change", apply);
270
+ return () => mql.removeEventListener("change", apply);
271
+ }, [px]);
272
+ return below;
277
273
  }
274
+ var useIsTouch = () => useBelow(TOUCH_PX);
278
275
  function mapPlacement(p) {
279
276
  if (!p) return void 0;
280
277
  return p;
281
278
  }
282
- var Tooltip = React3.forwardRef(
279
+ var Tooltip = React4.forwardRef(
283
280
  function Tooltip2(props, ref) {
284
281
  const {
285
282
  showArrow: showArrowProp,
@@ -298,28 +295,28 @@ var Tooltip = React3.forwardRef(
298
295
  interactive,
299
296
  positioning
300
297
  } = props;
301
- const [open, setOpen] = React3.useState(defaultOpen);
302
- const timeoutRef = React3.useRef(null);
303
- const isMobile = useIsMobile();
304
- const handleOpenChange = React3.useCallback((nextOpen) => {
298
+ const [open, setOpen] = React4.useState(defaultOpen);
299
+ const timeoutRef = React4.useRef(null);
300
+ const isMobile = useIsTouch();
301
+ const handleOpenChange = React4.useCallback((nextOpen) => {
305
302
  setOpen(nextOpen);
306
303
  onOpenChange?.({ open: nextOpen });
307
304
  }, [onOpenChange]);
308
- const handleOpenChangeManual = React3.useCallback((nextOpen) => {
305
+ const handleOpenChangeManual = React4.useCallback((nextOpen) => {
309
306
  timeoutRef.current && window.clearTimeout(timeoutRef.current);
310
307
  timeoutRef.current = window.setTimeout(() => {
311
308
  setOpen(nextOpen);
312
309
  onOpenChange?.({ open: nextOpen });
313
310
  }, nextOpen ? openDelay : closeDelay);
314
311
  }, [closeDelay, openDelay, onOpenChange]);
315
- const handleClickAway = React3.useCallback(() => {
312
+ const handleClickAway = React4.useCallback(() => {
316
313
  handleOpenChangeManual(false);
317
314
  }, [handleOpenChangeManual]);
318
315
  const triggerRef = useClickAway(handleClickAway);
319
- const handleTriggerClick = React3.useCallback(() => {
316
+ const handleTriggerClick = React4.useCallback(() => {
320
317
  handleOpenChangeManual(!open);
321
318
  }, [handleOpenChangeManual, open]);
322
- const handleContentClick = React3.useCallback((event) => {
319
+ const handleContentClick = React4.useCallback((event) => {
323
320
  event.stopPropagation();
324
321
  if (interactive) {
325
322
  const closestLink = event.target?.closest("a");
@@ -328,7 +325,7 @@ var Tooltip = React3.forwardRef(
328
325
  }
329
326
  }
330
327
  }, [interactive, handleOpenChangeManual]);
331
- React3.useEffect(() => {
328
+ React4.useEffect(() => {
332
329
  return () => {
333
330
  if (timeoutRef.current) {
334
331
  clearTimeout(timeoutRef.current);
@@ -419,7 +416,7 @@ var TAG_SELECTED_CLASSES = [
419
416
  "hover:opacity-76"
420
417
  ].join(" ");
421
418
  var TAG_DISABLED_CLASSES = "opacity-40 pointer-events-none cursor-not-allowed";
422
- var Tag = React3.forwardRef(
419
+ var Tag = React4.forwardRef(
423
420
  function Tag2(props, ref) {
424
421
  const {
425
422
  variant,
package/dist/textarea.cjs CHANGED
@@ -1,6 +1,7 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
+ var gui = require('@hanzo/gui');
4
5
  var React = require('react');
5
6
  var clsx = require('clsx');
6
7
  var tailwindMerge = require('tailwind-merge');
@@ -38,13 +39,22 @@ var TEXTAREA_VARIANT_CLASSES = {
38
39
  unstyled: "border-0 bg-transparent p-0"
39
40
  };
40
41
  var Textarea = React__default.default.forwardRef(
41
- ({ size = "md", variant = "outline", className, ...rest }, ref) => {
42
+ ({ size = "md", variant = "outline", className, onChange, onChangeText, ...rest }, ref) => {
43
+ const handleChange = React__default.default.useCallback(
44
+ (event) => {
45
+ onChange?.(event);
46
+ onChangeText?.(event.target.value);
47
+ },
48
+ [onChange, onChangeText]
49
+ );
42
50
  return /* @__PURE__ */ jsxRuntime.jsx(
43
- "textarea",
51
+ gui.TextArea,
44
52
  {
45
53
  ref,
54
+ unstyled: true,
46
55
  className: cn(TEXTAREA_BASE, TEXTAREA_SIZE_CLASSES[size], TEXTAREA_VARIANT_CLASSES[variant], className),
47
- ...rest
56
+ ...rest,
57
+ onChange: handleChange
48
58
  }
49
59
  );
50
60
  }
@@ -5,6 +5,8 @@ type TextareaVariant = 'outline' | 'filled' | 'unstyled';
5
5
  interface TextareaProps extends Omit<React__default.ComponentPropsWithRef<'textarea'>, 'size'> {
6
6
  readonly size?: TextareaSize;
7
7
  readonly variant?: TextareaVariant;
8
+ /** Tamagui / React-Native convention — bridged to native `onChange` (see Input). */
9
+ readonly onChangeText?: (text: string) => void;
8
10
  }
9
11
  declare const Textarea: React__default.ForwardRefExoticComponent<Omit<TextareaProps, "ref"> & React__default.RefAttributes<HTMLTextAreaElement>>;
10
12
 
@@ -5,6 +5,8 @@ type TextareaVariant = 'outline' | 'filled' | 'unstyled';
5
5
  interface TextareaProps extends Omit<React__default.ComponentPropsWithRef<'textarea'>, 'size'> {
6
6
  readonly size?: TextareaSize;
7
7
  readonly variant?: TextareaVariant;
8
+ /** Tamagui / React-Native convention — bridged to native `onChange` (see Input). */
9
+ readonly onChangeText?: (text: string) => void;
8
10
  }
9
11
  declare const Textarea: React__default.ForwardRefExoticComponent<Omit<TextareaProps, "ref"> & React__default.RefAttributes<HTMLTextAreaElement>>;
10
12
 
package/dist/textarea.js CHANGED
@@ -1,4 +1,5 @@
1
1
  "use client";
2
+ import { TextArea } from '@hanzo/gui';
2
3
  import React from 'react';
3
4
  import { clsx } from 'clsx';
4
5
  import { twMerge } from 'tailwind-merge';
@@ -32,13 +33,22 @@ var TEXTAREA_VARIANT_CLASSES = {
32
33
  unstyled: "border-0 bg-transparent p-0"
33
34
  };
34
35
  var Textarea = React.forwardRef(
35
- ({ size = "md", variant = "outline", className, ...rest }, ref) => {
36
+ ({ size = "md", variant = "outline", className, onChange, onChangeText, ...rest }, ref) => {
37
+ const handleChange = React.useCallback(
38
+ (event) => {
39
+ onChange?.(event);
40
+ onChangeText?.(event.target.value);
41
+ },
42
+ [onChange, onChangeText]
43
+ );
36
44
  return /* @__PURE__ */ jsx(
37
- "textarea",
45
+ TextArea,
38
46
  {
39
47
  ref,
48
+ unstyled: true,
40
49
  className: cn(TEXTAREA_BASE, TEXTAREA_SIZE_CLASSES[size], TEXTAREA_VARIANT_CLASSES[variant], className),
41
- ...rest
50
+ ...rest,
51
+ onChange: handleChange
42
52
  }
43
53
  );
44
54
  }