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
@@ -11,7 +11,7 @@ from reflex.components.core.breakpoints import Breakpoints
11
11
  from reflex.components.el.elements.base import BaseHTML
12
12
  from reflex.components.el.elements.typography import Li, Ol, Ul
13
13
  from reflex.components.markdown.markdown import MarkdownComponentMap
14
- from reflex.event import EventType
14
+ from reflex.event import EventType, PointerEventInfo
15
15
  from reflex.vars.base import Var
16
16
 
17
17
  LiteralListStyleTypeUnordered = Literal["none", "disc", "circle", "square"]
@@ -266,9 +266,9 @@ class BaseList(BaseHTML, MarkdownComponentMap):
266
266
  autofocus: bool | None = None,
267
267
  custom_attrs: dict[str, Var | Any] | None = None,
268
268
  on_blur: EventType[()] | None = None,
269
- on_click: EventType[()] | None = None,
270
- on_context_menu: EventType[()] | None = None,
271
- on_double_click: EventType[()] | None = None,
269
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
270
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
271
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
272
272
  on_focus: EventType[()] | None = None,
273
273
  on_mount: EventType[()] | None = None,
274
274
  on_mouse_down: EventType[()] | None = None,
@@ -279,6 +279,7 @@ class BaseList(BaseHTML, MarkdownComponentMap):
279
279
  on_mouse_over: EventType[()] | None = None,
280
280
  on_mouse_up: EventType[()] | None = None,
281
281
  on_scroll: EventType[()] | None = None,
282
+ on_scroll_end: EventType[()] | None = None,
282
283
  on_unmount: EventType[()] | None = None,
283
284
  **props,
284
285
  ) -> BaseList:
@@ -553,9 +554,9 @@ class UnorderedList(BaseList, Ul):
553
554
  autofocus: bool | None = None,
554
555
  custom_attrs: dict[str, Var | Any] | None = None,
555
556
  on_blur: EventType[()] | None = None,
556
- on_click: EventType[()] | None = None,
557
- on_context_menu: EventType[()] | None = None,
558
- on_double_click: EventType[()] | None = None,
557
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
558
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
559
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
559
560
  on_focus: EventType[()] | None = None,
560
561
  on_mount: EventType[()] | None = None,
561
562
  on_mouse_down: EventType[()] | None = None,
@@ -566,6 +567,7 @@ class UnorderedList(BaseList, Ul):
566
567
  on_mouse_over: EventType[()] | None = None,
567
568
  on_mouse_up: EventType[()] | None = None,
568
569
  on_scroll: EventType[()] | None = None,
570
+ on_scroll_end: EventType[()] | None = None,
569
571
  on_unmount: EventType[()] | None = None,
570
572
  **props,
571
573
  ) -> UnorderedList:
@@ -843,9 +845,9 @@ class OrderedList(BaseList, Ol):
843
845
  autofocus: bool | None = None,
844
846
  custom_attrs: dict[str, Var | Any] | None = None,
845
847
  on_blur: EventType[()] | None = None,
846
- on_click: EventType[()] | None = None,
847
- on_context_menu: EventType[()] | None = None,
848
- on_double_click: EventType[()] | None = None,
848
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
849
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
850
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
849
851
  on_focus: EventType[()] | None = None,
850
852
  on_mount: EventType[()] | None = None,
851
853
  on_mouse_down: EventType[()] | None = None,
@@ -856,6 +858,7 @@ class OrderedList(BaseList, Ol):
856
858
  on_mouse_over: EventType[()] | None = None,
857
859
  on_mouse_up: EventType[()] | None = None,
858
860
  on_scroll: EventType[()] | None = None,
861
+ on_scroll_end: EventType[()] | None = None,
859
862
  on_unmount: EventType[()] | None = None,
860
863
  **props,
861
864
  ) -> OrderedList:
@@ -1093,9 +1096,9 @@ class ListItem(Li, MarkdownComponentMap):
1093
1096
  autofocus: bool | None = None,
1094
1097
  custom_attrs: dict[str, Var | Any] | None = None,
1095
1098
  on_blur: EventType[()] | None = None,
1096
- on_click: EventType[()] | None = None,
1097
- on_context_menu: EventType[()] | None = None,
1098
- on_double_click: EventType[()] | None = None,
1099
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
1100
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
1101
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
1099
1102
  on_focus: EventType[()] | None = None,
