pythonnative 0.37.0__tar.gz → 0.39.0__tar.gz

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 (338) hide show
  1. {pythonnative-0.37.0/src/pythonnative.egg-info → pythonnative-0.39.0}/PKG-INFO +23 -13
  2. {pythonnative-0.37.0 → pythonnative-0.39.0}/README.md +19 -6
  3. {pythonnative-0.37.0 → pythonnative-0.39.0}/pyproject.toml +17 -18
  4. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/__init__.py +9 -1
  5. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/alerts.py +7 -15
  6. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/animated.py +1 -1
  7. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/bootstrap.py +15 -6
  8. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/bridge/__init__.py +16 -9
  9. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/bridge/codec.py +1 -1
  10. pythonnative-0.39.0/src/pythonnative/bridge/web.py +530 -0
  11. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/cli/pn.py +424 -339
  12. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/components/_base.py +31 -0
  13. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/components/controls.py +19 -16
  14. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/components/layout.py +5 -8
  15. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/components/lists.py +8 -8
  16. pythonnative-0.39.0/src/pythonnative/devclient.py +824 -0
  17. pythonnative-0.39.0/src/pythonnative/devserver/__init__.py +34 -0
  18. pythonnative-0.39.0/src/pythonnative/devserver/server.py +712 -0
  19. pythonnative-0.39.0/src/pythonnative/devserver/static/bridge.js +155 -0
  20. pythonnative-0.39.0/src/pythonnative/devserver/static/colors.js +70 -0
  21. pythonnative-0.39.0/src/pythonnative/devserver/static/host.js +577 -0
  22. pythonnative-0.39.0/src/pythonnative/devserver/static/index.html +60 -0
  23. pythonnative-0.39.0/src/pythonnative/devserver/static/preview.css +415 -0
  24. pythonnative-0.39.0/src/pythonnative/devserver/static/renderer.js +2037 -0
  25. pythonnative-0.39.0/src/pythonnative/devserver/static/shell.js +343 -0
  26. pythonnative-0.39.0/src/pythonnative/devserver/watcher.py +267 -0
  27. pythonnative-0.39.0/src/pythonnative/devserver/ws.py +421 -0
  28. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/gestures.py +31 -10
  29. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/hooks.py +2 -2
  30. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/hosts/__init__.py +20 -19
  31. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/hosts/base.py +35 -44
  32. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/hosts/native.py +4 -14
  33. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/hot_reload.py +205 -280
  34. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/images.py +2 -1
  35. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/native_modules/__init__.py +25 -4
  36. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/native_modules/battery.py +13 -14
  37. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/native_modules/biometrics.py +12 -14
  38. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/native_modules/camera.py +10 -6
  39. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/native_modules/clipboard.py +9 -11
  40. pythonnative-0.37.0/src/pythonnative/native_modules/desktop.py → pythonnative-0.39.0/src/pythonnative/native_modules/fallback.py +42 -40
  41. pythonnative-0.39.0/src/pythonnative/native_modules/file_system.py +145 -0
  42. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/native_modules/haptics.py +14 -10
  43. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/native_modules/linking.py +9 -8
  44. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/native_modules/location.py +10 -12
  45. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/native_modules/net_info.py +1 -4
  46. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/native_modules/notifications.py +26 -33
  47. pythonnative-0.39.0/src/pythonnative/native_modules/permissions.py +108 -0
  48. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/native_modules/registry.py +6 -6
  49. pythonnative-0.39.0/src/pythonnative/native_modules/secure_store.py +52 -0
  50. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/native_modules/share.py +5 -5
  51. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/native_views/__init__.py +18 -23
  52. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/native_views/base.py +1 -1
  53. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/native_views/bridge_backend.py +3 -2
  54. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/navigation/__init__.py +2 -1
  55. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/navigation/handle.py +1 -1
  56. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/navigation/hooks.py +46 -7
  57. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/navigation/screen.py +1 -1
  58. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/navigation/state.py +30 -9
  59. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/platform.py +21 -20
  60. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/platform_metrics.py +1 -1
  61. pythonnative-0.39.0/src/pythonnative/preview.py +302 -0
  62. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/project/android.py +36 -3
  63. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/project/builder.py +93 -39
  64. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/project/config.py +84 -24
  65. pythonnative-0.39.0/src/pythonnative/project/deps.py +703 -0
  66. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/project/doctor.py +51 -22
  67. pythonnative-0.39.0/src/pythonnative/project/fingerprint.py +170 -0
  68. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/project/ios.py +6 -0
  69. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/project/runtime_assets.py +13 -14
  70. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/reconciler/core.py +1 -1
  71. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/runtime.py +18 -42
  72. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/sdk/__init__.py +6 -6
  73. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/sdk/_components.py +12 -12
  74. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/storage.py +2 -2
  75. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/style.py +94 -44
  76. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/app/build.gradle +11 -2
  77. pythonnative-0.39.0/src/pythonnative/templates/android_template/app/src/debug/AndroidManifest.xml +7 -0
  78. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/app/src/main/java/com/pythonnative/android_template/MainActivity.kt +5 -2
  79. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/app/src/main/java/com/pythonnative/android_template/ScreenFragment.kt +0 -3
  80. pythonnative-0.39.0/src/pythonnative/templates/android_template/build.gradle +10 -0
  81. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/gradle/wrapper/gradle-wrapper.properties +1 -1
  82. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/modules/PermissionsModule.kt +15 -4
  83. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/screens/PNScreenFragment.kt +6 -41
  84. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Modules/HostModule.swift +0 -1
  85. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Modules/PermissionModules.swift +25 -10
  86. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Screens/PNViewController.swift +6 -22
  87. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/ios_template/PythonRuntime.swift +3 -2
  88. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/ios_template/ViewController.swift +1 -7
  89. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/ios_template.xcodeproj/project.pbxproj +35 -9
  90. pythonnative-0.39.0/src/pythonnative/utils.py +145 -0
  91. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/virtual_rows.py +10 -20
  92. {pythonnative-0.37.0 → pythonnative-0.39.0/src/pythonnative.egg-info}/PKG-INFO +23 -13
  93. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative.egg-info/SOURCES.txt +22 -5
  94. pythonnative-0.39.0/src/pythonnative.egg-info/requires.txt +4 -0
  95. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_animated_graph.py +2 -2
  96. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_appearance.py +21 -4
  97. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_bridge.py +18 -6
  98. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_cli.py +257 -61
  99. pythonnative-0.39.0/tests/test_devclient.py +333 -0
  100. pythonnative-0.39.0/tests/test_devserver.py +334 -0
  101. pythonnative-0.39.0/tests/test_devserver_ws.py +104 -0
  102. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_gestures.py +23 -2
  103. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_hosts.py +6 -5
  104. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_hot_reload.py +126 -169
  105. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_native_lists.py +2 -2
  106. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_native_modules.py +122 -17
  107. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_navigation.py +42 -1
  108. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_new_components.py +27 -14
  109. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_sdk.py +10 -10
  110. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_storage.py +3 -3
  111. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_style.py +17 -2
  112. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_utils.py +6 -3
  113. pythonnative-0.39.0/tests/test_web_transport.py +391 -0
  114. pythonnative-0.37.0/src/pythonnative/hosts/desktop.py +0 -107
  115. pythonnative-0.37.0/src/pythonnative/native_modules/file_system.py +0 -236
  116. pythonnative-0.37.0/src/pythonnative/native_modules/permissions.py +0 -60
  117. pythonnative-0.37.0/src/pythonnative/native_modules/secure_store.py +0 -56
  118. pythonnative-0.37.0/src/pythonnative/native_views/desktop.py +0 -2356
  119. pythonnative-0.37.0/src/pythonnative/preview.py +0 -540
  120. pythonnative-0.37.0/src/pythonnative/templates/android_template/build.gradle +0 -7
  121. pythonnative-0.37.0/src/pythonnative/utils.py +0 -142
  122. pythonnative-0.37.0/src/pythonnative.egg-info/requires.txt +0 -8
  123. pythonnative-0.37.0/tests/test_desktop_backend.py +0 -523
  124. {pythonnative-0.37.0 → pythonnative-0.39.0}/LICENSE +0 -0
  125. {pythonnative-0.37.0 → pythonnative-0.39.0}/setup.cfg +0 -0
  126. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/_ios_log.py +0 -0
  127. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/appearance.py +0 -0
  128. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/bridge/android.py +0 -0
  129. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/bridge/fake.py +0 -0
  130. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/bridge/ios.py +0 -0
  131. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/cli/__init__.py +0 -0
  132. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/component.py +0 -0
  133. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/components/__init__.py +0 -0
  134. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/components/media.py +0 -0
  135. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/components/overlays.py +0 -0
  136. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/components/pressable.py +0 -0
  137. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/components/structural.py +0 -0
  138. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/components/text.py +0 -0
  139. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/diagnostics.py +0 -0
  140. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/element.py +0 -0
  141. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/events.py +0 -0
  142. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/layout.py +0 -0
  143. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/mutations.py +0 -0
  144. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/native_modules/app_state.py +0 -0
  145. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/navigation/container.py +0 -0
  146. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/navigation/host.py +0 -0
  147. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/navigation/linking.py +0 -0
  148. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/navigation/navigators.py +0 -0
  149. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/net.py +0 -0
  150. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/project/__init__.py +0 -0
  151. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/project/devices.py +0 -0
  152. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/project/icons.py +0 -0
  153. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/project/permissions.py +0 -0
  154. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/project/plugins.py +0 -0
  155. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/py.typed +0 -0
  156. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/reconciler/__init__.py +0 -0
  157. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/reconciler/boundaries.py +0 -0
  158. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/reconciler/children.py +0 -0
  159. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/reconciler/layout_pass.py +0 -0
  160. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/reconciler/vnode.py +0 -0
  161. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/scheduler.py +0 -0
  162. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/suspense.py +0 -0
  163. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/app/proguard-rules.pro +0 -0
  164. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/app/src/androidTest/java/com/pythonnative/android_template/ExampleInstrumentedTest.kt +0 -0
  165. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/app/src/main/AndroidManifest.xml +0 -0
  166. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/app/src/main/res/drawable/ic_launcher_background.xml +0 -0
  167. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +0 -0
  168. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/app/src/main/res/layout/activity_main.xml +0 -0
  169. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +0 -0
  170. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +0 -0
  171. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-hdpi/ic_launcher.webp +0 -0
  172. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp +0 -0
  173. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-mdpi/ic_launcher.webp +0 -0
  174. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp +0 -0
  175. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xhdpi/ic_launcher.webp +0 -0
  176. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp +0 -0
  177. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp +0 -0
  178. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp +0 -0
  179. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp +0 -0
  180. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp +0 -0
  181. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/app/src/main/res/navigation/nav_graph.xml +0 -0
  182. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/app/src/main/res/values/colors.xml +0 -0
  183. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/app/src/main/res/values/strings.xml +0 -0
  184. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/app/src/main/res/values/themes.xml +0 -0
  185. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/app/src/main/res/values-night/themes.xml +0 -0
  186. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/app/src/main/res/xml/backup_rules.xml +0 -0
  187. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/app/src/main/res/xml/data_extraction_rules.xml +0 -0
  188. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/app/src/test/java/com/pythonnative/android_template/ExampleUnitTest.kt +0 -0
  189. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/gradle/wrapper/gradle-wrapper.jar +0 -0
  190. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/gradle.properties +0 -0
  191. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/gradlew +0 -0
  192. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/gradlew.bat +0 -0
  193. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/build.gradle +0 -0
  194. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/AndroidManifest.xml +0 -0
  195. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/PNBridge.kt +0 -0
  196. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/PythonHost.kt +0 -0
  197. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/animation/AnimationSpecs.kt +0 -0
  198. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/animation/PNAnimator.kt +0 -0
  199. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/bridge/JsonUtil.kt +0 -0
  200. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/bridge/MainThread.kt +0 -0
  201. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/bridge/PNLog.kt +0 -0
  202. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/bridge/PNRegistry.kt +0 -0
  203. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/bridge/PNTransaction.kt +0 -0
  204. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/bridge/TransactionApplier.kt +0 -0
  205. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/bridge/ViewRegistry.kt +0 -0
  206. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/components/BuiltinComponents.kt +0 -0
  207. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/components/ButtonManager.kt +0 -0
  208. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/components/ComponentManager.kt +0 -0
  209. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/components/ContainerManagers.kt +0 -0
  210. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/components/ControlManagers.kt +0 -0
  211. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/components/DatePickerManager.kt +0 -0
  212. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/components/ImageLoader.kt +0 -0
  213. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/components/ImageManager.kt +0 -0
  214. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/components/ModalManager.kt +0 -0
  215. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/components/PNColor.kt +0 -0
  216. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/components/PickerManager.kt +0 -0
  217. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/components/PortalManager.kt +0 -0
  218. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/components/PressableManager.kt +0 -0
  219. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/components/ScrollViewManager.kt +0 -0
  220. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/components/SegmentedControlManager.kt +0 -0
  221. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/components/StatusBarManager.kt +0 -0
  222. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/components/TabBarManager.kt +0 -0
  223. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/components/TextInputManager.kt +0 -0
  224. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/components/TextManager.kt +0 -0
  225. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/components/ViewStyler.kt +0 -0
  226. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/components/VirtualListManager.kt +0 -0
  227. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/components/WebViewManager.kt +0 -0
  228. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/gestures/GestureArbiter.kt +0 -0
  229. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/gestures/GestureCoordinator.kt +0 -0
  230. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/gestures/GestureRecognizers.kt +0 -0
  231. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/modules/BuiltinModules.kt +0 -0
  232. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/modules/DeviceModules.kt +0 -0
  233. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/modules/HostModule.kt +0 -0
  234. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/modules/MediaModules.kt +0 -0
  235. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/modules/NativeModule.kt +0 -0
  236. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/modules/NotificationsModule.kt +0 -0
  237. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/modules/StorageModules.kt +0 -0
  238. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/modules/SystemModules.kt +0 -0
  239. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/plugins/GeneratedPlugins.kt +0 -0
  240. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/screens/Navigator.kt +0 -0
  241. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/screens/ScreenRegistry.kt +0 -0
  242. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/views/PNAccessibilityDelegate.kt +0 -0
  243. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/views/PNBorderDrawable.kt +0 -0
  244. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/views/PNEditText.kt +0 -0
  245. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/views/PNFrameLayout.kt +0 -0
  246. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/main/java/com/pythonnative/runtime/views/PNVirtualListView.java +0 -0
  247. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/test/java/com/pythonnative/runtime/AnimationSpecsTest.kt +0 -0
  248. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/test/java/com/pythonnative/runtime/GestureArbiterTest.kt +0 -0
  249. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/test/java/com/pythonnative/runtime/PNColorTest.kt +0 -0
  250. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/test/java/com/pythonnative/runtime/PNTransactionTest.kt +0 -0
  251. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/pythonnative/src/test/java/com/pythonnative/runtime/PromiseTest.kt +0 -0
  252. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/android_template/settings.gradle +0 -0
  253. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Package.swift +0 -0
  254. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Animation/PNAnimator.swift +0 -0
  255. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Bridge/PNBridge.swift +0 -0
  256. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Bridge/PNRegistry.swift +0 -0
  257. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Bridge/PNTransaction.swift +0 -0
  258. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Bridge/PNViewRegistry.swift +0 -0
  259. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Components/PNButtonManagers.swift +0 -0
  260. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Components/PNColor.swift +0 -0
  261. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Components/PNComponentManager.swift +0 -0
  262. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Components/PNContainerView.swift +0 -0
  263. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Components/PNControlManagers.swift +0 -0
  264. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Components/PNImageManager.swift +0 -0
  265. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Components/PNOverlayManagers.swift +0 -0
  266. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Components/PNPressableManager.swift +0 -0
  267. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Components/PNScrollViewManager.swift +0 -0
  268. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Components/PNTabBarManager.swift +0 -0
  269. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Components/PNTextInputManager.swift +0 -0
  270. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Components/PNTextManager.swift +0 -0
  271. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Components/PNTransform.swift +0 -0
  272. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Components/PNViewManager.swift +0 -0
  273. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Components/PNViewState.swift +0 -0
  274. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Components/PNViewStyler.swift +0 -0
  275. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Components/PNVirtualListManager.swift +0 -0
  276. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Components/PNWebViewManager.swift +0 -0
  277. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Gestures/PNGestureCoordinator.swift +0 -0
  278. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Modules/AlertModule.swift +0 -0
  279. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Modules/LifecycleModules.swift +0 -0
  280. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Modules/MediaModules.swift +0 -0
  281. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Modules/PNNativeModule.swift +0 -0
  282. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Modules/SystemModules.swift +0 -0
  283. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Plugins/PNPluginRegistration.swift +0 -0
  284. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Screens/PNScreenRegistry.swift +0 -0
  285. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Support/PNCompat.swift +0 -0
  286. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Support/PNJSON.swift +0 -0
  287. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Support/PNLog.swift +0 -0
  288. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Sources/PythonNativeKit/Support/PNWindow.swift +0 -0
  289. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Tests/PythonNativeKitTests/PNColorTests.swift +0 -0
  290. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Tests/PythonNativeKitTests/PNGestureTests.swift +0 -0
  291. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Tests/PythonNativeKitTests/PNManagerTests.swift +0 -0
  292. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Tests/PythonNativeKitTests/PNModuleTests.swift +0 -0
  293. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/PythonNativeKit/Tests/PythonNativeKitTests/PNTransactionTests.swift +0 -0
  294. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/ios_template/AppDelegate.swift +0 -0
  295. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/ios_template/Assets.xcassets/AccentColor.colorset/Contents.json +0 -0
  296. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/ios_template/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -0
  297. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/ios_template/Assets.xcassets/Contents.json +0 -0
  298. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/ios_template/Base.lproj/LaunchScreen.storyboard +0 -0
  299. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/ios_template/BridgingHeader.h +0 -0
  300. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/ios_template/Info.plist +0 -0
  301. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/ios_template/SceneDelegate.swift +0 -0
  302. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/ios_template.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -0
  303. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/ios_templateTests/ios_templateTests.swift +0 -0
  304. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/ios_templateUITests/ios_templateUITests.swift +0 -0
  305. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/templates/ios_template/ios_templateUITests/ios_templateUITestsLaunchTests.swift +0 -0
  306. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/testing/__init__.py +0 -0
  307. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/testing/backend.py +0 -0
  308. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative/testing/harness.py +0 -0
  309. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative.egg-info/dependency_links.txt +0 -0
  310. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative.egg-info/entry_points.txt +0 -0
  311. {pythonnative-0.37.0 → pythonnative-0.39.0}/src/pythonnative.egg-info/top_level.txt +0 -0
  312. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_alert.py +0 -0
  313. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_animated.py +0 -0
  314. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_async_hooks.py +0 -0
  315. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_components.py +0 -0
  316. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_core_semantics.py +0 -0
  317. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_element.py +0 -0
  318. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_events.py +0 -0
  319. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_extended_components.py +0 -0
  320. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_gesture_composition.py +0 -0
  321. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_hooks.py +0 -0
  322. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_images.py +0 -0
  323. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_incremental_render.py +0 -0
  324. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_interaction_props.py +0 -0
  325. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_ios_log.py +0 -0
  326. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_layout.py +0 -0
  327. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_metric_hooks.py +0 -0
  328. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_mutations.py +0 -0
  329. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_native_views.py +0 -0
  330. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_net.py +0 -0
  331. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_platform.py +0 -0
  332. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_platform_metrics.py +0 -0
  333. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_reconciler.py +0 -0
  334. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_ref.py +0 -0
  335. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_runtime.py +0 -0
  336. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_smoke.py +0 -0
  337. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_suspense.py +0 -0
  338. {pythonnative-0.37.0 → pythonnative-0.39.0}/tests/test_transitions.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pythonnative
3
- Version: 0.37.0
3
+ Version: 0.39.0
4
4
  Summary: Cross-platform native UI toolkit for Android and iOS
5
5
  Author: Owen Carey
6
6
  License: MIT License
@@ -34,16 +34,13 @@ Classifier: Intended Audience :: Developers
34
34
  Classifier: License :: OSI Approved :: MIT License
35
35
  Classifier: Programming Language :: Python :: 3
36
36
  Classifier: Programming Language :: Python :: 3 :: Only
37
- Classifier: Programming Language :: Python :: 3.10
38
- Classifier: Programming Language :: Python :: 3.11
39
- Classifier: Programming Language :: Python :: 3.12
37
+ Classifier: Programming Language :: Python :: 3.13
38
+ Classifier: Programming Language :: Python :: 3.14
40
39
  Classifier: Topic :: Software Development :: User Interfaces
41
- Requires-Python: >=3.10
40
+ Requires-Python: >=3.13
42
41
  Description-Content-Type: text/markdown
43
42
  License-File: LICENSE
44
43
  Requires-Dist: requests>=2.31.0
45
- Requires-Dist: tomli>=2.0; python_version < "3.11"
46
- Requires-Dist: typing_extensions>=4.4; python_version < "3.11"
47
44
  Provides-Extra: build
