@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,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}});
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
+ });