@buoy-gg/highlight-updates 2.1.11 → 2.1.13

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 (65) hide show
  1. package/LICENSE +58 -0
  2. package/lib/commonjs/highlight-updates/HighlightUpdatesOverlay.js +1 -285
  3. package/lib/commonjs/highlight-updates/components/HighlightFilterView.js +1 -1371
  4. package/lib/commonjs/highlight-updates/components/HighlightUpdatesModal.js +1 -591
  5. package/lib/commonjs/highlight-updates/components/IdentifierBadge.js +1 -267
  6. package/lib/commonjs/highlight-updates/components/IsolatedRenderList.js +1 -178
  7. package/lib/commonjs/highlight-updates/components/ModalHeaderContent.js +1 -303
  8. package/lib/commonjs/highlight-updates/components/RenderCauseBadge.js +1 -500
  9. package/lib/commonjs/highlight-updates/components/RenderDetailView.js +1 -830
  10. package/lib/commonjs/highlight-updates/components/RenderHistoryViewer.js +1 -894
  11. package/lib/commonjs/highlight-updates/components/RenderListItem.js +1 -220
  12. package/lib/commonjs/highlight-updates/components/StatsDisplay.js +1 -70
  13. package/lib/commonjs/highlight-updates/components/index.js +1 -97
  14. package/lib/commonjs/highlight-updates/utils/HighlightUpdatesController.js +1 -1435
  15. package/lib/commonjs/highlight-updates/utils/PerformanceLogger.js +1 -359
  16. package/lib/commonjs/highlight-updates/utils/ProfilerInterceptor.js +1 -371
  17. package/lib/commonjs/highlight-updates/utils/RenderCauseDetector.js +1 -1828
  18. package/lib/commonjs/highlight-updates/utils/RenderTracker.js +1 -903
  19. package/lib/commonjs/highlight-updates/utils/ViewTypeMapper.js +1 -264
  20. package/lib/commonjs/highlight-updates/utils/renderExportFormatter.js +1 -58
  21. package/lib/commonjs/index.js +1 -311
  22. package/lib/commonjs/preset.js +1 -278
  23. package/lib/module/highlight-updates/HighlightUpdatesOverlay.js +1 -278
  24. package/lib/module/highlight-updates/components/HighlightFilterView.js +1 -1365
  25. package/lib/module/highlight-updates/components/HighlightUpdatesModal.js +1 -585
  26. package/lib/module/highlight-updates/components/IdentifierBadge.js +1 -259
  27. package/lib/module/highlight-updates/components/IsolatedRenderList.js +1 -174
  28. package/lib/module/highlight-updates/components/ModalHeaderContent.js +1 -298
  29. package/lib/module/highlight-updates/components/RenderCauseBadge.js +1 -491
  30. package/lib/module/highlight-updates/components/RenderDetailView.js +1 -826
  31. package/lib/module/highlight-updates/components/RenderHistoryViewer.js +1 -888
  32. package/lib/module/highlight-updates/components/RenderListItem.js +1 -215
  33. package/lib/module/highlight-updates/components/StatsDisplay.js +1 -67
  34. package/lib/module/highlight-updates/components/index.js +1 -16
  35. package/lib/module/highlight-updates/utils/HighlightUpdatesController.js +1 -1431
  36. package/lib/module/highlight-updates/utils/PerformanceLogger.js +1 -353
  37. package/lib/module/highlight-updates/utils/ProfilerInterceptor.js +1 -358
  38. package/lib/module/highlight-updates/utils/RenderCauseDetector.js +1 -1818
  39. package/lib/module/highlight-updates/utils/RenderTracker.js +1 -900
  40. package/lib/module/highlight-updates/utils/ViewTypeMapper.js +1 -255
  41. package/lib/module/highlight-updates/utils/renderExportFormatter.js +1 -54
  42. package/lib/module/index.js +1 -71
  43. package/lib/module/preset.js +1 -272
  44. package/package.json +16 -16
  45. package/lib/typescript/highlight-updates/HighlightUpdatesOverlay.d.ts.map +0 -1
  46. package/lib/typescript/highlight-updates/components/HighlightFilterView.d.ts.map +0 -1
  47. package/lib/typescript/highlight-updates/components/HighlightUpdatesModal.d.ts.map +0 -1
  48. package/lib/typescript/highlight-updates/components/IdentifierBadge.d.ts.map +0 -1
  49. package/lib/typescript/highlight-updates/components/IsolatedRenderList.d.ts.map +0 -1
  50. package/lib/typescript/highlight-updates/components/ModalHeaderContent.d.ts.map +0 -1
  51. package/lib/typescript/highlight-updates/components/RenderCauseBadge.d.ts.map +0 -1
  52. package/lib/typescript/highlight-updates/components/RenderDetailView.d.ts.map +0 -1
  53. package/lib/typescript/highlight-updates/components/RenderHistoryViewer.d.ts.map +0 -1
  54. package/lib/typescript/highlight-updates/components/RenderListItem.d.ts.map +0 -1
  55. package/lib/typescript/highlight-updates/components/StatsDisplay.d.ts.map +0 -1
  56. package/lib/typescript/highlight-updates/components/index.d.ts.map +0 -1
  57. package/lib/typescript/highlight-updates/utils/HighlightUpdatesController.d.ts.map +0 -1
  58. package/lib/typescript/highlight-updates/utils/PerformanceLogger.d.ts.map +0 -1
  59. package/lib/typescript/highlight-updates/utils/ProfilerInterceptor.d.ts.map +0 -1
  60. package/lib/typescript/highlight-updates/utils/RenderCauseDetector.d.ts.map +0 -1
  61. package/lib/typescript/highlight-updates/utils/RenderTracker.d.ts.map +0 -1
  62. package/lib/typescript/highlight-updates/utils/ViewTypeMapper.d.ts.map +0 -1
  63. package/lib/typescript/highlight-updates/utils/renderExportFormatter.d.ts.map +0 -1
  64. package/lib/typescript/index.d.ts.map +0 -1
  65. package/lib/typescript/preset.d.ts.map +0 -1
@@ -1,303 +1 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.SearchSection = exports.MainListHeader = exports.HeaderActions = exports.FilterViewHeader = exports.DetailViewHeader = 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.jsxs)(_reactNative.View, {
34
- nativeID: "__rn_buoy__search-container",
35
- style: styles.headerSearchContainer,
36
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.Search, {
37
- size: 14,
38
- color: _sharedUi.buoyColors.textSecondary
39
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TextInput, {
40
- style: styles.headerSearchInput,
41
- placeholder: "Search testID, nativeID, component...",
42
- placeholderTextColor: _sharedUi.buoyColors.textMuted,
43
- value: searchText,
44
- onChangeText: onSearchChange,
45
- onSubmitEditing: onSearchClose,
46
- onBlur: onSearchClose,
47
- accessibilityLabel: "Search renders",
48
- autoCapitalize: "none",
49
- autoCorrect: false,
50
- returnKeyType: "search",
51
- autoFocus: true
52
- }), searchText.length > 0 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
53
- onPress: () => {
54
- onSearchChange("");
55
- onSearchClose();
56
- },
57
- style: styles.headerSearchClear,
58
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.X, {
59
- size: 14,
60
- color: _sharedUi.buoyColors.textSecondary
61
- })
62
- }) : null]
63
- });
64
- });
65
- const SearchSection = exports.SearchSection = SearchSectionInner;
66
-
67
- // ============================================================================
68
- // Header Actions - isolated component for action buttons
69
- // ============================================================================
70
-
71
- const HeaderActionsInner = /*#__PURE__*/(0, _react.memo)(function HeaderActions({
72
- onSearchToggle,
73
- onFilterToggle,
74
- onToggleTracking,
75
- onToggleFreeze,
76
- onClear,
77
- copyData,
78
- isTracking,
79
- isFrozen,
80
- activeFilterCount,
81
- hasRenders
82
- }) {
83
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_sharedUi.ModalHeader.Actions, {
84
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
85
- onPress: onSearchToggle,
86
- style: styles.headerActionButton,
87
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.Search, {
88
- size: 14,
89
- color: _sharedUi.buoyColors.textSecondary
90
- })
91
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
92
- onPress: onFilterToggle,
93
- style: [styles.headerActionButton, activeFilterCount > 0 && styles.activeFilterButton],
94
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.Filter, {
95
- size: 14,
96
- color: activeFilterCount > 0 ? _sharedUi.buoyColors.primary : _sharedUi.buoyColors.textMuted
97
- })
98
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.CopyButton, {
99
- value: copyData,
100
- size: 14,
101
- buttonStyle: hasRenders ? styles.headerActionButton : styles.headerActionButtonCopyDisabled,
102
- disabled: !hasRenders,
103
- colors: {
104
- idle: hasRenders ? _sharedUi.buoyColors.textSecondary : _sharedUi.buoyColors.textMuted
105
- }
106
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
107
- onPress: onToggleFreeze,
108
- style: [styles.headerActionButton, isFrozen && styles.freezeButton, !isTracking && styles.headerActionButtonDisabled],
109
- disabled: !isTracking,
110
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.Pause, {
111
- size: 14,
112
- color: !isTracking ? _sharedUi.buoyColors.textMuted : isFrozen ? _sharedUi.buoyColors.primary : _sharedUi.buoyColors.textMuted
113
- })
114
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.PowerToggleButton, {
115
- isEnabled: isTracking,
116
- onToggle: onToggleTracking,
117
- accessibilityLabel: "Toggle render tracking"
118
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
119
- onPress: onClear,
120
- style: [styles.headerActionButton, !hasRenders && styles.headerActionButtonDisabled],
121
- disabled: !hasRenders,
122
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.Trash2, {
123
- size: 14,
124
- color: hasRenders ? _sharedUi.buoyColors.textMuted : _sharedUi.buoyColors.textMuted
125
- })
126
- })]
127
- });
128
- });
129
- const HeaderActions = exports.HeaderActions = HeaderActionsInner;
130
-
131
- // ============================================================================
132
- // Main List Header - complete header for main list view
133
- // ============================================================================
134
-
135
- const MainListHeader = exports.MainListHeader = /*#__PURE__*/(0, _react.memo)(function MainListHeader({
136
- onBack,
137
- isSearchActive,
138
- searchText,
139
- onSearchChange,
140
- onSearchToggle,
141
- onSearchClose,
142
- onFilterToggle,
143
- onToggleTracking,
144
- onToggleFreeze,
145
- onClear,
146
- copyData,
147
- isTracking,
148
- isFrozen,
149
- activeFilterCount,
150
- hasRenders,
151
- searchInputRef
152
- }) {
153
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_sharedUi.ModalHeader, {
154
- children: [onBack && /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Navigation, {
155
- onBack: onBack
156
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Content, {
157
- title: "",
158
- children: isSearchActive ? /*#__PURE__*/(0, _jsxRuntime.jsx)(SearchSection, {
159
- isActive: isSearchActive,
160
- searchText: searchText,
161
- onSearchChange: onSearchChange,
162
- onSearchClose: onSearchClose,
163
- searchInputRef: searchInputRef
164
- }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_StatsDisplay.StatsDisplay, {})
165
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(HeaderActions, {
166
- onSearchToggle: onSearchToggle,
167
- onFilterToggle: onFilterToggle,
168
- onToggleTracking: onToggleTracking,
169
- onToggleFreeze: onToggleFreeze,
170
- onClear: onClear,
171
- copyData: copyData,
172
- isTracking: isTracking,
173
- isFrozen: isFrozen,
174
- activeFilterCount: activeFilterCount,
175
- hasRenders: hasRenders
176
- })]
177
- });
178
- });
179
-
180
- // ============================================================================
181
- // Filter View Header
182
- // ============================================================================
183
-
184
- const FilterViewHeader = exports.FilterViewHeader = /*#__PURE__*/(0, _react.memo)(function FilterViewHeader({
185
- onBack,
186
- activeTab,
187
- onTabChange,
188
- activeFilterCount = 0
189
- }) {
190
- const tabs = [{
191
- key: "filters",
192
- label: `Filters${activeFilterCount > 0 ? ` (${activeFilterCount})` : ""}`
193
- }, {
194
- key: "settings",
195
- label: "Settings"
196
- }];
197
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_sharedUi.ModalHeader, {
198
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Navigation, {
199
- onBack: onBack
200
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Content, {
201
- title: "",
202
- noMargin: true,
203
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.TabSelector, {
204
- tabs: tabs,
205
- activeTab: activeTab,
206
- onTabChange: tab => onTabChange(tab)
207
- })
208
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Actions, {})]
209
- });
210
- });
211
-
212
- // ============================================================================
213
- // Detail View Header
214
- // ============================================================================
215
-
216
- const DetailViewHeader = exports.DetailViewHeader = /*#__PURE__*/(0, _react.memo)(function DetailViewHeader({
217
- onBack,
218
- activeTab,
219
- onTabChange,
220
- hasHistory = true
221
- }) {
222
- const tabs = [{
223
- key: "details",
224
- label: "Details"
225
- }, {
226
- key: "history",
227
- label: "History",
228
- disabled: !hasHistory
229
- }];
230
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_sharedUi.ModalHeader, {
231
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Navigation, {
232
- onBack: onBack
233
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Content, {
234
- title: "",
235
- noMargin: true,
236
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.TabSelector, {
237
- tabs: tabs,
238
- activeTab: activeTab,
239
- onTabChange: tab => onTabChange(tab)
240
- })
241
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ModalHeader.Actions, {})]
242
- });
243
- });
244
-
245
- // ============================================================================
246
- // Styles
247
- // ============================================================================
248
-
249
- const styles = _reactNative.StyleSheet.create({
250
- headerSearchContainer: {
251
- flexDirection: "row",
252
- alignItems: "center",
253
- backgroundColor: _sharedUi.buoyColors.input,
254
- borderRadius: 10,
255
- borderWidth: 1,
256
- borderColor: _sharedUi.buoyColors.border,
257
- paddingHorizontal: 12,
258
- paddingVertical: 5
259
- },
260
- headerSearchInput: {
261
- flex: 1,
262
- color: _sharedUi.buoyColors.text,
263
- fontSize: 13,
264
- marginLeft: 6,
265
- paddingVertical: 2
266
- },
267
- headerSearchClear: {
268
- marginLeft: 6,
269
- padding: 4
270
- },
271
- headerActionButton: {
272
- width: 32,
273
- height: 32,
274
- borderRadius: 8,
275
- backgroundColor: _sharedUi.buoyColors.hover,
276
- borderWidth: 1,
277
- borderColor: _sharedUi.buoyColors.border,
278
- alignItems: "center",
279
- justifyContent: "center"
280
- },
281
- headerActionButtonDisabled: {
282
- opacity: 0.55
283
- },
284
- headerActionButtonCopyDisabled: {
285
- width: 32,
286
- height: 32,
287
- borderRadius: 8,
288
- backgroundColor: _sharedUi.buoyColors.hover,
289
- borderWidth: 1,
290
- borderColor: _sharedUi.buoyColors.border,
291
- alignItems: "center",
292
- justifyContent: "center",
293
- opacity: 0.55
294
- },
295
- activeFilterButton: {
296
- backgroundColor: _sharedUi.buoyColors.primary + "15",
297
- borderColor: _sharedUi.buoyColors.primary + "40"
298
- },
299
- freezeButton: {
300
- backgroundColor: _sharedUi.buoyColors.primary + "15",
301
- borderColor: _sharedUi.buoyColors.primary + "40"
302
- }
303
- });
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.SearchSection=exports.MainListHeader=exports.HeaderActions=exports.FilterViewHeader=exports.DetailViewHeader=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,r){if("function"==typeof WeakMap)var t=new WeakMap,o=new WeakMap;return(_interopRequireWildcard=function(e,r){if(!r&&e&&e.__esModule)return e;var a,i,s={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return s;if(a=r?o:t){if(a.has(e))return a.get(e);a.set(e,s)}for(const r in e)"default"!==r&&{}.hasOwnProperty.call(e,r)&&((i=(a=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,r))&&(i.get||i.set)?a(s,r,i):s[r]=e[r]);return s})(e,r)}const SearchSectionInner=(0,_react.memo)(function({isActive:e,searchText:r,onSearchChange:t,onSearchClose:o}){return e?(0,_jsxRuntime.jsxs)(_reactNative.View,{nativeID:"__rn_buoy__search-container",style:styles.headerSearchContainer,children:[(0,_jsxRuntime.jsx)(_sharedUi.Search,{size:14,color:_sharedUi.buoyColors.textSecondary}),(0,_jsxRuntime.jsx)(_reactNative.TextInput,{style:styles.headerSearchInput,placeholder:"Search testID, nativeID, component...",placeholderTextColor:_sharedUi.buoyColors.textMuted,value:r,onChangeText:t,onSubmitEditing:o,onBlur:o,accessibilityLabel:"Search renders",autoCapitalize:"none",autoCorrect:!1,returnKeyType:"search",autoFocus:!0}),r.length>0?(0,_jsxRuntime.jsx)(_reactNative.TouchableOpacity,{onPress:()=>{t(""),o()},style:styles.headerSearchClear,children:(0,_jsxRuntime.jsx)(_sharedUi.X,{size:14,color:_sharedUi.buoyColors.textSecondary})}):null]}):null}),SearchSection=exports.SearchSection=SearchSectionInner,HeaderActionsInner=(0,_react.memo)(function({onSearchToggle:e,onFilterToggle:r,onToggleTracking:t,onToggleFreeze:o,onClear:a,copyData:i,isTracking:s,isFrozen:n,activeFilterCount:l,hasRenders:d}){return(0,_jsxRuntime.jsxs)(_sharedUi.ModalHeader.Actions,{children:[(0,_jsxRuntime.jsx)(_reactNative.TouchableOpacity,{onPress:e,style:styles.headerActionButton,children:(0,_jsxRuntime.jsx)(_sharedUi.Search,{size:14,color:_sharedUi.buoyColors.textSecondary})}),(0,_jsxRuntime.jsx)(_reactNative.TouchableOpacity,{onPress:r,style:[styles.headerActionButton,l>0&&styles.activeFilterButton],children:(0,_jsxRuntime.jsx)(_sharedUi.Filter,{size:14,color:l>0?_sharedUi.buoyColors.primary:_sharedUi.buoyColors.textMuted})}),(0,_jsxRuntime.jsx)(_sharedUi.CopyButton,{value:i,size:14,buttonStyle:d?styles.headerActionButton:styles.headerActionButtonCopyDisabled,disabled:!d,colors:{idle:d?_sharedUi.buoyColors.textSecondary:_sharedUi.buoyColors.textMuted}}),(0,_jsxRuntime.jsx)(_reactNative.TouchableOpacity,{onPress:o,style:[styles.headerActionButton,n&&styles.freezeButton,!s&&styles.headerActionButtonDisabled],disabled:!s,children:(0,_jsxRuntime.jsx)(_sharedUi.Pause,{size:14,color:s&&n?_sharedUi.buoyColors.primary:_sharedUi.buoyColors.textMuted})}),(0,_jsxRuntime.jsx)(_sharedUi.PowerToggleButton,{isEnabled:s,onToggle:t,accessibilityLabel:"Toggle render tracking"}),(0,_jsxRuntime.jsx)(_reactNative.TouchableOpacity,{onPress:a,style:[styles.headerActionButton,!d&&styles.headerActionButtonDisabled],disabled:!d,children:(0,_jsxRuntime.jsx)(_sharedUi.Trash2,{size:14,color:_sharedUi.buoyColors.textMuted})})]})}),HeaderActions=exports.HeaderActions=HeaderActionsInner,MainListHeader=exports.MainListHeader=(0,_react.memo)(function({onBack:e,isSearchActive:r,searchText:t,onSearchChange:o,onSearchToggle:a,onSearchClose:i,onFilterToggle:s,onToggleTracking:n,onToggleFreeze:l,onClear:d,copyData:c,isTracking:u,isFrozen:h,activeFilterCount:_,hasRenders:x,searchInputRef:y}){return(0,_jsxRuntime.jsxs)(_sharedUi.ModalHeader,{children:[e&&(0,_jsxRuntime.jsx)(_sharedUi.ModalHeader.Navigation,{onBack:e}),(0,_jsxRuntime.jsx)(_sharedUi.ModalHeader.Content,{title:"",children:r?(0,_jsxRuntime.jsx)(SearchSection,{isActive:r,searchText:t,onSearchChange:o,onSearchClose:i,searchInputRef:y}):(0,_jsxRuntime.jsx)(_StatsDisplay.StatsDisplay,{})}),(0,_jsxRuntime.jsx)(HeaderActions,{onSearchToggle:a,onFilterToggle:s,onToggleTracking:n,onToggleFreeze:l,onClear:d,copyData:c,isTracking:u,isFrozen:h,activeFilterCount:_,hasRenders:x})]})}),FilterViewHeader=exports.FilterViewHeader=(0,_react.memo)(function({onBack:e,activeTab:r,onTabChange:t,activeFilterCount:o=0}){const a=[{key:"filters",label:"Filters"+(o>0?` (${o})`:"")},{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:r,onTabChange:e=>t(e)})}),(0,_jsxRuntime.jsx)(_sharedUi.ModalHeader.Actions,{})]})}),DetailViewHeader=exports.DetailViewHeader=(0,_react.memo)(function({onBack:e,activeTab:r,onTabChange:t,hasHistory:o=!0}){const a=[{key:"details",label:"Details"},{key:"history",label:"History",disabled:!o}];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:r,onTabChange:e=>t(e)})}),(0,_jsxRuntime.jsx)(_sharedUi.ModalHeader.Actions,{})]})}),styles=_reactNative.StyleSheet.create({headerSearchContainer:{flexDirection:"row",alignItems:"center",backgroundColor:_sharedUi.buoyColors.input,borderRadius:10,borderWidth:1,borderColor:_sharedUi.buoyColors.border,paddingHorizontal:12,paddingVertical:5},headerSearchInput:{flex:1,color:_sharedUi.buoyColors.text,fontSize:13,marginLeft:6,paddingVertical:2},headerSearchClear:{marginLeft:6,padding:4},headerActionButton:{width:32,height:32,borderRadius:8,backgroundColor:_sharedUi.buoyColors.hover,borderWidth:1,borderColor:_sharedUi.buoyColors.border,alignItems:"center",justifyContent:"center"},headerActionButtonDisabled:{opacity:.55},headerActionButtonCopyDisabled:{width:32,height:32,borderRadius:8,backgroundColor:_sharedUi.buoyColors.hover,borderWidth:1,borderColor:_sharedUi.buoyColors.border,alignItems:"center",justifyContent:"center",opacity:.55},activeFilterButton:{backgroundColor:_sharedUi.buoyColors.primary+"15",borderColor:_sharedUi.buoyColors.primary+"40"},freezeButton:{backgroundColor:_sharedUi.buoyColors.primary+"15",borderColor:_sharedUi.buoyColors.primary+"40"}});