@buoy-gg/core 7.0.34 → 7.0.36

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 (40) hide show
  1. package/README.md +13 -10
  2. package/lib/commonjs/floatingMenu/DevToolsSettingsModal.js +2 -2
  3. package/lib/commonjs/floatingMenu/DevToolsSettingsModal.web.js +1 -1
  4. package/lib/commonjs/floatingMenu/FloatingDevTools.js +1 -1
  5. package/lib/commonjs/floatingMenu/FloatingMenu.js +1 -1
  6. package/lib/commonjs/floatingMenu/MinimizedToolsStack.js +86 -4
  7. package/lib/commonjs/floatingMenu/MinimizedToolsStack.web.js +90 -6
  8. package/lib/commonjs/floatingMenu/dial/DialDevTools.js +2 -2
  9. package/lib/commonjs/floatingMenu/dial/DialDevTools.web.js +2 -2
  10. package/lib/commonjs/floatingMenu/dial/DialPagination.js +2 -2
  11. package/lib/commonjs/floatingMenu/dial/OnboardingTooltip.js +3 -3
  12. package/lib/commonjs/floatingMenu/dial/OnboardingTooltip.web.js +3 -2
  13. package/lib/commonjs/version.js +1 -1
  14. package/lib/module/floatingMenu/DevToolsSettingsModal.js +3 -3
  15. package/lib/module/floatingMenu/DevToolsSettingsModal.web.js +2 -2
  16. package/lib/module/floatingMenu/FloatingDevTools.js +1 -1
  17. package/lib/module/floatingMenu/FloatingMenu.js +1 -1
  18. package/lib/module/floatingMenu/MinimizedToolsStack.js +91 -8
  19. package/lib/module/floatingMenu/MinimizedToolsStack.web.js +92 -8
  20. package/lib/module/floatingMenu/dial/DialDevTools.js +3 -3
  21. package/lib/module/floatingMenu/dial/DialDevTools.web.js +3 -3
  22. package/lib/module/floatingMenu/dial/DialPagination.js +3 -3
  23. package/lib/module/floatingMenu/dial/OnboardingTooltip.js +4 -4
  24. package/lib/module/floatingMenu/dial/OnboardingTooltip.web.js +3 -2
  25. package/lib/module/version.js +1 -1
  26. package/lib/typescript/commonjs/floatingMenu/DevToolsSettingsModal.d.ts.map +1 -1
  27. package/lib/typescript/commonjs/floatingMenu/FloatingDevTools.d.ts.map +1 -1
  28. package/lib/typescript/commonjs/floatingMenu/FloatingMenu.d.ts.map +1 -1
  29. package/lib/typescript/commonjs/floatingMenu/MinimizedToolsStack.d.ts.map +1 -1
  30. package/lib/typescript/commonjs/floatingMenu/MinimizedToolsStack.web.d.ts.map +1 -1
  31. package/lib/typescript/commonjs/floatingMenu/dial/OnboardingTooltip.web.d.ts.map +1 -1
  32. package/lib/typescript/commonjs/version.d.ts +1 -1
  33. package/lib/typescript/module/floatingMenu/DevToolsSettingsModal.d.ts.map +1 -1
  34. package/lib/typescript/module/floatingMenu/FloatingDevTools.d.ts.map +1 -1
  35. package/lib/typescript/module/floatingMenu/FloatingMenu.d.ts.map +1 -1
  36. package/lib/typescript/module/floatingMenu/MinimizedToolsStack.d.ts.map +1 -1
  37. package/lib/typescript/module/floatingMenu/MinimizedToolsStack.web.d.ts.map +1 -1
  38. package/lib/typescript/module/floatingMenu/dial/OnboardingTooltip.web.d.ts.map +1 -1
  39. package/lib/typescript/module/version.d.ts +1 -1
  40. package/package.json +5 -5
package/README.md CHANGED
@@ -30,47 +30,50 @@ export default function App() {
30
30
  }
31
31
  ```
32
32
 
33
- That's the whole setup — a floating dev menu appears inside your app. Install any tool package and it auto-appears in the menu; most need zero config, a few take one line (like passing `zustandStores` or calling `watchAtoms()`). Add a `licenseKey` prop to unlock [Pro](https://buoy.gg/pricing): production builds, the MCP server, and unlimited capture.
33
+ That's the whole setup — a floating dev menu appears inside your app. Install any tool package and it auto-appears in the menu; most need zero config, a few take one line (like passing `zustandStores` or calling `watchAtoms()`). Add a `licenseKey` prop to unlock [Pro](https://buoy.gg/pricing): production builds, the MCP server, Ask Buoy, and unlimited capture.
34
34
 
35
- ## The 15 tools
35
+ ## The 21 tools
36
36
 
37
37
  | Tool | Package | What it does |
38
38
  | --- | --- | --- |
39
39
  | [Network](https://buoy.gg/buoy/latest/docs/tools/network) | `@buoy-gg/network` | Every request, response, timing & error — GraphQL operations extracted and named |
40
40
  | [Storage](https://buoy.gg/buoy/latest/docs/tools/storage) | `@buoy-gg/storage` | Browse & edit AsyncStorage, MMKV & SecureStore with change history |
41
+ | [Time Machine](https://buoy.gg/buoy/latest/docs/tools/time-machine) | `@buoy-gg/time-machine` | Snapshot storage, Redux, Zustand, Jotai & the query cache as restore points — jump back in one tap |
42
+ | [Ask Buoy](https://buoy.gg/buoy/latest/docs/tools/ask-buoy) | `@buoy-gg/ask-buoy` | An in-app AI chat that drives every tool in plain English, on your own model endpoint — with a changes bar and real undo *(beta)* |
41
43
  | [Env](https://buoy.gg/buoy/latest/docs/tools/env) | `@buoy-gg/env` | Auto-discovers `EXPO_PUBLIC_` vars, validates types, scores config health |
42
44
  | [Query](https://buoy.gg/buoy/latest/docs/tools/react-query) | `@buoy-gg/react-query` | TanStack Query cache — refetch, invalidate, simulate loading & error states |
43
45
  | [Routes](https://buoy.gg/buoy/latest/docs/tools/routes) | `@buoy-gg/route-events` | Navigation events, the live stack, and the full sitemap — jump to any screen |
44
46
  | [Debug Borders](https://buoy.gg/buoy/latest/docs/tools/debug-borders) | `@buoy-gg/debug-borders` | Depth-colored layout borders — tap any label for testID, a11y props & styles |
45
47
  | [Highlight Updates](https://buoy.gg/buoy/latest/docs/tools/highlight-updates) | `@buoy-gg/highlight-updates` | Every render, with the cause: mount, state, props, or parent |
46
48
  | [Bench](https://buoy.gg/buoy/latest/docs/tools/perf-monitor) | `@buoy-gg/perf-monitor` | UI/JS FPS, CPU, memory & jank on a real device — batch benchmarks, ranked reports |
49
+ | [JS Top](https://buoy.gg/buoy/latest/docs/tools/js-top) | `@buoy-gg/js-top` | Task Manager for the JS thread — which timers, Promise chains & callbacks eat your JS FPS |
50
+ | [Images](https://buoy.gg/buoy/latest/docs/tools/images) | `@buoy-gg/images` | Every image load with cache verdict, timing, and oversize & wasted-memory audit |
51
+ | [Assets](https://buoy.gg/buoy/latest/docs/tools/assets) | `@buoy-gg/assets` | Everything you ship — bundled images, fonts, video & audio with sizes, duplicates & never-loaded detection |
47
52
  | [Events](https://buoy.gg/buoy/latest/docs/tools/events) | `@buoy-gg/events` | One timeline across every tool, with LLM-friendly export presets |
48
53
  | [Console](https://buoy.gg/buoy/latest/docs/tools/console) | `@buoy-gg/console` | Chrome-DevTools console on device — read logs with no cable and no Metro |
54
+ | [Sentry](https://buoy.gg/buoy/latest/docs/tools/sentry) | `@buoy-gg/sentry` | Every envelope your app sends to Sentry, what it costs, and why an event never arrived |
49
55
  | [Redux](https://buoy.gg/buoy/latest/docs/tools/redux) | `@buoy-gg/redux` | Inspect, dispatch & time travel — flags actions that blow the frame budget |
50
56
  | [Zustand](https://buoy.gg/buoy/latest/docs/tools/zustand) | `@buoy-gg/zustand` | State, diffs, jump-to-state, one-tap reset — no middleware needed |
51
57
  | [Jotai](https://buoy.gg/buoy/latest/docs/tools/jotai) | `@buoy-gg/jotai` | One `watchAtoms()` call — every event shows `prev → next` |
52
58
  | [Impersonate](https://buoy.gg/buoy/latest/docs/tools/impersonate) | `@buoy-gg/impersonate` | Switch users, roles & flags without rebuilding |
53
59
  | [Overlay](https://buoy.gg/buoy/latest/docs/tools/image-overlay) | `@buoy-gg/image-overlay` | Pin Figma mockups pixel-perfect over the app |
54
60
 
55
- Grab everything in one line:
61
+ Two more ship for React Native TV — [TV Remote](https://buoy.gg/buoy/latest/docs/tools/tv-remote) and [Focus Inspector](https://buoy.gg/buoy/latest/docs/tools/focus-inspector) — and [Camera](https://buoy.gg/buoy/latest/docs/tools/camera) gives the iOS Simulator a working camera with no app integration at all.
56
62
 
57
- ```bash
58
- npm i @buoy-gg/{core,network,storage,env,react-query,route-events,debug-borders,highlight-updates,perf-monitor,events,console,redux,zustand,jotai,impersonate,image-overlay}
59
- ```
60
-
61
- ## Three surfaces, one live session
63
+ ## Four surfaces, one live session
62
64
 
63
- Every tool runs inside your app's process. The phone, the desktop, and your agent all see the same session, live.
65
+ Every tool runs inside your app's process. The phone, the desktop, your agent and the in-app chat all see the same session, live.
64
66
 
65
67
  - **On the phone** — tap the floating menu. Works on any device, no cable, no desktop app, no Metro.
66
68
  - **On your desktop** — [Buoy Desktop](https://github.com/Buoy-gg/Buoy-Desktop) (free) mirrors the tools to full-screen panels on macOS, Windows & Linux, with a live FPS / CPU / memory HUD and remote control of the device. Devices connect automatically — physical phones included, no URLs to configure.
67
69
  - **Through your agent** — the [Buoy MCP server](https://buoy.gg/buoy/latest/docs/mcp) gives Claude Code, Cursor, or any MCP editor structured tool calls into the running app: read live state, tap real buttons, run benchmarks on a physical device.
70
+ - **In plain English** — [Ask Buoy](https://buoy.gg/buoy/latest/docs/tools/ask-buoy) *(beta)* puts an AI chat inside the app that drives the same tools for QA, support and product. Your model endpoint, your key; nothing goes through Buoy.
68
71
 
69
72
  ## Free vs Pro
70
73
 
71
74
  Every tool is **free** on every tier — only how much history each keeps changes. A free key (`npx buoy login`, no card) restores the full free tier.
72
75
 
73
- **Pro** unlocks production builds, the MCP server, and unlimited capture. Activate with one prop:
76
+ **Pro** unlocks production builds, the MCP server, Ask Buoy, and unlimited capture. Activate with one prop:
74
77
 
75
78
  ```tsx
