pythonnative 0.48.0__tar.gz → 0.49.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.
- {pythonnative-0.48.0/src/pythonnative.egg-info → pythonnative-0.49.0}/PKG-INFO +1 -1
- {pythonnative-0.48.0 → pythonnative-0.49.0}/pyproject.toml +2 -1
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/__init__.py +94 -26
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/bootstrap.py +17 -9
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/bridge/__init__.py +58 -62
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/bridge/android.py +2 -14
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/bridge/commits.py +16 -5
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/bridge/fake.py +9 -9
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/bridge/ios.py +7 -40
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/bridge/web.py +4 -45
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/cli/pn.py +4 -1
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/component.py +111 -8
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/components/__init__.py +19 -4
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/components/_base.py +1 -1
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/bridge.js +3 -28
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/host.js +10 -23
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/renderer.js +6 -30
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/shell.js +0 -2
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/diagnostics.py +19 -8
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/hooks.py +53 -12
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/hosts/native.py +5 -7
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/journal.py +118 -19
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/layout.py +4 -2
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/AndroidManifest.xml +3 -3
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/generated/PNContracts.kt +3 -1
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/PNBridge.kt +41 -54
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/PythonHost.kt +4 -4
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/CommitState.kt +97 -45
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNTransaction.kt +4 -11
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/TransactionApplier.kt +4 -8
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ComponentManager.kt +6 -12
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/layout/NativeLayout.kt +0 -1
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/screens/PNScreenFragment.kt +8 -10
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/NativeLifecycleTest.kt +28 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/PNTransactionTest.kt +2 -4
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNBridge.swift +48 -61
- pythonnative-0.49.0/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNCommit.swift +181 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNTransaction.swift +3 -11
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewState.swift +7 -10
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNVirtualListManager.swift +11 -3
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Generated/NativeProps.swift +105 -105
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Generated/PNContracts.swift +3 -1
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Layout/PNLayout.swift +0 -1
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Screens/PNViewController.swift +69 -21
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNCommitTests.swift +20 -3
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNContractParityTests.swift +0 -1
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNLifecycleTests.swift +11 -3
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNParityTests.swift +1 -2
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNTransactionTests.swift +1 -1
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/profiling.py +3 -1
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/project/android.py +12 -5
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/project/artifacts.py +44 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/project/builder.py +44 -30
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/project/bundle.py +1 -0
- pythonnative-0.49.0/src/pythonnative/project/bytecode.py +81 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/project/doctor.py +3 -5
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/project/ios.py +15 -4
- pythonnative-0.49.0/src/pythonnative/project/runtime_assets.py +373 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/reconciler/core.py +19 -10
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/reconciler/vnode.py +13 -1
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/refresh.py +42 -9
- pythonnative-0.49.0/src/pythonnative/sdk/_builtin_contracts.json +1 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/sdk/builtins.py +33 -6
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/sdk/codegen.py +3 -3
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/sdk/contract_codegen.py +2 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/sdk/schema.py +144 -19
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/sdk/templates/contracts.kt +2 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/sdk/templates/contracts.swift +2 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/build.gradle +0 -4
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/AndroidManifest.xml +0 -4
- pythonnative-0.49.0/src/pythonnative/templates/android_template/app/src/main/java/com/pythonnative/android_template/MainActivity.kt +167 -0
- pythonnative-0.49.0/src/pythonnative/templates/ios_template/PNFinalizePython.sh +29 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/ios_template/ios_template/AppDelegate.swift +3 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/ios_template/ios_template/PythonRuntime.swift +68 -10
- pythonnative-0.49.0/src/pythonnative/templates/ios_template/ios_template/ViewController.swift +22 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/ios_template/ios_template.xcodeproj/project.pbxproj +3 -240
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/testing/pytest_plugin.py +1 -1
- {pythonnative-0.48.0 → pythonnative-0.49.0/src/pythonnative.egg-info}/PKG-INFO +1 -1
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative.egg-info/SOURCES.txt +4 -5
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_async_hooks.py +19 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_bridge.py +14 -11
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_codegen.py +2 -1
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_core_semantics.py +23 -0
- pythonnative-0.49.0/tests/test_performance_budgets.py +164 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_release_packaging.py +3 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_runtime_correctness.py +46 -12
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_runtime_overhaul.py +8 -2
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_web_transport.py +32 -39
- pythonnative-0.48.0/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNCommit.swift +0 -153
- pythonnative-0.48.0/src/pythonnative/project/runtime_assets.py +0 -200
- pythonnative-0.48.0/src/pythonnative/templates/android_template/app/src/androidTest/java/com/pythonnative/android_template/ExampleInstrumentedTest.kt +0 -24
- pythonnative-0.48.0/src/pythonnative/templates/android_template/app/src/main/java/com/pythonnative/android_template/MainActivity.kt +0 -130
- pythonnative-0.48.0/src/pythonnative/templates/android_template/app/src/test/java/com/pythonnative/android_template/ExampleUnitTest.kt +0 -17
- pythonnative-0.48.0/src/pythonnative/templates/ios_template/ios_template/ViewController.swift +0 -23
- pythonnative-0.48.0/src/pythonnative/templates/ios_template/ios_templateTests/ios_templateTests.swift +0 -36
- pythonnative-0.48.0/src/pythonnative/templates/ios_template/ios_templateUITests/ios_templateUITests.swift +0 -41
- pythonnative-0.48.0/src/pythonnative/templates/ios_template/ios_templateUITests/ios_templateUITestsLaunchTests.swift +0 -32
- {pythonnative-0.48.0 → pythonnative-0.49.0}/.github/workflows/release.yml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/LICENSE +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/MANIFEST.in +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/README.md +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/scripts/check-distributions.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/scripts/cibuildwheel.toml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/scripts/release-assets.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/setup.cfg +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/setup.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/_ios_log.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/alerts.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/animated.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/animation_graph.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/appearance.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/assets/__init__.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/assets/fonts.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/bridge/codec.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/bridge/list_store.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/cli/__init__.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/components/controls.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/components/events.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/components/graphics.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/components/layout.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/components/lists.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/components/media.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/components/overlays.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/components/pressable.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/components/props.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/components/structural.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/components/text.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devclient.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/__init__.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/auth.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/server.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/animation_graph.js +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/assets.js +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/colors.js +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/contracts.js +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/index.html +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/layout.js +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/list-store.js +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/preview.css +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/yoga/LICENSE +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/yoga/binaries/yoga-wasm-base64-esm.js +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/yoga/src/generated/YGEnums.d.ts +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/yoga/src/generated/YGEnums.js +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/yoga/src/generated/YGEnums.js.map +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/yoga/src/index.d.ts +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/yoga/src/index.js +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/yoga/src/index.js.map +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/yoga/src/load.d.ts +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/yoga/src/load.js +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/yoga/src/load.js.map +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/yoga/src/wrapAssembly.d.ts +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/yoga/src/wrapAssembly.js +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/static/yoga/src/wrapAssembly.js.map +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/watcher.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/devserver/ws.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/element.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/equality.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/events.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/gestures.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/handles.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/hosts/__init__.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/hosts/base.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/hot_reload.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/icons/LICENSE-lucide.txt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/icons/__init__.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/icons/_lucide.json +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/icons/_names.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/lint.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/list_data.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/mutations.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/build.gradle +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/gradle.properties +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/settings.gradle +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/cpp/CMakeLists.txt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/cpp/yoga_jni.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/generated/NativeModules.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/generated/NativeProps.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/generated/NativeValues.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/AnimationGraph.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/AnimationSpecs.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/PNAnimator.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/assets/PNAssets.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/JsonUtil.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/MainThread.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNLog.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNRegistry.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/ViewRegistry.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/BuiltinComponents.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ButtonManager.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ContainerManagers.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ControlManagers.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/DatePickerManager.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/EffectManagers.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ImageLoader.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ImageManager.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ListStore.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ModalManager.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PNColor.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PNTheme.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PickerManager.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PortalManager.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PressableManager.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ScreenStackManager.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ScreenTransitions.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ScrollViewManager.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/SegmentedControlManager.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/StatusBarManager.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/SvgManager.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TabBarManager.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TextInputManager.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TextManager.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ViewStyler.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/VirtualListManager.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/WebViewManager.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/GestureArbiter.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/GestureCoordinator.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/GestureRecognizers.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/graphics/SvgPath.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/layout/YogaNode.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/AssetModules.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/BuiltinModules.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/DeviceModules.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/ErrorOverlay.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/HostModule.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/MediaModules.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/NativeModule.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/NotificationsModule.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/PermissionsModule.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/PlatformModules.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/StorageModules.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/SystemModules.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/plugins/GeneratedPlugins.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/screens/PNKeyboard.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/screens/ScreenRegistry.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNAccessibilityDelegate.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNBorderDrawable.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNEditText.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNFrameLayout.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNScrollViews.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/res/anim/pn_fade_in.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/res/anim/pn_fade_out.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/res/anim/pn_hold.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/res/anim/pn_slide_in_bottom.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/res/anim/pn_slide_in_left.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/res/anim/pn_slide_in_right.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/res/anim/pn_slide_out_bottom.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/res/anim/pn_slide_out_left.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/res/anim/pn_slide_out_right.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/res/drawable/pn_ic_arrow_back.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/res/values/pn_ids.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/main/res/xml/pn_file_paths.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/generated/PNRecordFixtures.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/AnimationSpecsTest.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/AssetsAndSvgTest.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/ContractFixtureTest.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/GestureArbiterTest.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/PNColorTest.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/PromiseTest.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/RoundOneRobolectricTest.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/RoundTwoLogicTest.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/RoundTwoRobolectricTest.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/ScreenTransitionsTest.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/StyleAccessibilityDeviceTest.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Package.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Animation/PNAnimationGraph.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Animation/PNAnimator.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNRegistry.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNViewRegistry.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNButtonManagers.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNColor.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNComponentManager.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNContainerView.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNControlManagers.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNEffectManagers.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNImageManager.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNListStore.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNOverlayManagers.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNPressableManager.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNScreenStackManager.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNScrollViewManager.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNSvgManager.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTabBarManager.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTextInputManager.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTextManager.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTransform.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewManager.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewStyler.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNWebViewManager.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Generated/NativeModules.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Generated/NativeValues.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Gestures/PNGestureCoordinator.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/AlertModule.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/EnvironmentModules.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/HostModule.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/ImagesModule.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/LifecycleModules.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/MediaModules.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/PNErrorOverlay.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/PNNativeModule.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/PermissionModules.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/SystemModules.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Plugins/PNPluginRegistration.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Resources/PrivacyInfo.xcprivacy +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Screens/PNScreenRegistry.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNAssets.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNCompat.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNJSON.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNLog.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNWindow.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Tests/NativeTests.xcodeproj/project.pbxproj +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Tests/NativeTests.xcodeproj/xcshareddata/xcschemes/NativeTests.xcscheme +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/Fixtures/validation.json +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNAnimationGraphTests.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNAssetTests.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNColorTests.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNContractFixtureTests.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNGestureTests.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNManagerTests.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNModuleTests.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNRecordFixtures.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/ios/Tests/TestHost/main.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/LICENSE +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/Package.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/VENDORED.md +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/include/PNStyle.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/include/module.modulemap +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/include/yoga/YGConfig.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/include/yoga/YGEnums.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/include/yoga/YGMacros.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/include/yoga/YGNode.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/include/yoga/YGNodeLayout.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/include/yoga/YGNodeStyle.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/include/yoga/YGPixelGrid.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/include/yoga/YGValue.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/include/yoga/Yoga.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/python.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/style.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/CMakeLists.txt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/YGConfig.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/YGConfig.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/YGEnums.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/YGEnums.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/YGMacros.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/YGNode.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/YGNode.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/YGNodeLayout.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/YGNodeLayout.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/YGNodeStyle.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/YGNodeStyle.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/YGPixelGrid.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/YGPixelGrid.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/YGValue.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/YGValue.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/Yoga.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/algorithm/AbsoluteLayout.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/algorithm/AbsoluteLayout.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/algorithm/Align.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/algorithm/Baseline.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/algorithm/Baseline.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/algorithm/BoundAxis.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/algorithm/Cache.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/algorithm/Cache.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/algorithm/CalculateLayout.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/algorithm/CalculateLayout.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/algorithm/FlexDirection.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/algorithm/FlexLine.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/algorithm/FlexLine.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/algorithm/PixelGrid.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/algorithm/PixelGrid.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/algorithm/SizingMode.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/algorithm/TrailingPosition.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/config/Config.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/config/Config.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/debug/AssertFatal.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/debug/AssertFatal.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/debug/Log.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/debug/Log.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/Align.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/BoxSizing.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/Dimension.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/Direction.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/Display.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/Edge.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/Errata.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/ExperimentalFeature.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/FlexDirection.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/Gutter.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/Justify.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/LogLevel.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/MeasureMode.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/NodeType.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/Overflow.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/PhysicalEdge.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/PositionType.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/Unit.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/Wrap.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/enums/YogaEnums.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/event/event.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/event/event.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/module.modulemap +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/node/CachedMeasurement.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/node/LayoutResults.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/node/LayoutResults.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/node/LayoutableChildren.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/node/Node.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/node/Node.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/numeric/Comparison.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/numeric/FloatOptional.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/style/SmallValueBuffer.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/style/Style.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/style/StyleLength.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/style/StyleValueHandle.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native/yoga/yoga/style/StyleValuePool.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/__init__.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/accessibility_info.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/app_state.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/battery.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/biometrics.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/camera.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/clipboard.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/device.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/dimensions.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/fallback.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/file_system.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/haptics.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/images.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/keyboard.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/linking.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/localization.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/location.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/net_info.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/notifications.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/permissions.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/registry.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/secure_store.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_modules/share.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_views/__init__.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/native_views/bridge_backend.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/navigation/__init__.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/navigation/container.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/navigation/handle.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/navigation/hooks.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/navigation/host.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/navigation/linking.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/navigation/navigators.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/navigation/ref.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/navigation/screen.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/navigation/state.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/net.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/platform.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/platform_metrics.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/preview.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/project/__init__.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/project/config.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/project/deps.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/project/devices.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/project/fingerprint.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/project/icons.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/project/lockfile.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/project/permissions.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/project/plugins.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/prop_checks.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/py.typed +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/query.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/reconciler/__init__.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/reconciler/boundaries.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/reconciler/children.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/reconciler/layout_pass.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/runtime.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/scheduler.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/sdk/__init__.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/sdk/_components.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/sdk/commands.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/sdk/module_codegen.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/sdk/native_types.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/sdk/services.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/sdk/templates/values.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/sdk/templates/values.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/sdk/types.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/storage.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/store.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/style.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/suspense.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/svg.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/proguard-rules.pro +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/debug/AndroidManifest.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/java/com/pythonnative/android_template/ScreenFragment.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/drawable/ic_launcher_background.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/layout/activity_main.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-hdpi/ic_launcher.webp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-mdpi/ic_launcher.webp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xhdpi/ic_launcher.webp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/navigation/nav_graph.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/values/colors.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/values/strings.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/values/themes.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/values-night/themes.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/xml/backup_rules.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/app/src/main/res/xml/data_extraction_rules.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/build.gradle +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/gradle/wrapper/gradle-wrapper.jar +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/gradle/wrapper/gradle-wrapper.properties +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/gradle.properties +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/gradlew +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/gradlew.bat +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/android_template/settings.gradle +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/ios_template/ios_template/Assets.xcassets/AccentColor.colorset/Contents.json +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/ios_template/ios_template/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/ios_template/ios_template/Assets.xcassets/Contents.json +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/ios_template/ios_template/Base.lproj/LaunchScreen.storyboard +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/ios_template/ios_template/BridgingHeader.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/ios_template/ios_template/Info.plist +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/ios_template/ios_template/PrivacyInfo.xcprivacy +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/ios_template/ios_template/SceneDelegate.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/templates/ios_template/ios_template.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/testing/__init__.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/testing/backend.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/testing/clock.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/testing/harness.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/testing/queries.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/theme.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative/utils.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative.egg-info/dependency_links.txt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative.egg-info/entry_points.txt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative.egg-info/requires.txt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/src/pythonnative.egg-info/top_level.txt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_alert.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_animated.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_animated_easing.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_animated_graph.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_appearance.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_assets.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_authoring.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_cli.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_components.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_contract_fixtures.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_devclient.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_device_modules.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_devserver.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_devserver_ws.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_e2e_suite_renders.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_element.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_events.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_extended_components.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_gesture_activation.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_gesture_composition.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_gestures.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_handles.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_hooks.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_hosts.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_hot_reload.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_identity_bailout.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_inbox.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_incremental_pipeline.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_incremental_render.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_interaction_props.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_ios_log.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_layout.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_lint.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_list_features.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_metric_hooks.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_mutations.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_native_lists.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_native_modules.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_native_values.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_native_views.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_navigation.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_net.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_new_components.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_platform.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_platform_metrics.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_reconciler.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_ref.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_release_workflow.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_runtime.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_runtime_contracts.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_sdk.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_smoke.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_storage.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_store.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_style.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_suspense.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_testing_library.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_theme.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_transitions.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_typed_events.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_typing_conformance.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.49.0}/tests/test_utils.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pythonnative"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.49.0"
|
|
8
8
|
description = "Cross-platform native UI toolkit for Android and iOS"
|
|
9
9
|
authors = [
|
|
10
10
|
{ name = "Owen Carey" }
|
|
@@ -99,6 +99,7 @@ pythonnative = [
|
|
|
99
99
|
"templates/**", "native/**", "sdk/templates/**",
|
|
100
100
|
"devserver/static/**",
|
|
101
101
|
"icons/_lucide.json", "icons/LICENSE-lucide.txt",
|
|
102
|
+
"sdk/_builtin_contracts.json",
|
|
102
103
|
]
|
|
103
104
|
|
|
104
105
|
[tool.setuptools.exclude-package-data]
|
|
@@ -66,11 +66,13 @@ Example:
|
|
|
66
66
|
```
|
|
67
67
|
"""
|
|
68
68
|
|
|
69
|
-
__version__ = "0.
|
|
69
|
+
__version__ = "0.49.0"
|
|
70
70
|
|
|
71
|
-
|
|
71
|
+
import importlib
|
|
72
|
+
from typing import TYPE_CHECKING, Any
|
|
73
|
+
|
|
74
|
+
from . import appearance, diagnostics, runtime, sdk, svg
|
|
72
75
|
from .alerts import Alert
|
|
73
|
-
from .animated import ANIMATABLE_PROPS, Animated, AnimatedValue, AnimationResult, Easing, EasingSpec, use_animated_value
|
|
74
76
|
from .assets import Asset, asset
|
|
75
77
|
from .component import Component, component, memo
|
|
76
78
|
from .components import (
|
|
@@ -124,7 +126,6 @@ from .components import (
|
|
|
124
126
|
from .components.props import AccessibilityProps, ViewProps
|
|
125
127
|
from .diagnostics import HookOrderError
|
|
126
128
|
from .element import Element, Node
|
|
127
|
-
from .gestures import GestureSpec, SwipeDirection
|
|
128
129
|
from .handles import ScrollOffset, ScrollViewHandle, TextInputHandle, ViewHandle, WebViewHandle
|
|
129
130
|
from .hooks import (
|
|
130
131
|
ColorScheme,
|
|
@@ -157,7 +158,6 @@ from .hooks import (
|
|
|
157
158
|
use_window_dimensions,
|
|
158
159
|
)
|
|
159
160
|
from .hosts import create_screen
|
|
160
|
-
from .icons import Icon, IconName
|
|
161
161
|
from .mutations import UNSET, UnsetType
|
|
162
162
|
from .native_modules import (
|
|
163
163
|
AccessibilityEvent,
|
|
@@ -194,27 +194,6 @@ from .native_modules import (
|
|
|
194
194
|
use_reduce_motion,
|
|
195
195
|
use_screen_reader_enabled,
|
|
196
196
|
)
|
|
197
|
-
from .navigation import (
|
|
198
|
-
DrawerNavigator,
|
|
199
|
-
Group,
|
|
200
|
-
Navigation,
|
|
201
|
-
NavigationContainer,
|
|
202
|
-
NavigationRef,
|
|
203
|
-
NavigationState,
|
|
204
|
-
Navigator,
|
|
205
|
-
Route,
|
|
206
|
-
Screen,
|
|
207
|
-
ScreenOptions,
|
|
208
|
-
StackNavigator,
|
|
209
|
-
TabBarStyle,
|
|
210
|
-
TabNavigator,
|
|
211
|
-
use_focus_effect,
|
|
212
|
-
use_is_focused,
|
|
213
|
-
use_navigation,
|
|
214
|
-
use_route,
|
|
215
|
-
use_screen_options,
|
|
216
|
-
)
|
|
217
|
-
from .net import HTTPError, Response, fetch
|
|
218
197
|
from .platform import Platform, get_platform
|
|
219
198
|
from .platform_metrics import WindowDimensions
|
|
220
199
|
from .runtime import run_async, run_blocking
|
|
@@ -527,3 +506,92 @@ __all__ = [
|
|
|
527
506
|
]
|
|
528
507
|
|
|
529
508
|
from .list_data import ListData, Section, ViewableItem
|
|
509
|
+
|
|
510
|
+
# Subsystems an app may never touch load on first use (PEP 562), so
|
|
511
|
+
# ``import pythonnative`` stays fast on a phone. Names, ``__all__``, and
|
|
512
|
+
# documentation are unchanged, and type checkers see ordinary imports.
|
|
513
|
+
_LAZY_GROUPS: dict[str, tuple[str, ...]] = {
|
|
514
|
+
"animated": (
|
|
515
|
+
"ANIMATABLE_PROPS",
|
|
516
|
+
"Animated",
|
|
517
|
+
"AnimatedValue",
|
|
518
|
+
"AnimationResult",
|
|
519
|
+
"Easing",
|
|
520
|
+
"EasingSpec",
|
|
521
|
+
"use_animated_value",
|
|
522
|
+
),
|
|
523
|
+
"gestures": ("GestureSpec", "SwipeDirection"),
|
|
524
|
+
"icons": ("Icon", "IconName"),
|
|
525
|
+
"navigation": (
|
|
526
|
+
"DrawerNavigator",
|
|
527
|
+
"Group",
|
|
528
|
+
"Navigation",
|
|
529
|
+
"NavigationContainer",
|
|
530
|
+
"NavigationRef",
|
|
531
|
+
"NavigationState",
|
|
532
|
+
"Navigator",
|
|
533
|
+
"Route",
|
|
534
|
+
"Screen",
|
|
535
|
+
"ScreenOptions",
|
|
536
|
+
"StackNavigator",
|
|
537
|
+
"TabBarStyle",
|
|
538
|
+
"TabNavigator",
|
|
539
|
+
"use_focus_effect",
|
|
540
|
+
"use_is_focused",
|
|
541
|
+
"use_navigation",
|
|
542
|
+
"use_route",
|
|
543
|
+
"use_screen_options",
|
|
544
|
+
),
|
|
545
|
+
"net": ("HTTPError", "Response", "fetch"),
|
|
546
|
+
}
|
|
547
|
+
_LAZY = {name: module for module, names in _LAZY_GROUPS.items() for name in names}
|
|
548
|
+
_LAZY_MODULES = frozenset({"gestures", "icons"})
|
|
549
|
+
|
|
550
|
+
if TYPE_CHECKING:
|
|
551
|
+
from . import gestures, icons
|
|
552
|
+
from .animated import (
|
|
553
|
+
ANIMATABLE_PROPS,
|
|
554
|
+
Animated,
|
|
555
|
+
AnimatedValue,
|
|
556
|
+
AnimationResult,
|
|
557
|
+
Easing,
|
|
558
|
+
EasingSpec,
|
|
559
|
+
use_animated_value,
|
|
560
|
+
)
|
|
561
|
+
from .gestures import GestureSpec, SwipeDirection
|
|
562
|
+
from .icons import Icon, IconName
|
|
563
|
+
from .navigation import (
|
|
564
|
+
DrawerNavigator,
|
|
565
|
+
Group,
|
|
566
|
+
Navigation,
|
|
567
|
+
NavigationContainer,
|
|
568
|
+
NavigationRef,
|
|
569
|
+
NavigationState,
|
|
570
|
+
Navigator,
|
|
571
|
+
Route,
|
|
572
|
+
Screen,
|
|
573
|
+
ScreenOptions,
|
|
574
|
+
StackNavigator,
|
|
575
|
+
TabBarStyle,
|
|
576
|
+
TabNavigator,
|
|
577
|
+
use_focus_effect,
|
|
578
|
+
use_is_focused,
|
|
579
|
+
use_navigation,
|
|
580
|
+
use_route,
|
|
581
|
+
use_screen_options,
|
|
582
|
+
)
|
|
583
|
+
from .net import HTTPError, Response, fetch
|
|
584
|
+
|
|
585
|
+
|
|
586
|
+
def __getattr__(name: str) -> Any:
|
|
587
|
+
module = _LAZY.get(name)
|
|
588
|
+
if module is None and name not in _LAZY_MODULES:
|
|
589
|
+
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
590
|
+
imported = importlib.import_module(f".{module or name}", __name__)
|
|
591
|
+
value = imported if module is None else getattr(imported, name)
|
|
592
|
+
globals()[name] = value
|
|
593
|
+
return value
|
|
594
|
+
|
|
595
|
+
|
|
596
|
+
def __dir__() -> list[str]:
|
|
597
|
+
return sorted(set(globals()) | _LAZY.keys() | _LAZY_MODULES)
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
"""Entry point the native app templates run right after Python starts.
|
|
2
2
|
|
|
3
|
-
Both templates
|
|
3
|
+
Both templates call [`start`][pythonnative.bootstrap.start] once the
|
|
4
|
+
interpreter is up, on a background thread at launch:
|
|
4
5
|
|
|
5
6
|
```python
|
|
6
|
-
|
|
7
|
+
pythonnative.bootstrap.start(dev, True, "app.main")
|
|
7
8
|
```
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
It connects the two halves of the bridge (installing the native -> Python
|
|
11
|
+
callback on iOS), verifies the protocol version, routes ``print()`` to the
|
|
12
|
+
console on iOS, warms the asyncio runtime, in debug builds starts the dev
|
|
13
|
+
client that syncs sources from ``pn start``, and imports the entry module,
|
|
14
|
+
so the first screen only has to render. From then on the native runtime drives
|
|
14
15
|
everything through ``callback("host", ...)``; see ``docs/concepts/bridge.md``.
|
|
15
16
|
"""
|
|
16
17
|
|
|
@@ -19,14 +20,14 @@ from __future__ import annotations
|
|
|
19
20
|
import os
|
|
20
21
|
import sys
|
|
21
22
|
import traceback
|
|
22
|
-
from typing import Any, Dict
|
|
23
|
+
from typing import Any, Dict, Optional
|
|
23
24
|
|
|
24
25
|
__all__ = ["start", "status"]
|
|
25
26
|
|
|
26
27
|
_started: Dict[str, Any] = {}
|
|
27
28
|
|
|
28
29
|
|
|
29
|
-
def start(dev: bool = False, strict: bool = False) -> Dict[str, Any]:
|
|
30
|
+
def start(dev: bool = False, strict: bool = False, entry: Optional[str] = None) -> Dict[str, Any]:
|
|
30
31
|
"""Connect the bridge and prepare the runtime.
|
|
31
32
|
|
|
32
33
|
Args:
|
|
@@ -35,6 +36,9 @@ def start(dev: bool = False, strict: bool = False) -> Dict[str, Any]:
|
|
|
35
36
|
strict: Re-raise the failure after recording it. The templates
|
|
36
37
|
pass ``True`` so a broken bridge surfaces as a bootstrap
|
|
37
38
|
error screen with the full traceback.
|
|
39
|
+
entry: The app's entry module, imported last so a broken app
|
|
40
|
+
fails here with its traceback, and so the first screen
|
|
41
|
+
doesn't pay for the import.
|
|
38
42
|
|
|
39
43
|
Returns:
|
|
40
44
|
A status dict (``{"protocol": 2, "platform": "ios"}``) that the
|
|
@@ -89,6 +93,10 @@ def start(dev: bool = False, strict: bool = False) -> Dict[str, Any]:
|
|
|
89
93
|
from .assets import configure_native
|
|
90
94
|
|
|
91
95
|
configure_native()
|
|
96
|
+
if entry:
|
|
97
|
+
import importlib
|
|
98
|
+
|
|
99
|
+
importlib.import_module(entry)
|
|
92
100
|
except Exception as exc:
|
|
93
101
|
status_["error"] = f"{type(exc).__name__}: {exc}"
|
|
94
102
|
print(f"[pn.bootstrap] start failed: {exc!r}", file=sys.stderr)
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"""The native bridge: one channel between Python and Swift / Kotlin.
|
|
2
2
|
|
|
3
3
|
Everything that crosses into native code goes through a
|
|
4
|
-
[`Transport`][pythonnative.bridge.Transport] (``apply`` a transaction,
|
|
5
|
-
``
|
|
6
|
-
|
|
4
|
+
[`Transport`][pythonnative.bridge.Transport] (``apply`` a transaction, run a
|
|
5
|
+
``command``, drive an ``animate`` request, or ``call`` a native module), and
|
|
6
|
+
everything native sends back arrives at
|
|
7
7
|
[`native_callback`][pythonnative.bridge.native_callback]. The protocol
|
|
8
8
|
is documented in ``docs/concepts/bridge.md``.
|
|
9
9
|
|
|
@@ -19,7 +19,7 @@ tests that want to exercise the bridge itself install a
|
|
|
19
19
|
from __future__ import annotations
|
|
20
20
|
|
|
21
21
|
import threading
|
|
22
|
-
from typing import Callable, Optional, Protocol
|
|
22
|
+
from typing import Callable, Optional, Protocol
|
|
23
23
|
|
|
24
24
|
from . import codec
|
|
25
25
|
|
|
@@ -39,7 +39,13 @@ from .commits import PROTOCOL_VERSION
|
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
class Transport(Protocol):
|
|
42
|
-
"""The Python -> native half of the bridge.
|
|
42
|
+
"""The Python -> native half of the bridge.
|
|
43
|
+
|
|
44
|
+
Native and browser transports run Yoga beside their widgets. Only the
|
|
45
|
+
headless [`FakeTransport`][pythonnative.bridge.fake.FakeTransport] lays
|
|
46
|
+
out in Python, so it alone also answers ``measure`` and accepts frame
|
|
47
|
+
(``f``) operations.
|
|
48
|
+
"""
|
|
43
49
|
|
|
44
50
|
name: str
|
|
45
51
|
|
|
@@ -49,9 +55,6 @@ class Transport(Protocol):
|
|
|
49
55
|
def apply(self, transaction_json: str) -> str:
|
|
50
56
|
"""Apply one serialized transaction (a JSON array of ops)."""
|
|
51
57
|
|
|
52
|
-
def measure(self, tag: int, max_width: float, max_height: float) -> Tuple[float, float]:
|
|
53
|
-
"""Return the intrinsic ``(width, height)`` of the view ``tag`` under the constraints."""
|
|
54
|
-
|
|
55
58
|
def command(self, tag: int, name: str, args_json: str) -> Optional[str]:
|
|
56
59
|
"""Run an imperative command on one view; returns its JSON result or ``None``."""
|
|
57
60
|
|
|
@@ -61,7 +64,7 @@ class Transport(Protocol):
|
|
|
61
64
|
def call(self, module: str, method: str, args_json: str) -> Optional[str]:
|
|
62
65
|
"""Call a native module method with a ``{"call_id", "args"}`` envelope."""
|
|
63
66
|
|
|
64
|
-
def set_callback(self, callback: Callable[[str, int, str, str],
|
|
67
|
+
def set_callback(self, callback: Callable[[str, int, str, str], None]) -> None:
|
|
65
68
|
"""Install ``callback`` as the native -> Python entry point."""
|
|
66
69
|
|
|
67
70
|
|
|
@@ -154,11 +157,11 @@ def handshake() -> int:
|
|
|
154
157
|
"installed pythonnative package."
|
|
155
158
|
)
|
|
156
159
|
if getattr(get_transport(), "name", "") in {"ios", "android"}:
|
|
157
|
-
from ..sdk.schema import fingerprint
|
|
160
|
+
from ..sdk.schema import YOGA_VERSION, fingerprint
|
|
158
161
|
|
|
159
162
|
reply = codec.loads(get_transport().call("Runtime", "capabilities", codec.dumps({"id": 0, "args": {}})))
|
|
160
163
|
capabilities = reply.get("value", {}) if isinstance(reply, dict) else {}
|
|
161
|
-
if capabilities.get("schema") != fingerprint() or capabilities.get("yoga") !=
|
|
164
|
+
if capabilities.get("schema") != fingerprint() or capabilities.get("yoga") != YOGA_VERSION:
|
|
162
165
|
raise RuntimeError("Native component contracts changed. Rebuild the app with 'pn run'.")
|
|
163
166
|
return version
|
|
164
167
|
|
|
@@ -168,74 +171,78 @@ def handshake() -> int:
|
|
|
168
171
|
# ======================================================================
|
|
169
172
|
|
|
170
173
|
|
|
171
|
-
# Callback threads coalesce continuous input before the application loop
|
|
174
|
+
# Callback threads coalesce continuous input before the application loop
|
|
175
|
+
# drains. Native callback threads and the loop both change the table.
|
|
172
176
|
_continuous: dict[tuple[int, str], list[str]] = {}
|
|
177
|
+
_continuous_lock = threading.Lock()
|
|
178
|
+
_CONTINUOUS_EVENTS = frozenset({"on_scroll", "on_window", "on_selection_change", "on_gesture_update"})
|
|
173
179
|
|
|
174
180
|
|
|
175
181
|
def _deliver_continuous(tag: int, name: str, slot: list[str]) -> None:
|
|
176
|
-
|
|
177
|
-
_continuous.
|
|
178
|
-
|
|
182
|
+
with _continuous_lock:
|
|
183
|
+
if _continuous.get((tag, name)) is slot:
|
|
184
|
+
del _continuous[(tag, name)]
|
|
185
|
+
payload = slot[0]
|
|
186
|
+
native_callback("event", tag, name, payload)
|
|
179
187
|
|
|
180
188
|
|
|
181
|
-
def native_callback(kind: str, tag: int, name: str, payload: str) ->
|
|
189
|
+
def native_callback(kind: str, tag: int, name: str, payload: str) -> None:
|
|
182
190
|
"""Single entry point for every native -> Python message.
|
|
183
191
|
|
|
192
|
+
Native delivers every message asynchronously, from its events thread,
|
|
193
|
+
and never waits for a result. This function never raises: failures
|
|
194
|
+
are reported through ``diagnostics`` so nothing propagates into UIKit
|
|
195
|
+
or the Android looper.
|
|
196
|
+
|
|
184
197
|
Args:
|
|
185
|
-
kind: ``"event"``, ``"module"``, ``"host"``, ``"animation"``,
|
|
186
|
-
|
|
198
|
+
kind: ``"event"``, ``"module"``, ``"host"``, ``"animation"``, or
|
|
199
|
+
``"layout"``.
|
|
187
200
|
tag: View tag (events), screen id (host), otherwise ``0``.
|
|
188
201
|
name: Event name, module name, or host event.
|
|
189
202
|
payload: JSON text whose shape depends on ``kind``.
|
|
190
|
-
|
|
191
|
-
Returns:
|
|
192
|
-
A JSON string for request-style messages (a handler's return
|
|
193
|
-
value, ``"true"`` / ``"false"`` for ``back_pressed``), else
|
|
194
|
-
``None``. Never raises: failures are reported through
|
|
195
|
-
``diagnostics`` so nothing propagates into UIKit or the
|
|
196
|
-
Android looper.
|
|
197
203
|
"""
|
|
198
204
|
from ..runtime import _on_loop_thread, get_loop
|
|
199
205
|
|
|
200
206
|
loop = get_loop()
|
|
201
207
|
if loop.is_running() and not _on_loop_thread(loop):
|
|
202
|
-
if kind == "event" and name in
|
|
208
|
+
if kind == "event" and name in _CONTINUOUS_EVENTS:
|
|
203
209
|
key = (tag, name)
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
slot
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
210
|
+
with _continuous_lock:
|
|
211
|
+
slot = _continuous.get(key)
|
|
212
|
+
if slot is not None:
|
|
213
|
+
slot[0] = payload
|
|
214
|
+
return None
|
|
215
|
+
slot = _continuous[key] = [payload]
|
|
216
|
+
loop.call_soon_threadsafe(_deliver_continuous, tag, name, slot)
|
|
211
217
|
else:
|
|
212
|
-
|
|
218
|
+
# Later continuous input starts a new slot, delivered after
|
|
219
|
+
# this discrete message.
|
|
220
|
+
with _continuous_lock:
|
|
221
|
+
_continuous.clear()
|
|
213
222
|
loop.call_soon_threadsafe(native_callback, kind, tag, name, payload)
|
|
214
|
-
return
|
|
223
|
+
return
|
|
215
224
|
try:
|
|
216
225
|
if kind == "layout":
|
|
217
226
|
from ..native_views import get_backend
|
|
218
227
|
|
|
219
228
|
get_backend().accept_layout(codec.loads(payload))
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
if kind == "module":
|
|
229
|
+
elif kind == "event":
|
|
230
|
+
_on_event(int(tag), name, payload)
|
|
231
|
+
elif kind == "module":
|
|
224
232
|
from ..native_modules.registry import dispatch_module_message
|
|
225
233
|
|
|
226
234
|
dispatch_module_message(name, codec.loads(payload) or {})
|
|
227
|
-
|
|
228
|
-
if kind == "host":
|
|
235
|
+
elif kind == "host":
|
|
229
236
|
from ..hosts.native import dispatch_host_event
|
|
230
237
|
|
|
231
|
-
|
|
232
|
-
|
|
238
|
+
dispatch_host_event(int(tag), name, codec.loads(payload))
|
|
239
|
+
elif kind == "animation":
|
|
233
240
|
from ..animated import native_animation_completed
|
|
234
241
|
|
|
235
242
|
data = codec.loads(payload) or {}
|
|
236
243
|
native_animation_completed(int(data.get("id", 0)), bool(data.get("finished", True)))
|
|
237
|
-
|
|
238
|
-
|
|
244
|
+
else:
|
|
245
|
+
print(f"[pn.bridge] unknown callback kind {kind!r}")
|
|
239
246
|
except Exception as exc:
|
|
240
247
|
from .. import diagnostics
|
|
241
248
|
|
|
@@ -243,10 +250,9 @@ def native_callback(kind: str, tag: int, name: str, payload: str) -> Optional[st
|
|
|
243
250
|
import traceback
|
|
244
251
|
|
|
245
252
|
traceback.print_exc()
|
|
246
|
-
return None
|
|
247
253
|
|
|
248
254
|
|
|
249
|
-
def _on_event(tag: int, name: str, payload: str) ->
|
|
255
|
+
def _on_event(tag: int, name: str, payload: str) -> None:
|
|
250
256
|
from ..events import get_event_registry
|
|
251
257
|
|
|
252
258
|
args = codec.loads(payload)
|
|
@@ -255,21 +261,20 @@ def _on_event(tag: int, name: str, payload: str) -> Optional[str]:
|
|
|
255
261
|
backend = get_backend()
|
|
256
262
|
defer = getattr(backend, "defer_event", None)
|
|
257
263
|
if defer is not None and defer(tag, name, args):
|
|
258
|
-
return
|
|
264
|
+
return
|
|
259
265
|
accept = getattr(backend, "accept_event", None)
|
|
260
266
|
if accept is not None:
|
|
261
267
|
if not accept(tag, name, args):
|
|
262
|
-
return
|
|
268
|
+
return
|
|
263
269
|
args = args["args"]
|
|
264
270
|
if args is None:
|
|
265
271
|
args = []
|
|
266
272
|
elif not isinstance(args, list):
|
|
267
273
|
args = [args]
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
return None
|
|
274
|
+
if get_event_registry().get(tag, name) is None:
|
|
275
|
+
return
|
|
271
276
|
try:
|
|
272
|
-
|
|
277
|
+
get_event_registry().invoke(tag, name, *args)
|
|
273
278
|
except Exception as exc:
|
|
274
279
|
from .. import diagnostics
|
|
275
280
|
|
|
@@ -277,15 +282,6 @@ def _on_event(tag: int, name: str, payload: str) -> Optional[str]:
|
|
|
277
282
|
import traceback
|
|
278
283
|
|
|
279
284
|
traceback.print_exc()
|
|
280
|
-
return None
|
|
281
|
-
import inspect
|
|
282
|
-
|
|
283
|
-
if result is None or inspect.isawaitable(result):
|
|
284
|
-
return None
|
|
285
|
-
try:
|
|
286
|
-
return codec.dumps(codec.to_jsonable(result))
|
|
287
|
-
except (TypeError, ValueError):
|
|
288
|
-
return None
|
|
289
285
|
|
|
290
286
|
|
|
291
287
|
def _reset_for_tests() -> None:
|
|
@@ -10,7 +10,7 @@ through Chaquopy; this transport therefore has nothing to register.
|
|
|
10
10
|
|
|
11
11
|
from __future__ import annotations
|
|
12
12
|
|
|
13
|
-
from typing import Any, Callable, Optional
|
|
13
|
+
from typing import Any, Callable, Optional
|
|
14
14
|
|
|
15
15
|
__all__ = ["AndroidTransport"]
|
|
16
16
|
|
|
@@ -44,18 +44,6 @@ class AndroidTransport:
|
|
|
44
44
|
"""Apply one serialized transaction (a JSON array of ops)."""
|
|
45
45
|
return str(self._bridge.apply(transaction_json))
|
|
46
46
|
|
|
47
|
-
def measure(self, tag: int, max_width: float, max_height: float) -> Tuple[float, float]:
|
|
48
|
-
"""Return the intrinsic ``(width, height)`` of the view ``tag`` under the constraints."""
|
|
49
|
-
packed = self._bridge.measure(int(tag), float(max_width), float(max_height))
|
|
50
|
-
if not packed:
|
|
51
|
-
return (0.0, 0.0)
|
|
52
|
-
text = str(packed)
|
|
53
|
-
w, _, h = text.partition(",")
|
|
54
|
-
try:
|
|
55
|
-
return (float(w), float(h))
|
|
56
|
-
except ValueError:
|
|
57
|
-
return (0.0, 0.0)
|
|
58
|
-
|
|
59
47
|
def command(self, tag: int, name: str, args_json: str) -> Optional[str]:
|
|
60
48
|
"""Run an imperative command on one view; returns its JSON result or ``None``."""
|
|
61
49
|
return _opt_str(self._bridge.command(int(tag), name, args_json))
|
|
@@ -68,7 +56,7 @@ class AndroidTransport:
|
|
|
68
56
|
"""Call a native module method with a ``{"call_id", "args"}`` envelope."""
|
|
69
57
|
return _opt_str(self._bridge.call(module, method, args_json))
|
|
70
58
|
|
|
71
|
-
def set_callback(self, callback: Callable[[str, int, str, str],
|
|
59
|
+
def set_callback(self, callback: Callable[[str, int, str, str], None]) -> None:
|
|
72
60
|
"""No-op: the Android template installs the host through ``PNBridge.setHost``."""
|
|
73
61
|
del callback
|
|
74
62
|
|
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
"""Versioned commit validation and surface ownership.
|
|
2
2
|
|
|
3
|
-
A commit is validated in full before it changes a native tree.
|
|
4
|
-
strictly consecutive within an application and surface. A
|
|
5
|
-
poisons that surface until the host explicitly resets and
|
|
3
|
+
A commit's structure is validated in full before it changes a native tree.
|
|
4
|
+
Revisions are strictly consecutive within an application and surface. A
|
|
5
|
+
failed native mount poisons that surface until the host explicitly resets and
|
|
6
|
+
remounts it.
|
|
7
|
+
|
|
8
|
+
Props are checked against component schemas only in development, where
|
|
9
|
+
Python can name the component and prop that's wrong. The native runtimes
|
|
10
|
+
validate every commit with generated validators in every build, so release
|
|
11
|
+
builds don't pay for the same check twice.
|
|
6
12
|
"""
|
|
7
13
|
|
|
8
14
|
from __future__ import annotations
|
|
@@ -15,7 +21,8 @@ from typing import Any, Callable
|
|
|
15
21
|
from ..profiling import count, profiled
|
|
16
22
|
from .list_store import ListStore
|
|
17
23
|
|
|
18
|
-
PROTOCOL_VERSION =
|
|
24
|
+
PROTOCOL_VERSION = 5
|
|
25
|
+
"""The bridge protocol every runtime speaks; generated native contracts carry it."""
|
|
19
26
|
|
|
20
27
|
|
|
21
28
|
class CommitError(RuntimeError):
|
|
@@ -103,7 +110,7 @@ class CommitState:
|
|
|
103
110
|
def prepare(self, envelope: Any) -> CommitState:
|
|
104
111
|
"""Validate without mutating this state and return the candidate state."""
|
|
105
112
|
if not isinstance(envelope, dict) or envelope.get("version") != PROTOCOL_VERSION:
|
|
106
|
-
raise CommitError("Expected a protocol
|
|
113
|
+
raise CommitError(f"Expected a protocol v{PROTOCOL_VERSION} commit envelope; rebuild the native client")
|
|
107
114
|
application, surface, revision = (envelope.get(k) for k in ("application", "surface", "revision"))
|
|
108
115
|
if not isinstance(application, str) or not application or type(surface) is not int or surface <= 0:
|
|
109
116
|
raise CommitError("Invalid application or surface identity")
|
|
@@ -209,6 +216,10 @@ class CommitState:
|
|
|
209
216
|
|
|
210
217
|
@staticmethod
|
|
211
218
|
def _validate_props(name: str, props: dict[str, Any], partial: bool) -> None:
|
|
219
|
+
from .. import diagnostics
|
|
220
|
+
|
|
221
|
+
if not diagnostics.is_dev():
|
|
222
|
+
return
|
|
212
223
|
from ..sdk.schema import COMPONENTS
|
|
213
224
|
|
|
214
225
|
schema = COMPONENTS.get(name)
|
|
@@ -83,7 +83,7 @@ class FakeTransport:
|
|
|
83
83
|
"""Return the protocol version compiled into the native library."""
|
|
84
84
|
return self._version
|
|
85
85
|
|
|
86
|
-
def set_callback(self, callback: Callable[[str, int, str, str],
|
|
86
|
+
def set_callback(self, callback: Callable[[str, int, str, str], None]) -> None:
|
|
87
87
|
"""Install ``callback`` as the native -> Python entry point."""
|
|
88
88
|
self.callback = callback
|
|
89
89
|
|
|
@@ -184,13 +184,13 @@ class FakeTransport:
|
|
|
184
184
|
|
|
185
185
|
# -- Playing the native side ------------------------------------------
|
|
186
186
|
|
|
187
|
-
def fire(self, tag: int, name: str, *args: Any) ->
|
|
188
|
-
"""Emit a view event as native would
|
|
187
|
+
def fire(self, tag: int, name: str, *args: Any) -> None:
|
|
188
|
+
"""Emit a view event as native would."""
|
|
189
189
|
self._event_sequence = getattr(self, "_event_sequence", 0) + 1
|
|
190
190
|
envelope = self.commit_state.acknowledgement()
|
|
191
191
|
envelope.pop("ok")
|
|
192
192
|
envelope.update(sequence=self._event_sequence, args=[codec.to_jsonable(a) for a in args])
|
|
193
|
-
|
|
193
|
+
self._callback("event", tag, name, codec.dumps(envelope))
|
|
194
194
|
|
|
195
195
|
def emit_module_event(self, module: str, event: str, payload: Any = None) -> None:
|
|
196
196
|
"""Push an unsolicited module event (``AppState`` ``change``, ...) into Python."""
|
|
@@ -209,18 +209,18 @@ class FakeTransport:
|
|
|
209
209
|
body["error"] = error
|
|
210
210
|
self._callback("module", 0, module, codec.dumps(body))
|
|
211
211
|
|
|
212
|
-
def host_event(self, screen: int, event: str, payload: Any = None) ->
|
|
213
|
-
"""Deliver a screen lifecycle event as the native host would
|
|
214
|
-
|
|
212
|
+
def host_event(self, screen: int, event: str, payload: Any = None) -> None:
|
|
213
|
+
"""Deliver a screen lifecycle event as the native host would."""
|
|
214
|
+
self._callback("host", screen, event, codec.dumps(codec.to_jsonable(payload)))
|
|
215
215
|
|
|
216
216
|
def complete_animation(self, anim_id: int, finished: bool = True) -> None:
|
|
217
217
|
"""Report a native animation as finished (or interrupted) to Python."""
|
|
218
218
|
self._callback("animation", 0, "", codec.dumps({"id": anim_id, "finished": finished}))
|
|
219
219
|
|
|
220
|
-
def _callback(self, kind: str, tag: int, name: str, payload: str) ->
|
|
220
|
+
def _callback(self, kind: str, tag: int, name: str, payload: str) -> None:
|
|
221
221
|
if self.callback is None:
|
|
222
222
|
raise AssertionError("FakeTransport has no callback; install it with pythonnative.bridge.set_transport")
|
|
223
|
-
|
|
223
|
+
self.callback(kind, tag, name, payload)
|
|
224
224
|
|
|
225
225
|
# -- Introspection -----------------------------------------------------
|
|
226
226
|
|