@buoy-gg/core 7.0.40 → 7.0.42
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/README.md +14 -85
- package/bin/buoy.js +20 -347
- package/lib/commonjs/Buoy.js +1 -107
- package/lib/commonjs/browserRegister.js +1 -0
- package/lib/commonjs/browserRegister.server.js +1 -0
- package/lib/commonjs/earlyHookScript.js +1 -0
- package/lib/commonjs/earlyNetwork.js +1 -0
- package/lib/commonjs/floatingMenu/AppHost.js +1 -460
- package/lib/commonjs/floatingMenu/AppHost.web.js +1 -364
- package/lib/commonjs/floatingMenu/AppHostLogic.js +1 -50
- package/lib/commonjs/floatingMenu/AppIcon.js +1 -91
- package/lib/commonjs/floatingMenu/AppIcon.web.js +1 -53
- package/lib/commonjs/floatingMenu/BrowserToolRuntime.js +1 -0
- package/lib/commonjs/floatingMenu/DefaultConfigContext.js +1 -45
- package/lib/commonjs/floatingMenu/DevToolsSettingsModal.js +1 -1119
- package/lib/commonjs/floatingMenu/DevToolsSettingsModal.shared.js +1 -0
- package/lib/commonjs/floatingMenu/DevToolsSettingsModal.web.js +1 -1048
- package/lib/commonjs/floatingMenu/DevToolsVisibilityContext.js +1 -49
- package/lib/commonjs/floatingMenu/FloatingDevTools.js +1 -554
- package/lib/commonjs/floatingMenu/FloatingDevTools.web.js +1 -401
- package/lib/commonjs/floatingMenu/FloatingMenu.js +1 -371
- package/lib/commonjs/floatingMenu/MinimizedToolsContext.js +1 -274
- package/lib/commonjs/floatingMenu/MinimizedToolsStack.js +1 -288
- package/lib/commonjs/floatingMenu/MinimizedToolsStack.web.js +1 -371
- package/lib/commonjs/floatingMenu/ToggleStateManager.js +1 -36
- package/lib/commonjs/floatingMenu/ToolHost.js +1 -281
- package/lib/commonjs/floatingMenu/ToolOpenerBridge.js +1 -41
- package/lib/commonjs/floatingMenu/autoDiscoverPresets.js +1 -461
- package/lib/commonjs/floatingMenu/autoExternalSync.js +1 -434
- package/lib/commonjs/floatingMenu/defaultConfig.js +1 -167
- package/lib/commonjs/floatingMenu/deviceIdentity.js +1 -173
- package/lib/commonjs/floatingMenu/dial/DialDevTools.js +1 -904
- package/lib/commonjs/floatingMenu/dial/DialDevTools.web.js +1 -821
- package/lib/commonjs/floatingMenu/dial/DialHyperspace.js +1 -177
- package/lib/commonjs/floatingMenu/dial/DialIcon.js +1 -302
- package/lib/commonjs/floatingMenu/dial/DialPagination.js +1 -165
- package/lib/commonjs/floatingMenu/dial/DialSnow.js +1 -92
- package/lib/commonjs/floatingMenu/dial/OnboardingTooltip.js +1 -246
- package/lib/commonjs/floatingMenu/dial/OnboardingTooltip.web.js +2 -147
- package/lib/commonjs/floatingMenu/dial/dialUsageStore.js +1 -93
- package/lib/commonjs/floatingMenu/dial/onboardingConstants.js +1 -42
- package/lib/commonjs/floatingMenu/dial/onboardingConstants.web.js +1 -42
- package/lib/commonjs/floatingMenu/externalSyncGate.js +1 -49
- package/lib/commonjs/floatingMenu/floatingTools.js +1 -42
- package/lib/commonjs/floatingMenu/floatingTools.web.js +1 -30
- package/lib/commonjs/floatingMenu/optionalRequire.js +1 -37
- package/lib/commonjs/floatingMenu/settingsBus.js +1 -23
- package/lib/commonjs/floatingMenu/sync/appSyncAdapter.js +1 -115
- package/lib/commonjs/floatingMenu/types.js +1 -5
- package/lib/commonjs/floatingMenu/useDesktopSyncStatus.js +1 -28
- package/lib/commonjs/floatingMenu/useDesktopSyncStatus.web.js +1 -0
- package/lib/commonjs/index.js +1 -291
- package/lib/commonjs/index.web.js +1 -150
- package/lib/commonjs/reactDevtoolsTypes.js +1 -0
- package/lib/commonjs/releaseOptIn.js +1 -0
- package/lib/commonjs/telemetry/installPing.js +1 -131
- package/lib/commonjs/toolkit.js +1 -584
- package/lib/commonjs/toolkitComponents.js +1 -241
- package/lib/commonjs/utils/autoDiscoverPresets.web.js +1 -219
- package/lib/commonjs/utils/createWebTool.js +1 -0
- package/lib/commonjs/utils/createWebTools.js +1 -0
- package/lib/commonjs/version.js +1 -18
- package/lib/module/Buoy.js +1 -102
- package/lib/module/browserRegister.js +1 -0
- package/lib/module/browserRegister.server.js +1 -0
- package/lib/module/earlyHookScript.js +1 -0
- package/lib/module/earlyNetwork.js +1 -0
- package/lib/module/floatingMenu/AppHost.js +1 -452
- package/lib/module/floatingMenu/AppHost.web.js +1 -356
- package/lib/module/floatingMenu/AppHostLogic.js +1 -45
- package/lib/module/floatingMenu/AppIcon.js +1 -84
- package/lib/module/floatingMenu/AppIcon.web.js +1 -47
- package/lib/module/floatingMenu/BrowserToolRuntime.js +1 -0
- package/lib/module/floatingMenu/DefaultConfigContext.js +1 -39
- package/lib/module/floatingMenu/DevToolsSettingsModal.js +1 -1115
- package/lib/module/floatingMenu/DevToolsSettingsModal.shared.js +1 -0
- package/lib/module/floatingMenu/DevToolsSettingsModal.web.js +1 -1055
- package/lib/module/floatingMenu/DevToolsVisibilityContext.js +1 -44
- package/lib/module/floatingMenu/FloatingDevTools.js +1 -551
- package/lib/module/floatingMenu/FloatingDevTools.web.js +1 -399
- package/lib/module/floatingMenu/FloatingMenu.js +1 -366
- package/lib/module/floatingMenu/MinimizedToolsContext.js +1 -266
- package/lib/module/floatingMenu/MinimizedToolsStack.js +1 -285
- package/lib/module/floatingMenu/MinimizedToolsStack.web.js +1 -368
- package/lib/module/floatingMenu/ToggleStateManager.js +1 -32
- package/lib/module/floatingMenu/ToolHost.js +1 -273
- package/lib/module/floatingMenu/ToolOpenerBridge.js +1 -37
- package/lib/module/floatingMenu/autoDiscoverPresets.js +1 -457
- package/lib/module/floatingMenu/autoExternalSync.js +1 -427
- package/lib/module/floatingMenu/defaultConfig.js +1 -158
- package/lib/module/floatingMenu/deviceIdentity.js +1 -163
- package/lib/module/floatingMenu/dial/DialDevTools.js +1 -900
- package/lib/module/floatingMenu/dial/DialDevTools.web.js +1 -818
- package/lib/module/floatingMenu/dial/DialHyperspace.js +1 -173
- package/lib/module/floatingMenu/dial/DialIcon.js +1 -299
- package/lib/module/floatingMenu/dial/DialPagination.js +1 -160
- package/lib/module/floatingMenu/dial/DialSnow.js +1 -90
- package/lib/module/floatingMenu/dial/OnboardingTooltip.js +1 -240
- package/lib/module/floatingMenu/dial/OnboardingTooltip.web.js +2 -142
- package/lib/module/floatingMenu/dial/dialUsageStore.js +1 -85
- package/lib/module/floatingMenu/dial/onboardingConstants.js +1 -3
- package/lib/module/floatingMenu/dial/onboardingConstants.web.js +1 -3
- package/lib/module/floatingMenu/externalSyncGate.js +1 -44
- package/lib/module/floatingMenu/floatingTools.js +1 -27
- package/lib/module/floatingMenu/floatingTools.web.js +1 -3
- package/lib/module/floatingMenu/optionalRequire.js +1 -33
- package/lib/module/floatingMenu/settingsBus.js +1 -19
- package/lib/module/floatingMenu/sync/appSyncAdapter.js +1 -112
- package/lib/module/floatingMenu/types.js +1 -3
- package/lib/module/floatingMenu/useDesktopSyncStatus.js +1 -25
- package/lib/module/floatingMenu/useDesktopSyncStatus.web.js +1 -0
- package/lib/module/index.js +1 -41
- package/lib/module/index.web.js +1 -29
- package/lib/module/reactDevtoolsTypes.js +1 -0
- package/lib/module/releaseOptIn.js +1 -0
- package/lib/module/telemetry/installPing.js +1 -127
- package/lib/module/toolkit.js +1 -62
- package/lib/module/toolkitComponents.js +1 -230
- package/lib/module/utils/autoDiscoverPresets.web.js +1 -213
- package/lib/module/utils/createWebTool.js +1 -0
- package/lib/module/utils/createWebTools.js +1 -0
- package/lib/module/version.js +1 -14
- package/lib/typescript/commonjs/browserRegister.d.ts +13 -0
- package/lib/typescript/commonjs/browserRegister.server.d.ts +6 -0
- package/lib/typescript/commonjs/earlyHookScript.d.ts +12 -0
- package/lib/typescript/commonjs/earlyNetwork.d.ts +52 -0
- package/lib/typescript/commonjs/floatingMenu/AppHost.web.d.ts +3 -3
- package/lib/typescript/commonjs/floatingMenu/BrowserToolRuntime.d.ts +14 -0
- package/lib/typescript/commonjs/floatingMenu/DevToolsSettingsModal.d.ts +2 -67
- package/lib/typescript/commonjs/floatingMenu/DevToolsSettingsModal.shared.d.ts +71 -0
- package/lib/typescript/commonjs/floatingMenu/DevToolsSettingsModal.web.d.ts +3 -16
- package/lib/typescript/commonjs/floatingMenu/FloatingDevTools.web.d.ts +12 -6
- package/lib/typescript/commonjs/floatingMenu/defaultConfig.d.ts +1 -1
- package/lib/typescript/commonjs/floatingMenu/settingsBus.d.ts +1 -9
- package/lib/typescript/commonjs/floatingMenu/useDesktopSyncStatus.web.d.ts +3 -0
- package/lib/typescript/commonjs/index.web.d.ts +7 -0
- package/lib/typescript/commonjs/reactDevtoolsTypes.d.ts +8 -0
- package/lib/typescript/commonjs/releaseOptIn.d.ts +4 -0
- package/lib/typescript/commonjs/utils/autoDiscoverPresets.web.d.ts +3 -40
- package/lib/typescript/commonjs/utils/createWebTool.d.ts +6 -0
- package/lib/typescript/commonjs/utils/createWebTools.d.ts +4 -0
- package/lib/typescript/commonjs/version.d.ts +1 -1
- package/lib/typescript/module/browserRegister.d.ts +13 -0
- package/lib/typescript/module/browserRegister.server.d.ts +6 -0
- package/lib/typescript/module/earlyHookScript.d.ts +12 -0
- package/lib/typescript/module/earlyNetwork.d.ts +52 -0
- package/lib/typescript/module/floatingMenu/AppHost.web.d.ts +3 -3
- package/lib/typescript/module/floatingMenu/BrowserToolRuntime.d.ts +14 -0
- package/lib/typescript/module/floatingMenu/DevToolsSettingsModal.d.ts +2 -67
- package/lib/typescript/module/floatingMenu/DevToolsSettingsModal.shared.d.ts +71 -0
- package/lib/typescript/module/floatingMenu/DevToolsSettingsModal.web.d.ts +3 -16
- package/lib/typescript/module/floatingMenu/FloatingDevTools.web.d.ts +12 -6
- package/lib/typescript/module/floatingMenu/defaultConfig.d.ts +1 -1
- package/lib/typescript/module/floatingMenu/settingsBus.d.ts +1 -9
- package/lib/typescript/module/floatingMenu/useDesktopSyncStatus.web.d.ts +3 -0
- package/lib/typescript/module/index.web.d.ts +7 -0
- package/lib/typescript/module/reactDevtoolsTypes.d.ts +8 -0
- package/lib/typescript/module/releaseOptIn.d.ts +4 -0
- package/lib/typescript/module/utils/autoDiscoverPresets.web.d.ts +3 -40
- package/lib/typescript/module/utils/createWebTool.d.ts +6 -0
- package/lib/typescript/module/utils/createWebTools.d.ts +4 -0
- package/lib/typescript/module/version.d.ts +1 -1
- package/lib/web/chunks/chunk-5SGL6QL4.mjs +1 -0
- package/lib/web/chunks/chunk-FROELTJH.mjs +1 -0
- package/lib/web/chunks/chunk-QZDVCMCT.mjs +1 -0
- package/lib/web/chunks/chunk-R7RGRTY5.mjs +1 -0
- package/lib/web/index.mjs +10 -0
- package/lib/web/register-server.mjs +1 -0
- package/lib/web/register.mjs +1 -0
- package/lib/web/toolkit.mjs +1 -0
- package/package.json +50 -12
- package/lib/typescript/commonjs/Buoy.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/AppHost.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/AppHost.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/AppHostLogic.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/AppIcon.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/AppIcon.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/DefaultConfigContext.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/DevToolsSettingsModal.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/DevToolsSettingsModal.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/DevToolsVisibilityContext.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/FloatingDevTools.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/FloatingDevTools.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/FloatingMenu.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/MinimizedToolsContext.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/MinimizedToolsStack.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/MinimizedToolsStack.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/ToggleStateManager.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/ToolHost.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/ToolOpenerBridge.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/autoDiscoverPresets.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/autoExternalSync.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/defaultConfig.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/deviceIdentity.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/dial/DialDevTools.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/dial/DialDevTools.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/dial/DialHyperspace.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/dial/DialIcon.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/dial/DialPagination.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/dial/DialSnow.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/dial/OnboardingTooltip.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/dial/OnboardingTooltip.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/dial/dialUsageStore.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/dial/onboardingConstants.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/dial/onboardingConstants.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/externalSyncGate.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/floatingTools.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/floatingTools.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/optionalRequire.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/settingsBus.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/sync/appSyncAdapter.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/types.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/useDesktopSyncStatus.d.ts.map +0 -1
- package/lib/typescript/commonjs/index.d.ts.map +0 -1
- package/lib/typescript/commonjs/index.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/telemetry/installPing.d.ts.map +0 -1
- package/lib/typescript/commonjs/toolkit.d.ts.map +0 -1
- package/lib/typescript/commonjs/toolkitComponents.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/autoDiscoverPresets.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/version.d.ts.map +0 -1
- package/lib/typescript/module/Buoy.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/AppHost.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/AppHost.web.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/AppHostLogic.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/AppIcon.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/AppIcon.web.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/DefaultConfigContext.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/DevToolsSettingsModal.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/DevToolsSettingsModal.web.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/DevToolsVisibilityContext.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/FloatingDevTools.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/FloatingDevTools.web.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/FloatingMenu.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/MinimizedToolsContext.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/MinimizedToolsStack.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/MinimizedToolsStack.web.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/ToggleStateManager.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/ToolHost.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/ToolOpenerBridge.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/autoDiscoverPresets.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/autoExternalSync.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/defaultConfig.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/deviceIdentity.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/dial/DialDevTools.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/dial/DialDevTools.web.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/dial/DialHyperspace.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/dial/DialIcon.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/dial/DialPagination.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/dial/DialSnow.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/dial/OnboardingTooltip.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/dial/OnboardingTooltip.web.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/dial/dialUsageStore.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/dial/onboardingConstants.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/dial/onboardingConstants.web.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/externalSyncGate.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/floatingTools.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/floatingTools.web.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/optionalRequire.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/settingsBus.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/sync/appSyncAdapter.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/types.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/useDesktopSyncStatus.d.ts.map +0 -1
- package/lib/typescript/module/index.d.ts.map +0 -1
- package/lib/typescript/module/index.web.d.ts.map +0 -1
- package/lib/typescript/module/telemetry/installPing.d.ts.map +0 -1
- package/lib/typescript/module/toolkit.d.ts.map +0 -1
- package/lib/typescript/module/toolkitComponents.d.ts.map +0 -1
- package/lib/typescript/module/utils/autoDiscoverPresets.web.d.ts.map +0 -1
- package/lib/typescript/module/version.d.ts.map +0 -1
|
@@ -1,460 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.useAppHost = exports.AppOverlay = exports.AppHostProvider = void 0;
|
|
7
|
-
var _sharedUi = require("@buoy-gg/shared-ui");
|
|
8
|
-
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
-
var _reactNative = require("react-native");
|
|
10
|
-
var _AppHostLogic = require("./AppHostLogic.js");
|
|
11
|
-
var _AppIcon = require("./AppIcon");
|
|
12
|
-
var _MinimizedToolsContext = require("./MinimizedToolsContext.js");
|
|
13
|
-
var _ToolHost = require("./ToolHost.js");
|
|
14
|
-
var _DevToolsSettingsModal = require("./DevToolsSettingsModal");
|
|
15
|
-
var _jsxRuntime = require("react/jsx-runtime");
|
|
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); }
|
|
17
|
-
const AppHostContext = /*#__PURE__*/(0, _react.createContext)(null);
|
|
18
|
-
const STORAGE_KEY_OPEN_APPS = "@react_buoy_open_apps";
|
|
19
|
-
const PERSISTENCE_DELAY = 500;
|
|
20
|
-
|
|
21
|
-
// Type for persisted app state
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Provides the floating dev tools application host. Tracks open tool instances, restores
|
|
25
|
-
* persisted state, and exposes imperative helpers used by `FloatingMenu` and friends.
|
|
26
|
-
*/
|
|
27
|
-
const AppHostProvider = ({
|
|
28
|
-
children
|
|
29
|
-
}) => {
|
|
30
|
-
const [openApps, setOpenApps] = (0, _react.useState)([]);
|
|
31
|
-
const [isRestored, setIsRestored] = (0, _react.useState)(false);
|
|
32
|
-
const persistenceTimeoutRef = (0, _react.useRef)(null);
|
|
33
|
-
const installedAppsRef = (0, _react.useRef)([]);
|
|
34
|
-
const pendingRestoreRef = (0, _react.useRef)(null);
|
|
35
|
-
const {
|
|
36
|
-
restore: removeFromMinimizedStack
|
|
37
|
-
} = (0, _MinimizedToolsContext.useMinimizedTools)();
|
|
38
|
-
const open = (0, _react.useCallback)(def => {
|
|
39
|
-
let resolvedId = "";
|
|
40
|
-
setOpenApps(current => {
|
|
41
|
-
const {
|
|
42
|
-
apps,
|
|
43
|
-
instanceId,
|
|
44
|
-
wasMinimized
|
|
45
|
-
} = (0, _AppHostLogic.resolveOpenAppsState)(current, def, () => `${def.id}-${Date.now()}-${Math.random().toString(36).slice(2)}`);
|
|
46
|
-
resolvedId = instanceId;
|
|
47
|
-
|
|
48
|
-
// If the app was minimized, remove it from the minimized stack
|
|
49
|
-
// This needs to be done outside of setOpenApps to avoid nested state updates
|
|
50
|
-
if (wasMinimized) {
|
|
51
|
-
// Schedule the removal for after this state update completes
|
|
52
|
-
setTimeout(() => removeFromMinimizedStack(instanceId), 0);
|
|
53
|
-
}
|
|
54
|
-
return apps;
|
|
55
|
-
});
|
|
56
|
-
return resolvedId;
|
|
57
|
-
}, [removeFromMinimizedStack]);
|
|
58
|
-
const tryRestorePending = (0, _react.useCallback)(() => {
|
|
59
|
-
if (isRestored) return;
|
|
60
|
-
if (!installedAppsRef.current.length) return;
|
|
61
|
-
const pendingApps = pendingRestoreRef.current;
|
|
62
|
-
if (!pendingApps || pendingApps.length === 0) {
|
|
63
|
-
setIsRestored(true);
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
pendingRestoreRef.current = null;
|
|
67
|
-
pendingApps.forEach(({
|
|
68
|
-
id: appId,
|
|
69
|
-
minimized
|
|
70
|
-
}) => {
|
|
71
|
-
const appDef = installedAppsRef.current.find(app => app.id === appId);
|
|
72
|
-
if (appDef) {
|
|
73
|
-
const resolvedIcon = (0, _AppIcon.renderAppIcon)(appDef.icon, {
|
|
74
|
-
slot: "dial",
|
|
75
|
-
size: 20,
|
|
76
|
-
color: appDef.color
|
|
77
|
-
});
|
|
78
|
-
open({
|
|
79
|
-
id: appDef.id,
|
|
80
|
-
title: appDef.name,
|
|
81
|
-
component: appDef.component,
|
|
82
|
-
props: appDef.props,
|
|
83
|
-
launchMode: appDef.launchMode || "self-modal",
|
|
84
|
-
singleton: appDef.singleton,
|
|
85
|
-
icon: resolvedIcon,
|
|
86
|
-
color: appDef.color,
|
|
87
|
-
modal: appDef.modal,
|
|
88
|
-
minimized: minimized // Preserve minimized state
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
});
|
|
92
|
-
setIsRestored(true);
|
|
93
|
-
}, [isRestored, open]);
|
|
94
|
-
|
|
95
|
-
// Restore open apps on mount
|
|
96
|
-
(0, _react.useEffect)(() => {
|
|
97
|
-
const restoreOpenApps = async () => {
|
|
98
|
-
try {
|
|
99
|
-
const saved = await _sharedUi.persistentStorage.getItem(STORAGE_KEY_OPEN_APPS);
|
|
100
|
-
if (saved) {
|
|
101
|
-
const parsed = JSON.parse(saved);
|
|
102
|
-
// Handle both old format (string[]) and new format (PersistedAppState[])
|
|
103
|
-
let savedApps;
|
|
104
|
-
if (Array.isArray(parsed) && parsed.length > 0) {
|
|
105
|
-
if (typeof parsed[0] === "string") {
|
|
106
|
-
// Old format: convert string[] to PersistedAppState[]
|
|
107
|
-
savedApps = parsed.map(id => ({
|
|
108
|
-
id,
|
|
109
|
-
minimized: false
|
|
110
|
-
}));
|
|
111
|
-
} else {
|
|
112
|
-
// New format: already PersistedAppState[]
|
|
113
|
-
savedApps = parsed;
|
|
114
|
-
}
|
|
115
|
-
if (savedApps.length) {
|
|
116
|
-
pendingRestoreRef.current = savedApps;
|
|
117
|
-
tryRestorePending();
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
} catch (error) {
|
|
123
|
-
// Failed to restore open apps - continue with fresh state
|
|
124
|
-
}
|
|
125
|
-
setIsRestored(true);
|
|
126
|
-
};
|
|
127
|
-
restoreOpenApps();
|
|
128
|
-
}, [tryRestorePending]);
|
|
129
|
-
|
|
130
|
-
// Save open apps with debounce
|
|
131
|
-
(0, _react.useEffect)(() => {
|
|
132
|
-
if (!isRestored) return;
|
|
133
|
-
|
|
134
|
-
// Clear existing timeout
|
|
135
|
-
if (persistenceTimeoutRef.current) {
|
|
136
|
-
clearTimeout(persistenceTimeoutRef.current);
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
// Set new timeout to save
|
|
140
|
-
persistenceTimeoutRef.current = setTimeout(() => {
|
|
141
|
-
const appStates = openApps.map(app => ({
|
|
142
|
-
id: app.id,
|
|
143
|
-
minimized: app.minimized ?? false
|
|
144
|
-
}));
|
|
145
|
-
_sharedUi.persistentStorage.setItem(STORAGE_KEY_OPEN_APPS, JSON.stringify(appStates));
|
|
146
|
-
}, PERSISTENCE_DELAY);
|
|
147
|
-
return () => {
|
|
148
|
-
if (persistenceTimeoutRef.current) {
|
|
149
|
-
clearTimeout(persistenceTimeoutRef.current);
|
|
150
|
-
}
|
|
151
|
-
};
|
|
152
|
-
}, [openApps, isRestored]);
|
|
153
|
-
|
|
154
|
-
// Store reference to installed apps for restoration
|
|
155
|
-
const registerApps = (0, _react.useCallback)(apps => {
|
|
156
|
-
installedAppsRef.current = apps;
|
|
157
|
-
tryRestorePending();
|
|
158
|
-
}, [tryRestorePending]);
|
|
159
|
-
const close = (0, _react.useCallback)(instanceId => {
|
|
160
|
-
setOpenApps(s => {
|
|
161
|
-
if (!s.length) return s;
|
|
162
|
-
if (!instanceId) return s.slice(0, -1);
|
|
163
|
-
return s.filter(a => a.instanceId !== instanceId);
|
|
164
|
-
});
|
|
165
|
-
}, []);
|
|
166
|
-
const closeAll = (0, _react.useCallback)(() => setOpenApps([]), []);
|
|
167
|
-
const minimize = (0, _react.useCallback)(instanceId => {
|
|
168
|
-
setOpenApps(s => s.map(app => app.instanceId === instanceId ? {
|
|
169
|
-
...app,
|
|
170
|
-
minimized: true
|
|
171
|
-
} : app));
|
|
172
|
-
}, []);
|
|
173
|
-
const restore = (0, _react.useCallback)((instanceId, restoreState) => {
|
|
174
|
-
setOpenApps(s => s.map(app => app.instanceId === instanceId ? {
|
|
175
|
-
...app,
|
|
176
|
-
minimized: false,
|
|
177
|
-
restoreState
|
|
178
|
-
} : app));
|
|
179
|
-
}, []);
|
|
180
|
-
const isMinimized = (0, _react.useCallback)(instanceId => {
|
|
181
|
-
const app = openApps.find(a => a.instanceId === instanceId);
|
|
182
|
-
return app?.minimized ?? false;
|
|
183
|
-
}, [openApps]);
|
|
184
|
-
_react.default.useEffect(() => {
|
|
185
|
-
if (openApps.length === 0) return;
|
|
186
|
-
const handler = () => {
|
|
187
|
-
close();
|
|
188
|
-
return true;
|
|
189
|
-
};
|
|
190
|
-
const sub = _reactNative.BackHandler.addEventListener("hardwareBackPress", handler);
|
|
191
|
-
return () => sub.remove();
|
|
192
|
-
}, [openApps.length, close]);
|
|
193
|
-
const value = (0, _react.useMemo)(() => ({
|
|
194
|
-
openApps,
|
|
195
|
-
// Only count non-toggle-only and non-minimized tools as "open"
|
|
196
|
-
isAnyOpen: openApps.filter(app => app.launchMode !== "toggle-only" && !app.minimized).length > 0,
|
|
197
|
-
open,
|
|
198
|
-
close,
|
|
199
|
-
closeAll,
|
|
200
|
-
registerApps,
|
|
201
|
-
minimize,
|
|
202
|
-
restore,
|
|
203
|
-
isMinimized
|
|
204
|
-
}), [openApps, open, close, closeAll, registerApps, minimize, restore, isMinimized]);
|
|
205
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(AppHostContext.Provider, {
|
|
206
|
-
value: value,
|
|
207
|
-
children: children
|
|
208
|
-
});
|
|
209
|
-
};
|
|
210
|
-
|
|
211
|
-
/**
|
|
212
|
-
* Accessor hook for the dev tools app host. Components can open/close tools or inspect
|
|
213
|
-
* the active stack. Falls back to a no-op implementation when rendered outside the provider.
|
|
214
|
-
*/
|
|
215
|
-
exports.AppHostProvider = AppHostProvider;
|
|
216
|
-
const useAppHost = () => {
|
|
217
|
-
const ctx = (0, _react.useContext)(AppHostContext);
|
|
218
|
-
// Return a default value if not in provider (for backwards compatibility)
|
|
219
|
-
if (!ctx) {
|
|
220
|
-
return {
|
|
221
|
-
openApps: [],
|
|
222
|
-
isAnyOpen: false,
|
|
223
|
-
open: () => "",
|
|
224
|
-
close: () => {},
|
|
225
|
-
closeAll: () => {},
|
|
226
|
-
minimize: () => {},
|
|
227
|
-
restore: (_instanceId, _restoreState) => {},
|
|
228
|
-
isMinimized: () => false
|
|
229
|
-
};
|
|
230
|
-
}
|
|
231
|
-
return ctx;
|
|
232
|
-
};
|
|
233
|
-
|
|
234
|
-
/**
|
|
235
|
-
* Renders a single app instance. Keeps component mounted even when minimized
|
|
236
|
-
* by passing visible={false} instead of unmounting.
|
|
237
|
-
*
|
|
238
|
-
* Supports multiple simultaneous modals - each gets its own z-index based on
|
|
239
|
-
* position in the open apps stack (later opened = higher z-index).
|
|
240
|
-
*/
|
|
241
|
-
exports.useAppHost = useAppHost;
|
|
242
|
-
const AppRenderer = ({
|
|
243
|
-
app,
|
|
244
|
-
zIndex,
|
|
245
|
-
onClose,
|
|
246
|
-
onMinimize,
|
|
247
|
-
minimizeTargetPosition,
|
|
248
|
-
globalEnableSharedModalDimensions
|
|
249
|
-
}) => {
|
|
250
|
-
const Comp = app.component;
|
|
251
|
-
// All non-minimized apps are visible - supports multiple simultaneous modals
|
|
252
|
-
const isVisible = !app.minimized;
|
|
253
|
-
|
|
254
|
-
// Merge props with global settings override
|
|
255
|
-
// Priority: Global settings (if defined) > Tool prop > Default (false)
|
|
256
|
-
const mergedProps = {
|
|
257
|
-
...(app.props ?? {}),
|
|
258
|
-
// Only override if globalEnableSharedModalDimensions is explicitly true
|
|
259
|
-
// (when the user turns it on in settings)
|
|
260
|
-
...(globalEnableSharedModalDimensions === true ? {
|
|
261
|
-
enableSharedModalDimensions: true
|
|
262
|
-
} : {})
|
|
263
|
-
};
|
|
264
|
-
|
|
265
|
-
// Declarative chrome: the component is a plain body — wrap it in the shared
|
|
266
|
-
// modal shell (JsModal + managed header + search + toasts).
|
|
267
|
-
if (app.modal && (app.launchMode === "self-modal" || !app.launchMode)) {
|
|
268
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_ToolHost.ToolModalShell, {
|
|
269
|
-
app: app,
|
|
270
|
-
config: app.modal,
|
|
271
|
-
visible: isVisible,
|
|
272
|
-
zIndex: zIndex,
|
|
273
|
-
onClose: onClose,
|
|
274
|
-
onMinimize: onMinimize,
|
|
275
|
-
initialModalState: app.restoreState,
|
|
276
|
-
enableSharedModalDimensions: globalEnableSharedModalDimensions === true,
|
|
277
|
-
bodyProps: mergedProps
|
|
278
|
-
});
|
|
279
|
-
}
|
|
280
|
-
if (app.launchMode === "self-modal") {
|
|
281
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(Comp, {
|
|
282
|
-
...mergedProps,
|
|
283
|
-
visible: isVisible,
|
|
284
|
-
onClose: onClose,
|
|
285
|
-
onRequestClose: onClose,
|
|
286
|
-
onMinimize: onMinimize,
|
|
287
|
-
minimizeTargetPosition: minimizeTargetPosition,
|
|
288
|
-
initialModalState: app.restoreState,
|
|
289
|
-
instanceId: app.instanceId,
|
|
290
|
-
zIndex: zIndex
|
|
291
|
-
});
|
|
292
|
-
}
|
|
293
|
-
if (app.launchMode === "inline") {
|
|
294
|
-
if (!isVisible) return null;
|
|
295
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
296
|
-
pointerEvents: "box-none",
|
|
297
|
-
style: [_reactNative.StyleSheet.absoluteFill, {
|
|
298
|
-
zIndex
|
|
299
|
-
}],
|
|
300
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Comp, {
|
|
301
|
-
...mergedProps,
|
|
302
|
-
onClose: onClose,
|
|
303
|
-
onMinimize: onMinimize,
|
|
304
|
-
minimizeTargetPosition: minimizeTargetPosition,
|
|
305
|
-
initialModalState: app.restoreState,
|
|
306
|
-
instanceId: app.instanceId
|
|
307
|
-
})
|
|
308
|
-
});
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
// host-modal mode
|
|
312
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Modal, {
|
|
313
|
-
visible: isVisible,
|
|
314
|
-
transparent: true,
|
|
315
|
-
animationType: "slide",
|
|
316
|
-
onRequestClose: onClose,
|
|
317
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
318
|
-
style: styles.backdrop,
|
|
319
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
320
|
-
style: styles.card,
|
|
321
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Comp, {
|
|
322
|
-
...mergedProps,
|
|
323
|
-
onClose: onClose,
|
|
324
|
-
onMinimize: onMinimize,
|
|
325
|
-
minimizeTargetPosition: minimizeTargetPosition,
|
|
326
|
-
initialModalState: app.restoreState,
|
|
327
|
-
instanceId: app.instanceId
|
|
328
|
-
})
|
|
329
|
-
})
|
|
330
|
-
})
|
|
331
|
-
});
|
|
332
|
-
};
|
|
333
|
-
|
|
334
|
-
/**
|
|
335
|
-
* Renders all dev tool surfaces. Keeps minimized apps mounted but hidden
|
|
336
|
-
* so their state and listeners are preserved (similar to React Navigation screens).
|
|
337
|
-
*
|
|
338
|
-
* Supports multiple simultaneous modals - each modal gets a z-index based on
|
|
339
|
-
* its position in the stack (later opened modals appear on top).
|
|
340
|
-
*/
|
|
341
|
-
const AppOverlay = () => {
|
|
342
|
-
const {
|
|
343
|
-
openApps,
|
|
344
|
-
close,
|
|
345
|
-
minimize
|
|
346
|
-
} = useAppHost();
|
|
347
|
-
const {
|
|
348
|
-
minimize: addToMinimizedStack,
|
|
349
|
-
restore: removeFromMinimizedStack,
|
|
350
|
-
getNextIconPosition,
|
|
351
|
-
minimizedTools
|
|
352
|
-
} = (0, _MinimizedToolsContext.useMinimizedTools)();
|
|
353
|
-
const {
|
|
354
|
-
settings
|
|
355
|
-
} = (0, _DevToolsSettingsModal.useDevToolsSettings)();
|
|
356
|
-
|
|
357
|
-
// Sync expandable window controls setting to WindowControls module
|
|
358
|
-
(0, _react.useEffect)(() => {
|
|
359
|
-
// Default to true (expandable ON) when setting is undefined
|
|
360
|
-
(0, _sharedUi.setExpandableWindowControls)(settings.globalSettings?.expandableWindowControls !== false);
|
|
361
|
-
}, [settings.globalSettings?.expandableWindowControls]);
|
|
362
|
-
|
|
363
|
-
// Sync restored minimized apps to MinimizedToolsContext
|
|
364
|
-
// This handles apps that were restored from persistence with minimized=true
|
|
365
|
-
_react.default.useEffect(() => {
|
|
366
|
-
openApps.forEach(app => {
|
|
367
|
-
if (app.minimized && app.launchMode !== "toggle-only") {
|
|
368
|
-
// Check if this app is already in the minimized stack
|
|
369
|
-
const isInStack = minimizedTools.some(t => t.instanceId === app.instanceId);
|
|
370
|
-
if (!isInStack) {
|
|
371
|
-
// Add to minimized stack (restored from persistence)
|
|
372
|
-
addToMinimizedStack({
|
|
373
|
-
instanceId: app.instanceId,
|
|
374
|
-
id: app.id,
|
|
375
|
-
title: app.title || app.id,
|
|
376
|
-
icon: app.icon,
|
|
377
|
-
color: app.color
|
|
378
|
-
});
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
});
|
|
382
|
-
|
|
383
|
-
// ...and take out anything the rail is still showing that is no longer
|
|
384
|
-
// minimized, or no longer open at all.
|
|
385
|
-
//
|
|
386
|
-
// WHY THIS HALF EXISTS. `openApps` and the rail are two separate stores
|
|
387
|
-
// for one fact, and only the ADD side was reliable. Minimizing goes
|
|
388
|
-
// through an event handler; un-minimizing happens inside `open`, which
|
|
389
|
-
// schedules the rail removal with a `setTimeout` from INSIDE a
|
|
390
|
-
// `setOpenApps` updater. Updaters are not a safe place for side effects —
|
|
391
|
-
// React may double-invoke or discard them — so the removal could be
|
|
392
|
-
// skipped while `minimized: false` still landed. The rail then kept an
|
|
393
|
-
// icon for an already-open tool, and tapping it did nothing except delete
|
|
394
|
-
// the icon: the tool looked like it vanished, with no way back to it, and
|
|
395
|
-
// both stores are persisted so it survived every reload.
|
|
396
|
-
//
|
|
397
|
-
// Reconciling here makes the rail eventually consistent with `openApps`
|
|
398
|
-
// whichever way the state moved, without moving the side effect.
|
|
399
|
-
minimizedTools.forEach(tool => {
|
|
400
|
-
const app = openApps.find(a => a.instanceId === tool.instanceId);
|
|
401
|
-
if (!app || !app.minimized) {
|
|
402
|
-
removeFromMinimizedStack(tool.instanceId);
|
|
403
|
-
}
|
|
404
|
-
});
|
|
405
|
-
}, [openApps, minimizedTools, addToMinimizedStack, removeFromMinimizedStack]);
|
|
406
|
-
|
|
407
|
-
// Filter to renderable apps (exclude toggle-only)
|
|
408
|
-
const renderableApps = openApps.filter(app => app.launchMode !== "toggle-only");
|
|
409
|
-
if (renderableApps.length === 0) return null;
|
|
410
|
-
|
|
411
|
-
// Base z-index for modals - each subsequent modal gets +1
|
|
412
|
-
const BASE_ZINDEX = 9000;
|
|
413
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
|
|
414
|
-
children: renderableApps.map((app, index) => {
|
|
415
|
-
// z-index based on position - later in array = higher z-index (on top)
|
|
416
|
-
const zIndex = BASE_ZINDEX + index;
|
|
417
|
-
const minimizeTargetPosition = getNextIconPosition();
|
|
418
|
-
const handleMinimize = modalState => {
|
|
419
|
-
// IMPORTANT: Order matters here!
|
|
420
|
-
// 1. First mark the app as minimized in AppHost - this updates isAnyOpen
|
|
421
|
-
// so that pushToSide becomes false before the icon component mounts
|
|
422
|
-
minimize(app.instanceId);
|
|
423
|
-
// 2. Then add to the minimized stack - this triggers the icon to mount
|
|
424
|
-
// By now isAnyOpen is false, so the icon mounts with pushToSide=false
|
|
425
|
-
addToMinimizedStack({
|
|
426
|
-
instanceId: app.instanceId,
|
|
427
|
-
id: app.id,
|
|
428
|
-
title: app.title || app.id,
|
|
429
|
-
icon: app.icon,
|
|
430
|
-
color: app.color,
|
|
431
|
-
modalState: modalState
|
|
432
|
-
});
|
|
433
|
-
};
|
|
434
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(AppRenderer, {
|
|
435
|
-
app: app,
|
|
436
|
-
zIndex: zIndex,
|
|
437
|
-
onClose: () => close(app.instanceId),
|
|
438
|
-
onMinimize: handleMinimize,
|
|
439
|
-
minimizeTargetPosition: minimizeTargetPosition,
|
|
440
|
-
globalEnableSharedModalDimensions: settings.globalSettings?.enableSharedModalDimensions
|
|
441
|
-
}, app.instanceId);
|
|
442
|
-
})
|
|
443
|
-
});
|
|
444
|
-
};
|
|
445
|
-
exports.AppOverlay = AppOverlay;
|
|
446
|
-
const styles = _reactNative.StyleSheet.create({
|
|
447
|
-
backdrop: {
|
|
448
|
-
flex: 1,
|
|
449
|
-
backgroundColor: "rgba(0,0,0,0.28)",
|
|
450
|
-
alignItems: "center",
|
|
451
|
-
justifyContent: "center"
|
|
452
|
-
},
|
|
453
|
-
card: {
|
|
454
|
-
maxHeight: "90%",
|
|
455
|
-
width: "94%",
|
|
456
|
-
borderRadius: 12,
|
|
457
|
-
backgroundColor: "white",
|
|
458
|
-
overflow: "hidden"
|
|
459
|
-
}
|
|
460
|
-
});
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.useAppHost=exports.AppOverlay=exports.AppHostProvider=void 0;var _sharedUi=require("@buoy-gg/shared-ui");var _react=_interopRequireWildcard(require("react"));var _reactNative=require("react-native");var _AppHostLogic=require("./AppHostLogic.js");var _AppIcon=require("./AppIcon");var _MinimizedToolsContext=require("./MinimizedToolsContext.js");var _ToolHost=require("./ToolHost.js");var _DevToolsSettingsModal=require("./DevToolsSettingsModal");var _jsxRuntime=require("react/jsx-runtime");function _interopRequireWildcard(t,l){if("function"==typeof WeakMap)var a=new WeakMap,m=new WeakMap;return(_interopRequireWildcard=function(i,f){if(!f&&i&&i.__esModule)return i;var c,d,u={__proto__:null,default:i};if(null===i||"object"!=typeof i&&"function"!=typeof i)return u;if(c=f?m:a){if(c.has(i))return c.get(i);c.set(i,u)}for(const g in i)"default"!==g&&{}.hasOwnProperty.call(i,g)&&((d=(c=Object.defineProperty)&&Object.getOwnPropertyDescriptor(i,g))&&(d.get||d.set)?c(u,g,d):u[g]=i[g]);return u})(t,l)}const AppHostContext=(0,_react.createContext)(null);const STORAGE_KEY_OPEN_APPS="@react_buoy_open_apps";const PERSISTENCE_DELAY=500;const AppHostProvider=({children:t})=>{const[l,a]=(0,_react.useState)([]);const[m,i]=(0,_react.useState)(false);const f=(0,_react.useRef)(null);const c=(0,_react.useRef)([]);const d=(0,_react.useRef)(null);const{restore:u}=(0,_MinimizedToolsContext.useMinimizedTools)();const g=(0,_react.useCallback)(n=>{let o="";a(s=>{const{apps:r,instanceId:S,wasMinimized:x}=(0,_AppHostLogic.resolveOpenAppsState)(s,n,()=>`${n.id}-${Date.now()}-${Math.random().toString(36).slice(2)}`);o=S;if(x){setTimeout(()=>u(S),0)}return r});return o},[u]);const e=(0,_react.useCallback)(()=>{if(m)return;if(!c.current.length)return;const n=d.current;if(!n||n.length===0){i(true);return}d.current=null;n.forEach(({id:o,minimized:s})=>{const r=c.current.find(S=>S.id===o);if(r){const S=(0,_AppIcon.renderAppIcon)(r.icon,{slot:"dial",size:20,color:r.color});g({id:r.id,title:r.name,component:r.component,props:r.props,launchMode:r.launchMode||"self-modal",singleton:r.singleton,icon:S,color:r.color,modal:r.modal,minimized:s})}});i(true)},[m,g]);(0,_react.useEffect)(()=>{const n=async()=>{try{const o=await _sharedUi.persistentStorage.getItem(STORAGE_KEY_OPEN_APPS);if(o){const s=JSON.parse(o);let r;if(Array.isArray(s)&&s.length>0){if(typeof s[0]==="string"){r=s.map(S=>({id:S,minimized:false}))}else{r=s}if(r.length){d.current=r;e();return}}}}catch(o){}i(true)};n()},[e]);(0,_react.useEffect)(()=>{if(!m)return;if(f.current){clearTimeout(f.current)}f.current=setTimeout(()=>{const n=l.map(o=>({id:o.id,minimized:o.minimized??false}));_sharedUi.persistentStorage.setItem(STORAGE_KEY_OPEN_APPS,JSON.stringify(n))},PERSISTENCE_DELAY);return()=>{if(f.current){clearTimeout(f.current)}}},[l,m]);const h=(0,_react.useCallback)(n=>{c.current=n;e()},[e]);const p=(0,_react.useCallback)(n=>{a(o=>{if(!o.length)return o;if(!n)return o.slice(0,-1);return o.filter(s=>s.instanceId!==n)})},[]);const v=(0,_react.useCallback)(()=>a([]),[]);const M=(0,_react.useCallback)(n=>{a(o=>o.map(s=>s.instanceId===n?{...s,minimized:true}:s))},[]);const b=(0,_react.useCallback)((n,o)=>{a(s=>s.map(r=>r.instanceId===n?{...r,minimized:false,restoreState:o}:r))},[]);const I=(0,_react.useCallback)(n=>{const o=l.find(s=>s.instanceId===n);return o?.minimized??false},[l]);_react.default.useEffect(()=>{if(l.length===0)return;const n=()=>{p();return true};const o=_reactNative.BackHandler.addEventListener("hardwareBackPress",n);return()=>o.remove()},[l.length,p]);const A=(0,_react.useMemo)(()=>({openApps:l,isAnyOpen:l.filter(n=>n.launchMode!=="toggle-only"&&!n.minimized).length>0,open:g,close:p,closeAll:v,registerApps:h,minimize:M,restore:b,isMinimized:I}),[l,g,p,v,h,M,b,I]);return(0,_jsxRuntime.jsx)(AppHostContext.Provider,{value:A,children:t})};exports.AppHostProvider=AppHostProvider;const useAppHost=()=>{const t=(0,_react.useContext)(AppHostContext);if(!t){return{openApps:[],isAnyOpen:false,open:()=>"",close:()=>{},closeAll:()=>{},minimize:()=>{},restore:(l,a)=>{},isMinimized:()=>false}}return t};exports.useAppHost=useAppHost;const AppRenderer=({app:t,zIndex:l,onClose:a,onMinimize:m,minimizeTargetPosition:i,globalEnableSharedModalDimensions:f})=>{const c=t.component;const d=!t.minimized;const u={...t.props??{},...f===true?{enableSharedModalDimensions:true}:{}};if(t.modal&&(t.launchMode==="self-modal"||!t.launchMode)){return(0,_jsxRuntime.jsx)(_ToolHost.ToolModalShell,{app:t,config:t.modal,visible:d,zIndex:l,onClose:a,onMinimize:m,initialModalState:t.restoreState,enableSharedModalDimensions:f===true,bodyProps:u})}if(t.launchMode==="self-modal"){return(0,_jsxRuntime.jsx)(c,{...u,visible:d,onClose:a,onRequestClose:a,onMinimize:m,minimizeTargetPosition:i,initialModalState:t.restoreState,instanceId:t.instanceId,zIndex:l})}if(t.launchMode==="inline"){if(!d)return null;return(0,_jsxRuntime.jsx)(_reactNative.View,{pointerEvents:"box-none",style:[_reactNative.StyleSheet.absoluteFill,{zIndex:l}],children:(0,_jsxRuntime.jsx)(c,{...u,onClose:a,onMinimize:m,minimizeTargetPosition:i,initialModalState:t.restoreState,instanceId:t.instanceId})})}return(0,_jsxRuntime.jsx)(_reactNative.Modal,{visible:d,transparent:true,animationType:"slide",onRequestClose:a,children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.backdrop,children:(0,_jsxRuntime.jsx)(_reactNative.View,{style:styles.card,children:(0,_jsxRuntime.jsx)(c,{...u,onClose:a,onMinimize:m,minimizeTargetPosition:i,initialModalState:t.restoreState,instanceId:t.instanceId})})})})};const AppOverlay=()=>{const{openApps:t,close:l,minimize:a}=useAppHost();const{minimize:m,restore:i,getNextIconPosition:f,minimizedTools:c}=(0,_MinimizedToolsContext.useMinimizedTools)();const{settings:d}=(0,_DevToolsSettingsModal.useDevToolsSettings)();(0,_react.useEffect)(()=>{(0,_sharedUi.setExpandableWindowControls)(d.globalSettings?.expandableWindowControls!==false)},[d.globalSettings?.expandableWindowControls]);_react.default.useEffect(()=>{t.forEach(e=>{if(e.minimized&&e.launchMode!=="toggle-only"){const h=c.some(p=>p.instanceId===e.instanceId);if(!h){m({instanceId:e.instanceId,id:e.id,title:e.title||e.id,icon:e.icon,color:e.color})}}});c.forEach(e=>{const h=t.find(p=>p.instanceId===e.instanceId);if(!h||!h.minimized){i(e.instanceId)}})},[t,c,m,i]);const u=t.filter(e=>e.launchMode!=="toggle-only");if(u.length===0)return null;const g=9e3;return(0,_jsxRuntime.jsx)(_jsxRuntime.Fragment,{children:u.map((e,h)=>{const p=g+h;const v=f();const M=b=>{a(e.instanceId);m({instanceId:e.instanceId,id:e.id,title:e.title||e.id,icon:e.icon,color:e.color,modalState:b})};return(0,_jsxRuntime.jsx)(AppRenderer,{app:e,zIndex:p,onClose:()=>l(e.instanceId),onMinimize:M,minimizeTargetPosition:v,globalEnableSharedModalDimensions:d.globalSettings?.enableSharedModalDimensions},e.instanceId)})})};exports.AppOverlay=AppOverlay;const styles=_reactNative.StyleSheet.create({backdrop:{flex:1,backgroundColor:"rgba(0,0,0,0.28)",alignItems:"center",justifyContent:"center"},card:{maxHeight:"90%",width:"94%",borderRadius:12,backgroundColor:"white",overflow:"hidden"}});
|