reflex 0.8.3a3__tar.gz → 0.8.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of reflex might be problematic. Click here for more details.

Files changed (409) hide show
  1. {reflex-0.8.3a3 → reflex-0.8.4}/PKG-INFO +2 -2
  2. {reflex-0.8.3a3 → reflex-0.8.4}/pyproject.toml +41 -43
  3. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/web/utils/react-theme.js +8 -1
  4. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/web/utils/state.js +2 -2
  5. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/app.py +6 -20
  6. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/compiler/utils.py +6 -0
  7. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/constants/installer.py +4 -4
  8. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/custom_components/custom_components.py +1 -1
  9. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/istate/data.py +7 -1
  10. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/utils/console.py +2 -1
  11. reflex-0.8.4/reflex/utils/decorator.py +147 -0
  12. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/utils/misc.py +40 -0
  13. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/utils/net.py +8 -3
  14. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/utils/prerequisites.py +9 -67
  15. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/utils/processes.py +46 -7
  16. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/utils/redir.py +3 -5
  17. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/utils/registry.py +14 -2
  18. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/utils/telemetry.py +2 -2
  19. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/vars/dep_tracking.py +27 -30
  20. reflex-0.8.3a3/reflex/utils/decorator.py +0 -72
  21. {reflex-0.8.3a3 → reflex-0.8.4}/.gitignore +0 -0
  22. {reflex-0.8.3a3 → reflex-0.8.4}/LICENSE +0 -0
  23. {reflex-0.8.3a3 → reflex-0.8.4}/README.md +0 -0
  24. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/apps/blank/assets/favicon.ico +0 -0
  25. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/apps/blank/code/__init__.py +0 -0
  26. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/apps/blank/code/blank.py +0 -0
  27. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/jinja/app/rxconfig.py.jinja2 +0 -0
  28. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/jinja/custom_components/README.md.jinja2 +0 -0
  29. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/jinja/custom_components/__init__.py.jinja2 +0 -0
  30. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/jinja/custom_components/demo_app.py.jinja2 +0 -0
  31. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/jinja/custom_components/pyproject.toml.jinja2 +0 -0
  32. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/jinja/custom_components/src.py.jinja2 +0 -0
  33. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/jinja/web/package.json.jinja2 +0 -0
  34. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/jinja/web/pages/_app.js.jinja2 +0 -0
  35. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/jinja/web/pages/_document.js.jinja2 +0 -0
  36. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/jinja/web/pages/base_page.js.jinja2 +0 -0
  37. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/jinja/web/pages/component.js.jinja2 +0 -0
  38. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/jinja/web/pages/custom_component.js.jinja2 +0 -0
  39. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/jinja/web/pages/index.js.jinja2 +0 -0
  40. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/jinja/web/pages/macros.js.jinja2 +0 -0
  41. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/jinja/web/pages/stateful_component.js.jinja2 +0 -0
  42. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/jinja/web/pages/stateful_components.js.jinja2 +0 -0
  43. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/jinja/web/pages/utils.js.jinja2 +0 -0
  44. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/jinja/web/styles/styles.css.jinja2 +0 -0
  45. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/jinja/web/utils/context.js.jinja2 +0 -0
  46. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/jinja/web/utils/theme.js.jinja2 +0 -0
  47. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/web/.gitignore +0 -0
  48. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/web/app/entry.client.js +0 -0
  49. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/web/app/routes.js +0 -0
  50. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +0 -0
  51. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/web/components/shiki/code.js +0 -0
  52. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/web/jsconfig.json +0 -0
  53. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/web/postcss.config.js +0 -0
  54. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/web/react-router.config.js +0 -0
  55. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/web/styles/__reflex_style_reset.css +0 -0
  56. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/web/utils/client_side_routing.js +0 -0
  57. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/web/utils/helpers/dataeditor.js +0 -0
  58. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/web/utils/helpers/debounce.js +0 -0
  59. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/web/utils/helpers/paste.js +0 -0
  60. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/web/utils/helpers/range.js +0 -0
  61. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/web/utils/helpers/throttle.js +0 -0
  62. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/web/vite-plugin-safari-cachebust.js +0 -0
  63. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/.templates/web/vite.config.js +0 -0
  64. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/__init__.py +0 -0
  65. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/__init__.pyi +0 -0
  66. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/__main__.py +0 -0
  67. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/admin.py +0 -0
  68. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/app_mixins/__init__.py +0 -0
  69. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/app_mixins/lifespan.py +0 -0
  70. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/app_mixins/middleware.py +0 -0
  71. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/app_mixins/mixin.py +0 -0
  72. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/assets.py +0 -0
  73. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/base.py +0 -0
  74. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/compiler/__init__.py +0 -0
  75. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/compiler/compiler.py +0 -0
  76. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/compiler/templates.py +0 -0
  77. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/__init__.py +0 -0
  78. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/__init__.pyi +0 -0
  79. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/base/__init__.py +0 -0
  80. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/base/__init__.pyi +0 -0
  81. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/base/app_wrap.py +0 -0
  82. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/base/app_wrap.pyi +0 -0
  83. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/base/bare.py +0 -0
  84. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/base/body.py +0 -0
  85. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/base/body.pyi +0 -0
  86. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/base/document.py +0 -0
  87. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/base/document.pyi +0 -0
  88. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/base/error_boundary.py +0 -0
  89. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/base/error_boundary.pyi +0 -0
  90. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/base/fragment.py +0 -0
  91. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/base/fragment.pyi +0 -0
  92. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/base/link.py +0 -0
  93. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/base/link.pyi +0 -0
  94. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/base/meta.py +0 -0
  95. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/base/meta.pyi +0 -0
  96. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/base/script.py +0 -0
  97. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/base/script.pyi +0 -0
  98. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/base/strict_mode.py +0 -0
  99. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/base/strict_mode.pyi +0 -0
  100. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/component.py +0 -0
  101. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/core/__init__.py +0 -0
  102. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/core/__init__.pyi +0 -0
  103. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/core/auto_scroll.py +0 -0
  104. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/core/auto_scroll.pyi +0 -0
  105. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/core/banner.py +0 -0
  106. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/core/banner.pyi +0 -0
  107. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/core/breakpoints.py +0 -0
  108. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/core/client_side_routing.py +0 -0
  109. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/core/client_side_routing.pyi +0 -0
  110. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/core/clipboard.py +0 -0
  111. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/core/clipboard.pyi +0 -0
  112. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/core/colors.py +0 -0
  113. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/core/cond.py +0 -0
  114. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/core/debounce.py +0 -0
  115. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/core/debounce.pyi +0 -0
  116. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/core/foreach.py +0 -0
  117. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/core/helmet.py +0 -0
  118. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/core/helmet.pyi +0 -0
  119. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/core/html.py +0 -0
  120. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/core/html.pyi +0 -0
  121. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/core/layout/__init__.py +0 -0
  122. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/core/match.py +0 -0
  123. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/core/responsive.py +0 -0
  124. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/core/sticky.py +0 -0
  125. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/core/sticky.pyi +0 -0
  126. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/core/upload.py +0 -0
  127. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/core/upload.pyi +0 -0
  128. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/core/window_events.py +0 -0
  129. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/core/window_events.pyi +0 -0
  130. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/datadisplay/__init__.py +0 -0
  131. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/datadisplay/__init__.pyi +0 -0
  132. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/datadisplay/code.py +0 -0
  133. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/datadisplay/code.pyi +0 -0
  134. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/datadisplay/dataeditor.py +0 -0
  135. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/datadisplay/dataeditor.pyi +0 -0
  136. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/datadisplay/logo.py +0 -0
  137. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/datadisplay/shiki_code_block.py +0 -0
  138. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/datadisplay/shiki_code_block.pyi +0 -0
  139. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/dynamic.py +0 -0
  140. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/el/__init__.py +0 -0
  141. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/el/__init__.pyi +0 -0
  142. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/el/constants/__init__.py +0 -0
  143. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/el/constants/html.py +0 -0
  144. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/el/constants/react.py +0 -0
  145. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/el/constants/reflex.py +0 -0
  146. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/el/element.py +0 -0
  147. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/el/element.pyi +0 -0
  148. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/el/elements/__init__.py +0 -0
  149. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/el/elements/__init__.pyi +0 -0
  150. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/el/elements/base.py +0 -0
  151. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/el/elements/base.pyi +0 -0
  152. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/el/elements/forms.py +0 -0
  153. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/el/elements/forms.pyi +0 -0
  154. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/el/elements/inline.py +0 -0
  155. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/el/elements/inline.pyi +0 -0
  156. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/el/elements/media.py +0 -0
  157. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/el/elements/media.pyi +0 -0
  158. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/el/elements/metadata.py +0 -0
  159. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/el/elements/metadata.pyi +0 -0
  160. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/el/elements/other.py +0 -0
  161. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/el/elements/other.pyi +0 -0
  162. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/el/elements/scripts.py +0 -0
  163. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/el/elements/scripts.pyi +0 -0
  164. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/el/elements/sectioning.py +0 -0
  165. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/el/elements/sectioning.pyi +0 -0
  166. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/el/elements/tables.py +0 -0
  167. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/el/elements/tables.pyi +0 -0
  168. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/el/elements/typography.py +0 -0
  169. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/el/elements/typography.pyi +0 -0
  170. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/field.py +0 -0
  171. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/gridjs/__init__.py +0 -0
  172. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/gridjs/datatable.py +0 -0
  173. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/gridjs/datatable.pyi +0 -0
  174. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/literals.py +0 -0
  175. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/lucide/__init__.py +0 -0
  176. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/lucide/icon.py +0 -0
  177. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/lucide/icon.pyi +0 -0
  178. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/markdown/__init__.py +0 -0
  179. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/markdown/markdown.py +0 -0
  180. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/markdown/markdown.pyi +0 -0
  181. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/moment/__init__.py +0 -0
  182. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/moment/moment.py +0 -0
  183. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/moment/moment.pyi +0 -0
  184. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/plotly/__init__.py +0 -0
  185. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/plotly/plotly.py +0 -0
  186. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/plotly/plotly.pyi +0 -0
  187. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/props.py +0 -0
  188. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/__init__.py +0 -0
  189. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/__init__.pyi +0 -0
  190. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/primitives/__init__.py +0 -0
  191. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/primitives/__init__.pyi +0 -0
  192. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/primitives/accordion.py +0 -0
  193. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/primitives/accordion.pyi +0 -0
  194. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/primitives/base.py +0 -0
  195. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/primitives/base.pyi +0 -0
  196. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/primitives/drawer.py +0 -0
  197. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/primitives/drawer.pyi +0 -0
  198. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/primitives/form.py +0 -0
  199. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/primitives/form.pyi +0 -0
  200. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/primitives/progress.py +0 -0
  201. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/primitives/progress.pyi +0 -0
  202. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/primitives/slider.py +0 -0
  203. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/primitives/slider.pyi +0 -0
  204. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/__init__.py +0 -0
  205. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/__init__.pyi +0 -0
  206. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/base.py +0 -0
  207. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/base.pyi +0 -0
  208. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/color_mode.py +0 -0
  209. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/color_mode.pyi +0 -0
  210. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/__init__.py +0 -0
  211. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/__init__.pyi +0 -0
  212. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/alert_dialog.py +0 -0
  213. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/alert_dialog.pyi +0 -0
  214. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/aspect_ratio.py +0 -0
  215. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/aspect_ratio.pyi +0 -0
  216. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/avatar.py +0 -0
  217. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/avatar.pyi +0 -0
  218. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/badge.py +0 -0
  219. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/badge.pyi +0 -0
  220. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/button.py +0 -0
  221. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/button.pyi +0 -0
  222. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/callout.py +0 -0
  223. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/callout.pyi +0 -0
  224. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/card.py +0 -0
  225. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/card.pyi +0 -0
  226. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/checkbox.py +0 -0
  227. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/checkbox.pyi +0 -0
  228. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/checkbox_cards.py +0 -0
  229. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/checkbox_cards.pyi +0 -0
  230. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/checkbox_group.py +0 -0
  231. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/checkbox_group.pyi +0 -0
  232. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/context_menu.py +0 -0
  233. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/context_menu.pyi +0 -0
  234. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/data_list.py +0 -0
  235. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/data_list.pyi +0 -0
  236. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/dialog.py +0 -0
  237. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/dialog.pyi +0 -0
  238. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/dropdown_menu.py +0 -0
  239. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/dropdown_menu.pyi +0 -0
  240. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/hover_card.py +0 -0
  241. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/hover_card.pyi +0 -0
  242. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/icon_button.py +0 -0
  243. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/icon_button.pyi +0 -0
  244. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/inset.py +0 -0
  245. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/inset.pyi +0 -0
  246. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/popover.py +0 -0
  247. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/popover.pyi +0 -0
  248. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/progress.py +0 -0
  249. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/progress.pyi +0 -0
  250. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/radio.py +0 -0
  251. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/radio.pyi +0 -0
  252. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/radio_cards.py +0 -0
  253. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/radio_cards.pyi +0 -0
  254. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/radio_group.py +0 -0
  255. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/radio_group.pyi +0 -0
  256. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/scroll_area.py +0 -0
  257. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/scroll_area.pyi +0 -0
  258. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/segmented_control.py +0 -0
  259. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/segmented_control.pyi +0 -0
  260. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/select.py +0 -0
  261. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/select.pyi +0 -0
  262. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/separator.py +0 -0
  263. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/separator.pyi +0 -0
  264. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/skeleton.py +0 -0
  265. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/skeleton.pyi +0 -0
  266. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/slider.py +0 -0
  267. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/slider.pyi +0 -0
  268. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/spinner.py +0 -0
  269. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/spinner.pyi +0 -0
  270. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/switch.py +0 -0
  271. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/switch.pyi +0 -0
  272. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/table.py +0 -0
  273. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/table.pyi +0 -0
  274. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/tabs.py +0 -0
  275. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/tabs.pyi +0 -0
  276. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/text_area.py +0 -0
  277. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/text_area.pyi +0 -0
  278. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/text_field.py +0 -0
  279. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/text_field.pyi +0 -0
  280. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/tooltip.py +0 -0
  281. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/components/tooltip.pyi +0 -0
  282. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/layout/__init__.py +0 -0
  283. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/layout/__init__.pyi +0 -0
  284. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/layout/base.py +0 -0
  285. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/layout/base.pyi +0 -0
  286. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/layout/box.py +0 -0
  287. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/layout/box.pyi +0 -0
  288. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/layout/center.py +0 -0
  289. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/layout/center.pyi +0 -0
  290. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/layout/container.py +0 -0
  291. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/layout/container.pyi +0 -0
  292. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/layout/flex.py +0 -0
  293. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/layout/flex.pyi +0 -0
  294. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/layout/grid.py +0 -0
  295. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/layout/grid.pyi +0 -0
  296. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/layout/list.py +0 -0
  297. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/layout/list.pyi +0 -0
  298. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/layout/section.py +0 -0
  299. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/layout/section.pyi +0 -0
  300. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/layout/spacer.py +0 -0
  301. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/layout/spacer.pyi +0 -0
  302. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/layout/stack.py +0 -0
  303. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/layout/stack.pyi +0 -0
  304. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/typography/__init__.py +0 -0
  305. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/typography/__init__.pyi +0 -0
  306. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/typography/base.py +0 -0
  307. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/typography/blockquote.py +0 -0
  308. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/typography/blockquote.pyi +0 -0
  309. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/typography/code.py +0 -0
  310. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/typography/code.pyi +0 -0
  311. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/typography/heading.py +0 -0
  312. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/typography/heading.pyi +0 -0
  313. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/typography/link.py +0 -0
  314. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/typography/link.pyi +0 -0
  315. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/typography/text.py +0 -0
  316. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/radix/themes/typography/text.pyi +0 -0
  317. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/react_player/__init__.py +0 -0
  318. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/react_player/audio.py +0 -0
  319. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/react_player/audio.pyi +0 -0
  320. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/react_player/react_player.py +0 -0
  321. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/react_player/react_player.pyi +0 -0
  322. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/react_player/video.py +0 -0
  323. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/react_player/video.pyi +0 -0
  324. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/react_router/__init__.py +0 -0
  325. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/react_router/dom.py +0 -0
  326. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/react_router/dom.pyi +0 -0
  327. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/recharts/__init__.py +0 -0
  328. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/recharts/__init__.pyi +0 -0
  329. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/recharts/cartesian.py +0 -0
  330. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/recharts/cartesian.pyi +0 -0
  331. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/recharts/charts.py +0 -0
  332. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/recharts/charts.pyi +0 -0
  333. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/recharts/general.py +0 -0
  334. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/recharts/general.pyi +0 -0
  335. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/recharts/polar.py +0 -0
  336. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/recharts/polar.pyi +0 -0
  337. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/recharts/recharts.py +0 -0
  338. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/recharts/recharts.pyi +0 -0
  339. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/sonner/__init__.py +0 -0
  340. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/sonner/toast.py +0 -0
  341. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/sonner/toast.pyi +0 -0
  342. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/tags/__init__.py +0 -0
  343. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/tags/cond_tag.py +0 -0
  344. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/tags/iter_tag.py +0 -0
  345. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/tags/match_tag.py +0 -0
  346. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/tags/tag.py +0 -0
  347. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/components/tags/tagless.py +0 -0
  348. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/config.py +0 -0
  349. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/constants/__init__.py +0 -0
  350. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/constants/base.py +0 -0
  351. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/constants/colors.py +0 -0
  352. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/constants/compiler.py +0 -0
  353. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/constants/config.py +0 -0
  354. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/constants/custom_components.py +0 -0
  355. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/constants/event.py +0 -0
  356. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/constants/route.py +0 -0
  357. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/constants/state.py +0 -0
  358. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/constants/utils.py +0 -0
  359. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/custom_components/__init__.py +0 -0
  360. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/environment.py +0 -0
  361. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/event.py +0 -0
  362. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/experimental/__init__.py +0 -0
  363. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/experimental/client_state.py +0 -0
  364. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/experimental/hooks.py +0 -0
  365. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/istate/__init__.py +0 -0
  366. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/istate/dynamic.py +0 -0
  367. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/istate/manager.py +0 -0
  368. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/istate/proxy.py +0 -0
  369. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/istate/storage.py +0 -0
  370. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/istate/wrappers.py +0 -0
  371. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/middleware/__init__.py +0 -0
  372. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/middleware/hydrate_middleware.py +0 -0
  373. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/middleware/middleware.py +0 -0
  374. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/model.py +0 -0
  375. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/page.py +0 -0
  376. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/plugins/__init__.py +0 -0
  377. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/plugins/base.py +0 -0
  378. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/plugins/shared_tailwind.py +0 -0
  379. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/plugins/sitemap.py +0 -0
  380. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/plugins/tailwind_v3.py +0 -0
  381. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/plugins/tailwind_v4.py +0 -0
  382. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/py.typed +0 -0
  383. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/reflex.py +0 -0
  384. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/route.py +0 -0
  385. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/state.py +0 -0
  386. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/style.py +0 -0
  387. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/testing.py +0 -0
  388. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/utils/__init__.py +0 -0
  389. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/utils/build.py +0 -0
  390. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/utils/codespaces.py +0 -0
  391. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/utils/compat.py +0 -0
  392. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/utils/exceptions.py +0 -0
  393. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/utils/exec.py +0 -0
  394. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/utils/export.py +0 -0
  395. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/utils/format.py +0 -0
  396. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/utils/imports.py +0 -0
  397. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/utils/lazy_loader.py +0 -0
  398. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/utils/path_ops.py +0 -0
  399. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/utils/pyi_generator.py +0 -0
  400. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/utils/serializers.py +0 -0
  401. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/utils/types.py +0 -0
  402. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/vars/__init__.py +0 -0
  403. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/vars/base.py +0 -0
  404. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/vars/datetime.py +0 -0
  405. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/vars/function.py +0 -0
  406. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/vars/number.py +0 -0
  407. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/vars/object.py +0 -0
  408. {reflex-0.8.3a3 → reflex-0.8.4}/reflex/vars/sequence.py +0 -0
  409. {reflex-0.8.3a3 → reflex-0.8.4}/scripts/hatch_build.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: reflex
