reflex 0.6.0a2__tar.gz → 0.6.0a4__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 (381) hide show
  1. {reflex-0.6.0a2 → reflex-0.6.0a4}/PKG-INFO +3 -4
  2. {reflex-0.6.0a2 → reflex-0.6.0a4}/README.md +1 -1
  3. {reflex-0.6.0a2 → reflex-0.6.0a4}/pyproject.toml +6 -11
  4. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/.templates/jinja/custom_components/pyproject.toml.jinja2 +2 -2
  5. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/.templates/web/utils/state.js +3 -1
  6. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/app_module_for_backend.py +1 -1
  7. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/component.py +9 -4
  8. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/custom_components/custom_components.py +3 -1
  9. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/experimental/client_state.py +7 -6
  10. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/utils/exceptions.py +4 -0
  11. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/utils/format.py +32 -0
  12. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/utils/prerequisites.py +20 -7
  13. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/utils/telemetry.py +1 -1
  14. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/vars/base.py +41 -19
  15. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/vars/number.py +26 -3
  16. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/vars/sequence.py +0 -8
  17. {reflex-0.6.0a2 → reflex-0.6.0a4}/LICENSE +0 -0
  18. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/.templates/apps/blank/assets/favicon.ico +0 -0
  19. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/.templates/apps/blank/code/__init__.py +0 -0
  20. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/.templates/apps/blank/code/blank.py +0 -0
  21. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/.templates/jinja/app/rxconfig.py.jinja2 +0 -0
  22. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/.templates/jinja/custom_components/README.md.jinja2 +0 -0
  23. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/.templates/jinja/custom_components/__init__.py.jinja2 +0 -0
  24. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/.templates/jinja/custom_components/demo_app.py.jinja2 +0 -0
  25. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/.templates/jinja/custom_components/src.py.jinja2 +0 -0
  26. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/.templates/jinja/web/package.json.jinja2 +0 -0
  27. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/.templates/jinja/web/pages/_app.js.jinja2 +0 -0
  28. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/.templates/jinja/web/pages/_document.js.jinja2 +0 -0
  29. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/.templates/jinja/web/pages/base_page.js.jinja2 +0 -0
  30. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/.templates/jinja/web/pages/component.js.jinja2 +0 -0
  31. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/.templates/jinja/web/pages/custom_component.js.jinja2 +0 -0
  32. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/.templates/jinja/web/pages/index.js.jinja2 +0 -0
  33. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/.templates/jinja/web/pages/stateful_component.js.jinja2 +0 -0
  34. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/.templates/jinja/web/pages/stateful_components.js.jinja2 +0 -0
  35. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/.templates/jinja/web/pages/utils.js.jinja2 +0 -0
  36. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/.templates/jinja/web/styles/styles.css.jinja2 +0 -0
  37. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/.templates/jinja/web/tailwind.config.js.jinja2 +0 -0
  38. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/.templates/jinja/web/utils/context.js.jinja2 +0 -0
  39. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/.templates/jinja/web/utils/theme.js.jinja2 +0 -0
  40. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/.templates/web/.gitignore +0 -0
  41. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +0 -0
  42. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/.templates/web/jsconfig.json +0 -0
  43. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/.templates/web/next.config.js +0 -0
  44. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/.templates/web/postcss.config.js +0 -0
  45. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/.templates/web/styles/tailwind.css +0 -0
  46. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/.templates/web/utils/client_side_routing.js +0 -0
  47. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/.templates/web/utils/helpers/dataeditor.js +0 -0
  48. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/.templates/web/utils/helpers/debounce.js +0 -0
  49. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/.templates/web/utils/helpers/paste.js +0 -0
  50. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/.templates/web/utils/helpers/range.js +0 -0
  51. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/.templates/web/utils/helpers/throttle.js +0 -0
  52. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/__init__.py +0 -0
  53. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/__init__.pyi +0 -0
  54. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/__main__.py +0 -0
  55. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/admin.py +0 -0
  56. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/app.py +0 -0
  57. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/app_mixins/__init__.py +0 -0
  58. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/app_mixins/lifespan.py +0 -0
  59. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/app_mixins/middleware.py +0 -0
  60. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/app_mixins/mixin.py +0 -0
  61. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/base.py +0 -0
  62. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/compiler/__init__.py +0 -0
  63. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/compiler/compiler.py +0 -0
  64. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/compiler/templates.py +0 -0
  65. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/compiler/utils.py +0 -0
  66. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/__init__.py +0 -0
  67. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/__init__.pyi +0 -0
  68. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/base/__init__.py +0 -0
  69. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/base/__init__.pyi +0 -0
  70. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/base/app_wrap.py +0 -0
  71. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/base/app_wrap.pyi +0 -0
  72. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/base/bare.py +0 -0
  73. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/base/body.py +0 -0
  74. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/base/body.pyi +0 -0
  75. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/base/document.py +0 -0
  76. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/base/document.pyi +0 -0
  77. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/base/error_boundary.py +0 -0
  78. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/base/error_boundary.pyi +0 -0
  79. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/base/fragment.py +0 -0
  80. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/base/fragment.pyi +0 -0
  81. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/base/head.py +0 -0
  82. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/base/head.pyi +0 -0
  83. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/base/link.py +0 -0
  84. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/base/link.pyi +0 -0
  85. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/base/meta.py +0 -0
  86. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/base/meta.pyi +0 -0
  87. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/base/script.py +0 -0
  88. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/base/script.pyi +0 -0
  89. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/core/__init__.py +0 -0
  90. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/core/__init__.pyi +0 -0
  91. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/core/banner.py +0 -0
  92. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/core/banner.pyi +0 -0
  93. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/core/breakpoints.py +0 -0
  94. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/core/client_side_routing.py +0 -0
  95. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/core/client_side_routing.pyi +0 -0
  96. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/core/clipboard.py +0 -0
  97. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/core/clipboard.pyi +0 -0
  98. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/core/colors.py +0 -0
  99. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/core/cond.py +0 -0
  100. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/core/debounce.py +0 -0
  101. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/core/debounce.pyi +0 -0
  102. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/core/foreach.py +0 -0
  103. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/core/html.py +0 -0
  104. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/core/html.pyi +0 -0
  105. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/core/layout/__init__.py +0 -0
  106. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/core/match.py +0 -0
  107. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/core/responsive.py +0 -0
  108. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/core/upload.py +0 -0
  109. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/core/upload.pyi +0 -0
  110. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/datadisplay/__init__.py +0 -0
  111. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/datadisplay/__init__.pyi +0 -0
  112. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/datadisplay/code.py +0 -0
  113. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/datadisplay/code.pyi +0 -0
  114. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/datadisplay/dataeditor.py +0 -0
  115. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/datadisplay/dataeditor.pyi +0 -0
  116. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/datadisplay/logo.py +0 -0
  117. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/el/__init__.py +0 -0
  118. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/el/__init__.pyi +0 -0
  119. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/el/constants/__init__.py +0 -0
  120. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/el/constants/html.py +0 -0
  121. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/el/constants/react.py +0 -0
  122. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/el/constants/reflex.py +0 -0
  123. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/el/element.py +0 -0
  124. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/el/element.pyi +0 -0
  125. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/el/elements/__init__.py +0 -0
  126. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/el/elements/__init__.pyi +0 -0
  127. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/el/elements/base.py +0 -0
  128. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/el/elements/base.pyi +0 -0
  129. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/el/elements/forms.py +0 -0
  130. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/el/elements/forms.pyi +0 -0
  131. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/el/elements/inline.py +0 -0
  132. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/el/elements/inline.pyi +0 -0
  133. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/el/elements/media.py +0 -0
  134. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/el/elements/media.pyi +0 -0
  135. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/el/elements/metadata.py +0 -0
  136. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/el/elements/metadata.pyi +0 -0
  137. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/el/elements/other.py +0 -0
  138. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/el/elements/other.pyi +0 -0
  139. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/el/elements/scripts.py +0 -0
  140. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/el/elements/scripts.pyi +0 -0
  141. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/el/elements/sectioning.py +0 -0
  142. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/el/elements/sectioning.pyi +0 -0
  143. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/el/elements/tables.py +0 -0
  144. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/el/elements/tables.pyi +0 -0
  145. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/el/elements/typography.py +0 -0
  146. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/el/elements/typography.pyi +0 -0
  147. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/gridjs/__init__.py +0 -0
  148. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/gridjs/datatable.py +0 -0
  149. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/gridjs/datatable.pyi +0 -0
  150. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/literals.py +0 -0
  151. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/lucide/__init__.py +0 -0
  152. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/lucide/icon.py +0 -0
  153. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/lucide/icon.pyi +0 -0
  154. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/markdown/__init__.py +0 -0
  155. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/markdown/markdown.py +0 -0
  156. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/markdown/markdown.pyi +0 -0
  157. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/moment/__init__.py +0 -0
  158. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/moment/moment.py +0 -0
  159. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/moment/moment.pyi +0 -0
  160. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/next/__init__.py +0 -0
  161. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/next/base.py +0 -0
  162. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/next/base.pyi +0 -0
  163. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/next/image.py +0 -0
  164. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/next/image.pyi +0 -0
  165. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/next/link.py +0 -0
  166. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/next/link.pyi +0 -0
  167. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/next/video.py +0 -0
  168. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/next/video.pyi +0 -0
  169. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/plotly/__init__.py +0 -0
  170. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/plotly/plotly.py +0 -0
  171. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/plotly/plotly.pyi +0 -0
  172. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/props.py +0 -0
  173. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/__init__.py +0 -0
  174. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/__init__.pyi +0 -0
  175. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/primitives/__init__.py +0 -0
  176. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/primitives/__init__.pyi +0 -0
  177. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/primitives/accordion.py +0 -0
  178. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/primitives/accordion.pyi +0 -0
  179. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/primitives/base.py +0 -0
  180. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/primitives/base.pyi +0 -0
  181. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/primitives/drawer.py +0 -0
  182. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/primitives/drawer.pyi +0 -0
  183. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/primitives/form.py +0 -0
  184. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/primitives/form.pyi +0 -0
  185. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/primitives/progress.py +0 -0
  186. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/primitives/progress.pyi +0 -0
  187. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/primitives/slider.py +0 -0
  188. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/primitives/slider.pyi +0 -0
  189. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/__init__.py +0 -0
  190. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/__init__.pyi +0 -0
  191. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/base.py +0 -0
  192. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/base.pyi +0 -0
  193. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/color_mode.py +0 -0
  194. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/color_mode.pyi +0 -0
  195. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/__init__.py +0 -0
  196. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/__init__.pyi +0 -0
  197. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/alert_dialog.py +0 -0
  198. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/alert_dialog.pyi +0 -0
  199. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/aspect_ratio.py +0 -0
  200. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/aspect_ratio.pyi +0 -0
  201. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/avatar.py +0 -0
  202. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/avatar.pyi +0 -0
  203. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/badge.py +0 -0
  204. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/badge.pyi +0 -0
  205. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/button.py +0 -0
  206. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/button.pyi +0 -0
  207. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/callout.py +0 -0
  208. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/callout.pyi +0 -0
  209. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/card.py +0 -0
  210. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/card.pyi +0 -0
  211. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/checkbox.py +0 -0
  212. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/checkbox.pyi +0 -0
  213. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/checkbox_cards.py +0 -0
  214. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/checkbox_cards.pyi +0 -0
  215. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/checkbox_group.py +0 -0
  216. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/checkbox_group.pyi +0 -0
  217. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/context_menu.py +0 -0
  218. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/context_menu.pyi +0 -0
  219. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/data_list.py +0 -0
  220. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/data_list.pyi +0 -0
  221. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/dialog.py +0 -0
  222. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/dialog.pyi +0 -0
  223. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/dropdown_menu.py +0 -0
  224. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/dropdown_menu.pyi +0 -0
  225. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/hover_card.py +0 -0
  226. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/hover_card.pyi +0 -0
  227. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/icon_button.py +0 -0
  228. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/icon_button.pyi +0 -0
  229. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/inset.py +0 -0
  230. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/inset.pyi +0 -0
  231. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/popover.py +0 -0
  232. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/popover.pyi +0 -0
  233. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/progress.py +0 -0
  234. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/progress.pyi +0 -0
  235. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/radio.py +0 -0
  236. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/radio.pyi +0 -0
  237. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/radio_cards.py +0 -0
  238. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/radio_cards.pyi +0 -0
  239. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/radio_group.py +0 -0
  240. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/radio_group.pyi +0 -0
  241. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/scroll_area.py +0 -0
  242. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/scroll_area.pyi +0 -0
  243. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/segmented_control.py +0 -0
  244. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/segmented_control.pyi +0 -0
  245. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/select.py +0 -0
  246. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/select.pyi +0 -0
  247. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/separator.py +0 -0
  248. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/separator.pyi +0 -0
  249. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/skeleton.py +0 -0
  250. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/skeleton.pyi +0 -0
  251. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/slider.py +0 -0
  252. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/slider.pyi +0 -0
  253. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/spinner.py +0 -0
  254. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/spinner.pyi +0 -0
  255. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/switch.py +0 -0
  256. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/switch.pyi +0 -0
  257. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/table.py +0 -0
  258. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/table.pyi +0 -0
  259. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/tabs.py +0 -0
  260. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/tabs.pyi +0 -0
  261. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/text_area.py +0 -0
  262. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/text_area.pyi +0 -0
  263. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/text_field.py +0 -0
  264. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/text_field.pyi +0 -0
  265. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/tooltip.py +0 -0
  266. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/components/tooltip.pyi +0 -0
  267. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/layout/__init__.py +0 -0
  268. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/layout/__init__.pyi +0 -0
  269. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/layout/base.py +0 -0
  270. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/layout/base.pyi +0 -0
  271. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/layout/box.py +0 -0
  272. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/layout/box.pyi +0 -0
  273. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/layout/center.py +0 -0
  274. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/layout/center.pyi +0 -0
  275. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/layout/container.py +0 -0
  276. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/layout/container.pyi +0 -0
  277. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/layout/flex.py +0 -0
  278. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/layout/flex.pyi +0 -0
  279. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/layout/grid.py +0 -0
  280. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/layout/grid.pyi +0 -0
  281. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/layout/list.py +0 -0
  282. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/layout/list.pyi +0 -0
  283. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/layout/section.py +0 -0
  284. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/layout/section.pyi +0 -0
  285. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/layout/spacer.py +0 -0
  286. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/layout/spacer.pyi +0 -0
  287. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/layout/stack.py +0 -0
  288. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/layout/stack.pyi +0 -0
  289. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/typography/__init__.py +0 -0
  290. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/typography/__init__.pyi +0 -0
  291. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/typography/base.py +0 -0
  292. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/typography/blockquote.py +0 -0
  293. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/typography/blockquote.pyi +0 -0
  294. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/typography/code.py +0 -0
  295. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/typography/code.pyi +0 -0
  296. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/typography/heading.py +0 -0
  297. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/typography/heading.pyi +0 -0
  298. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/typography/link.py +0 -0
  299. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/typography/link.pyi +0 -0
  300. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/typography/text.py +0 -0
  301. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/radix/themes/typography/text.pyi +0 -0
  302. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/react_player/__init__.py +0 -0
  303. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/react_player/audio.py +0 -0
  304. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/react_player/audio.pyi +0 -0
  305. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/react_player/react_player.py +0 -0
  306. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/react_player/react_player.pyi +0 -0
  307. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/react_player/video.py +0 -0
  308. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/react_player/video.pyi +0 -0
  309. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/recharts/__init__.py +0 -0
  310. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/recharts/__init__.pyi +0 -0
  311. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/recharts/cartesian.py +0 -0
  312. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/recharts/cartesian.pyi +0 -0
  313. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/recharts/charts.py +0 -0
  314. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/recharts/charts.pyi +0 -0
  315. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/recharts/general.py +0 -0
  316. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/recharts/general.pyi +0 -0
  317. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/recharts/polar.py +0 -0
  318. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/recharts/polar.pyi +0 -0
  319. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/recharts/recharts.py +0 -0
  320. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/recharts/recharts.pyi +0 -0
  321. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/sonner/__init__.py +0 -0
  322. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/sonner/toast.py +0 -0
  323. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/sonner/toast.pyi +0 -0
  324. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/suneditor/__init__.py +0 -0
  325. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/suneditor/editor.py +0 -0
  326. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/suneditor/editor.pyi +0 -0
  327. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/tags/__init__.py +0 -0
  328. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/tags/cond_tag.py +0 -0
  329. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/tags/iter_tag.py +0 -0
  330. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/tags/match_tag.py +0 -0
  331. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/tags/tag.py +0 -0
  332. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/components/tags/tagless.py +0 -0
  333. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/config.py +0 -0
  334. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/constants/__init__.py +0 -0
  335. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/constants/base.py +0 -0
  336. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/constants/colors.py +0 -0
  337. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/constants/compiler.py +0 -0
  338. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/constants/config.py +0 -0
  339. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/constants/custom_components.py +0 -0
  340. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/constants/event.py +0 -0
  341. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/constants/installer.py +0 -0
  342. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/constants/route.py +0 -0
  343. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/constants/style.py +0 -0
  344. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/custom_components/__init__.py +0 -0
  345. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/event.py +0 -0
  346. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/experimental/__init__.py +0 -0
  347. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/experimental/assets.py +0 -0
  348. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/experimental/hooks.py +0 -0
  349. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/experimental/layout.py +0 -0
  350. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/experimental/layout.pyi +0 -0
  351. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/experimental/misc.py +0 -0
  352. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/middleware/__init__.py +0 -0
  353. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/middleware/hydrate_middleware.py +0 -0
  354. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/middleware/middleware.py +0 -0
  355. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/model.py +0 -0
  356. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/page.py +0 -0
  357. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/reflex.py +0 -0
  358. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/route.py +0 -0
  359. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/state.py +0 -0
  360. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/style.py +0 -0
  361. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/testing.py +0 -0
  362. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/utils/__init__.py +0 -0
  363. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/utils/build.py +0 -0
  364. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/utils/codespaces.py +0 -0
  365. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/utils/compat.py +0 -0
  366. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/utils/console.py +0 -0
  367. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/utils/exec.py +0 -0
  368. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/utils/export.py +0 -0
  369. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/utils/imports.py +0 -0
  370. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/utils/lazy_loader.py +0 -0
  371. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/utils/net.py +0 -0
  372. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/utils/path_ops.py +0 -0
  373. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/utils/processes.py +0 -0
  374. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/utils/pyi_generator.py +0 -0
  375. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/utils/redir.py +0 -0
  376. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/utils/registry.py +0 -0
  377. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/utils/serializers.py +0 -0
  378. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/utils/types.py +0 -0
  379. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/vars/__init__.py +0 -0
  380. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/vars/function.py +0 -0
  381. {reflex-0.6.0a2 → reflex-0.6.0a4}/reflex/vars/object.py +0 -0
@@ -1,17 +1,16 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: reflex
3
- Version: 0.6.0a2
3
+ Version: 0.6.0a4
4
4
  Summary: Web apps in pure Python.
5
5
  Home-page: https://reflex.dev
6
6
  License: Apache-2.0
7
7
  Keywords: web,framework
8
8
  Author: Nikhil Rao
9
9
  Author-email: nikhil@reflex.dev
10
- Requires-Python: >=3.8,<4.0
10
+ Requires-Python: >=3.9,<4.0
11
11
  Classifier: Development Status :: 4 - Beta
12
12
  Classifier: License :: OSI Approved :: Apache Software License
13
13
  Classifier: Programming Language :: Python :: 3
14
- Classifier: Programming Language :: Python :: 3.8
15
14
  Classifier: Programming Language :: Python :: 3.9
16
15
  Classifier: Programming Language :: Python :: 3.10
17
16
  Classifier: Programming Language :: Python :: 3.11
@@ -88,7 +87,7 @@ See our [architecture page](https://reflex.dev/blog/2024-03-21-reflex-architectu
88
87
 
89
88
  ## ⚙️ Installation
90
89
 
91
- Open a terminal and run (Requires Python 3.8+):
90
+ Open a terminal and run (Requires Python 3.9+):
92
91
 
93
92
  ```bash
94
93
  pip install reflex
@@ -35,7 +35,7 @@ See our [architecture page](https://reflex.dev/blog/2024-03-21-reflex-architectu
35
35
 
36
36
  ## ⚙️ Installation
37
37
 
38
- Open a terminal and run (Requires Python 3.8+):
38
+ Open a terminal and run (Requires Python 3.9+):
39
39
 
40
40
  ```bash
41
41
  pip install reflex
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "reflex"
3
- version = "0.6.0a2"
3
+ version = "0.6.0a4"
4
4
  description = "Web apps in pure Python."
5
5
  license = "Apache-2.0"
6
6
  authors = [
@@ -26,7 +26,7 @@ packages = [
26
26
  ]
27
27
 
28
28
  [tool.poetry.dependencies]
29
- python = "^3.8"
29
+ python = "^3.9"
30
30
  dill = ">=0.3.8,<0.4"
31
31
  fastapi = ">=0.96.0,!=0.111.0,!=0.111.1"
32
32
  gunicorn = ">=20.1.0,<24.0"
@@ -70,16 +70,11 @@ toml = ">=0.10.2,<1.0"
70
70
  pytest-asyncio = ">=0.20.1,<0.22.0" # https://github.com/pytest-dev/pytest-asyncio/issues/706
71
71
  pytest-cov = ">=4.0.0,<5.0"
72
72
  ruff = "^0.4.9"
73
- pandas = [
74
- {version = ">=2.1.1,<3.0", python = ">=3.9,<3.13"},
75
- {version = ">=1.5.3,<2.0", python = ">=3.8,<3.9"},
76
- ]
77
- pillow = [
78
- {version = ">=10.0.0,<11.0", python = ">=3.8,<4.0"}
79
- ]
73
+ pandas = ">=2.1.1,<3.0"
74
+ pillow = ">=10.0.0,<11.0"
80
75
  plotly = ">=5.13.0,<6.0"
81
76
  asynctest = ">=0.13.0,<1.0"
82
- pre-commit = {version = ">=3.2.1", python = ">=3.8,<4.0"}
77
+ pre-commit = ">=3.2.1"
83
78
  selenium = ">=4.11.0,<5.0"
84
79
  pytest-benchmark = ">=4.0.0,<5.0"
85
80
 
@@ -93,7 +88,7 @@ build-backend = "poetry.core.masonry.api"
93
88
  [tool.pyright]
94
89
 
95
90
  [tool.ruff]
96
- target-version = "py38"
91
+ target-version = "py39"
97
92
  lint.select = ["B", "D", "E", "F", "I", "SIM", "W"]
98
93
  lint.ignore = ["B008", "D203", "D205", "D213", "D401", "D406", "D407", "E501", "F403", "F405", "F541"]
99
94
  lint.pydocstyle.convention = "google"
@@ -8,11 +8,11 @@ version = "0.0.1"
8
8
  description = "Reflex custom component {{ module_name }}"
9
9
  readme = "README.md"
10
10
  license = { text = "Apache-2.0" }
11
- requires-python = ">=3.8"
11
+ requires-python = ">=3.9"
12
12
  authors = [{ name = "", email = "YOUREMAIL@domain.com" }]
13
13
  keywords = ["reflex","reflex-custom-components"]
14
14
 
15
- dependencies = ["reflex>=0.4.2"]
15
+ dependencies = ["reflex>={{ reflex_version }}"]
16
16
 
17
17
  classifiers = ["Development Status :: 4 - Beta"]
18
18
 
@@ -805,7 +805,9 @@ export const useEventLoop = (
805
805
  * @returns True if the value is truthy, false otherwise.
806
806
  */
807
807
  export const isTrue = (val) => {
808
- return Array.isArray(val) ? val.length > 0 : !!val;
808
+ if (Array.isArray(val)) return val.length > 0;
809
+ if (val === Object(val)) return Object.keys(val).length > 0;
810
+ return Boolean(val);
809
811
  };
810
812
 
811
813
  /**
@@ -15,7 +15,7 @@ if constants.CompileVars.APP != "app":
15
15
  telemetry.send("compile")
16
16
  app_module = get_app(reload=False)
17
17
  app = getattr(app_module, constants.CompileVars.APP)
18
- # For py3.8 and py3.9 compatibility when redis is used, we MUST add any decorator pages
18
+ # For py3.9 compatibility when redis is used, we MUST add any decorator pages
19
19
  # before compiling the app in a thread to avoid event loop error (REF-2172).
20
20
  app._apply_decorated_pages()
21
21
  compile_future = ThreadPoolExecutor(max_workers=1).submit(app._compile)
@@ -4,7 +4,6 @@ from __future__ import annotations
4
4
 
5
5
  import copy
6
6
  import typing
7
- import warnings
8
7
  from abc import ABC, abstractmethod
9
8
  from functools import lru_cache, wraps
10
9
  from hashlib import md5
@@ -170,8 +169,6 @@ ComponentStyle = Dict[
170
169
  ]
171
170
  ComponentChild = Union[types.PrimitiveType, Var, BaseComponent]
172
171
 
173
- warnings.filterwarnings("ignore", message="fields may not start with an underscore")
174
-
175
172
 
176
173
  class Component(BaseComponent, ABC):
177
174
  """A component with style, event trigger and other props."""
@@ -451,8 +448,16 @@ class Component(BaseComponent, ABC):
451
448
  and not types._issubclass(passed_type, expected_type, value)
452
449
  ):
453
450
  value_name = value._js_expr if isinstance(value, Var) else value
451
+
452
+ additional_info = (
453
+ " You can call `.bool()` on the value to convert it to a boolean."
454
+ if expected_type is bool and isinstance(value, Var)
455
+ else ""
456
+ )
457
+
454
458
  raise TypeError(
455
- f"Invalid var passed for prop {type(self).__name__}.{key}, expected type {expected_type}, got value {value_name} of type {passed_types or passed_type}."
459
+ f"Invalid var passed for prop {type(self).__name__}.{key}, expected type {expected_type}, got value {value_name} of type {passed_type}."
460
+ + additional_info
456
461
  )
457
462
  # Check if the key is an event trigger.
458
463
  if key in component_specific_triggers:
@@ -65,7 +65,9 @@ def _create_package_config(module_name: str, package_name: str):
65
65
  with open(CustomComponents.PYPROJECT_TOML, "w") as f:
66
66
  f.write(
67
67
  templates.CUSTOM_COMPONENTS_PYPROJECT_TOML.render(
68
- module_name=module_name, package_name=package_name
68
+ module_name=module_name,
69
+ package_name=package_name,
70
+ reflex_version=constants.Reflex.VERSION,
69
71
  )
70
72
  )
71
73
 
@@ -3,6 +3,7 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import dataclasses
6
+ import re
6
7
  import sys
7
8
  from typing import Any, Callable, Union
8
9
 
@@ -174,15 +175,15 @@ class ClientStateVar(Var):
174
175
  else self._setter_name
175
176
  )
176
177
  if value is not NoValue:
177
- import re
178
-
179
178
  # This is a hack to make it work like an EventSpec taking an arg
180
179
  value_str = str(LiteralVar.create(value))
181
180
 
182
- # remove patterns of ["*"] from the value_str using regex
183
- arg = re.sub(r"\[\".*\"\]", "", value_str)
184
-
185
- setter = f"({arg}) => {setter}({str(value)})"
181
+ if value_str.startswith("_"):
182
+ # remove patterns of ["*"] from the value_str using regex
183
+ arg = re.sub(r"\[\".*\"\]", "", value_str)
184
+ setter = f"(({arg}) => {setter}({value_str}))"
185
+ else:
186
+ setter = f"(() => {setter}({value_str}))"
186
187
  return Var(
187
188
  _js_expr=setter,
188
189
  _var_data=VarData(imports=_refs_import if self._global_ref else {}),
@@ -107,3 +107,7 @@ class EventHandlerShadowsBuiltInStateMethod(ReflexError, NameError):
107
107
 
108
108
  class GeneratedCodeHasNoFunctionDefs(ReflexError):
109
109
  """Raised when refactored code generated with flexgen has no functions defined."""
110
+
111
+
112
+ class PrimitiveUnserializableToJSON(ReflexError, ValueError):
113
+ """Raised when a primitive type is unserializable to JSON. Usually with NaN and Infinity."""
@@ -10,6 +10,7 @@ from typing import TYPE_CHECKING, Any, Callable, List, Optional, Union
10
10
 
11
11
  from reflex import constants
12
12
  from reflex.utils import exceptions, types
13
+ from reflex.utils.console import deprecate
13
14
 
14
15
  if TYPE_CHECKING:
15
16
  from reflex.components.component import ComponentStyle
@@ -502,6 +503,37 @@ if TYPE_CHECKING:
502
503
  from reflex.vars import Var
503
504
 
504
505
 
506
+ def format_event_chain(
507
+ event_chain: EventChain | Var[EventChain],
508
+ event_arg: Var | None = None,
509
+ ) -> str:
510
+ """DEPRECATED: format an event chain as a javascript invocation.
511
+
512
+ Use str(rx.Var.create(event_chain)) instead.
513
+
514
+ Args:
515
+ event_chain: The event chain to format.
516
+ event_arg: this argument is ignored.
517
+
518
+ Returns:
519
+ Compiled javascript code to queue the given event chain on the frontend.
520
+ """
521
+ deprecate(
522
+ feature_name="format_event_chain",
523
+ reason="Use str(rx.Var.create(event_chain)) instead",
524
+ deprecation_version="0.6.0",
525
+ removal_version="0.7.0",
526
+ )
527
+
528
+ from reflex.vars import Var
529
+ from reflex.vars.function import ArgsFunctionOperation
530
+
531
+ result = Var.create(event_chain)
532
+ if isinstance(result, ArgsFunctionOperation):
533
+ result = result._return_expr
534
+ return str(result)
535
+
536
+
505
537
  def format_queue_events(
506
538
  events: (
507
539
  EventSpec
@@ -73,6 +73,18 @@ def get_web_dir() -> Path:
73
73
  return workdir
74
74
 
75
75
 
76
+ def _python_version_check():
77
+ """Emit deprecation warning for deprecated python versions."""
78
+ # Check for end-of-life python versions.
79
+ if sys.version_info < (3, 10):
80
+ console.deprecate(
81
+ feature_name="Support for Python 3.9 and older",
82
+ reason="please upgrade to Python 3.10 or newer",
83
+ deprecation_version="0.6.0",
84
+ removal_version="0.7.0",
85
+ )
86
+
87
+
76
88
  def check_latest_package_version(package_name: str):
77
89
  """Check if the latest version of the package is installed.
78
90
 
@@ -85,15 +97,16 @@ def check_latest_package_version(package_name: str):
85
97
  url = f"https://pypi.org/pypi/{package_name}/json"
86
98
  response = net.get(url)
87
99
  latest_version = response.json()["info"]["version"]
88
- if (
89
- version.parse(current_version) < version.parse(latest_version)
90
- and not get_or_set_last_reflex_version_check_datetime()
91
- ):
92
- # only show a warning when the host version is outdated and
93
- # the last_version_check_datetime is not set in reflex.json
100
+ if get_or_set_last_reflex_version_check_datetime():
101
+ # Versions were already checked and saved in reflex.json, no need to warn again
102
+ return
103
+ if version.parse(current_version) < version.parse(latest_version):
104
+ # Show a warning when the host version is older than PyPI version
94
105
  console.warn(
95
106
  f"Your version ({current_version}) of {package_name} is out of date. Upgrade to {latest_version} with 'pip install {package_name} --upgrade'"
96
107
  )
108
+ # Check for depreacted python versions
109
+ _python_version_check()
97
110
  except Exception:
98
111
  pass
99
112
 
@@ -290,7 +303,7 @@ def get_compiled_app(reload: bool = False, export: bool = False) -> ModuleType:
290
303
  """
291
304
  app_module = get_app(reload=reload)
292
305
  app = getattr(app_module, constants.CompileVars.APP)
293
- # For py3.8 and py3.9 compatibility when redis is used, we MUST add any decorator pages
306
+ # For py3.9 compatibility when redis is used, we MUST add any decorator pages
294
307
  # before compiling the app in a thread to avoid event loop error (REF-2172).
295
308
  app._apply_decorated_pages()
296
309
  app._compile(export=export)
@@ -121,7 +121,7 @@ def _prepare_event(event: str, **kwargs) -> dict:
121
121
  return {}
122
122
 
123
123
  if UTC is None:
124
- # for python 3.8, 3.9 & 3.10
124
+ # for python 3.9 & 3.10
125
125
  stamp = datetime.utcnow().isoformat()
126
126
  else:
127
127
  # for python 3.11 & 3.12
@@ -13,6 +13,7 @@ import random
13
13
  import re
14
14
  import string
15
15
  import sys
16
+ import warnings
16
17
  from types import CodeType, FunctionType
17
18
  from typing import (
18
19
  TYPE_CHECKING,
@@ -72,6 +73,8 @@ if TYPE_CHECKING:
72
73
 
73
74
  VAR_TYPE = TypeVar("VAR_TYPE", covariant=True)
74
75
 
76
+ warnings.filterwarnings("ignore", message="fields may not start with an underscore")
77
+
75
78
 
76
79
  @dataclasses.dataclass(
77
80
  eq=False,
@@ -116,6 +119,16 @@ class Var(Generic[VAR_TYPE]):
116
119
  """
117
120
  return self._js_expr
118
121
 
122
+ @property
123
+ @deprecated("Use `_js_expr` instead.")
124
+ def _var_name_unwrapped(self) -> str:
125
+ """The name of the var without extra curly braces.
126
+
127
+ Returns:
128
+ The name of the var.
129
+ """
130
+ return self._js_expr
131
+
119
132
  @property
120
133
  def _var_is_string(self) -> bool:
121
134
  """Whether the var is a string literal.
@@ -1029,6 +1042,20 @@ class LiteralVar(Var):
1029
1042
  if isinstance(value, EventHandler):
1030
1043
  return Var(_js_expr=".".join(filter(None, get_event_handler_parts(value))))
1031
1044
 
1045
+ serialized_value = serializers.serialize(value)
1046
+ if serialized_value is not None:
1047
+ if isinstance(serialized_value, dict):
1048
+ return LiteralObjectVar.create(
1049
+ serialized_value,
1050
+ _var_type=type(value),
1051
+ _var_data=_var_data,
1052
+ )
1053
+ if isinstance(serialized_value, str):
1054
+ return LiteralStringVar.create(
1055
+ serialized_value, _var_type=type(value), _var_data=_var_data
1056
+ )
1057
+ return LiteralVar.create(serialized_value, _var_data=_var_data)
1058
+
1032
1059
  if isinstance(value, Base):
1033
1060
  # get the fields of the pydantic class
1034
1061
  fields = value.__fields__.keys()
@@ -1044,20 +1071,6 @@ class LiteralVar(Var):
1044
1071
  _var_data=_var_data,
1045
1072
  )
1046
1073
 
1047
- serialized_value = serializers.serialize(value)
1048
- if serialized_value is not None:
1049
- if isinstance(serialized_value, dict):
1050
- return LiteralObjectVar.create(
1051
- serialized_value,
1052
- _var_type=type(value),
1053
- _var_data=_var_data,
1054
- )
1055
- if isinstance(serialized_value, str):
1056
- return LiteralStringVar.create(
1057
- serialized_value, _var_type=type(value), _var_data=_var_data
1058
- )
1059
- return LiteralVar.create(serialized_value, _var_data=_var_data)
1060
-
1061
1074
  if dataclasses.is_dataclass(value) and not isinstance(value, type):
1062
1075
  return LiteralObjectVar.create(
1063
1076
  {
@@ -1199,10 +1212,13 @@ def unionize(*args: Type) -> Type:
1199
1212
  """
1200
1213
  if not args:
1201
1214
  return Any
1202
- first, *rest = args
1203
- if not rest:
1204
- return first
1205
- return Union[first, unionize(*rest)]
1215
+ if len(args) == 1:
1216
+ return args[0]
1217
+ # We are bisecting the args list here to avoid hitting the recursion limit
1218
+ # In Python versions >= 3.11, we can simply do `return Union[*args]`
1219
+ midpoint = len(args) // 2
1220
+ first_half, second_half = args[:midpoint], args[midpoint:]
1221
+ return Union[unionize(*first_half), unionize(*second_half)]
1206
1222
 
1207
1223
 
1208
1224
  def figure_out_type(value: Any) -> types.GenericType:
@@ -1983,17 +1999,23 @@ class CustomVarOperationReturn(Var[RETURN]):
1983
1999
  def var_operation_return(
1984
2000
  js_expression: str,
1985
2001
  var_type: Type[RETURN] | None = None,
2002
+ var_data: VarData | None = None,
1986
2003
  ) -> CustomVarOperationReturn[RETURN]:
1987
2004
  """Shortcut for creating a CustomVarOperationReturn.
1988
2005
 
1989
2006
  Args:
1990
2007
  js_expression: The JavaScript expression to evaluate.
1991
2008
  var_type: The type of the var.
2009
+ var_data: Additional hooks and imports associated with the Var.
1992
2010
 
1993
2011
  Returns:
1994
2012
  The CustomVarOperationReturn.
1995
2013
  """
1996
- return CustomVarOperationReturn.create(js_expression, var_type)
2014
+ return CustomVarOperationReturn.create(
2015
+ js_expression,
2016
+ var_type,
2017
+ var_data,
2018
+ )
1997
2019
 
1998
2020
 
1999
2021
  @dataclasses.dataclass(
@@ -4,6 +4,7 @@ from __future__ import annotations
4
4
 
5
5
  import dataclasses
6
6
  import json
7
+ import math
7
8
  import sys
8
9
  from typing import (
9
10
  TYPE_CHECKING,
@@ -17,7 +18,9 @@ from typing import (
17
18
  overload,
18
19
  )
19
20
 
20
- from reflex.utils.exceptions import VarTypeError
21
+ from reflex.constants.base import Dirs
22
+ from reflex.utils.exceptions import PrimitiveUnserializableToJSON, VarTypeError
23
+ from reflex.utils.imports import ImportDict, ImportVar
21
24
 
22
25
  from .base import (
23
26
  CustomVarOperationReturn,
@@ -1038,7 +1041,14 @@ class LiteralNumberVar(LiteralVar, NumberVar):
1038
1041
 
1039
1042
  Returns:
1040
1043
  The JSON representation of the var.
1044
+
1045
+ Raises:
1046
+ PrimitiveUnserializableToJSON: If the var is unserializable to JSON.
1041
1047
  """
1048
+ if math.isinf(self._var_value) or math.isnan(self._var_value):
1049
+ raise PrimitiveUnserializableToJSON(
1050
+ f"No valid JSON representation for {self}"
1051
+ )
1042
1052
  return json.dumps(self._var_value)
1043
1053
 
1044
1054
  def __hash__(self) -> int:
@@ -1060,8 +1070,15 @@ class LiteralNumberVar(LiteralVar, NumberVar):
1060
1070
  Returns:
1061
1071
  The number var.
1062
1072
  """
1073
+ if math.isinf(value):
1074
+ js_expr = "Infinity" if value > 0 else "-Infinity"
1075
+ elif math.isnan(value):
1076
+ js_expr = "NaN"
1077
+ else:
1078
+ js_expr = str(value)
1079
+
1063
1080
  return cls(
1064
- _js_expr=str(value),
1081
+ _js_expr=js_expr,
1065
1082
  _var_type=type(value),
1066
1083
  _var_data=_var_data,
1067
1084
  _var_value=value,
@@ -1098,6 +1115,11 @@ class ToBooleanVarOperation(ToOperation, BooleanVar):
1098
1115
  _default_var_type: ClassVar[Type] = bool
1099
1116
 
1100
1117
 
1118
+ _IS_TRUE_IMPORT: ImportDict = {
1119
+ f"/{Dirs.STATE_PATH}": [ImportVar(tag="isTrue")],
1120
+ }
1121
+
1122
+
1101
1123
  @var_operation
1102
1124
  def boolify(value: Var):
1103
1125
  """Convert the value to a boolean.
@@ -1109,8 +1131,9 @@ def boolify(value: Var):
1109
1131
  The boolean value.
1110
1132
  """
1111
1133
  return var_operation_return(
1112
- js_expression=f"Boolean({value})",
1134
+ js_expression=f"isTrue({value})",
1113
1135
  var_type=bool,
1136
+ var_data=VarData(imports=_IS_TRUE_IMPORT),
1114
1137
  )
1115
1138
 
1116
1139
 
@@ -194,14 +194,6 @@ class StringVar(Var[str]):
194
194
  """
195
195
  return string_strip_operation(self)
196
196
 
197
- def bool(self):
198
- """Boolean conversion.
199
-
200
- Returns:
201
- The boolean value of the string.
202
- """
203
- return self.length() != 0
204
-
205
197
  def reversed(self) -> StringVar:
206
198
  """Reverse the string.
207
199
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes