reflex 0.3.5a2__tar.gz → 0.3.5a3__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 (377) hide show
  1. {reflex-0.3.5a2 → reflex-0.3.5a3}/PKG-INFO +1 -1
  2. {reflex-0.3.5a2 → reflex-0.3.5a3}/pyproject.toml +1 -1
  3. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/app.py +6 -5
  4. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/base/head.py +2 -2
  5. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/base/head.pyi +4 -7
  6. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/component.py +52 -10
  7. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/graphing/recharts/charts.pyi +2 -5
  8. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/graphing/recharts/general.py +2 -1
  9. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/graphing/recharts/general.pyi +4 -6
  10. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/graphing/recharts/recharts.py +4 -4
  11. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/graphing/recharts/recharts.pyi +4 -7
  12. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/layout/cond.py +2 -2
  13. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/typography/markdown.py +19 -5
  14. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/typography/markdown.pyi +4 -0
  15. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/constants/compiler.py +2 -1
  16. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/vars.py +23 -0
  17. {reflex-0.3.5a2 → reflex-0.3.5a3}/LICENSE +0 -0
  18. {reflex-0.3.5a2 → reflex-0.3.5a3}/README.md +0 -0
  19. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/blank/assets/favicon.ico +0 -0
  20. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/blank/code/__init__.py +0 -0
  21. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/blank/code/blank.py +0 -0
  22. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/demo/.gitignore +0 -0
  23. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/demo/assets/favicon.ico +0 -0
  24. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/demo/assets/github.svg +0 -0
  25. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/demo/assets/icon.svg +0 -0
  26. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/demo/assets/logo.svg +0 -0
  27. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/demo/assets/paneleft.svg +0 -0
  28. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/demo/code/__init__.py +0 -0
  29. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/demo/code/demo.py +0 -0
  30. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/demo/code/pages/__init__.py +0 -0
  31. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/demo/code/pages/chatapp.py +0 -0
  32. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/demo/code/pages/datatable.py +0 -0
  33. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/demo/code/pages/forms.py +0 -0
  34. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/demo/code/pages/graphing.py +0 -0
  35. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/demo/code/pages/home.py +0 -0
  36. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/demo/code/sidebar.py +0 -0
  37. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/demo/code/state.py +0 -0
  38. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/demo/code/states/form_state.py +0 -0
  39. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/demo/code/states/pie_state.py +0 -0
  40. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/demo/code/styles.py +0 -0
  41. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/demo/code/webui/__init__.py +0 -0
  42. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/demo/code/webui/components/__init__.py +0 -0
  43. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/demo/code/webui/components/chat.py +0 -0
  44. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/demo/code/webui/components/loading_icon.py +0 -0
  45. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/demo/code/webui/components/modal.py +0 -0
  46. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/demo/code/webui/components/navbar.py +0 -0
  47. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/demo/code/webui/components/sidebar.py +0 -0
  48. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/demo/code/webui/state.py +0 -0
  49. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/demo/code/webui/styles.py +0 -0
  50. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/sidebar/README.md +0 -0
  51. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/sidebar/assets/favicon.ico +0 -0
  52. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/sidebar/assets/github.svg +0 -0
  53. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/sidebar/assets/icon.svg +0 -0
  54. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/sidebar/assets/logo.svg +0 -0
  55. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/sidebar/assets/paneleft.svg +0 -0
  56. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/sidebar/code/__init__.py +0 -0
  57. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/sidebar/code/components/__init__.py +0 -0
  58. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/sidebar/code/components/sidebar.py +0 -0
  59. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/sidebar/code/pages/__init__.py +0 -0
  60. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/sidebar/code/pages/dashboard.py +0 -0
  61. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/sidebar/code/pages/index.py +0 -0
  62. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/sidebar/code/pages/settings.py +0 -0
  63. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/sidebar/code/sidebar.py +0 -0
  64. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/sidebar/code/state.py +0 -0
  65. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/sidebar/code/styles.py +0 -0
  66. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/sidebar/code/templates/__init__.py +0 -0
  67. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/apps/sidebar/code/templates/template.py +0 -0
  68. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/jinja/app/rxconfig.py.jinja2 +0 -0
  69. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/jinja/web/package.json.jinja2 +0 -0
  70. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/jinja/web/pages/_app.js.jinja2 +0 -0
  71. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/jinja/web/pages/_document.js.jinja2 +0 -0
  72. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/jinja/web/pages/base_page.js.jinja2 +0 -0
  73. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/jinja/web/pages/component.js.jinja2 +0 -0
  74. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/jinja/web/pages/custom_component.js.jinja2 +0 -0
  75. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/jinja/web/pages/index.js.jinja2 +0 -0
  76. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/jinja/web/pages/stateful_component.js.jinja2 +0 -0
  77. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/jinja/web/pages/stateful_components.js.jinja2 +0 -0
  78. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/jinja/web/pages/utils.js.jinja2 +0 -0
  79. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/jinja/web/styles/styles.css.jinja2 +0 -0
  80. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/jinja/web/tailwind.config.js.jinja2 +0 -0
  81. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/jinja/web/utils/context.js.jinja2 +0 -0
  82. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/jinja/web/utils/theme.js.jinja2 +0 -0
  83. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/web/.gitignore +0 -0
  84. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/web/components/reflex/chakra_color_mode_provider.js +0 -0
  85. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +0 -0
  86. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/web/jsconfig.json +0 -0
  87. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/web/next.config.js +0 -0
  88. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/web/postcss.config.js +0 -0
  89. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/web/styles/tailwind.css +0 -0
  90. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/web/utils/client_side_routing.js +0 -0
  91. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/web/utils/helpers/dataeditor.js +0 -0
  92. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/web/utils/helpers/range.js +0 -0
  93. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/.templates/web/utils/state.js +0 -0
  94. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/__init__.py +0 -0
  95. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/__init__.pyi +0 -0
  96. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/__main__.py +0 -0
  97. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/admin.py +0 -0
  98. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/app.pyi +0 -0
  99. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/base.py +0 -0
  100. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/compiler/__init__.py +0 -0
  101. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/compiler/compiler.py +0 -0
  102. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/compiler/templates.py +0 -0
  103. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/compiler/utils.py +0 -0
  104. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/__init__.py +0 -0
  105. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/base/__init__.py +0 -0
  106. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/base/app_wrap.py +0 -0
  107. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/base/app_wrap.pyi +0 -0
  108. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/base/bare.py +0 -0
  109. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/base/body.py +0 -0
  110. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/base/body.pyi +0 -0
  111. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/base/document.py +0 -0
  112. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/base/document.pyi +0 -0
  113. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/base/link.py +0 -0
  114. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/base/link.pyi +0 -0
  115. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/base/meta.py +0 -0
  116. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/base/meta.pyi +0 -0
  117. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/base/script.py +0 -0
  118. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/base/script.pyi +0 -0
  119. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/datadisplay/__init__.py +0 -0
  120. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/datadisplay/badge.py +0 -0
  121. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/datadisplay/badge.pyi +0 -0
  122. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/datadisplay/code.py +0 -0
  123. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/datadisplay/code.pyi +0 -0
  124. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/datadisplay/dataeditor.py +0 -0
  125. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/datadisplay/dataeditor.pyi +0 -0
  126. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/datadisplay/datatable.py +0 -0
  127. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/datadisplay/datatable.pyi +0 -0
  128. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/datadisplay/divider.py +0 -0
  129. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/datadisplay/divider.pyi +0 -0
  130. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/datadisplay/keyboard_key.py +0 -0
  131. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/datadisplay/keyboard_key.pyi +0 -0
  132. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/datadisplay/list.py +0 -0
  133. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/datadisplay/list.pyi +0 -0
  134. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/datadisplay/moment.py +0 -0
  135. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/datadisplay/moment.pyi +0 -0
  136. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/datadisplay/stat.py +0 -0
  137. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/datadisplay/stat.pyi +0 -0
  138. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/datadisplay/table.py +0 -0
  139. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/datadisplay/table.pyi +0 -0
  140. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/datadisplay/tag.py +0 -0
  141. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/datadisplay/tag.pyi +0 -0
  142. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/disclosure/__init__.py +0 -0
  143. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/disclosure/accordion.py +0 -0
  144. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/disclosure/accordion.pyi +0 -0
  145. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/disclosure/tabs.py +0 -0
  146. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/disclosure/tabs.pyi +0 -0
  147. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/disclosure/transition.py +0 -0
  148. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/disclosure/transition.pyi +0 -0
  149. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/disclosure/visuallyhidden.py +0 -0
  150. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/disclosure/visuallyhidden.pyi +0 -0
  151. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/el/__init__.py +0 -0
  152. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/el/constants/__init__.py +0 -0
  153. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/el/constants/html.py +0 -0
  154. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/el/constants/react.py +0 -0
  155. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/el/constants/reflex.py +0 -0
  156. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/el/element.py +0 -0
  157. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/el/element.pyi +0 -0
  158. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/el/elements/__init__.py +0 -0
  159. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/el/elements/base.py +0 -0
  160. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/el/elements/base.pyi +0 -0
  161. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/el/elements/forms.py +0 -0
  162. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/el/elements/forms.pyi +0 -0
  163. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/el/elements/inline.py +0 -0
  164. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/el/elements/inline.pyi +0 -0
  165. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/el/elements/media.py +0 -0
  166. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/el/elements/media.pyi +0 -0
  167. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/el/elements/metadata.py +0 -0
  168. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/el/elements/metadata.pyi +0 -0
  169. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/el/elements/other.py +0 -0
  170. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/el/elements/other.pyi +0 -0
  171. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/el/elements/scripts.py +0 -0
  172. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/el/elements/scripts.pyi +0 -0
  173. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/el/elements/sectioning.py +0 -0
  174. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/el/elements/sectioning.pyi +0 -0
  175. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/el/elements/tables.py +0 -0
  176. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/el/elements/tables.pyi +0 -0
  177. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/el/elements/typography.py +0 -0
  178. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/el/elements/typography.pyi +0 -0
  179. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/feedback/__init__.py +0 -0
  180. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/feedback/alert.py +0 -0
  181. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/feedback/alert.pyi +0 -0
  182. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/feedback/circularprogress.py +0 -0
  183. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/feedback/circularprogress.pyi +0 -0
  184. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/feedback/progress.py +0 -0
  185. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/feedback/progress.pyi +0 -0
  186. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/feedback/skeleton.py +0 -0
  187. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/feedback/skeleton.pyi +0 -0
  188. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/feedback/spinner.py +0 -0
  189. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/feedback/spinner.pyi +0 -0
  190. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/__init__.py +0 -0
  191. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/button.py +0 -0
  192. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/button.pyi +0 -0
  193. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/checkbox.py +0 -0
  194. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/checkbox.pyi +0 -0
  195. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/colormodeswitch.py +0 -0
  196. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/colormodeswitch.pyi +0 -0
  197. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/date_picker.py +0 -0
  198. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/date_picker.pyi +0 -0
  199. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/date_time_picker.py +0 -0
  200. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/date_time_picker.pyi +0 -0
  201. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/debounce.py +0 -0
  202. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/debounce.pyi +0 -0
  203. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/editable.py +0 -0
  204. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/editable.pyi +0 -0
  205. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/editor.py +0 -0
  206. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/editor.pyi +0 -0
  207. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/email.py +0 -0
  208. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/email.pyi +0 -0
  209. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/form.py +0 -0
  210. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/form.pyi +0 -0
  211. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/iconbutton.py +0 -0
  212. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/iconbutton.pyi +0 -0
  213. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/input.py +0 -0
  214. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/input.pyi +0 -0
  215. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/multiselect.py +0 -0
  216. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/numberinput.py +0 -0
  217. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/numberinput.pyi +0 -0
  218. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/password.py +0 -0
  219. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/password.pyi +0 -0
  220. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/pininput.py +0 -0
  221. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/pininput.pyi +0 -0
  222. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/radio.py +0 -0
  223. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/radio.pyi +0 -0
  224. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/rangeslider.py +0 -0
  225. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/rangeslider.pyi +0 -0
  226. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/select.py +0 -0
  227. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/select.pyi +0 -0
  228. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/slider.py +0 -0
  229. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/slider.pyi +0 -0
  230. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/switch.py +0 -0
  231. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/switch.pyi +0 -0
  232. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/textarea.py +0 -0
  233. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/textarea.pyi +0 -0
  234. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/upload.py +0 -0
  235. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/forms/upload.pyi +0 -0
  236. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/graphing/__init__.py +0 -0
  237. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/graphing/plotly.py +0 -0
  238. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/graphing/plotly.pyi +0 -0
  239. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/graphing/recharts/__init__.py +0 -0
  240. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/graphing/recharts/cartesian.py +0 -0
  241. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/graphing/recharts/cartesian.pyi +0 -0
  242. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/graphing/recharts/charts.py +0 -0
  243. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/graphing/recharts/polar.py +0 -0
  244. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/graphing/recharts/polar.pyi +0 -0
  245. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/layout/__init__.py +0 -0
  246. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/layout/aspect_ratio.py +0 -0
  247. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/layout/aspect_ratio.pyi +0 -0
  248. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/layout/box.py +0 -0
  249. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/layout/box.pyi +0 -0
  250. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/layout/card.py +0 -0
  251. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/layout/card.pyi +0 -0
  252. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/layout/center.py +0 -0
  253. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/layout/center.pyi +0 -0
  254. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/layout/container.py +0 -0
  255. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/layout/container.pyi +0 -0
  256. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/layout/flex.py +0 -0
  257. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/layout/flex.pyi +0 -0
  258. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/layout/foreach.py +0 -0
  259. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/layout/fragment.py +0 -0
  260. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/layout/fragment.pyi +0 -0
  261. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/layout/grid.py +0 -0
  262. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/layout/grid.pyi +0 -0
  263. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/layout/html.py +0 -0
  264. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/layout/html.pyi +0 -0
  265. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/layout/responsive.py +0 -0
  266. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/layout/spacer.py +0 -0
  267. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/layout/spacer.pyi +0 -0
  268. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/layout/stack.py +0 -0
  269. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/layout/stack.pyi +0 -0
  270. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/layout/wrap.py +0 -0
  271. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/layout/wrap.pyi +0 -0
  272. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/libs/__init__.py +0 -0
  273. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/libs/chakra.py +0 -0
  274. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/libs/chakra.pyi +0 -0
  275. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/libs/react_player.py +0 -0
  276. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/libs/react_player.pyi +0 -0
  277. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/literals.py +0 -0
  278. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/media/__init__.py +0 -0
  279. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/media/audio.py +0 -0
  280. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/media/audio.pyi +0 -0
  281. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/media/avatar.py +0 -0
  282. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/media/avatar.pyi +0 -0
  283. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/media/icon.py +0 -0
  284. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/media/icon.pyi +0 -0
  285. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/media/image.py +0 -0
  286. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/media/image.pyi +0 -0
  287. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/media/video.py +0 -0
  288. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/media/video.pyi +0 -0
  289. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/navigation/__init__.py +0 -0
  290. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/navigation/breadcrumb.py +0 -0
  291. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/navigation/breadcrumb.pyi +0 -0
  292. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/navigation/client_side_routing.py +0 -0
  293. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/navigation/client_side_routing.pyi +0 -0
  294. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/navigation/link.py +0 -0
  295. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/navigation/link.pyi +0 -0
  296. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/navigation/linkoverlay.py +0 -0
  297. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/navigation/linkoverlay.pyi +0 -0
  298. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/navigation/nextlink.py +0 -0
  299. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/navigation/nextlink.pyi +0 -0
  300. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/navigation/stepper.py +0 -0
  301. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/navigation/stepper.pyi +0 -0
  302. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/overlay/__init__.py +0 -0
  303. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/overlay/alertdialog.py +0 -0
  304. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/overlay/alertdialog.pyi +0 -0
  305. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/overlay/banner.py +0 -0
  306. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/overlay/banner.pyi +0 -0
  307. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/overlay/drawer.py +0 -0
  308. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/overlay/drawer.pyi +0 -0
  309. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/overlay/menu.py +0 -0
  310. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/overlay/menu.pyi +0 -0
  311. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/overlay/modal.py +0 -0
  312. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/overlay/modal.pyi +0 -0
  313. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/overlay/popover.py +0 -0
  314. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/overlay/popover.pyi +0 -0
  315. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/overlay/tooltip.py +0 -0
  316. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/overlay/tooltip.pyi +0 -0
  317. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/radix/__init__.py +0 -0
  318. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/radix/themes/__init__.py +0 -0
  319. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/radix/themes/base.py +0 -0
  320. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/radix/themes/base.pyi +0 -0
  321. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/radix/themes/components.py +0 -0
  322. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/radix/themes/components.pyi +0 -0
  323. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/radix/themes/layout.py +0 -0
  324. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/radix/themes/layout.pyi +0 -0
  325. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/radix/themes/typography.py +0 -0
  326. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/radix/themes/typography.pyi +0 -0
  327. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/tags/__init__.py +0 -0
  328. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/tags/cond_tag.py +0 -0
  329. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/tags/iter_tag.py +0 -0
  330. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/tags/tag.py +0 -0
  331. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/tags/tagless.py +0 -0
  332. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/typography/__init__.py +0 -0
  333. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/typography/heading.py +0 -0
  334. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/typography/heading.pyi +0 -0
  335. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/typography/highlight.py +0 -0
  336. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/typography/highlight.pyi +0 -0
  337. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/typography/span.py +0 -0
  338. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/typography/span.pyi +0 -0
  339. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/typography/text.py +0 -0
  340. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/components/typography/text.pyi +0 -0
  341. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/config.py +0 -0
  342. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/config.pyi +0 -0
  343. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/constants/__init__.py +0 -0
  344. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/constants/base.py +0 -0
  345. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/constants/config.py +0 -0
  346. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/constants/event.py +0 -0
  347. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/constants/installer.py +0 -0
  348. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/constants/route.py +0 -0
  349. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/constants/style.py +0 -0
  350. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/event.py +0 -0
  351. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/middleware/__init__.py +0 -0
  352. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/middleware/hydrate_middleware.py +0 -0
  353. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/middleware/middleware.py +0 -0
  354. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/model.py +0 -0
  355. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/page.py +0 -0
  356. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/page.pyi +0 -0
  357. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/reflex.py +0 -0
  358. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/route.py +0 -0
  359. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/state.py +0 -0
  360. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/style.py +0 -0
  361. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/testing.py +0 -0
  362. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/utils/__init__.py +0 -0
  363. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/utils/build.py +0 -0
  364. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/utils/console.py +0 -0
  365. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/utils/exceptions.py +0 -0
  366. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/utils/exec.py +0 -0
  367. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/utils/export.py +0 -0
  368. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/utils/format.py +0 -0
  369. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/utils/imports.py +0 -0
  370. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/utils/path_ops.py +0 -0
  371. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/utils/prerequisites.py +0 -0
  372. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/utils/processes.py +0 -0
  373. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/utils/serializers.py +0 -0
  374. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/utils/telemetry.py +0 -0
  375. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/utils/types.py +0 -0
  376. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/utils/watch.py +0 -0
  377. {reflex-0.3.5a2 → reflex-0.3.5a3}/reflex/vars.pyi +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: reflex
3
- Version: 0.3.5a2
3
+ Version: 0.3.5a3
4
4
  Summary: Web apps in pure Python.
5
5
  Home-page: https://reflex.dev
6
6
  License: Apache-2.0
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "reflex"
3
- version = "0.3.5a2"
3
+ version = "0.3.5a3"
4
4
  description = "Web apps in pure Python."
5
5
  license = "Apache-2.0"
6
6
  authors = [
@@ -161,11 +161,12 @@ class App(Base):
161
161
  "rx.BaseState cannot be subclassed multiple times. use rx.State instead"
162
162
  )
163
163
 
164
- # verify that provided state is valid
165
- if self.state and self.state is not State:
166
- console.warn(
167
- f"Using substate ({self.state.__name__}) as root state in `rx.App` is currently not supported."
168
- f" Defaulting to root state: ({State.__name__})"
164
+ if "state" in kwargs:
165
+ console.deprecate(
166
+ feature_name="`state` argument for App()",
167
+ reason="due to all `rx.State` subclasses being inferred.",
168
+ deprecation_version="0.3.5",
169
+ removal_version="0.4.0",
169
170
  )
170
171
  self.state = State
171
172
  # Get the config
@@ -1,6 +1,6 @@
1
1
  """The head component."""
2
2
 
3
- from reflex.components.component import Component
3
+ from reflex.components.component import Component, MemoizationLeaf
4
4
 
5
5
 
6
6
  class NextHeadLib(Component):
@@ -9,7 +9,7 @@ class NextHeadLib(Component):
9
9
  library = "next/head"
10
10
 
11
11
 
12
- class Head(NextHeadLib):
12
+ class Head(NextHeadLib, MemoizationLeaf):
13
13
  """Head Component."""
14
14
 
15
15
  tag = "NextHead"
@@ -7,7 +7,7 @@ from typing import Any, Dict, Literal, Optional, Union, overload
7
7
  from reflex.vars import Var, BaseVar, ComputedVar
8
8
  from reflex.event import EventChain, EventHandler, EventSpec
9
9
  from reflex.style import Style
10
- from reflex.components.component import Component
10
+ from reflex.components.component import Component, MemoizationLeaf
11
11
 
12
12
  class NextHeadLib(Component):
13
13
  @overload
@@ -88,7 +88,7 @@ class NextHeadLib(Component):
88
88
  """
89
89
  ...
90
90
 
91
- class Head(NextHeadLib):
91
+ class Head(NextHeadLib, MemoizationLeaf):
92
92
  @overload
93
93
  @classmethod
94
94
  def create( # type: ignore
@@ -147,7 +147,7 @@ class Head(NextHeadLib):
147
147
  ] = None,
148
148
  **props
149
149
  ) -> "Head":
150
- """Create the component.
150
+ """Create a new memoization leaf component.
151
151
 
152
152
  Args:
153
153
  *children: The children of the component.
@@ -160,9 +160,6 @@ class Head(NextHeadLib):
160
160
  **props: The props of the component.
161
161
 
162
162
  Returns:
163
- The component.
164
-
165
- Raises:
166
- TypeError: If an invalid child is passed.
163
+ The memoization leaf
167
164
  """
168
165
  ...
@@ -28,6 +28,7 @@ from reflex.constants import (
28
28
  EventTriggers,
29
29
  Hooks,
30
30
  Imports,
31
+ MemoizationDisposition,
31
32
  MemoizationMode,
32
33
  PageNames,
33
34
  )
@@ -1363,20 +1364,29 @@ class StatefulComponent(BaseComponent):
1363
1364
  """
1364
1365
  from reflex.components.layout.foreach import Foreach
1365
1366
 
1367
+ if component._memoization_mode.disposition == MemoizationDisposition.NEVER:
1368
+ # Never memoize this component.
1369
+ return None
1370
+
1366
1371
  if component.tag is None:
1367
1372
  # Only memoize components with a tag.
1368
1373
  return None
1369
1374
 
1370
1375
  # If _var_data is found in this component, it is a candidate for auto-memoization.
1371
- has_var_data = False
1376
+ should_memoize = False
1377
+
1378
+ # If the component requests to be memoized, then ignore other checks.
1379
+ if component._memoization_mode.disposition == MemoizationDisposition.ALWAYS:
1380
+ should_memoize = True
1372
1381
 
1373
- # Determine if any Vars have associated data.
1374
- for prop_var in component._get_vars():
1375
- if prop_var._var_data:
1376
- has_var_data = True
1377
- break
1382
+ if not should_memoize:
1383
+ # Determine if any Vars have associated data.
1384
+ for prop_var in component._get_vars():
1385
+ if prop_var._var_data:
1386
+ should_memoize = True
1387
+ break
1378
1388
 
1379
- if not has_var_data:
1389
+ if not should_memoize:
1380
1390
  # Check for special-cases in child components.
1381
1391
  for child in component.children:
1382
1392
  # Skip BaseComponent and StatefulComponent children.
@@ -1384,14 +1394,14 @@ class StatefulComponent(BaseComponent):
1384
1394
  continue
1385
1395
  # Always consider Foreach something that must be memoized by the parent.
1386
1396
  if isinstance(child, Foreach):
1387
- has_var_data = True
1397
+ should_memoize = True
1388
1398
  break
1389
1399
  child = cls._child_var(child)
1390
1400
  if isinstance(child, Var) and child._var_data:
1391
- has_var_data = True
1401
+ should_memoize = True
1392
1402
  break
1393
1403
 
1394
- if has_var_data or component.event_triggers:
1404
+ if should_memoize or component.event_triggers:
1395
1405
  # Render the component to determine tag+hash based on component code.
1396
1406
  tag_name = cls._get_tag_name(component)
1397
1407
  if tag_name is None:
@@ -1664,3 +1674,35 @@ class StatefulComponent(BaseComponent):
1664
1674
  if stateful_component is not None:
1665
1675
  return stateful_component
1666
1676
  return component
1677
+
1678
+
1679
+ class MemoizationLeaf(Component):
1680
+ """A component that does not separately memoize its children.
1681
+
1682
+ Any component which depends on finding the exact names of children
1683
+ components within it, should be a memoization leaf so the compiler
1684
+ does not replace the provided child tags with memoized tags.
1685
+
1686
+ During creation, a memoization leaf will mark itself as wanting to be
1687
+ memoized if any of its children return any hooks.
1688
+ """
1689
+
1690
+ _memoization_mode = MemoizationMode(recursive=False)
1691
+
1692
+ @classmethod
1693
+ def create(cls, *children, **props) -> Component:
1694
+ """Create a new memoization leaf component.
1695
+
1696
+ Args:
1697
+ *children: The children of the component.
1698
+ **props: The props of the component.
1699
+
1700
+ Returns:
1701
+ The memoization leaf
1702
+ """
1703
+ comp = super().create(*children, **props)
1704
+ if comp.get_hooks():
1705
+ comp._memoization_mode = cls._memoization_mode.copy(
1706
+ update={"disposition": MemoizationDisposition.ALWAYS}
1707
+ )
1708
+ return comp
@@ -770,7 +770,7 @@ class FunnelChart(RechartsCharts):
770
770
  ] = None,
771
771
  **props
772
772
  ) -> "FunnelChart":
773
- """Create the component.
773
+ """Create a new memoization leaf component.
774
774
 
775
775
  Args:
776
776
  *children: The children of the component.
@@ -791,10 +791,7 @@ class FunnelChart(RechartsCharts):
791
791
  **props: The props of the component.
792
792
 
793
793
  Returns:
794
- The component.
795
-
796
- Raises:
797
- TypeError: If an invalid child is passed.
794
+ The memoization leaf
798
795
  """
799
796
  ...
800
797
 
@@ -3,6 +3,7 @@ from __future__ import annotations
3
3
 
4
4
  from typing import Any, Dict, List, Union
5
5
 
6
+ from reflex.components.component import MemoizationLeaf
6
7
  from reflex.constants import EventTriggers
7
8
  from reflex.vars import Var
8
9
 
@@ -16,7 +17,7 @@ from .recharts import (
16
17
  )
17
18
 
18
19
 
19
- class ResponsiveContainer(Recharts):
20
+ class ResponsiveContainer(Recharts, MemoizationLeaf):
20
21
  """A base class for responsive containers in Recharts."""
21
22
 
22
23
  tag = "ResponsiveContainer"
@@ -8,6 +8,7 @@ from reflex.vars import Var, BaseVar, ComputedVar
8
8
  from reflex.event import EventChain, EventHandler, EventSpec
9
9
  from reflex.style import Style
10
10
  from typing import Any, Dict, List, Union
11
+ from reflex.components.component import MemoizationLeaf
11
12
  from reflex.constants import EventTriggers
12
13
  from reflex.vars import Var
13
14
  from .recharts import (
@@ -19,7 +20,7 @@ from .recharts import (
19
20
  Recharts,
20
21
  )
21
22
 
22
- class ResponsiveContainer(Recharts):
23
+ class ResponsiveContainer(Recharts, MemoizationLeaf):
23
24
  @overload
24
25
  @classmethod
25
26
  def create( # type: ignore
@@ -84,7 +85,7 @@ class ResponsiveContainer(Recharts):
84
85
  ] = None,
85
86
  **props
86
87
  ) -> "ResponsiveContainer":
87
- """Create the component.
88
+ """Create a new memoization leaf component.
88
89
 
89
90
  Args:
90
91
  *children: The children of the component.
@@ -103,10 +104,7 @@ class ResponsiveContainer(Recharts):
103
104
  **props: The props of the component.
104
105
 
105
106
  Returns:
106
- The component.
107
-
108
- Raises:
109
- TypeError: If an invalid child is passed.
107
+ The memoization leaf
110
108
  """
111
109
  ...
112
110
 
@@ -1,17 +1,17 @@
1
1
  """A component that wraps a recharts lib."""
2
2
  from typing import Literal
3
3
 
4
- from reflex.components.component import Component, NoSSRComponent
4
+ from reflex.components.component import Component, MemoizationLeaf, NoSSRComponent
5
5
 
6
6
 
7
7
  class Recharts(Component):
8
- """A component that wraps a victory lib."""
8
+ """A component that wraps a recharts lib."""
9
9
 
10
10
  library = "recharts@2.8.0"
11
11
 
12
12
 
13
- class RechartsCharts(NoSSRComponent):
14
- """A component that wraps a victory lib."""
13
+ class RechartsCharts(NoSSRComponent, MemoizationLeaf):
14
+ """A component that wraps a recharts lib."""
15
15
 
16
16
  library = "recharts@2.8.0"
17
17
 
@@ -8,7 +8,7 @@ from reflex.vars import Var, BaseVar, ComputedVar
8
8
  from reflex.event import EventChain, EventHandler, EventSpec
9
9
  from reflex.style import Style
10
10
  from typing import Literal
11
- from reflex.components.component import Component, NoSSRComponent
11
+ from reflex.components.component import Component, MemoizationLeaf, NoSSRComponent
12
12
 
13
13
  class Recharts(Component):
14
14
  @overload
@@ -89,7 +89,7 @@ class Recharts(Component):
89
89
  """
90
90
  ...
91
91
 
92
- class RechartsCharts(NoSSRComponent):
92
+ class RechartsCharts(NoSSRComponent, MemoizationLeaf):
93
93
  @overload
94
94
  @classmethod
95
95
  def create( # type: ignore
@@ -148,7 +148,7 @@ class RechartsCharts(NoSSRComponent):
148
148
  ] = None,
149
149
  **props
150
150
  ) -> "RechartsCharts":
151
- """Create the component.
151
+ """Create a new memoization leaf component.
152
152
 
153
153
  Args:
154
154
  *children: The children of the component.
@@ -161,10 +161,7 @@ class RechartsCharts(NoSSRComponent):
161
161
  **props: The props of the component.
162
162
 
163
163
  Returns:
164
- The component.
165
-
166
- Raises:
167
- TypeError: If an invalid child is passed.
164
+ The memoization leaf
168
165
  """
169
166
  ...
170
167
 
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
 
4
4
  from typing import Any, Dict, Optional, overload
5
5
 
6
- from reflex.components.component import BaseComponent, Component
6
+ from reflex.components.component import BaseComponent, Component, MemoizationLeaf
7
7
  from reflex.components.layout.fragment import Fragment
8
8
  from reflex.components.tags import CondTag, Tag
9
9
  from reflex.constants import Dirs
@@ -15,7 +15,7 @@ _IS_TRUE_IMPORT = {
15
15
  }
16
16
 
17
17
 
18
- class Cond(Component):
18
+ class Cond(MemoizationLeaf):
19
19
  """Render one of two components based on a condition."""
20
20
 
21
21
  # The cond to determine which component to render.
@@ -3,6 +3,7 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import textwrap
6
+ from functools import lru_cache
6
7
  from hashlib import md5
7
8
  from typing import Any, Callable, Dict, Union
8
9
 
@@ -35,6 +36,7 @@ _REHYPE_PLUGINS = Var.create_safe([_REHYPE_KATEX, _REHYPE_RAW])
35
36
 
36
37
 
37
38
  # Component Mapping
39
+ @lru_cache
38
40
  def get_base_component_map() -> dict[str, Callable]:
39
41
  """Get the base component map.
40
42
 
@@ -89,6 +91,9 @@ class Markdown(Component):
89
91
  # Custom styles for the markdown (deprecated in v0.2.9).
90
92
  custom_styles: Dict[str, Any] = {}
91
93
 
94
+ # The hash of the component map, generated at create() time.
95
+ component_map_hash: str = ""
96
+
92
97
  @classmethod
93
98
  def create(cls, *children, **props) -> Component:
94
99
  """Create a markdown component.
@@ -124,7 +129,12 @@ class Markdown(Component):
124
129
  src = textwrap.dedent(src)
125
130
 
126
131
  # Create the component.
127
- return super().create(src, component_map=component_map, **props)
132
+ return super().create(
133
+ src,
134
+ component_map=component_map,
135
+ component_map_hash=cls._component_map_hash(component_map),
136
+ **props,
137
+ )
128
138
 
129
139
  def get_custom_components(
130
140
  self, seen: set[str] | None = None
@@ -264,11 +274,15 @@ class Markdown(Component):
264
274
 
265
275
  return components
266
276
 
267
- def _component_map_hash(self) -> str:
268
- return md5(str(self.component_map).encode()).hexdigest()
277
+ @staticmethod
278
+ def _component_map_hash(component_map) -> str:
279
+ inp = str(
280
+ {tag: component(_MOCK_ARG) for tag, component in component_map.items()}
281
+ ).encode()
282
+ return md5(inp).hexdigest()
269
283
 
270
284
  def _get_component_map_name(self) -> str:
271
- return f"ComponentMap_{self._component_map_hash()}"
285
+ return f"ComponentMap_{self.component_map_hash}"
272
286
 
273
287
  def _get_custom_code(self) -> str | None:
274
288
  hooks = set()
@@ -292,7 +306,7 @@ class Markdown(Component):
292
306
  remark_plugins=_REMARK_PLUGINS,
293
307
  rehype_plugins=_REHYPE_PLUGINS,
294
308
  )
295
- .remove_props("componentMap")
309
+ .remove_props("componentMap", "componentMapHash")
296
310
  )
297
311
  tag.special_props.add(
298
312
  Var.create_safe(
@@ -8,6 +8,7 @@ from reflex.vars import Var, BaseVar, ComputedVar
8
8
  from reflex.event import EventChain, EventHandler, EventSpec
9
9
  from reflex.style import Style
10
10
  import textwrap
11
+ from functools import lru_cache
11
12
  from hashlib import md5
12
13
  from typing import Any, Callable, Dict, Union
13
14
  from reflex.compiler import utils
@@ -32,6 +33,7 @@ _REHYPE_KATEX = Var.create_safe("rehypeKatex", _var_is_local=False)
32
33
  _REHYPE_RAW = Var.create_safe("rehypeRaw", _var_is_local=False)
33
34
  _REHYPE_PLUGINS = Var.create_safe([_REHYPE_KATEX, _REHYPE_RAW])
34
35
 
36
+ @lru_cache
35
37
  def get_base_component_map() -> dict[str, Callable]: ...
36
38
 
37
39
  class Markdown(Component):
@@ -42,6 +44,7 @@ class Markdown(Component):
42
44
  *children,
43
45
  component_map: Optional[Dict[str, Any]] = None,
44
46
  custom_styles: Optional[Dict[str, Any]] = None,
47
+ component_map_hash: Optional[str] = None,
45
48
  style: Optional[Style] = None,
46
49
  key: Optional[Any] = None,
47
50
  id: Optional[Any] = None,
@@ -101,6 +104,7 @@ class Markdown(Component):
101
104
  *children: The children of the component.
102
105
  component_map: The component map from a tag to a lambda that creates a component.
103
106
  custom_styles: Custom styles for the markdown (deprecated in v0.2.9).
107
+ component_map_hash: The hash of the component map, generated at create() time.
104
108
  style: The style of the component.
105
109
  key: A unique key for the component.
106
110
  id: The id for the component.
@@ -115,7 +115,8 @@ class MemoizationDisposition(enum.Enum):
115
115
 
116
116
  # If the component uses state or events, it should be memoized.
117
117
  STATEFUL = "stateful"
118
- # TODO: add more modes, like always and never
118
+ ALWAYS = "always"
119
+ NEVER = "never"
119
120
 
120
121
 
121
122
  class MemoizationMode(Base):
@@ -1284,6 +1284,29 @@ class Var:
1284
1284
  _var_type=str,
1285
1285
  )
1286
1286
 
1287
+ def strip(self, other: str | Var[str] = " ") -> Var:
1288
+ """Strip a string var.
1289
+
1290
+ Args:
1291
+ other: The string to strip the var with.
1292
+
1293
+ Returns:
1294
+ A var with the stripped string.
1295
+
1296
+ Raises:
1297
+ TypeError: If the var is not a string.
1298
+ """
1299
+ if not types._issubclass(self._var_type, str):
1300
+ raise TypeError(f"Cannot strip non-string var {self._var_full_name}.")
1301
+
1302
+ other = Var.create_safe(json.dumps(other)) if isinstance(other, str) else other
1303
+
1304
+ return self._replace(
1305
+ _var_name=f"{self._var_name}.replace(/^${other._var_full_name}|${other._var_full_name}$/g, '')",
1306
+ _var_is_string=False,
1307
+ merge_var_data=other._var_data,
1308
+ )
1309
+
1287
1310
  def split(self, other: str | Var[str] = " ") -> Var:
1288
1311
  """Split a string var into a list.
1289
1312
 
File without changes
File without changes