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,18 +4,17 @@
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.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):
16
- @overload
17
16
  @classmethod
18
- def create( # type: ignore
17
+ def create(
19
18
  cls,
20
19
  *children,
21
20
  size: Breakpoints[str, Literal["1", "2", "3", "4", "5", "6", "7", "8", "9"]]
@@ -283,9 +282,9 @@ class Blockquote(elements.Blockquote, RadixThemesComponent):
283
282
  autofocus: bool | None = None,
284
283
  custom_attrs: dict[str, Var | Any] | None = None,
285
284
  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,
285
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
286
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
287
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
289
288
  on_focus: EventType[()] | None = None,
290
289
  on_mount: EventType[()] | None = None,
291
290
  on_mouse_down: EventType[()] | None = None,
@@ -296,6 +295,7 @@ class Blockquote(elements.Blockquote, RadixThemesComponent):
296
295
  on_mouse_over: EventType[()] | None = None,
297
296
  on_mouse_up: EventType[()] | None = None,
298
297
  on_scroll: EventType[()] | None = None,
298
+ on_scroll_end: EventType[()] | None = None,
299
299
  on_unmount: EventType[()] | None = None,
300
300
  **props,
301
301
  ) -> Blockquote:
@@ -4,19 +4,18 @@
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.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):
17
- @overload
18
17
  @classmethod
19
- def create( # type: ignore
18
+ def create(
20
19
  cls,
21
20
  *children,
22
21
  variant: Literal["classic", "ghost", "outline", "soft", "solid", "surface"]
@@ -286,9 +285,9 @@ class Code(elements.Code, RadixThemesComponent, MarkdownComponentMap):
286
285
  autofocus: bool | None = None,
287
286
  custom_attrs: dict[str, Var | Any] | None = None,
288
287
  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,
288
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
289
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
290
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
292
291
  on_focus: EventType[()] | None = None,
293
292
  on_mount: EventType[()] | None = None,
294
293
  on_mouse_down: EventType[()] | None = None,
@@ -299,6 +298,7 @@ class Code(elements.Code, RadixThemesComponent, MarkdownComponentMap):
299
298
  on_mouse_over: EventType[()] | None = None,
300
299
  on_mouse_up: EventType[()] | None = None,
301
300
  on_scroll: EventType[()] | None = None,
301
+ on_scroll_end: EventType[()] | None = None,
302
302
  on_unmount: EventType[()] | None = None,
303
303
  **props,
304
304
  ) -> Code:
@@ -4,19 +4,18 @@
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.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):
17
- @overload
18
17
  @classmethod
19
- def create( # type: ignore
18
+ def create(
20
19
  cls,
21
20
  *children,
22
21
  as_child: Var[bool] | bool | None = None,
@@ -299,9 +298,9 @@ class Heading(elements.H1, RadixThemesComponent, MarkdownComponentMap):
299
298
  autofocus: bool | None = None,
300
299
  custom_attrs: dict[str, Var | Any] | None = None,
301
300
  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,
301
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
302
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
303
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
305
304
  on_focus: EventType[()] | None = None,
306
305
  on_mount: EventType[()] | None = None,
307
306
  on_mouse_down: EventType[()] | None = None,
@@ -312,6 +311,7 @@ class Heading(elements.H1, RadixThemesComponent, MarkdownComponentMap):
312
311
  on_mouse_over: EventType[()] | None = None,
313
312
  on_mouse_up: EventType[()] | None = None,
314
313
  on_scroll: EventType[()] | None = None,
314
+ on_scroll_end: EventType[()] | None = None,
315
315
  on_unmount: EventType[()] | None = None,
316
316
  **props,
317
317
  ) -> 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
  )
@@ -4,26 +4,328 @@
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 MemoizationLeaf
10
10
  from reflex.components.core.breakpoints import Breakpoints
11
11
  from reflex.components.el.elements.inline import A
12
12
  from reflex.components.markdown.markdown import MarkdownComponentMap
13
- from reflex.components.next.link import NextLink
14
13
  from reflex.components.radix.themes.base import RadixThemesComponent
15
- from reflex.event import EventType
14
+ from reflex.event import EventType, PointerEventInfo
16
15
  from reflex.utils.imports import ImportDict
17
16
  from reflex.vars.base import Var
18
17
 
19
18
  LiteralLinkUnderline = Literal["auto", "hover", "always", "none"]
20
- next_link = NextLink.create()
19
+ LiteralLinkDiscover = Literal["none", "render"]
20
+
21
+ class ReactRouterLink(A):
22
+ @classmethod
23
+ def create(
24
+ cls,
25
+ *children,
26
+ to: Var[str] | str | None = None,
27
+ replace: Var[bool] | bool | None = None,
28
+ reload_document: Var[bool] | bool | None = None,
29
+ prevent_scroll_reset: Var[bool] | bool | None = None,
30
+ discover: Literal["none", "render"]
31
+ | Var[Literal["none", "render"]]
32
+ | None = None,
33
+ view_transition: Var[bool] | bool | None = None,
34
+ download: Var[bool | str] | bool | str | None = None,
35
+ href: Var[str] | str | None = None,
36
+ href_lang: Var[str] | str | None = None,
37
+ media: Var[str] | str | None = None,
38
+ ping: Var[str] | str | None = None,
39
+ referrer_policy: Literal[
40
+ "",
41
+ "no-referrer",
42
+ "no-referrer-when-downgrade",
43
+ "origin",
44
+ "origin-when-cross-origin",
45
+ "same-origin",
46
+ "strict-origin",
47
+ "strict-origin-when-cross-origin",
48
+ "unsafe-url",
49
+ ]
50
+ | Var[
51
+ Literal[
52
+ "",
53
+ "no-referrer",
54
+ "no-referrer-when-downgrade",
55
+ "origin",
56
+ "origin-when-cross-origin",
57
+ "same-origin",
58
+ "strict-origin",
59
+ "strict-origin-when-cross-origin",
60
+ "unsafe-url",
61
+ ]
62
+ ]
63
+ | None = None,
64
+ rel: Var[str] | str | None = None,
65
+ target: Literal["_blank", "_parent", "_self", "_top"]
66
+ | Var[Literal["_blank", "_parent", "_self", "_top"] | str]
67
+ | str
68
+ | None = None,
69
+ access_key: Var[str] | str | None = None,
70
+ auto_capitalize: Literal[
71
+ "characters", "none", "off", "on", "sentences", "words"
72
+ ]
73
+ | Var[Literal["characters", "none", "off", "on", "sentences", "words"]]
74
+ | None = None,
75
+ content_editable: Literal["inherit", "plaintext-only", False, True]
76
+ | Var[Literal["inherit", "plaintext-only", False, True]]
77
+ | None = None,
78
+ context_menu: Var[str] | str | None = None,
79
+ dir: Var[str] | str | None = None,
80
+ draggable: Var[bool] | bool | None = None,
81
+ enter_key_hint: Literal[
82
+ "done", "enter", "go", "next", "previous", "search", "send"
83
+ ]
84
+ | Var[Literal["done", "enter", "go", "next", "previous", "search", "send"]]
85
+ | None = None,
86
+ hidden: Var[bool] | bool | None = None,
87
+ input_mode: Literal[
88
+ "decimal", "email", "none", "numeric", "search", "tel", "text", "url"
89
+ ]
90
+ | Var[
91
+ Literal[
92
+ "decimal", "email", "none", "numeric", "search", "tel", "text", "url"
93
+ ]
94
+ ]
95
+ | None = None,
96
+ item_prop: Var[str] | str | None = None,
97
+ lang: Var[str] | str | None = None,
98
+ role: Literal[
99
+ "alert",
100
+ "alertdialog",
101
+ "application",
102
+ "article",
103
+ "banner",
104
+ "button",
105
+ "cell",
106
+ "checkbox",
107
+ "columnheader",
108
+ "combobox",
109
+ "complementary",
110
+ "contentinfo",
111
+ "definition",
112
+ "dialog",
113
+ "directory",
114
+ "document",
115
+ "feed",
116
+ "figure",
117
+ "form",
118
+ "grid",
119
+ "gridcell",
120
+ "group",
121
+ "heading",
122
+ "img",
123
+ "link",
124
+ "list",
125
+ "listbox",
126
+ "listitem",
127
+ "log",
128
+ "main",
129
+ "marquee",
130
+ "math",
131
+ "menu",
132
+ "menubar",
133
+ "menuitem",
134
+ "menuitemcheckbox",
135
+ "menuitemradio",
136
+ "navigation",
137
+ "none",
138
+ "note",
139
+ "option",
140
+ "presentation",
141
+ "progressbar",
142
+ "radio",
143
+ "radiogroup",
144
+ "region",
145
+ "row",
146
+ "rowgroup",
147
+ "rowheader",
148
+ "scrollbar",
149
+ "search",
150
+ "searchbox",
151
+ "separator",
152
+ "slider",
153
+ "spinbutton",
154
+ "status",
155
+ "switch",
156
+ "tab",
157
+ "table",
158
+ "tablist",
159
+ "tabpanel",
160
+ "term",
161
+ "textbox",
162
+ "timer",
163
+ "toolbar",
164
+ "tooltip",
165
+ "tree",
166
+ "treegrid",
167
+ "treeitem",
168
+ ]
169
+ | Var[
170
+ Literal[
171
+ "alert",
172
+ "alertdialog",
173
+ "application",
174
+ "article",
175
+ "banner",
176
+ "button",
177
+ "cell",
178
+ "checkbox",
179
+ "columnheader",
180
+ "combobox",
181
+ "complementary",
182
+ "contentinfo",
183
+ "definition",
184
+ "dialog",
185
+ "directory",
186
+ "document",
187
+ "feed",
188
+ "figure",
189
+ "form",
190
+ "grid",
191
+ "gridcell",
192
+ "group",
193
+ "heading",
194
+ "img",
195
+ "link",
196
+ "list",
197
+ "listbox",
198
+ "listitem",
199
+ "log",
200
+ "main",
201
+ "marquee",
202
+ "math",
203
+ "menu",
204
+ "menubar",
205
+ "menuitem",
206
+ "menuitemcheckbox",
207
+ "menuitemradio",
208
+ "navigation",
209
+ "none",
210
+ "note",
211
+ "option",
212
+ "presentation",
213
+ "progressbar",
214
+ "radio",
215
+ "radiogroup",
216
+ "region",
217
+ "row",
218
+ "rowgroup",
219
+ "rowheader",
220
+ "scrollbar",
221
+ "search",
222
+ "searchbox",
223
+ "separator",
224
+ "slider",
225
+ "spinbutton",
226
+ "status",
227
+ "switch",
228
+ "tab",
229
+ "table",
230
+ "tablist",
231
+ "tabpanel",
232
+ "term",
233
+ "textbox",
234
+ "timer",
235
+ "toolbar",
236
+ "tooltip",
237
+ "tree",
238
+ "treegrid",
239
+ "treeitem",
240
+ ]
241
+ ]
242
+ | None = None,
243
+ slot: Var[str] | str | None = None,
244
+ spell_check: Var[bool] | bool | None = None,
245
+ tab_index: Var[int] | int | None = None,
246
+ title: Var[str] | str | None = None,
247
+ style: Sequence[Mapping[str, Any]]
248
+ | Mapping[str, Any]
249
+ | Var[Mapping[str, Any]]
250
+ | Breakpoints
251
+ | None = None,
252
+ key: Any | None = None,
253
+ id: Any | None = None,
254
+ ref: Var | None = None,
255
+ class_name: Any | None = None,
256
+ autofocus: bool | None = None,
257
+ custom_attrs: dict[str, Var | Any] | None = None,
258
+ on_blur: EventType[()] | None = None,
259
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
260
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
261
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
262
+ on_focus: EventType[()] | None = None,
263
+ on_mount: EventType[()] | None = None,
264
+ on_mouse_down: EventType[()] | None = None,
265
+ on_mouse_enter: EventType[()] | None = None,
266
+ on_mouse_leave: EventType[()] | None = None,
267
+ on_mouse_move: EventType[()] | None = None,
268
+ on_mouse_out: EventType[()] | None = None,
269
+ on_mouse_over: EventType[()] | None = None,
270
+ on_mouse_up: EventType[()] | None = None,
271
+ on_scroll: EventType[()] | None = None,
272
+ on_scroll_end: EventType[()] | None = None,
273
+ on_unmount: EventType[()] | None = None,
274
+ **props,
275
+ ) -> ReactRouterLink:
276
+ """Create the component.
277
+
278
+ Args:
279
+ *children: The children of the component.
280
+ to: The page to link to.
281
+ replace: Replaces the current entry in the history stack instead of pushing a new one onto it.
282
+ reload_document: 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>).
283
+ prevent_scroll_reset: 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.
284
+ discover: Defines the link discovery behavior
285
+ view_transition: Enables a View Transition for this navigation.
286
+ download: Specifies that the target (the file specified in the href attribute) will be downloaded when a user clicks on the hyperlink.
287
+ href: Specifies the URL of the page the link goes to
288
+ href_lang: Specifies the language of the linked document
289
+ media: Specifies what media/device the linked document is optimized for
290
+ ping: Specifies which referrer is sent when fetching the resource
291
+ referrer_policy: Specifies the relationship between the current document and the linked document
292
+ rel: Specifies the relationship between the linked document and the current document
293
+ target: Specifies where to open the linked document
294
+ access_key: Provides a hint for generating a keyboard shortcut for the current element.
295
+ auto_capitalize: Controls whether and how text input is automatically capitalized as it is entered/edited by the user.
296
+ content_editable: Indicates whether the element's content is editable.
297
+ context_menu: Defines the ID of a <menu> element which will serve as the element's context menu.
298
+ dir: Defines the text direction. Allowed values are ltr (Left-To-Right) or rtl (Right-To-Left)
299
+ draggable: Defines whether the element can be dragged.
300
+ enter_key_hint: Hints what media types the media element is able to play.
301
+ hidden: Defines whether the element is hidden.
302
+ input_mode: Defines the type of the element.
303
+ item_prop: Defines the name of the element for metadata purposes.
304
+ lang: Defines the language used in the element.
305
+ role: Defines the role of the element.
306
+ slot: Assigns a slot in a shadow DOM shadow tree to an element.
307
+ spell_check: Defines whether the element may be checked for spelling errors.
308
+ tab_index: Defines the position of the current element in the tabbing order.
309
+ title: Defines a tooltip for the element.
310
+ style: The style of the component.
311
+ key: A unique key for the component.
312
+ id: The id for the component.
313
+ ref: The Var to pass as the ref to the component.
314
+ class_name: The class name for the component.
315
+ autofocus: Whether the component should take the focus once the page is loaded
316
+ custom_attrs: custom attribute
317
+ **props: The props of the component.
318
+
319
+ Returns:
320
+ The component.
321
+ """
322
+
323
+ _KNOWN_REACT_ROUTER_LINK_PROPS = frozenset(ReactRouterLink.get_props())
21
324
 
