pythonnative 0.48.0__tar.gz → 0.50.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 → pythonnative-0.50.0}/.github/workflows/release.yml +80 -0
- {pythonnative-0.48.0/src/pythonnative.egg-info → pythonnative-0.50.0}/PKG-INFO +7 -5
- {pythonnative-0.48.0 → pythonnative-0.50.0}/README.md +5 -4
- {pythonnative-0.48.0 → pythonnative-0.50.0}/pyproject.toml +7 -2
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/__init__.py +94 -26
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/bootstrap.py +22 -9
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/bridge/__init__.py +58 -62
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/bridge/android.py +2 -14
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/bridge/commits.py +16 -5
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/bridge/fake.py +9 -9
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/bridge/ios.py +7 -40
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/bridge/web.py +5 -45
- pythonnative-0.50.0/src/pythonnative/cli/keys.py +178 -0
- pythonnative-0.50.0/src/pythonnative/cli/launch.py +261 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/cli/pn.py +296 -131
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/component.py +111 -8
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/components/__init__.py +19 -4
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/components/_base.py +1 -1
- pythonnative-0.50.0/src/pythonnative/devclient.py +1452 -0
- pythonnative-0.50.0/src/pythonnative/devserver/compat.py +176 -0
- pythonnative-0.50.0/src/pythonnative/devserver/editor.py +95 -0
- pythonnative-0.50.0/src/pythonnative/devserver/hub.py +464 -0
- pythonnative-0.50.0/src/pythonnative/devserver/packages.py +226 -0
- pythonnative-0.50.0/src/pythonnative/devserver/qr.py +526 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/server.py +399 -30
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/bridge.js +3 -28
- pythonnative-0.50.0/src/pythonnative/devserver/static/devsupport.js +358 -0
- pythonnative-0.50.0/src/pythonnative/devserver/static/devtools/connection.js +136 -0
- pythonnative-0.50.0/src/pythonnative/devserver/static/devtools/devtools.css +753 -0
- pythonnative-0.50.0/src/pythonnative/devserver/static/devtools/devtools.js +379 -0
- pythonnative-0.50.0/src/pythonnative/devserver/static/devtools/index.html +49 -0
- pythonnative-0.50.0/src/pythonnative/devserver/static/devtools/panels/components.js +610 -0
- pythonnative-0.50.0/src/pythonnative/devserver/static/devtools/panels/connect.js +166 -0
- pythonnative-0.50.0/src/pythonnative/devserver/static/devtools/panels/console.js +343 -0
- pythonnative-0.50.0/src/pythonnative/devserver/static/devtools/panels/network.js +306 -0
- pythonnative-0.50.0/src/pythonnative/devserver/static/devtools/panels/panel.js +50 -0
- pythonnative-0.50.0/src/pythonnative/devserver/static/devtools/panels/performance.js +435 -0
- pythonnative-0.50.0/src/pythonnative/devserver/static/devtools/panels/problems.js +175 -0
- pythonnative-0.50.0/src/pythonnative/devserver/static/devtools/report.js +134 -0
- pythonnative-0.50.0/src/pythonnative/devserver/static/devtools/tree.js +143 -0
- pythonnative-0.50.0/src/pythonnative/devserver/static/devtools/util.js +184 -0
- pythonnative-0.50.0/src/pythonnative/devserver/static/devtools/values.js +79 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/host.js +109 -37
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/index.html +2 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/preview.css +194 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/renderer.js +6 -30
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/shell.js +7 -2
- pythonnative-0.50.0/src/pythonnative/devtools/__init__.py +16 -0
- pythonnative-0.50.0/src/pythonnative/devtools/agent.py +524 -0
- pythonnative-0.50.0/src/pythonnative/devtools/console.py +134 -0
- pythonnative-0.50.0/src/pythonnative/devtools/debugger.py +164 -0
- pythonnative-0.50.0/src/pythonnative/devtools/inspector.py +381 -0
- pythonnative-0.50.0/src/pythonnative/devtools/perf.py +194 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/diagnostics.py +86 -8
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/element.py +4 -2
- pythonnative-0.50.0/src/pythonnative/errors.py +422 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/gestures.py +17 -17
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/hooks.py +60 -15
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/hosts/base.py +8 -5
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/hosts/native.py +19 -7
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/hot_reload.py +18 -9
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/journal.py +118 -19
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/layout.py +4 -2
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/AndroidManifest.xml +3 -3
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/generated/NativeProps.kt +502 -502
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/generated/NativeValues.kt +22 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/generated/PNContracts.kt +4 -2
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/PNBridge.kt +41 -54
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/PythonHost.kt +4 -4
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/CommitState.kt +97 -45
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNTransaction.kt +4 -11
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/TransactionApplier.kt +22 -9
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ComponentManager.kt +6 -12
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/layout/NativeLayout.kt +0 -1
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/BuiltinModules.kt +13 -2
- pythonnative-0.50.0/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/DevSupportModule.kt +429 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/DeviceModules.kt +14 -3
- pythonnative-0.50.0/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/ErrorOverlay.kt +220 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/HostModule.kt +1 -1
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/screens/PNScreenFragment.kt +8 -10
- pythonnative-0.50.0/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/DevSupportRobolectricTest.kt +196 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/NativeLifecycleTest.kt +28 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/PNTransactionTest.kt +2 -4
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNBridge.swift +48 -61
- pythonnative-0.50.0/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNCommit.swift +181 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNRegistry.swift +1 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNTransaction.swift +29 -12
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewState.swift +7 -10
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNVirtualListManager.swift +11 -3
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Generated/NativeProps.swift +607 -607
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Generated/NativeValues.swift +40 -1
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Generated/PNContracts.swift +4 -2
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Layout/PNLayout.swift +0 -1
- pythonnative-0.50.0/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/DevSupportModule.swift +381 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/HostModule.swift +1 -1
- pythonnative-0.50.0/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/PNErrorOverlay.swift +269 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Screens/PNViewController.swift +69 -21
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNWindow.swift +28 -2
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNCommitTests.swift +50 -3
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNContractParityTests.swift +0 -1
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNLifecycleTests.swift +11 -3
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNModuleTests.swift +105 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNParityTests.swift +1 -2
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNTransactionTests.swift +1 -1
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/linking.py +20 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/net.py +99 -2
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/preview.py +134 -18
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/profiling.py +3 -1
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/project/android.py +23 -9
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/project/artifacts.py +44 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/project/builder.py +71 -36
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/project/bundle.py +4 -1
- pythonnative-0.50.0/src/pythonnative/project/bytecode.py +81 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/project/doctor.py +3 -5
- pythonnative-0.50.0/src/pythonnative/project/go.py +383 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/project/ios.py +24 -6
- pythonnative-0.50.0/src/pythonnative/project/runtime_assets.py +373 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/reconciler/core.py +63 -13
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/reconciler/vnode.py +13 -1
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/refresh.py +42 -9
- pythonnative-0.50.0/src/pythonnative/sdk/_builtin_contracts.json +1 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/sdk/builtins.py +33 -6
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/sdk/codegen.py +5 -5
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/sdk/contract_codegen.py +2 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/sdk/schema.py +144 -19
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/sdk/templates/contracts.kt +3 -1
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/sdk/templates/contracts.swift +3 -1
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/sdk/templates/values.kt +22 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/sdk/templates/values.swift +40 -1
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/build.gradle +0 -4
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/AndroidManifest.xml +0 -4
- pythonnative-0.50.0/src/pythonnative/templates/android_template/app/src/main/java/com/pythonnative/android_template/MainActivity.kt +170 -0
- pythonnative-0.50.0/src/pythonnative/templates/ios_template/PNFinalizePython.sh +29 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/ios_template/ios_template/AppDelegate.swift +3 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/ios_template/ios_template/PythonRuntime.swift +68 -10
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/ios_template/ios_template/SceneDelegate.swift +3 -1
- pythonnative-0.50.0/src/pythonnative/templates/ios_template/ios_template/ViewController.swift +22 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/ios_template/ios_template.xcodeproj/project.pbxproj +3 -240
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/testing/pytest_plugin.py +1 -1
- {pythonnative-0.48.0 → pythonnative-0.50.0/src/pythonnative.egg-info}/PKG-INFO +7 -5
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative.egg-info/SOURCES.txt +44 -5
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative.egg-info/requires.txt +1 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_async_hooks.py +19 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_bridge.py +14 -11
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_cli.py +44 -38
- pythonnative-0.50.0/tests/test_cli_keys.py +153 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_codegen.py +2 -1
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_core_semantics.py +23 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_devclient.py +75 -34
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_devserver.py +20 -4
- pythonnative-0.50.0/tests/test_devserver_session.py +496 -0
- pythonnative-0.50.0/tests/test_devtools.py +300 -0
- pythonnative-0.50.0/tests/test_devtools_page.py +224 -0
- pythonnative-0.50.0/tests/test_errors.py +173 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_hosts.py +1 -1
- pythonnative-0.50.0/tests/test_performance_budgets.py +164 -0
- pythonnative-0.50.0/tests/test_qr.py +279 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_release_packaging.py +6 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_runtime_correctness.py +47 -13
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_runtime_overhaul.py +8 -2
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_web_transport.py +32 -39
- pythonnative-0.48.0/src/pythonnative/devclient.py +0 -869
- pythonnative-0.48.0/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/ErrorOverlay.kt +0 -42
- pythonnative-0.48.0/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNCommit.swift +0 -153
- pythonnative-0.48.0/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/PNErrorOverlay.swift +0 -47
- 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.50.0}/LICENSE +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/MANIFEST.in +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/scripts/check-distributions.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/scripts/cibuildwheel.toml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/scripts/release-assets.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/setup.cfg +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/setup.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/_ios_log.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/alerts.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/animated.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/animation_graph.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/appearance.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/assets/__init__.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/assets/fonts.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/bridge/codec.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/bridge/list_store.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/cli/__init__.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/components/controls.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/components/events.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/components/graphics.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/components/layout.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/components/lists.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/components/media.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/components/overlays.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/components/pressable.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/components/props.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/components/structural.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/components/text.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/__init__.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/auth.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/animation_graph.js +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/assets.js +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/colors.js +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/contracts.js +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/layout.js +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/list-store.js +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/yoga/LICENSE +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/yoga/binaries/yoga-wasm-base64-esm.js +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/yoga/src/generated/YGEnums.d.ts +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/yoga/src/generated/YGEnums.js +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/yoga/src/generated/YGEnums.js.map +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/yoga/src/index.d.ts +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/yoga/src/index.js +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/yoga/src/index.js.map +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/yoga/src/load.d.ts +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/yoga/src/load.js +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/yoga/src/load.js.map +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/yoga/src/wrapAssembly.d.ts +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/yoga/src/wrapAssembly.js +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/static/yoga/src/wrapAssembly.js.map +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/watcher.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/devserver/ws.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/equality.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/events.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/handles.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/hosts/__init__.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/icons/LICENSE-lucide.txt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/icons/__init__.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/icons/_lucide.json +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/icons/_names.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/lint.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/list_data.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/mutations.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/build.gradle +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/gradle.properties +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/settings.gradle +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/cpp/CMakeLists.txt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/cpp/yoga_jni.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/generated/NativeModules.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/AnimationGraph.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/AnimationSpecs.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/PNAnimator.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/assets/PNAssets.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/JsonUtil.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/MainThread.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNLog.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNRegistry.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/ViewRegistry.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/BuiltinComponents.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ButtonManager.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ContainerManagers.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ControlManagers.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/DatePickerManager.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/EffectManagers.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ImageLoader.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ImageManager.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ListStore.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ModalManager.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PNColor.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PNTheme.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PickerManager.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PortalManager.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PressableManager.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ScreenStackManager.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ScreenTransitions.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ScrollViewManager.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/SegmentedControlManager.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/StatusBarManager.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/SvgManager.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TabBarManager.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TextInputManager.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TextManager.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ViewStyler.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/VirtualListManager.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/WebViewManager.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/GestureArbiter.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/GestureCoordinator.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/GestureRecognizers.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/graphics/SvgPath.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/layout/YogaNode.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/AssetModules.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/MediaModules.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/NativeModule.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/NotificationsModule.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/PermissionsModule.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/PlatformModules.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/StorageModules.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/SystemModules.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/plugins/GeneratedPlugins.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/screens/PNKeyboard.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/screens/ScreenRegistry.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNAccessibilityDelegate.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNBorderDrawable.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNEditText.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNFrameLayout.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNScrollViews.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/res/anim/pn_fade_in.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/res/anim/pn_fade_out.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/res/anim/pn_hold.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/res/anim/pn_slide_in_bottom.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/res/anim/pn_slide_in_left.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/res/anim/pn_slide_in_right.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/res/anim/pn_slide_out_bottom.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/res/anim/pn_slide_out_left.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/res/anim/pn_slide_out_right.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/res/drawable/pn_ic_arrow_back.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/res/values/pn_ids.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/main/res/xml/pn_file_paths.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/generated/PNRecordFixtures.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/AnimationSpecsTest.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/AssetsAndSvgTest.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/ContractFixtureTest.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/GestureArbiterTest.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/PNColorTest.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/PromiseTest.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/RoundOneRobolectricTest.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/RoundTwoLogicTest.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/RoundTwoRobolectricTest.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/ScreenTransitionsTest.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/android/src/test/java/com/pythonnative/runtime/StyleAccessibilityDeviceTest.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Package.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Animation/PNAnimationGraph.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Animation/PNAnimator.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNViewRegistry.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNButtonManagers.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNColor.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNComponentManager.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNContainerView.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNControlManagers.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNEffectManagers.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNImageManager.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNListStore.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNOverlayManagers.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNPressableManager.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNScreenStackManager.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNScrollViewManager.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNSvgManager.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTabBarManager.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTextInputManager.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTextManager.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTransform.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewManager.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewStyler.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Components/PNWebViewManager.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Generated/NativeModules.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Gestures/PNGestureCoordinator.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/AlertModule.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/EnvironmentModules.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/ImagesModule.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/LifecycleModules.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/MediaModules.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/PNNativeModule.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/PermissionModules.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Modules/SystemModules.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Plugins/PNPluginRegistration.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Resources/PrivacyInfo.xcprivacy +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Screens/PNScreenRegistry.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNAssets.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNCompat.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNJSON.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Sources/PythonNativeKit/Support/PNLog.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Tests/NativeTests.xcodeproj/project.pbxproj +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Tests/NativeTests.xcodeproj/xcshareddata/xcschemes/NativeTests.xcscheme +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/Fixtures/validation.json +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNAnimationGraphTests.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNAssetTests.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNColorTests.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNContractFixtureTests.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNGestureTests.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNManagerTests.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Tests/PythonNativeKitTests/PNRecordFixtures.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/ios/Tests/TestHost/main.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/LICENSE +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/Package.swift +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/VENDORED.md +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/include/PNStyle.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/include/module.modulemap +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/include/yoga/YGConfig.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/include/yoga/YGEnums.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/include/yoga/YGMacros.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/include/yoga/YGNode.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/include/yoga/YGNodeLayout.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/include/yoga/YGNodeStyle.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/include/yoga/YGPixelGrid.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/include/yoga/YGValue.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/include/yoga/Yoga.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/python.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/style.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/CMakeLists.txt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/YGConfig.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/YGConfig.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/YGEnums.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/YGEnums.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/YGMacros.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/YGNode.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/YGNode.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/YGNodeLayout.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/YGNodeLayout.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/YGNodeStyle.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/YGNodeStyle.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/YGPixelGrid.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/YGPixelGrid.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/YGValue.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/YGValue.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/Yoga.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/algorithm/AbsoluteLayout.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/algorithm/AbsoluteLayout.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/algorithm/Align.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/algorithm/Baseline.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/algorithm/Baseline.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/algorithm/BoundAxis.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/algorithm/Cache.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/algorithm/Cache.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/algorithm/CalculateLayout.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/algorithm/CalculateLayout.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/algorithm/FlexDirection.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/algorithm/FlexLine.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/algorithm/FlexLine.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/algorithm/PixelGrid.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/algorithm/PixelGrid.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/algorithm/SizingMode.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/algorithm/TrailingPosition.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/config/Config.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/config/Config.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/debug/AssertFatal.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/debug/AssertFatal.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/debug/Log.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/debug/Log.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/Align.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/BoxSizing.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/Dimension.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/Direction.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/Display.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/Edge.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/Errata.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/ExperimentalFeature.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/FlexDirection.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/Gutter.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/Justify.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/LogLevel.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/MeasureMode.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/NodeType.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/Overflow.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/PhysicalEdge.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/PositionType.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/Unit.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/Wrap.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/enums/YogaEnums.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/event/event.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/event/event.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/module.modulemap +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/node/CachedMeasurement.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/node/LayoutResults.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/node/LayoutResults.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/node/LayoutableChildren.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/node/Node.cpp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/node/Node.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/numeric/Comparison.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/numeric/FloatOptional.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/style/SmallValueBuffer.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/style/Style.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/style/StyleLength.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/style/StyleValueHandle.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native/yoga/yoga/style/StyleValuePool.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/__init__.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/accessibility_info.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/app_state.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/battery.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/biometrics.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/camera.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/clipboard.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/device.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/dimensions.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/fallback.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/file_system.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/haptics.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/images.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/keyboard.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/localization.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/location.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/net_info.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/notifications.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/permissions.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/registry.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/secure_store.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_modules/share.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_views/__init__.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/native_views/bridge_backend.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/navigation/__init__.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/navigation/container.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/navigation/handle.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/navigation/hooks.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/navigation/host.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/navigation/linking.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/navigation/navigators.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/navigation/ref.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/navigation/screen.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/navigation/state.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/platform.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/platform_metrics.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/project/__init__.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/project/config.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/project/deps.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/project/devices.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/project/fingerprint.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/project/icons.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/project/lockfile.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/project/permissions.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/project/plugins.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/prop_checks.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/py.typed +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/query.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/reconciler/__init__.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/reconciler/boundaries.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/reconciler/children.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/reconciler/layout_pass.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/runtime.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/scheduler.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/sdk/__init__.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/sdk/_components.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/sdk/commands.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/sdk/module_codegen.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/sdk/native_types.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/sdk/services.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/sdk/types.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/storage.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/store.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/style.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/suspense.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/svg.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/proguard-rules.pro +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/debug/AndroidManifest.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/java/com/pythonnative/android_template/ScreenFragment.kt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/drawable/ic_launcher_background.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/layout/activity_main.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.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.50.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-hdpi/ic_launcher.webp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-mdpi/ic_launcher.webp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xhdpi/ic_launcher.webp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/navigation/nav_graph.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/values/colors.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/values/strings.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/values/themes.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/values-night/themes.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/xml/backup_rules.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/app/src/main/res/xml/data_extraction_rules.xml +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/build.gradle +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/gradle/wrapper/gradle-wrapper.jar +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/gradle/wrapper/gradle-wrapper.properties +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/gradle.properties +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/gradlew +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/gradlew.bat +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/android_template/settings.gradle +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/ios_template/ios_template/Assets.xcassets/AccentColor.colorset/Contents.json +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/ios_template/ios_template/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/ios_template/ios_template/Assets.xcassets/Contents.json +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/ios_template/ios_template/Base.lproj/LaunchScreen.storyboard +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/ios_template/ios_template/BridgingHeader.h +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/ios_template/ios_template/Info.plist +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/ios_template/ios_template/PrivacyInfo.xcprivacy +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/templates/ios_template/ios_template.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/testing/__init__.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/testing/backend.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/testing/clock.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/testing/harness.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/testing/queries.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/theme.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative/utils.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative.egg-info/dependency_links.txt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative.egg-info/entry_points.txt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/src/pythonnative.egg-info/top_level.txt +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_alert.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_animated.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_animated_easing.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_animated_graph.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_appearance.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_assets.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_authoring.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_components.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_contract_fixtures.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_device_modules.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_devserver_ws.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_e2e_suite_renders.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_element.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_events.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_extended_components.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_gesture_activation.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_gesture_composition.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_gestures.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_handles.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_hooks.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_hot_reload.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_identity_bailout.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_inbox.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_incremental_pipeline.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_incremental_render.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_interaction_props.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_ios_log.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_layout.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_lint.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_list_features.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_metric_hooks.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_mutations.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_native_lists.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_native_modules.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_native_values.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_native_views.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_navigation.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_net.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_new_components.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_platform.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_platform_metrics.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_reconciler.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_ref.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_release_workflow.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_runtime.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_runtime_contracts.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_sdk.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_smoke.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_storage.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_store.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_style.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_suspense.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_testing_library.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_theme.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_transitions.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_typed_events.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_typing_conformance.py +0 -0
- {pythonnative-0.48.0 → pythonnative-0.50.0}/tests/test_utils.py +0 -0
|
@@ -113,3 +113,83 @@ jobs:
|
|
|
113
113
|
uses: pypa/gh-action-pypi-publish@release/v1
|
|
114
114
|
with:
|
|
115
115
|
skip-existing: true
|
|
116
|
+
|
|
117
|
+
# PythonNative Go, the prebuilt dev client, ships as release assets that
|
|
118
|
+
# `pn go` downloads for the matching version (RFC 0006). Its builds run
|
|
119
|
+
# after PyPI publishing so a toolchain hiccup never blocks the package.
|
|
120
|
+
go:
|
|
121
|
+
name: Build PythonNative Go (${{ matrix.name }})
|
|
122
|
+
needs: [release, publish]
|
|
123
|
+
if: needs.release.outputs.tag != '' && needs.release.outputs.commit != ''
|
|
124
|
+
strategy:
|
|
125
|
+
fail-fast: false
|
|
126
|
+
matrix:
|
|
127
|
+
# The simulator app's Python runtime is staged for one architecture,
|
|
128
|
+
# so each Mac architecture gets its own asset, built on a runner of
|
|
129
|
+
# that architecture (`pn go` downloads the one matching the Mac).
|
|
130
|
+
include:
|
|
131
|
+
- name: ios-arm64
|
|
132
|
+
platform: ios
|
|
133
|
+
runner: macos-15
|
|
134
|
+
- name: ios-x86_64
|
|
135
|
+
platform: ios
|
|
136
|
+
runner: macos-15-intel
|
|
137
|
+
- name: android
|
|
138
|
+
platform: android
|
|
139
|
+
runner: ubuntu-24.04
|
|
140
|
+
runs-on: ${{ matrix.runner }}
|
|
141
|
+
env:
|
|
142
|
+
DEVELOPER_DIR: /Applications/Xcode_26.3.app/Contents/Developer
|
|
143
|
+
timeout-minutes: 45
|
|
144
|
+
steps:
|
|
145
|
+
- uses: actions/checkout@v4
|
|
146
|
+
with:
|
|
147
|
+
ref: ${{ needs.release.outputs.commit }}
|
|
148
|
+
- uses: astral-sh/setup-uv@v10.0.1
|
|
149
|
+
with:
|
|
150
|
+
enable-cache: true
|
|
151
|
+
python-version: '3.13'
|
|
152
|
+
- name: Set up Java 17
|
|
153
|
+
if: matrix.platform == 'android'
|
|
154
|
+
uses: actions/setup-java@v4
|
|
155
|
+
with:
|
|
156
|
+
distribution: 'temurin'
|
|
157
|
+
java-version: '17'
|
|
158
|
+
- name: Set up Gradle
|
|
159
|
+
if: matrix.platform == 'android'
|
|
160
|
+
uses: gradle/actions/setup-gradle@v4
|
|
161
|
+
- name: Install PythonNative
|
|
162
|
+
run: uv sync --locked
|
|
163
|
+
- name: Build and package
|
|
164
|
+
run: uv run python scripts/build-go.py --platform ${{ matrix.platform }} --out go-dist
|
|
165
|
+
- uses: actions/upload-artifact@v4
|
|
166
|
+
with:
|
|
167
|
+
name: go-${{ matrix.name }}
|
|
168
|
+
path: go-dist/
|
|
169
|
+
if-no-files-found: error
|
|
170
|
+
|
|
171
|
+
go-assets:
|
|
172
|
+
name: Attach PythonNative Go to the release
|
|
173
|
+
needs: [release, go]
|
|
174
|
+
runs-on: ubuntu-24.04
|
|
175
|
+
permissions:
|
|
176
|
+
contents: write
|
|
177
|
+
steps:
|
|
178
|
+
- uses: actions/checkout@v4
|
|
179
|
+
with:
|
|
180
|
+
ref: ${{ needs.release.outputs.commit }}
|
|
181
|
+
- uses: actions/download-artifact@v4
|
|
182
|
+
with:
|
|
183
|
+
pattern: go-*
|
|
184
|
+
path: go-dist
|
|
185
|
+
merge-multiple: true
|
|
186
|
+
- uses: astral-sh/setup-uv@v10.0.1
|
|
187
|
+
with:
|
|
188
|
+
python-version: '3.13'
|
|
189
|
+
- name: Write checksums
|
|
190
|
+
run: uv run python scripts/build-go.py --checksums go-dist
|
|
191
|
+
- name: Upload
|
|
192
|
+
env:
|
|
193
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
194
|
+
RELEASE_TAG: ${{ needs.release.outputs.tag }}
|
|
195
|
+
run: gh release upload "$RELEASE_TAG" go-dist/* --clobber
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pythonnative
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.50.0
|
|
4
4
|
Summary: Cross-platform native UI toolkit for Android and iOS
|
|
5
5
|
Author: Owen Carey
|
|
6
6
|
License: MIT License
|
|
@@ -40,6 +40,7 @@ Classifier: Topic :: Software Development :: User Interfaces
|
|
|
40
40
|
Requires-Python: >=3.13
|
|
41
41
|
Description-Content-Type: text/markdown
|
|
42
42
|
License-File: LICENSE
|
|
43
|
+
Requires-Dist: debugpy>=1.8
|
|
43
44
|
Provides-Extra: build
|
|
44
45
|
Requires-Dist: Pillow>=10.0; extra == "build"
|
|
45
46
|
Dynamic: license-file
|
|
@@ -88,7 +89,9 @@ PythonNative is a cross-platform toolkit for building native Android and iOS app
|
|
|
88
89
|
- **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.
|
|
89
90
|
- **Native extension SDK:** Python dataclasses and protocols define contracts; `define_component` returns a typed element factory and `pn codegen` generates props and module adapters for Swift and Kotlin. Plugins package native sources and resources, and builds verify matching contracts at startup.
|
|
90
91
|
- **Testing library:** `pythonnative.testing` renders components headlessly with Testing Library-style queries (`get_by_role`, `get_by_placeholder_text`, `within`, `find_by_*`), a virtual clock for timers, and a pytest plugin that resets the runtime between tests.
|
|
91
|
-
- **
|
|
92
|
+
- **PythonNative Go:** a prebuilt dev client, published with each release, runs any project without native code, so the project itself is never compiled. `i` / `a` in `pn start` open it on the iOS Simulator (which still needs Xcode installed) or an Android emulator, and a phone with Go installed opens the project by scanning the QR code `pn start` prints. Go isn't in the app stores: Android phones install the APK, and iPhones need Go built and signed with your Apple team. Projects that add native code run in their own debug build, which `pn run` rebuilds only when something native changes.
|
|
93
|
+
- **DevTools and debugging:** `pn start` serves DevTools, with a component tree showing props and hooks (and editable state), a console with a REPL inside the running app, problems with component stacks and source excerpts, network requests, and live performance with trace capture. VS Code attaches `debugpy` breakpoints to Python on the preview, a simulator, or a phone. On device, a dev menu (shake or Cmd+D) offers reload, an element inspector, and a performance monitor, and errors show a screen with the component stack and your source.
|
|
94
|
+
- **Development tools:** Fast Refresh preserves compatible component state, `pn lint` checks the rules of hooks, and `pn init` scaffolds tests, type checking, debugger settings, and CI.
|
|
92
95
|
- **Browser preview:** `pn preview` runs your Python application against a browser renderer with DOM widgets, Yoga WebAssembly layout, and JavaScript animation graphs. It supports iteration on application logic and UI; fonts, platform controls, and device APIs require mobile testing.
|
|
93
96
|
- **App packaging and dependency locks:** `pn run` and `pn build` stage bundled app templates, native libraries, and Python sources. Target-specific wheel locks record dependency versions and hashes for mobile builds. Binary dependencies need compatible mobile wheels; `pn deps` reports target resolution.
|
|
94
97
|
|
|
@@ -125,9 +128,8 @@ def App() -> pn.Node:
|
|
|
125
128
|
|
|
126
129
|
```bash
|
|
127
130
|
pn init my-app && cd my-app
|
|
128
|
-
pn
|
|
129
|
-
pn run ios #
|
|
130
|
-
pn run android
|
|
131
|
+
pn start # dev server: scan the QR code, or press i (iOS), a (Android), w (browser), j (DevTools)
|
|
132
|
+
pn run ios # the project's own debug build, for projects that add native code
|
|
131
133
|
pn build ios # standalone release artifacts
|
|
132
134
|
```
|
|
133
135
|
|
|
@@ -42,7 +42,9 @@ PythonNative is a cross-platform toolkit for building native Android and iOS app
|
|
|
42
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.
|
|
43
43
|
- **Native extension SDK:** Python dataclasses and protocols define contracts; `define_component` returns a typed element factory and `pn codegen` generates props and module adapters for Swift and Kotlin. Plugins package native sources and resources, and builds verify matching contracts at startup.
|
|
44
44
|
- **Testing library:** `pythonnative.testing` renders components headlessly with Testing Library-style queries (`get_by_role`, `get_by_placeholder_text`, `within`, `find_by_*`), a virtual clock for timers, and a pytest plugin that resets the runtime between tests.
|
|
45
|
-
- **
|
|
45
|
+
- **PythonNative Go:** a prebuilt dev client, published with each release, runs any project without native code, so the project itself is never compiled. `i` / `a` in `pn start` open it on the iOS Simulator (which still needs Xcode installed) or an Android emulator, and a phone with Go installed opens the project by scanning the QR code `pn start` prints. Go isn't in the app stores: Android phones install the APK, and iPhones need Go built and signed with your Apple team. Projects that add native code run in their own debug build, which `pn run` rebuilds only when something native changes.
|
|
46
|
+
- **DevTools and debugging:** `pn start` serves DevTools, with a component tree showing props and hooks (and editable state), a console with a REPL inside the running app, problems with component stacks and source excerpts, network requests, and live performance with trace capture. VS Code attaches `debugpy` breakpoints to Python on the preview, a simulator, or a phone. On device, a dev menu (shake or Cmd+D) offers reload, an element inspector, and a performance monitor, and errors show a screen with the component stack and your source.
|
|
47
|
+
- **Development tools:** Fast Refresh preserves compatible component state, `pn lint` checks the rules of hooks, and `pn init` scaffolds tests, type checking, debugger settings, and CI.
|
|
46
48
|
- **Browser preview:** `pn preview` runs your Python application against a browser renderer with DOM widgets, Yoga WebAssembly layout, and JavaScript animation graphs. It supports iteration on application logic and UI; fonts, platform controls, and device APIs require mobile testing.
|
|
47
49
|
- **App packaging and dependency locks:** `pn run` and `pn build` stage bundled app templates, native libraries, and Python sources. Target-specific wheel locks record dependency versions and hashes for mobile builds. Binary dependencies need compatible mobile wheels; `pn deps` reports target resolution.
|
|
48
50
|
|
|
@@ -79,9 +81,8 @@ def App() -> pn.Node:
|
|
|
79
81
|
|
|
80
82
|
```bash
|
|
81
83
|
pn init my-app && cd my-app
|
|
82
|
-
pn
|
|
83
|
-
pn run ios #
|
|
84
|
-
pn run android
|
|
84
|
+
pn start # dev server: scan the QR code, or press i (iOS), a (Android), w (browser), j (DevTools)
|
|
85
|
+
pn run ios # the project's own debug build, for projects that add native code
|
|
85
86
|
pn build ios # standalone release artifacts
|
|
86
87
|
```
|
|
87
88
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pythonnative"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.50.0"
|
|
8
8
|
description = "Cross-platform native UI toolkit for Android and iOS"
|
|
9
9
|
authors = [
|
|
10
10
|
{ name = "Owen Carey" }
|
|
@@ -26,7 +26,11 @@ classifiers = [
|
|
|
26
26
|
"Programming Language :: Python :: 3.14",
|
|
27
27
|
"Topic :: Software Development :: User Interfaces",
|
|
28
28
|
]
|
|
29
|
-
|
|
29
|
+
# debugpy is development tooling: `pn start` syncs its sources to dev
|
|
30
|
+
# clients for breakpoint debugging (RFC 0006). App bundles never include it.
|
|
31
|
+
dependencies = [
|
|
32
|
+
"debugpy>=1.8",
|
|
33
|
+
]
|
|
30
34
|
|
|
31
35
|
[project.optional-dependencies]
|
|
32
36
|
build = [
|
|
@@ -99,6 +103,7 @@ pythonnative = [
|
|
|
99
103
|
"templates/**", "native/**", "sdk/templates/**",
|
|
100
104
|
"devserver/static/**",
|
|
101
105
|
"icons/_lucide.json", "icons/LICENSE-lucide.txt",
|
|
106
|
+
"sdk/_builtin_contracts.json",
|
|
102
107
|
]
|
|
103
108
|
|
|
104
109
|
[tool.setuptools.exclude-package-data]
|
|
@@ -66,11 +66,13 @@ Example:
|
|
|
66
66
|
```
|
|
67
67
|
"""
|
|
68
68
|
|
|
69
|
-
__version__ = "0.
|
|
69
|
+
__version__ = "0.50.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
|
|
@@ -84,11 +88,20 @@ def start(dev: bool = False, strict: bool = False) -> Dict[str, Any]:
|
|
|
84
88
|
|
|
85
89
|
client = devclient.start_if_configured()
|
|
86
90
|
status_["dev_server"] = client.server_label if client is not None else None
|
|
91
|
+
if client is None:
|
|
92
|
+
# No server yet: the dev menu, inspector, and performance
|
|
93
|
+
# monitor still work locally; a connection replaces this
|
|
94
|
+
# agent with one that reports to DevTools.
|
|
95
|
+
devclient.install_local_agent()
|
|
87
96
|
# An overlay from the last session may already hold assets the
|
|
88
97
|
# bundle doesn't; point the native resolver at it right away.
|
|
89
98
|
from .assets import configure_native
|
|
90
99
|
|
|
91
100
|
configure_native()
|
|
101
|
+
if entry:
|
|
102
|
+
import importlib
|
|
103
|
+
|
|
104
|
+
importlib.import_module(entry)
|
|
92
105
|
except Exception as exc:
|
|
93
106
|
status_["error"] = f"{type(exc).__name__}: {exc}"
|
|
94
107
|
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:
|