3
- Version: 0.8.3a3
3
+ Version: 0.8.4
4
4
  Summary: Web apps in pure Python.
5
5
  Project-URL: homepage, https://reflex.dev
6
6
  Project-URL: repository, https://github.com/reflex-dev/reflex
@@ -20,7 +20,6 @@ Classifier: Programming Language :: Python :: 3.13
20
20
  Requires-Python: <4.0,>=3.10
21
21
  Requires-Dist: alembic<2.0,>=1.15.2
22
22
  Requires-Dist: click>=8.2
23
- Requires-Dist: fastapi>=0.115.0
24
23
  Requires-Dist: granian[reload]>=2.4.0
25
24
  Requires-Dist: httpx<1.0,>=0.28.0
26
25
  Requires-Dist: jinja2<4.0,>=3.1.2
@@ -34,6 +33,7 @@ Requires-Dist: redis<7.0,>=5.2.1
34
33
  Requires-Dist: reflex-hosting-cli>=0.1.51
35
34
  Requires-Dist: rich<15,>=13
36
35
  Requires-Dist: sqlmodel<0.1,>=0.0.24
36
+ Requires-Dist: starlette>=0.47.0
37
37
  Requires-Dist: typing-extensions>=4.13.0
38
38
  Requires-Dist: wrapt<2.0,>=1.17.0
