reflex 0.7.14a1__tar.gz → 0.7.14a3__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 (407) hide show
  1. {reflex-0.7.14a1 → reflex-0.7.14a3}/PKG-INFO +1 -1
  2. {reflex-0.7.14a1 → reflex-0.7.14a3}/pyproject.toml +1 -1
  3. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/component.py +19 -1
  4. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/el/elements/forms.py +11 -11
  5. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/el/elements/forms.pyi +14 -14
  6. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/text_area.pyi +1 -1
  7. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/config.py +6 -0
  8. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/utils/console.py +61 -0
  9. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/utils/exec.py +102 -27
  10. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/utils/telemetry.py +16 -21
  11. reflex-0.7.14a1/reflex/experimental/layout.pyi +0 -814
  12. {reflex-0.7.14a1 → reflex-0.7.14a3}/.gitignore +0 -0
  13. {reflex-0.7.14a1 → reflex-0.7.14a3}/LICENSE +0 -0
  14. {reflex-0.7.14a1 → reflex-0.7.14a3}/README.md +0 -0
  15. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/.templates/apps/blank/assets/favicon.ico +0 -0
  16. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/.templates/apps/blank/code/__init__.py +0 -0
  17. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/.templates/apps/blank/code/blank.py +0 -0
  18. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/.templates/jinja/app/rxconfig.py.jinja2 +0 -0
  19. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/.templates/jinja/custom_components/README.md.jinja2 +0 -0
  20. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/.templates/jinja/custom_components/__init__.py.jinja2 +0 -0
  21. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/.templates/jinja/custom_components/demo_app.py.jinja2 +0 -0
  22. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/.templates/jinja/custom_components/pyproject.toml.jinja2 +0 -0
  23. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/.templates/jinja/custom_components/src.py.jinja2 +0 -0
  24. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/.templates/jinja/web/package.json.jinja2 +0 -0
  25. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/.templates/jinja/web/pages/_app.js.jinja2 +0 -0
  26. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/.templates/jinja/web/pages/_document.js.jinja2 +0 -0
  27. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/.templates/jinja/web/pages/base_page.js.jinja2 +0 -0
  28. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/.templates/jinja/web/pages/component.js.jinja2 +0 -0
  29. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/.templates/jinja/web/pages/custom_component.js.jinja2 +0 -0
  30. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/.templates/jinja/web/pages/index.js.jinja2 +0 -0
  31. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/.templates/jinja/web/pages/macros.js.jinja2 +0 -0
  32. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/.templates/jinja/web/pages/stateful_component.js.jinja2 +0 -0
  33. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/.templates/jinja/web/pages/stateful_components.js.jinja2 +0 -0
  34. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/.templates/jinja/web/pages/utils.js.jinja2 +0 -0
  35. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/.templates/jinja/web/styles/styles.css.jinja2 +0 -0
  36. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/.templates/jinja/web/utils/context.js.jinja2 +0 -0
  37. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/.templates/jinja/web/utils/theme.js.jinja2 +0 -0
  38. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/.templates/web/.gitignore +0 -0
  39. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +0 -0
  40. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/.templates/web/components/shiki/code.js +0 -0
  41. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/.templates/web/jsconfig.json +0 -0
  42. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/.templates/web/next.config.js +0 -0
  43. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/.templates/web/postcss.config.js +0 -0
  44. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/.templates/web/utils/client_side_routing.js +0 -0
  45. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/.templates/web/utils/helpers/dataeditor.js +0 -0
  46. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/.templates/web/utils/helpers/debounce.js +0 -0
  47. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/.templates/web/utils/helpers/paste.js +0 -0
  48. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/.templates/web/utils/helpers/range.js +0 -0
  49. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/.templates/web/utils/helpers/throttle.js +0 -0
  50. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/.templates/web/utils/state.js +0 -0
  51. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/__init__.py +0 -0
  52. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/__init__.pyi +0 -0
  53. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/__main__.py +0 -0
  54. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/admin.py +0 -0
  55. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/app.py +0 -0
  56. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/app_mixins/__init__.py +0 -0
  57. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/app_mixins/lifespan.py +0 -0
  58. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/app_mixins/middleware.py +0 -0
  59. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/app_mixins/mixin.py +0 -0
  60. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/assets.py +0 -0
  61. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/base.py +0 -0
  62. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/compiler/__init__.py +0 -0
  63. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/compiler/compiler.py +0 -0
  64. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/compiler/templates.py +0 -0
  65. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/compiler/utils.py +0 -0
  66. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/__init__.py +0 -0
  67. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/__init__.pyi +0 -0
  68. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/base/__init__.py +0 -0
  69. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/base/__init__.pyi +0 -0
  70. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/base/app_wrap.py +0 -0
  71. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/base/app_wrap.pyi +0 -0
  72. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/base/bare.py +0 -0
  73. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/base/body.py +0 -0
  74. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/base/body.pyi +0 -0
  75. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/base/document.py +0 -0
  76. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/base/document.pyi +0 -0
  77. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/base/error_boundary.py +0 -0
  78. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/base/error_boundary.pyi +0 -0
  79. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/base/fragment.py +0 -0
  80. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/base/fragment.pyi +0 -0
  81. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/base/head.py +0 -0
  82. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/base/head.pyi +0 -0
  83. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/base/link.py +0 -0
  84. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/base/link.pyi +0 -0
  85. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/base/meta.py +0 -0
  86. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/base/meta.pyi +0 -0
  87. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/base/script.py +0 -0
  88. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/base/script.pyi +0 -0
  89. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/base/strict_mode.py +0 -0
  90. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/base/strict_mode.pyi +0 -0
  91. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/core/__init__.py +0 -0
  92. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/core/__init__.pyi +0 -0
  93. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/core/auto_scroll.py +0 -0
  94. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/core/auto_scroll.pyi +0 -0
  95. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/core/banner.py +0 -0
  96. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/core/banner.pyi +0 -0
  97. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/core/breakpoints.py +0 -0
  98. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/core/client_side_routing.py +0 -0
  99. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/core/client_side_routing.pyi +0 -0
  100. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/core/clipboard.py +0 -0
  101. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/core/clipboard.pyi +0 -0
  102. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/core/colors.py +0 -0
  103. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/core/cond.py +0 -0
  104. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/core/debounce.py +0 -0
  105. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/core/debounce.pyi +0 -0
  106. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/core/foreach.py +0 -0
  107. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/core/html.py +0 -0
  108. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/core/html.pyi +0 -0
  109. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/core/layout/__init__.py +0 -0
  110. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/core/match.py +0 -0
  111. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/core/responsive.py +0 -0
  112. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/core/sticky.py +0 -0
  113. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/core/sticky.pyi +0 -0
  114. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/core/upload.py +0 -0
  115. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/core/upload.pyi +0 -0
  116. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/datadisplay/__init__.py +0 -0
  117. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/datadisplay/__init__.pyi +0 -0
  118. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/datadisplay/code.py +0 -0
  119. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/datadisplay/code.pyi +0 -0
  120. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/datadisplay/dataeditor.py +0 -0
  121. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/datadisplay/dataeditor.pyi +0 -0
  122. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/datadisplay/logo.py +0 -0
  123. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/datadisplay/shiki_code_block.py +0 -0
  124. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/datadisplay/shiki_code_block.pyi +0 -0
  125. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/dynamic.py +0 -0
  126. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/el/__init__.py +0 -0
  127. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/el/__init__.pyi +0 -0
  128. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/el/constants/__init__.py +0 -0
  129. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/el/constants/html.py +0 -0
  130. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/el/constants/react.py +0 -0
  131. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/el/constants/reflex.py +0 -0
  132. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/el/element.py +0 -0
  133. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/el/element.pyi +0 -0
  134. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/el/elements/__init__.py +0 -0
  135. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/el/elements/__init__.pyi +0 -0
  136. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/el/elements/base.py +0 -0
  137. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/el/elements/base.pyi +0 -0
  138. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/el/elements/inline.py +0 -0
  139. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/el/elements/inline.pyi +0 -0
  140. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/el/elements/media.py +0 -0
  141. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/el/elements/media.pyi +0 -0
  142. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/el/elements/metadata.py +0 -0
  143. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/el/elements/metadata.pyi +0 -0
  144. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/el/elements/other.py +0 -0
  145. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/el/elements/other.pyi +0 -0
  146. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/el/elements/scripts.py +0 -0
  147. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/el/elements/scripts.pyi +0 -0
  148. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/el/elements/sectioning.py +0 -0
  149. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/el/elements/sectioning.pyi +0 -0
  150. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/el/elements/tables.py +0 -0
  151. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/el/elements/tables.pyi +0 -0
  152. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/el/elements/typography.py +0 -0
  153. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/el/elements/typography.pyi +0 -0
  154. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/gridjs/__init__.py +0 -0
  155. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/gridjs/datatable.py +0 -0
  156. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/gridjs/datatable.pyi +0 -0
  157. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/literals.py +0 -0
  158. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/lucide/__init__.py +0 -0
  159. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/lucide/icon.py +0 -0
  160. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/lucide/icon.pyi +0 -0
  161. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/markdown/__init__.py +0 -0
  162. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/markdown/markdown.py +0 -0
  163. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/markdown/markdown.pyi +0 -0
  164. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/moment/__init__.py +0 -0
  165. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/moment/moment.py +0 -0
  166. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/moment/moment.pyi +0 -0
  167. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/next/__init__.py +0 -0
  168. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/next/base.py +0 -0
  169. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/next/base.pyi +0 -0
  170. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/next/image.py +0 -0
  171. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/next/image.pyi +0 -0
  172. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/next/link.py +0 -0
  173. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/next/link.pyi +0 -0
  174. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/next/video.py +0 -0
  175. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/next/video.pyi +0 -0
  176. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/plotly/__init__.py +0 -0
  177. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/plotly/plotly.py +0 -0
  178. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/plotly/plotly.pyi +0 -0
  179. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/props.py +0 -0
  180. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/__init__.py +0 -0
  181. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/__init__.pyi +0 -0
  182. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/primitives/__init__.py +0 -0
  183. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/primitives/__init__.pyi +0 -0
  184. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/primitives/accordion.py +0 -0
  185. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/primitives/accordion.pyi +0 -0
  186. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/primitives/base.py +0 -0
  187. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/primitives/base.pyi +0 -0
  188. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/primitives/drawer.py +0 -0
  189. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/primitives/drawer.pyi +0 -0
  190. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/primitives/form.py +0 -0
  191. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/primitives/form.pyi +0 -0
  192. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/primitives/progress.py +0 -0
  193. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/primitives/progress.pyi +0 -0
  194. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/primitives/slider.py +0 -0
  195. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/primitives/slider.pyi +0 -0
  196. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/__init__.py +0 -0
  197. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/__init__.pyi +0 -0
  198. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/base.py +0 -0
  199. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/base.pyi +0 -0
  200. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/color_mode.py +0 -0
  201. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/color_mode.pyi +0 -0
  202. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/__init__.py +0 -0
  203. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/__init__.pyi +0 -0
  204. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/alert_dialog.py +0 -0
  205. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/alert_dialog.pyi +0 -0
  206. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/aspect_ratio.py +0 -0
  207. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/aspect_ratio.pyi +0 -0
  208. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/avatar.py +0 -0
  209. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/avatar.pyi +0 -0
  210. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/badge.py +0 -0
  211. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/badge.pyi +0 -0
  212. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/button.py +0 -0
  213. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/button.pyi +0 -0
  214. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/callout.py +0 -0
  215. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/callout.pyi +0 -0
  216. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/card.py +0 -0
  217. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/card.pyi +0 -0
  218. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/checkbox.py +0 -0
  219. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/checkbox.pyi +0 -0
  220. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/checkbox_cards.py +0 -0
  221. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/checkbox_cards.pyi +0 -0
  222. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/checkbox_group.py +0 -0
  223. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/checkbox_group.pyi +0 -0
  224. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/context_menu.py +0 -0
  225. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/context_menu.pyi +0 -0
  226. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/data_list.py +0 -0
  227. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/data_list.pyi +0 -0
  228. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/dialog.py +0 -0
  229. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/dialog.pyi +0 -0
  230. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/dropdown_menu.py +0 -0
  231. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/dropdown_menu.pyi +0 -0
  232. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/hover_card.py +0 -0
  233. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/hover_card.pyi +0 -0
  234. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/icon_button.py +0 -0
  235. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/icon_button.pyi +0 -0
  236. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/inset.py +0 -0
  237. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/inset.pyi +0 -0
  238. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/popover.py +0 -0
  239. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/popover.pyi +0 -0
  240. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/progress.py +0 -0
  241. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/progress.pyi +0 -0
  242. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/radio.py +0 -0
  243. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/radio.pyi +0 -0
  244. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/radio_cards.py +0 -0
  245. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/radio_cards.pyi +0 -0
  246. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/radio_group.py +0 -0
  247. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/radio_group.pyi +0 -0
  248. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/scroll_area.py +0 -0
  249. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/scroll_area.pyi +0 -0
  250. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/segmented_control.py +0 -0
  251. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/segmented_control.pyi +0 -0
  252. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/select.py +0 -0
  253. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/select.pyi +0 -0
  254. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/separator.py +0 -0
  255. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/separator.pyi +0 -0
  256. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/skeleton.py +0 -0
  257. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/skeleton.pyi +0 -0
  258. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/slider.py +0 -0
  259. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/slider.pyi +0 -0
  260. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/spinner.py +0 -0
  261. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/spinner.pyi +0 -0
  262. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/switch.py +0 -0
  263. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/switch.pyi +0 -0
  264. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/table.py +0 -0
  265. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/table.pyi +0 -0
  266. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/tabs.py +0 -0
  267. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/tabs.pyi +0 -0
  268. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/text_area.py +0 -0
  269. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/text_field.py +0 -0
  270. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/text_field.pyi +0 -0
  271. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/tooltip.py +0 -0
  272. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/components/tooltip.pyi +0 -0
  273. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/layout/__init__.py +0 -0
  274. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/layout/__init__.pyi +0 -0
  275. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/layout/base.py +0 -0
  276. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/layout/base.pyi +0 -0
  277. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/layout/box.py +0 -0
  278. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/layout/box.pyi +0 -0
  279. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/layout/center.py +0 -0
  280. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/layout/center.pyi +0 -0
  281. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/layout/container.py +0 -0
  282. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/layout/container.pyi +0 -0
  283. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/layout/flex.py +0 -0
  284. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/layout/flex.pyi +0 -0
  285. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/layout/grid.py +0 -0
  286. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/layout/grid.pyi +0 -0
  287. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/layout/list.py +0 -0
  288. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/layout/list.pyi +0 -0
  289. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/layout/section.py +0 -0
  290. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/layout/section.pyi +0 -0
  291. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/layout/spacer.py +0 -0
  292. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/layout/spacer.pyi +0 -0
  293. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/layout/stack.py +0 -0
  294. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/layout/stack.pyi +0 -0
  295. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/typography/__init__.py +0 -0
  296. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/typography/__init__.pyi +0 -0
  297. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/typography/base.py +0 -0
  298. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/typography/blockquote.py +0 -0
  299. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/typography/blockquote.pyi +0 -0
  300. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/typography/code.py +0 -0
  301. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/typography/code.pyi +0 -0
  302. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/typography/heading.py +0 -0
  303. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/typography/heading.pyi +0 -0
  304. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/typography/link.py +0 -0
  305. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/typography/link.pyi +0 -0
  306. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/typography/text.py +0 -0
  307. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/radix/themes/typography/text.pyi +0 -0
  308. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/react_player/__init__.py +0 -0
  309. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/react_player/audio.py +0 -0
  310. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/react_player/audio.pyi +0 -0
  311. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/react_player/react_player.py +0 -0
  312. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/react_player/react_player.pyi +0 -0
  313. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/react_player/video.py +0 -0
  314. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/react_player/video.pyi +0 -0
  315. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/recharts/__init__.py +0 -0
  316. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/recharts/__init__.pyi +0 -0
  317. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/recharts/cartesian.py +0 -0
  318. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/recharts/cartesian.pyi +0 -0
  319. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/recharts/charts.py +0 -0
  320. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/recharts/charts.pyi +0 -0
  321. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/recharts/general.py +0 -0
  322. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/recharts/general.pyi +0 -0
  323. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/recharts/polar.py +0 -0
  324. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/recharts/polar.pyi +0 -0
  325. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/recharts/recharts.py +0 -0
  326. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/recharts/recharts.pyi +0 -0
  327. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/sonner/__init__.py +0 -0
  328. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/sonner/toast.py +0 -0
  329. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/sonner/toast.pyi +0 -0
  330. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/suneditor/__init__.py +0 -0
  331. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/suneditor/editor.py +0 -0
  332. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/suneditor/editor.pyi +0 -0
  333. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/tags/__init__.py +0 -0
  334. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/tags/cond_tag.py +0 -0
  335. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/tags/iter_tag.py +0 -0
  336. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/tags/match_tag.py +0 -0
  337. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/tags/tag.py +0 -0
  338. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/components/tags/tagless.py +0 -0
  339. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/constants/__init__.py +0 -0
  340. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/constants/base.py +0 -0
  341. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/constants/colors.py +0 -0
  342. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/constants/compiler.py +0 -0
  343. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/constants/config.py +0 -0
  344. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/constants/custom_components.py +0 -0
  345. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/constants/event.py +0 -0
  346. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/constants/installer.py +0 -0
  347. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/constants/route.py +0 -0
  348. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/constants/state.py +0 -0
  349. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/constants/utils.py +0 -0
  350. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/custom_components/__init__.py +0 -0
  351. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/custom_components/custom_components.py +0 -0
  352. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/event.py +0 -0
  353. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/experimental/__init__.py +0 -0
  354. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/experimental/client_state.py +0 -0
  355. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/experimental/hooks.py +0 -0
  356. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/experimental/layout.py +0 -0
  357. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/istate/__init__.py +0 -0
  358. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/istate/data.py +0 -0
  359. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/istate/dynamic.py +0 -0
  360. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/istate/manager.py +0 -0
  361. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/istate/proxy.py +0 -0
  362. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/istate/storage.py +0 -0
  363. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/istate/wrappers.py +0 -0
  364. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/middleware/__init__.py +0 -0
  365. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/middleware/hydrate_middleware.py +0 -0
  366. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/middleware/middleware.py +0 -0
  367. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/model.py +0 -0
  368. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/page.py +0 -0
  369. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/plugins/__init__.py +0 -0
  370. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/plugins/base.py +0 -0
  371. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/plugins/tailwind_v3.py +0 -0
  372. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/plugins/tailwind_v4.py +0 -0
  373. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/py.typed +0 -0
  374. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/reflex.py +0 -0
  375. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/route.py +0 -0
  376. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/state.py +0 -0
  377. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/style.py +0 -0
  378. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/testing.py +0 -0
  379. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/utils/__init__.py +0 -0
  380. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/utils/build.py +0 -0
  381. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/utils/codespaces.py +0 -0
  382. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/utils/compat.py +0 -0
  383. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/utils/decorator.py +0 -0
  384. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/utils/exceptions.py +0 -0
  385. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/utils/export.py +0 -0
  386. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/utils/format.py +0 -0
  387. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/utils/imports.py +0 -0
  388. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/utils/lazy_loader.py +0 -0
  389. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/utils/misc.py +0 -0
  390. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/utils/net.py +0 -0
  391. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/utils/path_ops.py +0 -0
  392. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/utils/prerequisites.py +0 -0
  393. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/utils/processes.py +0 -0
  394. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/utils/pyi_generator.py +0 -0
  395. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/utils/redir.py +0 -0
  396. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/utils/registry.py +0 -0
  397. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/utils/serializers.py +0 -0
  398. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/utils/types.py +0 -0
  399. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/vars/__init__.py +0 -0
  400. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/vars/base.py +0 -0
  401. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/vars/datetime.py +0 -0
  402. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/vars/dep_tracking.py +0 -0
  403. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/vars/function.py +0 -0
  404. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/vars/number.py +0 -0
  405. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/vars/object.py +0 -0
  406. {reflex-0.7.14a1 → reflex-0.7.14a3}/reflex/vars/sequence.py +0 -0
  407. {reflex-0.7.14a1 → reflex-0.7.14a3}/scripts/hatch_build.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: reflex
3
- Version: 0.7.14a1
3
+ Version: 0.7.14a3
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.14a1"
3
+ version = "0.7.14a3"
4
4
  description = "Web apps in pure Python."
5
5
  license.text = "Apache-2.0"
6
6
  authors = [
@@ -2194,7 +2194,25 @@ class CustomComponent(Component):
2194
2194
  Returns:
2195
2195
  The code to render the component.
2196
2196
  """
2197
- return self.component_fn(*self.get_prop_vars())
2197
+ component = self.component_fn(*self.get_prop_vars())
2198
+
2199
+ try:
2200
+ from reflex.utils.prerequisites import get_and_validate_app
2201
+
2202
+ style = get_and_validate_app().app.style
2203
+ except Exception:
2204
+ style = {}
2205
+
2206
+ component._add_style_recursive(style)
2207
+ return component
2208
+
2209
+ def _get_all_app_wrap_components(self) -> dict[tuple[int, str], Component]:
2210
+ """Get the app wrap components for the custom component.
2211
+
2212
+ Returns:
2213
+ The app wrap components.
2214
+ """
2215
+ return self.get_component()._get_all_app_wrap_components()
2198
2216
 
2199
2217
 
2200
2218
  CUSTOM_COMPONENTS: dict[str, CustomComponent] = {}
@@ -384,7 +384,7 @@ class BaseInput(BaseHTML):
384
384
  required: Var[bool]
385
385
 
386
386
  # Specifies the visible width of a text control
387
- size: Var[int | float]
387
+ size: Var[str | int | float]
388
388
 
389
389
  # URL for image inputs
390
390
  src: Var[str]
@@ -504,22 +504,22 @@ class Meter(BaseHTML):
504
504
  form: Var[str]
505
505
 
506
506
  # High limit of range (above this is considered high value)
507
- high: Var[int | float]
507
+ high: Var[str | int | float]
508
508
 
509
509
  # Low limit of range (below this is considered low value)
510
- low: Var[int | float]
510
+ low: Var[str | int | float]
511
511
 
512
512
  # Maximum value of the range
513
- max: Var[int | float]
513
+ max: Var[str | int | float]
514
514
 
515
515
  # Minimum value of the range
516
- min: Var[int | float]
516
+ min: Var[str | int | float]
517
517
 
518
518
  # Optimum value in the range
519
- optimum: Var[int | float]
519
+ optimum: Var[str | int | float]
520
520
 
521
521
  # Current value of the meter
522
- value: Var[int | float]
522
+ value: Var[str | int | float]
523
523
 
524
524
 
525
525
  class Optgroup(BaseHTML):
@@ -666,7 +666,7 @@ class Textarea(BaseHTML):
666
666
  auto_height: Var[bool]
667
667
 
668
668
  # Visible width of the text control, in average character widths
669
- cols: Var[int]
669
+ cols: Var[str | int]
670
670
 
671
671
  # The default value of the textarea when initially rendered
672
672
  default_value: Var[str]
@@ -684,10 +684,10 @@ class Textarea(BaseHTML):
684
684
  form: Var[str]
685
685
 
686
686
  # Maximum number of characters allowed in the textarea
687
- max_length: Var[int]
687
+ max_length: Var[str | int]
688
688
 
689
689
  # Minimum number of characters required in the textarea
690
- min_length: Var[int]
690
+ min_length: Var[str | int]
691
691
 
692
692
  # Name of the textarea, used when submitting the form
693
693
  name: Var[str]
@@ -702,7 +702,7 @@ class Textarea(BaseHTML):
702
702
  required: Var[bool]
703
703
 
704
704
  # Visible number of lines in the text control
705
- rows: Var[int]
705
+ rows: Var[str | int]
706
706
 
707
707
  # The controlled value of the textarea, read only unless used with on_change
708
708
  value: Var[str]
@@ -927,7 +927,7 @@ class BaseInput(BaseHTML):
927
927
  placeholder: Var[str] | str | None = None,
928
928
  read_only: Var[bool] | bool | None = None,
929
929
  required: Var[bool] | bool | None = None,
930
- size: Var[float | int] | float | int | None = None,
930
+ size: Var[float | int | str] | float | int | str | None = None,
931
931
  src: Var[str] | str | None = None,
932
932
  step: Var[float | int | str] | float | int | str | None = None,
933
933
  type: Literal[
@@ -1290,7 +1290,7 @@ class CheckboxInput(BaseInput):
1290
1290
  placeholder: Var[str] | str | None = None,
1291
1291
  read_only: Var[bool] | bool | None = None,
1292
1292
  required: Var[bool] | bool | None = None,
1293
- size: Var[float | int] | float | int | None = None,
1293
+ size: Var[float | int | str] | float | int | str | None = None,
1294
1294
  src: Var[str] | str | None = None,
1295
1295
  step: Var[float | int | str] | float | int | str | None = None,
1296
1296
  type: Literal[
@@ -1657,7 +1657,7 @@ class ValueNumberInput(BaseInput):
1657
1657
  placeholder: Var[str] | str | None = None,
1658
1658
  read_only: Var[bool] | bool | None = None,
1659
1659
  required: Var[bool] | bool | None = None,
1660
- size: Var[float | int] | float | int | None = None,
1660
+ size: Var[float | int | str] | float | int | str | None = None,
1661
1661
  src: Var[str] | str | None = None,
1662
1662
  step: Var[float | int | str] | float | int | str | None = None,
1663
1663
  type: Literal[
@@ -2024,7 +2024,7 @@ class Input(BaseInput):
2024
2024
  placeholder: Var[str] | str | None = None,
2025
2025
  read_only: Var[bool] | bool | None = None,
2026
2026
  required: Var[bool] | bool | None = None,
2027
- size: Var[float | int] | float | int | None = None,
2027
+ size: Var[float | int | str] | float | int | str | None = None,
2028
2028
  src: Var[str] | str | None = None,
2029
2029
  step: Var[float | int | str] | float | int | str | None = None,
2030
2030
  type: Literal[
@@ -2858,12 +2858,12 @@ class Meter(BaseHTML):
2858
2858
  cls,
2859
2859
  *children,
2860
2860
  form: Var[str] | str | None = None,
2861
- high: Var[float | int] | float | int | None = None,
2862
- low: Var[float | int] | float | int | None = None,
2863
- max: Var[float | int] | float | int | None = None,
2864
- min: Var[float | int] | float | int | None = None,
2865
- optimum: Var[float | int] | float | int | None = None,
2866
- value: Var[float | int] | float | int | None = None,
2861
+ high: Var[float | int | str] | float | int | str | None = None,
2862
+ low: Var[float | int | str] | float | int | str | None = None,
2863
+ max: Var[float | int | str] | float | int | str | None = None,
2864
+ min: Var[float | int | str] | float | int | str | None = None,
2865
+ optimum: Var[float | int | str] | float | int | str | None = None,
2866
+ value: Var[float | int | str] | float | int | str | None = None,
2867
2867
  access_key: Var[str] | str | None = None,
2868
2868
  auto_capitalize: Literal[
2869
2869
  "characters", "none", "off", "on", "sentences", "words"
@@ -4393,19 +4393,19 @@ class Textarea(BaseHTML):
4393
4393
  auto_complete: Var[str] | str | None = None,
4394
4394
  auto_focus: Var[bool] | bool | None = None,
4395
4395
  auto_height: Var[bool] | bool | None = None,
4396
- cols: Var[int] | int | None = None,
4396
+ cols: Var[int | str] | int | str | None = None,
4397
4397
  default_value: Var[str] | str | None = None,
4398
4398
  dirname: Var[str] | str | None = None,
4399
4399
  disabled: Var[bool] | bool | None = None,
4400
4400
  enter_key_submit: Var[bool] | bool | None = None,
4401
4401
  form: Var[str] | str | None = None,
4402
- max_length: Var[int] | int | None = None,
4403
- min_length: Var[int] | int | None = None,
4402
+ max_length: Var[int | str] | int | str | None = None,
4403
+ min_length: Var[int | str] | int | str | None = None,
4404
4404
  name: Var[str] | str | None = None,
4405
4405
  placeholder: Var[str] | str | None = None,
4406
4406
  read_only: Var[bool] | bool | None = None,
4407
4407
  required: Var[bool] | bool | None = None,
4408
- rows: Var[int] | int | None = None,
4408
+ rows: Var[int | str] | int | str | None = None,
4409
4409
  value: Var[str] | str | None = None,
4410
4410
  wrap: Var[str] | str | None = None,
4411
4411
  access_key: Var[str] | str | None = None,
@@ -113,7 +113,7 @@ class TextArea(RadixThemesComponent, elements.Textarea):
113
113
  value: Var[str] | str | None = None,
114
114
  wrap: Var[str] | str | None = None,
115
115
  auto_height: Var[bool] | bool | None = None,
116
- cols: Var[int] | int | None = None,
116
+ cols: Var[int | str] | int | str | None = None,
117
117
  enter_key_submit: Var[bool] | bool | None = None,
118
118
  access_key: Var[str] | str | None = None,
119
119
  auto_capitalize: Literal[
@@ -766,6 +766,12 @@ class EnvironmentVariables:
766
766
  # Whether to run Granian in a spawn process. This enables Reflex to pick up on environment variable changes between hot reloads.
767
767
  REFLEX_STRICT_HOT_RELOAD: EnvVar[bool] = env_var(False)
768
768
 
769
+ # The path to the reflex log file. If not set, the log file will be stored in the reflex user directory.
770
+ REFLEX_LOG_FILE: EnvVar[Path | None] = env_var(None)
771
+
772
+ # Enable full logging of debug messages to reflex user directory.
773
+ REFLEX_ENABLE_FULL_LOGGING: EnvVar[bool] = env_var(False)
774
+
769
775
 
770
776
  environment = EnvironmentVariables()
771
777
 
@@ -15,6 +15,8 @@ from rich.progress import MofNCompleteColumn, Progress, TimeElapsedColumn
15
15
  from rich.prompt import Prompt
16
16
 
17
17
  from reflex.constants import LogLevel
18
+ from reflex.constants.base import Reflex
19
+ from reflex.utils.decorator import once
18
20
 
19
21
  # Console for pretty printing.
20
22
  _console = Console()
@@ -92,6 +94,51 @@ def print(msg: str, dedupe: bool = False, **kwargs):
92
94
  _console.print(msg, **kwargs)
93
95
 
94
96
 
97
+ @once
98
+ def log_file_console():
99
+ """Create a console that logs to a file.
100
+
101
+ Returns:
102
+ A Console object that logs to a file.
103
+ """
104
+ from reflex.config import environment
105
+
106
+ if not (env_log_file := environment.REFLEX_LOG_FILE.get()):
107
+ subseconds = int((time.time() % 1) * 1000)
108
+ timestamp = time.strftime("%Y-%m-%d_%H-%M-%S") + f"_{subseconds:03d}"
109
+ log_file = Reflex.DIR / "logs" / (timestamp + ".log")
110
+ log_file.parent.mkdir(parents=True, exist_ok=True)
111
+ else:
112
+ log_file = env_log_file
113
+ if log_file.exists():
114
+ log_file.unlink()
115
+ log_file.touch()
116
+ return Console(file=log_file.open("a", encoding="utf-8"))
117
+
118
+
119
+ @once
120
+ def should_use_log_file_console() -> bool:
121
+ """Check if the log file console should be used.
122
+
123
+ Returns:
124
+ True if the log file console should be used, False otherwise.
125
+ """
126
+ from reflex.config import environment
127
+
128
+ return environment.REFLEX_ENABLE_FULL_LOGGING.get()
129
+
130
+
131
+ def print_to_log_file(msg: str, dedupe: bool = False, **kwargs):
132
+ """Print a message to the log file.
133
+
134
+ Args:
135
+ msg: The message to print.
136
+ dedupe: If True, suppress multiple console logs of print message.
137
+ kwargs: Keyword arguments to pass to the print function.
138
+ """
139
+ log_file_console().print(msg, **kwargs)
140
+
141
+
95
142
  def debug(msg: str, dedupe: bool = False, **kwargs):
96
143
  """Print a debug message.
97
144
 
@@ -110,6 +157,8 @@ def debug(msg: str, dedupe: bool = False, **kwargs):
110
157
  progress.console.print(msg_, **kwargs)
111
158
  else:
112
159
  print(msg_, **kwargs)
160
+ if should_use_log_file_console() and kwargs.pop("progress", None) is None:
161
+ print_to_log_file(f"[purple]Debug: {msg}[/purple]", **kwargs)
113
162
 
114
163
 
115
164
  def info(msg: str, dedupe: bool = False, **kwargs):
@@ -126,6 +175,8 @@ def info(msg: str, dedupe: bool = False, **kwargs):
126
175
  return
127
176
  _EMITTED_INFO.add(msg)
128
177
  print(f"[cyan]Info: {msg}[/cyan]", **kwargs)
178
+ if should_use_log_file_console():
179
+ print_to_log_file(f"[cyan]Info: {msg}[/cyan]", **kwargs)
129
180
 
130
181
 
131
182
  def success(msg: str, dedupe: bool = False, **kwargs):
@@ -142,6 +193,8 @@ def success(msg: str, dedupe: bool = False, **kwargs):
142
193
  return
143
194
  _EMITTED_SUCCESS.add(msg)
144
195
  print(f"[green]Success: {msg}[/green]", **kwargs)
196
+ if should_use_log_file_console():
197
+ print_to_log_file(f"[green]Success: {msg}[/green]", **kwargs)
145
198
 
146
199
 
147
200
  def log(msg: str, dedupe: bool = False, **kwargs):
@@ -158,6 +211,8 @@ def log(msg: str, dedupe: bool = False, **kwargs):
158
211
  return
159
212
  _EMITTED_LOGS.add(msg)
160
213
  _console.log(msg, **kwargs)
214
+ if should_use_log_file_console():
215
+ print_to_log_file(msg, **kwargs)
161
216
 
162
217
 
163
218
  def rule(title: str, **kwargs):
@@ -184,6 +239,8 @@ def warn(msg: str, dedupe: bool = False, **kwargs):
184
239
  return
185
240
  _EMIITED_WARNINGS.add(msg)
186
241
  print(f"[orange1]Warning: {msg}[/orange1]", **kwargs)
242
+ if should_use_log_file_console():
243
+ print_to_log_file(f"[orange1]Warning: {msg}[/orange1]", **kwargs)
187
244
 
188
245
 
189
246
  def _get_first_non_framework_frame() -> FrameType | None:
@@ -248,6 +305,8 @@ def deprecate(
248
305
  )
249
306
  if _LOG_LEVEL <= LogLevel.WARNING:
250
307
  print(f"[yellow]DeprecationWarning: {msg}[/yellow]", **kwargs)
308
+ if should_use_log_file_console():
309
+ print_to_log_file(f"[yellow]DeprecationWarning: {msg}[/yellow]", **kwargs)
251
310
  if dedupe:
252
311
  _EMITTED_DEPRECATION_WARNINGS.add(dedupe_key)
253
312
 
@@ -266,6 +325,8 @@ def error(msg: str, dedupe: bool = False, **kwargs):
266
325
  return
267
326
  _EMITTED_ERRORS.add(msg)
268
327
  print(f"[red]{msg}[/red]", **kwargs)
328
+ if should_use_log_file_console():
329
+ print_to_log_file(f"[red]{msg}[/red]", **kwargs)
269
330
 
270
331
 
271
332
  def ask(
@@ -12,6 +12,7 @@ import subprocess
12
12
  import sys
13
13
  from collections.abc import Sequence
14
14
  from pathlib import Path
15
+ from typing import NamedTuple, TypedDict
15
16
  from urllib.parse import urljoin
16
17
 
17
18
  import psutil
@@ -27,26 +28,102 @@ from reflex.utils.prerequisites import get_web_dir
27
28
  frontend_process = None
28
29
 
29
30
 
30
- def detect_package_change(json_file_path: Path) -> str:
31
- """Calculates the SHA-256 hash of a JSON file and returns it as a hexadecimal string.
31
+ def get_package_json_and_hash(package_json_path: Path) -> tuple[PackageJson, str]:
32
+ """Get the content of package.json and its hash.
32
33
 
33
34
  Args:
34
- json_file_path: The path to the JSON file to be hashed.
35
+ package_json_path: The path to the package.json file.
35
36
 
36
37
  Returns:
37
- str: The SHA-256 hash of the JSON file as a hexadecimal string.
38
-
39
- Example:
40
- >>> detect_package_change("package.json")
41
- 'a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6a7b8c9d0e1f2'
38
+ A tuple containing the content of package.json as a dictionary and its SHA-256 hash.
42
39
  """
43
- with json_file_path.open("r") as file:
40
+ with package_json_path.open("r") as file:
44
41
  json_data = json.load(file)
45
42
 
46
43
  # Calculate the hash
47
44
  json_string = json.dumps(json_data, sort_keys=True)
48
45
  hash_object = hashlib.sha256(json_string.encode())
49
- return hash_object.hexdigest()
46
+ return (json_data, hash_object.hexdigest())
47
+
48
+
49
+ class PackageJson(TypedDict):
50
+ """package.json content."""
51
+
52
+ dependencies: dict[str, str]
53
+ devDependencies: dict[str, str]
54
+
55
+
56
+ class Change(NamedTuple):
57
+ """A named tuple to represent a change in package dependencies."""
58
+
59
+ added: set[str]
60
+ removed: set[str]
61
+
62
+
63
+ def format_change(name: str, change: Change) -> str:
64
+ """Format the change for display.
65
+
66
+ Args:
67
+ name: The name of the change (e.g., "dependencies" or "devDependencies").
68
+ change: The Change named tuple containing added and removed packages.
69
+
70
+ Returns:
71
+ A formatted string representing the changes.
72
+ """
73
+ if not change.added and not change.removed:
74
+ return ""
75
+ added_str = ", ".join(sorted(change.added))
76
+ removed_str = ", ".join(sorted(change.removed))
77
+ change_str = f"{name}:\n"
78
+ if change.added:
79
+ change_str += f" Added: {added_str}\n"
80
+ if change.removed:
81
+ change_str += f" Removed: {removed_str}\n"
82
+ return change_str.strip()
83
+
84
+
85
+ def get_different_packages(
86
+ old_package_json_content: PackageJson,
87
+ new_package_json_content: PackageJson,
88
+ ) -> tuple[Change, Change]:
89
+ """Get the packages that are different between two package JSON contents.
90
+
91
+ Args:
92
+ old_package_json_content: The content of the old package JSON.
93
+ new_package_json_content: The content of the new package JSON.
94
+
95
+ Returns:
96
+ A tuple containing two `Change` named tuples:
97
+ - The first `Change` contains the changes in the `dependencies` section.
98
+ - The second `Change` contains the changes in the `devDependencies` section.
99
+ """
100
+
101
+ def get_changes(old: dict[str, str], new: dict[str, str]) -> Change:
102
+ """Get the changes between two dictionaries.
103
+
104
+ Args:
105
+ old: The old dictionary of packages.
106
+ new: The new dictionary of packages.
107
+
108
+ Returns:
109
+ A `Change` named tuple containing the added and removed packages.
110
+ """
111
+ old_keys = set(old.keys())
112
+ new_keys = set(new.keys())
113
+ added = new_keys - old_keys
114
+ removed = old_keys - new_keys
115
+ return Change(added=added, removed=removed)
116
+
117
+ dependencies_change = get_changes(
118
+ old_package_json_content.get("dependencies", {}),
119
+ new_package_json_content.get("dependencies", {}),
120
+ )
121
+ dev_dependencies_change = get_changes(
122
+ old_package_json_content.get("devDependencies", {}),
123
+ new_package_json_content.get("devDependencies", {}),
124
+ )
125
+
126
+ return dependencies_change, dev_dependencies_change
50
127
 
51
128
 
52
129
  def kill(proc_pid: int):
@@ -86,7 +163,7 @@ def run_process_and_launch_url(
86
163
  from reflex.utils import processes
87
164
 
88
165
  json_file_path = get_web_dir() / constants.PackageJson.PATH
89
- last_hash = detect_package_change(json_file_path)
166
+ last_content, last_hash = get_package_json_and_hash(json_file_path)
90
167
  process = None
91
168
  first_run = True
92
169
 
@@ -105,6 +182,18 @@ def run_process_and_launch_url(
105
182
  frontend_process = process
106
183
  if process.stdout:
107
184
  for line in processes.stream_logs("Starting frontend", process):
185
+ new_content, new_hash = get_package_json_and_hash(json_file_path)
186
+ if new_hash != last_hash:
187
+ dependencies_change, dev_dependencies_change = (
188
+ get_different_packages(last_content, new_content)
189
+ )
190
+ last_content, last_hash = new_content, new_hash
191
+ console.info(
192
+ "Detected changes in package.json.\n"
193
+ + format_change("Dependencies", dependencies_change)
194
+ + format_change("Dev Dependencies", dev_dependencies_change)
195
+ )
196
+
108
197
  match = re.search(constants.Next.FRONTEND_LISTENING_REGEX, line)
109
198
  if match:
110
199
  if first_run:
@@ -119,22 +208,8 @@ def run_process_and_launch_url(
119
208
  notify_backend()
120
209
  first_run = False
121
210
  else:
122
- console.print("New packages detected: Updating app...")
123
- else:
124
- if any(
125
- x in line for x in ("bin executable does not exist on disk",)
126
- ):
127
- console.error(
128
- "Try setting `REFLEX_USE_NPM=1` and re-running `reflex init` and `reflex run` to use npm instead of bun:\n"
129
- "`REFLEX_USE_NPM=1 reflex init`\n"
130
- "`REFLEX_USE_NPM=1 reflex run`"
131
- )
132
- new_hash = detect_package_change(json_file_path)
133
- if new_hash != last_hash:
134
- last_hash = new_hash
135
- kill(process.pid)
136
- process = None
137
- break # for line in process.stdout
211
+ console.print("Frontend is restarting...")
212
+
138
213
  if process is not None:
139
214
  break # while True
140
215
 
@@ -4,6 +4,7 @@ from __future__ import annotations
4
4
 
5
5
  import asyncio
6
6
  import dataclasses
7
+ import importlib.metadata
7
8
  import multiprocessing
8
9
  import platform
9
10
  import warnings
@@ -67,29 +68,25 @@ def get_reflex_version() -> str:
67
68
  return constants.Reflex.VERSION
68
69
 
69
70
 
70
- def _get_app_class_name() -> str | None:
71
- """Get the app class name if available.
71
+ def get_cpu_count() -> int:
72
+ """Get the number of CPUs.
72
73
 
73
74
  Returns:
74
- The app class name (e.g. "App", "AppEnterprise") or None if not available.
75
+ The number of CPUs.
75
76
  """
76
- try:
77
- from reflex.utils.prerequisites import get_and_validate_app
78
-
79
- app_info = get_and_validate_app()
80
- except Exception:
81
- return None
82
- else:
83
- return app_info.app.__class__.__name__
77
+ return multiprocessing.cpu_count()
84
78
 
85
79
 
86
- def get_cpu_count() -> int:
87
- """Get the number of CPUs.
80
+ def get_reflex_enterprise_version() -> str | None:
81
+ """Get the version of reflex-enterprise if installed.
88
82
 
89
83
  Returns:
90
- The number of CPUs.
84
+ The version string if installed, None if not installed.
91
85
  """
92
- return multiprocessing.cpu_count()
86
+ try:
87
+ return importlib.metadata.version("reflex-enterprise")
88
+ except importlib.metadata.PackageNotFoundError:
89
+ return None
93
90
 
94
91
 
95
92
  def get_memory() -> int:
@@ -129,6 +126,7 @@ class _Properties(TypedDict):
129
126
  python_version: str
130
127
  node_version: str | None
131
128
  bun_version: str | None
129
+ reflex_enterprise_version: str | None
132
130
  cpu_count: int
133
131
  memory: int
134
132
  cpu_info: dict
@@ -182,6 +180,7 @@ def _get_event_defaults() -> _DefaultEvent | None:
182
180
  "bun_version": (
183
181
  str(bun_version) if (bun_version := get_bun_version()) else None
184
182
  ),
183
+ "reflex_enterprise_version": get_reflex_enterprise_version(),
185
184
  "cpu_count": get_cpu_count(),
186
185
  "memory": get_memory(),
187
186
  "cpu_info": dataclasses.asdict(cpuinfo) if cpuinfo else {},
@@ -213,16 +212,12 @@ def _prepare_event(event: str, **kwargs) -> _Event | None:
213
212
  if not event_data:
214
213
  return None
215
214
 
216
- additional_keys = ["template", "context", "detail", "user_uuid", "app_class"]
215
+ additional_keys = ["template", "context", "detail", "user_uuid"]
217
216
 
218
217
  properties = event_data["properties"]
219
218
 
220
- # Auto-detect app class if not provided
221
- if "app_class" not in kwargs:
222
- kwargs["app_class"] = _get_app_class_name()
223
-
224
219
  for key in additional_keys:
225
- if key in properties or key not in kwargs or kwargs[key] is None:
220
+ if key in properties or key not in kwargs:
226
221
  continue
227
222
 
228
223
  properties[key] = kwargs[key]