@dxos/react-hooks 0.8.4-main.dedc0f3 → 0.8.4-main.dfabb4ec29

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