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