pythonnative 0.52.0__tar.gz → 0.52.1__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 (616) hide show
  1. {pythonnative-0.52.0/src/pythonnative.egg-info → pythonnative-0.52.1}/PKG-INFO +1 -1
  2. {pythonnative-0.52.0 → pythonnative-0.52.1}/pyproject.toml +1 -1
  3. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/__init__.py +1 -1
  4. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/navigation/linking.py +47 -2
  5. {pythonnative-0.52.0 → pythonnative-0.52.1/src/pythonnative.egg-info}/PKG-INFO +1 -1
  6. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_navigation.py +202 -0
  7. {pythonnative-0.52.0 → pythonnative-0.52.1}/.github/workflows/release.yml +0 -0
  8. {pythonnative-0.52.0 → pythonnative-0.52.1}/LICENSE +0 -0
  9. {pythonnative-0.52.0 → pythonnative-0.52.1}/MANIFEST.in +0 -0
  10. {pythonnative-0.52.0 → pythonnative-0.52.1}/README.md +0 -0
  11. {pythonnative-0.52.0 → pythonnative-0.52.1}/scripts/check-distributions.py +0 -0
  12. {pythonnative-0.52.0 → pythonnative-0.52.1}/scripts/cibuildwheel.toml +0 -0
  13. {pythonnative-0.52.0 → pythonnative-0.52.1}/scripts/release-assets.py +0 -0
  14. {pythonnative-0.52.0 → pythonnative-0.52.1}/setup.cfg +0 -0
  15. {pythonnative-0.52.0 → pythonnative-0.52.1}/setup.py +0 -0
  16. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/_ios_log.py +0 -0
  17. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/alerts.py +0 -0
  18. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/animated.py +0 -0
  19. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/animation_graph.py +0 -0
  20. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/appearance.py +0 -0
  21. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/assets/__init__.py +0 -0
  22. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/assets/fonts.py +0 -0
  23. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/bootstrap.py +0 -0
  24. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/bridge/__init__.py +0 -0
  25. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/bridge/android.py +0 -0
  26. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/bridge/codec.py +0 -0
  27. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/bridge/core.py +0 -0
  28. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/bridge/fake.py +0 -0
  29. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/bridge/ios.py +0 -0
  30. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/bridge/web.py +0 -0
  31. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/cli/__init__.py +0 -0
  32. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/cli/keys.py +0 -0
  33. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/cli/launch.py +0 -0
  34. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/cli/pn.py +0 -0
  35. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/component.py +0 -0
  36. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/components/__init__.py +0 -0
  37. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/components/_base.py +0 -0
  38. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/components/controls.py +0 -0
  39. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/components/events.py +0 -0
  40. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/components/graphics.py +0 -0
  41. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/components/layout.py +0 -0
  42. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/components/lists.py +0 -0
  43. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/components/media.py +0 -0
  44. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/components/overlays.py +0 -0
  45. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/components/pressable.py +0 -0
  46. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/components/props.py +0 -0
  47. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/components/structural.py +0 -0
  48. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/components/text.py +0 -0
  49. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devclient.py +0 -0
  50. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devserver/__init__.py +0 -0
  51. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devserver/auth.py +0 -0
  52. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devserver/compat.py +0 -0
  53. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devserver/editor.py +0 -0
  54. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devserver/hub.py +0 -0
  55. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devserver/packages.py +0 -0
  56. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devserver/qr.py +0 -0
  57. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devserver/server.py +0 -0
  58. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devserver/static/assets.js +0 -0
  59. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devserver/static/bridge.js +0 -0
  60. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devserver/static/colors.js +0 -0
  61. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devserver/static/core/mount.js +0 -0
  62. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devserver/static/core/pn_core.js +0 -0
  63. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devserver/static/core/pn_core.wasm +0 -0
  64. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devserver/static/devsupport.js +0 -0
  65. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devserver/static/devtools/connection.js +0 -0
  66. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devserver/static/devtools/devtools.css +0 -0
  67. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devserver/static/devtools/devtools.js +0 -0
  68. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devserver/static/devtools/index.html +0 -0
  69. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devserver/static/devtools/panels/components.js +0 -0
  70. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devserver/static/devtools/panels/connect.js +0 -0
  71. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devserver/static/devtools/panels/console.js +0 -0
  72. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devserver/static/devtools/panels/network.js +0 -0
  73. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devserver/static/devtools/panels/panel.js +0 -0
  74. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devserver/static/devtools/panels/performance.js +0 -0
  75. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devserver/static/devtools/panels/problems.js +0 -0
  76. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devserver/static/devtools/report.js +0 -0
  77. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devserver/static/devtools/tree.js +0 -0
  78. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devserver/static/devtools/util.js +0 -0
  79. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devserver/static/devtools/values.js +0 -0
  80. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devserver/static/host.js +0 -0
  81. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devserver/static/index.html +0 -0
  82. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devserver/static/preview.css +0 -0
  83. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devserver/static/renderer.js +0 -0
  84. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devserver/static/shell.js +0 -0
  85. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devserver/watcher.py +0 -0
  86. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devserver/ws.py +0 -0
  87. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devtools/__init__.py +0 -0
  88. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devtools/agent.py +0 -0
  89. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devtools/console.py +0 -0
  90. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devtools/debugger.py +0 -0
  91. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devtools/inspector.py +0 -0
  92. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/devtools/perf.py +0 -0
  93. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/diagnostics.py +0 -0
  94. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/element.py +0 -0
  95. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/equality.py +0 -0
  96. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/errors.py +0 -0
  97. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/events.py +0 -0
  98. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/gestures.py +0 -0
  99. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/handles.py +0 -0
  100. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/hooks.py +0 -0
  101. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/hosts/__init__.py +0 -0
  102. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/hosts/base.py +0 -0
  103. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/hosts/native.py +0 -0
  104. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/hot_reload.py +0 -0
  105. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/icons/LICENSE-lucide.txt +0 -0
  106. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/icons/__init__.py +0 -0
  107. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/icons/_lucide.json +0 -0
  108. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/icons/_names.py +0 -0
  109. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/journal.py +0 -0
  110. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/lint.py +0 -0
  111. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/list_data.py +0 -0
  112. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/mutations.py +0 -0
  113. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/build.gradle +0 -0
  114. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/gradle.properties +0 -0
  115. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/settings.gradle +0 -0
  116. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/AndroidManifest.xml +0 -0
  117. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/cpp/CMakeLists.txt +0 -0
  118. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/cpp/pncore_jni.cpp +0 -0
  119. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/generated/NativeModules.kt +0 -0
  120. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/generated/NativeProps.kt +0 -0
  121. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/generated/NativeValues.kt +0 -0
  122. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/generated/PNContracts.kt +0 -0
  123. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/PNBridge.kt +0 -0
  124. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/PythonHost.kt +0 -0
  125. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/FrameClock.kt +0 -0
  126. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/PNAnimator.kt +0 -0
  127. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/assets/PNAssets.kt +0 -0
  128. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/JsonUtil.kt +0 -0
  129. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/MainThread.kt +0 -0
  130. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNLog.kt +0 -0
  131. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNRegistry.kt +0 -0
  132. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/ViewRegistry.kt +0 -0
  133. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/BuiltinComponents.kt +0 -0
  134. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ButtonManager.kt +0 -0
  135. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ComponentManager.kt +0 -0
  136. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ContainerManagers.kt +0 -0
  137. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ControlManagers.kt +0 -0
  138. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/DatePickerManager.kt +0 -0
  139. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/EffectManagers.kt +0 -0
  140. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ImageLoader.kt +0 -0
  141. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ImageManager.kt +0 -0
  142. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ModalManager.kt +0 -0
  143. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PNColor.kt +0 -0
  144. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PNTheme.kt +0 -0
  145. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PickerManager.kt +0 -0
  146. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PortalManager.kt +0 -0
  147. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PressableManager.kt +0 -0
  148. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ScreenStackManager.kt +0 -0
  149. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ScreenTransitions.kt +0 -0
  150. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ScrollViewManager.kt +0 -0
  151. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/SegmentedControlManager.kt +0 -0
  152. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/StatusBarManager.kt +0 -0
  153. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/SvgManager.kt +0 -0
  154. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TabBarManager.kt +0 -0
  155. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TextInputManager.kt +0 -0
  156. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TextManager.kt +0 -0
  157. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ViewStyler.kt +0 -0
  158. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/VirtualListManager.kt +0 -0
  159. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/WebViewManager.kt +0 -0
  160. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/core/PNCore.kt +0 -0
  161. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/TouchForwarder.kt +0 -0
  162. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/graphics/SvgPath.kt +0 -0
  163. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/layout/Measurement.kt +0 -0
  164. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/AssetModules.kt +0 -0
  165. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/BuiltinModules.kt +0 -0
  166. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/DevSupportModule.kt +0 -0
  167. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/DeviceModules.kt +0 -0
  168. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/ErrorOverlay.kt +0 -0
  169. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/HostModule.kt +0 -0
  170. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/MediaModules.kt +0 -0
  171. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/NativeModule.kt +0 -0
  172. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/NotificationsModule.kt +0 -0
  173. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/PermissionsModule.kt +0 -0
  174. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/PlatformModules.kt +0 -0
  175. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/StorageModules.kt +0 -0
  176. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/SystemModules.kt +0 -0
  177. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/mount/MountDecoder.kt +0 -0
  178. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/mount/Mounter.kt +0 -0
  179. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/plugins/GeneratedPlugins.kt +0 -0
  180. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/screens/PNKeyboard.kt +0 -0
  181. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/screens/PNScreenFragment.kt +0 -0
  182. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/screens/ScreenRegistry.kt +0 -0
  183. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/text/PNTextLayout.kt +0 -0
  184. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNAccessibilityDelegate.kt +0 -0
  185. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNBorderDrawable.kt +0 -0
  186. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNEditText.kt +0 -0
  187. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNFrameLayout.kt +0 -0
  188. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNScrollViews.kt +0 -0
  189. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/res/anim/pn_fade_in.xml +0 -0
  190. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/res/anim/pn_fade_out.xml +0 -0
  191. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/res/anim/pn_hold.xml +0 -0
  192. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/res/anim/pn_slide_in_bottom.xml +0 -0
  193. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/res/anim/pn_slide_in_left.xml +0 -0
  194. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/res/anim/pn_slide_in_right.xml +0 -0
  195. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/res/anim/pn_slide_out_bottom.xml +0 -0
  196. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/res/anim/pn_slide_out_left.xml +0 -0
  197. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/res/anim/pn_slide_out_right.xml +0 -0
  198. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/res/drawable/pn_ic_arrow_back.xml +0 -0
  199. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/res/values/pn_ids.xml +0 -0
  200. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/main/res/xml/pn_file_paths.xml +0 -0
  201. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/test/java/com/pythonnative/generated/PNRecordFixtures.kt +0 -0
  202. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/AssetsAndSvgTest.kt +0 -0
  203. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/DevSupportRobolectricTest.kt +0 -0
  204. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/MountDecoderTest.kt +0 -0
  205. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/NativeLifecycleTest.kt +0 -0
  206. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/PNColorTest.kt +0 -0
  207. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/PromiseTest.kt +0 -0
  208. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/RoundOneRobolectricTest.kt +0 -0
  209. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/RoundTwoLogicTest.kt +0 -0
  210. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/RoundTwoRobolectricTest.kt +0 -0
  211. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/ScreenTransitionsTest.kt +0 -0
  212. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/StyleAccessibilityDeviceTest.kt +0 -0
  213. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/CMakeLists.txt +0 -0
  214. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/Package.swift +0 -0
  215. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/include/module.modulemap +0 -0
  216. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/include/pn_core.h +0 -0
  217. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/python.cpp +0 -0
  218. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/src/animation.cpp +0 -0
  219. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/src/animation.h +0 -0
  220. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/src/contracts.cpp +0 -0
  221. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/src/contracts.h +0 -0
  222. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/src/core.cpp +0 -0
  223. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/src/core.h +0 -0
  224. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/src/gestures.cpp +0 -0
  225. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/src/gestures.h +0 -0
  226. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/src/lists.cpp +0 -0
  227. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/src/lists.h +0 -0
  228. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/src/mount.cpp +0 -0
  229. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/src/mount.h +0 -0
  230. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/src/shadow.cpp +0 -0
  231. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/src/shadow.h +0 -0
  232. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/src/style.cpp +0 -0
  233. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/src/style.h +0 -0
  234. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/src/value.cpp +0 -0
  235. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/src/value.h +0 -0
  236. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/CMakeLists.txt +0 -0
  237. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/LICENSE +0 -0
  238. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/VENDORED.md +0 -0
  239. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/YGConfig.cpp +0 -0
  240. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/YGConfig.h +0 -0
  241. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/YGEnums.cpp +0 -0
  242. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/YGEnums.h +0 -0
  243. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/YGMacros.h +0 -0
  244. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/YGNode.cpp +0 -0
  245. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/YGNode.h +0 -0
  246. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/YGNodeLayout.cpp +0 -0
  247. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/YGNodeLayout.h +0 -0
  248. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/YGNodeStyle.cpp +0 -0
  249. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/YGNodeStyle.h +0 -0
  250. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/YGPixelGrid.cpp +0 -0
  251. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/YGPixelGrid.h +0 -0
  252. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/YGValue.cpp +0 -0
  253. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/YGValue.h +0 -0
  254. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/Yoga.h +0 -0
  255. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/algorithm/AbsoluteLayout.cpp +0 -0
  256. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/algorithm/AbsoluteLayout.h +0 -0
  257. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/algorithm/Align.h +0 -0
  258. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/algorithm/Baseline.cpp +0 -0
  259. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/algorithm/Baseline.h +0 -0
  260. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/algorithm/BoundAxis.h +0 -0
  261. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/algorithm/Cache.cpp +0 -0
  262. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/algorithm/Cache.h +0 -0
  263. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/algorithm/CalculateLayout.cpp +0 -0
  264. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/algorithm/CalculateLayout.h +0 -0
  265. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/algorithm/FlexDirection.h +0 -0
  266. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/algorithm/FlexLine.cpp +0 -0
  267. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/algorithm/FlexLine.h +0 -0
  268. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/algorithm/PixelGrid.cpp +0 -0
  269. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/algorithm/PixelGrid.h +0 -0
  270. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/algorithm/SizingMode.h +0 -0
  271. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/algorithm/TrailingPosition.h +0 -0
  272. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/config/Config.cpp +0 -0
  273. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/config/Config.h +0 -0
  274. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/debug/AssertFatal.cpp +0 -0
  275. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/debug/AssertFatal.h +0 -0
  276. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/debug/Log.cpp +0 -0
  277. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/debug/Log.h +0 -0
  278. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/enums/Align.h +0 -0
  279. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/enums/BoxSizing.h +0 -0
  280. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/enums/Dimension.h +0 -0
  281. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/enums/Direction.h +0 -0
  282. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/enums/Display.h +0 -0
  283. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/enums/Edge.h +0 -0
  284. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/enums/Errata.h +0 -0
  285. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/enums/ExperimentalFeature.h +0 -0
  286. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/enums/FlexDirection.h +0 -0
  287. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/enums/Gutter.h +0 -0
  288. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/enums/Justify.h +0 -0
  289. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/enums/LogLevel.h +0 -0
  290. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/enums/MeasureMode.h +0 -0
  291. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/enums/NodeType.h +0 -0
  292. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/enums/Overflow.h +0 -0
  293. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/enums/PhysicalEdge.h +0 -0
  294. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/enums/PositionType.h +0 -0
  295. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/enums/Unit.h +0 -0
  296. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/enums/Wrap.h +0 -0
  297. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/enums/YogaEnums.h +0 -0
  298. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/event/event.cpp +0 -0
  299. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/event/event.h +0 -0
  300. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/module.modulemap +0 -0
  301. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/node/CachedMeasurement.h +0 -0
  302. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/node/LayoutResults.cpp +0 -0
  303. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/node/LayoutResults.h +0 -0
  304. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/node/LayoutableChildren.h +0 -0
  305. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/node/Node.cpp +0 -0
  306. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/node/Node.h +0 -0
  307. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/numeric/Comparison.h +0 -0
  308. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/numeric/FloatOptional.h +0 -0
  309. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/style/SmallValueBuffer.h +0 -0
  310. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/style/Style.h +0 -0
  311. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/style/StyleLength.h +0 -0
  312. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/style/StyleValueHandle.h +0 -0
  313. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/core/yoga/style/StyleValuePool.h +0 -0
  314. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Package.swift +0 -0
  315. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Animation/PNAnimator.swift +0 -0
  316. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNBridge.swift +0 -0
  317. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNCoreBridge.swift +0 -0
  318. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNRegistry.swift +0 -0
  319. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNViewRegistry.swift +0 -0
  320. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNButtonManagers.swift +0 -0
  321. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNColor.swift +0 -0
  322. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNComponentManager.swift +0 -0
  323. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNContainerView.swift +0 -0
  324. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNControlManagers.swift +0 -0
  325. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNEffectManagers.swift +0 -0
  326. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNImageManager.swift +0 -0
  327. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNOverlayManagers.swift +0 -0
  328. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNPressableManager.swift +0 -0
  329. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNScreenStackManager.swift +0 -0
  330. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNScrollViewManager.swift +0 -0
  331. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNSvgManager.swift +0 -0
  332. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTabBarManager.swift +0 -0
  333. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTextInputManager.swift +0 -0
  334. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTextManager.swift +0 -0
  335. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTransform.swift +0 -0
  336. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewManager.swift +0 -0
  337. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewState.swift +0 -0
  338. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewStyler.swift +0 -0
  339. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNVirtualListManager.swift +0 -0
  340. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNWebViewManager.swift +0 -0
  341. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Generated/NativeModules.swift +0 -0
  342. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Generated/NativeProps.swift +0 -0
  343. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Generated/NativeValues.swift +0 -0
  344. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Generated/PNContracts.swift +0 -0
  345. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Gestures/PNGestureCoordinator.swift +0 -0
  346. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/AlertModule.swift +0 -0
  347. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/DevSupportModule.swift +0 -0
  348. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/EnvironmentModules.swift +0 -0
  349. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/HostModule.swift +0 -0
  350. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/ImagesModule.swift +0 -0
  351. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/LifecycleModules.swift +0 -0
  352. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/MediaModules.swift +0 -0
  353. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/PNErrorOverlay.swift +0 -0
  354. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/PNNativeModule.swift +0 -0
  355. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/PermissionModules.swift +0 -0
  356. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/SystemModules.swift +0 -0
  357. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Mount/PNMountDecoder.swift +0 -0
  358. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Mount/PNMounter.swift +0 -0
  359. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Plugins/PNPluginRegistration.swift +0 -0
  360. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Resources/PrivacyInfo.xcprivacy +0 -0
  361. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Screens/PNScreenRegistry.swift +0 -0
  362. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Screens/PNViewController.swift +0 -0
  363. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNAssets.swift +0 -0
  364. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNCompat.swift +0 -0
  365. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNJSON.swift +0 -0
  366. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNLog.swift +0 -0
  367. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNWindow.swift +0 -0
  368. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Sources/PythonNativeKit/Text/PNTextLayout.swift +0 -0
  369. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Tests/NativeTests.xcodeproj/project.pbxproj +0 -0
  370. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Tests/NativeTests.xcodeproj/xcshareddata/xcschemes/NativeTests.xcscheme +0 -0
  371. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/Fixtures/contracts.json +0 -0
  372. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/Fixtures/mount.json +0 -0
  373. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/Fixtures/validation.json +0 -0
  374. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNAssetTests.swift +0 -0
  375. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNColorTests.swift +0 -0
  376. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNContractFixtureTests.swift +0 -0
  377. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNCoreHarness.swift +0 -0
  378. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNGestureTests.swift +0 -0
  379. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNLifecycleTests.swift +0 -0
  380. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNManagerTests.swift +0 -0
  381. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNModuleTests.swift +0 -0
  382. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNMountTests.swift +0 -0
  383. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNParityTests.swift +0 -0
  384. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNRecordFixtures.swift +0 -0
  385. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNTextLayoutTests.swift +0 -0
  386. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native/ios/Tests/TestHost/main.swift +0 -0
  387. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native_modules/__init__.py +0 -0
  388. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native_modules/accessibility_info.py +0 -0
  389. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native_modules/app_state.py +0 -0
  390. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native_modules/battery.py +0 -0
  391. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native_modules/biometrics.py +0 -0
  392. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native_modules/camera.py +0 -0
  393. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native_modules/clipboard.py +0 -0
  394. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native_modules/device.py +0 -0
  395. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native_modules/dimensions.py +0 -0
  396. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native_modules/fallback.py +0 -0
  397. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native_modules/file_system.py +0 -0
  398. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native_modules/haptics.py +0 -0
  399. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native_modules/images.py +0 -0
  400. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native_modules/keyboard.py +0 -0
  401. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native_modules/linking.py +0 -0
  402. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native_modules/localization.py +0 -0
  403. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native_modules/location.py +0 -0
  404. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native_modules/net_info.py +0 -0
  405. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native_modules/notifications.py +0 -0
  406. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native_modules/permissions.py +0 -0
  407. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native_modules/registry.py +0 -0
  408. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native_modules/secure_store.py +0 -0
  409. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native_modules/share.py +0 -0
  410. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native_views/__init__.py +0 -0
  411. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/native_views/bridge_backend.py +0 -0
  412. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/navigation/__init__.py +0 -0
  413. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/navigation/container.py +0 -0
  414. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/navigation/handle.py +0 -0
  415. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/navigation/hooks.py +0 -0
  416. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/navigation/host.py +0 -0
  417. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/navigation/navigators.py +0 -0
  418. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/navigation/ref.py +0 -0
  419. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/navigation/screen.py +0 -0
  420. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/navigation/state.py +0 -0
  421. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/net.py +0 -0
  422. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/platform.py +0 -0
  423. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/platform_metrics.py +0 -0
  424. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/preview.py +0 -0
  425. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/profiling.py +0 -0
  426. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/project/__init__.py +0 -0
  427. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/project/android.py +0 -0
  428. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/project/artifacts.py +0 -0
  429. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/project/builder.py +0 -0
  430. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/project/bundle.py +0 -0
  431. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/project/bytecode.py +0 -0
  432. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/project/config.py +0 -0
  433. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/project/deps.py +0 -0
  434. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/project/devices.py +0 -0
  435. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/project/doctor.py +0 -0
  436. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/project/fingerprint.py +0 -0
  437. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/project/go.py +0 -0
  438. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/project/icons.py +0 -0
  439. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/project/ios.py +0 -0
  440. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/project/lockfile.py +0 -0
  441. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/project/permissions.py +0 -0
  442. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/project/plugins.py +0 -0
  443. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/project/runtime_assets.py +0 -0
  444. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/prop_checks.py +0 -0
  445. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/py.typed +0 -0
  446. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/query.py +0 -0
  447. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/reconciler/__init__.py +0 -0
  448. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/reconciler/boundaries.py +0 -0
  449. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/reconciler/children.py +0 -0
  450. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/reconciler/core.py +0 -0
  451. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/reconciler/layout_pass.py +0 -0
  452. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/reconciler/vnode.py +0 -0
  453. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/refresh.py +0 -0
  454. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/runtime.py +0 -0
  455. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/scheduler.py +0 -0
  456. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/sdk/__init__.py +0 -0
  457. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/sdk/_builtin_contracts.json +0 -0
  458. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/sdk/_components.py +0 -0
  459. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/sdk/builtins.py +0 -0
  460. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/sdk/codegen.py +0 -0
  461. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/sdk/commands.py +0 -0
  462. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/sdk/module_codegen.py +0 -0
  463. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/sdk/native_types.py +0 -0
  464. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/sdk/schema.py +0 -0
  465. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/sdk/services.py +0 -0
  466. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/sdk/templates/contracts.kt +0 -0
  467. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/sdk/templates/contracts.swift +0 -0
  468. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/sdk/templates/values.kt +0 -0
  469. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/sdk/templates/values.swift +0 -0
  470. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/sdk/types.py +0 -0
  471. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/storage.py +0 -0
  472. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/store.py +0 -0
  473. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/style.py +0 -0
  474. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/suspense.py +0 -0
  475. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/svg.py +0 -0
  476. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/android_template/app/build.gradle +0 -0
  477. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/android_template/app/proguard-rules.pro +0 -0
  478. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/android_template/app/src/debug/AndroidManifest.xml +0 -0
  479. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/android_template/app/src/main/AndroidManifest.xml +0 -0
  480. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/android_template/app/src/main/java/com/pythonnative/android_template/MainActivity.kt +0 -0
  481. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/android_template/app/src/main/java/com/pythonnative/android_template/ScreenFragment.kt +0 -0
  482. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/android_template/app/src/main/res/drawable/ic_launcher_background.xml +0 -0
  483. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/android_template/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +0 -0
  484. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/android_template/app/src/main/res/layout/activity_main.xml +0 -0
  485. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +0 -0
  486. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +0 -0
  487. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-hdpi/ic_launcher.webp +0 -0
  488. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp +0 -0
  489. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-mdpi/ic_launcher.webp +0 -0
  490. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp +0 -0
  491. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xhdpi/ic_launcher.webp +0 -0
  492. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp +0 -0
  493. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp +0 -0
  494. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp +0 -0
  495. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp +0 -0
  496. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp +0 -0
  497. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/android_template/app/src/main/res/navigation/nav_graph.xml +0 -0
  498. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/android_template/app/src/main/res/values/colors.xml +0 -0
  499. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/android_template/app/src/main/res/values/strings.xml +0 -0
  500. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/android_template/app/src/main/res/values/themes.xml +0 -0
  501. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/android_template/app/src/main/res/values-night/themes.xml +0 -0
  502. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/android_template/app/src/main/res/xml/backup_rules.xml +0 -0
  503. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/android_template/app/src/main/res/xml/data_extraction_rules.xml +0 -0
  504. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/android_template/build.gradle +0 -0
  505. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/android_template/gradle/wrapper/gradle-wrapper.jar +0 -0
  506. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/android_template/gradle/wrapper/gradle-wrapper.properties +0 -0
  507. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/android_template/gradle.properties +0 -0
  508. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/android_template/gradlew +0 -0
  509. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/android_template/gradlew.bat +0 -0
  510. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/android_template/settings.gradle +0 -0
  511. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/ios_template/PNFinalizePython.sh +0 -0
  512. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/ios_template/ios_template/AppDelegate.swift +0 -0
  513. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/ios_template/ios_template/Assets.xcassets/AccentColor.colorset/Contents.json +0 -0
  514. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/ios_template/ios_template/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -0
  515. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/ios_template/ios_template/Assets.xcassets/Contents.json +0 -0
  516. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/ios_template/ios_template/Base.lproj/LaunchScreen.storyboard +0 -0
  517. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/ios_template/ios_template/BridgingHeader.h +0 -0
  518. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/ios_template/ios_template/Info.plist +0 -0
  519. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/ios_template/ios_template/PrivacyInfo.xcprivacy +0 -0
  520. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/ios_template/ios_template/PythonRuntime.swift +0 -0
  521. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/ios_template/ios_template/SceneDelegate.swift +0 -0
  522. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/ios_template/ios_template/ViewController.swift +0 -0
  523. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/ios_template/ios_template.xcodeproj/project.pbxproj +0 -0
  524. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/templates/ios_template/ios_template.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -0
  525. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/testing/__init__.py +0 -0
  526. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/testing/backend.py +0 -0
  527. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/testing/clock.py +0 -0
  528. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/testing/harness.py +0 -0
  529. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/testing/pytest_plugin.py +0 -0
  530. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/testing/queries.py +0 -0
  531. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/theme.py +0 -0
  532. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative/utils.py +0 -0
  533. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative.egg-info/SOURCES.txt +0 -0
  534. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative.egg-info/dependency_links.txt +0 -0
  535. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative.egg-info/entry_points.txt +0 -0
  536. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative.egg-info/requires.txt +0 -0
  537. {pythonnative-0.52.0 → pythonnative-0.52.1}/src/pythonnative.egg-info/top_level.txt +0 -0
  538. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/contracts/list-trace.json +0 -0
  539. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/contracts/validation.json +0 -0
  540. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_alert.py +0 -0
  541. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_animated.py +0 -0
  542. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_animated_easing.py +0 -0
  543. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_animated_graph.py +0 -0
  544. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_appearance.py +0 -0
  545. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_assets.py +0 -0
  546. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_async_hooks.py +0 -0
  547. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_authoring.py +0 -0
  548. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_bridge.py +0 -0
  549. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_cli.py +0 -0
  550. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_cli_keys.py +0 -0
  551. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_codegen.py +0 -0
  552. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_components.py +0 -0
  553. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_contract_fixtures.py +0 -0
  554. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_core.py +0 -0
  555. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_core_semantics.py +0 -0
  556. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_devclient.py +0 -0
  557. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_device_modules.py +0 -0
  558. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_devserver.py +0 -0
  559. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_devserver_session.py +0 -0
  560. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_devserver_ws.py +0 -0
  561. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_devtools.py +0 -0
  562. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_devtools_page.py +0 -0
  563. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_e2e_suite_renders.py +0 -0
  564. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_element.py +0 -0
  565. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_errors.py +0 -0
  566. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_events.py +0 -0
  567. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_extended_components.py +0 -0
  568. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_gesture_activation.py +0 -0
  569. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_gesture_composition.py +0 -0
  570. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_gestures.py +0 -0
  571. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_handles.py +0 -0
  572. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_hooks.py +0 -0
  573. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_hosts.py +0 -0
  574. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_hot_reload.py +0 -0
  575. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_identity_bailout.py +0 -0
  576. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_inbox.py +0 -0
  577. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_incremental_pipeline.py +0 -0
  578. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_incremental_render.py +0 -0
  579. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_interaction_props.py +0 -0
  580. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_ios_log.py +0 -0
  581. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_layout.py +0 -0
  582. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_lint.py +0 -0
  583. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_list_features.py +0 -0
  584. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_metric_hooks.py +0 -0
  585. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_mutations.py +0 -0
  586. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_native_lists.py +0 -0
  587. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_native_modules.py +0 -0
  588. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_native_values.py +0 -0
  589. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_native_views.py +0 -0
  590. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_net.py +0 -0
  591. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_new_components.py +0 -0
  592. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_performance_budgets.py +0 -0
  593. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_platform.py +0 -0
  594. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_platform_metrics.py +0 -0
  595. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_qr.py +0 -0
  596. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_reconciler.py +0 -0
  597. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_ref.py +0 -0
  598. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_release_packaging.py +0 -0
  599. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_release_workflow.py +0 -0
  600. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_runtime.py +0 -0
  601. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_runtime_contracts.py +0 -0
  602. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_runtime_correctness.py +0 -0
  603. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_runtime_overhaul.py +0 -0
  604. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_sdk.py +0 -0
  605. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_smoke.py +0 -0
  606. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_storage.py +0 -0
  607. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_store.py +0 -0
  608. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_style.py +0 -0
  609. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_suspense.py +0 -0
  610. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_testing_library.py +0 -0
  611. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_theme.py +0 -0
  612. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_transitions.py +0 -0
  613. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_typed_events.py +0 -0
  614. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_typing_conformance.py +0 -0
  615. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_utils.py +0 -0
  616. {pythonnative-0.52.0 → pythonnative-0.52.1}/tests/test_web_transport.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pythonnative
