@buoy-gg/shared-ui 4.0.2 → 6.0.0

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.
Files changed (45) hide show
  1. package/lib/commonjs/JsModal.js +73 -0
  2. package/lib/commonjs/hooks/safe-area-impl.js +1 -1
  3. package/lib/commonjs/index.js +14 -0
  4. package/lib/commonjs/utils/index.js +13 -0
  5. package/lib/commonjs/utils/renderCaptureRegistry.js +30 -0
  6. package/lib/commonjs/utils/time/RelativeTime.js +31 -0
  7. package/lib/commonjs/utils/time/index.js +7 -0
  8. package/lib/module/JsModal.js +73 -0
  9. package/lib/module/hooks/safe-area-impl.js +1 -1
  10. package/lib/module/index.js +2 -0
  11. package/lib/module/utils/index.js +1 -0
  12. package/lib/module/utils/renderCaptureRegistry.js +25 -0
  13. package/lib/module/utils/time/RelativeTime.js +28 -0
  14. package/lib/module/utils/time/index.js +1 -0
  15. package/lib/typescript/commonjs/JsModal.d.ts +5 -0
  16. package/lib/typescript/commonjs/JsModal.d.ts.map +1 -1
  17. package/lib/typescript/commonjs/hooks/safe-area-impl.d.ts +1 -1
  18. package/lib/typescript/commonjs/index.d.ts +1 -1
  19. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  20. package/lib/typescript/commonjs/ui/components/CompactRow.d.ts +1 -1
  21. package/lib/typescript/commonjs/ui/components/CompactRow.d.ts.map +1 -1
  22. package/lib/typescript/commonjs/utils/index.d.ts +1 -0
  23. package/lib/typescript/commonjs/utils/index.d.ts.map +1 -1
  24. package/lib/typescript/commonjs/utils/renderCaptureRegistry.d.ts +56 -0
  25. package/lib/typescript/commonjs/utils/renderCaptureRegistry.d.ts.map +1 -0
  26. package/lib/typescript/commonjs/utils/time/RelativeTime.d.ts +19 -0
  27. package/lib/typescript/commonjs/utils/time/RelativeTime.d.ts.map +1 -0
  28. package/lib/typescript/commonjs/utils/time/index.d.ts +1 -0
  29. package/lib/typescript/commonjs/utils/time/index.d.ts.map +1 -1
  30. package/lib/typescript/module/JsModal.d.ts +5 -0
  31. package/lib/typescript/module/JsModal.d.ts.map +1 -1
  32. package/lib/typescript/module/hooks/safe-area-impl.d.ts +1 -1
  33. package/lib/typescript/module/index.d.ts +1 -1
  34. package/lib/typescript/module/index.d.ts.map +1 -1
  35. package/lib/typescript/module/ui/components/CompactRow.d.ts +1 -1
  36. package/lib/typescript/module/ui/components/CompactRow.d.ts.map +1 -1
  37. package/lib/typescript/module/utils/index.d.ts +1 -0
  38. package/lib/typescript/module/utils/index.d.ts.map +1 -1
  39. package/lib/typescript/module/utils/renderCaptureRegistry.d.ts +56 -0
  40. package/lib/typescript/module/utils/renderCaptureRegistry.d.ts.map +1 -0
  41. package/lib/typescript/module/utils/time/RelativeTime.d.ts +19 -0
  42. package/lib/typescript/module/utils/time/RelativeTime.d.ts.map +1 -0
  43. package/lib/typescript/module/utils/time/index.d.ts +1 -0
  44. package/lib/typescript/module/utils/time/index.d.ts.map +1 -1
  45. package/package.json +4 -4
@@ -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-01T17:46:57.191Z
10
+ * Generated at: 2026-07-08T17:16:52.486Z
11
11
  *
12
12
  * DO NOT EDIT - This file is generated by scripts/detect-safe-area.js
13
13
  *
@@ -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");
@@ -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,
@@ -3,7 +3,7 @@
3
3
  /**
4
4
  * Auto-generated safe area implementation
5
5
  * Detected: none
6
- * Generated at: 2026-07-01T17:46:57.191Z
6
+ * Generated at: 2026-07-08T17:16:52.486Z
7
7
  *
8
8
  * DO NOT EDIT - This file is generated by scripts/detect-safe-area.js
9
9
  *
@@ -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
+ }
@@ -2,4 +2,5 @@
2
2
 
3
3
  export { formatRelativeTime } from "./formatRelativeTime.js";
4
4
  export { useRelativeTime } from "./useRelativeTime.js";
5
+ export { RelativeTime } from "./RelativeTime.js";
5
6
  export { TickProvider, useTick } from "./TickContext.js";
@@ -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;AA8hDD,eAAO,MAAM,OAAO,oDAAyB,CAAC"}
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,7 +1,7 @@
1
1
  /**
2
2
  * Auto-generated safe area implementation
3
3
  * Detected: none
4
- * Generated at: 2026-07-01T17:46:57.191Z
4
+ * Generated at: 2026-07-08T17:16:52.486Z
5
5
  *
6
6
  * DO NOT EDIT - This file is generated by scripts/detect-safe-area.js
7
7
  *
@@ -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;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IAGzB,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"}
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,4 +1,5 @@
1
1
  export { formatRelativeTime } from './formatRelativeTime';
2
2
  export { useRelativeTime } from './useRelativeTime';
3
+ export { RelativeTime } from './RelativeTime';
3
4
  export { TickProvider, useTick } from './TickContext';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -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;AA8hDD,eAAO,MAAM,OAAO,oDAAyB,CAAC"}
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,7 +1,7 @@
1
1
  /**
2
2
  * Auto-generated safe area implementation
3
3
  * Detected: none
4
- * Generated at: 2026-07-01T17:46:57.191Z
4
+ * Generated at: 2026-07-08T17:16:52.486Z
5
5
  *
6
6
  * DO NOT EDIT - This file is generated by scripts/detect-safe-area.js
7
7
  *
@@ -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;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IAGzB,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"}
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,4 +1,5 @@
1
1
  export { formatRelativeTime } from './formatRelativeTime';
2
2
  export { useRelativeTime } from './useRelativeTime';
3
+ export { RelativeTime } from './RelativeTime';
3
4
  export { TickProvider, useTick } from './TickContext';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -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": "4.0.2",
3
+ "version": "6.0.0",
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": "4.0.2"
118
+ "@buoy-gg/floating-tools-core": "6.0.0"
119
119
  },
120
120
  "peerDependencies": {
121
- "@buoy-gg/license": "4.0.2",
121
+ "@buoy-gg/license": "6.0.0",
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": "4.0.2"
149
+ "@buoy-gg/license": "6.0.0"
150
150
  },
151
151
  "react-native-builder-bob": {
152
152
  "source": "src",