@dxos/react-hooks 0.8.4-main.fd6878d → 0.8.4-staging.60fe92afc8

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 (63) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -0
  3. package/dist/lib/browser/index.mjs +240 -136
  4. package/dist/lib/browser/index.mjs.map +4 -4
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/node-esm/index.mjs +240 -136
  7. package/dist/lib/node-esm/index.mjs.map +4 -4
  8. package/dist/lib/node-esm/meta.json +1 -1
  9. package/dist/types/src/index.d.ts +5 -3
  10. package/dist/types/src/index.d.ts.map +1 -1
  11. package/dist/types/src/useAsyncEffect.d.ts +7 -1
  12. package/dist/types/src/useAsyncEffect.d.ts.map +1 -1
  13. package/dist/types/src/useAsyncState.d.ts.map +1 -1
  14. package/dist/types/src/useAtomState.d.ts +12 -0
  15. package/dist/types/src/useAtomState.d.ts.map +1 -0
  16. package/dist/types/src/useControlledState.d.ts +2 -1
  17. package/dist/types/src/useControlledState.d.ts.map +1 -1
  18. package/dist/types/src/useDebugDeps.d.ts +6 -0
  19. package/dist/types/src/useDebugDeps.d.ts.map +1 -0
  20. package/dist/types/src/useDefaultValue.d.ts.map +1 -1
  21. package/dist/types/src/useDefaults.d.ts.map +1 -1
  22. package/dist/types/src/useDynamicRef.d.ts +6 -1
  23. package/dist/types/src/useDynamicRef.d.ts.map +1 -1
  24. package/dist/types/src/useForwardedRef.d.ts +23 -3
  25. package/dist/types/src/useForwardedRef.d.ts.map +1 -1
  26. package/dist/types/src/useId.d.ts.map +1 -1
  27. package/dist/types/src/useIsFocused.d.ts +1 -1
  28. package/dist/types/src/useIsFocused.d.ts.map +1 -1
  29. package/dist/types/src/useMediaQuery.d.ts +1 -1
  30. package/dist/types/src/useMediaQuery.d.ts.map +1 -1
  31. package/dist/types/src/useMulticastObservable.d.ts.map +1 -1
  32. package/dist/types/src/useMulticastObservable.test.d.ts.map +1 -1
  33. package/dist/types/src/useTimeout.d.ts +2 -1
  34. package/dist/types/src/useTimeout.d.ts.map +1 -1
  35. package/dist/types/src/useTransitions.d.ts +2 -1
  36. package/dist/types/src/useTransitions.d.ts.map +1 -1
  37. package/dist/types/src/useViewportResize.d.ts +3 -0
  38. package/dist/types/src/useViewportResize.d.ts.map +1 -0
  39. package/dist/types/tsconfig.tsbuildinfo +1 -1
  40. package/package.json +19 -15
  41. package/src/index.ts +6 -3
  42. package/src/useAsyncEffect.ts +24 -6
  43. package/src/useAtomState.ts +23 -0
  44. package/src/useControlledState.ts +22 -11
  45. package/src/useDebugDeps.ts +35 -0
  46. package/src/useDynamicRef.ts +26 -5
  47. package/src/useForwardedRef.ts +50 -13
  48. package/src/useId.ts +3 -2
  49. package/src/useIsFocused.ts +2 -2
  50. package/src/useMediaQuery.ts +8 -9
  51. package/src/{useMulticastObservable.test.tsx → useMulticastObservable.test.ts} +1 -3
  52. package/src/useTimeout.ts +28 -3
  53. package/src/useTransitions.ts +3 -1
  54. package/src/useViewportResize.ts +52 -0
  55. package/dist/types/src/useDebugReactDeps.d.ts +0 -6
  56. package/dist/types/src/useDebugReactDeps.d.ts.map +0 -1
  57. package/dist/types/src/useResize.d.ts +0 -3
  58. package/dist/types/src/useResize.d.ts.map +0 -1
  59. package/dist/types/src/useTrackProps.d.ts +0 -5
  60. package/dist/types/src/useTrackProps.d.ts.map +0 -1
  61. package/src/useDebugReactDeps.ts +0 -27
  62. package/src/useResize.ts +0 -27
  63. package/src/useTrackProps.ts +0 -40
