@dxos/react-hooks 0.8.3 → 0.8.4-main.1c7ec43d41
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 +253 -141
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +253 -141
- 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 +7 -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 +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.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 +21 -14
- package/src/index.ts +8 -3
- package/src/useAsyncEffect.ts +19 -49
- package/src/useAsyncState.ts +2 -1
- package/src/useAtomState.ts +23 -0
- 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 +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 +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,53 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
2
|
|
|
3
|
-
//
|
|
3
|
+
// src/index.ts
|
|
4
|
+
import { useComposedRefs } from "@radix-ui/react-compose-refs";
|
|
5
|
+
import { useSize, useScroller } from "mini-virtual-list";
|
|
6
|
+
|
|
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
|
-
//
|
|
29
|
-
import { useEffect as useEffect2, useState } from "react";
|
|
44
|
+
// src/useAsyncState.ts
|
|
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 () => {
|
|
35
51
|
const data = await cb();
|
|
36
52
|
if (!disposed) {
|
|
37
53
|
setValue(data);
|
|
@@ -39,6 +55,7 @@ var useAsyncState = (cb, deps = []) => {
|
|
|
39
55
|
});
|
|
40
56
|
return () => {
|
|
41
57
|
disposed = true;
|
|
58
|
+
clearTimeout(t);
|
|
42
59
|
};
|
|
43
60
|
}, deps);
|
|
44
61
|
return [
|
|
@@ -47,50 +64,102 @@ var useAsyncState = (cb, deps = []) => {
|
|
|
47
64
|
];
|
|
48
65
|
};
|
|
49
66
|
|
|
50
|
-
//
|
|
51
|
-
import { useEffect as
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
67
|
+
// src/useControlledState.ts
|
|
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);
|
|
57
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;
|
|
58
96
|
}, [
|
|
59
|
-
|
|
60
|
-
|
|
97
|
+
value
|
|
98
|
+
]);
|
|
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);
|
|
107
|
+
}, [
|
|
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
|
|
61
119
|
]);
|
|
62
120
|
return [
|
|
63
121
|
value,
|
|
64
122
|
setValue
|
|
65
123
|
];
|
|
66
124
|
};
|
|
125
|
+
function isFunction(value) {
|
|
126
|
+
return typeof value === "function";
|
|
127
|
+
}
|
|
67
128
|
|
|
68
|
-
//
|
|
69
|
-
import { useEffect as
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
}
|
|
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 = {};
|
|
77
139
|
for (let i = 0; i < Math.max(lastDeps.current.length ?? 0, deps.length ?? 0); i++) {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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);
|
|
82
149
|
}
|
|
83
|
-
console.groupEnd();
|
|
84
150
|
lastDeps.current = deps;
|
|
85
|
-
},
|
|
151
|
+
}, [
|
|
152
|
+
...deps,
|
|
153
|
+
active
|
|
154
|
+
]);
|
|
86
155
|
};
|
|
87
156
|
|
|
88
|
-
//
|
|
89
|
-
import { useEffect as
|
|
157
|
+
// src/useDefaultValue.ts
|
|
158
|
+
import { useEffect as useEffect6, useMemo as useMemo2, useState as useState5 } from "react";
|
|
90
159
|
var useDefaultValue = (reactiveValue, getDefaultValue) => {
|
|
91
|
-
const stableDefaultValue =
|
|
92
|
-
const [value, setValue] =
|
|
93
|
-
|
|
160
|
+
const stableDefaultValue = useMemo2(getDefaultValue, []);
|
|
161
|
+
const [value, setValue] = useState5(reactiveValue ?? stableDefaultValue);
|
|
162
|
+
useEffect6(() => {
|
|
94
163
|
setValue(reactiveValue ?? stableDefaultValue);
|
|
95
164
|
}, [
|
|
96
165
|
reactiveValue,
|
|
@@ -99,22 +168,20 @@ var useDefaultValue = (reactiveValue, getDefaultValue) => {
|
|
|
99
168
|
return value;
|
|
100
169
|
};
|
|
101
170
|
|
|
102
|
-
//
|
|
103
|
-
import
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
value
|
|
171
|
+
// src/useDefaults.ts
|
|
172
|
+
import defaultsDeep from "lodash.defaultsdeep";
|
|
173
|
+
import { useMemo as useMemo3 } from "react";
|
|
174
|
+
var useDefaults = (value, defaults) => {
|
|
175
|
+
return useMemo3(() => defaultsDeep({}, defaults, value), [
|
|
176
|
+
value,
|
|
177
|
+
defaults
|
|
110
178
|
]);
|
|
111
|
-
return ref;
|
|
112
179
|
};
|
|
113
180
|
|
|
114
|
-
//
|
|
115
|
-
import { useMemo as
|
|
181
|
+
// src/useFileDownload.ts
|
|
182
|
+
import { useMemo as useMemo4 } from "react";
|
|
116
183
|
var useFileDownload = () => {
|
|
117
|
-
return
|
|
184
|
+
return useMemo4(() => (data, filename) => {
|
|
118
185
|
const url = typeof data === "string" ? data : URL.createObjectURL(data);
|
|
119
186
|
const element = document.createElement("a");
|
|
120
187
|
element.setAttribute("href", url);
|
|
@@ -124,39 +191,62 @@ var useFileDownload = () => {
|
|
|
124
191
|
}, []);
|
|
125
192
|
};
|
|
126
193
|
|
|
127
|
-
//
|
|
128
|
-
import {
|
|
129
|
-
var useForwardedRef = (
|
|
130
|
-
const
|
|
194
|
+
// src/useForwardedRef.ts
|
|
195
|
+
import { useEffect as useEffect7, useMemo as useMemo5, useRef as useRef4 } from "react";
|
|
196
|
+
var useForwardedRef = (forwardedRef) => {
|
|
197
|
+
const localRef = useRef4(null);
|
|
131
198
|
useEffect7(() => {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
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));
|
|
139
218
|
}
|
|
140
|
-
|
|
141
|
-
|
|
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
|
+
]);
|
|
142
230
|
};
|
|
143
231
|
|
|
144
|
-
//
|
|
232
|
+
// src/useId.ts
|
|
145
233
|
import alea from "alea";
|
|
146
|
-
import { useMemo as
|
|
234
|
+
import { useMemo as useMemo6 } from "react";
|
|
147
235
|
var Alea = alea;
|
|
148
236
|
var prng = new Alea("@dxos/react-hooks");
|
|
149
237
|
var randomString = (n = 4) => prng().toString(16).slice(2, n + 2);
|
|
150
|
-
var useId = (namespace, propsId, opts) =>
|
|
151
|
-
propsId
|
|
152
|
-
|
|
238
|
+
var useId = (namespace, propsId, opts) => {
|
|
239
|
+
return useMemo6(() => makeId(namespace, propsId, opts), [
|
|
240
|
+
propsId
|
|
241
|
+
]);
|
|
242
|
+
};
|
|
153
243
|
var makeId = (namespace, propsId, opts) => propsId ?? `${namespace}-${randomString(opts?.n ?? 4)}`;
|
|
154
244
|
|
|
155
|
-
//
|
|
156
|
-
import { useEffect as useEffect8, useRef as
|
|
245
|
+
// src/useIsFocused.ts
|
|
246
|
+
import { useEffect as useEffect8, useRef as useRef5, useState as useState6 } from "react";
|
|
157
247
|
var useIsFocused = (inputRef) => {
|
|
158
|
-
const [isFocused, setIsFocused] =
|
|
159
|
-
const isFocusedRef =
|
|
248
|
+
const [isFocused, setIsFocused] = useState6(void 0);
|
|
249
|
+
const isFocusedRef = useRef5(isFocused);
|
|
160
250
|
isFocusedRef.current = isFocused;
|
|
161
251
|
useEffect8(() => {
|
|
162
252
|
const input = inputRef.current;
|
|
@@ -181,8 +271,8 @@ var useIsFocused = (inputRef) => {
|
|
|
181
271
|
return isFocused;
|
|
182
272
|
};
|
|
183
273
|
|
|
184
|
-
//
|
|
185
|
-
import { useEffect as useEffect9, useState as
|
|
274
|
+
// src/useMediaQuery.ts
|
|
275
|
+
import { useEffect as useEffect9, useState as useState7 } from "react";
|
|
186
276
|
var breakpointMediaQueries = {
|
|
187
277
|
sm: "(min-width: 640px)",
|
|
188
278
|
md: "(min-width: 768px)",
|
|
@@ -191,7 +281,7 @@ var breakpointMediaQueries = {
|
|
|
191
281
|
"2xl": "(min-width: 1536px)"
|
|
192
282
|
};
|
|
193
283
|
var useMediaQuery = (query, options = {}) => {
|
|
194
|
-
const { ssr =
|
|
284
|
+
const { ssr = false, fallback } = options;
|
|
195
285
|
const queries = (Array.isArray(query) ? query : [
|
|
196
286
|
query
|
|
197
287
|
]).map((query2) => query2 in breakpointMediaQueries ? breakpointMediaQueries[query2] : query2);
|
|
@@ -199,7 +289,7 @@ var useMediaQuery = (query, options = {}) => {
|
|
|
199
289
|
fallback
|
|
200
290
|
];
|
|
201
291
|
fallbackValues = fallbackValues.filter((v) => v != null);
|
|
202
|
-
const [value, setValue] =
|
|
292
|
+
const [value, setValue] = useState7(() => {
|
|
203
293
|
return queries.map((query2, index) => ({
|
|
204
294
|
media: query2,
|
|
205
295
|
matches: ssr ? !!fallbackValues[index] : document.defaultView?.matchMedia(query2).matches
|
|
@@ -246,10 +336,10 @@ var useMediaQuery = (query, options = {}) => {
|
|
|
246
336
|
return value.map((item) => !!item.matches);
|
|
247
337
|
};
|
|
248
338
|
|
|
249
|
-
//
|
|
250
|
-
import { useMemo as
|
|
339
|
+
// src/useMulticastObservable.ts
|
|
340
|
+
import { useMemo as useMemo7, useSyncExternalStore } from "react";
|
|
251
341
|
var useMulticastObservable = (observable) => {
|
|
252
|
-
const subscribeFn =
|
|
342
|
+
const subscribeFn = useMemo7(() => (listener) => {
|
|
253
343
|
const subscription = observable.subscribe(listener);
|
|
254
344
|
return () => subscription.unsubscribe();
|
|
255
345
|
}, [
|
|
@@ -258,29 +348,29 @@ var useMulticastObservable = (observable) => {
|
|
|
258
348
|
return useSyncExternalStore(subscribeFn, () => observable.get());
|
|
259
349
|
};
|
|
260
350
|
|
|
261
|
-
//
|
|
262
|
-
import { useState as
|
|
351
|
+
// src/useRefCallback.ts
|
|
352
|
+
import { useState as useState8 } from "react";
|
|
263
353
|
var useRefCallback = () => {
|
|
264
|
-
const [value, setValue] =
|
|
354
|
+
const [value, setValue] = useState8(null);
|
|
265
355
|
return {
|
|
266
356
|
refCallback: (value2) => setValue(value2),
|
|
267
357
|
value
|
|
268
358
|
};
|
|
269
359
|
};
|
|
270
360
|
|
|
271
|
-
//
|
|
272
|
-
import { useLayoutEffect, useMemo as
|
|
273
|
-
var
|
|
274
|
-
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(() => {
|
|
275
365
|
let timeout;
|
|
276
366
|
return (event) => {
|
|
277
367
|
clearTimeout(timeout);
|
|
278
368
|
timeout = setTimeout(() => {
|
|
279
|
-
|
|
369
|
+
cb(event);
|
|
280
370
|
}, delay);
|
|
281
371
|
};
|
|
282
372
|
}, [
|
|
283
|
-
|
|
373
|
+
cb,
|
|
284
374
|
delay
|
|
285
375
|
]);
|
|
286
376
|
return useLayoutEffect(() => {
|
|
@@ -293,49 +383,61 @@ var useResize = (handler, deps = [], delay = 800) => {
|
|
|
293
383
|
]);
|
|
294
384
|
};
|
|
295
385
|
|
|
296
|
-
//
|
|
297
|
-
import {
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
var useTrackProps = (props, componentName = "Component", active = true) => {
|
|
301
|
-
const prevProps = useRef5(props);
|
|
386
|
+
// src/useTimeout.ts
|
|
387
|
+
import { useEffect as useEffect10, useRef as useRef6 } from "react";
|
|
388
|
+
var useTimeout = (callback, delay = 0, deps = []) => {
|
|
389
|
+
const callbackRef = useRef6(callback);
|
|
302
390
|
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
|
-
}
|
|
391
|
+
callbackRef.current = callback;
|
|
392
|
+
}, [
|
|
393
|
+
callback
|
|
394
|
+
]);
|
|
395
|
+
useEffect10(() => {
|
|
396
|
+
if (delay == null) {
|
|
397
|
+
return;
|
|
323
398
|
}
|
|
324
|
-
|
|
325
|
-
|
|
399
|
+
const t = setTimeout(() => callbackRef.current?.(), delay);
|
|
400
|
+
return () => clearTimeout(t);
|
|
401
|
+
}, [
|
|
402
|
+
delay,
|
|
403
|
+
...deps
|
|
404
|
+
]);
|
|
405
|
+
};
|
|
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;
|
|
416
|
+
}
|
|
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
|
+
]);
|
|
326
428
|
};
|
|
327
429
|
|
|
328
|
-
//
|
|
329
|
-
import {
|
|
330
|
-
var
|
|
430
|
+
// src/useTransitions.ts
|
|
431
|
+
import { useEffect as useEffect11, useRef as useRef7, useState as useState9 } from "react";
|
|
432
|
+
var isFunction2 = (functionToCheck) => {
|
|
331
433
|
return functionToCheck instanceof Function;
|
|
332
434
|
};
|
|
333
435
|
var useDidTransition = (currentValue, fromValue, toValue) => {
|
|
334
|
-
const [hasTransitioned, setHasTransitioned] =
|
|
335
|
-
const previousValue =
|
|
436
|
+
const [hasTransitioned, setHasTransitioned] = useState9(false);
|
|
437
|
+
const previousValue = useRef7(currentValue);
|
|
336
438
|
useEffect11(() => {
|
|
337
|
-
const toValueValid =
|
|
338
|
-
const fromValueValid =
|
|
439
|
+
const toValueValid = isFunction2(toValue) ? toValue(currentValue) : toValue === currentValue;
|
|
440
|
+
const fromValueValid = isFunction2(fromValue) ? fromValue(previousValue.current) : fromValue === previousValue.current;
|
|
339
441
|
if (fromValueValid && toValueValid && !hasTransitioned) {
|
|
340
442
|
setHasTransitioned(true);
|
|
341
443
|
} else if ((!fromValueValid || !toValueValid) && hasTransitioned) {
|
|
@@ -351,7 +453,7 @@ var useDidTransition = (currentValue, fromValue, toValue) => {
|
|
|
351
453
|
return hasTransitioned;
|
|
352
454
|
};
|
|
353
455
|
var useOnTransition = (currentValue, fromValue, toValue, callback) => {
|
|
354
|
-
const dirty =
|
|
456
|
+
const dirty = useRef7(false);
|
|
355
457
|
const hasTransitioned = useDidTransition(currentValue, fromValue, toValue);
|
|
356
458
|
useEffect11(() => {
|
|
357
459
|
dirty.current = false;
|
|
@@ -372,23 +474,33 @@ var useOnTransition = (currentValue, fromValue, toValue, callback) => {
|
|
|
372
474
|
};
|
|
373
475
|
export {
|
|
374
476
|
makeId,
|
|
477
|
+
mergeRefs,
|
|
375
478
|
randomString,
|
|
479
|
+
setRef,
|
|
376
480
|
useAsyncEffect,
|
|
377
481
|
useAsyncState,
|
|
482
|
+
useAtomState,
|
|
483
|
+
useComposedRefs,
|
|
378
484
|
useControlledState,
|
|
379
|
-
|
|
485
|
+
useDebugDeps,
|
|
380
486
|
useDefaultValue,
|
|
487
|
+
useDefaults,
|
|
381
488
|
useDidTransition,
|
|
382
489
|
useDynamicRef,
|
|
383
490
|
useFileDownload,
|
|
384
491
|
useForwardedRef,
|
|
385
492
|
useId,
|
|
493
|
+
useInterval,
|
|
386
494
|
useIsFocused,
|
|
387
495
|
useMediaQuery,
|
|
496
|
+
useMergeRefs,
|
|
388
497
|
useMulticastObservable,
|
|
389
498
|
useOnTransition,
|
|
390
499
|
useRefCallback,
|
|
391
|
-
|
|
392
|
-
|
|
500
|
+
useScroller,
|
|
501
|
+
useSize,
|
|
502
|
+
useStateWithRef,
|
|
503
|
+
useTimeout,
|
|
504
|
+
useViewportResize
|
|
393
505
|
};
|
|
394
506
|
//# sourceMappingURL=index.mjs.map
|