@buoy-gg/highlight-updates 2.1.4-beta.2 → 2.1.5
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.
- package/lib/commonjs/highlight-updates/HighlightUpdatesOverlay.js +1 -285
- package/lib/commonjs/highlight-updates/components/HighlightFilterView.js +1 -1371
- package/lib/commonjs/highlight-updates/components/HighlightUpdatesModal.js +1 -592
- package/lib/commonjs/highlight-updates/components/IdentifierBadge.js +1 -267
- package/lib/commonjs/highlight-updates/components/IsolatedRenderList.js +1 -178
- package/lib/commonjs/highlight-updates/components/ModalHeaderContent.js +1 -303
- package/lib/commonjs/highlight-updates/components/RenderCauseBadge.js +1 -500
- package/lib/commonjs/highlight-updates/components/RenderDetailView.js +1 -830
- package/lib/commonjs/highlight-updates/components/RenderHistoryViewer.js +1 -894
- package/lib/commonjs/highlight-updates/components/RenderListItem.js +1 -226
- package/lib/commonjs/highlight-updates/components/StatsDisplay.js +1 -70
- package/lib/commonjs/highlight-updates/components/index.js +1 -97
- package/lib/commonjs/highlight-updates/utils/HighlightUpdatesController.js +1 -1427
- package/lib/commonjs/highlight-updates/utils/PerformanceLogger.js +1 -359
- package/lib/commonjs/highlight-updates/utils/ProfilerInterceptor.js +1 -371
- package/lib/commonjs/highlight-updates/utils/RenderCauseDetector.js +1 -1828
- package/lib/commonjs/highlight-updates/utils/RenderTracker.js +1 -903
- package/lib/commonjs/highlight-updates/utils/ViewTypeMapper.js +1 -264
- package/lib/commonjs/highlight-updates/utils/renderExportFormatter.js +1 -58
- package/lib/commonjs/index.js +1 -311
- package/lib/commonjs/preset.js +1 -278
- package/lib/module/highlight-updates/HighlightUpdatesOverlay.js +1 -278
- package/lib/module/highlight-updates/components/HighlightFilterView.js +1 -1365
- package/lib/module/highlight-updates/components/HighlightUpdatesModal.js +1 -586
- package/lib/module/highlight-updates/components/IdentifierBadge.js +1 -259
- package/lib/module/highlight-updates/components/IsolatedRenderList.js +1 -174
- package/lib/module/highlight-updates/components/ModalHeaderContent.js +1 -298
- package/lib/module/highlight-updates/components/RenderCauseBadge.js +1 -491
- package/lib/module/highlight-updates/components/RenderDetailView.js +1 -826
- package/lib/module/highlight-updates/components/RenderHistoryViewer.js +1 -888
- package/lib/module/highlight-updates/components/RenderListItem.js +1 -221
- package/lib/module/highlight-updates/components/StatsDisplay.js +1 -67
- package/lib/module/highlight-updates/components/index.js +1 -16
- package/lib/module/highlight-updates/utils/HighlightUpdatesController.js +1 -1423
- package/lib/module/highlight-updates/utils/PerformanceLogger.js +1 -353
- package/lib/module/highlight-updates/utils/ProfilerInterceptor.js +1 -358
- package/lib/module/highlight-updates/utils/RenderCauseDetector.js +1 -1818
- package/lib/module/highlight-updates/utils/RenderTracker.js +1 -900
- package/lib/module/highlight-updates/utils/ViewTypeMapper.js +1 -255
- package/lib/module/highlight-updates/utils/renderExportFormatter.js +1 -54
- package/lib/module/index.js +1 -71
- package/lib/module/preset.js +1 -272
- package/package.json +7 -7
- package/lib/typescript/highlight-updates/HighlightUpdatesOverlay.d.ts.map +0 -1
- package/lib/typescript/highlight-updates/components/HighlightFilterView.d.ts.map +0 -1
- package/lib/typescript/highlight-updates/components/HighlightUpdatesModal.d.ts.map +0 -1
- package/lib/typescript/highlight-updates/components/IdentifierBadge.d.ts.map +0 -1
- package/lib/typescript/highlight-updates/components/IsolatedRenderList.d.ts.map +0 -1
- package/lib/typescript/highlight-updates/components/ModalHeaderContent.d.ts.map +0 -1
- package/lib/typescript/highlight-updates/components/RenderCauseBadge.d.ts.map +0 -1
- package/lib/typescript/highlight-updates/components/RenderDetailView.d.ts.map +0 -1
- package/lib/typescript/highlight-updates/components/RenderHistoryViewer.d.ts.map +0 -1
- package/lib/typescript/highlight-updates/components/RenderListItem.d.ts.map +0 -1
- package/lib/typescript/highlight-updates/components/StatsDisplay.d.ts.map +0 -1
- package/lib/typescript/highlight-updates/components/index.d.ts.map +0 -1
- package/lib/typescript/highlight-updates/utils/HighlightUpdatesController.d.ts.map +0 -1
- package/lib/typescript/highlight-updates/utils/PerformanceLogger.d.ts.map +0 -1
- package/lib/typescript/highlight-updates/utils/ProfilerInterceptor.d.ts.map +0 -1
- package/lib/typescript/highlight-updates/utils/RenderCauseDetector.d.ts.map +0 -1
- package/lib/typescript/highlight-updates/utils/RenderTracker.d.ts.map +0 -1
- package/lib/typescript/highlight-updates/utils/ViewTypeMapper.d.ts.map +0 -1
- package/lib/typescript/highlight-updates/utils/renderExportFormatter.d.ts.map +0 -1
- package/lib/typescript/index.d.ts.map +0 -1
- package/lib/typescript/preset.d.ts.map +0 -1
|
@@ -1,1371 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.HighlightFilterView = HighlightFilterView;
|
|
7
|
-
exports.default = void 0;
|
|
8
|
-
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
-
var _reactNative = require("react-native");
|
|
10
|
-
var _sharedUi = require("@buoy-gg/shared-ui");
|
|
11
|
-
var _IdentifierBadge = require("./IdentifierBadge");
|
|
12
|
-
var _jsxRuntime = require("react/jsx-runtime");
|
|
13
|
-
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); }
|
|
14
|
-
/**
|
|
15
|
-
* HighlightFilterView
|
|
16
|
-
*
|
|
17
|
-
* Simplified filter configuration for tracked component renders.
|
|
18
|
-
* Uses a badge-based approach where users select a filter type
|
|
19
|
-
* (Any, ViewType, testID, Component) then enter a value.
|
|
20
|
-
*/
|
|
21
|
-
|
|
22
|
-
// Use shared identifier config (FilterType is a subset of IdentifierType)
|
|
23
|
-
const getFilterConfig = type => _IdentifierBadge.IDENTIFIER_CONFIG[type];
|
|
24
|
-
|
|
25
|
-
// Filter types available for selection (all identifier types)
|
|
26
|
-
const FILTER_TYPES = ["any", "viewType", "testID", "nativeID", "component", "accessibilityLabel"];
|
|
27
|
-
|
|
28
|
-
// Type picker component
|
|
29
|
-
function TypePicker({
|
|
30
|
-
onSelect,
|
|
31
|
-
onCancel
|
|
32
|
-
}) {
|
|
33
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
34
|
-
nativeID: "__rn_buoy__type-picker",
|
|
35
|
-
style: styles.typePicker,
|
|
36
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
37
|
-
style: styles.typePickerRow,
|
|
38
|
-
children: FILTER_TYPES.map(type => {
|
|
39
|
-
const config = getFilterConfig(type);
|
|
40
|
-
const IconComponent = config.icon;
|
|
41
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
|
|
42
|
-
style: [styles.typeOption, {
|
|
43
|
-
backgroundColor: config.color + "15",
|
|
44
|
-
borderColor: config.color + "40"
|
|
45
|
-
}],
|
|
46
|
-
onPress: () => onSelect(type),
|
|
47
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(IconComponent, {
|
|
48
|
-
size: 14,
|
|
49
|
-
color: config.color
|
|
50
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
51
|
-
style: [styles.typeOptionText, {
|
|
52
|
-
color: config.color
|
|
53
|
-
}],
|
|
54
|
-
children: config.label
|
|
55
|
-
})]
|
|
56
|
-
}, type);
|
|
57
|
-
})
|
|
58
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
|
|
59
|
-
onPress: onCancel,
|
|
60
|
-
style: styles.typePickerCancel,
|
|
61
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.X, {
|
|
62
|
-
size: 16,
|
|
63
|
-
color: _sharedUi.buoyColors.textMuted
|
|
64
|
-
})
|
|
65
|
-
})]
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
// Pattern input with badge prefix
|
|
70
|
-
function PatternInput({
|
|
71
|
-
type,
|
|
72
|
-
onSubmit,
|
|
73
|
-
onCancel
|
|
74
|
-
}) {
|
|
75
|
-
const [value, setValue] = (0, _react.useState)("");
|
|
76
|
-
const config = getFilterConfig(type);
|
|
77
|
-
const handleSubmit = () => {
|
|
78
|
-
if (value.trim()) {
|
|
79
|
-
onSubmit(value.trim());
|
|
80
|
-
}
|
|
81
|
-
};
|
|
82
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
83
|
-
nativeID: "__rn_buoy__pattern-input",
|
|
84
|
-
style: styles.patternInputContainer,
|
|
85
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_IdentifierBadge.IdentifierBadge, {
|
|
86
|
-
type: type,
|
|
87
|
-
value: "",
|
|
88
|
-
badgeOnly: true,
|
|
89
|
-
compact: true
|
|
90
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TextInput, {
|
|
91
|
-
value: value,
|
|
92
|
-
onChangeText: setValue,
|
|
93
|
-
onSubmitEditing: handleSubmit,
|
|
94
|
-
placeholder: "Enter pattern...",
|
|
95
|
-
placeholderTextColor: _sharedUi.buoyColors.textMuted,
|
|
96
|
-
style: styles.patternInput,
|
|
97
|
-
autoFocus: true,
|
|
98
|
-
returnKeyType: "done",
|
|
99
|
-
autoCorrect: false,
|
|
100
|
-
autoCapitalize: "none"
|
|
101
|
-
}), value.trim() && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
|
|
102
|
-
onPress: handleSubmit,
|
|
103
|
-
style: [styles.addPatternButton, {
|
|
104
|
-
backgroundColor: config.color + "20"
|
|
105
|
-
}],
|
|
106
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
107
|
-
style: [styles.addPatternButtonText, {
|
|
108
|
-
color: config.color
|
|
109
|
-
}],
|
|
110
|
-
children: "Add"
|
|
111
|
-
})
|
|
112
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
|
|
113
|
-
onPress: onCancel,
|
|
114
|
-
style: styles.cancelButton,
|
|
115
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.X, {
|
|
116
|
-
size: 16,
|
|
117
|
-
color: _sharedUi.buoyColors.textMuted
|
|
118
|
-
})
|
|
119
|
-
})]
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
// Pattern chip (removable badge) - tap to remove
|
|
124
|
-
function PatternChip({
|
|
125
|
-
pattern,
|
|
126
|
-
onRemove
|
|
127
|
-
}) {
|
|
128
|
-
const config = getFilterConfig(pattern.type);
|
|
129
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
|
|
130
|
-
style: [styles.patternChip, {
|
|
131
|
-
borderColor: config.color + "40"
|
|
132
|
-
}],
|
|
133
|
-
onPress: onRemove,
|
|
134
|
-
activeOpacity: 0.7,
|
|
135
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
136
|
-
style: [styles.patternChipBadge, {
|
|
137
|
-
backgroundColor: config.color + "20"
|
|
138
|
-
}],
|
|
139
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
140
|
-
style: [styles.patternChipBadgeText, {
|
|
141
|
-
color: config.color
|
|
142
|
-
}],
|
|
143
|
-
children: config.shortLabel
|
|
144
|
-
})
|
|
145
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
146
|
-
style: styles.patternChipValue,
|
|
147
|
-
numberOfLines: 1,
|
|
148
|
-
children: pattern.value
|
|
149
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.X, {
|
|
150
|
-
size: 12,
|
|
151
|
-
color: _sharedUi.buoyColors.textMuted,
|
|
152
|
-
style: styles.patternChipX
|
|
153
|
-
})]
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
// Category type including "all"
|
|
158
|
-
|
|
159
|
-
// Config for "all" category
|
|
160
|
-
const ALL_CATEGORY_CONFIG = {
|
|
161
|
-
label: "All",
|
|
162
|
-
shortLabel: "All",
|
|
163
|
-
color: _sharedUi.buoyColors.textSecondary,
|
|
164
|
-
icon: _sharedUi.Box
|
|
165
|
-
};
|
|
166
|
-
|
|
167
|
-
// Category badge for horizontal scroll - always colored
|
|
168
|
-
function DetectedCategoryBadge({
|
|
169
|
-
filterType,
|
|
170
|
-
count,
|
|
171
|
-
isSelected,
|
|
172
|
-
onPress
|
|
173
|
-
}) {
|
|
174
|
-
// "all" has its own config
|
|
175
|
-
const config = filterType === "all" ? ALL_CATEGORY_CONFIG : getFilterConfig(filterType);
|
|
176
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
|
|
177
|
-
style: [styles.categoryBadge, {
|
|
178
|
-
backgroundColor: config.color + "15",
|
|
179
|
-
borderColor: isSelected ? config.color : config.color + "40",
|
|
180
|
-
borderWidth: isSelected ? 2 : 1
|
|
181
|
-
}],
|
|
182
|
-
onPress: onPress,
|
|
183
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(config.icon, {
|
|
184
|
-
size: 12,
|
|
185
|
-
color: config.color
|
|
186
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
187
|
-
style: [styles.categoryBadgeText, {
|
|
188
|
-
color: config.color
|
|
189
|
-
}],
|
|
190
|
-
children: config.label
|
|
191
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
192
|
-
style: [styles.categoryBadgeCountBubble, {
|
|
193
|
-
backgroundColor: config.color + "25"
|
|
194
|
-
}],
|
|
195
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
196
|
-
style: [styles.categoryBadgeCount, {
|
|
197
|
-
color: config.color
|
|
198
|
-
}],
|
|
199
|
-
children: count
|
|
200
|
-
})
|
|
201
|
-
})]
|
|
202
|
-
});
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
// Batch size presets for the slider
|
|
206
|
-
const BATCH_SIZE_PRESETS = [{
|
|
207
|
-
value: 20,
|
|
208
|
-
label: "20"
|
|
209
|
-
}, {
|
|
210
|
-
value: 50,
|
|
211
|
-
label: "50"
|
|
212
|
-
}, {
|
|
213
|
-
value: 100,
|
|
214
|
-
label: "100"
|
|
215
|
-
}, {
|
|
216
|
-
value: 150,
|
|
217
|
-
label: "150"
|
|
218
|
-
}, {
|
|
219
|
-
value: 250,
|
|
220
|
-
label: "250"
|
|
221
|
-
}, {
|
|
222
|
-
value: 500,
|
|
223
|
-
label: "500"
|
|
224
|
-
}];
|
|
225
|
-
|
|
226
|
-
// Debug log level presets
|
|
227
|
-
const DEBUG_LOG_LEVEL_PRESETS = [{
|
|
228
|
-
value: "off",
|
|
229
|
-
label: "Off",
|
|
230
|
-
description: "No debug logging"
|
|
231
|
-
}, {
|
|
232
|
-
value: "minimal",
|
|
233
|
-
label: "Minimal",
|
|
234
|
-
description: "Only hook value changes"
|
|
235
|
-
}, {
|
|
236
|
-
value: "verbose",
|
|
237
|
-
label: "Verbose",
|
|
238
|
-
description: "Component + cause + changes"
|
|
239
|
-
}, {
|
|
240
|
-
value: "all",
|
|
241
|
-
label: "All",
|
|
242
|
-
description: "Full fiber dump"
|
|
243
|
-
}];
|
|
244
|
-
function HighlightFilterView({
|
|
245
|
-
filters,
|
|
246
|
-
onFilterChange,
|
|
247
|
-
settings,
|
|
248
|
-
onSettingsChange,
|
|
249
|
-
availableProps,
|
|
250
|
-
activeTab
|
|
251
|
-
}) {
|
|
252
|
-
// UI state for add inputs
|
|
253
|
-
const [showIncludeTypePicker, setShowIncludeTypePicker] = (0, _react.useState)(false);
|
|
254
|
-
const [showExcludeTypePicker, setShowExcludeTypePicker] = (0, _react.useState)(false);
|
|
255
|
-
const [includeInputType, setIncludeInputType] = (0, _react.useState)(null);
|
|
256
|
-
const [excludeInputType, setExcludeInputType] = (0, _react.useState)(null);
|
|
257
|
-
|
|
258
|
-
// State for selected detected category (default to "all")
|
|
259
|
-
const [selectedCategory, setSelectedCategory] = (0, _react.useState)("all");
|
|
260
|
-
|
|
261
|
-
// State for action popup when tapping detected item
|
|
262
|
-
const [actionPopupItem, setActionPopupItem] = (0, _react.useState)(null);
|
|
263
|
-
|
|
264
|
-
// Get items for selected category with their filter type
|
|
265
|
-
const getItemsForCategory = category => {
|
|
266
|
-
switch (category) {
|
|
267
|
-
case "viewType":
|
|
268
|
-
return availableProps.viewTypes.map(v => ({
|
|
269
|
-
value: v,
|
|
270
|
-
type: "viewType"
|
|
271
|
-
}));
|
|
272
|
-
case "testID":
|
|
273
|
-
return availableProps.testIDs.map(v => ({
|
|
274
|
-
value: v,
|
|
275
|
-
type: "testID"
|
|
276
|
-
}));
|
|
277
|
-
case "nativeID":
|
|
278
|
-
return availableProps.nativeIDs.map(v => ({
|
|
279
|
-
value: v,
|
|
280
|
-
type: "nativeID"
|
|
281
|
-
}));
|
|
282
|
-
case "component":
|
|
283
|
-
return availableProps.componentNames.map(v => ({
|
|
284
|
-
value: v,
|
|
285
|
-
type: "component"
|
|
286
|
-
}));
|
|
287
|
-
case "accessibilityLabel":
|
|
288
|
-
return availableProps.accessibilityLabels.map(v => ({
|
|
289
|
-
value: v,
|
|
290
|
-
type: "accessibilityLabel"
|
|
291
|
-
}));
|
|
292
|
-
case "all":
|
|
293
|
-
default:
|
|
294
|
-
// Combine all items with their types
|
|
295
|
-
return [...availableProps.viewTypes.map(v => ({
|
|
296
|
-
value: v,
|
|
297
|
-
type: "viewType"
|
|
298
|
-
})), ...availableProps.testIDs.map(v => ({
|
|
299
|
-
value: v,
|
|
300
|
-
type: "testID"
|
|
301
|
-
})), ...availableProps.nativeIDs.map(v => ({
|
|
302
|
-
value: v,
|
|
303
|
-
type: "nativeID"
|
|
304
|
-
})), ...availableProps.componentNames.map(v => ({
|
|
305
|
-
value: v,
|
|
306
|
-
type: "component"
|
|
307
|
-
})), ...availableProps.accessibilityLabels.map(v => ({
|
|
308
|
-
value: v,
|
|
309
|
-
type: "accessibilityLabel"
|
|
310
|
-
}))];
|
|
311
|
-
}
|
|
312
|
-
};
|
|
313
|
-
const selectedItems = getItemsForCategory(selectedCategory);
|
|
314
|
-
const totalItemCount = availableProps.viewTypes.length + availableProps.testIDs.length + availableProps.nativeIDs.length + availableProps.componentNames.length + availableProps.accessibilityLabels.length;
|
|
315
|
-
|
|
316
|
-
// Add include pattern
|
|
317
|
-
const handleAddIncludePattern = (0, _react.useCallback)((type, value) => {
|
|
318
|
-
const newPatterns = [...filters.includePatterns, {
|
|
319
|
-
type,
|
|
320
|
-
value
|
|
321
|
-
}];
|
|
322
|
-
onFilterChange({
|
|
323
|
-
includePatterns: newPatterns
|
|
324
|
-
});
|
|
325
|
-
setIncludeInputType(null);
|
|
326
|
-
}, [filters.includePatterns, onFilterChange]);
|
|
327
|
-
|
|
328
|
-
// Add exclude pattern
|
|
329
|
-
const handleAddExcludePattern = (0, _react.useCallback)((type, value) => {
|
|
330
|
-
const newPatterns = [...filters.excludePatterns, {
|
|
331
|
-
type,
|
|
332
|
-
value
|
|
333
|
-
}];
|
|
334
|
-
onFilterChange({
|
|
335
|
-
excludePatterns: newPatterns
|
|
336
|
-
});
|
|
337
|
-
setExcludeInputType(null);
|
|
338
|
-
}, [filters.excludePatterns, onFilterChange]);
|
|
339
|
-
|
|
340
|
-
// Remove include pattern
|
|
341
|
-
const handleRemoveIncludePattern = (0, _react.useCallback)(index => {
|
|
342
|
-
const newPatterns = filters.includePatterns.filter((_, i) => i !== index);
|
|
343
|
-
onFilterChange({
|
|
344
|
-
includePatterns: newPatterns
|
|
345
|
-
});
|
|
346
|
-
}, [filters.includePatterns, onFilterChange]);
|
|
347
|
-
|
|
348
|
-
// Remove exclude pattern
|
|
349
|
-
const handleRemoveExcludePattern = (0, _react.useCallback)(index => {
|
|
350
|
-
const newPatterns = filters.excludePatterns.filter((_, i) => i !== index);
|
|
351
|
-
onFilterChange({
|
|
352
|
-
excludePatterns: newPatterns
|
|
353
|
-
});
|
|
354
|
-
}, [filters.excludePatterns, onFilterChange]);
|
|
355
|
-
|
|
356
|
-
// Show action popup for detected item
|
|
357
|
-
const handleDetectedItemPress = (0, _react.useCallback)((type, value) => {
|
|
358
|
-
setActionPopupItem({
|
|
359
|
-
type,
|
|
360
|
-
value
|
|
361
|
-
});
|
|
362
|
-
}, []);
|
|
363
|
-
|
|
364
|
-
// Add to include from popup
|
|
365
|
-
const handlePopupInclude = (0, _react.useCallback)(() => {
|
|
366
|
-
if (actionPopupItem) {
|
|
367
|
-
handleAddIncludePattern(actionPopupItem.type, actionPopupItem.value);
|
|
368
|
-
setActionPopupItem(null);
|
|
369
|
-
}
|
|
370
|
-
}, [actionPopupItem, handleAddIncludePattern]);
|
|
371
|
-
|
|
372
|
-
// Add to exclude from popup
|
|
373
|
-
const handlePopupExclude = (0, _react.useCallback)(() => {
|
|
374
|
-
if (actionPopupItem) {
|
|
375
|
-
handleAddExcludePattern(actionPopupItem.type, actionPopupItem.value);
|
|
376
|
-
setActionPopupItem(null);
|
|
377
|
-
}
|
|
378
|
-
}, [actionPopupItem, handleAddExcludePattern]);
|
|
379
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
380
|
-
style: styles.container,
|
|
381
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ScrollView, {
|
|
382
|
-
nativeID: "__rn_buoy__filter-view",
|
|
383
|
-
style: styles.scrollView,
|
|
384
|
-
contentContainerStyle: styles.scrollContent,
|
|
385
|
-
showsVerticalScrollIndicator: false,
|
|
386
|
-
children: activeTab === "filters" ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
387
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
388
|
-
style: styles.section,
|
|
389
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_sharedUi.SectionHeader, {
|
|
390
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.SectionHeader.Icon, {
|
|
391
|
-
icon: _sharedUi.Eye,
|
|
392
|
-
color: _sharedUi.buoyColors.success,
|
|
393
|
-
size: 12
|
|
394
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.SectionHeader.Title, {
|
|
395
|
-
children: "INCLUDE ONLY"
|
|
396
|
-
}), filters.includePatterns.length > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.SectionHeader.Badge, {
|
|
397
|
-
count: filters.includePatterns.length,
|
|
398
|
-
color: _sharedUi.buoyColors.success
|
|
399
|
-
})]
|
|
400
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
401
|
-
style: styles.sectionDescription,
|
|
402
|
-
children: "Show only components matching these patterns. If any are set, components must match at least one."
|
|
403
|
-
}), filters.includePatterns.length > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
404
|
-
style: styles.patternChips,
|
|
405
|
-
children: filters.includePatterns.map((pattern, index) => /*#__PURE__*/(0, _jsxRuntime.jsx)(PatternChip, {
|
|
406
|
-
pattern: pattern,
|
|
407
|
-
onRemove: () => handleRemoveIncludePattern(index)
|
|
408
|
-
}, `${pattern.type}-${pattern.value}-${index}`))
|
|
409
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
410
|
-
style: styles.addPatternRow,
|
|
411
|
-
children: showIncludeTypePicker ? /*#__PURE__*/(0, _jsxRuntime.jsx)(TypePicker, {
|
|
412
|
-
onSelect: type => {
|
|
413
|
-
setShowIncludeTypePicker(false);
|
|
414
|
-
setIncludeInputType(type);
|
|
415
|
-
},
|
|
416
|
-
onCancel: () => setShowIncludeTypePicker(false)
|
|
417
|
-
}) : includeInputType ? /*#__PURE__*/(0, _jsxRuntime.jsx)(PatternInput, {
|
|
418
|
-
type: includeInputType,
|
|
419
|
-
onSubmit: value => handleAddIncludePattern(includeInputType, value),
|
|
420
|
-
onCancel: () => setIncludeInputType(null)
|
|
421
|
-
}) : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
|
|
422
|
-
style: [styles.addButton, {
|
|
423
|
-
borderColor: _sharedUi.buoyColors.success + "40"
|
|
424
|
-
}],
|
|
425
|
-
onPress: () => setShowIncludeTypePicker(true),
|
|
426
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.Plus, {
|
|
427
|
-
size: 14,
|
|
428
|
-
color: _sharedUi.buoyColors.success
|
|
429
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
430
|
-
style: [styles.addButtonText, {
|
|
431
|
-
color: _sharedUi.buoyColors.success
|
|
432
|
-
}],
|
|
433
|
-
children: "Add include pattern"
|
|
434
|
-
})]
|
|
435
|
-
})
|
|
436
|
-
})]
|
|
437
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
438
|
-
style: styles.section,
|
|
439
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_sharedUi.SectionHeader, {
|
|
440
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.SectionHeader.Icon, {
|
|
441
|
-
icon: _sharedUi.Filter,
|
|
442
|
-
color: _sharedUi.buoyColors.primary,
|
|
443
|
-
size: 12
|
|
444
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.SectionHeader.Title, {
|
|
445
|
-
children: "EXCLUDE"
|
|
446
|
-
}), filters.excludePatterns.length > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.SectionHeader.Badge, {
|
|
447
|
-
count: filters.excludePatterns.length,
|
|
448
|
-
color: _sharedUi.buoyColors.primary
|
|
449
|
-
})]
|
|
450
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
451
|
-
style: styles.sectionDescription,
|
|
452
|
-
children: "Hide components matching these patterns from the list."
|
|
453
|
-
}), filters.excludePatterns.length > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
454
|
-
style: styles.patternChips,
|
|
455
|
-
children: filters.excludePatterns.map((pattern, index) => /*#__PURE__*/(0, _jsxRuntime.jsx)(PatternChip, {
|
|
456
|
-
pattern: pattern,
|
|
457
|
-
onRemove: () => handleRemoveExcludePattern(index)
|
|
458
|
-
}, `${pattern.type}-${pattern.value}-${index}`))
|
|
459
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
460
|
-
style: styles.addPatternRow,
|
|
461
|
-
children: showExcludeTypePicker ? /*#__PURE__*/(0, _jsxRuntime.jsx)(TypePicker, {
|
|
462
|
-
onSelect: type => {
|
|
463
|
-
setShowExcludeTypePicker(false);
|
|
464
|
-
setExcludeInputType(type);
|
|
465
|
-
},
|
|
466
|
-
onCancel: () => setShowExcludeTypePicker(false)
|
|
467
|
-
}) : excludeInputType ? /*#__PURE__*/(0, _jsxRuntime.jsx)(PatternInput, {
|
|
468
|
-
type: excludeInputType,
|
|
469
|
-
onSubmit: value => handleAddExcludePattern(excludeInputType, value),
|
|
470
|
-
onCancel: () => setExcludeInputType(null)
|
|
471
|
-
}) : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
|
|
472
|
-
style: [styles.addButton, {
|
|
473
|
-
borderColor: _sharedUi.buoyColors.primary + "40"
|
|
474
|
-
}],
|
|
475
|
-
onPress: () => setShowExcludeTypePicker(true),
|
|
476
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.Plus, {
|
|
477
|
-
size: 14,
|
|
478
|
-
color: _sharedUi.buoyColors.primary
|
|
479
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
480
|
-
style: [styles.addButtonText, {
|
|
481
|
-
color: _sharedUi.buoyColors.primary
|
|
482
|
-
}],
|
|
483
|
-
children: "Add exclude pattern"
|
|
484
|
-
})]
|
|
485
|
-
})
|
|
486
|
-
})]
|
|
487
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
488
|
-
style: styles.section,
|
|
489
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_sharedUi.SectionHeader, {
|
|
490
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.SectionHeader.Icon, {
|
|
491
|
-
icon: _sharedUi.Hash,
|
|
492
|
-
color: _sharedUi.buoyColors.warning,
|
|
493
|
-
size: 12
|
|
494
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.SectionHeader.Title, {
|
|
495
|
-
children: "RENDER COUNT RANGE"
|
|
496
|
-
}), (filters.minRenderCount !== undefined || filters.maxRenderCount !== undefined) && /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.SectionHeader.Badge, {
|
|
497
|
-
count: 1,
|
|
498
|
-
color: _sharedUi.buoyColors.warning
|
|
499
|
-
})]
|
|
500
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
501
|
-
style: styles.sectionDescription,
|
|
502
|
-
children: "Show only components with render count in a specific range."
|
|
503
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
504
|
-
nativeID: "__rn_buoy__render-count-range",
|
|
505
|
-
style: styles.renderCountRangeContainer,
|
|
506
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
507
|
-
style: styles.renderCountInputRow,
|
|
508
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
509
|
-
style: styles.renderCountInputGroup,
|
|
510
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
511
|
-
style: styles.renderCountLabel,
|
|
512
|
-
children: "Min"
|
|
513
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TextInput, {
|
|
514
|
-
value: filters.minRenderCount !== undefined ? String(filters.minRenderCount) : "",
|
|
515
|
-
onChangeText: text => {
|
|
516
|
-
const num = parseInt(text, 10);
|
|
517
|
-
if (text === "" || text === undefined) {
|
|
518
|
-
onFilterChange({
|
|
519
|
-
minRenderCount: undefined
|
|
520
|
-
});
|
|
521
|
-
} else if (!isNaN(num) && num >= 0) {
|
|
522
|
-
onFilterChange({
|
|
523
|
-
minRenderCount: num
|
|
524
|
-
});
|
|
525
|
-
}
|
|
526
|
-
},
|
|
527
|
-
placeholder: "0",
|
|
528
|
-
placeholderTextColor: _sharedUi.buoyColors.textMuted,
|
|
529
|
-
style: styles.renderCountInput,
|
|
530
|
-
keyboardType: "number-pad",
|
|
531
|
-
returnKeyType: "done"
|
|
532
|
-
})]
|
|
533
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
534
|
-
style: styles.renderCountSeparator,
|
|
535
|
-
children: "to"
|
|
536
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
537
|
-
style: styles.renderCountInputGroup,
|
|
538
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
539
|
-
style: styles.renderCountLabel,
|
|
540
|
-
children: "Max"
|
|
541
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TextInput, {
|
|
542
|
-
value: filters.maxRenderCount !== undefined ? String(filters.maxRenderCount) : "",
|
|
543
|
-
onChangeText: text => {
|
|
544
|
-
const num = parseInt(text, 10);
|
|
545
|
-
if (text === "" || text === undefined) {
|
|
546
|
-
onFilterChange({
|
|
547
|
-
maxRenderCount: undefined
|
|
548
|
-
});
|
|
549
|
-
} else if (!isNaN(num) && num >= 0) {
|
|
550
|
-
onFilterChange({
|
|
551
|
-
maxRenderCount: num
|
|
552
|
-
});
|
|
553
|
-
}
|
|
554
|
-
},
|
|
555
|
-
placeholder: "\u221E",
|
|
556
|
-
placeholderTextColor: _sharedUi.buoyColors.textMuted,
|
|
557
|
-
style: styles.renderCountInput,
|
|
558
|
-
keyboardType: "number-pad",
|
|
559
|
-
returnKeyType: "done"
|
|
560
|
-
})]
|
|
561
|
-
})]
|
|
562
|
-
}), (filters.minRenderCount !== undefined || filters.maxRenderCount !== undefined) && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
|
|
563
|
-
style: styles.clearRangeButton,
|
|
564
|
-
onPress: () => onFilterChange({
|
|
565
|
-
minRenderCount: undefined,
|
|
566
|
-
maxRenderCount: undefined
|
|
567
|
-
}),
|
|
568
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.X, {
|
|
569
|
-
size: 12,
|
|
570
|
-
color: _sharedUi.buoyColors.warning
|
|
571
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
572
|
-
style: styles.clearRangeButtonText,
|
|
573
|
-
children: "Clear Range"
|
|
574
|
-
})]
|
|
575
|
-
})]
|
|
576
|
-
})]
|
|
577
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
578
|
-
style: styles.section,
|
|
579
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_sharedUi.SectionHeader, {
|
|
580
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.SectionHeader.Icon, {
|
|
581
|
-
icon: _sharedUi.Box,
|
|
582
|
-
color: _sharedUi.buoyColors.textSecondary,
|
|
583
|
-
size: 12
|
|
584
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.SectionHeader.Title, {
|
|
585
|
-
children: "DETECTED ITEMS"
|
|
586
|
-
})]
|
|
587
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
588
|
-
style: styles.sectionDescription,
|
|
589
|
-
children: "Tap an item to quickly add it as an exclude pattern."
|
|
590
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.ScrollView, {
|
|
591
|
-
horizontal: true,
|
|
592
|
-
showsHorizontalScrollIndicator: false,
|
|
593
|
-
style: styles.categoryBadgeScroll,
|
|
594
|
-
contentContainerStyle: styles.categoryBadgeScrollContent,
|
|
595
|
-
children: [totalItemCount > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(DetectedCategoryBadge, {
|
|
596
|
-
filterType: "all",
|
|
597
|
-
count: totalItemCount,
|
|
598
|
-
isSelected: selectedCategory === "all",
|
|
599
|
-
onPress: () => setSelectedCategory("all")
|
|
600
|
-
}), availableProps.viewTypes.length > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(DetectedCategoryBadge, {
|
|
601
|
-
filterType: "viewType",
|
|
602
|
-
count: availableProps.viewTypes.length,
|
|
603
|
-
isSelected: selectedCategory === "viewType",
|
|
604
|
-
onPress: () => setSelectedCategory("viewType")
|
|
605
|
-
}), availableProps.testIDs.length > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(DetectedCategoryBadge, {
|
|
606
|
-
filterType: "testID",
|
|
607
|
-
count: availableProps.testIDs.length,
|
|
608
|
-
isSelected: selectedCategory === "testID",
|
|
609
|
-
onPress: () => setSelectedCategory("testID")
|
|
610
|
-
}), availableProps.nativeIDs.length > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(DetectedCategoryBadge, {
|
|
611
|
-
filterType: "nativeID",
|
|
612
|
-
count: availableProps.nativeIDs.length,
|
|
613
|
-
isSelected: selectedCategory === "nativeID",
|
|
614
|
-
onPress: () => setSelectedCategory("nativeID")
|
|
615
|
-
}), availableProps.componentNames.length > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(DetectedCategoryBadge, {
|
|
616
|
-
filterType: "component",
|
|
617
|
-
count: availableProps.componentNames.length,
|
|
618
|
-
isSelected: selectedCategory === "component",
|
|
619
|
-
onPress: () => setSelectedCategory("component")
|
|
620
|
-
}), availableProps.accessibilityLabels.length > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(DetectedCategoryBadge, {
|
|
621
|
-
filterType: "accessibilityLabel",
|
|
622
|
-
count: availableProps.accessibilityLabels.length,
|
|
623
|
-
isSelected: selectedCategory === "accessibilityLabel",
|
|
624
|
-
onPress: () => setSelectedCategory("accessibilityLabel")
|
|
625
|
-
})]
|
|
626
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
627
|
-
nativeID: "__rn_buoy__detected-items",
|
|
628
|
-
style: styles.detectedItemsContainer,
|
|
629
|
-
children: selectedItems.length > 0 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ScrollView, {
|
|
630
|
-
style: styles.detectedItemsScroll,
|
|
631
|
-
contentContainerStyle: styles.detectedItems,
|
|
632
|
-
nestedScrollEnabled: true,
|
|
633
|
-
showsVerticalScrollIndicator: true,
|
|
634
|
-
children: selectedItems.map(item => {
|
|
635
|
-
const itemConfig = getFilterConfig(item.type);
|
|
636
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
|
|
637
|
-
style: [styles.detectedItem, {
|
|
638
|
-
borderColor: itemConfig.color + "40"
|
|
639
|
-
}],
|
|
640
|
-
onPress: () => handleDetectedItemPress(item.type, item.value),
|
|
641
|
-
children: selectedCategory === "all" ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_IdentifierBadge.IdentifierBadge, {
|
|
642
|
-
type: item.type,
|
|
643
|
-
value: item.value,
|
|
644
|
-
compact: true,
|
|
645
|
-
shortLabel: true
|
|
646
|
-
}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
647
|
-
style: styles.detectedItemText,
|
|
648
|
-
numberOfLines: 1,
|
|
649
|
-
children: item.value
|
|
650
|
-
})
|
|
651
|
-
}, `${item.type}-${item.value}`);
|
|
652
|
-
})
|
|
653
|
-
}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
654
|
-
style: styles.emptyText,
|
|
655
|
-
children: "No items detected yet. Start tracking to see components here."
|
|
656
|
-
})
|
|
657
|
-
})]
|
|
658
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Modal, {
|
|
659
|
-
visible: actionPopupItem !== null,
|
|
660
|
-
transparent: true,
|
|
661
|
-
animationType: "fade",
|
|
662
|
-
onRequestClose: () => setActionPopupItem(null),
|
|
663
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
|
|
664
|
-
style: styles.modalOverlay,
|
|
665
|
-
onPress: () => setActionPopupItem(null),
|
|
666
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
667
|
-
style: styles.actionPopup,
|
|
668
|
-
children: actionPopupItem && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
669
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
670
|
-
style: styles.actionPopupHeader,
|
|
671
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_IdentifierBadge.IdentifierBadge, {
|
|
672
|
-
type: actionPopupItem.type,
|
|
673
|
-
value: actionPopupItem.value,
|
|
674
|
-
compact: true,
|
|
675
|
-
shortLabel: true
|
|
676
|
-
})
|
|
677
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
678
|
-
style: styles.actionPopupButtons,
|
|
679
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
|
|
680
|
-
style: [styles.actionPopupButton, styles.actionPopupInclude],
|
|
681
|
-
onPress: handlePopupInclude,
|
|
682
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.Eye, {
|
|
683
|
-
size: 16,
|
|
684
|
-
color: _sharedUi.buoyColors.success
|
|
685
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
686
|
-
style: [styles.actionPopupButtonText, {
|
|
687
|
-
color: _sharedUi.buoyColors.success
|
|
688
|
-
}],
|
|
689
|
-
children: "Include Only"
|
|
690
|
-
})]
|
|
691
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
|
|
692
|
-
style: [styles.actionPopupButton, styles.actionPopupExclude],
|
|
693
|
-
onPress: handlePopupExclude,
|
|
694
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.Filter, {
|
|
695
|
-
size: 16,
|
|
696
|
-
color: _sharedUi.buoyColors.primary
|
|
697
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
698
|
-
style: [styles.actionPopupButtonText, {
|
|
699
|
-
color: _sharedUi.buoyColors.primary
|
|
700
|
-
}],
|
|
701
|
-
children: "Exclude"
|
|
702
|
-
})]
|
|
703
|
-
})]
|
|
704
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
|
|
705
|
-
style: styles.actionPopupCancel,
|
|
706
|
-
onPress: () => setActionPopupItem(null),
|
|
707
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
708
|
-
style: styles.actionPopupCancelText,
|
|
709
|
-
children: "Cancel"
|
|
710
|
-
})
|
|
711
|
-
})]
|
|
712
|
-
})
|
|
713
|
-
})
|
|
714
|
-
})
|
|
715
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
716
|
-
style: styles.section,
|
|
717
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_sharedUi.SectionHeader, {
|
|
718
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.SectionHeader.Icon, {
|
|
719
|
-
icon: _sharedUi.Filter,
|
|
720
|
-
color: _sharedUi.buoyColors.textMuted,
|
|
721
|
-
size: 12
|
|
722
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.SectionHeader.Title, {
|
|
723
|
-
children: "HOW FILTERS WORK"
|
|
724
|
-
})]
|
|
725
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
726
|
-
style: styles.howItWorks,
|
|
727
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
|
|
728
|
-
style: styles.howItWorksText,
|
|
729
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
730
|
-
style: styles.howItWorksBold,
|
|
731
|
-
children: "Any:"
|
|
732
|
-
}), " Matches against all fields", "\n", /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
733
|
-
style: styles.howItWorksBold,
|
|
734
|
-
children: "ViewType:"
|
|
735
|
-
}), " Native component class (RCTView, RCTText)", "\n", /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
736
|
-
style: styles.howItWorksBold,
|
|
737
|
-
children: "testID:"
|
|
738
|
-
}), " Component testID prop", "\n", /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
739
|
-
style: styles.howItWorksBold,
|
|
740
|
-
children: "Component:"
|
|
741
|
-
}), " React component name from fiber"]
|
|
742
|
-
})
|
|
743
|
-
})]
|
|
744
|
-
})]
|
|
745
|
-
}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
|
|
746
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
747
|
-
style: styles.section,
|
|
748
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_sharedUi.SectionHeader, {
|
|
749
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.SectionHeader.Icon, {
|
|
750
|
-
icon: _sharedUi.Settings,
|
|
751
|
-
color: _sharedUi.buoyColors.textMuted,
|
|
752
|
-
size: 12
|
|
753
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.SectionHeader.Title, {
|
|
754
|
-
children: "SETTINGS"
|
|
755
|
-
})]
|
|
756
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
757
|
-
style: styles.settingsSection,
|
|
758
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
759
|
-
style: styles.settingItem,
|
|
760
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
761
|
-
style: styles.settingHeader,
|
|
762
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
763
|
-
style: styles.settingLabel,
|
|
764
|
-
children: "Show Render Count"
|
|
765
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Switch, {
|
|
766
|
-
value: settings.showRenderCount,
|
|
767
|
-
onValueChange: value => {
|
|
768
|
-
onSettingsChange({
|
|
769
|
-
showRenderCount: value
|
|
770
|
-
});
|
|
771
|
-
// If disabling render count, also disable cause tracking
|
|
772
|
-
if (!value && settings.trackRenderCauses) {
|
|
773
|
-
onSettingsChange({
|
|
774
|
-
trackRenderCauses: false
|
|
775
|
-
});
|
|
776
|
-
}
|
|
777
|
-
},
|
|
778
|
-
trackColor: {
|
|
779
|
-
false: _sharedUi.buoyColors.input,
|
|
780
|
-
true: _sharedUi.buoyColors.success + "80"
|
|
781
|
-
},
|
|
782
|
-
thumbColor: settings.showRenderCount ? _sharedUi.buoyColors.success : _sharedUi.buoyColors.textMuted
|
|
783
|
-
})]
|
|
784
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
785
|
-
style: styles.settingDescription,
|
|
786
|
-
children: "Display render count badge on highlights. Disabling improves performance by skipping count tracking."
|
|
787
|
-
})]
|
|
788
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
789
|
-
style: [styles.settingItem, styles.settingItemSpaced],
|
|
790
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
791
|
-
style: styles.settingHeader,
|
|
792
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
793
|
-
style: [styles.settingLabel, !settings.showRenderCount && styles.settingLabelDisabled],
|
|
794
|
-
children: "Track Render Causes"
|
|
795
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Switch, {
|
|
796
|
-
value: settings.trackRenderCauses,
|
|
797
|
-
onValueChange: value => onSettingsChange({
|
|
798
|
-
trackRenderCauses: value
|
|
799
|
-
}),
|
|
800
|
-
trackColor: {
|
|
801
|
-
false: _sharedUi.buoyColors.input,
|
|
802
|
-
true: _sharedUi.buoyColors.warning + "80"
|
|
803
|
-
},
|
|
804
|
-
thumbColor: settings.trackRenderCauses ? _sharedUi.buoyColors.warning : _sharedUi.buoyColors.textMuted,
|
|
805
|
-
disabled: !settings.showRenderCount
|
|
806
|
-
})]
|
|
807
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
|
|
808
|
-
style: styles.settingDescription,
|
|
809
|
-
children: ["Detect WHY components render (props, hooks, parent re-render).", !settings.showRenderCount && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
|
|
810
|
-
style: styles.settingWarning,
|
|
811
|
-
children: ["\n", "Requires \"Show Render Count\" to be enabled."]
|
|
812
|
-
})]
|
|
813
|
-
})]
|
|
814
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
815
|
-
style: [styles.settingItem, styles.settingItemSpaced],
|
|
816
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
817
|
-
style: styles.settingHeader,
|
|
818
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
819
|
-
style: [styles.settingLabel, !settings.trackRenderCauses && styles.settingLabelDisabled],
|
|
820
|
-
children: "Enable Render History"
|
|
821
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Switch, {
|
|
822
|
-
value: settings.enableRenderHistory,
|
|
823
|
-
onValueChange: value => onSettingsChange({
|
|
824
|
-
enableRenderHistory: value
|
|
825
|
-
}),
|
|
826
|
-
trackColor: {
|
|
827
|
-
false: _sharedUi.buoyColors.input,
|
|
828
|
-
true: _sharedUi.buoyColors.primary + "80"
|
|
829
|
-
},
|
|
830
|
-
thumbColor: settings.enableRenderHistory ? _sharedUi.buoyColors.primary : _sharedUi.buoyColors.textMuted,
|
|
831
|
-
disabled: !settings.trackRenderCauses
|
|
832
|
-
})]
|
|
833
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
|
|
834
|
-
style: styles.settingDescription,
|
|
835
|
-
children: ["Store render events for each component to view in the History tab.", !settings.trackRenderCauses && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
|
|
836
|
-
style: styles.settingWarning,
|
|
837
|
-
children: ["\n", "Requires \"Track Render Causes\" to be enabled."]
|
|
838
|
-
})]
|
|
839
|
-
})]
|
|
840
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
841
|
-
style: [styles.settingItem, styles.settingItemSpaced],
|
|
842
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
843
|
-
style: styles.settingHeader,
|
|
844
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
845
|
-
style: styles.settingLabel,
|
|
846
|
-
children: "Debug Log Level"
|
|
847
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
848
|
-
style: styles.settingValue,
|
|
849
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
850
|
-
style: [styles.settingValueText, settings.debugLogLevel !== "off" && {
|
|
851
|
-
color: _sharedUi.buoyColors.warning
|
|
852
|
-
}],
|
|
853
|
-
children: DEBUG_LOG_LEVEL_PRESETS.find(p => p.value === settings.debugLogLevel)?.label || "Off"
|
|
854
|
-
})
|
|
855
|
-
})]
|
|
856
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
857
|
-
style: styles.settingDescription,
|
|
858
|
-
children: "Control console logging verbosity for render cause detection."
|
|
859
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
860
|
-
style: styles.batchSizePresets,
|
|
861
|
-
children: DEBUG_LOG_LEVEL_PRESETS.map(preset => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
|
|
862
|
-
style: [styles.batchSizePreset, settings.debugLogLevel === preset.value && styles.batchSizePresetActive, preset.value !== "off" && settings.debugLogLevel === preset.value && {
|
|
863
|
-
backgroundColor: _sharedUi.buoyColors.warning + "30",
|
|
864
|
-
borderColor: _sharedUi.buoyColors.warning
|
|
865
|
-
}],
|
|
866
|
-
onPress: () => onSettingsChange({
|
|
867
|
-
debugLogLevel: preset.value
|
|
868
|
-
}),
|
|
869
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
870
|
-
style: [styles.batchSizePresetText, settings.debugLogLevel === preset.value && styles.batchSizePresetTextActive, preset.value !== "off" && settings.debugLogLevel === preset.value && {
|
|
871
|
-
color: _sharedUi.buoyColors.warning
|
|
872
|
-
}],
|
|
873
|
-
children: preset.label
|
|
874
|
-
})
|
|
875
|
-
}, preset.value))
|
|
876
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
|
|
877
|
-
style: styles.settingDescriptionMuted,
|
|
878
|
-
children: [DEBUG_LOG_LEVEL_PRESETS.find(p => p.value === settings.debugLogLevel)?.description, settings.debugLogLevel !== "off" && " • Check Metro console for logs"]
|
|
879
|
-
})]
|
|
880
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
881
|
-
style: [styles.settingItem, styles.settingItemSpaced],
|
|
882
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
883
|
-
style: styles.settingHeader,
|
|
884
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
885
|
-
style: styles.settingLabel,
|
|
886
|
-
children: "Batch Size"
|
|
887
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
888
|
-
style: styles.settingValue,
|
|
889
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
890
|
-
style: styles.settingValueText,
|
|
891
|
-
children: settings.batchSize
|
|
892
|
-
})
|
|
893
|
-
})]
|
|
894
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
895
|
-
style: styles.settingDescription,
|
|
896
|
-
children: "Maximum components to highlight per render update. Higher values capture more re-renders but may impact performance on complex screens."
|
|
897
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
898
|
-
style: styles.batchSizePresets,
|
|
899
|
-
children: BATCH_SIZE_PRESETS.map(preset => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
|
|
900
|
-
style: [styles.batchSizePreset, settings.batchSize === preset.value && styles.batchSizePresetActive],
|
|
901
|
-
onPress: () => onSettingsChange({
|
|
902
|
-
batchSize: preset.value
|
|
903
|
-
}),
|
|
904
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
905
|
-
style: [styles.batchSizePresetText, settings.batchSize === preset.value && styles.batchSizePresetTextActive],
|
|
906
|
-
children: preset.label
|
|
907
|
-
})
|
|
908
|
-
}, preset.value))
|
|
909
|
-
})]
|
|
910
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
911
|
-
style: [styles.settingItem, styles.settingItemSpaced],
|
|
912
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
913
|
-
style: styles.settingHeader,
|
|
914
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
915
|
-
style: styles.settingLabel,
|
|
916
|
-
children: "Highlight Dev Tools"
|
|
917
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Switch, {
|
|
918
|
-
value: !settings.excludeDevTools,
|
|
919
|
-
onValueChange: value => onSettingsChange({
|
|
920
|
-
excludeDevTools: !value
|
|
921
|
-
}),
|
|
922
|
-
trackColor: {
|
|
923
|
-
false: _sharedUi.buoyColors.input,
|
|
924
|
-
true: _sharedUi.buoyColors.primary + "80"
|
|
925
|
-
},
|
|
926
|
-
thumbColor: !settings.excludeDevTools ? _sharedUi.buoyColors.primary : _sharedUi.buoyColors.textMuted
|
|
927
|
-
})]
|
|
928
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
|
|
929
|
-
style: styles.settingDescription,
|
|
930
|
-
children: ["Show re-render highlights on Buoy dev tools (floating menu, modals, etc.). Useful for optimizing the dev tools themselves.", !settings.excludeDevTools && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
|
|
931
|
-
style: styles.settingWarning,
|
|
932
|
-
children: ["\n", "The highlight overlay is always excluded to prevent infinite loops."]
|
|
933
|
-
})]
|
|
934
|
-
})]
|
|
935
|
-
})]
|
|
936
|
-
})]
|
|
937
|
-
})
|
|
938
|
-
})
|
|
939
|
-
})
|
|
940
|
-
});
|
|
941
|
-
}
|
|
942
|
-
const styles = _reactNative.StyleSheet.create({
|
|
943
|
-
container: {
|
|
944
|
-
flex: 1,
|
|
945
|
-
backgroundColor: _sharedUi.buoyColors.base
|
|
946
|
-
},
|
|
947
|
-
scrollView: {
|
|
948
|
-
flex: 1
|
|
949
|
-
},
|
|
950
|
-
scrollContent: {
|
|
951
|
-
paddingHorizontal: 16,
|
|
952
|
-
paddingTop: 12,
|
|
953
|
-
paddingBottom: 32
|
|
954
|
-
},
|
|
955
|
-
section: {
|
|
956
|
-
backgroundColor: _sharedUi.buoyColors.card,
|
|
957
|
-
borderRadius: 8,
|
|
958
|
-
borderWidth: 1,
|
|
959
|
-
borderColor: _sharedUi.buoyColors.border + "50",
|
|
960
|
-
marginBottom: 12,
|
|
961
|
-
overflow: "hidden"
|
|
962
|
-
},
|
|
963
|
-
sectionDescription: {
|
|
964
|
-
fontSize: 11,
|
|
965
|
-
color: _sharedUi.buoyColors.textSecondary,
|
|
966
|
-
paddingHorizontal: 16,
|
|
967
|
-
paddingTop: 8,
|
|
968
|
-
lineHeight: 16
|
|
969
|
-
},
|
|
970
|
-
patternChips: {
|
|
971
|
-
flexDirection: "row",
|
|
972
|
-
flexWrap: "wrap",
|
|
973
|
-
gap: 8,
|
|
974
|
-
paddingHorizontal: 16,
|
|
975
|
-
paddingTop: 12
|
|
976
|
-
},
|
|
977
|
-
patternChip: {
|
|
978
|
-
flexDirection: "row",
|
|
979
|
-
alignItems: "center",
|
|
980
|
-
backgroundColor: _sharedUi.buoyColors.input,
|
|
981
|
-
borderRadius: 6,
|
|
982
|
-
borderWidth: 1,
|
|
983
|
-
paddingVertical: 4,
|
|
984
|
-
paddingLeft: 4,
|
|
985
|
-
paddingRight: 6,
|
|
986
|
-
maxWidth: "100%",
|
|
987
|
-
gap: 4
|
|
988
|
-
},
|
|
989
|
-
patternChipBadge: {
|
|
990
|
-
paddingVertical: 2,
|
|
991
|
-
paddingHorizontal: 5,
|
|
992
|
-
borderRadius: 4
|
|
993
|
-
},
|
|
994
|
-
patternChipBadgeText: {
|
|
995
|
-
fontSize: 9,
|
|
996
|
-
fontWeight: "700"
|
|
997
|
-
},
|
|
998
|
-
patternChipValue: {
|
|
999
|
-
fontSize: 11,
|
|
1000
|
-
color: _sharedUi.buoyColors.text,
|
|
1001
|
-
fontFamily: "monospace",
|
|
1002
|
-
flexShrink: 1
|
|
1003
|
-
},
|
|
1004
|
-
patternChipX: {
|
|
1005
|
-
marginLeft: 2
|
|
1006
|
-
},
|
|
1007
|
-
addPatternRow: {
|
|
1008
|
-
paddingHorizontal: 16,
|
|
1009
|
-
paddingTop: 12,
|
|
1010
|
-
paddingBottom: 16
|
|
1011
|
-
},
|
|
1012
|
-
addButton: {
|
|
1013
|
-
flexDirection: "row",
|
|
1014
|
-
alignItems: "center",
|
|
1015
|
-
justifyContent: "center",
|
|
1016
|
-
paddingVertical: 10,
|
|
1017
|
-
paddingHorizontal: 16,
|
|
1018
|
-
borderRadius: 8,
|
|
1019
|
-
borderWidth: 1,
|
|
1020
|
-
borderStyle: "dashed",
|
|
1021
|
-
gap: 6
|
|
1022
|
-
},
|
|
1023
|
-
addButtonText: {
|
|
1024
|
-
fontSize: 12,
|
|
1025
|
-
fontWeight: "500"
|
|
1026
|
-
},
|
|
1027
|
-
typePicker: {
|
|
1028
|
-
flexDirection: "row",
|
|
1029
|
-
alignItems: "center",
|
|
1030
|
-
gap: 8
|
|
1031
|
-
},
|
|
1032
|
-
typePickerRow: {
|
|
1033
|
-
flex: 1,
|
|
1034
|
-
flexDirection: "row",
|
|
1035
|
-
flexWrap: "wrap",
|
|
1036
|
-
gap: 8
|
|
1037
|
-
},
|
|
1038
|
-
typeOption: {
|
|
1039
|
-
flexDirection: "row",
|
|
1040
|
-
alignItems: "center",
|
|
1041
|
-
paddingVertical: 8,
|
|
1042
|
-
paddingHorizontal: 12,
|
|
1043
|
-
borderRadius: 6,
|
|
1044
|
-
borderWidth: 1,
|
|
1045
|
-
backgroundColor: _sharedUi.buoyColors.input,
|
|
1046
|
-
gap: 6
|
|
1047
|
-
},
|
|
1048
|
-
typeOptionText: {
|
|
1049
|
-
fontSize: 11,
|
|
1050
|
-
fontWeight: "600"
|
|
1051
|
-
},
|
|
1052
|
-
typePickerCancel: {
|
|
1053
|
-
padding: 8
|
|
1054
|
-
},
|
|
1055
|
-
patternInputContainer: {
|
|
1056
|
-
flexDirection: "row",
|
|
1057
|
-
alignItems: "center",
|
|
1058
|
-
backgroundColor: _sharedUi.buoyColors.input,
|
|
1059
|
-
borderRadius: 8,
|
|
1060
|
-
borderWidth: 1,
|
|
1061
|
-
borderColor: _sharedUi.buoyColors.border,
|
|
1062
|
-
paddingLeft: 4,
|
|
1063
|
-
paddingRight: 8,
|
|
1064
|
-
paddingVertical: 4,
|
|
1065
|
-
gap: 4
|
|
1066
|
-
},
|
|
1067
|
-
patternInput: {
|
|
1068
|
-
flex: 1,
|
|
1069
|
-
fontSize: 12,
|
|
1070
|
-
color: _sharedUi.buoyColors.text,
|
|
1071
|
-
paddingVertical: 6,
|
|
1072
|
-
paddingHorizontal: 4
|
|
1073
|
-
},
|
|
1074
|
-
addPatternButton: {
|
|
1075
|
-
paddingVertical: 6,
|
|
1076
|
-
paddingHorizontal: 10,
|
|
1077
|
-
borderRadius: 4
|
|
1078
|
-
},
|
|
1079
|
-
addPatternButtonText: {
|
|
1080
|
-
fontSize: 11,
|
|
1081
|
-
fontWeight: "600"
|
|
1082
|
-
},
|
|
1083
|
-
cancelButton: {
|
|
1084
|
-
padding: 4
|
|
1085
|
-
},
|
|
1086
|
-
categoryBadgeScroll: {
|
|
1087
|
-
marginTop: 12
|
|
1088
|
-
},
|
|
1089
|
-
categoryBadgeScrollContent: {
|
|
1090
|
-
paddingHorizontal: 16,
|
|
1091
|
-
gap: 8
|
|
1092
|
-
},
|
|
1093
|
-
categoryBadge: {
|
|
1094
|
-
flexDirection: "row",
|
|
1095
|
-
alignItems: "center",
|
|
1096
|
-
paddingVertical: 8,
|
|
1097
|
-
paddingLeft: 10,
|
|
1098
|
-
paddingRight: 6,
|
|
1099
|
-
borderRadius: 8,
|
|
1100
|
-
borderWidth: 1,
|
|
1101
|
-
gap: 6
|
|
1102
|
-
},
|
|
1103
|
-
categoryBadgeText: {
|
|
1104
|
-
fontSize: 11,
|
|
1105
|
-
fontWeight: "600"
|
|
1106
|
-
},
|
|
1107
|
-
categoryBadgeCountBubble: {
|
|
1108
|
-
paddingHorizontal: 6,
|
|
1109
|
-
paddingVertical: 2,
|
|
1110
|
-
borderRadius: 10,
|
|
1111
|
-
minWidth: 20,
|
|
1112
|
-
alignItems: "center"
|
|
1113
|
-
},
|
|
1114
|
-
categoryBadgeCount: {
|
|
1115
|
-
fontSize: 10,
|
|
1116
|
-
fontWeight: "600"
|
|
1117
|
-
},
|
|
1118
|
-
detectedItemsContainer: {
|
|
1119
|
-
paddingHorizontal: 16,
|
|
1120
|
-
paddingTop: 12,
|
|
1121
|
-
paddingBottom: 16
|
|
1122
|
-
},
|
|
1123
|
-
detectedItemsScroll: {
|
|
1124
|
-
maxHeight: 200
|
|
1125
|
-
},
|
|
1126
|
-
detectedItems: {
|
|
1127
|
-
flexDirection: "row",
|
|
1128
|
-
flexWrap: "wrap",
|
|
1129
|
-
gap: 8
|
|
1130
|
-
},
|
|
1131
|
-
detectedItem: {
|
|
1132
|
-
flexDirection: "row",
|
|
1133
|
-
alignItems: "center",
|
|
1134
|
-
backgroundColor: _sharedUi.buoyColors.input,
|
|
1135
|
-
borderRadius: 6,
|
|
1136
|
-
borderWidth: 1,
|
|
1137
|
-
paddingVertical: 6,
|
|
1138
|
-
paddingHorizontal: 10,
|
|
1139
|
-
gap: 6
|
|
1140
|
-
},
|
|
1141
|
-
detectedItemText: {
|
|
1142
|
-
fontSize: 11,
|
|
1143
|
-
color: _sharedUi.buoyColors.text,
|
|
1144
|
-
fontFamily: "monospace"
|
|
1145
|
-
},
|
|
1146
|
-
emptyText: {
|
|
1147
|
-
fontSize: 11,
|
|
1148
|
-
color: _sharedUi.buoyColors.textMuted,
|
|
1149
|
-
fontStyle: "italic",
|
|
1150
|
-
textAlign: "center",
|
|
1151
|
-
paddingVertical: 16,
|
|
1152
|
-
paddingHorizontal: 16
|
|
1153
|
-
},
|
|
1154
|
-
howItWorks: {
|
|
1155
|
-
paddingHorizontal: 16,
|
|
1156
|
-
paddingVertical: 12
|
|
1157
|
-
},
|
|
1158
|
-
howItWorksText: {
|
|
1159
|
-
fontSize: 11,
|
|
1160
|
-
color: _sharedUi.buoyColors.textMuted,
|
|
1161
|
-
lineHeight: 18,
|
|
1162
|
-
fontFamily: "monospace"
|
|
1163
|
-
},
|
|
1164
|
-
howItWorksBold: {
|
|
1165
|
-
fontWeight: "700",
|
|
1166
|
-
color: _sharedUi.buoyColors.textSecondary
|
|
1167
|
-
},
|
|
1168
|
-
// Action popup modal styles
|
|
1169
|
-
modalOverlay: {
|
|
1170
|
-
flex: 1,
|
|
1171
|
-
backgroundColor: "rgba(0, 0, 0, 0.5)",
|
|
1172
|
-
justifyContent: "center",
|
|
1173
|
-
alignItems: "center",
|
|
1174
|
-
padding: 32
|
|
1175
|
-
},
|
|
1176
|
-
actionPopup: {
|
|
1177
|
-
backgroundColor: _sharedUi.buoyColors.card,
|
|
1178
|
-
borderRadius: 12,
|
|
1179
|
-
borderWidth: 1,
|
|
1180
|
-
borderColor: _sharedUi.buoyColors.border,
|
|
1181
|
-
width: "100%",
|
|
1182
|
-
maxWidth: 300,
|
|
1183
|
-
overflow: "hidden"
|
|
1184
|
-
},
|
|
1185
|
-
actionPopupHeader: {
|
|
1186
|
-
padding: 16,
|
|
1187
|
-
borderBottomWidth: 1,
|
|
1188
|
-
borderBottomColor: _sharedUi.buoyColors.border + "50",
|
|
1189
|
-
alignItems: "center"
|
|
1190
|
-
},
|
|
1191
|
-
actionPopupButtons: {
|
|
1192
|
-
flexDirection: "row",
|
|
1193
|
-
padding: 12,
|
|
1194
|
-
gap: 8
|
|
1195
|
-
},
|
|
1196
|
-
actionPopupButton: {
|
|
1197
|
-
flex: 1,
|
|
1198
|
-
flexDirection: "row",
|
|
1199
|
-
alignItems: "center",
|
|
1200
|
-
justifyContent: "center",
|
|
1201
|
-
paddingVertical: 12,
|
|
1202
|
-
paddingHorizontal: 12,
|
|
1203
|
-
borderRadius: 8,
|
|
1204
|
-
gap: 8
|
|
1205
|
-
},
|
|
1206
|
-
actionPopupInclude: {
|
|
1207
|
-
backgroundColor: _sharedUi.buoyColors.success + "15"
|
|
1208
|
-
},
|
|
1209
|
-
actionPopupExclude: {
|
|
1210
|
-
backgroundColor: _sharedUi.buoyColors.primary + "15"
|
|
1211
|
-
},
|
|
1212
|
-
actionPopupButtonText: {
|
|
1213
|
-
fontSize: 13,
|
|
1214
|
-
fontWeight: "600"
|
|
1215
|
-
},
|
|
1216
|
-
actionPopupCancel: {
|
|
1217
|
-
padding: 12,
|
|
1218
|
-
borderTopWidth: 1,
|
|
1219
|
-
borderTopColor: _sharedUi.buoyColors.border + "50",
|
|
1220
|
-
alignItems: "center"
|
|
1221
|
-
},
|
|
1222
|
-
actionPopupCancelText: {
|
|
1223
|
-
fontSize: 13,
|
|
1224
|
-
color: _sharedUi.buoyColors.textMuted,
|
|
1225
|
-
fontWeight: "500"
|
|
1226
|
-
},
|
|
1227
|
-
// Settings styles
|
|
1228
|
-
settingsSection: {
|
|
1229
|
-
paddingHorizontal: 16,
|
|
1230
|
-
paddingTop: 8,
|
|
1231
|
-
paddingBottom: 16
|
|
1232
|
-
},
|
|
1233
|
-
settingItem: {
|
|
1234
|
-
gap: 8
|
|
1235
|
-
},
|
|
1236
|
-
settingItemSpaced: {
|
|
1237
|
-
marginTop: 16,
|
|
1238
|
-
paddingTop: 16,
|
|
1239
|
-
borderTopWidth: 1,
|
|
1240
|
-
borderTopColor: _sharedUi.buoyColors.border + "30"
|
|
1241
|
-
},
|
|
1242
|
-
settingHeader: {
|
|
1243
|
-
flexDirection: "row",
|
|
1244
|
-
alignItems: "center",
|
|
1245
|
-
justifyContent: "space-between"
|
|
1246
|
-
},
|
|
1247
|
-
settingLabel: {
|
|
1248
|
-
fontSize: 13,
|
|
1249
|
-
fontWeight: "600",
|
|
1250
|
-
color: _sharedUi.buoyColors.text
|
|
1251
|
-
},
|
|
1252
|
-
settingValue: {
|
|
1253
|
-
backgroundColor: _sharedUi.buoyColors.textMuted + "20",
|
|
1254
|
-
paddingHorizontal: 10,
|
|
1255
|
-
paddingVertical: 4,
|
|
1256
|
-
borderRadius: 6
|
|
1257
|
-
},
|
|
1258
|
-
settingValueText: {
|
|
1259
|
-
fontSize: 12,
|
|
1260
|
-
fontWeight: "700",
|
|
1261
|
-
color: _sharedUi.buoyColors.textMuted,
|
|
1262
|
-
fontFamily: "monospace"
|
|
1263
|
-
},
|
|
1264
|
-
settingDescription: {
|
|
1265
|
-
fontSize: 11,
|
|
1266
|
-
color: _sharedUi.buoyColors.textSecondary,
|
|
1267
|
-
lineHeight: 16
|
|
1268
|
-
},
|
|
1269
|
-
settingDescriptionMuted: {
|
|
1270
|
-
fontSize: 10,
|
|
1271
|
-
color: _sharedUi.buoyColors.textMuted,
|
|
1272
|
-
lineHeight: 14,
|
|
1273
|
-
marginTop: 4,
|
|
1274
|
-
fontStyle: "italic"
|
|
1275
|
-
},
|
|
1276
|
-
settingLabelDisabled: {
|
|
1277
|
-
color: _sharedUi.buoyColors.textMuted
|
|
1278
|
-
},
|
|
1279
|
-
settingWarning: {
|
|
1280
|
-
color: _sharedUi.buoyColors.warning,
|
|
1281
|
-
fontWeight: "500"
|
|
1282
|
-
},
|
|
1283
|
-
batchSizePresets: {
|
|
1284
|
-
flexDirection: "row",
|
|
1285
|
-
flexWrap: "wrap",
|
|
1286
|
-
gap: 8,
|
|
1287
|
-
marginTop: 4
|
|
1288
|
-
},
|
|
1289
|
-
batchSizePreset: {
|
|
1290
|
-
paddingVertical: 8,
|
|
1291
|
-
paddingHorizontal: 14,
|
|
1292
|
-
borderRadius: 6,
|
|
1293
|
-
backgroundColor: _sharedUi.buoyColors.input,
|
|
1294
|
-
borderWidth: 1,
|
|
1295
|
-
borderColor: _sharedUi.buoyColors.border + "50"
|
|
1296
|
-
},
|
|
1297
|
-
batchSizePresetActive: {
|
|
1298
|
-
backgroundColor: _sharedUi.buoyColors.textMuted + "20",
|
|
1299
|
-
borderColor: _sharedUi.buoyColors.textMuted
|
|
1300
|
-
},
|
|
1301
|
-
batchSizePresetText: {
|
|
1302
|
-
fontSize: 12,
|
|
1303
|
-
fontWeight: "500",
|
|
1304
|
-
color: _sharedUi.buoyColors.textSecondary,
|
|
1305
|
-
fontFamily: "monospace"
|
|
1306
|
-
},
|
|
1307
|
-
batchSizePresetTextActive: {
|
|
1308
|
-
color: _sharedUi.buoyColors.textMuted,
|
|
1309
|
-
fontWeight: "700"
|
|
1310
|
-
},
|
|
1311
|
-
// Render count range styles
|
|
1312
|
-
renderCountRangeContainer: {
|
|
1313
|
-
paddingHorizontal: 16,
|
|
1314
|
-
paddingTop: 12,
|
|
1315
|
-
paddingBottom: 16,
|
|
1316
|
-
gap: 12
|
|
1317
|
-
},
|
|
1318
|
-
renderCountInputRow: {
|
|
1319
|
-
flexDirection: "row",
|
|
1320
|
-
alignItems: "center",
|
|
1321
|
-
gap: 12
|
|
1322
|
-
},
|
|
1323
|
-
renderCountInputGroup: {
|
|
1324
|
-
flex: 1,
|
|
1325
|
-
gap: 4
|
|
1326
|
-
},
|
|
1327
|
-
renderCountLabel: {
|
|
1328
|
-
fontSize: 10,
|
|
1329
|
-
fontWeight: "600",
|
|
1330
|
-
color: _sharedUi.buoyColors.textMuted,
|
|
1331
|
-
textTransform: "uppercase",
|
|
1332
|
-
letterSpacing: 0.5
|
|
1333
|
-
},
|
|
1334
|
-
renderCountInput: {
|
|
1335
|
-
backgroundColor: _sharedUi.buoyColors.input,
|
|
1336
|
-
borderRadius: 8,
|
|
1337
|
-
borderWidth: 1,
|
|
1338
|
-
borderColor: _sharedUi.buoyColors.border,
|
|
1339
|
-
paddingVertical: 10,
|
|
1340
|
-
paddingHorizontal: 12,
|
|
1341
|
-
fontSize: 14,
|
|
1342
|
-
fontWeight: "600",
|
|
1343
|
-
color: _sharedUi.buoyColors.text,
|
|
1344
|
-
fontFamily: "monospace",
|
|
1345
|
-
textAlign: "center"
|
|
1346
|
-
},
|
|
1347
|
-
renderCountSeparator: {
|
|
1348
|
-
fontSize: 12,
|
|
1349
|
-
color: _sharedUi.buoyColors.textMuted,
|
|
1350
|
-
marginTop: 18
|
|
1351
|
-
},
|
|
1352
|
-
clearRangeButton: {
|
|
1353
|
-
flexDirection: "row",
|
|
1354
|
-
alignItems: "center",
|
|
1355
|
-
justifyContent: "center",
|
|
1356
|
-
paddingVertical: 8,
|
|
1357
|
-
paddingHorizontal: 12,
|
|
1358
|
-
borderRadius: 6,
|
|
1359
|
-
backgroundColor: _sharedUi.buoyColors.warning + "15",
|
|
1360
|
-
borderWidth: 1,
|
|
1361
|
-
borderColor: _sharedUi.buoyColors.warning + "40",
|
|
1362
|
-
gap: 6,
|
|
1363
|
-
alignSelf: "center"
|
|
1364
|
-
},
|
|
1365
|
-
clearRangeButtonText: {
|
|
1366
|
-
fontSize: 11,
|
|
1367
|
-
fontWeight: "600",
|
|
1368
|
-
color: _sharedUi.buoyColors.warning
|
|
1369
|
-
}
|
|
1370
|
-
});
|
|
1371
|
-
var _default = exports.default = HighlightFilterView;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.HighlightFilterView=HighlightFilterView,exports.default=void 0;var _react=_interopRequireWildcard(require("react")),_reactNative=require("react-native"),_sharedUi=require("@buoy-gg/shared-ui"),_IdentifierBadge=require("./IdentifierBadge"),_jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(e,t){if("function"==typeof WeakMap)var s=new WeakMap,i=new WeakMap;return(_interopRequireWildcard=function(e,t){if(!t&&e&&e.__esModule)return e;var r,o,n={__proto__:null,default:e};if(null===e||"object"!=typeof e&&"function"!=typeof e)return n;if(r=t?i:s){if(r.has(e))return r.get(e);r.set(e,n)}for(const t in e)"default"!==t&&{}.hasOwnProperty.call(e,t)&&((o=(r=Object.defineProperty)&&Object.getOwnPropertyDescriptor(e,t))&&(o.get||o.set)?r(n,t,o):n[t]=e[t]);return n})(e,t)}const getFilterConfig=e=>_IdentifierBadge.IDENTIFIER_CONFIG[e],FILTER_TYPES=["any","viewType","testID","nativeID","component","accessibilityLabel"];function TypePicker({onSelect:e,onCancel:t}){return(0,_jsxRuntime.jsxs)(_reactNative.View,{nativeID:"__rn_buoy__type-picker",style:styles.typePicker,children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.typePickerRow,children:FILTER_TYPES.map(t=>{const s=getFilterConfig(t),i=s.icon;return(0,_jsxRuntime.jsxs)(_reactNative.TouchableOpacity,{style:[styles.typeOption,{backgroundColor:s.color+"15",borderColor:s.color+"40"}],onPress:()=>e(t),children:[(0,_jsxRuntime.jsx)(i,{size:14,color:s.color}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.typeOptionText,{color:s.color}],children:s.label})]},t)})}),(0,_jsxRuntime.jsx)(_reactNative.TouchableOpacity,{onPress:t,style:styles.typePickerCancel,children:(0,_jsxRuntime.jsx)(_sharedUi.X,{size:16,color:_sharedUi.buoyColors.textMuted})})]})}function PatternInput({type:e,onSubmit:t,onCancel:s}){const[i,r]=(0,_react.useState)(""),o=getFilterConfig(e),n=()=>{i.trim()&&t(i.trim())};return(0,_jsxRuntime.jsxs)(_reactNative.View,{nativeID:"__rn_buoy__pattern-input",style:styles.patternInputContainer,children:[(0,_jsxRuntime.jsx)(_IdentifierBadge.IdentifierBadge,{type:e,value:"",badgeOnly:!0,compact:!0}),(0,_jsxRuntime.jsx)(_reactNative.TextInput,{value:i,onChangeText:r,onSubmitEditing:n,placeholder:"Enter pattern...",placeholderTextColor:_sharedUi.buoyColors.textMuted,style:styles.patternInput,autoFocus:!0,returnKeyType:"done",autoCorrect:!1,autoCapitalize:"none"}),i.trim()&&(0,_jsxRuntime.jsx)(_reactNative.TouchableOpacity,{onPress:n,style:[styles.addPatternButton,{backgroundColor:o.color+"20"}],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.addPatternButtonText,{color:o.color}],children:"Add"})}),(0,_jsxRuntime.jsx)(_reactNative.TouchableOpacity,{onPress:s,style:styles.cancelButton,children:(0,_jsxRuntime.jsx)(_sharedUi.X,{size:16,color:_sharedUi.buoyColors.textMuted})})]})}function PatternChip({pattern:e,onRemove:t}){const s=getFilterConfig(e.type);return(0,_jsxRuntime.jsxs)(_reactNative.TouchableOpacity,{style:[styles.patternChip,{borderColor:s.color+"40"}],onPress:t,activeOpacity:.7,children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:[styles.patternChipBadge,{backgroundColor:s.color+"20"}],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.patternChipBadgeText,{color:s.color}],children:s.shortLabel})}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.patternChipValue,numberOfLines:1,children:e.value}),(0,_jsxRuntime.jsx)(_sharedUi.X,{size:12,color:_sharedUi.buoyColors.textMuted,style:styles.patternChipX})]})}const ALL_CATEGORY_CONFIG={label:"All",shortLabel:"All",color:_sharedUi.buoyColors.textSecondary,icon:_sharedUi.Box};function DetectedCategoryBadge({filterType:e,count:t,isSelected:s,onPress:i}){const r="all"===e?ALL_CATEGORY_CONFIG:getFilterConfig(e);return(0,_jsxRuntime.jsxs)(_reactNative.TouchableOpacity,{style:[styles.categoryBadge,{backgroundColor:r.color+"15",borderColor:s?r.color:r.color+"40",borderWidth:s?2:1}],onPress:i,children:[(0,_jsxRuntime.jsx)(r.icon,{size:12,color:r.color}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.categoryBadgeText,{color:r.color}],children:r.label}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:[styles.categoryBadgeCountBubble,{backgroundColor:r.color+"25"}],children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.categoryBadgeCount,{color:r.color}],children:t})})]})}const BATCH_SIZE_PRESETS=[{value:20,label:"20"},{value:50,label:"50"},{value:100,label:"100"},{value:150,label:"150"},{value:250,label:"250"},{value:500,label:"500"}],DEBUG_LOG_LEVEL_PRESETS=[{value:"off",label:"Off",description:"No debug logging"},{value:"minimal",label:"Minimal",description:"Only hook value changes"},{value:"verbose",label:"Verbose",description:"Component + cause + changes"},{value:"all",label:"All",description:"Full fiber dump"}];function HighlightFilterView({filters:e,onFilterChange:t,settings:s,onSettingsChange:i,availableProps:r,activeTab:o}){const[n,a]=(0,_react.useState)(!1),[l,c]=(0,_react.useState)(!1),[d,u]=(0,_react.useState)(null),[y,x]=(0,_react.useState)(null),[_,h]=(0,_react.useState)("all"),[p,g]=(0,_react.useState)(null),m=(e=>{switch(e){case"viewType":return r.viewTypes.map(e=>({value:e,type:"viewType"}));case"testID":return r.testIDs.map(e=>({value:e,type:"testID"}));case"nativeID":return r.nativeIDs.map(e=>({value:e,type:"nativeID"}));case"component":return r.componentNames.map(e=>({value:e,type:"component"}));case"accessibilityLabel":return r.accessibilityLabels.map(e=>({value:e,type:"accessibilityLabel"}));default:return[...r.viewTypes.map(e=>({value:e,type:"viewType"})),...r.testIDs.map(e=>({value:e,type:"testID"})),...r.nativeIDs.map(e=>({value:e,type:"nativeID"})),...r.componentNames.map(e=>({value:e,type:"component"})),...r.accessibilityLabels.map(e=>({value:e,type:"accessibilityLabel"}))]}})(_),j=r.viewTypes.length+r.testIDs.length+r.nativeIDs.length+r.componentNames.length+r.accessibilityLabels.length,b=(0,_react.useCallback)((s,i)=>{const r=[...e.includePatterns,{type:s,value:i}];t({includePatterns:r}),u(null)},[e.includePatterns,t]),C=(0,_react.useCallback)((s,i)=>{const r=[...e.excludePatterns,{type:s,value:i}];t({excludePatterns:r}),x(null)},[e.excludePatterns,t]),v=(0,_react.useCallback)(s=>{const i=e.includePatterns.filter((e,t)=>t!==s);t({includePatterns:i})},[e.includePatterns,t]),R=(0,_react.useCallback)(s=>{const i=e.excludePatterns.filter((e,t)=>t!==s);t({excludePatterns:i})},[e.excludePatterns,t]),T=(0,_react.useCallback)((e,t)=>{g({type:e,value:t})},[]),f=(0,_react.useCallback)(()=>{p&&(b(p.type,p.value),g(null))},[p,b]),S=(0,_react.useCallback)(()=>{p&&(C(p.type,p.value),g(null))},[p,C]);return(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.container,children:(0,_jsxRuntime.jsx)(_reactNative.ScrollView,{nativeID:"__rn_buoy__filter-view",style:styles.scrollView,contentContainerStyle:styles.scrollContent,showsVerticalScrollIndicator:!1,children:"filters"===o?(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.section,children:[(0,_jsxRuntime.jsxs)(_sharedUi.SectionHeader,{children:[(0,_jsxRuntime.jsx)(_sharedUi.SectionHeader.Icon,{icon:_sharedUi.Eye,color:_sharedUi.buoyColors.success,size:12}),(0,_jsxRuntime.jsx)(_sharedUi.SectionHeader.Title,{children:"INCLUDE ONLY"}),e.includePatterns.length>0&&(0,_jsxRuntime.jsx)(_sharedUi.SectionHeader.Badge,{count:e.includePatterns.length,color:_sharedUi.buoyColors.success})]}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.sectionDescription,children:"Show only components matching these patterns. If any are set, components must match at least one."}),e.includePatterns.length>0&&(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.patternChips,children:e.includePatterns.map((e,t)=>(0,_jsxRuntime.jsx)(PatternChip,{pattern:e,onRemove:()=>v(t)},`${e.type}-${e.value}-${t}`))}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.addPatternRow,children:n?(0,_jsxRuntime.jsx)(TypePicker,{onSelect:e=>{a(!1),u(e)},onCancel:()=>a(!1)}):d?(0,_jsxRuntime.jsx)(PatternInput,{type:d,onSubmit:e=>b(d,e),onCancel:()=>u(null)}):(0,_jsxRuntime.jsxs)(_reactNative.TouchableOpacity,{style:[styles.addButton,{borderColor:_sharedUi.buoyColors.success+"40"}],onPress:()=>a(!0),children:[(0,_jsxRuntime.jsx)(_sharedUi.Plus,{size:14,color:_sharedUi.buoyColors.success}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.addButtonText,{color:_sharedUi.buoyColors.success}],children:"Add include pattern"})]})})]}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.section,children:[(0,_jsxRuntime.jsxs)(_sharedUi.SectionHeader,{children:[(0,_jsxRuntime.jsx)(_sharedUi.SectionHeader.Icon,{icon:_sharedUi.Filter,color:_sharedUi.buoyColors.primary,size:12}),(0,_jsxRuntime.jsx)(_sharedUi.SectionHeader.Title,{children:"EXCLUDE"}),e.excludePatterns.length>0&&(0,_jsxRuntime.jsx)(_sharedUi.SectionHeader.Badge,{count:e.excludePatterns.length,color:_sharedUi.buoyColors.primary})]}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.sectionDescription,children:"Hide components matching these patterns from the list."}),e.excludePatterns.length>0&&(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.patternChips,children:e.excludePatterns.map((e,t)=>(0,_jsxRuntime.jsx)(PatternChip,{pattern:e,onRemove:()=>R(t)},`${e.type}-${e.value}-${t}`))}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.addPatternRow,children:l?(0,_jsxRuntime.jsx)(TypePicker,{onSelect:e=>{c(!1),x(e)},onCancel:()=>c(!1)}):y?(0,_jsxRuntime.jsx)(PatternInput,{type:y,onSubmit:e=>C(y,e),onCancel:()=>x(null)}):(0,_jsxRuntime.jsxs)(_reactNative.TouchableOpacity,{style:[styles.addButton,{borderColor:_sharedUi.buoyColors.primary+"40"}],onPress:()=>c(!0),children:[(0,_jsxRuntime.jsx)(_sharedUi.Plus,{size:14,color:_sharedUi.buoyColors.primary}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.addButtonText,{color:_sharedUi.buoyColors.primary}],children:"Add exclude pattern"})]})})]}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.section,children:[(0,_jsxRuntime.jsxs)(_sharedUi.SectionHeader,{children:[(0,_jsxRuntime.jsx)(_sharedUi.SectionHeader.Icon,{icon:_sharedUi.Hash,color:_sharedUi.buoyColors.warning,size:12}),(0,_jsxRuntime.jsx)(_sharedUi.SectionHeader.Title,{children:"RENDER COUNT RANGE"}),(void 0!==e.minRenderCount||void 0!==e.maxRenderCount)&&(0,_jsxRuntime.jsx)(_sharedUi.SectionHeader.Badge,{count:1,color:_sharedUi.buoyColors.warning})]}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.sectionDescription,children:"Show only components with render count in a specific range."}),(0,_jsxRuntime.jsxs)(_reactNative.View,{nativeID:"__rn_buoy__render-count-range",style:styles.renderCountRangeContainer,children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.renderCountInputRow,children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.renderCountInputGroup,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.renderCountLabel,children:"Min"}),(0,_jsxRuntime.jsx)(_reactNative.TextInput,{value:void 0!==e.minRenderCount?String(e.minRenderCount):"",onChangeText:e=>{const s=parseInt(e,10);""===e||void 0===e?t({minRenderCount:void 0}):!isNaN(s)&&s>=0&&t({minRenderCount:s})},placeholder:"0",placeholderTextColor:_sharedUi.buoyColors.textMuted,style:styles.renderCountInput,keyboardType:"number-pad",returnKeyType:"done"})]}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.renderCountSeparator,children:"to"}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.renderCountInputGroup,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.renderCountLabel,children:"Max"}),(0,_jsxRuntime.jsx)(_reactNative.TextInput,{value:void 0!==e.maxRenderCount?String(e.maxRenderCount):"",onChangeText:e=>{const s=parseInt(e,10);""===e||void 0===e?t({maxRenderCount:void 0}):!isNaN(s)&&s>=0&&t({maxRenderCount:s})},placeholder:"∞",placeholderTextColor:_sharedUi.buoyColors.textMuted,style:styles.renderCountInput,keyboardType:"number-pad",returnKeyType:"done"})]})]}),(void 0!==e.minRenderCount||void 0!==e.maxRenderCount)&&(0,_jsxRuntime.jsxs)(_reactNative.TouchableOpacity,{style:styles.clearRangeButton,onPress:()=>t({minRenderCount:void 0,maxRenderCount:void 0}),children:[(0,_jsxRuntime.jsx)(_sharedUi.X,{size:12,color:_sharedUi.buoyColors.warning}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.clearRangeButtonText,children:"Clear Range"})]})]})]}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.section,children:[(0,_jsxRuntime.jsxs)(_sharedUi.SectionHeader,{children:[(0,_jsxRuntime.jsx)(_sharedUi.SectionHeader.Icon,{icon:_sharedUi.Box,color:_sharedUi.buoyColors.textSecondary,size:12}),(0,_jsxRuntime.jsx)(_sharedUi.SectionHeader.Title,{children:"DETECTED ITEMS"})]}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.sectionDescription,children:"Tap an item to quickly add it as an exclude pattern."}),(0,_jsxRuntime.jsxs)(_reactNative.ScrollView,{horizontal:!0,showsHorizontalScrollIndicator:!1,style:styles.categoryBadgeScroll,contentContainerStyle:styles.categoryBadgeScrollContent,children:[j>0&&(0,_jsxRuntime.jsx)(DetectedCategoryBadge,{filterType:"all",count:j,isSelected:"all"===_,onPress:()=>h("all")}),r.viewTypes.length>0&&(0,_jsxRuntime.jsx)(DetectedCategoryBadge,{filterType:"viewType",count:r.viewTypes.length,isSelected:"viewType"===_,onPress:()=>h("viewType")}),r.testIDs.length>0&&(0,_jsxRuntime.jsx)(DetectedCategoryBadge,{filterType:"testID",count:r.testIDs.length,isSelected:"testID"===_,onPress:()=>h("testID")}),r.nativeIDs.length>0&&(0,_jsxRuntime.jsx)(DetectedCategoryBadge,{filterType:"nativeID",count:r.nativeIDs.length,isSelected:"nativeID"===_,onPress:()=>h("nativeID")}),r.componentNames.length>0&&(0,_jsxRuntime.jsx)(DetectedCategoryBadge,{filterType:"component",count:r.componentNames.length,isSelected:"component"===_,onPress:()=>h("component")}),r.accessibilityLabels.length>0&&(0,_jsxRuntime.jsx)(DetectedCategoryBadge,{filterType:"accessibilityLabel",count:r.accessibilityLabels.length,isSelected:"accessibilityLabel"===_,onPress:()=>h("accessibilityLabel")})]}),(0,_jsxRuntime.jsx)(_reactNative.View,{nativeID:"__rn_buoy__detected-items",style:styles.detectedItemsContainer,children:m.length>0?(0,_jsxRuntime.jsx)(_reactNative.ScrollView,{style:styles.detectedItemsScroll,contentContainerStyle:styles.detectedItems,nestedScrollEnabled:!0,showsVerticalScrollIndicator:!0,children:m.map(e=>{const t=getFilterConfig(e.type);return(0,_jsxRuntime.jsx)(_reactNative.TouchableOpacity,{style:[styles.detectedItem,{borderColor:t.color+"40"}],onPress:()=>T(e.type,e.value),children:"all"===_?(0,_jsxRuntime.jsx)(_IdentifierBadge.IdentifierBadge,{type:e.type,value:e.value,compact:!0,shortLabel:!0}):(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.detectedItemText,numberOfLines:1,children:e.value})},`${e.type}-${e.value}`)})}):(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.emptyText,children:"No items detected yet. Start tracking to see components here."})})]}),(0,_jsxRuntime.jsx)(_reactNative.Modal,{visible:null!==p,transparent:!0,animationType:"fade",onRequestClose:()=>g(null),children:(0,_jsxRuntime.jsx)(_reactNative.Pressable,{style:styles.modalOverlay,onPress:()=>g(null),children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.actionPopup,children:p&&(0,_jsxRuntime.jsxs)(_jsxRuntime.Fragment,{children:[(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.actionPopupHeader,children:(0,_jsxRuntime.jsx)(_IdentifierBadge.IdentifierBadge,{type:p.type,value:p.value,compact:!0,shortLabel:!0})}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.actionPopupButtons,children:[(0,_jsxRuntime.jsxs)(_reactNative.TouchableOpacity,{style:[styles.actionPopupButton,styles.actionPopupInclude],onPress:f,children:[(0,_jsxRuntime.jsx)(_sharedUi.Eye,{size:16,color:_sharedUi.buoyColors.success}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.actionPopupButtonText,{color:_sharedUi.buoyColors.success}],children:"Include Only"})]}),(0,_jsxRuntime.jsxs)(_reactNative.TouchableOpacity,{style:[styles.actionPopupButton,styles.actionPopupExclude],onPress:S,children:[(0,_jsxRuntime.jsx)(_sharedUi.Filter,{size:16,color:_sharedUi.buoyColors.primary}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.actionPopupButtonText,{color:_sharedUi.buoyColors.primary}],children:"Exclude"})]})]}),(0,_jsxRuntime.jsx)(_reactNative.TouchableOpacity,{style:styles.actionPopupCancel,onPress:()=>g(null),children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.actionPopupCancelText,children:"Cancel"})})]})})})}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.section,children:[(0,_jsxRuntime.jsxs)(_sharedUi.SectionHeader,{children:[(0,_jsxRuntime.jsx)(_sharedUi.SectionHeader.Icon,{icon:_sharedUi.Filter,color:_sharedUi.buoyColors.textMuted,size:12}),(0,_jsxRuntime.jsx)(_sharedUi.SectionHeader.Title,{children:"HOW FILTERS WORK"})]}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.howItWorks,children:(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:styles.howItWorksText,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.howItWorksBold,children:"Any:"})," Matches against all fields","\n",(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.howItWorksBold,children:"ViewType:"})," Native component class (RCTView, RCTText)","\n",(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.howItWorksBold,children:"testID:"})," Component testID prop","\n",(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.howItWorksBold,children:"Component:"})," React component name from fiber"]})})]})]}):(0,_jsxRuntime.jsx)(_jsxRuntime.Fragment,{children:(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.section,children:[(0,_jsxRuntime.jsxs)(_sharedUi.SectionHeader,{children:[(0,_jsxRuntime.jsx)(_sharedUi.SectionHeader.Icon,{icon:_sharedUi.Settings,color:_sharedUi.buoyColors.textMuted,size:12}),(0,_jsxRuntime.jsx)(_sharedUi.SectionHeader.Title,{children:"SETTINGS"})]}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.settingsSection,children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.settingItem,children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.settingHeader,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.settingLabel,children:"Show Render Count"}),(0,_jsxRuntime.jsx)(_reactNative.Switch,{value:s.showRenderCount,onValueChange:e=>{i({showRenderCount:e}),!e&&s.trackRenderCauses&&i({trackRenderCauses:!1})},trackColor:{false:_sharedUi.buoyColors.input,true:_sharedUi.buoyColors.success+"80"},thumbColor:s.showRenderCount?_sharedUi.buoyColors.success:_sharedUi.buoyColors.textMuted})]}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.settingDescription,children:"Display render count badge on highlights. Disabling improves performance by skipping count tracking."})]}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[styles.settingItem,styles.settingItemSpaced],children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.settingHeader,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.settingLabel,!s.showRenderCount&&styles.settingLabelDisabled],children:"Track Render Causes"}),(0,_jsxRuntime.jsx)(_reactNative.Switch,{value:s.trackRenderCauses,onValueChange:e=>i({trackRenderCauses:e}),trackColor:{false:_sharedUi.buoyColors.input,true:_sharedUi.buoyColors.warning+"80"},thumbColor:s.trackRenderCauses?_sharedUi.buoyColors.warning:_sharedUi.buoyColors.textMuted,disabled:!s.showRenderCount})]}),(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:styles.settingDescription,children:["Detect WHY components render (props, hooks, parent re-render).",!s.showRenderCount&&(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:styles.settingWarning,children:["\n",'Requires "Show Render Count" to be enabled.']})]})]}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[styles.settingItem,styles.settingItemSpaced],children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.settingHeader,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.settingLabel,!s.trackRenderCauses&&styles.settingLabelDisabled],children:"Enable Render History"}),(0,_jsxRuntime.jsx)(_reactNative.Switch,{value:s.enableRenderHistory,onValueChange:e=>i({enableRenderHistory:e}),trackColor:{false:_sharedUi.buoyColors.input,true:_sharedUi.buoyColors.primary+"80"},thumbColor:s.enableRenderHistory?_sharedUi.buoyColors.primary:_sharedUi.buoyColors.textMuted,disabled:!s.trackRenderCauses})]}),(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:styles.settingDescription,children:["Store render events for each component to view in the History tab.",!s.trackRenderCauses&&(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:styles.settingWarning,children:["\n",'Requires "Track Render Causes" to be enabled.']})]})]}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[styles.settingItem,styles.settingItemSpaced],children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.settingHeader,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.settingLabel,children:"Debug Log Level"}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.settingValue,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.settingValueText,"off"!==s.debugLogLevel&&{color:_sharedUi.buoyColors.warning}],children:DEBUG_LOG_LEVEL_PRESETS.find(e=>e.value===s.debugLogLevel)?.label||"Off"})})]}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.settingDescription,children:"Control console logging verbosity for render cause detection."}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.batchSizePresets,children:DEBUG_LOG_LEVEL_PRESETS.map(e=>(0,_jsxRuntime.jsx)(_reactNative.TouchableOpacity,{style:[styles.batchSizePreset,s.debugLogLevel===e.value&&styles.batchSizePresetActive,"off"!==e.value&&s.debugLogLevel===e.value&&{backgroundColor:_sharedUi.buoyColors.warning+"30",borderColor:_sharedUi.buoyColors.warning}],onPress:()=>i({debugLogLevel:e.value}),children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.batchSizePresetText,s.debugLogLevel===e.value&&styles.batchSizePresetTextActive,"off"!==e.value&&s.debugLogLevel===e.value&&{color:_sharedUi.buoyColors.warning}],children:e.label})},e.value))}),(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:styles.settingDescriptionMuted,children:[DEBUG_LOG_LEVEL_PRESETS.find(e=>e.value===s.debugLogLevel)?.description,"off"!==s.debugLogLevel&&" • Check Metro console for logs"]})]}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[styles.settingItem,styles.settingItemSpaced],children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.settingHeader,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.settingLabel,children:"Batch Size"}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.settingValue,children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.settingValueText,children:s.batchSize})})]}),(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.settingDescription,children:"Maximum components to highlight per render update. Higher values capture more re-renders but may impact performance on complex screens."}),(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.batchSizePresets,children:BATCH_SIZE_PRESETS.map(e=>(0,_jsxRuntime.jsx)(_reactNative.TouchableOpacity,{style:[styles.batchSizePreset,s.batchSize===e.value&&styles.batchSizePresetActive],onPress:()=>i({batchSize:e.value}),children:(0,_jsxRuntime.jsx)(_reactNative.Text,{style:[styles.batchSizePresetText,s.batchSize===e.value&&styles.batchSizePresetTextActive],children:e.label})},e.value))})]}),(0,_jsxRuntime.jsxs)(_reactNative.View,{style:[styles.settingItem,styles.settingItemSpaced],children:[(0,_jsxRuntime.jsxs)(_reactNative.View,{style:styles.settingHeader,children:[(0,_jsxRuntime.jsx)(_reactNative.Text,{style:styles.settingLabel,children:"Highlight Dev Tools"}),(0,_jsxRuntime.jsx)(_reactNative.Switch,{value:!s.excludeDevTools,onValueChange:e=>i({excludeDevTools:!e}),trackColor:{false:_sharedUi.buoyColors.input,true:_sharedUi.buoyColors.primary+"80"},thumbColor:s.excludeDevTools?_sharedUi.buoyColors.textMuted:_sharedUi.buoyColors.primary})]}),(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:styles.settingDescription,children:["Show re-render highlights on Buoy dev tools (floating menu, modals, etc.). Useful for optimizing the dev tools themselves.",!s.excludeDevTools&&(0,_jsxRuntime.jsxs)(_reactNative.Text,{style:styles.settingWarning,children:["\n","The highlight overlay is always excluded to prevent infinite loops."]})]})]})]})]})})})})}const styles=_reactNative.StyleSheet.create({container:{flex:1,backgroundColor:_sharedUi.buoyColors.base},scrollView:{flex:1},scrollContent:{paddingHorizontal:16,paddingTop:12,paddingBottom:32},section:{backgroundColor:_sharedUi.buoyColors.card,borderRadius:8,borderWidth:1,borderColor:_sharedUi.buoyColors.border+"50",marginBottom:12,overflow:"hidden"},sectionDescription:{fontSize:11,color:_sharedUi.buoyColors.textSecondary,paddingHorizontal:16,paddingTop:8,lineHeight:16},patternChips:{flexDirection:"row",flexWrap:"wrap",gap:8,paddingHorizontal:16,paddingTop:12},patternChip:{flexDirection:"row",alignItems:"center",backgroundColor:_sharedUi.buoyColors.input,borderRadius:6,borderWidth:1,paddingVertical:4,paddingLeft:4,paddingRight:6,maxWidth:"100%",gap:4},patternChipBadge:{paddingVertical:2,paddingHorizontal:5,borderRadius:4},patternChipBadgeText:{fontSize:9,fontWeight:"700"},patternChipValue:{fontSize:11,color:_sharedUi.buoyColors.text,fontFamily:"monospace",flexShrink:1},patternChipX:{marginLeft:2},addPatternRow:{paddingHorizontal:16,paddingTop:12,paddingBottom:16},addButton:{flexDirection:"row",alignItems:"center",justifyContent:"center",paddingVertical:10,paddingHorizontal:16,borderRadius:8,borderWidth:1,borderStyle:"dashed",gap:6},addButtonText:{fontSize:12,fontWeight:"500"},typePicker:{flexDirection:"row",alignItems:"center",gap:8},typePickerRow:{flex:1,flexDirection:"row",flexWrap:"wrap",gap:8},typeOption:{flexDirection:"row",alignItems:"center",paddingVertical:8,paddingHorizontal:12,borderRadius:6,borderWidth:1,backgroundColor:_sharedUi.buoyColors.input,gap:6},typeOptionText:{fontSize:11,fontWeight:"600"},typePickerCancel:{padding:8},patternInputContainer:{flexDirection:"row",alignItems:"center",backgroundColor:_sharedUi.buoyColors.input,borderRadius:8,borderWidth:1,borderColor:_sharedUi.buoyColors.border,paddingLeft:4,paddingRight:8,paddingVertical:4,gap:4},patternInput:{flex:1,fontSize:12,color:_sharedUi.buoyColors.text,paddingVertical:6,paddingHorizontal:4},addPatternButton:{paddingVertical:6,paddingHorizontal:10,borderRadius:4},addPatternButtonText:{fontSize:11,fontWeight:"600"},cancelButton:{padding:4},categoryBadgeScroll:{marginTop:12},categoryBadgeScrollContent:{paddingHorizontal:16,gap:8},categoryBadge:{flexDirection:"row",alignItems:"center",paddingVertical:8,paddingLeft:10,paddingRight:6,borderRadius:8,borderWidth:1,gap:6},categoryBadgeText:{fontSize:11,fontWeight:"600"},categoryBadgeCountBubble:{paddingHorizontal:6,paddingVertical:2,borderRadius:10,minWidth:20,alignItems:"center"},categoryBadgeCount:{fontSize:10,fontWeight:"600"},detectedItemsContainer:{paddingHorizontal:16,paddingTop:12,paddingBottom:16},detectedItemsScroll:{maxHeight:200},detectedItems:{flexDirection:"row",flexWrap:"wrap",gap:8},detectedItem:{flexDirection:"row",alignItems:"center",backgroundColor:_sharedUi.buoyColors.input,borderRadius:6,borderWidth:1,paddingVertical:6,paddingHorizontal:10,gap:6},detectedItemText:{fontSize:11,color:_sharedUi.buoyColors.text,fontFamily:"monospace"},emptyText:{fontSize:11,color:_sharedUi.buoyColors.textMuted,fontStyle:"italic",textAlign:"center",paddingVertical:16,paddingHorizontal:16},howItWorks:{paddingHorizontal:16,paddingVertical:12},howItWorksText:{fontSize:11,color:_sharedUi.buoyColors.textMuted,lineHeight:18,fontFamily:"monospace"},howItWorksBold:{fontWeight:"700",color:_sharedUi.buoyColors.textSecondary},modalOverlay:{flex:1,backgroundColor:"rgba(0, 0, 0, 0.5)",justifyContent:"center",alignItems:"center",padding:32},actionPopup:{backgroundColor:_sharedUi.buoyColors.card,borderRadius:12,borderWidth:1,borderColor:_sharedUi.buoyColors.border,width:"100%",maxWidth:300,overflow:"hidden"},actionPopupHeader:{padding:16,borderBottomWidth:1,borderBottomColor:_sharedUi.buoyColors.border+"50",alignItems:"center"},actionPopupButtons:{flexDirection:"row",padding:12,gap:8},actionPopupButton:{flex:1,flexDirection:"row",alignItems:"center",justifyContent:"center",paddingVertical:12,paddingHorizontal:12,borderRadius:8,gap:8},actionPopupInclude:{backgroundColor:_sharedUi.buoyColors.success+"15"},actionPopupExclude:{backgroundColor:_sharedUi.buoyColors.primary+"15"},actionPopupButtonText:{fontSize:13,fontWeight:"600"},actionPopupCancel:{padding:12,borderTopWidth:1,borderTopColor:_sharedUi.buoyColors.border+"50",alignItems:"center"},actionPopupCancelText:{fontSize:13,color:_sharedUi.buoyColors.textMuted,fontWeight:"500"},settingsSection:{paddingHorizontal:16,paddingTop:8,paddingBottom:16},settingItem:{gap:8},settingItemSpaced:{marginTop:16,paddingTop:16,borderTopWidth:1,borderTopColor:_sharedUi.buoyColors.border+"30"},settingHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},settingLabel:{fontSize:13,fontWeight:"600",color:_sharedUi.buoyColors.text},settingValue:{backgroundColor:_sharedUi.buoyColors.textMuted+"20",paddingHorizontal:10,paddingVertical:4,borderRadius:6},settingValueText:{fontSize:12,fontWeight:"700",color:_sharedUi.buoyColors.textMuted,fontFamily:"monospace"},settingDescription:{fontSize:11,color:_sharedUi.buoyColors.textSecondary,lineHeight:16},settingDescriptionMuted:{fontSize:10,color:_sharedUi.buoyColors.textMuted,lineHeight:14,marginTop:4,fontStyle:"italic"},settingLabelDisabled:{color:_sharedUi.buoyColors.textMuted},settingWarning:{color:_sharedUi.buoyColors.warning,fontWeight:"500"},batchSizePresets:{flexDirection:"row",flexWrap:"wrap",gap:8,marginTop:4},batchSizePreset:{paddingVertical:8,paddingHorizontal:14,borderRadius:6,backgroundColor:_sharedUi.buoyColors.input,borderWidth:1,borderColor:_sharedUi.buoyColors.border+"50"},batchSizePresetActive:{backgroundColor:_sharedUi.buoyColors.textMuted+"20",borderColor:_sharedUi.buoyColors.textMuted},batchSizePresetText:{fontSize:12,fontWeight:"500",color:_sharedUi.buoyColors.textSecondary,fontFamily:"monospace"},batchSizePresetTextActive:{color:_sharedUi.buoyColors.textMuted,fontWeight:"700"},renderCountRangeContainer:{paddingHorizontal:16,paddingTop:12,paddingBottom:16,gap:12},renderCountInputRow:{flexDirection:"row",alignItems:"center",gap:12},renderCountInputGroup:{flex:1,gap:4},renderCountLabel:{fontSize:10,fontWeight:"600",color:_sharedUi.buoyColors.textMuted,textTransform:"uppercase",letterSpacing:.5},renderCountInput:{backgroundColor:_sharedUi.buoyColors.input,borderRadius:8,borderWidth:1,borderColor:_sharedUi.buoyColors.border,paddingVertical:10,paddingHorizontal:12,fontSize:14,fontWeight:"600",color:_sharedUi.buoyColors.text,fontFamily:"monospace",textAlign:"center"},renderCountSeparator:{fontSize:12,color:_sharedUi.buoyColors.textMuted,marginTop:18},clearRangeButton:{flexDirection:"row",alignItems:"center",justifyContent:"center",paddingVertical:8,paddingHorizontal:12,borderRadius:6,backgroundColor:_sharedUi.buoyColors.warning+"15",borderWidth:1,borderColor:_sharedUi.buoyColors.warning+"40",gap:6,alignSelf:"center"},clearRangeButtonText:{fontSize:11,fontWeight:"600",color:_sharedUi.buoyColors.warning}});var _default=exports.default=HighlightFilterView;
|