@@ -1,20 +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
- var useAsyncEffect = (callback, deps) => {
9
+ var useAsyncEffect = (cb, deps) => {
6
10
  useEffect(() => {
7
- const t = setTimeout(() => {
8
- void callback();
11
+ const controller = new AbortController();
12
+ let cleanup;
13
+ const t = setTimeout(async () => {
14
+ if (!controller.signal.aborted) {
15
+ cleanup = await cb(controller);
16
+ }
9
17
  });
10
- return () => clearTimeout(t);
11
- }, deps);
18
+ return () => {
19
+ clearTimeout(t);
20
+ controller.abort();
21
+ cleanup?.();
22
+ };
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
+ ]);
12
42
  };
13
43
 
14
44
  // src/useAsyncState.ts
15
- import { useEffect as useEffect2, useState } from "react";
45
+ import { useEffect as useEffect2, useState as useState2 } from "react";
16
46
  var useAsyncState = (cb, deps = []) => {
17
- const [value, setValue] = useState();
47
+ const [value, setValue] = useState2();
18
48
  useEffect2(() => {
19
49
  let disposed = false;
20
50
  const t = setTimeout(async () => {
@@ -35,55 +65,101 @@ var useAsyncState = (cb, deps = []) => {
35
65
  };
36
66
 
37
67
  // src/useControlledState.ts
38
- import { useEffect as useEffect3, useState as useState2 } from "react";
39
- var useControlledState = (controlledValue, onChange, ...deps) => {
40
- const [value, setValue] = useState2(controlledValue);
41
- useEffect3(() => {
42
- if (controlledValue !== void 0) {
43
- setValue(controlledValue);
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);
44
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;
45
96
  }, [
46
- controlledValue,
47
- ...deps
97
+ value
48
98
  ]);
49
- useEffect3(() => {
50
- onChange?.(value);
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);
51
107
  }, [
52
- value,
53
- onChange
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
54
119
  ]);
55
120
  return [
56
121
  value,
57
122
  setValue
58
123
  ];
59
124
  };
125
+ function isFunction(value) {
126
+ return typeof value === "function";
127
+ }
60
128
 
61
- // src/useDebugReactDeps.ts
62
- import { useEffect as useEffect4, useRef } from "react";
63
- var useDebugReactDeps = (deps = []) => {
64
- const lastDeps = useRef([]);
65
- useEffect4(() => {
66
- console.group("deps changed", {
67
- old: lastDeps.current.length,
68
- new: deps.length
69
- });
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 = {};
70
139
  for (let i = 0; i < Math.max(lastDeps.current.length ?? 0, deps.length ?? 0); i++) {
71
- console.log(i, lastDeps.current[i] === deps[i] ? "SAME" : "CHANGED", {
72
- previous: lastDeps.current[i],
73
- current: deps[i]
74
- });
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);
75
149
  }
76
- console.groupEnd();
77
150
  lastDeps.current = deps;
78
- }, deps);
151
+ }, [
152
+ ...deps,
153
+ active
154
+ ]);
79
155
  };
80
156
 
81
157
  // src/useDefaultValue.ts
82
- import { useEffect as useEffect5, useMemo, useState as useState3 } from "react";
158
+ import { useEffect as useEffect6, useMemo as useMemo2, useState as useState5 } from "react";
83
159
  var useDefaultValue = (reactiveValue, getDefaultValue) => {
84
- const stableDefaultValue = useMemo(getDefaultValue, []);
85
- const [value, setValue] = useState3(reactiveValue ?? stableDefaultValue);
86
- useEffect5(() => {
160
+ const stableDefaultValue = useMemo2(getDefaultValue, []);
161
+ const [value, setValue] = useState5(reactiveValue ?? stableDefaultValue);
162
+ useEffect6(() => {
87
163
  setValue(reactiveValue ?? stableDefaultValue);
88
164
  }, [
89
165
  reactiveValue,
@@ -94,30 +170,18 @@ var useDefaultValue = (reactiveValue, getDefaultValue) => {
94
170
 
95
171
  // src/useDefaults.ts
96
172
  import defaultsDeep from "lodash.defaultsdeep";
97
- import { useMemo as useMemo2 } from "react";
173
+ import { useMemo as useMemo3 } from "react";
98
174
  var useDefaults = (value, defaults) => {
99
- return useMemo2(() => defaultsDeep({}, defaults, value), [
175
+ return useMemo3(() => defaultsDeep({}, defaults, value), [
100
176
  value,
101
177
  defaults
102
178
  ]);
103
179
  };
104
180
 
105
- // src/useDynamicRef.ts
106
- import { useEffect as useEffect6, useRef as useRef2 } from "react";
107
- var useDynamicRef = (value) => {
108
- const ref = useRef2(value);
109
- useEffect6(() => {
110
- ref.current = value;
111
- }, [
112
- value
113
- ]);
114
- return ref;
115
- };
116
-
117
181
  // src/useFileDownload.ts
118
- import { useMemo as useMemo3 } from "react";
182
+ import { useMemo as useMemo4 } from "react";
119
183
  var useFileDownload = () => {
120
- return useMemo3(() => (data, filename) => {
184
+ return useMemo4(() => (data, filename) => {
121
185
  const url = typeof data === "string" ? data : URL.createObjectURL(data);
122
186
  const element = document.createElement("a");
123
187
  element.setAttribute("href", url);
@@ -128,38 +192,61 @@ var useFileDownload = () => {
128
192
  };
129
193
 
130
194
  // src/useForwardedRef.ts
131
- import { useEffect as useEffect7, useRef as useRef3 } from "react";
132
- var useForwardedRef = (ref) => {
133
- const innerRef = useRef3(null);
195
+ import { useEffect as useEffect7, useMemo as useMemo5, useRef as useRef4 } from "react";
196
+ var useForwardedRef = (forwardedRef) => {
197
+ const localRef = useRef4(null);
134
198
  useEffect7(() => {
135
- if (!ref) {
136
- return;
137
- }
138
- if (typeof ref === "function") {
139
- ref(innerRef.current);
140
- } else {
141
- ref.current = innerRef.current;
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));
142
218
  }
143
- });
144
- return innerRef;
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
+ ]);
145
230
  };
146
231
 
147
232
  // src/useId.ts
148
233
  import alea from "alea";
149
- import { useMemo as useMemo4 } from "react";
234
+ import { useMemo as useMemo6 } from "react";
150
235
  var Alea = alea;
151
236
  var prng = new Alea("@dxos/react-hooks");
152
237
  var randomString = (n = 4) => prng().toString(16).slice(2, n + 2);
153
- var useId = (namespace, propsId, opts) => useMemo4(() => makeId(namespace, propsId, opts), [
154
- propsId
155
- ]);
238
+ var useId = (namespace, propsId, opts) => {
239
+ return useMemo6(() => makeId(namespace, propsId, opts), [
240
+ propsId
241
+ ]);
242
+ };
156
243
  var makeId = (namespace, propsId, opts) => propsId ?? `${namespace}-${randomString(opts?.n ?? 4)}`;
157
244
 
158
245
  // src/useIsFocused.ts
159
- import { useEffect as useEffect8, useRef as useRef4, useState as useState4 } from "react";
246
+ import { useEffect as useEffect8, useRef as useRef5, useState as useState6 } from "react";
160
247
  var useIsFocused = (inputRef) => {
161
- const [isFocused, setIsFocused] = useState4(void 0);
162
- const isFocusedRef = useRef4(isFocused);
248
+ const [isFocused, setIsFocused] = useState6(void 0);
249
+ const isFocusedRef = useRef5(isFocused);
163
250
  isFocusedRef.current = isFocused;
164
251
  useEffect8(() => {
165
252
  const input = inputRef.current;
@@ -185,7 +272,7 @@ var useIsFocused = (inputRef) => {
185
272
  };
186
273
 
187
274
  // src/useMediaQuery.ts
188
- import { useEffect as useEffect9, useState as useState5 } from "react";
275
+ import { useEffect as useEffect9, useState as useState7 } from "react";
189
276
  var breakpointMediaQueries = {
190
277
  sm: "(min-width: 640px)",
191
278
  md: "(min-width: 768px)",
@@ -194,7 +281,7 @@ var breakpointMediaQueries = {
194
281
  "2xl": "(min-width: 1536px)"
195
282
  };
196
283
  var useMediaQuery = (query, options = {}) => {
197
- const { ssr = true, fallback } = options;
284
+ const { ssr = false, fallback } = options;
198
285
  const queries = (Array.isArray(query) ? query : [
199
286
  query
200
287
  ]).map((query2) => query2 in breakpointMediaQueries ? breakpointMediaQueries[query2] : query2);
@@ -202,7 +289,7 @@ var useMediaQuery = (query, options = {}) => {
202
289
  fallback
203
290
  ];
204
291
  fallbackValues = fallbackValues.filter((v) => v != null);
205
- const [value, setValue] = useState5(() => {
292
+ const [value, setValue] = useState7(() => {
206
293
  return queries.map((query2, index) => ({
207
294
  media: query2,
208
295
  matches: ssr ? !!fallbackValues[index] : document.defaultView?.matchMedia(query2).matches
@@ -250,9 +337,9 @@ var useMediaQuery = (query, options = {}) => {
250
337
  };
251
338
 
252
339
  // src/useMulticastObservable.ts
253
- import { useMemo as useMemo5, useSyncExternalStore } from "react";
340
+ import { useMemo as useMemo7, useSyncExternalStore } from "react";
254
341
  var useMulticastObservable = (observable) => {
255
- const subscribeFn = useMemo5(() => (listener) => {
342
+ const subscribeFn = useMemo7(() => (listener) => {
256
343
  const subscription = observable.subscribe(listener);
257
344
  return () => subscription.unsubscribe();
258
345
  }, [
@@ -262,44 +349,62 @@ var useMulticastObservable = (observable) => {
262
349
  };
263
350
 
264
351
  // src/useRefCallback.ts
265
- import { useState as useState6 } from "react";
352
+ import { useState as useState8 } from "react";
266
353
  var useRefCallback = () => {
267
- const [value, setValue] = useState6(null);
354
+ const [value, setValue] = useState8(null);
268
355
  return {
269
356
  refCallback: (value2) => setValue(value2),
270
357
  value
271
358
  };
272
359
  };
273
360
 
274
- // src/useResize.ts
275
- import { useLayoutEffect, useMemo as useMemo6 } from "react";
276
- var useResize = (handler, deps = [], delay = 800) => {
277
- const debouncedHandler = useMemo6(() => {
361
+ // src/useViewportResize.ts
362
+ import { useLayoutEffect, useMemo as useMemo8 } from "react";
363
+ var useViewportResize = (cb, deps = [], delay = 800) => {
364
+ const { handler: debouncedHandler, cancel } = useMemo8(() => {
278
365
  let timeout;
279
- return (event) => {
280
- clearTimeout(timeout);
281
- timeout = setTimeout(() => {
282
- handler(event);
283
- }, delay);
366
+ return {
367
+ handler: (event) => {
368
+ if (timeout !== void 0) {
369
+ clearTimeout(timeout);
370
+ }
371
+ timeout = setTimeout(() => {
372
+ timeout = void 0;
373
+ if (typeof document === "undefined" || typeof getComputedStyle === "undefined") {
374
+ return;
375
+ }
376
+ cb(event);
377
+ }, delay);
378
+ },
379
+ cancel: () => {
380
+ if (timeout !== void 0) {
381
+ clearTimeout(timeout);
382
+ timeout = void 0;
383
+ }
384
+ }
284
385
  };
285
386
  }, [
286
- handler,
387
+ cb,
287
388
  delay
288
389
  ]);
289
390
  return useLayoutEffect(() => {
290
391
  window.visualViewport?.addEventListener("resize", debouncedHandler);
291
392
  debouncedHandler();
292
- return () => window.visualViewport?.removeEventListener("resize", debouncedHandler);
393
+ return () => {
394
+ window.visualViewport?.removeEventListener("resize", debouncedHandler);
395
+ cancel();
396
+ };
293
397
  }, [
294
398
  debouncedHandler,
399
+ cancel,
295
400
  ...deps
296
401
  ]);
297
402
  };
298
403
 
299
404
  // src/useTimeout.ts
300
- import { useEffect as useEffect10, useRef as useRef5 } from "react";
405
+ import { useEffect as useEffect10, useRef as useRef6 } from "react";
301
406
  var useTimeout = (callback, delay = 0, deps = []) => {
302
- const callbackRef = useRef5(callback);
407
+ const callbackRef = useRef6(callback);
303
408
  useEffect10(() => {
304
409
  callbackRef.current = callback;
305
410
  }, [
@@ -309,57 +414,48 @@ var useTimeout = (callback, delay = 0, deps = []) => {
309
414
  if (delay == null) {
310
415
  return;
311
416
  }
312
- const timeout = setTimeout(() => callbackRef.current?.(), delay);
313
- return () => clearTimeout(timeout);
417
+ const t = setTimeout(() => callbackRef.current?.(), delay);
418
+ return () => clearTimeout(t);
314
419
  }, [
315
420
  delay,
316
421
  ...deps
317
422
  ]);
318
423
  };
319
-
320
- // src/useTrackProps.ts
321
- import { useEffect as useEffect11, useRef as useRef6 } from "react";
322
- import { log } from "@dxos/log";
323
- var __dxlog_file = "/__w/dxos/dxos/packages/ui/primitives/react-hooks/src/useTrackProps.ts";
324
- var useTrackProps = (props, componentName = "Component", active = true) => {
325
- const prevProps = useRef6(props);
326
- useEffect11(() => {
327
- const changes = Object.entries(props).filter(([key]) => props[key] !== prevProps.current[key]);
328
- if (changes.length > 0) {
329
- if (active) {
330
- log.info("props changed", {
331
- componentName,
332
- keys: changes.map(([key]) => key).join(","),
333
- props: Object.fromEntries(changes.map(([key]) => [
334
- key,
335
- {
336
- from: prevProps.current[key],
337
- to: props[key]
338
- }
339
- ]))
340
- }, {
341
- F: __dxlog_file,
342
- L: 22,
343
- S: void 0,
344
- C: (f, a) => f(...a)
345
- });
346
- }
424
+ var useInterval = (callback, delay = 0, deps = []) => {
425
+ const callbackRef = useRef6(callback);
426
+ useEffect10(() => {
427
+ callbackRef.current = callback;
428
+ }, [
429
+ callback
430
+ ]);
431
+ useEffect10(() => {
432
+ if (delay == null) {
433
+ return;
347
434
  }
348
- prevProps.current = props;
349
- });
435
+ const i = setInterval(async () => {
436
+ const result = await callbackRef.current?.();
437
+ if (result === false) {
438
+ clearInterval(i);
439
+ }
440
+ }, delay);
441
+ return () => clearInterval(i);
442
+ }, [
443
+ delay,
444
+ ...deps
445
+ ]);
350
446
  };
351
447
 
352
448
  // src/useTransitions.ts
353
- import { useEffect as useEffect12, useRef as useRef7, useState as useState7 } from "react";
354
- var isFunction = (functionToCheck) => {
449
+ import { useEffect as useEffect11, useRef as useRef7, useState as useState9 } from "react";
450
+ var isFunction2 = (functionToCheck) => {
355
451
  return functionToCheck instanceof Function;
356
452
  };
357
453
  var useDidTransition = (currentValue, fromValue, toValue) => {
358
- const [hasTransitioned, setHasTransitioned] = useState7(false);
454
+ const [hasTransitioned, setHasTransitioned] = useState9(false);
359
455
  const previousValue = useRef7(currentValue);
360
- useEffect12(() => {
361
- const toValueValid = isFunction(toValue) ? toValue(currentValue) : toValue === currentValue;
362
- const fromValueValid = isFunction(fromValue) ? fromValue(previousValue.current) : fromValue === previousValue.current;
456
+ useEffect11(() => {
457
+ const toValueValid = isFunction2(toValue) ? toValue(currentValue) : toValue === currentValue;
458
+ const fromValueValid = isFunction2(fromValue) ? fromValue(previousValue.current) : fromValue === previousValue.current;
363
459
  if (fromValueValid && toValueValid && !hasTransitioned) {
364
460
  setHasTransitioned(true);
365
461
  } else if ((!fromValueValid || !toValueValid) && hasTransitioned) {
@@ -377,13 +473,13 @@ var useDidTransition = (currentValue, fromValue, toValue) => {
377
473
  var useOnTransition = (currentValue, fromValue, toValue, callback) => {
378
474
  const dirty = useRef7(false);
379
475
  const hasTransitioned = useDidTransition(currentValue, fromValue, toValue);
380
- useEffect12(() => {
476
+ useEffect11(() => {
381
477
  dirty.current = false;
382
478
  }, [
383
479
  currentValue,
384
480
  dirty
385
481
  ]);
386
- useEffect12(() => {
482
+ useEffect11(() => {
387
483
  if (hasTransitioned && !dirty.current) {
388
484
  callback();
389
485
  dirty.current = true;
@@ -396,11 +492,15 @@ var useOnTransition = (currentValue, fromValue, toValue, callback) => {
396
492
  };
397
493
  export {
398
494
  makeId,
495
+ mergeRefs,
399
496
  randomString,
497
+ setRef,
400
498
  useAsyncEffect,
401
499
  useAsyncState,
500
+ useAtomState,
501
+ useComposedRefs,
402
502
  useControlledState,
403
- useDebugReactDeps,
503
+ useDebugDeps,
404
504
  useDefaultValue,
405
505
  useDefaults,
406
506
  useDidTransition,
@@ -408,13 +508,17 @@ export {
408
508
  useFileDownload,
409
509
  useForwardedRef,
410
510
  useId,
511
+ useInterval,
411
512
  useIsFocused,
412
513
  useMediaQuery,
514
+ useMergeRefs,
413
515
  useMulticastObservable,
414
516
  useOnTransition,
415
517
  useRefCallback,
416
- useResize,
518
+ useScroller,
519
+ useSize,
520
+ useStateWithRef,
417
521
  useTimeout,
418
- useTrackProps
522
+ useViewportResize
419
523
  };
420
524
  //# sourceMappingURL=index.mjs.map