@buoy-gg/highlight-updates 7.0.27 → 7.0.28

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 (22) hide show
  1. package/lib/commonjs/highlight-updates/components/HighlightFilterView.js +22 -0
  2. package/lib/commonjs/highlight-updates/utils/HighlightUpdatesController.js +55 -3
  3. package/lib/commonjs/highlight-updates/utils/RenderTracker.js +6 -1
  4. package/lib/commonjs/highlight-updates/utils/namedComposite.js +41 -0
  5. package/lib/commonjs/highlight-updates/utils/screenElements.js +50 -25
  6. package/lib/commonjs/highlight-updates/utils/tapMatch.js +58 -0
  7. package/lib/module/highlight-updates/components/HighlightFilterView.js +22 -0
  8. package/lib/module/highlight-updates/utils/HighlightUpdatesController.js +55 -3
  9. package/lib/module/highlight-updates/utils/RenderTracker.js +6 -1
  10. package/lib/module/highlight-updates/utils/namedComposite.js +36 -0
  11. package/lib/module/highlight-updates/utils/screenElements.js +50 -25
  12. package/lib/module/highlight-updates/utils/tapMatch.js +52 -0
  13. package/lib/typescript/highlight-updates/components/HighlightFilterView.d.ts.map +1 -1
  14. package/lib/typescript/highlight-updates/utils/HighlightUpdatesController.d.ts.map +1 -1
  15. package/lib/typescript/highlight-updates/utils/RenderTracker.d.ts +6 -0
  16. package/lib/typescript/highlight-updates/utils/RenderTracker.d.ts.map +1 -1
  17. package/lib/typescript/highlight-updates/utils/namedComposite.d.ts +17 -0
  18. package/lib/typescript/highlight-updates/utils/namedComposite.d.ts.map +1 -0
  19. package/lib/typescript/highlight-updates/utils/screenElements.d.ts.map +1 -1
  20. package/lib/typescript/highlight-updates/utils/tapMatch.d.ts +42 -0
  21. package/lib/typescript/highlight-updates/utils/tapMatch.d.ts.map +1 -0
  22. package/package.json +7 -7
@@ -907,6 +907,28 @@ function HighlightFilterView({
907
907
  })
908
908
  }, preset.value))
909
909
  })]
910
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
911
+ style: [styles.settingItem, styles.settingItemSpaced],
912
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
913
+ style: styles.settingHeader,
914
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
915
+ style: styles.settingLabel,
916
+ children: "Show host views"
917
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Switch, {
918
+ value: !!settings.showHostViews,
919
+ onValueChange: value => onSettingsChange({
920
+ showHostViews: value
921
+ }),
922
+ trackColor: {
923
+ false: _sharedUi.night.color.surfaceElevated,
924
+ true: _sharedUi.night.color.accent + "80"
925
+ },
926
+ thumbColor: settings.showHostViews ? _sharedUi.night.color.accent : _sharedUi.night.color.knob
927
+ })]
928
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
929
+ style: styles.settingDescription,
930
+ children: "Include anonymous View / RCTView / Text hosts. Off by default so the list is named composites (what actually re-rendered)."
931
+ })]
910
932
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
911
933
  style: [styles.settingItem, styles.settingItemSpaced],
912
934
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
@@ -34,6 +34,8 @@ exports.default = void 0;
34
34
  var _ProfilerInterceptor = require("./ProfilerInterceptor");
35
35
  var _reactNative = require("react-native");
36
36
  var _RenderTracker = require("./RenderTracker");
37
+ var _screenElements = require("./screenElements");
38
+ var _tapMatch = require("./tapMatch");
37
39
  var _PerformanceLogger = require("./PerformanceLogger");
38
40
  var _RenderCauseDetector = require("./RenderCauseDetector");
39
41
  var _sharedUi = require("@buoy-gg/shared-ui");
