@buoy-gg/shared-ui 5.0.0 → 6.0.1
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/lib/commonjs/JsModal.js +73 -0
- package/lib/commonjs/hooks/safe-area-impl.js +1 -1
- package/lib/commonjs/index.js +14 -0
- package/lib/commonjs/utils/index.js +13 -0
- package/lib/commonjs/utils/renderCaptureRegistry.js +30 -0
- package/lib/commonjs/utils/time/RelativeTime.js +31 -0
- package/lib/commonjs/utils/time/index.js +7 -0
- package/lib/module/JsModal.js +73 -0
- package/lib/module/hooks/safe-area-impl.js +1 -1
- package/lib/module/index.js +2 -0
- package/lib/module/utils/index.js +1 -0
- package/lib/module/utils/renderCaptureRegistry.js +25 -0
- package/lib/module/utils/time/RelativeTime.js +28 -0
- package/lib/module/utils/time/index.js +1 -0
- package/lib/typescript/commonjs/JsModal.d.ts +5 -0
- package/lib/typescript/commonjs/JsModal.d.ts.map +1 -1
- package/lib/typescript/commonjs/hooks/safe-area-impl.d.ts +1 -1
- package/lib/typescript/commonjs/index.d.ts +1 -1
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/CompactRow.d.ts +1 -1
- package/lib/typescript/commonjs/ui/components/CompactRow.d.ts.map +1 -1
- package/lib/typescript/commonjs/utils/index.d.ts +1 -0
- package/lib/typescript/commonjs/utils/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/utils/renderCaptureRegistry.d.ts +56 -0
- package/lib/typescript/commonjs/utils/renderCaptureRegistry.d.ts.map +1 -0
- package/lib/typescript/commonjs/utils/time/RelativeTime.d.ts +19 -0
- package/lib/typescript/commonjs/utils/time/RelativeTime.d.ts.map +1 -0
- package/lib/typescript/commonjs/utils/time/index.d.ts +1 -0
- package/lib/typescript/commonjs/utils/time/index.d.ts.map +1 -1
- package/lib/typescript/module/JsModal.d.ts +5 -0
- package/lib/typescript/module/JsModal.d.ts.map +1 -1
- package/lib/typescript/module/hooks/safe-area-impl.d.ts +1 -1
- package/lib/typescript/module/index.d.ts +1 -1
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/CompactRow.d.ts +1 -1
- package/lib/typescript/module/ui/components/CompactRow.d.ts.map +1 -1
- package/lib/typescript/module/utils/index.d.ts +1 -0
- package/lib/typescript/module/utils/index.d.ts.map +1 -1
- package/lib/typescript/module/utils/renderCaptureRegistry.d.ts +56 -0
- package/lib/typescript/module/utils/renderCaptureRegistry.d.ts.map +1 -0
- package/lib/typescript/module/utils/time/RelativeTime.d.ts +19 -0
- package/lib/typescript/module/utils/time/RelativeTime.d.ts.map +1 -0
- package/lib/typescript/module/utils/time/index.d.ts +1 -0
- package/lib/typescript/module/utils/time/index.d.ts.map +1 -1
- package/package.json +4 -4
package/lib/commonjs/JsModal.js
CHANGED
|
@@ -329,6 +329,7 @@ const JsModalComponent = ({
|
|
|
329
329
|
maxHeight,
|
|
330
330
|
initialHeight = DEFAULT_HEIGHT,
|
|
331
331
|
animatedHeight: externalAnimatedHeight,
|
|
332
|
+
benchMotion,
|
|
332
333
|
initialMode = "bottomSheet",
|
|
333
334
|
onModeChange,
|
|
334
335
|
persistenceKey,
|
|
@@ -751,6 +752,78 @@ const JsModalComponent = ({
|
|
|
751
752
|
// Following the documentation pattern for proper resize
|
|
752
753
|
// ============================================================================
|
|
753
754
|
const headerTouchOffsetRef = (0, _react.useRef)(0);
|
|
755
|
+
|
|
756
|
+
// DEV-ONLY scripted resize motion (see benchMotion prop). Mirrors
|
|
757
|
+
// onPanResponderMove exactly: direct setValue, no per-frame state. Every
|
|
758
|
+
// ~2.5s it simulates a grab/release (setIsResizing toggles) so the
|
|
759
|
+
// benchmark includes the gesture-boundary re-render cost.
|
|
760
|
+
(0, _react.useEffect)(() => {
|
|
761
|
+
if (!__DEV__ || !benchMotion || !visible) return undefined;
|
|
762
|
+
let rafId = null;
|
|
763
|
+
let intervalId = null;
|
|
764
|
+
let running = true;
|
|
765
|
+
const start = Date.now();
|
|
766
|
+
let grabbed = false;
|
|
767
|
+
const setGrab = on => {
|
|
768
|
+
grabbed = on;
|
|
769
|
+
if (benchMotion === "resize" || benchMotion === "float-resize") {
|
|
770
|
+
setIsResizing(on);
|
|
771
|
+
} else if (benchMotion === "float-drag") {
|
|
772
|
+
setIsDragging(on);
|
|
773
|
+
}
|
|
774
|
+
};
|
|
775
|
+
if (benchMotion === "mode-cycle") {
|
|
776
|
+
intervalId = setInterval(() => toggleMode(), 2200);
|
|
777
|
+
} else {
|
|
778
|
+
const min = minHeight;
|
|
779
|
+
const max = effectiveMaxHeight;
|
|
780
|
+
const tick = () => {
|
|
781
|
+
if (!running) return;
|
|
782
|
+
const t = (Date.now() - start) / 1000;
|
|
783
|
+
const phase = t % 2.5; // grab 2s, release 0.5s
|
|
784
|
+
if (phase < 2 && !grabbed) setGrab(true);else if (phase >= 2 && grabbed) setGrab(false);
|
|
785
|
+
if (grabbed) {
|
|
786
|
+
const wave = (Math.sin(t * 2.2) + 1) / 2;
|
|
787
|
+
if (benchMotion === "resize") {
|
|
788
|
+
const targetHeight = min + wave * (max - min);
|
|
789
|
+
animatedBottomPosition.setValue(targetHeight);
|
|
790
|
+
currentHeightRef.current = targetHeight;
|
|
791
|
+
if (externalAnimatedHeight) {
|
|
792
|
+
externalAnimatedHeight.setValue(targetHeight);
|
|
793
|
+
}
|
|
794
|
+
} else if (benchMotion === "float-drag") {
|
|
795
|
+
// Same write DraggableHeader makes per move event.
|
|
796
|
+
const wave2 = (Math.sin(t * 1.7) + 1) / 2;
|
|
797
|
+
floatingPosition.setValue({
|
|
798
|
+
x: 10 + wave * Math.max(SCREEN.width - FLOATING_WIDTH - 20, 0),
|
|
799
|
+
y: 70 + wave2 * 260
|
|
800
|
+
});
|
|
801
|
+
} else if (benchMotion === "float-resize") {
|
|
802
|
+
// Same writes as the bottom-right corner resize handler.
|
|
803
|
+
const width = FLOATING_WIDTH + wave * Math.max(SCREEN.width - FLOATING_WIDTH - 40, 0);
|
|
804
|
+
const height = FLOATING_HEIGHT + wave * 240;
|
|
805
|
+
animatedWidth.setValue(width);
|
|
806
|
+
animatedFloatingHeight.setValue(height);
|
|
807
|
+
currentDimensionsRef.current = {
|
|
808
|
+
...currentDimensionsRef.current,
|
|
809
|
+
width,
|
|
810
|
+
height
|
|
811
|
+
};
|
|
812
|
+
}
|
|
813
|
+
}
|
|
814
|
+
rafId = requestAnimationFrame(tick);
|
|
815
|
+
};
|
|
816
|
+
rafId = requestAnimationFrame(tick);
|
|
817
|
+
}
|
|
818
|
+
return () => {
|
|
819
|
+
running = false;
|
|
820
|
+
if (rafId != null) cancelAnimationFrame(rafId);
|
|
821
|
+
if (intervalId != null) clearInterval(intervalId);
|
|
822
|
+
setIsResizing(false);
|
|
823
|
+
setIsDragging(false);
|
|
824
|
+
};
|
|
825
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
826
|
+
}, [benchMotion, visible]);
|
|
754
827
|
const bottomSheetPanResponder = (0, _react.useMemo)(() => _reactNative.PanResponder.create({
|
|
755
828
|
onStartShouldSetPanResponder: () => !isExternallyControlled && mode === "bottomSheet",
|
|
756
829
|
onMoveShouldSetPanResponder: (evt, gestureState) => !isExternallyControlled && mode === "bottomSheet" && Math.abs(gestureState.dy) > 3,
|
|
@@ -7,7 +7,7 @@ exports.useNativeSafeAreaInsets = exports.safeAreaType = exports.hasSafeAreaPack
|
|
|
7
7
|
/**
|
|
8
8
|
* Auto-generated safe area implementation
|
|
9
9
|
* Detected: none
|
|
10
|
-
* Generated at: 2026-07-
|
|
10
|
+
* Generated at: 2026-07-08T19:02:56.378Z
|
|
11
11
|
*
|
|
12
12
|
* DO NOT EDIT - This file is generated by scripts/detect-safe-area.js
|
|
13
13
|
*
|
package/lib/commonjs/index.js
CHANGED
|
@@ -27,6 +27,8 @@ var _exportNames = {
|
|
|
27
27
|
formatPath: true,
|
|
28
28
|
loadOptionalModule: true,
|
|
29
29
|
getCachedOptionalModule: true,
|
|
30
|
+
setRenderCaptureProvider: true,
|
|
31
|
+
getRenderCaptureProvider: true,
|
|
30
32
|
Subscribable: true,
|
|
31
33
|
subscriberCountNotifier: true,
|
|
32
34
|
subscribeToSubscriberCountChanges: true,
|
|
@@ -211,6 +213,12 @@ Object.defineProperty(exports, "getDeviceInfo", {
|
|
|
211
213
|
return _index1.getDeviceInfo;
|
|
212
214
|
}
|
|
213
215
|
});
|
|
216
|
+
Object.defineProperty(exports, "getRenderCaptureProvider", {
|
|
217
|
+
enumerable: true,
|
|
218
|
+
get: function () {
|
|
219
|
+
return _index3.getRenderCaptureProvider;
|
|
220
|
+
}
|
|
221
|
+
});
|
|
214
222
|
Object.defineProperty(exports, "getSafeAreaInsets", {
|
|
215
223
|
enumerable: true,
|
|
216
224
|
get: function () {
|
|
@@ -361,6 +369,12 @@ Object.defineProperty(exports, "safeStringify", {
|
|
|
361
369
|
return _index3.safeStringify;
|
|
362
370
|
}
|
|
363
371
|
});
|
|
372
|
+
Object.defineProperty(exports, "setRenderCaptureProvider", {
|
|
373
|
+
enumerable: true,
|
|
374
|
+
get: function () {
|
|
375
|
+
return _index3.setRenderCaptureProvider;
|
|
376
|
+
}
|
|
377
|
+
});
|
|
364
378
|
Object.defineProperty(exports, "subscribeToSubscriberCountChanges", {
|
|
365
379
|
enumerable: true,
|
|
366
380
|
get: function () {
|
|
@@ -51,6 +51,12 @@ Object.defineProperty(exports, "getConstructorName", {
|
|
|
51
51
|
return _typeHelpers.getConstructorName;
|
|
52
52
|
}
|
|
53
53
|
});
|
|
54
|
+
Object.defineProperty(exports, "getRenderCaptureProvider", {
|
|
55
|
+
enumerable: true,
|
|
56
|
+
get: function () {
|
|
57
|
+
return _renderCaptureRegistry.getRenderCaptureProvider;
|
|
58
|
+
}
|
|
59
|
+
});
|
|
54
60
|
Object.defineProperty(exports, "getSafeAreaInsets", {
|
|
55
61
|
enumerable: true,
|
|
56
62
|
get: function () {
|
|
@@ -165,6 +171,12 @@ Object.defineProperty(exports, "safeStringify", {
|
|
|
165
171
|
return _safeStringify.safeStringify;
|
|
166
172
|
}
|
|
167
173
|
});
|
|
174
|
+
Object.defineProperty(exports, "setRenderCaptureProvider", {
|
|
175
|
+
enumerable: true,
|
|
176
|
+
get: function () {
|
|
177
|
+
return _renderCaptureRegistry.setRenderCaptureProvider;
|
|
178
|
+
}
|
|
179
|
+
});
|
|
168
180
|
Object.defineProperty(exports, "subscribeToSubscriberCountChanges", {
|
|
169
181
|
enumerable: true,
|
|
170
182
|
get: function () {
|
|
@@ -215,6 +227,7 @@ var _safeStringify = require("./safeStringify.js");
|
|
|
215
227
|
var _typeHelpers = require("./typeHelpers.js");
|
|
216
228
|
var _valueFormatting = require("./valueFormatting.js");
|
|
217
229
|
var _loadOptionalModule = require("./loadOptionalModule.js");
|
|
230
|
+
var _renderCaptureRegistry = require("./renderCaptureRegistry.js");
|
|
218
231
|
var _subscribable = require("./subscribable.js");
|
|
219
232
|
var _subscriberCountNotifier = require("./subscriberCountNotifier.js");
|
|
220
233
|
var _safeExpoRouter = require("./safeExpoRouter.js");
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getRenderCaptureProvider = getRenderCaptureProvider;
|
|
7
|
+
exports.setRenderCaptureProvider = setRenderCaptureProvider;
|
|
8
|
+
/**
|
|
9
|
+
* Cross-package bridge for React render-commit capture.
|
|
10
|
+
*
|
|
11
|
+
* `@buoy-gg/highlight-updates` owns the React DevTools hook plumbing and
|
|
12
|
+
* registers a provider here at module init; `@buoy-gg/perf-monitor` reads the
|
|
13
|
+
* registry when a benchmark recording starts. Neither package imports the
|
|
14
|
+
* other — same optional-capability pattern as PerfMonitorController's
|
|
15
|
+
* `installReaFpsGetter`.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
/** One component's aggregated renders across a capture window. */
|
|
19
|
+
|
|
20
|
+
/** Result of a capture window (one benchmark recording). */
|
|
21
|
+
|
|
22
|
+
let provider = null;
|
|
23
|
+
|
|
24
|
+
/** Register (or clear with null) the active provider. Last registration wins. */
|
|
25
|
+
function setRenderCaptureProvider(p) {
|
|
26
|
+
provider = p;
|
|
27
|
+
}
|
|
28
|
+
function getRenderCaptureProvider() {
|
|
29
|
+
return provider;
|
|
30
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.RelativeTime = RelativeTime;
|
|
7
|
+
var _reactNative = require("react-native");
|
|
8
|
+
var _useRelativeTime = require("./useRelativeTime.js");
|
|
9
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
10
|
+
/**
|
|
11
|
+
* Leaf component that renders a live relative timestamp ("5s ago").
|
|
12
|
+
*
|
|
13
|
+
* Composition-over-memo (rule2): list rows should render THIS instead of
|
|
14
|
+
* calling `useRelativeTime` themselves — the shared TickProvider tick then
|
|
15
|
+
* re-renders only this Text, not the whole (often memoized) row and its
|
|
16
|
+
* icon subtree. Profiling on the Network tool (tool-bench 2026-07-06)
|
|
17
|
+
* showed the tick accounted for ~half of all row re-renders before this
|
|
18
|
+
* isolation.
|
|
19
|
+
*/
|
|
20
|
+
function RelativeTime({
|
|
21
|
+
timestamp,
|
|
22
|
+
style,
|
|
23
|
+
prefix = "",
|
|
24
|
+
suffix = ""
|
|
25
|
+
}) {
|
|
26
|
+
const relative = (0, _useRelativeTime.useRelativeTime)(timestamp);
|
|
27
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
|
|
28
|
+
style: style,
|
|
29
|
+
children: [prefix, relative, suffix]
|
|
30
|
+
});
|
|
31
|
+
}
|
|
@@ -3,6 +3,12 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
Object.defineProperty(exports, "RelativeTime", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _RelativeTime.RelativeTime;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
6
12
|
Object.defineProperty(exports, "TickProvider", {
|
|
7
13
|
enumerable: true,
|
|
8
14
|
get: function () {
|
|
@@ -29,4 +35,5 @@ Object.defineProperty(exports, "useTick", {
|
|
|
29
35
|
});
|
|
30
36
|
var _formatRelativeTime = require("./formatRelativeTime.js");
|
|
31
37
|
var _useRelativeTime = require("./useRelativeTime.js");
|
|
38
|
+
var _RelativeTime = require("./RelativeTime.js");
|
|
32
39
|
var _TickContext = require("./TickContext.js");
|
package/lib/module/JsModal.js
CHANGED
|
@@ -325,6 +325,7 @@ const JsModalComponent = ({
|
|
|
325
325
|
maxHeight,
|
|
326
326
|
initialHeight = DEFAULT_HEIGHT,
|
|
327
327
|
animatedHeight: externalAnimatedHeight,
|
|
328
|
+
benchMotion,
|
|
328
329
|
initialMode = "bottomSheet",
|
|
329
330
|
onModeChange,
|
|
330
331
|
persistenceKey,
|
|
@@ -747,6 +748,78 @@ const JsModalComponent = ({
|
|
|
747
748
|
// Following the documentation pattern for proper resize
|
|
748
749
|
// ============================================================================
|
|
749
750
|
const headerTouchOffsetRef = useRef(0);
|
|
751
|
+
|
|
752
|
+
// DEV-ONLY scripted resize motion (see benchMotion prop). Mirrors
|
|
753
|
+
// onPanResponderMove exactly: direct setValue, no per-frame state. Every
|
|
754
|
+
// ~2.5s it simulates a grab/release (setIsResizing toggles) so the
|
|
755
|
+
// benchmark includes the gesture-boundary re-render cost.
|
|
756
|
+
useEffect(() => {
|
|
757
|
+
if (!__DEV__ || !benchMotion || !visible) return undefined;
|
|
758
|
+
let rafId = null;
|
|
759
|
+
let intervalId = null;
|
|
760
|
+
let running = true;
|
|
761
|
+
const start = Date.now();
|
|
762
|
+
let grabbed = false;
|
|
763
|
+
const setGrab = on => {
|
|
764
|
+
grabbed = on;
|
|
765
|
+
if (benchMotion === "resize" || benchMotion === "float-resize") {
|
|
766
|
+
setIsResizing(on);
|
|
767
|
+
} else if (benchMotion === "float-drag") {
|
|
768
|
+
setIsDragging(on);
|
|
769
|
+
}
|
|
770
|
+
};
|
|
771
|
+
if (benchMotion === "mode-cycle") {
|
|
772
|
+
intervalId = setInterval(() => toggleMode(), 2200);
|
|
773
|
+
} else {
|
|
774
|
+
const min = minHeight;
|
|
775
|
+
const max = effectiveMaxHeight;
|
|
776
|
+
const tick = () => {
|
|
777
|
+
if (!running) return;
|
|
778
|
+
const t = (Date.now() - start) / 1000;
|
|
779
|
+
const phase = t % 2.5; // grab 2s, release 0.5s
|
|
780
|
+
if (phase < 2 && !grabbed) setGrab(true);else if (phase >= 2 && grabbed) setGrab(false);
|
|
781
|
+
if (grabbed) {
|
|
782
|
+
const wave = (Math.sin(t * 2.2) + 1) / 2;
|
|
783
|
+
if (benchMotion === "resize") {
|
|
784
|
+
const targetHeight = min + wave * (max - min);
|
|
785
|
+
animatedBottomPosition.setValue(targetHeight);
|
|
786
|
+
currentHeightRef.current = targetHeight;
|
|
787
|
+
if (externalAnimatedHeight) {
|
|
788
|
+
externalAnimatedHeight.setValue(targetHeight);
|
|
789
|
+
}
|
|
790
|
+
} else if (benchMotion === "float-drag") {
|
|
791
|
+
// Same write DraggableHeader makes per move event.
|
|
792
|
+
const wave2 = (Math.sin(t * 1.7) + 1) / 2;
|
|
793
|
+
floatingPosition.setValue({
|
|
794
|
+
x: 10 + wave * Math.max(SCREEN.width - FLOATING_WIDTH - 20, 0),
|
|
795
|
+
y: 70 + wave2 * 260
|
|
796
|
+
});
|
|
797
|
+
} else if (benchMotion === "float-resize") {
|
|
798
|
+
// Same writes as the bottom-right corner resize handler.
|
|
799
|
+
const width = FLOATING_WIDTH + wave * Math.max(SCREEN.width - FLOATING_WIDTH - 40, 0);
|
|
800
|
+
const height = FLOATING_HEIGHT + wave * 240;
|
|
801
|
+
animatedWidth.setValue(width);
|
|
802
|
+
animatedFloatingHeight.setValue(height);
|
|
803
|
+
currentDimensionsRef.current = {
|
|
804
|
+
...currentDimensionsRef.current,
|
|
805
|
+
width,
|
|
806
|
+
height
|
|
807
|
+
};
|
|
808
|
+
}
|
|
809
|
+
}
|
|
810
|
+
rafId = requestAnimationFrame(tick);
|
|
811
|
+
};
|
|
812
|
+
rafId = requestAnimationFrame(tick);
|
|
813
|
+
}
|
|
814
|
+
return () => {
|
|
815
|
+
running = false;
|
|
816
|
+
if (rafId != null) cancelAnimationFrame(rafId);
|
|
817
|
+
if (intervalId != null) clearInterval(intervalId);
|
|
818
|
+
setIsResizing(false);
|
|
819
|
+
setIsDragging(false);
|
|
820
|
+
};
|
|
821
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
822
|
+
}, [benchMotion, visible]);
|
|
750
823
|
const bottomSheetPanResponder = useMemo(() => PanResponder.create({
|
|
751
824
|
onStartShouldSetPanResponder: () => !isExternallyControlled && mode === "bottomSheet",
|
|
752
825
|
onMoveShouldSetPanResponder: (evt, gestureState) => !isExternallyControlled && mode === "bottomSheet" && Math.abs(gestureState.dy) > 3,
|
package/lib/module/index.js
CHANGED
|
@@ -24,6 +24,8 @@ getValueType, isPrimitive, isJsonSerializable, isValidJson, getConstructorName,
|
|
|
24
24
|
parseValue, formatValue, getTypeColor, truncateText, flattenObject, formatPath,
|
|
25
25
|
// Optional module loading utilities
|
|
26
26
|
loadOptionalModule, getCachedOptionalModule,
|
|
27
|
+
// Render-commit capture bridge (provider: highlight-updates, consumer: perf-monitor)
|
|
28
|
+
setRenderCaptureProvider, getRenderCaptureProvider,
|
|
27
29
|
// Subscribable base class for self-managing listeners
|
|
28
30
|
Subscribable,
|
|
29
31
|
// Subscriber count notifier for cross-package notifications
|
|
@@ -8,6 +8,7 @@ export { safeStringify } from "./safeStringify.js";
|
|
|
8
8
|
export { getValueType, isPrimitive, isJsonSerializable, isValidJson, getConstructorName, isEmpty, getValueSize } from "./typeHelpers.js";
|
|
9
9
|
export { parseValue, formatValue, getTypeColor, truncateText, flattenObject, formatPath } from "./valueFormatting.js";
|
|
10
10
|
export { loadOptionalModule, getCachedOptionalModule } from "./loadOptionalModule.js";
|
|
11
|
+
export { setRenderCaptureProvider, getRenderCaptureProvider } from "./renderCaptureRegistry.js";
|
|
11
12
|
export { Subscribable } from "./subscribable.js";
|
|
12
13
|
export { subscriberCountNotifier, subscribeToSubscriberCountChanges, notifySubscriberCountChange } from "./subscriberCountNotifier.js";
|
|
13
14
|
export { useSafeRouter, useSafePathname, useSafeSegments, useSafeGlobalSearchParams, getSafeRouter, getSafeCurrentPathname, isExpoRouterAvailable } from "./safeExpoRouter.js";
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Cross-package bridge for React render-commit capture.
|
|
5
|
+
*
|
|
6
|
+
* `@buoy-gg/highlight-updates` owns the React DevTools hook plumbing and
|
|
7
|
+
* registers a provider here at module init; `@buoy-gg/perf-monitor` reads the
|
|
8
|
+
* registry when a benchmark recording starts. Neither package imports the
|
|
9
|
+
* other — same optional-capability pattern as PerfMonitorController's
|
|
10
|
+
* `installReaFpsGetter`.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/** One component's aggregated renders across a capture window. */
|
|
14
|
+
|
|
15
|
+
/** Result of a capture window (one benchmark recording). */
|
|
16
|
+
|
|
17
|
+
let provider = null;
|
|
18
|
+
|
|
19
|
+
/** Register (or clear with null) the active provider. Last registration wins. */
|
|
20
|
+
export function setRenderCaptureProvider(p) {
|
|
21
|
+
provider = p;
|
|
22
|
+
}
|
|
23
|
+
export function getRenderCaptureProvider() {
|
|
24
|
+
return provider;
|
|
25
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { Text } from "react-native";
|
|
4
|
+
import { useRelativeTime } from "./useRelativeTime.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Leaf component that renders a live relative timestamp ("5s ago").
|
|
8
|
+
*
|
|
9
|
+
* Composition-over-memo (rule2): list rows should render THIS instead of
|
|
10
|
+
* calling `useRelativeTime` themselves — the shared TickProvider tick then
|
|
11
|
+
* re-renders only this Text, not the whole (often memoized) row and its
|
|
12
|
+
* icon subtree. Profiling on the Network tool (tool-bench 2026-07-06)
|
|
13
|
+
* showed the tick accounted for ~half of all row re-renders before this
|
|
14
|
+
* isolation.
|
|
15
|
+
*/
|
|
16
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
17
|
+
export function RelativeTime({
|
|
18
|
+
timestamp,
|
|
19
|
+
style,
|
|
20
|
+
prefix = "",
|
|
21
|
+
suffix = ""
|
|
22
|
+
}) {
|
|
23
|
+
const relative = useRelativeTime(timestamp);
|
|
24
|
+
return /*#__PURE__*/_jsxs(Text, {
|
|
25
|
+
style: style,
|
|
26
|
+
children: [prefix, relative, suffix]
|
|
27
|
+
});
|
|
28
|
+
}
|
|
@@ -49,6 +49,11 @@ interface JsModalProps {
|
|
|
49
49
|
maxHeight?: number;
|
|
50
50
|
initialHeight?: number;
|
|
51
51
|
animatedHeight?: Animated.Value;
|
|
52
|
+
/** DEV-ONLY benchmark motion: replays the exact gesture write paths
|
|
53
|
+
* (same setValue calls the pan handlers make) on sine waves with
|
|
54
|
+
* periodic grab/release, so tool-bench can measure drag/resize/mode
|
|
55
|
+
* cost without touches. */
|
|
56
|
+
benchMotion?: "resize" | "float-drag" | "float-resize" | "mode-cycle";
|
|
52
57
|
initialMode?: ModalMode;
|
|
53
58
|
onModeChange?: (mode: ModalMode) => void;
|
|
54
59
|
persistenceKey?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JsModal.d.ts","sourceRoot":"","sources":["../../../src/JsModal.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAUL,SAAS,EAEV,MAAM,OAAO,CAAC;AACf,OAAO,EAML,QAAQ,EAGR,SAAS,EAEV,MAAM,cAAc,CAAC;AA8FtB,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,UAAU,CAAC;AAEnD,UAAU,YAAY;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,UAAU,YAAY;IACpB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,kBAAkB,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACxD;AAED,UAAU,YAAY;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC;IAChC,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IACzC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,uBAAuB,CAAC,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAErD,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,yFAAyF;IACzF,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAC9C,0EAA0E;IAC1E,sBAAsB,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD,0EAA0E;IAC1E,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAC/B,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gIAAgI;IAChI,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;
|
|
1
|
+
{"version":3,"file":"JsModal.d.ts","sourceRoot":"","sources":["../../../src/JsModal.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAUL,SAAS,EAEV,MAAM,OAAO,CAAC;AACf,OAAO,EAML,QAAQ,EAGR,SAAS,EAEV,MAAM,cAAc,CAAC;AA8FtB,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,UAAU,CAAC;AAEnD,UAAU,YAAY;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,UAAU,YAAY;IACpB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,kBAAkB,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACxD;AAED,UAAU,YAAY;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC;IAChC;;;+BAG2B;IAC3B,WAAW,CAAC,EAAE,QAAQ,GAAG,YAAY,GAAG,cAAc,GAAG,YAAY,CAAC;IACtE,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IACzC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,uBAAuB,CAAC,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAErD,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,yFAAyF;IACzF,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAC9C,0EAA0E;IAC1E,sBAAsB,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD,0EAA0E;IAC1E,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAC/B,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gIAAgI;IAChI,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAymDD,eAAO,MAAM,OAAO,oDAAyB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export * from "./ui";
|
|
2
2
|
export * from "./stores";
|
|
3
|
-
export { absoluteFill, displayValue, parseDisplayValue, getSafeAreaInsets, persistentStorage, isUsingPersistentStorage, getStorageBackendType, safeStringify, getValueType, isPrimitive, isJsonSerializable, isValidJson, getConstructorName, isEmpty, getValueSize, parseValue, formatValue, getTypeColor, truncateText, flattenObject, formatPath, loadOptionalModule, getCachedOptionalModule, Subscribable, type SubscribableListener, subscriberCountNotifier, subscribeToSubscriberCountChanges, notifySubscriberCountChange, useSafeRouter, useSafePathname, useSafeSegments, useSafeGlobalSearchParams, getSafeRouter, getSafeCurrentPathname, isExpoRouterAvailable, } from "./utils";
|
|
3
|
+
export { absoluteFill, displayValue, parseDisplayValue, getSafeAreaInsets, persistentStorage, isUsingPersistentStorage, getStorageBackendType, safeStringify, getValueType, isPrimitive, isJsonSerializable, isValidJson, getConstructorName, isEmpty, getValueSize, parseValue, formatValue, getTypeColor, truncateText, flattenObject, formatPath, loadOptionalModule, getCachedOptionalModule, setRenderCaptureProvider, getRenderCaptureProvider, type RenderCaptureProvider, type RenderCaptureSummary, type RenderCaptureTopComponent, Subscribable, type SubscribableListener, subscriberCountNotifier, subscribeToSubscriberCountChanges, notifySubscriberCountChange, useSafeRouter, useSafePathname, useSafeSegments, useSafeGlobalSearchParams, getSafeRouter, getSafeCurrentPathname, isExpoRouterAvailable, } from "./utils";
|
|
4
4
|
export * from "./utils/formatting";
|
|
5
5
|
export * from "./utils/time";
|
|
6
6
|
export { isPlainObject as isPlainObjectUtil } from "./utils/typeHelpers";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AACA,cAAc,MAAM,CAAC;AAGrB,cAAc,UAAU,CAAC;AAGzB,OAAO,EAEL,YAAY,EAEZ,YAAY,EACZ,iBAAiB,EAEjB,iBAAiB,EAEjB,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EAErB,aAAa,EAEb,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,OAAO,EACP,YAAY,EAEZ,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,UAAU,EAEV,kBAAkB,EAClB,uBAAuB,EAEvB,YAAY,EACZ,KAAK,oBAAoB,EAEzB,uBAAuB,EACvB,iCAAiC,EACjC,2BAA2B,EAE3B,aAAa,EACb,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,aAAa,EACb,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,SAAS,CAAC;AAGjB,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAG7B,OAAO,EAAE,aAAa,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGzE,cAAc,SAAS,CAAC;AAGxB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,aAAa,EACb,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,YAAY,GAClB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAEvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,YAAY,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAE5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAE1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,YAAY,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AACtF,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAGrD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAG7E,cAAc,WAAW,CAAC;AAG1B,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,iBAAiB,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACjL,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AACA,cAAc,MAAM,CAAC;AAGrB,cAAc,UAAU,CAAC;AAGzB,OAAO,EAEL,YAAY,EAEZ,YAAY,EACZ,iBAAiB,EAEjB,iBAAiB,EAEjB,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EAErB,aAAa,EAEb,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,OAAO,EACP,YAAY,EAEZ,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,UAAU,EAEV,kBAAkB,EAClB,uBAAuB,EAEvB,wBAAwB,EACxB,wBAAwB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAE9B,YAAY,EACZ,KAAK,oBAAoB,EAEzB,uBAAuB,EACvB,iCAAiC,EACjC,2BAA2B,EAE3B,aAAa,EACb,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,aAAa,EACb,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,SAAS,CAAC;AAGjB,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAG7B,OAAO,EAAE,aAAa,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGzE,cAAc,SAAS,CAAC;AAGxB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,aAAa,EACb,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,YAAY,GAClB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAEvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,YAAY,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAE5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAE1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,YAAY,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AACtF,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAGrD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAG7E,cAAc,WAAW,CAAC;AAG1B,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,iBAAiB,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACjL,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -13,7 +13,7 @@ export interface CompactRowProps {
|
|
|
13
13
|
badgeColor?: string;
|
|
14
14
|
customBadge?: ReactNode;
|
|
15
15
|
showChevron?: boolean;
|
|
16
|
-
bottomRightText?: string;
|
|
16
|
+
bottomRightText?: string | React.ReactNode;
|
|
17
17
|
isSelected?: boolean;
|
|
18
18
|
onPress?: () => void;
|
|
19
19
|
disabled?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompactRow.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/CompactRow.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIlC,MAAM,WAAW,eAAe;IAE9B,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gFAAgF;IAChF,kBAAkB,CAAC,EAAE,SAAS,CAAC;IAC/B,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;IAGrB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"CompactRow.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/CompactRow.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIlC,MAAM,WAAW,eAAe;IAE9B,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gFAAgF;IAChF,kBAAkB,CAAC,EAAE,SAAS,CAAC;IAC/B,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;IAGrB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,eAAe,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC;IAG3C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,UAAU,CAAC,EACzB,cAAc,EACd,WAAW,EACX,cAAc,EACd,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,SAAS,EACT,UAAU,EACV,WAAW,EACX,WAAW,EACX,eAAe,EACf,UAAU,EACV,OAAO,EACP,QAAQ,EACR,iBAAiB,GAClB,EAAE,eAAe,+BAmHjB"}
|
|
@@ -6,6 +6,7 @@ export { safeStringify } from "./safeStringify";
|
|
|
6
6
|
export { getValueType, isPrimitive, isJsonSerializable, isValidJson, getConstructorName, isEmpty, getValueSize, } from "./typeHelpers";
|
|
7
7
|
export { parseValue, formatValue, getTypeColor, truncateText, flattenObject, formatPath, } from "./valueFormatting";
|
|
8
8
|
export { loadOptionalModule, getCachedOptionalModule } from "./loadOptionalModule";
|
|
9
|
+
export { setRenderCaptureProvider, getRenderCaptureProvider, type RenderCaptureProvider, type RenderCaptureSummary, type RenderCaptureTopComponent, } from "./renderCaptureRegistry";
|
|
9
10
|
export { Subscribable, type SubscribableListener } from "./subscribable";
|
|
10
11
|
export { subscriberCountNotifier, subscribeToSubscriberCountChanges, notifySubscriberCountChange, } from "./subscriberCountNotifier";
|
|
11
12
|
export { useSafeRouter, useSafePathname, useSafeSegments, useSafeGlobalSearchParams, getSafeRouter, getSafeCurrentPathname, isExpoRouterAvailable, } from "./safeExpoRouter";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EACrB,KAAK,eAAe,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EACL,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,OAAO,EACP,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,UAAU,GACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,KAAK,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EACL,uBAAuB,EACvB,iCAAiC,EACjC,2BAA2B,GAC5B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,aAAa,EACb,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,aAAa,EACb,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EACrB,KAAK,eAAe,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EACL,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,OAAO,EACP,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,UAAU,GACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,GAC/B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,KAAK,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EACL,uBAAuB,EACvB,iCAAiC,EACjC,2BAA2B,GAC5B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,aAAa,EACb,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,aAAa,EACb,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-package bridge for React render-commit capture.
|
|
3
|
+
*
|
|
4
|
+
* `@buoy-gg/highlight-updates` owns the React DevTools hook plumbing and
|
|
5
|
+
* registers a provider here at module init; `@buoy-gg/perf-monitor` reads the
|
|
6
|
+
* registry when a benchmark recording starts. Neither package imports the
|
|
7
|
+
* other — same optional-capability pattern as PerfMonitorController's
|
|
8
|
+
* `installReaFpsGetter`.
|
|
9
|
+
*/
|
|
10
|
+
/** One component's aggregated renders across a capture window. */
|
|
11
|
+
export interface RenderCaptureTopComponent {
|
|
12
|
+
name: string;
|
|
13
|
+
/** Times this component rendered (committed work) during the capture. */
|
|
14
|
+
renders: number;
|
|
15
|
+
/** Sum of self durations in ms (actualDuration minus children). */
|
|
16
|
+
totalMs: number;
|
|
17
|
+
/** Worst single-render self duration in ms. */
|
|
18
|
+
maxMs: number;
|
|
19
|
+
/** totalMs / renders. */
|
|
20
|
+
avgMs: number;
|
|
21
|
+
}
|
|
22
|
+
/** Result of a capture window (one benchmark recording). */
|
|
23
|
+
export interface RenderCaptureSummary {
|
|
24
|
+
/** React commits that contained at least one tracked component render. */
|
|
25
|
+
totalCommits: number;
|
|
26
|
+
/** Total component renders across all commits. */
|
|
27
|
+
totalRenders: number;
|
|
28
|
+
/**
|
|
29
|
+
* False when the renderer lacked profiling timers (fiber.actualDuration
|
|
30
|
+
* unavailable) — counts are still valid, durations read as 0.
|
|
31
|
+
*/
|
|
32
|
+
capturedDurations: boolean;
|
|
33
|
+
/** Sum of all self durations in ms across the capture. */
|
|
34
|
+
totalRenderMs?: number;
|
|
35
|
+
/** Heaviest components by total self duration, capped by the provider. */
|
|
36
|
+
topComponents: RenderCaptureTopComponent[];
|
|
37
|
+
}
|
|
38
|
+
export interface RenderCaptureProvider {
|
|
39
|
+
/** Whether capture can work right now (dev build, DevTools hook present). */
|
|
40
|
+
isSupported(): boolean;
|
|
41
|
+
/** Begin a capture window. Resets any previous unclaimed data. */
|
|
42
|
+
start(): void;
|
|
43
|
+
/** End the window and return the aggregate, or null if never started. */
|
|
44
|
+
stop(): RenderCaptureSummary | null;
|
|
45
|
+
/**
|
|
46
|
+
* Turn on the Render Highlighter's real-time bounding boxes for the
|
|
47
|
+
* duration of a capture window. Returns a restore fn that puts the
|
|
48
|
+
* overlay back in its prior state (enabled / silent / off), or null
|
|
49
|
+
* when unsupported. Optional — older providers may not implement it.
|
|
50
|
+
*/
|
|
51
|
+
startLiveHighlights?(): (() => void) | null;
|
|
52
|
+
}
|
|
53
|
+
/** Register (or clear with null) the active provider. Last registration wins. */
|
|
54
|
+
export declare function setRenderCaptureProvider(p: RenderCaptureProvider | null): void;
|
|
55
|
+
export declare function getRenderCaptureProvider(): RenderCaptureProvider | null;
|
|
56
|
+
//# sourceMappingURL=renderCaptureRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderCaptureRegistry.d.ts","sourceRoot":"","sources":["../../../../src/utils/renderCaptureRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,kEAAkE;AAClE,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,OAAO,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;CAGf;AAED,4DAA4D;AAC5D,MAAM,WAAW,oBAAoB;IACnC,0EAA0E;IAC1E,YAAY,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,YAAY,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,iBAAiB,EAAE,OAAO,CAAC;IAC3B,0DAA0D;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,0EAA0E;IAC1E,aAAa,EAAE,yBAAyB,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,qBAAqB;IACpC,6EAA6E;IAC7E,WAAW,IAAI,OAAO,CAAC;IACvB,kEAAkE;IAClE,KAAK,IAAI,IAAI,CAAC;IACd,yEAAyE;IACzE,IAAI,IAAI,oBAAoB,GAAG,IAAI,CAAC;IACpC;;;;;OAKG;IACH,mBAAmB,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC;CAC7C;AAID,iFAAiF;AACjF,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,qBAAqB,GAAG,IAAI,GAAG,IAAI,CAE9E;AAED,wBAAgB,wBAAwB,IAAI,qBAAqB,GAAG,IAAI,CAEvE"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type StyleProp, type TextStyle } from "react-native";
|
|
2
|
+
/**
|
|
3
|
+
* Leaf component that renders a live relative timestamp ("5s ago").
|
|
4
|
+
*
|
|
5
|
+
* Composition-over-memo (rule2): list rows should render THIS instead of
|
|
6
|
+
* calling `useRelativeTime` themselves — the shared TickProvider tick then
|
|
7
|
+
* re-renders only this Text, not the whole (often memoized) row and its
|
|
8
|
+
* icon subtree. Profiling on the Network tool (tool-bench 2026-07-06)
|
|
9
|
+
* showed the tick accounted for ~half of all row re-renders before this
|
|
10
|
+
* isolation.
|
|
11
|
+
*/
|
|
12
|
+
export declare function RelativeTime({ timestamp, style, prefix, suffix, }: {
|
|
13
|
+
timestamp: Date | number | null | undefined;
|
|
14
|
+
style?: StyleProp<TextStyle>;
|
|
15
|
+
/** Static text rendered before/after inside the same Text node. */
|
|
16
|
+
prefix?: string;
|
|
17
|
+
suffix?: string;
|
|
18
|
+
}): import("react").JSX.Element;
|
|
19
|
+
//# sourceMappingURL=RelativeTime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RelativeTime.d.ts","sourceRoot":"","sources":["../../../../../src/utils/time/RelativeTime.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAGpE;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,EAC3B,SAAS,EACT,KAAK,EACL,MAAW,EACX,MAAW,GACZ,EAAE;IACD,SAAS,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC5C,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,+BASA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/utils/time/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/utils/time/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -49,6 +49,11 @@ interface JsModalProps {
|
|
|
49
49
|
maxHeight?: number;
|
|
50
50
|
initialHeight?: number;
|
|
51
51
|
animatedHeight?: Animated.Value;
|
|
52
|
+
/** DEV-ONLY benchmark motion: replays the exact gesture write paths
|
|
53
|
+
* (same setValue calls the pan handlers make) on sine waves with
|
|
54
|
+
* periodic grab/release, so tool-bench can measure drag/resize/mode
|
|
55
|
+
* cost without touches. */
|
|
56
|
+
benchMotion?: "resize" | "float-drag" | "float-resize" | "mode-cycle";
|
|
52
57
|
initialMode?: ModalMode;
|
|
53
58
|
onModeChange?: (mode: ModalMode) => void;
|
|
54
59
|
persistenceKey?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JsModal.d.ts","sourceRoot":"","sources":["../../../src/JsModal.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAUL,SAAS,EAEV,MAAM,OAAO,CAAC;AACf,OAAO,EAML,QAAQ,EAGR,SAAS,EAEV,MAAM,cAAc,CAAC;AA8FtB,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,UAAU,CAAC;AAEnD,UAAU,YAAY;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,UAAU,YAAY;IACpB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,kBAAkB,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACxD;AAED,UAAU,YAAY;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC;IAChC,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IACzC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,uBAAuB,CAAC,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAErD,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,yFAAyF;IACzF,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAC9C,0EAA0E;IAC1E,sBAAsB,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD,0EAA0E;IAC1E,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAC/B,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gIAAgI;IAChI,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;
|
|
1
|
+
{"version":3,"file":"JsModal.d.ts","sourceRoot":"","sources":["../../../src/JsModal.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAUL,SAAS,EAEV,MAAM,OAAO,CAAC;AACf,OAAO,EAML,QAAQ,EAGR,SAAS,EAEV,MAAM,cAAc,CAAC;AA8FtB,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,UAAU,CAAC;AAEnD,UAAU,YAAY;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,UAAU,YAAY;IACpB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5C,kBAAkB,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACxD;AAED,UAAU,YAAY;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC;IAChC;;;+BAG2B;IAC3B,WAAW,CAAC,EAAE,QAAQ,GAAG,YAAY,GAAG,cAAc,GAAG,YAAY,CAAC;IACtE,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IACzC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,uBAAuB,CAAC,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAErD,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,yFAAyF;IACzF,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAC9C,0EAA0E;IAC1E,sBAAsB,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD,0EAA0E;IAC1E,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAC/B,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gIAAgI;IAChI,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAymDD,eAAO,MAAM,OAAO,oDAAyB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export * from "./ui";
|
|
2
2
|
export * from "./stores";
|
|
3
|
-
export { absoluteFill, displayValue, parseDisplayValue, getSafeAreaInsets, persistentStorage, isUsingPersistentStorage, getStorageBackendType, safeStringify, getValueType, isPrimitive, isJsonSerializable, isValidJson, getConstructorName, isEmpty, getValueSize, parseValue, formatValue, getTypeColor, truncateText, flattenObject, formatPath, loadOptionalModule, getCachedOptionalModule, Subscribable, type SubscribableListener, subscriberCountNotifier, subscribeToSubscriberCountChanges, notifySubscriberCountChange, useSafeRouter, useSafePathname, useSafeSegments, useSafeGlobalSearchParams, getSafeRouter, getSafeCurrentPathname, isExpoRouterAvailable, } from "./utils";
|
|
3
|
+
export { absoluteFill, displayValue, parseDisplayValue, getSafeAreaInsets, persistentStorage, isUsingPersistentStorage, getStorageBackendType, safeStringify, getValueType, isPrimitive, isJsonSerializable, isValidJson, getConstructorName, isEmpty, getValueSize, parseValue, formatValue, getTypeColor, truncateText, flattenObject, formatPath, loadOptionalModule, getCachedOptionalModule, setRenderCaptureProvider, getRenderCaptureProvider, type RenderCaptureProvider, type RenderCaptureSummary, type RenderCaptureTopComponent, Subscribable, type SubscribableListener, subscriberCountNotifier, subscribeToSubscriberCountChanges, notifySubscriberCountChange, useSafeRouter, useSafePathname, useSafeSegments, useSafeGlobalSearchParams, getSafeRouter, getSafeCurrentPathname, isExpoRouterAvailable, } from "./utils";
|
|
4
4
|
export * from "./utils/formatting";
|
|
5
5
|
export * from "./utils/time";
|
|
6
6
|
export { isPlainObject as isPlainObjectUtil } from "./utils/typeHelpers";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AACA,cAAc,MAAM,CAAC;AAGrB,cAAc,UAAU,CAAC;AAGzB,OAAO,EAEL,YAAY,EAEZ,YAAY,EACZ,iBAAiB,EAEjB,iBAAiB,EAEjB,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EAErB,aAAa,EAEb,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,OAAO,EACP,YAAY,EAEZ,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,UAAU,EAEV,kBAAkB,EAClB,uBAAuB,EAEvB,YAAY,EACZ,KAAK,oBAAoB,EAEzB,uBAAuB,EACvB,iCAAiC,EACjC,2BAA2B,EAE3B,aAAa,EACb,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,aAAa,EACb,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,SAAS,CAAC;AAGjB,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAG7B,OAAO,EAAE,aAAa,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGzE,cAAc,SAAS,CAAC;AAGxB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,aAAa,EACb,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,YAAY,GAClB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAEvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,YAAY,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAE5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAE1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,YAAY,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AACtF,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAGrD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAG7E,cAAc,WAAW,CAAC;AAG1B,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,iBAAiB,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACjL,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AACA,cAAc,MAAM,CAAC;AAGrB,cAAc,UAAU,CAAC;AAGzB,OAAO,EAEL,YAAY,EAEZ,YAAY,EACZ,iBAAiB,EAEjB,iBAAiB,EAEjB,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EAErB,aAAa,EAEb,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,OAAO,EACP,YAAY,EAEZ,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,UAAU,EAEV,kBAAkB,EAClB,uBAAuB,EAEvB,wBAAwB,EACxB,wBAAwB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAE9B,YAAY,EACZ,KAAK,oBAAoB,EAEzB,uBAAuB,EACvB,iCAAiC,EACjC,2BAA2B,EAE3B,aAAa,EACb,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,aAAa,EACb,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,SAAS,CAAC;AAGjB,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAG7B,OAAO,EAAE,aAAa,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGzE,cAAc,SAAS,CAAC;AAGxB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,aAAa,EACb,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,YAAY,GAClB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAEvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,YAAY,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAE5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,YAAY,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAE1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,YAAY,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AACtF,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAGrD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAG7E,cAAc,WAAW,CAAC;AAG1B,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,iBAAiB,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACjL,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -13,7 +13,7 @@ export interface CompactRowProps {
|
|
|
13
13
|
badgeColor?: string;
|
|
14
14
|
customBadge?: ReactNode;
|
|
15
15
|
showChevron?: boolean;
|
|
16
|
-
bottomRightText?: string;
|
|
16
|
+
bottomRightText?: string | React.ReactNode;
|
|
17
17
|
isSelected?: boolean;
|
|
18
18
|
onPress?: () => void;
|
|
19
19
|
disabled?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompactRow.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/CompactRow.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIlC,MAAM,WAAW,eAAe;IAE9B,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gFAAgF;IAChF,kBAAkB,CAAC,EAAE,SAAS,CAAC;IAC/B,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;IAGrB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"CompactRow.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/CompactRow.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIlC,MAAM,WAAW,eAAe;IAE9B,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gFAAgF;IAChF,kBAAkB,CAAC,EAAE,SAAS,CAAC;IAC/B,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;IAGrB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,eAAe,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC;IAG3C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,wBAAgB,UAAU,CAAC,EACzB,cAAc,EACd,WAAW,EACX,cAAc,EACd,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,SAAS,EACT,UAAU,EACV,WAAW,EACX,WAAW,EACX,eAAe,EACf,UAAU,EACV,OAAO,EACP,QAAQ,EACR,iBAAiB,GAClB,EAAE,eAAe,+BAmHjB"}
|
|
@@ -6,6 +6,7 @@ export { safeStringify } from "./safeStringify";
|
|
|
6
6
|
export { getValueType, isPrimitive, isJsonSerializable, isValidJson, getConstructorName, isEmpty, getValueSize, } from "./typeHelpers";
|
|
7
7
|
export { parseValue, formatValue, getTypeColor, truncateText, flattenObject, formatPath, } from "./valueFormatting";
|
|
8
8
|
export { loadOptionalModule, getCachedOptionalModule } from "./loadOptionalModule";
|
|
9
|
+
export { setRenderCaptureProvider, getRenderCaptureProvider, type RenderCaptureProvider, type RenderCaptureSummary, type RenderCaptureTopComponent, } from "./renderCaptureRegistry";
|
|
9
10
|
export { Subscribable, type SubscribableListener } from "./subscribable";
|
|
10
11
|
export { subscriberCountNotifier, subscribeToSubscriberCountChanges, notifySubscriberCountChange, } from "./subscriberCountNotifier";
|
|
11
12
|
export { useSafeRouter, useSafePathname, useSafeSegments, useSafeGlobalSearchParams, getSafeRouter, getSafeCurrentPathname, isExpoRouterAvailable, } from "./safeExpoRouter";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EACrB,KAAK,eAAe,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EACL,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,OAAO,EACP,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,UAAU,GACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,KAAK,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EACL,uBAAuB,EACvB,iCAAiC,EACjC,2BAA2B,GAC5B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,aAAa,EACb,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,aAAa,EACb,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EACrB,KAAK,eAAe,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EACL,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,OAAO,EACP,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,UAAU,GACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,GAC/B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,KAAK,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EACL,uBAAuB,EACvB,iCAAiC,EACjC,2BAA2B,GAC5B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,aAAa,EACb,eAAe,EACf,eAAe,EACf,yBAAyB,EACzB,aAAa,EACb,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-package bridge for React render-commit capture.
|
|
3
|
+
*
|
|
4
|
+
* `@buoy-gg/highlight-updates` owns the React DevTools hook plumbing and
|
|
5
|
+
* registers a provider here at module init; `@buoy-gg/perf-monitor` reads the
|
|
6
|
+
* registry when a benchmark recording starts. Neither package imports the
|
|
7
|
+
* other — same optional-capability pattern as PerfMonitorController's
|
|
8
|
+
* `installReaFpsGetter`.
|
|
9
|
+
*/
|
|
10
|
+
/** One component's aggregated renders across a capture window. */
|
|
11
|
+
export interface RenderCaptureTopComponent {
|
|
12
|
+
name: string;
|
|
13
|
+
/** Times this component rendered (committed work) during the capture. */
|
|
14
|
+
renders: number;
|
|
15
|
+
/** Sum of self durations in ms (actualDuration minus children). */
|
|
16
|
+
totalMs: number;
|
|
17
|
+
/** Worst single-render self duration in ms. */
|
|
18
|
+
maxMs: number;
|
|
19
|
+
/** totalMs / renders. */
|
|
20
|
+
avgMs: number;
|
|
21
|
+
}
|
|
22
|
+
/** Result of a capture window (one benchmark recording). */
|
|
23
|
+
export interface RenderCaptureSummary {
|
|
24
|
+
/** React commits that contained at least one tracked component render. */
|
|
25
|
+
totalCommits: number;
|
|
26
|
+
/** Total component renders across all commits. */
|
|
27
|
+
totalRenders: number;
|
|
28
|
+
/**
|
|
29
|
+
* False when the renderer lacked profiling timers (fiber.actualDuration
|
|
30
|
+
* unavailable) — counts are still valid, durations read as 0.
|
|
31
|
+
*/
|
|
32
|
+
capturedDurations: boolean;
|
|
33
|
+
/** Sum of all self durations in ms across the capture. */
|
|
34
|
+
totalRenderMs?: number;
|
|
35
|
+
/** Heaviest components by total self duration, capped by the provider. */
|
|
36
|
+
topComponents: RenderCaptureTopComponent[];
|
|
37
|
+
}
|
|
38
|
+
export interface RenderCaptureProvider {
|
|
39
|
+
/** Whether capture can work right now (dev build, DevTools hook present). */
|
|
40
|
+
isSupported(): boolean;
|
|
41
|
+
/** Begin a capture window. Resets any previous unclaimed data. */
|
|
42
|
+
start(): void;
|
|
43
|
+
/** End the window and return the aggregate, or null if never started. */
|
|
44
|
+
stop(): RenderCaptureSummary | null;
|
|
45
|
+
/**
|
|
46
|
+
* Turn on the Render Highlighter's real-time bounding boxes for the
|
|
47
|
+
* duration of a capture window. Returns a restore fn that puts the
|
|
48
|
+
* overlay back in its prior state (enabled / silent / off), or null
|
|
49
|
+
* when unsupported. Optional — older providers may not implement it.
|
|
50
|
+
*/
|
|
51
|
+
startLiveHighlights?(): (() => void) | null;
|
|
52
|
+
}
|
|
53
|
+
/** Register (or clear with null) the active provider. Last registration wins. */
|
|
54
|
+
export declare function setRenderCaptureProvider(p: RenderCaptureProvider | null): void;
|
|
55
|
+
export declare function getRenderCaptureProvider(): RenderCaptureProvider | null;
|
|
56
|
+
//# sourceMappingURL=renderCaptureRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderCaptureRegistry.d.ts","sourceRoot":"","sources":["../../../../src/utils/renderCaptureRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,kEAAkE;AAClE,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,OAAO,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;CAGf;AAED,4DAA4D;AAC5D,MAAM,WAAW,oBAAoB;IACnC,0EAA0E;IAC1E,YAAY,EAAE,MAAM,CAAC;IACrB,kDAAkD;IAClD,YAAY,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,iBAAiB,EAAE,OAAO,CAAC;IAC3B,0DAA0D;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,0EAA0E;IAC1E,aAAa,EAAE,yBAAyB,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,qBAAqB;IACpC,6EAA6E;IAC7E,WAAW,IAAI,OAAO,CAAC;IACvB,kEAAkE;IAClE,KAAK,IAAI,IAAI,CAAC;IACd,yEAAyE;IACzE,IAAI,IAAI,oBAAoB,GAAG,IAAI,CAAC;IACpC;;;;;OAKG;IACH,mBAAmB,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC;CAC7C;AAID,iFAAiF;AACjF,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,qBAAqB,GAAG,IAAI,GAAG,IAAI,CAE9E;AAED,wBAAgB,wBAAwB,IAAI,qBAAqB,GAAG,IAAI,CAEvE"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type StyleProp, type TextStyle } from "react-native";
|
|
2
|
+
/**
|
|
3
|
+
* Leaf component that renders a live relative timestamp ("5s ago").
|
|
4
|
+
*
|
|
5
|
+
* Composition-over-memo (rule2): list rows should render THIS instead of
|
|
6
|
+
* calling `useRelativeTime` themselves — the shared TickProvider tick then
|
|
7
|
+
* re-renders only this Text, not the whole (often memoized) row and its
|
|
8
|
+
* icon subtree. Profiling on the Network tool (tool-bench 2026-07-06)
|
|
9
|
+
* showed the tick accounted for ~half of all row re-renders before this
|
|
10
|
+
* isolation.
|
|
11
|
+
*/
|
|
12
|
+
export declare function RelativeTime({ timestamp, style, prefix, suffix, }: {
|
|
13
|
+
timestamp: Date | number | null | undefined;
|
|
14
|
+
style?: StyleProp<TextStyle>;
|
|
15
|
+
/** Static text rendered before/after inside the same Text node. */
|
|
16
|
+
prefix?: string;
|
|
17
|
+
suffix?: string;
|
|
18
|
+
}): import("react").JSX.Element;
|
|
19
|
+
//# sourceMappingURL=RelativeTime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RelativeTime.d.ts","sourceRoot":"","sources":["../../../../../src/utils/time/RelativeTime.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAGpE;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,EAC3B,SAAS,EACT,KAAK,EACL,MAAW,EACX,MAAW,GACZ,EAAE;IACD,SAAS,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC5C,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,+BASA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/utils/time/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/utils/time/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@buoy-gg/shared-ui",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "6.0.1",
|
|
4
4
|
"description": "Shared UI components, hooks, and utilities",
|
|
5
5
|
"main": "lib/commonjs/index.js",
|
|
6
6
|
"module": "lib/module/index.js",
|
|
@@ -115,10 +115,10 @@
|
|
|
115
115
|
],
|
|
116
116
|
"sideEffects": false,
|
|
117
117
|
"dependencies": {
|
|
118
|
-
"@buoy-gg/floating-tools-core": "
|
|
118
|
+
"@buoy-gg/floating-tools-core": "6.0.1"
|
|
119
119
|
},
|
|
120
120
|
"peerDependencies": {
|
|
121
|
-
"@buoy-gg/license": "
|
|
121
|
+
"@buoy-gg/license": "6.0.1",
|
|
122
122
|
"@react-native-clipboard/clipboard": "*",
|
|
123
123
|
"expo-clipboard": "*",
|
|
124
124
|
"expo-file-system": "*",
|
|
@@ -146,7 +146,7 @@
|
|
|
146
146
|
"expo-clipboard": "~7.1.5",
|
|
147
147
|
"react-native-safe-area-context": "^5.6.2",
|
|
148
148
|
"typescript": "~5.8.3",
|
|
149
|
-
"@buoy-gg/license": "
|
|
149
|
+
"@buoy-gg/license": "6.0.1"
|
|
150
150
|
},
|
|
151
151
|
"react-native-builder-bob": {
|
|
152
152
|
"source": "src",
|