@buoy-gg/network 7.0.31 → 7.0.33

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 (29) hide show
  1. package/lib/commonjs/index.js +6 -0
  2. package/lib/commonjs/network/components/NetworkHeaderLive.js +16 -0
  3. package/lib/commonjs/network/components/NetworkListScreen.js +31 -37
  4. package/lib/commonjs/network/components/NetworkModal.js +24 -2
  5. package/lib/commonjs/network/components/NetworkOverridesScreen.js +11 -2
  6. package/lib/commonjs/network/components/NetworkSavedScreen.js +18 -34
  7. package/lib/commonjs/network/hooks/useNetworkEventList.js +7 -4
  8. package/lib/commonjs/network/sync/networkSyncAdapter.js +8 -0
  9. package/lib/module/index.js +1 -1
  10. package/lib/module/network/components/NetworkHeaderLive.js +15 -0
  11. package/lib/module/network/components/NetworkListScreen.js +32 -38
  12. package/lib/module/network/components/NetworkModal.js +25 -3
  13. package/lib/module/network/components/NetworkOverridesScreen.js +12 -3
  14. package/lib/module/network/components/NetworkSavedScreen.js +19 -35
  15. package/lib/module/network/hooks/useNetworkEventList.js +7 -4
  16. package/lib/module/network/sync/networkSyncAdapter.js +8 -0
  17. package/lib/typescript/index.d.ts +1 -1
  18. package/lib/typescript/index.d.ts.map +1 -1
  19. package/lib/typescript/network/components/NetworkHeaderLive.d.ts +11 -0
  20. package/lib/typescript/network/components/NetworkHeaderLive.d.ts.map +1 -1
  21. package/lib/typescript/network/components/NetworkListScreen.d.ts.map +1 -1
  22. package/lib/typescript/network/components/NetworkModal.d.ts.map +1 -1
  23. package/lib/typescript/network/components/NetworkOverridesScreen.d.ts.map +1 -1
  24. package/lib/typescript/network/components/NetworkSavedScreen.d.ts.map +1 -1
  25. package/lib/typescript/network/hooks/useNetworkEventList.d.ts +11 -0
  26. package/lib/typescript/network/hooks/useNetworkEventList.d.ts.map +1 -1
  27. package/lib/typescript/network/sync/networkSyncAdapter.d.ts +4 -0
  28. package/lib/typescript/network/sync/networkSyncAdapter.d.ts.map +1 -1
  29. package/package.json +2 -2
@@ -63,6 +63,12 @@ Object.defineProperty(exports, "NetworkEventItemCompact", {
63
63
  return _NetworkEventItemCompact.NetworkEventItemCompact;
64
64
  }
65
65
  });
66
+ Object.defineProperty(exports, "NetworkHeaderBadgesView", {
67
+ enumerable: true,
68
+ get: function () {
69
+ return _NetworkHeaderLive.NetworkHeaderBadgesView;
70
+ }
71
+ });
66
72
  Object.defineProperty(exports, "NetworkModal", {
67
73
  enumerable: true,
68
74
  get: function () {
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.NetworkClearButton = NetworkClearButton;
7
7
  exports.NetworkDetailPinActions = NetworkDetailPinActions;
8
8
  exports.NetworkHeaderBadges = NetworkHeaderBadges;
9
+ exports.NetworkHeaderBadgesView = NetworkHeaderBadgesView;
9
10
  exports.NetworkHeaderCopyButton = NetworkHeaderCopyButton;
10
11
  exports.NetworkSavedButton = NetworkSavedButton;
11
12
  var _reactNative = require("react-native");
@@ -48,6 +49,21 @@ function NetworkHeaderBadges({
48
49
  ignoredPatterns,
49
50
  paused
50
51
  });
52
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(NetworkHeaderBadgesView, {
53
+ counts: counts,
54
+ activeStatus: activeStatus,
55
+ onToggleStatus: onToggleStatus
56
+ });
57
+ }
58
+ /**
59
+ * The chips themselves, fed by props — what the parity sheet renders with
60
+ * fixture counts (`NetworkHeaderBadges` reads the live store).
61
+ */
62
+ function NetworkHeaderBadgesView({
63
+ counts,
64
+ activeStatus,
65
+ onToggleStatus
66
+ }) {
51
67
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
52
68
  style: styles.headerChipRow,
53
69
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
@@ -27,23 +27,6 @@ var _jsxRuntime = require("react/jsx-runtime");
27
27
  * `paused || !visible` so a hidden list doesn't subscribe at all.
28
28
  */
29
29
 
30
- function EmptyState({
31
- isEnabled
32
- }) {
33
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
34
- style: styles.emptyState,
35
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.Globe, {
36
- size: 32,
37
- color: _sharedUi.macOSColors.text.muted
38
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
39
- style: styles.emptyTitle,
40
- children: "No network events"
41
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
42
- style: styles.emptyText,
43
- children: isEnabled ? "Network requests will appear here" : "Enable interception to start capturing"
44
- })]
45
- });
46
- }
47
30
  const keyExtractor = item => item.id;
48
31
 
49
32
  /**
@@ -164,7 +147,8 @@ function NetworkListScreen({
164
147
  const {
165
148
  visibleEvents,
166
149
  hasLockedEvents,
167
- lockedEventCount
150
+ lockedEventCount,
151
+ totalEvents
168
152
  } = (0, _useNetworkEventList.useNetworkEventList)({
169
153
  filter,
170
154
  ignoredPatterns,
@@ -226,6 +210,34 @@ function NetworkListScreen({
226
210
  onLongPress: handleLongPress,
227
211
  saved: savedLiveIds.has(item.id)
228
212
  });
213
+
214
+ // Which flavour of "nothing here" this is. Pins and overrides render
215
+ // outside the list, so a screen showing only those is not empty at all.
216
+ const renderEmpty = () => {
217
+ // Pins and overrides render outside the list, so a screen showing only
218
+ // those is not empty at all.
219
+ if (pinnedRows.length > 0 || overridden.length > 0) return null;
220
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ToolEmptyState, {
221
+ testID: "buoy-network-empty",
222
+ ...(0, _sharedUi.resolveListEmptyState)({
223
+ subject: "requests",
224
+ search: searchText,
225
+ total: totalEvents,
226
+ capturing: isEnabled,
227
+ waiting: {
228
+ // fishing = capture is on and nothing has arrived.
229
+ otto: "fishing",
230
+ title: "No network events",
231
+ message: "Network requests will appear here"
232
+ },
233
+ paused: {
234
+ // paused = capture off. Both are literally what the copy says.
235
+ title: "No network events",
236
+ message: "Enable interception to start capturing"
237
+ }
238
+ })
239
+ });
240
+ };
229
241
  const renderListFooter = () => {
230
242
  if (!hasLockedEvents) return null;
231
243
  const isSearching = searchText.length > 0;
@@ -297,9 +309,7 @@ function NetworkListScreen({
297
309
  extraData: savedLiveIds,
298
310
  "sentry-label": "ignore network events list",
299
311
  ListFooterComponent: renderListFooter
300
- }) : pinnedRows.length > 0 || overridden.length > 0 ? null : /*#__PURE__*/(0, _jsxRuntime.jsx)(EmptyState, {
301
- isEnabled: isEnabled
302
- })]
312
+ }) : renderEmpty()]
303
313
  });
304
314
  }
305
315
  const styles = _reactNative.StyleSheet.create({
@@ -396,21 +406,5 @@ const styles = _reactNative.StyleSheet.create({
396
406
  },
397
407
  listContent: {
398
408
  paddingTop: 8
399
- },
400
- emptyState: {
401
- alignItems: "center",
402
- paddingVertical: 40
403
- },
404
- emptyTitle: {
405
- color: _sharedUi.macOSColors.text.primary,
406
- fontSize: 14,
407
- fontWeight: "600",
408
- marginTop: 12,
409
- marginBottom: 6
410
- },
411
- emptyText: {
412
- color: _sharedUi.macOSColors.text.muted,
413
- fontSize: 12,
414
- textAlign: "center"
415
409
  }
416
410
  });
@@ -235,6 +235,12 @@ function NetworkModalInner({
235
235
  const [activeTab, setActiveTab] = (0, _react.useState)("filters");
236
236
  const [searchText, setSearchText] = (0, _react.useState)("");
237
237
  const [isSearchActive, setIsSearchActive] = (0, _react.useState)(false);
238
+ // True while the header's clear ✕ is being pressed. With a mouse, pressing
239
+ // the ✕ blurs the input FIRST, and the blur handler below closes search —
240
+ // which unmounts the ✕ before its own press can fire, so the query was
241
+ // never cleared (desktop). Press-in lands before the blur, so the blur
242
+ // handler can tell this dismissal apart from a click elsewhere.
243
+ const clearPressRef = (0, _react.useRef)(false);
238
244
  // The Saved screen's search box lives HERE, not in that screen, because the
239
245
  // detail footer steps through the same list the user was just looking at —
240
246
  // and the Saved screen is unmounted while a detail is open.
@@ -459,20 +465,35 @@ function NetworkModalInner({
459
465
  value: searchText,
460
466
  onChangeText: handleSearch,
461
467
  onSubmitEditing: () => setIsSearchActive(false),
462
- onBlur: () => setIsSearchActive(false),
468
+ onBlur: () => {
469
+ if (!clearPressRef.current) setIsSearchActive(false);
470
+ },
463
471
  "sentry-label": "ignore network search header",
464
472
  accessibilityLabel: "Search network requests",
465
473
  testID: "buoy-network-search-input",
466
474
  autoCapitalize: "none",
467
475
  autoCorrect: false,
468
476
  returnKeyType: "search"
469
- }), searchText.length > 0 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
477
+ }), searchText.length > 0 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity
478
+ // react-native-web delays press-in ~50ms by default (native
479
+ // fires it immediately), which would put it AFTER the blur.
480
+ , {
481
+ delayPressIn: 0,
482
+ onPressIn: () => {
483
+ clearPressRef.current = true;
484
+ },
485
+ onPressOut: () => {
486
+ clearPressRef.current = false;
487
+ },
470
488
  onPress: () => {
471
489
  handleSearch("");
472
490
  setIsSearchActive(false);
473
491
  },
474
492
  "sentry-label": "ignore clear search header",
475
493
  style: styles.headerSearchClear,
494
+ accessibilityRole: "button",
495
+ accessibilityLabel: "Clear search",
496
+ testID: "buoy-network-search-clear",
476
497
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.X, {
477
498
  size: 14,
478
499
  color: _sharedUi.night.color.textSecondary
@@ -656,6 +677,7 @@ function NetworkModalInner({
656
677
  style: styles.inlineRoot,
657
678
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
658
679
  style: styles.inlineHeader,
680
+ ..._sharedUi.windowDragProps,
659
681
  children: renderHeaderContent()
660
682
  }), body]
661
683
  });
@@ -365,8 +365,17 @@ function OverridesBody({
365
365
  })]
366
366
  }), !hasRules ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
367
367
  style: styles.emptyWrap,
368
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.EmptyState, {
369
- icon: _sharedUi.FlaskConical,
368
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.EmptyState
369
+ // Otto instead of the flask: nothing is faked yet, so he peers
370
+ // into an empty box. Truthful by construction — this branch only
371
+ // renders when the rule list is genuinely empty, and the master
372
+ // switch bar above is hidden in exactly that case.
373
+ , {
374
+ otto: "empty"
375
+ // 32 → pixelSize 2, the size the saved/list screens use, so the
376
+ // three network empties read as one family.
377
+ ,
378
+ iconSize: 32,
370
379
  title: "Nothing overridden"
371
380
  // Names the control that actually exists. This said "tap Force 500"
372
381
  // — a button from the deleted preset list, which sent anyone
@@ -32,21 +32,6 @@ var _jsxRuntime = require("react/jsx-runtime");
32
32
  */
33
33
 
34
34
  const keyExtractor = item => item.id;
35
- function EmptyState() {
36
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
37
- style: styles.emptyState,
38
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.Bookmark, {
39
- size: 32,
40
- color: _sharedUi.macOSColors.text.muted
41
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
42
- style: styles.emptyTitle,
43
- children: "No saved requests"
44
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
45
- style: styles.emptyText,
46
- children: "Open a request and tap the bookmark to keep it here \u2014 saved requests survive Clear and app restarts."
47
- })]
48
- });
49
- }
50
35
  function NetworkSavedScreen({
51
36
  visible,
52
37
  isPro,
@@ -146,7 +131,24 @@ function NetworkSavedScreen({
146
131
  autoCorrect: false,
147
132
  returnKeyType: "search"
148
133
  })]
149
- }) : null, savedRecords.length === 0 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(EmptyState, {}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.FlatList, {
134
+ }) : null, savedRecords.length === 0 ||
135
+ // lockedCount > 0 falls through to the list so the upgrade banner (its
136
+ // ListFooterComponent) still renders — "0 shown, N locked" is an
137
+ // answer, not an empty screen.
138
+ search.trim().length > 0 && filtered.length === 0 && lockedCount === 0 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ToolEmptyState, {
139
+ testID: "buoy-network-saved-empty",
140
+ ...(0, _sharedUi.resolveListEmptyState)({
141
+ subject: "saved requests",
142
+ verb: "kept",
143
+ search: savedRecords.length === 0 ? "" : search,
144
+ total: savedRecords.length,
145
+ waiting: {
146
+ otto: "empty",
147
+ title: "No saved requests",
148
+ message: "Open a request and tap the bookmark to keep it here — saved requests survive Clear and app restarts."
149
+ }
150
+ })
151
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.FlatList, {
150
152
  data: filtered,
151
153
  renderItem: renderItem,
152
154
  keyExtractor: keyExtractor,
@@ -223,23 +225,5 @@ const styles = _reactNative.StyleSheet.create({
223
225
  },
224
226
  listContent: {
225
227
  paddingTop: 4
226
- },
227
- emptyState: {
228
- alignItems: "center",
229
- paddingVertical: 40,
230
- paddingHorizontal: 24
231
- },
232
- emptyTitle: {
233
- color: _sharedUi.macOSColors.text.primary,
234
- fontSize: 14,
235
- fontWeight: "600",
236
- marginTop: 12,
237
- marginBottom: 6
238
- },
239
- emptyText: {
240
- color: _sharedUi.macOSColors.text.muted,
241
- fontSize: 12,
242
- textAlign: "center",
243
- lineHeight: 17
244
228
  }
245
229
  });
@@ -78,9 +78,11 @@ function useNetworkEventList(options) {
78
78
 
79
79
  // Derivations are plain useMemo over the subscribed array — linear
80
80
  // passes over ≤maxEvents items, recomputed only when inputs change.
81
- const filteredEvents = (0, _react.useMemo)(() => {
82
- return (0, _filterNetworkEvents.filterNetworkEvents)((0, _filterNetworkEvents.applyIgnoredPatterns)(events, ignoredPatterns), filter);
83
- }, [events, ignoredPatterns, filter]);
81
+ // Split in two so the pre-filter count is observable: `totalEvents` below
82
+ // is the denominator the empty state needs, and recomputing it separately
83
+ // would mean a second pass over the same array.
84
+ const candidateEvents = (0, _react.useMemo)(() => (0, _filterNetworkEvents.applyIgnoredPatterns)(events, ignoredPatterns), [events, ignoredPatterns]);
85
+ const filteredEvents = (0, _react.useMemo)(() => (0, _filterNetworkEvents.filterNetworkEvents)(candidateEvents, filter), [candidateEvents, filter]);
84
86
 
85
87
  // Free tier: events beyond the limit in the ORIGINAL order are locked,
86
88
  // so locked events stay locked even when searching (ported verbatim).
@@ -100,6 +102,7 @@ function useNetworkEventList(options) {
100
102
  events: filteredEvents,
101
103
  visibleEvents,
102
104
  hasLockedEvents: lockedEventCount > 0,
103
- lockedEventCount
105
+ lockedEventCount,
106
+ totalEvents: candidateEvents.length
104
107
  };
105
108
  }
@@ -431,6 +431,14 @@ const networkSyncAdapter = exports.networkSyncAdapter = {
431
431
  const event = resolveEvent(id);
432
432
  if (!event) return null;
433
433
  return {
434
+ // Identity + the override mark ride along so a caller (Ask Buoy's
435
+ // receipt, an MCP session) can say WHOSE body this is and whether an
436
+ // override rule produced it — a mocked response rendered as "live"
437
+ // is the fabrication problem wearing a chrome suit.
438
+ url: event.url ?? null,
439
+ method: event.method ?? null,
440
+ status: event.status ?? null,
441
+ override: event.override ?? null,
434
442
  requestData: event.requestData ?? null,
435
443
  responseData: event.responseData ?? null,
436
444
  requestHeaders: event.requestHeaders ?? null,
@@ -24,7 +24,7 @@ export { NetworkModal, NetworkToolView } from "./network/components/NetworkModal
24
24
  export { NetworkEventDetailView } from "./network/components/NetworkEventDetailView";
25
25
  export { NetworkEventItemCompact } from "./network/components/NetworkEventItemCompact";
26
26
  export { NetworkSavedScreen } from "./network/components/NetworkSavedScreen";
27
- export { NetworkSavedButton, NetworkDetailPinActions } from "./network/components/NetworkHeaderLive";
27
+ export { NetworkSavedButton, NetworkDetailPinActions, NetworkHeaderBadgesView } from "./network/components/NetworkHeaderLive";
28
28
 
29
29
  // =============================================================================
30
30
  // HOOKS (For consuming network data in custom components)
@@ -40,6 +40,21 @@ export function NetworkHeaderBadges({
40
40
  ignoredPatterns,
41
41
  paused
42
42
  });
43
+ return /*#__PURE__*/_jsx(NetworkHeaderBadgesView, {
44
+ counts: counts,
45
+ activeStatus: activeStatus,
46
+ onToggleStatus: onToggleStatus
47
+ });
48
+ }
49
+ /**
50
+ * The chips themselves, fed by props — what the parity sheet renders with
51
+ * fixture counts (`NetworkHeaderBadges` reads the live store).
52
+ */
53
+ export function NetworkHeaderBadgesView({
54
+ counts,
55
+ activeStatus,
56
+ onToggleStatus
57
+ }) {
43
58
  return /*#__PURE__*/_jsxs(View, {
44
59
  style: styles.headerChipRow,
45
60
  children: [/*#__PURE__*/_jsxs(TouchableOpacity, {
@@ -14,7 +14,7 @@
14
14
 
15
15
  import { useCallback } from "react";
16
16
  import { FlatList, StyleSheet, Text, TouchableOpacity, View } from "react-native";
17
- import { FlaskConical, Globe, Pin, Power, macOSColors } from "@buoy-gg/shared-ui";
17
+ import { FlaskConical, Pin, Power, macOSColors, ToolEmptyState, resolveListEmptyState } from "@buoy-gg/shared-ui";
18
18
  import { NetworkEventItemCompact } from "./NetworkEventItemCompact";
19
19
  import { NetworkUpgradeBanner } from "./NetworkUpgradeBanner";
20
20
  import { useNetworkEventList } from "../hooks/useNetworkEventList";
@@ -23,23 +23,6 @@ import { useOverrideRules } from "../hooks/useOverrideRules";
23
23
  import { ruleMatches } from "../overrides/matchRule";
24
24
  import { splitPinned } from "../utils/withPinnedFirst";
25
25
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
26
- function EmptyState({
27
- isEnabled
28
- }) {
29
- return /*#__PURE__*/_jsxs(View, {
30
- style: styles.emptyState,
31
- children: [/*#__PURE__*/_jsx(Globe, {
32
- size: 32,
33
- color: macOSColors.text.muted
34
- }), /*#__PURE__*/_jsx(Text, {
35
- style: styles.emptyTitle,
36
- children: "No network events"
37
- }), /*#__PURE__*/_jsx(Text, {
38
- style: styles.emptyText,
39
- children: isEnabled ? "Network requests will appear here" : "Enable interception to start capturing"
40
- })]
41
- });
42
- }
43
26
  const keyExtractor = item => item.id;
44
27
 
45
28
  /**
@@ -160,7 +143,8 @@ export function NetworkListScreen({
160
143
  const {
161
144
  visibleEvents,
162
145
  hasLockedEvents,
163
- lockedEventCount
146
+ lockedEventCount,
147
+ totalEvents
164
148
  } = useNetworkEventList({
165
149
  filter,
166
150
  ignoredPatterns,
@@ -222,6 +206,34 @@ export function NetworkListScreen({
222
206
  onLongPress: handleLongPress,
223
207
  saved: savedLiveIds.has(item.id)
224
208
  });
209
+
210
+ // Which flavour of "nothing here" this is. Pins and overrides render
211
+ // outside the list, so a screen showing only those is not empty at all.
212
+ const renderEmpty = () => {
213
+ // Pins and overrides render outside the list, so a screen showing only
214
+ // those is not empty at all.
215
+ if (pinnedRows.length > 0 || overridden.length > 0) return null;
216
+ return /*#__PURE__*/_jsx(ToolEmptyState, {
217
+ testID: "buoy-network-empty",
218
+ ...resolveListEmptyState({
219
+ subject: "requests",
220
+ search: searchText,
221
+ total: totalEvents,
222
+ capturing: isEnabled,
223
+ waiting: {
224
+ // fishing = capture is on and nothing has arrived.
225
+ otto: "fishing",
226
+ title: "No network events",
227
+ message: "Network requests will appear here"
228
+ },
229
+ paused: {
230
+ // paused = capture off. Both are literally what the copy says.
231
+ title: "No network events",
232
+ message: "Enable interception to start capturing"
233
+ }
234
+ })
235
+ });
236
+ };
225
237
  const renderListFooter = () => {
226
238
  if (!hasLockedEvents) return null;
227
239
  const isSearching = searchText.length > 0;
@@ -293,9 +305,7 @@ export function NetworkListScreen({
293
305
  extraData: savedLiveIds,
294
306
  "sentry-label": "ignore network events list",
295
307
  ListFooterComponent: renderListFooter
296
- }) : pinnedRows.length > 0 || overridden.length > 0 ? null : /*#__PURE__*/_jsx(EmptyState, {
297
- isEnabled: isEnabled
298
- })]
308
+ }) : renderEmpty()]
299
309
  });
300
310
  }
301
311
  const styles = StyleSheet.create({
@@ -392,21 +402,5 @@ const styles = StyleSheet.create({
392
402
  },
393
403
  listContent: {
394
404
  paddingTop: 8
395
- },
396
- emptyState: {
397
- alignItems: "center",
398
- paddingVertical: 40
399
- },
400
- emptyTitle: {
401
- color: macOSColors.text.primary,
402
- fontSize: 14,
403
- fontWeight: "600",
404
- marginTop: 12,
405
- marginBottom: 6
406
- },
407
- emptyText: {
408
- color: macOSColors.text.muted,
409
- fontSize: 12,
410
- textAlign: "center"
411
405
  }
412
406
  });
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { useState, useRef, useEffect, useCallback } from "react";
4
4
  import { View, StyleSheet, TouchableOpacity, TextInput } from "react-native";
5
- import { Search, Filter, Bookmark, X, JsModal, ModalHeader, devToolsStorageKeys, macOSColors, night, persistentStorage, NightSegmented, useFeatureGate, UpgradeModal, PowerToggleButton, useIgnoredPatterns } from "@buoy-gg/shared-ui";
5
+ import { Search, Filter, Bookmark, X, JsModal, ModalHeader, devToolsStorageKeys, macOSColors, night, persistentStorage, NightSegmented, useFeatureGate, UpgradeModal, PowerToggleButton, useIgnoredPatterns, windowDragProps } from "@buoy-gg/shared-ui";
6
6
  import { NetworkFilterViewV3 } from "./NetworkFilterViewV3";
7
7
  import { TickProvider } from "../hooks/useTickEveryMinute";
8
8
  import { NetworkEventDetailView } from "./NetworkEventDetailView";
@@ -230,6 +230,12 @@ function NetworkModalInner({
230
230
  const [activeTab, setActiveTab] = useState("filters");
231
231
  const [searchText, setSearchText] = useState("");
232
232
  const [isSearchActive, setIsSearchActive] = useState(false);
233
+ // True while the header's clear ✕ is being pressed. With a mouse, pressing
234
+ // the ✕ blurs the input FIRST, and the blur handler below closes search —
235
+ // which unmounts the ✕ before its own press can fire, so the query was
236
+ // never cleared (desktop). Press-in lands before the blur, so the blur
237
+ // handler can tell this dismissal apart from a click elsewhere.
238
+ const clearPressRef = useRef(false);
233
239
  // The Saved screen's search box lives HERE, not in that screen, because the
234
240
  // detail footer steps through the same list the user was just looking at —
235
241
  // and the Saved screen is unmounted while a detail is open.
@@ -454,20 +460,35 @@ function NetworkModalInner({
454
460
  value: searchText,
455
461
  onChangeText: handleSearch,
456
462
  onSubmitEditing: () => setIsSearchActive(false),
457
- onBlur: () => setIsSearchActive(false),
463
+ onBlur: () => {
464
+ if (!clearPressRef.current) setIsSearchActive(false);
465
+ },
458
466
  "sentry-label": "ignore network search header",
459
467
  accessibilityLabel: "Search network requests",
460
468
  testID: "buoy-network-search-input",
461
469
  autoCapitalize: "none",
462
470
  autoCorrect: false,
463
471
  returnKeyType: "search"
464
- }), searchText.length > 0 ? /*#__PURE__*/_jsx(TouchableOpacity, {
472
+ }), searchText.length > 0 ? /*#__PURE__*/_jsx(TouchableOpacity
473
+ // react-native-web delays press-in ~50ms by default (native
474
+ // fires it immediately), which would put it AFTER the blur.
475
+ , {
476
+ delayPressIn: 0,
477
+ onPressIn: () => {
478
+ clearPressRef.current = true;
479
+ },
480
+ onPressOut: () => {
481
+ clearPressRef.current = false;
482
+ },
465
483
  onPress: () => {
466
484
  handleSearch("");
467
485
  setIsSearchActive(false);
468
486
  },
469
487
  "sentry-label": "ignore clear search header",
470
488
  style: styles.headerSearchClear,
489
+ accessibilityRole: "button",
490
+ accessibilityLabel: "Clear search",
491
+ testID: "buoy-network-search-clear",
471
492
  children: /*#__PURE__*/_jsx(X, {
472
493
  size: 14,
473
494
  color: night.color.textSecondary
@@ -651,6 +672,7 @@ function NetworkModalInner({
651
672
  style: styles.inlineRoot,
652
673
  children: [/*#__PURE__*/_jsx(View, {
653
674
  style: styles.inlineHeader,
675
+ ...windowDragProps,
654
676
  children: renderHeaderContent()
655
677
  }), body]
656
678
  });
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { useCallback, useEffect, useState } from "react";
4
4
  import { ScrollView, StyleSheet, Text, TouchableOpacity, View } from "react-native";
5
- import { AlertCircle, AlertTriangle, DevToolsCard, EmptyState, FlaskConical, MethodBadge, Plus, Trash2, macOSColors, useLimit } from "@buoy-gg/shared-ui";
5
+ import { AlertCircle, AlertTriangle, DevToolsCard, EmptyState, MethodBadge, Plus, Trash2, macOSColors, useLimit } from "@buoy-gg/shared-ui";
6
6
  import { useOverrideRules } from "../hooks/useOverrideRules";
7
7
  import { NetworkOverrideEditor } from "./NetworkOverrideEditor";
8
8
  import { overrideRulesStore } from "../overrides/overrideRulesStore";
@@ -361,8 +361,17 @@ function OverridesBody({
361
361
  })]
362
362
  }), !hasRules ? /*#__PURE__*/_jsx(View, {
363
363
  style: styles.emptyWrap,
364
- children: /*#__PURE__*/_jsx(EmptyState, {
365
- icon: FlaskConical,
364
+ children: /*#__PURE__*/_jsx(EmptyState
365
+ // Otto instead of the flask: nothing is faked yet, so he peers
366
+ // into an empty box. Truthful by construction — this branch only
367
+ // renders when the rule list is genuinely empty, and the master
368
+ // switch bar above is hidden in exactly that case.
369
+ , {
370
+ otto: "empty"
371
+ // 32 → pixelSize 2, the size the saved/list screens use, so the
372
+ // three network empties read as one family.
373
+ ,
374
+ iconSize: 32,
366
375
  title: "Nothing overridden"
367
376
  // Names the control that actually exists. This said "tap Force 500"
368
377
  // — a button from the deleted preset list, which sent anyone
@@ -19,7 +19,7 @@
19
19
 
20
20
  import { useState } from "react";
21
21
  import { FlatList, StyleSheet, Text, TextInput, View, TouchableOpacity } from "react-native";
22
- import { Bookmark, CopyButton, Search, macOSColors, useLimit } from "@buoy-gg/shared-ui";
22
+ import { Bookmark, CopyButton, Search, macOSColors, useLimit, ToolEmptyState, resolveListEmptyState } from "@buoy-gg/shared-ui";
23
23
  import { NetworkEventItemCompact } from "./NetworkEventItemCompact";
24
24
  import { NetworkUpgradeBanner } from "./NetworkUpgradeBanner";
25
25
  import { generateNetworkCopyText } from "../utils/generateNetworkCopyText";
@@ -28,21 +28,6 @@ import { useNetworkSaved } from "../hooks/useNetworkSaved";
28
28
  import { MAX_SAVED } from "../utils/networkSavedStore";
29
29
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
30
30
  const keyExtractor = item => item.id;
31
- function EmptyState() {
32
- return /*#__PURE__*/_jsxs(View, {
33
- style: styles.emptyState,
34
- children: [/*#__PURE__*/_jsx(Bookmark, {
35
- size: 32,
36
- color: macOSColors.text.muted
37
- }), /*#__PURE__*/_jsx(Text, {
38
- style: styles.emptyTitle,
39
- children: "No saved requests"
40
- }), /*#__PURE__*/_jsx(Text, {
41
- style: styles.emptyText,
42
- children: "Open a request and tap the bookmark to keep it here \u2014 saved requests survive Clear and app restarts."
43
- })]
44
- });
45
- }
46
31
  export function NetworkSavedScreen({
47
32
  visible,
48
33
  isPro,
@@ -142,7 +127,24 @@ export function NetworkSavedScreen({
142
127
  autoCorrect: false,
143
128
  returnKeyType: "search"
144
129
  })]
145
- }) : null, savedRecords.length === 0 ? /*#__PURE__*/_jsx(EmptyState, {}) : /*#__PURE__*/_jsx(FlatList, {
130
+ }) : null, savedRecords.length === 0 ||
131
+ // lockedCount > 0 falls through to the list so the upgrade banner (its
132
+ // ListFooterComponent) still renders — "0 shown, N locked" is an
133
+ // answer, not an empty screen.
134
+ search.trim().length > 0 && filtered.length === 0 && lockedCount === 0 ? /*#__PURE__*/_jsx(ToolEmptyState, {
135
+ testID: "buoy-network-saved-empty",
136
+ ...resolveListEmptyState({
137
+ subject: "saved requests",
138
+ verb: "kept",
139
+ search: savedRecords.length === 0 ? "" : search,
140
+ total: savedRecords.length,
141
+ waiting: {
142
+ otto: "empty",
143
+ title: "No saved requests",
144
+ message: "Open a request and tap the bookmark to keep it here — saved requests survive Clear and app restarts."
145
+ }
146
+ })
147
+ }) : /*#__PURE__*/_jsx(FlatList, {
146
148
  data: filtered,
147
149
  renderItem: renderItem,
148
150
  keyExtractor: keyExtractor,
@@ -219,23 +221,5 @@ const styles = StyleSheet.create({
219
221
  },
220
222
  listContent: {
221
223
  paddingTop: 4
222
- },
223
- emptyState: {
224
- alignItems: "center",
225
- paddingVertical: 40,
226
- paddingHorizontal: 24
227
- },
228
- emptyTitle: {
229
- color: macOSColors.text.primary,
230
- fontSize: 14,
231
- fontWeight: "600",
232
- marginTop: 12,
233
- marginBottom: 6
234
- },
235
- emptyText: {
236
- color: macOSColors.text.muted,
237
- fontSize: 12,
238
- textAlign: "center",
239
- lineHeight: 17
240
224
  }
241
225
  });
@@ -74,9 +74,11 @@ export function useNetworkEventList(options) {
74
74
 
75
75
  // Derivations are plain useMemo over the subscribed array — linear
76
76
  // passes over ≤maxEvents items, recomputed only when inputs change.
77
- const filteredEvents = useMemo(() => {
78
- return filterNetworkEvents(applyIgnoredPatterns(events, ignoredPatterns), filter);
79
- }, [events, ignoredPatterns, filter]);
77
+ // Split in two so the pre-filter count is observable: `totalEvents` below
78
+ // is the denominator the empty state needs, and recomputing it separately
79
+ // would mean a second pass over the same array.
80
+ const candidateEvents = useMemo(() => applyIgnoredPatterns(events, ignoredPatterns), [events, ignoredPatterns]);
81
+ const filteredEvents = useMemo(() => filterNetworkEvents(candidateEvents, filter), [candidateEvents, filter]);
80
82
 
81
83
  // Free tier: events beyond the limit in the ORIGINAL order are locked,
82
84
  // so locked events stay locked even when searching (ported verbatim).
@@ -96,6 +98,7 @@ export function useNetworkEventList(options) {
96
98
  events: filteredEvents,
97
99
  visibleEvents,
98
100
  hasLockedEvents: lockedEventCount > 0,
99
- lockedEventCount
101
+ lockedEventCount,
102
+ totalEvents: candidateEvents.length
100
103
  };
101
104
  }
@@ -428,6 +428,14 @@ export const networkSyncAdapter = {
428
428
  const event = resolveEvent(id);
429
429
  if (!event) return null;
430
430
  return {
431
+ // Identity + the override mark ride along so a caller (Ask Buoy's
432
+ // receipt, an MCP session) can say WHOSE body this is and whether an
433
+ // override rule produced it — a mocked response rendered as "live"
434
+ // is the fabrication problem wearing a chrome suit.
435
+ url: event.url ?? null,
436
+ method: event.method ?? null,
437
+ status: event.status ?? null,
438
+ override: event.override ?? null,
431
439
  requestData: event.requestData ?? null,
432
440
  responseData: event.responseData ?? null,
433
441
  requestHeaders: event.requestHeaders ?? null,
@@ -13,7 +13,7 @@ export type { NetworkToolViewProps } from "./network/components/NetworkModal";
13
13
  export { NetworkEventDetailView } from "./network/components/NetworkEventDetailView";
14
14
  export { NetworkEventItemCompact } from "./network/components/NetworkEventItemCompact";
15
15
  export { NetworkSavedScreen } from "./network/components/NetworkSavedScreen";
16
- export { NetworkSavedButton, NetworkDetailPinActions, } from "./network/components/NetworkHeaderLive";
16
+ export { NetworkSavedButton, NetworkDetailPinActions, NetworkHeaderBadgesView, } from "./network/components/NetworkHeaderLive";
17
17
  export { useNetworkEvents } from "./network/hooks/useNetworkEvents";
18
18
  export { useNetworkEventList } from "./network/hooks/useNetworkEventList";
19
19
  export { useLiveNetworkEvent } from "./network/hooks/useLiveNetworkEvent";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAOhE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAClF,YAAY,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EACL,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,wCAAwC,CAAC;AAKhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAIpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAI9E,OAAO,EACL,eAAe,EACf,KAAK,qBAAqB,GAC3B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAIhF,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,KAAK,qBAAqB,GAC3B,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAKtF,OAAO,EACL,WAAW,EACX,cAAc,EACd,gBAAgB,GACjB,MAAM,4BAA4B,CAAC;AAKpC,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,uBAAuB,GACxB,MAAM,iBAAiB,CAAC;AAQzB,OAAO,EACL,kBAAkB,EAClB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB;AACtB;;;GAGG;AACH,KAAK,mBAAmB,GACzB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EACL,SAAS,IAAI,kBAAkB,EAC/B,oBAAoB,IAAI,wBAAwB,EAChD,UAAU,IAAI,mBAAmB,EACjC,UAAU,IAAI,mBAAmB,EACjC,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,GACzB,MAAM,2BAA2B,CAAC;AAQnC,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,wBAAwB,EACxB,YAAY,GACb,MAAM,oBAAoB,CAAC;AAK5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EACL,2BAA2B,EAC3B,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,GACzB,MAAM,oCAAoC,CAAC;AAO5C,gBAAgB;AAChB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE;;;GAGG;AACH,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,qBAAqB,EACrB,UAAU,EACV,SAAS,EACT,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACvB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,gBAAgB;AAChB,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,iCAAiC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAOhE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAClF,YAAY,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,wCAAwC,CAAC;AAKhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAIpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAI9E,OAAO,EACL,eAAe,EACf,KAAK,qBAAqB,GAC3B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAIhF,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,KAAK,qBAAqB,GAC3B,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAKtF,OAAO,EACL,WAAW,EACX,cAAc,EACd,gBAAgB,GACjB,MAAM,4BAA4B,CAAC;AAKpC,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,uBAAuB,GACxB,MAAM,iBAAiB,CAAC;AAQzB,OAAO,EACL,kBAAkB,EAClB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB;AACtB;;;GAGG;AACH,KAAK,mBAAmB,GACzB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EACL,SAAS,IAAI,kBAAkB,EAC/B,oBAAoB,IAAI,wBAAwB,EAChD,UAAU,IAAI,mBAAmB,EACjC,UAAU,IAAI,mBAAmB,EACjC,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,GACzB,MAAM,2BAA2B,CAAC;AAQnC,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,wBAAwB,EACxB,YAAY,GACb,MAAM,oBAAoB,CAAC;AAK5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EACL,2BAA2B,EAC3B,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,GACzB,MAAM,oCAAoC,CAAC;AAO5C,gBAAgB;AAChB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE;;;GAGG;AACH,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,qBAAqB,EACrB,UAAU,EACV,SAAS,EACT,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACvB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,gBAAgB;AAChB,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,iCAAiC,CAAC"}
@@ -18,6 +18,7 @@
18
18
  import { type IgnoredPattern } from "@buoy-gg/shared-ui";
19
19
  import type { NetworkFilter } from "../types";
20
20
  import type { CopySettings } from "./NetworkCopySettingsView";
21
+ import type { NetworkBadgeCounts } from "../hooks/useNetworkBadgeCounts";
21
22
  type StatusFilter = "success" | "error" | "pending";
22
23
  interface NetworkHeaderBadgesProps {
23
24
  activeStatus: NetworkFilter["status"];
@@ -27,6 +28,16 @@ interface NetworkHeaderBadgesProps {
27
28
  }
28
29
  /** Success / error / pending chips — tap to toggle the status filter. */
29
30
  export declare function NetworkHeaderBadges({ activeStatus, onToggleStatus, ignoredPatterns, paused, }: NetworkHeaderBadgesProps): import("react").JSX.Element;
31
+ interface NetworkHeaderBadgesViewProps {
32
+ counts: Pick<NetworkBadgeCounts, "successful" | "failed" | "pending">;
33
+ activeStatus: NetworkFilter["status"];
34
+ onToggleStatus: (status: StatusFilter) => void;
35
+ }
36
+ /**
37
+ * The chips themselves, fed by props — what the parity sheet renders with
38
+ * fixture counts (`NetworkHeaderBadges` reads the live store).
39
+ */
40
+ export declare function NetworkHeaderBadgesView({ counts, activeStatus, onToggleStatus, }: NetworkHeaderBadgesViewProps): import("react").JSX.Element;
30
41
  interface NetworkClearButtonProps {
31
42
  paused: boolean;
32
43
  }
@@ -1 +1 @@
1
- {"version":3,"file":"NetworkHeaderLive.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkHeaderLive.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAWL,KAAK,cAAc,EAEpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAqB9D,KAAK,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAEpD,UAAU,wBAAwB;IAChC,YAAY,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IACtC,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IAC/C,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,yEAAyE;AACzE,wBAAgB,mBAAmB,CAAC,EAClC,YAAY,EACZ,cAAc,EACd,eAAe,EACf,MAAM,GACP,EAAE,wBAAwB,+BA4D1B;AAED,UAAU,uBAAuB;IAC/B,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;iDAEiD;AACjD,wBAAgB,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAAE,uBAAuB,+BAwBrE;AAED,UAAU,uBAAuB;IAC/B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,OAAO,EAAE,EAAE,uBAAuB,+BAwBtE;AAED,UAAU,4BAA4B;IACpC,KAAK,EAAE,OAAO,CAAC;IACf,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,KAAK,EACL,cAAc,GACf,EAAE,4BAA4B,+BA4F9B;AAED,UAAU,4BAA4B;IACpC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,aAAa,CAAC;IACtB,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,YAAY,EAAE,YAAY,CAAC;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,KAAK,EACL,MAAM,EACN,eAAe,EACf,YAAY,EACZ,MAAM,EACN,cAAc,EACd,KAAK,GACN,EAAE,4BAA4B,+BAsD9B"}
1
+ {"version":3,"file":"NetworkHeaderLive.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkHeaderLive.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAWL,KAAK,cAAc,EAEpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAW9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAWzE,KAAK,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAEpD,UAAU,wBAAwB;IAChC,YAAY,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IACtC,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IAC/C,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,yEAAyE;AACzE,wBAAgB,mBAAmB,CAAC,EAClC,YAAY,EACZ,cAAc,EACd,eAAe,EACf,MAAM,GACP,EAAE,wBAAwB,+BAS1B;AAED,UAAU,4BAA4B;IACpC,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,YAAY,GAAG,QAAQ,GAAG,SAAS,CAAC,CAAC;IACtE,YAAY,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IACtC,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;CAChD;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,MAAM,EACN,YAAY,EACZ,cAAc,GACf,EAAE,4BAA4B,+BA0D9B;AAED,UAAU,uBAAuB;IAC/B,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;iDAEiD;AACjD,wBAAgB,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAAE,uBAAuB,+BAwBrE;AAED,UAAU,uBAAuB;IAC/B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,OAAO,EAAE,EAAE,uBAAuB,+BAwBtE;AAED,UAAU,4BAA4B;IACpC,KAAK,EAAE,OAAO,CAAC;IACf,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,KAAK,EACL,cAAc,GACf,EAAE,4BAA4B,+BA4F9B;AAED,UAAU,4BAA4B;IACpC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,aAAa,CAAC;IACtB,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,YAAY,EAAE,YAAY,CAAC;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,KAAK,EACL,MAAM,EACN,eAAe,EACf,YAAY,EACZ,MAAM,EACN,cAAc,EACd,KAAK,GACN,EAAE,4BAA4B,+BAsD9B"}
@@ -1 +1 @@
1
- {"version":3,"file":"NetworkListScreen.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkListScreen.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EAML,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AA2J5D,UAAU,sBAAsB;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,aAAa,CAAC;IACtB,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,YAAY,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC5C,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED,wBAAgB,iBAAiB,CAAC,EAChC,OAAO,EACP,MAAM,EACN,MAAM,EACN,eAAe,EACf,KAAK,EACL,UAAU,EACV,YAAY,EACZ,cAAc,GACf,EAAE,sBAAsB,sCA+JxB"}
1
+ {"version":3,"file":"NetworkListScreen.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkListScreen.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EAML,KAAK,cAAc,EAGpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AA6I5D,UAAU,sBAAsB;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,aAAa,CAAC;IACtB,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,YAAY,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC5C,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED,wBAAgB,iBAAiB,CAAC,EAChC,OAAO,EACP,MAAM,EACN,MAAM,EACN,eAAe,EACf,KAAK,EACL,UAAU,EACV,YAAY,EACZ,cAAc,GACf,EAAE,sBAAsB,sCA6LxB"}
@@ -1 +1 @@
1
- {"version":3,"file":"NetworkModal.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkModal.tsx"],"names":[],"mappings":"AAsEA,UAAU,iBAAiB;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,KAAK,IAAI,CAAC;IACvC,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CAC5C;AA23BD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,+BAMpD;AAED,MAAM,WAAW,oBAAoB;IACnC,+EAA+E;IAC/E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CAC5C;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,KAAK,GAAE,oBAAyB,+BAa/D"}
1
+ {"version":3,"file":"NetworkModal.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkModal.tsx"],"names":[],"mappings":"AAwEA,UAAU,iBAAiB;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,KAAK,IAAI,CAAC;IACvC,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CAC5C;AA+4BD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,+BAMpD;AAED,MAAM,WAAW,oBAAoB;IACnC,+EAA+E;IAC/E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CAC5C;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,KAAK,GAAE,oBAAyB,+BAa/D"}
@@ -1 +1 @@
1
- {"version":3,"file":"NetworkOverridesScreen.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkOverridesScreen.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAgBhF,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,iCAAiC,CAAC;AAwJzC,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,iBAAiB,GAAG;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI,CAAC;IAC5D,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,gBAAgB,CAAC,CAAC,MAAM,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IAC1D,wDAAwD;IACxD,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,sCAGxE"}
1
+ {"version":3,"file":"NetworkOverridesScreen.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkOverridesScreen.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAehF,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,iCAAiC,CAAC;AAwJzC,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,iBAAiB,GAAG;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI,CAAC;IAC5D,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,gBAAgB,CAAC,CAAC,MAAM,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IAC1D,wDAAwD;IACxD,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,sCAGxE"}
@@ -1 +1 @@
1
- {"version":3,"file":"NetworkSavedScreen.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkSavedScreen.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAYH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAqB9D,UAAU,uBAAuB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,YAAY,CAAC;IAC3B;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,wEAAwE;IACxE,YAAY,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC5C,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED,wBAAgB,kBAAkB,CAAC,EACjC,OAAO,EACP,KAAK,EACL,YAAY,EACZ,MAAM,EAAE,UAAU,EAClB,cAAc,EACd,YAAY,EACZ,cAAc,GACf,EAAE,uBAAuB,sCA8HzB"}
1
+ {"version":3,"file":"NetworkSavedScreen.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkSavedScreen.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAcH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAQ9D,UAAU,uBAAuB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,YAAY,CAAC;IAC3B;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,wEAAwE;IACxE,YAAY,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC5C,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED,wBAAgB,kBAAkB,CAAC,EACjC,OAAO,EACP,KAAK,EACL,YAAY,EACZ,MAAM,EAAE,UAAU,EAClB,cAAc,EACd,YAAY,EACZ,cAAc,GACf,EAAE,uBAAuB,sCAgJzB"}
@@ -24,6 +24,17 @@ export interface NetworkEventListResult {
24
24
  visibleEvents: NetworkEvent[];
25
25
  hasLockedEvents: boolean;
26
26
  lockedEventCount: number;
27
+ /**
28
+ * How many events the filter had to choose FROM — the store minus the
29
+ * ignored patterns, before `filter` is applied.
30
+ *
31
+ * This is what separates "nothing was captured" from "nothing matched":
32
+ * with an empty list, `totalEvents > 0` means a search or filter hid
33
+ * everything, and the two cases want different copy (and a different
34
+ * Otto). Ignored patterns count as hidden rather than filtered — they are
35
+ * standing config, not something the user just typed.
36
+ */
37
+ totalEvents: number;
27
38
  }
28
39
  export declare function useNetworkEventList(options: {
29
40
  filter: NetworkFilter;
@@ -1 +1 @@
1
- {"version":3,"file":"useNetworkEventList.d.ts","sourceRoot":"","sources":["../../../../src/network/hooks/useNetworkEventList.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGzD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAM5D,MAAM,WAAW,sBAAsB;IACrC,6DAA6D;IAC7D,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,iEAAiE;IACjE,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE;IAC3C,MAAM,EAAE,aAAa,CAAC;IACtB,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,MAAM,EAAE,OAAO,CAAC;IAChB;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;CAChB,GAAG,sBAAsB,CAoFzB"}
1
+ {"version":3,"file":"useNetworkEventList.d.ts","sourceRoot":"","sources":["../../../../src/network/hooks/useNetworkEventList.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGzD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAM5D,MAAM,WAAW,sBAAsB;IACrC,6DAA6D;IAC7D,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,iEAAiE;IACjE,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB;;;;;;;;;OASG;IACH,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE;IAC3C,MAAM,EAAE,aAAa,CAAC;IACtB,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,MAAM,EAAE,OAAO,CAAC;IAChB;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;CAChB,GAAG,sBAAsB,CA2FzB"}
@@ -79,6 +79,10 @@ export declare const networkSyncAdapter: {
79
79
  * request that has since been cleared. Returns null if neither has it.
80
80
  */
81
81
  getEventBody: (params?: unknown) => {
82
+ url: string;
83
+ method: string;
84
+ status: number | null;
85
+ override: import("../types").NetworkOverrideMark | null;
82
86
  requestData: {} | null;
83
87
  responseData: {} | null;
84
88
  requestHeaders: Record<string, string>;
@@ -1 +1 @@
1
- {"version":3,"file":"networkSyncAdapter.d.ts","sourceRoot":"","sources":["../../../../src/network/sync/networkSyncAdapter.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAEV,kBAAkB,EACnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG7C;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,QAAY,CAAC;AAEpD;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,QAAqB,CAAC;AA2LzD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,2BAA2B,KAAK,CAAC;AA8K9C;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,kBAAkB;;;;QAczB;;;;WAIG;;;;;;;;;;;;;0BAWe,MAAM,IAAI;;;QAkB9B;;;;;WAKG;gCACqB,OAAO;;;;;;QAY/B,8CAA8C;6BACzB,OAAO;;;;;;;;;QAY5B,gDAAgD;4BAC5B,OAAO;;;;;;;;;QAU3B,sDAAsD;qCACzB,OAAO;;;;;;;;;QAsBpC,uEAAuE;uCACxC,OAAO;oBA/O5B,KAAK;4BAAkB,MAAM;;;;;;;QA0PvC,2CAA2C;sCACb,OAAO;;;;oBA3P3B,KAAK;4BAAkB,MAAM;;;;;;;;;;;;;;;;;;;;;;;0CA+RL,OAAO;;;;oBA/R/B,KAAK;4BAAkB,MAAM;;;;;;;sCAsST,OAAO;;;;;;;;;;QAYrC,+EAA+E;;QAG/E;;;;WAIG;uCAC4B,OAAO;;;QAYtC,4EAA4E;QAC5E;;;;;;;WAOG;;;;;;;;;kCA2CuB,OAAO;;;;;;;;;;;;;;;;CAiBpC,CAAC"}
1
+ {"version":3,"file":"networkSyncAdapter.d.ts","sourceRoot":"","sources":["../../../../src/network/sync/networkSyncAdapter.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAEV,kBAAkB,EACnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG7C;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,QAAY,CAAC;AAEpD;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,QAAqB,CAAC;AA2LzD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,2BAA2B,KAAK,CAAC;AA8K9C;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,kBAAkB;;;;QAczB;;;;WAIG;;;;;;;;;;;;;0BAWe,MAAM,IAAI;;;QAkB9B;;;;;WAKG;gCACqB,OAAO;;;;;;;;;;QAoB/B,8CAA8C;6BACzB,OAAO;;;;;;;;;QAY5B,gDAAgD;4BAC5B,OAAO;;;;;;;;;QAU3B,sDAAsD;qCACzB,OAAO;;;;;;;;;QAsBpC,uEAAuE;uCACxC,OAAO;oBAvP5B,KAAK;4BAAkB,MAAM;;;;;;;QAkQvC,2CAA2C;sCACb,OAAO;;;;oBAnQ3B,KAAK;4BAAkB,MAAM;;;;;;;;;;;;;;;;;;;;;;;0CAuSL,OAAO;;;;oBAvS/B,KAAK;4BAAkB,MAAM;;;;;;;sCA8ST,OAAO;;;;;;;;;;QAYrC,+EAA+E;;QAG/E;;;;WAIG;uCAC4B,OAAO;;;QAYtC,4EAA4E;QAC5E;;;;;;;WAOG;;;;;;;;;kCA2CuB,OAAO;;;;;;;;;;;;;;;;CAiBpC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@buoy-gg/network",
3
- "version": "7.0.31",
3
+ "version": "7.0.33",
4
4
  "description": "In-app network inspector for React Native — requests, responses, timing & errors live, with GraphQL operation parsing. Part of Buoy devtools.",
5
5
  "main": "lib/commonjs/index.js",
6
6
  "module": "lib/module/index.js",
@@ -26,7 +26,7 @@
26
26
  ],
27
27
  "sideEffects": false,
28
28
  "dependencies": {
29
- "@buoy-gg/shared-ui": "^7.0.31"
29
+ "@buoy-gg/shared-ui": "^7.0.33"
30
30
  },
31
31
  "peerDependencies": {
32
32
  "react": "*",