@buoy-gg/storage 7.0.28 → 7.0.29

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 (54) hide show
  1. package/lib/commonjs/storage/components/GameUIStorageBrowser.js +51 -1
  2. package/lib/commonjs/storage/components/SelectionActionBar.js +10 -0
  3. package/lib/commonjs/storage/components/StorageActionButtons.js +16 -0
  4. package/lib/commonjs/storage/components/StorageEventActionButton.js +1 -0
  5. package/lib/commonjs/storage/components/StorageEventCard.js +5 -2
  6. package/lib/commonjs/storage/components/StorageEventFilterView.js +18 -0
  7. package/lib/commonjs/storage/components/StorageFilterCards.js +9 -0
  8. package/lib/commonjs/storage/components/StorageKeyEditorScreen.js +26 -5
  9. package/lib/commonjs/storage/components/StorageKeyRow.js +48 -1
  10. package/lib/commonjs/storage/components/StorageKeySection.js +23 -7
  11. package/lib/commonjs/storage/components/StorageModalWithTabs.js +26 -7
  12. package/lib/commonjs/storage/components/StorageScalarKeyEditor.js +16 -1
  13. package/lib/commonjs/storage/components/StorageTypeFilterBar.js +2 -0
  14. package/lib/commonjs/storage/components/StorageValueEditModal.js +18 -2
  15. package/lib/commonjs/storage/hooks/useTreeDraft.js +12 -1
  16. package/lib/commonjs/storage/utils/deleteStorageKeys.js +34 -5
  17. package/lib/module/storage/components/GameUIStorageBrowser.js +51 -1
  18. package/lib/module/storage/components/SelectionActionBar.js +10 -0
  19. package/lib/module/storage/components/StorageActionButtons.js +16 -0
  20. package/lib/module/storage/components/StorageEventActionButton.js +1 -0
  21. package/lib/module/storage/components/StorageEventCard.js +5 -2
  22. package/lib/module/storage/components/StorageEventFilterView.js +18 -0
  23. package/lib/module/storage/components/StorageFilterCards.js +9 -0
  24. package/lib/module/storage/components/StorageKeyEditorScreen.js +27 -6
  25. package/lib/module/storage/components/StorageKeyRow.js +49 -2
  26. package/lib/module/storage/components/StorageKeySection.js +23 -7
  27. package/lib/module/storage/components/StorageModalWithTabs.js +26 -7
  28. package/lib/module/storage/components/StorageScalarKeyEditor.js +16 -1
  29. package/lib/module/storage/components/StorageTypeFilterBar.js +2 -0
  30. package/lib/module/storage/components/StorageValueEditModal.js +18 -2
  31. package/lib/module/storage/hooks/useTreeDraft.js +12 -1
  32. package/lib/module/storage/utils/deleteStorageKeys.js +34 -5
  33. package/lib/typescript/storage/components/GameUIStorageBrowser.d.ts.map +1 -1
  34. package/lib/typescript/storage/components/SelectionActionBar.d.ts.map +1 -1
  35. package/lib/typescript/storage/components/StorageActionButtons.d.ts.map +1 -1
  36. package/lib/typescript/storage/components/StorageEventActionButton.d.ts.map +1 -1
  37. package/lib/typescript/storage/components/StorageEventCard.d.ts +5 -0
  38. package/lib/typescript/storage/components/StorageEventCard.d.ts.map +1 -1
  39. package/lib/typescript/storage/components/StorageEventFilterView.d.ts.map +1 -1
  40. package/lib/typescript/storage/components/StorageFilterCards.d.ts.map +1 -1
  41. package/lib/typescript/storage/components/StorageKeyEditorScreen.d.ts.map +1 -1
  42. package/lib/typescript/storage/components/StorageKeyRow.d.ts +9 -0
  43. package/lib/typescript/storage/components/StorageKeyRow.d.ts.map +1 -1
  44. package/lib/typescript/storage/components/StorageKeySection.d.ts +3 -1
  45. package/lib/typescript/storage/components/StorageKeySection.d.ts.map +1 -1
  46. package/lib/typescript/storage/components/StorageModalWithTabs.d.ts.map +1 -1
  47. package/lib/typescript/storage/components/StorageScalarKeyEditor.d.ts.map +1 -1
  48. package/lib/typescript/storage/components/StorageTypeFilterBar.d.ts.map +1 -1
  49. package/lib/typescript/storage/components/StorageValueEditModal.d.ts.map +1 -1
  50. package/lib/typescript/storage/hooks/useTreeDraft.d.ts +9 -1
  51. package/lib/typescript/storage/hooks/useTreeDraft.d.ts.map +1 -1
  52. package/lib/typescript/storage/utils/deleteStorageKeys.d.ts +15 -5
  53. package/lib/typescript/storage/utils/deleteStorageKeys.d.ts.map +1 -1
  54. package/package.json +5 -5
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { memo } from "react";
4
4
  import { View, Text, StyleSheet, TouchableOpacity } from "react-native";
5
- import { macOSColors, night, CompactRow, TypeBadge, HardDrive, Square, CheckSquare, Edit3, EyeOff, Pin, ExpandedInfoRow, PillBadge } from "@buoy-gg/shared-ui";
5
+ import { macOSColors, night, CompactRow, TypeBadge, HardDrive, Square, CheckSquare, Edit3, EyeOff, Pin, Trash2, ExpandedInfoRow, PillBadge } from "@buoy-gg/shared-ui";
6
6
  import { getStorageTypeLabel } from "../utils/storageQueryUtils";
7
7
  import { getValueTypeLabel, getValueTypeWithPreview, parseStorageValue } from "../utils/valueType";
8
8
  import { DataViewer } from "@buoy-gg/shared-ui/dataViewer";
