@buoy-gg/shared-ui 2.1.15 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/lib/commonjs/clipboard/clipboard-impl.js +28 -2
  2. package/lib/commonjs/hooks/safe-area-impl.js +1 -1
  3. package/lib/commonjs/storage/devToolsStorageKeys.js +3 -1
  4. package/lib/commonjs/stores/BaseEventStore.js +48 -2
  5. package/lib/commonjs/ui/components/DynamicFilterView.js +15 -11
  6. package/lib/commonjs/ui/components/FilterComponents.js +9 -2
  7. package/lib/commonjs/ui/components/WindowControls.js +9 -3
  8. package/lib/module/clipboard/clipboard-impl.js +28 -2
  9. package/lib/module/hooks/safe-area-impl.js +1 -1
  10. package/lib/module/storage/devToolsStorageKeys.js +3 -1
  11. package/lib/module/stores/BaseEventStore.js +48 -2
  12. package/lib/module/ui/components/DynamicFilterView.js +15 -11
  13. package/lib/module/ui/components/FilterComponents.js +9 -2
  14. package/lib/module/ui/components/WindowControls.js +10 -4
  15. package/lib/typescript/commonjs/clipboard/clipboard-impl.d.ts +3 -2
  16. package/lib/typescript/commonjs/clipboard/clipboard-impl.d.ts.map +1 -1
  17. package/lib/typescript/commonjs/hooks/safe-area-impl.d.ts +1 -1
  18. package/lib/typescript/commonjs/storage/devToolsStorageKeys.d.ts +2 -0
  19. package/lib/typescript/commonjs/storage/devToolsStorageKeys.d.ts.map +1 -1
  20. package/lib/typescript/commonjs/stores/BaseEventStore.d.ts +19 -0
  21. package/lib/typescript/commonjs/stores/BaseEventStore.d.ts.map +1 -1
  22. package/lib/typescript/commonjs/ui/components/DynamicFilterView.d.ts +5 -1
  23. package/lib/typescript/commonjs/ui/components/DynamicFilterView.d.ts.map +1 -1
  24. package/lib/typescript/commonjs/ui/components/FilterComponents.d.ts +2 -1
  25. package/lib/typescript/commonjs/ui/components/FilterComponents.d.ts.map +1 -1
  26. package/lib/typescript/commonjs/ui/components/WindowControls.d.ts.map +1 -1
  27. package/lib/typescript/module/clipboard/clipboard-impl.d.ts +3 -2
  28. package/lib/typescript/module/clipboard/clipboard-impl.d.ts.map +1 -1
  29. package/lib/typescript/module/hooks/safe-area-impl.d.ts +1 -1
  30. package/lib/typescript/module/storage/devToolsStorageKeys.d.ts +2 -0
  31. package/lib/typescript/module/storage/devToolsStorageKeys.d.ts.map +1 -1
  32. package/lib/typescript/module/stores/BaseEventStore.d.ts +19 -0
  33. package/lib/typescript/module/stores/BaseEventStore.d.ts.map +1 -1
  34. package/lib/typescript/module/ui/components/DynamicFilterView.d.ts +5 -1
  35. package/lib/typescript/module/ui/components/DynamicFilterView.d.ts.map +1 -1
  36. package/lib/typescript/module/ui/components/FilterComponents.d.ts +2 -1
  37. package/lib/typescript/module/ui/components/FilterComponents.d.ts.map +1 -1
  38. package/lib/typescript/module/ui/components/WindowControls.d.ts.map +1 -1
  39. package/package.json +4 -4
@@ -20,9 +20,17 @@ exports.isClipboardAvailable = exports.clipboardType = exports.clipboardFunction
20
20
  * Fallback chain:
21
21
  * 1. expo-clipboard
22
22
  * 2. @react-native-clipboard/clipboard
23
- * 3. Graceful failure
23
+ * 3. Web clipboard API (navigator.clipboard)
24
+ * 4. Graceful failure
24
25
  */
25
26
 
27
+ // navigator.clipboard isn't in React Native's TS lib — narrow it manually
28
+
29
+ function getWebClipboard() {
30
+ if (typeof navigator === "undefined") return null;
31
+ const clipboard = navigator.clipboard;
32
+ return clipboard && typeof clipboard.writeText === "function" ? clipboard : null;
33
+ }
26
34
  // Grab module references at load time (top-level try-catch for Metro)
27
35
  // Always require both — we decide which actually works at call time
28
36
  let _expoClipboard = null;
@@ -67,6 +75,21 @@ async function detect(text) {
67
75
  return true;
68
76
  } catch {/* rn-clipboard not functional */}
69
77
  }
78
+
79
+ // 3. Web fallback (react-native-web / desktop dashboard / browsers)
80
+ const webClipboard = getWebClipboard();
81
+ if (webClipboard) {
82
+ try {
83
+ await webClipboard.writeText(text);
84
+ _detectedType = "web";
85
+ _clipboardFn = async t => {
86
+ await webClipboard.writeText(t);
87
+ return true;
88
+ };
89
+ _detected = true;
90
+ return true;
91
+ } catch {/* clipboard permission denied */}
92
+ }
70
93
  _detected = true;
71
94
  return false;
72
95
  }
@@ -76,7 +99,10 @@ const clipboardType = () => {
76
99
  exports.clipboardType = clipboardType;
77
100
  const isClipboardAvailable = () => {
78
101
  // Before first use, optimistically return true if we have a module ref
79
- if (!_detected) return _expoClipboard != null || _rnClipboard != null;
102
+ // or the web clipboard API is present
103
+ if (!_detected) {
104
+ return _expoClipboard != null || _rnClipboard != null || getWebClipboard() != null;
105
+ }
80
106
  return _clipboardFn != null;
81
107
  };
82
108
  exports.isClipboardAvailable = isClipboardAvailable;
@@ -7,7 +7,7 @@ exports.useNativeSafeAreaInsets = exports.safeAreaType = exports.hasSafeAreaPack
7
7
  /**
8
8
  * Auto-generated safe area implementation
9
9
  * Detected: none
10
- * Generated at: 2026-05-06T23:35:45.728Z
10
+ * Generated at: 2026-06-12T23:17:33.323Z
11
11
  *
12
12
  * DO NOT EDIT - This file is generated by scripts/detect-safe-area.js
13
13
  *
@@ -59,7 +59,9 @@ const devToolsStorageKeys = exports.devToolsStorageKeys = {
59
59
  dial: {
60
60
  root: () => `${devToolsStorageKeys.base}_dial`,
61
61
  /** Whether dial is open/visible */
62
- isOpen: () => `${devToolsStorageKeys.dial.root()}_is_open`
62
+ isOpen: () => `${devToolsStorageKeys.dial.root()}_is_open`,
63
+ /** Recency-weighted usage scores used to rank/paginate dial tools */
64
+ usage: () => `${devToolsStorageKeys.dial.root()}_usage`
63
65
  },
64
66
  /**
65
67
  * Clipboard-related storage keys
@@ -62,6 +62,8 @@ var _subscriberCountNotifier = require("../utils/subscriberCountNotifier.js");
62
62
  class BaseEventStore extends _subscribable.Subscribable {
63
63
  events = [];
64
64
  arrayListeners = new Set();
65
+ captureSuppressed = false;
66
+ clearListeners = new Set();
65
67
  constructor(options) {
66
68
  super();
67
69
  this.maxEvents = options.maxEvents ?? 500;
@@ -95,7 +97,7 @@ class BaseEventStore extends _subscribable.Subscribable {
95
97
  * Starts capturing if no one was subscribed.
96
98
  */