@@ -1169,10 +1171,60 @@ async function locateComponent(params) {
1169
1171
  const margin = typeof params.margin === "number" ? params.margin : 12;
1170
1172
  const renders = _RenderTracker.RenderTracker.getRenders();
1171
1173
  if (renders.length === 0) {
1174
+ const described = await (0, _screenElements.describeScreen)();
1175
+ const q = (params.query ?? "").trim().toLowerCase();
1176
+ let best;
1177
+ for (const el of described.elements) {
1178
+ if (params.nativeTag != null && el.nativeTag === params.nativeTag) {
1179
+ best = {
1180
+ el,
1181
+ score: 1000
1182
+ };
1183
+ break;
1184
+ }
1185
+ const score = (0, _tapMatch.scoreTapMatch)({
1186
+ nativeTag: el.nativeTag,
1187
+ testID: el.testID,
1188
+ label: el.label,
1189
+ text: el.text,
1190
+ name: el.name,
1191
+ tap: el.tap
1192
+ }, {
1193
+ query: q || undefined,
1194
+ nativeTag: params.nativeTag
1195
+ });
1196
+ if (score <= 0) continue;
1197
+ if (!best || score > best.score) best = {
1198
+ el,
1199
+ score
1200
+ };
1201
+ }
1202
+ if (!best?.el.frame) {
1203
+ return {
1204
+ matched: false,
1205
+ reason: "no-match",
1206
+ candidates: []
1207
+ };
1208
+ }
1209
+ const win = described.screen;
1210
+ const f = best.el.frame;
1172
1211
  return {
1173
- matched: false,
1174
- reason: "no-renders",
1175
- candidates: []
1212
+ matched: true,
1213
+ live: true,
1214
+ rect: {
1215
+ x: f.x * win.width,
1216
+ y: f.y * win.height,
1217
+ width: f.width * win.width,
1218
+ height: f.height * win.height
1219
+ },
1220
+ scale: _reactNative.PixelRatio.get(),
1221
+ screen: {
1222
+ width: win.width,
1223
+ height: win.height
1224
+ },
1225
+ nativeTag: best.el.nativeTag ?? undefined,
1226
+ componentName: best.el.name,
1227
+ testID: best.el.testID
1176
1228
  };
1177
1229
  }
1178
1230
 
@@ -14,6 +14,7 @@ Object.defineProperty(exports, "__esModule", {
14
14
  exports.default = exports.RenderTracker = void 0;
15
15
  var _ViewTypeMapper = require("./ViewTypeMapper");
16
16
  var _PerformanceLogger = require("./PerformanceLogger");
17
+ var _namedComposite = require("./namedComposite");
17
18
  /**
18
19
  * Debug logging levels for render cause detection.
19
20
  * Controls verbosity of console output for debugging "Why Did You Render" feature.
@@ -72,7 +73,8 @@ class RenderTrackerSingleton {
72
73
  // Debug settings
73
74
  debugLogLevel: "off",
74
75
  // Dev tools visibility - exclude by default
75
- excludeDevTools: true
76
+ excludeDevTools: true,
77
+ showHostViews: false
76
78
  };
77
79
 
78
80
  // Batch mode: defer notifyListeners until endBatch is called
@@ -421,6 +423,9 @@ class RenderTrackerSingleton {
421
423
  */
422
424
  getFilteredRenders(searchText = "") {
423
425
  let renders = this.getRenders();
426
+ if (!this.settings.showHostViews) {
427
+ renders = renders.filter(_namedComposite.isNamedComposite);
428
+ }
424
429
 
425
430
  // Apply search filter
426
431
  if (searchText.trim()) {
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isHostViewName = isHostViewName;
7
+ exports.isNamedComposite = isNamedComposite;
8
+ /**
9
+ * Host views (RCTView / View / Text) drown the Highlight Updates list.
10
+ * Named composites are what you actually want when asking "what re-rendered?"
11
+ */
12
+
13
+ const HOST_NAMES = new Set(["View", "RCTView", "Text", "RCTText", "RawText", "RCTRawText", "VirtualText", "RCTVirtualText", "ScrollView", "RCTScrollView", "RCTScrollContentView", "SafeAreaView", "RCTSafeAreaView", "Pressable", "TouchableOpacity", "Image", "RCTImageView"]);
14
+
15
+ /**
16
+ * Fiber names that look like identity but are list chrome / RN internals.
17
+ * Only provably-anonymous names belong here — real components (CopyButton,
18
+ * a user's `Copy`…) must stay visible. "Comp Copy"-style truncated
19
+ * placeholders are handled by the regex in isNamedComposite instead.
20
+ */
21
+ const PLACEHOLDER_NAMES = new Set(["Unknown", "Anonymous", "CellRenderer", "NativeComponent"]);
22
+ /**
23
+ * True when this row is a named user composite (or has a testID). Host views
24
+ * and anonymous "Comp Copy" wrappers return false.
25
+ */
26
+ function isNamedComposite(r) {
27
+ if (r.testID && r.testID.trim()) return true;
28
+ const name = (r.componentName ?? "").trim();
29
+ if (!name) return false;
30
+ if (HOST_NAMES.has(name)) return false;
31
+ if (PLACEHOLDER_NAMES.has(name)) return false;
32
+ const view = (r.viewType ?? "").trim();
33
+ if (view && HOST_NAMES.has(view) && name === view) return false;
34
+ // "Comp Copy" / "1x" style placeholders — no real component identity.
35
+ if (/^comp(\s|$)/i.test(name)) return false;
36
+ if (name.startsWith("_")) return false;
37
+ return true;
38
+ }
39
+ function isHostViewName(name) {
40
+ return !!name && HOST_NAMES.has(name);
41
+ }
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.describeScreen = describeScreen;
7
7
  exports.tapElement = tapElement;
8
8
  var _reactNative = require("react-native");
9
+ var _tapMatch = require("./tapMatch");
9
10
  /**
10
11
  * On-device screen element discovery + in-JS tap.
11
12
  *
@@ -499,9 +500,10 @@ async function describeScreen() {
499
500
  if (r) {
500
501
  const cx = r.x + r.width / 2;
501
502
  const cy = r.y + r.height / 2;
502
- // Skip elements entirely off-screen.
503
+ // Drop previous Expo Router screens (centers well outside the window).
504
+ // Keep a 10% slack so the floating menu / home-indicator-clipped rows stay.
503
505
  if (cy < -screenH * 0.1 || cy > screenH * 1.1 || cx < -screenW * 0.1 || cx > screenW * 1.1) {
504
- if (!c.testID) continue;
506
+ continue;
505
507
  }
506
508
  tap = {
507
509
  x: round2(cx / screenW),
@@ -554,20 +556,24 @@ function round2(n) {
554
556
 
555
557
  // --- tapElement -----------------------------------------------------------
556
558
 
559
+ function fieldsOf(c) {
560
+ return {
561
+ nativeTag: c.nativeTag,
562
+ testID: c.testID,
563
+ label: c.label,
564
+ text: c.text,
565
+ name: c.name
566
+ };
567
+ }
557
568
  function matchScore(c, params) {
558
- if (params.nativeTag != null && c.nativeTag === params.nativeTag) return 1000;
559
- const q = (params.query ?? params.testID ?? "").trim().toLowerCase();
560
- if (!q) return 0;
561
- const fields = [c.testID, c.label, c.text, c.name].filter(Boolean).map(s => s.toLowerCase());
562
- let best = 0;
563
- for (const f of fields) {
564
- if (f === q) best = Math.max(best, 100);else if (f.startsWith(q)) best = Math.max(best, 50);else if (f.includes(q)) best = Math.max(best, 25);
565
- }
566
- // testID exact match should win over a fuzzy name hit.
567
- if (params.testID && c.testID && c.testID.toLowerCase() === params.testID.toLowerCase()) {
568
- best = Math.max(best, 200);
569
- }
570
- return best;
569
+ return (0, _tapMatch.scoreTapMatch)(fieldsOf(c), params);
570
+ }
571
+ function tapPoint(rect, screenW, screenH) {
572
+ if (!rect || !screenW || !screenH) return undefined;
573
+ return {
574
+ x: (rect.x + rect.width / 2) / screenW,
575
+ y: (rect.y + rect.height / 2) / screenH
576
+ };
571
577
  }
572
578
  function makeSyntheticPressEvent(rect) {
573
579
  const pageX = rect ? rect.x + rect.width / 2 : 0;
@@ -623,7 +629,28 @@ async function tapElement(params) {
623
629
  }))
624
630
  };
625
631
  }
626
- const target = ranked.find(r => isInteractive(r.c)) ?? ranked[0];
632
+
633
+ // Measure the top matches so an on-screen DialIcon beats an off-screen nav
634
+ // chip whose testID happens to contain the same substring.
635
+ const win = _reactNative.Dimensions.get("window");
636
+ const screenW = win.width || 1;
637
+ const screenH = win.height || 1;
638
+ const top = ranked.slice(0, 15);
639
+ await Promise.all(top.map(async r => {
640
+ if (r.c.instance && !r.c.rect) r.c.rect = await measureInstance(r.c.instance);
641
+ }));
642
+ for (const r of top) {
643
+ r.score = (0, _tapMatch.scoreTapMatch)({
644
+ ...fieldsOf(r.c),
645
+ tap: tapPoint(r.c.rect, screenW, screenH)
646
+ }, params);
647
+ }
648
+ top.sort((a, b) => b.score - a.score);
649
+
650
+ // Fall back to the FULL ranked list for an interactive match — the top-15
651
+ // re-score is only a tiebreak, and on a busy screen the pressable match can
652
+ // sit below 15 text-score peers.
653
+ const target = top.find(r => isInteractive(r.c)) ?? ranked.find(r => isInteractive(r.c)) ?? top[0];
627
654
  const c = target.c;
628
655
  if (!isInteractive(c)) {
629
656
  return {
@@ -642,20 +669,18 @@ async function tapElement(params) {
642
669
 
643
670
  // Measure the target so we can decide whether to scroll it on-screen (and,
644
671
  // for a press, give the synthetic event real coordinates).
645
- if (c.instance) c.rect = await measureInstance(c.instance);
672
+ if (c.instance && !c.rect) c.rect = await measureInstance(c.instance);
646
673
 
647
674
  // Bring it into view if it's off-screen and scrolling is wanted. The action
648
675
  // doesn't NEED this (handlers are invoked directly), but it keeps the element
649
676
  // visible for the human watching / a follow-up describe.
650
677
  let scrolled = false;
651
- if (params.scrollIntoView !== false && c.instance) {
652
- const win = _reactNative.Dimensions.get("window");
653
- const centerY = c.rect ? c.rect.y + c.rect.height / 2 : null;
654
- const offScreen = c.rect == null || centerY < 0 || centerY > win.height;
655
- if (offScreen) {
656
- scrolled = await scrollIntoView(c.fiber, c.instance, c.stateNode, 80);
657
- if (scrolled) c.rect = await measureInstance(c.instance); // fresh coords
658
- }
678
+ // A failed measure (rect == null) counts as off-screen: the node may be in
679
+ // a virtualized list that hasn't materialized it, and scrolling can help.
680
+ const offScreen = c.rect == null || !(0, _tapMatch.isRectCenterOnScreen)(c.rect, screenW, screenH);
681
+ if (offScreen && params.scrollIntoView !== false && c.instance) {
682
+ scrolled = await scrollIntoView(c.fiber, c.instance, c.stateNode, 80);
683
+ if (scrolled) c.rect = await measureInstance(c.instance); // fresh coords
659
684
  }
660
685
  const base = {
661
686
  nativeTag: c.nativeTag,
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isOnScreenTap = isOnScreenTap;
7
+ exports.isRectCenterOnScreen = isRectCenterOnScreen;
8
+ exports.scoreTapMatch = scoreTapMatch;
9
+ /**
10
+ * Shared tap-target scoring for describe_screen / tap_element.
11
+ *
12
+ * Ranking used to be substring-on-testID only, so `tap: "ASSETS"` preferred
13
+ * `nav-assets-tool-test` (score 25) over a visible dial icon, and off-screen
14
+ * Expo Router screens (y > 1) stayed in the candidate list.
15
+ */
16
+
17
+ /** True when the measured center is inside the window (10% slack for home-indicator / portal hosts). */
18
+ function isOnScreenTap(tap) {
19
+ if (!tap) return false;
20
+ return tap.x >= -0.1 && tap.x <= 1.1 && tap.y >= -0.1 && tap.y <= 1.1;
21
+ }
22
+
23
+ /**
24
+ * Point-in-window test in *points* (measureInWindow coords), with slack so
25
+ * the floating menu and rows clipped at the home indicator still count.
26
+ * Previous Expo Router screens typically measure at y > 1.2× window height.
27
+ */
28
+ function isRectCenterOnScreen(rect, screenW, screenH) {
29
+ if (!rect || screenW <= 0 || screenH <= 0) return false;
30
+ const cx = rect.x + rect.width / 2;
31
+ const cy = rect.y + rect.height / 2;
32
+ const slackX = screenW * 0.1;
33
+ const slackY = screenH * 0.1;
34
+ return cx >= -slackX && cx <= screenW + slackX && cy >= -slackY && cy <= screenH + slackY;
35
+ }
36
+ function scoreTapMatch(c, params) {
37
+ if (params.nativeTag != null && c.nativeTag === params.nativeTag) return 1000;
38
+ const q = (params.query ?? params.testID ?? "").trim().toLowerCase();
39
+ if (!q) return 0;
40
+ const fields = [c.testID, c.label, c.text, c.name].filter(Boolean).map(s => s.toLowerCase());
41
+ let best = 0;
42
+ for (const f of fields) {
43
+ if (f === q) best = Math.max(best, 100);else if (f.startsWith(q)) best = Math.max(best, 50);else if (f.includes(q)) best = Math.max(best, 25);
44
+ }
45
+ if (params.testID && c.testID && c.testID.toLowerCase() === params.testID.toLowerCase()) {
46
+ best = Math.max(best, 200);
47
+ }
48
+ if (best === 0) return 0;
49
+ const id = (c.testID ?? "").toLowerCase();
50
+ // Dial icons are the thing agents mean when they tap a tool name. (No
51
+ // penalties for app testID patterns — this ships in the library, and we
52
+ // don't know consumer apps' naming conventions.)
53
+ if (id.startsWith("buoy-dial-")) best += 40;
54
+ if (c.tap) {
55
+ if (isOnScreenTap(c.tap)) best += 20;else best -= 40;
56
+ }
57
+ return best;
58
+ }
@@ -901,6 +901,28 @@ export function HighlightFilterView({
901
901
  })
902
902
  }, preset.value))
903
903
  })]
