@dxos/react-hooks 0.8.4-main.84f28bd → 0.8.4-main.8baae0fced
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 +237 -149
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +237 -149
- 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/useViewportResize.ts +45 -0
- 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/useResize.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,44 +350,59 @@ 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 { handler: debouncedHandler, cancel } = useMemo8(() => {
|
|
292
366
|
let timeout;
|
|
293
|
-
return
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
367
|
+
return {
|
|
368
|
+
handler: (event) => {
|
|
369
|
+
if (timeout !== void 0) {
|
|
370
|
+
clearTimeout(timeout);
|
|
371
|
+
}
|
|
372
|
+
timeout = setTimeout(() => {
|
|
373
|
+
timeout = void 0;
|
|
374
|
+
cb(event);
|
|
375
|
+
}, delay);
|
|
376
|
+
},
|
|
377
|
+
cancel: () => {
|
|
378
|
+
if (timeout !== void 0) {
|
|
379
|
+
clearTimeout(timeout);
|
|
380
|
+
timeout = void 0;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
298
383
|
};
|
|
299
384
|
}, [
|
|
300
|
-
|
|
385
|
+
cb,
|
|
301
386
|
delay
|
|
302
387
|
]);
|
|
303
388
|
return useLayoutEffect(() => {
|
|
304
389
|
window.visualViewport?.addEventListener("resize", debouncedHandler);
|
|
305
390
|
debouncedHandler();
|
|
306
|
-
return () =>
|
|
391
|
+
return () => {
|
|
392
|
+
window.visualViewport?.removeEventListener("resize", debouncedHandler);
|
|
393
|
+
cancel();
|
|
394
|
+
};
|
|
307
395
|
}, [
|
|
308
396
|
debouncedHandler,
|
|
397
|
+
cancel,
|
|
309
398
|
...deps
|
|
310
399
|
]);
|
|
311
400
|
};
|
|
312
401
|
|
|
313
402
|
// src/useTimeout.ts
|
|
314
|
-
import { useEffect as useEffect10, useRef as
|
|
403
|
+
import { useEffect as useEffect10, useRef as useRef6 } from "react";
|
|
315
404
|
var useTimeout = (callback, delay = 0, deps = []) => {
|
|
316
|
-
const callbackRef =
|
|
405
|
+
const callbackRef = useRef6(callback);
|
|
317
406
|
useEffect10(() => {
|
|
318
407
|
callbackRef.current = callback;
|
|
319
408
|
}, [
|
|
@@ -323,57 +412,48 @@ var useTimeout = (callback, delay = 0, deps = []) => {
|
|
|
323
412
|
if (delay == null) {
|
|
324
413
|
return;
|
|
325
414
|
}
|
|
326
|
-
const
|
|
327
|
-
return () => clearTimeout(
|
|
415
|
+
const t = setTimeout(() => callbackRef.current?.(), delay);
|
|
416
|
+
return () => clearTimeout(t);
|
|
328
417
|
}, [
|
|
329
418
|
delay,
|
|
330
419
|
...deps
|
|
331
420
|
]);
|
|
332
421
|
};
|
|
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
|
-
}
|
|
422
|
+
var useInterval = (callback, delay = 0, deps = []) => {
|
|
423
|
+
const callbackRef = useRef6(callback);
|
|
424
|
+
useEffect10(() => {
|
|
425
|
+
callbackRef.current = callback;
|
|
426
|
+
}, [
|
|
427
|
+
callback
|
|
428
|
+
]);
|
|
429
|
+
useEffect10(() => {
|
|
430
|
+
if (delay == null) {
|
|
431
|
+
return;
|
|
361
432
|
}
|
|
362
|
-
|
|
363
|
-
|
|
433
|
+
const i = setInterval(async () => {
|
|
434
|
+
const result = await callbackRef.current?.();
|
|
435
|
+
if (result === false) {
|
|
436
|
+
clearInterval(i);
|
|
437
|
+
}
|
|
438
|
+
}, delay);
|
|
439
|
+
return () => clearInterval(i);
|
|
440
|
+
}, [
|
|
441
|
+
delay,
|
|
442
|
+
...deps
|
|
443
|
+
]);
|
|
364
444
|
};
|
|
365
445
|
|
|
366
446
|
// src/useTransitions.ts
|
|
367
|
-
import {
|
|
368
|
-
var
|
|
447
|
+
import { useEffect as useEffect11, useRef as useRef7, useState as useState9 } from "react";
|
|
448
|
+
var isFunction2 = (functionToCheck) => {
|
|
369
449
|
return functionToCheck instanceof Function;
|
|
370
450
|
};
|
|
371
451
|
var useDidTransition = (currentValue, fromValue, toValue) => {
|
|
372
|
-
const [hasTransitioned, setHasTransitioned] =
|
|
452
|
+
const [hasTransitioned, setHasTransitioned] = useState9(false);
|
|
373
453
|
const previousValue = useRef7(currentValue);
|
|
374
|
-
|
|
375
|
-
const toValueValid =
|
|
376
|
-
const fromValueValid =
|
|
454
|
+
useEffect11(() => {
|
|
455
|
+
const toValueValid = isFunction2(toValue) ? toValue(currentValue) : toValue === currentValue;
|
|
456
|
+
const fromValueValid = isFunction2(fromValue) ? fromValue(previousValue.current) : fromValue === previousValue.current;
|
|
377
457
|
if (fromValueValid && toValueValid && !hasTransitioned) {
|
|
378
458
|
setHasTransitioned(true);
|
|
379
459
|
} else if ((!fromValueValid || !toValueValid) && hasTransitioned) {
|
|
@@ -391,13 +471,13 @@ var useDidTransition = (currentValue, fromValue, toValue) => {
|
|
|
391
471
|
var useOnTransition = (currentValue, fromValue, toValue, callback) => {
|
|
392
472
|
const dirty = useRef7(false);
|
|
393
473
|
const hasTransitioned = useDidTransition(currentValue, fromValue, toValue);
|
|
394
|
-
|
|
474
|
+
useEffect11(() => {
|
|
395
475
|
dirty.current = false;
|
|
396
476
|
}, [
|
|
397
477
|
currentValue,
|
|
398
478
|
dirty
|
|
399
479
|
]);
|
|
400
|
-
|
|
480
|
+
useEffect11(() => {
|
|
401
481
|
if (hasTransitioned && !dirty.current) {
|
|
402
482
|
callback();
|
|
403
483
|
dirty.current = true;
|
|
@@ -410,11 +490,15 @@ var useOnTransition = (currentValue, fromValue, toValue, callback) => {
|
|
|
410
490
|
};
|
|
411
491
|
export {
|
|
412
492
|
makeId,
|
|
493
|
+
mergeRefs,
|
|
413
494
|
randomString,
|
|
495
|
+
setRef,
|
|
414
496
|
useAsyncEffect,
|
|
415
497
|
useAsyncState,
|
|
498
|
+
useAtomState,
|
|
499
|
+
useComposedRefs,
|
|
416
500
|
useControlledState,
|
|
417
|
-
|
|
501
|
+
useDebugDeps,
|
|
418
502
|
useDefaultValue,
|
|
419
503
|
useDefaults,
|
|
420
504
|
useDidTransition,
|
|
@@ -422,13 +506,17 @@ export {
|
|
|
422
506
|
useFileDownload,
|
|
423
507
|
useForwardedRef,
|
|
424
508
|
useId,
|
|
509
|
+
useInterval,
|
|
425
510
|
useIsFocused,
|
|
426
511
|
useMediaQuery,
|
|
512
|
+
useMergeRefs,
|
|
427
513
|
useMulticastObservable,
|
|
428
514
|
useOnTransition,
|
|
429
515
|
useRefCallback,
|
|
430
|
-
|
|
516
|
+
useScroller,
|
|
517
|
+
useSize,
|
|
518
|
+
useStateWithRef,
|
|
431
519
|
useTimeout,
|
|
432
|
-
|
|
520
|
+
useViewportResize
|
|
433
521
|
};
|
|
434
522
|
//# sourceMappingURL=index.mjs.map
|