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.
Files changed (418) hide show
  1. pythonnative/__init__.py +411 -0
  2. pythonnative/_ios_log.py +92 -0
  3. pythonnative/_yoga.cp314-win_amd64.pyd +0 -0
  4. pythonnative/alerts.py +236 -0
  5. pythonnative/animated.py +1687 -0
  6. pythonnative/animation_graph.py +78 -0
  7. pythonnative/appearance.py +124 -0
  8. pythonnative/bootstrap.py +100 -0
  9. pythonnative/bridge/__init__.py +302 -0
  10. pythonnative/bridge/android.py +78 -0
  11. pythonnative/bridge/codec.py +170 -0
  12. pythonnative/bridge/commits.py +114 -0
  13. pythonnative/bridge/fake.py +243 -0
  14. pythonnative/bridge/ios.py +138 -0
  15. pythonnative/bridge/web.py +489 -0
  16. pythonnative/cli/__init__.py +7 -0
  17. pythonnative/cli/pn.py +1214 -0
  18. pythonnative/component.py +271 -0
  19. pythonnative/components/__init__.py +111 -0
  20. pythonnative/components/_base.py +166 -0
  21. pythonnative/components/controls.py +521 -0
  22. pythonnative/components/layout.py +518 -0
  23. pythonnative/components/lists.py +785 -0
  24. pythonnative/components/media.py +204 -0
  25. pythonnative/components/overlays.py +107 -0
  26. pythonnative/components/pressable.py +252 -0
  27. pythonnative/components/structural.py +167 -0
  28. pythonnative/components/text.py +291 -0
  29. pythonnative/devclient.py +824 -0
  30. pythonnative/devserver/__init__.py +34 -0
  31. pythonnative/devserver/server.py +718 -0
  32. pythonnative/devserver/static/animation_graph.js +82 -0
  33. pythonnative/devserver/static/bridge.js +147 -0
  34. pythonnative/devserver/static/colors.js +70 -0
  35. pythonnative/devserver/static/host.js +552 -0
  36. pythonnative/devserver/static/index.html +60 -0
  37. pythonnative/devserver/static/layout.js +85 -0
  38. pythonnative/devserver/static/preview.css +415 -0
  39. pythonnative/devserver/static/renderer.js +1994 -0
  40. pythonnative/devserver/static/shell.js +345 -0
  41. pythonnative/devserver/static/yoga/LICENSE +21 -0
  42. pythonnative/devserver/static/yoga/binaries/yoga-wasm-base64-esm.js +75 -0
  43. pythonnative/devserver/static/yoga/src/generated/YGEnums.d.ts +189 -0
  44. pythonnative/devserver/static/yoga/src/generated/YGEnums.js +211 -0
  45. pythonnative/devserver/static/yoga/src/generated/YGEnums.js.map +1 -0
  46. pythonnative/devserver/static/yoga/src/index.d.ts +12 -0
  47. pythonnative/devserver/static/yoga/src/index.js +16 -0
  48. pythonnative/devserver/static/yoga/src/index.js.map +1 -0
  49. pythonnative/devserver/static/yoga/src/load.d.ts +11 -0
  50. pythonnative/devserver/static/yoga/src/load.js +17 -0
  51. pythonnative/devserver/static/yoga/src/load.js.map +1 -0
  52. pythonnative/devserver/static/yoga/src/wrapAssembly.d.ts +155 -0
  53. pythonnative/devserver/static/yoga/src/wrapAssembly.js +125 -0
  54. pythonnative/devserver/static/yoga/src/wrapAssembly.js.map +1 -0
  55. pythonnative/devserver/watcher.py +267 -0
  56. pythonnative/devserver/ws.py +421 -0
  57. pythonnative/diagnostics.py +241 -0
  58. pythonnative/element.py +159 -0
  59. pythonnative/equality.py +19 -0
  60. pythonnative/events.py +231 -0
  61. pythonnative/gestures.py +1333 -0
  62. pythonnative/hooks.py +1621 -0
  63. pythonnative/hosts/__init__.py +63 -0
  64. pythonnative/hosts/base.py +596 -0
  65. pythonnative/hosts/native.py +302 -0
  66. pythonnative/hot_reload.py +585 -0
  67. pythonnative/layout.py +328 -0
  68. pythonnative/mutations.py +142 -0
  69. pythonnative/native/android/build.gradle +52 -0
  70. pythonnative/native/android/gradle.properties +3 -0
  71. pythonnative/native/android/settings.gradle +12 -0
  72. pythonnative/native/android/src/main/AndroidManifest.xml +11 -0
  73. pythonnative/native/android/src/main/cpp/CMakeLists.txt +9 -0
  74. pythonnative/native/android/src/main/cpp/yoga_jni.cpp +52 -0
  75. pythonnative/native/android/src/main/java/com/pythonnative/generated/NativeModules.kt +5 -0
  76. pythonnative/native/android/src/main/java/com/pythonnative/generated/NativeProps.kt +3705 -0
  77. pythonnative/native/android/src/main/java/com/pythonnative/generated/PNContracts.kt +129 -0
  78. pythonnative/native/android/src/main/java/com/pythonnative/runtime/PNBridge.kt +261 -0
  79. pythonnative/native/android/src/main/java/com/pythonnative/runtime/PythonHost.kt +20 -0
  80. pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/AnimationGraph.kt +108 -0
  81. pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/AnimationSpecs.kt +141 -0
  82. pythonnative/native/android/src/main/java/com/pythonnative/runtime/animation/PNAnimator.kt +257 -0
  83. pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/CommitState.kt +106 -0
  84. pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/JsonUtil.kt +175 -0
  85. pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/MainThread.kt +40 -0
  86. pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNLog.kt +33 -0
  87. pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNRegistry.kt +82 -0
  88. pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/PNTransaction.kt +80 -0
  89. pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/TransactionApplier.kt +117 -0
  90. pythonnative/native/android/src/main/java/com/pythonnative/runtime/bridge/ViewRegistry.kt +74 -0
  91. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/BuiltinComponents.kt +37 -0
  92. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ButtonManager.kt +32 -0
  93. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ComponentManager.kt +213 -0
  94. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ContainerManagers.kt +69 -0
  95. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ControlManagers.kt +186 -0
  96. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/DatePickerManager.kt +123 -0
  97. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ImageLoader.kt +141 -0
  98. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ImageManager.kt +162 -0
  99. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ModalManager.kt +134 -0
  100. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PNColor.kt +201 -0
  101. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PickerManager.kt +86 -0
  102. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PortalManager.kt +55 -0
  103. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/PressableManager.kt +122 -0
  104. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ScreenStackManager.kt +110 -0
  105. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ScrollViewManager.kt +214 -0
  106. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/SegmentedControlManager.kt +113 -0
  107. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/StatusBarManager.kt +52 -0
  108. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TabBarManager.kt +131 -0
  109. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TextInputManager.kt +250 -0
  110. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/TextManager.kt +233 -0
  111. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/ViewStyler.kt +355 -0
  112. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/VirtualListManager.kt +159 -0
  113. pythonnative/native/android/src/main/java/com/pythonnative/runtime/components/WebViewManager.kt +149 -0
  114. pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/GestureArbiter.kt +233 -0
  115. pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/GestureCoordinator.kt +127 -0
  116. pythonnative/native/android/src/main/java/com/pythonnative/runtime/gestures/GestureRecognizers.kt +527 -0
  117. pythonnative/native/android/src/main/java/com/pythonnative/runtime/layout/NativeLayout.kt +145 -0
  118. pythonnative/native/android/src/main/java/com/pythonnative/runtime/layout/YogaNode.kt +29 -0
  119. pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/BuiltinModules.kt +73 -0
  120. pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/DeviceModules.kt +316 -0
  121. pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/HostModule.kt +61 -0
  122. pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/MediaModules.kt +200 -0
  123. pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/NativeModule.kt +158 -0
  124. pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/NotificationsModule.kt +100 -0
  125. pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/PermissionsModule.kt +99 -0
  126. pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/StorageModules.kt +89 -0
  127. pythonnative/native/android/src/main/java/com/pythonnative/runtime/modules/SystemModules.kt +178 -0
  128. pythonnative/native/android/src/main/java/com/pythonnative/runtime/plugins/GeneratedPlugins.kt +16 -0
  129. pythonnative/native/android/src/main/java/com/pythonnative/runtime/screens/PNScreenFragment.kt +188 -0
  130. pythonnative/native/android/src/main/java/com/pythonnative/runtime/screens/ScreenRegistry.kt +80 -0
  131. pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNAccessibilityDelegate.kt +48 -0
  132. pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNBorderDrawable.kt +76 -0
  133. pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNEditText.kt +18 -0
  134. pythonnative/native/android/src/main/java/com/pythonnative/runtime/views/PNFrameLayout.kt +49 -0
  135. pythonnative/native/android/src/test/java/com/pythonnative/runtime/AnimationSpecsTest.kt +75 -0
  136. pythonnative/native/android/src/test/java/com/pythonnative/runtime/GestureArbiterTest.kt +197 -0
  137. pythonnative/native/android/src/test/java/com/pythonnative/runtime/PNColorTest.kt +47 -0
  138. pythonnative/native/android/src/test/java/com/pythonnative/runtime/PNTransactionTest.kt +78 -0
  139. pythonnative/native/android/src/test/java/com/pythonnative/runtime/PromiseTest.kt +89 -0
  140. pythonnative/native/ios/Package.swift +23 -0
  141. pythonnative/native/ios/Sources/PythonNativeKit/Animation/PNAnimationGraph.swift +199 -0
  142. pythonnative/native/ios/Sources/PythonNativeKit/Animation/PNAnimator.swift +312 -0
  143. pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNBridge.swift +255 -0
  144. pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNCommit.swift +104 -0
  145. pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNRegistry.swift +142 -0
  146. pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNTransaction.swift +166 -0
  147. pythonnative/native/ios/Sources/PythonNativeKit/Bridge/PNViewRegistry.swift +53 -0
  148. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNButtonManagers.swift +207 -0
  149. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNColor.swift +173 -0
  150. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNComponentManager.swift +183 -0
  151. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNContainerView.swift +56 -0
  152. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNControlManagers.swift +281 -0
  153. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNImageManager.swift +222 -0
  154. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNOverlayManagers.swift +243 -0
  155. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNPressableManager.swift +114 -0
  156. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNScreenStackManager.swift +107 -0
  157. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNScrollViewManager.swift +197 -0
  158. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTabBarManager.swift +106 -0
  159. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTextInputManager.swift +297 -0
  160. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTextManager.swift +230 -0
  161. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNTransform.swift +82 -0
  162. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewManager.swift +86 -0
  163. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewState.swift +87 -0
  164. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNViewStyler.swift +340 -0
  165. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNVirtualListManager.swift +155 -0
  166. pythonnative/native/ios/Sources/PythonNativeKit/Components/PNWebViewManager.swift +124 -0
  167. pythonnative/native/ios/Sources/PythonNativeKit/Generated/NativeModules.swift +1 -0
  168. pythonnative/native/ios/Sources/PythonNativeKit/Generated/NativeProps.swift +3775 -0
  169. pythonnative/native/ios/Sources/PythonNativeKit/Generated/PNContracts.swift +46 -0
  170. pythonnative/native/ios/Sources/PythonNativeKit/Gestures/PNGestureCoordinator.swift +260 -0
  171. pythonnative/native/ios/Sources/PythonNativeKit/Layout/PNLayout.swift +173 -0
  172. pythonnative/native/ios/Sources/PythonNativeKit/Modules/AlertModule.swift +92 -0
  173. pythonnative/native/ios/Sources/PythonNativeKit/Modules/HostModule.swift +80 -0
  174. pythonnative/native/ios/Sources/PythonNativeKit/Modules/LifecycleModules.swift +174 -0
  175. pythonnative/native/ios/Sources/PythonNativeKit/Modules/MediaModules.swift +177 -0
  176. pythonnative/native/ios/Sources/PythonNativeKit/Modules/PNNativeModule.swift +168 -0
  177. pythonnative/native/ios/Sources/PythonNativeKit/Modules/PermissionModules.swift +266 -0
  178. pythonnative/native/ios/Sources/PythonNativeKit/Modules/SystemModules.swift +251 -0
  179. pythonnative/native/ios/Sources/PythonNativeKit/Plugins/PNPluginRegistration.swift +8 -0
  180. pythonnative/native/ios/Sources/PythonNativeKit/Screens/PNScreenRegistry.swift +46 -0
  181. pythonnative/native/ios/Sources/PythonNativeKit/Screens/PNViewController.swift +237 -0
  182. pythonnative/native/ios/Sources/PythonNativeKit/Support/PNCompat.swift +46 -0
  183. pythonnative/native/ios/Sources/PythonNativeKit/Support/PNJSON.swift +173 -0
  184. pythonnative/native/ios/Sources/PythonNativeKit/Support/PNLog.swift +47 -0
  185. pythonnative/native/ios/Sources/PythonNativeKit/Support/PNWindow.swift +51 -0
  186. pythonnative/native/ios/Tests/PythonNativeKitTests/PNAnimationGraphTests.swift +26 -0
  187. pythonnative/native/ios/Tests/PythonNativeKitTests/PNColorTests.swift +50 -0
  188. pythonnative/native/ios/Tests/PythonNativeKitTests/PNCommitTests.swift +86 -0
  189. pythonnative/native/ios/Tests/PythonNativeKitTests/PNGestureTests.swift +101 -0
  190. pythonnative/native/ios/Tests/PythonNativeKitTests/PNManagerTests.swift +126 -0
  191. pythonnative/native/ios/Tests/PythonNativeKitTests/PNModuleTests.swift +111 -0
  192. pythonnative/native/ios/Tests/PythonNativeKitTests/PNTransactionTests.swift +91 -0
  193. pythonnative/native/yoga/LICENSE +21 -0
  194. pythonnative/native/yoga/Package.swift +9 -0
  195. pythonnative/native/yoga/VENDORED.md +2 -0
  196. pythonnative/native/yoga/include/PNStyle.h +10 -0
  197. pythonnative/native/yoga/include/module.modulemap +5 -0
  198. pythonnative/native/yoga/include/yoga/YGConfig.h +158 -0
  199. pythonnative/native/yoga/include/yoga/YGEnums.h +142 -0
  200. pythonnative/native/yoga/include/yoga/YGMacros.h +99 -0
  201. pythonnative/native/yoga/include/yoga/YGNode.h +304 -0
  202. pythonnative/native/yoga/include/yoga/YGNodeLayout.h +35 -0
  203. pythonnative/native/yoga/include/yoga/YGNodeStyle.h +130 -0
  204. pythonnative/native/yoga/include/yoga/YGPixelGrid.h +29 -0
  205. pythonnative/native/yoga/include/yoga/YGValue.h +84 -0
  206. pythonnative/native/yoga/include/yoga/Yoga.h +21 -0
  207. pythonnative/native/yoga/python.cpp +16 -0
  208. pythonnative/native/yoga/style.cpp +272 -0
  209. pythonnative/native/yoga/yoga/CMakeLists.txt +41 -0
  210. pythonnative/native/yoga/yoga/YGConfig.cpp +92 -0
  211. pythonnative/native/yoga/yoga/YGConfig.h +158 -0
  212. pythonnative/native/yoga/yoga/YGEnums.cpp +262 -0
  213. pythonnative/native/yoga/yoga/YGEnums.h +142 -0
  214. pythonnative/native/yoga/yoga/YGMacros.h +99 -0
  215. pythonnative/native/yoga/yoga/YGNode.cpp +366 -0
  216. pythonnative/native/yoga/yoga/YGNode.h +304 -0
  217. pythonnative/native/yoga/yoga/YGNodeLayout.cpp +92 -0
  218. pythonnative/native/yoga/yoga/YGNodeLayout.h +35 -0
  219. pythonnative/native/yoga/yoga/YGNodeStyle.cpp +405 -0
  220. pythonnative/native/yoga/yoga/YGNodeStyle.h +130 -0
  221. pythonnative/native/yoga/yoga/YGPixelGrid.cpp +22 -0
  222. pythonnative/native/yoga/yoga/YGPixelGrid.h +29 -0
  223. pythonnative/native/yoga/yoga/YGValue.cpp +20 -0
  224. pythonnative/native/yoga/yoga/YGValue.h +84 -0
  225. pythonnative/native/yoga/yoga/Yoga.h +21 -0
  226. pythonnative/native/yoga/yoga/algorithm/AbsoluteLayout.cpp +563 -0
  227. pythonnative/native/yoga/yoga/algorithm/AbsoluteLayout.h +41 -0
  228. pythonnative/native/yoga/yoga/algorithm/Align.h +72 -0
  229. pythonnative/native/yoga/yoga/algorithm/Baseline.cpp +78 -0
  230. pythonnative/native/yoga/yoga/algorithm/Baseline.h +21 -0
  231. pythonnative/native/yoga/yoga/algorithm/BoundAxis.h +79 -0
  232. pythonnative/native/yoga/yoga/algorithm/Cache.cpp +121 -0
  233. pythonnative/native/yoga/yoga/algorithm/Cache.h +30 -0
  234. pythonnative/native/yoga/yoga/algorithm/CalculateLayout.cpp +2428 -0
  235. pythonnative/native/yoga/yoga/algorithm/CalculateLayout.h +38 -0
  236. pythonnative/native/yoga/yoga/algorithm/FlexDirection.h +120 -0
  237. pythonnative/native/yoga/yoga/algorithm/FlexLine.cpp +124 -0
  238. pythonnative/native/yoga/yoga/algorithm/FlexLine.h +75 -0
  239. pythonnative/native/yoga/yoga/algorithm/PixelGrid.cpp +132 -0
  240. pythonnative/native/yoga/yoga/algorithm/PixelGrid.h +29 -0
  241. pythonnative/native/yoga/yoga/algorithm/SizingMode.h +73 -0
  242. pythonnative/native/yoga/yoga/algorithm/TrailingPosition.h +44 -0
  243. pythonnative/native/yoga/yoga/config/Config.cpp +135 -0
  244. pythonnative/native/yoga/yoga/config/Config.h +92 -0
  245. pythonnative/native/yoga/yoga/debug/AssertFatal.cpp +53 -0
  246. pythonnative/native/yoga/yoga/debug/AssertFatal.h +29 -0
  247. pythonnative/native/yoga/yoga/debug/Log.cpp +107 -0
  248. pythonnative/native/yoga/yoga/debug/Log.h +34 -0
  249. pythonnative/native/yoga/yoga/enums/Align.h +47 -0
  250. pythonnative/native/yoga/yoga/enums/BoxSizing.h +40 -0
  251. pythonnative/native/yoga/yoga/enums/Dimension.h +40 -0
  252. pythonnative/native/yoga/yoga/enums/Direction.h +41 -0
  253. pythonnative/native/yoga/yoga/enums/Display.h +41 -0
  254. pythonnative/native/yoga/yoga/enums/Edge.h +47 -0
  255. pythonnative/native/yoga/yoga/enums/Errata.h +41 -0
  256. pythonnative/native/yoga/yoga/enums/ExperimentalFeature.h +39 -0
  257. pythonnative/native/yoga/yoga/enums/FlexDirection.h +42 -0
  258. pythonnative/native/yoga/yoga/enums/Gutter.h +41 -0
  259. pythonnative/native/yoga/yoga/enums/Justify.h +44 -0
  260. pythonnative/native/yoga/yoga/enums/LogLevel.h +44 -0
  261. pythonnative/native/yoga/yoga/enums/MeasureMode.h +41 -0
  262. pythonnative/native/yoga/yoga/enums/NodeType.h +40 -0
  263. pythonnative/native/yoga/yoga/enums/Overflow.h +41 -0
  264. pythonnative/native/yoga/yoga/enums/PhysicalEdge.h +21 -0
  265. pythonnative/native/yoga/yoga/enums/PositionType.h +41 -0
  266. pythonnative/native/yoga/yoga/enums/Unit.h +42 -0
  267. pythonnative/native/yoga/yoga/enums/Wrap.h +41 -0
  268. pythonnative/native/yoga/yoga/enums/YogaEnums.h +85 -0
  269. pythonnative/native/yoga/yoga/event/event.cpp +87 -0
  270. pythonnative/native/yoga/yoga/event/event.h +130 -0
  271. pythonnative/native/yoga/yoga/module.modulemap +21 -0
  272. pythonnative/native/yoga/yoga/node/CachedMeasurement.h +53 -0
  273. pythonnative/native/yoga/yoga/node/LayoutResults.cpp +48 -0
  274. pythonnative/native/yoga/yoga/node/LayoutResults.h +122 -0
  275. pythonnative/native/yoga/yoga/node/LayoutableChildren.h +148 -0
  276. pythonnative/native/yoga/yoga/node/Node.cpp +443 -0
  277. pythonnative/native/yoga/yoga/node/Node.h +337 -0
  278. pythonnative/native/yoga/yoga/numeric/Comparison.h +81 -0
  279. pythonnative/native/yoga/yoga/numeric/FloatOptional.h +93 -0
  280. pythonnative/native/yoga/yoga/style/SmallValueBuffer.h +133 -0
  281. pythonnative/native/yoga/yoga/style/Style.h +757 -0
  282. pythonnative/native/yoga/yoga/style/StyleLength.h +107 -0
  283. pythonnative/native/yoga/yoga/style/StyleValueHandle.h +98 -0
  284. pythonnative/native/yoga/yoga/style/StyleValuePool.h +127 -0
  285. pythonnative/native_modules/__init__.py +124 -0
  286. pythonnative/native_modules/app_state.py +99 -0
  287. pythonnative/native_modules/battery.py +75 -0
  288. pythonnative/native_modules/biometrics.py +42 -0
  289. pythonnative/native_modules/camera.py +65 -0
  290. pythonnative/native_modules/clipboard.py +46 -0
  291. pythonnative/native_modules/fallback.py +324 -0
  292. pythonnative/native_modules/file_system.py +145 -0
  293. pythonnative/native_modules/haptics.py +75 -0
  294. pythonnative/native_modules/linking.py +123 -0
  295. pythonnative/native_modules/location.py +75 -0
  296. pythonnative/native_modules/net_info.py +112 -0
  297. pythonnative/native_modules/notifications.py +129 -0
  298. pythonnative/native_modules/permissions.py +108 -0
  299. pythonnative/native_modules/registry.py +526 -0
  300. pythonnative/native_modules/secure_store.py +52 -0
  301. pythonnative/native_modules/share.py +51 -0
  302. pythonnative/native_views/__init__.py +375 -0
  303. pythonnative/native_views/base.py +316 -0
  304. pythonnative/native_views/bridge_backend.py +277 -0
  305. pythonnative/navigation/__init__.py +103 -0
  306. pythonnative/navigation/container.py +154 -0
  307. pythonnative/navigation/handle.py +540 -0
  308. pythonnative/navigation/hooks.py +133 -0
  309. pythonnative/navigation/host.py +58 -0
  310. pythonnative/navigation/linking.py +200 -0
  311. pythonnative/navigation/navigators.py +659 -0
  312. pythonnative/navigation/screen.py +149 -0
  313. pythonnative/navigation/state.py +269 -0
  314. pythonnative/net.py +248 -0
  315. pythonnative/platform.py +166 -0
  316. pythonnative/platform_metrics.py +252 -0
  317. pythonnative/preview.py +287 -0
  318. pythonnative/profiling.py +101 -0
  319. pythonnative/project/__init__.py +68 -0
  320. pythonnative/project/android.py +557 -0
  321. pythonnative/project/builder.py +817 -0
  322. pythonnative/project/config.py +773 -0
  323. pythonnative/project/deps.py +719 -0
  324. pythonnative/project/devices.py +304 -0
  325. pythonnative/project/doctor.py +283 -0
  326. pythonnative/project/fingerprint.py +171 -0
  327. pythonnative/project/icons.py +247 -0
  328. pythonnative/project/ios.py +325 -0
  329. pythonnative/project/lockfile.py +100 -0
  330. pythonnative/project/permissions.py +361 -0
  331. pythonnative/project/plugins.py +519 -0
  332. pythonnative/project/runtime_assets.py +183 -0
  333. pythonnative/py.typed +0 -0
  334. pythonnative/query.py +153 -0
  335. pythonnative/reconciler/__init__.py +29 -0
  336. pythonnative/reconciler/boundaries.py +375 -0
  337. pythonnative/reconciler/children.py +88 -0
  338. pythonnative/reconciler/core.py +1165 -0
  339. pythonnative/reconciler/layout_pass.py +393 -0
  340. pythonnative/reconciler/vnode.py +266 -0
  341. pythonnative/refresh.py +55 -0
  342. pythonnative/runtime.py +306 -0
  343. pythonnative/scheduler.py +159 -0
  344. pythonnative/sdk/__init__.py +153 -0
  345. pythonnative/sdk/_components.py +427 -0
  346. pythonnative/sdk/builtins.py +91 -0
  347. pythonnative/sdk/codegen.py +149 -0
  348. pythonnative/sdk/module_codegen.py +184 -0
  349. pythonnative/sdk/schema.py +224 -0
  350. pythonnative/sdk/templates/contracts.kt +46 -0
  351. pythonnative/sdk/templates/contracts.swift +46 -0
  352. pythonnative/storage.py +184 -0
  353. pythonnative/style.py +841 -0
  354. pythonnative/suspense.py +183 -0
  355. pythonnative/templates/android_template/app/build.gradle +75 -0
  356. pythonnative/templates/android_template/app/proguard-rules.pro +21 -0
  357. pythonnative/templates/android_template/app/src/androidTest/java/com/pythonnative/android_template/ExampleInstrumentedTest.kt +24 -0
  358. pythonnative/templates/android_template/app/src/debug/AndroidManifest.xml +7 -0
  359. pythonnative/templates/android_template/app/src/main/AndroidManifest.xml +32 -0
  360. pythonnative/templates/android_template/app/src/main/java/com/pythonnative/android_template/MainActivity.kt +130 -0
  361. pythonnative/templates/android_template/app/src/main/java/com/pythonnative/android_template/ScreenFragment.kt +13 -0
  362. pythonnative/templates/android_template/app/src/main/res/drawable/ic_launcher_background.xml +170 -0
  363. pythonnative/templates/android_template/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +30 -0
  364. pythonnative/templates/android_template/app/src/main/res/layout/activity_main.xml +10 -0
  365. pythonnative/templates/android_template/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +6 -0
  366. pythonnative/templates/android_template/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +6 -0
  367. pythonnative/templates/android_template/app/src/main/res/mipmap-hdpi/ic_launcher.webp +0 -0
  368. pythonnative/templates/android_template/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp +0 -0
  369. pythonnative/templates/android_template/app/src/main/res/mipmap-mdpi/ic_launcher.webp +0 -0
  370. pythonnative/templates/android_template/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp +0 -0
  371. pythonnative/templates/android_template/app/src/main/res/mipmap-xhdpi/ic_launcher.webp +0 -0
  372. pythonnative/templates/android_template/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp +0 -0
  373. pythonnative/templates/android_template/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp +0 -0
  374. pythonnative/templates/android_template/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp +0 -0
  375. pythonnative/templates/android_template/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp +0 -0
  376. pythonnative/templates/android_template/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp +0 -0
  377. pythonnative/templates/android_template/app/src/main/res/navigation/nav_graph.xml +22 -0
  378. pythonnative/templates/android_template/app/src/main/res/values/colors.xml +5 -0
  379. pythonnative/templates/android_template/app/src/main/res/values/strings.xml +5 -0
  380. pythonnative/templates/android_template/app/src/main/res/values/themes.xml +9 -0
  381. pythonnative/templates/android_template/app/src/main/res/values-night/themes.xml +7 -0
  382. pythonnative/templates/android_template/app/src/main/res/xml/backup_rules.xml +13 -0
  383. pythonnative/templates/android_template/app/src/main/res/xml/data_extraction_rules.xml +19 -0
  384. pythonnative/templates/android_template/app/src/test/java/com/pythonnative/android_template/ExampleUnitTest.kt +17 -0
  385. pythonnative/templates/android_template/build.gradle +10 -0
  386. pythonnative/templates/android_template/gradle/wrapper/gradle-wrapper.jar +0 -0
  387. pythonnative/templates/android_template/gradle/wrapper/gradle-wrapper.properties +6 -0
  388. pythonnative/templates/android_template/gradle.properties +23 -0
  389. pythonnative/templates/android_template/gradlew +185 -0
  390. pythonnative/templates/android_template/gradlew.bat +89 -0
  391. pythonnative/templates/android_template/settings.gradle +17 -0
  392. pythonnative/templates/ios_template/ios_template/AppDelegate.swift +51 -0
  393. pythonnative/templates/ios_template/ios_template/Assets.xcassets/AccentColor.colorset/Contents.json +11 -0
  394. pythonnative/templates/ios_template/ios_template/Assets.xcassets/AppIcon.appiconset/Contents.json +13 -0
  395. pythonnative/templates/ios_template/ios_template/Assets.xcassets/Contents.json +6 -0
  396. pythonnative/templates/ios_template/ios_template/Base.lproj/LaunchScreen.storyboard +25 -0
  397. pythonnative/templates/ios_template/ios_template/BridgingHeader.h +14 -0
  398. pythonnative/templates/ios_template/ios_template/Info.plist +28 -0
  399. pythonnative/templates/ios_template/ios_template/PythonRuntime.swift +390 -0
  400. pythonnative/templates/ios_template/ios_template/SceneDelegate.swift +61 -0
  401. pythonnative/templates/ios_template/ios_template/ViewController.swift +23 -0
  402. pythonnative/templates/ios_template/ios_template.xcodeproj/project.pbxproj +745 -0
  403. pythonnative/templates/ios_template/ios_template.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  404. pythonnative/templates/ios_template/ios_templateTests/ios_templateTests.swift +36 -0
  405. pythonnative/templates/ios_template/ios_templateUITests/ios_templateUITests.swift +41 -0
  406. pythonnative/templates/ios_template/ios_templateUITests/ios_templateUITestsLaunchTests.swift +32 -0
  407. pythonnative/testing/__init__.py +53 -0
  408. pythonnative/testing/backend.py +276 -0
  409. pythonnative/testing/harness.py +369 -0
  410. pythonnative/utils.py +145 -0
  411. pythonnative-0.40.0.dist-info/DELVEWHEEL +2 -0
  412. pythonnative-0.40.0.dist-info/METADATA +150 -0
  413. pythonnative-0.40.0.dist-info/RECORD +418 -0
  414. pythonnative-0.40.0.dist-info/WHEEL +5 -0
  415. pythonnative-0.40.0.dist-info/entry_points.txt +2 -0
  416. pythonnative-0.40.0.dist-info/licenses/LICENSE +21 -0
  417. pythonnative-0.40.0.dist-info/top_level.txt +1 -0
  418. 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
+ )