@dxos/react-hooks 0.8.3 → 0.8.4-main.1068cf700f

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.
Files changed (66) hide show
  1. package/dist/lib/browser/index.mjs +232 -137
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/node-esm/index.mjs +232 -137
  5. package/dist/lib/node-esm/index.mjs.map +4 -4
  6. package/dist/lib/node-esm/meta.json +1 -1
  7. package/dist/types/src/index.d.ts +5 -3
  8. package/dist/types/src/index.d.ts.map +1 -1
  9. package/dist/types/src/useAsyncEffect.d.ts +5 -29
  10. package/dist/types/src/useAsyncEffect.d.ts.map +1 -1
  11. package/dist/types/src/useAsyncState.d.ts.map +1 -1
  12. package/dist/types/src/useControlledState.d.ts +2 -1
  13. package/dist/types/src/useControlledState.d.ts.map +1 -1
  14. package/dist/types/src/useDebugDeps.d.ts +6 -0
  15. package/dist/types/src/useDebugDeps.d.ts.map +1 -0
  16. package/dist/types/src/useDefaultValue.d.ts.map +1 -1
  17. package/dist/types/src/useDefaults.d.ts +6 -0
  18. package/dist/types/src/useDefaults.d.ts.map +1 -0
  19. package/dist/types/src/useDynamicRef.d.ts +6 -1
  20. package/dist/types/src/useDynamicRef.d.ts.map +1 -1
  21. package/dist/types/src/useForwardedRef.d.ts +23 -3
  22. package/dist/types/src/useForwardedRef.d.ts.map +1 -1
  23. package/dist/types/src/useId.d.ts.map +1 -1
  24. package/dist/types/src/useIsFocused.d.ts +1 -1
  25. package/dist/types/src/useIsFocused.d.ts.map +1 -1
  26. package/dist/types/src/useMediaQuery.d.ts +1 -1
  27. package/dist/types/src/useMediaQuery.d.ts.map +1 -1
  28. package/dist/types/src/useMulticastObservable.test.d.ts.map +1 -1
  29. package/dist/types/src/useTimeout.d.ts +3 -0
  30. package/dist/types/src/useTimeout.d.ts.map +1 -0
  31. package/dist/types/src/useTransitions.d.ts +2 -1
  32. package/dist/types/src/useTransitions.d.ts.map +1 -1
  33. package/dist/types/src/useViewportResize.d.ts +3 -0
  34. package/dist/types/src/useViewportResize.d.ts.map +1 -0
  35. package/dist/types/tsconfig.tsbuildinfo +1 -1
  36. package/package.json +19 -11
  37. package/src/index.ts +6 -3
  38. package/src/useAsyncEffect.ts +19 -49
  39. package/src/useAsyncState.ts +2 -1
  40. package/src/useControlledState.ts +26 -7
  41. package/src/useDebugDeps.ts +35 -0
  42. package/src/useDefaultValue.ts +1 -2
  43. package/src/useDefaults.ts +14 -0
  44. package/src/useDynamicRef.ts +26 -5
  45. package/src/useForwardedRef.ts +48 -13
  46. package/src/useId.ts +3 -2
  47. package/src/useIsFocused.ts +2 -2
  48. package/src/useMediaQuery.ts +8 -9
  49. package/src/{useMulticastObservable.test.tsx → useMulticastObservable.test.ts} +1 -3
  50. package/src/useTimeout.ts +46 -0
  51. package/src/useTransitions.ts +4 -2
  52. package/src/{useResize.ts → useViewportResize.ts} +4 -4
  53. package/dist/lib/node/index.cjs +0 -413
  54. package/dist/lib/node/index.cjs.map +0 -7
  55. package/dist/lib/node/meta.json +0 -1
  56. package/dist/types/src/useAsyncEffect.test.d.ts +0 -2
  57. package/dist/types/src/useAsyncEffect.test.d.ts.map +0 -1
  58. package/dist/types/src/useDebugReactDeps.d.ts +0 -6
  59. package/dist/types/src/useDebugReactDeps.d.ts.map +0 -1
  60. package/dist/types/src/useResize.d.ts +0 -3
  61. package/dist/types/src/useResize.d.ts.map +0 -1
  62. package/dist/types/src/useTrackProps.d.ts +0 -5
  63. package/dist/types/src/useTrackProps.d.ts.map +0 -1
  64. package/src/useAsyncEffect.test.tsx +0 -51
  65. package/src/useDebugReactDeps.ts +0 -27
  66. package/src/useTrackProps.ts +0 -40
