reflex 0.8.15a2__tar.gz → 0.8.23a4__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.
Files changed (447) hide show
  1. {reflex-0.8.15a2 → reflex-0.8.23a4}/PKG-INFO +41 -12
  2. {reflex-0.8.15a2 → reflex-0.8.23a4}/README.md +37 -8
  3. {reflex-0.8.15a2 → reflex-0.8.23a4}/pyproject.toml +14 -11
  4. reflex-0.8.23a4/reflex/.templates/web/utils/helpers/paste.js +105 -0
  5. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/.templates/web/utils/state.js +20 -7
  6. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/__init__.py +1 -0
  7. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/__init__.pyi +2 -0
  8. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/app.py +111 -72
  9. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/app_mixins/lifespan.py +12 -5
  10. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/base.py +1 -0
  11. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/compiler/compiler.py +4 -6
  12. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/compiler/templates.py +44 -36
  13. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/compiler/utils.py +18 -10
  14. reflex-0.8.23a4/reflex/components/base/body.pyi +61 -0
  15. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/base/error_boundary.py +61 -43
  16. reflex-0.8.23a4/reflex/components/base/link.pyi +110 -0
  17. reflex-0.8.23a4/reflex/components/base/meta.pyi +165 -0
  18. reflex-0.8.23a4/reflex/components/base/script.pyi +66 -0
  19. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/component.py +52 -54
  20. reflex-0.8.23a4/reflex/components/core/auto_scroll.pyi +67 -0
  21. reflex-0.8.23a4/reflex/components/core/banner.pyi +330 -0
  22. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/core/breakpoints.py +14 -18
  23. reflex-0.8.23a4/reflex/components/core/html.pyi +66 -0
  24. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/core/match.py +2 -2
  25. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/core/sticky.py +11 -15
  26. reflex-0.8.23a4/reflex/components/core/sticky.pyi +313 -0
  27. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/core/upload.py +1 -3
  28. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/core/window_events.py +30 -9
  29. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/core/window_events.pyi +6 -5
  30. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/datadisplay/code.py +1 -1
  31. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/datadisplay/code.pyi +1 -0
  32. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/datadisplay/dataeditor.py +4 -6
  33. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/datadisplay/shiki_code_block.py +106 -110
  34. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/dynamic.py +4 -6
  35. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/el/__init__.py +2 -2
  36. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/el/elements/__init__.py +5 -7
  37. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/el/elements/__init__.pyi +5 -7
  38. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/el/elements/base.py +1 -1
  39. reflex-0.8.23a4/reflex/components/el/elements/base.pyi +139 -0
  40. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/el/elements/forms.py +7 -9
  41. reflex-0.8.23a4/reflex/components/el/elements/forms.pyi +1594 -0
  42. reflex-0.8.23a4/reflex/components/el/elements/inline.pyi +1426 -0
  43. reflex-0.8.23a4/reflex/components/el/elements/media.pyi +2550 -0
  44. reflex-0.8.23a4/reflex/components/el/elements/metadata.pyi +315 -0
  45. reflex-0.8.23a4/reflex/components/el/elements/other.pyi +364 -0
  46. reflex-0.8.23a4/reflex/components/el/elements/scripts.pyi +164 -0
  47. reflex-0.8.23a4/reflex/components/el/elements/sectioning.pyi +764 -0
  48. reflex-0.8.23a4/reflex/components/el/elements/tables.pyi +514 -0
  49. reflex-0.8.23a4/reflex/components/el/elements/typography.pyi +813 -0
  50. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/lucide/icon.py +32 -6
  51. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/lucide/icon.pyi +28 -6
  52. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/markdown/markdown.py +17 -21
  53. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/markdown/markdown.pyi +1 -0
  54. reflex-0.8.23a4/reflex/components/moment/moment.pyi +78 -0
  55. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/plotly/plotly.py +12 -12
  56. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/props.py +3 -3
  57. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/primitives/accordion.py +4 -6
  58. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/primitives/accordion.pyi +0 -14
  59. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/primitives/base.pyi +0 -5
  60. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/primitives/dialog.py +14 -1
  61. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/primitives/dialog.pyi +1 -233
  62. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/primitives/drawer.pyi +0 -18
  63. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/primitives/form.pyi +30 -632
  64. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/primitives/progress.py +1 -1
  65. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/primitives/progress.pyi +0 -10
  66. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/primitives/slider.pyi +0 -10
  67. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/color_mode.pyi +1 -284
  68. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/alert_dialog.pyi +0 -207
  69. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/aspect_ratio.pyi +0 -2
  70. reflex-0.8.23a4/reflex/components/radix/themes/components/avatar.pyi +68 -0
  71. reflex-0.8.23a4/reflex/components/radix/themes/components/badge.pyi +67 -0
  72. reflex-0.8.15a2/reflex/components/radix/themes/components/skeleton.pyi → reflex-0.8.23a4/reflex/components/radix/themes/components/button.pyi +32 -35
  73. reflex-0.8.23a4/reflex/components/radix/themes/components/callout.pyi +275 -0
  74. reflex-0.8.23a4/reflex/components/radix/themes/components/card.pyi +67 -0
  75. reflex-0.8.23a4/reflex/components/radix/themes/components/checkbox.pyi +173 -0
  76. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/checkbox_cards.pyi +1 -96
  77. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/checkbox_group.pyi +1 -80
  78. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/context_menu.pyi +13 -321
  79. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/data_list.pyi +1 -107
  80. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/dialog.pyi +1 -210
  81. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/dropdown_menu.pyi +0 -209
  82. reflex-0.8.23a4/reflex/components/radix/themes/components/hover_card.pyi +225 -0
  83. reflex-0.8.23a4/reflex/components/radix/themes/components/icon_button.pyi +177 -0
  84. reflex-0.8.23a4/reflex/components/radix/themes/components/inset.pyi +69 -0
  85. reflex-0.8.23a4/reflex/components/radix/themes/components/popover.pyi +229 -0
  86. reflex-0.8.23a4/reflex/components/radix/themes/components/progress.pyi +63 -0
  87. reflex-0.8.23a4/reflex/components/radix/themes/components/radio.pyi +66 -0
  88. reflex-0.8.23a4/reflex/components/radix/themes/components/radio_cards.pyi +125 -0
  89. reflex-0.8.23a4/reflex/components/radix/themes/components/scroll_area.pyi +66 -0
  90. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/select.pyi +1 -376
  91. reflex-0.8.23a4/reflex/components/radix/themes/components/separator.pyi +68 -0
  92. reflex-0.8.23a4/reflex/components/radix/themes/components/skeleton.pyi +68 -0
  93. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/slider.py +3 -5
  94. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/spinner.pyi +0 -5
  95. reflex-0.8.23a4/reflex/components/radix/themes/components/switch.pyi +70 -0
  96. reflex-0.8.23a4/reflex/components/radix/themes/components/table.pyi +501 -0
  97. reflex-0.8.23a4/reflex/components/radix/themes/components/text_area.pyi +119 -0
  98. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/text_field.pyi +6 -392
  99. reflex-0.8.23a4/reflex/components/radix/themes/components/tooltip.pyi +76 -0
  100. reflex-0.8.23a4/reflex/components/radix/themes/layout/box.pyi +67 -0
  101. reflex-0.8.15a2/reflex/components/radix/themes/components/separator.pyi → reflex-0.8.23a4/reflex/components/radix/themes/layout/center.pyi +44 -73
  102. reflex-0.8.23a4/reflex/components/radix/themes/layout/container.pyi +70 -0
  103. reflex-0.8.23a4/reflex/components/radix/themes/layout/flex.pyi +118 -0
  104. reflex-0.8.23a4/reflex/components/radix/themes/layout/grid.pyi +141 -0
  105. reflex-0.8.23a4/reflex/components/radix/themes/layout/list.pyi +448 -0
  106. reflex-0.8.15a2/reflex/components/radix/themes/components/scroll_area.pyi → reflex-0.8.23a4/reflex/components/radix/themes/layout/section.pyi +11 -13
  107. reflex-0.8.23a4/reflex/components/radix/themes/layout/spacer.pyi +116 -0
  108. reflex-0.8.23a4/reflex/components/radix/themes/layout/stack.pyi +308 -0
  109. reflex-0.8.15a2/reflex/components/radix/themes/components/avatar.pyi → reflex-0.8.23a4/reflex/components/radix/themes/typography/blockquote.pyi +16 -19
  110. reflex-0.8.15a2/reflex/components/radix/themes/components/radio.pyi → reflex-0.8.23a4/reflex/components/radix/themes/typography/code.pyi +26 -13
  111. reflex-0.8.15a2/reflex/components/radix/themes/components/switch.pyi → reflex-0.8.23a4/reflex/components/radix/themes/typography/heading.pyi +40 -33
  112. reflex-0.8.15a2/reflex/components/radix/themes/components/progress.pyi → reflex-0.8.23a4/reflex/components/radix/themes/typography/link.pyi +51 -28
  113. reflex-0.8.23a4/reflex/components/radix/themes/typography/text.pyi +831 -0
  114. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/react_player/audio.pyi +1 -0
  115. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/react_player/react_player.py +4 -1
  116. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/react_player/react_player.pyi +1 -0
  117. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/react_player/video.pyi +1 -0
  118. reflex-0.8.23a4/reflex/components/react_router/dom.pyi +82 -0
  119. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/recharts/cartesian.py +12 -18
  120. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/recharts/general.py +12 -18
  121. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/recharts/recharts.py +2 -2
  122. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/config.py +4 -1
  123. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/constants/installer.py +9 -9
  124. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/custom_components/custom_components.py +6 -5
  125. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/environment.py +73 -7
  126. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/event.py +27 -16
  127. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/experimental/client_state.py +11 -12
  128. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/istate/data.py +29 -16
  129. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/istate/manager/__init__.py +56 -2
  130. reflex-0.8.23a4/reflex/istate/manager/disk.py +366 -0
  131. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/istate/manager/memory.py +13 -4
  132. reflex-0.8.23a4/reflex/istate/manager/redis.py +1064 -0
  133. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/istate/proxy.py +21 -19
  134. reflex-0.8.23a4/reflex/istate/shared.py +402 -0
  135. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/model.py +7 -2
  136. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/plugins/_screenshot.py +2 -2
  137. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/plugins/shared_tailwind.py +9 -14
  138. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/plugins/tailwind_v4.py +2 -2
  139. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/reflex.py +7 -9
  140. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/state.py +136 -58
  141. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/style.py +6 -6
  142. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/testing.py +58 -33
  143. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/utils/build.py +4 -2
  144. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/utils/codespaces.py +1 -1
  145. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/utils/compat.py +1 -0
  146. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/utils/console.py +2 -2
  147. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/utils/decorator.py +3 -3
  148. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/utils/format.py +20 -24
  149. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/utils/frontend_skeleton.py +2 -0
  150. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/utils/prerequisites.py +8 -3
  151. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/utils/processes.py +10 -5
  152. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/utils/pyi_generator.py +51 -57
  153. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/utils/serializers.py +1 -1
  154. reflex-0.8.23a4/reflex/utils/tasks.py +109 -0
  155. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/utils/telemetry.py +1 -1
  156. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/utils/templates.py +4 -4
  157. reflex-0.8.23a4/reflex/utils/token_manager.py +467 -0
  158. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/utils/types.py +47 -15
  159. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/vars/base.py +35 -32
  160. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/vars/color.py +6 -8
  161. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/vars/dep_tracking.py +168 -25
  162. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/vars/function.py +3 -3
  163. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/vars/object.py +9 -13
  164. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/vars/sequence.py +18 -24
  165. reflex-0.8.15a2/reflex/.templates/web/utils/helpers/paste.js +0 -59
  166. reflex-0.8.15a2/reflex/components/base/body.pyi +0 -255
  167. reflex-0.8.15a2/reflex/components/base/link.pyi +0 -516
  168. reflex-0.8.15a2/reflex/components/base/meta.pyi +0 -569
  169. reflex-0.8.15a2/reflex/components/base/script.pyi +0 -302
  170. reflex-0.8.15a2/reflex/components/core/auto_scroll.pyi +0 -261
  171. reflex-0.8.15a2/reflex/components/core/banner.pyi +0 -720
  172. reflex-0.8.15a2/reflex/components/core/html.pyi +0 -262
  173. reflex-0.8.15a2/reflex/components/core/sticky.pyi +0 -1101
  174. reflex-0.8.15a2/reflex/components/el/elements/base.pyi +0 -333
  175. reflex-0.8.15a2/reflex/components/el/elements/forms.pyi +0 -4694
  176. reflex-0.8.15a2/reflex/components/el/elements/inline.pyi +0 -6907
  177. reflex-0.8.15a2/reflex/components/el/elements/media.pyi +0 -12830
  178. reflex-0.8.15a2/reflex/components/el/elements/metadata.pyi +0 -1149
  179. reflex-0.8.15a2/reflex/components/el/elements/other.pyi +0 -1728
  180. reflex-0.8.15a2/reflex/components/el/elements/scripts.pyi +0 -788
  181. reflex-0.8.15a2/reflex/components/el/elements/sectioning.pyi +0 -3674
  182. reflex-0.8.15a2/reflex/components/el/elements/tables.pyi +0 -2486
  183. reflex-0.8.15a2/reflex/components/el/elements/typography.pyi +0 -3937
  184. reflex-0.8.15a2/reflex/components/moment/moment.pyi +0 -127
  185. reflex-0.8.15a2/reflex/components/radix/themes/components/badge.pyi +0 -336
  186. reflex-0.8.15a2/reflex/components/radix/themes/components/button.pyi +0 -368
  187. reflex-0.8.15a2/reflex/components/radix/themes/components/callout.pyi +0 -1472
  188. reflex-0.8.15a2/reflex/components/radix/themes/components/card.pyi +0 -275
  189. reflex-0.8.15a2/reflex/components/radix/themes/components/checkbox.pyi +0 -434
  190. reflex-0.8.15a2/reflex/components/radix/themes/components/hover_card.pyi +0 -470
  191. reflex-0.8.15a2/reflex/components/radix/themes/components/icon_button.pyi +0 -371
  192. reflex-0.8.15a2/reflex/components/radix/themes/components/inset.pyi +0 -321
  193. reflex-0.8.15a2/reflex/components/radix/themes/components/popover.pyi +0 -462
  194. reflex-0.8.15a2/reflex/components/radix/themes/components/radio_cards.pyi +0 -247
  195. reflex-0.8.15a2/reflex/components/radix/themes/components/table.pyi +0 -1954
  196. reflex-0.8.15a2/reflex/components/radix/themes/components/text_area.pyi +0 -394
  197. reflex-0.8.15a2/reflex/components/radix/themes/components/tooltip.pyi +0 -118
  198. reflex-0.8.15a2/reflex/components/radix/themes/layout/box.pyi +0 -261
  199. reflex-0.8.15a2/reflex/components/radix/themes/layout/center.pyi +0 -310
  200. reflex-0.8.15a2/reflex/components/radix/themes/layout/container.pyi +0 -248
  201. reflex-0.8.15a2/reflex/components/radix/themes/layout/flex.pyi +0 -312
  202. reflex-0.8.15a2/reflex/components/radix/themes/layout/grid.pyi +0 -335
  203. reflex-0.8.15a2/reflex/components/radix/themes/layout/list.pyi +0 -1426
  204. reflex-0.8.15a2/reflex/components/radix/themes/layout/section.pyi +0 -268
  205. reflex-0.8.15a2/reflex/components/radix/themes/layout/spacer.pyi +0 -310
  206. reflex-0.8.15a2/reflex/components/radix/themes/layout/stack.pyi +0 -890
  207. reflex-0.8.15a2/reflex/components/radix/themes/typography/blockquote.pyi +0 -341
  208. reflex-0.8.15a2/reflex/components/radix/themes/typography/code.pyi +0 -344
  209. reflex-0.8.15a2/reflex/components/radix/themes/typography/heading.pyi +0 -360
  210. reflex-0.8.15a2/reflex/components/radix/themes/typography/link.pyi +0 -406
  211. reflex-0.8.15a2/reflex/components/radix/themes/typography/text.pyi +0 -2191
  212. reflex-0.8.15a2/reflex/components/react_router/dom.pyi +0 -319
  213. reflex-0.8.15a2/reflex/istate/manager/disk.py +0 -210
  214. reflex-0.8.15a2/reflex/istate/manager/redis.py +0 -491
  215. reflex-0.8.15a2/reflex/utils/token_manager.py +0 -225
  216. {reflex-0.8.15a2 → reflex-0.8.23a4}/.gitignore +0 -0
  217. {reflex-0.8.15a2 → reflex-0.8.23a4}/LICENSE +0 -0
  218. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/.templates/apps/blank/assets/favicon.ico +0 -0
  219. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/.templates/apps/blank/code/__init__.py +0 -0
  220. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/.templates/apps/blank/code/blank.py +0 -0
  221. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/.templates/web/.gitignore +0 -0
  222. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/.templates/web/app/entry.client.js +0 -0
  223. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/.templates/web/app/routes.js +0 -0
  224. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +0 -0
  225. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/.templates/web/components/shiki/code.js +0 -0
  226. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/.templates/web/jsconfig.json +0 -0
  227. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/.templates/web/postcss.config.js +0 -0
  228. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/.templates/web/react-router.config.js +0 -0
  229. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/.templates/web/styles/__reflex_style_reset.css +0 -0
  230. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/.templates/web/utils/helpers/dataeditor.js +0 -0
  231. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/.templates/web/utils/helpers/debounce.js +0 -0
  232. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/.templates/web/utils/helpers/range.js +0 -0
  233. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/.templates/web/utils/helpers/throttle.js +0 -0
  234. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/.templates/web/utils/helpers/upload.js +0 -0
  235. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/.templates/web/utils/react-theme.js +0 -0
  236. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/.templates/web/vite-plugin-safari-cachebust.js +0 -0
  237. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/__main__.py +0 -0
  238. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/admin.py +0 -0
  239. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/app_mixins/__init__.py +0 -0
  240. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/app_mixins/middleware.py +0 -0
  241. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/app_mixins/mixin.py +0 -0
  242. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/assets.py +0 -0
  243. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/compiler/__init__.py +0 -0
  244. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/__init__.py +0 -0
  245. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/__init__.pyi +0 -0
  246. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/base/__init__.py +0 -0
  247. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/base/__init__.pyi +0 -0
  248. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/base/app_wrap.py +0 -0
  249. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/base/app_wrap.pyi +0 -0
  250. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/base/bare.py +0 -0
  251. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/base/body.py +0 -0
  252. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/base/document.py +0 -0
  253. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/base/document.pyi +0 -0
  254. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/base/error_boundary.pyi +0 -0
  255. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/base/fragment.py +0 -0
  256. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/base/fragment.pyi +0 -0
  257. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/base/link.py +0 -0
  258. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/base/meta.py +0 -0
  259. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/base/script.py +0 -0
  260. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/base/strict_mode.py +0 -0
  261. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/base/strict_mode.pyi +0 -0
  262. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/core/__init__.py +0 -0
  263. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/core/__init__.pyi +0 -0
  264. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/core/auto_scroll.py +0 -0
  265. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/core/banner.py +0 -0
  266. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/core/clipboard.py +0 -0
  267. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/core/clipboard.pyi +0 -0
  268. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/core/colors.py +0 -0
  269. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/core/cond.py +0 -0
  270. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/core/debounce.py +0 -0
  271. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/core/debounce.pyi +0 -0
  272. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/core/foreach.py +0 -0
  273. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/core/helmet.py +0 -0
  274. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/core/helmet.pyi +0 -0
  275. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/core/html.py +0 -0
  276. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/core/layout/__init__.py +0 -0
  277. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/core/responsive.py +0 -0
  278. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/core/upload.pyi +0 -0
  279. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/datadisplay/__init__.py +0 -0
  280. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/datadisplay/__init__.pyi +0 -0
  281. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/datadisplay/dataeditor.pyi +0 -0
  282. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/datadisplay/logo.py +0 -0
  283. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/datadisplay/shiki_code_block.pyi +0 -0
  284. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/el/__init__.pyi +0 -0
  285. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/el/element.py +0 -0
  286. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/el/element.pyi +0 -0
  287. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/el/elements/inline.py +0 -0
  288. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/el/elements/media.py +0 -0
  289. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/el/elements/metadata.py +0 -0
  290. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/el/elements/other.py +0 -0
  291. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/el/elements/scripts.py +0 -0
  292. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/el/elements/sectioning.py +0 -0
  293. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/el/elements/tables.py +0 -0
  294. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/el/elements/typography.py +0 -0
  295. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/field.py +0 -0
  296. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/gridjs/__init__.py +0 -0
  297. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/gridjs/datatable.py +0 -0
  298. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/gridjs/datatable.pyi +0 -0
  299. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/literals.py +0 -0
  300. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/lucide/__init__.py +0 -0
  301. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/markdown/__init__.py +0 -0
  302. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/moment/__init__.py +0 -0
  303. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/moment/moment.py +0 -0
  304. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/plotly/__init__.py +0 -0
  305. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/plotly/plotly.pyi +0 -0
  306. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/__init__.py +0 -0
  307. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/__init__.pyi +0 -0
  308. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/primitives/__init__.py +0 -0
  309. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/primitives/__init__.pyi +0 -0
  310. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/primitives/base.py +0 -0
  311. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/primitives/drawer.py +0 -0
  312. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/primitives/form.py +0 -0
  313. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/primitives/slider.py +0 -0
  314. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/__init__.py +0 -0
  315. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/__init__.pyi +0 -0
  316. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/base.py +0 -0
  317. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/base.pyi +0 -0
  318. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/color_mode.py +0 -0
  319. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/__init__.py +0 -0
  320. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/__init__.pyi +0 -0
  321. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/alert_dialog.py +0 -0
  322. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/aspect_ratio.py +0 -0
  323. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/avatar.py +0 -0
  324. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/badge.py +0 -0
  325. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/button.py +0 -0
  326. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/callout.py +0 -0
  327. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/card.py +0 -0
  328. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/checkbox.py +0 -0
  329. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/checkbox_cards.py +0 -0
  330. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/checkbox_group.py +0 -0
  331. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/context_menu.py +0 -0
  332. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/data_list.py +0 -0
  333. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/dialog.py +0 -0
  334. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/dropdown_menu.py +0 -0
  335. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/hover_card.py +0 -0
  336. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/icon_button.py +0 -0
  337. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/inset.py +0 -0
  338. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/popover.py +0 -0
  339. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/progress.py +0 -0
  340. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/radio.py +0 -0
  341. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/radio_cards.py +0 -0
  342. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/radio_group.py +0 -0
  343. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/radio_group.pyi +0 -0
  344. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/scroll_area.py +0 -0
  345. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/segmented_control.py +0 -0
  346. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/segmented_control.pyi +0 -0
  347. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/select.py +0 -0
  348. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/separator.py +0 -0
  349. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/skeleton.py +0 -0
  350. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/slider.pyi +0 -0
  351. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/spinner.py +0 -0
  352. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/switch.py +0 -0
  353. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/table.py +0 -0
  354. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/tabs.py +0 -0
  355. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/tabs.pyi +0 -0
  356. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/text_area.py +0 -0
  357. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/text_field.py +0 -0
  358. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/components/tooltip.py +0 -0
  359. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/layout/__init__.py +0 -0
  360. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/layout/__init__.pyi +0 -0
  361. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/layout/base.py +0 -0
  362. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/layout/base.pyi +0 -0
  363. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/layout/box.py +0 -0
  364. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/layout/center.py +0 -0
  365. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/layout/container.py +0 -0
  366. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/layout/flex.py +0 -0
  367. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/layout/grid.py +0 -0
  368. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/layout/list.py +0 -0
  369. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/layout/section.py +0 -0
  370. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/layout/spacer.py +0 -0
  371. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/layout/stack.py +0 -0
  372. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/typography/__init__.py +0 -0
  373. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/typography/__init__.pyi +0 -0
  374. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/typography/base.py +0 -0
  375. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/typography/blockquote.py +0 -0
  376. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/typography/code.py +0 -0
  377. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/typography/heading.py +0 -0
  378. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/typography/link.py +0 -0
  379. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/radix/themes/typography/text.py +0 -0
  380. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/react_player/__init__.py +0 -0
  381. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/react_player/audio.py +0 -0
  382. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/react_player/video.py +0 -0
  383. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/react_router/__init__.py +0 -0
  384. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/react_router/dom.py +0 -0
  385. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/recharts/__init__.py +0 -0
  386. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/recharts/__init__.pyi +0 -0
  387. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/recharts/cartesian.pyi +0 -0
  388. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/recharts/charts.py +0 -0
  389. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/recharts/charts.pyi +0 -0
  390. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/recharts/general.pyi +0 -0
  391. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/recharts/polar.py +0 -0
  392. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/recharts/polar.pyi +0 -0
  393. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/recharts/recharts.pyi +0 -0
  394. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/sonner/__init__.py +0 -0
  395. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/sonner/toast.py +0 -0
  396. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/sonner/toast.pyi +0 -0
  397. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/tags/__init__.py +0 -0
  398. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/tags/cond_tag.py +0 -0
  399. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/tags/iter_tag.py +0 -0
  400. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/tags/match_tag.py +0 -0
  401. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/tags/tag.py +0 -0
  402. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/components/tags/tagless.py +0 -0
  403. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/constants/__init__.py +0 -0
  404. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/constants/base.py +0 -0
  405. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/constants/colors.py +0 -0
  406. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/constants/compiler.py +0 -0
  407. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/constants/config.py +0 -0
  408. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/constants/custom_components.py +0 -0
  409. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/constants/event.py +0 -0
  410. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/constants/route.py +0 -0
  411. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/constants/state.py +0 -0
  412. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/constants/utils.py +0 -0
  413. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/custom_components/__init__.py +0 -0
  414. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/experimental/__init__.py +0 -0
  415. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/experimental/hooks.py +0 -0
  416. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/istate/__init__.py +0 -0
  417. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/istate/dynamic.py +0 -0
  418. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/istate/storage.py +0 -0
  419. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/istate/wrappers.py +0 -0
  420. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/middleware/__init__.py +0 -0
  421. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/middleware/hydrate_middleware.py +0 -0
  422. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/middleware/middleware.py +0 -0
  423. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/page.py +0 -0
  424. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/plugins/__init__.py +0 -0
  425. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/plugins/base.py +0 -0
  426. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/plugins/sitemap.py +0 -0
  427. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/plugins/tailwind_v3.py +0 -0
  428. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/py.typed +0 -0
  429. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/route.py +0 -0
  430. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/utils/__init__.py +0 -0
  431. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/utils/exceptions.py +0 -0
  432. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/utils/exec.py +0 -0
  433. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/utils/export.py +0 -0
  434. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/utils/imports.py +0 -0
  435. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/utils/js_runtimes.py +0 -0
  436. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/utils/lazy_loader.py +0 -0
  437. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/utils/misc.py +0 -0
  438. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/utils/monitoring.py +0 -0
  439. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/utils/net.py +0 -0
  440. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/utils/path_ops.py +0 -0
  441. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/utils/redir.py +0 -0
  442. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/utils/registry.py +0 -0
  443. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/utils/rename.py +0 -0
  444. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/vars/__init__.py +0 -0
  445. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/vars/datetime.py +0 -0
  446. {reflex-0.8.15a2 → reflex-0.8.23a4}/reflex/vars/number.py +0 -0
  447. {reflex-0.8.15a2 → reflex-0.8.23a4}/scripts/hatch_build.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: reflex
3
- Version: 0.8.15a2
3
+ Version: 0.8.23a4
4
4
  Summary: Web apps in pure Python.
5
5
  Project-URL: homepage, https://reflex.dev
6
6
  Project-URL: repository, https://github.com/reflex-dev/reflex
@@ -30,13 +30,13 @@ Requires-Dist: psutil<8.0,>=7.0.0; sys_platform == 'win32'
30
30
  Requires-Dist: pydantic<3.0,>=1.10.21
31
31
  Requires-Dist: python-multipart<1.0,>=0.0.20
32
32
  Requires-Dist: python-socketio<6.0,>=5.12.0
33
- Requires-Dist: redis<7.0,>=5.2.1
34
- Requires-Dist: reflex-hosting-cli>=0.1.55
33
+ Requires-Dist: redis<8.0,>=5.2.1
34
+ Requires-Dist: reflex-hosting-cli>=0.1.59
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.15a2"
3
+ version = "0.8.23a4"
4
4
  description = "Web apps in pure Python."
5
5
  license.text = "Apache-2.0"
6
6
  authors = [
@@ -30,13 +30,13 @@ dependencies = [
30
30
  "pydantic >=1.10.21,<3.0",
31
31
  "python-multipart >=0.0.20,<1.0",
32
32
  "python-socketio >=5.12.0,<6.0",
33
- "redis >=5.2.1,<7.0",
34
- "reflex-hosting-cli >=0.1.55",
33
+ "redis >=5.2.1,<8.0",
34
+ "reflex-hosting-cli >=0.1.59",
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 = [
@@ -123,6 +123,7 @@ reportIncompatibleMethodOverride = false
123
123
  target-version = "py310"
124
124
  output-format = "concise"
125
125
  lint.isort.split-on-trailing-comma = false
126
+ preview = true
126
127
  lint.select = ["ALL"]
127
128
  lint.ignore = [
128
129
  "A",
@@ -134,12 +135,18 @@ lint.ignore = [
134
135
  "BLE",
135
136
  "C901",
136
137
  "COM",
138
+ "CPY001",
137
139
  "D205",
140
+ "DOC202",
141
+ "DOC501",
142
+ "DOC502",
138
143
  "DTZ",
139
144
  "E501",
140
145
  "F403",
141
146
  "FBT",
142
147
  "FIX",
148
+ "FURB189",
149
+ "FURB140",
143
150
  "G004",
144
151
  "ISC003",
145
152
  "PLC",
@@ -180,6 +187,7 @@ lint.flake8-bugbear.extend-immutable-calls = [
180
187
  "*.pyi" = ["D301", "D415", "D417", "D418", "E742", "N", "PGH"]
181
188
  "pyi_generator.py" = ["N802"]
182
189
  "reflex/constants/*.py" = ["N"]
190
+ "reflex/.templates/apps/blank/code/*" = ["INP001"]
183
191
  "*/blank.py" = ["I001"]
184
192
 
185
193
  [tool.pytest.ini_options]
@@ -235,7 +243,7 @@ fail_fast = true
235
243
 
236
244
  [[tool.pre-commit.repos]]
237
245
  repo = "https://github.com/astral-sh/ruff-pre-commit"
238
- rev = "v0.13.3"
246
+ rev = "v0.14.8"
239
247
  hooks = [
240
248
  { id = "ruff-format", args = [
241
249
  "reflex",
@@ -267,14 +275,9 @@ hooks = [
267
275
 
268
276
  [[tool.pre-commit.repos]]
269
277
  repo = "https://github.com/RobertCraigie/pyright-python"
270
- rev = "v1.1.406"
278
+ rev = "v1.1.407"
271
279
  hooks = [{ id = "pyright", args = ["reflex", "tests"], language = "system" }]
272
280
 
273
- [[tool.pre-commit.repos]]
274
- repo = "https://github.com/terrencepreilly/darglint"
275
- rev = "v1.8.1"
276
- hooks = [{ id = "darglint", exclude = "^reflex/reflex.py" }]
277
-
278
281
  [[tool.pre-commit.repos]]
279
282
  repo = "https://github.com/pre-commit/mirrors-prettier"
280
283
  rev = "f62a70a3a7114896b062de517d72829ea1c884b6"
@@ -0,0 +1,105 @@
1
+ import { useEffect, useRef } from "react";
2
+
3
+ const handle_paste_data = (clipboardData) =>
4
+ new Promise((resolve, reject) => {
5
+ const pasted_data = [];
6
+ const n_items = clipboardData.items.length;
7
+ const extract_data = (item) => {
8
+ const type = item.type;
9
+ if (item.kind === "string") {
10
+ item.getAsString((data) => {
11
+ pasted_data.push([type, data]);
12
+ if (pasted_data.length === n_items) {
13
+ resolve(pasted_data);
14
+ }
15
+ });
16
+ } else if (item.kind === "file") {
17
+ const file = item.getAsFile();
18
+ const reader = new FileReader();
19
+ reader.onload = (e) => {
20
+ pasted_data.push([type, e.target.result]);
21
+ if (pasted_data.length === n_items) {
22
+ resolve(pasted_data);
23
+ }
24
+ };
25
+ if (type.indexOf("text/") === 0) {
26
+ reader.readAsText(file);
27
+ } else {
28
+ reader.readAsDataURL(file);
29
+ }
30
+ }
31
+ };
32
+ for (const item of clipboardData.items) {
33
+ extract_data(item);
34
+ }
35
+ });
36
+
37
+ export default function usePasteHandler(target_ids, event_actions, on_paste) {
38
+ const onPasteRef = useRef(on_paste);
39
+ const eventActionsRef = useRef(event_actions);
40
+
41
+ useEffect(() => {
42
+ onPasteRef.current = on_paste;
43
+ }, [on_paste]);
44
+ useEffect(() => {
45
+ eventActionsRef.current = event_actions;
46
+ }, [event_actions]);
47
+
48
+ useEffect(() => {
49
+ const handle_paste = (_ev) => {
50
+ eventActionsRef.current?.preventDefault && _ev.preventDefault();
51
+ eventActionsRef.current?.stopPropagation && _ev.stopPropagation();
52
+ handle_paste_data(_ev.clipboardData).then(onPasteRef.current);
53
+ };
54
+
55
+ let cleanupListeners = null;
56
+ let observer = null;
57
+
58
+ const attachListeners = (targets) => {
59
+ targets.forEach((target) =>
60
+ target.addEventListener("paste", handle_paste, false),
61
+ );
62
+ return () => {
63
+ targets.forEach((target) =>
64
+ target.removeEventListener("paste", handle_paste, false),
65
+ );
66
+ };
67
+ };
68
+
69
+ const tryAttach = () => {
70
+ if (target_ids.length === 0) {
71
+ cleanupListeners = attachListeners([document]);
72
+ return true;
73
+ }
74
+ const targets = target_ids
75
+ .map((id) => document.getElementById(id))
76
+ .filter((element) => !!element);
77
+
78
+ if (targets.length === target_ids.length) {
79
+ cleanupListeners = attachListeners(targets);
80
+ return true;
81
+ }
82
+
83
+ return false;
84
+ };
85
+
86
+ if (!tryAttach()) {
87
+ observer = new MutationObserver(() => {
88
+ if (tryAttach()) {
89
+ observer.disconnect();
90
+ observer = null;
91
+ }
92
+ });
93
+ observer.observe(document.body, { childList: true, subtree: true });
94
+ }
95
+
96
+ return () => {
97
+ if (observer) {
98
+ observer.disconnect();
99
+ }
100
+ if (cleanupListeners) {
101
+ cleanupListeners();
102
+ }
103
+ };
104
+ }, [target_ids]);
105
+ }
@@ -56,10 +56,10 @@ export const generateUUID = () => {
56
56
  return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
57
57
  let r = Math.random() * 16;
58
58
  if (d > 0) {
59
- r = (d + r) % 16 | 0;
59
+ r = ((d + r) % 16) | 0;
60
60
  d = Math.floor(d / 16);
61
61
  } else {
62
- r = (d2 + r) % 16 | 0;
62
+ r = ((d2 + r) % 16) | 0;
63
63
  d2 = Math.floor(d2 / 16);
64
64
  }
65
65
  return (c == "x" ? r : (r & 0x7) | 0x8).toString(16);
@@ -176,7 +176,7 @@ export const queueEventIfSocketExists = async (
176
176
  if (!socket) {
177
177
  return;
178
178
  }
179
- await queueEvents(events, socket, navigate, params);
179
+ await queueEvents(events, socket, false, navigate, params);
180
180
  };
181
181
 
182
182
  /**
@@ -256,13 +256,13 @@ export const applyEvent = async (event, socket, navigate, params) => {
256
256
 
257
257
  if (event.name == "_clear_session_storage") {
258
258
  sessionStorage.clear();
259
- queueEvents(initialEvents(), socket, navigate, params);
259
+ queueEventIfSocketExists(initialEvents(), socket, navigate, params);
260
260
  return false;
261
261
  }
262
262
 
263
263
  if (event.name == "_remove_session_storage") {
264
264
  sessionStorage.removeItem(event.payload.key);
265
- queueEvents(initialEvents(), socket, navigate, params);
265
+ queueEventIfSocketExists(initialEvents(), socket, navigate, params);
266
266
  return false;
267
267
  }
268
268
 
@@ -568,6 +568,7 @@ export const connect = async (
568
568
  !socket.current.wait_connect
569
569
  ) {
570
570
  socket.current.wait_connect = true;
571
+ socket.current.rehydrate = true;
571
572
  socket.current.io.opts.query = { token: getToken() }; // Update token for reconnect.
572
573
  socket.current.connect();
573
574
  }
@@ -615,6 +616,16 @@ export const connect = async (
615
616
  window.addEventListener("pagehide", pagehideHandler);
616
617
  window.addEventListener("beforeunload", disconnectTrigger);
617
618
  window.addEventListener("unload", disconnectTrigger);
619
+ if (socket.current.rehydrate) {
620
+ socket.current.rehydrate = false;
621
+ queueEvents(
622
+ initialEvents(),
623
+ socket,
624
+ true,
625
+ navigate,
626
+ () => params.current,
627
+ );
628
+ }
618
629
  // Drain any initial events from the queue.
619
630
  while (event_queue.length > 0 && !event_processing) {
620
631
  await processEvent(socket.current, navigate, () => params.current);
@@ -665,7 +676,9 @@ export const connect = async (
665
676
  }
666
677
  }
667
678
  applyClientStorageDelta(client_storage, update.delta);
668
- event_processing = !update.final;
679
+ if (update.final !== null) {
680
+ event_processing = !update.final;
681
+ }
669
682
  if (update.events) {
670
683
  queueEvents(update.events, socket, false, navigate, params);
671
684
  }
@@ -852,7 +865,7 @@ export const useEventLoop = (
852
865
  await connect(
853
866
  socket,
854
867
  dispatch,
855
- ["websocket"],
868
+ [env.TRANSPORT],
856
869
  setConnectErrors,
857
870
  client_storage,
858
871
  navigate,
@@ -336,6 +336,7 @@ _MAPPING: dict = {
336
336
  "State",
337
337
  "dynamic",
338
338
  ],
339
+ "istate.shared": ["SharedState"],
339
340
  "istate.wrappers": ["get_state"],
340
341
  "style": ["Style", "toggle_color_mode"],
341
342
  "utils.imports": ["ImportDict", "ImportVar"],
@@ -148,6 +148,7 @@ from .event import (
148
148
  window_alert,
149
149
  )
150
150
  from .experimental import _x
151
+ from .istate.shared import SharedState
151
152
  from .istate.storage import Cookie, LocalStorage, SessionStorage
152
153
  from .istate.wrappers import get_state
153
154
  from .middleware import Middleware, middleware
@@ -205,6 +206,7 @@ __all__ = [
205
206
  "PropsBase",
206
207
  "Script",
207
208
  "SessionStorage",
209
+ "SharedState",
208
210
  "State",
209
211
  "Style",
210
212
  "UploadFile",