3
- Version: 0.52.0
3
+ Version: 0.52.1
4
4
  Summary: Cross-platform native UI toolkit for Android and iOS
5
5
  Author: Owen Carey
6
6
  License: MIT License
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pythonnative"
7
- version = "0.52.0"
7
+ version = "0.52.1"
8
8
  description = "Cross-platform native UI toolkit for Android and iOS"
9
9
  authors = [
10
10
  { name = "Owen Carey" }
@@ -66,7 +66,7 @@ Example:
66
66
  ```
67
67
  """
68
68
 
69
- __version__ = "0.52.0"
69
+ __version__ = "0.52.1"
70
70
 
71
71
  import importlib
72
72
  from typing import TYPE_CHECKING, Any
@@ -25,6 +25,13 @@ arguments, converted with its annotations (``str``, ``int``, ``float``,
25
25
  those). Query parameters the component doesn't accept are ignored. A
26
26
  URL whose values don't convert, or that lacks a required parameter,
27
27
  matches nothing.
28
+
29
+ Path placeholders arrive percent-decoded, once, before conversion, so
30
+ ``users/Ada%20Lovelace`` gives ``user="Ada Lovelace"`` and an encoded
31
+ ``%2F`` stays inside one value instead of splitting the path. A ``+`` in
32
+ a path is a literal plus, unlike in the query string, where it means a
33
+ space. Bytes that don't decode as UTF-8 are left as they arrived.
34
+ Literal segments are matched exactly as written.
28
35
  """
29
36
 
30
37
  from __future__ import annotations
@@ -34,7 +41,7 @@ import inspect
34
41
  import types
35
42
  import typing
36
43
  from typing import TYPE_CHECKING, Any, Callable, Dict, List, Optional, Sequence, Tuple, Union
37
- from urllib.parse import parse_qsl, quote, urlencode, urlsplit
44
+ from urllib.parse import parse_qsl, quote, unquote, urlencode, urlsplit
38
45
 
39
46
  from ..component import Component
40
47
  from .screen import Screen
@@ -113,6 +120,35 @@ def _stringify(value: Any) -> str:
113
120
  return str(value)
114
121
 
115
122
 
123
+ def _decode(segment: str) -> str:
124
+ """Percent-decode one captured path segment, or return it unchanged.
125
+
126
+ Strict decoding with a fallback to the raw segment is
127
+ non-regressive: a segment whose bytes aren't valid UTF-8 (``%FF``,
128
+ Latin-1 ``caf%E9``) reads back exactly as it does without any
129
+ decoding, where ``errors="replace"`` would overwrite it with U+FFFD
130
+ and lose information that can't be recovered.
131
+
132
+ The fallback hands the converter the raw segment, and the converter
133
+ then applies its ordinary rules: a ``str`` param keeps it, an ``int``
134
+ param rejects it so the pattern doesn't match, and a ``Literal`` or
135
+ ``Enum`` param matches only when one of its declared values equals
136
+ the raw text.
137
+
138
+ Args:
139
+ segment: One path segment, already split on ``/``, so an encoded
140
+ ``%2F`` decodes to a slash inside the value.
141
+
142
+ Returns:
143
+ The decoded segment, or ``segment`` itself when it isn't valid
144
+ UTF-8.
145
+ """
146
+ try:
147
+ return unquote(segment, errors="strict")
148
+ except UnicodeDecodeError:
149
+ return segment
150
+
151
+
116
152
  class _Param:
117
153
  __slots__ = ("name",)
118
154
 
@@ -165,7 +201,10 @@ class _Pattern:
165
201
  raw: Dict[str, str] = {}
166
202
  for pattern, actual in zip(self.segments, parts):
167
203
  if isinstance(pattern, _Param):
168
- raw[pattern.name] = actual
204
+ # Only captured values are decoded, and only here. Decoding
205
+ # in the conversion loop below would decode query values a
206
+ # second time, since ``parse_qsl`` has already decoded them.
207
+ raw[pattern.name] = _decode(actual)
169
208
  elif pattern != actual:
170
209
  return None
171
210
  for key, value in query.items():
@@ -202,6 +241,12 @@ def _split_path(path: Optional[str]) -> Tuple[Union[str, _Param], ...]:
202
241
  class LinkTable:
203
242
  """URL <-> navigation state mapping built from a navigator tree.
204
243
 
244
+ Path placeholders are percent-decoded once, where the segment is
245
+ captured and before conversion; ``+`` in a path stays a literal plus,
246
+ and undecodable bytes are left as-is. Literal segments match exactly
247
+ as the paths declare them, and query values are decoded by
248
+ ``parse_qsl`` alone.
249
+
205
250
  Args:
206
251
  navigator: The root navigator.
207
252
  prefixes: URL prefixes the app answers to (schemes such as
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pythonnative
3
- Version: 0.52.0
3
+ Version: 0.52.1
4
4
  Summary: Cross-platform native UI toolkit for Android and iOS
5
5
  Author: Owen Carey
6
6
  License: MIT License
@@ -36,6 +36,7 @@ from pythonnative.navigation import (
36
36
  use_route,
37
37
  use_screen_options,
38
38
  )
39
+ from pythonnative.navigation import linking as linking_table_module
39
40
  from pythonnative.navigation.screen import flatten_screens
40
41
  from pythonnative.testing import FakeHost, RenderResult, render, render_hook
41
42
  from pythonnative.theme import LIGHT_THEME
@@ -1842,6 +1843,207 @@ def test_link_table_round_trips_urls() -> None:
1842
1843
  assert links.url_from_state(state) == url
1843
1844
 
1844
1845
 
1846
+ # Percent-encoded path params (issue #89). url_from_state has always
1847
+ # encoded placeholders; match now decodes them where it captures them.
1848
+
1849
+
1850
+ @component
1851
+ def Pair(left: str, right: str) -> pn.Node:
1852
+ return Text(f"pair {left}/{right}")
1853
+
1854
+
1855
+ @component
1856
+ def OrgProfile(org: str = "", user: str = "") -> pn.Node:
1857
+ return Text(f"org {org}/{user}")
1858
+
1859
+
1860
+ @component
1861
+ def CityEncoded(city: Literal["new%20york", "paris"] = "paris") -> pn.Node:
1862
+ return Text(f"city {city}")
1863
+
1864
+
1865
+ @component
1866
+ def CityDecoded(city: Literal["new york", "paris"] = "paris") -> pn.Node:
1867
+ return Text(f"city {city}")
1868
+
1869
+
1870
+ @component
1871
+ def IntOnly(n: int) -> pn.Node:
1872
+ return Text(f"int {n}")
1873
+
1874
+
1875
+ @component
1876
+ def StrOnly(s: str) -> pn.Node:
1877
+ return Text(f"str {s}")
1878
+
1879
+
1880
+ @pytest.mark.parametrize(
1881
+ "value",
1882
+ [
1883
+ pytest.param("Ada Lovelace", id="space"),
1884
+ pytest.param("Zo\u00eb \u03a9mega \u65e5\u672c", id="unicode"),
1885
+ pytest.param("c++", id="literal-plus"),
1886
+ pytest.param("100%", id="percent-sign"),
1887
+ pytest.param("a/b", id="slash"),
1888
+ ],
1889
+ )
1890
+ def test_link_table_path_params_round_trip(value: str) -> None:
1891
+ links = _links()
1892
+ state = NavigationState([Route("Tabs", state=NavigationState([Route("Profile", {"user": value})]))])
1893
+ url = links.url_from_state(state)
1894
+ assert url is not None
1895
+
1896
+ assert _leaf(links.state_from_url(url)).params == {"user": value}
1897
+
1898
+
1899
+ def test_link_table_encoded_slash_stays_in_one_value() -> None:
1900
+ # Decoding happens per segment, after the split, so %2F can't become a
1901
+ # segment boundary and shift which pattern matches.
1902
+ route = _leaf(_links().state_from_url("myapp://tabs/u/a%2Fb"))
1903
+ assert route.name == "Profile"
1904
+ assert route.params == {"user": "a/b"}
1905
+
1906
+
1907
+ def test_link_table_double_encoded_value_decodes_once() -> None:
1908
+ assert _leaf(_links().state_from_url("myapp://tabs/u/%252F")).params == {"user": "%2F"}
1909
+
1910
+
1911
+ def test_link_table_converter_sees_the_decoded_value() -> None:
1912
+ # Detail.id is `int`, and the conversion loop returns None on failure, so
1913
+ # before this fix an encoded value matched nothing at all rather than
1914
+ # reaching the screen as a raw string.
1915
+ route = _leaf(_links().state_from_url("myapp://items/%34%32"))
1916
+ assert route.name == "Detail"
1917
+ assert route.params == {"id": 42} # tab has a default, so it stays absent
1918
+
1919
+
1920
+ def test_link_table_does_not_decode_query_values_twice() -> None:
1921
+ # match() merges the query into the same dict as the captured path values
1922
+ # and then converts both in one loop, and parse_qsl has already decoded
1923
+ # the query. A decode placed in that conversion loop instead of at the
1924
+ # capture site would decode query values a second time, turning a%252Bb
1925
+ # into a+b. Search(**filters) accepts any query key, so it is observable.
1926
+ route = _leaf(_links().state_from_url("myapp://search?q=a%252Bb"))
1927
+ assert route.name == "Search"
1928
+ assert route.params == {"q": "a%2Bb"}
1929
+
1930
+
1931
+ def test_link_table_plus_is_literal_in_a_path_and_a_space_in_a_query() -> None:
1932
+ # One URL, both rules: unquote leaves + alone, parse_qsl turns it into a
1933
+ # space. Detail takes a query param beside its path placeholder.
1934
+ detail = _leaf(_links().state_from_url("myapp://items/1?tab=a+b"))
1935
+ assert detail.params == {"id": 1, "tab": "a b"}
1936
+
1937
+ profile = _leaf(_links().state_from_url("myapp://tabs/u/a+b"))
1938
+ assert profile.params == {"user": "a+b"}
1939
+
1940
+
1941
+ @pytest.mark.parametrize(
1942
+ "raw",
1943
+ [pytest.param("%FF", id="invalid-utf8"), pytest.param("caf%E9", id="latin-1")],
1944
+ )
1945
+ def test_link_table_undecodable_path_param_is_left_raw(raw: str) -> None:
1946
+ # Strict decoding with a raw fallback: a str param whose bytes aren't
1947
+ # valid UTF-8 reads back exactly as it did before decoding existed,
1948
+ # rather than being replaced with U+FFFD.
1949
+ assert _leaf(_links().state_from_url(f"myapp://tabs/u/{raw}")).params == {"user": raw}
1950
+
1951
+
1952
+ def test_link_table_literal_segments_are_not_decoded() -> None:
1953
+ # The literal comparison still sees the raw segment, so an encoded
1954
+ # literal does not match, and a {param} still wins where it wins today.
1955
+ assert _links().state_from_url("myapp://tabs/%75/ada") is None
1956
+
1957
+ tabs = TabNavigator(Screen(Feed, path="new"), Screen(Profile, path="{user}"), name="Choice")
1958
+ table = LinkTable(StackNavigator(Screen(tabs, path="u")), ["myapp://"])
1959
+
1960
+ assert _leaf(table.state_from_url("myapp://u/new")).name == "Feed"
1961
+ encoded = _leaf(table.state_from_url("myapp://u/%6Eew"))
1962
+ assert encoded.name == "Profile"
1963
+ assert encoded.params == {"user": "new"}
1964
+
1965
+
1966
+ def test_link_table_decodes_every_captured_segment() -> None:
1967
+ # Two placeholders in one path, encoded differently, so a decode applied
1968
+ # to only one of them leaves the other raw.
1969
+ root = StackNavigator(Screen(Home, path=""), Screen(Pair, path="p/{left}/{right}"))
1970
+ table = LinkTable(root, ["myapp://"])
1971
+ params = {"left": "Ada Lovelace", "right": "a/b"}
1972
+ url = table.url_from_state(NavigationState([Route("Pair", params)]))
1973
+ assert url == "myapp://p/Ada%20Lovelace/a%2Fb"
1974
+
1975
+ assert _leaf(table.state_from_url(url)).params == params
1976
+
1977
+
1978
+ def test_link_table_decodes_captures_across_a_nested_navigator() -> None:
1979
+ # One placeholder on the outer navigator's path and one on the inner
1980
+ # screen's; both land on the leaf and both must be decoded.
1981
+ # The outer path prefixes every screen beneath it, and each resulting
1982
+ # pattern validates its placeholders against its own leaf component, so
1983
+ # the single inner screen has to accept both {org} and {user}.
1984
+ inner = StackNavigator(Screen(OrgProfile, path="u/{user}"), name="Inner")
1985
+ table = LinkTable(StackNavigator(Screen(inner, path="org/{org}")), ["myapp://"])
1986
+
1987
+ state = table.state_from_url("myapp://org/Zo%C3%AB/u/c%2B%2B")
1988
+ assert state is not None and state.current.name == "Inner"
1989
+ assert _leaf(state).params == {"user": "c++", "org": "Zo\u00eb"} # noqa: RUF001
1990
+
1991
+
1992
+ def test_link_table_decoding_can_change_which_pattern_wins() -> None:
1993
+ # Behavior change worth seeing: a failed conversion returns None and
1994
+ # state_from_url falls through to the next pattern. An encoded value that
1995
+ # only converts once decoded therefore moves from the str route to the
1996
+ # int route, which is the fix working rather than a regression.
1997
+ root = StackNavigator(Screen(Home, path=""), Screen(IntOnly, path="x/{n}"), Screen(StrOnly, path="x/{s}"))
1998
+ table = LinkTable(root, ["myapp://"])
1999
+
2000
+ assert _leaf(table.state_from_url("myapp://x/7")).params == {"n": 7}
2001
+ encoded = _leaf(table.state_from_url("myapp://x/%37"))
2002
+ assert encoded.name == "IntOnly"
2003
+ assert encoded.params == {"n": 7}
2004
+ # A value that converts for neither still falls through to the str route.
2005
+ assert _leaf(table.state_from_url("myapp://x/abc")).params == {"s": "abc"}
2006
+
2007
+
2008
+ def test_link_table_decoding_can_stop_a_pattern_matching() -> None:
2009
+ # The mirror of the test above, and a migration note. A Literal (or an
2010
+ # Enum) declared with an already-encoded value matched that URL on the
2011
+ # old behavior, because the raw segment was compared. Now the segment
2012
+ # decodes first, so "%20" no longer equals the declared text and the
2013
+ # pattern stops matching. The fix is to declare the decoded value,
2014
+ # which is what the second table here does.
2015
+ encoded = StackNavigator(Screen(Home, path=""), Screen(CityEncoded, path="c/{city}"))
2016
+ assert LinkTable(encoded, ["myapp://"]).state_from_url("myapp://c/new%20york") is None
2017
+
2018
+ decoded = StackNavigator(Screen(Home, path=""), Screen(CityDecoded, path="c/{city}"))
2019
+ route = _leaf(LinkTable(decoded, ["myapp://"]).state_from_url("myapp://c/new%20york"))
2020
+ assert route.params == {"city": "new york"}
2021
+
2022
+
2023
+ @pytest.mark.parametrize(
2024
+ "error",
2025
+ [
2026
+ pytest.param(RuntimeError("not a decoding problem"), id="runtime-error"),
2027
+ # A UnicodeError that isn't a decode error: catching UnicodeError
2028
+ # instead of UnicodeDecodeError would swallow this one too.
2029
+ pytest.param(UnicodeEncodeError("utf-8", "x", 0, 1, "not a decoding problem"), id="unicode-encode-error"),
2030
+ ],
2031
+ )
2032
+ def test_link_table_decode_fallback_only_swallows_decode_errors(
2033
+ monkeypatch: pytest.MonkeyPatch, error: Exception
2034
+ ) -> None:
2035
+ # The raw-segment fallback is for undecodable bytes only. Anything else
2036
+ # going wrong inside the decode is a bug and must surface rather than
2037
+ # quietly handing the screen an undecoded value.
2038
+ def _boom(*args: Any, **kwargs: Any) -> str:
2039
+ raise error
2040
+
2041
+ monkeypatch.setattr(linking_table_module, "unquote", _boom)
2042
+
2043
+ with pytest.raises(type(error), match="not a decoding problem"):
2044
+ _links().state_from_url("myapp://tabs/u/ada")
2045
+
2046
+
1845
2047
  @pytest.fixture
1846
2048
  def launch_url(monkeypatch: pytest.MonkeyPatch) -> Callable[[Optional[str]], None]:
1847
2049
  monkeypatch.setattr(linking_module, "_url_listeners", [])
File without changes
File without changes
File without changes
File without changes
File without changes