@@ -89,6 +89,7 @@ export const StorageKeyRow = /*#__PURE__*/memo(function StorageKeyRow({
89
89
  onTogglePin,
90
90
  onEditKey,
91
91
  onToggleKey,
92
+ onDeleteKey,
92
93
  editBlockedReason
93
94
  }) {
94
95
  const canEdit = onEditKey != null && editBlockedReason == null;
@@ -138,6 +139,9 @@ export const StorageKeyRow = /*#__PURE__*/memo(function StorageKeyRow({
138
139
  children: String(eventCount)
139
140
  }), eventCount > 1 && onViewHistory && /*#__PURE__*/_jsx(TouchableOpacity, {
140
141
  onPress: onViewHistory,
142
+ testID: "buoy-storage-key-history",
143
+ accessibilityLabel: `View history for ${storageKey.key}`,
144
+ accessibilityRole: "button",
141
145
  style: styles.viewHistoryButton,
142
146
  hitSlop: {
143
147
  top: 6,
@@ -217,7 +221,14 @@ export const StorageKeyRow = /*#__PURE__*/memo(function StorageKeyRow({
217
221
  }) : null, onTogglePin || onHideKey || canEdit ? /*#__PURE__*/_jsxs(View, {
218
222
  style: styles.actionRow,
219
223
  children: [canEdit ? /*#__PURE__*/_jsxs(TouchableOpacity, {
220
- style: styles.editButton,
224
+ style: styles.editButton
225
+ // One handle for both jobs on purpose: this is the card's single
226
+ // "change it" affordance, and which of the two it performs is the
227
+ // key's type, not a different control.
228
+ ,
229
+ testID: "buoy-storage-key-edit",
230
+ accessibilityLabel: isBoolean && onToggleKey ? `Toggle ${storageKey.key}` : `Edit ${storageKey.key}`,
231
+ accessibilityRole: "button",
221
232
  onPress: () => isBoolean && onToggleKey ? onToggleKey(storageKey) : onEditKey?.(storageKey),
222
233
  hitSlop: {
223
234
  top: 6,
@@ -234,6 +245,9 @@ export const StorageKeyRow = /*#__PURE__*/memo(function StorageKeyRow({
234
245
  })]
235
246
  }) : null, onTogglePin ? /*#__PURE__*/_jsxs(TouchableOpacity, {
236
247
  style: [styles.actionChip, isPinned && styles.actionChipActive],
248
+ testID: "buoy-storage-key-pin",
249
+ accessibilityLabel: isPinned ? `Unpin ${storageKey.key}` : `Pin ${storageKey.key} to top`,
250
+ accessibilityRole: "button",
237
251
  onPress: () => onTogglePin(storageKey.key),
238
252
  hitSlop: {
239
253
  top: 6,
@@ -253,6 +267,9 @@ export const StorageKeyRow = /*#__PURE__*/memo(function StorageKeyRow({
253
267
  })]
254
268
  }) : null, onHideKey ? /*#__PURE__*/_jsxs(TouchableOpacity, {
255
269
  style: styles.actionChip,
270
+ testID: "buoy-storage-key-hide",
271
+ accessibilityLabel: `Hide ${storageKey.key} from list`,
272
+ accessibilityRole: "button",
256
273
  onPress: () => onHideKey(storageKey),
257
274
  hitSlop: {
258
275
  top: 6,
@@ -269,6 +286,27 @@ export const StorageKeyRow = /*#__PURE__*/memo(function StorageKeyRow({
269
286
  }],
270
287
  children: "Hide from list"
271
288
  })]
289
+ }) : null, canEdit && onDeleteKey ? /*#__PURE__*/_jsxs(TouchableOpacity, {
290
+ style: [styles.actionChip, styles.dangerChip],
291
+ testID: "buoy-storage-key-delete",
292
+ accessibilityLabel: `Delete key ${storageKey.key}`,
293
+ accessibilityRole: "button",
294
+ onPress: () => onDeleteKey(storageKey),
295
+ hitSlop: {
296
+ top: 6,
297
+ bottom: 6,
298
+ left: 6,
299
+ right: 6
300
+ },
301
+ children: [/*#__PURE__*/_jsx(Trash2, {
302
+ size: 12,
303
+ color: night.color.danger
304
+ }), /*#__PURE__*/_jsx(Text, {
305
+ style: [styles.actionChipText, {
306
+ color: night.color.danger
307
+ }],
308
+ children: "Delete key"
309
+ })]
272
310
  }) : null]
273
311
  }) : null]
274
312
  });
@@ -281,6 +319,12 @@ export const StorageKeyRow = /*#__PURE__*/memo(function StorageKeyRow({
281
319
  // Create checkbox element for select mode
282
320
  const selectionCheckbox = isSelectMode ? /*#__PURE__*/_jsx(TouchableOpacity, {
283
321
  onPress: handleCheckboxPress,
322
+ testID: `buoy-storage-checkbox-${storageKey.storageType}-${storageKey.key}`,
323
+ accessibilityLabel: `Select ${storageKey.key}`,
324
+ accessibilityRole: "checkbox",
325
+ accessibilityState: {
326
+ checked: isSelected
327
+ },
284
328
  style: styles.checkboxContainer,
285
329
  hitSlop: {
286
330
  top: 8,
@@ -454,6 +498,9 @@ const styles = StyleSheet.create({
454
498
  borderWidth: 1,
455
499
  borderColor: night.color.border
456
500
  },
501
+ dangerChip: {
502
+ borderColor: night.color.danger + "55"
503
+ },
457
504
  actionChipActive: {
458
505
  backgroundColor: night.color.accentSoft,
459
506
  borderColor: night.color.accentBorderStrong
@@ -29,17 +29,32 @@ export function StorageKeySection({
29
29
  onTogglePin,
30
30
  onEditKey,
31
31
  onToggleKey,
32
+ onDeleteKey,
32
33
  editBlockedFor
33
34
  }) {
34
- const [expandedKey, setExpandedKey] = useState(null);
35
- const handleKeyPress = useCallback(storageKey => {
36
- setExpandedKey(prev => prev === storageKey.key ? null : storageKey.key);
37
- }, []);
38
-
39
- // Generate unique identifier for a storage key
35
+ /**
36
+ * Identifies a ROW, not a key name.
37
+ *
38
+ * The same name routinely exists in more than one place — an app that keeps
39
+ * `auth.refreshToken` in both MMKV and the keychain has two rows called
40
+ * that, and they are different values in different stores.
41
+ */
40
42
  const getKeyIdentifier = useCallback(storageKey => {
41
43
  return storageKey.instanceId ? `${storageKey.storageType}-${storageKey.instanceId}-${storageKey.key}` : `${storageKey.storageType}-${storageKey.key}`;
42
44
  }, []);
45
+
46
+ /**
47
+ * Which ROW is expanded — by identifier, not by key name.
48
+ *
49
+ * Keyed by name, tapping one of a pair of same-named rows opened BOTH of
50
+ * them: two cards, two value trees, and two Edit buttons, one of which
51
+ * writes to a store you weren't looking at.
52
+ */
53
+ const [expandedKey, setExpandedKey] = useState(null);
54
+ const handleKeyPress = useCallback(storageKey => {
55
+ const id = getKeyIdentifier(storageKey);
56
+ setExpandedKey(prev => prev === id ? null : id);
57
+ }, [getKeyIdentifier]);
43
58
  if (keys.length === 0 && title === "Required Keys") {
44
59
  return /*#__PURE__*/_jsxs(View, {
45
60
  style: styles.sectionContainer,
@@ -76,7 +91,7 @@ export function StorageKeySection({
76
91
  const uniqueKey = getKeyIdentifier(storageKey);
77
92
  return /*#__PURE__*/_jsx(StorageKeyRow, {
78
93
  storageKey: storageKey,
79
- isExpanded: !isSelectMode && expandedKey === storageKey.key,
94
+ isExpanded: !isSelectMode && expandedKey === uniqueKey,
80
95
  onPress: handleKeyPress,
81
96
  isSelectMode: isSelectMode,
82
97
  isSelected: selectedKeys.has(uniqueKey),
@@ -86,6 +101,7 @@ export function StorageKeySection({
86
101
  onHideKey: onHideKey,
87
102
  onEditKey: onEditKey,
88
103
  onToggleKey: onToggleKey,
104
+ onDeleteKey: onDeleteKey,
89
105
  editBlockedReason: editBlockedFor?.(storageKey),
90
106
  isPinned: pinnedKeys?.has(storageKey.key),
91
107
  onTogglePin: onTogglePin
@@ -545,7 +545,8 @@ export function StorageModalWithTabs({
545
545
  };
546
546
  return /*#__PURE__*/_jsx(StorageEventCard, {
547
547
  data: cardData,
548
- onPress: () => handleRawEventPress(item)
548
+ onPress: () => handleRawEventPress(item),
549
+ testID: `buoy-storage-event-${item.id}`
549
550
  });
550
551
  }, [handleRawEventPress]);
551
552
  if (!visible) return null;
@@ -582,6 +583,7 @@ export function StorageModalWithTabs({
582
583
  const ascSortedEvents = [...selectedHistoryConversation.events].sort((a, b) => a.timestamp.getTime() - b.timestamp.getTime());
583
584
  const newestFirstEvents = [...ascSortedEvents].reverse();
584
585
  return /*#__PURE__*/_jsx(FlatList, {
586
+ testID: "buoy-storage-history-list",
585
587
  style: styles.flexFill,
586
588
  data: newestFirstEvents,
587
589
  keyExtractor: item => item.id,
@@ -599,7 +601,8 @@ export function StorageModalWithTabs({
599
601
  };
600
602
  return /*#__PURE__*/_jsx(StorageEventCard, {
601
603
  data: cardData,
602
- onPress: () => setSelectedHistoryEventIndex(ascIdx >= 0 ? ascIdx : 0)
604
+ onPress: () => setSelectedHistoryEventIndex(ascIdx >= 0 ? ascIdx : 0),
605
+ testID: `buoy-storage-history-event-${item.id}`
603
606
  });
604
607
  },
605
608
  contentContainerStyle: styles.listContent,
@@ -677,6 +680,7 @@ export function StorageModalWithTabs({
677
680
  return /*#__PURE__*/_jsxs(View, {
678
681
  style: styles.flexFill,
679
682
  children: [eventTypeFilterBar, /*#__PURE__*/_jsx(FlatList, {
683
+ testID: "buoy-storage-events-list",
680
684
  style: styles.flexFill,
681
685
  data: visibleEvents,
682
686
  renderItem: renderEventItem,
@@ -754,6 +758,7 @@ export function StorageModalWithTabs({
754
758
  setIsSearchActive(false);
755
759
  },
756
760
  placeholder: "Search storage keys...",
761
+ testID: "buoy-storage-search",
757
762
  autoFocus: true,
758
763
  onSubmitEditing: () => setIsSearchActive(false),
759
764
  returnKeyType: "search",
@@ -768,6 +773,7 @@ export function StorageModalWithTabs({
768
773
  label: `Events${filteredEvents.length > 0 ? ` (${filteredEvents.length})` : ""}`
769
774
  }],
770
775
  activeTab: activeTab,
776
+ testIDPrefix: "buoy-storage-tab",
771
777
  onTabChange: tab => {
772
778
  setActiveTab(tab);
773
779
  setSelectedHistoryKey(null);
@@ -780,13 +786,18 @@ export function StorageModalWithTabs({
780
786
  children: [onRefresh && !isSearchActive ? /*#__PURE__*/_jsx(TouchableOpacity, {
781
787
  onPress: onRefresh,
782
788
  style: styles.iconButton,
789
+ testID: "buoy-storage-refresh",
783
790
  accessibilityLabel: "Refresh storage",
791
+ accessibilityRole: "button",
784
792
  children: /*#__PURE__*/_jsx(RefreshCw, {
785
793
  size: 14,
786
794
  color: night.color.textSecondary
787
795
  })
788
796
  }) : null, /*#__PURE__*/_jsx(TouchableOpacity, {
789
797
  onPress: handleToggleFilters,
798
+ testID: "buoy-storage-filters",
799
+ accessibilityLabel: "Storage filters",
800
+ accessibilityRole: "button",
790
801
  style: [styles.iconButton, (ignoredPatterns.size > 0 || enabledStorageTypes.size < 3) && styles.activeFilterButton],
791
802
  children: /*#__PURE__*/_jsx(Filter, {
792
803
  size: 14,
@@ -795,6 +806,9 @@ export function StorageModalWithTabs({
795
806
  }), activeTab === "browser" && !isSearchActive && /*#__PURE__*/_jsxs(_Fragment, {
796
807
  children: [/*#__PURE__*/_jsx(TouchableOpacity, {
797
808
  onPress: () => setIsSearchActive(true),
809
+ testID: "buoy-storage-search-open",
810
+ accessibilityLabel: "Open search",
811
+ accessibilityRole: "button",
798
812
  style: styles.iconButton,
799
813
  children: /*#__PURE__*/_jsx(Search, {
800
814
  size: 14,
@@ -803,20 +817,24 @@ export function StorageModalWithTabs({
803
817
  }), /*#__PURE__*/_jsx(ToolbarCopyButton, {
804
818
  value: getStorageSnapshot,
805
819
  disabled: storageDataRef.current.length === 0,
806
- buttonStyle: styles.iconButton
820
+ buttonStyle: styles.iconButton,
821
+ testID: "buoy-storage-copy"
807
822
  })]
808
823
  }), activeTab === "events" && /*#__PURE__*/_jsxs(_Fragment, {
809
824
  children: [/*#__PURE__*/_jsx(ToolbarCopyButton, {
810
825
  value: getEventsSnapshot,
811
826
  disabled: filteredEvents.length === 0,
812
- buttonStyle: styles.iconButton
827
+ buttonStyle: styles.iconButton,
828
+ testID: "buoy-storage-events-copy"
813
829
  }), /*#__PURE__*/_jsx(PowerToggleButton, {
814
830
  isEnabled: isListening,
815
831
  onToggle: handleToggleListening,
816
- accessibilityLabel: "Toggle storage event monitoring"
832
+ accessibilityLabel: "Toggle storage event monitoring",
833
+ testID: "buoy-storage-power"
817
834
  }), /*#__PURE__*/_jsx(ToolbarClearButton, {
818
835
  onPress: handleClearEvents,
819
- buttonStyle: styles.iconButton
836
+ buttonStyle: styles.iconButton,
837
+ testID: "buoy-storage-clear-events"
820
838
  })]
821
839
  })]
822
840
  })]
@@ -886,7 +904,8 @@ const styles = StyleSheet.create({
886
904
  paddingVertical: 8,
887
905
  borderBottomWidth: 1,
888
906
  borderBottomColor: macOSColors.border.default,
889
- backgroundColor: macOSColors.background.card
907
+ // Clear, like Bench — the host's hoisted sky shows through the header.
908
+ backgroundColor: "transparent"
890
909
  },
891
910
  headerSearchContainer: {
892
911
  flex: 1
@@ -17,6 +17,21 @@ import { useCallback, useState } from "react";
17
17
  import { Alert } from "react-native";
18
18
  import { StorageValueEditModal } from "./StorageValueEditModal";
19
19
  import { jsx as _jsx } from "react/jsx-runtime";
20
+ /**
21
+ * The text `setStorageValue` should store.
22
+ *
23
+ * A string is stored AS ITSELF — `JSON.stringify` here was adding quotes a
24
+ * plain string never had. AsyncStorage hid it (the browser reads values back
25
+ * through `JSON.parse`, so the tool agreed with itself) but the app's own
26
+ * `getItem` saw `"dark"` where it had written `dark`; MMKV stores strings
27
+ * natively and showed the quotes right in the row, compounding on every edit.
28
+ *
29
+ * Everything else keeps JSON: for a number or a boolean that IS its text, and
30
+ * containers never reach this editor.
31
+ */
32
+ function serializeScalar(value) {
33
+ return typeof value === "string" ? value : JSON.stringify(value);
34
+ }
20
35
  export function StorageScalarKeyEditor({
21
36
  storageKey,
22
37
  value,
@@ -27,7 +42,7 @@ export function StorageScalarKeyEditor({
27
42
  const save = useCallback(next => {
28
43
  if (saving) return;
29
44
  setSaving(true);
30
- onSave(JSON.stringify(next)).then(onClose).catch(e => {
45
+ onSave(serializeScalar(next)).then(onClose).catch(e => {
31
46
  setSaving(false);
32
47
  Alert.alert("Couldn't save", e instanceof Error ? e.message : String(e));
33
48
  });
@@ -52,6 +52,8 @@ export function StorageTypeFilterBar({
52
52
  const isActive = active === segment.id;
53
53
  const accent = segment.color ?? night.color.accent;
54
54
  return /*#__PURE__*/_jsxs(TouchableOpacity, {
55
+ testID: `buoy-storage-type-${segment.id}`,
56
+ accessibilityRole: "button",
55
57
  accessibilityLabel: `Filter by ${segment.label}`,
56
58
  accessibilityState: {
57
59
  selected: isActive
@@ -82,6 +82,8 @@ export function StorageValueEditModal({
82
82
  style: styles.scrim,
83
83
  activeOpacity: 1,
84
84
  onPress: busy ? undefined : onCancel,
85
+ testID: "buoy-storage-value-scrim",
86
+ accessibilityRole: "button",
85
87
  accessibilityLabel: "Dismiss editor"
86
88
  }), /*#__PURE__*/_jsx(View, {
87
89
  style: styles.panel,
@@ -111,6 +113,8 @@ export function StorageValueEditModal({
111
113
  style: styles.fieldScroll,
112
114
  keyboardShouldPersistTaps: "handled",
113
115
  children: /*#__PURE__*/_jsx(TextInput, {
116
+ testID: "buoy-storage-value-input",
117
+ accessibilityLabel: "Value",
114
118
  value: text,
115
119
  onChangeText: setText,
116
120
  autoFocus: true,
@@ -121,8 +125,14 @@ export function StorageValueEditModal({
121
125
  // Multiline for anything textual: stored values are long more
122
126
  // often than they're short, and a single line hides that.
123
127
  ,
124
- multiline: mode !== "number",
125
- keyboardType: mode === "number" ? "numeric" : "default",
128
+ multiline: mode !== "number"
129
+ // ASCII for raw JSON, because iOS Smart Punctuation is ON by
130
+ // default and rewrites the quotes you type as curly ones —
131
+ // which makes the text unparseable, disables Save, and leaves
132
+ // an "invalid JSON" message whose cause is invisible at a
133
+ // glance. An ASCII keyboard doesn't do the substitution.
134
+ ,
135
+ keyboardType: mode === "number" ? "numeric" : mode === "raw" ? "ascii-capable" : "default",
126
136
  onSubmitEditing: mode === "number" ? commit : undefined,
127
137
  placeholder: mode === "raw" ? "{ }" : "value",
128
138
  placeholderTextColor: night.color.placeholder,
@@ -136,6 +146,8 @@ export function StorageValueEditModal({
136
146
  children: [/*#__PURE__*/_jsx(TouchableOpacity, {
137
147
  onPress: onCancel,
138
148
  disabled: busy,
149
+ testID: "buoy-storage-value-cancel",
150
+ accessibilityRole: "button",
139
151
  accessibilityLabel: "Cancel edit",
140
152
  style: styles.cancelButton,
141
153
  children: /*#__PURE__*/_jsx(Text, {
@@ -145,6 +157,8 @@ export function StorageValueEditModal({
145
157
  }), mode === "boolean" ? null : /*#__PURE__*/_jsx(TouchableOpacity, {
146
158
  onPress: commit,
147
159
  disabled: blocked,
160
+ testID: "buoy-storage-value-save",
161
+ accessibilityRole: "button",
148
162
  accessibilityLabel: saveLabel,
149
163
  style: [styles.saveButton, blocked && styles.saveDisabled],
150
164
  children: /*#__PURE__*/_jsx(Text, {
@@ -165,6 +179,8 @@ function BooleanChoice({
165
179
  style: styles.boolRow,
166
180
  children: [true, false].map(option => /*#__PURE__*/_jsx(TouchableOpacity, {
167
181
  onPress: () => onPick(option),
182
+ testID: `buoy-storage-value-${option}`,
183
+ accessibilityRole: "button",
168
184
  accessibilityLabel: `Set ${option}`,
169
185
  style: [styles.boolButton, current === option && styles.boolActive],
170
186
  children: /*#__PURE__*/_jsx(Text, {
@@ -62,12 +62,23 @@ export function useTreeDraft(liveValue, save) {
62
62
  const selectAt = useCallback(path => {
63
63
  setSelectPath(path);
64
64
  }, []);
65
+
66
+ /** Leave edit mode entirely. Only correct on the way out (after a write). */
65
67
  const reset = useCallback(() => {
66
68
  setIsEditing(false);
67
69
  setDraft(undefined);
68
70
  setSelectPath(undefined);
69
71
  setError(null);
70
72
  }, []);
73
+
74
+ /** Re-seed the draft from what's stored, staying in edit mode. */
75
+ const discard = useCallback(() => {
76
+ setDraft(liveValue);
77
+ setBaseline(JSON.stringify(liveValue));
78
+ setSelectPath(undefined);
79
+ setError(null);
80
+ setIsEditing(true);
81
+ }, [liveValue]);
71
82
  const commit = useCallback(async () => {
72
83
  if (!isDirty || !save) {
73
84
  reset();
@@ -98,6 +109,6 @@ export function useTreeDraft(liveValue, save) {
98
109
  apply,
99
110
  selectAt,
100
111
  commit,
101
- discard: reset
112
+ discard
102
113
  };
103
114
  }
@@ -5,10 +5,15 @@
5
5
  *
6
6
  * Each backend removes keys differently — AsyncStorage takes a batch,
7
7
  * SecureStore has to go through the registry (only it knows each key's
8
- * `keychainService` options), and MMKV deletes per registered instance. Two call
9
- * sites need this (the selection action bar and a single row's "Delete key"),
10
- * and a second copy of that fan-out is exactly how one backend quietly stops
11
- * being cleaned up.
8
+ * `keychainService` options), and MMKV deletes per registered instance. A
9
+ * second copy of that fan-out is exactly how one backend quietly stops being
10
+ * cleaned up — which is not hypothetical: the MMKV branch called a method
11
+ * react-native-mmkv v4 had renamed, and deleting an MMKV key silently did
12
+ * nothing until an e2e test deleted from all three backends at once.
13
+ *
14
+ * One call site today: the selection action bar. Deleting is deliberately not
15
+ * an affordance on the row itself — see `StorageKeyRow`, whose expanded card
16
+ * carries three actions and only one of them changes anything.
12
17
  *
13
18
  * Pro gating and confirmation are deliberately NOT here: they belong to the UI
14
19
  * that has the user's attention. This function assumes the caller already asked.
@@ -16,6 +21,30 @@
16
21
 
17
22
  import { removeMany } from "./asyncStorageCompat";
18
23
  import { secureStoreRegistry } from "./SecureStoreRegistry";
24
+ /**
25
+ * Remove one key from an MMKV instance, whichever version it is.
26
+ *
27
+ * react-native-mmkv v4 renamed `delete(key)` to `remove(key)`. Calling the old
28
+ * name on a v4 instance throws, and because the callers wrap deletion in a
29
+ * try/catch that only surfaces an alert, the visible result was a key that
30
+ * refused to delete — the same shape as a permissions problem or a read-only
31
+ * instance, and nothing to point at the real cause.
32
+ *
33
+ * `storageSyncAdapter` and `snapshotProvider` already did this; this path was
34
+ * the one that missed it.
35
+ */
36
+ function removeMMKVKey(instance, key) {
37
+ if (typeof instance.remove === "function") {
38
+ instance.remove(key);
39
+ return;
40
+ }
41
+ if (typeof instance.delete === "function") {
42
+ instance.delete(key);
43
+ return;
44
+ }
45
+ throw new Error("MMKV instance exposes neither remove() nor delete()");
46
+ }
47
+
19
48
  /**
20
49
  * Removes every key from whichever backend holds it. Rejects on the first
21
50
  * failure — callers surface that, rather than reporting a partial delete as
@@ -42,7 +71,7 @@ export async function deleteStorageKeys(keys, mmkvInstances) {
42
71
  Object.entries(byInstance).forEach(([instanceId, instanceKeys]) => {
43
72
  const inst = mmkvInstances.find(i => i.id === instanceId);
44
73
  if (inst) {
45
- instanceKeys.forEach(key => inst.instance.delete(key));
74
+ instanceKeys.forEach(key => removeMMKVKey(inst.instance, key));
46
75
  }
47
76
  });
48
77
  }
@@ -1 +1 @@
1
- {"version":3,"file":"GameUIStorageBrowser.d.ts","sourceRoot":"","sources":["../../../../src/storage/components/GameUIStorageBrowser.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,gBAAgB,EACjB,MAAM,OAAO,CAAC;AAWf,OAAO,EAAkB,kBAAkB,EAAmB,MAAM,UAAU,CAAC;AAK/E,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACvB,MAAM,sBAAsB,CAAC;AA2C9B;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,QAAmC,CAAC;AAEpE,UAAU,yBAAyB;IACjC,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC3C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC;IACzC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,mBAAmB,CAAC,EAAE,GAAG,CAAC,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC,CAAC;IACvD;;;;OAIG;IACH,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC3D,mFAAmF;IACnF,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE;QAC9B,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;KACrB,KAAK,IAAI,CAAC;IACX,yCAAyC;IACzC,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,kCAAkC;IAClC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,6EAA6E;IAC7E,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,yBAAyB,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC9D,yEAAyE;IACzE,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,oBAAoB,CAAC,EACnC,mBAAwB,EACxB,WAAmB,EACnB,eAA0C,EAC1C,eAAe,EACf,YAAY,EACZ,WAAgB,EAChB,cAAc,EACd,eAAe,EACf,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,EACpB,UAAU,EACV,WAAW,EACX,iBAAiB,EACjB,yBAAyB,EACzB,kBAAkB,GACnB,EAAE,yBAAyB,+BAg+B3B"}
1
+ {"version":3,"file":"GameUIStorageBrowser.d.ts","sourceRoot":"","sources":["../../../../src/storage/components/GameUIStorageBrowser.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,gBAAgB,EACjB,MAAM,OAAO,CAAC;AAWf,OAAO,EAAkB,kBAAkB,EAAmB,MAAM,UAAU,CAAC;AAK/E,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACvB,MAAM,sBAAsB,CAAC;AA2C9B;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,QAAmC,CAAC;AAEpE,UAAU,yBAAyB;IACjC,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC3C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC;IACzC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,mBAAmB,CAAC,EAAE,GAAG,CAAC,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC,CAAC;IACvD;;;;OAIG;IACH,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC3D,mFAAmF;IACnF,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE;QAC9B,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;KACrB,KAAK,IAAI,CAAC;IACX,yCAAyC;IACzC,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,kCAAkC;IAClC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,6EAA6E;IAC7E,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,yBAAyB,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC9D,yEAAyE;IACzE,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,oBAAoB,CAAC,EACnC,mBAAwB,EACxB,WAAmB,EACnB,eAA0C,EAC1C,eAAe,EACf,YAAY,EACZ,WAAgB,EAChB,cAAc,EACd,eAAe,EACf,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,EACpB,UAAU,EACV,WAAW,EACX,iBAAiB,EACjB,yBAAyB,EACzB,kBAAkB,GACnB,EAAE,yBAAyB,+BA0hC3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"SelectionActionBar.d.ts","sourceRoot":"","sources":["../../../../src/storage/components/SelectionActionBar.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG1C,UAAU,uBAAuB;IAC/B,4BAA4B;IAC5B,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,kCAAkC;IAClC,aAAa,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,GAAG,CAAA;KAAE,CAAC,CAAC;IACpD,yCAAyC;IACzC,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,gEAAgE;IAChE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;IAC9C,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,kCAAkC;IAClC,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,mCAAmC;IACnC,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,kBAAkB,CAAC,EACjC,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,gBAAgB,GACjB,EAAE,uBAAuB,sCA6HzB"}
1
+ {"version":3,"file":"SelectionActionBar.d.ts","sourceRoot":"","sources":["../../../../src/storage/components/SelectionActionBar.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG1C,UAAU,uBAAuB;IAC/B,4BAA4B;IAC5B,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,kCAAkC;IAClC,aAAa,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,GAAG,CAAA;KAAE,CAAC,CAAC;IACpD,yCAAyC;IACzC,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,gEAAgE;IAChE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;IAC9C,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,kCAAkC;IAClC,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,mCAAmC;IACnC,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,kBAAkB,CAAC,EACjC,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,gBAAgB,GACjB,EAAE,uBAAuB,sCA6IzB"}
@@ -1 +1 @@
1
- {"version":3,"file":"StorageActionButtons.d.ts","sourceRoot":"","sources":["../../../../src/storage/components/StorageActionButtons.tsx"],"names":[],"mappings":"AAOA,UAAU,yBAAyB;IACjC,iCAAiC;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,GAAG,CAAA;KAAE,CAAC,CAAC;IACrD,iBAAiB,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IACxD,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,uCAAuC;IACvC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,wCAAwC;IACxC,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,+BAA+B;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,oBAAoB,CAAC,EACnC,SAAS,EACT,aAAkB,EAClB,iBAAyB,EACzB,eAAe,EACf,YAAoB,EACpB,kBAAkB,EAClB,aAAiB,GAClB,EAAE,yBAAyB,+BAiN3B"}
1
+ {"version":3,"file":"StorageActionButtons.d.ts","sourceRoot":"","sources":["../../../../src/storage/components/StorageActionButtons.tsx"],"names":[],"mappings":"AAOA,UAAU,yBAAyB;IACjC,iCAAiC;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,GAAG,CAAA;KAAE,CAAC,CAAC;IACrD,iBAAiB,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IACxD,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,uCAAuC;IACvC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,wCAAwC;IACxC,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,+BAA+B;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,oBAAoB,CAAC,EACnC,SAAS,EACT,aAAkB,EAClB,iBAAyB,EACzB,eAAe,EACf,YAAoB,EACpB,kBAAkB,EAClB,aAAiB,GAClB,EAAE,yBAAyB,+BA0O3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"StorageEventActionButton.d.ts","sourceRoot":"","sources":["../../../../src/storage/components/StorageEventActionButton.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;CAmBlB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,MAAM,OAAO,aAAa,CAAC;AAE3D,UAAU,6BAA6B;IACrC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,wBAAwB,CAAC,EACvC,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,QAAgB,EAChB,MAAc,GACf,EAAE,6BAA6B,+BA6C/B"}
1
+ {"version":3,"file":"StorageEventActionButton.d.ts","sourceRoot":"","sources":["../../../../src/storage/components/StorageEventActionButton.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;CAmBlB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,MAAM,OAAO,aAAa,CAAC;AAE3D,UAAU,6BAA6B;IACrC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,wBAAwB,CAAC,EACvC,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,QAAgB,EAChB,MAAc,GACf,EAAE,6BAA6B,+BA8C/B"}
@@ -30,6 +30,11 @@ interface StorageEventCardProps {
30
30
  data: StorageEventCardData;
31
31
  /** Called when the card is pressed */
32
32
  onPress: () => void;
33
+ /**
34
+ * Automation handle. The caller supplies it because the same key appears on
35
+ * many events — only the caller knows the event's own id.
36
+ */
37
+ testID?: string;
33
38
  /** Whether this card is selected */
34
39
  isSelected?: boolean;
35
40
  /** Whether to show chevron */
@@ -1 +1 @@
1
- {"version":3,"file":"StorageEventCard.d.ts","sourceRoot":"","sources":["../../../../src/storage/components/StorageEventCard.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH,oCAAoC;AACpC,MAAM,MAAM,gBAAgB,GACxB,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,MAAM,GACN,WAAW,GACX,QAAQ,GACR,OAAO,CAAC;AAEZ;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAU7D;AAED,MAAM,WAAW,oBAAoB;IACnC,uBAAuB;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,4DAA4D;IAC5D,UAAU,EAAE,MAAM,CAAC;IACnB,+EAA+E;IAC/E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kCAAkC;IAClC,kBAAkB,EAAE,IAAI,CAAC;IACzB,uCAAuC;IACvC,YAAY,EAAE,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC;IACpC,+EAA+E;IAC/E,SAAS,CAAC,EAAE,gBAAgB,CAAC;CAC9B;AAED,UAAU,qBAAqB;IAC7B,4BAA4B;IAC5B,IAAI,EAAE,oBAAoB,CAAC;IAC3B,sCAAsC;IACtC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,oCAAoC;IACpC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,8BAA8B;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAsDD,eAAO,MAAM,gBAAgB,6DA6B3B,CAAC"}
1
+ {"version":3,"file":"StorageEventCard.d.ts","sourceRoot":"","sources":["../../../../src/storage/components/StorageEventCard.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH,oCAAoC;AACpC,MAAM,MAAM,gBAAgB,GACxB,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,MAAM,GACN,WAAW,GACX,QAAQ,GACR,OAAO,CAAC;AAEZ;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAU7D;AAED,MAAM,WAAW,oBAAoB;IACnC,uBAAuB;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,4DAA4D;IAC5D,UAAU,EAAE,MAAM,CAAC;IACnB,+EAA+E;IAC/E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kCAAkC;IAClC,kBAAkB,EAAE,IAAI,CAAC;IACzB,uCAAuC;IACvC,YAAY,EAAE,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC;IACpC,+EAA+E;IAC/E,SAAS,CAAC,EAAE,gBAAgB,CAAC;CAC9B;AAED,UAAU,qBAAqB;IAC7B,4BAA4B;IAC5B,IAAI,EAAE,oBAAoB,CAAC;IAC3B,sCAAsC;IACtC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,8BAA8B;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAsDD,eAAO,MAAM,gBAAgB,6DAgC3B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"StorageEventFilterView.d.ts","sourceRoot":"","sources":["../../../../src/storage/components/StorageEventFilterView.tsx"],"names":[],"mappings":"AAYA,UAAU,2BAA2B;IACnC,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,mBAAmB,EAAE,GAAG,CAAC,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC,CAAC;IACtD,mBAAmB,EAAE,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,KAAK,IAAI,CAAC;CAClE;AAED,wBAAgB,sBAAsB,CAAC,EACrC,eAAe,EACf,eAAe,EACf,YAAY,EACZ,aAAkB,EAClB,mBAAmB,EACnB,mBAAmB,GACpB,EAAE,2BAA2B,+BAgH7B"}
1
+ {"version":3,"file":"StorageEventFilterView.d.ts","sourceRoot":"","sources":["../../../../src/storage/components/StorageEventFilterView.tsx"],"names":[],"mappings":"AAYA,UAAU,2BAA2B;IACnC,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,mBAAmB,EAAE,GAAG,CAAC,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC,CAAC;IACtD,mBAAmB,EAAE,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,KAAK,IAAI,CAAC;CAClE;AAED,wBAAgB,sBAAsB,CAAC,EACrC,eAAe,EACf,eAAe,EACf,YAAY,EACZ,aAAkB,EAClB,mBAAmB,EACnB,mBAAmB,GACpB,EAAE,2BAA2B,+BA4H7B"}
@@ -1 +1 @@
1
- {"version":3,"file":"StorageFilterCards.d.ts","sourceRoot":"","sources":["../../../../src/storage/components/StorageFilterCards.tsx"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,wBAAwB,CAAC;AAIhC,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,SAAS,GAAG,QAAQ,CAAC;AAC7D,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAQhE,UAAU,uBAAuB;IAC/B,KAAK,EAAE;QACL,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;QACtB,oBAAoB,EAAE,MAAM,CAAC;QAC7B,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;QACxB,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACrD,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACxD;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,QAAQ,EACR,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,YAAoB,EACpB,cAAc,EACd,iBAAyB,EACzB,mBAAmB,EACnB,UAAiB,GAClB,EAAE,uBAAuB,+BAwHzB"}
1
+ {"version":3,"file":"StorageFilterCards.d.ts","sourceRoot":"","sources":["../../../../src/storage/components/StorageFilterCards.tsx"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,wBAAwB,CAAC;AAIhC,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,SAAS,GAAG,QAAQ,CAAC;AAC7D,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAQhE,UAAU,uBAAuB;IAC/B,KAAK,EAAE;QACL,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;QACtB,oBAAoB,EAAE,MAAM,CAAC;QAC7B,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;QACxB,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACrD,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACxD;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,QAAQ,EACR,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,YAAoB,EACpB,cAAc,EACd,iBAAyB,EACzB,mBAAmB,EACnB,UAAiB,GAClB,EAAE,uBAAuB,+BAiIzB"}
@@ -1 +1 @@
1
- {"version":3,"file":"StorageKeyEditorScreen.d.ts","sourceRoot":"","sources":["../../../../src/storage/components/StorageKeyEditorScreen.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAoBH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAO/C,UAAU,2BAA2B;IACnC,UAAU,EAAE,cAAc,CAAC;IAC3B,8DAA8D;IAC9D,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,uEAAuE;IACvE,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAOD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,+BAgBxE"}
1
+ {"version":3,"file":"StorageKeyEditorScreen.d.ts","sourceRoot":"","sources":["../../../../src/storage/components/StorageKeyEditorScreen.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAqBH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAO/C,UAAU,2BAA2B;IACnC,UAAU,EAAE,cAAc,CAAC;IAC3B,8DAA8D;IAC9D,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,uEAAuE;IACvE,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAOD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,+BAgBxE"}
@@ -34,6 +34,15 @@ interface StorageKeyRowProps {
34
34
  * didn't pick — the tree's action dock flips them the same way.
35
35
  */
36
36
  onToggleKey?: (storageKey: StorageKeyInfo) => void;
37
+ /**
38
+ * Delete this key. Omit to leave the card non-destructive.
39
+ *
40
+ * Shown only when the key is editable at all: if the card already says this
41
+ * value can't be changed — a read-only instance, a biometric key — then
42
+ * deleting it isn't a different question, it's the same one with a worse
43
+ * outcome.
44
+ */
45
+ onDeleteKey?: (storageKey: StorageKeyInfo) => void;
37
46
  /** Why this key can't be edited (read-only instance, buffer, biometric). */
38
47
  editBlockedReason?: string | null;
39
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"StorageKeyRow.d.ts","sourceRoot":"","sources":["../../../../src/storage/components/StorageKeyRow.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AA6B1C,UAAU,kBAAkB;IAC1B,UAAU,EAAE,cAAc,CAAC;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,CAAC;IAC/C,uCAAuC;IACvC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oCAAoC;IACpC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,sCAAsC;IACtC,iBAAiB,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5E,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,8DAA8D;IAC9D,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,CAAC;IACjD,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qCAAqC;IACrC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,CAAC;IACjD;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,CAAC;IACnD,4EAA4E;IAC5E,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAgDD,eAAO,MAAM,aAAa,0DA2QxB,CAAC"}
1
+ {"version":3,"file":"StorageKeyRow.d.ts","sourceRoot":"","sources":["../../../../src/storage/components/StorageKeyRow.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AA6B1C,UAAU,kBAAkB;IAC1B,UAAU,EAAE,cAAc,CAAC;IAC3B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,CAAC;IAC/C,uCAAuC;IACvC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oCAAoC;IACpC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,sCAAsC;IACtC,iBAAiB,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5E,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,8DAA8D;IAC9D,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,CAAC;IACjD,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qCAAqC;IACrC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,CAAC;IACjD;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,CAAC;IACnD;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,CAAC;IACnD,4EAA4E;IAC5E,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAgDD,eAAO,MAAM,aAAa,0DAuTxB,CAAC"}
@@ -25,6 +25,8 @@ interface StorageKeySectionProps {
25
25
  onEditKey?: (storageKey: StorageKeyInfo) => void;
26
26
  /** Flip a boolean key in place, instead of opening an editor for it. */
27
27
  onToggleKey?: (storageKey: StorageKeyInfo) => void;
28
+ /** Delete a single key from its own card. Omit to keep rows non-destructive. */
29
+ onDeleteKey?: (storageKey: StorageKeyInfo) => void;
28
30
  /** Per-key reason editing is impossible (read-only / buffer / biometric). */
29
31
  editBlockedFor?: (storageKey: StorageKeyInfo) => string | null;
30
32
  }
@@ -36,6 +38,6 @@ interface StorageKeySectionProps {
36
38
  * - Prefer Composition over Configuration: Reuses patterns from EnvVarSection
37
39
  * - Extract Reusable Logic: Shares expansion state management pattern
38
40
  */
39
- export declare function StorageKeySection({ title, count, keys, emptyMessage, headerColor, isSelectMode, selectedKeys, onSelectionChange, eventCountByKey, onViewHistory, onHideKey, pinnedKeys, onTogglePin, onEditKey, onToggleKey, editBlockedFor, }: StorageKeySectionProps): import("react").JSX.Element | null;
41
+ export declare function StorageKeySection({ title, count, keys, emptyMessage, headerColor, isSelectMode, selectedKeys, onSelectionChange, eventCountByKey, onViewHistory, onHideKey, pinnedKeys, onTogglePin, onEditKey, onToggleKey, onDeleteKey, editBlockedFor, }: StorageKeySectionProps): import("react").JSX.Element | null;
40
42
  export {};
41
43
  //# sourceMappingURL=StorageKeySection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"StorageKeySection.d.ts","sourceRoot":"","sources":["../../../../src/storage/components/StorageKeySection.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAK1C,UAAU,sBAAsB;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mEAAmE;IACnE,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,sCAAsC;IACtC,iBAAiB,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5E,gCAAgC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,sDAAsD;IACtD,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,2DAA2D;IAC3D,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,CAAC;IACjD,8BAA8B;IAC9B,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,kCAAkC;IAClC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,0EAA0E;IAC1E,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,CAAC;IACjD,wEAAwE;IACxE,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,CAAC;IACnD,6EAA6E;IAC7E,cAAc,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,MAAM,GAAG,IAAI,CAAC;CAChE;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,KAAK,EACL,IAAI,EACJ,YAAY,EACZ,WAAW,EACX,YAAoB,EACpB,YAAwB,EACxB,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,SAAS,EACT,UAAU,EACV,WAAW,EACX,SAAS,EACT,WAAW,EACX,cAAc,GACf,EAAE,sBAAsB,sCAoExB"}
1
+ {"version":3,"file":"StorageKeySection.d.ts","sourceRoot":"","sources":["../../../../src/storage/components/StorageKeySection.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAK1C,UAAU,sBAAsB;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mEAAmE;IACnE,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,sCAAsC;IACtC,iBAAiB,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5E,gCAAgC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,sDAAsD;IACtD,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,2DAA2D;IAC3D,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,CAAC;IACjD,8BAA8B;IAC9B,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,kCAAkC;IAClC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,0EAA0E;IAC1E,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,CAAC;IACjD,wEAAwE;IACxE,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,CAAC;IACnD,gFAAgF;IAChF,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,IAAI,CAAC;IACnD,6EAA6E;IAC7E,cAAc,CAAC,EAAE,CAAC,UAAU,EAAE,cAAc,KAAK,MAAM,GAAG,IAAI,CAAC;CAChE;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,KAAK,EACL,IAAI,EACJ,YAAY,EACZ,WAAW,EACX,YAAoB,EACpB,YAAwB,EACxB,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,SAAS,EACT,UAAU,EACV,WAAW,EACX,SAAS,EACT,WAAW,EACX,WAAW,EACX,cAAc,GACf,EAAE,sBAAsB,sCAsFxB"}
@@ -1 +1 @@
1
- {"version":3,"file":"StorageModalWithTabs.d.ts","sourceRoot":"","sources":["../../../../src/storage/components/StorageModalWithTabs.tsx"],"names":[],"mappings":"AAgCA,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAY9C,OAAO,EAAoB,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAchF;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,QAAqC,CAAC;AAExE,UAAU,yBAAyB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,KAAK,IAAI,CAAC;IACvC,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC3C;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,GAAG,QAAQ,KAAK,IAAI,CAAC;IAClD;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;CAC/C;AAqBD,wBAAgB,oBAAoB,CAAC,EACnC,OAAO,EACP,OAAO,EACP,MAAM,EACN,UAAU,EACV,2BAAmC,EACnC,mBAAwB,EACxB,MAAc,EACd,WAAW,EACX,SAAS,EACT,aAAa,GACd,EAAE,yBAAyB,sCAu/B3B;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,KAAK,GAAE,IAAI,CAAC,yBAAyB,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAM,+BAG9E"}
1
+ {"version":3,"file":"StorageModalWithTabs.d.ts","sourceRoot":"","sources":["../../../../src/storage/components/StorageModalWithTabs.tsx"],"names":[],"mappings":"AAgCA,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAY9C,OAAO,EAAoB,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAchF;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,QAAqC,CAAC;AAExE,UAAU,yBAAyB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,KAAK,IAAI,CAAC;IACvC,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC3C;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,GAAG,QAAQ,KAAK,IAAI,CAAC;IAClD;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;CAC/C;AAqBD,wBAAgB,oBAAoB,CAAC,EACnC,OAAO,EACP,OAAO,EACP,MAAM,EACN,UAAU,EACV,2BAAmC,EACnC,mBAAwB,EACxB,MAAc,EACd,WAAW,EACX,SAAS,EACT,aAAa,GACd,EAAE,yBAAyB,sCAygC3B;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,KAAK,GAAE,IAAI,CAAC,yBAAyB,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAM,+BAG9E"}
@@ -1 +1 @@
1
- {"version":3,"file":"StorageScalarKeyEditor.d.ts","sourceRoot":"","sources":["../../../../src/storage/components/StorageScalarKeyEditor.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG/C,UAAU,2BAA2B;IACnC,UAAU,EAAE,cAAc,CAAC;IAC3B,6DAA6D;IAC7D,KAAK,EAAE,OAAO,CAAC;IACf,gFAAgF;IAChF,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,sBAAsB,CAAC,EACrC,UAAU,EACV,KAAK,EACL,MAAM,EACN,OAAO,GACR,EAAE,2BAA2B,+BA6B7B"}
1
+ {"version":3,"file":"StorageScalarKeyEditor.d.ts","sourceRoot":"","sources":["../../../../src/storage/components/StorageScalarKeyEditor.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG/C,UAAU,2BAA2B;IACnC,UAAU,EAAE,cAAc,CAAC;IAC3B,6DAA6D;IAC7D,KAAK,EAAE,OAAO,CAAC;IACf,gFAAgF;IAChF,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAkBD,wBAAgB,sBAAsB,CAAC,EACrC,UAAU,EACV,KAAK,EACL,MAAM,EACN,OAAO,GACR,EAAE,2BAA2B,+BA6B7B"}
@@ -1 +1 @@
1
- {"version":3,"file":"StorageTypeFilterBar.d.ts","sourceRoot":"","sources":["../../../../src/storage/components/StorageTypeFilterBar.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEpE,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;AAElE,UAAU,yBAAyB;IACjC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC5C,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AAmBD,wBAAgB,oBAAoB,CAAC,EACnC,MAAM,EACN,QAAQ,EACR,MAAM,GACP,EAAE,yBAAyB,+BAoD3B;AAED,0EAA0E;AAC1E,wBAAgB,kBAAkB,CAChC,KAAK,EAAE;IAAE,WAAW,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAA;CAAE,EAAE,GACpD,iBAAiB,CAInB"}
1
+ {"version":3,"file":"StorageTypeFilterBar.d.ts","sourceRoot":"","sources":["../../../../src/storage/components/StorageTypeFilterBar.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEpE,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;AAElE,UAAU,yBAAyB;IACjC,MAAM,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC5C,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AAmBD,wBAAgB,oBAAoB,CAAC,EACnC,MAAM,EACN,QAAQ,EACR,MAAM,GACP,EAAE,yBAAyB,+BAsD3B;AAED,0EAA0E;AAC1E,wBAAgB,kBAAkB,CAChC,KAAK,EAAE;IAAE,WAAW,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAA;CAAE,EAAE,GACpD,iBAAiB,CAInB"}