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