reflex 0.8.17__tar.gz → 0.8.18a1__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 (395) hide show
  1. {reflex-0.8.17 → reflex-0.8.18a1}/PKG-INFO +3 -3
  2. {reflex-0.8.17 → reflex-0.8.18a1}/pyproject.toml +5 -5
  3. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/app.py +35 -11
  4. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/lucide/icon.py +3 -1
  5. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/lucide/icon.pyi +3 -1
  6. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/constants/installer.py +1 -1
  7. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/istate/manager/redis.py +1 -1
  8. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/plugins/tailwind_v4.py +2 -2
  9. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/state.py +4 -6
  10. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/utils/prerequisites.py +4 -1
  11. reflex-0.8.18a1/reflex/utils/token_manager.py +478 -0
  12. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/utils/types.py +44 -12
  13. reflex-0.8.17/reflex/utils/token_manager.py +0 -225
  14. {reflex-0.8.17 → reflex-0.8.18a1}/.gitignore +0 -0
  15. {reflex-0.8.17 → reflex-0.8.18a1}/LICENSE +0 -0
  16. {reflex-0.8.17 → reflex-0.8.18a1}/README.md +0 -0
  17. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/.templates/apps/blank/assets/favicon.ico +0 -0
  18. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/.templates/apps/blank/code/__init__.py +0 -0
  19. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/.templates/apps/blank/code/blank.py +0 -0
  20. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/.templates/web/.gitignore +0 -0
  21. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/.templates/web/app/entry.client.js +0 -0
  22. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/.templates/web/app/routes.js +0 -0
  23. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +0 -0
  24. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/.templates/web/components/shiki/code.js +0 -0
  25. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/.templates/web/jsconfig.json +0 -0
  26. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/.templates/web/postcss.config.js +0 -0
  27. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/.templates/web/react-router.config.js +0 -0
  28. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/.templates/web/styles/__reflex_style_reset.css +0 -0
  29. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/.templates/web/utils/helpers/dataeditor.js +0 -0
  30. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/.templates/web/utils/helpers/debounce.js +0 -0
  31. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/.templates/web/utils/helpers/paste.js +0 -0
  32. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/.templates/web/utils/helpers/range.js +0 -0
  33. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/.templates/web/utils/helpers/throttle.js +0 -0
  34. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/.templates/web/utils/helpers/upload.js +0 -0
  35. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/.templates/web/utils/react-theme.js +0 -0
  36. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/.templates/web/utils/state.js +0 -0
  37. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/.templates/web/vite-plugin-safari-cachebust.js +0 -0
  38. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/__init__.py +0 -0
  39. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/__init__.pyi +0 -0
  40. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/__main__.py +0 -0
  41. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/admin.py +0 -0
  42. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/app_mixins/__init__.py +0 -0
  43. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/app_mixins/lifespan.py +0 -0
  44. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/app_mixins/middleware.py +0 -0
  45. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/app_mixins/mixin.py +0 -0
  46. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/assets.py +0 -0
  47. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/base.py +0 -0
  48. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/compiler/__init__.py +0 -0
  49. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/compiler/compiler.py +0 -0
  50. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/compiler/templates.py +0 -0
  51. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/compiler/utils.py +0 -0
  52. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/__init__.py +0 -0
  53. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/__init__.pyi +0 -0
  54. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/base/__init__.py +0 -0
  55. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/base/__init__.pyi +0 -0
  56. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/base/app_wrap.py +0 -0
  57. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/base/app_wrap.pyi +0 -0
  58. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/base/bare.py +0 -0
  59. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/base/body.py +0 -0
  60. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/base/body.pyi +0 -0
  61. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/base/document.py +0 -0
  62. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/base/document.pyi +0 -0
  63. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/base/error_boundary.py +0 -0
  64. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/base/error_boundary.pyi +0 -0
  65. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/base/fragment.py +0 -0
  66. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/base/fragment.pyi +0 -0
  67. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/base/link.py +0 -0
  68. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/base/link.pyi +0 -0
  69. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/base/meta.py +0 -0
  70. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/base/meta.pyi +0 -0
  71. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/base/script.py +0 -0
  72. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/base/script.pyi +0 -0
  73. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/base/strict_mode.py +0 -0
  74. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/base/strict_mode.pyi +0 -0
  75. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/component.py +0 -0
  76. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/core/__init__.py +0 -0
  77. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/core/__init__.pyi +0 -0
  78. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/core/auto_scroll.py +0 -0
  79. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/core/auto_scroll.pyi +0 -0
  80. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/core/banner.py +0 -0
  81. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/core/banner.pyi +0 -0
  82. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/core/breakpoints.py +0 -0
  83. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/core/clipboard.py +0 -0
  84. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/core/clipboard.pyi +0 -0
  85. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/core/colors.py +0 -0
  86. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/core/cond.py +0 -0
  87. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/core/debounce.py +0 -0
  88. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/core/debounce.pyi +0 -0
  89. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/core/foreach.py +0 -0
  90. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/core/helmet.py +0 -0
  91. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/core/helmet.pyi +0 -0
  92. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/core/html.py +0 -0
  93. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/core/html.pyi +0 -0
  94. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/core/layout/__init__.py +0 -0
  95. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/core/match.py +0 -0
  96. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/core/responsive.py +0 -0
  97. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/core/sticky.py +0 -0
  98. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/core/sticky.pyi +0 -0
  99. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/core/upload.py +0 -0
  100. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/core/upload.pyi +0 -0
  101. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/core/window_events.py +0 -0
  102. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/core/window_events.pyi +0 -0
  103. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/datadisplay/__init__.py +0 -0
  104. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/datadisplay/__init__.pyi +0 -0
  105. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/datadisplay/code.py +0 -0
  106. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/datadisplay/code.pyi +0 -0
  107. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/datadisplay/dataeditor.py +0 -0
  108. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/datadisplay/dataeditor.pyi +0 -0
  109. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/datadisplay/logo.py +0 -0
  110. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/datadisplay/shiki_code_block.py +0 -0
  111. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/datadisplay/shiki_code_block.pyi +0 -0
  112. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/dynamic.py +0 -0
  113. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/el/__init__.py +0 -0
  114. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/el/__init__.pyi +0 -0
  115. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/el/element.py +0 -0
  116. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/el/element.pyi +0 -0
  117. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/el/elements/__init__.py +0 -0
  118. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/el/elements/__init__.pyi +0 -0
  119. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/el/elements/base.py +0 -0
  120. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/el/elements/base.pyi +0 -0
  121. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/el/elements/forms.py +0 -0
  122. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/el/elements/forms.pyi +0 -0
  123. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/el/elements/inline.py +0 -0
  124. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/el/elements/inline.pyi +0 -0
  125. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/el/elements/media.py +0 -0
  126. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/el/elements/media.pyi +0 -0
  127. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/el/elements/metadata.py +0 -0
  128. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/el/elements/metadata.pyi +0 -0
  129. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/el/elements/other.py +0 -0
  130. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/el/elements/other.pyi +0 -0
  131. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/el/elements/scripts.py +0 -0
  132. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/el/elements/scripts.pyi +0 -0
  133. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/el/elements/sectioning.py +0 -0
  134. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/el/elements/sectioning.pyi +0 -0
  135. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/el/elements/tables.py +0 -0
  136. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/el/elements/tables.pyi +0 -0
  137. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/el/elements/typography.py +0 -0
  138. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/el/elements/typography.pyi +0 -0
  139. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/field.py +0 -0
  140. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/gridjs/__init__.py +0 -0
  141. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/gridjs/datatable.py +0 -0
  142. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/gridjs/datatable.pyi +0 -0
  143. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/literals.py +0 -0
  144. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/lucide/__init__.py +0 -0
  145. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/markdown/__init__.py +0 -0
  146. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/markdown/markdown.py +0 -0
  147. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/markdown/markdown.pyi +0 -0
  148. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/moment/__init__.py +0 -0
  149. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/moment/moment.py +0 -0
  150. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/moment/moment.pyi +0 -0
  151. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/plotly/__init__.py +0 -0
  152. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/plotly/plotly.py +0 -0
  153. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/plotly/plotly.pyi +0 -0
  154. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/props.py +0 -0
  155. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/__init__.py +0 -0
  156. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/__init__.pyi +0 -0
  157. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/primitives/__init__.py +0 -0
  158. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/primitives/__init__.pyi +0 -0
  159. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/primitives/accordion.py +0 -0
  160. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/primitives/accordion.pyi +0 -0
  161. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/primitives/base.py +0 -0
  162. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/primitives/base.pyi +0 -0
  163. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/primitives/dialog.py +0 -0
  164. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/primitives/dialog.pyi +0 -0
  165. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/primitives/drawer.py +0 -0
  166. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/primitives/drawer.pyi +0 -0
  167. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/primitives/form.py +0 -0
  168. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/primitives/form.pyi +0 -0
  169. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/primitives/progress.py +0 -0
  170. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/primitives/progress.pyi +0 -0
  171. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/primitives/slider.py +0 -0
  172. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/primitives/slider.pyi +0 -0
  173. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/__init__.py +0 -0
  174. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/__init__.pyi +0 -0
  175. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/base.py +0 -0
  176. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/base.pyi +0 -0
  177. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/color_mode.py +0 -0
  178. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/color_mode.pyi +0 -0
  179. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/__init__.py +0 -0
  180. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/__init__.pyi +0 -0
  181. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/alert_dialog.py +0 -0
  182. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/alert_dialog.pyi +0 -0
  183. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/aspect_ratio.py +0 -0
  184. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/aspect_ratio.pyi +0 -0
  185. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/avatar.py +0 -0
  186. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/avatar.pyi +0 -0
  187. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/badge.py +0 -0
  188. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/badge.pyi +0 -0
  189. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/button.py +0 -0
  190. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/button.pyi +0 -0
  191. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/callout.py +0 -0
  192. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/callout.pyi +0 -0
  193. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/card.py +0 -0
  194. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/card.pyi +0 -0
  195. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/checkbox.py +0 -0
  196. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/checkbox.pyi +0 -0
  197. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/checkbox_cards.py +0 -0
  198. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/checkbox_cards.pyi +0 -0
  199. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/checkbox_group.py +0 -0
  200. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/checkbox_group.pyi +0 -0
  201. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/context_menu.py +0 -0
  202. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/context_menu.pyi +0 -0
  203. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/data_list.py +0 -0
  204. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/data_list.pyi +0 -0
  205. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/dialog.py +0 -0
  206. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/dialog.pyi +0 -0
  207. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/dropdown_menu.py +0 -0
  208. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/dropdown_menu.pyi +0 -0
  209. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/hover_card.py +0 -0
  210. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/hover_card.pyi +0 -0
  211. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/icon_button.py +0 -0
  212. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/icon_button.pyi +0 -0
  213. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/inset.py +0 -0
  214. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/inset.pyi +0 -0
  215. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/popover.py +0 -0
  216. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/popover.pyi +0 -0
  217. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/progress.py +0 -0
  218. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/progress.pyi +0 -0
  219. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/radio.py +0 -0
  220. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/radio.pyi +0 -0
  221. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/radio_cards.py +0 -0
  222. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/radio_cards.pyi +0 -0
  223. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/radio_group.py +0 -0
  224. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/radio_group.pyi +0 -0
  225. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/scroll_area.py +0 -0
  226. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/scroll_area.pyi +0 -0
  227. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/segmented_control.py +0 -0
  228. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/segmented_control.pyi +0 -0
  229. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/select.py +0 -0
  230. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/select.pyi +0 -0
  231. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/separator.py +0 -0
  232. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/separator.pyi +0 -0
  233. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/skeleton.py +0 -0
  234. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/skeleton.pyi +0 -0
  235. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/slider.py +0 -0
  236. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/slider.pyi +0 -0
  237. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/spinner.py +0 -0
  238. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/spinner.pyi +0 -0
  239. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/switch.py +0 -0
  240. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/switch.pyi +0 -0
  241. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/table.py +0 -0
  242. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/table.pyi +0 -0
  243. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/tabs.py +0 -0
  244. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/tabs.pyi +0 -0
  245. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/text_area.py +0 -0
  246. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/text_area.pyi +0 -0
  247. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/text_field.py +0 -0
  248. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/text_field.pyi +0 -0
  249. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/tooltip.py +0 -0
  250. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/components/tooltip.pyi +0 -0
  251. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/layout/__init__.py +0 -0
  252. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/layout/__init__.pyi +0 -0
  253. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/layout/base.py +0 -0
  254. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/layout/base.pyi +0 -0
  255. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/layout/box.py +0 -0
  256. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/layout/box.pyi +0 -0
  257. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/layout/center.py +0 -0
  258. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/layout/center.pyi +0 -0
  259. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/layout/container.py +0 -0
  260. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/layout/container.pyi +0 -0
  261. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/layout/flex.py +0 -0
  262. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/layout/flex.pyi +0 -0
  263. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/layout/grid.py +0 -0
  264. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/layout/grid.pyi +0 -0
  265. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/layout/list.py +0 -0
  266. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/layout/list.pyi +0 -0
  267. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/layout/section.py +0 -0
  268. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/layout/section.pyi +0 -0
  269. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/layout/spacer.py +0 -0
  270. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/layout/spacer.pyi +0 -0
  271. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/layout/stack.py +0 -0
  272. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/layout/stack.pyi +0 -0
  273. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/typography/__init__.py +0 -0
  274. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/typography/__init__.pyi +0 -0
  275. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/typography/base.py +0 -0
  276. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/typography/blockquote.py +0 -0
  277. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/typography/blockquote.pyi +0 -0
  278. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/typography/code.py +0 -0
  279. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/typography/code.pyi +0 -0
  280. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/typography/heading.py +0 -0
  281. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/typography/heading.pyi +0 -0
  282. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/typography/link.py +0 -0
  283. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/typography/link.pyi +0 -0
  284. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/typography/text.py +0 -0
  285. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/radix/themes/typography/text.pyi +0 -0
  286. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/react_player/__init__.py +0 -0
  287. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/react_player/audio.py +0 -0
  288. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/react_player/audio.pyi +0 -0
  289. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/react_player/react_player.py +0 -0
  290. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/react_player/react_player.pyi +0 -0
  291. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/react_player/video.py +0 -0
  292. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/react_player/video.pyi +0 -0
  293. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/react_router/__init__.py +0 -0
  294. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/react_router/dom.py +0 -0
  295. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/react_router/dom.pyi +0 -0
  296. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/recharts/__init__.py +0 -0
  297. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/recharts/__init__.pyi +0 -0
  298. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/recharts/cartesian.py +0 -0
  299. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/recharts/cartesian.pyi +0 -0
  300. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/recharts/charts.py +0 -0
  301. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/recharts/charts.pyi +0 -0
  302. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/recharts/general.py +0 -0
  303. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/recharts/general.pyi +0 -0
  304. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/recharts/polar.py +0 -0
  305. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/recharts/polar.pyi +0 -0
  306. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/recharts/recharts.py +0 -0
  307. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/recharts/recharts.pyi +0 -0
  308. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/sonner/__init__.py +0 -0
  309. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/sonner/toast.py +0 -0
  310. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/sonner/toast.pyi +0 -0
  311. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/tags/__init__.py +0 -0
  312. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/tags/cond_tag.py +0 -0
  313. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/tags/iter_tag.py +0 -0
  314. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/tags/match_tag.py +0 -0
  315. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/tags/tag.py +0 -0
  316. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/components/tags/tagless.py +0 -0
  317. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/config.py +0 -0
  318. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/constants/__init__.py +0 -0
  319. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/constants/base.py +0 -0
  320. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/constants/colors.py +0 -0
  321. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/constants/compiler.py +0 -0
  322. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/constants/config.py +0 -0
  323. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/constants/custom_components.py +0 -0
  324. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/constants/event.py +0 -0
  325. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/constants/route.py +0 -0
  326. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/constants/state.py +0 -0
  327. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/constants/utils.py +0 -0
  328. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/custom_components/__init__.py +0 -0
  329. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/custom_components/custom_components.py +0 -0
  330. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/environment.py +0 -0
  331. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/event.py +0 -0
  332. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/experimental/__init__.py +0 -0
  333. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/experimental/client_state.py +0 -0
  334. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/experimental/hooks.py +0 -0
  335. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/istate/__init__.py +0 -0
  336. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/istate/data.py +0 -0
  337. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/istate/dynamic.py +0 -0
  338. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/istate/manager/__init__.py +0 -0
  339. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/istate/manager/disk.py +0 -0
  340. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/istate/manager/memory.py +0 -0
  341. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/istate/proxy.py +0 -0
  342. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/istate/storage.py +0 -0
  343. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/istate/wrappers.py +0 -0
  344. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/middleware/__init__.py +0 -0
  345. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/middleware/hydrate_middleware.py +0 -0
  346. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/middleware/middleware.py +0 -0
  347. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/model.py +0 -0
  348. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/page.py +0 -0
  349. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/plugins/__init__.py +0 -0
  350. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/plugins/_screenshot.py +0 -0
  351. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/plugins/base.py +0 -0
  352. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/plugins/shared_tailwind.py +0 -0
  353. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/plugins/sitemap.py +0 -0
  354. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/plugins/tailwind_v3.py +0 -0
  355. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/py.typed +0 -0
  356. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/reflex.py +0 -0
  357. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/route.py +0 -0
  358. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/style.py +0 -0
  359. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/testing.py +0 -0
  360. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/utils/__init__.py +0 -0
  361. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/utils/build.py +0 -0
  362. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/utils/codespaces.py +0 -0
  363. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/utils/compat.py +0 -0
  364. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/utils/console.py +0 -0
  365. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/utils/decorator.py +0 -0
  366. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/utils/exceptions.py +0 -0
  367. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/utils/exec.py +0 -0
  368. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/utils/export.py +0 -0
  369. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/utils/format.py +0 -0
  370. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/utils/frontend_skeleton.py +0 -0
  371. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/utils/imports.py +0 -0
  372. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/utils/js_runtimes.py +0 -0
  373. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/utils/lazy_loader.py +0 -0
  374. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/utils/misc.py +0 -0
  375. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/utils/monitoring.py +0 -0
  376. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/utils/net.py +0 -0
  377. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/utils/path_ops.py +0 -0
  378. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/utils/processes.py +0 -0
  379. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/utils/pyi_generator.py +0 -0
  380. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/utils/redir.py +0 -0
  381. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/utils/registry.py +0 -0
  382. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/utils/rename.py +0 -0
  383. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/utils/serializers.py +0 -0
  384. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/utils/telemetry.py +0 -0
  385. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/utils/templates.py +0 -0
  386. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/vars/__init__.py +0 -0
  387. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/vars/base.py +0 -0
  388. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/vars/color.py +0 -0
  389. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/vars/datetime.py +0 -0
  390. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/vars/dep_tracking.py +0 -0
  391. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/vars/function.py +0 -0
  392. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/vars/number.py +0 -0
  393. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/vars/object.py +0 -0
  394. {reflex-0.8.17 → reflex-0.8.18a1}/reflex/vars/sequence.py +0 -0
  395. {reflex-0.8.17 → reflex-0.8.18a1}/scripts/hatch_build.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: reflex
