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