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,155 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AkanNativeError,
|
|
3
|
+
createLiveValue,
|
|
4
|
+
definePlugin,
|
|
5
|
+
type ErrorCode,
|
|
6
|
+
type LiveValue,
|
|
7
|
+
} from "../../../packages/core/src/index.ts";
|
|
8
|
+
import { useLiveValue } from "../../../packages/react/src/index.ts";
|
|
9
|
+
import { web } from "./web.ts";
|
|
10
|
+
|
|
11
|
+
export type PermissionState = "granted" | "denied" | "prompt" | "prompt-with-rationale";
|
|
12
|
+
|
|
13
|
+
export interface LocationPermission {
|
|
14
|
+
/** "denied" also covers location services turned off system-wide (iOS reports it that way). */
|
|
15
|
+
location: PermissionState;
|
|
16
|
+
/**
|
|
17
|
+
* Whether positions are precise: iOS Precise Location on, Android ACCESS_FINE_LOCATION granted.
|
|
18
|
+
* false means approximate (a few km). null when location is not granted or the platform cannot tell (web).
|
|
19
|
+
*/
|
|
20
|
+
precise: boolean | null;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** A W3C GeolocationPosition, flattened. Distances in meters, angles in degrees, speed in m/s. */
|
|
24
|
+
export interface Position {
|
|
25
|
+
latitude: number;
|
|
26
|
+
longitude: number;
|
|
27
|
+
/** Radius of 68% confidence around latitude/longitude. */
|
|
28
|
+
accuracy: number;
|
|
29
|
+
/** Height above the WGS84 ellipsoid (as W3C and Android report it; iOS converts from its mean-sea-level value). */
|
|
30
|
+
altitude: number | null;
|
|
31
|
+
altitudeAccuracy: number | null;
|
|
32
|
+
/** Direction of travel, clockwise from true north. null when unknown or not moving. */
|
|
33
|
+
heading: number | null;
|
|
34
|
+
speed: number | null;
|
|
35
|
+
/** When the fix was taken, ms since the Unix epoch. */
|
|
36
|
+
timestamp: number;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Numbers must be finite on iOS and Android: the bridge is JSON, where Infinity becomes null, i.e.
|
|
41
|
+
* the default. For "any cached fix" pass a large number such as 86_400_000 (a day).
|
|
42
|
+
*/
|
|
43
|
+
export interface PositionOptions {
|
|
44
|
+
/**
|
|
45
|
+
* Ask for the best accuracy (GPS) instead of a battery-friendly fix (~100 m). Default false.
|
|
46
|
+
* On Android a balanced request never turns on GPS: without network location (the emulator)
|
|
47
|
+
* it only gets a fix another request produced recently, or times out.
|
|
48
|
+
*/
|
|
49
|
+
enableHighAccuracy?: boolean;
|
|
50
|
+
/** Give up after this many ms with NOT_FOUND, counted after the permission prompt. Default 30000; Android ends a single request after 30 s. */
|
|
51
|
+
timeout?: number;
|
|
52
|
+
/** Accept a cached fix up to this many ms old. Default 0 (always a new fix). */
|
|
53
|
+
maximumAge?: number;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* getCurrentPosition() asks for permission first when it was never asked, like the W3C API.
|
|
58
|
+
* It rejects with
|
|
59
|
+
* - PERMISSION_DENIED: the user denied location (or turned it off, on iOS)
|
|
60
|
+
* - NOT_FOUND: no position: timeout, location turned off (Android, web), no provider
|
|
61
|
+
* - INTERNAL: NSLocationWhenInUseUsageDescription missing (iOS) and other failures
|
|
62
|
+
* - UNSUPPORTED: macOS (WKWebView has no public geolocation permission hook and CoreLocation
|
|
63
|
+
* would need native desktop code) and browsers without navigator.geolocation (insecure context)
|
|
64
|
+
*/
|
|
65
|
+
export interface GeolocationApi {
|
|
66
|
+
getCurrentPosition(options?: PositionOptions): Promise<Position>;
|
|
67
|
+
checkPermission(): Promise<LocationPermission>;
|
|
68
|
+
/** Shows the system prompt when the state is "prompt" or "prompt-with-rationale"; otherwise returns the state. */
|
|
69
|
+
requestPermission(): Promise<LocationPermission>;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export interface GeolocationError {
|
|
73
|
+
code: ErrorCode;
|
|
74
|
+
message: string;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Position updates run while someone listens: "position" at balanced accuracy, and
|
|
79
|
+
* "highAccuracyPosition" with GPS. While both have listeners the host runs one high-accuracy
|
|
80
|
+
* watch and sends each fix to both. Updates stop while the app is in the background.
|
|
81
|
+
* "error" reports watch failures (permission denied or revoked, location turned off); it does not
|
|
82
|
+
* start a watch by itself.
|
|
83
|
+
*/
|
|
84
|
+
export interface GeolocationEvents {
|
|
85
|
+
position: Position;
|
|
86
|
+
highAccuracyPosition: Position;
|
|
87
|
+
error: GeolocationError;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export const geolocation = definePlugin<GeolocationApi, GeolocationEvents>("geolocation", {
|
|
91
|
+
methods: ["getCurrentPosition", "checkPermission", "requestPermission"],
|
|
92
|
+
events: ["position", "highAccuracyPosition", "error"],
|
|
93
|
+
web,
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
export interface WatchOptions {
|
|
97
|
+
enableHighAccuracy?: boolean;
|
|
98
|
+
onError?: (error: AkanNativeError) => void;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Calls `onPosition` for every new fix until the returned function is called. Like W3C
|
|
103
|
+
* watchPosition, it asks for permission first when it was never asked.
|
|
104
|
+
*/
|
|
105
|
+
export function watchPosition(onPosition: (position: Position) => void, options: WatchOptions = {}): () => void {
|
|
106
|
+
|
|
107
|
+
const { onError } = options;
|
|
108
|
+
const stopError = onError
|
|
109
|
+
? geolocation.listen("error", (e) => onError(new AkanNativeError(e.code, e.message)))
|
|
110
|
+
: null;
|
|
111
|
+
const stopPosition = geolocation.listen(options.enableHighAccuracy ? "highAccuracyPosition" : "position", onPosition);
|
|
112
|
+
return () => {
|
|
113
|
+
stopPosition();
|
|
114
|
+
stopError?.();
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export interface GeolocationState {
|
|
119
|
+
/** The latest fix, null until the first one. */
|
|
120
|
+
position: Position | null;
|
|
121
|
+
/** The latest failure; cleared by the next fix. */
|
|
122
|
+
error: AkanNativeError | null;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const watches = new Map<boolean, LiveValue<GeolocationState>>();
|
|
126
|
+
|
|
127
|
+
function watch(high: boolean): LiveValue<GeolocationState> {
|
|
128
|
+
let live = watches.get(high);
|
|
129
|
+
if (!live) {
|
|
130
|
+
const created: LiveValue<GeolocationState> = createLiveValue<GeolocationState>(
|
|
131
|
+
{ position: null, error: null },
|
|
132
|
+
(set) => {
|
|
133
|
+
if (geolocation.eventImplementation(high ? "highAccuracyPosition" : "position") === "none") {
|
|
134
|
+
set({
|
|
135
|
+
position: null,
|
|
136
|
+
error: new AkanNativeError("UNSUPPORTED", "geolocation is not supported on this platform"),
|
|
137
|
+
});
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
return watchPosition((position) => set({ position, error: null }), {
|
|
141
|
+
enableHighAccuracy: high,
|
|
142
|
+
onError: (error) => set({ position: created.get().position, error }),
|
|
143
|
+
});
|
|
144
|
+
},
|
|
145
|
+
);
|
|
146
|
+
live = created;
|
|
147
|
+
watches.set(high, created);
|
|
148
|
+
}
|
|
149
|
+
return live;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/** Watches the position while the component is mounted. Components with the same accuracy share one watch. */
|
|
153
|
+
export function useGeolocation(options: { enableHighAccuracy?: boolean } = {}): GeolocationState {
|
|
154
|
+
return useLiveValue(watch(options.enableHighAccuracy === true));
|
|
155
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { AkanNativeError, defineWebPlugin } from "../../../packages/core/src/index.ts";
|
|
2
|
+
import type {
|
|
3
|
+
GeolocationApi,
|
|
4
|
+
GeolocationError,
|
|
5
|
+
GeolocationEvents,
|
|
6
|
+
LocationPermission,
|
|
7
|
+
PermissionState,
|
|
8
|
+
Position,
|
|
9
|
+
PositionOptions,
|
|
10
|
+
} from "./index.ts";
|
|
11
|
+
|
|
12
|
+
export const DEFAULT_TIMEOUT = 30_000;
|
|
13
|
+
|
|
14
|
+
function api(): Geolocation {
|
|
15
|
+
const geo = typeof navigator === "undefined" ? undefined : navigator.geolocation;
|
|
16
|
+
if (!geo) throw new AkanNativeError("UNSUPPORTED", "navigator.geolocation is not available (insecure context?)");
|
|
17
|
+
return geo;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const finite = (value: number | null | undefined): number | null =>
|
|
21
|
+
typeof value === "number" && Number.isFinite(value) ? value : null;
|
|
22
|
+
|
|
23
|
+
export function toPosition(p: GeolocationPosition): Position {
|
|
24
|
+
const c = p.coords;
|
|
25
|
+
return {
|
|
26
|
+
latitude: c.latitude,
|
|
27
|
+
longitude: c.longitude,
|
|
28
|
+
accuracy: c.accuracy,
|
|
29
|
+
altitude: finite(c.altitude),
|
|
30
|
+
altitudeAccuracy: finite(c.altitudeAccuracy),
|
|
31
|
+
heading: finite(c.heading), // NaN while standing still
|
|
32
|
+
speed: finite(c.speed),
|
|
33
|
+
timestamp: p.timestamp,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/** W3C GeolocationPositionError codes: 1 PERMISSION_DENIED, 2 POSITION_UNAVAILABLE, 3 TIMEOUT. */
|
|
38
|
+
export function toError(error: { code: number; message?: string }): AkanNativeError {
|
|
39
|
+
if (error.code === 1) return new AkanNativeError("PERMISSION_DENIED", error.message || "location access was denied");
|
|
40
|
+
if (error.code === 3) return new AkanNativeError("NOT_FOUND", error.message || "no position within the timeout");
|
|
41
|
+
return new AkanNativeError("NOT_FOUND", error.message || "the position is unavailable");
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function positionOptions(options: PositionOptions | undefined): globalThis.PositionOptions {
|
|
45
|
+
const o = options ?? {};
|
|
46
|
+
const ms = (name: "timeout" | "maximumAge", fallback: number) => {
|
|
47
|
+
const value = o[name];
|
|
48
|
+
if (value === undefined || value === null) return fallback;
|
|
49
|
+
if (typeof value !== "number" || Number.isNaN(value) || value < 0)
|
|
50
|
+
throw new AkanNativeError("INVALID_ARGS", `${name} must be a number of ms >= 0`);
|
|
51
|
+
return value;
|
|
52
|
+
};
|
|
53
|
+
return {
|
|
54
|
+
enableHighAccuracy: o.enableHighAccuracy === true,
|
|
55
|
+
timeout: ms("timeout", DEFAULT_TIMEOUT),
|
|
56
|
+
maximumAge: ms("maximumAge", 0),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function current(options: globalThis.PositionOptions): Promise<Position> {
|
|
61
|
+
const geo = api();
|
|
62
|
+
return new Promise((resolve, reject) =>
|
|
63
|
+
geo.getCurrentPosition(
|
|
64
|
+
(p) => resolve(toPosition(p)),
|
|
65
|
+
(e) => reject(toError(e)),
|
|
66
|
+
options,
|
|
67
|
+
),
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
async function state(): Promise<PermissionState> {
|
|
72
|
+
try {
|
|
73
|
+
return (await navigator.permissions.query({ name: "geolocation" })).state;
|
|
74
|
+
} catch {
|
|
75
|
+
return "prompt";
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
let reportError: ((error: GeolocationError) => void) | null = null;
|
|
80
|
+
const report = (error: AkanNativeError) => reportError?.({ code: error.code, message: error.message });
|
|
81
|
+
|
|
82
|
+
function watchSource(enableHighAccuracy: boolean) {
|
|
83
|
+
return (emit: (position: Position) => void) => {
|
|
84
|
+
let geo: Geolocation;
|
|
85
|
+
try {
|
|
86
|
+
geo = api();
|
|
87
|
+
} catch (error) {
|
|
88
|
+
report(AkanNativeError.from(error));
|
|
89
|
+
return () => {};
|
|
90
|
+
}
|
|
91
|
+
const id = geo.watchPosition(
|
|
92
|
+
(p) => emit(toPosition(p)),
|
|
93
|
+
(e) => report(toError(e)),
|
|
94
|
+
{ enableHighAccuracy, maximumAge: 0 },
|
|
95
|
+
);
|
|
96
|
+
return () => geo.clearWatch(id);
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export const web = defineWebPlugin<GeolocationApi, GeolocationEvents>({
|
|
101
|
+
methods: {
|
|
102
|
+
getCurrentPosition: async (options) => current(positionOptions(options)),
|
|
103
|
+
checkPermission: async (): Promise<LocationPermission> => {
|
|
104
|
+
api();
|
|
105
|
+
return { location: await state(), precise: null };
|
|
106
|
+
},
|
|
107
|
+
async requestPermission(): Promise<LocationPermission> {
|
|
108
|
+
api();
|
|
109
|
+
const before = await state();
|
|
110
|
+
if (before === "granted" || before === "denied") return { location: before, precise: null };
|
|
111
|
+
|
|
112
|
+
try {
|
|
113
|
+
await current({ enableHighAccuracy: false, timeout: DEFAULT_TIMEOUT, maximumAge: Infinity });
|
|
114
|
+
return { location: "granted", precise: null };
|
|
115
|
+
} catch (error) {
|
|
116
|
+
if (error instanceof AkanNativeError && error.code === "PERMISSION_DENIED")
|
|
117
|
+
return { location: "denied", precise: null };
|
|
118
|
+
return { location: await state(), precise: null };
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
},
|
|
122
|
+
events: {
|
|
123
|
+
position: watchSource(false),
|
|
124
|
+
highAccuracyPosition: watchSource(true),
|
|
125
|
+
error(emit) {
|
|
126
|
+
reportError = emit;
|
|
127
|
+
return () => {
|
|
128
|
+
if (reportError === emit) reportError = null;
|
|
129
|
+
};
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
});
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import { AkanNativeError } from "../../../packages/core/src/index.ts";
|
|
4
|
+
import { defineDesktopPlugin } from "../../../packages/desktop/src/plugin.ts";
|
|
5
|
+
import type { GlobalShortcutApi, GlobalShortcutEvents } from "./index.ts";
|
|
6
|
+
|
|
7
|
+
function accelerator(value: unknown): string {
|
|
8
|
+
if (typeof value !== "string" || value.trim() === "")
|
|
9
|
+
throw new AkanNativeError("INVALID_ARGS", 'accelerator must be a string like "CmdOrCtrl+Shift+K"');
|
|
10
|
+
return value;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export default defineDesktopPlugin<GlobalShortcutApi, GlobalShortcutEvents>({
|
|
14
|
+
id: "global-shortcut",
|
|
15
|
+
methods: {
|
|
16
|
+
register: (args, ctx) =>
|
|
17
|
+
ctx.shell("hotkey.register", { accelerator: accelerator(args?.accelerator) }) as Promise<{ accelerator: string }>,
|
|
18
|
+
unregister: (args, ctx) =>
|
|
19
|
+
ctx.shell("hotkey.unregister", { accelerator: accelerator(args?.accelerator) }) as Promise<{ removed: boolean }>,
|
|
20
|
+
unregisterAll: async (_args, ctx) => {
|
|
21
|
+
await ctx.shell("hotkey.unregisterAll");
|
|
22
|
+
},
|
|
23
|
+
isRegistered: (args, ctx) =>
|
|
24
|
+
ctx.shell("hotkey.isRegistered", { accelerator: accelerator(args?.accelerator) }) as Promise<{
|
|
25
|
+
registered: boolean;
|
|
26
|
+
}>,
|
|
27
|
+
list: (_args, ctx) => ctx.shell("hotkey.list") as Promise<string[]>,
|
|
28
|
+
},
|
|
29
|
+
events: {
|
|
30
|
+
|
|
31
|
+
pressed: (emit, ctx) =>
|
|
32
|
+
ctx.onNativeEvent("hotkey", (e) => {
|
|
33
|
+
emit({ accelerator: e.accelerator as string }, "focused");
|
|
34
|
+
}),
|
|
35
|
+
},
|
|
36
|
+
});
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { definePlugin } from "../../../packages/core/src/index.ts";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* System-wide keyboard shortcuts that reach the app even when another app is in front
|
|
5
|
+
* (plugins.md §5).
|
|
6
|
+
*
|
|
7
|
+
* - Accelerators: modifiers plus one key joined by "+", e.g. "CmdOrCtrl+Shift+K", "Alt+F12".
|
|
8
|
+
* Modifiers: Cmd, Ctrl, CmdOrCtrl (Command on macOS), Alt/Option, Shift. Keys: A–Z, 0–9,
|
|
9
|
+
* F1–F20, punctuation, Space, Tab, Enter, Escape, Backspace, Delete, arrows, Home, End,
|
|
10
|
+
* PageUp, PageDown, Num0–Num9.
|
|
11
|
+
* - macOS: Carbon hot keys, no permission needed. Keys are positions on the US layout. A
|
|
12
|
+
* combination another app registered fails with an error; a system shortcut (Cmd+Space,
|
|
13
|
+
* Cmd+Tab) may register and never fire.
|
|
14
|
+
* - Shortcuts belong to the app: they stay registered when the page reloads, and registering
|
|
15
|
+
* one the app already has succeeds. `pressed` goes to the window the user was in last.
|
|
16
|
+
* - Windows: RegisterHotKey. CmdOrCtrl is Ctrl and Cmd the Windows key; some combinations
|
|
17
|
+
* (Win+L, Ctrl+Alt+Del) never reach an app.
|
|
18
|
+
* - Linux: X11 only (XGrabKey), with the same rules. On Wayland register() rejects UNSUPPORTED:
|
|
19
|
+
* GNOME and KDE offer global shortcuts there only through the GlobalShortcuts portal.
|
|
20
|
+
* - Web, iOS and Android: UNSUPPORTED.
|
|
21
|
+
*/
|
|
22
|
+
export interface GlobalShortcutApi {
|
|
23
|
+
/** Resolves with the canonical spelling ("CmdOrCtrl+Shift+K"). */
|
|
24
|
+
register(args: { accelerator: string }): Promise<{ accelerator: string }>;
|
|
25
|
+
unregister(args: { accelerator: string }): Promise<{ removed: boolean }>;
|
|
26
|
+
unregisterAll(): Promise<void>;
|
|
27
|
+
isRegistered(args: { accelerator: string }): Promise<{ registered: boolean }>;
|
|
28
|
+
/** The registered accelerators, as they were written. */
|
|
29
|
+
list(): Promise<string[]>;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface GlobalShortcutEvents {
|
|
33
|
+
/** `accelerator` as it was registered. */
|
|
34
|
+
pressed: { accelerator: string };
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export const globalShortcut = definePlugin<GlobalShortcutApi, GlobalShortcutEvents>("global-shortcut", {
|
|
38
|
+
methods: ["register", "unregister", "unregisterAll", "isRegistered", "list"],
|
|
39
|
+
events: ["pressed"],
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Registers a shortcut and calls `handler` when it is pressed. The returned function stops
|
|
44
|
+
* listening and unregisters the shortcut.
|
|
45
|
+
*/
|
|
46
|
+
export async function onShortcut(accelerator: string, handler: () => void): Promise<() => Promise<void>> {
|
|
47
|
+
await globalShortcut.register({ accelerator });
|
|
48
|
+
const stop = globalShortcut.listen("pressed", (e) => {
|
|
49
|
+
if (e.accelerator === accelerator) handler();
|
|
50
|
+
});
|
|
51
|
+
return async () => {
|
|
52
|
+
stop();
|
|
53
|
+
await globalShortcut.unregister({ accelerator });
|
|
54
|
+
};
|
|
55
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
package com.akanjs.plugins.haptics
|
|
2
|
+
|
|
3
|
+
import android.app.Activity
|
|
4
|
+
import android.content.Context
|
|
5
|
+
import android.media.AudioAttributes
|
|
6
|
+
import android.os.Build
|
|
7
|
+
import android.os.VibrationAttributes
|
|
8
|
+
import android.os.VibrationEffect
|
|
9
|
+
import android.os.Vibrator
|
|
10
|
+
import android.os.VibratorManager
|
|
11
|
+
import android.provider.Settings
|
|
12
|
+
import com.akanjs.runtime.AkanNativeErrorCode
|
|
13
|
+
import com.akanjs.runtime.AkanNativePluginContext
|
|
14
|
+
import com.akanjs.runtime.AkanNativeVoidReply
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* VibratorManager.defaultVibrator (API 31; the VIBRATOR_SERVICE vibrator below) with the VIBRATE
|
|
18
|
+
* permission (normal, granted at install).
|
|
19
|
+
* - impact / notification: composition primitives (API 30) where the vibrator supports them, else
|
|
20
|
+
* predefined effects, which fall back to a generic buzz on their own. Both are tuned per device.
|
|
21
|
+
* tauri-plugins-workspace/plugins/haptics/android/src/main/java/patterns (Impact.kt, Notification.kt)
|
|
22
|
+
* plays amplitude waveforms instead, which turn into plain buzzes on vibrators without amplitude
|
|
23
|
+
* control; its notification waveforms stay as the fallback here.
|
|
24
|
+
* - selection: EFFECT_TICK, the effect the framework uses for picker and clock ticks.
|
|
25
|
+
* - UI feedback is played with USAGE_TOUCH, so the user's "touch feedback" setting applies like
|
|
26
|
+
* System Haptics does on iOS. Below API 33 the service does not apply that setting, so the plugin
|
|
27
|
+
* reads it (Settings.System.HAPTIC_FEEDBACK_ENABLED) and plays with sonification audio
|
|
28
|
+
* attributes, which API 30+ maps to USAGE_TOUCH. vibrate() is a plain one-shot, like
|
|
29
|
+
* react-native VibrationModule.kt:26-34.
|
|
30
|
+
* - API 29 has no composition primitives (30; PRIMITIVE_LOW_TICK 31): predefined effects there.
|
|
31
|
+
* A device without a vibrator resolves and does nothing, like iOS without a Taptic Engine.
|
|
32
|
+
* Arguments arrive decoded and checked by the generated HapticsPluginSpec (PL-10).
|
|
33
|
+
*/
|
|
34
|
+
class HapticsPlugin(context: AkanNativePluginContext) : HapticsPluginSpec {
|
|
35
|
+
private val activity = context.activity
|
|
36
|
+
private val vibrator: Vibrator? =
|
|
37
|
+
if (Build.VERSION.SDK_INT >= 31) Api31.defaultVibrator(activity) else @Suppress("DEPRECATION") activity.getSystemService(Context.VIBRATOR_SERVICE) as? Vibrator
|
|
38
|
+
|
|
39
|
+
private class Step(val primitive: Int, val scale: Float, val delay: Int = 0)
|
|
40
|
+
|
|
41
|
+
override fun impact(args: HapticsImpactArgs, reply: AkanNativeVoidReply) {
|
|
42
|
+
val effect = when (args.style ?: HapticsImpactStyle.MEDIUM) {
|
|
43
|
+
HapticsImpactStyle.LIGHT -> compose(Step(PRIMITIVE_CLICK, 0.4f)) ?: VibrationEffect.createPredefined(VibrationEffect.EFFECT_TICK)
|
|
44
|
+
HapticsImpactStyle.MEDIUM -> compose(Step(PRIMITIVE_CLICK, 0.7f)) ?: VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK)
|
|
45
|
+
HapticsImpactStyle.HEAVY -> compose(Step(PRIMITIVE_CLICK, 1f)) ?: VibrationEffect.createPredefined(VibrationEffect.EFFECT_HEAVY_CLICK)
|
|
46
|
+
HapticsImpactStyle.SOFT -> compose(Step(PRIMITIVE_LOW_TICK, 1f)) ?: VibrationEffect.createPredefined(VibrationEffect.EFFECT_TICK)
|
|
47
|
+
HapticsImpactStyle.RIGID -> compose(Step(PRIMITIVE_TICK, 1f)) ?: VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK)
|
|
48
|
+
}
|
|
49
|
+
play(reply, effect, touch = true)
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
override fun notification(args: HapticsNotificationArgs, reply: AkanNativeVoidReply) {
|
|
53
|
+
val effect = when (args.type ?: HapticsNotificationType.SUCCESS) {
|
|
54
|
+
HapticsNotificationType.SUCCESS -> compose(Step(PRIMITIVE_CLICK, 0.5f), Step(PRIMITIVE_CLICK, 1f, 100))
|
|
55
|
+
?: waveform(longArrayOf(0, 40, 100, 40), intArrayOf(0, 50, 0, 60))
|
|
56
|
+
HapticsNotificationType.WARNING -> compose(Step(PRIMITIVE_CLICK, 1f), Step(PRIMITIVE_CLICK, 0.5f, 150))
|
|
57
|
+
?: waveform(longArrayOf(0, 40, 120, 60), intArrayOf(0, 40, 0, 60))
|
|
58
|
+
HapticsNotificationType.ERROR -> compose(Step(PRIMITIVE_CLICK, 1f), Step(PRIMITIVE_CLICK, 0.8f, 100), Step(PRIMITIVE_CLICK, 1f, 100))
|
|
59
|
+
?: waveform(longArrayOf(0, 60, 100, 40, 80, 50), intArrayOf(0, 50, 0, 40, 0, 50))
|
|
60
|
+
}
|
|
61
|
+
play(reply, effect, touch = true)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
override fun selection(reply: AkanNativeVoidReply) = play(reply, VibrationEffect.createPredefined(VibrationEffect.EFFECT_TICK), touch = true)
|
|
65
|
+
|
|
66
|
+
override fun vibrate(args: HapticsVibrateArgs, reply: AkanNativeVoidReply) {
|
|
67
|
+
val value = args.duration ?: 300.0
|
|
68
|
+
if (value < 1 || value > 10000) return reply.reject(AkanNativeErrorCode.INVALID_ARGS, "duration must be a number of milliseconds between 1 and 10000")
|
|
69
|
+
play(reply, VibrationEffect.createOneShot(Math.round(value), VibrationEffect.DEFAULT_AMPLITUDE), touch = false)
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** Primitives in sequence, or null when this Android or the vibrator cannot play every one of them. */
|
|
73
|
+
private fun compose(vararg steps: Step): VibrationEffect? {
|
|
74
|
+
val v = vibrator ?: return null
|
|
75
|
+
if (Build.VERSION.SDK_INT < 30) return null
|
|
76
|
+
if (Build.VERSION.SDK_INT < 31 && steps.any { it.primitive == PRIMITIVE_LOW_TICK }) return null
|
|
77
|
+
return Api30.compose(v, steps)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
private fun waveform(timings: LongArray, amplitudes: IntArray): VibrationEffect =
|
|
81
|
+
VibrationEffect.createWaveform(timings, amplitudes, -1)
|
|
82
|
+
|
|
83
|
+
/** Plays [effect]; [touch] feedback follows the user's touch feedback setting. */
|
|
84
|
+
@Suppress("DEPRECATION")
|
|
85
|
+
private fun play(reply: AkanNativeVoidReply, effect: VibrationEffect, touch: Boolean) {
|
|
86
|
+
val v = vibrator
|
|
87
|
+
if (v == null || !v.hasVibrator()) return reply.resolve()
|
|
88
|
+
try {
|
|
89
|
+
when {
|
|
90
|
+
!touch -> v.vibrate(effect)
|
|
91
|
+
Build.VERSION.SDK_INT >= 33 -> Api33.vibrateTouch(v, effect)
|
|
92
|
+
Settings.System.getInt(activity.contentResolver, Settings.System.HAPTIC_FEEDBACK_ENABLED, 1) != 0 -> v.vibrate(effect, SONIFICATION)
|
|
93
|
+
}
|
|
94
|
+
reply.resolve()
|
|
95
|
+
} catch (e: SecurityException) {
|
|
96
|
+
reply.reject(AkanNativeErrorCode.PERMISSION_DENIED, "android.permission.VIBRATE is missing from the app manifest")
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
private object Api30 {
|
|
101
|
+
fun compose(v: Vibrator, steps: Array<out Step>): VibrationEffect? {
|
|
102
|
+
if (!v.areAllPrimitivesSupported(*steps.map { it.primitive }.toIntArray())) return null
|
|
103
|
+
val composition = VibrationEffect.startComposition()
|
|
104
|
+
for (step in steps) composition.addPrimitive(step.primitive, step.scale, step.delay)
|
|
105
|
+
return composition.compose()
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
private object Api31 {
|
|
110
|
+
fun defaultVibrator(activity: Activity): Vibrator? = activity.getSystemService(VibratorManager::class.java)?.defaultVibrator
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
private object Api33 {
|
|
114
|
+
fun vibrateTouch(v: Vibrator, effect: VibrationEffect) = v.vibrate(effect, VibrationAttributes.createForUsage(VibrationAttributes.USAGE_TOUCH))
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
private companion object {
|
|
118
|
+
/** The pre-33 stand-in for USAGE_TOUCH (VibrationAttributes.Builder(AudioAttributes) maps them). */
|
|
119
|
+
val SONIFICATION: AudioAttributes = AudioAttributes.Builder()
|
|
120
|
+
.setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION)
|
|
121
|
+
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
|
|
122
|
+
.build()
|
|
123
|
+
const val PRIMITIVE_CLICK = VibrationEffect.Composition.PRIMITIVE_CLICK
|
|
124
|
+
const val PRIMITIVE_TICK = VibrationEffect.Composition.PRIMITIVE_TICK
|
|
125
|
+
const val PRIMITIVE_LOW_TICK = VibrationEffect.Composition.PRIMITIVE_LOW_TICK
|
|
126
|
+
}
|
|
127
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import AudioToolbox
|
|
2
|
+
import CoreHaptics
|
|
3
|
+
import UIKit
|
|
4
|
+
|
|
5
|
+
/// impact / notification / selection: UIKit feedback generators. They follow the user's System Haptics
|
|
6
|
+
/// setting and do nothing without a Taptic Engine (simulator, iPad), so calls always resolve.
|
|
7
|
+
/// - Generators are created once per kind with init(style:view:) / init(view:) (iOS 17.5; init() and
|
|
8
|
+
/// init(style:) are marked API_TO_BE_DEPRECATED in the iOS 26 SDK, and are what iOS 16 to 17.4
|
|
9
|
+
/// get). They attach to the web view, so one per call would pile up there.
|
|
10
|
+
/// - prepare() right after firing keeps the Taptic Engine ready for the next call (a picker scrolled
|
|
11
|
+
/// with selection()). tauri-plugins-workspace/plugins/haptics/ios/Sources/HapticsPlugin.swift:102-127
|
|
12
|
+
/// makes a new generator and prepares it immediately before firing, which hides no latency.
|
|
13
|
+
/// vibrate: react-native RCTVibration.mm:23-31 ignores the duration (kSystemSoundID_Vibrate is a fixed
|
|
14
|
+
/// ~400 ms buzz). Tauri (HapticsPlugin.swift:64-100) plays a continuous CHHapticEvent of the duration,
|
|
15
|
+
/// but creates an engine per call whose resetHandler captures it, so every call leaks one. Here one
|
|
16
|
+
/// engine is kept, and the system sound is the fallback without Core Haptics hardware.
|
|
17
|
+
/// Arguments arrive decoded and checked by the generated HapticsPluginSpec (PL-10).
|
|
18
|
+
final class HapticsPlugin: HapticsPluginSpec {
|
|
19
|
+
static let id = "haptics"
|
|
20
|
+
private let context: AkanNativePluginContext
|
|
21
|
+
private var impacts: [HapticsImpactStyle: UIImpactFeedbackGenerator] = [:]
|
|
22
|
+
private var notifier: UINotificationFeedbackGenerator?
|
|
23
|
+
private var selector: UISelectionFeedbackGenerator?
|
|
24
|
+
private var engine: CHHapticEngine?
|
|
25
|
+
private var player: CHHapticPatternPlayer?
|
|
26
|
+
|
|
27
|
+
init(context: AkanNativePluginContext) {
|
|
28
|
+
self.context = context
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
func impact(_ args: HapticsImpactArgs, _ reply: AkanNativeReply<Void>) {
|
|
32
|
+
let name = args.style ?? .medium
|
|
33
|
+
guard let view = context.webView else { return reply.reject(.internalError, "no web view") }
|
|
34
|
+
let style: UIImpactFeedbackGenerator.FeedbackStyle = switch name {
|
|
35
|
+
case .light: .light
|
|
36
|
+
case .medium: .medium
|
|
37
|
+
case .heavy: .heavy
|
|
38
|
+
case .soft: .soft
|
|
39
|
+
case .rigid: .rigid
|
|
40
|
+
}
|
|
41
|
+
let generator = impacts[name] ?? Self.impactGenerator(style, view)
|
|
42
|
+
impacts[name] = generator
|
|
43
|
+
generator.impactOccurred()
|
|
44
|
+
generator.prepare()
|
|
45
|
+
reply.resolve()
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
func notification(_ args: HapticsNotificationArgs, _ reply: AkanNativeReply<Void>) {
|
|
49
|
+
guard let view = context.webView else { return reply.reject(.internalError, "no web view") }
|
|
50
|
+
let type: UINotificationFeedbackGenerator.FeedbackType = switch args.type ?? .success {
|
|
51
|
+
case .success: .success
|
|
52
|
+
case .warning: .warning
|
|
53
|
+
case .error: .error
|
|
54
|
+
}
|
|
55
|
+
let generator = notifier ?? Self.notificationGenerator(view)
|
|
56
|
+
notifier = generator
|
|
57
|
+
generator.notificationOccurred(type)
|
|
58
|
+
generator.prepare()
|
|
59
|
+
reply.resolve()
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
func selection(_ reply: AkanNativeReply<Void>) {
|
|
63
|
+
guard let view = context.webView else { return reply.reject(.internalError, "no web view") }
|
|
64
|
+
let generator = selector ?? Self.selectionGenerator(view)
|
|
65
|
+
selector = generator
|
|
66
|
+
generator.selectionChanged()
|
|
67
|
+
generator.prepare()
|
|
68
|
+
reply.resolve()
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
func vibrate(_ args: HapticsVibrateArgs, _ reply: AkanNativeReply<Void>) {
|
|
72
|
+
let value = args.duration ?? 300
|
|
73
|
+
guard value >= 1, value <= 10000 else {
|
|
74
|
+
return reply.reject(.invalidArgs, "duration must be a number of milliseconds between 1 and 10000")
|
|
75
|
+
}
|
|
76
|
+
let milliseconds = value.rounded()
|
|
77
|
+
if !CHHapticEngine.capabilitiesForHardware().supportsHaptics || !playContinuous(seconds: milliseconds / 1000) {
|
|
78
|
+
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate) // fixed length; a no-op without a motor
|
|
79
|
+
}
|
|
80
|
+
reply.resolve()
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
private func playContinuous(seconds: Double) -> Bool {
|
|
84
|
+
do {
|
|
85
|
+
let engine = try self.engine ?? makeEngine()
|
|
86
|
+
try engine.start() // restarts it after auto shutdown, a reset or an interruption
|
|
87
|
+
let event = CHHapticEvent(
|
|
88
|
+
eventType: .hapticContinuous,
|
|
89
|
+
parameters: [
|
|
90
|
+
CHHapticEventParameter(parameterID: .hapticIntensity, value: 1),
|
|
91
|
+
CHHapticEventParameter(parameterID: .hapticSharpness, value: 1),
|
|
92
|
+
],
|
|
93
|
+
relativeTime: 0,
|
|
94
|
+
duration: seconds
|
|
95
|
+
)
|
|
96
|
+
let next = try engine.makePlayer(with: CHHapticPattern(events: [event], parameters: []))
|
|
97
|
+
try? player?.stop(atTime: CHHapticTimeImmediate) // a new vibration replaces a running one
|
|
98
|
+
try next.start(atTime: CHHapticTimeImmediate)
|
|
99
|
+
player = next
|
|
100
|
+
return true
|
|
101
|
+
} catch {
|
|
102
|
+
engine = nil // recreated on the next call
|
|
103
|
+
player = nil
|
|
104
|
+
return false
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
private static func impactGenerator(_ style: UIImpactFeedbackGenerator.FeedbackStyle, _ view: UIView) -> UIImpactFeedbackGenerator {
|
|
109
|
+
if #available(iOS 17.5, *) { UIImpactFeedbackGenerator(style: style, view: view) } else { UIImpactFeedbackGenerator(style: style) }
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
private static func notificationGenerator(_ view: UIView) -> UINotificationFeedbackGenerator {
|
|
113
|
+
if #available(iOS 17.5, *) { UINotificationFeedbackGenerator(view: view) } else { UINotificationFeedbackGenerator() }
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
private static func selectionGenerator(_ view: UIView) -> UISelectionFeedbackGenerator {
|
|
117
|
+
if #available(iOS 17.5, *) { UISelectionFeedbackGenerator(view: view) } else { UISelectionFeedbackGenerator() }
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
private func makeEngine() throws -> CHHapticEngine {
|
|
121
|
+
let engine = try CHHapticEngine()
|
|
122
|
+
engine.playsHapticsOnly = true // no audio session needed
|
|
123
|
+
engine.isAutoShutdownEnabled = true // powers the hardware down while idle
|
|
124
|
+
self.engine = engine
|
|
125
|
+
return engine
|
|
126
|
+
}
|
|
127
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "haptics",
|
|
3
|
+
"apiVersion": 1,
|
|
4
|
+
"methods": ["impact", "notification", "selection", "vibrate"],
|
|
5
|
+
"events": [],
|
|
6
|
+
"codegen": true,
|
|
7
|
+
"web": "./src/web.ts",
|
|
8
|
+
"desktop": null,
|
|
9
|
+
"ios": {
|
|
10
|
+
"sources": ["ios/*.swift"],
|
|
11
|
+
"class": "HapticsPlugin",
|
|
12
|
+
"frameworks": ["AudioToolbox", "CoreHaptics", "UIKit"]
|
|
13
|
+
},
|
|
14
|
+
"android": {
|
|
15
|
+
"sources": ["android/*.kt"],
|
|
16
|
+
"class": "com.akanjs.plugins.haptics.HapticsPlugin",
|
|
17
|
+
"permissions": ["android.permission.VIBRATE"]
|
|
18
|
+
}
|
|
19
|
+
}
|