reflex 0.6.6.post2__tar.gz → 0.6.7__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 (395) hide show
  1. {reflex-0.6.6.post2 → reflex-0.6.7}/PKG-INFO +2 -2
  2. {reflex-0.6.6.post2 → reflex-0.6.7}/pyproject.toml +18 -24
  3. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/.templates/jinja/web/pages/stateful_component.js.jinja2 +5 -1
  4. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/.templates/web/utils/state.js +36 -28
  5. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/__init__.py +1 -1
  6. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/__init__.pyi +1 -0
  7. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/app.py +41 -16
  8. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/assets.py +2 -2
  9. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/base.py +8 -7
  10. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/compiler/templates.py +1 -0
  11. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/compiler/utils.py +2 -3
  12. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/base/bare.py +2 -2
  13. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/component.py +54 -29
  14. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/core/banner.py +2 -2
  15. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/core/banner.pyi +1 -1
  16. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/core/client_side_routing.py +2 -2
  17. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/core/client_side_routing.pyi +1 -1
  18. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/core/clipboard.py +11 -9
  19. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/core/clipboard.pyi +1 -1
  20. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/core/cond.py +3 -3
  21. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/core/foreach.py +1 -1
  22. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/core/html.pyi +1 -1
  23. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/core/upload.py +8 -8
  24. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/datadisplay/code.py +5 -5
  25. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/datadisplay/dataeditor.py +8 -28
  26. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/datadisplay/dataeditor.pyi +1 -1
  27. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/datadisplay/shiki_code_block.py +7 -7
  28. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/dynamic.py +2 -2
  29. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/el/elements/__init__.py +1 -1
  30. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/el/elements/__init__.pyi +1 -1
  31. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/el/elements/base.py +2 -2
  32. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/el/elements/base.pyi +1 -1
  33. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/el/elements/forms.py +40 -10
  34. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/el/elements/forms.pyi +17 -15
  35. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/el/elements/inline.py +1 -1
  36. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/el/elements/inline.pyi +28 -28
  37. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/el/elements/media.py +1 -4
  38. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/el/elements/media.pyi +25 -26
  39. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/el/elements/metadata.py +6 -6
  40. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/el/elements/metadata.pyi +4 -4
  41. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/el/elements/other.py +17 -9
  42. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/el/elements/other.pyi +7 -7
  43. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/el/elements/scripts.py +1 -2
  44. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/el/elements/scripts.pyi +3 -3
  45. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/el/elements/sectioning.py +16 -16
  46. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/el/elements/sectioning.pyi +15 -15
  47. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/el/elements/tables.py +1 -1
  48. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/el/elements/tables.pyi +10 -10
  49. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/el/elements/typography.py +1 -1
  50. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/el/elements/typography.pyi +15 -15
  51. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/markdown/markdown.py +3 -3
  52. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/next/image.py +1 -1
  53. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/next/image.pyi +1 -1
  54. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/plotly/plotly.py +2 -2
  55. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/primitives/accordion.py +2 -1
  56. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/primitives/form.pyi +3 -3
  57. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/primitives/slider.py +1 -1
  58. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/base.py +4 -10
  59. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/color_mode.pyi +2 -2
  60. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/alert_dialog.pyi +1 -1
  61. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/badge.pyi +1 -1
  62. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/button.pyi +1 -1
  63. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/callout.pyi +5 -5
  64. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/card.pyi +1 -1
  65. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/checkbox.pyi +3 -3
  66. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/context_menu.py +11 -0
  67. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/context_menu.pyi +155 -0
  68. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/dialog.pyi +1 -1
  69. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/hover_card.pyi +1 -1
  70. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/icon_button.py +1 -1
  71. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/icon_button.pyi +1 -1
  72. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/inset.pyi +1 -1
  73. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/popover.pyi +1 -1
  74. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/radio_group.py +2 -4
  75. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/radio_group.pyi +1 -1
  76. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/select.pyi +3 -3
  77. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/slider.pyi +1 -1
  78. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/switch.pyi +1 -1
  79. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/table.pyi +7 -7
  80. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/tabs.pyi +2 -2
  81. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/text_area.py +3 -0
  82. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/text_area.pyi +3 -1
  83. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/text_field.py +16 -1
  84. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/text_field.pyi +105 -17
  85. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/layout/box.pyi +1 -1
  86. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/layout/center.pyi +1 -1
  87. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/layout/flex.pyi +1 -1
  88. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/layout/grid.pyi +1 -1
  89. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/layout/list.py +0 -4
  90. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/layout/list.pyi +3 -8
  91. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/layout/section.pyi +1 -1
  92. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/layout/spacer.pyi +1 -1
  93. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/layout/stack.pyi +3 -3
  94. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/typography/blockquote.pyi +1 -1
  95. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/typography/code.pyi +1 -1
  96. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/typography/heading.pyi +1 -1
  97. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/typography/link.py +5 -1
  98. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/typography/link.pyi +1 -1
  99. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/typography/text.pyi +7 -7
  100. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/recharts/cartesian.py +1 -1
  101. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/recharts/charts.py +4 -4
  102. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/recharts/polar.py +1 -1
  103. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/recharts/polar.pyi +1 -1
  104. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/sonner/toast.py +4 -7
  105. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/suneditor/editor.py +6 -6
  106. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/suneditor/editor.pyi +6 -6
  107. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/config.py +25 -10
  108. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/constants/compiler.py +6 -0
  109. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/constants/config.py +2 -0
  110. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/constants/custom_components.py +1 -1
  111. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/constants/route.py +1 -1
  112. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/custom_components/custom_components.py +21 -21
  113. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/event.py +57 -22
  114. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/experimental/client_state.py +2 -1
  115. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/experimental/layout.py +0 -6
  116. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/model.py +125 -9
  117. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/reflex.py +12 -8
  118. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/state.py +200 -88
  119. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/style.py +1 -4
  120. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/testing.py +10 -11
  121. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/utils/build.py +1 -1
  122. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/utils/console.py +75 -6
  123. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/utils/exceptions.py +12 -0
  124. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/utils/exec.py +10 -10
  125. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/utils/export.py +1 -2
  126. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/utils/format.py +11 -8
  127. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/utils/path_ops.py +2 -2
  128. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/utils/prerequisites.py +31 -28
  129. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/utils/processes.py +4 -4
  130. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/utils/pyi_generator.py +12 -11
  131. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/utils/types.py +6 -3
  132. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/vars/__init__.py +1 -0
  133. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/vars/base.py +75 -38
  134. reflex-0.6.7/reflex/vars/datetime.py +222 -0
  135. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/vars/function.py +3 -3
  136. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/vars/number.py +3 -3
  137. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/vars/object.py +5 -5
  138. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/vars/sequence.py +7 -7
  139. {reflex-0.6.6.post2 → reflex-0.6.7}/LICENSE +0 -0
  140. {reflex-0.6.6.post2 → reflex-0.6.7}/README.md +0 -0
  141. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/.templates/apps/blank/assets/favicon.ico +0 -0
  142. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/.templates/apps/blank/code/__init__.py +0 -0
  143. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/.templates/apps/blank/code/blank.py +0 -0
  144. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/.templates/jinja/app/rxconfig.py.jinja2 +0 -0
  145. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/.templates/jinja/custom_components/README.md.jinja2 +0 -0
  146. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/.templates/jinja/custom_components/__init__.py.jinja2 +0 -0
  147. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/.templates/jinja/custom_components/demo_app.py.jinja2 +0 -0
  148. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/.templates/jinja/custom_components/pyproject.toml.jinja2 +0 -0
  149. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/.templates/jinja/custom_components/src.py.jinja2 +0 -0
  150. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/.templates/jinja/web/package.json.jinja2 +0 -0
  151. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/.templates/jinja/web/pages/_app.js.jinja2 +0 -0
  152. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/.templates/jinja/web/pages/_document.js.jinja2 +0 -0
  153. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/.templates/jinja/web/pages/base_page.js.jinja2 +0 -0
  154. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/.templates/jinja/web/pages/component.js.jinja2 +0 -0
  155. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/.templates/jinja/web/pages/custom_component.js.jinja2 +0 -0
  156. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/.templates/jinja/web/pages/index.js.jinja2 +0 -0
  157. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/.templates/jinja/web/pages/stateful_components.js.jinja2 +0 -0
  158. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/.templates/jinja/web/pages/utils.js.jinja2 +0 -0
  159. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/.templates/jinja/web/styles/styles.css.jinja2 +0 -0
  160. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/.templates/jinja/web/tailwind.config.js.jinja2 +0 -0
  161. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/.templates/jinja/web/utils/context.js.jinja2 +0 -0
  162. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/.templates/jinja/web/utils/theme.js.jinja2 +0 -0
  163. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/.templates/web/.gitignore +0 -0
  164. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +0 -0
  165. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/.templates/web/components/shiki/code.js +0 -0
  166. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/.templates/web/jsconfig.json +0 -0
  167. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/.templates/web/next.config.js +0 -0
  168. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/.templates/web/postcss.config.js +0 -0
  169. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/.templates/web/styles/tailwind.css +0 -0
  170. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/.templates/web/utils/client_side_routing.js +0 -0
  171. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/.templates/web/utils/helpers/dataeditor.js +0 -0
  172. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/.templates/web/utils/helpers/debounce.js +0 -0
  173. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/.templates/web/utils/helpers/paste.js +0 -0
  174. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/.templates/web/utils/helpers/range.js +0 -0
  175. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/.templates/web/utils/helpers/throttle.js +0 -0
  176. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/__main__.py +0 -0
  177. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/admin.py +0 -0
  178. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/app_mixins/__init__.py +0 -0
  179. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/app_mixins/lifespan.py +0 -0
  180. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/app_mixins/middleware.py +0 -0
  181. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/app_mixins/mixin.py +0 -0
  182. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/app_module_for_backend.py +0 -0
  183. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/compiler/__init__.py +0 -0
  184. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/compiler/compiler.py +0 -0
  185. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/__init__.py +0 -0
  186. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/__init__.pyi +0 -0
  187. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/base/__init__.py +0 -0
  188. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/base/__init__.pyi +0 -0
  189. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/base/app_wrap.py +0 -0
  190. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/base/app_wrap.pyi +0 -0
  191. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/base/body.py +0 -0
  192. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/base/body.pyi +0 -0
  193. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/base/document.py +0 -0
  194. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/base/document.pyi +0 -0
  195. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/base/error_boundary.py +0 -0
  196. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/base/error_boundary.pyi +0 -0
  197. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/base/fragment.py +0 -0
  198. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/base/fragment.pyi +0 -0
  199. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/base/head.py +0 -0
  200. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/base/head.pyi +0 -0
  201. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/base/link.py +0 -0
  202. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/base/link.pyi +0 -0
  203. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/base/meta.py +0 -0
  204. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/base/meta.pyi +0 -0
  205. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/base/script.py +0 -0
  206. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/base/script.pyi +0 -0
  207. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/core/__init__.py +0 -0
  208. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/core/__init__.pyi +0 -0
  209. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/core/breakpoints.py +0 -0
  210. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/core/colors.py +0 -0
  211. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/core/debounce.py +0 -0
  212. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/core/debounce.pyi +0 -0
  213. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/core/html.py +0 -0
  214. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/core/layout/__init__.py +0 -0
  215. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/core/match.py +0 -0
  216. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/core/responsive.py +0 -0
  217. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/core/upload.pyi +0 -0
  218. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/datadisplay/__init__.py +0 -0
  219. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/datadisplay/__init__.pyi +0 -0
  220. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/datadisplay/code.pyi +0 -0
  221. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/datadisplay/logo.py +0 -0
  222. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/datadisplay/shiki_code_block.pyi +0 -0
  223. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/el/__init__.py +0 -0
  224. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/el/__init__.pyi +0 -0
  225. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/el/constants/__init__.py +0 -0
  226. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/el/constants/html.py +0 -0
  227. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/el/constants/react.py +0 -0
  228. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/el/constants/reflex.py +0 -0
  229. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/el/element.py +0 -0
  230. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/el/element.pyi +0 -0
  231. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/gridjs/__init__.py +0 -0
  232. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/gridjs/datatable.py +0 -0
  233. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/gridjs/datatable.pyi +0 -0
  234. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/literals.py +0 -0
  235. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/lucide/__init__.py +0 -0
  236. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/lucide/icon.py +0 -0
  237. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/lucide/icon.pyi +0 -0
  238. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/markdown/__init__.py +0 -0
  239. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/markdown/markdown.pyi +0 -0
  240. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/moment/__init__.py +0 -0
  241. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/moment/moment.py +0 -0
  242. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/moment/moment.pyi +0 -0
  243. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/next/__init__.py +0 -0
  244. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/next/base.py +0 -0
  245. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/next/base.pyi +0 -0
  246. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/next/link.py +0 -0
  247. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/next/link.pyi +0 -0
  248. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/next/video.py +0 -0
  249. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/next/video.pyi +0 -0
  250. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/plotly/__init__.py +0 -0
  251. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/plotly/plotly.pyi +0 -0
  252. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/props.py +0 -0
  253. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/__init__.py +0 -0
  254. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/__init__.pyi +0 -0
  255. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/primitives/__init__.py +0 -0
  256. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/primitives/__init__.pyi +0 -0
  257. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/primitives/accordion.pyi +0 -0
  258. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/primitives/base.py +0 -0
  259. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/primitives/base.pyi +0 -0
  260. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/primitives/drawer.py +0 -0
  261. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/primitives/drawer.pyi +0 -0
  262. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/primitives/form.py +0 -0
  263. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/primitives/progress.py +0 -0
  264. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/primitives/progress.pyi +0 -0
  265. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/primitives/slider.pyi +0 -0
  266. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/__init__.py +0 -0
  267. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/__init__.pyi +0 -0
  268. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/base.pyi +0 -0
  269. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/color_mode.py +0 -0
  270. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/__init__.py +0 -0
  271. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/__init__.pyi +0 -0
  272. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/alert_dialog.py +0 -0
  273. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/aspect_ratio.py +0 -0
  274. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/aspect_ratio.pyi +0 -0
  275. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/avatar.py +0 -0
  276. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/avatar.pyi +0 -0
  277. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/badge.py +0 -0
  278. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/button.py +0 -0
  279. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/callout.py +0 -0
  280. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/card.py +0 -0
  281. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/checkbox.py +0 -0
  282. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/checkbox_cards.py +0 -0
  283. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/checkbox_cards.pyi +0 -0
  284. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/checkbox_group.py +0 -0
  285. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/checkbox_group.pyi +0 -0
  286. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/data_list.py +0 -0
  287. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/data_list.pyi +0 -0
  288. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/dialog.py +0 -0
  289. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/dropdown_menu.py +0 -0
  290. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/dropdown_menu.pyi +0 -0
  291. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/hover_card.py +0 -0
  292. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/inset.py +0 -0
  293. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/popover.py +0 -0
  294. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/progress.py +0 -0
  295. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/progress.pyi +0 -0
  296. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/radio.py +0 -0
  297. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/radio.pyi +0 -0
  298. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/radio_cards.py +0 -0
  299. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/radio_cards.pyi +0 -0
  300. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/scroll_area.py +0 -0
  301. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/scroll_area.pyi +0 -0
  302. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/segmented_control.py +0 -0
  303. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/segmented_control.pyi +0 -0
  304. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/select.py +0 -0
  305. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/separator.py +0 -0
  306. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/separator.pyi +0 -0
  307. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/skeleton.py +0 -0
  308. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/skeleton.pyi +0 -0
  309. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/slider.py +0 -0
  310. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/spinner.py +0 -0
  311. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/spinner.pyi +0 -0
  312. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/switch.py +0 -0
  313. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/table.py +0 -0
  314. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/tabs.py +0 -0
  315. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/tooltip.py +0 -0
  316. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/components/tooltip.pyi +0 -0
  317. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/layout/__init__.py +0 -0
  318. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/layout/__init__.pyi +0 -0
  319. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/layout/base.py +0 -0
  320. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/layout/base.pyi +0 -0
  321. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/layout/box.py +0 -0
  322. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/layout/center.py +0 -0
  323. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/layout/container.py +0 -0
  324. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/layout/container.pyi +0 -0
  325. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/layout/flex.py +0 -0
  326. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/layout/grid.py +0 -0
  327. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/layout/section.py +0 -0
  328. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/layout/spacer.py +0 -0
  329. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/layout/stack.py +0 -0
  330. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/typography/__init__.py +0 -0
  331. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/typography/__init__.pyi +0 -0
  332. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/typography/base.py +0 -0
  333. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/typography/blockquote.py +0 -0
  334. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/typography/code.py +0 -0
  335. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/typography/heading.py +0 -0
  336. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/radix/themes/typography/text.py +0 -0
  337. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/react_player/__init__.py +0 -0
  338. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/react_player/audio.py +0 -0
  339. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/react_player/audio.pyi +0 -0
  340. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/react_player/react_player.py +0 -0
  341. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/react_player/react_player.pyi +0 -0
  342. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/react_player/video.py +0 -0
  343. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/react_player/video.pyi +0 -0
  344. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/recharts/__init__.py +0 -0
  345. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/recharts/__init__.pyi +0 -0
  346. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/recharts/cartesian.pyi +0 -0
  347. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/recharts/charts.pyi +0 -0
  348. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/recharts/general.py +0 -0
  349. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/recharts/general.pyi +0 -0
  350. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/recharts/recharts.py +0 -0
  351. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/recharts/recharts.pyi +0 -0
  352. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/sonner/__init__.py +0 -0
  353. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/sonner/toast.pyi +0 -0
  354. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/suneditor/__init__.py +0 -0
  355. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/tags/__init__.py +0 -0
  356. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/tags/cond_tag.py +0 -0
  357. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/tags/iter_tag.py +0 -0
  358. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/tags/match_tag.py +0 -0
  359. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/tags/tag.py +0 -0
  360. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/components/tags/tagless.py +0 -0
  361. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/constants/__init__.py +0 -0
  362. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/constants/base.py +0 -0
  363. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/constants/colors.py +0 -0
  364. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/constants/event.py +0 -0
  365. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/constants/installer.py +0 -0
  366. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/constants/state.py +0 -0
  367. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/constants/style.py +0 -0
  368. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/constants/utils.py +0 -0
  369. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/custom_components/__init__.py +0 -0
  370. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/experimental/__init__.py +0 -0
  371. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/experimental/assets.py +0 -0
  372. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/experimental/hooks.py +0 -0
  373. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/experimental/layout.pyi +0 -0
  374. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/experimental/misc.py +0 -0
  375. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/istate/__init__.py +0 -0
  376. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/istate/data.py +0 -0
  377. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/istate/dynamic.py +0 -0
  378. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/istate/proxy.py +0 -0
  379. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/istate/storage.py +0 -0
  380. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/istate/wrappers.py +0 -0
  381. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/middleware/__init__.py +0 -0
  382. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/middleware/hydrate_middleware.py +0 -0
  383. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/middleware/middleware.py +0 -0
  384. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/page.py +0 -0
  385. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/route.py +0 -0
  386. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/utils/__init__.py +0 -0
  387. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/utils/codespaces.py +0 -0
  388. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/utils/compat.py +0 -0
  389. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/utils/imports.py +0 -0
  390. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/utils/lazy_loader.py +0 -0
  391. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/utils/net.py +0 -0
  392. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/utils/redir.py +0 -0
  393. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/utils/registry.py +0 -0
  394. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/utils/serializers.py +0 -0
  395. {reflex-0.6.6.post2 → reflex-0.6.7}/reflex/utils/telemetry.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: reflex
3
- Version: 0.6.6.post2
3
+ Version: 0.6.7
4
4
  Summary: Web apps in pure Python.
5
5
  Home-page: https://reflex.dev
6
6
  License: Apache-2.0
@@ -39,7 +39,7 @@ Requires-Dist: setuptools (>=75.0)
39
39
  Requires-Dist: sqlmodel (>=0.0.14,<0.1)
40
40
  Requires-Dist: starlette-admin (>=0.11.0,<1.0)
41
41
  Requires-Dist: tomlkit (>=0.12.4,<1.0)
42
- Requires-Dist: twine (>=4.0.0,<6.0)
42
+ Requires-Dist: twine (>=4.0.0,<7.0)
43
43
  Requires-Dist: typer (>=0.4.2,<1.0)
44
44
  Requires-Dist: typing_extensions (>=4.6.0)
45
45
  Requires-Dist: uvicorn (>=0.20.0)
@@ -1,29 +1,22 @@
1
1
  [tool.poetry]
2
2
  name = "reflex"
3
- version = "0.6.6.post2"
3
+ version = "0.6.7"
4
4
  description = "Web apps in pure Python."
5
5
  license = "Apache-2.0"
6
6
  authors = [
7
- "Nikhil Rao <nikhil@reflex.dev>",
8
- "Alek Petuskey <alek@reflex.dev>",
9
- "Masen Furer <masen@reflex.dev>",
10
- "Elijah Ahianyo <elijah@reflex.dev>",
11
- "Thomas Brandého <thomas@reflex.dev>",
7
+ "Nikhil Rao <nikhil@reflex.dev>",
8
+ "Alek Petuskey <alek@reflex.dev>",
9
+ "Masen Furer <masen@reflex.dev>",
10
+ "Elijah Ahianyo <elijah@reflex.dev>",
11
+ "Thomas Brandého <thomas@reflex.dev>",
12
12
  ]
13
13
  readme = "README.md"
14
14
  homepage = "https://reflex.dev"
15
15
  repository = "https://github.com/reflex-dev/reflex"
16
16
  documentation = "https://reflex.dev/docs/getting-started/introduction"
17
- keywords = [
18
- "web",
19
- "framework",
20
- ]
21
- classifiers = [
22
- "Development Status :: 4 - Beta",
23
- ]
24
- packages = [
25
- {include = "reflex"}
26
- ]
17
+ keywords = ["web", "framework"]
18
+ classifiers = ["Development Status :: 4 - Beta"]
19
+ packages = [{ include = "reflex" }]
27
20
 
28
21
  [tool.poetry.dependencies]
29
22
  python = "^3.9"
@@ -42,11 +35,11 @@ uvicorn = ">=0.20.0"
42
35
  starlette-admin = ">=0.11.0,<1.0"
43
36
  alembic = ">=1.11.1,<2.0"
44
37
  platformdirs = ">=3.10.0,<5.0"
45
- distro = {version = ">=1.8.0,<2.0", platform = "linux"}
38
+ distro = { version = ">=1.8.0,<2.0", platform = "linux" }
46
39
  python-engineio = "!=4.6.0"
47
40
  wrapt = [
48
- {version = ">=1.14.0,<2.0", python = ">=3.11"},
49
- {version = ">=1.11.0,<2.0", python = "<3.11"},
41
+ { version = ">=1.14.0,<2.0", python = ">=3.11" },
42
+ { version = ">=1.11.0,<2.0", python = "<3.11" },
50
43
  ]
51
44
  packaging = ">=23.1,<25.0"
52
45
  reflex-hosting-cli = ">=0.1.29,<2.0"
@@ -55,7 +48,7 @@ wheel = ">=0.42.0,<1.0"
55
48
  build = ">=1.0.3,<2.0"
56
49
  setuptools = ">=75.0"
57
50
  httpx = ">=0.25.1,<1.0"
58
- twine = ">=4.0.0,<6.0"
51
+ twine = ">=4.0.0,<7.0"
59
52
  tomlkit = ">=0.12.4,<1.0"
60
53
  lazy_loader = ">=0.4"
61
54
  reflex-chakra = ">=0.6.0"
@@ -70,7 +63,7 @@ dill = ">=0.3.8"
70
63
  toml = ">=0.10.2,<1.0"
71
64
  pytest-asyncio = ">=0.24.0"
72
65
  pytest-cov = ">=4.0.0,<7.0"
73
- ruff = "0.7.4"
66
+ ruff = "0.8.2"
74
67
  pandas = ">=2.1.1,<3.0"
75
68
  pillow = ">=10.0.0,<12.0"
76
69
  plotly = ">=5.13.0,<6.0"
@@ -92,14 +85,15 @@ build-backend = "poetry.core.masonry.api"
92
85
 
93
86
  [tool.ruff]
94
87
  target-version = "py39"
88
+ output-format = "concise"
95
89
  lint.isort.split-on-trailing-comma = false
96
- lint.select = ["B", "D", "E", "F", "I", "SIM", "W"]
97
- lint.ignore = ["B008", "D205", "E501", "F403", "SIM115"]
90
+ lint.select = ["B", "C4", "D", "E", "ERA", "F", "FURB", "I", "PERF", "PTH", "RUF", "SIM", "W"]
91
+ lint.ignore = ["B008", "D205", "E501", "F403", "SIM115", "RUF006", "RUF012"]
98
92
  lint.pydocstyle.convention = "google"
99
93
 
100
94
  [tool.ruff.lint.per-file-ignores]
101
95
  "__init__.py" = ["F401"]
102
- "tests/*.py" = ["D100", "D103", "D104", "B018"]
96
+ "tests/*.py" = ["D100", "D103", "D104", "B018", "PERF"]
103
97
  "reflex/.templates/*.py" = ["D100", "D103", "D104"]
104
98
  "*.pyi" = ["D301", "D415", "D417", "D418", "E742"]
105
99
  "*/blank.py" = ["I001"]
@@ -5,11 +5,15 @@ export function {{tag_name}} () {
5
5
  {{ hook }}
6
6
  {% endfor %}
7
7
 
8
+ {% for hook, data in component._get_all_hooks().items() if not data.position or data.position == const.hook_position.PRE_TRIGGER %}
9
+ {{ hook }}
10
+ {% endfor %}
11
+
8
12
  {% for hook in memo_trigger_hooks %}
9
13
  {{ hook }}
10
14
  {% endfor %}
11
15
 
12
- {% for hook in component._get_all_hooks() %}
16
+ {% for hook, data in component._get_all_hooks().items() if data.position and data.position == const.hook_position.POST_TRIGGER %}
13
17
  {{ hook }}
14
18
  {% endfor %}
15
19
 
@@ -40,9 +40,6 @@ let event_processing = false;
40
40
  // Array holding pending events to be processed.
41
41
  const event_queue = [];
42
42
 
43
- // Pending upload promises, by id
44
- const upload_controllers = {};
45
-
46
43
  /**
47
44
  * Generate a UUID (Used for session tokens).
48
45
  * Taken from: https://stackoverflow.com/questions/105034/how-do-i-create-a-guid-uuid
@@ -300,7 +297,7 @@ export const applyEvent = async (event, socket) => {
300
297
  if (socket) {
301
298
  socket.emit(
302
299
  "event",
303
- JSON.stringify(event, (k, v) => (v === undefined ? null : v))
300
+ event,
304
301
  );
305
302
  return true;
306
303
  }
@@ -407,6 +404,8 @@ export const connect = async (
407
404
  transports: transports,
408
405
  autoUnref: false,
409
406
  });
407
+ // Ensure undefined fields in events are sent as null instead of removed
408
+ socket.current.io.encoder.replacer = (k, v) => (v === undefined ? null : v)
410
409
 
411
410
  function checkVisibility() {
412
411
  if (document.visibilityState === "visible") {
@@ -443,8 +442,7 @@ export const connect = async (
443
442
  });
444
443
 
445
444
  // On each received message, queue the updates and events.
446
- socket.current.on("event", async (message) => {
447
- const update = JSON5.parse(message);
445
+ socket.current.on("event", async (update) => {
448
446
  for (const substate in update.delta) {
449
447
  dispatch[substate](update.delta[substate]);
450
448
  }
@@ -456,7 +454,7 @@ export const connect = async (
456
454
  });
457
455
  socket.current.on("reload", async (event) => {
458
456
  event_processing = false;
459
- queueEvents([...initialEvents(), JSON5.parse(event)], socket);
457
+ queueEvents([...initialEvents(), event], socket);
460
458
  });
461
459
 
462
460
  document.addEventListener("visibilitychange", checkVisibility);
@@ -485,7 +483,9 @@ export const uploadFiles = async (
485
483
  return false;
486
484
  }
487
485
 
488
- if (upload_controllers[upload_id]) {
486
+ const upload_ref_name = `__upload_controllers_${upload_id}`
487
+
488
+ if (refs[upload_ref_name]) {
489
489
  console.log("Upload already in progress for ", upload_id);
490
490
  return false;
491
491
  }
@@ -497,23 +497,31 @@ export const uploadFiles = async (
497
497
  // Whenever called, responseText will contain the entire response so far.
498
498
  const chunks = progressEvent.event.target.responseText.trim().split("\n");
499
499
  // So only process _new_ chunks beyond resp_idx.
500
- chunks.slice(resp_idx).map((chunk) => {
501
- event_callbacks.map((f, ix) => {
502
- f(chunk)
503
- .then(() => {
504
- if (ix === event_callbacks.length - 1) {
505
- // Mark this chunk as processed.
506
- resp_idx += 1;
507
- }
508
- })
509
- .catch((e) => {
510
- if (progressEvent.progress === 1) {
511
- // Chunk may be incomplete, so only report errors when full response is available.
512
- console.log("Error parsing chunk", chunk, e);
513
- }
514
- return;
515
- });
516
- });
500
+ chunks.slice(resp_idx).map((chunk_json) => {
501
+ try {
502
+ const chunk = JSON5.parse(chunk_json);
503
+ event_callbacks.map((f, ix) => {
504
+ f(chunk)
505
+ .then(() => {
506
+ if (ix === event_callbacks.length - 1) {
507
+ // Mark this chunk as processed.
508
+ resp_idx += 1;
509
+ }
510
+ })
511
+ .catch((e) => {
512
+ if (progressEvent.progress === 1) {
513
+ // Chunk may be incomplete, so only report errors when full response is available.
514
+ console.log("Error processing chunk", chunk, e);
515
+ }
516
+ return;
517
+ });
518
+ });
519
+ } catch (e) {
520
+ if (progressEvent.progress === 1) {
521
+ console.log("Error parsing chunk", chunk_json, e);
522
+ }
523
+ return;
524
+ }
517
525
  });
518
526
  };
519
527
 
@@ -537,7 +545,7 @@ export const uploadFiles = async (
537
545
  });
538
546
 
539
547
  // Send the file to the server.
540
- upload_controllers[upload_id] = controller;
548
+ refs[upload_ref_name] = controller;
541
549
 
542
550
  try {
543
551
  return await axios.post(getBackendURL(UPLOADURL), formdata, config);
@@ -557,7 +565,7 @@ export const uploadFiles = async (
557
565
  }
558
566
  return false;
559
567
  } finally {
560
- delete upload_controllers[upload_id];
568
+ delete refs[upload_ref_name];
561
569
  }
562
570
  };
563
571
 
@@ -799,7 +807,7 @@ export const useEventLoop = (
799
807
  connect(
800
808
  socket,
801
809
  dispatch,
802
- ["websocket", "polling"],
810
+ ["websocket"],
803
811
  setConnectErrors,
804
812
  client_storage
805
813
  );
@@ -331,7 +331,7 @@ _MAPPING: dict = {
331
331
  "SessionStorage",
332
332
  ],
333
333
  "middleware": ["middleware", "Middleware"],
334
- "model": ["session", "Model"],
334
+ "model": ["asession", "session", "Model"],
335
335
  "state": [
336
336
  "var",
337
337
  "ComponentState",
@@ -186,6 +186,7 @@ from .istate.wrappers import get_state as get_state
186
186
  from .middleware import Middleware as Middleware
187
187
  from .middleware import middleware as middleware
188
188
  from .model import Model as Model
189
+ from .model import asession as asession
189
190
  from .model import session as session
190
191
  from .page import page as page
191
192
  from .state import ComponentState as ComponentState
@@ -17,6 +17,7 @@ import sys
17
17
  import traceback
18
18
  from datetime import datetime
19
19
  from pathlib import Path
20
+ from types import SimpleNamespace
20
21
  from typing import (
21
22
  TYPE_CHECKING,
22
23
  Any,
@@ -363,6 +364,11 @@ class App(MiddlewareMixin, LifespanMixin):
363
364
  max_http_buffer_size=constants.POLLING_MAX_HTTP_BUFFER_SIZE,
364
365
  ping_interval=constants.Ping.INTERVAL,
365
366
  ping_timeout=constants.Ping.TIMEOUT,
367
+ json=SimpleNamespace(
368
+ dumps=staticmethod(format.json_dumps),
369
+ loads=staticmethod(json.loads),
370
+ ),
371
+ transports=["websocket"],
366
372
  )
367
373
  elif getattr(self.sio, "async_mode", "") != "asgi":
368
374
  raise RuntimeError(
@@ -430,7 +436,7 @@ class App(MiddlewareMixin, LifespanMixin):
430
436
  allow_credentials=True,
431
437
  allow_methods=["*"],
432
438
  allow_headers=["*"],
433
- allow_origins=["*"],
439
+ allow_origins=get_config().cors_allowed_origins,
434
440
  )
435
441
 
436
442
  @property
@@ -467,7 +473,7 @@ class App(MiddlewareMixin, LifespanMixin):
467
473
 
468
474
  def add_page(
469
475
  self,
470
- component: Component | ComponentCallable,
476
+ component: Component | ComponentCallable | None = None,
471
477
  route: str | None = None,
472
478
  title: str | Var | None = None,
473
479
  description: str | Var | None = None,
@@ -490,17 +496,33 @@ class App(MiddlewareMixin, LifespanMixin):
490
496
  meta: The metadata of the page.
491
497
 
492
498
  Raises:
493
- ValueError: When the specified route name already exists.
499
+ PageValueError: When the component is not set for a non-404 page.
500
+ RouteValueError: When the specified route name already exists.
494
501
  """
495
502
  # If the route is not set, get it from the callable.
496
503
  if route is None:
497
504
  if not isinstance(component, Callable):
498
- raise ValueError("Route must be set if component is not a callable.")
505
+ raise exceptions.RouteValueError(
506
+ "Route must be set if component is not a callable."
507
+ )
499
508
  # Format the route.
500
509
  route = format.format_route(component.__name__)
501
510
  else:
502
511
  route = format.format_route(route, format_case=False)
503
512
 
513
+ if route == constants.Page404.SLUG:
514
+ if component is None:
515
+ component = Default404Page.create()
516
+ component = wait_for_client_redirect(self._generate_component(component))
517
+ title = title or constants.Page404.TITLE
518
+ description = description or constants.Page404.DESCRIPTION
519
+ image = image or constants.Page404.IMAGE
520
+ else:
521
+ if component is None:
522
+ raise exceptions.PageValueError(
523
+ "Component must be set for a non-404 page."
524
+ )
525
+
504
526
  # Check if the route given is valid
505
527
  verify_route_validity(route)
506
528
 
@@ -516,7 +538,7 @@ class App(MiddlewareMixin, LifespanMixin):
516
538
  if route == constants.PageNames.INDEX_ROUTE
517
539
  else f"`{route}`"
518
540
  )
519
- raise ValueError(
541
+ raise exceptions.RouteValueError(
520
542
  f"Duplicate page route {route_name} already exists. Make sure you do not have two"
521
543
  f" pages with the same route"
522
544
  )
@@ -633,10 +655,14 @@ class App(MiddlewareMixin, LifespanMixin):
633
655
  on_load: The event handler(s) that will be called each time the page load.
634
656
  meta: The metadata of the page.
635
657
  """
636
- if component is None:
637
- component = Default404Page.create()
658
+ console.deprecate(
659
+ feature_name="App.add_custom_404_page",
660
+ reason=f"Use app.add_page(component, route='/{constants.Page404.SLUG}') instead.",
661
+ deprecation_version="0.6.7",
662
+ removal_version="0.8.0",
663
+ )
638
664
  self.add_page(
639
- component=wait_for_client_redirect(self._generate_component(component)),
665
+ component=component,
640
666
  route=constants.Page404.SLUG,
641
667
  title=title or constants.Page404.TITLE,
642
668
  image=image or constants.Page404.IMAGE,
@@ -837,7 +863,7 @@ class App(MiddlewareMixin, LifespanMixin):
837
863
 
838
864
  # Render a default 404 page if the user didn't supply one
839
865
  if constants.Page404.SLUG not in self.unevaluated_pages:
840
- self.add_custom_404_page()
866
+ self.add_page(route=constants.Page404.SLUG)
841
867
 
842
868
  # Fix up the style.
843
869
  self.style = evaluate_style_namespaces(self.style)
@@ -947,12 +973,12 @@ class App(MiddlewareMixin, LifespanMixin):
947
973
  is not None
948
974
  ):
949
975
  executor = concurrent.futures.ProcessPoolExecutor(
950
- max_workers=number_of_processes,
976
+ max_workers=number_of_processes or None,
951
977
  mp_context=multiprocessing.get_context("fork"),
952
978
  )
953
979
  else:
954
980
  executor = concurrent.futures.ThreadPoolExecutor(
955
- max_workers=environment.REFLEX_COMPILE_THREADS.get()
981
+ max_workers=environment.REFLEX_COMPILE_THREADS.get() or None
956
982
  )
957
983
 
958
984
  for route, component in zip(self.pages, page_components):
@@ -965,7 +991,6 @@ class App(MiddlewareMixin, LifespanMixin):
965
991
 
966
992
  def _submit_work(fn, *args, **kwargs):
967
993
  f = executor.submit(fn, *args, **kwargs)
968
- # f = executor.apipe(fn, *args, **kwargs)
969
994
  result_futures.append(f)
970
995
 
971
996
  # Compile the pre-compiled pages.
@@ -1157,7 +1182,7 @@ class App(MiddlewareMixin, LifespanMixin):
1157
1182
  if hasattr(handler_fn, "__name__"):
1158
1183
  _fn_name = handler_fn.__name__
1159
1184
  else:
1160
- _fn_name = handler_fn.__class__.__name__
1185
+ _fn_name = type(handler_fn).__name__
1161
1186
 
1162
1187
  if isinstance(handler_fn, functools.partial):
1163
1188
  raise ValueError(
@@ -1270,7 +1295,7 @@ async def process(
1270
1295
  await asyncio.create_task(
1271
1296
  app.event_namespace.emit(
1272
1297
  "reload",
1273
- data=format.json_dumps(event),
1298
+ data=event,
1274
1299
  to=sid,
1275
1300
  )
1276
1301
  )
@@ -1523,7 +1548,7 @@ class EventNamespace(AsyncNamespace):
1523
1548
  """
1524
1549
  # Creating a task prevents the update from being blocked behind other coroutines.
1525
1550
  await asyncio.create_task(
1526
- self.emit(str(constants.SocketEvent.EVENT), update.json(), to=sid)
1551
+ self.emit(str(constants.SocketEvent.EVENT), update, to=sid)
1527
1552
  )
1528
1553
 
1529
1554
  async def on_event(self, sid, data):
@@ -1536,7 +1561,7 @@ class EventNamespace(AsyncNamespace):
1536
1561
  sid: The Socket.IO session id.
1537
1562
  data: The event data.
1538
1563
  """
1539
- fields = json.loads(data)
1564
+ fields = data
1540
1565
  # Get the event.
1541
1566
  event = Event(
1542
1567
  **{k: v for k, v in fields.items() if k not in ("handler", "event_actions")}
@@ -5,7 +5,7 @@ from pathlib import Path
5
5
  from typing import Optional
6
6
 
7
7
  from reflex import constants
8
- from reflex.utils.exec import is_backend_only
8
+ from reflex.config import EnvironmentVariables
9
9
 
10
10
 
11
11
  def asset(
@@ -52,7 +52,7 @@ def asset(
52
52
  The relative URL to the asset.
53
53
  """
54
54
  assets = constants.Dirs.APP_ASSETS
55
- backend_only = is_backend_only()
55
+ backend_only = EnvironmentVariables.REFLEX_BACKEND_ONLY.get()
56
56
 
57
57
  # Local asset handling
58
58
  if not shared:
@@ -30,15 +30,16 @@ def validate_field_name(bases: List[Type["BaseModel"]], field_name: str) -> None
30
30
 
31
31
  # can't use reflex.config.environment here cause of circular import
32
32
  reload = os.getenv("__RELOAD_CONFIG", "").lower() == "true"
33
- for base in bases:
34
- try:
33
+ base = None
34
+ try:
35
+ for base in bases:
35
36
  if not reload and getattr(base, field_name, None):
36
37
  pass
37
- except TypeError as te:
38
- raise VarNameError(
39
- f'State var "{field_name}" in {base} has been shadowed by a substate var; '
40
- f'use a different field name instead".'
41
- ) from te
38
+ except TypeError as te:
39
+ raise VarNameError(
40
+ f'State var "{field_name}" in {base} has been shadowed by a substate var; '
41
+ f'use a different field name instead".'
42
+ ) from te
42
43
 
43
44
 
44
45
  # monkeypatch pydantic validate_field_name method to skip validating
@@ -45,6 +45,7 @@ class ReflexJinjaEnvironment(Environment):
45
45
  "on_load_internal": constants.CompileVars.ON_LOAD_INTERNAL,
46
46
  "update_vars_internal": constants.CompileVars.UPDATE_VARS_INTERNAL,
47
47
  "frontend_exception_state": constants.CompileVars.FRONTEND_EXCEPTION_STATE_FULL,
48
+ "hook_position": constants.Hooks.HookPosition,
48
49
  }
49
50
 
50
51
 
@@ -115,7 +115,7 @@ def compile_imports(import_dict: ParsedImportDict) -> list[dict]:
115
115
  default, rest = compile_import_statement(fields)
116
116
 
117
117
  # prevent lib from being rendered on the page if all imports are non rendered kind
118
- if not any({f.render for f in fields}): # type: ignore
118
+ if not any(f.render for f in fields): # type: ignore
119
119
  continue
120
120
 
121
121
  if not lib:
@@ -123,8 +123,7 @@ def compile_imports(import_dict: ParsedImportDict) -> list[dict]:
123
123
  raise ValueError("No default field allowed for empty library.")
124
124
  if rest is None or len(rest) == 0:
125
125
  raise ValueError("No fields to import.")
126
- for module in sorted(rest):
127
- import_dicts.append(get_import_dict(module))
126
+ import_dicts.extend(get_import_dict(module) for module in sorted(rest))
128
127
  continue
129
128
 
130
129
  # remove the version before rendering the package imports
@@ -103,8 +103,8 @@ class Bare(Component):
103
103
  def _render(self) -> Tag:
104
104
  if isinstance(self.contents, Var):
105
105
  if isinstance(self.contents, (BooleanVar, ObjectVar)):
106
- return Tagless(contents=f"{{{str(self.contents.to_string())}}}")
107
- return Tagless(contents=f"{{{str(self.contents)}}}")
106
+ return Tagless(contents=f"{{{self.contents.to_string()!s}}}")
107
+ return Tagless(contents=f"{{{self.contents!s}}}")
108
108
  return Tagless(contents=str(self.contents))
109
109
 
110
110
  def _get_vars(self, include_children: bool = False) -> Iterator[Var]: