@dxos/react-hooks 0.8.3 → 0.8.4-main.1c7ec43d41
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/README.md +1 -0
- package/dist/lib/browser/index.mjs +253 -141
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +253 -141
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/index.d.ts +7 -3
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/useAsyncEffect.d.ts +5 -29
- package/dist/types/src/useAsyncEffect.d.ts.map +1 -1
- package/dist/types/src/useAsyncState.d.ts.map +1 -1
- package/dist/types/src/useAtomState.d.ts +12 -0
- package/dist/types/src/useAtomState.d.ts.map +1 -0
- package/dist/types/src/useControlledState.d.ts +2 -1
- package/dist/types/src/useControlledState.d.ts.map +1 -1
- package/dist/types/src/useDebugDeps.d.ts +6 -0
- package/dist/types/src/useDebugDeps.d.ts.map +1 -0
- package/dist/types/src/useDefaultValue.d.ts.map +1 -1
- package/dist/types/src/useDefaults.d.ts +6 -0
- package/dist/types/src/useDefaults.d.ts.map +1 -0
- package/dist/types/src/useDynamicRef.d.ts +6 -1
- package/dist/types/src/useDynamicRef.d.ts.map +1 -1
- package/dist/types/src/useForwardedRef.d.ts +23 -3
- package/dist/types/src/useForwardedRef.d.ts.map +1 -1
- package/dist/types/src/useId.d.ts.map +1 -1
- package/dist/types/src/useIsFocused.d.ts +1 -1
- package/dist/types/src/useIsFocused.d.ts.map +1 -1
- package/dist/types/src/useMediaQuery.d.ts +1 -1
- package/dist/types/src/useMediaQuery.d.ts.map +1 -1
- package/dist/types/src/useMulticastObservable.d.ts.map +1 -1
- package/dist/types/src/useMulticastObservable.test.d.ts.map +1 -1
- package/dist/types/src/useTimeout.d.ts +3 -0
- package/dist/types/src/useTimeout.d.ts.map +1 -0
- package/dist/types/src/useTransitions.d.ts +2 -1
- package/dist/types/src/useTransitions.d.ts.map +1 -1
- package/dist/types/src/useViewportResize.d.ts +3 -0
- package/dist/types/src/useViewportResize.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +21 -14
- package/src/index.ts +8 -3
- package/src/useAsyncEffect.ts +19 -49
- package/src/useAsyncState.ts +2 -1
- package/src/useAtomState.ts +23 -0
- package/src/useControlledState.ts +26 -7
- package/src/useDebugDeps.ts +35 -0
- package/src/useDefaultValue.ts +1 -2
- package/src/useDefaults.ts +14 -0
- package/src/useDynamicRef.ts +26 -5
- package/src/useForwardedRef.ts +50 -13
- package/src/useId.ts +3 -2
- package/src/useIsFocused.ts +3 -3
- package/src/useMediaQuery.ts +8 -9
- package/src/{useMulticastObservable.test.tsx → useMulticastObservable.test.ts} +1 -3
- package/src/useTimeout.ts +46 -0
- package/src/useTransitions.ts +4 -2
- package/src/{useResize.ts → useViewportResize.ts} +4 -4
- package/dist/lib/node/index.cjs +0 -413
- package/dist/lib/node/index.cjs.map +0 -7
- package/dist/lib/node/meta.json +0 -1
- package/dist/types/src/useAsyncEffect.test.d.ts +0 -2
- package/dist/types/src/useAsyncEffect.test.d.ts.map +0 -1
- package/dist/types/src/useDebugReactDeps.d.ts +0 -6
- package/dist/types/src/useDebugReactDeps.d.ts.map +0 -1
- package/dist/types/src/useResize.d.ts +0 -3
- package/dist/types/src/useResize.d.ts.map +0 -1
- package/dist/types/src/useTrackProps.d.ts +0 -5
- package/dist/types/src/useTrackProps.d.ts.map +0 -1
- package/src/useAsyncEffect.test.tsx +0 -51
- package/src/useDebugReactDeps.ts +0 -27
- package/src/useTrackProps.ts +0 -40
package/README.md
CHANGED
|
@@ -1,35 +1,51 @@
|
|
|
1
|
-
//
|
|
1
|
+
// src/index.ts
|
|
2
|
+
import { useComposedRefs } from "@radix-ui/react-compose-refs";
|
|
3
|
+
import { useSize, useScroller } from "mini-virtual-list";
|
|
4
|
+
|
|
5
|
+
// src/useAsyncEffect.ts
|
|
2
6
|
import { useEffect } from "react";
|
|
3
|
-
|
|
4
|
-
var useAsyncEffect = (callback, destructor, deps) => {
|
|
5
|
-
const [effectDestructor, effectDeps] = typeof destructor === "function" ? [
|
|
6
|
-
destructor,
|
|
7
|
-
deps
|
|
8
|
-
] : [
|
|
9
|
-
void 0,
|
|
10
|
-
destructor
|
|
11
|
-
];
|
|
7
|
+
var useAsyncEffect = (cb, deps) => {
|
|
12
8
|
useEffect(() => {
|
|
13
|
-
|
|
14
|
-
let
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
9
|
+
const controller = new AbortController();
|
|
10
|
+
let cleanup;
|
|
11
|
+
const t = setTimeout(async () => {
|
|
12
|
+
if (!controller.signal.aborted) {
|
|
13
|
+
cleanup = await cb(controller);
|
|
14
|
+
}
|
|
15
|
+
});
|
|
19
16
|
return () => {
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
clearTimeout(t);
|
|
18
|
+
controller.abort();
|
|
19
|
+
cleanup?.();
|
|
22
20
|
};
|
|
23
|
-
},
|
|
21
|
+
}, deps ?? []);
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
// src/useAtomState.ts
|
|
25
|
+
import { Atom, useAtomSet, useAtomValue } from "@effect-atom/atom-react";
|
|
26
|
+
import { useMemo, useState } from "react";
|
|
27
|
+
var useAtomState = (initialValue) => {
|
|
28
|
+
const [atom] = useState(() => Atom.make(initialValue));
|
|
29
|
+
const value = useAtomValue(atom);
|
|
30
|
+
const set = useAtomSet(atom);
|
|
31
|
+
return useMemo(() => ({
|
|
32
|
+
atom,
|
|
33
|
+
value,
|
|
34
|
+
set
|
|
35
|
+
}), [
|
|
36
|
+
atom,
|
|
37
|
+
value,
|
|
38
|
+
set
|
|
39
|
+
]);
|
|
24
40
|
};
|
|
25
41
|
|
|
26
|
-
//
|
|
27
|
-
import { useEffect as useEffect2, useState } from "react";
|
|
42
|
+
// src/useAsyncState.ts
|
|
43
|
+
import { useEffect as useEffect2, useState as useState2 } from "react";
|
|
28
44
|
var useAsyncState = (cb, deps = []) => {
|
|
29
|
-
const [value, setValue] =
|
|
45
|
+
const [value, setValue] = useState2();
|
|
30
46
|
useEffect2(() => {
|
|
31
47
|
let disposed = false;
|
|
32
|
-
|
|
48
|
+
const t = setTimeout(async () => {
|
|
33
49
|
const data = await cb();
|
|
34
50
|
if (!disposed) {
|
|
35
51
|
setValue(data);
|
|
@@ -37,6 +53,7 @@ var useAsyncState = (cb, deps = []) => {
|
|
|
37
53
|
});
|
|
38
54
|
return () => {
|
|
39
55
|
disposed = true;
|
|
56
|
+
clearTimeout(t);
|
|
40
57
|
};
|
|
41
58
|
}, deps);
|
|
42
59
|
return [
|
|
@@ -45,50 +62,102 @@ var useAsyncState = (cb, deps = []) => {
|
|
|
45
62
|
];
|
|
46
63
|
};
|
|
47
64
|
|
|
48
|
-
//
|
|
49
|
-
import { useEffect as
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
65
|
+
// src/useControlledState.ts
|
|
66
|
+
import { useCallback as useCallback2, useEffect as useEffect4, useRef as useRef2, useState as useState4 } from "react";
|
|
67
|
+
|
|
68
|
+
// src/useDynamicRef.ts
|
|
69
|
+
import { useCallback, useEffect as useEffect3, useRef, useState as useState3 } from "react";
|
|
70
|
+
var useStateWithRef = (valueProp) => {
|
|
71
|
+
const [value, setValue] = useState3(valueProp);
|
|
72
|
+
const valueRef = useRef(valueProp);
|
|
73
|
+
const setter = useCallback((value2) => {
|
|
74
|
+
if (typeof value2 === "function") {
|
|
75
|
+
setValue((current) => {
|
|
76
|
+
valueRef.current = value2(current);
|
|
77
|
+
return valueRef.current;
|
|
78
|
+
});
|
|
79
|
+
} else {
|
|
80
|
+
valueRef.current = value2;
|
|
81
|
+
setValue(value2);
|
|
55
82
|
}
|
|
83
|
+
}, []);
|
|
84
|
+
return [
|
|
85
|
+
value,
|
|
86
|
+
setter,
|
|
87
|
+
valueRef
|
|
88
|
+
];
|
|
89
|
+
};
|
|
90
|
+
var useDynamicRef = (value) => {
|
|
91
|
+
const valueRef = useRef(value);
|
|
92
|
+
useEffect3(() => {
|
|
93
|
+
valueRef.current = value;
|
|
56
94
|
}, [
|
|
57
|
-
|
|
58
|
-
|
|
95
|
+
value
|
|
96
|
+
]);
|
|
97
|
+
return valueRef;
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
// src/useControlledState.ts
|
|
101
|
+
var useControlledState = (valueProp, onChange) => {
|
|
102
|
+
const [value, setControlledValue] = useState4(valueProp);
|
|
103
|
+
useEffect4(() => {
|
|
104
|
+
setControlledValue(valueProp);
|
|
105
|
+
}, [
|
|
106
|
+
valueProp
|
|
107
|
+
]);
|
|
108
|
+
const onChangeRef = useRef2(onChange);
|
|
109
|
+
const valueRef = useDynamicRef(valueProp);
|
|
110
|
+
const setValue = useCallback2((nextValue) => {
|
|
111
|
+
const value2 = isFunction(nextValue) ? nextValue(valueRef.current) : nextValue;
|
|
112
|
+
setControlledValue(value2);
|
|
113
|
+
onChangeRef.current?.(value2);
|
|
114
|
+
}, [
|
|
115
|
+
valueRef,
|
|
116
|
+
onChangeRef
|
|
59
117
|
]);
|
|
60
118
|
return [
|
|
61
119
|
value,
|
|
62
120
|
setValue
|
|
63
121
|
];
|
|
64
122
|
};
|
|
123
|
+
function isFunction(value) {
|
|
124
|
+
return typeof value === "function";
|
|
125
|
+
}
|
|
65
126
|
|
|
66
|
-
//
|
|
67
|
-
import { useEffect as
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
}
|
|
127
|
+
// src/useDebugDeps.ts
|
|
128
|
+
import { useEffect as useEffect5, useRef as useRef3 } from "react";
|
|
129
|
+
import { log } from "@dxos/log";
|
|
130
|
+
var useDebugDeps = (deps = [], label = "useDebugDeps", active = true) => {
|
|
131
|
+
const lastDeps = useRef3([]);
|
|
132
|
+
useEffect5(() => {
|
|
133
|
+
if (!active) {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
const diff = {};
|
|
75
137
|
for (let i = 0; i < Math.max(lastDeps.current.length ?? 0, deps.length ?? 0); i++) {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
138
|
+
if (lastDeps.current[i] !== deps[i] || i > lastDeps.current.length) {
|
|
139
|
+
diff[i] = {
|
|
140
|
+
previous: lastDeps.current[i],
|
|
141
|
+
current: deps[i]
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
if (Object.keys(diff).length > 0) {
|
|
146
|
+
log.warn(`Updated: ${label} [${lastDeps.current.length}/${deps.length}]`, diff);
|
|
80
147
|
}
|
|
81
|
-
console.groupEnd();
|
|
82
148
|
lastDeps.current = deps;
|
|
83
|
-
},
|
|
149
|
+
}, [
|
|
150
|
+
...deps,
|
|
151
|
+
active
|
|
152
|
+
]);
|
|
84
153
|
};
|
|
85
154
|
|
|
86
|
-
//
|
|
87
|
-
import { useEffect as
|
|
155
|
+
// src/useDefaultValue.ts
|
|
156
|
+
import { useEffect as useEffect6, useMemo as useMemo2, useState as useState5 } from "react";
|
|
88
157
|
var useDefaultValue = (reactiveValue, getDefaultValue) => {
|
|
89
|
-
const stableDefaultValue =
|
|
90
|
-
const [value, setValue] =
|
|
91
|
-
|
|
158
|
+
const stableDefaultValue = useMemo2(getDefaultValue, []);
|
|
159
|
+
const [value, setValue] = useState5(reactiveValue ?? stableDefaultValue);
|
|
160
|
+
useEffect6(() => {
|
|
92
161
|
setValue(reactiveValue ?? stableDefaultValue);
|
|
93
162
|
}, [
|
|
94
163
|
reactiveValue,
|
|
@@ -97,22 +166,20 @@ var useDefaultValue = (reactiveValue, getDefaultValue) => {
|
|
|
97
166
|
return value;
|
|
98
167
|
};
|
|
99
168
|
|
|
100
|
-
//
|
|
101
|
-
import
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
value
|
|
169
|
+
// src/useDefaults.ts
|
|
170
|
+
import defaultsDeep from "lodash.defaultsdeep";
|
|
171
|
+
import { useMemo as useMemo3 } from "react";
|
|
172
|
+
var useDefaults = (value, defaults) => {
|
|
173
|
+
return useMemo3(() => defaultsDeep({}, defaults, value), [
|
|
174
|
+
value,
|
|
175
|
+
defaults
|
|
108
176
|
]);
|
|
109
|
-
return ref;
|
|
110
177
|
};
|
|
111
178
|
|
|
112
|
-
//
|
|
113
|
-
import { useMemo as
|
|
179
|
+
// src/useFileDownload.ts
|
|
180
|
+
import { useMemo as useMemo4 } from "react";
|
|
114
181
|
var useFileDownload = () => {
|
|
115
|
-
return
|
|
182
|
+
return useMemo4(() => (data, filename) => {
|
|
116
183
|
const url = typeof data === "string" ? data : URL.createObjectURL(data);
|
|
117
184
|
const element = document.createElement("a");
|
|
118
185
|
element.setAttribute("href", url);
|
|
@@ -122,39 +189,62 @@ var useFileDownload = () => {
|
|
|
122
189
|
}, []);
|
|
123
190
|
};
|
|
124
191
|
|
|
125
|
-
//
|
|
126
|
-
import {
|
|
127
|
-
var useForwardedRef = (
|
|
128
|
-
const
|
|
192
|
+
// src/useForwardedRef.ts
|
|
193
|
+
import { useEffect as useEffect7, useMemo as useMemo5, useRef as useRef4 } from "react";
|
|
194
|
+
var useForwardedRef = (forwardedRef) => {
|
|
195
|
+
const localRef = useRef4(null);
|
|
129
196
|
useEffect7(() => {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
197
|
+
setRef(forwardedRef, localRef.current);
|
|
198
|
+
}, [
|
|
199
|
+
forwardedRef
|
|
200
|
+
]);
|
|
201
|
+
return localRef;
|
|
202
|
+
};
|
|
203
|
+
function setRef(ref, value) {
|
|
204
|
+
if (typeof ref === "function") {
|
|
205
|
+
return ref(value);
|
|
206
|
+
} else if (ref) {
|
|
207
|
+
ref.current = value;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
var mergeRefs = (refs) => {
|
|
211
|
+
return (value) => {
|
|
212
|
+
const cleanups = [];
|
|
213
|
+
for (const ref of refs) {
|
|
214
|
+
const cleanup = setRef(ref, value);
|
|
215
|
+
cleanups.push(typeof cleanup === "function" ? cleanup : () => setRef(ref, null));
|
|
137
216
|
}
|
|
138
|
-
|
|
139
|
-
|
|
217
|
+
return () => {
|
|
218
|
+
for (const cleanup of cleanups) {
|
|
219
|
+
cleanup();
|
|
220
|
+
}
|
|
221
|
+
};
|
|
222
|
+
};
|
|
223
|
+
};
|
|
224
|
+
var useMergeRefs = (refs) => {
|
|
225
|
+
return useMemo5(() => mergeRefs(refs), [
|
|
226
|
+
...refs
|
|
227
|
+
]);
|
|
140
228
|
};
|
|
141
229
|
|
|
142
|
-
//
|
|
230
|
+
// src/useId.ts
|
|
143
231
|
import alea from "alea";
|
|
144
|
-
import { useMemo as
|
|
232
|
+
import { useMemo as useMemo6 } from "react";
|
|
145
233
|
var Alea = alea;
|
|
146
234
|
var prng = new Alea("@dxos/react-hooks");
|
|
147
235
|
var randomString = (n = 4) => prng().toString(16).slice(2, n + 2);
|
|
148
|
-
var useId = (namespace, propsId, opts) =>
|
|
149
|
-
propsId
|
|
150
|
-
|
|
236
|
+
var useId = (namespace, propsId, opts) => {
|
|
237
|
+
return useMemo6(() => makeId(namespace, propsId, opts), [
|
|
238
|
+
propsId
|
|
239
|
+
]);
|
|
240
|
+
};
|
|
151
241
|
var makeId = (namespace, propsId, opts) => propsId ?? `${namespace}-${randomString(opts?.n ?? 4)}`;
|
|
152
242
|
|
|
153
|
-
//
|
|
154
|
-
import { useEffect as useEffect8, useRef as
|
|
243
|
+
// src/useIsFocused.ts
|
|
244
|
+
import { useEffect as useEffect8, useRef as useRef5, useState as useState6 } from "react";
|
|
155
245
|
var useIsFocused = (inputRef) => {
|
|
156
|
-
const [isFocused, setIsFocused] =
|
|
157
|
-
const isFocusedRef =
|
|
246
|
+
const [isFocused, setIsFocused] = useState6(void 0);
|
|
247
|
+
const isFocusedRef = useRef5(isFocused);
|
|
158
248
|
isFocusedRef.current = isFocused;
|
|
159
249
|
useEffect8(() => {
|
|
160
250
|
const input = inputRef.current;
|
|
@@ -179,8 +269,8 @@ var useIsFocused = (inputRef) => {
|
|
|
179
269
|
return isFocused;
|
|
180
270
|
};
|
|
181
271
|
|
|
182
|
-
//
|
|
183
|
-
import { useEffect as useEffect9, useState as
|
|
272
|
+
// src/useMediaQuery.ts
|
|
273
|
+
import { useEffect as useEffect9, useState as useState7 } from "react";
|
|
184
274
|
var breakpointMediaQueries = {
|
|
185
275
|
sm: "(min-width: 640px)",
|
|
186
276
|
md: "(min-width: 768px)",
|
|
@@ -189,7 +279,7 @@ var breakpointMediaQueries = {
|
|
|
189
279
|
"2xl": "(min-width: 1536px)"
|
|
190
280
|
};
|
|
191
281
|
var useMediaQuery = (query, options = {}) => {
|
|
192
|
-
const { ssr =
|
|
282
|
+
const { ssr = false, fallback } = options;
|
|
193
283
|
const queries = (Array.isArray(query) ? query : [
|
|
194
284
|
query
|
|
195
285
|
]).map((query2) => query2 in breakpointMediaQueries ? breakpointMediaQueries[query2] : query2);
|
|
@@ -197,7 +287,7 @@ var useMediaQuery = (query, options = {}) => {
|
|
|
197
287
|
fallback
|
|
198
288
|
];
|
|
199
289
|
fallbackValues = fallbackValues.filter((v) => v != null);
|
|
200
|
-
const [value, setValue] =
|
|
290
|
+
const [value, setValue] = useState7(() => {
|
|
201
291
|
return queries.map((query2, index) => ({
|
|
202
292
|
media: query2,
|
|
203
293
|
matches: ssr ? !!fallbackValues[index] : document.defaultView?.matchMedia(query2).matches
|
|
@@ -244,10 +334,10 @@ var useMediaQuery = (query, options = {}) => {
|
|
|
244
334
|
return value.map((item) => !!item.matches);
|
|
245
335
|
};
|
|
246
336
|
|
|
247
|
-
//
|
|
248
|
-
import { useMemo as
|
|
337
|
+
// src/useMulticastObservable.ts
|
|
338
|
+
import { useMemo as useMemo7, useSyncExternalStore } from "react";
|
|
249
339
|
var useMulticastObservable = (observable) => {
|
|
250
|
-
const subscribeFn =
|
|
340
|
+
const subscribeFn = useMemo7(() => (listener) => {
|
|
251
341
|
const subscription = observable.subscribe(listener);
|
|
252
342
|
return () => subscription.unsubscribe();
|
|
253
343
|
}, [
|
|
@@ -256,29 +346,29 @@ var useMulticastObservable = (observable) => {
|
|
|
256
346
|
return useSyncExternalStore(subscribeFn, () => observable.get());
|
|
257
347
|
};
|
|
258
348
|
|
|
259
|
-
//
|
|
260
|
-
import { useState as
|
|
349
|
+
// src/useRefCallback.ts
|
|
350
|
+
import { useState as useState8 } from "react";
|
|
261
351
|
var useRefCallback = () => {
|
|
262
|
-
const [value, setValue] =
|
|
352
|
+
const [value, setValue] = useState8(null);
|
|
263
353
|
return {
|
|
264
354
|
refCallback: (value2) => setValue(value2),
|
|
265
355
|
value
|
|
266
356
|
};
|
|
267
357
|
};
|
|
268
358
|
|
|
269
|
-
//
|
|
270
|
-
import { useLayoutEffect, useMemo as
|
|
271
|
-
var
|
|
272
|
-
const debouncedHandler =
|
|
359
|
+
// src/useViewportResize.ts
|
|
360
|
+
import { useLayoutEffect, useMemo as useMemo8 } from "react";
|
|
361
|
+
var useViewportResize = (cb, deps = [], delay = 800) => {
|
|
362
|
+
const debouncedHandler = useMemo8(() => {
|
|
273
363
|
let timeout;
|
|
274
364
|
return (event) => {
|
|
275
365
|
clearTimeout(timeout);
|
|
276
366
|
timeout = setTimeout(() => {
|
|
277
|
-
|
|
367
|
+
cb(event);
|
|
278
368
|
}, delay);
|
|
279
369
|
};
|
|
280
370
|
}, [
|
|
281
|
-
|
|
371
|
+
cb,
|
|
282
372
|
delay
|
|
283
373
|
]);
|
|
284
374
|
return useLayoutEffect(() => {
|
|
@@ -291,49 +381,61 @@ var useResize = (handler, deps = [], delay = 800) => {
|
|
|
291
381
|
]);
|
|
292
382
|
};
|
|
293
383
|
|
|
294
|
-
//
|
|
295
|
-
import {
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
var useTrackProps = (props, componentName = "Component", active = true) => {
|
|
299
|
-
const prevProps = useRef5(props);
|
|
384
|
+
// src/useTimeout.ts
|
|
385
|
+
import { useEffect as useEffect10, useRef as useRef6 } from "react";
|
|
386
|
+
var useTimeout = (callback, delay = 0, deps = []) => {
|
|
387
|
+
const callbackRef = useRef6(callback);
|
|
300
388
|
useEffect10(() => {
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
key,
|
|
309
|
-
{
|
|
310
|
-
from: prevProps.current[key],
|
|
311
|
-
to: props[key]
|
|
312
|
-
}
|
|
313
|
-
]))
|
|
314
|
-
}, {
|
|
315
|
-
F: __dxlog_file,
|
|
316
|
-
L: 22,
|
|
317
|
-
S: void 0,
|
|
318
|
-
C: (f, a) => f(...a)
|
|
319
|
-
});
|
|
320
|
-
}
|
|
389
|
+
callbackRef.current = callback;
|
|
390
|
+
}, [
|
|
391
|
+
callback
|
|
392
|
+
]);
|
|
393
|
+
useEffect10(() => {
|
|
394
|
+
if (delay == null) {
|
|
395
|
+
return;
|
|
321
396
|
}
|
|
322
|
-
|
|
323
|
-
|
|
397
|
+
const t = setTimeout(() => callbackRef.current?.(), delay);
|
|
398
|
+
return () => clearTimeout(t);
|
|
399
|
+
}, [
|
|
400
|
+
delay,
|
|
401
|
+
...deps
|
|
402
|
+
]);
|
|
403
|
+
};
|
|
404
|
+
var useInterval = (callback, delay = 0, deps = []) => {
|
|
405
|
+
const callbackRef = useRef6(callback);
|
|
406
|
+
useEffect10(() => {
|
|
407
|
+
callbackRef.current = callback;
|
|
408
|
+
}, [
|
|
409
|
+
callback
|
|
410
|
+
]);
|
|
411
|
+
useEffect10(() => {
|
|
412
|
+
if (delay == null) {
|
|
413
|
+
return;
|
|
414
|
+
}
|
|
415
|
+
const i = setInterval(async () => {
|
|
416
|
+
const result = await callbackRef.current?.();
|
|
417
|
+
if (result === false) {
|
|
418
|
+
clearInterval(i);
|
|
419
|
+
}
|
|
420
|
+
}, delay);
|
|
421
|
+
return () => clearInterval(i);
|
|
422
|
+
}, [
|
|
423
|
+
delay,
|
|
424
|
+
...deps
|
|
425
|
+
]);
|
|
324
426
|
};
|
|
325
427
|
|
|
326
|
-
//
|
|
327
|
-
import {
|
|
328
|
-
var
|
|
428
|
+
// src/useTransitions.ts
|
|
429
|
+
import { useEffect as useEffect11, useRef as useRef7, useState as useState9 } from "react";
|
|
430
|
+
var isFunction2 = (functionToCheck) => {
|
|
329
431
|
return functionToCheck instanceof Function;
|
|
330
432
|
};
|
|
331
433
|
var useDidTransition = (currentValue, fromValue, toValue) => {
|
|
332
|
-
const [hasTransitioned, setHasTransitioned] =
|
|
333
|
-
const previousValue =
|
|
434
|
+
const [hasTransitioned, setHasTransitioned] = useState9(false);
|
|
435
|
+
const previousValue = useRef7(currentValue);
|
|
334
436
|
useEffect11(() => {
|
|
335
|
-
const toValueValid =
|
|
336
|
-
const fromValueValid =
|
|
437
|
+
const toValueValid = isFunction2(toValue) ? toValue(currentValue) : toValue === currentValue;
|
|
438
|
+
const fromValueValid = isFunction2(fromValue) ? fromValue(previousValue.current) : fromValue === previousValue.current;
|
|
337
439
|
if (fromValueValid && toValueValid && !hasTransitioned) {
|
|
338
440
|
setHasTransitioned(true);
|
|
339
441
|
} else if ((!fromValueValid || !toValueValid) && hasTransitioned) {
|
|
@@ -349,7 +451,7 @@ var useDidTransition = (currentValue, fromValue, toValue) => {
|
|
|
349
451
|
return hasTransitioned;
|
|
350
452
|
};
|
|
351
453
|
var useOnTransition = (currentValue, fromValue, toValue, callback) => {
|
|
352
|
-
const dirty =
|
|
454
|
+
const dirty = useRef7(false);
|
|
353
455
|
const hasTransitioned = useDidTransition(currentValue, fromValue, toValue);
|
|
354
456
|
useEffect11(() => {
|
|
355
457
|
dirty.current = false;
|
|
@@ -370,23 +472,33 @@ var useOnTransition = (currentValue, fromValue, toValue, callback) => {
|
|
|
370
472
|
};
|
|
371
473
|
export {
|
|
372
474
|
makeId,
|
|
475
|
+
mergeRefs,
|
|
373
476
|
randomString,
|
|
477
|
+
setRef,
|
|
374
478
|
useAsyncEffect,
|
|
375
479
|
useAsyncState,
|
|
480
|
+
useAtomState,
|
|
481
|
+
useComposedRefs,
|
|
376
482
|
useControlledState,
|
|
377
|
-
|
|
483
|
+
useDebugDeps,
|
|
378
484
|
useDefaultValue,
|
|
485
|
+
useDefaults,
|
|
379
486
|
useDidTransition,
|
|
380
487
|
useDynamicRef,
|
|
381
488
|
useFileDownload,
|
|
382
489
|
useForwardedRef,
|
|
383
490
|
useId,
|
|
491
|
+
useInterval,
|
|
384
492
|
useIsFocused,
|
|
385
493
|
useMediaQuery,
|
|
494
|
+
useMergeRefs,
|
|
386
495
|
useMulticastObservable,
|
|
387
496
|
useOnTransition,
|
|
388
497
|
useRefCallback,
|
|
389
|
-
|
|
390
|
-
|
|
498
|
+
useScroller,
|
|
499
|
+
useSize,
|
|
500
|
+
useStateWithRef,
|
|
501
|
+
useTimeout,
|
|
502
|
+
useViewportResize
|
|
391
503
|
};
|
|
392
504
|
//# sourceMappingURL=index.mjs.map
|