1100
1103
  on_mount: EventType[()] | None = None,
1101
1104
  on_mouse_down: EventType[()] | None = None,
@@ -1106,6 +1109,7 @@ class ListItem(Li, MarkdownComponentMap):
1106
1109
  on_mouse_over: EventType[()] | None = None,
1107
1110
  on_mouse_up: EventType[()] | None = None,
1108
1111
  on_scroll: EventType[()] | None = None,
1112
+ on_scroll_end: EventType[()] | None = None,
1109
1113
  on_unmount: EventType[()] | None = None,
1110
1114
  **props,
1111
1115
  ) -> ListItem:
@@ -1378,9 +1382,9 @@ class List(ComponentNamespace):
1378
1382
  autofocus: bool | None = None,
1379
1383
  custom_attrs: dict[str, Var | Any] | None = None,
1380
1384
  on_blur: EventType[()] | None = None,
1381
- on_click: EventType[()] | None = None,
1382
- on_context_menu: EventType[()] | None = None,
1383
- on_double_click: EventType[()] | None = None,
1385
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
1386
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
1387
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
1384
1388
  on_focus: EventType[()] | None = None,
1385
1389
  on_mount: EventType[()] | None = None,
1386
1390
  on_mouse_down: EventType[()] | None = None,
@@ -1391,6 +1395,7 @@ class List(ComponentNamespace):
1391
1395
  on_mouse_over: EventType[()] | None = None,
1392
1396
  on_mouse_up: EventType[()] | None = None,
1393
1397
  on_scroll: EventType[()] | None = None,
1398
+ on_scroll_end: EventType[()] | None = None,
1394
1399
  on_unmount: EventType[()] | None = None,
1395
1400
  **props,
1396
1401
  ) -> BaseList:
@@ -9,7 +9,7 @@ from typing import Any, Literal, overload
9
9
  from reflex.components.core.breakpoints import Breakpoints
10
10
  from reflex.components.el import elements
11
11
  from reflex.components.radix.themes.base import RadixThemesComponent
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
  LiteralSectionSize = Literal["1", "2", "3"]
@@ -214,9 +214,9 @@ class Section(elements.Section, RadixThemesComponent):
214
214
  autofocus: bool | None = None,
215
215
  custom_attrs: dict[str, Var | Any] | None = None,
216
216
  on_blur: EventType[()] | None = None,
217
- on_click: EventType[()] | None = None,
218
- on_context_menu: EventType[()] | None = None,
219
- on_double_click: EventType[()] | None = None,
217
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
218
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
219
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
220
220
  on_focus: EventType[()] | None = None,
221
221
  on_mount: EventType[()] | None = None,
222
222
  on_mouse_down: EventType[()] | None = None,
@@ -227,6 +227,7 @@ class Section(elements.Section, RadixThemesComponent):
227
227
  on_mouse_over: EventType[()] | None = None,
228
228
  on_mouse_up: EventType[()] | None = None,
229
229
  on_scroll: EventType[()] | None = None,
230
+ on_scroll_end: EventType[()] | None = None,
230
231
  on_unmount: EventType[()] | None = None,
231
232
  **props,
232
233
  ) -> Section:
@@ -7,7 +7,7 @@ from collections.abc import Mapping, Sequence
7
7
  from typing import Any, Literal, overload
8
8
 
9
9
  from reflex.components.core.breakpoints import Breakpoints
10
- from reflex.event import EventType
10
+ from reflex.event import EventType, PointerEventInfo
11
11
  from reflex.vars.base import Var
12
12
 
13
13
  from .flex import Flex
@@ -251,9 +251,9 @@ class Spacer(Flex):
251
251
  autofocus: bool | None = None,
252
252
  custom_attrs: dict[str, Var | Any] | None = None,
253
253
  on_blur: EventType[()] | None = None,
254
- on_click: EventType[()] | None = None,
255
- on_context_menu: EventType[()] | None = None,
256
- on_double_click: EventType[()] | None = None,
254
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
255
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
256
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
257
257
  on_focus: EventType[()] | None = None,
258
258
  on_mount: EventType[()] | None = None,
259
259
  on_mouse_down: EventType[()] | None = None,
@@ -264,6 +264,7 @@ class Spacer(Flex):
264
264
  on_mouse_over: EventType[()] | None = None,
265
265
  on_mouse_up: EventType[()] | None = None,
266
266
  on_scroll: EventType[()] | None = None,
267
+ on_scroll_end: EventType[()] | None = None,
267
268
  on_unmount: EventType[()] | None = None,
268
269
  **props,
269
270
  ) -> Spacer:
@@ -7,7 +7,7 @@ from collections.abc import Mapping, Sequence
7
7
  from typing import Any, Literal, overload
8
8
 
9
9
  from reflex.components.core.breakpoints import Breakpoints
10
- from reflex.event import EventType
10
+ from reflex.event import EventType, PointerEventInfo
11
11
  from reflex.vars.base import Var
12
12
 
13
13
  from .flex import Flex
@@ -250,9 +250,9 @@ class Stack(Flex):
250
250
  autofocus: bool | None = None,
251
251
  custom_attrs: dict[str, Var | Any] | None = None,
252
252
  on_blur: EventType[()] | None = None,
253
- on_click: EventType[()] | None = None,
254
- on_context_menu: EventType[()] | None = None,
255
- on_double_click: EventType[()] | None = None,
253
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
254
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
255
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
256
256
  on_focus: EventType[()] | None = None,
257
257
  on_mount: EventType[()] | None = None,
258
258
  on_mouse_down: EventType[()] | None = None,
@@ -263,6 +263,7 @@ class Stack(Flex):
263
263
  on_mouse_over: EventType[()] | None = None,
264
264
  on_mouse_up: EventType[()] | None = None,
265
265
  on_scroll: EventType[()] | None = None,
266
+ on_scroll_end: EventType[()] | None = None,
266
267
  on_unmount: EventType[()] | None = None,
267
268
  **props,
268
269
  ) -> Stack:
@@ -543,9 +544,9 @@ class VStack(Stack):
543
544
  autofocus: bool | None = None,
544
545
  custom_attrs: dict[str, Var | Any] | None = None,
545
546
  on_blur: EventType[()] | None = None,
546
- on_click: EventType[()] | None = None,
547
- on_context_menu: EventType[()] | None = None,
548
- on_double_click: EventType[()] | None = None,
547
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
548
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
549
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
549
550
  on_focus: EventType[()] | None = None,
550
551
  on_mount: EventType[()] | None = None,
551
552
  on_mouse_down: EventType[()] | None = None,
@@ -556,6 +557,7 @@ class VStack(Stack):
556
557
  on_mouse_over: EventType[()] | None = None,
557
558
  on_mouse_up: EventType[()] | None = None,
558
559
  on_scroll: EventType[()] | None = None,
560
+ on_scroll_end: EventType[()] | None = None,
559
561
  on_unmount: EventType[()] | None = None,
560
562
  **props,
561
563
  ) -> VStack:
@@ -836,9 +838,9 @@ class HStack(Stack):
836
838
  autofocus: bool | None = None,
837
839
  custom_attrs: dict[str, Var | Any] | None = None,
838
840
  on_blur: EventType[()] | None = None,
839
- on_click: EventType[()] | None = None,
840
- on_context_menu: EventType[()] | None = None,
841
- on_double_click: EventType[()] | None = None,
841
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
842
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
843
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
842
844
  on_focus: EventType[()] | None = None,
843
845
  on_mount: EventType[()] | None = None,
844
846
  on_mouse_down: EventType[()] | None = None,
@@ -849,6 +851,7 @@ class HStack(Stack):
849
851
  on_mouse_over: EventType[()] | None = None,
850
852
  on_mouse_up: EventType[()] | None = None,
851
853
  on_scroll: EventType[()] | None = None,
854
+ on_scroll_end: EventType[()] | None = None,
852
855
  on_unmount: EventType[()] | None = None,
853
856
  **props,
854
857
  ) -> HStack:
@@ -9,7 +9,7 @@ from typing import Any, Literal, overload
9
9
  from reflex.components.core.breakpoints import Breakpoints
10
10
  from reflex.components.el import elements
11
11
  from reflex.components.radix.themes.base import RadixThemesComponent
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
  class Blockquote(elements.Blockquote, RadixThemesComponent):
@@ -283,9 +283,9 @@ class Blockquote(elements.Blockquote, RadixThemesComponent):
283
283
  autofocus: bool | None = None,
284
284
  custom_attrs: dict[str, Var | Any] | None = None,
285
285
  on_blur: EventType[()] | None = None,
286
- on_click: EventType[()] | None = None,
287
- on_context_menu: EventType[()] | None = None,
288
- on_double_click: EventType[()] | None = None,
286
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
287
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
288
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
289
289
  on_focus: EventType[()] | None = None,
290
290
  on_mount: EventType[()] | None = None,
291
291
  on_mouse_down: EventType[()] | None = None,
@@ -296,6 +296,7 @@ class Blockquote(elements.Blockquote, RadixThemesComponent):
296
296
  on_mouse_over: EventType[()] | None = None,
297
297
  on_mouse_up: EventType[()] | None = None,
298
298
  on_scroll: EventType[()] | None = None,
299
+ on_scroll_end: EventType[()] | None = None,
299
300
  on_unmount: EventType[()] | None = None,
300
301
  **props,
301
302
  ) -> Blockquote:
@@ -10,7 +10,7 @@ from reflex.components.core.breakpoints import Breakpoints
10
10
  from reflex.components.el import elements
11
11
  from reflex.components.markdown.markdown import MarkdownComponentMap
12
12
  from reflex.components.radix.themes.base import RadixThemesComponent
13
- from reflex.event import EventType
13
+ from reflex.event import EventType, PointerEventInfo
14
14
  from reflex.vars.base import Var
15
15
 
16
16
  class Code(elements.Code, RadixThemesComponent, MarkdownComponentMap):
@@ -286,9 +286,9 @@ class Code(elements.Code, RadixThemesComponent, MarkdownComponentMap):
286
286
  autofocus: bool | None = None,
287
287
  custom_attrs: dict[str, Var | Any] | None = None,
288
288
  on_blur: EventType[()] | None = None,
289
- on_click: EventType[()] | None = None,
290
- on_context_menu: EventType[()] | None = None,
291
- on_double_click: EventType[()] | None = None,
289
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
290
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
291
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
292
292
  on_focus: EventType[()] | None = None,
293
293
  on_mount: EventType[()] | None = None,
294
294
  on_mouse_down: EventType[()] | None = None,
@@ -299,6 +299,7 @@ class Code(elements.Code, RadixThemesComponent, MarkdownComponentMap):
299
299
  on_mouse_over: EventType[()] | None = None,
300
300
  on_mouse_up: EventType[()] | None = None,
301
301
  on_scroll: EventType[()] | None = None,
302
+ on_scroll_end: EventType[()] | None = None,
302
303
  on_unmount: EventType[()] | None = None,
303
304
  **props,
304
305
  ) -> Code:
@@ -10,7 +10,7 @@ from reflex.components.core.breakpoints import Breakpoints
10
10
  from reflex.components.el import elements
11
11
  from reflex.components.markdown.markdown import MarkdownComponentMap
12
12
  from reflex.components.radix.themes.base import RadixThemesComponent
13
- from reflex.event import EventType
13
+ from reflex.event import EventType, PointerEventInfo
14
14
  from reflex.vars.base import Var
15
15
 
16
16
  class Heading(elements.H1, RadixThemesComponent, MarkdownComponentMap):
@@ -299,9 +299,9 @@ class Heading(elements.H1, RadixThemesComponent, MarkdownComponentMap):
299
299
  autofocus: bool | None = None,
300
300
  custom_attrs: dict[str, Var | Any] | None = None,
301
301
  on_blur: EventType[()] | None = None,
302
- on_click: EventType[()] | None = None,
303
- on_context_menu: EventType[()] | None = None,
304
- on_double_click: EventType[()] | None = None,
302
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
303
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
304
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
305
305
  on_focus: EventType[()] | None = None,
306
306
  on_mount: EventType[()] | None = None,
307
307
  on_mouse_down: EventType[()] | None = None,
@@ -312,6 +312,7 @@ class Heading(elements.H1, RadixThemesComponent, MarkdownComponentMap):
312
312
  on_mouse_over: EventType[()] | None = None,
313
313
  on_mouse_up: EventType[()] | None = None,
314
314
  on_scroll: EventType[()] | None = None,
315
+ on_scroll_end: EventType[()] | None = None,
315
316
  on_unmount: EventType[()] | None = None,
