@buoy-gg/highlight-updates 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 (31) hide show
  1. package/lib/commonjs/highlight-updates/HighlightUpdatesOverlay.js +1 -1
  2. package/lib/commonjs/highlight-updates/components/HighlightFilterView.js +6 -6
  3. package/lib/commonjs/highlight-updates/components/IdentifierBadge.js +2 -2
  4. package/lib/commonjs/highlight-updates/components/ModalHeaderContent.js +17 -56
  5. package/lib/commonjs/highlight-updates/components/RenderCauseBadge.js +7 -7
  6. package/lib/commonjs/highlight-updates/components/RenderDetailView.js +6 -6
  7. package/lib/commonjs/highlight-updates/components/RenderHistoryViewer.js +8 -8
  8. package/lib/commonjs/highlight-updates/components/RenderListItem.js +2 -2
  9. package/lib/commonjs/highlight-updates/components/RendersCopySettingsView.js +29 -136
  10. package/lib/commonjs/highlight-updates/components/StatsDisplay.js +1 -1
  11. package/lib/commonjs/highlight-updates/utils/copySettingsStorage.js +11 -28
  12. package/lib/module/highlight-updates/HighlightUpdatesOverlay.js +2 -2
  13. package/lib/module/highlight-updates/components/HighlightFilterView.js +7 -7
  14. package/lib/module/highlight-updates/components/IdentifierBadge.js +3 -3
  15. package/lib/module/highlight-updates/components/ModalHeaderContent.js +19 -58
  16. package/lib/module/highlight-updates/components/RenderCauseBadge.js +8 -8
  17. package/lib/module/highlight-updates/components/RenderDetailView.js +7 -7
  18. package/lib/module/highlight-updates/components/RenderHistoryViewer.js +9 -9
  19. package/lib/module/highlight-updates/components/RenderListItem.js +3 -3
  20. package/lib/module/highlight-updates/components/RendersCopySettingsView.js +32 -139
  21. package/lib/module/highlight-updates/components/StatsDisplay.js +2 -2
  22. package/lib/module/highlight-updates/utils/copySettingsStorage.js +12 -29
  23. package/lib/typescript/highlight-updates/components/HighlightFilterView.d.ts.map +1 -1
  24. package/lib/typescript/highlight-updates/components/IdentifierBadge.d.ts.map +1 -1
  25. package/lib/typescript/highlight-updates/components/ModalHeaderContent.d.ts.map +1 -1
  26. package/lib/typescript/highlight-updates/components/RenderDetailView.d.ts.map +1 -1
  27. package/lib/typescript/highlight-updates/components/RenderHistoryViewer.d.ts.map +1 -1
  28. package/lib/typescript/highlight-updates/components/RendersCopySettingsView.d.ts.map +1 -1
  29. package/lib/typescript/highlight-updates/utils/copySettingsStorage.d.ts +2 -1
  30. package/lib/typescript/highlight-updates/utils/copySettingsStorage.d.ts.map +1 -1
  31. package/package.json +7 -7
@@ -10,7 +10,7 @@
10
10
 
11
11
  import React, { useState, useCallback } from "react";
12
12
  import { View, Text, TouchableOpacity, TextInput, StyleSheet, ScrollView, Modal, Pressable, Switch } from "react-native";
13
- import { Eye, Filter, Plus, X, Box, Settings, Hash, SectionHeader, night } from "@buoy-gg/shared-ui";
13
+ import { Eye, Filter, Plus, X, Box, Settings, Hash, SectionHeader, night, monoFont } from "@buoy-gg/shared-ui";
14
14
  import { IdentifierBadge, IDENTIFIER_CONFIG } from "./IdentifierBadge";
15
15
  import { detectedItemTestID, patternChipTestID, settingTestID } from "../utils/testIDs";
16
16
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
@@ -1095,7 +1095,7 @@ const styles = StyleSheet.create({
1095
1095
  patternChipValue: {
1096
1096
  fontSize: 11,
1097
1097
  color: night.color.text,
1098
- fontFamily: "monospace",
1098
+ fontFamily: monoFont,
1099
1099
  flexShrink: 1
1100
1100
  },
1101
1101
  patternChipX: {
@@ -1238,7 +1238,7 @@ const styles = StyleSheet.create({
1238
1238
  detectedItemText: {
1239
1239
  fontSize: 11,
1240
1240
  color: night.color.text,
1241
- fontFamily: "monospace"
1241
+ fontFamily: monoFont
1242
1242
  },
1243
1243
  emptyText: {
1244
1244
  fontSize: 11,
@@ -1256,7 +1256,7 @@ const styles = StyleSheet.create({
1256
1256
  fontSize: 11,
1257
1257
  color: night.color.textTertiary,
1258
1258
  lineHeight: 18,
1259
- fontFamily: "monospace"
1259
+ fontFamily: monoFont
1260
1260
  },
1261
1261
  howItWorksBold: {
1262
1262
  fontWeight: "700",
@@ -1356,7 +1356,7 @@ const styles = StyleSheet.create({
1356
1356
  fontSize: 12,
1357
1357
  fontWeight: "700",
1358
1358
  color: night.color.textTertiary,
1359
- fontFamily: "monospace"
1359
+ fontFamily: monoFont
1360
1360
  },
1361
1361
  settingDescription: {
1362
1362
  fontSize: 11,
@@ -1399,7 +1399,7 @@ const styles = StyleSheet.create({
1399
1399
  fontSize: 12,
1400
1400
  fontWeight: "500",
1401
1401
  color: night.color.textSecondary,
1402
- fontFamily: "monospace"
1402
+ fontFamily: monoFont
1403
1403
  },
1404
1404
  batchSizePresetTextActive: {
1405
1405
  color: night.color.textTertiary,
@@ -1438,7 +1438,7 @@ const styles = StyleSheet.create({
1438
1438
  fontSize: 14,
1439
1439
  fontWeight: "600",
1440
1440
  color: night.color.text,
1441
- fontFamily: "monospace",
1441
+ fontFamily: monoFont,
1442
1442
  textAlign: "center"
1443
1443
  },
1444
1444
  renderCountSeparator: {
@@ -9,7 +9,7 @@
9
9
 
10
10
  import React from "react";
11
11
  import { View, Text, StyleSheet } from "react-native";
12
- import { Box, Hash, Layers, Eye, Search, FileCode, buoyColors, night } from "@buoy-gg/shared-ui";
12
+ import { Box, Hash, Layers, Eye, Search, FileCode, buoyColors, night, monoFont } from "@buoy-gg/shared-ui";
13
13
 
14
14
  // All possible identifier types
15
15
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
@@ -198,7 +198,7 @@ const styles = StyleSheet.create({
198
198
  value: {
199
199
  fontSize: 12,
200
200
  color: night.color.text,
201
- fontFamily: "monospace",
201
+ fontFamily: monoFont,
202
202
  flex: 1
203
203
  },
204
204
  valueCompact: {
@@ -231,7 +231,7 @@ const styles = StyleSheet.create({
231
231
  // Value only
232
232
  valueOnly: {
233
233
  fontSize: 12,
234
- fontFamily: "monospace"
234
+ fontFamily: monoFont
235
235
  },
236
236
  valueOnlyCompact: {
237
237
  fontSize: 11
@@ -10,8 +10,8 @@
10
10
  */
11
11
 
12
12
  import React, { memo } from "react";
13
- import { View, TouchableOpacity, TextInput, StyleSheet } from "react-native";
14
- import { Trash2, Search, Filter, X, Pause, Copy, ModalHeader, TabSelector, night, PowerToggleButton } from "@buoy-gg/shared-ui";
13
+ import { TouchableOpacity, StyleSheet } from "react-native";
14
+ import { Trash2, Search, Filter, Pause, Copy, ModalHeader, TabSelector, night, PowerToggleButton } from "@buoy-gg/shared-ui";
15
15
  import { StatsDisplay } from "./StatsDisplay";
16
16
 
17
17
  // ============================================================================
@@ -25,41 +25,23 @@ const SearchSectionInner = /*#__PURE__*/memo(function SearchSection({
25
25
  onSearchClose
26
26
  }) {
27
27
  if (!isActive) return null;
28
- return /*#__PURE__*/_jsxs(View, {
29
- nativeID: "__rn_buoy__search-container",
30
- testID: "buoy-highlight-search-container",
31
- style: styles.headerSearchContainer,
32
- children: [/*#__PURE__*/_jsx(Search, {
33
- size: 14,
34
- color: night.color.textSecondary
35
- }), /*#__PURE__*/_jsx(TextInput, {
36
- testID: "buoy-highlight-search-field",
37
- style: styles.headerSearchInput,
38
- placeholder: "Search testID, nativeID, component...",
39
- placeholderTextColor: night.color.placeholder,
40
- value: searchText,
41
- onChangeText: onSearchChange,
42
- onSubmitEditing: onSearchClose,
43
- onBlur: onSearchClose,
44
- accessibilityLabel: "Search renders",
45
- autoCapitalize: "none",
46
- autoCorrect: false,
47
- returnKeyType: "search",
48
- autoFocus: true
49
- }), searchText.length > 0 ? /*#__PURE__*/_jsx(TouchableOpacity, {
50
- testID: "buoy-highlight-search-clear",
51
- accessibilityRole: "button",
52
- accessibilityLabel: "Clear search",
53
- onPress: () => {
54
- onSearchChange("");
55
- onSearchClose();
56
- },
57
- style: styles.headerSearchClear,
58
- children: /*#__PURE__*/_jsx(X, {
59
- size: 14,
60
- color: night.color.textSecondary
61
- })
62
- }) : null]
28
+ return /*#__PURE__*/_jsx(ModalHeader.Search, {
29
+ value: searchText,
30
+ onChangeText: onSearchChange,
31
+ onCancel: () => {
32
+ onSearchChange("");
33
+ onSearchClose();
34
+ },
35
+ onDismiss: onSearchClose,
36
+ dismissOnBlur: true,
37
+ clearOnlyWhenText: true,
38
+ placeholder: "Search testID, nativeID, component...",
39
+ accessibilityLabel: "Search renders",
40
+ iconSize: 14,
41
+ testID: "buoy-highlight-search-field",
42
+ containerTestID: "buoy-highlight-search-container",
43
+ containerNativeID: "__rn_buoy__search-container",
44
+ clearTestID: "buoy-highlight-search-clear"
63
45
  });
64
46
  });
65
47
  export const SearchSection = SearchSectionInner;
@@ -282,27 +264,6 @@ export const CopySettingsViewHeader = /*#__PURE__*/memo(function CopySettingsVie
282
264
  // ============================================================================
283
265
 
284
266
  const styles = StyleSheet.create({
285
- headerSearchContainer: {
286
- flexDirection: "row",
287
- alignItems: "center",
288
- backgroundColor: night.color.surfaceElevated,
289
- borderRadius: 10,
290
- borderWidth: 1,
291
- borderColor: night.color.border,
292
- paddingHorizontal: 12,
293
- paddingVertical: 5
294
- },
295
- headerSearchInput: {
296
- flex: 1,
297
- color: night.color.text,
298
- fontSize: 13,
299
- marginLeft: 6,
300
- paddingVertical: 2
301
- },
302
- headerSearchClear: {
303
- marginLeft: 6,
304
- padding: 4
305
- },
306
267
  headerActionButton: {
307
268
  width: 32,
308
269
  height: 32,
@@ -13,7 +13,7 @@
13
13
 
14
14
  import React from "react";
15
15
  import { View, Text, StyleSheet } from "react-native";
16
- import { buoyColors, night } from "@buoy-gg/shared-ui";
16
+ import { buoyColors, night, monoFont } from "@buoy-gg/shared-ui";
17
17
 
18
18
  // Badge configuration for each cause type
19
19
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
@@ -367,7 +367,7 @@ const styles = StyleSheet.create({
367
367
  keysText: {
368
368
  fontSize: 11,
369
369
  color: night.color.textSecondary,
370
- fontFamily: "monospace",
370
+ fontFamily: monoFont,
371
371
  flex: 1
372
372
  },
373
373
  keysTextCompact: {
@@ -393,7 +393,7 @@ const styles = StyleSheet.create({
393
393
  fontSize: 11,
394
394
  fontWeight: "600",
395
395
  color: night.color.text,
396
- fontFamily: "monospace"
396
+ fontFamily: monoFont
397
397
  },
398
398
  twoLevelText: {
399
399
  fontSize: 11,
@@ -402,7 +402,7 @@ const styles = StyleSheet.create({
402
402
  twoLevelKeys: {
403
403
  fontSize: 10,
404
404
  color: night.color.textSecondary,
405
- fontFamily: "monospace"
405
+ fontFamily: monoFont
406
406
  },
407
407
  // Enhanced cause display styles (Phase 5)
408
408
  enhancedContainer: {
@@ -418,7 +418,7 @@ const styles = StyleSheet.create({
418
418
  fontSize: 14,
419
419
  fontWeight: "700",
420
420
  color: night.color.text,
421
- fontFamily: "monospace"
421
+ fontFamily: monoFont
422
422
  },
423
423
  enhancedNativeTag: {
424
424
  // Inset display chip — the night track color.
@@ -431,7 +431,7 @@ const styles = StyleSheet.create({
431
431
  fontSize: 10,
432
432
  fontWeight: "600",
433
433
  color: night.color.textTertiary,
434
- fontFamily: "monospace"
434
+ fontFamily: monoFont
435
435
  },
436
436
  enhancedFlowContainer: {
437
437
  flexDirection: "row",
@@ -480,13 +480,13 @@ const styles = StyleSheet.create({
480
480
  enhancedChangeIcon: {
481
481
  fontSize: 12,
482
482
  color: night.color.warning,
483
- fontFamily: "monospace",
483
+ fontFamily: monoFont,
484
484
  width: 16
485
485
  },
486
486
  enhancedChangeText: {
487
487
  fontSize: 12,
488
488
  color: night.color.text,
489
- fontFamily: "monospace",
489
+ fontFamily: monoFont,
490
490
  flex: 1
491
491
  },
492
492
  enhancedNoChanges: {
@@ -14,7 +14,7 @@
14
14
 
15
15
  import React, { useMemo, useState, useCallback } from "react";
16
16
  import { View, Text, TouchableOpacity, ScrollView, StyleSheet } from "react-native";
17
- import { CopyButton, formatRelativeTime, PlusIcon, MinusIcon, EventStepperFooter, Lock, night, useLimit } from "@buoy-gg/shared-ui";
17
+ import { CopyButton, formatRelativeTime, PlusIcon, MinusIcon, EventStepperFooter, Lock, night, useLimit, monoFont } from "@buoy-gg/shared-ui";
18
18
  import { TreeDiffViewer } from "@buoy-gg/shared-ui/dataViewer";
19
19
  import { CAUSE_CONFIG, COMPONENT_CAUSE_CONFIG } from "./RenderCauseBadge";
20
20
  import { generateSingleComponentExport } from "../utils/rendersExportFormatter";
@@ -573,7 +573,7 @@ const styles = StyleSheet.create({
573
573
  fontSize: 11,
574
574
  fontWeight: "600",
575
575
  color: night.color.textTertiary,
576
- fontFamily: "monospace"
576
+ fontFamily: monoFont
577
577
  },
578
578
  // Answer Card
579
579
  answerCard: {
@@ -628,7 +628,7 @@ const styles = StyleSheet.create({
628
628
  propChangeText: {
629
629
  fontSize: 11,
630
630
  color: night.color.text,
631
- fontFamily: "monospace"
631
+ fontFamily: monoFont
632
632
  },
633
633
  // Details Section
634
634
  detailsSection: {
@@ -664,7 +664,7 @@ const styles = StyleSheet.create({
664
664
  detailValue: {
665
665
  fontSize: 12,
666
666
  color: night.color.text,
667
- fontFamily: "monospace",
667
+ fontFamily: monoFont,
668
668
  flex: 1
669
669
  },
670
670
  // Stats Row
@@ -687,7 +687,7 @@ const styles = StyleSheet.create({
687
687
  fontSize: 16,
688
688
  fontWeight: "700",
689
689
  color: night.color.text,
690
- fontFamily: "monospace"
690
+ fontFamily: monoFont
691
691
  },
692
692
  statLabel: {
693
693
  fontSize: 10,
@@ -727,7 +727,7 @@ const styles = StyleSheet.create({
727
727
  fontSize: 12,
728
728
  fontWeight: "600",
729
729
  color: night.color.text,
730
- fontFamily: "monospace"
730
+ fontFamily: monoFont
731
731
  },
732
732
  // Quick Actions Section
733
733
  quickActionsSection: {
@@ -776,7 +776,7 @@ const styles = StyleSheet.create({
776
776
  filterOptionValue: {
777
777
  fontSize: 12,
778
778
  color: night.color.text,
779
- fontFamily: "monospace",
779
+ fontFamily: monoFont,
780
780
  flex: 1
781
781
  },
782
782
  filterOptionValueSelected: {
@@ -10,7 +10,7 @@
10
10
 
11
11
  import React, { useState, useCallback, useMemo } from "react";
12
12
  import { View, Text, TouchableOpacity, ScrollView, StyleSheet } from "react-native";
13
- import { Clock, GitBranch, Database, Lock, formatRelativeTime, SectionHeader, EventStepperFooter, buoyColors, night, useLimit, ToolEmptyState } from "@buoy-gg/shared-ui";
13
+ import { Clock, GitBranch, Database, Lock, formatRelativeTime, SectionHeader, EventStepperFooter, buoyColors, night, useLimit, ToolEmptyState, monoFont } from "@buoy-gg/shared-ui";
14
14
  import { TreeDiffViewer } from "@buoy-gg/shared-ui/dataViewer";
15
15
  import { RenderTracker } from "../utils/RenderTracker";
16
16
  import { EnhancedCauseDisplay, CAUSE_CONFIG } from "./RenderCauseBadge";
@@ -628,7 +628,7 @@ const styles = StyleSheet.create({
628
628
  eventTime: {
629
629
  fontSize: 11,
630
630
  color: night.color.textTertiary,
631
- fontFamily: "monospace"
631
+ fontFamily: monoFont
632
632
  },
633
633
  eventBadge: {
634
634
  flexDirection: "row",
@@ -646,7 +646,7 @@ const styles = StyleSheet.create({
646
646
  eventBadgeText: {
647
647
  fontSize: 10,
648
648
  fontWeight: "700",
649
- fontFamily: "monospace"
649
+ fontFamily: monoFont
650
650
  },
651
651
  section: {
652
652
  backgroundColor: night.color.surface,
@@ -675,7 +675,7 @@ const styles = StyleSheet.create({
675
675
  changedItem: {
676
676
  fontSize: 12,
677
677
  color: night.color.text,
678
- fontFamily: "monospace",
678
+ fontFamily: monoFont,
679
679
  marginBottom: 3,
680
680
  paddingLeft: 8
681
681
  },
@@ -684,7 +684,7 @@ const styles = StyleSheet.create({
684
684
  },
685
685
  propsJson: {
686
686
  fontSize: 11,
687
- fontFamily: "monospace",
687
+ fontFamily: monoFont,
688
688
  color: night.color.text,
689
689
  // Inset code box — the night track color.
690
690
  backgroundColor: night.color.bg,
@@ -738,7 +738,7 @@ const styles = StyleSheet.create({
738
738
  compareTime: {
739
739
  fontSize: 10,
740
740
  color: night.color.textTertiary,
741
- fontFamily: "monospace"
741
+ fontFamily: monoFont
742
742
  },
743
743
  compareDivider: {
744
744
  width: 30,
@@ -774,12 +774,12 @@ const styles = StyleSheet.create({
774
774
  fontSize: 12,
775
775
  fontWeight: "700",
776
776
  color: night.color.warning,
777
- fontFamily: "monospace"
777
+ fontFamily: monoFont
778
778
  },
779
779
  diffChangeKey: {
780
780
  fontSize: 12,
781
781
  color: night.color.text,
782
- fontFamily: "monospace"
782
+ fontFamily: monoFont
783
783
  },
784
784
  diffNoChanges: {
785
785
  fontSize: 12,
@@ -847,7 +847,7 @@ const styles = StyleSheet.create({
847
847
  causeDiffValue: {
848
848
  fontSize: 12,
849
849
  color: night.color.text,
850
- fontFamily: "monospace",
850
+ fontFamily: monoFont,
851
851
  fontWeight: "500"
852
852
  },
853
853
  diffChangesTitle: {
@@ -9,7 +9,7 @@
9
9
 
10
10
  import React, { useMemo } from "react";
11
11
  import { View, Text, TouchableOpacity, StyleSheet } from "react-native";
12
- import { ChevronRight, night, useRelativeTime } from "@buoy-gg/shared-ui";
12
+ import { ChevronRight, night, useRelativeTime, monoFont } from "@buoy-gg/shared-ui";
13
13
  import { IdentifierBadge } from "./IdentifierBadge";
14
14
  import { RenderCauseBadge } from "./RenderCauseBadge";
15
15
  import { renderRowTestID } from "../utils/testIDs";
@@ -190,7 +190,7 @@ const styles = StyleSheet.create({
190
190
  nativeType: {
191
191
  fontSize: 10,
192
192
  color: night.color.textTertiary,
193
- fontFamily: "monospace",
193
+ fontFamily: monoFont,
194
194
  marginTop: 1
195
195
  },
196
196
  accessibilityLabel: {
@@ -207,7 +207,7 @@ const styles = StyleSheet.create({
207
207
  renderCount: {
208
208
  fontSize: 11,
209
209
  fontWeight: "700",
210
- fontFamily: "monospace"
210
+ fontFamily: monoFont
211
211
  },
212
212
  bottomRow: {
213
213
  flexDirection: "row",
@@ -8,12 +8,12 @@
8
8
  */
9
9
 
10
10
  import { useCallback, useEffect, useMemo, useState } from "react";
11
- import { Text, StyleSheet, ScrollView, View, TouchableOpacity } from "react-native";
12
- import { DynamicFilterView, macOSColors, night, FileText, FileCode, Zap, Settings, Eye, ChevronDown, ChevronUp, AlertTriangle, Layers, ToolbarCopyButton } from "@buoy-gg/shared-ui";
11
+ import { Text, StyleSheet, ScrollView } from "react-native";
12
+ import { DynamicFilterView, macOSColors, night, FileText, FileCode, Zap, Settings, Eye, Layers, ToolbarCopyButton, ExportPreview, monoFont } from "@buoy-gg/shared-ui";
13
13
  import { DEFAULT_COPY_SETTINGS, COPY_PRESETS, PRESET_METADATA, detectActivePreset } from "../types/copySettings";
14
14
  import { generateExport, estimateExportSize, getExportSummary } from "../utils/rendersExportFormatter";
15
15
  import { loadCopySettings, saveCopySettings } from "../utils/copySettingsStorage";
16
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
16
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
17
17
  const SIZE_WARNING_THRESHOLD = 50 * 1024;
18
18
  const SIZE_DANGER_THRESHOLD = 200 * 1024;
19
19
  const CAUSE_OPTIONS = [{
@@ -191,77 +191,35 @@ export function RendersCopySettingsView({
191
191
  totalComponents,
192
192
  totalRenders
193
193
  } = getExportSummary(previewRenders);
194
- if (!isPreviewExpanded) {
195
- const warningColor = sizeWarningLevel === "danger" ? night.color.danger : sizeWarningLevel === "warning" ? night.color.warning : night.color.textSecondary;
196
- return /*#__PURE__*/_jsxs(View, {
197
- style: styles.collapsedPreview,
198
- children: [/*#__PURE__*/_jsx(TouchableOpacity, {
199
- testID: "buoy-highlight-copy-preview-show",
200
- accessibilityRole: "button",
201
- accessibilityLabel: "Show preview",
202
- style: styles.expandButton,
203
- onPress: () => setIsPreviewExpanded(true),
204
- children: /*#__PURE__*/_jsxs(View, {
205
- style: styles.expandButtonContent,
206
- children: [/*#__PURE__*/_jsx(Eye, {
207
- size: 16,
208
- color: night.color.info
209
- }), /*#__PURE__*/_jsxs(View, {
210
- style: styles.expandButtonTextContainer,
211
- children: [/*#__PURE__*/_jsx(Text, {
212
- style: styles.expandButtonTitle,
213
- children: "Show Preview"
214
- }), /*#__PURE__*/_jsxs(Text, {
215
- testID: "buoy-highlight-copy-preview-summary",
216
- style: styles.expandButtonSubtitle,
217
- children: [totalComponents, " component", totalComponents !== 1 ? "s" : "", " \xB7 ", totalRenders, " renders \xB7 ~", formatBytes(estimatedSize), !hasLiveData ? " (mock data)" : ""]
218
- })]
219
- }), /*#__PURE__*/_jsx(ChevronDown, {
220
- size: 16,
221
- color: night.color.textTertiary
222
- })]
194
+ return /*#__PURE__*/_jsx(ExportPreview, {
195
+ expanded: isPreviewExpanded,
196
+ onExpandedChange: setIsPreviewExpanded,
197
+ summary: `${totalComponents} component${totalComponents !== 1 ? "s" : ""} · ${totalRenders} renders · ~${formatBytes(estimatedSize)}${!hasLiveData ? " (mock data)" : ""}`,
198
+ warningLevel: sizeWarningLevel,
199
+ warningText: {
200
+ warning: "Large payload — preview may be slow",
201
+ danger: "Very large payload — try a smaller topN or turn off history"
202
+ },
203
+ testIDs: {
204
+ expand: "buoy-highlight-copy-preview-show",
205
+ collapse: "buoy-highlight-copy-preview-hide",
206
+ summary: "buoy-highlight-copy-preview-summary",
207
+ warning: "buoy-highlight-copy-size-warning"
208
+ },
209
+ renderBody: () => {
210
+ const exportText = generateCopyText();
211
+ return /*#__PURE__*/_jsx(ScrollView, {
212
+ testID: "buoy-highlight-copy-preview-scroll",
213
+ style: styles.previewScroll,
214
+ nestedScrollEnabled: true,
215
+ children: /*#__PURE__*/_jsx(Text, {
216
+ testID: "buoy-highlight-copy-preview-text",
217
+ style: styles.previewText,
218
+ selectable: true,
219
+ children: exportText
223
220
  })
224
- }), sizeWarningLevel !== "none" && /*#__PURE__*/_jsxs(View, {
225
- testID: "buoy-highlight-copy-size-warning",
226
- style: [styles.sizeWarning, sizeWarningLevel === "danger" && styles.sizeWarningDanger],
227
- children: [/*#__PURE__*/_jsx(AlertTriangle, {
228
- size: 12,
229
- color: warningColor
230
- }), /*#__PURE__*/_jsx(Text, {
231
- style: [styles.sizeWarningText, {
232
- color: warningColor
233
- }],
234
- children: sizeWarningLevel === "danger" ? "Very large payload — try a smaller topN or turn off history" : "Large payload — preview may be slow"
235
- })]
236
- })]
237
- });
238
- }
239
- const exportText = generateCopyText();
240
- return /*#__PURE__*/_jsxs(View, {
241
- children: [/*#__PURE__*/_jsxs(TouchableOpacity, {
242
- testID: "buoy-highlight-copy-preview-hide",
243
- accessibilityRole: "button",
244
- accessibilityLabel: "Hide preview",
245
- style: styles.collapseButton,
246
- onPress: () => setIsPreviewExpanded(false),
247
- children: [/*#__PURE__*/_jsx(Text, {
248
- style: styles.collapseButtonText,
249
- children: "Hide Preview"
250
- }), /*#__PURE__*/_jsx(ChevronUp, {
251
- size: 14,
252
- color: night.color.textSecondary
253
- })]
254
- }), /*#__PURE__*/_jsx(ScrollView, {
255
- testID: "buoy-highlight-copy-preview-scroll",
256
- style: styles.previewScroll,
257
- nestedScrollEnabled: true,
258
- children: /*#__PURE__*/_jsx(Text, {
259
- testID: "buoy-highlight-copy-preview-text",
260
- style: styles.previewText,
261
- selectable: true,
262
- children: exportText
263
- })
264
- })]
221
+ });
222
+ }
265
223
  });
266
224
  }, [isPreviewExpanded, previewRenders, estimatedSize, sizeWarningLevel, hasLiveData, generateCopyText]);
267
225
  const renderPreviewHeaderActions = useCallback(() => {
@@ -486,76 +444,11 @@ export function RendersCopySettingsView({
486
444
  });
487
445
  }
488
446
  const styles = StyleSheet.create({
489
- collapsedPreview: {
490
- gap: 8
491
- },
492
- expandButton: {
493
- backgroundColor: night.color.surfaceElevated,
494
- borderRadius: 8,
495
- borderWidth: 1,
496
- borderColor: night.color.border,
497
- padding: 12
498
- },
499
- expandButtonContent: {
500
- flexDirection: "row",
501
- alignItems: "center",
502
- gap: 10
503
- },
504
- expandButtonTextContainer: {
505
- flex: 1
506
- },
507
- expandButtonTitle: {
508
- fontSize: 13,
509
- fontWeight: "600",
510
- color: night.color.text
511
- },
512
- expandButtonSubtitle: {
513
- fontSize: 11,
514
- color: night.color.textSecondary,
515
- marginTop: 2
516
- },
517
- collapseButton: {
518
- flexDirection: "row",
519
- alignItems: "center",
520
- justifyContent: "center",
521
- gap: 6,
522
- paddingVertical: 8,
523
- marginBottom: 8,
524
- backgroundColor: night.color.surfaceElevated,
525
- borderRadius: 6,
526
- borderWidth: 1,
527
- borderColor: night.color.border
528
- },
529
- collapseButtonText: {
530
- fontSize: 12,
531
- fontWeight: "500",
532
- color: night.color.textSecondary
533
- },
534
- sizeWarning: {
535
- flexDirection: "row",
536
- alignItems: "center",
537
- gap: 6,
538
- paddingHorizontal: 10,
539
- paddingVertical: 6,
540
- backgroundColor: night.color.warningSoft,
541
- borderRadius: 6,
542
- borderWidth: 1,
543
- borderColor: night.color.warning + "30"
544
- },
545
- sizeWarningDanger: {
546
- backgroundColor: night.color.dangerSoft,
547
- borderColor: night.color.danger + "30"
548
- },
549
- sizeWarningText: {
550
- fontSize: 11,
551
- fontWeight: "500",
552
- flex: 1
553
- },
554
447
  previewScroll: {
555
448
  maxHeight: 360
556
449
  },
557
450
  previewText: {
558
- fontFamily: "monospace",
451
+ fontFamily: monoFont,
559
452
  fontSize: 11,
560
453
  color: night.color.text,
561
454
  lineHeight: 18
@@ -12,7 +12,7 @@
12
12
 
13
13
  import React, { useState, useEffect, memo } from "react";
14
14
  import { View, Text, StyleSheet } from "react-native";
15
- import { Activity, night } from "@buoy-gg/shared-ui";
15
+ import { Activity, night, monoFont } from "@buoy-gg/shared-ui";
16
16
  import { RenderTracker } from "../utils/RenderTracker";
17
17
 
18
18
  /**
@@ -64,7 +64,7 @@ const styles = StyleSheet.create({
64
64
  headerChipValue: {
65
65
  fontSize: 12,
66
66
  fontWeight: "600",
67
- fontFamily: "monospace"
67
+ fontFamily: monoFont
68
68
  }
69
69
  });
70
70
  export default StatsDisplay;