@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.
- package/README.md +1 -0
- package/dist/lib/browser/index.mjs +180 -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 +180 -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,102 @@ 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 __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
|
-
|
|
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
|
-
|
|
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
|
-
},
|
|
150
|
+
}, [
|
|
151
|
+
...deps,
|
|
152
|
+
active
|
|
153
|
+
]);
|
|
88
154
|
};
|
|
89
155
|
|
|
90
156
|
// src/useDefaultValue.ts
|
|
91
|
-
import { useEffect as
|
|
157
|
+
import { useEffect as useEffect6, useMemo as useMemo2, useState as useState5 } from "react";
|
|
92
158
|
var useDefaultValue = (reactiveValue, getDefaultValue) => {
|
|
93
|
-
const stableDefaultValue =
|
|
94
|
-
const [value, setValue] =
|
|
95
|
-
|
|
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
|
|
172
|
+
import { useMemo as useMemo3 } from "react";
|
|
107
173
|
var useDefaults = (value, defaults) => {
|
|
108
|
-
return
|
|
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
|
|
181
|
+
import { useMemo as useMemo4 } from "react";
|
|
149
182
|
var useFileDownload = () => {
|
|
150
|
-
return
|
|
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
|
|
162
|
-
var useForwardedRef = (
|
|
163
|
-
const
|
|
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
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
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
|
-
|
|
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
|
|
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) =>
|
|
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
|
|
245
|
+
import { useEffect as useEffect8, useRef as useRef5, useState as useState6 } from "react";
|
|
190
246
|
var useIsFocused = (inputRef) => {
|
|
191
|
-
const [isFocused, setIsFocused] =
|
|
192
|
-
const isFocusedRef =
|
|
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
|
|
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 =
|
|
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] =
|
|
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
|
|
339
|
+
import { useMemo as useMemo7, useSyncExternalStore } from "react";
|
|
284
340
|
var useMulticastObservable = (observable) => {
|
|
285
|
-
const subscribeFn =
|
|
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
|
|
351
|
+
import { useState as useState8 } from "react";
|
|
296
352
|
var useRefCallback = () => {
|
|
297
|
-
const [value, setValue] =
|
|
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/
|
|
305
|
-
import { useLayoutEffect, useMemo as
|
|
306
|
-
var
|
|
307
|
-
const debouncedHandler =
|
|
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
|
-
|
|
368
|
+
cb(event);
|
|
313
369
|
}, delay);
|
|
314
370
|
};
|
|
315
371
|
}, [
|
|
316
|
-
|
|
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
|
|
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
|
-
|
|
389
|
+
useEffect10(() => {
|
|
357
390
|
callbackRef.current = callback;
|
|
358
391
|
}, [
|
|
359
392
|
callback
|
|
360
393
|
]);
|
|
361
|
-
|
|
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
|
-
|
|
407
|
+
useEffect10(() => {
|
|
375
408
|
callbackRef.current = callback;
|
|
376
409
|
}, [
|
|
377
410
|
callback
|
|
378
411
|
]);
|
|
379
|
-
|
|
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
|
|
430
|
-
var
|
|
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] =
|
|
435
|
-
const previousValue =
|
|
436
|
-
|
|
437
|
-
const toValueValid =
|
|
438
|
-
const fromValueValid =
|
|
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 =
|
|
455
|
+
const dirty = useRef7(false);
|
|
455
456
|
const hasTransitioned = useDidTransition(currentValue, fromValue, toValue);
|
|
456
|
-
|
|
457
|
+
useEffect11(() => {
|
|
457
458
|
dirty.current = false;
|
|
458
459
|
}, [
|
|
459
460
|
currentValue,
|
|
460
461
|
dirty
|
|
461
462
|
]);
|
|
462
|
-
|
|
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
|
-
|
|
494
|
-
|
|
495
|
-
useSignalsMemo,
|
|
499
|
+
useScroller,
|
|
500
|
+
useSize,
|
|
496
501
|
useStateWithRef,
|
|
497
502
|
useTimeout,
|
|
498
|
-
|
|
503
|
+
useViewportResize
|
|
499
504
|
};
|
|
500
505
|
//# sourceMappingURL=index.mjs.map
|