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,133 @@
1
+
2
+
3
+ import { existsSync, readFileSync } from "node:fs";
4
+ import { join } from "node:path";
5
+ import { renderInitScript } from "../../core/src/protocol.ts";
6
+ import { ABI_MAJOR, cstr, lastError, openNative, resolvePaths } from "./ffi.ts";
7
+ import { webviewDataDir } from "./paths.ts";
8
+ import type { Launch, LaunchWindow } from "./plugin.ts";
9
+
10
+ const ENV_OVERRIDE_PREFIX = "AKAN_NATIVE_PUBLIC_";
11
+
12
+ /** env.runtime.json, overlaid with AKAN_NATIVE_PUBLIC_* process variables (ENV-1, highest precedence). */
13
+ function runtimeEnv(resources: string): Record<string, string> {
14
+ const env = JSON.parse(readFileSync(join(resources, "env.runtime.json"), "utf8")) as Record<string, string>;
15
+ for (const [key, value] of Object.entries(process.env)) {
16
+ if (key.startsWith(ENV_OVERRIDE_PREFIX) && value !== undefined) env[key.slice("AKAN_NATIVE_".length)] = value;
17
+ }
18
+ return env;
19
+ }
20
+
21
+ interface ShellConfig {
22
+ title: string;
23
+ backgroundColor: string;
24
+ backgroundColorDark: string;
25
+ devtools: boolean;
26
+ width?: number;
27
+ height?: number;
28
+ /** akan-native dev --hmr (dev builds): the dev gateway every page request outside /__akan_native/* goes to. */
29
+ devServer?: string;
30
+ /** With devServer: the main window's first page (akan-native dev --start), else "/". */
31
+ startPath?: string;
32
+ /** security.shell.externalSchemes (L0): schemes links may also hand to the OS. */
33
+ externalSchemes?: string[];
34
+ }
35
+
36
+ const finite = (v: unknown): v is number => typeof v === "number" && Number.isFinite(v);
37
+
38
+ /** The launch phase's window bounds that akan_native_run understands (x and y only together). */
39
+ export function launchBounds(window: LaunchWindow): LaunchWindow {
40
+ const out: LaunchWindow = {};
41
+ if (finite(window.x) && finite(window.y)) Object.assign(out, { x: window.x, y: window.y });
42
+ if (finite(window.width) && window.width >= 1) out.width = window.width;
43
+ if (finite(window.height) && window.height >= 1) out.height = window.height;
44
+ if (window.maximized === true) out.maximized = true;
45
+ return out;
46
+ }
47
+
48
+ function fail(message: string, error?: unknown): never {
49
+ console.error(`[akan-native] ${message}`, error ?? "");
50
+ process.exit(1);
51
+ }
52
+
53
+ export async function startMain(workerUrl: string): Promise<never> {
54
+ const paths = resolvePaths();
55
+ let shell: ShellConfig;
56
+ let initJs: string;
57
+ let dev = false;
58
+ let appId = "";
59
+ try {
60
+ shell = JSON.parse(readFileSync(join(paths.resources, "shell.json"), "utf8"));
61
+ const boot = readFileSync(join(paths.resources, "boot.json"), "utf8");
62
+ initJs = renderInitScript(boot.trim(), JSON.stringify(runtimeEnv(paths.resources)));
63
+ const parsed = JSON.parse(boot) as { dev?: boolean; app?: { id?: string } };
64
+ dev = parsed.dev === true;
65
+ appId = parsed.app?.id ?? "";
66
+ } catch (error) {
67
+ fail(`cannot read app resources in ${paths.resources}`, error);
68
+ }
69
+
70
+ let lib: ReturnType<typeof openNative>;
71
+ try {
72
+ lib = openNative(paths.lib);
73
+ } catch (error) {
74
+ fail(`cannot load ${paths.lib}`, error);
75
+ }
76
+
77
+ const abi = lib.symbols.akan_native_abi();
78
+ if (abi >>> 16 !== ABI_MAJOR)
79
+ fail(`${paths.lib} speaks C ABI ${abi >>> 16}.${abi & 0xffff}; this app needs ${ABI_MAJOR}.x`);
80
+
81
+ lib.symbols.akan_native_init(dev ? 1 : 0);
82
+ if (!dev)
83
+ for (const key of Object.keys(process.env))
84
+ if (/^(WEBVIEW2_|WEBKIT_INSPECTOR|WEBKIT_DISABLE_SANDBOX)|^SSLKEYLOGFILE$/.test(key)) delete process.env[key];
85
+
86
+ const worker = new Worker(workerUrl, { argv: process.argv.slice(2) } as WorkerOptions);
87
+
88
+ const launch = await new Promise<Launch>((resolve) => {
89
+ const timer = setTimeout(() => fail("plugin host did not start within 10 s"), 10_000);
90
+ worker.addEventListener("error", (event) =>
91
+ fail("plugin host failed to start", (event as ErrorEvent).message ?? event),
92
+ );
93
+ worker.addEventListener("message", (event) => {
94
+ const data = (event as MessageEvent).data as { type?: string } & Partial<Launch>;
95
+ if (data?.type === "ready") {
96
+ clearTimeout(timer);
97
+ resolve({ window: data.window ?? {}, exit: data.exit });
98
+ }
99
+ });
100
+ });
101
+ if (typeof launch.exit === "number") {
102
+ worker.terminate();
103
+ process.exit(launch.exit);
104
+ }
105
+ const bounds = launchBounds(launch.window);
106
+
107
+ const config = {
108
+ title: shell.title,
109
+ width: shell.width ?? 1024,
110
+ height: shell.height ?? 720,
111
+ ...bounds,
112
+ appDir: paths.appDir,
113
+ initJs,
114
+ devtools: shell.devtools,
115
+ menu: true,
116
+ backgroundColor: shell.backgroundColor,
117
+ backgroundColorDark: shell.backgroundColorDark,
118
+ externalSchemes: shell.externalSchemes ?? [],
119
+
120
+ activation: process.env.AKAN_NATIVE_ACTIVATION ?? "regular",
121
+
122
+ ...(dev && shell.devServer ? { devServer: shell.devServer } : {}),
123
+ ...(dev && shell.devServer && shell.startPath ? { startPath: shell.startPath } : {}),
124
+
125
+ ...(appId && webviewDataDir(appId) ? { dataDir: webviewDataDir(appId) } : {}),
126
+ ...(existsSync(join(paths.resources, "icon.rgba")) ? { icon: join(paths.resources, "icon.rgba") } : {}),
127
+
128
+ ...(appId ? { appId } : {}),
129
+ };
130
+ const code = lib.symbols.akan_native_run(cstr(JSON.stringify(config)));
131
+
132
+ fail(`${code === -5 ? "cannot start: " : `akan_native_run failed with ${code}: `}${lastError(lib)}`);
133
+ }
@@ -0,0 +1,103 @@
1
+
2
+
3
+ import { AkanNativeError } from "../../core/src/index.ts";
4
+ import type { DesktopContext, EmitTarget } from "./plugin.ts";
5
+
6
+ export const PAGE_ACK_TIMEOUT = 2000;
7
+
8
+ /** Emit functions from before multi-window return nothing: one page, answering from any window. */
9
+ const ANY_PAGE = -1;
10
+
11
+ export interface PageVeto<D> {
12
+ readonly listening: boolean;
13
+ /**
14
+ * The plugin's event source: `events: { closeRequested: (emit, ctx) => veto.source(emit, ctx) }`.
15
+ * With `ctx`, a page that reloads or whose window is destroyed while asked drops the request.
16
+ */
17
+ source(emit: (data: D & { id: number }, target?: EmitTarget) => number[] | unknown, ctx?: DesktopContext): () => void;
18
+ /** Resolves false if a page called preventDefault(). */
19
+ ask(data: D, target?: EmitTarget): Promise<boolean>;
20
+ /** The plugin method the pages answer with: { id, allow? }, from `window` (ctx.window). */
21
+ answer(args: unknown, window?: number): void;
22
+ }
23
+
24
+ interface Pending {
25
+ /** Asked pages that have not allowed yet: window → acknowledged. */
26
+ pages: Map<number, boolean>;
27
+ timer: ReturnType<typeof setTimeout> | undefined;
28
+ resolve(allow: boolean): void;
29
+ }
30
+
31
+ export function createPageVeto<D extends object = {}>(ackTimeout = PAGE_ACK_TIMEOUT): PageVeto<D> {
32
+ let emit: ((data: D & { id: number }, target?: EmitTarget) => number[] | unknown) | null = null;
33
+ let seq = 0;
34
+ const pending = new Map<number, Pending>();
35
+
36
+ const settle = (id: number, allow: boolean) => {
37
+ const entry = pending.get(id);
38
+ if (!entry) return;
39
+ pending.delete(id);
40
+ clearTimeout(entry.timer);
41
+ entry.resolve(allow);
42
+ };
43
+ const gone = (window: number) => {
44
+ for (const [id, entry] of [...pending]) if (entry.pages.has(window)) settle(id, false);
45
+ };
46
+
47
+ return {
48
+ get listening() {
49
+ return emit !== null;
50
+ },
51
+ source(send, ctx) {
52
+ emit = send;
53
+
54
+ const stops = ctx ? [ctx.onDocumentEnd((doc) => gone(doc.window))] : [];
55
+ return () => {
56
+ for (const stop of stops) stop();
57
+ if (emit === send) emit = null;
58
+ for (const id of [...pending.keys()]) settle(id, false);
59
+ };
60
+ },
61
+ ask(data, target) {
62
+ if (!emit) return Promise.resolve(true);
63
+ const id = ++seq;
64
+ return new Promise<boolean>((resolve) => {
65
+ const entry: Pending = { pages: new Map(), timer: undefined, resolve };
66
+ pending.set(id, entry);
67
+ const reached = emit!({ ...data, id }, target);
68
+ const windows = Array.isArray(reached) ? (reached as number[]) : [ANY_PAGE];
69
+ if (windows.length === 0) return settle(id, true);
70
+ for (const window of windows) entry.pages.set(window, false);
71
+ entry.timer = setTimeout(() => {
72
+ for (const [window, acked] of entry.pages) {
73
+ if (acked) continue;
74
+ console.warn(
75
+ `[akan-native] the page${window > 0 ? ` of window ${window}` : ""} did not answer within ${ackTimeout} ms; going on`,
76
+ );
77
+ entry.pages.delete(window);
78
+ }
79
+ if (entry.pages.size === 0) settle(id, true);
80
+ }, ackTimeout);
81
+ });
82
+ },
83
+ answer(args, window) {
84
+ const { id, allow } = (args ?? {}) as { id?: unknown; allow?: unknown };
85
+ if (typeof id !== "number") throw new AkanNativeError("INVALID_ARGS", "id must be a number");
86
+ if (allow !== undefined && typeof allow !== "boolean")
87
+ throw new AkanNativeError("INVALID_ARGS", "allow must be a boolean");
88
+ const entry = pending.get(id);
89
+ if (!entry) return;
90
+ const page =
91
+ window !== undefined && entry.pages.has(window) ? window : entry.pages.has(ANY_PAGE) ? ANY_PAGE : undefined;
92
+ if (page === undefined) return;
93
+ if (allow === undefined) {
94
+ entry.pages.set(page, true);
95
+ if ([...entry.pages.values()].every(Boolean)) clearTimeout(entry.timer);
96
+ } else if (!allow) settle(id, false);
97
+ else {
98
+ entry.pages.delete(page);
99
+ if (entry.pages.size === 0) settle(id, true);
100
+ }
101
+ },
102
+ };
103
+ }
@@ -0,0 +1,59 @@
1
+
2
+
3
+ import { homedir } from "node:os";
4
+ import { join } from "node:path";
5
+
6
+ type Env = Record<string, string | undefined>;
7
+
8
+ /** XDG base directories must be absolute; anything else is ignored (XDG Base Directory spec). */
9
+ const xdg = (value: string | undefined, fallback: string) => (value?.startsWith("/") ? value : fallback);
10
+
11
+ /**
12
+ * Settings and state the app keeps (preferences, window state, files):
13
+ * macOS ~/Library/Application Support/<id>
14
+ * Windows %APPDATA%\<id> (Roaming: follows the user between PCs)
15
+ * Linux $XDG_DATA_HOME/<id> (~/.local/share/<id>)
16
+ */
17
+ export function appDataDir(
18
+ id: string,
19
+ platform: NodeJS.Platform = process.platform,
20
+ env: Env = process.env,
21
+ home = homedir(),
22
+ ): string {
23
+ if (platform === "darwin") return join(home, "Library", "Application Support", id);
24
+ if (platform === "win32") return join(env.APPDATA || join(home, "AppData", "Roaming"), id);
25
+ return join(xdg(env.XDG_DATA_HOME, join(home, ".local", "share")), id);
26
+ }
27
+
28
+ /**
29
+ * The webview's own storage and caches (Windows, Linux; WKWebView chooses its own on macOS):
30
+ * Windows %LOCALAPPDATA%\<id>\WebView2 (large and machine-specific: not Roaming)
31
+ * Linux $XDG_DATA_HOME/<id>/webview
32
+ * WebView2's default would be next to the .exe, which is not writable once installed.
33
+ */
34
+ export function webviewDataDir(
35
+ id: string,
36
+ platform: NodeJS.Platform = process.platform,
37
+ env: Env = process.env,
38
+ home = homedir(),
39
+ ): string | undefined {
40
+ if (platform === "win32") return join(env.LOCALAPPDATA || join(home, "AppData", "Local"), id, "WebView2");
41
+ if (platform === "linux") return join(appDataDir(id, platform, env, home), "webview");
42
+ return undefined;
43
+ }
44
+
45
+ /**
46
+ * Folders whose files no FileRef may serve (L4): the shell's and the plugins' own storage
47
+ * (preferences, secure storage, databases, update bundles, window state, the webview's data). Only
48
+ * the filesystem plugin's `data` base (<app data>/files) is servable inside the app data folder.
49
+ */
50
+ export function reservedDirs(
51
+ id: string,
52
+ platform: NodeJS.Platform = process.platform,
53
+ env: Env = process.env,
54
+ home = homedir(),
55
+ ): { root: string; except: string[] }[] {
56
+ const data = appDataDir(id, platform, env, home);
57
+ const webview = webviewDataDir(id, platform, env, home);
58
+ return [{ root: data, except: [join(data, "files")] }, ...(webview ? [{ root: webview, except: [] }] : [])];
59
+ }
@@ -0,0 +1,232 @@
1
+
2
+
3
+ import { EXTERNAL_OPENS_PER_SECOND } from "../../core/src/contract.ts";
4
+ import type { AppInfo, CallScope, FileRef } from "../../core/src/index.ts";
5
+ import type { QuitReason, Veto } from "./lifecycle.ts";
6
+
7
+ export type { QuitReason, Veto } from "./lifecycle.ts";
8
+ export { createPageVeto, type PageVeto } from "./page-veto.ts";
9
+
10
+ /**
11
+ * Which pages an event goes to. Default: every page that listens. `{ window }`: only that
12
+ * window's page (window events). "focused": only the most recently focused window that listens
13
+ * (something to handle once, like a deep link).
14
+ */
15
+ export type EmitTarget = { window: number } | "focused";
16
+
17
+ export interface DesktopContext {
18
+ app: AppInfo;
19
+ /**
20
+ * The window whose page made this call (SH-6; 1 = the window the app opened). Only in method
21
+ * calls; undefined in setup and event sources.
22
+ */
23
+ readonly window?: number;
24
+ /**
25
+ * What the app's capabilities allow this method call (PL-11): enforce it with
26
+ * `scopePermits(ctx.scope, { field: value }, pathFields, urlFields)` from @akanjs/native/core. Undefined when no
27
+ * matching grant carries scopes (only the plugin's own rules apply). Only in method calls.
28
+ */
29
+ readonly scope?: CallScope;
30
+ /**
31
+ * Fires when the page gives up on this call (its AbortSignal: v1.1 `cancel`) or the page is gone.
32
+ * The page has its answer by then (CANCELLED or TIMEOUT); stop the work and release what it
33
+ * holds. Only in method calls.
34
+ */
35
+ readonly signal?: AbortSignal;
36
+ /**
37
+ * The calling page's document (one page load; bridge v1.1 `doc`), for what must not outlive it:
38
+ * `ctx.document.own(() => db.close())`. Only in method calls.
39
+ */
40
+ readonly document?: DocumentScope;
41
+ /** Per-app data folder, e.g. ~/Library/Application Support/<app id>. Created on first access. */
42
+ readonly appDataDir: string;
43
+ /** Pushes an event of this plugin to the pages that listen. Returns the windows reached. */
44
+ emit(event: string, data?: unknown, target?: EmitTarget): number[];
45
+ /** Serves a local file at /__akan_native/file/<id> for the rest of the session (PL-7). */
46
+ registerFile(path: string, mime: string): FileRef;
47
+ /**
48
+ * Runs a native shell command on the main thread, e.g. shell("window.setTitle", { title }).
49
+ * Window ops act on `args.window`; without it, on the calling window in a method call, else on
50
+ * the most recently focused window.
51
+ */
52
+ shell(op: string, args?: Record<string, unknown>): Promise<unknown>;
53
+ /** Native shell events ("window", "opened", "pageLoad", …). Returns an unsubscribe function. */
54
+ onNativeEvent(type: string, listener: (event: NativeEvent) => void): () => void;
55
+ /** The app's deep link schemes (deepLinks.schemes in akan-native.config.ts), lowercase. */
56
+ readonly deepLinkSchemes: readonly string[];
57
+ /**
58
+ * What may be handed to the OS (L0): http, https, mailto, tel and security.shell.externalSchemes.
59
+ * Plugins that open URLs outside the app check them and call `externalOpenAllowed()` first.
60
+ */
61
+ readonly externalSchemes: readonly string[];
62
+ /**
63
+ * Hands a launch's arguments to the "opened" listeners when they are a deep link (D6). Windows
64
+ * and Linux start a new process for a link; single-instance passes that process's arguments
65
+ * here. Anything but a single URL of one of the app's schemes is ignored (deeplinks.ts).
66
+ */
67
+ openLinks(args: readonly string[]): void;
68
+ /** Ends the app with an exit code, after the onQuit hooks. Does not ask onBeforeQuit. */
69
+ quit(code?: number): void;
70
+ /**
71
+ * Cleanup before the app quits, however it quits (Cmd+Q, window close, app.exit(), logout).
72
+ * All hooks run together and the app waits for them at most 2 s. Returns an unregister function.
73
+ */
74
+ onQuit(fn: () => void | Promise<void>): () => void;
75
+ /**
76
+ * Runs when any window's page document ends (reload, navigation, window destroyed, renderer
77
+ * gone), after its calls, subscriptions and owned resources were closed. For a plugin's own
78
+ * per-window tables. Returns an unregister function.
79
+ */
80
+ onDocumentEnd(fn: (doc: DocumentInfo) => void): () => void;
81
+ /** Veto for quit requests (Cmd+Q, Dock, AppleScript, logout, last window closed): return false to keep running. */
82
+ onBeforeQuit(fn: Veto<{ reason: QuitReason }>): () => void;
83
+ /** Veto for a window's close button and Cmd+W: return false to keep that window open. */
84
+ onCloseRequested(fn: Veto<{ window: number }>): () => void;
85
+ /**
86
+ * Closes a window without asking (default: the calling window in a method call, else window 1).
87
+ * Another window is left: it is destroyed. It was the last one: the app quits, or hides it when
88
+ * desktop.quitOnLastWindowClosed is false.
89
+ */
90
+ closeWindow(window?: number): void;
91
+ /**
92
+ * Launch phase: only while setup runs, before the window exists. The host waits for every
93
+ * plugin's setup (async allowed, at most 3 s each) before it creates the window. Calls after
94
+ * that are ignored with a warning.
95
+ */
96
+ readonly launch: {
97
+ /** Creates the window at these bounds (logical points) instead of the configured size (window-state). */
98
+ setWindow(bounds: LaunchWindow): void;
99
+ /** Ends the app before a window is created; onQuit hooks do not run (single-instance). */
100
+ exit(code?: number): void;
101
+ };
102
+ }
103
+
104
+ /** Which page load ended. `id` is "" for a page that sends no document id (v1 callers, tests). */
105
+ export interface DocumentInfo {
106
+ window: number;
107
+ id: string;
108
+ }
109
+
110
+ /**
111
+ * One page load of a window (architecture §3.7 Document scope). Module state of a desktop plugin is
112
+ * App scope: keep per-page state here, or keyed by window and cleared in onDocumentEnd.
113
+ */
114
+ export interface DocumentScope extends DocumentInfo {
115
+ /** True once the page is gone. */
116
+ readonly ended: boolean;
117
+ /**
118
+ * Ties a resource to this page: `dispose` runs when it ends (the last owned first), or right away
119
+ * if it already has (a call that finished after its page left). Returns a function that forgets
120
+ * the resource without disposing it (it was closed on request).
121
+ */
122
+ own(dispose: () => unknown): () => void;
123
+ }
124
+
125
+ /** Initial window bounds from the launch phase. The shell drops a position that is on no display. */
126
+ export interface LaunchWindow {
127
+ x?: number;
128
+ y?: number;
129
+ width?: number;
130
+ height?: number;
131
+ maximized?: boolean;
132
+ }
133
+
134
+ /** What the launch phase decided; sent to the main thread with "ready". */
135
+ export interface Launch {
136
+ window: LaunchWindow;
137
+ exit?: number;
138
+ }
139
+
140
+ export interface NativeEvent {
141
+ type: string;
142
+ [key: string]: unknown;
143
+ }
144
+
145
+ type MethodImpl<F> = F extends (args: infer A) => Promise<infer R>
146
+ ? (args: A, ctx: DesktopContext) => R | Promise<R>
147
+ : F extends () => Promise<infer R>
148
+ ? (args: undefined, ctx: DesktopContext) => R | Promise<R>
149
+ : never;
150
+
151
+ export interface DesktopPlugin<Api = any, Events = any> {
152
+ id: string;
153
+ /**
154
+ * Runs once when the plugin host starts, before the window exists and before any page call
155
+ * (e.g. to catch launch events). May be async: the window waits for it (ctx.launch).
156
+ */
157
+ setup?(ctx: DesktopContext): void | Promise<void>;
158
+ /**
159
+ * "gate": this setup runs before every other one, one gate plugin after the other, and when one
160
+ * decides the launch exits (ctx.launch.exit, e.g. single-instance handing over to the running
161
+ * instance), the other setups do not run at all.
162
+ */
163
+ launchPhase?: "gate";
164
+ /** A window's page document ended (see DesktopContext.onDocumentEnd). */
165
+ onDocumentEnd?(doc: DocumentInfo, ctx: DesktopContext): void;
166
+ methods: { [K in keyof Api]?: MethodImpl<Api[K]> };
167
+ /**
168
+ * Event sources, started for the first $listen from any page and stopped after the last
169
+ * $unlisten. `emit` reaches the pages that listen (see EmitTarget) and returns their windows
170
+ * (typed `| void` so tests can pass a plain function).
171
+ */
172
+ events?: {
173
+ [E in keyof Events]?: (
174
+ emit: (data: Events[E], target?: EmitTarget) => number[] | void,
175
+ ctx: DesktopContext,
176
+ ) => () => void;
177
+ };
178
+ }
179
+
180
+ /**
181
+ * Plugins' external opens (opener, browser, auth-session, …) happen at most
182
+ * EXTERNAL_OPENS_PER_SECOND times a second, whichever plugin asks (L0; the shell limits the page's
183
+ * links the same way). false: refuse the open (NOT_ALLOWED).
184
+ */
185
+ let lastExternalOpen = -Infinity;
186
+ const linkClaimers = new Set<(url: string) => boolean>();
187
+
188
+ /**
189
+ * A plugin that answers some links itself (auth-session's sign-in callback, R10) takes them before
190
+ * the app plugin turns them into urlOpen. `claim` says whether a URL is its own; returns the removal.
191
+ */
192
+ export function claimLinks(claim: (url: string) => boolean): () => void {
193
+ linkClaimers.add(claim);
194
+ return () => linkClaimers.delete(claim);
195
+ }
196
+
197
+ /** Whether a plugin took this link (the app plugin then does not deliver it). */
198
+ export function linkClaimed(url: string): boolean {
199
+ for (const claim of linkClaimers) {
200
+ try {
201
+ if (claim(url)) return true;
202
+ } catch {
203
+ }
204
+ }
205
+ return false;
206
+ }
207
+
208
+ let limitOpens = true;
209
+ /** The shell's own counter (akan_native_external_open_allowed), which the page's links use too. */
210
+ let shellLimiter: (() => boolean) | null = null;
211
+ export function externalOpenAllowed(now = performance.now()): boolean {
212
+ if (!limitOpens) return true;
213
+ if (shellLimiter) return shellLimiter();
214
+ if (now - lastExternalOpen < 1000 / EXTERNAL_OPENS_PER_SECOND) return false;
215
+ lastExternalOpen = now;
216
+ return true;
217
+ }
218
+
219
+ /** The plugin host: plugins' opens share the shell's counter with the page's links. */
220
+ export function useShellOpenLimit(limiter: () => boolean): void {
221
+ shellLimiter = limiter;
222
+ }
223
+
224
+ /** Unit tests only: plugins' tests open many URLs in a row. */
225
+ export function limitExternalOpens(enabled: boolean): void {
226
+ limitOpens = enabled;
227
+ lastExternalOpen = -Infinity;
228
+ }
229
+
230
+ export function defineDesktopPlugin<Api, Events = {}>(plugin: DesktopPlugin<Api, Events>): DesktopPlugin<Api, Events> {
231
+ return plugin;
232
+ }
@@ -0,0 +1,23 @@
1
+
2
+
3
+ import * as React from "react";
4
+ import type { LiveValue, PluginHandle } from "../../core/src/index.ts";
5
+
6
+ /** Reads a LiveValue and re-renders when it changes. */
7
+ export function useLiveValue<T>(value: LiveValue<T>): T {
8
+ return React.useSyncExternalStore(value.subscribe, value.get, value.get);
9
+ }
10
+
11
+ /**
12
+ * Subscribes to a plugin event while the component is mounted (PL-6).
13
+ * The handler may change between renders without resubscribing.
14
+ */
15
+ export function usePluginEvent<Events, E extends keyof Events & string>(
16
+ plugin: PluginHandle<any, Events>,
17
+ event: E,
18
+ handler: (data: Events[E]) => void,
19
+ ): void {
20
+ const ref = React.useRef(handler);
21
+ ref.current = handler;
22
+ React.useEffect(() => plugin.listen(event, (data) => ref.current(data)), [plugin, event]);
23
+ }
@@ -0,0 +1,96 @@
1
+ package com.akanjs.plugins.accessibility
2
+
3
+ import android.content.res.Configuration
4
+ import android.database.ContentObserver
5
+ import android.net.Uri
6
+ import android.os.Handler
7
+ import android.os.Looper
8
+ import android.provider.Settings
9
+ import android.view.accessibility.AccessibilityManager
10
+ import com.akanjs.runtime.AkanNativePluginContext
11
+ import com.akanjs.runtime.AkanNativeReply
12
+
13
+ /**
14
+ * Screen reader, reduced motion and font scale, after
15
+ * react-native/packages/react-native/ReactAndroid/.../accessibilityinfo/AccessibilityInfoModule.kt:
16
+ * - screenReader: touch exploration (TalkBack and similar services), :94 and
17
+ * capacitor-plugins/screen-reader/android/.../ScreenReader.java:38-40, watched with a
18
+ * TouchExplorationStateChangeListener (:32-37).
19
+ * - reduceMotion: an animation scale of 0. RN reads TRANSITION_ANIMATION_SCALE and parses it with
20
+ * ',' as a possible decimal separator (:101-121); "Remove animations" sets it to "0", the
21
+ * developer option to "0.0". ANIMATOR_DURATION_SCALE at 0 counts as well: the framework then runs
22
+ * no animators (ValueAnimator.areAnimatorsEnabled() is false), the other half of "Remove
23
+ * animations". Both are watched with a ContentObserver (:49-61).
24
+ * - fontScale: Configuration.fontScale, changed through onConfigurationChanged (the shell handles
25
+ * fontScale without recreating the activity). Rounded to 3 places: the Float 1.15 would reach
26
+ * JSON as 1.149999976; capacitor-plugins/text-zoom/android/.../TextZoom.java:28-30 goes through
27
+ * Float.toString for the same reason.
28
+ * - RN unregisters in onHostPause and compares again on resume (:236-263); here the sources run
29
+ * while the page listens, so a change made in Settings arrives when the app comes back.
30
+ * announce runs in the page (a live region, src/announce.ts): View.announceForAccessibility and
31
+ * AccessibilityEvent.TYPE_ANNOUNCEMENT, which RN uses (:282-292), are deprecated in API 36.
32
+ * lynx/.../LynxAccessibilityModule.java:61-65 sets the view's accessibility pane title instead;
33
+ * that relabels the WebView and does not repeat an identical message, so it is not used.
34
+ * The state type comes from the generated AccessibilityPluginSpec (PL-10).
35
+ */
36
+ class AccessibilityPlugin(private val context: AkanNativePluginContext) : AccessibilityPluginSpec {
37
+ private val manager: AccessibilityManager? = context.activity.getSystemService(AccessibilityManager::class.java)
38
+ private val resolver = context.activity.contentResolver
39
+ private val events = AccessibilityEvents(context)
40
+ private var listening = false
41
+ private var last: AccessibilityState? = null
42
+
43
+ private val touchExploration = AccessibilityManager.TouchExplorationStateChangeListener { report() }
44
+ private val scales = object : ContentObserver(Handler(Looper.getMainLooper())) {
45
+ override fun onChange(selfChange: Boolean, uri: Uri?) = report()
46
+ }
47
+
48
+ override fun getState(reply: AkanNativeReply<AccessibilityState>) = reply.resolve(state())
49
+
50
+ override fun onConfigurationChanged(config: Configuration) = report()
51
+
52
+ override fun startListening(event: String) {
53
+ if (event != "change" || listening) return
54
+ listening = true
55
+ last = state()
56
+ manager?.addTouchExplorationStateChangeListener(touchExploration)
57
+ for (name in SCALES) resolver.registerContentObserver(Settings.Global.getUriFor(name), false, scales)
58
+ }
59
+
60
+ override fun stopListening(event: String) {
61
+ if (event == "change") stop()
62
+ }
63
+
64
+ override fun destroy() = stop()
65
+
66
+ private fun stop() {
67
+ if (!listening) return
68
+ listening = false
69
+ last = null
70
+ manager?.removeTouchExplorationStateChangeListener(touchExploration)
71
+ resolver.unregisterContentObserver(scales)
72
+ }
73
+
74
+ private fun report() {
75
+ if (!listening) return
76
+ val next = state()
77
+ if (next == last) return
78
+ last = next
79
+ events.change(next)
80
+ }
81
+
82
+ private fun state() = AccessibilityState(
83
+ screenReader = manager?.isTouchExplorationEnabled == true,
84
+ reduceMotion = SCALES.any { scaleIsZero(it) },
85
+ fontScale = Math.round(context.activity.resources.configuration.fontScale * 1000.0) / 1000.0,
86
+ )
87
+
88
+ private fun scaleIsZero(name: String): Boolean {
89
+ val raw = Settings.Global.getString(resolver, name) ?: return false
90
+ return raw.replace(',', '.').toFloatOrNull() == 0f
91
+ }
92
+
93
+ private companion object {
94
+ val SCALES = listOf(Settings.Global.TRANSITION_ANIMATION_SCALE, Settings.Global.ANIMATOR_DURATION_SCALE)
95
+ }
96
+ }