904
+ }), /*#__PURE__*/_jsxs(View, {
905
+ style: [styles.settingItem, styles.settingItemSpaced],
906
+ children: [/*#__PURE__*/_jsxs(View, {
907
+ style: styles.settingHeader,
908
+ children: [/*#__PURE__*/_jsx(Text, {
909
+ style: styles.settingLabel,
910
+ children: "Show host views"
911
+ }), /*#__PURE__*/_jsx(Switch, {
912
+ value: !!settings.showHostViews,
913
+ onValueChange: value => onSettingsChange({
914
+ showHostViews: value
915
+ }),
916
+ trackColor: {
917
+ false: night.color.surfaceElevated,
918
+ true: night.color.accent + "80"
919
+ },
920
+ thumbColor: settings.showHostViews ? night.color.accent : night.color.knob
921
+ })]
922
+ }), /*#__PURE__*/_jsx(Text, {
923
+ style: styles.settingDescription,
924
+ children: "Include anonymous View / RCTView / Text hosts. Off by default so the list is named composites (what actually re-rendered)."
925
+ })]
904
926
  }), /*#__PURE__*/_jsxs(View, {
905
927
  style: [styles.settingItem, styles.settingItemSpaced],
906
928
  children: [/*#__PURE__*/_jsxs(View, {
@@ -30,6 +30,8 @@
30
30
  import { installProfilerInterceptor, uninstallProfilerInterceptor, setComparisonCallback } from "./ProfilerInterceptor";
31
31
  import { findNodeHandle, UIManager, Dimensions, PixelRatio } from "react-native";
32
32
  import { RenderTracker } from "./RenderTracker";
33
+ import { describeScreen } from "./screenElements";
34
+ import { scoreTapMatch } from "./tapMatch";
33
35
  import { PerformanceLogger, markEventReceived } from "./PerformanceLogger";
34
36
  import { detectRenderCause, clearRenderCauseState } from "./RenderCauseDetector";
35
37
  import { notifySubscriberCountChange } from "@buoy-gg/shared-ui";
@@ -1165,10 +1167,60 @@ async function locateComponent(params) {
1165
1167
  const margin = typeof params.margin === "number" ? params.margin : 12;
1166
1168
  const renders = RenderTracker.getRenders();
1167
1169
  if (renders.length === 0) {
1170
+ const described = await describeScreen();
1171
+ const q = (params.query ?? "").trim().toLowerCase();
1172
+ let best;
1173
+ for (const el of described.elements) {
1174
+ if (params.nativeTag != null && el.nativeTag === params.nativeTag) {
1175
+ best = {
1176
+ el,
1177
+ score: 1000
1178
+ };
1179
+ break;
1180
+ }
1181
+ const score = scoreTapMatch({
1182
+ nativeTag: el.nativeTag,
1183
+ testID: el.testID,
1184
+ label: el.label,
1185
+ text: el.text,
1186
+ name: el.name,
1187
+ tap: el.tap
1188
+ }, {
1189
+ query: q || undefined,
1190
+ nativeTag: params.nativeTag
1191
+ });
1192
+ if (score <= 0) continue;
1193
+ if (!best || score > best.score) best = {
1194
+ el,
1195
+ score
1196
+ };
1197
+ }
1198
+ if (!best?.el.frame) {
1199
+ return {
1200
+ matched: false,
1201
+ reason: "no-match",
1202
+ candidates: []
1203
+ };
1204
+ }
1205
+ const win = described.screen;
1206
+ const f = best.el.frame;
1168
1207
  return {
1169
- matched: false,
1170
- reason: "no-renders",
1171
- candidates: []
1208
+ matched: true,
1209
+ live: true,
1210
+ rect: {
1211
+ x: f.x * win.width,
1212
+ y: f.y * win.height,
1213
+ width: f.width * win.width,
1214
+ height: f.height * win.height
1215
+ },
1216
+ scale: PixelRatio.get(),
1217
+ screen: {
1218
+ width: win.width,
1219
+ height: win.height
1220
+ },
1221
+ nativeTag: best.el.nativeTag ?? undefined,
1222
+ componentName: best.el.name,
1223
+ testID: best.el.testID
1172
1224
  };
1173
1225
  }
1174
1226
 
@@ -10,6 +10,7 @@
10
10
 
11
11
  import { getComponentDisplayName } from "./ViewTypeMapper";
12
12
  import { PerformanceLogger } from "./PerformanceLogger";
13
+ import { isNamedComposite } from "./namedComposite";
13
14
 
14
15
  /**
15
16
  * Debug logging levels for render cause detection.
@@ -69,7 +70,8 @@ class RenderTrackerSingleton {
69
70
  // Debug settings
70
71
  debugLogLevel: "off",
71
72
  // Dev tools visibility - exclude by default
72
- excludeDevTools: true
73
+ excludeDevTools: true,
74
+ showHostViews: false
73
75
  };
74
76
 
75
77
  // Batch mode: defer notifyListeners until endBatch is called
@@ -418,6 +420,9 @@ class RenderTrackerSingleton {
418
420
  */
419
421
  getFilteredRenders(searchText = "") {
420
422
  let renders = this.getRenders();
423
+ if (!this.settings.showHostViews) {
424
+ renders = renders.filter(isNamedComposite);
425
+ }
421
426
 
422
427
  // Apply search filter
423
428
  if (searchText.trim()) {
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Host views (RCTView / View / Text) drown the Highlight Updates list.
5
+ * Named composites are what you actually want when asking "what re-rendered?"
6
+ */
7
+
8
+ const HOST_NAMES = new Set(["View", "RCTView", "Text", "RCTText", "RawText", "RCTRawText", "VirtualText", "RCTVirtualText", "ScrollView", "RCTScrollView", "RCTScrollContentView", "SafeAreaView", "RCTSafeAreaView", "Pressable", "TouchableOpacity", "Image", "RCTImageView"]);
9
+
10
+ /**
11
+ * Fiber names that look like identity but are list chrome / RN internals.
12
+ * Only provably-anonymous names belong here — real components (CopyButton,
13
+ * a user's `Copy`…) must stay visible. "Comp Copy"-style truncated
14
+ * placeholders are handled by the regex in isNamedComposite instead.
15
+ */
16
+ const PLACEHOLDER_NAMES = new Set(["Unknown", "Anonymous", "CellRenderer", "NativeComponent"]);
17
+ /**
18
+ * True when this row is a named user composite (or has a testID). Host views
19
+ * and anonymous "Comp Copy" wrappers return false.
20
+ */
21
+ export function isNamedComposite(r) {
22
+ if (r.testID && r.testID.trim()) return true;
23
+ const name = (r.componentName ?? "").trim();
24
+ if (!name) return false;
25
+ if (HOST_NAMES.has(name)) return false;
26
+ if (PLACEHOLDER_NAMES.has(name)) return false;
27
+ const view = (r.viewType ?? "").trim();
28
+ if (view && HOST_NAMES.has(view) && name === view) return false;
29
+ // "Comp Copy" / "1x" style placeholders — no real component identity.
30
+ if (/^comp(\s|$)/i.test(name)) return false;
31
+ if (name.startsWith("_")) return false;
32
+ return true;
33
+ }
34
+ export function isHostViewName(name) {
35
+ return !!name && HOST_NAMES.has(name);
36
+ }
@@ -21,6 +21,7 @@
21
21
  */
22
22
 
23
23
  import { Dimensions, UIManager, findNodeHandle } from "react-native";
24
+ import { isRectCenterOnScreen, scoreTapMatch } from "./tapMatch";
24
25
 
25
26
  /* eslint-disable @typescript-eslint/no-explicit-any */
26
27
 
@@ -495,9 +496,10 @@ export async function describeScreen() {
495
496
  if (r) {
496
497
  const cx = r.x + r.width / 2;
497
498
  const cy = r.y + r.height / 2;
498
- // Skip elements entirely off-screen.
499
+ // Drop previous Expo Router screens (centers well outside the window).
500
+ // Keep a 10% slack so the floating menu / home-indicator-clipped rows stay.
499
501
  if (cy < -screenH * 0.1 || cy > screenH * 1.1 || cx < -screenW * 0.1 || cx > screenW * 1.1) {
500
- if (!c.testID) continue;
502
+ continue;
501
503
  }
502
504
  tap = {
503
505
  x: round2(cx / screenW),
@@ -550,20 +552,24 @@ function round2(n) {
550
552
 
551
553
  // --- tapElement -----------------------------------------------------------
552
554
 
555
+ function fieldsOf(c) {
556
+ return {
557
+ nativeTag: c.nativeTag,
558
+ testID: c.testID,
559
+ label: c.label,
560
+ text: c.text,
561
+ name: c.name
562
+ };
563
+ }
553
564
  function matchScore(c, params) {
554
- if (params.nativeTag != null && c.nativeTag === params.nativeTag) return 1000;
555
- const q = (params.query ?? params.testID ?? "").trim().toLowerCase();
556
- if (!q) return 0;
557
- const fields = [c.testID, c.label, c.text, c.name].filter(Boolean).map(s => s.toLowerCase());
558
- let best = 0;
559
- for (const f of fields) {
560
- if (f === q) best = Math.max(best, 100);else if (f.startsWith(q)) best = Math.max(best, 50);else if (f.includes(q)) best = Math.max(best, 25);
561
- }
562
- // testID exact match should win over a fuzzy name hit.
563
- if (params.testID && c.testID && c.testID.toLowerCase() === params.testID.toLowerCase()) {
564
- best = Math.max(best, 200);
565
- }
566
- return best;
565
+ return scoreTapMatch(fieldsOf(c), params);
566
+ }
567
+ function tapPoint(rect, screenW, screenH) {
568
+ if (!rect || !screenW || !screenH) return undefined;
569
+ return {
570
+ x: (rect.x + rect.width / 2) / screenW,
571
+ y: (rect.y + rect.height / 2) / screenH
572
+ };
567
573
  }
568
574
  function makeSyntheticPressEvent(rect) {
569
575
  const pageX = rect ? rect.x + rect.width / 2 : 0;
@@ -619,7 +625,28 @@ export async function tapElement(params) {
619
625
  }))
620
626
  };
621
627
  }
622
- const target = ranked.find(r => isInteractive(r.c)) ?? ranked[0];
628
+
629
+ // Measure the top matches so an on-screen DialIcon beats an off-screen nav
630
+ // chip whose testID happens to contain the same substring.
631
+ const win = Dimensions.get("window");
632
+ const screenW = win.width || 1;
633
+ const screenH = win.height || 1;
634
+ const top = ranked.slice(0, 15);
635
+ await Promise.all(top.map(async r => {
636
+ if (r.c.instance && !r.c.rect) r.c.rect = await measureInstance(r.c.instance);
637
+ }));
638
+ for (const r of top) {
639
+ r.score = scoreTapMatch({
640
+ ...fieldsOf(r.c),
641
+ tap: tapPoint(r.c.rect, screenW, screenH)
642
+ }, params);
643
+ }
644
+ top.sort((a, b) => b.score - a.score);
645
+
646
+ // Fall back to the FULL ranked list for an interactive match — the top-15
647
+ // re-score is only a tiebreak, and on a busy screen the pressable match can
648
+ // sit below 15 text-score peers.
649
+ const target = top.find(r => isInteractive(r.c)) ?? ranked.find(r => isInteractive(r.c)) ?? top[0];
623
650
  const c = target.c;
624
651
  if (!isInteractive(c)) {
625
652
  return {
@@ -638,20 +665,18 @@ export async function tapElement(params) {
638
665
 
639
666
  // Measure the target so we can decide whether to scroll it on-screen (and,
640
667
  // for a press, give the synthetic event real coordinates).
641
- if (c.instance) c.rect = await measureInstance(c.instance);
668
+ if (c.instance && !c.rect) c.rect = await measureInstance(c.instance);
642
669
 
643
670
  // Bring it into view if it's off-screen and scrolling is wanted. The action
644
671
  // doesn't NEED this (handlers are invoked directly), but it keeps the element
645
672
  // visible for the human watching / a follow-up describe.
646
673
  let scrolled = false;
647
- if (params.scrollIntoView !== false && c.instance) {
648
- const win = Dimensions.get("window");
649
- const centerY = c.rect ? c.rect.y + c.rect.height / 2 : null;
650
- const offScreen = c.rect == null || centerY < 0 || centerY > win.height;
651
- if (offScreen) {
652
- scrolled = await scrollIntoView(c.fiber, c.instance, c.stateNode, 80);
653
- if (scrolled) c.rect = await measureInstance(c.instance); // fresh coords
654
- }
674
+ // A failed measure (rect == null) counts as off-screen: the node may be in
675
+ // a virtualized list that hasn't materialized it, and scrolling can help.
676
+ const offScreen = c.rect == null || !isRectCenterOnScreen(c.rect, screenW, screenH);
677
+ if (offScreen && params.scrollIntoView !== false && c.instance) {
678
+ scrolled = await scrollIntoView(c.fiber, c.instance, c.stateNode, 80);
679
+ if (scrolled) c.rect = await measureInstance(c.instance); // fresh coords
655
680
  }
656
681
  const base = {
657
682
  nativeTag: c.nativeTag,
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Shared tap-target scoring for describe_screen / tap_element.
5
+ *
6
+ * Ranking used to be substring-on-testID only, so `tap: "ASSETS"` preferred
7
+ * `nav-assets-tool-test` (score 25) over a visible dial icon, and off-screen
8
+ * Expo Router screens (y > 1) stayed in the candidate list.
9
+ */
10
+
11
+ /** True when the measured center is inside the window (10% slack for home-indicator / portal hosts). */
12
+ export function isOnScreenTap(tap) {
13
+ if (!tap) return false;
14
+ return tap.x >= -0.1 && tap.x <= 1.1 && tap.y >= -0.1 && tap.y <= 1.1;
15
+ }
16
+
17
+ /**
18
+ * Point-in-window test in *points* (measureInWindow coords), with slack so
19
+ * the floating menu and rows clipped at the home indicator still count.
20
+ * Previous Expo Router screens typically measure at y > 1.2× window height.
21
+ */
22
+ export function isRectCenterOnScreen(rect, screenW, screenH) {
23
+ if (!rect || screenW <= 0 || screenH <= 0) return false;
24
+ const cx = rect.x + rect.width / 2;
25
+ const cy = rect.y + rect.height / 2;
26
+ const slackX = screenW * 0.1;
27
+ const slackY = screenH * 0.1;
28
+ return cx >= -slackX && cx <= screenW + slackX && cy >= -slackY && cy <= screenH + slackY;
29
+ }
30
+ export function scoreTapMatch(c, params) {
31
+ if (params.nativeTag != null && c.nativeTag === params.nativeTag) return 1000;
32
+ const q = (params.query ?? params.testID ?? "").trim().toLowerCase();
33
+ if (!q) return 0;
34
+ const fields = [c.testID, c.label, c.text, c.name].filter(Boolean).map(s => s.toLowerCase());
35
+ let best = 0;
36
+ for (const f of fields) {
37
+ if (f === q) best = Math.max(best, 100);else if (f.startsWith(q)) best = Math.max(best, 50);else if (f.includes(q)) best = Math.max(best, 25);
38
+ }
39
+ if (params.testID && c.testID && c.testID.toLowerCase() === params.testID.toLowerCase()) {
40
+ best = Math.max(best, 200);
41
+ }
42
+ if (best === 0) return 0;
43
+ const id = (c.testID ?? "").toLowerCase();
44
+ // Dial icons are the thing agents mean when they tap a tool name. (No
45
+ // penalties for app testID patterns — this ships in the library, and we
46
+ // don't know consumer apps' naming conventions.)
47
+ if (id.startsWith("buoy-dial-")) best += 40;
48
+ if (c.tap) {
49
+ if (isOnScreenTap(c.tap)) best += 20;else best -= 40;
50
+ }
51
+ return best;
52
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"HighlightFilterView.d.ts","sourceRoot":"","sources":["../../../../src/highlight-updates/components/HighlightFilterView.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAgC,MAAM,OAAO,CAAC;AAwBrD,OAAO,KAAK,EACV,YAAY,EAGZ,qBAAqB,EAGtB,MAAM,wBAAwB,CAAC;AAOhC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,UAAU,wBAAwB;IAChC,OAAO,EAAE,YAAY,CAAC;IACtB,cAAc,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;IACzD,QAAQ,EAAE,qBAAqB,CAAC;IAChC,gBAAgB,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,qBAAqB,CAAC,KAAK,IAAI,CAAC;IACrE,cAAc,EAAE;QACd,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,cAAc,EAAE,MAAM,EAAE,CAAC;QACzB,mBAAmB,EAAE,MAAM,EAAE,CAAC;KAC/B,CAAC;IACF,SAAS,EAAE,aAAa,CAAC;CAC1B;AA+OD,wBAAgB,mBAAmB,CAAC,EAClC,OAAO,EACP,cAAc,EACd,QAAQ,EACR,gBAAgB,EAChB,cAAc,EACd,SAAS,GACV,EAAE,wBAAwB,qBAq3B1B;AAibD,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"HighlightFilterView.d.ts","sourceRoot":"","sources":["../../../../src/highlight-updates/components/HighlightFilterView.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAgC,MAAM,OAAO,CAAC;AAwBrD,OAAO,KAAK,EACV,YAAY,EAGZ,qBAAqB,EAGtB,MAAM,wBAAwB,CAAC;AAOhC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,UAAU,wBAAwB;IAChC,OAAO,EAAE,YAAY,CAAC;IACtB,cAAc,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC;IACzD,QAAQ,EAAE,qBAAqB,CAAC;IAChC,gBAAgB,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,qBAAqB,CAAC,KAAK,IAAI,CAAC;IACrE,cAAc,EAAE;QACd,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,cAAc,EAAE,MAAM,EAAE,CAAC;QACzB,mBAAmB,EAAE,MAAM,EAAE,CAAC;KAC/B,CAAC;IACF,SAAS,EAAE,aAAa,CAAC;CAC1B;AA+OD,wBAAgB,mBAAmB,CAAC,EAClC,OAAO,EACP,cAAc,EACd,QAAQ,EACR,gBAAgB,EAChB,cAAc,EACd,SAAS,GACV,EAAE,wBAAwB,qBA24B1B;AAibD,eAAe,mBAAmB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"HighlightUpdatesController.d.ts","sourceRoot":"","sources":["../../../../src/highlight-updates/utils/HighlightUpdatesController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HighlightUpdatesController.d.ts","sourceRoot":"","sources":["../../../../src/highlight-updates/utils/HighlightUpdatesController.ts"],"names":[],"mappings":"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"}
@@ -191,6 +191,12 @@ export interface RenderTrackerSettings {
191
191
  * Default: true
192
192
  */
193
193
  excludeDevTools: boolean;
194
+ /**
195
+ * When false (default), the list shows named composites only — host views
196
+ * (RCTView / View / Text) and anonymous "Comp Copy" rows are hidden.
197
+ * Turn on to see every native host.
198
+ */
199
+ showHostViews: boolean;
194
200
  }
195
201
  declare class RenderTrackerSingleton {
196
202
  private renders;
@@ -1 +1 @@
1
- {"version":3,"file":"RenderTracker.d.ts","sourceRoot":"","sources":["../../../../src/highlight-updates/utils/RenderTracker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RenderTracker.d.ts","sourceRoot":"","sources":["../../../../src/highlight-updates/utils/RenderTracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Host views (RCTView / View / Text) drown the Highlight Updates list.
3
+ * Named composites are what you actually want when asking "what re-rendered?"
4
+ */
5
+ export interface NamedCompositeInput {
6
+ componentName?: string | null;
7
+ displayName?: string | null;
8
+ viewType?: string | null;
9
+ testID?: string | null;
10
+ }
11
+ /**
12
+ * True when this row is a named user composite (or has a testID). Host views
13
+ * and anonymous "Comp Copy" wrappers return false.
14
+ */
15
+ export declare function isNamedComposite(r: NamedCompositeInput): boolean;
16
+ export declare function isHostViewName(name: string | null | undefined): boolean;
17
+ //# sourceMappingURL=namedComposite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"namedComposite.d.ts","sourceRoot":"","sources":["../../../../src/highlight-updates/utils/namedComposite.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmCH,MAAM,WAAW,mBAAmB;IAClC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAYhE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAEvE"}
@@ -1 +1 @@
1
- {"version":3,"file":"screenElements.d.ts","sourceRoot":"","sources":["../../../../src/highlight-updates/utils/screenElements.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAqaH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,WAAW,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,OAAO,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;IACvC,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IAClC,iFAAiF;IACjF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,0DAA0D;IAC1D,GAAG,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/B,8BAA8B;IAC9B,KAAK,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACjE;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iFAAiF;IACjF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,2DAA2D;IAC3D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE;QACR,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,SAAS,GAAG,aAAa,GAAG,eAAe,GAAG,cAAc,CAAC;QAClE,sDAAsD;QACtD,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;KACnC,CAAC;IACF,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChG;AA8JD,wBAAsB,cAAc,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAiEpE;AAsDD,wBAAsB,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAsHpF"}
1
+ {"version":3,"file":"screenElements.d.ts","sourceRoot":"","sources":["../../../../src/highlight-updates/utils/screenElements.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAsaH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,WAAW,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,OAAO,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;IACvC,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IAClC,iFAAiF;IACjF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,0DAA0D;IAC1D,GAAG,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/B,8BAA8B;IAC9B,KAAK,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACjE;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iFAAiF;IACjF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,2DAA2D;IAC3D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE;QACR,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,SAAS,GAAG,aAAa,GAAG,eAAe,GAAG,cAAc,CAAC;QAClE,sDAAsD;QACtD,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;KACnC,CAAC;IACF,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChG;AA8JD,wBAAsB,cAAc,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAkEpE;AA8DD,wBAAsB,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA2IpF"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Shared tap-target scoring for describe_screen / tap_element.
3
+ *
4
+ * Ranking used to be substring-on-testID only, so `tap: "ASSETS"` preferred
5
+ * `nav-assets-tool-test` (score 25) over a visible dial icon, and off-screen
6
+ * Expo Router screens (y > 1) stayed in the candidate list.
7
+ */
8
+ export interface TapMatchFields {
9
+ nativeTag?: number | null;
10
+ testID?: string;
11
+ label?: string;
12
+ text?: string;
13
+ name?: string;
14
+ /** Normalized [0,1] tap point, if measured. */
15
+ tap?: {
16
+ x: number;
17
+ y: number;
18
+ };
19
+ }
20
+ export interface TapMatchQuery {
21
+ nativeTag?: number;
22
+ testID?: string;
23
+ query?: string;
24
+ }
25
+ /** True when the measured center is inside the window (10% slack for home-indicator / portal hosts). */
26
+ export declare function isOnScreenTap(tap?: {
27
+ x: number;
28
+ y: number;
29
+ } | null): boolean;
30
+ /**
31
+ * Point-in-window test in *points* (measureInWindow coords), with slack so
32
+ * the floating menu and rows clipped at the home indicator still count.
33
+ * Previous Expo Router screens typically measure at y > 1.2× window height.
34
+ */
35
+ export declare function isRectCenterOnScreen(rect: {
36
+ x: number;
37
+ y: number;
38
+ width: number;
39
+ height: number;
40
+ } | null, screenW: number, screenH: number): boolean;
41
+ export declare function scoreTapMatch(c: TapMatchFields, params: TapMatchQuery): number;
42
+ //# sourceMappingURL=tapMatch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tapMatch.d.ts","sourceRoot":"","sources":["../../../../src/highlight-updates/utils/tapMatch.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,GAAG,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wGAAwG;AACxG,wBAAgB,aAAa,CAAC,GAAG,CAAC,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAAG,OAAO,CAG5E;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,EACpE,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAOT;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,GAAG,MAAM,CA2B9E"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@buoy-gg/highlight-updates",
3
- "version": "7.0.27",
3
+ "version": "7.0.28",
4
4
  "description": "Render highlighter for React Native — see every render with its cause: mount, state, props, or parent. Part of Buoy devtools.",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -26,14 +26,14 @@
26
26
  ],
27
27
  "sideEffects": false,
28
28
  "dependencies": {
29
- "@buoy-gg/shared-ui": "^7.0.27",
30
- "@buoy-gg/floating-tools-core": "^7.0.27"
29
+ "@buoy-gg/floating-tools-core": "^7.0.28",
30
+ "@buoy-gg/shared-ui": "^7.0.28"
31
31
  },
32
32
  "peerDependencies": {
33
- "@buoy-gg/license": "7.0.27",
33
+ "@buoy-gg/license": "7.0.28",
34
34
  "react": "*",
35
35
  "react-native": "*",
36
- "@buoy-gg/core": "^7.0.27"
36
+ "@buoy-gg/core": "^7.0.28"
37
37
  },
38
38
  "peerDependenciesMeta": {
39
39
  "@buoy-gg/core": {
@@ -44,8 +44,8 @@
44
44
  "@types/react": "^19.1.0",
45
45
  "@types/react-native": "^0.73.0",
46
46
  "typescript": "~5.8.3",
47
- "@buoy-gg/license": "^7.0.27",
48
- "@buoy-gg/core": "^7.0.27"
47
+ "@buoy-gg/core": "^7.0.28",
48
+ "@buoy-gg/license": "^7.0.28"
49
49
  },
50
50
  "react-native-builder-bob": {
51
51
  "source": "src",