@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
@@ -275,7 +275,7 @@ const styles = _reactNative.StyleSheet.create({
275
275
  color: _sharedUi.night.color.accent,
276
276
  fontSize: 11,
277
277
  fontWeight: "600",
278
- fontFamily: "monospace"
278
+ fontFamily: _sharedUi.monoFont
279
279
  }
280
280
  });
281
281
  var _default = exports.default = HighlightUpdatesOverlay;
@@ -1101,7 +1101,7 @@ const styles = _reactNative.StyleSheet.create({
1101
1101
  patternChipValue: {
1102
1102
  fontSize: 11,
1103
1103
  color: _sharedUi.night.color.text,
1104
- fontFamily: "monospace",
1104
+ fontFamily: _sharedUi.monoFont,
1105
1105
  flexShrink: 1
1106
1106
  },
1107
1107
  patternChipX: {
@@ -1244,7 +1244,7 @@ const styles = _reactNative.StyleSheet.create({
1244
1244
  detectedItemText: {
1245
1245
  fontSize: 11,
1246
1246
  color: _sharedUi.night.color.text,
1247
- fontFamily: "monospace"
1247
+ fontFamily: _sharedUi.monoFont
1248
1248
  },
1249
1249
  emptyText: {
1250
1250
  fontSize: 11,
@@ -1262,7 +1262,7 @@ const styles = _reactNative.StyleSheet.create({
1262
1262
  fontSize: 11,
1263
1263
  color: _sharedUi.night.color.textTertiary,
1264
1264
  lineHeight: 18,
1265
- fontFamily: "monospace"
1265
+ fontFamily: _sharedUi.monoFont
1266
1266
  },
1267
1267
  howItWorksBold: {
1268
1268
  fontWeight: "700",
@@ -1362,7 +1362,7 @@ const styles = _reactNative.StyleSheet.create({
1362
1362
  fontSize: 12,
1363
1363
  fontWeight: "700",
1364
1364
  color: _sharedUi.night.color.textTertiary,
1365
- fontFamily: "monospace"
1365
+ fontFamily: _sharedUi.monoFont
1366
1366
  },
1367
1367
  settingDescription: {
1368
1368
  fontSize: 11,
@@ -1405,7 +1405,7 @@ const styles = _reactNative.StyleSheet.create({
1405
1405
  fontSize: 12,
1406
1406
  fontWeight: "500",
1407
1407
  color: _sharedUi.night.color.textSecondary,
1408
- fontFamily: "monospace"
1408
+ fontFamily: _sharedUi.monoFont
1409
1409
  },
1410
1410
  batchSizePresetTextActive: {
1411
1411
  color: _sharedUi.night.color.textTertiary,
@@ -1444,7 +1444,7 @@ const styles = _reactNative.StyleSheet.create({
1444
1444
  fontSize: 14,
1445
1445
  fontWeight: "600",
1446
1446
  color: _sharedUi.night.color.text,
1447
- fontFamily: "monospace",
1447
+ fontFamily: _sharedUi.monoFont,
1448
1448
  textAlign: "center"
1449
1449
  },
1450
1450
  renderCountSeparator: {
@@ -206,7 +206,7 @@ const styles = _reactNative.StyleSheet.create({
206
206
  value: {
207
207
  fontSize: 12,
208
208
  color: _sharedUi.night.color.text,
209
- fontFamily: "monospace",
209
+ fontFamily: _sharedUi.monoFont,
210
210
  flex: 1
211
211
  },
212
212
  valueCompact: {
@@ -239,7 +239,7 @@ const styles = _reactNative.StyleSheet.create({
239
239
  // Value only
240
240
  valueOnly: {
241
241
  fontSize: 12,
242
- fontFamily: "monospace"
242
+ fontFamily: _sharedUi.monoFont
243
243
  },
244
244
  valueOnlyCompact: {
245
245
  fontSize: 11
@@ -30,41 +30,23 @@ const SearchSectionInner = /*#__PURE__*/(0, _react.memo)(function SearchSection(
30
30
  onSearchClose
31
31
  }) {
32
32
  if (!isActive) return null;
33
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
34
- nativeID: "__rn_buoy__search-container",
35
- testID: "buoy-highlight-search-container",
36
- style: styles.headerSearchContainer,
37
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.Search, {
38
- size: 14,
39
- color: _sharedUi.night.color.textSecondary
40
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TextInput, {
41
- testID: "buoy-highlight-search-field",
42
- style: styles.headerSearchInput,
43
- placeholder: "Search testID, nativeID, component...",
44
- placeholderTextColor: _sharedUi.night.color.placeholder,
45
- value: searchText,
46
- onChangeText: onSearchChange,
47
- onSubmitEditing: onSearchClose,
48
- onBlur: onSearchClose,
49
- accessibilityLabel: "Search renders",
50
- autoCapitalize: "none",
51
- autoCorrect: false,
52
- returnKeyType: "search",
53
- autoFocus: true
54
- }), searchText.length > 0 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
55
- testID: "buoy-highlight-search-clear",
56
- accessibilityRole: "button",
57
- accessibilityLabel: "Clear search",
58
- onPress: () => {
59
- onSearchChange("");
60
- onSearchClose();
61
- },
62
- style: styles.headerSearchClear,
63
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.X, {
64
- size: 14,
65
- color: _sharedUi.night.color.textSecondary
66
- })
67
- }) : null]
33
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Search, {
34
+ value: searchText,
35
+ onChangeText: onSearchChange,
36
+ onCancel: () => {
37
+ onSearchChange("");
38
+ onSearchClose();
39
+ },
40
+ onDismiss: onSearchClose,
41
+ dismissOnBlur: true,
42
+ clearOnlyWhenText: true,
43
+ placeholder: "Search testID, nativeID, component...",
44
+ accessibilityLabel: "Search renders",
45
+ iconSize: 14,
46
+ testID: "buoy-highlight-search-field",
47
+ containerTestID: "buoy-highlight-search-container",
48
+ containerNativeID: "__rn_buoy__search-container",
49
+ clearTestID: "buoy-highlight-search-clear"
68
50
  });
69
51
  });
70
52
  const SearchSection = exports.SearchSection = SearchSectionInner;
@@ -287,27 +269,6 @@ const CopySettingsViewHeader = exports.CopySettingsViewHeader = /*#__PURE__*/(0,
287
269
  // ============================================================================
288
270
 
289
271
  const styles = _reactNative.StyleSheet.create({
290
- headerSearchContainer: {
291
- flexDirection: "row",
292
- alignItems: "center",
293
- backgroundColor: _sharedUi.night.color.surfaceElevated,
294
- borderRadius: 10,
295
- borderWidth: 1,
296
- borderColor: _sharedUi.night.color.border,
297
- paddingHorizontal: 12,
298
- paddingVertical: 5
299
- },
300
- headerSearchInput: {
301
- flex: 1,
302
- color: _sharedUi.night.color.text,
303
- fontSize: 13,
304
- marginLeft: 6,
305
- paddingVertical: 2
306
- },
307
- headerSearchClear: {
308
- marginLeft: 6,
309
- padding: 4
310
- },
311
272
  headerActionButton: {
312
273
  width: 32,
313
274
  height: 32,
@@ -376,7 +376,7 @@ const styles = _reactNative.StyleSheet.create({
376
376
  keysText: {
377
377
  fontSize: 11,
378
378
  color: _sharedUi.night.color.textSecondary,
379
- fontFamily: "monospace",
379
+ fontFamily: _sharedUi.monoFont,
380
380
  flex: 1
381
381
  },
382
382
  keysTextCompact: {
@@ -402,7 +402,7 @@ const styles = _reactNative.StyleSheet.create({
402
402
  fontSize: 11,
403
403
  fontWeight: "600",
404
404
  color: _sharedUi.night.color.text,
405
- fontFamily: "monospace"
405
+ fontFamily: _sharedUi.monoFont
406
406
  },
407
407
  twoLevelText: {
408
408
  fontSize: 11,
@@ -411,7 +411,7 @@ const styles = _reactNative.StyleSheet.create({
411
411
  twoLevelKeys: {
412
412
  fontSize: 10,
413
413
  color: _sharedUi.night.color.textSecondary,
414
- fontFamily: "monospace"
414
+ fontFamily: _sharedUi.monoFont
415
415
  },
416
416
  // Enhanced cause display styles (Phase 5)
417
417
  enhancedContainer: {
@@ -427,7 +427,7 @@ const styles = _reactNative.StyleSheet.create({
427
427
  fontSize: 14,
428
428
  fontWeight: "700",
429
429
  color: _sharedUi.night.color.text,
430
- fontFamily: "monospace"
430
+ fontFamily: _sharedUi.monoFont
431
431
  },
432
432
  enhancedNativeTag: {
433
433
  // Inset display chip — the night track color.
@@ -440,7 +440,7 @@ const styles = _reactNative.StyleSheet.create({
440
440
  fontSize: 10,
441
441
  fontWeight: "600",
442
442
  color: _sharedUi.night.color.textTertiary,
443
- fontFamily: "monospace"
443
+ fontFamily: _sharedUi.monoFont
444
444
  },
445
445
  enhancedFlowContainer: {
446
446
  flexDirection: "row",
@@ -489,13 +489,13 @@ const styles = _reactNative.StyleSheet.create({
489
489
  enhancedChangeIcon: {
490
490
  fontSize: 12,
491
491
  color: _sharedUi.night.color.warning,
492
- fontFamily: "monospace",
492
+ fontFamily: _sharedUi.monoFont,
493
493
  width: 16
494
494
  },
495
495
  enhancedChangeText: {
496
496
  fontSize: 12,
497
497
  color: _sharedUi.night.color.text,
498
- fontFamily: "monospace",
498
+ fontFamily: _sharedUi.monoFont,
499
499
  flex: 1
500
500
  },
501
501
  enhancedNoChanges: {
@@ -579,7 +579,7 @@ const styles = _reactNative.StyleSheet.create({
579
579
  fontSize: 11,
580
580
  fontWeight: "600",
581
581
  color: _sharedUi.night.color.textTertiary,
582
- fontFamily: "monospace"
582
+ fontFamily: _sharedUi.monoFont
583
583
  },
584
584
  // Answer Card
585
585
  answerCard: {
@@ -634,7 +634,7 @@ const styles = _reactNative.StyleSheet.create({
634
634
  propChangeText: {
635
635
  fontSize: 11,
636
636
  color: _sharedUi.night.color.text,
637
- fontFamily: "monospace"
637
+ fontFamily: _sharedUi.monoFont
638
638
  },
639
639
  // Details Section
640
640
  detailsSection: {
@@ -670,7 +670,7 @@ const styles = _reactNative.StyleSheet.create({
670
670
  detailValue: {
671
671
  fontSize: 12,
672
672
  color: _sharedUi.night.color.text,
673
- fontFamily: "monospace",
673
+ fontFamily: _sharedUi.monoFont,
674
674
  flex: 1
675
675
  },
676
676
  // Stats Row
@@ -693,7 +693,7 @@ const styles = _reactNative.StyleSheet.create({
693
693
  fontSize: 16,
694
694
  fontWeight: "700",
695
695
  color: _sharedUi.night.color.text,
696
- fontFamily: "monospace"
696
+ fontFamily: _sharedUi.monoFont
697
697
  },
698
698
  statLabel: {
699
699
  fontSize: 10,
@@ -733,7 +733,7 @@ const styles = _reactNative.StyleSheet.create({
733
733
  fontSize: 12,
734
734
  fontWeight: "600",
735
735
  color: _sharedUi.night.color.text,
736
- fontFamily: "monospace"
736
+ fontFamily: _sharedUi.monoFont
737
737
  },
738
738
  // Quick Actions Section
739
739
  quickActionsSection: {
@@ -782,7 +782,7 @@ const styles = _reactNative.StyleSheet.create({
782
782
  filterOptionValue: {
783
783
  fontSize: 12,
784
784
  color: _sharedUi.night.color.text,
785
- fontFamily: "monospace",
785
+ fontFamily: _sharedUi.monoFont,
786
786
  flex: 1
787
787
  },
788
788
  filterOptionValueSelected: {
@@ -635,7 +635,7 @@ const styles = _reactNative.StyleSheet.create({
635
635
  eventTime: {
636
636
  fontSize: 11,
637
637
  color: _sharedUi.night.color.textTertiary,
638
- fontFamily: "monospace"
638
+ fontFamily: _sharedUi.monoFont
639
639
  },
640
640
  eventBadge: {
641
641
  flexDirection: "row",
@@ -653,7 +653,7 @@ const styles = _reactNative.StyleSheet.create({
653
653
  eventBadgeText: {
654
654
  fontSize: 10,
655
655
  fontWeight: "700",
656
- fontFamily: "monospace"
656
+ fontFamily: _sharedUi.monoFont
657
657
  },
658
658
  section: {
659
659
  backgroundColor: _sharedUi.night.color.surface,
@@ -682,7 +682,7 @@ const styles = _reactNative.StyleSheet.create({
682
682
  changedItem: {
683
683
  fontSize: 12,
684
684
  color: _sharedUi.night.color.text,
685
- fontFamily: "monospace",
685
+ fontFamily: _sharedUi.monoFont,
686
686
  marginBottom: 3,
687
687
  paddingLeft: 8
688
688
  },
@@ -691,7 +691,7 @@ const styles = _reactNative.StyleSheet.create({
691
691
  },
692
692
  propsJson: {
693
693
  fontSize: 11,
694
- fontFamily: "monospace",
694
+ fontFamily: _sharedUi.monoFont,
695
695
  color: _sharedUi.night.color.text,
696
696
  // Inset code box — the night track color.
697
697
  backgroundColor: _sharedUi.night.color.bg,
@@ -745,7 +745,7 @@ const styles = _reactNative.StyleSheet.create({
745
745
  compareTime: {
746
746
  fontSize: 10,
747
747
  color: _sharedUi.night.color.textTertiary,
748
- fontFamily: "monospace"
748
+ fontFamily: _sharedUi.monoFont
749
749
  },
750
750
  compareDivider: {
751
751
  width: 30,
@@ -781,12 +781,12 @@ const styles = _reactNative.StyleSheet.create({
781
781
  fontSize: 12,
782
782
  fontWeight: "700",
783
783
  color: _sharedUi.night.color.warning,
784
- fontFamily: "monospace"
784
+ fontFamily: _sharedUi.monoFont
785
785
  },
786
786
  diffChangeKey: {
787
787
  fontSize: 12,
788
788
  color: _sharedUi.night.color.text,
789
- fontFamily: "monospace"
789
+ fontFamily: _sharedUi.monoFont
790
790
  },
791
791
  diffNoChanges: {
792
792
  fontSize: 12,
@@ -854,7 +854,7 @@ const styles = _reactNative.StyleSheet.create({
854
854
  causeDiffValue: {
855
855
  fontSize: 12,
856
856
  color: _sharedUi.night.color.text,
857
- fontFamily: "monospace",
857
+ fontFamily: _sharedUi.monoFont,
858
858
  fontWeight: "500"
859
859
  },
860
860
  diffChangesTitle: {
@@ -195,7 +195,7 @@ const styles = _reactNative.StyleSheet.create({
195
195
  nativeType: {
196
196
  fontSize: 10,
197
197
  color: _sharedUi.night.color.textTertiary,
198
- fontFamily: "monospace",
198
+ fontFamily: _sharedUi.monoFont,
199
199
  marginTop: 1
200
200
  },
201
201
  accessibilityLabel: {
@@ -212,7 +212,7 @@ const styles = _reactNative.StyleSheet.create({
212
212
  renderCount: {
213
213
  fontSize: 11,
214
214
  fontWeight: "700",
215
- fontFamily: "monospace"
215
+ fontFamily: _sharedUi.monoFont
216
216
  },
217
217
  bottomRow: {
218
218
  flexDirection: "row",
@@ -195,77 +195,35 @@ function RendersCopySettingsView({
195
195
  totalComponents,
196
196
  totalRenders
197
197
  } = (0, _rendersExportFormatter.getExportSummary)(previewRenders);
198
- if (!isPreviewExpanded) {
199
- const warningColor = sizeWarningLevel === "danger" ? _sharedUi.night.color.danger : sizeWarningLevel === "warning" ? _sharedUi.night.color.warning : _sharedUi.night.color.textSecondary;
200
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
201
- style: styles.collapsedPreview,
202
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
203
- testID: "buoy-highlight-copy-preview-show",
204
- accessibilityRole: "button",
205
- accessibilityLabel: "Show preview",
206
- style: styles.expandButton,
207
- onPress: () => setIsPreviewExpanded(true),
208
- children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
209
- style: styles.expandButtonContent,
210
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.Eye, {
211
- size: 16,
212
- color: _sharedUi.night.color.info
213
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
214
- style: styles.expandButtonTextContainer,
215
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
216
- style: styles.expandButtonTitle,
217
- children: "Show Preview"
218
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
219
- testID: "buoy-highlight-copy-preview-summary",
220
- style: styles.expandButtonSubtitle,
221
- children: [totalComponents, " component", totalComponents !== 1 ? "s" : "", " \xB7 ", totalRenders, " renders \xB7 ~", formatBytes(estimatedSize), !hasLiveData ? " (mock data)" : ""]
222
- })]
223
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ChevronDown, {
224
- size: 16,
225
- color: _sharedUi.night.color.textTertiary
226
- })]
198
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ExportPreview, {
199
+ expanded: isPreviewExpanded,
200
+ onExpandedChange: setIsPreviewExpanded,
201
+ summary: `${totalComponents} component${totalComponents !== 1 ? "s" : ""} · ${totalRenders} renders · ~${formatBytes(estimatedSize)}${!hasLiveData ? " (mock data)" : ""}`,
202
+ warningLevel: sizeWarningLevel,
203
+ warningText: {
204
+ warning: "Large payload — preview may be slow",
205
+ danger: "Very large payload — try a smaller topN or turn off history"
206
+ },
207
+ testIDs: {
208
+ expand: "buoy-highlight-copy-preview-show",
209
+ collapse: "buoy-highlight-copy-preview-hide",
210
+ summary: "buoy-highlight-copy-preview-summary",
211
+ warning: "buoy-highlight-copy-size-warning"
212
+ },
213
+ renderBody: () => {
214
+ const exportText = generateCopyText();
215
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ScrollView, {
216
+ testID: "buoy-highlight-copy-preview-scroll",
217
+ style: styles.previewScroll,
218
+ nestedScrollEnabled: true,
219
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
220
+ testID: "buoy-highlight-copy-preview-text",
221
+ style: styles.previewText,
222
+ selectable: true,
223
+ children: exportText
227
224
  })
228
- }), sizeWarningLevel !== "none" && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
229
- testID: "buoy-highlight-copy-size-warning",
230
- style: [styles.sizeWarning, sizeWarningLevel === "danger" && styles.sizeWarningDanger],
231
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.AlertTriangle, {
232
- size: 12,
233
- color: warningColor
234
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
235
- style: [styles.sizeWarningText, {
236
- color: warningColor
237
- }],
238
- children: sizeWarningLevel === "danger" ? "Very large payload — try a smaller topN or turn off history" : "Large payload — preview may be slow"
239
- })]
240
- })]
241
- });
242
- }
243
- const exportText = generateCopyText();
244
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
245
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
246
- testID: "buoy-highlight-copy-preview-hide",
247
- accessibilityRole: "button",
248
- accessibilityLabel: "Hide preview",
249
- style: styles.collapseButton,
250
- onPress: () => setIsPreviewExpanded(false),
251
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
252
- style: styles.collapseButtonText,
253
- children: "Hide Preview"
254
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ChevronUp, {
255
- size: 14,
256
- color: _sharedUi.night.color.textSecondary
257
- })]
258
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ScrollView, {
259
- testID: "buoy-highlight-copy-preview-scroll",
260
- style: styles.previewScroll,
261
- nestedScrollEnabled: true,
262
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
263
- testID: "buoy-highlight-copy-preview-text",
264
- style: styles.previewText,
265
- selectable: true,
266
- children: exportText
267
- })
268
- })]
225
+ });
226
+ }
269
227
  });
270
228
  }, [isPreviewExpanded, previewRenders, estimatedSize, sizeWarningLevel, hasLiveData, generateCopyText]);
271
229
  const renderPreviewHeaderActions = (0, _react.useCallback)(() => {
@@ -490,76 +448,11 @@ function RendersCopySettingsView({
490
448
  });
491
449
  }
492
450
  const styles = _reactNative.StyleSheet.create({
493
- collapsedPreview: {
494
- gap: 8
495
- },
496
- expandButton: {
497
- backgroundColor: _sharedUi.night.color.surfaceElevated,
498
- borderRadius: 8,
499
- borderWidth: 1,
500
- borderColor: _sharedUi.night.color.border,
501
- padding: 12
502
- },
503
- expandButtonContent: {
504
- flexDirection: "row",
505
- alignItems: "center",
506
- gap: 10
507
- },
508
- expandButtonTextContainer: {
509
- flex: 1
510
- },
511
- expandButtonTitle: {
512
- fontSize: 13,
513
- fontWeight: "600",
514
- color: _sharedUi.night.color.text
515
- },
516
- expandButtonSubtitle: {
517
- fontSize: 11,
518
- color: _sharedUi.night.color.textSecondary,
519
- marginTop: 2
520
- },
521
- collapseButton: {
522
- flexDirection: "row",
523
- alignItems: "center",
524
- justifyContent: "center",
525
- gap: 6,
526
- paddingVertical: 8,
527
- marginBottom: 8,
528
- backgroundColor: _sharedUi.night.color.surfaceElevated,
529
- borderRadius: 6,
530
- borderWidth: 1,
531
- borderColor: _sharedUi.night.color.border
532
- },
533
- collapseButtonText: {
534
- fontSize: 12,
535
- fontWeight: "500",
536
- color: _sharedUi.night.color.textSecondary
537
- },
538
- sizeWarning: {
539
- flexDirection: "row",
540
- alignItems: "center",
541
- gap: 6,
542
- paddingHorizontal: 10,
543
- paddingVertical: 6,
544
- backgroundColor: _sharedUi.night.color.warningSoft,
545
- borderRadius: 6,
546
- borderWidth: 1,
547
- borderColor: _sharedUi.night.color.warning + "30"
548
- },
549
- sizeWarningDanger: {
550
- backgroundColor: _sharedUi.night.color.dangerSoft,
551
- borderColor: _sharedUi.night.color.danger + "30"
552
- },
553
- sizeWarningText: {
554
- fontSize: 11,
555
- fontWeight: "500",
556
- flex: 1
557
- },
558
451
  previewScroll: {
559
452
  maxHeight: 360
560
453
  },
561
454
  previewText: {
562
- fontFamily: "monospace",
455
+ fontFamily: _sharedUi.monoFont,
563
456
  fontSize: 11,
564
457
  color: _sharedUi.night.color.text,
565
458
  lineHeight: 18
@@ -67,7 +67,7 @@ const styles = _reactNative.StyleSheet.create({
67
67
  headerChipValue: {
68
68
  fontSize: 12,
69
69
  fontWeight: "600",
70
- fontFamily: "monospace"
70
+ fontFamily: _sharedUi.monoFont
71
71
  }
72
72
  });
73
73
  var _default = exports.default = StatsDisplay;
@@ -11,39 +11,22 @@ var _copySettings = require("../types/copySettings");
11
11
  /**
12
12
  * Copy Settings Storage
13
13
  *
14
- * Persists the highlight-updates copy/export settings.
14
+ * Persists the highlight-updates copy/export settings through the shared
15
+ * `definePersistedSetting` (merge-over-defaults, best-effort save/clear).
15
16
  */
16
17
 
18
+ const copySettings = (0, _sharedUi.definePersistedSetting)(_sharedUi.devToolsStorageKeys.highlightUpdates.copySettings(), _copySettings.DEFAULT_COPY_SETTINGS, {
19
+ sanitize: (merged, stored) => ({
20
+ ...merged,
21
+ filterCauses: stored?.filterCauses ?? _copySettings.DEFAULT_COPY_SETTINGS.filterCauses
22
+ })
23
+ });
17
24
  async function saveCopySettings(settings) {
18
- try {
19
- const key = _sharedUi.devToolsStorageKeys.highlightUpdates.copySettings();
20
- await _sharedUi.persistentStorage.setItem(key, JSON.stringify(settings));
21
- } catch {
22
- // Silently fail — persistence is optional
23
- }
25
+ await copySettings.save(settings);
24
26
  }
25
27
  async function loadCopySettings() {
26
- try {
27
- const key = _sharedUi.devToolsStorageKeys.highlightUpdates.copySettings();
28
- const value = await _sharedUi.persistentStorage.getItem(key);
29
- if (value && value !== "") {
30
- const parsed = JSON.parse(value);
31
- return {
32
- ..._copySettings.DEFAULT_COPY_SETTINGS,
33
- ...parsed,
34
- filterCauses: parsed.filterCauses ?? _copySettings.DEFAULT_COPY_SETTINGS.filterCauses
35
- };
36
- }
37
- return null;
38
- } catch {
39
- return null;
40
- }
28
+ return copySettings.loadOrNull();
41
29
  }
42
30
  async function clearCopySettings() {
43
- try {
44
- const key = _sharedUi.devToolsStorageKeys.highlightUpdates.copySettings();
45
- await _sharedUi.persistentStorage.removeItem(key);
46
- } catch {
47
- // Silently fail
48
- }
31
+ await copySettings.clear();
49
32
  }
@@ -10,7 +10,7 @@
10
10
 
11
11
  import React, { useEffect, useState, useRef, useCallback, useLayoutEffect } from "react";
12
12
  import { View, Text, StyleSheet } from "react-native";
13
- import { night } from "@buoy-gg/shared-ui";
13
+ import { night, monoFont } from "@buoy-gg/shared-ui";
14
14
  import HighlightUpdatesController from "./utils/HighlightUpdatesController";
15
15
  import { PerformanceLogger, markOverlayRendered } from "./utils/PerformanceLogger";
16
16
  import { RenderTracker } from "./utils/RenderTracker";
@@ -268,7 +268,7 @@ const styles = StyleSheet.create({
268
268
  color: night.color.accent,
269
269
  fontSize: 11,
270
270
  fontWeight: "600",
271
- fontFamily: "monospace"
271
+ fontFamily: monoFont
272
272
  }
273
273
  });
274
274
  export default HighlightUpdatesOverlay;