@buoy-gg/storage 7.0.21 → 7.0.23

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.
@@ -51,8 +51,12 @@ function getInstanceColor(instanceId) {
51
51
  return INSTANCE_COLORS[hash % INSTANCE_COLORS.length];
52
52
  }
53
53
 
54
- /** Free tier limit for storage keys */
55
- const FREE_TIER_KEY_LIMIT = exports.FREE_TIER_KEY_LIMIT = 25;
54
+ /**
55
+ * @deprecated Read the live limit with `useLimit("storage.keys")` — this only
56
+ * reports the FREE tier's value and is blind to the anonymous tier. Kept
57
+ * because it is part of the package's public exports.
58
+ */
59
+ const FREE_TIER_KEY_LIMIT = exports.FREE_TIER_KEY_LIMIT = _sharedUi.TIER_LIMITS["storage.keys"].free;
56
60
  function GameUIStorageBrowser({
57
61
  requiredStorageKeys = [],
58
62
  showFilters = false,
@@ -75,6 +79,8 @@ function GameUIStorageBrowser({
75
79
  applySafeAreaInset
76
80
  }) {
77
81
  const isPro = (0, _license.useIsPro)();
82
+ const keyLimit = (0, _sharedUi.useLimit)("storage.keys");
83
+ const mmkvInstanceLimit = (0, _sharedUi.useLimit)("storage.mmkvInstances");
78
84
  const [showUpgradeModal, setShowUpgradeModal] = (0, _react.useState)(false);
79
85
 
80
86
  // Auto-close upgrade modal when user becomes Pro
@@ -512,17 +518,13 @@ function GameUIStorageBrowser({
512
518
  return keys;
513
519
  }, [sortedKeys, activeFilter, activeStorageType, ignoredPatterns, searchQuery, selectedMMKVInstance, enabledStorageTypes, pinnedKeys]);
514
520
 
515
- // For free users, limit visible keys to FREE_TIER_KEY_LIMIT
516
- const visibleKeys = (0, _react.useMemo)(() => {
517
- if (isPro) return filteredKeys;
518
- return filteredKeys.slice(0, FREE_TIER_KEY_LIMIT);
519
- }, [filteredKeys, isPro]);
521
+ // Pro is Infinity here, so slice() returns everything.
522
+ const visibleKeys = (0, _react.useMemo)(() => filteredKeys.slice(0, keyLimit), [filteredKeys, keyLimit]);
520
523
 
521
524
  // Calculate how many keys are locked (only those matching current filter)
522
525
  const lockedKeyCount = (0, _react.useMemo)(() => {
523
- if (isPro) return 0;
524
- return Math.max(0, filteredKeys.length - FREE_TIER_KEY_LIMIT);
525
- }, [filteredKeys.length, isPro]);
526
+ return Math.max(0, filteredKeys.length - keyLimit);
527
+ }, [filteredKeys.length, keyLimit]);
526
528
  const hasLockedKeys = lockedKeyCount > 0;
527
529
 
528
530
  // Calculate stats from FILTERED keys to show actual visible counts
@@ -629,7 +631,7 @@ function GameUIStorageBrowser({
629
631
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
630
632
  style: styles.instanceNavbarLabel,
631
633
  children: "INSTANCES"
632
- }), !isPro && mmkvInstances.length > 1 && /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ProBadge, {
634
+ }), mmkvInstances.length > mmkvInstanceLimit && /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ProBadge, {
633
635
  style: {
634
636
  transform: [{
635
637
  scale: 0.85
@@ -657,7 +659,7 @@ function GameUIStorageBrowser({
657
659
  })
658
660
  })]
659
661
  }), mmkvInstances.map((inst, index) => {
660
- const isLocked = !isPro && index > 0;
662
+ const isLocked = index >= mmkvInstanceLimit;
661
663
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
662
664
  onPress: () => {
663
665
  if (isLocked) {
@@ -23,8 +23,12 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
23
23
  // Note: StorageEvent type is now imported from useStorageEvents hook
24
24
  // which handles both AsyncStorage and MMKV events via the centralized store
25
25
 
26
- // Free tier limit for storage events/conversations
27
- const FREE_TIER_EVENT_LIMIT = exports.FREE_TIER_EVENT_LIMIT = 25;
26
+ /**
27
+ * @deprecated Read the live limit with `useLimit("storage.events")` — this only
28
+ * reports the FREE tier's value and is blind to the anonymous tier. Kept
29
+ * because it is part of the package's public exports.
30
+ */
31
+ const FREE_TIER_EVENT_LIMIT = exports.FREE_TIER_EVENT_LIMIT = _sharedUi.TIER_LIMITS["storage.events"].free;
28
32
  function StorageModalWithTabs({
29
33
  visible,
30
34
  onClose,
@@ -38,6 +42,7 @@ function StorageModalWithTabs({
38
42
  onEventSelect
39
43
  }) {
40
44
  const isPro = (0, _license.useIsPro)();
45
+ const eventLimit = (0, _sharedUi.useLimit)("storage.events");
41
46
  const [activeTab, setActiveTab] = (0, _react.useState)("browser");
42
47
  (0, _react.useEffect)(() => {
43
48
  onTabChange?.(activeTab);
@@ -509,14 +514,11 @@ function StorageModalWithTabs({
509
514
  timestamp: event.timestamp.toISOString()
510
515
  }));
511
516
  }, [filteredEvents]);
512
- const visibleEvents = (0, _react.useMemo)(() => {
513
- if (isPro) return filteredEvents;
514
- return filteredEvents.slice(0, FREE_TIER_EVENT_LIMIT);
515
- }, [filteredEvents, isPro]);
516
- const lockedEventCount = (0, _react.useMemo)(() => {
517
- if (isPro) return 0;
518
- return Math.max(0, filteredEvents.length - FREE_TIER_EVENT_LIMIT);
519
- }, [filteredEvents.length, isPro]);
517
+
518
+ // Pro is Infinity here, so slice() returns everything and the locked count
519
+ // floors at 0 — no tier branching needed at the call site.
520
+ const visibleEvents = (0, _react.useMemo)(() => filteredEvents.slice(0, eventLimit), [filteredEvents, eventLimit]);
521
+ const lockedEventCount = (0, _react.useMemo)(() => Math.max(0, filteredEvents.length - eventLimit), [filteredEvents.length, eventLimit]);
520
522
 
521
523
  // FlatList optimization constants
522
524
  const END_REACHED_THRESHOLD = 0.8;
@@ -425,12 +425,10 @@ async function previewItems(target, base) {
425
425
  }
426
426
  items.push(item);
427
427
  }
428
- if (liveMode) {
429
- const biometric = _SecureStoreRegistry.secureStoreRegistry.getAll().filter(e => e.options.requireAuthentication).length;
430
- if (biometric > 0) {
431
- notes.push(`${biometric} biometric-protected secure key(s) are never read or written`);
432
- }
433
- }
428
+ // No blanket "N biometric-protected keys" note: a biometric key a restore
429
+ // would actually touch already gets its own won't-apply row carrying that
430
+ // exact reason, so the note only ever restated it for keys nothing was
431
+ // going to do anything with.
434
432
  return {
435
433
  items,
436
434
  notes
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { useMemo, useCallback, useState, useEffect } from "react";
4
4
  import { StyleSheet, Text, View, TouchableOpacity, ScrollView, Alert } from "react-native";
5
- import { absoluteFill } from "@buoy-gg/shared-ui";
5
+ import { absoluteFill, useLimit, TIER_LIMITS } from "@buoy-gg/shared-ui";
6
6
  import { Database, Zap, ProBadge, ProUpgradeModal } from "@buoy-gg/shared-ui";
7
7
  import { isDevToolsStorageKey } from "@buoy-gg/shared-ui";
8
8
  import { StorageKeySection } from "./StorageKeySection";
@@ -49,8 +49,12 @@ function getInstanceColor(instanceId) {
49
49
  return INSTANCE_COLORS[hash % INSTANCE_COLORS.length];
50
50
  }
51
51
 
52
- /** Free tier limit for storage keys */
53
- export const FREE_TIER_KEY_LIMIT = 25;
52
+ /**
53
+ * @deprecated Read the live limit with `useLimit("storage.keys")` — this only
54
+ * reports the FREE tier's value and is blind to the anonymous tier. Kept
55
+ * because it is part of the package's public exports.
56
+ */
57
+ export const FREE_TIER_KEY_LIMIT = TIER_LIMITS["storage.keys"].free;
54
58
  export function GameUIStorageBrowser({
55
59
  requiredStorageKeys = [],
56
60
  showFilters = false,
@@ -73,6 +77,8 @@ export function GameUIStorageBrowser({
73
77
  applySafeAreaInset
74
78
  }) {
75
79
  const isPro = useIsPro();
80
+ const keyLimit = useLimit("storage.keys");
81
+ const mmkvInstanceLimit = useLimit("storage.mmkvInstances");
76
82
  const [showUpgradeModal, setShowUpgradeModal] = useState(false);
77
83
 
78
84
  // Auto-close upgrade modal when user becomes Pro
@@ -510,17 +516,13 @@ export function GameUIStorageBrowser({
510
516
  return keys;
511
517
  }, [sortedKeys, activeFilter, activeStorageType, ignoredPatterns, searchQuery, selectedMMKVInstance, enabledStorageTypes, pinnedKeys]);
512
518
 
513
- // For free users, limit visible keys to FREE_TIER_KEY_LIMIT
514
- const visibleKeys = useMemo(() => {
515
- if (isPro) return filteredKeys;
516
- return filteredKeys.slice(0, FREE_TIER_KEY_LIMIT);
517
- }, [filteredKeys, isPro]);
519
+ // Pro is Infinity here, so slice() returns everything.
520
+ const visibleKeys = useMemo(() => filteredKeys.slice(0, keyLimit), [filteredKeys, keyLimit]);
518
521
 
519
522
  // Calculate how many keys are locked (only those matching current filter)
520
523
  const lockedKeyCount = useMemo(() => {
521
- if (isPro) return 0;
522
- return Math.max(0, filteredKeys.length - FREE_TIER_KEY_LIMIT);
523
- }, [filteredKeys.length, isPro]);
524
+ return Math.max(0, filteredKeys.length - keyLimit);
525
+ }, [filteredKeys.length, keyLimit]);
524
526
  const hasLockedKeys = lockedKeyCount > 0;
525
527
 
526
528
  // Calculate stats from FILTERED keys to show actual visible counts
@@ -627,7 +629,7 @@ export function GameUIStorageBrowser({
627
629
  children: [/*#__PURE__*/_jsx(Text, {
628
630
  style: styles.instanceNavbarLabel,
629
631
  children: "INSTANCES"
630
- }), !isPro && mmkvInstances.length > 1 && /*#__PURE__*/_jsx(ProBadge, {
632
+ }), mmkvInstances.length > mmkvInstanceLimit && /*#__PURE__*/_jsx(ProBadge, {
631
633
  style: {
632
634
  transform: [{
633
635
  scale: 0.85
@@ -655,7 +657,7 @@ export function GameUIStorageBrowser({
655
657
  })
656
658
  })]
657
659
  }), mmkvInstances.map((inst, index) => {
658
- const isLocked = !isPro && index > 0;
660
+ const isLocked = index >= mmkvInstanceLimit;
659
661
  return /*#__PURE__*/_jsxs(TouchableOpacity, {
660
662
  onPress: () => {
661
663
  if (isLocked) {
@@ -3,7 +3,7 @@
3
3
  import { useState, useCallback, useEffect, useRef, useMemo } from "react";
4
4
  import { Text, View, TouchableOpacity, StyleSheet, FlatList, Alert } from "react-native";
5
5
  import AsyncStorage from "@react-native-async-storage/async-storage";
6
- import { JsModal, ModalHeader, TabSelector, parseValue, devToolsStorageKeys, macOSColors, Database, Filter, RefreshCw, Search, SearchBar, PowerToggleButton, ToolbarCopyButton, ToolbarClearButton, truncatePayload, TickProvider } from "@buoy-gg/shared-ui";
6
+ import { JsModal, ModalHeader, TabSelector, parseValue, devToolsStorageKeys, macOSColors, Database, Filter, RefreshCw, Search, SearchBar, PowerToggleButton, ToolbarCopyButton, ToolbarClearButton, truncatePayload, TickProvider, useLimit, TIER_LIMITS } from "@buoy-gg/shared-ui";
7
7
  import { StorageBrowserMode } from "./StorageBrowserMode";
8
8
  import { StorageTypeFilterBar, countByStorageType } from "./StorageTypeFilterBar";
9
9
  import { clearAllAppStorage, clearAllStorageIncludingDevTools } from "../utils/clearAllStorage";
@@ -17,9 +17,13 @@ import { StorageEventCard } from "./StorageEventCard";
17
17
 
18
18
  import { useIsPro } from "@buoy-gg/license";
19
19
 
20
- // Free tier limit for storage events/conversations
20
+ /**
21
+ * @deprecated Read the live limit with `useLimit("storage.events")` — this only
22
+ * reports the FREE tier's value and is blind to the anonymous tier. Kept
23
+ * because it is part of the package's public exports.
24
+ */
21
25
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
22
- export const FREE_TIER_EVENT_LIMIT = 25;
26
+ export const FREE_TIER_EVENT_LIMIT = TIER_LIMITS["storage.events"].free;
23
27
  export function StorageModalWithTabs({
24
28
  visible,
25
29
  onClose,
@@ -33,6 +37,7 @@ export function StorageModalWithTabs({
33
37
  onEventSelect
34
38
  }) {
35
39
  const isPro = useIsPro();
40
+ const eventLimit = useLimit("storage.events");
36
41
  const [activeTab, setActiveTab] = useState("browser");
37
42
  useEffect(() => {
38
43
  onTabChange?.(activeTab);
@@ -504,14 +509,11 @@ export function StorageModalWithTabs({
504
509
  timestamp: event.timestamp.toISOString()
505
510
  }));
506
511
  }, [filteredEvents]);
507
- const visibleEvents = useMemo(() => {
508
- if (isPro) return filteredEvents;
509
- return filteredEvents.slice(0, FREE_TIER_EVENT_LIMIT);
510
- }, [filteredEvents, isPro]);
511
- const lockedEventCount = useMemo(() => {
512
- if (isPro) return 0;
513
- return Math.max(0, filteredEvents.length - FREE_TIER_EVENT_LIMIT);
514
- }, [filteredEvents.length, isPro]);
512
+
513
+ // Pro is Infinity here, so slice() returns everything and the locked count
514
+ // floors at 0 — no tier branching needed at the call site.
515
+ const visibleEvents = useMemo(() => filteredEvents.slice(0, eventLimit), [filteredEvents, eventLimit]);
516
+ const lockedEventCount = useMemo(() => Math.max(0, filteredEvents.length - eventLimit), [filteredEvents.length, eventLimit]);
515
517
 
516
518
  // FlatList optimization constants
517
519
  const END_REACHED_THRESHOLD = 0.8;
@@ -423,12 +423,10 @@ async function previewItems(target, base) {
423
423
  }
424
424
  items.push(item);
425
425
  }
426
- if (liveMode) {
427
- const biometric = secureStoreRegistry.getAll().filter(e => e.options.requireAuthentication).length;
428
- if (biometric > 0) {
429
- notes.push(`${biometric} biometric-protected secure key(s) are never read or written`);
430
- }
431
- }
426
+ // No blanket "N biometric-protected keys" note: a biometric key a restore
427
+ // would actually touch already gets its own won't-apply row carrying that
428
+ // exact reason, so the note only ever restated it for keys nothing was
429
+ // going to do anything with.
432
430
  return {
433
431
  items,
434
432
  notes
@@ -1,8 +1,12 @@
1
1
  import { MutableRefObject } from "react";
2
2
  import { RequiredStorageKey } from "../types";
3
3
  import { type StorageFilterType, type StorageTypeFilter } from "./StorageFilterCards";
4
- /** Free tier limit for storage keys */
5
- export declare const FREE_TIER_KEY_LIMIT = 25;
4
+ /**
5
+ * @deprecated Read the live limit with `useLimit("storage.keys")` — this only
6
+ * reports the FREE tier's value and is blind to the anonymous tier. Kept
7
+ * because it is part of the package's public exports.
8
+ */
9
+ export declare const FREE_TIER_KEY_LIMIT: number;
6
10
  interface GameUIStorageBrowserProps {
7
11
  requiredStorageKeys?: RequiredStorageKey[];
8
12
  showFilters?: boolean;
@@ -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,uCAAuC;AACvC,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC,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,+BA+9B3B"}
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,6 +1,11 @@
1
1
  import { RequiredStorageKey } from "../types";
2
2
  import { type StorageEvent } from "../hooks/useStorageEvents";
3
- export declare const FREE_TIER_EVENT_LIMIT = 25;
3
+ /**
4
+ * @deprecated Read the live limit with `useLimit("storage.events")` — this only
5
+ * reports the FREE tier's value and is blind to the anonymous tier. Kept
6
+ * because it is part of the package's public exports.
7
+ */
8
+ export declare const FREE_TIER_EVENT_LIMIT: number;
4
9
  interface StorageModalWithTabsProps {
5
10
  visible: boolean;
6
11
  onClose: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"StorageModalWithTabs.d.ts","sourceRoot":"","sources":["../../../../src/storage/components/StorageModalWithTabs.tsx"],"names":[],"mappings":"AA6BA,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAY9C,OAAO,EAAoB,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAehF,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC,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,sCAo/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":"AA+BA,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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@buoy-gg/storage",
3
- "version": "7.0.21",
3
+ "version": "7.0.23",
4
4
  "description": "Browse & edit AsyncStorage, MMKV & SecureStore inside your React Native app, with change history. Part of Buoy devtools.",
5
5
  "main": "lib/commonjs/index.js",
6
6
  "module": "lib/module/index.js",
@@ -29,11 +29,11 @@
29
29
  "**/snapshotProvider.ts"
30
30
  ],
31
31
  "dependencies": {
32
- "@buoy-gg/floating-tools-core": "^7.0.21",
33
- "@buoy-gg/shared-ui": "^7.0.21"
32
+ "@buoy-gg/floating-tools-core": "^7.0.23",
33
+ "@buoy-gg/shared-ui": "^7.0.23"
34
34
  },
35
35
  "peerDependencies": {
36
- "@buoy-gg/license": "7.0.21",
36
+ "@buoy-gg/license": "7.0.23",
37
37
  "@react-native-async-storage/async-storage": "^2.0.0 || ^3.1.0",
38
38
  "react": "*",
39
39
  "react-native": "*"
@@ -43,7 +43,7 @@
43
43
  "@types/react": "^19.1.0",
44
44
  "@types/react-native": "^0.73.0",
45
45
  "typescript": "~5.8.3",
46
- "@buoy-gg/license": "^7.0.21"
46
+ "@buoy-gg/license": "^7.0.23"
47
47
  },
48
48
  "react-native-builder-bob": {
49
49
  "source": "src",
@@ -77,7 +77,7 @@
77
77
  "bugs": {
78
78
  "url": "https://github.com/LovesWorking/react-native-buoy/issues"
79
79
  },
80
- "homepage": "https://buoy.gg/tools/storage",
80
+ "homepage": "https://buoy.gg/buoy/latest/docs/tools/storage",
81
81
  "publishConfig": {
82
82
  "access": "public",
83
83
  "tag": "latest"