@dxos/react-hooks 0.8.4-main.b97322e → 0.8.4-main.bc2380dfbc
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 +217 -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 +217 -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 +20 -15
- 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,102 @@ 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 __dxlog_file = "/__w/dxos/dxos/packages/ui/react-primitives/react-hooks/src/useDebugDeps.ts";
|
|
133
|
+
var useDebugDeps = (deps = [], label = "useDebugDeps", active = true) => {
|
|
134
|
+
const lastDeps = useRef3([]);
|
|
135
|
+
useEffect5(() => {
|
|
136
|
+
if (!active) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
const diff = {};
|
|
84
140
|
for (let i = 0; i < Math.max(lastDeps.current.length ?? 0, deps.length ?? 0); i++) {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
141
|
+
if (lastDeps.current[i] !== deps[i] || i > lastDeps.current.length) {
|
|
142
|
+
diff[i] = {
|
|
143
|
+
previous: lastDeps.current[i],
|
|
144
|
+
current: deps[i]
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
if (Object.keys(diff).length > 0) {
|
|
149
|
+
log.warn(`Updated: ${label} [${lastDeps.current.length}/${deps.length}]`, diff, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 24, S: void 0 });
|
|
89
150
|
}
|
|
90
|
-
console.groupEnd();
|
|
91
151
|
lastDeps.current = deps;
|
|
92
|
-
},
|
|
152
|
+
}, [
|
|
153
|
+
...deps,
|
|
154
|
+
active
|
|
155
|
+
]);
|
|
93
156
|
};
|
|
94
157
|
|
|
95
158
|
// src/useDefaultValue.ts
|
|
96
|
-
import { useEffect as
|
|
159
|
+
import { useEffect as useEffect6, useMemo as useMemo2, useState as useState5 } from "react";
|
|
97
160
|
var useDefaultValue = (reactiveValue, getDefaultValue) => {
|
|
98
|
-
const stableDefaultValue =
|
|
99
|
-
const [value, setValue] =
|
|
100
|
-
|
|
161
|
+
const stableDefaultValue = useMemo2(getDefaultValue, []);
|
|
162
|
+
const [value, setValue] = useState5(reactiveValue ?? stableDefaultValue);
|
|
163
|
+
useEffect6(() => {
|
|
101
164
|
setValue(reactiveValue ?? stableDefaultValue);
|
|
102
165
|
}, [
|
|
103
166
|
reactiveValue,
|
|
@@ -108,30 +171,18 @@ var useDefaultValue = (reactiveValue, getDefaultValue) => {
|
|
|
108
171
|
|
|
109
172
|
// src/useDefaults.ts
|
|
110
173
|
import defaultsDeep from "lodash.defaultsdeep";
|
|
111
|
-
import { useMemo as
|
|
174
|
+
import { useMemo as useMemo3 } from "react";
|
|
112
175
|
var useDefaults = (value, defaults) => {
|
|
113
|
-
return
|
|
176
|
+
return useMemo3(() => defaultsDeep({}, defaults, value), [
|
|
114
177
|
value,
|
|
115
178
|
defaults
|
|
116
179
|
]);
|
|
117
180
|
};
|
|
118
181
|
|
|
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
182
|
// src/useFileDownload.ts
|
|
132
|
-
import { useMemo as
|
|
183
|
+
import { useMemo as useMemo4 } from "react";
|
|
133
184
|
var useFileDownload = () => {
|
|
134
|
-
return
|
|
185
|
+
return useMemo4(() => (data, filename) => {
|
|
135
186
|
const url = typeof data === "string" ? data : URL.createObjectURL(data);
|
|
136
187
|
const element = document.createElement("a");
|
|
137
188
|
element.setAttribute("href", url);
|
|
@@ -142,38 +193,61 @@ var useFileDownload = () => {
|
|
|
142
193
|
};
|
|
143
194
|
|
|
144
195
|
// src/useForwardedRef.ts
|
|
145
|
-
import {
|
|
146
|
-
var useForwardedRef = (
|
|
147
|
-
const
|
|
196
|
+
import { useEffect as useEffect7, useMemo as useMemo5, useRef as useRef4 } from "react";
|
|
197
|
+
var useForwardedRef = (forwardedRef) => {
|
|
198
|
+
const localRef = useRef4(null);
|
|
148
199
|
useEffect7(() => {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
200
|
+
setRef(forwardedRef, localRef.current);
|
|
201
|
+
}, [
|
|
202
|
+
forwardedRef
|
|
203
|
+
]);
|
|
204
|
+
return localRef;
|
|
205
|
+
};
|
|
206
|
+
function setRef(ref, value) {
|
|
207
|
+
if (typeof ref === "function") {
|
|
208
|
+
return ref(value);
|
|
209
|
+
} else if (ref) {
|
|
210
|
+
ref.current = value;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
var mergeRefs = (refs) => {
|
|
214
|
+
return (value) => {
|
|
215
|
+
const cleanups = [];
|
|
216
|
+
for (const ref of refs) {
|
|
217
|
+
const cleanup = setRef(ref, value);
|
|
218
|
+
cleanups.push(typeof cleanup === "function" ? cleanup : () => setRef(ref, null));
|
|
156
219
|
}
|
|
157
|
-
|
|
158
|
-
|
|
220
|
+
return () => {
|
|
221
|
+
for (const cleanup of cleanups) {
|
|
222
|
+
cleanup();
|
|
223
|
+
}
|
|
224
|
+
};
|
|
225
|
+
};
|
|
226
|
+
};
|
|
227
|
+
var useMergeRefs = (refs) => {
|
|
228
|
+
return useMemo5(() => mergeRefs(refs), [
|
|
229
|
+
...refs
|
|
230
|
+
]);
|
|
159
231
|
};
|
|
160
232
|
|
|
161
233
|
// src/useId.ts
|
|
162
234
|
import alea from "alea";
|
|
163
|
-
import { useMemo as
|
|
235
|
+
import { useMemo as useMemo6 } from "react";
|
|
164
236
|
var Alea = alea;
|
|
165
237
|
var prng = new Alea("@dxos/react-hooks");
|
|
166
238
|
var randomString = (n = 4) => prng().toString(16).slice(2, n + 2);
|
|
167
|
-
var useId = (namespace, propsId, opts) =>
|
|
168
|
-
propsId
|
|
169
|
-
|
|
239
|
+
var useId = (namespace, propsId, opts) => {
|
|
240
|
+
return useMemo6(() => makeId(namespace, propsId, opts), [
|
|
241
|
+
propsId
|
|
242
|
+
]);
|
|
243
|
+
};
|
|
170
244
|
var makeId = (namespace, propsId, opts) => propsId ?? `${namespace}-${randomString(opts?.n ?? 4)}`;
|
|
171
245
|
|
|
172
246
|
// src/useIsFocused.ts
|
|
173
|
-
import { useEffect as useEffect8, useRef as
|
|
247
|
+
import { useEffect as useEffect8, useRef as useRef5, useState as useState6 } from "react";
|
|
174
248
|
var useIsFocused = (inputRef) => {
|
|
175
|
-
const [isFocused, setIsFocused] =
|
|
176
|
-
const isFocusedRef =
|
|
249
|
+
const [isFocused, setIsFocused] = useState6(void 0);
|
|
250
|
+
const isFocusedRef = useRef5(isFocused);
|
|
177
251
|
isFocusedRef.current = isFocused;
|
|
178
252
|
useEffect8(() => {
|
|
179
253
|
const input = inputRef.current;
|
|
@@ -199,7 +273,7 @@ var useIsFocused = (inputRef) => {
|
|
|
199
273
|
};
|
|
200
274
|
|
|
201
275
|
// src/useMediaQuery.ts
|
|
202
|
-
import { useEffect as useEffect9, useState as
|
|
276
|
+
import { useEffect as useEffect9, useState as useState7 } from "react";
|
|
203
277
|
var breakpointMediaQueries = {
|
|
204
278
|
sm: "(min-width: 640px)",
|
|
205
279
|
md: "(min-width: 768px)",
|
|
@@ -208,7 +282,7 @@ var breakpointMediaQueries = {
|
|
|
208
282
|
"2xl": "(min-width: 1536px)"
|
|
209
283
|
};
|
|
210
284
|
var useMediaQuery = (query, options = {}) => {
|
|
211
|
-
const { ssr =
|
|
285
|
+
const { ssr = false, fallback } = options;
|
|
212
286
|
const queries = (Array.isArray(query) ? query : [
|
|
213
287
|
query
|
|
214
288
|
]).map((query2) => query2 in breakpointMediaQueries ? breakpointMediaQueries[query2] : query2);
|
|
@@ -216,7 +290,7 @@ var useMediaQuery = (query, options = {}) => {
|
|
|
216
290
|
fallback
|
|
217
291
|
];
|
|
218
292
|
fallbackValues = fallbackValues.filter((v) => v != null);
|
|
219
|
-
const [value, setValue] =
|
|
293
|
+
const [value, setValue] = useState7(() => {
|
|
220
294
|
return queries.map((query2, index) => ({
|
|
221
295
|
media: query2,
|
|
222
296
|
matches: ssr ? !!fallbackValues[index] : document.defaultView?.matchMedia(query2).matches
|
|
@@ -264,9 +338,9 @@ var useMediaQuery = (query, options = {}) => {
|
|
|
264
338
|
};
|
|
265
339
|
|
|
266
340
|
// src/useMulticastObservable.ts
|
|
267
|
-
import { useMemo as
|
|
341
|
+
import { useMemo as useMemo7, useSyncExternalStore } from "react";
|
|
268
342
|
var useMulticastObservable = (observable) => {
|
|
269
|
-
const subscribeFn =
|
|
343
|
+
const subscribeFn = useMemo7(() => (listener) => {
|
|
270
344
|
const subscription = observable.subscribe(listener);
|
|
271
345
|
return () => subscription.unsubscribe();
|
|
272
346
|
}, [
|
|
@@ -276,28 +350,28 @@ var useMulticastObservable = (observable) => {
|
|
|
276
350
|
};
|
|
277
351
|
|
|
278
352
|
// src/useRefCallback.ts
|
|
279
|
-
import { useState as
|
|
353
|
+
import { useState as useState8 } from "react";
|
|
280
354
|
var useRefCallback = () => {
|
|
281
|
-
const [value, setValue] =
|
|
355
|
+
const [value, setValue] = useState8(null);
|
|
282
356
|
return {
|
|
283
357
|
refCallback: (value2) => setValue(value2),
|
|
284
358
|
value
|
|
285
359
|
};
|
|
286
360
|
};
|
|
287
361
|
|
|
288
|
-
// src/
|
|
289
|
-
import { useLayoutEffect, useMemo as
|
|
290
|
-
var
|
|
291
|
-
const debouncedHandler =
|
|
362
|
+
// src/useViewportResize.ts
|
|
363
|
+
import { useLayoutEffect, useMemo as useMemo8 } from "react";
|
|
364
|
+
var useViewportResize = (cb, deps = [], delay = 800) => {
|
|
365
|
+
const debouncedHandler = useMemo8(() => {
|
|
292
366
|
let timeout;
|
|
293
367
|
return (event) => {
|
|
294
368
|
clearTimeout(timeout);
|
|
295
369
|
timeout = setTimeout(() => {
|
|
296
|
-
|
|
370
|
+
cb(event);
|
|
297
371
|
}, delay);
|
|
298
372
|
};
|
|
299
373
|
}, [
|
|
300
|
-
|
|
374
|
+
cb,
|
|
301
375
|
delay
|
|
302
376
|
]);
|
|
303
377
|
return useLayoutEffect(() => {
|
|
@@ -311,9 +385,9 @@ var useResize = (handler, deps = [], delay = 800) => {
|
|
|
311
385
|
};
|
|
312
386
|
|
|
313
387
|
// src/useTimeout.ts
|
|
314
|
-
import { useEffect as useEffect10, useRef as
|
|
388
|
+
import { useEffect as useEffect10, useRef as useRef6 } from "react";
|
|
315
389
|
var useTimeout = (callback, delay = 0, deps = []) => {
|
|
316
|
-
const callbackRef =
|
|
390
|
+
const callbackRef = useRef6(callback);
|
|
317
391
|
useEffect10(() => {
|
|
318
392
|
callbackRef.current = callback;
|
|
319
393
|
}, [
|
|
@@ -323,57 +397,48 @@ var useTimeout = (callback, delay = 0, deps = []) => {
|
|
|
323
397
|
if (delay == null) {
|
|
324
398
|
return;
|
|
325
399
|
}
|
|
326
|
-
const
|
|
327
|
-
return () => clearTimeout(
|
|
400
|
+
const t = setTimeout(() => callbackRef.current?.(), delay);
|
|
401
|
+
return () => clearTimeout(t);
|
|
328
402
|
}, [
|
|
329
403
|
delay,
|
|
330
404
|
...deps
|
|
331
405
|
]);
|
|
332
406
|
};
|
|
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
|
-
}
|
|
407
|
+
var useInterval = (callback, delay = 0, deps = []) => {
|
|
408
|
+
const callbackRef = useRef6(callback);
|
|
409
|
+
useEffect10(() => {
|
|
410
|
+
callbackRef.current = callback;
|
|
411
|
+
}, [
|
|
412
|
+
callback
|
|
413
|
+
]);
|
|
414
|
+
useEffect10(() => {
|
|
415
|
+
if (delay == null) {
|
|
416
|
+
return;
|
|
361
417
|
}
|
|
362
|
-
|
|
363
|
-
|
|
418
|
+
const i = setInterval(async () => {
|
|
419
|
+
const result = await callbackRef.current?.();
|
|
420
|
+
if (result === false) {
|
|
421
|
+
clearInterval(i);
|
|
422
|
+
}
|
|
423
|
+
}, delay);
|
|
424
|
+
return () => clearInterval(i);
|
|
425
|
+
}, [
|
|
426
|
+
delay,
|
|
427
|
+
...deps
|
|
428
|
+
]);
|
|
364
429
|
};
|
|
365
430
|
|
|
366
431
|
// src/useTransitions.ts
|
|
367
|
-
import {
|
|
368
|
-
var
|
|
432
|
+
import { useEffect as useEffect11, useRef as useRef7, useState as useState9 } from "react";
|
|
433
|
+
var isFunction2 = (functionToCheck) => {
|
|
369
434
|
return functionToCheck instanceof Function;
|
|
370
435
|
};
|
|
371
436
|
var useDidTransition = (currentValue, fromValue, toValue) => {
|
|
372
|
-
const [hasTransitioned, setHasTransitioned] =
|
|
437
|
+
const [hasTransitioned, setHasTransitioned] = useState9(false);
|
|
373
438
|
const previousValue = useRef7(currentValue);
|
|
374
|
-
|
|
375
|
-
const toValueValid =
|
|
376
|
-
const fromValueValid =
|
|
439
|
+
useEffect11(() => {
|
|
440
|
+
const toValueValid = isFunction2(toValue) ? toValue(currentValue) : toValue === currentValue;
|
|
441
|
+
const fromValueValid = isFunction2(fromValue) ? fromValue(previousValue.current) : fromValue === previousValue.current;
|
|
377
442
|
if (fromValueValid && toValueValid && !hasTransitioned) {
|
|
378
443
|
setHasTransitioned(true);
|
|
379
444
|
} else if ((!fromValueValid || !toValueValid) && hasTransitioned) {
|
|
@@ -391,13 +456,13 @@ var useDidTransition = (currentValue, fromValue, toValue) => {
|
|
|
391
456
|
var useOnTransition = (currentValue, fromValue, toValue, callback) => {
|
|
392
457
|
const dirty = useRef7(false);
|
|
393
458
|
const hasTransitioned = useDidTransition(currentValue, fromValue, toValue);
|
|
394
|
-
|
|
459
|
+
useEffect11(() => {
|
|
395
460
|
dirty.current = false;
|
|
396
461
|
}, [
|
|
397
462
|
currentValue,
|
|
398
463
|
dirty
|
|
399
464
|
]);
|
|
400
|
-
|
|
465
|
+
useEffect11(() => {
|
|
401
466
|
if (hasTransitioned && !dirty.current) {
|
|
402
467
|
callback();
|
|
403
468
|
dirty.current = true;
|
|
@@ -410,11 +475,15 @@ var useOnTransition = (currentValue, fromValue, toValue, callback) => {
|
|
|
410
475
|
};
|
|
411
476
|
export {
|
|
412
477
|
makeId,
|
|
478
|
+
mergeRefs,
|
|
413
479
|
randomString,
|
|
480
|
+
setRef,
|
|
414
481
|
useAsyncEffect,
|
|
415
482
|
useAsyncState,
|
|
483
|
+
useAtomState,
|
|
484
|
+
useComposedRefs,
|
|
416
485
|
useControlledState,
|
|
417
|
-
|
|
486
|
+
useDebugDeps,
|
|
418
487
|
useDefaultValue,
|
|
419
488
|
useDefaults,
|
|
420
489
|
useDidTransition,
|
|
@@ -422,13 +491,17 @@ export {
|
|
|
422
491
|
useFileDownload,
|
|
423
492
|
useForwardedRef,
|
|
424
493
|
useId,
|
|
494
|
+
useInterval,
|
|
425
495
|
useIsFocused,
|
|
426
496
|
useMediaQuery,
|
|
497
|
+
useMergeRefs,
|
|
427
498
|
useMulticastObservable,
|
|
428
499
|
useOnTransition,
|
|
429
500
|
useRefCallback,
|
|
430
|
-
|
|
501
|
+
useScroller,
|
|
502
|
+
useSize,
|
|
503
|
+
useStateWithRef,
|
|
431
504
|
useTimeout,
|
|
432
|
-
|
|
505
|
+
useViewportResize
|
|
433
506
|
};
|
|
434
507
|
//# sourceMappingURL=index.mjs.map
|