reflex 0.8.6a0__tar.gz → 0.8.7__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 (412) hide show
  1. {reflex-0.8.6a0 → reflex-0.8.7}/PKG-INFO +2 -2
  2. {reflex-0.8.6a0 → reflex-0.8.7}/pyproject.toml +3 -3
  3. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/jinja/web/vite.config.js.jinja2 +4 -1
  4. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/web/app/routes.js +0 -1
  5. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/web/utils/state.js +1 -11
  6. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/app.py +27 -23
  7. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/base/error_boundary.py +2 -0
  8. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/component.py +6 -4
  9. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/lucide/icon.py +4 -1
  10. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/lucide/icon.pyi +4 -1
  11. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/plotly/plotly.py +9 -9
  12. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/recharts/recharts.py +2 -2
  13. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/sonner/toast.py +7 -7
  14. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/sonner/toast.pyi +8 -8
  15. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/config.py +9 -2
  16. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/constants/base.py +2 -0
  17. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/constants/installer.py +6 -6
  18. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/constants/state.py +1 -0
  19. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/custom_components/custom_components.py +3 -3
  20. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/istate/manager.py +2 -1
  21. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/plugins/__init__.py +2 -0
  22. reflex-0.8.7/reflex/plugins/_screenshot.py +144 -0
  23. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/plugins/base.py +14 -1
  24. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/reflex.py +7 -6
  25. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/route.py +4 -0
  26. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/state.py +2 -2
  27. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/testing.py +3 -5
  28. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/utils/build.py +21 -3
  29. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/utils/exec.py +11 -11
  30. reflex-0.8.7/reflex/utils/frontend_skeleton.py +254 -0
  31. reflex-0.8.7/reflex/utils/js_runtimes.py +411 -0
  32. reflex-0.8.7/reflex/utils/prerequisites.py +595 -0
  33. reflex-0.8.7/reflex/utils/rename.py +170 -0
  34. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/utils/telemetry.py +101 -10
  35. reflex-0.8.7/reflex/utils/templates.py +443 -0
  36. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/vars/base.py +3 -3
  37. reflex-0.8.6a0/reflex/.templates/web/utils/client_side_routing.js +0 -45
  38. reflex-0.8.6a0/reflex/components/core/client_side_routing.py +0 -70
  39. reflex-0.8.6a0/reflex/components/core/client_side_routing.pyi +0 -68
  40. reflex-0.8.6a0/reflex/utils/prerequisites.py +0 -1961
  41. {reflex-0.8.6a0 → reflex-0.8.7}/.gitignore +0 -0
  42. {reflex-0.8.6a0 → reflex-0.8.7}/LICENSE +0 -0
  43. {reflex-0.8.6a0 → reflex-0.8.7}/README.md +0 -0
  44. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/apps/blank/assets/favicon.ico +0 -0
  45. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/apps/blank/code/__init__.py +0 -0
  46. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/apps/blank/code/blank.py +0 -0
  47. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/jinja/app/rxconfig.py.jinja2 +0 -0
  48. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/jinja/custom_components/README.md.jinja2 +0 -0
  49. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/jinja/custom_components/__init__.py.jinja2 +0 -0
  50. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/jinja/custom_components/demo_app.py.jinja2 +0 -0
  51. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/jinja/custom_components/pyproject.toml.jinja2 +0 -0
  52. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/jinja/custom_components/src.py.jinja2 +0 -0
  53. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/jinja/web/package.json.jinja2 +0 -0
  54. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/jinja/web/pages/_app.js.jinja2 +0 -0
  55. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/jinja/web/pages/_document.js.jinja2 +0 -0
  56. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/jinja/web/pages/base_page.js.jinja2 +0 -0
  57. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/jinja/web/pages/component.js.jinja2 +0 -0
  58. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/jinja/web/pages/custom_component.js.jinja2 +0 -0
  59. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/jinja/web/pages/index.js.jinja2 +0 -0
  60. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/jinja/web/pages/macros.js.jinja2 +0 -0
  61. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/jinja/web/pages/stateful_component.js.jinja2 +0 -0
  62. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/jinja/web/pages/stateful_components.js.jinja2 +0 -0
  63. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/jinja/web/pages/utils.js.jinja2 +0 -0
  64. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/jinja/web/styles/styles.css.jinja2 +0 -0
  65. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/jinja/web/utils/context.js.jinja2 +0 -0
  66. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/jinja/web/utils/theme.js.jinja2 +0 -0
  67. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/web/.gitignore +0 -0
  68. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/web/app/entry.client.js +0 -0
  69. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +0 -0
  70. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/web/components/shiki/code.js +0 -0
  71. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/web/jsconfig.json +0 -0
  72. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/web/postcss.config.js +0 -0
  73. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/web/react-router.config.js +0 -0
  74. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/web/styles/__reflex_style_reset.css +0 -0
  75. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/web/utils/helpers/dataeditor.js +0 -0
  76. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/web/utils/helpers/debounce.js +0 -0
  77. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/web/utils/helpers/paste.js +0 -0
  78. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/web/utils/helpers/range.js +0 -0
  79. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/web/utils/helpers/throttle.js +0 -0
  80. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/web/utils/react-theme.js +0 -0
  81. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/.templates/web/vite-plugin-safari-cachebust.js +0 -0
  82. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/__init__.py +0 -0
  83. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/__init__.pyi +0 -0
  84. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/__main__.py +0 -0
  85. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/admin.py +0 -0
  86. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/app_mixins/__init__.py +0 -0
  87. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/app_mixins/lifespan.py +0 -0
  88. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/app_mixins/middleware.py +0 -0
  89. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/app_mixins/mixin.py +0 -0
  90. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/assets.py +0 -0
  91. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/base.py +0 -0
  92. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/compiler/__init__.py +0 -0
  93. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/compiler/compiler.py +0 -0
  94. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/compiler/templates.py +0 -0
  95. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/compiler/utils.py +0 -0
  96. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/__init__.py +0 -0
  97. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/__init__.pyi +0 -0
  98. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/base/__init__.py +0 -0
  99. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/base/__init__.pyi +0 -0
  100. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/base/app_wrap.py +0 -0
  101. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/base/app_wrap.pyi +0 -0
  102. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/base/bare.py +0 -0
  103. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/base/body.py +0 -0
  104. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/base/body.pyi +0 -0
  105. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/base/document.py +0 -0
  106. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/base/document.pyi +0 -0
  107. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/base/error_boundary.pyi +0 -0
  108. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/base/fragment.py +0 -0
  109. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/base/fragment.pyi +0 -0
  110. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/base/link.py +0 -0
  111. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/base/link.pyi +0 -0
  112. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/base/meta.py +0 -0
  113. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/base/meta.pyi +0 -0
  114. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/base/script.py +0 -0
  115. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/base/script.pyi +0 -0
  116. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/base/strict_mode.py +0 -0
  117. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/base/strict_mode.pyi +0 -0
  118. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/core/__init__.py +0 -0
  119. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/core/__init__.pyi +0 -0
  120. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/core/auto_scroll.py +0 -0
  121. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/core/auto_scroll.pyi +0 -0
  122. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/core/banner.py +0 -0
  123. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/core/banner.pyi +0 -0
  124. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/core/breakpoints.py +0 -0
  125. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/core/clipboard.py +0 -0
  126. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/core/clipboard.pyi +0 -0
  127. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/core/colors.py +0 -0
  128. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/core/cond.py +0 -0
  129. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/core/debounce.py +0 -0
  130. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/core/debounce.pyi +0 -0
  131. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/core/foreach.py +0 -0
  132. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/core/helmet.py +0 -0
  133. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/core/helmet.pyi +0 -0
  134. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/core/html.py +0 -0
  135. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/core/html.pyi +0 -0
  136. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/core/layout/__init__.py +0 -0
  137. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/core/match.py +0 -0
  138. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/core/responsive.py +0 -0
  139. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/core/sticky.py +0 -0
  140. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/core/sticky.pyi +0 -0
  141. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/core/upload.py +0 -0
  142. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/core/upload.pyi +0 -0
  143. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/core/window_events.py +0 -0
  144. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/core/window_events.pyi +0 -0
  145. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/datadisplay/__init__.py +0 -0
  146. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/datadisplay/__init__.pyi +0 -0
  147. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/datadisplay/code.py +0 -0
  148. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/datadisplay/code.pyi +0 -0
  149. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/datadisplay/dataeditor.py +0 -0
  150. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/datadisplay/dataeditor.pyi +0 -0
  151. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/datadisplay/logo.py +0 -0
  152. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/datadisplay/shiki_code_block.py +0 -0
  153. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/datadisplay/shiki_code_block.pyi +0 -0
  154. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/dynamic.py +0 -0
  155. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/el/__init__.py +0 -0
  156. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/el/__init__.pyi +0 -0
  157. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/el/element.py +0 -0
  158. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/el/element.pyi +0 -0
  159. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/el/elements/__init__.py +0 -0
  160. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/el/elements/__init__.pyi +0 -0
  161. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/el/elements/base.py +0 -0
  162. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/el/elements/base.pyi +0 -0
  163. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/el/elements/forms.py +0 -0
  164. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/el/elements/forms.pyi +0 -0
  165. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/el/elements/inline.py +0 -0
  166. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/el/elements/inline.pyi +0 -0
  167. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/el/elements/media.py +0 -0
  168. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/el/elements/media.pyi +0 -0
  169. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/el/elements/metadata.py +0 -0
  170. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/el/elements/metadata.pyi +0 -0
  171. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/el/elements/other.py +0 -0
  172. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/el/elements/other.pyi +0 -0
  173. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/el/elements/scripts.py +0 -0
  174. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/el/elements/scripts.pyi +0 -0
  175. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/el/elements/sectioning.py +0 -0
  176. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/el/elements/sectioning.pyi +0 -0
  177. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/el/elements/tables.py +0 -0
  178. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/el/elements/tables.pyi +0 -0
  179. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/el/elements/typography.py +0 -0
  180. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/el/elements/typography.pyi +0 -0
  181. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/field.py +0 -0
  182. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/gridjs/__init__.py +0 -0
  183. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/gridjs/datatable.py +0 -0
  184. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/gridjs/datatable.pyi +0 -0
  185. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/literals.py +0 -0
  186. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/lucide/__init__.py +0 -0
  187. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/markdown/__init__.py +0 -0
  188. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/markdown/markdown.py +0 -0
  189. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/markdown/markdown.pyi +0 -0
  190. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/moment/__init__.py +0 -0
  191. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/moment/moment.py +0 -0
  192. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/moment/moment.pyi +0 -0
  193. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/plotly/__init__.py +0 -0
  194. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/plotly/plotly.pyi +0 -0
  195. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/props.py +0 -0
  196. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/__init__.py +0 -0
  197. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/__init__.pyi +0 -0
  198. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/primitives/__init__.py +0 -0
  199. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/primitives/__init__.pyi +0 -0
  200. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/primitives/accordion.py +0 -0
  201. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/primitives/accordion.pyi +0 -0
  202. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/primitives/base.py +0 -0
  203. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/primitives/base.pyi +0 -0
  204. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/primitives/drawer.py +0 -0
  205. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/primitives/drawer.pyi +0 -0
  206. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/primitives/form.py +0 -0
  207. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/primitives/form.pyi +0 -0
  208. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/primitives/progress.py +0 -0
  209. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/primitives/progress.pyi +0 -0
  210. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/primitives/slider.py +0 -0
  211. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/primitives/slider.pyi +0 -0
  212. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/__init__.py +0 -0
  213. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/__init__.pyi +0 -0
  214. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/base.py +0 -0
  215. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/base.pyi +0 -0
  216. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/color_mode.py +0 -0
  217. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/color_mode.pyi +0 -0
  218. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/__init__.py +0 -0
  219. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/__init__.pyi +0 -0
  220. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/alert_dialog.py +0 -0
  221. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/alert_dialog.pyi +0 -0
  222. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/aspect_ratio.py +0 -0
  223. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/aspect_ratio.pyi +0 -0
  224. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/avatar.py +0 -0
  225. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/avatar.pyi +0 -0
  226. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/badge.py +0 -0
  227. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/badge.pyi +0 -0
  228. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/button.py +0 -0
  229. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/button.pyi +0 -0
  230. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/callout.py +0 -0
  231. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/callout.pyi +0 -0
  232. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/card.py +0 -0
  233. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/card.pyi +0 -0
  234. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/checkbox.py +0 -0
  235. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/checkbox.pyi +0 -0
  236. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/checkbox_cards.py +0 -0
  237. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/checkbox_cards.pyi +0 -0
  238. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/checkbox_group.py +0 -0
  239. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/checkbox_group.pyi +0 -0
  240. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/context_menu.py +0 -0
  241. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/context_menu.pyi +0 -0
  242. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/data_list.py +0 -0
  243. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/data_list.pyi +0 -0
  244. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/dialog.py +0 -0
  245. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/dialog.pyi +0 -0
  246. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/dropdown_menu.py +0 -0
  247. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/dropdown_menu.pyi +0 -0
  248. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/hover_card.py +0 -0
  249. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/hover_card.pyi +0 -0
  250. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/icon_button.py +0 -0
  251. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/icon_button.pyi +0 -0
  252. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/inset.py +0 -0
  253. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/inset.pyi +0 -0
  254. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/popover.py +0 -0
  255. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/popover.pyi +0 -0
  256. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/progress.py +0 -0
  257. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/progress.pyi +0 -0
  258. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/radio.py +0 -0
  259. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/radio.pyi +0 -0
  260. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/radio_cards.py +0 -0
  261. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/radio_cards.pyi +0 -0
  262. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/radio_group.py +0 -0
  263. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/radio_group.pyi +0 -0
  264. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/scroll_area.py +0 -0
  265. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/scroll_area.pyi +0 -0
  266. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/segmented_control.py +0 -0
  267. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/segmented_control.pyi +0 -0
  268. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/select.py +0 -0
  269. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/select.pyi +0 -0
  270. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/separator.py +0 -0
  271. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/separator.pyi +0 -0
  272. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/skeleton.py +0 -0
  273. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/skeleton.pyi +0 -0
  274. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/slider.py +0 -0
  275. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/slider.pyi +0 -0
  276. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/spinner.py +0 -0
  277. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/spinner.pyi +0 -0
  278. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/switch.py +0 -0
  279. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/switch.pyi +0 -0
  280. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/table.py +0 -0
  281. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/table.pyi +0 -0
  282. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/tabs.py +0 -0
  283. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/tabs.pyi +0 -0
  284. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/text_area.py +0 -0
  285. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/text_area.pyi +0 -0
  286. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/text_field.py +0 -0
  287. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/text_field.pyi +0 -0
  288. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/tooltip.py +0 -0
  289. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/components/tooltip.pyi +0 -0
  290. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/layout/__init__.py +0 -0
  291. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/layout/__init__.pyi +0 -0
  292. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/layout/base.py +0 -0
  293. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/layout/base.pyi +0 -0
  294. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/layout/box.py +0 -0
  295. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/layout/box.pyi +0 -0
  296. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/layout/center.py +0 -0
  297. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/layout/center.pyi +0 -0
  298. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/layout/container.py +0 -0
  299. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/layout/container.pyi +0 -0
  300. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/layout/flex.py +0 -0
  301. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/layout/flex.pyi +0 -0
  302. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/layout/grid.py +0 -0
  303. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/layout/grid.pyi +0 -0
  304. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/layout/list.py +0 -0
  305. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/layout/list.pyi +0 -0
  306. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/layout/section.py +0 -0
  307. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/layout/section.pyi +0 -0
  308. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/layout/spacer.py +0 -0
  309. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/layout/spacer.pyi +0 -0
  310. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/layout/stack.py +0 -0
  311. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/layout/stack.pyi +0 -0
  312. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/typography/__init__.py +0 -0
  313. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/typography/__init__.pyi +0 -0
  314. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/typography/base.py +0 -0
  315. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/typography/blockquote.py +0 -0
  316. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/typography/blockquote.pyi +0 -0
  317. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/typography/code.py +0 -0
  318. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/typography/code.pyi +0 -0
  319. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/typography/heading.py +0 -0
  320. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/typography/heading.pyi +0 -0
  321. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/typography/link.py +0 -0
  322. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/typography/link.pyi +0 -0
  323. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/typography/text.py +0 -0
  324. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/radix/themes/typography/text.pyi +0 -0
  325. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/react_player/__init__.py +0 -0
  326. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/react_player/audio.py +0 -0
  327. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/react_player/audio.pyi +0 -0
  328. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/react_player/react_player.py +0 -0
  329. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/react_player/react_player.pyi +0 -0
  330. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/react_player/video.py +0 -0
  331. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/react_player/video.pyi +0 -0
  332. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/react_router/__init__.py +0 -0
  333. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/react_router/dom.py +0 -0
  334. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/react_router/dom.pyi +0 -0
  335. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/recharts/__init__.py +0 -0
  336. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/recharts/__init__.pyi +0 -0
  337. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/recharts/cartesian.py +0 -0
  338. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/recharts/cartesian.pyi +0 -0
  339. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/recharts/charts.py +0 -0
  340. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/recharts/charts.pyi +0 -0
  341. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/recharts/general.py +0 -0
  342. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/recharts/general.pyi +0 -0
  343. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/recharts/polar.py +0 -0
  344. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/recharts/polar.pyi +0 -0
  345. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/recharts/recharts.pyi +0 -0
  346. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/sonner/__init__.py +0 -0
  347. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/tags/__init__.py +0 -0
  348. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/tags/cond_tag.py +0 -0
  349. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/tags/iter_tag.py +0 -0
  350. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/tags/match_tag.py +0 -0
  351. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/tags/tag.py +0 -0
  352. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/components/tags/tagless.py +0 -0
  353. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/constants/__init__.py +0 -0
  354. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/constants/colors.py +0 -0
  355. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/constants/compiler.py +0 -0
  356. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/constants/config.py +0 -0
  357. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/constants/custom_components.py +0 -0
  358. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/constants/event.py +0 -0
  359. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/constants/route.py +0 -0
  360. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/constants/utils.py +0 -0
  361. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/custom_components/__init__.py +0 -0
  362. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/environment.py +0 -0
  363. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/event.py +0 -0
  364. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/experimental/__init__.py +0 -0
  365. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/experimental/client_state.py +0 -0
  366. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/experimental/hooks.py +0 -0
  367. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/istate/__init__.py +0 -0
  368. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/istate/data.py +0 -0
  369. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/istate/dynamic.py +0 -0
  370. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/istate/proxy.py +0 -0
  371. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/istate/storage.py +0 -0
  372. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/istate/wrappers.py +0 -0
  373. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/middleware/__init__.py +0 -0
  374. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/middleware/hydrate_middleware.py +0 -0
  375. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/middleware/middleware.py +0 -0
  376. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/model.py +0 -0
  377. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/page.py +0 -0
  378. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/plugins/shared_tailwind.py +0 -0
  379. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/plugins/sitemap.py +0 -0
  380. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/plugins/tailwind_v3.py +0 -0
  381. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/plugins/tailwind_v4.py +0 -0
  382. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/py.typed +0 -0
  383. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/style.py +0 -0
  384. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/utils/__init__.py +0 -0
  385. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/utils/codespaces.py +0 -0
  386. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/utils/compat.py +0 -0
  387. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/utils/console.py +0 -0
  388. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/utils/decorator.py +0 -0
  389. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/utils/exceptions.py +0 -0
  390. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/utils/export.py +0 -0
  391. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/utils/format.py +0 -0
  392. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/utils/imports.py +0 -0
  393. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/utils/lazy_loader.py +0 -0
  394. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/utils/misc.py +0 -0
  395. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/utils/monitoring.py +0 -0
  396. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/utils/net.py +0 -0
  397. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/utils/path_ops.py +0 -0
  398. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/utils/processes.py +0 -0
  399. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/utils/pyi_generator.py +0 -0
  400. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/utils/redir.py +0 -0
  401. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/utils/registry.py +0 -0
  402. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/utils/serializers.py +0 -0
  403. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/utils/token_manager.py +0 -0
  404. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/utils/types.py +0 -0
  405. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/vars/__init__.py +0 -0
  406. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/vars/datetime.py +0 -0
  407. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/vars/dep_tracking.py +0 -0
  408. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/vars/function.py +0 -0
  409. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/vars/number.py +0 -0
  410. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/vars/object.py +0 -0
  411. {reflex-0.8.6a0 → reflex-0.8.7}/reflex/vars/sequence.py +0 -0
  412. {reflex-0.8.6a0 → reflex-0.8.7}/scripts/hatch_build.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: reflex
3
- Version: 0.8.6a0
3
+ Version: 0.8.7
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
@@ -30,7 +30,7 @@ Requires-Dist: pydantic<3.0,>=1.10.21
30
30
  Requires-Dist: python-multipart<1.0,>=0.0.20
31
31
  Requires-Dist: python-socketio<6.0,>=5.12.0
32
32
  Requires-Dist: redis<7.0,>=5.2.1
33
- Requires-Dist: reflex-hosting-cli>=0.1.53
33
+ Requires-Dist: reflex-hosting-cli>=0.1.54
34
34
  Requires-Dist: rich<15,>=13
35
35
  Requires-Dist: sqlmodel<0.1,>=0.0.24
36
36
  Requires-Dist: starlette>=0.47.0
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "reflex"
3
- version = "0.8.6a0"
3
+ version = "0.8.7"
4
4
  description = "Web apps in pure Python."
5
5
  license.text = "Apache-2.0"
6
6
  authors = [
@@ -32,7 +32,7 @@ dependencies = [
32
32
  "python-multipart >=0.0.20,<1.0",
33
33
  "python-socketio >=5.12.0,<6.0",
34
34
  "redis >=5.2.1,<7.0",
35
- "reflex-hosting-cli >=0.1.53",
35
+ "reflex-hosting-cli >=0.1.54",
36
36
  "rich >=13,<15",
37
37
  "sqlmodel >=0.0.24,<0.1",
38
38
  "starlette >=0.47.0",
@@ -233,7 +233,7 @@ fail_fast = true
233
233
 
234
234
  [[tool.pre-commit.repos]]
235
235
  repo = "https://github.com/astral-sh/ruff-pre-commit"
236
- rev = "v0.12.7"
236
+ rev = "v0.12.8"
237
237
  hooks = [
238
238
  { id = "ruff-format", args = [
239
239
  "reflex",
@@ -25,13 +25,13 @@ function alwaysUseReactDomServerNode() {
25
25
  }
26
26
 
27
27
  export default defineConfig((config) => ({
28
- base: "{{base}}",
29
28
  plugins: [
30
29
  alwaysUseReactDomServerNode(),
31
30
  reactRouter(),
32
31
  safariCacheBustPlugin(),
33
32
  ],
34
33
  build: {
34
+ assetsDir: "{{base}}assets".slice(1),
35
35
  rollupOptions: {
36
36
  jsx: {},
37
37
  output: {
@@ -46,6 +46,9 @@ export default defineConfig((config) => ({
46
46
  },
47
47
  },
48
48
  },
49
+ experimental: {
50
+ enableNativePlugin: false,
51
+ },
49
52
  server: {
50
53
  port: process.env.PORT,
51
54
  watch: {
@@ -2,7 +2,6 @@ import { route } from "@react-router/dev/routes";
2
2
  import { flatRoutes } from "@react-router/fs-routes";
3
3
 
4
4
  export default [
5
- route("404", "routes/[404]._index.jsx", { id: "404" }),
6
5
  ...(await flatRoutes({
7
6
  ignoredRouteFiles: ["routes/\\[404\\]._index.jsx"],
8
7
  })),
@@ -969,17 +969,7 @@ export const useEventLoop = (
969
969
  useEffect(() => {
970
970
  if (!sentHydrate.current) {
971
971
  queueEvents(
972
- initial_events().map((e) => ({
973
- ...e,
974
- router_data: {
975
- pathname: location.pathname,
976
- query: {
977
- ...Object.fromEntries(searchParams.entries()),
978
- ...params.current,
979
- },
980
- asPath: location.pathname + location.search,
981
- },
982
- })),
972
+ initial_events(),
983
973
  socket,
984
974
  true,
985
975
  navigate,
@@ -67,10 +67,6 @@ from reflex.components.core.banner import (
67
67
  connection_toaster,
68
68
  )
69
69
  from reflex.components.core.breakpoints import set_breakpoints
70
- from reflex.components.core.client_side_routing import (
71
- default_404_page,
72
- wait_for_client_redirect,
73
- )
74
70
  from reflex.components.core.sticky import sticky
75
71
  from reflex.components.core.upload import Upload, get_upload_dir
76
72
  from reflex.components.radix import themes
@@ -109,6 +105,8 @@ from reflex.utils import (
109
105
  console,
110
106
  exceptions,
111
107
  format,
108
+ frontend_skeleton,
109
+ js_runtimes,
112
110
  path_ops,
113
111
  prerequisites,
114
112
  types,
@@ -598,12 +596,13 @@ class App(MiddlewareMixin, LifespanMixin):
598
596
  """
599
597
  from reflex.vars.base import GLOBAL_CACHE
600
598
 
601
- # For py3.9 compatibility when redis is used, we MUST add any decorator pages
602
- # before compiling the app in a thread to avoid event loop error (REF-2172).
603
- self._apply_decorated_pages()
604
-
605
599
  self._compile(prerender_routes=is_prod_mode())
606
600
 
601
+ config = get_config()
602
+
603
+ for plugin in config.plugins:
604
+ plugin.post_compile(app=self)
605
+
607
606
  # We will not be making more vars, so we can clear the global cache to free up memory.
608
607
  GLOBAL_CACHE.clear()
609
608
 
@@ -772,8 +771,10 @@ class App(MiddlewareMixin, LifespanMixin):
772
771
 
773
772
  if route == constants.Page404.SLUG:
774
773
  if component is None:
775
- component = default_404_page
776
- component = wait_for_client_redirect(self._generate_component(component))
774
+ from reflex.components.el.elements import span
775
+
776
+ component = span("404: Page not found")
777
+ component = self._generate_component(component)
777
778
  title = title or constants.Page404.TITLE
778
779
  description = description or constants.Page404.DESCRIPTION
779
780
  image = image or constants.Page404.IMAGE
@@ -861,7 +862,7 @@ class App(MiddlewareMixin, LifespanMixin):
861
862
  """
862
863
  from reflex.route import get_router
863
864
 
864
- return get_router(list(self._unevaluated_pages))
865
+ return get_router(list(dict.fromkeys([*self._unevaluated_pages, *self._pages])))
865
866
 
866
867
  def get_load_events(self, path: str) -> list[IndividualEventType[()]]:
867
868
  """Get the load events for a route.
@@ -987,7 +988,7 @@ class App(MiddlewareMixin, LifespanMixin):
987
988
  continue
988
989
  _frontend_packages.append(package)
989
990
  page_imports.update(_frontend_packages)
990
- prerequisites.install_frontend_packages(page_imports, get_config())
991
+ js_runtimes.install_frontend_packages(page_imports, get_config())
991
992
 
992
993
  def _app_root(self, app_wrappers: dict[tuple[int, str], Component]) -> Component:
993
994
  for component in tuple(app_wrappers.values()):
@@ -1060,16 +1061,8 @@ class App(MiddlewareMixin, LifespanMixin):
1060
1061
  self.app_wraps[(0, "StickyBadge")] = lambda _: memoized_badge()
1061
1062
 
1062
1063
  def _apply_decorated_pages(self):
1063
- """Add @rx.page decorated pages to the app.
1064
-
1065
- This has to be done in the MainThread for py38 and py39 compatibility, so the
1066
- decorated pages are added to the app before the app is compiled (in a thread)
1067
- to workaround REF-2172.
1068
-
1069
- This can move back into `compile_` when py39 support is dropped.
1070
- """
1064
+ """Add @rx.page decorated pages to the app."""
1071
1065
  app_name = get_config().app_name
1072
- # Add the @rx.page decorated pages to collect on_load events.
1073
1066
  for render, kwargs in DECORATED_PAGES[app_name]:
1074
1067
  self.add_page(render, **kwargs)
1075
1068
 
@@ -1119,6 +1112,8 @@ class App(MiddlewareMixin, LifespanMixin):
1119
1112
  """
1120
1113
  from reflex.utils.exceptions import ReflexRuntimeError
1121
1114
 
1115
+ self._apply_decorated_pages()
1116
+
1122
1117
  self._pages = {}
1123
1118
 
1124
1119
  def get_compilation_time() -> str:
@@ -1315,7 +1310,9 @@ class App(MiddlewareMixin, LifespanMixin):
1315
1310
  self.head_components,
1316
1311
  html_lang=self.html_lang,
1317
1312
  html_custom_attrs=(
1318
- {**self.html_custom_attrs} if self.html_custom_attrs else {}
1313
+ {"suppressHydrationWarning": "true", **self.html_custom_attrs}
1314
+ if self.html_custom_attrs
1315
+ else {"suppressHydrationWarning": "true"}
1319
1316
  ),
1320
1317
  )
1321
1318
  )
@@ -1435,7 +1432,7 @@ class App(MiddlewareMixin, LifespanMixin):
1435
1432
  self._get_frontend_packages(all_imports)
1436
1433
 
1437
1434
  # Setup the react-router.config.js
1438
- prerequisites.update_react_router_config(
1435
+ frontend_skeleton.update_react_router_config(
1439
1436
  prerender_routes=prerender_routes,
1440
1437
  )
1441
1438
 
@@ -1926,6 +1923,13 @@ def upload(app: App):
1926
1923
  )
1927
1924
  )
1928
1925
 
1926
+ for file in files:
1927
+ if not isinstance(file, StarletteUploadFile):
1928
+ raise UploadValueError(
1929
+ "Uploaded file is not an UploadFile." + str(file)
1930
+ )
1931
+ await file.close()
1932
+
1929
1933
  event = Event(
1930
1934
  token=token,
1931
1935
  name=handler,
@@ -136,6 +136,8 @@ class ErrorBoundary(Component):
136
136
  height="100%",
137
137
  width="100%",
138
138
  position="absolute",
139
+ background_color="#fff",
140
+ color="#000",
139
141
  display="flex",
140
142
  align_items="center",
141
143
  justify_content="center",
@@ -37,7 +37,7 @@ from reflex.constants import (
37
37
  PageNames,
38
38
  )
39
39
  from reflex.constants.compiler import SpecialAttributes
40
- from reflex.constants.state import FRONTEND_EVENT_STATE
40
+ from reflex.constants.state import FRONTEND_EVENT_STATE, MEMO_MARKER
41
41
  from reflex.event import (
42
42
  EventCallback,
43
43
  EventChain,
@@ -2005,7 +2005,7 @@ class CustomComponent(Component):
2005
2005
 
2006
2006
  super()._post_init(
2007
2007
  event_triggers={
2008
- key: EventChain.create(
2008
+ key + MEMO_MARKER: EventChain.create(
2009
2009
  value=props[key],
2010
2010
  args_spec=get_args_spec(key),
2011
2011
  key=key,
@@ -2016,7 +2016,9 @@ class CustomComponent(Component):
2016
2016
  )
2017
2017
 
2018
2018
  to_camel_cased_props = {
2019
- format.to_camel_case(key) for key in props if key not in event_types
2019
+ format.to_camel_case(key + MEMO_MARKER)
2020
+ for key in props
2021
+ if key not in event_types
2020
2022
  }
2021
2023
  self.get_props = lambda: to_camel_cased_props # pyright: ignore [reportIncompatibleVariableOverride]
2022
2024
 
@@ -2031,7 +2033,7 @@ class CustomComponent(Component):
2031
2033
  if key not in props_types:
2032
2034
  continue
2033
2035
 
2034
- camel_cased_key = format.to_camel_case(key)
2036
+ camel_cased_key = format.to_camel_case(key + MEMO_MARKER)
2035
2037
 
2036
2038
  # Get the type based on the annotation.
2037
2039
  type_ = props_types[key]
@@ -6,7 +6,7 @@ from reflex.utils.imports import ImportVar
6
6
  from reflex.vars.base import LiteralVar, Var
7
7
  from reflex.vars.sequence import LiteralStringVar, StringVar
8
8
 
9
- LUCIDE_LIBRARY = "lucide-react@0.536.0"
9
+ LUCIDE_LIBRARY = "lucide-react@0.539.0"
10
10
 
11
11
 
12
12
  class LucideIconComponent(Component):
@@ -343,6 +343,7 @@ LUCIDE_ICON_LIST = [
343
343
  "brain_cog",
344
344
  "brain",
345
345
  "brick_wall_fire",
346
+ "brick_wall_shield",
346
347
  "brick_wall",
347
348
  "briefcase_business",
348
349
  "briefcase_conveyor_belt",
@@ -494,6 +495,7 @@ LUCIDE_ICON_LIST = [
494
495
  "circle_slash_2",
495
496
  "circle_slash",
496
497
  "circle_small",
498
+ "circle_star",
497
499
  "circle_stop",
498
500
  "circle_user_round",
499
501
  "circle_user",
@@ -950,6 +952,7 @@ LUCIDE_ICON_LIST = [
950
952
  "japanese_yen",
951
953
  "joystick",
952
954
  "kanban",
955
+ "kayak",
953
956
  "key_round",
954
957
  "key_square",
955
958
  "key",
@@ -11,7 +11,7 @@ from reflex.components.core.breakpoints import Breakpoints
11
11
  from reflex.event import EventType, PointerEventInfo
12
12
  from reflex.vars.base import Var
13
13
 
14
- LUCIDE_LIBRARY = "lucide-react@0.536.0"
14
+ LUCIDE_LIBRARY = "lucide-react@0.539.0"
15
15
 
16
16
  class LucideIconComponent(Component):
17
17
  @classmethod
@@ -408,6 +408,7 @@ LUCIDE_ICON_LIST = [
408
408
  "brain_cog",
409
409
  "brain",
410
410
  "brick_wall_fire",
411
+ "brick_wall_shield",
411
412
  "brick_wall",
412
413
  "briefcase_business",
413
414
  "briefcase_conveyor_belt",
@@ -559,6 +560,7 @@ LUCIDE_ICON_LIST = [
559
560
  "circle_slash_2",
560
561
  "circle_slash",
561
562
  "circle_small",
563
+ "circle_star",
562
564
  "circle_stop",
563
565
  "circle_user_round",
564
566
  "circle_user",
@@ -1015,6 +1017,7 @@ LUCIDE_ICON_LIST = [
1015
1017
  "japanese_yen",
1016
1018
  "joystick",
1017
1019
  "kanban",
1020
+ "kayak",
1018
1021
  "key_round",
1019
1022
  "key_square",
1020
1023
  "key",
@@ -72,7 +72,7 @@ class Plotly(NoSSRComponent):
72
72
 
73
73
  library = "react-plotly.js@2.6.0"
74
74
 
75
- lib_dependencies: list[str] = ["plotly.js@3.0.3"]
75
+ lib_dependencies: list[str] = ["plotly.js@3.1.0"]
76
76
 
77
77
  tag = "Plot"
78
78
 
@@ -303,7 +303,7 @@ class PlotlyBasic(Plotly):
303
303
 
304
304
  library = "react-plotly.js@2.6.0"
305
305
 
306
- lib_dependencies: list[str] = ["plotly.js-basic-dist-min@3.0.3"]
306
+ lib_dependencies: list[str] = ["plotly.js-basic-dist-min@3.1.0"]
307
307
 
308
308
  def add_imports(self) -> ImportDict | list[ImportDict]:
309
309
  """Add imports for the plotly basic component.
@@ -329,7 +329,7 @@ class PlotlyCartesian(Plotly):
329
329
 
330
330
  library = "react-plotly.js@2.6.0"
331
331
 
332
- lib_dependencies: list[str] = ["plotly.js-cartesian-dist-min@3.0.3"]
332
+ lib_dependencies: list[str] = ["plotly.js-cartesian-dist-min@3.1.0"]
333
333
 
334
334
  def add_imports(self) -> ImportDict | list[ImportDict]:
335
335
  """Add imports for the plotly cartesian component.
@@ -355,7 +355,7 @@ class PlotlyGeo(Plotly):
355
355
 
356
356
  library = "react-plotly.js@2.6.0"
357
357
 
358
- lib_dependencies: list[str] = ["plotly.js-geo-dist-min@3.0.3"]
358
+ lib_dependencies: list[str] = ["plotly.js-geo-dist-min@3.1.0"]
359
359
 
360
360
  def add_imports(self) -> ImportDict | list[ImportDict]:
361
361
  """Add imports for the plotly geo component.
@@ -381,7 +381,7 @@ class PlotlyGl3d(Plotly):
381
381
 
382
382
  library = "react-plotly.js@2.6.0"
383
383
 
384
- lib_dependencies: list[str] = ["plotly.js-gl3d-dist-min@3.0.3"]
384
+ lib_dependencies: list[str] = ["plotly.js-gl3d-dist-min@3.1.0"]
385
385
 
386
386
  def add_imports(self) -> ImportDict | list[ImportDict]:
387
387
  """Add imports for the plotly 3d component.
@@ -407,7 +407,7 @@ class PlotlyGl2d(Plotly):
407
407
 
408
408
  library = "react-plotly.js@2.6.0"
409
409
 
410
- lib_dependencies: list[str] = ["plotly.js-gl2d-dist-min@3.0.3"]
410
+ lib_dependencies: list[str] = ["plotly.js-gl2d-dist-min@3.1.0"]
411
411
 
412
412
  def add_imports(self) -> ImportDict | list[ImportDict]:
413
413
  """Add imports for the plotly 2d component.
@@ -433,7 +433,7 @@ class PlotlyMapbox(Plotly):
433
433
 
434
434
  library = "react-plotly.js@2.6.0"
435
435
 
436
- lib_dependencies: list[str] = ["plotly.js-mapbox-dist-min@3.0.3"]
436
+ lib_dependencies: list[str] = ["plotly.js-mapbox-dist-min@3.1.0"]
437
437
 
438
438
  def add_imports(self) -> ImportDict | list[ImportDict]:
439
439
  """Add imports for the plotly mapbox component.
@@ -459,7 +459,7 @@ class PlotlyFinance(Plotly):
459
459
 
460
460
  library = "react-plotly.js@2.6.0"
461
461
 
462
- lib_dependencies: list[str] = ["plotly.js-finance-dist-min@3.0.3"]
462
+ lib_dependencies: list[str] = ["plotly.js-finance-dist-min@3.1.0"]
463
463
 
464
464
  def add_imports(self) -> ImportDict | list[ImportDict]:
465
465
  """Add imports for the plotly finance component.
@@ -485,7 +485,7 @@ class PlotlyStrict(Plotly):
485
485
 
486
486
  library = "react-plotly.js@2.6.0"
487
487
 
488
- lib_dependencies: list[str] = ["plotly.js-strict-dist-min@3.0.3"]
488
+ lib_dependencies: list[str] = ["plotly.js-strict-dist-min@3.1.0"]
489
489
 
490
490
  def add_imports(self) -> ImportDict | list[ImportDict]:
491
491
  """Add imports for the plotly strict component.
@@ -8,7 +8,7 @@ from reflex.components.component import Component, MemoizationLeaf, NoSSRCompone
8
8
  class Recharts(Component):
9
9
  """A component that wraps a recharts lib."""
10
10
 
11
- library = "recharts@3.1.0"
11
+ library = "recharts@3.1.2"
12
12
 
13
13
  def _get_style(self) -> dict:
14
14
  return {"wrapperStyle": self.style}
@@ -17,7 +17,7 @@ class Recharts(Component):
17
17
  class RechartsCharts(NoSSRComponent, MemoizationLeaf):
18
18
  """A component that wraps a recharts lib."""
19
19
 
20
- library = "recharts@3.1.0"
20
+ library = "recharts@3.1.2"
21
21
 
22
22
 
23
23
  LiteralAnimationEasing = Literal["ease", "ease-in", "ease-out", "ease-in-out", "linear"]
@@ -238,7 +238,7 @@ class Toaster(Component):
238
238
 
239
239
  @staticmethod
240
240
  def send_toast(
241
- message: str | Var = "",
241
+ message: str | Var[str] = "",
242
242
  level: str | None = None,
243
243
  fallback_to_alert: bool = False,
244
244
  **props,
@@ -292,7 +292,7 @@ class Toaster(Component):
292
292
  return run_script(toast)
293
293
 
294
294
  @staticmethod
295
- def toast_info(message: str | Var = "", **kwargs: Any):
295
+ def toast_info(message: str | Var[str] = "", **kwargs: Any) -> EventSpec:
296
296
  """Display an info toast message.
297
297
 
298
298
  Args:
@@ -305,7 +305,7 @@ class Toaster(Component):
305
305
  return Toaster.send_toast(message, level="info", **kwargs)
306
306
 
307
307
  @staticmethod
308
- def toast_warning(message: str | Var = "", **kwargs: Any):
308
+ def toast_warning(message: str | Var[str] = "", **kwargs: Any) -> EventSpec:
309
309
  """Display a warning toast message.
310
310
 
311
311
  Args:
@@ -318,7 +318,7 @@ class Toaster(Component):
318
318
  return Toaster.send_toast(message, level="warning", **kwargs)
319
319
 
320
320
  @staticmethod
321
- def toast_error(message: str | Var = "", **kwargs: Any):
321
+ def toast_error(message: str | Var[str] = "", **kwargs: Any) -> EventSpec:
322
322
  """Display an error toast message.
323
323
 
324
324
  Args:
@@ -331,7 +331,7 @@ class Toaster(Component):
331
331
  return Toaster.send_toast(message, level="error", **kwargs)
332
332
 
333
333
  @staticmethod
334
- def toast_success(message: str | Var = "", **kwargs: Any):
334
+ def toast_success(message: str | Var[str] = "", **kwargs: Any) -> EventSpec:
335
335
  """Display a success toast message.
336
336
 
337
337
  Args:
@@ -344,7 +344,7 @@ class Toaster(Component):
344
344
  return Toaster.send_toast(message, level="success", **kwargs)
345
345
 
346
346
  @staticmethod
347
- def toast_loading(message: str | Var = "", **kwargs: Any):
347
+ def toast_loading(message: str | Var[str] = "", **kwargs: Any) -> EventSpec:
348
348
  """Display a loading toast message.
349
349
 
350
350
  Args:
@@ -357,7 +357,7 @@ class Toaster(Component):
357
357
  return Toaster.send_toast(message, level="loading", **kwargs)
358
358
 
359
359
  @staticmethod
360
- def toast_dismiss(id: Var | str | None = None):
360
+ def toast_dismiss(id: Var[str] | str | None = None) -> EventSpec:
361
361
  """Dismiss a toast.
362
362
 
363
363
  Args:
@@ -65,23 +65,23 @@ class Toaster(Component):
65
65
  def add_hooks(self) -> list[Var | str]: ...
66
66
  @staticmethod
67
67
  def send_toast(
68
- message: str | Var = "",
68
+ message: str | Var[str] = "",
69
69
  level: str | None = None,
70
70
  fallback_to_alert: bool = False,
71
71
  **props,
72
72
  ) -> EventSpec: ...
73
73
  @staticmethod
74
- def toast_info(message: str | Var = "", **kwargs: Any): ...
74
+ def toast_info(message: str | Var[str] = "", **kwargs: Any) -> EventSpec: ...
75
75
  @staticmethod
76
- def toast_warning(message: str | Var = "", **kwargs: Any): ...
76
+ def toast_warning(message: str | Var[str] = "", **kwargs: Any) -> EventSpec: ...
77
77
  @staticmethod
78
- def toast_error(message: str | Var = "", **kwargs: Any): ...
78
+ def toast_error(message: str | Var[str] = "", **kwargs: Any) -> EventSpec: ...
79
79
  @staticmethod
80
- def toast_success(message: str | Var = "", **kwargs: Any): ...
80
+ def toast_success(message: str | Var[str] = "", **kwargs: Any) -> EventSpec: ...
81
81
  @staticmethod
82
- def toast_loading(message: str | Var = "", **kwargs: Any): ...
82
+ def toast_loading(message: str | Var[str] = "", **kwargs: Any) -> EventSpec: ...
83
83
  @staticmethod
84
- def toast_dismiss(id: Var | str | None = None): ...
84
+ def toast_dismiss(id: Var[str] | str | None = None) -> EventSpec: ...
85
85
  @classmethod
86
86
  def create(
87
87
  cls,
@@ -188,7 +188,7 @@ class ToastNamespace(ComponentNamespace):
188
188
 
189
189
  @staticmethod
190
190
  def __call__(
191
- message: str | Var = "",
191
+ message: str | Var[str] | str = "",
192
192
  level: str | None = None,
193
193
  fallback_to_alert: bool = False,
194
194
  **props,
@@ -254,6 +254,9 @@ class BaseConfig:
254
254
  # List of fully qualified import paths of plugins to disable in the app (e.g. reflex.plugins.sitemap.SitemapPlugin).
255
255
  disable_plugins: list[str] = dataclasses.field(default_factory=list)
256
256
 
257
+ # Whether to skip plugin checks.
258
+ _skip_plugins_checks: bool = dataclasses.field(default=False, repr=False)
259
+
257
260
  _prefixes: ClassVar[list[str]] = ["REFLEX_"]
258
261
 
259
262
 
@@ -284,6 +287,9 @@ class Config(BaseConfig):
284
287
  See the [configuration](https://reflex.dev/docs/getting-started/configuration/) docs for more info.
285
288
  """
286
289
 
290
+ # Track whether the app name has already been validated for this Config instance.
291
+ _app_name_is_valid: bool = dataclasses.field(default=False, repr=False)
292
+
287
293
  def _post_init(self, **kwargs):
288
294
  """Post-initialization method to set up the config.
289
295
 
@@ -315,7 +321,8 @@ class Config(BaseConfig):
315
321
  setattr(self, key, env_value)
316
322
 
317
323
  # Add builtin plugins if not disabled.
318
- self._add_builtin_plugins()
324
+ if not self._skip_plugins_checks:
325
+ self._add_builtin_plugins()
319
326
 
320
327
  # Update default URLs if ports were set
321
328
  kwargs.update(env_kwargs)
@@ -531,7 +538,7 @@ def _get_config() -> Config:
531
538
  if not spec:
532
539
  # we need this condition to ensure that a ModuleNotFound error is not thrown when
533
540
  # running unit/integration tests or during `reflex init`.
534
- return Config(app_name="")
541
+ return Config(app_name="", _skip_plugins_checks=True)
535
542
  rxconfig = importlib.import_module(constants.Config.MODULE)
536
543
  return rxconfig.config
537
544
 
@@ -174,6 +174,8 @@ class ReactRouter(Javascript):
174
174
  rf"(?:{DEV_FRONTEND_LISTENING_REGEX}|{PROD_FRONTEND_LISTENING_REGEX})(.*)"
175
175
  )
176
176
 
177
+ SPA_FALLBACK = "__spa-fallback.html"
178
+
177
179
 
178
180
  # Color mode variables
179
181
  class ColorMode(SimpleNamespace):
@@ -14,7 +14,7 @@ class Bun(SimpleNamespace):
14
14
  """Bun constants."""
15
15
 
16
16
  # The Bun version.
17
- VERSION = "1.2.19"
17
+ VERSION = "1.2.20"
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.7.1"
78
+ default_version = "7.8.0"
79
79
  if (version := os.getenv("REACT_ROUTER_VERSION")) and version != default_version:
80
80
  from reflex.utils import console
81
81
 
@@ -106,7 +106,7 @@ class PackageJson(SimpleNamespace):
106
106
 
107
107
  DEV = "react-router dev --host"
108
108
  EXPORT = "react-router build"
109
- PROD = "serve ./build/client"
109
+ PROD = "sirv ./build/client --single 404.html --host"
110
110
 
111
111
  PATH = "package.json"
112
112
 
@@ -127,7 +127,7 @@ class PackageJson(SimpleNamespace):
127
127
  "react-router": cls._react_router_version,
128
128
  "react-router-dom": cls._react_router_version,
129
129
  "@react-router/node": cls._react_router_version,
130
- "serve": "14.2.4",
130
+ "sirv-cli": "3.0.1",
131
131
  "react": cls._react_version,
132
132
  "react-helmet": "6.1.0",
133
133
  "react-dom": cls._react_version,
@@ -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
- "vite": "npm:rolldown-vite@7.0.12",
146
+ "vite": "npm:rolldown-vite@7.1.2",
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
- "vite": "npm:rolldown-vite@7.0.12",
152
+ "vite": "npm:rolldown-vite@7.1.2",
153
153
  }
@@ -15,3 +15,4 @@ class StateManagerMode(str, Enum):
15
15
  FRONTEND_EVENT_STATE = "__reflex_internal_frontend_event_state"
16
16
 
17
17
  FIELD_MARKER = "_rx_state_"
18
+ MEMO_MARKER = "_rx_memo_"
@@ -15,7 +15,7 @@ import click
15
15
 
16
16
  from reflex import constants
17
17
  from reflex.constants import CustomComponents
18
- from reflex.utils import console
18
+ from reflex.utils import console, frontend_skeleton
19
19
 
20
20
 
21
21
  def set_loglevel(ctx: Any, self: Any, value: str | None):
@@ -328,7 +328,7 @@ def init(
328
328
  Raises:
329
329
  Exit: If the pyproject.toml already exists.
330
330
  """
331
- from reflex.utils import exec, prerequisites
331
+ from reflex.utils import exec
332
332
 
333
333
  if CustomComponents.PYPROJECT_TOML.exists():
334
334
  console.error(f"A {CustomComponents.PYPROJECT_TOML} already exists. Aborting.")
@@ -347,7 +347,7 @@ def init(
347
347
  _populate_demo_app(name_variants)
348
348
 
349
349
  # Initialize the .gitignore.
350
- prerequisites.initialize_gitignore(
350
+ frontend_skeleton.initialize_gitignore(
351
351
  gitignore_file=CustomComponents.FILE, files_to_ignore=CustomComponents.DEFAULTS
352
352
  )
353
353