97
99
  onSubscribe() {
98
- if (this.getTotalSubscriberCount() === 1) {
100
+ if (this.getTotalSubscriberCount() === 1 && !this.captureSuppressed) {
99
101
  this.startCapturing();
100
102
  }
101
103
  (0, _subscriberCountNotifier.notifySubscriberCountChange)(this.storeName);
@@ -135,7 +137,7 @@ class BaseEventStore extends _subscribable.Subscribable {
135
137
  this.arrayListeners.add(listener);
136
138
 
137
139
  // Start capturing if this is the first subscriber
138
- if (wasEmpty) {
140
+ if (wasEmpty && !this.captureSuppressed) {
139
141
  this.startCapturing();
140
142
  }
141
143
 
@@ -226,6 +228,50 @@ class BaseEventStore extends _subscribable.Subscribable {
226
228
  clearEvents() {
227
229
  this.events = [];
228
230
  this.notifyArrayListeners();
231
+ this.clearListeners.forEach(listener => {
232
+ try {
233
+ listener();
234
+ } catch {
235
+ // Ignore listener errors
236
+ }
237
+ });
238
+ }
239
+
240
+ /**
241
+ * Listen for clearEvents() calls. Used in remote mirror mode to forward a
242
+ * clear performed in the dashboard UI to the synced device.
243
+ */
244
+ onClear(listener) {
245
+ this.clearListeners.add(listener);
246
+ return () => {
247
+ this.clearListeners.delete(listener);
248
+ };
249
+ }
250
+
251
+ // ===========================================================================
252
+ // REMOTE MIRROR MODE
253
+ // ===========================================================================
254
+
255
+ /**
256
+ * Suppress the auto start/stop capture lifecycle. Use when this store acts
257
+ * as a mirror of a remote device's events (e.g. the desktop dashboard):
258
+ * events arrive via replaceEvents() and the local interceptors must never
259
+ * start — on the dashboard they would capture the dashboard's own traffic.
260
+ */
261
+ disableCapture() {
262
+ this.captureSuppressed = true;
263
+ if (this.isCapturing()) {
264
+ this.stopCapturing();
265
+ }
266
+ }
267
+
268
+ /**
269
+ * Replace the entire event list and notify array listeners. Used in remote
270
+ * mirror mode where full snapshots arrive from a synced device.
271
+ */
272
+ replaceEvents(events) {
273
+ this.events = events.slice(0, this.maxEvents);
274
+ this.notifyArrayListeners();
229
275
  }
230
276
 
231
277
  /**
@@ -24,6 +24,7 @@ function DynamicFilterView({
24
24
  onPatternToggle,
25
25
  onPatternAdd,
26
26
  activePatterns = new Set(),
27
+ renderPatternMeta,
27
28
  tabs,
28
29
  activeTab,
29
30
  onTabChange
@@ -233,16 +234,18 @@ function DynamicFilterView({
233
234
  onPress: () => filterManager.setShowAddInput(true),
234
235
  color: _gameUIColors.buoyColors.primary,
235
236
  label: "Add exclude pattern"
236
- }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_FilterComponents.AddFilterInput, {
237
- value: filterManager.newFilter,
238
- onChange: filterManager.setNewFilter,
239
- onSubmit: handleAddPattern,
240
- onCancel: () => {
241
- filterManager.setShowAddInput(false);
242
- filterManager.setNewFilter("");
243
- },
244
- placeholder: addFilterSection.placeholder || "Enter pattern to exclude...",
245
- color: _gameUIColors.buoyColors.primary
237
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
238
+ children: [addFilterSection.renderExtra?.(), /*#__PURE__*/(0, _jsxRuntime.jsx)(_FilterComponents.AddFilterInput, {
239
+ value: filterManager.newFilter,
240
+ onChange: filterManager.setNewFilter,
241
+ onSubmit: handleAddPattern,
242
+ onCancel: () => {
243
+ filterManager.setShowAddInput(false);
244
+ filterManager.setNewFilter("");
245
+ },
246
+ placeholder: addFilterSection.placeholder || "Enter pattern to exclude...",
247
+ color: _gameUIColors.buoyColors.primary
248
+ })]
246
249
  })
247
250
  }), activePatterns.size > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ScrollView, {
248
251
  style: styles.excludeFiltersContent,
@@ -251,7 +254,8 @@ function DynamicFilterView({
251
254
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_FilterComponents.FilterList, {
252
255
  filters: activePatterns,
253
256
  onRemoveFilter: onPatternToggle,
254
- color: _gameUIColors.buoyColors.primary
257
+ color: _gameUIColors.buoyColors.primary,
258
+ renderItemMeta: renderPatternMeta
255
259
  })
256
260
  })]
257
261
  }), availableItemsSection?.enabled && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
@@ -144,7 +144,8 @@ function FilterList({
144
144
  filters,
145
145
  onRemoveFilter,
146
146
  activeFilters,
147
- color = "#E5E7EB"
147
+ color = "#E5E7EB",
148
+ renderItemMeta
148
149
  }) {
149
150
  const filterArray = Array.from(filters);
150
151
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
@@ -159,7 +160,10 @@ function FilterList({
159
160
  }],
160
161
  numberOfLines: 1,
161
162
  children: filter
162
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_index.X, {
163
+ }), renderItemMeta ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
164
+ style: styles.filterItemMeta,
165
+ children: renderItemMeta(filter)
166
+ }) : null, /*#__PURE__*/(0, _jsxRuntime.jsx)(_index.X, {
163
167
  size: 12,
164
168
  color: `${color}80`
165
169
  })]
@@ -263,5 +267,8 @@ const styles = _reactNative.StyleSheet.create({
263
267
  fontFamily: "monospace",
264
268
  marginRight: 8,
265
269
  color: _gameUIColors.buoyColors.text
270
+ },
271
+ filterItemMeta: {
272
+ marginRight: 8
266
273
  }
267
274
  });
@@ -13,7 +13,12 @@ var _jsxRuntime = require("react/jsx-runtime");
13
13
  // ============================================================================
14
14
  // Global expandable setting — controlled via setExpandableWindowControls()
15
15
  // ============================================================================
16
- let _expandableEnabled = true; // Default ON
16
+
17
+ // The expandable behavior is a touch affordance (big tap targets). On web a
18
+ // mouse clicks the small dots directly, so it's always off there — the
19
+ // setting only applies to native touch platforms.
20
+ const EXPANDABLE_SUPPORTED = _reactNative.Platform.OS !== "web";
21
+ let _expandableEnabled = true; // Default ON (native touch devices)
17
22
 
