@wisdomgarden/torque 0.1.2 → 0.2.1

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.
@@ -12,6 +12,6 @@ export declare function useArrowStyle(withArrow: boolean, arrowData: {
12
12
  x?: number;
13
13
  y?: number;
14
14
  } | undefined, resolvedSide: PopoverSide, arrowSize: number): React.CSSProperties;
15
- export declare function useTriggerProps(disabled: boolean, trigger: PopoverTrigger, mergedReferenceRef: React.Ref<HTMLElement>, id: string, toggle: () => void, opened: boolean, setOpen: (next: boolean) => void, hoverTimerRef: React.RefObject<number | undefined>, userOnClick?: React.MouseEventHandler<HTMLElement>, userOnKeyDown?: React.KeyboardEventHandler<HTMLElement>): React.HTMLAttributes<HTMLElement> & {
15
+ export declare function useTriggerProps(disabled: boolean, trigger: PopoverTrigger, mergedReferenceRef: React.Ref<HTMLElement>, id: string, toggle: () => void, opened: boolean, setOpen: (next: boolean) => void, scheduleHover: (next: boolean) => void, cancelHoverTimer: () => void, userOnClick?: React.MouseEventHandler<HTMLElement>, userOnKeyDown?: React.KeyboardEventHandler<HTMLElement>): React.HTMLAttributes<HTMLElement> & {
16
16
  ref?: React.Ref<HTMLElement>;
17
17
  };
@@ -1,10 +1,10 @@
1
1
  "use client";
2
- import { useEffect as l, useState as m, useRef as b, useCallback as p, useMemo as E } from "react";
3
- import { registerOpenPopover as y, isTopmostOpenPopover as A } from "./popover-stack.js";
4
- function L(u, t = !1) {
5
- const [n, e] = m(t || u), [r, o] = m(
2
+ import { useEffect as l, useState as b, useRef as p, useCallback as y, useMemo as E } from "react";
3
+ import { registerOpenPopover as A, isTopmostOpenPopover as x } from "./popover-stack.js";
4
+ function k(u, t = !1) {
5
+ const [n, e] = b(t || u), [r, o] = b(
6
6
  u ? "open" : "closing"
7
- ), s = b(0);
7
+ ), s = p(0);
8
8
  l(() => (u ? (e(!0), s.current = requestAnimationFrame(() => {
9
9
  s.current = requestAnimationFrame(() => {
10
10
  o("open");
@@ -12,24 +12,24 @@ function L(u, t = !1) {
12
12
  })) : (o("closing"), t && e(!0)), () => {
13
13
  s.current && cancelAnimationFrame(s.current);
14
14
  }), [t, u]);
15
- const i = p(() => {
15
+ const i = y(() => {
16
16
  r === "closing" && !t && e(!1);
17
17
  }, [r, t]);
18
18
  return { mounted: n, animState: r, handleTransitionEnd: i };
19
19
  }
20
- function P(u, t, n, e, r, o, s, i) {
21
- const c = b(null);
20
+ function q(u, t, n, e, r, o, s, i) {
21
+ const f = p(null);
22
22
  l(() => {
23
- u === "click" && (t ? c.current = document.activeElement : o().some(
24
- (f) => f.contains(document.activeElement)
25
- ) && c.current?.focus());
23
+ u === "click" && (t ? f.current = document.activeElement : o().some(
24
+ (a) => a.contains(document.activeElement)
25
+ ) && f.current?.focus());
26
26
  }, [t, u, o]), l(() => {
27
27
  if (u !== "click" || n !== "open" || !e || i) return;
28
28
  if (s?.current) {
29
29
  s.current.focus();
30
30
  return;
31
31
  }
32
- (h([r.current])[0] ?? r.current)?.focus();
32
+ (L([r.current])[0] ?? r.current)?.focus();
33
33
  }, [
34
34
  n,
35
35
  e,
@@ -39,7 +39,7 @@ function P(u, t, n, e, r, o, s, i) {
39
39
  i
40
40
  ]);
41
41
  }
42
- const x = [
42
+ const h = [
43
43
  "a[href]",
44
44
  "button:not([disabled])",
45
45
  "input:not([disabled])",
@@ -47,27 +47,27 @@ const x = [
47
47
  "textarea:not([disabled])",
48
48
  '[tabindex]:not([tabindex="-1"])'
49
49
  ].join(",");
50
- function h(u) {
50
+ function L(u) {
51
51
  const t = u.flatMap((n) => !n || n.inert || n.getAttribute("aria-hidden") === "true" ? [] : Array.from(
52
- n.querySelectorAll(x)
52
+ n.querySelectorAll(h)
53
53
  ));
54
54
  return Array.from(new Set(t)).filter(
55
55
  (n) => !n.hasAttribute("data-focus-sentinel")
56
56
  );
57
57
  }
58
- function C(u, t, n, e, r, o, s) {
58
+ function v(u, t, n, e, r, o, s) {
59
59
  l(() => {
60
60
  if (t)
61
- return y(r, o);
61
+ return A(r, o);
62
62
  }, [o, r, t]), l(() => {
63
63
  if (!u || !t) return;
64
- const i = (c) => {
65
- c.key !== "Escape" || !A(r) || (c.preventDefault(), c.stopImmediatePropagation(), n(), s ? s() : e.current?.focus());
64
+ const i = (f) => {
65
+ f.key !== "Escape" || !x(r) || (f.preventDefault(), f.stopImmediatePropagation(), n(), s ? s() : e.current?.focus());
66
66
  };
67
67
  return document.addEventListener("keydown", i), () => document.removeEventListener("keydown", i);
68
68
  }, [u, t, n, e, r, s]);
69
69
  }
70
- function T(u, t, n, e) {
70
+ function B(u, t, n, e) {
71
71
  return E(() => {
72
72
  if (!u || !t) return {};
73
73
  const r = e / 2, o = {
@@ -78,32 +78,31 @@ function T(u, t, n, e) {
78
78
  return n === "bottom" ? { ...o, top: -r - 1, left: t.x ?? "", bottom: "" } : n === "top" ? { ...o, bottom: -r - 1, left: t.x ?? "", top: "" } : n === "right" ? { ...o, left: -r - 1, top: t.y ?? "" } : n === "left" ? { ...o, right: -r - 1, top: t.y ?? "" } : o;
79
79
  }, [u, t, n, e]);
80
80
  }
81
- function k(u, t, n, e, r, o, s, i, c, f) {
81
+ function F(u, t, n, e, r, o, s, i, f, a, m) {
82
82
  return E(() => u ? { ref: n } : t === "none" ? {
83
83
  ref: n,
84
84
  "aria-expanded": o,
85
- onKeyDown: f
85
+ onKeyDown: m
86
86
  } : t === "hover" ? {
87
87
  ref: n,
88
- onMouseEnter: () => {
89
- clearTimeout(i.current), s(!0);
90
- },
88
+ onMouseEnter: () => i(!0),
91
89
  onMouseLeave: () => {
92
- i.current = window.setTimeout(() => s(!1), 100);
90
+ o ? i(!1) : f();
93
91
  },
94
- onFocus: () => s(!0),
95
- onBlur: () => {
96
- i.current = window.setTimeout(() => s(!1), 100);
92
+ // 键盘聚焦不走 openDelay:延迟打开对读屏 / 键盘用户只有负作用
93
+ onFocus: () => {
94
+ f(), s(!0);
97
95
  },
96
+ onBlur: () => i(!1),
98
97
  "aria-describedby": e,
99
- onKeyDown: f
98
+ onKeyDown: m
100
99
  } : {
101
100
  ref: n,
102
- onClick: (a) => {
103
- r(), c?.(a);
101
+ onClick: (c) => {
102
+ r(), a?.(c);
104
103
  },
105
- onKeyDown: (a) => {
106
- a.key === "Enter" && (a.preventDefault(), r()), f?.(a);
104
+ onKeyDown: (c) => {
105
+ c.key === "Enter" && (c.preventDefault(), r()), m?.(c);
107
106
  },
108
107
  "aria-expanded": o,
109
108
  "aria-haspopup": "dialog",
@@ -117,15 +116,16 @@ function k(u, t, n, e, r, o, s, i, c, f) {
117
116
  o,
118
117
  s,
119
118
  i,
120
- c,
121
- f
119
+ f,
120
+ a,
121
+ m
122
122
  ]);
123
123
  }
124
124
  export {
125
- h as getFocusableElements,
126
- L as useAnimatedMount,
127
- T as useArrowStyle,
128
- C as useEscapeClose,
129
- P as usePopoverFocus,
130
- k as useTriggerProps
125
+ L as getFocusableElements,
126
+ k as useAnimatedMount,
127
+ B as useArrowStyle,
128
+ v as useEscapeClose,
129
+ q as usePopoverFocus,
130
+ F as useTriggerProps
131
131
  };
@@ -1,6 +1,6 @@
1
1
  import { PopoverDropdown } from './popover-dropdown';
2
2
  import { PopoverTarget } from './popover-target';
3
- export declare const Popover: (({ children, position, offset: offsetProp, opened: openedProp, defaultOpened, onOpenChange, disabled, withArrow, arrowSize, trigger, closeOnClickOutside, closeOnEscape, restoreFocus, strategy, initialFocusRef, trapFocus, preventAutoFocus, "aria-labelledby": ariaLabelledby, }: import("./popover.types").PopoverProps) => import("react").JSX.Element) & {
3
+ export declare const Popover: (({ children, position, offset: offsetProp, opened: openedProp, defaultOpened, onOpenChange, disabled, withArrow, arrowSize, trigger, openDelay, closeDelay, closeOnClickOutside, closeOnEscape, restoreFocus, strategy, initialFocusRef, trapFocus, preventAutoFocus, "aria-labelledby": ariaLabelledby, }: import("./popover.types").PopoverProps) => import("react").JSX.Element) & {
4
4
  Target: ({ children, ref, onClick, onKeyDown, ...restProps }: import("./popover.types").PopoverTargetProps) => import("react").JSX.Element;
5
5
  Dropdown: ({ children, arrowClassName, zIndex, width, maxHeight, matchTargetWidth, radius, withinPortal, keepMounted, ref, ...restProps }: import("./popover.types").PopoverDropdownProps) => import("react").JSX.Element | null;
6
6
  };
@@ -1,12 +1,12 @@
1
1
  "use client";
2
- import { jsxs as S, jsx as c } from "react/jsx-runtime";
2
+ import { jsxs as E, jsx as c } from "react/jsx-runtime";
3
3
  import { getDefaultZIndex as te, Portal as re } from "@mantine/core";
4
4
  import { useMergedRef as ne } from "@mantine/hooks";
5
- import { clsx as I } from "clsx";
5
+ import { clsx as S } from "clsx";
6
6
  import { useContext as ie, useRef as ae, useCallback as se } from "react";
7
- import { useAnimatedMount as de, usePopoverFocus as le, useArrowStyle as ce, getFocusableElements as ue } from "./hooks.js";
8
- import { PopoverLayerContext as M, usePopoverContext as fe } from "./popover-context.js";
9
- import T from "./styles/popover.module.css.js";
7
+ import { useAnimatedMount as le, usePopoverFocus as de, useArrowStyle as ce, getFocusableElements as ue } from "./hooks.js";
8
+ import { PopoverLayerContext as I, usePopoverContext as fe } from "./popover-context.js";
9
+ import M from "./styles/popover.module.css.js";
10
10
  const Fe = ({
11
11
  children: A,
12
12
  arrowClassName: C,
@@ -15,56 +15,56 @@ const Fe = ({
15
15
  maxHeight: a,
16
16
  matchTargetWidth: N = !1,
17
17
  radius: z = "sm",
18
- withinPortal: L = !0,
19
- keepMounted: Z = !1,
20
- ref: j,
18
+ withinPortal: H = !0,
19
+ keepMounted: L = !1,
20
+ ref: T,
21
21
  ...e
22
22
  }) => {
23
- const u = ie(M), {
23
+ const u = ie(I), {
24
24
  opened: r,
25
25
  trigger: n,
26
- strategy: k,
27
- x: W,
28
- y: $,
26
+ strategy: Z,
27
+ x: j,
28
+ y: k,
29
29
  resolvedSide: f,
30
30
  middlewareData: s,
31
- floatingRef: d,
32
- setFloating: H,
31
+ floatingRef: l,
32
+ setFloating: W,
33
33
  registerNestedFloatingElement: p,
34
34
  getFloatingScopeElements: v,
35
35
  withArrow: m,
36
- arrowSize: O,
36
+ arrowSize: $,
37
37
  arrowRef: P,
38
- hoverTimerRef: g,
39
- setOpen: V,
40
- id: q,
41
- initialFocusRef: B,
42
- trapFocus: h,
43
- preventAutoFocus: G,
44
- ariaLabelledby: J
45
- } = fe(), { mounted: x, animState: w, handleTransitionEnd: K } = de(
38
+ scheduleHover: V,
39
+ cancelHoverTimer: q,
40
+ id: B,
41
+ initialFocusRef: G,
42
+ trapFocus: g,
43
+ preventAutoFocus: J,
44
+ ariaLabelledby: K
45
+ } = fe(), { mounted: h, animState: x, handleTransitionEnd: O } = le(
46
46
  r,
47
- Z
47
+ L
48
48
  ), y = ae(null), Q = se(
49
49
  (o) => {
50
50
  y.current?.(), y.current = o ? p(o) : null;
51
51
  },
52
52
  [p]
53
53
  ), U = ne(
54
- d,
55
- H,
54
+ l,
55
+ W,
56
56
  Q,
57
- j
58
- ), l = D ?? (u === null ? te("popover") : u + 1);
59
- le(
57
+ T
58
+ ), d = D ?? (u === null ? te("popover") : u + 1);
59
+ de(
60
60
  n,
61
61
  r,
62
- w,
63
62
  x,
64
- d,
63
+ h,
64
+ l,
65
65
  v,
66
- B,
67
- G
66
+ G,
67
+ J
68
68
  );
69
69
  const b = (o) => /* @__PURE__ */ c(
70
70
  "span",
@@ -76,7 +76,7 @@ const Fe = ({
76
76
  onFocus: () => {
77
77
  const i = ue(v());
78
78
  if (i.length === 0) {
79
- d.current?.focus();
79
+ l.current?.focus();
80
80
  return;
81
81
  }
82
82
  (o === "start" ? i[i.length - 1] : i[0]).focus();
@@ -86,63 +86,58 @@ const Fe = ({
86
86
  m,
87
87
  s.arrow,
88
88
  f,
89
- O
89
+ $
90
90
  ), Y = typeof t == "number" ? `${t}px` : t, _ = t ? Y : void 0, ee = typeof a == "number" ? `${a}px` : a, oe = N ? "var(--t-popover-reference-width)" : _;
91
- if (!x) return null;
92
- const F = "role" in e ? e.role : n === "click" ? "dialog" : void 0, R = F === "dialog", E = /* @__PURE__ */ S(
91
+ if (!h) return null;
92
+ const w = "role" in e ? e.role : n === "click" ? "dialog" : void 0, F = w === "dialog", R = /* @__PURE__ */ E(
93
93
  "div",
94
94
  {
95
- id: q,
96
- role: F,
97
- "aria-modal": R ? !1 : void 0,
98
- "aria-labelledby": R ? J : void 0,
95
+ id: B,
96
+ role: w,
97
+ "aria-modal": F ? !1 : void 0,
98
+ "aria-labelledby": F ? K : void 0,
99
99
  ref: U,
100
100
  tabIndex: -1,
101
- "data-state": w,
101
+ "data-state": x,
102
102
  "data-radius": z,
103
103
  "data-side": f,
104
104
  style: {
105
- position: k,
106
- left: W ?? 0,
107
- top: $ ?? 0,
108
- zIndex: l,
109
- "--t-popover-z": l,
105
+ position: Z,
106
+ left: j ?? 0,
107
+ top: k ?? 0,
108
+ zIndex: d,
109
+ "--t-popover-z": d,
110
110
  "--t-popover-width": oe,
111
111
  "--t-popover-max-height": ee,
112
112
  visibility: s.hide?.referenceHidden ? "hidden" : void 0,
113
113
  pointerEvents: s.hide?.referenceHidden ? "none" : void 0
114
114
  },
115
- onTransitionEnd: K,
116
- onMouseEnter: n === "hover" ? () => clearTimeout(g.current) : void 0,
117
- onMouseLeave: n === "hover" ? () => {
118
- g.current = window.setTimeout(
119
- () => V(!1),
120
- 100
121
- );
122
- } : void 0,
115
+ onTransitionEnd: O,
116
+ onMouseEnter: n === "hover" ? () => q() : void 0,
117
+ onMouseLeave: n === "hover" ? () => V(!1) : void 0,
123
118
  ...e,
124
119
  "aria-hidden": r ? e["aria-hidden"] : !0,
125
120
  inert: r ? e.inert : !0,
126
- className: I(T.popover, e.className),
121
+ className: S(M.popover, e.className),
127
122
  children: [
128
- /* @__PURE__ */ S(M.Provider, { value: l, children: [
129
- h && b("start"),
123
+ /* @__PURE__ */ E(I.Provider, { value: d, children: [
124
+ g && b("start"),
130
125
  A,
131
- h && b("end")
126
+ g && b("end")
132
127
  ] }),
133
128
  m && /* @__PURE__ */ c(
134
129
  "div",
135
130
  {
136
131
  ref: P,
137
132
  "aria-hidden": "true",
138
- className: I(T.arrow, C),
133
+ className: S(M.arrow, C),
139
134
  style: { ...X }
140
135
  }
141
136
  )
142
137
  ]
143
138
  }
144
139
  );
145
- return L ? /* @__PURE__ */ c(re, { children: E }) : E;
140
+ return H ? /* @__PURE__ */ c(re, { children: R }) : R;
146
141
  };
147
142
  export {
148
143
  Fe as PopoverDropdown
@@ -1,39 +1,41 @@
1
1
  "use client";
2
2
  import { jsx as b } from "react/jsx-runtime";
3
- import { useMergedRef as v } from "@mantine/hooks";
4
- import { clsx as T } from "clsx";
3
+ import { useMergedRef as T } from "@mantine/hooks";
4
+ import { clsx as E } from "clsx";
5
5
  import r from "react";
6
- import { useTriggerProps as E } from "./hooks.js";
6
+ import { useTriggerProps as H } from "./hooks.js";
7
7
  import { usePopoverContext as N } from "./popover-context.js";
8
8
  import P from "./styles/popover.module.css.js";
9
9
  const q = ({
10
10
  children: e,
11
11
  ref: s,
12
12
  onClick: m,
13
- onKeyDown: f,
13
+ onKeyDown: i,
14
14
  ...o
15
15
  }) => {
16
16
  const {
17
- disabled: i,
18
- trigger: n,
19
- id: a,
20
- toggle: p,
17
+ disabled: n,
18
+ trigger: a,
19
+ id: f,
20
+ toggle: c,
21
21
  opened: l,
22
- setOpen: c,
23
- hoverTimerRef: g,
24
- referenceRef: d,
25
- setReference: u
26
- } = N(), R = r.isValidElement(e) ? e.props.ref : void 0, x = v(d, u, s, R), t = E(
27
- i,
22
+ setOpen: p,
23
+ scheduleHover: g,
24
+ cancelHoverTimer: d,
25
+ referenceRef: u,
26
+ setReference: R
27
+ } = N(), v = r.isValidElement(e) ? e.props.ref : void 0, x = T(u, R, s, v), t = H(
28
28
  n,
29
- x,
30
29
  a,
31
- p,
32
- l,
30
+ x,
31
+ f,
33
32
  c,
33
+ l,
34
+ p,
34
35
  g,
36
+ d,
35
37
  m,
36
- f
38
+ i
37
39
  );
38
40
  return r.isValidElement(e) ? r.cloneElement(
39
41
  e,
@@ -45,7 +47,7 @@ const q = ({
45
47
  tabIndex: 0,
46
48
  ...t,
47
49
  ...o,
48
- className: T(P.fallbackTarget, o.className),
50
+ className: E(P.fallbackTarget, o.className),
49
51
  children: e
50
52
  }
51
53
  );
@@ -1,3 +1,3 @@
1
1
  import React from 'react';
2
2
  import { PopoverProps } from './popover.types';
3
- export declare const Popover: ({ children, position, offset: offsetProp, opened: openedProp, defaultOpened, onOpenChange, disabled, withArrow, arrowSize, trigger, closeOnClickOutside, closeOnEscape, restoreFocus, strategy, initialFocusRef, trapFocus, preventAutoFocus, "aria-labelledby": ariaLabelledby, }: PopoverProps) => React.JSX.Element;
3
+ export declare const Popover: ({ children, position, offset: offsetProp, opened: openedProp, defaultOpened, onOpenChange, disabled, withArrow, arrowSize, trigger, openDelay, closeDelay, closeOnClickOutside, closeOnEscape, restoreFocus, strategy, initialFocusRef, trapFocus, preventAutoFocus, "aria-labelledby": ariaLabelledby, }: PopoverProps) => React.JSX.Element;