@dxos/react-hooks 0.8.3 → 0.8.4-main.1c7ec43d41

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 (71) hide show
  1. package/README.md +1 -0
  2. package/dist/lib/browser/index.mjs +253 -141
  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 +253 -141
  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 +7 -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 +6 -0
  21. package/dist/types/src/useDefaults.d.ts.map +1 -0
  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 +3 -0
  34. package/dist/types/src/useTimeout.d.ts.map +1 -0
  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 +21 -14
  41. package/src/index.ts +8 -3
  42. package/src/useAsyncEffect.ts +19 -49
  43. package/src/useAsyncState.ts +2 -1
  44. package/src/useAtomState.ts +23 -0
  45. package/src/useControlledState.ts +26 -7
  46. package/src/useDebugDeps.ts +35 -0
  47. package/src/useDefaultValue.ts +1 -2
  48. package/src/useDefaults.ts +14 -0
  49. package/src/useDynamicRef.ts +26 -5
  50. package/src/useForwardedRef.ts +50 -13
  51. package/src/useId.ts +3 -2
  52. package/src/useIsFocused.ts +3 -3
  53. package/src/useMediaQuery.ts +8 -9
  54. package/src/{useMulticastObservable.test.tsx → useMulticastObservable.test.ts} +1 -3
  55. package/src/useTimeout.ts +46 -0
  56. package/src/useTransitions.ts +4 -2
  57. package/src/{useResize.ts → useViewportResize.ts} +4 -4
  58. package/dist/lib/node/index.cjs +0 -413
  59. package/dist/lib/node/index.cjs.map +0 -7
  60. package/dist/lib/node/meta.json +0 -1
  61. package/dist/types/src/useAsyncEffect.test.d.ts +0 -2
  62. package/dist/types/src/useAsyncEffect.test.d.ts.map +0 -1
  63. package/dist/types/src/useDebugReactDeps.d.ts +0 -6
  64. package/dist/types/src/useDebugReactDeps.d.ts.map +0 -1
  65. package/dist/types/src/useResize.d.ts +0 -3
  66. package/dist/types/src/useResize.d.ts.map +0 -1
  67. package/dist/types/src/useTrackProps.d.ts +0 -5
  68. package/dist/types/src/useTrackProps.d.ts.map +0 -1
  69. package/src/useAsyncEffect.test.tsx +0 -51
  70. package/src/useDebugReactDeps.ts +0 -27
  71. package/src/useTrackProps.ts +0 -40
@@ -1,37 +1,53 @@
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/index.ts
4
+ import { useComposedRefs } from "@radix-ui/react-compose-refs";
5
+ import { useSize, useScroller } from "mini-virtual-list";
6
+
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
- // packages/ui/primitives/react-hooks/src/useAsyncState.ts
29
- import { useEffect as useEffect2, useState } from "react";
44
+ // src/useAsyncState.ts
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
- queueMicrotask(async () => {
50
+ const t = setTimeout(async () => {
35
51
  const data = await cb();
36
52
  if (!disposed) {
37
53
  setValue(data);
@@ -39,6 +55,7 @@ var useAsyncState = (cb, deps = []) => {
39
55
  });
40
56
  return () => {
41
57
  disposed = true;
58
+ clearTimeout(t);
42
59
  };
43
60
  }, deps);
44
61
  return [
@@ -47,50 +64,102 @@ var useAsyncState = (cb, deps = []) => {
47
64
  ];
48
65
  };
49
66
 
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);
67
+ // src/useControlledState.ts
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);
57
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;
58
96
  }, [
59
- controlledValue,
60
- ...deps
97
+ value
98
+ ]);
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);
107
+ }, [
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
61
119
  ]);
62
120
  return [
63
121
  value,
64
122
  setValue
65
123
  ];
66
124
  };
125
+ function isFunction(value) {
126
+ return typeof value === "function";
127
+ }
67
128
 
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
- });
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 = {};
77
139
  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]
81
- });
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);
82
149
  }
83
- console.groupEnd();
84
150
  lastDeps.current = deps;
85
- }, deps);
151
+ }, [
152
+ ...deps,
153
+ active
154
+ ]);
86
155
  };
87
156
 
88
- // packages/ui/primitives/react-hooks/src/useDefaultValue.ts
89
- import { useEffect as useEffect5, useState as useState3, useMemo } from "react";
157
+ // src/useDefaultValue.ts
158
+ import { useEffect as useEffect6, useMemo as useMemo2, useState as useState5 } from "react";
90
159
  var useDefaultValue = (reactiveValue, getDefaultValue) => {
91
- const stableDefaultValue = useMemo(getDefaultValue, []);
92
- const [value, setValue] = useState3(reactiveValue ?? stableDefaultValue);
93
- useEffect5(() => {
160
+ const stableDefaultValue = useMemo2(getDefaultValue, []);
161
+ const [value, setValue] = useState5(reactiveValue ?? stableDefaultValue);
162
+ useEffect6(() => {
94
163
  setValue(reactiveValue ?? stableDefaultValue);
95
164
  }, [
96
165
  reactiveValue,
@@ -99,22 +168,20 @@ var useDefaultValue = (reactiveValue, getDefaultValue) => {
99
168
  return value;
100
169
  };
101
170
 
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
171
+ // src/useDefaults.ts
172
+ import defaultsDeep from "lodash.defaultsdeep";
173
+ import { useMemo as useMemo3 } from "react";
174
+ var useDefaults = (value, defaults) => {
175
+ return useMemo3(() => defaultsDeep({}, defaults, value), [
176
+ value,
177
+ defaults
110
178
  ]);
111
- return ref;
112
179
  };
113
180
 
114
- // packages/ui/primitives/react-hooks/src/useFileDownload.ts
115
- import { useMemo as useMemo2 } from "react";
181
+ // src/useFileDownload.ts
182
+ import { useMemo as useMemo4 } from "react";
116
183
  var useFileDownload = () => {
117
- return useMemo2(() => (data, filename) => {
184
+ return useMemo4(() => (data, filename) => {
118
185
  const url = typeof data === "string" ? data : URL.createObjectURL(data);
119
186
  const element = document.createElement("a");
120
187
  element.setAttribute("href", url);
@@ -124,39 +191,62 @@ var useFileDownload = () => {
124
191
  }, []);
125
192
  };
126
193
 
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);
194
+ // src/useForwardedRef.ts
195
+ import { useEffect as useEffect7, useMemo as useMemo5, useRef as useRef4 } from "react";
196
+ var useForwardedRef = (forwardedRef) => {
197
+ const localRef = useRef4(null);
131
198
  useEffect7(() => {
132
- if (!ref) {
133
- return;
134
- }
135
- if (typeof ref === "function") {
136
- ref(innerRef.current);
137
- } else {
138
- 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));
139
218
  }
140
- });
141
- 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
+ ]);
142
230
  };
143
231
 
144
- // packages/ui/primitives/react-hooks/src/useId.ts
232
+ // src/useId.ts
145
233
  import alea from "alea";
146
- import { useMemo as useMemo3 } from "react";
234
+ import { useMemo as useMemo6 } from "react";
147
235
  var Alea = alea;
148
236
  var prng = new Alea("@dxos/react-hooks");
149
237
  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
- ]);
238
+ var useId = (namespace, propsId, opts) => {
239
+ return useMemo6(() => makeId(namespace, propsId, opts), [
240
+ propsId
241
+ ]);
242
+ };
153
243
  var makeId = (namespace, propsId, opts) => propsId ?? `${namespace}-${randomString(opts?.n ?? 4)}`;
154
244
 
155
- // packages/ui/primitives/react-hooks/src/useIsFocused.ts
156
- import { useEffect as useEffect8, useRef as useRef4, useState as useState4 } from "react";
245
+ // src/useIsFocused.ts
246
+ import { useEffect as useEffect8, useRef as useRef5, useState as useState6 } from "react";
157
247
  var useIsFocused = (inputRef) => {
158
- const [isFocused, setIsFocused] = useState4(void 0);
159
- const isFocusedRef = useRef4(isFocused);
248
+ const [isFocused, setIsFocused] = useState6(void 0);
249
+ const isFocusedRef = useRef5(isFocused);
160
250
  isFocusedRef.current = isFocused;
161
251
  useEffect8(() => {
162
252
  const input = inputRef.current;
@@ -181,8 +271,8 @@ var useIsFocused = (inputRef) => {
181
271
  return isFocused;
182
272
  };
183
273
 
184
- // packages/ui/primitives/react-hooks/src/useMediaQuery.ts
185
- import { useEffect as useEffect9, useState as useState5 } from "react";
274
+ // src/useMediaQuery.ts
275
+ import { useEffect as useEffect9, useState as useState7 } from "react";
186
276
  var breakpointMediaQueries = {
187
277
  sm: "(min-width: 640px)",
188
278
  md: "(min-width: 768px)",
@@ -191,7 +281,7 @@ var breakpointMediaQueries = {
191
281
  "2xl": "(min-width: 1536px)"
192
282
  };
193
283
  var useMediaQuery = (query, options = {}) => {
194
- const { ssr = true, fallback } = options;
284
+ const { ssr = false, fallback } = options;
195
285
  const queries = (Array.isArray(query) ? query : [
196
286
  query
197
287
  ]).map((query2) => query2 in breakpointMediaQueries ? breakpointMediaQueries[query2] : query2);
@@ -199,7 +289,7 @@ var useMediaQuery = (query, options = {}) => {
199
289
  fallback
200
290
  ];
201
291
  fallbackValues = fallbackValues.filter((v) => v != null);
202
- const [value, setValue] = useState5(() => {
292
+ const [value, setValue] = useState7(() => {
203
293
  return queries.map((query2, index) => ({
204
294
  media: query2,
205
295
  matches: ssr ? !!fallbackValues[index] : document.defaultView?.matchMedia(query2).matches
@@ -246,10 +336,10 @@ var useMediaQuery = (query, options = {}) => {
246
336
  return value.map((item) => !!item.matches);
247
337
  };
248
338
 
249
- // packages/ui/primitives/react-hooks/src/useMulticastObservable.ts
250
- import { useMemo as useMemo4, useSyncExternalStore } from "react";
339
+ // src/useMulticastObservable.ts
340
+ import { useMemo as useMemo7, useSyncExternalStore } from "react";
251
341
  var useMulticastObservable = (observable) => {
252
- const subscribeFn = useMemo4(() => (listener) => {
342
+ const subscribeFn = useMemo7(() => (listener) => {
253
343
  const subscription = observable.subscribe(listener);
254
344
  return () => subscription.unsubscribe();
255
345
  }, [
@@ -258,29 +348,29 @@ var useMulticastObservable = (observable) => {
258
348
  return useSyncExternalStore(subscribeFn, () => observable.get());
259
349
  };
260
350
 
261
- // packages/ui/primitives/react-hooks/src/useRefCallback.ts
262
- import { useState as useState6 } from "react";
351
+ // src/useRefCallback.ts
352
+ import { useState as useState8 } from "react";
263
353
  var useRefCallback = () => {
264
- const [value, setValue] = useState6(null);
354
+ const [value, setValue] = useState8(null);
265
355
  return {
266
356
  refCallback: (value2) => setValue(value2),
267
357
  value
268
358
  };
269
359
  };
270
360
 
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(() => {
361
+ // src/useViewportResize.ts
362
+ import { useLayoutEffect, useMemo as useMemo8 } from "react";
363
+ var useViewportResize = (cb, deps = [], delay = 800) => {
364
+ const debouncedHandler = useMemo8(() => {
275
365
  let timeout;
276
366
  return (event) => {
277
367
  clearTimeout(timeout);
278
368
  timeout = setTimeout(() => {
279
- handler(event);
369
+ cb(event);
280
370
  }, delay);
281
371
  };
282
372
  }, [
283
- handler,
373
+ cb,
284
374
  delay
285
375
  ]);
286
376
  return useLayoutEffect(() => {
@@ -293,49 +383,61 @@ var useResize = (handler, deps = [], delay = 800) => {
293
383
  ]);
294
384
  };
295
385
 
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);
386
+ // src/useTimeout.ts
387
+ import { useEffect as useEffect10, useRef as useRef6 } from "react";
388
+ var useTimeout = (callback, delay = 0, deps = []) => {
389
+ const callbackRef = useRef6(callback);
302
390
  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
- }
391
+ callbackRef.current = callback;
392
+ }, [
393
+ callback
394
+ ]);
395
+ useEffect10(() => {
396
+ if (delay == null) {
397
+ return;
323
398
  }
324
- prevProps.current = props;
325
- });
399
+ const t = setTimeout(() => callbackRef.current?.(), delay);
400
+ return () => clearTimeout(t);
401
+ }, [
402
+ delay,
403
+ ...deps
404
+ ]);
405
+ };
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;
416
+ }
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
+ ]);
326
428
  };
327
429
 
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) => {
430
+ // src/useTransitions.ts
431
+ import { useEffect as useEffect11, useRef as useRef7, useState as useState9 } from "react";
432
+ var isFunction2 = (functionToCheck) => {
331
433
  return functionToCheck instanceof Function;
332
434
  };
333
435
  var useDidTransition = (currentValue, fromValue, toValue) => {
334
- const [hasTransitioned, setHasTransitioned] = useState7(false);
335
- const previousValue = useRef6(currentValue);
436
+ const [hasTransitioned, setHasTransitioned] = useState9(false);
437
+ const previousValue = useRef7(currentValue);
336
438
  useEffect11(() => {
337
- const toValueValid = isFunction(toValue) ? toValue(currentValue) : toValue === currentValue;
338
- const fromValueValid = isFunction(fromValue) ? fromValue(previousValue.current) : fromValue === previousValue.current;
439
+ const toValueValid = isFunction2(toValue) ? toValue(currentValue) : toValue === currentValue;
440
+ const fromValueValid = isFunction2(fromValue) ? fromValue(previousValue.current) : fromValue === previousValue.current;
339
441
  if (fromValueValid && toValueValid && !hasTransitioned) {
340
442
  setHasTransitioned(true);
341
443
  } else if ((!fromValueValid || !toValueValid) && hasTransitioned) {
@@ -351,7 +453,7 @@ var useDidTransition = (currentValue, fromValue, toValue) => {
351
453
  return hasTransitioned;
352
454
  };
353
455
  var useOnTransition = (currentValue, fromValue, toValue, callback) => {
354
- const dirty = useRef6(false);
456
+ const dirty = useRef7(false);
355
457
  const hasTransitioned = useDidTransition(currentValue, fromValue, toValue);
356
458
  useEffect11(() => {
357
459
  dirty.current = false;
@@ -372,23 +474,33 @@ var useOnTransition = (currentValue, fromValue, toValue, callback) => {
372
474
  };
373
475
  export {
374
476
  makeId,
477
+ mergeRefs,
375
478
  randomString,
479
+ setRef,
376
480
  useAsyncEffect,
377
481
  useAsyncState,
482
+ useAtomState,
483
+ useComposedRefs,
378
484
  useControlledState,
379
- useDebugReactDeps,
485
+ useDebugDeps,
380
486
  useDefaultValue,
487
+ useDefaults,
381
488
  useDidTransition,
382
489
  useDynamicRef,
383
490
  useFileDownload,
384
491
  useForwardedRef,
385
492
  useId,
493
+ useInterval,
386
494
  useIsFocused,
387
495
  useMediaQuery,
496
+ useMergeRefs,
388
497
  useMulticastObservable,
389
498
  useOnTransition,
390
499
  useRefCallback,
391
- useResize,
392
- useTrackProps
500
+ useScroller,
501
+ useSize,
502
+ useStateWithRef,
503
+ useTimeout,
504
+ useViewportResize
393
505
  };
394
506
  //# sourceMappingURL=index.mjs.map