reflex 0.7.1a3__tar.gz → 0.7.2__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 (457) hide show
  1. {reflex-0.7.1a3 → reflex-0.7.2}/PKG-INFO +3 -6
  2. {reflex-0.7.1a3 → reflex-0.7.2}/README.md +2 -5
  3. {reflex-0.7.1a3 → reflex-0.7.2}/pyproject.toml +1 -1
  4. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/jinja/web/utils/context.js.jinja2 +8 -8
  5. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +3 -3
  6. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/web/utils/state.js +18 -18
  7. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/admin.py +1 -2
  8. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/app.py +53 -50
  9. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/app_mixins/lifespan.py +2 -2
  10. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/app_mixins/middleware.py +1 -2
  11. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/assets.py +1 -2
  12. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/base.py +2 -2
  13. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/compiler/compiler.py +51 -16
  14. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/compiler/utils.py +4 -13
  15. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/base/app_wrap.pyi +7 -7
  16. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/base/bare.py +3 -3
  17. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/base/body.pyi +7 -7
  18. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/base/document.py +1 -3
  19. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/base/document.pyi +32 -32
  20. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/base/error_boundary.py +2 -4
  21. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/base/error_boundary.pyi +11 -13
  22. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/base/fragment.pyi +7 -7
  23. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/base/head.pyi +13 -13
  24. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/base/link.pyi +22 -22
  25. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/base/meta.py +5 -7
  26. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/base/meta.pyi +40 -40
  27. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/base/script.pyi +11 -14
  28. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/base/strict_mode.pyi +7 -7
  29. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/component.py +188 -113
  30. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/core/auto_scroll.py +8 -1
  31. reflex-0.7.2/reflex/components/core/auto_scroll.pyi +257 -0
  32. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/core/banner.py +2 -4
  33. reflex-0.7.2/reflex/components/core/banner.pyi +701 -0
  34. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/core/breakpoints.py +5 -5
  35. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/core/client_side_routing.pyi +14 -14
  36. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/core/clipboard.py +4 -4
  37. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/core/clipboard.pyi +12 -14
  38. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/core/cond.py +17 -25
  39. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/core/debounce.py +3 -3
  40. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/core/debounce.pyi +14 -14
  41. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/core/foreach.py +7 -2
  42. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/core/html.py +1 -3
  43. reflex-0.7.2/reflex/components/core/html.pyi +258 -0
  44. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/core/match.py +15 -19
  45. reflex-0.7.2/reflex/components/core/sticky.pyi +1085 -0
  46. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/core/upload.py +4 -4
  47. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/core/upload.pyi +62 -62
  48. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/datadisplay/code.py +6 -6
  49. reflex-0.7.2/reflex/components/datadisplay/code.pyi +1617 -0
  50. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/datadisplay/dataeditor.py +49 -49
  51. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/datadisplay/dataeditor.pyi +95 -123
  52. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/datadisplay/logo.py +1 -3
  53. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/datadisplay/shiki_code_block.py +8 -10
  54. reflex-0.7.2/reflex/components/datadisplay/shiki_code_block.pyi +2190 -0
  55. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/el/element.pyi +7 -7
  56. reflex-0.7.2/reflex/components/el/elements/base.pyi +329 -0
  57. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/el/elements/forms.py +24 -24
  58. reflex-0.7.2/reflex/components/el/elements/forms.pyi +3533 -0
  59. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/el/elements/inline.py +4 -4
  60. reflex-0.7.2/reflex/components/el/elements/inline.pyi +6822 -0
  61. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/el/elements/media.py +47 -47
  62. reflex-0.7.2/reflex/components/el/elements/media.pyi +6360 -0
  63. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/el/elements/metadata.py +1 -3
  64. reflex-0.7.2/reflex/components/el/elements/metadata.pyi +1127 -0
  65. reflex-0.7.2/reflex/components/el/elements/other.pyi +1706 -0
  66. reflex-0.7.2/reflex/components/el/elements/scripts.pyi +778 -0
  67. reflex-0.7.2/reflex/components/el/elements/sectioning.pyi +3628 -0
  68. reflex-0.7.2/reflex/components/el/elements/tables.pyi +2455 -0
  69. reflex-0.7.2/reflex/components/el/elements/typography.pyi +3647 -0
  70. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/gridjs/datatable.py +7 -7
  71. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/gridjs/datatable.pyi +19 -19
  72. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/lucide/icon.pyi +21 -21
  73. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/markdown/markdown.py +2 -2
  74. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/markdown/markdown.pyi +9 -9
  75. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/moment/moment.py +11 -12
  76. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/moment/moment.pyi +44 -47
  77. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/next/base.pyi +7 -7
  78. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/next/image.py +3 -3
  79. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/next/image.pyi +19 -21
  80. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/next/link.pyi +9 -9
  81. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/next/video.py +1 -3
  82. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/next/video.pyi +9 -9
  83. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/plotly/plotly.py +22 -45
  84. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/plotly/plotly.pyi +164 -164
  85. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/primitives/accordion.py +14 -14
  86. reflex-0.7.2/reflex/components/radix/primitives/accordion.pyi +802 -0
  87. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/primitives/base.py +1 -3
  88. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/primitives/base.pyi +15 -15
  89. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/primitives/drawer.py +3 -3
  90. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/primitives/drawer.pyi +110 -116
  91. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/primitives/form.py +1 -1
  92. reflex-0.7.2/reflex/components/radix/primitives/form.pyi +1236 -0
  93. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/primitives/progress.py +6 -6
  94. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/primitives/progress.pyi +225 -243
  95. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/primitives/slider.py +6 -6
  96. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/primitives/slider.pyi +52 -55
  97. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/base.py +3 -6
  98. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/base.pyi +197 -303
  99. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/color_mode.py +5 -5
  100. reflex-0.7.2/reflex/components/radix/themes/color_mode.pyi +563 -0
  101. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/alert_dialog.pyi +229 -262
  102. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/aspect_ratio.py +1 -3
  103. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/aspect_ratio.pyi +8 -8
  104. reflex-0.7.2/reflex/components/radix/themes/components/avatar.pyi +146 -0
  105. reflex-0.7.2/reflex/components/radix/themes/components/badge.pyi +334 -0
  106. reflex-0.7.2/reflex/components/radix/themes/components/button.pyi +366 -0
  107. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/callout.py +2 -2
  108. reflex-0.7.2/reflex/components/radix/themes/components/callout.pyi +1457 -0
  109. reflex-0.7.2/reflex/components/radix/themes/components/card.pyi +273 -0
  110. reflex-0.7.2/reflex/components/radix/themes/components/checkbox.pyi +425 -0
  111. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/checkbox_cards.py +3 -7
  112. reflex-0.7.2/reflex/components/radix/themes/components/checkbox_cards.pyi +213 -0
  113. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/checkbox_group.py +2 -2
  114. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/checkbox_group.pyi +83 -96
  115. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/context_menu.py +18 -15
  116. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/context_menu.pyi +408 -458
  117. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/data_list.pyi +122 -147
  118. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/dialog.pyi +231 -264
  119. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/dropdown_menu.py +16 -13
  120. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/dropdown_menu.pyi +223 -246
  121. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/hover_card.py +2 -2
  122. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/hover_card.pyi +237 -282
  123. reflex-0.7.2/reflex/components/radix/themes/components/icon_button.pyi +369 -0
  124. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/inset.py +8 -8
  125. reflex-0.7.2/reflex/components/radix/themes/components/inset.pyi +319 -0
  126. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/popover.py +2 -2
  127. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/popover.pyi +229 -271
  128. reflex-0.7.2/reflex/components/radix/themes/components/progress.pyi +144 -0
  129. reflex-0.7.2/reflex/components/radix/themes/components/radio.pyi +135 -0
  130. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/radio_cards.py +4 -8
  131. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/radio_cards.pyi +117 -154
  132. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/radio_group.py +3 -3
  133. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/radio_group.pyi +250 -291
  134. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/scroll_area.pyi +14 -20
  135. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/segmented_control.py +6 -6
  136. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/segmented_control.pyi +89 -108
  137. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/select.py +7 -7
  138. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/select.pyi +376 -444
  139. reflex-0.7.2/reflex/components/radix/themes/components/separator.pyi +143 -0
  140. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/skeleton.pyi +32 -26
  141. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/slider.py +8 -8
  142. reflex-0.7.2/reflex/components/radix/themes/components/slider.pyi +184 -0
  143. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/spinner.pyi +12 -19
  144. reflex-0.7.2/reflex/components/radix/themes/components/switch.pyi +157 -0
  145. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/table.py +9 -9
  146. reflex-0.7.2/reflex/components/radix/themes/components/table.pyi +1934 -0
  147. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/tabs.py +4 -4
  148. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/tabs.pyi +120 -132
  149. reflex-0.7.2/reflex/components/radix/themes/components/text_area.pyi +390 -0
  150. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/text_field.py +2 -2
  151. reflex-0.7.2/reflex/components/radix/themes/components/text_field.pyi +903 -0
  152. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/tooltip.py +6 -6
  153. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/tooltip.pyi +34 -43
  154. reflex-0.7.2/reflex/components/radix/themes/layout/base.pyi +158 -0
  155. reflex-0.7.2/reflex/components/radix/themes/layout/box.pyi +258 -0
  156. reflex-0.7.2/reflex/components/radix/themes/layout/center.pyi +307 -0
  157. reflex-0.7.2/reflex/components/radix/themes/layout/container.pyi +246 -0
  158. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/layout/flex.py +2 -2
  159. reflex-0.7.2/reflex/components/radix/themes/layout/flex.pyi +310 -0
  160. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/layout/grid.py +2 -2
  161. reflex-0.7.2/reflex/components/radix/themes/layout/grid.pyi +333 -0
  162. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/layout/list.py +2 -2
  163. reflex-0.7.2/reflex/components/radix/themes/layout/list.pyi +1020 -0
  164. reflex-0.7.2/reflex/components/radix/themes/layout/section.pyi +266 -0
  165. reflex-0.7.2/reflex/components/radix/themes/layout/spacer.pyi +307 -0
  166. reflex-0.7.2/reflex/components/radix/themes/layout/stack.pyi +833 -0
  167. reflex-0.7.2/reflex/components/radix/themes/typography/blockquote.pyi +339 -0
  168. reflex-0.7.2/reflex/components/radix/themes/typography/code.pyi +342 -0
  169. reflex-0.7.2/reflex/components/radix/themes/typography/heading.pyi +358 -0
  170. reflex-0.7.2/reflex/components/radix/themes/typography/link.pyi +404 -0
  171. reflex-0.7.2/reflex/components/radix/themes/typography/text.pyi +2170 -0
  172. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/react_player/audio.pyi +20 -22
  173. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/react_player/react_player.pyi +19 -19
  174. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/react_player/video.pyi +20 -22
  175. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/recharts/cartesian.py +100 -97
  176. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/recharts/cartesian.pyi +891 -1007
  177. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/recharts/charts.py +42 -42
  178. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/recharts/charts.pyi +212 -249
  179. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/recharts/general.py +22 -21
  180. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/recharts/general.pyi +198 -223
  181. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/recharts/polar.py +42 -45
  182. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/recharts/polar.pyi +254 -288
  183. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/recharts/recharts.pyi +13 -13
  184. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/sonner/toast.py +20 -20
  185. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/sonner/toast.pyi +58 -61
  186. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/suneditor/editor.py +9 -9
  187. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/suneditor/editor.pyi +78 -83
  188. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/tags/cond_tag.py +2 -2
  189. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/tags/iter_tag.py +10 -14
  190. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/tags/match_tag.py +2 -2
  191. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/tags/tag.py +10 -10
  192. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/config.py +36 -35
  193. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/constants/__init__.py +56 -53
  194. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/custom_components/custom_components.py +6 -7
  195. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/event.py +38 -42
  196. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/experimental/client_state.py +2 -4
  197. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/experimental/layout.py +2 -2
  198. reflex-0.7.2/reflex/experimental/layout.pyi +793 -0
  199. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/istate/data.py +4 -5
  200. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/middleware/hydrate_middleware.py +2 -2
  201. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/middleware/middleware.py +2 -2
  202. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/model.py +3 -5
  203. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/page.py +2 -2
  204. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/reflex.py +9 -10
  205. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/state.py +77 -49
  206. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/style.py +11 -5
  207. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/testing.py +21 -24
  208. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/utils/console.py +1 -1
  209. reflex-0.7.2/reflex/utils/decorator.py +50 -0
  210. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/utils/exec.py +6 -11
  211. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/utils/export.py +2 -3
  212. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/utils/format.py +4 -4
  213. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/utils/imports.py +12 -12
  214. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/utils/prerequisites.py +35 -84
  215. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/utils/processes.py +5 -5
  216. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/utils/pyi_generator.py +33 -22
  217. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/utils/serializers.py +60 -15
  218. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/utils/types.py +237 -56
  219. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/vars/base.py +122 -72
  220. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/vars/datetime.py +2 -2
  221. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/vars/function.py +52 -55
  222. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/vars/number.py +59 -5
  223. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/vars/object.py +57 -26
  224. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/vars/sequence.py +983 -958
  225. reflex-0.7.1a3/reflex/components/core/auto_scroll.pyi +0 -284
  226. reflex-0.7.1a3/reflex/components/core/banner.pyi +0 -755
  227. reflex-0.7.1a3/reflex/components/core/html.pyi +0 -287
  228. reflex-0.7.1a3/reflex/components/core/sticky.pyi +0 -1233
  229. reflex-0.7.1a3/reflex/components/datadisplay/code.pyi +0 -1623
  230. reflex-0.7.1a3/reflex/components/datadisplay/shiki_code_block.pyi +0 -2232
  231. reflex-0.7.1a3/reflex/components/el/elements/base.pyi +0 -356
  232. reflex-0.7.1a3/reflex/components/el/elements/forms.pyi +0 -3895
  233. reflex-0.7.1a3/reflex/components/el/elements/inline.pyi +0 -7584
  234. reflex-0.7.1a3/reflex/components/el/elements/media.pyi +0 -7058
  235. reflex-0.7.1a3/reflex/components/el/elements/metadata.pyi +0 -1241
  236. reflex-0.7.1a3/reflex/components/el/elements/other.pyi +0 -1895
  237. reflex-0.7.1a3/reflex/components/el/elements/scripts.pyi +0 -865
  238. reflex-0.7.1a3/reflex/components/el/elements/sectioning.pyi +0 -4033
  239. reflex-0.7.1a3/reflex/components/el/elements/tables.pyi +0 -2734
  240. reflex-0.7.1a3/reflex/components/el/elements/typography.pyi +0 -4054
  241. reflex-0.7.1a3/reflex/components/radix/primitives/accordion.pyi +0 -850
  242. reflex-0.7.1a3/reflex/components/radix/primitives/form.pyi +0 -1320
  243. reflex-0.7.1a3/reflex/components/radix/themes/color_mode.pyi +0 -633
  244. reflex-0.7.1a3/reflex/components/radix/themes/components/avatar.pyi +0 -161
  245. reflex-0.7.1a3/reflex/components/radix/themes/components/badge.pyi +0 -377
  246. reflex-0.7.1a3/reflex/components/radix/themes/components/button.pyi +0 -411
  247. reflex-0.7.1a3/reflex/components/radix/themes/components/callout.pyi +0 -1631
  248. reflex-0.7.1a3/reflex/components/radix/themes/components/card.pyi +0 -308
  249. reflex-0.7.1a3/reflex/components/radix/themes/components/checkbox.pyi +0 -460
  250. reflex-0.7.1a3/reflex/components/radix/themes/components/checkbox_cards.pyi +0 -247
  251. reflex-0.7.1a3/reflex/components/radix/themes/components/icon_button.pyi +0 -414
  252. reflex-0.7.1a3/reflex/components/radix/themes/components/inset.pyi +0 -379
  253. reflex-0.7.1a3/reflex/components/radix/themes/components/progress.pyi +0 -160
  254. reflex-0.7.1a3/reflex/components/radix/themes/components/radio.pyi +0 -148
  255. reflex-0.7.1a3/reflex/components/radix/themes/components/separator.pyi +0 -157
  256. reflex-0.7.1a3/reflex/components/radix/themes/components/slider.pyi +0 -207
  257. reflex-0.7.1a3/reflex/components/radix/themes/components/switch.pyi +0 -172
  258. reflex-0.7.1a3/reflex/components/radix/themes/components/table.pyi +0 -2288
  259. reflex-0.7.1a3/reflex/components/radix/themes/components/text_area.pyi +0 -440
  260. reflex-0.7.1a3/reflex/components/radix/themes/components/text_field.pyi +0 -998
  261. reflex-0.7.1a3/reflex/components/radix/themes/layout/base.pyi +0 -255
  262. reflex-0.7.1a3/reflex/components/radix/themes/layout/box.pyi +0 -285
  263. reflex-0.7.1a3/reflex/components/radix/themes/layout/center.pyi +0 -368
  264. reflex-0.7.1a3/reflex/components/radix/themes/layout/container.pyi +0 -279
  265. reflex-0.7.1a3/reflex/components/radix/themes/layout/flex.pyi +0 -371
  266. reflex-0.7.1a3/reflex/components/radix/themes/layout/grid.pyi +0 -403
  267. reflex-0.7.1a3/reflex/components/radix/themes/layout/list.pyi +0 -1123
  268. reflex-0.7.1a3/reflex/components/radix/themes/layout/section.pyi +0 -300
  269. reflex-0.7.1a3/reflex/components/radix/themes/layout/spacer.pyi +0 -368
  270. reflex-0.7.1a3/reflex/components/radix/themes/layout/stack.pyi +0 -976
  271. reflex-0.7.1a3/reflex/components/radix/themes/typography/blockquote.pyi +0 -381
  272. reflex-0.7.1a3/reflex/components/radix/themes/typography/code.pyi +0 -387
  273. reflex-0.7.1a3/reflex/components/radix/themes/typography/heading.pyi +0 -410
  274. reflex-0.7.1a3/reflex/components/radix/themes/typography/link.pyi +0 -460
  275. reflex-0.7.1a3/reflex/components/radix/themes/typography/text.pyi +0 -2446
  276. reflex-0.7.1a3/reflex/experimental/layout.pyi +0 -877
  277. reflex-0.7.1a3/reflex/utils/decorator.py +0 -25
  278. {reflex-0.7.1a3 → reflex-0.7.2}/LICENSE +0 -0
  279. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/apps/blank/assets/favicon.ico +0 -0
  280. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/apps/blank/code/__init__.py +0 -0
  281. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/apps/blank/code/blank.py +0 -0
  282. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/jinja/app/rxconfig.py.jinja2 +0 -0
  283. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/jinja/custom_components/README.md.jinja2 +0 -0
  284. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/jinja/custom_components/__init__.py.jinja2 +0 -0
  285. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/jinja/custom_components/demo_app.py.jinja2 +0 -0
  286. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/jinja/custom_components/pyproject.toml.jinja2 +0 -0
  287. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/jinja/custom_components/src.py.jinja2 +0 -0
  288. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/jinja/web/package.json.jinja2 +0 -0
  289. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/jinja/web/pages/_app.js.jinja2 +0 -0
  290. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/jinja/web/pages/_document.js.jinja2 +0 -0
  291. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/jinja/web/pages/base_page.js.jinja2 +0 -0
  292. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/jinja/web/pages/component.js.jinja2 +0 -0
  293. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/jinja/web/pages/custom_component.js.jinja2 +0 -0
  294. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/jinja/web/pages/index.js.jinja2 +0 -0
  295. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/jinja/web/pages/macros.js.jinja2 +0 -0
  296. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/jinja/web/pages/stateful_component.js.jinja2 +0 -0
  297. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/jinja/web/pages/stateful_components.js.jinja2 +0 -0
  298. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/jinja/web/pages/utils.js.jinja2 +0 -0
  299. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/jinja/web/styles/styles.css.jinja2 +0 -0
  300. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/jinja/web/tailwind.config.js.jinja2 +0 -0
  301. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/jinja/web/utils/theme.js.jinja2 +0 -0
  302. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/web/.gitignore +0 -0
  303. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/web/components/shiki/code.js +0 -0
  304. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/web/jsconfig.json +0 -0
  305. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/web/next.config.js +0 -0
  306. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/web/postcss.config.js +0 -0
  307. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/web/styles/tailwind.css +0 -0
  308. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/web/utils/client_side_routing.js +0 -0
  309. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/web/utils/helpers/dataeditor.js +0 -0
  310. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/web/utils/helpers/debounce.js +0 -0
  311. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/web/utils/helpers/paste.js +0 -0
  312. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/web/utils/helpers/range.js +0 -0
  313. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/.templates/web/utils/helpers/throttle.js +0 -0
  314. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/__init__.py +0 -0
  315. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/__init__.pyi +0 -0
  316. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/__main__.py +0 -0
  317. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/app_mixins/__init__.py +0 -0
  318. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/app_mixins/mixin.py +0 -0
  319. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/app_module_for_backend.py +0 -0
  320. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/compiler/__init__.py +0 -0
  321. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/compiler/templates.py +0 -0
  322. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/__init__.py +0 -0
  323. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/__init__.pyi +0 -0
  324. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/base/__init__.py +0 -0
  325. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/base/__init__.pyi +0 -0
  326. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/base/app_wrap.py +0 -0
  327. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/base/body.py +0 -0
  328. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/base/fragment.py +0 -0
  329. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/base/head.py +0 -0
  330. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/base/link.py +0 -0
  331. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/base/script.py +0 -0
  332. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/base/strict_mode.py +0 -0
  333. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/core/__init__.py +0 -0
  334. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/core/__init__.pyi +0 -0
  335. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/core/client_side_routing.py +0 -0
  336. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/core/colors.py +0 -0
  337. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/core/layout/__init__.py +0 -0
  338. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/core/responsive.py +0 -0
  339. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/core/sticky.py +0 -0
  340. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/datadisplay/__init__.py +0 -0
  341. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/datadisplay/__init__.pyi +0 -0
  342. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/dynamic.py +0 -0
  343. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/el/__init__.py +0 -0
  344. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/el/__init__.pyi +0 -0
  345. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/el/constants/__init__.py +0 -0
  346. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/el/constants/html.py +0 -0
  347. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/el/constants/react.py +0 -0
  348. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/el/constants/reflex.py +0 -0
  349. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/el/element.py +0 -0
  350. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/el/elements/__init__.py +0 -0
  351. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/el/elements/__init__.pyi +0 -0
  352. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/el/elements/base.py +0 -0
  353. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/el/elements/other.py +0 -0
  354. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/el/elements/scripts.py +0 -0
  355. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/el/elements/sectioning.py +0 -0
  356. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/el/elements/tables.py +0 -0
  357. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/el/elements/typography.py +0 -0
  358. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/gridjs/__init__.py +0 -0
  359. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/literals.py +0 -0
  360. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/lucide/__init__.py +0 -0
  361. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/lucide/icon.py +0 -0
  362. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/markdown/__init__.py +0 -0
  363. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/moment/__init__.py +0 -0
  364. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/next/__init__.py +0 -0
  365. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/next/base.py +0 -0
  366. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/next/link.py +0 -0
  367. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/plotly/__init__.py +0 -0
  368. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/props.py +0 -0
  369. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/__init__.py +0 -0
  370. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/__init__.pyi +0 -0
  371. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/primitives/__init__.py +0 -0
  372. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/primitives/__init__.pyi +0 -0
  373. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/__init__.py +0 -0
  374. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/__init__.pyi +0 -0
  375. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/__init__.py +0 -0
  376. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/__init__.pyi +0 -0
  377. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/alert_dialog.py +0 -0
  378. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/avatar.py +0 -0
  379. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/badge.py +0 -0
  380. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/button.py +0 -0
  381. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/card.py +0 -0
  382. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/checkbox.py +0 -0
  383. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/data_list.py +0 -0
  384. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/dialog.py +0 -0
  385. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/icon_button.py +0 -0
  386. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/progress.py +0 -0
  387. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/radio.py +0 -0
  388. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/scroll_area.py +0 -0
  389. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/separator.py +0 -0
  390. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/skeleton.py +0 -0
  391. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/spinner.py +0 -0
  392. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/switch.py +0 -0
  393. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/components/text_area.py +0 -0
  394. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/layout/__init__.py +0 -0
  395. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/layout/__init__.pyi +0 -0
  396. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/layout/base.py +0 -0
  397. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/layout/box.py +0 -0
  398. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/layout/center.py +0 -0
  399. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/layout/container.py +0 -0
  400. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/layout/section.py +0 -0
  401. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/layout/spacer.py +0 -0
  402. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/layout/stack.py +0 -0
  403. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/typography/__init__.py +0 -0
  404. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/typography/__init__.pyi +0 -0
  405. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/typography/base.py +0 -0
  406. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/typography/blockquote.py +0 -0
  407. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/typography/code.py +0 -0
  408. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/typography/heading.py +0 -0
  409. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/typography/link.py +0 -0
  410. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/radix/themes/typography/text.py +0 -0
  411. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/react_player/__init__.py +0 -0
  412. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/react_player/audio.py +0 -0
  413. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/react_player/react_player.py +0 -0
  414. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/react_player/video.py +0 -0
  415. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/recharts/__init__.py +0 -0
  416. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/recharts/__init__.pyi +0 -0
  417. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/recharts/recharts.py +0 -0
  418. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/sonner/__init__.py +0 -0
  419. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/suneditor/__init__.py +0 -0
  420. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/tags/__init__.py +0 -0
  421. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/components/tags/tagless.py +0 -0
  422. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/constants/base.py +0 -0
  423. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/constants/colors.py +0 -0
  424. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/constants/compiler.py +0 -0
  425. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/constants/config.py +0 -0
  426. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/constants/custom_components.py +0 -0
  427. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/constants/event.py +0 -0
  428. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/constants/installer.py +0 -0
  429. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/constants/route.py +0 -0
  430. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/constants/state.py +0 -0
  431. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/constants/style.py +0 -0
  432. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/constants/utils.py +0 -0
  433. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/custom_components/__init__.py +0 -0
  434. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/experimental/__init__.py +0 -0
  435. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/experimental/hooks.py +0 -0
  436. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/experimental/misc.py +0 -0
  437. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/istate/__init__.py +0 -0
  438. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/istate/dynamic.py +0 -0
  439. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/istate/proxy.py +0 -0
  440. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/istate/storage.py +0 -0
  441. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/istate/wrappers.py +0 -0
  442. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/middleware/__init__.py +0 -0
  443. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/py.typed +0 -0
  444. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/route.py +0 -0
  445. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/utils/__init__.py +0 -0
  446. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/utils/build.py +0 -0
  447. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/utils/codespaces.py +0 -0
  448. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/utils/compat.py +0 -0
  449. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/utils/exceptions.py +0 -0
  450. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/utils/lazy_loader.py +0 -0
  451. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/utils/net.py +0 -0
  452. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/utils/path_ops.py +0 -0
  453. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/utils/redir.py +0 -0
  454. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/utils/registry.py +0 -0
  455. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/utils/telemetry.py +0 -0
  456. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/vars/__init__.py +0 -0
  457. {reflex-0.7.1a3 → reflex-0.7.2}/reflex/vars/dep_tracking.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: reflex
3
- Version: 0.7.1a3
3
+ Version: 0.7.2
4
4
  Summary: Web apps in pure Python.
5
5
  License: Apache-2.0
6
6
  Keywords: web,framework
@@ -48,9 +48,6 @@ Project-URL: Homepage, https://reflex.dev
48
48
  Project-URL: Repository, https://github.com/reflex-dev/reflex
49
49
  Description-Content-Type: text/markdown
50
50
 
51
- ```diff
52
- + Searching for Pynecone? You are in the right repo. Pynecone has been renamed to Reflex. +
53
- ```
54
51
 
55
52
  <div align="center">
56
53
  <img src="https://raw.githubusercontent.com/reflex-dev/reflex/main/docs/images/reflex_dark.svg#gh-light-mode-only" alt="Reflex Logo" width="300px">
@@ -287,9 +284,9 @@ You can create a multi-page app by adding more pages.
287
284
 
288
285
  Reflex launched in December 2022 with the name Pynecone.
289
286
 
290
- As of February 2024, our hosting service is in alpha! During this time anyone can deploy their apps for free. See our [roadmap](https://github.com/reflex-dev/reflex/issues/2727) to see what's planned.
287
+ Beginning in 2025, [Reflex Cloud](https://cloud.reflex.dev) has launched to provide the best hosting experience for Reflex apps. We will continue to develop it and implement more features.
291
288
 
292
- Reflex has new releases and features coming every week! Make sure to :star: star and :eyes: watch this repository to stay up to date.
289
+ Reflex has new releases and features coming every other week! Make sure to :star: star and :eyes: watch this repository to stay up to date.
293
290
 
294
291
  ## Contributing
295
292
 
@@ -1,6 +1,3 @@
1
- ```diff
2
- + Searching for Pynecone? You are in the right repo. Pynecone has been renamed to Reflex. +
3
- ```
4
1
 
5
2
  <div align="center">
6
3
  <img src="https://raw.githubusercontent.com/reflex-dev/reflex/main/docs/images/reflex_dark.svg#gh-light-mode-only" alt="Reflex Logo" width="300px">
@@ -237,9 +234,9 @@ You can create a multi-page app by adding more pages.
237
234
 
238
235
  Reflex launched in December 2022 with the name Pynecone.
239
236
 
240
- As of February 2024, our hosting service is in alpha! During this time anyone can deploy their apps for free. See our [roadmap](https://github.com/reflex-dev/reflex/issues/2727) to see what's planned.
237
+ Beginning in 2025, [Reflex Cloud](https://cloud.reflex.dev) has launched to provide the best hosting experience for Reflex apps. We will continue to develop it and implement more features.
241
238
 
242
- Reflex has new releases and features coming every week! Make sure to :star: star and :eyes: watch this repository to stay up to date.
239
+ Reflex has new releases and features coming every other week! Make sure to :star: star and :eyes: watch this repository to stay up to date.
243
240
 
244
241
  ## Contributing
245
242
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "reflex"
3
- version = "0.7.1a3"
3
+ version = "0.7.2"
4
4
  description = "Web apps in pure Python."
5
5
  license = "Apache-2.0"
6
6
  authors = [
@@ -78,9 +78,9 @@ export function UploadFilesProvider({ children }) {
78
78
  return newFilesById
79
79
  })
80
80
  return (
81
- <UploadFilesContext.Provider value={[filesById, setFilesById]}>
81
+ <UploadFilesContext value={[filesById, setFilesById]}>
82
82
  {children}
83
- </UploadFilesContext.Provider>
83
+ </UploadFilesContext>
84
84
  )
85
85
  }
86
86
 
@@ -92,9 +92,9 @@ export function EventLoopProvider({ children }) {
92
92
  clientStorage,
93
93
  )
94
94
  return (
95
- <EventLoopContext.Provider value={[addEvents, connectErrors]}>
95
+ <EventLoopContext value={[addEvents, connectErrors]}>
96
96
  {children}
97
- </EventLoopContext.Provider>
97
+ </EventLoopContext>
98
98
  )
99
99
  }
100
100
 
@@ -112,13 +112,13 @@ export function StateProvider({ children }) {
112
112
 
113
113
  return (
114
114
  {% for state_name in initial_state %}
115
- <StateContexts.{{state_name|var_name}}.Provider value={ {{state_name|var_name}} }>
115
+ <StateContexts.{{state_name|var_name}} value={ {{state_name|var_name}} }>
116
116
  {% endfor %}
117
- <DispatchContext.Provider value={dispatchers}>
117
+ <DispatchContext value={dispatchers}>
118
118
  {children}
119
- </DispatchContext.Provider>
119
+ </DispatchContext>
120
120
  {% for state_name in initial_state|reverse %}
121
- </StateContexts.{{state_name|var_name}}.Provider>
121
+ </StateContexts.{{state_name|var_name}}>
122
122
  {% endfor %}
123
123
  )
124
124
  }
@@ -36,17 +36,17 @@ export default function RadixThemesColorModeProvider({ children }) {
36
36
  const allowedModes = ["light", "dark", "system"];
37
37
  if (!allowedModes.includes(mode)) {
38
38
  console.error(
39
- `Invalid color mode "${mode}". Defaulting to "${defaultColorMode}".`
39
+ `Invalid color mode "${mode}". Defaulting to "${defaultColorMode}".`,
40
40
  );
41
41
  mode = defaultColorMode;
42
42
  }
43
43
  setTheme(mode);
44
44
  };
45
45
  return (
46
- <ColorModeContext.Provider
46
+ <ColorModeContext
47
47
  value={{ rawColorMode, resolvedColorMode, toggleColorMode, setColorMode }}
48
48
  >
49
49
  {children}
50
- </ColorModeContext.Provider>
50
+ </ColorModeContext>
51
51
  );
52
52
  }
@@ -179,7 +179,7 @@ export const applyEvent = async (event, socket) => {
179
179
  // Handle special events
180
180
  if (event.name == "_redirect") {
181
181
  if (event.payload.external) {
182
- window.open(event.payload.path, "_blank");
182
+ window.open(event.payload.path, "_blank", "noopener");
183
183
  } else if (event.payload.replace) {
184
184
  Router.replace(event.payload.path);
185
185
  } else {
@@ -227,8 +227,8 @@ export const applyEvent = async (event, socket) => {
227
227
  a.href = eval?.(
228
228
  event.payload.url.replace(
229
229
  "getBackendURL(env.UPLOAD)",
230
- `"${getBackendURL(env.UPLOAD)}"`,
231
- ),
230
+ `"${getBackendURL(env.UPLOAD)}"`
231
+ )
232
232
  );
233
233
  }
234
234
  a.download = event.payload.filename;
@@ -341,7 +341,7 @@ export const applyRestEvent = async (event, socket) => {
341
341
  event.payload.files,
342
342
  event.payload.upload_id,
343
343
  event.payload.on_upload_progress,
344
- socket,
344
+ socket
345
345
  );
346
346
  return false;
347
347
  }
@@ -408,7 +408,7 @@ export const connect = async (
408
408
  dispatch,
409
409
  transports,
410
410
  setConnectErrors,
411
- client_storage = {},
411
+ client_storage = {}
412
412
  ) => {
413
413
  // Get backend URL object from the endpoint.
414
414
  const endpoint = getBackendURL(EVENTURL);
@@ -499,7 +499,7 @@ export const uploadFiles = async (
499
499
  files,
500
500
  upload_id,
501
501
  on_upload_progress,
502
- socket,
502
+ socket
503
503
  ) => {
504
504
  // return if there's no file to upload
505
505
  if (files === undefined || files.length === 0) {
@@ -604,7 +604,7 @@ export const Event = (
604
604
  name,
605
605
  payload = {},
606
606
  event_actions = {},
607
- handler = null,
607
+ handler = null
608
608
  ) => {
609
609
  return { name, payload, handler, event_actions };
610
610
  };
@@ -631,7 +631,7 @@ export const hydrateClientStorage = (client_storage) => {
631
631
  for (const state_key in client_storage.local_storage) {
632
632
  const options = client_storage.local_storage[state_key];
633
633
  const local_storage_value = localStorage.getItem(
634
- options.name || state_key,
634
+ options.name || state_key
635
635
  );
636
636
  if (local_storage_value !== null) {
637
637
  client_storage_values[state_key] = local_storage_value;
@@ -642,7 +642,7 @@ export const hydrateClientStorage = (client_storage) => {
642
642
  for (const state_key in client_storage.session_storage) {
643
643
  const session_options = client_storage.session_storage[state_key];
644
644
  const session_storage_value = sessionStorage.getItem(
645
- session_options.name || state_key,
645
+ session_options.name || state_key
646
646
  );
647
647
  if (session_storage_value != null) {
648
648
  client_storage_values[state_key] = session_storage_value;
@@ -667,7 +667,7 @@ export const hydrateClientStorage = (client_storage) => {
667
667
  const applyClientStorageDelta = (client_storage, delta) => {
668
668
  // find the main state and check for is_hydrated
669
669
  const unqualified_states = Object.keys(delta).filter(
670
- (key) => key.split(".").length === 1,
670
+ (key) => key.split(".").length === 1
671
671
  );
672
672
  if (unqualified_states.length === 1) {
673
673
  const main_state = delta[unqualified_states[0]];
@@ -701,7 +701,7 @@ const applyClientStorageDelta = (client_storage, delta) => {
701
701
  const session_options = client_storage.session_storage[state_key];
702
702
  sessionStorage.setItem(
703
703
  session_options.name || state_key,
704
- delta[substate][key],
704
+ delta[substate][key]
705
705
  );
706
706
  }
707
707
  }
@@ -721,7 +721,7 @@ const applyClientStorageDelta = (client_storage, delta) => {
721
721
  export const useEventLoop = (
722
722
  dispatch,
723
723
  initial_events = () => [],
724
- client_storage = {},
724
+ client_storage = {}
725
725
  ) => {
726
726
  const socket = useRef(null);
727
727
  const router = useRouter();
@@ -735,7 +735,7 @@ export const useEventLoop = (
735
735
 
736
736
  event_actions = events.reduce(
737
737
  (acc, e) => ({ ...acc, ...e.event_actions }),
738
- event_actions ?? {},
738
+ event_actions ?? {}
739
739
  );
740
740
 
741
741
  const _e = args.filter((o) => o?.preventDefault !== undefined)[0];
@@ -763,7 +763,7 @@ export const useEventLoop = (
763
763
  debounce(
764
764
  combined_name,
765
765
  () => queueEvents(events, socket),
766
- event_actions.debounce,
766
+ event_actions.debounce
767
767
  );
768
768
  } else {
769
769
  queueEvents(events, socket);
@@ -782,7 +782,7 @@ export const useEventLoop = (
782
782
  query,
783
783
  asPath,
784
784
  }))(router),
785
- })),
785
+ }))
786
786
  );
787
787
  sentHydrate.current = true;
788
788
  }
@@ -828,7 +828,7 @@ export const useEventLoop = (
828
828
  dispatch,
829
829
  ["websocket"],
830
830
  setConnectErrors,
831
- client_storage,
831
+ client_storage
832
832
  );
833
833
  }
834
834
  }
@@ -876,7 +876,7 @@ export const useEventLoop = (
876
876
  vars[storage_to_state_map[e.key]] = e.newValue;
877
877
  const event = Event(
878
878
  `${state_name}.reflex___state____update_vars_internal_state.update_vars_internal`,
879
- { vars: vars },
879
+ { vars: vars }
880
880
  );
881
881
  addEvents([event], e);
882
882
  }
@@ -969,7 +969,7 @@ export const getRefValues = (refs) => {
969
969
  return refs.map((ref) =>
970
970
  ref.current
971
971
  ? ref.current.value || ref.current.getAttribute("aria-valuenow")
972
- : null,
972
+ : null
973
973
  );
974
974
  };
975
975
 
@@ -1,7 +1,6 @@
1
1
  """The Reflex Admin Dashboard."""
2
2
 
3
3
  from dataclasses import dataclass, field
4
- from typing import Optional
5
4
 
6
5
  from starlette_admin.base import BaseAdmin as Admin
7
6
 
@@ -12,4 +11,4 @@ class AdminDash:
12
11
 
13
12
  models: list = field(default_factory=list)
14
13
  view_overrides: dict = field(default_factory=dict)
15
- admin: Optional[Admin] = None
14
+ admin: Admin | None = None
@@ -25,12 +25,8 @@ from typing import (
25
25
  Callable,
26
26
  Coroutine,
27
27
  Dict,
28
- List,
29
28
  MutableMapping,
30
- Optional,
31
- Set,
32
29
  Type,
33
- Union,
34
30
  get_args,
35
31
  get_type_hints,
36
32
  )
@@ -167,7 +163,7 @@ def default_backend_exception_handler(exception: Exception) -> EventSpec:
167
163
  )
168
164
 
169
165
 
170
- def extra_overlay_function() -> Optional[Component]:
166
+ def extra_overlay_function() -> Component | None:
171
167
  """Extra overlay function to add to the overlay component.
172
168
 
173
169
  Returns:
@@ -250,16 +246,16 @@ class UploadFile(StarletteUploadFile):
250
246
 
251
247
  file: BinaryIO
252
248
 
253
- path: Optional[Path] = dataclasses.field(default=None)
249
+ path: Path | None = dataclasses.field(default=None)
254
250
 
255
- _deprecated_filename: Optional[str] = dataclasses.field(default=None)
251
+ _deprecated_filename: str | None = dataclasses.field(default=None)
256
252
 
257
- size: Optional[int] = dataclasses.field(default=None)
253
+ size: int | None = dataclasses.field(default=None)
258
254
 
259
255
  headers: Headers = dataclasses.field(default_factory=Headers)
260
256
 
261
257
  @property
262
- def name(self) -> Optional[str]:
258
+ def name(self) -> str | None:
263
259
  """Get the name of the uploaded file.
264
260
 
265
261
  Returns:
@@ -269,7 +265,7 @@ class UploadFile(StarletteUploadFile):
269
265
  return self.path.name
270
266
 
271
267
  @property
272
- def filename(self) -> Optional[str]:
268
+ def filename(self) -> str | None:
273
269
  """Get the filename of the uploaded file.
274
270
 
275
271
  Returns:
@@ -290,13 +286,13 @@ class UploadFile(StarletteUploadFile):
290
286
  class UnevaluatedPage:
291
287
  """An uncompiled page."""
292
288
 
293
- component: Union[Component, ComponentCallable]
289
+ component: Component | ComponentCallable
294
290
  route: str
295
- title: Union[Var, str, None]
296
- description: Union[Var, str, None]
291
+ title: Var | str | None
292
+ description: Var | str | None
297
293
  image: str
298
- on_load: Union[EventType[()], None]
299
- meta: List[Dict[str, str]]
294
+ on_load: EventType[()] | None
295
+ meta: list[dict[str, str]]
300
296
 
301
297
 
302
298
  @dataclasses.dataclass()
@@ -322,7 +318,7 @@ class App(MiddlewareMixin, LifespanMixin):
322
318
  """
323
319
 
324
320
  # The global [theme](https://reflex.dev/docs/styling/theming/#theme) for the entire app.
325
- theme: Optional[Component] = dataclasses.field(
321
+ theme: Component | None = dataclasses.field(
326
322
  default_factory=lambda: themes.theme(accent_color="blue")
327
323
  )
328
324
 
@@ -330,18 +326,18 @@ class App(MiddlewareMixin, LifespanMixin):
330
326
  style: ComponentStyle = dataclasses.field(default_factory=dict)
331
327
 
332
328
  # A list of URLs to [stylesheets](https://reflex.dev/docs/styling/custom-stylesheets/) to include in the app.
333
- stylesheets: List[str] = dataclasses.field(default_factory=list)
329
+ stylesheets: list[str] = dataclasses.field(default_factory=list)
334
330
 
335
331
  # A component that is present on every page (defaults to the Connection Error banner).
336
- overlay_component: Optional[Union[Component, ComponentCallable]] = (
337
- dataclasses.field(default=None)
332
+ overlay_component: Component | ComponentCallable | None = dataclasses.field(
333
+ default=None
338
334
  )
339
335
 
340
336
  # Error boundary component to wrap the app with.
341
- error_boundary: Optional[ComponentCallable] = dataclasses.field(default=None)
337
+ error_boundary: ComponentCallable | None = dataclasses.field(default=None)
342
338
 
343
339
  # App wraps to be applied to the whole app. Expected to be a dictionary of (order, name) to a function that takes whether the state is enabled and optionally returns a component.
344
- app_wraps: Dict[tuple[int, str], Callable[[bool], Optional[Component]]] = (
340
+ app_wraps: dict[tuple[int, str], Callable[[bool], Component | None]] = (
345
341
  dataclasses.field(
346
342
  default_factory=lambda: {
347
343
  (55, "ErrorBoundary"): (
@@ -356,24 +352,24 @@ class App(MiddlewareMixin, LifespanMixin):
356
352
  )
357
353
 
358
354
  # Components to add to the head of every page.
359
- head_components: List[Component] = dataclasses.field(default_factory=list)
355
+ head_components: list[Component] = dataclasses.field(default_factory=list)
360
356
 
361
357
  # The Socket.IO AsyncServer instance.
362
- sio: Optional[AsyncServer] = None
358
+ sio: AsyncServer | None = None
363
359
 
364
360
  # The language to add to the html root tag of every page.
365
- html_lang: Optional[str] = None
361
+ html_lang: str | None = None
366
362
 
367
363
  # Attributes to add to the html root tag of every page.
368
- html_custom_attrs: Optional[Dict[str, str]] = None
364
+ html_custom_attrs: dict[str, str] | None = None
369
365
 
370
366
  # A map from a route to an unevaluated page.
371
- _unevaluated_pages: Dict[str, UnevaluatedPage] = dataclasses.field(
367
+ _unevaluated_pages: dict[str, UnevaluatedPage] = dataclasses.field(
372
368
  default_factory=dict
373
369
  )
374
370
 
375
371
  # A map from a page route to the component to render. Users should use `add_page`.
376
- _pages: Dict[str, Component] = dataclasses.field(default_factory=dict)
372
+ _pages: dict[str, Component] = dataclasses.field(default_factory=dict)
377
373
 
378
374
  # A mapping of pages which created states as they were being evaluated.
379
375
  _stateful_pages: Dict[str, None] = dataclasses.field(default_factory=dict)
@@ -382,24 +378,24 @@ class App(MiddlewareMixin, LifespanMixin):
382
378
  _api: FastAPI | None = None
383
379
 
384
380
  # The state class to use for the app.
385
- _state: Optional[Type[BaseState]] = None
381
+ _state: Type[BaseState] | None = None
386
382
 
387
383
  # Class to manage many client states.
388
- _state_manager: Optional[StateManager] = None
384
+ _state_manager: StateManager | None = None
389
385
 
390
386
  # Mapping from a route to event handlers to trigger when the page loads.
391
- _load_events: Dict[str, List[IndividualEventType[()]]] = dataclasses.field(
387
+ _load_events: dict[str, list[IndividualEventType[()]]] = dataclasses.field(
392
388
  default_factory=dict
393
389
  )
394
390
 
395
391
  # Admin dashboard to view and manage the database.
396
- admin_dash: Optional[AdminDash] = None
392
+ admin_dash: AdminDash | None = None
397
393
 
398
394
  # The async server name space.
399
- _event_namespace: Optional[EventNamespace] = None
395
+ _event_namespace: EventNamespace | None = None
400
396
 
401
397
  # Background tasks that are currently running.
402
- _background_tasks: Set[asyncio.Task] = dataclasses.field(default_factory=set)
398
+ _background_tasks: set[asyncio.Task] = dataclasses.field(default_factory=set)
403
399
 
404
400
  # Frontend Error Handler Function
405
401
  frontend_exception_handler: Callable[[Exception], None] = (
@@ -408,7 +404,7 @@ class App(MiddlewareMixin, LifespanMixin):
408
404
 
409
405
  # Backend Error Handler Function
410
406
  backend_exception_handler: Callable[
411
- [Exception], Union[EventSpec, List[EventSpec], None]
407
+ [Exception], EventSpec | list[EventSpec] | None
412
408
  ] = default_backend_exception_handler
413
409
 
414
410
  # Put the toast provider in the app wrap.
@@ -895,7 +891,7 @@ class App(MiddlewareMixin, LifespanMixin):
895
891
 
896
892
  admin.mount_to(self.api)
897
893
 
898
- def _get_frontend_packages(self, imports: Dict[str, set[ImportVar]]):
894
+ def _get_frontend_packages(self, imports: dict[str, set[ImportVar]]):
899
895
  """Gets the frontend packages to be installed and filters out the unnecessary ones.
900
896
 
901
897
  Args:
@@ -986,12 +982,15 @@ class App(MiddlewareMixin, LifespanMixin):
986
982
 
987
983
  def _setup_sticky_badge(self):
988
984
  """Add the sticky badge to the app."""
989
- for k, component in self._pages.items():
990
- # Would be nice to share single sticky_badge across all pages, but
991
- # it bungles the StatefulComponent compile step.
985
+ from reflex.components.component import memo
986
+
987
+ @memo
988
+ def memoized_badge():
992
989
  sticky_badge = sticky()
993
990
  sticky_badge._add_style_recursive({})
994
- self._pages[k] = Fragment.create(sticky_badge, component)
991
+ return sticky_badge
992
+
993
+ self.app_wraps[(0, "StickyBadge")] = lambda _: memoized_badge()
995
994
 
996
995
  def _apply_decorated_pages(self):
997
996
  """Add @rx.page decorated pages to the app.
@@ -1006,9 +1005,7 @@ class App(MiddlewareMixin, LifespanMixin):
1006
1005
  for render, kwargs in DECORATED_PAGES[get_config().app_name]:
1007
1006
  self.add_page(render, **kwargs)
1008
1007
 
1009
- def _validate_var_dependencies(
1010
- self, state: Optional[Type[BaseState]] = None
1011
- ) -> None:
1008
+ def _validate_var_dependencies(self, state: Type[BaseState] | None = None) -> None:
1012
1009
  """Validate the dependencies of the vars in the app.
1013
1010
 
1014
1011
  Args:
@@ -1080,7 +1077,7 @@ class App(MiddlewareMixin, LifespanMixin):
1080
1077
  self.style = evaluate_style_namespaces(self.style)
1081
1078
 
1082
1079
  # Add the app wrappers.
1083
- app_wrappers: Dict[tuple[int, str], Component] = {
1080
+ app_wrappers: dict[tuple[int, str], Component] = {
1084
1081
  # Default app wrap component renders {children}
1085
1082
  (0, "AppWrap"): AppWrap.create()
1086
1083
  }
@@ -1103,6 +1100,9 @@ class App(MiddlewareMixin, LifespanMixin):
1103
1100
  console.debug(f"Evaluating page: {route}")
1104
1101
  self._compile_page(route, save_page=should_compile)
1105
1102
 
1103
+ # Save the pages which created new states at eval time.
1104
+ self._write_stateful_pages_marker()
1105
+
1106
1106
  # Add the optional endpoints (_upload)
1107
1107
  self._add_optional_endpoints()
1108
1108
 
@@ -1145,6 +1145,8 @@ class App(MiddlewareMixin, LifespanMixin):
1145
1145
  )[:10]
1146
1146
  )
1147
1147
  )
1148
+ # Save the pages which created new states at eval time.
1149
+ self._write_stateful_pages_marker()
1148
1150
 
1149
1151
  # Add the optional endpoints (_upload)
1150
1152
  self._add_optional_endpoints()
@@ -1366,7 +1368,8 @@ class App(MiddlewareMixin, LifespanMixin):
1366
1368
  for output_path, code in compile_results:
1367
1369
  compiler_utils.write_page(output_path, code)
1368
1370
 
1369
- # Write list of routes that create dynamic states for backend to use.
1371
+ def _write_stateful_pages_marker(self):
1372
+ """Write list of routes that create dynamic states for the backend to use later."""
1370
1373
  if self._state is not None:
1371
1374
  stateful_pages_marker = (
1372
1375
  prerequisites.get_backend_dir() / constants.Dirs.STATEFUL_PAGES
@@ -1541,8 +1544,8 @@ class App(MiddlewareMixin, LifespanMixin):
1541
1544
 
1542
1545
  valid = bool(
1543
1546
  return_type == EventSpec
1544
- or return_type == Optional[EventSpec]
1545
- or return_type == List[EventSpec]
1547
+ or return_type == EventSpec | None
1548
+ or return_type == list[EventSpec]
1546
1549
  or return_type == inspect.Signature.empty
1547
1550
  or return_type is None
1548
1551
  )
@@ -1550,7 +1553,7 @@ class App(MiddlewareMixin, LifespanMixin):
1550
1553
  if not valid:
1551
1554
  raise ValueError(
1552
1555
  f"Provided custom {handler_domain} exception handler `{_fn_name}` has the wrong return type."
1553
- f"Expected `Union[EventSpec, List[EventSpec], None]` but got `{return_type}`"
1556
+ f"Expected `EventSpec | list[EventSpec] | None` but got `{return_type}`"
1554
1557
  )
1555
1558
 
1556
1559
 
@@ -1690,7 +1693,7 @@ def upload(app: App):
1690
1693
  The upload function.
1691
1694
  """
1692
1695
 
1693
- async def upload_file(request: Request, files: List[FastAPIUploadFile]):
1696
+ async def upload_file(request: Request, files: list[FastAPIUploadFile]):
1694
1697
  """Upload a file.
1695
1698
 
1696
1699
  Args:
@@ -1730,7 +1733,7 @@ def upload(app: App):
1730
1733
  # get handler function
1731
1734
  func = getattr(type(current_state), handler.split(".")[-1])
1732
1735
 
1733
- # check if there exists any handler args with annotation, List[UploadFile]
1736
+ # check if there exists any handler args with annotation, list[UploadFile]
1734
1737
  if isinstance(func, EventHandler):
1735
1738
  if func.is_background:
1736
1739
  raise UploadTypeError(
@@ -1750,7 +1753,7 @@ def upload(app: App):
1750
1753
  if not handler_upload_param:
1751
1754
  raise UploadValueError(
1752
1755
  f"`{handler}` handler should have a parameter annotated as "
1753
- "List[rx.UploadFile]"
1756
+ "list[rx.UploadFile]"
1754
1757
  )
1755
1758
 
1756
1759
  # Make a copy of the files as they are closed after the request.
@@ -7,7 +7,7 @@ import contextlib
7
7
  import dataclasses
8
8
  import functools
9
9
  import inspect
10
- from typing import Callable, Coroutine, Set, Union
10
+ from typing import Callable, Coroutine
11
11
 
12
12
  from fastapi import FastAPI
13
13
 
@@ -22,7 +22,7 @@ class LifespanMixin(AppMixin):
22
22
  """A Mixin that allow tasks to run during the whole app lifespan."""
23
23
 
24
24
  # Lifespan tasks that are planned to run.
25
- lifespan_tasks: Set[Union[asyncio.Task, Callable]] = dataclasses.field(
25
+ lifespan_tasks: set[asyncio.Task | Callable] = dataclasses.field(
26
26
  default_factory=set
27
27
  )
28
28
 
@@ -4,7 +4,6 @@ from __future__ import annotations
4
4
 
5
5
  import asyncio
6
6
  import dataclasses
7
- from typing import List
8
7
 
9
8
  from reflex.event import Event
10
9
  from reflex.middleware import HydrateMiddleware, Middleware
@@ -18,7 +17,7 @@ class MiddlewareMixin(AppMixin):
18
17
  """Middleware Mixin that allow to add middleware to the app."""
19
18
 
20
19
  # Middleware to add to the app. Users should use `add_middleware`. PRIVATE.
21
- middleware: List[Middleware] = dataclasses.field(default_factory=list)
20
+ middleware: list[Middleware] = dataclasses.field(default_factory=list)
22
21
 
23
22
  def _init_mixin(self):
24
23
  self.middleware.append(HydrateMiddleware())
@@ -2,7 +2,6 @@
2
2
 
3
3
  import inspect
4
4
  from pathlib import Path
5
- from typing import Optional
6
5
 
7
6
  from reflex import constants
8
7
  from reflex.config import EnvironmentVariables
@@ -11,7 +10,7 @@ from reflex.config import EnvironmentVariables
11
10
  def asset(
12
11
  path: str,
13
12
  shared: bool = False,
14
- subfolder: Optional[str] = None,
13
+ subfolder: str | None = None,
15
14
  _stack_level: int = 1,
16
15
  ) -> str:
17
16
  """Add an asset to the app, either shared as a symlink or local.
@@ -3,14 +3,14 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import os
6
- from typing import TYPE_CHECKING, Any, List, Type
6
+ from typing import TYPE_CHECKING, Any, Type
7
7
 
8
8
  import pydantic.v1.main as pydantic_main
9
9
  from pydantic.v1 import BaseModel
10
10
  from pydantic.v1.fields import ModelField
11
11
 
12
12
 
13
- def validate_field_name(bases: List[Type["BaseModel"]], field_name: str) -> None:
13
+ def validate_field_name(bases: list[Type["BaseModel"]], field_name: str) -> None:
14
14
  """Ensure that the field's name does not shadow an existing attribute of the model.
15
15
 
16
16
  Args: