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,140 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import { Database, type Statement } from "bun:sqlite";
|
|
4
|
+
import { mkdirSync } from "node:fs";
|
|
5
|
+
import { join } from "node:path";
|
|
6
|
+
import { AkanNativeError } from "../../../packages/core/src/index.ts";
|
|
7
|
+
import { type DesktopContext, defineDesktopPlugin } from "../../../packages/desktop/src/plugin.ts";
|
|
8
|
+
import { checkDb, checkName, checkParams, checkSql, columnValue, sqliteCode } from "./common.ts";
|
|
9
|
+
import type { SqliteSpec, StatementArgs } from "./index.ts";
|
|
10
|
+
|
|
11
|
+
function mapError(error: unknown): AkanNativeError {
|
|
12
|
+
if (error instanceof AkanNativeError) return error;
|
|
13
|
+
const errno = (error as { errno?: unknown })?.errno;
|
|
14
|
+
const message = String((error as Error)?.message ?? error);
|
|
15
|
+
return new AkanNativeError(typeof errno === "number" ? sqliteCode(errno) : "INTERNAL", message);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/** `dir` is replaceable so tests can use a temporary folder. */
|
|
19
|
+
export function createDesktopSqlite(dir: (ctx: DesktopContext) => string = (ctx) => join(ctx.appDataDir, "databases")) {
|
|
20
|
+
/** Page (window and document) → name → connection. */
|
|
21
|
+
const pages = new Map<string, Map<string, Database>>();
|
|
22
|
+
const pageOf = (ctx: DesktopContext) => `${ctx.window ?? 1}:${ctx.document?.id ?? ""}`;
|
|
23
|
+
|
|
24
|
+
const database = (db: unknown, ctx: DesktopContext): Database => {
|
|
25
|
+
const handle = pages.get(pageOf(ctx))?.get(checkDb(db));
|
|
26
|
+
if (!handle)
|
|
27
|
+
throw new AkanNativeError(
|
|
28
|
+
"NOT_FOUND",
|
|
29
|
+
`database ${String(db)} is not open in this page (call open first; a page load opens its own)`,
|
|
30
|
+
);
|
|
31
|
+
return handle;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
/** Rolls back what is left open and closes the connection. */
|
|
35
|
+
const shut = (db: Database) => {
|
|
36
|
+
try {
|
|
37
|
+
if (db.inTransaction) db.run("ROLLBACK");
|
|
38
|
+
} catch (error) {
|
|
39
|
+
console.error("[akan-native] sqlite: rolling back an open transaction failed", error);
|
|
40
|
+
}
|
|
41
|
+
db.close();
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
const closePage = (page: string) => {
|
|
45
|
+
const open = pages.get(page);
|
|
46
|
+
pages.delete(page);
|
|
47
|
+
for (const db of open?.values() ?? []) shut(db);
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
/** Prepares one statement with its values bound-checked, runs `use`, then finalizes it. */
|
|
51
|
+
const withStatement = <T>(
|
|
52
|
+
args: StatementArgs,
|
|
53
|
+
ctx: DesktopContext,
|
|
54
|
+
use: (statement: Statement, values: ReturnType<typeof checkParams>) => T,
|
|
55
|
+
): T => {
|
|
56
|
+
const db = database(args?.db, ctx);
|
|
57
|
+
const sql = checkSql(args.sql);
|
|
58
|
+
const values = checkParams(args.params);
|
|
59
|
+
let statement: Statement;
|
|
60
|
+
try {
|
|
61
|
+
statement = db.prepare(sql);
|
|
62
|
+
} catch (error) {
|
|
63
|
+
throw mapError(error);
|
|
64
|
+
}
|
|
65
|
+
try {
|
|
66
|
+
if (statement.paramsCount !== values.length) {
|
|
67
|
+
throw new AkanNativeError("INVALID_ARGS", `sql expects ${statement.paramsCount} values, got ${values.length}`);
|
|
68
|
+
}
|
|
69
|
+
return use(statement, values);
|
|
70
|
+
} catch (error) {
|
|
71
|
+
throw mapError(error);
|
|
72
|
+
} finally {
|
|
73
|
+
statement.finalize();
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
const closeAll = () => {
|
|
78
|
+
for (const page of [...pages.keys()]) closePage(page);
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
return defineDesktopPlugin<SqliteSpec>({
|
|
82
|
+
id: "sqlite",
|
|
83
|
+
setup(ctx) {
|
|
84
|
+
ctx.onQuit(closeAll);
|
|
85
|
+
},
|
|
86
|
+
methods: {
|
|
87
|
+
open(args, ctx) {
|
|
88
|
+
const name = checkName(args?.name);
|
|
89
|
+
const page = pageOf(ctx);
|
|
90
|
+
let open = pages.get(page);
|
|
91
|
+
if (open?.has(name)) return { db: name };
|
|
92
|
+
const folder = dir(ctx);
|
|
93
|
+
try {
|
|
94
|
+
mkdirSync(folder, { recursive: true });
|
|
95
|
+
const db = new Database(join(folder, name), { create: true, readwrite: true });
|
|
96
|
+
db.run("PRAGMA busy_timeout = 5000");
|
|
97
|
+
db.run("PRAGMA journal_mode = WAL");
|
|
98
|
+
db.run("PRAGMA foreign_keys = ON");
|
|
99
|
+
if (!open) {
|
|
100
|
+
open = new Map();
|
|
101
|
+
pages.set(page, open);
|
|
102
|
+
ctx.document?.own(() => closePage(page));
|
|
103
|
+
}
|
|
104
|
+
open.set(name, db);
|
|
105
|
+
} catch (error) {
|
|
106
|
+
const e = mapError(error);
|
|
107
|
+
throw new AkanNativeError(
|
|
108
|
+
e.code === "INVALID_ARGS" ? "INTERNAL" : e.code,
|
|
109
|
+
`cannot open ${name}: ${e.message}`,
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
return { db: name };
|
|
113
|
+
},
|
|
114
|
+
execute: (args, ctx) =>
|
|
115
|
+
withStatement(args, ctx, (statement, values) => {
|
|
116
|
+
const { changes, lastInsertRowid } = statement.run(...values);
|
|
117
|
+
return { changes, lastInsertId: Number(lastInsertRowid) };
|
|
118
|
+
}),
|
|
119
|
+
query: (args, ctx) =>
|
|
120
|
+
withStatement(args, ctx, (statement, values) => {
|
|
121
|
+
const columns = statement.columnNames;
|
|
122
|
+
const rows = (statement.values(...values) as unknown[][]).map((row) => {
|
|
123
|
+
const out: Record<string, unknown> = {};
|
|
124
|
+
for (const [i, name] of columns.entries()) out[name] = columnValue(row[i]);
|
|
125
|
+
return out;
|
|
126
|
+
});
|
|
127
|
+
return { columns, rows };
|
|
128
|
+
}),
|
|
129
|
+
close(args, ctx) {
|
|
130
|
+
const name = checkDb(args?.db);
|
|
131
|
+
const open = pages.get(pageOf(ctx));
|
|
132
|
+
const db = open?.get(name);
|
|
133
|
+
open?.delete(name);
|
|
134
|
+
if (db) shut(db);
|
|
135
|
+
},
|
|
136
|
+
},
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
export default createDesktopSqlite();
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { definePlugin, type Plugin } from "../../../packages/core/src/index.ts";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* A value bound to a `?` parameter or read from a column. The same rules hold on macOS, iOS and
|
|
5
|
+
* Android:
|
|
6
|
+
* - number: an integer within ±(2^53 − 1) binds as INTEGER, any other number as REAL (bun:sqlite's
|
|
7
|
+
* rule). Columns come back as numbers; INTEGER values beyond 2^53 lose precision, as in JSON.
|
|
8
|
+
* REAL infinities come back as null (JSON has no Infinity).
|
|
9
|
+
* - boolean: binds as 1 or 0 (SQLite has no boolean type) and reads back as a number.
|
|
10
|
+
* - BLOB: `{ base64 }` both ways (standard alphabet, padding optional when binding). An empty
|
|
11
|
+
* `{ base64: "" }` is a zero-length BLOB, not NULL.
|
|
12
|
+
* - string: TEXT, UTF-8 in the file. NUL characters are kept.
|
|
13
|
+
*/
|
|
14
|
+
export type SqlValue = string | number | boolean | null | SqlBlob;
|
|
15
|
+
|
|
16
|
+
export interface SqlBlob {
|
|
17
|
+
base64: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/** A result row: column name → value. Later columns with the same name replace earlier ones (alias them). */
|
|
21
|
+
export type SqlRow = Record<string, SqlValue>;
|
|
22
|
+
|
|
23
|
+
export interface SqlStatement {
|
|
24
|
+
/** A handle from open(). */
|
|
25
|
+
db: string;
|
|
26
|
+
/**
|
|
27
|
+
* One SQL statement; a trailing ";" and comments are fine. More than one statement rejects
|
|
28
|
+
* INVALID_ARGS instead of running only the first (what SQLite's prepare, Android and bun:sqlite
|
|
29
|
+
* would otherwise do silently): send them one call at a time.
|
|
30
|
+
*/
|
|
31
|
+
sql: string;
|
|
32
|
+
/** Positional values for `?`, `?NNN`, `:name` parameters (by index). The count must match the statement's. */
|
|
33
|
+
params?: SqlValue[];
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface ExecuteResult {
|
|
37
|
+
/**
|
|
38
|
+
* Rows inserted, updated or deleted by this statement, including rows changed by triggers and
|
|
39
|
+
* foreign key actions (the difference of sqlite3_total_changes()); 0 for other statements.
|
|
40
|
+
*/
|
|
41
|
+
changes: number;
|
|
42
|
+
/** sqlite3_last_insert_rowid() of the connection after the statement: the rowid of the most recent successful INSERT, 0 if none. */
|
|
43
|
+
lastInsertId: number;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export interface QueryResult<T extends SqlRow = SqlRow> {
|
|
47
|
+
/** Result column names in order (also for an empty result; rows are objects, whose key order is not guaranteed on iOS). */
|
|
48
|
+
columns: string[];
|
|
49
|
+
rows: T[];
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* SQLite databases in the app's data folder, with the SQLite that ships with the OS: libsqlite3 on
|
|
54
|
+
* iOS, android.database.sqlite on Android, bun:sqlite on desktop. Not available on the web.
|
|
55
|
+
*
|
|
56
|
+
* - Files: `<name>` in Library/Application Support/databases (iOS), the app's databases folder
|
|
57
|
+
* (Android, Context.getDatabasePath), `<app data>/databases` (desktop). Kept until the app is
|
|
58
|
+
* removed.
|
|
59
|
+
* - A handle belongs to the page that opened it (architecture review, 2026-09-26): each page load
|
|
60
|
+
* (and each desktop window) has its own connection, and when the page reloads, navigates or its
|
|
61
|
+
* window closes, an open transaction is rolled back and the connection closed. Call open() after
|
|
62
|
+
* every page load; open() of a name this page already opened returns it again.
|
|
63
|
+
* - Every database opens with `PRAGMA foreign_keys = ON` and a 5 s busy timeout. The journal is
|
|
64
|
+
* WAL on the desktop and iOS, where several windows' connections may share a file; Android keeps
|
|
65
|
+
* journal_mode DELETE (its WAL uses a pool of connections, and a statement's connection state
|
|
66
|
+
* would depend on the connection it lands on; Android's windows never overlap in one process).
|
|
67
|
+
* - Calls run one at a time off the main thread, in call order, for all databases together.
|
|
68
|
+
* Transactions: `execute({ sql: "BEGIN" })` … `"COMMIT"` / `"ROLLBACK"`. On Android BEGIN, COMMIT
|
|
69
|
+
* and ROLLBACK must start the statement text (Android runs them itself), and SAVEPOINT works
|
|
70
|
+
* only inside BEGIN … COMMIT.
|
|
71
|
+
* - Errors: INVALID_ARGS for bad arguments and for SQL errors (syntax, missing table, constraint
|
|
72
|
+
* violations, with SQLite's message), NOT_FOUND for a db that is not open, INTERNAL for I/O and
|
|
73
|
+
* other failures.
|
|
74
|
+
*/
|
|
75
|
+
export interface SqliteApi {
|
|
76
|
+
/**
|
|
77
|
+
* Opens (creating if needed) the database file `name`: letters, digits, ".", "_" and "-", up to
|
|
78
|
+
* 128 characters, starting with a letter or digit, not ending in -journal, -wal or -shm. The
|
|
79
|
+
* handle is the name.
|
|
80
|
+
*/
|
|
81
|
+
open(args: { name: string }): Promise<{ db: string }>;
|
|
82
|
+
/** Runs a statement and discards any rows it returns. */
|
|
83
|
+
execute(args: SqlStatement): Promise<ExecuteResult>;
|
|
84
|
+
/** Runs a statement and returns its rows (any statement: SELECT, `INSERT … RETURNING`, PRAGMA). */
|
|
85
|
+
query<T extends SqlRow = SqlRow>(args: SqlStatement): Promise<QueryResult<T>>;
|
|
86
|
+
/** Closes the database. Closing a database that is not open does nothing. */
|
|
87
|
+
close(args: { db: string }): Promise<void>;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/** The arguments of execute and query as the host receives them. */
|
|
91
|
+
export interface StatementArgs {
|
|
92
|
+
db: string;
|
|
93
|
+
sql: string;
|
|
94
|
+
/** SqlValue items; the hosts check them (the generator cannot express a union of primitives). */
|
|
95
|
+
params?: unknown[];
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* The bridge shape of SqliteApi, the spec the Swift and Kotlin bindings are generated from (PL-10):
|
|
100
|
+
* params and row values are `unknown` because a union of primitives has no generated form.
|
|
101
|
+
*/
|
|
102
|
+
export interface SqliteSpec {
|
|
103
|
+
open(args: { name: string }): Promise<{ db: string }>;
|
|
104
|
+
execute(args: StatementArgs): Promise<ExecuteResult>;
|
|
105
|
+
query(args: StatementArgs): Promise<{ columns: string[]; rows: Record<string, unknown>[] }>;
|
|
106
|
+
close(args: { db: string }): Promise<void>;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const handle = definePlugin<SqliteSpec>("sqlite", {
|
|
110
|
+
methods: ["open", "execute", "query", "close"],
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
/** The hosts return only SqlValue items, so the typed facade is the same object. */
|
|
114
|
+
export const sqlite = handle as unknown as Plugin<SqliteApi>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
package com.akanjs.plugins.toast
|
|
2
|
+
|
|
3
|
+
import android.widget.Toast
|
|
4
|
+
import com.akanjs.runtime.AkanNativeErrorCode
|
|
5
|
+
import com.akanjs.runtime.AkanNativePluginContext
|
|
6
|
+
import com.akanjs.runtime.AkanNativeVoidReply
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* The system text Toast, like capacitor-plugins/toast/android/.../Toast.java:21-30.
|
|
10
|
+
* - position is not applied: for apps targeting API 30+ Toast.setGravity does nothing on text
|
|
11
|
+
* toasts (and logs a warning), so Capacitor's setGravity calls (:24-28) have no effect on the
|
|
12
|
+
* Android versions akan-native supports (minSdk 35). Text toasts always sit at the bottom.
|
|
13
|
+
* - The system queues the app's toasts and shows them one after another; the page's in-page
|
|
14
|
+
* toast (src/queue.ts) copies that order for the other platforms.
|
|
15
|
+
* - The application context: a toast outlives the call and must not hold the activity.
|
|
16
|
+
* - Toasts need no notification permission (POST_NOTIFICATIONS) and TalkBack reads them.
|
|
17
|
+
* Entry points run on the main thread, where Toast needs its Looper.
|
|
18
|
+
* Arguments arrive decoded and checked by the generated ToastPluginSpec (PL-10).
|
|
19
|
+
*/
|
|
20
|
+
class ToastPlugin(private val context: AkanNativePluginContext) : ToastPluginSpec {
|
|
21
|
+
override fun show(args: ToastShowOptions, reply: AkanNativeVoidReply) {
|
|
22
|
+
if (args.text.isBlank()) return reply.reject(AkanNativeErrorCode.INVALID_ARGS, "text must not be empty")
|
|
23
|
+
val length = if (args.duration == ToastDuration.LONG) Toast.LENGTH_LONG else Toast.LENGTH_SHORT
|
|
24
|
+
Toast.makeText(context.activity.applicationContext, args.text, length).show()
|
|
25
|
+
reply.resolve()
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "toast",
|
|
3
|
+
"apiVersion": 1,
|
|
4
|
+
"methods": ["show"],
|
|
5
|
+
"events": [],
|
|
6
|
+
"codegen": true,
|
|
7
|
+
"web": "./src/web.ts",
|
|
8
|
+
"desktop": "web",
|
|
9
|
+
"ios": "web",
|
|
10
|
+
"android": {
|
|
11
|
+
"sources": ["android/*.kt"],
|
|
12
|
+
"class": "com.akanjs.plugins.toast.ToastPlugin"
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { definePlugin } from "../../../packages/core/src/index.ts";
|
|
2
|
+
import { web } from "./web.ts";
|
|
3
|
+
|
|
4
|
+
export { checkShow, createToastQueue, MAX_QUEUED, TOAST_DURATION_MS, type ToastItem } from "./queue.ts";
|
|
5
|
+
|
|
6
|
+
/** "short" shows the toast for 2 s, "long" for 3.5 s (Android's Toast.LENGTH_SHORT / LENGTH_LONG). */
|
|
7
|
+
export type ToastDuration = "short" | "long";
|
|
8
|
+
|
|
9
|
+
/** Where the toast appears. Android shows text toasts at the bottom whatever is asked (see show). */
|
|
10
|
+
export type ToastPosition = "top" | "center" | "bottom";
|
|
11
|
+
|
|
12
|
+
export interface ToastShowOptions {
|
|
13
|
+
/** The message, not empty. Android 12+ cuts text toasts to two lines. */
|
|
14
|
+
text: string;
|
|
15
|
+
/** Default "short". */
|
|
16
|
+
duration?: ToastDuration;
|
|
17
|
+
/** Default "bottom". Ignored on Android. */
|
|
18
|
+
position?: ToastPosition;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* A short message that goes away by itself (plugins.md §4.2), with the options of
|
|
23
|
+
* capacitor-plugins/toast/src/definitions.ts. It does not take touches or focus.
|
|
24
|
+
*
|
|
25
|
+
* Android shows the system Toast. Web, macOS and iOS show the same in-page toast, which stays
|
|
26
|
+
* above the app's own layers (the top layer, also above open dialogs) and is read by screen
|
|
27
|
+
* readers through a live region. On every platform toasts queue up and show one after another,
|
|
28
|
+
* as Android's do; at most 5 wait at a time, more are dropped (Android drops them as well).
|
|
29
|
+
*/
|
|
30
|
+
export interface ToastApi {
|
|
31
|
+
/**
|
|
32
|
+
* Resolves once the toast is queued or shown, not when it goes away. Rejects INVALID_ARGS for
|
|
33
|
+
* empty text or an unknown duration or position.
|
|
34
|
+
*/
|
|
35
|
+
show(options: ToastShowOptions): Promise<void>;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export const toast = definePlugin<ToastApi>("toast", {
|
|
39
|
+
methods: ["show"],
|
|
40
|
+
web,
|
|
41
|
+
});
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { AkanNativeError } from "../../../packages/core/src/index.ts";
|
|
2
|
+
import type { ToastDuration, ToastPosition } from "./index.ts";
|
|
3
|
+
|
|
4
|
+
/** Android's toast lengths (NotificationManagerService SHORT_DELAY / LONG_DELAY), also capacitor-plugins/toast/src/web.ts:8-10. */
|
|
5
|
+
export const TOAST_DURATION_MS: Readonly<Record<ToastDuration, number>> = { short: 2000, long: 3500 };
|
|
6
|
+
|
|
7
|
+
/** Toasts of one app that may be waiting or showing at once; Android drops more (MAX_PACKAGE_TOASTS). */
|
|
8
|
+
export const MAX_QUEUED = 5;
|
|
9
|
+
|
|
10
|
+
const DURATIONS: readonly ToastDuration[] = ["short", "long"];
|
|
11
|
+
const POSITIONS: readonly ToastPosition[] = ["top", "center", "bottom"];
|
|
12
|
+
|
|
13
|
+
export interface ToastItem {
|
|
14
|
+
text: string;
|
|
15
|
+
duration: ToastDuration;
|
|
16
|
+
position: ToastPosition;
|
|
17
|
+
/** How long the toast stays fully visible. */
|
|
18
|
+
ms: number;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function choice<T extends string>(value: unknown, allowed: readonly T[], fallback: T, name: string): T {
|
|
22
|
+
if (value === undefined || value === null) return fallback;
|
|
23
|
+
if (typeof value === "string" && (allowed as readonly string[]).includes(value)) return value as T;
|
|
24
|
+
throw new AkanNativeError("INVALID_ARGS", `${name} must be one of ${allowed.join(", ")}`);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** Checks show()'s options the way the Android plugin does (generated checks plus the empty text). */
|
|
28
|
+
export function checkShow(options: unknown): ToastItem {
|
|
29
|
+
if (typeof options !== "object" || options === null) throw new AkanNativeError("INVALID_ARGS", "text is required");
|
|
30
|
+
const { text, duration, position } = options as Record<string, unknown>;
|
|
31
|
+
if (text === undefined || text === null) throw new AkanNativeError("INVALID_ARGS", "text is required");
|
|
32
|
+
if (typeof text !== "string") throw new AkanNativeError("INVALID_ARGS", "text must be a string");
|
|
33
|
+
if (text.trim() === "") throw new AkanNativeError("INVALID_ARGS", "text must not be empty");
|
|
34
|
+
const d = choice(duration, DURATIONS, "short", "duration");
|
|
35
|
+
return { text, duration: d, position: choice(position, POSITIONS, "bottom", "position"), ms: TOAST_DURATION_MS[d] };
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* One toast at a time, in order, like Android's toast queue. `display` resolves once its toast is
|
|
40
|
+
* gone. `push` returns false when MAX_QUEUED toasts are already waiting or showing (the toast is dropped).
|
|
41
|
+
*/
|
|
42
|
+
export function createToastQueue(display: (item: ToastItem) => Promise<void>, max = MAX_QUEUED) {
|
|
43
|
+
const waiting: ToastItem[] = [];
|
|
44
|
+
let busy = false;
|
|
45
|
+
|
|
46
|
+
const next = () => {
|
|
47
|
+
if (busy) return;
|
|
48
|
+
const item = waiting.shift();
|
|
49
|
+
if (!item) return;
|
|
50
|
+
busy = true;
|
|
51
|
+
let shown: Promise<void>;
|
|
52
|
+
try {
|
|
53
|
+
shown = display(item);
|
|
54
|
+
} catch (error) {
|
|
55
|
+
shown = Promise.reject(error);
|
|
56
|
+
}
|
|
57
|
+
shown
|
|
58
|
+
.catch((error) => console.warn("[akan-native] toast: showing a toast failed", error))
|
|
59
|
+
.finally(() => {
|
|
60
|
+
busy = false;
|
|
61
|
+
next();
|
|
62
|
+
});
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
return {
|
|
66
|
+
push(item: ToastItem): boolean {
|
|
67
|
+
if (waiting.length + (busy ? 1 : 0) >= max) return false;
|
|
68
|
+
waiting.push(item);
|
|
69
|
+
next();
|
|
70
|
+
return true;
|
|
71
|
+
},
|
|
72
|
+
/** Waiting plus showing. */
|
|
73
|
+
get size(): number {
|
|
74
|
+
return waiting.length + (busy ? 1 : 0);
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { AkanNativeError, defineWebPlugin } from "../../../packages/core/src/index.ts";
|
|
2
|
+
import type { ToastApi } from "./index.ts";
|
|
3
|
+
import { checkShow, createToastQueue, MAX_QUEUED, type ToastItem } from "./queue.ts";
|
|
4
|
+
|
|
5
|
+
const P = "akan-native-toast";
|
|
6
|
+
const FADE_MS = 180;
|
|
7
|
+
|
|
8
|
+
const CSS = `
|
|
9
|
+
.${P}{all:initial;display:block;box-sizing:border-box;position:fixed;inset:auto;left:50%;z-index:2147483647;margin:0;
|
|
10
|
+
padding:10px 18px;border:0;border-radius:18px;width:max-content;max-width:min(560px,calc(100vw - 32px));height:auto;overflow:hidden;
|
|
11
|
+
background:rgba(38,38,40,.94);color:#fff;font:15px/1.35 system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
|
|
12
|
+
text-align:center;white-space:pre-wrap;overflow-wrap:anywhere;box-shadow:0 6px 24px rgba(0,0,0,.24);
|
|
13
|
+
pointer-events:none;user-select:none;-webkit-user-select:none;
|
|
14
|
+
opacity:0;transform:translateX(-50%);translate:0 12px;transition:opacity ${FADE_MS}ms ease-out,translate ${FADE_MS}ms ease-out}
|
|
15
|
+
.${P}-bottom{bottom:calc(56px + env(safe-area-inset-bottom,0px))}
|
|
16
|
+
.${P}-top{top:calc(48px + env(safe-area-inset-top,0px));translate:0 -12px}
|
|
17
|
+
.${P}-center{top:50%;transform:translate(-50%,-50%);translate:0 0;scale:.96;transition:opacity ${FADE_MS}ms ease-out,scale ${FADE_MS}ms ease-out}
|
|
18
|
+
.${P}.${P}-on{opacity:1;translate:0 0;scale:1}
|
|
19
|
+
@media (prefers-color-scheme:dark){.${P}{background:rgba(232,232,237,.96);color:#1c1c1e;box-shadow:0 6px 24px rgba(0,0,0,.5)}}
|
|
20
|
+
@media (prefers-reduced-motion:reduce){.${P}{translate:0 0;scale:1;transition:opacity ${FADE_MS}ms linear}}
|
|
21
|
+
.${P}-live{position:fixed;left:0;top:0;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
|
|
22
|
+
`;
|
|
23
|
+
|
|
24
|
+
let sheet: CSSStyleSheet | null = null;
|
|
25
|
+
|
|
26
|
+
function injectStyle(): void {
|
|
27
|
+
if (sheet || document.getElementById(`${P}-style`)) return;
|
|
28
|
+
if (typeof CSSStyleSheet === "function" && "adoptedStyleSheets" in document) {
|
|
29
|
+
try {
|
|
30
|
+
sheet = new CSSStyleSheet();
|
|
31
|
+
sheet.replaceSync(CSS);
|
|
32
|
+
document.adoptedStyleSheets = [...document.adoptedStyleSheets, sheet];
|
|
33
|
+
return;
|
|
34
|
+
} catch {
|
|
35
|
+
sheet = null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const style = document.createElement("style");
|
|
39
|
+
style.id = `${P}-style`;
|
|
40
|
+
style.textContent = CSS;
|
|
41
|
+
(document.head ?? document.documentElement).append(style);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const wait = (ms: number) => new Promise<void>((resolve) => setTimeout(resolve, ms));
|
|
45
|
+
|
|
46
|
+
let live: HTMLElement | null = null;
|
|
47
|
+
|
|
48
|
+
/** A modal <dialog> makes the rest of the page inert, live regions included. */
|
|
49
|
+
function topModal(): Element | null {
|
|
50
|
+
try {
|
|
51
|
+
const open = document.querySelectorAll("dialog:modal");
|
|
52
|
+
return open.length > 0 ? open[open.length - 1]! : null;
|
|
53
|
+
} catch {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/** The persistent live region; `fresh` when it was just (re)inserted and needs a moment to be registered. */
|
|
59
|
+
function liveRegion(): { region: HTMLElement; fresh: boolean } {
|
|
60
|
+
const host = topModal() ?? document.body ?? document.documentElement;
|
|
61
|
+
if (live && live.parentNode === host) return { region: live, fresh: false };
|
|
62
|
+
if (!live) {
|
|
63
|
+
live = document.createElement("div");
|
|
64
|
+
live.className = `${P}-live`;
|
|
65
|
+
live.setAttribute("role", "status");
|
|
66
|
+
live.setAttribute("aria-live", "polite");
|
|
67
|
+
live.setAttribute("aria-atomic", "true");
|
|
68
|
+
}
|
|
69
|
+
host.append(live);
|
|
70
|
+
return { region: live, fresh: true };
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** Moves a bottom toast above the soft keyboard when it covers the layout viewport's bottom. */
|
|
74
|
+
function liftAboveKeyboard(box: HTMLElement): void {
|
|
75
|
+
const vv = typeof visualViewport === "undefined" ? null : visualViewport;
|
|
76
|
+
if (!vv || vv.scale > 1.01) return;
|
|
77
|
+
const covered = innerHeight - vv.offsetTop - vv.height;
|
|
78
|
+
if (covered > 80) box.style.bottom = `${Math.round(covered + 16)}px`;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function display(item: ToastItem): Promise<void> {
|
|
82
|
+
injectStyle();
|
|
83
|
+
const parent = document.body ?? document.documentElement;
|
|
84
|
+
const box = document.createElement("div");
|
|
85
|
+
box.className = `${P} ${P}-${item.position}`;
|
|
86
|
+
box.setAttribute("aria-hidden", "true");
|
|
87
|
+
box.textContent = item.text;
|
|
88
|
+
if (item.position === "bottom") liftAboveKeyboard(box);
|
|
89
|
+
parent.append(box);
|
|
90
|
+
const popover = typeof box.showPopover === "function";
|
|
91
|
+
if (popover) {
|
|
92
|
+
try {
|
|
93
|
+
box.popover = "manual";
|
|
94
|
+
box.showPopover();
|
|
95
|
+
} catch {
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
void box.offsetWidth;
|
|
99
|
+
box.classList.add(`${P}-on`);
|
|
100
|
+
|
|
101
|
+
const { region, fresh } = liveRegion();
|
|
102
|
+
region.textContent = "";
|
|
103
|
+
const announced = wait(fresh ? 150 : 50).then(() => {
|
|
104
|
+
region.textContent = item.text;
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
return Promise.all([announced, wait(item.ms + FADE_MS)])
|
|
108
|
+
.then(() => {
|
|
109
|
+
box.classList.remove(`${P}-on`);
|
|
110
|
+
return wait(FADE_MS);
|
|
111
|
+
})
|
|
112
|
+
.finally(() => {
|
|
113
|
+
if (popover && box.matches(":popover-open")) box.hidePopover();
|
|
114
|
+
box.remove();
|
|
115
|
+
if (region.textContent === item.text) region.textContent = "";
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const queue = createToastQueue(display);
|
|
120
|
+
|
|
121
|
+
export const web = defineWebPlugin<ToastApi>({
|
|
122
|
+
methods: {
|
|
123
|
+
async show(options) {
|
|
124
|
+
const item = checkShow(options);
|
|
125
|
+
if (typeof document === "undefined") throw new AkanNativeError("UNSUPPORTED", "toasts need a document");
|
|
126
|
+
if (!queue.push(item))
|
|
127
|
+
console.warn(`[akan-native] toast: ${MAX_QUEUED} toasts are already queued, dropped "${item.text}"`);
|
|
128
|
+
},
|
|
129
|
+
},
|
|
130
|
+
});
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "tray",
|
|
3
|
+
"apiVersion": 1,
|
|
4
|
+
"methods": ["create", "update", "setIcon", "setTitle", "setTooltip", "setMenu", "remove", "list", "trigger"],
|
|
5
|
+
"events": ["click", "menuClick"],
|
|
6
|
+
"web": null,
|
|
7
|
+
"desktop": "./src/desktop.ts",
|
|
8
|
+
"ios": null,
|
|
9
|
+
"android": null
|
|
10
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
import { AkanNativeError } from "../../../packages/core/src/index.ts";
|
|
4
|
+
import { type DesktopContext, defineDesktopPlugin } from "../../../packages/desktop/src/plugin.ts";
|
|
5
|
+
import type { TrayApi, TrayEvents, TrayInfo, TrayOptions } from "./index.ts";
|
|
6
|
+
|
|
7
|
+
let nextId = 1;
|
|
8
|
+
|
|
9
|
+
function id(value: unknown): string {
|
|
10
|
+
if (typeof value !== "string" || value === "")
|
|
11
|
+
throw new AkanNativeError("INVALID_ARGS", "id must be a non-empty string");
|
|
12
|
+
return value;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const nullableString = (v: unknown) => v === undefined || v === null || typeof v === "string";
|
|
16
|
+
const boolean = (v: unknown) => v === undefined || typeof v === "boolean";
|
|
17
|
+
|
|
18
|
+
/** The fields given, checked; the shell changes only these. */
|
|
19
|
+
function fields(args: Partial<TrayOptions>): Record<string, unknown> {
|
|
20
|
+
const out: Record<string, unknown> = {};
|
|
21
|
+
if (!nullableString(args.icon)) throw new AkanNativeError("INVALID_ARGS", "icon must be a path or null");
|
|
22
|
+
if (args.title !== undefined && typeof args.title !== "string")
|
|
23
|
+
throw new AkanNativeError("INVALID_ARGS", "title must be a string");
|
|
24
|
+
if (!nullableString(args.tooltip)) throw new AkanNativeError("INVALID_ARGS", "tooltip must be a string or null");
|
|
25
|
+
if (args.menu !== undefined && args.menu !== null && !Array.isArray(args.menu))
|
|
26
|
+
throw new AkanNativeError("INVALID_ARGS", "menu must be an array of menu items or null");
|
|
27
|
+
if (!boolean(args.iconAsTemplate) || !boolean(args.menuOnLeftClick))
|
|
28
|
+
throw new AkanNativeError("INVALID_ARGS", "iconAsTemplate and menuOnLeftClick must be booleans");
|
|
29
|
+
for (const key of ["icon", "iconAsTemplate", "title", "tooltip", "menu", "menuOnLeftClick"] as const) {
|
|
30
|
+
if (args[key] !== undefined) out[key] = args[key];
|
|
31
|
+
}
|
|
32
|
+
return out;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const update = (ctx: DesktopContext, trayId: string, args: Partial<TrayOptions>) =>
|
|
36
|
+
ctx.shell("tray.update", { ...fields(args), id: trayId }) as Promise<TrayInfo>;
|
|
37
|
+
|
|
38
|
+
export default defineDesktopPlugin<TrayApi, TrayEvents>({
|
|
39
|
+
id: "tray",
|
|
40
|
+
methods: {
|
|
41
|
+
create: (args, ctx) => {
|
|
42
|
+
const trayId = args?.id === undefined ? `tray-${nextId++}` : id(args.id);
|
|
43
|
+
return ctx.shell("tray.create", { ...fields(args ?? {}), id: trayId }) as Promise<TrayInfo>;
|
|
44
|
+
},
|
|
45
|
+
update: (args, ctx) => update(ctx, id(args?.id), args),
|
|
46
|
+
setIcon: (args, ctx) => update(ctx, id(args?.id), { icon: args.icon ?? null, iconAsTemplate: args.iconAsTemplate }),
|
|
47
|
+
setTitle: (args, ctx) => update(ctx, id(args?.id), { title: args.title }),
|
|
48
|
+
setTooltip: (args, ctx) => update(ctx, id(args?.id), { tooltip: args.tooltip ?? null }),
|
|
49
|
+
setMenu: (args, ctx) =>
|
|
50
|
+
update(ctx, id(args?.id), { menu: args.menu ?? null, menuOnLeftClick: args.menuOnLeftClick }),
|
|
51
|
+
remove: async (args, ctx) => {
|
|
52
|
+
await ctx.shell("tray.remove", { id: id(args?.id) });
|
|
53
|
+
},
|
|
54
|
+
list: (_args, ctx) => ctx.shell("tray.list") as Promise<TrayInfo[]>,
|
|
55
|
+
trigger: async (args, ctx) => {
|
|
56
|
+
if (args?.button !== undefined && args.button !== "left" && args.button !== "right")
|
|
57
|
+
throw new AkanNativeError("INVALID_ARGS", "button must be left or right");
|
|
58
|
+
await ctx.shell("tray.trigger", { id: id(args?.id), button: args.button });
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
events: {
|
|
62
|
+
|
|
63
|
+
click: (emit, ctx) =>
|
|
64
|
+
ctx.onNativeEvent("tray", (e) => {
|
|
65
|
+
if (e.event === "click")
|
|
66
|
+
emit({ id: e.tray as string, button: e.button === "right" ? "right" : "left" }, "focused");
|
|
67
|
+
}),
|
|
68
|
+
menuClick: (emit, ctx) =>
|
|
69
|
+
ctx.onNativeEvent("tray", (e) => {
|
|
70
|
+
if (e.event === "menuClick") emit({ id: e.tray as string, item: e.item as string }, "focused");
|
|
71
|
+
}),
|
|
72
|
+
},
|
|
73
|
+
});
|