reflex 0.7.4a1__tar.gz → 0.7.4a2__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 (404) hide show
  1. {reflex-0.7.4a1 → reflex-0.7.4a2}/PKG-INFO +3 -1
  2. {reflex-0.7.4a1 → reflex-0.7.4a2}/pyproject.toml +3 -2
  3. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +9 -1
  4. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/app.py +4 -2
  5. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/base.py +3 -3
  6. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/compiler/compiler.py +5 -0
  7. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/component.py +6 -3
  8. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/config.py +1 -1
  9. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/reflex.py +8 -4
  10. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/exec.py +39 -33
  11. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/prerequisites.py +73 -2
  12. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/processes.py +48 -16
  13. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/vars/base.py +0 -35
  14. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/vars/datetime.py +10 -34
  15. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/vars/number.py +16 -112
  16. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/vars/sequence.py +15 -108
  17. {reflex-0.7.4a1 → reflex-0.7.4a2}/.gitignore +0 -0
  18. {reflex-0.7.4a1 → reflex-0.7.4a2}/LICENSE +0 -0
  19. {reflex-0.7.4a1 → reflex-0.7.4a2}/README.md +0 -0
  20. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/apps/blank/assets/favicon.ico +0 -0
  21. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/apps/blank/code/__init__.py +0 -0
  22. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/apps/blank/code/blank.py +0 -0
  23. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/app/rxconfig.py.jinja2 +0 -0
  24. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/custom_components/README.md.jinja2 +0 -0
  25. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/custom_components/__init__.py.jinja2 +0 -0
  26. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/custom_components/demo_app.py.jinja2 +0 -0
  27. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/custom_components/pyproject.toml.jinja2 +0 -0
  28. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/custom_components/src.py.jinja2 +0 -0
  29. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/web/package.json.jinja2 +0 -0
  30. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/web/pages/_app.js.jinja2 +0 -0
  31. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/web/pages/_document.js.jinja2 +0 -0
  32. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/web/pages/base_page.js.jinja2 +0 -0
  33. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/web/pages/component.js.jinja2 +0 -0
  34. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/web/pages/custom_component.js.jinja2 +0 -0
  35. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/web/pages/index.js.jinja2 +0 -0
  36. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/web/pages/macros.js.jinja2 +0 -0
  37. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/web/pages/stateful_component.js.jinja2 +0 -0
  38. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/web/pages/stateful_components.js.jinja2 +0 -0
  39. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/web/pages/utils.js.jinja2 +0 -0
  40. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/web/styles/styles.css.jinja2 +0 -0
  41. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/web/tailwind.config.js.jinja2 +0 -0
  42. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/web/utils/context.js.jinja2 +0 -0
  43. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/jinja/web/utils/theme.js.jinja2 +0 -0
  44. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/web/.gitignore +0 -0
  45. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/web/components/shiki/code.js +0 -0
  46. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/web/jsconfig.json +0 -0
  47. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/web/next.config.js +0 -0
  48. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/web/postcss.config.js +0 -0
  49. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/web/styles/tailwind.css +0 -0
  50. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/web/utils/client_side_routing.js +0 -0
  51. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/web/utils/helpers/dataeditor.js +0 -0
  52. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/web/utils/helpers/debounce.js +0 -0
  53. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/web/utils/helpers/paste.js +0 -0
  54. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/web/utils/helpers/range.js +0 -0
  55. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/web/utils/helpers/throttle.js +0 -0
  56. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/.templates/web/utils/state.js +0 -0
  57. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/__init__.py +0 -0
  58. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/__init__.pyi +0 -0
  59. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/__main__.py +0 -0
  60. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/admin.py +0 -0
  61. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/app_mixins/__init__.py +0 -0
  62. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/app_mixins/lifespan.py +0 -0
  63. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/app_mixins/middleware.py +0 -0
  64. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/app_mixins/mixin.py +0 -0
  65. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/assets.py +0 -0
  66. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/compiler/__init__.py +0 -0
  67. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/compiler/templates.py +0 -0
  68. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/compiler/utils.py +0 -0
  69. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/__init__.py +0 -0
  70. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/__init__.pyi +0 -0
  71. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/__init__.py +0 -0
  72. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/__init__.pyi +0 -0
  73. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/app_wrap.py +0 -0
  74. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/app_wrap.pyi +0 -0
  75. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/bare.py +0 -0
  76. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/body.py +0 -0
  77. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/body.pyi +0 -0
  78. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/document.py +0 -0
  79. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/document.pyi +0 -0
  80. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/error_boundary.py +0 -0
  81. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/error_boundary.pyi +0 -0
  82. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/fragment.py +0 -0
  83. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/fragment.pyi +0 -0
  84. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/head.py +0 -0
  85. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/head.pyi +0 -0
  86. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/link.py +0 -0
  87. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/link.pyi +0 -0
  88. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/meta.py +0 -0
  89. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/meta.pyi +0 -0
  90. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/script.py +0 -0
  91. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/script.pyi +0 -0
  92. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/strict_mode.py +0 -0
  93. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/base/strict_mode.pyi +0 -0
  94. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/__init__.py +0 -0
  95. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/__init__.pyi +0 -0
  96. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/auto_scroll.py +0 -0
  97. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/auto_scroll.pyi +0 -0
  98. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/banner.py +0 -0
  99. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/banner.pyi +0 -0
  100. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/breakpoints.py +0 -0
  101. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/client_side_routing.py +0 -0
  102. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/client_side_routing.pyi +0 -0
  103. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/clipboard.py +0 -0
  104. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/clipboard.pyi +0 -0
  105. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/colors.py +0 -0
  106. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/cond.py +0 -0
  107. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/debounce.py +0 -0
  108. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/debounce.pyi +0 -0
  109. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/foreach.py +0 -0
  110. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/html.py +0 -0
  111. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/html.pyi +0 -0
  112. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/layout/__init__.py +0 -0
  113. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/match.py +0 -0
  114. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/responsive.py +0 -0
  115. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/sticky.py +0 -0
  116. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/sticky.pyi +0 -0
  117. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/upload.py +0 -0
  118. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/core/upload.pyi +0 -0
  119. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/datadisplay/__init__.py +0 -0
  120. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/datadisplay/__init__.pyi +0 -0
  121. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/datadisplay/code.py +0 -0
  122. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/datadisplay/code.pyi +0 -0
  123. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/datadisplay/dataeditor.py +0 -0
  124. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/datadisplay/dataeditor.pyi +0 -0
  125. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/datadisplay/logo.py +0 -0
  126. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/datadisplay/shiki_code_block.py +0 -0
  127. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/datadisplay/shiki_code_block.pyi +0 -0
  128. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/dynamic.py +0 -0
  129. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/__init__.py +0 -0
  130. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/__init__.pyi +0 -0
  131. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/constants/__init__.py +0 -0
  132. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/constants/html.py +0 -0
  133. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/constants/react.py +0 -0
  134. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/constants/reflex.py +0 -0
  135. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/element.py +0 -0
  136. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/element.pyi +0 -0
  137. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/__init__.py +0 -0
  138. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/__init__.pyi +0 -0
  139. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/base.py +0 -0
  140. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/base.pyi +0 -0
  141. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/forms.py +0 -0
  142. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/forms.pyi +0 -0
  143. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/inline.py +0 -0
  144. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/inline.pyi +0 -0
  145. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/media.py +0 -0
  146. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/media.pyi +0 -0
  147. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/metadata.py +0 -0
  148. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/metadata.pyi +0 -0
  149. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/other.py +0 -0
  150. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/other.pyi +0 -0
  151. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/scripts.py +0 -0
  152. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/scripts.pyi +0 -0
  153. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/sectioning.py +0 -0
  154. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/sectioning.pyi +0 -0
  155. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/tables.py +0 -0
  156. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/tables.pyi +0 -0
  157. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/typography.py +0 -0
  158. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/el/elements/typography.pyi +0 -0
  159. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/gridjs/__init__.py +0 -0
  160. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/gridjs/datatable.py +0 -0
  161. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/gridjs/datatable.pyi +0 -0
  162. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/literals.py +0 -0
  163. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/lucide/__init__.py +0 -0
  164. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/lucide/icon.py +0 -0
  165. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/lucide/icon.pyi +0 -0
  166. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/markdown/__init__.py +0 -0
  167. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/markdown/markdown.py +0 -0
  168. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/markdown/markdown.pyi +0 -0
  169. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/moment/__init__.py +0 -0
  170. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/moment/moment.py +0 -0
  171. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/moment/moment.pyi +0 -0
  172. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/next/__init__.py +0 -0
  173. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/next/base.py +0 -0
  174. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/next/base.pyi +0 -0
  175. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/next/image.py +0 -0
  176. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/next/image.pyi +0 -0
  177. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/next/link.py +0 -0
  178. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/next/link.pyi +0 -0
  179. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/next/video.py +0 -0
  180. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/next/video.pyi +0 -0
  181. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/plotly/__init__.py +0 -0
  182. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/plotly/plotly.py +0 -0
  183. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/plotly/plotly.pyi +0 -0
  184. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/props.py +0 -0
  185. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/__init__.py +0 -0
  186. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/__init__.pyi +0 -0
  187. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/primitives/__init__.py +0 -0
  188. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/primitives/__init__.pyi +0 -0
  189. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/primitives/accordion.py +0 -0
  190. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/primitives/accordion.pyi +0 -0
  191. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/primitives/base.py +0 -0
  192. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/primitives/base.pyi +0 -0
  193. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/primitives/drawer.py +0 -0
  194. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/primitives/drawer.pyi +0 -0
  195. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/primitives/form.py +0 -0
  196. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/primitives/form.pyi +0 -0
  197. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/primitives/progress.py +0 -0
  198. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/primitives/progress.pyi +0 -0
  199. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/primitives/slider.py +0 -0
  200. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/primitives/slider.pyi +0 -0
  201. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/__init__.py +0 -0
  202. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/__init__.pyi +0 -0
  203. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/base.py +0 -0
  204. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/base.pyi +0 -0
  205. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/color_mode.py +0 -0
  206. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/color_mode.pyi +0 -0
  207. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/__init__.py +0 -0
  208. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/__init__.pyi +0 -0
  209. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/alert_dialog.py +0 -0
  210. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/alert_dialog.pyi +0 -0
  211. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/aspect_ratio.py +0 -0
  212. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/aspect_ratio.pyi +0 -0
  213. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/avatar.py +0 -0
  214. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/avatar.pyi +0 -0
  215. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/badge.py +0 -0
  216. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/badge.pyi +0 -0
  217. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/button.py +0 -0
  218. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/button.pyi +0 -0
  219. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/callout.py +0 -0
  220. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/callout.pyi +0 -0
  221. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/card.py +0 -0
  222. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/card.pyi +0 -0
  223. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/checkbox.py +0 -0
  224. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/checkbox.pyi +0 -0
  225. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/checkbox_cards.py +0 -0
  226. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/checkbox_cards.pyi +0 -0
  227. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/checkbox_group.py +0 -0
  228. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/checkbox_group.pyi +0 -0
  229. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/context_menu.py +0 -0
  230. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/context_menu.pyi +0 -0
  231. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/data_list.py +0 -0
  232. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/data_list.pyi +0 -0
  233. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/dialog.py +0 -0
  234. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/dialog.pyi +0 -0
  235. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/dropdown_menu.py +0 -0
  236. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/dropdown_menu.pyi +0 -0
  237. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/hover_card.py +0 -0
  238. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/hover_card.pyi +0 -0
  239. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/icon_button.py +0 -0
  240. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/icon_button.pyi +0 -0
  241. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/inset.py +0 -0
  242. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/inset.pyi +0 -0
  243. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/popover.py +0 -0
  244. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/popover.pyi +0 -0
  245. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/progress.py +0 -0
  246. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/progress.pyi +0 -0
  247. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/radio.py +0 -0
  248. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/radio.pyi +0 -0
  249. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/radio_cards.py +0 -0
  250. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/radio_cards.pyi +0 -0
  251. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/radio_group.py +0 -0
  252. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/radio_group.pyi +0 -0
  253. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/scroll_area.py +0 -0
  254. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/scroll_area.pyi +0 -0
  255. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/segmented_control.py +0 -0
  256. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/segmented_control.pyi +0 -0
  257. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/select.py +0 -0
  258. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/select.pyi +0 -0
  259. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/separator.py +0 -0
  260. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/separator.pyi +0 -0
  261. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/skeleton.py +0 -0
  262. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/skeleton.pyi +0 -0
  263. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/slider.py +0 -0
  264. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/slider.pyi +0 -0
  265. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/spinner.py +0 -0
  266. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/spinner.pyi +0 -0
  267. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/switch.py +0 -0
  268. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/switch.pyi +0 -0
  269. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/table.py +0 -0
  270. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/table.pyi +0 -0
  271. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/tabs.py +0 -0
  272. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/tabs.pyi +0 -0
  273. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/text_area.py +0 -0
  274. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/text_area.pyi +0 -0
  275. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/text_field.py +0 -0
  276. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/text_field.pyi +0 -0
  277. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/tooltip.py +0 -0
  278. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/components/tooltip.pyi +0 -0
  279. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/__init__.py +0 -0
  280. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/__init__.pyi +0 -0
  281. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/base.py +0 -0
  282. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/base.pyi +0 -0
  283. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/box.py +0 -0
  284. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/box.pyi +0 -0
  285. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/center.py +0 -0
  286. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/center.pyi +0 -0
  287. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/container.py +0 -0
  288. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/container.pyi +0 -0
  289. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/flex.py +0 -0
  290. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/flex.pyi +0 -0
  291. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/grid.py +0 -0
  292. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/grid.pyi +0 -0
  293. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/list.py +0 -0
  294. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/list.pyi +0 -0
  295. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/section.py +0 -0
  296. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/section.pyi +0 -0
  297. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/spacer.py +0 -0
  298. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/spacer.pyi +0 -0
  299. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/stack.py +0 -0
  300. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/layout/stack.pyi +0 -0
  301. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/typography/__init__.py +0 -0
  302. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/typography/__init__.pyi +0 -0
  303. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/typography/base.py +0 -0
  304. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/typography/blockquote.py +0 -0
  305. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/typography/blockquote.pyi +0 -0
  306. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/typography/code.py +0 -0
  307. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/typography/code.pyi +0 -0
  308. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/typography/heading.py +0 -0
  309. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/typography/heading.pyi +0 -0
  310. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/typography/link.py +0 -0
  311. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/typography/link.pyi +0 -0
  312. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/typography/text.py +0 -0
  313. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/radix/themes/typography/text.pyi +0 -0
  314. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/react_player/__init__.py +0 -0
  315. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/react_player/audio.py +0 -0
  316. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/react_player/audio.pyi +0 -0
  317. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/react_player/react_player.py +0 -0
  318. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/react_player/react_player.pyi +0 -0
  319. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/react_player/video.py +0 -0
  320. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/react_player/video.pyi +0 -0
  321. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/recharts/__init__.py +0 -0
  322. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/recharts/__init__.pyi +0 -0
  323. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/recharts/cartesian.py +0 -0
  324. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/recharts/cartesian.pyi +0 -0
  325. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/recharts/charts.py +0 -0
  326. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/recharts/charts.pyi +0 -0
  327. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/recharts/general.py +0 -0
  328. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/recharts/general.pyi +0 -0
  329. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/recharts/polar.py +0 -0
  330. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/recharts/polar.pyi +0 -0
  331. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/recharts/recharts.py +0 -0
  332. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/recharts/recharts.pyi +0 -0
  333. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/sonner/__init__.py +0 -0
  334. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/sonner/toast.py +0 -0
  335. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/sonner/toast.pyi +0 -0
  336. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/suneditor/__init__.py +0 -0
  337. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/suneditor/editor.py +0 -0
  338. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/suneditor/editor.pyi +0 -0
  339. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/tags/__init__.py +0 -0
  340. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/tags/cond_tag.py +0 -0
  341. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/tags/iter_tag.py +0 -0
  342. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/tags/match_tag.py +0 -0
  343. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/tags/tag.py +0 -0
  344. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/components/tags/tagless.py +0 -0
  345. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/constants/__init__.py +0 -0
  346. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/constants/base.py +0 -0
  347. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/constants/colors.py +0 -0
  348. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/constants/compiler.py +0 -0
  349. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/constants/config.py +0 -0
  350. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/constants/custom_components.py +0 -0
  351. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/constants/event.py +0 -0
  352. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/constants/installer.py +0 -0
  353. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/constants/route.py +0 -0
  354. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/constants/state.py +0 -0
  355. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/constants/style.py +0 -0
  356. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/constants/utils.py +0 -0
  357. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/custom_components/__init__.py +0 -0
  358. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/custom_components/custom_components.py +0 -0
  359. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/event.py +0 -0
  360. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/experimental/__init__.py +0 -0
  361. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/experimental/client_state.py +0 -0
  362. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/experimental/hooks.py +0 -0
  363. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/experimental/layout.py +0 -0
  364. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/experimental/layout.pyi +0 -0
  365. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/experimental/misc.py +0 -0
  366. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/istate/__init__.py +0 -0
  367. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/istate/data.py +0 -0
  368. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/istate/dynamic.py +0 -0
  369. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/istate/proxy.py +0 -0
  370. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/istate/storage.py +0 -0
  371. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/istate/wrappers.py +0 -0
  372. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/middleware/__init__.py +0 -0
  373. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/middleware/hydrate_middleware.py +0 -0
  374. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/middleware/middleware.py +0 -0
  375. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/model.py +0 -0
  376. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/page.py +0 -0
  377. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/py.typed +0 -0
  378. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/route.py +0 -0
  379. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/state.py +0 -0
  380. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/style.py +0 -0
  381. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/testing.py +0 -0
  382. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/__init__.py +0 -0
  383. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/build.py +0 -0
  384. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/codespaces.py +0 -0
  385. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/compat.py +0 -0
  386. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/console.py +0 -0
  387. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/decorator.py +0 -0
  388. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/exceptions.py +0 -0
  389. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/export.py +0 -0
  390. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/format.py +0 -0
  391. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/imports.py +0 -0
  392. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/lazy_loader.py +0 -0
  393. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/net.py +0 -0
  394. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/path_ops.py +0 -0
  395. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/pyi_generator.py +0 -0
  396. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/redir.py +0 -0
  397. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/registry.py +0 -0
  398. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/serializers.py +0 -0
  399. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/telemetry.py +0 -0
  400. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/utils/types.py +0 -0
  401. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/vars/__init__.py +0 -0
  402. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/vars/dep_tracking.py +0 -0
  403. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/vars/function.py +0 -0
  404. {reflex-0.7.4a1 → reflex-0.7.4a2}/reflex/vars/object.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: reflex
3
- Version: 0.7.4a1
3
+ Version: 0.7.4a2
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
@@ -24,6 +24,7 @@ Requires-Dist: charset-normalizer<4.0,>=3.3.2
24
24
  Requires-Dist: distro<2.0,>=1.8.0; platform_system == 'Linux'
25
25
  Requires-Dist: fastapi!=0.111.0,!=0.111.1,>=0.96.0
26
26
  Requires-Dist: granian[reload]>=2.0.0
27
+ Requires-Dist: gunicorn<24.0.0,>=23.0.0
27
28
  Requires-Dist: httpx<1.0,>=0.25.1
28
29
  Requires-Dist: jinja2<4.0,>=3.1.2
29
30
  Requires-Dist: lazy-loader>=0.4
@@ -44,6 +45,7 @@ Requires-Dist: tomlkit<1.0,>=0.12.4
44
45
  Requires-Dist: twine<7.0,>=4.0.0
45
46
  Requires-Dist: typer<1.0,>=0.15.1
46
47
  Requires-Dist: typing-extensions>=4.6.0
48
+ Requires-Dist: uvicorn>=0.20.0
47
49
  Requires-Dist: wheel<1.0,>=0.42.0
48
50
  Requires-Dist: wrapt<2.0,>=1.17.0
49
51
  Description-Content-Type: text/markdown
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "reflex"
3
- version = "0.7.4a1"
3
+ version = "0.7.4a2"
4
4
  description = "Web apps in pure Python."
5
5
  license = { text = "Apache-2.0" }
6
6
  authors = [
@@ -26,6 +26,7 @@ dependencies = [
26
26
  "distro >=1.8.0,<2.0; platform_system == 'Linux'",
27
27
  "fastapi >=0.96.0,!=0.111.0,!=0.111.1",
28
28
  "granian[reload] >=2.0.0",
29
+ "gunicorn >=23.0.0,<24.0.0",
29
30
  "httpx >=0.25.1,<1.0",
30
31
  "jinja2 >=3.1.2,<4.0",
31
32
  "lazy_loader >=0.4",
@@ -46,6 +47,7 @@ dependencies = [
46
47
  "twine >=4.0.0,<7.0",
47
48
  "typer >=0.15.1,<1.0",
48
49
  "typing_extensions >=4.6.0",
50
+ "uvicorn >=0.20.0",
49
51
  "wheel >=0.42.0,<1.0",
50
52
  "wrapt >=1.17.0,<2.0",
51
53
  ]
@@ -161,5 +163,4 @@ dev = [
161
163
  "ruff ==0.11.0",
162
164
  "selenium >=4.11.0,<5.0",
163
165
  "toml >=0.10.2,<1.0",
164
- "uvicorn >=0.20.0",
165
166
  ]
@@ -1,5 +1,5 @@
1
1
  import { useTheme } from "next-themes";
2
- import { useEffect, useState } from "react";
2
+ import { useRef, useEffect, useState } from "react";
3
3
  import {
4
4
  ColorModeContext,
5
5
  defaultColorMode,
@@ -13,6 +13,14 @@ export default function RadixThemesColorModeProvider({ children }) {
13
13
  const [resolvedColorMode, setResolvedColorMode] = useState(
14
14
  defaultColorMode === "dark" ? "dark" : "light",
15
15
  );
16
+ const firstUpdate = useRef(true);
17
+ useEffect(() => {
18
+ if (firstUpdate.current) {
19
+ firstUpdate.current = false;
20
+ setRawColorMode(theme);
21
+ setResolvedColorMode(resolvedTheme);
22
+ }
23
+ });
16
24
 
17
25
  useEffect(() => {
18
26
  if (isDevMode) {
@@ -968,7 +968,7 @@ class App(MiddlewareMixin, LifespanMixin):
968
968
  # Check the nocompile file.
969
969
  if nocompile.exists():
970
970
  # Delete the nocompile file
971
- nocompile.unlink()
971
+ nocompile.unlink(missing_ok=True)
972
972
  return False
973
973
 
974
974
  # By default, compile the app.
@@ -1258,7 +1258,9 @@ class App(MiddlewareMixin, LifespanMixin):
1258
1258
  compiler.compile_document_root(
1259
1259
  self.head_components,
1260
1260
  html_lang=self.html_lang,
1261
- html_custom_attrs=self.html_custom_attrs, # pyright: ignore [reportArgumentType]
1261
+ html_custom_attrs=(
1262
+ {**self.html_custom_attrs} if self.html_custom_attrs else {}
1263
+ ),
1262
1264
  )
1263
1265
  )
1264
1266
 
@@ -38,7 +38,7 @@ def validate_field_name(bases: list[Type["BaseModel"]], field_name: str) -> None
38
38
 
39
39
  # monkeypatch pydantic validate_field_name method to skip validating
40
40
  # shadowed state vars when reloading app via utils.prerequisites.get_app(reload=True)
41
- pydantic_main.validate_field_name = validate_field_name # pyright: ignore [reportPossiblyUnboundVariable, reportPrivateImportUsage]
41
+ pydantic_main.validate_field_name = validate_field_name # pyright: ignore [reportPrivateImportUsage]
42
42
 
43
43
  if TYPE_CHECKING:
44
44
  from reflex.vars import Var
@@ -107,7 +107,7 @@ class Base(BaseModel):
107
107
  default_value: The default value of the field
108
108
  """
109
109
  var_name = var._var_field_name
110
- new_field = ModelField.infer( # pyright: ignore [reportPossiblyUnboundVariable]
110
+ new_field = ModelField.infer(
111
111
  name=var_name,
112
112
  value=default_value,
113
113
  annotation=var._var_type,
@@ -128,5 +128,5 @@ class Base(BaseModel):
128
128
  if isinstance(key, str):
129
129
  # Seems like this function signature was wrong all along?
130
130
  # If the user wants a field that we know of, get it and pass it off to _get_value
131
- return getattr(self, key, key)
131
+ return getattr(self, key)
132
132
  return key
@@ -20,6 +20,7 @@ from reflex.config import environment, get_config
20
20
  from reflex.state import BaseState
21
21
  from reflex.style import SYSTEM_COLOR_MODE
22
22
  from reflex.utils import console, path_ops
23
+ from reflex.utils.exceptions import ReflexError
23
24
  from reflex.utils.exec import is_prod_mode
24
25
  from reflex.utils.imports import ImportVar
25
26
  from reflex.utils.prerequisites import get_web_dir
@@ -651,6 +652,8 @@ def into_component(component: Component | ComponentCallable) -> Component:
651
652
  ):
652
653
  return converted
653
654
  except KeyError as e:
655
+ if isinstance(e, ReflexError):
656
+ raise
654
657
  key = e.args[0] if e.args else None
655
658
  if key is not None and isinstance(key, Var):
656
659
  raise TypeError(
@@ -658,6 +661,8 @@ def into_component(component: Component | ComponentCallable) -> Component:
658
661
  ).with_traceback(e.__traceback__) from None
659
662
  raise
660
663
  except TypeError as e:
664
+ if isinstance(e, ReflexError):
665
+ raise
661
666
  message = e.args[0] if e.args else None
662
667
  if message and isinstance(message, str):
663
668
  if message.endswith("has no len()") and (
@@ -2,6 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ import contextlib
5
6
  import copy
6
7
  import dataclasses
7
8
  import functools
@@ -1974,13 +1975,15 @@ class NoSSRComponent(Component):
1974
1975
  # Do NOT import the main library/tag statically.
1975
1976
  import_name = self._get_import_name()
1976
1977
  if import_name is not None:
1977
- _imports[import_name] = [
1978
+ with contextlib.suppress(ValueError):
1979
+ _imports[import_name].remove(self.import_var)
1980
+ _imports[import_name].append(
1978
1981
  imports.ImportVar(
1979
1982
  tag=None,
1980
1983
  render=False,
1981
1984
  transpile=self._should_transpile(self.library),
1982
- ),
1983
- ]
1985
+ )
1986
+ )
1984
1987
 
1985
1988
  return imports.merge_imports(
1986
1989
  dynamic_import,
@@ -44,7 +44,7 @@ from reflex.utils.types import (
44
44
  )
45
45
 
46
46
  try:
47
- from dotenv import load_dotenv # pyright: ignore [reportMissingImports]
47
+ from dotenv import load_dotenv
48
48
  except ImportError:
49
49
  load_dotenv = None
50
50
 
@@ -205,18 +205,22 @@ def _run(
205
205
  prerequisites.check_latest_package_version(constants.Reflex.MODULE_NAME)
206
206
 
207
207
  # Get the app module.
208
- app_task = prerequisites.compile_app if frontend else prerequisites.validate_app
208
+ app_task = prerequisites.compile_or_validate_app
209
+ args = (frontend,)
209
210
 
210
211
  # Granian fails if the app is already imported.
211
212
  if should_use_granian():
212
213
  import concurrent.futures
213
214
 
214
215
  compile_future = concurrent.futures.ProcessPoolExecutor(max_workers=1).submit(
215
- app_task
216
+ app_task,
217
+ *args,
216
218
  )
217
- compile_future.result()
219
+ validation_result = compile_future.result()
218
220
  else:
219
- app_task()
221
+ validation_result = app_task(*args)
222
+ if not validation_result:
223
+ raise typer.Exit(1)
220
224
 
221
225
  # Warn if schema is not up to date.
222
226
  prerequisites.check_schema_up_to_date()
@@ -189,9 +189,11 @@ def run_frontend_prod(root: Path, port: str, backend_present: bool = True):
189
189
 
190
190
  @once
191
191
  def _warn_user_about_uvicorn():
192
- console.warn(
193
- "Using Uvicorn for backend as it is installed. This behavior will change in 0.8.0 to use Granian by default."
194
- )
192
+ # When we eventually switch to Granian by default, we should enable this warning.
193
+ if False:
194
+ console.warn(
195
+ "Using Uvicorn for backend as it is installed. This behavior will change in 0.8.0 to use Granian by default."
196
+ )
195
197
 
196
198
 
197
199
  def should_use_granian():
@@ -357,70 +359,74 @@ def run_granian_backend(host: str, port: int, loglevel: LogLevel):
357
359
  ).serve()
358
360
 
359
361
 
362
+ def _deprecate_asgi_config(
363
+ config_name: str,
364
+ reason: str = "",
365
+ ):
366
+ # When we eventually switch to Granian by default, we should enable this deprecation.
367
+ if False:
368
+ console.deprecate(
369
+ f"config.{config_name}",
370
+ reason=reason,
371
+ deprecation_version="0.7.5",
372
+ removal_version="0.8.0",
373
+ )
374
+
375
+
360
376
  @once
361
377
  def _get_backend_workers():
362
378
  from reflex.utils import processes
363
379
 
364
380
  config = get_config()
365
381
 
382
+ gunicorn_workers = config.gunicorn_workers or 0
383
+
366
384
  if config.gunicorn_workers is not None:
367
- console.deprecate(
368
- "config.gunicorn_workers",
369
- reason="If you're using Granian, use GRANIAN_WORKERS instead.",
370
- deprecation_version="0.7.4",
371
- removal_version="0.8.0",
385
+ _deprecate_asgi_config(
386
+ "gunicorn_workers",
387
+ "If you're using Granian, use GRANIAN_WORKERS instead.",
372
388
  )
373
389
 
374
- return (
375
- processes.get_num_workers()
376
- if not config.gunicorn_workers
377
- else config.gunicorn_workers
378
- )
390
+ return gunicorn_workers if gunicorn_workers else processes.get_num_workers()
379
391
 
380
392
 
381
393
  @once
382
394
  def _get_backend_timeout():
383
395
  config = get_config()
384
396
 
397
+ timeout = config.timeout or 120
398
+
385
399
  if config.timeout is not None:
386
- console.deprecate(
387
- "config.timeout",
388
- reason="If you're using Granian, use GRANIAN_WORKERS_LIFETIME instead.",
389
- deprecation_version="0.7.4",
390
- removal_version="0.8.0",
400
+ _deprecate_asgi_config(
401
+ "timeout",
402
+ "If you're using Granian, use GRANIAN_WORKERS_LIFETIME instead.",
391
403
  )
392
404
 
393
- return config.timeout
405
+ return timeout
394
406
 
395
407
 
396
408
  @once
397
409
  def _get_backend_max_requests():
398
410
  config = get_config()
399
411
 
412
+ gunicorn_max_requests = config.gunicorn_max_requests or 120
413
+
400
414
  if config.gunicorn_max_requests is not None:
401
- console.deprecate(
402
- "config.gunicorn_max_requests",
403
- reason="",
404
- deprecation_version="0.7.4",
405
- removal_version="0.8.0",
406
- )
415
+ _deprecate_asgi_config("gunicorn_max_requests")
407
416
 
408
- return config.gunicorn_max_requests
417
+ return gunicorn_max_requests
409
418
 
410
419
 
411
420
  @once
412
421
  def _get_backend_max_requests_jitter():
413
422
  config = get_config()
414
423
 
424
+ gunicorn_max_requests_jitter = config.gunicorn_max_requests_jitter or 25
425
+
415
426
  if config.gunicorn_max_requests_jitter is not None:
416
- console.deprecate(
417
- "config.gunicorn_max_requests_jitter",
418
- reason="",
419
- deprecation_version="0.7.4",
420
- removal_version="0.8.0",
421
- )
427
+ _deprecate_asgi_config("gunicorn_max_requests_jitter")
422
428
 
423
- return config.gunicorn_max_requests_jitter
429
+ return gunicorn_max_requests_jitter
424
430
 
425
431
 
426
432
  def run_backend_prod(
@@ -8,6 +8,7 @@ import functools
8
8
  import importlib
9
9
  import importlib.metadata
10
10
  import importlib.util
11
+ import io
11
12
  import json
12
13
  import os
13
14
  import platform
@@ -183,7 +184,7 @@ def get_node_version() -> version.Version | None:
183
184
  try:
184
185
  result = processes.new_process([node_path, "-v"], run=True)
185
186
  # The output will be in the form "vX.Y.Z", but version.parse() can handle it
186
- return version.parse(result.stdout) # pyright: ignore [reportArgumentType]
187
+ return version.parse(result.stdout)
187
188
  except (FileNotFoundError, TypeError):
188
189
  return None
189
190
 
@@ -200,7 +201,7 @@ def get_bun_version() -> version.Version | None:
200
201
  try:
201
202
  # Run the bun -v command and capture the output
202
203
  result = processes.new_process([str(bun_path), "-v"], run=True)
203
- return version.parse(str(result.stdout)) # pyright: ignore [reportArgumentType]
204
+ return version.parse(str(result.stdout))
204
205
  except FileNotFoundError:
205
206
  return None
206
207
  except version.InvalidVersion as e:
@@ -449,6 +450,76 @@ def compile_app(reload: bool = False, export: bool = False) -> None:
449
450
  get_compiled_app(reload=reload, export=export)
450
451
 
451
452
 
453
+ def _can_colorize() -> bool:
454
+ """Check if the output can be colorized.
455
+
456
+ Copied from _colorize.can_colorize.
457
+
458
+ https://raw.githubusercontent.com/python/cpython/refs/heads/main/Lib/_colorize.py
459
+
460
+ Returns:
461
+ If the output can be colorized
462
+ """
463
+ file = sys.stdout
464
+
465
+ if not sys.flags.ignore_environment:
466
+ if os.environ.get("PYTHON_COLORS") == "0":
467
+ return False
468
+ if os.environ.get("PYTHON_COLORS") == "1":
469
+ return True
470
+ if os.environ.get("NO_COLOR"):
471
+ return False
472
+ if os.environ.get("FORCE_COLOR"):
473
+ return True
474
+ if os.environ.get("TERM") == "dumb":
475
+ return False
476
+
477
+ if not hasattr(file, "fileno"):
478
+ return False
479
+
480
+ if sys.platform == "win32":
481
+ try:
482
+ import nt
483
+
484
+ if not nt._supports_virtual_terminal():
485
+ return False
486
+ except (ImportError, AttributeError):
487
+ return False
488
+
489
+ try:
490
+ return os.isatty(file.fileno())
491
+ except io.UnsupportedOperation:
492
+ return file.isatty()
493
+
494
+
495
+ def compile_or_validate_app(compile: bool = False) -> bool:
496
+ """Compile or validate the app module based on the default config.
497
+
498
+ Args:
499
+ compile: Whether to compile the app.
500
+
501
+ Returns:
502
+ If the app is compiled successfully.
503
+ """
504
+ try:
505
+ if compile:
506
+ compile_app()
507
+ else:
508
+ validate_app()
509
+ except Exception as e:
510
+ import traceback
511
+
512
+ sys_exception = sys.exception()
513
+
514
+ try:
515
+ colorize = _can_colorize()
516
+ traceback.print_exception(e, colorize=colorize) # pyright: ignore[reportCallIssue]
517
+ except Exception:
518
+ traceback.print_exception(sys_exception)
519
+ return False
520
+ return True
521
+
522
+
452
523
  def get_redis() -> Redis | None:
453
524
  """Get the asynchronous redis client.
454
525
 
@@ -10,7 +10,7 @@ import signal
10
10
  import subprocess
11
11
  from concurrent import futures
12
12
  from pathlib import Path
13
- from typing import Any, Callable, Generator, Sequence, Tuple
13
+ from typing import Any, Callable, Generator, Literal, Sequence, Tuple, overload
14
14
 
15
15
  import psutil
16
16
  import typer
@@ -142,12 +142,30 @@ def handle_port(service_name: str, port: int, auto_increment: bool) -> int:
142
142
  raise typer.Exit()
143
143
 
144
144
 
145
+ @overload
146
+ def new_process(
147
+ args: str | list[str] | list[str | None] | list[str | Path | None],
148
+ run: Literal[False] = False,
149
+ show_logs: bool = False,
150
+ **kwargs,
151
+ ) -> subprocess.Popen[str]: ...
152
+
153
+
154
+ @overload
155
+ def new_process(
156
+ args: str | list[str] | list[str | None] | list[str | Path | None],
157
+ run: Literal[True],
158
+ show_logs: bool = False,
159
+ **kwargs,
160
+ ) -> subprocess.CompletedProcess[str]: ...
161
+
162
+
145
163
  def new_process(
146
164
  args: str | list[str] | list[str | None] | list[str | Path | None],
147
165
  run: bool = False,
148
166
  show_logs: bool = False,
149
167
  **kwargs,
150
- ):
168
+ ) -> subprocess.CompletedProcess[str] | subprocess.Popen[str]:
151
169
  """Wrapper over subprocess.Popen to unify the launch of child processes.
152
170
 
153
171
  Args:
@@ -163,7 +181,8 @@ def new_process(
163
181
  Exit: When attempting to run a command with a None value.
164
182
  """
165
183
  # Check for invalid command first.
166
- if isinstance(args, list) and None in args:
184
+ non_empty_args = list(filter(None, args)) if isinstance(args, list) else [args]
185
+ if isinstance(args, list) and len(non_empty_args) != len(args):
167
186
  console.error(f"Invalid command: {args}")
168
187
  raise typer.Exit(1)
169
188
 
@@ -190,9 +209,15 @@ def new_process(
190
209
  "errors": "replace", # Avoid UnicodeDecodeError in unknown command output
191
210
  **kwargs,
192
211
  }
193
- console.debug(f"Running command: {args}")
194
- fn = subprocess.run if run else subprocess.Popen
195
- return fn(args, **kwargs) # pyright: ignore [reportCallIssue, reportArgumentType]
212
+ console.debug(f"Running command: {non_empty_args}")
213
+
214
+ def subprocess_p_open(args: subprocess._CMD, **kwargs):
215
+ return subprocess.Popen(args, **kwargs)
216
+
217
+ fn: Callable[..., subprocess.CompletedProcess[str] | subprocess.Popen[str]] = (
218
+ subprocess.run if run else subprocess_p_open
219
+ )
220
+ return fn(non_empty_args, **kwargs)
196
221
 
197
222
 
198
223
  @contextlib.contextmanager
@@ -311,6 +336,7 @@ def show_status(
311
336
  process: subprocess.Popen,
312
337
  suppress_errors: bool = False,
313
338
  analytics_enabled: bool = False,
339
+ prior_processes: Tuple[subprocess.Popen, ...] = (),
314
340
  ):
315
341
  """Show the status of a process.
316
342
 
@@ -319,15 +345,17 @@ def show_status(
319
345
  process: The process.
320
346
  suppress_errors: If True, do not exit if errors are encountered (for fallback).
321
347
  analytics_enabled: Whether analytics are enabled for this command.
348
+ prior_processes: The prior processes that have been run.
322
349
  """
323
- with console.status(message) as status:
324
- for line in stream_logs(
325
- message,
326
- process,
327
- suppress_errors=suppress_errors,
328
- analytics_enabled=analytics_enabled,
329
- ):
330
- status.update(f"{message} {line}")
350
+ for one_process in (*prior_processes, process):
351
+ with console.status(message) as status:
352
+ for line in stream_logs(
353
+ message,
354
+ one_process,
355
+ suppress_errors=suppress_errors,
356
+ analytics_enabled=analytics_enabled,
357
+ ):
358
+ status.update(f"{message} {line}")
331
359
 
332
360
 
333
361
  def show_progress(message: str, process: subprocess.Popen, checkpoints: list[str]):
@@ -381,6 +409,7 @@ def run_process_with_fallbacks(
381
409
  show_status_message: str,
382
410
  fallbacks: str | Sequence[str] | Sequence[Sequence[str]] | None = None,
383
411
  analytics_enabled: bool = False,
412
+ prior_processes: Tuple[subprocess.Popen, ...] = (),
384
413
  **kwargs,
385
414
  ):
386
415
  """Run subprocess and retry using fallback command if initial command fails.
@@ -390,7 +419,8 @@ def run_process_with_fallbacks(
390
419
  show_status_message: The status message to be displayed in the console.
391
420
  fallbacks: The fallback command to run if the initial command fails.
392
421
  analytics_enabled: Whether analytics are enabled for this command.
393
- kwargs: Kwargs to pass to new_process function.
422
+ prior_processes: The prior processes that have been run.
423
+ **kwargs: Kwargs to pass to new_process function.
394
424
  """
395
425
  process = new_process(get_command_with_loglevel(args), **kwargs)
396
426
  if not fallbacks:
@@ -399,6 +429,7 @@ def run_process_with_fallbacks(
399
429
  show_status_message,
400
430
  process,
401
431
  analytics_enabled=analytics_enabled,
432
+ prior_processes=prior_processes,
402
433
  )
403
434
  else:
404
435
  # Suppress errors for initial command, because we will try to fallback
@@ -411,7 +442,7 @@ def run_process_with_fallbacks(
411
442
  # retry with fallback command.
412
443
  fallback_with_args = (
413
444
  [current_fallback, *args[1:]]
414
- if isinstance(fallbacks, str)
445
+ if isinstance(current_fallback, str)
415
446
  else [*current_fallback, *args[1:]]
416
447
  )
417
448
  console.warn(
@@ -422,6 +453,7 @@ def run_process_with_fallbacks(
422
453
  show_status_message=show_status_message,
423
454
  fallbacks=next_fallbacks,
424
455
  analytics_enabled=analytics_enabled,
456
+ prior_processes=(*prior_processes, process),
425
457
  **kwargs,
426
458
  )
427
459
 
@@ -3016,41 +3016,6 @@ _decode_var_pattern = re.compile(_decode_var_pattern_re, flags=re.DOTALL)
3016
3016
  _global_vars: dict[int, Var] = {}
3017
3017
 
3018
3018
 
3019
- def _extract_var_data(value: Iterable) -> list[VarData | None]:
3020
- """Extract the var imports and hooks from an iterable containing a Var.
3021
-
3022
- Args:
3023
- value: The iterable to extract the VarData from
3024
-
3025
- Returns:
3026
- The extracted VarDatas.
3027
- """
3028
- from reflex.style import Style
3029
- from reflex.vars import Var
3030
-
3031
- var_datas = []
3032
- with contextlib.suppress(TypeError):
3033
- for sub in value:
3034
- if isinstance(sub, Var):
3035
- var_datas.append(sub._var_data)
3036
- elif not isinstance(sub, str):
3037
- # Recurse into dict values.
3038
- if hasattr(sub, "values") and callable(sub.values):
3039
- var_datas.extend(_extract_var_data(sub.values())) # pyright: ignore [reportArgumentType]
3040
- # Recurse into iterable values (or dict keys).
3041
- var_datas.extend(_extract_var_data(sub))
3042
-
3043
- # Style objects should already have _var_data.
3044
- if isinstance(value, Style):
3045
- var_datas.append(value._var_data)
3046
- else:
3047
- # Recurse when value is a dict itself.
3048
- values = getattr(value, "values", None)
3049
- if callable(values):
3050
- var_datas.extend(_extract_var_data(values())) # pyright: ignore [reportArgumentType]
3051
- return var_datas
3052
-
3053
-
3054
3019
  dispatchers: dict[GenericType, Callable[[Var], Var]] = {}
3055
3020
 
3056
3021