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