@dxos/react-hooks 0.8.4-main.f9ba587 → 0.8.4-main.fcc0d83b33

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