@@ -1,37 +1,31 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
 
3
- // packages/ui/primitives/react-hooks/src/useAsyncEffect.ts
3
+ // src/useAsyncEffect.ts
4
4
  import { useEffect } from "react";
5
- import { log } from "@dxos/log";
6
- var useAsyncEffect = (callback, destructor, deps) => {
7
- const [effectDestructor, effectDeps] = typeof destructor === "function" ? [
8
- destructor,
9
- deps
10
- ] : [
11
- void 0,
12
- destructor
13
- ];
5
+ var useAsyncEffect = (cb, deps) => {
14
6
  useEffect(() => {
15
- let mounted = true;
16
- let value;
17
- const asyncResult = callback(() => mounted);
18
- void Promise.resolve(asyncResult).then((result) => {
19
- value = result;
20
- }).catch(log.catch);
7
+ const controller = new AbortController();
8
+ let cleanup;
9
+ const t = setTimeout(async () => {
10
+ if (!controller.signal.aborted) {
11
+ cleanup = await cb(controller);
12
+ }
13
+ });
21
14
  return () => {
22
- mounted = false;
23
- effectDestructor?.(value);
15
+ clearTimeout(t);
16
+ controller.abort();
17
+ cleanup?.();
24
18
  };
25
- }, effectDeps);
19
+ }, deps ?? []);
26
20
  };
27
21
 
28
- // packages/ui/primitives/react-hooks/src/useAsyncState.ts
22
+ // src/useAsyncState.ts
29
23
  import { useEffect as useEffect2, useState } from "react";
30
24
  var useAsyncState = (cb, deps = []) => {
31
25
  const [value, setValue] = useState();
32
26
  useEffect2(() => {
33
27
  let disposed = false;
34
- queueMicrotask(async () => {
28
+ const t = setTimeout(async () => {
35
29
  const data = await cb();
36
30
  if (!disposed) {
37
31
  setValue(data);
@@ -39,6 +33,7 @@ var useAsyncState = (cb, deps = []) => {
39
33
  });
40
34
  return () => {
41
35
  disposed = true;
36
+ clearTimeout(t);
42
37
  };
43
38
  }, deps);
44
39
  return [
@@ -47,50 +42,108 @@ var useAsyncState = (cb, deps = []) => {
47
42
  ];
48
43
  };
49
44
 
50
- // packages/ui/primitives/react-hooks/src/useControlledState.ts
51
- import { useEffect as useEffect3, useState as useState2 } from "react";
52
- var useControlledState = (controlledValue, ...deps) => {
53
- const [value, setValue] = useState2(controlledValue);
54
- useEffect3(() => {
55
- if (controlledValue !== void 0) {
56
- setValue(controlledValue);
45
+ // src/useControlledState.ts
46
+ import { useCallback as useCallback2, useEffect as useEffect4, useRef as useRef2, useState as useState3 } from "react";
47
+
48
+ // src/useDynamicRef.ts
49
+ import { useCallback, useEffect as useEffect3, useRef, useState as useState2 } from "react";
50
+ var useStateWithRef = (valueProp) => {
51
+ const [value, setValue] = useState2(valueProp);
52
+ const valueRef = useRef(valueProp);
53
+ const setter = useCallback((value2) => {
54
+ if (typeof value2 === "function") {
55
+ setValue((current) => {
56
+ valueRef.current = value2(current);
57
+ return valueRef.current;
58
+ });
59
+ } else {
60
+ valueRef.current = value2;
61
+ setValue(value2);
57
62
  }
63
+ }, []);
64
+ return [
65
+ value,
66
+ setter,
67
+ valueRef
68
+ ];
69
+ };
70
+ var useDynamicRef = (value) => {
71
+ const valueRef = useRef(value);
72
+ useEffect3(() => {
73
+ valueRef.current = value;
58
74
  }, [
59
- controlledValue,
60
- ...deps
75
+ value
76
+ ]);
77
+ return valueRef;
78
+ };
79
+
80
+ // src/useControlledState.ts
81
+ var useControlledState = (valueProp, onChange) => {
82
+ const [value, setControlledValue] = useState3(valueProp);
83
+ useEffect4(() => {
84
+ setControlledValue(valueProp);
85
+ }, [
86
+ valueProp
87
+ ]);
88
+ const onChangeRef = useRef2(onChange);
89
+ const valueRef = useDynamicRef(valueProp);
90
+ const setValue = useCallback2((nextValue) => {
91
+ const value2 = isFunction(nextValue) ? nextValue(valueRef.current) : nextValue;
92
+ setControlledValue(value2);
93
+ onChangeRef.current?.(value2);
94
+ }, [
95
+ valueRef,
96
+ onChangeRef
61
97
  ]);
62
98
  return [
63
99
  value,
64
100
  setValue
65
101
  ];
66
102
  };
103
+ function isFunction(value) {
104
+ return typeof value === "function";
105
+ }
67
106
 
68
- // packages/ui/primitives/react-hooks/src/useDebugReactDeps.ts
69
- import { useEffect as useEffect4, useRef } from "react";
70
- var useDebugReactDeps = (deps = []) => {
71
- const lastDeps = useRef([]);
72
- useEffect4(() => {
73
- console.group("deps changed", {
74
- old: lastDeps.current.length,
75
- new: deps.length
76
- });
107
+ // src/useDebugDeps.ts
108
+ import { useEffect as useEffect5, useRef as useRef3 } from "react";
109
+ import { log } from "@dxos/log";
110
+ var __dxlog_file = "/__w/dxos/dxos/packages/ui/react-primitives/react-hooks/src/useDebugDeps.ts";
111
+ var useDebugDeps = (deps = [], label = "useDebugDeps", active = true) => {
112
+ const lastDeps = useRef3([]);
113
+ useEffect5(() => {
114
+ if (!active) {
115
+ return;
116
+ }
117
+ const diff = {};
77
118
  for (let i = 0; i < Math.max(lastDeps.current.length ?? 0, deps.length ?? 0); i++) {
78
- console.log(i, lastDeps.current[i] === deps[i] ? "SAME" : "CHANGED", {
79
- previous: lastDeps.current[i],
80
- current: deps[i]
119
+ if (lastDeps.current[i] !== deps[i] || i > lastDeps.current.length) {
120
+ diff[i] = {
121
+ previous: lastDeps.current[i],
122
+ current: deps[i]
123
+ };
124
+ }
125
+ }
126
+ if (Object.keys(diff).length > 0) {
127
+ log.warn(`Updated: ${label} [${lastDeps.current.length}/${deps.length}]`, diff, {
128
+ F: __dxlog_file,
129
+ L: 30,
130
+ S: void 0,
131
+ C: (f, a) => f(...a)
81
132
  });
82
133
  }
83
- console.groupEnd();
84
134
  lastDeps.current = deps;
85
- }, deps);
135
+ }, [
136
+ ...deps,
137
+ active
138
+ ]);
86
139
  };
87
140
 
88
- // packages/ui/primitives/react-hooks/src/useDefaultValue.ts
89
- import { useEffect as useEffect5, useState as useState3, useMemo } from "react";
141
+ // src/useDefaultValue.ts
142
+ import { useEffect as useEffect6, useMemo, useState as useState4 } from "react";
90
143
  var useDefaultValue = (reactiveValue, getDefaultValue) => {
91
144
  const stableDefaultValue = useMemo(getDefaultValue, []);
92
- const [value, setValue] = useState3(reactiveValue ?? stableDefaultValue);
93
- useEffect5(() => {
145
+ const [value, setValue] = useState4(reactiveValue ?? stableDefaultValue);
146
+ useEffect6(() => {
94
147
  setValue(reactiveValue ?? stableDefaultValue);
95
148
  }, [
96
149
  reactiveValue,
@@ -99,22 +152,20 @@ var useDefaultValue = (reactiveValue, getDefaultValue) => {
99
152
  return value;
100
153
  };
101
154
 
102
- // packages/ui/primitives/react-hooks/src/useDynamicRef.ts
103
- import { useEffect as useEffect6, useRef as useRef2 } from "react";
104
- var useDynamicRef = (value) => {
105
- const ref = useRef2(value);
106
- useEffect6(() => {
107
- ref.current = value;
108
- }, [
109
- value
155
+ // src/useDefaults.ts
156
+ import defaultsDeep from "lodash.defaultsdeep";
157
+ import { useMemo as useMemo2 } from "react";
158
+ var useDefaults = (value, defaults) => {
159
+ return useMemo2(() => defaultsDeep({}, defaults, value), [
160
+ value,
161
+ defaults
110
162
  ]);
111
- return ref;
112
163
  };
113
164
 
114
- // packages/ui/primitives/react-hooks/src/useFileDownload.ts
115
- import { useMemo as useMemo2 } from "react";
165
+ // src/useFileDownload.ts
166
+ import { useMemo as useMemo3 } from "react";
116
167
  var useFileDownload = () => {
117
- return useMemo2(() => (data, filename) => {
168
+ return useMemo3(() => (data, filename) => {
118
169
  const url = typeof data === "string" ? data : URL.createObjectURL(data);
119
170
  const element = document.createElement("a");
120
171
  element.setAttribute("href", url);
@@ -124,39 +175,60 @@ var useFileDownload = () => {
124
175
  }, []);
125
176
  };
126
177
 
127
- // packages/ui/primitives/react-hooks/src/useForwardedRef.ts
128
- import { useRef as useRef3, useEffect as useEffect7 } from "react";
129
- var useForwardedRef = (ref) => {
130
- const innerRef = useRef3(null);
178
+ // src/useForwardedRef.ts
179
+ import { useEffect as useEffect7, useMemo as useMemo4, useRef as useRef4 } from "react";
180
+ var useForwardedRef = (forwardedRef) => {
181
+ const localRef = useRef4(null);
131
182
  useEffect7(() => {
132
- if (!ref) {
133
- return;
134
- }
135
- if (typeof ref === "function") {
136
- ref(innerRef.current);
137
- } else {
138
- ref.current = innerRef.current;
183
+ setRef(forwardedRef, localRef.current);
184
+ }, [
185
+ forwardedRef
186
+ ]);
187
+ return localRef;
188
+ };
189
+ function setRef(ref, value) {
190
+ if (typeof ref === "function") {
191
+ return ref(value);
192
+ } else if (ref) {
193
+ ref.current = value;
194
+ }
195
+ }
196
+ var mergeRefs = (refs) => {
197
+ return (value) => {
198
+ const cleanups = [];
199
+ for (const ref of refs) {
200
+ const cleanup = setRef(ref, value);
201
+ cleanups.push(typeof cleanup === "function" ? cleanup : () => setRef(ref, null));
139
202
  }
140
- });
141
- return innerRef;
203
+ return () => {
204
+ for (const cleanup of cleanups) cleanup();
205
+ };
206
+ };
207
+ };
208
+ var useMergeRefs = (refs) => {
209
+ return useMemo4(() => mergeRefs(refs), [
210
+ ...refs
211
+ ]);
142
212
  };
143
213
 
144
- // packages/ui/primitives/react-hooks/src/useId.ts
214
+ // src/useId.ts
145
215
  import alea from "alea";
146
- import { useMemo as useMemo3 } from "react";
216
+ import { useMemo as useMemo5 } from "react";
147
217
  var Alea = alea;
148
218
  var prng = new Alea("@dxos/react-hooks");
149
219
  var randomString = (n = 4) => prng().toString(16).slice(2, n + 2);
150
- var useId = (namespace, propsId, opts) => useMemo3(() => makeId(namespace, propsId, opts), [
151
- propsId
152
- ]);
220
+ var useId = (namespace, propsId, opts) => {
221
+ return useMemo5(() => makeId(namespace, propsId, opts), [
222
+ propsId
223
+ ]);
224
+ };
153
225
  var makeId = (namespace, propsId, opts) => propsId ?? `${namespace}-${randomString(opts?.n ?? 4)}`;
154
226
 
155
- // packages/ui/primitives/react-hooks/src/useIsFocused.ts
156
- import { useEffect as useEffect8, useRef as useRef4, useState as useState4 } from "react";
227
+ // src/useIsFocused.ts
228
+ import { useEffect as useEffect8, useRef as useRef5, useState as useState5 } from "react";
157
229
  var useIsFocused = (inputRef) => {
158
- const [isFocused, setIsFocused] = useState4(void 0);
159
- const isFocusedRef = useRef4(isFocused);
230
+ const [isFocused, setIsFocused] = useState5(void 0);
231
+ const isFocusedRef = useRef5(isFocused);
160
232
  isFocusedRef.current = isFocused;
161
233
  useEffect8(() => {
162
234
  const input = inputRef.current;
@@ -181,8 +253,8 @@ var useIsFocused = (inputRef) => {
181
253
  return isFocused;
182
254
  };
183
255
 
184
- // packages/ui/primitives/react-hooks/src/useMediaQuery.ts
185
- import { useEffect as useEffect9, useState as useState5 } from "react";
256
+ // src/useMediaQuery.ts
257
+ import { useEffect as useEffect9, useState as useState6 } from "react";
186
258
  var breakpointMediaQueries = {
187
259
  sm: "(min-width: 640px)",
188
260
  md: "(min-width: 768px)",
@@ -191,7 +263,7 @@ var breakpointMediaQueries = {
191
263
  "2xl": "(min-width: 1536px)"
192
264
  };
193
265
  var useMediaQuery = (query, options = {}) => {
194
- const { ssr = true, fallback } = options;
266
+ const { ssr = false, fallback } = options;
195
267
  const queries = (Array.isArray(query) ? query : [
196
268
  query
197
269
  ]).map((query2) => query2 in breakpointMediaQueries ? breakpointMediaQueries[query2] : query2);
@@ -199,7 +271,7 @@ var useMediaQuery = (query, options = {}) => {
199
271
  fallback
200
272
  ];
201
273
  fallbackValues = fallbackValues.filter((v) => v != null);
202
- const [value, setValue] = useState5(() => {
274
+ const [value, setValue] = useState6(() => {
203
275
  return queries.map((query2, index) => ({
204
276
  media: query2,
205
277
  matches: ssr ? !!fallbackValues[index] : document.defaultView?.matchMedia(query2).matches
@@ -246,10 +318,10 @@ var useMediaQuery = (query, options = {}) => {
246
318
  return value.map((item) => !!item.matches);
247
319
  };
248
320
 
249
- // packages/ui/primitives/react-hooks/src/useMulticastObservable.ts
250
- import { useMemo as useMemo4, useSyncExternalStore } from "react";
321
+ // src/useMulticastObservable.ts
322
+ import { useMemo as useMemo6, useSyncExternalStore } from "react";
251
323
  var useMulticastObservable = (observable) => {
252
- const subscribeFn = useMemo4(() => (listener) => {
324
+ const subscribeFn = useMemo6(() => (listener) => {
253
325
  const subscription = observable.subscribe(listener);
254
326
  return () => subscription.unsubscribe();
255
327
  }, [
@@ -258,29 +330,29 @@ var useMulticastObservable = (observable) => {
258
330
  return useSyncExternalStore(subscribeFn, () => observable.get());
259
331
  };
260
332
 
261
- // packages/ui/primitives/react-hooks/src/useRefCallback.ts
262
- import { useState as useState6 } from "react";
333
+ // src/useRefCallback.ts
334
+ import { useState as useState7 } from "react";
263
335
  var useRefCallback = () => {
264
- const [value, setValue] = useState6(null);
336
+ const [value, setValue] = useState7(null);
265
337
  return {
266
338
  refCallback: (value2) => setValue(value2),
267
339
  value
268
340
  };
269
341
  };
270
342
 
271
- // packages/ui/primitives/react-hooks/src/useResize.ts
272
- import { useLayoutEffect, useMemo as useMemo5 } from "react";
273
- var useResize = (handler, deps = [], delay = 800) => {
274
- const debouncedHandler = useMemo5(() => {
343
+ // src/useViewportResize.ts
344
+ import { useLayoutEffect, useMemo as useMemo7 } from "react";
345
+ var useViewportResize = (cb, deps = [], delay = 800) => {
346
+ const debouncedHandler = useMemo7(() => {
275
347
  let timeout;
276
348
  return (event) => {
277
349
  clearTimeout(timeout);
278
350
  timeout = setTimeout(() => {
279
- handler(event);
351
+ cb(event);
280
352
  }, delay);
281
353
  };
282
354
  }, [
283
- handler,
355
+ cb,
284
356
  delay
285
357
  ]);
286
358
  return useLayoutEffect(() => {
@@ -293,49 +365,61 @@ var useResize = (handler, deps = [], delay = 800) => {
293
365
  ]);
294
366
  };
295
367
 
296
- // packages/ui/primitives/react-hooks/src/useTrackProps.ts
297
- import { useRef as useRef5, useEffect as useEffect10 } from "react";
298
- import { log as log2 } from "@dxos/log";
299
- var __dxlog_file = "/home/runner/work/dxos/dxos/packages/ui/primitives/react-hooks/src/useTrackProps.ts";
300
- var useTrackProps = (props, componentName = "Component", active = true) => {
301
- const prevProps = useRef5(props);
368
+ // src/useTimeout.ts
369
+ import { useEffect as useEffect10, useRef as useRef6 } from "react";
370
+ var useTimeout = (callback, delay = 0, deps = []) => {
371
+ const callbackRef = useRef6(callback);
302
372
  useEffect10(() => {
303
- const changes = Object.entries(props).filter(([key]) => props[key] !== prevProps.current[key]);
304
- if (changes.length > 0) {
305
- if (active) {
306
- log2.info("props changed", {
307
- componentName,
308
- keys: changes.map(([key]) => key).join(","),
309
- props: Object.fromEntries(changes.map(([key]) => [
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
- }
373
+ callbackRef.current = callback;
374
+ }, [
375
+ callback
376
+ ]);
377
+ useEffect10(() => {
378
+ if (delay == null) {
379
+ return;
323
380
  }
324
- prevProps.current = props;
325
- });
381
+ const t = setTimeout(() => callbackRef.current?.(), delay);
382
+ return () => clearTimeout(t);
383
+ }, [
384
+ delay,
385
+ ...deps
386
+ ]);
387
+ };
388
+ var useInterval = (callback, delay = 0, deps = []) => {
389
+ const callbackRef = useRef6(callback);
390
+ useEffect10(() => {
391
+ callbackRef.current = callback;
392
+ }, [
393
+ callback
394
+ ]);
395
+ useEffect10(() => {
396
+ if (delay == null) {
397
+ return;
398
+ }
399
+ const i = setInterval(async () => {
400
+ const result = await callbackRef.current?.();
401
+ if (result === false) {
402
+ clearInterval(i);
403
+ }
404
+ }, delay);
405
+ return () => clearInterval(i);
406
+ }, [
407
+ delay,
408
+ ...deps
409
+ ]);
326
410
  };
327
411
 
328
- // packages/ui/primitives/react-hooks/src/useTransitions.ts
329
- import { useRef as useRef6, useEffect as useEffect11, useState as useState7 } from "react";
330
- var isFunction = (functionToCheck) => {
412
+ // src/useTransitions.ts
413
+ import { useEffect as useEffect11, useRef as useRef7, useState as useState8 } from "react";
414
+ var isFunction2 = (functionToCheck) => {
331
415
  return functionToCheck instanceof Function;
332
416
  };
333
417
  var useDidTransition = (currentValue, fromValue, toValue) => {
334
- const [hasTransitioned, setHasTransitioned] = useState7(false);
335
- const previousValue = useRef6(currentValue);
418
+ const [hasTransitioned, setHasTransitioned] = useState8(false);
419
+ const previousValue = useRef7(currentValue);
336
420
  useEffect11(() => {
337
- const toValueValid = isFunction(toValue) ? toValue(currentValue) : toValue === currentValue;
338
- const fromValueValid = isFunction(fromValue) ? fromValue(previousValue.current) : fromValue === previousValue.current;
421
+ const toValueValid = isFunction2(toValue) ? toValue(currentValue) : toValue === currentValue;
422
+ const fromValueValid = isFunction2(fromValue) ? fromValue(previousValue.current) : fromValue === previousValue.current;
339
423
  if (fromValueValid && toValueValid && !hasTransitioned) {
340
424
  setHasTransitioned(true);
341
425
  } else if ((!fromValueValid || !toValueValid) && hasTransitioned) {
@@ -351,7 +435,7 @@ var useDidTransition = (currentValue, fromValue, toValue) => {
351
435
  return hasTransitioned;
352
436
  };
353
437
  var useOnTransition = (currentValue, fromValue, toValue, callback) => {
354
- const dirty = useRef6(false);
438
+ const dirty = useRef7(false);
355
439
  const hasTransitioned = useDidTransition(currentValue, fromValue, toValue);
356
440
  useEffect11(() => {
357
441
  dirty.current = false;
@@ -370,25 +454,36 @@ var useOnTransition = (currentValue, fromValue, toValue, callback) => {
370
454
  callback
371
455
  ]);
372
456
  };
457
+
458
+ // src/index.ts
459
+ import { useSize, useScroller } from "mini-virtual-list";
373
460
  export {
374
461
  makeId,
462
+ mergeRefs,
375
463
  randomString,
464
+ setRef,
376
465
  useAsyncEffect,
377
466
  useAsyncState,
378
467
  useControlledState,
379
- useDebugReactDeps,
468
+ useDebugDeps,
380
469
  useDefaultValue,
470
+ useDefaults,
381
471
  useDidTransition,
382
472
  useDynamicRef,
383
473
  useFileDownload,
384
474
  useForwardedRef,
385
475
  useId,
476
+ useInterval,
386
477
  useIsFocused,
387
478
  useMediaQuery,
479
+ useMergeRefs,
388
480
  useMulticastObservable,
389
481
  useOnTransition,
390
482
  useRefCallback,
391
- useResize,
392
- useTrackProps
483
+ useScroller,
484
+ useSize,
485
+ useStateWithRef,
486
+ useTimeout,
487
+ useViewportResize
393
488
  };
394
489
  //# sourceMappingURL=index.mjs.map