39
39
  Description-Content-Type: text/markdown
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "reflex"
3
- version = "0.8.3a3"
3
+ version = "0.8.4"
4
4
  description = "Web apps in pure Python."
5
5
  license.text = "Apache-2.0"
6
6
  authors = [
@@ -21,7 +21,7 @@ keywords = ["web", "framework"]
21
21
  requires-python = ">=3.10,<4.0"
22
22
  dependencies = [
23
23
  "alembic >=1.15.2,<2.0",
24
- "fastapi >=0.115.0",
24
+ "click >=8.2",
25
25
  "granian[reload] >=2.4.0",
26
26
  "httpx >=0.28.0,<1.0",
27
27
  "jinja2 >=3.1.2,<4.0",
@@ -29,13 +29,13 @@ dependencies = [
29
29
  "platformdirs >=4.3.7,<5.0",
30
30
  "psutil >=7.0.0,<8.0; sys_platform == 'win32'",
31
31
  "pydantic >=1.10.21,<3.0",
32
- "python-socketio >=5.12.0,<6.0",
33
32
  "python-multipart >=0.0.20,<1.0",
33
+ "python-socketio >=5.12.0,<6.0",
34
34
  "redis >=5.2.1,<7.0",
35
35
  "reflex-hosting-cli >=0.1.51",
36
36
  "rich >=13,<15",
37
37
  "sqlmodel >=0.0.24,<0.1",
38
- "click >=8.2",
38
+ "starlette >=0.47.0",
39
39
  "typing_extensions >=4.13.0",
40
40
  "wrapt >=1.17.0,<2.0",
41
41
  ]
@@ -58,18 +58,49 @@ documentation = "https://reflex.dev/docs/getting-started/introduction"
58
58
  [project.scripts]
59
59
  reflex = "reflex.reflex:cli"
60
60
 
61
+ [dependency-groups]
62
+ dev = [
63
+ "asynctest",
64
+ "darglint",
65
+ "dill",
66
+ "fastapi",
67
+ "hatchling",
68
+ "libsass",
69
+ "numpy",
70
+ "pandas",
71
+ "pillow",
72
+ "playwright",
73
+ "plotly",
74
+ "pre-commit",
75
+ "psutil",
76
+ "psycopg[binary]",
77
+ "pyright",
78
+ "pytest-asyncio",
79
+ "pytest-benchmark",
80
+ "pytest-codspeed",
81
+ "pytest-cov",
82
+ "pytest-mock",
83
+ "pytest-playwright",
84
+ "pytest-retry",
85
+ "pytest-split",
86
+ "pytest",
87
+ "python-dotenv",
88
+ "ruff",
89
+ "selenium",
90
+ "starlette-admin",
91
+ "toml",
92
+ "uvicorn",
93
+ ]
94
+
95
+
61
96
  [build-system]
62
97
  requires = ["hatchling"]
63
98
  build-backend = "hatchling.build"
64
99
 
65
100
  [tool.hatch.build]
66
101
  include = ["reflex", "scripts/hatch_build.py"]
67
-
68
- [tool.hatch.build.targets.sdist]
69
- artifacts = ["*.pyi"]
70
-
71
- [tool.hatch.build.targets.wheel]
72
- artifacts = ["*.pyi"]
102
+ targets.sdist.artifacts = ["*.pyi"]
103
+ targets.wheel.artifacts = ["*.pyi"]
73
104
 
74
105
  [tool.hatch.build.hooks.custom]
75
106
  path = "scripts/hatch_build.py"
@@ -152,39 +183,6 @@ asyncio_mode = "auto"
152
183
  skip = "docs/*,*.html,examples/*, *.pyi, poetry.lock, uv.lock"
153
184
  ignore-words-list = "te, TreeE"
154
185
 
155
- [dependency-groups]
156
- dev = [
157
- "asynctest >=0.13",
158
- "darglint >=1.8",
159
- "dill >=0.3",
160
- "hatchling >=1.27",
161
- "libsass >=0.23",
162
- "numpy >=2.2",
163
- "pandas >=2.2",
164
- "pillow >=11",
165
- "playwright >=1.51",
166
- "plotly >=6.0",
167
- "pre-commit ==4.2.0",
168
- "psutil >=7.0.0",
169
- "psycopg[binary] >=3.2",
170
- "pyright >=1.1.400",
171
- "pytest >=8.3",
172
- "pytest-asyncio >=0.26",
173
- "pytest-benchmark >=5.1",
174
- "pytest-codspeed >=3.2",
175
- "pytest-cov >=6.1",
176
- "pytest-mock >=3.14",
177
- "pytest-playwright >=0.7",
178
- "pytest-retry >=1.7",
179
- "pytest-split >=0.10",
180
- "python-dotenv >=1",
181
- "ruff >=0.11",
182
- "selenium >=4.31",
183
- "starlette-admin >=0.14",
184
- "toml >=0.10.2",
185
- "uvicorn >=0.34.0",
186
- ]
187
-
188
186
 
189
187
  [tool.coverage.run]
190
188
  source = ["reflex"]
@@ -21,6 +21,7 @@ export function ThemeProvider({ children, defaultTheme = "system" }) {
21
21
  const [systemTheme, setSystemTheme] = useState(
22
22
  defaultTheme !== "system" ? defaultTheme : "light",
23
23
  );
24
+ const [isInitialized, setIsInitialized] = useState(false);
24
25
 
25
26
  const firstRender = useRef(true);
26
27
 
@@ -36,6 +37,7 @@ export function ThemeProvider({ children, defaultTheme = "system" }) {
36
37
  if (lastCompiledTheme !== defaultColorMode) {
37
38
  // on app startup, make sure the application color mode is persisted correctly.
38
39
  localStorage.setItem("last_compiled_theme", defaultColorMode);
40
+ setIsInitialized(true);
39
41
  return;
40
42
  }
41
43
  }
@@ -43,6 +45,7 @@ export function ThemeProvider({ children, defaultTheme = "system" }) {
43
45
  // Load saved theme from localStorage
44
46
  const savedTheme = localStorage.getItem("theme") || defaultTheme;
45
47
  setTheme(savedTheme);
48
+ setIsInitialized(true);
46
49
  });
47
50
 
48
51
  const resolvedTheme = useMemo(
@@ -69,16 +72,20 @@ export function ThemeProvider({ children, defaultTheme = "system" }) {
69
72
  });
70
73
 
71
74
  // Save theme to localStorage whenever it changes
75
+ // Skip saving only if theme key already exists and we haven't initialized yet
72
76
  useEffect(() => {
77
+ const existingTheme = localStorage.getItem("theme");
78
+ if (!isInitialized && existingTheme !== null) return;
73
79
  localStorage.setItem("theme", theme);
74
80
  }, [theme]);
75
81
 
76
82
  useEffect(() => {
83
+ if (!isInitialized) return;
77
84
  const root = window.document.documentElement;
78
85
  root.classList.remove("light", "dark");
79
86
  root.classList.add(resolvedTheme);
80
87
  root.style.colorScheme = resolvedTheme;
81
- }, [resolvedTheme]);
88
+ }, [resolvedTheme, isInitialized]);
82
89
 
83
90
  return createElement(
84
91
  ThemeContext.Provider,
@@ -791,9 +791,9 @@ export const hydrateClientStorage = (client_storage) => {
791
791
  for (const state_key in client_storage.cookies) {
792
792
  const cookie_options = client_storage.cookies[state_key];
793
793
  const cookie_name = cookie_options.name || state_key;
794
- const cookie_value = cookies.get(cookie_name);
794
+ const cookie_value = cookies.get(cookie_name, { doNotParse: true });
795
795
  if (cookie_value !== undefined) {
796
- client_storage_values[state_key] = cookies.get(cookie_name);
796
+ client_storage_values[state_key] = cookie_value;
797
797
  }
798
798
  }
799
799
  }
@@ -28,7 +28,6 @@ from timeit import default_timer as timer
28
28
  from types import SimpleNamespace
29
29
  from typing import TYPE_CHECKING, Any, BinaryIO, ParamSpec, get_args, get_type_hints
30
30
 
31
- from fastapi import FastAPI
32
31
  from rich.progress import MofNCompleteColumn, Progress, TimeElapsedColumn
33
32
  from socketio import ASGIApp as EngineIOApp
34
33
  from socketio import AsyncNamespace, AsyncServer
@@ -441,9 +440,6 @@ class App(MiddlewareMixin, LifespanMixin):
441
440
  | None
442
441
  ) = None
443
442
 
444
- # FastAPI app for compatibility with FastAPI.
445
- _cached_fastapi_app: FastAPI | None = None
446
-
447
443
  @property
448
444
  def event_namespace(self) -> EventNamespace | None:
449
445
  """Get the event namespace.
@@ -598,32 +594,22 @@ class App(MiddlewareMixin, LifespanMixin):
598
594
  Returns:
599
595
  The backend api.
600
596
  """
597
+ from reflex.vars.base import GLOBAL_CACHE
598
+
601
599
  # For py3.9 compatibility when redis is used, we MUST add any decorator pages
602
600
  # before compiling the app in a thread to avoid event loop error (REF-2172).
603
601
  self._apply_decorated_pages()
604
602
 
605
- compile_future = concurrent.futures.ThreadPoolExecutor(max_workers=1).submit(
606
- self._compile, prerender_routes=is_prod_mode()
607
- )
603
+ self._compile(prerender_routes=is_prod_mode())
608
604
 
609
- def callback(f: concurrent.futures.Future):
610
- # Force background compile errors to print eagerly
611
- return f.result()
612
-
613
- compile_future.add_done_callback(callback)
614
- # Wait for the compile to finish to ensure all optional endpoints are mounted.
615
- compile_future.result()
605
+ # We will not be making more vars, so we can clear the global cache to free up memory.
606
+ GLOBAL_CACHE.clear()
616
607
 
617
608
  if not self._api:
618
609
  msg = "The app has not been initialized."
619
610
  raise ValueError(msg)
620
611
 
621
- if self._cached_fastapi_app is not None:
622
- asgi_app = self._cached_fastapi_app
623
- asgi_app.mount("", self._api)
624
- App._add_cors(asgi_app)
625
- else:
626
- asgi_app = self._api
612
+ asgi_app = self._api
627
613
 
628
614
  if self.api_transformer is not None:
629
615
  api_transformers: Sequence[Starlette | Callable[[ASGIApp], ASGIApp]] = (
@@ -359,6 +359,8 @@ def create_document_root(
359
359
  Returns:
360
360
  The document root.
361
361
  """
362
+ from reflex.utils.misc import preload_color_theme
363
+
362
364
  existing_meta_types = set()
363
365
 
364
366
  for component in head_components or []:
@@ -385,7 +387,11 @@ def create_document_root(
385
387
  Meta.create(name="viewport", content="width=device-width, initial-scale=1")
386
388
  )
387
389
 
390
+ # Add theme preload script as the very first component to prevent FOUC
391
+ theme_preload_components = [preload_color_theme()]
392
+
388
393
  head_components = [
394
+ *theme_preload_components,
389
395
  *(head_components or []),
390
396
  *maybe_head_components,
391
397
  *always_head_components,
@@ -14,7 +14,7 @@ class Bun(SimpleNamespace):
14
14
  """Bun constants."""
15
15
 
16
16
  # The Bun version.
17
- VERSION = "1.2.18"
17
+ VERSION = "1.2.19"
18
18
 
19
19
  # Min Bun Version
20
20
  MIN_VERSION = "1.2.17"
@@ -75,7 +75,7 @@ fetch-retries=0
75
75
 
76
76
 
77
77
  def _determine_react_router_version() -> str:
78
- default_version = "7.6.3"
78
+ default_version = "7.7.0"
79
79
  if (version := os.getenv("REACT_ROUTER_VERSION")) and version != default_version:
80
80
  from reflex.utils import console
81
81
 
@@ -143,11 +143,11 @@ class PackageJson(SimpleNamespace):
143
143
  "postcss-import": "16.1.1",
144
144
  "@react-router/dev": _react_router_version,
145
145
  "@react-router/fs-routes": _react_router_version,
146
- "rolldown-vite": "7.0.9",
146
+ "rolldown-vite": "7.0.11",
147
147
  }
148
148
  OVERRIDES = {
149
149
  # This should always match the `react` version in DEPENDENCIES for recharts compatibility.
150
150
  "react-is": _react_version,
151
151
  "cookie": "1.0.2",
152
- "rollup": "4.44.2",
152
+ "rollup": "4.45.1",
153
153
  }
@@ -12,7 +12,6 @@ from pathlib import Path
12
12
  from typing import Any
13
13
 
14
14
  import click
15
- import httpx
16
15
 
17
16
  from reflex import constants
18
17
  from reflex.constants import CustomComponents
@@ -467,6 +466,7 @@ def _collect_details_for_gallery():
467
466
  Raises:
468
467
  Exit: If pyproject.toml file is ill-formed or the request to the backend services fails.
469
468
  """
469
+ import httpx
470
470
  from reflex_cli.utils import hosting
471
471
 
472
472
  console.rule("[bold]Authentication with Reflex Services")
@@ -3,7 +3,7 @@
3
3
  import dataclasses
4
4
  from collections.abc import Mapping
5
5
  from typing import TYPE_CHECKING
6
- from urllib.parse import _NetlocResultMixinStr, urlsplit
6
+ from urllib.parse import _NetlocResultMixinStr, parse_qsl, urlsplit
7
7
 
8
8
  from reflex import constants
9
9
  from reflex.utils import console, format
@@ -102,8 +102,10 @@ class ReflexURL(str, _NetlocResultMixinStr):
102
102
  if TYPE_CHECKING:
103
103
  scheme: str
104
104
  netloc: str
105
+ origin: str
105
106
  path: str
106
107
  query: str
108
+ query_parameters: Mapping[str, str]
107
109
  fragment: str
108
110
 
109
111
  def __new__(cls, url: str):
@@ -121,6 +123,10 @@ class ReflexURL(str, _NetlocResultMixinStr):
121
123
  object.__setattr__(obj, "netloc", netloc)
122
124
  object.__setattr__(obj, "path", path)
123
125
  object.__setattr__(obj, "query", query)
126
+ object.__setattr__(obj, "origin", f"{scheme}://{netloc}")
127
+ object.__setattr__(
128
+ obj, "query_parameters", _FrozenDictStrStr(**dict(parse_qsl(query)))
129
+ )
124
130
  object.__setattr__(obj, "fragment", fragment)
125
131
  return obj
126
132
 
@@ -3,6 +3,7 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import contextlib
6
+ import datetime
6
7
  import inspect
7
8
  import os
8
9
  import shutil
@@ -136,7 +137,7 @@ def print_to_log_file(msg: str, *, dedupe: bool = False, **kwargs):
136
137
  dedupe: If True, suppress multiple console logs of print message.
137
138
  kwargs: Keyword arguments to pass to the print function.
138
139
  """
139
- log_file_console().print(msg, **kwargs)
140
+ log_file_console().print(f"[{datetime.datetime.now()}] {msg}", **kwargs)
140
141
 
141
142
 
142
143
  def debug(msg: str, *, dedupe: bool = False, **kwargs):
@@ -0,0 +1,147 @@
1
+ """Decorator utilities."""
2
+
3
+ import functools
4
+ from collections.abc import Callable
5
+ from pathlib import Path
6
+ from typing import ParamSpec, TypeVar, cast
7
+
8
+ T = TypeVar("T")
9
+
10
+
11
+ def once(f: Callable[[], T]) -> Callable[[], T]:
12
+ """A decorator that calls the function once and caches the result.
13
+
14
+ Args:
15
+ f: The function to call.
16
+
17
+ Returns:
18
+ A function that calls the function once and caches the result.
19
+ """
20
+ unset = object()
21
+ value: object | T = unset
22
+
23
+ @functools.wraps(f)
24
+ def wrapper() -> T:
25
+ nonlocal value
26
+ value = f() if value is unset else value
27
+ return value # pyright: ignore[reportReturnType]
28
+
29
+ return wrapper
30
+
31
+
32
+ def once_unless_none(f: Callable[[], T | None]) -> Callable[[], T | None]:
33
+ """A decorator that calls the function once and caches the result unless it is None.
34
+
35
+ Args:
36
+ f: The function to call.
37
+
38
+ Returns:
39
+ A function that calls the function once and caches the result unless it is None.
40
+ """
41
+ value: T | None = None
42
+
43
+ @functools.wraps(f)
44
+ def wrapper() -> T | None:
45
+ nonlocal value
46
+ value = f() if value is None else value
47
+ return value
48
+
49
+ return wrapper
50
+
51
+
52
+ P = ParamSpec("P")
53
+
54
+
55
+ def debug(f: Callable[P, T]) -> Callable[P, T]:
56
+ """A decorator that prints the function name, arguments, and result.
57
+
58
+ Args:
59
+ f: The function to call.
60
+
61
+ Returns:
62
+ A function that prints the function name, arguments, and result.
63
+ """
64
+
65
+ @functools.wraps(f)
66
+ def wrapper(*args: P.args, **kwargs: P.kwargs) -> T:
67
+ result = f(*args, **kwargs)
68
+ print( # noqa: T201
69
+ f"Calling {f.__name__} with args: {args} and kwargs: {kwargs}, result: {result}"
70
+ )
71
+ return result
72
+
73
+ return wrapper
74
+
75
+
76
+ def _write_cached_procedure_file(payload: str, cache_file: Path, value: object):
77
+ import pickle
78
+
79
+ cache_file.write_bytes(pickle.dumps((payload, value)))
80
+
81
+
82
+ def _read_cached_procedure_file(cache_file: Path) -> tuple[str | None, object]:
83
+ import pickle
84
+
85
+ if cache_file.exists():
86
+ with cache_file.open("rb") as f:
87
+ return pickle.loads(f.read())
88
+
89
+ return None, None
90
+
91
+
92
+ P = ParamSpec("P")
93
+ Picklable = TypeVar("Picklable")
94
+
95
+
96
+ def cached_procedure(
97
+ cache_file_path: Callable[[], Path],
98
+ payload_fn: Callable[P, str],
99
+ ) -> Callable[[Callable[P, Picklable]], Callable[P, Picklable]]:
100
+ """Decorator to cache the result of a function based on its arguments.
101
+
102
+ Args:
103
+ cache_file_path: Function that computes the cache file path.
104
+ payload_fn: Function that computes cache payload from function args.
105
+
106
+ Returns:
107
+ The decorated function.
108
+ """
109
+
110
+ def _inner_decorator(func: Callable[P, Picklable]) -> Callable[P, Picklable]:
111
+ def _inner(*args: P.args, **kwargs: P.kwargs) -> Picklable:
112
+ _cache_file = cache_file_path()
113
+
114
+ payload, value = _read_cached_procedure_file(_cache_file)
115
+ new_payload = payload_fn(*args, **kwargs)
116
+
117
+ if payload != new_payload:
118
+ new_value = func(*args, **kwargs)
119
+ _write_cached_procedure_file(new_payload, _cache_file, new_value)
120
+ return new_value
121
+
122
+ from reflex.utils import console
123
+
124
+ console.debug(
125
+ f"Using cached value for {func.__name__} with payload: {new_payload}"
126
+ )
127
+ return cast("Picklable", value)
128
+
129
+ return _inner
130
+
131
+ return _inner_decorator
132
+
133
+
134
+ def cache_result_in_disk(
135
+ cache_file_path: Callable[[], Path],
136
+ ) -> Callable[[Callable[[], Picklable]], Callable[[], Picklable]]:
137
+ """Decorator to cache the result of a function on disk.
138
+
139
+ Args:
140
+ cache_file_path: Function that computes the cache file path.
141
+
142
+ Returns:
143
+ The decorated function.
144
+ """
145
+ return cached_procedure(
146
+ cache_file_path=cache_file_path, payload_fn=lambda: "constant"
147
+ )
@@ -90,3 +90,43 @@ def with_cwd_in_syspath():
90
90
  yield
91
91
  finally:
92
92
  sys.path[:] = orig_sys_path
93
+
94
+
95
+ def preload_color_theme():
96
+ """Create a script component that preloads the color theme to prevent FOUC.
97
+
98
+ This script runs immediately in the document head before React hydration,
99
+ reading the saved theme from localStorage and applying the correct CSS classes
100
+ to prevent flash of unstyled content.
101
+
102
+ Returns:
103
+ Script: A script component to add to App.head_components
104
+ """
105
+ from reflex.components.el.elements.scripts import Script
106
+
107
+ # Create direct inline script content (like next-themes dangerouslySetInnerHTML)
108
+ script_content = """
109
+ // Only run in browser environment, not during SSR
110
+ if (typeof document !== 'undefined') {
111
+ try {
112
+ const theme = localStorage.getItem("theme") || "system";
113
+ const systemPreference = window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
114
+ const resolvedTheme = theme === "system" ? systemPreference : theme;
115
+
116
+ // Apply theme immediately - blocks until complete
117
+ // Use classList to avoid overwriting other classes
118
+ document.documentElement.classList.remove("light", "dark");
119
+ document.documentElement.classList.add(resolvedTheme);
120
+ document.documentElement.style.colorScheme = resolvedTheme;
121
+
122
+ } catch (e) {
123
+ // Fallback to system preference on any error (resolve "system" to actual theme)
124
+ const fallbackTheme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
125
+ document.documentElement.classList.remove("light", "dark");
126
+ document.documentElement.classList.add(fallbackTheme);
127
+ document.documentElement.style.colorScheme = fallbackTheme;
128
+ }
129
+ }
130
+ """
131
+
132
+ return Script.create(script_content)
@@ -5,8 +5,6 @@ import time
5
5
  from collections.abc import Callable
6
6
  from typing import ParamSpec, TypeVar
7
7
 
8
- import httpx
9
-
10
8
  from reflex.utils.decorator import once
11
9
  from reflex.utils.types import Unset
12
10
 
@@ -42,6 +40,8 @@ def _wrap_https_func(
42
40
 
43
41
  @functools.wraps(func)
44
42
  def wrapper(*args: _P.args, **kwargs: _P.kwargs) -> _T:
43
+ import httpx
44
+
45
45
  url = args[0]
46
46
  console.debug(f"Sending HTTPS request to {args[0]}")
47
47
  initial_time = time.time()
@@ -94,6 +94,8 @@ def _is_ipv4_supported() -> bool:
94
94
  Returns:
95
95
  True if the system supports IPv4, False otherwise.
96
96
  """
97
+ import httpx
98
+
97
99
  try:
98
100
  httpx.head("http://1.1.1.1", timeout=3)
99
101
  except httpx.RequestError:
@@ -108,6 +110,8 @@ def _is_ipv6_supported() -> bool:
108
110
  Returns:
109
111
  True if the system supports IPv6, False otherwise.
110
112
  """
113
+ import httpx
114
+
111
115
  try:
112
116
  httpx.head("http://[2606:4700:4700::1111]", timeout=3)
113
117
  except httpx.RequestError:
@@ -139,12 +143,13 @@ def _httpx_local_address_kwarg() -> str:
139
143
 
140
144
 
141
145
  @once
142
- def _httpx_client() -> httpx.Client:
146
+ def _httpx_client():
143
147
  """Get an HTTPX client.
144
148
 
145
149
  Returns:
146
150
  An HTTPX client.
147
151
  """
152
+ import httpx
148
153
  from httpx._utils import get_environment_proxies
149
154
 
150
155
  return httpx.Client(