reflex 0.8.9a1__tar.gz → 0.8.10a1__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 (387) hide show
  1. {reflex-0.8.9a1 → reflex-0.8.10a1}/PKG-INFO +4 -3
  2. {reflex-0.8.9a1 → reflex-0.8.10a1}/pyproject.toml +13 -15
  3. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +11 -1
  4. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/.templates/web/utils/state.js +5 -1
  5. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/compiler/compiler.py +3 -5
  6. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/compiler/templates.py +1 -6
  7. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/compiler/utils.py +16 -2
  8. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/base/bare.py +2 -2
  9. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/component.py +33 -74
  10. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/core/debounce.py +1 -1
  11. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/core/foreach.py +7 -19
  12. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/core/sticky.pyi +3 -0
  13. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/core/upload.py +1 -1
  14. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/dynamic.py +1 -3
  15. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/el/elements/forms.py +3 -3
  16. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/el/elements/media.pyi +5869 -5
  17. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/lucide/icon.py +2 -1
  18. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/lucide/icon.pyi +5 -1
  19. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/config.py +33 -6
  20. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/environment.py +12 -0
  21. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/event.py +23 -0
  22. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/model.py +4 -0
  23. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/utils/types.py +4 -0
  24. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/vars/base.py +9 -2
  25. {reflex-0.8.9a1 → reflex-0.8.10a1}/.gitignore +0 -0
  26. {reflex-0.8.9a1 → reflex-0.8.10a1}/LICENSE +0 -0
  27. {reflex-0.8.9a1 → reflex-0.8.10a1}/README.md +0 -0
  28. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/.templates/apps/blank/assets/favicon.ico +0 -0
  29. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/.templates/apps/blank/code/__init__.py +0 -0
  30. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/.templates/apps/blank/code/blank.py +0 -0
  31. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/.templates/web/.gitignore +0 -0
  32. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/.templates/web/app/entry.client.js +0 -0
  33. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/.templates/web/app/routes.js +0 -0
  34. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/.templates/web/components/shiki/code.js +0 -0
  35. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/.templates/web/jsconfig.json +0 -0
  36. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/.templates/web/postcss.config.js +0 -0
  37. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/.templates/web/react-router.config.js +0 -0
  38. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/.templates/web/styles/__reflex_style_reset.css +0 -0
  39. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/.templates/web/utils/helpers/dataeditor.js +0 -0
  40. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/.templates/web/utils/helpers/debounce.js +0 -0
  41. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/.templates/web/utils/helpers/paste.js +0 -0
  42. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/.templates/web/utils/helpers/range.js +0 -0
  43. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/.templates/web/utils/helpers/throttle.js +0 -0
  44. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/.templates/web/utils/react-theme.js +0 -0
  45. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/.templates/web/vite-plugin-safari-cachebust.js +0 -0
  46. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/__init__.py +0 -0
  47. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/__init__.pyi +0 -0
  48. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/__main__.py +0 -0
  49. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/admin.py +0 -0
  50. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/app.py +0 -0
  51. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/app_mixins/__init__.py +0 -0
  52. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/app_mixins/lifespan.py +0 -0
  53. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/app_mixins/middleware.py +0 -0
  54. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/app_mixins/mixin.py +0 -0
  55. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/assets.py +0 -0
  56. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/base.py +0 -0
  57. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/compiler/__init__.py +0 -0
  58. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/__init__.py +0 -0
  59. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/__init__.pyi +0 -0
  60. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/base/__init__.py +0 -0
  61. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/base/__init__.pyi +0 -0
  62. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/base/app_wrap.py +0 -0
  63. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/base/app_wrap.pyi +0 -0
  64. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/base/body.py +0 -0
  65. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/base/body.pyi +0 -0
  66. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/base/document.py +0 -0
  67. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/base/document.pyi +0 -0
  68. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/base/error_boundary.py +0 -0
  69. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/base/error_boundary.pyi +0 -0
  70. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/base/fragment.py +0 -0
  71. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/base/fragment.pyi +0 -0
  72. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/base/link.py +0 -0
  73. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/base/link.pyi +0 -0
  74. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/base/meta.py +0 -0
  75. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/base/meta.pyi +0 -0
  76. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/base/script.py +0 -0
  77. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/base/script.pyi +0 -0
  78. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/base/strict_mode.py +0 -0
  79. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/base/strict_mode.pyi +0 -0
  80. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/core/__init__.py +0 -0
  81. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/core/__init__.pyi +0 -0
  82. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/core/auto_scroll.py +0 -0
  83. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/core/auto_scroll.pyi +0 -0
  84. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/core/banner.py +0 -0
  85. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/core/banner.pyi +0 -0
  86. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/core/breakpoints.py +0 -0
  87. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/core/clipboard.py +0 -0
  88. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/core/clipboard.pyi +0 -0
  89. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/core/colors.py +0 -0
  90. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/core/cond.py +0 -0
  91. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/core/debounce.pyi +0 -0
  92. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/core/helmet.py +0 -0
  93. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/core/helmet.pyi +0 -0
  94. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/core/html.py +0 -0
  95. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/core/html.pyi +0 -0
  96. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/core/layout/__init__.py +0 -0
  97. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/core/match.py +0 -0
  98. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/core/responsive.py +0 -0
  99. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/core/sticky.py +0 -0
  100. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/core/upload.pyi +0 -0
  101. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/core/window_events.py +0 -0
  102. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/core/window_events.pyi +0 -0
  103. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/datadisplay/__init__.py +0 -0
  104. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/datadisplay/__init__.pyi +0 -0
  105. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/datadisplay/code.py +0 -0
  106. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/datadisplay/code.pyi +0 -0
  107. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/datadisplay/dataeditor.py +0 -0
  108. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/datadisplay/dataeditor.pyi +0 -0
  109. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/datadisplay/logo.py +0 -0
  110. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/datadisplay/shiki_code_block.py +0 -0
  111. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/datadisplay/shiki_code_block.pyi +0 -0
  112. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/el/__init__.py +0 -0
  113. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/el/__init__.pyi +0 -0
  114. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/el/element.py +0 -0
  115. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/el/element.pyi +0 -0
  116. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/el/elements/__init__.py +0 -0
  117. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/el/elements/__init__.pyi +0 -0
  118. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/el/elements/base.py +0 -0
  119. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/el/elements/base.pyi +0 -0
  120. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/el/elements/forms.pyi +0 -0
  121. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/el/elements/inline.py +0 -0
  122. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/el/elements/inline.pyi +0 -0
  123. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/el/elements/media.py +0 -0
  124. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/el/elements/metadata.py +0 -0
  125. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/el/elements/metadata.pyi +0 -0
  126. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/el/elements/other.py +0 -0
  127. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/el/elements/other.pyi +0 -0
  128. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/el/elements/scripts.py +0 -0
  129. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/el/elements/scripts.pyi +0 -0
  130. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/el/elements/sectioning.py +0 -0
  131. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/el/elements/sectioning.pyi +0 -0
  132. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/el/elements/tables.py +0 -0
  133. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/el/elements/tables.pyi +0 -0
  134. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/el/elements/typography.py +0 -0
  135. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/el/elements/typography.pyi +0 -0
  136. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/field.py +0 -0
  137. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/gridjs/__init__.py +0 -0
  138. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/gridjs/datatable.py +0 -0
  139. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/gridjs/datatable.pyi +0 -0
  140. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/literals.py +0 -0
  141. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/lucide/__init__.py +0 -0
  142. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/markdown/__init__.py +0 -0
  143. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/markdown/markdown.py +0 -0
  144. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/markdown/markdown.pyi +0 -0
  145. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/moment/__init__.py +0 -0
  146. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/moment/moment.py +0 -0
  147. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/moment/moment.pyi +0 -0
  148. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/plotly/__init__.py +0 -0
  149. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/plotly/plotly.py +0 -0
  150. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/plotly/plotly.pyi +0 -0
  151. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/props.py +0 -0
  152. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/__init__.py +0 -0
  153. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/__init__.pyi +0 -0
  154. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/primitives/__init__.py +0 -0
  155. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/primitives/__init__.pyi +0 -0
  156. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/primitives/accordion.py +0 -0
  157. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/primitives/accordion.pyi +0 -0
  158. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/primitives/base.py +0 -0
  159. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/primitives/base.pyi +0 -0
  160. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/primitives/drawer.py +0 -0
  161. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/primitives/drawer.pyi +0 -0
  162. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/primitives/form.py +0 -0
  163. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/primitives/form.pyi +0 -0
  164. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/primitives/progress.py +0 -0
  165. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/primitives/progress.pyi +0 -0
  166. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/primitives/slider.py +0 -0
  167. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/primitives/slider.pyi +0 -0
  168. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/__init__.py +0 -0
  169. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/__init__.pyi +0 -0
  170. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/base.py +0 -0
  171. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/base.pyi +0 -0
  172. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/color_mode.py +0 -0
  173. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/color_mode.pyi +0 -0
  174. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/__init__.py +0 -0
  175. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/__init__.pyi +0 -0
  176. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/alert_dialog.py +0 -0
  177. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/alert_dialog.pyi +0 -0
  178. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/aspect_ratio.py +0 -0
  179. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/aspect_ratio.pyi +0 -0
  180. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/avatar.py +0 -0
  181. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/avatar.pyi +0 -0
  182. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/badge.py +0 -0
  183. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/badge.pyi +0 -0
  184. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/button.py +0 -0
  185. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/button.pyi +0 -0
  186. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/callout.py +0 -0
  187. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/callout.pyi +0 -0
  188. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/card.py +0 -0
  189. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/card.pyi +0 -0
  190. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/checkbox.py +0 -0
  191. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/checkbox.pyi +0 -0
  192. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/checkbox_cards.py +0 -0
  193. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/checkbox_cards.pyi +0 -0
  194. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/checkbox_group.py +0 -0
  195. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/checkbox_group.pyi +0 -0
  196. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/context_menu.py +0 -0
  197. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/context_menu.pyi +0 -0
  198. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/data_list.py +0 -0
  199. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/data_list.pyi +0 -0
  200. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/dialog.py +0 -0
  201. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/dialog.pyi +0 -0
  202. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/dropdown_menu.py +0 -0
  203. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/dropdown_menu.pyi +0 -0
  204. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/hover_card.py +0 -0
  205. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/hover_card.pyi +0 -0
  206. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/icon_button.py +0 -0
  207. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/icon_button.pyi +0 -0
  208. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/inset.py +0 -0
  209. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/inset.pyi +0 -0
  210. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/popover.py +0 -0
  211. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/popover.pyi +0 -0
  212. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/progress.py +0 -0
  213. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/progress.pyi +0 -0
  214. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/radio.py +0 -0
  215. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/radio.pyi +0 -0
  216. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/radio_cards.py +0 -0
  217. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/radio_cards.pyi +0 -0
  218. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/radio_group.py +0 -0
  219. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/radio_group.pyi +0 -0
  220. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/scroll_area.py +0 -0
  221. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/scroll_area.pyi +0 -0
  222. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/segmented_control.py +0 -0
  223. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/segmented_control.pyi +0 -0
  224. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/select.py +0 -0
  225. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/select.pyi +0 -0
  226. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/separator.py +0 -0
  227. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/separator.pyi +0 -0
  228. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/skeleton.py +0 -0
  229. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/skeleton.pyi +0 -0
  230. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/slider.py +0 -0
  231. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/slider.pyi +0 -0
  232. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/spinner.py +0 -0
  233. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/spinner.pyi +0 -0
  234. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/switch.py +0 -0
  235. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/switch.pyi +0 -0
  236. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/table.py +0 -0
  237. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/table.pyi +0 -0
  238. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/tabs.py +0 -0
  239. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/tabs.pyi +0 -0
  240. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/text_area.py +0 -0
  241. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/text_area.pyi +0 -0
  242. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/text_field.py +0 -0
  243. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/text_field.pyi +0 -0
  244. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/tooltip.py +0 -0
  245. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/components/tooltip.pyi +0 -0
  246. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/layout/__init__.py +0 -0
  247. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/layout/__init__.pyi +0 -0
  248. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/layout/base.py +0 -0
  249. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/layout/base.pyi +0 -0
  250. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/layout/box.py +0 -0
  251. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/layout/box.pyi +0 -0
  252. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/layout/center.py +0 -0
  253. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/layout/center.pyi +0 -0
  254. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/layout/container.py +0 -0
  255. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/layout/container.pyi +0 -0
  256. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/layout/flex.py +0 -0
  257. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/layout/flex.pyi +0 -0
  258. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/layout/grid.py +0 -0
  259. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/layout/grid.pyi +0 -0
  260. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/layout/list.py +0 -0
  261. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/layout/list.pyi +0 -0
  262. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/layout/section.py +0 -0
  263. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/layout/section.pyi +0 -0
  264. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/layout/spacer.py +0 -0
  265. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/layout/spacer.pyi +0 -0
  266. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/layout/stack.py +0 -0
  267. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/layout/stack.pyi +0 -0
  268. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/typography/__init__.py +0 -0
  269. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/typography/__init__.pyi +0 -0
  270. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/typography/base.py +0 -0
  271. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/typography/blockquote.py +0 -0
  272. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/typography/blockquote.pyi +0 -0
  273. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/typography/code.py +0 -0
  274. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/typography/code.pyi +0 -0
  275. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/typography/heading.py +0 -0
  276. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/typography/heading.pyi +0 -0
  277. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/typography/link.py +0 -0
  278. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/typography/link.pyi +0 -0
  279. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/typography/text.py +0 -0
  280. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/radix/themes/typography/text.pyi +0 -0
  281. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/react_player/__init__.py +0 -0
  282. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/react_player/audio.py +0 -0
  283. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/react_player/audio.pyi +0 -0
  284. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/react_player/react_player.py +0 -0
  285. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/react_player/react_player.pyi +0 -0
  286. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/react_player/video.py +0 -0
  287. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/react_player/video.pyi +0 -0
  288. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/react_router/__init__.py +0 -0
  289. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/react_router/dom.py +0 -0
  290. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/react_router/dom.pyi +0 -0
  291. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/recharts/__init__.py +0 -0
  292. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/recharts/__init__.pyi +0 -0
  293. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/recharts/cartesian.py +0 -0
  294. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/recharts/cartesian.pyi +0 -0
  295. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/recharts/charts.py +0 -0
  296. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/recharts/charts.pyi +0 -0
  297. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/recharts/general.py +0 -0
  298. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/recharts/general.pyi +0 -0
  299. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/recharts/polar.py +0 -0
  300. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/recharts/polar.pyi +0 -0
  301. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/recharts/recharts.py +0 -0
  302. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/recharts/recharts.pyi +0 -0
  303. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/sonner/__init__.py +0 -0
  304. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/sonner/toast.py +0 -0
  305. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/sonner/toast.pyi +0 -0
  306. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/tags/__init__.py +0 -0
  307. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/tags/cond_tag.py +0 -0
  308. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/tags/iter_tag.py +0 -0
  309. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/tags/match_tag.py +0 -0
  310. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/tags/tag.py +0 -0
  311. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/components/tags/tagless.py +0 -0
  312. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/constants/__init__.py +0 -0
  313. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/constants/base.py +0 -0
  314. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/constants/colors.py +0 -0
  315. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/constants/compiler.py +0 -0
  316. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/constants/config.py +0 -0
  317. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/constants/custom_components.py +0 -0
  318. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/constants/event.py +0 -0
  319. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/constants/installer.py +0 -0
  320. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/constants/route.py +0 -0
  321. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/constants/state.py +0 -0
  322. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/constants/utils.py +0 -0
  323. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/custom_components/__init__.py +0 -0
  324. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/custom_components/custom_components.py +0 -0
  325. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/experimental/__init__.py +0 -0
  326. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/experimental/client_state.py +0 -0
  327. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/experimental/hooks.py +0 -0
  328. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/istate/__init__.py +0 -0
  329. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/istate/data.py +0 -0
  330. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/istate/dynamic.py +0 -0
  331. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/istate/manager.py +0 -0
  332. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/istate/proxy.py +0 -0
  333. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/istate/storage.py +0 -0
  334. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/istate/wrappers.py +0 -0
  335. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/middleware/__init__.py +0 -0
  336. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/middleware/hydrate_middleware.py +0 -0
  337. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/middleware/middleware.py +0 -0
  338. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/page.py +0 -0
  339. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/plugins/__init__.py +0 -0
  340. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/plugins/_screenshot.py +0 -0
  341. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/plugins/base.py +0 -0
  342. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/plugins/shared_tailwind.py +0 -0
  343. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/plugins/sitemap.py +0 -0
  344. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/plugins/tailwind_v3.py +0 -0
  345. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/plugins/tailwind_v4.py +0 -0
  346. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/py.typed +0 -0
  347. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/reflex.py +0 -0
  348. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/route.py +0 -0
  349. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/state.py +0 -0
  350. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/style.py +0 -0
  351. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/testing.py +0 -0
  352. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/utils/__init__.py +0 -0
  353. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/utils/build.py +0 -0
  354. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/utils/codespaces.py +0 -0
  355. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/utils/compat.py +0 -0
  356. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/utils/console.py +0 -0
  357. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/utils/decorator.py +0 -0
  358. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/utils/exceptions.py +0 -0
  359. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/utils/exec.py +0 -0
  360. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/utils/export.py +0 -0
  361. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/utils/format.py +0 -0
  362. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/utils/frontend_skeleton.py +0 -0
  363. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/utils/imports.py +0 -0
  364. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/utils/js_runtimes.py +0 -0
  365. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/utils/lazy_loader.py +0 -0
  366. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/utils/misc.py +0 -0
  367. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/utils/monitoring.py +0 -0
  368. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/utils/net.py +0 -0
  369. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/utils/path_ops.py +0 -0
  370. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/utils/prerequisites.py +0 -0
  371. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/utils/processes.py +0 -0
  372. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/utils/pyi_generator.py +0 -0
  373. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/utils/redir.py +0 -0
  374. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/utils/registry.py +0 -0
  375. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/utils/rename.py +0 -0
  376. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/utils/serializers.py +0 -0
  377. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/utils/telemetry.py +0 -0
  378. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/utils/templates.py +0 -0
  379. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/utils/token_manager.py +0 -0
  380. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/vars/__init__.py +0 -0
  381. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/vars/datetime.py +0 -0
  382. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/vars/dep_tracking.py +0 -0
  383. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/vars/function.py +0 -0
  384. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/vars/number.py +0 -0
  385. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/vars/object.py +0 -0
  386. {reflex-0.8.9a1 → reflex-0.8.10a1}/reflex/vars/sequence.py +0 -0
  387. {reflex-0.8.9a1 → reflex-0.8.10a1}/scripts/hatch_build.py +0 -0
@@ -1,12 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: reflex
3
- Version: 0.8.9a1
3
+ Version: 0.8.10a1
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
7
7
  Project-URL: documentation, https://reflex.dev/docs/getting-started/introduction
8
- Author-email: Nikhil Rao <nikhil@reflex.dev>, Alek Petuskey <alek@reflex.dev>, Masen Furer <masen@reflex.dev>, Elijah Ahianyo <elijahahianyo@gmail.com>, Thomas Brandeho <thomas@reflex.dev>, Khaleel Al-Adhami <khaleel@reflex.dev>
9
- Maintainer-email: Masen Furer <masen@reflex.dev>, Thomas Brandeho <thomas@reflex.dev>, Khaleel Al-Adhami <khaleel@reflex.dev>
8
+ Author: Nikhil Rao, Alek Petuskey, Masen Furer, Elijah Ahianyo, Thomas Brandeho, Khaleel Al-Adhami
9
+ Maintainer: Masen Furer, Khaleel Al-Adhami
10
+ Maintainer-email: maintainers@reflex.dev
10
11
  License: Apache-2.0
11
12
  License-File: LICENSE
12
13
  Keywords: framework,web
@@ -1,20 +1,20 @@
1
1
  [project]
2
2
  name = "reflex"
3
- version = "0.8.9a1"
3
+ version = "0.8.10a1"
4
4
  description = "Web apps in pure Python."
5
5
  license.text = "Apache-2.0"
6
6
  authors = [
7
- { name = "Nikhil Rao", email = "nikhil@reflex.dev" },
8
- { name = "Alek Petuskey", email = "alek@reflex.dev" },
9
- { name = "Masen Furer", email = "masen@reflex.dev" },
10
- { name = "Elijah Ahianyo", email = "elijahahianyo@gmail.com" },
11
- { name = "Thomas Brandeho", email = "thomas@reflex.dev" },
12
- { name = "Khaleel Al-Adhami", email = "khaleel@reflex.dev" },
7
+ { name = "Nikhil Rao" },
8
+ { name = "Alek Petuskey" },
9
+ { name = "Masen Furer" },
10
+ { name = "Elijah Ahianyo" },
11
+ { name = "Thomas Brandeho" },
12
+ { name = "Khaleel Al-Adhami" },
13
13
  ]
14
14
  maintainers = [
15
- { name = "Masen Furer", email = "masen@reflex.dev" },
16
- { name = "Thomas Brandeho", email = "thomas@reflex.dev" },
17
- { name = "Khaleel Al-Adhami", email = "khaleel@reflex.dev" },
15
+ { name = "Masen Furer" },
16
+ { name = "Khaleel Al-Adhami" },
17
+ { email = "maintainers@reflex.dev" },
18
18
  ]
