@buoy-gg/highlight-updates 7.0.38 → 7.0.40

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 (103) hide show
  1. package/lib/commonjs/highlight-updates/HighlightUpdatesOverlay.js +281 -1
  2. package/lib/commonjs/highlight-updates/components/HighlightFilterView.js +1474 -1
  3. package/lib/commonjs/highlight-updates/components/HighlightUpdatesModal.js +641 -1
  4. package/lib/commonjs/highlight-updates/components/IdentifierBadge.js +273 -1
  5. package/lib/commonjs/highlight-updates/components/IsolatedRenderList.js +188 -1
  6. package/lib/commonjs/highlight-updates/components/ModalHeaderContent.js +293 -1
  7. package/lib/commonjs/highlight-updates/components/RenderCauseBadge.js +508 -1
  8. package/lib/commonjs/highlight-updates/components/RenderDetailView.js +846 -1
  9. package/lib/commonjs/highlight-updates/components/RenderHistoryViewer.js +915 -1
  10. package/lib/commonjs/highlight-updates/components/RenderListItem.js +235 -1
  11. package/lib/commonjs/highlight-updates/components/RendersCopySettingsView.js +469 -1
  12. package/lib/commonjs/highlight-updates/components/StatsDisplay.js +73 -1
  13. package/lib/commonjs/highlight-updates/types/copySettings.js +107 -1
  14. package/lib/commonjs/highlight-updates/utils/CommitProfiler.js +446 -1
  15. package/lib/commonjs/highlight-updates/utils/HighlightUpdatesController.js +1920 -1
  16. package/lib/commonjs/highlight-updates/utils/PerformanceLogger.js +359 -1
  17. package/lib/commonjs/highlight-updates/utils/ProfilerInterceptor.js +371 -1
  18. package/lib/commonjs/highlight-updates/utils/RenderCauseDetector.js +1840 -1
  19. package/lib/commonjs/highlight-updates/utils/RenderTracker.js +952 -1
  20. package/lib/commonjs/highlight-updates/utils/ViewTypeMapper.js +264 -1
  21. package/lib/commonjs/highlight-updates/utils/copySettingsStorage.js +32 -1
  22. package/lib/commonjs/highlight-updates/utils/devtoolsComponentNames.js +188 -1
  23. package/lib/commonjs/highlight-updates/utils/namedComposite.js +41 -1
  24. package/lib/commonjs/highlight-updates/utils/ownStateChanged.js +103 -1
  25. package/lib/commonjs/highlight-updates/utils/rawEventEmitter.js +50 -1
  26. package/lib/commonjs/highlight-updates/utils/renderExportFormatter.js +58 -1
  27. package/lib/commonjs/highlight-updates/utils/rendersExportFormatter.js +485 -1
  28. package/lib/commonjs/highlight-updates/utils/screenElements.js +1248 -1
  29. package/lib/commonjs/highlight-updates/utils/tapMatch.js +83 -1
  30. package/lib/commonjs/highlight-updates/utils/testIDs.js +68 -1
  31. package/lib/commonjs/highlight-updates/utils/touchCapture.js +277 -1
  32. package/lib/commonjs/index.js +429 -1
  33. package/lib/commonjs/preset.js +278 -1
  34. package/lib/commonjs/sync/highlightUpdatesSyncAdapter.js +235 -1
  35. package/lib/module/highlight-updates/HighlightUpdatesOverlay.js +274 -1
  36. package/lib/module/highlight-updates/components/HighlightFilterView.js +1468 -1
  37. package/lib/module/highlight-updates/components/HighlightUpdatesModal.js +634 -1
  38. package/lib/module/highlight-updates/components/IdentifierBadge.js +265 -1
  39. package/lib/module/highlight-updates/components/IsolatedRenderList.js +183 -1
  40. package/lib/module/highlight-updates/components/ModalHeaderContent.js +288 -1
  41. package/lib/module/highlight-updates/components/RenderCauseBadge.js +499 -1
  42. package/lib/module/highlight-updates/components/RenderDetailView.js +840 -1
  43. package/lib/module/highlight-updates/components/RenderHistoryViewer.js +908 -1
  44. package/lib/module/highlight-updates/components/RenderListItem.js +230 -1
  45. package/lib/module/highlight-updates/components/RendersCopySettingsView.js +465 -1
  46. package/lib/module/highlight-updates/components/StatsDisplay.js +70 -1
  47. package/lib/module/highlight-updates/types/copySettings.js +102 -1
  48. package/lib/module/highlight-updates/utils/CommitProfiler.js +442 -1
  49. package/lib/module/highlight-updates/utils/HighlightUpdatesController.js +1916 -1
  50. package/lib/module/highlight-updates/utils/PerformanceLogger.js +353 -1
  51. package/lib/module/highlight-updates/utils/ProfilerInterceptor.js +358 -1
  52. package/lib/module/highlight-updates/utils/RenderCauseDetector.js +1830 -1
  53. package/lib/module/highlight-updates/utils/RenderTracker.js +949 -1
  54. package/lib/module/highlight-updates/utils/ViewTypeMapper.js +255 -1
  55. package/lib/module/highlight-updates/utils/copySettingsStorage.js +26 -1
  56. package/lib/module/highlight-updates/utils/devtoolsComponentNames.js +178 -1
  57. package/lib/module/highlight-updates/utils/namedComposite.js +36 -1
  58. package/lib/module/highlight-updates/utils/ownStateChanged.js +98 -1
  59. package/lib/module/highlight-updates/utils/rawEventEmitter.js +46 -1
  60. package/lib/module/highlight-updates/utils/renderExportFormatter.js +54 -1
  61. package/lib/module/highlight-updates/utils/rendersExportFormatter.js +478 -1
  62. package/lib/module/highlight-updates/utils/screenElements.js +1242 -1
  63. package/lib/module/highlight-updates/utils/tapMatch.js +76 -1
  64. package/lib/module/highlight-updates/utils/testIDs.js +60 -1
  65. package/lib/module/highlight-updates/utils/touchCapture.js +270 -1
  66. package/lib/module/index.js +130 -1
  67. package/lib/module/preset.js +272 -1
  68. package/lib/module/sync/highlightUpdatesSyncAdapter.js +230 -1
  69. package/lib/typescript/highlight-updates/HighlightUpdatesOverlay.d.ts.map +1 -0
  70. package/lib/typescript/highlight-updates/components/HighlightFilterView.d.ts.map +1 -0
  71. package/lib/typescript/highlight-updates/components/HighlightUpdatesModal.d.ts.map +1 -0
  72. package/lib/typescript/highlight-updates/components/IdentifierBadge.d.ts.map +1 -0
  73. package/lib/typescript/highlight-updates/components/IsolatedRenderList.d.ts.map +1 -0
  74. package/lib/typescript/highlight-updates/components/ModalHeaderContent.d.ts.map +1 -0
  75. package/lib/typescript/highlight-updates/components/RenderCauseBadge.d.ts.map +1 -0
  76. package/lib/typescript/highlight-updates/components/RenderDetailView.d.ts.map +1 -0
  77. package/lib/typescript/highlight-updates/components/RenderHistoryViewer.d.ts.map +1 -0
  78. package/lib/typescript/highlight-updates/components/RenderListItem.d.ts.map +1 -0
  79. package/lib/typescript/highlight-updates/components/RendersCopySettingsView.d.ts.map +1 -0
  80. package/lib/typescript/highlight-updates/components/StatsDisplay.d.ts.map +1 -0
  81. package/lib/typescript/highlight-updates/types/copySettings.d.ts.map +1 -0
  82. package/lib/typescript/highlight-updates/utils/CommitProfiler.d.ts.map +1 -0
  83. package/lib/typescript/highlight-updates/utils/HighlightUpdatesController.d.ts.map +1 -0
  84. package/lib/typescript/highlight-updates/utils/PerformanceLogger.d.ts.map +1 -0
  85. package/lib/typescript/highlight-updates/utils/ProfilerInterceptor.d.ts.map +1 -0
  86. package/lib/typescript/highlight-updates/utils/RenderCauseDetector.d.ts.map +1 -0
  87. package/lib/typescript/highlight-updates/utils/RenderTracker.d.ts.map +1 -0
  88. package/lib/typescript/highlight-updates/utils/ViewTypeMapper.d.ts.map +1 -0
  89. package/lib/typescript/highlight-updates/utils/copySettingsStorage.d.ts.map +1 -0
  90. package/lib/typescript/highlight-updates/utils/devtoolsComponentNames.d.ts.map +1 -0
  91. package/lib/typescript/highlight-updates/utils/namedComposite.d.ts.map +1 -0
  92. package/lib/typescript/highlight-updates/utils/ownStateChanged.d.ts.map +1 -0
  93. package/lib/typescript/highlight-updates/utils/rawEventEmitter.d.ts.map +1 -0
  94. package/lib/typescript/highlight-updates/utils/renderExportFormatter.d.ts.map +1 -0
  95. package/lib/typescript/highlight-updates/utils/rendersExportFormatter.d.ts.map +1 -0
  96. package/lib/typescript/highlight-updates/utils/screenElements.d.ts.map +1 -0
  97. package/lib/typescript/highlight-updates/utils/tapMatch.d.ts.map +1 -0
  98. package/lib/typescript/highlight-updates/utils/testIDs.d.ts.map +1 -0
  99. package/lib/typescript/highlight-updates/utils/touchCapture.d.ts.map +1 -0
  100. package/lib/typescript/index.d.ts.map +1 -0
  101. package/lib/typescript/preset.d.ts.map +1 -0
  102. package/lib/typescript/sync/highlightUpdatesSyncAdapter.d.ts.map +1 -0
  103. package/package.json +7 -7
@@ -1 +1,293 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.SearchSection=exports.MainListHeader=exports.HeaderActions=exports.FilterViewHeader=exports.DetailViewHeader=exports.CopySettingsViewHeader=void 0;var _react=_interopRequireWildcard(require("react")),_reactNative=require("react-native"),_sharedUi=require("@buoy-gg/shared-ui"),_StatsDisplay=require("./StatsDisplay"),_jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(e,t){if("function"==typeof WeakMap)var i=new WeakMap,r=new WeakMap;return(_interopRequireWildcard=function(e,t){if(!t&&e&&e.__esModule)return e;var a,o,s={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return s;if(a=t?r:i){if(a.has(e))return a.get(e);a.set(e,s)}for(const t in e)"default"!==t&&{}.hasOwnProperty.call(e,t)&&((o=(a=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,t))&&(o.get||o.set)?a(s,t,o):s[t]=e[t]);return s})(e,t)}const SearchSectionInner=(0,_react.memo)(function({isActive:e,searchText:t,onSearchChange:i,onSearchClose:r}){return e?(0,_jsxRuntime.jsx)(_sharedUi.ModalHeader.Search,{value:t,onChangeText:i,onCancel:()=>{i(""),r()},onDismiss:r,dismissOnBlur:!0,clearOnlyWhenText:!0,placeholder:"Search testID, nativeID, component...",accessibilityLabel:"Search renders",iconSize:14,testID:"buoy-highlight-search-field",containerTestID:"buoy-highlight-search-container",containerNativeID:"__rn_buoy__search-container",clearTestID:"buoy-highlight-search-clear"}):null}),SearchSection=exports.SearchSection=SearchSectionInner,HeaderActionsInner=(0,_react.memo)(function({onSearchToggle:e,onFilterToggle:t,onToggleTracking:i,onToggleFreeze:r,onClear:a,onOpenCopySettings:o,isTracking:s,isFrozen:n,activeFilterCount:c,hasRenders:l}){return(0,_jsxRuntime.jsxs)(_sharedUi.ModalHeader.Actions,{children:[(0,_jsxRuntime.jsx)(_reactNative.TouchableOpacity,{testID:"buoy-highlight-search",accessibilityRole:"button",accessibilityLabel:"Search renders",onPress:e,style:styles.headerActionButton,children:(0,_jsxRuntime.jsx)(_sharedUi.Search,{size:14,color:_sharedUi.night.color.textSecondary})}),(0,_jsxRuntime.jsx)(_reactNative.TouchableOpacity,{testID:"buoy-highlight-filters",accessibilityRole:"button",accessibilityLabel:c>0?`Filters, ${c} active`:"Filters",onPress:t,style:[styles.headerActionButton,c>0&&styles.activeFilterButton],children:(0,_jsxRuntime.jsx)(_sharedUi.Filter,{size:14,color:c>0?_sharedUi.night.color.accent:_sharedUi.night.color.textTertiary})}),(0,_jsxRuntime.jsx)(_reactNative.TouchableOpacity,{testID:"buoy-highlight-copy",accessibilityRole:"button",onPress:o,style:[styles.headerActionButton,!l&&styles.headerActionButtonDisabled],disabled:!l,accessibilityLabel:"Open copy settings",children:(0,_jsxRuntime.jsx)(_sharedUi.Copy,{size:14,color:l?_sharedUi.night.color.textSecondary:_sharedUi.night.color.textTertiary})}),(0,_jsxRuntime.jsx)(_reactNative.TouchableOpacity,{testID:"buoy-highlight-freeze",accessibilityRole:"button",accessibilityLabel:n?"Unfreeze frame":"Freeze frame",onPress:r,style:[styles.headerActionButton,n&&styles.freezeButton,!s&&styles.headerActionButtonDisabled],disabled:!s,children:(0,_jsxRuntime.jsx)(_sharedUi.Pause,{size:14,color:s&&n?_sharedUi.night.color.accent:_sharedUi.night.color.textTertiary})}),(0,_jsxRuntime.jsx)(_sharedUi.PowerToggleButton,{testID:"buoy-highlight-power",isEnabled:s,onToggle:i,accessibilityLabel:"Toggle render tracking"}),(0,_jsxRuntime.jsx)(_reactNative.TouchableOpacity,{testID:"buoy-highlight-clear",accessibilityRole:"button",accessibilityLabel:"Clear tracked renders",onPress:a,style:[styles.headerActionButton,!l&&styles.headerActionButtonDisabled],disabled:!l,children:(0,_jsxRuntime.jsx)(_sharedUi.Trash2,{size:14,color:_sharedUi.night.color.textTertiary})})]})}),HeaderActions=exports.HeaderActions=HeaderActionsInner,MainListHeader=exports.MainListHeader=(0,_react.memo)(function({onBack:e,isSearchActive:t,searchText:i,onSearchChange:r,onSearchToggle:a,onSearchClose:o,onFilterToggle:s,onToggleTracking:n,onToggleFreeze:c,onClear:l,onOpenCopySettings:h,isTracking:d,isFrozen:u,activeFilterCount:g,hasRenders:_,searchInputRef:x}){return(0,_jsxRuntime.jsxs)(_sharedUi.ModalHeader,{children:[e&&(0,_jsxRuntime.jsx)(_sharedUi.ModalHeader.Navigation,{onBack:e}),(0,_jsxRuntime.jsx)(_sharedUi.ModalHeader.Content,{title:"",children:t?(0,_jsxRuntime.jsx)(SearchSection,{isActive:t,searchText:i,onSearchChange:r,onSearchClose:o,searchInputRef:x}):(0,_jsxRuntime.jsx)(_StatsDisplay.StatsDisplay,{})}),(0,_jsxRuntime.jsx)(HeaderActions,{onSearchToggle:a,onFilterToggle:s,onToggleTracking:n,onToggleFreeze:c,onClear:l,onOpenCopySettings:h,isTracking:d,isFrozen:u,activeFilterCount:g,hasRenders:_})]})}),FilterViewHeader=exports.FilterViewHeader=(0,_react.memo)(function({onBack:e,activeTab:t,onTabChange:i,activeFilterCount:r=0}){const a=[{key:"filters",label:"Filters"+(r>0?` (${r})`:"")},{key:"settings",label:"Settings"}];return(0,_jsxRuntime.jsxs)(_sharedUi.ModalHeader,{children:[(0,_jsxRuntime.jsx)(_sharedUi.ModalHeader.Navigation,{onBack:e}),(0,_jsxRuntime.jsx)(_sharedUi.ModalHeader.Content,{title:"",noMargin:!0,children:(0,_jsxRuntime.jsx)(_sharedUi.TabSelector,{tabs:a,activeTab:t,onTabChange:e=>i(e),testIDPrefix:"buoy-highlight-filter-tab"})}),(0,_jsxRuntime.jsx)(_sharedUi.ModalHeader.Actions,{})]})}),DetailViewHeader=exports.DetailViewHeader=(0,_react.memo)(function({onBack:e,activeTab:t,onTabChange:i,hasHistory:r=!0}){const a=[{key:"details",label:"Details"},{key:"history",label:"History",disabled:!r}];return(0,_jsxRuntime.jsxs)(_sharedUi.ModalHeader,{children:[(0,_jsxRuntime.jsx)(_sharedUi.ModalHeader.Navigation,{onBack:e}),(0,_jsxRuntime.jsx)(_sharedUi.ModalHeader.Content,{title:"",noMargin:!0,children:(0,_jsxRuntime.jsx)(_sharedUi.TabSelector,{tabs:a,activeTab:t,onTabChange:e=>i(e),testIDPrefix:"buoy-highlight-detail-tab"})}),(0,_jsxRuntime.jsx)(_sharedUi.ModalHeader.Actions,{})]})}),CopySettingsViewHeader=exports.CopySettingsViewHeader=(0,_react.memo)(function({onBack:e}){return(0,_jsxRuntime.jsxs)(_sharedUi.ModalHeader,{children:[(0,_jsxRuntime.jsx)(_sharedUi.ModalHeader.Navigation,{onBack:e}),(0,_jsxRuntime.jsx)(_sharedUi.ModalHeader.Content,{title:"Copy Settings",testID:"buoy-highlight-copy-title"})]})}),styles=_reactNative.StyleSheet.create({headerActionButton:{width:32,height:32,borderRadius:8,backgroundColor:_sharedUi.night.color.buttonSurface,borderWidth:1,borderColor:_sharedUi.night.color.border,alignItems:"center",justifyContent:"center"},headerActionButtonDisabled:{opacity:.55},activeFilterButton:{backgroundColor:_sharedUi.night.color.accentSoft,borderColor:_sharedUi.night.color.accentBorderStrong},freezeButton:{backgroundColor:_sharedUi.night.color.accentSoft,borderColor:_sharedUi.night.color.accentBorderStrong}});
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.SearchSection = exports.MainListHeader = exports.HeaderActions = exports.FilterViewHeader = exports.DetailViewHeader = exports.CopySettingsViewHeader = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _reactNative = require("react-native");
9
+ var _sharedUi = require("@buoy-gg/shared-ui");
10
+ var _StatsDisplay = require("./StatsDisplay");
11
+ var _jsxRuntime = require("react/jsx-runtime");
12
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
13
+ /**
14
+ * ModalHeaderContent
15
+ *
16
+ * Memoized header content components for the HighlightUpdatesModal.
17
+ * Extracted to prevent re-renders when parent state changes unrelated to header.
18
+ *
19
+ * Following the optimization guide: extract inline JSX to memoized components.
20
+ */
21
+
22
+ // ============================================================================
23
+ // Search Section - isolated component for search UI
24
+ // ============================================================================
25
+
26
+ const SearchSectionInner = /*#__PURE__*/(0, _react.memo)(function SearchSection({
27
+ isActive,
28
+ searchText,
29
+ onSearchChange,
30
+ onSearchClose
31
+ }) {
32
+ if (!isActive) return 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"
50
+ });
51
+ });
52
+ const SearchSection = exports.SearchSection = SearchSectionInner;
53
+
54
+ // ============================================================================
55
+ // Header Actions - isolated component for action buttons
56
+ // ============================================================================
57
+
58
+ const HeaderActionsInner = /*#__PURE__*/(0, _react.memo)(function HeaderActions({
59
+ onSearchToggle,
60
+ onFilterToggle,
61
+ onToggleTracking,
62
+ onToggleFreeze,
63
+ onClear,
64
+ onOpenCopySettings,
65
+ isTracking,
66
+ isFrozen,
67
+ activeFilterCount,
68
+ hasRenders
69
+ }) {
70
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_sharedUi.ModalHeader.Actions, {
71
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
72
+ testID: "buoy-highlight-search",
73
+ accessibilityRole: "button",
74
+ accessibilityLabel: "Search renders",
75
+ onPress: onSearchToggle,
76
+ style: styles.headerActionButton,
77
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.Search, {
78
+ size: 14,
79
+ color: _sharedUi.night.color.textSecondary
80
+ })
81
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
82
+ testID: "buoy-highlight-filters",
83
+ accessibilityRole: "button",
84
+ accessibilityLabel: activeFilterCount > 0 ? `Filters, ${activeFilterCount} active` : "Filters",
85
+ onPress: onFilterToggle,
86
+ style: [styles.headerActionButton, activeFilterCount > 0 && styles.activeFilterButton],
87
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.Filter, {
88
+ size: 14,
89
+ color: activeFilterCount > 0 ? _sharedUi.night.color.accent : _sharedUi.night.color.textTertiary
90
+ })
91
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
92
+ testID: "buoy-highlight-copy",
93
+ accessibilityRole: "button",
94
+ onPress: onOpenCopySettings,
95
+ style: [styles.headerActionButton, !hasRenders && styles.headerActionButtonDisabled],
96
+ disabled: !hasRenders,
97
+ accessibilityLabel: "Open copy settings",
98
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.Copy, {
99
+ size: 14,
100
+ color: hasRenders ? _sharedUi.night.color.textSecondary : _sharedUi.night.color.textTertiary
101
+ })
102
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
103
+ testID: "buoy-highlight-freeze",
104
+ accessibilityRole: "button",
105
+ accessibilityLabel: isFrozen ? "Unfreeze frame" : "Freeze frame",
106
+ onPress: onToggleFreeze,
107
+ style: [styles.headerActionButton, isFrozen && styles.freezeButton, !isTracking && styles.headerActionButtonDisabled],
108
+ disabled: !isTracking,
109
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.Pause, {
110
+ size: 14,
111
+ color: !isTracking ? _sharedUi.night.color.textTertiary : isFrozen ? _sharedUi.night.color.accent : _sharedUi.night.color.textTertiary
112
+ })
113
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.PowerToggleButton, {
114
+ testID: "buoy-highlight-power",
115
+ isEnabled: isTracking,
116
+ onToggle: onToggleTracking,
117
+ accessibilityLabel: "Toggle render tracking"
118
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
119
+ testID: "buoy-highlight-clear",
120
+ accessibilityRole: "button",
121
+ accessibilityLabel: "Clear tracked renders",
122
+ onPress: onClear,
123
+ style: [styles.headerActionButton, !hasRenders && styles.headerActionButtonDisabled],
124
+ disabled: !hasRenders,
125
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.Trash2, {
126
+ size: 14,
127
+ color: hasRenders ? _sharedUi.night.color.textTertiary : _sharedUi.night.color.textTertiary
128
+ })
129
+ })]
130
+ });
131
+ });
132
+ const HeaderActions = exports.HeaderActions = HeaderActionsInner;
133
+
134
+ // ============================================================================
135
+ // Main List Header - complete header for main list view
136
+ // ============================================================================
137
+
138
+ const MainListHeader = exports.MainListHeader = /*#__PURE__*/(0, _react.memo)(function MainListHeader({
139
+ onBack,
140
+ isSearchActive,
141
+ searchText,
142
+ onSearchChange,
143
+ onSearchToggle,
144
+ onSearchClose,
145
+ onFilterToggle,
146
+ onToggleTracking,
147
+ onToggleFreeze,
148
+ onClear,
149
+ onOpenCopySettings,
150
+ isTracking,
151
+ isFrozen,
152
+ activeFilterCount,
153
+ hasRenders,
154
+ searchInputRef
155
+ }) {
156
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_sharedUi.ModalHeader, {
157
+ children: [onBack && /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Navigation, {
158
+ onBack: onBack
159
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Content, {
160
+ title: "",
161
+ children: isSearchActive ? /*#__PURE__*/(0, _jsxRuntime.jsx)(SearchSection, {
162
+ isActive: isSearchActive,
163
+ searchText: searchText,
164
+ onSearchChange: onSearchChange,
165
+ onSearchClose: onSearchClose,
166
+ searchInputRef: searchInputRef
167
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_StatsDisplay.StatsDisplay, {})
168
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(HeaderActions, {
169
+ onSearchToggle: onSearchToggle,
170
+ onFilterToggle: onFilterToggle,
171
+ onToggleTracking: onToggleTracking,
172
+ onToggleFreeze: onToggleFreeze,
173
+ onClear: onClear,
174
+ onOpenCopySettings: onOpenCopySettings,
175
+ isTracking: isTracking,
176
+ isFrozen: isFrozen,
177
+ activeFilterCount: activeFilterCount,
178
+ hasRenders: hasRenders
179
+ })]
180
+ });
181
+ });
182
+
183
+ // ============================================================================
184
+ // Filter View Header
185
+ // ============================================================================
186
+
187
+ const FilterViewHeader = exports.FilterViewHeader = /*#__PURE__*/(0, _react.memo)(function FilterViewHeader({
188
+ onBack,
189
+ activeTab,
190
+ onTabChange,
191
+ activeFilterCount = 0
192
+ }) {
193
+ const tabs = [{
194
+ key: "filters",
195
+ label: `Filters${activeFilterCount > 0 ? ` (${activeFilterCount})` : ""}`
196
+ }, {
197
+ key: "settings",
198
+ label: "Settings"
199
+ }];
200
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_sharedUi.ModalHeader, {
201
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Navigation, {
202
+ onBack: onBack
203
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Content, {
204
+ title: "",
205
+ noMargin: true,
206
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.TabSelector, {
207
+ tabs: tabs,
208
+ activeTab: activeTab,
209
+ onTabChange: tab => onTabChange(tab),
210
+ testIDPrefix: "buoy-highlight-filter-tab"
211
+ })
212
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Actions, {})]
213
+ });
214
+ });
215
+
216
+ // ============================================================================
217
+ // Detail View Header
218
+ // ============================================================================
219
+
220
+ const DetailViewHeader = exports.DetailViewHeader = /*#__PURE__*/(0, _react.memo)(function DetailViewHeader({
221
+ onBack,
222
+ activeTab,
223
+ onTabChange,
224
+ hasHistory = true
225
+ }) {
226
+ const tabs = [{
227
+ key: "details",
228
+ label: "Details"
229
+ }, {
230
+ key: "history",
231
+ label: "History",
232
+ disabled: !hasHistory
233
+ }];
234
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_sharedUi.ModalHeader, {
235
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Navigation, {
236
+ onBack: onBack
237
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Content, {
238
+ title: "",
239
+ noMargin: true,
240
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.TabSelector, {
241
+ tabs: tabs,
242
+ activeTab: activeTab,
243
+ onTabChange: tab => onTabChange(tab),
244
+ testIDPrefix: "buoy-highlight-detail-tab"
245
+ })
246
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Actions, {})]
247
+ });
248
+ });
249
+
250
+ // ============================================================================
251
+ // Copy Settings View Header
252
+ // ============================================================================
253
+
254
+ const CopySettingsViewHeader = exports.CopySettingsViewHeader = /*#__PURE__*/(0, _react.memo)(function CopySettingsViewHeader({
255
+ onBack
256
+ }) {
257
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_sharedUi.ModalHeader, {
258
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Navigation, {
259
+ onBack: onBack
260
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Content, {
261
+ title: "Copy Settings",
262
+ testID: "buoy-highlight-copy-title"
263
+ })]
264
+ });
265
+ });
266
+
267
+ // ============================================================================
268
+ // Styles
269
+ // ============================================================================
270
+
271
+ const styles = _reactNative.StyleSheet.create({
272
+ headerActionButton: {
273
+ width: 32,
274
+ height: 32,
275
+ borderRadius: 8,
276
+ backgroundColor: _sharedUi.night.color.buttonSurface,
277
+ borderWidth: 1,
278
+ borderColor: _sharedUi.night.color.border,
279
+ alignItems: "center",
280
+ justifyContent: "center"
281
+ },
282
+ headerActionButtonDisabled: {
283
+ opacity: 0.55
284
+ },
285
+ activeFilterButton: {
286
+ backgroundColor: _sharedUi.night.color.accentSoft,
287
+ borderColor: _sharedUi.night.color.accentBorderStrong
288
+ },
289
+ freezeButton: {
290
+ backgroundColor: _sharedUi.night.color.accentSoft,
291
+ borderColor: _sharedUi.night.color.accentBorderStrong
292
+ }
293
+ });