@wow-two-beta/ui 0.0.30 → 0.0.31

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 (43) hide show
  1. package/dist/actions/button/Button.d.ts +14 -40
  2. package/dist/actions/button/Button.d.ts.map +1 -1
  3. package/dist/actions/index.js +2 -2
  4. package/dist/{chunk-VZNIJCMD.js → chunk-3IEGN2OO.js} +155 -117
  5. package/dist/chunk-3IEGN2OO.js.map +1 -0
  6. package/dist/{chunk-HECIUFDS.js → chunk-7OJ7VH6V.js} +4 -4
  7. package/dist/{chunk-HECIUFDS.js.map → chunk-7OJ7VH6V.js.map} +1 -1
  8. package/dist/{chunk-NXVK3VSQ.js → chunk-JCXJPSI2.js} +4 -4
  9. package/dist/{chunk-NXVK3VSQ.js.map → chunk-JCXJPSI2.js.map} +1 -1
  10. package/dist/{chunk-XSTHHOAN.js → chunk-JIAK2T6Y.js} +4 -4
  11. package/dist/{chunk-XSTHHOAN.js.map → chunk-JIAK2T6Y.js.map} +1 -1
  12. package/dist/{chunk-ZJMDHG7B.js → chunk-LBQIZGYH.js} +52 -3
  13. package/dist/chunk-LBQIZGYH.js.map +1 -0
  14. package/dist/{chunk-FFOGR3WH.js → chunk-NBCWQCKQ.js} +4 -4
  15. package/dist/{chunk-FFOGR3WH.js.map → chunk-NBCWQCKQ.js.map} +1 -1
  16. package/dist/{chunk-NJDUGXFL.js → chunk-PA6ZIE44.js} +5 -5
  17. package/dist/{chunk-NJDUGXFL.js.map → chunk-PA6ZIE44.js.map} +1 -1
  18. package/dist/{chunk-DWWF7QPK.js → chunk-RWUOXGQI.js} +3 -3
  19. package/dist/{chunk-DWWF7QPK.js.map → chunk-RWUOXGQI.js.map} +1 -1
  20. package/dist/{chunk-G7K64TW2.js → chunk-XCJMUYYR.js} +3 -3
  21. package/dist/{chunk-G7K64TW2.js.map → chunk-XCJMUYYR.js.map} +1 -1
  22. package/dist/{chunk-CKFM2H7O.js → chunk-YHRQSVLB.js} +3 -3
  23. package/dist/{chunk-CKFM2H7O.js.map → chunk-YHRQSVLB.js.map} +1 -1
  24. package/dist/display/index.js +3 -3
  25. package/dist/feedback/index.js +3 -3
  26. package/dist/forms/index.js +4 -4
  27. package/dist/icons/index.js +1 -1
  28. package/dist/index.js +10 -10
  29. package/dist/layout/index.js +3 -3
  30. package/dist/nav/index.js +3 -3
  31. package/dist/overlays/index.js +1 -1
  32. package/dist/utils/HtmlExtensions.d.ts +14 -0
  33. package/dist/utils/HtmlExtensions.d.ts.map +1 -0
  34. package/dist/utils/KeyboardExtensions.d.ts +18 -0
  35. package/dist/utils/KeyboardExtensions.d.ts.map +1 -0
  36. package/dist/utils/PressExtensions.d.ts +17 -0
  37. package/dist/utils/PressExtensions.d.ts.map +1 -0
  38. package/dist/utils/index.d.ts +3 -0
  39. package/dist/utils/index.d.ts.map +1 -1
  40. package/dist/utils/index.js +1 -1
  41. package/package.json +1 -1
  42. package/dist/chunk-VZNIJCMD.js.map +0 -1
  43. package/dist/chunk-ZJMDHG7B.js.map +0 -1
@@ -1,54 +1,28 @@
1
- import { type ButtonHTMLAttributes, type KeyboardEvent, type PointerEvent, type ReactNode } from 'react';
2
- import { type PaddingProp, type RadiusProp, type SizeValue } from '../../utils';
1
+ import { type ButtonHTMLAttributes, type PointerEvent, type ReactNode } from 'react';
2
+ import { ButtonType, type PaddingProp, type PressEvent, type RadiusProp, type SizeValue } from '../../utils';
3
3
  import { type ButtonVariants } from './Button.variants';
4
- export type PressEvent = PointerEvent<HTMLButtonElement> | KeyboardEvent<HTMLButtonElement>;
5
- export interface ButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'type'>, ButtonVariants {
6
- /** Slot before children (logical start). */
7
- leading?: ReactNode;
8
- /** Slot after children (logical end). */
9
- trailing?: ReactNode;
10
- /** Action-loading: replaces leading w/ spinner, sets aria-busy, blocks clicks. */
11
- loading?: boolean;
12
- /** Replaces children when loading. No default — consumer supplies (i18n). */
4
+ export interface ButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'type' | 'disabled'>, ButtonVariants {
5
+ leadingSlot?: ReactNode;
6
+ trailingSlot?: ReactNode;
7
+ loadingSlot?: ReactNode;
8
+ isLoading?: boolean;
13
9
  loadingText?: string;
14
- /**
15
- * Content-loading: hides content (preserves box dimensions) + shimmer bg.
16
- * Mutually exclusive with `loading` — if both, `skeleton` wins (+ dev warn).
17
- */
18
- skeleton?: boolean;
19
- /** Render as the single child element via Slot. */
10
+ isSkeleton?: boolean;
11
+ isDisabled?: boolean;
12
+ isFullWidth?: boolean;
13
+ isMultiline?: boolean;
20
14
  asChild?: boolean;
21
- /** Independent padding override (preset or `{x, y}` object). */
22
15
  padding?: PaddingProp;
23
- /** Independent radius override (preset or raw value). */
24
16
  radius?: RadiusProp;
25
- /** Explicit width override. Number = px; string = any CSS unit. */
26
17
  width?: SizeValue;
27
- /** Explicit height override. Number = px; string = any CSS unit. */
28
18
  height?: SizeValue;
29
- /**
30
- * Reserve a minimum width so the button doesn't reflow when its label
31
- * changes (e.g. "Save" → "Saving…" → "Saved"). Number = px; string = any
32
- * CSS unit. Content stays centered via the base `justify-center`.
33
- */
34
19
  minWidth?: SizeValue;
35
- /** Reserve a minimum height — symmetric with `minWidth`. */
36
20
  minHeight?: SizeValue;
37
- /** Default `'button'` — NOT browser-default `'submit'`. */
38
- type?: 'button' | 'submit' | 'reset';
39
- /** Fires on pointer-down OR Space/Enter keydown (first event in a gesture). */
40
- onPressStart?: (event: PressEvent) => void;
41
- /** Fires on pointer-up/cancel OR Space/Enter keyup. */
42
- onPressEnd?: (event: PressEvent) => void;
43
- /** Fires when the pointer is held for `longPressDelay` ms. Suppresses the next click. */
21
+ type?: ButtonType;
22
+ onPressStart?: (event: PressEvent<HTMLButtonElement>) => void;
23
+ onPressEnd?: (event: PressEvent<HTMLButtonElement>) => void;
44
24
  onLongPress?: (event: PointerEvent<HTMLButtonElement>) => void;
45
- /** Long-press duration in ms. Default 500. */
46
25
  longPressDelay?: number;
47
- /**
48
- * Throttle clicks within `debounceMs`: first click fires, subsequent within
49
- * the window are swallowed (functionally a throttle — kept the `debounce*`
50
- * naming for consumer familiarity). Skipped when `loading` or `skeleton`.
51
- */
52
26
  debounceMs?: number;
53
27
  }
54
28
  export declare const Button: import("react").ForwardRefExoticComponent<ButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
@@ -1 +1 @@
1
- {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/actions/button/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,oBAAoB,EAEzB,KAAK,aAAa,EAElB,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,EAKL,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,SAAS,EACf,MAAM,aAAa,CAAC;AAIrB,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAQxE,MAAM,MAAM,UAAU,GAClB,YAAY,CAAC,iBAAiB,CAAC,GAC/B,aAAa,CAAC,iBAAiB,CAAC,CAAC;AAErC,MAAM,WAAW,WACf,SAAQ,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC,EAC3D,cAAc;IAChB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,kFAAkF;IAClF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mDAAmD;IACnD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gEAAgE;IAChE,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,yDAAyD;IACzD,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,mEAAmE;IACnE,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,oEAAoE;IACpE,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,2DAA2D;IAC3D,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IACrC,+EAA+E;IAC/E,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IAC3C,uDAAuD;IACvD,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACzC,yFAAyF;IACzF,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IAC/D,8CAA8C;IAC9C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,MAAM,2GAiNlB,CAAC"}
1
+ {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../../../src/actions/button/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,oBAAoB,EAMzB,KAAK,YAAY,EAEjB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,EAGL,UAAU,EAMV,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,SAAS,EACf,MAAM,aAAa,CAAC;AAIrB,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAYxE,MAAM,WAAW,WACf,SAAQ,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,EACxE,cAAc;IAEhB,WAAW,CAAC,EAAE,SAAS,CAAC;IAGxB,YAAY,CAAC,EAAE,SAAS,CAAC;IAGzB,WAAW,CAAC,EAAE,SAAS,CAAC;IAGxB,SAAS,CAAC,EAAE,OAAO,CAAC;IAGpB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,UAAU,CAAC,EAAE,OAAO,CAAC;IAGrB,UAAU,CAAC,EAAE,OAAO,CAAC;IAGrB,WAAW,CAAC,EAAE,OAAO,CAAC;IAGtB,WAAW,CAAC,EAAE,OAAO,CAAC;IAGtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAGlB,OAAO,CAAC,EAAE,WAAW,CAAC;IAGtB,MAAM,CAAC,EAAE,UAAU,CAAC;IAGpB,KAAK,CAAC,EAAE,SAAS,CAAC;IAGlB,MAAM,CAAC,EAAE,SAAS,CAAC;IAGnB,QAAQ,CAAC,EAAE,SAAS,CAAC;IAGrB,SAAS,CAAC,EAAE,SAAS,CAAC;IAGtB,IAAI,CAAC,EAAE,UAAU,CAAC;IAGlB,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IAG9D,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IAG5D,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IAG/D,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA4HD,eAAO,MAAM,MAAM,2GA6IlB,CAAC"}
@@ -1,7 +1,7 @@
1
- export { BackToTopButton, Button, ButtonGroup, CopyButton, DisclosureButton, FAB, IconButton, Link, OverlayButton, SegmentedControl, SpeedDial, SpeedDialAction, SpeedDialTrigger, ToggleButton, ToggleButtonGroup, Toolbar, ToolbarButton, ToolbarLink, ToolbarSeparator, buttonVariants, fabVariants, iconButtonVariants, linkVariants, toggleButtonVariants } from '../chunk-VZNIJCMD.js';
1
+ export { BackToTopButton, Button, ButtonGroup, CopyButton, DisclosureButton, FAB, IconButton, Link, OverlayButton, SegmentedControl, SpeedDial, SpeedDialAction, SpeedDialTrigger, ToggleButton, ToggleButtonGroup, Toolbar, ToolbarButton, ToolbarLink, ToolbarSeparator, buttonVariants, fabVariants, iconButtonVariants, linkVariants, toggleButtonVariants } from '../chunk-3IEGN2OO.js';
2
2
  import '../chunk-NUMFGKPY.js';
3
3
  import '../chunk-GWIFNLGS.js';
4
- import '../chunk-ZJMDHG7B.js';
4
+ import '../chunk-LBQIZGYH.js';
5
5
  import '../chunk-BMABNEZX.js';
6
6
  import '../chunk-KDXJQNB6.js';
7
7
  import '../chunk-LDRFQG44.js';
@@ -1,9 +1,9 @@
1
- import { useDebounceHandler, useControlled, useClipboard, useEscape, useOutsideClick } from './chunk-NUMFGKPY.js';
1
+ import { useControlled, useClipboard, useDebounceHandler, useEscape, useOutsideClick } from './chunk-NUMFGKPY.js';
2
2
  import { Icon, Spinner } from './chunk-GWIFNLGS.js';
3
- import { tv, CssExtensions, composeEventHandlers, OptionalExtensions, dataAttr } from './chunk-ZJMDHG7B.js';
3
+ import { tv, PressExtensions, HtmlElement, CssExtensions, ButtonType, OptionalExtensions, dataAttr, composeEventHandlers, Key } from './chunk-LBQIZGYH.js';
4
4
  import { Slot, RovingFocusGroup, useRovingFocusItem } from './chunk-BMABNEZX.js';
5
5
  import { cn, composeRefs } from './chunk-LDRFQG44.js';
6
- import { forwardRef, useRef, useEffect, Children, isValidElement, cloneElement, createContext, useState, useContext, useMemo } from 'react';
6
+ import { forwardRef, Children, isValidElement, cloneElement, createContext, useState, useEffect, useRef, useContext, useMemo } from 'react';
7
7
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
8
8
  import { Check, Copy, ChevronDown, X, Plus, ArrowUp } from 'lucide-react';
9
9
 
@@ -115,9 +115,97 @@ var buttonVariants = tv({
115
115
  wrap: false
116
116
  }
117
117
  });
118
- var LONG_PRESS_DELAY_MIN = 200;
119
- var LONG_PRESS_DELAY_MAX = 6e4;
120
- var LONG_PRESS_DELAY_DEFAULT = 500;
118
+ var COMPONENT_NAME = "Button";
119
+ var ButtonDataState = {
120
+ Loading: "loading",
121
+ Skeleton: "skeleton",
122
+ Disabled: "disabled"
123
+ };
124
+ function useButtonInteractivity(opts) {
125
+ const isPressingRef = useRef(false);
126
+ const longPressTimerRef = useRef(void 0);
127
+ const longPressFiredRef = useRef(false);
128
+ useEffect(
129
+ () => () => {
130
+ if (longPressTimerRef.current !== void 0) {
131
+ clearTimeout(longPressTimerRef.current);
132
+ }
133
+ },
134
+ []
135
+ );
136
+ const cancelLongPress = () => {
137
+ if (longPressTimerRef.current !== void 0) {
138
+ clearTimeout(longPressTimerRef.current);
139
+ longPressTimerRef.current = void 0;
140
+ }
141
+ };
142
+ const endPress = (e) => {
143
+ if (isPressingRef.current) {
144
+ isPressingRef.current = false;
145
+ opts.onPressEnd?.(e);
146
+ }
147
+ };
148
+ const handlePointerDown = (e) => {
149
+ if (opts.isInactive) return;
150
+ if (!isPressingRef.current) {
151
+ isPressingRef.current = true;
152
+ longPressFiredRef.current = false;
153
+ opts.onPressStart?.(e);
154
+ }
155
+ if (opts.onLongPress) {
156
+ longPressTimerRef.current = setTimeout(() => {
157
+ longPressFiredRef.current = true;
158
+ opts.onLongPress?.(e);
159
+ longPressTimerRef.current = void 0;
160
+ }, opts.longPressDelay);
161
+ }
162
+ };
163
+ const handlePointerUp = (e) => {
164
+ cancelLongPress();
165
+ endPress(e);
166
+ };
167
+ const handlePointerCancel = (e) => {
168
+ cancelLongPress();
169
+ endPress(e);
170
+ };
171
+ const handlePointerLeave = () => {
172
+ cancelLongPress();
173
+ };
174
+ const isActivationKey = (e) => e.key === Key.Space || e.key === Key.Enter;
175
+ const handleKeyDown = (e) => {
176
+ if (opts.isInactive) return;
177
+ if (isActivationKey(e) && !e.repeat && !isPressingRef.current) {
178
+ isPressingRef.current = true;
179
+ longPressFiredRef.current = false;
180
+ opts.onPressStart?.(e);
181
+ }
182
+ };
183
+ const handleKeyUp = (e) => {
184
+ if (isActivationKey(e) && isPressingRef.current) {
185
+ isPressingRef.current = false;
186
+ opts.onPressEnd?.(e);
187
+ }
188
+ };
189
+ const debouncedOnClick = useDebounceHandler(opts.onClick, opts.debounceMs);
190
+ const handleClick = (e) => {
191
+ if (opts.isLoading || opts.isSkeleton) return;
192
+ if (longPressFiredRef.current) {
193
+ longPressFiredRef.current = false;
194
+ e.preventDefault();
195
+ return;
196
+ }
197
+ debouncedOnClick(e);
198
+ };
199
+ return {
200
+ onClick: handleClick,
201
+ onPointerDown: composeEventHandlers(opts.onPointerDown, handlePointerDown),
202
+ onPointerUp: composeEventHandlers(opts.onPointerUp, handlePointerUp),
203
+ onPointerCancel: composeEventHandlers(opts.onPointerCancel, handlePointerCancel),
204
+ onPointerLeave: composeEventHandlers(opts.onPointerLeave, handlePointerLeave),
205
+ onKeyDown: composeEventHandlers(opts.onKeyDown, handleKeyDown),
206
+ onKeyUp: composeEventHandlers(opts.onKeyUp, handleKeyUp)
207
+ };
208
+ }
121
209
  var Button = forwardRef(
122
210
  ({
123
211
  className,
@@ -126,28 +214,29 @@ var Button = forwardRef(
126
214
  tone,
127
215
  size,
128
216
  shape,
129
- fullWidth,
130
- wrap,
217
+ isFullWidth,
218
+ isMultiline,
131
219
  padding,
132
220
  radius,
133
221
  width,
134
222
  height,
135
223
  minWidth,
136
224
  minHeight,
137
- leading,
138
- trailing,
139
- loading,
225
+ leadingSlot,
226
+ trailingSlot,
227
+ loadingSlot,
228
+ isLoading,
140
229
  loadingText,
141
- skeleton,
230
+ isSkeleton,
231
+ isDisabled,
142
232
  asChild,
143
- type = "button",
144
- disabled,
233
+ type = ButtonType.Button,
145
234
  children,
146
235
  onClick,
147
236
  onPressStart,
148
237
  onPressEnd,
149
238
  onLongPress,
150
- longPressDelay = LONG_PRESS_DELAY_DEFAULT,
239
+ longPressDelay = PressExtensions.longPressDelay.default,
151
240
  debounceMs,
152
241
  onPointerDown,
153
242
  onPointerUp,
@@ -157,19 +246,23 @@ var Button = forwardRef(
157
246
  onKeyUp,
158
247
  ...rest
159
248
  }, ref) => {
160
- if (loading && skeleton) {
249
+ if (isLoading && isSkeleton) {
161
250
  console.warn(
162
- "[Button] `loading` and `skeleton` are mutually exclusive \u2014 `skeleton` takes precedence."
251
+ `[${COMPONENT_NAME}] \`isLoading\` and \`isSkeleton\` are mutually exclusive \u2014 \`isSkeleton\` takes precedence.`
163
252
  );
164
253
  }
165
- const safeLongPressDelay = longPressDelay < LONG_PRESS_DELAY_MIN || longPressDelay > LONG_PRESS_DELAY_MAX ? (console.warn(
166
- `[Button] longPressDelay=${longPressDelay}ms is outside reasonable range (${LONG_PRESS_DELAY_MIN}\u2013${LONG_PRESS_DELAY_MAX}ms). Falling back to ${LONG_PRESS_DELAY_DEFAULT}ms.`
167
- ), LONG_PRESS_DELAY_DEFAULT) : longPressDelay;
168
- const isSkeleton = !!skeleton;
169
- const isLoading = !isSkeleton && !!loading;
170
- const isInactive = isLoading || isSkeleton || !!disabled;
171
- const dataState = isSkeleton ? "skeleton" : isLoading ? "loading" : disabled ? "disabled" : void 0;
172
- const Comp = asChild ? Slot : "button";
254
+ let safeLongPressDelay = longPressDelay;
255
+ if (longPressDelay < PressExtensions.longPressDelay.min || longPressDelay > PressExtensions.longPressDelay.max) {
256
+ console.warn(
257
+ `[${COMPONENT_NAME}] longPressDelay=${longPressDelay}ms is outside reasonable range (${PressExtensions.longPressDelay.min}\u2013${PressExtensions.longPressDelay.max}ms). Falling back to ${PressExtensions.longPressDelay.default}ms.`
258
+ );
259
+ safeLongPressDelay = PressExtensions.longPressDelay.default;
260
+ }
261
+ const skeletonActive = !!isSkeleton;
262
+ const loadingActive = !skeletonActive && !!isLoading;
263
+ const isInactive = loadingActive || skeletonActive || !!isDisabled;
264
+ const dataState = skeletonActive ? ButtonDataState.Skeleton : loadingActive ? ButtonDataState.Loading : isDisabled ? ButtonDataState.Disabled : void 0;
265
+ const Comp = asChild ? Slot : HtmlElement.Button;
173
266
  const overrideStyle = (() => {
174
267
  const padStyle = CssExtensions.resolvePadding(padding);
175
268
  const radStyle = CssExtensions.resolveRadius(radius);
@@ -177,87 +270,31 @@ var Button = forwardRef(
177
270
  if (!padStyle && !radStyle && !boxStyle && !style) return void 0;
178
271
  return { ...padStyle, ...radStyle, ...boxStyle, ...style };
179
272
  })();
180
- const isPressingRef = useRef(false);
181
- const longPressTimerRef = useRef(void 0);
182
- const longPressFiredRef = useRef(false);
183
- useEffect(
184
- () => () => {
185
- if (longPressTimerRef.current !== void 0) {
186
- clearTimeout(longPressTimerRef.current);
187
- }
188
- },
189
- []
190
- );
191
- const cancelLongPress = () => {
192
- if (longPressTimerRef.current !== void 0) {
193
- clearTimeout(longPressTimerRef.current);
194
- longPressTimerRef.current = void 0;
195
- }
196
- };
197
- const handlePointerDown = (e) => {
198
- if (isInactive) return;
199
- if (!isPressingRef.current) {
200
- isPressingRef.current = true;
201
- longPressFiredRef.current = false;
202
- onPressStart?.(e);
203
- }
204
- if (onLongPress) {
205
- longPressTimerRef.current = setTimeout(() => {
206
- longPressFiredRef.current = true;
207
- onLongPress(e);
208
- longPressTimerRef.current = void 0;
209
- }, safeLongPressDelay);
210
- }
211
- };
212
- const handlePointerUp = (e) => {
213
- cancelLongPress();
214
- if (isPressingRef.current) {
215
- isPressingRef.current = false;
216
- onPressEnd?.(e);
217
- }
218
- };
219
- const handlePointerCancel = (e) => {
220
- cancelLongPress();
221
- if (isPressingRef.current) {
222
- isPressingRef.current = false;
223
- onPressEnd?.(e);
224
- }
225
- };
226
- const handlePointerLeave = () => {
227
- cancelLongPress();
228
- };
229
- const handleKeyDown = (e) => {
230
- if (isInactive) return;
231
- if ((e.key === " " || e.key === "Enter") && !e.repeat && !isPressingRef.current) {
232
- isPressingRef.current = true;
233
- longPressFiredRef.current = false;
234
- onPressStart?.(e);
235
- }
236
- };
237
- const handleKeyUp = (e) => {
238
- if ((e.key === " " || e.key === "Enter") && isPressingRef.current) {
239
- isPressingRef.current = false;
240
- onPressEnd?.(e);
241
- }
242
- };
243
- const debouncedOnClick = useDebounceHandler(onClick, debounceMs);
244
- const handleClick = (e) => {
245
- if (isLoading || isSkeleton) return;
246
- if (longPressFiredRef.current) {
247
- longPressFiredRef.current = false;
248
- e.preventDefault();
249
- return;
250
- }
251
- debouncedOnClick(e);
252
- };
253
- const content = isLoading ? /* @__PURE__ */ jsxs(Fragment, { children: [
254
- /* @__PURE__ */ jsx(Spinner, {}),
273
+ const eventHandlers = useButtonInteractivity({
274
+ isInactive,
275
+ isLoading: loadingActive,
276
+ isSkeleton: skeletonActive,
277
+ longPressDelay: safeLongPressDelay,
278
+ debounceMs,
279
+ onClick,
280
+ onPressStart,
281
+ onPressEnd,
282
+ onLongPress,
283
+ onPointerDown,
284
+ onPointerUp,
285
+ onPointerCancel,
286
+ onPointerLeave,
287
+ onKeyDown,
288
+ onKeyUp
289
+ });
290
+ const content = loadingActive ? /* @__PURE__ */ jsxs(Fragment, { children: [
291
+ loadingSlot ?? /* @__PURE__ */ jsx(Spinner, {}),
255
292
  loadingText !== void 0 ? /* @__PURE__ */ jsx("span", { children: loadingText }) : children,
256
- trailing
293
+ trailingSlot
257
294
  ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
258
- leading,
295
+ leadingSlot,
259
296
  children,
260
- trailing
297
+ trailingSlot
261
298
  ] });
262
299
  return /* @__PURE__ */ jsx(
263
300
  Comp,
@@ -265,28 +302,29 @@ var Button = forwardRef(
265
302
  ref,
266
303
  type: asChild ? void 0 : type,
267
304
  className: cn(
268
- buttonVariants({ variant, tone, size, shape, fullWidth, wrap }),
305
+ buttonVariants({
306
+ variant,
307
+ tone,
308
+ size,
309
+ shape,
310
+ fullWidth: isFullWidth,
311
+ wrap: isMultiline
312
+ }),
269
313
  className
270
314
  ),
271
315
  style: overrideStyle,
272
- disabled: OptionalExtensions.from(disabled, true),
273
- "aria-busy": OptionalExtensions.from(isLoading || isSkeleton, true),
274
- tabIndex: OptionalExtensions.from(isSkeleton, -1),
316
+ disabled: OptionalExtensions.from(isDisabled, true),
317
+ "aria-busy": OptionalExtensions.from(loadingActive || skeletonActive, true),
318
+ tabIndex: OptionalExtensions.from(skeletonActive, -1),
275
319
  "data-state": dataState,
276
- onClick: handleClick,
277
- onPointerDown: composeEventHandlers(onPointerDown, handlePointerDown),
278
- onPointerUp: composeEventHandlers(onPointerUp, handlePointerUp),
279
- onPointerCancel: composeEventHandlers(onPointerCancel, handlePointerCancel),
280
- onPointerLeave: composeEventHandlers(onPointerLeave, handlePointerLeave),
281
- onKeyDown: composeEventHandlers(onKeyDown, handleKeyDown),
282
- onKeyUp: composeEventHandlers(onKeyUp, handleKeyUp),
320
+ ...eventHandlers,
283
321
  ...rest,
284
322
  children: content
285
323
  }
286
324
  );
287
325
  }
288
326
  );
289
- Button.displayName = "Button";
327
+ Button.displayName = COMPONENT_NAME;
290
328
 
291
329
  // src/actions/iconButton/IconButton.variants.ts
292
330
  var iconButtonVariants = tv({
@@ -994,5 +1032,5 @@ var BackToTopButton = forwardRef(
994
1032
  BackToTopButton.displayName = "BackToTopButton";
995
1033
 
996
1034
  export { BackToTopButton, Button, ButtonGroup, CopyButton, DisclosureButton, FAB, IconButton, Link, OverlayButton, SegmentedControl, SpeedDial, SpeedDialAction, SpeedDialTrigger, ToggleButton, ToggleButtonGroup, Toolbar, ToolbarButton, ToolbarLink, ToolbarSeparator, buttonVariants, fabVariants, iconButtonVariants, linkVariants, toggleButtonVariants };
997
- //# sourceMappingURL=chunk-VZNIJCMD.js.map
998
- //# sourceMappingURL=chunk-VZNIJCMD.js.map
1035
+ //# sourceMappingURL=chunk-3IEGN2OO.js.map
1036
+ //# sourceMappingURL=chunk-3IEGN2OO.js.map