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