19
19
  readme = "README.md"
20
20
  keywords = ["web", "framework"]
@@ -50,9 +50,7 @@ classifiers = [
50
50
  ]
51
51
 
52
52
  [project.optional-dependencies]
53
- monitoring = [
54
- "pyleak >=0.1.14,<1.0",
55
- ]
53
+ monitoring = ["pyleak >=0.1.14,<1.0"]
56
54
 
57
55
  [project.urls]
58
56
  homepage = "https://reflex.dev"
@@ -232,7 +230,7 @@ fail_fast = true
232
230
 
233
231
  [[tool.pre-commit.repos]]
234
232
  repo = "https://github.com/astral-sh/ruff-pre-commit"
235
- rev = "v0.12.10"
233
+ rev = "v0.12.11"
236
234
  hooks = [
237
235
  { id = "ruff-format", args = [
238
236
  "reflex",
@@ -264,7 +262,7 @@ hooks = [
264
262
 
265
263
  [[tool.pre-commit.repos]]
266
264
  repo = "https://github.com/RobertCraigie/pyright-python"
267
- rev = "v1.1.403"
265
+ rev = "v1.1.404"
268
266
  hooks = [{ id = "pyright", args = ["reflex", "tests"], language = "system" }]
269
267
 
270
268
  [[tool.pre-commit.repos]]
@@ -1,5 +1,5 @@
1
1
  import { useTheme } from "$/utils/react-theme";
2
- import { createElement } from "react";
2
+ import { createElement, useEffect } from "react";
3
3
  import { ColorModeContext, defaultColorMode } from "$/utils/context";
4
4
 
5
5
  export default function RadixThemesColorModeProvider({ children }) {
@@ -20,6 +20,16 @@ export default function RadixThemesColorModeProvider({ children }) {
20
20
  setTheme(mode);
21
21
  };
22
22
 
23
+ useEffect(() => {
24
+ const radixRoot = document.querySelector(
25
+ '.radix-themes[data-is-root-theme="true"]',
26
+ );
27
+ if (radixRoot) {
28
+ radixRoot.classList.remove("light", "dark");
29
+ radixRoot.classList.add(resolvedTheme);
30
+ }
31
+ }, [resolvedTheme]);
32
+
23
33
  return createElement(
24
34
  ColorModeContext.Provider,
25
35
  {
@@ -210,7 +210,11 @@ export const applyEvent = async (event, socket, navigate, params) => {
210
210
  return false;
211
211
  }
212
212
  if (event.payload.external) {
213
- window.open(event.payload.path, "_blank", "noopener");
213
+ window.open(
214
+ event.payload.path,
215
+ "_blank",
216
+ "noopener" + (event.payload.popup ? ",popup" : ""),
217
+ );
214
218
  return false;
215
219
  }
216
220
  const url = urlFrom(event.payload.path);
@@ -161,7 +161,7 @@ def _compile_page(component: BaseComponent) -> str:
161
161
  # Compile the code to render the component.
162
162
  return templates.page_template(
163
163
  imports=imports,
164
- dynamic_imports=component._get_all_dynamic_imports(),
164
+ dynamic_imports=sorted(component._get_all_dynamic_imports()),
165
165
  custom_codes=component._get_all_custom_code(),
166
166
  hooks=component._get_all_hooks(),
167
167
  render=component.render(),
@@ -379,7 +379,7 @@ def _compile_components(
379
379
  templates.custom_component_template(
380
380
  imports=utils.compile_imports(imports),
381
381
  components=component_renders,
382
- dynamic_imports=dynamic_imports,
382
+ dynamic_imports=sorted(dynamic_imports),
383
383
  custom_codes=custom_codes,
384
384
  ),
385
385
  imports,
@@ -435,9 +435,7 @@ def _compile_stateful_components(
435
435
  rendered_components.update(dict.fromkeys(dynamic_imports))
436
436
 
437
437
  # Include custom code in the shared component.
438
- rendered_components.update(
439
- dict.fromkeys(component._get_all_custom_code(export=True)),
440
- )
438
+ rendered_components.update(component._get_all_custom_code(export=True))
441
439
 
442
440
  # Include all imports in the shared component.
443
441
  all_import_dicts.append(component._get_all_imports())
@@ -164,7 +164,7 @@ export function Layout({{children}}) {{
164
164
  def app_root_template(
165
165
  *,
166
166
  imports: list[_ImportDict],
167
- custom_codes: set[str],
167
+ custom_codes: Iterable[str],
168
168
  hooks: dict[str, VarData | None],
169
169
  window_libraries: list[tuple[str, str]],
170
170
  render: dict[str, Any],
@@ -200,7 +200,6 @@ def app_root_template(
200
200
  )
201
201
 
202
202
  return f"""
203
- import reflexGlobalStyles from '$/styles/__reflex_global_styles.css?url';
204
203
  {imports_str}
205
204
  {dynamic_imports_str}
206
205
  import {{ EventLoopProvider, StateProvider, defaultColorMode }} from "$/utils/context";
@@ -211,10 +210,6 @@ import {{ Outlet }} from 'react-router';
211
210
 
212
211
  {custom_code_str}
213
212
 
214
- export const links = () => [
215
- {{ rel: 'stylesheet', href: reflexGlobalStyles, type: 'text/css' }}
216
- ];
217
-
218
213
  function AppWrap({{children}}) {{
219
214
  {_render_hooks(hooks)}
220
215
  return ({_RenderUtils.render(render)})
@@ -16,7 +16,7 @@ from reflex.components.base import Description, Image, Scripts
16
16
  from reflex.components.base.document import Links, ScrollRestoration
17
17
  from reflex.components.base.document import Meta as ReactMeta
18
18
  from reflex.components.component import Component, ComponentStyle, CustomComponent
19
- from reflex.components.el.elements.metadata import Head, Meta, Title
19
+ from reflex.components.el.elements.metadata import Head, Link, Meta, Title
20
20
  from reflex.components.el.elements.other import Html
21
21
  from reflex.components.el.elements.sectioning import Body
22
22
  from reflex.constants.state import FIELD_MARKER
@@ -26,7 +26,7 @@ from reflex.style import Style
26
26
  from reflex.utils import format, imports, path_ops
27
27
  from reflex.utils.imports import ImportVar, ParsedImportDict
28
28
  from reflex.utils.prerequisites import get_web_dir
29
- from reflex.vars.base import Field, Var
29
+ from reflex.vars.base import Field, Var, VarData
30
30
 
31
31
  # To re-export this function.
32
32
  merge_imports = imports.merge_imports
@@ -382,6 +382,20 @@ def create_document_root(
382
382
  # Always include the framework meta and link tags.
383
383
  always_head_components = [
384
384
  ReactMeta.create(),
385
+ Link.create(
386
+ rel="stylesheet",
387
+ type="text/css",
388
+ href=Var(
389
+ "reflexGlobalStyles",
390
+ _var_data=VarData(
391
+ imports={
392
+ "$/styles/__reflex_global_styles.css?url": [
393
+ ImportVar(tag="reflexGlobalStyles", is_default=True)
394
+ ]
395
+ }
396
+ ),
397
+ ),
398
+ ),
385
399
  Links.create(),
386
400
  ]
387
401
  maybe_head_components = []
@@ -129,7 +129,7 @@ class Bare(Component):
129
129
  dynamic_imports |= component._get_all_dynamic_imports()
130
130
  return dynamic_imports
131
131
 
132
- def _get_all_custom_code(self) -> set[str]:
132
+ def _get_all_custom_code(self) -> dict[str, None]:
133
133
  """Get custom code for the component.
134
134
 
135
135
  Returns:
@@ -166,7 +166,7 @@ class Bare(Component):
166
166
  )
167
167
  return app_wrap_components
168
168
 
169
- def _get_all_refs(self) -> set[str]:
169
+ def _get_all_refs(self) -> dict[str, None]:
170
170
  """Get the refs for the children of the component.
171
171
 
172
172
  Returns:
@@ -10,7 +10,7 @@ import functools
10
10
  import inspect
11
11
  import typing
12
12
  from abc import ABC, ABCMeta, abstractmethod
13
- from collections.abc import Callable, Iterator, Mapping, Sequence
13
+ from collections.abc import Callable, Iterable, Iterator, Mapping, Sequence
14
14
  from dataclasses import _MISSING_TYPE, MISSING
15
15
  from functools import wraps
16
16
  from hashlib import md5
@@ -374,7 +374,7 @@ class BaseComponent(metaclass=BaseComponentMeta):
374
374
  """
375
375
 
376
376
  @abstractmethod
377
- def _get_all_custom_code(self) -> set[str]:
377
+ def _get_all_custom_code(self) -> dict[str, None]:
378
378
  """Get custom code for the component.
379
379
 
380
380
  Returns:
@@ -382,7 +382,7 @@ class BaseComponent(metaclass=BaseComponentMeta):
382
382
  """
383
383
 
384
384
  @abstractmethod
385
- def _get_all_refs(self) -> set[str]:
385
+ def _get_all_refs(self) -> dict[str, None]:
386
386
  """Get the refs for the children of the component.
387
387
 
388
388
  Returns:
@@ -1003,13 +1003,13 @@ class Component(BaseComponent, ABC):
1003
1003
 
1004
1004
  @classmethod
1005
1005
  @functools.cache
1006
- def get_props(cls) -> set[str]:
1006
+ def get_props(cls) -> Iterable[str]:
1007
1007
  """Get the unique fields for the component.
1008
1008
 
1009
1009
  Returns:
1010
1010
  The unique fields.
1011
1011
  """
1012
- return set(cls.get_js_fields())
1012
+ return cls.get_js_fields()
1013
1013
 
1014
1014
  @classmethod
1015
1015
  @functools.cache
@@ -1021,48 +1021,8 @@ class Component(BaseComponent, ABC):
1021
1021
  """
1022
1022
  return set()
1023
1023
 
1024
- @classmethod
1025
- def _are_fields_known(cls) -> bool:
1026
- """Check if all fields are known at compile time. True for most components.
1027
-
1028
- Returns:
1029
- Whether all fields are known at compile time.
1030
- """
1031
- return True
1032
-
1033
- @classmethod
1034
- @functools.cache
1035
- def _get_component_prop_names(cls) -> set[str]:
1036
- """Get the names of the component props. NOTE: This assumes all fields are known.
1037
-
1038
- Returns:
1039
- The names of the component props.
1040
- """
1041
- return {
1042
- name
1043
- for name in cls.get_fields()
1044
- if name in cls.get_props()
1045
- and isinstance(
1046
- field_type := types.value_inside_optional(
1047
- types.get_field_type(cls, name)
1048
- ),
1049
- type,
1050
- )
1051
- and issubclass(field_type, Component)
1052
- }
1053
-
1054
- def _get_components_in_props(self) -> Sequence[BaseComponent]:
1055
- """Get the components in the props.
1056
-
1057
- Returns:
1058
- The components in the props
1059
- """
1060
- if self._are_fields_known():
1061
- return [
1062
- component
1063
- for name in self._get_component_prop_names()
1064
- for component in _components_from(getattr(self, name))
1065
- ]
1024
+ @functools.cached_property
1025
+ def _get_component_prop_property(self) -> Sequence[BaseComponent]:
1066
1026
  return [
1067
1027
  component
1068
1028
  for prop in self.get_props()
@@ -1071,6 +1031,14 @@ class Component(BaseComponent, ABC):
1071
1031
  for component in _components_from(value)
1072
1032
  ]
1073
1033
 
1034
+ def _get_components_in_props(self) -> Sequence[BaseComponent]:
1035
+ """Get the components in the props.
1036
+
1037
+ Returns:
1038
+ The components in the props
1039
+ """
1040
+ return self._get_component_prop_property
1041
+
1074
1042
  @classmethod
1075
1043
  def _validate_children(cls, children: tuple | list):
1076
1044
  from reflex.utils.exceptions import ChildrenTypeError
@@ -1541,19 +1509,19 @@ class Component(BaseComponent, ABC):
1541
1509
  """
1542
1510
  return None
1543
1511
 
1544
- def _get_all_custom_code(self) -> set[str]:
1512
+ def _get_all_custom_code(self) -> dict[str, None]:
1545
1513
  """Get custom code for the component and its children.
1546
1514
 
1547
1515
  Returns:
1548
1516
  The custom code.
1549
1517
  """
1550
1518
  # Store the code in a set to avoid duplicates.
1551
- code = set()
1519
+ code: dict[str, None] = {}
1552
1520
 
1553
1521
  # Add the custom code for this component.
1554
1522
  custom_code = self._get_custom_code()
1555
1523
  if custom_code is not None:
1556
- code.add(custom_code)
1524
+ code[custom_code] = None
1557
1525
 
1558
1526
  for component in self._get_components_in_props():
1559
1527
  code |= component._get_all_custom_code()
@@ -1561,7 +1529,7 @@ class Component(BaseComponent, ABC):
1561
1529
  # Add the custom code from add_custom_code method.
1562
1530
  for clz in self._iter_parent_classes_with_method("add_custom_code"):
1563
1531
  for item in clz.add_custom_code(self):
1564
- code.add(item)
1532
+ code[item] = None
1565
1533
 
1566
1534
  # Add the custom code for the children.
1567
1535
  for child in self.children:
@@ -1846,7 +1814,7 @@ class Component(BaseComponent, ABC):
1846
1814
 
1847
1815
  # Add the hook code for the children.
1848
1816
  for child in self.children:
1849
- code = {**code, **child._get_all_hooks_internal()}
1817
+ code.update(child._get_all_hooks_internal())
1850
1818
 
1851
1819
  return code
1852
1820
 
@@ -1870,7 +1838,7 @@ class Component(BaseComponent, ABC):
1870
1838
 
1871
1839
  # Add the hook code for the children.
1872
1840
  for child in self.children:
1873
- code = {**code, **child._get_all_hooks()}
1841
+ code.update(child._get_all_hooks())
1874
1842
 
1875
1843
  return code
1876
1844
 
@@ -1885,16 +1853,16 @@ class Component(BaseComponent, ABC):
1885
1853
  return None
1886
1854
  return format.format_ref(self.id)
1887
1855
 
1888
- def _get_all_refs(self) -> set[str]:
1856
+ def _get_all_refs(self) -> dict[str, None]:
1889
1857
  """Get the refs for the children of the component.
1890
1858
 
1891
1859
  Returns:
1892
1860
  The refs for the children.
1893
1861
  """
1894
- refs = set()
1862
+ refs = {}
1895
1863
  ref = self.get_ref()
1896
1864
  if ref is not None:
1897
- refs.add(ref)
1865
+ refs[ref] = None
1898
1866
  for child in self.children:
1899
1867
  refs |= child._get_all_refs()
1900
1868
  for component in self._get_components_in_props():
@@ -2026,7 +1994,7 @@ class CustomComponent(Component):
2026
1994
  )
2027
1995
 
2028
1996
  to_camel_cased_props = {
2029
- format.to_camel_case(key + MEMO_MARKER)
1997
+ format.to_camel_case(key + MEMO_MARKER): None
2030
1998
  for key in props
2031
1999
  if key not in event_types
2032
2000
  }
@@ -2060,15 +2028,6 @@ class CustomComponent(Component):
2060
2028
  self.props[camel_cased_key] = value
2061
2029
  setattr(self, camel_cased_key, value)
2062
2030
 
2063
- @classmethod
2064
- def _are_fields_known(cls) -> bool:
2065
- """Check if the fields are known.
2066
-
2067
- Returns:
2068
- Whether the fields are known.
2069
- """
2070
- return False
2071
-
2072
2031
  def __eq__(self, other: Any) -> bool:
2073
2032
  """Check if the component is equal to another.
2074
2033
 
@@ -2089,13 +2048,13 @@ class CustomComponent(Component):
2089
2048
  return hash(self.tag)
2090
2049
 
2091
2050
  @classmethod
2092
- def get_props(cls) -> set[str]:
2051
+ def get_props(cls) -> Iterable[str]:
2093
2052
  """Get the props for the component.
2094
2053
 
2095
2054
  Returns:
2096
2055
  The set of component props.
2097
2056
  """
2098
- return set()
2057
+ return ()
2099
2058
 
2100
2059
  @staticmethod
2101
2060
  def _get_event_spec_from_args_spec(name: str, event: EventChain) -> Callable:
@@ -2697,7 +2656,7 @@ class StatefulComponent(BaseComponent):
2697
2656
  return set()
2698
2657
  return self.component._get_all_dynamic_imports()
2699
2658
 
2700
- def _get_all_custom_code(self, export: bool = False) -> set[str]:
2659
+ def _get_all_custom_code(self, export: bool = False) -> dict[str, None]:
2701
2660
  """Get custom code for the component.
2702
2661
 
2703
2662
  Args:
@@ -2707,19 +2666,19 @@ class StatefulComponent(BaseComponent):
2707
2666
  The custom code.
2708
2667
  """
2709
2668
  if self.rendered_as_shared:
2710
- return set()
2711
- return self.component._get_all_custom_code().union(
2712
- {self._render_stateful_code(export=export)}
2669
+ return {}
2670
+ return self.component._get_all_custom_code() | (
2671
+ {self._render_stateful_code(export=export): None}
2713
2672
  )
2714
2673
 
2715
- def _get_all_refs(self) -> set[str]:
2674
+ def _get_all_refs(self) -> dict[str, None]:
2716
2675
  """Get the refs for the children of the component.
2717
2676
 
2718
2677
  Returns:
2719
2678
  The refs for the children.
2720
2679
  """
2721
2680
  if self.rendered_as_shared:
2722
- return set()
2681
+ return {}
2723
2682
  return self.component._get_all_refs()
2724
2683
 
2725
2684
  def render(self) -> dict:
@@ -132,7 +132,7 @@ class DebounceInput(Component):
132
132
  component.children = child.children
133
133
  component._rename_props = child._rename_props # pyright: ignore[reportAttributeAccessIssue]
134
134
  outer_get_all_custom_code = component._get_all_custom_code
135
- component._get_all_custom_code = lambda: outer_get_all_custom_code().union(
135
+ component._get_all_custom_code = lambda: outer_get_all_custom_code() | (
136
136
  child._get_all_custom_code()
137
137
  )
138
138
  return component
@@ -5,6 +5,7 @@ from __future__ import annotations
5
5
  import functools
6
6
  import inspect
7
7
  from collections.abc import Callable, Iterable
8
+ from hashlib import md5
8
9
  from typing import Any
9
10
 
10
11
  from reflex.components.base.fragment import Fragment
@@ -141,25 +142,12 @@ class Foreach(Component):
141
142
  else:
142
143
  render_fn = self.render_fn
143
144
  # Otherwise, use a deterministic index, based on the render function bytecode.
144
- code_hash = (
145
- hash(
146
- getattr(
147
- render_fn,
148
- "__code__",
149
- (
150
- repr(self.render_fn)
151
- if not isinstance(render_fn, functools.partial)
152
- else render_fn.func.__code__
153
- ),
154
- )
155
- )
156
- .to_bytes(
157
- length=8,
158
- byteorder="big",
159
- signed=True,
160
- )
161
- .hex()
162
- )
145
+ if (render_fn_code := getattr(render_fn, "__code__", None)) is not None:
146
+ code_hash = md5(render_fn_code.co_code).hexdigest()
147
+ elif isinstance(render_fn, functools.partial):
148
+ code_hash = md5(render_fn.func.__code__.co_code).hexdigest()
149
+ else:
150
+ code_hash = md5(repr(render_fn).encode()).hexdigest()
163
151
  props["index_var_name"] = f"index_{code_hash}"
164
152
 
165
153
  return IterTag(
@@ -22,6 +22,9 @@ class StickyLogo(Svg):
22
22
  width: Var[int | str] | int | str | None = None,
23
23
  height: Var[int | str] | int | str | None = None,
24
24
  xmlns: Var[str] | str | None = None,
25
+ view_box: Var[str] | str | None = None,
26
+ preserve_aspect_ratio: Var[str] | str | None = None,
27
+ transform: Var[str] | str | None = None,
25
28
  access_key: Var[str] | str | None = None,
26
29
  auto_capitalize: Literal[
27
30
  "characters", "none", "off", "on", "sentences", "words"
@@ -260,7 +260,7 @@ class Upload(MemoizationLeaf):
260
260
  props["class_name"] = ["rx-Upload", *given_class_name]
261
261
 
262
262
  # get only upload component props
263
- supported_props = cls.get_props().union({"on_drop"})
263
+ supported_props = set(cls.get_props()) | {"on_drop"}
264
264
  upload_props = {
265
265
  key: value for key, value in props.items() if key in supported_props
266
266
  }
@@ -81,9 +81,7 @@ def load_dynamic_serializer():
81
81
  rendered_components.update(dict.fromkeys(dynamic_imports))
82
82
 
83
83
  # Include custom code in the shared component.
84
- rendered_components.update(
85
- dict.fromkeys(component._get_all_custom_code()),
86
- )
84
+ rendered_components.update(component._get_all_custom_code())
87
85
 
88
86
  rendered_components[
89
87
  templates.stateful_component_template(
@@ -770,7 +770,7 @@ class Textarea(BaseHTML):
770
770
  "enter_key_submit",
771
771
  ]
772
772
 
773
- def _get_all_custom_code(self) -> set[str]:
773
+ def _get_all_custom_code(self) -> dict[str, None]:
774
774
  """Include the custom code for auto_height and enter_key_submit functionality.
775
775
 
776
776
  Returns:
@@ -778,9 +778,9 @@ class Textarea(BaseHTML):
778
778
  """
779
779
  custom_code = super()._get_all_custom_code()
780
780
  if self.auto_height is not None:
781
- custom_code.add(AUTO_HEIGHT_JS)
781
+ custom_code[AUTO_HEIGHT_JS] = None
782
782
  if self.enter_key_submit is not None:
783
- custom_code.add(ENTER_KEY_SUBMIT_JS)
783
+ custom_code[ENTER_KEY_SUBMIT_JS] = None
784
784
  return custom_code
785
785
 
786
786