reflex 0.7.14a3__tar.gz → 0.7.14a4__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 (408) hide show
  1. {reflex-0.7.14a3 → reflex-0.7.14a4}/PKG-INFO +1 -1
  2. {reflex-0.7.14a3 → reflex-0.7.14a4}/pyproject.toml +1 -1
  3. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/app.py +2 -1
  4. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/assets.py +1 -1
  5. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/compiler/compiler.py +2 -1
  6. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/base/bare.py +1 -1
  7. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/core/banner.py +1 -1
  8. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/core/upload.py +1 -1
  9. reflex-0.7.14a4/reflex/config.py +580 -0
  10. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/constants/base.py +3 -3
  11. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/constants/installer.py +1 -1
  12. reflex-0.7.14a3/reflex/config.py → reflex-0.7.14a4/reflex/environment.py +5 -571
  13. reflex-0.7.14a4/reflex/experimental/layout.pyi +814 -0
  14. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/istate/manager.py +2 -1
  15. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/model.py +2 -1
  16. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/reflex.py +2 -1
  17. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/state.py +1 -1
  18. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/testing.py +3 -1
  19. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/utils/console.py +2 -2
  20. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/utils/exec.py +2 -1
  21. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/utils/export.py +2 -1
  22. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/utils/net.py +2 -2
  23. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/utils/path_ops.py +2 -1
  24. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/utils/prerequisites.py +2 -1
  25. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/utils/processes.py +1 -1
  26. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/utils/registry.py +1 -1
  27. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/utils/telemetry.py +1 -1
  28. {reflex-0.7.14a3 → reflex-0.7.14a4}/.gitignore +0 -0
  29. {reflex-0.7.14a3 → reflex-0.7.14a4}/LICENSE +0 -0
  30. {reflex-0.7.14a3 → reflex-0.7.14a4}/README.md +0 -0
  31. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/.templates/apps/blank/assets/favicon.ico +0 -0
  32. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/.templates/apps/blank/code/__init__.py +0 -0
  33. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/.templates/apps/blank/code/blank.py +0 -0
  34. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/.templates/jinja/app/rxconfig.py.jinja2 +0 -0
  35. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/.templates/jinja/custom_components/README.md.jinja2 +0 -0
  36. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/.templates/jinja/custom_components/__init__.py.jinja2 +0 -0
  37. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/.templates/jinja/custom_components/demo_app.py.jinja2 +0 -0
  38. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/.templates/jinja/custom_components/pyproject.toml.jinja2 +0 -0
  39. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/.templates/jinja/custom_components/src.py.jinja2 +0 -0
  40. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/.templates/jinja/web/package.json.jinja2 +0 -0
  41. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/.templates/jinja/web/pages/_app.js.jinja2 +0 -0
  42. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/.templates/jinja/web/pages/_document.js.jinja2 +0 -0
  43. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/.templates/jinja/web/pages/base_page.js.jinja2 +0 -0
  44. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/.templates/jinja/web/pages/component.js.jinja2 +0 -0
  45. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/.templates/jinja/web/pages/custom_component.js.jinja2 +0 -0
  46. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/.templates/jinja/web/pages/index.js.jinja2 +0 -0
  47. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/.templates/jinja/web/pages/macros.js.jinja2 +0 -0
  48. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/.templates/jinja/web/pages/stateful_component.js.jinja2 +0 -0
  49. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/.templates/jinja/web/pages/stateful_components.js.jinja2 +0 -0
  50. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/.templates/jinja/web/pages/utils.js.jinja2 +0 -0
  51. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/.templates/jinja/web/styles/styles.css.jinja2 +0 -0
  52. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/.templates/jinja/web/utils/context.js.jinja2 +0 -0
  53. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/.templates/jinja/web/utils/theme.js.jinja2 +0 -0
  54. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/.templates/web/.gitignore +0 -0
  55. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +0 -0
  56. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/.templates/web/components/shiki/code.js +0 -0
  57. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/.templates/web/jsconfig.json +0 -0
  58. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/.templates/web/next.config.js +0 -0
  59. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/.templates/web/postcss.config.js +0 -0
  60. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/.templates/web/utils/client_side_routing.js +0 -0
  61. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/.templates/web/utils/helpers/dataeditor.js +0 -0
  62. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/.templates/web/utils/helpers/debounce.js +0 -0
  63. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/.templates/web/utils/helpers/paste.js +0 -0
  64. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/.templates/web/utils/helpers/range.js +0 -0
  65. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/.templates/web/utils/helpers/throttle.js +0 -0
  66. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/.templates/web/utils/state.js +0 -0
  67. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/__init__.py +0 -0
  68. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/__init__.pyi +0 -0
  69. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/__main__.py +0 -0
  70. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/admin.py +0 -0
  71. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/app_mixins/__init__.py +0 -0
  72. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/app_mixins/lifespan.py +0 -0
  73. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/app_mixins/middleware.py +0 -0
  74. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/app_mixins/mixin.py +0 -0
  75. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/base.py +0 -0
  76. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/compiler/__init__.py +0 -0
  77. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/compiler/templates.py +0 -0
  78. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/compiler/utils.py +0 -0
  79. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/__init__.py +0 -0
  80. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/__init__.pyi +0 -0
  81. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/base/__init__.py +0 -0
  82. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/base/__init__.pyi +0 -0
  83. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/base/app_wrap.py +0 -0
  84. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/base/app_wrap.pyi +0 -0
  85. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/base/body.py +0 -0
  86. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/base/body.pyi +0 -0
  87. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/base/document.py +0 -0
  88. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/base/document.pyi +0 -0
  89. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/base/error_boundary.py +0 -0
  90. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/base/error_boundary.pyi +0 -0
  91. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/base/fragment.py +0 -0
  92. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/base/fragment.pyi +0 -0
  93. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/base/head.py +0 -0
  94. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/base/head.pyi +0 -0
  95. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/base/link.py +0 -0
  96. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/base/link.pyi +0 -0
  97. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/base/meta.py +0 -0
  98. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/base/meta.pyi +0 -0
  99. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/base/script.py +0 -0
  100. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/base/script.pyi +0 -0
  101. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/base/strict_mode.py +0 -0
  102. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/base/strict_mode.pyi +0 -0
  103. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/component.py +0 -0
  104. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/core/__init__.py +0 -0
  105. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/core/__init__.pyi +0 -0
  106. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/core/auto_scroll.py +0 -0
  107. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/core/auto_scroll.pyi +0 -0
  108. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/core/banner.pyi +0 -0
  109. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/core/breakpoints.py +0 -0
  110. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/core/client_side_routing.py +0 -0
  111. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/core/client_side_routing.pyi +0 -0
  112. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/core/clipboard.py +0 -0
  113. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/core/clipboard.pyi +0 -0
  114. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/core/colors.py +0 -0
  115. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/core/cond.py +0 -0
  116. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/core/debounce.py +0 -0
  117. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/core/debounce.pyi +0 -0
  118. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/core/foreach.py +0 -0
  119. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/core/html.py +0 -0
  120. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/core/html.pyi +0 -0
  121. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/core/layout/__init__.py +0 -0
  122. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/core/match.py +0 -0
  123. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/core/responsive.py +0 -0
  124. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/core/sticky.py +0 -0
  125. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/core/sticky.pyi +0 -0
  126. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/core/upload.pyi +0 -0
  127. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/datadisplay/__init__.py +0 -0
  128. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/datadisplay/__init__.pyi +0 -0
  129. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/datadisplay/code.py +0 -0
  130. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/datadisplay/code.pyi +0 -0
  131. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/datadisplay/dataeditor.py +0 -0
  132. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/datadisplay/dataeditor.pyi +0 -0
  133. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/datadisplay/logo.py +0 -0
  134. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/datadisplay/shiki_code_block.py +0 -0
  135. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/datadisplay/shiki_code_block.pyi +0 -0
  136. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/dynamic.py +0 -0
  137. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/el/__init__.py +0 -0
  138. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/el/__init__.pyi +0 -0
  139. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/el/constants/__init__.py +0 -0
  140. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/el/constants/html.py +0 -0
  141. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/el/constants/react.py +0 -0
  142. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/el/constants/reflex.py +0 -0
  143. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/el/element.py +0 -0
  144. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/el/element.pyi +0 -0
  145. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/el/elements/__init__.py +0 -0
  146. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/el/elements/__init__.pyi +0 -0
  147. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/el/elements/base.py +0 -0
  148. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/el/elements/base.pyi +0 -0
  149. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/el/elements/forms.py +0 -0
  150. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/el/elements/forms.pyi +0 -0
  151. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/el/elements/inline.py +0 -0
  152. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/el/elements/inline.pyi +0 -0
  153. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/el/elements/media.py +0 -0
  154. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/el/elements/media.pyi +0 -0
  155. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/el/elements/metadata.py +0 -0
  156. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/el/elements/metadata.pyi +0 -0
  157. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/el/elements/other.py +0 -0
  158. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/el/elements/other.pyi +0 -0
  159. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/el/elements/scripts.py +0 -0
  160. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/el/elements/scripts.pyi +0 -0
  161. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/el/elements/sectioning.py +0 -0
  162. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/el/elements/sectioning.pyi +0 -0
  163. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/el/elements/tables.py +0 -0
  164. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/el/elements/tables.pyi +0 -0
  165. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/el/elements/typography.py +0 -0
  166. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/el/elements/typography.pyi +0 -0
  167. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/gridjs/__init__.py +0 -0
  168. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/gridjs/datatable.py +0 -0
  169. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/gridjs/datatable.pyi +0 -0
  170. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/literals.py +0 -0
  171. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/lucide/__init__.py +0 -0
  172. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/lucide/icon.py +0 -0
  173. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/lucide/icon.pyi +0 -0
  174. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/markdown/__init__.py +0 -0
  175. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/markdown/markdown.py +0 -0
  176. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/markdown/markdown.pyi +0 -0
  177. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/moment/__init__.py +0 -0
  178. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/moment/moment.py +0 -0
  179. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/moment/moment.pyi +0 -0
  180. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/next/__init__.py +0 -0
  181. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/next/base.py +0 -0
  182. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/next/base.pyi +0 -0
  183. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/next/image.py +0 -0
  184. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/next/image.pyi +0 -0
  185. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/next/link.py +0 -0
  186. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/next/link.pyi +0 -0
  187. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/next/video.py +0 -0
  188. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/next/video.pyi +0 -0
  189. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/plotly/__init__.py +0 -0
  190. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/plotly/plotly.py +0 -0
  191. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/plotly/plotly.pyi +0 -0
  192. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/props.py +0 -0
  193. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/__init__.py +0 -0
  194. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/__init__.pyi +0 -0
  195. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/primitives/__init__.py +0 -0
  196. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/primitives/__init__.pyi +0 -0
  197. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/primitives/accordion.py +0 -0
  198. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/primitives/accordion.pyi +0 -0
  199. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/primitives/base.py +0 -0
  200. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/primitives/base.pyi +0 -0
  201. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/primitives/drawer.py +0 -0
  202. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/primitives/drawer.pyi +0 -0
  203. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/primitives/form.py +0 -0
  204. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/primitives/form.pyi +0 -0
  205. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/primitives/progress.py +0 -0
  206. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/primitives/progress.pyi +0 -0
  207. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/primitives/slider.py +0 -0
  208. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/primitives/slider.pyi +0 -0
  209. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/__init__.py +0 -0
  210. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/__init__.pyi +0 -0
  211. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/base.py +0 -0
  212. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/base.pyi +0 -0
  213. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/color_mode.py +0 -0
  214. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/color_mode.pyi +0 -0
  215. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/__init__.py +0 -0
  216. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/__init__.pyi +0 -0
  217. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/alert_dialog.py +0 -0
  218. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/alert_dialog.pyi +0 -0
  219. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/aspect_ratio.py +0 -0
  220. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/aspect_ratio.pyi +0 -0
  221. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/avatar.py +0 -0
  222. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/avatar.pyi +0 -0
  223. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/badge.py +0 -0
  224. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/badge.pyi +0 -0
  225. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/button.py +0 -0
  226. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/button.pyi +0 -0
  227. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/callout.py +0 -0
  228. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/callout.pyi +0 -0
  229. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/card.py +0 -0
  230. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/card.pyi +0 -0
  231. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/checkbox.py +0 -0
  232. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/checkbox.pyi +0 -0
  233. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/checkbox_cards.py +0 -0
  234. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/checkbox_cards.pyi +0 -0
  235. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/checkbox_group.py +0 -0
  236. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/checkbox_group.pyi +0 -0
  237. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/context_menu.py +0 -0
  238. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/context_menu.pyi +0 -0
  239. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/data_list.py +0 -0
  240. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/data_list.pyi +0 -0
  241. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/dialog.py +0 -0
  242. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/dialog.pyi +0 -0
  243. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/dropdown_menu.py +0 -0
  244. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/dropdown_menu.pyi +0 -0
  245. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/hover_card.py +0 -0
  246. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/hover_card.pyi +0 -0
  247. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/icon_button.py +0 -0
  248. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/icon_button.pyi +0 -0
  249. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/inset.py +0 -0
  250. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/inset.pyi +0 -0
  251. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/popover.py +0 -0
  252. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/popover.pyi +0 -0
  253. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/progress.py +0 -0
  254. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/progress.pyi +0 -0
  255. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/radio.py +0 -0
  256. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/radio.pyi +0 -0
  257. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/radio_cards.py +0 -0
  258. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/radio_cards.pyi +0 -0
  259. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/radio_group.py +0 -0
  260. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/radio_group.pyi +0 -0
  261. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/scroll_area.py +0 -0
  262. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/scroll_area.pyi +0 -0
  263. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/segmented_control.py +0 -0
  264. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/segmented_control.pyi +0 -0
  265. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/select.py +0 -0
  266. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/select.pyi +0 -0
  267. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/separator.py +0 -0
  268. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/separator.pyi +0 -0
  269. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/skeleton.py +0 -0
  270. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/skeleton.pyi +0 -0
  271. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/slider.py +0 -0
  272. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/slider.pyi +0 -0
  273. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/spinner.py +0 -0
  274. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/spinner.pyi +0 -0
  275. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/switch.py +0 -0
  276. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/switch.pyi +0 -0
  277. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/table.py +0 -0
  278. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/table.pyi +0 -0
  279. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/tabs.py +0 -0
  280. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/tabs.pyi +0 -0
  281. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/text_area.py +0 -0
  282. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/text_area.pyi +0 -0
  283. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/text_field.py +0 -0
  284. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/text_field.pyi +0 -0
  285. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/tooltip.py +0 -0
  286. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/components/tooltip.pyi +0 -0
  287. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/layout/__init__.py +0 -0
  288. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/layout/__init__.pyi +0 -0
  289. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/layout/base.py +0 -0
  290. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/layout/base.pyi +0 -0
  291. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/layout/box.py +0 -0
  292. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/layout/box.pyi +0 -0
  293. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/layout/center.py +0 -0
  294. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/layout/center.pyi +0 -0
  295. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/layout/container.py +0 -0
  296. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/layout/container.pyi +0 -0
  297. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/layout/flex.py +0 -0
  298. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/layout/flex.pyi +0 -0
  299. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/layout/grid.py +0 -0
  300. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/layout/grid.pyi +0 -0
  301. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/layout/list.py +0 -0
  302. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/layout/list.pyi +0 -0
  303. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/layout/section.py +0 -0
  304. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/layout/section.pyi +0 -0
  305. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/layout/spacer.py +0 -0
  306. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/layout/spacer.pyi +0 -0
  307. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/layout/stack.py +0 -0
  308. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/layout/stack.pyi +0 -0
  309. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/typography/__init__.py +0 -0
  310. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/typography/__init__.pyi +0 -0
  311. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/typography/base.py +0 -0
  312. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/typography/blockquote.py +0 -0
  313. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/typography/blockquote.pyi +0 -0
  314. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/typography/code.py +0 -0
  315. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/typography/code.pyi +0 -0
  316. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/typography/heading.py +0 -0
  317. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/typography/heading.pyi +0 -0
  318. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/typography/link.py +0 -0
  319. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/typography/link.pyi +0 -0
  320. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/typography/text.py +0 -0
  321. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/radix/themes/typography/text.pyi +0 -0
  322. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/react_player/__init__.py +0 -0
  323. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/react_player/audio.py +0 -0
  324. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/react_player/audio.pyi +0 -0
  325. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/react_player/react_player.py +0 -0
  326. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/react_player/react_player.pyi +0 -0
  327. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/react_player/video.py +0 -0
  328. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/react_player/video.pyi +0 -0
  329. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/recharts/__init__.py +0 -0
  330. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/recharts/__init__.pyi +0 -0
  331. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/recharts/cartesian.py +0 -0
  332. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/recharts/cartesian.pyi +0 -0
  333. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/recharts/charts.py +0 -0
  334. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/recharts/charts.pyi +0 -0
  335. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/recharts/general.py +0 -0
  336. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/recharts/general.pyi +0 -0
  337. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/recharts/polar.py +0 -0
  338. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/recharts/polar.pyi +0 -0
  339. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/recharts/recharts.py +0 -0
  340. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/recharts/recharts.pyi +0 -0
  341. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/sonner/__init__.py +0 -0
  342. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/sonner/toast.py +0 -0
  343. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/sonner/toast.pyi +0 -0
  344. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/suneditor/__init__.py +0 -0
  345. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/suneditor/editor.py +0 -0
  346. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/suneditor/editor.pyi +0 -0
  347. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/tags/__init__.py +0 -0
  348. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/tags/cond_tag.py +0 -0
  349. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/tags/iter_tag.py +0 -0
  350. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/tags/match_tag.py +0 -0
  351. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/tags/tag.py +0 -0
  352. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/components/tags/tagless.py +0 -0
  353. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/constants/__init__.py +0 -0
  354. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/constants/colors.py +0 -0
  355. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/constants/compiler.py +0 -0
  356. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/constants/config.py +0 -0
  357. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/constants/custom_components.py +0 -0
  358. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/constants/event.py +0 -0
  359. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/constants/route.py +0 -0
  360. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/constants/state.py +0 -0
  361. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/constants/utils.py +0 -0
  362. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/custom_components/__init__.py +0 -0
  363. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/custom_components/custom_components.py +0 -0
  364. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/event.py +0 -0
  365. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/experimental/__init__.py +0 -0
  366. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/experimental/client_state.py +0 -0
  367. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/experimental/hooks.py +0 -0
  368. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/experimental/layout.py +0 -0
  369. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/istate/__init__.py +0 -0
  370. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/istate/data.py +0 -0
  371. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/istate/dynamic.py +0 -0
  372. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/istate/proxy.py +0 -0
  373. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/istate/storage.py +0 -0
  374. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/istate/wrappers.py +0 -0
  375. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/middleware/__init__.py +0 -0
  376. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/middleware/hydrate_middleware.py +0 -0
  377. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/middleware/middleware.py +0 -0
  378. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/page.py +0 -0
  379. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/plugins/__init__.py +0 -0
  380. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/plugins/base.py +0 -0
  381. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/plugins/tailwind_v3.py +0 -0
  382. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/plugins/tailwind_v4.py +0 -0
  383. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/py.typed +0 -0
  384. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/route.py +0 -0
  385. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/style.py +0 -0
  386. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/utils/__init__.py +0 -0
  387. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/utils/build.py +0 -0
  388. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/utils/codespaces.py +0 -0
  389. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/utils/compat.py +0 -0
  390. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/utils/decorator.py +0 -0
  391. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/utils/exceptions.py +0 -0
  392. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/utils/format.py +0 -0
  393. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/utils/imports.py +0 -0
  394. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/utils/lazy_loader.py +0 -0
  395. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/utils/misc.py +0 -0
  396. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/utils/pyi_generator.py +0 -0
  397. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/utils/redir.py +0 -0
  398. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/utils/serializers.py +0 -0
  399. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/utils/types.py +0 -0
  400. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/vars/__init__.py +0 -0
  401. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/vars/base.py +0 -0
  402. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/vars/datetime.py +0 -0
  403. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/vars/dep_tracking.py +0 -0
  404. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/vars/function.py +0 -0
  405. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/vars/number.py +0 -0
  406. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/vars/object.py +0 -0
  407. {reflex-0.7.14a3 → reflex-0.7.14a4}/reflex/vars/sequence.py +0 -0
  408. {reflex-0.7.14a3 → reflex-0.7.14a4}/scripts/hatch_build.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: reflex
3
- Version: 0.7.14a3
3
+ Version: 0.7.14a4
4
4
  Summary: Web apps in pure Python.
5
5
  Project-URL: homepage, https://reflex.dev
6
6
  Project-URL: repository, https://github.com/reflex-dev/reflex
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "reflex"
3
- version = "0.7.14a3"
3
+ version = "0.7.14a4"
4
4
  description = "Web apps in pure Python."
5
5
  license.text = "Apache-2.0"
6
6
  authors = [
@@ -68,7 +68,8 @@ from reflex.components.core.sticky import sticky
68
68
  from reflex.components.core.upload import Upload, get_upload_dir
69
69
  from reflex.components.radix import themes
70
70
  from reflex.components.sonner.toast import toast
71
- from reflex.config import ExecutorType, environment, get_config
71
+ from reflex.config import get_config
72
+ from reflex.environment import ExecutorType, environment
72
73
  from reflex.event import (
73
74
  _EVENT_FIELDS,
74
75
  Event,
@@ -4,7 +4,7 @@ import inspect
4
4
  from pathlib import Path
5
5
 
6
6
  from reflex import constants
7
- from reflex.config import EnvironmentVariables
7
+ from reflex.environment import EnvironmentVariables
8
8
 
9
9
 
10
10
  def asset(
@@ -19,8 +19,9 @@ from reflex.components.component import (
19
19
  CustomComponent,
20
20
  StatefulComponent,
21
21
  )
22
- from reflex.config import environment, get_config
22
+ from reflex.config import get_config
23
23
  from reflex.constants.compiler import PageNames
24
+ from reflex.environment import environment
24
25
  from reflex.state import BaseState
25
26
  from reflex.style import SYSTEM_COLOR_MODE
26
27
  from reflex.utils import console, path_ops
@@ -8,7 +8,7 @@ from typing import Any
8
8
  from reflex.components.component import BaseComponent, Component, ComponentStyle
9
9
  from reflex.components.tags import Tag
10
10
  from reflex.components.tags.tagless import Tagless
11
- from reflex.config import PerformanceMode, environment
11
+ from reflex.environment import PerformanceMode, environment
12
12
  from reflex.utils import console
13
13
  from reflex.utils.decorator import once
14
14
  from reflex.utils.imports import ParsedImportDict
@@ -16,9 +16,9 @@ from reflex.components.radix.themes.components.dialog import (
16
16
  from reflex.components.radix.themes.layout.flex import Flex
17
17
  from reflex.components.radix.themes.typography.text import Text
18
18
  from reflex.components.sonner.toast import ToastProps, toast_ref
19
- from reflex.config import environment
20
19
  from reflex.constants import Dirs, Hooks, Imports
21
20
  from reflex.constants.compiler import CompileVars
21
+ from reflex.environment import environment
22
22
  from reflex.utils.imports import ImportVar
23
23
  from reflex.vars import VarData
24
24
  from reflex.vars.base import LiteralVar, Var
@@ -16,9 +16,9 @@ from reflex.components.component import (
16
16
  from reflex.components.core.cond import cond
17
17
  from reflex.components.el.elements.forms import Input
18
18
  from reflex.components.radix.themes.layout.box import Box
19
- from reflex.config import environment
20
19
  from reflex.constants import Dirs
21
20
  from reflex.constants.compiler import Hooks, Imports
21
+ from reflex.environment import environment
22
22
  from reflex.event import (
23
23
  CallableEventSpec,
24
24
  EventChain,
@@ -0,0 +1,580 @@
1
+ """The Reflex config."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import importlib
6
+ import os
7
+ import sys
8
+ import threading
9
+ import urllib.parse
10
+ from importlib.util import find_spec
11
+ from pathlib import Path
12
+ from types import ModuleType
13
+ from typing import Any, ClassVar
14
+
15
+ import pydantic.v1 as pydantic
16
+
17
+ from reflex import constants
18
+ from reflex.base import Base
19
+ from reflex.constants.base import LogLevel
20
+ from reflex.environment import EnvironmentVariables as EnvironmentVariables
21
+ from reflex.environment import EnvVar as EnvVar
22
+ from reflex.environment import ExistingPath, interpret_env_var_value
23
+ from reflex.environment import env_var as env_var
24
+ from reflex.environment import environment as environment
25
+ from reflex.plugins import Plugin, TailwindV3Plugin, TailwindV4Plugin
26
+ from reflex.utils import console
27
+ from reflex.utils.exceptions import ConfigError
28
+ from reflex.utils.types import true_type_for_pydantic_field
29
+
30
+ try:
31
+ from dotenv import load_dotenv
32
+ except ImportError:
33
+ load_dotenv = None
34
+
35
+
36
+ def _load_dotenv_from_str(env_files: str) -> None:
37
+ if not env_files:
38
+ return
39
+
40
+ if load_dotenv is None:
41
+ console.error(
42
+ """The `python-dotenv` package is required to load environment variables from a file. Run `pip install "python-dotenv>=1.1.0"`."""
43
+ )
44
+ return
45
+
46
+ # load env files in reverse order if they exist
47
+ for env_file_path in [
48
+ Path(p) for s in reversed(env_files.split(os.pathsep)) if (p := s.strip())
49
+ ]:
50
+ if env_file_path.exists():
51
+ load_dotenv(env_file_path, override=True)
52
+
53
+
54
+ def _load_dotenv_from_env():
55
+ """Load environment variables from paths specified in REFLEX_ENV_FILE."""
56
+ show_deprecation = False
57
+ env_env_file = os.environ.get("REFLEX_ENV_FILE")
58
+ if not env_env_file:
59
+ env_env_file = os.environ.get("ENV_FILE")
60
+ if env_env_file:
61
+ show_deprecation = True
62
+ if show_deprecation:
63
+ console.deprecate(
64
+ "Usage of deprecated ENV_FILE env var detected.",
65
+ reason="Prefer `REFLEX_` prefix when setting env vars.",
66
+ deprecation_version="0.7.13",
67
+ removal_version="0.8.0",
68
+ )
69
+ if env_env_file:
70
+ _load_dotenv_from_str(env_env_file)
71
+
72
+
73
+ # Load the env files at import time if they are set in the ENV_FILE environment variable.
74
+ _load_dotenv_from_env()
75
+
76
+
77
+ class DBConfig(Base):
78
+ """Database config."""
79
+
80
+ engine: str
81
+ username: str | None = ""
82
+ password: str | None = ""
83
+ host: str | None = ""
84
+ port: int | None = None
85
+ database: str
86
+
87
+ @classmethod
88
+ def postgresql(
89
+ cls,
90
+ database: str,
91
+ username: str,
92
+ password: str | None = None,
93
+ host: str | None = None,
94
+ port: int | None = 5432,
95
+ ) -> DBConfig:
96
+ """Create an instance with postgresql engine.
97
+
98
+ Args:
99
+ database: Database name.
100
+ username: Database username.
101
+ password: Database password.
102
+ host: Database host.
103
+ port: Database port.
104
+
105
+ Returns:
106
+ DBConfig instance.
107
+ """
108
+ return cls(
109
+ engine="postgresql",
110
+ username=username,
111
+ password=password,
112
+ host=host,
113
+ port=port,
114
+ database=database,
115
+ )
116
+
117
+ @classmethod
118
+ def postgresql_psycopg(
119
+ cls,
120
+ database: str,
121
+ username: str,
122
+ password: str | None = None,
123
+ host: str | None = None,
124
+ port: int | None = 5432,
125
+ ) -> DBConfig:
126
+ """Create an instance with postgresql+psycopg engine.
127
+
128
+ Args:
129
+ database: Database name.
130
+ username: Database username.
131
+ password: Database password.
132
+ host: Database host.
133
+ port: Database port.
134
+
135
+ Returns:
136
+ DBConfig instance.
137
+ """
138
+ return cls(
139
+ engine="postgresql+psycopg",
140
+ username=username,
141
+ password=password,
142
+ host=host,
143
+ port=port,
144
+ database=database,
145
+ )
146
+
147
+ @classmethod
148
+ def sqlite(
149
+ cls,
150
+ database: str,
151
+ ) -> DBConfig:
152
+ """Create an instance with sqlite engine.
153
+
154
+ Args:
155
+ database: Database name.
156
+
157
+ Returns:
158
+ DBConfig instance.
159
+ """
160
+ return cls(
161
+ engine="sqlite",
162
+ database=database,
163
+ )
164
+
165
+ def get_url(self) -> str:
166
+ """Get database URL.
167
+
168
+ Returns:
169
+ The database URL.
170
+ """
171
+ host = (
172
+ f"{self.host}:{self.port}" if self.host and self.port else self.host or ""
173
+ )
174
+ username = urllib.parse.quote_plus(self.username) if self.username else ""
175
+ password = urllib.parse.quote_plus(self.password) if self.password else ""
176
+
177
+ if username:
178
+ path = f"{username}:{password}@{host}" if password else f"{username}@{host}"
179
+ else:
180
+ path = f"{host}"
181
+
182
+ return f"{self.engine}://{path}/{self.database}"
183
+
184
+
185
+ # These vars are not logged because they may contain sensitive information.
186
+ _sensitive_env_vars = {"DB_URL", "ASYNC_DB_URL", "REDIS_URL"}
187
+
188
+
189
+ class Config(Base):
190
+ """The config defines runtime settings for the app.
191
+
192
+ By default, the config is defined in an `rxconfig.py` file in the root of the app.
193
+
194
+ ```python
195
+ # rxconfig.py
196
+ import reflex as rx
197
+
198
+ config = rx.Config(
199
+ app_name="myapp",
200
+ api_url="http://localhost:8000",
201
+ )
202
+ ```
203
+
204
+ Every config value can be overridden by an environment variable with the same name in uppercase.
205
+ For example, `db_url` can be overridden by setting the `DB_URL` environment variable.
206
+
207
+ See the [configuration](https://reflex.dev/docs/getting-started/configuration/) docs for more info.
208
+ """
209
+
210
+ class Config: # pyright: ignore [reportIncompatibleVariableOverride]
211
+ """Pydantic config for the config."""
212
+
213
+ validate_assignment = True
214
+ use_enum_values = False
215
+
216
+ # The name of the app (should match the name of the app directory).
217
+ app_name: str
218
+
219
+ # The path to the app module.
220
+ app_module_import: str | None = None
221
+
222
+ # The log level to use.
223
+ loglevel: constants.LogLevel = constants.LogLevel.DEFAULT
224
+
225
+ # The port to run the frontend on. NOTE: When running in dev mode, the next available port will be used if this is taken.
226
+ frontend_port: int | None = None
227
+
228
+ # The path to run the frontend on. For example, "/app" will run the frontend on http://localhost:3000/app
229
+ frontend_path: str = ""
230
+
231
+ # The port to run the backend on. NOTE: When running in dev mode, the next available port will be used if this is taken.
232
+ backend_port: int | None = None
233
+
234
+ # The backend url the frontend will connect to. This must be updated if the backend is hosted elsewhere, or in production.
235
+ api_url: str = f"http://localhost:{constants.DefaultPorts.BACKEND_PORT}"
236
+
237
+ # The url the frontend will be hosted on.
238
+ deploy_url: str | None = f"http://localhost:{constants.DefaultPorts.FRONTEND_PORT}"
239
+
240
+ # The url the backend will be hosted on.
241
+ backend_host: str = "0.0.0.0"
242
+
243
+ # The database url used by rx.Model.
244
+ db_url: str | None = "sqlite:///reflex.db"
245
+
246
+ # The async database url used by rx.Model.
247
+ async_db_url: str | None = None
248
+
249
+ # The redis url
250
+ redis_url: str | None = None
251
+
252
+ # Telemetry opt-in.
253
+ telemetry_enabled: bool = True
254
+
255
+ # The bun path
256
+ bun_path: ExistingPath = constants.Bun.DEFAULT_PATH
257
+
258
+ # Timeout to do a production build of a frontend page.
259
+ static_page_generation_timeout: int = 60
260
+
261
+ # List of origins that are allowed to connect to the backend API.
262
+ cors_allowed_origins: list[str] = ["*"]
263
+
264
+ # Tailwind config.
265
+ tailwind: dict[str, Any] | None = {"plugins": ["@tailwindcss/typography"]}
266
+
267
+ # DEPRECATED. Timeout when launching the gunicorn server.
268
+ timeout: int | None = None
269
+
270
+ # Whether to enable or disable nextJS gzip compression.
271
+ next_compression: bool = True
272
+
273
+ # Whether to enable or disable NextJS dev indicator.
274
+ next_dev_indicators: bool = False
275
+
276
+ # Whether to use React strict mode in nextJS
277
+ react_strict_mode: bool = True
278
+
279
+ # Additional frontend packages to install.
280
+ frontend_packages: list[str] = []
281
+
282
+ # DEPRECATED. The worker class used in production mode
283
+ gunicorn_worker_class: str = "uvicorn.workers.UvicornH11Worker"
284
+
285
+ # DEPRECATED. Number of gunicorn workers from user
286
+ gunicorn_workers: int | None = None
287
+
288
+ # DEPRECATED. Number of requests before a worker is restarted; set to 0 to disable
289
+ gunicorn_max_requests: int | None = None
290
+
291
+ # DEPRECATED. Variance limit for max requests; gunicorn only
292
+ gunicorn_max_requests_jitter: int | None = None
293
+
294
+ # Indicate which type of state manager to use
295
+ state_manager_mode: constants.StateManagerMode = constants.StateManagerMode.DISK
296
+
297
+ # Maximum expiration lock time for redis state manager
298
+ redis_lock_expiration: int = constants.Expiration.LOCK
299
+
300
+ # Maximum lock time before warning for redis state manager.
301
+ redis_lock_warning_threshold: int = constants.Expiration.LOCK_WARNING_THRESHOLD
302
+
303
+ # Token expiration time for redis state manager
304
+ redis_token_expiration: int = constants.Expiration.TOKEN
305
+
306
+ # Attributes that were explicitly set by the user.
307
+ _non_default_attributes: set[str] = pydantic.PrivateAttr(set())
308
+
309
+ # Path to file containing key-values pairs to override in the environment; Dotenv format.
310
+ env_file: str | None = None
311
+
312
+ # Whether to automatically create setters for state base vars
313
+ state_auto_setters: bool = True
314
+
315
+ # Whether to display the sticky "Built with Reflex" badge on all pages.
316
+ show_built_with_reflex: bool | None = None
317
+
318
+ # Whether the app is running in the reflex cloud environment.
319
+ is_reflex_cloud: bool = False
320
+
321
+ # Extra overlay function to run after the app is built. Formatted such that `from path_0.path_1... import path[-1]`, and calling it with no arguments would work. For example, "reflex.components.moment.moment".
322
+ extra_overlay_function: str | None = None
323
+
324
+ # List of plugins to use in the app.
325
+ plugins: list[Plugin] = []
326
+
327
+ _prefixes: ClassVar[list[str]] = ["REFLEX_"]
328
+
329
+ def __init__(self, *args, **kwargs):
330
+ """Initialize the config values.
331
+
332
+ Args:
333
+ *args: The args to pass to the Pydantic init method.
334
+ **kwargs: The kwargs to pass to the Pydantic init method.
335
+
336
+ Raises:
337
+ ConfigError: If some values in the config are invalid.
338
+ """
339
+ super().__init__(*args, **kwargs)
340
+
341
+ # Clean up this code when we remove plain envvar in 0.8.0
342
+ show_deprecation = False
343
+ env_loglevel = os.environ.get("REFLEX_LOGLEVEL")
344
+ if not env_loglevel:
345
+ env_loglevel = os.environ.get("LOGLEVEL")
346
+ if env_loglevel:
347
+ show_deprecation = True
348
+ if env_loglevel is not None:
349
+ env_loglevel = LogLevel(env_loglevel.lower())
350
+ if env_loglevel or self.loglevel != LogLevel.DEFAULT:
351
+ console.set_log_level(env_loglevel or self.loglevel)
352
+
353
+ if show_deprecation:
354
+ console.deprecate(
355
+ "Usage of deprecated LOGLEVEL env var detected.",
356
+ reason="Prefer `REFLEX_` prefix when setting env vars.",
357
+ deprecation_version="0.7.13",
358
+ removal_version="0.8.0",
359
+ )
360
+
361
+ # Update the config from environment variables.
362
+ env_kwargs = self.update_from_env()
363
+ for key, env_value in env_kwargs.items():
364
+ setattr(self, key, env_value)
365
+
366
+ # Update default URLs if ports were set
367
+ kwargs.update(env_kwargs)
368
+ self._non_default_attributes.update(kwargs)
369
+ self._replace_defaults(**kwargs)
370
+
371
+ if self.tailwind is not None and not any(
372
+ isinstance(plugin, (TailwindV3Plugin, TailwindV4Plugin))
373
+ for plugin in self.plugins
374
+ ):
375
+ console.deprecate(
376
+ "Inferring tailwind usage",
377
+ reason="""
378
+
379
+ If you are using tailwind, add `rx.plugins.TailwindV3Plugin()` to the `plugins=[]` in rxconfig.py.
380
+
381
+ If you are not using tailwind, set `tailwind` to `None` in rxconfig.py.""",
382
+ deprecation_version="0.7.13",
383
+ removal_version="0.8.0",
384
+ dedupe=True,
385
+ )
386
+ self.plugins.append(TailwindV3Plugin())
387
+
388
+ if (
389
+ self.state_manager_mode == constants.StateManagerMode.REDIS
390
+ and not self.redis_url
391
+ ):
392
+ msg = f"{self._prefixes[0]}REDIS_URL is required when using the redis state manager."
393
+ raise ConfigError(msg)
394
+
395
+ @property
396
+ def app_module(self) -> ModuleType | None:
397
+ """Return the app module if `app_module_import` is set.
398
+
399
+ Returns:
400
+ The app module.
401
+ """
402
+ return (
403
+ importlib.import_module(self.app_module_import)
404
+ if self.app_module_import
405
+ else None
406
+ )
407
+
408
+ @property
409
+ def module(self) -> str:
410
+ """Get the module name of the app.
411
+
412
+ Returns:
413
+ The module name.
414
+ """
415
+ if self.app_module_import is not None:
416
+ return self.app_module_import
417
+ return self.app_name + "." + self.app_name
418
+
419
+ def update_from_env(self) -> dict[str, Any]:
420
+ """Update the config values based on set environment variables.
421
+ If there is a set env_file, it is loaded first.
422
+
423
+ Returns:
424
+ The updated config values.
425
+ """
426
+ if self.env_file:
427
+ _load_dotenv_from_str(self.env_file)
428
+
429
+ updated_values = {}
430
+ # Iterate over the fields.
431
+ for key, field in self.__fields__.items():
432
+ # The env var name is the key in uppercase.
433
+ for prefix in self._prefixes:
434
+ if environment_variable := os.environ.get(f"{prefix}{key.upper()}"):
435
+ break
436
+ else:
437
+ # Default to non-prefixed env var if other are not found.
438
+ if environment_variable := os.environ.get(key.upper()):
439
+ console.deprecate(
440
+ f"Usage of deprecated {key.upper()} env var detected.",
441
+ reason=f"Prefer `{self._prefixes[0]}` prefix when setting env vars.",
442
+ deprecation_version="0.7.13",
443
+ removal_version="0.8.0",
444
+ )
445
+
446
+ # If the env var is set, override the config value.
447
+ if environment_variable and environment_variable.strip():
448
+ # Interpret the value.
449
+ value = interpret_env_var_value(
450
+ environment_variable,
451
+ true_type_for_pydantic_field(field),
452
+ field.name,
453
+ )
454
+
455
+ # Set the value.
456
+ updated_values[key] = value
457
+
458
+ if key.upper() in _sensitive_env_vars:
459
+ environment_variable = "***"
460
+
461
+ if value != getattr(self, key):
462
+ console.debug(
463
+ f"Overriding config value {key} with env var {key.upper()}={environment_variable}",
464
+ dedupe=True,
465
+ )
466
+ return updated_values
467
+
468
+ def get_event_namespace(self) -> str:
469
+ """Get the path that the backend Websocket server lists on.
470
+
471
+ Returns:
472
+ The namespace for websocket.
473
+ """
474
+ event_url = constants.Endpoint.EVENT.get_url()
475
+ return urllib.parse.urlsplit(event_url).path
476
+
477
+ def _replace_defaults(self, **kwargs):
478
+ """Replace formatted defaults when the caller provides updates.
479
+
480
+ Args:
481
+ **kwargs: The kwargs passed to the config or from the env.
482
+ """
483
+ if "api_url" not in self._non_default_attributes and "backend_port" in kwargs:
484
+ self.api_url = f"http://localhost:{kwargs['backend_port']}"
485
+
486
+ if (
487
+ "deploy_url" not in self._non_default_attributes
488
+ and "frontend_port" in kwargs
489
+ ):
490
+ self.deploy_url = f"http://localhost:{kwargs['frontend_port']}"
491
+
492
+ if "api_url" not in self._non_default_attributes:
493
+ # If running in Github Codespaces, override API_URL
494
+ codespace_name = os.getenv("CODESPACE_NAME")
495
+ github_codespaces_port_forwarding_domain = os.getenv(
496
+ "GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN"
497
+ )
498
+ # If running on Replit.com interactively, override API_URL to ensure we maintain the backend_port
499
+ replit_dev_domain = os.getenv("REPLIT_DEV_DOMAIN")
500
+ backend_port = kwargs.get("backend_port", self.backend_port)
501
+ if codespace_name and github_codespaces_port_forwarding_domain:
502
+ self.api_url = (
503
+ f"https://{codespace_name}-{kwargs.get('backend_port', self.backend_port)}"
504
+ f".{github_codespaces_port_forwarding_domain}"
505
+ )
506
+ elif replit_dev_domain and backend_port:
507
+ self.api_url = f"https://{replit_dev_domain}:{backend_port}"
508
+
509
+ def _set_persistent(self, **kwargs):
510
+ """Set values in this config and in the environment so they persist into subprocess.
511
+
512
+ Args:
513
+ **kwargs: The kwargs passed to the config.
514
+ """
515
+ for key, value in kwargs.items():
516
+ if value is not None:
517
+ os.environ[self._prefixes[0] + key.upper()] = str(value)
518
+ setattr(self, key, value)
519
+ self._non_default_attributes.update(kwargs)
520
+ self._replace_defaults(**kwargs)
521
+
522
+
523
+ def _get_config() -> Config:
524
+ """Get the app config.
525
+
526
+ Returns:
527
+ The app config.
528
+ """
529
+ # only import the module if it exists. If a module spec exists then
530
+ # the module exists.
531
+ spec = find_spec(constants.Config.MODULE)
532
+ if not spec:
533
+ # we need this condition to ensure that a ModuleNotFound error is not thrown when
534
+ # running unit/integration tests or during `reflex init`.
535
+ return Config(app_name="")
536
+ rxconfig = importlib.import_module(constants.Config.MODULE)
537
+ return rxconfig.config
538
+
539
+
540
+ # Protect sys.path from concurrent modification
541
+ _config_lock = threading.RLock()
542
+
543
+
544
+ def get_config(reload: bool = False) -> Config:
545
+ """Get the app config.
546
+
547
+ Args:
548
+ reload: Re-import the rxconfig module from disk
549
+
550
+ Returns:
551
+ The app config.
552
+ """
553
+ cached_rxconfig = sys.modules.get(constants.Config.MODULE, None)
554
+ if cached_rxconfig is not None:
555
+ if reload:
556
+ # Remove any cached module when `reload` is requested.
557
+ del sys.modules[constants.Config.MODULE]
558
+ else:
559
+ return cached_rxconfig.config
560
+
561
+ with _config_lock:
562
+ orig_sys_path = sys.path.copy()
563
+ sys.path.clear()
564
+ sys.path.append(str(Path.cwd()))
565
+ try:
566
+ # Try to import the module with only the current directory in the path.
567
+ return _get_config()
568
+ except Exception:
569
+ # If the module import fails, try to import with the original sys.path.
570
+ sys.path.extend(orig_sys_path)
571
+ return _get_config()
572
+ finally:
573
+ # Find any entries added to sys.path by rxconfig.py itself.
574
+ extra_paths = [
575
+ p for p in sys.path if p not in orig_sys_path and p != str(Path.cwd())
576
+ ]
577
+ # Restore the original sys.path.
578
+ sys.path.clear()
579
+ sys.path.extend(extra_paths)
580
+ sys.path.extend(orig_sys_path)
@@ -147,7 +147,7 @@ class Templates(SimpleNamespace):
147
147
  Returns:
148
148
  The URL to redirect to reflex.build.
149
149
  """
150
- from reflex.config import environment
150
+ from reflex.environment import environment
151
151
 
152
152
  return (
153
153
  environment.REFLEX_BUILD_FRONTEND.get()
@@ -162,7 +162,7 @@ class Templates(SimpleNamespace):
162
162
  Returns:
163
163
  The URL to poll waiting for the user to select a generation.
164
164
  """
165
- from reflex.config import environment
165
+ from reflex.environment import environment
166
166
 
167
167
  return environment.REFLEX_BUILD_BACKEND.get() + "/api/init/{reflex_init_token}"
168
168
 
@@ -174,7 +174,7 @@ class Templates(SimpleNamespace):
174
174
  Returns:
175
175
  The URL to fetch the generation's reflex code.
176
176
  """
177
- from reflex.config import environment
177
+ from reflex.environment import environment
178
178
 
179
179
  return (
180
180
  environment.REFLEX_BUILD_BACKEND.get()