reflex 0.8.0a4__tar.gz → 0.8.0a5__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 (404) hide show
  1. {reflex-0.8.0a4 → reflex-0.8.0a5}/PKG-INFO +2 -2
  2. {reflex-0.8.0a4 → reflex-0.8.0a5}/pyproject.toml +2 -2
  3. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/web/styles/styles.css.jinja2 +1 -0
  4. reflex-0.8.0a5/reflex/.templates/web/app/routes.js +10 -0
  5. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/web/utils/client_side_routing.js +1 -1
  6. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/web/utils/state.js +32 -21
  7. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/app.py +34 -42
  8. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/compiler/compiler.py +3 -1
  9. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/compiler/utils.py +4 -2
  10. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/meta.py +4 -15
  11. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/foreach.py +2 -2
  12. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/match.py +3 -3
  13. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/upload.py +2 -1
  14. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/datadisplay/code.py +12 -7
  15. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/datadisplay/shiki_code_block.py +5 -3
  16. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/markdown/markdown.py +5 -3
  17. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/plotly/plotly.py +12 -6
  18. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/color_mode.py +5 -6
  19. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/recharts/cartesian.py +9 -2
  20. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/constants/route.py +13 -6
  21. reflex-0.8.0a5/reflex/route.py +222 -0
  22. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/state.py +21 -4
  23. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/exec.py +10 -10
  24. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/format.py +1 -5
  25. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/misc.py +40 -0
  26. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/prerequisites.py +6 -11
  27. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/pyi_generator.py +23 -40
  28. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/types.py +1 -1
  29. reflex-0.8.0a4/reflex/.templates/web/app/routes.js +0 -10
  30. reflex-0.8.0a4/reflex/route.py +0 -134
  31. {reflex-0.8.0a4 → reflex-0.8.0a5}/.gitignore +0 -0
  32. {reflex-0.8.0a4 → reflex-0.8.0a5}/LICENSE +0 -0
  33. {reflex-0.8.0a4 → reflex-0.8.0a5}/README.md +0 -0
  34. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/apps/blank/assets/favicon.ico +0 -0
  35. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/apps/blank/code/__init__.py +0 -0
  36. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/apps/blank/code/blank.py +0 -0
  37. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/app/rxconfig.py.jinja2 +0 -0
  38. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/custom_components/README.md.jinja2 +0 -0
  39. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/custom_components/__init__.py.jinja2 +0 -0
  40. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/custom_components/demo_app.py.jinja2 +0 -0
  41. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/custom_components/pyproject.toml.jinja2 +0 -0
  42. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/custom_components/src.py.jinja2 +0 -0
  43. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/web/package.json.jinja2 +0 -0
  44. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/web/pages/_app.js.jinja2 +0 -0
  45. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/web/pages/_document.js.jinja2 +0 -0
  46. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/web/pages/base_page.js.jinja2 +0 -0
  47. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/web/pages/component.js.jinja2 +0 -0
  48. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/web/pages/custom_component.js.jinja2 +0 -0
  49. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/web/pages/index.js.jinja2 +0 -0
  50. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/web/pages/macros.js.jinja2 +0 -0
  51. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/web/pages/stateful_component.js.jinja2 +0 -0
  52. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/web/pages/stateful_components.js.jinja2 +0 -0
  53. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/web/pages/utils.js.jinja2 +0 -0
  54. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/web/utils/context.js.jinja2 +0 -0
  55. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/jinja/web/utils/theme.js.jinja2 +0 -0
  56. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/web/.gitignore +0 -0
  57. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/web/app/entry.client.js +0 -0
  58. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +0 -0
  59. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/web/components/shiki/code.js +0 -0
  60. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/web/jsconfig.json +0 -0
  61. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/web/postcss.config.js +0 -0
  62. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/web/react-router.config.js +0 -0
  63. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/web/styles/__reflex_style_reset.css +0 -0
  64. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/web/utils/helpers/dataeditor.js +0 -0
  65. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/web/utils/helpers/debounce.js +0 -0
  66. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/web/utils/helpers/paste.js +0 -0
  67. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/web/utils/helpers/range.js +0 -0
  68. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/web/utils/helpers/throttle.js +0 -0
  69. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/web/utils/react-theme.js +0 -0
  70. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/.templates/web/vite.config.js +0 -0
  71. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/__init__.py +0 -0
  72. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/__init__.pyi +0 -0
  73. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/__main__.py +0 -0
  74. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/admin.py +0 -0
  75. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/app_mixins/__init__.py +0 -0
  76. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/app_mixins/lifespan.py +0 -0
  77. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/app_mixins/middleware.py +0 -0
  78. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/app_mixins/mixin.py +0 -0
  79. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/assets.py +0 -0
  80. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/base.py +0 -0
  81. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/compiler/__init__.py +0 -0
  82. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/compiler/templates.py +0 -0
  83. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/__init__.py +0 -0
  84. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/__init__.pyi +0 -0
  85. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/__init__.py +0 -0
  86. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/__init__.pyi +0 -0
  87. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/app_wrap.py +0 -0
  88. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/app_wrap.pyi +0 -0
  89. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/bare.py +0 -0
  90. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/body.py +0 -0
  91. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/body.pyi +0 -0
  92. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/document.py +0 -0
  93. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/document.pyi +0 -0
  94. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/error_boundary.py +0 -0
  95. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/error_boundary.pyi +0 -0
  96. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/fragment.py +0 -0
  97. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/fragment.pyi +0 -0
  98. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/link.py +0 -0
  99. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/link.pyi +0 -0
  100. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/meta.pyi +0 -0
  101. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/script.py +0 -0
  102. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/script.pyi +0 -0
  103. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/strict_mode.py +0 -0
  104. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/base/strict_mode.pyi +0 -0
  105. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/component.py +0 -0
  106. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/__init__.py +0 -0
  107. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/__init__.pyi +0 -0
  108. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/auto_scroll.py +0 -0
  109. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/auto_scroll.pyi +0 -0
  110. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/banner.py +0 -0
  111. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/banner.pyi +0 -0
  112. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/breakpoints.py +0 -0
  113. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/client_side_routing.py +0 -0
  114. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/client_side_routing.pyi +0 -0
  115. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/clipboard.py +0 -0
  116. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/clipboard.pyi +0 -0
  117. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/colors.py +0 -0
  118. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/cond.py +0 -0
  119. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/debounce.py +0 -0
  120. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/debounce.pyi +0 -0
  121. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/helmet.py +0 -0
  122. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/helmet.pyi +0 -0
  123. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/html.py +0 -0
  124. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/html.pyi +0 -0
  125. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/layout/__init__.py +0 -0
  126. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/responsive.py +0 -0
  127. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/sticky.py +0 -0
  128. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/sticky.pyi +0 -0
  129. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/core/upload.pyi +0 -0
  130. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/datadisplay/__init__.py +0 -0
  131. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/datadisplay/__init__.pyi +0 -0
  132. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/datadisplay/code.pyi +0 -0
  133. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/datadisplay/dataeditor.py +0 -0
  134. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/datadisplay/dataeditor.pyi +0 -0
  135. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/datadisplay/logo.py +0 -0
  136. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/datadisplay/shiki_code_block.pyi +0 -0
  137. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/dynamic.py +0 -0
  138. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/__init__.py +0 -0
  139. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/__init__.pyi +0 -0
  140. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/constants/__init__.py +0 -0
  141. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/constants/html.py +0 -0
  142. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/constants/react.py +0 -0
  143. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/constants/reflex.py +0 -0
  144. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/element.py +0 -0
  145. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/element.pyi +0 -0
  146. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/__init__.py +0 -0
  147. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/__init__.pyi +0 -0
  148. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/base.py +0 -0
  149. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/base.pyi +0 -0
  150. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/forms.py +0 -0
  151. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/forms.pyi +0 -0
  152. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/inline.py +0 -0
  153. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/inline.pyi +0 -0
  154. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/media.py +0 -0
  155. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/media.pyi +0 -0
  156. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/metadata.py +0 -0
  157. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/metadata.pyi +0 -0
  158. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/other.py +0 -0
  159. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/other.pyi +0 -0
  160. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/scripts.py +0 -0
  161. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/scripts.pyi +0 -0
  162. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/sectioning.py +0 -0
  163. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/sectioning.pyi +0 -0
  164. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/tables.py +0 -0
  165. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/tables.pyi +0 -0
  166. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/typography.py +0 -0
  167. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/el/elements/typography.pyi +0 -0
  168. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/field.py +0 -0
  169. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/gridjs/__init__.py +0 -0
  170. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/gridjs/datatable.py +0 -0
  171. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/gridjs/datatable.pyi +0 -0
  172. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/literals.py +0 -0
  173. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/lucide/__init__.py +0 -0
  174. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/lucide/icon.py +0 -0
  175. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/lucide/icon.pyi +0 -0
  176. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/markdown/__init__.py +0 -0
  177. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/markdown/markdown.pyi +0 -0
  178. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/moment/__init__.py +0 -0
  179. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/moment/moment.py +0 -0
  180. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/moment/moment.pyi +0 -0
  181. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/plotly/__init__.py +0 -0
  182. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/plotly/plotly.pyi +0 -0
  183. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/props.py +0 -0
  184. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/__init__.py +0 -0
  185. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/__init__.pyi +0 -0
  186. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/primitives/__init__.py +0 -0
  187. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/primitives/__init__.pyi +0 -0
  188. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/primitives/accordion.py +0 -0
  189. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/primitives/accordion.pyi +0 -0
  190. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/primitives/base.py +0 -0
  191. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/primitives/base.pyi +0 -0
  192. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/primitives/drawer.py +0 -0
  193. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/primitives/drawer.pyi +0 -0
  194. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/primitives/form.py +0 -0
  195. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/primitives/form.pyi +0 -0
  196. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/primitives/progress.py +0 -0
  197. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/primitives/progress.pyi +0 -0
  198. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/primitives/slider.py +0 -0
  199. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/primitives/slider.pyi +0 -0
  200. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/__init__.py +0 -0
  201. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/__init__.pyi +0 -0
  202. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/base.py +0 -0
  203. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/base.pyi +0 -0
  204. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/color_mode.pyi +0 -0
  205. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/__init__.py +0 -0
  206. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/__init__.pyi +0 -0
  207. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/alert_dialog.py +0 -0
  208. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/alert_dialog.pyi +0 -0
  209. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/aspect_ratio.py +0 -0
  210. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/aspect_ratio.pyi +0 -0
  211. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/avatar.py +0 -0
  212. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/avatar.pyi +0 -0
  213. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/badge.py +0 -0
  214. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/badge.pyi +0 -0
  215. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/button.py +0 -0
  216. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/button.pyi +0 -0
  217. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/callout.py +0 -0
  218. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/callout.pyi +0 -0
  219. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/card.py +0 -0
  220. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/card.pyi +0 -0
  221. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/checkbox.py +0 -0
  222. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/checkbox.pyi +0 -0
  223. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/checkbox_cards.py +0 -0
  224. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/checkbox_cards.pyi +0 -0
  225. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/checkbox_group.py +0 -0
  226. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/checkbox_group.pyi +0 -0
  227. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/context_menu.py +0 -0
  228. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/context_menu.pyi +0 -0
  229. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/data_list.py +0 -0
  230. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/data_list.pyi +0 -0
  231. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/dialog.py +0 -0
  232. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/dialog.pyi +0 -0
  233. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/dropdown_menu.py +0 -0
  234. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/dropdown_menu.pyi +0 -0
  235. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/hover_card.py +0 -0
  236. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/hover_card.pyi +0 -0
  237. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/icon_button.py +0 -0
  238. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/icon_button.pyi +0 -0
  239. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/inset.py +0 -0
  240. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/inset.pyi +0 -0
  241. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/popover.py +0 -0
  242. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/popover.pyi +0 -0
  243. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/progress.py +0 -0
  244. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/progress.pyi +0 -0
  245. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/radio.py +0 -0
  246. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/radio.pyi +0 -0
  247. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/radio_cards.py +0 -0
  248. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/radio_cards.pyi +0 -0
  249. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/radio_group.py +0 -0
  250. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/radio_group.pyi +0 -0
  251. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/scroll_area.py +0 -0
  252. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/scroll_area.pyi +0 -0
  253. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/segmented_control.py +0 -0
  254. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/segmented_control.pyi +0 -0
  255. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/select.py +0 -0
  256. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/select.pyi +0 -0
  257. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/separator.py +0 -0
  258. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/separator.pyi +0 -0
  259. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/skeleton.py +0 -0
  260. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/skeleton.pyi +0 -0
  261. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/slider.py +0 -0
  262. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/slider.pyi +0 -0
  263. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/spinner.py +0 -0
  264. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/spinner.pyi +0 -0
  265. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/switch.py +0 -0
  266. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/switch.pyi +0 -0
  267. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/table.py +0 -0
  268. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/table.pyi +0 -0
  269. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/tabs.py +0 -0
  270. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/tabs.pyi +0 -0
  271. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/text_area.py +0 -0
  272. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/text_area.pyi +0 -0
  273. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/text_field.py +0 -0
  274. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/text_field.pyi +0 -0
  275. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/tooltip.py +0 -0
  276. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/components/tooltip.pyi +0 -0
  277. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/__init__.py +0 -0
  278. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/__init__.pyi +0 -0
  279. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/base.py +0 -0
  280. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/base.pyi +0 -0
  281. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/box.py +0 -0
  282. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/box.pyi +0 -0
  283. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/center.py +0 -0
  284. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/center.pyi +0 -0
  285. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/container.py +0 -0
  286. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/container.pyi +0 -0
  287. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/flex.py +0 -0
  288. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/flex.pyi +0 -0
  289. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/grid.py +0 -0
  290. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/grid.pyi +0 -0
  291. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/list.py +0 -0
  292. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/list.pyi +0 -0
  293. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/section.py +0 -0
  294. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/section.pyi +0 -0
  295. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/spacer.py +0 -0
  296. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/spacer.pyi +0 -0
  297. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/stack.py +0 -0
  298. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/layout/stack.pyi +0 -0
  299. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/typography/__init__.py +0 -0
  300. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/typography/__init__.pyi +0 -0
  301. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/typography/base.py +0 -0
  302. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/typography/blockquote.py +0 -0
  303. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/typography/blockquote.pyi +0 -0
  304. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/typography/code.py +0 -0
  305. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/typography/code.pyi +0 -0
  306. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/typography/heading.py +0 -0
  307. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/typography/heading.pyi +0 -0
  308. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/typography/link.py +0 -0
  309. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/typography/link.pyi +0 -0
  310. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/typography/text.py +0 -0
  311. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/radix/themes/typography/text.pyi +0 -0
  312. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/react_player/__init__.py +0 -0
  313. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/react_player/audio.py +0 -0
  314. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/react_player/audio.pyi +0 -0
  315. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/react_player/react_player.py +0 -0
  316. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/react_player/react_player.pyi +0 -0
  317. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/react_player/video.py +0 -0
  318. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/react_player/video.pyi +0 -0
  319. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/recharts/__init__.py +0 -0
  320. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/recharts/__init__.pyi +0 -0
  321. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/recharts/cartesian.pyi +0 -0
  322. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/recharts/charts.py +0 -0
  323. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/recharts/charts.pyi +0 -0
  324. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/recharts/general.py +0 -0
  325. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/recharts/general.pyi +0 -0
  326. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/recharts/polar.py +0 -0
  327. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/recharts/polar.pyi +0 -0
  328. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/recharts/recharts.py +0 -0
  329. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/recharts/recharts.pyi +0 -0
  330. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/sonner/__init__.py +0 -0
  331. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/sonner/toast.py +0 -0
  332. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/sonner/toast.pyi +0 -0
  333. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/tags/__init__.py +0 -0
  334. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/tags/cond_tag.py +0 -0
  335. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/tags/iter_tag.py +0 -0
  336. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/tags/match_tag.py +0 -0
  337. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/tags/tag.py +0 -0
  338. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/components/tags/tagless.py +0 -0
  339. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/config.py +0 -0
  340. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/constants/__init__.py +0 -0
  341. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/constants/base.py +0 -0
  342. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/constants/colors.py +0 -0
  343. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/constants/compiler.py +0 -0
  344. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/constants/config.py +0 -0
  345. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/constants/custom_components.py +0 -0
  346. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/constants/event.py +0 -0
  347. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/constants/installer.py +0 -0
  348. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/constants/state.py +0 -0
  349. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/constants/utils.py +0 -0
  350. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/custom_components/__init__.py +0 -0
  351. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/custom_components/custom_components.py +0 -0
  352. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/environment.py +0 -0
  353. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/event.py +0 -0
  354. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/experimental/__init__.py +0 -0
  355. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/experimental/client_state.py +0 -0
  356. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/experimental/hooks.py +0 -0
  357. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/istate/__init__.py +0 -0
  358. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/istate/data.py +0 -0
  359. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/istate/dynamic.py +0 -0
  360. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/istate/manager.py +0 -0
  361. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/istate/proxy.py +0 -0
  362. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/istate/storage.py +0 -0
  363. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/istate/wrappers.py +0 -0
  364. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/middleware/__init__.py +0 -0
  365. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/middleware/hydrate_middleware.py +0 -0
  366. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/middleware/middleware.py +0 -0
  367. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/model.py +0 -0
  368. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/page.py +0 -0
  369. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/plugins/__init__.py +0 -0
  370. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/plugins/base.py +0 -0
  371. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/plugins/shared_tailwind.py +0 -0
  372. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/plugins/sitemap.py +0 -0
  373. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/plugins/tailwind_v3.py +0 -0
  374. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/plugins/tailwind_v4.py +0 -0
  375. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/py.typed +0 -0
  376. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/reflex.py +0 -0
  377. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/style.py +0 -0
  378. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/testing.py +0 -0
  379. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/__init__.py +0 -0
  380. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/build.py +0 -0
  381. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/codespaces.py +0 -0
  382. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/compat.py +0 -0
  383. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/console.py +0 -0
  384. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/decorator.py +0 -0
  385. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/exceptions.py +0 -0
  386. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/export.py +0 -0
  387. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/imports.py +0 -0
  388. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/lazy_loader.py +0 -0
  389. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/net.py +0 -0
  390. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/path_ops.py +0 -0
  391. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/processes.py +0 -0
  392. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/redir.py +0 -0
  393. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/registry.py +0 -0
  394. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/serializers.py +0 -0
  395. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/utils/telemetry.py +0 -0
  396. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/vars/__init__.py +0 -0
  397. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/vars/base.py +0 -0
  398. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/vars/datetime.py +0 -0
  399. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/vars/dep_tracking.py +0 -0
  400. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/vars/function.py +0 -0
  401. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/vars/number.py +0 -0
  402. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/vars/object.py +0 -0
  403. {reflex-0.8.0a4 → reflex-0.8.0a5}/reflex/vars/sequence.py +0 -0
  404. {reflex-0.8.0a4 → reflex-0.8.0a5}/scripts/hatch_build.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: reflex
3
- Version: 0.8.0a4
3
+ Version: 0.8.0a5
4
4
  Summary: Web apps in pure Python.
5
5
  Project-URL: homepage, https://reflex.dev
6
6
  Project-URL: repository, https://github.com/reflex-dev/reflex
@@ -19,7 +19,7 @@ Classifier: Programming Language :: Python :: 3.12
19
19
  Classifier: Programming Language :: Python :: 3.13
20
20
  Requires-Python: <4.0,>=3.10
21
21
  Requires-Dist: alembic<2.0,>=1.15.2
22
- Requires-Dist: click>=8
22
+ Requires-Dist: click>=8.2
23
23
  Requires-Dist: fastapi>=0.115.0
24
24
  Requires-Dist: granian[reload]>=2.2.5
25
25
  Requires-Dist: httpx<1.0,>=0.28.0
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "reflex"
3
- version = "0.8.0a4"
3
+ version = "0.8.0a5"
4
4
  description = "Web apps in pure Python."
5
5
  license.text = "Apache-2.0"
6
6
  authors = [
@@ -35,7 +35,7 @@ dependencies = [
35
35
  "reflex-hosting-cli >=0.1.47",
36
36
  "rich >=13,<15",
37
37
  "sqlmodel >=0.0.24,<0.1",
38
- "click >=8",
38
+ "click >=8.2",
39
39
  "typing_extensions >=4.13.0",
40
40
  "wrapt >=1.17.0,<2.0",
41
41
  ]
@@ -1,4 +1,5 @@
1
1
  {%- block imports_styles %}
2
+ @layer __reflex_base;
2
3
  {% for sheet_name in stylesheets %}
3
4
  {{- "@import url('" + sheet_name + "'); " }}
4
5
  {% endfor %}
@@ -0,0 +1,10 @@
1
+ import { route } from "@react-router/dev/routes";
2
+ import { flatRoutes } from "@react-router/fs-routes";
3
+
4
+ export default [
5
+ route("404", "routes/[404]._index.jsx", { id: "404" }),
6
+ ...(await flatRoutes({
7
+ ignoredRouteFiles: ["routes/\\[404\\]._index.jsx"],
8
+ })),
9
+ route("*", "routes/[404]._index.jsx"),
10
+ ];
@@ -25,7 +25,7 @@ export const useClientSideRouting = () => {
25
25
  const search = window.location.search;
26
26
 
27
27
  // Use navigate instead of replace
28
- navigate(path + search, { replace: true })
28
+ navigate(path + search, { replace: true, state: { fromNotFound: true } })
29
29
  .then(() => {
30
30
  // Check if we're still on a NotFound route
31
31
  // Note: This depends on how your routes are set up
@@ -5,7 +5,7 @@ import JSON5 from "json5";
5
5
  import env from "$/env.json";
6
6
  import reflexEnvironment from "$/reflex.json";
7
7
  import Cookies from "universal-cookie";
8
- import { useEffect, useRef, useState } from "react";
8
+ import { useCallback, useEffect, useRef, useState } from "react";
9
9
  import {
10
10
  useLocation,
11
11
  useNavigate,
@@ -851,7 +851,7 @@ export const useEventLoop = (
851
851
  }, [paramsR]);
852
852
 
853
853
  // Function to add new events to the event queue.
854
- const addEvents = (events, args, event_actions) => {
854
+ const addEvents = useCallback((events, args, event_actions) => {
855
855
  const _events = events.filter((e) => e !== undefined && e !== null);
856
856
 
857
857
  if (!(args instanceof Array)) {
@@ -894,7 +894,7 @@ export const useEventLoop = (
894
894
  } else {
895
895
  queueEvents(_events, socket, false, navigate, () => params.current);
896
896
  }
897
- };
897
+ }, []);
898
898
 
899
899
  const sentHydrate = useRef(false); // Avoid double-hydrate due to React strict-mode
900
900
  useEffect(() => {
@@ -1020,31 +1020,42 @@ export const useEventLoop = (
1020
1020
  return () => window.removeEventListener("storage", handleStorage);
1021
1021
  });
1022
1022
 
1023
+ const handleNavigationEvents = useRef(false);
1023
1024
  // Route after the initial page hydration
1024
1025
  useEffect(() => {
1026
+ // The first time this effect runs is initial load, so don't handle
1027
+ // any navigation events.
1028
+ if (!handleNavigationEvents.current) {
1029
+ handleNavigationEvents.current = true;
1030
+ return;
1031
+ }
1032
+ if (location.state?.fromNotFound) {
1033
+ // If the redirect is from a 404 page, we skip onLoadInternalEvent,
1034
+ // since it was already run when the 404 page was first rendered.
1035
+ return;
1036
+ }
1025
1037
  // This will run when the location changes
1026
1038
  if (
1027
- location.pathname + location.search + location.hash !==
1028
- prevLocationRef.current.pathname +
1029
- prevLocationRef.current.search +
1030
- prevLocationRef.current.hash
1039
+ location.pathname + location.search ===
1040
+ prevLocationRef.current.pathname + prevLocationRef.current.search
1031
1041
  ) {
1032
- // Equivalent to routeChangeStart - runs when navigation begins
1033
- const change_start = () => {
1034
- const main_state_dispatch = dispatch["reflex___state____state"];
1035
- if (main_state_dispatch !== undefined) {
1036
- main_state_dispatch({ is_hydrated_rx_state_: false });
1037
- }
1038
- };
1039
- change_start();
1040
-
1041
- // Equivalent to routeChangeComplete - runs after navigation completes
1042
- const change_complete = () => addEvents(onLoadInternalEvent());
1043
- change_complete();
1042
+ if (location.hash) {
1043
+ // If the hash is the same, we don't need to do anything.
1044
+ return;
1045
+ }
1046
+ }
1044
1047
 
1045
- // Update the ref
1046
- prevLocationRef.current = location;
1048
+ // Equivalent to routeChangeStart - runs when navigation begins
1049
+ const main_state_dispatch = dispatch["reflex___state____state"];
1050
+ if (main_state_dispatch !== undefined) {
1051
+ main_state_dispatch({ is_hydrated_rx_state_: false });
1047
1052
  }
1053
+
1054
+ // Equivalent to routeChangeComplete - runs after navigation completes
1055
+ addEvents(onLoadInternalEvent());
1056
+
1057
+ // Update the ref
1058
+ prevLocationRef.current = location;
1048
1059
  }, [location, dispatch, onLoadInternalEvent, addEvents]);
1049
1060
 
1050
1061
  return [addEvents, connectErrors];
@@ -765,9 +765,9 @@ class App(MiddlewareMixin, LifespanMixin):
765
765
  msg = "Route must be set if component is not a callable."
766
766
  raise exceptions.RouteValueError(msg)
767
767
  # Format the route.
768
- route = format.format_route(component.__name__)
768
+ route = format.format_route(format.to_kebab_case(component.__name__))
769
769
  else:
770
- route = format.format_route(route, format_case=False)
770
+ route = format.format_route(route)
771
771
 
772
772
  if route == constants.Page404.SLUG:
773
773
  if component is None:
@@ -822,10 +822,11 @@ class App(MiddlewareMixin, LifespanMixin):
822
822
  state = self._state if self._state else State
823
823
  state.setup_dynamic_args(get_route_args(route))
824
824
 
825
- if on_load:
826
- self._load_events[route] = (
827
- on_load if isinstance(on_load, list) else [on_load]
828
- )
825
+ self._load_events[route] = (
826
+ (on_load if isinstance(on_load, list) else [on_load])
827
+ if on_load is not None
828
+ else []
829
+ )
829
830
 
830
831
  self._unevaluated_pages[route] = unevaluated_page
831
832
 
@@ -854,48 +855,35 @@ class App(MiddlewareMixin, LifespanMixin):
854
855
  if save_page:
855
856
  self._pages[route] = component
856
857
 
857
- def get_load_events(self, route: str) -> list[IndividualEventType[()]]:
858
+ @functools.cached_property
859
+ def router(self) -> Callable[[str], str | None]:
860
+ """Get the route computer function.
861
+
862
+ Returns:
863
+ The route computer function.
864
+ """
865
+ from reflex.route import get_router
866
+
867
+ return get_router(list(self._pages))
868
+
869
+ def get_load_events(self, path: str) -> list[IndividualEventType[()]]:
858
870
  """Get the load events for a route.
859
871
 
860
872
  Args:
861
- route: The route to get the load events for.
873
+ path: The route to get the load events for.
862
874
 
863
875
  Returns:
864
876
  The load events for the route.
865
877
  """
866
- route = route.lstrip("/").rstrip("/")
867
- if route == "":
868
- return self._load_events.get(constants.PageNames.INDEX_ROUTE, [])
869
-
870
- # Separate the pages by route type.
871
- static_page_paths_to_page_route = {}
872
- dynamic_page_paths_to_page_route = {}
873
- for page_route in list(self._pages) + list(self._unevaluated_pages):
874
- page_path = page_route.lstrip("/").rstrip("/")
875
- if "[" in page_path and "]" in page_path:
876
- dynamic_page_paths_to_page_route[page_path] = page_route
877
- else:
878
- static_page_paths_to_page_route[page_path] = page_route
879
-
880
- # Check for static routes.
881
- if (page_route := static_page_paths_to_page_route.get(route)) is not None:
882
- return self._load_events.get(page_route, [])
883
-
884
- # Check for dynamic routes.
885
- parts = route.split("/")
886
- for page_path, page_route in dynamic_page_paths_to_page_route.items():
887
- page_parts = page_path.split("/")
888
- if len(page_parts) != len(parts):
889
- continue
890
- if all(
891
- part == page_part
892
- or (page_part.startswith("[") and page_part.endswith("]"))
893
- for part, page_part in zip(parts, page_parts, strict=False)
894
- ):
895
- return self._load_events.get(page_route, [])
896
-
897
- # Default to 404 page load events if no match found.
898
- return self._load_events.get("404", [])
878
+ four_oh_four_load_events = self._load_events.get("404", [])
879
+ route = self.router(path)
880
+ if not route:
881
+ # If the path is not a valid route, return the 404 page load events.
882
+ return four_oh_four_load_events
883
+ return self._load_events.get(
884
+ route,
885
+ four_oh_four_load_events,
886
+ )
899
887
 
900
888
  def _check_routes_conflict(self, new_route: str):
901
889
  """Verify if there is any conflict between the new route and any existing route.
@@ -916,7 +904,6 @@ class App(MiddlewareMixin, LifespanMixin):
916
904
  segments = (
917
905
  constants.RouteRegex.SINGLE_SEGMENT,
918
906
  constants.RouteRegex.DOUBLE_SEGMENT,
919
- constants.RouteRegex.SINGLE_CATCHALL_SEGMENT,
920
907
  constants.RouteRegex.DOUBLE_CATCHALL_SEGMENT,
921
908
  )
922
909
  for route in self._pages:
@@ -1742,6 +1729,11 @@ async def process(
1742
1729
  # assignment will recurse into substates and force recalculation of
1743
1730
  # dependent ComputedVar (dynamic route variables)
1744
1731
  state.router_data = router_data
1732
+ router_data[constants.RouteVar.PATH] = "/" + (
1733
+ app.router(path) or "404"
1734
+ if (path := router_data.get(constants.RouteVar.PATH))
1735
+ else "404"
1736
+ ).removeprefix("/")
1745
1737
  state.router = RouterData(router_data)
1746
1738
 
1747
1739
  # Preprocess the event.
@@ -86,6 +86,8 @@ def _compile_app(app_root: Component) -> str:
86
86
  (_normalize_library_name(name), name) for name in bundled_libraries
87
87
  ]
88
88
 
89
+ window_libraries_deduped = list(dict.fromkeys(window_libraries))
90
+
89
91
  app_root_imports = app_root._get_all_imports()
90
92
  _apply_common_imports(app_root_imports)
91
93
 
@@ -93,7 +95,7 @@ def _compile_app(app_root: Component) -> str:
93
95
  imports=utils.compile_imports(app_root_imports),
94
96
  custom_codes=app_root._get_all_custom_code(),
95
97
  hooks=app_root._get_all_hooks(),
96
- window_libraries=window_libraries,
98
+ window_libraries=window_libraries_deduped,
97
99
  render=app_root.render(),
98
100
  dynamic_imports=app_root._get_all_dynamic_imports(),
99
101
  )
@@ -417,9 +417,11 @@ def _format_route_part(part: str) -> str:
417
417
  if part.startswith("[") and part.endswith("]"):
418
418
  if part.startswith(("[...", "[[...")):
419
419
  return "$"
420
+ if part.startswith("[["):
421
+ return "($" + part.removeprefix("[[").removesuffix("]]") + ")"
420
422
  # We don't add [] here since we are reusing them from the input
421
- return "$" + part + "_"
422
- return "[" + part + "]_"
423
+ return "$" + part
424
+ return "[" + part + "]"
423
425
 
424
426
 
425
427
  def _path_to_file_stem(path: str) -> str:
@@ -4,6 +4,7 @@ from __future__ import annotations
4
4
 
5
5
  from reflex.components.base.bare import Bare
6
6
  from reflex.components.el import elements
7
+ from reflex.vars.base import Var
7
8
 
8
9
 
9
10
  class Title(elements.Title):
@@ -28,31 +29,19 @@ class Title(elements.Title):
28
29
  class Meta(elements.Meta):
29
30
  """A component that displays metadata for the current page."""
30
31
 
31
- # The description of character encoding.
32
- char_set: str | None = None
33
-
34
- # The value of meta.
35
- content: str | None = None
36
-
37
- # The name of metadata.
38
- name: str | None = None
39
-
40
- # The type of metadata value.
41
- property: str | None = None
42
-
43
32
  # The type of metadata value.
44
- http_equiv: str | None = None
33
+ property: Var[str]
45
34
 
46
35
 
47
36
  class Description(elements.Meta):
48
37
  """A component that displays the title of the current page."""
49
38
 
50
39
  # The type of the description.
51
- name: str | None = "description"
40
+ name: Var[str] = Var.create("description")
52
41
 
53
42
 
54
43
  class Image(elements.Meta):
55
44
  """A component that displays the title of the current page."""
56
45
 
57
46
  # The type of the image.
58
- property: str | None = "og:image"
47
+ property: Var[str] = Var.create("og:image")
@@ -8,7 +8,7 @@ from collections.abc import Callable, Iterable
8
8
  from typing import Any
9
9
 
10
10
  from reflex.components.base.fragment import Fragment
11
- from reflex.components.component import Component
11
+ from reflex.components.component import Component, field
12
12
  from reflex.components.core.cond import cond
13
13
  from reflex.components.tags import IterTag
14
14
  from reflex.constants import MemoizationMode
@@ -36,7 +36,7 @@ class Foreach(Component):
36
36
  iterable: Var[Iterable]
37
37
 
38
38
  # A function from the render args to the component.
39
- render_fn: Callable = Fragment.create
39
+ render_fn: Callable = field(default=Fragment.create, is_javascript_property=False)
40
40
 
41
41
  @classmethod
42
42
  def create(
@@ -4,7 +4,7 @@ import textwrap
4
4
  from typing import Any
5
5
 
6
6
  from reflex.components.base import Fragment
7
- from reflex.components.component import BaseComponent, Component, MemoizationLeaf
7
+ from reflex.components.component import BaseComponent, Component, MemoizationLeaf, field
8
8
  from reflex.components.tags import MatchTag, Tag
9
9
  from reflex.style import Style
10
10
  from reflex.utils import format
@@ -21,10 +21,10 @@ class Match(MemoizationLeaf):
21
21
  cond: Var[Any]
22
22
 
23
23
  # The list of match cases to be matched.
24
- match_cases: list[Any] = []
24
+ match_cases: list[Any] = field(default_factory=list, is_javascript_property=False)
25
25
 
26
26
  # The catchall case to match.
27
- default: Any
27
+ default: Any = field(default=None, is_javascript_property=False)
28
28
 
29
29
  @classmethod
30
30
  def create(cls, cond: Any, *cases) -> Component | Var:
@@ -12,6 +12,7 @@ from reflex.components.component import (
12
12
  ComponentNamespace,
13
13
  MemoizationLeaf,
14
14
  StatefulComponent,
15
+ field,
15
16
  )
16
17
  from reflex.components.core.cond import cond
17
18
  from reflex.components.el.elements.forms import Input
@@ -234,7 +235,7 @@ class Upload(MemoizationLeaf):
234
235
  on_drop: EventHandler[_on_drop_spec]
235
236
 
236
237
  # Style rules to apply when actively dragging.
237
- drag_active_style: Style | None = None
238
+ drag_active_style: Style | None = field(default=None, is_javascript_property=False)
238
239
 
239
240
  @classmethod
240
241
  def create(cls, *children, **props) -> Component:
@@ -5,7 +5,7 @@ from __future__ import annotations
5
5
  import dataclasses
6
6
  from typing import ClassVar, Literal
7
7
 
8
- from reflex.components.component import Component, ComponentNamespace
8
+ from reflex.components.component import Component, ComponentNamespace, field
9
9
  from reflex.components.core.cond import color_mode_cond
10
10
  from reflex.components.lucide.icon import Icon
11
11
  from reflex.components.markdown.markdown import MarkdownComponentMap
@@ -407,16 +407,24 @@ class CodeBlock(Component, MarkdownComponentMap):
407
407
  wrap_long_lines: Var[bool]
408
408
 
409
409
  # A custom style for the code block.
410
- custom_style: dict[str, str | Var | Color] = {}
410
+ custom_style: dict[str, str | Var | Color] = field(
411
+ default_factory=dict, is_javascript_property=False
412
+ )
411
413
 
412
414
  # Props passed down to the code tag.
413
415
  code_tag_props: Var[dict[str, str]]
414
416
 
415
417
  # Whether a copy button should appear.
416
- can_copy: bool | None = False
418
+ can_copy: bool | None = field(
419
+ default=False,
420
+ is_javascript_property=False,
421
+ )
417
422
 
418
423
  # A custom copy button to override the default one.
419
- copy_button: bool | Component | None = None
424
+ copy_button: bool | Component | None = field(
425
+ default=None,
426
+ is_javascript_property=False,
427
+ )
420
428
 
421
429
  @classmethod
422
430
  def create(
@@ -498,9 +506,6 @@ class CodeBlock(Component, MarkdownComponentMap):
498
506
 
499
507
  return out
500
508
 
501
- def _exclude_props(self) -> list[str]:
502
- return ["can_copy", "copy_button"]
503
-
504
509
 
505
510
  class CodeblockNamespace(ComponentNamespace):
506
511
  """Namespace for the CodeBlock component."""
@@ -8,7 +8,7 @@ from collections import defaultdict
8
8
  from dataclasses import dataclass
9
9
  from typing import Any, Literal
10
10
 
11
- from reflex.components.component import Component, ComponentNamespace
11
+ from reflex.components.component import Component, ComponentNamespace, field
12
12
  from reflex.components.core.colors import color
13
13
  from reflex.components.core.cond import color_mode_cond
14
14
  from reflex.components.el.elements.forms import Button
@@ -721,10 +721,12 @@ class ShikiHighLevelCodeBlock(ShikiCodeBlock):
721
721
  show_line_numbers: Var[bool]
722
722
 
723
723
  # Whether a copy button should appear.
724
- can_copy: bool = False
724
+ can_copy: bool = field(default=False, is_javascript_property=False)
725
725
 
726
726
  # copy_button: A custom copy button to override the default one.
727
- copy_button: Component | bool | None = None
727
+ copy_button: Component | bool | None = field(
728
+ default=None, is_javascript_property=False
729
+ )
728
730
 
729
731
  @classmethod
730
732
  def create(
@@ -9,7 +9,7 @@ from functools import lru_cache
9
9
  from hashlib import md5
10
10
  from typing import Any
11
11
 
12
- from reflex.components.component import BaseComponent, Component, CustomComponent
12
+ from reflex.components.component import BaseComponent, Component, CustomComponent, field
13
13
  from reflex.components.tags.tag import Tag
14
14
  from reflex.utils.imports import ImportDict, ImportVar
15
15
  from reflex.vars.base import LiteralVar, Var, VarData
@@ -150,10 +150,12 @@ class Markdown(Component):
150
150
  is_default = True
151
151
 
152
152
  # The component map from a tag to a lambda that creates a component.
153
- component_map: dict[str, Any] = {}
153
+ component_map: dict[str, Any] = field(
154
+ default_factory=dict, is_javascript_property=False
155
+ )
154
156
 
155
157
  # The hash of the component map, generated at create() time.
156
- component_map_hash: str = ""
158
+ component_map_hash: str = field(default="", is_javascript_property=False)
157
159
 
158
160
  @classmethod
159
161
  def create(cls, *children, **props) -> Component:
@@ -2,7 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- from typing import Any, TypedDict, TypeVar
5
+ from typing import TYPE_CHECKING, Any, TypedDict, TypeVar
6
6
 
7
7
  from reflex.components.component import Component, NoSSRComponent
8
8
  from reflex.components.core.cond import color_mode_cond
@@ -17,8 +17,9 @@ try:
17
17
 
18
18
  except ImportError:
19
19
  console.warn("Plotly is not installed. Please run `pip install plotly`.")
20
- Figure = Any
21
- Template = Any
20
+ if not TYPE_CHECKING:
21
+ Figure = Any
22
+ Template = Any
22
23
 
23
24
 
24
25
  def _event_points_data_signature(e0: Var) -> tuple[Var[list[Point]]]:
@@ -78,13 +79,13 @@ class Plotly(NoSSRComponent):
78
79
  is_default = True
79
80
 
80
81
  # The figure to display. This can be a plotly figure or a plotly data json.
81
- data: Var[Figure] # pyright: ignore [reportInvalidTypeForm]
82
+ data: Var[Figure]
82
83
 
83
84
  # The layout of the graph.
84
85
  layout: Var[dict]
85
86
 
86
87
  # The template for visual appearance of the graph.
87
- template: Var[Template] # pyright: ignore [reportInvalidTypeForm]
88
+ template: Var[Template]
88
89
 
89
90
  # The config of the graph.
90
91
  config: Var[dict]
@@ -213,6 +214,7 @@ const extractPoints = (points) => {
213
214
  Returns:
214
215
  The Plotly component.
215
216
  """
217
+ from plotly.graph_objs.layout import Template
216
218
  from plotly.io import templates
217
219
 
218
220
  responsive_template = color_mode_cond(
@@ -277,8 +279,12 @@ def dynamic_plotly_import(name: str, package: str) -> str:
277
279
  Returns:
278
280
  The dynamic import for the plotly component.
279
281
  """
282
+ library_import = f"import('{package}')"
283
+ mod_import = ".then((mod) => ({ default: createPlotlyComponent(mod) }))"
280
284
  return f"""
281
- const {name} = dynamic(() => import('{package}').then(mod => createPlotlyComponent(mod)), {{ssr: false}})
285
+ const {name} = ClientSide(lazy(() =>
286
+ {library_import}{mod_import}
287
+ ))
282
288
  """
283
289
 
284
290
 
@@ -19,7 +19,7 @@ from __future__ import annotations
19
19
 
20
20
  from typing import Any, Literal, get_args
21
21
 
22
- from reflex.components.component import BaseComponent
22
+ from reflex.components.component import BaseComponent, field
23
23
  from reflex.components.core.cond import Cond, color_mode_cond, cond
24
24
  from reflex.components.lucide.icon import Icon
25
25
  from reflex.components.radix.themes.components.dropdown_menu import dropdown_menu
@@ -99,10 +99,12 @@ class ColorModeIconButton(IconButton):
99
99
  """Icon Button for toggling light / dark mode via toggle_color_mode."""
100
100
 
101
101
  # The position of the icon button. Follow document flow if None.
102
- position: LiteralPosition | Var[LiteralPosition] | None = None
102
+ position: LiteralPosition | Var[LiteralPosition] | None = field(
103
+ default=None, is_javascript_property=False
104
+ )
103
105
 
104
106
  # Allow picking the "system" value for the color mode.
105
- allow_system: bool = False
107
+ allow_system: bool = field(default=False, is_javascript_property=False)
106
108
 
107
109
  @classmethod
108
110
  def create(
@@ -168,9 +170,6 @@ class ColorModeIconButton(IconButton):
168
170
  **props,
169
171
  )
170
172
 
171
- def _exclude_props(self) -> list[str]:
172
- return ["position", "allow_system"]
173
-
174
173
 
175
174
  class ColorModeSwitch(Switch):
176
175
  """Switch for toggling light / dark mode via toggle_color_mode."""
@@ -3,7 +3,7 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  from collections.abc import Sequence
6
- from typing import Any, ClassVar
6
+ from typing import Any, ClassVar, TypedDict
7
7
 
8
8
  from reflex.constants import EventTriggers
9
9
  from reflex.constants.colors import Color
@@ -663,6 +663,13 @@ class Reference(Recharts):
663
663
  is_front: Var[bool]
664
664
 
665
665
 
666
+ class Segment(TypedDict):
667
+ """A segment in a ReferenceLine or ReferenceArea."""
668
+
669
+ x: str | int
670
+ y: str | int
671
+
672
+
666
673
  class ReferenceLine(Reference):
667
674
  """A ReferenceLine component in Recharts."""
668
675
 
@@ -686,7 +693,7 @@ class ReferenceLine(Reference):
686
693
  _valid_children: ClassVar[list[str]] = ["Label"]
687
694
 
688
695
  # Array of endpoints in { x, y } format. These endpoints would be used to draw the ReferenceLine.
689
- segment: Sequence[Any] = []
696
+ segment: Var[Sequence[Segment]]
690
697
 
691
698
 
692
699
  class ReferenceDot(Reference):
@@ -41,23 +41,30 @@ class RouteRegex(SimpleNamespace):
41
41
  _CLOSING_BRACKET = r"\]"
42
42
  _ARG_NAME = r"[a-zA-Z_]\w*"
43
43
 
44
+ # The regex for a valid arg name, e.g. "slug" in "[slug]"
45
+ _ARG_NAME_PATTERN = re.compile(_ARG_NAME)
46
+
47
+ SLUG = re.compile(r"[a-zA-Z0-9_-]+")
44
48
  # match a single arg (i.e. "[slug]"), returns the name of the arg
45
49
  ARG = re.compile(rf"{_OPENING_BRACKET}({_ARG_NAME}){_CLOSING_BRACKET}")
46
- # match a single catch-all arg (i.e. "[...slug]" or "[[...slug]]"), returns the name of the arg
47
- CATCHALL = re.compile(
48
- rf"({_OPENING_BRACKET}?{_OPENING_BRACKET}{_DOT_DOT_DOT}[^[{_CLOSING_BRACKET}]*{_CLOSING_BRACKET}?{_CLOSING_BRACKET})"
50
+ # match a single optional arg (i.e. "[[slug]]"), returns the name of the arg
51
+ OPTIONAL_ARG = re.compile(
52
+ rf"{_OPENING_BRACKET * 2}({_ARG_NAME}){_CLOSING_BRACKET * 2}"
49
53
  )
54
+
50
55
  # match a single non-optional catch-all arg (i.e. "[...slug]"), returns the name of the arg
51
56
  STRICT_CATCHALL = re.compile(
52
57
  rf"{_OPENING_BRACKET}{_DOT_DOT_DOT}({_ARG_NAME}){_CLOSING_BRACKET}"
53
58
  )
54
- # match a snigle optional catch-all arg (i.e. "[[...slug]]"), returns the name of the arg
55
- OPT_CATCHALL = re.compile(
59
+
60
+ # match a single optional catch-all arg (i.e. "[[...slug]]"), returns the name of the arg
61
+ OPTIONAL_CATCHALL = re.compile(
56
62
  rf"{_OPENING_BRACKET * 2}{_DOT_DOT_DOT}({_ARG_NAME}){_CLOSING_BRACKET * 2}"
57
63
  )
64
+
65
+ SPLAT_CATCHALL = "[[...splat]]"
58
66
  SINGLE_SEGMENT = "__SINGLE_SEGMENT__"
59
67
  DOUBLE_SEGMENT = "__DOUBLE_SEGMENT__"
60
- SINGLE_CATCHALL_SEGMENT = "__SINGLE_CATCHALL_SEGMENT__"
61
68
  DOUBLE_CATCHALL_SEGMENT = "__DOUBLE_CATCHALL_SEGMENT__"
62
69
 
63
70