22
325
  class Link(RadixThemesComponent, A, MemoizationLeaf, MarkdownComponentMap):
23
326
  def add_imports(self) -> ImportDict: ...
24
- @overload
25
327
  @classmethod
26
- def create( # type: ignore
328
+ def create(
27
329
  cls,
28
330
  *children,
29
331
  as_child: Var[bool] | bool | None = None,
@@ -337,9 +639,9 @@ class Link(RadixThemesComponent, A, MemoizationLeaf, MarkdownComponentMap):
337
639
  autofocus: bool | None = None,
338
640
  custom_attrs: dict[str, Var | Any] | None = None,
339
641
  on_blur: EventType[()] | None = None,
340
- on_click: EventType[()] | None = None,
341
- on_context_menu: EventType[()] | None = None,
342
- on_double_click: EventType[()] | None = None,
642
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
643
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
644
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
343
645
  on_focus: EventType[()] | None = None,
344
646
  on_mount: EventType[()] | None = None,
345
647
  on_mouse_down: EventType[()] | None = None,
@@ -350,6 +652,7 @@ class Link(RadixThemesComponent, A, MemoizationLeaf, MarkdownComponentMap):
350
652
  on_mouse_over: EventType[()] | None = None,
351
653
  on_mouse_up: EventType[()] | None = None,
352
654
  on_scroll: EventType[()] | None = None,
655
+ on_scroll_end: EventType[()] | None = None,
353
656
  on_unmount: EventType[()] | None = None,
354
657
  **props,
355
658
  ) -> Link: