reflex 0.5.0a3__tar.gz → 0.5.1__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 (523) hide show
  1. {reflex-0.5.0a3 → reflex-0.5.1}/PKG-INFO +1 -1
  2. {reflex-0.5.0a3 → reflex-0.5.1}/pyproject.toml +1 -1
  3. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/web/utils/state.js +7 -2
  4. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/app.py +68 -50
  5. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/app_module_for_backend.py +3 -0
  6. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/base.py +5 -2
  7. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/component.py +49 -13
  8. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/core/__init__.py +7 -1
  9. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/core/banner.py +79 -6
  10. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/core/banner.pyi +130 -0
  11. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/core/cond.py +10 -4
  12. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/core/debounce.py +2 -4
  13. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/core/foreach.py +11 -0
  14. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/core/upload.py +9 -10
  15. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/el/elements/forms.py +12 -6
  16. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/el/elements/media.py +19 -0
  17. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/el/elements/media.pyi +3 -1
  18. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/gridjs/datatable.py +4 -2
  19. reflex-0.5.1/reflex/components/props.py +30 -0
  20. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/tabs.py +1 -1
  21. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/sonner/toast.py +102 -35
  22. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/sonner/toast.pyi +27 -14
  23. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/config.py +5 -3
  24. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/constants/compiler.py +3 -3
  25. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/constants/installer.py +1 -1
  26. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/event.py +38 -24
  27. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/experimental/__init__.py +4 -0
  28. reflex-0.5.1/reflex/experimental/client_state.py +198 -0
  29. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/state.py +59 -21
  30. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/style.py +3 -3
  31. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/testing.py +28 -9
  32. reflex-0.5.1/reflex/utils/exceptions.py +77 -0
  33. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/utils/format.py +73 -2
  34. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/utils/prerequisites.py +68 -23
  35. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/utils/processes.py +34 -4
  36. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/utils/telemetry.py +42 -16
  37. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/utils/types.py +16 -0
  38. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/vars.py +104 -61
  39. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/vars.pyi +7 -6
  40. reflex-0.5.0a3/reflex/utils/exceptions.py +0 -21
  41. {reflex-0.5.0a3 → reflex-0.5.1}/LICENSE +0 -0
  42. {reflex-0.5.0a3 → reflex-0.5.1}/README.md +0 -0
  43. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/apps/blank/assets/favicon.ico +0 -0
  44. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/apps/blank/code/__init__.py +0 -0
  45. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/apps/blank/code/blank.py +0 -0
  46. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/apps/demo/.gitignore +0 -0
  47. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/apps/demo/assets/favicon.ico +0 -0
  48. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/apps/demo/assets/github.svg +0 -0
  49. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/apps/demo/assets/icon.svg +0 -0
  50. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/apps/demo/assets/logo.svg +0 -0
  51. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/apps/demo/assets/paneleft.svg +0 -0
  52. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/apps/demo/code/__init__.py +0 -0
  53. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/apps/demo/code/demo.py +0 -0
  54. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/apps/demo/code/pages/__init__.py +0 -0
  55. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/apps/demo/code/pages/chatapp.py +0 -0
  56. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/apps/demo/code/pages/datatable.py +0 -0
  57. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/apps/demo/code/pages/forms.py +0 -0
  58. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/apps/demo/code/pages/graphing.py +0 -0
  59. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/apps/demo/code/pages/home.py +0 -0
  60. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/apps/demo/code/sidebar.py +0 -0
  61. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/apps/demo/code/state.py +0 -0
  62. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/apps/demo/code/states/form_state.py +0 -0
  63. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/apps/demo/code/states/pie_state.py +0 -0
  64. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/apps/demo/code/styles.py +0 -0
  65. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/apps/demo/code/webui/__init__.py +0 -0
  66. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/apps/demo/code/webui/components/__init__.py +0 -0
  67. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/apps/demo/code/webui/components/chat.py +0 -0
  68. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/apps/demo/code/webui/components/loading_icon.py +0 -0
  69. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/apps/demo/code/webui/components/modal.py +0 -0
  70. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/apps/demo/code/webui/components/navbar.py +0 -0
  71. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/apps/demo/code/webui/components/sidebar.py +0 -0
  72. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/apps/demo/code/webui/state.py +0 -0
  73. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/apps/demo/code/webui/styles.py +0 -0
  74. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/jinja/app/rxconfig.py.jinja2 +0 -0
  75. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/jinja/custom_components/README.md.jinja2 +0 -0
  76. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/jinja/custom_components/__init__.py.jinja2 +0 -0
  77. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/jinja/custom_components/demo_app.py.jinja2 +0 -0
  78. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/jinja/custom_components/pyproject.toml.jinja2 +0 -0
  79. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/jinja/custom_components/src.py.jinja2 +0 -0
  80. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/jinja/web/package.json.jinja2 +0 -0
  81. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/jinja/web/pages/_app.js.jinja2 +0 -0
  82. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/jinja/web/pages/_document.js.jinja2 +0 -0
  83. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/jinja/web/pages/base_page.js.jinja2 +0 -0
  84. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/jinja/web/pages/component.js.jinja2 +0 -0
  85. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/jinja/web/pages/custom_component.js.jinja2 +0 -0
  86. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/jinja/web/pages/index.js.jinja2 +0 -0
  87. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/jinja/web/pages/stateful_component.js.jinja2 +0 -0
  88. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/jinja/web/pages/stateful_components.js.jinja2 +0 -0
  89. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/jinja/web/pages/utils.js.jinja2 +0 -0
  90. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/jinja/web/styles/styles.css.jinja2 +0 -0
  91. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/jinja/web/tailwind.config.js.jinja2 +0 -0
  92. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/jinja/web/utils/context.js.jinja2 +0 -0
  93. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/jinja/web/utils/theme.js.jinja2 +0 -0
  94. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/web/.gitignore +0 -0
  95. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/web/components/reflex/chakra_color_mode_provider.js +0 -0
  96. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +0 -0
  97. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/web/jsconfig.json +0 -0
  98. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/web/next.config.js +0 -0
  99. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/web/postcss.config.js +0 -0
  100. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/web/styles/tailwind.css +0 -0
  101. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/web/utils/client_side_routing.js +0 -0
  102. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/web/utils/helpers/dataeditor.js +0 -0
  103. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/web/utils/helpers/debounce.js +0 -0
  104. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/web/utils/helpers/range.js +0 -0
  105. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/.templates/web/utils/helpers/throttle.js +0 -0
  106. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/__init__.py +0 -0
  107. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/__init__.pyi +0 -0
  108. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/__main__.py +0 -0
  109. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/admin.py +0 -0
  110. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/compiler/__init__.py +0 -0
  111. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/compiler/compiler.py +0 -0
  112. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/compiler/templates.py +0 -0
  113. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/compiler/utils.py +0 -0
  114. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/__init__.py +0 -0
  115. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/base/__init__.py +0 -0
  116. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/base/app_wrap.py +0 -0
  117. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/base/app_wrap.pyi +0 -0
  118. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/base/bare.py +0 -0
  119. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/base/body.py +0 -0
  120. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/base/body.pyi +0 -0
  121. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/base/document.py +0 -0
  122. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/base/document.pyi +0 -0
  123. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/base/fragment.py +0 -0
  124. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/base/fragment.pyi +0 -0
  125. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/base/head.py +0 -0
  126. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/base/head.pyi +0 -0
  127. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/base/link.py +0 -0
  128. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/base/link.pyi +0 -0
  129. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/base/meta.py +0 -0
  130. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/base/meta.pyi +0 -0
  131. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/base/script.py +0 -0
  132. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/base/script.pyi +0 -0
  133. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/__init__.py +0 -0
  134. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/base.py +0 -0
  135. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/base.pyi +0 -0
  136. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/datadisplay/__init__.py +0 -0
  137. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/datadisplay/badge.py +0 -0
  138. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/datadisplay/badge.pyi +0 -0
  139. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/datadisplay/code.py +0 -0
  140. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/datadisplay/code.pyi +0 -0
  141. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/datadisplay/divider.py +0 -0
  142. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/datadisplay/divider.pyi +0 -0
  143. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/datadisplay/keyboard_key.py +0 -0
  144. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/datadisplay/keyboard_key.pyi +0 -0
  145. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/datadisplay/list.py +0 -0
  146. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/datadisplay/list.pyi +0 -0
  147. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/datadisplay/stat.py +0 -0
  148. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/datadisplay/stat.pyi +0 -0
  149. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/datadisplay/table.py +0 -0
  150. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/datadisplay/table.pyi +0 -0
  151. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/datadisplay/tag.py +0 -0
  152. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/datadisplay/tag.pyi +0 -0
  153. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/disclosure/__init__.py +0 -0
  154. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/disclosure/accordion.py +0 -0
  155. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/disclosure/accordion.pyi +0 -0
  156. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/disclosure/tabs.py +0 -0
  157. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/disclosure/tabs.pyi +0 -0
  158. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/disclosure/transition.py +0 -0
  159. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/disclosure/transition.pyi +0 -0
  160. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/disclosure/visuallyhidden.py +0 -0
  161. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/disclosure/visuallyhidden.pyi +0 -0
  162. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/feedback/__init__.py +0 -0
  163. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/feedback/alert.py +0 -0
  164. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/feedback/alert.pyi +0 -0
  165. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/feedback/circularprogress.py +0 -0
  166. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/feedback/circularprogress.pyi +0 -0
  167. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/feedback/progress.py +0 -0
  168. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/feedback/progress.pyi +0 -0
  169. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/feedback/skeleton.py +0 -0
  170. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/feedback/skeleton.pyi +0 -0
  171. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/feedback/spinner.py +0 -0
  172. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/feedback/spinner.pyi +0 -0
  173. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/__init__.py +0 -0
  174. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/button.py +0 -0
  175. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/button.pyi +0 -0
  176. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/checkbox.py +0 -0
  177. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/checkbox.pyi +0 -0
  178. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/colormodeswitch.py +0 -0
  179. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/colormodeswitch.pyi +0 -0
  180. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/date_picker.py +0 -0
  181. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/date_picker.pyi +0 -0
  182. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/date_time_picker.py +0 -0
  183. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/date_time_picker.pyi +0 -0
  184. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/editable.py +0 -0
  185. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/editable.pyi +0 -0
  186. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/email.py +0 -0
  187. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/email.pyi +0 -0
  188. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/form.py +0 -0
  189. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/form.pyi +0 -0
  190. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/iconbutton.py +0 -0
  191. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/iconbutton.pyi +0 -0
  192. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/input.py +0 -0
  193. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/input.pyi +0 -0
  194. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/multiselect.py +0 -0
  195. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/numberinput.py +0 -0
  196. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/numberinput.pyi +0 -0
  197. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/password.py +0 -0
  198. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/password.pyi +0 -0
  199. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/pininput.py +0 -0
  200. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/pininput.pyi +0 -0
  201. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/radio.py +0 -0
  202. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/radio.pyi +0 -0
  203. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/rangeslider.py +0 -0
  204. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/rangeslider.pyi +0 -0
  205. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/select.py +0 -0
  206. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/select.pyi +0 -0
  207. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/slider.py +0 -0
  208. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/slider.pyi +0 -0
  209. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/switch.py +0 -0
  210. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/switch.pyi +0 -0
  211. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/textarea.py +0 -0
  212. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/textarea.pyi +0 -0
  213. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/time_picker.py +0 -0
  214. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/forms/time_picker.pyi +0 -0
  215. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/layout/__init__.py +0 -0
  216. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/layout/aspect_ratio.py +0 -0
  217. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/layout/aspect_ratio.pyi +0 -0
  218. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/layout/box.py +0 -0
  219. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/layout/box.pyi +0 -0
  220. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/layout/card.py +0 -0
  221. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/layout/card.pyi +0 -0
  222. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/layout/center.py +0 -0
  223. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/layout/center.pyi +0 -0
  224. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/layout/container.py +0 -0
  225. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/layout/container.pyi +0 -0
  226. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/layout/flex.py +0 -0
  227. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/layout/flex.pyi +0 -0
  228. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/layout/grid.py +0 -0
  229. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/layout/grid.pyi +0 -0
  230. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/layout/spacer.py +0 -0
  231. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/layout/spacer.pyi +0 -0
  232. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/layout/stack.py +0 -0
  233. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/layout/stack.pyi +0 -0
  234. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/layout/wrap.py +0 -0
  235. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/layout/wrap.pyi +0 -0
  236. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/media/__init__.py +0 -0
  237. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/media/avatar.py +0 -0
  238. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/media/avatar.pyi +0 -0
  239. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/media/icon.py +0 -0
  240. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/media/icon.pyi +0 -0
  241. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/media/image.py +0 -0
  242. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/media/image.pyi +0 -0
  243. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/navigation/__init__.py +0 -0
  244. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/navigation/breadcrumb.py +0 -0
  245. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/navigation/breadcrumb.pyi +0 -0
  246. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/navigation/link.py +0 -0
  247. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/navigation/link.pyi +0 -0
  248. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/navigation/linkoverlay.py +0 -0
  249. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/navigation/linkoverlay.pyi +0 -0
  250. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/navigation/stepper.py +0 -0
  251. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/navigation/stepper.pyi +0 -0
  252. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/overlay/__init__.py +0 -0
  253. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/overlay/alertdialog.py +0 -0
  254. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/overlay/alertdialog.pyi +0 -0
  255. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/overlay/drawer.py +0 -0
  256. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/overlay/drawer.pyi +0 -0
  257. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/overlay/menu.py +0 -0
  258. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/overlay/menu.pyi +0 -0
  259. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/overlay/modal.py +0 -0
  260. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/overlay/modal.pyi +0 -0
  261. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/overlay/popover.py +0 -0
  262. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/overlay/popover.pyi +0 -0
  263. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/overlay/tooltip.py +0 -0
  264. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/overlay/tooltip.pyi +0 -0
  265. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/typography/__init__.py +0 -0
  266. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/typography/heading.py +0 -0
  267. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/typography/heading.pyi +0 -0
  268. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/typography/highlight.py +0 -0
  269. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/typography/highlight.pyi +0 -0
  270. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/typography/span.py +0 -0
  271. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/typography/span.pyi +0 -0
  272. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/typography/text.py +0 -0
  273. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/chakra/typography/text.pyi +0 -0
  274. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/core/client_side_routing.py +0 -0
  275. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/core/client_side_routing.pyi +0 -0
  276. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/core/colors.py +0 -0
  277. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/core/debounce.pyi +0 -0
  278. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/core/html.py +0 -0
  279. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/core/html.pyi +0 -0
  280. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/core/layout/__init__.py +0 -0
  281. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/core/match.py +0 -0
  282. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/core/responsive.py +0 -0
  283. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/core/upload.pyi +0 -0
  284. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/datadisplay/__init__.py +0 -0
  285. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/datadisplay/code.py +0 -0
  286. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/datadisplay/code.pyi +0 -0
  287. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/datadisplay/dataeditor.py +0 -0
  288. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/datadisplay/dataeditor.pyi +0 -0
  289. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/datadisplay/logo.py +0 -0
  290. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/el/__init__.py +0 -0
  291. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/el/constants/__init__.py +0 -0
  292. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/el/constants/html.py +0 -0
  293. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/el/constants/react.py +0 -0
  294. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/el/constants/reflex.py +0 -0
  295. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/el/element.py +0 -0
  296. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/el/element.pyi +0 -0
  297. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/el/elements/__init__.py +0 -0
  298. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/el/elements/base.py +0 -0
  299. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/el/elements/base.pyi +0 -0
  300. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/el/elements/forms.pyi +0 -0
  301. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/el/elements/inline.py +0 -0
  302. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/el/elements/inline.pyi +0 -0
  303. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/el/elements/metadata.py +0 -0
  304. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/el/elements/metadata.pyi +0 -0
  305. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/el/elements/other.py +0 -0
  306. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/el/elements/other.pyi +0 -0
  307. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/el/elements/scripts.py +0 -0
  308. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/el/elements/scripts.pyi +0 -0
  309. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/el/elements/sectioning.py +0 -0
  310. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/el/elements/sectioning.pyi +0 -0
  311. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/el/elements/tables.py +0 -0
  312. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/el/elements/tables.pyi +0 -0
  313. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/el/elements/typography.py +0 -0
  314. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/el/elements/typography.pyi +0 -0
  315. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/gridjs/__init__.py +0 -0
  316. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/gridjs/datatable.pyi +0 -0
  317. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/literals.py +0 -0
  318. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/lucide/__init__.py +0 -0
  319. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/lucide/icon.py +0 -0
  320. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/lucide/icon.pyi +0 -0
  321. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/markdown/__init__.py +0 -0
  322. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/markdown/markdown.py +0 -0
  323. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/markdown/markdown.pyi +0 -0
  324. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/media/__init__.py +0 -0
  325. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/media/icon.py +0 -0
  326. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/moment/__init__.py +0 -0
  327. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/moment/moment.py +0 -0
  328. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/moment/moment.pyi +0 -0
  329. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/next/__init__.py +0 -0
  330. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/next/base.py +0 -0
  331. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/next/base.pyi +0 -0
  332. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/next/image.py +0 -0
  333. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/next/image.pyi +0 -0
  334. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/next/link.py +0 -0
  335. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/next/link.pyi +0 -0
  336. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/next/video.py +0 -0
  337. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/next/video.pyi +0 -0
  338. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/plotly/__init__.py +0 -0
  339. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/plotly/plotly.py +0 -0
  340. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/plotly/plotly.pyi +0 -0
  341. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/__init__.py +0 -0
  342. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/primitives/__init__.py +0 -0
  343. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/primitives/accordion.py +0 -0
  344. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/primitives/accordion.pyi +0 -0
  345. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/primitives/base.py +0 -0
  346. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/primitives/base.pyi +0 -0
  347. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/primitives/drawer.py +0 -0
  348. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/primitives/drawer.pyi +0 -0
  349. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/primitives/form.py +0 -0
  350. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/primitives/form.pyi +0 -0
  351. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/primitives/progress.py +0 -0
  352. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/primitives/progress.pyi +0 -0
  353. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/primitives/slider.py +0 -0
  354. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/primitives/slider.pyi +0 -0
  355. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/__init__.py +0 -0
  356. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/base.py +0 -0
  357. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/base.pyi +0 -0
  358. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/color_mode.py +0 -0
  359. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/color_mode.pyi +0 -0
  360. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/__init__.py +0 -0
  361. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/alert_dialog.py +0 -0
  362. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/alert_dialog.pyi +0 -0
  363. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/aspect_ratio.py +0 -0
  364. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/aspect_ratio.pyi +0 -0
  365. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/avatar.py +0 -0
  366. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/avatar.pyi +0 -0
  367. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/badge.py +0 -0
  368. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/badge.pyi +0 -0
  369. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/button.py +0 -0
  370. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/button.pyi +0 -0
  371. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/callout.py +0 -0
  372. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/callout.pyi +0 -0
  373. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/card.py +0 -0
  374. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/card.pyi +0 -0
  375. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/checkbox.py +0 -0
  376. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/checkbox.pyi +0 -0
  377. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/checkbox_cards.py +0 -0
  378. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/checkbox_cards.pyi +0 -0
  379. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/checkbox_group.py +0 -0
  380. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/checkbox_group.pyi +0 -0
  381. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/context_menu.py +0 -0
  382. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/context_menu.pyi +0 -0
  383. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/data_list.py +0 -0
  384. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/data_list.pyi +0 -0
  385. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/dialog.py +0 -0
  386. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/dialog.pyi +0 -0
  387. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/dropdown_menu.py +0 -0
  388. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/dropdown_menu.pyi +0 -0
  389. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/hover_card.py +0 -0
  390. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/hover_card.pyi +0 -0
  391. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/icon_button.py +0 -0
  392. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/icon_button.pyi +0 -0
  393. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/inset.py +0 -0
  394. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/inset.pyi +0 -0
  395. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/popover.py +0 -0
  396. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/popover.pyi +0 -0
  397. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/progress.py +0 -0
  398. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/progress.pyi +0 -0
  399. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/radio.py +0 -0
  400. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/radio.pyi +0 -0
  401. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/radio_cards.py +0 -0
  402. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/radio_cards.pyi +0 -0
  403. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/radio_group.py +0 -0
  404. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/radio_group.pyi +0 -0
  405. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/scroll_area.py +0 -0
  406. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/scroll_area.pyi +0 -0
  407. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/segmented_control.py +0 -0
  408. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/segmented_control.pyi +0 -0
  409. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/select.py +0 -0
  410. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/select.pyi +0 -0
  411. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/separator.py +0 -0
  412. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/separator.pyi +0 -0
  413. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/skeleton.py +0 -0
  414. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/skeleton.pyi +0 -0
  415. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/slider.py +0 -0
  416. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/slider.pyi +0 -0
  417. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/spinner.py +0 -0
  418. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/spinner.pyi +0 -0
  419. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/switch.py +0 -0
  420. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/switch.pyi +0 -0
  421. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/table.py +0 -0
  422. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/table.pyi +0 -0
  423. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/tabs.pyi +0 -0
  424. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/text_area.py +0 -0
  425. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/text_area.pyi +0 -0
  426. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/text_field.py +0 -0
  427. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/text_field.pyi +0 -0
  428. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/tooltip.py +0 -0
  429. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/components/tooltip.pyi +0 -0
  430. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/layout/__init__.py +0 -0
  431. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/layout/base.py +0 -0
  432. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/layout/base.pyi +0 -0
  433. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/layout/box.py +0 -0
  434. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/layout/box.pyi +0 -0
  435. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/layout/center.py +0 -0
  436. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/layout/center.pyi +0 -0
  437. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/layout/container.py +0 -0
  438. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/layout/container.pyi +0 -0
  439. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/layout/flex.py +0 -0
  440. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/layout/flex.pyi +0 -0
  441. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/layout/grid.py +0 -0
  442. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/layout/grid.pyi +0 -0
  443. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/layout/list.py +0 -0
  444. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/layout/list.pyi +0 -0
  445. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/layout/section.py +0 -0
  446. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/layout/section.pyi +0 -0
  447. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/layout/spacer.py +0 -0
  448. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/layout/spacer.pyi +0 -0
  449. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/layout/stack.py +0 -0
  450. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/layout/stack.pyi +0 -0
  451. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/typography/__init__.py +0 -0
  452. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/typography/base.py +0 -0
  453. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/typography/blockquote.py +0 -0
  454. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/typography/blockquote.pyi +0 -0
  455. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/typography/code.py +0 -0
  456. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/typography/code.pyi +0 -0
  457. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/typography/heading.py +0 -0
  458. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/typography/heading.pyi +0 -0
  459. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/typography/link.py +0 -0
  460. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/typography/link.pyi +0 -0
  461. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/typography/text.py +0 -0
  462. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/radix/themes/typography/text.pyi +0 -0
  463. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/react_player/__init__.py +0 -0
  464. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/react_player/audio.py +0 -0
  465. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/react_player/audio.pyi +0 -0
  466. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/react_player/react_player.py +0 -0
  467. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/react_player/react_player.pyi +0 -0
  468. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/react_player/video.py +0 -0
  469. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/react_player/video.pyi +0 -0
  470. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/recharts/__init__.py +0 -0
  471. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/recharts/cartesian.py +0 -0
  472. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/recharts/cartesian.pyi +0 -0
  473. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/recharts/charts.py +0 -0
  474. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/recharts/charts.pyi +0 -0
  475. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/recharts/general.py +0 -0
  476. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/recharts/general.pyi +0 -0
  477. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/recharts/polar.py +0 -0
  478. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/recharts/polar.pyi +0 -0
  479. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/recharts/recharts.py +0 -0
  480. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/recharts/recharts.pyi +0 -0
  481. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/sonner/__init__.py +0 -0
  482. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/suneditor/__init__.py +0 -0
  483. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/suneditor/editor.py +0 -0
  484. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/suneditor/editor.pyi +0 -0
  485. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/tags/__init__.py +0 -0
  486. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/tags/cond_tag.py +0 -0
  487. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/tags/iter_tag.py +0 -0
  488. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/tags/match_tag.py +0 -0
  489. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/tags/tag.py +0 -0
  490. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/components/tags/tagless.py +0 -0
  491. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/config.pyi +0 -0
  492. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/constants/__init__.py +0 -0
  493. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/constants/base.py +0 -0
  494. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/constants/base.pyi +0 -0
  495. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/constants/colors.py +0 -0
  496. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/constants/config.py +0 -0
  497. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/constants/custom_components.py +0 -0
  498. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/constants/event.py +0 -0
  499. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/constants/route.py +0 -0
  500. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/constants/style.py +0 -0
  501. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/custom_components/__init__.py +0 -0
  502. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/custom_components/custom_components.py +0 -0
  503. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/experimental/hooks.py +0 -0
  504. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/experimental/layout.py +0 -0
  505. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/experimental/misc.py +0 -0
  506. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/middleware/__init__.py +0 -0
  507. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/middleware/hydrate_middleware.py +0 -0
  508. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/middleware/middleware.py +0 -0
  509. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/model.py +0 -0
  510. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/page.py +0 -0
  511. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/reflex.py +0 -0
  512. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/route.py +0 -0
  513. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/utils/__init__.py +0 -0
  514. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/utils/build.py +0 -0
  515. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/utils/compat.py +0 -0
  516. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/utils/console.py +0 -0
  517. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/utils/exec.py +0 -0
  518. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/utils/export.py +0 -0
  519. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/utils/imports.py +0 -0
  520. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/utils/path_ops.py +0 -0
  521. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/utils/pyi_generator.py +0 -0
  522. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/utils/serializers.py +0 -0
  523. {reflex-0.5.0a3 → reflex-0.5.1}/reflex/utils/watch.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: reflex
3
- Version: 0.5.0a3
3
+ Version: 0.5.1
4
4
  Summary: Web apps in pure Python.
5
5
  Home-page: https://reflex.dev
6
6
  License: Apache-2.0
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "reflex"
3
- version = "0.5.0a3"
3
+ version = "0.5.1"
4
4
  description = "Web apps in pure Python."
5
5
  license = "Apache-2.0"
6
6
  authors = [
@@ -126,8 +126,13 @@ export const applyDelta = (state, delta) => {
126
126
  export const applyEvent = async (event, socket) => {
127
127
  // Handle special events
128
128
  if (event.name == "_redirect") {
129
- if (event.payload.external) window.open(event.payload.path, "_blank");
130
- else Router.push(event.payload.path);
129
+ if (event.payload.external) {
130
+ window.open(event.payload.path, "_blank");
131
+ } else if (event.payload.replace) {
132
+ Router.replace(event.payload.path);
133
+ } else {
134
+ Router.push(event.payload.path);
135
+ }
131
136
  return false;
132
137
  }
133
138
 
@@ -41,7 +41,6 @@ from reflex.base import Base
41
41
  from reflex.compiler import compiler
42
42
  from reflex.compiler import utils as compiler_utils
43
43
  from reflex.compiler.compiler import ExecutorSafeFunctions
44
- from reflex.components import connection_modal, connection_pulser
45
44
  from reflex.components.base.app_wrap import AppWrap
46
45
  from reflex.components.base.fragment import Fragment
47
46
  from reflex.components.component import (
@@ -49,6 +48,7 @@ from reflex.components.component import (
49
48
  ComponentStyle,
50
49
  evaluate_style_namespaces,
51
50
  )
51
+ from reflex.components.core import connection_pulser, connection_toaster
52
52
  from reflex.components.core.client_side_routing import (
53
53
  Default404Page,
54
54
  wait_for_client_redirect,
@@ -91,7 +91,7 @@ def default_overlay_component() -> Component:
91
91
  Returns:
92
92
  The default overlay_component, which is a connection_modal.
93
93
  """
94
- return Fragment.create(connection_pulser(), connection_modal())
94
+ return Fragment.create(connection_pulser(), connection_toaster())
95
95
 
96
96
 
97
97
  class OverlayFragment(Fragment):
@@ -403,9 +403,12 @@ class App(Base):
403
403
  The generated component.
404
404
 
405
405
  Raises:
406
+ VarOperationTypeError: When an invalid component var related function is passed.
406
407
  TypeError: When an invalid component function is passed.
407
408
  exceptions.MatchTypeError: If the return types of match cases in rx.match are different.
408
409
  """
410
+ from reflex.utils.exceptions import VarOperationTypeError
411
+
409
412
  try:
410
413
  return component if isinstance(component, Component) else component()
411
414
  except exceptions.MatchTypeError:
@@ -413,7 +416,7 @@ class App(Base):
413
416
  except TypeError as e:
414
417
  message = str(e)
415
418
  if "BaseVar" in message or "ComputedVar" in message:
416
- raise TypeError(
419
+ raise VarOperationTypeError(
417
420
  "You may be trying to use an invalid Python function on a state var. "
418
421
  "When referencing a var inside your render code, only limited var operations are supported. "
419
422
  "See the var operation docs here: https://reflex.dev/docs/vars/var-operations/"
@@ -555,11 +558,13 @@ class App(Base):
555
558
  Based on conflicts that NextJS would throw if not intercepted.
556
559
 
557
560
  Raises:
558
- ValueError: exception showing which conflict exist with the route to be added
561
+ RouteValueError: exception showing which conflict exist with the route to be added
559
562
 
560
563
  Args:
561
564
  new_route: the route being newly added.
562
565
  """
566
+ from reflex.utils.exceptions import RouteValueError
567
+
563
568
  if "[" not in new_route:
564
569
  return
565
570
 
@@ -576,7 +581,7 @@ class App(Base):
576
581
  ):
577
582
  if rw in segments and r != nr:
578
583
  # If the slugs in the segments of both routes are not the same, then the route is invalid
579
- raise ValueError(
584
+ raise RouteValueError(
580
585
  f"You cannot use different slug names for the same dynamic path in {route} and {new_route} ('{r}' != '{nr}')"
581
586
  )
582
587
  elif rw not in segments and r != nr:
@@ -755,8 +760,10 @@ class App(Base):
755
760
  export: Whether to compile the app for export.
756
761
 
757
762
  Raises:
758
- RuntimeError: When any page uses state, but no rx.State subclass is defined.
763
+ ReflexRuntimeError: When any page uses state, but no rx.State subclass is defined.
759
764
  """
765
+ from reflex.utils.exceptions import ReflexRuntimeError
766
+
760
767
  # Render a default 404 page if the user didn't supply one
761
768
  if constants.Page404.SLUG not in self.pages:
762
769
  self.add_custom_404_page()
@@ -837,7 +844,7 @@ class App(Base):
837
844
 
838
845
  # Catch "static" apps (that do not define a rx.State subclass) which are trying to access rx.State.
839
846
  if code_uses_state_contexts(stateful_components_code) and self.state is None:
840
- raise RuntimeError(
847
+ raise ReflexRuntimeError(
841
848
  "To access rx.State in frontend components, at least one "
842
849
  "subclass of rx.State must be defined in the app."
843
850
  )
@@ -1060,50 +1067,59 @@ async def process(
1060
1067
  headers: The client headers.
1061
1068
  client_ip: The client_ip.
1062
1069
 
1070
+ Raises:
1071
+ Exception: If a reflex specific error occurs during processing the event.
1072
+
1063
1073
  Yields:
1064
1074
  The state updates after processing the event.
1065
1075
  """
1066
- # Add request data to the state.
1067
- router_data = event.router_data
1068
- router_data.update(
1069
- {
1070
- constants.RouteVar.QUERY: format.format_query_params(event.router_data),
1071
- constants.RouteVar.CLIENT_TOKEN: event.token,
1072
- constants.RouteVar.SESSION_ID: sid,
1073
- constants.RouteVar.HEADERS: headers,
1074
- constants.RouteVar.CLIENT_IP: client_ip,
1075
- }
1076
- )
1077
- # Get the state for the session exclusively.
1078
- async with app.state_manager.modify_state(event.substate_token) as state:
1079
- # re-assign only when the value is different
1080
- if state.router_data != router_data:
1081
- # assignment will recurse into substates and force recalculation of
1082
- # dependent ComputedVar (dynamic route variables)
1083
- state.router_data = router_data
1084
- state.router = RouterData(router_data)
1085
-
1086
- # Preprocess the event.
1087
- update = await app._preprocess(state, event)
1088
-
1089
- # If there was an update, yield it.
1090
- if update is not None:
1091
- yield update
1092
-
1093
- # Only process the event if there is no update.
1094
- else:
1095
- if app._process_background(state, event) is not None:
1096
- # `final=True` allows the frontend send more events immediately.
1097
- yield StateUpdate(final=True)
1098
- return
1076
+ from reflex.utils import telemetry
1077
+
1078
+ try:
1079
+ # Add request data to the state.
1080
+ router_data = event.router_data
1081
+ router_data.update(
1082
+ {
1083
+ constants.RouteVar.QUERY: format.format_query_params(event.router_data),
1084
+ constants.RouteVar.CLIENT_TOKEN: event.token,
1085
+ constants.RouteVar.SESSION_ID: sid,
1086
+ constants.RouteVar.HEADERS: headers,
1087
+ constants.RouteVar.CLIENT_IP: client_ip,
1088
+ }
1089
+ )
1090
+ # Get the state for the session exclusively.
1091
+ async with app.state_manager.modify_state(event.substate_token) as state:
1092
+ # re-assign only when the value is different
1093
+ if state.router_data != router_data:
1094
+ # assignment will recurse into substates and force recalculation of
1095
+ # dependent ComputedVar (dynamic route variables)
1096
+ state.router_data = router_data
1097
+ state.router = RouterData(router_data)
1098
+
1099
+ # Preprocess the event.
1100
+ update = await app._preprocess(state, event)
1101
+
1102
+ # If there was an update, yield it.
1103
+ if update is not None:
1104
+ yield update
1099
1105
 
1100
- # Process the event synchronously.
1101
- async for update in state._process(event):
1102
- # Postprocess the event.
1103
- update = await app._postprocess(state, event, update)
1106
+ # Only process the event if there is no update.
1107
+ else:
1108
+ if app._process_background(state, event) is not None:
1109
+ # `final=True` allows the frontend send more events immediately.
1110
+ yield StateUpdate(final=True)
1111
+ return
1104
1112
 
1105
- # Yield the update.
1106
- yield update
1113
+ # Process the event synchronously.
1114
+ async for update in state._process(event):
1115
+ # Postprocess the event.
1116
+ update = await app._postprocess(state, event, update)
1117
+
1118
+ # Yield the update.
1119
+ yield update
1120
+ except Exception as ex:
1121
+ telemetry.send_error(ex, context="backend")
1122
+ raise
1107
1123
 
1108
1124
 
1109
1125
  async def ping() -> str:
@@ -1137,10 +1153,12 @@ def upload(app: App):
1137
1153
  emitted by the upload handler.
1138
1154
 
1139
1155
  Raises:
1140
- ValueError: if there are no args with supported annotation.
1141
- TypeError: if a background task is used as the handler.
1156
+ UploadValueError: if there are no args with supported annotation.
1157
+ UploadTypeError: if a background task is used as the handler.
1142
1158
  HTTPException: when the request does not include token / handler headers.
1143
1159
  """
1160
+ from reflex.utils.exceptions import UploadTypeError, UploadValueError
1161
+
1144
1162
  token = request.headers.get("reflex-client-token")
1145
1163
  handler = request.headers.get("reflex-event-handler")
1146
1164
 
@@ -1166,7 +1184,7 @@ def upload(app: App):
1166
1184
  # check if there exists any handler args with annotation, List[UploadFile]
1167
1185
  if isinstance(func, EventHandler):
1168
1186
  if func.is_background:
1169
- raise TypeError(
1187
+ raise UploadTypeError(
1170
1188
  f"@rx.background is not supported for upload handler `{handler}`.",
1171
1189
  )
1172
1190
  func = func.fn
@@ -1181,7 +1199,7 @@ def upload(app: App):
1181
1199
  break
1182
1200
 
1183
1201
  if not handler_upload_param:
1184
- raise ValueError(
1202
+ raise UploadValueError(
1185
1203
  f"`{handler}` handler should have a parameter annotated as "
1186
1204
  "List[rx.UploadFile]"
1187
1205
  )
@@ -4,12 +4,14 @@ Only the app attribute is explicitly exposed.
4
4
  from concurrent.futures import ThreadPoolExecutor
5
5
 
6
6
  from reflex import constants
7
+ from reflex.utils import telemetry
7
8
  from reflex.utils.exec import is_prod_mode
8
9
  from reflex.utils.prerequisites import get_app
9
10
 
10
11
  if "app" != constants.CompileVars.APP:
11
12
  raise AssertionError("unexpected variable name for 'app'")
12
13
 
14
+ telemetry.send("compile")
13
15
  app_module = get_app(reload=False)
14
16
  app = getattr(app_module, constants.CompileVars.APP)
15
17
  # For py3.8 and py3.9 compatibility when redis is used, we MUST add any decorator pages
@@ -29,5 +31,6 @@ del app_module
29
31
  del compile_future
30
32
  del get_app
31
33
  del is_prod_mode
34
+ del telemetry
32
35
  del constants
33
36
  del ThreadPoolExecutor
@@ -1,4 +1,5 @@
1
1
  """Define the base Reflex class."""
2
+
2
3
  from __future__ import annotations
3
4
 
4
5
  import os
@@ -26,15 +27,17 @@ def validate_field_name(bases: List[Type["BaseModel"]], field_name: str) -> None
26
27
  field_name: name of attribute
27
28
 
28
29
  Raises:
29
- NameError: If state var field shadows another in its parent state
30
+ VarNameError: If state var field shadows another in its parent state
30
31
  """
32
+ from reflex.utils.exceptions import VarNameError
33
+
31
34
  reload = os.getenv(constants.RELOAD_CONFIG) == "True"
32
35
  for base in bases:
33
36
  try:
34
37
  if not reload and getattr(base, field_name, None):
35
38
  pass
36
39
  except TypeError as te:
37
- raise NameError(
40
+ raise VarNameError(
38
41
  f'State var "{field_name}" in {base} has been shadowed by a substate var; '
39
42
  f'use a different field name instead".'
40
43
  ) from te
@@ -241,7 +241,7 @@ class Component(BaseComponent, ABC):
241
241
  """
242
242
  return {}
243
243
 
244
- def add_hooks(self) -> list[str]:
244
+ def add_hooks(self) -> list[str | Var]:
245
245
  """Add hooks inside the component function.
246
246
 
247
247
  Hooks are pieces of literal Javascript code that is inserted inside the
@@ -374,7 +374,7 @@ class Component(BaseComponent, ABC):
374
374
  raise ValueError(
375
375
  f"The {(comp_name := type(self).__name__)} does not take in an `{key}` event trigger. If {comp_name}"
376
376
  f" is a third party component make sure to add `{key}` to the component's event triggers. "
377
- f"visit https://reflex.dev/docs/wrapping-react/logic/#event-triggers for more info."
377
+ f"visit https://reflex.dev/docs/wrapping-react/guide/#event-triggers for more info."
378
378
  )
379
379
  if key in triggers:
380
380
  # Event triggers are bound to event chains.
@@ -731,6 +731,7 @@ class Component(BaseComponent, ABC):
731
731
  # Import here to avoid circular imports.
732
732
  from reflex.components.base.bare import Bare
733
733
  from reflex.components.base.fragment import Fragment
734
+ from reflex.utils.exceptions import ComponentTypeError
734
735
 
735
736
  # Translate deprecated props to new names.
736
737
  new_prop_names = [
@@ -757,7 +758,7 @@ class Component(BaseComponent, ABC):
757
758
  validate_children(child)
758
759
  # Make sure the child is a valid type.
759
760
  if not types._isinstance(child, ComponentChild):
760
- raise TypeError(
761
+ raise ComponentTypeError(
761
762
  "Children of Reflex components must be other components, "
762
763
  "state vars, or primitive Python types. "
763
764
  f"Got child {child} of type {type(child)}.",
@@ -1264,11 +1265,20 @@ class Component(BaseComponent, ABC):
1264
1265
  },
1265
1266
  )
1266
1267
 
1268
+ other_imports = []
1267
1269
  user_hooks = self._get_hooks()
1268
- if user_hooks is not None and isinstance(user_hooks, Var):
1269
- _imports = imports.merge_imports(_imports, user_hooks._var_data.imports) # type: ignore
1270
+ if (
1271
+ user_hooks is not None
1272
+ and isinstance(user_hooks, Var)
1273
+ and user_hooks._var_data is not None
1274
+ and user_hooks._var_data.imports
1275
+ ):
1276
+ other_imports.append(user_hooks._var_data.imports)
1277
+ other_imports.extend(
1278
+ hook_imports for hook_imports in self._get_added_hooks().values()
1279
+ )
1270
1280
 
1271
- return _imports
1281
+ return imports.merge_imports(_imports, *other_imports)
1272
1282
 
1273
1283
  def _get_imports(self) -> imports.ImportDict:
1274
1284
  """Get all the libraries and fields that are used by the component.
@@ -1415,6 +1425,36 @@ class Component(BaseComponent, ABC):
1415
1425
  **self._get_special_hooks(),
1416
1426
  }
1417
1427
 
1428
+ def _get_added_hooks(self) -> dict[str, imports.ImportDict]:
1429
+ """Get the hooks added via `add_hooks` method.
1430
+
1431
+ Returns:
1432
+ The deduplicated hooks and imports added by the component and parent components.
1433
+ """
1434
+ code = {}
1435
+
1436
+ def extract_var_hooks(hook: Var):
1437
+ _imports = {}
1438
+ if hook._var_data is not None:
1439
+ for sub_hook in hook._var_data.hooks:
1440
+ code[sub_hook] = {}
1441
+ if hook._var_data.imports:
1442
+ _imports = hook._var_data.imports
1443
+ if str(hook) in code:
1444
+ code[str(hook)] = imports.merge_imports(code[str(hook)], _imports)
1445
+ else:
1446
+ code[str(hook)] = _imports
1447
+
1448
+ # Add the hook code from add_hooks for each parent class (this is reversed to preserve
1449
+ # the order of the hooks in the final output)
1450
+ for clz in reversed(tuple(self._iter_parent_classes_with_method("add_hooks"))):
1451
+ for hook in clz.add_hooks(self):
1452
+ if isinstance(hook, Var):
1453
+ extract_var_hooks(hook)
1454
+ else:
1455
+ code[hook] = {}
1456
+ return code
1457
+
1418
1458
  def _get_hooks(self) -> str | None:
1419
1459
  """Get the React hooks for this component.
1420
1460
 
@@ -1453,11 +1493,7 @@ class Component(BaseComponent, ABC):
1453
1493
  if hooks is not None:
1454
1494
  code[hooks] = None
1455
1495
 
1456
- # Add the hook code from add_hooks for each parent class (this is reversed to preserve
1457
- # the order of the hooks in the final output)
1458
- for clz in reversed(tuple(self._iter_parent_classes_with_method("add_hooks"))):
1459
- for hook in clz.add_hooks(self):
1460
- code[hook] = None
1496
+ code.update(self._get_added_hooks())
1461
1497
 
1462
1498
  # Add the hook code for the children.
1463
1499
  for child in self.children:
@@ -2091,8 +2127,8 @@ class StatefulComponent(BaseComponent):
2091
2127
  var_deps.extend(cls._get_hook_deps(hook))
2092
2128
  memo_var_data = VarData.merge(
2093
2129
  *[var._var_data for var in event_args],
2094
- VarData( # type: ignore
2095
- imports={"react": {ImportVar(tag="useCallback")}},
2130
+ VarData(
2131
+ imports={"react": [ImportVar(tag="useCallback")]},
2096
2132
  ),
2097
2133
  )
2098
2134
 
@@ -1,7 +1,12 @@
1
1
  """Core Reflex components."""
2
2
 
3
3
  from . import layout as layout
4
- from .banner import ConnectionBanner, ConnectionModal, ConnectionPulser
4
+ from .banner import (
5
+ ConnectionBanner,
6
+ ConnectionModal,
7
+ ConnectionPulser,
8
+ ConnectionToaster,
9
+ )
5
10
  from .colors import color
6
11
  from .cond import Cond, color_mode_cond, cond
7
12
  from .debounce import DebounceInput
@@ -26,6 +31,7 @@ from .upload import (
26
31
 
27
32
  connection_banner = ConnectionBanner.create
28
33
  connection_modal = ConnectionModal.create
34
+ connection_toaster = ConnectionToaster.create
29
35
  connection_pulser = ConnectionPulser.create
30
36
  debounce_input = DebounceInput.create
31
37
  foreach = Foreach.create
@@ -16,8 +16,11 @@ from reflex.components.radix.themes.components.dialog import (
16
16
  )
17
17
  from reflex.components.radix.themes.layout import Flex
18
18
  from reflex.components.radix.themes.typography.text import Text
19
+ from reflex.components.sonner.toast import Toaster, ToastProps
19
20
  from reflex.constants import Dirs, Hooks, Imports
21
+ from reflex.constants.compiler import CompileVars
20
22
  from reflex.utils import imports
23
+ from reflex.utils.serializers import serialize
21
24
  from reflex.vars import Var, VarData
22
25
 
23
26
  connect_error_var_data: VarData = VarData( # type: ignore
@@ -25,27 +28,38 @@ connect_error_var_data: VarData = VarData( # type: ignore
25
28
  hooks={Hooks.EVENTS: None},
26
29
  )
27
30
 
31
+ connect_errors: Var = Var.create_safe(
32
+ value=CompileVars.CONNECT_ERROR,
33
+ _var_is_local=True,
34
+ _var_is_string=False,
35
+ _var_data=connect_error_var_data,
36
+ )
37
+
28
38
  connection_error: Var = Var.create_safe(
29
39
  value="(connectErrors.length > 0) ? connectErrors[connectErrors.length - 1].message : ''",
30
40
  _var_is_local=False,
31
41
  _var_is_string=False,
32
- )._replace(merge_var_data=connect_error_var_data)
42
+ _var_data=connect_error_var_data,
43
+ )
33
44
 
34
45
  connection_errors_count: Var = Var.create_safe(
35
46
  value="connectErrors.length",
36
47
  _var_is_string=False,
37
48
  _var_is_local=False,
38
- )._replace(merge_var_data=connect_error_var_data)
49
+ _var_data=connect_error_var_data,
50
+ )
39
51
 
40
52
  has_connection_errors: Var = Var.create_safe(
41
53
  value="connectErrors.length > 0",
42
54
  _var_is_string=False,
43
- )._replace(_var_type=bool, merge_var_data=connect_error_var_data)
55
+ _var_data=connect_error_var_data,
56
+ ).to(bool)
44
57
 
45
58
  has_too_many_connection_errors: Var = Var.create_safe(
46
59
  value="connectErrors.length >= 2",
47
60
  _var_is_string=False,
48
- )._replace(_var_type=bool, merge_var_data=connect_error_var_data)
61
+ _var_data=connect_error_var_data,
62
+ ).to(bool)
49
63
 
50
64
 
51
65
  class WebsocketTargetURL(Bare):
@@ -81,6 +95,64 @@ def default_connection_error() -> list[str | Var | Component]:
81
95
  ]
82
96
 
83
97
 
98
+ class ConnectionToaster(Toaster):
99
+ """A connection toaster component."""
100
+
101
+ def add_hooks(self) -> list[str]:
102
+ """Add the hooks for the connection toaster.
103
+
104
+ Returns:
105
+ The hooks for the connection toaster.
106
+ """
107
+ toast_id = "websocket-error"
108
+ target_url = WebsocketTargetURL.create()
109
+ props = ToastProps( # type: ignore
110
+ description=Var.create(
111
+ f"`Check if server is reachable at ${target_url}`",
112
+ _var_is_string=False,
113
+ _var_is_local=False,
114
+ ),
115
+ close_button=True,
116
+ duration=120000,
117
+ id=toast_id,
118
+ )
119
+ hook = Var.create(
120
+ f"""
121
+ const toast_props = {serialize(props)};
122
+ const [userDismissed, setUserDismissed] = useState(false);
123
+ useEffect(() => {{
124
+ if ({has_too_many_connection_errors}) {{
125
+ if (!userDismissed) {{
126
+ toast.error(
127
+ `Cannot connect to server: {connection_error}.`,
128
+ {{...toast_props, onDismiss: () => setUserDismissed(true)}},
129
+ )
130
+ }}
131
+ }} else {{
132
+ toast.dismiss("{toast_id}");
133
+ setUserDismissed(false); // after reconnection reset dismissed state
134
+ }}
135
+ }}, [{connect_errors}]);"""
136
+ )
137
+
138
+ hook._var_data = VarData.merge( # type: ignore
139
+ connect_errors._var_data,
140
+ VarData(
141
+ imports={
142
+ "react": [
143
+ imports.ImportVar(tag="useEffect"),
144
+ imports.ImportVar(tag="useState"),
145
+ ],
146
+ **target_url._get_imports(),
147
+ }
148
+ ),
149
+ )
150
+ return [
151
+ Hooks.EVENTS,
152
+ hook, # type: ignore
153
+ ]
154
+
155
+
84
156
  class ConnectionBanner(Component):
85
157
  """A connection banner component."""
86
158
 
@@ -158,8 +230,8 @@ class WifiOffPulse(Icon):
158
230
  size=props.pop("size", 32),
159
231
  z_index=props.pop("z_index", 9999),
160
232
  position=props.pop("position", "fixed"),
161
- bottom=props.pop("botton", "30px"),
162
- right=props.pop("right", "30px"),
233
+ bottom=props.pop("botton", "33px"),
234
+ right=props.pop("right", "33px"),
163
235
  animation=Var.create(f"${{pulse}} 1s infinite", _var_is_string=True),
164
236
  **props,
165
237
  )
@@ -201,6 +273,7 @@ class ConnectionPulser(Div):
201
273
  has_connection_errors,
202
274
  WifiOffPulse.create(**props),
203
275
  ),
276
+ title=f"Connection Error: {connection_error}",
204
277
  position="fixed",
205
278
  width="100vw",
206
279
  height="0",