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