48
45
  Requires-Dist: Pillow>=10.0; extra == "build"
49
46
  Dynamic: license-file
@@ -85,25 +82,28 @@ PythonNative is a cross-platform toolkit for building native Android and iOS app
85
82
  - **Device APIs:** Cross-platform modules for `Camera`, `Location`, `FileSystem`, `Notifications`, `Clipboard`, `Share`, `Linking`, `Permissions`, `AppState`, `NetInfo`, `SecureStore`, `Battery`, `Haptics` / `Vibration`, and `Biometrics`, plus reactive `use_app_state` and `use_net_info` hooks.
86
83
  - **Hooks and function components:** Manage state with `use_state`, side effects with `use_effect` / `use_layout_effect`, refs and imperative handles with `use_ref` / `use_imperative_handle`, and navigation with `use_navigation`, all through one consistent pattern. Components can return a single element, a list of siblings, or `None`, and `Fragment`, `Portal`, and reactive `Provider` context work the way they do in React.
87
84
  - **Async-first rendering:** One `asyncio` event loop runs the whole framework on the platform's main thread. Components can be `async def` and `await` data directly in the body; `Suspense` boundaries show declarative loading states while they wait. `use_resource` fetches during render, `use_effect` accepts coroutine callbacks (cancelled automatically on unmount), `lazy` code-splits components, and `use_transition` / `use_deferred_value` keep the UI responsive during expensive updates.
88
- - **Developer feedback that finds your bugs:** In dev mode (`pn preview`, hot reload, or `PN_DEV=1`), uncaught errors from renders, effects, and event handlers show a full-screen RedBox with the traceback; unknown style keys and duplicate list keys print "did you mean" warnings; and conditional hooks raise a `HookOrderError` at the source instead of silently cross-wiring state.
89
- - **Typed `style` prop:** Pass all visual and layout properties through a single `style` dict, fully described by the `pn.Style` `TypedDict` and the ergonomic `pn.style(...)` helper for IDE autocomplete and static checking. Compose reusable styles with `StyleSheet`.
85
+ - **Developer feedback that finds your bugs:** In dev mode (`pn start`, `pn preview`, debug builds from `pn run`, or `PN_DEV=1`), uncaught errors from renders, effects, and event handlers show a full-screen RedBox with the traceback; unknown style keys and duplicate list keys print "did you mean" warnings; and conditional hooks raise a `HookOrderError` at the source instead of silently cross-wiring state.
86
+ - **Typed `style` prop and theme:** Pass all visual and layout properties through a single `style` dict, fully described by the `pn.Style` `TypedDict` and the ergonomic `pn.style(...)` helper for IDE autocomplete and static checking. Compose reusable styles with `StyleSheet`, and read design tokens from a typed, immutable `pn.Theme` via `use_theme()` that follows light and dark mode by default.
90
87
  - **Cross-platform flexbox engine:** A pure-Python, Yoga-style layout engine computes frames once and applies them to native views, so `flex`, `padding`, `aspect_ratio`, and `position: "absolute"` produce the same geometry on Android and iOS.
91
88
  - **Virtual view tree + reconciler:** Element trees are diffed and patched with minimal native mutations, similar to React's reconciliation. Each commit lands as **one batched transaction** of mutation ops, and event callbacks are routed through a tag-based registry so re-renders that only change closures cost zero native calls. State updates re-render **locally**: only the component whose state changed (and its subtree) re-runs, and unchanged leaves reuse cached intrinsic measurements, so deep UIs stay responsive instead of re-rendering the whole app from the root on every tap.
92
89
  - **Native-driven animations:** The `Animated` API (timing / spring / decay / loop / stagger, awaitable or fire-and-forget) hands animations to Core Animation and `ViewPropertyAnimator` whenever possible, so no Python code runs per frame; a pure-Python ticker covers the rest. `interpolate`, arithmetic operators on animated nodes, `Animated.event` scroll binding, and `diff_clamp` cover the scroll-driven patterns (collapsing headers, parallax) that define native feel.
93
- - **Native gesture system:** Attach `Tap`, `LongPress`, `Pan`, `Swipe`, `Fling`, `Pinch`, and `Rotation` recognizers to any view via the `gestures=` prop, backed by `UIGestureRecognizer` on iOS and a unit-testable pure-Python arbiter on Android and desktop. Compose them with `Race`, `Exclusive`, and `Simultaneous` for cross-gesture arbitration (single vs. double tap, drag vs. long press).
90
+ - **Native gesture system:** Attach `Tap`, `LongPress`, `Pan`, `Swipe`, `Fling`, `Pinch`, and `Rotation` recognizers to any view via the `gestures=` prop, backed by `UIGestureRecognizer` on iOS and a unit-testable pure-Python arbiter on Android and in the browser preview. Compose them with `Race`, `Exclusive`, and `Simultaneous` for cross-gesture arbitration (single vs. double tap, drag vs. long press).
94
91
  - **Virtualized lists:** `FlatList` / `SectionList` window their rows in Python over the platform scroll view: uniform, exact, or measured variable heights, grids, headers/footers, infinite scroll, and an imperative scroll controller, identical on every platform.
95
92
  - **Native rendering core:** each commit is one serialized transaction applied by Swift and Kotlin component managers, the same shape as React Native's Fabric. Device APIs are native modules registered by name (TurboModules-style), callable from thin Python facades.
96
93
  - **Custom-component SDK:** Wrap any platform widget as a first-class element with type-checked props via `pythonnative.sdk` (`Props`, `@native_component`, `element_factory`). Plugins distributed on PyPI auto-register through the `pythonnative.handlers` entry-point group.
97
- - **CLI scaffolding:** `pn init` creates a ready-to-run project; `pn run android` and `pn run ios` build and launch your app.
98
- - **Instant desktop preview:** `pn preview` renders your app in a native desktop window via Tkinter with Fast Refresh on every save: iterate on layout, state, and navigation in milliseconds without booting a simulator or device. The reconciler, hooks, layout engine, and navigation are the same code that ships to the phone.
94
+ - **Metro-style dev loop:** `pn start` runs one dev server that serves the browser preview and every connected debug build. Save a file and each client Fast Refreshes in place, keeping component state; their `print` output and tracebacks stream back into the same terminal. `pn run android` / `pn run ios` bakes the server URL into a debug build and rebuilds the native project only when a native input actually changed, so relaunching after a Python edit takes seconds, not minutes.
95
+ - **PyPI packages, binary wheels included:** List requirements in `pythonnative.toml` and the CLI resolves them for the *device* (iOS wheels via PEP 730 and BeeWare's index, Android wheels via PEP 738 and Chaquopy), bundling numpy, Pillow, cryptography, and friends alongside pure-Python packages. `pn deps` reports what each target resolves to before you build, and a weekly-checked compatibility matrix keeps the docs honest.
96
+ - **Browser preview:** `pn preview` renders your app in a browser tab inside a phone frame (pick a device, rotate, toggle dark mode) with Fast Refresh on every save. The page is a bridge peer exactly like the Swift and Kotlin runtimes, so the reconciler, hooks, layout engine, navigation, and screen host are the same code that ships to the phone; only the leaf widgets are DOM elements.
99
97
  - **Native-backed navigation:** Declarative `Stack`, `Tab`, and `Drawer` navigators inspired by React Navigation. The root stack drives the platform's native navigation controller (`UINavigationController` on iOS, AndroidX Navigation Component on Android), so transitions, back gestures, and the hardware back button match what users expect; `use_back_handler` intercepts the back action when a screen needs to.
100
- - **Fast Refresh hot reload:** `pn run --hot-reload` watches `app/` and patches edits into the running app on save, preserving component state across most changes.
98
+ - **Dev client:** Build a shell app once with `pn run ios --dev-client` and point it at any project's dev server from a connect screen, the way Expo Go does; physical phones on the same Wi-Fi get the same Fast Refresh as simulators.
101
99
  - **Bundled templates:** Android Gradle and iOS Xcode templates are included, so scaffolding requires no network access.
102
100
 
103
101
  ## Quick Start
104
102
 
105
103
  ### Installation
106
104
 
105
+ Requires Python 3.13 or newer.
106
+
107
107
  ```bash
108
108
  pip install pythonnative
109
109
  ```
@@ -127,6 +127,16 @@ def App():
127
127
  )
128
128
  ```
129
129
 
130
+ ### Develop
131
+
132
+ ```bash
133
+ pn init my-app && cd my-app
134
+ pn preview # dev server + browser preview with Fast Refresh
135
+ pn run ios # in another terminal: debug build that connects to the same server
136
+ pn run android
137
+ pn build ios # standalone release artifacts
138
+ ```
139
+
130
140
  ## Documentation
131
141
 
132
142
  Visit [pythonnative.com](https://pythonnative.com/) for the full documentation, including getting started guides, platform-specific instructions for Android and iOS, API reference, and working examples.
@@ -35,25 +35,28 @@ PythonNative is a cross-platform toolkit for building native Android and iOS app
35
35
  - **Device APIs:** Cross-platform modules for `Camera`, `Location`, `FileSystem`, `Notifications`, `Clipboard`, `Share`, `Linking`, `Permissions`, `AppState`, `NetInfo`, `SecureStore`, `Battery`, `Haptics` / `Vibration`, and `Biometrics`, plus reactive `use_app_state` and `use_net_info` hooks.
36
36
  - **Hooks and function components:** Manage state with `use_state`, side effects with `use_effect` / `use_layout_effect`, refs and imperative handles with `use_ref` / `use_imperative_handle`, and navigation with `use_navigation`, all through one consistent pattern. Components can return a single element, a list of siblings, or `None`, and `Fragment`, `Portal`, and reactive `Provider` context work the way they do in React.
37
37
  - **Async-first rendering:** One `asyncio` event loop runs the whole framework on the platform's main thread. Components can be `async def` and `await` data directly in the body; `Suspense` boundaries show declarative loading states while they wait. `use_resource` fetches during render, `use_effect` accepts coroutine callbacks (cancelled automatically on unmount), `lazy` code-splits components, and `use_transition` / `use_deferred_value` keep the UI responsive during expensive updates.
38
- - **Developer feedback that finds your bugs:** In dev mode (`pn preview`, hot reload, or `PN_DEV=1`), uncaught errors from renders, effects, and event handlers show a full-screen RedBox with the traceback; unknown style keys and duplicate list keys print "did you mean" warnings; and conditional hooks raise a `HookOrderError` at the source instead of silently cross-wiring state.
39
- - **Typed `style` prop:** Pass all visual and layout properties through a single `style` dict, fully described by the `pn.Style` `TypedDict` and the ergonomic `pn.style(...)` helper for IDE autocomplete and static checking. Compose reusable styles with `StyleSheet`.
38
+ - **Developer feedback that finds your bugs:** In dev mode (`pn start`, `pn preview`, debug builds from `pn run`, or `PN_DEV=1`), uncaught errors from renders, effects, and event handlers show a full-screen RedBox with the traceback; unknown style keys and duplicate list keys print "did you mean" warnings; and conditional hooks raise a `HookOrderError` at the source instead of silently cross-wiring state.
39
+ - **Typed `style` prop and theme:** Pass all visual and layout properties through a single `style` dict, fully described by the `pn.Style` `TypedDict` and the ergonomic `pn.style(...)` helper for IDE autocomplete and static checking. Compose reusable styles with `StyleSheet`, and read design tokens from a typed, immutable `pn.Theme` via `use_theme()` that follows light and dark mode by default.
40
40
  - **Cross-platform flexbox engine:** A pure-Python, Yoga-style layout engine computes frames once and applies them to native views, so `flex`, `padding`, `aspect_ratio`, and `position: "absolute"` produce the same geometry on Android and iOS.
41
41
  - **Virtual view tree + reconciler:** Element trees are diffed and patched with minimal native mutations, similar to React's reconciliation. Each commit lands as **one batched transaction** of mutation ops, and event callbacks are routed through a tag-based registry so re-renders that only change closures cost zero native calls. State updates re-render **locally**: only the component whose state changed (and its subtree) re-runs, and unchanged leaves reuse cached intrinsic measurements, so deep UIs stay responsive instead of re-rendering the whole app from the root on every tap.
42
42
  - **Native-driven animations:** The `Animated` API (timing / spring / decay / loop / stagger, awaitable or fire-and-forget) hands animations to Core Animation and `ViewPropertyAnimator` whenever possible, so no Python code runs per frame; a pure-Python ticker covers the rest. `interpolate`, arithmetic operators on animated nodes, `Animated.event` scroll binding, and `diff_clamp` cover the scroll-driven patterns (collapsing headers, parallax) that define native feel.
43
- - **Native gesture system:** Attach `Tap`, `LongPress`, `Pan`, `Swipe`, `Fling`, `Pinch`, and `Rotation` recognizers to any view via the `gestures=` prop, backed by `UIGestureRecognizer` on iOS and a unit-testable pure-Python arbiter on Android and desktop. Compose them with `Race`, `Exclusive`, and `Simultaneous` for cross-gesture arbitration (single vs. double tap, drag vs. long press).
43
+ - **Native gesture system:** Attach `Tap`, `LongPress`, `Pan`, `Swipe`, `Fling`, `Pinch`, and `Rotation` recognizers to any view via the `gestures=` prop, backed by `UIGestureRecognizer` on iOS and a unit-testable pure-Python arbiter on Android and in the browser preview. Compose them with `Race`, `Exclusive`, and `Simultaneous` for cross-gesture arbitration (single vs. double tap, drag vs. long press).
44
44
  - **Virtualized lists:** `FlatList` / `SectionList` window their rows in Python over the platform scroll view: uniform, exact, or measured variable heights, grids, headers/footers, infinite scroll, and an imperative scroll controller, identical on every platform.
45
45
  - **Native rendering core:** each commit is one serialized transaction applied by Swift and Kotlin component managers, the same shape as React Native's Fabric. Device APIs are native modules registered by name (TurboModules-style), callable from thin Python facades.
46
46
  - **Custom-component SDK:** Wrap any platform widget as a first-class element with type-checked props via `pythonnative.sdk` (`Props`, `@native_component`, `element_factory`). Plugins distributed on PyPI auto-register through the `pythonnative.handlers` entry-point group.
47
- - **CLI scaffolding:** `pn init` creates a ready-to-run project; `pn run android` and `pn run ios` build and launch your app.
48
- - **Instant desktop preview:** `pn preview` renders your app in a native desktop window via Tkinter with Fast Refresh on every save: iterate on layout, state, and navigation in milliseconds without booting a simulator or device. The reconciler, hooks, layout engine, and navigation are the same code that ships to the phone.
47
+ - **Metro-style dev loop:** `pn start` runs one dev server that serves the browser preview and every connected debug build. Save a file and each client Fast Refreshes in place, keeping component state; their `print` output and tracebacks stream back into the same terminal. `pn run android` / `pn run ios` bakes the server URL into a debug build and rebuilds the native project only when a native input actually changed, so relaunching after a Python edit takes seconds, not minutes.
48
+ - **PyPI packages, binary wheels included:** List requirements in `pythonnative.toml` and the CLI resolves them for the *device* (iOS wheels via PEP 730 and BeeWare's index, Android wheels via PEP 738 and Chaquopy), bundling numpy, Pillow, cryptography, and friends alongside pure-Python packages. `pn deps` reports what each target resolves to before you build, and a weekly-checked compatibility matrix keeps the docs honest.
49
+ - **Browser preview:** `pn preview` renders your app in a browser tab inside a phone frame (pick a device, rotate, toggle dark mode) with Fast Refresh on every save. The page is a bridge peer exactly like the Swift and Kotlin runtimes, so the reconciler, hooks, layout engine, navigation, and screen host are the same code that ships to the phone; only the leaf widgets are DOM elements.
49
50
  - **Native-backed navigation:** Declarative `Stack`, `Tab`, and `Drawer` navigators inspired by React Navigation. The root stack drives the platform's native navigation controller (`UINavigationController` on iOS, AndroidX Navigation Component on Android), so transitions, back gestures, and the hardware back button match what users expect; `use_back_handler` intercepts the back action when a screen needs to.
50
- - **Fast Refresh hot reload:** `pn run --hot-reload` watches `app/` and patches edits into the running app on save, preserving component state across most changes.
51
+ - **Dev client:** Build a shell app once with `pn run ios --dev-client` and point it at any project's dev server from a connect screen, the way Expo Go does; physical phones on the same Wi-Fi get the same Fast Refresh as simulators.
51
52
  - **Bundled templates:** Android Gradle and iOS Xcode templates are included, so scaffolding requires no network access.
52
53
 
53
54
  ## Quick Start
54
55
 
55
56
  ### Installation
56
57
 
58
+ Requires Python 3.13 or newer.
59
+
57
60
  ```bash
58
61
  pip install pythonnative
59
62
  ```
@@ -77,6 +80,16 @@ def App():
77
80
  )
78
81
  ```
79
82
 
83
+ ### Develop
84
+
85
+ ```bash
86
+ pn init my-app && cd my-app
87
+ pn preview # dev server + browser preview with Fast Refresh
88
+ pn run ios # in another terminal: debug build that connects to the same server
89
+ pn run android
90
+ pn build ios # standalone release artifacts
91
+ ```
92
+
80
93
  ## Documentation
81
94
 
82
95
  Visit [pythonnative.com](https://pythonnative.com/) for the full documentation, including getting started guides, platform-specific instructions for Android and iOS, API reference, and working examples.
@@ -4,13 +4,17 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pythonnative"
7
- version = "0.37.0"
7
+ version = "0.39.0"
8
8
  description = "Cross-platform native UI toolkit for Android and iOS"
9
9
  authors = [
10
10
  { name = "Owen Carey" }
11
11
  ]
12
12
  readme = "README.md"
13
- requires-python = ">=3.10"
13
+ # The host interpreter must match the embedded runtime (app.python_version)
14
+ # for device builds, and the embedded runtimes are 3.13 and 3.14: CPython
15
+ # gained official iOS support (PEP 730) and Android support (PEP 738) in
16
+ # 3.13, which is what makes binary wheels from PyPI installable at all.
17
+ requires-python = ">=3.13"
14
18
  license = { file = "LICENSE" }
15
19
  classifiers = [
16
20
  "Development Status :: 2 - Pre-Alpha",
@@ -18,15 +22,12 @@ classifiers = [
18
22
  "License :: OSI Approved :: MIT License",
19
23
  "Programming Language :: Python :: 3",
20
24
  "Programming Language :: Python :: 3 :: Only",
21
- "Programming Language :: Python :: 3.10",
22
- "Programming Language :: Python :: 3.11",
23
- "Programming Language :: Python :: 3.12",
25
+ "Programming Language :: Python :: 3.13",
26
+ "Programming Language :: Python :: 3.14",
24
27
  "Topic :: Software Development :: User Interfaces",
25
28
  ]
26
29
  dependencies = [
27
30
  "requests>=2.31.0",
28
- "tomli>=2.0; python_version < '3.11'",
29
- "typing_extensions>=4.4; python_version < '3.11'",
30
31
  ]
31
32
 
32
33
  [project.optional-dependencies]
@@ -44,10 +45,10 @@ dev = [
44
45
  "pytest>=8.0",
45
46
  "pytest-asyncio>=0.23",
46
47
  "Pillow>=10.0",
47
- # `pn run ios` shells out to `sys.executable -m pip` to vendor the
48
- # app's [requirements].packages (project/builder.py), and the test
49
- # suite exercises that path. `uv sync` does not seed pip the way
50
- # `uv venv --seed` did.
48
+ # `pn deps` and `pn run ios` shell out to `sys.executable -m pip` to
49
+ # resolve and vendor the app's [requirements].packages for the device
50
+ # platform tags (project/deps.py), and the test suite exercises that
51
+ # path. `uv sync` does not seed pip the way `uv venv --seed` did.
51
52
  "pip>=24.0",
52
53
  ]
53
54
  docs = [
@@ -87,15 +88,17 @@ where = ["src"]
87
88
  [tool.setuptools]
88
89
  license-files = ["LICENSE*"]
89
90
 
90
- # Include template directories inside the package so importlib.resources can find them
91
+ # Include template directories and the browser preview's page assets inside
92
+ # the package so importlib.resources can find them
91
93
  [tool.setuptools.package-data]
92
94
  pythonnative = [
93
95
  "py.typed",
94
96
  "templates/**",
97
+ "devserver/static/*",
95
98
  ]
96
99
 
97
100
  [tool.ruff]
98
- target-version = "py39"
101
+ target-version = "py313"
99
102
  line-length = 120
100
103
  extend-exclude = [
101
104
  "templates",
@@ -126,7 +129,6 @@ ignore = ["D107", "D105", "D203", "D213"]
126
129
  # docstrings would only add boilerplate that repeats the ABC.
127
130
  "src/pythonnative/native_views/android.py" = ["D101", "D102"]
128
131
  "src/pythonnative/native_views/ios.py" = ["D101", "D102"]
129
- "src/pythonnative/native_views/desktop.py" = ["D101", "D102"]
130
132
  # ios.py embeds a LaunchScreen storyboard as an XML string literal whose
131
133
  # lines exceed the limit; the XML must stay on single lines for Xcode.
132
134
  "src/pythonnative/project/ios.py" = ["E501"]
@@ -136,10 +138,7 @@ convention = "google"
136
138
 
137
139
  [tool.black]
138
140
  line-length = 120
139
- target-version = ['py39']
140
-
141
- [tool.pytest.ini_options]
142
- asyncio_mode = "auto"
141
+ target-version = ['py313']
143
142
 
144
143
  # ── Semantic Release ────────────────────────────────────────────────
145
144
 
@@ -62,7 +62,7 @@ Example:
62
62
  ```
63
63
  """
64
64
 
65
- __version__ = "0.37.0"
65
+ __version__ = "0.39.0"
66
66
 
67
67
  from . import appearance, diagnostics, gestures, images, runtime, sdk
68
68
  from .alerts import Alert
@@ -190,6 +190,7 @@ from .style import (
190
190
  AutoCapitalize,
191
191
  Color,
192
192
  Dimension,
193
+ Display,
193
194
  EdgeInsets,
194
195
  FlexDirection,
195
196
  FlexWrap,
@@ -198,6 +199,7 @@ from .style import (
198
199
  KeyboardType,
199
200
  LayoutDirection,
200
201
  Overflow,
202
+ PointerEvents,
201
203
  Position,
202
204
  ReturnKeyType,
203
205
  ScaleType,
@@ -207,6 +209,8 @@ from .style import (
207
209
  StyleSheet,
208
210
  TextAlign,
209
211
  TextDecoration,
212
+ TextTransform,
213
+ Theme,
210
214
  ThemeContext,
211
215
  TransformSpec,
212
216
  default_theme,
@@ -314,6 +318,7 @@ __all__ = [
314
318
  "DEFAULT_DARK_THEME",
315
319
  "DEFAULT_LIGHT_THEME",
316
320
  "Dimension",
321
+ "Display",
317
322
  "EdgeInsets",
318
323
  "FlexDirection",
319
324
  "FlexWrap",
@@ -322,6 +327,7 @@ __all__ = [
322
327
  "KeyboardType",
323
328
  "LayoutDirection",
324
329
  "Overflow",
330
+ "PointerEvents",
325
331
  "Position",
326
332
  "ReturnKeyType",
327
333
  "ScaleType",
@@ -331,6 +337,8 @@ __all__ = [
331
337
  "StyleSheet",
332
338
  "TextAlign",
333
339
  "TextDecoration",
340
+ "TextTransform",
341
+ "Theme",
334
342
  "ThemeContext",
335
343
  "TransformSpec",
336
344
  "default_theme",
@@ -52,16 +52,13 @@ async def _present(
52
52
  "default"|"cancel"|"destructive"}`` dicts. The module resolves with
53
53
  the index the user picked, or ``-1`` if the dialog was dismissed
54
54
  without a selection. Off device the
55
- [`DesktopAlert`][pythonnative.native_modules.desktop.DesktopAlert]
55
+ [`FallbackAlert`][pythonnative.native_modules.fallback.FallbackAlert]
56
56
  implementation records the call and answers from the queue set by
57
57
  [`Alert.set_test_response`][pythonnative.alerts.Alert.set_test_response].
58
58
  """
59
- try:
60
- result = await native_module("Alert").call_async(
61
- "present", title=title, message=message, buttons=buttons, style=style
62
- )
63
- except Exception:
64
- return -1
59
+ result = await native_module("Alert").call_async(
60
+ "present", title=title, message=message, buttons=buttons, style=style
61
+ )
65
62
  try:
66
63
  return int(result)
67
64
  except (TypeError, ValueError):
@@ -135,14 +132,9 @@ class Alert:
135
132
  [`choose`][pythonnative.alerts.Alert.choose] and ``await``
136
133
  the result.
137
134
  """
138
- try:
139
- native_module("Alert").call(
140
- "show", title=title, message=message, buttons=[{"label": button, "style": "default"}], style="alert"
141
- )
142
- except Exception:
143
- from . import diagnostics
144
-
145
- diagnostics.swallowed("alerts.Alert.show")
135
+ native_module("Alert").call(
136
+ "show", title=title, message=message, buttons=[{"label": button, "style": "default"}], style="alert"
137
+ )
146
138
 
147
139
  @staticmethod
148
140
  async def confirm(
@@ -40,7 +40,7 @@ native view the value is attached to
40
40
  callback when the animation settles, updates the
41
41
  [`AnimatedValue`][pythonnative.animated.AnimatedValue], and resolves
42
42
  any awaiting tasks.
43
- - **Declined** (desktop preview, unattached values, callable easings,
43
+ - **Declined** (unattached values, callable easings,
44
44
  values feeding Python-side listeners or derived nodes): a single
45
45
  background thread ticks the animation at ~60 Hz from Python, pushing
46
46
  each frame through ``set_animated_property``. Semantics are
@@ -8,9 +8,10 @@ import pythonnative.bootstrap; pythonnative.bootstrap.start()
8
8
 
9
9
  [`start`][pythonnative.bootstrap.start] connects the two halves of the
10
10
  bridge (installing the native -> Python callback on iOS), verifies the
11
- protocol version, routes ``print()`` to the console on iOS, and warms
12
- the asyncio runtime. From then on the native runtime drives everything
13
- through ``callback("host", ...)``; see ``docs/concepts/bridge.md``.
11
+ protocol version, routes ``print()`` to the console on iOS, warms the
12
+ asyncio runtime, and, in debug builds, starts the dev client that syncs
13
+ sources from ``pn start``. From then on the native runtime drives
14
+ everything through ``callback("host", ...)``; see ``docs/concepts/bridge.md``.
14
15
  """
15
16
 
16
17
  from __future__ import annotations
@@ -29,8 +30,8 @@ def start(dev: bool = False, strict: bool = False) -> Dict[str, Any]:
29
30
  """Connect the bridge and prepare the runtime.
30
31
 
31
32
  Args:
32
- dev: Enable dev mode (RedBox, validation warnings). Debug
33
- templates pass ``True``; hot reload turns it on as well.
33
+ dev: Enable dev mode (RedBox, validation warnings, the dev
34
+ client). Debug templates pass ``True``.
34
35
  strict: Re-raise the failure after recording it. The templates
35
36
  pass ``True`` so a broken bridge surfaces as a bootstrap
36
37
  error screen with the full traceback.
@@ -59,7 +60,8 @@ def start(dev: bool = False, strict: bool = False) -> Dict[str, Any]:
59
60
  from . import bridge
60
61
 
61
62
  status_["protocol"] = bridge.handshake()
62
- if dev or os.environ.get("PN_DEV") in ("1", "true"):
63
+ dev_mode = bool(dev or os.environ.get("PN_DEV") in ("1", "true"))
64
+ if dev_mode:
63
65
  from . import diagnostics
64
66
 
65
67
  diagnostics.set_dev_mode(True)
@@ -73,6 +75,13 @@ def start(dev: bool = False, strict: bool = False) -> Dict[str, Any]:
73
75
  from .native_views import get_registry
74
76
 
75
77
  get_registry()
78
+ if dev_mode:
79
+ # Debug builds are dev clients: connect to `pn start` when
80
+ # the build (or a remembered connection) names a server.
81
+ from . import devclient
82
+
83
+ client = devclient.start_if_configured()
84
+ status_["dev_server"] = client.url if client is not None else None
76
85
  except Exception as exc:
77
86
  status_["error"] = f"{type(exc).__name__}: {exc}"
78
87
  print(f"[pn.bootstrap] start failed: {exc!r}", file=sys.stderr)
@@ -7,11 +7,13 @@ Everything that crosses into native code goes through a
7
7
  [`native_callback`][pythonnative.bridge.native_callback]. The protocol
8
8
  is documented in ``docs/concepts/bridge.md``.
9
9
 
10
- Off-device (tests, ``pn preview``) there is no transport; the desktop
11
- registry renders with Tkinter and native modules fall back to their
12
- Python implementations. Tests that want to exercise the bridge itself
13
- install a [`FakeTransport`][pythonnative.bridge.fake.FakeTransport]
14
- with [`set_transport`][pythonnative.bridge.set_transport].
10
+ Under ``pn preview`` the native side is a browser page, reached through
11
+ [`WebTransport`][pythonnative.bridge.web.WebTransport]; the preview
12
+ installs it with [`set_transport`][pythonnative.bridge.set_transport]
13
+ before any screen mounts. In headless tests there is no transport at
14
+ all: native modules fall back to their Python implementations, and
15
+ tests that want to exercise the bridge itself install a
16
+ [`FakeTransport`][pythonnative.bridge.fake.FakeTransport].
15
17
  """
16
18
 
17
19
  from __future__ import annotations
@@ -74,7 +76,7 @@ _explicit = False
74
76
 
75
77
 
76
78
  def _create_platform_transport() -> Optional[Transport]:
77
- from ..utils import IS_ANDROID, IS_IOS
79
+ from ..utils import IS_ANDROID, IS_IOS, IS_WEB
78
80
 
79
81
  if IS_IOS:
80
82
  from .ios import IOSTransport
@@ -86,6 +88,11 @@ def _create_platform_transport() -> Optional[Transport]:
86
88
  from .android import AndroidTransport
87
89
 
88
90
  return AndroidTransport()
91
+ if IS_WEB:
92
+ raise RuntimeError(
93
+ "PN_PLATFORM=web is set but no browser preview transport is installed. "
94
+ "Start the app with `pn preview` (or `pn start`), which installs the WebTransport."
95
+ )
89
96
  return None
90
97
 
91
98
 
@@ -104,7 +111,7 @@ def get_transport() -> Transport:
104
111
  if created is None:
105
112
  raise RuntimeError(
106
113
  "No native bridge is available on this platform (running off-device). "
107
- "Use `pn preview` for the desktop renderer or install a FakeTransport in tests."
114
+ "Use `pn preview` for the browser renderer or install a FakeTransport in tests."
108
115
  )
109
116
  _transport = created
110
117
  return _transport
@@ -116,9 +123,9 @@ def has_transport() -> bool:
116
123
  return True
117
124
  if _explicit:
118
125
  return False
119
- from ..utils import IS_ANDROID, IS_IOS
126
+ from ..utils import IS_ANDROID, IS_IOS, IS_WEB
120
127
 
121
- return bool(IS_IOS or IS_ANDROID)
128
+ return bool(IS_IOS or IS_ANDROID or IS_WEB)
122
129
 
123
130
 
124
131
  def set_transport(transport: Optional[Transport]) -> None:
@@ -104,7 +104,7 @@ def encode_transaction(
104
104
 
105
105
  Args:
106
106
  ops: Ordered mutations from the reconciler.
107
- prop_filter: Unused hook kept for symmetry with the desktop
107
+ prop_filter: Unused hook kept for symmetry with the test
108
108
  registry; reserved for per-type prop rewriting.
109
109
 
110
110
  Returns: