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