@edenapp/sdk 0.4.1 → 0.5.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/dist/Eden.d.ts +6 -1
- package/dist/Eden.d.ts.map +1 -1
- package/dist/Eden.js +81 -33
- package/dist/Eden.js.map +1 -1
- package/dist/SystemHandler.d.ts +4 -3
- package/dist/SystemHandler.d.ts.map +1 -1
- package/dist/SystemHandler.js +7 -3
- package/dist/SystemHandler.js.map +1 -1
- package/dist/app-frame/frame-injector.js +6 -5
- package/dist/app-frame/frame-injector.js.map +4 -4
- package/dist/app-frame/frame.css +168 -131
- package/dist/app-runtime/app-preload.js +2 -1
- package/dist/app-runtime/app-preload.js.map +4 -4
- package/dist/app-runtime/backend-preload.js +3 -1
- package/dist/app-runtime/backend-preload.js.map +4 -4
- package/dist/appbus/AppChannelHandler.d.ts +1 -1
- package/dist/appbus/AppChannelHandler.d.ts.map +1 -1
- package/dist/appbus/AppChannelHandler.js.map +1 -1
- package/dist/appbus/AppChannelManager.d.ts +1 -1
- package/dist/appbus/AppChannelManager.d.ts.map +1 -1
- package/dist/appbus/AppChannelManager.js +9 -8
- package/dist/appbus/AppChannelManager.js.map +1 -1
- package/dist/appearance/AppearanceHandler.d.ts +17 -0
- package/dist/appearance/AppearanceHandler.d.ts.map +1 -0
- package/dist/appearance/AppearanceHandler.js +53 -0
- package/dist/appearance/AppearanceHandler.js.map +1 -0
- package/dist/appearance/AppearanceManager.d.ts +22 -0
- package/dist/appearance/AppearanceManager.d.ts.map +1 -0
- package/dist/appearance/AppearanceManager.js +138 -0
- package/dist/appearance/AppearanceManager.js.map +1 -0
- package/dist/apps/prebuilt/com.eden.calculator/dist/assets/index-B2YDTw7g.js +1 -0
- package/dist/apps/prebuilt/com.eden.calculator/dist/assets/index-COlV85zB.css +1 -0
- package/dist/apps/prebuilt/com.eden.calculator/dist/index.html +13 -0
- package/dist/apps/prebuilt/com.eden.calculator/index.html +12 -0
- package/dist/apps/prebuilt/com.eden.calculator/manifest.json +77 -0
- package/dist/apps/prebuilt/com.eden.calculator/package.json +21 -0
- package/dist/apps/prebuilt/com.eden.context-menu/dist/assets/index-DUrqfNSi.js +1 -0
- package/dist/apps/prebuilt/com.eden.context-menu/dist/assets/index-PflHQ4jS.css +1 -0
- package/dist/apps/prebuilt/com.eden.context-menu/dist/index.html +22 -0
- package/dist/apps/prebuilt/com.eden.context-menu/index.html +22 -0
- package/dist/apps/prebuilt/com.eden.context-menu/manifest.json +29 -0
- package/dist/apps/prebuilt/com.eden.context-menu/package.json +15 -0
- package/dist/apps/prebuilt/com.eden.editor/dist/assets/{editor.main-DAsyVptA.js → editor.main-ABqnr99W.js} +3 -3
- package/dist/apps/prebuilt/com.eden.editor/dist/assets/{html-CTBLac3N.js → html-D6jh0yEa.js} +1 -1
- package/dist/apps/prebuilt/com.eden.editor/dist/assets/index-DAFnO6GB.js +2 -0
- package/dist/apps/prebuilt/com.eden.editor/dist/assets/index-eIZ8vGeP.css +1 -0
- package/dist/apps/prebuilt/com.eden.editor/dist/assets/{javascript-DJ6Ya8pi.js → javascript-NUFioPTH.js} +1 -1
- package/dist/apps/prebuilt/com.eden.editor/dist/assets/{jsonMode-BA0kYRDI.js → jsonMode-BprisSQ5.js} +1 -1
- package/dist/apps/prebuilt/com.eden.editor/dist/assets/{typescript-C7BsmV0J.js → typescript-qUrrOs_e.js} +1 -1
- package/dist/apps/prebuilt/com.eden.editor/dist/assets/{yaml-QL02lm_B.js → yaml-Xk-V_ilV.js} +1 -1
- package/dist/apps/prebuilt/com.eden.editor/dist/index.html +2 -2
- package/dist/apps/prebuilt/com.eden.editor/manifest.json +4 -1
- package/dist/apps/prebuilt/com.eden.editor/package.json +2 -0
- package/dist/apps/prebuilt/com.eden.eveshell/dist/assets/index-BpW2uLSC.css +1 -0
- package/dist/apps/prebuilt/com.eden.eveshell/dist/assets/index-CEfffVHu.js +1 -0
- package/dist/apps/prebuilt/com.eden.eveshell/dist/index.html +2 -2
- package/dist/apps/prebuilt/com.eden.eveshell/manifest.json +1 -1
- package/dist/apps/prebuilt/com.eden.eveshell/package.json +3 -3
- package/dist/apps/prebuilt/com.eden.example.appbus.client-a/app.js +106 -94
- package/dist/apps/prebuilt/com.eden.example.appbus.client-a/manifest.json +1 -4
- package/dist/apps/prebuilt/com.eden.example.appbus.client-b/app.js +52 -47
- package/dist/apps/prebuilt/com.eden.example.appbus.client-b/manifest.json +1 -4
- package/dist/apps/prebuilt/com.eden.example.appbus.hub/backend.js +81 -71
- package/dist/apps/prebuilt/com.eden.example.appbus.hub/manifest.json +1 -4
- package/dist/apps/prebuilt/com.eden.example.appbus.isolated/app.js +42 -40
- package/dist/apps/prebuilt/com.eden.example.appbus.isolated/manifest.json +1 -4
- package/dist/apps/prebuilt/com.eden.example.hello/README.md +12 -1
- package/dist/apps/prebuilt/com.eden.example.hello/backend/dist/backend.js +9 -1
- package/dist/apps/prebuilt/com.eden.example.hello/backend/node_modules/.bin/tsc +2 -2
- package/dist/apps/prebuilt/com.eden.example.hello/backend/node_modules/.bin/tsserver +2 -2
- package/dist/apps/prebuilt/com.eden.example.hello/backend/node_modules/@edenapp/types/AppManifest.d.ts +98 -10
- package/dist/apps/prebuilt/com.eden.example.hello/backend/node_modules/@edenapp/types/CHANGELOG.md +15 -0
- package/dist/apps/prebuilt/com.eden.example.hello/backend/node_modules/@edenapp/types/ContextMenu.d.ts +186 -0
- package/dist/apps/prebuilt/com.eden.example.hello/backend/node_modules/@edenapp/types/EdenConfig.d.ts +10 -2
- package/dist/apps/prebuilt/com.eden.example.hello/backend/node_modules/@edenapp/types/EdenSeedConfig.d.ts +24 -0
- package/dist/apps/prebuilt/com.eden.example.hello/backend/node_modules/@edenapp/types/User.d.ts +20 -0
- package/dist/apps/prebuilt/com.eden.example.hello/backend/node_modules/@edenapp/types/commands.generated.d.ts +231 -23
- package/dist/apps/prebuilt/com.eden.example.hello/backend/node_modules/@edenapp/types/events.generated.d.ts +38 -4
- package/dist/apps/prebuilt/com.eden.example.hello/backend/node_modules/@edenapp/types/global.d.ts +2 -0
- package/dist/apps/prebuilt/com.eden.example.hello/backend/node_modules/@edenapp/types/index.d.ts +16 -0
- package/dist/apps/prebuilt/com.eden.example.hello/backend/node_modules/@edenapp/types/ipc/appbus.d.ts +9 -9
- package/dist/apps/prebuilt/com.eden.example.hello/backend/node_modules/@edenapp/types/ipc/edenapi.d.ts +3 -3
- package/dist/apps/prebuilt/com.eden.example.hello/backend/node_modules/@edenapp/types/package.json +2 -2
- package/dist/apps/prebuilt/com.eden.example.hello/backend/package.json +1 -0
- package/dist/apps/prebuilt/com.eden.example.hello/backend/src/backend.ts +11 -1
- package/dist/apps/prebuilt/com.eden.example.hello/frontend/node_modules/.bin/tsc +2 -2
- package/dist/apps/prebuilt/com.eden.example.hello/frontend/node_modules/.bin/tsserver +2 -2
- package/dist/apps/prebuilt/com.eden.example.hello/frontend/node_modules/.bin/vite +2 -2
- package/dist/apps/prebuilt/com.eden.example.hello/frontend/node_modules/@edenapp/types/AppManifest.d.ts +98 -10
- package/dist/apps/prebuilt/com.eden.example.hello/frontend/node_modules/@edenapp/types/CHANGELOG.md +15 -0
- package/dist/apps/prebuilt/com.eden.example.hello/frontend/node_modules/@edenapp/types/ContextMenu.d.ts +186 -0
- package/dist/apps/prebuilt/com.eden.example.hello/frontend/node_modules/@edenapp/types/EdenConfig.d.ts +10 -2
- package/dist/apps/prebuilt/com.eden.example.hello/frontend/node_modules/@edenapp/types/EdenSeedConfig.d.ts +24 -0
- package/dist/apps/prebuilt/com.eden.example.hello/frontend/node_modules/@edenapp/types/User.d.ts +20 -0
- package/dist/apps/prebuilt/com.eden.example.hello/frontend/node_modules/@edenapp/types/commands.generated.d.ts +231 -23
- package/dist/apps/prebuilt/com.eden.example.hello/frontend/node_modules/@edenapp/types/events.generated.d.ts +38 -4
- package/dist/apps/prebuilt/com.eden.example.hello/frontend/node_modules/@edenapp/types/global.d.ts +2 -0
- package/dist/apps/prebuilt/com.eden.example.hello/frontend/node_modules/@edenapp/types/index.d.ts +16 -0
- package/dist/apps/prebuilt/com.eden.example.hello/frontend/node_modules/@edenapp/types/ipc/appbus.d.ts +9 -9
- package/dist/apps/prebuilt/com.eden.example.hello/frontend/node_modules/@edenapp/types/ipc/edenapi.d.ts +3 -3
- package/dist/apps/prebuilt/com.eden.example.hello/frontend/node_modules/@edenapp/types/package.json +2 -2
- package/dist/apps/prebuilt/com.eden.example.hello/frontend/node_modules/vite/node_modules/.bin/esbuild +2 -2
- package/dist/apps/prebuilt/com.eden.example.hello/frontend/node_modules/vite/node_modules/.bin/rollup +2 -2
- package/dist/apps/prebuilt/com.eden.example.hello/frontend/node_modules/vite/node_modules/.bin/yaml +21 -0
- package/dist/apps/prebuilt/com.eden.example.hello/frontend/package.json +1 -0
- package/dist/apps/prebuilt/com.eden.example.hello/frontend/src/App.ts +3 -3
- package/dist/apps/prebuilt/com.eden.example.hello/frontend/styles.css +1 -2
- package/dist/apps/prebuilt/com.eden.example.hello/frontend/vite.config.mts +2 -2
- package/dist/apps/prebuilt/com.eden.example.hello/manifest.json +7 -4
- package/dist/apps/prebuilt/com.eden.example.showcase/app.js +70 -67
- package/dist/apps/prebuilt/com.eden.example.showcase/index.html +4 -19
- package/dist/apps/prebuilt/com.eden.example.showcase/styles.css +8 -5
- package/dist/apps/prebuilt/com.eden.files/dist/assets/index-CoRuEUrw.js +1 -0
- package/dist/apps/prebuilt/com.eden.files/dist/assets/index-DdZETXB-.css +1 -0
- package/dist/apps/prebuilt/com.eden.files/dist/index.html +2 -2
- package/dist/apps/prebuilt/com.eden.files/manifest.json +4 -1
- package/dist/apps/prebuilt/com.eden.files/package.json +4 -2
- package/dist/apps/prebuilt/com.eden.installer/dist/assets/index-C0CX3XJo.css +1 -0
- package/dist/apps/prebuilt/com.eden.installer/dist/assets/index-SmzSXaXF.js +1 -0
- package/dist/apps/prebuilt/com.eden.installer/dist/index.html +2 -2
- package/dist/apps/prebuilt/com.eden.installer/icon.svg +34 -0
- package/dist/apps/prebuilt/com.eden.installer/manifest.json +6 -5
- package/dist/apps/prebuilt/com.eden.installer/package.json +2 -1
- package/dist/apps/prebuilt/com.eden.login/dist/assets/index-AGh8-3Ui.css +1 -0
- package/dist/apps/prebuilt/com.eden.login/dist/assets/index-DyI95N2f.js +1 -0
- package/dist/apps/prebuilt/com.eden.login/dist/index.html +13 -0
- package/dist/apps/prebuilt/com.eden.login/index.html +12 -0
- package/dist/apps/prebuilt/com.eden.login/manifest.json +33 -0
- package/dist/apps/prebuilt/com.eden.login/package.json +19 -0
- package/dist/apps/prebuilt/com.eden.settings/dist/assets/index-CHDYDKgf.js +1 -0
- package/dist/apps/prebuilt/com.eden.settings/dist/assets/index-Cx4mEI9R.css +1 -0
- package/dist/apps/prebuilt/com.eden.settings/dist/index.html +2 -2
- package/dist/apps/prebuilt/com.eden.settings/manifest.json +9 -2
- package/dist/apps/prebuilt/com.eden.settings/package.json +1 -0
- package/dist/apps/prebuilt/com.eden.toaster/manifest.json +1 -1
- package/dist/apps/prebuilt/com.eden.toaster/package.json +1 -1
- package/dist/apps/prebuilt/com.eden.users/dist/assets/index-CmyGIH5F.js +3 -0
- package/dist/apps/prebuilt/com.eden.users/dist/assets/index-cvRxUY_n.css +1 -0
- package/dist/apps/prebuilt/com.eden.users/dist/index.html +13 -0
- package/dist/apps/prebuilt/com.eden.users/icon.svg +24 -0
- package/dist/apps/prebuilt/com.eden.users/index.html +12 -0
- package/dist/apps/prebuilt/com.eden.users/manifest.json +31 -0
- package/dist/apps/prebuilt/com.eden.users/package.json +22 -0
- package/dist/apps/prebuilt/com.eden.webbrowser/dist/index.html +138 -0
- package/dist/apps/prebuilt/com.eden.webbrowser/index.html +13 -16
- package/dist/apps/prebuilt/com.eden.webbrowser/manifest.json +4 -1
- package/dist/apps/prebuilt/com.eden.webbrowser/package.json +1 -0
- package/dist/context-menu/ContextMenuHandler.d.ts +31 -0
- package/dist/context-menu/ContextMenuHandler.d.ts.map +1 -0
- package/dist/context-menu/ContextMenuHandler.js +70 -0
- package/dist/context-menu/ContextMenuHandler.js.map +1 -0
- package/dist/context-menu/ContextMenuManager.d.ts +49 -0
- package/dist/context-menu/ContextMenuManager.d.ts.map +1 -0
- package/dist/context-menu/ContextMenuManager.js +180 -0
- package/dist/context-menu/ContextMenuManager.js.map +1 -0
- package/dist/context-menu/index.d.ts +3 -0
- package/dist/context-menu/index.d.ts.map +1 -0
- package/dist/context-menu/index.js +19 -0
- package/dist/context-menu/index.js.map +1 -0
- package/dist/db/DbManager.d.ts.map +1 -1
- package/dist/db/DbManager.js +8 -7
- package/dist/db/DbManager.js.map +1 -1
- package/dist/db/index.d.ts +1 -1
- package/dist/db/index.js +3 -3
- package/dist/edencss/eden-tokens.css +1 -1
- package/dist/edencss/eden.css +1 -1
- package/dist/file-open/FileOpenHandler.d.ts +2 -2
- package/dist/file-open/FileOpenHandler.d.ts.map +1 -1
- package/dist/file-open/FileOpenHandler.js +1 -2
- package/dist/file-open/FileOpenHandler.js.map +1 -1
- package/dist/file-open/FileOpenManager.d.ts +7 -3
- package/dist/file-open/FileOpenManager.d.ts.map +1 -1
- package/dist/file-open/FileOpenManager.js +17 -7
- package/dist/file-open/FileOpenManager.js.map +1 -1
- package/dist/file-open/index.d.ts +1 -1
- package/dist/file-open/index.js +3 -3
- package/dist/filesystem/FilesystemHandler.d.ts +1 -1
- package/dist/filesystem/FilesystemHandler.d.ts.map +1 -1
- package/dist/filesystem/FilesystemHandler.js.map +1 -1
- package/dist/filesystem/FilesystemManager.d.ts +1 -1
- package/dist/filesystem/FilesystemManager.d.ts.map +1 -1
- package/dist/filesystem/FilesystemManager.js +5 -4
- package/dist/filesystem/FilesystemManager.js.map +1 -1
- package/dist/foundation/foundation-preload.js +73 -7
- package/dist/foundation/foundation.css +69 -26
- package/dist/foundation/foundation.html +1 -1
- package/dist/foundation/foundation.js +165 -54
- package/dist/generated/runtime.d.ts +1 -1
- package/dist/generated/runtime.d.ts.map +1 -1
- package/dist/generated/runtime.js +30 -1
- package/dist/generated/runtime.js.map +1 -1
- package/dist/grants/GrantPresetList.d.ts +12 -0
- package/dist/grants/GrantPresetList.d.ts.map +1 -0
- package/dist/grants/GrantPresetList.js +22 -0
- package/dist/grants/GrantPresetList.js.map +1 -0
- package/dist/grants/GrantPresets.d.ts +15 -0
- package/dist/grants/GrantPresets.d.ts.map +1 -0
- package/dist/grants/GrantPresets.js +60 -0
- package/dist/grants/GrantPresets.js.map +1 -0
- package/dist/grants/GrantPresets.test.d.ts +2 -0
- package/dist/grants/GrantPresets.test.d.ts.map +1 -0
- package/dist/grants/GrantPresets.test.js +63 -0
- package/dist/grants/GrantPresets.test.js.map +1 -0
- package/dist/hotreload-config.js +3 -3
- package/dist/i18n/I18nHandler.d.ts +14 -0
- package/dist/i18n/I18nHandler.d.ts.map +1 -0
- package/dist/i18n/I18nHandler.js +44 -0
- package/dist/i18n/I18nHandler.js.map +1 -0
- package/dist/i18n/I18nManager.d.ts +18 -0
- package/dist/i18n/I18nManager.d.ts.map +1 -0
- package/dist/i18n/I18nManager.js +65 -0
- package/dist/i18n/I18nManager.js.map +1 -0
- package/dist/i18n/locales/en.d.ts +27 -0
- package/dist/i18n/locales/en.d.ts.map +1 -0
- package/dist/i18n/locales/en.js +30 -0
- package/dist/i18n/locales/en.js.map +1 -0
- package/dist/i18n/locales/pl.d.ts +27 -0
- package/dist/i18n/locales/pl.d.ts.map +1 -0
- package/dist/i18n/locales/pl.js +30 -0
- package/dist/i18n/locales/pl.js.map +1 -0
- package/dist/index.d.ts +7 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -7
- package/dist/index.js.map +1 -1
- package/dist/ipc/CommandDecorators.d.ts +8 -2
- package/dist/ipc/CommandDecorators.d.ts.map +1 -1
- package/dist/ipc/CommandDecorators.js +12 -8
- package/dist/ipc/CommandDecorators.js.map +1 -1
- package/dist/ipc/CommandDecorators.test.d.ts +2 -0
- package/dist/ipc/CommandDecorators.test.d.ts.map +1 -0
- package/dist/ipc/CommandDecorators.test.js +41 -0
- package/dist/ipc/CommandDecorators.test.js.map +1 -0
- package/dist/ipc/CommandMetadata.d.ts +17 -0
- package/dist/ipc/CommandMetadata.d.ts.map +1 -0
- package/dist/ipc/CommandMetadata.js +45 -0
- package/dist/ipc/CommandMetadata.js.map +1 -0
- package/dist/ipc/CommandMetadata.test.d.ts +2 -0
- package/dist/ipc/CommandMetadata.test.d.ts.map +1 -0
- package/dist/ipc/CommandMetadata.test.js +35 -0
- package/dist/ipc/CommandMetadata.test.js.map +1 -0
- package/dist/ipc/CommandRegistry.d.ts +4 -16
- package/dist/ipc/CommandRegistry.d.ts.map +1 -1
- package/dist/ipc/CommandRegistry.js +33 -59
- package/dist/ipc/CommandRegistry.js.map +1 -1
- package/dist/ipc/CommandRegistry.test.d.ts +2 -0
- package/dist/ipc/CommandRegistry.test.d.ts.map +1 -0
- package/dist/ipc/CommandRegistry.test.js +92 -0
- package/dist/ipc/CommandRegistry.test.js.map +1 -0
- package/dist/ipc/EdenEmitter.d.ts +1 -1
- package/dist/ipc/EdenEmitter.d.ts.map +1 -1
- package/dist/ipc/EdenEmitter.js.map +1 -1
- package/dist/ipc/EdenEmitter.test.d.ts +2 -0
- package/dist/ipc/EdenEmitter.test.d.ts.map +1 -0
- package/dist/ipc/EdenEmitter.test.js +47 -0
- package/dist/ipc/EdenEmitter.test.js.map +1 -0
- package/dist/ipc/EventHandler.d.ts +4 -2
- package/dist/ipc/EventHandler.d.ts.map +1 -1
- package/dist/ipc/EventHandler.js +12 -9
- package/dist/ipc/EventHandler.js.map +1 -1
- package/dist/ipc/EventSubscriberManager.d.ts +13 -4
- package/dist/ipc/EventSubscriberManager.d.ts.map +1 -1
- package/dist/ipc/EventSubscriberManager.js +37 -7
- package/dist/ipc/EventSubscriberManager.js.map +1 -1
- package/dist/ipc/EventSubscriberManager.test.d.ts +2 -0
- package/dist/ipc/EventSubscriberManager.test.d.ts.map +1 -0
- package/dist/ipc/EventSubscriberManager.test.js +113 -0
- package/dist/ipc/EventSubscriberManager.test.js.map +1 -0
- package/dist/ipc/IPCBridge.d.ts +1 -1
- package/dist/ipc/IPCBridge.d.ts.map +1 -1
- package/dist/ipc/IPCBridge.js +15 -7
- package/dist/ipc/IPCBridge.js.map +1 -1
- package/dist/ipc/PermissionRegistry.d.ts +19 -13
- package/dist/ipc/PermissionRegistry.d.ts.map +1 -1
- package/dist/ipc/PermissionRegistry.js +66 -51
- package/dist/ipc/PermissionRegistry.js.map +1 -1
- package/dist/ipc/PermissionRegistry.test.d.ts +2 -0
- package/dist/ipc/PermissionRegistry.test.d.ts.map +1 -0
- package/dist/ipc/PermissionRegistry.test.js +69 -0
- package/dist/ipc/PermissionRegistry.test.js.map +1 -0
- package/dist/ipc/index.d.ts +1 -0
- package/dist/ipc/index.d.ts.map +1 -1
- package/dist/ipc/index.js +1 -0
- package/dist/ipc/index.js.map +1 -1
- package/dist/logging/electron.d.ts +4 -0
- package/dist/logging/electron.d.ts.map +1 -0
- package/dist/logging/electron.js +66 -0
- package/dist/logging/electron.js.map +1 -0
- package/dist/logging/index.d.ts +4 -0
- package/dist/logging/index.d.ts.map +1 -0
- package/dist/logging/index.js +11 -0
- package/dist/logging/index.js.map +1 -0
- package/dist/logging/levels.d.ts +5 -0
- package/dist/logging/levels.d.ts.map +1 -0
- package/dist/logging/levels.js +26 -0
- package/dist/logging/levels.js.map +1 -0
- package/dist/logging/logger.d.ts +48 -0
- package/dist/logging/logger.d.ts.map +1 -0
- package/dist/logging/logger.js +256 -0
- package/dist/logging/logger.js.map +1 -0
- package/dist/notification/NotificationHandler.d.ts +1 -1
- package/dist/notification/NotificationHandler.d.ts.map +1 -1
- package/dist/notification/NotificationHandler.js +1 -2
- package/dist/notification/NotificationHandler.js.map +1 -1
- package/dist/notification/NotificationManager.d.ts +2 -2
- package/dist/notification/NotificationManager.d.ts.map +1 -1
- package/dist/notification/NotificationManager.js +3 -2
- package/dist/notification/NotificationManager.js.map +1 -1
- package/dist/notification/index.d.ts +1 -1
- package/dist/notification/index.js +1 -1
- package/dist/package-manager/PackageHandler.d.ts +15 -5
- package/dist/package-manager/PackageHandler.d.ts.map +1 -1
- package/dist/package-manager/PackageHandler.js +32 -14
- package/dist/package-manager/PackageHandler.js.map +1 -1
- package/dist/package-manager/PackageManager.d.ts +29 -12
- package/dist/package-manager/PackageManager.d.ts.map +1 -1
- package/dist/package-manager/PackageManager.js +130 -75
- package/dist/package-manager/PackageManager.js.map +1 -1
- package/dist/package-manager/index.d.ts +1 -1
- package/dist/package-manager/index.js +3 -3
- package/dist/process-manager/AutostartManager.d.ts +17 -6
- package/dist/process-manager/AutostartManager.d.ts.map +1 -1
- package/dist/process-manager/AutostartManager.js +114 -16
- package/dist/process-manager/AutostartManager.js.map +1 -1
- package/dist/process-manager/BackendManager.d.ts +3 -3
- package/dist/process-manager/BackendManager.d.ts.map +1 -1
- package/dist/process-manager/BackendManager.js +14 -13
- package/dist/process-manager/BackendManager.js.map +1 -1
- package/dist/process-manager/ProcessHandler.d.ts +2 -2
- package/dist/process-manager/ProcessHandler.d.ts.map +1 -1
- package/dist/process-manager/ProcessHandler.js +1 -2
- package/dist/process-manager/ProcessHandler.js.map +1 -1
- package/dist/process-manager/ProcessManager.d.ts +12 -8
- package/dist/process-manager/ProcessManager.d.ts.map +1 -1
- package/dist/process-manager/ProcessManager.js +58 -27
- package/dist/process-manager/ProcessManager.js.map +1 -1
- package/dist/process-manager/index.d.ts +3 -3
- package/dist/process-manager/index.d.ts.map +1 -1
- package/dist/process-manager/index.js +7 -7
- package/dist/process-manager/index.js.map +1 -1
- package/dist/seed/SeedLoader.d.ts +8 -0
- package/dist/seed/SeedLoader.d.ts.map +1 -0
- package/dist/seed/SeedLoader.js +179 -0
- package/dist/seed/SeedLoader.js.map +1 -0
- package/dist/seed/index.d.ts +2 -0
- package/dist/seed/index.d.ts.map +1 -0
- package/dist/seed/index.js +6 -0
- package/dist/seed/index.js.map +1 -0
- package/dist/settings/EdenSettings.d.ts +1 -1
- package/dist/settings/EdenSettings.d.ts.map +1 -1
- package/dist/settings/EdenSettings.js +69 -115
- package/dist/settings/EdenSettings.js.map +1 -1
- package/dist/settings/SettingsHandler.d.ts +9 -7
- package/dist/settings/SettingsHandler.d.ts.map +1 -1
- package/dist/settings/SettingsHandler.js +18 -25
- package/dist/settings/SettingsHandler.js.map +1 -1
- package/dist/settings/SettingsManager.d.ts +33 -6
- package/dist/settings/SettingsManager.d.ts.map +1 -1
- package/dist/settings/SettingsManager.js +109 -26
- package/dist/settings/SettingsManager.js.map +1 -1
- package/dist/settings/index.d.ts +2 -2
- package/dist/settings/index.d.ts.map +1 -1
- package/dist/settings/index.js +6 -6
- package/dist/settings/index.js.map +1 -1
- package/dist/user/UserAuth.d.ts +6 -0
- package/dist/user/UserAuth.d.ts.map +1 -0
- package/dist/user/UserAuth.js +21 -0
- package/dist/user/UserAuth.js.map +1 -0
- package/dist/user/UserAuth.test.d.ts +2 -0
- package/dist/user/UserAuth.test.d.ts.map +1 -0
- package/dist/user/UserAuth.test.js +27 -0
- package/dist/user/UserAuth.test.js.map +1 -0
- package/dist/user/UserGrants.d.ts +5 -0
- package/dist/user/UserGrants.d.ts.map +1 -0
- package/dist/user/UserGrants.js +42 -0
- package/dist/user/UserGrants.js.map +1 -0
- package/dist/user/UserGrants.test.d.ts +2 -0
- package/dist/user/UserGrants.test.d.ts.map +1 -0
- package/dist/user/UserGrants.test.js +23 -0
- package/dist/user/UserGrants.test.js.map +1 -0
- package/dist/user/UserHandler.d.ts +109 -0
- package/dist/user/UserHandler.d.ts.map +1 -0
- package/dist/user/UserHandler.js +206 -0
- package/dist/user/UserHandler.js.map +1 -0
- package/dist/user/UserManager.d.ts +62 -0
- package/dist/user/UserManager.d.ts.map +1 -0
- package/dist/user/UserManager.js +292 -0
- package/dist/user/UserManager.js.map +1 -0
- package/dist/user/UserStore.d.ts +15 -0
- package/dist/user/UserStore.d.ts.map +1 -0
- package/dist/user/UserStore.js +119 -0
- package/dist/user/UserStore.js.map +1 -0
- package/dist/user/UserTypes.d.ts +6 -0
- package/dist/user/UserTypes.d.ts.map +1 -0
- package/dist/user/UserTypes.js +3 -0
- package/dist/user/UserTypes.js.map +1 -0
- package/dist/user/index.d.ts +2 -0
- package/dist/user/index.d.ts.map +1 -0
- package/dist/user/index.js +6 -0
- package/dist/user/index.js.map +1 -0
- package/dist/utils/cachedFileReader.d.ts.map +1 -1
- package/dist/utils/cachedFileReader.js +4 -4
- package/dist/utils/cachedFileReader.js.map +1 -1
- package/dist/utils/cachedFileReader.test.d.ts +2 -0
- package/dist/utils/cachedFileReader.test.d.ts.map +1 -0
- package/dist/utils/cachedFileReader.test.js +48 -0
- package/dist/utils/cachedFileReader.test.js.map +1 -0
- package/dist/utils/normalize.d.ts +6 -0
- package/dist/utils/normalize.d.ts.map +1 -0
- package/dist/utils/normalize.js +15 -0
- package/dist/utils/normalize.js.map +1 -0
- package/dist/utils/normalize.test.d.ts +2 -0
- package/dist/utils/normalize.test.d.ts.map +1 -0
- package/dist/utils/normalize.test.js +21 -0
- package/dist/utils/normalize.test.js.map +1 -0
- package/dist/view-manager/DevToolsController.d.ts +29 -0
- package/dist/view-manager/DevToolsController.d.ts.map +1 -0
- package/dist/view-manager/DevToolsController.js +78 -0
- package/dist/view-manager/DevToolsController.js.map +1 -0
- package/dist/view-manager/FloatingWindowController.d.ts +3 -3
- package/dist/view-manager/FloatingWindowController.d.ts.map +1 -1
- package/dist/view-manager/FloatingWindowController.js +1 -1
- package/dist/view-manager/FloatingWindowController.js.map +1 -1
- package/dist/view-manager/MouseTracker.d.ts.map +1 -1
- package/dist/view-manager/MouseTracker.js +2 -1
- package/dist/view-manager/MouseTracker.js.map +1 -1
- package/dist/view-manager/ScaleController.d.ts +40 -0
- package/dist/view-manager/ScaleController.d.ts.map +1 -0
- package/dist/view-manager/ScaleController.js +99 -0
- package/dist/view-manager/ScaleController.js.map +1 -0
- package/dist/view-manager/TilingController.d.ts +76 -0
- package/dist/view-manager/TilingController.d.ts.map +1 -0
- package/dist/view-manager/TilingController.js +210 -0
- package/dist/view-manager/TilingController.js.map +1 -0
- package/dist/view-manager/ViewCreator.d.ts +8 -10
- package/dist/view-manager/ViewCreator.d.ts.map +1 -1
- package/dist/view-manager/ViewCreator.js +29 -32
- package/dist/view-manager/ViewCreator.js.map +1 -1
- package/dist/view-manager/ViewHandler.d.ts +18 -3
- package/dist/view-manager/ViewHandler.d.ts.map +1 -1
- package/dist/view-manager/ViewHandler.js +38 -4
- package/dist/view-manager/ViewHandler.js.map +1 -1
- package/dist/view-manager/ViewManager.d.ts +28 -7
- package/dist/view-manager/ViewManager.d.ts.map +1 -1
- package/dist/view-manager/ViewManager.js +124 -50
- package/dist/view-manager/ViewManager.js.map +1 -1
- package/dist/view-manager/index.d.ts +0 -9
- package/dist/view-manager/index.d.ts.map +1 -1
- package/dist/view-manager/index.js +1 -18
- package/dist/view-manager/index.js.map +1 -1
- package/dist/view-manager/layoutCalculator.d.ts +17 -0
- package/dist/view-manager/layoutCalculator.d.ts.map +1 -0
- package/dist/view-manager/layoutCalculator.js +65 -0
- package/dist/view-manager/layoutCalculator.js.map +1 -0
- package/dist/view-manager/layoutCalculator.test.d.ts +2 -0
- package/dist/view-manager/layoutCalculator.test.d.ts.map +1 -0
- package/dist/view-manager/layoutCalculator.test.js +69 -0
- package/dist/view-manager/layoutCalculator.test.js.map +1 -0
- package/dist/view-manager/types.d.ts +9 -2
- package/dist/view-manager/types.d.ts.map +1 -1
- package/dist/view-manager/viewLifecycle.d.ts +41 -0
- package/dist/view-manager/viewLifecycle.d.ts.map +1 -0
- package/dist/view-manager/viewLifecycle.js +132 -0
- package/dist/view-manager/viewLifecycle.js.map +1 -0
- package/edencss/README.md +1 -7
- package/edencss/components/avatar.css +88 -0
- package/edencss/components/badges.css +13 -12
- package/edencss/components/buttons.css +11 -3
- package/edencss/components/cards.css +6 -7
- package/edencss/components/lists.css +11 -83
- package/edencss/components/modals.css +24 -21
- package/edencss/components/progress.css +20 -8
- package/edencss/components/tabs.css +11 -7
- package/edencss/eden.css +1 -0
- package/edencss/style-dictionary.config.mjs +34 -34
- package/edencss/tokens.css +2 -2
- package/edencss/tokens.json +3 -3
- package/edencss/tokens.ts +2 -4
- package/edencss/utilities.css +15 -3
- package/foundation/foundation-preload.js +73 -7
- package/foundation/foundation.css +69 -26
- package/foundation/foundation.html +1 -1
- package/foundation/foundation.js +165 -54
- package/package.json +11 -7
- package/dist/apps/prebuilt/com.eden.editor/dist/assets/index-B7GgDQ9I.css +0 -1
- package/dist/apps/prebuilt/com.eden.editor/dist/assets/index-BWJI9cyM.js +0 -2
- package/dist/apps/prebuilt/com.eden.eveshell/dist/assets/index-BS2yCXxK.css +0 -1
- package/dist/apps/prebuilt/com.eden.eveshell/dist/assets/index-De0NEh_d.js +0 -1
- package/dist/apps/prebuilt/com.eden.example.calculator/.dev-manifest.json +0 -5
- package/dist/apps/prebuilt/com.eden.example.calculator/app.js +0 -95
- package/dist/apps/prebuilt/com.eden.example.calculator/index.html +0 -39
- package/dist/apps/prebuilt/com.eden.example.calculator/manifest.json +0 -30
- package/dist/apps/prebuilt/com.eden.example.calculator/styles.css +0 -83
- package/dist/apps/prebuilt/com.eden.files/.dev-manifest.json +0 -5
- package/dist/apps/prebuilt/com.eden.files/dist/assets/index-BOw4ESi3.js +0 -1
- package/dist/apps/prebuilt/com.eden.files/dist/assets/index-BPH5FvSW.css +0 -1
- package/dist/apps/prebuilt/com.eden.installer/dist/assets/index-CKYMyu3p.js +0 -1
- package/dist/apps/prebuilt/com.eden.installer/dist/assets/index-CgTLLNqG.css +0 -1
- package/dist/apps/prebuilt/com.eden.settings/dist/assets/index-352-RdGP.js +0 -1
- package/dist/apps/prebuilt/com.eden.settings/dist/assets/index-DY6ouI17.css +0 -1
- package/dist/apps/prebuilt/com.eden.webbrowser/.dev-manifest.json +0 -5
- /package/dist/apps/prebuilt/{com.eden.example.calculator → com.eden.calculator}/icon.svg +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../src/app-frame/
|
|
4
|
-
"sourcesContent": ["/**\n * App Frame UI Builder\n * \n * Functions for creating and managing the app frame overlay UI\n */\n\n/**\n * Create the app frame overlay element\n * @param windowConfig - Window configuration from manifest\n * @returns The overlay element\n */\nexport function createOverlay(windowConfig: NonNullable<Window['edenFrame']>['_internal']['config']): HTMLElement {\n const overlay = document.createElement('div');\n overlay.id = 'eden-app-frame-overlay';\n\n const supportsToggle = windowConfig.mode === 'both';\n const showTitle = windowConfig.showTitle !== false; // Default to true if not specified\n\n // Create toggle button HTML if supported\n const toggleButtonHtml = supportsToggle\n ? `<button class=\"eden-app-frame-button toggle-mode\" id=\"eden-toggle-mode-btn\" title=\"Toggle Window Mode\">\u229E</button>`\n : '';\n\n // Create title HTML if showTitle is true\n const titleHtml = showTitle\n ? `<div id=\"eden-app-frame-title\">App</div>`\n : '';\n\n overlay.innerHTML = `\n ${titleHtml}\n <div id=\"eden-app-frame-controls\">\n ${toggleButtonHtml}\n <button class=\"eden-app-frame-button minimize\" id=\"eden-minimize-btn\" title=\"Minimize\">\u2212</button>\n <button class=\"eden-app-frame-button close\" id=\"eden-close-btn\" title=\"Close\">\u00D7</button>\n </div>\n `;\n\n return overlay;\n}\n\n/**\n * Inject the overlay into the DOM when ready\n * @param overlay - The overlay element to inject\n * @param callback - Called after injection\n */\nexport function injectOverlay(overlay: HTMLElement, callback?: () => void): void {\n const inject = () => {\n console.log('[Eden Frame] injectOverlay called, body exists:', !!document.body);\n if (document.body) {\n document.body.insertBefore(overlay, document.body.firstChild);\n document.body.classList.add('eden-framed');\n console.log('[Eden Frame] Overlay injected into body');\n\n if (callback) {\n callback();\n }\n } else {\n console.log('[Eden Frame] Body not ready, retrying...');\n setTimeout(inject, 10);\n }\n };\n\n // Inject when DOM is ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', inject);\n } else {\n inject();\n }\n}\n\n/**\n * Setup dark mode detection and updates\n * @param overlay - The overlay element\n */\nexport function setupDarkMode(overlay: HTMLElement): void {\n const prefersDark = window.matchMedia('(prefers-color-scheme: dark)');\n\n const updateTheme = (e: MediaQueryListEvent | MediaQueryList) => {\n if (e.matches) {\n overlay.classList.add('dark');\n } else {\n overlay.classList.remove('dark');\n }\n };\n\n updateTheme(prefersDark);\n prefersDark.addEventListener('change', updateTheme);\n}\n\n/**\n * Set the title bar text\n * @param title - The title to display\n */\nexport function setTitle(title: string): void {\n const titleEl = document.getElementById('eden-app-frame-title');\n if (titleEl) {\n titleEl.textContent = title;\n }\n}\n\n/**\n * Extract a readable name from app ID\n * @param appId - The app ID (e.g., 'com.example.myapp')\n * @returns Readable name (e.g., 'Myapp')\n */\nexport function getAppName(appId: string): string {\n const parts = appId.split('.');\n const name = parts[parts.length - 1] || appId;\n // Capitalize first letter\n return name.charAt(0).toUpperCase() + name.slice(1);\n}\n", "/**\n * App Frame Button Handlers\n *\n * Event handlers for frame control buttons (close, minimize, toggle mode)\n */\n\n/**\n * Setup close button handler\n */\nexport function setupCloseButton(): void {\n const closeBtn = document.getElementById(\"eden-close-btn\");\n if (!closeBtn) return;\n\n closeBtn.addEventListener(\"click\", () => {\n // Wait for edenFrame to be available\n const stopApp = () => {\n const appId = window.edenFrame?._internal.appId;\n console.log(\"[Eden Frame] Stopping app:\", appId);\n\n if (appId) {\n window.edenAPI\n .shellCommand(\"process/stop\", { appId })\n .catch(console.error);\n } else {\n // Retry if API or appId not yet available\n setTimeout(stopApp, 100);\n }\n };\n stopApp();\n });\n}\n\n/**\n * Setup minimize button handler\n */\nexport function setupMinimizeButton(): void {\n const minBtn = document.getElementById(\"eden-minimize-btn\");\n if (!minBtn) return;\n\n minBtn.addEventListener(\"click\", () => {\n const minimize = () => {\n const appId = window.edenFrame?._internal.appId;\n\n if (appId) {\n window.edenAPI\n .shellCommand(\"view/set-view-visibility\", {\n appId,\n visible: false,\n })\n .catch(console.error);\n } else {\n setTimeout(minimize, 100);\n }\n };\n minimize();\n });\n}\n\n/**\n * Setup toggle mode button handler (for apps that support both tiled and floating)\n */\nexport function setupToggleModeButton(): void {\n const toggleBtn = document.getElementById(\"eden-toggle-mode-btn\");\n if (!toggleBtn) return;\n\n toggleBtn.addEventListener(\"click\", () => {\n const toggleMode = () => {\n const appId = window.edenFrame?._internal.appId;\n\n if (appId) {\n window.edenAPI\n .shellCommand(\"view/toggle-view-mode\", {\n appId,\n })\n .then(() => {\n console.log(\"[Eden Frame] View mode toggled\");\n })\n .catch(console.error);\n } else {\n setTimeout(toggleMode, 100);\n }\n };\n toggleMode();\n });\n}\n", "/**\n * App Frame Utilities\n *\n * Shared utility functions for the app frame\n */\n\n/**\n * Get screen coordinates from mouse or touch event\n * @param e - The event\n * @returns Screen coordinates\n */\nexport function getScreenCoords(e: MouseEvent | TouchEvent): {\n x: number;\n y: number;\n} {\n // For mouse events, use screenX/screenY directly\n if (\"screenX\" in e && e.screenX !== undefined && e.screenY !== undefined) {\n return { x: e.screenX, y: e.screenY };\n }\n\n // For touch events, calculate screen coordinates from client coordinates\n if (\"touches\" in e && e.touches && e.touches[0]) {\n const touch = e.touches[0];\n // Try touch.screenX/screenY first (if available)\n if (touch.screenX !== undefined && touch.screenY !== undefined) {\n return { x: touch.screenX, y: touch.screenY };\n }\n // Fallback: calculate from clientX/clientY + view bounds position\n // Use currentBounds which has the actual view position\n const currentBounds = window.edenFrame?._internal.bounds;\n if (currentBounds) {\n return {\n x: currentBounds.x + touch.clientX,\n y: currentBounds.y + touch.clientY,\n };\n }\n // Last resort: use window.screenX/screenY\n return {\n x: touch.clientX + (window.screenX || 0),\n y: touch.clientY + (window.screenY || 0),\n };\n }\n\n return { x: 0, y: 0 };\n}\n", "/**\n * Window Dragging\n *\n * Handles dragging for floating windows\n */\n\nimport { getScreenCoords } from \"./utils\";\n\n/**\n * Setup window dragging for floating windows\n * @param overlay - The title bar overlay element\n * @param currentBoundsRef - Reference object containing current bounds\n */\nexport function setupWindowDragging(\n overlay: HTMLElement,\n currentBoundsRef: {\n current: { x: number; y: number; width: number; height: number } | null;\n }\n): void {\n let isDragging = false;\n let startX = 0;\n let startY = 0;\n let dragStartBounds: {\n x: number;\n y: number;\n width: number;\n height: number;\n } | null = null;\n let isTouch = false;\n let rafId: number | null = null;\n let pendingBounds: {\n x: number;\n y: number;\n width: number;\n height: number;\n } | null = null;\n\n // Animation frame update function - throttles IPC to 60fps\n const updatePosition = () => {\n const appId = window.edenFrame?._internal.appId;\n if (pendingBounds && appId) {\n window.edenAPI\n .shellCommand(\"view/update-view-bounds\", {\n appId,\n bounds: pendingBounds,\n })\n .catch(console.error);\n\n pendingBounds = null;\n }\n\n if (isDragging) {\n rafId = requestAnimationFrame(updatePosition);\n }\n };\n\n const startDrag = (e: MouseEvent | TouchEvent) => {\n // Only drag on the title bar itself, not on buttons\n if ((e.target as HTMLElement).closest(\".eden-app-frame-button\")) {\n return;\n }\n\n console.log(\"[Eden Frame] startDrag called, event type:\", e.type);\n console.log(\n \"[Eden Frame] currentBounds before refresh:\",\n currentBoundsRef.current\n );\n\n // ALWAYS refresh currentBounds at start to handle case where mouse drag updated position\n const initialBounds = window.edenFrame?._internal.bounds;\n if (initialBounds && initialBounds.x !== undefined) {\n currentBoundsRef.current = { ...initialBounds };\n console.log(\n \"[Eden Frame] Refreshed currentBounds from edenFrame._internal.bounds:\",\n currentBoundsRef.current\n );\n } else if (!currentBoundsRef.current) {\n console.warn(\n \"[Eden Frame] Cannot start drag - currentBounds not initialized!\"\n );\n return;\n }\n\n isDragging = true;\n isTouch = e.type.startsWith(\"touch\");\n\n // Get screen coordinates\n const coords = getScreenCoords(e);\n startX = coords.x;\n startY = coords.y;\n dragStartBounds = { ...currentBoundsRef.current };\n\n console.log(\"[Eden Frame] Drag started at:\", coords, \"isTouch:\", isTouch);\n\n // IMPORTANT: Prevent default FIRST to stop touch from being canceled\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation();\n\n // Start animation frame loop for smooth updates\n if (isTouch) {\n rafId = requestAnimationFrame(updatePosition);\n }\n\n const appId = window.edenFrame?._internal.appId;\n\n // Bring window to front - but ONLY for mouse events\n // For touch, calling focus-app during the touch causes view reordering which triggers touchcancel\n // Touch users need to tap elsewhere to focus, then tap title bar to drag\n if (!isTouch && appId) {\n window.edenAPI\n .shellCommand(\"view/focus-app\", { appId })\n .catch(console.error);\n }\n\n // For mouse events, use global tracking in main process\n // For touch events, we'll handle updates in touchmove\n if (!isTouch && appId) {\n window.edenAPI\n .shellCommand(\"view/start-drag\", {\n appId,\n startX: coords.x,\n startY: coords.y,\n })\n .catch(console.error);\n }\n\n // Add mouseup listener when drag starts (removed when drag ends)\n if (!isTouch) {\n window.addEventListener(\"mouseup\", endDrag);\n }\n };\n\n const moveDrag = (e: MouseEvent | TouchEvent) => {\n // Prevent default immediately\n e.preventDefault();\n e.stopPropagation();\n\n if (!isDragging || !dragStartBounds) {\n return;\n }\n\n // Get current coordinates\n const coords = getScreenCoords(e);\n const deltaX = coords.x - startX;\n const deltaY = coords.y - startY;\n\n const newBounds = {\n x: dragStartBounds.x + deltaX,\n y: dragStartBounds.y + deltaY,\n width: dragStartBounds.width,\n height: dragStartBounds.height,\n };\n\n // Update tracked bounds immediately for next move calculation\n currentBoundsRef.current = newBounds;\n\n // Store pending update for next animation frame\n pendingBounds = newBounds;\n };\n\n const endDrag = (e: MouseEvent | TouchEvent) => {\n // For touch events, only end if there are no remaining touches\n if (\n e.type.startsWith(\"touch\") &&\n (e as TouchEvent).touches &&\n (e as TouchEvent).touches.length > 0\n ) {\n return;\n }\n\n if (!isDragging) {\n return;\n }\n\n console.log(\n \"[Eden Frame] Drag ended, final currentBounds:\",\n currentBoundsRef.current\n );\n isDragging = false;\n dragStartBounds = null;\n\n // Remove mouseup listener since drag is done\n window.removeEventListener(\"mouseup\", endDrag);\n\n const appId = window.edenFrame?._internal.appId;\n\n // Cancel animation frame and send final position\n if (rafId) {\n cancelAnimationFrame(rafId);\n rafId = null;\n\n // Send final pending bounds immediately\n if (pendingBounds && appId) {\n window.edenAPI\n .shellCommand(\"view/update-view-bounds\", {\n appId,\n bounds: pendingBounds,\n })\n .catch(console.error);\n\n // Update edenFrame._internal.bounds so next interaction starts from correct position\n window.edenFrame!._internal.bounds = { ...pendingBounds };\n pendingBounds = null;\n }\n }\n\n // For touch drag, ensure edenFrame._internal.bounds is updated with final position\n if (isTouch && currentBoundsRef.current) {\n window.edenFrame!._internal.bounds = { ...currentBoundsRef.current };\n console.log(\n \"[Eden Frame] Updated edenFrame._internal.bounds after touch drag:\",\n window.edenFrame?._internal.bounds\n );\n }\n\n // Stop global drag tracking in main process (for mouse events)\n if (!isTouch && appId) {\n window.edenAPI\n .shellCommand(\"view/end-drag\", { appId })\n .catch(console.error);\n }\n };\n\n // Mouse events\n overlay.addEventListener(\"mousedown\", startDrag);\n\n // Touch events - don't use capture for start, do use for move\n overlay.addEventListener(\"touchstart\", startDrag, { passive: false });\n\n // Move events for touch (mouse uses main process tracking)\n // Use capture for move to ensure we get it\n document.addEventListener(\"touchmove\", moveDrag as EventListener, {\n passive: false,\n capture: true,\n });\n\n // Touch end/cancel events (mouseup is added dynamically when drag starts)\n document.addEventListener(\"touchend\", endDrag, { passive: false });\n document.addEventListener(\"touchcancel\", endDrag, { passive: false });\n\n console.log(\"[Eden Frame] Drag event listeners registered\");\n}\n", "/**\n * Window Resizing\n *\n * Handles resizing for floating windows\n */\n\nimport { getScreenCoords } from \"./utils.js\";\n\ninterface Bounds {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\ninterface BoundsRef {\n current: Bounds | null;\n}\n\n/**\n * Setup window resizing for floating windows\n */\n/**\n * Setup window resizing for floating windows\n */\nexport function setupWindowResizing(\n windowConfig: NonNullable<Window[\"edenFrame\"]>[\"_internal\"][\"config\"],\n currentBoundsRef: BoundsRef\n): void {\n // Create resize handle in bottom-right corner\n const resizeHandle = document.createElement(\"div\");\n resizeHandle.id = \"eden-resize-handle\";\n resizeHandle.style.cssText = `\n position: fixed;\n bottom: 0;\n right: 0;\n width: 20px;\n height: 20px;\n cursor: nwse-resize;\n z-index: 2147483647;\n -webkit-app-region: no-drag;\n touch-action: none;\n `;\n\n document.body.appendChild(resizeHandle);\n\n let isResizing = false;\n let startX = 0;\n let startY = 0;\n let resizeStartBounds: Bounds | null = null;\n let isTouch = false;\n let rafId: number | null = null;\n let pendingBounds: Bounds | null = null;\n\n // Animation frame update function - throttles IPC to 60fps\n const updateResizePosition = () => {\n const appId = window.edenFrame?._internal.appId;\n if (pendingBounds && appId) {\n window.edenAPI\n .shellCommand(\"view/update-view-bounds\", {\n appId,\n bounds: pendingBounds,\n })\n .catch(console.error);\n\n pendingBounds = null;\n }\n\n if (isResizing) {\n rafId = requestAnimationFrame(updateResizePosition);\n }\n };\n\n const startResize = (e: MouseEvent | TouchEvent): void => {\n console.log(\"[Eden Frame] startResize called, event type:\", e.type);\n\n // Initialize current bounds if not set\n if (!currentBoundsRef.current) {\n const initialBounds = window.edenFrame?._internal.bounds;\n if (initialBounds && initialBounds.x !== undefined) {\n currentBoundsRef.current = { ...initialBounds };\n console.log(\n \"[Eden Frame] Initialized currentBounds from edenFrame._internal.bounds:\",\n currentBoundsRef.current\n );\n } else {\n console.warn(\n \"[Eden Frame] Cannot start resize - currentBounds not initialized!\"\n );\n return;\n }\n }\n\n isResizing = true;\n isTouch = e.type.startsWith(\"touch\");\n\n // Get screen coordinates\n const coords = getScreenCoords(e);\n startX = coords.x;\n startY = coords.y;\n resizeStartBounds = { ...currentBoundsRef.current };\n\n console.log(\"[Eden Frame] Resize started at:\", coords, \"isTouch:\", isTouch);\n\n e.preventDefault();\n e.stopPropagation();\n\n // Start animation frame loop for smooth updates\n if (isTouch) {\n rafId = requestAnimationFrame(updateResizePosition);\n }\n\n const appId = window.edenFrame?._internal.appId;\n\n // Bring window to front - but ONLY for mouse events\n // For touch, calling focus-app during the touch causes view reordering which triggers touchcancel\n // Touch users need to tap elsewhere to focus, then tap resize handle\n if (!isTouch && appId) {\n window.edenAPI\n .shellCommand(\"view/focus-app\", { appId })\n .catch(console.error);\n }\n\n // For mouse events, use global tracking in main process\n // For touch events, we'll handle updates in touchmove\n if (!isTouch && appId) {\n window.edenAPI\n .shellCommand(\"view/start-resize\", {\n appId,\n startX: coords.x,\n startY: coords.y,\n })\n .catch(console.error);\n }\n\n // Add mouseup listener when resize starts (removed when resize ends)\n if (!isTouch) {\n window.addEventListener(\"mouseup\", endResize);\n }\n };\n\n const moveResize = (e: MouseEvent | TouchEvent): void => {\n console.log(\n \"[Eden Frame] moveResize called, isResizing:\",\n isResizing,\n \"event type:\",\n e.type\n );\n\n e.preventDefault();\n e.stopPropagation();\n\n if (!isResizing || !resizeStartBounds) {\n console.log(\n \"[Eden Frame] moveResize returning early - isResizing:\",\n isResizing,\n \"resizeStartBounds:\",\n resizeStartBounds\n );\n return;\n }\n\n // Get current coordinates\n const coords = getScreenCoords(e);\n const deltaX = coords.x - startX;\n const deltaY = coords.y - startY;\n\n console.log(\"[Eden Frame] moveResize coords:\", coords, \"delta:\", {\n deltaX,\n deltaY,\n });\n\n let newWidth = resizeStartBounds.width + deltaX;\n let newHeight = resizeStartBounds.height + deltaY;\n\n // Apply min/max constraints\n if (windowConfig.minSize) {\n newWidth = Math.max(newWidth, windowConfig.minSize.width || 200);\n newHeight = Math.max(newHeight, windowConfig.minSize.height || 200);\n } else {\n newWidth = Math.max(newWidth, 200);\n newHeight = Math.max(newHeight, 200);\n }\n\n if (windowConfig.maxSize) {\n newWidth = Math.min(newWidth, windowConfig.maxSize.width || 2000);\n newHeight = Math.min(newHeight, windowConfig.maxSize.height || 2000);\n }\n\n const newBounds = {\n x: resizeStartBounds.x,\n y: resizeStartBounds.y,\n width: Math.round(newWidth),\n height: Math.round(newHeight),\n };\n\n console.log(\"[Eden Frame] moveResize newBounds:\", newBounds);\n\n // Update tracked bounds immediately for next move calculation\n currentBoundsRef.current = newBounds;\n\n // Store pending update for next animation frame\n pendingBounds = newBounds;\n };\n\n const endResize = (e?: MouseEvent | TouchEvent): void => {\n if (!isResizing) {\n return;\n }\n\n console.log(\n \"[Eden Frame] Resize ended, final currentBounds:\",\n currentBoundsRef.current\n );\n isResizing = false;\n resizeStartBounds = null;\n\n // Remove mouseup listener since resize is done\n window.removeEventListener(\"mouseup\", endResize);\n\n const appId = window.edenFrame?._internal.appId;\n\n // Cancel animation frame and send final position\n if (rafId) {\n cancelAnimationFrame(rafId);\n rafId = null;\n\n // Send final pending bounds immediately\n if (pendingBounds && appId) {\n window.edenAPI\n .shellCommand(\"view/update-view-bounds\", {\n appId,\n bounds: pendingBounds,\n })\n .catch(console.error);\n\n // Update edenFrame._internal.bounds so next interaction starts from correct position\n window.edenFrame!._internal.bounds = { ...pendingBounds };\n pendingBounds = null;\n }\n }\n\n // For touch resize, ensure edenFrame._internal.bounds is updated with final position\n if (isTouch && currentBoundsRef.current) {\n window.edenFrame!._internal.bounds = { ...currentBoundsRef.current };\n console.log(\n \"[Eden Frame] Updated edenFrame._internal.bounds after touch resize:\",\n window.edenFrame?._internal.bounds\n );\n }\n\n // Stop global resize tracking in main process (for mouse events)\n if (!isTouch && appId) {\n window.edenAPI\n .shellCommand(\"view/end-resize\", { appId })\n .catch(console.error);\n }\n };\n\n // Mouse events\n resizeHandle.addEventListener(\"mousedown\", startResize);\n\n // Touch events\n resizeHandle.addEventListener(\"touchstart\", startResize, { passive: false });\n\n // Move events for touch (mouse uses main process tracking)\n // Use document and capture to ensure we get all touch moves\n document.addEventListener(\"touchmove\", moveResize, {\n passive: false,\n capture: true,\n });\n\n // Touch end/cancel events (mouseup is added dynamically when resize starts)\n document.addEventListener(\"touchend\", endResize, { passive: false });\n document.addEventListener(\"touchcancel\", endResize, { passive: false });\n\n console.log(\"[Eden Frame] Resize event listeners registered\");\n}\n", "/**\n * Eden App Frame Injector\n *\n * Main orchestrator for the app frame system.\n * This script is injected into every app to add a title bar with controls.\n */\n\nimport {\n createOverlay,\n injectOverlay,\n setupDarkMode,\n setTitle,\n getAppName,\n} from \"./ui-builder.js\";\nimport {\n setupCloseButton,\n setupMinimizeButton,\n setupToggleModeButton,\n} from \"./button-handlers.js\";\nimport { setupWindowDragging } from \"./window-dragging.js\";\nimport { setupWindowResizing } from \"./window-resizing.js\";\n\n(function () {\n console.log(\"[Eden Frame] Injection script started\");\n\n // Initialize edenFrame object if not exists\n if (!window.edenFrame) {\n window.edenFrame = {\n setTitle: (title: string) => {\n /* will be set later */\n },\n _internal: {\n appId: \"\",\n injected: false,\n config: {},\n currentMode: \"tiled\",\n bounds: { x: 0, y: 0, width: 0, height: 0 },\n },\n };\n }\n\n // Check if already injected\n if (window.edenFrame._internal.injected) {\n console.log(\"[Eden Frame] Already injected, skipping\");\n return;\n }\n window.edenFrame._internal.injected = true;\n\n let appId: string | null = null;\n let appName: string = \"App\";\n\n // Track current window bounds for floating windows\n // Using an object reference so we can update it and have the change reflected in all modules\n const currentBoundsRef: {\n current: { x: number; y: number; width: number; height: number } | null;\n } = { current: null };\n\n // Create the overlay\n const overlay = createOverlay(window.edenFrame._internal.config);\n\n // Setup handlers after overlay is injected\n const setupHandlers = (): void => {\n // Get appId from injected config\n if (window.edenFrame && window.edenFrame._internal.appId) {\n appId = window.edenFrame._internal.appId;\n appName = getAppName(appId);\n setTitle(appName);\n }\n\n // Setup button handlers\n setupCloseButton();\n setupMinimizeButton();\n setupToggleModeButton();\n\n // Setup floating window controls\n setupFloatingWindowControls();\n\n window.edenAPI.subscribe(\n \"view/mode-changed\",\n (data: { mode: \"tiled\" | \"floating\"; bounds: any }) => {\n const { mode, bounds } = data;\n console.log(\n \"[Eden Frame] View mode changed to:\",\n mode,\n \"with bounds:\",\n bounds\n );\n\n // Update window mode and bounds\n window.edenFrame!._internal.currentMode = mode;\n if (bounds && bounds.x !== undefined) {\n window.edenFrame!._internal.bounds = bounds;\n currentBoundsRef.current = { ...bounds };\n }\n\n // Re-setup controls for new mode\n setupFloatingWindowControls();\n }\n );\n console.log(\"[Eden Frame] Subscribed to view/mode-changed\");\n };\n\n const setupFloatingWindowControls = (): void => {\n const windowMode = window.edenFrame!._internal.currentMode;\n const windowConfig = window.edenFrame!._internal.config;\n const initialBounds = window.edenFrame!._internal.bounds;\n\n console.log(\n \"[Eden Frame] Window mode:\",\n windowMode,\n \"Config:\",\n windowConfig,\n \"Initial bounds:\",\n initialBounds\n );\n\n // Only enable dragging/resizing for floating windows\n if (windowMode !== \"floating\") {\n return;\n }\n\n // Initialize current bounds from the actual bounds set by ViewManager\n if (initialBounds && initialBounds.x !== undefined) {\n currentBoundsRef.current = { ...initialBounds };\n console.log(\n \"[Eden Frame] Initialized bounds from backend:\",\n currentBoundsRef.current\n );\n } else if (windowConfig.defaultSize) {\n // Fallback to config if no initial bounds provided\n const workspaceX = 0;\n const workspaceY = 0;\n\n const x = windowConfig.defaultPosition?.x || 0;\n const y = windowConfig.defaultPosition?.y || 0;\n\n currentBoundsRef.current = {\n x: workspaceX + x,\n y: workspaceY + y,\n width: windowConfig.defaultSize.width || 800,\n height: windowConfig.defaultSize.height || 600,\n };\n\n console.log(\n \"[Eden Frame] Initialized bounds from config:\",\n currentBoundsRef.current\n );\n }\n\n // Check if dragging is allowed\n const isMovable = windowConfig.movable !== false; // default true\n const isResizable = windowConfig.resizable !== false; // default true\n\n console.log(\"[Eden Frame] Movable:\", isMovable, \"Resizable:\", isResizable);\n\n // Setup window dragging\n if (isMovable) {\n setupWindowDragging(overlay, currentBoundsRef);\n }\n\n // Setup window resizing\n if (isResizable) {\n setupWindowResizing(windowConfig, currentBoundsRef);\n }\n };\n\n // Listen for bounds updates from main process (during mouse drag/resize)\n // This keeps currentBounds in sync even when main process is controlling movement\n window.edenAPI.subscribe(\"view/bounds-updated\", (newBounds) => {\n currentBoundsRef.current = { ...newBounds };\n window.edenFrame!._internal.bounds = { ...newBounds };\n });\n console.log(\"[Eden Frame] Subscribed to view/bounds-updated\");\n\n // Add global touch handler to diagnose issues\n document.addEventListener(\n \"touchstart\",\n (e) => {\n console.log(\"[Eden Frame] Global touchstart on:\", e.target);\n },\n { passive: false, capture: true }\n );\n\n document.addEventListener(\n \"touchcancel\",\n (e) => {\n console.log(\"[Eden Frame] Global touchcancel on:\", e.target);\n console.log(\"[Eden Frame] Stack trace:\", new Error().stack);\n },\n { capture: true }\n );\n\n // Inject overlay and setup handlers\n injectOverlay(overlay, () => {\n setupDarkMode(overlay);\n setupHandlers();\n });\n\n // Expose API for apps to update the title\n window.edenFrame.setTitle = (title: string) => {\n setTitle(title);\n };\n})();\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["
|
|
3
|
+
"sources": ["../../src/logging/levels.ts", "../../src/logging/logger.ts", "../../src/app-frame/button-handlers.ts", "../../src/app-frame/ui-builder.ts", "../../src/app-frame/utils.ts", "../../src/app-frame/window-dragging.ts", "../../src/app-frame/window-resizing.ts", "../../src/app-frame/frame-injector.ts"],
|
|
4
|
+
"sourcesContent": ["export type LogLevel = \"trace\" | \"debug\" | \"info\" | \"warn\" | \"error\" | \"fatal\";\n\nexport const LOG_LEVEL_ORDER: Record<LogLevel, number> = {\n trace: 10,\n debug: 20,\n info: 30,\n warn: 40,\n error: 50,\n fatal: 60,\n};\n\nexport function parseLogLevel(value?: string | null): LogLevel | null {\n if (!value) return null;\n const normalized = value.trim().toLowerCase();\n if (normalized in LOG_LEVEL_ORDER) {\n return normalized as LogLevel;\n }\n return null;\n}\n\nexport function isLogLevelEnabled(\n level: LogLevel,\n minLevel: LogLevel,\n): boolean {\n return LOG_LEVEL_ORDER[level] >= LOG_LEVEL_ORDER[minLevel];\n}\n", "import type { LogLevel } from \"./levels\";\nimport { isLogLevelEnabled, parseLogLevel } from \"./levels\";\n\nexport type LogFormat = \"pretty\" | \"raw\";\nexport type LogPathMode = \"short\" | \"full\" | \"file\";\n\nexport interface LogContext {\n appId?: string;\n viewId?: number;\n webContentsId?: number;\n processType?: string;\n source?: string;\n}\n\nexport interface CallsiteInfo {\n file: string;\n line: number;\n column?: number;\n}\n\nexport interface LoggerConfig {\n minLevel: LogLevel;\n format: LogFormat;\n includeTimestamp: boolean;\n includeCallsite: boolean;\n pathMode: LogPathMode;\n}\n\nexport interface Logger {\n trace: (...args: unknown[]) => void;\n debug: (...args: unknown[]) => void;\n info: (...args: unknown[]) => void;\n warn: (...args: unknown[]) => void;\n error: (...args: unknown[]) => void;\n fatal: (...args: unknown[]) => void;\n}\n\ninterface LogRecord {\n level: LogLevel;\n args: unknown[];\n context?: LogContext;\n callsite?: CallsiteInfo;\n timestamp?: number;\n skipCallsite?: boolean;\n}\n\nlet globalContext: LogContext = {};\n\nlet config: LoggerConfig = resolveDefaultConfig();\nconst baseConsole = {\n debug: console.debug.bind(console),\n warn: console.warn.bind(console),\n error: console.error.bind(console),\n info: console.log.bind(console),\n};\n\nexport function configureLogger(next: Partial<LoggerConfig>): void {\n config = { ...config, ...next };\n}\n\nexport function getLoggerConfig(): LoggerConfig {\n return config;\n}\n\nexport function setLogContext(next: Partial<LogContext>): void {\n globalContext = { ...globalContext, ...next };\n}\n\nexport function createLogger(context?: LogContext): Logger {\n return {\n trace: (...args) => emit({ level: \"trace\", args, context }),\n debug: (...args) => emit({ level: \"debug\", args, context }),\n info: (...args) => emit({ level: \"info\", args, context }),\n warn: (...args) => emit({ level: \"warn\", args, context }),\n error: (...args) => emit({ level: \"error\", args, context }),\n fatal: (...args) => emit({ level: \"fatal\", args, context }),\n };\n}\n\nexport const log: Logger = createLogger();\n\nexport function logExternal(record: {\n level: LogLevel;\n message: string;\n context?: LogContext;\n callsite?: CallsiteInfo;\n}): void {\n emit({\n level: record.level,\n args: [record.message],\n context: record.context,\n callsite: record.callsite,\n skipCallsite: true,\n });\n}\n\nexport function logFromConsole(record: {\n level: LogLevel;\n args: unknown[];\n context?: LogContext;\n callsite?: CallsiteInfo;\n}): void {\n emit({\n level: record.level,\n args: record.args,\n context: record.context,\n callsite: record.callsite,\n skipCallsite: true,\n });\n}\n\nfunction emit(record: LogRecord): void {\n const { level } = record;\n if (!isLogLevelEnabled(level, config.minLevel)) return;\n\n const timestamp = record.timestamp ?? Date.now();\n const context = mergeContext(record.context);\n const callsite =\n record.callsite ??\n (config.includeCallsite && !record.skipCallsite\n ? captureCallsite()\n : undefined);\n\n const prefix =\n config.format === \"pretty\"\n ? formatPrefix({ level, timestamp, context, callsite })\n : \"\";\n\n const target = consoleForLevel(level);\n if (prefix) {\n target(prefix, ...record.args);\n } else {\n target(...record.args);\n }\n}\n\nfunction mergeContext(context?: LogContext): LogContext {\n const base = getBaseContext();\n return { ...base, ...context };\n}\n\nfunction getBaseContext(): LogContext {\n const envAppId = getEnvValue(\"EDEN_APP_ID\");\n const globalAppId = (globalThis as any).__EDEN_APP_ID__ as string | undefined;\n return {\n processType: detectProcessType(),\n appId: globalContext.appId ?? envAppId ?? globalAppId,\n viewId: globalContext.viewId,\n webContentsId: globalContext.webContentsId,\n source: globalContext.source,\n };\n}\n\nfunction detectProcessType(): string {\n const processObj = (globalThis as any).process as\n | { type?: string; env?: Record<string, string>; cwd?: () => string }\n | undefined;\n if (processObj) {\n const type = processObj.type;\n if (type === \"browser\") return \"main\";\n if (type === \"utility\") return \"backend\";\n if (type) return type;\n }\n if (typeof (globalThis as any).window !== \"undefined\") return \"renderer\";\n return \"node\";\n}\n\nfunction resolveDefaultConfig(): LoggerConfig {\n const envLevel = parseLogLevel(getEnvValue(\"EDEN_LOG_LEVEL\"));\n const envFormat = getEnvValue(\"EDEN_LOG_FORMAT\") as LogFormat | undefined;\n const envPathMode = getEnvValue(\"EDEN_LOG_PATH\") as LogPathMode | undefined;\n const isTest = getEnvValue(\"NODE_ENV\") === \"test\";\n const isRenderer = detectProcessType() === \"renderer\";\n\n return {\n minLevel: envLevel ?? \"debug\",\n format: envFormat ?? (isTest || isRenderer ? \"raw\" : \"pretty\"),\n includeTimestamp: getEnvBool(\"EDEN_LOG_TIMESTAMP\", !isTest),\n includeCallsite: getEnvBool(\"EDEN_LOG_CALLSITE\", !isTest && !isRenderer),\n pathMode: envPathMode ?? \"short\",\n };\n}\n\nfunction consoleForLevel(level: LogLevel): (...args: unknown[]) => void {\n const useLiveConsole = getEnvValue(\"NODE_ENV\") === \"test\";\n switch (level) {\n case \"trace\":\n case \"debug\":\n return useLiveConsole ? console.debug.bind(console) : baseConsole.debug;\n case \"warn\":\n return useLiveConsole ? console.warn.bind(console) : baseConsole.warn;\n case \"error\":\n case \"fatal\":\n return useLiveConsole ? console.error.bind(console) : baseConsole.error;\n case \"info\":\n default:\n return useLiveConsole ? console.log.bind(console) : baseConsole.info;\n }\n}\n\nfunction formatPrefix(record: {\n level: LogLevel;\n timestamp: number;\n context?: LogContext;\n callsite?: CallsiteInfo;\n}): string {\n const parts: string[] = [];\n\n if (config.includeTimestamp) {\n parts.push(new Date(record.timestamp).toISOString());\n }\n\n parts.push(record.level.toUpperCase());\n\n if (record.context?.processType) {\n parts.push(record.context.processType);\n }\n if (record.context?.appId) {\n parts.push(`app=${record.context.appId}`);\n }\n if (record.context?.viewId !== undefined) {\n parts.push(`view=${record.context.viewId}`);\n }\n if (record.context?.webContentsId !== undefined) {\n parts.push(`wc=${record.context.webContentsId}`);\n }\n if (record.context?.source) {\n parts.push(record.context.source);\n }\n if (record.callsite) {\n const file = shortenPath(record.callsite.file, config.pathMode);\n parts.push(`${file}:${record.callsite.line}`);\n }\n\n return `[${parts.join(\"] [\")}]`;\n}\n\nfunction captureCallsite(): CallsiteInfo | undefined {\n const err = new Error();\n (Error as any).captureStackTrace?.(err, captureCallsite);\n const stack = err.stack;\n if (!stack) return undefined;\n\n const lines = stack.split(\"\\n\").slice(1);\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n if (trimmed.includes(\"/logging/\") || trimmed.includes(\"\\\\logging\\\\\")) {\n continue;\n }\n\n const match =\n trimmed.match(/\\(([^)]+):(\\d+):(\\d+)\\)$/) ??\n trimmed.match(/at\\s+([^\\s]+):(\\d+):(\\d+)$/);\n\n if (!match) continue;\n\n const file = match[1];\n const lineNumber = Number(match[2]);\n const columnNumber = Number(match[3]);\n\n if (!file || Number.isNaN(lineNumber)) continue;\n\n return {\n file,\n line: lineNumber,\n column: Number.isNaN(columnNumber) ? undefined : columnNumber,\n };\n }\n\n return undefined;\n}\n\nfunction shortenPath(path: string, mode: LogPathMode): string {\n if (mode === \"full\") return path;\n if (mode === \"file\") {\n const cleaned = path.replace(/^[^:]*[\\\\/]/, \"\");\n return cleaned || path;\n }\n\n let normalized = path;\n if (normalized.startsWith(\"file://\")) {\n normalized = normalized.slice(\"file://\".length);\n }\n\n try {\n const processObj = (globalThis as any).process as\n | { cwd?: () => string }\n | undefined;\n if (processObj?.cwd) {\n const cwd = processObj.cwd();\n if (normalized.startsWith(cwd)) {\n return normalized.slice(cwd.length + 1);\n }\n }\n } catch {\n // Ignore errors resolving cwd\n }\n\n const normalizedPath = normalized.replace(/\\\\/g, \"/\");\n const distIndex = normalizedPath.lastIndexOf(\"/dist/\");\n if (distIndex >= 0) {\n return normalizedPath.slice(distIndex + 1);\n }\n\n const sdkIndex = normalizedPath.lastIndexOf(\"/sdk/\");\n if (sdkIndex >= 0) {\n return normalizedPath.slice(sdkIndex + 1);\n }\n\n const segments = normalizedPath.split(\"/\").filter(Boolean);\n if (segments.length >= 2) {\n return segments.slice(-2).join(\"/\");\n }\n\n return normalizedPath;\n}\n\nfunction getEnvValue(key: string): string | undefined {\n const processObj = (globalThis as any).process as\n | { env?: Record<string, string> }\n | undefined;\n if (processObj?.env?.[key]) {\n return processObj.env[key];\n }\n const globalValue = (globalThis as any)[key];\n if (typeof globalValue === \"string\") {\n return globalValue;\n }\n return undefined;\n}\n\nfunction getEnvBool(key: string, fallback: boolean): boolean {\n const value = getEnvValue(key);\n if (value === undefined) return fallback;\n const normalized = value.trim().toLowerCase();\n if ([\"1\", \"true\", \"yes\", \"on\"].includes(normalized)) return true;\n if ([\"0\", \"false\", \"no\", \"off\"].includes(normalized)) return false;\n return fallback;\n}\n", "import { log } from \"../logging\";\n/**\n * App Frame Button Handlers\n *\n * Event handlers for frame control buttons (close, minimize, toggle mode)\n */\n\n/**\n * Setup close button handler\n */\nexport function setupCloseButton(): void {\n const closeBtn = document.getElementById(\"eden-close-btn\");\n if (!closeBtn) return;\n\n closeBtn.addEventListener(\"click\", () => {\n // Wait for edenFrame to be available\n const stopApp = () => {\n const appId = window.edenFrame?._internal.appId;\n log.info(\"Stopping app:\", appId);\n\n if (appId) {\n window.edenAPI.shellCommand(\"process/stop\", { appId }).catch(log.error);\n } else {\n // Retry if API or appId not yet available\n setTimeout(stopApp, 100);\n }\n };\n stopApp();\n });\n}\n\n/**\n * Setup minimize button handler\n */\nexport function setupMinimizeButton(): void {\n const minBtn = document.getElementById(\"eden-minimize-btn\");\n if (!minBtn) return;\n\n minBtn.addEventListener(\"click\", () => {\n const minimize = () => {\n const appId = window.edenFrame?._internal.appId;\n\n if (appId) {\n window.edenAPI\n .shellCommand(\"view/set-view-visibility\", {\n appId,\n visible: false,\n })\n .catch(log.error);\n } else {\n setTimeout(minimize, 100);\n }\n };\n minimize();\n });\n}\n\n/**\n * Setup toggle mode button handler (for apps that support both tiled and floating)\n */\nexport function setupToggleModeButton(): void {\n const toggleBtn = document.getElementById(\"eden-toggle-mode-btn\");\n if (!toggleBtn) return;\n\n toggleBtn.addEventListener(\"click\", () => {\n const toggleMode = () => {\n const appId = window.edenFrame?._internal.appId;\n\n if (appId) {\n window.edenAPI\n .shellCommand(\"view/toggle-view-mode\", {\n appId,\n })\n .then(() => {\n log.info(\"View mode toggled\");\n })\n .catch(log.error);\n } else {\n setTimeout(toggleMode, 100);\n }\n };\n toggleMode();\n });\n}\n", "import { log } from \"../logging\";\n/**\n * App Frame UI Builder\n *\n * Functions for creating and managing the app frame overlay UI\n */\n\n/**\n * Create the app frame overlay element\n * @param windowConfig - Window configuration from manifest\n * @returns The overlay element\n */\nexport function createOverlay(\n windowConfig: NonNullable<Window[\"edenFrame\"]>[\"_internal\"][\"config\"],\n): HTMLElement {\n const overlay = document.createElement(\"div\");\n overlay.id = \"eden-app-frame-overlay\";\n\n const supportsToggle = windowConfig.mode === \"both\";\n const showTitle = windowConfig.showTitle !== false; // Default to true if not specified\n\n // Create toggle button HTML if supported\n const toggleButtonHtml = supportsToggle\n ? `<button class=\"eden-app-frame-button toggle-mode\" id=\"eden-toggle-mode-btn\" title=\"Toggle Window Mode\">\u229E</button>`\n : \"\";\n\n // Create title HTML if showTitle is true\n const titleHtml = showTitle ? `<div id=\"eden-app-frame-title\">App</div>` : \"\";\n\n overlay.innerHTML = `\n ${titleHtml}\n <div id=\"eden-app-frame-controls\">\n ${toggleButtonHtml}\n <button class=\"eden-app-frame-button minimize\" id=\"eden-minimize-btn\" title=\"Minimize\">\u2212</button>\n <button class=\"eden-app-frame-button close\" id=\"eden-close-btn\" title=\"Close\">\u00D7</button>\n </div>\n `;\n\n return overlay;\n}\n\n/**\n * Inject the overlay into the DOM when ready\n * @param overlay - The overlay element to inject\n * @param callback - Called after injection\n */\nexport function injectOverlay(\n overlay: HTMLElement,\n callback?: () => void,\n): void {\n const inject = () => {\n log.info(\"injectOverlay called, body exists:\", !!document.body);\n if (document.body) {\n document.body.insertBefore(overlay, document.body.firstChild);\n document.body.classList.add(\"eden-framed\");\n log.info(\"Overlay injected into body\");\n\n if (callback) {\n callback();\n }\n } else {\n log.info(\"Body not ready, retrying...\");\n setTimeout(inject, 10);\n }\n };\n\n // Inject when DOM is ready\n if (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", inject);\n } else {\n inject();\n }\n}\n\n/**\n * Setup dark mode detection and updates\n * @param overlay - The overlay element\n */\nexport function setupDarkMode(overlay: HTMLElement): void {\n const prefersDark = window.matchMedia(\"(prefers-color-scheme: dark)\");\n\n const updateTheme = (e: MediaQueryListEvent | MediaQueryList) => {\n if (e.matches) {\n overlay.classList.add(\"dark\");\n } else {\n overlay.classList.remove(\"dark\");\n }\n };\n\n updateTheme(prefersDark);\n prefersDark.addEventListener(\"change\", updateTheme);\n}\n\n/**\n * Set the title bar text\n * @param title - The title to display\n */\nexport function setTitle(title: string): void {\n const titleEl = document.getElementById(\"eden-app-frame-title\");\n if (titleEl) {\n titleEl.textContent = title;\n }\n}\n\n/**\n * Extract a readable name from app ID\n * @param name - The app name (string or localized object)\n * @param locale - The locale to use (default 'en')\n * @returns Readable name\n */\nexport function getAppName(\n name: string | Record<string, string>,\n locale: string = \"en\",\n): string {\n if (typeof name === \"string\") {\n const parts = name.split(\".\");\n const readable = parts[parts.length - 1] || name;\n return readable.charAt(0).toUpperCase() + readable.slice(1);\n }\n\n return name[locale] || name[\"en\"] || Object.values(name)[0] || \"App\";\n}\n", "/**\n * App Frame Utilities\n *\n * Shared utility functions for the app frame\n */\n\n/**\n * Get screen coordinates from mouse or touch event\n * @param e - The event\n * @returns Screen coordinates\n */\nexport function getScreenCoords(e: MouseEvent | TouchEvent): {\n x: number;\n y: number;\n} {\n // For mouse events, use screenX/screenY directly\n if (\"screenX\" in e && e.screenX !== undefined && e.screenY !== undefined) {\n return { x: e.screenX, y: e.screenY };\n }\n\n // For touch events, calculate screen coordinates from client coordinates\n if (\"touches\" in e && e.touches && e.touches[0]) {\n const touch = e.touches[0];\n // Try touch.screenX/screenY first (if available)\n if (touch.screenX !== undefined && touch.screenY !== undefined) {\n return { x: touch.screenX, y: touch.screenY };\n }\n // Fallback: calculate from clientX/clientY + view bounds position\n // Use currentBounds which has the actual view position\n const currentBounds = window.edenFrame?._internal.bounds;\n if (currentBounds) {\n return {\n x: currentBounds.x + touch.clientX,\n y: currentBounds.y + touch.clientY,\n };\n }\n // Last resort: use window.screenX/screenY\n return {\n x: touch.clientX + (window.screenX || 0),\n y: touch.clientY + (window.screenY || 0),\n };\n }\n\n return { x: 0, y: 0 };\n}\n", "import { log } from \"../logging\";\n/**\n * Window Dragging\n *\n * Handles dragging for floating windows\n */\n\nimport { getScreenCoords } from \"./utils\";\n\n/**\n * Setup window dragging for floating windows\n * @param overlay - The title bar overlay element\n * @param currentBoundsRef - Reference object containing current bounds\n */\nexport function setupWindowDragging(\n overlay: HTMLElement,\n currentBoundsRef: {\n current: { x: number; y: number; width: number; height: number } | null;\n },\n): () => void {\n let isDragging = false;\n let startX = 0;\n let startY = 0;\n let dragStartBounds: {\n x: number;\n y: number;\n width: number;\n height: number;\n } | null = null;\n let isTouch = false;\n let rafId: number | null = null;\n let pendingBounds: {\n x: number;\n y: number;\n width: number;\n height: number;\n } | null = null;\n\n // Animation frame update function - throttles IPC to 60fps\n const updatePosition = () => {\n const appId = window.edenFrame?._internal.appId;\n if (pendingBounds && appId) {\n window.edenAPI\n .shellCommand(\"view/update-view-bounds\", {\n appId,\n bounds: pendingBounds,\n })\n .catch(log.error);\n\n pendingBounds = null;\n }\n\n if (isDragging) {\n rafId = requestAnimationFrame(updatePosition);\n }\n };\n\n const startDrag = (e: MouseEvent | TouchEvent) => {\n // Only drag on the title bar itself, not on buttons\n if ((e.target as HTMLElement).closest(\".eden-app-frame-button\")) {\n return;\n }\n\n // ALWAYS refresh currentBounds at start to handle case where mouse drag updated position\n const initialBounds = window.edenFrame?._internal.bounds;\n if (initialBounds && initialBounds.x !== undefined) {\n currentBoundsRef.current = { ...initialBounds };\n log.info(currentBoundsRef.current);\n } else if (!currentBoundsRef.current) {\n log.warn(\"Cannot start drag - currentBounds not initialized!\");\n return;\n }\n\n isDragging = true;\n isTouch = e.type.startsWith(\"touch\");\n\n // Get screen coordinates\n const coords = getScreenCoords(e);\n startX = coords.x;\n startY = coords.y;\n dragStartBounds = { ...currentBoundsRef.current };\n\n // IMPORTANT: Prevent default FIRST to stop touch from being canceled\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation();\n\n // Start animation frame loop for smooth updates\n if (isTouch) {\n rafId = requestAnimationFrame(updatePosition);\n }\n\n const appId = window.edenFrame?._internal.appId;\n\n // NOTE: We do NOT call focus-app here anymore.\n // On macOS (and Linux touch), calling focus-app during drag start causes view reordering\n // which cancels the drag/touch event. Instead, we bring the window to front after drag ends.\n\n // For mouse events, use global tracking in main process\n // For touch events, we'll handle updates in touchmove\n if (!isTouch && appId) {\n window.edenAPI\n .shellCommand(\"view/start-drag\", {\n appId,\n startX: coords.x,\n startY: coords.y,\n })\n .catch(log.error);\n }\n\n // Add mouseup listener when drag starts (removed when drag ends)\n if (!isTouch) {\n window.addEventListener(\"mouseup\", endDrag);\n }\n };\n\n const moveDrag = (e: MouseEvent | TouchEvent) => {\n // Prevent default immediately\n e.preventDefault();\n e.stopPropagation();\n\n if (!isDragging || !dragStartBounds) {\n return;\n }\n\n // Get current coordinates\n const coords = getScreenCoords(e);\n const deltaX = coords.x - startX;\n const deltaY = coords.y - startY;\n\n const newBounds = {\n x: dragStartBounds.x + deltaX,\n y: dragStartBounds.y + deltaY,\n width: dragStartBounds.width,\n height: dragStartBounds.height,\n };\n\n // Update tracked bounds immediately for next move calculation\n currentBoundsRef.current = newBounds;\n\n // Store pending update for next animation frame\n pendingBounds = newBounds;\n };\n\n const endDrag = (e: MouseEvent | TouchEvent) => {\n // For touch events, only end if there are no remaining touches\n if (\n e.type.startsWith(\"touch\") &&\n (e as TouchEvent).touches &&\n (e as TouchEvent).touches.length > 0\n ) {\n return;\n }\n\n if (!isDragging) {\n return;\n }\n\n isDragging = false;\n dragStartBounds = null;\n\n // Remove mouseup listener since drag is done\n window.removeEventListener(\"mouseup\", endDrag);\n\n const appId = window.edenFrame?._internal.appId;\n\n // Cancel animation frame and send final position\n if (rafId) {\n cancelAnimationFrame(rafId);\n rafId = null;\n\n // Send final pending bounds immediately\n if (pendingBounds && appId) {\n window.edenAPI\n .shellCommand(\"view/update-view-bounds\", {\n appId,\n bounds: pendingBounds,\n })\n .catch(log.error);\n\n // Update edenFrame._internal.bounds so next interaction starts from correct position\n window.edenFrame!._internal.bounds = { ...pendingBounds };\n pendingBounds = null;\n }\n }\n\n // For touch drag, ensure edenFrame._internal.bounds is updated with final position\n if (isTouch && currentBoundsRef.current) {\n window.edenFrame!._internal.bounds = { ...currentBoundsRef.current };\n log.info(\n \"Updated edenFrame._internal.bounds after touch drag:\",\n window.edenFrame?._internal.bounds,\n );\n }\n\n // Stop global drag tracking in main process (for mouse events)\n if (!isTouch && appId) {\n window.edenAPI.shellCommand(\"view/end-drag\", { appId }).catch(log.error);\n }\n\n if (appId) {\n window.edenAPI.shellCommand(\"view/focus-app\", { appId }).catch(log.error);\n }\n };\n\n // Mouse events\n overlay.addEventListener(\"mousedown\", startDrag);\n\n // Touch events - don't use capture for start, do use for move\n overlay.addEventListener(\"touchstart\", startDrag, { passive: false });\n\n // Move events for touch (mouse uses main process tracking)\n // Use capture for move to ensure we get it\n document.addEventListener(\"touchmove\", moveDrag as EventListener, {\n passive: false,\n capture: true,\n });\n\n // Touch end/cancel events (mouseup is added dynamically when drag starts)\n document.addEventListener(\"touchend\", endDrag, { passive: false });\n document.addEventListener(\"touchcancel\", endDrag, { passive: false });\n\n log.info(\"Drag event listeners registered\");\n\n return () => {\n overlay.removeEventListener(\"mousedown\", startDrag);\n overlay.removeEventListener(\"touchstart\", startDrag);\n document.removeEventListener(\"touchmove\", moveDrag as EventListener, {\n capture: true,\n });\n document.removeEventListener(\"touchend\", endDrag);\n document.removeEventListener(\"touchcancel\", endDrag);\n window.removeEventListener(\"mouseup\", endDrag);\n\n if (rafId) {\n cancelAnimationFrame(rafId);\n }\n log.info(\"Drag event listeners removed\");\n };\n}\n", "import { log } from \"../logging\";\n/**\n * Window Resizing\n *\n * Handles resizing for floating windows\n */\n\nimport { getScreenCoords } from \"./utils.js\";\n\ninterface Bounds {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\ninterface BoundsRef {\n current: Bounds | null;\n}\n\n/**\n * Setup window resizing for floating windows\n */\n/**\n * Setup window resizing for floating windows\n */\nexport function setupWindowResizing(\n windowConfig: NonNullable<Window[\"edenFrame\"]>[\"_internal\"][\"config\"],\n currentBoundsRef: BoundsRef,\n): () => void {\n // Create resize handle in bottom-right corner\n const resizeHandle = document.createElement(\"div\");\n resizeHandle.id = \"eden-resize-handle\";\n resizeHandle.style.cssText = `\n position: fixed;\n bottom: 0;\n right: 0;\n width: 20px;\n height: 20px;\n cursor: nwse-resize;\n z-index: 2147483647;\n -webkit-app-region: no-drag;\n touch-action: none;\n `;\n\n document.body.appendChild(resizeHandle);\n\n let isResizing = false;\n let startX = 0;\n let startY = 0;\n let resizeStartBounds: Bounds | null = null;\n let isTouch = false;\n let rafId: number | null = null;\n let pendingBounds: Bounds | null = null;\n\n // Animation frame update function - throttles IPC to 60fps\n const updateResizePosition = () => {\n const appId = window.edenFrame?._internal.appId;\n if (pendingBounds && appId) {\n window.edenAPI\n .shellCommand(\"view/update-view-bounds\", {\n appId,\n bounds: pendingBounds,\n })\n .catch(log.error);\n\n pendingBounds = null;\n }\n\n if (isResizing) {\n rafId = requestAnimationFrame(updateResizePosition);\n }\n };\n\n const startResize = (e: MouseEvent | TouchEvent): void => {\n // Initialize current bounds if not set\n if (!currentBoundsRef.current) {\n const initialBounds = window.edenFrame?._internal.bounds;\n if (initialBounds && initialBounds.x !== undefined) {\n currentBoundsRef.current = { ...initialBounds };\n log.info(\n \"Initialized currentBounds from edenFrame._internal.bounds:\",\n currentBoundsRef.current,\n );\n } else {\n log.warn(\"Cannot start resize - currentBounds not initialized!\");\n return;\n }\n }\n\n isResizing = true;\n isTouch = e.type.startsWith(\"touch\");\n\n // Get screen coordinates\n const coords = getScreenCoords(e);\n startX = coords.x;\n startY = coords.y;\n resizeStartBounds = { ...currentBoundsRef.current };\n\n e.preventDefault();\n e.stopPropagation();\n\n // Start animation frame loop for smooth updates\n if (isTouch) {\n rafId = requestAnimationFrame(updateResizePosition);\n }\n\n const appId = window.edenFrame?._internal.appId;\n\n // NOTE: We do NOT call focus-app here anymore.\n // On macOS (and Linux touch), calling focus-app during resize start causes view reordering\n // which cancels the resize/touch event. Instead, we bring the window to front after resize ends.\n\n // For mouse events, use global tracking in main process\n // For touch events, we'll handle updates in touchmove\n if (!isTouch && appId) {\n window.edenAPI\n .shellCommand(\"view/start-resize\", {\n appId,\n startX: coords.x,\n startY: coords.y,\n })\n .catch(log.error);\n }\n\n // Add mouseup listener when resize starts (removed when resize ends)\n if (!isTouch) {\n window.addEventListener(\"mouseup\", endResize);\n }\n };\n\n const moveResize = (e: MouseEvent | TouchEvent): void => {\n log.info(\n \"moveResize called, isResizing:\",\n isResizing,\n \"event type:\",\n e.type,\n );\n\n e.preventDefault();\n e.stopPropagation();\n\n if (!isResizing || !resizeStartBounds) {\n log.info(\n \"moveResize returning early - isResizing:\",\n isResizing,\n \"resizeStartBounds:\",\n resizeStartBounds,\n );\n return;\n }\n\n // Get current coordinates\n const coords = getScreenCoords(e);\n const deltaX = coords.x - startX;\n const deltaY = coords.y - startY;\n\n log.info(\"moveResize coords:\", coords, \"delta:\", {\n deltaX,\n deltaY,\n });\n\n let newWidth = resizeStartBounds.width + deltaX;\n let newHeight = resizeStartBounds.height + deltaY;\n\n // Apply min/max constraints\n if (windowConfig.minSize) {\n newWidth = Math.max(newWidth, windowConfig.minSize.width || 200);\n newHeight = Math.max(newHeight, windowConfig.minSize.height || 200);\n } else {\n newWidth = Math.max(newWidth, 200);\n newHeight = Math.max(newHeight, 200);\n }\n\n if (windowConfig.maxSize) {\n newWidth = Math.min(newWidth, windowConfig.maxSize.width || 2000);\n newHeight = Math.min(newHeight, windowConfig.maxSize.height || 2000);\n }\n\n const newBounds = {\n x: resizeStartBounds.x,\n y: resizeStartBounds.y,\n width: Math.round(newWidth),\n height: Math.round(newHeight),\n };\n\n log.info(\"moveResize newBounds:\", newBounds);\n\n // Update tracked bounds immediately for next move calculation\n currentBoundsRef.current = newBounds;\n\n // Store pending update for next animation frame\n pendingBounds = newBounds;\n };\n\n const endResize = (e?: MouseEvent | TouchEvent): void => {\n if (!isResizing) {\n return;\n }\n\n isResizing = false;\n resizeStartBounds = null;\n\n // Remove mouseup listener since resize is done\n window.removeEventListener(\"mouseup\", endResize);\n\n const appId = window.edenFrame?._internal.appId;\n\n // Cancel animation frame and send final position\n if (rafId) {\n cancelAnimationFrame(rafId);\n rafId = null;\n\n // Send final pending bounds immediately\n if (pendingBounds && appId) {\n window.edenAPI\n .shellCommand(\"view/update-view-bounds\", {\n appId,\n bounds: pendingBounds,\n })\n .catch(log.error);\n\n // Update edenFrame._internal.bounds so next interaction starts from correct position\n window.edenFrame!._internal.bounds = { ...pendingBounds };\n pendingBounds = null;\n }\n }\n\n // For touch resize, ensure edenFrame._internal.bounds is updated with final position\n if (isTouch && currentBoundsRef.current) {\n window.edenFrame!._internal.bounds = { ...currentBoundsRef.current };\n log.info(\n \"Updated edenFrame._internal.bounds after touch resize:\",\n window.edenFrame?._internal.bounds,\n );\n }\n\n // Stop global resize tracking in main process (for mouse events)\n if (!isTouch && appId) {\n window.edenAPI\n .shellCommand(\"view/end-resize\", { appId })\n .catch(log.error);\n }\n\n if (appId) {\n window.edenAPI.shellCommand(\"view/focus-app\", { appId }).catch(log.error);\n }\n };\n\n // Mouse events\n resizeHandle.addEventListener(\"mousedown\", startResize);\n\n // Touch events\n resizeHandle.addEventListener(\"touchstart\", startResize, { passive: false });\n\n // Move events for touch (mouse uses main process tracking)\n // Use document and capture to ensure we get all touch moves\n document.addEventListener(\"touchmove\", moveResize, {\n passive: false,\n capture: true,\n });\n\n // Touch end/cancel events (mouseup is added dynamically when resize starts)\n document.addEventListener(\"touchend\", endResize, { passive: false });\n document.addEventListener(\"touchcancel\", endResize, { passive: false });\n\n log.info(\"Resize event listeners registered\");\n\n return () => {\n if (resizeHandle.parentNode) {\n resizeHandle.parentNode.removeChild(resizeHandle);\n }\n\n resizeHandle.removeEventListener(\"mousedown\", startResize);\n resizeHandle.removeEventListener(\"touchstart\", startResize);\n\n document.removeEventListener(\"touchmove\", moveResize, {\n capture: true,\n });\n document.removeEventListener(\"touchend\", endResize);\n document.removeEventListener(\"touchcancel\", endResize);\n window.removeEventListener(\"mouseup\", endResize);\n\n if (rafId) {\n cancelAnimationFrame(rafId);\n }\n log.info(\"Resize event listeners removed\");\n };\n}\n", "import { log } from \"../logging\";\n\n/**\n * Eden App Frame Injector\n *\n * Main orchestrator for the app frame system.\n * This script is injected into every app to add a title bar with controls.\n */\n\nimport {\n setupCloseButton,\n setupMinimizeButton,\n setupToggleModeButton,\n} from \"./button-handlers.js\";\nimport {\n createOverlay,\n getAppName,\n injectOverlay,\n setTitle,\n setupDarkMode,\n} from \"./ui-builder.js\";\nimport { setupWindowDragging } from \"./window-dragging.js\";\nimport { setupWindowResizing } from \"./window-resizing.js\";\n\n(() => {\n log.info(\"Injection script started\");\n\n // Initialize edenFrame object if not exists\n if (!window.edenFrame) {\n window.edenFrame = {\n setTitle: (title: string) => {\n /* will be set later */\n },\n resetTitle: () => {\n /* will be set later */\n },\n _internal: {\n appId: \"\",\n appName: \"\" as string | Record<string, string>,\n injected: false,\n config: {},\n currentMode: \"tiled\",\n bounds: { x: 0, y: 0, width: 0, height: 0 },\n },\n };\n }\n\n // Check if already injected\n if (window.edenFrame._internal.injected) {\n log.info(\"Already injected, skipping\");\n return;\n }\n window.edenFrame._internal.injected = true;\n\n let appId: string | null = null;\n let appName: string = \"App\";\n\n // Track current window bounds for floating windows\n // Using an object reference so we can update it and have the change reflected in all modules\n const currentBoundsRef: {\n current: { x: number; y: number; width: number; height: number } | null;\n } = { current: null };\n\n let cleanupDrag: (() => void) | null = null;\n let cleanupResize: (() => void) | null = null;\n\n // Create the overlay\n const overlay = createOverlay(window.edenFrame._internal.config);\n\n // Setup handlers after overlay is injected\n const setupHandlers = (): void => {\n // Get appId from injected config\n if (window.edenFrame && window.edenFrame._internal.appId) {\n appId = window.edenFrame._internal.appId;\n const rawName = window.edenFrame._internal.appName;\n\n // Async fetch locale\n window.edenAPI\n .shellCommand(\"i18n/get-locale\", {})\n .then((response: { locale: string }) => {\n const locale = response?.locale;\n const currentLocale = locale || \"en\";\n appName = getAppName(rawName, currentLocale);\n setTitle(appName);\n\n // Update resetTitle to use this locale\n if (window.edenFrame) {\n window.edenFrame.setTitle = (title: string) => setTitle(title);\n (window.edenFrame as any).resetTitle = () => setTitle(appName);\n }\n })\n .catch(() => {\n appName = getAppName(rawName, \"en\");\n setTitle(appName);\n if (window.edenFrame) {\n window.edenFrame.setTitle = (title: string) => setTitle(title);\n (window.edenFrame as any).resetTitle = () => setTitle(appName);\n }\n });\n\n // Set initial title (english fallback) to avoid empty title while fetching\n setTitle(getAppName(rawName, \"en\"));\n\n // Subscribe to locale changes for live updates\n window.edenAPI.subscribe(\n \"i18n/locale-changed\",\n (data: { locale: string }) => {\n const newLocale = data.locale;\n const currentName = getAppName(rawName, newLocale);\n\n // Update title\n setTitle(currentName);\n\n // Update resetTitle to use the new locale\n if (window.edenFrame) {\n (window.edenFrame as any).resetTitle = () => setTitle(currentName);\n }\n },\n );\n }\n\n // Setup button handlers\n setupCloseButton();\n setupMinimizeButton();\n setupToggleModeButton();\n\n // Setup floating window controls\n setupFloatingWindowControls();\n\n window.edenAPI.subscribe(\n \"view/mode-changed\",\n (data: { mode: \"tiled\" | \"floating\"; bounds: any }) => {\n const { mode, bounds } = data;\n log.info(\"View mode changed to:\", mode, \"with bounds:\", bounds);\n\n // Update window mode and bounds\n window.edenFrame!._internal.currentMode = mode;\n if (bounds && bounds.x !== undefined) {\n window.edenFrame!._internal.bounds = bounds;\n currentBoundsRef.current = { ...bounds };\n }\n\n // Re-setup controls for new mode\n setupFloatingWindowControls();\n },\n );\n log.info(\"Subscribed to view/mode-changed\");\n };\n\n const setupFloatingWindowControls = (): void => {\n const windowMode = window.edenFrame!._internal.currentMode;\n const windowConfig = window.edenFrame!._internal.config;\n const initialBounds = window.edenFrame!._internal.bounds;\n\n log.info(\"Window mode:\", initialBounds);\n\n // Clean up previous controls if they exist (crucial for mode switching)\n if (cleanupDrag) {\n cleanupDrag();\n cleanupDrag = null;\n }\n if (cleanupResize) {\n cleanupResize();\n cleanupResize = null;\n }\n\n // Only enable dragging/resizing for floating windows\n if (windowMode !== \"floating\") {\n // If we are not floating, we just returned after cleanup, so handles are gone.\n return;\n }\n\n // Initialize current bounds from the actual bounds set by ViewManager\n if (initialBounds && initialBounds.x !== undefined) {\n currentBoundsRef.current = { ...initialBounds };\n log.info(\"Initialized bounds from backend:\", currentBoundsRef.current);\n } else if (windowConfig.defaultSize) {\n // Fallback to config if no initial bounds provided\n const workspaceX = 0;\n const workspaceY = 0;\n\n const x = windowConfig.defaultPosition?.x || 0;\n const y = windowConfig.defaultPosition?.y || 0;\n\n currentBoundsRef.current = {\n x: workspaceX + x,\n y: workspaceY + y,\n width: windowConfig.defaultSize.width || 800,\n height: windowConfig.defaultSize.height || 600,\n };\n\n log.info(\"Initialized bounds from config:\", currentBoundsRef.current);\n }\n\n // Check if dragging is allowed\n const isMovable = windowConfig.movable !== false; // default true\n const isResizable = windowConfig.resizable !== false; // default true\n\n log.info(\"Movable:\", isMovable, \"Resizable:\", isResizable);\n\n // Setup window dragging\n if (isMovable) {\n cleanupDrag = setupWindowDragging(overlay, currentBoundsRef);\n }\n\n // Setup window resizing\n if (isResizable) {\n cleanupResize = setupWindowResizing(windowConfig, currentBoundsRef);\n }\n };\n\n // Listen for bounds updates from main process (during mouse drag/resize)\n // This keeps currentBounds in sync even when main process is controlling movement\n window.edenAPI.subscribe(\"view/bounds-updated\", (newBounds) => {\n currentBoundsRef.current = { ...newBounds };\n window.edenFrame!._internal.bounds = { ...newBounds };\n });\n log.info(\"Subscribed to view/bounds-updated\");\n\n // Add global touch handler to diagnose issues\n document.addEventListener(\n \"touchstart\",\n (e) => {\n log.info(\"Global touchstart on:\", e.target);\n },\n { passive: false, capture: true },\n );\n\n document.addEventListener(\n \"touchcancel\",\n (e) => {\n log.info(\"Global touchcancel on:\", e.target);\n log.info(\"Stack trace:\", new Error().stack);\n },\n { capture: true },\n );\n\n // Inject overlay and setup handlers\n injectOverlay(overlay, () => {\n setupDarkMode(overlay);\n setupHandlers();\n });\n\n // Expose API for apps to update the title\n window.edenFrame.setTitle = (title: string) => {\n setTitle(title);\n };\n\n // Expose resetTitle immediately (using English/default name initially)\n // This will be updated to use the correct locale once fetched\n window.edenFrame.resetTitle = () => {\n // If locale hasn't loaded yet, getAppName will use 'en' fallback\n if (window.edenFrame) {\n const currentName = getAppName(\n window.edenFrame._internal.appName || window.edenFrame._internal.appId,\n \"en\",\n );\n setTitle(currentName);\n }\n };\n})();\n"],
|
|
5
|
+
"mappings": "mBAEO,IAAMA,EAA4C,CACvD,MAAO,GACP,MAAO,GACP,KAAM,GACN,KAAM,GACN,MAAO,GACP,MAAO,EACT,EAEO,SAASC,EAAcC,EAAwC,CACpE,GAAI,CAACA,EAAO,OAAO,KACnB,IAAMC,EAAaD,EAAM,KAAK,EAAE,YAAY,EAC5C,OAAIC,KAAcH,EACTG,EAEF,IACT,CAEO,SAASC,EACdC,EACAC,EACS,CACT,OAAON,EAAgBK,CAAK,GAAKL,EAAgBM,CAAQ,CAC3D,CCqBA,IAAIC,EAA4B,CAAC,EAE7BC,EAAuBC,EAAqB,EAC1CC,EAAc,CAClB,MAAO,QAAQ,MAAM,KAAK,OAAO,EACjC,KAAM,QAAQ,KAAK,KAAK,OAAO,EAC/B,MAAO,QAAQ,MAAM,KAAK,OAAO,EACjC,KAAM,QAAQ,IAAI,KAAK,OAAO,CAChC,EAcO,SAASC,EAAaC,EAA8B,CACzD,MAAO,CACL,MAAO,IAAIC,IAASC,EAAK,CAAE,MAAO,QAAS,KAAAD,EAAM,QAAAD,CAAQ,CAAC,EAC1D,MAAO,IAAIC,IAASC,EAAK,CAAE,MAAO,QAAS,KAAAD,EAAM,QAAAD,CAAQ,CAAC,EAC1D,KAAM,IAAIC,IAASC,EAAK,CAAE,MAAO,OAAQ,KAAAD,EAAM,QAAAD,CAAQ,CAAC,EACxD,KAAM,IAAIC,IAASC,EAAK,CAAE,MAAO,OAAQ,KAAAD,EAAM,QAAAD,CAAQ,CAAC,EACxD,MAAO,IAAIC,IAASC,EAAK,CAAE,MAAO,QAAS,KAAAD,EAAM,QAAAD,CAAQ,CAAC,EAC1D,MAAO,IAAIC,IAASC,EAAK,CAAE,MAAO,QAAS,KAAAD,EAAM,QAAAD,CAAQ,CAAC,CAC5D,CACF,CAEO,IAAMG,EAAcJ,EAAa,EAgCxC,SAASK,EAAKC,EAAyB,CACrC,GAAM,CAAE,MAAAC,CAAM,EAAID,EAClB,GAAI,CAACE,EAAkBD,EAAOE,EAAO,QAAQ,EAAG,OAEhD,IAAMC,EAAYJ,EAAO,WAAa,KAAK,IAAI,EACzCK,EAAUC,EAAaN,EAAO,OAAO,EACrCO,EACJP,EAAO,WACNG,EAAO,iBAAmB,CAACH,EAAO,aAC/BQ,EAAgB,EAChB,QAEAC,EACJN,EAAO,SAAW,SACdO,EAAa,CAAE,MAAAT,EAAO,UAAAG,EAAW,QAAAC,EAAS,SAAAE,CAAS,CAAC,EACpD,GAEAI,EAASC,EAAgBX,CAAK,EAChCQ,EACFE,EAAOF,EAAQ,GAAGT,EAAO,IAAI,EAE7BW,EAAO,GAAGX,EAAO,IAAI,CAEzB,CAEA,SAASM,EAAaD,EAAkC,CAEtD,MAAO,CAAE,GADIQ,EAAe,EACV,GAAGR,CAAQ,CAC/B,CAEA,SAASQ,GAA6B,CACpC,IAAMC,EAAWC,EAAY,aAAa,EACpCC,EAAe,WAAmB,gBACxC,MAAO,CACL,YAAaC,EAAkB,EAC/B,MAAOC,EAAc,OAASJ,GAAYE,EAC1C,OAAQE,EAAc,OACtB,cAAeA,EAAc,cAC7B,OAAQA,EAAc,MACxB,CACF,CAEA,SAASD,GAA4B,CACnC,IAAME,EAAc,WAAmB,QAGvC,GAAIA,EAAY,CACd,IAAMC,EAAOD,EAAW,KACxB,GAAIC,IAAS,UAAW,MAAO,OAC/B,GAAIA,IAAS,UAAW,MAAO,UAC/B,GAAIA,EAAM,OAAOA,CACnB,CACA,OAAI,OAAQ,WAAmB,OAAW,IAAoB,WACvD,MACT,CAEA,SAASC,GAAqC,CAC5C,IAAMC,EAAWC,EAAcR,EAAY,gBAAgB,CAAC,EACtDS,EAAYT,EAAY,iBAAiB,EACzCU,EAAcV,EAAY,eAAe,EACzCW,EAASX,EAAY,UAAU,IAAM,OACrCY,EAAaV,EAAkB,IAAM,WAE3C,MAAO,CACL,SAAUK,GAAY,QACtB,OAAQE,IAAcE,GAAUC,EAAa,MAAQ,UACrD,iBAAkBC,EAAW,qBAAsB,CAACF,CAAM,EAC1D,gBAAiBE,EAAW,oBAAqB,CAACF,GAAU,CAACC,CAAU,EACvE,SAAUF,GAAe,OAC3B,CACF,CAEA,SAASb,EAAgBX,EAA+C,CACtE,IAAM4B,EAAiBd,EAAY,UAAU,IAAM,OACnD,OAAQd,EAAO,CACb,IAAK,QACL,IAAK,QACH,OAAO4B,EAAiB,QAAQ,MAAM,KAAK,OAAO,EAAIC,EAAY,MACpE,IAAK,OACH,OAAOD,EAAiB,QAAQ,KAAK,KAAK,OAAO,EAAIC,EAAY,KACnE,IAAK,QACL,IAAK,QACH,OAAOD,EAAiB,QAAQ,MAAM,KAAK,OAAO,EAAIC,EAAY,MACpE,IAAK,OACL,QACE,OAAOD,EAAiB,QAAQ,IAAI,KAAK,OAAO,EAAIC,EAAY,IACpE,CACF,CAEA,SAASpB,EAAaV,EAKX,CACT,IAAM+B,EAAkB,CAAC,EAuBzB,GArBI5B,EAAO,kBACT4B,EAAM,KAAK,IAAI,KAAK/B,EAAO,SAAS,EAAE,YAAY,CAAC,EAGrD+B,EAAM,KAAK/B,EAAO,MAAM,YAAY,CAAC,EAEjCA,EAAO,SAAS,aAClB+B,EAAM,KAAK/B,EAAO,QAAQ,WAAW,EAEnCA,EAAO,SAAS,OAClB+B,EAAM,KAAK,OAAO/B,EAAO,QAAQ,KAAK,EAAE,EAEtCA,EAAO,SAAS,SAAW,QAC7B+B,EAAM,KAAK,QAAQ/B,EAAO,QAAQ,MAAM,EAAE,EAExCA,EAAO,SAAS,gBAAkB,QACpC+B,EAAM,KAAK,MAAM/B,EAAO,QAAQ,aAAa,EAAE,EAE7CA,EAAO,SAAS,QAClB+B,EAAM,KAAK/B,EAAO,QAAQ,MAAM,EAE9BA,EAAO,SAAU,CACnB,IAAMgC,EAAOC,EAAYjC,EAAO,SAAS,KAAMG,EAAO,QAAQ,EAC9D4B,EAAM,KAAK,GAAGC,CAAI,IAAIhC,EAAO,SAAS,IAAI,EAAE,CAC9C,CAEA,MAAO,IAAI+B,EAAM,KAAK,KAAK,CAAC,GAC9B,CAEA,SAASvB,GAA4C,CACnD,IAAM0B,EAAM,IAAI,MACf,MAAc,oBAAoBA,EAAK1B,CAAe,EACvD,IAAM2B,EAAQD,EAAI,MAClB,GAAI,CAACC,EAAO,OAEZ,IAAMC,EAAQD,EAAM,MAAM;AAAA,CAAI,EAAE,MAAM,CAAC,EACvC,QAAWE,KAAQD,EAAO,CACxB,IAAME,EAAUD,EAAK,KAAK,EAE1B,GADI,CAACC,GACDA,EAAQ,SAAS,WAAW,GAAKA,EAAQ,SAAS,aAAa,EACjE,SAGF,IAAMC,EACJD,EAAQ,MAAM,0BAA0B,GACxCA,EAAQ,MAAM,4BAA4B,EAE5C,GAAI,CAACC,EAAO,SAEZ,IAAMP,EAAOO,EAAM,CAAC,EACdC,EAAa,OAAOD,EAAM,CAAC,CAAC,EAC5BE,EAAe,OAAOF,EAAM,CAAC,CAAC,EAEpC,GAAI,GAACP,GAAQ,OAAO,MAAMQ,CAAU,GAEpC,MAAO,CACL,KAAAR,EACA,KAAMQ,EACN,OAAQ,OAAO,MAAMC,CAAY,EAAI,OAAYA,CACnD,CACF,CAGF,CAEA,SAASR,EAAYS,EAAcC,EAA2B,CAC5D,GAAIA,IAAS,OAAQ,OAAOD,EAC5B,GAAIC,IAAS,OAEX,OADgBD,EAAK,QAAQ,cAAe,EAAE,GAC5BA,EAGpB,IAAIE,EAAaF,EACbE,EAAW,WAAW,SAAS,IACjCA,EAAaA,EAAW,MAAM,CAAgB,GAGhD,GAAI,CACF,IAAMzB,EAAc,WAAmB,QAGvC,GAAIA,GAAY,IAAK,CACnB,IAAM0B,EAAM1B,EAAW,IAAI,EAC3B,GAAIyB,EAAW,WAAWC,CAAG,EAC3B,OAAOD,EAAW,MAAMC,EAAI,OAAS,CAAC,CAE1C,CACF,MAAQ,CAER,CAEA,IAAMC,EAAiBF,EAAW,QAAQ,MAAO,GAAG,EAC9CG,EAAYD,EAAe,YAAY,QAAQ,EACrD,GAAIC,GAAa,EACf,OAAOD,EAAe,MAAMC,EAAY,CAAC,EAG3C,IAAMC,EAAWF,EAAe,YAAY,OAAO,EACnD,GAAIE,GAAY,EACd,OAAOF,EAAe,MAAME,EAAW,CAAC,EAG1C,IAAMC,EAAWH,EAAe,MAAM,GAAG,EAAE,OAAO,OAAO,EACzD,OAAIG,EAAS,QAAU,EACdA,EAAS,MAAM,EAAE,EAAE,KAAK,GAAG,EAG7BH,CACT,CAEA,SAAS/B,EAAYmC,EAAiC,CACpD,IAAM/B,EAAc,WAAmB,QAGvC,GAAIA,GAAY,MAAM+B,CAAG,EACvB,OAAO/B,EAAW,IAAI+B,CAAG,EAE3B,IAAMC,EAAe,WAAmBD,CAAG,EAC3C,GAAI,OAAOC,GAAgB,SACzB,OAAOA,CAGX,CAEA,SAASvB,EAAWsB,EAAaE,EAA4B,CAC3D,IAAMC,EAAQtC,EAAYmC,CAAG,EAC7B,GAAIG,IAAU,OAAW,OAAOD,EAChC,IAAMR,EAAaS,EAAM,KAAK,EAAE,YAAY,EAC5C,MAAI,CAAC,IAAK,OAAQ,MAAO,IAAI,EAAE,SAAST,CAAU,EAAU,GACxD,CAAC,IAAK,QAAS,KAAM,KAAK,EAAE,SAASA,CAAU,EAAU,GACtDQ,CACT,CCzUO,SAASE,GAAyB,CACvC,IAAMC,EAAW,SAAS,eAAe,gBAAgB,EACpDA,GAELA,EAAS,iBAAiB,QAAS,IAAM,CAEvC,IAAMC,EAAU,IAAM,CACpB,IAAMC,EAAQ,OAAO,WAAW,UAAU,MAC1CC,EAAI,KAAK,gBAAiBD,CAAK,EAE3BA,EACF,OAAO,QAAQ,aAAa,eAAgB,CAAE,MAAAA,CAAM,CAAC,EAAE,MAAMC,EAAI,KAAK,EAGtE,WAAWF,EAAS,GAAG,CAE3B,EACAA,EAAQ,CACV,CAAC,CACH,CAKO,SAASG,GAA4B,CAC1C,IAAMC,EAAS,SAAS,eAAe,mBAAmB,EACrDA,GAELA,EAAO,iBAAiB,QAAS,IAAM,CACrC,IAAMC,EAAW,IAAM,CACrB,IAAMJ,EAAQ,OAAO,WAAW,UAAU,MAEtCA,EACF,OAAO,QACJ,aAAa,2BAA4B,CACxC,MAAAA,EACA,QAAS,EACX,CAAC,EACA,MAAMC,EAAI,KAAK,EAElB,WAAWG,EAAU,GAAG,CAE5B,EACAA,EAAS,CACX,CAAC,CACH,CAKO,SAASC,GAA8B,CAC5C,IAAMC,EAAY,SAAS,eAAe,sBAAsB,EAC3DA,GAELA,EAAU,iBAAiB,QAAS,IAAM,CACxC,IAAMC,EAAa,IAAM,CACvB,IAAMP,EAAQ,OAAO,WAAW,UAAU,MAEtCA,EACF,OAAO,QACJ,aAAa,wBAAyB,CACrC,MAAAA,CACF,CAAC,EACA,KAAK,IAAM,CACVC,EAAI,KAAK,mBAAmB,CAC9B,CAAC,EACA,MAAMA,EAAI,KAAK,EAElB,WAAWM,EAAY,GAAG,CAE9B,EACAA,EAAW,CACb,CAAC,CACH,CCvEO,SAASC,EACdC,EACa,CACb,IAAMC,EAAU,SAAS,cAAc,KAAK,EAC5CA,EAAQ,GAAK,yBAEb,IAAMC,EAAiBF,EAAa,OAAS,OACvCG,EAAYH,EAAa,YAAc,GAGvCI,EAAmBF,EACrB,yHACA,GAGEG,EAAYF,EAAY,2CAA6C,GAE3E,OAAAF,EAAQ,UAAY;AAAA,MAChBI,CAAS;AAAA;AAAA,QAEPD,CAAgB;AAAA;AAAA;AAAA;AAAA,IAMfH,CACT,CAOO,SAASK,EACdL,EACAM,EACM,CACN,IAAMC,EAAS,IAAM,CACnBC,EAAI,KAAK,qCAAsC,CAAC,CAAC,SAAS,IAAI,EAC1D,SAAS,MACX,SAAS,KAAK,aAAaR,EAAS,SAAS,KAAK,UAAU,EAC5D,SAAS,KAAK,UAAU,IAAI,aAAa,EACzCQ,EAAI,KAAK,4BAA4B,EAEjCF,GACFA,EAAS,IAGXE,EAAI,KAAK,6BAA6B,EACtC,WAAWD,EAAQ,EAAE,EAEzB,EAGI,SAAS,aAAe,UAC1B,SAAS,iBAAiB,mBAAoBA,CAAM,EAEpDA,EAAO,CAEX,CAMO,SAASE,EAAcT,EAA4B,CACxD,IAAMU,EAAc,OAAO,WAAW,8BAA8B,EAE9DC,EAAeC,GAA4C,CAC3DA,EAAE,QACJZ,EAAQ,UAAU,IAAI,MAAM,EAE5BA,EAAQ,UAAU,OAAO,MAAM,CAEnC,EAEAW,EAAYD,CAAW,EACvBA,EAAY,iBAAiB,SAAUC,CAAW,CACpD,CAMO,SAASE,EAASC,EAAqB,CAC5C,IAAMC,EAAU,SAAS,eAAe,sBAAsB,EAC1DA,IACFA,EAAQ,YAAcD,EAE1B,CAQO,SAASE,EACdC,EACAC,EAAiB,KACT,CACR,GAAI,OAAOD,GAAS,SAAU,CAC5B,IAAME,EAAQF,EAAK,MAAM,GAAG,EACtBG,EAAWD,EAAMA,EAAM,OAAS,CAAC,GAAKF,EAC5C,OAAOG,EAAS,OAAO,CAAC,EAAE,YAAY,EAAIA,EAAS,MAAM,CAAC,CAC5D,CAEA,OAAOH,EAAKC,CAAM,GAAKD,EAAK,IAAS,OAAO,OAAOA,CAAI,EAAE,CAAC,GAAK,KACjE,CC9GO,SAASI,EAAgBC,EAG9B,CAEA,GAAI,YAAaA,GAAKA,EAAE,UAAY,QAAaA,EAAE,UAAY,OAC7D,MAAO,CAAE,EAAGA,EAAE,QAAS,EAAGA,EAAE,OAAQ,EAItC,GAAI,YAAaA,GAAKA,EAAE,SAAWA,EAAE,QAAQ,CAAC,EAAG,CAC/C,IAAMC,EAAQD,EAAE,QAAQ,CAAC,EAEzB,GAAIC,EAAM,UAAY,QAAaA,EAAM,UAAY,OACnD,MAAO,CAAE,EAAGA,EAAM,QAAS,EAAGA,EAAM,OAAQ,EAI9C,IAAMC,EAAgB,OAAO,WAAW,UAAU,OAClD,OAAIA,EACK,CACL,EAAGA,EAAc,EAAID,EAAM,QAC3B,EAAGC,EAAc,EAAID,EAAM,OAC7B,EAGK,CACL,EAAGA,EAAM,SAAW,OAAO,SAAW,GACtC,EAAGA,EAAM,SAAW,OAAO,SAAW,EACxC,CACF,CAEA,MAAO,CAAE,EAAG,EAAG,EAAG,CAAE,CACtB,CC9BO,SAASE,EACdC,EACAC,EAGY,CACZ,IAAIC,EAAa,GACbC,EAAS,EACTC,EAAS,EACTC,EAKO,KACPC,EAAU,GACVC,EAAuB,KACvBC,EAKO,KAGLC,EAAiB,IAAM,CAC3B,IAAMC,EAAQ,OAAO,WAAW,UAAU,MACtCF,GAAiBE,IACnB,OAAO,QACJ,aAAa,0BAA2B,CACvC,MAAAA,EACA,OAAQF,CACV,CAAC,EACA,MAAMG,EAAI,KAAK,EAElBH,EAAgB,MAGdN,IACFK,EAAQ,sBAAsBE,CAAc,EAEhD,EAEMG,EAAaC,GAA+B,CAEhD,GAAKA,EAAE,OAAuB,QAAQ,wBAAwB,EAC5D,OAIF,IAAMC,EAAgB,OAAO,WAAW,UAAU,OAClD,GAAIA,GAAiBA,EAAc,IAAM,OACvCb,EAAiB,QAAU,CAAE,GAAGa,CAAc,EAC9CH,EAAI,KAAKV,EAAiB,OAAO,UACxB,CAACA,EAAiB,QAAS,CACpCU,EAAI,KAAK,oDAAoD,EAC7D,MACF,CAEAT,EAAa,GACbI,EAAUO,EAAE,KAAK,WAAW,OAAO,EAGnC,IAAME,EAASC,EAAgBH,CAAC,EAChCV,EAASY,EAAO,EAChBX,EAASW,EAAO,EAChBV,EAAkB,CAAE,GAAGJ,EAAiB,OAAQ,EAGhDY,EAAE,eAAe,EACjBA,EAAE,gBAAgB,EAClBA,EAAE,yBAAyB,EAGvBP,IACFC,EAAQ,sBAAsBE,CAAc,GAG9C,IAAMC,EAAQ,OAAO,WAAW,UAAU,MAQtC,CAACJ,GAAWI,GACd,OAAO,QACJ,aAAa,kBAAmB,CAC/B,MAAAA,EACA,OAAQK,EAAO,EACf,OAAQA,EAAO,CACjB,CAAC,EACA,MAAMJ,EAAI,KAAK,EAIfL,GACH,OAAO,iBAAiB,UAAWW,CAAO,CAE9C,EAEMC,EAAYL,GAA+B,CAK/C,GAHAA,EAAE,eAAe,EACjBA,EAAE,gBAAgB,EAEd,CAACX,GAAc,CAACG,EAClB,OAIF,IAAMU,EAASC,EAAgBH,CAAC,EAC1BM,EAASJ,EAAO,EAAIZ,EACpBiB,EAASL,EAAO,EAAIX,EAEpBiB,EAAY,CAChB,EAAGhB,EAAgB,EAAIc,EACvB,EAAGd,EAAgB,EAAIe,EACvB,MAAOf,EAAgB,MACvB,OAAQA,EAAgB,MAC1B,EAGAJ,EAAiB,QAAUoB,EAG3Bb,EAAgBa,CAClB,EAEMJ,EAAWJ,GAA+B,CAU9C,GAPEA,EAAE,KAAK,WAAW,OAAO,GACxBA,EAAiB,SACjBA,EAAiB,QAAQ,OAAS,GAKjC,CAACX,EACH,OAGFA,EAAa,GACbG,EAAkB,KAGlB,OAAO,oBAAoB,UAAWY,CAAO,EAE7C,IAAMP,EAAQ,OAAO,WAAW,UAAU,MAGtCH,IACF,qBAAqBA,CAAK,EAC1BA,EAAQ,KAGJC,GAAiBE,IACnB,OAAO,QACJ,aAAa,0BAA2B,CACvC,MAAAA,EACA,OAAQF,CACV,CAAC,EACA,MAAMG,EAAI,KAAK,EAGlB,OAAO,UAAW,UAAU,OAAS,CAAE,GAAGH,CAAc,EACxDA,EAAgB,OAKhBF,GAAWL,EAAiB,UAC9B,OAAO,UAAW,UAAU,OAAS,CAAE,GAAGA,EAAiB,OAAQ,EACnEU,EAAI,KACF,uDACA,OAAO,WAAW,UAAU,MAC9B,GAIE,CAACL,GAAWI,GACd,OAAO,QAAQ,aAAa,gBAAiB,CAAE,MAAAA,CAAM,CAAC,EAAE,MAAMC,EAAI,KAAK,EAGrED,GACF,OAAO,QAAQ,aAAa,iBAAkB,CAAE,MAAAA,CAAM,CAAC,EAAE,MAAMC,EAAI,KAAK,CAE5E,EAGA,OAAAX,EAAQ,iBAAiB,YAAaY,CAAS,EAG/CZ,EAAQ,iBAAiB,aAAcY,EAAW,CAAE,QAAS,EAAM,CAAC,EAIpE,SAAS,iBAAiB,YAAaM,EAA2B,CAChE,QAAS,GACT,QAAS,EACX,CAAC,EAGD,SAAS,iBAAiB,WAAYD,EAAS,CAAE,QAAS,EAAM,CAAC,EACjE,SAAS,iBAAiB,cAAeA,EAAS,CAAE,QAAS,EAAM,CAAC,EAEpEN,EAAI,KAAK,iCAAiC,EAEnC,IAAM,CACXX,EAAQ,oBAAoB,YAAaY,CAAS,EAClDZ,EAAQ,oBAAoB,aAAcY,CAAS,EACnD,SAAS,oBAAoB,YAAaM,EAA2B,CACnE,QAAS,EACX,CAAC,EACD,SAAS,oBAAoB,WAAYD,CAAO,EAChD,SAAS,oBAAoB,cAAeA,CAAO,EACnD,OAAO,oBAAoB,UAAWA,CAAO,EAEzCV,GACF,qBAAqBA,CAAK,EAE5BI,EAAI,KAAK,8BAA8B,CACzC,CACF,CCrNO,SAASW,EACdC,EACAC,EACY,CAEZ,IAAMC,EAAe,SAAS,cAAc,KAAK,EACjDA,EAAa,GAAK,qBAClBA,EAAa,MAAM,QAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAY7B,SAAS,KAAK,YAAYA,CAAY,EAEtC,IAAIC,EAAa,GACbC,EAAS,EACTC,EAAS,EACTC,EAAmC,KACnCC,EAAU,GACVC,EAAuB,KACvBC,EAA+B,KAG7BC,EAAuB,IAAM,CACjC,IAAMC,EAAQ,OAAO,WAAW,UAAU,MACtCF,GAAiBE,IACnB,OAAO,QACJ,aAAa,0BAA2B,CACvC,MAAAA,EACA,OAAQF,CACV,CAAC,EACA,MAAMG,EAAI,KAAK,EAElBH,EAAgB,MAGdN,IACFK,EAAQ,sBAAsBE,CAAoB,EAEtD,EAEMG,EAAeC,GAAqC,CAExD,GAAI,CAACb,EAAiB,QAAS,CAC7B,IAAMc,EAAgB,OAAO,WAAW,UAAU,OAClD,GAAIA,GAAiBA,EAAc,IAAM,OACvCd,EAAiB,QAAU,CAAE,GAAGc,CAAc,EAC9CH,EAAI,KACF,6DACAX,EAAiB,OACnB,MACK,CACLW,EAAI,KAAK,sDAAsD,EAC/D,MACF,CACF,CAEAT,EAAa,GACbI,EAAUO,EAAE,KAAK,WAAW,OAAO,EAGnC,IAAME,EAASC,EAAgBH,CAAC,EAChCV,EAASY,EAAO,EAChBX,EAASW,EAAO,EAChBV,EAAoB,CAAE,GAAGL,EAAiB,OAAQ,EAElDa,EAAE,eAAe,EACjBA,EAAE,gBAAgB,EAGdP,IACFC,EAAQ,sBAAsBE,CAAoB,GAGpD,IAAMC,EAAQ,OAAO,WAAW,UAAU,MAQtC,CAACJ,GAAWI,GACd,OAAO,QACJ,aAAa,oBAAqB,CACjC,MAAAA,EACA,OAAQK,EAAO,EACf,OAAQA,EAAO,CACjB,CAAC,EACA,MAAMJ,EAAI,KAAK,EAIfL,GACH,OAAO,iBAAiB,UAAWW,CAAS,CAEhD,EAEMC,EAAcL,GAAqC,CAWvD,GAVAF,EAAI,KACF,iCACAT,EACA,cACAW,EAAE,IACJ,EAEAA,EAAE,eAAe,EACjBA,EAAE,gBAAgB,EAEd,CAACX,GAAc,CAACG,EAAmB,CACrCM,EAAI,KACF,2CACAT,EACA,qBACAG,CACF,EACA,MACF,CAGA,IAAMU,EAASC,EAAgBH,CAAC,EAC1BM,EAASJ,EAAO,EAAIZ,EACpBiB,EAASL,EAAO,EAAIX,EAE1BO,EAAI,KAAK,qBAAsBI,EAAQ,SAAU,CAC/C,OAAAI,EACA,OAAAC,CACF,CAAC,EAED,IAAIC,EAAWhB,EAAkB,MAAQc,EACrCG,EAAYjB,EAAkB,OAASe,EAGvCrB,EAAa,SACfsB,EAAW,KAAK,IAAIA,EAAUtB,EAAa,QAAQ,OAAS,GAAG,EAC/DuB,EAAY,KAAK,IAAIA,EAAWvB,EAAa,QAAQ,QAAU,GAAG,IAElEsB,EAAW,KAAK,IAAIA,EAAU,GAAG,EACjCC,EAAY,KAAK,IAAIA,EAAW,GAAG,GAGjCvB,EAAa,UACfsB,EAAW,KAAK,IAAIA,EAAUtB,EAAa,QAAQ,OAAS,GAAI,EAChEuB,EAAY,KAAK,IAAIA,EAAWvB,EAAa,QAAQ,QAAU,GAAI,GAGrE,IAAMwB,EAAY,CAChB,EAAGlB,EAAkB,EACrB,EAAGA,EAAkB,EACrB,MAAO,KAAK,MAAMgB,CAAQ,EAC1B,OAAQ,KAAK,MAAMC,CAAS,CAC9B,EAEAX,EAAI,KAAK,wBAAyBY,CAAS,EAG3CvB,EAAiB,QAAUuB,EAG3Bf,EAAgBe,CAClB,EAEMN,EAAaJ,GAAsC,CACvD,GAAI,CAACX,EACH,OAGFA,EAAa,GACbG,EAAoB,KAGpB,OAAO,oBAAoB,UAAWY,CAAS,EAE/C,IAAMP,EAAQ,OAAO,WAAW,UAAU,MAGtCH,IACF,qBAAqBA,CAAK,EAC1BA,EAAQ,KAGJC,GAAiBE,IACnB,OAAO,QACJ,aAAa,0BAA2B,CACvC,MAAAA,EACA,OAAQF,CACV,CAAC,EACA,MAAMG,EAAI,KAAK,EAGlB,OAAO,UAAW,UAAU,OAAS,CAAE,GAAGH,CAAc,EACxDA,EAAgB,OAKhBF,GAAWN,EAAiB,UAC9B,OAAO,UAAW,UAAU,OAAS,CAAE,GAAGA,EAAiB,OAAQ,EACnEW,EAAI,KACF,yDACA,OAAO,WAAW,UAAU,MAC9B,GAIE,CAACL,GAAWI,GACd,OAAO,QACJ,aAAa,kBAAmB,CAAE,MAAAA,CAAM,CAAC,EACzC,MAAMC,EAAI,KAAK,EAGhBD,GACF,OAAO,QAAQ,aAAa,iBAAkB,CAAE,MAAAA,CAAM,CAAC,EAAE,MAAMC,EAAI,KAAK,CAE5E,EAGA,OAAAV,EAAa,iBAAiB,YAAaW,CAAW,EAGtDX,EAAa,iBAAiB,aAAcW,EAAa,CAAE,QAAS,EAAM,CAAC,EAI3E,SAAS,iBAAiB,YAAaM,EAAY,CACjD,QAAS,GACT,QAAS,EACX,CAAC,EAGD,SAAS,iBAAiB,WAAYD,EAAW,CAAE,QAAS,EAAM,CAAC,EACnE,SAAS,iBAAiB,cAAeA,EAAW,CAAE,QAAS,EAAM,CAAC,EAEtEN,EAAI,KAAK,mCAAmC,EAErC,IAAM,CACPV,EAAa,YACfA,EAAa,WAAW,YAAYA,CAAY,EAGlDA,EAAa,oBAAoB,YAAaW,CAAW,EACzDX,EAAa,oBAAoB,aAAcW,CAAW,EAE1D,SAAS,oBAAoB,YAAaM,EAAY,CACpD,QAAS,EACX,CAAC,EACD,SAAS,oBAAoB,WAAYD,CAAS,EAClD,SAAS,oBAAoB,cAAeA,CAAS,EACrD,OAAO,oBAAoB,UAAWA,CAAS,EAE3CV,GACF,qBAAqBA,CAAK,EAE5BI,EAAI,KAAK,gCAAgC,CAC3C,CACF,ECxQC,IAAM,CAwBL,GAvBAa,EAAI,KAAK,0BAA0B,EAG9B,OAAO,YACV,OAAO,UAAY,CACjB,SAAWC,GAAkB,CAE7B,EACA,WAAY,IAAM,CAElB,EACA,UAAW,CACT,MAAO,GACP,QAAS,GACT,SAAU,GACV,OAAQ,CAAC,EACT,YAAa,QACb,OAAQ,CAAE,EAAG,EAAG,EAAG,EAAG,MAAO,EAAG,OAAQ,CAAE,CAC5C,CACF,GAIE,OAAO,UAAU,UAAU,SAAU,CACvCD,EAAI,KAAK,4BAA4B,EACrC,MACF,CACA,OAAO,UAAU,UAAU,SAAW,GAEtC,IAAIE,EAAuB,KACvBC,EAAkB,MAIhBC,EAEF,CAAE,QAAS,IAAK,EAEhBC,EAAmC,KACnCC,EAAqC,KAGnCC,EAAUC,EAAc,OAAO,UAAU,UAAU,MAAM,EAGzDC,EAAgB,IAAY,CAEhC,GAAI,OAAO,WAAa,OAAO,UAAU,UAAU,MAAO,CACxDP,EAAQ,OAAO,UAAU,UAAU,MACnC,IAAMQ,EAAU,OAAO,UAAU,UAAU,QAG3C,OAAO,QACJ,aAAa,kBAAmB,CAAC,CAAC,EAClC,KAAMC,GAAiC,CAEtC,IAAMC,EADSD,GAAU,QACO,KAChCR,EAAUU,EAAWH,EAASE,CAAa,EAC3CE,EAASX,CAAO,EAGZ,OAAO,YACT,OAAO,UAAU,SAAYF,GAAkBa,EAASb,CAAK,EAC5D,OAAO,UAAkB,WAAa,IAAMa,EAASX,CAAO,EAEjE,CAAC,EACA,MAAM,IAAM,CACXA,EAAUU,EAAWH,EAAS,IAAI,EAClCI,EAASX,CAAO,EACZ,OAAO,YACT,OAAO,UAAU,SAAYF,GAAkBa,EAASb,CAAK,EAC5D,OAAO,UAAkB,WAAa,IAAMa,EAASX,CAAO,EAEjE,CAAC,EAGHW,EAASD,EAAWH,EAAS,IAAI,CAAC,EAGlC,OAAO,QAAQ,UACb,sBACCK,GAA6B,CAC5B,IAAMC,EAAYD,EAAK,OACjBE,EAAcJ,EAAWH,EAASM,CAAS,EAGjDF,EAASG,CAAW,EAGhB,OAAO,YACR,OAAO,UAAkB,WAAa,IAAMH,EAASG,CAAW,EAErE,CACF,CACF,CAGAC,EAAiB,EACjBC,EAAoB,EACpBC,EAAsB,EAGtBC,EAA4B,EAE5B,OAAO,QAAQ,UACb,oBACCN,GAAsD,CACrD,GAAM,CAAE,KAAAO,EAAM,OAAAC,CAAO,EAAIR,EACzBf,EAAI,KAAK,wBAAyBsB,EAAM,eAAgBC,CAAM,EAG9D,OAAO,UAAW,UAAU,YAAcD,EACtCC,GAAUA,EAAO,IAAM,SACzB,OAAO,UAAW,UAAU,OAASA,EACrCnB,EAAiB,QAAU,CAAE,GAAGmB,CAAO,GAIzCF,EAA4B,CAC9B,CACF,EACArB,EAAI,KAAK,iCAAiC,CAC5C,EAEMqB,EAA8B,IAAY,CAC9C,IAAMG,EAAa,OAAO,UAAW,UAAU,YACzCC,EAAe,OAAO,UAAW,UAAU,OAC3CC,EAAgB,OAAO,UAAW,UAAU,OAelD,GAbA1B,EAAI,KAAK,eAAgB0B,CAAa,EAGlCrB,IACFA,EAAY,EACZA,EAAc,MAEZC,IACFA,EAAc,EACdA,EAAgB,MAIdkB,IAAe,WAEjB,OAIF,GAAIE,GAAiBA,EAAc,IAAM,OACvCtB,EAAiB,QAAU,CAAE,GAAGsB,CAAc,EAC9C1B,EAAI,KAAK,mCAAoCI,EAAiB,OAAO,UAC5DqB,EAAa,YAAa,CAKnC,IAAME,EAAIF,EAAa,iBAAiB,GAAK,EACvCG,EAAIH,EAAa,iBAAiB,GAAK,EAE7CrB,EAAiB,QAAU,CACzB,EAAG,EAAauB,EAChB,EAAG,EAAaC,EAChB,MAAOH,EAAa,YAAY,OAAS,IACzC,OAAQA,EAAa,YAAY,QAAU,GAC7C,EAEAzB,EAAI,KAAK,kCAAmCI,EAAiB,OAAO,CACtE,CAGA,IAAMyB,EAAYJ,EAAa,UAAY,GACrCK,EAAcL,EAAa,YAAc,GAE/CzB,EAAI,KAAK,WAAY6B,EAAW,aAAcC,CAAW,EAGrDD,IACFxB,EAAc0B,EAAoBxB,EAASH,CAAgB,GAIzD0B,IACFxB,EAAgB0B,EAAoBP,EAAcrB,CAAgB,EAEtE,EAIA,OAAO,QAAQ,UAAU,sBAAwB6B,GAAc,CAC7D7B,EAAiB,QAAU,CAAE,GAAG6B,CAAU,EAC1C,OAAO,UAAW,UAAU,OAAS,CAAE,GAAGA,CAAU,CACtD,CAAC,EACDjC,EAAI,KAAK,mCAAmC,EAG5C,SAAS,iBACP,aACCkC,GAAM,CACLlC,EAAI,KAAK,wBAAyBkC,EAAE,MAAM,CAC5C,EACA,CAAE,QAAS,GAAO,QAAS,EAAK,CAClC,EAEA,SAAS,iBACP,cACCA,GAAM,CACLlC,EAAI,KAAK,yBAA0BkC,EAAE,MAAM,EAC3ClC,EAAI,KAAK,eAAgB,IAAI,MAAM,EAAE,KAAK,CAC5C,EACA,CAAE,QAAS,EAAK,CAClB,EAGAmC,EAAc5B,EAAS,IAAM,CAC3B6B,EAAc7B,CAAO,EACrBE,EAAc,CAChB,CAAC,EAGD,OAAO,UAAU,SAAYR,GAAkB,CAC7Ca,EAASb,CAAK,CAChB,EAIA,OAAO,UAAU,WAAa,IAAM,CAElC,GAAI,OAAO,UAAW,CACpB,IAAMgB,EAAcJ,EAClB,OAAO,UAAU,UAAU,SAAW,OAAO,UAAU,UAAU,MACjE,IACF,EACAC,EAASG,CAAW,CACtB,CACF,CACF,GAAG",
|
|
6
|
+
"names": ["LOG_LEVEL_ORDER", "parseLogLevel", "value", "normalized", "isLogLevelEnabled", "level", "minLevel", "globalContext", "config", "resolveDefaultConfig", "baseConsole", "createLogger", "context", "args", "emit", "log", "emit", "record", "level", "isLogLevelEnabled", "config", "timestamp", "context", "mergeContext", "callsite", "captureCallsite", "prefix", "formatPrefix", "target", "consoleForLevel", "getBaseContext", "envAppId", "getEnvValue", "globalAppId", "detectProcessType", "globalContext", "processObj", "type", "resolveDefaultConfig", "envLevel", "parseLogLevel", "envFormat", "envPathMode", "isTest", "isRenderer", "getEnvBool", "useLiveConsole", "baseConsole", "parts", "file", "shortenPath", "err", "stack", "lines", "line", "trimmed", "match", "lineNumber", "columnNumber", "path", "mode", "normalized", "cwd", "normalizedPath", "distIndex", "sdkIndex", "segments", "key", "globalValue", "fallback", "value", "setupCloseButton", "closeBtn", "stopApp", "appId", "log", "setupMinimizeButton", "minBtn", "minimize", "setupToggleModeButton", "toggleBtn", "toggleMode", "createOverlay", "windowConfig", "overlay", "supportsToggle", "showTitle", "toggleButtonHtml", "titleHtml", "injectOverlay", "callback", "inject", "log", "setupDarkMode", "prefersDark", "updateTheme", "e", "setTitle", "title", "titleEl", "getAppName", "name", "locale", "parts", "readable", "getScreenCoords", "e", "touch", "currentBounds", "setupWindowDragging", "overlay", "currentBoundsRef", "isDragging", "startX", "startY", "dragStartBounds", "isTouch", "rafId", "pendingBounds", "updatePosition", "appId", "log", "startDrag", "e", "initialBounds", "coords", "getScreenCoords", "endDrag", "moveDrag", "deltaX", "deltaY", "newBounds", "setupWindowResizing", "windowConfig", "currentBoundsRef", "resizeHandle", "isResizing", "startX", "startY", "resizeStartBounds", "isTouch", "rafId", "pendingBounds", "updateResizePosition", "appId", "log", "startResize", "e", "initialBounds", "coords", "getScreenCoords", "endResize", "moveResize", "deltaX", "deltaY", "newWidth", "newHeight", "newBounds", "log", "title", "appId", "appName", "currentBoundsRef", "cleanupDrag", "cleanupResize", "overlay", "createOverlay", "setupHandlers", "rawName", "response", "currentLocale", "getAppName", "setTitle", "data", "newLocale", "currentName", "setupCloseButton", "setupMinimizeButton", "setupToggleModeButton", "setupFloatingWindowControls", "mode", "bounds", "windowMode", "windowConfig", "initialBounds", "x", "y", "isMovable", "isResizable", "setupWindowDragging", "setupWindowResizing", "newBounds", "e", "injectOverlay", "setupDarkMode"]
|
|
7
7
|
}
|
package/dist/app-frame/frame.css
CHANGED
|
@@ -2,185 +2,222 @@
|
|
|
2
2
|
|
|
3
3
|
/* Squircle container styling */
|
|
4
4
|
html {
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
background: transparent !important;
|
|
6
|
+
height: 100%;
|
|
7
|
+
/* Ensure shadows aren't clipped by html bounds if we want them,
|
|
8
|
+
but for a frameless window filling the view, we typically clip.
|
|
9
|
+
However, if we want shadows, we need margin.
|
|
10
|
+
Assuming view fills window exactly, we just want content clipped. */
|
|
11
|
+
overflow: hidden;
|
|
12
|
+
border-radius: 20px;
|
|
13
|
+
/* Force clip-path to cleanly cut background pixels in Electron views */
|
|
14
|
+
clip-path: inset(0 round 20px);
|
|
15
|
+
/* Composite layer promotion to help with anti-aliasing of rounded corners */
|
|
16
|
+
-webkit-backface-visibility: hidden;
|
|
17
|
+
backface-visibility: hidden;
|
|
18
|
+
transform: translate3d(0, 0, 0);
|
|
19
|
+
box-sizing: border-box;
|
|
7
20
|
}
|
|
8
21
|
|
|
9
|
-
html,
|
|
10
22
|
body {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
23
|
+
margin: 0;
|
|
24
|
+
padding: 0;
|
|
25
|
+
height: 100%;
|
|
26
|
+
width: 100%;
|
|
27
|
+
border-radius: 20px;
|
|
28
|
+
|
|
29
|
+
/* Inner border to help definition against dark backgrounds */
|
|
30
|
+
box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.1);
|
|
31
|
+
|
|
32
|
+
overflow: hidden;
|
|
33
|
+
/* Apps should handle scrolling internally */
|
|
34
|
+
box-sizing: border-box;
|
|
35
|
+
|
|
36
|
+
/* Ensure body background is transparent to prevent canvas propagation */
|
|
37
|
+
background-color: transparent !important;
|
|
16
38
|
}
|
|
17
39
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
40
|
+
/* Paint background on a layer that DOES NOT propagate to canvas, allowing clip-path to work */
|
|
41
|
+
body::before {
|
|
42
|
+
content: "";
|
|
43
|
+
position: fixed;
|
|
44
|
+
top: 0;
|
|
45
|
+
left: 0;
|
|
46
|
+
width: 100%;
|
|
47
|
+
height: 100%;
|
|
48
|
+
background: var(--app-bg, var(--eden-color-bg-secondary));
|
|
49
|
+
backdrop-filter: var(--app-glass, none);
|
|
50
|
+
z-index: -1;
|
|
51
|
+
pointer-events: none;
|
|
23
52
|
}
|
|
24
53
|
|
|
25
54
|
#eden-app-frame-overlay#eden-app-frame-overlay {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
55
|
+
all: revert;
|
|
56
|
+
/* Now only set what we actually need */
|
|
57
|
+
position: fixed;
|
|
58
|
+
top: 0;
|
|
59
|
+
left: 0;
|
|
60
|
+
right: 0;
|
|
61
|
+
height: 40px;
|
|
62
|
+
background: transparent;
|
|
63
|
+
border-bottom: none;
|
|
64
|
+
border-radius: 20px 20px 0 0;
|
|
65
|
+
display: flex;
|
|
66
|
+
align-items: center;
|
|
67
|
+
justify-content: flex-end;
|
|
68
|
+
padding: 0 16px;
|
|
69
|
+
user-select: none;
|
|
70
|
+
z-index: 2147483647;
|
|
71
|
+
-webkit-app-region: no-drag;
|
|
72
|
+
touch-action: none;
|
|
73
|
+
-webkit-touch-callout: none;
|
|
74
|
+
-webkit-user-select: none;
|
|
75
|
+
pointer-events: auto;
|
|
76
|
+
will-change: transform;
|
|
77
|
+
font-family:
|
|
78
|
+
-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu,
|
|
79
|
+
Cantarell, sans-serif;
|
|
80
|
+
box-sizing: border-box;
|
|
50
81
|
}
|
|
51
82
|
|
|
52
83
|
#eden-app-frame-overlay.dark#eden-app-frame-overlay.dark {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
84
|
+
background: transparent;
|
|
85
|
+
border-bottom: none;
|
|
86
|
+
color: #cccccc;
|
|
56
87
|
}
|
|
57
88
|
|
|
58
89
|
#eden-app-frame-overlay #eden-app-frame-title {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
90
|
+
all: revert;
|
|
91
|
+
/* Now only set what we actually need */
|
|
92
|
+
position: absolute;
|
|
93
|
+
left: 50%;
|
|
94
|
+
transform: translateX(-50%);
|
|
95
|
+
font-size: 14px;
|
|
96
|
+
font-weight: 600;
|
|
97
|
+
color: #333;
|
|
98
|
+
overflow: hidden;
|
|
99
|
+
text-overflow: ellipsis;
|
|
100
|
+
white-space: nowrap;
|
|
101
|
+
max-width: calc(100% - 200px);
|
|
102
|
+
text-align: center;
|
|
103
|
+
font-family:
|
|
104
|
+
-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu,
|
|
105
|
+
Cantarell, sans-serif;
|
|
106
|
+
line-height: 1;
|
|
107
|
+
letter-spacing: -0.3px;
|
|
108
|
+
pointer-events: none;
|
|
109
|
+
background: rgba(255, 255, 255, 0.7);
|
|
110
|
+
backdrop-filter: blur(20px) saturate(180%);
|
|
111
|
+
padding: 8px 16px;
|
|
112
|
+
border-radius: 10px;
|
|
113
|
+
height: 32px;
|
|
114
|
+
display: flex;
|
|
115
|
+
align-items: center;
|
|
116
|
+
justify-content: center;
|
|
117
|
+
box-sizing: border-box;
|
|
118
|
+
box-shadow:
|
|
119
|
+
0 2px 8px rgba(0, 0, 0, 0.1),
|
|
120
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.5);
|
|
87
121
|
}
|
|
88
122
|
|
|
89
123
|
#eden-app-frame-overlay.dark #eden-app-frame-title {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
124
|
+
color: #ffffff;
|
|
125
|
+
background: rgba(40, 40, 40, 0.7);
|
|
126
|
+
backdrop-filter: blur(20px) saturate(180%);
|
|
127
|
+
box-shadow:
|
|
128
|
+
0 2px 8px rgba(0, 0, 0, 0.3),
|
|
129
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.1);
|
|
95
130
|
}
|
|
96
131
|
|
|
97
132
|
#eden-app-frame-overlay #eden-app-frame-controls {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
133
|
+
all: revert;
|
|
134
|
+
/* Now only set what we actually need */
|
|
135
|
+
display: flex;
|
|
136
|
+
gap: 8px;
|
|
137
|
+
-webkit-app-region: no-drag;
|
|
138
|
+
align-items: center;
|
|
139
|
+
background: rgba(255, 255, 255, 0.7);
|
|
140
|
+
backdrop-filter: blur(20px) saturate(180%);
|
|
141
|
+
padding: 4px;
|
|
142
|
+
border-radius: 10px;
|
|
143
|
+
height: 32px;
|
|
144
|
+
box-sizing: border-box;
|
|
145
|
+
box-shadow:
|
|
146
|
+
0 2px 8px rgba(0, 0, 0, 0.1),
|
|
147
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.5);
|
|
112
148
|
}
|
|
113
149
|
|
|
114
150
|
#eden-app-frame-overlay.dark #eden-app-frame-controls {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
151
|
+
background: rgba(40, 40, 40, 0.7);
|
|
152
|
+
backdrop-filter: blur(20px) saturate(180%);
|
|
153
|
+
box-shadow:
|
|
154
|
+
0 2px 8px rgba(0, 0, 0, 0.3),
|
|
155
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.1);
|
|
119
156
|
}
|
|
120
157
|
|
|
121
158
|
#eden-app-frame-overlay .eden-app-frame-button {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
159
|
+
all: revert;
|
|
160
|
+
/* Now only set what we actually need */
|
|
161
|
+
width: 24px;
|
|
162
|
+
height: 24px;
|
|
163
|
+
min-width: 24px;
|
|
164
|
+
min-height: 24px;
|
|
165
|
+
max-width: 24px;
|
|
166
|
+
max-height: 24px;
|
|
167
|
+
border: none;
|
|
168
|
+
border-radius: 6px;
|
|
169
|
+
background: transparent;
|
|
170
|
+
cursor: pointer;
|
|
171
|
+
display: flex;
|
|
172
|
+
align-items: center;
|
|
173
|
+
justify-content: center;
|
|
174
|
+
font-size: 16px;
|
|
175
|
+
transition: all 0.15s cubic-bezier(0.4, 0, 0.2, 1);
|
|
176
|
+
color: #666;
|
|
177
|
+
line-height: 1;
|
|
178
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif;
|
|
179
|
+
font-weight: 400;
|
|
180
|
+
padding: 0;
|
|
181
|
+
margin: 0;
|
|
182
|
+
box-sizing: border-box;
|
|
183
|
+
flex-shrink: 0;
|
|
147
184
|
}
|
|
148
185
|
|
|
149
186
|
#eden-app-frame-overlay.dark .eden-app-frame-button {
|
|
150
|
-
|
|
187
|
+
color: #aaa;
|
|
151
188
|
}
|
|
152
189
|
|
|
153
190
|
#eden-app-frame-overlay .eden-app-frame-button:hover {
|
|
154
|
-
|
|
155
|
-
|
|
191
|
+
background: rgba(0, 0, 0, 0.08);
|
|
192
|
+
transform: scale(1.05);
|
|
156
193
|
}
|
|
157
194
|
|
|
158
195
|
#eden-app-frame-overlay.dark .eden-app-frame-button:hover {
|
|
159
|
-
|
|
160
|
-
|
|
196
|
+
background: rgba(255, 255, 255, 0.12);
|
|
197
|
+
transform: scale(1.05);
|
|
161
198
|
}
|
|
162
199
|
|
|
163
200
|
#eden-app-frame-overlay .eden-app-frame-button.close:hover {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
201
|
+
background: #e81123;
|
|
202
|
+
color: white;
|
|
203
|
+
transform: scale(1.05);
|
|
167
204
|
}
|
|
168
205
|
|
|
169
206
|
#eden-app-frame-overlay .eden-app-frame-button:active {
|
|
170
|
-
|
|
207
|
+
transform: scale(0.95);
|
|
171
208
|
}
|
|
172
209
|
|
|
173
210
|
#eden-app-frame-overlay .eden-app-frame-button.minimize {
|
|
174
|
-
|
|
175
|
-
|
|
211
|
+
font-size: 20px;
|
|
212
|
+
font-weight: 300;
|
|
176
213
|
}
|
|
177
214
|
|
|
178
215
|
#eden-app-frame-overlay .eden-app-frame-button.close {
|
|
179
|
-
|
|
180
|
-
|
|
216
|
+
font-size: 20px;
|
|
217
|
+
font-weight: 400;
|
|
181
218
|
}
|
|
182
219
|
|
|
183
220
|
/* Adjust body to account for title bar */
|
|
184
221
|
body.eden-framed.eden-framed {
|
|
185
|
-
|
|
186
|
-
}
|
|
222
|
+
padding-top: 41px;
|
|
223
|
+
}
|