reflex 0.5.6a2__tar.gz → 0.5.7a1__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 (549) hide show
  1. {reflex-0.5.6a2 → reflex-0.5.7a1}/PKG-INFO +1 -1
  2. {reflex-0.5.6a2 → reflex-0.5.7a1}/pyproject.toml +1 -1
  3. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/jinja/web/utils/context.js.jinja2 +2 -0
  4. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/web/utils/state.js +31 -2
  5. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/app.py +190 -4
  6. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/compiler/templates.py +1 -0
  7. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/base/__init__.py +4 -0
  8. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/base/__init__.pyi +2 -0
  9. reflex-0.5.7a1/reflex/components/base/error_boundary.py +78 -0
  10. reflex-0.5.7a1/reflex/components/base/error_boundary.pyi +98 -0
  11. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/primitives/form.py +3 -2
  12. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/recharts/cartesian.py +31 -16
  13. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/recharts/cartesian.pyi +46 -22
  14. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/recharts/charts.py +6 -6
  15. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/recharts/charts.pyi +10 -10
  16. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/recharts/general.py +7 -0
  17. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/recharts/general.pyi +5 -0
  18. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/recharts/recharts.py +16 -1
  19. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/recharts/recharts.pyi +1 -0
  20. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/config.py +2 -1
  21. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/constants/compiler.py +20 -2
  22. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/constants/config.py +1 -1
  23. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/event.py +9 -0
  24. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/experimental/__init__.py +2 -0
  25. reflex-0.5.7a1/reflex/experimental/vars/__init__.py +3 -0
  26. reflex-0.5.7a1/reflex/experimental/vars/base.py +210 -0
  27. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/state.py +85 -18
  28. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/testing.py +28 -0
  29. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/utils/compat.py +7 -5
  30. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/utils/console.py +10 -1
  31. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/utils/prerequisites.py +11 -5
  32. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/utils/processes.py +7 -2
  33. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/utils/pyi_generator.py +4 -1
  34. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/utils/types.py +35 -30
  35. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/vars.py +58 -23
  36. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/vars.pyi +4 -1
  37. {reflex-0.5.6a2 → reflex-0.5.7a1}/LICENSE +0 -0
  38. {reflex-0.5.6a2 → reflex-0.5.7a1}/README.md +0 -0
  39. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/apps/blank/assets/favicon.ico +0 -0
  40. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/apps/blank/code/__init__.py +0 -0
  41. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/apps/blank/code/blank.py +0 -0
  42. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/apps/demo/.gitignore +0 -0
  43. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/apps/demo/assets/favicon.ico +0 -0
  44. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/apps/demo/assets/github.svg +0 -0
  45. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/apps/demo/assets/icon.svg +0 -0
  46. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/apps/demo/assets/logo.svg +0 -0
  47. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/apps/demo/assets/paneleft.svg +0 -0
  48. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/apps/demo/code/__init__.py +0 -0
  49. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/apps/demo/code/demo.py +0 -0
  50. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/apps/demo/code/pages/__init__.py +0 -0
  51. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/apps/demo/code/pages/chatapp.py +0 -0
  52. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/apps/demo/code/pages/datatable.py +0 -0
  53. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/apps/demo/code/pages/forms.py +0 -0
  54. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/apps/demo/code/pages/graphing.py +0 -0
  55. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/apps/demo/code/pages/home.py +0 -0
  56. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/apps/demo/code/sidebar.py +0 -0
  57. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/apps/demo/code/state.py +0 -0
  58. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/apps/demo/code/states/form_state.py +0 -0
  59. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/apps/demo/code/states/pie_state.py +0 -0
  60. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/apps/demo/code/styles.py +0 -0
  61. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/apps/demo/code/webui/__init__.py +0 -0
  62. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/apps/demo/code/webui/components/__init__.py +0 -0
  63. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/apps/demo/code/webui/components/chat.py +0 -0
  64. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/apps/demo/code/webui/components/loading_icon.py +0 -0
  65. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/apps/demo/code/webui/components/modal.py +0 -0
  66. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/apps/demo/code/webui/components/navbar.py +0 -0
  67. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/apps/demo/code/webui/components/sidebar.py +0 -0
  68. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/apps/demo/code/webui/state.py +0 -0
  69. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/apps/demo/code/webui/styles.py +0 -0
  70. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/jinja/app/rxconfig.py.jinja2 +0 -0
  71. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/jinja/custom_components/README.md.jinja2 +0 -0
  72. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/jinja/custom_components/__init__.py.jinja2 +0 -0
  73. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/jinja/custom_components/demo_app.py.jinja2 +0 -0
  74. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/jinja/custom_components/pyproject.toml.jinja2 +0 -0
  75. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/jinja/custom_components/src.py.jinja2 +0 -0
  76. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/jinja/web/package.json.jinja2 +0 -0
  77. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/jinja/web/pages/_app.js.jinja2 +0 -0
  78. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/jinja/web/pages/_document.js.jinja2 +0 -0
  79. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/jinja/web/pages/base_page.js.jinja2 +0 -0
  80. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/jinja/web/pages/component.js.jinja2 +0 -0
  81. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/jinja/web/pages/custom_component.js.jinja2 +0 -0
  82. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/jinja/web/pages/index.js.jinja2 +0 -0
  83. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/jinja/web/pages/stateful_component.js.jinja2 +0 -0
  84. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/jinja/web/pages/stateful_components.js.jinja2 +0 -0
  85. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/jinja/web/pages/utils.js.jinja2 +0 -0
  86. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/jinja/web/styles/styles.css.jinja2 +0 -0
  87. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/jinja/web/tailwind.config.js.jinja2 +0 -0
  88. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/jinja/web/utils/theme.js.jinja2 +0 -0
  89. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/web/.gitignore +0 -0
  90. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/web/components/reflex/chakra_color_mode_provider.js +0 -0
  91. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +0 -0
  92. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/web/jsconfig.json +0 -0
  93. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/web/next.config.js +0 -0
  94. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/web/postcss.config.js +0 -0
  95. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/web/styles/tailwind.css +0 -0
  96. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/web/utils/client_side_routing.js +0 -0
  97. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/web/utils/helpers/dataeditor.js +0 -0
  98. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/web/utils/helpers/debounce.js +0 -0
  99. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/web/utils/helpers/paste.js +0 -0
  100. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/web/utils/helpers/range.js +0 -0
  101. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/.templates/web/utils/helpers/throttle.js +0 -0
  102. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/__init__.py +0 -0
  103. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/__init__.pyi +0 -0
  104. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/__main__.py +0 -0
  105. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/admin.py +0 -0
  106. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/app_mixins/__init__.py +0 -0
  107. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/app_mixins/lifespan.py +0 -0
  108. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/app_mixins/middleware.py +0 -0
  109. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/app_mixins/mixin.py +0 -0
  110. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/app_module_for_backend.py +0 -0
  111. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/base.py +0 -0
  112. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/compiler/__init__.py +0 -0
  113. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/compiler/compiler.py +0 -0
  114. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/compiler/utils.py +0 -0
  115. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/__init__.py +0 -0
  116. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/__init__.pyi +0 -0
  117. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/base/app_wrap.py +0 -0
  118. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/base/app_wrap.pyi +0 -0
  119. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/base/bare.py +0 -0
  120. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/base/body.py +0 -0
  121. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/base/body.pyi +0 -0
  122. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/base/document.py +0 -0
  123. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/base/document.pyi +0 -0
  124. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/base/fragment.py +0 -0
  125. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/base/fragment.pyi +0 -0
  126. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/base/head.py +0 -0
  127. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/base/head.pyi +0 -0
  128. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/base/link.py +0 -0
  129. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/base/link.pyi +0 -0
  130. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/base/meta.py +0 -0
  131. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/base/meta.pyi +0 -0
  132. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/base/script.py +0 -0
  133. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/base/script.pyi +0 -0
  134. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/__init__.py +0 -0
  135. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/base.py +0 -0
  136. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/base.pyi +0 -0
  137. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/datadisplay/__init__.py +0 -0
  138. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/datadisplay/badge.py +0 -0
  139. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/datadisplay/badge.pyi +0 -0
  140. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/datadisplay/code.py +0 -0
  141. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/datadisplay/code.pyi +0 -0
  142. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/datadisplay/divider.py +0 -0
  143. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/datadisplay/divider.pyi +0 -0
  144. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/datadisplay/keyboard_key.py +0 -0
  145. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/datadisplay/keyboard_key.pyi +0 -0
  146. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/datadisplay/list.py +0 -0
  147. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/datadisplay/list.pyi +0 -0
  148. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/datadisplay/stat.py +0 -0
  149. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/datadisplay/stat.pyi +0 -0
  150. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/datadisplay/table.py +0 -0
  151. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/datadisplay/table.pyi +0 -0
  152. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/datadisplay/tag.py +0 -0
  153. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/datadisplay/tag.pyi +0 -0
  154. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/disclosure/__init__.py +0 -0
  155. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/disclosure/accordion.py +0 -0
  156. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/disclosure/accordion.pyi +0 -0
  157. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/disclosure/tabs.py +0 -0
  158. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/disclosure/tabs.pyi +0 -0
  159. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/disclosure/transition.py +0 -0
  160. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/disclosure/transition.pyi +0 -0
  161. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/disclosure/visuallyhidden.py +0 -0
  162. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/disclosure/visuallyhidden.pyi +0 -0
  163. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/feedback/__init__.py +0 -0
  164. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/feedback/alert.py +0 -0
  165. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/feedback/alert.pyi +0 -0
  166. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/feedback/circularprogress.py +0 -0
  167. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/feedback/circularprogress.pyi +0 -0
  168. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/feedback/progress.py +0 -0
  169. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/feedback/progress.pyi +0 -0
  170. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/feedback/skeleton.py +0 -0
  171. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/feedback/skeleton.pyi +0 -0
  172. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/feedback/spinner.py +0 -0
  173. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/feedback/spinner.pyi +0 -0
  174. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/__init__.py +0 -0
  175. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/button.py +0 -0
  176. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/button.pyi +0 -0
  177. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/checkbox.py +0 -0
  178. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/checkbox.pyi +0 -0
  179. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/colormodeswitch.py +0 -0
  180. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/colormodeswitch.pyi +0 -0
  181. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/date_picker.py +0 -0
  182. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/date_picker.pyi +0 -0
  183. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/date_time_picker.py +0 -0
  184. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/date_time_picker.pyi +0 -0
  185. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/editable.py +0 -0
  186. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/editable.pyi +0 -0
  187. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/email.py +0 -0
  188. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/email.pyi +0 -0
  189. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/form.py +0 -0
  190. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/form.pyi +0 -0
  191. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/iconbutton.py +0 -0
  192. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/iconbutton.pyi +0 -0
  193. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/input.py +0 -0
  194. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/input.pyi +0 -0
  195. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/multiselect.py +0 -0
  196. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/numberinput.py +0 -0
  197. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/numberinput.pyi +0 -0
  198. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/password.py +0 -0
  199. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/password.pyi +0 -0
  200. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/pininput.py +0 -0
  201. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/pininput.pyi +0 -0
  202. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/radio.py +0 -0
  203. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/radio.pyi +0 -0
  204. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/rangeslider.py +0 -0
  205. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/rangeslider.pyi +0 -0
  206. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/select.py +0 -0
  207. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/select.pyi +0 -0
  208. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/slider.py +0 -0
  209. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/slider.pyi +0 -0
  210. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/switch.py +0 -0
  211. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/switch.pyi +0 -0
  212. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/textarea.py +0 -0
  213. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/textarea.pyi +0 -0
  214. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/time_picker.py +0 -0
  215. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/forms/time_picker.pyi +0 -0
  216. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/layout/__init__.py +0 -0
  217. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/layout/aspect_ratio.py +0 -0
  218. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/layout/aspect_ratio.pyi +0 -0
  219. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/layout/box.py +0 -0
  220. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/layout/box.pyi +0 -0
  221. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/layout/card.py +0 -0
  222. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/layout/card.pyi +0 -0
  223. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/layout/center.py +0 -0
  224. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/layout/center.pyi +0 -0
  225. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/layout/container.py +0 -0
  226. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/layout/container.pyi +0 -0
  227. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/layout/flex.py +0 -0
  228. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/layout/flex.pyi +0 -0
  229. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/layout/grid.py +0 -0
  230. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/layout/grid.pyi +0 -0
  231. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/layout/spacer.py +0 -0
  232. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/layout/spacer.pyi +0 -0
  233. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/layout/stack.py +0 -0
  234. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/layout/stack.pyi +0 -0
  235. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/layout/wrap.py +0 -0
  236. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/layout/wrap.pyi +0 -0
  237. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/media/__init__.py +0 -0
  238. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/media/avatar.py +0 -0
  239. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/media/avatar.pyi +0 -0
  240. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/media/icon.py +0 -0
  241. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/media/icon.pyi +0 -0
  242. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/media/image.py +0 -0
  243. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/media/image.pyi +0 -0
  244. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/navigation/__init__.py +0 -0
  245. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/navigation/breadcrumb.py +0 -0
  246. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/navigation/breadcrumb.pyi +0 -0
  247. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/navigation/link.py +0 -0
  248. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/navigation/link.pyi +0 -0
  249. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/navigation/linkoverlay.py +0 -0
  250. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/navigation/linkoverlay.pyi +0 -0
  251. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/navigation/stepper.py +0 -0
  252. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/navigation/stepper.pyi +0 -0
  253. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/overlay/__init__.py +0 -0
  254. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/overlay/alertdialog.py +0 -0
  255. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/overlay/alertdialog.pyi +0 -0
  256. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/overlay/drawer.py +0 -0
  257. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/overlay/drawer.pyi +0 -0
  258. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/overlay/menu.py +0 -0
  259. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/overlay/menu.pyi +0 -0
  260. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/overlay/modal.py +0 -0
  261. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/overlay/modal.pyi +0 -0
  262. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/overlay/popover.py +0 -0
  263. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/overlay/popover.pyi +0 -0
  264. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/overlay/tooltip.py +0 -0
  265. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/overlay/tooltip.pyi +0 -0
  266. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/typography/__init__.py +0 -0
  267. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/typography/heading.py +0 -0
  268. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/typography/heading.pyi +0 -0
  269. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/typography/highlight.py +0 -0
  270. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/typography/highlight.pyi +0 -0
  271. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/typography/span.py +0 -0
  272. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/typography/span.pyi +0 -0
  273. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/typography/text.py +0 -0
  274. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/chakra/typography/text.pyi +0 -0
  275. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/component.py +0 -0
  276. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/core/__init__.py +0 -0
  277. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/core/__init__.pyi +0 -0
  278. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/core/banner.py +0 -0
  279. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/core/banner.pyi +0 -0
  280. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/core/breakpoints.py +0 -0
  281. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/core/client_side_routing.py +0 -0
  282. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/core/client_side_routing.pyi +0 -0
  283. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/core/clipboard.py +0 -0
  284. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/core/clipboard.pyi +0 -0
  285. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/core/colors.py +0 -0
  286. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/core/cond.py +0 -0
  287. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/core/debounce.py +0 -0
  288. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/core/debounce.pyi +0 -0
  289. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/core/foreach.py +0 -0
  290. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/core/html.py +0 -0
  291. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/core/html.pyi +0 -0
  292. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/core/layout/__init__.py +0 -0
  293. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/core/match.py +0 -0
  294. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/core/responsive.py +0 -0
  295. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/core/upload.py +0 -0
  296. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/core/upload.pyi +0 -0
  297. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/datadisplay/__init__.py +0 -0
  298. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/datadisplay/__init__.pyi +0 -0
  299. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/datadisplay/code.py +0 -0
  300. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/datadisplay/code.pyi +0 -0
  301. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/datadisplay/dataeditor.py +0 -0
  302. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/datadisplay/dataeditor.pyi +0 -0
  303. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/datadisplay/logo.py +0 -0
  304. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/el/__init__.py +0 -0
  305. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/el/__init__.pyi +0 -0
  306. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/el/constants/__init__.py +0 -0
  307. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/el/constants/html.py +0 -0
  308. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/el/constants/react.py +0 -0
  309. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/el/constants/reflex.py +0 -0
  310. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/el/element.py +0 -0
  311. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/el/element.pyi +0 -0
  312. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/el/elements/__init__.py +0 -0
  313. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/el/elements/__init__.pyi +0 -0
  314. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/el/elements/base.py +0 -0
  315. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/el/elements/base.pyi +0 -0
  316. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/el/elements/forms.py +0 -0
  317. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/el/elements/forms.pyi +0 -0
  318. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/el/elements/inline.py +0 -0
  319. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/el/elements/inline.pyi +0 -0
  320. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/el/elements/media.py +0 -0
  321. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/el/elements/media.pyi +0 -0
  322. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/el/elements/metadata.py +0 -0
  323. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/el/elements/metadata.pyi +0 -0
  324. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/el/elements/other.py +0 -0
  325. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/el/elements/other.pyi +0 -0
  326. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/el/elements/scripts.py +0 -0
  327. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/el/elements/scripts.pyi +0 -0
  328. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/el/elements/sectioning.py +0 -0
  329. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/el/elements/sectioning.pyi +0 -0
  330. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/el/elements/tables.py +0 -0
  331. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/el/elements/tables.pyi +0 -0
  332. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/el/elements/typography.py +0 -0
  333. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/el/elements/typography.pyi +0 -0
  334. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/gridjs/__init__.py +0 -0
  335. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/gridjs/datatable.py +0 -0
  336. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/gridjs/datatable.pyi +0 -0
  337. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/literals.py +0 -0
  338. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/lucide/__init__.py +0 -0
  339. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/lucide/icon.py +0 -0
  340. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/lucide/icon.pyi +0 -0
  341. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/markdown/__init__.py +0 -0
  342. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/markdown/markdown.py +0 -0
  343. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/markdown/markdown.pyi +0 -0
  344. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/media/__init__.py +0 -0
  345. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/media/icon.py +0 -0
  346. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/moment/__init__.py +0 -0
  347. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/moment/moment.py +0 -0
  348. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/moment/moment.pyi +0 -0
  349. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/next/__init__.py +0 -0
  350. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/next/base.py +0 -0
  351. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/next/base.pyi +0 -0
  352. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/next/image.py +0 -0
  353. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/next/image.pyi +0 -0
  354. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/next/link.py +0 -0
  355. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/next/link.pyi +0 -0
  356. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/next/video.py +0 -0
  357. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/next/video.pyi +0 -0
  358. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/plotly/__init__.py +0 -0
  359. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/plotly/plotly.py +0 -0
  360. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/plotly/plotly.pyi +0 -0
  361. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/props.py +0 -0
  362. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/__init__.py +0 -0
  363. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/__init__.pyi +0 -0
  364. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/primitives/__init__.py +0 -0
  365. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/primitives/__init__.pyi +0 -0
  366. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/primitives/accordion.py +0 -0
  367. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/primitives/accordion.pyi +0 -0
  368. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/primitives/base.py +0 -0
  369. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/primitives/base.pyi +0 -0
  370. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/primitives/drawer.py +0 -0
  371. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/primitives/drawer.pyi +0 -0
  372. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/primitives/form.pyi +0 -0
  373. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/primitives/progress.py +0 -0
  374. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/primitives/progress.pyi +0 -0
  375. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/primitives/slider.py +0 -0
  376. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/primitives/slider.pyi +0 -0
  377. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/__init__.py +0 -0
  378. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/__init__.pyi +0 -0
  379. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/base.py +0 -0
  380. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/base.pyi +0 -0
  381. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/color_mode.py +0 -0
  382. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/color_mode.pyi +0 -0
  383. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/__init__.py +0 -0
  384. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/__init__.pyi +0 -0
  385. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/alert_dialog.py +0 -0
  386. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/alert_dialog.pyi +0 -0
  387. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/aspect_ratio.py +0 -0
  388. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/aspect_ratio.pyi +0 -0
  389. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/avatar.py +0 -0
  390. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/avatar.pyi +0 -0
  391. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/badge.py +0 -0
  392. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/badge.pyi +0 -0
  393. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/button.py +0 -0
  394. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/button.pyi +0 -0
  395. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/callout.py +0 -0
  396. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/callout.pyi +0 -0
  397. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/card.py +0 -0
  398. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/card.pyi +0 -0
  399. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/checkbox.py +0 -0
  400. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/checkbox.pyi +0 -0
  401. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/checkbox_cards.py +0 -0
  402. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/checkbox_cards.pyi +0 -0
  403. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/checkbox_group.py +0 -0
  404. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/checkbox_group.pyi +0 -0
  405. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/context_menu.py +0 -0
  406. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/context_menu.pyi +0 -0
  407. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/data_list.py +0 -0
  408. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/data_list.pyi +0 -0
  409. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/dialog.py +0 -0
  410. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/dialog.pyi +0 -0
  411. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/dropdown_menu.py +0 -0
  412. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/dropdown_menu.pyi +0 -0
  413. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/hover_card.py +0 -0
  414. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/hover_card.pyi +0 -0
  415. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/icon_button.py +0 -0
  416. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/icon_button.pyi +0 -0
  417. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/inset.py +0 -0
  418. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/inset.pyi +0 -0
  419. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/popover.py +0 -0
  420. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/popover.pyi +0 -0
  421. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/progress.py +0 -0
  422. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/progress.pyi +0 -0
  423. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/radio.py +0 -0
  424. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/radio.pyi +0 -0
  425. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/radio_cards.py +0 -0
  426. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/radio_cards.pyi +0 -0
  427. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/radio_group.py +0 -0
  428. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/radio_group.pyi +0 -0
  429. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/scroll_area.py +0 -0
  430. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/scroll_area.pyi +0 -0
  431. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/segmented_control.py +0 -0
  432. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/segmented_control.pyi +0 -0
  433. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/select.py +0 -0
  434. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/select.pyi +0 -0
  435. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/separator.py +0 -0
  436. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/separator.pyi +0 -0
  437. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/skeleton.py +0 -0
  438. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/skeleton.pyi +0 -0
  439. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/slider.py +0 -0
  440. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/slider.pyi +0 -0
  441. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/spinner.py +0 -0
  442. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/spinner.pyi +0 -0
  443. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/switch.py +0 -0
  444. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/switch.pyi +0 -0
  445. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/table.py +0 -0
  446. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/table.pyi +0 -0
  447. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/tabs.py +0 -0
  448. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/tabs.pyi +0 -0
  449. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/text_area.py +0 -0
  450. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/text_area.pyi +0 -0
  451. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/text_field.py +0 -0
  452. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/text_field.pyi +0 -0
  453. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/tooltip.py +0 -0
  454. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/components/tooltip.pyi +0 -0
  455. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/layout/__init__.py +0 -0
  456. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/layout/__init__.pyi +0 -0
  457. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/layout/base.py +0 -0
  458. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/layout/base.pyi +0 -0
  459. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/layout/box.py +0 -0
  460. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/layout/box.pyi +0 -0
  461. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/layout/center.py +0 -0
  462. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/layout/center.pyi +0 -0
  463. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/layout/container.py +0 -0
  464. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/layout/container.pyi +0 -0
  465. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/layout/flex.py +0 -0
  466. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/layout/flex.pyi +0 -0
  467. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/layout/grid.py +0 -0
  468. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/layout/grid.pyi +0 -0
  469. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/layout/list.py +0 -0
  470. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/layout/list.pyi +0 -0
  471. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/layout/section.py +0 -0
  472. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/layout/section.pyi +0 -0
  473. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/layout/spacer.py +0 -0
  474. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/layout/spacer.pyi +0 -0
  475. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/layout/stack.py +0 -0
  476. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/layout/stack.pyi +0 -0
  477. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/typography/__init__.py +0 -0
  478. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/typography/__init__.pyi +0 -0
  479. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/typography/base.py +0 -0
  480. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/typography/blockquote.py +0 -0
  481. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/typography/blockquote.pyi +0 -0
  482. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/typography/code.py +0 -0
  483. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/typography/code.pyi +0 -0
  484. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/typography/heading.py +0 -0
  485. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/typography/heading.pyi +0 -0
  486. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/typography/link.py +0 -0
  487. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/typography/link.pyi +0 -0
  488. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/typography/text.py +0 -0
  489. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/radix/themes/typography/text.pyi +0 -0
  490. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/react_player/__init__.py +0 -0
  491. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/react_player/audio.py +0 -0
  492. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/react_player/audio.pyi +0 -0
  493. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/react_player/react_player.py +0 -0
  494. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/react_player/react_player.pyi +0 -0
  495. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/react_player/video.py +0 -0
  496. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/react_player/video.pyi +0 -0
  497. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/recharts/__init__.py +0 -0
  498. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/recharts/__init__.pyi +0 -0
  499. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/recharts/polar.py +0 -0
  500. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/recharts/polar.pyi +0 -0
  501. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/sonner/__init__.py +0 -0
  502. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/sonner/toast.py +0 -0
  503. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/sonner/toast.pyi +0 -0
  504. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/suneditor/__init__.py +0 -0
  505. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/suneditor/editor.py +0 -0
  506. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/suneditor/editor.pyi +0 -0
  507. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/tags/__init__.py +0 -0
  508. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/tags/cond_tag.py +0 -0
  509. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/tags/iter_tag.py +0 -0
  510. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/tags/match_tag.py +0 -0
  511. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/tags/tag.py +0 -0
  512. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/components/tags/tagless.py +0 -0
  513. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/constants/__init__.py +0 -0
  514. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/constants/base.py +0 -0
  515. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/constants/colors.py +0 -0
  516. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/constants/custom_components.py +0 -0
  517. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/constants/event.py +0 -0
  518. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/constants/installer.py +0 -0
  519. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/constants/route.py +0 -0
  520. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/constants/style.py +0 -0
  521. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/custom_components/__init__.py +0 -0
  522. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/custom_components/custom_components.py +0 -0
  523. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/experimental/assets.py +0 -0
  524. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/experimental/client_state.py +0 -0
  525. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/experimental/hooks.py +0 -0
  526. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/experimental/layout.py +0 -0
  527. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/experimental/layout.pyi +0 -0
  528. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/experimental/misc.py +0 -0
  529. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/middleware/__init__.py +0 -0
  530. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/middleware/hydrate_middleware.py +0 -0
  531. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/middleware/middleware.py +0 -0
  532. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/model.py +0 -0
  533. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/page.py +0 -0
  534. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/reflex.py +0 -0
  535. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/route.py +0 -0
  536. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/style.py +0 -0
  537. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/utils/__init__.py +0 -0
  538. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/utils/build.py +0 -0
  539. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/utils/codespaces.py +0 -0
  540. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/utils/exceptions.py +0 -0
  541. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/utils/exec.py +0 -0
  542. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/utils/export.py +0 -0
  543. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/utils/format.py +0 -0
  544. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/utils/imports.py +0 -0
  545. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/utils/lazy_loader.py +0 -0
  546. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/utils/path_ops.py +0 -0
  547. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/utils/serializers.py +0 -0
  548. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/utils/telemetry.py +0 -0
  549. {reflex-0.5.6a2 → reflex-0.5.7a1}/reflex/utils/watch.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: reflex
3
- Version: 0.5.6a2
3
+ Version: 0.5.7a1
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.6a2"
3
+ version = "0.5.7a1"
4
4
  description = "Web apps in pure Python."
5
5
  license = "Apache-2.0"
6
6
  authors = [
@@ -26,6 +26,8 @@ export const clientStorage = {}
26
26
  {% if state_name %}
27
27
  export const state_name = "{{state_name}}"
28
28
 
29
+ export const exception_state_name = "{{const.frontend_exception_state}}"
30
+
29
31
  // Theses events are triggered on initial load and each page navigation.
30
32
  export const onLoadInternalEvent = () => {
31
33
  const internal_events = [];
@@ -11,6 +11,7 @@ import {
11
11
  initialState,
12
12
  onLoadInternalEvent,
13
13
  state_name,
14
+ exception_state_name,
14
15
  } from "utils/context.js";
15
16
  import debounce from "/utils/helpers/debounce";
16
17
  import throttle from "/utils/helpers/throttle";
@@ -116,7 +117,7 @@ export const isStateful = () => {
116
117
  if (event_queue.length === 0) {
117
118
  return false;
118
119
  }
119
- return event_queue.some(event => event.name.startsWith("state"));
120
+ return event_queue.some(event => event.name.startsWith("reflex___state"));
120
121
  }
121
122
 
122
123
  /**
@@ -247,6 +248,9 @@ export const applyEvent = async (event, socket) => {
247
248
  }
248
249
  } catch (e) {
249
250
  console.log("_call_script", e);
251
+ if (window && window?.onerror) {
252
+ window.onerror(e.message, null, null, null, e)
253
+ }
250
254
  }
251
255
  return false;
252
256
  }
@@ -687,6 +691,31 @@ export const useEventLoop = (
687
691
  }
688
692
  }, [router.isReady]);
689
693
 
694
+ // Handle frontend errors and send them to the backend via websocket.
695
+ useEffect(() => {
696
+
697
+ if (typeof window === 'undefined') {
698
+ return;
699
+ }
700
+
701
+ window.onerror = function (msg, url, lineNo, columnNo, error) {
702
+ addEvents([Event(`${exception_state_name}.handle_frontend_exception`, {
703
+ stack: error.stack,
704
+ })])
705
+ return false;
706
+ }
707
+
708
+ //NOTE: Only works in Chrome v49+
709
+ //https://github.com/mknichel/javascript-errors?tab=readme-ov-file#promise-rejection-events
710
+ window.onunhandledrejection = function (event) {
711
+ addEvents([Event(`${exception_state_name}.handle_frontend_exception`, {
712
+ stack: event.reason.stack,
713
+ })])
714
+ return false;
715
+ }
716
+
717
+ },[])
718
+
690
719
  // Main event loop.
691
720
  useEffect(() => {
692
721
  // Skip if the router is not ready.
@@ -734,7 +763,7 @@ export const useEventLoop = (
734
763
  const vars = {};
735
764
  vars[storage_to_state_map[e.key]] = e.newValue;
736
765
  const event = Event(
737
- `${state_name}.update_vars_internal_state.update_vars_internal`,
766
+ `${state_name}.reflex___state____update_vars_internal_state.update_vars_internal`,
738
767
  { vars: vars }
739
768
  );
740
769
  addEvents([event], e);
@@ -7,12 +7,15 @@ import concurrent.futures
7
7
  import contextlib
8
8
  import copy
9
9
  import functools
10
+ import inspect
10
11
  import io
11
12
  import multiprocessing
12
13
  import os
13
14
  import platform
14
15
  import sys
16
+ import traceback
15
17
  from datetime import datetime
18
+ from pathlib import Path
16
19
  from typing import (
17
20
  Any,
18
21
  AsyncIterator,
@@ -45,6 +48,7 @@ from reflex.compiler import compiler
45
48
  from reflex.compiler import utils as compiler_utils
46
49
  from reflex.compiler.compiler import ExecutorSafeFunctions
47
50
  from reflex.components.base.app_wrap import AppWrap
51
+ from reflex.components.base.error_boundary import ErrorBoundary
48
52
  from reflex.components.base.fragment import Fragment
49
53
  from reflex.components.component import (
50
54
  Component,
@@ -60,7 +64,7 @@ from reflex.components.core.client_side_routing import (
60
64
  from reflex.components.core.upload import Upload, get_upload_dir
61
65
  from reflex.components.radix import themes
62
66
  from reflex.config import get_config
63
- from reflex.event import Event, EventHandler, EventSpec
67
+ from reflex.event import Event, EventHandler, EventSpec, window_alert
64
68
  from reflex.model import Model
65
69
  from reflex.page import (
66
70
  DECORATED_PAGES,
@@ -88,6 +92,33 @@ ComponentCallable = Callable[[], Component]
88
92
  Reducer = Callable[[Event], Coroutine[Any, Any, StateUpdate]]
89
93
 
90
94
 
95
+ def default_frontend_exception_handler(exception: Exception) -> None:
96
+ """Default frontend exception handler function.
97
+
98
+ Args:
99
+ exception: The exception.
100
+
101
+ """
102
+ console.error(f"[Reflex Frontend Exception]\n {exception}\n")
103
+
104
+
105
+ def default_backend_exception_handler(exception: Exception) -> EventSpec:
106
+ """Default backend exception handler function.
107
+
108
+ Args:
109
+ exception: The exception.
110
+
111
+ Returns:
112
+ EventSpec: The window alert event.
113
+
114
+ """
115
+ error = traceback.format_exc()
116
+
117
+ console.error(f"[Reflex Backend Exception]\n {error}\n")
118
+
119
+ return window_alert("An error occurred. See logs for details.")
120
+
121
+
91
122
  def default_overlay_component() -> Component:
92
123
  """Default overlay_component attribute for App.
93
124
 
@@ -101,6 +132,19 @@ def default_overlay_component() -> Component:
101
132
  )
102
133
 
103
134
 
135
+ def default_error_boundary(*children: Component) -> Component:
136
+ """Default error_boundary attribute for App.
137
+
138
+ Args:
139
+ *children: The children to render in the error boundary.
140
+
141
+ Returns:
142
+ The default error_boundary, which is an ErrorBoundary.
143
+
144
+ """
145
+ return ErrorBoundary.create(*children)
146
+
147
+
104
148
  class OverlayFragment(Fragment):
105
149
  """Alias for Fragment, used to wrap the overlay_component."""
106
150
 
@@ -142,6 +186,9 @@ class App(MiddlewareMixin, LifespanMixin, Base):
142
186
  default_overlay_component
143
187
  )
144
188
 
189
+ # Error boundary component to wrap the app with.
190
+ error_boundary: Optional[ComponentCallable] = default_error_boundary
191
+
145
192
  # Components to add to the head of every page.
146
193
  head_components: List[Component] = []
147
194
 
@@ -178,6 +225,16 @@ class App(MiddlewareMixin, LifespanMixin, Base):
178
225
  # Background tasks that are currently running. PRIVATE.
179
226
  background_tasks: Set[asyncio.Task] = set()
180
227
 
228
+ # Frontend Error Handler Function
229
+ frontend_exception_handler: Callable[[Exception], None] = (
230
+ default_frontend_exception_handler
231
+ )
232
+
233
+ # Backend Error Handler Function
234
+ backend_exception_handler: Callable[
235
+ [Exception], Union[EventSpec, List[EventSpec], None]
236
+ ] = default_backend_exception_handler
237
+
181
238
  def __init__(self, **kwargs):
182
239
  """Initialize the app.
183
240
 
@@ -279,6 +336,9 @@ class App(MiddlewareMixin, LifespanMixin, Base):
279
336
  # Mount the socket app with the API.
280
337
  self.api.mount(str(constants.Endpoint.EVENT), socket_app)
281
338
 
339
+ # Check the exception handlers
340
+ self._validate_exception_handlers()
341
+
282
342
  def __repr__(self) -> str:
283
343
  """Get the string representation of the app.
284
344
 
@@ -688,6 +748,25 @@ class App(MiddlewareMixin, LifespanMixin, Base):
688
748
  for k, component in self.pages.items():
689
749
  self.pages[k] = self._add_overlay_to_component(component)
690
750
 
751
+ def _add_error_boundary_to_component(self, component: Component) -> Component:
752
+ if self.error_boundary is None:
753
+ return component
754
+
755
+ component = self.error_boundary(*component.children)
756
+
757
+ return component
758
+
759
+ def _setup_error_boundary(self):
760
+ """If a State is not used and no error_boundary is specified, do not render the error boundary."""
761
+ if self.state is None and self.error_boundary is default_error_boundary:
762
+ self.error_boundary = None
763
+
764
+ for k, component in self.pages.items():
765
+ # Skip the 404 page
766
+ if k == constants.Page404.SLUG:
767
+ continue
768
+ self.pages[k] = self._add_error_boundary_to_component(component)
769
+
691
770
  def _apply_decorated_pages(self):
692
771
  """Add @rx.page decorated pages to the app.
693
772
 
@@ -757,6 +836,7 @@ class App(MiddlewareMixin, LifespanMixin, Base):
757
836
 
758
837
  self._validate_var_dependencies()
759
838
  self._setup_overlay_component()
839
+ self._setup_error_boundary()
760
840
 
761
841
  # Create a progress bar.
762
842
  progress = Progress(
@@ -940,9 +1020,6 @@ class App(MiddlewareMixin, LifespanMixin, Base):
940
1020
 
941
1021
  progress.advance(task)
942
1022
 
943
- # Empty the .web pages directory.
944
- compiler.purge_web_pages_dir()
945
-
946
1023
  progress.advance(task)
947
1024
  progress.stop()
948
1025
 
@@ -960,6 +1037,19 @@ class App(MiddlewareMixin, LifespanMixin, Base):
960
1037
  transpile_packages=transpile_packages,
961
1038
  )
962
1039
 
1040
+ if is_prod_mode():
1041
+ # Empty the .web pages directory.
1042
+ compiler.purge_web_pages_dir()
1043
+ else:
1044
+ # In dev mode, delete removed pages and update existing pages.
1045
+ keep_files = [Path(output_path) for output_path, _ in compile_results]
1046
+ for p in Path(prerequisites.get_web_dir() / constants.Dirs.PAGES).rglob(
1047
+ "*"
1048
+ ):
1049
+ if p.is_file() and p not in keep_files:
1050
+ # Remove pages that are no longer in the app.
1051
+ p.unlink()
1052
+
963
1053
  for output_path, code in compile_results:
964
1054
  compiler_utils.write_page(output_path, code)
965
1055
 
@@ -1036,6 +1126,100 @@ class App(MiddlewareMixin, LifespanMixin, Base):
1036
1126
  task.add_done_callback(self.background_tasks.discard)
1037
1127
  return task
1038
1128
 
1129
+ def _validate_exception_handlers(self):
1130
+ """Validate the custom event exception handlers for front- and backend.
1131
+
1132
+ Raises:
1133
+ ValueError: If the custom exception handlers are invalid.
1134
+
1135
+ """
1136
+ FRONTEND_ARG_SPEC = {
1137
+ "exception": Exception,
1138
+ }
1139
+
1140
+ BACKEND_ARG_SPEC = {
1141
+ "exception": Exception,
1142
+ }
1143
+
1144
+ for handler_domain, handler_fn, handler_spec in zip(
1145
+ ["frontend", "backend"],
1146
+ [self.frontend_exception_handler, self.backend_exception_handler],
1147
+ [
1148
+ FRONTEND_ARG_SPEC,
1149
+ BACKEND_ARG_SPEC,
1150
+ ],
1151
+ ):
1152
+ if hasattr(handler_fn, "__name__"):
1153
+ _fn_name = handler_fn.__name__
1154
+ else:
1155
+ _fn_name = handler_fn.__class__.__name__
1156
+
1157
+ if isinstance(handler_fn, functools.partial):
1158
+ raise ValueError(
1159
+ f"Provided custom {handler_domain} exception handler `{_fn_name}` is a partial function. Please provide a named function instead."
1160
+ )
1161
+
1162
+ if not callable(handler_fn):
1163
+ raise ValueError(
1164
+ f"Provided custom {handler_domain} exception handler `{_fn_name}` is not a function."
1165
+ )
1166
+
1167
+ # Allow named functions only as lambda functions cannot be introspected
1168
+ if _fn_name == "<lambda>":
1169
+ raise ValueError(
1170
+ f"Provided custom {handler_domain} exception handler `{_fn_name}` is a lambda function. Please use a named function instead."
1171
+ )
1172
+
1173
+ # Check if the function has the necessary annotations and types in the right order
1174
+ argspec = inspect.getfullargspec(handler_fn)
1175
+ arg_annotations = {
1176
+ k: eval(v) if isinstance(v, str) else v
1177
+ for k, v in argspec.annotations.items()
1178
+ if k not in ["args", "kwargs", "return"]
1179
+ }
1180
+
1181
+ for required_arg_index, required_arg in enumerate(handler_spec):
1182
+ if required_arg not in arg_annotations:
1183
+ raise ValueError(
1184
+ f"Provided custom {handler_domain} exception handler `{_fn_name}` does not take the required argument `{required_arg}`"
1185
+ )
1186
+ elif (
1187
+ not list(arg_annotations.keys())[required_arg_index] == required_arg
1188
+ ):
1189
+ raise ValueError(
1190
+ f"Provided custom {handler_domain} exception handler `{_fn_name}` has the wrong argument order."
1191
+ f"Expected `{required_arg}` as the {required_arg_index+1} argument but got `{list(arg_annotations.keys())[required_arg_index]}`"
1192
+ )
1193
+
1194
+ if not issubclass(arg_annotations[required_arg], Exception):
1195
+ raise ValueError(
1196
+ f"Provided custom {handler_domain} exception handler `{_fn_name}` has the wrong type for {required_arg} argument."
1197
+ f"Expected to be `Exception` but got `{arg_annotations[required_arg]}`"
1198
+ )
1199
+
1200
+ # Check if the return type is valid for backend exception handler
1201
+ if handler_domain == "backend":
1202
+ sig = inspect.signature(self.backend_exception_handler)
1203
+ return_type = (
1204
+ eval(sig.return_annotation)
1205
+ if isinstance(sig.return_annotation, str)
1206
+ else sig.return_annotation
1207
+ )
1208
+
1209
+ valid = bool(
1210
+ return_type == EventSpec
1211
+ or return_type == Optional[EventSpec]
1212
+ or return_type == List[EventSpec]
1213
+ or return_type == inspect.Signature.empty
1214
+ or return_type is None
1215
+ )
1216
+
1217
+ if not valid:
1218
+ raise ValueError(
1219
+ f"Provided custom {handler_domain} exception handler `{_fn_name}` has the wrong return type."
1220
+ f"Expected `Union[EventSpec, List[EventSpec], None]` but got `{return_type}`"
1221
+ )
1222
+
1039
1223
 
1040
1224
  async def process(
1041
1225
  app: App, event: Event, sid: str, headers: Dict, client_ip: str
@@ -1101,6 +1285,8 @@ async def process(
1101
1285
  yield update
1102
1286
  except Exception as ex:
1103
1287
  telemetry.send_error(ex, context="backend")
1288
+
1289
+ app.backend_exception_handler(ex)
1104
1290
  raise
1105
1291
 
1106
1292
 
@@ -44,6 +44,7 @@ class ReflexJinjaEnvironment(Environment):
44
44
  "hydrate": constants.CompileVars.HYDRATE,
45
45
  "on_load_internal": constants.CompileVars.ON_LOAD_INTERNAL,
46
46
  "update_vars_internal": constants.CompileVars.UPDATE_VARS_INTERNAL,
47
+ "frontend_exception_state": constants.CompileVars.FRONTEND_EXCEPTION_STATE_FULL,
47
48
  }
48
49
 
49
50
 
@@ -13,6 +13,10 @@ _SUBMOD_ATTRS: dict[str, list[str]] = {
13
13
  "Fragment",
14
14
  "fragment",
15
15
  ],
16
+ "error_boundary": [
17
+ "ErrorBoundary",
18
+ "error_boundary",
19
+ ],
16
20
  "head": [
17
21
  "head",
18
22
  "Head",
@@ -10,6 +10,8 @@ from .document import DocumentHead as DocumentHead
10
10
  from .document import Html as Html
11
11
  from .document import Main as Main
12
12
  from .document import NextScript as NextScript
13
+ from .error_boundary import ErrorBoundary as ErrorBoundary
14
+ from .error_boundary import error_boundary as error_boundary
13
15
  from .fragment import Fragment as Fragment
14
16
  from .fragment import fragment as fragment
15
17
  from .head import Head as Head
@@ -0,0 +1,78 @@
1
+ """A React Error Boundary component that catches unhandled frontend exceptions."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import List
6
+
7
+ from reflex.compiler.compiler import _compile_component
8
+ from reflex.components.component import Component
9
+ from reflex.components.el import div, p
10
+ from reflex.constants import Hooks, Imports
11
+ from reflex.event import EventChain, EventHandler
12
+ from reflex.utils.imports import ImportVar
13
+ from reflex.vars import Var
14
+
15
+
16
+ class ErrorBoundary(Component):
17
+ """A React Error Boundary component that catches unhandled frontend exceptions."""
18
+
19
+ library = "react-error-boundary"
20
+ tag = "ErrorBoundary"
21
+
22
+ # Fired when the boundary catches an error.
23
+ on_error: EventHandler[lambda error, info: [error, info]] = Var.create_safe( # type: ignore
24
+ "logFrontendError", _var_is_string=False, _var_is_local=False
25
+ ).to(EventChain)
26
+
27
+ # Rendered instead of the children when an error is caught.
28
+ Fallback_component: Var[Component] = Var.create_safe(
29
+ "Fallback", _var_is_string=False, _var_is_local=False
30
+ ).to(Component)
31
+
32
+ def add_imports(self) -> dict[str, list[ImportVar]]:
33
+ """Add imports for the component.
34
+
35
+ Returns:
36
+ The imports to add.
37
+ """
38
+ return Imports.EVENTS
39
+
40
+ def add_hooks(self) -> List[str | Var]:
41
+ """Add hooks for the component.
42
+
43
+ Returns:
44
+ The hooks to add.
45
+ """
46
+ return [Hooks.EVENTS, Hooks.FRONTEND_ERRORS]
47
+
48
+ def add_custom_code(self) -> List[str]:
49
+ """Add custom Javascript code into the page that contains this component.
50
+
51
+ Custom code is inserted at module level, after any imports.
52
+
53
+ Returns:
54
+ The custom code to add.
55
+ """
56
+ fallback_container = div(
57
+ p("Ooops...Unknown Reflex error has occured:"),
58
+ p(
59
+ Var.create("error.message", _var_is_local=False, _var_is_string=False),
60
+ color="red",
61
+ ),
62
+ p("Please contact the support."),
63
+ )
64
+
65
+ compiled_fallback = _compile_component(fallback_container)
66
+
67
+ return [
68
+ f"""
69
+ function Fallback({{ error, resetErrorBoundary }}) {{
70
+ return (
71
+ {compiled_fallback}
72
+ );
73
+ }}
74
+ """
75
+ ]
76
+
77
+
78
+ error_boundary = ErrorBoundary.create
@@ -0,0 +1,98 @@
1
+ """Stub file for reflex/components/base/error_boundary.py"""
2
+
3
+ # ------------------- DO NOT EDIT ----------------------
4
+ # This file was generated by `reflex/utils/pyi_generator.py`!
5
+ # ------------------------------------------------------
6
+ from typing import Any, Callable, Dict, List, Optional, Union, overload
7
+
8
+ from reflex.components.component import Component
9
+ from reflex.event import EventHandler, EventSpec
10
+ from reflex.style import Style
11
+ from reflex.utils.imports import ImportVar
12
+ from reflex.vars import BaseVar, Var
13
+
14
+ class ErrorBoundary(Component):
15
+ def add_imports(self) -> dict[str, list[ImportVar]]: ...
16
+ def add_hooks(self) -> List[str | Var]: ...
17
+ def add_custom_code(self) -> List[str]: ...
18
+ @overload
19
+ @classmethod
20
+ def create( # type: ignore
21
+ cls,
22
+ *children,
23
+ Fallback_component: Optional[Union[Var[Component], Component]] = None,
24
+ style: Optional[Style] = None,
25
+ key: Optional[Any] = None,
26
+ id: Optional[Any] = None,
27
+ class_name: Optional[Any] = None,
28
+ autofocus: Optional[bool] = None,
29
+ custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
30
+ on_blur: Optional[
31
+ Union[EventHandler, EventSpec, list, Callable, BaseVar]
32
+ ] = None,
33
+ on_click: Optional[
34
+ Union[EventHandler, EventSpec, list, Callable, BaseVar]
35
+ ] = None,
36
+ on_context_menu: Optional[
37
+ Union[EventHandler, EventSpec, list, Callable, BaseVar]
38
+ ] = None,
39
+ on_double_click: Optional[
40
+ Union[EventHandler, EventSpec, list, Callable, BaseVar]
41
+ ] = None,
42
+ on_error: Optional[
43
+ Union[EventHandler, EventSpec, list, Callable, BaseVar]
44
+ ] = None,
45
+ on_focus: Optional[
46
+ Union[EventHandler, EventSpec, list, Callable, BaseVar]
47
+ ] = None,
48
+ on_mount: Optional[
49
+ Union[EventHandler, EventSpec, list, Callable, BaseVar]
50
+ ] = None,
51
+ on_mouse_down: Optional[
52
+ Union[EventHandler, EventSpec, list, Callable, BaseVar]
53
+ ] = None,
54
+ on_mouse_enter: Optional[
55
+ Union[EventHandler, EventSpec, list, Callable, BaseVar]
56
+ ] = None,
57
+ on_mouse_leave: Optional[
58
+ Union[EventHandler, EventSpec, list, Callable, BaseVar]
59
+ ] = None,
60
+ on_mouse_move: Optional[
61
+ Union[EventHandler, EventSpec, list, Callable, BaseVar]
62
+ ] = None,
63
+ on_mouse_out: Optional[
64
+ Union[EventHandler, EventSpec, list, Callable, BaseVar]
65
+ ] = None,
66
+ on_mouse_over: Optional[
67
+ Union[EventHandler, EventSpec, list, Callable, BaseVar]
68
+ ] = None,
69
+ on_mouse_up: Optional[
70
+ Union[EventHandler, EventSpec, list, Callable, BaseVar]
71
+ ] = None,
72
+ on_scroll: Optional[
73
+ Union[EventHandler, EventSpec, list, Callable, BaseVar]
74
+ ] = None,
75
+ on_unmount: Optional[
76
+ Union[EventHandler, EventSpec, list, Callable, BaseVar]
77
+ ] = None,
78
+ **props,
79
+ ) -> "ErrorBoundary":
80
+ """Create the component.
81
+
82
+ Args:
83
+ *children: The children of the component.
84
+ Fallback_component: Rendered instead of the children when an error is caught.
85
+ style: The style of the component.
86
+ key: A unique key for the component.
87
+ id: The id for the component.
88
+ class_name: The class name for the component.
89
+ autofocus: Whether the component should take the focus once the page is loaded
90
+ custom_attrs: custom attribute
91
+ **props: The props of the component.
92
+
93
+ Returns:
94
+ The component.
95
+ """
96
+ ...
97
+
98
+ error_boundary = ErrorBoundary.create
@@ -5,6 +5,7 @@ from __future__ import annotations
5
5
  from typing import Any, Literal
6
6
 
7
7
  from reflex.components.component import ComponentNamespace
8
+ from reflex.components.core.debounce import DebounceInput
8
9
  from reflex.components.el.elements.forms import Form as HTMLForm
9
10
  from reflex.components.radix.themes.components.text_field import TextFieldRoot
10
11
  from reflex.event import EventHandler
@@ -103,9 +104,9 @@ class FormControl(FormComponent):
103
104
  f"FormControl can only have at most one child, got {len(children)} children"
104
105
  )
105
106
  for child in children:
106
- if not isinstance(child, TextFieldRoot):
107
+ if not isinstance(child, (TextFieldRoot, DebounceInput)):
107
108
  raise TypeError(
108
- "Only Radix TextFieldRoot is allowed as child of FormControl"
109
+ "Only Radix TextFieldRoot and DebounceInput are allowed as children of FormControl"
109
110
  )
110
111
  return super().create(*children, **props)
111
112