@dxos/react-hooks 0.8.4-main.f5c0578 → 0.8.4-main.fbb7a13
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/dist/lib/browser/index.mjs +169 -124
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +169 -124
- 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 +3 -3
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/useAsyncEffect.d.ts +7 -1
- package/dist/types/src/useAsyncEffect.d.ts.map +1 -1
- package/dist/types/src/useControlledState.d.ts +2 -1
- package/dist/types/src/useControlledState.d.ts.map +1 -1
- package/dist/types/src/useDebugDeps.d.ts +6 -0
- package/dist/types/src/useDebugDeps.d.ts.map +1 -0
- package/dist/types/src/useDynamicRef.d.ts +6 -1
- 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.test.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 +16 -11
- package/src/index.ts +4 -3
- package/src/useAsyncEffect.ts +24 -6
- package/src/useControlledState.ts +22 -11
- package/src/useDebugDeps.ts +35 -0
- package/src/useDynamicRef.ts +26 -5
- package/src/useForwardedRef.ts +48 -13
- package/src/useId.ts +3 -2
- package/src/useIsFocused.ts +1 -1
- 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/useDebugReactDeps.d.ts +0 -6
- package/dist/types/src/useDebugReactDeps.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/useTrackProps.d.ts +0 -5
- package/dist/types/src/useTrackProps.d.ts.map +0 -1
- package/src/useDebugReactDeps.ts +0 -27
- package/src/useTrackProps.ts +0 -40
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"src/useAsyncEffect.ts":{"bytes":
|
|
1
|
+
{"inputs":{"src/useAsyncEffect.ts":{"bytes":2994,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/useAsyncState.ts":{"bytes":2583,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/useDynamicRef.ts":{"bytes":3588,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/useControlledState.ts":{"bytes":3703,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"src/useDynamicRef.ts","kind":"import-statement","original":"./useDynamicRef"}],"format":"esm"},"src/useDebugDeps.ts":{"bytes":3943,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"src/useDefaultValue.ts":{"bytes":4039,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/useDefaults.ts":{"bytes":1597,"imports":[{"path":"lodash.defaultsdeep","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/useFileDownload.ts":{"bytes":2677,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/useForwardedRef.ts":{"bytes":6112,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/useId.ts":{"bytes":2520,"imports":[{"path":"alea","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/useIsFocused.ts":{"bytes":3927,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/useMediaQuery.ts":{"bytes":9262,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/useMulticastObservable.ts":{"bytes":2978,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/useRefCallback.ts":{"bytes":1824,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/useViewportResize.ts":{"bytes":2841,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/useTimeout.ts":{"bytes":3962,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/useTransitions.ts":{"bytes":7869,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":2366,"imports":[{"path":"src/useAsyncEffect.ts","kind":"import-statement","original":"./useAsyncEffect"},{"path":"src/useAsyncState.ts","kind":"import-statement","original":"./useAsyncState"},{"path":"src/useControlledState.ts","kind":"import-statement","original":"./useControlledState"},{"path":"src/useDebugDeps.ts","kind":"import-statement","original":"./useDebugDeps"},{"path":"src/useDefaultValue.ts","kind":"import-statement","original":"./useDefaultValue"},{"path":"src/useDefaults.ts","kind":"import-statement","original":"./useDefaults"},{"path":"src/useDynamicRef.ts","kind":"import-statement","original":"./useDynamicRef"},{"path":"src/useFileDownload.ts","kind":"import-statement","original":"./useFileDownload"},{"path":"src/useForwardedRef.ts","kind":"import-statement","original":"./useForwardedRef"},{"path":"src/useId.ts","kind":"import-statement","original":"./useId"},{"path":"src/useIsFocused.ts","kind":"import-statement","original":"./useIsFocused"},{"path":"src/useMediaQuery.ts","kind":"import-statement","original":"./useMediaQuery"},{"path":"src/useMulticastObservable.ts","kind":"import-statement","original":"./useMulticastObservable"},{"path":"src/useRefCallback.ts","kind":"import-statement","original":"./useRefCallback"},{"path":"src/useViewportResize.ts","kind":"import-statement","original":"./useViewportResize"},{"path":"src/useTimeout.ts","kind":"import-statement","original":"./useTimeout"},{"path":"src/useTransitions.ts","kind":"import-statement","original":"./useTransitions"},{"path":"mini-virtual-list","kind":"import-statement","external":true}],"format":"esm"}},"outputs":{"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":33857},"dist/lib/browser/index.mjs":{"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"lodash.defaultsdeep","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"alea","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"mini-virtual-list","kind":"import-statement","external":true}],"exports":["makeId","mergeRefs","randomString","setRef","useAsyncEffect","useAsyncState","useControlledState","useDebugDeps","useDefaultValue","useDefaults","useDidTransition","useDynamicRef","useFileDownload","useForwardedRef","useId","useInterval","useIsFocused","useMediaQuery","useMergeRefs","useMulticastObservable","useOnTransition","useRefCallback","useScroller","useSize","useStateWithRef","useTimeout","useViewportResize"],"entryPoint":"src/index.ts","inputs":{"src/useAsyncEffect.ts":{"bytesInOutput":405},"src/index.ts":{"bytesInOutput":58},"src/useAsyncState.ts":{"bytesInOutput":447},"src/useControlledState.ts":{"bytesInOutput":756},"src/useDynamicRef.ts":{"bytesInOutput":724},"src/useDebugDeps.ts":{"bytesInOutput":966},"src/useDefaultValue.ts":{"bytesInOutput":422},"src/useDefaults.ts":{"bytesInOutput":228},"src/useFileDownload.ts":{"bytesInOutput":416},"src/useForwardedRef.ts":{"bytesInOutput":840},"src/useId.ts":{"bytesInOutput":421},"src/useIsFocused.ts":{"bytesInOutput":833},"src/useMediaQuery.ts":{"bytesInOutput":1941},"src/useMulticastObservable.ts":{"bytesInOutput":368},"src/useRefCallback.ts":{"bytesInOutput":197},"src/useViewportResize.ts":{"bytesInOutput":612},"src/useTimeout.ts":{"bytesInOutput":946},"src/useTransitions.ts":{"bytesInOutput":1409}},"bytes":12965}}}
|
|
@@ -2,13 +2,21 @@ import { createRequire } from 'node:module';const require = createRequire(import
|
|
|
2
2
|
|
|
3
3
|
// src/useAsyncEffect.ts
|
|
4
4
|
import { useEffect } from "react";
|
|
5
|
-
var useAsyncEffect = (
|
|
5
|
+
var useAsyncEffect = (cb, deps) => {
|
|
6
6
|
useEffect(() => {
|
|
7
|
-
const
|
|
8
|
-
|
|
7
|
+
const controller = new AbortController();
|
|
8
|
+
let cleanup;
|
|
9
|
+
const t = setTimeout(async () => {
|
|
10
|
+
if (!controller.signal.aborted) {
|
|
11
|
+
cleanup = await cb(controller);
|
|
12
|
+
}
|
|
9
13
|
});
|
|
10
|
-
return () =>
|
|
11
|
-
|
|
14
|
+
return () => {
|
|
15
|
+
clearTimeout(t);
|
|
16
|
+
controller.abort();
|
|
17
|
+
cleanup?.();
|
|
18
|
+
};
|
|
19
|
+
}, deps ?? []);
|
|
12
20
|
};
|
|
13
21
|
|
|
14
22
|
// src/useAsyncState.ts
|
|
@@ -35,55 +43,107 @@ var useAsyncState = (cb, deps = []) => {
|
|
|
35
43
|
};
|
|
36
44
|
|
|
37
45
|
// src/useControlledState.ts
|
|
38
|
-
import { useEffect as
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
46
|
+
import { useCallback as useCallback2, useEffect as useEffect4, useRef as useRef2, useState as useState3 } from "react";
|
|
47
|
+
|
|
48
|
+
// src/useDynamicRef.ts
|
|
49
|
+
import { useCallback, useEffect as useEffect3, useRef, useState as useState2 } from "react";
|
|
50
|
+
var useStateWithRef = (valueProp) => {
|
|
51
|
+
const [value, setValue] = useState2(valueProp);
|
|
52
|
+
const valueRef = useRef(valueProp);
|
|
53
|
+
const setter = useCallback((value2) => {
|
|
54
|
+
if (typeof value2 === "function") {
|
|
55
|
+
setValue((current) => {
|
|
56
|
+
valueRef.current = value2(current);
|
|
57
|
+
return valueRef.current;
|
|
58
|
+
});
|
|
59
|
+
} else {
|
|
60
|
+
valueRef.current = value2;
|
|
61
|
+
setValue(value2);
|
|
44
62
|
}
|
|
63
|
+
}, []);
|
|
64
|
+
return [
|
|
65
|
+
value,
|
|
66
|
+
setter,
|
|
67
|
+
valueRef
|
|
68
|
+
];
|
|
69
|
+
};
|
|
70
|
+
var useDynamicRef = (value) => {
|
|
71
|
+
const valueRef = useRef(value);
|
|
72
|
+
useEffect3(() => {
|
|
73
|
+
valueRef.current = value;
|
|
45
74
|
}, [
|
|
46
|
-
|
|
47
|
-
...deps
|
|
75
|
+
value
|
|
48
76
|
]);
|
|
49
|
-
|
|
50
|
-
|
|
77
|
+
return valueRef;
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
// src/useControlledState.ts
|
|
81
|
+
var useControlledState = (valueProp, onChange) => {
|
|
82
|
+
const [value, setControlledValue] = useState3(valueProp);
|
|
83
|
+
useEffect4(() => {
|
|
84
|
+
setControlledValue(valueProp);
|
|
51
85
|
}, [
|
|
52
|
-
|
|
53
|
-
|
|
86
|
+
valueProp
|
|
87
|
+
]);
|
|
88
|
+
const onChangeRef = useRef2(onChange);
|
|
89
|
+
const valueRef = useDynamicRef(valueProp);
|
|
90
|
+
const setValue = useCallback2((nextValue) => {
|
|
91
|
+
const value2 = isFunction(nextValue) ? nextValue(valueRef.current) : nextValue;
|
|
92
|
+
setControlledValue(value2);
|
|
93
|
+
onChangeRef.current?.(value2);
|
|
94
|
+
}, [
|
|
95
|
+
valueRef,
|
|
96
|
+
onChangeRef
|
|
54
97
|
]);
|
|
55
98
|
return [
|
|
56
99
|
value,
|
|
57
100
|
setValue
|
|
58
101
|
];
|
|
59
102
|
};
|
|
103
|
+
function isFunction(value) {
|
|
104
|
+
return typeof value === "function";
|
|
105
|
+
}
|
|
60
106
|
|
|
61
|
-
// src/
|
|
62
|
-
import { useEffect as
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
107
|
+
// src/useDebugDeps.ts
|
|
108
|
+
import { useEffect as useEffect5, useRef as useRef3 } from "react";
|
|
109
|
+
import { log } from "@dxos/log";
|
|
110
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/ui/react-primitives/react-hooks/src/useDebugDeps.ts";
|
|
111
|
+
var useDebugDeps = (deps = [], label = "useDebugDeps", active = true) => {
|
|
112
|
+
const lastDeps = useRef3([]);
|
|
113
|
+
useEffect5(() => {
|
|
114
|
+
if (!active) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
const diff = {};
|
|
70
118
|
for (let i = 0; i < Math.max(lastDeps.current.length ?? 0, deps.length ?? 0); i++) {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
119
|
+
if (lastDeps.current[i] !== deps[i] || i > lastDeps.current.length) {
|
|
120
|
+
diff[i] = {
|
|
121
|
+
previous: lastDeps.current[i],
|
|
122
|
+
current: deps[i]
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
if (Object.keys(diff).length > 0) {
|
|
127
|
+
log.warn(`Updated: ${label} [${lastDeps.current.length}/${deps.length}]`, diff, {
|
|
128
|
+
F: __dxlog_file,
|
|
129
|
+
L: 30,
|
|
130
|
+
S: void 0,
|
|
131
|
+
C: (f, a) => f(...a)
|
|
74
132
|
});
|
|
75
133
|
}
|
|
76
|
-
console.groupEnd();
|
|
77
134
|
lastDeps.current = deps;
|
|
78
|
-
},
|
|
135
|
+
}, [
|
|
136
|
+
...deps,
|
|
137
|
+
active
|
|
138
|
+
]);
|
|
79
139
|
};
|
|
80
140
|
|
|
81
141
|
// src/useDefaultValue.ts
|
|
82
|
-
import { useEffect as
|
|
142
|
+
import { useEffect as useEffect6, useMemo, useState as useState4 } from "react";
|
|
83
143
|
var useDefaultValue = (reactiveValue, getDefaultValue) => {
|
|
84
144
|
const stableDefaultValue = useMemo(getDefaultValue, []);
|
|
85
|
-
const [value, setValue] =
|
|
86
|
-
|
|
145
|
+
const [value, setValue] = useState4(reactiveValue ?? stableDefaultValue);
|
|
146
|
+
useEffect6(() => {
|
|
87
147
|
setValue(reactiveValue ?? stableDefaultValue);
|
|
88
148
|
}, [
|
|
89
149
|
reactiveValue,
|
|
@@ -102,18 +162,6 @@ var useDefaults = (value, defaults) => {
|
|
|
102
162
|
]);
|
|
103
163
|
};
|
|
104
164
|
|
|
105
|
-
// src/useDynamicRef.ts
|
|
106
|
-
import { useEffect as useEffect6, useRef as useRef2 } from "react";
|
|
107
|
-
var useDynamicRef = (value) => {
|
|
108
|
-
const ref = useRef2(value);
|
|
109
|
-
useEffect6(() => {
|
|
110
|
-
ref.current = value;
|
|
111
|
-
}, [
|
|
112
|
-
value
|
|
113
|
-
]);
|
|
114
|
-
return ref;
|
|
115
|
-
};
|
|
116
|
-
|
|
117
165
|
// src/useFileDownload.ts
|
|
118
166
|
import { useMemo as useMemo3 } from "react";
|
|
119
167
|
var useFileDownload = () => {
|
|
@@ -128,38 +176,59 @@ var useFileDownload = () => {
|
|
|
128
176
|
};
|
|
129
177
|
|
|
130
178
|
// src/useForwardedRef.ts
|
|
131
|
-
import { useEffect as useEffect7, useRef as
|
|
132
|
-
var useForwardedRef = (
|
|
133
|
-
const
|
|
179
|
+
import { useEffect as useEffect7, useMemo as useMemo4, useRef as useRef4 } from "react";
|
|
180
|
+
var useForwardedRef = (forwardedRef) => {
|
|
181
|
+
const localRef = useRef4(null);
|
|
134
182
|
useEffect7(() => {
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
183
|
+
setRef(forwardedRef, localRef.current);
|
|
184
|
+
}, [
|
|
185
|
+
forwardedRef
|
|
186
|
+
]);
|
|
187
|
+
return localRef;
|
|
188
|
+
};
|
|
189
|
+
function setRef(ref, value) {
|
|
190
|
+
if (typeof ref === "function") {
|
|
191
|
+
return ref(value);
|
|
192
|
+
} else if (ref) {
|
|
193
|
+
ref.current = value;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
var mergeRefs = (refs) => {
|
|
197
|
+
return (value) => {
|
|
198
|
+
const cleanups = [];
|
|
199
|
+
for (const ref of refs) {
|
|
200
|
+
const cleanup = setRef(ref, value);
|
|
201
|
+
cleanups.push(typeof cleanup === "function" ? cleanup : () => setRef(ref, null));
|
|
142
202
|
}
|
|
143
|
-
|
|
144
|
-
|
|
203
|
+
return () => {
|
|
204
|
+
for (const cleanup of cleanups) cleanup();
|
|
205
|
+
};
|
|
206
|
+
};
|
|
207
|
+
};
|
|
208
|
+
var useMergeRefs = (refs) => {
|
|
209
|
+
return useMemo4(() => mergeRefs(refs), [
|
|
210
|
+
...refs
|
|
211
|
+
]);
|
|
145
212
|
};
|
|
146
213
|
|
|
147
214
|
// src/useId.ts
|
|
148
215
|
import alea from "alea";
|
|
149
|
-
import { useMemo as
|
|
216
|
+
import { useMemo as useMemo5 } from "react";
|
|
150
217
|
var Alea = alea;
|
|
151
218
|
var prng = new Alea("@dxos/react-hooks");
|
|
152
219
|
var randomString = (n = 4) => prng().toString(16).slice(2, n + 2);
|
|
153
|
-
var useId = (namespace, propsId, opts) =>
|
|
154
|
-
propsId
|
|
155
|
-
|
|
220
|
+
var useId = (namespace, propsId, opts) => {
|
|
221
|
+
return useMemo5(() => makeId(namespace, propsId, opts), [
|
|
222
|
+
propsId
|
|
223
|
+
]);
|
|
224
|
+
};
|
|
156
225
|
var makeId = (namespace, propsId, opts) => propsId ?? `${namespace}-${randomString(opts?.n ?? 4)}`;
|
|
157
226
|
|
|
158
227
|
// src/useIsFocused.ts
|
|
159
|
-
import { useEffect as useEffect8, useRef as
|
|
228
|
+
import { useEffect as useEffect8, useRef as useRef5, useState as useState5 } from "react";
|
|
160
229
|
var useIsFocused = (inputRef) => {
|
|
161
|
-
const [isFocused, setIsFocused] =
|
|
162
|
-
const isFocusedRef =
|
|
230
|
+
const [isFocused, setIsFocused] = useState5(void 0);
|
|
231
|
+
const isFocusedRef = useRef5(isFocused);
|
|
163
232
|
isFocusedRef.current = isFocused;
|
|
164
233
|
useEffect8(() => {
|
|
165
234
|
const input = inputRef.current;
|
|
@@ -185,7 +254,7 @@ var useIsFocused = (inputRef) => {
|
|
|
185
254
|
};
|
|
186
255
|
|
|
187
256
|
// src/useMediaQuery.ts
|
|
188
|
-
import { useEffect as useEffect9, useState as
|
|
257
|
+
import { useEffect as useEffect9, useState as useState6 } from "react";
|
|
189
258
|
var breakpointMediaQueries = {
|
|
190
259
|
sm: "(min-width: 640px)",
|
|
191
260
|
md: "(min-width: 768px)",
|
|
@@ -194,7 +263,7 @@ var breakpointMediaQueries = {
|
|
|
194
263
|
"2xl": "(min-width: 1536px)"
|
|
195
264
|
};
|
|
196
265
|
var useMediaQuery = (query, options = {}) => {
|
|
197
|
-
const { ssr =
|
|
266
|
+
const { ssr = false, fallback } = options;
|
|
198
267
|
const queries = (Array.isArray(query) ? query : [
|
|
199
268
|
query
|
|
200
269
|
]).map((query2) => query2 in breakpointMediaQueries ? breakpointMediaQueries[query2] : query2);
|
|
@@ -202,7 +271,7 @@ var useMediaQuery = (query, options = {}) => {
|
|
|
202
271
|
fallback
|
|
203
272
|
];
|
|
204
273
|
fallbackValues = fallbackValues.filter((v) => v != null);
|
|
205
|
-
const [value, setValue] =
|
|
274
|
+
const [value, setValue] = useState6(() => {
|
|
206
275
|
return queries.map((query2, index) => ({
|
|
207
276
|
media: query2,
|
|
208
277
|
matches: ssr ? !!fallbackValues[index] : document.defaultView?.matchMedia(query2).matches
|
|
@@ -250,9 +319,9 @@ var useMediaQuery = (query, options = {}) => {
|
|
|
250
319
|
};
|
|
251
320
|
|
|
252
321
|
// src/useMulticastObservable.ts
|
|
253
|
-
import { useMemo as
|
|
322
|
+
import { useMemo as useMemo6, useSyncExternalStore } from "react";
|
|
254
323
|
var useMulticastObservable = (observable) => {
|
|
255
|
-
const subscribeFn =
|
|
324
|
+
const subscribeFn = useMemo6(() => (listener) => {
|
|
256
325
|
const subscription = observable.subscribe(listener);
|
|
257
326
|
return () => subscription.unsubscribe();
|
|
258
327
|
}, [
|
|
@@ -262,28 +331,28 @@ var useMulticastObservable = (observable) => {
|
|
|
262
331
|
};
|
|
263
332
|
|
|
264
333
|
// src/useRefCallback.ts
|
|
265
|
-
import { useState as
|
|
334
|
+
import { useState as useState7 } from "react";
|
|
266
335
|
var useRefCallback = () => {
|
|
267
|
-
const [value, setValue] =
|
|
336
|
+
const [value, setValue] = useState7(null);
|
|
268
337
|
return {
|
|
269
338
|
refCallback: (value2) => setValue(value2),
|
|
270
339
|
value
|
|
271
340
|
};
|
|
272
341
|
};
|
|
273
342
|
|
|
274
|
-
// src/
|
|
275
|
-
import { useLayoutEffect, useMemo as
|
|
276
|
-
var
|
|
277
|
-
const debouncedHandler =
|
|
343
|
+
// src/useViewportResize.ts
|
|
344
|
+
import { useLayoutEffect, useMemo as useMemo7 } from "react";
|
|
345
|
+
var useViewportResize = (cb, deps = [], delay = 800) => {
|
|
346
|
+
const debouncedHandler = useMemo7(() => {
|
|
278
347
|
let timeout;
|
|
279
348
|
return (event) => {
|
|
280
349
|
clearTimeout(timeout);
|
|
281
350
|
timeout = setTimeout(() => {
|
|
282
|
-
|
|
351
|
+
cb(event);
|
|
283
352
|
}, delay);
|
|
284
353
|
};
|
|
285
354
|
}, [
|
|
286
|
-
|
|
355
|
+
cb,
|
|
287
356
|
delay
|
|
288
357
|
]);
|
|
289
358
|
return useLayoutEffect(() => {
|
|
@@ -297,9 +366,9 @@ var useResize = (handler, deps = [], delay = 800) => {
|
|
|
297
366
|
};
|
|
298
367
|
|
|
299
368
|
// src/useTimeout.ts
|
|
300
|
-
import { useEffect as useEffect10, useRef as
|
|
369
|
+
import { useEffect as useEffect10, useRef as useRef6 } from "react";
|
|
301
370
|
var useTimeout = (callback, delay = 0, deps = []) => {
|
|
302
|
-
const callbackRef =
|
|
371
|
+
const callbackRef = useRef6(callback);
|
|
303
372
|
useEffect10(() => {
|
|
304
373
|
callbackRef.current = callback;
|
|
305
374
|
}, [
|
|
@@ -317,7 +386,7 @@ var useTimeout = (callback, delay = 0, deps = []) => {
|
|
|
317
386
|
]);
|
|
318
387
|
};
|
|
319
388
|
var useInterval = (callback, delay = 0, deps = []) => {
|
|
320
|
-
const callbackRef =
|
|
389
|
+
const callbackRef = useRef6(callback);
|
|
321
390
|
useEffect10(() => {
|
|
322
391
|
callbackRef.current = callback;
|
|
323
392
|
}, [
|
|
@@ -340,49 +409,17 @@ var useInterval = (callback, delay = 0, deps = []) => {
|
|
|
340
409
|
]);
|
|
341
410
|
};
|
|
342
411
|
|
|
343
|
-
// src/useTrackProps.ts
|
|
344
|
-
import { useEffect as useEffect11, useRef as useRef6 } from "react";
|
|
345
|
-
import { log } from "@dxos/log";
|
|
346
|
-
var __dxlog_file = "/__w/dxos/dxos/packages/ui/primitives/react-hooks/src/useTrackProps.ts";
|
|
347
|
-
var useTrackProps = (props, componentName = "Component", active = true) => {
|
|
348
|
-
const prevProps = useRef6(props);
|
|
349
|
-
useEffect11(() => {
|
|
350
|
-
const changes = Object.entries(props).filter(([key]) => props[key] !== prevProps.current[key]);
|
|
351
|
-
if (changes.length > 0) {
|
|
352
|
-
if (active) {
|
|
353
|
-
log.info("props changed", {
|
|
354
|
-
componentName,
|
|
355
|
-
keys: changes.map(([key]) => key).join(","),
|
|
356
|
-
props: Object.fromEntries(changes.map(([key]) => [
|
|
357
|
-
key,
|
|
358
|
-
{
|
|
359
|
-
from: prevProps.current[key],
|
|
360
|
-
to: props[key]
|
|
361
|
-
}
|
|
362
|
-
]))
|
|
363
|
-
}, {
|
|
364
|
-
F: __dxlog_file,
|
|
365
|
-
L: 22,
|
|
366
|
-
S: void 0,
|
|
367
|
-
C: (f, a) => f(...a)
|
|
368
|
-
});
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
prevProps.current = props;
|
|
372
|
-
});
|
|
373
|
-
};
|
|
374
|
-
|
|
375
412
|
// src/useTransitions.ts
|
|
376
|
-
import { useEffect as
|
|
377
|
-
var
|
|
413
|
+
import { useEffect as useEffect11, useRef as useRef7, useState as useState8 } from "react";
|
|
414
|
+
var isFunction2 = (functionToCheck) => {
|
|
378
415
|
return functionToCheck instanceof Function;
|
|
379
416
|
};
|
|
380
417
|
var useDidTransition = (currentValue, fromValue, toValue) => {
|
|
381
|
-
const [hasTransitioned, setHasTransitioned] =
|
|
418
|
+
const [hasTransitioned, setHasTransitioned] = useState8(false);
|
|
382
419
|
const previousValue = useRef7(currentValue);
|
|
383
|
-
|
|
384
|
-
const toValueValid =
|
|
385
|
-
const fromValueValid =
|
|
420
|
+
useEffect11(() => {
|
|
421
|
+
const toValueValid = isFunction2(toValue) ? toValue(currentValue) : toValue === currentValue;
|
|
422
|
+
const fromValueValid = isFunction2(fromValue) ? fromValue(previousValue.current) : fromValue === previousValue.current;
|
|
386
423
|
if (fromValueValid && toValueValid && !hasTransitioned) {
|
|
387
424
|
setHasTransitioned(true);
|
|
388
425
|
} else if ((!fromValueValid || !toValueValid) && hasTransitioned) {
|
|
@@ -400,13 +437,13 @@ var useDidTransition = (currentValue, fromValue, toValue) => {
|
|
|
400
437
|
var useOnTransition = (currentValue, fromValue, toValue, callback) => {
|
|
401
438
|
const dirty = useRef7(false);
|
|
402
439
|
const hasTransitioned = useDidTransition(currentValue, fromValue, toValue);
|
|
403
|
-
|
|
440
|
+
useEffect11(() => {
|
|
404
441
|
dirty.current = false;
|
|
405
442
|
}, [
|
|
406
443
|
currentValue,
|
|
407
444
|
dirty
|
|
408
445
|
]);
|
|
409
|
-
|
|
446
|
+
useEffect11(() => {
|
|
410
447
|
if (hasTransitioned && !dirty.current) {
|
|
411
448
|
callback();
|
|
412
449
|
dirty.current = true;
|
|
@@ -417,13 +454,18 @@ var useOnTransition = (currentValue, fromValue, toValue, callback) => {
|
|
|
417
454
|
callback
|
|
418
455
|
]);
|
|
419
456
|
};
|
|
457
|
+
|
|
458
|
+
// src/index.ts
|
|
459
|
+
import { useSize, useScroller } from "mini-virtual-list";
|
|
420
460
|
export {
|
|
421
461
|
makeId,
|
|
462
|
+
mergeRefs,
|
|
422
463
|
randomString,
|
|
464
|
+
setRef,
|
|
423
465
|
useAsyncEffect,
|
|
424
466
|
useAsyncState,
|
|
425
467
|
useControlledState,
|
|
426
|
-
|
|
468
|
+
useDebugDeps,
|
|
427
469
|
useDefaultValue,
|
|
428
470
|
useDefaults,
|
|
429
471
|
useDidTransition,
|
|
@@ -434,11 +476,14 @@ export {
|
|
|
434
476
|
useInterval,
|
|
435
477
|
useIsFocused,
|
|
436
478
|
useMediaQuery,
|
|
479
|
+
useMergeRefs,
|
|
437
480
|
useMulticastObservable,
|
|
438
481
|
useOnTransition,
|
|
439
482
|
useRefCallback,
|
|
440
|
-
|
|
483
|
+
useScroller,
|
|
484
|
+
useSize,
|
|
485
|
+
useStateWithRef,
|
|
441
486
|
useTimeout,
|
|
442
|
-
|
|
487
|
+
useViewportResize
|
|
443
488
|
};
|
|
444
489
|
//# sourceMappingURL=index.mjs.map
|