akanjs 3.0.0-beta.20 → 3.0.0-beta.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ko.md +0 -1
- package/README.md +0 -1
- package/base/baseEnv.ts +40 -3
- package/client/cookie.ts +56 -20
- package/client/device.ts +47 -95
- package/client/frameConfig.ts +2 -2
- package/client/native.ts +44 -0
- package/client/router.ts +11 -1
- package/client/rscNavigation.ts +5 -0
- package/client/storage.ts +68 -39
- package/fetch/client/fetchClient.ts +13 -4
- package/index.ts +47 -46
- package/package.json +6 -87
- package/server/devtools/signalSerializer.ts +1 -2
- package/server/hmr/devHmrController.ts +29 -11
- package/server/resolver/signal.resolver.ts +1 -10
- package/server/routeTreeBuilder.ts +8 -11
- package/server/routing/apiRouter.ts +15 -2
- package/server/rscClient.tsx +1 -2
- package/server/ssrFromRscRenderer.tsx +2 -0
- package/server/webRouter.ts +1 -0
- package/signal/CrossSiteGuard.ts +34 -2
- package/signal/endpoint.ts +12 -7
- package/signal/endpointInfo.ts +13 -0
- package/signal/internal.ts +9 -5
- package/signal/serializer/fetch.serializer.ts +6 -3
- package/signal/slice.ts +34 -24
- package/store/baseSt.ts +0 -1
- package/store/storeInstance.ts +29 -17
- package/types/client/cookie.d.ts +6 -4
- package/types/client/device.d.ts +7 -10
- package/types/client/native.d.ts +26 -0
- package/types/client/rscNavigation.d.ts +4 -0
- package/types/client/storage.d.ts +8 -1
- package/types/index.d.ts +48 -44
- package/types/server/hmr/devHmrController.d.ts +2 -1
- package/types/server/resolver/signal.resolver.d.ts +0 -1
- package/types/server/rscClient.d.ts +0 -3
- package/types/signal/CrossSiteGuard.d.ts +7 -2
- package/types/signal/endpoint.d.ts +1 -1
- package/types/signal/endpointInfo.d.ts +3 -0
- package/types/signal/slice.d.ts +3 -2
- package/types/store/baseSt.d.ts +0 -13
- package/types/vendor/@akanjs/native/packages/cli/src/api.d.ts +182 -0
- package/types/vendor/@akanjs/native/packages/cli/src/commands/build.d.ts +28 -0
- package/types/vendor/@akanjs/native/packages/cli/src/commands/compat.d.ts +2 -0
- package/types/vendor/@akanjs/native/packages/cli/src/commands/dev.d.ts +2 -0
- package/types/vendor/@akanjs/native/packages/cli/src/commands/doctor.d.ts +37 -0
- package/types/vendor/@akanjs/native/packages/cli/src/commands/plugin.d.ts +2 -0
- package/types/vendor/@akanjs/native/packages/cli/src/commands/signing.d.ts +2 -0
- package/types/vendor/@akanjs/native/packages/cli/src/commands/test.d.ts +2 -0
- package/types/vendor/@akanjs/native/packages/cli/src/commands/toolchain.d.ts +2 -0
- package/types/vendor/@akanjs/native/packages/cli/src/commands/update.d.ts +2 -0
- package/types/vendor/@akanjs/native/packages/cli/src/config.d.ts +278 -0
- package/types/vendor/@akanjs/native/packages/cli/src/index.d.ts +2 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/acl.d.ts +21 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/apilevel.d.ts +40 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/apk.d.ts +36 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/args.d.ts +9 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/boot.d.ts +32 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/chrome.d.ts +6 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/codegen.d.ts +94 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/compat.d.ts +49 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/configkeys.d.ts +2 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/csp.d.ts +51 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/env.d.ts +44 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/exec.d.ts +31 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/googleservices.d.ts +2 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/hmr.d.ts +120 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/html.d.ts +20 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/icons.d.ts +44 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/image.d.ts +21 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/iossigning.d.ts +81 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/launch.d.ts +51 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/log.d.ts +42 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/manifestmerge.d.ts +18 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/maven.d.ts +97 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/names.d.ts +45 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/native-plugins.d.ts +67 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/nativeconfig.d.ts +11 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/permissions.d.ts +10 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/plist.d.ts +11 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/png.d.ts +11 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/prepare.d.ts +138 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/privacy.d.ts +13 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/project.d.ts +208 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/root.d.ts +1 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/routes.d.ts +1 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/serve.d.ts +17 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/signing.d.ts +14 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/spec.d.ts +96 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/toolchains.d.ts +150 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/updates.d.ts +77 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/vectors.d.ts +13 -0
- package/types/vendor/@akanjs/native/packages/cli/src/lib/xml.d.ts +13 -0
- package/types/vendor/@akanjs/native/packages/cli/src/platforms/android.d.ts +57 -0
- package/types/vendor/@akanjs/native/packages/cli/src/platforms/desktop-update.d.ts +4 -0
- package/types/vendor/@akanjs/native/packages/cli/src/platforms/desktop.d.ts +40 -0
- package/types/vendor/@akanjs/native/packages/cli/src/platforms/index.d.ts +14 -0
- package/types/vendor/@akanjs/native/packages/cli/src/platforms/ios.d.ts +44 -0
- package/types/vendor/@akanjs/native/packages/cli/src/platforms/linux.d.ts +6 -0
- package/types/vendor/@akanjs/native/packages/cli/src/platforms/macos.d.ts +7 -0
- package/types/vendor/@akanjs/native/packages/cli/src/platforms/targets.d.ts +4 -0
- package/types/vendor/@akanjs/native/packages/cli/src/platforms/web-run.d.ts +15 -0
- package/types/vendor/@akanjs/native/packages/cli/src/platforms/web.d.ts +2 -0
- package/types/vendor/@akanjs/native/packages/cli/src/platforms/windows.d.ts +8 -0
- package/types/vendor/@akanjs/native/packages/cli/src/platforms.d.ts +1 -0
- package/types/vendor/@akanjs/native/packages/cli/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/packages/core/src/acl.d.ts +97 -0
- package/types/vendor/@akanjs/native/packages/core/src/boot.d.ts +66 -0
- package/types/vendor/@akanjs/native/packages/core/src/contract.d.ts +35 -0
- package/types/vendor/@akanjs/native/packages/core/src/errors.d.ts +27 -0
- package/types/vendor/@akanjs/native/packages/core/src/files.d.ts +23 -0
- package/types/vendor/@akanjs/native/packages/core/src/index.d.ts +14 -0
- package/types/vendor/@akanjs/native/packages/core/src/kernel.d.ts +112 -0
- package/types/vendor/@akanjs/native/packages/core/src/live.d.ts +12 -0
- package/types/vendor/@akanjs/native/packages/core/src/mime.d.ts +2 -0
- package/types/vendor/@akanjs/native/packages/core/src/plugin.d.ts +71 -0
- package/types/vendor/@akanjs/native/packages/core/src/protocol.d.ts +109 -0
- package/types/vendor/@akanjs/native/packages/core/src/runtime.d.ts +66 -0
- package/types/vendor/@akanjs/native/packages/core/src/state.d.ts +28 -0
- package/types/vendor/@akanjs/native/packages/core/src/testing.d.ts +41 -0
- package/types/vendor/@akanjs/native/packages/core/src/version.d.ts +2 -0
- package/types/vendor/@akanjs/native/packages/core/src/veto.d.ts +17 -0
- package/types/vendor/@akanjs/native/packages/core/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/packages/desktop/src/deeplinks.d.ts +24 -0
- package/types/vendor/@akanjs/native/packages/desktop/src/delta.d.ts +2 -0
- package/types/vendor/@akanjs/native/packages/desktop/src/dispatcher.d.ts +95 -0
- package/types/vendor/@akanjs/native/packages/desktop/src/ffi.d.ts +144 -0
- package/types/vendor/@akanjs/native/packages/desktop/src/host.d.ts +11 -0
- package/types/vendor/@akanjs/native/packages/desktop/src/lifecycle.d.ts +40 -0
- package/types/vendor/@akanjs/native/packages/desktop/src/main.d.ts +4 -0
- package/types/vendor/@akanjs/native/packages/desktop/src/page-veto.d.ts +17 -0
- package/types/vendor/@akanjs/native/packages/desktop/src/paths.d.ts +25 -0
- package/types/vendor/@akanjs/native/packages/desktop/src/plugin.d.ts +179 -0
- package/types/vendor/@akanjs/native/packages/react/src/index.d.ts +8 -0
- package/types/vendor/@akanjs/native/packages/react/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/accessibility/src/announce.d.ts +8 -0
- package/types/vendor/@akanjs/native/plugins/accessibility/src/index.d.ts +47 -0
- package/types/vendor/@akanjs/native/plugins/accessibility/src/web.d.ts +4 -0
- package/types/vendor/@akanjs/native/plugins/accessibility/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/app/src/desktop.d.ts +3 -0
- package/types/vendor/@akanjs/native/plugins/app/src/index.d.ts +66 -0
- package/types/vendor/@akanjs/native/plugins/app/src/web.d.ts +2 -0
- package/types/vendor/@akanjs/native/plugins/app/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/app-state/src/index.d.ts +19 -0
- package/types/vendor/@akanjs/native/plugins/app-state/src/web.d.ts +2 -0
- package/types/vendor/@akanjs/native/plugins/app-state/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/appearance/src/desktop.d.ts +9 -0
- package/types/vendor/@akanjs/native/plugins/appearance/src/index.d.ts +32 -0
- package/types/vendor/@akanjs/native/plugins/appearance/src/setting.d.ts +6 -0
- package/types/vendor/@akanjs/native/plugins/appearance/src/web.d.ts +3 -0
- package/types/vendor/@akanjs/native/plugins/appearance/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/auth-session/src/args.d.ts +18 -0
- package/types/vendor/@akanjs/native/plugins/auth-session/src/desktop.d.ts +17 -0
- package/types/vendor/@akanjs/native/plugins/auth-session/src/index.d.ts +41 -0
- package/types/vendor/@akanjs/native/plugins/auth-session/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/autostart/src/desktop.d.ts +44 -0
- package/types/vendor/@akanjs/native/plugins/autostart/src/index.d.ts +44 -0
- package/types/vendor/@akanjs/native/plugins/autostart/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/badge/src/count.d.ts +4 -0
- package/types/vendor/@akanjs/native/plugins/badge/src/desktop.d.ts +3 -0
- package/types/vendor/@akanjs/native/plugins/badge/src/index.d.ts +37 -0
- package/types/vendor/@akanjs/native/plugins/badge/src/web.d.ts +2 -0
- package/types/vendor/@akanjs/native/plugins/badge/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/biometric/src/index.d.ts +53 -0
- package/types/vendor/@akanjs/native/plugins/biometric/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/browser/src/args.d.ts +8 -0
- package/types/vendor/@akanjs/native/plugins/browser/src/desktop.d.ts +9 -0
- package/types/vendor/@akanjs/native/plugins/browser/src/index.d.ts +36 -0
- package/types/vendor/@akanjs/native/plugins/browser/src/web.d.ts +2 -0
- package/types/vendor/@akanjs/native/plugins/browser/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/camera/src/desktop.d.ts +5 -0
- package/types/vendor/@akanjs/native/plugins/camera/src/index.d.ts +55 -0
- package/types/vendor/@akanjs/native/plugins/camera/src/web.d.ts +2 -0
- package/types/vendor/@akanjs/native/plugins/camera/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/clipboard/src/desktop.d.ts +8 -0
- package/types/vendor/@akanjs/native/plugins/clipboard/src/index.d.ts +40 -0
- package/types/vendor/@akanjs/native/plugins/clipboard/src/web.d.ts +2 -0
- package/types/vendor/@akanjs/native/plugins/clipboard/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/device/src/desktop.d.ts +33 -0
- package/types/vendor/@akanjs/native/plugins/device/src/index.d.ts +55 -0
- package/types/vendor/@akanjs/native/plugins/device/src/web.d.ts +22 -0
- package/types/vendor/@akanjs/native/plugins/device/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/dialog/src/desktop.d.ts +3 -0
- package/types/vendor/@akanjs/native/plugins/dialog/src/index.d.ts +60 -0
- package/types/vendor/@akanjs/native/plugins/dialog/src/options.d.ts +29 -0
- package/types/vendor/@akanjs/native/plugins/dialog/src/web.d.ts +2 -0
- package/types/vendor/@akanjs/native/plugins/dialog/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/dock/src/desktop.d.ts +3 -0
- package/types/vendor/@akanjs/native/plugins/dock/src/index.d.ts +46 -0
- package/types/vendor/@akanjs/native/plugins/dock/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/file-picker/src/common.d.ts +33 -0
- package/types/vendor/@akanjs/native/plugins/file-picker/src/desktop.d.ts +9 -0
- package/types/vendor/@akanjs/native/plugins/file-picker/src/index.d.ts +84 -0
- package/types/vendor/@akanjs/native/plugins/file-picker/src/web.d.ts +6 -0
- package/types/vendor/@akanjs/native/plugins/file-picker/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/filesystem/src/common.d.ts +49 -0
- package/types/vendor/@akanjs/native/plugins/filesystem/src/desktop.d.ts +8 -0
- package/types/vendor/@akanjs/native/plugins/filesystem/src/index.d.ts +123 -0
- package/types/vendor/@akanjs/native/plugins/filesystem/src/web.d.ts +2 -0
- package/types/vendor/@akanjs/native/plugins/filesystem/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/geolocation/src/index.d.ts +93 -0
- package/types/vendor/@akanjs/native/plugins/geolocation/src/web.d.ts +11 -0
- package/types/vendor/@akanjs/native/plugins/geolocation/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/global-shortcut/src/desktop.d.ts +3 -0
- package/types/vendor/@akanjs/native/plugins/global-shortcut/src/index.d.ts +52 -0
- package/types/vendor/@akanjs/native/plugins/global-shortcut/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/haptics/src/index.d.ts +31 -0
- package/types/vendor/@akanjs/native/plugins/haptics/src/web.d.ts +2 -0
- package/types/vendor/@akanjs/native/plugins/haptics/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/http/src/common.d.ts +71 -0
- package/types/vendor/@akanjs/native/plugins/http/src/desktop.d.ts +5 -0
- package/types/vendor/@akanjs/native/plugins/http/src/index.d.ts +104 -0
- package/types/vendor/@akanjs/native/plugins/http/src/web.d.ts +2 -0
- package/types/vendor/@akanjs/native/plugins/http/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/iap/src/index.d.ts +171 -0
- package/types/vendor/@akanjs/native/plugins/iap/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/keep-awake/src/desktop.d.ts +15 -0
- package/types/vendor/@akanjs/native/plugins/keep-awake/src/index.d.ts +33 -0
- package/types/vendor/@akanjs/native/plugins/keep-awake/src/web.d.ts +2 -0
- package/types/vendor/@akanjs/native/plugins/keep-awake/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/keyboard/src/index.d.ts +42 -0
- package/types/vendor/@akanjs/native/plugins/keyboard/src/web.d.ts +2 -0
- package/types/vendor/@akanjs/native/plugins/keyboard/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/local-notifications/src/desktop.d.ts +29 -0
- package/types/vendor/@akanjs/native/plugins/local-notifications/src/index.d.ts +126 -0
- package/types/vendor/@akanjs/native/plugins/local-notifications/src/schedule.d.ts +38 -0
- package/types/vendor/@akanjs/native/plugins/local-notifications/src/timers.d.ts +25 -0
- package/types/vendor/@akanjs/native/plugins/local-notifications/src/web.d.ts +4 -0
- package/types/vendor/@akanjs/native/plugins/local-notifications/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/menu/src/desktop.d.ts +3 -0
- package/types/vendor/@akanjs/native/plugins/menu/src/index.d.ts +85 -0
- package/types/vendor/@akanjs/native/plugins/menu/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/network/src/index.d.ts +22 -0
- package/types/vendor/@akanjs/native/plugins/network/src/web.d.ts +3 -0
- package/types/vendor/@akanjs/native/plugins/network/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/opener/src/desktop.d.ts +14 -0
- package/types/vendor/@akanjs/native/plugins/opener/src/index.d.ts +33 -0
- package/types/vendor/@akanjs/native/plugins/opener/src/url.d.ts +16 -0
- package/types/vendor/@akanjs/native/plugins/opener/src/web.d.ts +2 -0
- package/types/vendor/@akanjs/native/plugins/opener/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/preferences/src/desktop.d.ts +3 -0
- package/types/vendor/@akanjs/native/plugins/preferences/src/index.d.ts +26 -0
- package/types/vendor/@akanjs/native/plugins/preferences/src/web.d.ts +2 -0
- package/types/vendor/@akanjs/native/plugins/preferences/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/push/src/index.d.ts +57 -0
- package/types/vendor/@akanjs/native/plugins/push/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/screen/src/desktop.d.ts +3 -0
- package/types/vendor/@akanjs/native/plugins/screen/src/index.d.ts +70 -0
- package/types/vendor/@akanjs/native/plugins/screen/src/web.d.ts +18 -0
- package/types/vendor/@akanjs/native/plugins/screen/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/screen-orientation/src/index.d.ts +32 -0
- package/types/vendor/@akanjs/native/plugins/screen-orientation/src/types.d.ts +8 -0
- package/types/vendor/@akanjs/native/plugins/screen-orientation/src/web.d.ts +3 -0
- package/types/vendor/@akanjs/native/plugins/screen-orientation/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/secure-storage/src/desktop.d.ts +16 -0
- package/types/vendor/@akanjs/native/plugins/secure-storage/src/index.d.ts +39 -0
- package/types/vendor/@akanjs/native/plugins/secure-storage/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/share/src/index.d.ts +55 -0
- package/types/vendor/@akanjs/native/plugins/share/src/options.d.ts +6 -0
- package/types/vendor/@akanjs/native/plugins/share/src/web.d.ts +5 -0
- package/types/vendor/@akanjs/native/plugins/share/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/single-instance/src/desktop.d.ts +8 -0
- package/types/vendor/@akanjs/native/plugins/single-instance/src/index.d.ts +25 -0
- package/types/vendor/@akanjs/native/plugins/single-instance/src/socket.d.ts +46 -0
- package/types/vendor/@akanjs/native/plugins/single-instance/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/splash-screen/src/index.d.ts +19 -0
- package/types/vendor/@akanjs/native/plugins/splash-screen/src/web.d.ts +4 -0
- package/types/vendor/@akanjs/native/plugins/splash-screen/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/sqlite/src/common.d.ts +34 -0
- package/types/vendor/@akanjs/native/plugins/sqlite/src/desktop.d.ts +6 -0
- package/types/vendor/@akanjs/native/plugins/sqlite/src/index.d.ts +115 -0
- package/types/vendor/@akanjs/native/plugins/sqlite/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/toast/src/index.d.ts +30 -0
- package/types/vendor/@akanjs/native/plugins/toast/src/queue.d.ts +23 -0
- package/types/vendor/@akanjs/native/plugins/toast/src/web.d.ts +2 -0
- package/types/vendor/@akanjs/native/plugins/toast/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/tray/src/desktop.d.ts +3 -0
- package/types/vendor/@akanjs/native/plugins/tray/src/index.d.ts +113 -0
- package/types/vendor/@akanjs/native/plugins/tray/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/updates/src/desktop.d.ts +4 -0
- package/types/vendor/@akanjs/native/plugins/updates/src/index.d.ts +68 -0
- package/types/vendor/@akanjs/native/plugins/updates/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/window/src/desktop.d.ts +6 -0
- package/types/vendor/@akanjs/native/plugins/window/src/index.d.ts +185 -0
- package/types/vendor/@akanjs/native/plugins/window/src/web.d.ts +2 -0
- package/types/vendor/@akanjs/native/plugins/window/src.d.ts +1 -0
- package/types/vendor/@akanjs/native/plugins/window-state/src/desktop.d.ts +7 -0
- package/types/vendor/@akanjs/native/plugins/window-state/src/index.d.ts +33 -0
- package/types/vendor/@akanjs/native/plugins/window-state/src/state.d.ts +39 -0
- package/types/vendor/@akanjs/native/plugins/window-state/src.d.ts +1 -0
- package/types/webkit/index.d.ts +0 -2
- package/types/webkit/nativeNavigation.d.ts +25 -0
- package/types/webkit/nativePurchase.d.ts +37 -0
- package/types/webkit/useCamera.d.ts +13 -15
- package/types/webkit/useGeoLocation.d.ts +4 -5
- package/types/webkit/usePurchase.d.ts +12 -16
- package/ui/Link/Anchor.tsx +2 -5
- package/ui/System/Client.tsx +2 -6
- package/vendor/@akanjs/native/LICENSE +21 -0
- package/vendor/@akanjs/native/README.ko.md +88 -0
- package/vendor/@akanjs/native/README.md +93 -0
- package/vendor/@akanjs/native/THIRD_PARTY_NOTICES.md +237 -0
- package/vendor/@akanjs/native/native/android/maven.lock.json +1751 -0
- package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeAcl.kt +243 -0
- package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeActivity.kt +936 -0
- package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeApplication.kt +189 -0
- package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeAssetServer.kt +225 -0
- package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeBridge.kt +444 -0
- package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeCompat.kt +55 -0
- package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeContract.kt +99 -0
- package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeEd25519.kt +100 -0
- package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeFileProvider.kt +71 -0
- package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeKernel.kt +324 -0
- package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativePlugin.kt +361 -0
- package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeSpec.kt +100 -0
- package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeUpdates.kt +305 -0
- package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeVectors.kt +132 -0
- package/vendor/@akanjs/native/native/desktop/Cargo.lock +2565 -0
- package/vendor/@akanjs/native/native/desktop/Cargo.toml +49 -0
- package/vendor/@akanjs/native/native/desktop/build.rs +19 -0
- package/vendor/@akanjs/native/native/desktop/rust-toolchain.toml +7 -0
- package/vendor/@akanjs/native/native/desktop/src/accelerator.rs +466 -0
- package/vendor/@akanjs/native/native/desktop/src/autostart.rs +158 -0
- package/vendor/@akanjs/native/native/desktop/src/camera.rs +53 -0
- package/vendor/@akanjs/native/native/desktop/src/chrome.rs +710 -0
- package/vendor/@akanjs/native/native/desktop/src/contract.rs +105 -0
- package/vendor/@akanjs/native/native/desktop/src/devproxy.rs +234 -0
- package/vendor/@akanjs/native/native/desktop/src/dialog_args.rs +189 -0
- package/vendor/@akanjs/native/native/desktop/src/dock.rs +209 -0
- package/vendor/@akanjs/native/native/desktop/src/hotkey.rs +209 -0
- package/vendor/@akanjs/native/native/desktop/src/js_panels.rs +125 -0
- package/vendor/@akanjs/native/native/desktop/src/json.rs +272 -0
- package/vendor/@akanjs/native/native/desktop/src/keychain.rs +151 -0
- package/vendor/@akanjs/native/native/desktop/src/lib.rs +2185 -0
- package/vendor/@akanjs/native/native/desktop/src/linux/appearance.rs +177 -0
- package/vendor/@akanjs/native/native/desktop/src/linux/camera.rs +11 -0
- package/vendor/@akanjs/native/native/desktop/src/linux/clipboard.rs +48 -0
- package/vendor/@akanjs/native/native/desktop/src/linux/device.rs +9 -0
- package/vendor/@akanjs/native/native/desktop/src/linux/dialogs.rs +348 -0
- package/vendor/@akanjs/native/native/desktop/src/linux/dock.rs +146 -0
- package/vendor/@akanjs/native/native/desktop/src/linux/hotkey.rs +228 -0
- package/vendor/@akanjs/native/native/desktop/src/linux/keychain.rs +243 -0
- package/vendor/@akanjs/native/native/desktop/src/linux/menu.rs +445 -0
- package/vendor/@akanjs/native/native/desktop/src/linux/mod.rs +116 -0
- package/vendor/@akanjs/native/native/desktop/src/linux/notify.rs +211 -0
- package/vendor/@akanjs/native/native/desktop/src/linux/open.rs +79 -0
- package/vendor/@akanjs/native/native/desktop/src/linux/power.rs +155 -0
- package/vendor/@akanjs/native/native/desktop/src/linux/screen.rs +158 -0
- package/vendor/@akanjs/native/native/desktop/src/linux/tray.rs +604 -0
- package/vendor/@akanjs/native/native/desktop/src/menu.rs +517 -0
- package/vendor/@akanjs/native/native/desktop/src/navigation.rs +381 -0
- package/vendor/@akanjs/native/native/desktop/src/notify.rs +411 -0
- package/vendor/@akanjs/native/native/desktop/src/notify_schedule.rs +382 -0
- package/vendor/@akanjs/native/native/desktop/src/page_menu.rs +287 -0
- package/vendor/@akanjs/native/native/desktop/src/panels.rs +333 -0
- package/vendor/@akanjs/native/native/desktop/src/placement.rs +92 -0
- package/vendor/@akanjs/native/native/desktop/src/routes.rs +153 -0
- package/vendor/@akanjs/native/native/desktop/src/screen.rs +190 -0
- package/vendor/@akanjs/native/native/desktop/src/tray.rs +279 -0
- package/vendor/@akanjs/native/native/desktop/src/vectors.rs +126 -0
- package/vendor/@akanjs/native/native/desktop/src/win/appearance.rs +51 -0
- package/vendor/@akanjs/native/native/desktop/src/win/autostart.rs +77 -0
- package/vendor/@akanjs/native/native/desktop/src/win/camera.rs +34 -0
- package/vendor/@akanjs/native/native/desktop/src/win/clipboard.rs +106 -0
- package/vendor/@akanjs/native/native/desktop/src/win/device.rs +80 -0
- package/vendor/@akanjs/native/native/desktop/src/win/dialogs.rs +917 -0
- package/vendor/@akanjs/native/native/desktop/src/win/dock.rs +228 -0
- package/vendor/@akanjs/native/native/desktop/src/win/hotkey.rs +110 -0
- package/vendor/@akanjs/native/native/desktop/src/win/keychain.rs +103 -0
- package/vendor/@akanjs/native/native/desktop/src/win/menu.rs +500 -0
- package/vendor/@akanjs/native/native/desktop/src/win/mod.rs +100 -0
- package/vendor/@akanjs/native/native/desktop/src/win/msgwin.rs +86 -0
- package/vendor/@akanjs/native/native/desktop/src/win/notify.rs +334 -0
- package/vendor/@akanjs/native/native/desktop/src/win/open.rs +127 -0
- package/vendor/@akanjs/native/native/desktop/src/win/power.rs +64 -0
- package/vendor/@akanjs/native/native/desktop/src/win/registry.rs +87 -0
- package/vendor/@akanjs/native/native/desktop/src/win/screen.rs +127 -0
- package/vendor/@akanjs/native/native/desktop/src/win/tray.rs +280 -0
- package/vendor/@akanjs/native/native/ios/Sources/AkanNativeAcl.swift +241 -0
- package/vendor/@akanjs/native/native/ios/Sources/AkanNativeApp.swift +285 -0
- package/vendor/@akanjs/native/native/ios/Sources/AkanNativeBridge.swift +407 -0
- package/vendor/@akanjs/native/native/ios/Sources/AkanNativeContract.swift +106 -0
- package/vendor/@akanjs/native/native/ios/Sources/AkanNativeKernel.swift +317 -0
- package/vendor/@akanjs/native/native/ios/Sources/AkanNativePlugin.swift +250 -0
- package/vendor/@akanjs/native/native/ios/Sources/AkanNativeSchemeHandler.swift +209 -0
- package/vendor/@akanjs/native/native/ios/Sources/AkanNativeShell.swift +161 -0
- package/vendor/@akanjs/native/native/ios/Sources/AkanNativeSpec.swift +143 -0
- package/vendor/@akanjs/native/native/ios/Sources/AkanNativeUpdates.swift +270 -0
- package/vendor/@akanjs/native/native/ios/Sources/AkanNativeVectors.swift +155 -0
- package/vendor/@akanjs/native/native/ios/Sources/AkanNativeViewController.swift +371 -0
- package/vendor/@akanjs/native/packages/cli/src/api.ts +600 -0
- package/vendor/@akanjs/native/packages/cli/src/commands/build.ts +101 -0
- package/vendor/@akanjs/native/packages/cli/src/commands/compat.ts +53 -0
- package/vendor/@akanjs/native/packages/cli/src/commands/dev.ts +249 -0
- package/vendor/@akanjs/native/packages/cli/src/commands/doctor.ts +536 -0
- package/vendor/@akanjs/native/packages/cli/src/commands/plugin.ts +164 -0
- package/vendor/@akanjs/native/packages/cli/src/commands/signing.ts +32 -0
- package/vendor/@akanjs/native/packages/cli/src/commands/test.ts +130 -0
- package/vendor/@akanjs/native/packages/cli/src/commands/toolchain.ts +143 -0
- package/vendor/@akanjs/native/packages/cli/src/commands/update.ts +168 -0
- package/vendor/@akanjs/native/packages/cli/src/config.ts +257 -0
- package/vendor/@akanjs/native/packages/cli/src/index.ts +77 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/acl.ts +420 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/apilevel.ts +245 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/apk.ts +203 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/args.ts +44 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/boot.ts +73 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/chrome.ts +89 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/codegen.ts +1128 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/compat.ts +185 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/configkeys.ts +91 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/csp.ts +198 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/env.ts +257 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/exec.ts +104 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/googleservices.ts +53 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/hmr.ts +534 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/html.ts +63 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/icons.ts +316 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/image.ts +175 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/iossigning.ts +295 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/launch.ts +98 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/log.ts +105 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/manifestmerge.ts +107 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/maven.ts +244 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/names.ts +202 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/native-plugins.ts +326 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/nativeconfig.ts +68 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/permissions.ts +80 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/plist.ts +139 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/png.ts +240 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/prepare.ts +290 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/privacy.ts +64 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/project.ts +710 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/root.ts +18 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/routes.ts +3 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/serve.ts +83 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/signing.ts +117 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/spec.ts +521 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/toolchains.ts +579 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/updates.ts +160 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/vectors.ts +121 -0
- package/vendor/@akanjs/native/packages/cli/src/lib/xml.ts +72 -0
- package/vendor/@akanjs/native/packages/cli/src/platforms/android.ts +1320 -0
- package/vendor/@akanjs/native/packages/cli/src/platforms/desktop-update.ts +78 -0
- package/vendor/@akanjs/native/packages/cli/src/platforms/desktop.ts +279 -0
- package/vendor/@akanjs/native/packages/cli/src/platforms/index.ts +31 -0
- package/vendor/@akanjs/native/packages/cli/src/platforms/ios.ts +801 -0
- package/vendor/@akanjs/native/packages/cli/src/platforms/linux.ts +52 -0
- package/vendor/@akanjs/native/packages/cli/src/platforms/macos.ts +97 -0
- package/vendor/@akanjs/native/packages/cli/src/platforms/targets.ts +12 -0
- package/vendor/@akanjs/native/packages/cli/src/platforms/web-run.ts +69 -0
- package/vendor/@akanjs/native/packages/cli/src/platforms/web.ts +28 -0
- package/vendor/@akanjs/native/packages/cli/src/platforms/windows.ts +82 -0
- package/vendor/@akanjs/native/packages/core/contract.json +96 -0
- package/vendor/@akanjs/native/packages/core/src/acl.ts +272 -0
- package/vendor/@akanjs/native/packages/core/src/boot.ts +97 -0
- package/vendor/@akanjs/native/packages/core/src/contract.ts +100 -0
- package/vendor/@akanjs/native/packages/core/src/errors.ts +95 -0
- package/vendor/@akanjs/native/packages/core/src/files.ts +105 -0
- package/vendor/@akanjs/native/packages/core/src/index.ts +35 -0
- package/vendor/@akanjs/native/packages/core/src/kernel.ts +281 -0
- package/vendor/@akanjs/native/packages/core/src/live.ts +62 -0
- package/vendor/@akanjs/native/packages/core/src/mime.ts +8 -0
- package/vendor/@akanjs/native/packages/core/src/plugin.ts +358 -0
- package/vendor/@akanjs/native/packages/core/src/protocol.ts +194 -0
- package/vendor/@akanjs/native/packages/core/src/runtime.ts +520 -0
- package/vendor/@akanjs/native/packages/core/src/state.ts +46 -0
- package/vendor/@akanjs/native/packages/core/src/testing.ts +176 -0
- package/vendor/@akanjs/native/packages/core/src/version.ts +2 -0
- package/vendor/@akanjs/native/packages/core/src/veto.ts +55 -0
- package/vendor/@akanjs/native/packages/core/vectors/acl.json +57 -0
- package/vendor/@akanjs/native/packages/core/vectors/bridge.json +76 -0
- package/vendor/@akanjs/native/packages/core/vectors/ed25519.json +29 -0
- package/vendor/@akanjs/native/packages/core/vectors/ids.json +73 -0
- package/vendor/@akanjs/native/packages/core/vectors/navigation.json +75 -0
- package/vendor/@akanjs/native/packages/core/vectors/ranges.json +39 -0
- package/vendor/@akanjs/native/packages/core/vectors/retained.json +17 -0
- package/vendor/@akanjs/native/packages/core/vectors/routes.json +66 -0
- package/vendor/@akanjs/native/packages/core/vectors/scope.json +143 -0
- package/vendor/@akanjs/native/packages/desktop/src/deeplinks.ts +143 -0
- package/vendor/@akanjs/native/packages/desktop/src/delta.ts +174 -0
- package/vendor/@akanjs/native/packages/desktop/src/dispatcher.ts +679 -0
- package/vendor/@akanjs/native/packages/desktop/src/ffi.ts +76 -0
- package/vendor/@akanjs/native/packages/desktop/src/host.ts +355 -0
- package/vendor/@akanjs/native/packages/desktop/src/lifecycle.ts +142 -0
- package/vendor/@akanjs/native/packages/desktop/src/main.ts +133 -0
- package/vendor/@akanjs/native/packages/desktop/src/page-veto.ts +103 -0
- package/vendor/@akanjs/native/packages/desktop/src/paths.ts +59 -0
- package/vendor/@akanjs/native/packages/desktop/src/plugin.ts +232 -0
- package/vendor/@akanjs/native/packages/react/src/index.ts +23 -0
- package/vendor/@akanjs/native/plugins/accessibility/android/AccessibilityPlugin.kt +96 -0
- package/vendor/@akanjs/native/plugins/accessibility/ios/AccessibilityPlugin.swift +92 -0
- package/vendor/@akanjs/native/plugins/accessibility/native-plugin.json +21 -0
- package/vendor/@akanjs/native/plugins/accessibility/src/announce.ts +71 -0
- package/vendor/@akanjs/native/plugins/accessibility/src/index.ts +77 -0
- package/vendor/@akanjs/native/plugins/accessibility/src/web.ts +52 -0
- package/vendor/@akanjs/native/plugins/app/android/AppPlugin.kt +72 -0
- package/vendor/@akanjs/native/plugins/app/ios/AppPlugin.swift +52 -0
- package/vendor/@akanjs/native/plugins/app/native-plugin.json +21 -0
- package/vendor/@akanjs/native/plugins/app/src/desktop.ts +64 -0
- package/vendor/@akanjs/native/plugins/app/src/index.ts +77 -0
- package/vendor/@akanjs/native/plugins/app/src/web.ts +12 -0
- package/vendor/@akanjs/native/plugins/app-state/android/AppStatePlugin.kt +54 -0
- package/vendor/@akanjs/native/plugins/app-state/ios/AppStatePlugin.swift +58 -0
- package/vendor/@akanjs/native/plugins/app-state/native-plugin.json +17 -0
- package/vendor/@akanjs/native/plugins/app-state/src/index.ts +42 -0
- package/vendor/@akanjs/native/plugins/app-state/src/web.ts +33 -0
- package/vendor/@akanjs/native/plugins/appearance/android/AppearancePlugin.kt +133 -0
- package/vendor/@akanjs/native/plugins/appearance/ios/AppearancePlugin.swift +109 -0
- package/vendor/@akanjs/native/plugins/appearance/native-plugin.json +18 -0
- package/vendor/@akanjs/native/plugins/appearance/src/desktop.ts +133 -0
- package/vendor/@akanjs/native/plugins/appearance/src/index.ts +62 -0
- package/vendor/@akanjs/native/plugins/appearance/src/setting.ts +18 -0
- package/vendor/@akanjs/native/plugins/appearance/src/web.ts +25 -0
- package/vendor/@akanjs/native/plugins/auth-session/android/AuthSessionPlugin.kt +171 -0
- package/vendor/@akanjs/native/plugins/auth-session/ios/AuthSessionPlugin.swift +112 -0
- package/vendor/@akanjs/native/plugins/auth-session/native-plugin.json +19 -0
- package/vendor/@akanjs/native/plugins/auth-session/src/args.ts +62 -0
- package/vendor/@akanjs/native/plugins/auth-session/src/desktop.ts +133 -0
- package/vendor/@akanjs/native/plugins/auth-session/src/index.ts +39 -0
- package/vendor/@akanjs/native/plugins/autostart/native-plugin.json +10 -0
- package/vendor/@akanjs/native/plugins/autostart/src/desktop.ts +189 -0
- package/vendor/@akanjs/native/plugins/autostart/src/index.ts +51 -0
- package/vendor/@akanjs/native/plugins/badge/ios/BadgePlugin.swift +92 -0
- package/vendor/@akanjs/native/plugins/badge/native-plugin.json +15 -0
- package/vendor/@akanjs/native/plugins/badge/src/count.ts +12 -0
- package/vendor/@akanjs/native/plugins/badge/src/desktop.ts +24 -0
- package/vendor/@akanjs/native/plugins/badge/src/index.ts +40 -0
- package/vendor/@akanjs/native/plugins/badge/src/web.ts +37 -0
- package/vendor/@akanjs/native/plugins/biometric/android/BiometricPlugin.kt +179 -0
- package/vendor/@akanjs/native/plugins/biometric/ios/BiometricPlugin.swift +129 -0
- package/vendor/@akanjs/native/plugins/biometric/native-plugin.json +22 -0
- package/vendor/@akanjs/native/plugins/biometric/src/index.ts +100 -0
- package/vendor/@akanjs/native/plugins/browser/android/BrowserPlugin.kt +178 -0
- package/vendor/@akanjs/native/plugins/browser/ios/BrowserPlugin.swift +63 -0
- package/vendor/@akanjs/native/plugins/browser/native-plugin.json +22 -0
- package/vendor/@akanjs/native/plugins/browser/src/args.ts +34 -0
- package/vendor/@akanjs/native/plugins/browser/src/desktop.ts +40 -0
- package/vendor/@akanjs/native/plugins/browser/src/index.ts +47 -0
- package/vendor/@akanjs/native/plugins/browser/src/web.ts +60 -0
- package/vendor/@akanjs/native/plugins/camera/android/CameraPlugin.kt +365 -0
- package/vendor/@akanjs/native/plugins/camera/ios/CameraPlugin.swift +296 -0
- package/vendor/@akanjs/native/plugins/camera/native-plugin.json +32 -0
- package/vendor/@akanjs/native/plugins/camera/src/desktop.ts +27 -0
- package/vendor/@akanjs/native/plugins/camera/src/index.ts +85 -0
- package/vendor/@akanjs/native/plugins/camera/src/web.ts +267 -0
- package/vendor/@akanjs/native/plugins/clipboard/android/ClipboardPlugin.kt +51 -0
- package/vendor/@akanjs/native/plugins/clipboard/ios/ClipboardPlugin.swift +35 -0
- package/vendor/@akanjs/native/plugins/clipboard/native-plugin.json +17 -0
- package/vendor/@akanjs/native/plugins/clipboard/src/desktop.ts +66 -0
- package/vendor/@akanjs/native/plugins/clipboard/src/index.ts +72 -0
- package/vendor/@akanjs/native/plugins/clipboard/src/web.ts +69 -0
- package/vendor/@akanjs/native/plugins/device/android/DevicePlugin.kt +70 -0
- package/vendor/@akanjs/native/plugins/device/ios/DevicePlugin.swift +80 -0
- package/vendor/@akanjs/native/plugins/device/native-plugin.json +18 -0
- package/vendor/@akanjs/native/plugins/device/src/desktop.ts +276 -0
- package/vendor/@akanjs/native/plugins/device/src/index.ts +72 -0
- package/vendor/@akanjs/native/plugins/device/src/web.ts +162 -0
- package/vendor/@akanjs/native/plugins/dialog/android/DialogPlugin.kt +260 -0
- package/vendor/@akanjs/native/plugins/dialog/ios/DialogPlugin.swift +198 -0
- package/vendor/@akanjs/native/plugins/dialog/native-plugin.json +18 -0
- package/vendor/@akanjs/native/plugins/dialog/src/desktop.ts +80 -0
- package/vendor/@akanjs/native/plugins/dialog/src/index.ts +87 -0
- package/vendor/@akanjs/native/plugins/dialog/src/options.ts +111 -0
- package/vendor/@akanjs/native/plugins/dialog/src/web.ts +296 -0
- package/vendor/@akanjs/native/plugins/dock/native-plugin.json +10 -0
- package/vendor/@akanjs/native/plugins/dock/src/desktop.ts +34 -0
- package/vendor/@akanjs/native/plugins/dock/src/index.ts +46 -0
- package/vendor/@akanjs/native/plugins/file-picker/android/FilePickerPlugin.kt +316 -0
- package/vendor/@akanjs/native/plugins/file-picker/ios/FilePickerPlugin.swift +366 -0
- package/vendor/@akanjs/native/plugins/file-picker/native-plugin.json +18 -0
- package/vendor/@akanjs/native/plugins/file-picker/src/common.ts +125 -0
- package/vendor/@akanjs/native/plugins/file-picker/src/desktop.ts +164 -0
- package/vendor/@akanjs/native/plugins/file-picker/src/index.ts +187 -0
- package/vendor/@akanjs/native/plugins/file-picker/src/web.ts +158 -0
- package/vendor/@akanjs/native/plugins/filesystem/android/FilesystemPlugin.kt +561 -0
- package/vendor/@akanjs/native/plugins/filesystem/ios/FilesystemPlugin.swift +596 -0
- package/vendor/@akanjs/native/plugins/filesystem/native-plugin.json +45 -0
- package/vendor/@akanjs/native/plugins/filesystem/src/common.ts +150 -0
- package/vendor/@akanjs/native/plugins/filesystem/src/desktop.ts +438 -0
- package/vendor/@akanjs/native/plugins/filesystem/src/index.ts +179 -0
- package/vendor/@akanjs/native/plugins/filesystem/src/web.ts +334 -0
- package/vendor/@akanjs/native/plugins/geolocation/android/GeolocationPlugin.kt +360 -0
- package/vendor/@akanjs/native/plugins/geolocation/ios/GeolocationPlugin.swift +284 -0
- package/vendor/@akanjs/native/plugins/geolocation/native-plugin.json +23 -0
- package/vendor/@akanjs/native/plugins/geolocation/src/index.ts +155 -0
- package/vendor/@akanjs/native/plugins/geolocation/src/web.ts +132 -0
- package/vendor/@akanjs/native/plugins/global-shortcut/native-plugin.json +10 -0
- package/vendor/@akanjs/native/plugins/global-shortcut/src/desktop.ts +36 -0
- package/vendor/@akanjs/native/plugins/global-shortcut/src/index.ts +55 -0
- package/vendor/@akanjs/native/plugins/haptics/android/HapticsPlugin.kt +127 -0
- package/vendor/@akanjs/native/plugins/haptics/ios/HapticsPlugin.swift +127 -0
- package/vendor/@akanjs/native/plugins/haptics/native-plugin.json +19 -0
- package/vendor/@akanjs/native/plugins/haptics/src/index.ts +34 -0
- package/vendor/@akanjs/native/plugins/haptics/src/web.ts +53 -0
- package/vendor/@akanjs/native/plugins/http/android/HttpPlugin.kt +234 -0
- package/vendor/@akanjs/native/plugins/http/android/HttpUrl.kt +182 -0
- package/vendor/@akanjs/native/plugins/http/ios/HttpPlugin.swift +228 -0
- package/vendor/@akanjs/native/plugins/http/ios/HttpUrl.swift +166 -0
- package/vendor/@akanjs/native/plugins/http/native-plugin.json +27 -0
- package/vendor/@akanjs/native/plugins/http/src/common.ts +294 -0
- package/vendor/@akanjs/native/plugins/http/src/desktop.ts +69 -0
- package/vendor/@akanjs/native/plugins/http/src/index.ts +181 -0
- package/vendor/@akanjs/native/plugins/http/src/web.ts +40 -0
- package/vendor/@akanjs/native/plugins/iap/android/IapPlugin.kt +358 -0
- package/vendor/@akanjs/native/plugins/iap/ios/IapPlugin.swift +306 -0
- package/vendor/@akanjs/native/plugins/iap/native-plugin.json +28 -0
- package/vendor/@akanjs/native/plugins/iap/src/index.ts +206 -0
- package/vendor/@akanjs/native/plugins/keep-awake/android/KeepAwakePlugin.kt +48 -0
- package/vendor/@akanjs/native/plugins/keep-awake/ios/KeepAwakePlugin.swift +36 -0
- package/vendor/@akanjs/native/plugins/keep-awake/native-plugin.json +17 -0
- package/vendor/@akanjs/native/plugins/keep-awake/src/desktop.ts +127 -0
- package/vendor/@akanjs/native/plugins/keep-awake/src/index.ts +79 -0
- package/vendor/@akanjs/native/plugins/keep-awake/src/web.ts +78 -0
- package/vendor/@akanjs/native/plugins/keyboard/android/KeyboardPlugin.kt +77 -0
- package/vendor/@akanjs/native/plugins/keyboard/ios/KeyboardPlugin.swift +93 -0
- package/vendor/@akanjs/native/plugins/keyboard/native-plugin.json +18 -0
- package/vendor/@akanjs/native/plugins/keyboard/src/index.ts +78 -0
- package/vendor/@akanjs/native/plugins/keyboard/src/web.ts +57 -0
- package/vendor/@akanjs/native/plugins/local-notifications/android/LocalNotificationReceiver.kt +38 -0
- package/vendor/@akanjs/native/plugins/local-notifications/android/LocalNotifications.kt +284 -0
- package/vendor/@akanjs/native/plugins/local-notifications/android/LocalNotificationsPlugin.kt +248 -0
- package/vendor/@akanjs/native/plugins/local-notifications/ios/LocalNotificationsPlugin.swift +279 -0
- package/vendor/@akanjs/native/plugins/local-notifications/native-plugin.json +35 -0
- package/vendor/@akanjs/native/plugins/local-notifications/src/desktop.ts +196 -0
- package/vendor/@akanjs/native/plugins/local-notifications/src/index.ts +174 -0
- package/vendor/@akanjs/native/plugins/local-notifications/src/schedule.ts +164 -0
- package/vendor/@akanjs/native/plugins/local-notifications/src/timers.ts +72 -0
- package/vendor/@akanjs/native/plugins/local-notifications/src/web.ts +158 -0
- package/vendor/@akanjs/native/plugins/menu/native-plugin.json +10 -0
- package/vendor/@akanjs/native/plugins/menu/src/desktop.ts +52 -0
- package/vendor/@akanjs/native/plugins/menu/src/index.ts +107 -0
- package/vendor/@akanjs/native/plugins/network/android/NetworkPlugin.kt +124 -0
- package/vendor/@akanjs/native/plugins/network/ios/NetworkPlugin.swift +82 -0
- package/vendor/@akanjs/native/plugins/network/native-plugin.json +19 -0
- package/vendor/@akanjs/native/plugins/network/src/index.ts +59 -0
- package/vendor/@akanjs/native/plugins/network/src/web.ts +43 -0
- package/vendor/@akanjs/native/plugins/opener/android/OpenerPlugin.kt +81 -0
- package/vendor/@akanjs/native/plugins/opener/ios/OpenerPlugin.swift +83 -0
- package/vendor/@akanjs/native/plugins/opener/native-plugin.json +25 -0
- package/vendor/@akanjs/native/plugins/opener/src/desktop.ts +88 -0
- package/vendor/@akanjs/native/plugins/opener/src/index.ts +35 -0
- package/vendor/@akanjs/native/plugins/opener/src/url.ts +39 -0
- package/vendor/@akanjs/native/plugins/opener/src/web.ts +33 -0
- package/vendor/@akanjs/native/plugins/preferences/android/PreferencesPlugin.kt +44 -0
- package/vendor/@akanjs/native/plugins/preferences/ios/PreferencesPlugin.swift +47 -0
- package/vendor/@akanjs/native/plugins/preferences/native-plugin.json +18 -0
- package/vendor/@akanjs/native/plugins/preferences/src/desktop.ts +59 -0
- package/vendor/@akanjs/native/plugins/preferences/src/index.ts +75 -0
- package/vendor/@akanjs/native/plugins/preferences/src/web.ts +55 -0
- package/vendor/@akanjs/native/plugins/push/android/AkanNativeMessagingService.kt +17 -0
- package/vendor/@akanjs/native/plugins/push/android/PushPlugin.kt +257 -0
- package/vendor/@akanjs/native/plugins/push/ios/PushPlugin.swift +169 -0
- package/vendor/@akanjs/native/plugins/push/native-plugin.json +23 -0
- package/vendor/@akanjs/native/plugins/push/src/index.ts +73 -0
- package/vendor/@akanjs/native/plugins/screen/native-plugin.json +10 -0
- package/vendor/@akanjs/native/plugins/screen/src/desktop.ts +50 -0
- package/vendor/@akanjs/native/plugins/screen/src/index.ts +107 -0
- package/vendor/@akanjs/native/plugins/screen/src/web.ts +92 -0
- package/vendor/@akanjs/native/plugins/screen-orientation/android/ScreenOrientationPlugin.kt +113 -0
- package/vendor/@akanjs/native/plugins/screen-orientation/ios/ScreenOrientationPlugin.swift +150 -0
- package/vendor/@akanjs/native/plugins/screen-orientation/native-plugin.json +17 -0
- package/vendor/@akanjs/native/plugins/screen-orientation/src/index.ts +69 -0
- package/vendor/@akanjs/native/plugins/screen-orientation/src/types.ts +26 -0
- package/vendor/@akanjs/native/plugins/screen-orientation/src/web.ts +67 -0
- package/vendor/@akanjs/native/plugins/secure-storage/android/SecureStoragePlugin.kt +184 -0
- package/vendor/@akanjs/native/plugins/secure-storage/ios/SecureStoragePlugin.swift +145 -0
- package/vendor/@akanjs/native/plugins/secure-storage/native-plugin.json +18 -0
- package/vendor/@akanjs/native/plugins/secure-storage/src/desktop.ts +332 -0
- package/vendor/@akanjs/native/plugins/secure-storage/src/index.ts +33 -0
- package/vendor/@akanjs/native/plugins/share/android/SharePlugin.kt +218 -0
- package/vendor/@akanjs/native/plugins/share/ios/SharePlugin.swift +142 -0
- package/vendor/@akanjs/native/plugins/share/native-plugin.json +18 -0
- package/vendor/@akanjs/native/plugins/share/src/index.ts +87 -0
- package/vendor/@akanjs/native/plugins/share/src/options.ts +43 -0
- package/vendor/@akanjs/native/plugins/share/src/web.ts +116 -0
- package/vendor/@akanjs/native/plugins/single-instance/native-plugin.json +10 -0
- package/vendor/@akanjs/native/plugins/single-instance/src/desktop.ts +63 -0
- package/vendor/@akanjs/native/plugins/single-instance/src/index.ts +32 -0
- package/vendor/@akanjs/native/plugins/single-instance/src/socket.ts +248 -0
- package/vendor/@akanjs/native/plugins/splash-screen/android/SplashScreenPlugin.kt +19 -0
- package/vendor/@akanjs/native/plugins/splash-screen/ios/SplashScreenPlugin.swift +20 -0
- package/vendor/@akanjs/native/plugins/splash-screen/native-plugin.json +17 -0
- package/vendor/@akanjs/native/plugins/splash-screen/src/index.ts +24 -0
- package/vendor/@akanjs/native/plugins/splash-screen/src/web.ts +17 -0
- package/vendor/@akanjs/native/plugins/sqlite/android/SqlStatements.kt +121 -0
- package/vendor/@akanjs/native/plugins/sqlite/android/SqlitePlugin.kt +327 -0
- package/vendor/@akanjs/native/plugins/sqlite/ios/SqlitePlugin.swift +361 -0
- package/vendor/@akanjs/native/plugins/sqlite/native-plugin.json +18 -0
- package/vendor/@akanjs/native/plugins/sqlite/src/common.ts +221 -0
- package/vendor/@akanjs/native/plugins/sqlite/src/desktop.ts +140 -0
- package/vendor/@akanjs/native/plugins/sqlite/src/index.ts +114 -0
- package/vendor/@akanjs/native/plugins/toast/android/ToastPlugin.kt +27 -0
- package/vendor/@akanjs/native/plugins/toast/native-plugin.json +14 -0
- package/vendor/@akanjs/native/plugins/toast/src/index.ts +41 -0
- package/vendor/@akanjs/native/plugins/toast/src/queue.ts +77 -0
- package/vendor/@akanjs/native/plugins/toast/src/web.ts +130 -0
- package/vendor/@akanjs/native/plugins/tray/native-plugin.json +10 -0
- package/vendor/@akanjs/native/plugins/tray/src/desktop.ts +73 -0
- package/vendor/@akanjs/native/plugins/tray/src/index.ts +111 -0
- package/vendor/@akanjs/native/plugins/updates/android/UpdatesPlugin.kt +290 -0
- package/vendor/@akanjs/native/plugins/updates/ios/UpdatesPlugin.swift +292 -0
- package/vendor/@akanjs/native/plugins/updates/native-plugin.json +19 -0
- package/vendor/@akanjs/native/plugins/updates/src/desktop.ts +558 -0
- package/vendor/@akanjs/native/plugins/updates/src/index.ts +95 -0
- package/vendor/@akanjs/native/plugins/window/native-plugin.json +32 -0
- package/vendor/@akanjs/native/plugins/window/src/desktop.ts +170 -0
- package/vendor/@akanjs/native/plugins/window/src/index.ts +342 -0
- package/vendor/@akanjs/native/plugins/window/src/web.ts +43 -0
- package/vendor/@akanjs/native/plugins/window-state/native-plugin.json +10 -0
- package/vendor/@akanjs/native/plugins/window-state/src/desktop.ts +73 -0
- package/vendor/@akanjs/native/plugins/window-state/src/index.ts +35 -0
- package/vendor/@akanjs/native/plugins/window-state/src/state.ts +146 -0
- package/webkit/bootCsr.tsx +26 -14
- package/webkit/index.ts +0 -2
- package/webkit/nativeNavigation.ts +116 -0
- package/webkit/nativePurchase.ts +93 -0
- package/webkit/useCamera.tsx +76 -71
- package/webkit/useCsrValues.ts +10 -124
- package/webkit/useGeoLocation.tsx +11 -13
- package/webkit/usePurchase.tsx +68 -123
- package/capacitor.base.config.ts +0 -140
- package/client/capacitor.ts +0 -252
- package/types/capacitor.base.config.d.ts +0 -3
- package/types/client/capacitor.d.ts +0 -290
- package/types/webkit/useCodepush.d.ts +0 -16
- package/types/webkit/useContact.d.ts +0 -11
- package/webkit/useCodepush.tsx +0 -76
- package/webkit/useContact.tsx +0 -45
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { createLiveValue, definePlugin } from "../../../packages/core/src/index.ts";
|
|
2
|
+
import { useLiveValue } from "../../../packages/react/src/index.ts";
|
|
3
|
+
import { readWebDisplays, sameDisplays, web } from "./web.ts";
|
|
4
|
+
|
|
5
|
+
export { sameDisplays } from "./web.ts";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Displays and the mouse cursor (plugins.md §5).
|
|
9
|
+
*
|
|
10
|
+
* Coordinates are logical pixels (CSS px) with the origin at the top-left corner of the primary
|
|
11
|
+
* display (the one with the menu bar) and y growing down: the same space as the window plugin's
|
|
12
|
+
* positions (`appWindow.setPosition`, `getState().x/y`), so a window can be placed on a display
|
|
13
|
+
* with `setPosition({ x: d.workArea.x + 20, y: d.workArea.y + 20 })`. Displays above or left of
|
|
14
|
+
* the primary one have negative coordinates.
|
|
15
|
+
*
|
|
16
|
+
* - macOS: TAO monitors; `workArea` leaves out the menu bar and the Dock (NSScreen visibleFrame).
|
|
17
|
+
* `change` fires when a display is added, removed or rearranged, or its resolution or scale
|
|
18
|
+
* changes. Showing or hiding the Dock may not send it; call getDisplays() again before placing
|
|
19
|
+
* a window if that matters.
|
|
20
|
+
* - Web: one display, the screen the page is on, from `window.screen` (bounds at 0,0; workArea
|
|
21
|
+
* from availLeft/availTop/availWidth/availHeight). `scale` is devicePixelRatio, which includes
|
|
22
|
+
* the page zoom. getCursorPoint is UNSUPPORTED: a page only sees the mouse over itself.
|
|
23
|
+
* - Windows: TAO monitors; `workArea` leaves out the taskbar (GetMonitorInfo). `change` fires for
|
|
24
|
+
* display and work area changes.
|
|
25
|
+
* - Linux: GDK monitors, in the space of the X screen (or the Wayland compositor), whose origin
|
|
26
|
+
* is the top-left corner of the whole desktop, not always the primary display's. `workArea`
|
|
27
|
+
* comes from the window manager and is exact for the primary display only. `change` fires when
|
|
28
|
+
* a display is added, removed or resized, not for work area changes. getCursorPoint is
|
|
29
|
+
* UNSUPPORTED on Wayland, which tells an app where the pointer is only over its own windows.
|
|
30
|
+
* - iOS and Android: UNSUPPORTED.
|
|
31
|
+
*/
|
|
32
|
+
export interface ScreenRect {
|
|
33
|
+
x: number;
|
|
34
|
+
y: number;
|
|
35
|
+
width: number;
|
|
36
|
+
height: number;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface Display {
|
|
40
|
+
/** Stable while the display stays connected (macOS: CGDirectDisplayID). 0 on the web. */
|
|
41
|
+
id: number;
|
|
42
|
+
/** As the OS shows it, e.g. "Built-in Retina Display". "" on the web. */
|
|
43
|
+
name: string;
|
|
44
|
+
bounds: ScreenRect;
|
|
45
|
+
/** Where windows can go: bounds without the menu bar, Dock or taskbar. */
|
|
46
|
+
workArea: ScreenRect;
|
|
47
|
+
/** Device pixels per CSS pixel (2 on Retina displays). */
|
|
48
|
+
scale: number;
|
|
49
|
+
primary: boolean;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export interface ScreenApi {
|
|
53
|
+
/** The primary display first. */
|
|
54
|
+
getDisplays(): Promise<Display[]>;
|
|
55
|
+
/** Where the mouse pointer is, anywhere on the desktop (it may be over another app). */
|
|
56
|
+
getCursorPoint(): Promise<{ x: number; y: number }>;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export interface ScreenEvents {
|
|
60
|
+
/** The displays changed; sent only when getDisplays() would answer differently. */
|
|
61
|
+
change: { displays: Display[] };
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export const screen = definePlugin<ScreenApi, ScreenEvents>("screen", {
|
|
65
|
+
methods: ["getDisplays", "getCursorPoint"],
|
|
66
|
+
events: ["change"],
|
|
67
|
+
web,
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
const current = createLiveValue<Display[]>(
|
|
71
|
+
readWebDisplays(),
|
|
72
|
+
(set) => {
|
|
73
|
+
let live = true;
|
|
74
|
+
const stop = screen.listen("change", (e) => set(e.displays));
|
|
75
|
+
screen
|
|
76
|
+
.getDisplays()
|
|
77
|
+
.then((displays) => live && set(displays))
|
|
78
|
+
.catch(() => {});
|
|
79
|
+
return () => {
|
|
80
|
+
live = false;
|
|
81
|
+
stop();
|
|
82
|
+
};
|
|
83
|
+
},
|
|
84
|
+
sameDisplays,
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* The connected displays, primary first. Re-renders when they change. Before the first answer
|
|
89
|
+
* (and where the plugin is unsupported) it holds the web view of the page's own screen, or [].
|
|
90
|
+
*/
|
|
91
|
+
export function useDisplays(): Display[] {
|
|
92
|
+
return useLiveValue(current);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/** The display that contains the point (e.g. getCursorPoint()), else the nearest one. */
|
|
96
|
+
export function displayAt(point: { x: number; y: number }, displays: Display[]): Display | undefined {
|
|
97
|
+
let best: Display | undefined;
|
|
98
|
+
let bestDistance = Infinity;
|
|
99
|
+
for (const d of displays) {
|
|
100
|
+
const { x, y, width, height } = d.bounds;
|
|
101
|
+
const dx = Math.max(x - point.x, 0, point.x - (x + width));
|
|
102
|
+
const dy = Math.max(y - point.y, 0, point.y - (y + height));
|
|
103
|
+
const distance = dx * dx + dy * dy;
|
|
104
|
+
if (distance < bestDistance) [best, bestDistance] = [d, distance];
|
|
105
|
+
}
|
|
106
|
+
return best;
|
|
107
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { defineWebPlugin } from "../../../packages/core/src/index.ts";
|
|
2
|
+
import type { Display, ScreenApi, ScreenEvents, ScreenRect } from "./index.ts";
|
|
3
|
+
|
|
4
|
+
/** The parts of `window.screen` this reads (availLeft/availTop/left/top are non-standard). */
|
|
5
|
+
export interface ScreenLike {
|
|
6
|
+
width: number;
|
|
7
|
+
height: number;
|
|
8
|
+
availWidth?: number;
|
|
9
|
+
availHeight?: number;
|
|
10
|
+
availLeft?: number;
|
|
11
|
+
availTop?: number;
|
|
12
|
+
left?: number;
|
|
13
|
+
top?: number;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function webDisplay(s: ScreenLike, devicePixelRatio: number): Display {
|
|
17
|
+
const { width, height } = s;
|
|
18
|
+
const availWidth = s.availWidth ?? width;
|
|
19
|
+
const availHeight = s.availHeight ?? height;
|
|
20
|
+
let x = 0;
|
|
21
|
+
let y = 0;
|
|
22
|
+
if (typeof s.availLeft === "number" && typeof s.availTop === "number") {
|
|
23
|
+
if (typeof s.left === "number" && typeof s.top === "number") {
|
|
24
|
+
[x, y] = [s.availLeft - s.left, s.availTop - s.top];
|
|
25
|
+
} else if (
|
|
26
|
+
s.availLeft >= 0 &&
|
|
27
|
+
s.availTop >= 0 &&
|
|
28
|
+
s.availLeft + availWidth <= width &&
|
|
29
|
+
s.availTop + availHeight <= height
|
|
30
|
+
) {
|
|
31
|
+
[x, y] = [s.availLeft, s.availTop];
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const bounds: ScreenRect = { x: 0, y: 0, width, height };
|
|
35
|
+
return {
|
|
36
|
+
id: 0,
|
|
37
|
+
name: "",
|
|
38
|
+
bounds,
|
|
39
|
+
workArea: { x, y, width: availWidth, height: availHeight },
|
|
40
|
+
scale: devicePixelRatio > 0 ? devicePixelRatio : 1,
|
|
41
|
+
primary: true,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** [] where there is no DOM (tests, the desktop plugin host). */
|
|
46
|
+
export function readWebDisplays(): Display[] {
|
|
47
|
+
if (typeof window === "undefined" || !window.screen) return [];
|
|
48
|
+
return [webDisplay(window.screen as ScreenLike, window.devicePixelRatio)];
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/** Displays are plain JSON; two lists are the same when they serialize the same. */
|
|
52
|
+
export function sameDisplays(a: Display[], b: Display[]): boolean {
|
|
53
|
+
return a === b || JSON.stringify(a) === JSON.stringify(b);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export const web = defineWebPlugin<ScreenApi, ScreenEvents>({
|
|
57
|
+
methods: {
|
|
58
|
+
getDisplays: async () => readWebDisplays(),
|
|
59
|
+
},
|
|
60
|
+
events: {
|
|
61
|
+
change(emit) {
|
|
62
|
+
let last = readWebDisplays();
|
|
63
|
+
const check = () => {
|
|
64
|
+
const next = readWebDisplays();
|
|
65
|
+
if (sameDisplays(last, next)) return;
|
|
66
|
+
last = next;
|
|
67
|
+
emit({ displays: next });
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
let query: MediaQueryList | null = null;
|
|
71
|
+
const watchScale = () => {
|
|
72
|
+
query?.removeEventListener("change", onScale);
|
|
73
|
+
query = window.matchMedia(`(resolution: ${window.devicePixelRatio}dppx)`);
|
|
74
|
+
query.addEventListener("change", onScale);
|
|
75
|
+
};
|
|
76
|
+
const onScale = () => {
|
|
77
|
+
watchScale();
|
|
78
|
+
check();
|
|
79
|
+
};
|
|
80
|
+
watchScale();
|
|
81
|
+
window.addEventListener("resize", check);
|
|
82
|
+
|
|
83
|
+
const target = window.screen as unknown as Partial<EventTarget>;
|
|
84
|
+
target.addEventListener?.("change", check);
|
|
85
|
+
return () => {
|
|
86
|
+
query?.removeEventListener("change", onScale);
|
|
87
|
+
window.removeEventListener("resize", check);
|
|
88
|
+
target.removeEventListener?.("change", check);
|
|
89
|
+
};
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
});
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
package com.akanjs.plugins.screenorientation
|
|
2
|
+
|
|
3
|
+
import android.content.pm.ActivityInfo
|
|
4
|
+
import android.hardware.display.DisplayManager
|
|
5
|
+
import android.os.Build
|
|
6
|
+
import android.os.Handler
|
|
7
|
+
import android.os.Looper
|
|
8
|
+
import android.view.Surface
|
|
9
|
+
import com.akanjs.runtime.AkanNativeCompat
|
|
10
|
+
import com.akanjs.runtime.AkanNativeErrorCode
|
|
11
|
+
import com.akanjs.runtime.AkanNativePluginContext
|
|
12
|
+
import com.akanjs.runtime.AkanNativeReply
|
|
13
|
+
import com.akanjs.runtime.AkanNativeVoidReply
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Activity.requestedOrientation for locks, the display rotation for the type.
|
|
17
|
+
* - Changes come from DisplayManager.DisplayListener: onConfigurationChanged misses 180° turns
|
|
18
|
+
* (the configuration's orientation stays "landscape"), which is what capacitor-plugins/screen-orientation
|
|
19
|
+
* ScreenOrientationPlugin.java:45-51 compares, so it never reports them.
|
|
20
|
+
* - The type depends on the display's natural orientation, as Surface rotations count from it:
|
|
21
|
+
* phones are naturally portrait (ROTATION_90 = landscape-primary, ScreenOrientation.java:45-56),
|
|
22
|
+
* many tablets landscape. The mapping follows what the system picks for the matching
|
|
23
|
+
* SCREEN_ORIENTATION_* lock (DisplayRotation: portrait on a landscape device is ROTATION_270),
|
|
24
|
+
* so lock("portrait-primary") then get() gives "portrait-primary" on both.
|
|
25
|
+
* - "portrait", "landscape" and "any" use the USER_* variants: either way up by the sensor, but the
|
|
26
|
+
* user's rotation lock still wins, like everywhere else in the system.
|
|
27
|
+
* - Android 16 (API 36) ignores orientation requests on displays 600 dp and wider for apps targeting
|
|
28
|
+
* it; lock() rejects UNSUPPORTED there instead of pretending (plugins.md §4.1).
|
|
29
|
+
* Arguments arrive decoded and checked by the generated ScreenOrientationPluginSpec (PL-10).
|
|
30
|
+
*/
|
|
31
|
+
class ScreenOrientationPlugin(private val context: AkanNativePluginContext) : ScreenOrientationPluginSpec {
|
|
32
|
+
private val displays: DisplayManager? = context.activity.getSystemService(DisplayManager::class.java)
|
|
33
|
+
private val main = Handler(Looper.getMainLooper())
|
|
34
|
+
private val events = ScreenOrientationEvents(context)
|
|
35
|
+
private var listener: DisplayManager.DisplayListener? = null
|
|
36
|
+
private var last: ScreenOrientationOrientationType? = null
|
|
37
|
+
|
|
38
|
+
override fun get(reply: AkanNativeReply<ScreenOrientationOrientationState>) = reply.resolve(ScreenOrientationOrientationState(type = type()))
|
|
39
|
+
|
|
40
|
+
override fun lock(args: ScreenOrientationLockArgs, reply: AkanNativeVoidReply) {
|
|
41
|
+
val activity = context.activity
|
|
42
|
+
val requested = when (args.orientation) {
|
|
43
|
+
ScreenOrientationOrientationLock.ANY -> ActivityInfo.SCREEN_ORIENTATION_FULL_USER
|
|
44
|
+
ScreenOrientationOrientationLock.PORTRAIT -> ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT
|
|
45
|
+
ScreenOrientationOrientationLock.LANDSCAPE -> ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE
|
|
46
|
+
ScreenOrientationOrientationLock.PORTRAIT_PRIMARY -> ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
|
|
47
|
+
ScreenOrientationOrientationLock.PORTRAIT_SECONDARY -> ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT
|
|
48
|
+
ScreenOrientationOrientationLock.LANDSCAPE_PRIMARY -> ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
|
|
49
|
+
ScreenOrientationOrientationLock.LANDSCAPE_SECONDARY -> ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE
|
|
50
|
+
}
|
|
51
|
+
if (Build.VERSION.SDK_INT >= 36 && activity.resources.configuration.smallestScreenWidthDp >= 600) {
|
|
52
|
+
return reply.reject(AkanNativeErrorCode.UNSUPPORTED, "Android ignores orientation locks on screens 600 dp and wider")
|
|
53
|
+
}
|
|
54
|
+
activity.requestedOrientation = requested
|
|
55
|
+
reply.resolve()
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
override fun unlock(reply: AkanNativeVoidReply) {
|
|
59
|
+
context.activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
|
|
60
|
+
reply.resolve()
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
override fun startListening(event: String) {
|
|
64
|
+
val dm = displays
|
|
65
|
+
if (event != "change" || listener != null || dm == null) return
|
|
66
|
+
last = type()
|
|
67
|
+
val l = object : DisplayManager.DisplayListener {
|
|
68
|
+
override fun onDisplayChanged(displayId: Int) {
|
|
69
|
+
if (displayId != AkanNativeCompat.display(context.activity)?.displayId) return
|
|
70
|
+
val next = type()
|
|
71
|
+
if (next == last) return // also brightness and refresh rate changes land here
|
|
72
|
+
last = next
|
|
73
|
+
events.change(ScreenOrientationOrientationState(type = next))
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
override fun onDisplayAdded(displayId: Int) {}
|
|
77
|
+
override fun onDisplayRemoved(displayId: Int) {}
|
|
78
|
+
}
|
|
79
|
+
dm.registerDisplayListener(l, main)
|
|
80
|
+
listener = l
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
override fun stopListening(event: String) {
|
|
84
|
+
if (event != "change") return
|
|
85
|
+
listener?.let { displays?.unregisterDisplayListener(it) }
|
|
86
|
+
listener = null
|
|
87
|
+
last = null
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
override fun destroy() = stopListening("change")
|
|
91
|
+
|
|
92
|
+
private fun type(): ScreenOrientationOrientationType {
|
|
93
|
+
val display = AkanNativeCompat.display(context.activity) ?: return ScreenOrientationOrientationType.PORTRAIT_PRIMARY
|
|
94
|
+
val rotation = display.rotation
|
|
95
|
+
// Mode sizes are in the natural orientation, whatever the current rotation is.
|
|
96
|
+
val naturalPortrait = display.mode.physicalWidth <= display.mode.physicalHeight
|
|
97
|
+
return if (naturalPortrait) {
|
|
98
|
+
when (rotation) {
|
|
99
|
+
Surface.ROTATION_90 -> ScreenOrientationOrientationType.LANDSCAPE_PRIMARY
|
|
100
|
+
Surface.ROTATION_180 -> ScreenOrientationOrientationType.PORTRAIT_SECONDARY
|
|
101
|
+
Surface.ROTATION_270 -> ScreenOrientationOrientationType.LANDSCAPE_SECONDARY
|
|
102
|
+
else -> ScreenOrientationOrientationType.PORTRAIT_PRIMARY
|
|
103
|
+
}
|
|
104
|
+
} else {
|
|
105
|
+
when (rotation) {
|
|
106
|
+
Surface.ROTATION_90 -> ScreenOrientationOrientationType.PORTRAIT_SECONDARY
|
|
107
|
+
Surface.ROTATION_180 -> ScreenOrientationOrientationType.LANDSCAPE_SECONDARY
|
|
108
|
+
Surface.ROTATION_270 -> ScreenOrientationOrientationType.PORTRAIT_PRIMARY
|
|
109
|
+
else -> ScreenOrientationOrientationType.LANDSCAPE_PRIMARY
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import UIKit
|
|
2
|
+
|
|
3
|
+
/// Interface orientation of the window scene, and a lock through the shell's view controller.
|
|
4
|
+
/// - Lock: UIKit asks the root view controller's supportedInterfaceOrientations, so the shell's
|
|
5
|
+
/// AkanNativeViewController returns `orientationLock` when set (shell hook). After changing it,
|
|
6
|
+
/// setNeedsUpdateOfSupportedInterfaceOrientations + requestGeometryUpdate rotate the scene
|
|
7
|
+
/// (capacitor-plugins/screen-orientation/ios/Sources/ScreenOrientationPlugin/ScreenOrientation.swift:29-47,
|
|
8
|
+
/// which uses the deprecated UIDevice "orientation" key before iOS 16; not needed here).
|
|
9
|
+
/// - The lock is intersected with the app's orientations first: a mask with none in common makes
|
|
10
|
+
/// UIKit raise an exception. The iPhone Info.plist omits portrait upside down.
|
|
11
|
+
/// - get/change read the scene's effectiveGeometry.interfaceOrientation (what the page is drawn in).
|
|
12
|
+
/// Capacitor reads UIDevice.orientation, the physical device, which differs while locked and is
|
|
13
|
+
/// "face up" on a table. effectiveGeometry is key-value observable and changes for 180° turns too.
|
|
14
|
+
/// - landscape-primary is UIInterfaceOrientation.landscapeRight: the interface turns the opposite
|
|
15
|
+
/// way from the device (ScreenOrientation.swift:83-120, Safari's screen.orientation agrees).
|
|
16
|
+
/// Arguments arrive decoded and checked by the generated ScreenOrientationPluginSpec (PL-10).
|
|
17
|
+
final class ScreenOrientationPlugin: ScreenOrientationPluginSpec {
|
|
18
|
+
static let id = "screen-orientation"
|
|
19
|
+
private static let lockWait: TimeInterval = 1.5
|
|
20
|
+
|
|
21
|
+
private static func mask(_ lock: ScreenOrientationOrientationLock) -> UIInterfaceOrientationMask {
|
|
22
|
+
switch lock {
|
|
23
|
+
case .any: .all
|
|
24
|
+
case .portrait: [.portrait, .portraitUpsideDown]
|
|
25
|
+
case .landscape: .landscape
|
|
26
|
+
case .portraitPrimary: .portrait
|
|
27
|
+
case .portraitSecondary: .portraitUpsideDown
|
|
28
|
+
case .landscapePrimary: .landscapeRight
|
|
29
|
+
case .landscapeSecondary: .landscapeLeft
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
private let context: AkanNativePluginContext
|
|
34
|
+
private var observation: NSKeyValueObservation?
|
|
35
|
+
private var observedScene: UIWindowScene?
|
|
36
|
+
private var listening = false
|
|
37
|
+
private var last: ScreenOrientationOrientationType?
|
|
38
|
+
/// lock() calls waiting for the scene to reach an allowed orientation.
|
|
39
|
+
private var waiting: [(reply: AkanNativeReply<Void>, mask: UIInterfaceOrientationMask)] = []
|
|
40
|
+
|
|
41
|
+
init(context: AkanNativePluginContext) {
|
|
42
|
+
self.context = context
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
func get(_ reply: AkanNativeReply<ScreenOrientationOrientationState>) {
|
|
46
|
+
reply.resolve(ScreenOrientationOrientationState(type: type()))
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
func lock(_ args: ScreenOrientationLockArgs, _ reply: AkanNativeReply<Void>) {
|
|
50
|
+
let name = args.orientation.rawValue
|
|
51
|
+
guard let controller = context.viewController as? AkanNativeViewController, let scene = context.windowScene else {
|
|
52
|
+
return reply.reject(.internalError, "no window to lock")
|
|
53
|
+
}
|
|
54
|
+
let supported = UIApplication.shared.supportedInterfaceOrientations(for: controller.view.window)
|
|
55
|
+
let mask = Self.mask(args.orientation).intersection(supported)
|
|
56
|
+
if mask.isEmpty {
|
|
57
|
+
return reply.reject(.unsupported, "\(name) is not one of the app's orientations on this device")
|
|
58
|
+
}
|
|
59
|
+
controller.orientationLock = mask
|
|
60
|
+
controller.setNeedsUpdateOfSupportedInterfaceOrientations()
|
|
61
|
+
if Self.contains(mask, scene.effectiveGeometry.interfaceOrientation) { return reply.resolve() }
|
|
62
|
+
|
|
63
|
+
waiting.append((reply, mask))
|
|
64
|
+
observe(scene)
|
|
65
|
+
scene.requestGeometryUpdate(.iOS(interfaceOrientations: mask)) { error in
|
|
66
|
+
// iPad multitasking, or a presented controller that does not allow the orientation.
|
|
67
|
+
let message = error.localizedDescription
|
|
68
|
+
reply.reject(.unsupported, "the system refused \(name): \(message)")
|
|
69
|
+
}
|
|
70
|
+
DispatchQueue.main.asyncAfter(deadline: .now() + Self.lockWait) { [weak self] in
|
|
71
|
+
// The lock is in place; the rotation may still be under way or come with the next device turn.
|
|
72
|
+
reply.resolve()
|
|
73
|
+
self?.waiting.removeAll { $0.reply === reply }
|
|
74
|
+
self?.stopObservingIfIdle()
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
func unlock(_ reply: AkanNativeReply<Void>) {
|
|
79
|
+
(context.viewController as? AkanNativeViewController)?.orientationLock = nil
|
|
80
|
+
context.viewController?.setNeedsUpdateOfSupportedInterfaceOrientations()
|
|
81
|
+
reply.resolve()
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
func startListening(_ event: String) {
|
|
85
|
+
guard event == "change" else { return }
|
|
86
|
+
listening = true
|
|
87
|
+
last = type()
|
|
88
|
+
if let scene = context.windowScene { observe(scene) }
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
func stopListening(_ event: String) {
|
|
92
|
+
guard event == "change" else { return }
|
|
93
|
+
listening = false
|
|
94
|
+
last = nil
|
|
95
|
+
stopObservingIfIdle()
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
private func observe(_ scene: UIWindowScene) {
|
|
99
|
+
guard observation == nil || observedScene !== scene else { return }
|
|
100
|
+
observedScene = scene
|
|
101
|
+
observation = scene.observe(\.effectiveGeometry, options: [.new]) { [weak self] scene, _ in
|
|
102
|
+
MainActor.assumeIsolated { self?.geometryChanged(scene.effectiveGeometry.interfaceOrientation) }
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
private func stopObservingIfIdle() {
|
|
107
|
+
guard !listening, waiting.isEmpty else { return }
|
|
108
|
+
observation?.invalidate()
|
|
109
|
+
observation = nil
|
|
110
|
+
observedScene = nil
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
private func geometryChanged(_ orientation: UIInterfaceOrientation) {
|
|
114
|
+
let reached = waiting.filter { Self.contains($0.mask, orientation) }
|
|
115
|
+
waiting.removeAll { Self.contains($0.mask, orientation) }
|
|
116
|
+
for entry in reached { entry.reply.resolve() }
|
|
117
|
+
if listening, let next = Self.type(orientation), next != last {
|
|
118
|
+
last = next
|
|
119
|
+
ScreenOrientationEvents(context).change(ScreenOrientationOrientationState(type: next))
|
|
120
|
+
}
|
|
121
|
+
stopObservingIfIdle()
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
private func type() -> ScreenOrientationOrientationType {
|
|
125
|
+
if let scene = context.windowScene, let type = Self.type(scene.effectiveGeometry.interfaceOrientation) { return type }
|
|
126
|
+
// No window yet: guess from the screen's shape.
|
|
127
|
+
let bounds = context.webView?.bounds.size ?? .zero
|
|
128
|
+
return bounds.width > bounds.height ? .landscapePrimary : .portraitPrimary
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
private static func type(_ orientation: UIInterfaceOrientation) -> ScreenOrientationOrientationType? {
|
|
132
|
+
switch orientation {
|
|
133
|
+
case .portrait: .portraitPrimary
|
|
134
|
+
case .portraitUpsideDown: .portraitSecondary
|
|
135
|
+
case .landscapeRight: .landscapePrimary
|
|
136
|
+
case .landscapeLeft: .landscapeSecondary
|
|
137
|
+
default: nil
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
private static func contains(_ mask: UIInterfaceOrientationMask, _ orientation: UIInterfaceOrientation) -> Bool {
|
|
142
|
+
switch orientation {
|
|
143
|
+
case .portrait: mask.contains(.portrait)
|
|
144
|
+
case .portraitUpsideDown: mask.contains(.portraitUpsideDown)
|
|
145
|
+
case .landscapeLeft: mask.contains(.landscapeLeft)
|
|
146
|
+
case .landscapeRight: mask.contains(.landscapeRight)
|
|
147
|
+
default: false
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "screen-orientation",
|
|
3
|
+
"apiVersion": 1,
|
|
4
|
+
"methods": ["get", "lock", "unlock"],
|
|
5
|
+
"events": ["change"],
|
|
6
|
+
"codegen": true,
|
|
7
|
+
"web": "./src/web.ts",
|
|
8
|
+
"desktop": null,
|
|
9
|
+
"ios": {
|
|
10
|
+
"sources": ["ios/*.swift"],
|
|
11
|
+
"class": "ScreenOrientationPlugin"
|
|
12
|
+
},
|
|
13
|
+
"android": {
|
|
14
|
+
"sources": ["android/*.kt"],
|
|
15
|
+
"class": "com.akanjs.plugins.screenorientation.ScreenOrientationPlugin"
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { createLiveValue, definePlugin, shallowEqual } from "../../../packages/core/src/index.ts";
|
|
2
|
+
import { useLiveValue } from "../../../packages/react/src/index.ts";
|
|
3
|
+
import type { OrientationLock, OrientationType } from "./types.ts";
|
|
4
|
+
import { readWebOrientation, web } from "./web.ts";
|
|
5
|
+
|
|
6
|
+
export {
|
|
7
|
+
checkLock,
|
|
8
|
+
ORIENTATION_LOCKS,
|
|
9
|
+
ORIENTATION_TYPES,
|
|
10
|
+
type OrientationLock,
|
|
11
|
+
type OrientationType,
|
|
12
|
+
} from "./types.ts";
|
|
13
|
+
|
|
14
|
+
export interface OrientationState {
|
|
15
|
+
type: OrientationType;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Screen orientation (plugins.md §4.1): read it, follow it, lock it. Not available on desktop.
|
|
20
|
+
* The lock belongs to the app and outlives page reloads until unlock().
|
|
21
|
+
*/
|
|
22
|
+
export interface ScreenOrientationApi {
|
|
23
|
+
get(): Promise<OrientationState>;
|
|
24
|
+
/**
|
|
25
|
+
* Restricts the app to `orientation` and rotates to it if needed; resolves once the screen shows
|
|
26
|
+
* an allowed orientation (or after a moment, when the system rotates later).
|
|
27
|
+
* Rejects UNSUPPORTED where the lock is not honoured: an orientation the app does not support
|
|
28
|
+
* (portrait-secondary on iPhones), iPads with multitasking, Android 16+ screens 600 dp and wider
|
|
29
|
+
* (the system ignores locks there), and browsers without the API. Browsers that have it lock only
|
|
30
|
+
* in fullscreen or installed web apps: PERMISSION_DENIED otherwise.
|
|
31
|
+
*/
|
|
32
|
+
lock(args: { orientation: OrientationLock }): Promise<void>;
|
|
33
|
+
/** Lets the system rotate freely again (the app's supported orientations). */
|
|
34
|
+
unlock(): Promise<void>;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface ScreenOrientationEvents {
|
|
38
|
+
/** The screen orientation changed, including 180° turns (landscape-primary ↔ landscape-secondary). */
|
|
39
|
+
change: OrientationState;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export const screenOrientation = definePlugin<ScreenOrientationApi, ScreenOrientationEvents>("screen-orientation", {
|
|
43
|
+
methods: ["get", "lock", "unlock"],
|
|
44
|
+
events: ["change"],
|
|
45
|
+
web,
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
const current = createLiveValue<OrientationState>(
|
|
49
|
+
readWebOrientation(),
|
|
50
|
+
(set) => {
|
|
51
|
+
if (screenOrientation.eventImplementation("change") === "none") return;
|
|
52
|
+
let live = true;
|
|
53
|
+
const stop = screenOrientation.listen("change", set);
|
|
54
|
+
screenOrientation
|
|
55
|
+
.get()
|
|
56
|
+
.then((state) => live && set(state))
|
|
57
|
+
.catch(() => {});
|
|
58
|
+
return () => {
|
|
59
|
+
live = false;
|
|
60
|
+
stop();
|
|
61
|
+
};
|
|
62
|
+
},
|
|
63
|
+
shallowEqual,
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
/** The current orientation type. Re-renders on every change. */
|
|
67
|
+
export function useScreenOrientation(): OrientationState {
|
|
68
|
+
return useLiveValue(current);
|
|
69
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { AkanNativeError } from "../../../packages/core/src/index.ts";
|
|
2
|
+
|
|
3
|
+
/** W3C screen orientation types. "primary" is the device's usual way up for that shape. */
|
|
4
|
+
export type OrientationType = "portrait-primary" | "portrait-secondary" | "landscape-primary" | "landscape-secondary";
|
|
5
|
+
|
|
6
|
+
/** What lock() accepts: one type, either way up of a shape, or any orientation. */
|
|
7
|
+
export type OrientationLock = "any" | "portrait" | "landscape" | OrientationType;
|
|
8
|
+
|
|
9
|
+
export const ORIENTATION_TYPES: readonly OrientationType[] = [
|
|
10
|
+
"portrait-primary",
|
|
11
|
+
"portrait-secondary",
|
|
12
|
+
"landscape-primary",
|
|
13
|
+
"landscape-secondary",
|
|
14
|
+
];
|
|
15
|
+
export const ORIENTATION_LOCKS: readonly OrientationLock[] = ["any", "portrait", "landscape", ...ORIENTATION_TYPES];
|
|
16
|
+
|
|
17
|
+
/** Checks lock()'s argument; the native implementations check the same list. */
|
|
18
|
+
export function checkLock(orientation: unknown): OrientationLock {
|
|
19
|
+
if (typeof orientation !== "string" || !(ORIENTATION_LOCKS as readonly string[]).includes(orientation)) {
|
|
20
|
+
throw new AkanNativeError(
|
|
21
|
+
"INVALID_ARGS",
|
|
22
|
+
`orientation must be one of ${ORIENTATION_LOCKS.join(", ")} (got ${JSON.stringify(orientation)})`,
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
return orientation as OrientationLock;
|
|
26
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { AkanNativeError, defineWebPlugin } from "../../../packages/core/src/index.ts";
|
|
2
|
+
import type { OrientationState, ScreenOrientationApi, ScreenOrientationEvents } from "./index.ts";
|
|
3
|
+
import { checkLock, ORIENTATION_TYPES, type OrientationType } from "./types.ts";
|
|
4
|
+
|
|
5
|
+
interface Orientation extends EventTarget {
|
|
6
|
+
readonly type: string;
|
|
7
|
+
lock?(orientation: string): Promise<void>;
|
|
8
|
+
unlock?(): void;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function orientation(): Orientation | undefined {
|
|
12
|
+
return typeof screen === "undefined" ? undefined : (screen as Screen & { orientation?: Orientation }).orientation;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function readWebOrientation(): OrientationState {
|
|
16
|
+
const type = orientation()?.type;
|
|
17
|
+
if (type && (ORIENTATION_TYPES as readonly string[]).includes(type)) return { type: type as OrientationType };
|
|
18
|
+
const portrait = typeof matchMedia === "function" ? matchMedia("(orientation: portrait)").matches : true;
|
|
19
|
+
return { type: portrait ? "portrait-primary" : "landscape-primary" };
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export const web = defineWebPlugin<ScreenOrientationApi, ScreenOrientationEvents>({
|
|
23
|
+
methods: {
|
|
24
|
+
get: async () => readWebOrientation(),
|
|
25
|
+
lock(args) {
|
|
26
|
+
const wanted = checkLock(args?.orientation);
|
|
27
|
+
const o = orientation();
|
|
28
|
+
if (typeof o?.lock !== "function")
|
|
29
|
+
return Promise.reject(new AkanNativeError("UNSUPPORTED", "this browser cannot lock the screen orientation"));
|
|
30
|
+
|
|
31
|
+
return o.lock(wanted).catch((error: unknown) => {
|
|
32
|
+
const name = (error as { name?: string })?.name;
|
|
33
|
+
const message = (error as Error)?.message ?? String(error);
|
|
34
|
+
if (name === "NotSupportedError") throw new AkanNativeError("UNSUPPORTED", message);
|
|
35
|
+
if (name === "SecurityError" || name === "NotAllowedError") {
|
|
36
|
+
throw new AkanNativeError(
|
|
37
|
+
"PERMISSION_DENIED",
|
|
38
|
+
`${message} (browsers lock the orientation only in fullscreen or an installed web app)`,
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
throw AkanNativeError.from(error);
|
|
42
|
+
});
|
|
43
|
+
},
|
|
44
|
+
async unlock() {
|
|
45
|
+
orientation()?.unlock?.();
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
events: {
|
|
49
|
+
change(emit) {
|
|
50
|
+
let last = readWebOrientation().type;
|
|
51
|
+
const check = () => {
|
|
52
|
+
const next = readWebOrientation();
|
|
53
|
+
if (next.type === last) return;
|
|
54
|
+
last = next.type;
|
|
55
|
+
emit({ type: next.type });
|
|
56
|
+
};
|
|
57
|
+
const o = orientation();
|
|
58
|
+
if (o) {
|
|
59
|
+
o.addEventListener("change", check);
|
|
60
|
+
return () => o.removeEventListener("change", check);
|
|
61
|
+
}
|
|
62
|
+
const q = typeof matchMedia === "function" ? matchMedia("(orientation: portrait)") : null;
|
|
63
|
+
q?.addEventListener("change", check);
|
|
64
|
+
return () => q?.removeEventListener("change", check);
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
});
|