18
23
  /**
19
24
  * Set whether window controls use the expandable iPad-style behavior.
@@ -73,8 +78,9 @@ function WindowControls({
73
78
  const ToggleModeIcon = mode === "floating" ? _index.DockBottom : _index.FloatWindow;
74
79
  const toggleModeLabel = mode === "floating" ? "Dock to bottom sheet" : "Make floating window";
75
80
 
76
- // When expandable is disabled, render original directly-tappable buttons
77
- if (!_expandableEnabled) {
81
+ // When expandable is disabled (or unsupported on this platform), render
82
+ // original directly-tappable buttons
83
+ if (!_expandableEnabled || !EXPANDABLE_SUPPORTED) {
78
84
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
79
85
  style: styles.container,
80
86
  children: [onMinimize && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
@@ -16,9 +16,17 @@
16
16
  * Fallback chain:
17
17
  * 1. expo-clipboard
18
18
  * 2. @react-native-clipboard/clipboard
19
- * 3. Graceful failure
19
+ * 3. Web clipboard API (navigator.clipboard)
20
+ * 4. Graceful failure
20
21
  */
21
22
 
23
+ // navigator.clipboard isn't in React Native's TS lib — narrow it manually
24
+
25
+ function getWebClipboard() {
26
+ if (typeof navigator === "undefined") return null;
27
+ const clipboard = navigator.clipboard;
28
+ return clipboard && typeof clipboard.writeText === "function" ? clipboard : null;
29
+ }
22
30
  // Grab module references at load time (top-level try-catch for Metro)
23
31
  // Always require both — we decide which actually works at call time
24
32
  let _expoClipboard = null;
@@ -63,6 +71,21 @@ async function detect(text) {
63
71
  return true;
64
72
  } catch {/* rn-clipboard not functional */}
65
73
  }
74
+
75
+ // 3. Web fallback (react-native-web / desktop dashboard / browsers)
76
+ const webClipboard = getWebClipboard();
77
+ if (webClipboard) {
78
+ try {
79
+ await webClipboard.writeText(text);
80
+ _detectedType = "web";
81
+ _clipboardFn = async t => {
82
+ await webClipboard.writeText(t);
83
+ return true;
84
+ };
85
+ _detected = true;
86
+ return true;
87
+ } catch {/* clipboard permission denied */}
88
+ }
66
89
  _detected = true;
67
90
  return false;
68
91
  }
@@ -71,7 +94,10 @@ export const clipboardType = () => {
71
94
  };
72
95
  export const isClipboardAvailable = () => {
73
96
  // Before first use, optimistically return true if we have a module ref
74
- if (!_detected) return _expoClipboard != null || _rnClipboard != null;
97
+ // or the web clipboard API is present
98
+ if (!_detected) {
99
+ return _expoClipboard != null || _rnClipboard != null || getWebClipboard() != null;
100
+ }
75
101
  return _clipboardFn != null;
76
102
  };
77
103
  export const clipboardFunction = async text => {
@@ -3,7 +3,7 @@
3
3
  /**
4
4
  * Auto-generated safe area implementation
5
5
  * Detected: none
6
- * Generated at: 2026-05-06T23:35:45.728Z
6
+ * Generated at: 2026-06-12T23:17:33.323Z
7
7
  *
8
8
  * DO NOT EDIT - This file is generated by scripts/detect-safe-area.js
9
9
  *
@@ -52,7 +52,9 @@ export const devToolsStorageKeys = {
52
52
  dial: {
53
53
  root: () => `${devToolsStorageKeys.base}_dial`,
54
54
  /** Whether dial is open/visible */
55
- isOpen: () => `${devToolsStorageKeys.dial.root()}_is_open`
55
+ isOpen: () => `${devToolsStorageKeys.dial.root()}_is_open`,
56
+ /** Recency-weighted usage scores used to rank/paginate dial tools */
57
+ usage: () => `${devToolsStorageKeys.dial.root()}_usage`
56
58
  },
57
59
  /**
58
60
  * Clipboard-related storage keys
@@ -59,6 +59,8 @@ import { notifySubscriberCountChange } from "../utils/subscriberCountNotifier.js
59
59
  export class BaseEventStore extends Subscribable {
60
60
  events = [];
61
61
  arrayListeners = new Set();
62
+ captureSuppressed = false;
63
+ clearListeners = new Set();
62
64
  constructor(options) {
63
65
  super();
64
66
  this.maxEvents = options.maxEvents ?? 500;
@@ -92,7 +94,7 @@ export class BaseEventStore extends Subscribable {
92
94
  * Starts capturing if no one was subscribed.
93
95
  */
94
96
  onSubscribe() {
95
- if (this.getTotalSubscriberCount() === 1) {
97
+ if (this.getTotalSubscriberCount() === 1 && !this.captureSuppressed) {
96
98
  this.startCapturing();
97
99
  }
98
100
  notifySubscriberCountChange(this.storeName);
@@ -132,7 +134,7 @@ export class BaseEventStore extends Subscribable {
132
134
  this.arrayListeners.add(listener);
133
135
 
134
136
  // Start capturing if this is the first subscriber
135
- if (wasEmpty) {
137
+ if (wasEmpty && !this.captureSuppressed) {
136
138
  this.startCapturing();
137
139
  }
138
140
 
@@ -223,6 +225,50 @@ export class BaseEventStore extends Subscribable {
223
225
  clearEvents() {
224
226
  this.events = [];
225
227
  this.notifyArrayListeners();
228
+ this.clearListeners.forEach(listener => {
229
+ try {
230
+ listener();
231
+ } catch {
232
+ // Ignore listener errors
233
+ }
234
+ });
235
+ }
236
+
237
+ /**
238
+ * Listen for clearEvents() calls. Used in remote mirror mode to forward a
239
+ * clear performed in the dashboard UI to the synced device.
240
+ */
241
+ onClear(listener) {
242
+ this.clearListeners.add(listener);
243
+ return () => {
244
+ this.clearListeners.delete(listener);
245
+ };
246
+ }
247
+
248
+ // ===========================================================================
249
+ // REMOTE MIRROR MODE
250
+ // ===========================================================================
251
+
252
+ /**
253
+ * Suppress the auto start/stop capture lifecycle. Use when this store acts
254
+ * as a mirror of a remote device's events (e.g. the desktop dashboard):
255
+ * events arrive via replaceEvents() and the local interceptors must never
256
+ * start — on the dashboard they would capture the dashboard's own traffic.
257
+ */
258
+ disableCapture() {
259
+ this.captureSuppressed = true;
260
+ if (this.isCapturing()) {
261
+ this.stopCapturing();
262
+ }
263
+ }
264
+
265
+ /**
266
+ * Replace the entire event list and notify array listeners. Used in remote
267
+ * mirror mode where full snapshots arrive from a synced device.
268
+ */
269
+ replaceEvents(events) {
270
+ this.events = events.slice(0, this.maxEvents);
271
+ this.notifyArrayListeners();
226
272
  }
227
273
 
228
274
  /**
@@ -20,6 +20,7 @@ export function DynamicFilterView({
20
20
  onPatternToggle,
21
21
  onPatternAdd,
22
22
  activePatterns = new Set(),
23
+ renderPatternMeta,
23
24
  tabs,
24
25
  activeTab,
25
26
  onTabChange
@@ -229,16 +230,18 @@ export function DynamicFilterView({
229
230
  onPress: () => filterManager.setShowAddInput(true),
230
231
  color: buoyColors.primary,
231
232
  label: "Add exclude pattern"
232
- }) : /*#__PURE__*/_jsx(AddFilterInput, {
233
- value: filterManager.newFilter,
234
- onChange: filterManager.setNewFilter,
235
- onSubmit: handleAddPattern,
236
- onCancel: () => {
237
- filterManager.setShowAddInput(false);
238
- filterManager.setNewFilter("");
239
- },
240
- placeholder: addFilterSection.placeholder || "Enter pattern to exclude...",
241
- color: buoyColors.primary
233
+ }) : /*#__PURE__*/_jsxs(_Fragment, {
234
+ children: [addFilterSection.renderExtra?.(), /*#__PURE__*/_jsx(AddFilterInput, {
235
+ value: filterManager.newFilter,
236
+ onChange: filterManager.setNewFilter,
237
+ onSubmit: handleAddPattern,
238
+ onCancel: () => {
239
+ filterManager.setShowAddInput(false);
240
+ filterManager.setNewFilter("");
241
+ },
242
+ placeholder: addFilterSection.placeholder || "Enter pattern to exclude...",
243
+ color: buoyColors.primary
244
+ })]
242
245
  })
243
246
  }), activePatterns.size > 0 && /*#__PURE__*/_jsx(ScrollView, {
244
247
  style: styles.excludeFiltersContent,
@@ -247,7 +250,8 @@ export function DynamicFilterView({
247
250
  children: /*#__PURE__*/_jsx(FilterList, {
248
251
  filters: activePatterns,
249
252
  onRemoveFilter: onPatternToggle,
250
- color: buoyColors.primary
253
+ color: buoyColors.primary,
254
+ renderItemMeta: renderPatternMeta
251
255
  })
252
256
  })]
253
257
  }), availableItemsSection?.enabled && /*#__PURE__*/_jsxs(View, {
@@ -136,7 +136,8 @@ export function FilterList({
136
136
  filters,
137
137
  onRemoveFilter,
138
138
  activeFilters,
139
- color = "#E5E7EB"
139
+ color = "#E5E7EB",
140
+ renderItemMeta
140
141
  }) {
141
142
  const filterArray = Array.from(filters);
142
143
  return /*#__PURE__*/_jsx(View, {
@@ -151,7 +152,10 @@ export function FilterList({
151
152
  }],
152
153
  numberOfLines: 1,
153
154
  children: filter
154
- }), /*#__PURE__*/_jsx(X, {
155
+ }), renderItemMeta ? /*#__PURE__*/_jsx(View, {
156
+ style: styles.filterItemMeta,
157
+ children: renderItemMeta(filter)
158
+ }) : null, /*#__PURE__*/_jsx(X, {
155
159
  size: 12,
156
160
  color: `${color}80`
157
161
  })]
@@ -255,5 +259,8 @@ const styles = StyleSheet.create({
255
259
  fontFamily: "monospace",
256
260
  marginRight: 8,
257
261
  color: buoyColors.text
262
+ },
263
+ filterItemMeta: {
264
+ marginRight: 8
258
265
  }
259
266
  });
@@ -1,15 +1,20 @@
1
1
  "use strict";
2
2
 
3
3
  import { useState, useRef, useCallback, useEffect } from "react";
4
- import { View, TouchableOpacity, TouchableWithoutFeedback, StyleSheet, Animated, Modal } from "react-native";
4
+ import { View, TouchableOpacity, TouchableWithoutFeedback, StyleSheet, Animated, Modal, Platform } from "react-native";
5
5
  import { X, Minus, DockBottom, FloatWindow } from "../../icons/index.js";
6
6
  import { buoyColors } from "../gameUI/constants/gameUIColors.js";
7
7
 
8
8
  // ============================================================================
9
9
  // Global expandable setting — controlled via setExpandableWindowControls()
10
10
  // ============================================================================
11
+
12
+ // The expandable behavior is a touch affordance (big tap targets). On web a
13
+ // mouse clicks the small dots directly, so it's always off there — the
14
+ // setting only applies to native touch platforms.
11
15
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
12
- let _expandableEnabled = true; // Default ON
16
+ const EXPANDABLE_SUPPORTED = Platform.OS !== "web";
17
+ let _expandableEnabled = true; // Default ON (native touch devices)
13
18
 
14
19
  /**
15
20
  * Set whether window controls use the expandable iPad-style behavior.
@@ -69,8 +74,9 @@ export function WindowControls({
69
74
  const ToggleModeIcon = mode === "floating" ? DockBottom : FloatWindow;
70
75
  const toggleModeLabel = mode === "floating" ? "Dock to bottom sheet" : "Make floating window";
71
76
 
72
- // When expandable is disabled, render original directly-tappable buttons
73
- if (!_expandableEnabled) {
77
+ // When expandable is disabled (or unsupported on this platform), render
78
+ // original directly-tappable buttons
79
+ if (!_expandableEnabled || !EXPANDABLE_SUPPORTED) {
74
80
  return /*#__PURE__*/_jsxs(View, {
75
81
  style: styles.container,
76
82
  children: [onMinimize && /*#__PURE__*/_jsx(TouchableOpacity, {
@@ -14,10 +14,11 @@
14
14
  * Fallback chain:
15
15
  * 1. expo-clipboard
16
16
  * 2. @react-native-clipboard/clipboard
17
- * 3. Graceful failure
17
+ * 3. Web clipboard API (navigator.clipboard)
18
+ * 4. Graceful failure
18
19
  */
19
20
  export type ClipboardFunction = (text: string) => Promise<boolean>;
20
- export declare const clipboardType: () => "expo" | "react-native" | null;
21
+ export declare const clipboardType: () => "expo" | "react-native" | "web" | null;
21
22
  export declare const isClipboardAvailable: () => boolean;
22
23
  export declare const clipboardFunction: ClipboardFunction;
23
24
  //# sourceMappingURL=clipboard-impl.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"clipboard-impl.d.ts","sourceRoot":"","sources":["../../../../src/clipboard/clipboard-impl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAqDnE,eAAO,MAAM,aAAa,QAAO,MAAM,GAAG,cAAc,GAAG,IAE1D,CAAC;AAEF,eAAO,MAAM,oBAAoB,QAAO,OAIvC,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,iBAmB/B,CAAC"}
1
+ {"version":3,"file":"clipboard-impl.d.ts","sourceRoot":"","sources":["../../../../src/clipboard/clipboard-impl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAYH,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAoEnE,eAAO,MAAM,aAAa,QAAO,MAAM,GAAG,cAAc,GAAG,KAAK,GAAG,IAElE,CAAC;AAEF,eAAO,MAAM,oBAAoB,QAAO,OASvC,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,iBAmB/B,CAAC"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Auto-generated safe area implementation
3
3
  * Detected: none
4
- * Generated at: 2026-05-06T23:35:45.728Z
4
+ * Generated at: 2026-06-12T23:17:33.323Z
5
5
  *
6
6
  * DO NOT EDIT - This file is generated by scripts/detect-safe-area.js
7
7
  *
@@ -51,6 +51,8 @@ export declare const devToolsStorageKeys: {
51
51
  readonly root: () => "@react_buoy_dial";
52
52
  /** Whether dial is open/visible */
53
53
  readonly isOpen: () => "@react_buoy_dial_is_open";
54
+ /** Recency-weighted usage scores used to rank/paginate dial tools */
55
+ readonly usage: () => "@react_buoy_dial_usage";
54
56
  };
55
57
  /**
56
58
  * Clipboard-related storage keys
@@ -1 +1 @@
1
- {"version":3,"file":"devToolsStorageKeys.d.ts","sourceRoot":"","sources":["../../../../src/storage/devToolsStorageKeys.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB;IAC9B;;OAEG;;IAGH;;OAEG;;;;;;;IASH;;OAEG;;;;;;;;IAUH;;OAEG;;;;;;QAQD,kDAAkD;;QAElD,gCAAgC;;QAGhC,gCAAgC;;;IAKlC;;OAEG;;;QAGD,mCAAmC;;;IAIrC;;OAEG;;;;;IAOH;;OAEG;;;;;;;IAQH;;OAEG;;;;;;;IASH;;OAEG;;;;;;;;;;;;;;IAuBH;;OAEG;;;;;;;;;;;IAiBH;;OAEG;;;;;;;;;;;IAgBH;;OAEG;;;;;;;;;;IAgBH;;OAEG;;;;;;;QAUD,2BAA2B;;;IAK7B;;OAEG;;;;;;;;;IAcH;;OAEG;;;;QAID,oCAAoC;;QAGpC,wCAAwC;;QAGxC,2BAA2B;;;CAIrB,CAAC;AAwBX;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAqBzD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAE9D;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,EAAE,CAsBpD"}
1
+ {"version":3,"file":"devToolsStorageKeys.d.ts","sourceRoot":"","sources":["../../../../src/storage/devToolsStorageKeys.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB;IAC9B;;OAEG;;IAGH;;OAEG;;;;;;;IASH;;OAEG;;;;;;;;IAUH;;OAEG;;;;;;QAQD,kDAAkD;;QAElD,gCAAgC;;QAGhC,gCAAgC;;;IAKlC;;OAEG;;;QAGD,mCAAmC;;QAEnC,qEAAqE;;;IAIvE;;OAEG;;;;;IAOH;;OAEG;;;;;;;IAQH;;OAEG;;;;;;;IASH;;OAEG;;;;;;;;;;;;;;IAuBH;;OAEG;;;;;;;;;;;IAiBH;;OAEG;;;;;;;;;;;IAgBH;;OAEG;;;;;;;;;;IAgBH;;OAEG;;;;;;;QAUD,2BAA2B;;;IAK7B;;OAEG;;;;;;;;;IAcH;;OAEG;;;;QAID,oCAAoC;;QAGpC,wCAAwC;;QAGxC,2BAA2B;;;CAIrB,CAAC;AAwBX;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAqBzD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAE9D;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,EAAE,CAsBpD"}
@@ -61,6 +61,8 @@ export declare abstract class BaseEventStore<TEvent> extends Subscribable<EventC
61
61
  protected arrayListeners: Set<ArrayListener<TEvent>>;
62
62
  protected maxEvents: number;
63
63
  protected storeName: string;
64
+ private captureSuppressed;
65
+ private clearListeners;
64
66
  constructor(options: BaseEventStoreOptions);
65
67
  /**
66
68
  * Start capturing events from the underlying source.
@@ -129,6 +131,23 @@ export declare abstract class BaseEventStore<TEvent> extends Subscribable<EventC
129
131
  * Clear all events
130
132
  */
131
133
  clearEvents(): void;
134
+ /**
135
+ * Listen for clearEvents() calls. Used in remote mirror mode to forward a
136
+ * clear performed in the dashboard UI to the synced device.
137
+ */
138
+ onClear(listener: () => void): () => void;
139
+ /**
140
+ * Suppress the auto start/stop capture lifecycle. Use when this store acts
141
+ * as a mirror of a remote device's events (e.g. the desktop dashboard):
142
+ * events arrive via replaceEvents() and the local interceptors must never
143
+ * start — on the dashboard they would capture the dashboard's own traffic.
144
+ */
145
+ disableCapture(): void;
146
+ /**
147
+ * Replace the entire event list and notify array listeners. Used in remote
148
+ * mirror mode where full snapshots arrive from a synced device.
149
+ */
150
+ replaceEvents(events: TEvent[]): void;
132
151
  /**
133
152
  * Set maximum number of events to keep
134
153
  */
@@ -1 +1 @@
1
- {"version":3,"file":"BaseEventStore.d.ts","sourceRoot":"","sources":["../../../../src/stores/BaseEventStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;AAE/D;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,8BAAsB,cAAc,CAAC,MAAM,CAAE,SAAQ,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACtF,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,CAAM;IAChC,SAAS,CAAC,cAAc,EAAE,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAa;IACjE,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEhB,OAAO,EAAE,qBAAqB;IAU1C;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,cAAc,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAEzD;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,aAAa,IAAI,IAAI;IAExC;;OAEG;IACH,QAAQ,CAAC,WAAW,IAAI,OAAO;IAM/B;;;OAGG;IACH,SAAS,CAAC,WAAW,IAAI,IAAI;IAO7B;;;OAGG;IACH,SAAS,CAAC,aAAa,IAAI,IAAI;IAW/B;;OAEG;IACH,SAAS,CAAC,uBAAuB,IAAI,MAAM;IAI3C;;;;;;OAMG;IACH,iBAAiB,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI;IA8B9D;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI;IASpD;;;;;OAKG;IACH,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAWvC;;OAEG;IACH,SAAS,CAAC,oBAAoB,IAAI,IAAI;IAWtC;;OAEG;IACH,SAAS,IAAI,MAAM,EAAE;IAIrB;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,WAAW,IAAI,IAAI;IAKnB;;OAEG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAY/B;;OAEG;IACH,mBAAmB,IAAI;QACrB,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC;KACf;CAOF"}
1
+ {"version":3,"file":"BaseEventStore.d.ts","sourceRoot":"","sources":["../../../../src/stores/BaseEventStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;AAE/D;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,8BAAsB,cAAc,CAAC,MAAM,CAAE,SAAQ,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACtF,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,CAAM;IAChC,SAAS,CAAC,cAAc,EAAE,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAa;IACjE,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,cAAc,CAA8B;gBAExC,OAAO,EAAE,qBAAqB;IAU1C;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,cAAc,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAEzD;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,aAAa,IAAI,IAAI;IAExC;;OAEG;IACH,QAAQ,CAAC,WAAW,IAAI,OAAO;IAM/B;;;OAGG;IACH,SAAS,CAAC,WAAW,IAAI,IAAI;IAO7B;;;OAGG;IACH,SAAS,CAAC,aAAa,IAAI,IAAI;IAW/B;;OAEG;IACH,SAAS,CAAC,uBAAuB,IAAI,MAAM;IAI3C;;;;;;OAMG;IACH,iBAAiB,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI;IA8B9D;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI;IASpD;;;;;OAKG;IACH,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAWvC;;OAEG;IACH,SAAS,CAAC,oBAAoB,IAAI,IAAI;IAWtC;;OAEG;IACH,SAAS,IAAI,MAAM,EAAE;IAIrB;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,WAAW,IAAI,IAAI;IAYnB;;;OAGG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAWzC;;;;;OAKG;IACH,cAAc,IAAI,IAAI;IAOtB;;;OAGG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAKrC;;OAEG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAY/B;;OAEG;IACH,mBAAmB,IAAI;QACrB,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC;KACf;CAOF"}
@@ -36,6 +36,8 @@ export interface DynamicFilterConfig {
36
36
  placeholder?: string;
37
37
  title?: string;
38
38
  icon?: LucideIcon;
39
+ /** Optional UI rendered above the pattern input when the add-filter input is open. */
40
+ renderExtra?: () => React.ReactNode;
39
41
  };
40
42
  /** Include-only patterns section - shows queries matching ANY of these patterns */
41
43
  includeOnlySection?: {
@@ -73,6 +75,8 @@ export interface DynamicFilterConfig {
73
75
  onPatternToggle?: (pattern: string) => void;
74
76
  onPatternAdd?: (pattern: string) => void;
75
77
  activePatterns?: Set<string>;
78
+ /** Optional per-pattern meta rendered between the pattern label and the remove icon (e.g. a mode badge). */
79
+ renderPatternMeta?: (pattern: string) => React.ReactNode;
76
80
  tabs?: {
77
81
  id: string;
78
82
  label: string;
@@ -86,6 +90,6 @@ export interface DynamicFilterConfig {
86
90
  interface DynamicFilterViewProps extends DynamicFilterConfig {
87
91
  className?: string;
88
92
  }
89
- export declare function DynamicFilterView({ sections, filterSummarySection, addFilterSection, includeOnlySection, availableItemsSection, howItWorksSection, previewSection, onFilterChange, onPatternToggle, onPatternAdd, activePatterns, tabs, activeTab, onTabChange, }: DynamicFilterViewProps): import("react").JSX.Element;
93
+ export declare function DynamicFilterView({ sections, filterSummarySection, addFilterSection, includeOnlySection, availableItemsSection, howItWorksSection, previewSection, onFilterChange, onPatternToggle, onPatternAdd, activePatterns, renderPatternMeta, tabs, activeTab, onTabChange, }: DynamicFilterViewProps): import("react").JSX.Element;
90
94
  export {};
91
95
  //# sourceMappingURL=DynamicFilterView.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DynamicFilterView.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/DynamicFilterView.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DynamicFilterView.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/DynamicFilterView.tsx"],"names":[],"mappings":"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"}
@@ -32,7 +32,8 @@ interface FilterListProps {
32
32
  onRemoveFilter?: (filter: string) => void;
33
33
  activeFilters?: Set<string>;
34
34
  color?: string;
35
+ renderItemMeta?: (filter: string) => ReactNode;
35
36
  }
36
- export declare function FilterList({ filters, onRemoveFilter, activeFilters, color, }: FilterListProps): import("react").JSX.Element;
37
+ export declare function FilterList({ filters, onRemoveFilter, activeFilters, color, renderItemMeta, }: FilterListProps): import("react").JSX.Element;
37
38
  export {};
38
39
  //# sourceMappingURL=FilterComponents.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FilterComponents.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/FilterComponents.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,SAAS,EAEV,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,kBAAkB,+BAEpE;AAGD,UAAU,gBAAgB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,QAAQ,EACR,MAAa,EACb,KAAiB,GAClB,EAAE,gBAAgB,+BAqBlB;AAGD,UAAU,mBAAmB;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,WAA6B,EAC7B,KAAiB,GAClB,EAAE,mBAAmB,+BAmCrB;AAGD,UAAU,oBAAoB;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,eAAe,CAAC,EAC9B,OAAO,EACP,KAAiB,EACjB,KAAoB,GACrB,EAAE,oBAAoB,+BAUtB;AAGD,UAAU,eAAe;IACvB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC;IAChC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,cAAc,EACd,aAAa,EACb,KAAiB,GAClB,EAAE,eAAe,+BAoBjB"}
1
+ {"version":3,"file":"FilterComponents.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/FilterComponents.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,SAAS,EAEV,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,kBAAkB,+BAEpE;AAGD,UAAU,gBAAgB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,QAAQ,EACR,MAAa,EACb,KAAiB,GAClB,EAAE,gBAAgB,+BAqBlB;AAGD,UAAU,mBAAmB;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,WAA6B,EAC7B,KAAiB,GAClB,EAAE,mBAAmB,+BAmCrB;AAGD,UAAU,oBAAoB;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,eAAe,CAAC,EAC9B,OAAO,EACP,KAAiB,EACjB,KAAoB,GACrB,EAAE,oBAAoB,+BAUtB;AAGD,UAAU,eAAe;IACvB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC;IAChC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,SAAS,CAAC;CAChD;AAED,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,cAAc,EACd,aAAa,EACb,KAAiB,EACjB,cAAc,GACf,EAAE,eAAe,+BAuBjB"}
@@ -1 +1 @@
1
- {"version":3,"file":"WindowControls.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/WindowControls.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAS/C;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,QAE3D;AAMD,UAAU,mBAAmB;IAC3B,+BAA+B;IAC/B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,4EAA4E;IAC5E,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,sFAAsF;IACtF,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,2EAA2E;IAC3E,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AA+BD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,UAAU,EACV,YAAY,EACZ,IAAI,GACL,EAAE,mBAAmB,+BAoDrB"}
1
+ {"version":3,"file":"WindowControls.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/WindowControls.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAc/C;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,QAE3D;AAMD,UAAU,mBAAmB;IAC3B,+BAA+B;IAC/B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,4EAA4E;IAC5E,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,sFAAsF;IACtF,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,2EAA2E;IAC3E,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AA+BD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,UAAU,EACV,YAAY,EACZ,IAAI,GACL,EAAE,mBAAmB,+BAqDrB"}
@@ -14,10 +14,11 @@
14
14
  * Fallback chain:
15
15
  * 1. expo-clipboard
16
16
  * 2. @react-native-clipboard/clipboard
17
- * 3. Graceful failure
17
+ * 3. Web clipboard API (navigator.clipboard)
18
+ * 4. Graceful failure
18
19
  */
19
20
  export type ClipboardFunction = (text: string) => Promise<boolean>;
20
- export declare const clipboardType: () => "expo" | "react-native" | null;
21
+ export declare const clipboardType: () => "expo" | "react-native" | "web" | null;
21
22
  export declare const isClipboardAvailable: () => boolean;
22
23
  export declare const clipboardFunction: ClipboardFunction;
23
24
  //# sourceMappingURL=clipboard-impl.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"clipboard-impl.d.ts","sourceRoot":"","sources":["../../../../src/clipboard/clipboard-impl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAqDnE,eAAO,MAAM,aAAa,QAAO,MAAM,GAAG,cAAc,GAAG,IAE1D,CAAC;AAEF,eAAO,MAAM,oBAAoB,QAAO,OAIvC,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,iBAmB/B,CAAC"}
1
+ {"version":3,"file":"clipboard-impl.d.ts","sourceRoot":"","sources":["../../../../src/clipboard/clipboard-impl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAYH,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAoEnE,eAAO,MAAM,aAAa,QAAO,MAAM,GAAG,cAAc,GAAG,KAAK,GAAG,IAElE,CAAC;AAEF,eAAO,MAAM,oBAAoB,QAAO,OASvC,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,iBAmB/B,CAAC"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Auto-generated safe area implementation
3
3
  * Detected: none
4
- * Generated at: 2026-05-06T23:35:45.728Z
4
+ * Generated at: 2026-06-12T23:17:33.323Z
5
5
  *
6
6
  * DO NOT EDIT - This file is generated by scripts/detect-safe-area.js
7
7
  *
@@ -51,6 +51,8 @@ export declare const devToolsStorageKeys: {
51
51
  readonly root: () => "@react_buoy_dial";
52
52
  /** Whether dial is open/visible */
53
53
  readonly isOpen: () => "@react_buoy_dial_is_open";
54
+ /** Recency-weighted usage scores used to rank/paginate dial tools */
55
+ readonly usage: () => "@react_buoy_dial_usage";
54
56
  };
55
57
  /**
56
58
  * Clipboard-related storage keys
@@ -1 +1 @@
1
- {"version":3,"file":"devToolsStorageKeys.d.ts","sourceRoot":"","sources":["../../../../src/storage/devToolsStorageKeys.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB;IAC9B;;OAEG;;IAGH;;OAEG;;;;;;;IASH;;OAEG;;;;;;;;IAUH;;OAEG;;;;;;QAQD,kDAAkD;;QAElD,gCAAgC;;QAGhC,gCAAgC;;;IAKlC;;OAEG;;;QAGD,mCAAmC;;;IAIrC;;OAEG;;;;;IAOH;;OAEG;;;;;;;IAQH;;OAEG;;;;;;;IASH;;OAEG;;;;;;;;;;;;;;IAuBH;;OAEG;;;;;;;;;;;IAiBH;;OAEG;;;;;;;;;;;IAgBH;;OAEG;;;;;;;;;;IAgBH;;OAEG;;;;;;;QAUD,2BAA2B;;;IAK7B;;OAEG;;;;;;;;;IAcH;;OAEG;;;;QAID,oCAAoC;;QAGpC,wCAAwC;;QAGxC,2BAA2B;;;CAIrB,CAAC;AAwBX;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAqBzD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAE9D;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,EAAE,CAsBpD"}
1
+ {"version":3,"file":"devToolsStorageKeys.d.ts","sourceRoot":"","sources":["../../../../src/storage/devToolsStorageKeys.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB;IAC9B;;OAEG;;IAGH;;OAEG;;;;;;;IASH;;OAEG;;;;;;;;IAUH;;OAEG;;;;;;QAQD,kDAAkD;;QAElD,gCAAgC;;QAGhC,gCAAgC;;;IAKlC;;OAEG;;;QAGD,mCAAmC;;QAEnC,qEAAqE;;;IAIvE;;OAEG;;;;;IAOH;;OAEG;;;;;;;IAQH;;OAEG;;;;;;;IASH;;OAEG;;;;;;;;;;;;;;IAuBH;;OAEG;;;;;;;;;;;IAiBH;;OAEG;;;;;;;;;;;IAgBH;;OAEG;;;;;;;;;;IAgBH;;OAEG;;;;;;;QAUD,2BAA2B;;;IAK7B;;OAEG;;;;;;;;;IAcH;;OAEG;;;;QAID,oCAAoC;;QAGpC,wCAAwC;;QAGxC,2BAA2B;;;CAIrB,CAAC;AAwBX;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAqBzD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAE9D;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,EAAE,CAsBpD"}
@@ -61,6 +61,8 @@ export declare abstract class BaseEventStore<TEvent> extends Subscribable<EventC
61
61
  protected arrayListeners: Set<ArrayListener<TEvent>>;
62
62
  protected maxEvents: number;
63
63
  protected storeName: string;
64
+ private captureSuppressed;
65
+ private clearListeners;
64
66
  constructor(options: BaseEventStoreOptions);
65
67
  /**
66
68
  * Start capturing events from the underlying source.
@@ -129,6 +131,23 @@ export declare abstract class BaseEventStore<TEvent> extends Subscribable<EventC
129
131
  * Clear all events
130
132
  */
131
133
  clearEvents(): void;
134
+ /**
135
+ * Listen for clearEvents() calls. Used in remote mirror mode to forward a
136
+ * clear performed in the dashboard UI to the synced device.
137
+ */
138
+ onClear(listener: () => void): () => void;
139
+ /**
140
+ * Suppress the auto start/stop capture lifecycle. Use when this store acts
141
+ * as a mirror of a remote device's events (e.g. the desktop dashboard):
142
+ * events arrive via replaceEvents() and the local interceptors must never
143
+ * start — on the dashboard they would capture the dashboard's own traffic.
144
+ */
145
+ disableCapture(): void;
146
+ /**
147
+ * Replace the entire event list and notify array listeners. Used in remote
148
+ * mirror mode where full snapshots arrive from a synced device.
149
+ */
150
+ replaceEvents(events: TEvent[]): void;
132
151
  /**
133
152
  * Set maximum number of events to keep
134
153
  */
@@ -1 +1 @@
1
- {"version":3,"file":"BaseEventStore.d.ts","sourceRoot":"","sources":["../../../../src/stores/BaseEventStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;AAE/D;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,8BAAsB,cAAc,CAAC,MAAM,CAAE,SAAQ,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACtF,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,CAAM;IAChC,SAAS,CAAC,cAAc,EAAE,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAa;IACjE,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEhB,OAAO,EAAE,qBAAqB;IAU1C;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,cAAc,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAEzD;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,aAAa,IAAI,IAAI;IAExC;;OAEG;IACH,QAAQ,CAAC,WAAW,IAAI,OAAO;IAM/B;;;OAGG;IACH,SAAS,CAAC,WAAW,IAAI,IAAI;IAO7B;;;OAGG;IACH,SAAS,CAAC,aAAa,IAAI,IAAI;IAW/B;;OAEG;IACH,SAAS,CAAC,uBAAuB,IAAI,MAAM;IAI3C;;;;;;OAMG;IACH,iBAAiB,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI;IA8B9D;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI;IASpD;;;;;OAKG;IACH,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAWvC;;OAEG;IACH,SAAS,CAAC,oBAAoB,IAAI,IAAI;IAWtC;;OAEG;IACH,SAAS,IAAI,MAAM,EAAE;IAIrB;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,WAAW,IAAI,IAAI;IAKnB;;OAEG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAY/B;;OAEG;IACH,mBAAmB,IAAI;QACrB,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC;KACf;CAOF"}
1
+ {"version":3,"file":"BaseEventStore.d.ts","sourceRoot":"","sources":["../../../../src/stores/BaseEventStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;AAE/D;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,8BAAsB,cAAc,CAAC,MAAM,CAAE,SAAQ,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACtF,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,CAAM;IAChC,SAAS,CAAC,cAAc,EAAE,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAa;IACjE,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,cAAc,CAA8B;gBAExC,OAAO,EAAE,qBAAqB;IAU1C;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,cAAc,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAEzD;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,aAAa,IAAI,IAAI;IAExC;;OAEG;IACH,QAAQ,CAAC,WAAW,IAAI,OAAO;IAM/B;;;OAGG;IACH,SAAS,CAAC,WAAW,IAAI,IAAI;IAO7B;;;OAGG;IACH,SAAS,CAAC,aAAa,IAAI,IAAI;IAW/B;;OAEG;IACH,SAAS,CAAC,uBAAuB,IAAI,MAAM;IAI3C;;;;;;OAMG;IACH,iBAAiB,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI;IA8B9D;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI;IASpD;;;;;OAKG;IACH,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAWvC;;OAEG;IACH,SAAS,CAAC,oBAAoB,IAAI,IAAI;IAWtC;;OAEG;IACH,SAAS,IAAI,MAAM,EAAE;IAIrB;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,WAAW,IAAI,IAAI;IAYnB;;;OAGG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAWzC;;;;;OAKG;IACH,cAAc,IAAI,IAAI;IAOtB;;;OAGG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAKrC;;OAEG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAY/B;;OAEG;IACH,mBAAmB,IAAI;QACrB,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,MAAM,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC;KACf;CAOF"}
@@ -36,6 +36,8 @@ export interface DynamicFilterConfig {
36
36
  placeholder?: string;
37
37
  title?: string;
38
38
  icon?: LucideIcon;
39
+ /** Optional UI rendered above the pattern input when the add-filter input is open. */
40
+ renderExtra?: () => React.ReactNode;
39
41
  };
40
42
  /** Include-only patterns section - shows queries matching ANY of these patterns */
41
43
  includeOnlySection?: {
@@ -73,6 +75,8 @@ export interface DynamicFilterConfig {
73
75
  onPatternToggle?: (pattern: string) => void;
74
76
  onPatternAdd?: (pattern: string) => void;
75
77
  activePatterns?: Set<string>;
78
+ /** Optional per-pattern meta rendered between the pattern label and the remove icon (e.g. a mode badge). */
79
+ renderPatternMeta?: (pattern: string) => React.ReactNode;
76
80
  tabs?: {
77
81
  id: string;
78
82
  label: string;
@@ -86,6 +90,6 @@ export interface DynamicFilterConfig {
86
90
  interface DynamicFilterViewProps extends DynamicFilterConfig {
87
91
  className?: string;
88
92
  }
89
- export declare function DynamicFilterView({ sections, filterSummarySection, addFilterSection, includeOnlySection, availableItemsSection, howItWorksSection, previewSection, onFilterChange, onPatternToggle, onPatternAdd, activePatterns, tabs, activeTab, onTabChange, }: DynamicFilterViewProps): import("react").JSX.Element;
93
+ export declare function DynamicFilterView({ sections, filterSummarySection, addFilterSection, includeOnlySection, availableItemsSection, howItWorksSection, previewSection, onFilterChange, onPatternToggle, onPatternAdd, activePatterns, renderPatternMeta, tabs, activeTab, onTabChange, }: DynamicFilterViewProps): import("react").JSX.Element;
90
94
  export {};
91
95
  //# sourceMappingURL=DynamicFilterView.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DynamicFilterView.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/DynamicFilterView.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DynamicFilterView.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/DynamicFilterView.tsx"],"names":[],"mappings":"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"}
@@ -32,7 +32,8 @@ interface FilterListProps {
32
32
  onRemoveFilter?: (filter: string) => void;
33
33
  activeFilters?: Set<string>;
34
34
  color?: string;
35
+ renderItemMeta?: (filter: string) => ReactNode;
35
36
  }
36
- export declare function FilterList({ filters, onRemoveFilter, activeFilters, color, }: FilterListProps): import("react").JSX.Element;
37
+ export declare function FilterList({ filters, onRemoveFilter, activeFilters, color, renderItemMeta, }: FilterListProps): import("react").JSX.Element;
37
38
  export {};
38
39
  //# sourceMappingURL=FilterComponents.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FilterComponents.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/FilterComponents.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,SAAS,EAEV,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,kBAAkB,+BAEpE;AAGD,UAAU,gBAAgB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,QAAQ,EACR,MAAa,EACb,KAAiB,GAClB,EAAE,gBAAgB,+BAqBlB;AAGD,UAAU,mBAAmB;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,WAA6B,EAC7B,KAAiB,GAClB,EAAE,mBAAmB,+BAmCrB;AAGD,UAAU,oBAAoB;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,eAAe,CAAC,EAC9B,OAAO,EACP,KAAiB,EACjB,KAAoB,GACrB,EAAE,oBAAoB,+BAUtB;AAGD,UAAU,eAAe;IACvB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC;IAChC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,cAAc,EACd,aAAa,EACb,KAAiB,GAClB,EAAE,eAAe,+BAoBjB"}
1
+ {"version":3,"file":"FilterComponents.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/FilterComponents.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,SAAS,EAEV,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvC,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,kBAAkB,+BAEpE;AAGD,UAAU,gBAAgB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,QAAQ,EACR,MAAa,EACb,KAAiB,GAClB,EAAE,gBAAgB,+BAqBlB;AAGD,UAAU,mBAAmB;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,WAA6B,EAC7B,KAAiB,GAClB,EAAE,mBAAmB,+BAmCrB;AAGD,UAAU,oBAAoB;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,eAAe,CAAC,EAC9B,OAAO,EACP,KAAiB,EACjB,KAAoB,GACrB,EAAE,oBAAoB,+BAUtB;AAGD,UAAU,eAAe;IACvB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC;IAChC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,SAAS,CAAC;CAChD;AAED,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,cAAc,EACd,aAAa,EACb,KAAiB,EACjB,cAAc,GACf,EAAE,eAAe,+BAuBjB"}
@@ -1 +1 @@
1
- {"version":3,"file":"WindowControls.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/WindowControls.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAS/C;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,QAE3D;AAMD,UAAU,mBAAmB;IAC3B,+BAA+B;IAC/B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,4EAA4E;IAC5E,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,sFAAsF;IACtF,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,2EAA2E;IAC3E,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AA+BD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,UAAU,EACV,YAAY,EACZ,IAAI,GACL,EAAE,mBAAmB,+BAoDrB"}
1
+ {"version":3,"file":"WindowControls.d.ts","sourceRoot":"","sources":["../../../../../src/ui/components/WindowControls.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAc/C;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,QAE3D;AAMD,UAAU,mBAAmB;IAC3B,+BAA+B;IAC/B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,4EAA4E;IAC5E,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,sFAAsF;IACtF,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,2EAA2E;IAC3E,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AA+BD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,UAAU,EACV,YAAY,EACZ,IAAI,GACL,EAAE,mBAAmB,+BAqDrB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@buoy-gg/shared-ui",
3
- "version": "2.1.15",
3
+ "version": "3.0.0",
4
4
  "description": "Shared UI components, hooks, and utilities",
5
5
  "main": "lib/commonjs/index.js",
6
6
  "module": "lib/module/index.js",
@@ -115,10 +115,10 @@
115
115
  ],
116
116
  "sideEffects": false,
117
117
  "dependencies": {
118
- "@buoy-gg/floating-tools-core": "2.1.15"
118
+ "@buoy-gg/floating-tools-core": "3.0.0"
119
119
  },
120
120
  "peerDependencies": {
121
- "@buoy-gg/license": "2.1.15",
121
+ "@buoy-gg/license": "3.0.0",
122
122
  "@react-native-clipboard/clipboard": "*",
123
123
  "expo-clipboard": "*",
124
124
  "expo-file-system": "*",
@@ -146,7 +146,7 @@
146
146
  "expo-clipboard": "~7.1.5",
147
147
  "react-native-safe-area-context": "^5.6.2",
148
148
  "typescript": "~5.8.3",
149
- "@buoy-gg/license": "2.1.15"
149
+ "@buoy-gg/license": "3.0.0"
150
150
  },
151
151
  "react-native-builder-bob": {
152
152
  "source": "src",