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