reflex 0.8.16a1__tar.gz → 0.8.17__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 (394) hide show
  1. {reflex-0.8.16a1 → reflex-0.8.17}/PKG-INFO +40 -11
  2. {reflex-0.8.16a1 → reflex-0.8.17}/README.md +37 -8
  3. {reflex-0.8.16a1 → reflex-0.8.17}/pyproject.toml +4 -4
  4. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/web/utils/state.js +3 -1
  5. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/app.py +11 -3
  6. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/compiler/templates.py +12 -2
  7. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/error_boundary.py +60 -43
  8. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/window_events.py +30 -9
  9. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/window_events.pyi +6 -5
  10. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/lucide/icon.py +2 -1
  11. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/lucide/icon.pyi +2 -1
  12. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/plotly/plotly.py +9 -9
  13. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/recharts/recharts.py +2 -2
  14. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/constants/installer.py +2 -2
  15. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/environment.py +31 -0
  16. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/istate/manager/__init__.py +24 -2
  17. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/istate/manager/disk.py +15 -5
  18. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/istate/manager/memory.py +13 -4
  19. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/istate/manager/redis.py +27 -6
  20. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/istate/proxy.py +14 -12
  21. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/plugins/tailwind_v4.py +2 -2
  22. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/state.py +49 -11
  23. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/frontend_skeleton.py +2 -0
  24. {reflex-0.8.16a1 → reflex-0.8.17}/.gitignore +0 -0
  25. {reflex-0.8.16a1 → reflex-0.8.17}/LICENSE +0 -0
  26. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/apps/blank/assets/favicon.ico +0 -0
  27. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/apps/blank/code/__init__.py +0 -0
  28. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/apps/blank/code/blank.py +0 -0
  29. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/web/.gitignore +0 -0
  30. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/web/app/entry.client.js +0 -0
  31. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/web/app/routes.js +0 -0
  32. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +0 -0
  33. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/web/components/shiki/code.js +0 -0
  34. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/web/jsconfig.json +0 -0
  35. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/web/postcss.config.js +0 -0
  36. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/web/react-router.config.js +0 -0
  37. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/web/styles/__reflex_style_reset.css +0 -0
  38. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/web/utils/helpers/dataeditor.js +0 -0
  39. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/web/utils/helpers/debounce.js +0 -0
  40. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/web/utils/helpers/paste.js +0 -0
  41. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/web/utils/helpers/range.js +0 -0
  42. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/web/utils/helpers/throttle.js +0 -0
  43. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/web/utils/helpers/upload.js +0 -0
  44. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/web/utils/react-theme.js +0 -0
  45. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/.templates/web/vite-plugin-safari-cachebust.js +0 -0
  46. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/__init__.py +0 -0
  47. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/__init__.pyi +0 -0
  48. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/__main__.py +0 -0
  49. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/admin.py +0 -0
  50. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/app_mixins/__init__.py +0 -0
  51. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/app_mixins/lifespan.py +0 -0
  52. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/app_mixins/middleware.py +0 -0
  53. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/app_mixins/mixin.py +0 -0
  54. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/assets.py +0 -0
  55. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/base.py +0 -0
  56. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/compiler/__init__.py +0 -0
  57. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/compiler/compiler.py +0 -0
  58. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/compiler/utils.py +0 -0
  59. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/__init__.py +0 -0
  60. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/__init__.pyi +0 -0
  61. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/__init__.py +0 -0
  62. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/__init__.pyi +0 -0
  63. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/app_wrap.py +0 -0
  64. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/app_wrap.pyi +0 -0
  65. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/bare.py +0 -0
  66. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/body.py +0 -0
  67. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/body.pyi +0 -0
  68. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/document.py +0 -0
  69. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/document.pyi +0 -0
  70. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/error_boundary.pyi +0 -0
  71. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/fragment.py +0 -0
  72. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/fragment.pyi +0 -0
  73. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/link.py +0 -0
  74. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/link.pyi +0 -0
  75. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/meta.py +0 -0
  76. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/meta.pyi +0 -0
  77. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/script.py +0 -0
  78. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/script.pyi +0 -0
  79. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/strict_mode.py +0 -0
  80. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/base/strict_mode.pyi +0 -0
  81. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/component.py +0 -0
  82. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/__init__.py +0 -0
  83. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/__init__.pyi +0 -0
  84. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/auto_scroll.py +0 -0
  85. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/auto_scroll.pyi +0 -0
  86. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/banner.py +0 -0
  87. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/banner.pyi +0 -0
  88. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/breakpoints.py +0 -0
  89. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/clipboard.py +0 -0
  90. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/clipboard.pyi +0 -0
  91. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/colors.py +0 -0
  92. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/cond.py +0 -0
  93. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/debounce.py +0 -0
  94. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/debounce.pyi +0 -0
  95. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/foreach.py +0 -0
  96. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/helmet.py +0 -0
  97. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/helmet.pyi +0 -0
  98. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/html.py +0 -0
  99. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/html.pyi +0 -0
  100. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/layout/__init__.py +0 -0
  101. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/match.py +0 -0
  102. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/responsive.py +0 -0
  103. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/sticky.py +0 -0
  104. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/sticky.pyi +0 -0
  105. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/upload.py +0 -0
  106. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/core/upload.pyi +0 -0
  107. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/datadisplay/__init__.py +0 -0
  108. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/datadisplay/__init__.pyi +0 -0
  109. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/datadisplay/code.py +0 -0
  110. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/datadisplay/code.pyi +0 -0
  111. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/datadisplay/dataeditor.py +0 -0
  112. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/datadisplay/dataeditor.pyi +0 -0
  113. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/datadisplay/logo.py +0 -0
  114. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/datadisplay/shiki_code_block.py +0 -0
  115. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/datadisplay/shiki_code_block.pyi +0 -0
  116. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/dynamic.py +0 -0
  117. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/__init__.py +0 -0
  118. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/__init__.pyi +0 -0
  119. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/element.py +0 -0
  120. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/element.pyi +0 -0
  121. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/__init__.py +0 -0
  122. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/__init__.pyi +0 -0
  123. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/base.py +0 -0
  124. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/base.pyi +0 -0
  125. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/forms.py +0 -0
  126. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/forms.pyi +0 -0
  127. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/inline.py +0 -0
  128. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/inline.pyi +0 -0
  129. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/media.py +0 -0
  130. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/media.pyi +0 -0
  131. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/metadata.py +0 -0
  132. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/metadata.pyi +0 -0
  133. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/other.py +0 -0
  134. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/other.pyi +0 -0
  135. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/scripts.py +0 -0
  136. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/scripts.pyi +0 -0
  137. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/sectioning.py +0 -0
  138. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/sectioning.pyi +0 -0
  139. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/tables.py +0 -0
  140. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/tables.pyi +0 -0
  141. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/typography.py +0 -0
  142. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/el/elements/typography.pyi +0 -0
  143. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/field.py +0 -0
  144. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/gridjs/__init__.py +0 -0
  145. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/gridjs/datatable.py +0 -0
  146. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/gridjs/datatable.pyi +0 -0
  147. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/literals.py +0 -0
  148. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/lucide/__init__.py +0 -0
  149. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/markdown/__init__.py +0 -0
  150. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/markdown/markdown.py +0 -0
  151. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/markdown/markdown.pyi +0 -0
  152. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/moment/__init__.py +0 -0
  153. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/moment/moment.py +0 -0
  154. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/moment/moment.pyi +0 -0
  155. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/plotly/__init__.py +0 -0
  156. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/plotly/plotly.pyi +0 -0
  157. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/props.py +0 -0
  158. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/__init__.py +0 -0
  159. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/__init__.pyi +0 -0
  160. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/primitives/__init__.py +0 -0
  161. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/primitives/__init__.pyi +0 -0
  162. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/primitives/accordion.py +0 -0
  163. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/primitives/accordion.pyi +0 -0
  164. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/primitives/base.py +0 -0
  165. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/primitives/base.pyi +0 -0
  166. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/primitives/dialog.py +0 -0
  167. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/primitives/dialog.pyi +0 -0
  168. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/primitives/drawer.py +0 -0
  169. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/primitives/drawer.pyi +0 -0
  170. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/primitives/form.py +0 -0
  171. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/primitives/form.pyi +0 -0
  172. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/primitives/progress.py +0 -0
  173. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/primitives/progress.pyi +0 -0
  174. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/primitives/slider.py +0 -0
  175. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/primitives/slider.pyi +0 -0
  176. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/__init__.py +0 -0
  177. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/__init__.pyi +0 -0
  178. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/base.py +0 -0
  179. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/base.pyi +0 -0
  180. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/color_mode.py +0 -0
  181. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/color_mode.pyi +0 -0
  182. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/__init__.py +0 -0
  183. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/__init__.pyi +0 -0
  184. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/alert_dialog.py +0 -0
  185. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/alert_dialog.pyi +0 -0
  186. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/aspect_ratio.py +0 -0
  187. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/aspect_ratio.pyi +0 -0
  188. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/avatar.py +0 -0
  189. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/avatar.pyi +0 -0
  190. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/badge.py +0 -0
  191. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/badge.pyi +0 -0
  192. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/button.py +0 -0
  193. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/button.pyi +0 -0
  194. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/callout.py +0 -0
  195. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/callout.pyi +0 -0
  196. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/card.py +0 -0
  197. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/card.pyi +0 -0
  198. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/checkbox.py +0 -0
  199. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/checkbox.pyi +0 -0
  200. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/checkbox_cards.py +0 -0
  201. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/checkbox_cards.pyi +0 -0
  202. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/checkbox_group.py +0 -0
  203. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/checkbox_group.pyi +0 -0
  204. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/context_menu.py +0 -0
  205. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/context_menu.pyi +0 -0
  206. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/data_list.py +0 -0
  207. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/data_list.pyi +0 -0
  208. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/dialog.py +0 -0
  209. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/dialog.pyi +0 -0
  210. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/dropdown_menu.py +0 -0
  211. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/dropdown_menu.pyi +0 -0
  212. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/hover_card.py +0 -0
  213. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/hover_card.pyi +0 -0
  214. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/icon_button.py +0 -0
  215. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/icon_button.pyi +0 -0
  216. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/inset.py +0 -0
  217. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/inset.pyi +0 -0
  218. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/popover.py +0 -0
  219. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/popover.pyi +0 -0
  220. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/progress.py +0 -0
  221. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/progress.pyi +0 -0
  222. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/radio.py +0 -0
  223. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/radio.pyi +0 -0
  224. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/radio_cards.py +0 -0
  225. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/radio_cards.pyi +0 -0
  226. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/radio_group.py +0 -0
  227. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/radio_group.pyi +0 -0
  228. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/scroll_area.py +0 -0
  229. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/scroll_area.pyi +0 -0
  230. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/segmented_control.py +0 -0
  231. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/segmented_control.pyi +0 -0
  232. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/select.py +0 -0
  233. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/select.pyi +0 -0
  234. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/separator.py +0 -0
  235. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/separator.pyi +0 -0
  236. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/skeleton.py +0 -0
  237. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/skeleton.pyi +0 -0
  238. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/slider.py +0 -0
  239. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/slider.pyi +0 -0
  240. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/spinner.py +0 -0
  241. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/spinner.pyi +0 -0
  242. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/switch.py +0 -0
  243. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/switch.pyi +0 -0
  244. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/table.py +0 -0
  245. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/table.pyi +0 -0
  246. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/tabs.py +0 -0
  247. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/tabs.pyi +0 -0
  248. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/text_area.py +0 -0
  249. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/text_area.pyi +0 -0
  250. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/text_field.py +0 -0
  251. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/text_field.pyi +0 -0
  252. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/tooltip.py +0 -0
  253. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/components/tooltip.pyi +0 -0
  254. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/__init__.py +0 -0
  255. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/__init__.pyi +0 -0
  256. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/base.py +0 -0
  257. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/base.pyi +0 -0
  258. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/box.py +0 -0
  259. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/box.pyi +0 -0
  260. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/center.py +0 -0
  261. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/center.pyi +0 -0
  262. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/container.py +0 -0
  263. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/container.pyi +0 -0
  264. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/flex.py +0 -0
  265. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/flex.pyi +0 -0
  266. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/grid.py +0 -0
  267. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/grid.pyi +0 -0
  268. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/list.py +0 -0
  269. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/list.pyi +0 -0
  270. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/section.py +0 -0
  271. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/section.pyi +0 -0
  272. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/spacer.py +0 -0
  273. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/spacer.pyi +0 -0
  274. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/stack.py +0 -0
  275. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/layout/stack.pyi +0 -0
  276. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/typography/__init__.py +0 -0
  277. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/typography/__init__.pyi +0 -0
  278. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/typography/base.py +0 -0
  279. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/typography/blockquote.py +0 -0
  280. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/typography/blockquote.pyi +0 -0
  281. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/typography/code.py +0 -0
  282. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/typography/code.pyi +0 -0
  283. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/typography/heading.py +0 -0
  284. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/typography/heading.pyi +0 -0
  285. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/typography/link.py +0 -0
  286. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/typography/link.pyi +0 -0
  287. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/typography/text.py +0 -0
  288. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/radix/themes/typography/text.pyi +0 -0
  289. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/react_player/__init__.py +0 -0
  290. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/react_player/audio.py +0 -0
  291. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/react_player/audio.pyi +0 -0
  292. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/react_player/react_player.py +0 -0
  293. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/react_player/react_player.pyi +0 -0
  294. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/react_player/video.py +0 -0
  295. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/react_player/video.pyi +0 -0
  296. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/react_router/__init__.py +0 -0
  297. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/react_router/dom.py +0 -0
  298. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/react_router/dom.pyi +0 -0
  299. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/recharts/__init__.py +0 -0
  300. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/recharts/__init__.pyi +0 -0
  301. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/recharts/cartesian.py +0 -0
  302. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/recharts/cartesian.pyi +0 -0
  303. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/recharts/charts.py +0 -0
  304. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/recharts/charts.pyi +0 -0
  305. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/recharts/general.py +0 -0
  306. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/recharts/general.pyi +0 -0
  307. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/recharts/polar.py +0 -0
  308. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/recharts/polar.pyi +0 -0
  309. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/recharts/recharts.pyi +0 -0
  310. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/sonner/__init__.py +0 -0
  311. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/sonner/toast.py +0 -0
  312. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/sonner/toast.pyi +0 -0
  313. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/tags/__init__.py +0 -0
  314. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/tags/cond_tag.py +0 -0
  315. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/tags/iter_tag.py +0 -0
  316. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/tags/match_tag.py +0 -0
  317. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/tags/tag.py +0 -0
  318. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/components/tags/tagless.py +0 -0
  319. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/config.py +0 -0
  320. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/constants/__init__.py +0 -0
  321. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/constants/base.py +0 -0
  322. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/constants/colors.py +0 -0
  323. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/constants/compiler.py +0 -0
  324. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/constants/config.py +0 -0
  325. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/constants/custom_components.py +0 -0
  326. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/constants/event.py +0 -0
  327. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/constants/route.py +0 -0
  328. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/constants/state.py +0 -0
  329. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/constants/utils.py +0 -0
  330. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/custom_components/__init__.py +0 -0
  331. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/custom_components/custom_components.py +0 -0
  332. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/event.py +0 -0
  333. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/experimental/__init__.py +0 -0
  334. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/experimental/client_state.py +0 -0
  335. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/experimental/hooks.py +0 -0
  336. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/istate/__init__.py +0 -0
  337. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/istate/data.py +0 -0
  338. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/istate/dynamic.py +0 -0
  339. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/istate/storage.py +0 -0
  340. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/istate/wrappers.py +0 -0
  341. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/middleware/__init__.py +0 -0
  342. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/middleware/hydrate_middleware.py +0 -0
  343. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/middleware/middleware.py +0 -0
  344. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/model.py +0 -0
  345. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/page.py +0 -0
  346. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/plugins/__init__.py +0 -0
  347. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/plugins/_screenshot.py +0 -0
  348. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/plugins/base.py +0 -0
  349. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/plugins/shared_tailwind.py +0 -0
  350. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/plugins/sitemap.py +0 -0
  351. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/plugins/tailwind_v3.py +0 -0
  352. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/py.typed +0 -0
  353. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/reflex.py +0 -0
  354. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/route.py +0 -0
  355. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/style.py +0 -0
  356. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/testing.py +0 -0
  357. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/__init__.py +0 -0
  358. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/build.py +0 -0
  359. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/codespaces.py +0 -0
  360. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/compat.py +0 -0
  361. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/console.py +0 -0
  362. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/decorator.py +0 -0
  363. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/exceptions.py +0 -0
  364. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/exec.py +0 -0
  365. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/export.py +0 -0
  366. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/format.py +0 -0
  367. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/imports.py +0 -0
  368. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/js_runtimes.py +0 -0
  369. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/lazy_loader.py +0 -0
  370. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/misc.py +0 -0
  371. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/monitoring.py +0 -0
  372. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/net.py +0 -0
  373. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/path_ops.py +0 -0
  374. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/prerequisites.py +0 -0
  375. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/processes.py +0 -0
  376. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/pyi_generator.py +0 -0
  377. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/redir.py +0 -0
  378. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/registry.py +0 -0
  379. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/rename.py +0 -0
  380. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/serializers.py +0 -0
  381. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/telemetry.py +0 -0
  382. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/templates.py +0 -0
  383. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/token_manager.py +0 -0
  384. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/utils/types.py +0 -0
  385. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/vars/__init__.py +0 -0
  386. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/vars/base.py +0 -0
  387. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/vars/color.py +0 -0
  388. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/vars/datetime.py +0 -0
  389. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/vars/dep_tracking.py +0 -0
  390. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/vars/function.py +0 -0
  391. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/vars/number.py +0 -0
  392. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/vars/object.py +0 -0
  393. {reflex-0.8.16a1 → reflex-0.8.17}/reflex/vars/sequence.py +0 -0
  394. {reflex-0.8.16a1 → reflex-0.8.17}/scripts/hatch_build.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: reflex
3
- Version: 0.8.16a1
3
+ Version: 0.8.17
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
@@ -31,12 +31,12 @@ 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
33
  Requires-Dist: redis<7.0,>=5.2.1
34
- Requires-Dist: reflex-hosting-cli>=0.1.55
34
+ Requires-Dist: reflex-hosting-cli>=0.1.57
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
38
38
  Requires-Dist: typing-extensions>=4.13.0
39
- Requires-Dist: wrapt<2.0,>=1.17.0
39
+ Requires-Dist: wrapt<3.0,>=1.17.0
40
40
  Provides-Extra: db
41
41
  Requires-Dist: alembic<2.0,>=1.15.2; extra == 'db'
42
42
  Requires-Dist: pydantic<3.0,>=1.10.21; extra == 'db'
@@ -86,25 +86,50 @@ See our [architecture page](https://reflex.dev/blog/2024-03-21-reflex-architectu
86
86
 
87
87
  ## ⚙️ Installation
88
88
 
89
- Open a terminal and run (Requires Python 3.10+):
90
-
91
- ```bash
92
- pip install reflex
93
- ```
89
+ **Important:** We strongly recommend using a virtual environment to ensure the `reflex` command is available in your PATH.
94
90
 
95
91
  ## 🥳 Create your first app
96
92
 
97
- Installing `reflex` also installs the `reflex` command line tool.
93
+ ### 1. Create the project directory
98
94
 
99
- Test that the install was successful by creating a new project. (Replace `my_app_name` with your project name):
95
+ Replace `my_app_name` with your project name:
100
96
 
101
97
  ```bash
102
98
  mkdir my_app_name
103
99
  cd my_app_name
100
+ ```
101
+
102
+ ### 2. Set up a virtual environment
103
+
104
+ Create and activate virtual environment
105
+
106
+ ```bash
107
+ # On Windows:
108
+ python -m venv .venv
109
+ .venv\Scripts\activate
110
+
111
+ # On macOS/Linux:
112
+ python3 -m venv .venv
113
+ source .venv/bin/activate
114
+ ```
115
+
116
+ ### 3. Install Reflex
117
+
118
+ Reflex is available as a pip package (Requires Python 3.10+):
119
+
120
+ ```bash
121
+ pip install reflex
122
+ ```
123
+
124
+ ### 4. Initialize the project
125
+
126
+ This command initializes a template app in your new directory:
127
+
128
+ ```bash
104
129
  reflex init
105
130
  ```
106
131
 
107
- This command initializes a template app in your new directory.
132
+ ### 5. Run the app
108
133
 
109
134
  You can run this app in development mode:
110
135
 
@@ -116,6 +141,10 @@ You should see your app running at http://localhost:3000.
116
141
 
117
142
  Now you can modify the source code in `my_app_name/my_app_name.py`. Reflex has fast refreshes so you can see your changes instantly when you save your code.
118
143
 
144
+ ### Troubleshooting
145
+
146
+ If you installed Reflex without a virtual environment and the `reflex` command is not found, you can run commands using: `python3 -m reflex init` and `python3 -m reflex run`
147
+
119
148
  ## 🫧 Example App
120
149
 
121
150
  Let's go over an example: creating an image generation UI around [DALL·E](https://platform.openai.com/docs/guides/images/image-generation?context=node). For simplicity, we just call the [OpenAI API](https://platform.openai.com/docs/api-reference/authentication), but you could replace this with an ML model run locally.
@@ -39,25 +39,50 @@ See our [architecture page](https://reflex.dev/blog/2024-03-21-reflex-architectu
39
39
 
40
40
  ## ⚙️ Installation
41
41
 
42
- Open a terminal and run (Requires Python 3.10+):
43
-
44
- ```bash
45
- pip install reflex
46
- ```
42
+ **Important:** We strongly recommend using a virtual environment to ensure the `reflex` command is available in your PATH.
47
43
 
48
44
  ## 🥳 Create your first app
49
45
 
50
- Installing `reflex` also installs the `reflex` command line tool.
46
+ ### 1. Create the project directory
51
47
 
52
- Test that the install was successful by creating a new project. (Replace `my_app_name` with your project name):
48
+ Replace `my_app_name` with your project name:
53
49
 
54
50
  ```bash
55
51
  mkdir my_app_name
56
52
  cd my_app_name
53
+ ```
54
+
55
+ ### 2. Set up a virtual environment
56
+
57
+ Create and activate virtual environment
58
+
59
+ ```bash
60
+ # On Windows:
61
+ python -m venv .venv
62
+ .venv\Scripts\activate
63
+
64
+ # On macOS/Linux:
65
+ python3 -m venv .venv
66
+ source .venv/bin/activate
67
+ ```
68
+
69
+ ### 3. Install Reflex
70
+
71
+ Reflex is available as a pip package (Requires Python 3.10+):
72
+
73
+ ```bash
74
+ pip install reflex
75
+ ```
76
+
77
+ ### 4. Initialize the project
78
+
79
+ This command initializes a template app in your new directory:
80
+
81
+ ```bash
57
82
  reflex init
58
83
  ```
59
84
 
60
- This command initializes a template app in your new directory.
85
+ ### 5. Run the app
61
86
 
62
87
  You can run this app in development mode:
63
88
 
@@ -69,6 +94,10 @@ You should see your app running at http://localhost:3000.
69
94
 
70
95
  Now you can modify the source code in `my_app_name/my_app_name.py`. Reflex has fast refreshes so you can see your changes instantly when you save your code.
71
96
 
97
+ ### Troubleshooting
98
+
99
+ If you installed Reflex without a virtual environment and the `reflex` command is not found, you can run commands using: `python3 -m reflex init` and `python3 -m reflex run`
100
+
72
101
  ## 🫧 Example App
73
102
 
74
103
  Let's go over an example: creating an image generation UI around [DALL·E](https://platform.openai.com/docs/guides/images/image-generation?context=node). For simplicity, we just call the [OpenAI API](https://platform.openai.com/docs/api-reference/authentication), but you could replace this with an ML model run locally.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "reflex"
3
- version = "0.8.16a1"
3
+ version = "0.8.17"
4
4
  description = "Web apps in pure Python."
5
5
  license.text = "Apache-2.0"
6
6
  authors = [
@@ -31,12 +31,12 @@ dependencies = [
31
31
  "python-multipart >=0.0.20,<1.0",
32
32
  "python-socketio >=5.12.0,<6.0",
33
33
  "redis >=5.2.1,<7.0",
34
- "reflex-hosting-cli >=0.1.55",
34
+ "reflex-hosting-cli >=0.1.57",
35
35
  "rich >=13,<15",
36
36
  "sqlmodel >=0.0.27,<0.1",
37
37
  "starlette >=0.47.0",
38
38
  "typing_extensions >=4.13.0",
39
- "wrapt >=1.17.0,<2.0",
39
+ "wrapt >=1.17.0,<3.0",
40
40
  ]
41
41
 
42
42
  classifiers = [
@@ -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.0"
246
+ rev = "v0.14.1"
247
247
  hooks = [
248
248
  { id = "ruff-format", args = [
249
249
  "reflex",
@@ -665,7 +665,9 @@ export const connect = async (
665
665
  }
666
666
  }
667
667
  applyClientStorageDelta(client_storage, update.delta);
668
- event_processing = !update.final;
668
+ if (update.final !== null) {
669
+ event_processing = !update.final;
670
+ }
669
671
  if (update.events) {
670
672
  queueEvents(update.events, socket, false, navigate, params);
671
673
  }
@@ -1556,11 +1556,14 @@ class App(MiddlewareMixin, LifespanMixin):
1556
1556
  )
1557
1557
 
1558
1558
  @contextlib.asynccontextmanager
1559
- async def modify_state(self, token: str) -> AsyncIterator[BaseState]:
1559
+ async def modify_state(
1560
+ self, token: str, background: bool = False
1561
+ ) -> AsyncIterator[BaseState]:
1560
1562
  """Modify the state out of band.
1561
1563
 
1562
1564
  Args:
1563
1565
  token: The token to modify the state for.
1566
+ background: Whether the modification is happening in a background task.
1564
1567
 
1565
1568
  Yields:
1566
1569
  The state to modify.
@@ -1581,7 +1584,10 @@ class App(MiddlewareMixin, LifespanMixin):
1581
1584
  # When the state is modified reset dirty status and emit the delta to the frontend.
1582
1585
  state._clean()
1583
1586
  await self.event_namespace.emit_update(
1584
- update=StateUpdate(delta=delta),
1587
+ update=StateUpdate(
1588
+ delta=delta,
1589
+ final=True if not background else None,
1590
+ ),
1585
1591
  token=token,
1586
1592
  )
1587
1593
 
@@ -1758,7 +1764,9 @@ async def process(
1758
1764
  constants.RouteVar.CLIENT_IP: client_ip,
1759
1765
  })
1760
1766
  # Get the state for the session exclusively.
1761
- async with app.state_manager.modify_state(event.substate_token) as state:
1767
+ async with app.state_manager.modify_state(
1768
+ event.substate_token, event=event
1769
+ ) as state:
1762
1770
  # When this is a brand new instance of the state, signal the
1763
1771
  # frontend to reload before processing it.
1764
1772
  if (
@@ -4,7 +4,7 @@ from __future__ import annotations
4
4
 
5
5
  import json
6
6
  from collections.abc import Iterable, Mapping
7
- from typing import TYPE_CHECKING, Any
7
+ from typing import TYPE_CHECKING, Any, Literal
8
8
 
9
9
  from reflex import constants
10
10
  from reflex.constants import Hooks
@@ -492,13 +492,21 @@ def package_json_template(
492
492
  })
493
493
 
494
494
 
495
- def vite_config_template(base: str, hmr: bool, force_full_reload: bool):
495
+ def vite_config_template(
496
+ base: str,
497
+ hmr: bool,
498
+ force_full_reload: bool,
499
+ experimental_hmr: bool,
500
+ sourcemap: bool | Literal["inline", "hidden"],
501
+ ):
496
502
  """Template for vite.config.js.
497
503
 
498
504
  Args:
499
505
  base: The base path for the Vite config.
500
506
  hmr: Whether to enable hot module replacement.
501
507
  force_full_reload: Whether to force a full reload on changes.
508
+ experimental_hmr: Whether to enable experimental HMR features.
509
+ sourcemap: The sourcemap configuration.
502
510
 
503
511
  Returns:
504
512
  Rendered vite.config.js content as string.
@@ -550,6 +558,7 @@ export default defineConfig((config) => ({{
550
558
  ].concat({"[fullReload()]" if force_full_reload else "[]"}),
551
559
  build: {{
552
560
  assetsDir: "{base}assets".slice(1),
561
+ sourcemap: {"true" if sourcemap is True else "false" if sourcemap is False else repr(sourcemap)},
553
562
  rollupOptions: {{
554
563
  onwarn(warning, warn) {{
555
564
  if (warning.code === "EVAL" && warning.id && warning.id.endsWith("state.js")) return;
@@ -570,6 +579,7 @@ export default defineConfig((config) => ({{
570
579
  }},
571
580
  experimental: {{
572
581
  enableNativePlugin: false,
582
+ hmr: {"true" if experimental_hmr else "false"},
573
583
  }},
574
584
  server: {{
575
585
  port: process.env.PORT,
@@ -4,7 +4,7 @@ from __future__ import annotations
4
4
 
5
5
  from reflex.components.component import Component
6
6
  from reflex.components.datadisplay.logo import svg_logo
7
- from reflex.components.el import a, button, details, div, h2, hr, p, pre, summary
7
+ from reflex.components.el import a, button, div, h2, hr, p, pre, svg
8
8
  from reflex.event import EventHandler, set_clipboard
9
9
  from reflex.state import FrontendEventExceptionState
10
10
  from reflex.vars.base import Var
@@ -65,53 +65,67 @@ class ErrorBoundary(Component):
65
65
  div(
66
66
  div(
67
67
  div(
68
+ svg(
69
+ svg.circle(cx="12", cy="12", r="10"),
70
+ svg.path(d="M16 16s-1.5-2-4-2-4 2-4 2"),
71
+ svg.line(x1="9", x2="9.01", y1="9", y2="9"),
72
+ svg.line(x1="15", x2="15.01", y1="9", y2="9"),
73
+ xmlns="http://www.w3.org/2000/svg",
74
+ width="25vmin",
75
+ view_box="0 0 24 24",
76
+ class_name="lucide lucide-frown-icon lucide-frown",
77
+ custom_attrs={
78
+ "fill": "none",
79
+ "stroke": "currentColor",
80
+ "stroke-width": "2",
81
+ "stroke-linecap": "round",
82
+ "stroke-linejoin": "round",
83
+ },
84
+ ),
68
85
  h2(
69
86
  "An error occurred while rendering this page.",
70
- font_size="1.25rem",
87
+ font_size="5vmin",
71
88
  font_weight="bold",
72
89
  ),
73
- p(
74
- "This is an error with the application itself.",
75
- opacity="0.75",
76
- ),
77
- details(
78
- summary("Error message", padding="0.5rem"),
79
- div(
80
- div(
81
- pre(
82
- Var(_js_expr=_ERROR_DISPLAY),
83
- ),
84
- padding="0.5rem",
85
- width="fit-content",
86
- ),
87
- width="100%",
88
- max_height="50vh",
89
- overflow="auto",
90
- background="#000",
91
- color="#fff",
92
- border_radius="0.25rem",
93
- ),
94
- button(
95
- "Copy",
96
- on_click=set_clipboard(
97
- Var(_js_expr=_ERROR_DISPLAY)
98
- ),
99
- padding="0.35rem 0.75rem",
100
- margin="0.5rem",
101
- background="#fff",
102
- color="#000",
103
- border="1px solid #000",
104
- border_radius="0.25rem",
105
- font_weight="bold",
90
+ opacity="0.5",
91
+ display="flex",
92
+ gap="4vmin",
93
+ align_items="center",
94
+ ),
95
+ p(
96
+ "This is an error with the application itself. Refreshing the page might help.",
97
+ opacity="0.75",
98
+ margin_block="1rem",
99
+ ),
100
+ div(
101
+ div(
102
+ pre(
103
+ Var(_js_expr=_ERROR_DISPLAY),
106
104
  ),
105
+ padding="0.5rem",
106
+ width="fit-content",
107
107
  ),
108
- display="flex",
109
- flex_direction="column",
110
- gap="1rem",
111
- max_width="50ch",
112
- border="1px solid #888888",
113
- border_radius="0.25rem",
114
- padding="1rem",
108
+ width="100%",
109
+ background="color-mix(in srgb, currentColor 5%, transparent)",
110
+ max_height="15rem",
111
+ overflow="auto",
112
+ border_radius="0.4rem",
113
+ ),
114
+ button(
115
+ "Copy",
116
+ on_click=set_clipboard(Var(_js_expr=_ERROR_DISPLAY)),
117
+ padding="0.35rem 1.35rem",
118
+ margin_block="0.5rem",
119
+ margin_inline_start="auto",
120
+ background="color-mix(in srgb, currentColor 15%, transparent)",
121
+ border_radius="0.4rem",
122
+ width="fit-content",
123
+ _hover={
124
+ "background": "color-mix(in srgb, currentColor 25%, transparent)"
125
+ },
126
+ _active={
127
+ "background": "color-mix(in srgb, currentColor 35%, transparent)"
128
+ },
115
129
  ),
116
130
  hr(
117
131
  border_color="currentColor",
@@ -131,7 +145,10 @@ class ErrorBoundary(Component):
131
145
  ),
132
146
  display="flex",
133
147
  flex_direction="column",
134
- gap="1rem",
148
+ gap="0.5rem",
149
+ max_width="min(80ch, 90vw)",
150
+ border_radius="0.25rem",
151
+ padding="1rem",
135
152
  ),
136
153
  height="100%",
137
154
  width="100%",
@@ -1,7 +1,12 @@
1
1
  """Window event listener component for Reflex."""
2
2
 
3
+ from __future__ import annotations
4
+
5
+ from typing import Any, cast
6
+
3
7
  import reflex as rx
4
8
  from reflex.components.base.fragment import Fragment
9
+ from reflex.components.component import StatefulComponent, field
5
10
  from reflex.constants.compiler import Hooks
6
11
  from reflex.event import key_event, no_args_event_spec
7
12
  from reflex.vars.base import Var, VarData
@@ -61,6 +66,23 @@ class WindowEventListener(Fragment):
61
66
  on_popstate: rx.EventHandler[no_args_event_spec]
62
67
  on_storage: rx.EventHandler[_on_storage_spec]
63
68
 
69
+ hooks: list[str] = field(default_factory=list, is_javascript_property=False)
70
+
71
+ @classmethod
72
+ def create(cls, **props) -> WindowEventListener:
73
+ """Create a WindowEventListener component.
74
+
75
+ Args:
76
+ **props: The props to set on the component.
77
+
78
+ Returns:
79
+ The created component.
80
+ """
81
+ real_component = cast("WindowEventListener", super().create(**props))
82
+ hooks = StatefulComponent._fix_event_triggers(real_component)
83
+ real_component.hooks = hooks
84
+ return real_component
85
+
64
86
  def _exclude_props(self) -> list[str]:
65
87
  """Exclude event handler props from being passed to Fragment.
66
88
 
@@ -69,31 +91,30 @@ class WindowEventListener(Fragment):
69
91
  """
70
92
  return [*super()._exclude_props(), *self.event_triggers.keys()]
71
93
 
72
- def add_hooks(self) -> list[str | Var[str]]:
94
+ def add_hooks(self) -> list[str | Var[Any]]:
73
95
  """Add hooks to register window event listeners.
74
96
 
75
97
  Returns:
76
98
  The hooks to add to the component.
77
99
  """
78
- hooks = []
100
+ hooks: list[str | Var[Any]] = [*self.hooks]
79
101
 
80
102
  for prop_name, event_trigger in self.event_triggers.items():
81
103
  # Get JS event name: remove on_ prefix and underscores
82
104
  event_name = prop_name.removeprefix("on_").replace("_", "")
83
105
 
84
106
  hook_expr = f"""
85
- useEffect(() => {{
86
- if (typeof window === 'undefined') return;
87
-
88
- window.addEventListener('{event_name}', {event_trigger});
89
- return () => window.removeEventListener('{event_name}', {event_trigger});
90
- }}, []);
107
+ useEffect(() => {{
108
+ if (typeof window === 'undefined') return;
109
+ const fn = {Var.create(event_trigger)};
110
+ window.addEventListener('{event_name}', fn);
111
+ return () => window.removeEventListener('{event_name}', fn);
112
+ }}, []);
91
113
  """
92
114
 
93
115
  hooks.append(
94
116
  Var(
95
117
  hook_expr,
96
- _var_type="str",
97
118
  _var_data=VarData(position=Hooks.HookPosition.POST_TRIGGER),
98
119
  )
99
120
  )
@@ -12,11 +12,11 @@ from reflex.event import EventType, KeyInputInfo, PointerEventInfo
12
12
  from reflex.vars.base import Var
13
13
 
14
14
  class WindowEventListener(Fragment):
15
- def add_hooks(self) -> list[str | Var[str]]: ...
16
15
  @classmethod
17
16
  def create(
18
17
  cls,
19
18
  *children,
19
+ hooks: list[str] | None = None,
20
20
  style: Sequence[Mapping[str, Any]]
21
21
  | Mapping[str, Any]
22
22
  | Var[Mapping[str, Any]]
@@ -62,10 +62,9 @@ class WindowEventListener(Fragment):
62
62
  on_visibility_change: EventType[()] | EventType[bool] | None = None,
63
63
  **props,
64
64
  ) -> WindowEventListener:
65
- """Create the component.
65
+ """Create a WindowEventListener component.
66
66
 
67
67
  Args:
68
- *children: The children of the component.
69
68
  on_resize: Event handlers
70
69
  style: The style of the component.
71
70
  key: A unique key for the component.
@@ -73,10 +72,12 @@ class WindowEventListener(Fragment):
73
72
  ref: The Var to pass as the ref to the component.
74
73
  class_name: The class name for the component.
75
74
  custom_attrs: custom attribute
76
- **props: The props of the component.
75
+ **props: The props to set on the component.
77
76
 
78
77
  Returns:
79
- The component.
78
+ The created component.
80
79
  """
81
80
 
81
+ def add_hooks(self) -> list[str | Var[Any]]: ...
82
+
82
83
  window_event_listener = WindowEventListener.create
@@ -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.545.0"
9
+ LUCIDE_LIBRARY = "lucide-react@0.546.0"
10
10
 
11
11
 
12
12
  class LucideIconComponent(Component):
@@ -1115,6 +1115,7 @@ LUCIDE_ICON_LIST = [
1115
1115
  "minimize",
1116
1116
  "minus",
1117
1117
  "monitor_check",
1118
+ "monitor_cloud",
1118
1119
  "monitor_cog",
1119
1120
  "monitor_dot",
1120
1121
  "monitor_down",
@@ -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.545.0"
14
+ LUCIDE_LIBRARY = "lucide-react@0.546.0"
15
15
 
16
16
  class LucideIconComponent(Component):
17
17
  @classmethod
@@ -1176,6 +1176,7 @@ LUCIDE_ICON_LIST = [
1176
1176
  "minimize",
1177
1177
  "minus",
1178
1178
  "monitor_check",
1179
+ "monitor_cloud",
1179
1180
  "monitor_cog",
1180
1181
  "monitor_dot",
1181
1182
  "monitor_down",
@@ -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.1.1"]
75
+ lib_dependencies: list[str] = ["plotly.js@3.1.2"]
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.1.1"]
306
+ lib_dependencies: list[str] = ["plotly.js-basic-dist-min@3.1.2"]
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.1.1"]
332
+ lib_dependencies: list[str] = ["plotly.js-cartesian-dist-min@3.1.2"]
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.1.1"]
358
+ lib_dependencies: list[str] = ["plotly.js-geo-dist-min@3.1.2"]
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.1.1"]
384
+ lib_dependencies: list[str] = ["plotly.js-gl3d-dist-min@3.1.2"]
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.1.1"]
410
+ lib_dependencies: list[str] = ["plotly.js-gl2d-dist-min@3.1.2"]
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.1.1"]
436
+ lib_dependencies: list[str] = ["plotly.js-mapbox-dist-min@3.1.2"]
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.1.1"]
462
+ lib_dependencies: list[str] = ["plotly.js-finance-dist-min@3.1.2"]
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.1.1"]
488
+ lib_dependencies: list[str] = ["plotly.js-strict-dist-min@3.1.2"]
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.2.1"
11
+ library = "recharts@3.3.0"
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.2.1"
20
+ library = "recharts@3.3.0"
21
21
 
22
22
 
23
23
  LiteralAnimationEasing = Literal["ease", "ease-in", "ease-out", "ease-in-out", "linear"]