reflex 0.7.14a6__py3-none-any.whl → 0.8.0a2__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 (211) 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 +16 -10
  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/utils/context.js.jinja2 +25 -8
  8. reflex/.templates/web/app/entry.client.js +8 -0
  9. reflex/.templates/web/app/routes.js +10 -0
  10. reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +12 -37
  11. reflex/.templates/web/postcss.config.js +1 -1
  12. reflex/.templates/web/react-router.config.js +6 -0
  13. reflex/.templates/web/utils/client_side_routing.js +21 -19
  14. reflex/.templates/web/utils/react-theme.js +92 -0
  15. reflex/.templates/web/utils/state.js +160 -67
  16. reflex/.templates/web/vite.config.js +32 -0
  17. reflex/__init__.py +1 -6
  18. reflex/__init__.pyi +0 -4
  19. reflex/app.py +53 -116
  20. reflex/base.py +1 -87
  21. reflex/compiler/compiler.py +41 -8
  22. reflex/compiler/templates.py +3 -3
  23. reflex/compiler/utils.py +73 -33
  24. reflex/components/__init__.py +0 -2
  25. reflex/components/__init__.pyi +0 -3
  26. reflex/components/base/__init__.py +1 -5
  27. reflex/components/base/__init__.pyi +4 -6
  28. reflex/components/base/app_wrap.pyi +5 -4
  29. reflex/components/base/body.pyi +5 -4
  30. reflex/components/base/document.py +18 -14
  31. reflex/components/base/document.pyi +83 -27
  32. reflex/components/base/error_boundary.pyi +5 -4
  33. reflex/components/base/fragment.pyi +5 -4
  34. reflex/components/base/link.pyi +9 -7
  35. reflex/components/base/meta.pyi +17 -13
  36. reflex/components/base/script.py +60 -58
  37. reflex/components/base/script.pyi +246 -31
  38. reflex/components/base/strict_mode.pyi +5 -4
  39. reflex/components/component.py +146 -217
  40. reflex/components/core/__init__.py +1 -0
  41. reflex/components/core/__init__.pyi +1 -0
  42. reflex/components/core/auto_scroll.pyi +5 -4
  43. reflex/components/core/banner.pyi +25 -19
  44. reflex/components/core/client_side_routing.py +7 -6
  45. reflex/components/core/client_side_routing.pyi +6 -56
  46. reflex/components/core/clipboard.pyi +5 -4
  47. reflex/components/core/debounce.py +1 -0
  48. reflex/components/core/debounce.pyi +5 -4
  49. reflex/components/core/foreach.py +3 -2
  50. reflex/components/core/helmet.py +14 -0
  51. reflex/components/{next/base.pyi → core/helmet.pyi} +10 -7
  52. reflex/components/core/html.pyi +5 -4
  53. reflex/components/core/sticky.pyi +17 -13
  54. reflex/components/core/upload.py +2 -1
  55. reflex/components/core/upload.pyi +21 -16
  56. reflex/components/datadisplay/code.py +2 -72
  57. reflex/components/datadisplay/code.pyi +9 -10
  58. reflex/components/datadisplay/dataeditor.pyi +11 -6
  59. reflex/components/datadisplay/shiki_code_block.pyi +13 -10
  60. reflex/components/dynamic.py +5 -5
  61. reflex/components/el/element.pyi +5 -4
  62. reflex/components/el/elements/base.pyi +5 -4
  63. reflex/components/el/elements/forms.pyi +69 -52
  64. reflex/components/el/elements/inline.pyi +113 -85
  65. reflex/components/el/elements/media.pyi +105 -79
  66. reflex/components/el/elements/metadata.pyi +25 -19
  67. reflex/components/el/elements/other.pyi +29 -22
  68. reflex/components/el/elements/scripts.pyi +13 -10
  69. reflex/components/el/elements/sectioning.pyi +61 -46
  70. reflex/components/el/elements/tables.pyi +41 -31
  71. reflex/components/el/elements/typography.pyi +61 -46
  72. reflex/components/field.py +175 -0
  73. reflex/components/gridjs/datatable.py +2 -2
  74. reflex/components/gridjs/datatable.pyi +11 -9
  75. reflex/components/lucide/icon.py +6 -2
  76. reflex/components/lucide/icon.pyi +15 -10
  77. reflex/components/markdown/markdown.pyi +5 -4
  78. reflex/components/moment/moment.pyi +5 -4
  79. reflex/components/plotly/plotly.pyi +19 -10
  80. reflex/components/props.py +376 -27
  81. reflex/components/radix/primitives/accordion.py +8 -1
  82. reflex/components/radix/primitives/accordion.pyi +29 -22
  83. reflex/components/radix/primitives/base.pyi +9 -7
  84. reflex/components/radix/primitives/drawer.pyi +45 -34
  85. reflex/components/radix/primitives/form.pyi +41 -31
  86. reflex/components/radix/primitives/progress.pyi +21 -16
  87. reflex/components/radix/primitives/slider.pyi +21 -16
  88. reflex/components/radix/themes/base.py +3 -3
  89. reflex/components/radix/themes/base.pyi +33 -25
  90. reflex/components/radix/themes/color_mode.pyi +13 -10
  91. reflex/components/radix/themes/components/alert_dialog.pyi +29 -22
  92. reflex/components/radix/themes/components/aspect_ratio.pyi +5 -4
  93. reflex/components/radix/themes/components/avatar.pyi +5 -4
  94. reflex/components/radix/themes/components/badge.pyi +5 -4
  95. reflex/components/radix/themes/components/button.pyi +5 -4
  96. reflex/components/radix/themes/components/callout.pyi +21 -16
  97. reflex/components/radix/themes/components/card.pyi +5 -4
  98. reflex/components/radix/themes/components/checkbox.pyi +13 -10
  99. reflex/components/radix/themes/components/checkbox_cards.pyi +9 -7
  100. reflex/components/radix/themes/components/checkbox_group.pyi +9 -7
  101. reflex/components/radix/themes/components/context_menu.pyi +53 -40
  102. reflex/components/radix/themes/components/data_list.pyi +17 -13
  103. reflex/components/radix/themes/components/dialog.pyi +29 -22
  104. reflex/components/radix/themes/components/dropdown_menu.pyi +33 -25
  105. reflex/components/radix/themes/components/hover_card.pyi +17 -13
  106. reflex/components/radix/themes/components/icon_button.pyi +5 -4
  107. reflex/components/radix/themes/components/inset.pyi +5 -4
  108. reflex/components/radix/themes/components/popover.pyi +17 -13
  109. reflex/components/radix/themes/components/progress.pyi +5 -4
  110. reflex/components/radix/themes/components/radio.pyi +5 -4
  111. reflex/components/radix/themes/components/radio_cards.pyi +9 -7
  112. reflex/components/radix/themes/components/radio_group.pyi +17 -13
  113. reflex/components/radix/themes/components/scroll_area.pyi +5 -4
  114. reflex/components/radix/themes/components/segmented_control.pyi +9 -7
  115. reflex/components/radix/themes/components/select.pyi +37 -28
  116. reflex/components/radix/themes/components/separator.pyi +5 -4
  117. reflex/components/radix/themes/components/skeleton.pyi +5 -4
  118. reflex/components/radix/themes/components/slider.pyi +5 -4
  119. reflex/components/radix/themes/components/spinner.pyi +5 -4
  120. reflex/components/radix/themes/components/switch.pyi +5 -4
  121. reflex/components/radix/themes/components/table.pyi +29 -22
  122. reflex/components/radix/themes/components/tabs.pyi +21 -16
  123. reflex/components/radix/themes/components/text_area.pyi +5 -4
  124. reflex/components/radix/themes/components/text_field.pyi +13 -10
  125. reflex/components/radix/themes/components/tooltip.pyi +5 -4
  126. reflex/components/radix/themes/layout/base.pyi +5 -4
  127. reflex/components/radix/themes/layout/box.pyi +5 -4
  128. reflex/components/radix/themes/layout/center.pyi +5 -4
  129. reflex/components/radix/themes/layout/container.pyi +5 -4
  130. reflex/components/radix/themes/layout/flex.pyi +5 -4
  131. reflex/components/radix/themes/layout/grid.pyi +5 -4
  132. reflex/components/radix/themes/layout/list.pyi +21 -16
  133. reflex/components/radix/themes/layout/section.pyi +5 -4
  134. reflex/components/radix/themes/layout/spacer.pyi +5 -4
  135. reflex/components/radix/themes/layout/stack.pyi +13 -10
  136. reflex/components/radix/themes/typography/blockquote.pyi +5 -4
  137. reflex/components/radix/themes/typography/code.pyi +5 -4
  138. reflex/components/radix/themes/typography/heading.pyi +5 -4
  139. reflex/components/radix/themes/typography/link.py +46 -11
  140. reflex/components/radix/themes/typography/link.pyi +311 -6
  141. reflex/components/radix/themes/typography/text.pyi +29 -22
  142. reflex/components/react_player/audio.pyi +5 -4
  143. reflex/components/react_player/react_player.pyi +5 -4
  144. reflex/components/react_player/video.pyi +5 -4
  145. reflex/components/recharts/cartesian.py +2 -1
  146. reflex/components/recharts/cartesian.pyi +65 -46
  147. reflex/components/recharts/charts.py +4 -2
  148. reflex/components/recharts/charts.pyi +36 -24
  149. reflex/components/recharts/general.pyi +24 -18
  150. reflex/components/recharts/polar.py +8 -4
  151. reflex/components/recharts/polar.pyi +16 -10
  152. reflex/components/recharts/recharts.pyi +9 -7
  153. reflex/components/sonner/toast.py +2 -2
  154. reflex/components/sonner/toast.pyi +10 -8
  155. reflex/config.py +3 -77
  156. reflex/constants/__init__.py +2 -2
  157. reflex/constants/base.py +28 -11
  158. reflex/constants/compiler.py +5 -3
  159. reflex/constants/event.py +1 -0
  160. reflex/constants/installer.py +22 -16
  161. reflex/constants/route.py +19 -7
  162. reflex/constants/state.py +2 -0
  163. reflex/custom_components/custom_components.py +0 -14
  164. reflex/environment.py +1 -1
  165. reflex/event.py +178 -81
  166. reflex/experimental/__init__.py +0 -30
  167. reflex/istate/proxy.py +5 -3
  168. reflex/page.py +0 -27
  169. reflex/plugins/__init__.py +3 -2
  170. reflex/plugins/base.py +5 -1
  171. reflex/plugins/shared_tailwind.py +158 -0
  172. reflex/plugins/sitemap.py +206 -0
  173. reflex/plugins/tailwind_v3.py +13 -106
  174. reflex/plugins/tailwind_v4.py +15 -108
  175. reflex/reflex.py +1 -0
  176. reflex/route.py +15 -21
  177. reflex/state.py +134 -140
  178. reflex/testing.py +58 -10
  179. reflex/utils/build.py +38 -82
  180. reflex/utils/exec.py +59 -161
  181. reflex/utils/export.py +2 -2
  182. reflex/utils/imports.py +0 -4
  183. reflex/utils/misc.py +28 -0
  184. reflex/utils/prerequisites.py +65 -62
  185. reflex/utils/processes.py +8 -7
  186. reflex/utils/pyi_generator.py +21 -9
  187. reflex/utils/serializers.py +14 -1
  188. reflex/utils/types.py +196 -61
  189. reflex/vars/__init__.py +2 -0
  190. reflex/vars/base.py +367 -134
  191. {reflex-0.7.14a6.dist-info → reflex-0.8.0a2.dist-info}/METADATA +12 -5
  192. {reflex-0.7.14a6.dist-info → reflex-0.8.0a2.dist-info}/RECORD +195 -202
  193. reflex/.templates/web/next.config.js +0 -7
  194. reflex/components/base/head.py +0 -20
  195. reflex/components/base/head.pyi +0 -116
  196. reflex/components/next/__init__.py +0 -10
  197. reflex/components/next/base.py +0 -7
  198. reflex/components/next/image.py +0 -117
  199. reflex/components/next/image.pyi +0 -94
  200. reflex/components/next/link.py +0 -20
  201. reflex/components/next/link.pyi +0 -67
  202. reflex/components/next/video.py +0 -38
  203. reflex/components/next/video.pyi +0 -68
  204. reflex/components/suneditor/__init__.py +0 -5
  205. reflex/components/suneditor/editor.py +0 -269
  206. reflex/components/suneditor/editor.pyi +0 -199
  207. reflex/experimental/layout.py +0 -254
  208. reflex/experimental/layout.pyi +0 -814
  209. {reflex-0.7.14a6.dist-info → reflex-0.8.0a2.dist-info}/WHEEL +0 -0
  210. {reflex-0.7.14a6.dist-info → reflex-0.8.0a2.dist-info}/entry_points.txt +0 -0
  211. {reflex-0.7.14a6.dist-info → reflex-0.8.0a2.dist-info}/licenses/LICENSE +0 -0
@@ -9,7 +9,7 @@ from typing import Any, Literal, overload
9
9
  from reflex.components.component import MemoizationLeaf
10
10
  from reflex.components.core.breakpoints import Breakpoints
11
11
  from reflex.constants.colors import Color
12
- from reflex.event import EventType
12
+ from reflex.event import EventType, PointerEventInfo
13
13
  from reflex.vars.base import Var
14
14
 
15
15
  from .recharts import Recharts
@@ -38,9 +38,9 @@ class ResponsiveContainer(Recharts, MemoizationLeaf):
38
38
  autofocus: bool | None = None,
39
39
  custom_attrs: dict[str, Var | Any] | None = None,
40
40
  on_blur: EventType[()] | None = None,
41
- on_click: EventType[()] | None = None,
42
- on_context_menu: EventType[()] | None = None,
43
- on_double_click: EventType[()] | None = None,
41
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
42
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
43
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
44
44
  on_focus: EventType[()] | None = None,
45
45
  on_mount: EventType[()] | None = None,
46
46
  on_mouse_down: EventType[()] | None = None,
@@ -52,6 +52,7 @@ class ResponsiveContainer(Recharts, MemoizationLeaf):
52
52
  on_mouse_up: EventType[()] | None = None,
53
53
  on_resize: EventType[()] | None = None,
54
54
  on_scroll: EventType[()] | None = None,
55
+ on_scroll_end: EventType[()] | None = None,
55
56
  on_unmount: EventType[()] | None = None,
56
57
  **props,
57
58
  ) -> ResponsiveContainer:
@@ -141,8 +142,8 @@ class Legend(Recharts):
141
142
  custom_attrs: dict[str, Var | Any] | None = None,
142
143
  on_blur: EventType[()] | None = None,
143
144
  on_click: EventType[()] | None = None,
144
- on_context_menu: EventType[()] | None = None,
145
- on_double_click: EventType[()] | None = None,
145
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
146
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
146
147
  on_focus: EventType[()] | None = None,
147
148
  on_mount: EventType[()] | None = None,
148
149
  on_mouse_down: EventType[()] | None = None,
@@ -153,6 +154,7 @@ class Legend(Recharts):
153
154
  on_mouse_over: EventType[()] | None = None,
154
155
  on_mouse_up: EventType[()] | None = None,
155
156
  on_scroll: EventType[()] | None = None,
157
+ on_scroll_end: EventType[()] | None = None,
156
158
  on_unmount: EventType[()] | None = None,
157
159
  **props,
158
160
  ) -> Legend:
@@ -230,9 +232,9 @@ class GraphingTooltip(Recharts):
230
232
  autofocus: bool | None = None,
231
233
  custom_attrs: dict[str, Var | Any] | None = None,
232
234
  on_blur: EventType[()] | None = None,
233
- on_click: EventType[()] | None = None,
234
- on_context_menu: EventType[()] | None = None,
235
- on_double_click: EventType[()] | None = None,
235
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
236
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
237
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
236
238
  on_focus: EventType[()] | None = None,
237
239
  on_mount: EventType[()] | None = None,
238
240
  on_mouse_down: EventType[()] | None = None,
@@ -243,6 +245,7 @@ class GraphingTooltip(Recharts):
243
245
  on_mouse_over: EventType[()] | None = None,
244
246
  on_mouse_up: EventType[()] | None = None,
245
247
  on_scroll: EventType[()] | None = None,
248
+ on_scroll_end: EventType[()] | None = None,
246
249
  on_unmount: EventType[()] | None = None,
247
250
  **props,
248
251
  ) -> GraphingTooltip:
@@ -343,9 +346,9 @@ class Label(Recharts):
343
346
  autofocus: bool | None = None,
344
347
  custom_attrs: dict[str, Var | Any] | None = None,
345
348
  on_blur: EventType[()] | None = None,
346
- on_click: EventType[()] | None = None,
347
- on_context_menu: EventType[()] | None = None,
348
- on_double_click: EventType[()] | None = None,
349
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
350
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
351
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
349
352
  on_focus: EventType[()] | None = None,
350
353
  on_mount: EventType[()] | None = None,
351
354
  on_mouse_down: EventType[()] | None = None,
@@ -356,6 +359,7 @@ class Label(Recharts):
356
359
  on_mouse_over: EventType[()] | None = None,
357
360
  on_mouse_up: EventType[()] | None = None,
358
361
  on_scroll: EventType[()] | None = None,
362
+ on_scroll_end: EventType[()] | None = None,
359
363
  on_unmount: EventType[()] | None = None,
360
364
  **props,
361
365
  ) -> Label:
@@ -445,9 +449,9 @@ class LabelList(Recharts):
445
449
  autofocus: bool | None = None,
446
450
  custom_attrs: dict[str, Var | Any] | None = None,
447
451
  on_blur: EventType[()] | None = None,
448
- on_click: EventType[()] | None = None,
449
- on_context_menu: EventType[()] | None = None,
450
- on_double_click: EventType[()] | None = None,
452
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
453
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
454
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
451
455
  on_focus: EventType[()] | None = None,
452
456
  on_mount: EventType[()] | None = None,
453
457
  on_mouse_down: EventType[()] | None = None,
@@ -458,6 +462,7 @@ class LabelList(Recharts):
458
462
  on_mouse_over: EventType[()] | None = None,
459
463
  on_mouse_up: EventType[()] | None = None,
460
464
  on_scroll: EventType[()] | None = None,
465
+ on_scroll_end: EventType[()] | None = None,
461
466
  on_unmount: EventType[()] | None = None,
462
467
  **props,
463
468
  ) -> LabelList:
@@ -503,9 +508,9 @@ class Cell(Recharts):
503
508
  autofocus: bool | None = None,
504
509
  custom_attrs: dict[str, Var | Any] | None = None,
505
510
  on_blur: EventType[()] | None = None,
506
- on_click: EventType[()] | None = None,
507
- on_context_menu: EventType[()] | None = None,
508
- on_double_click: EventType[()] | None = None,
511
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
512
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
513
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
509
514
  on_focus: EventType[()] | None = None,
510
515
  on_mount: EventType[()] | None = None,
511
516
  on_mouse_down: EventType[()] | None = None,
@@ -516,6 +521,7 @@ class Cell(Recharts):
516
521
  on_mouse_over: EventType[()] | None = None,
517
522
  on_mouse_up: EventType[()] | None = None,
518
523
  on_scroll: EventType[()] | None = None,
524
+ on_scroll_end: EventType[()] | None = None,
519
525
  on_unmount: EventType[()] | None = None,
520
526
  **props,
521
527
  ) -> Cell:
@@ -95,7 +95,8 @@ class Pie(Recharts):
95
95
  # The tabindex of wrapper surrounding the cells. Default: 0
96
96
  root_tab_index: Var[int]
97
97
 
98
- def get_event_triggers(self) -> dict[str, Var | Any]:
98
+ @classmethod
99
+ def get_event_triggers(cls) -> dict[str, Var | Any]:
99
100
  """Get the event triggers that pass the component's value to the handler.
100
101
 
101
102
  Returns:
@@ -159,7 +160,8 @@ class Radar(Recharts):
159
160
  # Valid children components
160
161
  _valid_children: ClassVar[list[str]] = ["LabelList"]
161
162
 
162
- def get_event_triggers(self) -> dict[str, Var | Any]:
163
+ @classmethod
164
+ def get_event_triggers(cls) -> dict[str, Var | Any]:
163
165
  """Get the event triggers that pass the component's value to the handler.
164
166
 
165
167
  Returns:
@@ -211,7 +213,8 @@ class RadialBar(Recharts):
211
213
  # Valid children components
212
214
  _valid_children: ClassVar[list[str]] = ["Cell", "LabelList"]
213
215
 
214
- def get_event_triggers(self) -> dict[str, Var | Any]:
216
+ @classmethod
217
+ def get_event_triggers(cls) -> dict[str, Var | Any]:
215
218
  """Get the event triggers that pass the component's value to the handler.
216
219
 
217
220
  Returns:
@@ -384,7 +387,8 @@ class PolarRadiusAxis(Recharts):
384
387
  # The stroke color of axis. Default: rx.color("gray", 10)
385
388
  stroke: Var[str | Color] = LiteralVar.create(Color("gray", 10))
386
389
 
387
- def get_event_triggers(self) -> dict[str, Var | Any]:
390
+ @classmethod
391
+ def get_event_triggers(cls) -> dict[str, Var | Any]:
388
392
  """Get the event triggers that pass the component's value to the handler.
389
393
 
390
394
  Returns:
@@ -8,13 +8,14 @@ from typing import Any, Literal, overload
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]: ...
17
+ @classmethod
18
+ def get_event_triggers(cls) -> dict[str, Var | Any]: ...
18
19
  @overload
19
20
  @classmethod
20
21
  def create( # type: ignore
@@ -133,7 +134,8 @@ class Pie(Recharts):
133
134
  """
134
135
 
135
136
  class Radar(Recharts):
136
- def get_event_triggers(self) -> dict[str, Var | Any]: ...
137
+ @classmethod
138
+ def get_event_triggers(cls) -> dict[str, Var | Any]: ...
137
139
  @overload
138
140
  @classmethod
139
141
  def create( # type: ignore
@@ -228,7 +230,8 @@ class Radar(Recharts):
228
230
  """
229
231
 
230
232
  class RadialBar(Recharts):
231
- def get_event_triggers(self) -> dict[str, Var | Any]: ...
233
+ @classmethod
234
+ def get_event_triggers(cls) -> dict[str, Var | Any]: ...
232
235
  @overload
233
236
  @classmethod
234
237
  def create( # type: ignore
@@ -357,8 +360,8 @@ class PolarAngleAxis(Recharts):
357
360
  custom_attrs: dict[str, Var | Any] | None = None,
358
361
  on_blur: EventType[()] | None = None,
359
362
  on_click: EventType[()] | None = None,
360
- on_context_menu: EventType[()] | None = None,
361
- on_double_click: EventType[()] | None = None,
363
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
364
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
362
365
  on_focus: EventType[()] | None = None,
363
366
  on_mount: EventType[()] | None = None,
364
367
  on_mouse_down: EventType[()] | None = None,
@@ -369,6 +372,7 @@ class PolarAngleAxis(Recharts):
369
372
  on_mouse_over: EventType[()] | None = None,
370
373
  on_mouse_up: EventType[()] | None = None,
371
374
  on_scroll: EventType[()] | None = None,
375
+ on_scroll_end: EventType[()] | None = None,
372
376
  on_unmount: EventType[()] | None = None,
373
377
  **props,
374
378
  ) -> PolarAngleAxis:
@@ -437,9 +441,9 @@ class PolarGrid(Recharts):
437
441
  autofocus: bool | None = None,
438
442
  custom_attrs: dict[str, Var | Any] | None = None,
439
443
  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,
444
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
445
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
446
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
443
447
  on_focus: EventType[()] | None = None,
444
448
  on_mount: EventType[()] | None = None,
445
449
  on_mouse_down: EventType[()] | None = None,
@@ -450,6 +454,7 @@ class PolarGrid(Recharts):
450
454
  on_mouse_over: EventType[()] | None = None,
451
455
  on_mouse_up: EventType[()] | None = None,
452
456
  on_scroll: EventType[()] | None = None,
457
+ on_scroll_end: EventType[()] | None = None,
453
458
  on_unmount: EventType[()] | None = None,
454
459
  **props,
455
460
  ) -> PolarGrid:
@@ -479,7 +484,8 @@ class PolarGrid(Recharts):
479
484
  """
480
485
 
481
486
  class PolarRadiusAxis(Recharts):
482
- def get_event_triggers(self) -> dict[str, Var | Any]: ...
487
+ @classmethod
488
+ def get_event_triggers(cls) -> dict[str, Var | Any]: ...
483
489
  @overload
484
490
  @classmethod
485
491
  def create( # type: ignore
@@ -8,7 +8,7 @@ from typing import Any, Literal, overload
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):
@@ -29,9 +29,9 @@ class Recharts(Component):
29
29
  autofocus: bool | None = None,
30
30
  custom_attrs: dict[str, Var | Any] | None = None,
31
31
  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,
32
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
33
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
34
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
35
35
  on_focus: EventType[()] | None = None,
36
36
  on_mount: EventType[()] | None = None,
37
37
  on_mouse_down: EventType[()] | None = None,
@@ -42,6 +42,7 @@ class Recharts(Component):
42
42
  on_mouse_over: EventType[()] | None = None,
43
43
  on_mouse_up: EventType[()] | None = None,
44
44
  on_scroll: EventType[()] | None = None,
45
+ on_scroll_end: EventType[()] | None = None,
45
46
  on_unmount: EventType[()] | None = None,
46
47
  **props,
47
48
  ) -> Recharts:
@@ -80,9 +81,9 @@ class RechartsCharts(NoSSRComponent, MemoizationLeaf):
80
81
  autofocus: bool | None = None,
81
82
  custom_attrs: dict[str, Var | Any] | None = None,
82
83
  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,
84
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
85
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
86
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
86
87
  on_focus: EventType[()] | None = None,
87
88
  on_mount: EventType[()] | None = None,
88
89
  on_mouse_down: EventType[()] | None = None,
@@ -93,6 +94,7 @@ class RechartsCharts(NoSSRComponent, MemoizationLeaf):
93
94
  on_mouse_over: EventType[()] | None = None,
94
95
  on_mouse_up: EventType[()] | None = None,
95
96
  on_scroll: EventType[()] | None = None,
97
+ on_scroll_end: EventType[()] | None = None,
96
98
  on_unmount: EventType[()] | None = None,
97
99
  **props,
98
100
  ) -> 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.
@@ -3,16 +3,16 @@
3
3
  # ------------------- DO NOT EDIT ----------------------
4
4
  # This file was generated by `reflex/utils/pyi_generator.py`!
5
5
  # ------------------------------------------------------
6
+ import dataclasses
6
7
  from collections.abc import Mapping, Sequence
7
8
  from typing import Any, Literal, overload
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
@@ -32,14 +32,15 @@ toast_ref = Var(
32
32
  _var_data=VarData(imports={f"$/{Dirs.STATE_PATH}": [ImportVar(tag="refs")]}),
33
33
  )
34
34
 
35
- class ToastAction(Base):
35
+ @dataclasses.dataclass
36
+ class ToastAction:
36
37
  label: str
37
38
  on_click: Any
38
39
 
39
40
  @serializer
40
41
  def serialize_action(action: ToastAction) -> dict: ...
41
42
 
42
- class ToastProps(PropsBase, NoExtrasAllowedProps):
43
+ class ToastProps(NoExtrasAllowedProps):
43
44
  title: str | Var | None
44
45
  description: str | Var | None
45
46
  close_button: bool | None
@@ -131,9 +132,9 @@ class Toaster(Component):
131
132
  autofocus: bool | None = None,
132
133
  custom_attrs: dict[str, Var | Any] | None = None,
133
134
  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,
135
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
136
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
137
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
137
138
  on_focus: EventType[()] | None = None,
138
139
  on_mount: EventType[()] | None = None,
139
140
  on_mouse_down: EventType[()] | None = None,
@@ -144,6 +145,7 @@ class Toaster(Component):
144
145
  on_mouse_over: EventType[()] | None = None,
145
146
  on_mouse_up: EventType[()] | None = None,
146
147
  on_scroll: EventType[()] | None = None,
148
+ on_scroll_end: EventType[()] | None = None,
147
149
  on_unmount: EventType[()] | None = None,
148
150
  **props,
149
151
  ) -> Toaster:
reflex/config.py CHANGED
@@ -22,7 +22,7 @@ from reflex.environment import EnvVar as EnvVar
22
22
  from reflex.environment import ExistingPath, interpret_env_var_value
23
23
  from reflex.environment import env_var as env_var
24
24
  from reflex.environment import environment as environment
25
- from reflex.plugins import Plugin, TailwindV3Plugin, TailwindV4Plugin
25
+ from reflex.plugins import Plugin
26
26
  from reflex.utils import console
27
27
  from reflex.utils.exceptions import ConfigError
28
28
  from reflex.utils.types import true_type_for_pydantic_field
@@ -53,19 +53,7 @@ def _load_dotenv_from_str(env_files: str) -> None:
53
53
 
54
54
  def _load_dotenv_from_env():
55
55
  """Load environment variables from paths specified in REFLEX_ENV_FILE."""
56
- show_deprecation = False
57
56
  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
57
  if env_env_file:
70
58
  _load_dotenv_from_str(env_env_file)
71
59
 
@@ -261,36 +249,12 @@ class Config(Base):
261
249
  # List of origins that are allowed to connect to the backend API.
262
250
  cors_allowed_origins: list[str] = ["*"]
263
251
 
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
252
+ # Whether to use React strict mode.
277
253
  react_strict_mode: bool = True
278
254
 
279
255
  # Additional frontend packages to install.
280
256
  frontend_packages: list[str] = []
281
257
 
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
258
  # Indicate which type of state manager to use
295
259
  state_manager_mode: constants.StateManagerMode = constants.StateManagerMode.DISK
296
260
 
@@ -339,25 +303,12 @@ class Config(Base):
339
303
  super().__init__(*args, **kwargs)
340
304
 
341
305
  # Clean up this code when we remove plain envvar in 0.8.0
342
- show_deprecation = False
343
306
  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
307
  if env_loglevel is not None:
349
308
  env_loglevel = LogLevel(env_loglevel.lower())
350
309
  if env_loglevel or self.loglevel != LogLevel.DEFAULT:
351
310
  console.set_log_level(env_loglevel or self.loglevel)
352
311
 
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
312
  # Update the config from environment variables.
362
313
  env_kwargs = self.update_from_env()
363
314
  for key, env_value in env_kwargs.items():
@@ -368,23 +319,6 @@ class Config(Base):
368
319
  self._non_default_attributes.update(kwargs)
369
320
  self._replace_defaults(**kwargs)
370
321
 
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
322
  if (
389
323
  self.state_manager_mode == constants.StateManagerMode.REDIS
390
324
  and not self.redis_url
@@ -430,18 +364,10 @@ If you are not using tailwind, set `tailwind` to `None` in rxconfig.py.""",
430
364
  # Iterate over the fields.
431
365
  for key, field in self.__fields__.items():
432
366
  # The env var name is the key in uppercase.
367
+ environment_variable = None
433
368
  for prefix in self._prefixes:
434
369
  if environment_variable := os.environ.get(f"{prefix}{key.upper()}"):
435
370
  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
371
 
446
372
  # If the env var is set, override the config value.
447
373
  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.
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"