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.
Files changed (731) hide show
  1. package/README.ko.md +0 -1
  2. package/README.md +0 -1
  3. package/base/baseEnv.ts +40 -3
  4. package/client/cookie.ts +56 -20
  5. package/client/device.ts +47 -95
  6. package/client/frameConfig.ts +2 -2
  7. package/client/native.ts +44 -0
  8. package/client/router.ts +11 -1
  9. package/client/rscNavigation.ts +5 -0
  10. package/client/storage.ts +68 -39
  11. package/fetch/client/fetchClient.ts +13 -4
  12. package/index.ts +47 -46
  13. package/package.json +6 -87
  14. package/server/devtools/signalSerializer.ts +1 -2
  15. package/server/hmr/devHmrController.ts +29 -11
  16. package/server/resolver/signal.resolver.ts +1 -10
  17. package/server/routeTreeBuilder.ts +8 -11
  18. package/server/routing/apiRouter.ts +15 -2
  19. package/server/rscClient.tsx +1 -2
  20. package/server/ssrFromRscRenderer.tsx +2 -0
  21. package/server/webRouter.ts +1 -0
  22. package/signal/CrossSiteGuard.ts +34 -2
  23. package/signal/endpoint.ts +12 -7
  24. package/signal/endpointInfo.ts +13 -0
  25. package/signal/internal.ts +9 -5
  26. package/signal/serializer/fetch.serializer.ts +6 -3
  27. package/signal/slice.ts +34 -24
  28. package/store/baseSt.ts +0 -1
  29. package/store/storeInstance.ts +29 -17
  30. package/types/client/cookie.d.ts +6 -4
  31. package/types/client/device.d.ts +7 -10
  32. package/types/client/native.d.ts +26 -0
  33. package/types/client/rscNavigation.d.ts +4 -0
  34. package/types/client/storage.d.ts +8 -1
  35. package/types/index.d.ts +48 -44
  36. package/types/server/hmr/devHmrController.d.ts +2 -1
  37. package/types/server/resolver/signal.resolver.d.ts +0 -1
  38. package/types/server/rscClient.d.ts +0 -3
  39. package/types/signal/CrossSiteGuard.d.ts +7 -2
  40. package/types/signal/endpoint.d.ts +1 -1
  41. package/types/signal/endpointInfo.d.ts +3 -0
  42. package/types/signal/slice.d.ts +3 -2
  43. package/types/store/baseSt.d.ts +0 -13
  44. package/types/vendor/@akanjs/native/packages/cli/src/api.d.ts +182 -0
  45. package/types/vendor/@akanjs/native/packages/cli/src/commands/build.d.ts +28 -0
  46. package/types/vendor/@akanjs/native/packages/cli/src/commands/compat.d.ts +2 -0
  47. package/types/vendor/@akanjs/native/packages/cli/src/commands/dev.d.ts +2 -0
  48. package/types/vendor/@akanjs/native/packages/cli/src/commands/doctor.d.ts +37 -0
  49. package/types/vendor/@akanjs/native/packages/cli/src/commands/plugin.d.ts +2 -0
  50. package/types/vendor/@akanjs/native/packages/cli/src/commands/signing.d.ts +2 -0
  51. package/types/vendor/@akanjs/native/packages/cli/src/commands/test.d.ts +2 -0
  52. package/types/vendor/@akanjs/native/packages/cli/src/commands/toolchain.d.ts +2 -0
  53. package/types/vendor/@akanjs/native/packages/cli/src/commands/update.d.ts +2 -0
  54. package/types/vendor/@akanjs/native/packages/cli/src/config.d.ts +278 -0
  55. package/types/vendor/@akanjs/native/packages/cli/src/index.d.ts +2 -0
  56. package/types/vendor/@akanjs/native/packages/cli/src/lib/acl.d.ts +21 -0
  57. package/types/vendor/@akanjs/native/packages/cli/src/lib/apilevel.d.ts +40 -0
  58. package/types/vendor/@akanjs/native/packages/cli/src/lib/apk.d.ts +36 -0
  59. package/types/vendor/@akanjs/native/packages/cli/src/lib/args.d.ts +9 -0
  60. package/types/vendor/@akanjs/native/packages/cli/src/lib/boot.d.ts +32 -0
  61. package/types/vendor/@akanjs/native/packages/cli/src/lib/chrome.d.ts +6 -0
  62. package/types/vendor/@akanjs/native/packages/cli/src/lib/codegen.d.ts +94 -0
  63. package/types/vendor/@akanjs/native/packages/cli/src/lib/compat.d.ts +49 -0
  64. package/types/vendor/@akanjs/native/packages/cli/src/lib/configkeys.d.ts +2 -0
  65. package/types/vendor/@akanjs/native/packages/cli/src/lib/csp.d.ts +51 -0
  66. package/types/vendor/@akanjs/native/packages/cli/src/lib/env.d.ts +44 -0
  67. package/types/vendor/@akanjs/native/packages/cli/src/lib/exec.d.ts +31 -0
  68. package/types/vendor/@akanjs/native/packages/cli/src/lib/googleservices.d.ts +2 -0
  69. package/types/vendor/@akanjs/native/packages/cli/src/lib/hmr.d.ts +120 -0
  70. package/types/vendor/@akanjs/native/packages/cli/src/lib/html.d.ts +20 -0
  71. package/types/vendor/@akanjs/native/packages/cli/src/lib/icons.d.ts +44 -0
  72. package/types/vendor/@akanjs/native/packages/cli/src/lib/image.d.ts +21 -0
  73. package/types/vendor/@akanjs/native/packages/cli/src/lib/iossigning.d.ts +81 -0
  74. package/types/vendor/@akanjs/native/packages/cli/src/lib/launch.d.ts +51 -0
  75. package/types/vendor/@akanjs/native/packages/cli/src/lib/log.d.ts +42 -0
  76. package/types/vendor/@akanjs/native/packages/cli/src/lib/manifestmerge.d.ts +18 -0
  77. package/types/vendor/@akanjs/native/packages/cli/src/lib/maven.d.ts +97 -0
  78. package/types/vendor/@akanjs/native/packages/cli/src/lib/names.d.ts +45 -0
  79. package/types/vendor/@akanjs/native/packages/cli/src/lib/native-plugins.d.ts +67 -0
  80. package/types/vendor/@akanjs/native/packages/cli/src/lib/nativeconfig.d.ts +11 -0
  81. package/types/vendor/@akanjs/native/packages/cli/src/lib/permissions.d.ts +10 -0
  82. package/types/vendor/@akanjs/native/packages/cli/src/lib/plist.d.ts +11 -0
  83. package/types/vendor/@akanjs/native/packages/cli/src/lib/png.d.ts +11 -0
  84. package/types/vendor/@akanjs/native/packages/cli/src/lib/prepare.d.ts +138 -0
  85. package/types/vendor/@akanjs/native/packages/cli/src/lib/privacy.d.ts +13 -0
  86. package/types/vendor/@akanjs/native/packages/cli/src/lib/project.d.ts +208 -0
  87. package/types/vendor/@akanjs/native/packages/cli/src/lib/root.d.ts +1 -0
  88. package/types/vendor/@akanjs/native/packages/cli/src/lib/routes.d.ts +1 -0
  89. package/types/vendor/@akanjs/native/packages/cli/src/lib/serve.d.ts +17 -0
  90. package/types/vendor/@akanjs/native/packages/cli/src/lib/signing.d.ts +14 -0
  91. package/types/vendor/@akanjs/native/packages/cli/src/lib/spec.d.ts +96 -0
  92. package/types/vendor/@akanjs/native/packages/cli/src/lib/toolchains.d.ts +150 -0
  93. package/types/vendor/@akanjs/native/packages/cli/src/lib/updates.d.ts +77 -0
  94. package/types/vendor/@akanjs/native/packages/cli/src/lib/vectors.d.ts +13 -0
  95. package/types/vendor/@akanjs/native/packages/cli/src/lib/xml.d.ts +13 -0
  96. package/types/vendor/@akanjs/native/packages/cli/src/platforms/android.d.ts +57 -0
  97. package/types/vendor/@akanjs/native/packages/cli/src/platforms/desktop-update.d.ts +4 -0
  98. package/types/vendor/@akanjs/native/packages/cli/src/platforms/desktop.d.ts +40 -0
  99. package/types/vendor/@akanjs/native/packages/cli/src/platforms/index.d.ts +14 -0
  100. package/types/vendor/@akanjs/native/packages/cli/src/platforms/ios.d.ts +44 -0
  101. package/types/vendor/@akanjs/native/packages/cli/src/platforms/linux.d.ts +6 -0
  102. package/types/vendor/@akanjs/native/packages/cli/src/platforms/macos.d.ts +7 -0
  103. package/types/vendor/@akanjs/native/packages/cli/src/platforms/targets.d.ts +4 -0
  104. package/types/vendor/@akanjs/native/packages/cli/src/platforms/web-run.d.ts +15 -0
  105. package/types/vendor/@akanjs/native/packages/cli/src/platforms/web.d.ts +2 -0
  106. package/types/vendor/@akanjs/native/packages/cli/src/platforms/windows.d.ts +8 -0
  107. package/types/vendor/@akanjs/native/packages/cli/src/platforms.d.ts +1 -0
  108. package/types/vendor/@akanjs/native/packages/cli/src.d.ts +1 -0
  109. package/types/vendor/@akanjs/native/packages/core/src/acl.d.ts +97 -0
  110. package/types/vendor/@akanjs/native/packages/core/src/boot.d.ts +66 -0
  111. package/types/vendor/@akanjs/native/packages/core/src/contract.d.ts +35 -0
  112. package/types/vendor/@akanjs/native/packages/core/src/errors.d.ts +27 -0
  113. package/types/vendor/@akanjs/native/packages/core/src/files.d.ts +23 -0
  114. package/types/vendor/@akanjs/native/packages/core/src/index.d.ts +14 -0
  115. package/types/vendor/@akanjs/native/packages/core/src/kernel.d.ts +112 -0
  116. package/types/vendor/@akanjs/native/packages/core/src/live.d.ts +12 -0
  117. package/types/vendor/@akanjs/native/packages/core/src/mime.d.ts +2 -0
  118. package/types/vendor/@akanjs/native/packages/core/src/plugin.d.ts +71 -0
  119. package/types/vendor/@akanjs/native/packages/core/src/protocol.d.ts +109 -0
  120. package/types/vendor/@akanjs/native/packages/core/src/runtime.d.ts +66 -0
  121. package/types/vendor/@akanjs/native/packages/core/src/state.d.ts +28 -0
  122. package/types/vendor/@akanjs/native/packages/core/src/testing.d.ts +41 -0
  123. package/types/vendor/@akanjs/native/packages/core/src/version.d.ts +2 -0
  124. package/types/vendor/@akanjs/native/packages/core/src/veto.d.ts +17 -0
  125. package/types/vendor/@akanjs/native/packages/core/src.d.ts +1 -0
  126. package/types/vendor/@akanjs/native/packages/desktop/src/deeplinks.d.ts +24 -0
  127. package/types/vendor/@akanjs/native/packages/desktop/src/delta.d.ts +2 -0
  128. package/types/vendor/@akanjs/native/packages/desktop/src/dispatcher.d.ts +95 -0
  129. package/types/vendor/@akanjs/native/packages/desktop/src/ffi.d.ts +144 -0
  130. package/types/vendor/@akanjs/native/packages/desktop/src/host.d.ts +11 -0
  131. package/types/vendor/@akanjs/native/packages/desktop/src/lifecycle.d.ts +40 -0
  132. package/types/vendor/@akanjs/native/packages/desktop/src/main.d.ts +4 -0
  133. package/types/vendor/@akanjs/native/packages/desktop/src/page-veto.d.ts +17 -0
  134. package/types/vendor/@akanjs/native/packages/desktop/src/paths.d.ts +25 -0
  135. package/types/vendor/@akanjs/native/packages/desktop/src/plugin.d.ts +179 -0
  136. package/types/vendor/@akanjs/native/packages/react/src/index.d.ts +8 -0
  137. package/types/vendor/@akanjs/native/packages/react/src.d.ts +1 -0
  138. package/types/vendor/@akanjs/native/plugins/accessibility/src/announce.d.ts +8 -0
  139. package/types/vendor/@akanjs/native/plugins/accessibility/src/index.d.ts +47 -0
  140. package/types/vendor/@akanjs/native/plugins/accessibility/src/web.d.ts +4 -0
  141. package/types/vendor/@akanjs/native/plugins/accessibility/src.d.ts +1 -0
  142. package/types/vendor/@akanjs/native/plugins/app/src/desktop.d.ts +3 -0
  143. package/types/vendor/@akanjs/native/plugins/app/src/index.d.ts +66 -0
  144. package/types/vendor/@akanjs/native/plugins/app/src/web.d.ts +2 -0
  145. package/types/vendor/@akanjs/native/plugins/app/src.d.ts +1 -0
  146. package/types/vendor/@akanjs/native/plugins/app-state/src/index.d.ts +19 -0
  147. package/types/vendor/@akanjs/native/plugins/app-state/src/web.d.ts +2 -0
  148. package/types/vendor/@akanjs/native/plugins/app-state/src.d.ts +1 -0
  149. package/types/vendor/@akanjs/native/plugins/appearance/src/desktop.d.ts +9 -0
  150. package/types/vendor/@akanjs/native/plugins/appearance/src/index.d.ts +32 -0
  151. package/types/vendor/@akanjs/native/plugins/appearance/src/setting.d.ts +6 -0
  152. package/types/vendor/@akanjs/native/plugins/appearance/src/web.d.ts +3 -0
  153. package/types/vendor/@akanjs/native/plugins/appearance/src.d.ts +1 -0
  154. package/types/vendor/@akanjs/native/plugins/auth-session/src/args.d.ts +18 -0
  155. package/types/vendor/@akanjs/native/plugins/auth-session/src/desktop.d.ts +17 -0
  156. package/types/vendor/@akanjs/native/plugins/auth-session/src/index.d.ts +41 -0
  157. package/types/vendor/@akanjs/native/plugins/auth-session/src.d.ts +1 -0
  158. package/types/vendor/@akanjs/native/plugins/autostart/src/desktop.d.ts +44 -0
  159. package/types/vendor/@akanjs/native/plugins/autostart/src/index.d.ts +44 -0
  160. package/types/vendor/@akanjs/native/plugins/autostart/src.d.ts +1 -0
  161. package/types/vendor/@akanjs/native/plugins/badge/src/count.d.ts +4 -0
  162. package/types/vendor/@akanjs/native/plugins/badge/src/desktop.d.ts +3 -0
  163. package/types/vendor/@akanjs/native/plugins/badge/src/index.d.ts +37 -0
  164. package/types/vendor/@akanjs/native/plugins/badge/src/web.d.ts +2 -0
  165. package/types/vendor/@akanjs/native/plugins/badge/src.d.ts +1 -0
  166. package/types/vendor/@akanjs/native/plugins/biometric/src/index.d.ts +53 -0
  167. package/types/vendor/@akanjs/native/plugins/biometric/src.d.ts +1 -0
  168. package/types/vendor/@akanjs/native/plugins/browser/src/args.d.ts +8 -0
  169. package/types/vendor/@akanjs/native/plugins/browser/src/desktop.d.ts +9 -0
  170. package/types/vendor/@akanjs/native/plugins/browser/src/index.d.ts +36 -0
  171. package/types/vendor/@akanjs/native/plugins/browser/src/web.d.ts +2 -0
  172. package/types/vendor/@akanjs/native/plugins/browser/src.d.ts +1 -0
  173. package/types/vendor/@akanjs/native/plugins/camera/src/desktop.d.ts +5 -0
  174. package/types/vendor/@akanjs/native/plugins/camera/src/index.d.ts +55 -0
  175. package/types/vendor/@akanjs/native/plugins/camera/src/web.d.ts +2 -0
  176. package/types/vendor/@akanjs/native/plugins/camera/src.d.ts +1 -0
  177. package/types/vendor/@akanjs/native/plugins/clipboard/src/desktop.d.ts +8 -0
  178. package/types/vendor/@akanjs/native/plugins/clipboard/src/index.d.ts +40 -0
  179. package/types/vendor/@akanjs/native/plugins/clipboard/src/web.d.ts +2 -0
  180. package/types/vendor/@akanjs/native/plugins/clipboard/src.d.ts +1 -0
  181. package/types/vendor/@akanjs/native/plugins/device/src/desktop.d.ts +33 -0
  182. package/types/vendor/@akanjs/native/plugins/device/src/index.d.ts +55 -0
  183. package/types/vendor/@akanjs/native/plugins/device/src/web.d.ts +22 -0
  184. package/types/vendor/@akanjs/native/plugins/device/src.d.ts +1 -0
  185. package/types/vendor/@akanjs/native/plugins/dialog/src/desktop.d.ts +3 -0
  186. package/types/vendor/@akanjs/native/plugins/dialog/src/index.d.ts +60 -0
  187. package/types/vendor/@akanjs/native/plugins/dialog/src/options.d.ts +29 -0
  188. package/types/vendor/@akanjs/native/plugins/dialog/src/web.d.ts +2 -0
  189. package/types/vendor/@akanjs/native/plugins/dialog/src.d.ts +1 -0
  190. package/types/vendor/@akanjs/native/plugins/dock/src/desktop.d.ts +3 -0
  191. package/types/vendor/@akanjs/native/plugins/dock/src/index.d.ts +46 -0
  192. package/types/vendor/@akanjs/native/plugins/dock/src.d.ts +1 -0
  193. package/types/vendor/@akanjs/native/plugins/file-picker/src/common.d.ts +33 -0
  194. package/types/vendor/@akanjs/native/plugins/file-picker/src/desktop.d.ts +9 -0
  195. package/types/vendor/@akanjs/native/plugins/file-picker/src/index.d.ts +84 -0
  196. package/types/vendor/@akanjs/native/plugins/file-picker/src/web.d.ts +6 -0
  197. package/types/vendor/@akanjs/native/plugins/file-picker/src.d.ts +1 -0
  198. package/types/vendor/@akanjs/native/plugins/filesystem/src/common.d.ts +49 -0
  199. package/types/vendor/@akanjs/native/plugins/filesystem/src/desktop.d.ts +8 -0
  200. package/types/vendor/@akanjs/native/plugins/filesystem/src/index.d.ts +123 -0
  201. package/types/vendor/@akanjs/native/plugins/filesystem/src/web.d.ts +2 -0
  202. package/types/vendor/@akanjs/native/plugins/filesystem/src.d.ts +1 -0
  203. package/types/vendor/@akanjs/native/plugins/geolocation/src/index.d.ts +93 -0
  204. package/types/vendor/@akanjs/native/plugins/geolocation/src/web.d.ts +11 -0
  205. package/types/vendor/@akanjs/native/plugins/geolocation/src.d.ts +1 -0
  206. package/types/vendor/@akanjs/native/plugins/global-shortcut/src/desktop.d.ts +3 -0
  207. package/types/vendor/@akanjs/native/plugins/global-shortcut/src/index.d.ts +52 -0
  208. package/types/vendor/@akanjs/native/plugins/global-shortcut/src.d.ts +1 -0
  209. package/types/vendor/@akanjs/native/plugins/haptics/src/index.d.ts +31 -0
  210. package/types/vendor/@akanjs/native/plugins/haptics/src/web.d.ts +2 -0
  211. package/types/vendor/@akanjs/native/plugins/haptics/src.d.ts +1 -0
  212. package/types/vendor/@akanjs/native/plugins/http/src/common.d.ts +71 -0
  213. package/types/vendor/@akanjs/native/plugins/http/src/desktop.d.ts +5 -0
  214. package/types/vendor/@akanjs/native/plugins/http/src/index.d.ts +104 -0
  215. package/types/vendor/@akanjs/native/plugins/http/src/web.d.ts +2 -0
  216. package/types/vendor/@akanjs/native/plugins/http/src.d.ts +1 -0
  217. package/types/vendor/@akanjs/native/plugins/iap/src/index.d.ts +171 -0
  218. package/types/vendor/@akanjs/native/plugins/iap/src.d.ts +1 -0
  219. package/types/vendor/@akanjs/native/plugins/keep-awake/src/desktop.d.ts +15 -0
  220. package/types/vendor/@akanjs/native/plugins/keep-awake/src/index.d.ts +33 -0
  221. package/types/vendor/@akanjs/native/plugins/keep-awake/src/web.d.ts +2 -0
  222. package/types/vendor/@akanjs/native/plugins/keep-awake/src.d.ts +1 -0
  223. package/types/vendor/@akanjs/native/plugins/keyboard/src/index.d.ts +42 -0
  224. package/types/vendor/@akanjs/native/plugins/keyboard/src/web.d.ts +2 -0
  225. package/types/vendor/@akanjs/native/plugins/keyboard/src.d.ts +1 -0
  226. package/types/vendor/@akanjs/native/plugins/local-notifications/src/desktop.d.ts +29 -0
  227. package/types/vendor/@akanjs/native/plugins/local-notifications/src/index.d.ts +126 -0
  228. package/types/vendor/@akanjs/native/plugins/local-notifications/src/schedule.d.ts +38 -0
  229. package/types/vendor/@akanjs/native/plugins/local-notifications/src/timers.d.ts +25 -0
  230. package/types/vendor/@akanjs/native/plugins/local-notifications/src/web.d.ts +4 -0
  231. package/types/vendor/@akanjs/native/plugins/local-notifications/src.d.ts +1 -0
  232. package/types/vendor/@akanjs/native/plugins/menu/src/desktop.d.ts +3 -0
  233. package/types/vendor/@akanjs/native/plugins/menu/src/index.d.ts +85 -0
  234. package/types/vendor/@akanjs/native/plugins/menu/src.d.ts +1 -0
  235. package/types/vendor/@akanjs/native/plugins/network/src/index.d.ts +22 -0
  236. package/types/vendor/@akanjs/native/plugins/network/src/web.d.ts +3 -0
  237. package/types/vendor/@akanjs/native/plugins/network/src.d.ts +1 -0
  238. package/types/vendor/@akanjs/native/plugins/opener/src/desktop.d.ts +14 -0
  239. package/types/vendor/@akanjs/native/plugins/opener/src/index.d.ts +33 -0
  240. package/types/vendor/@akanjs/native/plugins/opener/src/url.d.ts +16 -0
  241. package/types/vendor/@akanjs/native/plugins/opener/src/web.d.ts +2 -0
  242. package/types/vendor/@akanjs/native/plugins/opener/src.d.ts +1 -0
  243. package/types/vendor/@akanjs/native/plugins/preferences/src/desktop.d.ts +3 -0
  244. package/types/vendor/@akanjs/native/plugins/preferences/src/index.d.ts +26 -0
  245. package/types/vendor/@akanjs/native/plugins/preferences/src/web.d.ts +2 -0
  246. package/types/vendor/@akanjs/native/plugins/preferences/src.d.ts +1 -0
  247. package/types/vendor/@akanjs/native/plugins/push/src/index.d.ts +57 -0
  248. package/types/vendor/@akanjs/native/plugins/push/src.d.ts +1 -0
  249. package/types/vendor/@akanjs/native/plugins/screen/src/desktop.d.ts +3 -0
  250. package/types/vendor/@akanjs/native/plugins/screen/src/index.d.ts +70 -0
  251. package/types/vendor/@akanjs/native/plugins/screen/src/web.d.ts +18 -0
  252. package/types/vendor/@akanjs/native/plugins/screen/src.d.ts +1 -0
  253. package/types/vendor/@akanjs/native/plugins/screen-orientation/src/index.d.ts +32 -0
  254. package/types/vendor/@akanjs/native/plugins/screen-orientation/src/types.d.ts +8 -0
  255. package/types/vendor/@akanjs/native/plugins/screen-orientation/src/web.d.ts +3 -0
  256. package/types/vendor/@akanjs/native/plugins/screen-orientation/src.d.ts +1 -0
  257. package/types/vendor/@akanjs/native/plugins/secure-storage/src/desktop.d.ts +16 -0
  258. package/types/vendor/@akanjs/native/plugins/secure-storage/src/index.d.ts +39 -0
  259. package/types/vendor/@akanjs/native/plugins/secure-storage/src.d.ts +1 -0
  260. package/types/vendor/@akanjs/native/plugins/share/src/index.d.ts +55 -0
  261. package/types/vendor/@akanjs/native/plugins/share/src/options.d.ts +6 -0
  262. package/types/vendor/@akanjs/native/plugins/share/src/web.d.ts +5 -0
  263. package/types/vendor/@akanjs/native/plugins/share/src.d.ts +1 -0
  264. package/types/vendor/@akanjs/native/plugins/single-instance/src/desktop.d.ts +8 -0
  265. package/types/vendor/@akanjs/native/plugins/single-instance/src/index.d.ts +25 -0
  266. package/types/vendor/@akanjs/native/plugins/single-instance/src/socket.d.ts +46 -0
  267. package/types/vendor/@akanjs/native/plugins/single-instance/src.d.ts +1 -0
  268. package/types/vendor/@akanjs/native/plugins/splash-screen/src/index.d.ts +19 -0
  269. package/types/vendor/@akanjs/native/plugins/splash-screen/src/web.d.ts +4 -0
  270. package/types/vendor/@akanjs/native/plugins/splash-screen/src.d.ts +1 -0
  271. package/types/vendor/@akanjs/native/plugins/sqlite/src/common.d.ts +34 -0
  272. package/types/vendor/@akanjs/native/plugins/sqlite/src/desktop.d.ts +6 -0
  273. package/types/vendor/@akanjs/native/plugins/sqlite/src/index.d.ts +115 -0
  274. package/types/vendor/@akanjs/native/plugins/sqlite/src.d.ts +1 -0
  275. package/types/vendor/@akanjs/native/plugins/toast/src/index.d.ts +30 -0
  276. package/types/vendor/@akanjs/native/plugins/toast/src/queue.d.ts +23 -0
  277. package/types/vendor/@akanjs/native/plugins/toast/src/web.d.ts +2 -0
  278. package/types/vendor/@akanjs/native/plugins/toast/src.d.ts +1 -0
  279. package/types/vendor/@akanjs/native/plugins/tray/src/desktop.d.ts +3 -0
  280. package/types/vendor/@akanjs/native/plugins/tray/src/index.d.ts +113 -0
  281. package/types/vendor/@akanjs/native/plugins/tray/src.d.ts +1 -0
  282. package/types/vendor/@akanjs/native/plugins/updates/src/desktop.d.ts +4 -0
  283. package/types/vendor/@akanjs/native/plugins/updates/src/index.d.ts +68 -0
  284. package/types/vendor/@akanjs/native/plugins/updates/src.d.ts +1 -0
  285. package/types/vendor/@akanjs/native/plugins/window/src/desktop.d.ts +6 -0
  286. package/types/vendor/@akanjs/native/plugins/window/src/index.d.ts +185 -0
  287. package/types/vendor/@akanjs/native/plugins/window/src/web.d.ts +2 -0
  288. package/types/vendor/@akanjs/native/plugins/window/src.d.ts +1 -0
  289. package/types/vendor/@akanjs/native/plugins/window-state/src/desktop.d.ts +7 -0
  290. package/types/vendor/@akanjs/native/plugins/window-state/src/index.d.ts +33 -0
  291. package/types/vendor/@akanjs/native/plugins/window-state/src/state.d.ts +39 -0
  292. package/types/vendor/@akanjs/native/plugins/window-state/src.d.ts +1 -0
  293. package/types/webkit/index.d.ts +0 -2
  294. package/types/webkit/nativeNavigation.d.ts +25 -0
  295. package/types/webkit/nativePurchase.d.ts +37 -0
  296. package/types/webkit/useCamera.d.ts +13 -15
  297. package/types/webkit/useGeoLocation.d.ts +4 -5
  298. package/types/webkit/usePurchase.d.ts +12 -16
  299. package/ui/Link/Anchor.tsx +2 -5
  300. package/ui/System/Client.tsx +2 -6
  301. package/vendor/@akanjs/native/LICENSE +21 -0
  302. package/vendor/@akanjs/native/README.ko.md +88 -0
  303. package/vendor/@akanjs/native/README.md +93 -0
  304. package/vendor/@akanjs/native/THIRD_PARTY_NOTICES.md +237 -0
  305. package/vendor/@akanjs/native/native/android/maven.lock.json +1751 -0
  306. package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeAcl.kt +243 -0
  307. package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeActivity.kt +936 -0
  308. package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeApplication.kt +189 -0
  309. package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeAssetServer.kt +225 -0
  310. package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeBridge.kt +444 -0
  311. package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeCompat.kt +55 -0
  312. package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeContract.kt +99 -0
  313. package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeEd25519.kt +100 -0
  314. package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeFileProvider.kt +71 -0
  315. package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeKernel.kt +324 -0
  316. package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativePlugin.kt +361 -0
  317. package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeSpec.kt +100 -0
  318. package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeUpdates.kt +305 -0
  319. package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeVectors.kt +132 -0
  320. package/vendor/@akanjs/native/native/desktop/Cargo.lock +2565 -0
  321. package/vendor/@akanjs/native/native/desktop/Cargo.toml +49 -0
  322. package/vendor/@akanjs/native/native/desktop/build.rs +19 -0
  323. package/vendor/@akanjs/native/native/desktop/rust-toolchain.toml +7 -0
  324. package/vendor/@akanjs/native/native/desktop/src/accelerator.rs +466 -0
  325. package/vendor/@akanjs/native/native/desktop/src/autostart.rs +158 -0
  326. package/vendor/@akanjs/native/native/desktop/src/camera.rs +53 -0
  327. package/vendor/@akanjs/native/native/desktop/src/chrome.rs +710 -0
  328. package/vendor/@akanjs/native/native/desktop/src/contract.rs +105 -0
  329. package/vendor/@akanjs/native/native/desktop/src/devproxy.rs +234 -0
  330. package/vendor/@akanjs/native/native/desktop/src/dialog_args.rs +189 -0
  331. package/vendor/@akanjs/native/native/desktop/src/dock.rs +209 -0
  332. package/vendor/@akanjs/native/native/desktop/src/hotkey.rs +209 -0
  333. package/vendor/@akanjs/native/native/desktop/src/js_panels.rs +125 -0
  334. package/vendor/@akanjs/native/native/desktop/src/json.rs +272 -0
  335. package/vendor/@akanjs/native/native/desktop/src/keychain.rs +151 -0
  336. package/vendor/@akanjs/native/native/desktop/src/lib.rs +2185 -0
  337. package/vendor/@akanjs/native/native/desktop/src/linux/appearance.rs +177 -0
  338. package/vendor/@akanjs/native/native/desktop/src/linux/camera.rs +11 -0
  339. package/vendor/@akanjs/native/native/desktop/src/linux/clipboard.rs +48 -0
  340. package/vendor/@akanjs/native/native/desktop/src/linux/device.rs +9 -0
  341. package/vendor/@akanjs/native/native/desktop/src/linux/dialogs.rs +348 -0
  342. package/vendor/@akanjs/native/native/desktop/src/linux/dock.rs +146 -0
  343. package/vendor/@akanjs/native/native/desktop/src/linux/hotkey.rs +228 -0
  344. package/vendor/@akanjs/native/native/desktop/src/linux/keychain.rs +243 -0
  345. package/vendor/@akanjs/native/native/desktop/src/linux/menu.rs +445 -0
  346. package/vendor/@akanjs/native/native/desktop/src/linux/mod.rs +116 -0
  347. package/vendor/@akanjs/native/native/desktop/src/linux/notify.rs +211 -0
  348. package/vendor/@akanjs/native/native/desktop/src/linux/open.rs +79 -0
  349. package/vendor/@akanjs/native/native/desktop/src/linux/power.rs +155 -0
  350. package/vendor/@akanjs/native/native/desktop/src/linux/screen.rs +158 -0
  351. package/vendor/@akanjs/native/native/desktop/src/linux/tray.rs +604 -0
  352. package/vendor/@akanjs/native/native/desktop/src/menu.rs +517 -0
  353. package/vendor/@akanjs/native/native/desktop/src/navigation.rs +381 -0
  354. package/vendor/@akanjs/native/native/desktop/src/notify.rs +411 -0
  355. package/vendor/@akanjs/native/native/desktop/src/notify_schedule.rs +382 -0
  356. package/vendor/@akanjs/native/native/desktop/src/page_menu.rs +287 -0
  357. package/vendor/@akanjs/native/native/desktop/src/panels.rs +333 -0
  358. package/vendor/@akanjs/native/native/desktop/src/placement.rs +92 -0
  359. package/vendor/@akanjs/native/native/desktop/src/routes.rs +153 -0
  360. package/vendor/@akanjs/native/native/desktop/src/screen.rs +190 -0
  361. package/vendor/@akanjs/native/native/desktop/src/tray.rs +279 -0
  362. package/vendor/@akanjs/native/native/desktop/src/vectors.rs +126 -0
  363. package/vendor/@akanjs/native/native/desktop/src/win/appearance.rs +51 -0
  364. package/vendor/@akanjs/native/native/desktop/src/win/autostart.rs +77 -0
  365. package/vendor/@akanjs/native/native/desktop/src/win/camera.rs +34 -0
  366. package/vendor/@akanjs/native/native/desktop/src/win/clipboard.rs +106 -0
  367. package/vendor/@akanjs/native/native/desktop/src/win/device.rs +80 -0
  368. package/vendor/@akanjs/native/native/desktop/src/win/dialogs.rs +917 -0
  369. package/vendor/@akanjs/native/native/desktop/src/win/dock.rs +228 -0
  370. package/vendor/@akanjs/native/native/desktop/src/win/hotkey.rs +110 -0
  371. package/vendor/@akanjs/native/native/desktop/src/win/keychain.rs +103 -0
  372. package/vendor/@akanjs/native/native/desktop/src/win/menu.rs +500 -0
  373. package/vendor/@akanjs/native/native/desktop/src/win/mod.rs +100 -0
  374. package/vendor/@akanjs/native/native/desktop/src/win/msgwin.rs +86 -0
  375. package/vendor/@akanjs/native/native/desktop/src/win/notify.rs +334 -0
  376. package/vendor/@akanjs/native/native/desktop/src/win/open.rs +127 -0
  377. package/vendor/@akanjs/native/native/desktop/src/win/power.rs +64 -0
  378. package/vendor/@akanjs/native/native/desktop/src/win/registry.rs +87 -0
  379. package/vendor/@akanjs/native/native/desktop/src/win/screen.rs +127 -0
  380. package/vendor/@akanjs/native/native/desktop/src/win/tray.rs +280 -0
  381. package/vendor/@akanjs/native/native/ios/Sources/AkanNativeAcl.swift +241 -0
  382. package/vendor/@akanjs/native/native/ios/Sources/AkanNativeApp.swift +285 -0
  383. package/vendor/@akanjs/native/native/ios/Sources/AkanNativeBridge.swift +407 -0
  384. package/vendor/@akanjs/native/native/ios/Sources/AkanNativeContract.swift +106 -0
  385. package/vendor/@akanjs/native/native/ios/Sources/AkanNativeKernel.swift +317 -0
  386. package/vendor/@akanjs/native/native/ios/Sources/AkanNativePlugin.swift +250 -0
  387. package/vendor/@akanjs/native/native/ios/Sources/AkanNativeSchemeHandler.swift +209 -0
  388. package/vendor/@akanjs/native/native/ios/Sources/AkanNativeShell.swift +161 -0
  389. package/vendor/@akanjs/native/native/ios/Sources/AkanNativeSpec.swift +143 -0
  390. package/vendor/@akanjs/native/native/ios/Sources/AkanNativeUpdates.swift +270 -0
  391. package/vendor/@akanjs/native/native/ios/Sources/AkanNativeVectors.swift +155 -0
  392. package/vendor/@akanjs/native/native/ios/Sources/AkanNativeViewController.swift +371 -0
  393. package/vendor/@akanjs/native/packages/cli/src/api.ts +600 -0
  394. package/vendor/@akanjs/native/packages/cli/src/commands/build.ts +101 -0
  395. package/vendor/@akanjs/native/packages/cli/src/commands/compat.ts +53 -0
  396. package/vendor/@akanjs/native/packages/cli/src/commands/dev.ts +249 -0
  397. package/vendor/@akanjs/native/packages/cli/src/commands/doctor.ts +536 -0
  398. package/vendor/@akanjs/native/packages/cli/src/commands/plugin.ts +164 -0
  399. package/vendor/@akanjs/native/packages/cli/src/commands/signing.ts +32 -0
  400. package/vendor/@akanjs/native/packages/cli/src/commands/test.ts +130 -0
  401. package/vendor/@akanjs/native/packages/cli/src/commands/toolchain.ts +143 -0
  402. package/vendor/@akanjs/native/packages/cli/src/commands/update.ts +168 -0
  403. package/vendor/@akanjs/native/packages/cli/src/config.ts +257 -0
  404. package/vendor/@akanjs/native/packages/cli/src/index.ts +77 -0
  405. package/vendor/@akanjs/native/packages/cli/src/lib/acl.ts +420 -0
  406. package/vendor/@akanjs/native/packages/cli/src/lib/apilevel.ts +245 -0
  407. package/vendor/@akanjs/native/packages/cli/src/lib/apk.ts +203 -0
  408. package/vendor/@akanjs/native/packages/cli/src/lib/args.ts +44 -0
  409. package/vendor/@akanjs/native/packages/cli/src/lib/boot.ts +73 -0
  410. package/vendor/@akanjs/native/packages/cli/src/lib/chrome.ts +89 -0
  411. package/vendor/@akanjs/native/packages/cli/src/lib/codegen.ts +1128 -0
  412. package/vendor/@akanjs/native/packages/cli/src/lib/compat.ts +185 -0
  413. package/vendor/@akanjs/native/packages/cli/src/lib/configkeys.ts +91 -0
  414. package/vendor/@akanjs/native/packages/cli/src/lib/csp.ts +198 -0
  415. package/vendor/@akanjs/native/packages/cli/src/lib/env.ts +257 -0
  416. package/vendor/@akanjs/native/packages/cli/src/lib/exec.ts +104 -0
  417. package/vendor/@akanjs/native/packages/cli/src/lib/googleservices.ts +53 -0
  418. package/vendor/@akanjs/native/packages/cli/src/lib/hmr.ts +534 -0
  419. package/vendor/@akanjs/native/packages/cli/src/lib/html.ts +63 -0
  420. package/vendor/@akanjs/native/packages/cli/src/lib/icons.ts +316 -0
  421. package/vendor/@akanjs/native/packages/cli/src/lib/image.ts +175 -0
  422. package/vendor/@akanjs/native/packages/cli/src/lib/iossigning.ts +295 -0
  423. package/vendor/@akanjs/native/packages/cli/src/lib/launch.ts +98 -0
  424. package/vendor/@akanjs/native/packages/cli/src/lib/log.ts +105 -0
  425. package/vendor/@akanjs/native/packages/cli/src/lib/manifestmerge.ts +107 -0
  426. package/vendor/@akanjs/native/packages/cli/src/lib/maven.ts +244 -0
  427. package/vendor/@akanjs/native/packages/cli/src/lib/names.ts +202 -0
  428. package/vendor/@akanjs/native/packages/cli/src/lib/native-plugins.ts +326 -0
  429. package/vendor/@akanjs/native/packages/cli/src/lib/nativeconfig.ts +68 -0
  430. package/vendor/@akanjs/native/packages/cli/src/lib/permissions.ts +80 -0
  431. package/vendor/@akanjs/native/packages/cli/src/lib/plist.ts +139 -0
  432. package/vendor/@akanjs/native/packages/cli/src/lib/png.ts +240 -0
  433. package/vendor/@akanjs/native/packages/cli/src/lib/prepare.ts +290 -0
  434. package/vendor/@akanjs/native/packages/cli/src/lib/privacy.ts +64 -0
  435. package/vendor/@akanjs/native/packages/cli/src/lib/project.ts +710 -0
  436. package/vendor/@akanjs/native/packages/cli/src/lib/root.ts +18 -0
  437. package/vendor/@akanjs/native/packages/cli/src/lib/routes.ts +3 -0
  438. package/vendor/@akanjs/native/packages/cli/src/lib/serve.ts +83 -0
  439. package/vendor/@akanjs/native/packages/cli/src/lib/signing.ts +117 -0
  440. package/vendor/@akanjs/native/packages/cli/src/lib/spec.ts +521 -0
  441. package/vendor/@akanjs/native/packages/cli/src/lib/toolchains.ts +579 -0
  442. package/vendor/@akanjs/native/packages/cli/src/lib/updates.ts +160 -0
  443. package/vendor/@akanjs/native/packages/cli/src/lib/vectors.ts +121 -0
  444. package/vendor/@akanjs/native/packages/cli/src/lib/xml.ts +72 -0
  445. package/vendor/@akanjs/native/packages/cli/src/platforms/android.ts +1320 -0
  446. package/vendor/@akanjs/native/packages/cli/src/platforms/desktop-update.ts +78 -0
  447. package/vendor/@akanjs/native/packages/cli/src/platforms/desktop.ts +279 -0
  448. package/vendor/@akanjs/native/packages/cli/src/platforms/index.ts +31 -0
  449. package/vendor/@akanjs/native/packages/cli/src/platforms/ios.ts +801 -0
  450. package/vendor/@akanjs/native/packages/cli/src/platforms/linux.ts +52 -0
  451. package/vendor/@akanjs/native/packages/cli/src/platforms/macos.ts +97 -0
  452. package/vendor/@akanjs/native/packages/cli/src/platforms/targets.ts +12 -0
  453. package/vendor/@akanjs/native/packages/cli/src/platforms/web-run.ts +69 -0
  454. package/vendor/@akanjs/native/packages/cli/src/platforms/web.ts +28 -0
  455. package/vendor/@akanjs/native/packages/cli/src/platforms/windows.ts +82 -0
  456. package/vendor/@akanjs/native/packages/core/contract.json +96 -0
  457. package/vendor/@akanjs/native/packages/core/src/acl.ts +272 -0
  458. package/vendor/@akanjs/native/packages/core/src/boot.ts +97 -0
  459. package/vendor/@akanjs/native/packages/core/src/contract.ts +100 -0
  460. package/vendor/@akanjs/native/packages/core/src/errors.ts +95 -0
  461. package/vendor/@akanjs/native/packages/core/src/files.ts +105 -0
  462. package/vendor/@akanjs/native/packages/core/src/index.ts +35 -0
  463. package/vendor/@akanjs/native/packages/core/src/kernel.ts +281 -0
  464. package/vendor/@akanjs/native/packages/core/src/live.ts +62 -0
  465. package/vendor/@akanjs/native/packages/core/src/mime.ts +8 -0
  466. package/vendor/@akanjs/native/packages/core/src/plugin.ts +358 -0
  467. package/vendor/@akanjs/native/packages/core/src/protocol.ts +194 -0
  468. package/vendor/@akanjs/native/packages/core/src/runtime.ts +520 -0
  469. package/vendor/@akanjs/native/packages/core/src/state.ts +46 -0
  470. package/vendor/@akanjs/native/packages/core/src/testing.ts +176 -0
  471. package/vendor/@akanjs/native/packages/core/src/version.ts +2 -0
  472. package/vendor/@akanjs/native/packages/core/src/veto.ts +55 -0
  473. package/vendor/@akanjs/native/packages/core/vectors/acl.json +57 -0
  474. package/vendor/@akanjs/native/packages/core/vectors/bridge.json +76 -0
  475. package/vendor/@akanjs/native/packages/core/vectors/ed25519.json +29 -0
  476. package/vendor/@akanjs/native/packages/core/vectors/ids.json +73 -0
  477. package/vendor/@akanjs/native/packages/core/vectors/navigation.json +75 -0
  478. package/vendor/@akanjs/native/packages/core/vectors/ranges.json +39 -0
  479. package/vendor/@akanjs/native/packages/core/vectors/retained.json +17 -0
  480. package/vendor/@akanjs/native/packages/core/vectors/routes.json +66 -0
  481. package/vendor/@akanjs/native/packages/core/vectors/scope.json +143 -0
  482. package/vendor/@akanjs/native/packages/desktop/src/deeplinks.ts +143 -0
  483. package/vendor/@akanjs/native/packages/desktop/src/delta.ts +174 -0
  484. package/vendor/@akanjs/native/packages/desktop/src/dispatcher.ts +679 -0
  485. package/vendor/@akanjs/native/packages/desktop/src/ffi.ts +76 -0
  486. package/vendor/@akanjs/native/packages/desktop/src/host.ts +355 -0
  487. package/vendor/@akanjs/native/packages/desktop/src/lifecycle.ts +142 -0
  488. package/vendor/@akanjs/native/packages/desktop/src/main.ts +133 -0
  489. package/vendor/@akanjs/native/packages/desktop/src/page-veto.ts +103 -0
  490. package/vendor/@akanjs/native/packages/desktop/src/paths.ts +59 -0
  491. package/vendor/@akanjs/native/packages/desktop/src/plugin.ts +232 -0
  492. package/vendor/@akanjs/native/packages/react/src/index.ts +23 -0
  493. package/vendor/@akanjs/native/plugins/accessibility/android/AccessibilityPlugin.kt +96 -0
  494. package/vendor/@akanjs/native/plugins/accessibility/ios/AccessibilityPlugin.swift +92 -0
  495. package/vendor/@akanjs/native/plugins/accessibility/native-plugin.json +21 -0
  496. package/vendor/@akanjs/native/plugins/accessibility/src/announce.ts +71 -0
  497. package/vendor/@akanjs/native/plugins/accessibility/src/index.ts +77 -0
  498. package/vendor/@akanjs/native/plugins/accessibility/src/web.ts +52 -0
  499. package/vendor/@akanjs/native/plugins/app/android/AppPlugin.kt +72 -0
  500. package/vendor/@akanjs/native/plugins/app/ios/AppPlugin.swift +52 -0
  501. package/vendor/@akanjs/native/plugins/app/native-plugin.json +21 -0
  502. package/vendor/@akanjs/native/plugins/app/src/desktop.ts +64 -0
  503. package/vendor/@akanjs/native/plugins/app/src/index.ts +77 -0
  504. package/vendor/@akanjs/native/plugins/app/src/web.ts +12 -0
  505. package/vendor/@akanjs/native/plugins/app-state/android/AppStatePlugin.kt +54 -0
  506. package/vendor/@akanjs/native/plugins/app-state/ios/AppStatePlugin.swift +58 -0
  507. package/vendor/@akanjs/native/plugins/app-state/native-plugin.json +17 -0
  508. package/vendor/@akanjs/native/plugins/app-state/src/index.ts +42 -0
  509. package/vendor/@akanjs/native/plugins/app-state/src/web.ts +33 -0
  510. package/vendor/@akanjs/native/plugins/appearance/android/AppearancePlugin.kt +133 -0
  511. package/vendor/@akanjs/native/plugins/appearance/ios/AppearancePlugin.swift +109 -0
  512. package/vendor/@akanjs/native/plugins/appearance/native-plugin.json +18 -0
  513. package/vendor/@akanjs/native/plugins/appearance/src/desktop.ts +133 -0
  514. package/vendor/@akanjs/native/plugins/appearance/src/index.ts +62 -0
  515. package/vendor/@akanjs/native/plugins/appearance/src/setting.ts +18 -0
  516. package/vendor/@akanjs/native/plugins/appearance/src/web.ts +25 -0
  517. package/vendor/@akanjs/native/plugins/auth-session/android/AuthSessionPlugin.kt +171 -0
  518. package/vendor/@akanjs/native/plugins/auth-session/ios/AuthSessionPlugin.swift +112 -0
  519. package/vendor/@akanjs/native/plugins/auth-session/native-plugin.json +19 -0
  520. package/vendor/@akanjs/native/plugins/auth-session/src/args.ts +62 -0
  521. package/vendor/@akanjs/native/plugins/auth-session/src/desktop.ts +133 -0
  522. package/vendor/@akanjs/native/plugins/auth-session/src/index.ts +39 -0
  523. package/vendor/@akanjs/native/plugins/autostart/native-plugin.json +10 -0
  524. package/vendor/@akanjs/native/plugins/autostart/src/desktop.ts +189 -0
  525. package/vendor/@akanjs/native/plugins/autostart/src/index.ts +51 -0
  526. package/vendor/@akanjs/native/plugins/badge/ios/BadgePlugin.swift +92 -0
  527. package/vendor/@akanjs/native/plugins/badge/native-plugin.json +15 -0
  528. package/vendor/@akanjs/native/plugins/badge/src/count.ts +12 -0
  529. package/vendor/@akanjs/native/plugins/badge/src/desktop.ts +24 -0
  530. package/vendor/@akanjs/native/plugins/badge/src/index.ts +40 -0
  531. package/vendor/@akanjs/native/plugins/badge/src/web.ts +37 -0
  532. package/vendor/@akanjs/native/plugins/biometric/android/BiometricPlugin.kt +179 -0
  533. package/vendor/@akanjs/native/plugins/biometric/ios/BiometricPlugin.swift +129 -0
  534. package/vendor/@akanjs/native/plugins/biometric/native-plugin.json +22 -0
  535. package/vendor/@akanjs/native/plugins/biometric/src/index.ts +100 -0
  536. package/vendor/@akanjs/native/plugins/browser/android/BrowserPlugin.kt +178 -0
  537. package/vendor/@akanjs/native/plugins/browser/ios/BrowserPlugin.swift +63 -0
  538. package/vendor/@akanjs/native/plugins/browser/native-plugin.json +22 -0
  539. package/vendor/@akanjs/native/plugins/browser/src/args.ts +34 -0
  540. package/vendor/@akanjs/native/plugins/browser/src/desktop.ts +40 -0
  541. package/vendor/@akanjs/native/plugins/browser/src/index.ts +47 -0
  542. package/vendor/@akanjs/native/plugins/browser/src/web.ts +60 -0
  543. package/vendor/@akanjs/native/plugins/camera/android/CameraPlugin.kt +365 -0
  544. package/vendor/@akanjs/native/plugins/camera/ios/CameraPlugin.swift +296 -0
  545. package/vendor/@akanjs/native/plugins/camera/native-plugin.json +32 -0
  546. package/vendor/@akanjs/native/plugins/camera/src/desktop.ts +27 -0
  547. package/vendor/@akanjs/native/plugins/camera/src/index.ts +85 -0
  548. package/vendor/@akanjs/native/plugins/camera/src/web.ts +267 -0
  549. package/vendor/@akanjs/native/plugins/clipboard/android/ClipboardPlugin.kt +51 -0
  550. package/vendor/@akanjs/native/plugins/clipboard/ios/ClipboardPlugin.swift +35 -0
  551. package/vendor/@akanjs/native/plugins/clipboard/native-plugin.json +17 -0
  552. package/vendor/@akanjs/native/plugins/clipboard/src/desktop.ts +66 -0
  553. package/vendor/@akanjs/native/plugins/clipboard/src/index.ts +72 -0
  554. package/vendor/@akanjs/native/plugins/clipboard/src/web.ts +69 -0
  555. package/vendor/@akanjs/native/plugins/device/android/DevicePlugin.kt +70 -0
  556. package/vendor/@akanjs/native/plugins/device/ios/DevicePlugin.swift +80 -0
  557. package/vendor/@akanjs/native/plugins/device/native-plugin.json +18 -0
  558. package/vendor/@akanjs/native/plugins/device/src/desktop.ts +276 -0
  559. package/vendor/@akanjs/native/plugins/device/src/index.ts +72 -0
  560. package/vendor/@akanjs/native/plugins/device/src/web.ts +162 -0
  561. package/vendor/@akanjs/native/plugins/dialog/android/DialogPlugin.kt +260 -0
  562. package/vendor/@akanjs/native/plugins/dialog/ios/DialogPlugin.swift +198 -0
  563. package/vendor/@akanjs/native/plugins/dialog/native-plugin.json +18 -0
  564. package/vendor/@akanjs/native/plugins/dialog/src/desktop.ts +80 -0
  565. package/vendor/@akanjs/native/plugins/dialog/src/index.ts +87 -0
  566. package/vendor/@akanjs/native/plugins/dialog/src/options.ts +111 -0
  567. package/vendor/@akanjs/native/plugins/dialog/src/web.ts +296 -0
  568. package/vendor/@akanjs/native/plugins/dock/native-plugin.json +10 -0
  569. package/vendor/@akanjs/native/plugins/dock/src/desktop.ts +34 -0
  570. package/vendor/@akanjs/native/plugins/dock/src/index.ts +46 -0
  571. package/vendor/@akanjs/native/plugins/file-picker/android/FilePickerPlugin.kt +316 -0
  572. package/vendor/@akanjs/native/plugins/file-picker/ios/FilePickerPlugin.swift +366 -0
  573. package/vendor/@akanjs/native/plugins/file-picker/native-plugin.json +18 -0
  574. package/vendor/@akanjs/native/plugins/file-picker/src/common.ts +125 -0
  575. package/vendor/@akanjs/native/plugins/file-picker/src/desktop.ts +164 -0
  576. package/vendor/@akanjs/native/plugins/file-picker/src/index.ts +187 -0
  577. package/vendor/@akanjs/native/plugins/file-picker/src/web.ts +158 -0
  578. package/vendor/@akanjs/native/plugins/filesystem/android/FilesystemPlugin.kt +561 -0
  579. package/vendor/@akanjs/native/plugins/filesystem/ios/FilesystemPlugin.swift +596 -0
  580. package/vendor/@akanjs/native/plugins/filesystem/native-plugin.json +45 -0
  581. package/vendor/@akanjs/native/plugins/filesystem/src/common.ts +150 -0
  582. package/vendor/@akanjs/native/plugins/filesystem/src/desktop.ts +438 -0
  583. package/vendor/@akanjs/native/plugins/filesystem/src/index.ts +179 -0
  584. package/vendor/@akanjs/native/plugins/filesystem/src/web.ts +334 -0
  585. package/vendor/@akanjs/native/plugins/geolocation/android/GeolocationPlugin.kt +360 -0
  586. package/vendor/@akanjs/native/plugins/geolocation/ios/GeolocationPlugin.swift +284 -0
  587. package/vendor/@akanjs/native/plugins/geolocation/native-plugin.json +23 -0
  588. package/vendor/@akanjs/native/plugins/geolocation/src/index.ts +155 -0
  589. package/vendor/@akanjs/native/plugins/geolocation/src/web.ts +132 -0
  590. package/vendor/@akanjs/native/plugins/global-shortcut/native-plugin.json +10 -0
  591. package/vendor/@akanjs/native/plugins/global-shortcut/src/desktop.ts +36 -0
  592. package/vendor/@akanjs/native/plugins/global-shortcut/src/index.ts +55 -0
  593. package/vendor/@akanjs/native/plugins/haptics/android/HapticsPlugin.kt +127 -0
  594. package/vendor/@akanjs/native/plugins/haptics/ios/HapticsPlugin.swift +127 -0
  595. package/vendor/@akanjs/native/plugins/haptics/native-plugin.json +19 -0
  596. package/vendor/@akanjs/native/plugins/haptics/src/index.ts +34 -0
  597. package/vendor/@akanjs/native/plugins/haptics/src/web.ts +53 -0
  598. package/vendor/@akanjs/native/plugins/http/android/HttpPlugin.kt +234 -0
  599. package/vendor/@akanjs/native/plugins/http/android/HttpUrl.kt +182 -0
  600. package/vendor/@akanjs/native/plugins/http/ios/HttpPlugin.swift +228 -0
  601. package/vendor/@akanjs/native/plugins/http/ios/HttpUrl.swift +166 -0
  602. package/vendor/@akanjs/native/plugins/http/native-plugin.json +27 -0
  603. package/vendor/@akanjs/native/plugins/http/src/common.ts +294 -0
  604. package/vendor/@akanjs/native/plugins/http/src/desktop.ts +69 -0
  605. package/vendor/@akanjs/native/plugins/http/src/index.ts +181 -0
  606. package/vendor/@akanjs/native/plugins/http/src/web.ts +40 -0
  607. package/vendor/@akanjs/native/plugins/iap/android/IapPlugin.kt +358 -0
  608. package/vendor/@akanjs/native/plugins/iap/ios/IapPlugin.swift +306 -0
  609. package/vendor/@akanjs/native/plugins/iap/native-plugin.json +28 -0
  610. package/vendor/@akanjs/native/plugins/iap/src/index.ts +206 -0
  611. package/vendor/@akanjs/native/plugins/keep-awake/android/KeepAwakePlugin.kt +48 -0
  612. package/vendor/@akanjs/native/plugins/keep-awake/ios/KeepAwakePlugin.swift +36 -0
  613. package/vendor/@akanjs/native/plugins/keep-awake/native-plugin.json +17 -0
  614. package/vendor/@akanjs/native/plugins/keep-awake/src/desktop.ts +127 -0
  615. package/vendor/@akanjs/native/plugins/keep-awake/src/index.ts +79 -0
  616. package/vendor/@akanjs/native/plugins/keep-awake/src/web.ts +78 -0
  617. package/vendor/@akanjs/native/plugins/keyboard/android/KeyboardPlugin.kt +77 -0
  618. package/vendor/@akanjs/native/plugins/keyboard/ios/KeyboardPlugin.swift +93 -0
  619. package/vendor/@akanjs/native/plugins/keyboard/native-plugin.json +18 -0
  620. package/vendor/@akanjs/native/plugins/keyboard/src/index.ts +78 -0
  621. package/vendor/@akanjs/native/plugins/keyboard/src/web.ts +57 -0
  622. package/vendor/@akanjs/native/plugins/local-notifications/android/LocalNotificationReceiver.kt +38 -0
  623. package/vendor/@akanjs/native/plugins/local-notifications/android/LocalNotifications.kt +284 -0
  624. package/vendor/@akanjs/native/plugins/local-notifications/android/LocalNotificationsPlugin.kt +248 -0
  625. package/vendor/@akanjs/native/plugins/local-notifications/ios/LocalNotificationsPlugin.swift +279 -0
  626. package/vendor/@akanjs/native/plugins/local-notifications/native-plugin.json +35 -0
  627. package/vendor/@akanjs/native/plugins/local-notifications/src/desktop.ts +196 -0
  628. package/vendor/@akanjs/native/plugins/local-notifications/src/index.ts +174 -0
  629. package/vendor/@akanjs/native/plugins/local-notifications/src/schedule.ts +164 -0
  630. package/vendor/@akanjs/native/plugins/local-notifications/src/timers.ts +72 -0
  631. package/vendor/@akanjs/native/plugins/local-notifications/src/web.ts +158 -0
  632. package/vendor/@akanjs/native/plugins/menu/native-plugin.json +10 -0
  633. package/vendor/@akanjs/native/plugins/menu/src/desktop.ts +52 -0
  634. package/vendor/@akanjs/native/plugins/menu/src/index.ts +107 -0
  635. package/vendor/@akanjs/native/plugins/network/android/NetworkPlugin.kt +124 -0
  636. package/vendor/@akanjs/native/plugins/network/ios/NetworkPlugin.swift +82 -0
  637. package/vendor/@akanjs/native/plugins/network/native-plugin.json +19 -0
  638. package/vendor/@akanjs/native/plugins/network/src/index.ts +59 -0
  639. package/vendor/@akanjs/native/plugins/network/src/web.ts +43 -0
  640. package/vendor/@akanjs/native/plugins/opener/android/OpenerPlugin.kt +81 -0
  641. package/vendor/@akanjs/native/plugins/opener/ios/OpenerPlugin.swift +83 -0
  642. package/vendor/@akanjs/native/plugins/opener/native-plugin.json +25 -0
  643. package/vendor/@akanjs/native/plugins/opener/src/desktop.ts +88 -0
  644. package/vendor/@akanjs/native/plugins/opener/src/index.ts +35 -0
  645. package/vendor/@akanjs/native/plugins/opener/src/url.ts +39 -0
  646. package/vendor/@akanjs/native/plugins/opener/src/web.ts +33 -0
  647. package/vendor/@akanjs/native/plugins/preferences/android/PreferencesPlugin.kt +44 -0
  648. package/vendor/@akanjs/native/plugins/preferences/ios/PreferencesPlugin.swift +47 -0
  649. package/vendor/@akanjs/native/plugins/preferences/native-plugin.json +18 -0
  650. package/vendor/@akanjs/native/plugins/preferences/src/desktop.ts +59 -0
  651. package/vendor/@akanjs/native/plugins/preferences/src/index.ts +75 -0
  652. package/vendor/@akanjs/native/plugins/preferences/src/web.ts +55 -0
  653. package/vendor/@akanjs/native/plugins/push/android/AkanNativeMessagingService.kt +17 -0
  654. package/vendor/@akanjs/native/plugins/push/android/PushPlugin.kt +257 -0
  655. package/vendor/@akanjs/native/plugins/push/ios/PushPlugin.swift +169 -0
  656. package/vendor/@akanjs/native/plugins/push/native-plugin.json +23 -0
  657. package/vendor/@akanjs/native/plugins/push/src/index.ts +73 -0
  658. package/vendor/@akanjs/native/plugins/screen/native-plugin.json +10 -0
  659. package/vendor/@akanjs/native/plugins/screen/src/desktop.ts +50 -0
  660. package/vendor/@akanjs/native/plugins/screen/src/index.ts +107 -0
  661. package/vendor/@akanjs/native/plugins/screen/src/web.ts +92 -0
  662. package/vendor/@akanjs/native/plugins/screen-orientation/android/ScreenOrientationPlugin.kt +113 -0
  663. package/vendor/@akanjs/native/plugins/screen-orientation/ios/ScreenOrientationPlugin.swift +150 -0
  664. package/vendor/@akanjs/native/plugins/screen-orientation/native-plugin.json +17 -0
  665. package/vendor/@akanjs/native/plugins/screen-orientation/src/index.ts +69 -0
  666. package/vendor/@akanjs/native/plugins/screen-orientation/src/types.ts +26 -0
  667. package/vendor/@akanjs/native/plugins/screen-orientation/src/web.ts +67 -0
  668. package/vendor/@akanjs/native/plugins/secure-storage/android/SecureStoragePlugin.kt +184 -0
  669. package/vendor/@akanjs/native/plugins/secure-storage/ios/SecureStoragePlugin.swift +145 -0
  670. package/vendor/@akanjs/native/plugins/secure-storage/native-plugin.json +18 -0
  671. package/vendor/@akanjs/native/plugins/secure-storage/src/desktop.ts +332 -0
  672. package/vendor/@akanjs/native/plugins/secure-storage/src/index.ts +33 -0
  673. package/vendor/@akanjs/native/plugins/share/android/SharePlugin.kt +218 -0
  674. package/vendor/@akanjs/native/plugins/share/ios/SharePlugin.swift +142 -0
  675. package/vendor/@akanjs/native/plugins/share/native-plugin.json +18 -0
  676. package/vendor/@akanjs/native/plugins/share/src/index.ts +87 -0
  677. package/vendor/@akanjs/native/plugins/share/src/options.ts +43 -0
  678. package/vendor/@akanjs/native/plugins/share/src/web.ts +116 -0
  679. package/vendor/@akanjs/native/plugins/single-instance/native-plugin.json +10 -0
  680. package/vendor/@akanjs/native/plugins/single-instance/src/desktop.ts +63 -0
  681. package/vendor/@akanjs/native/plugins/single-instance/src/index.ts +32 -0
  682. package/vendor/@akanjs/native/plugins/single-instance/src/socket.ts +248 -0
  683. package/vendor/@akanjs/native/plugins/splash-screen/android/SplashScreenPlugin.kt +19 -0
  684. package/vendor/@akanjs/native/plugins/splash-screen/ios/SplashScreenPlugin.swift +20 -0
  685. package/vendor/@akanjs/native/plugins/splash-screen/native-plugin.json +17 -0
  686. package/vendor/@akanjs/native/plugins/splash-screen/src/index.ts +24 -0
  687. package/vendor/@akanjs/native/plugins/splash-screen/src/web.ts +17 -0
  688. package/vendor/@akanjs/native/plugins/sqlite/android/SqlStatements.kt +121 -0
  689. package/vendor/@akanjs/native/plugins/sqlite/android/SqlitePlugin.kt +327 -0
  690. package/vendor/@akanjs/native/plugins/sqlite/ios/SqlitePlugin.swift +361 -0
  691. package/vendor/@akanjs/native/plugins/sqlite/native-plugin.json +18 -0
  692. package/vendor/@akanjs/native/plugins/sqlite/src/common.ts +221 -0
  693. package/vendor/@akanjs/native/plugins/sqlite/src/desktop.ts +140 -0
  694. package/vendor/@akanjs/native/plugins/sqlite/src/index.ts +114 -0
  695. package/vendor/@akanjs/native/plugins/toast/android/ToastPlugin.kt +27 -0
  696. package/vendor/@akanjs/native/plugins/toast/native-plugin.json +14 -0
  697. package/vendor/@akanjs/native/plugins/toast/src/index.ts +41 -0
  698. package/vendor/@akanjs/native/plugins/toast/src/queue.ts +77 -0
  699. package/vendor/@akanjs/native/plugins/toast/src/web.ts +130 -0
  700. package/vendor/@akanjs/native/plugins/tray/native-plugin.json +10 -0
  701. package/vendor/@akanjs/native/plugins/tray/src/desktop.ts +73 -0
  702. package/vendor/@akanjs/native/plugins/tray/src/index.ts +111 -0
  703. package/vendor/@akanjs/native/plugins/updates/android/UpdatesPlugin.kt +290 -0
  704. package/vendor/@akanjs/native/plugins/updates/ios/UpdatesPlugin.swift +292 -0
  705. package/vendor/@akanjs/native/plugins/updates/native-plugin.json +19 -0
  706. package/vendor/@akanjs/native/plugins/updates/src/desktop.ts +558 -0
  707. package/vendor/@akanjs/native/plugins/updates/src/index.ts +95 -0
  708. package/vendor/@akanjs/native/plugins/window/native-plugin.json +32 -0
  709. package/vendor/@akanjs/native/plugins/window/src/desktop.ts +170 -0
  710. package/vendor/@akanjs/native/plugins/window/src/index.ts +342 -0
  711. package/vendor/@akanjs/native/plugins/window/src/web.ts +43 -0
  712. package/vendor/@akanjs/native/plugins/window-state/native-plugin.json +10 -0
  713. package/vendor/@akanjs/native/plugins/window-state/src/desktop.ts +73 -0
  714. package/vendor/@akanjs/native/plugins/window-state/src/index.ts +35 -0
  715. package/vendor/@akanjs/native/plugins/window-state/src/state.ts +146 -0
  716. package/webkit/bootCsr.tsx +26 -14
  717. package/webkit/index.ts +0 -2
  718. package/webkit/nativeNavigation.ts +116 -0
  719. package/webkit/nativePurchase.ts +93 -0
  720. package/webkit/useCamera.tsx +76 -71
  721. package/webkit/useCsrValues.ts +10 -124
  722. package/webkit/useGeoLocation.tsx +11 -13
  723. package/webkit/usePurchase.tsx +68 -123
  724. package/capacitor.base.config.ts +0 -140
  725. package/client/capacitor.ts +0 -252
  726. package/types/capacitor.base.config.d.ts +0 -3
  727. package/types/client/capacitor.d.ts +0 -290
  728. package/types/webkit/useCodepush.d.ts +0 -16
  729. package/types/webkit/useContact.d.ts +0 -11
  730. package/webkit/useCodepush.tsx +0 -76
  731. package/webkit/useContact.tsx +0 -45
@@ -0,0 +1,77 @@
1
+ package com.akanjs.plugins.keyboard
2
+
3
+ import android.app.Activity
4
+ import android.os.Build
5
+ import android.view.WindowInsets
6
+ import android.view.inputmethod.InputMethodManager
7
+ import com.akanjs.runtime.AkanNativeInsets
8
+ import com.akanjs.runtime.AkanNativePluginContext
9
+ import com.akanjs.runtime.AkanNativeReply
10
+ import com.akanjs.runtime.AkanNativeVoidReply
11
+
12
+ /**
13
+ * Soft keyboard from the IME window insets the shell tracks. height = ime.bottom − systemBars.bottom
14
+ * in dp (react-native ReactRootView uses the same definition). The shell pads the WebView by the
15
+ * IME, so the page itself is not covered.
16
+ * The result and event types come from the generated KeyboardPluginSpec (PL-10).
17
+ */
18
+ class KeyboardPlugin(private val context: AkanNativePluginContext) : KeyboardPluginSpec {
19
+ private var listening = false
20
+ private var last: KeyboardState? = null
21
+ private val events = KeyboardEvents(context)
22
+
23
+ /** Events the page listens to (change, willShow, didShow, willHide, didHide). */
24
+ private val listened = HashSet<String>()
25
+
26
+ init {
27
+ context.onInsetsChanged { insets ->
28
+ val next = state(insets)
29
+ if (next == last) return@onInsetsChanged
30
+ last = next
31
+ if (listening) events.change(next)
32
+ }
33
+ context.onKeyboardTransition { t ->
34
+ if (t.phase !in listened) return@onKeyboardTransition
35
+ val data = KeyboardTransition(height = Math.round(t.height).toDouble(), duration = t.durationMs.toDouble())
36
+ when (t.phase) {
37
+ "willShow" -> events.willShow(data)
38
+ "didShow" -> events.didShow(data)
39
+ "willHide" -> events.willHide(data)
40
+ "didHide" -> events.didHide(data)
41
+ }
42
+ }
43
+ }
44
+
45
+ override fun setResizeMode(args: KeyboardSetResizeModeArgs, reply: AkanNativeVoidReply) {
46
+ context.setImeResize(args.mode == KeyboardResizeMode.RESIZE)
47
+ reply.resolve()
48
+ }
49
+
50
+ private fun state(insets: AkanNativeInsets) = KeyboardState(visible = insets.imeVisible, height = Math.round(insets.imeHeight).toDouble())
51
+
52
+ override fun getState(reply: AkanNativeReply<KeyboardState>) = reply.resolve(state(context.insets))
53
+
54
+ override fun hide(reply: AkanNativeVoidReply) {
55
+ val activity = context.activity
56
+ activity.getSystemService(InputMethodManager::class.java)?.hideSoftInputFromWindow(context.webView.windowToken, 0)
57
+ // API 29 has no insets controller; hideSoftInputFromWindow is what androidx does there.
58
+ if (Build.VERSION.SDK_INT >= 30) Api30.hideIme(activity)
59
+ // Hiding the IME keeps DOM focus; blur so the next tap reopens it.
60
+ context.webView.evaluateJavascript("document.activeElement&&document.activeElement.blur&&document.activeElement.blur()", null)
61
+ reply.resolve()
62
+ }
63
+
64
+ override fun startListening(event: String) {
65
+ if (event == "change") listening = true else listened.add(event)
66
+ }
67
+
68
+ override fun stopListening(event: String) {
69
+ if (event == "change") listening = false else listened.remove(event)
70
+ }
71
+
72
+ private object Api30 {
73
+ fun hideIme(activity: Activity) {
74
+ activity.window.insetsController?.hide(WindowInsets.Type.ime())
75
+ }
76
+ }
77
+ }
@@ -0,0 +1,93 @@
1
+ import UIKit
2
+
3
+ /// Soft keyboard: the part of the web view the keyboard covers, in points (== CSS px).
4
+ /// Measured from keyboardWillChangeFrame converted from screen to web view coordinates, so
5
+ /// floating/undocked iPad keyboards and other apps' keyboards come out right
6
+ /// (react-native RCTKeyboardObserver converts the same way).
7
+ /// The result and event types come from the generated KeyboardPluginSpec (PL-10).
8
+ final class KeyboardPlugin: KeyboardPluginSpec {
9
+ static let id = "keyboard"
10
+ private let context: AkanNativePluginContext
11
+ private var observers: [NSObjectProtocol] = []
12
+ private var state: (visible: Bool, height: Int) = (false, 0)
13
+ private lazy var events = KeyboardEvents(context)
14
+
15
+ init(context: AkanNativePluginContext) {
16
+ self.context = context
17
+ // Tracked from launch so getState() is right before anyone listens. The plugin lives as long as
18
+ // the app, so the observers are never removed.
19
+ for name in [UIResponder.keyboardWillChangeFrameNotification, UIResponder.keyboardWillHideNotification] {
20
+ observers.append(NotificationCenter.default.addObserver(forName: name, object: nil, queue: .main) { [weak self] note in
21
+ let info = UncheckedBox(note.userInfo ?? [:])
22
+ MainActor.assumeIsolated { self?.update(name, info.value) }
23
+ })
24
+ }
25
+ // O6-1: the transitions, before and after the keyboard's animation.
26
+ let phases: [(Notification.Name, String)] = [
27
+ (UIResponder.keyboardWillShowNotification, "willShow"), (UIResponder.keyboardDidShowNotification, "didShow"),
28
+ (UIResponder.keyboardWillHideNotification, "willHide"), (UIResponder.keyboardDidHideNotification, "didHide"),
29
+ ]
30
+ for (name, phase) in phases {
31
+ observers.append(NotificationCenter.default.addObserver(forName: name, object: nil, queue: .main) { [weak self] note in
32
+ let info = UncheckedBox(note.userInfo ?? [:])
33
+ MainActor.assumeIsolated { self?.transition(phase, info.value) }
34
+ })
35
+ }
36
+ }
37
+
38
+ /// The covered height, measured against the shell's root view: in "resize" mode the web view itself
39
+ /// ends at the keyboard, so it is never covered.
40
+ private func cover(_ info: [AnyHashable: Any], hiding: Bool) -> CGFloat {
41
+ if let shell = context.viewController as? AkanNativeViewController { return shell.keyboardCover(info, hiding: hiding) }
42
+ guard !hiding, let webView = context.webView, let window = webView.window,
43
+ let end = (info[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue else { return 0 }
44
+ return max(0, webView.bounds.intersection(webView.convert(end, from: window.screen.coordinateSpace)).height)
45
+ }
46
+
47
+ private func update(_ name: Notification.Name, _ info: [AnyHashable: Any]) {
48
+ let covered = cover(info, hiding: name == UIResponder.keyboardWillHideNotification)
49
+ let next = (visible: covered > 0, height: Int(covered.rounded()))
50
+ guard next.visible != state.visible || next.height != state.height else { return } // hide sends two notifications
51
+ state = next
52
+ let duration = (info[UIResponder.keyboardAnimationDurationUserInfoKey] as? NSNumber)?.doubleValue ?? 0
53
+ // The event carries the animation duration too, which KeyboardEvents.change (KeyboardState) has no field for.
54
+ var data = current.akanNativeJSON
55
+ data["duration"] = duration
56
+ context.emit("change", data)
57
+ }
58
+
59
+ private func transition(_ phase: String, _ info: [AnyHashable: Any]) {
60
+ let hiding = phase == "willHide" || phase == "didHide"
61
+ let height = Double(Int(cover(info, hiding: hiding).rounded()))
62
+ let duration = ((info[UIResponder.keyboardAnimationDurationUserInfoKey] as? NSNumber)?.doubleValue ?? 0) * 1000
63
+ // A floating iPad keyboard covers nothing: no show or hide for the page.
64
+ if !hiding && height == 0 { return }
65
+ let data = KeyboardTransition(height: height, duration: duration.rounded())
66
+ switch phase {
67
+ case "willShow": events.willShow(data)
68
+ case "didShow": events.didShow(data)
69
+ case "willHide": events.willHide(data)
70
+ default: events.didHide(data)
71
+ }
72
+ }
73
+
74
+ private var current: KeyboardState {
75
+ KeyboardState(visible: state.visible, height: Double(state.height))
76
+ }
77
+
78
+ func getState(_ reply: AkanNativeReply<KeyboardState>) {
79
+ reply.resolve(current)
80
+ }
81
+
82
+ func hide(_ reply: AkanNativeReply<Void>) {
83
+ // endEditing hides the keyboard but keeps DOM focus on the input (verified): blur too.
84
+ context.webView?.evaluateJavaScript("document.activeElement && document.activeElement.blur && document.activeElement.blur()")
85
+ context.webView?.endEditing(true)
86
+ reply.resolve()
87
+ }
88
+
89
+ func setResizeMode(_ args: KeyboardSetResizeModeArgs, _ reply: AkanNativeReply<Void>) {
90
+ (context.viewController as? AkanNativeViewController)?.keyboardResizes = args.mode == .resize
91
+ reply.resolve()
92
+ }
93
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "id": "keyboard",
3
+ "apiVersion": 1,
4
+ "methods": ["getState", "hide", "setResizeMode"],
5
+ "events": ["change", "willShow", "didShow", "willHide", "didHide"],
6
+ "coalesce": ["change"],
7
+ "codegen": true,
8
+ "web": "./src/web.ts",
9
+ "desktop": null,
10
+ "ios": {
11
+ "sources": ["ios/*.swift"],
12
+ "class": "KeyboardPlugin"
13
+ },
14
+ "android": {
15
+ "sources": ["android/*.kt"],
16
+ "class": "com.akanjs.plugins.keyboard.KeyboardPlugin"
17
+ }
18
+ }
@@ -0,0 +1,78 @@
1
+ import { createLiveValue, definePlugin, shallowEqual } from "../../../packages/core/src/index.ts";
2
+ import { useLiveValue } from "../../../packages/react/src/index.ts";
3
+ import { web } from "./web.ts";
4
+
5
+ /** Soft (on-screen) keyboard state. `height` is in CSS pixels and covers the bottom of the page. */
6
+ export interface KeyboardState {
7
+ visible: boolean;
8
+ height: number;
9
+ }
10
+
11
+ /**
12
+ * What the keyboard does to the page (akanjs readiness O6-1):
13
+ * - "resize" (default, or the app config's keyboard.resize): the page's viewport shrinks by the keyboard, so bottom-fixed UI stays above it
14
+ * (Android pads the WebView's container, iOS shortens the web view with the keyboard's animation).
15
+ * - "none": the page keeps its full size and the keyboard covers its bottom; the app moves its UI
16
+ * itself with the heights of the events. iOS still scrolls a focused field into view.
17
+ */
18
+ export type KeyboardResizeMode = "resize" | "none";
19
+
20
+ /** A keyboard transition: its height in CSS pixels once it ends (0 when hiding) and its animation length in ms. */
21
+ export interface KeyboardTransition {
22
+ height: number;
23
+ duration: number;
24
+ }
25
+
26
+ export interface KeyboardApi {
27
+ getState(): Promise<KeyboardState>;
28
+ /** Dismisses the soft keyboard. */
29
+ hide(): Promise<void>;
30
+ /** "resize" or "none"; until the app ends (not stored). The app config's keyboard.resize is the mode at launch. */
31
+ setResizeMode(args: { mode: KeyboardResizeMode }): Promise<void>;
32
+ }
33
+
34
+ export interface KeyboardEvents {
35
+ change: KeyboardState;
36
+ /** The keyboard starts to show (Android 11+ and iOS: before its animation; Android 10 and the web: together with didShow). */
37
+ willShow: KeyboardTransition;
38
+ didShow: KeyboardTransition;
39
+ willHide: KeyboardTransition;
40
+ didHide: KeyboardTransition;
41
+ }
42
+
43
+ export const keyboard = definePlugin<KeyboardApi, KeyboardEvents>("keyboard", {
44
+ methods: ["getState", "hide", "setResizeMode"],
45
+ events: ["change", "willShow", "didShow", "willHide", "didHide"],
46
+ web,
47
+ });
48
+
49
+ const hidden: KeyboardState = { visible: false, height: 0 };
50
+
51
+ const current = createLiveValue<KeyboardState>(
52
+ hidden,
53
+ (set) => {
54
+ if (keyboard.eventImplementation("change") === "none") return;
55
+ let live = true;
56
+ const stop = keyboard.listen("change", set);
57
+ keyboard
58
+ .getState()
59
+ .then((state) => live && set(state))
60
+ .catch(() => {});
61
+ return () => {
62
+ live = false;
63
+ stop();
64
+ };
65
+ },
66
+ shallowEqual,
67
+ );
68
+
69
+ export interface UseKeyboard extends KeyboardState {
70
+ /** False where the platform has no soft keyboard support (desktop). */
71
+ supported: boolean;
72
+ hide(): Promise<void>;
73
+ }
74
+
75
+ export function useKeyboard(): UseKeyboard {
76
+ const state = useLiveValue(current);
77
+ return { ...state, supported: keyboard.isSupported("getState"), hide: keyboard.hide };
78
+ }
@@ -0,0 +1,57 @@
1
+ import { defineWebPlugin } from "../../../packages/core/src/index.ts";
2
+ import type { KeyboardApi, KeyboardEvents, KeyboardState } from "./index.ts";
3
+
4
+ const MIN_KEYBOARD_HEIGHT = 100;
5
+
6
+ let last: KeyboardState = { visible: false, height: 0 };
7
+
8
+ function read(): KeyboardState {
9
+ const vv = window.visualViewport;
10
+ if (!vv) return last;
11
+
12
+ if (Math.abs(vv.scale - 1) > 0.01) return last;
13
+ const covered = Math.max(0, Math.round(window.innerHeight - vv.height));
14
+ last = covered >= MIN_KEYBOARD_HEIGHT ? { visible: true, height: covered } : { visible: false, height: 0 };
15
+ return last;
16
+ }
17
+
18
+ /** Calls `onChange(previous, next)` whenever the visual viewport shows another keyboard state. */
19
+ function watch(onChange: (previous: KeyboardState, next: KeyboardState) => void): () => void {
20
+ const vv = window.visualViewport;
21
+ if (!vv) return () => {};
22
+ let previous = read();
23
+ const check = () => {
24
+ const next = read();
25
+ if (next.visible === previous.visible && next.height === previous.height) return;
26
+ const before = previous;
27
+ previous = next;
28
+ onChange(before, next);
29
+ };
30
+ vv.addEventListener("resize", check);
31
+ return () => vv.removeEventListener("resize", check);
32
+ }
33
+
34
+ /** Browsers tell when the keyboard has changed, not before: will and did come together. */
35
+ const transition = (showing: boolean) => (emit: (t: { height: number; duration: number }) => void) =>
36
+ watch((previous, next) => {
37
+ if (next.visible === showing && previous.visible !== showing) emit({ height: next.height, duration: 0 });
38
+ });
39
+
40
+ export const web = defineWebPlugin<KeyboardApi, KeyboardEvents>({
41
+ methods: {
42
+ getState: async () => read(),
43
+ async hide() {
44
+ const el = document.activeElement;
45
+ if (el instanceof HTMLElement) el.blur();
46
+ },
47
+
48
+ async setResizeMode() {},
49
+ },
50
+ events: {
51
+ change: (emit) => watch((_, next) => emit(next)),
52
+ willShow: transition(true),
53
+ didShow: transition(true),
54
+ willHide: transition(false),
55
+ didHide: transition(false),
56
+ },
57
+ });
@@ -0,0 +1,38 @@
1
+ package com.akanjs.plugins.localnotifications
2
+
3
+ import android.content.BroadcastReceiver
4
+ import android.content.Context
5
+ import android.content.Intent
6
+ import android.util.Log
7
+
8
+ /**
9
+ * Declared in the manifest (android.applicationXml, exported="false": only the system and this app
10
+ * reach it). It runs without the Activity, on the Context the system gives it:
11
+ * - FIRE: an alarm of LocalNotifications.arm went off
12
+ * - BOOT_COMPLETED: alarms do not survive a reboot (capacitor-plugins/local-notifications/android/
13
+ * .../LocalNotificationRestoreReceiver.java). LOCKED_BOOT_COMPLETED is not used: the store is in
14
+ * credential-encrypted storage, which is locked until the user unlocks (Capacitor listens for it
15
+ * and then returns early when the user is locked, :16-17).
16
+ * - MY_PACKAGE_REPLACED: re-arm after an update, in case the alarms went with the old version
17
+ * - RESTORE: the plugin creates one reflectively and calls onReceive with it on every app start
18
+ * (a force stop also clears alarms). That also keeps the constructor and onReceive in R8 release
19
+ * builds, which do not read the manifest (packages/cli/src/platforms/android.ts PROGUARD).
20
+ */
21
+ class LocalNotificationReceiver : BroadcastReceiver() {
22
+ override fun onReceive(context: Context, intent: Intent) {
23
+ try {
24
+ when (intent.action) {
25
+ LocalNotifications.ACTION_FIRE -> {
26
+ val id = intent.getIntExtra(LocalNotifications.EXTRA_ID, Int.MIN_VALUE)
27
+ if (id != Int.MIN_VALUE || intent.hasExtra(LocalNotifications.EXTRA_ID)) LocalNotifications.fire(context, id)
28
+ }
29
+ Intent.ACTION_BOOT_COMPLETED, Intent.ACTION_MY_PACKAGE_REPLACED, LocalNotifications.ACTION_RESTORE ->
30
+ LocalNotifications.restore(context)
31
+ }
32
+ } catch (e: RuntimeException) {
33
+ Log.e(LocalNotifications.TAG, "local-notifications: ${intent.action} failed", e)
34
+ } catch (e: LinkageError) { // an API this Android lacks, reached without a version check
35
+ Log.e(LocalNotifications.TAG, "local-notifications: ${intent.action} needs a newer Android", e)
36
+ }
37
+ }
38
+ }
@@ -0,0 +1,284 @@
1
+ package com.akanjs.plugins.localnotifications
2
+
3
+ import android.app.ActivityManager
4
+ import android.app.AlarmManager
5
+ import android.app.Notification
6
+ import android.app.NotificationChannel
7
+ import android.app.NotificationManager
8
+ import android.app.PendingIntent
9
+ import android.content.Context
10
+ import android.content.Intent
11
+ import android.os.Build
12
+ import android.os.Bundle
13
+ import android.util.Log
14
+ import java.util.Calendar
15
+ import org.json.JSONObject
16
+
17
+ /**
18
+ * Scheduling shared by the plugin (Activity running) and the receiver (maybe no Activity at all:
19
+ * an alarm or a boot wakes only the process). Everything takes the Context it is given.
20
+ *
21
+ * - Scheduled items live in SharedPreferences, because alarms are gone after a reboot or a force
22
+ * stop; the receiver re-arms them on BOOT_COMPLETED and the plugin on every app start
23
+ * (capacitor-plugins/local-notifications/android/.../LocalNotificationRestoreReceiver.java:30-40).
24
+ * The alarm intent carries only the id and the receiver reads the item from the store, instead of
25
+ * a parceled Notification in the extras as Capacitor does (TimedNotificationPublisher.java:35):
26
+ * one source of truth, and a cancelled item cannot fire from a stale intent.
27
+ * - Exact alarms only when canScheduleExactAlarms() (SCHEDULE_EXACT_ALARM is not requested, and is
28
+ * denied by default for new installs targeting API 33+); otherwise setAndAllowWhileIdle
29
+ * (LocalNotificationManager.java:374-396 falls back the same way). Its delivery window is 75% of
30
+ * the lead time, capped at one hour (dumpsys alarm on the API 37 emulator): a reminder set 20 s
31
+ * ahead came 15 s late, a minute repeat up to 45 s late.
32
+ * - Repeats are chains of one-shot alarms: each delivery arms the next occurrence, so they can be
33
+ * exact, getPending knows the next time, and day/week keep the local time across DST. Capacitor
34
+ * and Tauri use setRepeating(RTC, ...), which is always inexact (LocalNotificationManager.java:357).
35
+ * - Framework Notification.Builder (no NotificationCompat). The APK has no resources, so the small
36
+ * icon is a framework drawable (ic_popup_reminder); Capacitor falls back to ic_dialog_info.
37
+ */
38
+ internal object LocalNotifications {
39
+ const val TAG = "AkanNative"
40
+ const val DEFAULT_CHANNEL = "default"
41
+ const val ACTION_FIRE = "com.akanjs.plugins.localnotifications.FIRE"
42
+ const val ACTION_RESTORE = "com.akanjs.plugins.localnotifications.RESTORE"
43
+ const val EXTRA_ID = "akan-native.ln.id"
44
+ /** On the tap intent: the notification as JSON (the "action" event). */
45
+ const val EXTRA_TAP = "akan-native.ln.tap"
46
+ /**
47
+ * On the tap intent: a random token issued when the notification was posted and taken back by
48
+ * the tap. The launcher activity is exported, so any app can send it an intent with EXTRA_TAP;
49
+ * without a token on record that is no tap of ours. Single use: one tap is reported once.
50
+ */
51
+ const val EXTRA_TOKEN = "akan-native.ln.token"
52
+ private const val TOKENS = "akan-native.localNotifications.taps"
53
+ private const val MAX_TOKENS = 64
54
+ /** In the notification extras: marks our notifications and keeps their data. */
55
+ const val EXTRA_MARKER = "akan-native.ln"
56
+ const val EXTRA_DATA = "akan-native.ln.data"
57
+ private const val STORE = "akan-native.localNotifications"
58
+
59
+ data class Item(
60
+ val id: Int,
61
+ val title: String,
62
+ val body: String,
63
+ val at: Long,
64
+ val every: String?,
65
+ val channelId: String?,
66
+ /** JSON object text. */
67
+ val data: String?,
68
+ ) {
69
+ fun json(): JSONObject = JSONObject().put("id", id).put("title", title).put("body", body).put("at", at).apply {
70
+ if (every != null) put("every", every)
71
+ if (channelId != null) put("channelId", channelId)
72
+ if (data != null) put("data", JSONObject(data))
73
+ }
74
+
75
+ /** The "received" / "action" event. */
76
+ fun event(): JSONObject = JSONObject().put("id", id).put("title", title).put("body", body).apply {
77
+ if (data != null) put("data", JSONObject(data))
78
+ }
79
+
80
+ companion object {
81
+ fun from(json: JSONObject): Item = Item(
82
+ id = json.getInt("id"),
83
+ title = json.getString("title"),
84
+ body = json.optString("body", ""),
85
+ at = json.getLong("at"),
86
+ every = json.optString("every").ifEmpty { null },
87
+ channelId = json.optString("channelId").ifEmpty { null },
88
+ data = json.optJSONObject("data")?.toString(),
89
+ )
90
+ }
91
+ }
92
+
93
+ private fun store(context: Context) = context.getSharedPreferences(STORE, Context.MODE_PRIVATE)
94
+
95
+ fun pending(context: Context): List<Item> = store(context).all.values.mapNotNull { text ->
96
+ runCatching { Item.from(JSONObject(text as String)) }.getOrNull()
97
+ }.sortedBy { it.at }
98
+
99
+ private fun save(context: Context, item: Item) = store(context).edit().putString(item.id.toString(), item.json().toString()).apply()
100
+
101
+ private fun forget(context: Context, id: Int) = store(context).edit().remove(id.toString()).apply()
102
+
103
+ // ------------------------------------------------------------ schedule
104
+
105
+ fun schedule(context: Context, items: List<Item>) {
106
+ for (item in items) {
107
+ unarm(context, item.id)
108
+ if (item.every == null && item.at <= System.currentTimeMillis()) {
109
+ forget(context, item.id)
110
+ post(context, item)
111
+ } else {
112
+ save(context, item)
113
+ arm(context, item)
114
+ }
115
+ }
116
+ }
117
+
118
+ fun cancel(context: Context, ids: List<Int>) {
119
+ for (id in ids) {
120
+ unarm(context, id)
121
+ forget(context, id)
122
+ }
123
+ }
124
+
125
+ /** An alarm went off: show the item and arm its next occurrence. */
126
+ fun fire(context: Context, id: Int) {
127
+ val text = store(context).getString(id.toString(), null) ?: return // cancelled meanwhile
128
+ val item = runCatching { Item.from(JSONObject(text)) }.getOrNull() ?: return forget(context, id)
129
+ val now = System.currentTimeMillis()
130
+ if (item.at > now + 1000) return arm(context, item) // a stale alarm of an item scheduled again for later
131
+ post(context, item)
132
+ if (item.every == null) {
133
+ forget(context, id)
134
+ } else {
135
+ val next = item.copy(at = nextOccurrence(item.at, item.every, now))
136
+ save(context, next)
137
+ arm(context, next)
138
+ }
139
+ }
140
+
141
+ /**
142
+ * After a boot, a force stop or an update: arm everything again. One-shots that came due while
143
+ * the alarms were gone are shown now (Capacitor shows them 15 s after boot,
144
+ * LocalNotificationRestoreReceiver.java:33-38); missed repeats are skipped to the next occurrence.
145
+ */
146
+ fun restore(context: Context) {
147
+ val now = System.currentTimeMillis()
148
+ for (item in pending(context)) {
149
+ when {
150
+ item.every != null -> {
151
+ val next = if (item.at > now) item else item.copy(at = nextOccurrence(item.at, item.every, now)).also { save(context, it) }
152
+ arm(context, next)
153
+ }
154
+ item.at > now -> arm(context, item)
155
+ else -> {
156
+ forget(context, item.id)
157
+ post(context, item)
158
+ }
159
+ }
160
+ }
161
+ }
162
+
163
+ private fun alarmIntent(context: Context, id: Int, flags: Int): PendingIntent? =
164
+ PendingIntent.getBroadcast(
165
+ context,
166
+ id,
167
+ Intent(context, LocalNotificationReceiver::class.java).setAction(ACTION_FIRE).putExtra(EXTRA_ID, id),
168
+ flags or PendingIntent.FLAG_IMMUTABLE,
169
+ )
170
+
171
+ private fun arm(context: Context, item: Item) {
172
+ val alarms = context.getSystemService(AlarmManager::class.java) ?: return
173
+ val pi = alarmIntent(context, item.id, PendingIntent.FLAG_UPDATE_CURRENT) ?: return
174
+ try {
175
+ // Exact alarms need no permission before API 31 (Capacitor LocalNotificationManager.java:374-397).
176
+ if (Build.VERSION.SDK_INT < 31 || Api31.canScheduleExactAlarms(alarms)) {
177
+ alarms.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, item.at, pi)
178
+ return
179
+ }
180
+ } catch (e: SecurityException) { // revoked between the check and the call
181
+ Log.w(TAG, "local-notifications: exact alarm refused, using an inexact one", e)
182
+ }
183
+ alarms.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, item.at, pi)
184
+ }
185
+
186
+ private fun unarm(context: Context, id: Int) {
187
+ val pi = alarmIntent(context, id, PendingIntent.FLAG_NO_CREATE) ?: return
188
+ context.getSystemService(AlarmManager::class.java)?.cancel(pi)
189
+ pi.cancel()
190
+ }
191
+
192
+ /** Minute and hour are fixed lengths; day and week keep the local time of day (schedule.ts addInterval). */
193
+ fun nextOccurrence(at: Long, every: String, after: Long): Long {
194
+ if (at > after) return at
195
+ val fixed = when (every) {
196
+ "minute" -> 60_000L
197
+ "hour" -> 3_600_000L
198
+ else -> 0L
199
+ }
200
+ if (fixed > 0) return at + ((after - at) / fixed + 1) * fixed
201
+ val days = if (every == "week") 7 else 1
202
+ val start = Calendar.getInstance().apply { timeInMillis = at }
203
+ var k = maxOf(1L, (after - at) / (days * 86_400_000L)).toInt()
204
+ fun nth(n: Int): Long = (start.clone() as Calendar).apply { add(Calendar.DAY_OF_MONTH, n * days) }.timeInMillis
205
+ while (k > 1 && nth(k - 1) > after) k--
206
+ while (nth(k) <= after) k++
207
+ return nth(k)
208
+ }
209
+
210
+ // ------------------------------------------------------------ notifications
211
+
212
+ fun ensureDefaultChannel(manager: NotificationManager) {
213
+ if (manager.getNotificationChannel(DEFAULT_CHANNEL) != null) return
214
+ manager.createNotificationChannel(NotificationChannel(DEFAULT_CHANNEL, "Notifications", NotificationManager.IMPORTANCE_DEFAULT))
215
+ }
216
+
217
+ @Synchronized
218
+ private fun issueToken(context: Context): String {
219
+ val prefs = context.getSharedPreferences(TOKENS, Context.MODE_PRIVATE)
220
+ val token = java.util.UUID.randomUUID().toString()
221
+ // Oldest first ("<time> <token>"): the notifications behind old tokens are long gone.
222
+ val kept = (prefs.getStringSet("issued", emptySet()) ?: emptySet()).sorted().takeLast(MAX_TOKENS - 1)
223
+ prefs.edit().putStringSet("issued", (kept + "${System.currentTimeMillis()} $token").toSet()).apply()
224
+ return token
225
+ }
226
+
227
+ /** Whether [token] was issued for a notification and not taken yet; takes it. */
228
+ @Synchronized
229
+ fun redeemToken(context: Context, token: String): Boolean {
230
+ val prefs = context.getSharedPreferences(TOKENS, Context.MODE_PRIVATE)
231
+ val issued = prefs.getStringSet("issued", emptySet()) ?: emptySet()
232
+ val entry = issued.firstOrNull { it.substringAfter(' ') == token } ?: return false
233
+ prefs.edit().putStringSet("issued", issued - entry).commit()
234
+ return true
235
+ }
236
+
237
+ fun post(context: Context, item: Item) {
238
+ val manager = context.getSystemService(NotificationManager::class.java) ?: return
239
+ if (!manager.areNotificationsEnabled()) {
240
+ Log.w(TAG, "local-notifications: notifications are off, ${item.id} not shown")
241
+ return
242
+ }
243
+ // A channel deleted since scheduling would drop the notification silently.
244
+ val channel = item.channelId?.takeIf { manager.getNotificationChannel(it) != null } ?: DEFAULT_CHANNEL.also { ensureDefaultChannel(manager) }
245
+ val postedAt = System.currentTimeMillis()
246
+
247
+ // Tap: the launcher activity (launchMode singleTask, so a running app gets onNewIntent)
248
+ // with the event in the extras. Immutable: nothing needs to fill it in (Capacitor uses
249
+ // FLAG_MUTABLE only for RemoteInput actions).
250
+ val launch = context.packageManager.getLaunchIntentForPackage(context.packageName)
251
+ val tap = launch?.let {
252
+ it.putExtra(EXTRA_TAP, item.event().toString()).putExtra(EXTRA_TOKEN, issueToken(context))
253
+ PendingIntent.getActivity(context, item.id, it, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE)
254
+ }
255
+ val extras = Bundle().apply {
256
+ putBoolean(EXTRA_MARKER, true)
257
+ if (item.data != null) putString(EXTRA_DATA, item.data)
258
+ }
259
+ val notification = Notification.Builder(context, channel)
260
+ .setSmallIcon(android.R.drawable.ic_popup_reminder)
261
+ .setContentTitle(item.title)
262
+ .setContentText(item.body)
263
+ .setStyle(Notification.BigTextStyle().bigText(item.body))
264
+ .setCategory(Notification.CATEGORY_REMINDER)
265
+ .setAutoCancel(true)
266
+ .setWhen(postedAt)
267
+ .setShowWhen(true)
268
+ .addExtras(extras)
269
+ .apply { if (tap != null) setContentIntent(tap) }
270
+ .build()
271
+ manager.notify(item.id, notification)
272
+ LocalNotificationsPlugin.delivered(context, item)
273
+ }
274
+
275
+ fun isForeground(): Boolean {
276
+ val info = ActivityManager.RunningAppProcessInfo()
277
+ ActivityManager.getMyMemoryState(info)
278
+ return info.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND
279
+ }
280
+
281
+ private object Api31 {
282
+ fun canScheduleExactAlarms(alarms: AlarmManager): Boolean = alarms.canScheduleExactAlarms()
283
+ }
284
+ }