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