76
79
  <FloatingDevTools licenseKey="YOUR_LICENSE_KEY" />
@@ -1092,7 +1092,7 @@ const styles = _reactNative.StyleSheet.create({
1092
1092
  storageKeyText: {
1093
1093
  color: _sharedUi.night.color.textSecondary,
1094
1094
  fontSize: _sharedUi.night.font.micro,
1095
- fontFamily: "monospace"
1095
+ fontFamily: _sharedUi.monoFont
1096
1096
  },
1097
1097
  storageKeyEmpty: {
1098
1098
  color: _sharedUi.night.color.textTertiary,
@@ -1101,7 +1101,7 @@ const styles = _reactNative.StyleSheet.create({
1101
1101
  },
1102
1102
  // Footnote inline code
1103
1103
  footnoteMono: {
1104
- fontFamily: "monospace",
1104
+ fontFamily: _sharedUi.monoFont,
1105
1105
  fontSize: _sharedUi.night.font.label,
1106
1106
  color: _sharedUi.night.color.textSecondary
1107
1107
  }
@@ -1016,7 +1016,7 @@ function SettingsModal({
1016
1016
  style: {
1017
1017
  color: night.textSecondary,
1018
1018
  fontSize: 11,
1019
- fontFamily: 'monospace',
1019
+ fontFamily: _sharedUi.monoFont,
1020
1020
  overflow: 'hidden',
1021
1021
  textOverflow: 'ellipsis',
1022
1022
  whiteSpace: 'nowrap'
@@ -542,7 +542,7 @@ const FloatingDevTools = ({
542
542
  ...props,
543
543
  apps: finalApps,
544
544
  environment: resolvedEnvironment
545
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_AppHost.AppOverlay, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ToolOpenerBridge.ToolOpenerBridge, {})]
545
+ }), props.hidden ? null : /*#__PURE__*/(0, _jsxRuntime.jsx)(_AppHost.AppOverlay, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ToolOpenerBridge.ToolOpenerBridge, {})]
546
546
  })
547
547
  }), children, DebugBordersOverlay && /*#__PURE__*/(0, _jsxRuntime.jsx)(DebugBordersOverlay, {}), HighlightUpdatesOverlay && /*#__PURE__*/(0, _jsxRuntime.jsx)(HighlightUpdatesOverlay, {}), ImageOverlayOverlay && /*#__PURE__*/(0, _jsxRuntime.jsx)(ImageOverlayOverlay, {}), PerfMonitorOverlay && /*#__PURE__*/(0, _jsxRuntime.jsx)(PerfMonitorOverlay, {}), JsTopOverlay && /*#__PURE__*/(0, _jsxRuntime.jsx)(JsTopOverlay, {}), ImpersonateOverlay && /*#__PURE__*/(0, _jsxRuntime.jsx)(ImpersonateOverlay, {}), ScenariosOverlay && /*#__PURE__*/(0, _jsxRuntime.jsx)(ScenariosOverlay, {}), ReduxAutoInstrument && /*#__PURE__*/(0, _jsxRuntime.jsx)(ReduxAutoInstrument, {}), ConsoleRoot && /*#__PURE__*/(0, _jsxRuntime.jsx)(ConsoleRoot, {}), RouteTracker && /*#__PURE__*/(0, _jsxRuntime.jsx)(RouteTracker, {}), ReactQueryTracker && /*#__PURE__*/(0, _jsxRuntime.jsx)(ReactQueryTracker, {}), toolRegistry, syncEnabled && /*#__PURE__*/(0, _jsxRuntime.jsx)(_autoExternalSync.AutoExternalSync, {
548
548
  options: (0, _externalSyncGate.externalSyncOptions)(externalSync),
@@ -295,7 +295,7 @@ const FloatingMenu = ({
295
295
  })()
296
296
  }, `row-${app.id}`))]
297
297
  })
298
- }), showDial && /*#__PURE__*/(0, _jsxRuntime.jsx)(_DialDevTools.DialDevTools, {
298
+ }), showDial && !isCompletelyHidden && /*#__PURE__*/(0, _jsxRuntime.jsx)(_DialDevTools.DialDevTools, {
299
299
  apps: apps,
300
300
  state: state,
301
301
  actions: mergedActions,
@@ -10,9 +10,50 @@ var _sharedUi = require("@buoy-gg/shared-ui");
10
10
  var _MinimizedToolsContext = require("./MinimizedToolsContext.js");
11
11
  var _jsxRuntime = require("react/jsx-runtime");
12
12
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
13
+ /**
14
+ * A hidden tool's "I need you". See `setToolAttention` in shared-ui — the tool
15
+ * publishes, the rail draws. Read through useSyncExternalStore so a badge set
16
+ * from inside a minimized sheet lands on the chip without the rail polling.
17
+ */function useToolAttention(toolId) {
18
+ return (0, _react.useSyncExternalStore)(_sharedUi.subscribeToolAttention, () => (0, _sharedUi.getToolAttention)(toolId), () => (0, _sharedUi.getToolAttention)(toolId));
19
+ }
20
+ const ATTENTION_COLORS = {
21
+ needsInput: "#FF8329",
22
+ done: "#20C997",
23
+ failed: "#FF3B30"
24
+ };
25
+
26
+ /** needsInput outranks failed outranks done — the peek shows the one that matters most. */
27
+ const ATTENTION_RANK = {
28
+ needsInput: 3,
29
+ failed: 2,
30
+ done: 1
31
+ };
32
+
33
+ /** The strongest attention across every minimized tool, for the folded peek. */
34
+ function useStrongestAttention(toolIds) {
35
+ const key = toolIds.join("|");
36
+ return (0, _react.useSyncExternalStore)(_sharedUi.subscribeToolAttention, () => strongest(key), () => strongest(key));
37
+ }
38
+ const strongestCache = new Map();
39
+ function strongest(key) {
40
+ let best = null;
41
+ for (const id of key ? key.split("|") : []) {
42
+ const a = (0, _sharedUi.getToolAttention)(id);
43
+ if (a && (!best || ATTENTION_RANK[a.kind] > ATTENTION_RANK[best.kind])) best = a;
44
+ }
45
+ // Same value → same object, or useSyncExternalStore re-renders forever.
46
+ const prev = strongestCache.get(key);
47
+ if (prev && best && prev.kind === best.kind && prev.label === best.label) return prev;
48
+ if (!prev && !best) return null;
49
+ strongestCache.set(key, best);
50
+ return best;
51
+ }
52
+
13
53
  // ============================================================================
14
54
  // Constants
15
55
  // ============================================================================
56
+
16
57
  const PEEK_HEIGHT = 28;
17
58
  const TOOLBAR_WIDTH = 44;
18
59
  const TOOL_ITEM_SIZE = 32;
@@ -35,6 +76,7 @@ function GlitchToolButton({
35
76
  onSelect,
36
77
  index
37
78
  }) {
79
+ const attention = useToolAttention(tool.id);
38
80
  const glitchX = (0, _react.useRef)(new _reactNative.Animated.Value(0)).current;
39
81
  const glitchOpacity = (0, _react.useRef)(new _reactNative.Animated.Value(1)).current;
40
82
  const glitchScale = (0, _react.useRef)(new _reactNative.Animated.Value(1)).current;
@@ -126,13 +168,14 @@ function GlitchToolButton({
126
168
  clearTimeout(timeoutId);
127
169
  };
128
170
  }, [glitchX, glitchOpacity, glitchScale, index]);
129
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
171
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
130
172
  onPress: () => onSelect(tool),
131
173
  activeOpacity: 0.7,
132
174
  style: styles.toolButton,
133
- accessibilityLabel: `Restore ${tool.title}`,
175
+ accessibilityLabel: attention ? `${tool.title} — ${attention.label}. Restore` : `Restore ${tool.title}`,
134
176
  accessibilityRole: "button",
135
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
177
+ testID: `buoy-dock-restore-${tool.id}`,
178
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
136
179
  style: {
137
180
  opacity: glitchOpacity,
138
181
  transform: [{
@@ -142,7 +185,17 @@ function GlitchToolButton({
142
185
  }]
143
186
  },
144
187
  children: tool.icon
145
- })
188
+ }), attention ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
189
+ style: [styles.badge, {
190
+ backgroundColor: ATTENTION_COLORS[attention.kind]
191
+ }],
192
+ testID: `buoy-dock-badge-${tool.id}-${attention.kind}`,
193
+ pointerEvents: "none",
194
+ children: attention.kind === "needsInput" ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
195
+ style: styles.badgeText,
196
+ children: "!"
197
+ }) : null
198
+ }) : null]
146
199
  });