3
- Version: 0.8.17
3
+ Version: 0.8.18a1
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,8 +30,8 @@ Requires-Dist: psutil<8.0,>=7.0.0; sys_platform == 'win32'
30
30
  Requires-Dist: pydantic<3.0,>=1.10.21
31
31
  Requires-Dist: python-multipart<1.0,>=0.0.20
32
32
  Requires-Dist: python-socketio<6.0,>=5.12.0
33
- Requires-Dist: redis<7.0,>=5.2.1
34
- Requires-Dist: reflex-hosting-cli>=0.1.57
33
+ Requires-Dist: redis<8.0,>=5.2.1
34
+ Requires-Dist: reflex-hosting-cli>=0.1.58
35
35
  Requires-Dist: rich<15,>=13
36
36
  Requires-Dist: sqlmodel<0.1,>=0.0.27
37
37
  Requires-Dist: starlette>=0.47.0
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "reflex"
3
- version = "0.8.17"
3
+ version = "0.8.18a1"
4
4
  description = "Web apps in pure Python."
5
5
  license.text = "Apache-2.0"
6
6
  authors = [
@@ -30,8 +30,8 @@ dependencies = [
30
30
  "pydantic >=1.10.21,<3.0",
31
31
  "python-multipart >=0.0.20,<1.0",
32
32
  "python-socketio >=5.12.0,<6.0",
33
- "redis >=5.2.1,<7.0",
34
- "reflex-hosting-cli >=0.1.57",
33
+ "redis >=5.2.1,<8.0",
34
+ "reflex-hosting-cli >=0.1.58",
35
35
  "rich >=13,<15",
36
36
  "sqlmodel >=0.0.27,<0.1",
37
37
  "starlette >=0.47.0",
@@ -243,7 +243,7 @@ fail_fast = true
243
243
 
244
244
  [[tool.pre-commit.repos]]
245
245
  repo = "https://github.com/astral-sh/ruff-pre-commit"
246
- rev = "v0.14.1"
246
+ rev = "v0.14.2"
247
247
  hooks = [
248
248
  { id = "ruff-format", args = [
249
249
  "reflex",
@@ -275,7 +275,7 @@ hooks = [
275
275
 
276
276
  [[tool.pre-commit.repos]]
277
277
  repo = "https://github.com/RobertCraigie/pyright-python"
278
- rev = "v1.1.406"
278
+ rev = "v1.1.407"
279
279
  hooks = [{ id = "pyright", args = ["reflex", "tests"], language = "system" }]
280
280
 
281
281
  [[tool.pre-commit.repos]]
@@ -120,7 +120,7 @@ from reflex.utils.exec import (
120
120
  )
121
121
  from reflex.utils.imports import ImportVar
122
122
  from reflex.utils.misc import run_in_thread
123
- from reflex.utils.token_manager import TokenManager
123
+ from reflex.utils.token_manager import RedisTokenManager, TokenManager
124
124
  from reflex.utils.types import ASGIApp, Message, Receive, Scope, Send
125
125
 
126
126
  if TYPE_CHECKING:
@@ -2033,11 +2033,13 @@ class EventNamespace(AsyncNamespace):
2033
2033
  self._token_manager = TokenManager.create()
2034
2034
 
2035
2035
  @property
2036
- def token_to_sid(self) -> dict[str, str]:
2036
+ def token_to_sid(self) -> Mapping[str, str]:
2037
2037
  """Get token to SID mapping for backward compatibility.
2038
2038
 
2039
+ Note: this mapping is read-only.
2040
+
2039
2041
  Returns:
2040
- The token to SID mapping dict.
2042
+ The token to SID mapping.
2041
2043
  """
2042
2044
  # For backward compatibility, expose the underlying dict
2043
2045
  return self._token_manager.token_to_sid
@@ -2059,6 +2061,9 @@ class EventNamespace(AsyncNamespace):
2059
2061
  sid: The Socket.IO session id.
2060
2062
  environ: The request information, including HTTP headers.
2061
2063
  """
2064
+ if isinstance(self._token_manager, RedisTokenManager):
2065
+ # Make sure this instance is watching for updates from other instances.
2066
+ self._token_manager.ensure_lost_and_found_task(self.emit_update)
2062
2067
  query_params = urllib.parse.parse_qs(environ.get("QUERY_STRING", ""))
2063
2068
  token_list = query_params.get("token", [])
2064
2069
  if token_list:
@@ -2072,11 +2077,14 @@ class EventNamespace(AsyncNamespace):
2072
2077
  f"Frontend version {subprotocol} for session {sid} does not match the backend version {constants.Reflex.VERSION}."
2073
2078
  )
2074
2079
 
2075
- def on_disconnect(self, sid: str):
2080
+ def on_disconnect(self, sid: str) -> asyncio.Task | None:
2076
2081
  """Event for when the websocket disconnects.
2077
2082
 
2078
2083
  Args:
2079
2084
  sid: The Socket.IO session id.
2085
+
2086
+ Returns:
2087
+ An asyncio Task for cleaning up the token, or None.
2080
2088
  """
2081
2089
  # Get token before cleaning up
2082
2090
  disconnect_token = self.sid_to_token.get(sid)
@@ -2091,6 +2099,8 @@ class EventNamespace(AsyncNamespace):
2091
2099
  lambda t: t.exception()
2092
2100
  and console.error(f"Token cleanup error: {t.exception()}")
2093
2101
  )
2102
+ return task
2103
+ return None
2094
2104
 
2095
2105
  async def emit_update(self, update: StateUpdate, token: str) -> None:
2096
2106
  """Emit an update to the client.
@@ -2100,16 +2110,30 @@ class EventNamespace(AsyncNamespace):
2100
2110
  token: The client token (tab) associated with the event.
2101
2111
  """
2102
2112
  client_token, _ = _split_substate_key(token)
2103
- sid = self.token_to_sid.get(client_token)
2104
- if sid is None:
2105
- # If the sid is None, we are not connected to a client. Prevent sending
2106
- # updates to all clients.
2107
- console.warn(f"Attempting to send delta to disconnected client {token!r}")
2113
+ socket_record = self._token_manager.token_to_socket.get(client_token)
2114
+ if (
2115
+ socket_record is None
2116
+ or socket_record.instance_id != self._token_manager.instance_id
2117
+ ):
2118
+ if isinstance(self._token_manager, RedisTokenManager):
2119
+ # The socket belongs to another instance of the app, send it to the lost and found.
2120
+ if not await self._token_manager.emit_lost_and_found(
2121
+ client_token, update
2122
+ ):
2123
+ console.warn(
2124
+ f"Failed to send delta to lost and found for client {token!r}"
2125
+ )
2126
+ else:
2127
+ # If the socket record is None, we are not connected to a client. Prevent sending
2128
+ # updates to all clients.
2129
+ console.warn(
2130
+ f"Attempting to send delta to disconnected client {token!r}"
2131
+ )
2108
2132
  return
2109
2133
  # Creating a task prevents the update from being blocked behind other coroutines.
2110
2134
  await asyncio.create_task(
2111
- self.emit(str(constants.SocketEvent.EVENT), update, to=sid),
2112
- name=f"reflex_emit_event|{token}|{sid}|{time.time()}",
2135
+ self.emit(str(constants.SocketEvent.EVENT), update, to=socket_record.sid),
2136
+ name=f"reflex_emit_event|{token}|{socket_record.sid}|{time.time()}",
2113
2137
  )
2114
2138
 
2115
2139
  async def on_event(self, sid: str, data: Any):
@@ -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.546.0"
9
+ LUCIDE_LIBRARY = "lucide-react@0.548.0"
10
10
 
11
11
 
12
12
  class LucideIconComponent(Component):
@@ -286,6 +286,7 @@ LUCIDE_ICON_LIST = [
286
286
  "binoculars",
287
287
  "biohazard",
288
288
  "bird",
289
+ "birdhouse",
289
290
  "bitcoin",
290
291
  "blend",
291
292
  "blinds",
@@ -828,6 +829,7 @@ LUCIDE_ICON_LIST = [
828
829
  "gallery_vertical_end",
829
830
  "gallery_vertical",
830
831
  "gamepad_2",
832
+ "gamepad_directional",
831
833
  "gamepad",
832
834
  "gantt_chart",
833
835
  "gauge",
@@ -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.546.0"
14
+ LUCIDE_LIBRARY = "lucide-react@0.548.0"
15
15
 
16
16
  class LucideIconComponent(Component):
17
17
  @classmethod
@@ -347,6 +347,7 @@ LUCIDE_ICON_LIST = [
347
347
  "binoculars",
348
348
  "biohazard",
349
349
  "bird",
350
+ "birdhouse",
350
351
  "bitcoin",
351
352
  "blend",
352
353
  "blinds",
@@ -889,6 +890,7 @@ LUCIDE_ICON_LIST = [
889
890
  "gallery_vertical_end",
890
891
  "gallery_vertical",
891
892
  "gamepad_2",
893
+ "gamepad_directional",
892
894
  "gamepad",
893
895
  "gantt_chart",
894
896
  "gauge",
@@ -14,7 +14,7 @@ class Bun(SimpleNamespace):
14
14
  """Bun constants."""
15
15
 
16
16
  # The Bun version.
17
- VERSION = "1.3.0"
17
+ VERSION = "1.3.1"
18
18
 
19
19
  # Min Bun Version
20
20
  MIN_VERSION = "1.3.0"
@@ -67,6 +67,7 @@ class StateManagerRedis(StateManager):
67
67
  # The keyspace subscription string when redis is waiting for lock to be released.
68
68
  _redis_notify_keyspace_events: str = dataclasses.field(
69
69
  default="K" # Enable keyspace notifications (target a particular key)
70
+ "$" # For String commands (like setting keys)
70
71
  "g" # For generic commands (DEL, EXPIRE, etc)
71
72
  "x" # For expired events
72
73
  "e" # For evicted events (i.e. maxmemory exceeded)
@@ -76,7 +77,6 @@ class StateManagerRedis(StateManager):
76
77
  _redis_keyspace_lock_release_events: set[bytes] = dataclasses.field(
77
78
  default_factory=lambda: {
78
79
  b"del",
79
- b"expire",
80
80
  b"expired",
81
81
  b"evicted",
82
82
  }
@@ -17,7 +17,7 @@ class Constants(SimpleNamespace):
17
17
  """Tailwind constants."""
18
18
 
19
19
  # The Tailwindcss version
20
- VERSION = "tailwindcss@4.1.15"
20
+ VERSION = "tailwindcss@4.1.16"
21
21
  # The Tailwind config.
22
22
  CONFIG = "tailwind.config.js"
23
23
  # Default Tailwind content paths
@@ -156,7 +156,7 @@ class TailwindV4Plugin(TailwindPlugin):
156
156
  return [
157
157
  *super().get_frontend_development_dependencies(**context),
158
158
  Constants.VERSION,
159
- "@tailwindcss/postcss@4.1.15",
159
+ "@tailwindcss/postcss@4.1.16",
160
160
  ]
161
161
 
162
162
  def pre_compile(self, **context):
@@ -2189,14 +2189,12 @@ class BaseState(EvenMoreBasicBaseState):
2189
2189
  async def __aenter__(self) -> BaseState:
2190
2190
  """Enter the async context manager protocol.
2191
2191
 
2192
- This should not be used for the State class, but exists for
2193
- type-compatibility with StateProxy.
2192
+ This is a no-op for the State class and mainly used in background-tasks/StateProxy.
2194
2193
 
2195
- Raises:
2196
- TypeError: always, because async contextmanager protocol is only supported for background task.
2194
+ Returns:
2195
+ The unmodified state (self)
2197
2196
  """
2198
- msg = "Only background task should use `async with self` to modify state."
2199
- raise TypeError(msg)
2197
+ return self
2200
2198
 
2201
2199
  async def __aexit__(self, *exc_info: Any) -> None:
2202
2200
  """Exit the async context manager protocol.
@@ -5,6 +5,7 @@ from __future__ import annotations
5
5
  import contextlib
6
6
  import importlib
7
7
  import importlib.metadata
8
+ import inspect
8
9
  import json
9
10
  import random
10
11
  import re
@@ -435,7 +436,9 @@ async def get_redis_status() -> dict[str, bool | None]:
435
436
  status = True
436
437
  redis_client = get_redis()
437
438
  if redis_client is not None:
438
- await redis_client.ping()
439
+ ping_command = redis_client.ping()
440
+ if inspect.isawaitable(ping_command):
441
+ await ping_command
439
442
  else:
440
443
  status = None
441
444
  except RedisError: