@buoy-gg/highlight-updates 7.0.30 → 7.0.31

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.
@@ -97,4 +97,80 @@ export interface TapElementResult {
97
97
  }
98
98
  export declare function describeScreen(): Promise<DescribeScreenResult>;
99
99
  export declare function tapElement(params: TapElementParams): Promise<TapElementResult>;
100
+ export interface WaitForParams {
101
+ nativeTag?: number;
102
+ testID?: string;
103
+ query?: string;
104
+ /** Wait for the element to be GONE instead of present. Default false. */
105
+ gone?: boolean;
106
+ /** Give up after this long. Default 5000ms, capped at 30000. */
107
+ timeoutMs?: number;
108
+ /** Gap between fiber scans. Default 150ms, floored at 50. */
109
+ pollMs?: number;
110
+ }
111
+ export interface WaitForResult {
112
+ ok: boolean;
113
+ /** How long the wait actually took, so a caller can report a real number. */
114
+ waitedMs: number;
115
+ polls: number;
116
+ reason?: string;
117
+ matched?: {
118
+ nativeTag: number | null;
119
+ name: string;
120
+ testID?: string;
121
+ label?: string;
122
+ text?: string;
123
+ interactive: boolean;
124
+ };
125
+ }
126
+ /**
127
+ * Block until an element appears (or disappears), then report how long it took.
128
+ *
129
+ * WHY THIS EXISTS. `navigate` returns the moment the route is pushed, not when
130
+ * the new screen has data on it, so "go to /shop then tap Fire Grill" reliably
131
+ * tapped a loading skeleton. A remote driver solves that with a wait step
132
+ * (MCP's `run_flow` has `waitFor`/`waitMs`); anything driving the tools from
133
+ * INSIDE the app had nothing, and its only option was to re-run
134
+ * `describeScreen` in a loop — which for an agent means burning turns against a
135
+ * step budget, and for a Scenario means a fixed sleep that is either flaky or
136
+ * slow.
137
+ *
138
+ * MATCHING IS `tapElement`'S, EXACTLY. Same `scoreTapMatch`, same fields, so
139
+ * "wait for X" and "tap X" can never disagree about what X is. A wait that
140
+ * resolves on an element the tap then cannot find is worse than no wait.
141
+ *
142
+ * PRESENCE MEANS ON SCREEN. An identity scan alone would resolve against a
143
+ * previous Expo Router screen still mounted behind the current one — the exact
144
+ * false positive `describeScreen` drops by rect. So a candidate that matches by
145
+ * name is measured before it counts, and only the matches are measured: the
146
+ * per-poll cost stays one fiber walk plus a handful of `measureInWindow`
147
+ * calls, not a full `describeScreen`.
148
+ *
149
+ * The poll floor is deliberate. This runs on the JS thread the app is drawing
150
+ * on, and a caller asking for `pollMs: 0` would starve the very render it is
151
+ * waiting for.
152
+ */
153
+ export declare function waitFor(params: WaitForParams): Promise<WaitForResult>;
154
+ /**
155
+ * What a recorded touch landed on, in the vocabulary `tapElement` searches by.
156
+ *
157
+ * Deliberately the SAME fields `describeScreen` emits: a macro recorded from a
158
+ * human's finger has to replay through `tapElement`, and the only way to
159
+ * guarantee that is for the recorder to name the element exactly the way the
160
+ * matcher will look for it. Anything richer here is a selector that records
161
+ * fine and then can't be found again.
162
+ */
163
+ export interface TouchTarget {
164
+ nativeTag: number | null;
165
+ name: string;
166
+ role?: string;
167
+ testID?: string;
168
+ label?: string;
169
+ text?: string;
170
+ /** How the element would be driven on replay. */
171
+ control?: "press" | "toggle" | "slider" | "text";
172
+ /** Current value of a toggle/slider/text control, at touch time. */
173
+ value?: number | boolean | string;
174
+ }
175
+ export declare function resolveTouchTarget(nativeTag: number): TouchTarget | null;
100
176
  //# sourceMappingURL=screenElements.d.ts.map
@@ -1 +1 @@
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"}
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;AAID,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,OAAO,CAAC;IACZ,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,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,WAAW,EAAE,OAAO,CAAC;KACtB,CAAC;CACH;AAOD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAgD3E;AAqCD;;;;;;;;GAQG;AACH,MAAM,WAAW,WAAW;IAC1B,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,iDAAiD;IACjD,OAAO,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;IACjD,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;CACnC;AAiGD,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CA2ExE"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * touchCapture — what a HUMAN is doing to the app, as replayable intents.
3
+ *
4
+ * This is the recording half of the pair whose playback half is `tapElement`:
5
+ * it watches real finger input and names each interaction in exactly the
6
+ * vocabulary `tapElement` searches by, so a recorded macro can be replayed
7
+ * without a second guess about what "that button" meant.
8
+ *
9
+ * Why RawEventEmitter and not the obvious alternatives:
10
+ * - A capture-phase responder on a root View would be the textbook answer, but
11
+ * Buoy mounts as a SIBLING of the app tree, not a parent. There is no root to
12
+ * wrap without changing every host app's integration.
13
+ * - Patching `Pressability`, or rewriting `onPress` props on the fly, breaks the
14
+ * moment a component re-renders (props are rebuilt every render) and misses
15
+ * everything driven by react-native-gesture-handler anyway.
16
+ * - RawEventEmitter mirrors every dispatched event before React's plugins see
17
+ * it, needs zero app instrumentation, and is already proven in-tree by
18
+ * focus-inspector's TV focus observer.
19
+ *
20
+ * Three rules the recorder above depends on:
21
+ *
22
+ * THE TARGET IS RESOLVED AT touchStart, NOT touchEnd. A press handler can
23
+ * navigate synchronously, so resolving after the fact names an element on the
24
+ * screen the app moved TO. We resolve while the finger is still down and emit
25
+ * when it lifts.
26
+ *
27
+ * A DRAG IS NOT A TAP. Scrolling a list produces the same touchStart the
28
+ * button above it does. Movement past a threshold, or an explicit
29
+ * touchCancel when a ScrollView steals the responder, drops the record —
30
+ * otherwise every recording is half scroll noise.
31
+ *
32
+ * KEYSTROKES ARE NOT INTENTS. Typing "SAVE10" fires six change events; a
33
+ * macro step wants the finished string. Consecutive edits to the same input
34
+ * collapse into the latest value as they arrive.
35
+ */
36
+ import { type TouchTarget } from "./screenElements";
37
+ export type TouchKind = "press" | "longPress" | "text" | "toggle" | "slider";
38
+ export interface TouchRecord {
39
+ /** Monotonic, so a poller can ask for everything after what it has. */
40
+ seq: number;
41
+ t: number;
42
+ kind: TouchKind;
43
+ /** The element, named the way `tapElement` searches. */
44
+ target: TouchTarget;
45
+ /** For text/toggle/slider: the value the user ended up with. */
46
+ value?: string | number | boolean;
47
+ }
48
+ export type CaptureStatus = "idle" | "capturing" | "unavailable";
49
+ export declare function startTouchCapture(): {
50
+ status: CaptureStatus;
51
+ reason: string | null;
52
+ };
53
+ export declare function stopTouchCapture(): void;
54
+ export declare function clearTouchCapture(): void;
55
+ export declare function getTouchCaptureStatus(): {
56
+ status: CaptureStatus;
57
+ reason: string | null;
58
+ };
59
+ /** Everything recorded after `sinceSeq`, plus where the caller now is. */
60
+ export declare function readTouchCapture(sinceSeq?: number): {
61
+ status: CaptureStatus;
62
+ reason: string | null;
63
+ records: TouchRecord[];
64
+ seq: number;
65
+ };
66
+ //# sourceMappingURL=touchCapture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"touchCapture.d.ts","sourceRoot":"","sources":["../../../../src/highlight-updates/utils/touchCapture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAmB1B,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,WAAW,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE7E,MAAM,WAAW,WAAW;IAC1B,uEAAuE;IACvE,GAAG,EAAE,MAAM,CAAC;IACZ,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,SAAS,CAAC;IAChB,wDAAwD;IACxD,MAAM,EAAE,WAAW,CAAC;IACpB,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;CACnC;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,WAAW,GAAG,aAAa,CAAC;AAuLjE,wBAAgB,iBAAiB,IAAI;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAyBpF;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAWvC;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAGxC;AAED,wBAAgB,qBAAqB,IAAI;IACvC,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAKA;AAED,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,QAAQ,SAAI,GAAG;IAC9C,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;CACb,CAMA"}
@@ -60,6 +60,24 @@ export declare const highlightUpdatesSyncAdapter: {
60
60
  setSilentTracking: (params?: unknown) => void;
61
61
  describeScreen: () => Promise<import("../highlight-updates/utils/screenElements").DescribeScreenResult>;
62
62
  tapElement: (params?: unknown) => Promise<import("../highlight-updates/utils/screenElements").TapElementResult>;
63
+ waitFor: (params?: unknown) => Promise<import("../highlight-updates/utils/screenElements").WaitForResult>;
64
+ startTouchCapture: () => {
65
+ status: import("../highlight-updates/utils/touchCapture").CaptureStatus;
66
+ reason: string | null;
67
+ };
68
+ stopTouchCapture: () => {
69
+ status: import("../highlight-updates/utils/touchCapture").CaptureStatus;
70
+ reason: string | null;
71
+ };
72
+ clearTouchCapture: () => {
73
+ ok: boolean;
74
+ };
75
+ readTouchCapture: (params?: unknown) => {
76
+ status: import("../highlight-updates/utils/touchCapture").CaptureStatus;
77
+ reason: string | null;
78
+ records: import("../highlight-updates/utils/touchCapture").TouchRecord[];
79
+ seq: number;
80
+ };
63
81
  };
64
82
  };
65
83
  //# sourceMappingURL=highlightUpdatesSyncAdapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"highlightUpdatesSyncAdapter.d.ts","sourceRoot":"","sources":["../../../src/sync/highlightUpdatesSyncAdapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,aAAa,EACd,MAAM,0CAA0C,CAAC;AAOlD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AA4F/D;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;0BAYhB,MAAM,IAAI;;;gBA3CC,OAAO;qBAAW,MAAM;;;qBAYrB,oBAAoB,GAAG,IAAI;;QAiD7D;;;WAGG;mCACwB,OAAO;;;;;;;;;;;;8BAcZ,OAAO;;;gCAYL,OAAO;mCASJ,OAAO;qCAQL,OAAO;;8BAad,OAAO;;CAEhC,CAAC"}
1
+ {"version":3,"file":"highlightUpdatesSyncAdapter.d.ts","sourceRoot":"","sources":["../../../src/sync/highlightUpdatesSyncAdapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,aAAa,EACd,MAAM,0CAA0C,CAAC;AAgBlD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AA4F/D;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;0BAYhB,MAAM,IAAI;;;gBA3CC,OAAO;qBAAW,MAAM;;;qBAYrB,oBAAoB,GAAG,IAAI;;QAiD7D;;;WAGG;mCACwB,OAAO;;;;;;;;;;;;8BAcZ,OAAO;;;gCAYL,OAAO;mCASJ,OAAO;qCAQL,OAAO;;8BAad,OAAO;2BAIV,OAAO;;;;;;;;;;;;oCAgBE,OAAO;;;;;;;CAGtC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@buoy-gg/highlight-updates",
3
- "version": "7.0.30",
3
+ "version": "7.0.31",
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.30",
30
- "@buoy-gg/floating-tools-core": "^7.0.30"
29
+ "@buoy-gg/shared-ui": "^7.0.31",
30
+ "@buoy-gg/floating-tools-core": "^7.0.31"
31
31
  },
32
32
  "peerDependencies": {
33
- "@buoy-gg/license": "7.0.30",
33
+ "@buoy-gg/license": "7.0.31",
34
34
  "react": "*",
35
35
  "react-native": "*",
36
- "@buoy-gg/core": "^7.0.30"
36
+ "@buoy-gg/core": "^7.0.31"
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/core": "^7.0.30",
48
- "@buoy-gg/license": "^7.0.30"
47
+ "@buoy-gg/license": "^7.0.31",
48
+ "@buoy-gg/core": "^7.0.31"
49
49
  },
50
50
  "react-native-builder-bob": {
51
51
  "source": "src",