@buoy-gg/highlight-updates 7.0.35 → 7.0.38

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