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