reflex 0.7.14a5__py3-none-any.whl → 0.8.0__py3-none-any.whl

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 (236) hide show
  1. reflex/.templates/jinja/app/rxconfig.py.jinja2 +4 -1
  2. reflex/.templates/jinja/web/package.json.jinja2 +1 -1
  3. reflex/.templates/jinja/web/pages/_app.js.jinja2 +21 -11
  4. reflex/.templates/jinja/web/pages/_document.js.jinja2 +1 -1
  5. reflex/.templates/jinja/web/pages/base_page.js.jinja2 +0 -1
  6. reflex/.templates/jinja/web/pages/stateful_component.js.jinja2 +4 -0
  7. reflex/.templates/jinja/web/styles/styles.css.jinja2 +1 -0
  8. reflex/.templates/jinja/web/utils/context.js.jinja2 +25 -8
  9. reflex/.templates/web/app/entry.client.js +8 -0
  10. reflex/.templates/web/app/routes.js +10 -0
  11. reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +12 -37
  12. reflex/.templates/web/postcss.config.js +1 -1
  13. reflex/.templates/web/react-router.config.js +6 -0
  14. reflex/.templates/web/styles/__reflex_style_reset.css +399 -0
  15. reflex/.templates/web/utils/client_side_routing.js +21 -19
  16. reflex/.templates/web/utils/react-theme.js +92 -0
  17. reflex/.templates/web/utils/state.js +251 -100
  18. reflex/.templates/web/vite-plugin-safari-cachebust.js +160 -0
  19. reflex/.templates/web/vite.config.js +39 -0
  20. reflex/__init__.py +1 -6
  21. reflex/__init__.pyi +327 -192
  22. reflex/app.py +103 -152
  23. reflex/base.py +1 -87
  24. reflex/compiler/compiler.py +70 -19
  25. reflex/compiler/templates.py +3 -3
  26. reflex/compiler/utils.py +91 -33
  27. reflex/components/__init__.py +0 -2
  28. reflex/components/__init__.pyi +34 -18
  29. reflex/components/base/__init__.py +1 -5
  30. reflex/components/base/__init__.pyi +30 -21
  31. reflex/components/base/app_wrap.pyi +7 -7
  32. reflex/components/base/body.pyi +7 -7
  33. reflex/components/base/document.py +18 -14
  34. reflex/components/base/document.pyi +88 -38
  35. reflex/components/base/error_boundary.pyi +7 -7
  36. reflex/components/base/fragment.pyi +7 -7
  37. reflex/components/base/link.pyi +12 -12
  38. reflex/components/base/meta.py +4 -15
  39. reflex/components/base/meta.pyi +31 -31
  40. reflex/components/base/script.py +60 -58
  41. reflex/components/base/script.pyi +248 -34
  42. reflex/components/base/strict_mode.pyi +7 -7
  43. reflex/components/component.py +146 -217
  44. reflex/components/core/__init__.py +1 -0
  45. reflex/components/core/__init__.pyi +77 -37
  46. reflex/components/core/auto_scroll.pyi +7 -7
  47. reflex/components/core/banner.pyi +33 -33
  48. reflex/components/core/client_side_routing.py +7 -6
  49. reflex/components/core/client_side_routing.pyi +8 -59
  50. reflex/components/core/clipboard.pyi +7 -7
  51. reflex/components/core/debounce.py +1 -0
  52. reflex/components/core/debounce.pyi +7 -7
  53. reflex/components/core/foreach.py +5 -4
  54. reflex/components/core/helmet.py +14 -0
  55. reflex/components/{next/base.pyi → core/helmet.pyi} +12 -10
  56. reflex/components/core/html.pyi +7 -7
  57. reflex/components/core/match.py +3 -3
  58. reflex/components/core/sticky.pyi +21 -20
  59. reflex/components/core/upload.py +4 -2
  60. reflex/components/core/upload.pyi +26 -25
  61. reflex/components/datadisplay/__init__.pyi +13 -7
  62. reflex/components/datadisplay/code.py +14 -79
  63. reflex/components/datadisplay/code.pyi +11 -13
  64. reflex/components/datadisplay/dataeditor.pyi +38 -15
  65. reflex/components/datadisplay/shiki_code_block.py +5 -3
  66. reflex/components/datadisplay/shiki_code_block.pyi +16 -15
  67. reflex/components/dynamic.py +5 -5
  68. reflex/components/el/__init__.pyi +506 -246
  69. reflex/components/el/element.pyi +7 -7
  70. reflex/components/el/elements/__init__.pyi +504 -245
  71. reflex/components/el/elements/base.pyi +7 -7
  72. reflex/components/el/elements/forms.pyi +146 -101
  73. reflex/components/el/elements/inline.pyi +142 -142
  74. reflex/components/el/elements/media.pyi +131 -130
  75. reflex/components/el/elements/metadata.pyi +32 -32
  76. reflex/components/el/elements/other.pyi +37 -37
  77. reflex/components/el/elements/scripts.pyi +17 -17
  78. reflex/components/el/elements/sectioning.pyi +77 -77
  79. reflex/components/el/elements/tables.pyi +52 -52
  80. reflex/components/el/elements/typography.pyi +77 -77
  81. reflex/components/field.py +175 -0
  82. reflex/components/gridjs/datatable.py +2 -2
  83. reflex/components/gridjs/datatable.pyi +14 -14
  84. reflex/components/lucide/icon.py +6 -2
  85. reflex/components/lucide/icon.pyi +19 -17
  86. reflex/components/markdown/markdown.py +5 -3
  87. reflex/components/markdown/markdown.pyi +7 -7
  88. reflex/components/moment/moment.py +1 -1
  89. reflex/components/moment/moment.pyi +7 -7
  90. reflex/components/plotly/plotly.py +12 -6
  91. reflex/components/plotly/plotly.pyi +50 -49
  92. reflex/components/props.py +376 -27
  93. reflex/components/radix/__init__.pyi +123 -65
  94. reflex/components/radix/primitives/__init__.pyi +6 -4
  95. reflex/components/radix/primitives/accordion.py +8 -1
  96. reflex/components/radix/primitives/accordion.pyi +37 -37
  97. reflex/components/radix/primitives/base.pyi +12 -12
  98. reflex/components/radix/primitives/drawer.pyi +56 -55
  99. reflex/components/radix/primitives/form.pyi +63 -53
  100. reflex/components/radix/primitives/progress.pyi +26 -25
  101. reflex/components/radix/primitives/slider.pyi +27 -27
  102. reflex/components/radix/themes/__init__.pyi +5 -6
  103. reflex/components/radix/themes/base.py +3 -3
  104. reflex/components/radix/themes/base.pyi +42 -42
  105. reflex/components/radix/themes/color_mode.py +5 -6
  106. reflex/components/radix/themes/color_mode.pyi +17 -17
  107. reflex/components/radix/themes/components/__init__.pyi +75 -38
  108. reflex/components/radix/themes/components/alert_dialog.pyi +37 -37
  109. reflex/components/radix/themes/components/aspect_ratio.pyi +7 -7
  110. reflex/components/radix/themes/components/avatar.pyi +7 -7
  111. reflex/components/radix/themes/components/badge.pyi +7 -7
  112. reflex/components/radix/themes/components/button.pyi +7 -7
  113. reflex/components/radix/themes/components/callout.pyi +26 -25
  114. reflex/components/radix/themes/components/card.pyi +7 -7
  115. reflex/components/radix/themes/components/checkbox.pyi +16 -15
  116. reflex/components/radix/themes/components/checkbox_cards.pyi +12 -12
  117. reflex/components/radix/themes/components/checkbox_group.pyi +12 -12
  118. reflex/components/radix/themes/components/context_menu.pyi +67 -67
  119. reflex/components/radix/themes/components/data_list.pyi +22 -22
  120. reflex/components/radix/themes/components/dialog.pyi +36 -35
  121. reflex/components/radix/themes/components/dropdown_menu.pyi +42 -42
  122. reflex/components/radix/themes/components/hover_card.pyi +21 -20
  123. reflex/components/radix/themes/components/icon_button.pyi +7 -7
  124. reflex/components/radix/themes/components/inset.pyi +7 -7
  125. reflex/components/radix/themes/components/popover.pyi +22 -22
  126. reflex/components/radix/themes/components/progress.pyi +7 -7
  127. reflex/components/radix/themes/components/radio.pyi +7 -7
  128. reflex/components/radix/themes/components/radio_cards.pyi +12 -12
  129. reflex/components/radix/themes/components/radio_group.pyi +21 -20
  130. reflex/components/radix/themes/components/scroll_area.pyi +7 -7
  131. reflex/components/radix/themes/components/segmented_control.pyi +12 -12
  132. reflex/components/radix/themes/components/select.pyi +46 -45
  133. reflex/components/radix/themes/components/separator.pyi +7 -7
  134. reflex/components/radix/themes/components/skeleton.pyi +7 -7
  135. reflex/components/radix/themes/components/slider.pyi +17 -9
  136. reflex/components/radix/themes/components/spinner.pyi +7 -7
  137. reflex/components/radix/themes/components/switch.pyi +7 -7
  138. reflex/components/radix/themes/components/table.pyi +37 -37
  139. reflex/components/radix/themes/components/tabs.pyi +26 -25
  140. reflex/components/radix/themes/components/text_area.pyi +15 -9
  141. reflex/components/radix/themes/components/text_field.pyi +32 -19
  142. reflex/components/radix/themes/components/tooltip.pyi +7 -7
  143. reflex/components/radix/themes/layout/__init__.pyi +27 -14
  144. reflex/components/radix/themes/layout/base.pyi +7 -7
  145. reflex/components/radix/themes/layout/box.pyi +7 -7
  146. reflex/components/radix/themes/layout/center.pyi +7 -7
  147. reflex/components/radix/themes/layout/container.pyi +7 -7
  148. reflex/components/radix/themes/layout/flex.pyi +7 -7
  149. reflex/components/radix/themes/layout/grid.pyi +7 -7
  150. reflex/components/radix/themes/layout/list.pyi +26 -25
  151. reflex/components/radix/themes/layout/section.pyi +7 -7
  152. reflex/components/radix/themes/layout/spacer.pyi +7 -7
  153. reflex/components/radix/themes/layout/stack.pyi +17 -17
  154. reflex/components/radix/themes/typography/__init__.pyi +7 -5
  155. reflex/components/radix/themes/typography/blockquote.pyi +7 -7
  156. reflex/components/radix/themes/typography/code.pyi +7 -7
  157. reflex/components/radix/themes/typography/heading.pyi +7 -7
  158. reflex/components/radix/themes/typography/link.py +46 -11
  159. reflex/components/radix/themes/typography/link.pyi +312 -9
  160. reflex/components/radix/themes/typography/text.pyi +36 -35
  161. reflex/components/react_player/audio.pyi +10 -8
  162. reflex/components/react_player/react_player.pyi +7 -7
  163. reflex/components/react_player/video.pyi +10 -8
  164. reflex/components/recharts/__init__.pyi +208 -100
  165. reflex/components/recharts/cartesian.py +10 -8
  166. reflex/components/recharts/cartesian.pyi +90 -94
  167. reflex/components/recharts/charts.py +4 -2
  168. reflex/components/recharts/charts.pyi +49 -49
  169. reflex/components/recharts/general.pyi +31 -31
  170. reflex/components/recharts/polar.py +8 -4
  171. reflex/components/recharts/polar.pyi +23 -23
  172. reflex/components/recharts/recharts.py +2 -2
  173. reflex/components/recharts/recharts.pyi +12 -12
  174. reflex/components/sonner/toast.py +3 -3
  175. reflex/components/sonner/toast.pyi +9 -9
  176. reflex/config.py +10 -113
  177. reflex/constants/__init__.py +2 -2
  178. reflex/constants/base.py +28 -11
  179. reflex/constants/compiler.py +12 -3
  180. reflex/constants/event.py +1 -0
  181. reflex/constants/installer.py +26 -20
  182. reflex/constants/route.py +27 -8
  183. reflex/constants/state.py +2 -0
  184. reflex/custom_components/custom_components.py +0 -14
  185. reflex/environment.py +77 -5
  186. reflex/event.py +178 -81
  187. reflex/experimental/__init__.py +0 -30
  188. reflex/istate/__init__.py +69 -0
  189. reflex/istate/manager.py +1 -0
  190. reflex/istate/proxy.py +5 -3
  191. reflex/page.py +0 -27
  192. reflex/plugins/__init__.py +3 -2
  193. reflex/plugins/base.py +5 -1
  194. reflex/plugins/shared_tailwind.py +215 -0
  195. reflex/plugins/sitemap.py +206 -0
  196. reflex/plugins/tailwind_v3.py +15 -108
  197. reflex/plugins/tailwind_v4.py +18 -110
  198. reflex/reflex.py +1 -0
  199. reflex/route.py +157 -75
  200. reflex/state.py +171 -155
  201. reflex/testing.py +86 -16
  202. reflex/utils/build.py +38 -82
  203. reflex/utils/exec.py +83 -175
  204. reflex/utils/export.py +2 -2
  205. reflex/utils/format.py +1 -5
  206. reflex/utils/imports.py +5 -16
  207. reflex/utils/misc.py +67 -0
  208. reflex/utils/prerequisites.py +66 -68
  209. reflex/utils/processes.py +24 -47
  210. reflex/utils/pyi_generator.py +44 -49
  211. reflex/utils/serializers.py +14 -1
  212. reflex/utils/telemetry.py +0 -15
  213. reflex/utils/types.py +197 -62
  214. reflex/vars/__init__.py +2 -0
  215. reflex/vars/base.py +367 -134
  216. {reflex-0.7.14a5.dist-info → reflex-0.8.0.dist-info}/METADATA +15 -8
  217. reflex-0.8.0.dist-info/RECORD +403 -0
  218. reflex/.templates/web/next.config.js +0 -7
  219. reflex/components/base/head.py +0 -20
  220. reflex/components/base/head.pyi +0 -116
  221. reflex/components/next/__init__.py +0 -10
  222. reflex/components/next/base.py +0 -7
  223. reflex/components/next/image.py +0 -117
  224. reflex/components/next/image.pyi +0 -94
  225. reflex/components/next/link.py +0 -20
  226. reflex/components/next/link.pyi +0 -67
  227. reflex/components/next/video.py +0 -38
  228. reflex/components/next/video.pyi +0 -68
  229. reflex/components/suneditor/__init__.py +0 -5
  230. reflex/components/suneditor/editor.py +0 -269
  231. reflex/components/suneditor/editor.pyi +0 -199
  232. reflex/experimental/layout.py +0 -254
  233. reflex-0.7.14a5.dist-info/RECORD +0 -407
  234. {reflex-0.7.14a5.dist-info → reflex-0.8.0.dist-info}/WHEEL +0 -0
  235. {reflex-0.7.14a5.dist-info → reflex-0.8.0.dist-info}/entry_points.txt +0 -0
  236. {reflex-0.7.14a5.dist-info → reflex-0.8.0.dist-info}/licenses/LICENSE +0 -0
@@ -4,20 +4,20 @@
4
4
  # This file was generated by `reflex/utils/pyi_generator.py`!
5
5
  # ------------------------------------------------------
6
6
  from collections.abc import Mapping, Sequence
7
- from typing import Any, Literal, overload
7
+ from typing import Any, Literal
8
8
 
9
9
  from reflex.components.core.breakpoints import Breakpoints
10
10
  from reflex.constants.colors import Color
11
- from reflex.event import EventType
11
+ from reflex.event import EventType, PointerEventInfo
12
12
  from reflex.vars.base import Var
13
13
 
14
14
  from .recharts import Recharts
15
15
 
16
16
  class Pie(Recharts):
17
- def get_event_triggers(self) -> dict[str, Var | Any]: ...
18
- @overload
19
17
  @classmethod
20
- def create( # type: ignore
18
+ def get_event_triggers(cls) -> dict[str, Var | Any]: ...
19
+ @classmethod
20
+ def create(
21
21
  cls,
22
22
  *children,
23
23
  data: Sequence[dict[str, Any]] | Var[Sequence[dict[str, Any]]] | None = None,
@@ -133,10 +133,10 @@ class Pie(Recharts):
133
133
  """
134
134
 
135
135
  class Radar(Recharts):
136
- def get_event_triggers(self) -> dict[str, Var | Any]: ...
137
- @overload
138
136
  @classmethod
139
- def create( # type: ignore
137
+ def get_event_triggers(cls) -> dict[str, Var | Any]: ...
138
+ @classmethod
139
+ def create(
140
140
  cls,
141
141
  *children,
142
142
  data_key: Var[int | str] | int | str | None = None,
@@ -228,10 +228,10 @@ class Radar(Recharts):
228
228
  """
229
229
 
230
230
  class RadialBar(Recharts):
231
- def get_event_triggers(self) -> dict[str, Var | Any]: ...
232
- @overload
233
231
  @classmethod
234
- def create( # type: ignore
232
+ def get_event_triggers(cls) -> dict[str, Var | Any]: ...
233
+ @classmethod
234
+ def create(
235
235
  cls,
236
236
  *children,
237
237
  data: Sequence[dict[str, Any]] | Var[Sequence[dict[str, Any]]] | None = None,
@@ -325,9 +325,8 @@ class RadialBar(Recharts):
325
325
  """
326
326
 
327
327
  class PolarAngleAxis(Recharts):
328
- @overload
329
328
  @classmethod
330
- def create( # type: ignore
329
+ def create(
331
330
  cls,
332
331
  *children,
333
332
  data_key: Var[int | str] | int | str | None = None,
@@ -357,8 +356,8 @@ class PolarAngleAxis(Recharts):
357
356
  custom_attrs: dict[str, Var | Any] | None = None,
358
357
  on_blur: EventType[()] | None = None,
359
358
  on_click: EventType[()] | None = None,
360
- on_context_menu: EventType[()] | None = None,
361
- on_double_click: EventType[()] | None = None,
359
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
360
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
362
361
  on_focus: EventType[()] | None = None,
363
362
  on_mount: EventType[()] | None = None,
364
363
  on_mouse_down: EventType[()] | None = None,
@@ -369,6 +368,7 @@ class PolarAngleAxis(Recharts):
369
368
  on_mouse_over: EventType[()] | None = None,
370
369
  on_mouse_up: EventType[()] | None = None,
371
370
  on_scroll: EventType[()] | None = None,
371
+ on_scroll_end: EventType[()] | None = None,
372
372
  on_unmount: EventType[()] | None = None,
373
373
  **props,
374
374
  ) -> PolarAngleAxis:
@@ -410,9 +410,8 @@ class PolarAngleAxis(Recharts):
410
410
  """
411
411
 
412
412
  class PolarGrid(Recharts):
413
- @overload
414
413
  @classmethod
415
- def create( # type: ignore
414
+ def create(
416
415
  cls,
417
416
  *children,
418
417
  cx: Var[int] | int | None = None,
@@ -437,9 +436,9 @@ class PolarGrid(Recharts):
437
436
  autofocus: bool | None = None,
438
437
  custom_attrs: dict[str, Var | Any] | None = None,
439
438
  on_blur: EventType[()] | None = None,
440
- on_click: EventType[()] | None = None,
441
- on_context_menu: EventType[()] | None = None,
442
- on_double_click: EventType[()] | None = None,
439
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
440
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
441
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
443
442
  on_focus: EventType[()] | None = None,
444
443
  on_mount: EventType[()] | None = None,
445
444
  on_mouse_down: EventType[()] | None = None,
@@ -450,6 +449,7 @@ class PolarGrid(Recharts):
450
449
  on_mouse_over: EventType[()] | None = None,
451
450
  on_mouse_up: EventType[()] | None = None,
452
451
  on_scroll: EventType[()] | None = None,
452
+ on_scroll_end: EventType[()] | None = None,
453
453
  on_unmount: EventType[()] | None = None,
454
454
  **props,
455
455
  ) -> PolarGrid:
@@ -479,10 +479,10 @@ class PolarGrid(Recharts):
479
479
  """
480
480
 
481
481
  class PolarRadiusAxis(Recharts):
482
- def get_event_triggers(self) -> dict[str, Var | Any]: ...
483
- @overload
484
482
  @classmethod
485
- def create( # type: ignore
483
+ def get_event_triggers(cls) -> dict[str, Var | Any]: ...
484
+ @classmethod
485
+ def create(
486
486
  cls,
487
487
  *children,
488
488
  angle: Var[int] | int | None = None,
@@ -8,7 +8,7 @@ from reflex.components.component import Component, MemoizationLeaf, NoSSRCompone
8
8
  class Recharts(Component):
9
9
  """A component that wraps a recharts lib."""
10
10
 
11
- library = "recharts@2.15.3"
11
+ library = "recharts@3.0.0"
12
12
 
13
13
  def _get_style(self) -> dict:
14
14
  return {"wrapperStyle": self.style}
@@ -17,7 +17,7 @@ class Recharts(Component):
17
17
  class RechartsCharts(NoSSRComponent, MemoizationLeaf):
18
18
  """A component that wraps a recharts lib."""
19
19
 
20
- library = "recharts@2.15.3"
20
+ library = "recharts@3.0.0"
21
21
 
22
22
 
23
23
  LiteralAnimationEasing = Literal["ease", "ease-in", "ease-out", "ease-in-out", "linear"]
@@ -4,17 +4,16 @@
4
4
  # This file was generated by `reflex/utils/pyi_generator.py`!
5
5
  # ------------------------------------------------------
6
6
  from collections.abc import Mapping, Sequence
7
- from typing import Any, Literal, overload
7
+ from typing import Any, Literal
8
8
 
9
9
  from reflex.components.component import Component, MemoizationLeaf, NoSSRComponent
10
10
  from reflex.components.core.breakpoints import Breakpoints
11
- from reflex.event import EventType
11
+ from reflex.event import EventType, PointerEventInfo
12
12
  from reflex.vars.base import Var
13
13
 
14
14
  class Recharts(Component):
15
- @overload
16
15
  @classmethod
17
- def create( # type: ignore
16
+ def create(
18
17
  cls,
19
18
  *children,
20
19
  style: Sequence[Mapping[str, Any]]
@@ -29,9 +28,9 @@ class Recharts(Component):
29
28
  autofocus: bool | None = None,
30
29
  custom_attrs: dict[str, Var | Any] | None = None,
31
30
  on_blur: EventType[()] | None = None,
32
- on_click: EventType[()] | None = None,
33
- on_context_menu: EventType[()] | None = None,
34
- on_double_click: EventType[()] | None = None,
31
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
32
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
33
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
35
34
  on_focus: EventType[()] | None = None,
36
35
  on_mount: EventType[()] | None = None,
37
36
  on_mouse_down: EventType[()] | None = None,
@@ -42,6 +41,7 @@ class Recharts(Component):
42
41
  on_mouse_over: EventType[()] | None = None,
43
42
  on_mouse_up: EventType[()] | None = None,
44
43
  on_scroll: EventType[()] | None = None,
44
+ on_scroll_end: EventType[()] | None = None,
45
45
  on_unmount: EventType[()] | None = None,
46
46
  **props,
47
47
  ) -> Recharts:
@@ -63,9 +63,8 @@ class Recharts(Component):
63
63
  """
64
64
 
65
65
  class RechartsCharts(NoSSRComponent, MemoizationLeaf):
66
- @overload
67
66
  @classmethod
68
- def create( # type: ignore
67
+ def create(
69
68
  cls,
70
69
  *children,
71
70
  style: Sequence[Mapping[str, Any]]
@@ -80,9 +79,9 @@ class RechartsCharts(NoSSRComponent, MemoizationLeaf):
80
79
  autofocus: bool | None = None,
81
80
  custom_attrs: dict[str, Var | Any] | None = None,
82
81
  on_blur: EventType[()] | None = None,
83
- on_click: EventType[()] | None = None,
84
- on_context_menu: EventType[()] | None = None,
85
- on_double_click: EventType[()] | None = None,
82
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
83
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
84
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
86
85
  on_focus: EventType[()] | None = None,
87
86
  on_mount: EventType[()] | None = None,
88
87
  on_mouse_down: EventType[()] | None = None,
@@ -93,6 +92,7 @@ class RechartsCharts(NoSSRComponent, MemoizationLeaf):
93
92
  on_mouse_over: EventType[()] | None = None,
94
93
  on_mouse_up: EventType[()] | None = None,
95
94
  on_scroll: EventType[()] | None = None,
95
+ on_scroll_end: EventType[()] | None = None,
96
96
  on_unmount: EventType[()] | None = None,
97
97
  **props,
98
98
  ) -> RechartsCharts:
@@ -7,7 +7,7 @@ from typing import Any, Literal
7
7
  from reflex.base import Base
8
8
  from reflex.components.component import Component, ComponentNamespace
9
9
  from reflex.components.lucide.icon import Icon
10
- from reflex.components.props import NoExtrasAllowedProps, PropsBase
10
+ from reflex.components.props import NoExtrasAllowedProps
11
11
  from reflex.constants.base import Dirs
12
12
  from reflex.event import EventSpec, run_script
13
13
  from reflex.style import Style, resolved_color_mode
@@ -74,7 +74,7 @@ def _toast_callback_signature(toast: Var) -> list[Var]:
74
74
  ]
75
75
 
76
76
 
77
- class ToastProps(PropsBase, NoExtrasAllowedProps):
77
+ class ToastProps(NoExtrasAllowedProps):
78
78
  """Props for the toast component."""
79
79
 
80
80
  # Toast's title, renders above the description.
@@ -171,7 +171,7 @@ class ToastProps(PropsBase, NoExtrasAllowedProps):
171
171
  class Toaster(Component):
172
172
  """A Toaster Component for displaying toast notifications."""
173
173
 
174
- library: str | None = "sonner@2.0.3"
174
+ library: str | None = "sonner@2.0.5"
175
175
 
176
176
  tag = "Toaster"
177
177
 
@@ -4,15 +4,15 @@
4
4
  # This file was generated by `reflex/utils/pyi_generator.py`!
5
5
  # ------------------------------------------------------
6
6
  from collections.abc import Mapping, Sequence
7
- from typing import Any, Literal, overload
7
+ from typing import Any, Literal
8
8
 
9
9
  from reflex.base import Base
10
10
  from reflex.components.component import Component, ComponentNamespace
11
11
  from reflex.components.core.breakpoints import Breakpoints
12
12
  from reflex.components.lucide.icon import Icon
13
- from reflex.components.props import NoExtrasAllowedProps, PropsBase
13
+ from reflex.components.props import NoExtrasAllowedProps
14
14
  from reflex.constants.base import Dirs
15
- from reflex.event import EventSpec, EventType
15
+ from reflex.event import EventSpec, EventType, PointerEventInfo
16
16
  from reflex.style import Style
17
17
  from reflex.utils.imports import ImportVar
18
18
  from reflex.utils.serializers import serializer
@@ -39,7 +39,7 @@ class ToastAction(Base):
39
39
  @serializer
40
40
  def serialize_action(action: ToastAction) -> dict: ...
41
41
 
42
- class ToastProps(PropsBase, NoExtrasAllowedProps):
42
+ class ToastProps(NoExtrasAllowedProps):
43
43
  title: str | Var | None
44
44
  description: str | Var | None
45
45
  close_button: bool | None
@@ -82,9 +82,8 @@ class Toaster(Component):
82
82
  def toast_loading(message: str | Var = "", **kwargs: Any): ...
83
83
  @staticmethod
84
84
  def toast_dismiss(id: Var | str | None = None): ...
85
- @overload
86
85
  @classmethod
87
- def create( # type: ignore
86
+ def create(
88
87
  cls,
89
88
  *children,
90
89
  theme: Var[str] | str | None = None,
@@ -131,9 +130,9 @@ class Toaster(Component):
131
130
  autofocus: bool | None = None,
132
131
  custom_attrs: dict[str, Var | Any] | None = None,
133
132
  on_blur: EventType[()] | None = None,
134
- on_click: EventType[()] | None = None,
135
- on_context_menu: EventType[()] | None = None,
136
- on_double_click: EventType[()] | None = None,
133
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
134
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
135
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
137
136
  on_focus: EventType[()] | None = None,
138
137
  on_mount: EventType[()] | None = None,
139
138
  on_mouse_down: EventType[()] | None = None,
@@ -144,6 +143,7 @@ class Toaster(Component):
144
143
  on_mouse_over: EventType[()] | None = None,
145
144
  on_mouse_up: EventType[()] | None = None,
146
145
  on_scroll: EventType[()] | None = None,
146
+ on_scroll_end: EventType[()] | None = None,
147
147
  on_unmount: EventType[()] | None = None,
148
148
  **props,
149
149
  ) -> Toaster:
reflex/config.py CHANGED
@@ -19,60 +19,19 @@ from reflex.base import Base
19
19
  from reflex.constants.base import LogLevel
20
20
  from reflex.environment import EnvironmentVariables as EnvironmentVariables
21
21
  from reflex.environment import EnvVar as EnvVar
22
- from reflex.environment import ExistingPath, interpret_env_var_value
22
+ from reflex.environment import (
23
+ ExistingPath,
24
+ _load_dotenv_from_files,
25
+ _paths_from_env_files,
26
+ interpret_env_var_value,
27
+ )
23
28
  from reflex.environment import env_var as env_var
24
29
  from reflex.environment import environment as environment
25
- from reflex.plugins import Plugin, TailwindV3Plugin, TailwindV4Plugin
30
+ from reflex.plugins import Plugin
26
31
  from reflex.utils import console
27
32
  from reflex.utils.exceptions import ConfigError
28
33
  from reflex.utils.types import true_type_for_pydantic_field
29
34
 
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
35
 
77
36
  class DBConfig(Base):
78
37
  """Database config."""
@@ -261,36 +220,12 @@ class Config(Base):
261
220
  # List of origins that are allowed to connect to the backend API.
262
221
  cors_allowed_origins: list[str] = ["*"]
263
222
 
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
223
+ # Whether to use React strict mode.
277
224
  react_strict_mode: bool = True
278
225
 
279
226
  # Additional frontend packages to install.
280
227
  frontend_packages: list[str] = []
281
228
 
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
229
  # Indicate which type of state manager to use
295
230
  state_manager_mode: constants.StateManagerMode = constants.StateManagerMode.DISK
296
231
 
@@ -339,25 +274,12 @@ class Config(Base):
339
274
  super().__init__(*args, **kwargs)
340
275
 
341
276
  # Clean up this code when we remove plain envvar in 0.8.0
342
- show_deprecation = False
343
277
  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
278
  if env_loglevel is not None:
349
279
  env_loglevel = LogLevel(env_loglevel.lower())
350
280
  if env_loglevel or self.loglevel != LogLevel.DEFAULT:
351
281
  console.set_log_level(env_loglevel or self.loglevel)
352
282
 
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
283
  # Update the config from environment variables.
362
284
  env_kwargs = self.update_from_env()
363
285
  for key, env_value in env_kwargs.items():
@@ -368,23 +290,6 @@ class Config(Base):
368
290
  self._non_default_attributes.update(kwargs)
369
291
  self._replace_defaults(**kwargs)
370
292
 
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
293
  if (
389
294
  self.state_manager_mode == constants.StateManagerMode.REDIS
390
295
  and not self.redis_url
@@ -424,24 +329,16 @@ If you are not using tailwind, set `tailwind` to `None` in rxconfig.py.""",
424
329
  The updated config values.
425
330
  """
426
331
  if self.env_file:
427
- _load_dotenv_from_str(self.env_file)
332
+ _load_dotenv_from_files(_paths_from_env_files(self.env_file))
428
333
 
429
334
  updated_values = {}
430
335
  # Iterate over the fields.
431
336
  for key, field in self.__fields__.items():
432
337
  # The env var name is the key in uppercase.
338
+ environment_variable = None
433
339
  for prefix in self._prefixes:
434
340
  if environment_variable := os.environ.get(f"{prefix}{key.upper()}"):
435
341
  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
342
 
446
343
  # If the env var is set, override the config value.
447
344
  if environment_variable and environment_variable.strip():
@@ -16,8 +16,8 @@ from .base import (
16
16
  Dirs,
17
17
  Env,
18
18
  LogLevel,
19
- Next,
20
19
  Ping,
20
+ ReactRouter,
21
21
  Reflex,
22
22
  ReflexHostingCLI,
23
23
  Templates,
@@ -100,13 +100,13 @@ __all__ = [
100
100
  "LogLevel",
101
101
  "MemoizationDisposition",
102
102
  "MemoizationMode",
103
- "Next",
104
103
  "Node",
105
104
  "PackageJson",
106
105
  "Page404",
107
106
  "PageNames",
108
107
  "Ping",
109
108
  "PyprojectToml",
109
+ "ReactRouter",
110
110
  "Reflex",
111
111
  "RequirementsTxt",
112
112
  "RouteArgType",
reflex/constants/base.py CHANGED
@@ -22,7 +22,7 @@ class Dirs(SimpleNamespace):
22
22
  """Various directories/paths used by Reflex."""
23
23
 
24
24
  # The frontend directories in a project.
25
- # The web folder where the NextJS app is compiled to.
25
+ # The web folder where the frontend app is compiled to.
26
26
  WEB = ".web"
27
27
  # The directory where uploaded files are stored.
28
28
  UPLOADED_FILES = "uploaded_files"
@@ -38,14 +38,18 @@ class Dirs(SimpleNamespace):
38
38
  COMPONENTS_PATH = UTILS + "/components"
39
39
  # The name of the contexts file.
40
40
  CONTEXTS_PATH = UTILS + "/context"
41
- # The name of the output static directory.
42
- STATIC = "_static"
41
+ # The name of the output directory.
42
+ BUILD_DIR = "build"
43
+ # The name of the static files directory.
44
+ STATIC = BUILD_DIR + "/client"
43
45
  # The name of the public html directory served at "/"
44
46
  PUBLIC = "public"
45
47
  # The directory where styles are located.
46
48
  STYLES = "styles"
47
49
  # The name of the pages directory.
48
- PAGES = "pages"
50
+ PAGES = "app"
51
+ # The name of the routes directory.
52
+ ROUTES = "routes"
49
53
  # The name of the env json file.
50
54
  ENV_JSON = "env.json"
51
55
  # The name of the reflex json file.
@@ -194,19 +198,32 @@ class Templates(SimpleNamespace):
194
198
  CODE = "code"
195
199
 
196
200
 
197
- class Next(SimpleNamespace):
198
- """Constants related to NextJS."""
201
+ class Javascript(SimpleNamespace):
202
+ """Constants related to Javascript."""
199
203
 
200
- # The NextJS config file
201
- CONFIG_FILE = "next.config.js"
202
- # The sitemap config file.
203
- SITEMAP_CONFIG_FILE = "next-sitemap.config.js"
204
204
  # The node modules directory.
205
205
  NODE_MODULES = "node_modules"
206
+
206
207
  # The package lock file.
207
208
  PACKAGE_LOCK = "package-lock.json"
209
+
210
+
211
+ class ReactRouter(Javascript):
212
+ """Constants related to React Router."""
213
+
214
+ # The react router config file
215
+ CONFIG_FILE = "react-router.config.js"
216
+
208
217
  # Regex to check for message displayed when frontend comes up
209
- FRONTEND_LISTENING_REGEX = "Local:[\\s]+(.*)"
218
+ DEV_FRONTEND_LISTENING_REGEX = r"Local:[\s]+"
219
+
220
+ # Regex to pattern the route path in the config file
221
+ # INFO Accepting connections at http://localhost:3000
222
+ PROD_FRONTEND_LISTENING_REGEX = r"Accepting connections at[\s]+"
223
+
224
+ FRONTEND_LISTENING_REGEX = (
225
+ rf"(?:{DEV_FRONTEND_LISTENING_REGEX}|{PROD_FRONTEND_LISTENING_REGEX})(.*)"
226
+ )
210
227
 
211
228
 
212
229
  # Color mode variables
@@ -20,6 +20,8 @@ class Ext(SimpleNamespace):
20
20
 
21
21
  # The extension for JS files.
22
22
  JS = ".js"
23
+ # The extension for JSX files.
24
+ JSX = ".jsx"
23
25
  # The extension for python files.
24
26
  PY = ".py"
25
27
  # The extension for css files.
@@ -78,16 +80,16 @@ class CompileVars(SimpleNamespace):
78
80
 
79
81
 
80
82
  class PageNames(SimpleNamespace):
81
- """The name of basic pages deployed in NextJS."""
83
+ """The name of basic pages deployed in the frontend."""
82
84
 
83
85
  # The name of the index page.
84
86
  INDEX_ROUTE = "index"
85
87
  # The name of the app root page.
86
- APP_ROOT = "_app"
88
+ APP_ROOT = "root.js"
87
89
  # The root stylesheet filename.
88
90
  STYLESHEET_ROOT = "__reflex_global_styles"
89
91
  # The name of the document root page.
90
- DOCUMENT_ROOT = "_document"
92
+ DOCUMENT_ROOT = "_document.js"
91
93
  # The name of the theme page.
92
94
  THEME = "theme"
93
95
  # The module containing components.
@@ -202,3 +204,10 @@ class SpecialAttributes(enum.Enum):
202
204
  True if the attribute is special.
203
205
  """
204
206
  return attr.startswith(SPECIAL_ATTRS)
207
+
208
+
209
+ class ResetStylesheet(SimpleNamespace):
210
+ """Constants for CSS reset stylesheet."""
211
+
212
+ # The filename of the CSS reset file.
213
+ FILENAME = "__reflex_style_reset.css"
reflex/constants/event.py CHANGED
@@ -91,6 +91,7 @@ class EventTriggers(SimpleNamespace):
91
91
  ON_POINTER_DOWN_OUTSIDE = "on_pointer_down_outside"
92
92
  ON_INTERACT_OUTSIDE = "on_interact_outside"
93
93
  ON_SCROLL = "on_scroll"
94
+ ON_SCROLL_END = "on_scroll_end"
94
95
  ON_SUBMIT = "on_submit"
95
96
  ON_MOUNT = "on_mount"
96
97
  ON_UNMOUNT = "on_unmount"