147
200
  }
148
201
 
@@ -162,6 +215,7 @@ function MinimizedToolsStack({
162
215
  minimizedTools,
163
216
  restore
164
217
  } = (0, _MinimizedToolsContext.useMinimizedTools)();
218
+ const peekAttention = useStrongestAttention(minimizedTools.map(t => t.id));
165
219
 
166
220
  // Calculate expanded height based on number of tools
167
221
  const expandedHeight = TOOLBAR_PADDING + minimizedTools.length * TOOL_ITEM_SIZE + (minimizedTools.length - 1) * ICON_GAP + ICON_GAP + COLLAPSE_BUTTON_SIZE + 4;
@@ -183,6 +237,13 @@ function MinimizedToolsStack({
183
237
  storageKey: STORAGE_KEY_EXPANDED,
184
238
  peekHeight: PEEK_HEIGHT,
185
239
  collapsedLabel: `Show ${minimizedTools.length} minimized tools`,
240
+ testID: "buoy-dock-peek",
241
+ collapseTestID: "buoy-dock-collapse",
242
+ attention: peekAttention ? {
243
+ color: ATTENTION_COLORS[peekAttention.kind],
244
+ glyph: peekAttention.kind === "needsInput" ? "!" : undefined,
245
+ label: peekAttention.label
246
+ } : null,
186
247
  children: [...minimizedTools].reverse().map((tool, index) => /*#__PURE__*/(0, _jsxRuntime.jsx)(GlitchToolButton, {
187
248
  tool: tool,
188
249
  onSelect: handleToolPress,
@@ -202,5 +263,26 @@ const styles = _reactNative.StyleSheet.create({
202
263
  alignItems: "center",
203
264
  justifyContent: "center",
204
265
  backgroundColor: "transparent"
266
+ },
267
+ // Top-right of the chip. Needs-input carries a glyph; done/failed are a dot —
268
+ // the colour says which, the glyph says "act".
269
+ badge: {
270
+ position: "absolute",
271
+ top: 0,
272
+ right: 0,
273
+ minWidth: 12,
274
+ height: 12,
275
+ borderRadius: 6,
276
+ paddingHorizontal: 2,
277
+ alignItems: "center",
278
+ justifyContent: "center",
279
+ borderWidth: 1.5,
280
+ borderColor: "#0C0C0C"
281
+ },
282
+ badgeText: {
283
+ color: "#000",
284
+ fontSize: 8,
285
+ fontWeight: "800",
286
+ lineHeight: 9
205
287
  }
206
288
  });
@@ -24,6 +24,39 @@ var _jsxRuntime = require("react/jsx-runtime");
24
24
  * used before this replaced it.
25
25
  */
26
26
 
27
+ /** Twin of the native hook — see MinimizedToolsStack.tsx. */
28
+ function useToolAttention(toolId) {
29
+ return (0, _react.useSyncExternalStore)(_sharedUi.subscribeToolAttention, () => (0, _sharedUi.getToolAttention)(toolId), () => (0, _sharedUi.getToolAttention)(toolId));
30
+ }
31
+ const ATTENTION_COLORS = {
32
+ needsInput: '#FF8329',
33
+ done: '#20C997',
34
+ failed: '#FF3B30'
35
+ };
36
+ const ATTENTION_RANK = {
37
+ needsInput: 3,
38
+ failed: 2,
39
+ done: 1
40
+ };
41
+ const strongestCache = new Map();
42
+ function strongest(key) {
43
+ let best = null;
44
+ for (const id of key ? key.split('|') : []) {
45
+ const a = (0, _sharedUi.getToolAttention)(id);
46
+ if (a && (!best || ATTENTION_RANK[a.kind] > ATTENTION_RANK[best.kind])) best = a;
47
+ }
48
+ const prev = strongestCache.get(key);
49
+ if (prev && best && prev.kind === best.kind && prev.label === best.label) return prev;
50
+ if (!prev && !best) return null;
51
+ strongestCache.set(key, best);
52
+ return best;
53
+ }
54
+ /** Twin of the native hook: the strongest attention across the folded dock. */
55
+ function useStrongestAttention(toolIds) {
56
+ const key = toolIds.join('|');
57
+ return (0, _react.useSyncExternalStore)(_sharedUi.subscribeToolAttention, () => strongest(key), () => strongest(key));
58
+ }
59
+
27
60
  // native MinimizedToolsStack.tsx constants
28
61
  const PEEK_HEIGHT = 28;
29
62
  const TOOL_ITEM_SIZE = 32;
@@ -61,11 +94,13 @@ function ChevronGlyph({
61
94
  });
62
95
  }
63
96
  function GlitchToolButton({
97
+ id,
64
98
  title,
65
99
  icon,
66
100
  index,
67
101
  onPress
68
102
  }) {
103
+ const attention = useToolAttention(id);
69
104
  const innerRef = (0, _react.useRef)(null);
70
105
  (0, _react.useEffect)(() => {
71
106
  let mounted = true;
@@ -116,9 +151,9 @@ function GlitchToolButton({
116
151
  clearTimeout(timer);
117
152
  };
118
153
  }, [index]);
119
- return /*#__PURE__*/(0, _jsxRuntime.jsx)("button", {
154
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("button", {
120
155
  type: "button",
121
- "aria-label": `Restore ${title}`,
156
+ "aria-label": attention ? `${title} — ${attention.label}. Restore` : `Restore ${title}`,
122
157
  onClick: onPress,
123
158
  style: {
124
159
  width: TOOL_ITEM_SIZE,
@@ -129,9 +164,10 @@ function GlitchToolButton({
129
164
  background: 'none',
130
165
  border: 'none',
131
166
  padding: 0,
132
- cursor: 'pointer'
167
+ cursor: 'pointer',
168
+ position: 'relative'
133
169
  },
134
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
170
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
135
171
  ref: innerRef,
136
172
  style: {
137
173
  display: 'flex',
@@ -139,7 +175,30 @@ function GlitchToolButton({
139
175
  justifyContent: 'center'
140
176
  },
141
177
  children: icon
142
- })
178
+ }), attention ? /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
179
+ "aria-hidden": true,
180
+ "data-testid": `buoy-dock-badge-${id}-${attention.kind}`,
181
+ style: {
182
+ position: 'absolute',
183
+ top: 0,
184
+ right: 0,
185
+ minWidth: 12,
186
+ height: 12,
187
+ borderRadius: 6,
188
+ padding: '0 2px',
189
+ boxSizing: 'border-box',
190
+ background: ATTENTION_COLORS[attention.kind],
191
+ border: '1.5px solid #0C0C0C',
192
+ color: '#000',
193
+ fontSize: 8,
194
+ fontWeight: 800,
195
+ lineHeight: '9px',
196
+ display: 'flex',
197
+ alignItems: 'center',
198
+ justifyContent: 'center'
199
+ },
200
+ children: attention.kind === 'needsInput' ? '!' : ''
201
+ }) : null]
143
202
  });
144
203
  }
145
204
  function MinimizedToolsStack({
@@ -152,6 +211,7 @@ function MinimizedToolsStack({
152
211
  const minimized = openApps.filter(app => app.minimized && app.launchMode !== 'toggle-only');
153
212
  const [isExpanded, setIsExpanded] = (0, _react.useState)(false);
154
213
  const [isStateRestored, setIsStateRestored] = (0, _react.useState)(false);
214
+ const peekAttention = useStrongestAttention(minimized.map(app => app.id));
155
215
 
156
216
  // Restore + persist the expanded flag (native ExpandablePopover persistState).
157
217
  (0, _react.useEffect)(() => {
@@ -219,6 +279,7 @@ function MinimizedToolsStack({
219
279
  boxSizing: 'border-box'
220
280
  },
221
281
  children: [[...minimized].reverse().map((app, index) => /*#__PURE__*/(0, _jsxRuntime.jsx)(GlitchToolButton, {
282
+ id: app.id,
222
283
  title: app.title || app.id,
223
284
  icon: app.icon ?? /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
224
285
  style: {
@@ -273,7 +334,30 @@ function MinimizedToolsStack({
273
334
  pointerEvents: isExpanded ? 'none' : 'auto',
274
335
  ...frame
275
336
  },
276
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(ChevronGlyph, {}), minimized.length > 1 && /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
337
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(ChevronGlyph, {}), peekAttention ? /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
338
+ "aria-hidden": true,
339
+ "data-testid": `buoy-dock-peek-attention`,
340
+ style: {
341
+ position: 'absolute',
342
+ top: 2,
343
+ right: 2,
344
+ minWidth: 11,
345
+ height: 11,
346
+ borderRadius: 6,
347
+ padding: '0 2px',
348
+ boxSizing: 'border-box',
349
+ background: ATTENTION_COLORS[peekAttention.kind],
350
+ border: '1.5px solid #0C0C0C',
351
+ color: '#000',
352
+ fontSize: 8,
353
+ fontWeight: 800,
354
+ lineHeight: '9px',
355
+ display: 'flex',
356
+ alignItems: 'center',
357
+ justifyContent: 'center'
358
+ },
359
+ children: peekAttention.kind === 'needsInput' ? '!' : ''
360
+ }) : null, minimized.length > 1 && /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
277
361
  style: {
278
362
  fontSize: 9,
279
363
  fontWeight: 600,
@@ -832,7 +832,7 @@ const styles = _reactNative.StyleSheet.create({
832
832
  color: _floatingToolsCore.dialColors.centerText,
833
833
  fontSize: 10,
834
834
  fontWeight: "900",
835
- fontFamily: "monospace",
835
+ fontFamily: _sharedUi.monoFont,
836
836
  letterSpacing: 1,
837
837
  textAlign: "center",
838
838
  textTransform: "uppercase",
@@ -853,7 +853,7 @@ const styles = _reactNative.StyleSheet.create({
853
853
  color: _sharedUi.buoyColors.warning,
854
854
  fontSize: 8,
855
855
  fontWeight: "900",
856
- fontFamily: "monospace",
856
+ fontFamily: _sharedUi.monoFont,
857
857
  letterSpacing: 2,
858
858
  textAlign: "center",
859
859
  textShadowColor: _floatingToolsCore.dialColors.centerTextGlow,
@@ -260,7 +260,7 @@ function PagerButton({
260
260
  color: disabled ? _floatingToolsReact.dialColors.iconLabelMuted : _floatingToolsReact.dialColors.centerText,
261
261
  fontSize: 12,
262
262
  fontWeight: 900,
263
- fontFamily: 'monospace',
263
+ fontFamily: _sharedUi.monoFont,
264
264
  letterSpacing: 1.5,
265
265
  textTransform: 'uppercase',
266
266
  cursor: disabled ? 'default' : 'pointer',
@@ -781,7 +781,7 @@ function DialMenu({
781
781
  // native indicator: paddingVertical 6, paddingHorizontal 12
782
782
  fontSize: 13,
783
783
  fontWeight: 900,
784
- fontFamily: 'monospace',
784
+ fontFamily: _sharedUi.monoFont,
785
785
  letterSpacing: 2,
786
786
  color: _floatingToolsReact.dialColors.centerText,
787
787
  textShadow: `0 0 6px ${_floatingToolsReact.dialColors.centerTextGlow}`
@@ -135,7 +135,7 @@ const styles = _reactNative.StyleSheet.create({
135
135
  color: _floatingToolsCore.dialColors.centerText,
136
136
  fontSize: 12,
137
137
  fontWeight: "900",
138
- fontFamily: "monospace",
138
+ fontFamily: _sharedUi.monoFont,
139
139
  letterSpacing: 1.5
140
140
  },
141
141
  buttonTextDisabled: {
@@ -149,7 +149,7 @@ const styles = _reactNative.StyleSheet.create({
149
149
  color: _floatingToolsCore.dialColors.centerText,
150
150
  fontSize: 13,
151
151
  fontWeight: "900",
152
- fontFamily: "monospace",
152
+ fontFamily: _sharedUi.monoFont,
153
153
  letterSpacing: 2,
154
154
  textShadowColor: _floatingToolsCore.dialColors.centerTextGlow,
155
155
  textShadowOffset: {
@@ -181,7 +181,7 @@ const styles = _reactNative.StyleSheet.create({
181
181
  color: _floatingToolsCore.dialColors.accent,
182
182
  fontSize: 16,
183
183
  fontWeight: "900",
184
- fontFamily: "monospace",
184
+ fontFamily: _sharedUi.monoFont,
185
185
  letterSpacing: 1,
186
186
  textAlign: "center",
187
187
  textTransform: "uppercase"
@@ -191,7 +191,7 @@ const styles = _reactNative.StyleSheet.create({
191
191
  fontSize: 13,
192
192
  lineHeight: 20,
193
193
  textAlign: "center",
194
- fontFamily: "monospace"
194
+ fontFamily: _sharedUi.monoFont
195
195
  },
196
196
  button: {
197
197
  marginTop: 8,
@@ -215,7 +215,7 @@ const styles = _reactNative.StyleSheet.create({
215
215
  color: "#000000",
216
216
  fontSize: 14,
217
217
  fontWeight: "900",
218
- fontFamily: "monospace",
218
+ fontFamily: _sharedUi.monoFont,
219
219
  letterSpacing: 1.5,
220
220
  textTransform: "uppercase"
221
221
  },
@@ -7,6 +7,7 @@ exports.OnboardingTooltip = OnboardingTooltip;
7
7
  var _react = require("react");
8
8
  var _floatingToolsReact = require("@buoy-gg/floating-tools-react");
9
9
  var _onboardingConstantsWeb = require("./onboardingConstants.web.js");
10
+ var _sharedUi = require("@buoy-gg/shared-ui");
10
11
  var _jsxRuntime = require("react/jsx-runtime");
11
12
  /**
12
13
  * OnboardingTooltip — Web twin of OnboardingTooltip.tsx.
@@ -49,7 +50,7 @@ function OnboardingTooltip({
49
50
  return () => cancelAnimationFrame(raf);
50
51
  }, []);
51
52
  const monoLabel = {
52
- fontFamily: 'monospace',
53
+ fontFamily: _sharedUi.monoFont,
53
54
  textTransform: 'uppercase'
54
55
  };
55
56
  return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
@@ -103,7 +104,7 @@ function OnboardingTooltip({
103
104
  children: title
104
105
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
105
106
  style: {
106
- fontFamily: 'monospace',
107
+ fontFamily: _sharedUi.monoFont,
107
108
  fontSize: 13,
108
109
  lineHeight: '20px',
109
110
  color: _floatingToolsReact.dialColors.centerText,
@@ -15,4 +15,4 @@ exports.SDK_VERSION = void 0;
15
15
  * Drift is prevented by a test that fails when this disagrees with
16
16
  * package.json, so a version bump that forgets this file cannot ship.
17
17
  */
18
- const SDK_VERSION = exports.SDK_VERSION = "7.0.34";
18
+ const SDK_VERSION = exports.SDK_VERSION = "7.0.36";
@@ -4,7 +4,7 @@ import { useState, useEffect, useCallback, useMemo } from "react";
4
4
  import { View, Text, StyleSheet, ScrollView, TouchableOpacity, Dimensions, Platform } from "react-native";
5
5
  import { settingsBus } from "./settingsBus.js";
6
6
  import { useDesktopSyncStatus } from "./useDesktopSyncStatus.js";
7
- import { SentryBugIcon, WifiCircuitIcon, ImageOverlayIcon, RenderCountIcon, Info, Layers, ChevronRightIcon, ChevronDown, getStorageBackendType, persistentStorage, Trash2, CheckCircle2, LicenseEntryModal, BackgroundSwitcher, night, NightCard, NightRows, NightSectionLabel, NightFootnote, NightSwitch, NightButton, NightSegmented, NightBadge, NightSeparator } from "@buoy-gg/shared-ui";
7
+ import { SentryBugIcon, WifiCircuitIcon, ImageOverlayIcon, RenderCountIcon, Info, Layers, ChevronRightIcon, ChevronDown, getStorageBackendType, persistentStorage, Trash2, CheckCircle2, LicenseEntryModal, BackgroundSwitcher, night, NightCard, NightRows, NightSectionLabel, NightFootnote, NightSwitch, NightButton, NightSegmented, NightBadge, NightSeparator, monoFont } from "@buoy-gg/shared-ui";
8
8
  import { EnvIcon, StorageIcon, RoutesIcon, NetworkIcon, QueryIcon, HighlighterIcon, ReduxIcon, EventsIcon } from "@buoy-gg/floating-tools-core";
9
9
  import { useDefaultConfig } from "./DefaultConfigContext.js";
10
10
  import { renderAppIcon } from "./AppIcon.js";
@@ -1088,7 +1088,7 @@ const styles = StyleSheet.create({
1088
1088
  storageKeyText: {
1089
1089
  color: night.color.textSecondary,
1090
1090
  fontSize: night.font.micro,
1091
- fontFamily: "monospace"
1091
+ fontFamily: monoFont
1092
1092
  },
1093
1093
  storageKeyEmpty: {
1094
1094
  color: night.color.textTertiary,
@@ -1097,7 +1097,7 @@ const styles = StyleSheet.create({
1097
1097
  },
1098
1098
  // Footnote inline code
1099
1099
  footnoteMono: {
1100
- fontFamily: "monospace",
1100
+ fontFamily: monoFont,
1101
1101
  fontSize: night.font.label,
1102
1102
  color: night.color.textSecondary
1103
1103
  }
@@ -32,7 +32,7 @@ import { QueryIcon, EnvIcon, StorageIcon, NetworkIcon, RoutesIcon, HighlighterIc
32
32
  // settings sheet is a real JsModal on web now, same as native. The
33
33
  // BackgroundSwitcher is the same RN component native mounts: it renders under
34
34
  // the consumer's RNW lane exactly like the ToolBackground JsModal.web draws.
35
- import { JsModal, devToolsStorageKeys, BackgroundSwitcher } from '@buoy-gg/shared-ui';
35
+ import { JsModal, devToolsStorageKeys, BackgroundSwitcher, monoFont } from '@buoy-gg/shared-ui';
36
36
 
37
37
  /** env(safe-area-inset-top) via a one-shot probe (native: useSafeAreaInsets). */
38
38
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
@@ -1023,7 +1023,7 @@ export function SettingsModal({
1023
1023
  style: {
1024
1024
  color: night.textSecondary,
1025
1025
  fontSize: 11,
1026
- fontFamily: 'monospace',
1026
+ fontFamily: monoFont,
1027
1027
  overflow: 'hidden',
1028
1028
  textOverflow: 'ellipsis',
1029
1029
  whiteSpace: 'nowrap'
@@ -538,7 +538,7 @@ export const FloatingDevTools = ({
538
538
  ...props,
539
539
  apps: finalApps,
540
540
  environment: resolvedEnvironment
541
- }), /*#__PURE__*/_jsx(AppOverlay, {}), /*#__PURE__*/_jsx(ToolOpenerBridge, {})]
541
+ }), props.hidden ? null : /*#__PURE__*/_jsx(AppOverlay, {}), /*#__PURE__*/_jsx(ToolOpenerBridge, {})]
542
542
  })
543
543
  }), children, DebugBordersOverlay && /*#__PURE__*/_jsx(DebugBordersOverlay, {}), HighlightUpdatesOverlay && /*#__PURE__*/_jsx(HighlightUpdatesOverlay, {}), ImageOverlayOverlay && /*#__PURE__*/_jsx(ImageOverlayOverlay, {}), PerfMonitorOverlay && /*#__PURE__*/_jsx(PerfMonitorOverlay, {}), JsTopOverlay && /*#__PURE__*/_jsx(JsTopOverlay, {}), ImpersonateOverlay && /*#__PURE__*/_jsx(ImpersonateOverlay, {}), ScenariosOverlay && /*#__PURE__*/_jsx(ScenariosOverlay, {}), ReduxAutoInstrument && /*#__PURE__*/_jsx(ReduxAutoInstrument, {}), ConsoleRoot && /*#__PURE__*/_jsx(ConsoleRoot, {}), RouteTracker && /*#__PURE__*/_jsx(RouteTracker, {}), ReactQueryTracker && /*#__PURE__*/_jsx(ReactQueryTracker, {}), toolRegistry, syncEnabled && /*#__PURE__*/_jsx(AutoExternalSync, {
544
544
  options: externalSyncOptions(externalSync),
@@ -291,7 +291,7 @@ export const FloatingMenu = ({
291
291
  })()
292
292
  }, `row-${app.id}`))]
293
293
  })
294
- }), showDial && /*#__PURE__*/_jsx(DialDevTools, {
294
+ }), showDial && !isCompletelyHidden && /*#__PURE__*/_jsx(DialDevTools, {
295
295
  apps: apps,
296
296
  state: state,
297
297
  actions: mergedActions,
@@ -1,14 +1,56 @@
1
1
  "use strict";
2
2
 
3
- import React, { useCallback, useEffect, useRef } from "react";
4
- import { Animated, TouchableOpacity, StyleSheet, Easing } from "react-native";
5
- import { ExpandablePopover } from "@buoy-gg/shared-ui";
3
+ import React, { useCallback, useEffect, useRef, useSyncExternalStore } from "react";
4
+ import { Animated, TouchableOpacity, View, Text, StyleSheet, Easing } from "react-native";
5
+ import { ExpandablePopover, getToolAttention, subscribeToolAttention } from "@buoy-gg/shared-ui";
6
6
  import { useMinimizedTools } from "./MinimizedToolsContext.js";
7
7
 
8
+ /**
9
+ * A hidden tool's "I need you". See `setToolAttention` in shared-ui — the tool
10
+ * publishes, the rail draws. Read through useSyncExternalStore so a badge set
11
+ * from inside a minimized sheet lands on the chip without the rail polling.
12
+ */
13
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
14
+ function useToolAttention(toolId) {
15
+ return useSyncExternalStore(subscribeToolAttention, () => getToolAttention(toolId), () => getToolAttention(toolId));
16
+ }
17
+ const ATTENTION_COLORS = {
18
+ needsInput: "#FF8329",
19
+ done: "#20C997",
20
+ failed: "#FF3B30"
21
+ };
22
+
23
+ /** needsInput outranks failed outranks done — the peek shows the one that matters most. */
24
+ const ATTENTION_RANK = {
25
+ needsInput: 3,
26
+ failed: 2,
27
+ done: 1
28
+ };
29
+
30
+ /** The strongest attention across every minimized tool, for the folded peek. */
31
+ function useStrongestAttention(toolIds) {
32
+ const key = toolIds.join("|");
33
+ return useSyncExternalStore(subscribeToolAttention, () => strongest(key), () => strongest(key));
34
+ }
35
+ const strongestCache = new Map();
36
+ function strongest(key) {
37
+ let best = null;
38
+ for (const id of key ? key.split("|") : []) {
39
+ const a = getToolAttention(id);
40
+ if (a && (!best || ATTENTION_RANK[a.kind] > ATTENTION_RANK[best.kind])) best = a;
41
+ }
42
+ // Same value → same object, or useSyncExternalStore re-renders forever.
43
+ const prev = strongestCache.get(key);
44
+ if (prev && best && prev.kind === best.kind && prev.label === best.label) return prev;
45
+ if (!prev && !best) return null;
46
+ strongestCache.set(key, best);
47
+ return best;
48
+ }
49
+
8
50
  // ============================================================================
9
51
  // Constants
10
52
  // ============================================================================
11
- import { jsx as _jsx } from "react/jsx-runtime";
53
+
12
54
  const PEEK_HEIGHT = 28;
13
55
  const TOOLBAR_WIDTH = 44;
14
56
  const TOOL_ITEM_SIZE = 32;
@@ -31,6 +73,7 @@ function GlitchToolButton({
31
73
  onSelect,
32
74
  index
33
75
  }) {
76
+ const attention = useToolAttention(tool.id);
34
77
  const glitchX = useRef(new Animated.Value(0)).current;
35
78
  const glitchOpacity = useRef(new Animated.Value(1)).current;
36
79
  const glitchScale = useRef(new Animated.Value(1)).current;
@@ -122,13 +165,14 @@ function GlitchToolButton({
122
165
  clearTimeout(timeoutId);
123
166
  };
124
167
  }, [glitchX, glitchOpacity, glitchScale, index]);
125
- return /*#__PURE__*/_jsx(TouchableOpacity, {
168
+ return /*#__PURE__*/_jsxs(TouchableOpacity, {
126
169
  onPress: () => onSelect(tool),
127
170
  activeOpacity: 0.7,
128
171
  style: styles.toolButton,
129
- accessibilityLabel: `Restore ${tool.title}`,
172
+ accessibilityLabel: attention ? `${tool.title} — ${attention.label}. Restore` : `Restore ${tool.title}`,
130
173
  accessibilityRole: "button",
131
- children: /*#__PURE__*/_jsx(Animated.View, {
174
+ testID: `buoy-dock-restore-${tool.id}`,
175
+ children: [/*#__PURE__*/_jsx(Animated.View, {
132
176
  style: {
133
177
  opacity: glitchOpacity,
134
178
  transform: [{
@@ -138,7 +182,17 @@ function GlitchToolButton({
138
182
  }]
139
183
  },
140
184
  children: tool.icon
141
- })
185
+ }), attention ? /*#__PURE__*/_jsx(View, {
186
+ style: [styles.badge, {
187
+ backgroundColor: ATTENTION_COLORS[attention.kind]
188
+ }],
189
+ testID: `buoy-dock-badge-${tool.id}-${attention.kind}`,
190
+ pointerEvents: "none",
191
+ children: attention.kind === "needsInput" ? /*#__PURE__*/_jsx(Text, {
192
+ style: styles.badgeText,
193
+ children: "!"
194
+ }) : null
195
+ }) : null]
142
196
  });
143
197
  }
144
198
 
@@ -158,6 +212,7 @@ export function MinimizedToolsStack({
158
212
  minimizedTools,
159
213
  restore
160
214
  } = useMinimizedTools();
215
+ const peekAttention = useStrongestAttention(minimizedTools.map(t => t.id));
161
216
 
162
217
  // Calculate expanded height based on number of tools
163
218
  const expandedHeight = TOOLBAR_PADDING + minimizedTools.length * TOOL_ITEM_SIZE + (minimizedTools.length - 1) * ICON_GAP + ICON_GAP + COLLAPSE_BUTTON_SIZE + 4;
@@ -179,6 +234,13 @@ export function MinimizedToolsStack({
179
234
  storageKey: STORAGE_KEY_EXPANDED,
180
235
  peekHeight: PEEK_HEIGHT,
181
236
  collapsedLabel: `Show ${minimizedTools.length} minimized tools`,
237
+ testID: "buoy-dock-peek",
238
+ collapseTestID: "buoy-dock-collapse",
239
+ attention: peekAttention ? {
240
+ color: ATTENTION_COLORS[peekAttention.kind],
241
+ glyph: peekAttention.kind === "needsInput" ? "!" : undefined,
242
+ label: peekAttention.label
243
+ } : null,
182
244
  children: [...minimizedTools].reverse().map((tool, index) => /*#__PURE__*/_jsx(GlitchToolButton, {
183
245
  tool: tool,
184
246
  onSelect: handleToolPress,
@@ -198,5 +260,26 @@ const styles = StyleSheet.create({
198
260
  alignItems: "center",
199
261
  justifyContent: "center",
200
262
  backgroundColor: "transparent"
263
+ },
264
+ // Top-right of the chip. Needs-input carries a glyph; done/failed are a dot —
265
+ // the colour says which, the glyph says "act".
266
+ badge: {
267
+ position: "absolute",
268
+ top: 0,
269
+ right: 0,
270
+ minWidth: 12,
271
+ height: 12,
272
+ borderRadius: 6,
273
+ paddingHorizontal: 2,
274
+ alignItems: "center",
275
+ justifyContent: "center",
276
+ borderWidth: 1.5,
277
+ borderColor: "#0C0C0C"
278
+ },
279
+ badgeText: {
280
+ color: "#000",
281
+ fontSize: 8,
282
+ fontWeight: "800",
283
+ lineHeight: 9
201
284
  }
202
285
  });
@@ -16,8 +16,41 @@
16
16
  * used before this replaced it.
17
17
  */
18
18
 
19
- import { useCallback, useEffect, useRef, useState } from 'react';
20
- import { persistentStorage } from '@buoy-gg/shared-ui';
19
+ import { useCallback, useEffect, useRef, useState, useSyncExternalStore } from 'react';
20
+ import { persistentStorage, getToolAttention, subscribeToolAttention } from '@buoy-gg/shared-ui';
21
+
22
+ /** Twin of the native hook — see MinimizedToolsStack.tsx. */
23
+ function useToolAttention(toolId) {
24
+ return useSyncExternalStore(subscribeToolAttention, () => getToolAttention(toolId), () => getToolAttention(toolId));
25
+ }
26
+ const ATTENTION_COLORS = {
27
+ needsInput: '#FF8329',
28
+ done: '#20C997',
29
+ failed: '#FF3B30'
30
+ };
31
+ const ATTENTION_RANK = {
32
+ needsInput: 3,
33
+ failed: 2,
34
+ done: 1
35
+ };
36
+ const strongestCache = new Map();
37
+ function strongest(key) {
38
+ let best = null;
39
+ for (const id of key ? key.split('|') : []) {
40
+ const a = getToolAttention(id);
41
+ if (a && (!best || ATTENTION_RANK[a.kind] > ATTENTION_RANK[best.kind])) best = a;
42
+ }
43
+ const prev = strongestCache.get(key);
44
+ if (prev && best && prev.kind === best.kind && prev.label === best.label) return prev;
45
+ if (!prev && !best) return null;
46
+ strongestCache.set(key, best);
47
+ return best;
48
+ }
49
+ /** Twin of the native hook: the strongest attention across the folded dock. */
50
+ function useStrongestAttention(toolIds) {
51
+ const key = toolIds.join('|');
52
+ return useSyncExternalStore(subscribeToolAttention, () => strongest(key), () => strongest(key));
53
+ }
21
54
  import { useAppHost } from "./AppHost.web.js";
22
55
 
23
56
  // native MinimizedToolsStack.tsx constants
@@ -58,11 +91,13 @@ function ChevronGlyph({
58
91
  });
59
92
  }
60
93
  function GlitchToolButton({
94
+ id,
61
95
  title,
62
96
  icon,
63
97
  index,
64
98
  onPress
65
99
  }) {
100
+ const attention = useToolAttention(id);
66
101
  const innerRef = useRef(null);
67
102
  useEffect(() => {
68
103
  let mounted = true;
@@ -113,9 +148,9 @@ function GlitchToolButton({
113
148
  clearTimeout(timer);
114
149
  };
115
150
  }, [index]);
116
- return /*#__PURE__*/_jsx("button", {
151
+ return /*#__PURE__*/_jsxs("button", {
117
152
  type: "button",
118
- "aria-label": `Restore ${title}`,
153
+ "aria-label": attention ? `${title} — ${attention.label}. Restore` : `Restore ${title}`,
119
154
  onClick: onPress,
120
155
  style: {
121
156
  width: TOOL_ITEM_SIZE,
@@ -126,9 +161,10 @@ function GlitchToolButton({
126
161
  background: 'none',
127
162
  border: 'none',
128
163
  padding: 0,
129
- cursor: 'pointer'
164
+ cursor: 'pointer',
165
+ position: 'relative'
130
166
  },
131
- children: /*#__PURE__*/_jsx("div", {
167
+ children: [/*#__PURE__*/_jsx("div", {
132
168
  ref: innerRef,
133
169
  style: {
134
170
  display: 'flex',
@@ -136,7 +172,30 @@ function GlitchToolButton({
136
172
  justifyContent: 'center'
137
173
  },
138
174
  children: icon
139
- })
175
+ }), attention ? /*#__PURE__*/_jsx("span", {
176
+ "aria-hidden": true,
177
+ "data-testid": `buoy-dock-badge-${id}-${attention.kind}`,
178
+ style: {
179
+ position: 'absolute',
180
+ top: 0,
181
+ right: 0,
182
+ minWidth: 12,
183
+ height: 12,
184
+ borderRadius: 6,
185
+ padding: '0 2px',
186
+ boxSizing: 'border-box',
187
+ background: ATTENTION_COLORS[attention.kind],
188
+ border: '1.5px solid #0C0C0C',
189
+ color: '#000',
190
+ fontSize: 8,
191
+ fontWeight: 800,
192
+ lineHeight: '9px',
193
+ display: 'flex',
194
+ alignItems: 'center',
195
+ justifyContent: 'center'
196
+ },
197
+ children: attention.kind === 'needsInput' ? '!' : ''
198
+ }) : null]
140
199
  });
141
200
  }
142
201
  export function MinimizedToolsStack({
@@ -149,6 +208,7 @@ export function MinimizedToolsStack({
149
208
  const minimized = openApps.filter(app => app.minimized && app.launchMode !== 'toggle-only');
150
209
  const [isExpanded, setIsExpanded] = useState(false);
151
210
  const [isStateRestored, setIsStateRestored] = useState(false);
211
+ const peekAttention = useStrongestAttention(minimized.map(app => app.id));
152
212
 
153
213
  // Restore + persist the expanded flag (native ExpandablePopover persistState).
154
214
  useEffect(() => {
@@ -216,6 +276,7 @@ export function MinimizedToolsStack({
216
276
  boxSizing: 'border-box'
217
277
  },
218
278
  children: [[...minimized].reverse().map((app, index) => /*#__PURE__*/_jsx(GlitchToolButton, {
279
+ id: app.id,
219
280
  title: app.title || app.id,
220
281
  icon: app.icon ?? /*#__PURE__*/_jsx("span", {
221
282
  style: {
@@ -270,7 +331,30 @@ export function MinimizedToolsStack({
270
331
  pointerEvents: isExpanded ? 'none' : 'auto',
271
332
  ...frame
272
333
  },
273
- children: [/*#__PURE__*/_jsx(ChevronGlyph, {}), minimized.length > 1 && /*#__PURE__*/_jsx("span", {
334
+ children: [/*#__PURE__*/_jsx(ChevronGlyph, {}), peekAttention ? /*#__PURE__*/_jsx("span", {
335
+ "aria-hidden": true,
336
+ "data-testid": `buoy-dock-peek-attention`,
337
+ style: {
338
+ position: 'absolute',
339
+ top: 2,
340
+ right: 2,
341
+ minWidth: 11,
342
+ height: 11,
343
+ borderRadius: 6,
344
+ padding: '0 2px',
345
+ boxSizing: 'border-box',
346
+ background: ATTENTION_COLORS[peekAttention.kind],
347
+ border: '1.5px solid #0C0C0C',
348
+ color: '#000',
349
+ fontSize: 8,
350
+ fontWeight: 800,
351
+ lineHeight: '9px',
352
+ display: 'flex',
353
+ alignItems: 'center',
354
+ justifyContent: 'center'
355
+ },
356
+ children: peekAttention.kind === 'needsInput' ? '!' : ''
357
+ }) : null, minimized.length > 1 && /*#__PURE__*/_jsx("span", {
274
358
  style: {
275
359
  fontSize: 9,
276
360
  fontWeight: 600,
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { useEffect, useMemo, useRef, useState } from "react";
4
4
  import { Pressable, StyleSheet, TouchableOpacity, View, useWindowDimensions, Text, Animated, Easing } from "react-native";
5
- import { absoluteFill } from "@buoy-gg/shared-ui";
5
+ import { absoluteFill, monoFont } from "@buoy-gg/shared-ui";
6
6
  // Icons are provided by installedApps; no direct icon imports here.
7
7
  import { DialIcon } from "./DialIcon.js";
8
8
  import { DialHyperspace } from "./DialHyperspace.js";
@@ -828,7 +828,7 @@ const styles = StyleSheet.create({
828
828
  color: dialColors.centerText,
829
829
  fontSize: 10,
830
830
  fontWeight: "900",
831
- fontFamily: "monospace",
831
+ fontFamily: monoFont,
832
832
  letterSpacing: 1,
833
833
  textAlign: "center",
834
834
  textTransform: "uppercase",
@@ -849,7 +849,7 @@ const styles = StyleSheet.create({
849
849
  color: buoyColors.warning,
850
850
  fontSize: 8,
851
851
  fontWeight: "900",
852
- fontFamily: "monospace",
852
+ fontFamily: monoFont,
853
853
  letterSpacing: 2,
854
854
  textAlign: "center",
855
855
  textShadowColor: dialColors.centerTextGlow,
@@ -14,7 +14,7 @@
14
14
 
15
15
  import { useState, useEffect, useMemo, useRef, useCallback } from 'react';
16
16
  import { getDialLayout, getAllIconPositions, getGridLineRotations, getIconStaggerInputRange, MAX_DIAL_SLOTS, DIAL_ICON_SIZE, dialAnimationConfig, getDialCSSKeyframesString, getDialCSSAnimationStyles, dialColors, dialStyles, withAlpha, floatingToolsColors } from '@buoy-gg/floating-tools-react';
17
- import { persistentStorage } from '@buoy-gg/shared-ui';
17
+ import { persistentStorage, monoFont } from '@buoy-gg/shared-ui';
18
18
  import { OnboardingTooltip } from "./OnboardingTooltip.web.js";
19
19
 
20
20
  // native DialDevTools.tsx SETTINGS_TOOLTIP_KEY
@@ -257,7 +257,7 @@ function PagerButton({
257
257
  color: disabled ? dialColors.iconLabelMuted : dialColors.centerText,
258
258
  fontSize: 12,
259
259
  fontWeight: 900,
260
- fontFamily: 'monospace',
260
+ fontFamily: monoFont,
261
261
  letterSpacing: 1.5,
262
262
  textTransform: 'uppercase',
263
263
  cursor: disabled ? 'default' : 'pointer',
@@ -778,7 +778,7 @@ export function DialMenu({
778
778
  // native indicator: paddingVertical 6, paddingHorizontal 12
779
779
  fontSize: 13,
780
780
  fontWeight: 900,
781
- fontFamily: 'monospace',
781
+ fontFamily: monoFont,
782
782
  letterSpacing: 2,
783
783
  color: dialColors.centerText,
784
784
  textShadow: `0 0 6px ${dialColors.centerTextGlow}`
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { useRef } from "react";
4
4
  import { Animated, Pressable, StyleSheet, Text, View } from "react-native";
5
- import { ChevronLeft, ChevronRight } from "@buoy-gg/shared-ui";
5
+ import { ChevronLeft, ChevronRight, monoFont } from "@buoy-gg/shared-ui";
6
6
  import { dialColors } from "@buoy-gg/floating-tools-core";
7
7
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
8
  /** Pad a 1-based page number to two digits, e.g. 3 -> "03". */
@@ -130,7 +130,7 @@ const styles = StyleSheet.create({
130
130
  color: dialColors.centerText,
131
131
  fontSize: 12,
132
132
  fontWeight: "900",
133
- fontFamily: "monospace",
133
+ fontFamily: monoFont,
134
134
  letterSpacing: 1.5
135
135
  },
136
136
  buttonTextDisabled: {
@@ -144,7 +144,7 @@ const styles = StyleSheet.create({
144
144
  color: dialColors.centerText,
145
145
  fontSize: 13,
146
146
  fontWeight: "900",
147
- fontFamily: "monospace",
147
+ fontFamily: monoFont,
148
148
  letterSpacing: 2,
149
149
  textShadowColor: dialColors.centerTextGlow,
150
150
  textShadowOffset: {
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { useEffect, useRef } from "react";
4
4
  import { Animated, Pressable, StyleSheet, Text, View, Easing } from "react-native";
5
- import { absoluteFill } from "@buoy-gg/shared-ui";
5
+ import { absoluteFill, monoFont } from "@buoy-gg/shared-ui";
6
6
  // dialColors comes from floating-tools-core — the shared-ui export of the same
7
7
  // name is a stale legacy copy and must not be used here.
8
8
  import { dialColors } from "@buoy-gg/floating-tools-core";
@@ -175,7 +175,7 @@ const styles = StyleSheet.create({
175
175
  color: dialColors.accent,
176
176
  fontSize: 16,
177
177
  fontWeight: "900",
178
- fontFamily: "monospace",
178
+ fontFamily: monoFont,
179
179
  letterSpacing: 1,
180
180
  textAlign: "center",
181
181
  textTransform: "uppercase"
@@ -185,7 +185,7 @@ const styles = StyleSheet.create({
185
185
  fontSize: 13,
186
186
  lineHeight: 20,
187
187
  textAlign: "center",
188
- fontFamily: "monospace"
188
+ fontFamily: monoFont
189
189
  },
190
190
  button: {
191
191
  marginTop: 8,
@@ -209,7 +209,7 @@ const styles = StyleSheet.create({
209
209
  color: "#000000",
210
210
  fontSize: 14,
211
211
  fontWeight: "900",
212
- fontFamily: "monospace",
212
+ fontFamily: monoFont,
213
213
  letterSpacing: 1.5,
214
214
  textTransform: "uppercase"
215
215
  },
@@ -9,6 +9,7 @@
9
9
  import { useEffect, useState } from 'react';
10
10
  import { dialColors, withAlpha } from '@buoy-gg/floating-tools-react';
11
11
  import { ARROW_BOTTOM_OFFSET, ARROW_HEIGHT, calculateTooltipPosition } from "./onboardingConstants.web.js";
12
+ import { monoFont } from "@buoy-gg/shared-ui";
12
13
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
14
  let onboardingKeyframesInjected = false;
14
15
  function injectOnboardingKeyframes() {
@@ -44,7 +45,7 @@ export function OnboardingTooltip({
44
45
  return () => cancelAnimationFrame(raf);
45
46
  }, []);
46
47
  const monoLabel = {
47
- fontFamily: 'monospace',
48
+ fontFamily: monoFont,
48
49
  textTransform: 'uppercase'
49
50
  };
50
51
  return /*#__PURE__*/_jsx("div", {
@@ -98,7 +99,7 @@ export function OnboardingTooltip({
98
99
  children: title
99
100
  }), /*#__PURE__*/_jsx("span", {
100
101
  style: {
101
- fontFamily: 'monospace',
102
+ fontFamily: monoFont,
102
103
  fontSize: 13,
103
104
  lineHeight: '20px',
104
105
  color: dialColors.centerText,
@@ -11,4 +11,4 @@
11
11
  * Drift is prevented by a test that fails when this disagrees with
12
12
  * package.json, so a version bump that forgets this file cannot ship.
13
13
  */
14
- export const SDK_VERSION = "7.0.34";
14
+ export const SDK_VERSION = "7.0.36";
@@ -1 +1 @@
1
- {"version":3,"file":"DevToolsSettingsModal.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/DevToolsSettingsModal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6C,EAAE,EAAa,MAAM,OAAO,CAAC;AA0CjF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AA6G5C;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC;;;OAGG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,4EAA4E;IAC5E,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,uFAAuF;IACvF,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QACvC,WAAW,EAAE,OAAO,CAAC;KACtB,CAAC;IACF,kDAAkD;IAClD,cAAc,CAAC,EAAE,sBAAsB,CAAC;CACzC;AAED;;;;GAIG;AACH,UAAU,gBAAgB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;IAC/B,IAAI,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,0BAA0B;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACxD,eAAe,CAAC,EAAE,gBAAgB,CAAC;IACnC,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACpC;AAsDD;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC,0BAA0B,CAwxBhE,CAAC;AA8FF,eAAO,MAAM,mBAAmB;;;CAuD/B,CAAC"}
1
+ {"version":3,"file":"DevToolsSettingsModal.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/DevToolsSettingsModal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6C,EAAE,EAAa,MAAM,OAAO,CAAC;AA2CjF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AA6G5C;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC;;;OAGG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,4EAA4E;IAC5E,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,uFAAuF;IACvF,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QACvC,WAAW,EAAE,OAAO,CAAC;KACtB,CAAC;IACF,kDAAkD;IAClD,cAAc,CAAC,EAAE,sBAAsB,CAAC;CACzC;AAED;;;;GAIG;AACH,UAAU,gBAAgB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;IAC/B,IAAI,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,0BAA0B;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACxD,eAAe,CAAC,EAAE,gBAAgB,CAAC;IACnC,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACpC;AAsDD;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC,0BAA0B,CAwxBhE,CAAC;AA8FF,eAAO,MAAM,mBAAmB;;;CAuD/B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"FloatingDevTools.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/FloatingDevTools.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FloatingDevTools.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/FloatingDevTools.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+D,MAAM,OAAO,CAAC;AAGpF,OAAO,EAAgB,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAOtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAQ5C,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EAEvB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAIL,KAAK,mBAAmB,EACzB,MAAM,oBAAoB,CAAC;AAM5B;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,YAAY,GACpB,MAAM,GACN;IACE,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GACD;IACE,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EACR,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,OAAO,GACP,KAAK,CAAC;IACV,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEN;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;CAC1C;AAED;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACpC,yEAAyE;IACzE,QAAQ,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,WAAW,GAAG,QAAQ,CAAC;IAClC,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACzE,mFAAmF;IACnF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,qBAAsB,SAAQ,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC;IAC5E;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,IAAI,CAAC,EAAE,YAAY,EAAE,CAAC;IAEtB;;;;;;;;;;;;;;OAcG;IACH,eAAe,CAAC,EAAE,YAAY,EAAE,CAAC;IAEjC;;;;;;;;;;;;OAYG;IACH,mBAAmB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAEzC;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,EAAE,qBAAqB,CAAC;IAEhC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAE3B;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;;;;;;;;;;;OAaG;IACH,oBAAoB,CAAC,EAAE,qBAAqB,CAAC;IAE7C;;;;;;;;;;;;;;OAcG;IACH,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IAErC;;;;;;;;;;;;;;;;OAgBG;IACH,qBAAqB,CAAC,EAAE,OAAO,oBAAoB,EAAE,WAAW,EAAE,CAAC;IAEnE;;;;;;;;;;;;;OAaG;IACH,mBAAmB,CAAC,EAAE,CAAC,WAAW,EAAE,OAAO,oBAAoB,EAAE,WAAW,KAAK,IAAI,CAAC;IAEtF;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;;;;;;;;;;;;;;;OAkBG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACH,YAAY,CAAC,EAAE,OAAO,GAAG,mBAAmB,CAAC;IAE7C;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,eAAO,MAAM,gBAAgB,GAAI,mOAgB9B,qBAAqB,6BAycvB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"FloatingMenu.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/FloatingMenu.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,EAAE,EAAqD,MAAM,OAAO,CAAC;AASrF,OAAO,EAAiB,QAAQ,EAAc,MAAM,iBAAiB,CAAC;AACtE,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAEjB,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEhF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AActD;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,+DAA+D;IAC/D,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,sFAAsF;IACtF,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,iFAAiF;IACjF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,uFAAuF;IACvF,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,yEAAyE;IACzE,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,kFAAkF;IAClF,oBAAoB,CAAC,EAAE,qBAAqB,CAAC;IAC7C,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IACrC;;;OAGG;IACH,qBAAqB,CAAC,EAAE,WAAW,EAAE,CAAC;IACtC;;;OAGG;IACH,mBAAmB,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,CAAC;CAC1D;AAWD,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CA8U9C,CAAC"}
1
+ {"version":3,"file":"FloatingMenu.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/FloatingMenu.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,EAAE,EAAqD,MAAM,OAAO,CAAC;AASrF,OAAO,EAAiB,QAAQ,EAAc,MAAM,iBAAiB,CAAC;AACtE,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAEjB,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEhF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AActD;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,+DAA+D;IAC/D,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,sFAAsF;IACtF,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,iFAAiF;IACjF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,uFAAuF;IACvF,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,yEAAyE;IACzE,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,kFAAkF;IAClF,oBAAoB,CAAC,EAAE,qBAAqB,CAAC;IAC7C,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IACrC;;;OAGG;IACH,qBAAqB,CAAC,EAAE,WAAW,EAAE,CAAC;IACtC;;;OAGG;IACH,mBAAmB,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,CAAC;CAC1D;AAWD,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CA+U9C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"MinimizedToolsStack.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/MinimizedToolsStack.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAS9D,OAAO,EAAqB,aAAa,EAAE,MAAM,yBAAyB,CAAC;AA2L3E,MAAM,WAAW,wBAAwB;IACvC,8CAA8C;IAC9C,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;IAC1C,0DAA0D;IAC1D,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAMD,wBAAgB,mBAAmB,CAAC,EAClC,SAAS,EACT,cAA8B,GAC/B,EAAE,wBAAwB,qBA8C1B"}
1
+ {"version":3,"file":"MinimizedToolsStack.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/MinimizedToolsStack.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+D,MAAM,OAAO,CAAC;AAepF,OAAO,EAAqB,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAsP3E,MAAM,WAAW,wBAAwB;IACvC,8CAA8C;IAC9C,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;IAC1C,0DAA0D;IAC1D,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAMD,wBAAgB,mBAAmB,CAAC,EAClC,SAAS,EACT,cAA8B,GAC/B,EAAE,wBAAwB,qBA0D1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"MinimizedToolsStack.web.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/MinimizedToolsStack.web.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAyHH,MAAM,WAAW,wBAAwB;IACvC,gEAAgE;IAChE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,mBAAmB,CAAC,EAAE,cAAmB,EAAE,EAAE,wBAAwB,sCAsKpF"}
1
+ {"version":3,"file":"MinimizedToolsStack.web.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/MinimizedToolsStack.web.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAiMH,MAAM,WAAW,wBAAwB;IACvC,gEAAgE;IAChE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,mBAAmB,CAAC,EAAE,cAAmB,EAAE,EAAE,wBAAwB,sCAmMpF"}
@@ -1 +1 @@
1
- {"version":3,"file":"OnboardingTooltip.web.d.ts","sourceRoot":"","sources":["../../../../../src/floatingMenu/dial/OnboardingTooltip.web.tsx"],"names":[],"mappings":"AAmCA,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,yEAAyE;IACzE,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,OAAO,EACP,SAAS,EACT,SAAgB,GACjB,EAAE,sBAAsB,+BAsIxB"}
1
+ {"version":3,"file":"OnboardingTooltip.web.d.ts","sourceRoot":"","sources":["../../../../../src/floatingMenu/dial/OnboardingTooltip.web.tsx"],"names":[],"mappings":"AAoCA,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,yEAAyE;IACzE,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,OAAO,EACP,SAAS,EACT,SAAgB,GACjB,EAAE,sBAAsB,+BAsIxB"}
@@ -9,5 +9,5 @@
9
9
  * Drift is prevented by a test that fails when this disagrees with
10
10
  * package.json, so a version bump that forgets this file cannot ship.
11
11
  */
12
- export declare const SDK_VERSION = "7.0.34";
12
+ export declare const SDK_VERSION = "7.0.36";
13
13
  //# sourceMappingURL=version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DevToolsSettingsModal.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/DevToolsSettingsModal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6C,EAAE,EAAa,MAAM,OAAO,CAAC;AA0CjF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AA6G5C;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC;;;OAGG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,4EAA4E;IAC5E,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,uFAAuF;IACvF,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QACvC,WAAW,EAAE,OAAO,CAAC;KACtB,CAAC;IACF,kDAAkD;IAClD,cAAc,CAAC,EAAE,sBAAsB,CAAC;CACzC;AAED;;;;GAIG;AACH,UAAU,gBAAgB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;IAC/B,IAAI,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,0BAA0B;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACxD,eAAe,CAAC,EAAE,gBAAgB,CAAC;IACnC,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACpC;AAsDD;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC,0BAA0B,CAwxBhE,CAAC;AA8FF,eAAO,MAAM,mBAAmB;;;CAuD/B,CAAC"}
1
+ {"version":3,"file":"DevToolsSettingsModal.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/DevToolsSettingsModal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6C,EAAE,EAAa,MAAM,OAAO,CAAC;AA2CjF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AA6G5C;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC;;;OAGG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,4EAA4E;IAC5E,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,uFAAuF;IACvF,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QACvC,WAAW,EAAE,OAAO,CAAC;KACtB,CAAC;IACF,kDAAkD;IAClD,cAAc,CAAC,EAAE,sBAAsB,CAAC;CACzC;AAED;;;;GAIG;AACH,UAAU,gBAAgB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;IAC/B,IAAI,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,0BAA0B;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACxD,eAAe,CAAC,EAAE,gBAAgB,CAAC;IACnC,aAAa,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACpC;AAsDD;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC,0BAA0B,CAwxBhE,CAAC;AA8FF,eAAO,MAAM,mBAAmB;;;CAuD/B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"FloatingDevTools.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/FloatingDevTools.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FloatingDevTools.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/FloatingDevTools.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"FloatingMenu.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/FloatingMenu.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,EAAE,EAAqD,MAAM,OAAO,CAAC;AASrF,OAAO,EAAiB,QAAQ,EAAc,MAAM,iBAAiB,CAAC;AACtE,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAEjB,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEhF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AActD;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,+DAA+D;IAC/D,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,sFAAsF;IACtF,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,iFAAiF;IACjF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,uFAAuF;IACvF,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,yEAAyE;IACzE,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,kFAAkF;IAClF,oBAAoB,CAAC,EAAE,qBAAqB,CAAC;IAC7C,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IACrC;;;OAGG;IACH,qBAAqB,CAAC,EAAE,WAAW,EAAE,CAAC;IACtC;;;OAGG;IACH,mBAAmB,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,CAAC;CAC1D;AAWD,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CA8U9C,CAAC"}
1
+ {"version":3,"file":"FloatingMenu.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/FloatingMenu.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,EAAE,EAAqD,MAAM,OAAO,CAAC;AASrF,OAAO,EAAiB,QAAQ,EAAc,MAAM,iBAAiB,CAAC;AACtE,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAEjB,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEhF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AActD;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,+DAA+D;IAC/D,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,sFAAsF;IACtF,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,iFAAiF;IACjF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,uFAAuF;IACvF,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,yEAAyE;IACzE,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,kFAAkF;IAClF,oBAAoB,CAAC,EAAE,qBAAqB,CAAC;IAC7C,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IACrC;;;OAGG;IACH,qBAAqB,CAAC,EAAE,WAAW,EAAE,CAAC;IACtC;;;OAGG;IACH,mBAAmB,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,CAAC;CAC1D;AAWD,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CA+U9C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"MinimizedToolsStack.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/MinimizedToolsStack.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAS9D,OAAO,EAAqB,aAAa,EAAE,MAAM,yBAAyB,CAAC;AA2L3E,MAAM,WAAW,wBAAwB;IACvC,8CAA8C;IAC9C,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;IAC1C,0DAA0D;IAC1D,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAMD,wBAAgB,mBAAmB,CAAC,EAClC,SAAS,EACT,cAA8B,GAC/B,EAAE,wBAAwB,qBA8C1B"}
1
+ {"version":3,"file":"MinimizedToolsStack.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/MinimizedToolsStack.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+D,MAAM,OAAO,CAAC;AAepF,OAAO,EAAqB,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAsP3E,MAAM,WAAW,wBAAwB;IACvC,8CAA8C;IAC9C,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;IAC1C,0DAA0D;IAC1D,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAMD,wBAAgB,mBAAmB,CAAC,EAClC,SAAS,EACT,cAA8B,GAC/B,EAAE,wBAAwB,qBA0D1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"MinimizedToolsStack.web.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/MinimizedToolsStack.web.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAyHH,MAAM,WAAW,wBAAwB;IACvC,gEAAgE;IAChE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,mBAAmB,CAAC,EAAE,cAAmB,EAAE,EAAE,wBAAwB,sCAsKpF"}
1
+ {"version":3,"file":"MinimizedToolsStack.web.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/MinimizedToolsStack.web.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAiMH,MAAM,WAAW,wBAAwB;IACvC,gEAAgE;IAChE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,mBAAmB,CAAC,EAAE,cAAmB,EAAE,EAAE,wBAAwB,sCAmMpF"}
@@ -1 +1 @@
1
- {"version":3,"file":"OnboardingTooltip.web.d.ts","sourceRoot":"","sources":["../../../../../src/floatingMenu/dial/OnboardingTooltip.web.tsx"],"names":[],"mappings":"AAmCA,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,yEAAyE;IACzE,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,OAAO,EACP,SAAS,EACT,SAAgB,GACjB,EAAE,sBAAsB,+BAsIxB"}
1
+ {"version":3,"file":"OnboardingTooltip.web.d.ts","sourceRoot":"","sources":["../../../../../src/floatingMenu/dial/OnboardingTooltip.web.tsx"],"names":[],"mappings":"AAoCA,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,yEAAyE;IACzE,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,OAAO,EACP,SAAS,EACT,SAAgB,GACjB,EAAE,sBAAsB,+BAsIxB"}
@@ -9,5 +9,5 @@
9
9
  * Drift is prevented by a test that fails when this disagrees with
10
10
  * package.json, so a version bump that forgets this file cannot ship.
11
11
  */
12
- export declare const SDK_VERSION = "7.0.34";
12
+ export declare const SDK_VERSION = "7.0.36";
13
13
  //# sourceMappingURL=version.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@buoy-gg/core",
3
- "version": "7.0.34",
3
+ "version": "7.0.36",
4
4
  "description": "Buoy devtools for React Native — a floating in-app dev menu; every tool streams live to your phone, desktop, and AI agent.",
5
5
  "main": "lib/commonjs/index.js",
6
6
  "module": "lib/module/index.js",
@@ -37,10 +37,10 @@
37
37
  ],
38
38
  "sideEffects": false,
39
39
  "dependencies": {
40
- "@buoy-gg/license": "^7.0.34",
41
- "@buoy-gg/shared-ui": "^7.0.34",
42
- "@buoy-gg/floating-tools-core": "^7.0.34",
43
- "@buoy-gg/floating-tools-react": "^7.0.34"
40
+ "@buoy-gg/shared-ui": "^7.0.36",
41
+ "@buoy-gg/license": "^7.0.36",
42
+ "@buoy-gg/floating-tools-react": "^7.0.36",
43
+ "@buoy-gg/floating-tools-core": "^7.0.36"
44
44
  },
45
45
  "peerDependencies": {
46
46
  "react": "*",