316
317
  **props,
317
318
  ) -> Heading:
@@ -13,16 +13,46 @@ from reflex.components.core.colors import color
13
13
  from reflex.components.core.cond import cond
14
14
  from reflex.components.el.elements.inline import A
15
15
  from reflex.components.markdown.markdown import MarkdownComponentMap
16
- from reflex.components.next.link import NextLink
17
16
  from reflex.components.radix.themes.base import LiteralAccentColor, RadixThemesComponent
18
- from reflex.utils.imports import ImportDict
17
+ from reflex.utils.imports import ImportDict, ImportVar
19
18
  from reflex.vars.base import Var
20
19
 
21
20
  from .base import LiteralTextSize, LiteralTextTrim, LiteralTextWeight
22
21
 
23
22
  LiteralLinkUnderline = Literal["auto", "hover", "always", "none"]
24
23
 
25
- next_link = NextLink.create()
24
+ LiteralLinkDiscover = Literal["none", "render"]
25
+
26
+
27
+ class ReactRouterLink(A):
28
+ """Links are accessible elements used primarily for navigation. This component is styled to resemble a hyperlink and semantically renders an <a>."""
29
+
30
+ library = "react-router"
31
+
32
+ tag = "Link"
33
+
34
+ alias = "ReactRouterLink"
35
+
36
+ # The page to link to.
37
+ to: Var[str]
38
+
39
+ # Replaces the current entry in the history stack instead of pushing a new one onto it.
40
+ replace: Var[bool]
41
+
42
+ # Will use document navigation instead of client side routing when the link is clicked: the browser will handle the transition normally (as if it were an <a href>).
43
+ reload_document: Var[bool]
44
+
45
+ # Prevents the scroll position from being reset to the top of the window when the link is clicked and the app is using ScrollRestoration. This only prevents new locations resetting scroll to the top, scroll position will be restored for back/forward button navigation.
46
+ prevent_scroll_reset: Var[bool]
47
+
48
+ # Defines the link discovery behavior
49
+ discover: Var[LiteralLinkDiscover]
50
+
51
+ # Enables a View Transition for this navigation.
52
+ view_transition: Var[bool]
53
+
54
+
55
+ _KNOWN_REACT_ROUTER_LINK_PROPS = frozenset(ReactRouterLink.get_props())
26
56
 
27
57
 
28
58
  class Link(RadixThemesComponent, A, MemoizationLeaf, MarkdownComponentMap):
@@ -60,7 +90,9 @@ class Link(RadixThemesComponent, A, MemoizationLeaf, MarkdownComponentMap):
60
90
  Returns:
61
91
  The import dict.
62
92
  """
63
- return next_link._get_imports() # pyright: ignore [reportReturnType]
93
+ return {
94
+ "react-router": [ImportVar(tag="Link", alias="ReactRouterLink")],
95
+ }
64
96
 
65
97
  @classmethod
66
98
  def create(cls, *children, **props) -> Component:
@@ -90,16 +122,19 @@ class Link(RadixThemesComponent, A, MemoizationLeaf, MarkdownComponentMap):
90
122
  raise ValueError(msg)
91
123
 
92
124
  if "as_child" not in props:
93
- # Extract props for the NextLink, the rest go to the Link/A element.
94
- known_next_link_props = NextLink.get_props()
95
- next_link_props = {}
125
+ # Extract props for the ReactRouterLink, the rest go to the Link/A element.
126
+ react_router_link_props = {}
96
127
  for prop in props.copy():
97
- if prop in known_next_link_props:
98
- next_link_props[prop] = props.pop(prop)
128
+ if prop in _KNOWN_REACT_ROUTER_LINK_PROPS:
129
+ react_router_link_props[prop] = props.pop(prop)
130
+
131
+ react_router_link_props["to"] = react_router_link_props.pop(
132
+ "href", href
133
+ )
99
134
 
100
- # If user does not use `as_child`, by default we render using next_link to avoid page refresh during internal navigation
135
+ # If user does not use `as_child`, by default we render using react_router_link to avoid page refresh during internal navigation
101
136
  return super().create(
102
- NextLink.create(*children, **next_link_props),
137
+ ReactRouterLink.create(*children, **react_router_link_props),
103
138
  as_child=True,
104
139
  **props,
105
140
  )