pythonnative 0.40.0__cp314-cp314-win_amd64.whl
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/__init__.py +411 -0
- pythonnative/_ios_log.py +92 -0
- pythonnative/_yoga.cp314-win_amd64.pyd +0 -0
- pythonnative/alerts.py +236 -0
- pythonnative/animated.py +1687 -0
- pythonnative/animation_graph.py +78 -0
- pythonnative/appearance.py +124 -0
- pythonnative/bootstrap.py +100 -0
- pythonnative/bridge/__init__.py +302 -0
- pythonnative/bridge/android.py +78 -0
- pythonnative/bridge/codec.py +170 -0
- pythonnative/bridge/commits.py +114 -0
- pythonnative/bridge/fake.py +243 -0
- pythonnative/bridge/ios.py +138 -0
- pythonnative/bridge/web.py +489 -0
- pythonnative/cli/__init__.py +7 -0
- pythonnative/cli/pn.py +1214 -0
- pythonnative/component.py +271 -0
- pythonnative/components/__init__.py +111 -0
- pythonnative/components/_base.py +166 -0
- pythonnative/components/controls.py +521 -0
- pythonnative/components/layout.py +518 -0
- pythonnative/components/lists.py +785 -0
- pythonnative/components/media.py +204 -0
- pythonnative/components/overlays.py +107 -0
- pythonnative/components/pressable.py +252 -0
- pythonnative/components/structural.py +167 -0
- pythonnative/components/text.py +291 -0
- pythonnative/devclient.py +824 -0
- pythonnative/devserver/__init__.py +34 -0
- pythonnative/devserver/server.py +718 -0
- pythonnative/devserver/static/animation_graph.js +82 -0
- pythonnative/devserver/static/bridge.js +147 -0
- pythonnative/devserver/static/colors.js +70 -0
- pythonnative/devserver/static/host.js +552 -0
- pythonnative/devserver/static/index.html +60 -0
- pythonnative/devserver/static/layout.js +85 -0
- pythonnative/devserver/static/preview.css +415 -0
- pythonnative/devserver/static/renderer.js +1994 -0
- pythonnative/devserver/static/shell.js +345 -0
- pythonnative/devserver/static/yoga/LICENSE +21 -0
- pythonnative/devserver/static/yoga/binaries/yoga-wasm-base64-esm.js +75 -0
- pythonnative/devserver/static/yoga/src/generated/YGEnums.d.ts +189 -0
- pythonnative/devserver/static/yoga/src/generated/YGEnums.js +211 -0
- pythonnative/devserver/static/yoga/src/generated/YGEnums.js.map +1 -0
- pythonnative/devserver/static/yoga/src/index.d.ts +12 -0
- pythonnative/devserver/static/yoga/src/index.js +16 -0
- pythonnative/devserver/static/yoga/src/index.js.map +1 -0
- pythonnative/devserver/static/yoga/src/load.d.ts +11 -0
- pythonnative/devserver/static/yoga/src/load.js +17 -0
- pythonnative/devserver/static/yoga/src/load.js.map +1 -0
- pythonnative/devserver/static/yoga/src/wrapAssembly.d.ts +155 -0
- pythonnative/devserver/static/yoga/src/wrapAssembly.js +125 -0
- pythonnative/devserver/static/yoga/src/wrapAssembly.js.map +1 -0
- pythonnative/devserver/watcher.py +267 -0
- pythonnative/devserver/ws.py +421 -0
- pythonnative/diagnostics.py +241 -0
- pythonnative/element.py +159 -0
- pythonnative/equality.py +19 -0
- pythonnative/events.py +231 -0
- pythonnative/gestures.py +1333 -0
- pythonnative/hooks.py +1621 -0
- pythonnative/hosts/__init__.py +63 -0
- pythonnative/hosts/base.py +596 -0
- pythonnative/hosts/native.py +302 -0
- pythonnative/hot_reload.py +585 -0
- pythonnative/layout.py +328 -0
- pythonnative/mutations.py +142 -0
- pythonnative/native/android/build.gradle +52 -0
- pythonnative/native/android/gradle.properties +3 -0
- pythonnative/native/android/settings.gradle +12 -0
- pythonnative/native/android/src/main/AndroidManifest.xml +11 -0
- pythonnative/native/android/src/main/cpp/CMakeLists.txt +9 -0
- pythonnative/native/android/src/main/cpp/yoga_jni.cpp +52 -0
- pythonnative/native/android/src/main/java/com/pythonnative/generated/NativeModules.kt +5 -0
- pythonnative/native/android/src/main/java/com/pythonnative/generated/NativeProps.kt +3705 -0
- pythonnative/native/android/src/main/java/com/pythonnative/generated/PNContracts.kt +129 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/PNBridge.kt +261 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/PythonHost.kt +20 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/AnimationGraph.kt +108 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/AnimationSpecs.kt +141 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/PNAnimator.kt +257 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/CommitState.kt +106 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/JsonUtil.kt +175 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/MainThread.kt +40 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNLog.kt +33 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNRegistry.kt +82 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNTransaction.kt +80 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/TransactionApplier.kt +117 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/ViewRegistry.kt +74 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/BuiltinComponents.kt +37 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ButtonManager.kt +32 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ComponentManager.kt +213 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ContainerManagers.kt +69 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ControlManagers.kt +186 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/DatePickerManager.kt +123 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ImageLoader.kt +141 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ImageManager.kt +162 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ModalManager.kt +134 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PNColor.kt +201 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PickerManager.kt +86 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PortalManager.kt +55 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PressableManager.kt +122 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ScreenStackManager.kt +110 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ScrollViewManager.kt +214 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/SegmentedControlManager.kt +113 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/StatusBarManager.kt +52 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TabBarManager.kt +131 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TextInputManager.kt +250 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TextManager.kt +233 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ViewStyler.kt +355 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/VirtualListManager.kt +159 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/WebViewManager.kt +149 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/GestureArbiter.kt +233 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/GestureCoordinator.kt +127 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/GestureRecognizers.kt +527 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/layout/NativeLayout.kt +145 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/layout/YogaNode.kt +29 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/BuiltinModules.kt +73 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/DeviceModules.kt +316 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/HostModule.kt +61 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/MediaModules.kt +200 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/NativeModule.kt +158 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/NotificationsModule.kt +100 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/PermissionsModule.kt +99 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/StorageModules.kt +89 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/SystemModules.kt +178 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/plugins/GeneratedPlugins.kt +16 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/screens/PNScreenFragment.kt +188 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/screens/ScreenRegistry.kt +80 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNAccessibilityDelegate.kt +48 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNBorderDrawable.kt +76 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNEditText.kt +18 -0
- pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNFrameLayout.kt +49 -0
- pythonnative/native/android/src/test/java/com/pythonnative/runtime/AnimationSpecsTest.kt +75 -0
- pythonnative/native/android/src/test/java/com/pythonnative/runtime/GestureArbiterTest.kt +197 -0
- pythonnative/native/android/src/test/java/com/pythonnative/runtime/PNColorTest.kt +47 -0
- pythonnative/native/android/src/test/java/com/pythonnative/runtime/PNTransactionTest.kt +78 -0
- pythonnative/native/android/src/test/java/com/pythonnative/runtime/PromiseTest.kt +89 -0
- pythonnative/native/ios/Package.swift +23 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Animation/PNAnimationGraph.swift +199 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Animation/PNAnimator.swift +312 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNBridge.swift +255 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNCommit.swift +104 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNRegistry.swift +142 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNTransaction.swift +166 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNViewRegistry.swift +53 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNButtonManagers.swift +207 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNColor.swift +173 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNComponentManager.swift +183 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNContainerView.swift +56 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNControlManagers.swift +281 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNImageManager.swift +222 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNOverlayManagers.swift +243 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNPressableManager.swift +114 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNScreenStackManager.swift +107 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNScrollViewManager.swift +197 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTabBarManager.swift +106 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTextInputManager.swift +297 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTextManager.swift +230 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTransform.swift +82 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewManager.swift +86 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewState.swift +87 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewStyler.swift +340 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNVirtualListManager.swift +155 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Components/PNWebViewManager.swift +124 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Generated/NativeModules.swift +1 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Generated/NativeProps.swift +3775 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Generated/PNContracts.swift +46 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Gestures/PNGestureCoordinator.swift +260 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Layout/PNLayout.swift +173 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Modules/AlertModule.swift +92 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Modules/HostModule.swift +80 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Modules/LifecycleModules.swift +174 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Modules/MediaModules.swift +177 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Modules/PNNativeModule.swift +168 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Modules/PermissionModules.swift +266 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Modules/SystemModules.swift +251 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Plugins/PNPluginRegistration.swift +8 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Screens/PNScreenRegistry.swift +46 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Screens/PNViewController.swift +237 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Support/PNCompat.swift +46 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Support/PNJSON.swift +173 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Support/PNLog.swift +47 -0
- pythonnative/native/ios/Sources/PythonNativeKit/Support/PNWindow.swift +51 -0
- pythonnative/native/ios/Tests/PythonNativeKitTests/PNAnimationGraphTests.swift +26 -0
- pythonnative/native/ios/Tests/PythonNativeKitTests/PNColorTests.swift +50 -0
- pythonnative/native/ios/Tests/PythonNativeKitTests/PNCommitTests.swift +86 -0
- pythonnative/native/ios/Tests/PythonNativeKitTests/PNGestureTests.swift +101 -0
- pythonnative/native/ios/Tests/PythonNativeKitTests/PNManagerTests.swift +126 -0
- pythonnative/native/ios/Tests/PythonNativeKitTests/PNModuleTests.swift +111 -0
- pythonnative/native/ios/Tests/PythonNativeKitTests/PNTransactionTests.swift +91 -0
- pythonnative/native/yoga/LICENSE +21 -0
- pythonnative/native/yoga/Package.swift +9 -0
- pythonnative/native/yoga/VENDORED.md +2 -0
- pythonnative/native/yoga/include/PNStyle.h +10 -0
- pythonnative/native/yoga/include/module.modulemap +5 -0
- pythonnative/native/yoga/include/yoga/YGConfig.h +158 -0
- pythonnative/native/yoga/include/yoga/YGEnums.h +142 -0
- pythonnative/native/yoga/include/yoga/YGMacros.h +99 -0
- pythonnative/native/yoga/include/yoga/YGNode.h +304 -0
- pythonnative/native/yoga/include/yoga/YGNodeLayout.h +35 -0
- pythonnative/native/yoga/include/yoga/YGNodeStyle.h +130 -0
- pythonnative/native/yoga/include/yoga/YGPixelGrid.h +29 -0
- pythonnative/native/yoga/include/yoga/YGValue.h +84 -0
- pythonnative/native/yoga/include/yoga/Yoga.h +21 -0
- pythonnative/native/yoga/python.cpp +16 -0
- pythonnative/native/yoga/style.cpp +272 -0
- pythonnative/native/yoga/yoga/CMakeLists.txt +41 -0
- pythonnative/native/yoga/yoga/YGConfig.cpp +92 -0
- pythonnative/native/yoga/yoga/YGConfig.h +158 -0
- pythonnative/native/yoga/yoga/YGEnums.cpp +262 -0
- pythonnative/native/yoga/yoga/YGEnums.h +142 -0
- pythonnative/native/yoga/yoga/YGMacros.h +99 -0
- pythonnative/native/yoga/yoga/YGNode.cpp +366 -0
- pythonnative/native/yoga/yoga/YGNode.h +304 -0
- pythonnative/native/yoga/yoga/YGNodeLayout.cpp +92 -0
- pythonnative/native/yoga/yoga/YGNodeLayout.h +35 -0
- pythonnative/native/yoga/yoga/YGNodeStyle.cpp +405 -0
- pythonnative/native/yoga/yoga/YGNodeStyle.h +130 -0
- pythonnative/native/yoga/yoga/YGPixelGrid.cpp +22 -0
- pythonnative/native/yoga/yoga/YGPixelGrid.h +29 -0
- pythonnative/native/yoga/yoga/YGValue.cpp +20 -0
- pythonnative/native/yoga/yoga/YGValue.h +84 -0
- pythonnative/native/yoga/yoga/Yoga.h +21 -0
- pythonnative/native/yoga/yoga/algorithm/AbsoluteLayout.cpp +563 -0
- pythonnative/native/yoga/yoga/algorithm/AbsoluteLayout.h +41 -0
- pythonnative/native/yoga/yoga/algorithm/Align.h +72 -0
- pythonnative/native/yoga/yoga/algorithm/Baseline.cpp +78 -0
- pythonnative/native/yoga/yoga/algorithm/Baseline.h +21 -0
- pythonnative/native/yoga/yoga/algorithm/BoundAxis.h +79 -0
- pythonnative/native/yoga/yoga/algorithm/Cache.cpp +121 -0
- pythonnative/native/yoga/yoga/algorithm/Cache.h +30 -0
- pythonnative/native/yoga/yoga/algorithm/CalculateLayout.cpp +2428 -0
- pythonnative/native/yoga/yoga/algorithm/CalculateLayout.h +38 -0
- pythonnative/native/yoga/yoga/algorithm/FlexDirection.h +120 -0
- pythonnative/native/yoga/yoga/algorithm/FlexLine.cpp +124 -0
- pythonnative/native/yoga/yoga/algorithm/FlexLine.h +75 -0
- pythonnative/native/yoga/yoga/algorithm/PixelGrid.cpp +132 -0
- pythonnative/native/yoga/yoga/algorithm/PixelGrid.h +29 -0
- pythonnative/native/yoga/yoga/algorithm/SizingMode.h +73 -0
- pythonnative/native/yoga/yoga/algorithm/TrailingPosition.h +44 -0
- pythonnative/native/yoga/yoga/config/Config.cpp +135 -0
- pythonnative/native/yoga/yoga/config/Config.h +92 -0
- pythonnative/native/yoga/yoga/debug/AssertFatal.cpp +53 -0
- pythonnative/native/yoga/yoga/debug/AssertFatal.h +29 -0
- pythonnative/native/yoga/yoga/debug/Log.cpp +107 -0
- pythonnative/native/yoga/yoga/debug/Log.h +34 -0
- pythonnative/native/yoga/yoga/enums/Align.h +47 -0
- pythonnative/native/yoga/yoga/enums/BoxSizing.h +40 -0
- pythonnative/native/yoga/yoga/enums/Dimension.h +40 -0
- pythonnative/native/yoga/yoga/enums/Direction.h +41 -0
- pythonnative/native/yoga/yoga/enums/Display.h +41 -0
- pythonnative/native/yoga/yoga/enums/Edge.h +47 -0
- pythonnative/native/yoga/yoga/enums/Errata.h +41 -0
- pythonnative/native/yoga/yoga/enums/ExperimentalFeature.h +39 -0
- pythonnative/native/yoga/yoga/enums/FlexDirection.h +42 -0
- pythonnative/native/yoga/yoga/enums/Gutter.h +41 -0
- pythonnative/native/yoga/yoga/enums/Justify.h +44 -0
- pythonnative/native/yoga/yoga/enums/LogLevel.h +44 -0
- pythonnative/native/yoga/yoga/enums/MeasureMode.h +41 -0
- pythonnative/native/yoga/yoga/enums/NodeType.h +40 -0
- pythonnative/native/yoga/yoga/enums/Overflow.h +41 -0
- pythonnative/native/yoga/yoga/enums/PhysicalEdge.h +21 -0
- pythonnative/native/yoga/yoga/enums/PositionType.h +41 -0
- pythonnative/native/yoga/yoga/enums/Unit.h +42 -0
- pythonnative/native/yoga/yoga/enums/Wrap.h +41 -0
- pythonnative/native/yoga/yoga/enums/YogaEnums.h +85 -0
- pythonnative/native/yoga/yoga/event/event.cpp +87 -0
- pythonnative/native/yoga/yoga/event/event.h +130 -0
- pythonnative/native/yoga/yoga/module.modulemap +21 -0
- pythonnative/native/yoga/yoga/node/CachedMeasurement.h +53 -0
- pythonnative/native/yoga/yoga/node/LayoutResults.cpp +48 -0
- pythonnative/native/yoga/yoga/node/LayoutResults.h +122 -0
- pythonnative/native/yoga/yoga/node/LayoutableChildren.h +148 -0
- pythonnative/native/yoga/yoga/node/Node.cpp +443 -0
- pythonnative/native/yoga/yoga/node/Node.h +337 -0
- pythonnative/native/yoga/yoga/numeric/Comparison.h +81 -0
- pythonnative/native/yoga/yoga/numeric/FloatOptional.h +93 -0
- pythonnative/native/yoga/yoga/style/SmallValueBuffer.h +133 -0
- pythonnative/native/yoga/yoga/style/Style.h +757 -0
- pythonnative/native/yoga/yoga/style/StyleLength.h +107 -0
- pythonnative/native/yoga/yoga/style/StyleValueHandle.h +98 -0
- pythonnative/native/yoga/yoga/style/StyleValuePool.h +127 -0
- pythonnative/native_modules/__init__.py +124 -0
- pythonnative/native_modules/app_state.py +99 -0
- pythonnative/native_modules/battery.py +75 -0
- pythonnative/native_modules/biometrics.py +42 -0
- pythonnative/native_modules/camera.py +65 -0
- pythonnative/native_modules/clipboard.py +46 -0
- pythonnative/native_modules/fallback.py +324 -0
- pythonnative/native_modules/file_system.py +145 -0
- pythonnative/native_modules/haptics.py +75 -0
- pythonnative/native_modules/linking.py +123 -0
- pythonnative/native_modules/location.py +75 -0
- pythonnative/native_modules/net_info.py +112 -0
- pythonnative/native_modules/notifications.py +129 -0
- pythonnative/native_modules/permissions.py +108 -0
- pythonnative/native_modules/registry.py +526 -0
- pythonnative/native_modules/secure_store.py +52 -0
- pythonnative/native_modules/share.py +51 -0
- pythonnative/native_views/__init__.py +375 -0
- pythonnative/native_views/base.py +316 -0
- pythonnative/native_views/bridge_backend.py +277 -0
- pythonnative/navigation/__init__.py +103 -0
- pythonnative/navigation/container.py +154 -0
- pythonnative/navigation/handle.py +540 -0
- pythonnative/navigation/hooks.py +133 -0
- pythonnative/navigation/host.py +58 -0
- pythonnative/navigation/linking.py +200 -0
- pythonnative/navigation/navigators.py +659 -0
- pythonnative/navigation/screen.py +149 -0
- pythonnative/navigation/state.py +269 -0
- pythonnative/net.py +248 -0
- pythonnative/platform.py +166 -0
- pythonnative/platform_metrics.py +252 -0
- pythonnative/preview.py +287 -0
- pythonnative/profiling.py +101 -0
- pythonnative/project/__init__.py +68 -0
- pythonnative/project/android.py +557 -0
- pythonnative/project/builder.py +817 -0
- pythonnative/project/config.py +773 -0
- pythonnative/project/deps.py +719 -0
- pythonnative/project/devices.py +304 -0
- pythonnative/project/doctor.py +283 -0
- pythonnative/project/fingerprint.py +171 -0
- pythonnative/project/icons.py +247 -0
- pythonnative/project/ios.py +325 -0
- pythonnative/project/lockfile.py +100 -0
- pythonnative/project/permissions.py +361 -0
- pythonnative/project/plugins.py +519 -0
- pythonnative/project/runtime_assets.py +183 -0
- pythonnative/py.typed +0 -0
- pythonnative/query.py +153 -0
- pythonnative/reconciler/__init__.py +29 -0
- pythonnative/reconciler/boundaries.py +375 -0
- pythonnative/reconciler/children.py +88 -0
- pythonnative/reconciler/core.py +1165 -0
- pythonnative/reconciler/layout_pass.py +393 -0
- pythonnative/reconciler/vnode.py +266 -0
- pythonnative/refresh.py +55 -0
- pythonnative/runtime.py +306 -0
- pythonnative/scheduler.py +159 -0
- pythonnative/sdk/__init__.py +153 -0
- pythonnative/sdk/_components.py +427 -0
- pythonnative/sdk/builtins.py +91 -0
- pythonnative/sdk/codegen.py +149 -0
- pythonnative/sdk/module_codegen.py +184 -0
- pythonnative/sdk/schema.py +224 -0
- pythonnative/sdk/templates/contracts.kt +46 -0
- pythonnative/sdk/templates/contracts.swift +46 -0
- pythonnative/storage.py +184 -0
- pythonnative/style.py +841 -0
- pythonnative/suspense.py +183 -0
- pythonnative/templates/android_template/app/build.gradle +75 -0
- pythonnative/templates/android_template/app/proguard-rules.pro +21 -0
- pythonnative/templates/android_template/app/src/androidTest/java/com/pythonnative/android_template/ExampleInstrumentedTest.kt +24 -0
- pythonnative/templates/android_template/app/src/debug/AndroidManifest.xml +7 -0
- pythonnative/templates/android_template/app/src/main/AndroidManifest.xml +32 -0
- pythonnative/templates/android_template/app/src/main/java/com/pythonnative/android_template/MainActivity.kt +130 -0
- pythonnative/templates/android_template/app/src/main/java/com/pythonnative/android_template/ScreenFragment.kt +13 -0
- pythonnative/templates/android_template/app/src/main/res/drawable/ic_launcher_background.xml +170 -0
- pythonnative/templates/android_template/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +30 -0
- pythonnative/templates/android_template/app/src/main/res/layout/activity_main.xml +10 -0
- pythonnative/templates/android_template/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +6 -0
- pythonnative/templates/android_template/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +6 -0
- pythonnative/templates/android_template/app/src/main/res/mipmap-hdpi/ic_launcher.webp +0 -0
- pythonnative/templates/android_template/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp +0 -0
- pythonnative/templates/android_template/app/src/main/res/mipmap-mdpi/ic_launcher.webp +0 -0
- pythonnative/templates/android_template/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp +0 -0
- pythonnative/templates/android_template/app/src/main/res/mipmap-xhdpi/ic_launcher.webp +0 -0
- pythonnative/templates/android_template/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp +0 -0
- pythonnative/templates/android_template/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp +0 -0
- pythonnative/templates/android_template/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp +0 -0
- pythonnative/templates/android_template/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp +0 -0
- pythonnative/templates/android_template/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp +0 -0
- pythonnative/templates/android_template/app/src/main/res/navigation/nav_graph.xml +22 -0
- pythonnative/templates/android_template/app/src/main/res/values/colors.xml +5 -0
- pythonnative/templates/android_template/app/src/main/res/values/strings.xml +5 -0
- pythonnative/templates/android_template/app/src/main/res/values/themes.xml +9 -0
- pythonnative/templates/android_template/app/src/main/res/values-night/themes.xml +7 -0
- pythonnative/templates/android_template/app/src/main/res/xml/backup_rules.xml +13 -0
- pythonnative/templates/android_template/app/src/main/res/xml/data_extraction_rules.xml +19 -0
- pythonnative/templates/android_template/app/src/test/java/com/pythonnative/android_template/ExampleUnitTest.kt +17 -0
- pythonnative/templates/android_template/build.gradle +10 -0
- pythonnative/templates/android_template/gradle/wrapper/gradle-wrapper.jar +0 -0
- pythonnative/templates/android_template/gradle/wrapper/gradle-wrapper.properties +6 -0
- pythonnative/templates/android_template/gradle.properties +23 -0
- pythonnative/templates/android_template/gradlew +185 -0
- pythonnative/templates/android_template/gradlew.bat +89 -0
- pythonnative/templates/android_template/settings.gradle +17 -0
- pythonnative/templates/ios_template/ios_template/AppDelegate.swift +51 -0
- pythonnative/templates/ios_template/ios_template/Assets.xcassets/AccentColor.colorset/Contents.json +11 -0
- pythonnative/templates/ios_template/ios_template/Assets.xcassets/AppIcon.appiconset/Contents.json +13 -0
- pythonnative/templates/ios_template/ios_template/Assets.xcassets/Contents.json +6 -0
- pythonnative/templates/ios_template/ios_template/Base.lproj/LaunchScreen.storyboard +25 -0
- pythonnative/templates/ios_template/ios_template/BridgingHeader.h +14 -0
- pythonnative/templates/ios_template/ios_template/Info.plist +28 -0
- pythonnative/templates/ios_template/ios_template/PythonRuntime.swift +390 -0
- pythonnative/templates/ios_template/ios_template/SceneDelegate.swift +61 -0
- pythonnative/templates/ios_template/ios_template/ViewController.swift +23 -0
- pythonnative/templates/ios_template/ios_template.xcodeproj/project.pbxproj +745 -0
- pythonnative/templates/ios_template/ios_template.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- pythonnative/templates/ios_template/ios_templateTests/ios_templateTests.swift +36 -0
- pythonnative/templates/ios_template/ios_templateUITests/ios_templateUITests.swift +41 -0
- pythonnative/templates/ios_template/ios_templateUITests/ios_templateUITestsLaunchTests.swift +32 -0
- pythonnative/testing/__init__.py +53 -0
- pythonnative/testing/backend.py +276 -0
- pythonnative/testing/harness.py +369 -0
- pythonnative/utils.py +145 -0
- pythonnative-0.40.0.dist-info/DELVEWHEEL +2 -0
- pythonnative-0.40.0.dist-info/METADATA +150 -0
- pythonnative-0.40.0.dist-info/RECORD +418 -0
- pythonnative-0.40.0.dist-info/WHEEL +5 -0
- pythonnative-0.40.0.dist-info/entry_points.txt +2 -0
- pythonnative-0.40.0.dist-info/licenses/LICENSE +21 -0
- pythonnative-0.40.0.dist-info/top_level.txt +1 -0
- pythonnative.libs/msvcp140-a4c2229bdc2a2a630acdc095b4d86008.dll +0 -0
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
"""Media factories: ``Image``, ``ImageBackground``, and ``WebView``."""
|
|
2
|
+
|
|
3
|
+
from typing import Any, Callable, Literal, Optional
|
|
4
|
+
|
|
5
|
+
from ..element import Element
|
|
6
|
+
from ..hooks import Ref
|
|
7
|
+
from ..style import AccessibilityState, Color, ScaleType, StyleProp, resolve_style
|
|
8
|
+
from ._base import _make_element
|
|
9
|
+
from .layout import View
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def Image(
|
|
13
|
+
source: str = "",
|
|
14
|
+
*,
|
|
15
|
+
scale_type: Optional[ScaleType] = None,
|
|
16
|
+
tint_color: Optional[Color] = None,
|
|
17
|
+
placeholder_color: Optional[Color] = None,
|
|
18
|
+
on_load: Optional[Callable[[], Any]] = None,
|
|
19
|
+
on_error: Optional[Callable[[str], Any]] = None,
|
|
20
|
+
style: StyleProp = None,
|
|
21
|
+
accessibility_label: Optional[str] = None,
|
|
22
|
+
accessibility_role: Optional[str] = None,
|
|
23
|
+
accessible: Optional[bool] = None,
|
|
24
|
+
accessibility_state: Optional[AccessibilityState] = None,
|
|
25
|
+
accessibility_live_region: Optional[Literal["none", "polite", "assertive"]] = None,
|
|
26
|
+
test_id: Optional[str] = None,
|
|
27
|
+
ref: Optional[Ref] = None,
|
|
28
|
+
key: Optional[str] = None,
|
|
29
|
+
) -> Element:
|
|
30
|
+
"""Display an image from a resource path or URL.
|
|
31
|
+
|
|
32
|
+
Style properties: ``background_color``, ``border_*``, ``opacity``,
|
|
33
|
+
``transform``, plus the common layout props.
|
|
34
|
+
|
|
35
|
+
Network images (``http://`` / ``https://``) go through the shared
|
|
36
|
+
image pipeline (`pythonnative.images`): downloads happen on a
|
|
37
|
+
background thread, bytes are cached in memory and on disk keyed by
|
|
38
|
+
URL, concurrent requests for the same URL share one download, and
|
|
39
|
+
large bitmaps are downsampled to the view size when decoded.
|
|
40
|
+
|
|
41
|
+
Args:
|
|
42
|
+
source: Image resource name or URL.
|
|
43
|
+
scale_type: Fit mode: ``"cover"``, ``"contain"``, ``"stretch"``,
|
|
44
|
+
``"center"``.
|
|
45
|
+
tint_color: Color overlay applied to template images
|
|
46
|
+
(monochrome icons).
|
|
47
|
+
placeholder_color: Background color shown while a remote image
|
|
48
|
+
is loading (and left in place if it fails).
|
|
49
|
+
on_load: Callback invoked once the image has been decoded and
|
|
50
|
+
displayed.
|
|
51
|
+
on_error: Callback invoked with an error message when a remote
|
|
52
|
+
image fails to download or decode.
|
|
53
|
+
style: Style dict (or list of dicts).
|
|
54
|
+
accessibility_label: Spoken description for screen readers.
|
|
55
|
+
accessibility_role: Override the default ``"image"`` role.
|
|
56
|
+
accessible: Override whether the element is exposed to AT.
|
|
57
|
+
accessibility_state: Current widget state for assistive tech,
|
|
58
|
+
e.g. ``{"disabled": True, "selected": False}``. Recognized
|
|
59
|
+
keys: ``disabled``, ``selected``, ``checked``, ``busy``,
|
|
60
|
+
``expanded``.
|
|
61
|
+
accessibility_live_region: How AT announces dynamic changes to
|
|
62
|
+
this view: ``"none"``, ``"polite"``, or ``"assertive"``
|
|
63
|
+
(Android only).
|
|
64
|
+
test_id: Stable identifier for UI tests; exposed as
|
|
65
|
+
``resource-id`` on Android and ``accessibilityIdentifier``
|
|
66
|
+
on iOS.
|
|
67
|
+
ref: Optional [`Ref`][pythonnative.Ref] from ``use_ref()``.
|
|
68
|
+
key: Stable identity for keyed reconciliation.
|
|
69
|
+
|
|
70
|
+
Returns:
|
|
71
|
+
An [`Element`][pythonnative.Element] of type ``"Image"``.
|
|
72
|
+
"""
|
|
73
|
+
return _make_element(
|
|
74
|
+
"Image",
|
|
75
|
+
style=style,
|
|
76
|
+
ref=ref,
|
|
77
|
+
key=key,
|
|
78
|
+
source=source or None,
|
|
79
|
+
scale_type=scale_type,
|
|
80
|
+
tint_color=tint_color,
|
|
81
|
+
placeholder_color=placeholder_color,
|
|
82
|
+
on_load=on_load,
|
|
83
|
+
on_error=on_error,
|
|
84
|
+
accessibility_label=accessibility_label,
|
|
85
|
+
accessibility_role=accessibility_role,
|
|
86
|
+
accessible=accessible,
|
|
87
|
+
accessibility_state=accessibility_state,
|
|
88
|
+
accessibility_live_region=accessibility_live_region,
|
|
89
|
+
test_id=test_id,
|
|
90
|
+
_defaults={"accessibility_role": "image"},
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def ImageBackground(
|
|
95
|
+
*children: Element,
|
|
96
|
+
source: str = "",
|
|
97
|
+
scale_type: Optional[ScaleType] = None,
|
|
98
|
+
style: StyleProp = None,
|
|
99
|
+
accessibility_label: Optional[str] = None,
|
|
100
|
+
accessible: Optional[bool] = None,
|
|
101
|
+
accessibility_state: Optional[AccessibilityState] = None,
|
|
102
|
+
accessibility_live_region: Optional[Literal["none", "polite", "assertive"]] = None,
|
|
103
|
+
test_id: Optional[str] = None,
|
|
104
|
+
key: Optional[str] = None,
|
|
105
|
+
) -> Element:
|
|
106
|
+
"""Render ``children`` layered on top of a background image.
|
|
107
|
+
|
|
108
|
+
Composed entirely from existing primitives: an absolutely-filled
|
|
109
|
+
[`Image`][pythonnative.Image] sits behind a content
|
|
110
|
+
[`View`][pythonnative.View] holding ``children``. The container's
|
|
111
|
+
``style`` controls sizing/padding; the image stretches to fill it
|
|
112
|
+
via ``position: "absolute"`` and zeroed insets.
|
|
113
|
+
|
|
114
|
+
Args:
|
|
115
|
+
*children: Foreground content drawn over the image.
|
|
116
|
+
source: Image resource name or URL.
|
|
117
|
+
scale_type: Background fit mode (``"cover"`` is the most common
|
|
118
|
+
for backgrounds).
|
|
119
|
+
style: Style dict for the container (size, padding, alignment).
|
|
120
|
+
accessibility_label: Spoken description of the background image.
|
|
121
|
+
accessible: Override whether the image is exposed to AT.
|
|
122
|
+
accessibility_state: Current widget state for assistive tech,
|
|
123
|
+
e.g. ``{"disabled": True, "selected": False}``. Recognized
|
|
124
|
+
keys: ``disabled``, ``selected``, ``checked``, ``busy``,
|
|
125
|
+
``expanded``.
|
|
126
|
+
accessibility_live_region: How AT announces dynamic changes to
|
|
127
|
+
this view: ``"none"``, ``"polite"``, or ``"assertive"``
|
|
128
|
+
(Android only).
|
|
129
|
+
test_id: Stable identifier for UI tests; exposed as
|
|
130
|
+
``resource-id`` on Android and ``accessibilityIdentifier``
|
|
131
|
+
on iOS.
|
|
132
|
+
key: Stable identity for keyed reconciliation.
|
|
133
|
+
|
|
134
|
+
Returns:
|
|
135
|
+
An [`Element`][pythonnative.Element] of type ``"View"`` wrapping
|
|
136
|
+
the background image and foreground content.
|
|
137
|
+
"""
|
|
138
|
+
fill = {"position": "absolute", "top": 0, "left": 0, "right": 0, "bottom": 0}
|
|
139
|
+
background = Image(
|
|
140
|
+
source,
|
|
141
|
+
scale_type=scale_type or "cover",
|
|
142
|
+
style=fill,
|
|
143
|
+
accessibility_label=accessibility_label,
|
|
144
|
+
accessible=accessible,
|
|
145
|
+
accessibility_state=accessibility_state,
|
|
146
|
+
accessibility_live_region=accessibility_live_region,
|
|
147
|
+
test_id=test_id,
|
|
148
|
+
)
|
|
149
|
+
content = View(*children, style={"flex": 1})
|
|
150
|
+
return View(
|
|
151
|
+
background,
|
|
152
|
+
content,
|
|
153
|
+
style=[{"overflow": "hidden"}, resolve_style(style)],
|
|
154
|
+
key=key,
|
|
155
|
+
)
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
def WebView(
|
|
159
|
+
*,
|
|
160
|
+
url: str = "",
|
|
161
|
+
html: Optional[str] = None,
|
|
162
|
+
on_load: Optional[Callable[[str], Any]] = None,
|
|
163
|
+
on_message: Optional[Callable[[str], Any]] = None,
|
|
164
|
+
on_navigation_state_change: Optional[Callable[[str], Any]] = None,
|
|
165
|
+
inject_javascript: Optional[str] = None,
|
|
166
|
+
scroll_enabled: bool = True,
|
|
167
|
+
style: StyleProp = None,
|
|
168
|
+
key: Optional[str] = None,
|
|
169
|
+
) -> Element:
|
|
170
|
+
"""Embed web content from a URL or an inline HTML string.
|
|
171
|
+
|
|
172
|
+
Args:
|
|
173
|
+
url: HTTP(S) URL to load. Ignored when ``html`` is given.
|
|
174
|
+
html: Inline HTML markup to render instead of loading a URL.
|
|
175
|
+
on_load: Callback invoked with the final URL once a page
|
|
176
|
+
finishes loading.
|
|
177
|
+
on_message: Callback invoked with the string payload whenever
|
|
178
|
+
page JavaScript calls
|
|
179
|
+
``window.pythonnative.postMessage(...)``.
|
|
180
|
+
on_navigation_state_change: Callback invoked with the URL each
|
|
181
|
+
time the top-level document begins navigating.
|
|
182
|
+
inject_javascript: JavaScript evaluated after each page load
|
|
183
|
+
(useful for installing the ``postMessage`` bridge or
|
|
184
|
+
tweaking the DOM).
|
|
185
|
+
scroll_enabled: When ``False``, disables scrolling inside the
|
|
186
|
+
web content.
|
|
187
|
+
style: Style dict (or list of dicts).
|
|
188
|
+
key: Stable identity for keyed reconciliation.
|
|
189
|
+
|
|
190
|
+
Returns:
|
|
191
|
+
An [`Element`][pythonnative.Element] of type ``"WebView"``.
|
|
192
|
+
"""
|
|
193
|
+
return _make_element(
|
|
194
|
+
"WebView",
|
|
195
|
+
style=style,
|
|
196
|
+
key=key,
|
|
197
|
+
url=url or None,
|
|
198
|
+
html=html,
|
|
199
|
+
on_load=on_load,
|
|
200
|
+
on_message=on_message,
|
|
201
|
+
on_navigation_state_change=on_navigation_state_change,
|
|
202
|
+
inject_javascript=inject_javascript,
|
|
203
|
+
scroll_enabled=False if scroll_enabled is False else None,
|
|
204
|
+
)
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"""Overlay factories: ``Modal`` (native presentation) and ``Portal`` (window overlay)."""
|
|
2
|
+
|
|
3
|
+
from typing import Any, Callable, Literal, Optional
|
|
4
|
+
|
|
5
|
+
from ..element import Element
|
|
6
|
+
from ..style import StyleProp
|
|
7
|
+
from ._base import _make_element
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def Modal(
|
|
11
|
+
*children: Element,
|
|
12
|
+
visible: bool = False,
|
|
13
|
+
on_dismiss: Optional[Callable[[], Any]] = None,
|
|
14
|
+
on_show: Optional[Callable[[], Any]] = None,
|
|
15
|
+
title: Optional[str] = None,
|
|
16
|
+
animation_type: Literal["slide", "fade", "none"] = "slide",
|
|
17
|
+
transparent: bool = False,
|
|
18
|
+
presentation_style: Literal["page_sheet", "form_sheet", "full_screen", "overlay"] = "page_sheet",
|
|
19
|
+
dismiss_on_backdrop: bool = True,
|
|
20
|
+
style: StyleProp = None,
|
|
21
|
+
key: Optional[str] = None,
|
|
22
|
+
) -> Element:
|
|
23
|
+
"""Overlay modal dialog backed by a real native presentation.
|
|
24
|
+
|
|
25
|
+
The modal is shown when ``visible=True`` and hidden when ``False``.
|
|
26
|
+
Drive ``visible`` from a hook so the parent component can dismiss
|
|
27
|
+
the modal in response to user actions. On iOS this presents a
|
|
28
|
+
``UIViewController``; on Android it shows an ``android.app.Dialog``.
|
|
29
|
+
|
|
30
|
+
Children are mounted as the modal's content view, not into the
|
|
31
|
+
on-tree placeholder, so they appear above all other native content
|
|
32
|
+
and don't influence the underlying layout.
|
|
33
|
+
|
|
34
|
+
Args:
|
|
35
|
+
*children: Modal content.
|
|
36
|
+
visible: Controls whether the modal is presented.
|
|
37
|
+
on_dismiss: Callback invoked when the user dismisses the modal
|
|
38
|
+
via system gesture.
|
|
39
|
+
on_show: Callback invoked once the modal has finished
|
|
40
|
+
presenting.
|
|
41
|
+
title: Optional title-bar text.
|
|
42
|
+
animation_type: ``"slide"`` (default), ``"fade"``, or ``"none"``.
|
|
43
|
+
transparent: When ``True``, the underlying view is dimmed
|
|
44
|
+
instead of fully covered.
|
|
45
|
+
presentation_style: iOS presentation style,
|
|
46
|
+
``"page_sheet"`` (default), ``"form_sheet"``,
|
|
47
|
+
``"full_screen"``, or ``"overlay"`` (custom dimmed
|
|
48
|
+
overlay). On Android, ``"overlay"`` keeps the dialog
|
|
49
|
+
non-fullscreen.
|
|
50
|
+
dismiss_on_backdrop: When ``True`` (default) and
|
|
51
|
+
``transparent`` / ``"overlay"``, tapping the dimmed
|
|
52
|
+
backdrop dismisses the modal.
|
|
53
|
+
style: Style dict (or list of dicts).
|
|
54
|
+
key: Stable identity for keyed reconciliation.
|
|
55
|
+
|
|
56
|
+
Returns:
|
|
57
|
+
An [`Element`][pythonnative.Element] of type ``"Modal"``.
|
|
58
|
+
"""
|
|
59
|
+
return _make_element(
|
|
60
|
+
"Modal",
|
|
61
|
+
*children,
|
|
62
|
+
style=style,
|
|
63
|
+
key=key,
|
|
64
|
+
visible=visible,
|
|
65
|
+
animation_type=animation_type,
|
|
66
|
+
transparent=transparent,
|
|
67
|
+
presentation_style=presentation_style,
|
|
68
|
+
dismiss_on_backdrop=False if dismiss_on_backdrop is False else None,
|
|
69
|
+
on_dismiss=on_dismiss,
|
|
70
|
+
on_show=on_show,
|
|
71
|
+
title=title,
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def Portal(*children: Element, key: Optional[str] = None) -> Element:
|
|
76
|
+
"""Render ``children`` into a full-screen overlay above everything else.
|
|
77
|
+
|
|
78
|
+
Like React DOM's ``createPortal``: the children stay part of this
|
|
79
|
+
component's tree for state, context, and events, but their native
|
|
80
|
+
views mount in a transparent overlay attached to the window (above
|
|
81
|
+
the screen's content) instead of inside the surrounding parent.
|
|
82
|
+
Use it for toasts, dropdowns, tooltips, and lightweight custom
|
|
83
|
+
overlays that must escape ``overflow: "hidden"`` ancestors. For a
|
|
84
|
+
system-styled dialog with its own presentation and dismissal
|
|
85
|
+
gestures, use [`Modal`][pythonnative.Modal] instead.
|
|
86
|
+
|
|
87
|
+
The overlay itself does not intercept touches; only the children
|
|
88
|
+
themselves are hit-testable. Children are laid out against the
|
|
89
|
+
full viewport, so position them with absolute insets:
|
|
90
|
+
|
|
91
|
+
```python
|
|
92
|
+
pn.Portal(
|
|
93
|
+
pn.View(
|
|
94
|
+
pn.Text("Saved!"),
|
|
95
|
+
style=pn.style(position="absolute", bottom=40, left=40, right=40),
|
|
96
|
+
),
|
|
97
|
+
)
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Args:
|
|
101
|
+
*children: Overlay content.
|
|
102
|
+
key: Stable identity for keyed reconciliation.
|
|
103
|
+
|
|
104
|
+
Returns:
|
|
105
|
+
An [`Element`][pythonnative.Element] of type ``"Portal"``.
|
|
106
|
+
"""
|
|
107
|
+
return Element("Portal", {}, list(children), key=key)
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
"""Touch wrappers: ``Pressable`` and its ``TouchableOpacity`` alias."""
|
|
2
|
+
|
|
3
|
+
from typing import Any, Callable, Dict, List, Literal, Optional, Union
|
|
4
|
+
|
|
5
|
+
from ..component import component
|
|
6
|
+
from ..element import Element
|
|
7
|
+
from ..hooks import Ref, use_state
|
|
8
|
+
from ..style import AccessibilityState, StyleProp, resolve_style
|
|
9
|
+
from ._base import _make_element
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@component
|
|
13
|
+
def _StatefulPressable(
|
|
14
|
+
*children: Element,
|
|
15
|
+
style_fn: Optional[Callable[[Dict[str, bool]], StyleProp]] = None,
|
|
16
|
+
on_press_in: Optional[Callable[[], Any]] = None,
|
|
17
|
+
on_press_out: Optional[Callable[[], Any]] = None,
|
|
18
|
+
**props: Any,
|
|
19
|
+
) -> Element:
|
|
20
|
+
"""Hook-driven Pressable used when ``style`` is a callable.
|
|
21
|
+
|
|
22
|
+
Tracks the pressed state with ``use_state`` and re-invokes the
|
|
23
|
+
user's style function with ``{"pressed": bool}`` on every press
|
|
24
|
+
transition, mirroring React Native's function-style ``style`` prop.
|
|
25
|
+
Every other keyword (``on_press``, ``ref``, accessibility props,
|
|
26
|
+
...) is forwarded untouched to the native ``Pressable`` element.
|
|
27
|
+
"""
|
|
28
|
+
pressed, set_pressed = use_state(False)
|
|
29
|
+
|
|
30
|
+
def _press_in() -> None:
|
|
31
|
+
set_pressed(True)
|
|
32
|
+
if on_press_in is not None:
|
|
33
|
+
on_press_in()
|
|
34
|
+
|
|
35
|
+
def _press_out() -> None:
|
|
36
|
+
set_pressed(False)
|
|
37
|
+
if on_press_out is not None:
|
|
38
|
+
on_press_out()
|
|
39
|
+
|
|
40
|
+
style = resolve_style(style_fn({"pressed": pressed})) if style_fn is not None else None
|
|
41
|
+
return _make_element(
|
|
42
|
+
"Pressable",
|
|
43
|
+
*children,
|
|
44
|
+
style=style,
|
|
45
|
+
on_press_in=_press_in,
|
|
46
|
+
on_press_out=_press_out,
|
|
47
|
+
_defaults={"accessibility_role": "button"},
|
|
48
|
+
**props,
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def Pressable(
|
|
53
|
+
*children: Element,
|
|
54
|
+
on_press: Optional[Callable[[], Any]] = None,
|
|
55
|
+
on_long_press: Optional[Callable[[], Any]] = None,
|
|
56
|
+
on_press_in: Optional[Callable[[], Any]] = None,
|
|
57
|
+
on_press_out: Optional[Callable[[], Any]] = None,
|
|
58
|
+
pressed_opacity: float = 0.6,
|
|
59
|
+
gestures: Optional[List[Any]] = None,
|
|
60
|
+
hit_slop: Optional[Union[float, Dict[str, float]]] = None,
|
|
61
|
+
on_layout: Optional[Callable[[Dict[str, float]], None]] = None,
|
|
62
|
+
style: Union[StyleProp, Callable[[Dict[str, bool]], StyleProp]] = None,
|
|
63
|
+
accessibility_label: Optional[str] = None,
|
|
64
|
+
accessibility_hint: Optional[str] = None,
|
|
65
|
+
accessibility_role: Optional[str] = None,
|
|
66
|
+
accessible: Optional[bool] = None,
|
|
67
|
+
accessibility_state: Optional[AccessibilityState] = None,
|
|
68
|
+
accessibility_live_region: Optional[Literal["none", "polite", "assertive"]] = None,
|
|
69
|
+
test_id: Optional[str] = None,
|
|
70
|
+
ref: Optional[Ref] = None,
|
|
71
|
+
key: Optional[str] = None,
|
|
72
|
+
) -> Element:
|
|
73
|
+
"""Wrap children with tap / long-press / gesture handlers.
|
|
74
|
+
|
|
75
|
+
Useful for making non-button elements (text, images, custom views)
|
|
76
|
+
respond to user taps. The wrapper view fades to ``pressed_opacity``
|
|
77
|
+
on touch-down and back to full opacity on touch-up.
|
|
78
|
+
|
|
79
|
+
Pressable gets ``accessibility_role="button"`` by default.
|
|
80
|
+
|
|
81
|
+
Args:
|
|
82
|
+
*children: Elements to make pressable.
|
|
83
|
+
on_press: Callback invoked on a normal tap.
|
|
84
|
+
on_long_press: Callback invoked on a sustained press.
|
|
85
|
+
on_press_in: Callback invoked the moment the press starts.
|
|
86
|
+
on_press_out: Callback invoked when the press lifts or cancels.
|
|
87
|
+
pressed_opacity: Opacity (0–1) applied while the user's finger
|
|
88
|
+
is down. Set to ``1.0`` for no visual feedback.
|
|
89
|
+
gestures: Optional list of gesture descriptors from
|
|
90
|
+
`pythonnative.gestures` recognized natively on this view
|
|
91
|
+
(pan / swipe / pinch / rotation / multi-tap).
|
|
92
|
+
hit_slop: Extend the touch target beyond the view's bounds
|
|
93
|
+
without changing layout: a uniform number of points, or a
|
|
94
|
+
dict with any of ``top`` / ``left`` / ``bottom`` /
|
|
95
|
+
``right``. Essential for small touch targets (icons,
|
|
96
|
+
chips) that should honor the 44-point guideline.
|
|
97
|
+
on_layout: Callback invoked with
|
|
98
|
+
``{"x", "y", "width", "height"}`` after layout and on
|
|
99
|
+
frame changes.
|
|
100
|
+
style: Style dict applied to the wrapper, or a callable
|
|
101
|
+
receiving the interaction state (``{"pressed": bool}``)
|
|
102
|
+
and returning a style, re-evaluated on every press
|
|
103
|
+
transition:
|
|
104
|
+
|
|
105
|
+
```python
|
|
106
|
+
pn.Pressable(
|
|
107
|
+
pn.Text("Tap"),
|
|
108
|
+
style=lambda s: pn.style(
|
|
109
|
+
background_color="#0051A8" if s["pressed"] else "#007AFF",
|
|
110
|
+
),
|
|
111
|
+
)
|
|
112
|
+
```
|
|
113
|
+
accessibility_label: Spoken description for screen readers.
|
|
114
|
+
accessibility_hint: Spoken extra detail (iOS only).
|
|
115
|
+
accessibility_role: Override the default ``"button"`` role.
|
|
116
|
+
accessible: Override whether the element is exposed to AT.
|
|
117
|
+
accessibility_state: Current widget state for assistive tech,
|
|
118
|
+
e.g. ``{"disabled": True, "selected": False}``. Recognized
|
|
119
|
+
keys: ``disabled``, ``selected``, ``checked``, ``busy``,
|
|
120
|
+
``expanded``.
|
|
121
|
+
accessibility_live_region: How AT announces dynamic changes to
|
|
122
|
+
this view: ``"none"``, ``"polite"``, or ``"assertive"``
|
|
123
|
+
(Android only).
|
|
124
|
+
test_id: Stable identifier for UI tests; exposed as
|
|
125
|
+
``resource-id`` on Android and ``accessibilityIdentifier``
|
|
126
|
+
on iOS.
|
|
127
|
+
ref: Optional [`Ref`][pythonnative.Ref] from ``use_ref()``.
|
|
128
|
+
key: Stable identity for keyed reconciliation.
|
|
129
|
+
|
|
130
|
+
Returns:
|
|
131
|
+
An [`Element`][pythonnative.Element] of type ``"Pressable"``
|
|
132
|
+
(wrapped in a stateful composite when ``style`` is callable).
|
|
133
|
+
"""
|
|
134
|
+
if callable(style):
|
|
135
|
+
return _StatefulPressable(
|
|
136
|
+
*children,
|
|
137
|
+
style_fn=style,
|
|
138
|
+
ref=ref,
|
|
139
|
+
key=key,
|
|
140
|
+
on_press=on_press,
|
|
141
|
+
on_long_press=on_long_press,
|
|
142
|
+
on_press_in=on_press_in,
|
|
143
|
+
on_press_out=on_press_out,
|
|
144
|
+
pressed_opacity=pressed_opacity,
|
|
145
|
+
gestures=gestures,
|
|
146
|
+
hit_slop=hit_slop,
|
|
147
|
+
on_layout=on_layout,
|
|
148
|
+
accessibility_label=accessibility_label,
|
|
149
|
+
accessibility_hint=accessibility_hint,
|
|
150
|
+
accessibility_role=accessibility_role,
|
|
151
|
+
accessible=accessible,
|
|
152
|
+
accessibility_state=accessibility_state,
|
|
153
|
+
accessibility_live_region=accessibility_live_region,
|
|
154
|
+
test_id=test_id,
|
|
155
|
+
)
|
|
156
|
+
return _make_element(
|
|
157
|
+
"Pressable",
|
|
158
|
+
*children,
|
|
159
|
+
style=style,
|
|
160
|
+
ref=ref,
|
|
161
|
+
key=key,
|
|
162
|
+
on_press=on_press,
|
|
163
|
+
on_long_press=on_long_press,
|
|
164
|
+
on_press_in=on_press_in,
|
|
165
|
+
on_press_out=on_press_out,
|
|
166
|
+
pressed_opacity=pressed_opacity,
|
|
167
|
+
gestures=gestures,
|
|
168
|
+
hit_slop=hit_slop,
|
|
169
|
+
on_layout=on_layout,
|
|
170
|
+
accessibility_label=accessibility_label,
|
|
171
|
+
accessibility_hint=accessibility_hint,
|
|
172
|
+
accessibility_role=accessibility_role,
|
|
173
|
+
accessible=accessible,
|
|
174
|
+
accessibility_state=accessibility_state,
|
|
175
|
+
accessibility_live_region=accessibility_live_region,
|
|
176
|
+
test_id=test_id,
|
|
177
|
+
_defaults={"accessibility_role": "button"},
|
|
178
|
+
)
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
def TouchableOpacity(
|
|
182
|
+
*children: Element,
|
|
183
|
+
on_press: Optional[Callable[[], Any]] = None,
|
|
184
|
+
on_long_press: Optional[Callable[[], Any]] = None,
|
|
185
|
+
active_opacity: float = 0.2,
|
|
186
|
+
disabled: bool = False,
|
|
187
|
+
style: StyleProp = None,
|
|
188
|
+
accessibility_label: Optional[str] = None,
|
|
189
|
+
accessibility_hint: Optional[str] = None,
|
|
190
|
+
accessibility_role: Optional[str] = None,
|
|
191
|
+
accessible: Optional[bool] = None,
|
|
192
|
+
accessibility_state: Optional[AccessibilityState] = None,
|
|
193
|
+
accessibility_live_region: Optional[Literal["none", "polite", "assertive"]] = None,
|
|
194
|
+
test_id: Optional[str] = None,
|
|
195
|
+
key: Optional[str] = None,
|
|
196
|
+
) -> Element:
|
|
197
|
+
"""Wrap children so they fade to ``active_opacity`` while pressed.
|
|
198
|
+
|
|
199
|
+
A thin ergonomic alias over [`Pressable`][pythonnative.Pressable]
|
|
200
|
+
that mirrors React Native's ``TouchableOpacity``: the only visual
|
|
201
|
+
feedback is an opacity dip on touch-down. When ``disabled`` is set,
|
|
202
|
+
the press callbacks are dropped so the wrapper is inert.
|
|
203
|
+
|
|
204
|
+
Args:
|
|
205
|
+
*children: Elements to make tappable.
|
|
206
|
+
on_press: Callback invoked on a normal tap.
|
|
207
|
+
on_long_press: Callback invoked on a sustained press.
|
|
208
|
+
active_opacity: Opacity (0–1) applied while the finger is down.
|
|
209
|
+
disabled: When ``True``, ignores presses and renders at reduced
|
|
210
|
+
opacity.
|
|
211
|
+
style: Style dict applied to the wrapper.
|
|
212
|
+
accessibility_label: Spoken description for screen readers.
|
|
213
|
+
accessibility_hint: Spoken extra detail (iOS only).
|
|
214
|
+
accessibility_role: Override the default ``"button"`` role.
|
|
215
|
+
accessible: Override whether the element is exposed to AT.
|
|
216
|
+
accessibility_state: Current widget state for assistive tech,
|
|
217
|
+
e.g. ``{"disabled": True, "selected": False}``. Recognized
|
|
218
|
+
keys: ``disabled``, ``selected``, ``checked``, ``busy``,
|
|
219
|
+
``expanded``.
|
|
220
|
+
accessibility_live_region: How AT announces dynamic changes to
|
|
221
|
+
this view: ``"none"``, ``"polite"``, or ``"assertive"``
|
|
222
|
+
(Android only).
|
|
223
|
+
test_id: Stable identifier for UI tests; exposed as
|
|
224
|
+
``resource-id`` on Android and ``accessibilityIdentifier``
|
|
225
|
+
on iOS.
|
|
226
|
+
key: Stable identity for keyed reconciliation.
|
|
227
|
+
|
|
228
|
+
Returns:
|
|
229
|
+
An [`Element`][pythonnative.Element] of type ``"Pressable"``.
|
|
230
|
+
"""
|
|
231
|
+
merged_style: StyleProp
|
|
232
|
+
if disabled:
|
|
233
|
+
base = resolve_style(style)
|
|
234
|
+
base.setdefault("opacity", 0.4)
|
|
235
|
+
merged_style = base
|
|
236
|
+
else:
|
|
237
|
+
merged_style = style
|
|
238
|
+
return Pressable(
|
|
239
|
+
*children,
|
|
240
|
+
on_press=None if disabled else on_press,
|
|
241
|
+
on_long_press=None if disabled else on_long_press,
|
|
242
|
+
pressed_opacity=active_opacity,
|
|
243
|
+
style=merged_style,
|
|
244
|
+
accessibility_label=accessibility_label,
|
|
245
|
+
accessibility_hint=accessibility_hint,
|
|
246
|
+
accessibility_role=accessibility_role,
|
|
247
|
+
accessible=accessible,
|
|
248
|
+
accessibility_state=accessibility_state,
|
|
249
|
+
accessibility_live_region=accessibility_live_region,
|
|
250
|
+
test_id=test_id,
|
|
251
|
+
key=key,
|
|
252
|
+
)
|