@buoy-gg/shared-ui 3.0.1 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/JsModal.js +2 -1
- package/lib/commonjs/clipboard/clipboard-impl.js +28 -2
- package/lib/commonjs/dataViewer/VirtualizedDataExplorer.js +3 -5
- package/lib/commonjs/hooks/safe-area-impl.js +1 -1
- package/lib/commonjs/icons/lucide-icons.js +130 -22
- package/lib/commonjs/index.js +14 -0
- package/lib/commonjs/license/DeviceLimitModal.js +2 -1
- package/lib/commonjs/license/FeatureGate.js +60 -11
- package/lib/commonjs/license/LicenseEntryModal.js +14 -3
- package/lib/commonjs/license/ManageDevicesModal.js +2 -1
- package/lib/commonjs/license/openPricing.js +36 -0
- package/lib/commonjs/storage/devToolsStorageKeys.js +1 -0
- package/lib/commonjs/stores/BaseEventStore.js +72 -2
- package/lib/commonjs/stores/ignoredPatternsStore.js +229 -0
- package/lib/commonjs/stores/index.js +26 -1
- package/lib/commonjs/ui/components/CompactRow.js +73 -66
- package/lib/commonjs/ui/components/EventHistoryViewer/EventPickerModal.js +3 -2
- package/lib/commonjs/ui/components/ExpandableSectionWithModal.js +2 -1
- package/lib/commonjs/ui/components/ExpandedInfoRow.js +13 -3
- package/lib/commonjs/ui/components/WindowControls.js +9 -3
- package/lib/commonjs/ui/console/CyberpunkConsoleSection.js +6 -5
- package/lib/commonjs/ui/console/GalaxyButton.js +2 -1
- package/lib/commonjs/ui/gameUI/components/GameUIStatusHeader.js +2 -1
- package/lib/commonjs/utils/absoluteFill.js +28 -0
- package/lib/commonjs/utils/index.js +13 -0
- package/lib/commonjs/utils/safeExpoRouter.js +59 -4
- package/lib/module/JsModal.js +2 -1
- package/lib/module/clipboard/clipboard-impl.js +28 -2
- package/lib/module/dataViewer/VirtualizedDataExplorer.js +3 -5
- package/lib/module/hooks/safe-area-impl.js +1 -1
- package/lib/module/icons/lucide-icons.js +125 -19
- package/lib/module/index.js +3 -1
- package/lib/module/license/DeviceLimitModal.js +2 -1
- package/lib/module/license/FeatureGate.js +61 -12
- package/lib/module/license/LicenseEntryModal.js +15 -4
- package/lib/module/license/ManageDevicesModal.js +2 -1
- package/lib/module/license/openPricing.js +31 -0
- package/lib/module/storage/devToolsStorageKeys.js +1 -0
- package/lib/module/stores/BaseEventStore.js +72 -2
- package/lib/module/stores/ignoredPatternsStore.js +223 -0
- package/lib/module/stores/index.js +2 -1
- package/lib/module/ui/components/CompactRow.js +73 -66
- package/lib/module/ui/components/EventHistoryViewer/EventPickerModal.js +3 -2
- package/lib/module/ui/components/ExpandableSectionWithModal.js +2 -1
- package/lib/module/ui/components/ExpandedInfoRow.js +13 -3
- package/lib/module/ui/components/WindowControls.js +10 -4
- package/lib/module/ui/console/CyberpunkConsoleSection.js +6 -5
- package/lib/module/ui/console/GalaxyButton.js +2 -1
- package/lib/module/ui/gameUI/components/GameUIStatusHeader.js +2 -1
- package/lib/module/utils/absoluteFill.js +24 -0
- package/lib/module/utils/index.js +2 -1
- package/lib/module/utils/safeExpoRouter.js +58 -4
- package/lib/typescript/commonjs/JsModal.d.ts.map +1 -1
- package/lib/typescript/commonjs/clipboard/clipboard-impl.d.ts +3 -2
- package/lib/typescript/commonjs/clipboard/clipboard-impl.d.ts.map +1 -1
- package/lib/typescript/commonjs/dataViewer/VirtualizedDataExplorer.d.ts.map +1 -1
- package/lib/typescript/commonjs/hooks/safe-area-impl.d.ts +1 -1
- package/lib/typescript/commonjs/icons/lucide-icons.d.ts +5 -2
- package/lib/typescript/commonjs/icons/lucide-icons.d.ts.map +1 -1
- package/lib/typescript/commonjs/index.d.ts +1 -1
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/license/DeviceLimitModal.d.ts.map +1 -1
- package/lib/typescript/commonjs/license/FeatureGate.d.ts +14 -1
- package/lib/typescript/commonjs/license/FeatureGate.d.ts.map +1 -1
- package/lib/typescript/commonjs/license/LicenseEntryModal.d.ts.map +1 -1
- package/lib/typescript/commonjs/license/ManageDevicesModal.d.ts.map +1 -1
- package/lib/typescript/commonjs/license/openPricing.d.ts +14 -0
- package/lib/typescript/commonjs/license/openPricing.d.ts.map +1 -0
- package/lib/typescript/commonjs/storage/devToolsStorageKeys.d.ts +1 -0
- package/lib/typescript/commonjs/storage/devToolsStorageKeys.d.ts.map +1 -1
- package/lib/typescript/commonjs/stores/BaseEventStore.d.ts +28 -0
- package/lib/typescript/commonjs/stores/BaseEventStore.d.ts.map +1 -1
- package/lib/typescript/commonjs/stores/ignoredPatternsStore.d.ts +84 -0
- package/lib/typescript/commonjs/stores/ignoredPatternsStore.d.ts.map +1 -0
- package/lib/typescript/commonjs/stores/index.d.ts +1 -0
- package/lib/typescript/commonjs/stores/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/CompactRow.d.ts +3 -1
- package/lib/typescript/commonjs/ui/components/CompactRow.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/EventHistoryViewer/EventPickerModal.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/ExpandableSectionWithModal.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/ExpandedInfoRow.d.ts +3 -1
- package/lib/typescript/commonjs/ui/components/ExpandedInfoRow.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/components/WindowControls.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/console/CyberpunkConsoleSection.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/console/GalaxyButton.d.ts.map +1 -1
- package/lib/typescript/commonjs/ui/gameUI/components/GameUIStatusHeader.d.ts.map +1 -1
- package/lib/typescript/commonjs/utils/absoluteFill.d.ts +18 -0
- package/lib/typescript/commonjs/utils/absoluteFill.d.ts.map +1 -0
- package/lib/typescript/commonjs/utils/index.d.ts +2 -1
- package/lib/typescript/commonjs/utils/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/utils/safeExpoRouter.d.ts +9 -0
- package/lib/typescript/commonjs/utils/safeExpoRouter.d.ts.map +1 -1
- package/lib/typescript/module/JsModal.d.ts.map +1 -1
- package/lib/typescript/module/clipboard/clipboard-impl.d.ts +3 -2
- package/lib/typescript/module/clipboard/clipboard-impl.d.ts.map +1 -1
- package/lib/typescript/module/dataViewer/VirtualizedDataExplorer.d.ts.map +1 -1
- package/lib/typescript/module/hooks/safe-area-impl.d.ts +1 -1
- package/lib/typescript/module/icons/lucide-icons.d.ts +5 -2
- package/lib/typescript/module/icons/lucide-icons.d.ts.map +1 -1
- package/lib/typescript/module/index.d.ts +1 -1
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/lib/typescript/module/license/DeviceLimitModal.d.ts.map +1 -1
- package/lib/typescript/module/license/FeatureGate.d.ts +14 -1
- package/lib/typescript/module/license/FeatureGate.d.ts.map +1 -1
- package/lib/typescript/module/license/LicenseEntryModal.d.ts.map +1 -1
- package/lib/typescript/module/license/ManageDevicesModal.d.ts.map +1 -1
- package/lib/typescript/module/license/openPricing.d.ts +14 -0
- package/lib/typescript/module/license/openPricing.d.ts.map +1 -0
- package/lib/typescript/module/storage/devToolsStorageKeys.d.ts +1 -0
- package/lib/typescript/module/storage/devToolsStorageKeys.d.ts.map +1 -1
- package/lib/typescript/module/stores/BaseEventStore.d.ts +28 -0
- package/lib/typescript/module/stores/BaseEventStore.d.ts.map +1 -1
- package/lib/typescript/module/stores/ignoredPatternsStore.d.ts +84 -0
- package/lib/typescript/module/stores/ignoredPatternsStore.d.ts.map +1 -0
- package/lib/typescript/module/stores/index.d.ts +1 -0
- package/lib/typescript/module/stores/index.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/CompactRow.d.ts +3 -1
- package/lib/typescript/module/ui/components/CompactRow.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/EventHistoryViewer/EventPickerModal.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/ExpandableSectionWithModal.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/ExpandedInfoRow.d.ts +3 -1
- package/lib/typescript/module/ui/components/ExpandedInfoRow.d.ts.map +1 -1
- package/lib/typescript/module/ui/components/WindowControls.d.ts.map +1 -1
- package/lib/typescript/module/ui/console/CyberpunkConsoleSection.d.ts.map +1 -1
- package/lib/typescript/module/ui/console/GalaxyButton.d.ts.map +1 -1
- package/lib/typescript/module/ui/gameUI/components/GameUIStatusHeader.d.ts.map +1 -1
- package/lib/typescript/module/utils/absoluteFill.d.ts +18 -0
- package/lib/typescript/module/utils/absoluteFill.d.ts.map +1 -0
- package/lib/typescript/module/utils/index.d.ts +2 -1
- package/lib/typescript/module/utils/index.d.ts.map +1 -1
- package/lib/typescript/module/utils/safeExpoRouter.d.ts +9 -0
- package/lib/typescript/module/utils/safeExpoRouter.d.ts.map +1 -1
- package/package.json +4 -4
package/lib/commonjs/JsModal.js
CHANGED
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.JsModal = void 0;
|
|
7
7
|
var _react = require("react");
|
|
8
8
|
var _reactNative = require("react-native");
|
|
9
|
+
var _absoluteFill = require("./utils/absoluteFill.js");
|
|
9
10
|
var _useSafeAreaInsets = require("./hooks/useSafeAreaInsets.js");
|
|
10
11
|
var _index = require("./ui/gameUI/index.js");
|
|
11
12
|
var _index2 = require("./ui/components/index.js");
|
|
@@ -1241,7 +1242,7 @@ const JsModalComponent = ({
|
|
|
1241
1242
|
// ============================================================================
|
|
1242
1243
|
const styles = _reactNative.StyleSheet.create({
|
|
1243
1244
|
fullScreenContainer: {
|
|
1244
|
-
...
|
|
1245
|
+
..._absoluteFill.absoluteFill,
|
|
1245
1246
|
zIndex: 1000
|
|
1246
1247
|
},
|
|
1247
1248
|
bottomSheetWrapper: {
|
|
@@ -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.
|
|
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
|
-
|
|
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;
|
|
@@ -726,7 +726,6 @@ const useDataFlattening = (data, maxDepth = 10, autoExpandFirstLevel = false) =>
|
|
|
726
726
|
const VirtualizedItemComponent = ({
|
|
727
727
|
item,
|
|
728
728
|
onToggleExpanded,
|
|
729
|
-
data,
|
|
730
729
|
index,
|
|
731
730
|
onSelect,
|
|
732
731
|
isSelected
|
|
@@ -790,9 +789,9 @@ const VirtualizedItemComponent = ({
|
|
|
790
789
|
children: formatValue(item.value, item.valueType)
|
|
791
790
|
})]
|
|
792
791
|
})]
|
|
793
|
-
}), item.
|
|
794
|
-
value:
|
|
795
|
-
size:
|
|
792
|
+
}), item.value !== undefined ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_CopyButton.CopyButton, {
|
|
793
|
+
value: item.value,
|
|
794
|
+
size: 14,
|
|
796
795
|
buttonStyle: {
|
|
797
796
|
marginLeft: 8,
|
|
798
797
|
marginRight: 8
|
|
@@ -877,7 +876,6 @@ const VirtualizedDataExplorer = ({
|
|
|
877
876
|
item: item,
|
|
878
877
|
index: index,
|
|
879
878
|
onToggleExpanded: toggleExpanded,
|
|
880
|
-
data: data,
|
|
881
879
|
onSelect: setSelectedIndex,
|
|
882
880
|
isSelected: selectedIndex === index
|
|
883
881
|
});
|
|
@@ -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-
|
|
10
|
+
* Generated at: 2026-06-30T15:42:30.947Z
|
|
11
11
|
*
|
|
12
12
|
* DO NOT EDIT - This file is generated by scripts/detect-safe-area.js
|
|
13
13
|
*
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
7
|
-
exports.ZapIcon = exports.Zap = exports.XIcon = exports.XCircleIcon = exports.XCircle = exports.X = exports.WifiIcon = exports.Wifi = exports.VolumeIcon = exports.Volume = exports.UsersIcon = exports.Users = exports.UserIcon = exports.User = exports.UploadIcon = exports.Upload = exports.UnlockIcon = exports.Unlock = exports.TriangleAlertIcon = exports.TriangleAlert = exports.TrashIcon = exports.Trash2Icon = exports.Trash2 = exports.Trash = exports.TouchpadIcon = exports.Touchpad = exports.TimerIcon = exports.Timer = exports.TestTube2Icon = exports.TestTube2 = exports.SquareIcon = exports.SquareDashedIcon = exports.SquareDashed = exports.Square = exports.SmartphoneIcon = exports.Smartphone = exports.ShieldIcon = exports.Shield = exports.SettingsIcon = exports.Settings = exports.ServerIcon = exports.Server = exports.SearchIcon = exports.Search = exports.RouteIcon = exports.Route = exports.RefreshCwIcon = exports.RefreshCw = exports.PowerIcon = exports.Power = void 0;
|
|
6
|
+
exports.Play = exports.Pin = exports.PhoneIcon = exports.Phone = exports.PauseIcon = exports.Pause = exports.PaletteIcon = exports.Palette = exports.NavigationIcon = exports.Navigation = exports.MusicIcon = exports.Music = exports.MinusIcon = exports.Minus = exports.Maximize2Icon = exports.Maximize2 = exports.LockIcon = exports.Lock = exports.LinkIcon = exports.Link = exports.LayersIcon = exports.Layers = exports.KeyIcon = exports.Key = exports.InfoIcon = exports.Info = exports.ImageIcon = exports.Image = exports.HomeIcon = exports.Home = exports.HelpCircle = exports.HashIcon = exports.Hash = exports.HardDriveIcon = exports.HardDrive = exports.HandIcon = exports.Hand = exports.GlobeIcon = exports.Globe = exports.GitBranchIcon = exports.GitBranch = exports.FloatWindow = exports.FlaskConicalIcon = exports.FlaskConical = exports.FilterIcon = exports.Filter = exports.FilmIcon = exports.Film = exports.FileTextIcon = exports.FileText = exports.FileJsonIcon = exports.FileJson = exports.FileCodeIcon = exports.FileCode = exports.EyeOffIcon = exports.EyeOff = exports.EyeIcon = exports.Eye = exports.Edit3Icon = exports.Edit3 = exports.DownloadIcon = exports.Download = exports.DockBottom = exports.DatabaseIcon = exports.Database = exports.CopyIcon = exports.Copy = exports.CloudIcon = exports.Cloud = exports.ClockIcon = exports.Clock = exports.ChevronUpIcon = exports.ChevronUp = exports.ChevronRightIcon = exports.ChevronRight = exports.ChevronLeftIcon = exports.ChevronLeft = exports.ChevronDownIcon = exports.ChevronDown = exports.CheckSquareIcon = exports.CheckSquare = exports.CheckIcon = exports.CheckCircleIcon = exports.CheckCircle2Icon = exports.CheckCircle2 = exports.CheckCircle = exports.Check = exports.BugIcon = exports.Bug = exports.BoxIcon = exports.Box = exports.BarChart3Icon = exports.BarChart3 = exports.AlertTriangleIcon = exports.AlertTriangle = exports.AlertOctagon = exports.AlertCircleIcon = exports.AlertCircle = exports.ActivityIcon = exports.Activity = void 0;
|
|
7
|
+
exports.ZapIcon = exports.Zap = exports.XIcon = exports.XCircleIcon = exports.XCircle = exports.X = exports.WifiIcon = exports.Wifi = exports.VolumeIcon = exports.Volume = exports.UsersIcon = exports.Users = exports.UserIcon = exports.User = exports.UploadIcon = exports.Upload = exports.UnlockIcon = exports.Unlock = exports.TriangleAlertIcon = exports.TriangleAlert = exports.TrashIcon = exports.Trash2Icon = exports.Trash2 = exports.Trash = exports.TouchpadIcon = exports.Touchpad = exports.TimerIcon = exports.Timer = exports.TestTube2Icon = exports.TestTube2 = exports.SquareIcon = exports.SquareDashedIcon = exports.SquareDashed = exports.Square = exports.SmartphoneIcon = exports.Smartphone = exports.ShieldIcon = exports.Shield = exports.SettingsIcon = exports.Settings = exports.ServerIcon = exports.Server = exports.SearchIcon = exports.Search = exports.RouteIcon = exports.Route = exports.RefreshCwIcon = exports.RefreshCw = exports.PowerIcon = exports.Power = exports.PlusIcon = exports.Plus = exports.PlayIcon = void 0;
|
|
8
8
|
var _reactNative = require("react-native");
|
|
9
9
|
var OriginalIcons = _interopRequireWildcard(require("./lucide-icons-original-full.js"));
|
|
10
10
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
@@ -524,6 +524,32 @@ const Eye = ({
|
|
|
524
524
|
})]
|
|
525
525
|
});
|
|
526
526
|
exports.Eye = Eye;
|
|
527
|
+
const Pin = ({
|
|
528
|
+
size = 24,
|
|
529
|
+
color = "currentColor",
|
|
530
|
+
strokeWidth = 2,
|
|
531
|
+
...props
|
|
532
|
+
}) => /*#__PURE__*/(0, _jsxRuntime.jsxs)(Svg, {
|
|
533
|
+
width: size,
|
|
534
|
+
height: size,
|
|
535
|
+
viewBox: "0 0 24 24",
|
|
536
|
+
...props,
|
|
537
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(Circle, {
|
|
538
|
+
cx: 12,
|
|
539
|
+
cy: 9,
|
|
540
|
+
r: 5,
|
|
541
|
+
stroke: color,
|
|
542
|
+
strokeWidth: strokeWidth
|
|
543
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(Line, {
|
|
544
|
+
x1: 12,
|
|
545
|
+
y1: 14,
|
|
546
|
+
x2: 12,
|
|
547
|
+
y2: 21,
|
|
548
|
+
stroke: color,
|
|
549
|
+
strokeWidth: strokeWidth
|
|
550
|
+
})]
|
|
551
|
+
});
|
|
552
|
+
exports.Pin = Pin;
|
|
527
553
|
const EyeOff = ({
|
|
528
554
|
size = 24,
|
|
529
555
|
color = "currentColor",
|
|
@@ -1398,8 +1424,67 @@ const Plus = ({
|
|
|
1398
1424
|
strokeWidth: strokeWidth
|
|
1399
1425
|
})]
|
|
1400
1426
|
});
|
|
1427
|
+
|
|
1428
|
+
// Refresh / reload icon: a smooth 270° ring (open on the right) with a
|
|
1429
|
+
// clockwise triangle arrowhead. Built from the buoy icon-editor design
|
|
1430
|
+
// (smootharc ring + triangle) using the View-based border trick so it stays
|
|
1431
|
+
// crisp at any size. `strokeWidth` is accepted for API compatibility but the
|
|
1432
|
+
// proportions are fixed to keep the perfected look.
|
|
1401
1433
|
exports.Plus = Plus;
|
|
1402
1434
|
const RefreshCw = ({
|
|
1435
|
+
size = 24,
|
|
1436
|
+
color = "currentColor",
|
|
1437
|
+
strokeWidth: _strokeWidth = 2,
|
|
1438
|
+
...props
|
|
1439
|
+
}) => {
|
|
1440
|
+
const RING_RADIUS = 7; // outer radius, centered in the 24x24 viewBox
|
|
1441
|
+
const RING_STROKE = 2.4;
|
|
1442
|
+
const ARROW_SIZE = 5.2;
|
|
1443
|
+
const ARROW_HALF = ARROW_SIZE * 0.577; // equilateral-ish half-width
|
|
1444
|
+
// Arrowhead anchor (from the editor design, mapped into the 0..24 viewBox)
|
|
1445
|
+
const arrowLeft = 12 + 3.162277660168379;
|
|
1446
|
+
const arrowTop = 12 - 2.846049894151541 - ARROW_HALF;
|
|
1447
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(Svg, {
|
|
1448
|
+
width: size,
|
|
1449
|
+
height: size,
|
|
1450
|
+
viewBox: "0 0 24 24",
|
|
1451
|
+
...props,
|
|
1452
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
1453
|
+
style: {
|
|
1454
|
+
position: "absolute",
|
|
1455
|
+
left: 12 - RING_RADIUS,
|
|
1456
|
+
top: 12 - RING_RADIUS,
|
|
1457
|
+
width: RING_RADIUS * 2,
|
|
1458
|
+
height: RING_RADIUS * 2,
|
|
1459
|
+
borderRadius: RING_RADIUS,
|
|
1460
|
+
borderWidth: RING_STROKE,
|
|
1461
|
+
borderTopColor: color,
|
|
1462
|
+
borderLeftColor: color,
|
|
1463
|
+
borderBottomColor: color,
|
|
1464
|
+
borderRightColor: "transparent"
|
|
1465
|
+
}
|
|
1466
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
1467
|
+
style: {
|
|
1468
|
+
position: "absolute",
|
|
1469
|
+
left: arrowLeft,
|
|
1470
|
+
top: arrowTop,
|
|
1471
|
+
width: 0,
|
|
1472
|
+
height: 0,
|
|
1473
|
+
borderTopWidth: ARROW_HALF,
|
|
1474
|
+
borderBottomWidth: ARROW_HALF,
|
|
1475
|
+
borderLeftWidth: ARROW_SIZE,
|
|
1476
|
+
borderTopColor: "transparent",
|
|
1477
|
+
borderBottomColor: "transparent",
|
|
1478
|
+
borderLeftColor: color,
|
|
1479
|
+
transform: [{
|
|
1480
|
+
rotate: "45deg"
|
|
1481
|
+
}]
|
|
1482
|
+
}
|
|
1483
|
+
})]
|
|
1484
|
+
});
|
|
1485
|
+
};
|
|
1486
|
+
exports.RefreshCw = RefreshCw;
|
|
1487
|
+
const Home = ({
|
|
1403
1488
|
size = 24,
|
|
1404
1489
|
color = "currentColor",
|
|
1405
1490
|
strokeWidth = 2,
|
|
@@ -1410,42 +1495,65 @@ const RefreshCw = ({
|
|
|
1410
1495
|
viewBox: "0 0 24 24",
|
|
1411
1496
|
...props,
|
|
1412
1497
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(Line, {
|
|
1413
|
-
x1:
|
|
1414
|
-
y1:
|
|
1415
|
-
x2:
|
|
1416
|
-
y2:
|
|
1498
|
+
x1: 3,
|
|
1499
|
+
y1: 10,
|
|
1500
|
+
x2: 12,
|
|
1501
|
+
y2: 3,
|
|
1417
1502
|
stroke: color,
|
|
1418
1503
|
strokeWidth: strokeWidth
|
|
1419
1504
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(Line, {
|
|
1420
|
-
x1:
|
|
1421
|
-
y1:
|
|
1422
|
-
x2:
|
|
1505
|
+
x1: 12,
|
|
1506
|
+
y1: 3,
|
|
1507
|
+
x2: 21,
|
|
1423
1508
|
y2: 10,
|
|
1424
1509
|
stroke: color,
|
|
1425
1510
|
strokeWidth: strokeWidth
|
|
1426
1511
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(Line, {
|
|
1427
|
-
x1:
|
|
1428
|
-
y1:
|
|
1429
|
-
x2:
|
|
1430
|
-
y2:
|
|
1512
|
+
x1: 5,
|
|
1513
|
+
y1: 9,
|
|
1514
|
+
x2: 5,
|
|
1515
|
+
y2: 21,
|
|
1431
1516
|
stroke: color,
|
|
1432
1517
|
strokeWidth: strokeWidth
|
|
1433
1518
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(Line, {
|
|
1434
|
-
x1:
|
|
1435
|
-
y1:
|
|
1436
|
-
x2:
|
|
1437
|
-
y2:
|
|
1519
|
+
x1: 19,
|
|
1520
|
+
y1: 9,
|
|
1521
|
+
x2: 19,
|
|
1522
|
+
y2: 21,
|
|
1438
1523
|
stroke: color,
|
|
1439
1524
|
strokeWidth: strokeWidth
|
|
1440
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1525
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(Line, {
|
|
1526
|
+
x1: 5,
|
|
1527
|
+
y1: 21,
|
|
1528
|
+
x2: 19,
|
|
1529
|
+
y2: 21,
|
|
1530
|
+
stroke: color,
|
|
1531
|
+
strokeWidth: strokeWidth
|
|
1532
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(Line, {
|
|
1533
|
+
x1: 10,
|
|
1534
|
+
y1: 21,
|
|
1535
|
+
x2: 10,
|
|
1536
|
+
y2: 15,
|
|
1537
|
+
stroke: color,
|
|
1538
|
+
strokeWidth: strokeWidth
|
|
1539
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(Line, {
|
|
1540
|
+
x1: 10,
|
|
1541
|
+
y1: 15,
|
|
1542
|
+
x2: 14,
|
|
1543
|
+
y2: 15,
|
|
1544
|
+
stroke: color,
|
|
1545
|
+
strokeWidth: strokeWidth
|
|
1546
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(Line, {
|
|
1547
|
+
x1: 14,
|
|
1548
|
+
y1: 15,
|
|
1549
|
+
x2: 14,
|
|
1550
|
+
y2: 21,
|
|
1444
1551
|
stroke: color,
|
|
1445
1552
|
strokeWidth: strokeWidth
|
|
1446
1553
|
})]
|
|
1447
1554
|
});
|
|
1448
|
-
exports.
|
|
1555
|
+
exports.Home = Home;
|
|
1556
|
+
const HomeIcon = exports.HomeIcon = Home;
|
|
1449
1557
|
const Search = ({
|
|
1450
1558
|
size = 24,
|
|
1451
1559
|
color = "currentColor",
|
package/lib/commonjs/index.js
CHANGED
|
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
var _exportNames = {
|
|
7
|
+
absoluteFill: true,
|
|
7
8
|
displayValue: true,
|
|
8
9
|
parseDisplayValue: true,
|
|
9
10
|
getSafeAreaInsets: true,
|
|
@@ -35,6 +36,7 @@ var _exportNames = {
|
|
|
35
36
|
useSafeSegments: true,
|
|
36
37
|
useSafeGlobalSearchParams: true,
|
|
37
38
|
getSafeRouter: true,
|
|
39
|
+
getSafeCurrentPathname: true,
|
|
38
40
|
isExpoRouterAvailable: true,
|
|
39
41
|
isPlainObjectUtil: true,
|
|
40
42
|
useSafeAreaInsets: true,
|
|
@@ -143,6 +145,12 @@ Object.defineProperty(exports, "UpgradePrompt", {
|
|
|
143
145
|
return _index12.UpgradePrompt;
|
|
144
146
|
}
|
|
145
147
|
});
|
|
148
|
+
Object.defineProperty(exports, "absoluteFill", {
|
|
149
|
+
enumerable: true,
|
|
150
|
+
get: function () {
|
|
151
|
+
return _index3.absoluteFill;
|
|
152
|
+
}
|
|
153
|
+
});
|
|
146
154
|
Object.defineProperty(exports, "buoyColors", {
|
|
147
155
|
enumerable: true,
|
|
148
156
|
get: function () {
|
|
@@ -209,6 +217,12 @@ Object.defineProperty(exports, "getSafeAreaInsets", {
|
|
|
209
217
|
return _index3.getSafeAreaInsets;
|
|
210
218
|
}
|
|
211
219
|
});
|
|
220
|
+
Object.defineProperty(exports, "getSafeCurrentPathname", {
|
|
221
|
+
enumerable: true,
|
|
222
|
+
get: function () {
|
|
223
|
+
return _index3.getSafeCurrentPathname;
|
|
224
|
+
}
|
|
225
|
+
});
|
|
212
226
|
Object.defineProperty(exports, "getSafeRouter", {
|
|
213
227
|
enumerable: true,
|
|
214
228
|
get: function () {
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.DeviceLimitModal = void 0;
|
|
7
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
8
8
|
var _reactNative = require("react-native");
|
|
9
|
+
var _absoluteFill = require("../utils/absoluteFill.js");
|
|
9
10
|
var _macOSDesignSystemColors = require("../ui/gameUI/constants/macOSDesignSystemColors.js");
|
|
10
11
|
var _lucideIcons = require("../icons/lucide-icons.js");
|
|
11
12
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
@@ -272,7 +273,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
272
273
|
alignItems: "center"
|
|
273
274
|
},
|
|
274
275
|
backdrop: {
|
|
275
|
-
...
|
|
276
|
+
..._absoluteFill.absoluteFill,
|
|
276
277
|
backgroundColor: "rgba(0, 0, 0, 0.8)"
|
|
277
278
|
},
|
|
278
279
|
modal: {
|
|
@@ -3,13 +3,14 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.UpgradePrompt = exports.UpgradeModal = exports.ProUpgradeModal = exports.ProFeatureBanner = exports.ProBadge = exports.FeatureGate = void 0;
|
|
6
|
+
exports.WEEKEND_PASS_LABEL = exports.UpgradePrompt = exports.UpgradeModal = exports.ProUpgradeModal = exports.ProFeatureBanner = exports.ProBadge = exports.FeatureGate = void 0;
|
|
7
7
|
exports.useFeatureGate = useFeatureGate;
|
|
8
8
|
var _react = _interopRequireWildcard(require("react"));
|
|
9
9
|
var _reactNative = require("react-native");
|
|
10
10
|
var _gameUIColors = require("../ui/gameUI/constants/gameUIColors.js");
|
|
11
11
|
var _lucideIcons = require("../icons/lucide-icons.js");
|
|
12
12
|
var _LicenseEntryModal = require("./LicenseEntryModal.js");
|
|
13
|
+
var _openPricing = require("./openPricing.js");
|
|
13
14
|
var _license = require("@buoy-gg/license");
|
|
14
15
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
15
16
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
@@ -19,18 +20,33 @@ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r
|
|
|
19
20
|
* Wraps premium features and shows an upgrade prompt for free users.
|
|
20
21
|
*/
|
|
21
22
|
|
|
23
|
+
// Weekend Pass branding — a distinct violet so it never reads as the gold PRO.
|
|
24
|
+
const WEEKEND_PASS_LABEL = exports.WEEKEND_PASS_LABEL = "WEEKEND PASS";
|
|
25
|
+
const WEEKEND_VIOLET = "#BF5AF2";
|
|
26
|
+
|
|
22
27
|
/**
|
|
23
|
-
* Simple Pro badge for marking premium features
|
|
28
|
+
* Simple Pro badge for marking premium features.
|
|
29
|
+
*
|
|
30
|
+
* Reason-aware: when the free Weekend Pass is the active unlock (a free user on
|
|
31
|
+
* a weekend), it shows a violet "WEEKEND PASS" badge instead of the gold "PRO"
|
|
32
|
+
* so people know Pro is free this weekend. A real license — or a free user on a
|
|
33
|
+
* weekday seeing the badge as a Pro-feature marker — shows "PRO".
|
|
24
34
|
*/
|
|
25
35
|
const ProBadge = ({
|
|
26
36
|
style
|
|
27
|
-
}) =>
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
37
|
+
}) => {
|
|
38
|
+
const {
|
|
39
|
+
reason
|
|
40
|
+
} = (0, _license.useProAccess)();
|
|
41
|
+
const weekend = reason === "weekend";
|
|
42
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
43
|
+
style: [styles.proBadge, weekend && styles.weekendBadge, style],
|
|
44
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
45
|
+
style: [styles.proBadgeText, weekend && styles.weekendBadgeText],
|
|
46
|
+
children: weekend ? WEEKEND_PASS_LABEL : "PRO"
|
|
47
|
+
})
|
|
48
|
+
});
|
|
49
|
+
};
|
|
34
50
|
|
|
35
51
|
/**
|
|
36
52
|
* Simple Pro upgrade modal - minimal modal with just upgrade button
|
|
@@ -63,6 +79,10 @@ const UpgradePrompt = ({
|
|
|
63
79
|
const handlePress = (0, _react.useCallback)(() => {
|
|
64
80
|
if (onUpgradePress) {
|
|
65
81
|
onUpgradePress();
|
|
82
|
+
} else if (_openPricing.isWeb) {
|
|
83
|
+
// Desktop dashboard: buy on the website, not via the mobile Buoy.init()
|
|
84
|
+
// code path. (Already have a key? Enter it from the toolbar Upgrade button.)
|
|
85
|
+
(0, _openPricing.openPricing)();
|
|
66
86
|
} else {
|
|
67
87
|
setShowLicenseModal(true);
|
|
68
88
|
}
|
|
@@ -190,13 +210,21 @@ const FeatureGate = ({
|
|
|
190
210
|
*/
|
|
191
211
|
exports.FeatureGate = FeatureGate;
|
|
192
212
|
function useFeatureGate() {
|
|
193
|
-
const
|
|
213
|
+
const {
|
|
214
|
+
isPro,
|
|
215
|
+
isLicensed,
|
|
216
|
+
isWeekendFree,
|
|
217
|
+
reason
|
|
218
|
+
} = (0, _license.useProAccess)();
|
|
194
219
|
const showUpgrade = () => {
|
|
195
|
-
|
|
220
|
+
(0, _openPricing.openPricing)("https://buoy.gg/pro");
|
|
196
221
|
};
|
|
197
222
|
return {
|
|
198
223
|
hasAccess: isPro,
|
|
199
224
|
isPro,
|
|
225
|
+
isLicensed,
|
|
226
|
+
isWeekendFree,
|
|
227
|
+
reason,
|
|
200
228
|
showUpgrade
|
|
201
229
|
};
|
|
202
230
|
}
|
|
@@ -214,6 +242,12 @@ const ProFeatureBanner = ({
|
|
|
214
242
|
const [showLicenseModal, setShowLicenseModal] = (0, _react.useState)(false);
|
|
215
243
|
const license = (0, _license.useLicense)();
|
|
216
244
|
const handleUpgrade = (0, _react.useCallback)(() => {
|
|
245
|
+
// Desktop dashboard: open pricing in the browser instead of the mobile
|
|
246
|
+
// license-entry modal.
|
|
247
|
+
if (_openPricing.isWeb) {
|
|
248
|
+
(0, _openPricing.openPricing)();
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
217
251
|
setShowLicenseModal(true);
|
|
218
252
|
}, []);
|
|
219
253
|
const handleCloseModal = (0, _react.useCallback)(() => {
|
|
@@ -289,6 +323,12 @@ const UpgradeModal = ({
|
|
|
289
323
|
const [showLicenseModal, setShowLicenseModal] = (0, _react.useState)(false);
|
|
290
324
|
const license = (0, _license.useLicense)();
|
|
291
325
|
const handleUpgrade = (0, _react.useCallback)(() => {
|
|
326
|
+
// Desktop dashboard: send users straight to the pricing page in their
|
|
327
|
+
// browser instead of the mobile Buoy.init() license-entry modal.
|
|
328
|
+
if (_openPricing.isWeb) {
|
|
329
|
+
(0, _openPricing.openPricing)();
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
292
332
|
setShowLicenseModal(true);
|
|
293
333
|
}, []);
|
|
294
334
|
const handleCloseLicenseModal = (0, _react.useCallback)(() => {
|
|
@@ -424,6 +464,15 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
424
464
|
color: _gameUIColors.buoyColors.primary,
|
|
425
465
|
letterSpacing: 0.5
|
|
426
466
|
},
|
|
467
|
+
// Weekend Pass variant — violet instead of the gold/primary PRO.
|
|
468
|
+
weekendBadge: {
|
|
469
|
+
backgroundColor: WEEKEND_VIOLET + "1A",
|
|
470
|
+
borderColor: WEEKEND_VIOLET + "55"
|
|
471
|
+
},
|
|
472
|
+
weekendBadgeText: {
|
|
473
|
+
color: WEEKEND_VIOLET,
|
|
474
|
+
letterSpacing: 0.4
|
|
475
|
+
},
|
|
427
476
|
container: {
|
|
428
477
|
padding: 20,
|
|
429
478
|
alignItems: "center",
|
|
@@ -6,7 +6,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.LicenseEntryModal = void 0;
|
|
7
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
8
8
|
var _reactNative = require("react-native");
|
|
9
|
+
var _absoluteFill = require("../utils/absoluteFill.js");
|
|
9
10
|
var _macOSDesignSystemColors = require("../ui/gameUI/constants/macOSDesignSystemColors.js");
|
|
11
|
+
var _openPricing = require("./openPricing.js");
|
|
10
12
|
var _lucideIcons = require("../icons/lucide-icons.js");
|
|
11
13
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
12
14
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
@@ -40,7 +42,7 @@ const LicenseEntryModal = ({
|
|
|
40
42
|
}) => {
|
|
41
43
|
const [copied, setCopied] = _react.default.useState(false);
|
|
42
44
|
const handleGetLicense = (0, _react.useCallback)(() => {
|
|
43
|
-
|
|
45
|
+
(0, _openPricing.openPricing)(purchaseUrl);
|
|
44
46
|
}, [purchaseUrl]);
|
|
45
47
|
const handleCopyCode = (0, _react.useCallback)(() => {
|
|
46
48
|
if (Clipboard?.setString) {
|
|
@@ -106,7 +108,16 @@ const LicenseEntryModal = ({
|
|
|
106
108
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
107
109
|
style: styles.dividerLine
|
|
108
110
|
})]
|
|
109
|
-
}), /*#__PURE__*/(0, _jsxRuntime.
|
|
111
|
+
}), _openPricing.isWeb ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
112
|
+
style: styles.instructionsContainer,
|
|
113
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
114
|
+
style: styles.instructionsNote,
|
|
115
|
+
children: "Click the Upgrade button in the top toolbar and paste your license key. It also unlocks automatically when a connected device is running Buoy Pro."
|
|
116
|
+
})
|
|
117
|
+
}) :
|
|
118
|
+
/*#__PURE__*/
|
|
119
|
+
/* Option 2: Instructions */
|
|
120
|
+
(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
110
121
|
style: styles.instructionsContainer,
|
|
111
122
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
112
123
|
style: styles.instructionsHeader,
|
|
@@ -199,7 +210,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
199
210
|
alignItems: "center"
|
|
200
211
|
},
|
|
201
212
|
backdrop: {
|
|
202
|
-
...
|
|
213
|
+
..._absoluteFill.absoluteFill,
|
|
203
214
|
backgroundColor: "rgba(0, 0, 0, 0.8)"
|
|
204
215
|
},
|
|
205
216
|
modal: {
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.ManageDevicesModal = void 0;
|
|
7
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
8
8
|
var _reactNative = require("react-native");
|
|
9
|
+
var _absoluteFill = require("../utils/absoluteFill.js");
|
|
9
10
|
var _gameUIColors = require("../ui/gameUI/constants/gameUIColors.js");
|
|
10
11
|
var _lucideIcons = require("../icons/lucide-icons.js");
|
|
11
12
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
@@ -343,7 +344,7 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
343
344
|
alignItems: "center"
|
|
344
345
|
},
|
|
345
346
|
backdrop: {
|
|
346
|
-
...
|
|
347
|
+
..._absoluteFill.absoluteFill,
|
|
347
348
|
backgroundColor: "rgba(0, 0, 0, 0.7)"
|
|
348
349
|
},
|
|
349
350
|
modal: {
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.isWeb = exports.PRICING_URL = void 0;
|
|
7
|
+
exports.openPricing = openPricing;
|
|
8
|
+
var _reactNative = require("react-native");
|
|
9
|
+
const PRICING_URL = exports.PRICING_URL = "https://buoy.gg/pricing";
|
|
10
|
+
|
|
11
|
+
/** True when running on the desktop dashboard / web (react-native-web). */
|
|
12
|
+
const isWeb = exports.isWeb = _reactNative.Platform.OS === "web";
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Open an upgrade/pricing URL.
|
|
16
|
+
*
|
|
17
|
+
* On the desktop dashboard (web) the upgrade flow is NOT the mobile
|
|
18
|
+
* `Buoy.init()` code path — the user buys on the website (or enters a key in
|
|
19
|
+
* the toolbar). Route the link through the Electron shell bridge so it lands in
|
|
20
|
+
* the user's DEFAULT browser instead of a bare in-app window; fall back to
|
|
21
|
+
* window.open for a plain browser tab. On native, use React Native Linking.
|
|
22
|
+
*/
|
|
23
|
+
function openPricing(url = PRICING_URL) {
|
|
24
|
+
// Access the browser globals via globalThis so this file doesn't depend on
|
|
25
|
+
// the DOM lib (the shared package targets React Native).
|
|
26
|
+
const win = globalThis.window;
|
|
27
|
+
if (isWeb && win) {
|
|
28
|
+
if (win.buoyShell?.openExternal) {
|
|
29
|
+
win.buoyShell.openExternal(url);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
win.open?.(url, "_blank", "noopener");
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
_reactNative.Linking.openURL(url);
|
|
36
|
+
}
|
|
@@ -98,6 +98,7 @@ const devToolsStorageKeys = exports.devToolsStorageKeys = {
|
|
|
98
98
|
filters: () => `${devToolsStorageKeys.storage.root()}_filters`,
|
|
99
99
|
eventFilters: () => `${devToolsStorageKeys.storage.root()}_event_filters`,
|
|
100
100
|
keyFilters: () => `${devToolsStorageKeys.storage.root()}_key_filters`,
|
|
101
|
+
pinnedKeys: () => `${devToolsStorageKeys.storage.root()}_pinned_keys`,
|
|
101
102
|
preferences: () => `${devToolsStorageKeys.storage.root()}_preferences`,
|
|
102
103
|
activeTab: () => `${devToolsStorageKeys.storage.root()}_active_tab`,
|
|
103
104
|
isMonitoring: () => `${devToolsStorageKeys.storage.root()}_is_monitoring`,
|