@buoy-gg/network 7.0.33 → 7.0.35

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 (37) hide show
  1. package/lib/commonjs/network/components/NetworkCopySettingsView.js +12 -123
  2. package/lib/commonjs/network/components/NetworkEventDetailView.js +6 -6
  3. package/lib/commonjs/network/components/NetworkEventItemCompact.js +3 -3
  4. package/lib/commonjs/network/components/NetworkFilterViewV3.js +3 -3
  5. package/lib/commonjs/network/components/NetworkHeaderLive.js +2 -2
  6. package/lib/commonjs/network/components/NetworkListScreen.js +4 -10
  7. package/lib/commonjs/network/components/NetworkModal.js +18 -68
  8. package/lib/commonjs/network/components/NetworkOverrideEditor.js +1 -1
  9. package/lib/commonjs/network/components/NetworkOverridesScreen.js +1 -1
  10. package/lib/commonjs/network/components/NetworkSavedScreen.js +2 -5
  11. package/lib/commonjs/network/components/response-editor/Explorer.js +13 -13
  12. package/lib/commonjs/preset.js +6 -21
  13. package/lib/module/network/components/NetworkCopySettingsView.js +15 -126
  14. package/lib/module/network/components/NetworkEventDetailView.js +7 -7
  15. package/lib/module/network/components/NetworkEventItemCompact.js +4 -4
  16. package/lib/module/network/components/NetworkFilterViewV3.js +4 -4
  17. package/lib/module/network/components/NetworkHeaderLive.js +3 -3
  18. package/lib/module/network/components/NetworkListScreen.js +5 -11
  19. package/lib/module/network/components/NetworkModal.js +20 -70
  20. package/lib/module/network/components/NetworkOverrideEditor.js +2 -2
  21. package/lib/module/network/components/NetworkOverridesScreen.js +2 -2
  22. package/lib/module/network/components/NetworkSavedScreen.js +3 -6
  23. package/lib/module/network/components/response-editor/Explorer.js +14 -14
  24. package/lib/module/preset.js +6 -20
  25. package/lib/typescript/network/components/NetworkCopySettingsView.d.ts.map +1 -1
  26. package/lib/typescript/network/components/NetworkEventDetailView.d.ts.map +1 -1
  27. package/lib/typescript/network/components/NetworkEventItemCompact.d.ts.map +1 -1
  28. package/lib/typescript/network/components/NetworkFilterViewV3.d.ts.map +1 -1
  29. package/lib/typescript/network/components/NetworkHeaderLive.d.ts.map +1 -1
  30. package/lib/typescript/network/components/NetworkListScreen.d.ts.map +1 -1
  31. package/lib/typescript/network/components/NetworkModal.d.ts.map +1 -1
  32. package/lib/typescript/network/components/NetworkOverrideEditor.d.ts.map +1 -1
  33. package/lib/typescript/network/components/NetworkOverridesScreen.d.ts.map +1 -1
  34. package/lib/typescript/network/components/NetworkSavedScreen.d.ts.map +1 -1
  35. package/lib/typescript/preset.d.ts +2 -8
  36. package/lib/typescript/preset.d.ts.map +1 -1
  37. package/package.json +2 -2
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
 
3
- import { DynamicFilterView, macOSColors, FileText, FileCode, Link, Zap, Settings, Hash, Eye, ChevronDown, ChevronUp, AlertTriangle, ToolbarCopyButton, formatRelativeTime, useFeatureGate, ProFeatureBanner } from "@buoy-gg/shared-ui";
3
+ import { DynamicFilterView, macOSColors, FileText, FileCode, Link, Zap, Settings, Hash, Eye, ToolbarCopyButton, formatRelativeTime, useFeatureGate, ProFeatureBanner, ExportPreview, monoFont } from "@buoy-gg/shared-ui";
4
4
  import { DataViewer } from "@buoy-gg/shared-ui/dataViewer";
5
5
  import { useCallback, useMemo, useState } from "react";
6
- import { Text, StyleSheet, ScrollView, View, TouchableOpacity } from "react-native";
6
+ import { Text, StyleSheet, ScrollView, View } from "react-native";
7
7
  import { useTickEveryMinute } from "../hooks/useTickEveryMinute";
8
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
8
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
9
9
  export const DEFAULT_COPY_SETTINGS = {
10
10
  includeMethod: true,
11
11
  includeStatus: true,
@@ -541,62 +541,16 @@ export function NetworkCopySettingsView({
541
541
  const generatePreviewContent = useCallback(() => {
542
542
  const dataSource = hasLiveData ? events : [mockRequestData];
543
543
  const requestCount = dataSource.length;
544
-
545
- // Collapsed state - show summary with expand button
546
- if (!isPreviewExpanded) {
547
- const warningColor = sizeWarningLevel === 'danger' ? macOSColors.semantic.error : sizeWarningLevel === 'warning' ? macOSColors.semantic.warning : macOSColors.text.secondary;
548
- return /*#__PURE__*/_jsxs(View, {
549
- style: styles.collapsedPreview,
550
- children: [/*#__PURE__*/_jsx(TouchableOpacity, {
551
- style: styles.expandButton,
552
- onPress: () => setIsPreviewExpanded(true),
553
- children: /*#__PURE__*/_jsxs(View, {
554
- style: styles.expandButtonContent,
555
- children: [/*#__PURE__*/_jsx(Eye, {
556
- size: 16,
557
- color: macOSColors.semantic.info
558
- }), /*#__PURE__*/_jsxs(View, {
559
- style: styles.expandButtonTextContainer,
560
- children: [/*#__PURE__*/_jsx(Text, {
561
- style: styles.expandButtonTitle,
562
- children: "Show Preview"
563
- }), /*#__PURE__*/_jsxs(Text, {
564
- style: styles.expandButtonSubtitle,
565
- children: [requestCount, " request", requestCount !== 1 ? 's' : '', " \u2022 ~", formatBytes(estimatedSize)]
566
- })]
567
- }), /*#__PURE__*/_jsx(ChevronDown, {
568
- size: 16,
569
- color: macOSColors.text.muted
570
- })]
571
- })
572
- }), sizeWarningLevel !== 'none' && /*#__PURE__*/_jsxs(View, {
573
- style: [styles.sizeWarning, sizeWarningLevel === 'danger' && styles.sizeWarningDanger],
574
- children: [/*#__PURE__*/_jsx(AlertTriangle, {
575
- size: 12,
576
- color: warningColor
577
- }), /*#__PURE__*/_jsx(Text, {
578
- style: [styles.sizeWarningText, {
579
- color: warningColor
580
- }],
581
- children: sizeWarningLevel === 'danger' ? 'Very large payload - may cause performance issues' : 'Large payload - preview may be slow'
582
- })]
583
- })]
584
- });
585
- }
586
-
587
- // Expanded state - show collapse button + actual content
588
- return /*#__PURE__*/_jsxs(View, {
589
- children: [/*#__PURE__*/_jsxs(TouchableOpacity, {
590
- style: styles.collapseButton,
591
- onPress: () => setIsPreviewExpanded(false),
592
- children: [/*#__PURE__*/_jsx(Text, {
593
- style: styles.collapseButtonText,
594
- children: "Hide Preview"
595
- }), /*#__PURE__*/_jsx(ChevronUp, {
596
- size: 14,
597
- color: macOSColors.text.secondary
598
- })]
599
- }), generateExpandedPreviewContent()]
544
+ return /*#__PURE__*/_jsx(ExportPreview, {
545
+ expanded: isPreviewExpanded,
546
+ onExpandedChange: setIsPreviewExpanded,
547
+ summary: `${requestCount} request${requestCount !== 1 ? "s" : ""} • ~${formatBytes(estimatedSize)}`,
548
+ warningLevel: sizeWarningLevel,
549
+ warningText: {
550
+ warning: "Large payload - preview may be slow",
551
+ danger: "Very large payload - may cause performance issues"
552
+ },
553
+ renderBody: generateExpandedPreviewContent
600
554
  });
601
555
  }, [settings, hasLiveData, events, mockRequestData, isPreviewExpanded, estimatedSize, sizeWarningLevel, generateExpandedPreviewContent]);
602
556
 
@@ -767,13 +721,13 @@ const styles = StyleSheet.create({
767
721
  maxHeight: 300
768
722
  },
769
723
  markdownText: {
770
- fontFamily: "monospace",
724
+ fontFamily: monoFont,
771
725
  fontSize: 11,
772
726
  color: macOSColors.text.primary,
773
727
  lineHeight: 18
774
728
  },
775
729
  plaintextText: {
776
- fontFamily: "monospace",
730
+ fontFamily: monoFont,
777
731
  fontSize: 11,
778
732
  color: macOSColors.text.primary,
779
733
  lineHeight: 18
@@ -785,71 +739,6 @@ const styles = StyleSheet.create({
785
739
  marginRight: 8
786
740
  },
787
741
  // Collapsible preview styles
788
- collapsedPreview: {
789
- gap: 8
790
- },
791
- expandButton: {
792
- backgroundColor: macOSColors.background.input,
793
- borderRadius: 8,
794
- borderWidth: 1,
795
- borderColor: macOSColors.border.default,
796
- padding: 12
797
- },
798
- expandButtonContent: {
799
- flexDirection: 'row',
800
- alignItems: 'center',
801
- gap: 10
802
- },
803
- expandButtonTextContainer: {
804
- flex: 1
805
- },
806
- expandButtonTitle: {
807
- fontSize: 13,
808
- fontWeight: '600',
809
- color: macOSColors.text.primary
810
- },
811
- expandButtonSubtitle: {
812
- fontSize: 11,
813
- color: macOSColors.text.secondary,
814
- marginTop: 2
815
- },
816
- collapseButton: {
817
- flexDirection: 'row',
818
- alignItems: 'center',
819
- justifyContent: 'center',
820
- gap: 6,
821
- paddingVertical: 8,
822
- marginBottom: 8,
823
- backgroundColor: macOSColors.background.hover,
824
- borderRadius: 6,
825
- borderWidth: 1,
826
- borderColor: macOSColors.border.default
827
- },
828
- collapseButtonText: {
829
- fontSize: 12,
830
- fontWeight: '500',
831
- color: macOSColors.text.secondary
832
- },
833
- sizeWarning: {
834
- flexDirection: 'row',
835
- alignItems: 'center',
836
- gap: 6,
837
- paddingHorizontal: 10,
838
- paddingVertical: 6,
839
- backgroundColor: macOSColors.semantic.warningBackground,
840
- borderRadius: 6,
841
- borderWidth: 1,
842
- borderColor: macOSColors.semantic.warning + '30'
843
- },
844
- sizeWarningDanger: {
845
- backgroundColor: macOSColors.semantic.errorBackground,
846
- borderColor: macOSColors.semantic.error + '30'
847
- },
848
- sizeWarningText: {
849
- fontSize: 11,
850
- fontWeight: '500',
851
- flex: 1
852
- },
853
742
  // Gated container styles for free users
854
743
  gatedContainer: {
855
744
  flex: 1,
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { useState, useEffect, useMemo, memo } from "react";
4
4
  import { View, Text, StyleSheet, ScrollView, TouchableOpacity } from "react-native";
5
- import { Clock, Upload, Download, AlertCircle, ChevronDown, ChevronUp, Lock, Unlock, FileJson, Filter, Globe, Link, Copy, FlaskConical, InlineCopyButton, macOSColors, night, useFeatureGate, UpgradeModal } from "@buoy-gg/shared-ui";
5
+ import { Clock, Upload, Download, AlertCircle, ChevronDown, ChevronUp, Lock, Unlock, FileJson, Filter, Globe, Link, Copy, FlaskConical, InlineCopyButton, macOSColors, night, useFeatureGate, UpgradeModal, monoFont } from "@buoy-gg/shared-ui";
6
6
  import { formatBytes, formatDuration, formatHttpStatus } from "../utils/formatting";
7
7
  import { formatRelativeTime } from "@buoy-gg/shared-ui";
8
8
  import { DataViewer } from "@buoy-gg/shared-ui/dataViewer";
@@ -869,12 +869,12 @@ const styles = StyleSheet.create({
869
869
  urlPath: {
870
870
  color: night.color.textSecondary,
871
871
  fontSize: 11,
872
- fontFamily: "monospace"
872
+ fontFamily: monoFont
873
873
  },
874
874
  urlQueryString: {
875
875
  color: night.color.info,
876
876
  fontSize: 11,
877
- fontFamily: "monospace"
877
+ fontFamily: monoFont
878
878
  },
879
879
  // Query Parameters - Collapsible section
880
880
  queryParamsCollapsible: {
@@ -951,7 +951,7 @@ const styles = StyleSheet.create({
951
951
  sizeValue: {
952
952
  color: night.color.info,
953
953
  fontSize: 10,
954
- fontFamily: "monospace",
954
+ fontFamily: monoFont,
955
955
  fontWeight: "600"
956
956
  },
957
957
  /* ---- Timing phases ---- */
@@ -996,7 +996,7 @@ const styles = StyleSheet.create({
996
996
  width: 72,
997
997
  textAlign: "right",
998
998
  fontSize: 12,
999
- fontFamily: "monospace",
999
+ fontFamily: monoFont,
1000
1000
  color: night.color.text
1001
1001
  },
1002
1002
  // Collapsible section styles
@@ -1032,7 +1032,7 @@ const styles = StyleSheet.create({
1032
1032
  collapsibleCount: {
1033
1033
  color: night.color.textTertiary,
1034
1034
  fontSize: 11.5,
1035
- fontFamily: "monospace"
1035
+ fontFamily: monoFont
1036
1036
  },
1037
1037
  collapsibleContent: {
1038
1038
  padding: 12
@@ -1106,7 +1106,7 @@ const styles = StyleSheet.create({
1106
1106
  filterOptionValue: {
1107
1107
  color: night.color.text,
1108
1108
  fontSize: 13,
1109
- fontFamily: "monospace"
1109
+ fontFamily: monoFont
1110
1110
  },
1111
1111
  filterToggle: {
1112
1112
  paddingHorizontal: 10,
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { memo } from "react";
4
4
  import { StyleSheet, View, Text } from "react-native";
5
- import { ChevronRight, Upload, Download, Clock, AlertCircle, Bookmark, FlaskConical, Pin, DevToolsCard, MethodBadge, TypeBadge, night, macOSColors } from "@buoy-gg/shared-ui";
5
+ import { ChevronRight, Upload, Download, Clock, AlertCircle, Bookmark, FlaskConical, Pin, DevToolsCard, MethodBadge, TypeBadge, night, macOSColors, monoFont } from "@buoy-gg/shared-ui";
6
6
  import { formatBytes, formatDuration } from "../utils/formatting";
7
7
  import { formatRelativeTime } from "@buoy-gg/shared-ui";
8
8
  import { useTickEveryMinute } from "../hooks/useTickEveryMinute";
@@ -316,7 +316,7 @@ const styles = StyleSheet.create({
316
316
  fontSize: 12,
317
317
  color: night.color.text,
318
318
  lineHeight: 16,
319
- fontFamily: "monospace"
319
+ fontFamily: monoFont
320
320
  },
321
321
  rightSection: {
322
322
  flexDirection: "row",
@@ -331,7 +331,7 @@ const styles = StyleSheet.create({
331
331
  bottomRightText: {
332
332
  fontSize: 9,
333
333
  color: night.color.textTertiary,
334
- fontFamily: "monospace"
334
+ fontFamily: monoFont
335
335
  },
336
336
  statusBadge: {
337
337
  paddingHorizontal: 4,
@@ -387,7 +387,7 @@ const styles = StyleSheet.create({
387
387
  sizeText: {
388
388
  fontSize: 8,
389
389
  color: night.color.textSecondary,
390
- fontFamily: "monospace"
390
+ fontFamily: monoFont
391
391
  },
392
392
  clientText: {
393
393
  fontSize: 8,
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- import { CheckCircle, Clock, DynamicFilterView, Film, FileJson, FileText, Filter, Globe, Image, macOSColors, night, Music, XCircle } from "@buoy-gg/shared-ui";
3
+ import { CheckCircle, Clock, DynamicFilterView, Film, FileJson, FileText, Filter, Globe, Image, macOSColors, night, Music, XCircle, monoFont } from "@buoy-gg/shared-ui";
4
4
  import { useCallback, useMemo, useState } from "react";
5
5
  import { StyleSheet, Text, TouchableOpacity, View } from "react-native";
6
6
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
@@ -384,7 +384,7 @@ const styles = StyleSheet.create({
384
384
  },
385
385
  modeBadgeText: {
386
386
  fontSize: 9,
387
- fontFamily: "monospace",
387
+ fontFamily: monoFont,
388
388
  fontWeight: "700",
389
389
  letterSpacing: 0.5
390
390
  },
@@ -398,7 +398,7 @@ const styles = StyleSheet.create({
398
398
  fontSize: 11,
399
399
  fontWeight: "600",
400
400
  color: night.color.textSecondary,
401
- fontFamily: "monospace",
401
+ fontFamily: monoFont,
402
402
  letterSpacing: 0.3
403
403
  },
404
404
  modeToggleGroup: {
@@ -424,7 +424,7 @@ const styles = StyleSheet.create({
424
424
  fontSize: 11,
425
425
  fontWeight: "700",
426
426
  color: night.color.textSecondary,
427
- fontFamily: "monospace",
427
+ fontFamily: monoFont,
428
428
  letterSpacing: 0.3
429
429
  },
430
430
  modeToggleButtonTextActive: {
@@ -19,7 +19,7 @@
19
19
  */
20
20
 
21
21
  import { StyleSheet, Text, TouchableOpacity, View } from "react-native";
22
- import { Bookmark, CheckCircle, XCircle, Clock, Copy, Pin, Trash2, CopyButton, macOSColors, night, useLimit } from "@buoy-gg/shared-ui";
22
+ import { Bookmark, CheckCircle, XCircle, Clock, Copy, Pin, Trash2, CopyButton, macOSColors, night, useLimit, monoFont } from "@buoy-gg/shared-ui";
23
23
  import { networkEventStore } from "../utils/networkEventStore";
24
24
  import { flagsForEventId, networkSavedStore, MAX_PINNED, MAX_SAVED } from "../utils/networkSavedStore";
25
25
  import { useNetworkSaved } from "../hooks/useNetworkSaved";
@@ -322,7 +322,7 @@ const styles = StyleSheet.create({
322
322
  headerChipValue: {
323
323
  fontSize: 12,
324
324
  fontWeight: "600",
325
- fontFamily: "monospace"
325
+ fontFamily: monoFont
326
326
  },
327
327
  headerActionButton: {
328
328
  width: 32,
@@ -361,6 +361,6 @@ const styles = StyleSheet.create({
361
361
  color: night.color.onAccent,
362
362
  fontSize: 9,
363
363
  fontWeight: "700",
364
- fontFamily: "monospace"
364
+ fontFamily: monoFont
365
365
  }
366
366
  });
@@ -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, Pin, Power, macOSColors, ToolEmptyState, resolveListEmptyState } from "@buoy-gg/shared-ui";
17
+ import { FlaskConical, Pin, Power, macOSColors, ToolEmptyState, resolveListEmptyState, EVENT_LIST_PRESET, monoFont } from "@buoy-gg/shared-ui";
18
18
  import { NetworkEventItemCompact } from "./NetworkEventItemCompact";
19
19
  import { NetworkUpgradeBanner } from "./NetworkUpgradeBanner";
20
20
  import { useNetworkEventList } from "../hooks/useNetworkEventList";
@@ -278,10 +278,8 @@ export function NetworkListScreen({
278
278
  showsVerticalScrollIndicator: true
279
279
  // Clipped cells falsely fail Detox's hittability check (known
280
280
  // RN+Detox issue), so e2e bundles (Metro started with
281
- // EXPO_PUBLIC_E2E=1) turn clipping off. Inlined at bundle time;
282
- // guarded so a non-inlining bundler keeps the prod behavior.
281
+ // EXPO_PUBLIC_E2E=1) turn clipping off — see EVENT_LIST_PRESET.
283
282
  ,
284
- removeClippedSubviews: !(typeof process !== "undefined" && process.env?.EXPO_PUBLIC_E2E),
285
283
  onEndReachedThreshold: 0.8
286
284
  // The list OWNS scrolling (NetworkModal passes
287
285
  // disableScrollWrapper while this screen is visible) so FlatList
@@ -290,18 +288,14 @@ export function NetworkListScreen({
290
288
  // rows: at the store's 500-event cap that measured 17 JS FPS /
291
289
  // 133% CPU / 1.4GB vs ~53 JS FPS / 52% / 360MB virtualized
292
290
  // (buoy-optimize batch 2026-07-06, batch-1783396983529-6l7w).
293
- // Window/batch values are the batch's "tuned" winner.
291
+ // Window/batch values are the batch's "tuned" winner (EVENT_LIST_PRESET).
294
292
  ,
295
293
  scrollEnabled: true,
296
- initialNumToRender: 12,
297
- maxToRenderPerBatch: 8,
298
- windowSize: 5,
299
- updateCellsBatchingPeriod: 50
294
+ ...EVENT_LIST_PRESET,
300
295
  // Saving a request from the detail view changes a row's glyph
301
296
  // without changing `data`. VirtualizedList is a PureComponent, so
302
297
  // the Set has to be declared as a re-render marker rather than
303
298
  // relying on `renderItem` getting a fresh identity.
304
- ,
305
299
  extraData: savedLiveIds,
306
300
  "sentry-label": "ignore network events list",
307
301
  ListFooterComponent: renderListFooter
@@ -373,7 +367,7 @@ const styles = StyleSheet.create({
373
367
  fontSize: 10,
374
368
  fontWeight: "700",
375
369
  letterSpacing: 0.6,
376
- fontFamily: "monospace"
370
+ fontFamily: monoFont
377
371
  },
378
372
  pinnedClear: {
379
373
  paddingHorizontal: 6,
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
 
3
3
  import { useState, useRef, useEffect, useCallback } from "react";
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, windowDragProps } from "@buoy-gg/shared-ui";
4
+ import { View, StyleSheet, TouchableOpacity } from "react-native";
5
+ import { Search, Filter, Bookmark, 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";
@@ -447,53 +447,24 @@ function NetworkModalInner({
447
447
  onBack: onBack
448
448
  }), /*#__PURE__*/_jsx(ModalHeader.Content, {
449
449
  title: "",
450
- children: isSearchActive ? /*#__PURE__*/_jsxs(View, {
451
- style: styles.headerSearchContainer,
452
- children: [/*#__PURE__*/_jsx(Search, {
453
- size: 14,
454
- color: night.color.textSecondary
455
- }), /*#__PURE__*/_jsx(TextInput, {
456
- ref: searchInputRef,
457
- style: styles.headerSearchInput,
458
- placeholder: "Search URL, method, operation, error...",
459
- placeholderTextColor: night.color.placeholder,
460
- value: searchText,
461
- onChangeText: handleSearch,
462
- onSubmitEditing: () => setIsSearchActive(false),
463
- onBlur: () => {
464
- if (!clearPressRef.current) setIsSearchActive(false);
465
- },
466
- "sentry-label": "ignore network search header",
467
- accessibilityLabel: "Search network requests",
468
- testID: "buoy-network-search-input",
469
- autoCapitalize: "none",
470
- autoCorrect: false,
471
- returnKeyType: "search"
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
- },
483
- onPress: () => {
484
- handleSearch("");
485
- setIsSearchActive(false);
486
- },
487
- "sentry-label": "ignore clear search header",
488
- style: styles.headerSearchClear,
489
- accessibilityRole: "button",
490
- accessibilityLabel: "Clear search",
491
- testID: "buoy-network-search-clear",
492
- children: /*#__PURE__*/_jsx(X, {
493
- size: 14,
494
- color: night.color.textSecondary
495
- })
496
- }) : null]
450
+ children: isSearchActive ? /*#__PURE__*/_jsx(ModalHeader.Search, {
451
+ value: searchText,
452
+ onChangeText: handleSearch,
453
+ onCancel: () => {
454
+ handleSearch("");
455
+ setIsSearchActive(false);
456
+ },
457
+ onDismiss: () => setIsSearchActive(false),
458
+ dismissOnBlur: true,
459
+ clearOnlyWhenText: true,
460
+ placeholder: "Search URL, method, operation, error...",
461
+ accessibilityLabel: "Search network requests",
462
+ iconSize: 14,
463
+ testID: "buoy-network-search-input",
464
+ clearTestID: "buoy-network-search-clear",
465
+ inputProps: {
466
+ "sentry-label": "ignore network search header"
467
+ }
497
468
  }) : /*#__PURE__*/_jsx(NetworkHeaderBadges, {
498
469
  activeStatus: filter.status,
499
470
  onToggleStatus: toggleStatusFilter,
@@ -738,27 +709,6 @@ const styles = StyleSheet.create({
738
709
  },
739
710
  // Night chrome — the header is glass over the star field, so the search
740
711
  // field and action chips sit on the Everlights dark-glass fill.
741
- headerSearchContainer: {
742
- flexDirection: "row",
743
- alignItems: "center",
744
- backgroundColor: night.color.surfaceElevated,
745
- borderRadius: night.radius.row,
746
- borderWidth: 1,
747
- borderColor: night.color.border,
748
- paddingHorizontal: 12,
749
- paddingVertical: 5
750
- },
751
- headerSearchInput: {
752
- flex: 1,
753
- color: night.color.text,
754
- fontSize: 13,
755
- marginLeft: 6,
756
- paddingVertical: 2
757
- },
758
- headerSearchClear: {
759
- marginLeft: 6,
760
- padding: 4
761
- },
762
712
  menuCopyRow: {
763
713
  paddingHorizontal: 6
764
714
  },
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { useMemo, useState } from "react";
4
4
  import { ScrollView, StyleSheet, Text, TextInput, TouchableOpacity, View } from "react-native";
5
- import { ChevronDown, ChevronRight, macOSColors, useSafeAreaInsets } from "@buoy-gg/shared-ui";
5
+ import { ChevronDown, ChevronRight, macOSColors, useSafeAreaInsets, monoFont } from "@buoy-gg/shared-ui";
6
6
  import Explorer from "./response-editor/Explorer";
7
7
  import { ResponseEditorContext } from "./response-editor/editorContext";
8
8
  import { NetworkNumberPrompt } from "./NetworkNumberPrompt";
@@ -678,7 +678,7 @@ const styles = StyleSheet.create({
678
678
  paddingVertical: 8,
679
679
  color: macOSColors.text.primary,
680
680
  fontSize: 12,
681
- fontFamily: "monospace",
681
+ fontFamily: monoFont,
682
682
  minHeight: 40
683
683
  },
684
684
  bodyInput: {
@@ -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, MethodBadge, Plus, Trash2, macOSColors, useLimit } from "@buoy-gg/shared-ui";
5
+ import { AlertCircle, AlertTriangle, DevToolsCard, EmptyState, MethodBadge, Plus, Trash2, macOSColors, useLimit, monoFont } 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";
@@ -489,7 +489,7 @@ const styles = StyleSheet.create({
489
489
  fontSize: 12,
490
490
  color: macOSColors.text.primary,
491
491
  lineHeight: 16,
492
- fontFamily: "monospace"
492
+ fontFamily: monoFont
493
493
  },
494
494
  urlTextOff: {
495
495
  color: macOSColors.text.muted
@@ -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, ToolEmptyState, resolveListEmptyState } from "@buoy-gg/shared-ui";
22
+ import { Bookmark, CopyButton, Search, macOSColors, useLimit, ToolEmptyState, resolveListEmptyState, EVENT_LIST_PRESET, monoFont } from "@buoy-gg/shared-ui";
23
23
  import { NetworkEventItemCompact } from "./NetworkEventItemCompact";
24
24
  import { NetworkUpgradeBanner } from "./NetworkUpgradeBanner";
25
25
  import { generateNetworkCopyText } from "../utils/generateNetworkCopyText";
@@ -150,11 +150,8 @@ export function NetworkSavedScreen({
150
150
  keyExtractor: keyExtractor,
151
151
  contentContainerStyle: styles.listContent,
152
152
  showsVerticalScrollIndicator: true,
153
- removeClippedSubviews: true,
154
153
  scrollEnabled: true,
155
- initialNumToRender: 12,
156
- maxToRenderPerBatch: 8,
157
- windowSize: 5,
154
+ ...EVENT_LIST_PRESET,
158
155
  extraData: pinnedLiveIds,
159
156
  "sentry-label": "ignore saved requests list",
160
157
  ListFooterComponent: renderListFooter
@@ -180,7 +177,7 @@ const styles = StyleSheet.create({
180
177
  fontSize: 10,
181
178
  fontWeight: "700",
182
179
  letterSpacing: 0.6,
183
- fontFamily: "monospace"
180
+ fontFamily: monoFont
184
181
  },
185
182
  toolbarButton: {
186
183
  width: 26,