@ioca/react 1.3.70 → 1.3.72
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.
- package/lib/cjs/js/hooks.js +56 -69
- package/lib/cjs/js/hooks.js.map +1 -1
- package/lib/cjs/js/utils.js +1 -0
- package/lib/cjs/js/utils.js.map +1 -1
- package/lib/css/index.css +1 -1
- package/lib/css/index.css.map +1 -1
- package/lib/es/js/hooks.js +57 -70
- package/lib/es/js/hooks.js.map +1 -1
- package/lib/es/js/utils.js +1 -0
- package/lib/es/js/utils.js.map +1 -1
- package/lib/index.js +56 -69
- package/package.json +2 -3
package/lib/es/js/hooks.js
CHANGED
|
@@ -1,17 +1,15 @@
|
|
|
1
|
-
import { useEffect
|
|
1
|
+
import { useEffect } from 'react';
|
|
2
2
|
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
let
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
touchable = "ontouchend" in document;
|
|
14
|
-
EVENTS = {
|
|
3
|
+
const MouseMoveEvents = new Set();
|
|
4
|
+
const MouseUpEvents = new Set();
|
|
5
|
+
const KeydownEvents = new Set();
|
|
6
|
+
let initialized = false;
|
|
7
|
+
const initEvents = () => {
|
|
8
|
+
if (!document || initialized)
|
|
9
|
+
return;
|
|
10
|
+
initialized = true;
|
|
11
|
+
const touchable = "ontouchend" in document;
|
|
12
|
+
const EVENTS = {
|
|
15
13
|
MOVE: touchable ? "touchmove" : "mousemove",
|
|
16
14
|
UP: touchable ? "touchend" : "mouseup",
|
|
17
15
|
KEYDOWN: "keydown",
|
|
@@ -31,11 +29,13 @@ if (isBrowser) {
|
|
|
31
29
|
listener(e);
|
|
32
30
|
}
|
|
33
31
|
});
|
|
32
|
+
};
|
|
33
|
+
function useInitEvents() {
|
|
34
|
+
useEffect(initEvents, []);
|
|
34
35
|
}
|
|
35
36
|
function useMouseMove(listener, options) {
|
|
37
|
+
useInitEvents();
|
|
36
38
|
useEffect(() => {
|
|
37
|
-
if (!isBrowser || options?.disabled)
|
|
38
|
-
return;
|
|
39
39
|
MouseMoveEvents.add(listener);
|
|
40
40
|
return () => {
|
|
41
41
|
MouseMoveEvents.delete(listener);
|
|
@@ -43,9 +43,8 @@ function useMouseMove(listener, options) {
|
|
|
43
43
|
}, [listener]);
|
|
44
44
|
}
|
|
45
45
|
function useMouseUp(listener, options) {
|
|
46
|
+
useInitEvents();
|
|
46
47
|
useEffect(() => {
|
|
47
|
-
if (!isBrowser || options?.disabled)
|
|
48
|
-
return;
|
|
49
48
|
MouseUpEvents.add(listener);
|
|
50
49
|
return () => {
|
|
51
50
|
MouseUpEvents.delete(listener);
|
|
@@ -53,8 +52,9 @@ function useMouseUp(listener, options) {
|
|
|
53
52
|
}, [listener]);
|
|
54
53
|
}
|
|
55
54
|
function useKeydown(listener, options) {
|
|
55
|
+
useInitEvents();
|
|
56
56
|
useEffect(() => {
|
|
57
|
-
if (
|
|
57
|
+
if (options?.disabled)
|
|
58
58
|
return;
|
|
59
59
|
KeydownEvents.add(listener);
|
|
60
60
|
return () => {
|
|
@@ -62,40 +62,36 @@ function useKeydown(listener, options) {
|
|
|
62
62
|
};
|
|
63
63
|
}, [listener]);
|
|
64
64
|
}
|
|
65
|
+
const defaultObserver = {
|
|
66
|
+
observe: () => { },
|
|
67
|
+
unobserve: () => { },
|
|
68
|
+
disconnect: () => { },
|
|
69
|
+
};
|
|
65
70
|
function useIntersectionObserver(configs) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
if (!isBrowser)
|
|
70
|
-
return;
|
|
71
|
-
IO.current = new IntersectionObserver((entries) => {
|
|
72
|
-
entries.map((entry) => {
|
|
73
|
-
const callback = WM.current.get(entry.target);
|
|
74
|
-
callback?.(entry.target, entry.isIntersecting);
|
|
75
|
-
});
|
|
76
|
-
}, configs);
|
|
77
|
-
return () => {
|
|
78
|
-
IO.current?.disconnect();
|
|
71
|
+
if (typeof window === "undefined") {
|
|
72
|
+
return {
|
|
73
|
+
...defaultObserver,
|
|
79
74
|
};
|
|
80
|
-
}
|
|
75
|
+
}
|
|
76
|
+
const WM = new WeakMap();
|
|
77
|
+
const IO = new IntersectionObserver((entries) => {
|
|
78
|
+
entries.map((entry) => {
|
|
79
|
+
const callback = WM.get(entry.target);
|
|
80
|
+
callback?.(entry.target, entry.isIntersecting);
|
|
81
|
+
});
|
|
82
|
+
}, configs);
|
|
81
83
|
function observe(target, callback) {
|
|
82
|
-
if (
|
|
83
|
-
return;
|
|
84
|
-
if (WM.current.get(target))
|
|
84
|
+
if (WM.get(target))
|
|
85
85
|
return;
|
|
86
|
-
WM.
|
|
87
|
-
IO.
|
|
86
|
+
WM.set(target, callback);
|
|
87
|
+
target && IO.observe(target);
|
|
88
88
|
}
|
|
89
89
|
function unobserve(target) {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
IO.current.unobserve(target);
|
|
93
|
-
WM.current.delete(target);
|
|
90
|
+
target && IO.unobserve(target);
|
|
91
|
+
WM.delete(target);
|
|
94
92
|
}
|
|
95
93
|
function disconnect() {
|
|
96
|
-
|
|
97
|
-
return;
|
|
98
|
-
IO.current.disconnect();
|
|
94
|
+
IO.disconnect();
|
|
99
95
|
}
|
|
100
96
|
return {
|
|
101
97
|
observe,
|
|
@@ -104,39 +100,30 @@ function useIntersectionObserver(configs) {
|
|
|
104
100
|
};
|
|
105
101
|
}
|
|
106
102
|
function useResizeObserver() {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
if (!isBrowser)
|
|
111
|
-
return;
|
|
112
|
-
IO.current = new ResizeObserver((entries) => {
|
|
113
|
-
entries.map((entry) => {
|
|
114
|
-
const callback = WM.current.get(entry.target);
|
|
115
|
-
callback?.(entry.target);
|
|
116
|
-
});
|
|
117
|
-
});
|
|
118
|
-
return () => {
|
|
119
|
-
IO.current?.disconnect();
|
|
103
|
+
if (typeof window === "undefined") {
|
|
104
|
+
return {
|
|
105
|
+
...defaultObserver,
|
|
120
106
|
};
|
|
121
|
-
}
|
|
107
|
+
}
|
|
108
|
+
const WM = new WeakMap();
|
|
109
|
+
const IO = new ResizeObserver((entries) => {
|
|
110
|
+
entries.map((entry) => {
|
|
111
|
+
const callback = WM.get(entry.target);
|
|
112
|
+
callback?.(entry.target);
|
|
113
|
+
});
|
|
114
|
+
});
|
|
122
115
|
function observe(target, callback) {
|
|
123
|
-
if (
|
|
124
|
-
return;
|
|
125
|
-
if (WM.current.get(target))
|
|
116
|
+
if (WM.get(target))
|
|
126
117
|
return;
|
|
127
|
-
IO.
|
|
128
|
-
WM.
|
|
118
|
+
target && IO.observe(target);
|
|
119
|
+
WM.set(target, callback);
|
|
129
120
|
}
|
|
130
121
|
function unobserve(target) {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
IO.current.unobserve(target);
|
|
134
|
-
WM.current.delete(target);
|
|
122
|
+
target && IO.unobserve(target);
|
|
123
|
+
WM.delete(target);
|
|
135
124
|
}
|
|
136
125
|
function disconnect() {
|
|
137
|
-
|
|
138
|
-
return;
|
|
139
|
-
IO.current.disconnect();
|
|
126
|
+
IO.disconnect();
|
|
140
127
|
}
|
|
141
128
|
return {
|
|
142
129
|
observe,
|
package/lib/es/js/hooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sources":["../../../packages/js/hooks.ts"],"sourcesContent":["import { useEffect
|
|
1
|
+
{"version":3,"file":"hooks.js","sources":["../../../packages/js/hooks.ts"],"sourcesContent":["import { useEffect } from \"react\";\n\ntype TMouseEvent = (e: MouseEvent) => void;\ntype TKeyboardEvent = (e: KeyboardEvent) => void;\ntype TEventOption = {\n\tdisabled?: boolean;\n};\n\nconst MouseMoveEvents = new Set<TMouseEvent>();\nconst MouseUpEvents = new Set<TMouseEvent>();\nconst KeydownEvents = new Set<TKeyboardEvent>();\n\nlet initialized = false;\n\nconst initEvents = () => {\n\tif (!document || initialized) return;\n\tinitialized = true;\n\n\tconst touchable = \"ontouchend\" in document;\n\tconst EVENTS: Record<string, any> = {\n\t\tMOVE: touchable ? \"touchmove\" : \"mousemove\",\n\t\tUP: touchable ? \"touchend\" : \"mouseup\",\n\t\tKEYDOWN: \"keydown\",\n\t};\n\n\tdocument.addEventListener(\n\t\tEVENTS.MOVE,\n\t\t(e) => {\n\t\t\tfor (const listener of MouseMoveEvents.values()) {\n\t\t\t\tlistener(e);\n\t\t\t}\n\t\t},\n\t\t{ passive: false }\n\t);\n\n\tdocument.addEventListener(EVENTS.UP, (e) => {\n\t\tfor (const listener of MouseUpEvents.values()) {\n\t\t\tlistener(e);\n\t\t}\n\t});\n\n\tdocument.addEventListener(EVENTS.KEYDOWN, (e) => {\n\t\tfor (const listener of KeydownEvents.values()) {\n\t\t\tlistener(e);\n\t\t}\n\t});\n};\n\nfunction useInitEvents() {\n\tuseEffect(initEvents, []);\n}\n\nexport function useMouseMove(listener: TMouseEvent, options?: TEventOption) {\n\tuseInitEvents();\n\tuseEffect(() => {\n\t\tif (options?.disabled) return;\n\n\t\tMouseMoveEvents.add(listener);\n\t\treturn () => {\n\t\t\tMouseMoveEvents.delete(listener);\n\t\t};\n\t}, [listener]);\n}\n\nexport function useMouseUp(listener: TMouseEvent, options?: TEventOption) {\n\tuseInitEvents();\n\tuseEffect(() => {\n\t\tif (options?.disabled) return;\n\n\t\tMouseUpEvents.add(listener);\n\t\treturn () => {\n\t\t\tMouseUpEvents.delete(listener);\n\t\t};\n\t}, [listener]);\n}\n\nexport function useKeydown(listener: TKeyboardEvent, options?: TEventOption) {\n\tuseInitEvents();\n\tuseEffect(() => {\n\t\tif (options?.disabled) return;\n\n\t\tKeydownEvents.add(listener);\n\t\treturn () => {\n\t\t\tKeydownEvents.delete(listener);\n\t\t};\n\t}, [listener]);\n}\n\nconst defaultObserver = {\n\tobserve: () => {},\n\tunobserve: () => {},\n\tdisconnect: () => {},\n};\n\nexport function useIntersectionObserver(configs?: IntersectionObserverInit) {\n\tif (typeof window === \"undefined\") {\n\t\treturn {\n\t\t\t...defaultObserver,\n\t\t};\n\t}\n\n\tconst WM = new WeakMap();\n\tconst IO = new IntersectionObserver((entries) => {\n\t\tentries.map((entry) => {\n\t\t\tconst callback = WM.get(entry.target);\n\t\t\tcallback?.(entry.target, entry.isIntersecting);\n\t\t});\n\t}, configs);\n\n\tfunction observe(target: HTMLElement, callback: Function) {\n\t\tif (WM.get(target)) return;\n\t\tWM.set(target, callback);\n\t\ttarget && IO.observe(target);\n\t}\n\n\tfunction unobserve(target: HTMLElement) {\n\t\ttarget && IO.unobserve(target);\n\t\tWM.delete(target);\n\t}\n\n\tfunction disconnect() {\n\t\tIO.disconnect();\n\t}\n\n\treturn {\n\t\tobserve,\n\t\tunobserve,\n\t\tdisconnect,\n\t};\n}\n\nexport function useResizeObserver() {\n\tif (typeof window === \"undefined\") {\n\t\treturn {\n\t\t\t...defaultObserver,\n\t\t};\n\t}\n\n\tconst WM = new WeakMap();\n\tconst IO = new ResizeObserver((entries) => {\n\t\tentries.map((entry) => {\n\t\t\tconst callback = WM.get(entry.target);\n\t\t\tcallback?.(entry.target);\n\t\t});\n\t});\n\n\tfunction observe(target: HTMLElement, callback: Function) {\n\t\tif (WM.get(target)) return;\n\t\ttarget && IO.observe(target);\n\t\tWM.set(target, callback);\n\t}\n\n\tfunction unobserve(target: HTMLElement) {\n\t\ttarget && IO.unobserve(target);\n\t\tWM.delete(target);\n\t}\n\n\tfunction disconnect() {\n\t\tIO.disconnect();\n\t}\n\n\treturn {\n\t\tobserve,\n\t\tunobserve,\n\t\tdisconnect,\n\t};\n}\n"],"names":[],"mappings":"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"}
|
package/lib/es/js/utils.js
CHANGED
package/lib/es/js/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../packages/js/utils.ts"],"sourcesContent":["import type { MouseEvent } from \"react\";\nimport { ReactNode } from \"react\";\nimport { Root, createRoot } from \"react-dom/client\";\nimport type { TOption, TOptions, TRelativeOptions } from \"../type\";\n\ntype TComputePosition = {\n\tcontainerSize: number;\n\ttargetSize: number;\n\ttargetOffset: number;\n\tcontentSize: number;\n\tgap: number;\n\talign?: \"start\" | \"center\" | \"end\";\n};\n\nexport function getPosition(\n\t$source?: HTMLElement | null,\n\t$popup?: HTMLElement | null,\n\toptions: TRelativeOptions = {}\n): [\n\tx: number,\n\ty: number,\n\tz: {\n\t\tarrowX: number;\n\t\tarrowY: number;\n\t\tarrowPos: string;\n\t}\n] {\n\tconst { refWindow, gap = 0, offset = 0, position = \"top\", align } = options;\n\n\tif (!$source || !$popup)\n\t\treturn [\n\t\t\t0,\n\t\t\t0,\n\t\t\t{\n\t\t\t\tarrowX: 0,\n\t\t\t\tarrowY: 0,\n\t\t\t\tarrowPos: \"bottom\",\n\t\t\t},\n\t\t];\n\n\tconst rectT = $source.getBoundingClientRect();\n\tconst rectC = $popup.getBoundingClientRect();\n\n\tlet w = window.innerWidth;\n\tlet h = window.innerHeight;\n\tlet {\n\t\tleft: tl,\n\t\ttop: tt,\n\t\tright: tr,\n\t\tbottom: tb,\n\t\twidth: tw,\n\t\theight: th,\n\t} = rectT;\n\tconst { height: ch, width: cw } = rectC;\n\n\tif (!refWindow) {\n\t\tconst rectPa = $source.offsetParent?.getBoundingClientRect();\n\n\t\tw = rectPa?.width || w;\n\t\th = rectPa?.height || h;\n\t\ttl = $source.offsetLeft;\n\t\ttt = $source.offsetTop;\n\t\ttr = tl + rectT.width;\n\t\ttb = tt + rectT.height;\n\t}\n\n\tlet y = 0;\n\tlet x = 0;\n\tlet arrowX = 0;\n\tlet arrowY = 0;\n\tlet arrowPos = \"bottom\";\n\n\tswitch (position) {\n\t\tcase \"left\":\n\t\tcase \"right\":\n\t\t\ty =\n\t\t\t\tth !== ch\n\t\t\t\t\t? computePosition({\n\t\t\t\t\t\t\tcontainerSize: h,\n\t\t\t\t\t\t\ttargetSize: th,\n\t\t\t\t\t\t\ttargetOffset: tt,\n\t\t\t\t\t\t\tcontentSize: ch,\n\t\t\t\t\t\t\tgap,\n\t\t\t\t\t\t\talign,\n\t\t\t\t\t })\n\t\t\t\t\t: tt;\n\t\t\tarrowY = y < tt ? tt - y + th / 2 : th / 2;\n\n\t\t\tconst xl = tl - offset - cw;\n\t\t\tconst xr = tr + offset + cw;\n\n\t\t\tif (position === \"left\") {\n\t\t\t\tconst R = xl < 0 && xr <= w;\n\t\t\t\tx = R ? tr + offset : xl;\n\t\t\t\tarrowX = R ? 0 : cw;\n\t\t\t\tarrowPos = R ? \"left\" : \"right\";\n\t\t\t} else {\n\t\t\t\tconst R = w > xr || xl < 0;\n\t\t\t\tx = R ? tr + offset : xl;\n\t\t\t\tarrowX = R ? 0 : cw;\n\t\t\t\tarrowPos = R ? \"left\" : \"right\";\n\t\t\t}\n\n\t\t\tbreak;\n\t\tcase \"top\":\n\t\tcase \"bottom\":\n\t\t\tx =\n\t\t\t\ttw !== cw\n\t\t\t\t\t? computePosition({\n\t\t\t\t\t\t\tcontainerSize: w,\n\t\t\t\t\t\t\ttargetOffset: tl,\n\t\t\t\t\t\t\ttargetSize: tw,\n\t\t\t\t\t\t\tcontentSize: cw,\n\t\t\t\t\t\t\tgap,\n\t\t\t\t\t\t\talign,\n\t\t\t\t\t })\n\t\t\t\t\t: tl;\n\t\t\tarrowX = x > tl ? cw / 2 : tl - x + tw / 2;\n\n\t\t\tconst yt = tt - offset - ch;\n\t\t\tconst yb = tb + offset + ch;\n\t\t\tif (position === \"top\") {\n\t\t\t\tconst T = yt < 0 && yb <= h;\n\t\t\t\ty = T ? tb + offset : yt;\n\t\t\t\tarrowY = T ? 0 : ch;\n\t\t\t\tarrowPos = T ? \"top\" : \"bottom\";\n\t\t\t} else {\n\t\t\t\tconst B = h > yb || yt < 0;\n\t\t\t\ty = B ? tb + offset : yt;\n\t\t\t\tarrowY = B ? 0 : ch;\n\t\t\t\tarrowPos = B ? \"top\" : \"bottom\";\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\n\treturn [\n\t\tx,\n\t\ty,\n\t\t{\n\t\t\tarrowX,\n\t\t\tarrowY,\n\t\t\tarrowPos,\n\t\t},\n\t];\n}\n\nexport function getPointPosition(e: MouseEvent, content: HTMLElement) {\n\tconst { width: w, height: h } = content.getBoundingClientRect();\n\tconst parent = content.offsetParent;\n\tlet pw,\n\t\tph,\n\t\tpl = 0,\n\t\tpt = 0;\n\n\tif (parent) {\n\t\tconst {\n\t\t\twidth: ow,\n\t\t\theight: oh,\n\t\t\tleft: ol,\n\t\t\ttop: ot,\n\t\t} = parent.getBoundingClientRect();\n\t\tconst st = parent.scrollTop ?? 0;\n\n\t\tpw = ow;\n\t\tph = oh;\n\t\tpt = ot - st;\n\t\tpl = ol;\n\t} else {\n\t\tpw = window.innerWidth;\n\t\tph = window.innerHeight;\n\t}\n\tconst x = e.pageX - pl;\n\tconst y = e.pageY - pt;\n\n\tconst left = x + w >= pw ? (x - w > 0 ? x - w : x) : x;\n\tconst top = y + h >= ph ? (y - h > 0 ? y - h : y) : y;\n\n\treturn [left, top];\n}\n\nfunction computePosition({\n\tcontainerSize,\n\ttargetSize,\n\ttargetOffset,\n\tcontentSize,\n\tgap,\n\talign = \"center\",\n}: TComputePosition) {\n\tconst centerPoint = targetOffset + targetSize / 2;\n\n\tswitch (align) {\n\t\tcase \"start\":\n\t\t\treturn targetOffset + contentSize > containerSize\n\t\t\t\t? containerSize - contentSize - gap\n\t\t\t\t: targetOffset;\n\t\tcase \"center\":\n\t\t\tif (targetSize >= contentSize) {\n\t\t\t\treturn centerPoint - contentSize / 2;\n\t\t\t}\n\n\t\t\tif (centerPoint + contentSize / 2 + gap > containerSize) {\n\t\t\t\treturn targetOffset + targetSize - contentSize;\n\t\t\t}\n\n\t\t\tif (centerPoint - contentSize / 2 - gap < 0) {\n\t\t\t\treturn gap;\n\t\t\t}\n\n\t\t\treturn centerPoint - contentSize / 2;\n\t\tcase \"end\":\n\t\t\tconst result = targetOffset + targetSize - contentSize;\n\t\t\treturn result > 0 ? result : gap;\n\t\tdefault:\n\t\t\treturn centerPoint - contentSize / 2;\n\t}\n}\n\nexport function formatOption(options: TOptions): TOption[] {\n\treturn options.map((option) =>\n\t\t[\"string\", \"number\"].includes(typeof option)\n\t\t\t? { label: option, value: option }\n\t\t\t: option\n\t) as TOption[];\n}\n\nexport function animate(\n\tfrom: number,\n\tto: number,\n\tduration: number = 1000,\n\tcallback?: (v: number) => void,\n\teasing: (t: number) => number = (t) => 1 - Math.pow(1 - t, 4)\n) {\n\tconst start = performance.now();\n\tconst diff = to - from;\n\tlet raf = requestAnimationFrame(loop);\n\n\tfunction loop() {\n\t\traf = requestAnimationFrame(loop);\n\n\t\tconst past = performance.now() - start;\n\t\tlet percent = past / duration;\n\n\t\tif (percent >= 1) {\n\t\t\tpercent = 1;\n\t\t\tcancelAnimationFrame(raf);\n\t\t}\n\n\t\tconst pass = diff * easing(percent);\n\t\tcallback?.(pass);\n\t}\n}\n\nexport function formatNumber(\n\tvalue: number,\n\toptions: {\n\t\tprecision?: number;\n\t\tthousand?: string;\n\t} = {}\n) {\n\tconst { precision, thousand } = options;\n\n\tconst result = value.toFixed(precision);\n\n\tif (!thousand) return result;\n\n\tconst points = result.split(\".\");\n\tconst integer = points[0].replace(\n\t\t/\\d{1,3}(?=(\\d{3})+(\\.\\d*)?$)/g,\n\t\t`$&${thousand}`\n\t);\n\n\tif (points.length === 1) return integer;\n\n\treturn `${integer}.${points[1]}`;\n}\n\nexport function renderNode(node: ReactNode, container = document.body) {\n\tconst div: HTMLDivElement | null = document.createElement(\"div\");\n\tcontainer.append(div);\n\n\tconst root: Root | null = createRoot(div);\n\tconst sto = setTimeout(() => {\n\t\troot?.render(node);\n\t}, 0);\n\n\treturn () => {\n\t\tdiv?.remove();\n\t\troot?.unmount();\n\t\tsto && clearTimeout(sto);\n\t};\n}\n\nexport function getSuffixByUrl(url: string) {\n\treturn url.match(/\\.([^\\./\\?]+)($|\\?)/)?.[1];\n}\n\nexport function getFileType(suffix: string, type?: string) {\n\tswitch (true) {\n\t\tcase [\"jpg\", \"jpeg\", \"png\", \"webp\", \"svg\"].includes(suffix) ||\n\t\t\ttype?.startsWith(\"image/\"):\n\t\t\treturn \"IMAGE\";\n\t\tcase [\"mp4\", \"avi\"].includes(suffix) || type?.startsWith(\"video/\"):\n\t\t\treturn \"VIDEO\";\n\t\tdefault:\n\t\t\treturn \"UNKNOWN\";\n\t}\n}\n\nexport function fullScreen(el: HTMLElement) {\n\tel.requestFullscreen?.();\n}\n\nexport function exitFullScreen() {\n\tdocument.exitFullscreen?.();\n}\n\nexport function formatTime(\n\ttime: number,\n\toptions?: {\n\t\tzero?: boolean;\n\t\tunits?: string[];\n\t}\n) {\n\tconst result: string[] = [];\n\tconst { zero = true, units = [\"\", \":\", \":\"] } = options || {};\n\n\tconst l = units.length;\n\tlet i = 0;\n\n\twhile (i < l) {\n\t\tif (time <= 0 && i > 1) break;\n\n\t\tconst n = Math.round(time % 60);\n\n\t\ttime = Math.floor(time / 60);\n\n\t\tresult.unshift((zero && n < 10 ? `0${n}` : n) + units[i++]);\n\t}\n\n\treturn result.join(\"\");\n}\n\nexport function getNextSorter(\n\tprevSortBy: string,\n\tprevSortType: string,\n\tsortBy: string\n): [sortBy: string, sortType: string] {\n\tconst types = [\"desc\", \"asc\"];\n\n\tif (prevSortBy === sortBy) {\n\t\tconst i = types.findIndex((t) => t === prevSortType) + 1;\n\t\tconst type = types[i] || \"\";\n\t\tconst by = type === \"\" ? \"\" : sortBy;\n\n\t\treturn [by, type];\n\t}\n\n\treturn [sortBy, \"desc\"];\n}\n\nexport function formatBytes(bytes: number, decimals = 2) {\n\tif (!+bytes) return \"0 Bytes\";\n\n\tconst k = 1024;\n\tconst dm = decimals < 0 ? 0 : decimals;\n\tconst sizes = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"];\n\n\tconst i = Math.floor(Math.log(bytes) / Math.log(k));\n\n\treturn `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;\n}\n\nexport function clamp(value: number, min: number, max: number) {\n\treturn value < min ? min : value > max ? max : value;\n}\n\nexport const arrayMove = (array, fromIndex: number, toIndex: number) => {\n\tif (toIndex >= array.length) {\n\t\tlet k = toIndex - array.length + 1;\n\t\twhile (k--) {\n\t\t\tarray.push(undefined);\n\t\t}\n\t}\n\tarray.splice(toIndex, 0, array.splice(fromIndex, 1)[0]);\n\treturn array;\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../packages/js/utils.ts"],"sourcesContent":["import type { MouseEvent } from \"react\";\nimport { ReactNode, useEffect, useRef, useState } from \"react\";\nimport { Root, createRoot } from \"react-dom/client\";\nimport type { TOption, TOptions, TRelativeOptions } from \"../type\";\n\ntype TComputePosition = {\n\tcontainerSize: number;\n\ttargetSize: number;\n\ttargetOffset: number;\n\tcontentSize: number;\n\tgap: number;\n\talign?: \"start\" | \"center\" | \"end\";\n};\n\nexport function getPosition(\n\t$source?: HTMLElement | null,\n\t$popup?: HTMLElement | null,\n\toptions: TRelativeOptions = {}\n): [\n\tx: number,\n\ty: number,\n\tz: {\n\t\tarrowX: number;\n\t\tarrowY: number;\n\t\tarrowPos: string;\n\t}\n] {\n\tconst { refWindow, gap = 0, offset = 0, position = \"top\", align } = options;\n\n\tif (!$source || !$popup)\n\t\treturn [\n\t\t\t0,\n\t\t\t0,\n\t\t\t{\n\t\t\t\tarrowX: 0,\n\t\t\t\tarrowY: 0,\n\t\t\t\tarrowPos: \"bottom\",\n\t\t\t},\n\t\t];\n\n\tconst rectT = $source.getBoundingClientRect();\n\tconst rectC = $popup.getBoundingClientRect();\n\n\tlet w = window.innerWidth;\n\tlet h = window.innerHeight;\n\tlet {\n\t\tleft: tl,\n\t\ttop: tt,\n\t\tright: tr,\n\t\tbottom: tb,\n\t\twidth: tw,\n\t\theight: th,\n\t} = rectT;\n\tconst { height: ch, width: cw } = rectC;\n\n\tif (!refWindow) {\n\t\tconst rectPa = $source.offsetParent?.getBoundingClientRect();\n\n\t\tw = rectPa?.width || w;\n\t\th = rectPa?.height || h;\n\t\ttl = $source.offsetLeft;\n\t\ttt = $source.offsetTop;\n\t\ttr = tl + rectT.width;\n\t\ttb = tt + rectT.height;\n\t}\n\n\tlet y = 0;\n\tlet x = 0;\n\tlet arrowX = 0;\n\tlet arrowY = 0;\n\tlet arrowPos = \"bottom\";\n\n\tswitch (position) {\n\t\tcase \"left\":\n\t\tcase \"right\":\n\t\t\ty =\n\t\t\t\tth !== ch\n\t\t\t\t\t? computePosition({\n\t\t\t\t\t\t\tcontainerSize: h,\n\t\t\t\t\t\t\ttargetSize: th,\n\t\t\t\t\t\t\ttargetOffset: tt,\n\t\t\t\t\t\t\tcontentSize: ch,\n\t\t\t\t\t\t\tgap,\n\t\t\t\t\t\t\talign,\n\t\t\t\t\t })\n\t\t\t\t\t: tt;\n\t\t\tarrowY = y < tt ? tt - y + th / 2 : th / 2;\n\n\t\t\tconst xl = tl - offset - cw;\n\t\t\tconst xr = tr + offset + cw;\n\n\t\t\tif (position === \"left\") {\n\t\t\t\tconst R = xl < 0 && xr <= w;\n\t\t\t\tx = R ? tr + offset : xl;\n\t\t\t\tarrowX = R ? 0 : cw;\n\t\t\t\tarrowPos = R ? \"left\" : \"right\";\n\t\t\t} else {\n\t\t\t\tconst R = w > xr || xl < 0;\n\t\t\t\tx = R ? tr + offset : xl;\n\t\t\t\tarrowX = R ? 0 : cw;\n\t\t\t\tarrowPos = R ? \"left\" : \"right\";\n\t\t\t}\n\n\t\t\tbreak;\n\t\tcase \"top\":\n\t\tcase \"bottom\":\n\t\t\tx =\n\t\t\t\ttw !== cw\n\t\t\t\t\t? computePosition({\n\t\t\t\t\t\t\tcontainerSize: w,\n\t\t\t\t\t\t\ttargetOffset: tl,\n\t\t\t\t\t\t\ttargetSize: tw,\n\t\t\t\t\t\t\tcontentSize: cw,\n\t\t\t\t\t\t\tgap,\n\t\t\t\t\t\t\talign,\n\t\t\t\t\t })\n\t\t\t\t\t: tl;\n\t\t\tarrowX = x > tl ? cw / 2 : tl - x + tw / 2;\n\n\t\t\tconst yt = tt - offset - ch;\n\t\t\tconst yb = tb + offset + ch;\n\t\t\tif (position === \"top\") {\n\t\t\t\tconst T = yt < 0 && yb <= h;\n\t\t\t\ty = T ? tb + offset : yt;\n\t\t\t\tarrowY = T ? 0 : ch;\n\t\t\t\tarrowPos = T ? \"top\" : \"bottom\";\n\t\t\t} else {\n\t\t\t\tconst B = h > yb || yt < 0;\n\t\t\t\ty = B ? tb + offset : yt;\n\t\t\t\tarrowY = B ? 0 : ch;\n\t\t\t\tarrowPos = B ? \"top\" : \"bottom\";\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\n\treturn [\n\t\tx,\n\t\ty,\n\t\t{\n\t\t\tarrowX,\n\t\t\tarrowY,\n\t\t\tarrowPos,\n\t\t},\n\t];\n}\n\nexport function getPointPosition(e: MouseEvent, content: HTMLElement) {\n\tconst { width: w, height: h } = content.getBoundingClientRect();\n\tconst parent = content.offsetParent;\n\tlet pw,\n\t\tph,\n\t\tpl = 0,\n\t\tpt = 0;\n\n\tif (parent) {\n\t\tconst {\n\t\t\twidth: ow,\n\t\t\theight: oh,\n\t\t\tleft: ol,\n\t\t\ttop: ot,\n\t\t} = parent.getBoundingClientRect();\n\t\tconst st = parent.scrollTop ?? 0;\n\n\t\tpw = ow;\n\t\tph = oh;\n\t\tpt = ot - st;\n\t\tpl = ol;\n\t} else {\n\t\tpw = window.innerWidth;\n\t\tph = window.innerHeight;\n\t}\n\tconst x = e.pageX - pl;\n\tconst y = e.pageY - pt;\n\n\tconst left = x + w >= pw ? (x - w > 0 ? x - w : x) : x;\n\tconst top = y + h >= ph ? (y - h > 0 ? y - h : y) : y;\n\n\treturn [left, top];\n}\n\nfunction computePosition({\n\tcontainerSize,\n\ttargetSize,\n\ttargetOffset,\n\tcontentSize,\n\tgap,\n\talign = \"center\",\n}: TComputePosition) {\n\tconst centerPoint = targetOffset + targetSize / 2;\n\n\tswitch (align) {\n\t\tcase \"start\":\n\t\t\treturn targetOffset + contentSize > containerSize\n\t\t\t\t? containerSize - contentSize - gap\n\t\t\t\t: targetOffset;\n\t\tcase \"center\":\n\t\t\tif (targetSize >= contentSize) {\n\t\t\t\treturn centerPoint - contentSize / 2;\n\t\t\t}\n\n\t\t\tif (centerPoint + contentSize / 2 + gap > containerSize) {\n\t\t\t\treturn targetOffset + targetSize - contentSize;\n\t\t\t}\n\n\t\t\tif (centerPoint - contentSize / 2 - gap < 0) {\n\t\t\t\treturn gap;\n\t\t\t}\n\n\t\t\treturn centerPoint - contentSize / 2;\n\t\tcase \"end\":\n\t\t\tconst result = targetOffset + targetSize - contentSize;\n\t\t\treturn result > 0 ? result : gap;\n\t\tdefault:\n\t\t\treturn centerPoint - contentSize / 2;\n\t}\n}\n\nexport function formatOption(options: TOptions): TOption[] {\n\treturn options.map((option) =>\n\t\t[\"string\", \"number\"].includes(typeof option)\n\t\t\t? { label: option, value: option }\n\t\t\t: option\n\t) as TOption[];\n}\n\nexport function animate(\n\tfrom: number,\n\tto: number,\n\tduration: number = 1000,\n\tcallback?: (v: number) => void,\n\teasing: (t: number) => number = (t) => 1 - Math.pow(1 - t, 4)\n) {\n\tconst start = performance.now();\n\tconst diff = to - from;\n\tlet raf = requestAnimationFrame(loop);\n\n\tfunction loop() {\n\t\traf = requestAnimationFrame(loop);\n\n\t\tconst past = performance.now() - start;\n\t\tlet percent = past / duration;\n\n\t\tif (percent >= 1) {\n\t\t\tpercent = 1;\n\t\t\tcancelAnimationFrame(raf);\n\t\t}\n\n\t\tconst pass = diff * easing(percent);\n\t\tcallback?.(pass);\n\t}\n}\n\nexport function formatNumber(\n\tvalue: number,\n\toptions: {\n\t\tprecision?: number;\n\t\tthousand?: string;\n\t} = {}\n) {\n\tconst { precision, thousand } = options;\n\n\tconst result = value.toFixed(precision);\n\n\tif (!thousand) return result;\n\n\tconst points = result.split(\".\");\n\tconst integer = points[0].replace(\n\t\t/\\d{1,3}(?=(\\d{3})+(\\.\\d*)?$)/g,\n\t\t`$&${thousand}`\n\t);\n\n\tif (points.length === 1) return integer;\n\n\treturn `${integer}.${points[1]}`;\n}\n\nexport function renderNode(node: ReactNode, container = document.body) {\n\tconst div: HTMLDivElement | null = document.createElement(\"div\");\n\tcontainer.append(div);\n\n\tconst root: Root | null = createRoot(div);\n\tconst sto = setTimeout(() => {\n\t\troot?.render(node);\n\t}, 0);\n\n\treturn () => {\n\t\tdiv?.remove();\n\t\troot?.unmount();\n\t\tsto && clearTimeout(sto);\n\t};\n}\n\nexport function getSuffixByUrl(url: string) {\n\treturn url.match(/\\.([^\\./\\?]+)($|\\?)/)?.[1];\n}\n\nexport function getFileType(suffix: string, type?: string) {\n\tswitch (true) {\n\t\tcase [\"jpg\", \"jpeg\", \"png\", \"webp\", \"svg\"].includes(suffix) ||\n\t\t\ttype?.startsWith(\"image/\"):\n\t\t\treturn \"IMAGE\";\n\t\tcase [\"mp4\", \"avi\"].includes(suffix) || type?.startsWith(\"video/\"):\n\t\t\treturn \"VIDEO\";\n\t\tdefault:\n\t\t\treturn \"UNKNOWN\";\n\t}\n}\n\nexport function fullScreen(el: HTMLElement) {\n\tel.requestFullscreen?.();\n}\n\nexport function exitFullScreen() {\n\tdocument.exitFullscreen?.();\n}\n\nexport function formatTime(\n\ttime: number,\n\toptions?: {\n\t\tzero?: boolean;\n\t\tunits?: string[];\n\t}\n) {\n\tconst result: string[] = [];\n\tconst { zero = true, units = [\"\", \":\", \":\"] } = options || {};\n\n\tconst l = units.length;\n\tlet i = 0;\n\n\twhile (i < l) {\n\t\tif (time <= 0 && i > 1) break;\n\n\t\tconst n = Math.round(time % 60);\n\n\t\ttime = Math.floor(time / 60);\n\n\t\tresult.unshift((zero && n < 10 ? `0${n}` : n) + units[i++]);\n\t}\n\n\treturn result.join(\"\");\n}\n\nexport function getNextSorter(\n\tprevSortBy: string,\n\tprevSortType: string,\n\tsortBy: string\n): [sortBy: string, sortType: string] {\n\tconst types = [\"desc\", \"asc\"];\n\n\tif (prevSortBy === sortBy) {\n\t\tconst i = types.findIndex((t) => t === prevSortType) + 1;\n\t\tconst type = types[i] || \"\";\n\t\tconst by = type === \"\" ? \"\" : sortBy;\n\n\t\treturn [by, type];\n\t}\n\n\treturn [sortBy, \"desc\"];\n}\n\nexport function formatBytes(bytes: number, decimals = 2) {\n\tif (!+bytes) return \"0 Bytes\";\n\n\tconst k = 1024;\n\tconst dm = decimals < 0 ? 0 : decimals;\n\tconst sizes = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"];\n\n\tconst i = Math.floor(Math.log(bytes) / Math.log(k));\n\n\treturn `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;\n}\n\nexport function clamp(value: number, min: number, max: number) {\n\treturn value < min ? min : value > max ? max : value;\n}\n\nexport const arrayMove = (array, fromIndex: number, toIndex: number) => {\n\tif (toIndex >= array.length) {\n\t\tlet k = toIndex - array.length + 1;\n\t\twhile (k--) {\n\t\t\tarray.push(undefined);\n\t\t}\n\t}\n\tarray.splice(toIndex, 0, array.splice(fromIndex, 1)[0]);\n\treturn array;\n};\n\ntype ReactiveObject<T> = T & { __isReactive?: boolean };\n\nexport function useReactive<T extends object>(\n\tinitialState: T\n): ReactiveObject<T> {\n\tconst [, setState] = useState<number>(0);\n\tconst reactiveState = useRef<ReactiveObject<T>>(initialState);\n\n\tuseEffect(() => {\n\t\tif (!reactiveState.current.__isReactive) {\n\t\t\treactiveState.current = createReactiveObject(\n\t\t\t\treactiveState.current,\n\t\t\t\tsetState\n\t\t\t);\n\t\t}\n\t}, []);\n\n\treturn reactiveState.current;\n}\n\nfunction createReactiveObject<T extends object>(\n\ttarget: T,\n\tsetState: React.Dispatch<React.SetStateAction<number>>\n): ReactiveObject<T> {\n\treturn new Proxy(target, {\n\t\tget(obj, prop) {\n\t\t\tif (prop === \"__isReactive\") return true;\n\t\t\treturn Reflect.get(obj, prop);\n\t\t},\n\t\tset(obj, prop, value) {\n\t\t\tconst result = Reflect.set(obj, prop, value);\n\t\t\tsetState((prev) => prev + 1); // Trigger re-render\n\t\t\treturn result;\n\t\t},\n\t}) as ReactiveObject<T>;\n}\n\nexport default useReactive;\n"],"names":[],"mappings":"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"}
|
package/lib/index.js
CHANGED
|
@@ -700,18 +700,16 @@ function Cell(props) {
|
|
|
700
700
|
}), children: data[id] })) }));
|
|
701
701
|
}
|
|
702
702
|
|
|
703
|
-
const
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
let
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
touchable = "ontouchend" in document;
|
|
714
|
-
EVENTS = {
|
|
703
|
+
const MouseMoveEvents = new Set();
|
|
704
|
+
const MouseUpEvents = new Set();
|
|
705
|
+
const KeydownEvents = new Set();
|
|
706
|
+
let initialized = false;
|
|
707
|
+
const initEvents = () => {
|
|
708
|
+
if (!document || initialized)
|
|
709
|
+
return;
|
|
710
|
+
initialized = true;
|
|
711
|
+
const touchable = "ontouchend" in document;
|
|
712
|
+
const EVENTS = {
|
|
715
713
|
MOVE: touchable ? "touchmove" : "mousemove",
|
|
716
714
|
UP: touchable ? "touchend" : "mouseup",
|
|
717
715
|
KEYDOWN: "keydown",
|
|
@@ -731,11 +729,13 @@ if (isBrowser) {
|
|
|
731
729
|
listener(e);
|
|
732
730
|
}
|
|
733
731
|
});
|
|
732
|
+
};
|
|
733
|
+
function useInitEvents() {
|
|
734
|
+
useEffect(initEvents, []);
|
|
734
735
|
}
|
|
735
736
|
function useMouseMove(listener, options) {
|
|
737
|
+
useInitEvents();
|
|
736
738
|
useEffect(() => {
|
|
737
|
-
if (!isBrowser || options?.disabled)
|
|
738
|
-
return;
|
|
739
739
|
MouseMoveEvents.add(listener);
|
|
740
740
|
return () => {
|
|
741
741
|
MouseMoveEvents.delete(listener);
|
|
@@ -743,9 +743,8 @@ function useMouseMove(listener, options) {
|
|
|
743
743
|
}, [listener]);
|
|
744
744
|
}
|
|
745
745
|
function useMouseUp(listener, options) {
|
|
746
|
+
useInitEvents();
|
|
746
747
|
useEffect(() => {
|
|
747
|
-
if (!isBrowser || options?.disabled)
|
|
748
|
-
return;
|
|
749
748
|
MouseUpEvents.add(listener);
|
|
750
749
|
return () => {
|
|
751
750
|
MouseUpEvents.delete(listener);
|
|
@@ -753,8 +752,9 @@ function useMouseUp(listener, options) {
|
|
|
753
752
|
}, [listener]);
|
|
754
753
|
}
|
|
755
754
|
function useKeydown(listener, options) {
|
|
755
|
+
useInitEvents();
|
|
756
756
|
useEffect(() => {
|
|
757
|
-
if (
|
|
757
|
+
if (options?.disabled)
|
|
758
758
|
return;
|
|
759
759
|
KeydownEvents.add(listener);
|
|
760
760
|
return () => {
|
|
@@ -762,40 +762,36 @@ function useKeydown(listener, options) {
|
|
|
762
762
|
};
|
|
763
763
|
}, [listener]);
|
|
764
764
|
}
|
|
765
|
+
const defaultObserver = {
|
|
766
|
+
observe: () => { },
|
|
767
|
+
unobserve: () => { },
|
|
768
|
+
disconnect: () => { },
|
|
769
|
+
};
|
|
765
770
|
function useIntersectionObserver(configs) {
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
if (!isBrowser)
|
|
770
|
-
return;
|
|
771
|
-
IO.current = new IntersectionObserver((entries) => {
|
|
772
|
-
entries.map((entry) => {
|
|
773
|
-
const callback = WM.current.get(entry.target);
|
|
774
|
-
callback?.(entry.target, entry.isIntersecting);
|
|
775
|
-
});
|
|
776
|
-
}, configs);
|
|
777
|
-
return () => {
|
|
778
|
-
IO.current?.disconnect();
|
|
771
|
+
if (typeof window === "undefined") {
|
|
772
|
+
return {
|
|
773
|
+
...defaultObserver,
|
|
779
774
|
};
|
|
780
|
-
}
|
|
775
|
+
}
|
|
776
|
+
const WM = new WeakMap();
|
|
777
|
+
const IO = new IntersectionObserver((entries) => {
|
|
778
|
+
entries.map((entry) => {
|
|
779
|
+
const callback = WM.get(entry.target);
|
|
780
|
+
callback?.(entry.target, entry.isIntersecting);
|
|
781
|
+
});
|
|
782
|
+
}, configs);
|
|
781
783
|
function observe(target, callback) {
|
|
782
|
-
if (
|
|
783
|
-
return;
|
|
784
|
-
if (WM.current.get(target))
|
|
784
|
+
if (WM.get(target))
|
|
785
785
|
return;
|
|
786
|
-
WM.
|
|
787
|
-
IO.
|
|
786
|
+
WM.set(target, callback);
|
|
787
|
+
target && IO.observe(target);
|
|
788
788
|
}
|
|
789
789
|
function unobserve(target) {
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
IO.current.unobserve(target);
|
|
793
|
-
WM.current.delete(target);
|
|
790
|
+
target && IO.unobserve(target);
|
|
791
|
+
WM.delete(target);
|
|
794
792
|
}
|
|
795
793
|
function disconnect() {
|
|
796
|
-
|
|
797
|
-
return;
|
|
798
|
-
IO.current.disconnect();
|
|
794
|
+
IO.disconnect();
|
|
799
795
|
}
|
|
800
796
|
return {
|
|
801
797
|
observe,
|
|
@@ -804,39 +800,30 @@ function useIntersectionObserver(configs) {
|
|
|
804
800
|
};
|
|
805
801
|
}
|
|
806
802
|
function useResizeObserver() {
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
if (!isBrowser)
|
|
811
|
-
return;
|
|
812
|
-
IO.current = new ResizeObserver((entries) => {
|
|
813
|
-
entries.map((entry) => {
|
|
814
|
-
const callback = WM.current.get(entry.target);
|
|
815
|
-
callback?.(entry.target);
|
|
816
|
-
});
|
|
817
|
-
});
|
|
818
|
-
return () => {
|
|
819
|
-
IO.current?.disconnect();
|
|
803
|
+
if (typeof window === "undefined") {
|
|
804
|
+
return {
|
|
805
|
+
...defaultObserver,
|
|
820
806
|
};
|
|
821
|
-
}
|
|
807
|
+
}
|
|
808
|
+
const WM = new WeakMap();
|
|
809
|
+
const IO = new ResizeObserver((entries) => {
|
|
810
|
+
entries.map((entry) => {
|
|
811
|
+
const callback = WM.get(entry.target);
|
|
812
|
+
callback?.(entry.target);
|
|
813
|
+
});
|
|
814
|
+
});
|
|
822
815
|
function observe(target, callback) {
|
|
823
|
-
if (
|
|
816
|
+
if (WM.get(target))
|
|
824
817
|
return;
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
IO.current.observe(target);
|
|
828
|
-
WM.current.set(target, callback);
|
|
818
|
+
target && IO.observe(target);
|
|
819
|
+
WM.set(target, callback);
|
|
829
820
|
}
|
|
830
821
|
function unobserve(target) {
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
IO.current.unobserve(target);
|
|
834
|
-
WM.current.delete(target);
|
|
822
|
+
target && IO.unobserve(target);
|
|
823
|
+
WM.delete(target);
|
|
835
824
|
}
|
|
836
825
|
function disconnect() {
|
|
837
|
-
|
|
838
|
-
return;
|
|
839
|
-
IO.current.disconnect();
|
|
826
|
+
IO.disconnect();
|
|
840
827
|
}
|
|
841
828
|
return {
|
|
842
829
|
observe,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ioca/react",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.72",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"dev": "vite",
|
|
@@ -51,8 +51,7 @@
|
|
|
51
51
|
},
|
|
52
52
|
"peerDependencies": {
|
|
53
53
|
"react": ">=16.8.0",
|
|
54
|
-
"react-dom": ">=16.8.0"
|
|
55
|
-
"ahooks": ">=3.8.0"
|
|
54
|
+
"react-dom": ">=16.8.0"
|
|
56
55
|
},
|
|
57
56
|
"main": "lib/cjs/index.js",
|
|
58
57
|
"module": "lib/es/index.js",
|