@buoy-gg/highlight-updates 3.0.1 → 4.0.1

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