pythonnative 0.46.0__tar.gz → 0.48.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 (609) hide show
  1. {pythonnative-0.46.0/src/pythonnative.egg-info → pythonnative-0.48.0}/PKG-INFO +5 -4
  2. {pythonnative-0.46.0 → pythonnative-0.48.0}/README.md +4 -3
  3. {pythonnative-0.46.0 → pythonnative-0.48.0}/pyproject.toml +1 -1
  4. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/__init__.py +68 -46
  5. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/animated.py +4 -1
  6. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/appearance.py +3 -0
  7. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/assets/__init__.py +1 -3
  8. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/bootstrap.py +2 -1
  9. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/bridge/__init__.py +6 -2
  10. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/bridge/android.py +1 -0
  11. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/bridge/codec.py +8 -3
  12. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/bridge/commits.py +27 -5
  13. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/bridge/fake.py +2 -2
  14. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/bridge/ios.py +1 -0
  15. pythonnative-0.48.0/src/pythonnative/bridge/list_store.py +135 -0
  16. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/bridge/web.py +1 -0
  17. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/cli/pn.py +127 -40
  18. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/component.py +70 -45
  19. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/components/__init__.py +1 -1
  20. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/components/_base.py +13 -7
  21. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/components/controls.py +27 -170
  22. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/components/graphics.py +18 -58
  23. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/components/layout.py +27 -180
  24. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/components/lists.py +371 -101
  25. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/components/media.py +15 -87
  26. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/components/overlays.py +3 -3
  27. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/components/pressable.py +27 -132
  28. pythonnative-0.48.0/src/pythonnative/components/props.py +97 -0
  29. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/components/structural.py +3 -3
  30. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/components/text.py +14 -136
  31. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/devclient.py +71 -33
  32. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/devserver/__init__.py +5 -0
  33. pythonnative-0.48.0/src/pythonnative/devserver/auth.py +158 -0
  34. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/devserver/server.py +117 -13
  35. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/devserver/static/host.js +16 -0
  36. pythonnative-0.48.0/src/pythonnative/devserver/static/layout.js +135 -0
  37. pythonnative-0.48.0/src/pythonnative/devserver/static/list-store.js +90 -0
  38. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/devserver/static/renderer.js +59 -30
  39. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/devserver/static/shell.js +17 -0
  40. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/element.py +37 -10
  41. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/equality.py +7 -1
  42. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/hooks.py +34 -10
  43. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/hosts/base.py +111 -89
  44. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/hosts/native.py +13 -0
  45. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/hot_reload.py +274 -26
  46. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/icons/__init__.py +10 -13
  47. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/journal.py +8 -1
  48. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/layout.py +3 -3
  49. pythonnative-0.48.0/src/pythonnative/lint.py +773 -0
  50. pythonnative-0.48.0/src/pythonnative/list_data.py +206 -0
  51. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/cpp/yoga_jni.cpp +0 -3
  52. pythonnative-0.48.0/src/pythonnative/native/android/src/main/java/com/pythonnative/generated/NativeProps.kt +1324 -0
  53. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/generated/NativeValues.kt +33 -17
  54. pythonnative-0.48.0/src/pythonnative/native/android/src/main/java/com/pythonnative/generated/PNContracts.kt +5518 -0
  55. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/PNBridge.kt +13 -5
  56. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/CommitState.kt +16 -4
  57. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/JsonUtil.kt +1 -1
  58. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ButtonManager.kt +1 -1
  59. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ComponentManager.kt +2 -2
  60. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ControlManagers.kt +7 -7
  61. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/DatePickerManager.kt +1 -1
  62. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/EffectManagers.kt +2 -2
  63. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ImageManager.kt +1 -1
  64. pythonnative-0.48.0/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ListStore.kt +97 -0
  65. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ModalManager.kt +2 -2
  66. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PickerManager.kt +1 -1
  67. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PressableManager.kt +2 -2
  68. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ScrollViewManager.kt +1 -1
  69. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/SegmentedControlManager.kt +1 -1
  70. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/StatusBarManager.kt +1 -1
  71. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/SvgManager.kt +1 -1
  72. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TabBarManager.kt +2 -2
  73. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TextInputManager.kt +2 -2
  74. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TextManager.kt +2 -2
  75. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/VirtualListManager.kt +85 -30
  76. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/WebViewManager.kt +1 -1
  77. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/layout/NativeLayout.kt +32 -9
  78. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/layout/YogaNode.kt +0 -1
  79. pythonnative-0.48.0/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/ErrorOverlay.kt +42 -0
  80. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/HostModule.kt +5 -0
  81. pythonnative-0.48.0/src/pythonnative/native/android/src/test/java/com/pythonnative/generated/PNRecordFixtures.kt +143 -0
  82. pythonnative-0.48.0/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/ContractFixtureTest.kt +33 -0
  83. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/RoundTwoRobolectricTest.kt +1 -1
  84. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNBridge.swift +14 -4
  85. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNCommit.swift +14 -4
  86. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNButtonManagers.swift +3 -3
  87. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNComponentManager.swift +2 -10
  88. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNControlManagers.swift +7 -7
  89. pythonnative-0.48.0/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNListStore.swift +122 -0
  90. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNOverlayManagers.swift +1 -1
  91. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNPressableManager.swift +1 -1
  92. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNScrollViewManager.swift +1 -1
  93. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTabBarManager.swift +1 -1
  94. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTextInputManager.swift +1 -1
  95. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNVirtualListManager.swift +104 -64
  96. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNWebViewManager.swift +1 -1
  97. pythonnative-0.48.0/src/pythonnative/native/ios/Sources/PythonNativeKit/Generated/NativeProps.swift +1425 -0
  98. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Generated/NativeValues.swift +158 -29
  99. pythonnative-0.48.0/src/pythonnative/native/ios/Sources/PythonNativeKit/Generated/PNContracts.swift +5542 -0
  100. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Layout/PNLayout.swift +33 -14
  101. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/HostModule.swift +6 -0
  102. pythonnative-0.48.0/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/PNErrorOverlay.swift +47 -0
  103. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNCommitTests.swift +44 -4
  104. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNContractFixtureTests.swift +14 -2
  105. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNLifecycleTests.swift +4 -2
  106. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNManagerTests.swift +2 -2
  107. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNParityTests.swift +2 -2
  108. pythonnative-0.48.0/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNRecordFixtures.swift +155 -0
  109. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNTransactionTests.swift +1 -1
  110. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/style.cpp +61 -1
  111. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native_views/bridge_backend.py +149 -12
  112. pythonnative-0.48.0/src/pythonnative/navigation/__init__.py +110 -0
  113. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/navigation/container.py +47 -47
  114. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/navigation/handle.py +263 -160
  115. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/navigation/hooks.py +12 -55
  116. pythonnative-0.48.0/src/pythonnative/navigation/linking.py +302 -0
  117. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/navigation/navigators.py +388 -335
  118. pythonnative-0.48.0/src/pythonnative/navigation/ref.py +104 -0
  119. pythonnative-0.48.0/src/pythonnative/navigation/screen.py +387 -0
  120. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/navigation/state.py +16 -33
  121. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/preview.py +7 -4
  122. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/profiling.py +29 -6
  123. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/project/android.py +10 -14
  124. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/project/builder.py +3 -7
  125. pythonnative-0.48.0/src/pythonnative/project/bundle.py +77 -0
  126. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/project/doctor.py +6 -2
  127. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/project/icons.py +7 -7
  128. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/project/ios.py +19 -9
  129. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/project/permissions.py +3 -3
  130. pythonnative-0.48.0/src/pythonnative/prop_checks.py +116 -0
  131. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/reconciler/boundaries.py +12 -6
  132. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/reconciler/core.py +243 -74
  133. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/reconciler/layout_pass.py +4 -1
  134. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/reconciler/vnode.py +5 -1
  135. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/scheduler.py +13 -5
  136. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/sdk/__init__.py +0 -2
  137. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/sdk/_components.py +3 -3
  138. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/sdk/builtins.py +34 -8
  139. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/sdk/codegen.py +13 -20
  140. pythonnative-0.48.0/src/pythonnative/sdk/contract_codegen.py +197 -0
  141. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/sdk/module_codegen.py +10 -4
  142. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/sdk/schema.py +4 -3
  143. pythonnative-0.48.0/src/pythonnative/sdk/templates/contracts.kt +60 -0
  144. pythonnative-0.48.0/src/pythonnative/sdk/templates/contracts.swift +84 -0
  145. pythonnative-0.48.0/src/pythonnative/sdk/templates/values.swift +180 -0
  146. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/sdk/types.py +5 -3
  147. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/storage.py +50 -27
  148. pythonnative-0.48.0/src/pythonnative/store.py +188 -0
  149. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/style.py +52 -259
  150. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/svg.py +1 -0
  151. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/testing/backend.py +31 -7
  152. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/testing/pytest_plugin.py +8 -3
  153. pythonnative-0.48.0/src/pythonnative/theme.py +297 -0
  154. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/utils.py +18 -0
  155. {pythonnative-0.46.0 → pythonnative-0.48.0/src/pythonnative.egg-info}/PKG-INFO +5 -4
  156. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative.egg-info/SOURCES.txt +22 -2
  157. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_appearance.py +9 -37
  158. pythonnative-0.48.0/tests/test_authoring.py +341 -0
  159. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_bridge.py +11 -6
  160. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_cli.py +89 -10
  161. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_codegen.py +1 -1
  162. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_components.py +5 -5
  163. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_core_semantics.py +1 -0
  164. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_devclient.py +64 -12
  165. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_devserver.py +190 -6
  166. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_devserver_ws.py +47 -2
  167. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_e2e_suite_renders.py +65 -2
  168. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_extended_components.py +1 -1
  169. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_hooks.py +7 -1
  170. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_hosts.py +36 -15
  171. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_hot_reload.py +279 -0
  172. pythonnative-0.48.0/tests/test_identity_bailout.py +430 -0
  173. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_inbox.py +11 -10
  174. pythonnative-0.48.0/tests/test_incremental_pipeline.py +472 -0
  175. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_incremental_render.py +2 -0
  176. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_layout.py +17 -5
  177. pythonnative-0.48.0/tests/test_lint.py +1000 -0
  178. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_list_features.py +46 -31
  179. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_mutations.py +4 -0
  180. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_native_lists.py +16 -13
  181. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_native_views.py +1 -1
  182. pythonnative-0.48.0/tests/test_navigation.py +2052 -0
  183. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_new_components.py +14 -12
  184. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_reconciler.py +7 -2
  185. pythonnative-0.48.0/tests/test_release_packaging.py +318 -0
  186. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_runtime_correctness.py +7 -6
  187. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_runtime_overhaul.py +1 -1
  188. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_smoke.py +28 -3
  189. pythonnative-0.48.0/tests/test_store.py +555 -0
  190. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_style.py +42 -71
  191. pythonnative-0.48.0/tests/test_theme.py +416 -0
  192. pythonnative-0.48.0/tests/test_typing_conformance.py +47 -0
  193. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_web_transport.py +4 -2
  194. pythonnative-0.46.0/src/pythonnative/devserver/static/layout.js +0 -103
  195. pythonnative-0.46.0/src/pythonnative/native/android/src/main/java/com/pythonnative/generated/NativeProps.kt +0 -1327
  196. pythonnative-0.46.0/src/pythonnative/native/android/src/main/java/com/pythonnative/generated/PNContracts.kt +0 -245
  197. pythonnative-0.46.0/src/pythonnative/native/android/src/test/java/com/pythonnative/generated/PNRecordFixtures.kt +0 -49
  198. pythonnative-0.46.0/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/ContractFixtureTest.kt +0 -19
  199. pythonnative-0.46.0/src/pythonnative/native/ios/Sources/PythonNativeKit/Generated/NativeProps.swift +0 -1428
  200. pythonnative-0.46.0/src/pythonnative/native/ios/Sources/PythonNativeKit/Generated/PNContracts.swift +0 -108
  201. pythonnative-0.46.0/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNRecordFixtures.swift +0 -52
  202. pythonnative-0.46.0/src/pythonnative/navigation/__init__.py +0 -136
  203. pythonnative-0.46.0/src/pythonnative/navigation/linking.py +0 -200
  204. pythonnative-0.46.0/src/pythonnative/navigation/ref.py +0 -121
  205. pythonnative-0.46.0/src/pythonnative/navigation/screen.py +0 -299
  206. pythonnative-0.46.0/src/pythonnative/navigation/theme.py +0 -159
  207. pythonnative-0.46.0/src/pythonnative/sdk/templates/contracts.kt +0 -96
  208. pythonnative-0.46.0/src/pythonnative/sdk/templates/contracts.swift +0 -108
  209. pythonnative-0.46.0/src/pythonnative/sdk/templates/values.swift +0 -71
  210. pythonnative-0.46.0/tests/test_navigation.py +0 -1805
  211. pythonnative-0.46.0/tests/test_navigation_theme.py +0 -274
  212. pythonnative-0.46.0/tests/test_release_packaging.py +0 -160
  213. {pythonnative-0.46.0 → pythonnative-0.48.0}/.github/workflows/release.yml +0 -0
  214. {pythonnative-0.46.0 → pythonnative-0.48.0}/LICENSE +0 -0
  215. {pythonnative-0.46.0 → pythonnative-0.48.0}/MANIFEST.in +0 -0
  216. {pythonnative-0.46.0 → pythonnative-0.48.0}/scripts/check-distributions.py +0 -0
  217. {pythonnative-0.46.0 → pythonnative-0.48.0}/scripts/cibuildwheel.toml +0 -0
  218. {pythonnative-0.46.0 → pythonnative-0.48.0}/scripts/release-assets.py +0 -0
  219. {pythonnative-0.46.0 → pythonnative-0.48.0}/setup.cfg +0 -0
  220. {pythonnative-0.46.0 → pythonnative-0.48.0}/setup.py +0 -0
  221. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/_ios_log.py +0 -0
  222. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/alerts.py +0 -0
  223. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/animation_graph.py +0 -0
  224. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/assets/fonts.py +0 -0
  225. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/cli/__init__.py +0 -0
  226. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/components/events.py +0 -0
  227. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/devserver/static/animation_graph.js +0 -0
  228. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/devserver/static/assets.js +0 -0
  229. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/devserver/static/bridge.js +0 -0
  230. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/devserver/static/colors.js +0 -0
  231. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/devserver/static/contracts.js +0 -0
  232. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/devserver/static/index.html +0 -0
  233. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/devserver/static/preview.css +0 -0
  234. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/devserver/static/yoga/LICENSE +0 -0
  235. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/devserver/static/yoga/binaries/yoga-wasm-base64-esm.js +0 -0
  236. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/devserver/static/yoga/src/generated/YGEnums.d.ts +0 -0
  237. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/devserver/static/yoga/src/generated/YGEnums.js +0 -0
  238. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/devserver/static/yoga/src/generated/YGEnums.js.map +0 -0
  239. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/devserver/static/yoga/src/index.d.ts +0 -0
  240. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/devserver/static/yoga/src/index.js +0 -0
  241. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/devserver/static/yoga/src/index.js.map +0 -0
  242. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/devserver/static/yoga/src/load.d.ts +0 -0
  243. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/devserver/static/yoga/src/load.js +0 -0
  244. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/devserver/static/yoga/src/load.js.map +0 -0
  245. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/devserver/static/yoga/src/wrapAssembly.d.ts +0 -0
  246. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/devserver/static/yoga/src/wrapAssembly.js +0 -0
  247. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/devserver/static/yoga/src/wrapAssembly.js.map +0 -0
  248. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/devserver/watcher.py +0 -0
  249. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/devserver/ws.py +0 -0
  250. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/diagnostics.py +0 -0
  251. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/events.py +0 -0
  252. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/gestures.py +0 -0
  253. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/handles.py +0 -0
  254. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/hosts/__init__.py +0 -0
  255. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/icons/LICENSE-lucide.txt +0 -0
  256. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/icons/_lucide.json +0 -0
  257. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/icons/_names.py +0 -0
  258. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/mutations.py +0 -0
  259. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/build.gradle +0 -0
  260. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/gradle.properties +0 -0
  261. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/settings.gradle +0 -0
  262. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/AndroidManifest.xml +0 -0
  263. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/cpp/CMakeLists.txt +0 -0
  264. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/generated/NativeModules.kt +0 -0
  265. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/PythonHost.kt +0 -0
  266. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/AnimationGraph.kt +0 -0
  267. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/AnimationSpecs.kt +0 -0
  268. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/PNAnimator.kt +0 -0
  269. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/assets/PNAssets.kt +0 -0
  270. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/MainThread.kt +0 -0
  271. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNLog.kt +0 -0
  272. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNRegistry.kt +0 -0
  273. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNTransaction.kt +0 -0
  274. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/TransactionApplier.kt +0 -0
  275. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/ViewRegistry.kt +0 -0
  276. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/BuiltinComponents.kt +0 -0
  277. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ContainerManagers.kt +0 -0
  278. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ImageLoader.kt +0 -0
  279. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PNColor.kt +0 -0
  280. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PNTheme.kt +0 -0
  281. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PortalManager.kt +0 -0
  282. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ScreenStackManager.kt +0 -0
  283. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ScreenTransitions.kt +0 -0
  284. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ViewStyler.kt +0 -0
  285. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/GestureArbiter.kt +0 -0
  286. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/GestureCoordinator.kt +0 -0
  287. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/GestureRecognizers.kt +0 -0
  288. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/graphics/SvgPath.kt +0 -0
  289. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/AssetModules.kt +0 -0
  290. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/BuiltinModules.kt +0 -0
  291. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/DeviceModules.kt +0 -0
  292. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/MediaModules.kt +0 -0
  293. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/NativeModule.kt +0 -0
  294. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/NotificationsModule.kt +0 -0
  295. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/PermissionsModule.kt +0 -0
  296. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/PlatformModules.kt +0 -0
  297. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/StorageModules.kt +0 -0
  298. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/SystemModules.kt +0 -0
  299. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/plugins/GeneratedPlugins.kt +0 -0
  300. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/screens/PNKeyboard.kt +0 -0
  301. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/screens/PNScreenFragment.kt +0 -0
  302. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/screens/ScreenRegistry.kt +0 -0
  303. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNAccessibilityDelegate.kt +0 -0
  304. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNBorderDrawable.kt +0 -0
  305. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNEditText.kt +0 -0
  306. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNFrameLayout.kt +0 -0
  307. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNScrollViews.kt +0 -0
  308. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/res/anim/pn_fade_in.xml +0 -0
  309. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/res/anim/pn_fade_out.xml +0 -0
  310. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/res/anim/pn_hold.xml +0 -0
  311. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/res/anim/pn_slide_in_bottom.xml +0 -0
  312. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/res/anim/pn_slide_in_left.xml +0 -0
  313. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/res/anim/pn_slide_in_right.xml +0 -0
  314. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/res/anim/pn_slide_out_bottom.xml +0 -0
  315. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/res/anim/pn_slide_out_left.xml +0 -0
  316. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/res/anim/pn_slide_out_right.xml +0 -0
  317. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/res/drawable/pn_ic_arrow_back.xml +0 -0
  318. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/res/values/pn_ids.xml +0 -0
  319. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/main/res/xml/pn_file_paths.xml +0 -0
  320. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/AnimationSpecsTest.kt +0 -0
  321. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/AssetsAndSvgTest.kt +0 -0
  322. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/GestureArbiterTest.kt +0 -0
  323. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/NativeLifecycleTest.kt +0 -0
  324. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/PNColorTest.kt +0 -0
  325. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/PNTransactionTest.kt +0 -0
  326. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/PromiseTest.kt +0 -0
  327. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/RoundOneRobolectricTest.kt +0 -0
  328. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/RoundTwoLogicTest.kt +0 -0
  329. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/ScreenTransitionsTest.kt +0 -0
  330. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/StyleAccessibilityDeviceTest.kt +0 -0
  331. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Package.swift +0 -0
  332. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Animation/PNAnimationGraph.swift +0 -0
  333. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Animation/PNAnimator.swift +0 -0
  334. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNRegistry.swift +0 -0
  335. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNTransaction.swift +0 -0
  336. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNViewRegistry.swift +0 -0
  337. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNColor.swift +0 -0
  338. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNContainerView.swift +0 -0
  339. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNEffectManagers.swift +0 -0
  340. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNImageManager.swift +0 -0
  341. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNScreenStackManager.swift +0 -0
  342. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNSvgManager.swift +0 -0
  343. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTextManager.swift +0 -0
  344. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTransform.swift +0 -0
  345. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewManager.swift +0 -0
  346. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewState.swift +0 -0
  347. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewStyler.swift +0 -0
  348. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Generated/NativeModules.swift +0 -0
  349. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Gestures/PNGestureCoordinator.swift +0 -0
  350. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/AlertModule.swift +0 -0
  351. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/EnvironmentModules.swift +0 -0
  352. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/ImagesModule.swift +0 -0
  353. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/LifecycleModules.swift +0 -0
  354. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/MediaModules.swift +0 -0
  355. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/PNNativeModule.swift +0 -0
  356. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/PermissionModules.swift +0 -0
  357. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/SystemModules.swift +0 -0
  358. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Plugins/PNPluginRegistration.swift +0 -0
  359. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Resources/PrivacyInfo.xcprivacy +0 -0
  360. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Screens/PNScreenRegistry.swift +0 -0
  361. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Screens/PNViewController.swift +0 -0
  362. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNAssets.swift +0 -0
  363. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNCompat.swift +0 -0
  364. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNJSON.swift +0 -0
  365. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNLog.swift +0 -0
  366. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNWindow.swift +0 -0
  367. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Tests/NativeTests.xcodeproj/project.pbxproj +0 -0
  368. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Tests/NativeTests.xcodeproj/xcshareddata/xcschemes/NativeTests.xcscheme +0 -0
  369. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/Fixtures/validation.json +0 -0
  370. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNAnimationGraphTests.swift +0 -0
  371. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNAssetTests.swift +0 -0
  372. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNColorTests.swift +0 -0
  373. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNContractParityTests.swift +0 -0
  374. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNGestureTests.swift +0 -0
  375. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNModuleTests.swift +0 -0
  376. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/ios/Tests/TestHost/main.swift +0 -0
  377. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/LICENSE +0 -0
  378. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/Package.swift +0 -0
  379. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/VENDORED.md +0 -0
  380. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/include/PNStyle.h +0 -0
  381. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/include/module.modulemap +0 -0
  382. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/include/yoga/YGConfig.h +0 -0
  383. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/include/yoga/YGEnums.h +0 -0
  384. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/include/yoga/YGMacros.h +0 -0
  385. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/include/yoga/YGNode.h +0 -0
  386. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/include/yoga/YGNodeLayout.h +0 -0
  387. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/include/yoga/YGNodeStyle.h +0 -0
  388. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/include/yoga/YGPixelGrid.h +0 -0
  389. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/include/yoga/YGValue.h +0 -0
  390. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/include/yoga/Yoga.h +0 -0
  391. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/python.cpp +0 -0
  392. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/CMakeLists.txt +0 -0
  393. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/YGConfig.cpp +0 -0
  394. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/YGConfig.h +0 -0
  395. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/YGEnums.cpp +0 -0
  396. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/YGEnums.h +0 -0
  397. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/YGMacros.h +0 -0
  398. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/YGNode.cpp +0 -0
  399. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/YGNode.h +0 -0
  400. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/YGNodeLayout.cpp +0 -0
  401. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/YGNodeLayout.h +0 -0
  402. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/YGNodeStyle.cpp +0 -0
  403. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/YGNodeStyle.h +0 -0
  404. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/YGPixelGrid.cpp +0 -0
  405. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/YGPixelGrid.h +0 -0
  406. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/YGValue.cpp +0 -0
  407. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/YGValue.h +0 -0
  408. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/Yoga.h +0 -0
  409. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/algorithm/AbsoluteLayout.cpp +0 -0
  410. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/algorithm/AbsoluteLayout.h +0 -0
  411. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/algorithm/Align.h +0 -0
  412. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/algorithm/Baseline.cpp +0 -0
  413. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/algorithm/Baseline.h +0 -0
  414. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/algorithm/BoundAxis.h +0 -0
  415. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/algorithm/Cache.cpp +0 -0
  416. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/algorithm/Cache.h +0 -0
  417. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/algorithm/CalculateLayout.cpp +0 -0
  418. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/algorithm/CalculateLayout.h +0 -0
  419. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/algorithm/FlexDirection.h +0 -0
  420. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/algorithm/FlexLine.cpp +0 -0
  421. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/algorithm/FlexLine.h +0 -0
  422. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/algorithm/PixelGrid.cpp +0 -0
  423. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/algorithm/PixelGrid.h +0 -0
  424. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/algorithm/SizingMode.h +0 -0
  425. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/algorithm/TrailingPosition.h +0 -0
  426. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/config/Config.cpp +0 -0
  427. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/config/Config.h +0 -0
  428. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/debug/AssertFatal.cpp +0 -0
  429. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/debug/AssertFatal.h +0 -0
  430. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/debug/Log.cpp +0 -0
  431. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/debug/Log.h +0 -0
  432. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/enums/Align.h +0 -0
  433. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/enums/BoxSizing.h +0 -0
  434. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/enums/Dimension.h +0 -0
  435. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/enums/Direction.h +0 -0
  436. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/enums/Display.h +0 -0
  437. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/enums/Edge.h +0 -0
  438. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/enums/Errata.h +0 -0
  439. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/enums/ExperimentalFeature.h +0 -0
  440. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/enums/FlexDirection.h +0 -0
  441. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/enums/Gutter.h +0 -0
  442. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/enums/Justify.h +0 -0
  443. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/enums/LogLevel.h +0 -0
  444. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/enums/MeasureMode.h +0 -0
  445. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/enums/NodeType.h +0 -0
  446. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/enums/Overflow.h +0 -0
  447. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/enums/PhysicalEdge.h +0 -0
  448. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/enums/PositionType.h +0 -0
  449. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/enums/Unit.h +0 -0
  450. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/enums/Wrap.h +0 -0
  451. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/enums/YogaEnums.h +0 -0
  452. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/event/event.cpp +0 -0
  453. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/event/event.h +0 -0
  454. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/module.modulemap +0 -0
  455. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/node/CachedMeasurement.h +0 -0
  456. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/node/LayoutResults.cpp +0 -0
  457. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/node/LayoutResults.h +0 -0
  458. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/node/LayoutableChildren.h +0 -0
  459. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/node/Node.cpp +0 -0
  460. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/node/Node.h +0 -0
  461. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/numeric/Comparison.h +0 -0
  462. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/numeric/FloatOptional.h +0 -0
  463. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/style/SmallValueBuffer.h +0 -0
  464. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/style/Style.h +0 -0
  465. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/style/StyleLength.h +0 -0
  466. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/style/StyleValueHandle.h +0 -0
  467. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native/yoga/yoga/style/StyleValuePool.h +0 -0
  468. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native_modules/__init__.py +0 -0
  469. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native_modules/accessibility_info.py +0 -0
  470. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native_modules/app_state.py +0 -0
  471. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native_modules/battery.py +0 -0
  472. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native_modules/biometrics.py +0 -0
  473. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native_modules/camera.py +0 -0
  474. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native_modules/clipboard.py +0 -0
  475. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native_modules/device.py +0 -0
  476. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native_modules/dimensions.py +0 -0
  477. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native_modules/fallback.py +0 -0
  478. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native_modules/file_system.py +0 -0
  479. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native_modules/haptics.py +0 -0
  480. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native_modules/images.py +0 -0
  481. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native_modules/keyboard.py +0 -0
  482. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native_modules/linking.py +0 -0
  483. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native_modules/localization.py +0 -0
  484. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native_modules/location.py +0 -0
  485. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native_modules/net_info.py +0 -0
  486. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native_modules/notifications.py +0 -0
  487. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native_modules/permissions.py +0 -0
  488. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native_modules/registry.py +0 -0
  489. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native_modules/secure_store.py +0 -0
  490. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native_modules/share.py +0 -0
  491. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/native_views/__init__.py +0 -0
  492. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/navigation/host.py +0 -0
  493. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/net.py +0 -0
  494. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/platform.py +0 -0
  495. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/platform_metrics.py +0 -0
  496. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/project/__init__.py +0 -0
  497. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/project/artifacts.py +0 -0
  498. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/project/config.py +0 -0
  499. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/project/deps.py +0 -0
  500. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/project/devices.py +0 -0
  501. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/project/fingerprint.py +0 -0
  502. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/project/lockfile.py +0 -0
  503. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/project/plugins.py +0 -0
  504. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/project/runtime_assets.py +0 -0
  505. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/py.typed +0 -0
  506. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/query.py +0 -0
  507. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/reconciler/__init__.py +0 -0
  508. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/reconciler/children.py +0 -0
  509. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/refresh.py +0 -0
  510. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/runtime.py +0 -0
  511. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/sdk/commands.py +0 -0
  512. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/sdk/native_types.py +0 -0
  513. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/sdk/services.py +0 -0
  514. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/sdk/templates/values.kt +0 -0
  515. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/suspense.py +0 -0
  516. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/android_template/app/build.gradle +0 -0
  517. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/android_template/app/proguard-rules.pro +0 -0
  518. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/android_template/app/src/androidTest/java/com/pythonnative/android_template/ExampleInstrumentedTest.kt +0 -0
  519. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/android_template/app/src/debug/AndroidManifest.xml +0 -0
  520. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/android_template/app/src/main/AndroidManifest.xml +0 -0
  521. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/android_template/app/src/main/java/com/pythonnative/android_template/MainActivity.kt +0 -0
  522. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/android_template/app/src/main/java/com/pythonnative/android_template/ScreenFragment.kt +0 -0
  523. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/android_template/app/src/main/res/drawable/ic_launcher_background.xml +0 -0
  524. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/android_template/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +0 -0
  525. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/android_template/app/src/main/res/layout/activity_main.xml +0 -0
  526. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +0 -0
  527. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +0 -0
  528. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-hdpi/ic_launcher.webp +0 -0
  529. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp +0 -0
  530. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-mdpi/ic_launcher.webp +0 -0
  531. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp +0 -0
  532. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xhdpi/ic_launcher.webp +0 -0
  533. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp +0 -0
  534. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp +0 -0
  535. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp +0 -0
  536. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp +0 -0
  537. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp +0 -0
  538. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/android_template/app/src/main/res/navigation/nav_graph.xml +0 -0
  539. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/android_template/app/src/main/res/values/colors.xml +0 -0
  540. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/android_template/app/src/main/res/values/strings.xml +0 -0
  541. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/android_template/app/src/main/res/values/themes.xml +0 -0
  542. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/android_template/app/src/main/res/values-night/themes.xml +0 -0
  543. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/android_template/app/src/main/res/xml/backup_rules.xml +0 -0
  544. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/android_template/app/src/main/res/xml/data_extraction_rules.xml +0 -0
  545. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/android_template/app/src/test/java/com/pythonnative/android_template/ExampleUnitTest.kt +0 -0
  546. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/android_template/build.gradle +0 -0
  547. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/android_template/gradle/wrapper/gradle-wrapper.jar +0 -0
  548. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/android_template/gradle/wrapper/gradle-wrapper.properties +0 -0
  549. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/android_template/gradle.properties +0 -0
  550. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/android_template/gradlew +0 -0
  551. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/android_template/gradlew.bat +0 -0
  552. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/android_template/settings.gradle +0 -0
  553. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/ios_template/ios_template/AppDelegate.swift +0 -0
  554. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/ios_template/ios_template/Assets.xcassets/AccentColor.colorset/Contents.json +0 -0
  555. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/ios_template/ios_template/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -0
  556. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/ios_template/ios_template/Assets.xcassets/Contents.json +0 -0
  557. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/ios_template/ios_template/Base.lproj/LaunchScreen.storyboard +0 -0
  558. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/ios_template/ios_template/BridgingHeader.h +0 -0
  559. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/ios_template/ios_template/Info.plist +0 -0
  560. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/ios_template/ios_template/PrivacyInfo.xcprivacy +0 -0
  561. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/ios_template/ios_template/PythonRuntime.swift +0 -0
  562. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/ios_template/ios_template/SceneDelegate.swift +0 -0
  563. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/ios_template/ios_template/ViewController.swift +0 -0
  564. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/ios_template/ios_template.xcodeproj/project.pbxproj +0 -0
  565. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/ios_template/ios_template.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -0
  566. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/ios_template/ios_templateTests/ios_templateTests.swift +0 -0
  567. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/ios_template/ios_templateUITests/ios_templateUITests.swift +0 -0
  568. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/templates/ios_template/ios_templateUITests/ios_templateUITestsLaunchTests.swift +0 -0
  569. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/testing/__init__.py +0 -0
  570. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/testing/clock.py +0 -0
  571. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/testing/harness.py +0 -0
  572. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative/testing/queries.py +0 -0
  573. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative.egg-info/dependency_links.txt +0 -0
  574. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative.egg-info/entry_points.txt +0 -0
  575. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative.egg-info/requires.txt +0 -0
  576. {pythonnative-0.46.0 → pythonnative-0.48.0}/src/pythonnative.egg-info/top_level.txt +0 -0
  577. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_alert.py +0 -0
  578. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_animated.py +0 -0
  579. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_animated_easing.py +0 -0
  580. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_animated_graph.py +0 -0
  581. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_assets.py +0 -0
  582. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_async_hooks.py +0 -0
  583. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_contract_fixtures.py +0 -0
  584. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_device_modules.py +0 -0
  585. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_element.py +0 -0
  586. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_events.py +0 -0
  587. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_gesture_activation.py +0 -0
  588. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_gesture_composition.py +0 -0
  589. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_gestures.py +0 -0
  590. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_handles.py +0 -0
  591. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_interaction_props.py +0 -0
  592. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_ios_log.py +0 -0
  593. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_metric_hooks.py +0 -0
  594. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_native_modules.py +0 -0
  595. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_native_values.py +0 -0
  596. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_net.py +0 -0
  597. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_platform.py +0 -0
  598. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_platform_metrics.py +0 -0
  599. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_ref.py +0 -0
  600. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_release_workflow.py +0 -0
  601. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_runtime.py +0 -0
  602. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_runtime_contracts.py +0 -0
  603. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_sdk.py +0 -0
  604. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_storage.py +0 -0
  605. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_suspense.py +0 -0
  606. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_testing_library.py +0 -0
  607. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_transitions.py +0 -0
  608. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_typed_events.py +0 -0
  609. {pythonnative-0.46.0 → pythonnative-0.48.0}/tests/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pythonnative
3
- Version: 0.46.0
3
+ Version: 0.48.0
4
4
  Summary: Cross-platform native UI toolkit for Android and iOS
5
5
  Author: Owen Carey
6
6
  License: MIT License
@@ -81,7 +81,8 @@ PythonNative is a cross-platform toolkit for building native Android and iOS app
81
81
  - **Native widgets and layout:** Swift and Kotlin component managers own UIKit and Android widgets. The shared Yoga C++ engine computes layout beside the controls, using platform measurements for text and intrinsic sizes.
82
82
  - **Standard asyncio:** Components, effects, event handlers, and tasks run on a dedicated Python application thread. Native UI threads handle widgets, scrolling, and animation frames. Component-owned tasks are canceled on unmount.
83
83
  - **Incremental reconciliation:** State changes update affected component subtrees. Versioned bridge commits validate operations and acknowledge revisions; events and controlled text inputs carry identities that prevent stale updates.
84
- - **Native lists and navigation:** UIKit collection views and Android recycler views recycle cells for fixed or variable row sizes, grids, sections, and horizontal lists. Native navigation containers present logical screen roots at every nesting level while providers and component state remain in the shared Python tree; navigators take screen options, groups, themes, tab-bar styles, and a navigation ref usable outside components.
84
+ - **Typed, Pythonic authoring:** Components return `pn.Node` and their signatures are their props, so a strict type checker verifies element trees and conditional children. Screens are components whose parameters are their route params (`nav.push(ItemScreen(id=42))`), navigators are module-level values with deep links derived from each screen's `path`, one `Theme` dataclass styles the app and its navigators, `StyleSheet` namespaces give styles typed names, and `pn.Store` holds app state with selector-based re-renders. `pn lint` checks the rules of hooks.
85
+ - **Native lists and navigation:** UIKit collection views and Android recycler views recycle cells for fixed or variable row sizes, grids, sections, and horizontal lists. Native navigation containers present logical screen roots at every nesting level while providers and component state remain in the shared Python tree; navigators take screen options, groups, tab-bar styles, and a navigation ref usable outside components.
85
86
  - **Animation and gestures:** Serialized animation graphs support timing with named or bezier easing, springs, React Native's decay model, arithmetic, interpolation, and native scroll and gesture bindings. Swift and Kotlin recognize mobile gestures with Gesture Handler-style activation offsets and update supported animation bindings without Python work on every frame.
86
87
  - **Assets and graphics:** Drop images, fonts, and SVGs under `app/assets/` and reference them by path. Density variants, bundled fonts, a vector `Icon` set, `Svg` drawing, gradients, and blur render natively on both platforms and in the browser preview.
87
88
  - **Device APIs:** Python facades expose camera, location, notifications, storage, permissions, keyboard, dimensions and pixel ratio, device info, localization, accessibility settings, and other native services, with a Python fallback for headless tests. Test permissions and platform behavior on your deployment targets.
@@ -108,7 +109,7 @@ import pythonnative as pn
108
109
 
109
110
 
110
111
  @pn.component
111
- def App():
112
+ def App() -> pn.Node:
112
113
  count, set_count = pn.use_state(0)
113
114
  return pn.Column(
114
115
  pn.Text(f"Count: {count}", style=pn.style(font_size=24, bold=True)),
@@ -116,7 +117,7 @@ def App():
116
117
  "Tap me",
117
118
  on_press=lambda: set_count(count + 1),
118
119
  ),
119
- style=pn.style(spacing=12, padding=16),
120
+ style=pn.style(gap=12, padding=16),
120
121
  )
121
122
  ```
122
123
 
@@ -35,7 +35,8 @@ PythonNative is a cross-platform toolkit for building native Android and iOS app
35
35
  - **Native widgets and layout:** Swift and Kotlin component managers own UIKit and Android widgets. The shared Yoga C++ engine computes layout beside the controls, using platform measurements for text and intrinsic sizes.
36
36
  - **Standard asyncio:** Components, effects, event handlers, and tasks run on a dedicated Python application thread. Native UI threads handle widgets, scrolling, and animation frames. Component-owned tasks are canceled on unmount.
37
37
  - **Incremental reconciliation:** State changes update affected component subtrees. Versioned bridge commits validate operations and acknowledge revisions; events and controlled text inputs carry identities that prevent stale updates.
38
- - **Native lists and navigation:** UIKit collection views and Android recycler views recycle cells for fixed or variable row sizes, grids, sections, and horizontal lists. Native navigation containers present logical screen roots at every nesting level while providers and component state remain in the shared Python tree; navigators take screen options, groups, themes, tab-bar styles, and a navigation ref usable outside components.
38
+ - **Typed, Pythonic authoring:** Components return `pn.Node` and their signatures are their props, so a strict type checker verifies element trees and conditional children. Screens are components whose parameters are their route params (`nav.push(ItemScreen(id=42))`), navigators are module-level values with deep links derived from each screen's `path`, one `Theme` dataclass styles the app and its navigators, `StyleSheet` namespaces give styles typed names, and `pn.Store` holds app state with selector-based re-renders. `pn lint` checks the rules of hooks.
39
+ - **Native lists and navigation:** UIKit collection views and Android recycler views recycle cells for fixed or variable row sizes, grids, sections, and horizontal lists. Native navigation containers present logical screen roots at every nesting level while providers and component state remain in the shared Python tree; navigators take screen options, groups, tab-bar styles, and a navigation ref usable outside components.
39
40
  - **Animation and gestures:** Serialized animation graphs support timing with named or bezier easing, springs, React Native's decay model, arithmetic, interpolation, and native scroll and gesture bindings. Swift and Kotlin recognize mobile gestures with Gesture Handler-style activation offsets and update supported animation bindings without Python work on every frame.
40
41
  - **Assets and graphics:** Drop images, fonts, and SVGs under `app/assets/` and reference them by path. Density variants, bundled fonts, a vector `Icon` set, `Svg` drawing, gradients, and blur render natively on both platforms and in the browser preview.
41
42
  - **Device APIs:** Python facades expose camera, location, notifications, storage, permissions, keyboard, dimensions and pixel ratio, device info, localization, accessibility settings, and other native services, with a Python fallback for headless tests. Test permissions and platform behavior on your deployment targets.
@@ -62,7 +63,7 @@ import pythonnative as pn
62
63
 
63
64
 
64
65
  @pn.component
65
- def App():
66
+ def App() -> pn.Node:
66
67
  count, set_count = pn.use_state(0)
67
68
  return pn.Column(
68
69
  pn.Text(f"Count: {count}", style=pn.style(font_size=24, bold=True)),
@@ -70,7 +71,7 @@ def App():
70
71
  "Tap me",
71
72
  on_press=lambda: set_count(count + 1),
72
73
  ),
73
- style=pn.style(spacing=12, padding=16),
74
+ style=pn.style(gap=12, padding=16),
74
75
  )
75
76
  ```
76
77
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pythonnative"
7
- version = "0.46.0"
7
+ version = "0.48.0"
8
8
  description = "Cross-platform native UI toolkit for Android and iOS"
9
9
  authors = [
10
10
  { name = "Owen Carey" }
@@ -18,16 +18,20 @@ Key building blocks:
18
18
  [`use_effect`][pythonnative.use_effect],
19
19
  [`use_reducer`][pythonnative.use_reducer], etc.) manage state, side
20
20
  effects, and context inside `@component` functions.
21
- - **Navigation** is built from
22
- [`NavigationContainer`][pythonnative.NavigationContainer] plus one of
23
- the [`create_stack_navigator`][pythonnative.create_stack_navigator],
24
- [`create_tab_navigator`][pythonnative.create_tab_navigator], or
25
- [`create_drawer_navigator`][pythonnative.create_drawer_navigator]
26
- factories.
27
- - **Styling** uses a single ``style`` dict per element (or a list of
28
- dicts), composable via [`StyleSheet`][pythonnative.StyleSheet].
29
- PythonNative ships a fully-typed [`Style`][pythonnative.style.Style]
30
- TypedDict so editors and ``mypy`` validate every key as you type.
21
+ - **Navigation**: screens are components whose parameters are their
22
+ route params, listed in module-level
23
+ [`StackNavigator`][pythonnative.StackNavigator],
24
+ [`TabNavigator`][pythonnative.TabNavigator], or
25
+ [`DrawerNavigator`][pythonnative.DrawerNavigator] values and rendered
26
+ by [`NavigationContainer`][pythonnative.NavigationContainer].
27
+ ``nav.push(ItemScreen(id=42))`` is checked by the type checker.
28
+ - **Styling** uses a ``style`` dict per element (or a list of dicts),
29
+ typed by the [`Style`][pythonnative.style.Style] ``TypedDict``.
30
+ [`StyleSheet`][pythonnative.StyleSheet] namespaces group named
31
+ styles, and one [`Theme`][pythonnative.Theme] styles the app and
32
+ its navigators.
33
+ - **State** lives in hooks for a component and in a typed
34
+ [`Store`][pythonnative.Store] for the app.
31
35
  - **Animations** use the ``Animated`` namespace. Serialized graphs
32
36
  connect values, arithmetic, interpolation, and style bindings.
33
37
  Native timing, spring, decay, scroll, and gesture drivers update
@@ -52,17 +56,17 @@ Example:
52
56
  import pythonnative as pn
53
57
 
54
58
  @pn.component
55
- def App():
59
+ def App() -> pn.Node:
56
60
  count, set_count = pn.use_state(0)
57
61
  return pn.Column(
58
62
  pn.Text(f"Count: {count}", style=pn.style(font_size=24)),
59
63
  pn.Button("+", on_press=lambda: set_count(count + 1)),
60
- style=pn.style(spacing=12),
64
+ style=pn.style(gap=12),
61
65
  )
62
66
  ```
63
67
  """
64
68
 
65
- __version__ = "0.46.0"
69
+ __version__ = "0.48.0"
66
70
 
67
71
  from . import appearance, diagnostics, gestures, icons, runtime, sdk, svg
68
72
  from .alerts import Alert
@@ -117,8 +121,9 @@ from .components import (
117
121
  WebNavigationEvent,
118
122
  WebView,
119
123
  )
124
+ from .components.props import AccessibilityProps, ViewProps
120
125
  from .diagnostics import HookOrderError
121
- from .element import Element
126
+ from .element import Element, Node
122
127
  from .gestures import GestureSpec, SwipeDirection
123
128
  from .handles import ScrollOffset, ScrollViewHandle, TextInputHandle, ViewHandle, WebViewHandle
124
129
  from .hooks import (
@@ -190,28 +195,24 @@ from .native_modules import (
190
195
  use_screen_reader_enabled,
191
196
  )
192
197
  from .navigation import (
193
- DARK_NAVIGATION_THEME,
194
- DEFAULT_NAVIGATION_THEME,
195
- LinkingConfig,
198
+ DrawerNavigator,
199
+ Group,
196
200
  Navigation,
197
- NavigationColors,
198
201
  NavigationContainer,
199
202
  NavigationRef,
200
203
  NavigationState,
201
- NavigationTheme,
204
+ Navigator,
202
205
  Route,
203
- ScreenGroup,
206
+ Screen,
204
207
  ScreenOptions,
208
+ StackNavigator,
205
209
  TabBarStyle,
206
- create_drawer_navigator,
207
- create_navigation_ref,
208
- create_stack_navigator,
209
- create_tab_navigator,
210
+ TabNavigator,
210
211
  use_focus_effect,
211
212
  use_is_focused,
212
213
  use_navigation,
213
- use_navigation_theme,
214
214
  use_route,
215
+ use_screen_options,
215
216
  )
216
217
  from .net import HTTPError, Response, fetch
217
218
  from .platform import Platform, get_platform
@@ -220,9 +221,9 @@ from .runtime import run_async, run_blocking
220
221
  from .scheduler import batch_updates
221
222
  from .sdk import Props, define_component, element_factory
222
223
  from .storage import AsyncStorage, use_persisted_state
224
+ from .store import Store, use_store
223
225
  from .style import (
224
- DEFAULT_DARK_THEME,
225
- DEFAULT_LIGHT_THEME,
226
+ ABSOLUTE_FILL,
226
227
  AccessibilityAction,
227
228
  AccessibilityState,
228
229
  AccessibilityValue,
@@ -254,15 +255,23 @@ from .style import (
254
255
  TextAlign,
255
256
  TextDecoration,
256
257
  TextTransform,
257
- Theme,
258
- ThemeContext,
259
258
  TransformSpec,
260
- default_theme,
261
259
  resolve_style,
262
260
  style,
263
- use_theme,
264
261
  )
265
262
  from .suspense import Resource, lazy, start_resource
263
+ from .theme import (
264
+ DARK_THEME,
265
+ LIGHT_THEME,
266
+ Colors,
267
+ Radii,
268
+ Spacing,
269
+ Theme,
270
+ ThemeProvider,
271
+ Typography,
272
+ use_styles,
273
+ use_theme,
274
+ )
266
275
 
267
276
  __all__ = [
268
277
  "UNSET",
@@ -276,6 +285,9 @@ __all__ = [
276
285
  "DatePicker",
277
286
  "ErrorBoundary",
278
287
  "FlatList",
288
+ "ListData",
289
+ "Section",
290
+ "ViewableItem",
279
291
  "Fragment",
280
292
  "Icon",
281
293
  "IconName",
@@ -311,6 +323,9 @@ __all__ = [
311
323
  "TouchableOpacity",
312
324
  "View",
313
325
  "WebView",
326
+ # Shared props
327
+ "AccessibilityProps",
328
+ "ViewProps",
314
329
  # Typed events
315
330
  "ContentSizeEvent",
316
331
  "KeyPressEvent",
@@ -331,6 +346,7 @@ __all__ = [
331
346
  # Core
332
347
  "Component",
333
348
  "Element",
349
+ "Node",
334
350
  "component",
335
351
  "create_screen",
336
352
  "memo",
@@ -370,28 +386,24 @@ __all__ = [
370
386
  "lazy",
371
387
  "start_resource",
372
388
  # Navigation
373
- "DARK_NAVIGATION_THEME",
374
- "DEFAULT_NAVIGATION_THEME",
375
- "LinkingConfig",
389
+ "DrawerNavigator",
390
+ "Group",
376
391
  "Navigation",
377
- "NavigationColors",
378
392
  "NavigationContainer",
379
393
  "NavigationRef",
380
394
  "NavigationState",
381
- "NavigationTheme",
395
+ "Navigator",
382
396
  "Route",
383
- "ScreenGroup",
397
+ "Screen",
384
398
  "ScreenOptions",
399
+ "StackNavigator",
385
400
  "TabBarStyle",
386
- "create_navigation_ref",
387
- "use_navigation_theme",
388
- "create_drawer_navigator",
389
- "create_stack_navigator",
390
- "create_tab_navigator",
401
+ "TabNavigator",
391
402
  "use_focus_effect",
392
403
  "use_is_focused",
393
404
  "use_navigation",
394
405
  "use_route",
406
+ "use_screen_options",
395
407
  # Styling - typed primitives
396
408
  "AccessibilityAction",
397
409
  "AccessibilityState",
@@ -402,8 +414,6 @@ __all__ = [
402
414
  "AutoCapitalize",
403
415
  "BorderStyle",
404
416
  "Color",
405
- "DEFAULT_DARK_THEME",
406
- "DEFAULT_LIGHT_THEME",
407
417
  "Dimension",
408
418
  "Display",
409
419
  "DynamicColor",
@@ -427,9 +437,16 @@ __all__ = [
427
437
  "TextDecoration",
428
438
  "TextTransform",
429
439
  "Theme",
430
- "ThemeContext",
440
+ "ThemeProvider",
441
+ "Colors",
442
+ "Typography",
443
+ "Spacing",
444
+ "Radii",
445
+ "LIGHT_THEME",
446
+ "DARK_THEME",
447
+ "ABSOLUTE_FILL",
448
+ "use_styles",
431
449
  "TransformSpec",
432
- "default_theme",
433
450
  "resolve_style",
434
451
  "style",
435
452
  "use_theme",
@@ -484,6 +501,9 @@ __all__ = [
484
501
  "Vibration",
485
502
  "use_app_state",
486
503
  "use_net_info",
504
+ # Stores
505
+ "Store",
506
+ "use_store",
487
507
  # Networking + persistence
488
508
  "AsyncStorage",
489
509
  "fetch",
@@ -505,3 +525,5 @@ __all__ = [
505
525
  "element_factory",
506
526
  "sdk",
507
527
  ]
528
+
529
+ from .list_data import ListData, Section, ViewableItem
@@ -2180,7 +2180,10 @@ def use_animated_value(initial: float = 0.0) -> AnimatedValue:
2180
2180
  """
2181
2181
  from .hooks import use_memo
2182
2182
 
2183
- return use_memo(lambda: AnimatedValue(initial), [])
2183
+ return use_memo(
2184
+ lambda: AnimatedValue(initial),
2185
+ [], # pn: ignore[PN103] the initial value is read once, like use_state
2186
+ )
2184
2187
 
2185
2188
 
2186
2189
  __all__ = [
@@ -120,5 +120,8 @@ def get_system_color_scheme() -> str:
120
120
  def reset_color_scheme() -> None:
121
121
  """Reset to system ``"light"`` with no override. Intended for tests."""
122
122
  global _system_scheme, _override_scheme
123
+ changed = get_color_scheme() != "light"
123
124
  _system_scheme = "light"
124
125
  _override_scheme = None
126
+ if changed:
127
+ _notify_subscribers()
@@ -44,6 +44,7 @@ from dataclasses import dataclass, field
44
44
  from pathlib import Path
45
45
  from typing import Any, Dict, Iterable, List, Mapping, Optional, Sequence, Tuple, Union
46
46
 
47
+ from ..utils import overlay_root
47
48
  from .fonts import FontFace, FontParseError, read_font_face, weight_from_name
48
49
 
49
50
  __all__ = [
@@ -437,8 +438,6 @@ def assets_roots() -> List[Path]:
437
438
  back to the native ``Assets`` module.
438
439
  """
439
440
  roots: List[Path] = []
440
- from ..hot_reload import overlay_root
441
-
442
441
  overlay = overlay_root()
443
442
  if overlay:
444
443
  roots.append(Path(overlay) / "app" / ASSETS_DIR)
@@ -560,7 +559,6 @@ def configure_native(paths: Optional[Iterable[str]] = None) -> bool:
560
559
  if paths is not None and not any(_is_asset_path(path) for path in paths):
561
560
  return False
562
561
  from ..bridge import has_transport
563
- from ..hot_reload import overlay_root
564
562
 
565
563
  overlay = overlay_root()
566
564
  if not overlay or not has_transport():
@@ -79,10 +79,11 @@ def start(dev: bool = False, strict: bool = False) -> Dict[str, Any]:
79
79
  if dev_mode:
80
80
  # Debug builds are dev clients: connect to `pn start` when
81
81
  # the build (or a remembered connection) names a server.
82
+ # Release bundles omit this module; they never pass dev=True.
82
83
  from . import devclient
83
84
 
84
85
  client = devclient.start_if_configured()
85
- status_["dev_server"] = client.url if client is not None else None
86
+ status_["dev_server"] = client.server_label if client is not None else None
86
87
  # An overlay from the last session may already hold assets the
87
88
  # bundle doesn't; point the native resolver at it right away.
88
89
  from .assets import configure_native
@@ -199,7 +199,7 @@ def native_callback(kind: str, tag: int, name: str, payload: str) -> Optional[st
199
199
 
200
200
  loop = get_loop()
201
201
  if loop.is_running() and not _on_loop_thread(loop):
202
- if kind == "event" and name in {"on_scroll", "on_selection_change", "on_gesture_update"}:
202
+ if kind == "event" and name in {"on_scroll", "on_window", "on_selection_change", "on_gesture_update"}:
203
203
  key = (tag, name)
204
204
  slot = _continuous.get(key)
205
205
  if slot is None:
@@ -252,7 +252,11 @@ def _on_event(tag: int, name: str, payload: str) -> Optional[str]:
252
252
  args = codec.loads(payload)
253
253
  from ..native_views import get_backend
254
254
 
255
- accept = getattr(get_backend(), "accept_event", None)
255
+ backend = get_backend()
256
+ defer = getattr(backend, "defer_event", None)
257
+ if defer is not None and defer(tag, name, args):
258
+ return None
259
+ accept = getattr(backend, "accept_event", None)
256
260
  if accept is not None:
257
261
  if not accept(tag, name, args):
258
262
  return None
@@ -21,6 +21,7 @@ class AndroidTransport:
21
21
  """Thin wrapper over the static ``PNBridge`` methods."""
22
22
 
23
23
  name = "android"
24
+ asynchronous_commits = True
24
25
 
25
26
  def __init__(self, bridge_class: Any = None) -> None:
26
27
  if bridge_class is None:
@@ -131,15 +131,20 @@ def build_transaction(
131
131
  """
132
132
  from ..sdk.schema import COMPONENTS
133
133
 
134
- names = dict(types or {})
134
+ names: dict[int, str] = {}
135
+ base_names = types or {}
136
+ fields_cache: dict[str, frozenset[str]] = {}
135
137
 
136
138
  def python_fields(name: str) -> frozenset[str]:
139
+ if name in fields_cache:
140
+ return fields_cache[name]
137
141
  schema = COMPONENTS.get(name)
138
- return (
142
+ fields_cache[name] = (
139
143
  frozenset(key for key, field in schema.props.items() if field.get("native", {}).get("python_only"))
140
144
  if schema
141
145
  else frozenset()
142
146
  )
147
+ return fields_cache[name]
143
148
 
144
149
  encoded: List[Any] = []
145
150
  sidecar: List[Tuple[int, Dict[str, Any]]] = []
@@ -152,7 +157,7 @@ def build_transaction(
152
157
  sidecar.append((op.tag, python))
153
158
  elif isinstance(op, UpdateOp):
154
159
  removed = [key for key, value in op.changed_props.items() if value is UNSET]
155
- wire, python = split_props(op.changed_props, python_fields(names.get(op.tag, "")))
160
+ wire, python = split_props(op.changed_props, python_fields(names.get(op.tag) or base_names.get(op.tag, "")))
156
161
  encoded.append(["u", op.tag, wire, removed])
157
162
  if python:
158
163
  sidecar.append((op.tag, python))
@@ -10,11 +10,12 @@ from __future__ import annotations
10
10
  import math
11
11
  from collections.abc import Iterator, MutableMapping
12
12
  from dataclasses import dataclass, field
13
- from typing import Any
13
+ from typing import Any, Callable
14
14
 
15
15
  from ..profiling import count, profiled
16
+ from .list_store import ListStore
16
17
 
17
- PROTOCOL_VERSION = 3
18
+ PROTOCOL_VERSION = 4
18
19
 
19
20
 
20
21
  class CommitError(RuntimeError):
@@ -29,6 +30,7 @@ class ViewState:
29
30
  props: dict[str, Any]
30
31
  parent: int | None = None
31
32
  children: list[int] = field(default_factory=list)
33
+ list_store: ListStore | None = None
32
34
 
33
35
 
34
36
  class ViewOverlay(MutableMapping[int, ViewState]):
@@ -72,7 +74,9 @@ class ViewOverlay(MutableMapping[int, ViewState]):
72
74
  """Return a writable copy of this record, copying it at most once."""
73
75
  if tag not in self.changed:
74
76
  view = self[tag]
75
- self.changed[tag] = ViewState(view.type_name, dict(view.props), view.parent, list(view.children))
77
+ self.changed[tag] = ViewState(
78
+ view.type_name, dict(view.props), view.parent, list(view.children), view.list_store
79
+ )
76
80
  count("commit.records_copied")
77
81
  return self.changed[tag]
78
82
 
@@ -93,11 +97,13 @@ class CommitState:
93
97
  revision: int = 0
94
98
  views: MutableMapping[int, ViewState] = field(default_factory=dict)
95
99
 
100
+ _list_publications: dict[int, Callable[[], None]] = field(default_factory=dict)
101
+
96
102
  @profiled("validation")
97
103
  def prepare(self, envelope: Any) -> CommitState:
98
104
  """Validate without mutating this state and return the candidate state."""
99
105
  if not isinstance(envelope, dict) or envelope.get("version") != PROTOCOL_VERSION:
100
- raise CommitError("Expected a protocol v3 commit envelope; rebuild the native client")
106
+ raise CommitError("Expected a protocol v4 commit envelope; rebuild the native client")
101
107
  application, surface, revision = (envelope.get(k) for k in ("application", "surface", "revision"))
102
108
  if not isinstance(application, str) or not application or type(surface) is not int or surface <= 0:
103
109
  raise CommitError("Invalid application or surface identity")
@@ -120,6 +126,9 @@ class CommitState:
120
126
 
121
127
  def publish(self) -> CommitState:
122
128
  """Accept a successfully mounted candidate; the prior state is consumed."""
129
+ for publish in self._list_publications.values():
130
+ publish()
131
+ self._list_publications.clear()
123
132
  if isinstance(self.views, ViewOverlay):
124
133
  self.views = self.views.publish()
125
134
  return self
@@ -139,7 +148,11 @@ class CommitState:
139
148
  if tag in self.views or not isinstance(op[2], str) or not op[2] or not isinstance(op[3], dict):
140
149
  raise ValueError("Invalid or duplicate create")
141
150
  self._validate_props(op[2], op[3], False)
142
- self.views[tag] = ViewState(op[2], dict(op[3]))
151
+ view = ViewState(op[2], dict(op[3]))
152
+ self.views[tag] = view
153
+ if op[2] == "VirtualList":
154
+ view.list_store = ListStore()
155
+ self._prepare_list(tag, view, op[3])
143
156
  return
144
157
  view = self.views[tag] if code == "f" else self._edit(tag)
145
158
  if code == "u":
@@ -154,6 +167,8 @@ class CommitState:
154
167
  from ..mutations import UNSET
155
168
 
156
169
  self._validate_props(view.type_name, {name: UNSET for name in removed}, True)
170
+ if view.list_store is not None:
171
+ self._prepare_list(tag, view, op[2])
157
172
  view.props.update(op[2])
158
173
  for name in removed:
159
174
  view.props.pop(name, None)
@@ -185,6 +200,13 @@ class CommitState:
185
200
  if op[4] < 0 or op[5] < 0:
186
201
  raise ValueError("Frame sizes must be nonnegative")
187
202
 
203
+ def _prepare_list(self, tag: int, view: ViewState, props: dict[str, Any]) -> None:
204
+ if "dataset" in props:
205
+ if tag in self._list_publications:
206
+ raise ValueError("A list may receive only one dataset patch per commit")
207
+ assert view.list_store is not None
208
+ self._list_publications[tag] = view.list_store.prepare(props["dataset"])
209
+
188
210
  @staticmethod
189
211
  def _validate_props(name: str, props: dict[str, Any], partial: bool) -> None:
190
212
  from ..sdk.schema import COMPONENTS
@@ -125,9 +125,9 @@ class FakeTransport:
125
125
  child.parent = parent
126
126
  elif code == "d":
127
127
  _, tag = op
128
- view = self.views.pop(tag, None)
129
- if view is None:
128
+ if tag not in self.views:
130
129
  raise AssertionError(f"destroy: unknown tag {tag}")
130
+ view = self.views.pop(tag)
131
131
  if view.parent is not None:
132
132
  view.parent.children.remove(view)
133
133
  view.parent = None
@@ -26,6 +26,7 @@ class IOSTransport:
26
26
  """Bind the ``pn_bridge_*`` symbols and expose them as Python methods."""
27
27
 
28
28
  name = "ios"
29
+ asynchronous_commits = True
29
30
 
30
31
  def __init__(self, lib: Any = None) -> None:
31
32
  self._lib = lib if lib is not None else ctypes.CDLL(None)